From 6cca8ca5733d914ccdf902a514dc3a097e1215c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Albertin?= Date: Wed, 24 Oct 2012 12:19:58 +0000 Subject: [PATCH] [maven-release-plugin] copy for tag JONAS_DOC_5_3_0_M7 --- jonas_doc/.gitignore => .gitignore | 0 jonas_doc/.project => .project | 0 jonas_doc/README => README | 0 {jonas_doc/core => core}/build.properties | 0 {jonas_doc/core => core}/build.xml | 0 {jonas_doc/core => core}/olddoc/Admin.html | 0 {jonas_doc/core => core}/olddoc/Cmi.html | 0 {jonas_doc/core => core}/olddoc/Deployer.html | 0 {jonas_doc/core => core}/olddoc/Domain.html | 0 {jonas_doc/core => core}/olddoc/JOnASWP.html | 0 .../olddoc/JOnASWebServices.html | 0 {jonas_doc/core => core}/olddoc/MBeans.html | 0 .../core => core}/olddoc/PG_Client.html | 0 .../core => core}/olddoc/PG_Connector.html | 0 .../core => core}/olddoc/PG_Deployment.html | 0 .../olddoc/PG_EarDeployment.html | 0 .../core => core}/olddoc/PG_Entity.html | 0 .../core => core}/olddoc/PG_Environment.html | 0 .../core => core}/olddoc/PG_J2eeApps.html | 0 .../core => core}/olddoc/PG_JmsGuide.html | 0 .../core => core}/olddoc/PG_LogModules.html | 0 .../core => core}/olddoc/PG_MsgDrvBean.html | 0 .../core => core}/olddoc/PG_Packaging.html | 0 .../core => core}/olddoc/PG_Security.html | 0 .../core => core}/olddoc/PG_Session.html | 0 .../core => core}/olddoc/PG_Transaction.html | 0 {jonas_doc/core => core}/olddoc/PG_War.html | 0 {jonas_doc/core => core}/olddoc/Services.html | 0 .../core => core}/olddoc/ant-ejbjar.html | 0 {jonas_doc/core => core}/olddoc/clusterd.html | 0 .../core => core}/olddoc/clustering.html | 0 {jonas_doc/core => core}/olddoc/common.css | 0 .../olddoc/howto/Clustering.html | 0 .../core => core}/olddoc/howto/Firewall.html | 0 .../olddoc/howto/JMSClustering.html | 0 .../howto/JORAMdistributed_JOnAS_4_1.html | 0 .../olddoc/howto/JSR160_support.html | 0 .../olddoc/howto/JonasArchi.html | 0 .../olddoc/howto/JonasMBeansHowTo.html | 0 .../olddoc/howto/WebSphereMQ.html | 0 .../olddoc/howto/Win32Service.html | 0 .../AutomaticClusterConfiguration.html | 0 .../ManualClusterConfiguration.html | 0 .../olddoc/howto/clusterdetails/c-jdbc.html | 0 .../olddoc/howto/clusterdetails/director.html | 0 .../clusterdetails/mod_jk2-to-mod_jk.html | 0 .../mod_jk2_embeddedtomcat.html | 0 .../clusterdetails/mod_jk_embeddedtomcat.html | 0 .../olddoc/howto/clusterdetails/sequoia.html | 0 .../core => core}/olddoc/howto/common.css | 0 .../olddoc/howto/emb-images/emb-component.png | Bin .../olddoc/howto/emb-images/emb-deps.png | Bin .../olddoc/howto/emb-images/mfb.png | Bin .../howto/emb-images/src/emb-component.svg | 0 .../olddoc/howto/emb-images/src/emb-deps.svg | 0 .../olddoc/howto/emb-images/src/mfb.svg | 0 .../olddoc/howto/images/JOnASJMX.gif | Bin .../olddoc/howto/images/cluster1.gif | Bin .../howto/images/clusterfiles/Apache.jpg | Bin .../howto/images/clusterfiles/Archi1.jpg | Bin .../howto/images/clusterfiles/Archi2.jpg | Bin .../howto/images/clusterfiles/Archi3.jpg | Bin .../howto/images/clusterfiles/Archi4.jpg | Bin .../howto/images/clusterfiles/Archi5.jpg | Bin .../images/clusterfiles/Architecture.jpg | Bin .../howto/images/clusterfiles/EJBCont.jpg | Bin .../howto/images/clusterfiles/FullJOnAS.jpg | Bin .../howto/images/clusterfiles/JOnASEJB.jpg | Bin .../howto/images/clusterfiles/JOnASWeb.jpg | Bin .../olddoc/howto/images/clusterfiles/Node.jpg | Bin .../howto/images/clusterfiles/Thumbs.db | Bin .../howto/images/clusterfiles/WebCont.jpg | Bin .../howto/images/clusterfiles/common.css | 0 .../clusterfiles/sampleCluster2Screen.GIF | Bin .../jmsclustering/JmsClustering-queues.jpg | Bin .../jmsclustering/JmsClustering-topics.jpg | Bin .../howto/images/jmsclustering/joram.jpg | Bin .../howto/images/jmsclustering/joram_ha.jpg | Bin .../olddoc/howto/images/jmsclustering/mdb.jpg | Bin .../howto/images/jmsclustering/mdb_config.jpg | Bin .../howto/images/jmsclustering/queue.jpg | Bin .../howto/images/jmsclustering/topic.jpg | Bin .../olddoc/howto/images/jonas_cmp.gif | Bin .../olddoc/howto/images/jonasarch.gif | Bin .../recovimg1.jpg | Bin .../recovimg2.jpg | Bin .../recovimg3.jpg | Bin .../recovimg4.jpg | Bin .../recovimg5.jpg | Bin .../recovimg6.jpg | Bin .../recovimg7.jpg | Bin .../recovimg8.jpg | Bin .../olddoc/howto/images/logo_jonas.jpg | Bin .../olddoc/howto/install_j2ee.html | 0 .../olddoc/howto/install_jonas.html | 0 .../olddoc/howto/ws/sample-deploy.wsdd | 0 .../olddoc/howto/ws/sample-server-config.wsdd | 0 .../olddoc/howto/ws/sample-web.xml | 0 .../core => core}/olddoc/images/AreaGraph.png | Bin .../olddoc/images/JonasAdmin.gif | Bin .../olddoc/images/JonasAreas.png | Bin .../core => core}/olddoc/images/WP_distr.gif | Bin .../olddoc/images/classloaders.png | Bin .../core => core}/olddoc/images/cluster1.gif | Bin .../core => core}/olddoc/images/clusterd.gif | Bin .../olddoc/images/clustering.gif | Bin .../olddoc/images/cmi-cluster-stub.gif | Bin .../core => core}/olddoc/images/cmi-jndi.gif | Bin .../core => core}/olddoc/images/cmi.gif | Bin .../olddoc/images/domain_new.gif | Bin .../core => core}/olddoc/images/eb_img_31.gif | Bin .../core => core}/olddoc/images/favicon.ico | Bin .../core => core}/olddoc/images/j2ee.gif | Bin .../core => core}/olddoc/images/jcaarch.gif | Bin .../core => core}/olddoc/images/jconsole.png | Bin .../olddoc/images/jonas48repscenarios.jpg | Bin .../core => core}/olddoc/images/jonasTree.png | Bin .../core => core}/olddoc/images/jonasarch.gif | Bin .../olddoc/images/logo_jonas.jpg | Bin .../core => core}/olddoc/images/pix.gif | Bin .../core => core}/olddoc/images/roles1.gif | Bin .../core => core}/olddoc/images/sfsb-rep.jpg | Bin .../core => core}/olddoc/images/ws_client.jpg | Bin .../olddoc/images/ws_endpoint.jpg | Bin {jonas_doc/core => core}/olddoc/index.html | 0 {jonas_doc/core => core}/pom.xml | 0 .../src/docbook/doc-en/Glossary.xml | 0 .../docbook/doc-en/admin/JSR160_support.xml | 0 .../src/docbook/doc-en/admin/admindefs.xml | 0 .../docbook/doc-en/admin/adminfunctions.xml | 0 .../src/docbook/doc-en/admin/adminmbeans.xml | 0 .../src/docbook/doc-en/admin/admintools.xml | 0 .../src/docbook/doc-en/admin/adminuse.xml | 0 .../src/docbook/doc-en/admin/install.xml | 0 .../src/docbook/doc-en/admin/mejb.xml | 0 .../src/docbook/doc-en/admin/mejbaccess.xml | 0 .../docbook/doc-en/admin/threadStackDump.xml | 0 .../docbook/doc-en/administration_guide.xml | 0 .../src/docbook/doc-en/ant_tasks.xml | 0 .../docbook/doc-en/anttasks/ant_ejbjar.xml | 0 .../src/docbook/doc-en/anttasks/ant_genic.xml | 0 .../src/docbook/doc-en/anttasks/ant_jonas.xml | 0 .../docbook/doc-en/anttasks/ant_jonasbase.xml | 0 .../src/docbook/doc-en/anttasks/ant_newjc.xml | 0 .../docbook/doc-en/anttasks/ant_property.xml | 0 .../doc-en/anttasks/ant_serverdeploy.xml | 0 .../src/docbook/doc-en/anttasks/ant_wsgen.xml | 0 .../clustering/clustering-variables.xml | 0 .../doc-en/clustering/configuration/ejb.xml | 0 .../doc-en/clustering/configuration/jms.xml | 0 .../doc-en/clustering/configuration/web.xml | 0 .../clustering/examples/sampleCluster2.xml | 0 .../clustering/examples/sampleCluster3.xml | 0 .../src/docbook/doc-en/clustering/faq/faq.xml | 0 .../doc-en/clustering/management/cluster.xml | 0 .../doc-en/clustering/management/clusterd.xml | 0 .../doc-en/clustering/management/cmi.xml | 0 .../doc-en/clustering/management/domain.xml | 0 .../doc-en/clustering/management/ha.xml | 0 .../clustering/principles/clustering.xml | 0 .../clustering/principles/management.xml | 0 .../clustering/principles/terminology.xml | 0 .../doc-en/clustering/tooling/jasmine.xml | 0 .../doc-en/clustering/tooling/jkmanager.xml | 0 .../src/docbook/doc-en/clustering_guide.xml | 0 .../docbook/doc-en/cmi/META-INF/MANIFEST.MF | 0 .../org.ow2.cmi.doc/cmi-doc/pom.properties | 0 .../maven/org.ow2.cmi.doc/cmi-doc/pom.xml | 0 .../src/docbook/doc-en/cmi/developerguide.xml | 0 .../docbook/doc-en/cmi/images/algoexample.png | Bin .../docbook/doc-en/cmi/images/algomodel.png | Bin .../doc-en/cmi/images/contents_of_jvm.png | Bin .../docbook/doc-en/cmi/images/interfaces.png | Bin .../docbook/doc-en/cmi/images/lazy_lookup.png | Bin .../doc-en/cmi/images/load_balanceables.png | Bin .../docbook/doc-en/cmi/images/logo-cmi.png | Bin .../docbook/doc-en/cmi/images/managers.png | Bin .../doc-en/cmi/images/sep_control_service.png | Bin .../docbook/doc-en/cmi/integratorguide.xml | 0 .../src/docbook/doc-en/cmi/userguide.xml | 0 .../src/docbook/doc-en/command_guide.xml | 0 .../doc-en/commands/configuration_newjb.xml | 0 .../doc-en/commands/configuration_newjc.xml | 0 .../commands/configuration_raconfig.xml | 0 .../src/docbook/doc-en/commands/genic.xml | 0 .../src/docbook/doc-en/commands/jclient.xml | 0 .../src/docbook/doc-en/commands/jms.xml | 0 .../src/docbook/doc-en/commands/jonas.xml | 0 .../doc-en/config/jonas_properties.xml | 0 .../docbook/doc-en/config/jonasbase_conf.xml | 0 .../doc-en/config/jonasbase_creation.xml | 0 .../doc-en/config/jonasbase_structure.xml | 0 .../doc-en/config/jonasroot_structure.xml | 0 .../docbook/doc-en/configuration_guide.xml | 0 .../src/docbook/doc-en/connector_pg.xml | 0 .../doc-en/continuous_integration_guide.xml | 0 .../src/docbook/doc-en/deploy/ear.xml | 0 .../src/docbook/doc-en/deploy/ejb2.xml | 0 .../src/docbook/doc-en/deploy/principes.xml | 0 .../src/docbook/doc-en/deploy/war.xml | 0 .../src/docbook/doc-en/deploy/webapps.xml | 0 .../src/docbook/doc-en/deployer_guide.xml | 0 .../deployment-plan-common.xml | 0 .../deployment-plan-element-attribute.xml | 0 .../deployment-plan-mixed.xml | 0 .../deployment-plan-sample-example.xml | 0 .../deployment-plans/deployment-plan-type.xml | 0 .../deployment-plans/deployment-plan.xml | 0 .../doc-en/deployment-plans/introduction.xml | 0 .../jonas/jonas-deployment-plan.xml | 0 .../doc-en/deployment-plans/repositories.xml | 0 .../deployment-type-specific-data.xml | 0 .../typespecific/maven2-deployment-data.xml | 0 .../typespecific/obr-deployment-data.xml | 0 .../typespecific/url-deployment-data.xml | 0 .../docbook/doc-en/deployment-plans_guide.xml | 0 .../src/docbook/doc-en/developerguide.xml | 0 .../doc-en/developerguide/building.xml | 0 .../doc-en/developerguide/code_convention.xml | 0 .../doc-en/developerguide/contributing.xml | 0 .../developerguide/getting_from_svn.xml | 0 .../docbook/doc-en/developerguide/running.xml | 0 .../doc-en/developerguide/usingexamples.xml | 0 .../src/docbook/doc-en/eardeploy.xml | 0 .../doc-en/easybeans/META-INF/MANIFEST.MF | 0 .../easybeans-doc/pom.properties | 0 .../easybeans-doc/pom.xml | 0 .../doc-en/easybeans/advanced_topics.xml | 0 .../src/docbook/doc-en/easybeans/building.xml | 0 .../doc-en/easybeans/code_convention.xml | 0 .../doc-en/easybeans/configuration_file.xml | 0 .../docbook/doc-en/easybeans/contributing.xml | 0 .../doc-en/easybeans/creating_ejbs.xml | 0 .../doc-en/easybeans/developerguide.xml | 0 .../doc-en/easybeans/ejb3_introduction.xml | 0 .../doc-en/easybeans/getting_from_svn.xml | 0 .../doc-en/easybeans/helloworldbean.xml | 0 .../easybeans/howto/gwt-ejb3-sudoku.png | Bin .../doc-en/easybeans/howto/gwt-ejb3.xml | 0 .../docbook/doc-en/easybeans/howto/howtos.xml | 0 .../src/docbook/doc-en/easybeans/running.xml | 0 .../doc-en/easybeans/smart_factory.xml | 0 .../doc-en/easybeans/tests/building.xml | 0 .../doc-en/easybeans/tests/contribute.xml | 0 .../doc-en/easybeans/tests/howto_00.xml | 0 .../doc-en/easybeans/tests/introduction.xml | 0 .../doc-en/easybeans/tests/packages.xml | 0 .../doc-en/easybeans/tests/results.xml | 0 .../doc-en/easybeans/tests/running.xml | 0 .../doc-en/easybeans/tests/testguide.xml | 0 .../docbook/doc-en/easybeans/userguide.xml | 0 .../doc-en/easybeans/usingexamples.xml | 0 .../docbook/doc-en/ejb2_programmer_guide.xml | 0 .../docbook/doc-en/ejb3_programmer_guide.xml | 0 .../src/docbook/doc-en/essai.xml | 0 .../src/docbook/doc-en/essai2.xml | 0 .../src/docbook/doc-en/essaibook.xml | 0 .../docbook/doc-en/getting_started_guide.xml | 0 .../src/docbook/doc-en/howto.xml | 0 .../src/docbook/doc-en/howto_addons.xml | 0 .../docbook/doc-en/howto_auditListening.xml | 0 .../docbook/doc-en/howto_auditPersistence.xml | 0 .../src/docbook/doc-en/howto_configadmin.xml | 0 .../src/docbook/doc-en/howto_deployme.xml | 0 .../doc-en/howto_distributed_joram.xml | 0 .../src/docbook/doc-en/howto_firewall.xml | 0 .../doc-en/howto_install_jdbc_driver.xml | 0 .../src/docbook/doc-en/howto_jndi.xml | 0 .../src/docbook/doc-en/howto_mbeans.xml | 0 .../src/docbook/doc-en/howto_packaging.xml | 0 .../src/docbook/doc-en/howto_services.xml | 0 .../doc-en/howto_services_on_demand.xml | 0 .../howto_track_jdbc_connectionleaks.xml | 0 .../src/docbook/doc-en/howto_use_cdi.xml | 0 .../src/docbook/doc-en/howto_use_jaxrs.xml | 0 .../src/docbook/doc-en/howto_webspheremq.xml | 0 .../docbook/doc-en/howto_win32_service.xml | 0 .../src/docbook/doc-en/howto_wrapper.xml | 0 .../src/docbook/doc-en/index.html | 0 .../docbook/doc-en/install/install_j2ee.xml | 0 .../docbook/doc-en/install/install_jonas.xml | 0 .../src/docbook/doc-en/j2ee/classloader.xml | 0 .../src/docbook/doc-en/j2ee/j2ee-app.xml | 0 .../src/docbook/doc-en/j2ee/j2ee-ejb.xml | 0 .../src/docbook/doc-en/j2ee/j2ee-web.xml | 0 .../src/docbook/doc-en/j2eeclient_pg.xml | 0 .../docbook/doc-en/j2eeprogrammerguide.xml | 0 .../docbook/doc-en/jaxws_developer_guide.xml | 0 .../src/docbook/doc-en/jonas-transactions.xml | 0 .../doc-en/loaders/basics-of-classloading.xml | 0 .../doc-en/loaders/classloading-in-jonas.xml | 0 .../docbook/doc-en/loaders/configuration.xml | 0 .../src/docbook/doc-en/loaders/glossary.xml | 0 .../src/docbook/doc-en/loaders/tips.xml | 0 .../src/docbook/doc-en/loaders/tooling.xml | 0 .../src/docbook/doc-en/log/config.xml | 0 .../doc-en/mastering-jonas-classloaders.xml | 0 .../docbook/doc-en/migration/jonas_4_7.xml | 0 .../docbook/doc-en/migration/jonas_4_8.xml | 0 .../docbook/doc-en/migration/jonas_4_9.xml | 0 .../docbook/doc-en/migration/jonas_5_0.xml | 0 .../docbook/doc-en/migration/versionAPI.xml | 0 .../doc-en/migration/versionModules.xml | 0 .../src/docbook/doc-en/migration_guide.xml | 0 .../src/docbook/doc-en/multitenant_guide.xml | 0 .../src/docbook/doc-en/protocols/config.xml | 0 .../src/docbook/doc-en/ra/JDBCRA.xml | 0 .../src/docbook/doc-en/ra/JDBCXML.xml | 0 .../src/docbook/doc-en/ra/JMSRA.xml | 0 .../doc-en/security/configsecurity.xml | 0 .../docbook/doc-en/services/cmi/config.xml | 0 .../src/docbook/doc-en/services/db/config.xml | 0 .../docbook/doc-en/services/dbm/config.xml | 0 .../doc-en/services/dbm/jdbcdatasource.xml | 0 .../doc-en/services/depmonitor/config.xml | 0 .../doc-en/services/discovery/config.xml | 0 .../docbook/doc-en/services/ear/config.xml | 0 .../doc-en/services/ejb2/cmp2_usage.xml | 0 .../docbook/doc-en/services/ejb2/config.xml | 0 .../doc-en/services/ejb2/db_access_bmp.xml | 0 .../doc-en/services/ejb2/db_access_cmp.xml | 0 .../docbook/doc-en/services/ejb2/deploy.xml | 0 .../docbook/doc-en/services/ejb2/entity.xml | 0 .../doc-en/services/ejb2/entity_tuning.xml | 0 .../doc-en/services/ejb2/environment.xml | 0 .../src/docbook/doc-en/services/ejb2/mdb.xml | 0 .../doc-en/services/ejb2/mdb_tuning.xml | 0 .../doc-en/services/ejb2/packaging.xml | 0 .../docbook/doc-en/services/ejb2/security.xml | 0 .../docbook/doc-en/services/ejb2/session.xml | 0 .../doc-en/services/ejb2/session_tuning.xml | 0 .../doc-en/services/ejb2/transaction.xml | 0 .../docbook/doc-en/services/ejb3/config.xml | 0 .../src/docbook/doc-en/services/ha/config.xml | 0 .../docbook/doc-en/services/jaxrpc/config.xml | 0 .../docbook/doc-en/services/jaxws/config.xml | 0 .../docbook/doc-en/services/jmx/config.xml | 0 .../docbook/doc-en/services/jtm/config.xml | 0 .../docbook/doc-en/services/mail/config.xml | 0 .../doc-en/services/registry/config.xml | 0 .../doc-en/services/resource/config.xml | 0 .../services/resource/connector_packaging.xml | 0 .../resource/connector_principles.xml | 0 .../services/resource/connector_using.xml | 0 .../doc-en/services/resource/jonas-ra.xml | 0 .../doc-en/services/security/config.xml | 0 .../doc-en/services/smartclient/config.xml | 0 .../doc-en/services/versioning/about.xml | 0 .../doc-en/services/versioning/config.xml | 0 .../services/versioning/versioning-ejb.xml | 0 .../services/versioning/versioning-web.xml | 0 .../src/docbook/doc-en/services/wc/config.xml | 0 .../docbook/doc-en/services/web/config.xml | 0 .../doc-en/services/web/webcomponent.xml | 0 .../docbook/doc-en/services/web/webdeploy.xml | 0 .../doc-en/services/web/webpackaging.xml | 0 .../src/docbook/doc-en/services/wm/config.xml | 0 .../doc-en/services/wsdl-publisher/config.xml | 0 .../src/docbook/doc-en/terminology.xml | 0 .../doc-en/transactions/introduction.xml | 0 .../transactions/jdbc-resources-in-jonas.xml | 0 .../transactions/transactional-resources.xml | 0 .../transactions-and-exceptions.xml | 0 .../transactions/transactions-in-jonas.xml | 0 .../src/docbook/doc-en/variables.xml | 0 .../src/docbook/doc-en/web_pg.xml | 0 .../src/docbook/doc-en/xmltips.xml | 0 .../src/docbook/doc-fr/howtoJOnASDocBook.xml | 0 .../core => core}/src/pom/jonas-doc-en.pom | 0 .../src/resources/WEB-INF/jonas-web.xml | 0 .../src/resources/WEB-INF/web.xml | 0 .../core => core}/src/resources/chunk.xsl | 0 .../core => core}/src/resources/common.css | 0 .../core => core}/src/resources/common.xml | 0 {jonas_doc/core => core}/src/resources/fo.xsl | 0 .../core => core}/src/resources/footer.xml | 0 .../core => core}/src/resources/html.xsl | 0 .../src/resources/images}/JonasSmall.png | Bin .../src/resources/images/WP_distr.gif | Bin .../images/admin-webmodule-virtual.png | Bin .../src/resources/images/admintree.gif | Bin .../images/bamboo/Bamboo_WorkDirectory.gif | Bin .../bamboo/BuildPlan_AntBuildDependency.gif | Bin .../src/resources/images/bamboo/Builders.gif | Bin .../bamboo/Dashboard_CurrentActivty.gif | Bin .../resources/images/bamboo/JDK_tailor.gif | Bin .../bamboo/TestBuildPlan_ActivityLog.gif | Bin .../bamboo/TestBuildPlan_Dashboard_Run.gif | Bin .../images/bamboo/TestsBuild_Artifacts.gif | Bin .../bamboo/TestsBuild_BuilderConfig.gif | Bin .../images/bamboo/TestsBuild_PlanDetail.gif | Bin .../images/bamboo/TestsBuild_sourcerepos.gif | Bin .../images/bamboo/ant_BuilderConfig.gif | Bin .../images/bamboo/ant_createplan.gif | Bin .../src/resources/images/bamboo/jb.config.gif | Bin .../resources/images/bamboo/main_tailor.gif | Bin .../images/bamboo/maven_BuildArtifacts.gif | Bin .../images/bamboo/maven_BuildNotification.gif | Bin .../images/bamboo/maven_BuilderConfig.gif | Bin .../bamboo/maven_CheckoutAndBuilding.gif | Bin .../images/bamboo/maven_PlanDetail.gif | Bin .../images/bamboo/maven_PostAction.gif | Bin .../images/bamboo/maven_sourcerepos_step2.gif | Bin .../src/resources/images/bamboo/variables.gif | Bin .../src/resources/images/callouts/1.png | Bin .../src/resources/images/callouts/10.png | Bin .../src/resources/images/callouts/11.png | Bin .../src/resources/images/callouts/12.png | Bin .../src/resources/images/callouts/13.png | Bin .../src/resources/images/callouts/14.png | Bin .../src/resources/images/callouts/15.png | Bin .../src/resources/images/callouts/2.png | Bin .../src/resources/images/callouts/3.png | Bin .../src/resources/images/callouts/4.png | Bin .../src/resources/images/callouts/5.png | Bin .../src/resources/images/callouts/6.png | Bin .../src/resources/images/callouts/7.png | Bin .../src/resources/images/callouts/8.png | Bin .../src/resources/images/callouts/9.png | Bin .../src/resources/images/caution.png | Bin .../resources/images/clusterfiles/Apache.jpg | Bin .../resources/images/clusterfiles/Archi1.jpg | Bin .../resources/images/clusterfiles/Archi2.jpg | Bin .../resources/images/clusterfiles/Archi3.jpg | Bin .../resources/images/clusterfiles/Archi4.jpg | Bin .../resources/images/clusterfiles/Archi5.jpg | Bin .../images/clusterfiles/Architecture.jpg | Bin .../resources/images/clusterfiles/EJBCont.jpg | Bin .../images/clusterfiles/FullJOnAS.jpg | Bin .../images/clusterfiles/JOnASEJB.jpg | Bin .../images/clusterfiles/JOnASWeb.jpg | Bin .../resources/images/clusterfiles/Node.jpg | Bin .../resources/images/clusterfiles/WebCont.jpg | Bin .../clusterfiles/sampleCluster2Screen.GIF | Bin .../resources/images/clustering/clusterd.png | Bin .../resources/images/clustering/clusterd.svg | 0 .../images/clustering/clustersolution.png | Bin .../images/clustering/clustersolution.svg | 0 .../images/clustering/cmi_cluster.png | Bin .../images/clustering/cmi_cluster.svg | 0 .../images/clustering/cmi_cluster_config.svg | 0 .../cmi_cluster_config_2tiers_client.png | Bin .../cmi_cluster_config_2tiers_server.png | Bin .../cmi_cluster_config_javaclient.png | Bin .../src/resources/images/clustering/cmiv2.png | Bin .../images/clustering/domain.cmi.cluster.png | Bin .../clustering/domain.jk.cluster.member.png | Bin .../images/clustering/domain.jk.cluster.png | Bin .../images/clustering/domainmngt.png | Bin .../images/clustering/domainmngt.svg | 0 .../images/clustering/easybeans-logo.png | Bin .../images/clustering/ejbcluster.png | Bin .../images/clustering/ejbcluster.svg | 0 .../resources/images/clustering/ejbfarm.png | Bin .../resources/images/clustering/ejbfarm.svg | 0 .../images/clustering/httpcluster.png | Bin .../images/clustering/httpcluster.svg | 0 .../resources/images/clustering/httpfarm.png | Bin .../resources/images/clustering/httpfarm.svg | 0 .../images/clustering/jmscluster_a.png | Bin .../images/clustering/jmscluster_a.svg | 0 .../images/clustering/jmscluster_b.png | Bin .../images/clustering/jmscluster_b.svg | 0 .../resources/images/clustering/jmsfarm_a.png | Bin .../resources/images/clustering/jmsfarm_a.svg | 0 .../resources/images/clustering/jmsfarm_b.png | Bin .../resources/images/clustering/jmsfarm_b.svg | 0 .../images/clustering/jonas48repscenarios.jpg | Bin .../images/clustering/logo_jonas2.png | Bin .../images/clustering/myTomcatCluster.gif | Bin .../clustering/registry_replication.png | Bin .../clustering/registry_replication.svg | 0 .../images/clustering/sampleCluster2.png | Bin .../images/clustering/sampleCluster2.svg | 0 .../images/clustering/sampleCluster3.png | Bin .../images/clustering/sampleCluster3.svg | 0 .../images/clustering/sc/jasmine_design.png | Bin .../images/clustering/sc/jasmine_eos.png | Bin .../images/clustering/sc/jkmanager.png | Bin .../sc/jonasadmin_cmi_cluster_tab.png | Bin .../sc/jonasadmin_cmi_mbeans_attr.png | Bin .../sc/jonasadmin_cmi_object_info.png | Bin .../clustering/sc/jonasadmin_cmi_policies.png | Bin .../sc/jonasadmin_cmi_server_info.png | Bin .../clustering/sc/jonasadmin_cmi_servers.png | Bin .../sc/jonasadmin_cmi_strategies.png | Bin .../clustering/sc/jonasadmin_cmi_tab.png | Bin .../screenshot_jonasadmin_cmi_cluster_tab.png | Bin .../screenshot_jonasadmin_cmi_cluster_tab.svg | 0 .../screenshot_jonasadmin_cmi_mbeans_attr.png | Bin .../screenshot_jonasadmin_cmi_mbeans_attr.svg | 0 .../screenshot_jonasadmin_cmi_object_info.png | Bin .../screenshot_jonasadmin_cmi_object_info.svg | 0 .../screenshot_jonasadmin_cmi_policies.png | Bin .../screenshot_jonasadmin_cmi_policies.svg | 0 .../screenshot_jonasadmin_cmi_server_info.png | Bin .../screenshot_jonasadmin_cmi_server_info.svg | 0 .../screenshot_jonasadmin_cmi_servers.png | Bin .../screenshot_jonasadmin_cmi_servers.svg | 0 .../screenshot_jonasadmin_cmi_strategies.png | Bin .../screenshot_jonasadmin_cmi_strategies.svg | 0 .../screenshot_jonasadmin_cmi_tab.png | Bin .../screenshot_jonasadmin_cmi_tab.svg | 0 .../src/resources/images/cmi.gif | Bin .../src/resources/images/connect.gif | Bin .../images/contextRootCustomization.png | Bin .../images/customizedMBeanServer.png | Bin .../src/resources/images/defilement.gif | Bin .../src/resources/images/deployment.gif | Bin .../src/resources/images/draft.png | Bin .../resources/images/earsample-add-author.png | Bin .../images/earsample-architecture.png | Bin .../images/earsample-authentication.png | Bin .../resources/images/earsample-jpa-model.png | Bin .../images/earsample-list-content.png | Bin .../src/resources/images/eb_img_31.gif | Bin .../src/resources/images/editbuttons.gif | Bin .../src/resources/images/filtering-loader.png | Bin .../src/resources/images/firstpage.gif | Bin .../src/resources/images/forgeadmin.gif | Bin .../src/resources/images/graphTest.png | Bin .../src/resources/images/home.png | Bin .../src/resources/images/important.png | Bin .../src/resources/images/info.png | Bin .../src/resources/images/jcaarch.gif | Bin .../images/jconsoleStackDumpList.png | Bin .../images/jconsoleStackDumpOperations.png | Bin .../jmsclustering/Cluster JMS-JORAM-JOnAS.ppt | Bin .../jmsclustering/JmsClustering-queues.jpg | Bin .../jmsclustering/JmsClustering-queues.ppt | Bin .../jmsclustering/JmsClustering-topics.jpg | Bin .../jmsclustering/JmsClustering-topics.ppt | Bin .../resources/images/jmsclustering/joram.jpg | Bin .../images/jmsclustering/joram_ha.jpg | Bin .../resources/images/jmsclustering/mdbHa.ppt | Bin .../images/jmsclustering/mdbclustering.png | Bin .../images/jmsclustering/mdbclustering.svg | 0 .../images/jmsclustering/queuelb.png | Bin .../images/jmsclustering/queuelb.svg | 0 .../resources/images/jmsclustering/topic.jpg | Bin .../src/resources/images/jmxInterceptor.png | Bin .../src/resources/images/jndiInterceptor.png | Bin .../resources/images/jonas-classloaders.png | Bin .../src/resources/images/jonas-header.jpg | Bin .../src/resources/images/jonasAdminDomain.gif | Bin .../resources/images/jonasAdminStackDump.png | Bin .../src/resources/images/jonas_doc.gif | Bin .../images/loaders/bundle-class-space.png | Bin .../resources/images/loaders/console-osgi.png | Bin .../images/loaders/filtering-classloaders.png | Bin .../loaders/jonas-osgi-modules-libext.png | Bin .../loaders/jonas-osgi-modules-ultra-zoom.png | Bin .../images/loaders/jonas-osgi-modules.png | Bin .../resources/images/loaders/jonas-round.png | Bin .../images/loaders/osgi-classloading.gif | Bin .../images/loaders/system-loaders.png | Bin .../src/resources/images/logoow.gif | Bin .../src/resources/images/monologExtension.png | Bin .../src/resources/images/next.png | Bin .../src/resources/images/note.png | Bin .../src/resources/images/output.gif | Bin .../src/resources/images/prev.png | Bin .../src/resources/images/publish.gif | Bin .../resources/images/service-dependencies.png | Bin .../images/sharedASMultitenantLevel.png | Bin .../images/sharedDatabaseAndSchema.png | Bin .../resources/images/tenantAdminIsolation.png | Bin .../src/resources/images/tenantContext.png | Bin .../src/resources/images/tip.png | Bin .../core => core}/src/resources/images/up.png | Bin .../images/versioning-ejb-schema.png | Bin .../images/versioning-general-schema.png | Bin .../src/resources/images/warning.png | Bin .../core => core}/src/resources/index.html | 0 .../core => core}/tools/docbook-5.0/ChangeLog | 0 .../core => core}/tools/docbook-5.0/README | 0 .../core => core}/tools/docbook-5.0/VERSION | 0 .../tools/docbook-5.0/catalog.xml | 0 .../tools/docbook-5.0/docbook.nvdl | 0 .../tools/docbook-5.0/dtd/docbook.dtd | 0 .../tools/docbook-5.0/rng/docbook.rnc | 0 .../tools/docbook-5.0/rng/docbook.rng | 0 .../tools/docbook-5.0/rng/docbookxi.rnc | 0 .../tools/docbook-5.0/rng/docbookxi.rng | 0 .../tools/docbook-5.0/sch/docbook.sch | 0 .../tools/docbook-5.0/tools/db4-entities.pl | 0 .../tools/docbook-5.0/tools/db4-upgrade.xsl | 0 .../tools/docbook-5.0/xsd/docbook.xsd | 0 .../tools/docbook-5.0/xsd/xlink.xsd | 0 .../tools/docbook-5.0/xsd/xml.xsd | 0 .../tools/docbook-xsl-ns-1.76.1/AUTHORS | 0 .../tools/docbook-xsl-ns-1.76.1/BUGS | 0 .../tools/docbook-xsl-ns-1.76.1/COPYING | 0 .../tools/docbook-xsl-ns-1.76.1/INSTALL | 0 .../tools/docbook-xsl-ns-1.76.1/Makefile | 0 .../tools/docbook-xsl-ns-1.76.1/NEWS | 0 .../tools/docbook-xsl-ns-1.76.1/NEWS.html | 0 .../tools/docbook-xsl-ns-1.76.1/NEWS.xml | 0 .../docbook-xsl-ns-1.76.1/RELEASE-NOTES.html | 0 .../docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf | 0 .../docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt | 0 .../docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml | 0 .../tools/docbook-xsl-ns-1.76.1/TODO | 0 .../tools/docbook-xsl-ns-1.76.1/VERSION | 0 .../tools/docbook-xsl-ns-1.76.1/catalog.xml | 0 .../docbook-xsl-ns-1.76.1/common/addns.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/af.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/am.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ar.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/as.xml | 0 .../docbook-xsl-ns-1.76.1/common/ast.xml | 0 .../common/autoidx-kimber.xsl | 0 .../common/autoidx-kosek.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/az.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/bg.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/bn.xml | 0 .../docbook-xsl-ns-1.76.1/common/bn_in.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/bs.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ca.xml | 0 .../docbook-xsl-ns-1.76.1/common/charmap.xml | 0 .../docbook-xsl-ns-1.76.1/common/charmap.xsl | 0 .../docbook-xsl-ns-1.76.1/common/common.xml | 0 .../docbook-xsl-ns-1.76.1/common/common.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/cs.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/cy.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/da.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/de.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/el.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/en.xml | 0 .../docbook-xsl-ns-1.76.1/common/entities.ent | 0 .../tools/docbook-xsl-ns-1.76.1/common/eo.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/es.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/et.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/eu.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/fa.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/fi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/fr.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ga.xml | 0 .../docbook-xsl-ns-1.76.1/common/gentext.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/gl.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/gu.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/he.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/hi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/hr.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/hu.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/id.xml | 0 .../docbook-xsl-ns-1.76.1/common/index.html | 0 .../common/index.html?C=D;O=A | 0 .../common/index.html?C=D;O=D | 0 .../common/index.html?C=M;O=A | 0 .../common/index.html?C=M;O=D | 0 .../common/index.html?C=N;O=A | 0 .../common/index.html?C=N;O=D | 0 .../common/index.html?C=S;O=A | 0 .../common/index.html?C=S;O=D | 0 .../common/insertfile.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/is.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/it.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ja.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ka.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/kn.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ko.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ky.xml | 0 .../docbook-xsl-ns-1.76.1/common/l10n.dtd | 0 .../docbook-xsl-ns-1.76.1/common/l10n.xml | 0 .../docbook-xsl-ns-1.76.1/common/l10n.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/la.xml | 0 .../docbook-xsl-ns-1.76.1/common/labels.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/lt.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/lv.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ml.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/mn.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/mr.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/nb.xml | 0 .../docbook-xsl-ns-1.76.1/common/nds.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/nl.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/nn.xml | 0 .../docbook-xsl-ns-1.76.1/common/olink.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/or.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/pa.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/pi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/pi.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/pl.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/pt.xml | 0 .../docbook-xsl-ns-1.76.1/common/pt_br.xml | 0 .../docbook-xsl-ns-1.76.1/common/refentry.xml | 0 .../docbook-xsl-ns-1.76.1/common/refentry.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/ro.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ru.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/sk.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/sl.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/sq.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/sr.xml | 0 .../docbook-xsl-ns-1.76.1/common/sr_Latn.xml | 0 .../common/subtitles.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/sv.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/ta.xml | 0 .../docbook-xsl-ns-1.76.1/common/table.xsl | 0 .../common/targetdatabase.dtd | 0 .../docbook-xsl-ns-1.76.1/common/targets.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/te.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/th.xml | 0 .../docbook-xsl-ns-1.76.1/common/titles.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/tl.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/tr.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/uk.xml | 0 .../docbook-xsl-ns-1.76.1/common/utility.xml | 0 .../docbook-xsl-ns-1.76.1/common/utility.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/common/vi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/xh.xml | 0 .../tools/docbook-xsl-ns-1.76.1/common/zh.xml | 0 .../docbook-xsl-ns-1.76.1/common/zh_cn.xml | 0 .../docbook-xsl-ns-1.76.1/common/zh_tw.xml | 0 .../docbook-xsl-ns-1.76.1/docsrc/authors.xml | 0 .../docsrc/copyright.xml | 0 .../docbook-xsl-ns-1.76.1/docsrc/index.html | 0 .../docsrc/index.html?C=D;O=A | 0 .../docsrc/index.html?C=D;O=D | 0 .../docsrc/index.html?C=M;O=A | 0 .../docsrc/index.html?C=M;O=D | 0 .../docsrc/index.html?C=N;O=A | 0 .../docsrc/index.html?C=N;O=D | 0 .../docsrc/index.html?C=S;O=A | 0 .../docsrc/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/docsrc/license.xml | 0 .../docbook-xsl-ns-1.76.1/docsrc/page.png | Bin .../docsrc/reference.css | 0 .../docsrc/reference.xml | 0 .../docsrc/reference.xml.included | 0 .../docbook-xsl-ns-1.76.1/docsrc/warranty.xml | 0 .../docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl | 0 .../eclipse/eclipse3.xsl | 0 .../docbook-xsl-ns-1.76.1/eclipse/index.html | 0 .../eclipse/index.html?C=D;O=A | 0 .../eclipse/index.html?C=D;O=D | 0 .../eclipse/index.html?C=M;O=A | 0 .../eclipse/index.html?C=M;O=D | 0 .../eclipse/index.html?C=N;O=A | 0 .../eclipse/index.html?C=N;O=D | 0 .../eclipse/index.html?C=S;O=A | 0 .../eclipse/index.html?C=S;O=D | 0 .../eclipse/profile-eclipse.xsl | 0 .../docbook-xsl-ns-1.76.1/epub/docbook.xsl | 0 .../docbook-xsl-ns-1.76.1/epub/index.html | 0 .../epub/index.html?C=D;O=A | 0 .../epub/index.html?C=D;O=D | 0 .../epub/index.html?C=M;O=A | 0 .../epub/index.html?C=M;O=D | 0 .../epub/index.html?C=N;O=A | 0 .../epub/index.html?C=N;O=D | 0 .../epub/index.html?C=S;O=A | 0 .../epub/index.html?C=S;O=D | 0 .../extensions/LICENSE.txt | 0 .../extensions/NOTICE.txt | 0 .../extensions/docbook.py | 0 .../extensions/index.html | 0 .../extensions/index.html?C=D;O=A | 0 .../extensions/index.html?C=D;O=D | 0 .../extensions/index.html?C=M;O=A | 0 .../extensions/index.html?C=M;O=D | 0 .../extensions/index.html?C=N;O=A | 0 .../extensions/index.html?C=N;O=D | 0 .../extensions/index.html?C=S;O=A | 0 .../extensions/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/extensions/xslt.py | 0 .../tools/docbook-xsl-ns-1.76.1/fo/admon.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/annotations.xsl | 0 .../fo/autoidx-kimber.xsl | 0 .../fo/autoidx-kosek.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/autoidx.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/autotoc.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/axf.xsl | 0 .../fo/biblio-iso690.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/block.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/callout.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/component.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/division.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/docbook.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/fo.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/footnote.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/fop.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/formal.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/glossary.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/graphics.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/highlight.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/htmltbl.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/index.html | 0 .../fo/index.html?C=D;O=A | 0 .../fo/index.html?C=D;O=D | 0 .../fo/index.html?C=M;O=A | 0 .../fo/index.html?C=M;O=D | 0 .../fo/index.html?C=N;O=A | 0 .../fo/index.html?C=N;O=D | 0 .../fo/index.html?C=S;O=A | 0 .../fo/index.html?C=S;O=D | 0 .../tools/docbook-xsl-ns-1.76.1/fo/index.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/info.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/inline.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/keywords.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/lists.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/math.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/pagesetup.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/param.xml | 0 .../tools/docbook-xsl-ns-1.76.1/fo/param.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/passivetex.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/pdf2index | 0 .../tools/docbook-xsl-ns-1.76.1/fo/pi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/fo/pi.xsl | 0 .../fo/profile-docbook.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/qandaset.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/refentry.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/sections.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/synop.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/table.xml | 0 .../tools/docbook-xsl-ns-1.76.1/fo/table.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/task.xsl | 0 .../fo/titlepage.templates.xml | 0 .../fo/titlepage.templates.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/titlepage.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/toc.xsl | 0 .../docbook-xsl-ns-1.76.1/fo/verbatim.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/xep.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/fo/xref.xsl | 0 .../highlighting/c-hl.xml | 0 .../highlighting/common.xsl | 0 .../highlighting/cpp-hl.xml | 0 .../highlighting/csharp-hl.xml | 0 .../highlighting/delphi-hl.xml | 0 .../highlighting/index.html | 0 .../highlighting/index.html?C=D;O=A | 0 .../highlighting/index.html?C=D;O=D | 0 .../highlighting/index.html?C=M;O=A | 0 .../highlighting/index.html?C=M;O=D | 0 .../highlighting/index.html?C=N;O=A | 0 .../highlighting/index.html?C=N;O=D | 0 .../highlighting/index.html?C=S;O=A | 0 .../highlighting/index.html?C=S;O=D | 0 .../highlighting/ini-hl.xml | 0 .../highlighting/java-hl.xml | 0 .../highlighting/javascript-hl.xml | 0 .../highlighting/m2-hl.xml | 0 .../highlighting/myxml-hl.xml | 0 .../highlighting/perl-hl.xml | 0 .../highlighting/php-hl.xml | 0 .../highlighting/python-hl.xml | 0 .../highlighting/ruby-hl.xml | 0 .../highlighting/tcl-hl.xml | 0 .../highlighting/xslthl-config.xml | 0 .../docbook-xsl-ns-1.76.1/html/admon.xsl | 0 .../html/annotations.xsl | 0 .../html/autoidx-kimber.xsl | 0 .../html/autoidx-kosek.xsl | 0 .../docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl | 0 .../docbook-xsl-ns-1.76.1/html/autoidx.xsl | 0 .../docbook-xsl-ns-1.76.1/html/autotoc.xsl | 0 .../html/biblio-iso690.xsl | 0 .../docbook-xsl-ns-1.76.1/html/biblio.xsl | 0 .../docbook-xsl-ns-1.76.1/html/block.xsl | 0 .../docbook-xsl-ns-1.76.1/html/callout.xsl | 0 .../docbook-xsl-ns-1.76.1/html/changebars.xsl | 0 .../html/chunk-changebars.xsl | 0 .../docbook-xsl-ns-1.76.1/html/chunk-code.xsl | 0 .../html/chunk-common.xsl | 0 .../docbook-xsl-ns-1.76.1/html/chunk.xsl | 0 .../docbook-xsl-ns-1.76.1/html/chunker.xsl | 0 .../docbook-xsl-ns-1.76.1/html/chunkfast.xsl | 0 .../docbook-xsl-ns-1.76.1/html/chunktoc.xsl | 0 .../docbook-xsl-ns-1.76.1/html/component.xsl | 0 .../docbook-xsl-ns-1.76.1/html/division.xsl | 0 .../html/docbook.css.xml | 0 .../docbook-xsl-ns-1.76.1/html/docbook.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl | 0 .../docbook-xsl-ns-1.76.1/html/footnote.xsl | 0 .../docbook-xsl-ns-1.76.1/html/formal.xsl | 0 .../docbook-xsl-ns-1.76.1/html/glossary.xsl | 0 .../docbook-xsl-ns-1.76.1/html/graphics.xsl | 0 .../docbook-xsl-ns-1.76.1/html/highlight.xsl | 0 .../docbook-xsl-ns-1.76.1/html/html-rtf.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/html.xsl | 0 .../docbook-xsl-ns-1.76.1/html/htmltbl.xsl | 0 .../docbook-xsl-ns-1.76.1/html/index.html | 0 .../html/index.html?C=D;O=A | 0 .../html/index.html?C=D;O=D | 0 .../html/index.html?C=M;O=A | 0 .../html/index.html?C=M;O=D | 0 .../html/index.html?C=N;O=A | 0 .../html/index.html?C=N;O=D | 0 .../html/index.html?C=S;O=A | 0 .../html/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/html/index.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/info.xsl | 0 .../docbook-xsl-ns-1.76.1/html/inline.xsl | 0 .../docbook-xsl-ns-1.76.1/html/keywords.xsl | 0 .../docbook-xsl-ns-1.76.1/html/lists.xsl | 0 .../docbook-xsl-ns-1.76.1/html/maketoc.xsl | 0 .../docbook-xsl-ns-1.76.1/html/manifest.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/math.xsl | 0 .../docbook-xsl-ns-1.76.1/html/oldchunker.xsl | 0 .../docbook-xsl-ns-1.76.1/html/onechunk.xsl | 0 .../docbook-xsl-ns-1.76.1/html/param.xml | 0 .../docbook-xsl-ns-1.76.1/html/param.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/pi.xml | 0 .../tools/docbook-xsl-ns-1.76.1/html/pi.xsl | 0 .../html/profile-chunk-code.xsl | 0 .../html/profile-chunk.xsl | 0 .../html/profile-docbook.xsl | 0 .../html/profile-onechunk.xsl | 0 .../docbook-xsl-ns-1.76.1/html/qandaset.xsl | 0 .../docbook-xsl-ns-1.76.1/html/refentry.xsl | 0 .../docbook-xsl-ns-1.76.1/html/sections.xsl | 0 .../docbook-xsl-ns-1.76.1/html/synop.xsl | 0 .../docbook-xsl-ns-1.76.1/html/table.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/task.xsl | 0 .../html/titlepage.templates.xml | 0 .../html/titlepage.templates.xsl | 0 .../docbook-xsl-ns-1.76.1/html/titlepage.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/toc.xsl | 0 .../docbook-xsl-ns-1.76.1/html/verbatim.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/html/xref.xsl | 0 .../htmlhelp/htmlhelp-common.xsl | 0 .../htmlhelp/htmlhelp.xsl | 0 .../docbook-xsl-ns-1.76.1/htmlhelp/index.html | 0 .../htmlhelp/index.html?C=D;O=A | 0 .../htmlhelp/index.html?C=D;O=D | 0 .../htmlhelp/index.html?C=M;O=A | 0 .../htmlhelp/index.html?C=M;O=D | 0 .../htmlhelp/index.html?C=N;O=A | 0 .../htmlhelp/index.html?C=N;O=D | 0 .../htmlhelp/index.html?C=S;O=A | 0 .../htmlhelp/index.html?C=S;O=D | 0 .../htmlhelp/profile-htmlhelp-common.xsl | 0 .../htmlhelp/profile-htmlhelp.xsl | 0 .../images/annot-close.png | Bin .../images/annot-open.png | Bin .../docbook-xsl-ns-1.76.1/images/blank.png | Bin .../images/callouts/1.gif | Bin .../images/callouts/1.png | Bin .../images/callouts/1.svg | 0 .../images/callouts/10.gif | Bin .../images/callouts/10.png | Bin .../images/callouts/10.svg | 0 .../images/callouts/11.gif | Bin .../images/callouts/11.png | Bin .../images/callouts/11.svg | 0 .../images/callouts/12.gif | Bin .../images/callouts/12.png | Bin .../images/callouts/12.svg | 0 .../images/callouts/13.gif | Bin .../images/callouts/13.png | Bin .../images/callouts/13.svg | 0 .../images/callouts/14.gif | Bin .../images/callouts/14.png | Bin .../images/callouts/14.svg | 0 .../images/callouts/15.gif | Bin .../images/callouts/15.png | Bin .../images/callouts/15.svg | 0 .../images/callouts/16.svg | 0 .../images/callouts/17.svg | 0 .../images/callouts/18.svg | 0 .../images/callouts/19.svg | 0 .../images/callouts/2.gif | Bin .../images/callouts/2.png | Bin .../images/callouts/2.svg | 0 .../images/callouts/20.svg | 0 .../images/callouts/21.svg | 0 .../images/callouts/22.svg | 0 .../images/callouts/23.svg | 0 .../images/callouts/24.svg | 0 .../images/callouts/25.svg | 0 .../images/callouts/26.svg | 0 .../images/callouts/27.svg | 0 .../images/callouts/28.svg | 0 .../images/callouts/29.svg | 0 .../images/callouts/3.gif | Bin .../images/callouts/3.png | Bin .../images/callouts/3.svg | 0 .../images/callouts/30.svg | 0 .../images/callouts/4.gif | Bin .../images/callouts/4.png | Bin .../images/callouts/4.svg | 0 .../images/callouts/5.gif | Bin .../images/callouts/5.png | Bin .../images/callouts/5.svg | 0 .../images/callouts/6.gif | Bin .../images/callouts/6.png | Bin .../images/callouts/6.svg | 0 .../images/callouts/7.gif | Bin .../images/callouts/7.png | Bin .../images/callouts/7.svg | 0 .../images/callouts/8.gif | Bin .../images/callouts/8.png | Bin .../images/callouts/8.svg | 0 .../images/callouts/9.gif | Bin .../images/callouts/9.png | Bin .../images/callouts/9.svg | 0 .../images/callouts/index.html | 0 .../images/callouts/index.html?C=D;O=A | 0 .../images/callouts/index.html?C=M;O=A | 0 .../images/callouts/index.html?C=N;O=A | 0 .../images/callouts/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/images/caution.gif | Bin .../docbook-xsl-ns-1.76.1/images/caution.png | Bin .../docbook-xsl-ns-1.76.1/images/caution.svg | 0 .../docbook-xsl-ns-1.76.1/images/caution.tif | Bin .../images/colorsvg/caution.svg | 0 .../images/colorsvg/home.svg | 0 .../images/colorsvg/important.svg | 0 .../images/colorsvg/index.html | 0 .../images/colorsvg/index.html?C=D;O=A | 0 .../images/colorsvg/index.html?C=M;O=A | 0 .../images/colorsvg/index.html?C=N;O=A | 0 .../images/colorsvg/index.html?C=S;O=D | 0 .../images/colorsvg/next.svg | 0 .../images/colorsvg/note.svg | 0 .../images/colorsvg/prev.svg | 0 .../images/colorsvg/tip.svg | 0 .../images/colorsvg/up.svg | 0 .../images/colorsvg/warning.svg | 0 .../docbook-xsl-ns-1.76.1/images/draft.png | Bin .../docbook-xsl-ns-1.76.1/images/home.gif | Bin .../docbook-xsl-ns-1.76.1/images/home.png | Bin .../docbook-xsl-ns-1.76.1/images/home.svg | 0 .../images/important.gif | Bin .../images/important.png | Bin .../images/important.svg | 0 .../images/important.tif | Bin .../docbook-xsl-ns-1.76.1/images/index.html | 0 .../images/index.html?C=D;O=A | 0 .../images/index.html?C=D;O=D | 0 .../images/index.html?C=M;O=A | 0 .../images/index.html?C=M;O=D | 0 .../images/index.html?C=N;O=A | 0 .../images/index.html?C=N;O=D | 0 .../images/index.html?C=S;O=A | 0 .../images/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/images/info.png | Bin .../docbook-xsl-ns-1.76.1/images/next.gif | Bin .../docbook-xsl-ns-1.76.1/images/next.png | Bin .../docbook-xsl-ns-1.76.1/images/next.svg | 0 .../docbook-xsl-ns-1.76.1/images/note.gif | Bin .../docbook-xsl-ns-1.76.1/images/note.png | Bin .../docbook-xsl-ns-1.76.1/images/note.svg | 0 .../docbook-xsl-ns-1.76.1/images/note.tif | Bin .../docbook-xsl-ns-1.76.1/images/prev.gif | Bin .../docbook-xsl-ns-1.76.1/images/prev.png | Bin .../docbook-xsl-ns-1.76.1/images/prev.svg | 0 .../docbook-xsl-ns-1.76.1/images/tip.gif | Bin .../docbook-xsl-ns-1.76.1/images/tip.png | Bin .../docbook-xsl-ns-1.76.1/images/tip.svg | 0 .../docbook-xsl-ns-1.76.1/images/tip.tif | Bin .../images/toc-blank.png | Bin .../images/toc-minus.png | Bin .../docbook-xsl-ns-1.76.1/images/toc-plus.png | Bin .../tools/docbook-xsl-ns-1.76.1/images/up.gif | Bin .../tools/docbook-xsl-ns-1.76.1/images/up.png | Bin .../tools/docbook-xsl-ns-1.76.1/images/up.svg | 0 .../docbook-xsl-ns-1.76.1/images/warning.gif | Bin .../docbook-xsl-ns-1.76.1/images/warning.png | Bin .../docbook-xsl-ns-1.76.1/images/warning.svg | 0 .../docbook-xsl-ns-1.76.1/images/warning.tif | Bin .../tools/docbook-xsl-ns-1.76.1/index.html | 0 .../docbook-xsl-ns-1.76.1/index.html?C=D;O=A | 0 .../docbook-xsl-ns-1.76.1/index.html?C=D;O=D | 0 .../docbook-xsl-ns-1.76.1/index.html?C=M;O=A | 0 .../docbook-xsl-ns-1.76.1/index.html?C=M;O=D | 0 .../docbook-xsl-ns-1.76.1/index.html?C=N;O=A | 0 .../docbook-xsl-ns-1.76.1/index.html?C=N;O=D | 0 .../docbook-xsl-ns-1.76.1/index.html?C=S;O=A | 0 .../docbook-xsl-ns-1.76.1/index.html?C=S;O=D | 0 .../tools/docbook-xsl-ns-1.76.1/install.sh | 0 .../docbook-xsl-ns-1.76.1/javahelp/index.html | 0 .../javahelp/index.html?C=D;O=A | 0 .../javahelp/index.html?C=D;O=D | 0 .../javahelp/index.html?C=M;O=A | 0 .../javahelp/index.html?C=M;O=D | 0 .../javahelp/index.html?C=N;O=A | 0 .../javahelp/index.html?C=N;O=D | 0 .../javahelp/index.html?C=S;O=A | 0 .../javahelp/index.html?C=S;O=D | 0 .../javahelp/javahelp.xsl | 0 .../javahelp/profile-javahelp.xsl | 0 .../docbook-xsl-ns-1.76.1/lib/index.html | 0 .../lib/index.html?C=D;O=A | 0 .../lib/index.html?C=D;O=D | 0 .../lib/index.html?C=M;O=A | 0 .../lib/index.html?C=M;O=D | 0 .../lib/index.html?C=N;O=A | 0 .../lib/index.html?C=N;O=D | 0 .../lib/index.html?C=S;O=A | 0 .../lib/index.html?C=S;O=D | 0 .../tools/docbook-xsl-ns-1.76.1/lib/lib.xsl | 0 .../manpages/ChangeLog.20020917 | 0 .../docbook-xsl-ns-1.76.1/manpages/block.xsl | 0 .../manpages/charmap.groff.xsl | 0 .../manpages/docbook.xsl | 0 .../manpages/endnotes.xsl | 0 .../manpages/html-synop.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/index.html | 0 .../manpages/index.html?C=D;O=A | 0 .../manpages/index.html?C=D;O=D | 0 .../manpages/index.html?C=M;O=A | 0 .../manpages/index.html?C=M;O=D | 0 .../manpages/index.html?C=N;O=A | 0 .../manpages/index.html?C=N;O=D | 0 .../manpages/index.html?C=S;O=A | 0 .../manpages/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/manpages/info.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/inline.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/lists.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/other.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/param.xml | 0 .../docbook-xsl-ns-1.76.1/manpages/param.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/pi.xml | 0 .../docbook-xsl-ns-1.76.1/manpages/pi.xsl | 0 .../manpages/profile-docbook.xsl | 0 .../manpages/refentry.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/synop.xsl | 0 .../docbook-xsl-ns-1.76.1/manpages/table.xsl | 0 .../manpages/utility.xsl | 0 .../params/abstract.notitle.enabled.xml | 0 .../params/abstract.properties.xml | 0 .../params/abstract.title.properties.xml | 0 .../params/active.toc.xml | 0 .../params/ade.extensions.xml | 0 .../params/admon.graphics.extension.xml | 0 .../params/admon.graphics.path.xml | 0 .../params/admon.graphics.xml | 0 .../params/admon.style.xml | 0 .../params/admon.textlabel.xml | 0 .../params/admonition.properties.xml | 0 .../params/admonition.title.properties.xml | 0 .../params/alignment.xml | 0 .../params/annotate.toc.xml | 0 .../params/annotation.css.xml | 0 .../params/annotation.graphic.close.xml | 0 .../params/annotation.graphic.open.xml | 0 .../params/annotation.js.xml | 0 .../params/annotation.support.xml | 0 .../params/appendix.autolabel.xml | 0 .../params/arbortext.extensions.xml | 0 .../article.appendix.title.properties.xml | 0 .../params/author.othername.in.middle.xml | 0 .../params/autolayout-file.xml | 0 .../params/autotoc.label.in.hyperlink.xml | 0 .../params/autotoc.label.separator.xml | 0 .../params/axf.extensions.xml | 0 .../params/banner.before.navigation.xml | 0 .../docbook-xsl-ns-1.76.1/params/base.dir.xml | 0 .../params/biblioentry.item.separator.xml | 0 .../params/biblioentry.properties.xml | 0 .../params/bibliography.collection.xml | 0 .../params/bibliography.numbered.xml | 0 .../params/bibliography.style.xml | 0 .../params/blockquote.properties.xml | 0 .../params/blurb.on.titlepage.enabled.xml | 0 .../params/body.attributes.xml | 0 .../params/body.bg.color.xml | 0 .../params/body.end.indent.xml | 0 .../params/body.font.family.xml | 0 .../params/body.font.master.xml | 0 .../params/body.font.size.xml | 0 .../params/body.margin.bottom.xml | 0 .../params/body.margin.top.xml | 0 .../params/body.start.indent.xml | 0 .../params/bookmarks.collapse.xml | 0 .../params/bridgehead.in.toc.xml | 0 .../params/bullet.image.xml | 0 .../params/callout.defaultcolumn.xml | 0 .../params/callout.graphics.extension.xml | 0 .../params/callout.graphics.number.limit.xml | 0 .../params/callout.graphics.path.xml | 0 .../params/callout.graphics.xml | 0 .../params/callout.icon.size.xml | 0 .../params/callout.list.table.xml | 0 .../params/callout.unicode.font.xml | 0 .../params/callout.unicode.number.limit.xml | 0 .../callout.unicode.start.character.xml | 0 .../params/callout.unicode.xml | 0 .../params/callouts.extension.xml | 0 .../params/chapter.autolabel.xml | 0 .../params/chunk.append.xml | 0 .../params/chunk.first.sections.xml | 0 .../params/chunk.quietly.xml | 0 .../params/chunk.section.depth.xml | 0 .../params/chunk.sections.xml | 0 .../params/chunk.separate.lots.xml | 0 .../params/chunk.toc.xml | 0 .../params/chunk.tocs.and.lots.has.title.xml | 0 .../params/chunk.tocs.and.lots.xml | 0 .../chunker.output.cdata-section-elements.xml | 0 .../params/chunker.output.doctype-public.xml | 0 .../params/chunker.output.doctype-system.xml | 0 .../params/chunker.output.encoding.xml | 0 .../params/chunker.output.indent.xml | 0 .../params/chunker.output.media-type.xml | 0 .../params/chunker.output.method.xml | 0 .../chunker.output.omit-xml-declaration.xml | 0 .../params/chunker.output.standalone.xml | 0 .../params/citerefentry.link.xml | 0 .../params/collect.xref.targets.xml | 0 .../params/column.count.back.xml | 0 .../params/column.count.body.xml | 0 .../params/column.count.front.xml | 0 .../params/column.count.index.xml | 0 .../params/column.count.lot.xml | 0 .../params/column.count.titlepage.xml | 0 .../params/column.gap.back.xml | 0 .../params/column.gap.body.xml | 0 .../params/column.gap.front.xml | 0 .../params/column.gap.index.xml | 0 .../params/column.gap.lot.xml | 0 .../params/column.gap.titlepage.xml | 0 .../params/compact.list.item.spacing.xml | 0 .../component.label.includes.part.label.xml | 0 .../params/component.title.properties.xml | 0 .../params/component.titlepage.properties.xml | 0 .../params/contrib.inline.enabled.xml | 0 .../params/crop.mark.bleed.xml | 0 .../params/crop.mark.offset.xml | 0 .../params/crop.mark.width.xml | 0 .../params/crop.marks.xml | 0 .../params/css.decoration.xml | 0 .../params/css.stylesheet.dir.xml | 0 .../params/css.stylesheet.xml | 0 .../params/current.docid.xml | 0 .../params/currentpage.marker.xml | 0 .../params/custom.css.source.xml | 0 .../params/default.float.class.xml | 0 .../params/default.image.width.xml | 0 .../params/default.table.frame.xml | 0 .../params/default.table.rules.xml | 0 .../params/default.table.width.xml | 0 .../params/default.units.xml | 0 .../params/dingbat.font.family.xml | 0 .../params/docbook.css.link.xml | 0 .../params/docbook.css.source.xml | 0 .../params/double.sided.xml | 0 .../params/draft.mode.xml | 0 .../params/draft.watermark.image.xml | 0 .../docbook-xsl-ns-1.76.1/params/dry-run.xml | 0 .../params/dynamic.toc.xml | 0 .../params/ebnf.assignment.xml | 0 .../params/ebnf.statement.terminator.xml | 0 .../params/ebnf.table.bgcolor.xml | 0 .../params/ebnf.table.border.xml | 0 .../params/eclipse.autolabel.xml | 0 .../params/eclipse.plugin.id.xml | 0 .../params/eclipse.plugin.name.xml | 0 .../params/eclipse.plugin.provider.xml | 0 .../params/editedby.enabled.xml | 0 .../params/email.delimiters.enabled.xml | 0 .../params/email.mailto.enabled.xml | 0 .../params/emphasis.propagates.style.xml | 0 .../params/entry.propagates.style.xml | 0 .../params/epub.autolabel.xml | 0 .../params/equation.number.properties.xml | 0 .../params/equation.properties.xml | 0 .../params/example.properties.xml | 0 .../params/exsl.node.set.available.xml | 0 .../params/feedback.href.xml | 0 .../params/feedback.link.text.xml | 0 .../params/feedback.with.ids.xml | 0 .../params/figure.properties.xml | 0 .../params/filename-prefix.xml | 0 .../params/firstterm.only.link.xml | 0 .../params/foil.properties.xml | 0 .../params/foil.subtitle.properties.xml | 0 .../params/foil.title.master.xml | 0 .../params/foil.title.size.xml | 0 .../params/foilgroup.properties.xml | 0 .../params/foilgroup.toc.xml | 0 .../params/footer.column.widths.xml | 0 .../params/footer.content.properties.xml | 0 .../params/footer.hr.xml | 0 .../params/footer.rule.xml | 0 .../params/footer.table.height.xml | 0 .../params/footer.table.properties.xml | 0 .../params/footers.on.blank.pages.xml | 0 .../params/footnote.font.size.xml | 0 .../params/footnote.mark.properties.xml | 0 .../params/footnote.number.format.xml | 0 .../params/footnote.number.symbols.xml | 0 .../params/footnote.properties.xml | 0 .../params/footnote.sep.leader.properties.xml | 0 .../params/fop.extensions.xml | 0 .../params/fop1.extensions.xml | 0 .../params/formal.object.properties.xml | 0 .../params/formal.procedures.xml | 0 .../params/formal.title.placement.xml | 0 .../params/formal.title.properties.xml | 0 .../params/funcsynopsis.decoration.xml | 0 .../params/funcsynopsis.style.xml | 0 .../params/function.parens.xml | 0 .../params/generate.css.header.xml | 0 .../params/generate.id.attributes.xml | 0 .../params/generate.index.xml | 0 .../params/generate.legalnotice.link.xml | 0 .../params/generate.manifest.xml | 0 .../params/generate.meta.abstract.xml | 0 .../params/generate.revhistory.link.xml | 0 .../params/generate.section.toc.level.xml | 0 .../params/generate.toc.xml | 0 .../params/glossary.as.blocks.xml | 0 .../params/glossary.collection.xml | 0 .../params/glossary.sort.xml | 0 .../params/glossdef.block.properties.xml | 0 .../params/glossdef.list.properties.xml | 0 .../glossentry.list.item.properties.xml | 0 .../params/glossentry.show.acronym.xml | 0 .../params/glosslist.as.blocks.xml | 0 .../params/glossterm.auto.link.xml | 0 .../params/glossterm.block.properties.xml | 0 .../params/glossterm.list.properties.xml | 0 .../params/glossterm.separation.xml | 0 .../params/glossterm.width.xml | 0 .../params/graphic.default.extension.xml | 0 .../graphical.admonition.properties.xml | 0 .../params/graphics.dir.xml | 0 .../params/graphicsize.extension.xml | 0 .../params/graphicsize.use.img.src.path.xml | 0 .../params/header.column.widths.xml | 0 .../params/header.content.properties.xml | 0 .../params/header.hr.xml | 0 .../params/header.rule.xml | 0 .../params/header.table.height.xml | 0 .../params/header.table.properties.xml | 0 .../params/headers.on.blank.pages.xml | 0 .../params/hidetoc.image.xml | 0 .../params/highlight.default.language.xml | 0 .../params/highlight.source.xml | 0 .../params/highlight.xslthl.config.xml | 0 .../params/home.image.xml | 0 .../params/html.append.xml | 0 .../params/html.base.xml | 0 .../params/html.cellpadding.xml | 0 .../params/html.cellspacing.xml | 0 .../params/html.cleanup.xml | 0 .../docbook-xsl-ns-1.76.1/params/html.ext.xml | 0 .../params/html.extra.head.links.xml | 0 .../html.head.legalnotice.link.multiple.xml | 0 .../html.head.legalnotice.link.types.xml | 0 .../params/html.longdesc.link.xml | 0 .../params/html.longdesc.xml | 0 .../params/html.stylesheet.type.xml | 0 .../params/html.stylesheet.xml | 0 .../params/htmlhelp.alias.file.xml | 0 .../params/htmlhelp.autolabel.xml | 0 .../params/htmlhelp.button.back.xml | 0 .../params/htmlhelp.button.forward.xml | 0 .../params/htmlhelp.button.hideshow.xml | 0 .../params/htmlhelp.button.home.url.xml | 0 .../params/htmlhelp.button.home.xml | 0 .../params/htmlhelp.button.jump1.title.xml | 0 .../params/htmlhelp.button.jump1.url.xml | 0 .../params/htmlhelp.button.jump1.xml | 0 .../params/htmlhelp.button.jump2.title.xml | 0 .../params/htmlhelp.button.jump2.url.xml | 0 .../params/htmlhelp.button.jump2.xml | 0 .../params/htmlhelp.button.locate.xml | 0 .../params/htmlhelp.button.next.xml | 0 .../params/htmlhelp.button.options.xml | 0 .../params/htmlhelp.button.prev.xml | 0 .../params/htmlhelp.button.print.xml | 0 .../params/htmlhelp.button.refresh.xml | 0 .../params/htmlhelp.button.stop.xml | 0 .../params/htmlhelp.button.zoom.xml | 0 .../params/htmlhelp.chm.xml | 0 .../params/htmlhelp.default.topic.xml | 0 .../params/htmlhelp.display.progress.xml | 0 .../params/htmlhelp.encoding.xml | 0 .../htmlhelp.enhanced.decompilation.xml | 0 .../params/htmlhelp.enumerate.images.xml | 0 .../params/htmlhelp.force.map.and.alias.xml | 0 .../params/htmlhelp.hhc.binary.xml | 0 .../htmlhelp.hhc.folders.instead.books.xml | 0 .../params/htmlhelp.hhc.section.depth.xml | 0 .../params/htmlhelp.hhc.show.root.xml | 0 .../params/htmlhelp.hhc.width.xml | 0 .../params/htmlhelp.hhc.xml | 0 .../params/htmlhelp.hhk.xml | 0 .../params/htmlhelp.hhp.tail.xml | 0 .../params/htmlhelp.hhp.window.xml | 0 .../params/htmlhelp.hhp.windows.xml | 0 .../params/htmlhelp.hhp.xml | 0 .../params/htmlhelp.map.file.xml | 0 .../params/htmlhelp.only.xml | 0 .../htmlhelp.remember.window.position.xml | 0 .../params/htmlhelp.show.advanced.search.xml | 0 .../params/htmlhelp.show.favorities.xml | 0 .../params/htmlhelp.show.menu.xml | 0 .../params/htmlhelp.show.toolbar.text.xml | 0 .../params/htmlhelp.title.xml | 0 .../params/htmlhelp.use.hhk.xml | 0 .../params/htmlhelp.window.geometry.xml | 0 .../params/hyphenate.verbatim.characters.xml | 0 .../params/hyphenate.verbatim.xml | 0 .../params/hyphenate.xml | 0 .../params/id.warnings.xml | 0 .../params/ignore.image.scaling.xml | 0 .../params/img.src.path.xml | 0 .../params/index.div.title.properties.xml | 0 .../params/index.entry.properties.xml | 0 .../docbook-xsl-ns-1.76.1/params/index.html | 0 .../params/index.html?C=D;O=A | 0 .../params/index.html?C=D;O=D | 0 .../params/index.html?C=M;O=A | 0 .../params/index.html?C=M;O=D | 0 .../params/index.html?C=N;O=A | 0 .../params/index.html?C=N;O=D | 0 .../params/index.html?C=S;O=A | 0 .../params/index.html?C=S;O=D | 0 .../params/index.links.to.section.xml | 0 .../params/index.method.xml | 0 .../params/index.number.separator.xml | 0 .../params/index.on.role.xml | 0 .../params/index.on.type.xml | 0 .../params/index.page.number.properties.xml | 0 .../params/index.prefer.titleabbrev.xml | 0 .../index.preferred.page.properties.xml | 0 .../params/index.range.separator.xml | 0 .../params/index.term.separator.xml | 0 .../params/informal.object.properties.xml | 0 .../params/informalequation.properties.xml | 0 .../params/informalexample.properties.xml | 0 .../params/informalfigure.properties.xml | 0 .../params/informaltable.properties.xml | 0 .../params/inherit.keywords.xml | 0 .../params/insert.link.page.number.xml | 0 .../params/insert.olink.page.number.xml | 0 .../params/insert.olink.pdf.frag.xml | 0 .../params/insert.xref.page.number.xml | 0 .../params/itemizedlist.label.properties.xml | 0 .../params/itemizedlist.label.width.xml | 0 .../params/itemizedlist.properties.xml | 0 .../params/javahelp.encoding.xml | 0 .../params/keep.relative.image.uris.xml | 0 .../params/keyboard.nav.xml | 0 .../params/l10n.gentext.default.language.xml | 0 .../params/l10n.gentext.language.xml | 0 .../params/l10n.gentext.use.xref.language.xml | 0 .../params/l10n.lang.value.rfc.compliant.xml | 0 .../params/label.from.part.xml | 0 .../params/line-height.xml | 0 .../params/linenumbering.everyNth.xml | 0 .../params/linenumbering.extension.xml | 0 .../params/linenumbering.separator.xml | 0 .../params/linenumbering.width.xml | 0 .../params/link.mailto.url.xml | 0 .../params/list.block.properties.xml | 0 .../params/list.block.spacing.xml | 0 .../params/list.item.spacing.xml | 0 .../params/make.clean.html.xml | 0 .../params/make.graphic.viewport.xml | 0 .../params/make.index.markup.xml | 0 .../params/make.single.year.ranges.xml | 0 .../params/make.valid.html.xml | 0 .../params/make.year.ranges.xml | 0 .../params/man.authors.section.enabled.xml | 0 .../man.base.url.for.relative.links.xml | 0 .../params/man.break.after.slash.xml | 0 .../params/man.charmap.enabled.xml | 0 .../man.charmap.subset.profile.english.xml | 0 .../params/man.charmap.subset.profile.xml | 0 .../params/man.charmap.uri.xml | 0 .../params/man.charmap.use.subset.xml | 0 .../params/man.copyright.section.enabled.xml | 0 .../params/man.endnotes.are.numbered.xml | 0 .../params/man.endnotes.list.enabled.xml | 0 .../params/man.endnotes.list.heading.xml | 0 .../params/man.font.funcprototype.xml | 0 .../params/man.font.funcsynopsisinfo.xml | 0 .../params/man.font.links.xml | 0 .../params/man.font.table.headings.xml | 0 .../params/man.font.table.title.xml | 0 .../params/man.funcsynopsis.style.xml | 0 .../params/man.hyphenate.computer.inlines.xml | 0 .../params/man.hyphenate.filenames.xml | 0 .../params/man.hyphenate.urls.xml | 0 .../params/man.hyphenate.xml | 0 .../params/man.indent.blurbs.xml | 0 .../params/man.indent.lists.xml | 0 .../params/man.indent.refsect.xml | 0 .../params/man.indent.verbatims.xml | 0 .../params/man.indent.width.xml | 0 .../params/man.justify.xml | 0 .../params/man.output.base.dir.xml | 0 .../params/man.output.better.ps.enabled.xml | 0 .../params/man.output.encoding.xml | 0 .../params/man.output.in.separate.dir.xml | 0 .../man.output.lang.in.name.enabled.xml | 0 .../params/man.output.manifest.enabled.xml | 0 .../params/man.output.manifest.filename.xml | 0 .../params/man.output.quietly.xml | 0 .../params/man.output.subdirs.enabled.xml | 0 .../params/man.segtitle.suppress.xml | 0 .../man.string.subst.map.local.post.xml | 0 .../params/man.string.subst.map.local.pre.xml | 0 .../params/man.string.subst.map.xml | 0 .../params/man.subheading.divider.enabled.xml | 0 .../params/man.subheading.divider.xml | 0 .../params/man.table.footnotes.divider.xml | 0 .../params/man.th.extra1.suppress.xml | 0 .../params/man.th.extra2.max.length.xml | 0 .../params/man.th.extra2.suppress.xml | 0 .../params/man.th.extra3.max.length.xml | 0 .../params/man.th.extra3.suppress.xml | 0 .../params/man.th.title.max.length.xml | 0 .../params/manifest.in.base.dir.xml | 0 .../docbook-xsl-ns-1.76.1/params/manifest.xml | 0 .../params/manual.toc.xml | 0 .../params/margin.note.float.type.xml | 0 .../params/margin.note.properties.xml | 0 .../params/margin.note.title.properties.xml | 0 .../params/margin.note.width.xml | 0 .../params/marker.section.level.xml | 0 .../params/menuchoice.menu.separator.xml | 0 .../params/menuchoice.separator.xml | 0 .../params/minus.image.xml | 0 .../params/monospace.font.family.xml | 0 .../params/monospace.properties.xml | 0 .../params/monospace.verbatim.font.width.xml | 0 .../params/monospace.verbatim.properties.xml | 0 .../params/multiframe.bottom.bgcolor.xml | 0 .../params/multiframe.navigation.height.xml | 0 .../params/multiframe.top.bgcolor.xml | 0 .../params/multiframe.xml | 0 .../params/nav.separator.xml | 0 .../params/nav.table.summary.xml | 0 .../params/navbgcolor.xml | 0 .../params/navbodywidth.xml | 0 .../params/navig.graphics.extension.xml | 0 .../params/navig.graphics.path.xml | 0 .../params/navig.graphics.xml | 0 .../params/navig.showtitles.xml | 0 .../params/navtocwidth.xml | 0 .../params/next.image.xml | 0 .../params/no.home.image.xml | 0 .../params/no.next.image.xml | 0 .../params/no.prev.image.xml | 0 .../params/no.toc.image.xml | 0 .../params/no.up.image.xml | 0 .../params/nominal.image.depth.xml | 0 .../params/nominal.image.width.xml | 0 .../params/nominal.table.width.xml | 0 .../nongraphical.admonition.properties.xml | 0 .../params/normal.para.spacing.xml | 0 .../params/olink.base.uri.xml | 0 .../params/olink.debug.xml | 0 .../params/olink.doctitle.xml | 0 .../params/olink.fragid.xml | 0 .../params/olink.lang.fallback.sequence.xml | 0 .../params/olink.outline.ext.xml | 0 .../params/olink.properties.xml | 0 .../params/olink.pubid.xml | 0 .../params/olink.resolver.xml | 0 .../params/olink.sysid.xml | 0 .../params/orderedlist.label.properties.xml | 0 .../params/orderedlist.label.width.xml | 0 .../params/orderedlist.properties.xml | 0 .../othercredit.like.author.enabled.xml | 0 .../params/output-root.xml | 0 .../params/output.indent.xml | 0 .../params/overlay.js.xml | 0 .../params/overlay.logo.xml | 0 .../docbook-xsl-ns-1.76.1/params/overlay.xml | 0 .../params/page.height.portrait.xml | 0 .../params/page.height.xml | 0 .../params/page.margin.bottom.xml | 0 .../params/page.margin.inner.xml | 0 .../params/page.margin.outer.xml | 0 .../params/page.margin.top.xml | 0 .../params/page.orientation.xml | 0 .../params/page.width.portrait.xml | 0 .../params/page.width.xml | 0 .../params/pages.template.xml | 0 .../params/paper.type.xml | 0 .../params/para.propagates.style.xml | 0 .../params/part.autolabel.xml | 0 .../params/passivetex.extensions.xml | 0 .../params/pgwide.properties.xml | 0 .../params/phrase.propagates.style.xml | 0 .../params/pixels.per.inch.xml | 0 .../params/plus.image.xml | 0 .../params/points.per.em.xml | 0 .../params/preface.autolabel.xml | 0 .../params/prefer.internal.olink.xml | 0 .../params/preferred.mediaobject.role.xml | 0 .../params/prev.image.xml | 0 .../params/procedure.properties.xml | 0 .../params/process.empty.source.toc.xml | 0 .../params/process.source.toc.xml | 0 .../params/profile.arch.xml | 0 .../params/profile.attribute.xml | 0 .../params/profile.audience.xml | 0 .../params/profile.condition.xml | 0 .../params/profile.conformance.xml | 0 .../params/profile.lang.xml | 0 .../params/profile.os.xml | 0 .../params/profile.revision.xml | 0 .../params/profile.revisionflag.xml | 0 .../params/profile.role.xml | 0 .../params/profile.security.xml | 0 .../params/profile.separator.xml | 0 .../params/profile.status.xml | 0 .../params/profile.userlevel.xml | 0 .../params/profile.value.xml | 0 .../params/profile.vendor.xml | 0 .../params/profile.wordsize.xml | 0 .../params/punct.honorific.xml | 0 .../params/qanda.defaultlabel.xml | 0 .../params/qanda.in.toc.xml | 0 .../params/qanda.inherit.numeration.xml | 0 .../params/qanda.nested.in.toc.xml | 0 .../params/qanda.title.level1.properties.xml | 0 .../params/qanda.title.level2.properties.xml | 0 .../params/qanda.title.level3.properties.xml | 0 .../params/qanda.title.level4.properties.xml | 0 .../params/qanda.title.level5.properties.xml | 0 .../params/qanda.title.level6.properties.xml | 0 .../params/qanda.title.properties.xml | 0 .../params/qandadiv.autolabel.xml | 0 .../params/rebuild-all.xml | 0 .../params/refclass.suppress.xml | 0 .../params/refentry.date.profile.enabled.xml | 0 .../params/refentry.date.profile.xml | 0 .../params/refentry.generate.name.xml | 0 .../params/refentry.generate.title.xml | 0 .../refentry.manual.fallback.profile.xml | 0 .../refentry.manual.profile.enabled.xml | 0 .../params/refentry.manual.profile.xml | 0 .../params/refentry.meta.get.quietly.xml | 0 .../params/refentry.pagebreak.xml | 0 .../params/refentry.separator.xml | 0 .../refentry.source.fallback.profile.xml | 0 .../refentry.source.name.profile.enabled.xml | 0 .../params/refentry.source.name.profile.xml | 0 .../params/refentry.source.name.suppress.xml | 0 .../params/refentry.title.properties.xml | 0 .../refentry.version.profile.enabled.xml | 0 .../params/refentry.version.profile.xml | 0 .../params/refentry.version.suppress.xml | 0 .../params/refentry.xref.manvolnum.xml | 0 .../params/reference.autolabel.xml | 0 .../params/region.after.extent.xml | 0 .../params/region.before.extent.xml | 0 .../revhistory.table.cell.properties.xml | 0 .../params/revhistory.table.properties.xml | 0 .../params/revhistory.title.properties.xml | 0 .../params/root.filename.xml | 0 .../params/root.properties.xml | 0 .../docbook-xsl-ns-1.76.1/params/rootid.xml | 0 .../runinhead.default.title.end.punct.xml | 0 .../params/runinhead.title.end.punct.xml | 0 .../params/running.foot.properties.xml | 0 .../params/sans.font.family.xml | 0 .../params/saxon.callouts.xml | 0 .../params/saxon.character.representation.xml | 0 .../params/saxon.linenumbering.xml | 0 .../params/saxon.tablecolumns.xml | 0 .../params/script.dir.xml | 0 .../params/section.autolabel.max.depth.xml | 0 .../params/section.autolabel.xml | 0 .../params/section.container.element.xml | 0 ...section.label.includes.component.label.xml | 0 .../params/section.level1.properties.xml | 0 .../params/section.level2.properties.xml | 0 .../params/section.level3.properties.xml | 0 .../params/section.level4.properties.xml | 0 .../params/section.level5.properties.xml | 0 .../params/section.level6.properties.xml | 0 .../params/section.properties.xml | 0 .../section.title.level1.properties.xml | 0 .../section.title.level2.properties.xml | 0 .../section.title.level3.properties.xml | 0 .../section.title.level4.properties.xml | 0 .../section.title.level5.properties.xml | 0 .../section.title.level6.properties.xml | 0 .../params/section.title.properties.xml | 0 .../params/segmentedlist.as.table.xml | 0 .../params/sequential.links.xml | 0 .../params/shade.verbatim.style.xml | 0 .../params/shade.verbatim.xml | 0 .../params/show.comments.xml | 0 .../params/show.foil.number.xml | 0 .../params/show.revisionflag.xml | 0 .../params/showtoc.image.xml | 0 .../params/side.float.properties.xml | 0 .../params/sidebar.float.type.xml | 0 .../params/sidebar.float.width.xml | 0 .../params/sidebar.properties.xml | 0 .../params/sidebar.title.properties.xml | 0 .../params/simplesect.in.toc.xml | 0 .../params/slide.font.family.xml | 0 .../params/slide.title.font.family.xml | 0 .../params/slides.js.xml | 0 .../params/slides.properties.xml | 0 .../params/spacing.paras.xml | 0 .../params/speakernote.properties.xml | 0 .../params/subscript.properties.xml | 0 .../params/superscript.properties.xml | 0 .../params/suppress.footer.navigation.xml | 0 .../params/suppress.header.navigation.xml | 0 .../params/suppress.homepage.title.xml | 0 .../params/suppress.navigation.xml | 0 .../params/symbol.font.family.xml | 0 .../params/table.borders.with.css.xml | 0 .../params/table.cell.border.color.xml | 0 .../params/table.cell.border.style.xml | 0 .../params/table.cell.border.thickness.xml | 0 .../params/table.cell.padding.xml | 0 .../params/table.entry.padding.xml | 0 .../params/table.footnote.number.format.xml | 0 .../params/table.footnote.number.symbols.xml | 0 .../params/table.footnote.properties.xml | 0 .../params/table.frame.border.color.xml | 0 .../params/table.frame.border.style.xml | 0 .../params/table.frame.border.thickness.xml | 0 .../params/table.properties.xml | 0 .../params/table.spacer.image.xml | 0 .../params/table.table.properties.xml | 0 .../params/tablecolumns.extension.xml | 0 .../params/target.database.document.xml | 0 .../params/targets.filename.xml | 0 .../docbook-xsl-ns-1.76.1/params/template.xml | 0 .../params/tex.math.delims.xml | 0 .../params/tex.math.file.xml | 0 .../params/tex.math.in.alt.xml | 0 .../params/text.home.xml | 0 .../params/text.next.xml | 0 .../params/text.prev.xml | 0 .../docbook-xsl-ns-1.76.1/params/text.toc.xml | 0 .../docbook-xsl-ns-1.76.1/params/text.up.xml | 0 .../params/textbgcolor.xml | 0 .../params/textdata.default.encoding.xml | 0 .../params/textinsert.extension.xml | 0 .../params/title.font.family.xml | 0 .../params/title.margin.left.xml | 0 .../params/titlefoil.html.xml | 0 .../params/toc.bg.color.xml | 0 .../params/toc.blank.graphic.xml | 0 .../params/toc.blank.image.xml | 0 .../params/toc.blank.text.xml | 0 .../params/toc.hide.show.xml | 0 .../docbook-xsl-ns-1.76.1/params/toc.html.xml | 0 .../params/toc.image.xml | 0 .../params/toc.indent.width.xml | 0 .../params/toc.line.properties.xml | 0 .../params/toc.list.type.xml | 0 .../params/toc.margin.properties.xml | 0 .../params/toc.max.depth.xml | 0 .../params/toc.pointer.graphic.xml | 0 .../params/toc.pointer.image.xml | 0 .../params/toc.pointer.text.xml | 0 .../params/toc.row.height.xml | 0 .../params/toc.section.depth.xml | 0 .../params/toc.spacer.graphic.xml | 0 .../params/toc.spacer.image.xml | 0 .../params/toc.spacer.text.xml | 0 .../params/toc.width.xml | 0 .../docbook-xsl-ns-1.76.1/params/ua.js.xml | 0 .../params/ulink.footnotes.xml | 0 .../params/ulink.hyphenate.chars.xml | 0 .../params/ulink.hyphenate.xml | 0 .../params/ulink.show.xml | 0 .../params/ulink.target.xml | 0 .../docbook-xsl-ns-1.76.1/params/up.image.xml | 0 .../params/use.embed.for.svg.xml | 0 .../params/use.extensions.xml | 0 .../params/use.id.as.filename.xml | 0 .../params/use.id.function.xml | 0 .../params/use.local.olink.style.xml | 0 .../params/use.role.as.xrefstyle.xml | 0 .../params/use.role.for.mediaobject.xml | 0 .../docbook-xsl-ns-1.76.1/params/use.svg.xml | 0 .../params/variablelist.as.blocks.xml | 0 .../params/variablelist.as.table.xml | 0 .../params/variablelist.max.termlength.xml | 0 .../params/variablelist.term.break.after.xml | 0 .../params/variablelist.term.properties.xml | 0 .../params/variablelist.term.separator.xml | 0 .../params/verbatim.properties.xml | 0 .../params/wordml.template.xml | 0 .../params/writing.mode.xml | 0 .../params/xbCollapsibleLists.js.xml | 0 .../docbook-xsl-ns-1.76.1/params/xbDOM.js.xml | 0 .../params/xbLibrary.js.xml | 0 .../params/xbStyle.js.xml | 0 .../params/xep.extensions.xml | 0 .../params/xep.index.item.properties.xml | 0 .../params/xref.label-page.separator.xml | 0 .../params/xref.label-title.separator.xml | 0 .../params/xref.properties.xml | 0 .../params/xref.title-page.separator.xml | 0 .../params/xref.with.number.and.title.xml | 0 .../profiling/index.html | 0 .../profiling/index.html?C=D;O=A | 0 .../profiling/index.html?C=D;O=D | 0 .../profiling/index.html?C=M;O=A | 0 .../profiling/index.html?C=M;O=D | 0 .../profiling/index.html?C=N;O=A | 0 .../profiling/index.html?C=N;O=D | 0 .../profiling/index.html?C=S;O=A | 0 .../profiling/index.html?C=S;O=D | 0 .../profiling/profile-mode.xsl | 0 .../profiling/profile.xsl | 0 .../profiling/strip-attributes.xsl | 0 .../profiling/xsl2profile.xsl | 0 .../roundtrip/blocks-spec.xml | 0 .../roundtrip/blocks2dbk.dtd | 0 .../roundtrip/blocks2dbk.xsl | 0 .../roundtrip/dbk2ooo.xsl | 0 .../roundtrip/dbk2pages.xsl | 0 .../roundtrip/dbk2wordml.xsl | 0 .../roundtrip/dbk2wp.xsl | 0 .../roundtrip/index.html | 0 .../roundtrip/index.html?C=D;O=A | 0 .../roundtrip/index.html?C=D;O=D | 0 .../roundtrip/index.html?C=M;O=A | 0 .../roundtrip/index.html?C=M;O=D | 0 .../roundtrip/index.html?C=N;O=A | 0 .../roundtrip/index.html?C=N;O=D | 0 .../roundtrip/index.html?C=S;O=A | 0 .../roundtrip/index.html?C=S;O=D | 0 .../roundtrip/normalise-common.xsl | 0 .../roundtrip/normalise2sections.xsl | 0 .../roundtrip/pages2normalise.xsl | 0 .../docbook-xsl-ns-1.76.1/roundtrip/param.xml | 0 .../docbook-xsl-ns-1.76.1/roundtrip/param.xsl | 0 .../roundtrip/sections-spec.xml | 0 .../roundtrip/sections2blocks.xsl | 0 .../roundtrip/specifications.xml | 0 .../roundtrip/template-pages.xml | 0 .../roundtrip/template.dot | Bin .../roundtrip/template.xml | 0 .../roundtrip/wordml2normalise.xsl | 0 .../slides/browser/CTOCWidget.js | 0 .../slides/browser/index.html | 0 .../slides/browser/index.html?C=D;O=A | 0 .../slides/browser/index.html?C=M;O=A | 0 .../slides/browser/index.html?C=N;O=A | 0 .../slides/browser/index.html?C=S;O=D | 0 .../slides/browser/overlay.js | 0 .../slides/browser/slides-default.css | 0 .../slides/browser/slides-frames.css | 0 .../slides/browser/slides-plain.css | 0 .../slides/browser/slides-table.css | 0 .../slides/browser/slides-w3c.css | 0 .../slides/browser/slides.css | 0 .../slides/browser/slides.js | 0 .../slides/browser/ua.js | 0 .../slides/browser/xbCollapsibleLists.js | 0 .../slides/browser/xbDOM.js | 0 .../slides/browser/xbDebug.js | 0 .../slides/browser/xbLibrary.js | 0 .../slides/browser/xbStyle-css.js | 0 .../slides/browser/xbStyle-nn4.js | 0 .../slides/browser/xbStyle-not-supported.js | 0 .../slides/browser/xbStyle.js | 0 .../slides/fo/index.html | 0 .../slides/fo/index.html?C=D;O=A | 0 .../slides/fo/index.html?C=M;O=A | 0 .../slides/fo/index.html?C=N;O=A | 0 .../slides/fo/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/slides/fo/param.xml | 0 .../docbook-xsl-ns-1.76.1/slides/fo/param.xsl | 0 .../slides/fo/plain-titlepage.xml | 0 .../slides/fo/plain-titlepage.xsl | 0 .../docbook-xsl-ns-1.76.1/slides/fo/plain.xsl | 0 .../slides/graphics/active/index.html | 0 .../slides/graphics/arrow.gif | Bin .../slides/graphics/blank.gif | Bin .../slides/graphics/blank.png | Bin .../slides/graphics/hidetoc.gif | Bin .../slides/graphics/inactive/index.html | 0 .../slides/graphics/index.html | 0 .../slides/graphics/index.html?C=D;O=A | 0 .../slides/graphics/index.html?C=M;O=A | 0 .../slides/graphics/index.html?C=N;O=A | 0 .../slides/graphics/index.html?C=S;O=D | 0 .../slides/graphics/plus.gif | Bin .../slides/graphics/pointer.png | Bin .../slides/graphics/showtoc.gif | Bin .../slides/graphics/toc/index.html | 0 .../docbook-xsl-ns-1.76.1/slides/html/css.xsl | 0 .../slides/html/default.xsl | 0 .../slides/html/flat.xsl | 0 .../slides/html/frames.xsl | 0 .../slides/html/graphics.xsl | 0 .../slides/html/index.html | 0 .../slides/html/index.html?C=D;O=A | 0 .../slides/html/index.html?C=M;O=A | 0 .../slides/html/index.html?C=N;O=A | 0 .../slides/html/index.html?C=S;O=D | 0 .../slides/html/jscript.xsl | 0 .../slides/html/param.xml | 0 .../slides/html/param.xsl | 0 .../slides/html/plain.xsl | 0 .../slides/html/slides-common.xsl | 0 .../slides/html/tables.xsl | 0 .../slides/html/vslides.xsl | 0 .../docbook-xsl-ns-1.76.1/slides/html/w3c.xsl | 0 .../slides/htmlhelp/htmlhelp.xsl | 0 .../slides/htmlhelp/index.html | 0 .../slides/htmlhelp/index.html?C=D;O=A | 0 .../slides/htmlhelp/index.html?C=M;O=A | 0 .../slides/htmlhelp/index.html?C=N;O=A | 0 .../slides/htmlhelp/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/slides/index.html | 0 .../slides/index.html?C=D;O=A | 0 .../slides/index.html?C=D;O=D | 0 .../slides/index.html?C=M;O=A | 0 .../slides/index.html?C=M;O=D | 0 .../slides/index.html?C=N;O=A | 0 .../slides/index.html?C=N;O=D | 0 .../slides/index.html?C=S;O=A | 0 .../slides/index.html?C=S;O=D | 0 .../slides/keynote/default.xsl | 0 .../slides/keynote/index.html | 0 .../slides/keynote/index.html?C=D;O=A | 0 .../slides/keynote/index.html?C=M;O=A | 0 .../slides/keynote/index.html?C=N;O=A | 0 .../slides/keynote/index.html?C=S;O=D | 0 .../slides/keynote/xsltsl/index.html | 0 .../slides/svg/default.xsl | 0 .../slides/svg/index.html | 0 .../slides/svg/index.html?C=D;O=A | 0 .../slides/svg/index.html?C=M;O=A | 0 .../slides/svg/index.html?C=N;O=A | 0 .../slides/svg/index.html?C=S;O=D | 0 .../slides/xhtml/css.xsl | 0 .../slides/xhtml/default.xsl | 0 .../slides/xhtml/flat.xsl | 0 .../slides/xhtml/frames.xsl | 0 .../slides/xhtml/graphics.xsl | 0 .../slides/xhtml/index.html | 0 .../slides/xhtml/index.html?C=D;O=A | 0 .../slides/xhtml/index.html?C=M;O=A | 0 .../slides/xhtml/index.html?C=N;O=A | 0 .../slides/xhtml/index.html?C=S;O=D | 0 .../slides/xhtml/jscript.xsl | 0 .../slides/xhtml/param.xsl | 0 .../slides/xhtml/plain.xsl | 0 .../slides/xhtml/slides-common.xsl | 0 .../slides/xhtml/tables.xsl | 0 .../slides/xhtml/vslides.xsl | 0 .../slides/xhtml/w3c.xsl | 0 .../docbook-xsl-ns-1.76.1/template/index.html | 0 .../template/index.html?C=D;O=A | 0 .../template/index.html?C=D;O=D | 0 .../template/index.html?C=M;O=A | 0 .../template/index.html?C=M;O=D | 0 .../template/index.html?C=N;O=A | 0 .../template/index.html?C=N;O=D | 0 .../template/index.html?C=S;O=A | 0 .../template/index.html?C=S;O=D | 0 .../template/titlepage.xml | 0 .../template/titlepage.xsl | 0 .../docbook-xsl-ns-1.76.1/tests/index.html | 0 .../tests/index.html?C=D;O=A | 0 .../tests/index.html?C=D;O=D | 0 .../tests/index.html?C=M;O=A | 0 .../tests/index.html?C=M;O=D | 0 .../tests/index.html?C=N;O=A | 0 .../tests/index.html?C=N;O=D | 0 .../tests/index.html?C=S;O=A | 0 .../tests/index.html?C=S;O=D | 0 .../tests/refentry.007.ns.xml | 0 .../tests/refentry.007.xml | 0 .../docbook-xsl-ns-1.76.1/tools/index.html | 0 .../tools/index.html?C=D;O=A | 0 .../tools/index.html?C=D;O=D | 0 .../tools/index.html?C=M;O=A | 0 .../tools/index.html?C=M;O=D | 0 .../tools/index.html?C=N;O=A | 0 .../tools/index.html?C=N;O=D | 0 .../tools/index.html?C=S;O=A | 0 .../tools/index.html?C=S;O=D | 0 .../tools/make/Makefile.DocBook | 0 .../tools/make/Makefile.combine | 0 .../tools/make/Makefile.docParam | 0 .../tools/make/index.html | 0 .../tools/make/index.html?C=D;O=A | 0 .../tools/make/index.html?C=M;O=A | 0 .../tools/make/index.html?C=N;O=A | 0 .../tools/make/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/webhelp/LICENSE | 0 .../webhelp/build.properties | 0 .../docbook-xsl-ns-1.76.1/webhelp/build.xml | 0 .../webhelp/docs/content/ch01.html | 0 .../webhelp/docs/favicon.ico | Bin .../webhelp/docs/index.html | 0 .../webhelp/docsrc/index.html | 0 .../webhelp/docsrc/index.html?C=D;O=A | 0 .../webhelp/docsrc/index.html?C=M;O=A | 0 .../webhelp/docsrc/index.html?C=N;O=A | 0 .../webhelp/docsrc/index.html?C=S;O=D | 0 .../webhelp/docsrc/readme.xml | 0 .../docbook-xsl-ns-1.76.1/webhelp/index.html | 0 .../webhelp/index.html?C=D;O=A | 0 .../webhelp/index.html?C=D;O=D | 0 .../webhelp/index.html?C=M;O=A | 0 .../webhelp/index.html?C=M;O=D | 0 .../webhelp/index.html?C=N;O=A | 0 .../webhelp/index.html?C=N;O=D | 0 .../webhelp/index.html?C=S;O=A | 0 .../webhelp/index.html?C=S;O=D | 0 .../webhelp/template/common/index.html | 0 .../webhelp/template/content/index.html | 0 .../webhelp/template/favicon.ico | Bin .../webhelp/template/index.html | 0 .../webhelp/template/index.html?C=D;O=A | 0 .../webhelp/template/index.html?C=M;O=A | 0 .../webhelp/template/index.html?C=N;O=A | 0 .../webhelp/template/index.html?C=S;O=D | 0 .../webhelp/xsl/index.html | 0 .../webhelp/xsl/index.html?C=D;O=A | 0 .../webhelp/xsl/index.html?C=M;O=A | 0 .../webhelp/xsl/index.html?C=N;O=A | 0 .../webhelp/xsl/index.html?C=S;O=D | 0 .../webhelp/xsl/webhelp.xsl | 0 .../website/autolayout.xsl | 0 .../website/chunk-common.xsl | 0 .../website/chunk-tabular.xsl | 0 .../website/chunk-website.xsl | 0 .../docbook-xsl-ns-1.76.1/website/head.xsl | 0 .../docbook-xsl-ns-1.76.1/website/index.html | 0 .../website/index.html?C=D;O=A | 0 .../website/index.html?C=D;O=D | 0 .../website/index.html?C=M;O=A | 0 .../website/index.html?C=M;O=D | 0 .../website/index.html?C=N;O=A | 0 .../website/index.html?C=N;O=D | 0 .../website/index.html?C=S;O=A | 0 .../website/index.html?C=S;O=D | 0 .../website/makefile-dep.xsl | 0 .../docbook-xsl-ns-1.76.1/website/olink.xsl | 0 .../docbook-xsl-ns-1.76.1/website/param.xml | 0 .../docbook-xsl-ns-1.76.1/website/param.xsl | 0 .../docbook-xsl-ns-1.76.1/website/rss.xsl | 0 .../docbook-xsl-ns-1.76.1/website/tabular.xsl | 0 .../website/toc-tabular.xsl | 0 .../docbook-xsl-ns-1.76.1/website/toc.xsl | 0 .../website/website-common.xsl | 0 .../website/website-targets.xsl | 0 .../docbook-xsl-ns-1.76.1/website/website.xsl | 0 .../docbook-xsl-ns-1.76.1/website/xbel.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl | 0 .../xhtml-1_1/annotations.xsl | 0 .../xhtml-1_1/autoidx-kimber.xsl | 0 .../xhtml-1_1/autoidx-kosek.xsl | 0 .../xhtml-1_1/autoidx-ng.xsl | 0 .../xhtml-1_1/autoidx.xsl | 0 .../xhtml-1_1/autotoc.xsl | 0 .../xhtml-1_1/biblio-iso690.xsl | 0 .../xhtml-1_1/biblio.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl | 0 .../xhtml-1_1/callout.xsl | 0 .../xhtml-1_1/changebars.xsl | 0 .../xhtml-1_1/chunk-changebars.xsl | 0 .../xhtml-1_1/chunk-code.xsl | 0 .../xhtml-1_1/chunk-common.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl | 0 .../xhtml-1_1/chunker.xsl | 0 .../xhtml-1_1/chunkfast.xsl | 0 .../xhtml-1_1/chunktoc.xsl | 0 .../xhtml-1_1/component.xsl | 0 .../xhtml-1_1/division.xsl | 0 .../xhtml-1_1/docbook.css.xml | 0 .../xhtml-1_1/docbook.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl | 0 .../xhtml-1_1/footnote.xsl | 0 .../xhtml-1_1/formal.xsl | 0 .../xhtml-1_1/glossary.xsl | 0 .../xhtml-1_1/graphics.xsl | 0 .../xhtml-1_1/highlight.xsl | 0 .../xhtml-1_1/html-rtf.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl | 0 .../xhtml-1_1/htmltbl.xsl | 0 .../xhtml-1_1/index.html | 0 .../xhtml-1_1/index.html?C=D;O=A | 0 .../xhtml-1_1/index.html?C=D;O=D | 0 .../xhtml-1_1/index.html?C=M;O=A | 0 .../xhtml-1_1/index.html?C=M;O=D | 0 .../xhtml-1_1/index.html?C=N;O=A | 0 .../xhtml-1_1/index.html?C=N;O=D | 0 .../xhtml-1_1/index.html?C=S;O=A | 0 .../xhtml-1_1/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl | 0 .../xhtml-1_1/inline.xsl | 0 .../xhtml-1_1/keywords.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl | 0 .../xhtml-1_1/maketoc.xsl | 0 .../xhtml-1_1/manifest.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl | 0 .../xhtml-1_1/oldchunker.xsl | 0 .../xhtml-1_1/onechunk.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl | 0 .../xhtml-1_1/profile-chunk-code.xsl | 0 .../xhtml-1_1/profile-chunk.xsl | 0 .../xhtml-1_1/profile-docbook.xsl | 0 .../xhtml-1_1/profile-onechunk.xsl | 0 .../xhtml-1_1/qandaset.xsl | 0 .../xhtml-1_1/refentry.xsl | 0 .../xhtml-1_1/sections.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl | 0 .../xhtml-1_1/titlepage.templates.xsl | 0 .../xhtml-1_1/titlepage.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl | 0 .../xhtml-1_1/verbatim.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/admon.xsl | 0 .../xhtml/annotations.xsl | 0 .../xhtml/autoidx-kimber.xsl | 0 .../xhtml/autoidx-kosek.xsl | 0 .../xhtml/autoidx-ng.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl | 0 .../xhtml/biblio-iso690.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/biblio.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/block.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/callout.xsl | 0 .../xhtml/changebars.xsl | 0 .../xhtml/chunk-changebars.xsl | 0 .../xhtml/chunk-code.xsl | 0 .../xhtml/chunk-common.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/chunk.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/chunker.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/component.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/division.xsl | 0 .../xhtml/docbook.css.xml | 0 .../docbook-xsl-ns-1.76.1/xhtml/docbook.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/footnote.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/formal.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/glossary.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/graphics.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/highlight.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/html.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/index.html | 0 .../xhtml/index.html?C=D;O=A | 0 .../xhtml/index.html?C=D;O=D | 0 .../xhtml/index.html?C=M;O=A | 0 .../xhtml/index.html?C=M;O=D | 0 .../xhtml/index.html?C=N;O=A | 0 .../xhtml/index.html?C=N;O=D | 0 .../xhtml/index.html?C=S;O=A | 0 .../xhtml/index.html?C=S;O=D | 0 .../docbook-xsl-ns-1.76.1/xhtml/index.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/info.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/inline.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/keywords.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/lists.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/manifest.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/math.xsl | 0 .../xhtml/oldchunker.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/param.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl | 0 .../xhtml/profile-chunk-code.xsl | 0 .../xhtml/profile-chunk.xsl | 0 .../xhtml/profile-docbook.xsl | 0 .../xhtml/profile-onechunk.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/refentry.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/sections.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/synop.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/table.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/task.xsl | 0 .../xhtml/titlepage.templates.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl | 0 .../tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl | 0 .../docbook-xsl-ns-1.76.1/xhtml/xref.xsl | 0 {jonas_doc/core => core}/tools/fop-0.95/KEYS | 0 .../core => core}/tools/fop-0.95/LICENSE | 0 .../core => core}/tools/fop-0.95/NOTICE | 0 .../core => core}/tools/fop-0.95/README | 0 .../tools/fop-0.95/build/fop.jar | Bin .../tools/fop-0.95/conf/fop.xconf | 0 {jonas_doc/core => core}/tools/fop-0.95/fop | 0 .../core => core}/tools/fop-0.95/fop.bat | 0 .../tools/fop-0.95/lib/README.txt | 0 .../fop-0.95/lib/avalon-framework-4.2.0.jar | Bin .../fop-0.95/lib/avalon-framework.LICENSE.txt | 0 .../fop-0.95/lib/avalon-framework.NOTICE.TXT | 0 .../tools/fop-0.95/lib/batik-all-1.7.jar | Bin .../tools/fop-0.95/lib/batik.LICENSE.txt | 0 .../tools/fop-0.95/lib/batik.NOTICE.txt | 0 .../tools/fop-0.95/lib/commons-io-1.3.1.jar | Bin .../tools/fop-0.95/lib/commons-io.LICENSE.txt | 0 .../tools/fop-0.95/lib/commons-io.NOTICE.txt | 0 .../fop-0.95/lib/commons-logging-1.0.4.jar | Bin .../fop-0.95/lib/commons-logging.LICENSE.txt | 0 .../fop-0.95/lib/commons-logging.NOTICE.txt | 0 .../tools/fop-0.95/lib/serializer-2.7.0.jar | Bin .../tools/fop-0.95/lib/serializer.LICENSE.txt | 0 .../tools/fop-0.95/lib/serializer.NOTICE.txt | 0 .../tools/fop-0.95/lib/xalan-2.7.0.jar | Bin .../tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt | 0 .../tools/fop-0.95/lib/xalan.LICENSE.txt | 0 .../tools/fop-0.95/lib/xalan.NOTICE.txt | 0 .../fop-0.95/lib/xalan.regexp.LICENSE.txt | 0 .../fop-0.95/lib/xalan.runtime.LICENSE.txt | 0 .../tools/fop-0.95/lib/xerces.LICENSE.txt | 0 .../tools/fop-0.95/lib/xercesImpl-2.7.1.jar | Bin .../tools/fop-0.95/lib/xercesImpl.LICENSE.txt | 0 .../tools/fop-0.95/lib/xercesImpl.NOTICE.txt | 0 .../tools/fop-0.95/lib/xml-apis-1.3.04.jar | Bin .../fop-0.95/lib/xml-apis-ext-1.3.04.jar | Bin ...xml-apis-ext.LICENSE.dom-documentation.txt | 0 .../lib/xml-apis-ext.LICENSE.dom-software.txt | 0 .../lib/xml-apis-ext.LICENSE.sac.html | 0 .../fop-0.95/lib/xml-apis-ext.LICENSE.txt | 0 .../fop-0.95/lib/xml-apis-ext.NOTICE.txt | 0 .../fop-0.95/lib/xml-apis-ext.README.dom.txt | 0 .../fop-0.95/lib/xml-apis.LICENSE-SAX.html | 0 .../xml-apis.LICENSE.DOM-documentation.html | 0 .../lib/xml-apis.LICENSE.DOM-software.html | 0 .../tools/fop-0.95/lib/xml-apis.LICENSE.txt | 0 .../tools/fop-0.95/lib/xml-apis.NOTICE.txt | 0 .../lib/xmlgraphics-commons-1.3.1.jar | Bin .../lib/xmlgraphics-commons.LICENSE.txt | 0 .../lib/xmlgraphics-commons.NOTICE.txt | 0 .../core => core}/tools/fop-0.95/status.xml | 0 .../tools/maven-ant-tasks-2.1.3.jar | Bin .../core => core}/tools/win32/iconv.dll | Bin .../core => core}/tools/win32/libexslt.dll | Bin .../core => core}/tools/win32/libxml2.dll | Bin .../core => core}/tools/win32/libxslt.dll | Bin .../core => core}/tools/win32/xsltproc.exe | Bin .../core => core}/tools/win32/zlib1.dll | Bin jonas/.checkstyle | 14 - jonas/.checkstyle_eclipse_config | 93 - jonas/.classpath | 305 -- jonas/.gitignore | 18 - jonas/.project | 35 - jonas/.settings/org.eclipse.jdt.core.prefs | 268 -- jonas/.settings/org.eclipse.jdt.ui.prefs | 57 - jonas/.settings/org.maven.ide.eclipse.prefs | 9 - jonas/LicenceAgreement.txt | 504 --- jonas/README | 6 - jonas/ReleaseNotes.txt | 2 - jonas/assemblies/ant-tasks/pom.xml | 88 - .../ant-tasks/src/main/resources/README | 2 - jonas/assemblies/client-jar/pom.xml | 88 - .../client-jar/src/main/resources/README | 1 - jonas/assemblies/examples/pom.xml | 38 - .../main/resources/examples/build.properties | 37 - .../src/main/resources/examples/build.xml | 51 - .../cluster-j2ee14/PortConfiguration.txt | 63 - .../resources/examples/cluster-j2ee14/README | 96 - .../bin-client/clientConfig/carol.properties | 101 - .../bin-client/clientConfig/cmi-config.xml | 55 - .../clientConfig/traceclient.properties | 43 - .../bin-client/clientException.bat | 4 - .../bin-client/clientException.sh | 5 - .../bin-client/clientFOSFSB.bat | 4 - .../cluster-j2ee14/bin-client/clientFOSFSB.sh | 5 - .../bin-client/clientLBHome.bat | 4 - .../cluster-j2ee14/bin-client/clientLBHome.sh | 5 - .../bin-client/clientLBLookup.bat | 4 - .../bin-client/clientLBLookup.sh | 5 - .../bin-client/clientLBRemote.bat | 4 - .../bin-client/clientLBRemote.sh | 5 - .../examples/cluster-j2ee14/build.properties | 32 - .../examples/cluster-j2ee14/build.xml | 247 -- .../etc/resources/WEB-INF/jonas-web.xml | 19 - .../etc/resources/WEB-INF/web.xml | 71 - .../resources/policy/round-robin-policy.xml | 35 - .../etc/resources/web/index.html | 27 - .../etc/resources/web/jsp/checkRsp.jsp | 22 - .../etc/resources/web/jsp/exceptionRsp.jsp | 13 - .../etc/resources/web/jsp/releaseRsp.jsp | 25 - .../etc/resources/web/jsp/sessionRsp.jsp | 50 - .../cluster-j2ee14/etc/xml/ejb-jar.xml | 136 - .../etc/xml/jonas-ejb-jar.ha.xml | 86 - .../etc/xml/jonas-ejb-jar.lb.xml | 96 - .../cluster-j2ee14/etc/xml/jonas-ejb-jar.xml | 96 - .../etc/xml/transaction/ejb-jar.xml | 60 - .../etc/xml/transaction/jonas-ejb-jar.xml | 37 - .../example-config/tomcat6-jk.conf | 23 - .../example-config/tomcat6-mod_jk.xml | 184 - .../example-config/workers.properties | 43 - .../cluster-j2ee14/src/application.xml | 18 - .../cluster-j2ee14/src/applicationHA.xml | 11 - .../hatransactions/HaTransactionHome.java | 50 - .../hatransactions/HaTransactionLocal.java | 46 - .../HaTransactionLocalHome.java | 50 - .../hatransactions/HaTransactionRemote.java | 47 - .../hatransactions/HaTransactionSLR.java | 109 - .../j2ee14/beans/samplecluster2/MyEjb1.java | 67 - .../beans/samplecluster2/MyEjb1Home.java | 46 - .../beans/samplecluster2/MyEjb1SLR.java | 227 - .../beans/samplecluster2/MyEntityHome.java | 50 - .../beans/samplecluster2/MyEntityLocal.java | 57 - .../samplecluster2/MyEntityLocalHome.java | 50 - .../beans/samplecluster2/MyEntityRemote.java | 59 - .../beans/samplecluster2/MyEntitySLR.java | 141 - .../beans/samplecluster2/MyException.java | 58 - .../beans/samplecluster2/MyStateful.java | 90 - .../beans/samplecluster2/MyStatefulHome.java | 46 - .../beans/samplecluster2/MyStatefulInner.java | 134 - .../samplecluster2/MyStatefulInnerLocal.java | 37 - .../MyStatefulInnerLocalHome.java | 46 - .../beans/samplecluster2/MyStatefulSFR.java | 397 -- .../cluster/j2ee14/client/ClientBase.java | 122 - .../j2ee14/client/ClientException.java | 95 - .../cluster/j2ee14/client/ClientFOSFSB.java | 125 - .../cluster/j2ee14/client/ClientLBHome.java | 100 - .../cluster/j2ee14/client/ClientLBLookup.java | 105 - .../cluster/j2ee14/client/ClientLBRemote.java | 113 - .../cluster/j2ee14/client/ClientUtility.java | 146 - .../examples/cluster/j2ee14/client/README | 40 - .../j2ee14/servlets/AbstractServlet.java | 143 - .../cluster/j2ee14/servlets/CheckServlet.java | 83 - .../j2ee14/servlets/ExceptionServlet.java | 80 - .../j2ee14/servlets/ReleaseServlet.java | 110 - .../j2ee14/servlets/SessionServlet.java | 159 - .../cluster-javaee5/PortConfiguration.txt | 63 - .../resources/examples/cluster-javaee5/README | 80 - .../bin-client/clientConfig/carol.properties | 101 - .../bin-client/clientConfig/cmi-config.xml | 55 - .../clientConfig/traceclient.properties | 43 - .../bin-client/clientException.bat | 3 - .../bin-client/clientException.sh | 3 - .../bin-client/clientFOSFSB.bat | 3 - .../bin-client/clientFOSFSB.sh | 3 - .../bin-client/clientLBRemote.bat | 3 - .../bin-client/clientLBRemote.sh | 3 - .../examples/cluster-javaee5/build.properties | 33 - .../examples/cluster-javaee5/build.xml | 188 - .../etc/resources/WEB-INF/web.xml | 57 - .../etc/resources/application.xml | 73 - .../cluster-javaee5/etc/resources/client.xml | 37 - .../etc/resources/jonas-client.xml | 33 - .../etc/resources/persistence.xml | 42 - .../resources/policy/round-robin-policy.xml | 35 - .../etc/resources/web/index.html | 27 - .../etc/resources/web/jsp/checkRsp.jsp | 22 - .../etc/resources/web/jsp/exceptionRsp.jsp | 13 - .../etc/resources/web/jsp/releaseRsp.jsp | 25 - .../etc/resources/web/jsp/sessionRsp.jsp | 64 - .../cluster-javaee5/etc/xml/easybeans.xml | 27 - .../cluster-javaee5/etc/xml/ejb-jar.xml | 62 - .../example-config/tomcat6-jk.conf | 23 - .../example-config/tomcat6-mod_jk.xml | 184 - .../example-config/workers.properties | 42 - .../beans/samplecluster3/MyException.java | 58 - .../beans/samplecluster3/MyStateful.java | 93 - .../beans/samplecluster3/MyStatefulBean.java | 375 -- .../beans/samplecluster3/MyStatefulInner.java | 35 - .../samplecluster3/MyStatefulInnerBean.java | 112 - .../beans/samplecluster3/MyStateless.java | 63 - .../beans/samplecluster3/MyStatelessBean.java | 173 - .../javaee5/beans/samplecluster3/Node.java | 162 - .../cluster/javaee5/client/ClientBase.java | 122 - .../javaee5/client/ClientException.java | 96 - .../cluster/javaee5/client/ClientFOSFSB.java | 114 - .../javaee5/client/ClientLBRemote.java | 115 - .../examples/cluster/javaee5/client/README | 36 - .../javaee5/servlets/AbstractServlet.java | 130 - .../javaee5/servlets/CheckServlet.java | 82 - .../javaee5/servlets/ExceptionServlet.java | 81 - .../javaee5/servlets/ReleaseServlet.java | 98 - .../javaee5/servlets/SessionServlet.java | 168 - .../main/resources/examples/j2ee1.4/README | 84 - .../main/resources/examples/j2ee1.4/build.xml | 205 - .../j2ee1.4/etc/resources/jaas/jaas.config | 13 - .../j2ee1.4/etc/resources/web/img/jetty.gif | Bin 6649 -> 0 bytes .../j2ee1.4/etc/resources/web/img/logoOW2.png | Bin 13572 -> 0 bytes .../etc/resources/web/img/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../j2ee1.4/etc/resources/web/img/tomcat.gif | Bin 1934 -> 0 bytes .../etc/resources/web/img/valid-xhtml11.png | Bin 1917 -> 0 bytes .../j2ee1.4/etc/resources/web/img/vcss.png | Bin 1134 -> 0 bytes .../j2ee1.4/etc/resources/web/index.html | 52 - .../j2ee1.4/etc/resources/web/ow2_jonas.css | 183 - .../j2ee1.4/etc/xml/application-client.xml | 72 - .../examples/j2ee1.4/etc/xml/application.xml | 59 - .../j2ee1.4/etc/xml/jonas-client1.xml | 19 - .../j2ee1.4/etc/xml/jonas-client2.xml | 18 - .../examples/j2ee1.4/etc/xml/jonas-secusb.xml | 12 - .../examples/j2ee1.4/etc/xml/jonas-web.xml | 13 - .../resources/examples/j2ee1.4/etc/xml/ra.xml | 40 - .../examples/j2ee1.4/etc/xml/secusb.xml | 60 - .../examples/j2ee1.4/etc/xml/web.xml | 110 - .../ow2/jonas/earsample/beans/secusb/Op.java | 52 - .../jonas/earsample/beans/secusb/OpBean.java | 247 -- .../jonas/earsample/beans/secusb/OpHome.java | 47 - .../jonas/earsample/beans/secusb/OpLocal.java | 48 - .../earsample/beans/secusb/OpLocalHome.java | 45 - .../ow2/jonas/earsample/clients/Client.java | 190 - .../resourceadapters/ResourceAdapterImpl.java | 191 - .../jonas/earsample/servlets/ServletOp.java | 305 -- .../resources/examples/j2ee1.4/velocity.log | 62 - .../examples/javaee5-earsample/README | 10 - .../bin-client/clientConfig/carol.properties | 101 - .../clientConfig/traceclient.properties | 43 - .../clientJaasSecuredApplication.bat | 1 - .../clientJaasSecuredApplication.sh | 1 - .../bin-client/clientJmsApplication.bat | 1 - .../bin-client/clientJmsApplication.sh | 1 - .../clientNotSecuredApplication.bat | 1 - .../bin-client/clientNotSecuredApplication.sh | 1 - .../examples/javaee5-earsample/build.xml | 198 - .../etc/META-INF/MANIFEST.MF | 1 - .../javaee5-earsample/etc/application.xml | 66 - .../etc/jaas-secured-application-client.xml | 39 - .../etc/jaas-secured-jonas-client.xml | 40 - .../javaee5-earsample/etc/jaas.config | 37 - .../etc/jms-application-client.xml | 50 - .../etc/jms-jonas-client.xml | 42 - .../etc/not-secured-application-client.xml | 37 - .../etc/not-secured-jonas-client.xml | 33 - .../javaee5-earsample/etc/persistence.xml | 45 - .../examples/javaee5-earsample/etc/web.xml | 84 - .../etc/web/img/architecture.png | Bin 182723 -> 0 bytes .../javaee5-earsample/etc/web/img/jetty.gif | Bin 6649 -> 0 bytes .../javaee5-earsample/etc/web/img/logoOW2.png | Bin 13572 -> 0 bytes .../etc/web/img/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../javaee5-earsample/etc/web/img/tomcat.gif | Bin 1934 -> 0 bytes .../etc/web/img/valid-xhtml11.png | Bin 1917 -> 0 bytes .../javaee5-earsample/etc/web/img/vcss.png | Bin 1134 -> 0 bytes .../javaee5-earsample/etc/web/index.html | 66 - .../javaee5-earsample/etc/web/ow2_jonas.css | 183 - .../ear/client/JMSApplicationClient.java | 146 - .../client/NotSecuredApplicationClient.java | 133 - .../ear/client/SecuredApplicationClient.java | 141 - .../jonas/examples/ear/client/package.html | 36 - .../ow2/jonas/examples/ear/entity/Author.java | 177 - .../ow2/jonas/examples/ear/entity/Book.java | 163 - .../jonas/examples/ear/entity/package.html | 36 - .../jonas/examples/ear/init/Initializer.java | 14 - .../examples/ear/init/InitializerBean.java | 65 - .../ow2/jonas/examples/ear/init/package.html | 36 - .../ow2/jonas/examples/ear/mail/Mailer.java | 41 - .../jonas/examples/ear/mail/MailerBean.java | 166 - .../ow2/jonas/examples/ear/mail/package.html | 36 - .../examples/ear/mdb/JMSMessageBean.java | 112 - .../ow2/jonas/examples/ear/mdb/package.html | 36 - .../org/ow2/jonas/examples/ear/package.html | 36 - .../examples/ear/reader/LocalReader.java | 34 - .../ow2/jonas/examples/ear/reader/Reader.java | 63 - .../jonas/examples/ear/reader/ReaderBean.java | 108 - .../examples/ear/reader/RemoteReader.java | 34 - .../jonas/examples/ear/reader/package.html | 36 - .../jonas/examples/ear/web/AdminServlet.java | 277 -- .../examples/ear/web/ExampleServlet.java | 203 - .../ow2/jonas/examples/ear/web/package.html | 36 - .../examples/ear/writer/LocalWriter.java | 34 - .../examples/ear/writer/RemoteWriter.java | 34 - .../ow2/jonas/examples/ear/writer/Writer.java | 61 - .../jonas/examples/ear/writer/WriterBean.java | 89 - .../jonas/examples/ear/writer/package.html | 36 - .../main/resources/examples/jonas-common.xml | 251 -- .../resources/tutorial/jaxws-sample/README | 31 - .../resources/tutorial/jaxws-sample/build.xml | 52 - .../tutorial/jaxws-sample/client/build.xml | 91 - .../jaxws-sample/client/etc/application.xml | 48 - .../tutorial/jaxws-sample/client/etc/web.xml | 33 - .../tutorial/jaxws/client/QuoteMain.java | 48 - .../tutorial/jaxws-sample/service/build.xml | 58 - .../jaxws-sample/service/etc/application.xml | 48 - .../tutorial/jaxws-sample/service/etc/web.xml | 33 - .../ow2/jonas/tutorial/jaxws/quote/Quote.java | 58 - .../tutorial/jaxws/quote/QuoteReporter.java | 34 - .../jaxws/quote/QuoteReporterPOJO.java | 43 - .../main/resources/tutorial/jonas-common.xml | 381 -- jonas/assemblies/pom.xml | 47 - .../profiles/addons/minimal/pom.xml | 436 -- .../minimal/src/main/assembly/assembly.xml | 43 - jonas/assemblies/profiles/addons/pom.xml | 109 - .../src/main/assembly/addons-component.xml | 55 - jonas/assemblies/profiles/legacy/full/pom.xml | 1376 ------ .../full/src/main/assembly/assembly.xml | 208 - .../main/assembly/jonas-full-component.xml | 65 - .../src/main/assembly/templates-component.xml | 73 - .../assemblies/profiles/legacy/jaxrs/pom.xml | 371 -- .../jaxrs/src/main/assembly/assembly.xml | 62 - .../main/assembly/jonas-jaxrs-component.xml | 68 - .../profiles/legacy/minimal/pom.xml | 439 -- .../minimal/src/main/assembly/assembly.xml | 45 - jonas/assemblies/profiles/legacy/pom.xml | 130 - .../src/main/assembly/legacy-component.xml | 54 - jonas/assemblies/profiles/pom.xml | 1739 -------- .../src/main/assembly/common-component.xml | 178 - .../profiles/src/main/resources/logs/README | 8 - jonas/clientbuild.xml | 408 -- .../checkstyle-convention.xml | 188 - .../eclipse-java-code-formatter.xml | 181 - .../jonas-style-convention.xml | 181 - .../plugin-checkstyle-config.xml | 253 -- jonas/itests/applications/classloader/pom.xml | 64 - .../classloader/ClassLoaderChecker.java | 95 - .../src/main/resources/metadata.xml | 47 - .../applications/connection-leaks/pom.xml | 61 - .../ConnectionLeakServlet.java | 77 - .../src/main/webapp/WEB-INF/jonas-web.xml | 33 - .../src/main/webapp/WEB-INF/web.xml | 49 - .../jaxws-add/assemblies/ear/pom.xml | 86 - .../applications/jaxws-add/assemblies/pom.xml | 47 - .../jaxws-add/modules/api/pom.xml | 44 - .../applications/wsadd/api/IAddBean.java | 40 - .../jaxws-add/modules/beans/pom.xml | 71 - .../applications/wsadd/beans/AddBean.java | 52 - .../src/main/resources/META-INF/ejb-jar.xml | 30 - .../applications/jaxws-add/modules/pom.xml | 44 - .../jaxws-add/modules/webapp/pom.xml | 87 - .../wsadd/ws/AuditEventServiceServlet.java | 144 - .../wsadd/ws/AuditPropagationServlet.java | 57 - .../tests/applications/wsadd/ws/IWSAdd.java | 43 - .../tests/applications/wsadd/ws/WSAdd.java | 83 - .../src/main/resources/soap-request-add.xml | 35 - .../src/main/webapp/WEB-INF/jonas-web.xml | 33 - .../webapp/src/main/webapp/WEB-INF/web.xml | 60 - jonas/itests/applications/jaxws-add/pom.xml | 43 - .../itests/applications/jaxws-sample/pom.xml | 111 - jonas/itests/applications/jndi/pom.xml | 58 - .../tests/applications/jndi/ejb3/Jndi.java | 40 - .../applications/jndi/ejb3/JndiBean.java | 74 - .../src/main/resources/META-INF/ejb-jar.xml | 37 - jonas/itests/applications/jsf/jsf-1.x/pom.xml | 43 - .../src/main/webapp/WEB-INF/faces-config.xml | 34 - .../jsf-1.x/src/main/webapp/WEB-INF/web.xml | 46 - .../jsf/jsf-1.x/src/main/webapp/hello.jsp | 35 - .../jsf/jsf-1.x/src/main/webapp/index.jsp | 26 - jonas/itests/applications/jsf/jsf-2.0/pom.xml | 52 - .../applications/jsf2/HelloNameBean.java | 56 - .../jsf-2.0/src/main/webapp/WEB-INF/web.xml | 63 - .../jsf-2.0/src/main/webapp/helloworld.xhtml | 41 - .../jsf/jsf-2.0/src/main/webapp/welcome.xhtml | 37 - jonas/itests/applications/jsf/pom.xml | 46 - jonas/itests/applications/multitenant/pom.xml | 39 - .../main/resources/tenant-ear/earT1/pom.xml | 95 - .../resources/META-INF/jonas-application.xml | 33 - .../main/resources/tenant-ear/earT2/pom.xml | 95 - .../resources/META-INF/jonas-application.xml | 33 - .../src/main/resources/tenant-ear/ejb/pom.xml | 66 - .../ow2/jonas/test/multitenant/Author.java | 140 - .../org/ow2/jonas/test/multitenant/Hello.java | 55 - .../jonas/test/multitenant/HelloMBean.java | 42 - .../test/multitenant/init/Initializer.java | 38 - .../multitenant/init/InitializerBean.java | 81 - .../test/multitenant/reader/LocalReader.java | 36 - .../jonas/test/multitenant/reader/Reader.java | 50 - .../test/multitenant/reader/ReaderBean.java | 80 - .../test/multitenant/reader/RemoteReader.java | 36 - .../test/multitenant/writer/LocalWriter.java | 34 - .../test/multitenant/writer/RemoteWriter.java | 34 - .../jonas/test/multitenant/writer/Writer.java | 48 - .../test/multitenant/writer/WriterBean.java | 71 - .../main/resources/META-INF/persistence.xml | 37 - .../src/main/resources/tenant-ear/pom.xml | 71 - .../tenant-ear/test-multitenant-T1.ear | Bin 98698 -> 0 bytes .../tenant-ear/test-multitenant-T2.ear | Bin 98698 -> 0 bytes .../src/main/resources/tenant-ear/war/pom.xml | 65 - .../jonas/test/multitenant/TestServlet.java | 158 - .../war/src/main/webapp/WEB-INF/web.xml | 45 - .../tenant-ear/war/src/main/webapp/index.html | 6 - .../src/main/resources/tenant-war/pom.xml | 48 - .../src/main/webapp/WEB-INF/jonas-web.xml | 33 - .../src/main/webapp/WEB-INF/web.xml | 33 - .../tenant-war/src/main/webapp/index.html | 31 - .../tenant-war/test-multitenant-war.war | Bin 4570 -> 0 bytes .../applications/osgi/osgi-datasource/pom.xml | 97 - .../datasources/DataSourceServiceBean.java | 169 - .../osgi/datasources/DatasourceBean.java | 192 - .../osgi/datasources/IDataSource.java | 67 - .../osgi/datasources/IDataSourceService.java | 60 - jonas/itests/applications/osgi/pom.xml | 44 - jonas/itests/applications/pom.xml | 53 - jonas/itests/applications/versioning/pom.xml | 40 - .../non-versioned-war/non-versioned-war.war | Bin 912 -> 0 bytes .../src/main/resources/root-war/.classpath | 8 - .../src/main/resources/root-war/.project | 23 - .../.settings/org.eclipse.jdt.core.prefs | 256 -- .../.settings/org.eclipse.jdt.ui.prefs | 5 - .../.settings/org.maven.ide.eclipse.prefs | 8 - .../src/main/resources/root-war/pom.xml | 62 - .../src/main/resources/root-war/root-war.war | Bin 6504 -> 0 bytes .../RedirectServletWithContext.java | 19 - .../RedirectServletWithoutContext.java | 19 - .../src/main/webapp/WEB-INF/jonas-web.xml | 34 - .../root-war/src/main/webapp/WEB-INF/web.xml | 57 - .../root-war/src/main/webapp/test.jsp | 2 - .../resources/secured-war/secured-war.war | Bin 1014 -> 0 bytes .../main/resources/version1.0.0/.classpath | 9 - .../src/main/resources/version1.0.0/.project | 23 - .../.settings/org.eclipse.jdt.core.prefs | 256 -- .../.settings/org.eclipse.jdt.ui.prefs | 5 - .../.settings/org.maven.ide.eclipse.prefs | 8 - .../main/resources/version1.0.0/ear/pom.xml | 98 - .../main/resources/version1.0.0/ejb/pom.xml | 57 - .../ow2/jonas/test/versioning/TestBean.java | 10 - .../jonas/test/versioning/TestBeanImpl.java | 14 - .../src/main/resources/version1.0.0/pom.xml | 70 - .../version1.0.0/test-versioning.ear | Bin 9008 -> 0 bytes .../main/resources/version1.0.0/war/pom.xml | 65 - .../jonas/test/versioning/TestServlet.java | 38 - .../war/src/main/webapp/WEB-INF/web.xml | 45 - .../war/src/main/webapp/index.html | 6 - .../version1.0.0/war/src/main/webapp/test.jsp | 2 - .../main/resources/version2.0.0/.classpath | 9 - .../src/main/resources/version2.0.0/.project | 23 - .../.settings/org.eclipse.jdt.core.prefs | 256 -- .../.settings/org.eclipse.jdt.ui.prefs | 5 - .../.settings/org.maven.ide.eclipse.prefs | 8 - .../main/resources/version2.0.0/ear/pom.xml | 98 - .../main/resources/version2.0.0/ejb/pom.xml | 57 - .../ow2/jonas/test/versioning/TestBean.java | 10 - .../jonas/test/versioning/TestBeanImpl.java | 14 - .../src/main/resources/version2.0.0/pom.xml | 70 - .../version2.0.0/test-versioning.ear | Bin 10370 -> 0 bytes .../main/resources/version2.0.0/war/pom.xml | 65 - .../RedirectServletWithContext.java | 19 - .../RedirectServletWithoutContext.java | 19 - .../jonas/test/versioning/TestServlet.java | 43 - .../war/src/main/webapp/WEB-INF/web.xml | 68 - .../war/src/main/webapp/index.html | 6 - .../version2.0.0/war/src/main/webapp/test.jsp | 2 - .../src/main/resources/welcome-file/pom.xml | 53 - .../src/main/webapp/WEB-INF/jonas-web.xml | 33 - .../src/main/webapp/WEB-INF/web.xml | 38 - .../welcome-file/src/main/webapp/index.jspx | 30 - .../welcome-file/test-versioning-welcome.war | Bin 4637 -> 0 bytes jonas/itests/cargo/iiop/pom.xml | 324 -- jonas/itests/cargo/irmi/pom.xml | 328 -- jonas/itests/cargo/jetty6/pom.xml | 346 -- jonas/itests/cargo/jetty8/pom.xml | 346 -- jonas/itests/cargo/jrmp/pom.xml | 297 -- .../itests/cargo/jrmp/BugJonas290Test.java | 44 - .../itests/cargo/jrmp/BugJonas292Test.java | 121 - .../itests/cargo/jrmp/BugJonas96Test.java | 115 - .../jonas/itests/cargo/jrmp/CargoTest.java | 59 - .../itests/cargo/jrmp/ClassLoaderTest.java | 60 - .../itests/cargo/jrmp/CookieManager.java | 165 - .../cargo/jrmp/JDBCConnectionLeakTest.java | 108 - .../jonas/itests/cargo/jrmp/JaxWSAddTest.java | 141 - .../jonas/itests/cargo/jrmp/JaxWSTest.java | 98 - .../ow2/jonas/itests/cargo/jrmp/JndiTest.java | 183 - .../itests/cargo/jrmp/MultitenantTest.java | 413 -- .../jonas/itests/cargo/jrmp/TestCommons.java | 125 - .../itests/cargo/jrmp/VersioningTest.java | 664 --- .../cargo/jrmp/WebServicesAuditTestCase.java | 135 - .../jrmp/src/test/resources/jonas-290.war | Bin 1148 -> 0 bytes .../jrmp/src/test/resources/jonas-292.jar | Bin 299 -> 0 bytes .../jrmp/jndi/ca-jndi-empty-value-test.xml | 38 - .../jrmp/jndi/ca-jndi-sample-example.xml | 43 - .../itests/cargo/jrmp/soap-request-add.xml | 9 - jonas/itests/cargo/pom.xml | 171 - jonas/itests/cargo/safe-startup/pom.xml | 227 - .../startup/FailStartOnErrorTestCase.java | 124 - .../src/test/resources/wrongDeployable.xml | 11 - jonas/itests/cargo/security/pom.xml | 352 -- .../cargo/jmx_security/JmxSecurityTest.java | 115 - jonas/itests/cargo/tomcat6/pom.xml | 339 -- jonas/itests/intravm/pom.xml | 268 -- .../jonas/itests/intravm/JOnASLauncher.java | 208 - .../osgi/httpservice/OSGiHttpServiceTest.java | 468 -- .../RegisterResourceTestActivator.java | 93 - .../osgi/httpservice/servlet/MyServlet.java | 66 - .../servlet/RegisterServletTestActivator.java | 104 - .../servlet/SimpleTestServlet.java | 60 - .../itests/intravm/workdir/TestWorkDir.java | 92 - .../intravm/src/test/resources/index.html | 10 - .../intravm/src/test/resources/test.html | 10 - jonas/itests/osgi/base/pom.xml | 67 - .../ow2/jonas/itests/osgi/OSGiTestCase.java | 79 - .../osgi/TestOSGiDataSourceFactory.java | 102 - .../osgi/TestOSGiDataSourceService.java | 86 - jonas/itests/osgi/equinox/pom.xml | 382 -- jonas/itests/osgi/felix/pom.xml | 408 -- jonas/itests/osgi/knopflerfish/pom.xml | 387 -- jonas/itests/osgi/pom.xml | 140 - .../src/test/configuration/testng-osgi.xml | 37 - .../osgi/src/test/configuration/testng.xml | 36 - jonas/itests/pom.xml | 121 - .../modules/apis/jonas-deployment-api/pom.xml | 39 - .../org/ow2/jonas/deployment/api/DTDs.java | 45 - .../jonas/deployment/api/IDeploymentDesc.java | 47 - .../deployment/api/IDescriptionGroupDesc.java | 64 - .../deployment/api/IEJBLocalRefDesc.java | 42 - .../ow2/jonas/deployment/api/IEJBRefDesc.java | 64 - .../jonas/deployment/api/IEnvEntryDesc.java | 74 - .../deployment/api/IJNDIEnvRefsGroupDesc.java | 80 - .../api/IMessageDestinationRefDesc.java | 60 - .../api/IPersistenceUnitRefDesc.java | 50 - .../deployment/api/IResourceEnvRefDesc.java | 45 - .../deployment/api/IResourceRefDesc.java | 70 - .../jonas/deployment/api/IServiceRefDesc.java | 114 - .../org/ow2/jonas/deployment/api/Schemas.java | 44 - .../META-INF/jonas-deployment-api.bnd | 24 - .../modules/apis/jonas-management-api/pom.xml | 39 - .../extensions/base/api/IBaseManagement.java | 201 - .../base/api/J2EEMBeanAttributeInfo.java | 181 - .../base/api/ManagementException.java | 56 - .../extensions/cluster/api/ICluster.java | 78 - .../clusterdaemon/api/IClusterdaemon.java | 220 - .../container/api/IContainerManagement.java | 85 - .../extensions/domain/api/IDomain.java | 173 - .../extensions/server/api/IServer.java | 255 -- .../server/api/IServerManagement.java | 87 - .../META-INF/jonas-management-api.bnd | 29 - jonas/modules/apis/jonas-services-api/pom.xml | 72 - .../addon/deploy/api/config/IAddonConfig.java | 44 - .../api/deployable/IAddonDeployable.java | 46 - .../api/deployable/ISortableDeployable.java | 54 - .../deploy/api/deployer/IAddonDeployer.java | 54 - .../api/deployer/IAddonDeployerLog.java | 48 - .../addon/deploy/api/util/IAddonLogEntry.java | 38 - .../deploy/api/util/IAddonStructure.java | 79 - .../java/org/ow2/jonas/adm/AdmException.java | 44 - .../java/org/ow2/jonas/adm/AdmInterface.java | 178 - .../org/ow2/jonas/audit/AuditService.java | 42 - .../java/org/ow2/jonas/cmi/CmiService.java | 83 - .../configuration/ConfigurationManager.java | 89 - .../configuration/DeploymentPlanDeployer.java | 49 - .../jonas/datasource/DataSourceService.java | 60 - .../main/java/org/ow2/jonas/db/DBService.java | 36 - .../org/ow2/jonas/dbm/DataBaseService.java | 59 - .../jonas/depmonitor/MonitoringService.java | 39 - .../ow2/jonas/discovery/DiscoveryEvent.java | 38 - .../ow2/jonas/discovery/DiscoveryService.java | 36 - .../ow2/jonas/discovery/DiscoveryState.java | 54 - .../java/org/ow2/jonas/ear/EarService.java | 45 - .../ow2/jonas/ear/EarServiceException.java | 55 - .../java/org/ow2/jonas/ejb2/EJBService.java | 156 - .../org/ow2/jonas/ejb2/JTimerHandleInfo.java | 209 - .../ow2/jonas/ejb2/TimerHandleDelegate.java | 50 - .../org/ow2/jonas/ejb3/IEasyBeansService.java | 139 - .../main/java/org/ow2/jonas/ha/HaService.java | 56 - .../org/ow2/jonas/jms/JmsAdministration.java | 108 - .../java/org/ow2/jonas/jms/JmsManager.java | 130 - .../java/org/ow2/jonas/jms/JmsService.java | 40 - .../java/org/ow2/jonas/jmx/Interceptor.java | 41 - .../ow2/jonas/jmx/JManagementIdentifier.java | 89 - .../java/org/ow2/jonas/jmx/JmxService.java | 156 - .../jndi/checker/api/IResourceChecker.java | 38 - .../checker/api/IResourceCheckerInfo.java | 43 - .../checker/api/IResourceCheckerManager.java | 67 - .../jndi/checker/api/ResourceCheckpoints.java | 68 - .../java/org/ow2/jonas/jsf/JSFService.java | 40 - .../java/org/ow2/jonas/mail/MailService.java | 111 - .../ow2/jonas/mail/MailServiceException.java | 59 - .../org/ow2/jonas/mail/factory/JavaMail.java | 96 - .../ow2/jonas/management/DeployableState.java | 32 - .../jonas/management/J2EEServerService.java | 152 - .../ow2/jonas/management/ServiceManager.java | 99 - .../jonas/multitenant/MultitenantService.java | 167 - .../naming/JComponentContextFactory.java | 81 - .../JComponentContextFactoryDelegate.java | 56 - .../org/ow2/jonas/naming/JNamingManager.java | 111 - .../jonas/packaging/IPackagingManager.java | 106 - .../jonas/packaging/IPackagingStructure.java | 99 - .../jonas/properties/ServerProperties.java | 111 - .../jonas/properties/ServiceProperties.java | 49 - .../ow2/jonas/registry/RegistryService.java | 85 - .../main/java/org/ow2/jonas/resource/Rar.java | 67 - .../ow2/jonas/resource/ResourceService.java | 133 - .../resource/ResourceServiceException.java | 57 - .../ResourceMonitorService.java | 37 - .../ow2/jonas/security/SecurityService.java | 61 - .../security/realm/factory/JResource.java | 132 - .../realm/factory/JResourceException.java | 61 - .../security/realm/lib/HashPassword.java | 74 - .../jonas/security/realm/principal/JUser.java | 147 - .../org/ow2/jonas/service/ConfigService.java | 43 - .../service/JonasAlreadyStartedException.java | 46 - .../java/org/ow2/jonas/service/Service.java | 79 - .../ow2/jonas/service/ServiceException.java | 75 - .../jonas/smartclient/SmartclientService.java | 38 - .../smartclient/SmartclientServiceBase.java | 54 - .../java/org/ow2/jonas/tm/Enlistable.java | 50 - .../org/ow2/jonas/tm/TransactionManager.java | 75 - .../org/ow2/jonas/tm/TransactionService.java | 98 - .../org/ow2/jonas/tm/TxResourceManager.java | 37 - .../jonas/versioning/VersioningService.java | 106 - .../versioning/VersioningServiceBase.java | 138 - .../VirtualContextJMXInterface.java | 65 - .../ow2/jonas/web/IOnDemandHttpService.java | 39 - .../ow2/jonas/web/JWebContainerService.java | 177 - .../web/JWebContainerServiceException.java | 58 - .../org/ow2/jonas/workcleaner/CleanTask.java | 39 - .../workcleaner/DeployerLogException.java | 52 - .../ow2/jonas/workcleaner/IDeployerLog.java | 63 - .../org/ow2/jonas/workcleaner/LogEntry.java | 50 - .../workcleaner/WorkCleanerException.java | 54 - .../jonas/workcleaner/WorkCleanerService.java | 53 - .../jonas/workmanager/WorkManagerService.java | 43 - .../ow2/jonas/ws/jaxrpc/IJAXRPCService.java | 132 - .../org/ow2/jonas/ws/jaxrpc/WSException.java | 57 - .../org/ow2/jonas/ws/jaxws/EndpointType.java | 35 - .../org/ow2/jonas/ws/jaxws/IJAXWSService.java | 90 - .../org/ow2/jonas/ws/jaxws/IWSRequest.java | 69 - .../org/ow2/jonas/ws/jaxws/IWSResponse.java | 48 - .../jaxws/IWebServiceDeploymentManager.java | 87 - .../jonas/ws/jaxws/IWebServiceEndpoint.java | 116 - .../jonas/ws/jaxws/IWebservicesContainer.java | 87 - .../jonas/ws/jaxws/IWebservicesModule.java | 76 - .../ow2/jonas/ws/jaxws/PortIdentifier.java | 93 - .../org/ow2/jonas/ws/jaxws/PortMetaData.java | 161 - .../org/ow2/jonas/ws/jaxws/WSException.java | 88 - .../ws/jaxws/ejb/IEJBWebserviceEndpoint.java | 62 - .../ws/jaxws/ejb/ISecurityConstraint.java | 69 - .../ow2/jonas/ws/jaxws/ejb/IWebDeployer.java | 57 - .../ContextNamingStrategyException.java | 63 - .../jaxws/ejb/context/IContextNamingInfo.java | 67 - .../ejb/context/IContextNamingStrategy.java | 42 - .../jonas/ws/publish/AbsWSDLPublisher.java | 50 - .../ow2/jonas/ws/publish/PublicationInfo.java | 90 - .../ws/publish/PublishableDefinition.java | 76 - .../ow2/jonas/ws/publish/WSDLPublisher.java | 54 - .../ws/publish/WSDLPublisherException.java | 64 - .../ws/publish/WSDLPublisherManager.java | 45 - .../resources/META-INF/jonas-services-api.bnd | 28 - jonas/modules/apis/pom.xml | 46 - jonas/modules/client-bootstrap/pom.xml | 55 - .../org/ow2/jonas/client/boot/Bootstrap.java | 118 - .../resources/META-INF/client-bootstrap.bnd | 34 - jonas/modules/client/core/pom.xml | 156 - .../org/ow2/jonas/client/ClientContainer.java | 1521 ------- .../client/ClientContainerException.java | 59 - .../naming/ClientInitialContextFactory.java | 90 - .../core/src/main/jonas-resources/bin/jclient | 102 - .../src/main/jonas-resources/bin/jclient.bat | 123 - jonas/modules/client/pom.xml | 42 - .../modules/ee-components/jca/jdbc/cp/pom.xml | 46 - .../cp/src/main/rar/META-INF/jonas-ra.xml | 78 - .../jca/jdbc/cp/src/main/rar/META-INF/ra.xml | 86 - .../modules/ee-components/jca/jdbc/dm/pom.xml | 46 - .../dm/src/main/rar/META-INF/jonas-ra.xml | 58 - .../jca/jdbc/dm/src/main/rar/META-INF/ra.xml | 61 - .../modules/ee-components/jca/jdbc/ds/pom.xml | 46 - .../ds/src/main/rar/META-INF/jonas-ra.xml | 78 - .../jca/jdbc/ds/src/main/rar/META-INF/ra.xml | 86 - .../ee-components/jca/jdbc/glue/pom.xml | 54 - .../org/ow2/jonas/ee/jdbc/ConnectionImpl.java | 301 -- .../jonas/ee/jdbc/ConnectionManagerImpl.java | 62 - .../jonas/ee/jdbc/ConnectionPoolMCFImpl.java | 141 - .../ee/jdbc/ConnectionRequestInfoImpl.java | 86 - .../org/ow2/jonas/ee/jdbc/DataSourceImpl.java | 169 - .../ow2/jonas/ee/jdbc/DataSourceMCFImpl.java | 136 - .../jonas/ee/jdbc/DriverManagerMCFImpl.java | 130 - .../org/ow2/jonas/ee/jdbc/DriverWrapper.java | 65 - .../java/org/ow2/jonas/ee/jdbc/MCFData.java | 134 - .../ee/jdbc/ManagedConnectionFactoryImpl.java | 720 ---- .../jonas/ee/jdbc/ManagedConnectionImpl.java | 593 --- .../org/ow2/jonas/ee/jdbc/MetaDataImpl.java | 118 - .../ow2/jonas/ee/jdbc/XAExceptionUtils.java | 61 - .../java/org/ow2/jonas/ee/jdbc/XAMCFImpl.java | 127 - .../org/ow2/jonas/ee/jdbc/XAResourceImpl.java | 342 -- jonas/modules/ee-components/jca/jdbc/pom.xml | 48 - .../modules/ee-components/jca/jdbc/xa/pom.xml | 46 - .../xa/src/main/rar/META-INF/jonas-ra.xml | 78 - .../jca/jdbc/xa/src/main/rar/META-INF/ra.xml | 86 - jonas/modules/ee-components/jca/pom.xml | 45 - .../ee-components/jca/scout/glue/pom.xml | 72 - .../jonas/ee/scout/JAXRResourceAdapter.java | 96 - .../jonas/ee/scout/JConnectionFactory.java | 67 - .../scout/ManagedConnectionFactoryImpl.java | 237 -- .../ee-components/jca/scout/plans/pom.xml | 74 - jonas/modules/ee-components/jca/scout/pom.xml | 46 - .../ee-components/jca/scout/rar/pom.xml | 63 - .../rar/src/main/rar/META-INF/jonas-ra.xml | 38 - .../scout/rar/src/main/rar/META-INF/ra.xml | 94 - .../ee-components/jonas-admin/core/pom.xml | 294 -- .../webapp/jonasadmin/ApplicationLocales.java | 163 - .../webapp/jonasadmin/ApplyTopAction.java | 57 - .../webapp/jonasadmin/EditTopAction.java | 107 - .../webapp/jonasadmin/JettyObjectName.java | 63 - .../ow2/jonas/webapp/jonasadmin/Jlists.java | 338 -- .../jonas/webapp/jonasadmin/JmsConnFact.java | 44 - .../jonasadmin/JonasAdminException.java | 72 - .../webapp/jonasadmin/JonasAdminJmx.java | 166 - .../webapp/jonasadmin/JonasBaseAction.java | 1048 ----- .../webapp/jonasadmin/JonasServerItem.java | 54 - .../webapp/jonasadmin/JonasTreeBuilder.java | 2805 ------------ .../jonas/webapp/jonasadmin/LogOutAction.java | 118 - .../webapp/jonasadmin/MBeanTreeBuilder.java | 363 -- .../jonas/webapp/jonasadmin/ServiceName.java | 50 - .../webapp/jonasadmin/SetUpTreeAction.java | 152 - .../jonasadmin/SetupWhereAreYouAction.java | 88 - .../ow2/jonas/webapp/jonasadmin/TopForm.java | 80 - .../jonas/webapp/jonasadmin/TreeAction.java | 170 - .../jonas/webapp/jonasadmin/WhereAreYou.java | 370 -- .../catalina/ApplyConnectorAction.java | 190 - .../catalina/ApplyConnectorsAction.java | 76 - .../ApplyConnectorsConfirmAction.java | 88 - .../catalina/CatalinaBaseAction.java | 89 - .../jonasadmin/catalina/ConnectorForm.java | 1106 ----- .../jonasadmin/catalina/ConnectorItem.java | 139 - .../catalina/ConnectorItemByPort.java | 73 - .../catalina/CreateConnectorAction.java | 87 - .../catalina/EditConnectorAction.java | 235 -- .../catalina/ItemsConnectorsForm.java | 101 - .../catalina/ListConnectorsAction.java | 84 - .../catalina/SaveCatalinaAction.java | 79 - .../clusterd/ApplyJonasServersAction.java | 252 -- .../clusterd/ClusterDaemonItem.java | 93 - .../clusterd/ClusterdServerForm.java | 121 - .../clusterd/DaemonProxyClusterAction.java | 146 - .../DaemonProxyClusterApplyModifAction.java | 74 - ...emonProxyClusterConfigureServerAction.java | 114 - .../DaemonProxyClusterModifyAction.java | 134 - .../clusterd/EditAllClusterDaemonsAction.java | 61 - .../clusterd/EditClusterDaemonAction.java | 100 - .../clusterd/EditClusterdVmMemoryAction.java | 82 - .../clusterd/HaltJonasServerAction.java | 83 - .../jonasadmin/clusterd/MemoryForm.java | 159 - .../clusterd/ServerConfigModifiedAction.java | 86 - .../clusterd/StartJonasServerAction.java | 83 - .../StartStandbyJonasServerAction.java | 83 - .../clusterd/StopJonasServerAction.java | 85 - .../servlet/MemoryGraphRemoteHostServlet.java | 143 - .../webapp/jonasadmin/cmi/ApplyCmiAction.java | 212 - .../jonasadmin/cmi/ClusterAttribute.java | 73 - .../cmi/ClusterPropertyAttribute.java | 80 - .../jonasadmin/cmi/CmiClusterAction.java | 83 - .../webapp/jonasadmin/cmi/CmiClusterForm.java | 133 - .../jonas/webapp/jonasadmin/cmi/CmiForm.java | 172 - .../webapp/jonasadmin/cmi/CmiObject.java | 113 - .../jonasadmin/cmi/CmiObjectAction.java | 292 -- .../webapp/jonasadmin/cmi/CmiObjectForm.java | 356 -- .../jonasadmin/cmi/CmiProtocolAction.java | 70 - .../jonasadmin/cmi/CmiProtocolForm.java | 65 - .../jonasadmin/cmi/CmiServerAction.java | 121 - .../webapp/jonasadmin/cmi/CmiServerForm.java | 111 - .../webapp/jonasadmin/cmi/LBAttribute.java | 89 - .../jonas/webapp/jonasadmin/cmi/Protocol.java | 95 - .../jonas/webapp/jonasadmin/cmi/Provider.java | 94 - .../jonasadmin/common/BeanComparator.java | 193 - .../webapp/jonasadmin/common/ItemsForm.java | 86 - .../common/LabelValueByLabelComparator.java | 53 - .../webapp/jonasadmin/common/ModuleItem.java | 104 - .../jonasadmin/common/ModuleItemByName.java | 61 - .../common/ObjectNameComparator.java | 59 - .../webapp/jonasadmin/common/TargetItem.java | 26 - .../jonasadmin/deploy/ApplyDeployAction.java | 86 - .../deploy/ApplyDeployConfirmAction.java | 133 - .../deploy/ApplyDomainDeployAction.java | 140 - .../ApplyDomainDeployConfirmAction.java | 257 -- .../jonasadmin/deploy/ApplyRemoveAction.java | 81 - .../deploy/ApplyRemoveConfirmAction.java | 99 - .../jonasadmin/deploy/ApplyUploadAction.java | 151 - .../jonasadmin/deploy/BaseDeployAction.java | 865 ---- .../webapp/jonasadmin/deploy/DeployForm.java | 246 -- .../jonasadmin/deploy/DomainDeployForm.java | 362 -- .../jonasadmin/deploy/EditDeployAction.java | 88 - .../deploy/EditDomainDeployAction.java | 150 - .../jonasadmin/deploy/EditRemoveAction.java | 82 - .../jonasadmin/deploy/EditUploadAction.java | 70 - .../deploy/OperationInProgressException.java | 38 - .../webapp/jonasadmin/deploy/RemoveForm.java | 182 - .../webapp/jonasadmin/deploy/UploadForm.java | 156 - .../jonasadmin/domain/ApplyClusterAction.java | 76 - .../domain/ApplyJonasServerAction.java | 121 - .../domain/ApplyJonasServersAction.java | 67 - .../ApplyJonasServersConfirmAction.java | 122 - .../ApplyJonasServersConfirmMoveAction.java | 68 - .../domain/CreateClusterAction.java | 56 - .../domain/CreateJonasServerAction.java | 172 - .../webapp/jonasadmin/domain/DomainForm.java | 242 -- .../jonasadmin/domain/EditDomainAction.java | 255 -- .../domain/HaltJonasServerAction.java | 46 - .../jonasadmin/domain/ItemsServersForm.java | 89 - .../jonasadmin/domain/JonasServerItem.java | 77 - .../domain/JonasServersMoveAction.java | 80 - .../webapp/jonasadmin/domain/ModuleItem.java | 50 - .../jonasadmin/domain/NewClusterForm.java | 73 - .../jonasadmin/domain/NewServerForm.java | 189 - .../jonasadmin/domain/StartClusterAction.java | 69 - .../domain/StartClusterDaemonAction.java | 73 - .../domain/StartJonasServerAction.java | 66 - .../domain/StartStandbyJonasServerAction.java | 68 - .../jonasadmin/domain/StopClusterAction.java | 68 - .../domain/StopClusterDaemonAction.java | 72 - .../domain/StopJonasServerAction.java | 74 - .../domain/StopStandbyJonasServerAction.java | 73 - .../ConnectionFactoryEditAction.java | 119 - .../ConnectionFactoryEditForm.java | 181 - .../jonasmqconnect/DestinationAddAction.java | 23 - .../DestinationAddConfirmAction.java | 57 - .../DestinationAddConfirmForm.java | 120 - .../jonasmqconnect/DestinationAddForm.java | 7 - .../DestinationDeleteAction.java | 37 - .../DestinationDeleteConfirmAction.java | 60 - .../DestinationDeleteConfirmForm.java | 115 - .../jonasmqconnect/DestinationDeleteForm.java | 117 - .../jonasmqconnect/DestinationEditAction.java | 154 - .../jonasmqconnect/DestinationEditForm.java | 200 - .../jonasmqconnect/DestinationsAction.java | 84 - .../jonasmqconnect/DestinationsForm.java | 44 - .../jonasmqconnect/JonasMqConnectAction.java | 108 - .../jonasmqconnect/JonasMqConnectForm.java | 197 - .../JonasMqConnectPlatformAction.java | 52 - .../JonasMqConnectPlatformForm.java | 176 - .../jonasmqconnect/MdbEditAction.java | 71 - .../jonasmqconnect/MdbEditForm.java | 221 - .../jonasadmin/jonasmqconnect/MdbsAction.java | 71 - .../jonasadmin/jonasmqconnect/MdbsForm.java | 19 - .../jonasmqconnect/util/ItemDestination.java | 78 - .../jonasmqconnect/util/ItemMdb.java | 72 - .../jonasmqconnect/util/LogUtils.java | 30 - .../jonasmqconnect/util/MqObjectNames.java | 161 - .../util/PropertiesComparator.java | 24 - .../jonasmqconnect/util/PropertiesUtil.java | 180 - .../jonasmqconnect/util/Property.java | 55 - .../jonasserver/BasicJonasServerForm.java | 77 - .../jonasserver/CmiRegistryResource.java | 78 - .../jonasserver/EditJmxServerAction.java | 104 - .../jonasserver/EditJonasServerAction.java | 165 - .../jonasadmin/jonasserver/EditJvmAction.java | 118 - .../jonasserver/EditRegistryAction.java | 104 - .../jonasserver/EditServletServerAction.java | 99 - .../jonasadmin/jonasserver/JmxServerForm.java | 140 - .../jonasserver/JndiResourceForm.java | 111 - .../jonasserver/JndiResourceItem.java | 100 - .../jonasserver/JndiResourcesForm.java | 57 - .../jonasserver/JonasServerForm.java | 170 - .../jonasserver/JonasServerRunGCAction.java | 88 - .../jonasserver/JonasServerStopAction.java | 85 - .../jonasadmin/jonasserver/JvmForm.java | 98 - .../jonasserver/ListRegistryAction.java | 137 - .../jonasserver/ServletServerForm.java | 134 - .../joramplatform/AddJoramReaderAction.java | 48 - .../joramplatform/AddJoramWriterAction.java | 48 - .../joramplatform/ApplyDestinationAction.java | 100 - .../joramplatform/ApplyJoramQueueAction.java | 58 - .../joramplatform/ApplyJoramReaderAction.java | 80 - .../joramplatform/ApplyJoramTopicAction.java | 60 - .../joramplatform/ApplyJoramWriterAction.java | 81 - .../joramplatform/ApplyUserAction.java | 108 - .../CreateJoramDestinationAction.java | 48 - .../joramplatform/CreateJoramUserAction.java | 48 - .../joramplatform/DestinationForm.java | 303 -- .../joramplatform/DestinationItem.java | 75 - .../DestinationItemByNameComparator.java | 46 - .../joramplatform/EditJoramBaseAction.java | 562 --- .../EditJoramDestinationAction.java | 48 - .../EditJoramPlatformAction.java | 145 - .../joramplatform/EditJoramQueueAction.java | 189 - .../EditJoramRemoteServerAction.java | 76 - .../EditJoramResourceAdapterAction.java | 86 - .../joramplatform/EditJoramServerAction.java | 156 - .../joramplatform/EditJoramTopicAction.java | 187 - .../joramplatform/EditJoramUserAction.java | 52 - .../joramplatform/ExportRepository.java | 90 - .../jonasadmin/joramplatform/ItemBase.java | 83 - .../joramplatform/ItemDestination.java | 82 - .../joramplatform/ItemDestinationByName.java | 45 - .../jonasadmin/joramplatform/ItemServer.java | 32 - .../jonasadmin/joramplatform/ItemUser.java | 35 - .../joramplatform/JoramAdapterForm.java | 278 -- .../joramplatform/JoramDestinationForm.java | 101 - .../joramplatform/JoramLocalQueueForm.java | 103 - .../joramplatform/JoramLocalServerForm.java | 109 - .../joramplatform/JoramLocalTopicForm.java | 103 - .../joramplatform/JoramPlatformForm.java | 468 -- .../joramplatform/JoramQueueForm.java | 158 - .../joramplatform/JoramReaderWriterForm.java | 128 - .../joramplatform/JoramRemoteServerForm.java | 81 - .../joramplatform/JoramServersForm.java | 98 - .../joramplatform/JoramTopicForm.java | 121 - .../joramplatform/JoramUserForm.java | 116 - .../joramplatform/MonitoringDestForm.java | 148 - .../joramplatform/ReloadJoramAdmin.java | 100 - .../RemoveConfirmDestinationsAction.java | 109 - .../RemoveConfirmUsersAction.java | 101 - .../joramplatform/RemoveDestinationsForm.java | 74 - .../RemoveJoramDestinationsAction.java | 65 - .../joramplatform/RemoveJoramUsersAction.java | 65 - .../joramplatform/RemoveUsersForm.java | 74 - .../ApplyCatalinaAccessLoggerAction.java | 189 - .../logging/ApplyLoggersAction.java | 92 - .../logging/ApplyLoggersConfirmAction.java | 91 - .../logging/ApplyLoggingJonasAction.java | 87 - .../jonasadmin/logging/BaseLoggerAction.java | 94 - .../logging/CatalinaAccessLogValveForm.java | 247 -- .../jonasadmin/logging/CatalinaValveForm.java | 199 - .../EditCatalinaAccessLoggerAction.java | 154 - .../logging/EditLoggingJonasAction.java | 116 - .../jonasadmin/logging/ListLoggersAction.java | 78 - .../webapp/jonasadmin/logging/LoggerItem.java | 141 - .../jonasadmin/logging/LoggingJonasForm.java | 121 - .../webapp/jonasadmin/logging/TopicLevel.java | 64 - .../logging/ViewLoggingJonasAction.java | 89 - .../logging/ViewLoggingJonasForm.java | 200 - .../mbean/ApplyMbeanFilteringAction.java | 69 - .../mbean/ListJ2eeMBeansAction.java | 82 - .../mbean/ListMBeanAttributesAction.java | 302 -- .../mbean/ListMBeanDetailsAction.java | 91 - .../mbean/ListMBeanOperationsAction.java | 220 - .../mbean/ListMBeanPropertiesAction.java | 129 - .../jonasadmin/mbean/ListMBeansAction.java | 89 - .../mbean/ListOwnerMBeansAction.java | 83 - .../mbean/ListUnknownMBeansAction.java | 82 - .../jonasadmin/mbean/MbeanFilteringForm.java | 118 - .../monitoring/ApplyCmiClusterAction.java | 53 - .../monitoring/ApplyMemoryAction.java | 72 - .../monitoring/ApplyMonitoringAction.java | 75 - .../monitoring/ApplyStackDumpAction.java | 61 - .../monitoring/BaseClusterForm.java | 56 - .../monitoring/ClusterdAttribute.java | 92 - .../monitoring/CmiClusterAction.java | 62 - .../monitoring/CmiMemberAction.java | 54 - .../jonasadmin/monitoring/CmiMemberForm.java | 26 - .../monitoring/DaemonProxyClusterAction.java | 344 -- .../monitoring/DaemonProxyClusterForm.java | 331 -- .../monitoring/DaemonProxyMemberAction.java | 40 - .../monitoring/DaemonProxyMemberForm.java | 7 - .../monitoring/DisplayNodeInfoAction.java | 278 -- .../monitoring/EditMemoryAction.java | 96 - .../monitoring/EditMonitoringAction.java | 76 - .../monitoring/EditStackDumpAction.java | 56 - .../monitoring/EjbHaClusterAction.java | 50 - .../monitoring/EjbHaClusterForm.java | 45 - .../monitoring/EjbHaMemberAction.java | 54 - .../monitoring/EjbHaMemberForm.java | 29 - .../monitoring/JkClusterAction.java | 64 - .../jonasadmin/monitoring/JkClusterForm.java | 46 - .../jonasadmin/monitoring/JkMemberAction.java | 63 - .../jonasadmin/monitoring/JkMemberForm.java | 94 - .../monitoring/JoramClusterAction.java | 59 - .../monitoring/JoramClusterForm.java | 29 - .../monitoring/JoramMemberAction.java | 40 - .../monitoring/JoramMemberForm.java | 7 - .../monitoring/LogicalClusterAction.java | 59 - .../monitoring/LogicalClusterForm.java | 29 - .../monitoring/LogicalMemberAction.java | 40 - .../monitoring/LogicalMemberForm.java | 7 - .../jonasadmin/monitoring/MemoryForm.java | 157 - .../monitoring/MemoryGraphServlet.java | 232 - .../jonasadmin/monitoring/MonitoringForm.java | 84 - .../jonasadmin/monitoring/NodeInfoForm.java | 587 --- .../monitoring/PingAllJonasServersAction.java | 123 - .../jonasadmin/monitoring/StackDumpForm.java | 66 - .../StartAllJonasServersAction.java | 75 - .../monitoring/StopAllJonasServersAction.java | 75 - .../monitoring/TomcatClusterAction.java | 59 - .../monitoring/TomcatClusterForm.java | 84 - .../monitoring/TomcatMemberAction.java | 68 - .../monitoring/TomcatMemberForm.java | 141 - .../monitoring/graph/ServerGraphForm.java | 151 - .../monitoring/graph/ServerGraphsAction.java | 255 -- .../graph/ServerThreadCountAction.java | 78 - .../graph/ServerTransactionsCountAction.java | 79 - .../servlets/ServerCurrentTxServlet.java | 159 - .../graph/servlets/ThreadCountServlet.java | 143 - .../server/BegunTransactionsServlet.java | 154 - ...BytesReceivedByConnectorTomcatServlet.java | 151 - .../BytesSentByConnectorTomcatServlet.java | 188 - ...onnectionFailuresJCAConnectionServlet.java | 146 - .../ConnectionLeaksJCAConnectionServlet.java | 145 - .../ConnectionLeaksJDBCResourceServlet.java | 143 - .../CurrentBusyJCAConnectionServlet.java | 145 - .../CurrentBusyJDBCResourceServlet.java | 143 - .../server/CurrentNumberOfEJBServlet.java | 154 - .../CurrentNumberOfEntityBeanServlet.java | 154 - .../server/CurrentNumberOfMDBServlet.java | 154 - .../server/CurrentNumberOfSBFServlet.java | 154 - .../server/CurrentNumberOfSBLServlet.java | 154 - .../server/CurrentUsedMemoryServlet.java | 37 - .../servlets/server/EditMemoryServlet.java | 156 - .../ErrorCountByConnectorTomcatServlet.java | 137 - .../server/JmsQMsgDeliverServlet.java | 147 - .../server/JmsQMsgReceiveServlet.java | 147 - .../server/JmsTopicMsgDeliverServlet.java | 147 - .../server/JmsTopicMsgReceiveServlet.java | 147 - .../graph/servlets/server/LoadCPUServlet.java | 36 - ...rocessingTimeByConnectorTomcatServlet.java | 138 - .../RejectedOpenJCAConnectionServlet.java | 145 - .../RejectedOpenJDBCResourceServlet.java | 145 - .../RequestCountByConnectorTomcatServlet.java | 138 - .../ServedOpenJCAConnectionServlet.java | 146 - .../server/ServedOpenJDBCResourceServlet.java | 144 - .../ThreadBusyConnectorTomcatServlet.java | 142 - .../TotalCommittedTransactionsServlet.java | 161 - .../TotalExpiredTransactionsServlet.java | 157 - .../TotalRolledbackTransactionsServlet.java | 160 - .../WaiterCountJCAConnectionServlet.java | 149 - .../WaiterCountJDBCResourceServlet.java | 144 - .../graph/servlets/server/WorkersServlet.java | 36 - .../monitoring/graph/utils/GraphUtils.java | 231 - .../ApplyConfirmDestinationsAction.java | 78 - .../ApplyDatasourcePropertiesAction.java | 125 - .../resource/ApplyDestinationAction.java | 97 - .../resource/ApplyDestinationsAction.java | 65 - .../ApplyMailFactoryPropertiesAction.java | 86 - ...lyMimePartMailFactoryPropertiesAction.java | 79 - ...plySessionMailFactoryPropertiesAction.java | 80 - .../resource/DatasourcePropertiesForm.java | 292 -- .../jonasadmin/resource/DestinationForm.java | 101 - .../jonasadmin/resource/DestinationItem.java | 75 - .../DestinationItemByNameComparator.java | 46 - .../EditDatasourcePropertiesAction.java | 138 - .../resource/EditDestinationAction.java | 58 - .../EditMailFactoryPropertiesAction.java | 154 - ...itMimePartMailFactoryPropertiesAction.java | 91 - ...ditSessionMailFactoryPropertiesAction.java | 91 - .../resource/ItemsDestinationsForm.java | 74 - .../resource/ListDatasourcesAction.java | 88 - .../resource/ListJmsResourcesAction.java | 128 - .../resource/ListMailFactoriesAction.java | 94 - .../jonasadmin/resource/MailFactoryItem.java | 75 - .../resource/MailFactoryPropertiesForm.java | 185 - .../resource/SaveDestinationAction.java | 76 - .../ApplyCreateResourceAdapterAction.java | 228 - ...lyTemplateCreateResourceAdapterAction.java | 79 - .../CreateResourceAdapterAction.java | 79 - .../CreateResourceAdapterForm.java | 709 ---- .../ApplyConfirmMemoryRealmAction.java | 127 - .../security/ApplyConfirmRealmsAction.java | 96 - .../security/ApplyDatasourceRealmAction.java | 124 - .../security/ApplyGroupMemoryRealmAction.java | 130 - .../security/ApplyLdapRealmAction.java | 140 - .../security/ApplyMemoryRealmAction.java | 101 - .../security/ApplyRealmsAction.java | 95 - .../security/ApplyRoleMemoryRealmAction.java | 100 - .../security/ApplyUserMemoryRealmAction.java | 162 - .../security/BaseMemoryRealmAction.java | 222 - .../security/BaseSecurityAction.java | 91 - .../jonasadmin/security/ClearCacheAction.java | 84 - .../security/DatasourceRealmForm.java | 180 - .../security/EditDatasourceRealmAction.java | 122 - .../security/EditGroupMemoryRealmAction.java | 88 - .../security/EditLdapRealmAction.java | 129 - .../security/EditMemoryRealmAction.java | 98 - .../security/EditMemoryRealmGroupsAction.java | 82 - .../security/EditMemoryRealmRolesAction.java | 82 - .../security/EditMemoryRealmUsersAction.java | 82 - .../EditNewGroupMemoryRealmAction.java | 81 - .../EditNewRoleMemoryRealmAction.java | 84 - .../EditNewUserMemoryRealmAction.java | 85 - .../security/EditRoleMemoryRealmAction.java | 92 - .../EditSecurityCatalinaRealmAction.java | 98 - .../security/EditUserMemoryRealmAction.java | 89 - .../jonasadmin/security/FactoryRealmForm.java | 111 - .../security/GroupMemoryRealmForm.java | 192 - .../security/ItemsMemoryRealmForm.java | 97 - .../jonasadmin/security/ItemsRealmsForm.java | 99 - .../jonasadmin/security/LdapRealmForm.java | 327 -- .../jonasadmin/security/ListRealmsAction.java | 134 - .../jonasadmin/security/MemoryRealmForm.java | 104 - .../security/RoleMemoryRealmForm.java | 106 - .../jonasadmin/security/SaveRealmAction.java | 86 - .../security/UserMemoryRealmForm.java | 302 -- .../service/EditServiceSecurityAction.java | 98 - .../service/ListServicesAction.java | 113 - .../webapp/jonasadmin/service/ModuleForm.java | 103 - .../jonasadmin/service/ServiceItem.java | 124 - .../service/ServiceItemByNameComparator.java | 49 - .../service/StartJonasServiceAction.java | 71 - .../service/StopJonasServiceAction.java | 71 - .../ApplyContainersStatisticAction.java | 72 - .../ApplyEjbContainersStatisticAction.java | 107 - .../container/ApplyWebAppCatalinaAction.java | 198 - .../container/ApplyWebAppJettyAction.java | 134 - .../ApplyWebAppVirtualCatalinaAction.java | 97 - .../container/ApplyWebsConfirmAction.java | 97 - .../service/container/BaseWebAppAction.java | 420 -- .../service/container/ContainerForm.java | 293 -- .../service/container/ContainerItem.java | 125 - .../container/ContainerItemByFile.java | 58 - .../jonasadmin/service/container/EarForm.java | 222 - .../container/EditContainerAction.java | 298 -- .../EditContainerStatisticAction.java | 72 - .../service/container/EditEarAction.java | 254 -- .../container/EditEjbCsStatisticAction.java | 121 - .../service/container/EditWarAction.java | 86 - .../service/container/EditWebAppAction.java | 63 - .../container/EditWebAppCatalinaAction.java | 110 - .../container/EditWebAppJettyAction.java | 97 - .../container/EjbContainersStatisticForm.java | 427 -- .../container/ListAppContainersAction.java | 106 - .../container/ListContainersAction.java | 114 - .../container/ListWebContainersAction.java | 164 - .../service/container/SelectedItemsForm.java | 85 - .../container/ViewContainerAction.java | 72 - .../container/ViewContainerEjbsAction.java | 73 - .../jonasadmin/service/container/WarForm.java | 183 - .../service/container/WebAppCatalinaForm.java | 195 - .../service/container/WebAppForm.java | 167 - .../service/container/WebAppItem.java | 158 - .../container/WebAppItemByPathContext.java | 49 - .../service/container/WebAppJettyForm.java | 145 - .../container/WebAppVirtualCatalinaForm.java | 141 - .../service/db/ApplyDatasourceAction.java | 112 - .../service/db/ApplyDatasourceStatAction.java | 97 - .../jonasadmin/service/db/DatasourceForm.java | 485 --- .../jonasadmin/service/db/DatasourceItem.java | 92 - .../db/DatasourceItemByNameComparator.java | 49 - .../service/db/EditDatasourceAction.java | 146 - .../service/db/EditDatasourceStatAction.java | 115 - .../service/db/ListDatabasesAction.java | 110 - .../ApplyDepmonitorConfigurationAction.java | 54 - .../depmonitor/DepMonitorServiceForm.java | 63 - .../EditServiceDepmonitorAction.java | 58 - .../discovery/DiscoveryServiceForm.java | 86 - .../DiscoveryServiceStartMasterAction.java | 97 - .../discovery/EditServiceDiscoveryAction.java | 71 - .../ApplyEjbSessionConfigurationAction.java | 91 - .../jonasadmin/service/ejb/EditEjbAction.java | 385 -- .../service/ejb/EditEjbEntityAction.java | 91 - .../service/ejb/EditEjbMessageAction.java | 80 - .../service/ejb/EditEjbSessionAction.java | 106 - .../service/ejb/EditEjbSessionSblAction.java | 101 - .../jonasadmin/service/ejb/EjbDependency.java | 85 - .../jonasadmin/service/ejb/EjbEntityForm.java | 234 - .../jonasadmin/service/ejb/EjbForm.java | 806 ---- .../service/ejb/EjbMessageForm.java | 80 - .../service/ejb/EjbSessionForm.java | 180 - .../service/ejb/ExecuteEjbAction.java | 131 - .../webapp/jonasadmin/service/jms/CfForm.java | 102 - .../service/jms/EditJmsServiceAction.java | 98 - .../service/jms/JmsServiceForm.java | 96 - .../jms/ListConnectionFactoriesAction.java | 75 - .../service/jms/ListQueuesAction.java | 78 - .../service/jms/ListTopicsAction.java | 76 - .../jms/PresentConnectionFactoryAction.java | 126 - .../service/jms/PresentQueueAction.java | 130 - .../service/jms/PresentTopicAction.java | 126 - .../jonasadmin/service/jms/QueueForm.java | 112 - .../jonasadmin/service/jms/TopicForm.java | 102 - .../jtm/ApplyConfirmXaResourceAction.java | 157 - .../jtm/ApplyJtmConfigurationAction.java | 85 - .../service/jtm/EditJtmServiceAction.java | 119 - .../jtm/EditTransactionMonitorAction.java | 115 - .../jtm/EditTransactionRecoveryAction.java | 116 - .../jtm/EditTransactionStatisticAction.java | 89 - .../service/jtm/ItemsXaResourceForm.java | 89 - .../service/jtm/JtmServiceForm.java | 141 - .../service/jtm/JtmServiceMonitorForm.java | 63 - .../service/jtm/JtmServiceRecoveryForm.java | 64 - .../service/jtm/JtmServiceStatisticForm.java | 101 - .../service/jtm/JtmServiceXAResourceForm.java | 65 - .../service/jtm/ListXaResourceAction.java | 144 - .../service/jtm/ResetCountersAction.java | 79 - .../service/jtm/ResetRecoveryAction.java | 114 - .../service/jtm/ResetTransactionsAction.java | 113 - .../webapp/jonasadmin/service/jtm/TxItem.java | 94 - .../jonasadmin/service/jtm/TxRecovery.java | 103 - .../jonasadmin/service/jtm/TxXaresource.java | 120 - .../mail/ApplyMimePartMailFactoryAction.java | 116 - .../mail/ApplySessionMailFactoryAction.java | 101 - .../service/mail/EditMailFactoryAction.java | 124 - .../service/mail/EditMailServiceAction.java | 83 - .../mail/EditMimePartMailFactoryAction.java | 95 - .../mail/EditSessionMailFactoryAction.java | 93 - .../mail/ListMimePartMailFactoriesAction.java | 94 - .../mail/ListSessionMailFactoriesAction.java | 94 - .../service/mail/MailFactoryForm.java | 192 - .../service/mail/MailFactoryItem.java | 66 - .../service/mail/MailServiceForm.java | 95 - .../resource/ApplyResourceAdapterAction.java | 118 - .../ApplyResourceAdapterCFAction.java | 116 - .../resource/EditResourceAdapterAOAction.java | 104 - .../resource/EditResourceAdapterASAction.java | 104 - .../resource/EditResourceAdapterAction.java | 244 -- .../resource/EditResourceAdapterCFAction.java | 149 - .../EditResourceAdapterCFStatAction.java | 111 - .../EditResourceAdapterStatAction.java | 112 - .../resource/ListResourceAdaptersAction.java | 106 - .../resource/ResourceAdapterAOForm.java | 126 - .../resource/ResourceAdapterASForm.java | 122 - .../resource/ResourceAdapterCFForm.java | 462 -- .../service/resource/ResourceAdapterForm.java | 572 --- .../service/resource/ResourceItem.java | 109 - .../service/resource/ResourceItemByFile.java | 58 - .../EditSmartclientServiceAction.java | 78 - .../smartclient/SmartclientServiceForm.java | 89 - .../ApplyVersioningConfigurationAction.java | 72 - .../EditVersioningServiceAction.java | 86 - .../versioning/VersioningServiceForm.java | 106 - .../webservice/HandlersDetailsAction.java | 136 - .../webservice/ListWebServiceAction.java | 79 - .../PortComponentsDetailsAction.java | 103 - .../webservice/ViewHandlersAction.java | 105 - .../webservice/ViewPortComponentsAction.java | 88 - .../webservice/WebServiceDetailsAction.java | 83 - .../webservice/provider/JOnASProvider.java | 327 -- .../provider/element/HandlerItem.java | 280 -- .../provider/element/InitParamItem.java | 132 - .../provider/element/PortComponentItem.java | 243 -- .../provider/element/ServiceImplBean.java | 104 - .../element/WebServiceDescriptionItem.java | 255 -- .../ApplyWorkcleanerConfigurationAction.java | 71 - .../EditWorkcleanerServiceAction.java | 76 - .../workcleaner/WorkcleanerServiceForm.java | 88 - .../ApplyWorkmanagerConfigurationAction.java | 70 - .../EditWorkmanagerServiceAction.java | 52 - .../workmanager/WorkmanagerServiceForm.java | 73 - .../xml/ApplyArchiveConfigAction.java | 422 -- .../jonasadmin/xml/ArchiveConfigAction.java | 130 - .../xml/ArchiveConfigAdvancedAction.java | 121 - .../jonasadmin/xml/ArchiveConfigForm.java | 421 -- .../xml/ArchiveConfigSelectAction.java | 80 - .../jonasadmin/xml/ArchiveUtilAction.java | 99 - .../webapp/jonasadmin/xml/XMLToFormUtil.java | 448 -- .../xml/xs/AttributeRestrictions.java | 71 - .../xml/xs/ElementRestrictions.java | 124 - .../jonasadmin/xml/xs/SchemaRestrictions.java | 71 - .../xml/xs/SchemaRestrictionsFactory.java | 42 - .../xs/hardcoded/HCAttributeRestrictions.java | 107 - .../xs/hardcoded/HCElementRestrictions.java | 199 - .../xs/hardcoded/HCSchemaRestrictions.java | 520 --- .../ow2/jonas/webapp/taglib/GridBaseTag.java | 180 - .../ow2/jonas/webapp/taglib/GridColTag.java | 104 - .../ow2/jonas/webapp/taglib/GridRowTag.java | 117 - .../jonas/webapp/taglib/GridTableBaseTag.java | 132 - .../org/ow2/jonas/webapp/taglib/GridTag.java | 206 - .../jonas/webapp/taglib/JonasButtonTag.java | 361 -- .../webapp/taglib/JonasGridColTitleTag.java | 80 - .../jonas/webapp/taglib/JonasGridNameTag.java | 91 - .../webapp/taglib/JonasGridNameTitleTag.java | 81 - .../webapp/taglib/JonasGridRowTitleTag.java | 97 - .../ow2/jonas/webapp/taglib/JonasGridTag.java | 56 - .../webapp/taglib/JonasGridValueTag.java | 55 - .../webapp/taglib/JonasGridValueTitleTag.java | 80 - .../jonas/webapp/taglib/JonasSubmitTag.java | 141 - .../jonas/webapp/taglib/LabelValueBean.java | 123 - .../webapp/taglib/PanelSeparatorTag.java | 64 - .../org/ow2/jonas/webapp/taglib/PanelTag.java | 103 - .../jonas/webapp/taglib/RefreshTreeTag.java | 77 - .../org/ow2/jonas/webapp/taglib/TabTag.java | 344 -- .../org/ow2/jonas/webapp/taglib/TabsTag.java | 426 -- .../jonas/webapp/taglib/TitleContentTag.java | 330 -- .../ow2/jonas/webapp/taglib/TreeBuilder.java | 81 - .../ow2/jonas/webapp/taglib/TreeControl.java | 337 -- .../jonas/webapp/taglib/TreeControlNode.java | 399 -- .../webapp/taglib/TreeControlRenderTag.java | 375 -- .../jonas/webapp/taglib/TreeControlTag.java | 557 --- .../jonas/webapp/taglib/WhereAreYouTag.java | 111 - .../ow2/jonas/webapp/taglib/XMLEditorTag.java | 128 - .../ow2/jonas/webapp/taglib/XmlFileTag.java | 407 -- .../ApplicationResources.properties | 1921 --------- .../ApplicationResources_fr.properties | 18 - .../resourceadapter/jonas-ra-xml.vm | 57 - .../jonasadmin/resourceadapter/ra-xml.vm | 13 - .../core/src/main/webapp/TestFont.jsp | 216 - .../core/src/main/webapp/TestNavigator.jsp | 51 - .../core/src/main/webapp/WEB-INF/controls.tld | 116 - .../webapp/WEB-INF/flex/services-config.xml | 313 -- .../webapp/WEB-INF/granite/granite-config.xml | 31 - .../src/main/webapp/WEB-INF/jonas-web.xml | 13 - .../core/src/main/webapp/WEB-INF/sj.tld | 1262 ------ .../src/main/webapp/WEB-INF/struts-bean.tld | 382 -- .../src/main/webapp/WEB-INF/struts-config.xml | 2134 ---------- .../src/main/webapp/WEB-INF/struts-html.tld | 3032 ------------- .../src/main/webapp/WEB-INF/struts-logic.tld | 652 --- .../main/webapp/WEB-INF/struts-template.tld | 73 - .../core/src/main/webapp/WEB-INF/web.xml | 575 --- .../core/src/main/webapp/begin.jsp | 5 - .../core/src/main/webapp/blank.jsp | 24 - .../src/main/webapp/catalina/connector.jsp | 410 -- .../src/main/webapp/catalina/connectors.jsp | 99 - .../webapp/catalina/connectorsConfirm.jsp | 60 - .../DaemonProxyClusterDisplayServerConfig.jsp | 129 - .../src/main/webapp/clusterd/addServerCd.jsp | 141 - .../clusterd/daemonProxyClusterModify.jsp | 94 - .../main/webapp/clusterd/graph/vmMemory.jsp | 76 - .../main/webapp/clusterd/serversConfirm.jsp | 64 - .../main/webapp/cmi/displayCmiClusterInfo.jsp | 69 - .../src/main/webapp/cmi/displayCmiInfo.jsp | 159 - .../main/webapp/cmi/displayCmiObjectInfo.jsp | 270 -- .../webapp/cmi/displayCmiProtocolInfo.jsp | 70 - .../main/webapp/cmi/displayCmiServerInfo.jsp | 85 - .../core/src/main/webapp/common/begin.jsp | 7 - .../core/src/main/webapp/common/end.jsp | 0 .../core/src/main/webapp/deploy/deploy.jsp | 91 - .../src/main/webapp/deploy/deployConfirm.jsp | 109 - .../src/main/webapp/deploy/domainDeploy.jsp | 164 - .../webapp/deploy/domainDeployConfirm.jsp | 125 - .../webapp/deploy/domainDeployProgress.jsp | 95 - .../webapp/deploy/domainUndeployConfirm.jsp | 92 - .../core/src/main/webapp/deploy/remove.jsp | 75 - .../src/main/webapp/deploy/removeConfirm.jsp | 95 - .../core/src/main/webapp/deploy/upload.jsp | 63 - .../src/main/webapp/deploy/uploadResult.jsp | 64 - .../src/main/webapp/domain/addCluster.jsp | 51 - .../core/src/main/webapp/domain/addServer.jsp | 86 - .../main/webapp/domain/addServerCluster.jsp | 83 - .../src/main/webapp/domain/clustercmi.jsp | 110 - .../core/src/main/webapp/domain/domain.jsp | 562 --- .../src/main/webapp/domain/serversConfirm.jsp | 64 - .../main/webapp/domain/serversConfirmMove.jsp | 73 - .../jonas-admin/core/src/main/webapp/end.jsp | 0 .../core/src/main/webapp/error.jsp | 36 - .../core/src/main/webapp/framemain.jsp | 19 - .../core/src/main/webapp/frameright.jsp | 19 - .../core/src/main/webapp/globalerror.jsp | 44 - .../main/webapp/images/button/GraphButton.png | Bin 1160 -> 0 bytes .../src/main/webapp/images/button/button.png | Bin 3465 -> 0 bytes .../core/src/main/webapp/images/dot.gif | Bin 43 -> 0 bytes .../core/src/main/webapp/images/dot1.gif | Bin 43 -> 0 bytes .../core/src/main/webapp/images/dot5.gif | Bin 45 -> 0 bytes .../main/webapp/images/icon/BalJonasGreen.gif | Bin 608 -> 0 bytes .../main/webapp/images/icon/BalJonasTree.gif | Bin 711 -> 0 bytes .../src/main/webapp/images/icon/Database.gif | Bin 290 -> 0 bytes .../main/webapp/images/icon/Datasource.gif | Bin 283 -> 0 bytes .../webapp/images/icon/FolderBalJonas.gif | Bin 282 -> 0 bytes .../main/webapp/images/icon/JonasQuestion.gif | Bin 581 -> 0 bytes .../core/src/main/webapp/images/icon/bean.gif | Bin 153 -> 0 bytes .../src/main/webapp/images/icon/bullet.png | Bin 3169 -> 0 bytes .../src/main/webapp/images/icon/caution.png | Bin 509 -> 0 bytes .../src/main/webapp/images/icon/connector.gif | Bin 145 -> 0 bytes .../main/webapp/images/icon/connectors.gif | Bin 166 -> 0 bytes .../src/main/webapp/images/icon/deploy.gif | Bin 122 -> 0 bytes .../webapp/images/icon/deployDomainManage.gif | Bin 163 -> 0 bytes .../webapp/images/icon/deployDomain_ear.gif | Bin 281 -> 0 bytes .../webapp/images/icon/deployDomain_jar.gif | Bin 209 -> 0 bytes .../webapp/images/icon/deployDomain_rar.gif | Bin 266 -> 0 bytes .../webapp/images/icon/deployDomain_war.gif | Bin 264 -> 0 bytes .../webapp/images/icon/deploy_datasource.gif | Bin 257 -> 0 bytes .../main/webapp/images/icon/deploy_ear.gif | Bin 270 -> 0 bytes .../main/webapp/images/icon/deploy_jar.gif | Bin 187 -> 0 bytes .../main/webapp/images/icon/deploy_rar.gif | Bin 241 -> 0 bytes .../main/webapp/images/icon/deploy_war.gif | Bin 252 -> 0 bytes .../src/main/webapp/images/icon/deployed.gif | Bin 166 -> 0 bytes .../main/webapp/images/icon/deployed_not.gif | Bin 232 -> 0 bytes .../main/webapp/images/icon/domain_jonas.gif | Bin 652 -> 0 bytes .../core/src/main/webapp/images/icon/ear.gif | Bin 240 -> 0 bytes .../core/src/main/webapp/images/icon/help.gif | Bin 1060 -> 0 bytes .../core/src/main/webapp/images/icon/info.png | Bin 1002 -> 0 bytes .../core/src/main/webapp/images/icon/jar.gif | Bin 227 -> 0 bytes .../core/src/main/webapp/images/icon/jms.gif | Bin 111 -> 0 bytes .../main/webapp/images/icon/jms_connector.gif | Bin 158 -> 0 bytes .../src/main/webapp/images/icon/jms_queue.gif | Bin 117 -> 0 bytes .../src/main/webapp/images/icon/jms_topic.gif | Bin 123 -> 0 bytes .../main/webapp/images/icon/logger_http.gif | Bin 362 -> 0 bytes .../main/webapp/images/icon/logger_jonas.gif | Bin 271 -> 0 bytes .../src/main/webapp/images/icon/loggers.gif | Bin 103 -> 0 bytes .../core/src/main/webapp/images/icon/mail.gif | Bin 151 -> 0 bytes .../src/main/webapp/images/icon/mail_mime.gif | Bin 137 -> 0 bytes .../main/webapp/images/icon/mail_session.gif | Bin 98 -> 0 bytes .../src/main/webapp/images/icon/mbean.gif | Bin 230 -> 0 bytes .../main/webapp/images/icon/mbeandomain.gif | Bin 585 -> 0 bytes .../src/main/webapp/images/icon/mbeans.gif | Bin 356 -> 0 bytes .../src/main/webapp/images/icon/mbeantype.gif | Bin 357 -> 0 bytes .../main/webapp/images/icon/monitoring.gif | Bin 126 -> 0 bytes .../src/main/webapp/images/icon/protocol.gif | Bin 109 -> 0 bytes .../webapp/images/icon/resourceAdapter.gif | Bin 162 -> 0 bytes .../src/main/webapp/images/icon/resources.gif | Bin 119 -> 0 bytes .../src/main/webapp/images/icon/security.gif | Bin 114 -> 0 bytes .../webapp/images/icon/security_database.gif | Bin 254 -> 0 bytes .../main/webapp/images/icon/security_ldap.gif | Bin 257 -> 0 bytes .../webapp/images/icon/security_memory.gif | Bin 245 -> 0 bytes .../images/icon/service_application.gif | Bin 263 -> 0 bytes .../webapp/images/icon/service_database.gif | Bin 244 -> 0 bytes .../webapp/images/icon/service_discovery.png | Bin 691 -> 0 bytes .../main/webapp/images/icon/service_ejb.gif | Bin 176 -> 0 bytes .../main/webapp/images/icon/service_jms.gif | Bin 132 -> 0 bytes .../main/webapp/images/icon/service_mail.gif | Bin 164 -> 0 bytes .../webapp/images/icon/service_resource.gif | Bin 183 -> 0 bytes .../webapp/images/icon/service_security.gif | Bin 138 -> 0 bytes .../images/icon/service_smartclient.gif | Bin 240 -> 0 bytes .../images/icon/service_transaction.gif | Bin 137 -> 0 bytes .../webapp/images/icon/service_versioning.gif | Bin 237 -> 0 bytes .../main/webapp/images/icon/service_web.gif | Bin 255 -> 0 bytes .../images/icon/service_workcleaner.gif | Bin 356 -> 0 bytes .../images/icon/service_workmanager.gif | Bin 111 -> 0 bytes .../src/main/webapp/images/icon/services.gif | Bin 110 -> 0 bytes .../src/main/webapp/images/icon/tag_blue.gif | Bin 118 -> 0 bytes .../src/main/webapp/images/icon/tag_green.gif | Bin 118 -> 0 bytes .../core/src/main/webapp/images/icon/war.gif | Bin 225 -> 0 bytes .../src/main/webapp/images/jonasAdmin.png | Bin 8993 -> 0 bytes .../main/webapp/images/logo/JonasSadSmall.png | Bin 8029 -> 0 bytes .../images/logo/JonasSadSmall_Orange.jpg | Bin 4775 -> 0 bytes .../webapp/images/logo/JonasSmall_White.jpg | Bin 9625 -> 0 bytes .../main/webapp/images/logo/balJonasAdmin.png | Bin 26496 -> 0 bytes .../webapp/images/logo/balJonasAdminLogin.png | Bin 14228 -> 0 bytes .../main/webapp/images/logo/jonasAdmin.png | Bin 49666 -> 0 bytes .../webapp/images/logo/jonasAdminModified.png | Bin 79467 -> 0 bytes .../images/logo/jonasAdminWelcomeMessage.png | Bin 7750 -> 0 bytes .../src/main/webapp/images/logo/logoOW2.png | Bin 3608 -> 0 bytes .../src/main/webapp/images/logo/tableftF.gif | Bin 377 -> 0 bytes .../src/main/webapp/images/logo/tabrightF.gif | Bin 2095 -> 0 bytes .../core/src/main/webapp/images/tree/line.gif | Bin 68 -> 0 bytes .../main/webapp/images/tree/line_first.gif | Bin 67 -> 0 bytes .../src/main/webapp/images/tree/line_last.gif | Bin 67 -> 0 bytes .../main/webapp/images/tree/line_middle.gif | Bin 70 -> 0 bytes .../main/webapp/images/tree/node_close.gif | Bin 88 -> 0 bytes .../webapp/images/tree/node_close_first.gif | Bin 91 -> 0 bytes .../webapp/images/tree/node_close_last.gif | Bin 89 -> 0 bytes .../webapp/images/tree/node_close_middle.gif | Bin 90 -> 0 bytes .../src/main/webapp/images/tree/node_open.gif | Bin 82 -> 0 bytes .../webapp/images/tree/node_open_first.gif | Bin 85 -> 0 bytes .../webapp/images/tree/node_open_last.gif | Bin 85 -> 0 bytes .../webapp/images/tree/node_open_middle.gif | Bin 87 -> 0 bytes .../src/main/webapp/images/tree/noline.gif | Bin 58 -> 0 bytes .../core/src/main/webapp/index.jsp | 4 - .../jonasmqconnect/ConnectionFactoryEdit.jsp | 92 - .../webapp/jonasmqconnect/DestinationAdd.jsp | 88 - .../jonasmqconnect/DestinationAddConfirm.jsp | 16 - .../jonasmqconnect/DestinationDelete.jsp | 86 - .../DestinationDeleteConfirm.jsp | 16 - .../webapp/jonasmqconnect/DestinationEdit.jsp | 131 - .../webapp/jonasmqconnect/Destinations.jsp | 100 - .../webapp/jonasmqconnect/JonasMqConnect.jsp | 189 - .../jonasmqconnect/JonasMqConnectPlatform.jsp | 47 - .../main/webapp/jonasmqconnect/MdbEdit.jsp | 53 - .../src/main/webapp/jonasmqconnect/Mdbs.jsp | 57 - .../src/main/webapp/jonasserver/jmxserver.jsp | 64 - .../main/webapp/jonasserver/jonasserver.jsp | 86 - .../main/webapp/jonasserver/jonasversions.jsp | 45 - .../core/src/main/webapp/jonasserver/jvm.jsp | 48 - .../main/webapp/jonasserver/listRegistry.jsp | 105 - .../src/main/webapp/jonasserver/registry.jsp | 136 - .../main/webapp/jonasserver/servletServer.jsp | 111 - .../main/webapp/joramplatform/addreader.jsp | 110 - .../main/webapp/joramplatform/addwriter.jsp | 110 - .../joramplatform/createdestination.jsp | 89 - .../main/webapp/joramplatform/createuser.jsp | 81 - .../webapp/joramplatform/joramadapter.jsp | 67 - .../joramplatform/joramdestinations.jsp | 138 - .../joramplatform/joramdeststatistics.jsp | 78 - .../webapp/joramplatform/joramplatform.jsp | 191 - .../main/webapp/joramplatform/joramqueue.jsp | 170 - .../joramplatform/joramqueuereaders.jsp | 130 - .../joramplatform/joramqueuewriters.jsp | 130 - .../joramplatform/joramremotedestinations.jsp | 133 - .../joramplatform/joramremoteserver.jsp | 44 - .../webapp/joramplatform/joramservers.jsp | 93 - .../main/webapp/joramplatform/joramtopic.jsp | 141 - .../joramplatform/joramtopicreaders.jsp | 130 - .../joramplatform/joramtopicwriters.jsp | 131 - .../main/webapp/joramplatform/joramusers.jsp | 93 - .../main/webapp/joramplatform/joramxml.jsp | 30 - .../main/webapp/joramplatform/queueUsedBy.jsp | 77 - .../removeDestinationsConfirm.jsp | 56 - .../joramplatform/removeUsersConfirm.jsp | 56 - .../main/webapp/joramplatform/topicUsedBy.jsp | 77 - .../webapp/logging/catalinaAccessLogger.jsp | 159 - .../core/src/main/webapp/logging/loggers.jsp | 90 - .../main/webapp/logging/loggersConfirm.jsp | 63 - .../src/main/webapp/logging/loggingJonas.jsp | 66 - .../src/main/webapp/logging/loggingView.jsp | 83 - .../core/src/main/webapp/login.jsp | 113 - .../src/main/webapp/mbean/listJ2eeMBeans.jsp | 42 - .../main/webapp/mbean/listMBeanAttributes.jsp | 95 - .../main/webapp/mbean/listMBeanOperations.jsp | 80 - .../main/webapp/mbean/listMBeanProperties.jsp | 43 - .../core/src/main/webapp/mbean/listMBeans.jsp | 55 - .../src/main/webapp/mbean/listOwnerMBeans.jsp | 40 - .../main/webapp/mbean/listUnknownMBeans.jsp | 38 - .../src/main/webapp/monitoring/cmiCluster.jsp | 100 - .../src/main/webapp/monitoring/cmiMember.jsp | 36 - .../webapp/monitoring/daemonProxyCluster.jsp | 775 ---- .../webapp/monitoring/daemonProxyMember.jsp | 17 - .../main/webapp/monitoring/displaynode.jsp | 715 ---- .../main/webapp/monitoring/ejbHaCluster.jsp | 60 - .../main/webapp/monitoring/ejbHaMember.jsp | 38 - .../webapp/monitoring/graph/serverGraphs.jsp | 88 - .../graph/serverTransactionCount.jsp | 75 - .../src/main/webapp/monitoring/jkCluster.jsp | 52 - .../src/main/webapp/monitoring/jkMember.jsp | 81 - .../main/webapp/monitoring/joramCluster.jsp | 36 - .../main/webapp/monitoring/joramMember.jsp | 17 - .../main/webapp/monitoring/logicalCluster.jsp | 38 - .../main/webapp/monitoring/logicalMember.jsp | 17 - .../src/main/webapp/monitoring/memory.jsp | 78 - .../src/main/webapp/monitoring/monitoring.jsp | 56 - .../src/main/webapp/monitoring/stackDump.jsp | 30 - .../main/webapp/monitoring/tomcatCluster.jsp | 87 - .../main/webapp/monitoring/tomcatMember.jsp | 148 - .../webapp/resource/createDestination.jsp | 72 - .../webapp/resource/datasourceProperties.jsp | 221 - .../src/main/webapp/resource/datasources.jsp | 81 - .../main/webapp/resource/deployDatasource.jsp | 77 - .../webapp/resource/deployMailFactory.jsp | 77 - .../webapp/resource/destinationsConfirm.jsp | 54 - .../src/main/webapp/resource/jmsResources.jsp | 98 - .../main/webapp/resource/mailFactories.jsp | 101 - .../webapp/resource/mailFactoryProperties.jsp | 137 - .../resource/mimePartFactoryProperties.jsp | 133 - .../resource/sessionFactoryProperties.jsp | 105 - .../createJDBCResourceAdapter.jsp | 292 -- .../createOtherResourceAdapter.jsp | 115 - .../resourceadapter/createResourceAdapter.jsp | 73 - .../core/src/main/webapp/script/jonasAdmin.js | 214 - .../security/confirmActionMemoryRealm.jsp | 108 - .../main/webapp/security/datasourceRealm.jsp | 133 - .../main/webapp/security/groupMemoryRealm.jsp | 153 - .../src/main/webapp/security/ldapRealm.jsp | 201 - .../src/main/webapp/security/memoryRealm.jsp | 125 - .../webapp/security/memoryRealmGroups.jsp | 101 - .../main/webapp/security/memoryRealmRoles.jsp | 100 - .../main/webapp/security/memoryRealmUsers.jsp | 100 - .../core/src/main/webapp/security/realms.jsp | 161 - .../main/webapp/security/realmsConfirm.jsp | 86 - .../main/webapp/security/realmsStopped.jsp | 26 - .../main/webapp/security/roleMemoryRealm.jsp | 112 - .../webapp/security/securityCatalinaRealm.jsp | 50 - .../main/webapp/security/userMemoryRealm.jsp | 213 - .../src/main/webapp/service/appContainers.jsp | 57 - .../core/src/main/webapp/service/cfUsedBy.jsp | 67 - .../service/confirmActionXaResource.jsp | 69 - .../src/main/webapp/service/container.jsp | 53 - .../src/main/webapp/service/containerEjbs.jsp | 69 - .../webapp/service/containerStatistic.jsp | 186 - .../src/main/webapp/service/containers.jsp | 60 - .../src/main/webapp/service/databases.jsp | 48 - .../src/main/webapp/service/datasource.jsp | 174 - .../webapp/service/datasourceStatistics.jsp | 180 - .../main/webapp/service/datasourceUsedBy.jsp | 64 - .../main/webapp/service/depmonitorService.jsp | 75 - .../src/main/webapp/service/discovery.jsp | 66 - .../core/src/main/webapp/service/ear.jsp | 52 - .../core/src/main/webapp/service/earJars.jsp | 61 - .../core/src/main/webapp/service/earRars.jsp | 59 - .../core/src/main/webapp/service/earWars.jsp | 61 - .../main/webapp/service/earXmlDeployment.jsp | 47 - .../core/src/main/webapp/service/ejb.jsp | 38 - .../webapp/service/ejbContainerService.jsp | 48 - .../webapp/service/ejbContainersStatistic.jsp | 208 - .../src/main/webapp/service/ejbDependency.jsp | 260 -- .../src/main/webapp/service/ejbEntity.jsp | 175 - .../src/main/webapp/service/ejbMessage.jsp | 143 - .../src/main/webapp/service/ejbSession.jsp | 203 - .../src/main/webapp/service/ejbVirtual.jsp | 76 - .../main/webapp/service/jmsConnFactories.jsp | 40 - .../main/webapp/service/jmsConnFactory.jsp | 37 - .../main/webapp/service/jmsDestinations.jsp | 24 - .../core/src/main/webapp/service/jmsQueue.jsp | 41 - .../src/main/webapp/service/jmsQueues.jsp | 42 - .../src/main/webapp/service/jmsService.jsp | 40 - .../core/src/main/webapp/service/jmsTopic.jsp | 37 - .../src/main/webapp/service/jmsTopics.jsp | 42 - .../src/main/webapp/service/jtmService.jsp | 73 - .../main/webapp/service/jtmServiceStopped.jsp | 32 - .../src/main/webapp/service/mailService.jsp | 41 - .../main/webapp/service/mimepartFactories.jsp | 49 - .../main/webapp/service/mimepartFactory.jsp | 134 - .../service/mimepartMailFactoryUsedBy.jsp | 63 - .../src/main/webapp/service/queueUsedBy.jsp | 67 - .../core/src/main/webapp/service/rar10.jsp | 214 - .../src/main/webapp/service/rar10Stats.jsp | 181 - .../core/src/main/webapp/service/rar15.jsp | 120 - .../core/src/main/webapp/service/rar15AO.jsp | 80 - .../core/src/main/webapp/service/rar15AOs.jsp | 52 - .../core/src/main/webapp/service/rar15AS.jsp | 80 - .../core/src/main/webapp/service/rar15ASs.jsp | 53 - .../core/src/main/webapp/service/rar15CF.jsp | 189 - .../src/main/webapp/service/rar15CFStats.jsp | 195 - .../core/src/main/webapp/service/rar15CFs.jsp | 52 - .../main/webapp/service/rarPoolStatistics.jsp | 149 - .../src/main/webapp/service/rarStatistics.jsp | 180 - .../src/main/webapp/service/rarUsedBy10.jsp | 64 - .../src/main/webapp/service/rarUsedBy15.jsp | 77 - .../core/src/main/webapp/service/rars.jsp | 59 - .../core/src/main/webapp/service/security.jsp | 90 - .../main/webapp/service/securityStopped.jsp | 28 - .../core/src/main/webapp/service/services.jsp | 233 - .../main/webapp/service/sessionFactories.jsp | 49 - .../main/webapp/service/sessionFactory.jsp | 108 - .../service/sessionMailFactoryUsedBy.jsp | 63 - .../webapp/service/smartclientService.jsp | 32 - .../src/main/webapp/service/topicUsedBy.jsp | 67 - .../webapp/service/transactionMonitor.jsp | 60 - .../webapp/service/transactionRecovery.jsp | 63 - .../webapp/service/transactionStatistic.jsp | 73 - .../main/webapp/service/versioningService.jsp | 55 - .../core/src/main/webapp/service/war.jsp | 94 - .../src/main/webapp/service/warJonasXml.jsp | 48 - .../src/main/webapp/service/warServlets.jsp | 63 - .../src/main/webapp/service/warWebXml.jsp | 50 - .../core/src/main/webapp/service/webApp.jsp | 80 - .../main/webapp/service/webAppCatalina.jsp | 196 - .../src/main/webapp/service/webAppJetty.jsp | 116 - .../webapp/service/webAppVirtualCatalina.jsp | 98 - .../src/main/webapp/service/webContainers.jsp | 60 - .../webapp/service/workcleanerService.jsp | 82 - .../webapp/service/workmanagerService.jsp | 59 - .../webapp/service/ws/handlersDetails.jsp | 99 - .../service/ws/portComponentsDetails.jsp | 103 - .../main/webapp/service/ws/viewHandlers.jsp | 66 - .../webapp/service/ws/viewPortComponents.jsp | 62 - .../service/ws/webserviceDescriptions.jsp | 58 - .../webapp/service/ws/webserviceDetails.jsp | 78 - .../webapp/service/xaresourceRecovery.jsp | 79 - .../core/src/main/webapp/style/iepngfix.htc | 85 - .../core/src/main/webapp/style/jonasAdmin.css | 659 --- .../jonas-admin/core/src/main/webapp/top.jsp | 78 - .../jonas-admin/core/src/main/webapp/tree.jsp | 47 - .../core/src/main/webapp/welcomeContent.jsp | 19 - .../src/main/webapp/xml/archiveConfig.jsp | 498 --- .../main/webapp/xml/archiveConfigAdvanced.jsp | 109 - .../src/main/webapp/xml/archiveConfigAjax.jsp | 22 - .../main/webapp/xml/archiveConfigConfirm.jsp | 49 - .../main/webapp/xml/archiveConfigSelect.jsp | 90 - .../ee-components/jonas-admin/plans/pom.xml | 89 - .../modules/ee-components/jonas-admin/pom.xml | 42 - .../ee-components/jonas-ctxroot/core/pom.xml | 95 - .../src/main/webapp/WEB-INF/jonas-web.xml | 13 - .../core/src/main/webapp/WEB-INF/web.xml | 38 - .../core/src/main/webapp/index.jsp | 213 - .../core/src/main/webapp/jetty.gif | Bin 6649 -> 0 bytes .../core/src/main/webapp/logoOW2.png | Bin 13572 -> 0 bytes .../core/src/main/webapp/ow2_jonas.css | 183 - .../core/src/main/webapp/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../core/src/main/webapp/style.css | 13 - .../core/src/main/webapp/tomcat.gif | Bin 1934 -> 0 bytes .../core/src/main/webapp/valid-xhtml11.png | Bin 1917 -> 0 bytes .../core/src/main/webapp/vcss.png | Bin 1134 -> 0 bytes .../ee-components/jonas-ctxroot/plans/pom.xml | 72 - .../ee-components/jonas-ctxroot/pom.xml | 42 - jonas/modules/ee-components/mejb/core/pom.xml | 67 - .../java/mejb/ListenerRegistrationImpl.java | 95 - .../src/main/java/mejb/ManagementBean.java | 298 -- .../core/src/main/java/mejb/XManagement.java | 35 - .../src/main/java/mejb/XManagementHome.java | 35 - .../modules/ee-components/mejb/plans/pom.xml | 71 - jonas/modules/ee-components/mejb/pom.xml | 42 - jonas/modules/ee-components/pom.xml | 47 - .../modules/generators/jonas-genbase/pom.xml | 56 - .../generators/genbase/GenBaseException.java | 65 - .../genbase/NoJ2EEWebservicesException.java | 68 - .../genbase/archive/AbsArchive.java | 181 - .../genbase/archive/Application.java | 578 --- .../generators/genbase/archive/Archive.java | 133 - .../generators/genbase/archive/Client.java | 336 -- .../genbase/archive/DummyApplication.java | 135 - .../genbase/archive/DummyWebApp.java | 141 - .../jonas/generators/genbase/archive/Ejb.java | 139 - .../generators/genbase/archive/EjbJar.java | 397 -- .../genbase/archive/EjbRefModule.java | 40 - .../genbase/archive/FileArchive.java | 147 - .../genbase/archive/J2EEArchive.java | 272 -- .../genbase/archive/JarArchive.java | 141 - .../generators/genbase/archive/WebApp.java | 651 --- .../generators/genbase/archive/WsClient.java | 43 - .../genbase/archive/WsEndpoint.java | 50 - .../genbase/generator/AbsGenerator.java | 179 - .../generators/genbase/generator/Config.java | 423 -- .../genbase/generator/GeneratorFactories.java | 59 - .../genbase/generator/GeneratorFactory.java | 45 - .../modifier/AbsApplicationModifier.java | 170 - .../genbase/modifier/AbsModifierFactory.java | 67 - .../genbase/modifier/ArchiveModifier.java | 132 - .../genbase/utils/ArchiveStorer.java | 198 - .../generators/genbase/utils/DirStorer.java | 121 - .../generators/genbase/utils/JarStorer.java | 136 - .../genbase/utils/TempRepository.java | 165 - .../generators/genbase/utils/XMLUtils.java | 588 --- .../META-INF/jonas-generators-base.bnd | 24 - .../genbase/archive/I18n.properties | 27 - .../genbase/archive/application.xml | 12 - .../generators/genbase/archive/context.xml | 4 - .../generators/genbase/archive/jonas-web.xml | 8 - .../generators/genbase/archive/web-jetty.xml | 4 - .../jonas/generators/genbase/archive/web.xml | 30 - .../genbase/generator/I18n.properties | 3 - .../generators/genbase/utils/I18n.properties | 11 - .../generators/jonas-genclientstub/pom.xml | 69 - .../genclientstub/ClientStubGen.java | 276 -- .../genclientstub/ClientStubGenException.java | 67 - .../genclientstub/generator/Generator.java | 242 -- .../generator/GeneratorFactory.java | 86 - .../modifier/AbsArchiveModifier.java | 140 - .../modifier/ApplicationModifier.java | 79 - .../modifier/ClientModifier.java | 97 - .../modifier/EjbJarModifier.java | 103 - .../modifier/ModifierFactory.java | 191 - .../modifier/WebAppModifier.java | 97 - .../wrapper/ClientGenStubWrapper.java | 156 - .../META-INF/jonas-generators-clientstubs.bnd | 36 - .../genclientstub/generator/I18n.properties | 3 - .../genclientstub/modifier/I18n.properties | 5 - jonas/modules/generators/jonas-genic/pom.xml | 124 - .../jonas/generators/genic/BeanSources.java | 470 --- .../org/ow2/jonas/generators/genic/GenIC.java | 1254 ------ .../generators/genic/GenICException.java | 94 - .../generators/genic/GenICParameters.java | 350 -- .../ow2/jonas/generators/genic/Source.java | 276 -- .../generators/genic/VContextFactory.java | 633 --- .../jonas/generators/genic/VcCMRField.java | 293 -- .../ow2/jonas/generators/genic/VcField.java | 340 -- .../ow2/jonas/generators/genic/VcMethod.java | 1155 ----- .../ow2/jonas/generators/genic/VcParam.java | 111 - .../jonas/generators/genic/VcParamWhere.java | 180 - .../genic/VelocityMonologLogger.java | 85 - .../genic/wrapper/GenicServiceWrapper.java | 90 - .../main/resources/META-INF/jonas-genic.bnd | 55 - .../ow2/jonas/generators/genic/GenICMacros.vm | 86 - .../ow2/jonas/generators/genic/JEntityCmp2.vm | 1564 ------- .../genic/JEntityCmp2CoherenceItf.vm | 49 - .../jonas/generators/genic/JEntityCmpJdbc.vm | 622 --- .../jonas/generators/genic/JEntityHandle.vm | 80 - .../ow2/jonas/generators/genic/JEntityHome.vm | 787 ---- .../jonas/generators/genic/JEntityLocal.vm | 315 -- .../generators/genic/JEntityLocalHome.vm | 659 --- .../jonas/generators/genic/JEntityRemote.vm | 400 -- .../generators/genic/JServiceEndpoint.vm | 126 - .../generators/genic/JServiceEndpointHome.vm | 58 - .../jonas/generators/genic/JStatefulHome.vm | 183 - .../jonas/generators/genic/JStatefulLocal.vm | 192 - .../generators/genic/JStatefulLocalHome.vm | 136 - .../jonas/generators/genic/JStatefulRemote.vm | 236 -- .../jonas/generators/genic/JStatelessHome.vm | 169 - .../jonas/generators/genic/JStatelessLocal.vm | 155 - .../generators/genic/JStatelessLocalHome.vm | 118 - .../generators/genic/JStatelessRemote.vm | 220 - .../org/ow2/jonas/generators/genic/README | 94 - jonas/modules/generators/jonas-wsgen/pom.xml | 100 - .../org/ow2/jonas/generators/wsgen/WsGen.java | 290 -- .../generators/wsgen/WsGenException.java | 69 - .../wsgen/ddmodifier/ContextDDModifier.java | 81 - .../ddmodifier/DeploymentDescModifier.java | 213 - .../wsgen/ddmodifier/WebJettyDDModifier.java | 123 - .../ddmodifier/WebServicesDDModifier.java | 101 - .../wsgen/ddmodifier/WsClientDDModifier.java | 102 - .../ddmodifier/WsEndpointDDModifier.java | 572 --- .../wsgen/finder/GeneralWSFinder.java | 128 - .../wsgen/finder/GenericWSFinder.java | 114 - .../wsgen/finder/J2EEWebServicesFinder.java | 39 - .../wsgen/finder/ServiceRefFinder.java | 68 - .../wsgen/finder/WebServicesXmlFinder.java | 176 - .../generators/wsgen/generator/Generator.java | 148 - .../wsgen/generator/GeneratorFactory.java | 214 - .../wsgen/generator/SecurityGenerator.java | 304 -- .../wsgen/generator/WsClientGenerator.java | 87 - .../wsgen/generator/WsEndpointGenerator.java | 100 - .../generator/axis/AxisGeneratorFactory.java | 84 - .../generator/axis/AxisWsClientGenerator.java | 294 -- .../axis/AxisWsEndpointGenerator.java | 218 - .../wsgen/generator/axis/JVelocity.java | 155 - .../wsgen/generator/axis/VContextFactory.java | 238 -- .../wsgen/generator/axis/VcArrayMapping.java | 72 - .../wsgen/generator/axis/VcBean.java | 80 - .../wsgen/generator/axis/VcBeanMapping.java | 72 - .../wsgen/generator/axis/VcHandler.java | 135 - .../wsgen/generator/axis/VcHeader.java | 72 - .../wsgen/generator/axis/VcInitParam.java | 67 - .../wsgen/generator/axis/VcPortComponent.java | 370 -- .../wsgen/generator/axis/VcTypeMapping.java | 112 - .../axis/wsdl2java/JOnASEmitter.java | 43 - .../axis/wsdl2java/JOnASGeneratorFactory.java | 91 - .../JOnASInterfaceServiceImplWriter.java | 51 - .../wsdl2java/JOnASServiceImplWriter.java | 60 - .../axis/wsdl2java/JOnASServiceWriter.java | 74 - .../axis/wsdl2java/JOnASWSDL2Java.java | 165 - .../generator/ews/EWSGeneratorFactory.java | 82 - .../generator/ews/EWSWsClientGenerator.java | 311 -- .../generator/ews/EWSWsEndpointGenerator.java | 251 -- .../JOnASJ2EEWebServicesContext.java | 158 - .../ServiceReferenceContextImpl.java | 158 - .../ews/wsdltoj2ee/emitter/FullEmitter.java | 128 - .../wsdltoj2ee/emitter/JOnASWSEmitter.java | 71 - .../factory/JOnASClientGeneratorFactory.java | 109 - .../JOnASEndpointGeneratorFactory.java | 90 - .../writer/J2EEClientDeployWriter.java | 264 -- .../writer/J2EEServerDeployWriter.java | 388 -- .../wsdltoj2ee/writer/JOnASDeployWriter.java | 558 --- .../writer/JOnASEWSBindingWriter.java | 81 - .../writer/JOnASEWSServiceImplWriter.java | 59 - .../writer/JOnASEWSServiceIntfWriter.java | 51 - .../writer/JOnASEWSServiceWriter.java | 82 - .../wsdltoj2ee/writer/JOnASTypeWriter.java | 126 - .../ews/wsdltoj2ee/wscf/JOnASWSCFHandler.java | 98 - .../wsdltoj2ee/wscf/JOnASWSCFInitParam.java | 46 - .../wsdltoj2ee/wscf/JOnASWSCFSOAPHeader.java | 47 - .../wsgen/modifier/ApplicationModifier.java | 98 - .../wsgen/modifier/ClientModifier.java | 113 - .../wsgen/modifier/EjbJarModifier.java | 206 - .../wsgen/modifier/ModifierFactory.java | 187 - .../wsgen/modifier/WebAppModifier.java | 162 - .../modifier/WsGenModifierConstants.java | 40 - .../META-INF/jonas-generators-wsgen.bnd | 34 - .../wsgen/generator/I18n.properties | 7 - .../wsgen/generator/axis/I18n.properties | 15 - .../wsgen/generator/axis/deploy_client.vm | 32 - .../wsgen/generator/axis/deploy_endpoint.vm | 87 - .../wsgen/generator/ews/I18n.properties | 7 - .../generators/wsgen/modifier/I18n.properties | 5 - jonas/modules/generators/pom.xml | 47 - jonas/modules/generators/raconfig/pom.xml | 57 - .../jonas/generators/raconfig/RAConfig.java | 938 ----- .../raconfig/RAConfigException.java | 57 - .../META-INF/jonas-generators-raconfig.bnd | 24 - .../libraries/externals/javaee-api/pom.xml | 255 -- .../javaee-api/src/main/assembly/assembly.xml | 60 - .../tag/common/xml/TransformSupport.java | 425 -- .../main/resources/META-INF/javaee-api.bnd | 108 - .../javax/servlet/jsp/resources/jsp_2_0.xsd | 288 -- .../javax/servlet/jsp/resources/jsp_2_1.xsd | 73 - .../javax/servlet/jsp/resources/jspxml.dtd | 190 - .../javax/servlet/jsp/resources/jspxml.xsd | 514 --- .../jsp/resources/web-jsptaglibrary_1_1.dtd | 207 - .../jsp/resources/web-jsptaglibrary_1_2.dtd | 478 --- .../jsp/resources/web-jsptaglibrary_2_0.xsd | 989 ----- .../jsp/resources/web-jsptaglibrary_2_1.xsd | 229 - .../libraries/externals/jaxp-ri/pom.xml | 52 - .../src/main/resources/META-INF/jaxp-ri.bnd | 36 - .../libraries/externals/monolog/pom.xml | 76 - .../ow2/jonas/monolog/MonologExtension.java | 82 - .../src/main/resources/META-INF/monolog.bnd | 49 - .../monolog/src/main/resources/metadata.xml | 52 - .../libraries/externals/neethi/pom.xml | 69 - .../src/main/resources/META-INF/neethi.bnd | 33 - jonas/modules/libraries/externals/pom.xml | 50 - .../libraries/externals/saaj-ri/pom.xml | 69 - .../saaj/client/p2p/HttpSOAPConnection.java | 814 ---- .../src/main/resources/META-INF/saaj-ri.bnd | 30 - .../libraries/externals/ws-security/pom.xml | 67 - .../main/resources/META-INF/ws-security.bnd | 40 - .../libraries/externals/xmlbeans/pom.xml | 52 - .../src/main/resources/META-INF/xmlbeans.bnd | 35 - .../modules/libraries/jonas-audit-jms/pom.xml | 64 - .../jms/interceptor/JMSClientInterceptor.java | 78 - .../resources/META-INF/jonas-audit-jms.bnd | 24 - .../libraries/jonas-bootstrap-loader/pom.xml | 44 - .../lib/bootstrap/loader/JClassLoader.java | 204 - .../META-INF/jonas-bootstrap-loader.bnd | 25 - jonas/modules/libraries/jonas-commons/pom.xml | 125 - .../ow2/jonas/lib/bootstrap/Bootstrap.java | 104 - .../ow2/jonas/lib/bootstrap/JFileFilter.java | 82 - .../org/ow2/jonas/lib/bootstrap/JProp.java | 750 ---- .../org/ow2/jonas/lib/bootstrap/JURLs.java | 239 -- .../jonas/lib/bootstrap/LoaderManager.java | 177 - .../lib/bootstrap/RemoteClassLoaderSpi.java | 256 -- .../lib/cpmanager/EarClassPathManager.java | 340 -- .../EarClassPathManagerException.java | 53 - .../org/ow2/jonas/lib/cpmanager/JarList.java | 159 - .../jonas/lib/cpmanager/JarListException.java | 51 - .../jonas/lib/execution/ExecutionResult.java | 75 - .../ow2/jonas/lib/execution/IExecution.java | 44 - .../jonas/lib/execution/RunnableHelper.java | 84 - .../lib/loader/AbsModuleClassLoader.java | 196 - .../jonas/lib/loader/ClientClassLoader.java | 91 - .../jonas/lib/loader/EjbJarClassLoader.java | 79 - .../lib/loader/FilteringClassLoader.java | 277 -- .../ow2/jonas/lib/loader/IMetaInfLocator.java | 61 - .../ow2/jonas/lib/loader/MetaInfScanner.java | 146 - ...MetaInfScannerBundleTrackerCustomizer.java | 252 -- .../ow2/jonas/lib/loader/OSGiClassLoader.java | 200 - .../lib/loader/SimpleWebappClassLoader.java | 78 - .../lib/loader/ThreadContextClassLoader.java | 100 - .../jonas/lib/loader/WebappClassLoader.java | 89 - .../lib/loader/factory/DirURLFactory.java | 69 - .../lib/loader/factory/JarURLFactory.java | 82 - .../jonas/lib/loader/factory/URLFactory.java | 77 - .../jonas/lib/loader/locator/DirLocator.java | 135 - .../lib/loader/locator/JarFileLocator.java | 117 - .../ow2/jonas/lib/loader/locator/Locator.java | 94 - .../lib/loader/xml/FiltersDefinition.java | 60 - .../lib/service/AbsConfigServiceImpl.java | 54 - .../ow2/jonas/lib/service/AbsServiceImpl.java | 227 - .../java/org/ow2/jonas/lib/util/Base64.java | 194 - .../org/ow2/jonas/lib/util/BeanNaming.java | 180 - .../main/java/org/ow2/jonas/lib/util/Cmd.java | 306 -- .../lib/util/ConfigurationConstants.java | 109 - .../org/ow2/jonas/lib/util/DirFilter.java | 57 - .../main/java/org/ow2/jonas/lib/util/Env.java | 120 - .../java/org/ow2/jonas/lib/util/I18n.java | 254 -- .../java/org/ow2/jonas/lib/util/JJarFile.java | 120 - .../java/org/ow2/jonas/lib/util/JModule.java | 339 -- .../org/ow2/jonas/lib/util/JNDIUtils.java | 220 - .../ow2/jonas/lib/util/JonasObjectName.java | 896 ---- .../ow2/jonas/lib/util/JoramObjectName.java | 144 - .../main/java/org/ow2/jonas/lib/util/Log.java | 500 --- .../ow2/jonas/lib/util/ModuleNamingUtils.java | 79 - .../java/org/ow2/jonas/lib/util/NetUtils.java | 101 - .../java/org/ow2/jonas/lib/util/PropDump.java | 62 - .../org/ow2/jonas/lib/util/XMLSerializer.java | 127 - .../org/ow2/jonas/lib/windows/WinSysEnv.java | 139 - .../org/ow2/jonas/lib/work/AbsCleanTask.java | 177 - .../ow2/jonas/lib/work/AbsDeployerLog.java | 138 - .../org/ow2/jonas/lib/work/DeployerLog.java | 219 - .../org/ow2/jonas/lib/work/LogEntryImpl.java | 81 - .../main/resources/META-INF/jonas-commons.bnd | 27 - .../src/main/resources/metadata.xml | 45 - .../classloader-default-filtering-mapping.xml | 53 - .../jonas/lib/cpmanager/JarListTestCase.java | 54 - .../loader/FilteringClassLoaderTestCase.java | 94 - .../test-app-filters-wildcard-forbidden.xml | 32 - .../src/test/resources/test-app-filters.xml | 30 - .../test/resources/test-default-filters.xml | 30 - .../libraries/jonas-deployment/pom.xml | 167 - .../deployment/client/AppClientDTDs.java | 71 - .../deployment/client/AppClientSchemas.java | 58 - .../client/ClientContainerDeploymentDesc.java | 288 -- ...lientContainerDeploymentDescException.java | 76 - .../deployment/client/JonasAppClientDTDs.java | 68 - .../client/JonasAppClientSchemas.java | 71 - .../lib/ClientDeploymentDescManager.java | 1145 ----- .../rules/ApplicationClientRuleSet.java | 72 - .../client/rules/JonasClientRuleSet.java | 74 - .../client/rules/JonasSecurityRuleSet.java | 75 - .../client/wrapper/ClientManagerWrapper.java | 121 - .../client/xml/ApplicationClient.java | 109 - .../deployment/client/xml/JonasClient.java | 166 - .../deployment/client/xml/JonasSecurity.java | 151 - .../clusterd/ClusterDaemonConfiguration.java | 90 - .../ClusterDaemonConfigurationException.java | 78 - .../clusterd/ClusterDaemonSchemas.java | 66 - .../ClusterDaemonConfigurationManager.java | 199 - .../clusterd/rules/ClusterDaemonRuleSet.java | 65 - .../clusterd/rules/DiscoveryRuleSet.java | 51 - .../clusterd/rules/ServerRuleSet.java | 68 - .../clusterd/xml/ClusterDaemon.java | 356 -- .../deployment/clusterd/xml/Discovery.java | 112 - .../jonas/deployment/clusterd/xml/Server.java | 286 -- .../deployment/common/AbsDeploymentDesc.java | 81 - .../jonas/deployment/common/CommonsDTDs.java | 107 - .../deployment/common/CommonsSchemas.java | 157 - .../common/DeploymentDescException.java | 154 - .../common/DescriptionGroupDesc.java | 121 - .../deployment/common/EjbLocalRefDesc.java | 160 - .../jonas/deployment/common/EjbRefDesc.java | 138 - .../jonas/deployment/common/EnvEntryDesc.java | 218 - .../jonas/deployment/common/HandlerDesc.java | 271 -- .../common/JndiEnvRefsGroupDesc.java | 556 --- .../common/MessageDestinationRefDesc.java | 130 - .../common/PersistenceUnitRefDesc.java | 89 - .../deployment/common/ResourceEnvRefDesc.java | 102 - .../deployment/common/ResourceRefDesc.java | 140 - .../common/SecurityRoleRefDesc.java | 116 - .../deployment/common/digester/JDigester.java | 153 - .../digester/JEntityResolverWithDigester.java | 82 - .../common/digester/JErrorHandler.java | 71 - .../common/digester/NoTrimCallMethodRule.java | 52 - .../common/lib/AbsDeploymentDescManager.java | 159 - .../common/lib/DeploymentDescManager.java | 36 - .../common/lib/JEntityResolver.java | 157 - .../jonas/deployment/common/lib/JLSInput.java | 124 - .../common/lib/JLSResourceResolver.java | 70 - .../jonas/deployment/common/lib/JavaType.java | 442 -- .../common/rules/AnonymousQNameRule.java | 77 - .../common/rules/EjbLocalRefRuleSet.java | 75 - .../common/rules/EjbRefRuleSet.java | 72 - .../common/rules/EnvEntryRuleSet.java | 72 - .../common/rules/EnvironmentRuleSet.java | 62 - .../common/rules/HandlerRuleSet.java | 79 - .../deployment/common/rules/IconRuleSet.java | 70 - .../common/rules/InitParamRuleSet.java | 66 - .../deployment/common/rules/JRuleSetBase.java | 63 - .../common/rules/JonasCustomParamRuleSet.java | 76 - .../common/rules/JonasEjbRefRuleSet.java | 64 - .../common/rules/JonasEnvironmentRuleSet.java | 59 - .../common/rules/JonasInitParamRuleSet.java | 64 - .../JonasMessageDestinationRefRuleSet.java | 64 - .../rules/JonasMessageDestinationRuleSet.java | 64 - .../rules/JonasPortComponentRefRuleSet.java | 66 - .../common/rules/JonasResourceEnvRuleSet.java | 64 - .../common/rules/JonasResourceRuleSet.java | 65 - .../common/rules/JonasServiceRefRuleSet.java | 70 - .../rules/MessageDestinationRefRuleSet.java | 70 - .../rules/MessageDestinationRuleSet.java | 61 - .../common/rules/PortComponentRefRuleSet.java | 69 - .../deployment/common/rules/QNameRule.java | 87 - .../common/rules/ResourceEnvRefRuleSet.java | 64 - .../common/rules/ResourceRefRuleSet.java | 72 - .../deployment/common/rules/RunAsRuleSet.java | 62 - .../common/rules/SecurityRoleRefRuleSet.java | 64 - .../common/rules/SecurityRoleRuleSet.java | 62 - .../common/rules/ServiceQnameRuleSet.java | 73 - .../common/rules/ServiceRefRuleSet.java | 84 - .../common/rules/SoapHeaderRuleSet.java | 64 - .../common/rules/WsdlPortRuleSet.java | 61 - .../common/util/ResourceHelper.java | 54 - .../common/xml/AbsDescriptionElement.java | 137 - .../deployment/common/xml/AbsElement.java | 144 - .../common/xml/AbsEnvironmentElement.java | 221 - .../xml/AbsJonasEnvironmentElement.java | 159 - .../deployment/common/xml/AbsJonasParam.java | 122 - .../common/xml/DescriptionGroupXml.java | 57 - .../deployment/common/xml/EjbLocalRef.java | 208 - .../jonas/deployment/common/xml/EjbRef.java | 208 - .../jonas/deployment/common/xml/Element.java | 54 - .../jonas/deployment/common/xml/EnvEntry.java | 182 - .../jonas/deployment/common/xml/Handler.java | 211 - .../ow2/jonas/deployment/common/xml/Icon.java | 112 - .../deployment/common/xml/InitParam.java | 135 - .../deployment/common/xml/JLinkedList.java | 125 - .../common/xml/JndiEnvRefsGroupXml.java | 75 - .../common/xml/JonasCallProperty.java | 41 - .../deployment/common/xml/JonasEjbRef.java | 114 - .../deployment/common/xml/JonasInitParam.java | 41 - .../common/xml/JonasJndiEnvRefsGroupXml.java | 67 - .../common/xml/JonasMessageDestination.java | 114 - .../xml/JonasMessageDestinationRef.java | 114 - .../deployment/common/xml/JonasParam.java | 41 - .../common/xml/JonasPortComponentRef.java | 167 - .../deployment/common/xml/JonasResource.java | 114 - .../common/xml/JonasResourceEnv.java | 114 - .../common/xml/JonasServiceRef.java | 160 - .../common/xml/JonasStubProperty.java | 41 - .../common/xml/MessageDestination.java | 86 - .../common/xml/MessageDestinationRef.java | 184 - .../common/xml/PersistenceUnitRef.java | 98 - .../common/xml/PortComponentRef.java | 110 - .../jonas/deployment/common/xml/Qname.java | 122 - .../deployment/common/xml/ResourceEnvRef.java | 138 - .../deployment/common/xml/ResourceRef.java | 188 - .../jonas/deployment/common/xml/RunAs.java | 109 - .../deployment/common/xml/SecurityRole.java | 109 - .../common/xml/SecurityRoleRef.java | 132 - .../deployment/common/xml/ServiceRef.java | 241 -- .../common/xml/TopLevelElement.java | 37 - .../jonas/deployment/domain/DomainMap.java | 220 - .../deployment/domain/DomainMapException.java | 76 - .../deployment/domain/DomainSchemas.java | 70 - .../domain/lib/DomainMapManager.java | 227 - .../domain/rules/ClusterDaemonRuleSet.java | 65 - .../domain/rules/ClusterRuleSet.java | 90 - .../domain/rules/DomainRuleSet.java | 62 - .../domain/rules/LocationRuleSet.java | 59 - .../domain/rules/ServerRuleSet.java | 66 - .../domain/wrapper/DomainManagerWrapper.java | 105 - .../jonas/deployment/domain/xml/Cluster.java | 158 - .../deployment/domain/xml/ClusterDaemon.java | 186 - .../jonas/deployment/domain/xml/Domain.java | 250 -- .../jonas/deployment/domain/xml/Location.java | 84 - .../jonas/deployment/domain/xml/Server.java | 219 - .../org/ow2/jonas/deployment/ear/EarDTDs.java | 68 - .../deployment/ear/EarDeploymentDesc.java | 387 -- .../ear/EarDeploymentDescException.java | 76 - .../ow2/jonas/deployment/ear/EarSchemas.java | 65 - .../jonas/deployment/ear/JonasEarSchemas.java | 69 - .../ear/lib/EarDeploymentDescManager.java | 378 -- .../ear/rules/ApplicationRuleSet.java | 60 - .../ear/rules/JonasApplicationRuleSet.java | 59 - .../JonasSecurityRoleMappingRuleSet.java | 62 - .../ear/rules/JonasSecurityRuleSet.java | 59 - .../deployment/ear/rules/ModuleRuleSet.java | 69 - .../ear/rules/SecurityRoleRuleSet.java | 64 - .../deployment/ear/rules/WebRuleSet.java | 64 - .../ear/wrapper/EarManagerWrapper.java | 113 - .../jonas/deployment/ear/xml/Application.java | 164 - .../deployment/ear/xml/JonasApplication.java | 124 - .../deployment/ear/xml/JonasSecurity.java | 88 - .../ow2/jonas/deployment/ear/xml/Module.java | 189 - .../deployment/ear/xml/SecurityRole.java | 110 - .../ear/xml/SecurityRoleMapping.java | 112 - .../org/ow2/jonas/deployment/ear/xml/Web.java | 110 - .../deployment/ejb/ActivationConfigDesc.java | 96 - .../ejb/ActivationConfigPropertyDesc.java | 97 - .../ow2/jonas/deployment/ejb/BeanDesc.java | 1583 ------- .../deployment/ejb/CommonMethodDesc.java | 104 - .../jonas/deployment/ejb/DeploymentDesc.java | 529 --- .../deployment/ejb/DeploymentDescEjb1_1.java | 68 - .../deployment/ejb/DeploymentDescEjb2.java | 252 -- .../jonas/deployment/ejb/EjbRelationDesc.java | 311 -- .../ejb/EjbRelationshipRoleDesc.java | 496 --- .../ow2/jonas/deployment/ejb/EjbjarDTDs.java | 71 - .../jonas/deployment/ejb/EjbjarSchemas.java | 59 - .../jonas/deployment/ejb/EntityBmpDesc.java | 52 - .../jonas/deployment/ejb/EntityCmp1Desc.java | 148 - .../jonas/deployment/ejb/EntityCmp2Desc.java | 380 -- .../jonas/deployment/ejb/EntityCmpDesc.java | 237 -- .../ow2/jonas/deployment/ejb/EntityDesc.java | 434 -- .../deployment/ejb/EntityJdbcCmp1Desc.java | 167 - .../deployment/ejb/EntityJdbcCmp2Desc.java | 157 - .../jonas/deployment/ejb/ExcludeListDesc.java | 45 - .../ow2/jonas/deployment/ejb/FieldDesc.java | 111 - .../jonas/deployment/ejb/FieldJdbcDesc.java | 95 - .../jonas/deployment/ejb/JonasEjbjarDTDs.java | 81 - .../deployment/ejb/JonasEjbjarSchemas.java | 81 - .../deployment/ejb/MessageDrivenDesc.java | 467 -- .../jonas/deployment/ejb/MethodCmp2Desc.java | 141 - .../ow2/jonas/deployment/ejb/MethodDesc.java | 477 --- .../deployment/ejb/MethodJdbcCmp1Desc.java | 114 - .../deployment/ejb/MethodPermissionDesc.java | 78 - .../ow2/jonas/deployment/ejb/SessionDesc.java | 230 - .../deployment/ejb/SessionStatefulDesc.java | 103 - .../deployment/ejb/SessionStatelessDesc.java | 295 -- .../ejb/ejbql/ASTAbstractSchemaName.java | 19 - .../ejbql/ASTAggregateSelectExpression.java | 19 - .../ejb/ejbql/ASTArithmeticExpression.java | 19 - .../ejb/ejbql/ASTArithmeticFactor.java | 19 - .../ejb/ejbql/ASTArithmeticLiteral.java | 19 - .../ejb/ejbql/ASTArithmeticTerm.java | 19 - .../ejb/ejbql/ASTBetweenExpression.java | 19 - .../ejb/ejbql/ASTBooleanExpression.java | 19 - .../ejb/ejbql/ASTBooleanLiteral.java | 19 - .../ejb/ejbql/ASTCmpPathExpression.java | 19 - .../ejbql/ASTCollectionMemberDeclaration.java | 19 - .../ejbql/ASTCollectionMemberExpression.java | 19 - .../ASTCollectionValuedPathExpression.java | 19 - .../ejb/ejbql/ASTComparisonExpression.java | 19 - .../ejb/ejbql/ASTConditionalExpression.java | 19 - .../ejb/ejbql/ASTConditionalFactor.java | 19 - .../ejb/ejbql/ASTConditionalTerm.java | 19 - .../ejb/ejbql/ASTDatetimeExpression.java | 19 - .../jonas/deployment/ejb/ejbql/ASTEJBQL.java | 19 - ...STEmptyCollectionComparisonExpression.java | 19 - .../ejb/ejbql/ASTEntityBeanExpression.java | 19 - .../ejb/ejbql/ASTFloatingPointLiteral.java | 19 - .../deployment/ejb/ejbql/ASTFromClause.java | 19 - .../ejbql/ASTFunctionsReturningNumerics.java | 19 - .../ejbql/ASTFunctionsReturningStrings.java | 19 - .../ejb/ejbql/ASTIdentificationVariable.java | 19 - .../deployment/ejb/ejbql/ASTIdentifier.java | 19 - .../deployment/ejb/ejbql/ASTInExpression.java | 19 - .../ejb/ejbql/ASTInputParameter.java | 19 - .../ejb/ejbql/ASTIntegerLiteral.java | 19 - .../ejb/ejbql/ASTLikeExpression.java | 19 - .../deployment/ejb/ejbql/ASTLimitClause.java | 19 - .../ejb/ejbql/ASTLimitExpression.java | 19 - .../deployment/ejb/ejbql/ASTLiteral.java | 19 - .../ejbql/ASTNullComparisonExpression.java | 19 - .../ejb/ejbql/ASTOrderByClause.java | 19 - .../deployment/ejb/ejbql/ASTOrderByItem.java | 19 - .../jonas/deployment/ejb/ejbql/ASTPath.java | 19 - .../ejbql/ASTRangeVariableDeclaration.java | 19 - .../deployment/ejb/ejbql/ASTSelectClause.java | 19 - .../ejb/ejbql/ASTSelectExpression.java | 19 - .../ASTSingleValuedCmrPathExpression.java | 19 - .../ejbql/ASTSingleValuedPathExpression.java | 19 - .../ejb/ejbql/ASTStringExpression.java | 19 - .../ejb/ejbql/ASTStringLiteral.java | 19 - .../deployment/ejb/ejbql/ASTWhereClause.java | 19 - .../ow2/jonas/deployment/ejb/ejbql/EJBQL.java | 3746 ----------------- .../ow2/jonas/deployment/ejb/ejbql/EJBQL.jjt | 668 --- .../deployment/ejb/ejbql/EJBQLConstants.java | 140 - .../ejb/ejbql/EJBQLTokenManager.java | 1457 ------- .../ejb/ejbql/EJBQLTreeConstants.java | 105 - .../deployment/ejb/ejbql/EJBQLVisitor.java | 54 - .../deployment/ejb/ejbql/JJTEJBQLState.java | 123 - .../ow2/jonas/deployment/ejb/ejbql/Node.java | 37 - .../deployment/ejb/ejbql/ParseException.java | 204 - .../org/ow2/jonas/deployment/ejb/ejbql/README | 33 - .../ejb/ejbql/SimpleCharStream.java | 401 -- .../deployment/ejb/ejbql/SimpleNode.java | 131 - .../ow2/jonas/deployment/ejb/ejbql/Token.java | 81 - .../deployment/ejb/ejbql/TokenMgrError.java | 133 - .../deployment/ejb/ejbql/bnf_ejbql_2_0.txt | 65 - .../deployment/ejb/ejbql/bnf_ejbql_2_1.txt | 120 - .../ow2/jonas/deployment/ejb/ejbql/build.sh | 43 - .../ejb/lib/EjbDeploymentDescManager.java | 1389 ------ .../deployment/ejb/lib/util/ClusterUtil.java | 60 - .../ActivationConfigPropertyRuleSet.java | 66 - .../ejb/rules/ActivationConfigRuleSet.java | 65 - .../ejb/rules/AsContextRuleSet.java | 60 - .../ejb/rules/AssemblyDescriptorRuleSet.java | 67 - .../rules/ClusterArrayPropertyRuleSet.java | 55 - .../ejb/rules/ClusterPropertiesRuleSet.java | 62 - .../deployment/ejb/rules/ClusterRuleSet.java | 68 - .../rules/ClusterSimplePropertyRuleSet.java | 54 - .../ejb/rules/CmpFieldJdbcMappingRuleSet.java | 66 - .../deployment/ejb/rules/CmpFieldRuleSet.java | 64 - .../deployment/ejb/rules/CmrFieldRuleSet.java | 66 - .../rules/ContainerTransactionRuleSet.java | 65 - .../deployment/ejb/rules/EjbJarRuleSet.java | 119 - .../ejb/rules/EjbRelationRuleSet.java | 65 - .../ejb/rules/EjbRelationshipRoleRuleSet.java | 70 - .../ejb/rules/EnterpriseBeansRuleSet.java | 63 - .../deployment/ejb/rules/EntityRuleSet.java | 102 - .../ejb/rules/ExcludeListRuleSet.java | 63 - .../rules/FinderMethodJdbcMappingRuleSet.java | 63 - .../rules/ForeignKeyJdbcMappingRuleSet.java | 64 - .../ejb/rules/IorSecurityConfigRuleSet.java | 60 - .../ejb/rules/JdbcMappingRuleSet.java | 70 - .../ejb/rules/JonasEjbJarRuleSet.java | 61 - .../ejb/rules/JonasEjbRelationRuleSet.java | 65 - .../JonasEjbRelationshipRoleRuleSet.java | 63 - .../ejb/rules/JonasEntityRuleSet.java | 102 - .../ejb/rules/JonasInitParamRuleSet.java | 64 - .../JonasMessageDrivenDestinationRuleSet.java | 62 - .../ejb/rules/JonasMessageDrivenRuleSet.java | 73 - .../ejb/rules/JonasMethodRuleSet.java | 63 - .../ejb/rules/JonasRunAsMappingRuleSet.java | 64 - .../ejb/rules/JonasSessionRuleSet.java | 93 - .../MessageDrivenDestinationRuleSet.java | 64 - .../ejb/rules/MessageDrivenRuleSet.java | 95 - .../ejb/rules/MethodParamsRuleSet.java | 62 - .../ejb/rules/MethodPermissionRuleSet.java | 66 - .../deployment/ejb/rules/MethodRuleSet.java | 69 - .../deployment/ejb/rules/PoolRuleSet.java | 58 - .../ejb/rules/QueryMethodRuleSet.java | 63 - .../deployment/ejb/rules/QueryRuleSet.java | 67 - .../rules/RelationshipRoleSourceRuleSet.java | 64 - .../ejb/rules/RelationshipsRuleSet.java | 63 - .../ejb/rules/SasContextRuleSet.java | 58 - .../ejb/rules/SecurityIdentityRuleSet.java | 66 - .../deployment/ejb/rules/SessionRuleSet.java | 95 - .../ejb/rules/TransportConfigRuleSet.java | 61 - .../ejb/rules/UseCallerIdentityRuleSet.java | 60 - .../ejb/wrapper/EjbManagerWrapper.java | 161 - .../deployment/ejb/xml/ActivationConfig.java | 125 - .../ejb/xml/ActivationConfigProperty.java | 113 - .../deployment/ejb/xml/AsContextMapping.java | 123 - .../ejb/xml/AssemblyDescriptor.java | 221 - .../jonas/deployment/ejb/xml/CmpField.java | 110 - .../ejb/xml/CmpFieldJdbcMapping.java | 133 - .../jonas/deployment/ejb/xml/CmrField.java | 133 - .../jonas/deployment/ejb/xml/CommonEjb.java | 296 -- .../deployment/ejb/xml/CommonEjbXml.java | 78 - .../ejb/xml/ContainerTransaction.java | 143 - .../ow2/jonas/deployment/ejb/xml/EjbJar.java | 251 -- .../jonas/deployment/ejb/xml/EjbRelation.java | 168 - .../ejb/xml/EjbRelationshipRole.java | 210 - .../deployment/ejb/xml/EnterpriseBeans.java | 161 - .../ow2/jonas/deployment/ejb/xml/Entity.java | 312 -- .../jonas/deployment/ejb/xml/ExcludeList.java | 120 - .../ejb/xml/FinderMethodJdbcMapping.java | 112 - .../ejb/xml/ForeignKeyJdbcMapping.java | 110 - .../ejb/xml/IorSecurityConfigMapping.java | 120 - .../jonas/deployment/ejb/xml/JdbcMapping.java | 221 - .../deployment/ejb/xml/JonasCommonEjb.java | 224 - .../deployment/ejb/xml/JonasCommonEjbXml.java | 58 - .../jonas/deployment/ejb/xml/JonasEjbJar.java | 285 -- .../deployment/ejb/xml/JonasEjbRelation.java | 143 - .../ejb/xml/JonasEjbRelationshipRole.java | 120 - .../jonas/deployment/ejb/xml/JonasEntity.java | 411 -- .../deployment/ejb/xml/JonasInitParam.java | 110 - .../ejb/xml/JonasMessageDriven.java | 148 - .../xml/JonasMessageDrivenDestination.java | 87 - .../jonas/deployment/ejb/xml/JonasMethod.java | 112 - .../deployment/ejb/xml/JonasRunAsMapping.java | 113 - .../deployment/ejb/xml/JonasSession.java | 225 - .../deployment/ejb/xml/MessageDriven.java | 249 -- .../ejb/xml/MessageDrivenDestination.java | 110 - .../ow2/jonas/deployment/ejb/xml/Method.java | 181 - .../deployment/ejb/xml/MethodParams.java | 97 - .../deployment/ejb/xml/MethodPermission.java | 177 - .../ow2/jonas/deployment/ejb/xml/Query.java | 158 - .../jonas/deployment/ejb/xml/QueryMethod.java | 112 - .../ejb/xml/RelationshipRoleSource.java | 110 - .../deployment/ejb/xml/Relationships.java | 120 - .../deployment/ejb/xml/SasContextMapping.java | 85 - .../deployment/ejb/xml/SecurityIdentity.java | 139 - .../ow2/jonas/deployment/ejb/xml/Session.java | 236 -- .../ejb/xml/TransportConfigMapping.java | 143 - .../deployment/ejb/xml/UseCallerIdentity.java | 58 - .../deployment/rar/ActivationspecDesc.java | 79 - .../jonas/deployment/rar/AdminobjectDesc.java | 107 - .../rar/AuthenticationMechanismDesc.java | 94 - .../deployment/rar/ConfigPropertyDesc.java | 141 - .../rar/ConnectionDefinitionDesc.java | 150 - .../jonas/deployment/rar/ConnectorDTDs.java | 67 - .../jonas/deployment/rar/ConnectorDesc.java | 220 - .../deployment/rar/ConnectorSchemas.java | 59 - .../ow2/jonas/deployment/rar/IconDesc.java | 78 - .../rar/InboundResourceadapterDesc.java | 65 - .../deployment/rar/JdbcConnParamsDesc.java | 98 - .../rar/JonasActivationspecDesc.java | 107 - .../deployment/rar/JonasAdminobjectDesc.java | 108 - .../rar/JonasConfigPropertyDesc.java | 79 - .../rar/JonasConnectionDefinitionDesc.java | 164 - .../deployment/rar/JonasConnectorDTDs.java | 67 - .../deployment/rar/JonasConnectorDesc.java | 241 -- .../deployment/rar/JonasConnectorSchemas.java | 70 - .../rar/JonasSecurityMappingDesc.java | 64 - .../ow2/jonas/deployment/rar/LicenseDesc.java | 79 - .../deployment/rar/MessageadapterDesc.java | 64 - .../deployment/rar/MessagelistenerDesc.java | 94 - .../rar/OutboundResourceadapterDesc.java | 107 - .../jonas/deployment/rar/PoolParamsDesc.java | 204 - .../deployment/rar/RarDeploymentDesc.java | 264 -- .../rar/RarDeploymentDescException.java | 75 - .../rar/RequiredConfigPropertyDesc.java | 79 - .../deployment/rar/ResourceadapterDesc.java | 249 -- .../deployment/rar/SecurityEntryDesc.java | 105 - .../rar/SecurityPermissionDesc.java | 80 - .../deployment/rar/TmConfigPropertyDesc.java | 79 - .../jonas/deployment/rar/TmParamsDesc.java | 66 - .../org/ow2/jonas/deployment/rar/Utility.java | 204 - .../rar/lib/RarDeploymentDescManager.java | 348 -- .../rar/rules/ActivationspecRuleSet.java | 63 - .../rar/rules/AdminobjectRuleSet.java | 66 - .../rules/AuthenticationMechanismRuleSet.java | 66 - .../rar/rules/ConfigPropertyRuleSet.java | 68 - .../rules/ConnectionDefinitionRuleSet.java | 72 - .../rar/rules/ConnectorRuleSet.java | 73 - .../deployment/rar/rules/IconRuleSet.java | 64 - .../rules/InboundResourceadapterRuleSet.java | 61 - .../rar/rules/JdbcConnParamsRuleSet.java | 64 - .../rar/rules/JonasActivationspecRuleSet.java | 69 - .../rar/rules/JonasAdminobjectRuleSet.java | 68 - .../rar/rules/JonasConfigPropertyRuleSet.java | 64 - .../JonasConnectionDefinitionRuleSet.java | 74 - .../rar/rules/JonasConnectorRuleSet.java | 101 - .../rules/JonasSecurityMappingRuleSet.java | 61 - .../deployment/rar/rules/LicenseRuleSet.java | 64 - .../rar/rules/MessageadapterRuleSet.java | 61 - .../rar/rules/MessagelistenerRuleSet.java | 64 - .../rules/OutboundResourceadapterRuleSet.java | 66 - .../rar/rules/PoolParamsRuleSet.java | 82 - .../rules/RequiredConfigPropertyRuleSet.java | 64 - .../rar/rules/ResourceadapterRuleSet.java | 82 - .../rar/rules/SecurityEntryRuleSet.java | 64 - .../rar/rules/SecurityPermissionRuleSet.java | 64 - .../rar/rules/TmConfigPropertyRuleSet.java | 65 - .../deployment/rar/rules/TmParamsRuleSet.java | 61 - .../rar/wrapper/RarManagerWrapper.java | 149 - .../deployment/rar/xml/Activationspec.java | 120 - .../jonas/deployment/rar/xml/Adminobject.java | 166 - .../rar/xml/AuthenticationMechanism.java | 144 - .../deployment/rar/xml/ConfigProperty.java | 168 - .../rar/xml/ConnectionDefinition.java | 236 -- .../jonas/deployment/rar/xml/Connector.java | 313 -- .../ow2/jonas/deployment/rar/xml/Icon.java | 111 - .../rar/xml/InboundResourceadapter.java | 89 - .../deployment/rar/xml/JdbcConnParams.java | 111 - .../rar/xml/JonasActivationspec.java | 168 - .../deployment/rar/xml/JonasAdminobject.java | 179 - .../rar/xml/JonasConfigProperty.java | 111 - .../rar/xml/JonasConnectionDefinition.java | 275 -- .../deployment/rar/xml/JonasConnector.java | 429 -- .../rar/xml/JonasSecurityMapping.java | 96 - .../ow2/jonas/deployment/rar/xml/License.java | 121 - .../deployment/rar/xml/Messageadapter.java | 97 - .../deployment/rar/xml/Messagelistener.java | 136 - .../rar/xml/OutboundResourceadapter.java | 175 - .../jonas/deployment/rar/xml/PoolParams.java | 317 -- .../rar/xml/RequiredConfigProperty.java | 120 - .../deployment/rar/xml/Resourceadapter.java | 411 -- .../deployment/rar/xml/SecurityEntry.java | 146 - .../rar/xml/SecurityPermission.java | 121 - .../deployment/rar/xml/TmConfigProperty.java | 111 - .../jonas/deployment/rar/xml/TmParams.java | 102 - .../jonas/deployment/web/JonasWebAppDTDs.java | 87 - .../deployment/web/JonasWebAppSchemas.java | 71 - .../ow2/jonas/deployment/web/MethodDesc.java | 234 - .../ow2/jonas/deployment/web/MethodsDesc.java | 263 -- .../org/ow2/jonas/deployment/web/Pattern.java | 256 -- .../jonas/deployment/web/PatternEntry.java | 343 -- .../web/SecurityConstraintListDesc.java | 453 -- .../deployment/web/SecurityRoleDesc.java | 59 - .../ow2/jonas/deployment/web/ServletDesc.java | 103 - .../web/TransportGuaranteeDesc.java | 136 - .../ow2/jonas/deployment/web/WebAppDTDs.java | 69 - .../jonas/deployment/web/WebAppSchemas.java | 65 - .../web/WebContainerDeploymentDesc.java | 528 --- .../WebContainerDeploymentDescException.java | 78 - .../WarDeployableMetadataFactoryHolder.java | 69 - .../web/lib/WebDeploymentDescManager.java | 1216 ------ .../web/rules/AuthConstraintRuleSet.java | 67 - .../web/rules/DistributableRuleSet.java | 61 - .../web/rules/JonasServletRuleSet.java | 71 - .../web/rules/JonasWebAppRuleSet.java | 78 - .../web/rules/SecurityConstraintRuleSet.java | 65 - .../web/rules/ServletMappingRuleSet.java | 69 - .../deployment/web/rules/ServletRuleSet.java | 82 - .../web/rules/UserDataConstraintRuleSet.java | 68 - .../deployment/web/rules/WebAppRuleSet.java | 67 - .../rules/WebResourceCollectionRuleSet.java | 74 - .../web/wrapper/WebManagerWrapper.java | 199 - .../deployment/web/xml/AuthConstraint.java | 119 - .../deployment/web/xml/JonasServlet.java | 115 - .../jonas/deployment/web/xml/JonasWebApp.java | 297 -- .../web/xml/SecurityConstraint.java | 160 - .../ow2/jonas/deployment/web/xml/Servlet.java | 204 - .../deployment/web/xml/ServletMapping.java | 113 - .../web/xml/UserDataConstraint.java | 120 - .../ow2/jonas/deployment/web/xml/WebApp.java | 262 -- .../web/xml/WebResourceCollection.java | 172 - .../ws/JaxRpcPortComponentDesc.java | 120 - .../deployment/ws/JaxrpcMappingSchemas.java | 60 - .../jonas/deployment/ws/JonasWsSchemas.java | 72 - .../ow2/jonas/deployment/ws/MappingFile.java | 227 - .../deployment/ws/PortComponentDesc.java | 393 -- .../ws/PortComponentDescFactory.java | 72 - .../deployment/ws/PortComponentRefDesc.java | 217 - .../deployment/ws/SSBPortComponentDesc.java | 120 - .../ow2/jonas/deployment/ws/ServiceDesc.java | 394 -- .../jonas/deployment/ws/ServiceRefDesc.java | 604 --- .../org/ow2/jonas/deployment/ws/WSDLFile.java | 418 -- .../jonas/deployment/ws/WSDeploymentDesc.java | 283 -- .../ws/WSDeploymentDescException.java | 81 - .../ow2/jonas/deployment/ws/WsSchemas.java | 59 - .../deployment/ws/lib/MappingFileManager.java | 251 -- .../ws/lib/WSDeploymentDescManager.java | 954 ----- .../ws/rules/AnonymousTypeQnameRuleSet.java | 65 - .../ws/rules/JavaWsdlMappingRuleSet.java | 56 - .../ws/rules/JavaXmlTypeMappingRuleSet.java | 66 - .../ws/rules/JonasPortComponentRuleSet.java | 60 - .../JonasWebserviceDescriptionRuleSet.java | 61 - .../ws/rules/JonasWebservicesRuleSet.java | 59 - .../ws/rules/PackageMappingRuleSet.java | 64 - .../ws/rules/PortComponentRuleSet.java | 77 - .../ws/rules/RootTypeQnameRuleSet.java | 65 - .../ws/rules/ServiceImplBeanRuleSet.java | 65 - .../ws/rules/VariableMappingRuleSet.java | 66 - .../rules/WebserviceDescriptionRuleSet.java | 73 - .../ws/rules/WebservicesRuleSet.java | 59 - .../ws/wrapper/MappingFileManagerWrapper.java | 126 - .../ws/wrapper/WSManagerWrapper.java | 181 - .../deployment/ws/xml/JavaWsdlMapping.java | 130 - .../deployment/ws/xml/JavaXmlTypeMapping.java | 193 - .../deployment/ws/xml/JonasPortComponent.java | 106 - .../ws/xml/JonasWebserviceDescription.java | 151 - .../deployment/ws/xml/JonasWebservices.java | 170 - .../deployment/ws/xml/PackageMapping.java | 111 - .../deployment/ws/xml/PortComponent.java | 208 - .../deployment/ws/xml/ServiceImplBean.java | 112 - .../deployment/ws/xml/VariableMapping.java | 135 - .../ws/xml/WebserviceDescription.java | 260 -- .../jonas/deployment/ws/xml/Webservices.java | 127 - .../resources/META-INF/jonas-deployment.bnd | 40 - .../org/ow2/jonas/deployment/XMLSchema.dtd | 402 -- .../client/application-client_1_2.dtd | 292 -- .../client/application-client_1_3.dtd | 506 --- .../client/application-client_1_4.xsd | 266 -- .../client/application-client_5.xsd | 303 -- .../deployment/client/jonas-client_3_2.dtd | 136 - .../deployment/client/jonas-client_4_0.xsd | 173 - .../deployment/client/jonas-client_4_1.xsd | 183 - .../deployment/client/jonas-client_4_1_2.xsd | 183 - .../deployment/client/jonas-client_4_1_4.xsd | 183 - .../deployment/client/jonas-client_4_2.xsd | 183 - .../deployment/client/jonas-client_5_0.xsd | 182 - .../clusterd/jonas-clusterd_5_0.xsd | 177 - .../clusterd/jonas-clusterd_5_1.xsd | 179 - .../clusterd/jonas-clusterd_5_3.xsd | 178 - .../org/ow2/jonas/deployment/datatypes.dtd | 203 - .../deployment/domain/jonas-domain_4_7.xsd | 136 - .../deployment/domain/jonas-domain_4_9.xsd | 145 - .../deployment/domain/jonas-domain_5_0.xsd | 177 - .../deployment/domain/jonas-domain_5_1.xsd | 175 - .../jonas/deployment/ear/application_1_2.dtd | 197 - .../jonas/deployment/ear/application_1_3.dtd | 312 -- .../jonas/deployment/ear/application_1_4.xsd | 314 -- .../jonas/deployment/ear/application_5.xsd | 334 -- .../ear/jonas-application_4_1_4.xsd | 140 - .../deployment/ear/jonas-application_5_0.xsd | 140 - .../deployment/ear/jonas-application_5_3.xsd | 148 - .../ow2/jonas/deployment/ejb/ejb-jar_1_1.dtd | 819 ---- .../ow2/jonas/deployment/ejb/ejb-jar_2_0.dtd | 1671 -------- .../jonas/deployment/ejb/ejb-jar_2_0_ws.dtd | 1884 --------- .../ow2/jonas/deployment/ejb/ejb-jar_2_1.xsd | 2207 ---------- .../ow2/jonas/deployment/ejb/ejb-jar_3_0.xsd | 2705 ------------ .../ow2/jonas/deployment/ejb/ejb-jar_3_1.xsd | 3247 -------------- .../deployment/ejb/jonas-ejb-jar_2_4.dtd | 362 -- .../deployment/ejb/jonas-ejb-jar_2_5.dtd | 369 -- .../deployment/ejb/jonas-ejb-jar_3_0.dtd | 370 -- .../deployment/ejb/jonas-ejb-jar_3_2.dtd | 453 -- .../deployment/ejb/jonas-ejb-jar_3_2_ws.dtd | 488 --- .../deployment/ejb/jonas-ejb-jar_3_3.dtd | 492 --- .../deployment/ejb/jonas-ejb-jar_3_3_1.dtd | 502 --- .../deployment/ejb/jonas-ejb-jar_3_3_2.dtd | 514 --- .../deployment/ejb/jonas-ejb-jar_4_0.xsd | 679 --- .../deployment/ejb/jonas-ejb-jar_4_1.xsd | 739 ---- .../deployment/ejb/jonas-ejb-jar_4_10.xsd | 1133 ----- .../deployment/ejb/jonas-ejb-jar_4_1_2.xsd | 802 ---- .../deployment/ejb/jonas-ejb-jar_4_1_4.xsd | 802 ---- .../deployment/ejb/jonas-ejb-jar_4_2.xsd | 823 ---- .../deployment/ejb/jonas-ejb-jar_4_3.xsd | 991 ----- .../deployment/ejb/jonas-ejb-jar_4_6.xsd | 994 ----- .../deployment/ejb/jonas-ejb-jar_4_7.xsd | 1084 ----- .../deployment/ejb/jonas-ejb-jar_4_8.xsd | 1100 ----- .../deployment/ejb/jonas-ejb-jar_5_0.xsd | 1126 ----- .../deployment/ejb/jonas-ejb-jar_5_1.xsd | 1144 ----- .../deployment/ejb/jonas-ejb-jar_5_2.xsd | 1181 ------ .../org/ow2/jonas/deployment/j2ee_1_4.xsd | 1607 ------- .../j2ee_web_services_client_1_1.xsd | 341 -- .../org/ow2/jonas/deployment/javaee_5.xsd | 2095 --------- .../org/ow2/jonas/deployment/javaee_6.xsd | 2422 ----------- .../javaee_web_services_client_1_2.xsd | 578 --- .../javaee_web_services_client_1_3.xsd | 737 ---- .../jonas/deployment/jonas-clusterd_5_0.xsd | 177 - .../jonas/deployment/jonas-clusterd_5_1.xsd | 179 - .../deployment/jonas-deployment-plan_0_1.xsd | 172 - .../ow2/jonas/deployment/jonas_j2ee_4_0.xsd | 235 -- .../ow2/jonas/deployment/jonas_j2ee_4_1.xsd | 311 -- .../ow2/jonas/deployment/jonas_j2ee_4_1_2.xsd | 361 -- .../ow2/jonas/deployment/jonas_j2ee_4_1_4.xsd | 372 -- .../ow2/jonas/deployment/jonas_j2ee_4_2.xsd | 382 -- .../jonas/deployment/rar/connector_1_0.dtd | 561 --- .../jonas/deployment/rar/connector_1_5.xsd | 1035 ----- .../deployment/rar/jonas-connector_3_0.dtd | 200 - .../deployment/rar/jonas-connector_4_0.xsd | 473 --- .../deployment/rar/jonas-connector_4_1.xsd | 485 --- .../deployment/rar/jonas-connector_4_2.xsd | 530 --- .../deployment/rar/jonas-connector_4_4.xsd | 573 --- .../deployment/rar/jonas-connector_5_0.xsd | 573 --- .../deployment/rar/jonas-connector_5_3.xsd | 606 --- .../jonas/deployment/web/configure_1_1.dtd | 157 - .../jonas/deployment/web/configure_1_2.dtd | 211 - .../deployment/web/jonas-web-app_2_6.dtd | 111 - .../deployment/web/jonas-web-app_3_1.dtd | 133 - .../deployment/web/jonas-web-app_3_3.dtd | 180 - .../deployment/web/jonas-web-app_4_0.xsd | 141 - .../deployment/web/jonas-web-app_4_1.xsd | 146 - .../deployment/web/jonas-web-app_4_1_2.xsd | 147 - .../deployment/web/jonas-web-app_4_1_4.xsd | 147 - .../deployment/web/jonas-web-app_4_2.xsd | 147 - .../deployment/web/jonas-web-app_5_1.xsd | 204 - .../deployment/web/jonas-web-app_5_3.xsd | 212 - .../org/ow2/jonas/deployment/web/jsp_2_0.xsd | 307 -- .../org/ow2/jonas/deployment/web/jsp_2_1.xsd | 342 -- .../org/ow2/jonas/deployment/web/jsp_2_2.xsd | 389 -- .../ow2/jonas/deployment/web/web-app_2_2.dtd | 639 --- .../ow2/jonas/deployment/web/web-app_2_3.dtd | 1063 ----- .../ow2/jonas/deployment/web/web-app_2_4.xsd | 1242 ------ .../ow2/jonas/deployment/web/web-app_2_5.xsd | 1268 ------ .../ow2/jonas/deployment/web/web-app_3_0.xsd | 272 -- .../jonas/deployment/web/web-common_3_0.xsd | 1575 ------- .../deployment/web/web-facesconfig_1_2.xsd | 2071 --------- .../deployment/web/web-jsptaglibrary_2_1.xsd | 1143 ----- .../ow2/jonas/deployment/ws/I18n.properties | 48 - .../jonas/deployment/ws/I18n_fr.properties | 48 - .../deployment/ws/j2ee_jaxrpc_mapping_1_0.dtd | 431 -- .../deployment/ws/j2ee_jaxrpc_mapping_1_1.xsd | 915 ---- .../deployment/ws/j2ee_web_services_1_0.dtd | 303 -- .../deployment/ws/j2ee_web_services_1_1.xsd | 490 --- .../deployment/ws/javaee_web_services_1_2.xsd | 747 ---- .../ws/javaee_web_services_client_1_2.xsd | 578 --- .../deployment/ws/jonas-webservices_3_3.dtd | 54 - .../ws/jonas_j2ee_web_services_4_0.xsd | 104 - .../ws/jonas_j2ee_web_services_4_1_2.xsd | 163 - .../ws/jonas_j2ee_web_services_4_1_4.xsd | 164 - .../ws/jonas_j2ee_web_services_4_2.xsd | 179 - .../ws/jonas_j2ee_web_services_4_5.xsd | 228 - .../ws/jonas_j2ee_web_services_5_0.xsd | 228 - .../org/ow2/jonas/deployment/xml.xsd | 81 - .../client/tests/ClientDeploymentTest.java | 64 - .../tests/JonasClientDeploymentTest.java | 65 - .../domain/tests/DomainMapTest.java | 71 - .../ear/tests/EarDeploymentTest.java | 73 - .../ejb/tests/EJBDeploymentTest.java | 65 - .../ejb/tests/JonasEJBDeploymentTest.java | 62 - .../rar/tests/JonasRarDeploymentTest.java | 63 - .../rar/tests/RarDeploymentTest.java | 64 - .../deployment/tests/AbsDeploymentTest.java | 351 -- .../web/tests/JonasWebDeploymentTest.java | 69 - .../web/tests/WebDeploymentTest.java | 69 - .../ws/tests/JonasWsDeploymentTest.java | 65 - .../deployment/ws/tests/WsDeploymentTest.java | 102 - .../libraries/jonas-ejb-container-svc/pom.xml | 46 - .../org/ow2/jonas/lib/svc/JHandleIIOP.java | 142 - .../ow2/jonas/lib/svc/JHomeHandleIIOP.java | 173 - .../java/org/ow2/jonas/lib/svc/JMetaData.java | 148 - .../java/org/ow2/jonas/lib/svc/Utility.java | 80 - .../META-INF/jonas-ejb-container-svc.bnd | 25 - .../libraries/jonas-ejb-container/pom.xml | 194 - .../org/ow2/jonas/lib/ejb21/BeanFactory.java | 141 - .../ow2/jonas/lib/ejb21/CollectionEnum.java | 103 - .../org/ow2/jonas/lib/ejb21/Container.java | 206 - .../ow2/jonas/lib/ejb21/EJBInvocation.java | 74 - .../ow2/jonas/lib/ejb21/EntityCounters.java | 67 - .../ow2/jonas/lib/ejb21/ExceptionHelper.java | 62 - .../org/ow2/jonas/lib/ejb21/HomeFactory.java | 89 - .../org/ow2/jonas/lib/ejb21/JContainer.java | 1278 ------ .../org/ow2/jonas/lib/ejb21/JContext.java | 437 -- .../ow2/jonas/lib/ejb21/JEntityContext.java | 716 ---- .../ow2/jonas/lib/ejb21/JEntityFactory.java | 1377 ------ .../ow2/jonas/lib/ejb21/JEntityHandle.java | 81 - .../org/ow2/jonas/lib/ejb21/JEntityHome.java | 75 - .../org/ow2/jonas/lib/ejb21/JEntityLocal.java | 170 - .../ow2/jonas/lib/ejb21/JEntityLocalHome.java | 80 - .../ow2/jonas/lib/ejb21/JEntityRemote.java | 223 - .../ow2/jonas/lib/ejb21/JEntitySwitch.java | 1098 ----- .../ow2/jonas/lib/ejb21/JEntitySwitchCRC.java | 273 -- .../ow2/jonas/lib/ejb21/JEntitySwitchCRU.java | 149 - .../ow2/jonas/lib/ejb21/JEntitySwitchCRW.java | 240 -- .../ow2/jonas/lib/ejb21/JEntitySwitchCS.java | 290 -- .../ow2/jonas/lib/ejb21/JEntitySwitchCST.java | 287 -- .../ow2/jonas/lib/ejb21/JEntitySwitchDB.java | 197 - .../ow2/jonas/lib/ejb21/JEntitySwitchRO.java | 153 - .../org/ow2/jonas/lib/ejb21/JFactory.java | 1157 ----- .../ow2/jonas/lib/ejb21/JHandleDelegate.java | 133 - .../java/org/ow2/jonas/lib/ejb21/JHome.java | 336 -- .../org/ow2/jonas/lib/ejb21/JHomeHandle.java | 94 - .../java/org/ow2/jonas/lib/ejb21/JLocal.java | 69 - .../org/ow2/jonas/lib/ejb21/JLocalHome.java | 174 - .../jonas/lib/ejb21/JMdbEndpointFactory.java | 815 ---- .../org/ow2/jonas/lib/ejb21/JMdbFactory.java | 615 --- .../jonas/lib/ejb21/JMessageDrivenBean.java | 477 --- .../ow2/jonas/lib/ejb21/JMessageEndpoint.java | 374 -- .../lib/ejb21/JMessageEndpointProxy.java | 277 -- .../jonas/lib/ejb21/JObjectInputStream.java | 69 - .../java/org/ow2/jonas/lib/ejb21/JRemote.java | 106 - .../ow2/jonas/lib/ejb21/JServiceEndpoint.java | 198 - .../jonas/lib/ejb21/JServiceEndpointHome.java | 180 - .../ow2/jonas/lib/ejb21/JSessionContext.java | 215 - .../ow2/jonas/lib/ejb21/JSessionFactory.java | 491 --- .../ow2/jonas/lib/ejb21/JSessionHandle.java | 69 - .../org/ow2/jonas/lib/ejb21/JSessionHome.java | 103 - .../ow2/jonas/lib/ejb21/JSessionLocal.java | 188 - .../jonas/lib/ejb21/JSessionLocalHome.java | 81 - .../ow2/jonas/lib/ejb21/JSessionRemote.java | 276 -- .../ow2/jonas/lib/ejb21/JSessionSwitch.java | 134 - .../ow2/jonas/lib/ejb21/JStatefulContext.java | 239 -- .../ow2/jonas/lib/ejb21/JStatefulFactory.java | 397 -- .../jonas/lib/ejb21/JStatefulInputStream.java | 167 - .../lib/ejb21/JStatefulOutputStream.java | 144 - .../ow2/jonas/lib/ejb21/JStatefulSwitch.java | 564 --- .../jonas/lib/ejb21/JStatelessContext.java | 205 - .../jonas/lib/ejb21/JStatelessFactory.java | 486 --- .../ow2/jonas/lib/ejb21/JStatelessSwitch.java | 193 - .../java/org/ow2/jonas/lib/ejb21/JTimer.java | 566 --- .../org/ow2/jonas/lib/ejb21/JTimerHandle.java | 172 - .../ow2/jonas/lib/ejb21/JTimerService.java | 378 -- .../org/ow2/jonas/lib/ejb21/JWrapper.java | 81 - .../org/ow2/jonas/lib/ejb21/JavaType.java | 442 -- .../org/ow2/jonas/lib/ejb21/MarshallTool.java | 118 - .../ow2/jonas/lib/ejb21/MonitoringEvent.java | 97 - .../jonas/lib/ejb21/PermissionManager.java | 382 -- .../ow2/jonas/lib/ejb21/PrincipalFactory.java | 43 - .../org/ow2/jonas/lib/ejb21/Protocols.java | 144 - .../org/ow2/jonas/lib/ejb21/RequestCtx.java | 105 - .../java/org/ow2/jonas/lib/ejb21/Swapper.java | 174 - .../org/ow2/jonas/lib/ejb21/TraceEjb.java | 226 - .../org/ow2/jonas/lib/ejb21/TxListener.java | 197 - .../ow2/jonas/lib/ejb21/jorm/CMP2Bean.java | 66 - .../org/ow2/jonas/lib/ejb21/jorm/Coder.java | 59 - .../ow2/jonas/lib/ejb21/jorm/Collection.java | 229 - .../lib/ejb21/jorm/CollectionElement.java | 63 - .../lib/ejb21/jorm/FloatPkFieldMapping.java | 73 - .../jonas/lib/ejb21/jorm/GenClassElement.java | 319 -- .../jonas/lib/ejb21/jorm/GenClassImpl.java | 829 ---- .../lib/ejb21/jorm/GenClassListener.java | 58 - .../jonas/lib/ejb21/jorm/JEntityContext.java | 74 - .../ow2/jonas/lib/ejb21/jorm/JormFactory.java | 424 -- .../ow2/jonas/lib/ejb21/jorm/JormType.java | 253 -- .../jonas/lib/ejb21/jorm/MapperManager.java | 190 - .../jonas/lib/ejb21/jorm/MedorFactory.java | 272 -- .../org/ow2/jonas/lib/ejb21/jorm/PObject.java | 46 - .../ow2/jonas/lib/ejb21/jorm/PObjectHome.java | 45 - .../ow2/jonas/lib/ejb21/jorm/RdbFactory.java | 112 - .../lib/ejb21/jorm/RdbMappingBuilder.java | 703 ---- .../org/ow2/jonas/lib/ejb21/jorm/Set.java | 244 -- .../lib/ejb21/sql/EjbqlAbstractVisitor.java | 784 ---- .../lib/ejb21/sql/EjbqlLimitVisitor.java | 141 - .../lib/ejb21/sql/EjbqlLimiterRange.java | 82 - .../lib/ejb21/sql/EjbqlOrderByVisitor.java | 126 - .../ejb21/sql/EjbqlQueryFilterVisitor.java | 827 ---- .../lib/ejb21/sql/EjbqlQueryTreeHolder.java | 245 -- .../lib/ejb21/sql/EjbqlSelectVisitor.java | 211 - .../lib/ejb21/sql/EjbqlVariableVisitor.java | 646 --- .../lib/ejb21/sql/SqlDateFieldMapping.java | 74 - .../lib/ejb21/sql/SqlTimeFieldMapping.java | 73 - .../ejb21/sql/SqlTimestampFieldMapping.java | 73 - .../META-INF/jonas-ejb-container.bnd | 61 - .../modules/libraries/jonas-ejb2.1-ha/pom.xml | 56 - .../jonas/lib/ejb21/ha/EntityBeanRefImpl.java | 82 - .../jonas/lib/ejb21/ha/JRepEntityHome.java | 99 - .../jonas/lib/ejb21/ha/JRepEntityLocal.java | 94 - .../lib/ejb21/ha/JRepEntityLocalHome.java | 88 - .../jonas/lib/ejb21/ha/JRepEntityRemote.java | 219 - .../lib/ejb21/ha/JRepStatefulInputStream.java | 144 - .../jonas/lib/ejb21/ha/JRepStatefulLocal.java | 186 - .../lib/ejb21/ha/JRepStatefulLocalHome.java | 106 - .../lib/ejb21/ha/JRepStatefulObjectId.java | 82 - .../ejb21/ha/JRepStatefulOutputStream.java | 66 - .../lib/ejb21/ha/JRepStatefulRemote.java | 257 -- .../lib/ejb21/ha/JRepStatelessRemote.java | 224 - .../org/ow2/jonas/lib/ejb21/ha/JRepUtil.java | 210 - .../lib/ejb21/ha/StatefulBeanRefImpl.java | 164 - .../resources/META-INF/jonas-ejb2.1-ha.bnd | 30 - .../libraries/jonas-mbeans-for-addons/pom.xml | 107 - .../org/ow2/jonas/lib/jmbeans/J2EEServer.java | 2198 ---------- .../jonas/lib/jmbeans/J2EEServerMBean.java | 562 --- .../org/ow2/jonas/lib/jmbeans/JavaVm.java | 231 - .../org/ow2/jonas/lib/jmbeans/LogManager.java | 152 - .../jonas/lib/jmbeans/LogManagerMBean.java | 38 - .../jonas/lib/jmbeans/MBeansRegistration.java | 294 -- .../ow2/jonas/lib/jmbeans/log/LogBuffer.java | 595 --- .../jonas/lib/jmbeans/log/LogBufferMBean.java | 82 - .../jonas/lib/jmbeans/log/LogManagement.java | 213 - .../lib/jmbeans/log/LogManagementMBean.java | 70 - .../jmbeans/log/LogNotificationListener.java | 94 - .../lib/jmbeans/log/LogRecordComparator.java | 59 - .../jonas/lib/jmbeans/log/RecordFeeder.java | 154 - .../jmbeans/monitoring/MemoryMonitoring.java | 209 - .../META-INF/jonas-mbeans-for-addons.bnd | 32 - .../src/main/resources/metadata.xml | 109 - .../jonas/lib/jmbeans/mbeans-descriptors.xml | 853 ---- jonas/modules/libraries/jonas-mbeans/pom.xml | 112 - .../org/ow2/jonas/lib/jmbeans/J2EEServer.java | 2212 ---------- .../jonas/lib/jmbeans/J2EEServerMBean.java | 562 --- .../org/ow2/jonas/lib/jmbeans/JavaVm.java | 231 - .../org/ow2/jonas/lib/jmbeans/LogManager.java | 152 - .../jonas/lib/jmbeans/LogManagerMBean.java | 38 - .../jonas/lib/jmbeans/MBeansRegistration.java | 294 -- .../ow2/jonas/lib/jmbeans/log/LogBuffer.java | 595 --- .../jonas/lib/jmbeans/log/LogBufferMBean.java | 82 - .../jonas/lib/jmbeans/log/LogManagement.java | 213 - .../lib/jmbeans/log/LogManagementMBean.java | 70 - .../jmbeans/log/LogNotificationListener.java | 94 - .../lib/jmbeans/log/LogRecordComparator.java | 59 - .../jonas/lib/jmbeans/log/RecordFeeder.java | 154 - .../jmbeans/monitoring/MemoryMonitoring.java | 209 - .../main/resources/META-INF/jonas-mbeans.bnd | 32 - .../src/main/resources/metadata.xml | 109 - .../jonas/lib/jmbeans/mbeans-descriptors.xml | 853 ---- jonas/modules/libraries/jonas-naming/pom.xml | 56 - .../jonas/lib/naming/ComponentContext.java | 964 ----- .../jonas/lib/naming/ComponentNameParser.java | 61 - .../SingletonComponentContextFactory.java | 236 -- .../lib/naming/SingletonNamingManager.java | 310 -- .../org/ow2/jonas/lib/naming/URLFactory.java | 100 - .../jonas/lib/naming/java/javaURLContext.java | 680 --- .../naming/java/javaURLContextFactory.java | 86 - .../main/resources/META-INF/jonas-naming.bnd | 34 - .../src/main/resources/metadata.xml | 56 - .../jonas-service-manager-for-addons/pom.xml | 66 - .../manager/DeployableEnumeration.java | 78 - .../manager/RequireJOnASServicesHandler.java | 79 - .../lib/service/manager/ServiceItem.java | 93 - .../service/manager/ServiceManagerImpl.java | 772 ---- .../lib/service/manager/ServiceTracker.java | 82 - .../lib/service/manager/ServiceUtil.java | 79 - .../jonas-service-manager-for-addons.bnd | 28 - .../src/main/resources/metadata.xml | 64 - .../libraries/jonas-service-manager/pom.xml | 66 - .../manager/DeployableEnumeration.java | 78 - .../manager/RequireJOnASServicesHandler.java | 79 - .../lib/service/manager/ServiceItem.java | 93 - .../service/manager/ServiceManagerImpl.java | 771 ---- .../lib/service/manager/ServiceTracker.java | 82 - .../lib/service/manager/ServiceUtil.java | 79 - .../META-INF/jonas-service-manager.bnd | 28 - .../src/main/resources/metadata.xml | 64 - jonas/modules/libraries/jonas-shell/pom.xml | 47 - .../shell/internal/JOnASPromptProvider.java | 45 - .../src/main/resources/metadata.xml | 44 - jonas/modules/libraries/jonas-timer/pom.xml | 46 - .../org/ow2/jonas/lib/timer/TimerEvent.java | 163 - .../jonas/lib/timer/TimerEventListener.java | 34 - .../org/ow2/jonas/lib/timer/TimerManager.java | 291 -- .../org/ow2/jonas/lib/timer/TraceTimer.java | 62 - .../main/resources/META-INF/jonas-timer.bnd | 25 - jonas/modules/libraries/jonas-version/pom.xml | 39 - .../src/main/java/org/ow2/jonas/Version.java | 115 - .../main/resources/META-INF/jonas-version.bnd | 24 - .../libraries/management/domain/pom.xml | 72 - .../domain/AuthenticationInformation.java | 116 - .../lib/management/domain/DeployAction.java | 163 - .../lib/management/domain/DomainMonitor.java | 1443 ------- .../lib/management/domain/J2EEDomain.java | 719 ---- .../domain/cluster/BaseCluster.java | 580 --- .../domain/cluster/BaseClusterMBean.java | 91 - .../domain/cluster/ClusterFactory.java | 111 - .../domain/cluster/ClusterMember.java | 157 - .../domain/cluster/ClusterMemberMBean.java | 52 - .../domain/cluster/cmi/CmiCluster.java | 237 -- .../domain/cluster/cmi/CmiClusterFactory.java | 220 - .../domain/cluster/cmi/CmiClusterMBean.java | 42 - .../domain/cluster/cmi/CmiClusterMember.java | 47 - .../cluster/cmi/CmiClusterMemberMBean.java | 36 - .../domain/cluster/ha/EjbHaCluster.java | 133 - .../cluster/ha/EjbHaClusterFactory.java | 186 - .../domain/cluster/ha/EjbHaClusterMBean.java | 39 - .../domain/cluster/ha/EjbHaClusterMember.java | 46 - .../cluster/ha/EjbHaClusterMemberMBean.java | 37 - .../domain/cluster/jk/JkCluster.java | 273 -- .../domain/cluster/jk/JkClusterFactory.java | 177 - .../domain/cluster/jk/JkClusterMBean.java | 44 - .../domain/cluster/jk/JkClusterMember.java | 119 - .../cluster/jk/JkClusterMemberMBean.java | 54 - .../cluster/logical/LogicalCluster.java | 150 - .../logical/LogicalClusterFactory.java | 139 - .../cluster/logical/LogicalClusterMember.java | 47 - .../logical/LogicalClusterMemberMBean.java | 37 - .../domain/cluster/tomcat/TomcatCluster.java | 185 - .../cluster/tomcat/TomcatClusterFactory.java | 232 - .../cluster/tomcat/TomcatClusterMBean.java | 42 - .../cluster/tomcat/TomcatClusterMember.java | 513 --- .../tomcat/TomcatClusterMemberMBean.java | 80 - .../domain/proxy/ConnectorUtils.java | 217 - .../lib/management/domain/proxy/JMXProxy.java | 420 -- .../proxy/clusterd/ClusterDaemonProxy.java | 742 ---- .../clusterd/ClusterDaemonProxyMBean.java | 216 - .../domain/proxy/server/ServerProxy.java | 1864 -------- .../domain/proxy/server/ServerProxyMBean.java | 252 -- .../proxy/server/ServerProxyProperties.java | 100 - .../main/resources/META-INF/jonas-domain.bnd | 30 - .../libraries/management/extensions/pom.xml | 76 - .../extensions/base/AdminException.java | 71 - .../extensions/base/AdminHelper.java | 574 --- .../extensions/base/AdminJmxHelper.java | 1478 ------- .../extensions/base/BaseManagement.java | 455 -- .../extensions/base/BaseObjectName.java | 35 - .../extensions/base/ConnectorItem.java | 53 - .../extensions/base/JonasManagementRepr.java | 640 --- .../base/LocalManagementContext.java | 118 - .../management/extensions/base/NameItem.java | 32 - .../management/extensions/base/RealmItem.java | 109 - .../base/RealmItemByNameComparator.java | 47 - .../base/mbean/CatalinaObjectName.java | 125 - .../base/mbean/J2EEObjectNames.java | 54 - .../extensions/base/mbean/J2eeMbeanItem.java | 98 - .../extensions/base/mbean/MbeanItem.java | 137 - .../extensions/base/mbean/ObjectNameItem.java | 67 - .../extensions/base/mbean/OwnerMbeanItem.java | 69 - .../extensions/cluster/ClusterManagement.java | 224 - .../ClusterdaemonManagement.java | 521 --- .../container/ContainerManagement.java | 287 -- .../extensions/container/ejb/EjbItem.java | 137 - .../ejb/EjbItemByNameComparator.java | 53 - .../extensions/domain/DomainManagement.java | 516 --- .../manager/ManagementEntryPoint.java | 1141 ----- .../extensions/server/ServerItem.java | 240 -- .../extensions/server/ServerManagement.java | 256 -- .../extensions/server/ServerMonitoring.java | 726 ---- .../extensions/util/ConnectorUtils.java | 222 - .../extensions/util/FileManagementUtils.java | 112 - .../META-INF/jonas-management-extensions.bnd | 36 - .../libraries/management/javaee/pom.xml | 63 - .../apache/commons/modeler/ManagedBean.java | 548 --- .../management/javaee/J2EEDeployedObject.java | 112 - .../javaee/J2EEDeployedObjectMBean.java | 68 - .../management/javaee/J2EEManagedObject.java | 175 - .../javaee/J2EEManagedObjectMBean.java | 128 - .../lib/management/javaee/J2EEModule.java | 63 - .../management/javaee/J2EEModuleMBean.java | 52 - .../lib/management/javaee/J2EEResource.java | 71 - .../management/javaee/J2EEServerState.java | 96 - .../management/javaee/J2EEServiceState.java | 56 - .../lib/management/javaee/J2eeObjectName.java | 1603 ------- .../javaee/JSR77ManagementIdentifier.java | 181 - .../lib/management/javaee/ManagedObject.java | 105 - .../META-INF/jonas-management-javaee.bnd | 30 - jonas/modules/libraries/management/pom.xml | 48 - .../libraries/management/reconfig/pom.xml | 57 - .../reconfig/IConfigurationActuator.java | 43 - .../reconfig/IConfigurationData.java | 32 - .../reconfig/PropertiesConfigurationData.java | 92 - .../reconfig/ReconfigException.java | 42 - .../management/reconfig/ReconfigManager.java | 372 -- .../reconfig/ReconfigManagerMBean.java | 33 - .../reconfig/XMLConfigurationData.java | 65 - .../actuator/BaseConfigurationActuator.java | 81 - .../PropertiesConfigurationActuator.java | 220 - .../actuator/XMLConfigurationActuator.java | 108 - .../META-INF/jonas-management-reconfig.bnd | 25 - .../libraries/management/services/pom.xml | 45 - .../services/JOnASServiceModelMBean.java | 56 - .../services/ReconfigNotifications.java | 39 - .../META-INF/jonas-management-services.bnd | 24 - .../services/mbeans-descriptors.xml | 33 - jonas/modules/libraries/pom.xml | 74 - jonas/modules/libraries/security/auth/pom.xml | 48 - .../ow2/jonas/lib/security/auth/JGroup.java | 149 - .../jonas/lib/security/auth/JPrincipal.java | 93 - .../ow2/jonas/lib/security/auth/JRole.java | 46 - .../ow2/jonas/lib/security/auth/JSigned.java | 61 - .../ow2/jonas/lib/security/auth/JSubject.java | 74 - .../META-INF/jonas-security-auth.bnd | 24 - .../security/interceptors/iiop/pom.xml | 138 - .../security/iiop/Csiv2ClientInterceptor.java | 417 -- .../ow2/jonas/security/iiop/Csiv2Const.java | 61 - .../jonas/security/iiop/Csiv2Initializer.java | 120 - .../iiop/Csiv2InterceptorException.java | 49 - .../security/iiop/Csiv2IorInterceptor.java | 475 --- .../security/iiop/Csiv2ServerInterceptor.java | 342 -- .../ow2/jonas/security/iiop/ORBHelper.java | 80 - .../security/iiop/SecurityContextHelper.java | 179 - .../SecurityContextInitializer.java | 55 - .../SecurityContextInitializerException.java | 46 - .../iiop/CorbaClientSecurityInterceptor.java | 101 - .../iiop/CorbaServerSecurityInterceptor.java | 117 - .../iiop/SecurityInitializer.java | 49 - .../iiop/SecurityInterceptor.java | 71 - .../META-INF/jonas-sec-interceptors-iiop.bnd | 32 - .../iiop/src/main/resources/metadata.xml | 45 - .../security/interceptors/jrmp/pom.xml | 56 - .../jrmp/ClientSecurityInterceptor.java | 107 - .../jrmp/SecurityInitializer.java | 61 - .../jrmp/SecurityServiceContext.java | 82 - .../jrmp/ServerSecurityInterceptor.java | 103 - .../jrmp/ctxcheck/CtxCheckConfig.java | 139 - .../jrmp/ctxcheck/Initializer.java | 59 - .../jrmp/ctxcheck/ServerInterceptor.java | 208 - .../META-INF/jonas-sec-interceptors-jrmp.bnd | 24 - .../libraries/security/interceptors/pom.xml | 52 - .../libraries/security/jacc-handlers/pom.xml | 63 - .../jacc/handlers/JPolicyContextHandler.java | 166 - .../JPolicyContextHandlerCurrent.java | 81 - .../handlers/JPolicyContextHandlerData.java | 138 - .../META-INF/jonas-security-jacc-handlers.bnd | 27 - jonas/modules/libraries/security/jacc/pom.xml | 58 - .../lib/security/AbsPermissionManager.java | 183 - .../security/PermissionManagerException.java | 55 - .../ow2/jonas/lib/security/jacc/JPolicy.java | 379 -- .../security/jacc/JPolicyConfiguration.java | 768 ---- .../jacc/JPolicyConfigurationFactory.java | 203 - .../jacc/JPolicyConfigurationKeeper.java | 85 - .../lib/security/jacc/JPolicyException.java | 55 - .../lib/security/jacc/JPolicyWrapper.java | 111 - .../PolicyConfigurationFactoryWrapper.java | 119 - .../META-INF/jonas-security-jacc.bnd | 24 - .../jonas/lib/security/jacc/I18n.properties | 17 - jonas/modules/libraries/security/pom.xml | 48 - .../libraries/security/propagation/pom.xml | 40 - .../lib/security/context/Marshalling.java | 238 -- .../lib/security/context/SecurityContext.java | 447 -- .../lib/security/context/SecurityCurrent.java | 97 - .../mapping/JPolicyUserRoleMapping.java | 114 - .../META-INF/jonas-security-propagation.bnd | 27 - jonas/modules/libraries/tenant/pom.xml | 67 - .../ow2/jonas/lib/tenant/TenantIdInfo.java | 61 - .../lib/tenant/context/TenantContext.java | 137 - .../lib/tenant/context/TenantCurrent.java | 91 - .../lib/tenant/filter/HttpTenantIdFilter.java | 105 - .../jmx/JMXTenantIdInterceptor.java | 276 -- .../jndi/JNDITenantIdInterceptor.java | 189 - .../tenant/listener/TenantEventListener.java | 155 - .../loginmodule/TenantIdLoginModule.java | 222 - .../META-INF/jonas-libraries-tenant.bnd | 29 - .../tests/JMXTenantIdInterceptorTest.java | 140 - .../tests/JNDITenantIdInterceptorTest.java | 174 - .../listener/tests/TenantIdListenerTest.java | 111 - .../transaction/interceptors/iiop/pom.xml | 46 - .../ots/OTSClientTransactionInterceptor.java | 204 - .../ow2/jonas/tm/jotm/ots/OTSInterceptor.java | 303 -- .../jonas/tm/jotm/ots/OTSORBInitializer.java | 80 - .../ots/OTSServerTransactionInterceptor.java | 238 -- .../jonas-trans-interceptors-iiop.bnd | 24 - .../transaction/interceptors/pom.xml | 51 - jonas/modules/libraries/transaction/pom.xml | 44 - jonas/modules/pom.xml | 74 - jonas/modules/services/bootstrap/ant/pom.xml | 127 - .../ow2/jonas/ant/AbstractAntDeprecated.java | 53 - .../org/ow2/jonas/ant/EjbJarDeprecated.java | 235 -- .../ow2/jonas/ant/GenICTaskDeprecated.java | 129 - .../jonas/ant/JOnASBaseTaskDeprecated.java | 143 - .../ant/JOnASClusterConfigTaskDeprecated.java | 91 - .../ow2/jonas/ant/JOnASTaskDeprecated.java | 144 - .../ow2/jonas/ant/JPropertyDeprecated.java | 57 - .../ow2/jonas/ant/ServerDeployDeprecated.java | 79 - .../ow2/jonas/ant/WsGenTaskDeprecated.java | 130 - .../antmodular/bootstrap/BootstrapTask.java | 362 -- .../bootstrap/HotDeploymentTool.java | 72 - .../bootstrap/InnerClassFilenameFilter.java | 41 - .../antmodular/bootstrap/JOnASAntTool.java | 165 - .../jonas/antmodular/bootstrap/JOnASTask.java | 211 - .../jonas/antmodular/bootstrap/JProperty.java | 110 - .../bootstrap/JonasHotDeploymentTool.java | 146 - .../bootstrap/PropertyStatement.java | 99 - .../antmodular/bootstrap/ServerDeploy.java | 152 - .../bootstrap/AbstractJOnASBaseAntTask.java | 307 -- .../jonasbase/bootstrap/Archives.java | 62 - .../jonasbase/bootstrap/BaseTaskItf.java | 69 - .../bootstrap/DeployableSelector.java | 57 - .../jonasbase/bootstrap/DeploymentPlans.java | 41 - .../antmodular/jonasbase/bootstrap/JCopy.java | 105 - .../antmodular/jonasbase/bootstrap/JEcho.java | 111 - .../jonasbase/bootstrap/JMkdir.java | 100 - .../jonasbase/bootstrap/JOnASBaseTask.java | 180 - .../jonasbase/bootstrap/JReplace.java | 126 - .../antmodular/jonasbase/bootstrap/JTask.java | 242 -- .../jonasbase/bootstrap/JTouch.java | 100 - .../jonasbase/bootstrap/JonasProperties.java | 275 -- .../antmodular/jonasbase/bootstrap/Lib.java | 82 - .../jonasbase/bootstrap/PropertyTask.java | 117 - .../jonasbase/bootstrap/Replace.java | 636 --- .../jonasbase/bootstrap/Services.java | 115 - .../antmodular/jonasbase/bootstrap/Tasks.java | 88 - .../bootstrap/XMLSerializerTask.java | 121 - .../main/resources/META-INF/bootstrap-ant.bnd | 46 - .../ant/src/main/resources/antlib-master.xml | 40 - .../build-master.properties.template | 12 - .../ant/src/main/resources/build-master.xml | 127 - .../resources/org/ow2/jonas/ant/antlib.xml | 44 - .../bootstrap/core-for-addons/pom.xml | 165 - .../bootstrap/JOnASConfiguration.java | 491 --- .../JOnASDeploymentPlanDeployer.java | 210 - .../PlatformMBeanServerDelegate.java | 281 -- .../deploymentplan/JOnASDeploymentPlan.java | 139 - .../JOnASDeploymentPlanMBean.java | 42 - .../mbeanbuilder/JOnASMBeanServerBuilder.java | 97 - .../repository/JOnASRepositories.java | 396 -- .../repository/JOnASRepositoriesMBean.java | 60 - .../src/main/jonas-resources/bin/jcl.bash | 582 --- .../src/main/jonas-resources/bin/jcl.bat | 371 -- .../src/main/jonas-resources/bin/jcl.ksh | 541 --- .../src/main/jonas-resources/bin/jcl.sh | 61 - .../src/main/jonas-resources/bin/jonas | 414 -- .../src/main/jonas-resources/bin/jonas.bat | 426 -- .../src/main/jonas-resources/bin/jonasnt.bat | 138 - .../src/main/jonas-resources/bin/setenv | 138 - .../src/main/jonas-resources/bin/setenv.bat | 51 - .../src/main/jonas-resources/conf/banner.txt | 3 - .../conf/classloader-default-filtering.xml | 43 - .../main/jonas-resources/conf/env.sh.include | 96 - .../jonas-resources/conf/env.start.sh.include | 70 - .../conf/initial-repositories.xml | 47 - .../jonas-resources/conf/trace.properties | 441 -- .../conf/traceclient.properties | 45 - .../META-INF/bootstrap-core-for-addons.bnd | 35 - .../src/main/resources/metadata.xml | 132 - .../templates/jonas-admin.properties.template | 8 - .../templates/jonas-base.properties.template | 83 - jonas/modules/services/bootstrap/core/pom.xml | 165 - .../bootstrap/JOnASConfiguration.java | 430 -- .../JOnASDeploymentPlanDeployer.java | 210 - .../PlatformMBeanServerDelegate.java | 282 -- .../deploymentplan/JOnASDeploymentPlan.java | 139 - .../JOnASDeploymentPlanMBean.java | 42 - .../mbeanbuilder/JOnASMBeanServerBuilder.java | 97 - .../repository/JOnASRepositories.java | 396 -- .../repository/JOnASRepositoriesMBean.java | 60 - .../src/main/jonas-resources/bin/jcl.bash | 582 --- .../core/src/main/jonas-resources/bin/jcl.bat | 371 -- .../core/src/main/jonas-resources/bin/jcl.ksh | 541 --- .../core/src/main/jonas-resources/bin/jcl.sh | 61 - .../core/src/main/jonas-resources/bin/jonas | 414 -- .../src/main/jonas-resources/bin/jonas.bat | 426 -- .../src/main/jonas-resources/bin/jonasnt.bat | 138 - .../core/src/main/jonas-resources/bin/setenv | 138 - .../src/main/jonas-resources/bin/setenv.bat | 51 - .../src/main/jonas-resources/conf/banner.txt | 3 - .../conf/classloader-default-filtering.xml | 43 - .../main/jonas-resources/conf/env.sh.include | 96 - .../jonas-resources/conf/env.start.sh.include | 70 - .../conf/initial-repositories.xml | 47 - .../jonas-resources/conf/trace.properties | 441 -- .../conf/traceclient.properties | 45 - .../resources/META-INF/bootstrap-core.bnd | 35 - .../core/src/main/resources/metadata.xml | 136 - .../templates/jonas-admin.properties.template | 8 - .../templates/jonas-base.properties.template | 84 - jonas/modules/services/bootstrap/pom.xml | 44 - jonas/modules/services/cdi-weld/core/pom.xml | 152 - .../org/ow2/jonas/cdi/weld/IWeldService.java | 49 - .../cdi/weld/internal/DefaultWeldService.java | 116 - .../jsp/ForwardingJspApplicationContext.java | 52 - .../internal/jsp/ForwardingJspFactory.java | 60 - .../jsp/WeldJspApplicationContext.java | 62 - .../cdi/weld/internal/jsp/WeldJspFactory.java | 77 - .../tomcat/WeldContextCustomizer.java | 81 - .../tomcat/WeldLifeCycleListener.java | 263 -- .../META-INF/jonas-cdi-weld-core.bnd | 37 - ...javax.faces.application.ApplicationFactory | 1 - .../core/src/main/resources/metadata.xml | 57 - .../templates/jonas-cdi.properties.template | 6 - .../tomcat/WeldContextCustomizerTestCase.java | 94 - jonas/modules/services/cdi-weld/pom.xml | 44 - jonas/modules/services/cmi/ant/pom.xml | 59 - .../org/ow2/jonas/antmodular/cmi/Cmi.java | 146 - .../ant/src/main/resources/jonas-cmi-ant.bnd | 29 - jonas/modules/services/cmi/core/pom.xml | 154 - .../ow2/jonas/cmi/internal/BundleContent.java | 143 - .../cmi/internal/CmiServiceException.java | 54 - .../jonas/cmi/internal/CmiServiceHelper.java | 119 - .../jonas/cmi/internal/CmiServiceImpl.java | 336 -- .../CmiServicePolicyStrategyManager.java | 199 - .../cmi/internal/CmiServiceProperty.java | 81 - .../cmi/internal/LoadBalancingListener.java | 116 - .../cmi/internal/event/BeanEventListener.java | 162 - .../src/main/jonas-resources/bin/probeJgroups | 53 - .../main/jonas-resources/bin/probeJgroups.bat | 69 - .../main/jonas-resources/conf/cmi-config.xml | 49 - .../main/jonas-resources/conf/jgroups-cmi.xml | 94 - .../resources/META-INF/jonas-cmi-core.bnd | 36 - .../cmi/core/src/main/resources/metadata.xml | 50 - .../templates/jonas-cmi.properties.template | 5 - jonas/modules/services/cmi/pom.xml | 43 - .../core-for-addons/pom.xml | 144 - .../deployablemonitor/DeployableMonitor.java | 921 ---- .../DeployableMonitorException.java | 93 - .../DeployableMonitorService.java | 487 --- .../ExclusionFilenameFilter.java | 80 - .../LexicographicallyFileComparator.java | 47 - .../SortableFileDeployable.java | 87 - .../SortableFileDeployableComparator.java | 119 - .../mbean/DeployableMonitorServiceMBean.java | 40 - ...nas-deployable-monitor-core-for-addons.bnd | 27 - .../src/main/resources/metadata.xml | 68 - .../deployablemonitor/mbeans-descriptors.xml | 84 - .../jonas-depmonitor.properties.template | 37 - .../services/deployable-monitor/core/pom.xml | 144 - .../deployablemonitor/DeployableMonitor.java | 921 ---- .../DeployableMonitorException.java | 93 - .../DeployableMonitorService.java | 488 --- .../ExclusionFilenameFilter.java | 80 - .../LexicographicallyFileComparator.java | 47 - .../SortableFileDeployable.java | 87 - .../SortableFileDeployableComparator.java | 119 - .../mbean/DeployableMonitorServiceMBean.java | 40 - .../jonas-deployable-monitor-core.bnd | 27 - .../core/src/main/resources/metadata.xml | 68 - .../deployablemonitor/mbeans-descriptors.xml | 84 - .../jonas-depmonitor.properties.template | 36 - .../services/deployable-monitor/pom.xml | 46 - .../modules/services/ejb/ejb-2.1/ant/pom.xml | 58 - .../antmodular/ejb2/DescriptorHandler.java | 452 -- .../antmodular/ejb2/EJBDeploymentTool.java | 90 - .../org/ow2/jonas/antmodular/ejb2/EjbJar.java | 587 --- .../ow2/jonas/antmodular/ejb2/GenICTask.java | 330 -- .../ejb2/GenericDeploymentTool.java | 930 ---- .../antmodular/ejb2/JonasDeploymentTool.java | 915 ---- .../resources/META-INF/jonas-ejb-2.1-ant.bnd | 38 - .../ant/src/main/resources/antlib-ejbjar.xml | 8 - .../modules/services/ejb/ejb-2.1/core/pom.xml | 128 - .../jonas/ejb2/internal/EJB21Deployer.java | 103 - .../jonas/ejb2/internal/JOnASEJBService.java | 2403 ----------- .../ejb2/internal/JOnASEJBServiceMBean.java | 186 - .../ow2/jonas/ejb2/internal/JarCleanTask.java | 85 - .../ejb2/internal/PrincipalFactoryImpl.java | 55 - .../delegate/HandleDelegateCCFDelegate.java | 80 - .../delegate/JTimerHandleDelegate.java | 125 - .../ow2/jonas/ejb2/internal/mbean/EJB.java | 446 -- .../jonas/ejb2/internal/mbean/EJBModule.java | 425 -- .../jonas/ejb2/internal/mbean/EntityBean.java | 208 - .../internal/mbean/MessageDrivenBean.java | 74 - .../ejb2/internal/mbean/SessionBean.java | 142 - .../internal/mbean/StatefulSessionBean.java | 45 - .../internal/mbean/StatelessSessionBean.java | 51 - .../main/jonas-resources/bin/ClientStubGen | 50 - .../jonas-resources/bin/ClientStubGen.bat | 50 - .../core/src/main/jonas-resources/bin/GenIC | 50 - .../src/main/jonas-resources/bin/GenIC.bat | 51 - .../resources/META-INF/jonas-ejb-2.1-core.bnd | 30 - .../core/src/main/resources/metadata.xml | 146 - .../ejb2/internal/mbeans-descriptors.xml | 864 ---- .../templates/jonas-ejb2.properties.template | 30 - jonas/modules/services/ejb/ejb-2.1/pom.xml | 43 - .../services/ejb/ejb3/ant/base/pom.xml | 51 - .../jonas/antmodular/jonasbase/ejb3/Ejb3.java | 87 - .../base/src/main/resources/antlib-ejb3.xml | 5 - .../resources/build-ejb3.properties.template | 3 - .../base/src/main/resources/build-ejb3.xml | 16 - .../ejb/ejb3/ant/eclipselink-1.1/pom.xml | 37 - ...ld-ejb3-provider-eclipselink1.1.properties | 1 - .../ejb/ejb3/ant/eclipselink-2.2/pom.xml | 37 - ...ld-ejb3-provider-eclipselink2.2.properties | 1 - .../ejb/ejb3/ant/eclipselink-2.3/pom.xml | 12 - ...ld-ejb3-provider-eclipselink2.3.properties | 1 - .../ejb/ejb3/ant/hibernate-3.6/pom.xml | 37 - ...uild-ejb3-provider-hibernate3.6.properties | 1 - .../ejb/ejb3/ant/hibernate-4.1/pom.xml | 37 - ...uild-ejb3-provider-hibernate4.1.properties | 1 - .../services/ejb/ejb3/ant/openjpa/pom.xml | 37 - .../build-ejb3-provider-openjpa.properties | 1 - .../services/ejb/ejb3/ant/openjpa2/pom.xml | 37 - .../build-ejb3-provider-openjpa2.properties | 1 - jonas/modules/services/ejb/ejb3/ant/pom.xml | 47 - .../services/ejb/ejb3/easybeans/addon/pom.xml | 207 - .../addon/src/main/assembly/assembly.xml | 74 - .../main/resources/META-INF/jonas-addon.xml | 70 - .../services/ejb/ejb3/easybeans/core/pom.xml | 204 - .../jonas/ejb/easybeans/EJB3CleanTask.java | 81 - .../ejb/easybeans/EasyBeansDeployer.java | 404 -- .../jonas/ejb/easybeans/EasyBeansService.java | 1039 ----- .../ejb/easybeans/JOnASENCInterceptor.java | 72 - .../easybeans/JOnASResourceAdapterFinder.java | 85 - .../JOnASSecurityContextWrapper.java | 143 - .../ejb/easybeans/JOnASSecurityCurrent.java | 65 - .../ejb/easybeans/PrefixedNamingStrategy.java | 83 - .../jonas-resources/conf/easybeans-jonas.xml | 70 - .../jonas-ejb3-eclipselink1.1.properties | 1 - .../jonas-ejb3-eclipselink2.2.properties | 1 - .../jonas-ejb3-eclipselink2.3.properties | 1 - .../jonas-ejb3-hibernate3.6.properties | 1 - .../jonas-ejb3-hibernate4.1.properties | 1 - .../properties/jonas-ejb3-openjpa.properties | 1 - .../properties/jonas-ejb3-openjpa2.properties | 1 - .../META-INF/jonas-ejb-easybeans-core.bnd | 39 - .../resources/easybeans-cluster-jonas.xml | 43 - .../core/src/main/resources/metadata.xml | 127 - .../ejb/easybeans/mbeans-descriptors.xml | 42 - .../templates/jonas-ejb3.properties.template | 16 - .../services/ejb/ejb3/easybeans/pom.xml | 44 - jonas/modules/services/ejb/ejb3/pom.xml | 43 - jonas/modules/services/ejb/pom.xml | 48 - .../services/event-provider/api/pom.xml | 41 - .../src/main/META-INF/event-provider-api.bnd | 28 - .../ow2/jonas/event/provider/api/Event.java | 140 - .../jonas/event/provider/api/EventLevel.java | 31 - .../event/provider/api/IEventProvider.java | 43 - .../services/event-provider/core/pom.xml | 77 - .../internal/EventProviderComponent.java | 309 -- .../conf/event-provider.properties | 8 - .../META-INF/event-provider-core.bnd | 28 - .../core/src/main/resources/metadata.xml | 48 - jonas/modules/services/event-provider/pom.xml | 44 - jonas/modules/services/ipojo-handler/pom.xml | 55 - .../interceptor/ComponentInstanceState.java | 46 - .../ipojo/interceptor/IInstanceProvider.java | 81 - .../jonas/ipojo/interceptor/Interceptor.java | 41 - .../internal/handler/iPOJOInterceptor.java | 218 - .../src/main/resources/metadata.xml | 39 - .../services/jaxrs-jersey/core/pom.xml | 118 - .../internal/JerseyApplicationPublisher.java | 166 - .../jaxrs/jersey/internal/JerseyService.java | 77 - .../jaxrs/jersey/internal/PathUtils.java | 95 - .../resources/META-INF/jaxrs-jersey-core.bnd | 44 - .../javax.ws.rs.ext.MessageBodyWriter | 51 - .../core/src/main/resources/metadata.xml | 53 - .../jonas-jax-rs.properties.template | 6 - .../JerseyApplicationPublisherTestCase.java | 108 - .../jersey/internal/PathUtilsTestCase.java | 135 - jonas/modules/services/jaxrs-jersey/pom.xml | 41 - .../modules/services/jms-joram/addon/pom.xml | 123 - .../addon/src/main/assembly/assembly.xml | 93 - .../META-INF/jms-joram-addon-plan.xml | 69 - .../main/resources/META-INF/jonas-addon.xml | 55 - jonas/modules/services/jms-joram/ant/pom.xml | 123 - .../jonas/antmodular/jonasbase/jms/Jms.java | 277 -- .../jonas/antmodular/jonasbase/jms/JmsRa.java | 243 -- .../ant/src/main/resources/antlib-jms.xml | 5 - .../resources/build-jms.properties.template | 4 - .../ant/src/main/resources/build-jms.xml | 10 - jonas/modules/services/jms-joram/core/pom.xml | 133 - .../src/main/jonas-resources/bin/JmsServer | 54 - .../main/jonas-resources/bin/JmsServer.bat | 48 - .../main/jonas-resources/bin/joram_raconfig | 117 - .../jonas-resources/bin/joram_raconfig.bat | 134 - .../src/main/jonas-resources/conf/a3debug.cfg | 33 - .../main/jonas-resources/conf/a3servers.xml | 9 - .../main/jonas-resources/conf/joramAdmin.xml | 58 - .../joramAdminConfigForAddons.xml | 61 - .../joramAdminConfigExample.xml | 67 - .../deploy/joramAdminConfig.xml | 61 - .../services/jms-joram/plans/client/pom.xml | 57 - .../modules/services/jms-joram/plans/pom.xml | 19 - .../services/jms-joram/plans/server/pom.xml | 58 - jonas/modules/services/jms-joram/pom.xml | 47 - .../directory-provisionning/pom.xml | 45 - .../legacy-provisionning/pom.xml | 44 - .../provisionning/new-provisionning/pom.xml | 57 - .../services/jms-joram/provisionning/pom.xml | 19 - .../services/jndi-interceptors/core/pom.xml | 120 - .../src/main/config/jndi-interceptors.xml | 40 - .../checker/impl/ResourceCheckerManager.java | 119 - .../impl/AbsContextInterceptor.java | 136 - .../jndi/interceptors/impl/Interceptors.java | 65 - .../impl/JNDIInterceptorsComponent.java | 376 -- .../JNDIInterceptorsComponentException.java | 61 - .../audit/AuditSystemContextInterceptor.java | 226 - .../AuditSystemContextInterceptorAdapter.java | 74 - .../impl/datasource/ConnectionProxy.java | 193 - ...aSourceLeakDetectorContextInterceptor.java | 110 - .../impl/datasource/DatasourceWrapper.java | 317 -- .../NonTransactionalConnectionProxy.java | 77 - .../TransactionalConnectionProxy.java | 129 - ...ResourceCheckerConfigurationExtension.java | 92 - .../easybeans/ResourceCheckerInterceptor.java | 189 - .../META-INF/jndi-interceptors-core.bnd | 44 - .../core/src/main/resources/metadata.xml | 93 - .../mapping/jndi-interceptors-mapping.xml | 46 - .../interceptors/impl/mbeans-descriptors.xml | 78 - ...eakDetectorContextInterceptorTestCase.java | 86 - .../datasource/DatasourceWrapperTestCase.java | 266 -- ...nTransactionalConnectionProxyTestCase.java | 104 - .../TransactionalConnectionProxyTestCase.java | 101 - .../services/jndi-interceptors/pom.xml | 41 - .../modules/services/jonas-addon/core/pom.xml | 105 - .../deploy/impl/cleaner/AddonCleanTask.java | 73 - .../deploy/impl/config/AddonConfigImpl.java | 72 - .../impl/deployable/AddonDeployableImpl.java | 74 - .../impl/deployable/SortableDeployable.java | 82 - .../SortableDeployableComparator.java | 89 - .../impl/deployer/AddonDeployerImpl.java | 1044 ----- .../deploy/impl/deployer/AddonMetaData.java | 337 -- .../deploy/impl/deployer/BinDeployerImpl.java | 30 - .../impl/deployer/ConfDeployerImpl.java | 240 -- .../service/AddonDeployerComponent.java | 256 -- .../AddonDeployableAnalyserComponent.java | 101 - .../deploy/impl/util/AddonDeployerLog.java | 238 -- .../addon/deploy/impl/util/AddonLogEntry.java | 65 - .../addon/deploy/impl/util/AddonUtil.java | 668 --- .../jonas/addon/deploy/impl/util/Range.java | 129 - .../addon/deploy/impl/xml/JonasAddonDesc.java | 395 -- .../impl/xml/JonasAddonPropertiesManager.java | 125 - .../deploy/impl/xml/JonasAddonVersion.java | 33 - .../deploy/impl/xml/JonasAddonXmlLoader.java | 298 -- .../properties/ServicePropertiesImpl.java | 74 - .../resources/META-INF/jonas-addon-1.0.xsd | 302 -- .../resources/META-INF/jonas-addon-core.bnd | 39 - .../core/src/main/resources/metadata.xml | 94 - .../properties/jonas-addon.properties | 29 - jonas/modules/services/jonas-addon/pom.xml | 44 - .../modules/services/jonas-audit/core/pom.xml | 158 - .../audit/internal/JOnASAuditServiceImpl.java | 166 - .../logger/AuditComponentListener.java | 172 - .../logger/AuditLogComponentMBean.java | 194 - .../internal/logger/AuditLogService.java | 1149 ----- .../logger/AuditLogServiceAdapter.java | 174 - .../logger/AuditLogServiceException.java | 70 - .../audit/internal/logger/NodeReport.java | 348 -- .../audit/internal/logger/NodeReportType.java | 73 - .../logger/api/IAuditComponentListener.java | 46 - .../logger/api/IAuditLogListener.java | 40 - .../logger/pool/DatedFileLogPool.java | 214 - .../internal/logger/pool/FileLogPool.java | 642 --- .../logger/util/AuditLogReportHelper.java | 500 --- .../internal/logger/util/LogConfigurator.java | 481 --- .../webauditor/filters/HttpAuditFilter.java | 348 -- .../filters/HttpAuditFilterAdapter.java | 74 - .../WebInvocationAuditReportFactory.java | 236 -- .../resources/META-INF/jonas-audit-core.bnd | 28 - .../core/src/main/resources/metadata.xml | 58 - .../internal/logger/mbeans-descriptors.xml | 64 - .../webauditor/filters/mbeans-descriptors.xml | 43 - .../templates/jonas-audit.properties.template | 6 - .../filters/HttpAuditFilterTestCase.java | 167 - jonas/modules/services/jonas-audit/pom.xml | 41 - .../services/jonas-carol-registry/ant/pom.xml | 53 - .../antmodular/jonasbase/carol/Carol.java | 357 -- .../META-INF/jonas-carol-registry-ant.bnd | 29 - .../ant/src/main/resources/antlib-carol.xml | 5 - .../resources/build-carol.properties.template | 5 - .../ant/src/main/resources/build-carol.xml | 14 - .../jonas-carol-registry/core/pom.xml | 185 - .../jndi/spi/VirtualJNDIContextFactory.java | 111 - .../ow2/carol/jndi/spi/VirtualJNDILookup.java | 417 -- .../registry/carol/CarolRegistryService.java | 517 --- .../carol/delegate/JacORBPRODelegate.java | 147 - .../carol/delegate/ORBCCFDelegate.java | 106 - .../CarolRegistryConfigurationPlugin.java | 62 - .../carol/osgi/ConfigurationActivator.java | 59 - .../src/main/jonas-resources/bin/registry | 29 - .../src/main/jonas-resources/bin/registry.bat | 31 - .../jonas-resources/conf/carol.properties | 105 - .../jonas-resources/conf/jacorb.properties | 799 ---- .../META-INF/jonas-carol-registry-core.bnd | 87 - .../core/src/main/resources/metadata.xml | 80 - .../jonas-registry.properties.template | 13 - .../services/jonas-carol-registry/pom.xml | 43 - .../services/jonas-configadmin/core/pom.xml | 106 - .../jonas/configadmin/AdapterException.java | 41 - .../jonas/configadmin/ConfigurationInfo.java | 74 - .../configadmin/XmlConfigurationAdapter.java | 48 - .../XmlConfigurationAdapterRegistry.java | 42 - .../internal/AdapterRegistryEvent.java | 60 - .../internal/AdapterRegistryListener.java | 47 - .../internal/ConfigAdminDeployable.java | 83 - .../internal/ConfigAdminDeployer.java | 450 -- .../ConfigurationAssociationEvent.java | 86 - .../ConfigurationAssociationListener.java | 49 - .../internal/ConfigurationItem.java | 188 - .../configadmin/internal/Initializer.java | 53 - .../generic/AbstractConfigurationAdapter.java | 47 - .../generic/DefaultConfigurationAdapter.java | 89 - .../DefaultConfigurationAdapterRegistry.java | 54 - .../DefaultFactoryConfigurationAdapter.java | 89 - .../resources/META-INF/configadmin-1.0.xsd | 153 - .../core/src/main/resources/metadata.xml | 70 - .../internal/ConfigAdminDeployerTestCase.java | 281 -- .../internal/ConfigurationItemTestCase.java | 237 -- .../AbstractConfigurationAdapterTestCase.java | 47 - .../ConfigurationAdapterRegistryTestCase.java | 47 - .../generic/ConfigurationAdapterTestCase.java | 63 - .../FactoryConfigurationAdapterTestCase.java | 63 - .../deploy-undeploy-configurations.xml | 14 - .../resources/invalid-schema-location.xml | 12 - .../src/test/resources/no-schema-location.xml | 10 - .../src/test/resources/one-configuration.xml | 10 - .../resources/one-factory-configuration.xml | 14 - .../test/resources/unsupported-element.xml | 9 - .../services/jonas-configadmin/pom.xml | 42 - .../services/jonas-datasources/core/pom.xml | 175 - .../deployer/DatasourceDeployable.java | 68 - .../DatasourceDeployableRegistration.java | 56 - .../deployer/DatasourceDeployer.java | 471 --- .../deployer/JonasDatasourceCleanTask.java | 80 - .../deployer/JonasDatasourceDeployer.java | 132 - .../deployer/reader/DatasourceValidator.java | 87 - .../deployer/reader/DatasourceXmlReader.java | 268 -- .../deployer/reader/NamespaceFilter.java | 81 - .../DSDefinitionExtensionListener.java | 114 - .../internal/DataSourceServiceImpl.java | 492 --- .../jonas-services-datasource-core.bnd | 28 - .../core/src/main/resources/metadata.xml | 77 - .../deployer/reader/jonas-datasources-1.0.xsd | 130 - .../deployer/reader/jonas-datasources-1.1.xsd | 133 - .../deployer/DatasourceDeployableTest.java | 95 - .../deployer/FileDeployableFactoryTest.java | 139 - .../deployer/TestDatasourceDeployer.java | 173 - .../datasource/deployer/TestRarDeployer.java | 102 - .../deployer/reader/DatasourceReaderTest.java | 144 - .../reader/DatasourceValidatorTest.java | 86 - .../core/src/test/resources/datasources.xml | 72 - .../test/resources/exemple-datasource-bad.xml | 31 - .../resources/exemple-datasource-good.xml | 73 - .../src/test/resources/exemple-datasource.xml | 73 - .../services/jonas-datasources/pom.xml | 44 - .../services/jonas-db/base/ant/pom.xml | 52 - .../antmodular/jonasbase/db/base/Db.java | 225 - .../resources/build-db.properties.template | 5 - .../base/ant/src/main/resources/build-db.xml | 12 - .../services/jonas-db/base/core/pom.xml | 86 - .../ow2/jonas/db/base/AbsDBServiceImpl.java | 258 -- .../jonas/db/base/AbsDBServiceImplMBean.java | 48 - .../ow2/jonas/db/base/DbEndpointBuilder.java | 86 - .../main/java/org/ow2/jonas/db/base/User.java | 68 - .../resources/META-INF/jonas-db-base-core.bnd | 24 - .../base/core/src/main/resources/metadata.xml | 44 - .../templates/jonas-db.properties.template | 11 - jonas/modules/services/jonas-db/base/pom.xml | 45 - .../services/jonas-db/h2/addon/pom.xml | 181 - .../h2/addon/src/main/assembly/assembly.xml | 64 - .../main/resources/META-INF/jonas-addon.xml | 65 - .../modules/services/jonas-db/h2/ant/pom.xml | 52 - .../antmodular/jonasbase/db/h2/DbH2.java | 104 - .../ant/src/main/resources/antlib-db-h2.xml | 5 - .../src/main/resources/build-db-h2.properties | 1 - .../h2/ant/src/main/resources/build-db-h2.xml | 13 - .../modules/services/jonas-db/h2/core/pom.xml | 137 - .../org/ow2/jonas/db/h2/H2DBServiceImpl.java | 209 - .../ow2/jonas/db/h2/H2DBServiceImplMBean.java | 34 - .../main/properties/jonas-db-h2.properties | 5 - .../resources/META-INF/jonas-db-h2-core.bnd | 38 - .../h2/core/src/main/resources/metadata.xml | 67 - jonas/modules/services/jonas-db/h2/pom.xml | 45 - .../services/jonas-db/hsql/ant/pom.xml | 52 - .../antmodular/jonasbase/db/hsql/DbHsql.java | 104 - .../ant/src/main/resources/antlib-db-hsql.xml | 5 - .../main/resources/build-db-hsql.properties | 1 - .../ant/src/main/resources/build-db-hsql.xml | 13 - .../services/jonas-db/hsql/core/pom.xml | 89 - .../jonas/db/hsqldb/HsqlDBServiceImpl.java | 220 - .../db/hsqldb/HsqlDBServiceImplMBean.java | 34 - .../main/properties/jonas-db-hsql.properties | 1 - .../resources/META-INF/jonas-db-hsql-core.bnd | 37 - .../hsql/core/src/main/resources/metadata.xml | 65 - jonas/modules/services/jonas-db/hsql/pom.xml | 45 - jonas/modules/services/jonas-db/pom.xml | 46 - jonas/modules/services/jonas-dbm/ant/pom.xml | 52 - .../jonas/antmodular/jonasbase/dbm/Dbm.java | 102 - .../ant/src/main/resources/antlib-dbm.xml | 5 - .../resources/build-dbm.properties.template | 2 - .../ant/src/main/resources/build-dbm.xml | 11 - jonas/modules/services/jonas-dbm/core/pom.xml | 117 - .../ow2/jonas/dbm/internal/DBMConstants.java | 114 - .../internal/JOnASDataBaseManagerService.java | 778 ---- .../JOnASDataBaseManagerServiceMBean.java | 94 - .../dbm/internal/cm/ConnectionManager.java | 2126 ---------- .../jonas/dbm/internal/cm/IConnection.java | 53 - .../jonas/dbm/internal/cm/JConnection.java | 222 - .../dbm/internal/cm/JManagedConnection.java | 983 ----- .../ow2/jonas/dbm/internal/cm/JStatement.java | 988 ----- .../org/ow2/jonas/dbm/internal/cm/Pool.java | 76 - .../internal/cm/naming/DataSourceFactory.java | 127 - .../dbm/internal/mbean/JDBCDataSource.java | 527 --- .../internal/mbean/JDBCDataSourceMBean.java | 62 - .../jonas/dbm/internal/mbean/JDBCDriver.java | 59 - .../dbm/internal/mbean/JDBCResource.java | 77 - .../JDBCDriverBundleTrackerCustomizer.java | 313 -- .../internal/osgi/JOnASDataSourceFactory.java | 249 -- .../conf/FirebirdSQL.properties | 62 - .../main/jonas-resources/conf/H2.properties | 61 - .../jonas-resources/conf/HSQL1.properties | 59 - .../conf/InstantDB1.properties | 57 - .../conf/InterBase1.properties | 63 - .../jonas-resources/conf/McKoi1.properties | 61 - .../jonas-resources/conf/MySQL.properties | 58 - .../jonas-resources/conf/Oracle1.properties | 61 - .../conf/PostgreSQL1.properties | 63 - .../jonas-resources/conf/Sybase1.properties | 40 - .../main/jonas-resources/conf/db2.properties | 57 - .../main/jonas-resources/conf/spy.properties | 251 -- .../resources/META-INF/jonas-dbm-core.bnd | 32 - .../core/src/main/resources/metadata.xml | 62 - .../jonas/dbm/internal/mbeans-descriptors.xml | 391 -- .../templates/jonas-dbm.properties.template | 15 - jonas/modules/services/jonas-dbm/pom.xml | 45 - .../services/jonas-discovery/base/ant/pom.xml | 52 - .../jonasbase/discovery/base/Discovery.java | 73 - .../build-discovery.properties.template | 2 - .../src/main/resources/build-discovery.xml | 12 - .../jonas-discovery/base/core/pom.xml | 75 - .../jonas/discovery/base/BaseDiscovery.java | 171 - .../ow2/jonas/discovery/base/DiscHelper.java | 125 - .../base/DiscoveryServiceImplMBean.java | 164 - .../base/DuplicateServerNameException.java | 60 - .../base/comm/ClusterdDiscoveryEvent.java | 69 - .../jonas/discovery/base/comm/DiscEvent.java | 277 -- .../discovery/base/comm/DiscGreeting.java | 183 - .../discovery/base/comm/DiscMessage.java | 129 - .../META-INF/jonas-discovery-base-core.bnd | 24 - .../jonas-discovery.properties.template | 5 - .../services/jonas-discovery/base/pom.xml | 43 - .../jonas-discovery/jgroups/ant/pom.xml | 52 - .../discovery/jgroups/DiscoveryJGroups.java | 54 - .../resources/antlib-discovery-jgroups.xml | 5 - .../build-discovery-jgroups.properties | 1 - .../resources/build-discovery-jgroups.xml | 12 - .../jonas-discovery/jgroups/core/pom.xml | 108 - .../jonas/discovery/jgroups/DiscRunnable.java | 49 - .../jgroups/JgroupsDiscoveryServiceImpl.java | 477 --- .../JgroupsDiscoveryServiceImplMBean.java | 33 - .../jgroups/comm/CommDiscoveryInfo.java | 65 - .../jgroups/comm/DiscCommManager.java | 226 - .../discovery/jgroups/comm/api/DiscComm.java | 35 - .../jgroups/comm/api/DiscCommReceiver.java | 36 - .../comm/exception/StopDiscException.java | 58 - .../comm/handler/DiscCommGreetingHandler.java | 122 - .../comm/handler/DiscCommHandlerImpl.java | 471 --- .../jgroups/manager/DiscoveryManager.java | 95 - .../jonas/discovery/jgroups/utils/Data.java | 92 - .../jgroups/utils/DiscoveryUtils.java | 303 -- .../jgroups/utils/IDiscoveryChannel.java | 59 - .../jgroups/utils/JGroupsDiscoveryUtils.java | 572 --- .../conf/jgroups-discovery.xml | 94 - .../main/properties/jonas-jgroups.properties | 6 - .../META-INF/jonas-discovery-jgroups-core.bnd | 29 - .../core/src/main/resources/metadata.xml | 66 - .../jgroups/utils/jgroups-discovery.xml | 153 - .../services/jonas-discovery/jgroups/pom.xml | 43 - .../jonas-discovery/multicast/ant/pom.xml | 52 - .../multicast/DiscoveryMulticast.java | 514 --- .../resources/antlib-discovery-multicast.xml | 5 - .../build-discovery-multicast.properties | 7 - .../resources/build-discovery-multicast.xml | 15 - .../jonas-discovery/multicast/core/pom.xml | 69 - .../MulticastDiscoveryServiceImpl.java | 528 --- .../MulticastDiscoveryServiceImplMBean.java | 89 - .../multicast/client/DiscoveryClient.java | 236 -- .../client/DiscoveryClientListener.java | 229 - .../client/DiscoveryClientMBean.java | 61 - .../multicast/comm/DiscoveryComm.java | 339 -- .../comm/DiscoveryGreetingListener.java | 157 - .../comm/DiscoveryGreetingResponder.java | 253 -- .../multicast/enroller/DiscoveryListener.java | 156 - .../multicast/enroller/Enroller.java | 155 - .../multicast/enroller/EnrollerMBean.java | 79 - .../multicast/manager/DiscoveryManager.java | 371 -- .../manager/DiscoveryManagerMBean.java | 100 - .../multicast/utils/DiscoveryHelper.java | 114 - .../properties/jonas-multicast.properties | 18 - .../jonas-discovery-multicast-core.bnd | 26 - .../core/src/main/resources/metadata.xml | 73 - .../jonas-discovery/multicast/pom.xml | 43 - .../modules/services/jonas-discovery/pom.xml | 61 - .../modules/services/jonas-ear/addon/pom.xml | 187 - .../addon/src/main/assembly/assembly.xml | 65 - .../main/resources/META-INF/jonas-addon.xml | 69 - jonas/modules/services/jonas-ear/core/pom.xml | 152 - .../ear/internal/AppClientModuleInfo.java | 57 - .../org/ow2/jonas/ear/internal/EARModule.java | 117 - .../ow2/jonas/ear/internal/EarCleanTask.java | 82 - .../ow2/jonas/ear/internal/EarDeployer.java | 1953 --------- .../jonas/ear/internal/JOnASEARService.java | 532 --- .../ear/internal/JOnASEARServiceMBean.java | 57 - .../ear/internal/mbean/AppClientModule.java | 62 - .../internal/mbean/EARModuleIdentifier.java | 69 - .../ear/internal/mbean/EARModuleMBean.java | 349 -- .../org/ow2/jonas/ear/internal/mbean/Ear.java | 259 -- .../resources/META-INF/jonas-ear-core.bnd | 30 - .../core/src/main/resources/metadata.xml | 114 - .../jonas/ear/internal/mbeans-descriptors.xml | 267 -- .../templates/jonas-ear.properties.template | 17 - jonas/modules/services/jonas-ear/pom.xml | 43 - .../modules/services/jonas-ejb-ha/ant/pom.xml | 51 - .../ow2/jonas/antmodular/jonasbase/ha/Ha.java | 117 - .../services/jonas-ejb-ha/core/pom.xml | 113 - .../ow2/jonas/ha/internal/HaServiceImpl.java | 216 - .../main/jonas-resources/conf/jgroups-ha.xml | 94 - .../resources/META-INF/jonas-ejb-ha-core.bnd | 31 - .../core/src/main/resources/metadata.xml | 52 - .../templates/jonas-ha.properties.template | 21 - jonas/modules/services/jonas-ejb-ha/pom.xml | 43 - .../jonas-endpoint-collector/core/pom.xml | 48 - .../jonas/endpoint/collector/Endpoint.java | 84 - .../jonas/endpoint/collector/IEndpoint.java | 86 - .../endpoint/collector/IEndpointBuilder.java | 45 - .../collector/internal/EndpointCollector.java | 274 -- .../jonas/endpoint/collector/util/Util.java | 80 - .../META-INF/jonas-endpoint-collector.bnd | 29 - .../core/src/main/resources/metadata.xml | 55 - .../services/jonas-endpoint-collector/pom.xml | 43 - .../jonas-extension-loader/core/pom.xml | 72 - .../org/ow2/jonas/extension/loader/Bnd.java | 127 - .../jonas/extension/loader/Bundlizable.java | 107 - .../loader/ExtensionLoaderComponent.java | 347 -- .../META-INF/jonas-extension-loader-core.bnd | 30 - .../core/src/main/resources/metadata.xml | 53 - .../services/jonas-extension-loader/pom.xml | 41 - jonas/modules/services/jonas-jmx/core/pom.xml | 116 - .../jonas/jmx/internal/BaseJMXService.java | 522 --- .../jonas/jmx/internal/JOnASJMXService.java | 551 --- .../interceptor/InvocationContextImpl.java | 129 - .../interceptor/InvocationHandlerImpl.java | 127 - .../MBeanServerDelegateInterceptor.java | 74 - .../src/main/jonas-resources/conf/domain.xml | 57 - .../src/main/jonas-resources/conf/jmx.access | 35 - .../main/jonas-resources/conf/jmx.passwords | 37 - .../jonas-resources/conf/jmx.rolebased.access | 47 - .../resources/META-INF/jonas-jmx-core.bnd | 38 - .../core/src/main/resources/metadata.xml | 73 - .../templates/jonas-jmx.properties.template | 42 - jonas/modules/services/jonas-jmx/pom.xml | 42 - .../modules/services/jonas-jndi/core/pom.xml | 110 - .../java/org/ow2/jonas/jndi/JndiService.java | 40 - .../ow2/jonas/jndi/internal/JndiAdapter.java | 219 - .../jndi/internal/JndiAdapterRegistry.java | 87 - .../jndi/internal/JndiEntriesException.java | 46 - .../jndi/internal/JndiEntriesService.java | 252 -- .../jonas/jndi/internal/JndiServiceImpl.java | 85 - .../org/ow2/jonas/jndi/internal/Policy.java | 32 - .../configadmin-jndi-example.xml | 43 - .../META-INF/configadmin-jndi-1.0.xsd | 189 - .../resources/META-INF/jonas-jndi-core.bnd | 33 - .../core/src/main/resources/metadata.xml | 75 - .../templates/jonas-jndi.properties.template | 9 - .../org/ow2/jonas/jndi/test/JndiTest.java | 386 -- .../resources/ca-jndi-empty-value-test.xml | 38 - .../resources/ca-jndi-null-value-test.xml | 38 - .../test/resources/ca-jndi-sample-example.xml | 43 - .../test/resources/ca-jndi-unicity-test.xml | 43 - .../test/resources/ca-jndi-wrong-content.xml | 39 - .../test/resources/ca-jndi-wrong-policy.xml | 39 - .../resources/ca-jndi-wrong-tag-order.xml | 37 - jonas/modules/services/jonas-jndi/pom.xml | 42 - jonas/modules/services/jonas-mail/ant/pom.xml | 52 - .../jonasbase/mail/DeployableTask.java | 273 -- .../jonas/antmodular/jonasbase/mail/Mail.java | 204 - .../ant/src/main/resources/antlib-mail.xml | 5 - .../resources/build-mail.properties.template | 6 - .../ant/src/main/resources/build-mail.xml | 13 - .../modules/services/jonas-mail/core/pom.xml | 140 - .../jonas/mail/internal/JOnASMailService.java | 650 --- .../internal/factory/AbstractJavaMail.java | 249 -- .../internal/factory/JavaMailMimePartDS.java | 196 - .../factory/JavaMailMimePartDSFactory.java | 228 - .../internal/factory/JavaMailSession.java | 112 - .../factory/JavaMailSessionFactory.java | 142 - .../internal/factory/lib/JAuthenticator.java | 68 - .../mbean/JavaMailMimePartDSResource.java | 72 - .../factory/mbean/JavaMailResource.java | 144 - .../factory/mbean/JavaMailResourceMBean.java | 55 - .../mbean/JavaMailSessionResource.java | 55 - .../configadmin/MailMimePartDSFactory.java | 120 - .../osgi/configadmin/MailSessionFactory.java | 120 - .../conf/MailMimePartDS1.properties | 38 - .../conf/MailSession1.properties | 32 - .../deploy-example/mail-factories.xml | 71 - .../resources/META-INF/jonas-mail-core.bnd | 30 - .../core/src/main/resources/metadata.xml | 60 - .../mail/internal/mbeans-descriptors.xml | 241 -- .../templates/jonas-mail.properties.template | 13 - jonas/modules/services/jonas-mail/pom.xml | 44 - .../modules/services/jonas-report/api/pom.xml | 43 - .../org/ow2/jonas/report/api/IReport.java | 55 - .../jonas/report/api/IReportExtension.java | 49 - .../resources/META-INF/jonas-report-api.bnd | 29 - .../src/main/resources/xsd/jonas-report.xsd | 158 - .../services/jonas-report/core/pom.xml | 88 - .../jonas/service/report/internal/Report.java | 328 -- .../service/report/internal/ReportMBean.java | 38 - .../jonas/service/report/util/Utility.java | 65 - .../resources/META-INF/jonas-report-core.bnd | 30 - .../core/src/main/resources/metadata.xml | 62 - .../report/internal/mbeans-descriptors.xml | 50 - .../jonas-report/extensions/bundles/pom.xml | 80 - .../internal/BundlesReportExtension.java | 230 - .../jonas-report-extension-bundles.bnd | 28 - .../bundles/src/main/resources/metadata.xml | 45 - .../src/main/resources/xsd/bundles-report.xsd | 74 - .../extensions/deployables/pom.xml | 91 - .../internal/DeployablesReportExtension.java | 201 - .../jonas-report-extension-deployables.bnd | 28 - .../src/main/resources/metadata.xml | 47 - .../main/resources/xsd/deployable-report.xsd | 104 - .../jonas-report/extensions/deployers/pom.xml | 91 - .../internal/DeployersReportExtension.java | 104 - .../jonas-report-extension-deployers.bnd | 28 - .../deployers/src/main/resources/metadata.xml | 50 - .../main/resources/xsd/deployers-report.xsd | 57 - .../jonas-report/extensions/endpoints/pom.xml | 81 - .../internal/EndpointsReportExtension.java | 123 - .../jonas-report-extension-endpoints.bnd | 28 - .../endpoints/src/main/resources/metadata.xml | 50 - .../main/resources/xsd/endpoints-report.xsd | 75 - .../extensions/ipojo-factories/pom.xml | 80 - .../IpojoFactoriesReportExtension.java | 123 - ...jonas-report-extension-ipojo-factories.bnd | 28 - .../src/main/resources/metadata.xml | 49 - .../resources/xsd/ipojo-factories-report.xsd | 74 - .../extensions/ipojo-handlers/pom.xml | 80 - .../IpojoHandlersReportExtension.java | 135 - .../jonas-report-extension-ipojo-handlers.bnd | 28 - .../src/main/resources/metadata.xml | 50 - .../resources/xsd/ipojo-handlers-report.xsd | 67 - .../extensions/ipojo-instances/pom.xml | 101 - .../IpojoInstancesReportExtension.java | 292 -- ...jonas-report-extension-ipojo-instances.bnd | 28 - .../src/main/resources/metadata.xml | 50 - .../resources/xsd/ipojo-instances-report.xsd | 153 - .../jonas-report/extensions/jvm/pom.xml | 91 - .../jvm/internal/JvmReportExtension.java | 92 - .../META-INF/jonas-report-extension-jvm.bnd | 28 - .../jvm/src/main/resources/metadata.xml | 42 - .../jvm/src/main/resources/xsd/jvm-report.xsd | 85 - .../services/jonas-report/extensions/pom.xml | 52 - .../extensions/server-info/pom.xml | 101 - .../internal/ServerInfoReportExtension.java | 169 - .../jonas-report-extension-server-info.bnd | 28 - .../src/main/resources/metadata.xml | 56 - .../src/main/resources/xsd/server-report.xsd | 98 - jonas/modules/services/jonas-report/pom.xml | 45 - .../jonas-resource-monitor/core/pom.xml | 89 - .../internal/JOnASResourceMonitorService.java | 282 -- .../JOnASResourceMonitorServiceMBean.java | 62 - .../META-INF/jonas-resource-monitor-core.bnd | 27 - .../core/src/main/resources/metadata.xml | 63 - .../jonas-resourcemonitor.properties.template | 9 - .../services/jonas-resource-monitor/pom.xml | 42 - .../services/jonas-resource/addon/pom.xml | 178 - .../addon/src/main/assembly/assembly.xml | 110 - .../main/resources/META-INF/jonas-addon.xml | 61 - .../services/jonas-resource/ant/pom.xml | 58 - .../antmodular/jonasbase/resource/JdbcRa.java | 416 -- .../jonasbase/resource/JdbcXml.java | 431 -- .../resources/META-INF/jonas-resource-ant.bnd | 37 - .../main/resources/antlib-jonas-resource.xml | 7 - .../build-jonas-resource.properties.template | 79 - .../main/resources/build-jonas-resource.xml | 145 - .../services/jonas-resource/core/pom.xml | 222 - .../resource/internal/IJDBCConnection.java | 58 - .../internal/JOnASResourceService.java | 1119 ----- .../internal/JOnASResourceServiceMBean.java | 51 - .../jonas/resource/internal/RARDeployer.java | 103 - .../org/ow2/jonas/resource/internal/Rar.java | 1621 ------- .../internal/ResourceBootstrapContext.java | 87 - .../internal/ResourceServiceConstants.java | 85 - .../resource/internal/ResourceUtility.java | 815 ---- .../jonas/resource/internal/SQLManager.java | 153 - .../internal/cm/ConnectionManagerImpl.java | 1832 -------- .../cm/ConnectionManagerPoolParams.java | 384 -- .../internal/cm/ConnectionResourceHint.java | 73 - .../internal/cm/ManagedConnectionInfo.java | 218 - .../cm/jta/JResourceManagerEvent.java | 145 - .../internal/cm/jta/JSynchronization.java | 148 - .../internal/cm/jta/LocalXAResource.java | 268 -- .../cm/sql/PreparedStatementWrapper.java | 2530 ----------- .../sql/SQLConnectionInvocationHandler.java | 248 -- .../AbstractPreparedStatementCacheImpl.java | 128 - .../internal/cm/sql/cache/CacheException.java | 38 - .../cm/sql/cache/PreparedStatementCache.java | 100 - .../PreparedStatementCacheStatistics.java | 145 - .../cache/PreparedStatementListCacheImpl.java | 306 -- .../cache/PreparedStatementMapCacheImpl.java | 378 -- .../cache/PreparedStatementMapCacheKey.java | 241 -- .../internal/mbean/ArchiveConfigMBean.java | 499 --- .../internal/mbean/JCAActivationSpec.java | 94 - .../internal/mbean/JCAAdminObject.java | 94 - .../internal/mbean/JCAConnectionFactory.java | 529 --- .../mbean/JCAConnectionFactoryMBean.java | 61 - .../mbean/JCAManagedConnectionFactory.java | 46 - .../resource/internal/mbean/JCAResource.java | 113 - .../ow2/jonas/resource/internal/mbean/README | 87 - .../internal/mbean/RarConfigMBean.java | 177 - .../internal/mbean/ResourceAdapter.java | 201 - .../internal/mbean/ResourceAdapterModule.java | 124 - .../naming/ResourceObjectFactory.java | 117 - .../jonas/resource/internal/pool/Pool.java | 449 -- .../resource/internal/pool/PoolItemStats.java | 252 -- .../internal/pool/PoolMatchFactory.java | 95 - .../resource/internal/pool/PoolProvider.java | 40 - .../resource/internal/pool/PoolResource.java | 52 - .../internal/pool/lib/HArrayPool.java | 1382 ------ .../internal/pool/lib/HArrayPoolMonitor.java | 174 - .../src/main/jonas-resources/bin/RAConfig | 50 - .../src/main/jonas-resources/bin/RAConfig.bat | 54 - .../main/jonas-resources/deploy/jdbc-ds.xml | 111 - .../META-INF/jonas-resource-core.bnd | 41 - .../core/src/main/resources/metadata.xml | 70 - .../resource/internal/mbeans-descriptors.xml | 857 ---- .../jonas-j2ca-resource.properties.template | 6 - jonas/modules/services/jonas-resource/pom.xml | 45 - .../services/jonas-security/ant/pom.xml | 52 - .../security/EmptyEntityResolver.java | 63 - .../security/JResourceLoginModule.java | 120 - .../antmodular/jonasbase/security/Jaas.java | 506 --- .../jonasbase/security/JaasEntry.java | 85 - .../jonasbase/security/LoginModule.java | 56 - .../antmodular/jonasbase/security/User.java | 134 - .../src/main/resources/antlib-security.xml | 5 - .../ant/src/main/resources/build-security.xml | 17 - .../services/jonas-security/core/pom.xml | 180 - .../auth/callback/CertificateCallback.java | 61 - .../auth/callback/DialogCallbackHandler.java | 331 -- .../auth/callback/LoginCallbackHandler.java | 168 - .../auth/callback/NoInputCallbackHandler.java | 122 - .../security/auth/spi/CRLLoginModule.java | 293 -- .../security/auth/spi/ClientLoginModule.java | 201 - .../auth/spi/JDirectResourceLoginModule.java | 307 -- .../auth/spi/JResourceLoginModule.java | 309 -- .../security/auth/spi/RemoteLoginModule.java | 400 -- .../spi/RoleBasedAuthorizationModule.java | 267 -- .../security/auth/spi/SignLoginModule.java | 286 -- .../internal/AbsSecurityContextHelper.java | 166 - .../jonas/security/internal/JResources.java | 238 -- .../internal/JonasSecurityServiceImpl.java | 732 ---- .../JonasSecurityServiceImplMBean.java | 147 - .../security/internal/PolicyProvider.java | 148 - .../internal/SecurityServiceException.java | 57 - .../realm/factory/AbstractJResource.java | 276 -- .../internal/realm/factory/JResourceDS.java | 720 ---- .../realm/factory/JResourceDSMBean.java | 42 - .../internal/realm/factory/JResourceLDAP.java | 1198 ------ .../realm/factory/JResourceLDAPMBean.java | 42 - .../realm/factory/JResourceMBean.java | 56 - .../realm/factory/JResourceMemory.java | 531 --- .../realm/factory/JResourceMemoryMBean.java | 42 - .../realm/factory/JResourceRemote.java | 62 - .../realm/factory/JResourceRemoteImpl.java | 195 - .../internal/realm/lib/HashHelper.java | 221 - .../security/internal/realm/lib/XML.java | 109 - .../internal/realm/principal/Group.java | 198 - .../internal/realm/principal/GroupMBean.java | 72 - .../internal/realm/principal/LDAPUser.java | 57 - .../internal/realm/principal/Role.java | 118 - .../internal/realm/principal/RoleMBean.java | 53 - .../internal/realm/principal/User.java | 287 -- .../internal/realm/principal/UserMBean.java | 90 - .../ow2/jonas/security/lib/JErrorHandler.java | 67 - .../jonas/security/lib/JResourceManager.java | 187 - .../ow2/jonas/security/rules/JDSRuleSet.java | 65 - .../jonas/security/rules/JLDAPRuleSet.java | 65 - .../jonas/security/rules/JMemoryRuleSet.java | 88 - .../security/ws/SecurityContextHelper.java | 98 - .../SecurityContextInitializer.java | 55 - .../SecurityContextInitializerException.java | 46 - .../src/main/jonas-resources/conf/jaas.config | 123 - .../src/main/jonas-resources/conf/java.policy | 10 - .../main/jonas-resources/conf/jonas-realm.xml | 126 - .../META-INF/jonas-security-core.bnd | 47 - .../core/src/main/resources/metadata.xml | 87 - .../realm/factory/mbeans-descriptors.xml | 259 -- .../security/realm/dtd/jonas-realm_1_0.dtd | 196 - .../jonas-security.properties.template | 28 - jonas/modules/services/jonas-security/pom.xml | 43 - .../services/jonas-tm-jotm/addon/pom.xml | 143 - .../addon/src/main/assembly/assembly.xml | 64 - .../main/resources/META-INF/jonas-addon.xml | 68 - .../services/jonas-tm-jotm/core/pom.xml | 191 - .../jonas/tm/jotm/JOTMTransactionManager.java | 257 -- .../jotm/JOTMTransactionResourceManager.java | 52 - .../jonas/tm/jotm/JOTMTransactionService.java | 667 --- .../jonas/tm/jotm/UserTransactionFactory.java | 59 - .../ServerTransactionCCFDelegate.java | 59 - .../jotm/delegate/TransactionCCFDelegate.java | 97 - .../delegate/UserTransactionCCFDelegate.java | 85 - .../ow2/jonas/tm/jotm/mbean/JTAResource.java | 255 -- .../jonas/tm/jotm/mbean/JTAResourceMBean.java | 43 - .../main/jonas-resources/conf/jotm.properties | 15 - .../resources/META-INF/jonas-tm-jotm-core.bnd | 35 - .../core/src/main/resources/metadata.xml | 74 - .../ow2/jonas/tm/jotm/mbeans-descriptors.xml | 167 - .../templates/jonas-jtm.properties.template | 16 - jonas/modules/services/jonas-tm-jotm/pom.xml | 43 - .../services/jonas-workcleaner/core/pom.xml | 124 - .../internal/JOnASWorkCleanerService.java | 274 -- .../JOnASWorkCleanerServiceMBean.java | 45 - .../internal/WorkCleanerTimer.java | 95 - .../META-INF/jonas-workcleaner-core.bnd | 27 - .../core/src/main/resources/metadata.xml | 55 - .../jonas-workcleaner.properties.template | 9 - .../services/jonas-workcleaner/pom.xml | 42 - .../services/jonas-workmanager/core/pom.xml | 96 - .../internal/JOnASWorkManagerService.java | 235 -- .../workmanager/internal/JWorkManager.java | 602 --- .../internal/JWorkManagerMBean.java | 57 - .../META-INF/jonas-workmanager-core.bnd | 29 - .../core/src/main/resources/metadata.xml | 61 - .../jonas-workmanager.properties.template | 16 - .../services/jonas-workmanager/pom.xml | 42 - jonas/modules/services/joram-admin/pom.xml | 94 - .../org/ow2/jonas/joram/admin/JoramQueue.java | 123 - .../admin/JoramQueueConnectionFactory.java | 104 - .../org/ow2/jonas/joram/admin/JoramTopic.java | 124 - .../admin/JoramTopicConnectionFactory.java | 102 - .../org/ow2/jonas/joram/admin/JoramUser.java | 120 - .../modules/services/jsf/jsf-base/ant/pom.xml | 52 - .../jonas/antmodular/jonasbase/jsf/Jsf.java | 63 - .../build-jsf-base.properties.template | 2 - .../ant/src/main/resources/build-jsf-base.xml | 12 - .../services/jsf/jsf-base/core/pom.xml | 62 - .../templates/jonas-jsf.properties.template | 6 - jonas/modules/services/jsf/jsf-base/pom.xml | 42 - .../services/jsf/jsf-mojarra-1.2/ant/pom.xml | 52 - .../jonasbase/jsf/mojarra12/JsfMojarra12.java | 49 - .../main/resources/antlib-jsf-mojarra-1.2.xml | 5 - .../build-jsf-mojarra-1.2.properties | 1 - .../main/resources/build-jsf-mojarra-1.2.xml | 10 - .../services/jsf/jsf-mojarra-1.2/core/pom.xml | 83 - .../jsf/mojarra12/Mojarra12ServiceImpl.java | 132 - .../properties/jonas-jsf-mojarra12.properties | 1 - .../META-INF/jonas-jsf-mojarra-1.2-core.bnd | 39 - .../core/src/main/resources/metadata.xml | 57 - .../services/jsf/jsf-mojarra-1.2/pom.xml | 44 - .../services/jsf/jsf-mojarra-2.0/ant/pom.xml | 52 - .../jonasbase/jsf/mojarra20/JsfMojarra20.java | 49 - .../main/resources/antlib-jsf-mojarra-2.0.xml | 5 - .../build-jsf-mojarra-2.0.properties | 1 - .../main/resources/build-jsf-mojarra-2.0.xml | 10 - .../services/jsf/jsf-mojarra-2.0/core/pom.xml | 85 - .../resource/ZipDirectoryEntryScanner.java | 131 - .../jsf/mojarra20/Mojarra20ServiceImpl.java | 132 - .../vendor/Tomcat7InjectionProvider.java | 144 - .../properties/jonas-jsf-mojarra20.properties | 1 - .../META-INF/jonas-jsf-mojarra-2.0-core.bnd | 51 - .../core/src/main/resources/metadata.xml | 57 - .../services/jsf/jsf-mojarra-2.0/pom.xml | 44 - .../services/jsf/jsf-myfaces-2.0/ant/pom.xml | 52 - .../jonasbase/jsf/myfaces20/JsfMyFaces20.java | 49 - .../main/resources/antlib-jsf-myfaces-2.0.xml | 5 - .../build-jsf-myfaces-2.0.properties | 1 - .../main/resources/build-jsf-myfaces-2.0.xml | 10 - .../services/jsf/jsf-myfaces-2.0/core/pom.xml | 92 - .../jsf/myfaces20/MyFaces20ServiceImpl.java | 142 - .../properties/jonas-jsf-myfaces20.properties | 1 - .../META-INF/jonas-jsf-myfaces-2.0-core.bnd | 52 - .../resources/javax.faces/jsf-uncompressed.js | 2441 ----------- .../META-INF/resources/javax.faces/jsf.js | 1 - .../core/src/main/resources/metadata.xml | 57 - .../services/jsf/jsf-myfaces-2.0/pom.xml | 44 - jonas/modules/services/jsf/pom.xml | 50 - .../services/log-provider/core/pom.xml | 54 - .../jonas/log/provider/api/ILogProvider.java | 32 - .../log/provider/internal/BundleCurrent.java | 59 - .../log/provider/internal/LogProvider.java | 82 - .../internal/LogProviderComponent.java | 104 - .../resources/META-INF/log-provider-core.bnd | 28 - .../core/src/main/resources/metadata.xml | 49 - jonas/modules/services/log-provider/pom.xml | 43 - .../services/multitenant/addon/pom.xml | 151 - .../addon/src/main/assembly/assembly.xml | 64 - .../main/resources/META-INF/jonas-addon.xml | 61 - .../modules/services/multitenant/core/pom.xml | 143 - .../internal/MultitenantServiceImpl.java | 427 -- .../MultitenantVirtualJNDIBinding.java | 405 -- .../MultitenantVirtualJNDIBindingMBean.java | 54 - .../META-INF/jonas-multitenant-core.bnd | 29 - .../core/src/main/resources/metadata.xml | 65 - .../internal/mbeans-descriptors.xml | 42 - .../jonas-multitenant.properties.template | 6 - jonas/modules/services/multitenant/pom.xml | 46 - .../modules/services/packaging/addon/pom.xml | 238 -- .../addon/src/main/assembly/assembly.xml | 74 - .../main/resources/META-INF/jonas-addon.xml | 61 - jonas/modules/services/packaging/core/pom.xml | 166 - .../packaging/internal/PackagingManager.java | 816 ---- .../src/main/jonas-resources/bin/gen-addon | 164 - .../META-INF/jonas-packaging-core.bnd | 32 - .../core/src/main/resources/metadata.xml | 57 - .../packaging/internal/mbeans-descriptors.xml | 42 - .../jonas-packaging.properties.template | 6 - jonas/modules/services/packaging/pom.xml | 46 - jonas/modules/services/pom.xml | 102 - .../modules/services/smartclient/ant/pom.xml | 54 - .../jonasbase/smartclient/SmartClient.java | 95 - .../META-INF/jonas-smartclient-ant.bnd | 31 - .../src/main/resources/antlib-smartclient.xml | 5 - .../build-smartclient.properties.template | 2 - .../src/main/resources/build-smartclient.xml | 7 - .../modules/services/smartclient/core/pom.xml | 100 - .../internal/SmartclientEndpointBuilder.java | 89 - .../internal/SmartclientServiceImpl.java | 166 - .../internal/SmartclientServiceImplMBean.java | 40 - .../SmartclientServiceRegistryComponent.java | 67 - .../META-INF/jonas-smartclient-core.bnd | 28 - .../core/src/main/resources/metadata.xml | 73 - .../jonas-smartclient.properties.template | 8 - jonas/modules/services/smartclient/pom.xml | 43 - jonas/modules/services/ssh/core/pom.xml | 77 - .../java/org/ow2/jonas/ssh/SshService.java | 7 - .../jonas/ssh/internal/SshServiceImpl.java | 165 - .../ssh/internal/SshServiceImplMBean.java | 35 - .../ssh/core/src/main/resources/metadata.xml | 51 - .../main/templates/ssh.properties.template | 11 - jonas/modules/services/ssh/pom.xml | 44 - .../hibernate-validation/core/pom.xml | 134 - .../JOnASHibernateValidationServiceImpl.java | 124 - .../jonas-validation-hibernate-core.bnd | 25 - .../core/src/main/resources/metadata.xml | 64 - .../jonas-validation.properties.template | 6 - .../validation/hibernate-validation/pom.xml | 43 - jonas/modules/services/validation/pom.xml | 47 - .../modules/services/versioning/core/pom.xml | 82 - .../contexts/VirtualJNDIBinding.java | 410 -- .../contexts/VirtualJNDIBindingMBean.java | 59 - .../internal/VersioningServiceImpl.java | 446 -- .../internal/VersioningServiceImplMBean.java | 44 - .../META-INF/jonas-versioning-core.bnd | 27 - .../core/src/main/resources/metadata.xml | 61 - .../jonas-versioning.properties.template | 15 - jonas/modules/services/versioning/pom.xml | 42 - .../services/web-container/base/ant/pom.xml | 52 - .../ow2/jonas/antmodular/web/base/Ajp.java | 59 - .../jonas/antmodular/web/base/Cluster.java | 36 - .../jonas/antmodular/web/base/Connectors.java | 47 - .../jonas/antmodular/web/base/Director.java | 58 - .../ow2/jonas/antmodular/web/base/Http.java | 58 - .../ow2/jonas/antmodular/web/base/Https.java | 95 - .../web/base/SessionReplication.java | 162 - .../web/base/SessionReplicationAlgorithm.java | 32 - .../antmodular/web/base/WebContainer.java | 190 - .../build-webcontainer.properties.template | 7 - .../src/main/resources/build-webcontainer.xml | 12 - .../services/web-container/base/core/pom.xml | 187 - .../web/base/BaseWebContainerService.java | 3054 -------------- .../base/BaseWebContainerServiceMBean.java | 67 - .../org/ow2/jonas/web/base/WARDeployer.java | 145 - .../main/java/org/ow2/jonas/web/base/War.java | 321 -- .../org/ow2/jonas/web/base/WarCleanTask.java | 81 - .../java/org/ow2/jonas/web/base/WarMBean.java | 91 - .../web/base/endpoint/WebEndpointBuilder.java | 99 - .../jonas/web/base/lib/PermissionManager.java | 460 -- .../httpservice/DefaultHttpContextImpl.java | 115 - .../osgi/httpservice/HttpServiceFactory.java | 117 - .../osgi/httpservice/JOnASHttpService.java | 40 - .../httpservice/OSGIResourcesServlet.java | 148 - .../ow2/jonas/web/base/proxy/ContextInfo.java | 75 - .../jonas/web/base/proxy/CopyingStream.java | 106 - .../jonas/web/base/proxy/HTTPResponse.java | 228 - .../web/base/proxy/HttpOnDemandProxy.java | 443 -- .../proxy/HttpOnDemandProxyException.java | 56 - .../web/base/proxy/HttpSocketHandler.java | 500 --- .../jonas-web-container-base-core.bnd | 30 - .../base/core/src/main/resources/metadata.xml | 45 - .../org/ow2/jonas/web/base/proxy/wait.gif | Bin 3711 -> 0 bytes .../templates/jonas-web.properties.template | 27 - .../services/web-container/base/pom.xml | 46 - .../web-container/jetty/6.1.x/ant/pom.xml | 52 - .../jonasbase/web/jetty6/Jetty6.java | 77 - .../web/jetty6/Jetty6Connectors.java | 69 - .../ant/src/main/resources/antlib-jetty6.xml | 5 - .../main/resources/build-jetty6.properties | 1 - .../ant/src/main/resources/build-jetty6.xml | 21 - .../web-container/jetty/6.1.x/core/pom.xml | 193 - .../AnnotationProcessorServletHandler.java | 288 -- .../ow2/jonas/web/jetty6/Jetty6Service.java | 792 ---- .../web/jetty6/security/JettyPrincipal.java | 92 - .../ow2/jonas/web/jetty6/security/Realm.java | 317 -- .../main/jonas-resources/conf/jetty6-web.xml | 427 -- .../src/main/jonas-resources/conf/jetty6.xml | 142 - .../properties/jonas-web-jetty6.properties | 1 - .../jonas-web-container-jetty-6.1-core.bnd | 90 - .../core/src/main/resources/metadata.xml | 115 - .../web-container/jetty/6.1.x/pom.xml | 44 - .../web-container/jetty/8.0.x/ant/pom.xml | 52 - .../jonasbase/web/jetty8/Jetty8.java | 78 - .../web/jetty8/Jetty8Connectors.java | 76 - .../ant/src/main/resources/antlib-jetty8.xml | 5 - .../main/resources/build-jetty8.properties | 1 - .../ant/src/main/resources/build-jetty8.xml | 21 - .../web-container/jetty/8.0.x/core/pom.xml | 369 -- .../java/org/apache/AnnotationProcessor.java | 38 - .../web/jetty8/JOnASInjectionDecorator.java | 382 -- .../ow2/jonas/web/jetty8/JOnASTldScanner.java | 188 - .../jonas/web/jetty8/JOnASWebAppContext.java | 89 - .../web/jetty8/JSPLifecycleListener.java | 129 - .../ow2/jonas/web/jetty8/Jetty8Service.java | 832 ---- .../web/jetty8/OSGiTagLibConfiguration.java | 84 - .../web/jetty8/ServletHolderDecorator.java | 108 - .../jetty8/security/JOnASLoginService.java | 295 -- .../web/jetty8/security/JettyPrincipal.java | 92 - .../main/jonas-resources/conf/jetty8-web.xml | 537 --- .../src/main/jonas-resources/conf/jetty8.xml | 117 - .../core/src/main/patches/Compiler.patch | 48 - .../src/main/patches/TagLibraryInfoImpl.patch | 35 - .../properties/jonas-web-jetty8.properties | 1 - .../jonas-web-container-jetty-8.0-core.bnd | 51 - .../core/src/main/resources/metadata.xml | 123 - .../web-container/jetty/8.0.x/pom.xml | 44 - .../services/web-container/jetty/base/pom.xml | 52 - .../antmodular/jonasbase/web/jetty/Jetty.java | 58 - .../jonasbase/web/jetty/JettyConnectors.java | 130 - .../jonasbase/web/jetty/JettyHttps.java | 90 - .../services/web-container/jetty/pom.xml | 57 - jonas/modules/services/web-container/pom.xml | 46 - .../6.0.x/addons/addon-with-bundles/pom.xml | 80 - .../src/main/assembly/assembly.xml | 67 - .../addon-with-deployment-plans/pom.xml | 97 - .../src/main/assembly/assembly.xml | 61 - .../web-container/tomcat/6.0.x/addons/pom.xml | 98 - .../main/resources/META-INF/jonas-addon.xml | 74 - .../web-container/tomcat/6.0.x/ant/pom.xml | 52 - .../jonasbase/web/tomcat6/Tomcat6.java | 120 - .../web/tomcat6/Tomcat6Connectors.java | 87 - .../ant/src/main/resources/antlib-tomcat6.xml | 5 - .../main/resources/build-tomcat6.properties | 1 - .../ant/src/main/resources/build-tomcat6.xml | 34 - .../web-container/tomcat/6.0.x/core/pom.xml | 213 - .../apache/catalina/connector/Response.java | 1778 -------- .../apache/catalina/startup/TldConfig.java | 832 ---- .../util/DefaultAnnotationProcessor.java | 347 -- .../jasper/compiler/TagLibraryInfoImpl.java | 782 ---- .../web/tomcat6/CheckOpenResourcesValve.java | 114 - .../jonas/web/tomcat6/FilterValveWrapper.java | 95 - .../jonas/web/tomcat6/JCatalinaRuleSet.java | 247 -- .../jonas/web/tomcat6/JOnASContextConfig.java | 155 - .../web/tomcat6/JOnASStandardContext.java | 647 --- .../web/tomcat6/ResetAuthenticationValve.java | 96 - .../ow2/jonas/web/tomcat6/Tomcat6Service.java | 1666 -------- .../web/tomcat6/custom/ContextCustomizer.java | 44 - .../DirContextURLStreamHandlerService.java | 129 - .../NoSystemAccessWebappClassLoader.java | 110 - .../osgi/OSGiInstanceTldCacheListener.java | 135 - .../web/tomcat6/osgi/OSGiTldListener.java | 159 - .../osgi/httpservice/HttpServiceFactory.java | 56 - .../osgi/httpservice/HttpServiceImpl.java | 510 --- .../tomcat6/osgi/httpservice/OSGIContext.java | 109 - .../osgi/httpservice/OSGIServletContext.java | 118 - .../tomcat6/osgi/httpservice/OSGIWrapper.java | 122 - .../ow2/jonas/web/tomcat6/security/Realm.java | 862 ---- .../web/tomcat6/tx/TransactionValve.java | 131 - .../tomcat6/versioning/AbsVirtualContext.java | 228 - .../web/tomcat6/versioning/ContextFinder.java | 326 -- .../versioning/FilteredOutputStream.java | 230 - .../tomcat6/versioning/VersionedPathBean.java | 114 - .../tomcat6/versioning/VersioningValve.java | 89 - .../tomcat6/versioning/VirtualContext.java | 333 -- .../versioning/VirtualContextMBean.java | 42 - .../tomcat6/versioning/WebModuleContext.java | 65 - .../tomcat6/ws/EndpointInstanceListener.java | 140 - .../ow2/jonas/web/tomcat6/ws/URLUtils.java | 151 - .../ws/WSContextLifecycleListener.java | 227 - .../jonas/web/tomcat6/ws/WSDeployment.java | 208 - .../ws/WebServiceEndpointStandardWrapper.java | 89 - .../tomcat6/ws/WebservicesWebDeployer.java | 692 --- .../SecureWebDeploymentDescBuilder.java | 130 - .../strategy/EjbJarContextNamingStrategy.java | 76 - .../strategy/FixedContextNamingStrategy.java | 68 - .../ServiceContextNamingStrategy.java | 55 - .../jonas-resources/conf/tomcat6-context.xml | 44 - .../jonas-resources/conf/tomcat6-server.xml | 147 - .../main/jonas-resources/conf/tomcat6-web.xml | 1203 ------ .../core/src/main/patches/Response.patch | 160 - .../properties/jonas-web-tomcat6.properties | 1 - .../jonas-web-container-tomcat-6.0-core.bnd | 109 - .../core/src/main/resources/metadata.xml | 191 - .../jonas/web/tomcat6/mbeans-descriptors.xml | 487 --- .../web-container/tomcat/6.0.x/pom.xml | 45 - .../addon-with-deployment-plans/pom.xml | 123 - .../src/main/assembly/assembly.xml | 78 - .../web-container/tomcat/7.0.x/addons/pom.xml | 123 - .../main/resources/META-INF/jonas-addon.xml | 77 - .../web-container/tomcat/7.0.x/ant/pom.xml | 90 - .../jonasbase/web/tomcat7/Tomcat7.java | 122 - .../web/tomcat7/Tomcat7Connectors.java | 424 -- .../ant/src/main/resources/antlib-tomcat7.xml | 5 - .../main/resources/build-tomcat7.properties | 1 - .../ant/src/main/resources/build-tomcat7.xml | 69 - .../web-container/tomcat/7.0.x/core/pom.xml | 387 -- .../java/org/apache/AnnotationProcessor.java | 38 - .../web/tomcat7/CheckOpenResourcesValve.java | 111 - .../jonas/web/tomcat7/FilterValveWrapper.java | 96 - .../jonas/web/tomcat7/JCatalinaRuleSet.java | 247 -- .../jonas/web/tomcat7/JOnASContextConfig.java | 203 - .../web/tomcat7/JOnASNamingResources.java | 53 - .../web/tomcat7/JOnASStandardContext.java | 695 --- .../web/tomcat7/ResetAuthenticationValve.java | 102 - .../ow2/jonas/web/tomcat7/Tomcat7Service.java | 2015 --------- .../web/tomcat7/custom/ContextCustomizer.java | 44 - .../DirContextURLStreamHandlerService.java | 129 - .../NoSystemAccessWebappClassLoader.java | 110 - .../osgi/OSGiInstanceTldCacheListener.java | 116 - .../web/tomcat7/osgi/OSGiTldListener.java | 161 - .../osgi/configadmin/Tomcat7AjpConnector.java | 194 - .../osgi/configadmin/Tomcat7Connector.java | 33 - .../configadmin/Tomcat7HttpConnector.java | 195 - .../configadmin/Tomcat7HttpsConnector.java | 224 - .../osgi/httpservice/HttpServiceFactory.java | 56 - .../osgi/httpservice/HttpServiceImpl.java | 512 --- .../tomcat7/osgi/httpservice/OSGIContext.java | 83 - .../osgi/httpservice/OSGIServletContext.java | 118 - .../tomcat7/osgi/httpservice/OSGIWrapper.java | 115 - .../ow2/jonas/web/tomcat7/security/Realm.java | 897 ---- .../web/tomcat7/tx/TransactionValve.java | 130 - .../tomcat7/versioning/AbsVirtualContext.java | 228 - .../web/tomcat7/versioning/ContextFinder.java | 330 -- .../web/tomcat7/versioning/EmptyServlet.java | 73 - .../versioning/FilteredOutputStream.java | 230 - .../tomcat7/versioning/VersionedPathBean.java | 114 - .../tomcat7/versioning/VersioningValve.java | 118 - .../tomcat7/versioning/VirtualContext.java | 338 -- .../versioning/VirtualContextMBean.java | 42 - .../tomcat7/versioning/WebModuleContext.java | 65 - .../tomcat7/ws/EndpointInstanceListener.java | 140 - .../ow2/jonas/web/tomcat7/ws/URLUtils.java | 151 - .../ws/WSContextLifecycleListener.java | 227 - .../jonas/web/tomcat7/ws/WSDeployment.java | 208 - .../ws/WebServiceEndpointStandardWrapper.java | 89 - .../tomcat7/ws/WebservicesWebDeployer.java | 692 --- .../SecureWebDeploymentDescBuilder.java | 130 - .../strategy/EjbJarContextNamingStrategy.java | 76 - .../strategy/FixedContextNamingStrategy.java | 68 - .../ServiceContextNamingStrategy.java | 55 - .../jonas-resources/conf/tomcat7-context.xml | 44 - .../jonas-resources/conf/tomcat7-server.xml | 141 - .../main/jonas-resources/conf/tomcat7-web.xml | 1233 ------ .../deploy-example/tomcat7-ajp-connector.xml | 26 - .../tomcat7-https-connector.xml | 13 - .../deploy/tomcat7-http-connector.xml | 13 - .../main/patches/DefaultInstanceManager.patch | 16 - .../core/src/main/patches/Response.patch | 132 - .../src/main/patches/TagLibraryInfoImpl.patch | 40 - .../properties/jonas-web-tomcat7.properties | 1 - .../jonas-web-container-tomcat-7.0-core.bnd | 114 - .../core/src/main/resources/metadata.xml | 198 - .../catalina/startup/catalina.properties | 120 - .../jonas/web/tomcat7/mbeans-descriptors.xml | 529 --- .../web-container/tomcat/7.0.x/pom.xml | 45 - .../web-container/tomcat/base/pom.xml | 53 - .../jonasbase/web/tomcat/Tomcat.java | 247 -- .../jonasbase/web/tomcat/TomcatAjp.java | 153 - .../web/tomcat/TomcatConnectors.java | 185 - .../jonasbase/web/tomcat/TomcatHttp.java | 199 - .../jonasbase/web/tomcat/TomcatHttps.java | 193 - .../web/tomcat/TomcatSessionManager.java | 57 - .../services/web-container/tomcat/pom.xml | 67 - .../services/webservices/axis/core/pom.xml | 105 - .../org/ow2/jonas/ws/axis/AxisService.java | 161 - .../jonas/ws/axis/JAxisServiceFactory.java | 576 --- .../org/ow2/jonas/ws/axis/JAxisServlet.java | 150 - .../java/org/ow2/jonas/ws/axis/JCall.java | 82 - .../ow2/jonas/ws/axis/JOnASEJBProvider.java | 189 - .../java/org/ow2/jonas/ws/axis/JService.java | 194 - .../org/ow2/jonas/ws/axis/JServiceProxy.java | 126 - .../JServletEngineConfigurationFactory.java | 248 -- .../org/ow2/jonas/ws/axis/JonasHandler.java | 325 -- .../org/ow2/jonas/ws/axis/NoopProvider.java | 68 - .../ws/axis/QSUpdateServiceWSDLHandler.java | 506 --- .../java/org/ow2/jonas/ws/axis/URLMapper.java | 82 - .../jonas/ws/axis/WSDDJOnASEJBProvider.java | 66 - .../ow2/jonas/ws/axis/WSDDNoopProvider.java | 66 - .../META-INF/jonas-webservices-axis-core.bnd | 51 - ...org.apache.axis.EngineConfigurationFactory | 26 - .../axis/core/src/main/resources/metadata.xml | 70 - .../org/ow2/jonas/ws/axis/I18n.properties | 34 - .../org/ow2/jonas/ws/axis/client-config.wsdd | 13 - .../org/ow2/jonas/ws/axis/server-config.wsdd | 82 - .../modules/services/webservices/axis/pom.xml | 42 - .../services/webservices/axis2/core/pom.xml | 186 - .../org/ow2/jonas/ws/axis2/Axis2Service.java | 285 -- .../ws/axis2/JOnASJaxWsImplementorInfo.java | 163 - .../jonas/ws/axis2/JaxWsImplementorInfo.java | 323 -- .../easybeans/Axis2EJBWebserviceEndpoint.java | 109 - .../easybeans/Axis2EjbMessageReceiver.java | 227 - .../easybeans/Axis2EndpointController.java | 73 - .../Axis2EndpointLifecycleManager.java | 63 - .../Axis2EndpointLifecycleManagerFactory.java | 58 - .../easybeans/Axis2ServiceDispatcher.java | 64 - .../easybeans/EasybeansAxis2Invoker.java | 86 - .../ext/Axis2ConfigurationExtension.java | 73 - .../ext/JAXWS20ResourceInjector.java | 74 - .../easybeans/ext/LifeCycleCallback.java | 403 -- .../WebServiceContextInjectionHandler.java | 68 - .../http/Axis2RequestResponseTransport.java | 103 - .../ws/axis2/http/Axis2TransportInfo.java | 45 - .../ws/axis2/http/AxisServiceGenerator.java | 700 --- .../jonas/ws/axis2/http/WSDLQueryHandler.java | 373 -- .../jonas/ws/axis2/jaxws/Axis2WSEndpoint.java | 1077 ----- .../ws/axis2/jaxws/WebservicesContainer.java | 63 - .../impl/AttachmentDescriptionImpl.java | 76 - .../impl/DescriptionFactoryImpl.java | 531 --- .../description/impl/DescriptionUtils.java | 620 --- .../impl/EndpointDescriptionImpl.java | 2153 ---------- .../EndpointInterfaceDescriptionImpl.java | 1103 ----- .../impl/FaultDescriptionImpl.java | 250 -- .../impl/OperationDescriptionImpl.java | 2281 ---------- .../impl/ParameterDescriptionImpl.java | 427 -- .../jaxws/description/impl/PortInfoImpl.java | 73 - .../impl/ServiceDescriptionImpl.java | 2662 ------------ .../description/impl/URIResolverImpl.java | 310 -- .../ws/axis2/util/Axis2Java2WSDLBuilder.java | 220 - .../ws/axis2/util/AxisService2WSDL11.java | 1734 -------- .../ow2/jonas/ws/axis2/util/JAXWSTools.java | 131 - .../ow2/jonas/ws/axis2/util/JAXWSUtils.java | 208 - .../ws/axis2/util/SimpleURIResolver.java | 152 - .../ws/axis2/util/SimpleWSDLLocator.java | 64 - .../ow2/jonas/ws/axis2/util/WSDLUtils.java | 114 - .../src/main/resources/META-INF/axis2.xml | 460 -- .../META-INF/jonas-webservices-axis2-core.bnd | 79 - .../core/src/main/resources/metadata.xml | 81 - .../ow2/jonas/ws/axis2/ejb3/JAXWSBean.java | 77 - .../ow2/jonas/ws/axis2/ejb3/JAXWSGreeter.java | 33 - .../ow2/jonas/ws/axis2/pojo/HelloService.java | 46 - .../ow2/jonas/ws/axis2/pojo/word/Word.java | 73 - .../ws/axis2/test/Axis2HandlerChainTest.java | 59 - .../ws/axis2/test/Axis2WSEndpointTest.java | 305 -- .../test/ServletInputStreamForTest.java | 55 - .../test/ServletOutputStreamForTest.java | 49 - .../test/ServletRequestAdapterForTest.java | 363 -- .../test/ServletResponseAdapterForTest.java | 285 -- .../test/StatelessSessionFactoryForTest.java | 48 - .../src/test/resources/WEB-INF/handlers.xml | 20 - .../resources/WEB-INF/test_service_pojo.xml | 17 - .../test/resources/WEB-INF/wsdl/TestPojo.wsdl | 89 - .../services/webservices/axis2/pom.xml | 43 - .../services/webservices/cxf/core/pom.xml | 117 - .../java/org/ow2/jonas/ws/cxf/BusCreator.java | 231 - .../java/org/ow2/jonas/ws/cxf/CXFService.java | 563 --- .../ws/cxf/JOnASJaxWsImplementorInfo.java | 164 - .../ws/cxf/JOnASJaxWsServerFactoryBean.java | 207 - .../cxf/client/CxfWebServiceRefBuilder.java | 44 - .../CxfWebServiceRefObjectFactory.java | 63 - .../factory/HandlerResolverDelegate.java | 61 - .../easybeans/CXFEJBWebserviceEndpoint.java | 107 - .../ws/cxf/easybeans/CXFResourceInjector.java | 59 - .../easybeans/EasyBeansInvokerFactory.java | 129 - .../EasyBeansJaxWsServerFactoryBean.java | 116 - .../EasyBeansJaxWsServiceFactoryBean.java | 66 - .../cxf/easybeans/EasyBeansMethodInvoker.java | 76 - .../ext/CXFConfigurationExtension.java | 98 - .../ext/JAXWS20ResourceInjector.java | 74 - .../cxf/easybeans/ext/LifeCycleCallback.java | 491 --- .../WebServiceContextInjectionHandler.java | 68 - .../jonas/ws/cxf/http/JOnASDestination.java | 148 - .../cxf/http/JOnASHTTPTransportFactory.java | 66 - .../ow2/jonas/ws/cxf/jaxws/CXFWSEndpoint.java | 196 - .../ws/cxf/jaxws/WebservicesContainer.java | 195 - .../org/ow2/jonas/ws/cxf/util/WSDLUtils.java | 95 - .../ws/cxf/wsdl/ContainerWsdlInterceptor.java | 58 - .../ow2/jonas/ws/cxf/wsdl/WsdlUpdater.java | 103 - .../META-INF/jonas-webservices-cxf-core.bnd | 30 - .../cxf/core/src/main/resources/metadata.xml | 114 - .../modules/services/webservices/cxf/pom.xml | 42 - .../services/webservices/jaxrpc/ant/pom.xml | 27 - .../jonas/antmodular/jaxrpc/WsGenTask.java | 372 -- .../ant/src/main/resources/antlib-wsgen.xml | 5 - .../services/webservices/jaxrpc/core/pom.xml | 132 - .../base/ClientJServiceFactoryFinder.java | 112 - .../jonas/ws/jaxrpc/base/JAXRPCService.java | 1284 ------ .../ws/jaxrpc/base/JAXRPCServiceMBean.java | 68 - .../ws/jaxrpc/factory/JServiceFactory.java | 57 - .../jaxrpc/mbean/AbstractWebServiceMBean.java | 133 - .../ow2/jonas/ws/jaxrpc/mbean/Handler.java | 158 - .../jonas/ws/jaxrpc/mbean/PortComponent.java | 191 - .../ow2/jonas/ws/jaxrpc/mbean/Service.java | 171 - .../jaxrpc/mbean/WebServicesObjectName.java | 300 -- .../core/src/main/jonas-resources/bin/WsGen | 50 - .../src/main/jonas-resources/bin/WsGen.bat | 53 - .../conf/jonas-client.properties | 28 - .../jonas-webservices-jaxrpc-core.bnd | 29 - .../ow2/jonas/ws/jaxrpc/base/I18n.properties | 22 - .../ws/jaxrpc/mbean/mbeans-descriptors.xml | 213 - .../jonas-jax-rpc.properties.template | 20 - .../services/webservices/jaxrpc/pom.xml | 43 - .../services/webservices/jaxws/core/pom.xml | 142 - .../ow2/jonas/ws/jaxws/base/JAXWSService.java | 154 - .../ws/jaxws/base/JAXWSServiceMBean.java | 34 - .../jaxws/base/JAXWSWebservicesContainer.java | 152 - .../ws/jaxws/base/JAXWSWebservicesModule.java | 132 - .../base/audit/AbstractJaxwsAuditHandler.java | 73 - .../base/audit/JaxwsClientAuditHandler.java | 76 - .../base/audit/JaxwsEndpointAuditHandler.java | 147 - .../base/audit/mbean/AuditHandlerAdapter.java | 74 - .../client/JAXWSWebServiceRefBuilder.java | 52 - .../JAXWSWebServiceRefObjectFactory.java | 114 - .../easybeans/EasyBeansContextNamingInfo.java | 114 - .../EasyBeansSecurityConstraint.java | 111 - .../WebServiceRefExtensionListener.java | 227 - .../handler/HandlerResourceProcessor.java | 139 - .../jaxws/handler/JOnASHandlerResolver.java | 146 - .../jaxws/handler/PostConstructProcessor.java | 81 - .../AnnotationHandlerChainBuilder.java | 202 - .../jaxws/handler/builder/BindingUtils.java | 81 - .../DescriptorHandlerChainBuilder.java | 66 - .../jaxws/handler/builder/HandlerBuilder.java | 180 - .../handler/builder/HandlerChainBuilder.java | 181 - .../ws/jaxws/http/servlet/JAXWSServlet.java | 119 - .../http/servlet/ServletRequestAdapter.java | 99 - .../http/servlet/ServletResponseAdapter.java | 67 - .../jonas/ws/jaxws/util/JAXWSClassUtils.java | 102 - .../META-INF/jonas-webservices-jaxws-core.bnd | 36 - .../base/audit/mbean/mbeans-descriptors.xml | 45 - .../jonas-jax-ws.properties.template | 13 - .../ow2/jonas/ws/axis2/pojo/HelloService.java | 42 - .../ow2/jonas/ws/axis2/pojo/word/Word.java | 65 - .../test/handlers/GreeterLogicalHandler.java | 65 - .../test/handlers/GreeterSOAPHandler.java | 99 - .../JaxwsClientAuditHandlerTestCase.java | 124 - .../JaxwsEndpointAuditHandlerTestCase.java | 74 - .../jaxws/test/JOnASHandlerResolverTest.java | 116 - .../src/test/resources/WEB-INF/handlers.xml | 20 - .../services/webservices/jaxws/pom.xml | 42 - jonas/modules/services/webservices/pom.xml | 49 - .../services/webservices/publish/ant/pom.xml | 52 - .../jonas/antmodular/jonasbase/wsdl/File.java | 106 - .../jonas/antmodular/jonasbase/wsdl/Uddi.java | 191 - .../jonasbase/wsdl/WsdlPublish.java | 193 - .../ant/src/main/resources/antlib-wsdl.xml | 5 - .../resources/build-wsdl.properties.template | 3 - .../ant/src/main/resources/build-wsdl.xml | 16 - .../services/webservices/publish/core/pom.xml | 103 - .../internal/file/FileWSDLPublisher.java | 188 - .../internal/file/JDefinitionWriter.java | 262 -- .../manager/DefaultWSDLPublisherManager.java | 175 - .../manager/WSDLPublisherFactory.java | 213 - .../registry/RegistryWSDLPublisher.java | 447 -- .../jonas-resources/conf/file1.properties | 12 - .../main/jonas-resources/conf/uddi.properties | 17 - .../jonas-webservices-publish-core.bnd | 26 - .../core/src/main/resources/metadata.xml | 69 - .../publish/internal/manager/I18n.properties | 15 - .../internal/manager/mbeans-descriptors.xml | 45 - .../templates/jonas-wsdl.properties.template | 14 - .../services/webservices/publish/pom.xml | 44 - jonas/modules/services/wrapper/core/pom.xml | 77 - .../main/jonas-resources/conf/wrapper.conf | 134 - .../jonas-resources/conf/wrapper_extra.conf | 8 - .../jonas-resources/windows_service/build.xml | 102 - jonas/modules/services/wrapper/pom.xml | 42 - jonas/modules/tools/commands/pom.xml | 59 - .../ow2/jonas/commands/admin/CLIArgument.java | 59 - .../jonas/commands/admin/CLIConstants.java | 114 - .../ow2/jonas/commands/admin/ClientAdmin.java | 1646 -------- .../ow2/jonas/commands/admin/UtilAdmin.java | 402 -- .../commands/admin/util/ExceptionUtils.java | 79 - .../admin/util/JMXConnectionHelper.java | 182 - .../jonas/commands/admin/util/PrintUtils.java | 153 - .../ow2/jonas/commands/check/CheckEnv.java | 301 -- .../commands/wrapper/GenerateWrapperConf.java | 209 - jonas/modules/tools/eclipse-compiler/pom.xml | 78 - .../eclipse/compiler/CompilationContext.java | 198 - .../jonas/eclipse/compiler/CompilerError.java | 102 - .../compiler/JOnASCompilationUnit.java | 135 - .../jonas/eclipse/compiler/JOnASCompiler.java | 107 - .../compiler/JOnASCompilerRequestor.java | 137 - .../compiler/JOnASNameEnvironment.java | 210 - .../org/ow2/jonas/eclipse/compiler/Util.java | 108 - .../resources/META-INF/eclipse-compiler.bnd | 34 - .../test/UpperCase/UpperCasePackage.java | 36 - .../input/test/inheritance/Inheritance.java | 43 - .../test/input/test/multiple/Multiple.java | 43 - .../src/test/input/test/simple/Simple.java | 36 - .../compiler/EclipseCompilerTestCase.java | 288 -- .../test/java/test/inheritance/Interface.java | 34 - .../java/test/inheritance/SuperClass.java | 37 - jonas/modules/tools/jonas-ant-tasks/pom.xml | 88 - .../java/org/objectweb/jonas/ant/EjbJar.java | 37 - .../org/objectweb/jonas/ant/GenICTask.java | 37 - .../objectweb/jonas/ant/JOnASBaseTask.java | 37 - .../jonas/ant/JOnASClusterConfigTask.java | 37 - .../org/objectweb/jonas/ant/JOnASTask.java | 37 - .../org/objectweb/jonas/ant/JProperty.java | 37 - .../org/objectweb/jonas/ant/ServerDeploy.java | 37 - .../org/objectweb/jonas/ant/WsGenTask.java | 37 - .../java/org/ow2/jonas/ant/BootstrapTask.java | 348 -- .../org/ow2/jonas/ant/DescriptorHandler.java | 452 -- .../org/ow2/jonas/ant/EJBDeploymentTool.java | 90 - .../main/java/org/ow2/jonas/ant/EjbJar.java | 587 --- .../java/org/ow2/jonas/ant/GenICTask.java | 329 -- .../ow2/jonas/ant/GenericDeploymentTool.java | 929 ---- .../org/ow2/jonas/ant/HotDeploymentTool.java | 72 - .../jonas/ant/InnerClassFilenameFilter.java | 41 - .../java/org/ow2/jonas/ant/JOnASAntTool.java | 165 - .../java/org/ow2/jonas/ant/JOnASBaseTask.java | 409 -- .../ow2/jonas/ant/JOnASClusterConfigTask.java | 408 -- .../java/org/ow2/jonas/ant/JOnASTask.java | 210 - .../java/org/ow2/jonas/ant/JProperty.java | 110 - .../ow2/jonas/ant/JonasDeploymentTool.java | 914 ---- .../ow2/jonas/ant/JonasHotDeploymentTool.java | 146 - .../org/ow2/jonas/ant/PropertyStatement.java | 99 - .../java/org/ow2/jonas/ant/ServerDeploy.java | 150 - .../java/org/ow2/jonas/ant/WsGenTask.java | 371 -- .../ow2/jonas/ant/cluster/CarolCluster.java | 153 - .../ow2/jonas/ant/cluster/ClusterDaemon.java | 484 --- .../ow2/jonas/ant/cluster/ClusterTasks.java | 273 -- .../org/ow2/jonas/ant/cluster/CmiCluster.java | 102 - .../org/ow2/jonas/ant/cluster/Common.java | 144 - .../org/ow2/jonas/ant/cluster/DbCluster.java | 88 - .../org/ow2/jonas/ant/cluster/DbmCluster.java | 87 - .../jonas/ant/cluster/DeployableCluster.java | 203 - .../jonas/ant/cluster/DeploymentCluster.java | 172 - .../org/ow2/jonas/ant/cluster/Director.java | 240 -- .../jonas/ant/cluster/DiscoveryCluster.java | 327 -- .../org/ow2/jonas/ant/cluster/EjbLevel.java | 153 - .../org/ow2/jonas/ant/cluster/HaCluster.java | 108 - .../ow2/jonas/ant/cluster/JdbcRaCluster.java | 225 - .../ow2/jonas/ant/cluster/JdbcXmlCluster.java | 347 -- .../org/ow2/jonas/ant/cluster/JmsCluster.java | 125 - .../org/ow2/jonas/ant/cluster/LibCluster.java | 110 - .../ow2/jonas/ant/cluster/MailCluster.java | 130 - .../java/org/ow2/jonas/ant/cluster/ModJk.java | 494 --- .../org/ow2/jonas/ant/cluster/Script.java | 414 -- .../jonas/ant/cluster/ServicesCluster.java | 104 - .../ant/cluster/WebContainerCluster.java | 396 -- .../org/ow2/jonas/ant/cluster/WebLevel.java | 112 - .../jonas/ant/cluster/WsdlPublishCluster.java | 96 - .../org/ow2/jonas/ant/jonasbase/Archives.java | 62 - .../ow2/jonas/ant/jonasbase/BaseTaskItf.java | 69 - .../org/ow2/jonas/ant/jonasbase/Carol.java | 353 -- .../java/org/ow2/jonas/ant/jonasbase/Cmi.java | 131 - .../java/org/ow2/jonas/ant/jonasbase/Db.java | 95 - .../java/org/ow2/jonas/ant/jonasbase/Dbm.java | 93 - .../ant/jonasbase/DeployableSelector.java | 57 - .../jonas/ant/jonasbase/DeployableTask.java | 270 -- .../jonas/ant/jonasbase/DeploymentPlans.java | 41 - .../ow2/jonas/ant/jonasbase/Discovery.java | 525 --- .../java/org/ow2/jonas/ant/jonasbase/Ha.java | 103 - .../org/ow2/jonas/ant/jonasbase/JCopy.java | 105 - .../org/ow2/jonas/ant/jonasbase/JEcho.java | 111 - .../org/ow2/jonas/ant/jonasbase/JMkdir.java | 100 - .../org/ow2/jonas/ant/jonasbase/JReplace.java | 106 - .../org/ow2/jonas/ant/jonasbase/JTask.java | 224 - .../org/ow2/jonas/ant/jonasbase/JTouch.java | 100 - .../org/ow2/jonas/ant/jonasbase/JdbcRa.java | 398 -- .../org/ow2/jonas/ant/jonasbase/JdbcXml.java | 424 -- .../java/org/ow2/jonas/ant/jonasbase/Jms.java | 197 - .../org/ow2/jonas/ant/jonasbase/JmsRa.java | 240 -- .../jonas/ant/jonasbase/JonasProperties.java | 279 -- .../java/org/ow2/jonas/ant/jonasbase/Lib.java | 82 - .../org/ow2/jonas/ant/jonasbase/Mail.java | 197 - .../ow2/jonas/ant/jonasbase/PropertyTask.java | 117 - .../org/ow2/jonas/ant/jonasbase/Replace.java | 636 --- .../org/ow2/jonas/ant/jonasbase/Services.java | 109 - .../org/ow2/jonas/ant/jonasbase/Tasks.java | 88 - .../ow2/jonas/ant/jonasbase/WebContainer.java | 219 - .../ant/jonasbase/XMLSerializerTask.java | 121 - .../jonasbase/jaas/JResourceLoginModule.java | 125 - .../ow2/jonas/ant/jonasbase/jaas/Jaas.java | 100 - .../jonas/ant/jonasbase/jaas/JaasEntry.java | 87 - .../jonas/ant/jonasbase/jaas/LoginModule.java | 58 - .../org/ow2/jonas/ant/jonasbase/web/Ajp.java | 59 - .../ow2/jonas/ant/jonasbase/web/Cluster.java | 131 - .../ow2/jonas/ant/jonasbase/web/Director.java | 60 - .../org/ow2/jonas/ant/jonasbase/web/Http.java | 58 - .../ow2/jonas/ant/jonasbase/web/Https.java | 149 - .../ow2/jonas/ant/jonasbase/web/Jetty.java | 156 - .../ow2/jonas/ant/jonasbase/web/Tomcat.java | 294 -- .../ow2/jonas/ant/jonasbase/wsdl/File.java | 108 - .../ow2/jonas/ant/jonasbase/wsdl/Uddi.java | 192 - .../jonas/ant/jonasbase/wsdl/WsdlPublish.java | 187 - .../src/main/jonas-resources/bin/newjb | 92 - .../src/main/jonas-resources/bin/newjb.bat | 54 - .../src/main/jonas-resources/bin/newjc | 55 - .../src/main/jonas-resources/bin/newjc.bat | 106 - .../resources/META-INF/jonas-ant-tasks.bnd | 41 - .../resources/org/ow2/jonas/ant/antlib.xml | 44 - .../tools/jonas-cluster-daemon/ant/pom.xml | 57 - .../cluster/clusterdaemon/ClusterDaemon.java | 469 --- .../main/resources/antlib-clusterdaemon.xml | 5 - .../build-clusterdaemon.properties.template | 5 - .../tools/jonas-cluster-daemon/api/pom.xml | 25 - .../daemon/api/ClusterDaemonException.java | 93 - .../cluster/daemon/api/IClusterDaemon.java | 406 -- .../META-INF/jonas-cluster-daemon-api.bnd | 25 - .../api/src/main/resources/metadata.xml | 30 - .../tools/jonas-cluster-daemon/core/pom.xml | 135 - .../jonas/cluster/daemon/ClusterDaemon.java | 2505 ----------- .../cluster/daemon/ClusterDaemonAdmin.java | 170 - .../daemon/ClusterDaemonException.java | 93 - .../cluster/daemon/ClusterDaemonMBean.java | 30 - .../cluster/daemon/ClusterDaemonTools.java | 360 -- .../jonas/cluster/daemon/CmdReaderThread.java | 72 - .../jonas/cluster/daemon/MonitorThread.java | 62 - .../cluster/daemon/ShutdownHookThread.java | 77 - .../daemon/mbean/JMXRemoteException.java | 77 - .../cluster/daemon/mbean/JMXRemoteHelper.java | 253 -- .../daemon/mbean/MBeanServerException.java | 77 - .../daemon/mbean/MBeanServerHelper.java | 130 - .../src/main/jonas-resources/bin/jclusterd | 166 - .../main/jonas-resources/bin/jclusterd.bat | 198 - .../main/jonas-resources/conf/clusterd.xml | 72 - .../META-INF/jonas-cluster-daemon-core.bnd | 34 - .../core/src/main/resources/metadata.xml | 35 - .../tools/jonas-cluster-daemon/pom.xml | 45 - .../jonas-launcher-for-addons/pom.xml | 115 - .../jonas/DefaultConfigurationProvider.java | 536 --- .../jonas/IConfigurationProvider.java | 57 - .../org/ow2/jonas/launcher/jonas/JOnAS.java | 435 -- .../jonas/launcher/jonas/VersionNumber.java | 78 - .../jonas/launcher/jonas/util/IOUtils.java | 189 - .../jonas/launcher/jonas/util/JOnASUtils.java | 142 - .../launcher/jonas/util/Maven2Utils.java | 121 - .../META-INF/jonas-launcher-for-addons.bnd | 36 - .../jonas/launcher/jonas/defaults.properties | 100 - .../jonas/launcher/jonas/gateway.properties | 111 - .../launcher/jonas/javase-profiles.properties | 554 --- .../tools/launchers/jonas-launcher/pom.xml | 110 - .../jonas/DefaultConfigurationProvider.java | 537 --- .../jonas/IConfigurationProvider.java | 57 - .../org/ow2/jonas/launcher/jonas/JOnAS.java | 437 -- .../jonas/launcher/jonas/VersionNumber.java | 78 - .../jonas/launcher/jonas/util/IOUtils.java | 189 - .../jonas/launcher/jonas/util/JOnASUtils.java | 142 - .../launcher/jonas/util/Maven2Utils.java | 121 - .../resources/META-INF/jonas-launcher.bnd | 36 - .../jonas/launcher/jonas/defaults.properties | 100 - .../jonas/launcher/jonas/gateway.properties | 111 - .../launcher/jonas/javase-profiles.properties | 554 --- jonas/modules/tools/launchers/pom.xml | 45 - .../modules/tools/maven/genic-plugin/pom.xml | 48 - .../tool/maven/genic/plugin/GenICMojo.java | 224 - jonas/modules/tools/maven/packaging/pom.xml | 35 - .../packaging/ApplicationPackagingMojo.java | 113 - jonas/modules/tools/maven/pom.xml | 61 - .../maven/shade-jonas-transformers/pom.xml | 39 - .../AbstractJOnASResourceTransformer.java | 156 - .../AntLibResourceTransformer.java | 232 - .../BuildResourceTransformer.java | 637 --- .../maven/shade/transformers/xml/Input.java | 169 - .../maven/shade/transformers/xml/Target.java | 181 - .../modules/tools/maven/wsgen-plugin/pom.xml | 49 - .../tool/maven/wsgen/plugin/WsGenMojo.java | 129 - jonas/modules/tools/migration-jboss/pom.xml | 38 - .../ow2/jonas/migration/jboss/Migrate.java | 303 -- .../jonas/migration/jboss/Transformer.java | 439 -- .../org/ow2/jonas/migration/jboss/jboss.xml | 216 - .../jonas/migration/jboss/jbosscmp-jdbc.xml | 55 - .../jonas/migration/jboss/jonas-ejb-jar.xml | 124 - jonas/modules/tools/pom.xml | 50 - jonas/pom.xml | 2353 ----------- .../core/src/resources/images/JonasSmall.png | Bin 6305 -> 0 bytes jonas_tests/.classpath | 24 - .../.settings/org.eclipse.jdt.core.prefs | 12 - jonas_tests/applications/build.xml | 167 - .../util/JApplicationsTestCase.java | 312 -- jonas_tests/build.properties | 52 - jonas_tests/build.xml | 517 --- jonas_tests/cluster/build-client.xml | 607 --- jonas_tests/cluster/build.properties | 44 - jonas_tests/cluster/build.xml | 1180 ------ .../cluster/test/common/AbsTestClient.java | 165 - .../jonas/cluster/test/common/Checker.java | 108 - .../jonas/cluster/test/common/ClientTask.java | 139 - .../jonas/cluster/test/common/JOnASTask.java | 252 -- .../cluster/test/common/RunnableTask.java | 54 - .../jonas/cluster/test/common/TestEnum.java | 134 - .../ow2/jonas/cluster/test/common/Worker.java | 94 - .../cluster/test/common/build-jc.properties | 161 - .../cluster/test/common/defConf.properties | 6 - jonas_tests/cluster/etc/footer.html | 2 - jonas_tests/cluster/etc/header.html | 154 - .../etc/style/environment/junit-noframes.xsl | 155 - .../etc/style/include/junit-noframes.xsl | 355 -- .../etc/style/standalone/junit-noframes.xsl | 591 --- .../etc/style/standalone_perfs/compare.xsl | 559 --- .../style/standalone_perfs/junit-noframes.xsl | 588 --- jonas_tests/cluster/etc/suiteslist.html | 18 - .../cluster/logging/logging.properties | 80 - jonas_tests/cluster/resources/cmi-client.xml | 40 - .../cluster/resources/test-config.properties | 6 - .../jonas/cluster/test/j2ee14/ClientTest.java | 193 - .../test/j2ee14/SampleCluster2Test.java | 181 - .../cluster/test/javaee5/ClientTest.java | 175 - .../test/javaee5/SampleCluster3Test.java | 177 - .../test/javaee5/client/ClientException.java | 81 - .../test/javaee5/client/ClientFOSFSB.java | 111 - .../test/javaee5/client/ClientLBRemote.java | 105 - .../cluster/testing-applications/build.xml | 49 - .../testing-applications/jmx/build.xml | 157 - .../jmx/etc/META-INF/MANIFEST.MF | 1 - .../jmx/etc/application.xml | 49 - .../jmx/etc/cmi-jmx-client-application.xml | 37 - .../jmx/etc/cmi-jmx-client-jonas.xml | 33 - .../test/jmx/client/ClientJMXTester.java | 217 - .../cluster/test/jmx/client/JMXTest.java | 93 - .../cluster/test/jmx/common/ClientBase.java | 150 - .../test/jmx/common/ClientUtility.java | 100 - .../cluster/test/jmx/ejb/ClusterFangBean.java | 83 - .../test/jmx/ejb/ClusterJMXTester.java | 879 ---- .../test/jmx/ejb/ClusterJMXTesterBean.java | 552 --- .../test/jmx/ejb/LocalClusterJMXTester.java | 46 - .../test/jmx/ejb/RemoteClusterFangBean.java | 69 - .../test/jmx/ejb/RemoteClusterJMXTester.java | 34 - .../testing-applications/jonas-common.xml | 251 -- .../cluster/tools/maven-ant-tasks-2.0.9.jar | Bin 1018394 -> 0 bytes jonas_tests/conformance/.gitignore | 2 - jonas_tests/conformance/build.xml | 504 --- jonas_tests/conformance/build_hotdeploy.xml | 126 - .../src/hotdeploy1/HotDeploySLR.java | 97 - .../src/hotdeploy2/HotDeploySLR.java | 97 - .../jtests/beans/annuaire/PersonneEC2.java | 314 -- .../jtests/beans/applimet/AppliSession.java | 111 - .../jtests/beans/applimet/MetSession.java | 167 - .../jonas/jtests/beans/applimet/applimet.xml | 109 - .../jonas/jtests/beans/bank/AccountEC2.java | 245 -- .../jonas/jtests/beans/bank/ManagerSF.java | 438 -- .../jtests/beans/beanexc/AccountEC2.java | 188 - .../jonas/jtests/beans/beanexc/AccountSL.java | 85 - .../jonas/jtests/beans/bmt/Moscone.java | 17 - .../jonas/jtests/beans/bmt/MosconeST.java | 324 -- .../jtests/beans/cluster/IdentityEC.java | 174 - .../jonas/jtests/beans/ebasic/AccountEC2.java | 191 - .../jonas/jtests/beans/ebasic/BDateEC2.java | 117 - .../jonas/jtests/beans/ebasic/E4QueryEC2.java | 106 - .../jonas/jtests/beans/ebasic/PersonEC2.java | 195 - .../jonas/jtests/beans/ebasic/SimpleEC2.java | 175 - .../jtests/beans/ebasic/pkautoObjectEC2.java | 104 - .../jtests/beans/ejbql/SessionTestBean.java | 94 - .../jonas/jtests/beans/etype/EtypeBean.java | 82 - .../jonas/jtests/beans/folder/FileEC.java | 305 -- .../jonas/jtests/beans/folder/FolderSY.java | 527 --- .../jonas/jtests/beans/folder/Paper2EC2.java | 122 - .../jonas/jtests/beans/folder/Paper3EC2.java | 113 - .../jonas/jtests/beans/folder/PaperEC.java | 183 - .../jonas/jtests/beans/folder/PaperEC2.java | 113 - .../jonas/jtests/beans/inherit/PersonEC.java | 87 - .../jonas/jtests/beans/inherit/UserEC.java | 98 - .../jtests/beans/j2eeca/connectorCASLR.java | 292 -- .../jtests/beans/j2eeca/runtimeCASLR.java | 237 -- .../jtests/beans/j2eeca/securedCASLR.java | 189 - .../jtests/beans/j2eeca/transactedCASLR.java | 242 -- .../jonas/jtests/beans/jca15/Utility.java | 48 - .../jonas/jtests/beans/jdbc/Manager.java | 26 - .../jonas/jtests/beans/jdbc/ManagerSY.java | 328 -- .../jonas/jtests/beans/jdbc/jdbc.xml | 78 - .../jtests/beans/jdbcra/JdbcRA1EBRBean.java | 508 --- .../jtests/beans/jdbcra/JdbcRA2EBRBean.java | 512 --- .../jtests/beans/local/SimpleSessionSL.java | 159 - .../jonas/jtests/beans/local/TargetSL.java | 211 - .../jonas/jtests/beans/message/Listener.java | 246 -- .../jonas/jtests/beans/message/MRecordEC.java | 229 - .../jtests/beans/message/Sender1_1SF.java | 316 -- .../jtests/beans/message/Sender1_2SF.java | 423 -- .../jonas/jtests/beans/message/SenderSF.java | 390 -- .../beans/relation/cascade/AddressBean.java | 134 - .../beans/relation/cascade/CarBean.java | 169 - .../relation/cascade/CreditCardBean.java | 100 - .../beans/relation/cascade/CustomerBean.java | 339 -- .../beans/relation/cascade/InsuranceBean.java | 117 - .../beans/relation/cascade/InvoiceBean.java | 117 - .../beans/relation/cascade/PhoneBean.java | 101 - .../jtests/beans/relation/dass/AEC2.java | 213 - .../jtests/beans/relation/dass/BEC2.java | 175 - .../jtests/beans/relation/dass/P1EC2.java | 180 - .../jtests/beans/relation/dass/P2EC2.java | 204 - .../jtests/beans/relation/dass/P3EC2.java | 224 - .../jtests/beans/relation/dass/P4EC2.java | 184 - .../beans/relation/family/PeopleEC2.java | 377 -- .../jonas/jtests/beans/relation/mnb/AEC2.java | 281 -- .../jonas/jtests/beans/relation/mnb/BEC2.java | 283 -- .../jonas/jtests/beans/relation/mnu/AEC2.java | 292 -- .../jonas/jtests/beans/relation/mnu/BEC2.java | 175 - .../jonas/jtests/beans/relation/mou/AEC2.java | 281 -- .../jonas/jtests/beans/relation/mou/BEC2.java | 176 - .../jtests/beans/relation/mou/jonas-mou.xml | 142 - .../jonas/jtests/beans/relation/omb/AEC2.java | 321 -- .../jonas/jtests/beans/relation/omb/BEC2.java | 243 -- .../jtests/beans/relation/omb/FrontSFR.java | 186 - .../jonas/jtests/beans/relation/omu/AEC2.java | 281 -- .../jonas/jtests/beans/relation/omu/BEC2.java | 175 - .../jonas/jtests/beans/relation/oob/AEC2.java | 222 - .../jonas/jtests/beans/relation/oob/BEC2.java | 234 - .../jtests/beans/relation/oob/BHomeLocal.java | 43 - .../jtests/beans/relation/oob/BLocal.java | 39 - .../jtests/beans/relation/oob/Front.java | 38 - .../jtests/beans/relation/oob/FrontHome.java | 39 - .../jtests/beans/relation/oob/FrontSFR.java | 150 - .../jtests/beans/relation/oob/jonas-oob.xml | 140 - .../jonas/jtests/beans/relation/oob/oob.xml | 339 -- .../jonas/jtests/beans/relation/oou/AEC2.java | 226 - .../jonas/jtests/beans/relation/oou/BEC2.java | 178 - .../jtests/beans/relation/pkcomp/AEC2.java | 288 -- .../jtests/beans/relation/pkcomp/BEC2.java | 291 -- .../jtests/beans/relation/pkg/beans/AEC2.java | 285 -- .../jtests/beans/relation/pkg/beans/BEC2.java | 287 -- .../beans/relation/rcycle/PersonEC2.java | 314 -- .../beans/relation/remon/AttributeEC2.java | 176 - .../jtests/beans/relation/remon/MainEC2.java | 195 - .../jtests/beans/relation/s1pkcomp/AEC2.java | 288 -- .../jtests/beans/relation/s1pkcomp/BEC2.java | 291 -- .../jtests/beans/relation/s2pkcomp/AEC2.java | 226 - .../jtests/beans/relation/s2pkcomp/BEC2.java | 196 - .../jtests/beans/relation/s3pkcomp/AEC2.java | 267 -- .../jtests/beans/relation/s3pkcomp/BEC2.java | 175 - .../jtests/beans/relatives/RelativeEC2.java | 186 - .../beans/remoterunner/RemoteRunnerSL.java | 181 - .../jonas/jtests/beans/secured/BaseEC2.java | 101 - .../jonas/jtests/beans/secured/BaseSL.java | 79 - .../jonas/jtests/beans/secured/DerivedSF.java | 122 - .../jonas/jtests/beans/secured/Listener.java | 179 - .../jtests/beans/transacted/SimpleCommon.java | 167 - .../jtests/beans/transacted/SimpleEC2.java | 555 --- .../jtests/beans/transacted/SimpleSF.java | 86 - .../jtests/beans/transacted/SimpleSL.java | 223 - .../beans/transacted/jonas-transacted.xml | 132 - .../jonas/jtests/beans/worker/WorkerSF.java | 314 -- .../jtests/clients/distribution/A_bank.java | 70 - .../clients/distribution/A_bankRead.java | 340 -- .../clients/distribution/A_bankWrite.java | 130 - .../jtests/clients/distribution/A_thread.java | 230 - .../clients/distribution/C_distribution.java | 62 - .../clients/distribution/F_Frontal.java | 234 - .../jtests/clients/distribution/F_Jdbc.java | 200 - .../jtests/clients/distribution/F_bankRO.java | 105 - .../jtests/clients/distribution/S_bank.java | 222 - .../clients/distribution/S_bankCRC.java | 64 - .../clients/distribution/S_bankCRW.java | 64 - .../jtests/clients/distribution/S_bankCS.java | 64 - .../clients/distribution/S_bankCST.java | 64 - .../clients/distribution/S_bankCSpf.java | 64 - .../clients/distribution/S_distribution.java | 57 - .../clients/entity/A_AdvancedHomeEC.java | 808 ---- .../clients/entity/A_BasicHomeInterface.java | 548 --- .../jonas/jtests/clients/entity/A_omb.java | 1281 ------ .../jonas/jtests/clients/entity/A_oob.java | 830 ---- .../jtests/clients/entity/C_Relation.java | 86 - .../clients/entity/F_BasicEjbqlEC2.java | 402 -- .../jtests/clients/entity/F_EjbqlEC2.java | 1897 --------- .../jtests/clients/entity/F_RcycleEC2.java | 138 - .../jtests/clients/entity/F_omb_CS_EC2.java | 132 - .../jtests/clients/entity/F_oob_CS_EC2.java | 111 - .../clients/entity/S_BasicEjbqlEC2.java | 126 - .../jtests/clients/entity/S_RcycleEC2.java | 179 - .../jonas/jtests/clients/entity/S_entity.java | 55 - .../clients/hotdeploy/F_EjbJarHotDeploy.java | 122 - .../jonas/jtests/clients/jms/F_BasicMDB.java | 610 --- .../jtests/clients/jms/F_RollbackMDB.java | 192 - .../clients/management/F_Connectors.java | 180 - .../jonas/jtests/clients/management/README | 14 - .../clients/security/A_AccessControl.java | 395 -- .../clients/security/B_AccessControl.java | 133 - .../jtests/clients/security/F_RunAs.java | 458 -- .../jonas/jtests/clients/session/F_Smt.java | 98 - .../jonas/jtests/clients/timer/A_Timer.java | 319 -- .../jtests/clients/timer/A_TimerEntity.java | 151 - .../clients/transaction/A_TxAttribute.java | 345 -- .../transaction/A_TxAttributeEntity.java | 432 -- .../clients/transaction/C_transaction.java | 60 - .../clients/transaction/F_BeanToBeanTx.java | 360 -- .../jtests/clients/transaction/F_Jotm.java | 252 -- .../jtests/clients/transaction/F_State.java | 351 -- .../objectweb/jonas/jtests/tables/Tjdbc.java | 90 - .../jonas/jtests/tables/Tmanager.java | 48 - .../objectweb/jonas/jtests/util/JBean.java | 105 - .../jonas/jtests/util/JTestCase.java | 432 -- jonas_tests/deployment/build.xml | 93 - jonas_tests/deployment/src/DDTest.java | 487 --- jonas_tests/doc/index.html | 617 --- .../etc/style/standalone_perfs/compare.xsl | 559 --- jonas_tests/etc/suiteslist.html | 18 - jonas_tests/examples/base/.gitignore | 3 - jonas_tests/examples/base/examples/README | 48 - .../examples/base/examples/alarm/README | 78 - .../org/objectweb/alarm/beans/AlarmData.java | 157 - .../alarm/beans/AlarmListenerBean.java | 111 - .../objectweb/alarm/beans/AlarmManager.java | 281 -- .../objectweb/alarm/beans/AlarmRecord.java | 90 - .../alarm/beans/AlarmRecordBean.java | 316 -- .../alarm/beans/AlarmRecordHome.java | 96 - .../org/objectweb/alarm/beans/Debug.java | 64 - .../org/objectweb/alarm/beans/Profil.java | 206 - .../beans/org/objectweb/alarm/beans/View.java | 88 - .../org/objectweb/alarm/beans/ViewBean.java | 198 - .../org/objectweb/alarm/beans/ViewHome.java | 46 - .../org/objectweb/alarm/beans/ViewProxy.java | 240 -- .../beans/org/objectweb/alarm/beans/alarm.xml | 100 - .../org/objectweb/alarm/beans/jonas-alarm.xml | 86 - .../examples/base/examples/alarm/build.xml | 96 - .../org/objectweb/alarm/AlarmGenerator.java | 214 - .../examples/base/examples/alarm/db1.prp | 325 -- .../base/examples/alarm/etc/alarm.xml | 100 - .../base/examples/alarm/etc/application.xml | 18 - .../base/examples/alarm/etc/jonas-alarm.xml | 86 - .../base/examples/alarm/etc/jonas-web.xml | 16 - .../examples/base/examples/alarm/etc/web.xml | 58 - .../alarm/src/org/objectweb/alarm/Sender.java | 115 - .../base/examples/alarm/web/generator.html | 37 - .../examples/alarm/web/images/alarmArchi.gif | Bin 51084 -> 0 bytes .../base/examples/alarm/web/images/jetty.png | Bin 15107 -> 0 bytes .../examples/alarm/web/images/logo_jonas.jpg | Bin 3293 -> 0 bytes .../base/examples/alarm/web/images/return.gif | Bin 1231 -> 0 bytes .../base/examples/alarm/web/images/tomcat.gif | Bin 1441 -> 0 bytes .../base/examples/alarm/web/index.html | 68 - .../alarm/web/secured/createfilter.jsp | 12 - .../examples/alarm/web/secured/current.jsp | 115 - .../base/examples/alarm/web/secured/list.jsp | 107 - .../examples/alarm/web/secured/remove.jsp | 13 - .../alarm/web/secured/removefilter.jsp | 11 - .../examples/alarm/web/secured/setfilter.jsp | 13 - .../base/examples/alarm/web/secured/top.html | 15 - .../alarm/web/secured/unsetfilter.jsp | 10 - .../examples/base/examples/build.properties | 42 - jonas_tests/examples/base/examples/build.xml | 100 - .../examples/base/examples/cmp2/README | 109 - .../examples/base/examples/cmp2/build.xml | 75 - .../cmp2/etc/resources/web/index.html | 111 - .../examples/cmp2/etc/resources/web/style.css | 13 - .../examples/cmp2/etc/xml/application.xml | 23 - .../base/examples/cmp2/etc/xml/cmp2.xml | 715 ---- .../base/examples/cmp2/etc/xml/jonas-cmp2.xml | 74 - .../base/examples/cmp2/etc/xml/web.xml | 103 - .../src/com/titan/address/AddressBean.java | 83 - .../com/titan/address/AddressHomeLocal.java | 26 - .../src/com/titan/address/AddressLocal.java | 21 - .../cmp2/src/com/titan/cabin/CabinBean.java | 87 - .../src/com/titan/cabin/CabinHomeLocal.java | 28 - .../src/com/titan/cabin/CabinHomeRemote.java | 14 - .../cmp2/src/com/titan/cabin/CabinLocal.java | 17 - .../cmp2/src/com/titan/cabin/CabinRemote.java | 14 - .../cmp2/src/com/titan/cruise/CruiseBean.java | 45 - .../src/com/titan/cruise/CruiseHomeLocal.java | 23 - .../src/com/titan/cruise/CruiseLocal.java | 18 - .../src/com/titan/customer/AddressDO.java | 28 - .../com/titan/customer/CreditCardBean.java | 48 - .../titan/customer/CreditCardHomeLocal.java | 18 - .../com/titan/customer/CreditCardLocal.java | 21 - .../src/com/titan/customer/CustomerBean.java | 182 - .../com/titan/customer/CustomerHomeLocal.java | 48 - .../titan/customer/CustomerHomeRemote.java | 13 - .../src/com/titan/customer/CustomerLocal.java | 35 - .../com/titan/customer/CustomerRemote.java | 26 - .../cmp2/src/com/titan/customer/Name.java | 18 - .../cmp2/src/com/titan/phone/PhoneBean.java | 36 - .../src/com/titan/phone/PhoneHomeLocal.java | 19 - .../cmp2/src/com/titan/phone/PhoneLocal.java | 11 - .../titan/reservation/ReservationBean.java | 52 - .../reservation/ReservationHomeLocal.java | 20 - .../titan/reservation/ReservationLocal.java | 25 - .../cmp2/src/com/titan/ship/ShipBean.java | 38 - .../src/com/titan/ship/ShipHomeLocal.java | 25 - .../cmp2/src/com/titan/ship/ShipLocal.java | 13 - .../titan/travelagent/RTravelAgentBean.java | 63 - .../travelagent/RTravelAgentHomeRemote.java | 11 - .../titan/travelagent/RTravelAgentRemote.java | 12 - .../titan/travelagent/TravelAgentBean.java | 63 - .../travelagent/TravelAgentHomeRemote.java | 11 - .../titan/travelagent/TravelAgentRemote.java | 12 - .../cmp2/src/servlets/ServletTest.java | 410 -- .../cmp2/src/servlets/ServletTest2.java | 857 ---- .../cmp2/src/servlets/ServletTest3.java | 777 ---- .../examples/base/examples/earsample/README | 94 - .../base/examples/earsample/build.xml | 143 - .../earsample/etc/resources/jaas/jaas.config | 13 - .../earsample/etc/resources/web/img/jetty.gif | Bin 6649 -> 0 bytes .../etc/resources/web/img/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../etc/resources/web/img/ow_logo.png | Bin 11700 -> 0 bytes .../etc/resources/web/img/tomcat.gif | Bin 1934 -> 0 bytes .../etc/resources/web/img/valid-xhtml11.png | Bin 1917 -> 0 bytes .../earsample/etc/resources/web/img/vcss.png | Bin 1134 -> 0 bytes .../earsample/etc/resources/web/index.html | 52 - .../earsample/etc/resources/web/ow_jonas.css | 222 - .../earsample/etc/xml/application-client.xml | 73 - .../earsample/etc/xml/application.xml | 61 - .../earsample/etc/xml/jonas-client1.xml | 19 - .../earsample/etc/xml/jonas-client2.xml | 18 - .../earsample/etc/xml/jonas-secusb.xml | 12 - .../examples/earsample/etc/xml/jonas-web.xml | 13 - .../base/examples/earsample/etc/xml/ra.xml | 40 - .../examples/earsample/etc/xml/secusb.xml | 60 - .../base/examples/earsample/etc/xml/web.xml | 112 - .../objectweb/earsample/beans/secusb/Op.java | 52 - .../earsample/beans/secusb/OpBean.java | 247 -- .../earsample/beans/secusb/OpHome.java | 47 - .../earsample/beans/secusb/OpLocal.java | 48 - .../earsample/beans/secusb/OpLocalHome.java | 45 - .../objectweb/earsample/clients/Client.java | 189 - .../resourceadapters/ResourceAdapterImpl.java | 191 - .../earsample/servlets/ServletOp.java | 304 -- .../base/examples/emb-sample/.cvsignore | 1 - .../examples/base/examples/emb-sample/README | 70 - .../base/examples/emb-sample/build.xml | 182 - .../base/examples/emb-sample/emb-core/README | 9 - .../examples/emb-sample/etc/application.xml | 67 - .../emb-sample/etc/embSampleSession.xml | 56 - .../emb-sample/etc/jonas-embSampleSession.xml | 8 - .../base/examples/emb-sample/etc/web.xml | 230 - .../base/examples/emb-sample/lib/README | 2 - .../lib/commons-fileupload-1.1.1.jar | Bin 31909 -> 0 bytes .../base/examples/emb-sample/lib/emb-core.ear | Bin 188671 -> 0 bytes .../examples/emb-sample/lib/emb-jsr86-api.jar | Bin 34258 -> 0 bytes .../emb-sample/lib/emb-ow-mfb-core.jar | Bin 68941 -> 0 bytes .../emb-sample/lib/emb-ow-plugins-api.jar | Bin 16888 -> 0 bytes .../base/examples/emb-sample/plugins/README | 8 - .../resources/icons/valid-xhtml11.png | Bin 1917 -> 0 bytes .../emb-sample/resources/icons/vcss.png | Bin 1134 -> 0 bytes .../emb-sample/resources/jsps/footer.jsp | 6 - .../emb-sample/resources/jsps/header.jsp | 31 - .../emb-sample/resources/jsps/mediaList.jsp | 109 - .../emb-sample/resources/jsps/navigation.jsp | 12 - .../resources/jsps/templatePage.jsp | 67 - .../emb-sample/resources/jsps/uploadForm.jsp | 85 - .../resources/samples/Java_CompatEE.gif | Bin 2200 -> 0 bytes .../emb-sample/resources/samples/apache.svg | 759 ---- .../emb-sample/resources/samples/frame.png | Bin 8358 -> 0 bytes .../resources/samples/iss-fireworks.mp3 | Bin 249838 -> 0 bytes .../emb-sample/resources/samples/jonas.mp4 | Bin 936410 -> 0 bytes .../emb-sample/resources/samples/jonas.png | Bin 39577 -> 0 bytes .../emb-sample/resources/samples/mask.png | Bin 642 -> 0 bytes .../resources/samples/objectweb.png | Bin 8853 -> 0 bytes .../resources/samples/samples.properties | 83 - .../emb-sample/resources/samples/snow.jpg | Bin 65725 -> 0 bytes .../emb-sample/resources/samples/starfish.jpg | Bin 97071 -> 0 bytes .../resources/samples/white-valley.jpg | Bin 41827 -> 0 bytes .../emb-sample/resources/theme/style.css | 132 - .../src/emb/sample/MediaSampleException.java | 75 - .../emb/sample/servlet/ActionDispatcher.java | 116 - .../emb/sample/servlet/BaseSampleServlet.java | 335 -- .../sample/servlet/ConvertSampleImageBW.java | 84 - .../servlet/ConvertSampleImageChained.java | 90 - .../servlet/ConvertSampleImageFormat.java | 88 - .../servlet/ConvertSampleImageFrame.java | 112 - .../servlet/ConvertSampleImageHalfSize.java | 87 - .../servlet/ConvertSampleImageOverlayed.java | 102 - .../servlet/ConvertSampleImageSvgToPng.java | 89 - .../servlet/ConvertSampleVideoTo3GPP.java | 89 - .../servlet/ConvertSampleVideoToMpeg.java | 90 - .../servlet/ConvertSampleVideoToMpegTs.java | 89 - .../emb/sample/servlet/ExtractHeaderData.java | 110 - .../src/emb/sample/servlet/HomeSample.java | 85 - .../emb/sample/servlet/HttpSessionMgr.java | 72 - .../emb/sample/servlet/ListSampleMedia.java | 118 - .../emb/sample/servlet/LoadSampleMedia.java | 220 - .../sample/servlet/RetrieveSampleMedia.java | 124 - .../emb/sample/servlet/UploadSampleMedia.java | 160 - .../emb/sample/session/HttpSessionMgr.java | 70 - .../session/MediaSampleSessionBean.java | 586 --- .../session/MediaSampleSessionLocal.java | 132 - .../session/MediaSampleSessionLocalHome.java | 48 - .../base/examples/fdf/MyJOnASCluster.fdf | 103 - .../examples/base/examples/hibernate/README | 93 - .../base/examples/hibernate/build.properties | 28 - .../base/examples/hibernate/build.xml | 169 - .../hibernate/etc/resources/Cat.hbm.xml | 28 - .../hibernate/etc/resources/hibernate.cfg.xml | 20 - .../examples/hibernate/etc/sql/initdb.sql | 8 - .../examples/hibernate/etc/sql/resetdb.sql | 1 - .../examples/hibernate/etc/xml/jonas-web.xml | 9 - .../base/examples/hibernate/etc/xml/web.xml | 27 - .../examples/hibernate/lib/antlr-2.7.6rc1.jar | Bin 444689 -> 0 bytes .../examples/hibernate/lib/c3p0-0.9.0.jar | Bin 487360 -> 0 bytes .../examples/hibernate/lib/cglib-2.1.3.jar | Bin 282338 -> 0 bytes .../hibernate/lib/cglib-nodep-2.1_3.jar | Bin 324238 -> 0 bytes .../examples/hibernate/lib/dom4j-1.6.1.jar | Bin 313898 -> 0 bytes .../examples/hibernate/lib/ehcache-1.1.jar | Bin 47531 -> 0 bytes .../hibernate/lib/hibernate-3.1.2.jar | Bin 1955860 -> 0 bytes .../hibernate/lib/jaxen-1.1-beta-7.jar | Bin 226877 -> 0 bytes .../examples/hibernate/lib/oscache-2.1.jar | Bin 114308 -> 0 bytes .../examples/hibernate/lib/proxool-0.8.3.jar | Bin 475943 -> 0 bytes .../hibernate/lib/swarmcache-1.0rc2.jar | Bin 30602 -> 0 bytes .../examples/hibernate/lib/versioncheck.jar | Bin 5762 -> 0 bytes .../hibernate/examples/quickstart/Cat.java | 43 - .../examples/quickstart/TestServlet.java | 165 - .../base/examples/j2eemanagement/README | 147 - .../base/examples/j2eemanagement/build.xml | 163 - .../etc/resources/web/img/logo_jonas.jpg | Bin 3293 -> 0 bytes .../etc/resources/web/index.html | 109 - .../etc/resources/web/style.css | 13 - .../j2eemanagement/etc/xml/application.xml | 19 - .../j2eemanagement/etc/xml/jonas-web.xml | 12 - .../examples/j2eemanagement/etc/xml/web.xml | 97 - .../servlets/ClustMgmtServlet.java | 253 -- .../servlets/ClusterDaemonServlet.java | 220 - .../servlets/J2eemanagementBaseServlet.java | 232 - .../servlets/JmsAdminServlet.java | 188 - .../j2eemanagement/servlets/MgmtServlet.java | 849 ---- .../servlets/MonologListener.java | 86 - .../j2eemanagement/servlets/MyListener.java | 73 - .../servlets/NewServerMgmtServlet.java | 323 -- .../examples/base/examples/j_common.xml | 224 - .../examples/base/examples/jaasclient/README | 90 - .../base/examples/jaasclient/build.xml | 167 - .../etc/xml/application-client-swing.xml | 20 - .../jaasclient/etc/xml/application-client.xml | 20 - .../jaasclient/etc/xml/jonas-client1.xml | 20 - .../jaasclient/etc/xml/jonas-client2.xml | 18 - .../jaasclient/etc/xml/jonas-client3.xml | 18 - .../jaasclient/etc/xml/jonas-secusb.xml | 12 - .../examples/jaasclient/etc/xml/secusb.xml | 47 - .../src/jaasclient/ClientJAASOp.java | 221 - .../jaasclient/ClientJAASOpContClient.java | 162 - .../ClientJAASOpContClientSwing.java | 184 - .../src/jaasclient/beans/secusb/JAASOp.java | 53 - .../jaasclient/beans/secusb/JAASOpBean.java | 240 -- .../jaasclient/beans/secusb/JAASOpHome.java | 48 - .../examples/base/examples/jdo/Bank_src.zip | Bin 11176 -> 0 bytes jonas_tests/examples/base/examples/jdo/README | 65 - .../examples/base/examples/jdo/build.xml | 165 - .../examples/base/examples/jonas-common.xml | 275 -- .../examples/base/examples/src/build.xml | 79 - .../examples/base/examples/src/eb/Account.idb | 23 - .../base/examples/src/eb/Account.java | 47 - .../base/examples/src/eb/Account.pgsql | 12 - .../examples/base/examples/src/eb/Account.sql | 13 - .../base/examples/src/eb/AccountExplBean.java | 541 --- .../base/examples/src/eb/AccountHome.java | 49 - .../examples/src/eb/AccountImpl2Bean.java | 218 - .../base/examples/src/eb/AccountImplBean.java | 248 -- .../base/examples/src/eb/Accounthsqldb.sql | 12 - .../base/examples/src/eb/ClientAccount.java | 170 - .../examples/base/examples/src/eb/README | 42 - .../examples/src/eb/application-client.xml | 11 - .../examples/base/examples/src/eb/build.xml | 70 - .../examples/base/examples/src/eb/db1.prp | 325 -- .../examples/base/examples/src/eb/eb.xml | 114 - .../base/examples/src/eb/jonas-eb.xml | 59 - .../examples/base/examples/src/lb/Client.java | 202 - .../base/examples/src/lb/ManacEC.java | 225 - .../base/examples/src/lb/ManacLocal.java | 43 - .../base/examples/src/lb/ManacLocalHome.java | 49 - .../base/examples/src/lb/Manager.java | 49 - .../base/examples/src/lb/ManagerHome.java | 40 - .../base/examples/src/lb/ManagerSF.java | 281 -- .../examples/base/examples/src/lb/README | 55 - .../examples/src/lb/application-client.xml | 11 - .../examples/base/examples/src/lb/build.xml | 66 - .../examples/base/examples/src/lb/db1.prp | 325 -- .../base/examples/src/lb/jonas-lb.xml | 74 - .../examples/base/examples/src/lb/lb.xml | 133 - .../examples/src/mailsb/ClientMailer.java | 282 -- .../examples/src/mailsb/MimePartDSMailer.java | 55 - .../src/mailsb/MimePartDSMailerBean.java | 228 - .../src/mailsb/MimePartDSMailerHome.java | 49 - .../examples/base/examples/src/mailsb/README | 37 - .../examples/src/mailsb/SessionMailer.java | 56 - .../src/mailsb/SessionMailerBean.java | 234 - .../src/mailsb/SessionMailerHome.java | 49 - .../src/mailsb/application-client.xml | 11 - .../base/examples/src/mailsb/build.xml | 65 - .../base/examples/src/mailsb/jonas-mailsb.xml | 24 - .../base/examples/src/mailsb/mailsb.xml | 52 - .../src/mdb/newsamplemdb/MdbBean.java | 71 - .../src/mdb/newsamplemdb/MdbBean_a.java | 96 - .../src/mdb/newsamplemdb/MdbBean_b.java | 72 - .../src/mdb/newsamplemdb/MdbClient.java | 99 - .../base/examples/src/mdb/newsamplemdb/README | 33 - .../mdb/newsamplemdb/application-client.xml | 11 - .../examples/src/mdb/newsamplemdb/build.xml | 61 - .../mdb/newsamplemdb/jonas-newsamplemdb.xml | 18 - .../src/mdb/newsamplemdb/newsamplemdb.xml | 48 - .../src/mdb/newsamplemdb2/MdbBean.java | 71 - .../src/mdb/newsamplemdb2/MdbBean_a.java | 96 - .../src/mdb/newsamplemdb2/MdbBean_b.java | 72 - .../src/mdb/newsamplemdb2/MdbClient.java | 97 - .../examples/src/mdb/newsamplemdb2/README | 33 - .../mdb/newsamplemdb2/application-client.xml | 11 - .../examples/src/mdb/newsamplemdb2/build.xml | 61 - .../mdb/newsamplemdb2/jonas-newsamplemdb2.xml | 18 - .../src/mdb/newsamplemdb2/newsamplemdb2.xml | 48 - .../examples/src/mdb/sampleappli/Env.java | 44 - .../examples/src/mdb/sampleappli/EnvBean.java | 238 -- .../examples/src/mdb/sampleappli/EnvHome.java | 43 - .../src/mdb/sampleappli/OrderBean.java | 124 - .../base/examples/src/mdb/sampleappli/README | 69 - .../mdb/sampleappli/SampleAppliClient.java | 309 -- .../examples/src/mdb/sampleappli/Stock.java | 49 - .../src/mdb/sampleappli/StockBean.java | 207 - .../src/mdb/sampleappli/StockHandlerBean.java | 180 - .../src/mdb/sampleappli/StockHome.java | 49 - .../mdb/sampleappli/application-client.xml | 11 - .../examples/src/mdb/sampleappli/build.xml | 63 - .../base/examples/src/mdb/sampleappli/db1.prp | 325 -- .../src/mdb/sampleappli/jonas-sampleappli.xml | 66 - .../src/mdb/sampleappli/sampleappli.xml | 158 - .../examples/src/mdb/samplemdb/MdbBean.java | 105 - .../examples/src/mdb/samplemdb/MdbClient.java | 101 - .../base/examples/src/mdb/samplemdb/README | 43 - .../src/mdb/samplemdb/application-client.xml | 11 - .../base/examples/src/mdb/samplemdb/build.xml | 64 - .../src/mdb/samplemdb/jonas-samplemdb.xml | 18 - .../examples/src/mdb/samplemdb/samplemdb.xml | 49 - .../base/examples/src/sb/ClientOp.java | 170 - .../examples/base/examples/src/sb/Op.java | 55 - .../examples/base/examples/src/sb/OpBean.java | 259 -- .../examples/base/examples/src/sb/OpHome.java | 50 - .../examples/base/examples/src/sb/README | 36 - .../examples/src/sb/application-client.xml | 11 - .../examples/base/examples/src/sb/build.xml | 63 - .../base/examples/src/sb/jonas-sb.xml | 14 - .../examples/base/examples/src/sb/sb.xml | 34 - .../examples/base/examples/src/src_common.xml | 69 - .../base/examples/statelessbean/build.xml | 59 - .../base/examples/statelessbean/etc/web.xml | 22 - .../statelessbean/ClientServletStateless.java | 179 - .../statelessbean/ClientStateless.java | 119 - .../examples/statelessbean/StatelessBean.java | 111 - .../statelessbean/StatelessInterceptor.java | 79 - .../statelessbean/StatelessLocal.java | 61 - .../StatelessOnlyAddMethodInterceptor.java | 59 - .../statelessbean/StatelessRemote.java | 36 - .../examples/statelessbean/package.html | 36 - .../examples/base/examples/webservices/README | 64 - .../examples/webservices/beans/ws/build.xml | 216 - .../beans/ws/etc/xml/jonas-webservices.xml | 61 - .../beans/ws/etc/xml/ssbEndpointMapping.xml | 44 - .../beans/ws/etc/xml/webservices.xml | 21 - .../beans/ws/etc/xml/wsdl/ssbEndpoint.wsdl | 98 - .../wssample/beans/ws/WSBeanEndpoint.java | 50 - .../wssample/beans/ws/WSBeanEndpointSLL.java | 116 - .../wssample/beans/ws/jonas-wsearsample.xml | 12 - .../wssample/beans/ws/wsearsample.xml | 44 - .../webservices/beans/wsclient/build.xml | 217 - .../beans/wsclient/etc/web/images/jetty.gif | Bin 6649 -> 0 bytes .../beans/wsclient/etc/web/images/jonas.ico | Bin 630 -> 0 bytes .../wsclient/etc/web/images/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../beans/wsclient/etc/web/images/ow_logo.png | Bin 11700 -> 0 bytes .../beans/wsclient/etc/web/images/tomcat.gif | Bin 1934 -> 0 bytes .../beans/wsclient/etc/web/index.html | 41 - .../beans/wsclient/etc/web/search-google.jsp | 84 - .../beans/wsclient/etc/web/style/ow_jonas.css | 119 - .../wsclient/etc/xml/application-wsclient.xml | 24 - .../beans/wsclient/etc/xml/ejb-jar.xml | 47 - .../beans/wsclient/etc/xml/googleMapping.xml | 37 - .../beans/wsclient/etc/xml/jonas-ejb-jar.xml | 11 - .../wsclient/etc/xml/web-wsclient-front.xml | 16 - .../wsclient/etc/xml/wsdl/GoogleSearch.wsdl | 198 - .../beans/wsclient/GoogleClientBean.java | 49 - .../beans/wsclient/GoogleClientBeanHome.java | 48 - .../beans/wsclient/GoogleClientBeanSLR.java | 162 - .../genbean/google/DirectoryCategory.java | 152 - .../genbean/google/GoogleSearchPort.java | 14 - .../genbean/google/GoogleSearchResult.java | 450 -- .../genbean/google/GoogleSearchService.java | 16 - .../genbean/google/ResultElement.java | 386 -- .../base/examples/webservices/build.xml | 77 - .../webservices/etc/xml/application.xml | 19 - .../webservices/webs/webclient/build.xml | 177 - .../webclient/etc/resources/googleByJSP.jsp | 90 - .../etc/resources/googleByServlet.html | 30 - .../webclient/etc/resources/images/jetty.gif | Bin 6649 -> 0 bytes .../webclient/etc/resources/images/jonas.ico | Bin 630 -> 0 bytes .../etc/resources/images/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../etc/resources/images/ow_logo.png | Bin 11700 -> 0 bytes .../webclient/etc/resources/images/tomcat.gif | Bin 1934 -> 0 bytes .../webs/webclient/etc/resources/index.html | 26 - .../etc/resources/style/ow_jonas.css | 119 - .../webs/webclient/etc/xml/googleMapping.xml | 37 - .../webs/webclient/etc/xml/jonas-web.xml | 25 - .../webs/webclient/etc/xml/web.xml | 44 - .../webclient/etc/xml/wsdl/GoogleSearch.wsdl | 198 - .../gen/google/DirectoryCategory.java | 152 - .../wssample/gen/google/GoogleSearchPort.java | 14 - .../gen/google/GoogleSearchResult.java | 450 -- .../gen/google/GoogleSearchService.java | 16 - .../wssample/gen/google/ResultElement.java | 386 -- .../servlets/wsclient/WsClientServlet.java | 183 - .../webservices/webs/webendpoint/README | 40 - .../webservices/webs/webendpoint/build.xml | 174 - .../etc/resources/credentials.properties | 2 - .../etc/resources/sample-crypto.properties | 8 - .../webs/webendpoint/etc/web/images/jetty.gif | Bin 6649 -> 0 bytes .../webs/webendpoint/etc/web/images/jonas.ico | Bin 630 -> 0 bytes .../etc/web/images/ow_jonas_logo.gif | Bin 4162 -> 0 bytes .../webendpoint/etc/web/images/ow_logo.png | Bin 11700 -> 0 bytes .../webendpoint/etc/web/images/tomcat.gif | Bin 1934 -> 0 bytes .../webs/webendpoint/etc/web/index.html | 31 - .../webs/webendpoint/etc/web/jaxrpcTest.jsp | 49 - .../webendpoint/etc/web/style/ow_jonas.css | 119 - .../webendpoint/etc/xml/clientMapping.xml | 11 - .../etc/xml/jaxrpcEndpointMapping.xml | 11 - .../webendpoint/etc/xml/jonas-webservices.xml | 21 - .../webs/webendpoint/etc/xml/web.xml | 210 - .../webs/webendpoint/etc/xml/webservices.xml | 119 - .../etc/xml/wsdl/jaxrpcEndpoint.wsdl | 104 - .../gen/jaxrpc/JaxRpcEndpointInterface.java | 13 - .../JaxRpcEndpointInterfaceService.java | 20 - .../security/ServerSideCallbackHandler.java | 90 - .../wssample/servlets/ws/JaxRpcEndpoint.java | 83 - .../servlets/ws/JaxRpcEndpointInterface.java | 50 - .../wsclient/JOnASJaxRpcClientServlet.java | 191 - .../base/examples/xdoclet/ClientCustomer.java | 154 - .../base/examples/xdoclet/CustomerBean.java | 262 -- .../examples/base/examples/xdoclet/Name.java | 46 - .../base/examples/xdoclet/PhoneBean.java | 114 - .../examples/base/examples/xdoclet/README | 131 - .../examples/base/examples/xdoclet/build.xml | 165 - .../examples/xdoclet/lib/xdoclet-1.2.2.jar | Bin 146897 -> 0 bytes .../lib/xdoclet-apache-module-1.2.2.jar | Bin 80149 -> 0 bytes .../xdoclet/lib/xdoclet-ejb-module-1.2.2.jar | Bin 211057 -> 0 bytes .../lib/xdoclet-exolab-module-1.2.2.jar | Bin 9971 -> 0 bytes .../lib/xdoclet-objectweb-module-1.2.2.jar | Bin 279234 -> 0 bytes .../xdoclet/lib/xdoclet-web-module-1.2.2.jar | Bin 44973 -> 0 bytes .../examples/xdoclet/lib/xjavadoc-1.1.jar | Bin 231114 -> 0 bytes jonas_tests/examples/build.xml | 189 - .../jonas/examples/clients/alarm/C_alarm.java | 239 -- .../jonas/examples/clients/cmp2/C_cmp2.java | 150 - .../clients/earsample/C_earsample.java | 169 - .../jonas/examples/clients/eb/C_eb.java | 189 - .../clients/hibernate/C_hibernate.java | 110 - .../j2eemanagement/C_j2eemanagement.java | 109 - .../jonas/examples/clients/lb/C_lb.java | 149 - .../examples/clients/mailsb/C_mailsb.java | 149 - .../jonas/examples/clients/mdb/C_mdb.java | 69 - .../examples/clients/mdb/F_sampleappli.java | 163 - .../examples/clients/mdb/F_samplemdb.java | 152 - .../sampleCluster2/C_sampleCluster2.java | 141 - .../jonas/examples/clients/sb/C_sb.java | 147 - .../examples/clients/suite/C_WebExamples.java | 70 - .../jonas/examples/clients/suite/C_suite.java | 89 - .../webservices/A_WebServicesEndpoint.java | 182 - .../clients/webservices/C_webservices.java | 74 - .../jonas/examples/util/JExampleTestCase.java | 500 --- jonas_tests/j2eeca/build.xml | 205 - .../src/ersatz/resourceadapter/Utility.java | 90 - .../resourceadapter/CommonClient.java | 262 -- .../resourceadapter/ConnectionImpl.java | 196 - .../resourceadapter/JtestInteraction.java | 203 - .../resourceadapter/JtestResourceAdapter.java | 851 ---- .../resourceadapter/LocalTransactionImpl.java | 172 - .../resourceadapter/XAResourceImpl.java | 173 - jonas_tests/jaxws/jaxws-felix/pom.xml | 519 --- .../src/main/config/config.properties | 183 - .../jonas-autodeploy-bundles.properties | 73 - .../jaxws-felix/src/main/config/testng.xml | 13 - .../jaxws/jaxws-test-base/ejb3/pom.xml | 26 - .../main/java/org/ow2/jonas/ejb3/Hello.java | 33 - .../java/org/ow2/jonas/ejb3/HelloBean.java | 49 - .../jaxws-ejb-descriptor/pom.xml | 26 - .../jaxws/test/ejb/JAXWSBean_descriptor.java | 82 - .../jonas/ws/jaxws/test/ejb/JAXWSGreeter.java | 34 - .../src/main/resources/META-INF/easybeans.xml | 8 - .../main/resources/META-INF/webservices.xml | 22 - .../META-INF/wsdl/JAXWSBean_descriptor.wsdl | 85 - .../jaxws-ejb-injection/pom.xml | 26 - .../main/java/org/ow2/jonas/ejb3/Hello.java | 33 - .../ws/jaxws/test/ejb/JAXWSBeanInjection.java | 101 - .../jonas/ws/jaxws/test/ejb/JAXWSGreeter.java | 33 - .../META-INF/wsdl/JAXWSBeanInjection.wsdl | 85 - .../jaxws-ejb-interceptor/pom.xml | 26 - .../jaxws/test/ejb/EJBWSwihtInterceptors.java | 103 - .../jaxws/test/ejb/EJBWSwithAroundInvoke.java | 101 - .../ws/jaxws/test/ejb/GreeterInterceptor.java | 49 - .../jonas/ws/jaxws/test/ejb/JAXWSGreeter.java | 33 - .../jaxws/test/ejb/JAXWSGreeterForWithWM.java | 35 - .../META-INF/wsdl/EJBWSwihtInterceptors.wsdl | 85 - .../META-INF/wsdl/EJBWSwithAroundInvoke.wsdl | 85 - .../jaxws-ejb-webmethod/pom.xml | 26 - .../test/ejb/JAXWSBeanWithWebMethod.java | 91 - .../test/ejb/JAXWSBeanWithoutWebMethod.java | 92 - .../jonas/ws/jaxws/test/ejb/JAXWSGreeter.java | 32 - .../jaxws/test/ejb/JAXWSGreeterForWithWM.java | 10 - .../META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl | 155 - .../wsdl/JAXWSBeanWithoutWebMethod.wsdl | 155 - .../jaxws-pojo-complex/pom.xml | 25 - .../jonas/ws/jaxws/test/pojo/JAXWSBean3.java | 58 - .../ow2/jonas/ws/jaxws/test/pojo/Person.java | 57 - .../ws/jaxws/test/pojo/jaxws/GetPersons1.java | 24 - .../test/pojo/jaxws/GetPersons1Response.java | 35 - .../ws/jaxws/test/pojo/jaxws/GetPersons2.java | 24 - .../test/pojo/jaxws/GetPersons2Response.java | 35 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../WEB-INF/wsdl/JAXWSBean3Service.wsdl | 89 - .../jaxws-pojo-descriptor/pom.xml | 25 - .../main/java/org/ow2/jonas/ejb3/Hello.java | 8 - .../java/org/ow2/jonas/ejb3/HelloBean.java | 24 - .../test/pojo/GreeterLogicalHandler.java | 63 - .../jaxws/test/pojo/GreeterSOAPHandler.java | 96 - .../ws/jaxws/test/pojo/SimpleService.java | 47 - .../test/pojo/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/jonas-web.xml | 11 - .../src/main/webapp/WEB-INF/web.xml | 48 - .../src/main/webapp/WEB-INF/webservices.xml | 34 - .../main/webapp/WEB-INF/wsdl/SService.wsdl | 52 - .../webapp/WEB-INF/wsdl/SimpleService.wsdl | 0 .../jaxws-pojo-handlers/pom.xml | 25 - .../test/handlers/GreeterLogicalHandler.java | 63 - .../test/handlers/GreeterSOAPHandler.java | 100 - .../ws/jaxws/test/handlers/SimpleService.java | 52 - .../test/handlers/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/handlers.xml | 17 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../webapp/WEB-INF/wsdl/SimpleService.wsdl | 52 - .../jaxws-pojo-injection/pom.xml | 25 - .../main/java/org/ow2/jonas/ejb3/Hello.java | 33 - .../jaxws/test/injection/SimpleService.java | 59 - .../injection/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/handlers.xml | 17 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../webapp/WEB-INF/wsdl/SimpleService.wsdl | 52 - .../jaxws-pojo-simple-with-wsdl/pom.xml | 25 - .../ws/jaxws/test/pojo/SimpleService.java | 45 - .../test/pojo/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../webapp/WEB-INF/wsdl/SimpleService.wsdl | 52 - .../jaxws-pojo-simple-without-wsdl/pom.xml | 25 - .../ws/jaxws/test/pojo/SimpleService.java | 45 - .../test/pojo/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../jaxws-pojo-soap-binding/pom.xml | 25 - .../ws/jaxws/test/pojo/SimpleService.java | 49 - .../test/pojo/SimpleServiceInterface.java | 34 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - .../webapp/WEB-INF/wsdl/SimpleService.wsdl | 36 - .../jaxws-pojo-wsProvider/pom.xml | 25 - .../jonas/ws/jaxws/test/CalculatorImpl.java | 116 - .../src/main/webapp/WEB-INF/jonas-web.xml | 10 - .../src/main/webapp/WEB-INF/web.xml | 47 - jonas_tests/jaxws/jaxws-test-base/pom.xml | 58 - jonas_tests/jaxws/jaxws-test-clients/pom.xml | 135 - .../main/java/org/ow2/jonas/ejb3/Hello.java | 33 - .../DispatchAPIWebserviceClientTestCase.java | 135 - .../DynamicProxyWebserviceClientTestCase.java | 87 - .../ws/jaxws/test/EJBClientTestCases.java | 247 -- .../ws/jaxws/test/PojoClientTestCases.java | 453 -- .../jaxws/test/util/JWebServicesTestCase.java | 510 --- .../test/util/SimpleServiceInterface.java | 35 - .../src/main/resources/request1.xml | 23 - jonas_tests/jaxws/pom.xml | 48 - jonas_tests/jonas5_tests.ipr | 254 -- jonas_tests/jonasadmin/build.xml | 175 - .../jonasserver/F_JonasAdminInfoServer.java | 483 --- .../F_JonasAdminResourceDatasource.java | 592 --- .../database/F_JonasAdminDatabase.java | 500 --- .../jonasadmin/test/util/JProperties.java | 533 --- .../test/util/JonasAdminTestCase.java | 909 ---- jonas_tests/junit.bat | 142 - jonas_tests/junit.sh | 154 - jonas_tests/pom.xml | 88 - .../protocols/clientconf/carol.properties | 140 - .../clientconf/traceclient.properties | 46 - .../client/META-INF/application-client.xml | 30 - .../modules/client/resources/jaas.config | 16 - .../protocols/modules/ejbs/build/build.xml | 113 - jonas_tests/protocols/scripts/client.sh | 35 - jonas_tests/samplehttp/build.xml | 139 - jonas_tests/ws/build.xml | 389 -- jonas_tests/ws/etc/apps/time-test.xml | 19 - .../beans/mcontext/BeanAccessorSLR.java | 77 - .../jtests/beans/mcontext/TestMC1SLL.java | 83 - .../jtests/beans/mcontext/TestMC2SLR.java | 83 - .../jtests/beans/time/TimeBeanHandler.java | 122 - .../jonas/jtests/beans/time/TimeBeanSLR.java | 77 - .../jtests/beans/wsclient/WsClient1SLR.java | 105 - .../clients/endpoint/F_TimeEndpoint.java | 137 - .../clients/mbeans/F_WebServicesMBeans.java | 296 -- .../jtests/clients/service/F_AxisService.java | 408 -- .../jtests/clients/service/ServiceRefTLE.java | 28 - .../jonas/jtests/clients/wsgen/A_WsGen.java | 123 - .../jonas/jtests/clients/wsgen/F_WsGen.java | 177 - .../jtests/hello/HelloWsServiceLocator.java | 111 - .../jtests/util/JWebServicesTestCase.java | 454 -- {jonas_doc/plans => plans}/pom.xml | 0 jonas_doc/pom.xml => pom.xml | 0 7618 files changed, 817764 deletions(-) rename jonas_doc/.gitignore => .gitignore (100%) rename jonas_doc/.project => .project (100%) rename jonas_doc/README => README (100%) rename {jonas_doc/core => core}/build.properties (100%) rename {jonas_doc/core => core}/build.xml (100%) rename {jonas_doc/core => core}/olddoc/Admin.html (100%) rename {jonas_doc/core => core}/olddoc/Cmi.html (100%) rename {jonas_doc/core => core}/olddoc/Deployer.html (100%) rename {jonas_doc/core => core}/olddoc/Domain.html (100%) rename {jonas_doc/core => core}/olddoc/JOnASWP.html (100%) rename {jonas_doc/core => core}/olddoc/JOnASWebServices.html (100%) rename {jonas_doc/core => core}/olddoc/MBeans.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Client.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Connector.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Deployment.html (100%) rename {jonas_doc/core => core}/olddoc/PG_EarDeployment.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Entity.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Environment.html (100%) rename {jonas_doc/core => core}/olddoc/PG_J2eeApps.html (100%) rename {jonas_doc/core => core}/olddoc/PG_JmsGuide.html (100%) rename {jonas_doc/core => core}/olddoc/PG_LogModules.html (100%) rename {jonas_doc/core => core}/olddoc/PG_MsgDrvBean.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Packaging.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Security.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Session.html (100%) rename {jonas_doc/core => core}/olddoc/PG_Transaction.html (100%) rename {jonas_doc/core => core}/olddoc/PG_War.html (100%) rename {jonas_doc/core => core}/olddoc/Services.html (100%) rename {jonas_doc/core => core}/olddoc/ant-ejbjar.html (100%) rename {jonas_doc/core => core}/olddoc/clusterd.html (100%) rename {jonas_doc/core => core}/olddoc/clustering.html (100%) rename {jonas_doc/core => core}/olddoc/common.css (100%) rename {jonas_doc/core => core}/olddoc/howto/Clustering.html (100%) rename {jonas_doc/core => core}/olddoc/howto/Firewall.html (100%) rename {jonas_doc/core => core}/olddoc/howto/JMSClustering.html (100%) rename {jonas_doc/core => core}/olddoc/howto/JORAMdistributed_JOnAS_4_1.html (100%) rename {jonas_doc/core => core}/olddoc/howto/JSR160_support.html (100%) rename {jonas_doc/core => core}/olddoc/howto/JonasArchi.html (100%) rename {jonas_doc/core => core}/olddoc/howto/JonasMBeansHowTo.html (100%) rename {jonas_doc/core => core}/olddoc/howto/WebSphereMQ.html (100%) rename {jonas_doc/core => core}/olddoc/howto/Win32Service.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/AutomaticClusterConfiguration.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/ManualClusterConfiguration.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/c-jdbc.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/director.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/mod_jk2_embeddedtomcat.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/mod_jk_embeddedtomcat.html (100%) rename {jonas_doc/core => core}/olddoc/howto/clusterdetails/sequoia.html (100%) rename {jonas_doc/core => core}/olddoc/howto/common.css (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/emb-component.png (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/emb-deps.png (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/mfb.png (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/src/emb-component.svg (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/src/emb-deps.svg (100%) rename {jonas_doc/core => core}/olddoc/howto/emb-images/src/mfb.svg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/JOnASJMX.gif (100%) rename {jonas_doc/core => core}/olddoc/howto/images/cluster1.gif (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Apache.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Archi1.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Archi2.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Archi3.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Archi4.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Archi5.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Architecture.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/EJBCont.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/FullJOnAS.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/JOnASEJB.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/JOnASWeb.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Node.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/Thumbs.db (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/WebCont.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/common.css (100%) rename {jonas_doc/core => core}/olddoc/howto/images/clusterfiles/sampleCluster2Screen.GIF (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/JmsClustering-queues.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/JmsClustering-topics.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/joram.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/joram_ha.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/mdb.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/mdb_config.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/queue.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jmsclustering/topic.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonas_cmp.gif (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonasarch.gif (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg1.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg2.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg3.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg4.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg5.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg6.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg7.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg8.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/images/logo_jonas.jpg (100%) rename {jonas_doc/core => core}/olddoc/howto/install_j2ee.html (100%) rename {jonas_doc/core => core}/olddoc/howto/install_jonas.html (100%) rename {jonas_doc/core => core}/olddoc/howto/ws/sample-deploy.wsdd (100%) rename {jonas_doc/core => core}/olddoc/howto/ws/sample-server-config.wsdd (100%) rename {jonas_doc/core => core}/olddoc/howto/ws/sample-web.xml (100%) rename {jonas_doc/core => core}/olddoc/images/AreaGraph.png (100%) rename {jonas_doc/core => core}/olddoc/images/JonasAdmin.gif (100%) rename {jonas_doc/core => core}/olddoc/images/JonasAreas.png (100%) rename {jonas_doc/core => core}/olddoc/images/WP_distr.gif (100%) rename {jonas_doc/core => core}/olddoc/images/classloaders.png (100%) rename {jonas_doc/core => core}/olddoc/images/cluster1.gif (100%) rename {jonas_doc/core => core}/olddoc/images/clusterd.gif (100%) rename {jonas_doc/core => core}/olddoc/images/clustering.gif (100%) rename {jonas_doc/core => core}/olddoc/images/cmi-cluster-stub.gif (100%) rename {jonas_doc/core => core}/olddoc/images/cmi-jndi.gif (100%) rename {jonas_doc/core => core}/olddoc/images/cmi.gif (100%) rename {jonas_doc/core => core}/olddoc/images/domain_new.gif (100%) rename {jonas_doc/core => core}/olddoc/images/eb_img_31.gif (100%) rename {jonas_doc/core => core}/olddoc/images/favicon.ico (100%) rename {jonas_doc/core => core}/olddoc/images/j2ee.gif (100%) rename {jonas_doc/core => core}/olddoc/images/jcaarch.gif (100%) rename {jonas_doc/core => core}/olddoc/images/jconsole.png (100%) rename {jonas_doc/core => core}/olddoc/images/jonas48repscenarios.jpg (100%) rename {jonas_doc/core => core}/olddoc/images/jonasTree.png (100%) rename {jonas_doc/core => core}/olddoc/images/jonasarch.gif (100%) rename {jonas_doc/core => core}/olddoc/images/logo_jonas.jpg (100%) rename {jonas_doc/core => core}/olddoc/images/pix.gif (100%) rename {jonas_doc/core => core}/olddoc/images/roles1.gif (100%) rename {jonas_doc/core => core}/olddoc/images/sfsb-rep.jpg (100%) rename {jonas_doc/core => core}/olddoc/images/ws_client.jpg (100%) rename {jonas_doc/core => core}/olddoc/images/ws_endpoint.jpg (100%) rename {jonas_doc/core => core}/olddoc/index.html (100%) rename {jonas_doc/core => core}/pom.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/Glossary.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/JSR160_support.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/admindefs.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/adminfunctions.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/adminmbeans.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/admintools.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/adminuse.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/install.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/mejb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/mejbaccess.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/admin/threadStackDump.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/administration_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ant_tasks.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_ejbjar.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_genic.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_jonasbase.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_newjc.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_property.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_serverdeploy.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/anttasks/ant_wsgen.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/clustering-variables.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/configuration/ejb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/configuration/jms.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/configuration/web.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/examples/sampleCluster2.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/examples/sampleCluster3.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/faq/faq.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/management/cluster.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/management/clusterd.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/management/cmi.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/management/domain.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/management/ha.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/principles/clustering.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/principles/management.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/principles/terminology.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/tooling/jasmine.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering/tooling/jkmanager.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/clustering_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/developerguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/algoexample.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/algomodel.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/contents_of_jvm.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/interfaces.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/lazy_lookup.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/load_balanceables.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/logo-cmi.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/managers.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/images/sep_control_service.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/integratorguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/cmi/userguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/command_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/configuration_newjb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/configuration_newjc.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/configuration_raconfig.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/genic.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/jclient.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/jms.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/commands/jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/config/jonas_properties.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/config/jonasbase_conf.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/config/jonasbase_creation.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/config/jonasbase_structure.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/config/jonasroot_structure.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/configuration_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/connector_pg.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/continuous_integration_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deploy/ear.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deploy/ejb2.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deploy/principes.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deploy/war.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deploy/webapps.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployer_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/deployment-plan.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/introduction.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/repositories.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/deployment-plans_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/building.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/code_convention.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/contributing.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/getting_from_svn.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/running.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/developerguide/usingexamples.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/eardeploy.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/advanced_topics.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/building.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/code_convention.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/configuration_file.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/contributing.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/creating_ejbs.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/developerguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/ejb3_introduction.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/getting_from_svn.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/helloworldbean.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/howto/howtos.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/running.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/smart_factory.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/building.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/contribute.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/howto_00.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/introduction.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/packages.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/results.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/running.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/tests/testguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/userguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/easybeans/usingexamples.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ejb2_programmer_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ejb3_programmer_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/essai.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/essai2.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/essaibook.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/getting_started_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_addons.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_auditListening.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_auditPersistence.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_configadmin.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_deployme.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_distributed_joram.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_firewall.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_install_jdbc_driver.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_jndi.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_mbeans.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_packaging.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_services.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_services_on_demand.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_use_cdi.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_use_jaxrs.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_webspheremq.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_win32_service.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/howto_wrapper.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/index.html (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/install/install_j2ee.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/install/install_jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2ee/classloader.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2ee/j2ee-app.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2ee/j2ee-ejb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2ee/j2ee-web.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2eeclient_pg.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/j2eeprogrammerguide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/jaxws_developer_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/jonas-transactions.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/basics-of-classloading.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/classloading-in-jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/configuration.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/glossary.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/tips.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/loaders/tooling.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/log/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/mastering-jonas-classloaders.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/jonas_4_7.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/jonas_4_8.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/jonas_4_9.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/jonas_5_0.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/versionAPI.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration/versionModules.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/migration_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/multitenant_guide.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/protocols/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ra/JDBCRA.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ra/JDBCXML.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/ra/JMSRA.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/security/configsecurity.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/cmi/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/db/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/dbm/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/dbm/jdbcdatasource.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/depmonitor/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/discovery/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ear/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/cmp2_usage.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/db_access_bmp.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/db_access_cmp.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/deploy.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/entity.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/entity_tuning.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/environment.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/mdb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/mdb_tuning.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/packaging.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/security.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/session.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/session_tuning.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb2/transaction.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ejb3/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/ha/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/jaxrpc/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/jaxws/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/jmx/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/jtm/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/mail/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/registry/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/resource/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/resource/connector_packaging.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/resource/connector_principles.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/resource/connector_using.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/resource/jonas-ra.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/security/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/smartclient/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/versioning/about.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/versioning/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/versioning/versioning-ejb.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/versioning/versioning-web.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/wc/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/web/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/web/webcomponent.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/web/webdeploy.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/web/webpackaging.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/wm/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/services/wsdl-publisher/config.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/terminology.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/transactions/introduction.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/transactions/jdbc-resources-in-jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/transactions/transactional-resources.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/transactions/transactions-and-exceptions.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/transactions/transactions-in-jonas.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/variables.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/web_pg.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-en/xmltips.xml (100%) rename {jonas_doc/core => core}/src/docbook/doc-fr/howtoJOnASDocBook.xml (100%) rename {jonas_doc/core => core}/src/pom/jonas-doc-en.pom (100%) rename {jonas_doc/core => core}/src/resources/WEB-INF/jonas-web.xml (100%) rename {jonas_doc/core => core}/src/resources/WEB-INF/web.xml (100%) rename {jonas_doc/core => core}/src/resources/chunk.xsl (100%) rename {jonas_doc/core => core}/src/resources/common.css (100%) rename {jonas_doc/core => core}/src/resources/common.xml (100%) rename {jonas_doc/core => core}/src/resources/fo.xsl (100%) rename {jonas_doc/core => core}/src/resources/footer.xml (100%) rename {jonas_doc/core => core}/src/resources/html.xsl (100%) rename {jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo => core/src/resources/images}/JonasSmall.png (100%) rename {jonas_doc/core => core}/src/resources/images/WP_distr.gif (100%) rename {jonas_doc/core => core}/src/resources/images/admin-webmodule-virtual.png (100%) rename {jonas_doc/core => core}/src/resources/images/admintree.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/Bamboo_WorkDirectory.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/BuildPlan_AntBuildDependency.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/Builders.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/Dashboard_CurrentActivty.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/JDK_tailor.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestBuildPlan_ActivityLog.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestBuildPlan_Dashboard_Run.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestsBuild_Artifacts.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestsBuild_BuilderConfig.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestsBuild_PlanDetail.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/TestsBuild_sourcerepos.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/ant_BuilderConfig.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/ant_createplan.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/jb.config.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/main_tailor.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_BuildArtifacts.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_BuildNotification.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_BuilderConfig.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_CheckoutAndBuilding.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_PlanDetail.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_PostAction.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/maven_sourcerepos_step2.gif (100%) rename {jonas_doc/core => core}/src/resources/images/bamboo/variables.gif (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/1.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/10.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/11.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/12.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/13.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/14.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/15.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/2.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/3.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/4.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/5.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/6.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/7.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/8.png (100%) rename {jonas_doc/core => core}/src/resources/images/callouts/9.png (100%) rename {jonas_doc/core => core}/src/resources/images/caution.png (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Apache.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Archi1.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Archi2.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Archi3.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Archi4.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Archi5.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Architecture.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/EJBCont.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/FullJOnAS.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/JOnASEJB.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/JOnASWeb.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/Node.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/WebCont.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clusterfiles/sampleCluster2Screen.GIF (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/clusterd.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/clusterd.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/clustersolution.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/clustersolution.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster_config.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster_config_2tiers_client.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster_config_2tiers_server.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmi_cluster_config_javaclient.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/cmiv2.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/domain.cmi.cluster.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/domain.jk.cluster.member.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/domain.jk.cluster.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/domainmngt.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/domainmngt.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/easybeans-logo.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/ejbcluster.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/ejbcluster.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/ejbfarm.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/ejbfarm.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/httpcluster.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/httpcluster.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/httpfarm.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/httpfarm.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmscluster_a.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmscluster_a.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmscluster_b.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmscluster_b.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmsfarm_a.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmsfarm_a.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmsfarm_b.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jmsfarm_b.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/jonas48repscenarios.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/logo_jonas2.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/myTomcatCluster.gif (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/registry_replication.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/registry_replication.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sampleCluster2.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sampleCluster2.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sampleCluster3.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sampleCluster3.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jasmine_design.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jasmine_eos.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jkmanager.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_cluster_tab.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_mbeans_attr.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_object_info.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_policies.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_server_info.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_servers.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_strategies.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/sc/jonasadmin_cmi_tab.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.svg (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.png (100%) rename {jonas_doc/core => core}/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.svg (100%) rename {jonas_doc/core => core}/src/resources/images/cmi.gif (100%) rename {jonas_doc/core => core}/src/resources/images/connect.gif (100%) rename {jonas_doc/core => core}/src/resources/images/contextRootCustomization.png (100%) rename {jonas_doc/core => core}/src/resources/images/customizedMBeanServer.png (100%) rename {jonas_doc/core => core}/src/resources/images/defilement.gif (100%) rename {jonas_doc/core => core}/src/resources/images/deployment.gif (100%) rename {jonas_doc/core => core}/src/resources/images/draft.png (100%) rename {jonas_doc/core => core}/src/resources/images/earsample-add-author.png (100%) rename {jonas_doc/core => core}/src/resources/images/earsample-architecture.png (100%) rename {jonas_doc/core => core}/src/resources/images/earsample-authentication.png (100%) rename {jonas_doc/core => core}/src/resources/images/earsample-jpa-model.png (100%) rename {jonas_doc/core => core}/src/resources/images/earsample-list-content.png (100%) rename {jonas_doc/core => core}/src/resources/images/eb_img_31.gif (100%) rename {jonas_doc/core => core}/src/resources/images/editbuttons.gif (100%) rename {jonas_doc/core => core}/src/resources/images/filtering-loader.png (100%) rename {jonas_doc/core => core}/src/resources/images/firstpage.gif (100%) rename {jonas_doc/core => core}/src/resources/images/forgeadmin.gif (100%) rename {jonas_doc/core => core}/src/resources/images/graphTest.png (100%) rename {jonas_doc/core => core}/src/resources/images/home.png (100%) rename {jonas_doc/core => core}/src/resources/images/important.png (100%) rename {jonas_doc/core => core}/src/resources/images/info.png (100%) rename {jonas_doc/core => core}/src/resources/images/jcaarch.gif (100%) rename {jonas_doc/core => core}/src/resources/images/jconsoleStackDumpList.png (100%) rename {jonas_doc/core => core}/src/resources/images/jconsoleStackDumpOperations.png (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/Cluster JMS-JORAM-JOnAS.ppt (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/JmsClustering-queues.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/JmsClustering-queues.ppt (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/JmsClustering-topics.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/JmsClustering-topics.ppt (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/joram.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/joram_ha.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/mdbHa.ppt (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/mdbclustering.png (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/mdbclustering.svg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/queuelb.png (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/queuelb.svg (100%) rename {jonas_doc/core => core}/src/resources/images/jmsclustering/topic.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jmxInterceptor.png (100%) rename {jonas_doc/core => core}/src/resources/images/jndiInterceptor.png (100%) rename {jonas_doc/core => core}/src/resources/images/jonas-classloaders.png (100%) rename {jonas_doc/core => core}/src/resources/images/jonas-header.jpg (100%) rename {jonas_doc/core => core}/src/resources/images/jonasAdminDomain.gif (100%) rename {jonas_doc/core => core}/src/resources/images/jonasAdminStackDump.png (100%) rename {jonas_doc/core => core}/src/resources/images/jonas_doc.gif (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/bundle-class-space.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/console-osgi.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/filtering-classloaders.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/jonas-osgi-modules-libext.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/jonas-osgi-modules-ultra-zoom.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/jonas-osgi-modules.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/jonas-round.png (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/osgi-classloading.gif (100%) rename {jonas_doc/core => core}/src/resources/images/loaders/system-loaders.png (100%) rename {jonas_doc/core => core}/src/resources/images/logoow.gif (100%) rename {jonas_doc/core => core}/src/resources/images/monologExtension.png (100%) rename {jonas_doc/core => core}/src/resources/images/next.png (100%) rename {jonas_doc/core => core}/src/resources/images/note.png (100%) rename {jonas_doc/core => core}/src/resources/images/output.gif (100%) rename {jonas_doc/core => core}/src/resources/images/prev.png (100%) rename {jonas_doc/core => core}/src/resources/images/publish.gif (100%) rename {jonas_doc/core => core}/src/resources/images/service-dependencies.png (100%) rename {jonas_doc/core => core}/src/resources/images/sharedASMultitenantLevel.png (100%) rename {jonas_doc/core => core}/src/resources/images/sharedDatabaseAndSchema.png (100%) rename {jonas_doc/core => core}/src/resources/images/tenantAdminIsolation.png (100%) rename {jonas_doc/core => core}/src/resources/images/tenantContext.png (100%) rename {jonas_doc/core => core}/src/resources/images/tip.png (100%) rename {jonas_doc/core => core}/src/resources/images/up.png (100%) rename {jonas_doc/core => core}/src/resources/images/versioning-ejb-schema.png (100%) rename {jonas_doc/core => core}/src/resources/images/versioning-general-schema.png (100%) rename {jonas_doc/core => core}/src/resources/images/warning.png (100%) rename {jonas_doc/core => core}/src/resources/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/ChangeLog (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/README (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/VERSION (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/catalog.xml (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/docbook.nvdl (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/dtd/docbook.dtd (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/rng/docbook.rnc (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/rng/docbook.rng (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/rng/docbookxi.rnc (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/rng/docbookxi.rng (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/sch/docbook.sch (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/tools/db4-entities.pl (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/tools/db4-upgrade.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/xsd/docbook.xsd (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/xsd/xlink.xsd (100%) rename {jonas_doc/core => core}/tools/docbook-5.0/xsd/xml.xsd (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/AUTHORS (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/BUGS (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/COPYING (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/INSTALL (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/Makefile (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/NEWS (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/NEWS.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/NEWS.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/TODO (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/VERSION (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/catalog.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/addns.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/af.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/am.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ar.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/as.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ast.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/autoidx-kimber.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/autoidx-kosek.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/az.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/bg.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/bn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/bn_in.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/bs.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ca.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/charmap.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/charmap.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/common.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/cs.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/cy.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/da.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/de.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/el.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/en.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/entities.ent (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/eo.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/es.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/et.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/eu.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/fa.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/fi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/fr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ga.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/gentext.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/gl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/gu.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/he.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/hi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/hr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/hu.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/id.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/insertfile.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/is.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/it.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ja.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ka.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/kn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ko.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ky.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/l10n.dtd (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/l10n.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/l10n.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/la.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/labels.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/lt.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/lv.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ml.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/mn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/mr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/nb.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/nds.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/nl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/nn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/olink.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/or.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pa.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pt.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/pt_br.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/refentry.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ro.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ru.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sk.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sq.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sr_Latn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/subtitles.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/sv.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/ta.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/targetdatabase.dtd (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/targets.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/te.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/th.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/titles.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/tl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/tr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/uk.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/utility.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/utility.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/vi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/xh.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/zh.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/zh_cn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/common/zh_tw.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/authors.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/copyright.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/license.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/page.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/reference.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml.included (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/docsrc/warranty.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse3.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/eclipse/profile-eclipse.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/docbook.py (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/extensions/xslt.py (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/admon.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/annotations.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kimber.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kosek.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/autoidx.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/autotoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/axf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/biblio-iso690.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/block.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/callout.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/component.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/division.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/fo.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/footnote.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/fop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/formal.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/glossary.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/highlight.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/htmltbl.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/index.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/info.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/inline.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/keywords.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/lists.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/math.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/pagesetup.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/passivetex.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/pdf2index (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/pi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/profile-docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/qandaset.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/sections.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/table.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/task.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/toc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/verbatim.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/xep.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/fo/xref.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/c-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/cpp-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/csharp-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/delphi-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/ini-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/java-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/javascript-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/m2-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/myxml-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/perl-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/php-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/python-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/ruby-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/tcl-hl.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/highlighting/xslthl-config.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/admon.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/annotations.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/autoidx-kimber.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/autoidx-kosek.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/autoidx.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/autotoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/biblio-iso690.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/biblio.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/block.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/callout.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunk-changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunk-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunkfast.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/chunktoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/component.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/division.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/docbook.css.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/footnote.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/formal.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/glossary.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/highlight.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/html-rtf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/html.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/htmltbl.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/index.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/info.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/inline.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/keywords.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/lists.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/maketoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/manifest.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/math.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/oldchunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/pi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/profile-chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/profile-chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/profile-docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/profile-onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/qandaset.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/sections.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/task.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/toc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/verbatim.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/html/xref.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/annot-close.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/annot-open.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/blank.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/1.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/1.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/1.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/10.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/10.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/10.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/11.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/11.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/11.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/12.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/12.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/12.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/13.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/13.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/13.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/14.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/14.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/14.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/15.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/15.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/15.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/16.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/17.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/18.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/19.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/2.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/2.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/2.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/20.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/21.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/22.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/23.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/24.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/25.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/26.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/27.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/28.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/29.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/3.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/3.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/3.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/30.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/4.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/4.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/4.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/5.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/5.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/5.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/6.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/6.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/6.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/7.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/7.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/7.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/8.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/8.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/8.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/9.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/9.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/9.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/caution.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/caution.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/caution.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/caution.tif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/caution.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/home.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/important.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/next.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/note.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/prev.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/tip.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/up.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/colorsvg/warning.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/draft.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/home.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/home.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/home.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/important.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/important.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/important.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/important.tif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/info.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/next.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/next.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/next.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/note.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/note.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/note.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/note.tif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/prev.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/prev.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/prev.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/tip.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/tip.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/tip.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/tip.tif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/toc-blank.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/toc-minus.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/toc-plus.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/up.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/up.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/up.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/warning.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/warning.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/warning.svg (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/images/warning.tif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/install.sh (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/javahelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/javahelp/profile-javahelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/lib/lib.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/ChangeLog.20020917 (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/block.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/charmap.groff.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/endnotes.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/html-synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/info.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/inline.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/lists.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/other.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/pi.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/profile-docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/manpages/utility.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/abstract.notitle.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/abstract.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/abstract.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/active.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ade.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.path.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admon.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admon.textlabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admonition.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/admonition.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/alignment.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotate.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotation.css.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.close.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.open.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotation.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/annotation.support.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/appendix.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/arbortext.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/article.appendix.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/author.othername.in.middle.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/autolayout-file.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.in.hyperlink.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/axf.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/banner.before.navigation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/base.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/biblioentry.item.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/biblioentry.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bibliography.collection.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bibliography.numbered.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bibliography.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/blockquote.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/blurb.on.titlepage.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.attributes.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.bg.color.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.end.indent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.font.master.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.font.size.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.margin.bottom.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.margin.top.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/body.start.indent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bookmarks.collapse.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bridgehead.in.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/bullet.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.defaultcolumn.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.number.limit.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.path.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.icon.size.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.list.table.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.font.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.number.limit.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.start.character.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/callouts.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chapter.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.append.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.first.sections.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.quietly.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.section.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.sections.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.separate.lots.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.has.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.cdata-section-elements.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-public.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-system.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.encoding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.indent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.media-type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.method.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.omit-xml-declaration.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/chunker.output.standalone.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/citerefentry.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/collect.xref.targets.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.back.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.body.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.front.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.index.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.lot.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.count.titlepage.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.back.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.body.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.front.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.index.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.lot.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/column.gap.titlepage.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/compact.list.item.spacing.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/component.label.includes.part.label.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/component.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/component.titlepage.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/contrib.inline.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/crop.mark.bleed.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/crop.mark.offset.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/crop.mark.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/crop.marks.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/css.decoration.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/current.docid.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/currentpage.marker.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/custom.css.source.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.float.class.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.image.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.table.frame.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.table.rules.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.table.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/default.units.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/dingbat.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/docbook.css.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/docbook.css.source.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/double.sided.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/draft.mode.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/draft.watermark.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/dry-run.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/dynamic.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ebnf.assignment.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ebnf.statement.terminator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.bgcolor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.border.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/eclipse.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.id.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.name.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.provider.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/editedby.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/email.delimiters.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/email.mailto.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/emphasis.propagates.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/entry.propagates.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/epub.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/equation.number.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/equation.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/example.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/exsl.node.set.available.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/feedback.href.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/feedback.link.text.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/feedback.with.ids.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/figure.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/filename-prefix.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/firstterm.only.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foil.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foil.subtitle.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foil.title.master.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foil.title.size.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foilgroup.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/foilgroup.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.column.widths.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.content.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.hr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.rule.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.table.height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footer.table.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footers.on.blank.pages.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.font.size.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.mark.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.number.format.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.number.symbols.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/footnote.sep.leader.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/fop.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/fop1.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/formal.object.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/formal.procedures.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/formal.title.placement.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/formal.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.decoration.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/function.parens.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.css.header.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.id.attributes.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.index.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.legalnotice.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.manifest.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.meta.abstract.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.revhistory.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.section.toc.level.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/generate.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossary.as.blocks.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossary.collection.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossary.sort.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossdef.block.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossdef.list.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossentry.list.item.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossentry.show.acronym.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glosslist.as.blocks.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossterm.auto.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossterm.block.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossterm.list.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossterm.separation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/glossterm.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/graphic.default.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/graphical.admonition.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/graphics.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/graphicsize.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/graphicsize.use.img.src.path.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.column.widths.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.content.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.hr.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.rule.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.table.height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/header.table.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/headers.on.blank.pages.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/hidetoc.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/highlight.default.language.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/highlight.source.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/highlight.xslthl.config.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/home.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.append.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.base.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.cellpadding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.cellspacing.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.cleanup.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.ext.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.extra.head.links.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.multiple.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.types.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.link.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.alias.file.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.back.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.forward.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.hideshow.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.url.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.url.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.url.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.locate.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.next.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.options.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.prev.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.print.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.refresh.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.stop.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.zoom.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.chm.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.default.topic.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.display.progress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.encoding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enhanced.decompilation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enumerate.images.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.force.map.and.alias.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.binary.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.folders.instead.books.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.section.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.show.root.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhk.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.tail.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.window.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.windows.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.map.file.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.only.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.remember.window.position.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.advanced.search.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.favorities.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.menu.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.toolbar.text.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.use.hhk.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.window.geometry.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.characters.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/hyphenate.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/id.warnings.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ignore.image.scaling.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/img.src.path.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.div.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.entry.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.links.to.section.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.method.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.number.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.on.role.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.on.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.page.number.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.prefer.titleabbrev.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.preferred.page.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.range.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/index.term.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/informal.object.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/informalequation.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/informalexample.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/informalfigure.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/informaltable.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/inherit.keywords.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/insert.link.page.number.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/insert.olink.page.number.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/insert.olink.pdf.frag.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/insert.xref.page.number.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/javahelp.encoding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/keep.relative.image.uris.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/keyboard.nav.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.default.language.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.language.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.use.xref.language.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/l10n.lang.value.rfc.compliant.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/label.from.part.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/line-height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/linenumbering.everyNth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/linenumbering.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/linenumbering.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/linenumbering.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/link.mailto.url.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/list.block.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/list.block.spacing.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/list.item.spacing.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.clean.html.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.graphic.viewport.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.index.markup.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.single.year.ranges.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.valid.html.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/make.year.ranges.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.authors.section.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.base.url.for.relative.links.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.break.after.slash.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.charmap.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.english.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.charmap.uri.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.charmap.use.subset.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.copyright.section.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.are.numbered.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.heading.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.font.funcprototype.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.font.funcsynopsisinfo.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.font.links.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.font.table.headings.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.font.table.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.funcsynopsis.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.computer.inlines.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.filenames.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.urls.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.indent.blurbs.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.indent.lists.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.indent.refsect.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.indent.verbatims.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.indent.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.justify.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.base.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.better.ps.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.encoding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.in.separate.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.lang.in.name.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.filename.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.quietly.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.output.subdirs.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.segtitle.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.post.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.pre.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.table.footnotes.divider.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.extra1.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.max.length.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.max.length.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/man.th.title.max.length.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/manifest.in.base.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/manifest.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/manual.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/margin.note.float.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/margin.note.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/margin.note.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/margin.note.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/marker.section.level.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/menuchoice.menu.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/menuchoice.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/minus.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/monospace.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/monospace.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.font.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/multiframe.bottom.bgcolor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/multiframe.navigation.height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/multiframe.top.bgcolor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/multiframe.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nav.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nav.table.summary.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navbgcolor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navbodywidth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.path.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navig.showtitles.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/navtocwidth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/next.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/no.home.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/no.next.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/no.prev.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/no.toc.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/no.up.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nominal.image.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nominal.image.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nominal.table.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/nongraphical.admonition.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/normal.para.spacing.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.base.uri.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.debug.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.doctitle.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.fragid.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.lang.fallback.sequence.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.outline.ext.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.pubid.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.resolver.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/olink.sysid.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/orderedlist.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/othercredit.like.author.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/output-root.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/output.indent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/overlay.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/overlay.logo.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/overlay.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.height.portrait.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.margin.bottom.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.margin.inner.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.margin.outer.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.margin.top.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.orientation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.width.portrait.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/page.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/pages.template.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/paper.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/para.propagates.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/part.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/passivetex.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/pgwide.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/phrase.propagates.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/pixels.per.inch.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/plus.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/points.per.em.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/preface.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/prefer.internal.olink.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/preferred.mediaobject.role.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/prev.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/procedure.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/process.empty.source.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/process.source.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.arch.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.attribute.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.audience.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.condition.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.conformance.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.lang.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.os.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.revision.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.revisionflag.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.role.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.security.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.status.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.userlevel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.value.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.vendor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/profile.wordsize.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/punct.honorific.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.defaultlabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.in.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.inherit.numeration.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.nested.in.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level1.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level2.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level3.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level4.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level5.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level6.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qanda.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/qandadiv.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/rebuild-all.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refclass.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.name.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.fallback.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.meta.get.quietly.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.pagebreak.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.source.fallback.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.enabled.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.version.suppress.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/refentry.xref.manvolnum.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/reference.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/region.after.extent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/region.before.extent.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.cell.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/revhistory.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/root.filename.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/root.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/rootid.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/runinhead.default.title.end.punct.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/runinhead.title.end.punct.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/running.foot.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sans.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/saxon.callouts.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/saxon.character.representation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/saxon.linenumbering.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/saxon.tablecolumns.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/script.dir.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.max.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.container.element.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.label.includes.component.label.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level1.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level2.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level3.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level4.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level5.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.level6.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level1.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level2.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level3.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level4.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level5.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.level6.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/section.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/segmentedlist.as.table.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sequential.links.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/show.comments.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/show.foil.number.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/show.revisionflag.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/showtoc.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/side.float.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sidebar.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/sidebar.title.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/simplesect.in.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/slide.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/slide.title.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/slides.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/slides.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/spacing.paras.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/speakernote.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/subscript.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/superscript.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/suppress.footer.navigation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/suppress.header.navigation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/suppress.homepage.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/suppress.navigation.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/symbol.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.borders.with.css.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.color.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.thickness.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.cell.padding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.entry.padding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.format.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.symbols.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.footnote.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.color.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.thickness.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.spacer.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/table.table.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/tablecolumns.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/target.database.document.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/targets.filename.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/template.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/tex.math.delims.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/tex.math.file.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/tex.math.in.alt.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/text.home.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/text.next.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/text.prev.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/text.toc.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/text.up.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/textbgcolor.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/textdata.default.encoding.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/textinsert.extension.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/title.font.family.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/title.margin.left.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/titlefoil.html.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.bg.color.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.blank.graphic.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.blank.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.blank.text.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.hide.show.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.html.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.indent.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.line.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.list.type.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.margin.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.max.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.graphic.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.text.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.row.height.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.section.depth.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.graphic.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.text.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/toc.width.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ua.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ulink.footnotes.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.chars.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ulink.show.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/ulink.target.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/up.image.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.embed.for.svg.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.id.as.filename.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.id.function.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.local.olink.style.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.role.as.xrefstyle.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.role.for.mediaobject.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/use.svg.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.blocks.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.table.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.max.termlength.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.break.after.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/verbatim.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/wordml.template.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/writing.mode.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xbCollapsibleLists.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xbDOM.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xbLibrary.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xbStyle.js.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xep.extensions.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xep.index.item.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xref.label-page.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xref.label-title.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xref.properties.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xref.title-page.separator.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/params/xref.with.number.and.title.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/profile-mode.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/profile.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/strip-attributes.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/profiling/xsl2profile.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks-spec.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.dtd (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2ooo.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2pages.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wordml.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise2sections.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/pages2normalise.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/sections-spec.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/sections2blocks.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/specifications.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/template-pages.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/template.dot (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/template.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/roundtrip/wordml2normalise.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/CTOCWidget.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/overlay.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-default.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-frames.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-plain.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-table.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-w3c.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.css (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/ua.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbCollapsibleLists.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDOM.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDebug.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbLibrary.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-css.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-nn4.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-not-supported.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle.js (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/fo/plain.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/active/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/arrow.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/hidetoc.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/inactive/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/plus.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/pointer.png (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/showtoc.gif (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/graphics/toc/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/css.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/default.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/flat.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/frames.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/jscript.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/plain.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/slides-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/tables.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/vslides.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/html/w3c.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/htmlhelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/default.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/keynote/xsltsl/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/default.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/css.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/default.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/flat.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/frames.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/jscript.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/plain.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/slides-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/tables.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/vslides.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/slides/xhtml/w3c.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/titlepage.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/template/titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.ns.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.DocBook (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.combine (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.docParam (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/LICENSE (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/build.properties (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/build.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docs/content/ch01.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docs/favicon.ico (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docs/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/readme.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/common/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/content/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/favicon.ico (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/webhelp.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/autolayout.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/chunk-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/chunk-tabular.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/chunk-website.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/head.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/makefile-dep.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/olink.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/param.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/rss.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/tabular.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/toc-tabular.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/toc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/website-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/website-targets.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/website.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/website/xbel.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/annotations.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kimber.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kosek.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-ng.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autotoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio-iso690.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/callout.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunkfast.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunktoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/component.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/division.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.css.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/footnote.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/formal.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/glossary.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/highlight.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html-rtf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/htmltbl.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/inline.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/keywords.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/maketoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/manifest.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/oldchunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/qandaset.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/sections.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.templates.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/verbatim.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/admon.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/annotations.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kimber.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kosek.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-ng.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/biblio-iso690.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/biblio.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/block.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/callout.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-changebars.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-common.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/component.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/division.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.css.xml (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/footnote.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/formal.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/glossary.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/graphics.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/highlight.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/html.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=A (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=D (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/index.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/info.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/inline.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/keywords.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/lists.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/manifest.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/math.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/oldchunker.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/param.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk-code.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/profile-docbook.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/profile-onechunk.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/refentry.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/sections.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/synop.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/table.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/task.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.templates.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl (100%) rename {jonas_doc/core => core}/tools/docbook-xsl-ns-1.76.1/xhtml/xref.xsl (100%) rename {jonas_doc/core => core}/tools/fop-0.95/KEYS (100%) rename {jonas_doc/core => core}/tools/fop-0.95/LICENSE (100%) rename {jonas_doc/core => core}/tools/fop-0.95/NOTICE (100%) rename {jonas_doc/core => core}/tools/fop-0.95/README (100%) rename {jonas_doc/core => core}/tools/fop-0.95/build/fop.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/conf/fop.xconf (100%) rename {jonas_doc/core => core}/tools/fop-0.95/fop (100%) rename {jonas_doc/core => core}/tools/fop-0.95/fop.bat (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/README.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/avalon-framework-4.2.0.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/avalon-framework.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/avalon-framework.NOTICE.TXT (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/batik-all-1.7.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/batik.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/batik.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-io-1.3.1.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-io.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-io.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-logging-1.0.4.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-logging.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/commons-logging.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/serializer-2.7.0.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/serializer.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/serializer.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan-2.7.0.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan.regexp.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xalan.runtime.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xerces.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xercesImpl-2.7.1.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xercesImpl.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xercesImpl.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-1.3.04.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext-1.3.04.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-documentation.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-software.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.LICENSE.sac.html (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis-ext.README.dom.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis.LICENSE-SAX.html (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-documentation.html (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-software.html (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xml-apis.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xmlgraphics-commons.LICENSE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/lib/xmlgraphics-commons.NOTICE.txt (100%) rename {jonas_doc/core => core}/tools/fop-0.95/status.xml (100%) rename {jonas_doc/core => core}/tools/maven-ant-tasks-2.1.3.jar (100%) rename {jonas_doc/core => core}/tools/win32/iconv.dll (100%) rename {jonas_doc/core => core}/tools/win32/libexslt.dll (100%) rename {jonas_doc/core => core}/tools/win32/libxml2.dll (100%) rename {jonas_doc/core => core}/tools/win32/libxslt.dll (100%) rename {jonas_doc/core => core}/tools/win32/xsltproc.exe (100%) rename {jonas_doc/core => core}/tools/win32/zlib1.dll (100%) delete mode 100644 jonas/.checkstyle delete mode 100644 jonas/.checkstyle_eclipse_config delete mode 100644 jonas/.classpath delete mode 100644 jonas/.gitignore delete mode 100644 jonas/.project delete mode 100644 jonas/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jonas/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 jonas/.settings/org.maven.ide.eclipse.prefs delete mode 100644 jonas/LicenceAgreement.txt delete mode 100644 jonas/README delete mode 100644 jonas/ReleaseNotes.txt delete mode 100644 jonas/assemblies/ant-tasks/pom.xml delete mode 100644 jonas/assemblies/ant-tasks/src/main/resources/README delete mode 100644 jonas/assemblies/client-jar/pom.xml delete mode 100644 jonas/assemblies/client-jar/src/main/resources/README delete mode 100644 jonas/assemblies/examples/pom.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/build.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/valid-xhtml11.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat delete mode 100755 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/valid-xhtml11.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html delete mode 100644 jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java delete mode 100644 jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml delete mode 100644 jonas/assemblies/pom.xml delete mode 100644 jonas/assemblies/profiles/addons/minimal/pom.xml delete mode 100644 jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml delete mode 100644 jonas/assemblies/profiles/addons/pom.xml delete mode 100644 jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml delete mode 100644 jonas/assemblies/profiles/legacy/full/pom.xml delete mode 100644 jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml delete mode 100644 jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml delete mode 100644 jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml delete mode 100644 jonas/assemblies/profiles/legacy/jaxrs/pom.xml delete mode 100644 jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml delete mode 100644 jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml delete mode 100644 jonas/assemblies/profiles/legacy/minimal/pom.xml delete mode 100644 jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml delete mode 100644 jonas/assemblies/profiles/legacy/pom.xml delete mode 100644 jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml delete mode 100644 jonas/assemblies/profiles/pom.xml delete mode 100644 jonas/assemblies/profiles/src/main/assembly/common-component.xml delete mode 100644 jonas/assemblies/profiles/src/main/resources/logs/README delete mode 100644 jonas/clientbuild.xml delete mode 100644 jonas/eclipse-settings/checkstyle-convention.xml delete mode 100644 jonas/eclipse-settings/eclipse-java-code-formatter.xml delete mode 100644 jonas/eclipse-settings/jonas-style-convention.xml delete mode 100644 jonas/eclipse-settings/plugin-checkstyle-config.xml delete mode 100644 jonas/itests/applications/classloader/pom.xml delete mode 100644 jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java delete mode 100644 jonas/itests/applications/classloader/src/main/resources/metadata.xml delete mode 100644 jonas/itests/applications/connection-leaks/pom.xml delete mode 100644 jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java delete mode 100644 jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/assemblies/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/api/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/beans/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/pom.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/jaxws-add/pom.xml delete mode 100644 jonas/itests/applications/jaxws-sample/pom.xml delete mode 100644 jonas/itests/applications/jndi/pom.xml delete mode 100644 jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java delete mode 100644 jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java delete mode 100644 jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml delete mode 100644 jonas/itests/applications/jsf/jsf-1.x/pom.xml delete mode 100644 jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml delete mode 100644 jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp delete mode 100644 jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp delete mode 100644 jonas/itests/applications/jsf/jsf-2.0/pom.xml delete mode 100644 jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java delete mode 100644 jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml delete mode 100644 jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml delete mode 100644 jonas/itests/applications/jsf/pom.xml delete mode 100644 jonas/itests/applications/multitenant/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java delete mode 100755 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T2.ear delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html delete mode 100644 jonas/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war delete mode 100644 jonas/itests/applications/osgi/osgi-datasource/pom.xml delete mode 100644 jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java delete mode 100644 jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java delete mode 100644 jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java delete mode 100644 jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java delete mode 100644 jonas/itests/applications/osgi/pom.xml delete mode 100644 jonas/itests/applications/pom.xml delete mode 100644 jonas/itests/applications/versioning/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/.classpath delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/.project delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/root-war.war delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp delete mode 100644 jonas/itests/applications/versioning/src/main/resources/secured-war/secured-war.war delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/.classpath delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html delete mode 100644 jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp delete mode 100644 jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx delete mode 100644 jonas/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war delete mode 100644 jonas/itests/cargo/iiop/pom.xml delete mode 100644 jonas/itests/cargo/irmi/pom.xml delete mode 100644 jonas/itests/cargo/jetty6/pom.xml delete mode 100644 jonas/itests/cargo/jetty8/pom.xml delete mode 100644 jonas/itests/cargo/jrmp/pom.xml delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java delete mode 100644 jonas/itests/cargo/jrmp/src/test/resources/jonas-290.war delete mode 100644 jonas/itests/cargo/jrmp/src/test/resources/jonas-292.jar delete mode 100644 jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-empty-value-test.xml delete mode 100644 jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml delete mode 100644 jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml delete mode 100644 jonas/itests/cargo/pom.xml delete mode 100644 jonas/itests/cargo/safe-startup/pom.xml delete mode 100644 jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java delete mode 100644 jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml delete mode 100644 jonas/itests/cargo/security/pom.xml delete mode 100644 jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java delete mode 100644 jonas/itests/cargo/tomcat6/pom.xml delete mode 100644 jonas/itests/intravm/pom.xml delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java delete mode 100644 jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java delete mode 100644 jonas/itests/intravm/src/test/resources/index.html delete mode 100644 jonas/itests/intravm/src/test/resources/test.html delete mode 100644 jonas/itests/osgi/base/pom.xml delete mode 100644 jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java delete mode 100644 jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java delete mode 100644 jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java delete mode 100644 jonas/itests/osgi/equinox/pom.xml delete mode 100644 jonas/itests/osgi/felix/pom.xml delete mode 100644 jonas/itests/osgi/knopflerfish/pom.xml delete mode 100644 jonas/itests/osgi/pom.xml delete mode 100644 jonas/itests/osgi/src/test/configuration/testng-osgi.xml delete mode 100644 jonas/itests/osgi/src/test/configuration/testng.xml delete mode 100644 jonas/itests/pom.xml delete mode 100644 jonas/modules/apis/jonas-deployment-api/pom.xml delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/DTDs.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDeploymentDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDescriptionGroupDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBLocalRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEnvEntryDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IJNDIEnvRefsGroupDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IMessageDestinationRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IPersistenceUnitRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceEnvRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IServiceRefDesc.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/Schemas.java delete mode 100644 jonas/modules/apis/jonas-deployment-api/src/main/resources/META-INF/jonas-deployment-api.bnd delete mode 100644 jonas/modules/apis/jonas-management-api/pom.xml delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/IBaseManagement.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/J2EEMBeanAttributeInfo.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/ManagementException.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/cluster/api/ICluster.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/clusterdaemon/api/IClusterdaemon.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/container/api/IContainerManagement.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/domain/api/IDomain.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServer.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServerManagement.java delete mode 100644 jonas/modules/apis/jonas-management-api/src/main/resources/META-INF/jonas-management-api.bnd delete mode 100644 jonas/modules/apis/jonas-services-api/pom.xml delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/config/IAddonConfig.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/IAddonDeployable.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/ISortableDeployable.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployer.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployerLog.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonLogEntry.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonStructure.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmInterface.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/audit/AuditService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/cmi/CmiService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/ConfigurationManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/DeploymentPlanDeployer.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/datasource/DataSourceService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/db/DBService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/dbm/DataBaseService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/depmonitor/MonitoringService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryEvent.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryState.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarServiceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/EJBService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/JTimerHandleInfo.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/TimerHandleDelegate.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb3/IEasyBeansService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ha/HaService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsAdministration.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/Interceptor.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JManagementIdentifier.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JmxService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceChecker.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerInfo.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/ResourceCheckpoints.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jsf/JSFService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailServiceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/factory/JavaMail.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/DeployableState.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/J2EEServerService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/ServiceManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/multitenant/MultitenantService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactory.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactoryDelegate.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JNamingManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingStructure.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServerProperties.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServiceProperties.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/registry/RegistryService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/Rar.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceServiceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resourcemonitor/ResourceMonitorService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/SecurityService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResource.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResourceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/lib/HashPassword.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/principal/JUser.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ConfigService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/JonasAlreadyStartedException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/Service.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ServiceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientServiceBase.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/Enlistable.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TxResourceManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningServiceBase.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VirtualContextJMXInterface.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/IOnDemandHttpService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerServiceException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/CleanTask.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/DeployerLogException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/IDeployerLog.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/LogEntry.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workmanager/WorkManagerService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/IJAXRPCService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/WSException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/EndpointType.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IJAXWSService.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSRequest.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSResponse.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceDeploymentManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceEndpoint.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesContainer.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesModule.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortIdentifier.java delete mode 100755 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortMetaData.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/WSException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IEJBWebserviceEndpoint.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/ISecurityConstraint.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IWebDeployer.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/ContextNamingStrategyException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingInfo.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingStrategy.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/AbsWSDLPublisher.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublicationInfo.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublishableDefinition.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisher.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherException.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherManager.java delete mode 100644 jonas/modules/apis/jonas-services-api/src/main/resources/META-INF/jonas-services-api.bnd delete mode 100644 jonas/modules/apis/pom.xml delete mode 100644 jonas/modules/client-bootstrap/pom.xml delete mode 100644 jonas/modules/client-bootstrap/src/main/java/org/ow2/jonas/client/boot/Bootstrap.java delete mode 100644 jonas/modules/client-bootstrap/src/main/resources/META-INF/client-bootstrap.bnd delete mode 100644 jonas/modules/client/core/pom.xml delete mode 100644 jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainer.java delete mode 100644 jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainerException.java delete mode 100644 jonas/modules/client/core/src/main/java/org/ow2/jonas/client/naming/ClientInitialContextFactory.java delete mode 100644 jonas/modules/client/core/src/main/jonas-resources/bin/jclient delete mode 100755 jonas/modules/client/core/src/main/jonas-resources/bin/jclient.bat delete mode 100644 jonas/modules/client/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/cp/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/jonas-ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/dm/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/jonas-ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/ds/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/jonas-ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionManagerImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionPoolMCFImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionRequestInfoImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceMCFImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverManagerMCFImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverWrapper.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MCFData.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionFactoryImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MetaDataImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAExceptionUtils.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAMCFImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAResourceImpl.java delete mode 100644 jonas/modules/ee-components/jca/jdbc/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/xa/pom.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/jonas-ra.xml delete mode 100644 jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/ra.xml delete mode 100644 jonas/modules/ee-components/jca/pom.xml delete mode 100644 jonas/modules/ee-components/jca/scout/glue/pom.xml delete mode 100644 jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JAXRResourceAdapter.java delete mode 100644 jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JConnectionFactory.java delete mode 100644 jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/ManagedConnectionFactoryImpl.java delete mode 100644 jonas/modules/ee-components/jca/scout/plans/pom.xml delete mode 100644 jonas/modules/ee-components/jca/scout/pom.xml delete mode 100644 jonas/modules/ee-components/jca/scout/rar/pom.xml delete mode 100644 jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/jonas-ra.xml delete mode 100644 jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/ra.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/pom.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplicationLocales.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplyTopAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/EditTopAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JettyObjectName.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/Jlists.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JmsConnFact.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminException.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminJmx.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasBaseAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasServerItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasTreeBuilder.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/LogOutAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/MBeanTreeBuilder.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ServiceName.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetUpTreeAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetupWhereAreYouAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TopForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TreeAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/WhereAreYou.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CatalinaBaseAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItemByPort.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CreateConnectorAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/EditConnectorAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ItemsConnectorsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ListConnectorsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/SaveCatalinaAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ApplyJonasServersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterDaemonItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterdServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterApplyModifAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterConfigureServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterModifyAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditAllClusterDaemonsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterDaemonAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterdVmMemoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/HaltJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/MemoryForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ServerConfigModifiedAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartStandbyJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StopJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/servlet/MemoryGraphRemoteHostServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ApplyCmiAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterAttribute.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterPropertyAttribute.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObject.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/LBAttribute.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Protocol.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Provider.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/BeanComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ItemsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/LabelValueByLabelComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItemByName.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ObjectNameComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/TargetItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyUploadAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/BaseDeployAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DeployForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DomainDeployForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDeployAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDomainDeployAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditRemoveAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditUploadAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/OperationInProgressException.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/RemoveForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/UploadForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmMoveAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/DomainForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/EditDomainAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/HaltJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ItemsServersForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServerItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServersMoveAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ModuleItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterDaemonAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartStandbyJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterDaemonAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopStandbyJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemDestination.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemMdb.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/LogUtils.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/MqObjectNames.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesUtil.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/Property.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/BasicJonasServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/CmiRegistryResource.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJmxServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJonasServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJvmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditRegistryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditServletServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JmxServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourcesForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerRunGCAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerStopAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JvmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ListRegistryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ServletServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramReaderAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramWriterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramQueueAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramReaderAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramTopicAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramWriterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyUserAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramUserAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItemByNameComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramBaseAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramPlatformAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramQueueAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramRemoteServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramServerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramTopicAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramUserAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ExportRepository.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemBase.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestination.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestinationByName.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemServer.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemUser.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramAdapterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramDestinationForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalQueueForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalTopicForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramPlatformForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramQueueForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramReaderWriterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramRemoteServerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramServersForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramTopicForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramUserForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/MonitoringDestForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ReloadJoramAdmin.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmDestinationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmUsersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveDestinationsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramDestinationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramUsersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveUsersForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyCatalinaAccessLoggerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggingJonasAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/BaseLoggerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaAccessLogValveForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaValveForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditCatalinaAccessLoggerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditLoggingJonasAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ListLoggersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggerItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggingJonasForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/TopicLevel.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ApplyMbeanFilteringAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListJ2eeMBeansAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanAttributesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanDetailsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanOperationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeansAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListOwnerMBeansAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListUnknownMBeansAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/MbeanFilteringForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyCmiClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMemoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMonitoringAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyStackDumpAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/BaseClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ClusterdAttribute.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DisplayNodeInfoAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMemoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMonitoringAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditStackDumpAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryGraphServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MonitoringForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/NodeInfoForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/PingAllJonasServersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StackDumpForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StartAllJonasServersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StopAllJonasServersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerThreadCountAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerTransactionsCountAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ServerCurrentTxServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ThreadCountServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BegunTransactionsServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesReceivedByConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesSentByConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionFailuresJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJDBCResourceServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJDBCResourceServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEJBServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEntityBeanServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfMDBServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBFServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBLServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentUsedMemoryServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/EditMemoryServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ErrorCountByConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgDeliverServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgReceiveServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgDeliverServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgReceiveServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/LoadCPUServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ProcessingTimeByConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJDBCResourceServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RequestCountByConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJDBCResourceServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ThreadBusyConnectorTomcatServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalCommittedTransactionsServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalExpiredTransactionsServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalRolledbackTransactionsServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJCAConnectionServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJDBCResourceServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WorkersServlet.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/utils/GraphUtils.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyConfirmDestinationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDatasourcePropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMimePartMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplySessionMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DatasourcePropertiesForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItemByNameComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDatasourcePropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMimePartMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditSessionMailFactoryPropertiesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ItemsDestinationsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListDatasourcesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListJmsResourcesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListMailFactoriesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryPropertiesForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/SaveDestinationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyCreateResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyTemplateCreateResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmRealmsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyDatasourceRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyGroupMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyLdapRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRealmsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRoleMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyUserMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseSecurityAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ClearCacheAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/DatasourceRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditDatasourceRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditGroupMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditLdapRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmGroupsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmRolesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmUsersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewGroupMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewRoleMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewUserMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditRoleMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditSecurityCatalinaRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditUserMemoryRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/FactoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/GroupMemoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsMemoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsRealmsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/LdapRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ListRealmsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/MemoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/RoleMemoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/SaveRealmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/UserMemoryRealmForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/EditServiceSecurityAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ListServicesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ModuleForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItemByNameComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StartJonasServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StopJonasServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyContainersStatisticAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyEjbContainersStatisticAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppCatalinaAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppJettyAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppVirtualCatalinaAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebsConfirmAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/BaseWebAppAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItemByFile.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EarForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerStatisticAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEarAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEjbCsStatisticAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWarAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppCatalinaAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppJettyAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EjbContainersStatisticForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListAppContainersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListContainersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListWebContainersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/SelectedItemsForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerEjbsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WarForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppCatalinaForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItemByPathContext.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppJettyForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppVirtualCatalinaForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceStatAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItemByNameComparator.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceStatAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ListDatabasesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/ApplyDepmonitorConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/DepMonitorServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/EditServiceDepmonitorAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceStartMasterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/EditServiceDiscoveryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ApplyEjbSessionConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbEntityAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbMessageAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionSblAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbDependency.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbEntityForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbMessageForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbSessionForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ExecuteEjbAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/CfForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/EditJmsServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/JmsServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListConnectionFactoriesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListQueuesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListTopicsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentConnectionFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentQueueAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentTopicAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/QueueForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/TopicForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyConfirmXaResourceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyJtmConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditJtmServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionMonitorAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionRecoveryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionStatisticAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ItemsXaResourceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceMonitorForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceRecoveryForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceStatisticForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceXAResourceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ListXaResourceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetCountersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetRecoveryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetTransactionsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxRecovery.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxXaresource.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplyMimePartMailFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplySessionMailFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMimePartMailFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditSessionMailFactoryAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListMimePartMailFactoriesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListSessionMailFactoriesAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterCFAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAOAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterASAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFStatAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterStatAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ListResourceAdaptersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterAOForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterASForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterCFForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItemByFile.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/EditSmartclientServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/SmartclientServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/ApplyVersioningConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/EditVersioningServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/VersioningServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/HandlersDetailsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ListWebServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/PortComponentsDetailsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ViewHandlersAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ViewPortComponentsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/WebServiceDetailsAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/JOnASProvider.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/HandlerItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/InitParamItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/PortComponentItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/ServiceImplBean.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/WebServiceDescriptionItem.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/ApplyWorkcleanerConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/EditWorkcleanerServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/WorkcleanerServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/ApplyWorkmanagerConfigurationAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/EditWorkmanagerServiceAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/WorkmanagerServiceForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ApplyArchiveConfigAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ArchiveConfigAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ArchiveConfigAdvancedAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ArchiveConfigForm.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ArchiveConfigSelectAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ArchiveUtilAction.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/XMLToFormUtil.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/AttributeRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/ElementRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictionsFactory.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCAttributeRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCElementRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCSchemaRestrictions.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridBaseTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridColTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridRowTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTableBaseTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasButtonTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridColTitleTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTitleTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridRowTitleTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTitleTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasSubmitTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/LabelValueBean.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelSeparatorTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/RefreshTreeTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabsTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TitleContentTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeBuilder.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControl.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlNode.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlRenderTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/WhereAreYouTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XMLEditorTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XmlFileTag.java delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources.properties delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources_fr.properties delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/jonas-ra-xml.vm delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ra-xml.vm delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestFont.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestNavigator.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/controls.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/flex/services-config.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/granite/granite-config.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/sj.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-bean.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-config.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-html.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-logic.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-template.tld delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/begin.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/blank.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connector.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectors.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectorsConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/DaemonProxyClusterDisplayServerConfig.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/addServerCd.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/daemonProxyClusterModify.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/graph/vmMemory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/serversConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiClusterInfo.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiInfo.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiObjectInfo.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiProtocolInfo.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiServerInfo.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/begin.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/end.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deploy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deployConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeploy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployProgress.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainUndeployConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/remove.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/removeConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/upload.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/uploadResult.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServer.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServerCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/clustercmi.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/domain.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirmMove.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/end.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/error.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/framemain.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/frameright.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/globalerror.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/button/GraphButton.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/button/button.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot1.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot5.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/BalJonasGreen.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/BalJonasTree.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Database.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Datasource.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/FolderBalJonas.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/JonasQuestion.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bean.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bullet.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/caution.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/connector.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/connectors.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomainManage.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_ear.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_jar.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_rar.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_war.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_datasource.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_ear.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_jar.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_rar.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_war.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployed.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployed_not.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/domain_jonas.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/ear.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/help.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/info.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jar.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_connector.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_queue.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_topic.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/logger_http.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/logger_jonas.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/loggers.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_mime.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_session.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbean.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbeandomain.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbeans.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbeantype.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/monitoring.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/protocol.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/resourceAdapter.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/resources.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security_database.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security_ldap.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security_memory.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_application.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_database.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_discovery.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_ejb.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_jms.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_mail.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_resource.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_security.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_smartclient.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_transaction.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_versioning.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_web.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_workcleaner.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_workmanager.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/services.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/tag_blue.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/tag_green.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/war.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/jonasAdmin.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSadSmall.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSadSmall_Orange.jpg delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSmall_White.jpg delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/balJonasAdmin.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/balJonasAdminLogin.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/jonasAdmin.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/jonasAdminModified.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/jonasAdminWelcomeMessage.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/logoOW2.png delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tableftF.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tabrightF.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_first.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_last.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_middle.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close_first.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close_last.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close_middle.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_first.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_last.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_middle.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/noline.gif delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/index.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/ConnectionFactoryEdit.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAdd.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAddConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDelete.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDeleteConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationEdit.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Destinations.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnect.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnectPlatform.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/MdbEdit.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Mdbs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jmxserver.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasserver.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasversions.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jvm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/listRegistry.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/registry.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/servletServer.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addreader.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addwriter.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createdestination.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createuser.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramadapter.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdestinations.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdeststatistics.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramplatform.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueue.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuereaders.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuewriters.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremotedestinations.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremoteserver.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramservers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopic.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicreaders.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicwriters.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramusers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramxml.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/queueUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeDestinationsConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeUsersConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/topicUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/catalinaAccessLogger.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggersConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingJonas.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingView.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/login.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listJ2eeMBeans.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanAttributes.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanOperations.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanProperties.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeans.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listOwnerMBeans.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listUnknownMBeans.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/displaynode.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverGraphs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverTransactionCount.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/memory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/monitoring.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/stackDump.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatCluster.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatMember.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/createDestination.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasourceProperties.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasources.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployDatasource.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployMailFactory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/destinationsConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/jmsResources.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactories.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactoryProperties.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mimePartFactoryProperties.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/sessionFactoryProperties.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createJDBCResourceAdapter.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createOtherResourceAdapter.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createResourceAdapter.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/script/jonasAdmin.js delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/confirmActionMemoryRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/datasourceRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/groupMemoryRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/ldapRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmGroups.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmRoles.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmUsers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realms.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsStopped.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/roleMemoryRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/securityCatalinaRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/userMemoryRealm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/appContainers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/cfUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/confirmActionXaResource.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/container.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerEjbs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerStatistic.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/databases.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasource.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceStatistics.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/depmonitorService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/discovery.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ear.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earJars.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earRars.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earWars.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earXmlDeployment.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejb.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainerService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainersStatistic.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbDependency.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbEntity.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbMessage.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbSession.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbVirtual.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactories.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsDestinations.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueue.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueues.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopic.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopics.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmServiceStopped.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mailService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactories.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartMailFactoryUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/queueUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10Stats.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AO.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AOs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AS.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15ASs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CF.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFStats.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFs.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarPoolStatistics.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarStatistics.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy10.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy15.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rars.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/security.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/securityStopped.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/services.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactories.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactory.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionMailFactoryUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/smartclientService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/topicUsedBy.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionMonitor.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionRecovery.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionStatistic.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/versioningService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/war.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warJonasXml.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warServlets.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warWebXml.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webApp.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppCatalina.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppJetty.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppVirtualCatalina.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webContainers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workcleanerService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workmanagerService.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/handlersDetails.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/portComponentsDetails.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewHandlers.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewPortComponents.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDescriptions.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDetails.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/xaresourceRecovery.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/iepngfix.htc delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/jonasAdmin.css delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/top.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/tree.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/welcomeContent.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfig.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAdvanced.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAjax.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigConfirm.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigSelect.jsp delete mode 100644 jonas/modules/ee-components/jonas-admin/plans/pom.xml delete mode 100644 jonas/modules/ee-components/jonas-admin/pom.xml delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/pom.xml delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/index.jsp delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/jetty.gif delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/logoOW2.png delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow2_jonas.css delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow_jonas_logo.gif delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/style.css delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/tomcat.gif delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/valid-xhtml11.png delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/vcss.png delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/plans/pom.xml delete mode 100644 jonas/modules/ee-components/jonas-ctxroot/pom.xml delete mode 100644 jonas/modules/ee-components/mejb/core/pom.xml delete mode 100644 jonas/modules/ee-components/mejb/core/src/main/java/mejb/ListenerRegistrationImpl.java delete mode 100644 jonas/modules/ee-components/mejb/core/src/main/java/mejb/ManagementBean.java delete mode 100644 jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagement.java delete mode 100644 jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagementHome.java delete mode 100644 jonas/modules/ee-components/mejb/plans/pom.xml delete mode 100644 jonas/modules/ee-components/mejb/pom.xml delete mode 100644 jonas/modules/ee-components/pom.xml delete mode 100644 jonas/modules/generators/jonas-genbase/pom.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/GenBaseException.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/NoJ2EEWebservicesException.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/AbsArchive.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Application.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Archive.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Client.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyApplication.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyWebApp.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Ejb.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbJar.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbRefModule.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/FileArchive.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/J2EEArchive.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/JarArchive.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WebApp.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsClient.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsEndpoint.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/AbsGenerator.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/Config.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactories.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsApplicationModifier.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsModifierFactory.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/ArchiveModifier.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/ArchiveStorer.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/DirStorer.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/JarStorer.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/TempRepository.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/XMLUtils.java delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/META-INF/jonas-generators-base.bnd delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/I18n.properties delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/application.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/context.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/jonas-web.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web-jetty.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web.xml delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/generator/I18n.properties delete mode 100644 jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/utils/I18n.properties delete mode 100644 jonas/modules/generators/jonas-genclientstub/pom.xml delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGen.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGenException.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/Generator.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/GeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/AbsArchiveModifier.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ApplicationModifier.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ClientModifier.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/EjbJarModifier.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ModifierFactory.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/WebAppModifier.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/wrapper/ClientGenStubWrapper.java delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/resources/META-INF/jonas-generators-clientstubs.bnd delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/generator/I18n.properties delete mode 100644 jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/modifier/I18n.properties delete mode 100644 jonas/modules/generators/jonas-genic/pom.xml delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/BeanSources.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenIC.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICException.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICParameters.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/Source.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VContextFactory.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcCMRField.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcField.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcMethod.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParam.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParamWhere.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VelocityMonologLogger.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/wrapper/GenicServiceWrapper.java delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/META-INF/jonas-genic.bnd delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/GenICMacros.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2CoherenceItf.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmpJdbc.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHandle.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocal.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocalHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityRemote.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpoint.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpointHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocal.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocalHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulRemote.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocal.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocalHome.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessRemote.vm delete mode 100644 jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/README delete mode 100644 jonas/modules/generators/jonas-wsgen/pom.xml delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGen.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGenException.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/ContextDDModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/DeploymentDescModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebJettyDDModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebServicesDDModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsClientDDModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsEndpointDDModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GeneralWSFinder.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GenericWSFinder.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/J2EEWebServicesFinder.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/ServiceRefFinder.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/WebServicesXmlFinder.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/Generator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/GeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/SecurityGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsClientGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsEndpointGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisGeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsClientGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsEndpointGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/JVelocity.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VContextFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcArrayMapping.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBean.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBeanMapping.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHandler.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHeader.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcInitParam.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcPortComponent.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcTypeMapping.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASEmitter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASGeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASInterfaceServiceImplWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceImplWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASWSDL2Java.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSGeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsClientGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsEndpointGenerator.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/JOnASJ2EEWebServicesContext.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/ServiceReferenceContextImpl.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/FullEmitter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/JOnASWSEmitter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASClientGeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASEndpointGeneratorFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEClientDeployWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEServerDeployWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASDeployWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSBindingWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceImplWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceIntfWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASTypeWriter.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFHandler.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFInitParam.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFSOAPHeader.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ApplicationModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ClientModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/EjbJarModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ModifierFactory.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WebAppModifier.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WsGenModifierConstants.java delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/META-INF/jonas-generators-wsgen.bnd delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/I18n.properties delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/I18n.properties delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_client.vm delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_endpoint.vm delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/ews/I18n.properties delete mode 100644 jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/modifier/I18n.properties delete mode 100644 jonas/modules/generators/pom.xml delete mode 100644 jonas/modules/generators/raconfig/pom.xml delete mode 100644 jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfig.java delete mode 100644 jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfigException.java delete mode 100644 jonas/modules/generators/raconfig/src/main/resources/META-INF/jonas-generators-raconfig.bnd delete mode 100644 jonas/modules/libraries/externals/javaee-api/pom.xml delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/META-INF/javaee-api.bnd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_0.xsd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_1.xsd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.dtd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.xsd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd delete mode 100644 jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_1.xsd delete mode 100644 jonas/modules/libraries/externals/jaxp-ri/pom.xml delete mode 100644 jonas/modules/libraries/externals/jaxp-ri/src/main/resources/META-INF/jaxp-ri.bnd delete mode 100644 jonas/modules/libraries/externals/monolog/pom.xml delete mode 100644 jonas/modules/libraries/externals/monolog/src/main/java/org/ow2/jonas/monolog/MonologExtension.java delete mode 100644 jonas/modules/libraries/externals/monolog/src/main/resources/META-INF/monolog.bnd delete mode 100644 jonas/modules/libraries/externals/monolog/src/main/resources/metadata.xml delete mode 100755 jonas/modules/libraries/externals/neethi/pom.xml delete mode 100755 jonas/modules/libraries/externals/neethi/src/main/resources/META-INF/neethi.bnd delete mode 100644 jonas/modules/libraries/externals/pom.xml delete mode 100644 jonas/modules/libraries/externals/saaj-ri/pom.xml delete mode 100644 jonas/modules/libraries/externals/saaj-ri/src/main/java/com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.java delete mode 100644 jonas/modules/libraries/externals/saaj-ri/src/main/resources/META-INF/saaj-ri.bnd delete mode 100644 jonas/modules/libraries/externals/ws-security/pom.xml delete mode 100644 jonas/modules/libraries/externals/ws-security/src/main/resources/META-INF/ws-security.bnd delete mode 100644 jonas/modules/libraries/externals/xmlbeans/pom.xml delete mode 100644 jonas/modules/libraries/externals/xmlbeans/src/main/resources/META-INF/xmlbeans.bnd delete mode 100644 jonas/modules/libraries/jonas-audit-jms/pom.xml delete mode 100644 jonas/modules/libraries/jonas-audit-jms/src/main/java/org/ow2/jonas/audit/jms/interceptor/JMSClientInterceptor.java delete mode 100644 jonas/modules/libraries/jonas-audit-jms/src/main/resources/META-INF/jonas-audit-jms.bnd delete mode 100644 jonas/modules/libraries/jonas-bootstrap-loader/pom.xml delete mode 100644 jonas/modules/libraries/jonas-bootstrap-loader/src/main/java/org/ow2/jonas/lib/bootstrap/loader/JClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-bootstrap-loader/src/main/resources/META-INF/jonas-bootstrap-loader.bnd delete mode 100644 jonas/modules/libraries/jonas-commons/pom.xml delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/Bootstrap.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JFileFilter.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JProp.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JURLs.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/LoaderManager.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/RemoteClassLoaderSpi.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManager.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManagerException.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarList.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarListException.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/ExecutionResult.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/IExecution.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/RunnableHelper.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/AbsModuleClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ClientClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/EjbJarClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/FilteringClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/IMetaInfLocator.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScanner.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScannerBundleTrackerCustomizer.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/OSGiClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/SimpleWebappClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ThreadContextClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/WebappClassLoader.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/DirURLFactory.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/JarURLFactory.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/URLFactory.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/DirLocator.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/JarFileLocator.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/Locator.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/xml/FiltersDefinition.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsConfigServiceImpl.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsServiceImpl.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Base64.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/BeanNaming.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Cmd.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ConfigurationConstants.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/DirFilter.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Env.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/I18n.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JJarFile.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JModule.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JNDIUtils.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JonasObjectName.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JoramObjectName.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Log.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ModuleNamingUtils.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/NetUtils.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/PropDump.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/XMLSerializer.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/windows/WinSysEnv.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsCleanTask.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsDeployerLog.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/DeployerLog.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/LogEntryImpl.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/resources/META-INF/jonas-commons.bnd delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-commons/src/main/resources/org/ow2/jonas/lib/loader/mapping/classloader-default-filtering-mapping.xml delete mode 100644 jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/cpmanager/JarListTestCase.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/loader/FilteringClassLoaderTestCase.java delete mode 100644 jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters-wildcard-forbidden.xml delete mode 100644 jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters.xml delete mode 100644 jonas/modules/libraries/jonas-commons/src/test/resources/test-default-filters.xml delete mode 100644 jonas/modules/libraries/jonas-deployment/pom.xml delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/lib/ClientDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/ApplicationClientRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasClientRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasSecurityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/wrapper/ClientManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/ApplicationClient.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasClient.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasSecurity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfiguration.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfigurationException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/lib/ClusterDaemonConfigurationManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ClusterDaemonRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/DiscoveryRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ServerRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/ClusterDaemon.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Discovery.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Server.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/AbsDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DescriptionGroupDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbLocalRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EnvEntryDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/HandlerDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/JndiEnvRefsGroupDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/MessageDestinationRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/PersistenceUnitRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceEnvRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/SecurityRoleRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JDigester.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JEntityResolverWithDigester.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JErrorHandler.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/NoTrimCallMethodRule.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/AbsDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/DeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JEntityResolver.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSInput.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSResourceResolver.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JavaType.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/AnonymousQNameRule.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbLocalRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvEntryRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvironmentRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/HandlerRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/IconRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/InitParamRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JRuleSetBase.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasCustomParamRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEjbRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEnvironmentRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasInitParamRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasPortComponentRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceEnvRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasServiceRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/PortComponentRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/QNameRule.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceEnvRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/RunAsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceQnameRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceRefRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SoapHeaderRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/WsdlPortRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/util/ResourceHelper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsDescriptionElement.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsElement.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsEnvironmentElement.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasEnvironmentElement.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasParam.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/DescriptionGroupXml.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbLocalRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Element.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EnvEntry.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Handler.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Icon.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/InitParam.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JLinkedList.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JndiEnvRefsGroupXml.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasCallProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasEjbRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasInitParam.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasJndiEnvRefsGroupXml.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestination.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestinationRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasParam.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasPortComponentRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResource.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResourceEnv.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasServiceRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasStubProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestination.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestinationRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PersistenceUnitRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PortComponentRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Qname.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceEnvRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/RunAs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRole.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRoleRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ServiceRef.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/TopLevelElement.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMap.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMapException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/lib/DomainMapManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterDaemonRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/DomainRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/LocationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ServerRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/wrapper/DomainManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Cluster.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/ClusterDaemon.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Domain.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Location.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Server.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/JonasEarSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/lib/EarDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ApplicationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasApplicationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRoleMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ModuleRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/SecurityRoleRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/WebRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/wrapper/EarManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Application.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasApplication.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasSecurity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Module.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRole.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRoleMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Web.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigPropertyDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/BeanDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/CommonMethodDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb1_1.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb2.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationshipRoleDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityBmpDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp1Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp2Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmpDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp1Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp2Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ExcludeListDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldJdbcDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MessageDrivenDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodCmp2Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodJdbcCmp1Desc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodPermissionDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatefulDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatelessDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAbstractSchemaName.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAggregateSelectExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticFactor.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticTerm.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBetweenExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCmpPathExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberDeclaration.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionValuedPathExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTComparisonExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalFactor.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalTerm.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTDatetimeExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEJBQL.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEmptyCollectionComparisonExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEntityBeanExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFloatingPointLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFromClause.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningNumerics.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningStrings.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentificationVariable.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentifier.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInputParameter.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIntegerLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLikeExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitClause.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTNullComparisonExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByClause.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByItem.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTPath.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTRangeVariableDeclaration.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectClause.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedCmrPathExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedPathExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringExpression.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringLiteral.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTWhereClause.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.jjt delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQLConstants.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQLTokenManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQLTreeConstants.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQLVisitor.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/JJTEJBQLState.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/Node.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ParseException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/README delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/SimpleCharStream.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/SimpleNode.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/Token.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/TokenMgrError.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/bnf_ejbql_2_0.txt delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/bnf_ejbql_2_1.txt delete mode 100755 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/build.sh delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/lib/EjbDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/lib/util/ClusterUtil.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ActivationConfigPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ActivationConfigRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/AsContextRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/AssemblyDescriptorRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ClusterArrayPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ClusterPropertiesRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ClusterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ClusterSimplePropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/CmpFieldJdbcMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/CmpFieldRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/CmrFieldRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ContainerTransactionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/EjbJarRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/EjbRelationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/EjbRelationshipRoleRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/EnterpriseBeansRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/EntityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ExcludeListRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/FinderMethodJdbcMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/ForeignKeyJdbcMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/IorSecurityConfigRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JdbcMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasEjbJarRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasEjbRelationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasEjbRelationshipRoleRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasEntityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasInitParamRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasMessageDrivenDestinationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasMessageDrivenRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasMethodRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasRunAsMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/JonasSessionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/MessageDrivenDestinationRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/MessageDrivenRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/MethodParamsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/MethodPermissionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/MethodRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/PoolRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/QueryMethodRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/QueryRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/RelationshipRoleSourceRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/RelationshipsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/SasContextRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/SecurityIdentityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/SessionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/TransportConfigRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/rules/UseCallerIdentityRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/wrapper/EjbManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/ActivationConfig.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/ActivationConfigProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/AsContextMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/AssemblyDescriptor.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/CmpField.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/CmpFieldJdbcMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/CmrField.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/CommonEjb.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/CommonEjbXml.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/ContainerTransaction.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/EjbJar.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/EjbRelation.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/EjbRelationshipRole.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/EnterpriseBeans.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/Entity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/ExcludeList.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/FinderMethodJdbcMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/ForeignKeyJdbcMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/IorSecurityConfigMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JdbcMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasCommonEjb.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasCommonEjbXml.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasEjbJar.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasEjbRelation.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasEjbRelationshipRole.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasEntity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasInitParam.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasMessageDriven.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasMessageDrivenDestination.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasMethod.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasRunAsMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/JonasSession.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/MessageDriven.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/MessageDrivenDestination.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/Method.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/MethodParams.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/MethodPermission.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/Query.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/QueryMethod.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/RelationshipRoleSource.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/Relationships.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/SasContextMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/SecurityIdentity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/Session.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/TransportConfigMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/xml/UseCallerIdentity.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ActivationspecDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/AdminobjectDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/AuthenticationMechanismDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ConfigPropertyDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ConnectionDefinitionDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ConnectorDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ConnectorDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ConnectorSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/IconDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/InboundResourceadapterDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JdbcConnParamsDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasActivationspecDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasAdminobjectDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasConfigPropertyDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasConnectionDefinitionDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasConnectorDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasConnectorDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasConnectorSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/JonasSecurityMappingDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/LicenseDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/MessageadapterDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/MessagelistenerDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/OutboundResourceadapterDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/PoolParamsDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/RarDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/RarDeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/RequiredConfigPropertyDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/ResourceadapterDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/SecurityEntryDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/SecurityPermissionDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/TmConfigPropertyDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/TmParamsDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/Utility.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/lib/RarDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/ActivationspecRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/AdminobjectRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/AuthenticationMechanismRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/ConfigPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/ConnectionDefinitionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/ConnectorRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/IconRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/InboundResourceadapterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JdbcConnParamsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasActivationspecRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasAdminobjectRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasConfigPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasConnectionDefinitionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasConnectorRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/JonasSecurityMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/LicenseRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/MessageadapterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/MessagelistenerRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/OutboundResourceadapterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/PoolParamsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/RequiredConfigPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/ResourceadapterRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/SecurityEntryRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/SecurityPermissionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/TmConfigPropertyRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/rules/TmParamsRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/wrapper/RarManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Activationspec.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Adminobject.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/AuthenticationMechanism.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/ConfigProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/ConnectionDefinition.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Connector.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Icon.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/InboundResourceadapter.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JdbcConnParams.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasActivationspec.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasAdminobject.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasConfigProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasConnectionDefinition.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasConnector.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/JonasSecurityMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/License.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Messageadapter.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Messagelistener.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/OutboundResourceadapter.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/PoolParams.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/RequiredConfigProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/Resourceadapter.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/SecurityEntry.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/SecurityPermission.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/TmConfigProperty.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/rar/xml/TmParams.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/JonasWebAppDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/JonasWebAppSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/MethodDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/MethodsDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/Pattern.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/PatternEntry.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/SecurityConstraintListDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/SecurityRoleDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/ServletDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/TransportGuaranteeDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/WebAppDTDs.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/WebAppSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/WebContainerDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/WebContainerDeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/lib/WarDeployableMetadataFactoryHolder.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/lib/WebDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/AuthConstraintRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/DistributableRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/JonasServletRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/JonasWebAppRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/SecurityConstraintRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/ServletMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/ServletRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/UserDataConstraintRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/WebAppRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/rules/WebResourceCollectionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/wrapper/WebManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/AuthConstraint.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/JonasServlet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/JonasWebApp.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/SecurityConstraint.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/Servlet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/ServletMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/UserDataConstraint.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/WebApp.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/web/xml/WebResourceCollection.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/JaxRpcPortComponentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/JaxrpcMappingSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/JonasWsSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/MappingFile.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/PortComponentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/PortComponentDescFactory.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/PortComponentRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/SSBPortComponentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/ServiceDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/ServiceRefDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/WSDLFile.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/WSDeploymentDesc.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/WSDeploymentDescException.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/WsSchemas.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/lib/MappingFileManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/lib/WSDeploymentDescManager.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/AnonymousTypeQnameRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/JavaWsdlMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/JavaXmlTypeMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/JonasPortComponentRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/JonasWebserviceDescriptionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/JonasWebservicesRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/PackageMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/PortComponentRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/RootTypeQnameRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/ServiceImplBeanRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/VariableMappingRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/WebserviceDescriptionRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/rules/WebservicesRuleSet.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/wrapper/MappingFileManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/wrapper/WSManagerWrapper.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/JavaWsdlMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/JavaXmlTypeMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/JonasPortComponent.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/JonasWebserviceDescription.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/JonasWebservices.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/PackageMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/PortComponent.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/ServiceImplBean.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/VariableMapping.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/WebserviceDescription.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ws/xml/Webservices.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/META-INF/jonas-deployment.bnd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/XMLSchema.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/application-client_1_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/application-client_1_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/application-client_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/application-client_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_3_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_4_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_4_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/client/jonas-client_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/clusterd/jonas-clusterd_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/clusterd/jonas-clusterd_5_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/clusterd/jonas-clusterd_5_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/datatypes.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/domain/jonas-domain_4_7.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/domain/jonas-domain_4_9.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/domain/jonas-domain_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/domain/jonas-domain_5_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/application_1_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/application_1_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/application_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/application_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/jonas-application_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/jonas-application_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ear/jonas-application_5_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_1_1.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_2_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_2_0_ws.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_2_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_3_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/ejb-jar_3_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_4.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_5.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_2_ws.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3_1.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_10.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_6.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_7.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_4_8.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_5_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_5_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/j2ee_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/j2ee_web_services_client_1_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/javaee_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/javaee_6.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/javaee_web_services_client_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/javaee_web_services_client_1_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas-clusterd_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas-clusterd_5_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas-deployment-plan_0_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas_j2ee_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas_j2ee_4_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas_j2ee_4_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas_j2ee_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/jonas_j2ee_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/connector_1_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/connector_1_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_3_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_4_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_4_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/rar/jonas-connector_5_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/configure_1_1.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/configure_1_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_2_6.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_3_1.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_3_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_4_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_4_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_5_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jonas-web-app_5_3.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jsp_2_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jsp_2_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/jsp_2_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-app_2_2.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-app_2_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-app_2_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-app_2_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-app_3_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-common_3_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-facesconfig_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/web/web-jsptaglibrary_2_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/I18n.properties delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/I18n_fr.properties delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/j2ee_jaxrpc_mapping_1_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/j2ee_jaxrpc_mapping_1_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/j2ee_web_services_1_0.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/j2ee_web_services_1_1.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/javaee_web_services_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/javaee_web_services_client_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas-webservices_3_3.dtd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_4_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_4_1_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_4_1_4.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_4_2.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_4_5.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/ws/jonas_j2ee_web_services_5_0.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/main/resources/org/ow2/jonas/deployment/xml.xsd delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/client/tests/ClientDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/client/tests/JonasClientDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/domain/tests/DomainMapTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/ear/tests/EarDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/ejb/tests/EJBDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/ejb/tests/JonasEJBDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/rar/tests/JonasRarDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/rar/tests/RarDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/tests/AbsDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/web/tests/JonasWebDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/web/tests/WebDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/ws/tests/JonasWsDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-deployment/src/test/java/org/ow2/jonas/deployment/ws/tests/WsDeploymentTest.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/pom.xml delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/src/main/java/org/ow2/jonas/lib/svc/JHandleIIOP.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/src/main/java/org/ow2/jonas/lib/svc/JHomeHandleIIOP.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/src/main/java/org/ow2/jonas/lib/svc/JMetaData.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/src/main/java/org/ow2/jonas/lib/svc/Utility.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container-svc/src/main/resources/META-INF/jonas-ejb-container-svc.bnd delete mode 100644 jonas/modules/libraries/jonas-ejb-container/pom.xml delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/BeanFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/CollectionEnum.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/Container.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/EJBInvocation.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/EntityCounters.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/ExceptionHelper.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/HomeFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JContainer.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityHandle.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityLocal.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityLocalHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntityRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitch.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchCRC.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchCRU.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchCRW.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchCS.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchCST.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchDB.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JEntitySwitchRO.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JHandleDelegate.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JHomeHandle.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JLocal.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JLocalHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JMdbEndpointFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JMdbFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JMessageDrivenBean.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JMessageEndpoint.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JMessageEndpointProxy.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JObjectInputStream.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JServiceEndpoint.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JServiceEndpointHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionHandle.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionLocal.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionLocalHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JSessionSwitch.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatefulContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatefulFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatefulInputStream.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatefulOutputStream.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatefulSwitch.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatelessContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatelessFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JStatelessSwitch.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JTimer.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JTimerHandle.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JTimerService.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JWrapper.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/JavaType.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/MarshallTool.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/MonitoringEvent.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/PermissionManager.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/PrincipalFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/Protocols.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/RequestCtx.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/Swapper.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/TraceEjb.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/TxListener.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/CMP2Bean.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/Coder.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/Collection.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/CollectionElement.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/FloatPkFieldMapping.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/GenClassElement.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/GenClassImpl.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/GenClassListener.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/JEntityContext.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/JormFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/JormType.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/MapperManager.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/MedorFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/PObject.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/PObjectHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/RdbFactory.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/RdbMappingBuilder.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/jorm/Set.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlAbstractVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlLimitVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlLimiterRange.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlOrderByVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlQueryFilterVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlQueryTreeHolder.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlSelectVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/EjbqlVariableVisitor.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/SqlDateFieldMapping.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/SqlTimeFieldMapping.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/java/org/ow2/jonas/lib/ejb21/sql/SqlTimestampFieldMapping.java delete mode 100644 jonas/modules/libraries/jonas-ejb-container/src/main/resources/META-INF/jonas-ejb-container.bnd delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/pom.xml delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/EntityBeanRefImpl.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepEntityHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepEntityLocal.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepEntityLocalHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepEntityRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulInputStream.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulLocal.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulLocalHome.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulObjectId.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulOutputStream.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatefulRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepStatelessRemote.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/JRepUtil.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/java/org/ow2/jonas/lib/ejb21/ha/StatefulBeanRefImpl.java delete mode 100644 jonas/modules/libraries/jonas-ejb2.1-ha/src/main/resources/META-INF/jonas-ejb2.1-ha.bnd delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/pom.xml delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/J2EEServer.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/J2EEServerMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/JavaVm.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/LogManager.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/LogManagerMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/MBeansRegistration.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogBuffer.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogBufferMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogManagement.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogManagementMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogNotificationListener.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogRecordComparator.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/log/RecordFeeder.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/java/org/ow2/jonas/lib/jmbeans/monitoring/MemoryMonitoring.java delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/resources/META-INF/jonas-mbeans-for-addons.bnd delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-mbeans-for-addons/src/main/resources/org/ow2/jonas/lib/jmbeans/mbeans-descriptors.xml delete mode 100644 jonas/modules/libraries/jonas-mbeans/pom.xml delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/J2EEServer.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/J2EEServerMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/JavaVm.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/LogManager.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/LogManagerMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/MBeansRegistration.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogBuffer.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogBufferMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogManagement.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogManagementMBean.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogNotificationListener.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/LogRecordComparator.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/log/RecordFeeder.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/java/org/ow2/jonas/lib/jmbeans/monitoring/MemoryMonitoring.java delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/resources/META-INF/jonas-mbeans.bnd delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-mbeans/src/main/resources/org/ow2/jonas/lib/jmbeans/mbeans-descriptors.xml delete mode 100644 jonas/modules/libraries/jonas-naming/pom.xml delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/ComponentContext.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/ComponentNameParser.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/SingletonComponentContextFactory.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/SingletonNamingManager.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/URLFactory.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/java/javaURLContext.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/java/org/ow2/jonas/lib/naming/java/javaURLContextFactory.java delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/resources/META-INF/jonas-naming.bnd delete mode 100644 jonas/modules/libraries/jonas-naming/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/pom.xml delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/DeployableEnumeration.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/RequireJOnASServicesHandler.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/ServiceItem.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/ServiceManagerImpl.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/ServiceTracker.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/java/org/ow2/jonas/lib/service/manager/ServiceUtil.java delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/resources/META-INF/jonas-service-manager-for-addons.bnd delete mode 100644 jonas/modules/libraries/jonas-service-manager-for-addons/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-service-manager/pom.xml delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/DeployableEnumeration.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/RequireJOnASServicesHandler.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/ServiceItem.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/ServiceManagerImpl.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/ServiceTracker.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/java/org/ow2/jonas/lib/service/manager/ServiceUtil.java delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/resources/META-INF/jonas-service-manager.bnd delete mode 100644 jonas/modules/libraries/jonas-service-manager/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-shell/pom.xml delete mode 100644 jonas/modules/libraries/jonas-shell/src/main/java/org/ow2/jonas/shell/internal/JOnASPromptProvider.java delete mode 100644 jonas/modules/libraries/jonas-shell/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/jonas-timer/pom.xml delete mode 100644 jonas/modules/libraries/jonas-timer/src/main/java/org/ow2/jonas/lib/timer/TimerEvent.java delete mode 100644 jonas/modules/libraries/jonas-timer/src/main/java/org/ow2/jonas/lib/timer/TimerEventListener.java delete mode 100644 jonas/modules/libraries/jonas-timer/src/main/java/org/ow2/jonas/lib/timer/TimerManager.java delete mode 100644 jonas/modules/libraries/jonas-timer/src/main/java/org/ow2/jonas/lib/timer/TraceTimer.java delete mode 100644 jonas/modules/libraries/jonas-timer/src/main/resources/META-INF/jonas-timer.bnd delete mode 100644 jonas/modules/libraries/jonas-version/pom.xml delete mode 100644 jonas/modules/libraries/jonas-version/src/main/java/org/ow2/jonas/Version.java delete mode 100644 jonas/modules/libraries/jonas-version/src/main/resources/META-INF/jonas-version.bnd delete mode 100644 jonas/modules/libraries/management/domain/pom.xml delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/AuthenticationInformation.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/DeployAction.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/DomainMonitor.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/J2EEDomain.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/BaseCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/BaseClusterMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/cmi/CmiCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/cmi/CmiClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/cmi/CmiClusterMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/cmi/CmiClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/cmi/CmiClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ha/EjbHaCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ha/EjbHaClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ha/EjbHaClusterMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ha/EjbHaClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/ha/EjbHaClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/jk/JkCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/jk/JkClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/jk/JkClusterMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/jk/JkClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/jk/JkClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/logical/LogicalCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/logical/LogicalClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/logical/LogicalClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/logical/LogicalClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/tomcat/TomcatCluster.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/tomcat/TomcatClusterFactory.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/tomcat/TomcatClusterMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/tomcat/TomcatClusterMember.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/cluster/tomcat/TomcatClusterMemberMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/ConnectorUtils.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/JMXProxy.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/clusterd/ClusterDaemonProxy.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/clusterd/ClusterDaemonProxyMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/server/ServerProxy.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/server/ServerProxyMBean.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/java/org/ow2/jonas/lib/management/domain/proxy/server/ServerProxyProperties.java delete mode 100644 jonas/modules/libraries/management/domain/src/main/resources/META-INF/jonas-domain.bnd delete mode 100644 jonas/modules/libraries/management/extensions/pom.xml delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/AdminException.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/AdminHelper.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/AdminJmxHelper.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/BaseManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/BaseObjectName.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/ConnectorItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/JonasManagementRepr.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/LocalManagementContext.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/NameItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/RealmItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/RealmItemByNameComparator.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/CatalinaObjectName.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/J2EEObjectNames.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/J2eeMbeanItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/MbeanItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/ObjectNameItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/base/mbean/OwnerMbeanItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/cluster/ClusterManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/clusterdaemon/ClusterdaemonManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/container/ContainerManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/container/ejb/EjbItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/container/ejb/EjbItemByNameComparator.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/domain/DomainManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/manager/ManagementEntryPoint.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/server/ServerItem.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/server/ServerManagement.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/server/ServerMonitoring.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/util/ConnectorUtils.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/java/org/ow2/jonas/lib/management/extensions/util/FileManagementUtils.java delete mode 100644 jonas/modules/libraries/management/extensions/src/main/resources/META-INF/jonas-management-extensions.bnd delete mode 100644 jonas/modules/libraries/management/javaee/pom.xml delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/apache/commons/modeler/ManagedBean.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEDeployedObject.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEDeployedObjectMBean.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEManagedObject.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEManagedObjectMBean.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEModule.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEModuleMBean.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEResource.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEServerState.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2EEServiceState.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/J2eeObjectName.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/JSR77ManagementIdentifier.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/java/org/ow2/jonas/lib/management/javaee/ManagedObject.java delete mode 100644 jonas/modules/libraries/management/javaee/src/main/resources/META-INF/jonas-management-javaee.bnd delete mode 100644 jonas/modules/libraries/management/pom.xml delete mode 100644 jonas/modules/libraries/management/reconfig/pom.xml delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/IConfigurationActuator.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/IConfigurationData.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/PropertiesConfigurationData.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/ReconfigException.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/ReconfigManager.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/ReconfigManagerMBean.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/XMLConfigurationData.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/actuator/BaseConfigurationActuator.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/actuator/PropertiesConfigurationActuator.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/java/org/ow2/jonas/lib/management/reconfig/actuator/XMLConfigurationActuator.java delete mode 100644 jonas/modules/libraries/management/reconfig/src/main/resources/META-INF/jonas-management-reconfig.bnd delete mode 100644 jonas/modules/libraries/management/services/pom.xml delete mode 100644 jonas/modules/libraries/management/services/src/main/java/org/ow2/jonas/lib/management/services/JOnASServiceModelMBean.java delete mode 100644 jonas/modules/libraries/management/services/src/main/java/org/ow2/jonas/lib/management/services/ReconfigNotifications.java delete mode 100644 jonas/modules/libraries/management/services/src/main/resource/META-INF/jonas-management-services.bnd delete mode 100644 jonas/modules/libraries/management/services/src/main/resource/org/ow2/jonas/lib/management/services/mbeans-descriptors.xml delete mode 100644 jonas/modules/libraries/pom.xml delete mode 100644 jonas/modules/libraries/security/auth/pom.xml delete mode 100644 jonas/modules/libraries/security/auth/src/main/java/org/ow2/jonas/lib/security/auth/JGroup.java delete mode 100644 jonas/modules/libraries/security/auth/src/main/java/org/ow2/jonas/lib/security/auth/JPrincipal.java delete mode 100644 jonas/modules/libraries/security/auth/src/main/java/org/ow2/jonas/lib/security/auth/JRole.java delete mode 100644 jonas/modules/libraries/security/auth/src/main/java/org/ow2/jonas/lib/security/auth/JSigned.java delete mode 100644 jonas/modules/libraries/security/auth/src/main/java/org/ow2/jonas/lib/security/auth/JSubject.java delete mode 100644 jonas/modules/libraries/security/auth/src/main/resources/META-INF/jonas-security-auth.bnd delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/pom.xml delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2ClientInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2Const.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2Initializer.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2InterceptorException.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2IorInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/Csiv2ServerInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/ORBHelper.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/SecurityContextHelper.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/initializer/SecurityContextInitializer.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/iiop/initializer/SecurityContextInitializerException.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/interceptors/iiop/CorbaClientSecurityInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/interceptors/iiop/CorbaServerSecurityInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/interceptors/iiop/SecurityInitializer.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/java/org/ow2/jonas/security/interceptors/iiop/SecurityInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/resources/META-INF/jonas-sec-interceptors-iiop.bnd delete mode 100644 jonas/modules/libraries/security/interceptors/iiop/src/main/resources/metadata.xml delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/pom.xml delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/ClientSecurityInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/SecurityInitializer.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/SecurityServiceContext.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/ServerSecurityInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/ctxcheck/CtxCheckConfig.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/ctxcheck/Initializer.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/java/org/ow2/jonas/security/interceptors/jrmp/ctxcheck/ServerInterceptor.java delete mode 100644 jonas/modules/libraries/security/interceptors/jrmp/src/main/resources/META-INF/jonas-sec-interceptors-jrmp.bnd delete mode 100644 jonas/modules/libraries/security/interceptors/pom.xml delete mode 100644 jonas/modules/libraries/security/jacc-handlers/pom.xml delete mode 100644 jonas/modules/libraries/security/jacc-handlers/src/main/java/org/ow2/jonas/lib/security/jacc/handlers/JPolicyContextHandler.java delete mode 100644 jonas/modules/libraries/security/jacc-handlers/src/main/java/org/ow2/jonas/lib/security/jacc/handlers/JPolicyContextHandlerCurrent.java delete mode 100644 jonas/modules/libraries/security/jacc-handlers/src/main/java/org/ow2/jonas/lib/security/jacc/handlers/JPolicyContextHandlerData.java delete mode 100644 jonas/modules/libraries/security/jacc-handlers/src/main/resources/META-INF/jonas-security-jacc-handlers.bnd delete mode 100644 jonas/modules/libraries/security/jacc/pom.xml delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/AbsPermissionManager.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/PermissionManagerException.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicy.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicyConfiguration.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicyConfigurationFactory.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicyConfigurationKeeper.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicyException.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/JPolicyWrapper.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/java/org/ow2/jonas/lib/security/jacc/PolicyConfigurationFactoryWrapper.java delete mode 100644 jonas/modules/libraries/security/jacc/src/main/resources/META-INF/jonas-security-jacc.bnd delete mode 100644 jonas/modules/libraries/security/jacc/src/main/resources/org/ow2/jonas/lib/security/jacc/I18n.properties delete mode 100644 jonas/modules/libraries/security/pom.xml delete mode 100644 jonas/modules/libraries/security/propagation/pom.xml delete mode 100644 jonas/modules/libraries/security/propagation/src/main/java/org/ow2/jonas/lib/security/context/Marshalling.java delete mode 100644 jonas/modules/libraries/security/propagation/src/main/java/org/ow2/jonas/lib/security/context/SecurityContext.java delete mode 100644 jonas/modules/libraries/security/propagation/src/main/java/org/ow2/jonas/lib/security/context/SecurityCurrent.java delete mode 100644 jonas/modules/libraries/security/propagation/src/main/java/org/ow2/jonas/lib/security/mapping/JPolicyUserRoleMapping.java delete mode 100644 jonas/modules/libraries/security/propagation/src/main/resources/META-INF/jonas-security-propagation.bnd delete mode 100644 jonas/modules/libraries/tenant/pom.xml delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/TenantIdInfo.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/context/TenantContext.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/context/TenantCurrent.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/filter/HttpTenantIdFilter.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/interceptor/jmx/JMXTenantIdInterceptor.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/interceptor/jndi/JNDITenantIdInterceptor.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/listener/TenantEventListener.java delete mode 100644 jonas/modules/libraries/tenant/src/main/java/org/ow2/jonas/lib/tenant/loginmodule/TenantIdLoginModule.java delete mode 100644 jonas/modules/libraries/tenant/src/main/resources/META-INF/jonas-libraries-tenant.bnd delete mode 100644 jonas/modules/libraries/tenant/src/test/java/org/ow2/jonas/lib/tenant/interceptors/tests/JMXTenantIdInterceptorTest.java delete mode 100644 jonas/modules/libraries/tenant/src/test/java/org/ow2/jonas/lib/tenant/interceptors/tests/JNDITenantIdInterceptorTest.java delete mode 100644 jonas/modules/libraries/tenant/src/test/java/org/ow2/jonas/lib/tenant/listener/tests/TenantIdListenerTest.java delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/pom.xml delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/src/main/java/org/ow2/jonas/tm/jotm/ots/OTSClientTransactionInterceptor.java delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/src/main/java/org/ow2/jonas/tm/jotm/ots/OTSInterceptor.java delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/src/main/java/org/ow2/jonas/tm/jotm/ots/OTSORBInitializer.java delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/src/main/java/org/ow2/jonas/tm/jotm/ots/OTSServerTransactionInterceptor.java delete mode 100644 jonas/modules/libraries/transaction/interceptors/iiop/src/main/resources/META-INF/jonas-trans-interceptors-iiop.bnd delete mode 100644 jonas/modules/libraries/transaction/interceptors/pom.xml delete mode 100644 jonas/modules/libraries/transaction/pom.xml delete mode 100644 jonas/modules/pom.xml delete mode 100644 jonas/modules/services/bootstrap/ant/pom.xml delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/AbstractAntDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/EjbJarDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/GenICTaskDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/JOnASBaseTaskDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/JOnASClusterConfigTaskDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/JOnASTaskDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/JPropertyDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/ServerDeployDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/ant/WsGenTaskDeprecated.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/BootstrapTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/HotDeploymentTool.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/InnerClassFilenameFilter.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/JOnASAntTool.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/JOnASTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/JProperty.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/JonasHotDeploymentTool.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/PropertyStatement.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/bootstrap/ServerDeploy.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/AbstractJOnASBaseAntTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/Archives.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/BaseTaskItf.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/DeployableSelector.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/DeploymentPlans.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JCopy.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JEcho.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JMkdir.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JOnASBaseTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JReplace.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JTouch.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/JonasProperties.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/Lib.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/PropertyTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/Replace.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/Services.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/Tasks.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/bootstrap/XMLSerializerTask.java delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/resources/META-INF/bootstrap-ant.bnd delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/resources/antlib-master.xml delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/resources/build-master.properties.template delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/resources/build-master.xml delete mode 100644 jonas/modules/services/bootstrap/ant/src/main/resources/org/ow2/jonas/ant/antlib.xml delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/pom.xml delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bash delete mode 100755 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bat delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.ksh delete mode 100755 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.sh delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas delete mode 100755 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas.bat delete mode 100755 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonasnt.bat delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv delete mode 100755 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv.bat delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/banner.txt delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/classloader-default-filtering.xml delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.sh.include delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.start.sh.include delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/initial-repositories.xml delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/trace.properties delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/traceclient.properties delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/resources/META-INF/bootstrap-core-for-addons.bnd delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-admin.properties.template delete mode 100644 jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-base.properties.template delete mode 100644 jonas/modules/services/bootstrap/core/pom.xml delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bash delete mode 100755 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bat delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.ksh delete mode 100755 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.sh delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas delete mode 100755 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas.bat delete mode 100755 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonasnt.bat delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv delete mode 100755 jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv.bat delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/banner.txt delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/classloader-default-filtering.xml delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.sh.include delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.start.sh.include delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/initial-repositories.xml delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/trace.properties delete mode 100644 jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/traceclient.properties delete mode 100644 jonas/modules/services/bootstrap/core/src/main/resources/META-INF/bootstrap-core.bnd delete mode 100644 jonas/modules/services/bootstrap/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/bootstrap/core/src/main/templates/jonas-admin.properties.template delete mode 100644 jonas/modules/services/bootstrap/core/src/main/templates/jonas-base.properties.template delete mode 100644 jonas/modules/services/bootstrap/pom.xml delete mode 100644 jonas/modules/services/cdi-weld/core/pom.xml delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/IWeldService.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/DefaultWeldService.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspApplicationContext.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspFactory.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspApplicationContext.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspFactory.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizer.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldLifeCycleListener.java delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/jonas-cdi-weld-core.bnd delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/services/javax.faces.application.ApplicationFactory delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/cdi-weld/core/src/main/templates/jonas-cdi.properties.template delete mode 100644 jonas/modules/services/cdi-weld/core/src/test/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizerTestCase.java delete mode 100644 jonas/modules/services/cdi-weld/pom.xml delete mode 100644 jonas/modules/services/cmi/ant/pom.xml delete mode 100644 jonas/modules/services/cmi/ant/src/main/java/org/ow2/jonas/antmodular/cmi/Cmi.java delete mode 100644 jonas/modules/services/cmi/ant/src/main/resources/jonas-cmi-ant.bnd delete mode 100644 jonas/modules/services/cmi/core/pom.xml delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/BundleContent.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceException.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceHelper.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceImpl.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServicePolicyStrategyManager.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceProperty.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/LoadBalancingListener.java delete mode 100644 jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/event/BeanEventListener.java delete mode 100644 jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups delete mode 100755 jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups.bat delete mode 100644 jonas/modules/services/cmi/core/src/main/jonas-resources/conf/cmi-config.xml delete mode 100644 jonas/modules/services/cmi/core/src/main/jonas-resources/conf/jgroups-cmi.xml delete mode 100644 jonas/modules/services/cmi/core/src/main/resources/META-INF/jonas-cmi-core.bnd delete mode 100644 jonas/modules/services/cmi/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/cmi/core/src/main/templates/jonas-cmi.properties.template delete mode 100644 jonas/modules/services/cmi/pom.xml delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/pom.xml delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/META-INF/jonas-deployable-monitor-core-for-addons.bnd delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/deployable-monitor/core-for-addons/src/main/templates/jonas-depmonitor.properties.template delete mode 100644 jonas/modules/services/deployable-monitor/core/pom.xml delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/resources/META-INF/jonas-deployable-monitor-core.bnd delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/deployable-monitor/core/src/main/templates/jonas-depmonitor.properties.template delete mode 100644 jonas/modules/services/deployable-monitor/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/DescriptorHandler.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EJBDeploymentTool.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EjbJar.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenICTask.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenericDeploymentTool.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/JonasDeploymentTool.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/META-INF/jonas-ejb-2.1-ant.bnd delete mode 100644 jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/antlib-ejbjar.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/EJB21Deployer.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBService.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBServiceMBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JarCleanTask.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/PrincipalFactoryImpl.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/HandleDelegateCCFDelegate.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/JTimerHandleDelegate.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJB.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJBModule.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EntityBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/MessageDrivenBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/SessionBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatefulSessionBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatelessSessionBean.java delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen delete mode 100755 jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen.bat delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC delete mode 100755 jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC.bat delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/META-INF/jonas-ejb-2.1-core.bnd delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/org/ow2/jonas/ejb2/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/ejb/ejb-2.1/core/src/main/templates/jonas-ejb2.properties.template delete mode 100644 jonas/modules/services/ejb/ejb-2.1/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/base/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/ejb3/Ejb3.java delete mode 100644 jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/antlib-ejb3.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.properties.template delete mode 100644 jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/src/main/resources/build-ejb3-provider-eclipselink1.1.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/src/main/resources/build-ejb3-provider-eclipselink2.2.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/src/main/resources/build-ejb3-provider-eclipselink2.3.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/src/main/resources/build-ejb3-provider-hibernate3.6.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/src/main/resources/build-ejb3-provider-hibernate4.1.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/openjpa/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/openjpa/src/main/resources/build-ejb3-provider-openjpa.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/openjpa2/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/ant/openjpa2/src/main/resources/build-ejb3-provider-openjpa2.properties delete mode 100644 jonas/modules/services/ejb/ejb3/ant/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/addon/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EJB3CleanTask.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansDeployer.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansService.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASENCInterceptor.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASResourceAdapterFinder.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityContextWrapper.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityCurrent.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/PrefixedNamingStrategy.java delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/jonas-resources/conf/easybeans-jonas.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink1.1.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.2.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.3.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate3.6.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate4.1.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa2.properties delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/META-INF/jonas-ejb-easybeans-core.bnd delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/easybeans-cluster-jonas.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/org/ow2/jonas/ejb/easybeans/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/core/src/main/templates/jonas-ejb3.properties.template delete mode 100644 jonas/modules/services/ejb/ejb3/easybeans/pom.xml delete mode 100644 jonas/modules/services/ejb/ejb3/pom.xml delete mode 100644 jonas/modules/services/ejb/pom.xml delete mode 100644 jonas/modules/services/event-provider/api/pom.xml delete mode 100644 jonas/modules/services/event-provider/api/src/main/META-INF/event-provider-api.bnd delete mode 100644 jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/Event.java delete mode 100644 jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/EventLevel.java delete mode 100644 jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/IEventProvider.java delete mode 100644 jonas/modules/services/event-provider/core/pom.xml delete mode 100644 jonas/modules/services/event-provider/core/src/main/java/org/ow2/jonas/event/provider/internal/EventProviderComponent.java delete mode 100644 jonas/modules/services/event-provider/core/src/main/jonas-resources/conf/event-provider.properties delete mode 100644 jonas/modules/services/event-provider/core/src/main/resources/META-INF/event-provider-core.bnd delete mode 100644 jonas/modules/services/event-provider/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/event-provider/pom.xml delete mode 100644 jonas/modules/services/ipojo-handler/pom.xml delete mode 100644 jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/ComponentInstanceState.java delete mode 100644 jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/IInstanceProvider.java delete mode 100644 jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/Interceptor.java delete mode 100644 jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/internal/handler/iPOJOInterceptor.java delete mode 100644 jonas/modules/services/ipojo-handler/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jaxrs-jersey/core/pom.xml delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisher.java delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyService.java delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtils.java delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/jaxrs-jersey-core.bnd delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/main/templates/jonas-jax-rs.properties.template delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisherTestCase.java delete mode 100644 jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtilsTestCase.java delete mode 100644 jonas/modules/services/jaxrs-jersey/pom.xml delete mode 100644 jonas/modules/services/jms-joram/addon/pom.xml delete mode 100644 jonas/modules/services/jms-joram/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jms-joram-addon-plan.xml delete mode 100644 jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/jms-joram/ant/pom.xml delete mode 100644 jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/Jms.java delete mode 100644 jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/JmsRa.java delete mode 100644 jonas/modules/services/jms-joram/ant/src/main/resources/antlib-jms.xml delete mode 100644 jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.properties.template delete mode 100644 jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.xml delete mode 100644 jonas/modules/services/jms-joram/core/pom.xml delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer delete mode 100755 jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer.bat delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig delete mode 100755 jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig.bat delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3debug.cfg delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3servers.xml delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/joramAdmin.xml delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-addon/joramAdminConfigForAddons.xml delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-example/joramAdminConfigExample.xml delete mode 100644 jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy/joramAdminConfig.xml delete mode 100644 jonas/modules/services/jms-joram/plans/client/pom.xml delete mode 100644 jonas/modules/services/jms-joram/plans/pom.xml delete mode 100644 jonas/modules/services/jms-joram/plans/server/pom.xml delete mode 100644 jonas/modules/services/jms-joram/pom.xml delete mode 100644 jonas/modules/services/jms-joram/provisionning/directory-provisionning/pom.xml delete mode 100644 jonas/modules/services/jms-joram/provisionning/legacy-provisionning/pom.xml delete mode 100644 jonas/modules/services/jms-joram/provisionning/new-provisionning/pom.xml delete mode 100644 jonas/modules/services/jms-joram/provisionning/pom.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/pom.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/config/jndi-interceptors.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/checker/impl/ResourceCheckerManager.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/AbsContextInterceptor.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/Interceptors.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponent.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponentException.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptor.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptorAdapter.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/ConnectionProxy.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptor.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapper.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxy.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxy.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerConfigurationExtension.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerInterceptor.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/resources/META-INF/jndi-interceptors-core.bnd delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mapping/jndi-interceptors-mapping.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptorTestCase.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapperTestCase.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxyTestCase.java delete mode 100644 jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxyTestCase.java delete mode 100644 jonas/modules/services/jndi-interceptors/pom.xml delete mode 100644 jonas/modules/services/jonas-addon/core/pom.xml delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/cleaner/AddonCleanTask.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/config/AddonConfigImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/AddonDeployableImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployable.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployableComparator.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonDeployerImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonMetaData.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/BinDeployerImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/ConfDeployerImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/service/AddonDeployerComponent.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/helper/service/AddonDeployableAnalyserComponent.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonDeployerLog.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonLogEntry.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonUtil.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/Range.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonDesc.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonPropertiesManager.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonVersion.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonXmlLoader.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/properties/ServicePropertiesImpl.java delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-1.0.xsd delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-core.bnd delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-addon/core/src/main/resources/properties/jonas-addon.properties delete mode 100644 jonas/modules/services/jonas-addon/pom.xml delete mode 100644 jonas/modules/services/jonas-audit/core/pom.xml delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/JOnASAuditServiceImpl.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditComponentListener.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogComponentMBean.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogService.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceAdapter.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceException.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReport.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReportType.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditComponentListener.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditLogListener.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/DatedFileLogPool.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/FileLogPool.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/AuditLogReportHelper.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/LogConfigurator.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilter.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterAdapter.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/report/WebInvocationAuditReportFactory.java delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/resources/META-INF/jonas-audit-core.bnd delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/logger/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/webauditor/filters/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-audit/core/src/main/templates/jonas-audit.properties.template delete mode 100644 jonas/modules/services/jonas-audit/core/src/test/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterTestCase.java delete mode 100644 jonas/modules/services/jonas-audit/pom.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/carol/Carol.java delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/src/main/resources/META-INF/jonas-carol-registry-ant.bnd delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/src/main/resources/antlib-carol.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.properties.template delete mode 100644 jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/core/pom.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDIContextFactory.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDILookup.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/CarolRegistryService.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/JacORBPRODelegate.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/ORBCCFDelegate.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/CarolRegistryConfigurationPlugin.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/ConfigurationActivator.java delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry delete mode 100755 jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry.bat delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/carol.properties delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/jacorb.properties delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/resources/META-INF/jonas-carol-registry-core.bnd delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-carol-registry/core/src/main/templates/jonas-registry.properties.template delete mode 100644 jonas/modules/services/jonas-carol-registry/pom.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/pom.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/AdapterException.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/ConfigurationInfo.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapter.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapterRegistry.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryEvent.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryListener.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployable.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployer.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationEvent.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationListener.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationItem.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/Initializer.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapter.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapter.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapterRegistry.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultFactoryConfigurationAdapter.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/resources/META-INF/configadmin-1.0.xsd delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployerTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigurationItemTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapterTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterRegistryTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/FactoryConfigurationAdapterTestCase.java delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/deploy-undeploy-configurations.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/invalid-schema-location.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/no-schema-location.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/one-configuration.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/one-factory-configuration.xml delete mode 100644 jonas/modules/services/jonas-configadmin/core/src/test/resources/unsupported-element.xml delete mode 100644 jonas/modules/services/jonas-configadmin/pom.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/pom.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployable.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableRegistration.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployer.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceCleanTask.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceDeployer.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidator.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceXmlReader.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/NamespaceFilter.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DSDefinitionExtensionListener.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DataSourceServiceImpl.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/resources/META-INF/jonas-services-datasource-core.bnd delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.0.xsd delete mode 100644 jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.1.xsd delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableTest.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/FileDeployableFactoryTest.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestDatasourceDeployer.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestRarDeployer.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceReaderTest.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidatorTest.java delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/resources/datasources.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-bad.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-good.xml delete mode 100644 jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource.xml delete mode 100644 jonas/modules/services/jonas-datasources/pom.xml delete mode 100644 jonas/modules/services/jonas-db/base/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-db/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/base/Db.java delete mode 100644 jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.properties.template delete mode 100644 jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.xml delete mode 100644 jonas/modules/services/jonas-db/base/core/pom.xml delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImpl.java delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/DbEndpointBuilder.java delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/User.java delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/resources/META-INF/jonas-db-base-core.bnd delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-db/base/core/src/main/templates/jonas-db.properties.template delete mode 100644 jonas/modules/services/jonas-db/base/pom.xml delete mode 100644 jonas/modules/services/jonas-db/h2/addon/pom.xml delete mode 100644 jonas/modules/services/jonas-db/h2/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/jonas-db/h2/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/jonas-db/h2/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-db/h2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/h2/DbH2.java delete mode 100644 jonas/modules/services/jonas-db/h2/ant/src/main/resources/antlib-db-h2.xml delete mode 100644 jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.properties delete mode 100644 jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.xml delete mode 100644 jonas/modules/services/jonas-db/h2/core/pom.xml delete mode 100644 jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImpl.java delete mode 100644 jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-db/h2/core/src/main/properties/jonas-db-h2.properties delete mode 100644 jonas/modules/services/jonas-db/h2/core/src/main/resources/META-INF/jonas-db-h2-core.bnd delete mode 100644 jonas/modules/services/jonas-db/h2/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-db/h2/pom.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/hsql/DbHsql.java delete mode 100644 jonas/modules/services/jonas-db/hsql/ant/src/main/resources/antlib-db-hsql.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.properties delete mode 100644 jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/core/pom.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImpl.java delete mode 100644 jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-db/hsql/core/src/main/properties/jonas-db-hsql.properties delete mode 100644 jonas/modules/services/jonas-db/hsql/core/src/main/resources/META-INF/jonas-db-hsql-core.bnd delete mode 100644 jonas/modules/services/jonas-db/hsql/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-db/hsql/pom.xml delete mode 100644 jonas/modules/services/jonas-db/pom.xml delete mode 100644 jonas/modules/services/jonas-dbm/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-dbm/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/dbm/Dbm.java delete mode 100644 jonas/modules/services/jonas-dbm/ant/src/main/resources/antlib-dbm.xml delete mode 100644 jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.properties.template delete mode 100644 jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.xml delete mode 100644 jonas/modules/services/jonas-dbm/core/pom.xml delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/DBMConstants.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerService.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerServiceMBean.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/ConnectionManager.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/IConnection.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JConnection.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JManagedConnection.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JStatement.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/Pool.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/naming/DataSourceFactory.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSource.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSourceMBean.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDriver.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCResource.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JDBCDriverBundleTrackerCustomizer.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JOnASDataSourceFactory.java delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/FirebirdSQL.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/H2.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/HSQL1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InstantDB1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InterBase1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/McKoi1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/MySQL.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Oracle1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/PostgreSQL1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Sybase1.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/db2.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/spy.properties delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/resources/META-INF/jonas-dbm-core.bnd delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/resources/org/ow2/jonas/dbm/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-dbm/core/src/main/templates/jonas-dbm.properties.template delete mode 100644 jonas/modules/services/jonas-dbm/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/base/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/base/Discovery.java delete mode 100644 jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.properties.template delete mode 100644 jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.xml delete mode 100644 jonas/modules/services/jonas-discovery/base/core/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/BaseDiscovery.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscHelper.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscoveryServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DuplicateServerNameException.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/ClusterdDiscoveryEvent.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscEvent.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscGreeting.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscMessage.java delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/resources/META-INF/jonas-discovery-base-core.bnd delete mode 100644 jonas/modules/services/jonas-discovery/base/core/src/main/templates/jonas-discovery.properties.template delete mode 100644 jonas/modules/services/jonas-discovery/base/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/jgroups/DiscoveryJGroups.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/antlib-discovery-jgroups.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.properties delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/DiscRunnable.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImpl.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/CommDiscoveryInfo.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/DiscCommManager.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscComm.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscCommReceiver.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/exception/StopDiscException.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommGreetingHandler.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommHandlerImpl.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/manager/DiscoveryManager.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/Data.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/DiscoveryUtils.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/IDiscoveryChannel.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/JGroupsDiscoveryUtils.java delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/jonas-resources/conf/jgroups-discovery.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/properties/jonas-jgroups.properties delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/META-INF/jonas-discovery-jgroups-core.bnd delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/org/ow2/jonas/discovery/jgroups/utils/jgroups-discovery.xml delete mode 100644 jonas/modules/services/jonas-discovery/jgroups/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/multicast/DiscoveryMulticast.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/antlib-discovery-multicast.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.properties delete mode 100644 jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImpl.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClient.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientListener.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryComm.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingListener.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingResponder.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/DiscoveryListener.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/Enroller.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/EnrollerMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManager.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManagerMBean.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/utils/DiscoveryHelper.java delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/properties/jonas-multicast.properties delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/META-INF/jonas-discovery-multicast-core.bnd delete mode 100644 jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-discovery/multicast/pom.xml delete mode 100644 jonas/modules/services/jonas-discovery/pom.xml delete mode 100644 jonas/modules/services/jonas-ear/addon/pom.xml delete mode 100644 jonas/modules/services/jonas-ear/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/jonas-ear/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/jonas-ear/core/pom.xml delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/AppClientModuleInfo.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EARModule.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarCleanTask.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarDeployer.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARService.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARServiceMBean.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/AppClientModule.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleIdentifier.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleMBean.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/Ear.java delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/resources/META-INF/jonas-ear-core.bnd delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/resources/org/ow2/jonas/ear/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-ear/core/src/main/templates/jonas-ear.properties.template delete mode 100644 jonas/modules/services/jonas-ear/pom.xml delete mode 100644 jonas/modules/services/jonas-ejb-ha/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-ejb-ha/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/ha/Ha.java delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/pom.xml delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/src/main/java/org/ow2/jonas/ha/internal/HaServiceImpl.java delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/src/main/jonas-resources/conf/jgroups-ha.xml delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/src/main/resources/META-INF/jonas-ejb-ha-core.bnd delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-ejb-ha/core/src/main/templates/jonas-ha.properties.template delete mode 100644 jonas/modules/services/jonas-ejb-ha/pom.xml delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/pom.xml delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/Endpoint.java delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpoint.java delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpointBuilder.java delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/internal/EndpointCollector.java delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/util/Util.java delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/META-INF/jonas-endpoint-collector.bnd delete mode 100644 jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-endpoint-collector/pom.xml delete mode 100644 jonas/modules/services/jonas-extension-loader/core/pom.xml delete mode 100644 jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bnd.java delete mode 100644 jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bundlizable.java delete mode 100644 jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/ExtensionLoaderComponent.java delete mode 100644 jonas/modules/services/jonas-extension-loader/core/src/main/resources/META-INF/jonas-extension-loader-core.bnd delete mode 100644 jonas/modules/services/jonas-extension-loader/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-extension-loader/pom.xml delete mode 100644 jonas/modules/services/jonas-jmx/core/pom.xml delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/BaseJMXService.java delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/JOnASJMXService.java delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationContextImpl.java delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationHandlerImpl.java delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/MBeanServerDelegateInterceptor.java delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/domain.xml delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.access delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.passwords delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.rolebased.access delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/resources/META-INF/jonas-jmx-core.bnd delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-jmx/core/src/main/templates/jonas-jmx.properties.template delete mode 100644 jonas/modules/services/jonas-jmx/pom.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/pom.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/JndiService.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapter.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapterRegistry.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesException.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesService.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiServiceImpl.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/Policy.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/jonas-resources/deploy-example/configadmin-jndi-example.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/configadmin-jndi-1.0.xsd delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/jonas-jndi-core.bnd delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/main/templates/jonas-jndi.properties.template delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/java/org/ow2/jonas/jndi/test/JndiTest.java delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-empty-value-test.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-null-value-test.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-sample-example.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-unicity-test.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-content.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-policy.xml delete mode 100644 jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-tag-order.xml delete mode 100644 jonas/modules/services/jonas-jndi/pom.xml delete mode 100644 jonas/modules/services/jonas-mail/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/DeployableTask.java delete mode 100644 jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/Mail.java delete mode 100644 jonas/modules/services/jonas-mail/ant/src/main/resources/antlib-mail.xml delete mode 100644 jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.properties.template delete mode 100644 jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.xml delete mode 100644 jonas/modules/services/jonas-mail/core/pom.xml delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/JOnASMailService.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/AbstractJavaMail.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDS.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDSFactory.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSession.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSessionFactory.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/lib/JAuthenticator.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailMimePartDSResource.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResource.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResourceMBean.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailSessionResource.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailMimePartDSFactory.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailSessionFactory.java delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailMimePartDS1.properties delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailSession1.properties delete mode 100755 jonas/modules/services/jonas-mail/core/src/main/jonas-resources/deploy-example/mail-factories.xml delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/resources/META-INF/jonas-mail-core.bnd delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/resources/org/ow2/jonas/mail/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-mail/core/src/main/templates/jonas-mail.properties.template delete mode 100644 jonas/modules/services/jonas-mail/pom.xml delete mode 100644 jonas/modules/services/jonas-report/api/pom.xml delete mode 100644 jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReport.java delete mode 100644 jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/api/src/main/resources/META-INF/jonas-report-api.bnd delete mode 100644 jonas/modules/services/jonas-report/api/src/main/resources/xsd/jonas-report.xsd delete mode 100644 jonas/modules/services/jonas-report/core/pom.xml delete mode 100644 jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/Report.java delete mode 100644 jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/ReportMBean.java delete mode 100644 jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/util/Utility.java delete mode 100644 jonas/modules/services/jonas-report/core/src/main/resources/META-INF/jonas-report-core.bnd delete mode 100644 jonas/modules/services/jonas-report/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/core/src/main/resources/org/ow2/jonas/service/report/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/bundles/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/bundles/src/main/java/org/ow2/jonas/report/extensions/bundles/internal/BundlesReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/META-INF/jonas-report-extension-bundles.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/xsd/bundles-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/deployables/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/deployables/src/main/java/org/ow2/jonas/report/extensions/deployables/internal/DeployablesReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/META-INF/jonas-report-extension-deployables.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/xsd/deployable-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/deployers/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/deployers/src/main/java/org/ow2/jonas/report/extensions/deployers/internal/DeployersReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/META-INF/jonas-report-extension-deployers.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/xsd/deployers-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/endpoints/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/endpoints/src/main/java/org/ow2/jonas/report/extensions/endpoints/internal/EndpointsReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/META-INF/jonas-report-extension-endpoints.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/xsd/endpoints-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-factories/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/java/org/ow2/jonas/report/extensions/ipojo/factories/internal/IpojoFactoriesReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/META-INF/jonas-report-extension-ipojo-factories.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/xsd/ipojo-factories-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-handlers/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/java/org/ow2/jonas/report/extensions/ipojo/handlers/internal/IpojoHandlersReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/META-INF/jonas-report-extension-ipojo-handlers.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/xsd/ipojo-handlers-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-instances/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/java/org/ow2/jonas/report/extensions/ipojo/instances/internal/IpojoInstancesReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/META-INF/jonas-report-extension-ipojo-instances.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/xsd/ipojo-instances-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/jvm/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/jvm/src/main/java/org/ow2/jonas/report/extensions/jvm/internal/JvmReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/META-INF/jonas-report-extension-jvm.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/xsd/jvm-report.xsd delete mode 100644 jonas/modules/services/jonas-report/extensions/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/server-info/pom.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/server-info/src/main/java/org/ow2/jonas/report/extensions/server/info/internal/ServerInfoReportExtension.java delete mode 100644 jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/META-INF/jonas-report-extension-server-info.bnd delete mode 100644 jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/xsd/server-report.xsd delete mode 100644 jonas/modules/services/jonas-report/pom.xml delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/pom.xml delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorService.java delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorServiceMBean.java delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/src/main/resources/META-INF/jonas-resource-monitor-core.bnd delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-resource-monitor/core/src/main/templates/jonas-resourcemonitor.properties.template delete mode 100644 jonas/modules/services/jonas-resource-monitor/pom.xml delete mode 100644 jonas/modules/services/jonas-resource/addon/pom.xml delete mode 100644 jonas/modules/services/jonas-resource/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/jonas-resource/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/jonas-resource/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcRa.java delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcXml.java delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/resources/META-INF/jonas-resource-ant.bnd delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/resources/antlib-jonas-resource.xml delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.properties.template delete mode 100644 jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.xml delete mode 100644 jonas/modules/services/jonas-resource/core/pom.xml delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/IJDBCConnection.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceService.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceServiceMBean.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/RARDeployer.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/Rar.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceBootstrapContext.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceServiceConstants.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceUtility.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/SQLManager.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerImpl.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerPoolParams.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionResourceHint.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ManagedConnectionInfo.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JResourceManagerEvent.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JSynchronization.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/LocalXAResource.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/PreparedStatementWrapper.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/SQLConnectionInvocationHandler.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/AbstractPreparedStatementCacheImpl.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/CacheException.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCache.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCacheStatistics.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementListCacheImpl.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheImpl.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheKey.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ArchiveConfigMBean.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAActivationSpec.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAAdminObject.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactory.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactoryMBean.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAManagedConnectionFactory.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAResource.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/README delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/RarConfigMBean.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapter.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapterModule.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/naming/ResourceObjectFactory.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/Pool.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolItemStats.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolMatchFactory.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolProvider.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolResource.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPool.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPoolMonitor.java delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig delete mode 100755 jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig.bat delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/jonas-resources/deploy/jdbc-ds.xml delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/resources/META-INF/jonas-resource-core.bnd delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/resources/org/ow2/jonas/resource/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-resource/core/src/main/templates/jonas-j2ca-resource.properties.template delete mode 100644 jonas/modules/services/jonas-resource/pom.xml delete mode 100644 jonas/modules/services/jonas-security/ant/pom.xml delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/EmptyEntityResolver.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JResourceLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/Jaas.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JaasEntry.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/LoginModule.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/User.java delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/resources/antlib-security.xml delete mode 100644 jonas/modules/services/jonas-security/ant/src/main/resources/build-security.xml delete mode 100644 jonas/modules/services/jonas-security/core/pom.xml delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/CertificateCallback.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/DialogCallbackHandler.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/LoginCallbackHandler.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/NoInputCallbackHandler.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/CRLLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/ClientLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JDirectResourceLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JResourceLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RemoteLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RoleBasedAuthorizationModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/SignLoginModule.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/AbsSecurityContextHelper.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JResources.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImpl.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImplMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/PolicyProvider.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/SecurityServiceException.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/AbstractJResource.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDS.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDSMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAP.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAPMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemory.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemoryMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemote.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemoteImpl.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/HashHelper.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/XML.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Group.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/GroupMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/LDAPUser.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Role.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/RoleMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/User.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/UserMBean.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JErrorHandler.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JResourceManager.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JDSRuleSet.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JLDAPRuleSet.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JMemoryRuleSet.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/SecurityContextHelper.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializer.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializerException.java delete mode 100644 jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jaas.config delete mode 100644 jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/java.policy delete mode 100644 jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jonas-realm.xml delete mode 100644 jonas/modules/services/jonas-security/core/src/main/resources/META-INF/jonas-security-core.bnd delete mode 100644 jonas/modules/services/jonas-security/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/internal/realm/factory/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/realm/dtd/jonas-realm_1_0.dtd delete mode 100644 jonas/modules/services/jonas-security/core/src/main/templates/jonas-security.properties.template delete mode 100644 jonas/modules/services/jonas-security/pom.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/addon/pom.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/pom.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionManager.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionResourceManager.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionService.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/UserTransactionFactory.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/ServerTransactionCCFDelegate.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/TransactionCCFDelegate.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/UserTransactionCCFDelegate.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResource.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResourceMBean.java delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/jonas-resources/conf/jotm.properties delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/resources/META-INF/jonas-tm-jotm-core.bnd delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/resources/org/ow2/jonas/tm/jotm/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/jonas-tm-jotm/core/src/main/templates/jonas-jtm.properties.template delete mode 100644 jonas/modules/services/jonas-tm-jotm/pom.xml delete mode 100644 jonas/modules/services/jonas-workcleaner/core/pom.xml delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerService.java delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerServiceMBean.java delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/WorkCleanerTimer.java delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/resources/META-INF/jonas-workcleaner-core.bnd delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-workcleaner/core/src/main/templates/jonas-workcleaner.properties.template delete mode 100644 jonas/modules/services/jonas-workcleaner/pom.xml delete mode 100644 jonas/modules/services/jonas-workmanager/core/pom.xml delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JOnASWorkManagerService.java delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManager.java delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManagerMBean.java delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/resources/META-INF/jonas-workmanager-core.bnd delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jonas-workmanager/core/src/main/templates/jonas-workmanager.properties.template delete mode 100644 jonas/modules/services/jonas-workmanager/pom.xml delete mode 100644 jonas/modules/services/joram-admin/pom.xml delete mode 100644 jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueue.java delete mode 100644 jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueueConnectionFactory.java delete mode 100644 jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopic.java delete mode 100644 jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopicConnectionFactory.java delete mode 100644 jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramUser.java delete mode 100644 jonas/modules/services/jsf/jsf-base/ant/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/Jsf.java delete mode 100644 jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.properties.template delete mode 100644 jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.xml delete mode 100644 jonas/modules/services/jsf/jsf-base/core/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-base/core/src/main/templates/jonas-jsf.properties.template delete mode 100644 jonas/modules/services/jsf/jsf-base/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/ant/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra12/JsfMojarra12.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/antlib-jsf-mojarra-1.2.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.properties delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/core/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/java/org/ow2/jonas/jsf/mojarra12/Mojarra12ServiceImpl.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/properties/jonas-jsf-mojarra12.properties delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/META-INF/jonas-jsf-mojarra-1.2-core.bnd delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-1.2/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/ant/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra20/JsfMojarra20.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/antlib-jsf-mojarra-2.0.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.properties delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/Mojarra20ServiceImpl.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/vendor/Tomcat7InjectionProvider.java delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/properties/jonas-jsf-mojarra20.properties delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/META-INF/jonas-jsf-mojarra-2.0-core.bnd delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jsf/jsf-mojarra-2.0/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/ant/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/myfaces20/JsfMyFaces20.java delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/antlib-jsf-myfaces-2.0.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.properties delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/pom.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/java/org/ow2/jonas/jsf/myfaces20/MyFaces20ServiceImpl.java delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/properties/jonas-jsf-myfaces20.properties delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/jonas-jsf-myfaces-2.0-core.bnd delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/resources/javax.faces/jsf-uncompressed.js delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/resources/javax.faces/jsf.js delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/jsf/jsf-myfaces-2.0/pom.xml delete mode 100644 jonas/modules/services/jsf/pom.xml delete mode 100644 jonas/modules/services/log-provider/core/pom.xml delete mode 100644 jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/api/ILogProvider.java delete mode 100644 jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/BundleCurrent.java delete mode 100644 jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProvider.java delete mode 100644 jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProviderComponent.java delete mode 100644 jonas/modules/services/log-provider/core/src/main/resources/META-INF/log-provider-core.bnd delete mode 100644 jonas/modules/services/log-provider/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/log-provider/pom.xml delete mode 100644 jonas/modules/services/multitenant/addon/pom.xml delete mode 100644 jonas/modules/services/multitenant/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/multitenant/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/multitenant/core/pom.xml delete mode 100644 jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantServiceImpl.java delete mode 100644 jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBinding.java delete mode 100644 jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBindingMBean.java delete mode 100644 jonas/modules/services/multitenant/core/src/main/resources/META-INF/jonas-multitenant-core.bnd delete mode 100644 jonas/modules/services/multitenant/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/multitenant/core/src/main/resources/org/ow2/jonas/multitenant/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/multitenant/core/src/main/templates/jonas-multitenant.properties.template delete mode 100644 jonas/modules/services/multitenant/pom.xml delete mode 100644 jonas/modules/services/packaging/addon/pom.xml delete mode 100644 jonas/modules/services/packaging/addon/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/packaging/addon/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/packaging/core/pom.xml delete mode 100644 jonas/modules/services/packaging/core/src/main/java/org/ow2/jonas/packaging/internal/PackagingManager.java delete mode 100644 jonas/modules/services/packaging/core/src/main/jonas-resources/bin/gen-addon delete mode 100644 jonas/modules/services/packaging/core/src/main/resources/META-INF/jonas-packaging-core.bnd delete mode 100644 jonas/modules/services/packaging/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/packaging/core/src/main/resources/org/ow2/jonas/packaging/internal/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/packaging/core/src/main/templates/jonas-packaging.properties.template delete mode 100644 jonas/modules/services/packaging/pom.xml delete mode 100644 jonas/modules/services/pom.xml delete mode 100644 jonas/modules/services/smartclient/ant/pom.xml delete mode 100644 jonas/modules/services/smartclient/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/smartclient/SmartClient.java delete mode 100644 jonas/modules/services/smartclient/ant/src/main/resources/META-INF/jonas-smartclient-ant.bnd delete mode 100644 jonas/modules/services/smartclient/ant/src/main/resources/antlib-smartclient.xml delete mode 100644 jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.properties.template delete mode 100644 jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.xml delete mode 100644 jonas/modules/services/smartclient/core/pom.xml delete mode 100644 jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientEndpointBuilder.java delete mode 100644 jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImpl.java delete mode 100644 jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImplMBean.java delete mode 100644 jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceRegistryComponent.java delete mode 100644 jonas/modules/services/smartclient/core/src/main/resources/META-INF/jonas-smartclient-core.bnd delete mode 100644 jonas/modules/services/smartclient/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/smartclient/core/src/main/templates/jonas-smartclient.properties.template delete mode 100644 jonas/modules/services/smartclient/pom.xml delete mode 100644 jonas/modules/services/ssh/core/pom.xml delete mode 100644 jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/SshService.java delete mode 100644 jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImpl.java delete mode 100644 jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImplMBean.java delete mode 100644 jonas/modules/services/ssh/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/ssh/core/src/main/templates/ssh.properties.template delete mode 100644 jonas/modules/services/ssh/pom.xml delete mode 100644 jonas/modules/services/validation/hibernate-validation/core/pom.xml delete mode 100644 jonas/modules/services/validation/hibernate-validation/core/src/main/java/org/ow2/jonas/validation/hibernate/JOnASHibernateValidationServiceImpl.java delete mode 100644 jonas/modules/services/validation/hibernate-validation/core/src/main/resources/META-INF/jonas-validation-hibernate-core.bnd delete mode 100644 jonas/modules/services/validation/hibernate-validation/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/validation/hibernate-validation/core/src/main/templates/jonas-validation.properties.template delete mode 100644 jonas/modules/services/validation/hibernate-validation/pom.xml delete mode 100644 jonas/modules/services/validation/pom.xml delete mode 100644 jonas/modules/services/versioning/core/pom.xml delete mode 100644 jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBinding.java delete mode 100644 jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBindingMBean.java delete mode 100644 jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImpl.java delete mode 100644 jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImplMBean.java delete mode 100644 jonas/modules/services/versioning/core/src/main/resources/META-INF/jonas-versioning-core.bnd delete mode 100644 jonas/modules/services/versioning/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/versioning/core/src/main/templates/jonas-versioning.properties.template delete mode 100644 jonas/modules/services/versioning/pom.xml delete mode 100644 jonas/modules/services/web-container/base/ant/pom.xml delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Ajp.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Cluster.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Connectors.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Director.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Http.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Https.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplication.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplicationAlgorithm.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/WebContainer.java delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.properties.template delete mode 100644 jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.xml delete mode 100644 jonas/modules/services/web-container/base/core/pom.xml delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerService.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerServiceMBean.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WARDeployer.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/War.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarCleanTask.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarMBean.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/endpoint/WebEndpointBuilder.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/lib/PermissionManager.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/DefaultHttpContextImpl.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/HttpServiceFactory.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/JOnASHttpService.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/OSGIResourcesServlet.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/ContextInfo.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/CopyingStream.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HTTPResponse.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxy.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxyException.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpSocketHandler.java delete mode 100644 jonas/modules/services/web-container/base/core/src/main/resources/META-INF/jonas-web-container-base-core.bnd delete mode 100644 jonas/modules/services/web-container/base/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/web-container/base/core/src/main/resources/org/ow2/jonas/web/base/proxy/wait.gif delete mode 100644 jonas/modules/services/web-container/base/core/src/main/templates/jonas-web.properties.template delete mode 100644 jonas/modules/services/web-container/base/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6Connectors.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/antlib-jetty6.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.properties delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/AnnotationProcessorServletHandler.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/Jetty6Service.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/JettyPrincipal.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/Realm.java delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6-web.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/properties/jonas-web-jetty6.properties delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/META-INF/jonas-web-container-jetty-6.1-core.bnd delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/web-container/jetty/6.1.x/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8Connectors.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/antlib-jetty8.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.properties delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/apache/AnnotationProcessor.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASInjectionDecorator.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASTldScanner.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASWebAppContext.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JSPLifecycleListener.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/Jetty8Service.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/OSGiTagLibConfiguration.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/ServletHolderDecorator.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JOnASLoginService.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JettyPrincipal.java delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8-web.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/Compiler.patch delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/TagLibraryInfoImpl.patch delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/properties/jonas-web-jetty8.properties delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/META-INF/jonas-web-container-jetty-8.0-core.bnd delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/web-container/jetty/8.0.x/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/base/pom.xml delete mode 100644 jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/Jetty.java delete mode 100644 jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/JettyConnectors.java delete mode 100644 jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/JettyHttps.java delete mode 100644 jonas/modules/services/web-container/jetty/pom.xml delete mode 100644 jonas/modules/services/web-container/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/addons/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6Connectors.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/antlib-tomcat6.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.properties delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/connector/Response.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/startup/TldConfig.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/util/DefaultAnnotationProcessor.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/CheckOpenResourcesValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/FilterValveWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JCatalinaRuleSet.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASContextConfig.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASStandardContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ResetAuthenticationValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/Tomcat6Service.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/custom/ContextCustomizer.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/handler/DirContextURLStreamHandlerService.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/loader/NoSystemAccessWebappClassLoader.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiInstanceTldCacheListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiTldListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceFactory.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceImpl.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIServletContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/security/Realm.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/tx/TransactionValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/AbsVirtualContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/ContextFinder.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/FilteredOutputStream.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersionedPathBean.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersioningValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContextMBean.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/WebModuleContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/EndpointInstanceListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/URLUtils.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSContextLifecycleListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSDeployment.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebServiceEndpointStandardWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebservicesWebDeployer.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/security/SecureWebDeploymentDescBuilder.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/EjbJarContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/FixedContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/ServiceContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-context.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-server.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-web.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/patches/Response.patch delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/properties/jonas-web-tomcat6.properties delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-6.0-core.bnd delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat6/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/web-container/tomcat/6.0.x/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/addons/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/addons/src/main/resources/META-INF/jonas-addon.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7Connectors.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/antlib-tomcat7.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.properties delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/apache/AnnotationProcessor.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/CheckOpenResourcesValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/FilterValveWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JCatalinaRuleSet.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASContextConfig.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASNamingResources.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASStandardContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ResetAuthenticationValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/Tomcat7Service.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/custom/ContextCustomizer.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/handler/DirContextURLStreamHandlerService.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/loader/NoSystemAccessWebappClassLoader.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiInstanceTldCacheListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiTldListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7AjpConnector.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7Connector.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpConnector.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpsConnector.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceFactory.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceImpl.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIServletContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/security/Realm.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/tx/TransactionValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/AbsVirtualContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/ContextFinder.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/EmptyServlet.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/FilteredOutputStream.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersionedPathBean.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersioningValve.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContextMBean.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/WebModuleContext.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/EndpointInstanceListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/URLUtils.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSContextLifecycleListener.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSDeployment.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebServiceEndpointStandardWrapper.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebservicesWebDeployer.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/security/SecureWebDeploymentDescBuilder.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/EjbJarContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/FixedContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/ServiceContextNamingStrategy.java delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-context.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-server.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-web.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-ajp-connector.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-https-connector.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy/tomcat7-http-connector.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/DefaultInstanceManager.patch delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/Response.patch delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/TagLibraryInfoImpl.patch delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/properties/jonas-web-tomcat7.properties delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-7.0-core.bnd delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/apache/catalina/startup/catalina.properties delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat7/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/web-container/tomcat/7.0.x/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/base/pom.xml delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/Tomcat.java delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatAjp.java delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatConnectors.java delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttp.java delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttps.java delete mode 100644 jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatSessionManager.java delete mode 100644 jonas/modules/services/web-container/tomcat/pom.xml delete mode 100644 jonas/modules/services/webservices/axis/core/pom.xml delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/AxisService.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServiceFactory.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServlet.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JCall.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JOnASEJBProvider.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JService.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServiceProxy.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServletEngineConfigurationFactory.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JonasHandler.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/NoopProvider.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/QSUpdateServiceWSDLHandler.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/URLMapper.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDJOnASEJBProvider.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDNoopProvider.java delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/jonas-webservices-axis-core.bnd delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/services/org.apache.axis.EngineConfigurationFactory delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/I18n.properties delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/client-config.wsdd delete mode 100644 jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/server-config.wsdd delete mode 100644 jonas/modules/services/webservices/axis/pom.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/pom.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/Axis2Service.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JOnASJaxWsImplementorInfo.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JaxWsImplementorInfo.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EJBWebserviceEndpoint.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EjbMessageReceiver.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointController.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManager.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManagerFactory.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2ServiceDispatcher.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/EasybeansAxis2Invoker.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/Axis2ConfigurationExtension.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/JAXWS20ResourceInjector.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/LifeCycleCallback.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/WebServiceContextInjectionHandler.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2RequestResponseTransport.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2TransportInfo.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/AxisServiceGenerator.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/WSDLQueryHandler.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/Axis2WSEndpoint.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/WebservicesContainer.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/AttachmentDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionFactoryImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionUtils.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/FaultDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/OperationDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ParameterDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/PortInfoImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ServiceDescriptionImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/URIResolverImpl.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/Axis2Java2WSDLBuilder.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/AxisService2WSDL11.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSTools.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSUtils.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleURIResolver.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleWSDLLocator.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/WSDLUtils.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/axis2.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/jonas-webservices-axis2-core.bnd delete mode 100644 jonas/modules/services/webservices/axis2/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSBean.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSGreeter.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2HandlerChainTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2WSEndpointTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletInputStreamForTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletOutputStreamForTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletRequestAdapterForTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletResponseAdapterForTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/StatelessSessionFactoryForTest.java delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/handlers.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/test_service_pojo.xml delete mode 100644 jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/wsdl/TestPojo.wsdl delete mode 100644 jonas/modules/services/webservices/axis2/pom.xml delete mode 100644 jonas/modules/services/webservices/cxf/core/pom.xml delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/BusCreator.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/CXFService.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsImplementorInfo.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsServerFactoryBean.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/CxfWebServiceRefBuilder.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/CxfWebServiceRefObjectFactory.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/HandlerResolverDelegate.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFEJBWebserviceEndpoint.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFResourceInjector.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansInvokerFactory.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServerFactoryBean.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServiceFactoryBean.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansMethodInvoker.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/CXFConfigurationExtension.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/JAXWS20ResourceInjector.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/LifeCycleCallback.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/WebServiceContextInjectionHandler.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASDestination.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASHTTPTransportFactory.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/CXFWSEndpoint.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/WebservicesContainer.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/util/WSDLUtils.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/ContainerWsdlInterceptor.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/WsdlUpdater.java delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/resources/META-INF/jonas-webservices-cxf-core.bnd delete mode 100644 jonas/modules/services/webservices/cxf/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/webservices/cxf/pom.xml delete mode 100644 jonas/modules/services/webservices/jaxrpc/ant/pom.xml delete mode 100644 jonas/modules/services/webservices/jaxrpc/ant/src/main/java/org/ow2/jonas/antmodular/jaxrpc/WsGenTask.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/ant/src/main/resources/antlib-wsgen.xml delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/pom.xml delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/ClientJServiceFactoryFinder.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCService.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCServiceMBean.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/factory/JServiceFactory.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/AbstractWebServiceMBean.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Handler.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/PortComponent.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Service.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/WebServicesObjectName.java delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen delete mode 100755 jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen.bat delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/conf/jonas-client.properties delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/resources/META-INF/jonas-webservices-jaxrpc-core.bnd delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/base/I18n.properties delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/mbean/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/webservices/jaxrpc/core/src/main/templates/jonas-jax-rpc.properties.template delete mode 100644 jonas/modules/services/webservices/jaxrpc/pom.xml delete mode 100644 jonas/modules/services/webservices/jaxws/core/pom.xml delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSService.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSServiceMBean.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesContainer.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesModule.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/AbstractJaxwsAuditHandler.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsClientAuditHandler.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsEndpointAuditHandler.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/mbean/AuditHandlerAdapter.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/JAXWSWebServiceRefBuilder.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/factory/JAXWSWebServiceRefObjectFactory.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansContextNamingInfo.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansSecurityConstraint.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/naming/WebServiceRefExtensionListener.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/HandlerResourceProcessor.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/JOnASHandlerResolver.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/PostConstructProcessor.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/AnnotationHandlerChainBuilder.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/BindingUtils.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/DescriptorHandlerChainBuilder.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerBuilder.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerChainBuilder.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/JAXWSServlet.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletRequestAdapter.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletResponseAdapter.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/util/JAXWSClassUtils.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/resources/META-INF/jonas-webservices-jaxws-core.bnd delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/resources/org/ow2/jonas/ws/jaxws/base/audit/mbean/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/main/templates/jonas-jax-ws.properties.template delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterLogicalHandler.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterSOAPHandler.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsClientAuditHandlerTestCase.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsEndpointAuditHandlerTestCase.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/jaxws/test/JOnASHandlerResolverTest.java delete mode 100644 jonas/modules/services/webservices/jaxws/core/src/test/resources/WEB-INF/handlers.xml delete mode 100755 jonas/modules/services/webservices/jaxws/pom.xml delete mode 100644 jonas/modules/services/webservices/pom.xml delete mode 100644 jonas/modules/services/webservices/publish/ant/pom.xml delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/File.java delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/Uddi.java delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/WsdlPublish.java delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/resources/antlib-wsdl.xml delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.properties.template delete mode 100644 jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.xml delete mode 100644 jonas/modules/services/webservices/publish/core/pom.xml delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/FileWSDLPublisher.java delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/JDefinitionWriter.java delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/DefaultWSDLPublisherManager.java delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/WSDLPublisherFactory.java delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/registry/RegistryWSDLPublisher.java delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/file1.properties delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/uddi.properties delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/resources/META-INF/jonas-webservices-publish-core.bnd delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/I18n.properties delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/mbeans-descriptors.xml delete mode 100644 jonas/modules/services/webservices/publish/core/src/main/templates/jonas-wsdl.properties.template delete mode 100644 jonas/modules/services/webservices/publish/pom.xml delete mode 100644 jonas/modules/services/wrapper/core/pom.xml delete mode 100644 jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper.conf delete mode 100644 jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper_extra.conf delete mode 100644 jonas/modules/services/wrapper/core/src/main/jonas-resources/windows_service/build.xml delete mode 100644 jonas/modules/services/wrapper/pom.xml delete mode 100644 jonas/modules/tools/commands/pom.xml delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIArgument.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIConstants.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/ClientAdmin.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/UtilAdmin.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/ExceptionUtils.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/JMXConnectionHelper.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/PrintUtils.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/check/CheckEnv.java delete mode 100644 jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/wrapper/GenerateWrapperConf.java delete mode 100644 jonas/modules/tools/eclipse-compiler/pom.xml delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilationContext.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilerError.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilationUnit.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompiler.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilerRequestor.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASNameEnvironment.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/Util.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/main/resources/META-INF/eclipse-compiler.bnd delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/input/test/UpperCase/UpperCasePackage.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/input/test/inheritance/Inheritance.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/input/test/multiple/Multiple.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/input/test/simple/Simple.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/java/org/ow2/jonas/eclipse/compiler/EclipseCompilerTestCase.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/Interface.java delete mode 100644 jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/SuperClass.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/pom.xml delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/EjbJar.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/GenICTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASBaseTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASClusterConfigTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JProperty.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/ServerDeploy.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/WsGenTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/BootstrapTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/DescriptorHandler.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EJBDeploymentTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EjbJar.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenICTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenericDeploymentTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/HotDeploymentTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/InnerClassFilenameFilter.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASAntTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASBaseTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASClusterConfigTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JProperty.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasDeploymentTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasHotDeploymentTool.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/PropertyStatement.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/ServerDeploy.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/WsGenTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CarolCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterDaemon.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterTasks.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CmiCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Common.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbmCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeployableCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeploymentCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Director.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DiscoveryCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/EjbLevel.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/HaCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcRaCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcXmlCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JmsCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/LibCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/MailCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ModJk.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Script.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ServicesCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebContainerCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebLevel.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WsdlPublishCluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Archives.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/BaseTaskItf.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Carol.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Cmi.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Db.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Dbm.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableSelector.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeploymentPlans.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Discovery.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Ha.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JCopy.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JEcho.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JMkdir.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JReplace.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTouch.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcRa.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcXml.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Jms.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JmsRa.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JonasProperties.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Lib.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Mail.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/PropertyTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Replace.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Services.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Tasks.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/WebContainer.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/XMLSerializerTask.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JResourceLoginModule.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/Jaas.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JaasEntry.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/LoginModule.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Ajp.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Cluster.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Director.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Http.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Https.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Jetty.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Tomcat.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/File.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/Uddi.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/WsdlPublish.java delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb delete mode 100755 jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb.bat delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc delete mode 100755 jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc.bat delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/resources/META-INF/jonas-ant-tasks.bnd delete mode 100644 jonas/modules/tools/jonas-ant-tasks/src/main/resources/org/ow2/jonas/ant/antlib.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/ant/pom.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/ant/src/main/java/org/ow2/jonas/antmodular/cluster/clusterdaemon/ClusterDaemon.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/antlib-clusterdaemon.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/build-clusterdaemon.properties.template delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/api/pom.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/ClusterDaemonException.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/IClusterDaemon.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/META-INF/jonas-cluster-daemon-api.bnd delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/metadata.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/pom.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemon.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonAdmin.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonException.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonMBean.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonTools.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/CmdReaderThread.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/MonitorThread.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ShutdownHookThread.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteException.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteHelper.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerException.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerHelper.java delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd delete mode 100755 jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd.bat delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/conf/clusterd.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/META-INF/jonas-cluster-daemon-core.bnd delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/metadata.xml delete mode 100644 jonas/modules/tools/jonas-cluster-daemon/pom.xml delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/pom.xml delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/META-INF/jonas-launcher-for-addons.bnd delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties delete mode 100644 jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/pom.xml delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/resources/META-INF/jonas-launcher.bnd delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties delete mode 100644 jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties delete mode 100644 jonas/modules/tools/launchers/pom.xml delete mode 100644 jonas/modules/tools/maven/genic-plugin/pom.xml delete mode 100644 jonas/modules/tools/maven/genic-plugin/src/main/java/org/ow2/jonas/tool/maven/genic/plugin/GenICMojo.java delete mode 100644 jonas/modules/tools/maven/packaging/pom.xml delete mode 100644 jonas/modules/tools/maven/packaging/src/main/java/org/ow2/jonas/tool/maven/packaging/ApplicationPackagingMojo.java delete mode 100644 jonas/modules/tools/maven/pom.xml delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/pom.xml delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AbstractJOnASResourceTransformer.java delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AntLibResourceTransformer.java delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/BuildResourceTransformer.java delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Input.java delete mode 100644 jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Target.java delete mode 100644 jonas/modules/tools/maven/wsgen-plugin/pom.xml delete mode 100644 jonas/modules/tools/maven/wsgen-plugin/src/main/java/org/ow2/jonas/tool/maven/wsgen/plugin/WsGenMojo.java delete mode 100644 jonas/modules/tools/migration-jboss/pom.xml delete mode 100644 jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Migrate.java delete mode 100644 jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Transformer.java delete mode 100644 jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jboss.xml delete mode 100644 jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jbosscmp-jdbc.xml delete mode 100644 jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jonas-ejb-jar.xml delete mode 100644 jonas/modules/tools/pom.xml delete mode 100644 jonas/pom.xml delete mode 100644 jonas_doc/core/src/resources/images/JonasSmall.png delete mode 100644 jonas_tests/.classpath delete mode 100644 jonas_tests/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jonas_tests/applications/build.xml delete mode 100644 jonas_tests/applications/src/org/objectweb/jonas/applications/util/JApplicationsTestCase.java delete mode 100644 jonas_tests/build.properties delete mode 100755 jonas_tests/build.xml delete mode 100644 jonas_tests/cluster/build-client.xml delete mode 100644 jonas_tests/cluster/build.properties delete mode 100644 jonas_tests/cluster/build.xml delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/AbsTestClient.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Checker.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/ClientTask.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/JOnASTask.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/RunnableTask.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/TestEnum.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Worker.java delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/build-jc.properties delete mode 100644 jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/defConf.properties delete mode 100644 jonas_tests/cluster/etc/footer.html delete mode 100644 jonas_tests/cluster/etc/header.html delete mode 100644 jonas_tests/cluster/etc/style/environment/junit-noframes.xsl delete mode 100644 jonas_tests/cluster/etc/style/include/junit-noframes.xsl delete mode 100644 jonas_tests/cluster/etc/style/standalone/junit-noframes.xsl delete mode 100644 jonas_tests/cluster/etc/style/standalone_perfs/compare.xsl delete mode 100644 jonas_tests/cluster/etc/style/standalone_perfs/junit-noframes.xsl delete mode 100644 jonas_tests/cluster/etc/suiteslist.html delete mode 100644 jonas_tests/cluster/logging/logging.properties delete mode 100644 jonas_tests/cluster/resources/cmi-client.xml delete mode 100644 jonas_tests/cluster/resources/test-config.properties delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/ClientTest.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/SampleCluster2Test.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/ClientTest.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/SampleCluster3Test.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientException.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientFOSFSB.java delete mode 100644 jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientLBRemote.java delete mode 100644 jonas_tests/cluster/testing-applications/build.xml delete mode 100644 jonas_tests/cluster/testing-applications/jmx/build.xml delete mode 100644 jonas_tests/cluster/testing-applications/jmx/etc/META-INF/MANIFEST.MF delete mode 100644 jonas_tests/cluster/testing-applications/jmx/etc/application.xml delete mode 100644 jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-application.xml delete mode 100644 jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-jonas.xml delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/ClientJMXTester.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/JMXTest.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientBase.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientUtility.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterFangBean.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTester.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTesterBean.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/LocalClusterJMXTester.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterFangBean.java delete mode 100644 jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterJMXTester.java delete mode 100644 jonas_tests/cluster/testing-applications/jonas-common.xml delete mode 100644 jonas_tests/cluster/tools/maven-ant-tasks-2.0.9.jar delete mode 100644 jonas_tests/conformance/.gitignore delete mode 100644 jonas_tests/conformance/build.xml delete mode 100644 jonas_tests/conformance/build_hotdeploy.xml delete mode 100644 jonas_tests/conformance/src/hotdeploy1/HotDeploySLR.java delete mode 100644 jonas_tests/conformance/src/hotdeploy2/HotDeploySLR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/annuaire/PersonneEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/AppliSession.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/MetSession.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/applimet.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/AccountEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/ManagerSF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/Moscone.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/MosconeST.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/cluster/IdentityEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/AccountEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/BDateEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/E4QueryEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/PersonEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/SimpleEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/pkautoObjectEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ejbql/SessionTestBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/etype/EtypeBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FileEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FolderSY.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper2EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper3EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/PersonEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/UserEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/connectorCASLR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/runtimeCASLR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/securedCASLR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/transactedCASLR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jca15/Utility.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/Manager.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/ManagerSY.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/jdbc.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA1EBRBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA2EBRBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/SimpleSessionSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/TargetSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Listener.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/MRecordEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_1SF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_2SF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/SenderSF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/AddressBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CarBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CreditCardBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CustomerBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InsuranceBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InvoiceBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/PhoneBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P1EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P2EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P3EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P4EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/family/PeopleEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/jonas-mou.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/FrontSFR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BHomeLocal.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BLocal.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/Front.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontHome.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontSFR.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/jonas-oob.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/oob.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/rcycle/PersonEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/AttributeEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/MainEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/AEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/BEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relatives/RelativeEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/remoterunner/RemoteRunnerSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/DerivedSF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/Listener.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleCommon.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSL.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/jonas-transacted.xml delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/worker/WorkerSF.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bank.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankRead.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankWrite.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_thread.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/C_distribution.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Frontal.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Jdbc.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_bankRO.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bank.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRW.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCS.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCST.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCSpf.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_distribution.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_AdvancedHomeEC.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_BasicHomeInterface.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_omb.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_oob.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/C_Relation.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_BasicEjbqlEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_EjbqlEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_RcycleEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_omb_CS_EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_oob_CS_EC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_BasicEjbqlEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_RcycleEC2.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_entity.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/hotdeploy/F_EjbJarHotDeploy.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_BasicMDB.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_RollbackMDB.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/F_Connectors.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/README delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/A_AccessControl.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/B_AccessControl.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/F_RunAs.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/session/F_Smt.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_Timer.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_TimerEntity.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttribute.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttributeEntity.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/C_transaction.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_BeanToBeanTx.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_Jotm.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_State.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tjdbc.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tmanager.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JBean.java delete mode 100644 jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JTestCase.java delete mode 100644 jonas_tests/deployment/build.xml delete mode 100644 jonas_tests/deployment/src/DDTest.java delete mode 100644 jonas_tests/doc/index.html delete mode 100644 jonas_tests/etc/style/standalone_perfs/compare.xsl delete mode 100644 jonas_tests/etc/suiteslist.html delete mode 100644 jonas_tests/examples/base/.gitignore delete mode 100644 jonas_tests/examples/base/examples/README delete mode 100644 jonas_tests/examples/base/examples/alarm/README delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmData.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmListenerBean.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmManager.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecord.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordBean.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordHome.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Debug.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Profil.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/View.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewBean.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewHome.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewProxy.java delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/alarm.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/jonas-alarm.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/build.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/client/org/objectweb/alarm/AlarmGenerator.java delete mode 100644 jonas_tests/examples/base/examples/alarm/db1.prp delete mode 100644 jonas_tests/examples/base/examples/alarm/etc/alarm.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/etc/application.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/etc/jonas-alarm.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/etc/jonas-web.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/etc/web.xml delete mode 100644 jonas_tests/examples/base/examples/alarm/src/org/objectweb/alarm/Sender.java delete mode 100644 jonas_tests/examples/base/examples/alarm/web/generator.html delete mode 100644 jonas_tests/examples/base/examples/alarm/web/images/alarmArchi.gif delete mode 100644 jonas_tests/examples/base/examples/alarm/web/images/jetty.png delete mode 100644 jonas_tests/examples/base/examples/alarm/web/images/logo_jonas.jpg delete mode 100644 jonas_tests/examples/base/examples/alarm/web/images/return.gif delete mode 100644 jonas_tests/examples/base/examples/alarm/web/images/tomcat.gif delete mode 100644 jonas_tests/examples/base/examples/alarm/web/index.html delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/createfilter.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/current.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/list.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/remove.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/removefilter.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/setfilter.jsp delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/top.html delete mode 100644 jonas_tests/examples/base/examples/alarm/web/secured/unsetfilter.jsp delete mode 100644 jonas_tests/examples/base/examples/build.properties delete mode 100644 jonas_tests/examples/base/examples/build.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/README delete mode 100644 jonas_tests/examples/base/examples/cmp2/build.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/resources/web/index.html delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/resources/web/style.css delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/xml/application.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/xml/cmp2.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/xml/jonas-cmp2.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/AddressDO.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/Name.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipHomeLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipLocal.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentHomeRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentBean.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentHomeRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentRemote.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest2.java delete mode 100644 jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest3.java delete mode 100644 jonas_tests/examples/base/examples/earsample/README delete mode 100644 jonas_tests/examples/base/examples/earsample/build.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/jaas/jaas.config delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/jetty.gif delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_jonas_logo.gif delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_logo.png delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/tomcat.gif delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/valid-xhtml11.png delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/img/vcss.png delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/index.html delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/resources/web/ow_jonas.css delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/application.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client1.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client2.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/jonas-secusb.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/jonas-web.xml delete mode 100755 jonas_tests/examples/base/examples/earsample/etc/xml/ra.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/secusb.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/Op.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpBean.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpHome.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocal.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocalHome.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/clients/Client.java delete mode 100755 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/resourceadapters/ResourceAdapterImpl.java delete mode 100644 jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/servlets/ServletOp.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/.cvsignore delete mode 100644 jonas_tests/examples/base/examples/emb-sample/README delete mode 100644 jonas_tests/examples/base/examples/emb-sample/build.xml delete mode 100644 jonas_tests/examples/base/examples/emb-sample/emb-core/README delete mode 100644 jonas_tests/examples/base/examples/emb-sample/etc/application.xml delete mode 100644 jonas_tests/examples/base/examples/emb-sample/etc/embSampleSession.xml delete mode 100644 jonas_tests/examples/base/examples/emb-sample/etc/jonas-embSampleSession.xml delete mode 100644 jonas_tests/examples/base/examples/emb-sample/etc/web.xml delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/README delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/commons-fileupload-1.1.1.jar delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/emb-core.ear delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/emb-jsr86-api.jar delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/emb-ow-mfb-core.jar delete mode 100644 jonas_tests/examples/base/examples/emb-sample/lib/emb-ow-plugins-api.jar delete mode 100644 jonas_tests/examples/base/examples/emb-sample/plugins/README delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/icons/valid-xhtml11.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/icons/vcss.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/footer.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/header.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/mediaList.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/navigation.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/templatePage.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/jsps/uploadForm.jsp delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/Java_CompatEE.gif delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/apache.svg delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/frame.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/iss-fireworks.mp3 delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/jonas.mp4 delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/jonas.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/mask.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/objectweb.png delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/samples.properties delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/snow.jpg delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/starfish.jpg delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/samples/white-valley.jpg delete mode 100644 jonas_tests/examples/base/examples/emb-sample/resources/theme/style.css delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/MediaSampleException.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ActionDispatcher.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/BaseSampleServlet.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageBW.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageChained.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageFormat.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageFrame.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageHalfSize.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageOverlayed.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleImageSvgToPng.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleVideoTo3GPP.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleVideoToMpeg.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ConvertSampleVideoToMpegTs.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ExtractHeaderData.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/HomeSample.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/HttpSessionMgr.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/ListSampleMedia.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/LoadSampleMedia.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/RetrieveSampleMedia.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/servlet/UploadSampleMedia.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/session/HttpSessionMgr.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/session/MediaSampleSessionBean.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/session/MediaSampleSessionLocal.java delete mode 100644 jonas_tests/examples/base/examples/emb-sample/src/emb/sample/session/MediaSampleSessionLocalHome.java delete mode 100644 jonas_tests/examples/base/examples/fdf/MyJOnASCluster.fdf delete mode 100644 jonas_tests/examples/base/examples/hibernate/README delete mode 100644 jonas_tests/examples/base/examples/hibernate/build.properties delete mode 100644 jonas_tests/examples/base/examples/hibernate/build.xml delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/resources/Cat.hbm.xml delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/resources/hibernate.cfg.xml delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/sql/initdb.sql delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/sql/resetdb.sql delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/xml/jonas-web.xml delete mode 100644 jonas_tests/examples/base/examples/hibernate/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/antlr-2.7.6rc1.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/c3p0-0.9.0.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/cglib-2.1.3.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/cglib-nodep-2.1_3.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/dom4j-1.6.1.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/ehcache-1.1.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/hibernate-3.1.2.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/jaxen-1.1-beta-7.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/oscache-2.1.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/proxool-0.8.3.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/swarmcache-1.0rc2.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/lib/versioncheck.jar delete mode 100644 jonas_tests/examples/base/examples/hibernate/src/org/hibernate/examples/quickstart/Cat.java delete mode 100644 jonas_tests/examples/base/examples/hibernate/src/org/hibernate/examples/quickstart/TestServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/README delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/build.xml delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/resources/web/img/logo_jonas.jpg delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/resources/web/index.html delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/resources/web/style.css delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/xml/application.xml delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/xml/jonas-web.xml delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/ClustMgmtServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/ClusterDaemonServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/J2eemanagementBaseServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/JmsAdminServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MgmtServlet.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MonologListener.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MyListener.java delete mode 100644 jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/NewServerMgmtServlet.java delete mode 100644 jonas_tests/examples/base/examples/j_common.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/README delete mode 100644 jonas_tests/examples/base/examples/jaasclient/build.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client-swing.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client1.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client2.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client3.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-secusb.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/etc/xml/secusb.xml delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOp.java delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClient.java delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClientSwing.java delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOp.java delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpBean.java delete mode 100644 jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpHome.java delete mode 100644 jonas_tests/examples/base/examples/jdo/Bank_src.zip delete mode 100644 jonas_tests/examples/base/examples/jdo/README delete mode 100644 jonas_tests/examples/base/examples/jdo/build.xml delete mode 100644 jonas_tests/examples/base/examples/jonas-common.xml delete mode 100644 jonas_tests/examples/base/examples/src/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/eb/Account.idb delete mode 100644 jonas_tests/examples/base/examples/src/eb/Account.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/Account.pgsql delete mode 100644 jonas_tests/examples/base/examples/src/eb/Account.sql delete mode 100644 jonas_tests/examples/base/examples/src/eb/AccountExplBean.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/AccountHome.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/AccountImpl2Bean.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/AccountImplBean.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/Accounthsqldb.sql delete mode 100644 jonas_tests/examples/base/examples/src/eb/ClientAccount.java delete mode 100644 jonas_tests/examples/base/examples/src/eb/README delete mode 100644 jonas_tests/examples/base/examples/src/eb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/eb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/eb/db1.prp delete mode 100644 jonas_tests/examples/base/examples/src/eb/eb.xml delete mode 100644 jonas_tests/examples/base/examples/src/eb/jonas-eb.xml delete mode 100644 jonas_tests/examples/base/examples/src/lb/Client.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/ManacEC.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/ManacLocal.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/ManacLocalHome.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/Manager.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/ManagerHome.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/ManagerSF.java delete mode 100644 jonas_tests/examples/base/examples/src/lb/README delete mode 100644 jonas_tests/examples/base/examples/src/lb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/lb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/lb/db1.prp delete mode 100644 jonas_tests/examples/base/examples/src/lb/jonas-lb.xml delete mode 100644 jonas_tests/examples/base/examples/src/lb/lb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/ClientMailer.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailer.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerHome.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/README delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/SessionMailer.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/SessionMailerBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/SessionMailerHome.java delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/jonas-mailsb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mailsb/mailsb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_a.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_b.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbClient.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/README delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/jonas-newsamplemdb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb/newsamplemdb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_a.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_b.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbClient.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/README delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/jonas-newsamplemdb2.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/newsamplemdb2.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/Env.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvHome.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/OrderBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/README delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/SampleAppliClient.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/Stock.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/StockBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHandlerBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHome.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/db1.prp delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/jonas-sampleappli.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/sampleappli/sampleappli.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbBean.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbClient.java delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/README delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/jonas-samplemdb.xml delete mode 100644 jonas_tests/examples/base/examples/src/mdb/samplemdb/samplemdb.xml delete mode 100644 jonas_tests/examples/base/examples/src/sb/ClientOp.java delete mode 100644 jonas_tests/examples/base/examples/src/sb/Op.java delete mode 100644 jonas_tests/examples/base/examples/src/sb/OpBean.java delete mode 100644 jonas_tests/examples/base/examples/src/sb/OpHome.java delete mode 100644 jonas_tests/examples/base/examples/src/sb/README delete mode 100644 jonas_tests/examples/base/examples/src/sb/application-client.xml delete mode 100644 jonas_tests/examples/base/examples/src/sb/build.xml delete mode 100644 jonas_tests/examples/base/examples/src/sb/jonas-sb.xml delete mode 100644 jonas_tests/examples/base/examples/src/sb/sb.xml delete mode 100644 jonas_tests/examples/base/examples/src/src_common.xml delete mode 100644 jonas_tests/examples/base/examples/statelessbean/build.xml delete mode 100644 jonas_tests/examples/base/examples/statelessbean/etc/web.xml delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientServletStateless.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientStateless.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessBean.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessInterceptor.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessLocal.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessOnlyAddMethodInterceptor.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessRemote.java delete mode 100644 jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/package.html delete mode 100644 jonas_tests/examples/base/examples/webservices/README delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/build.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/jonas-webservices.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/ssbEndpointMapping.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/webservices.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/wsdl/ssbEndpoint.wsdl delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpoint.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpointSLL.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/jonas-wsearsample.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/wsearsample.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/build.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jetty.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jonas.ico delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_jonas_logo.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_logo.png delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/tomcat.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/index.html delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/search-google.jsp delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/style/ow_jonas.css delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/application-wsclient.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/ejb-jar.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/googleMapping.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/jonas-ejb-jar.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/web-wsclient-front.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/wsdl/GoogleSearch.wsdl delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBean.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanHome.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanSLR.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/DirectoryCategory.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchPort.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchResult.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchService.java delete mode 100644 jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/ResultElement.java delete mode 100644 jonas_tests/examples/base/examples/webservices/build.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/etc/xml/application.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/build.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByJSP.jsp delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByServlet.html delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jetty.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jonas.ico delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_jonas_logo.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_logo.png delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/tomcat.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/index.html delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/style/ow_jonas.css delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/googleMapping.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/jonas-web.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/wsdl/GoogleSearch.wsdl delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/DirectoryCategory.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchPort.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchResult.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchService.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/ResultElement.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/servlets/wsclient/WsClientServlet.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/README delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/build.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/credentials.properties delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/sample-crypto.properties delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jetty.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jonas.ico delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_jonas_logo.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_logo.png delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/tomcat.gif delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/index.html delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/jaxrpcTest.jsp delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/style/ow_jonas.css delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/clientMapping.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jaxrpcEndpointMapping.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jonas-webservices.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/web.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/webservices.xml delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/wsdl/jaxrpcEndpoint.wsdl delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterface.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterfaceService.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/security/ServerSideCallbackHandler.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpoint.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpointInterface.java delete mode 100644 jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/wsclient/JOnASJaxRpcClientServlet.java delete mode 100644 jonas_tests/examples/base/examples/xdoclet/ClientCustomer.java delete mode 100644 jonas_tests/examples/base/examples/xdoclet/CustomerBean.java delete mode 100644 jonas_tests/examples/base/examples/xdoclet/Name.java delete mode 100644 jonas_tests/examples/base/examples/xdoclet/PhoneBean.java delete mode 100644 jonas_tests/examples/base/examples/xdoclet/README delete mode 100644 jonas_tests/examples/base/examples/xdoclet/build.xml delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-apache-module-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-ejb-module-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-exolab-module-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-objectweb-module-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-web-module-1.2.2.jar delete mode 100644 jonas_tests/examples/base/examples/xdoclet/lib/xjavadoc-1.1.jar delete mode 100644 jonas_tests/examples/build.xml delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/alarm/C_alarm.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/cmp2/C_cmp2.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/earsample/C_earsample.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/eb/C_eb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/hibernate/C_hibernate.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/j2eemanagement/C_j2eemanagement.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/lb/C_lb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mailsb/C_mailsb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/C_mdb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_sampleappli.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_samplemdb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sampleCluster2/C_sampleCluster2.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sb/C_sb.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_WebExamples.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_suite.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/A_WebServicesEndpoint.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/C_webservices.java delete mode 100644 jonas_tests/examples/src/org/objectweb/jonas/examples/util/JExampleTestCase.java delete mode 100644 jonas_tests/j2eeca/build.xml delete mode 100644 jonas_tests/j2eeca/src/ersatz/resourceadapter/Utility.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/CommonClient.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/ConnectionImpl.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/JtestInteraction.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/JtestResourceAdapter.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/LocalTransactionImpl.java delete mode 100644 jonas_tests/j2eeca/src/fictional/resourceadapter/XAResourceImpl.java delete mode 100644 jonas_tests/jaxws/jaxws-felix/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-felix/src/main/config/config.properties delete mode 100644 jonas_tests/jaxws/jaxws-felix/src/main/config/jonas-autodeploy-bundles.properties delete mode 100644 jonas_tests/jaxws/jaxws-felix/src/main/config/testng.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/ejb3/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/Hello.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/HelloBean.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBean_descriptor.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/easybeans.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/webservices.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/wsdl/JAXWSBean_descriptor.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanInjection.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/resources/META-INF/wsdl/JAXWSBeanInjection.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwihtInterceptors.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwithAroundInvoke.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/GreeterInterceptor.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwihtInterceptors.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwithAroundInvoke.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithWebMethod.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithoutWebMethod.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithoutWebMethod.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/JAXWSBean3.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/Person.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1Response.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2Response.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/wsdl/JAXWSBean3Service.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/Hello.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/HelloBean.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterLogicalHandler.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterSOAPHandler.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/webservices.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterLogicalHandler.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterSOAPHandler.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/handlers.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/handlers.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/java/org/ow2/jonas/ws/jaxws/test/CalculatorImpl.java delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/jonas-web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/web.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-base/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/pom.xml delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ejb3/Hello.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DispatchAPIWebserviceClientTestCase.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DynamicProxyWebserviceClientTestCase.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/EJBClientTestCases.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/PojoClientTestCases.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/JWebServicesTestCase.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/SimpleServiceInterface.java delete mode 100644 jonas_tests/jaxws/jaxws-test-clients/src/main/resources/request1.xml delete mode 100644 jonas_tests/jaxws/pom.xml delete mode 100644 jonas_tests/jonas5_tests.ipr delete mode 100644 jonas_tests/jonasadmin/build.xml delete mode 100755 jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/jonasserver/F_JonasAdminInfoServer.java delete mode 100755 jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/resource/F_JonasAdminResourceDatasource.java delete mode 100755 jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/service/database/F_JonasAdminDatabase.java delete mode 100644 jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JProperties.java delete mode 100644 jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JonasAdminTestCase.java delete mode 100644 jonas_tests/junit.bat delete mode 100755 jonas_tests/junit.sh delete mode 100644 jonas_tests/pom.xml delete mode 100644 jonas_tests/protocols/clientconf/carol.properties delete mode 100644 jonas_tests/protocols/clientconf/traceclient.properties delete mode 100644 jonas_tests/protocols/modules/client/META-INF/application-client.xml delete mode 100644 jonas_tests/protocols/modules/client/resources/jaas.config delete mode 100644 jonas_tests/protocols/modules/ejbs/build/build.xml delete mode 100755 jonas_tests/protocols/scripts/client.sh delete mode 100644 jonas_tests/samplehttp/build.xml delete mode 100644 jonas_tests/ws/build.xml delete mode 100644 jonas_tests/ws/etc/apps/time-test.xml delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/BeanAccessorSLR.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC1SLL.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC2SLR.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanHandler.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanSLR.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/wsclient/WsClient1SLR.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/endpoint/F_TimeEndpoint.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/mbeans/F_WebServicesMBeans.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/F_AxisService.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/ServiceRefTLE.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/A_WsGen.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/F_WsGen.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/hello/HelloWsServiceLocator.java delete mode 100644 jonas_tests/ws/src/org/objectweb/jonas/jtests/util/JWebServicesTestCase.java rename {jonas_doc/plans => plans}/pom.xml (100%) rename jonas_doc/pom.xml => pom.xml (100%) diff --git a/jonas_doc/.gitignore b/.gitignore similarity index 100% rename from jonas_doc/.gitignore rename to .gitignore diff --git a/jonas_doc/.project b/.project similarity index 100% rename from jonas_doc/.project rename to .project diff --git a/jonas_doc/README b/README similarity index 100% rename from jonas_doc/README rename to README diff --git a/jonas_doc/core/build.properties b/core/build.properties similarity index 100% rename from jonas_doc/core/build.properties rename to core/build.properties diff --git a/jonas_doc/core/build.xml b/core/build.xml similarity index 100% rename from jonas_doc/core/build.xml rename to core/build.xml diff --git a/jonas_doc/core/olddoc/Admin.html b/core/olddoc/Admin.html similarity index 100% rename from jonas_doc/core/olddoc/Admin.html rename to core/olddoc/Admin.html diff --git a/jonas_doc/core/olddoc/Cmi.html b/core/olddoc/Cmi.html similarity index 100% rename from jonas_doc/core/olddoc/Cmi.html rename to core/olddoc/Cmi.html diff --git a/jonas_doc/core/olddoc/Deployer.html b/core/olddoc/Deployer.html similarity index 100% rename from jonas_doc/core/olddoc/Deployer.html rename to core/olddoc/Deployer.html diff --git a/jonas_doc/core/olddoc/Domain.html b/core/olddoc/Domain.html similarity index 100% rename from jonas_doc/core/olddoc/Domain.html rename to core/olddoc/Domain.html diff --git a/jonas_doc/core/olddoc/JOnASWP.html b/core/olddoc/JOnASWP.html similarity index 100% rename from jonas_doc/core/olddoc/JOnASWP.html rename to core/olddoc/JOnASWP.html diff --git a/jonas_doc/core/olddoc/JOnASWebServices.html b/core/olddoc/JOnASWebServices.html similarity index 100% rename from jonas_doc/core/olddoc/JOnASWebServices.html rename to core/olddoc/JOnASWebServices.html diff --git a/jonas_doc/core/olddoc/MBeans.html b/core/olddoc/MBeans.html similarity index 100% rename from jonas_doc/core/olddoc/MBeans.html rename to core/olddoc/MBeans.html diff --git a/jonas_doc/core/olddoc/PG_Client.html b/core/olddoc/PG_Client.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Client.html rename to core/olddoc/PG_Client.html diff --git a/jonas_doc/core/olddoc/PG_Connector.html b/core/olddoc/PG_Connector.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Connector.html rename to core/olddoc/PG_Connector.html diff --git a/jonas_doc/core/olddoc/PG_Deployment.html b/core/olddoc/PG_Deployment.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Deployment.html rename to core/olddoc/PG_Deployment.html diff --git a/jonas_doc/core/olddoc/PG_EarDeployment.html b/core/olddoc/PG_EarDeployment.html similarity index 100% rename from jonas_doc/core/olddoc/PG_EarDeployment.html rename to core/olddoc/PG_EarDeployment.html diff --git a/jonas_doc/core/olddoc/PG_Entity.html b/core/olddoc/PG_Entity.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Entity.html rename to core/olddoc/PG_Entity.html diff --git a/jonas_doc/core/olddoc/PG_Environment.html b/core/olddoc/PG_Environment.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Environment.html rename to core/olddoc/PG_Environment.html diff --git a/jonas_doc/core/olddoc/PG_J2eeApps.html b/core/olddoc/PG_J2eeApps.html similarity index 100% rename from jonas_doc/core/olddoc/PG_J2eeApps.html rename to core/olddoc/PG_J2eeApps.html diff --git a/jonas_doc/core/olddoc/PG_JmsGuide.html b/core/olddoc/PG_JmsGuide.html similarity index 100% rename from jonas_doc/core/olddoc/PG_JmsGuide.html rename to core/olddoc/PG_JmsGuide.html diff --git a/jonas_doc/core/olddoc/PG_LogModules.html b/core/olddoc/PG_LogModules.html similarity index 100% rename from jonas_doc/core/olddoc/PG_LogModules.html rename to core/olddoc/PG_LogModules.html diff --git a/jonas_doc/core/olddoc/PG_MsgDrvBean.html b/core/olddoc/PG_MsgDrvBean.html similarity index 100% rename from jonas_doc/core/olddoc/PG_MsgDrvBean.html rename to core/olddoc/PG_MsgDrvBean.html diff --git a/jonas_doc/core/olddoc/PG_Packaging.html b/core/olddoc/PG_Packaging.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Packaging.html rename to core/olddoc/PG_Packaging.html diff --git a/jonas_doc/core/olddoc/PG_Security.html b/core/olddoc/PG_Security.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Security.html rename to core/olddoc/PG_Security.html diff --git a/jonas_doc/core/olddoc/PG_Session.html b/core/olddoc/PG_Session.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Session.html rename to core/olddoc/PG_Session.html diff --git a/jonas_doc/core/olddoc/PG_Transaction.html b/core/olddoc/PG_Transaction.html similarity index 100% rename from jonas_doc/core/olddoc/PG_Transaction.html rename to core/olddoc/PG_Transaction.html diff --git a/jonas_doc/core/olddoc/PG_War.html b/core/olddoc/PG_War.html similarity index 100% rename from jonas_doc/core/olddoc/PG_War.html rename to core/olddoc/PG_War.html diff --git a/jonas_doc/core/olddoc/Services.html b/core/olddoc/Services.html similarity index 100% rename from jonas_doc/core/olddoc/Services.html rename to core/olddoc/Services.html diff --git a/jonas_doc/core/olddoc/ant-ejbjar.html b/core/olddoc/ant-ejbjar.html similarity index 100% rename from jonas_doc/core/olddoc/ant-ejbjar.html rename to core/olddoc/ant-ejbjar.html diff --git a/jonas_doc/core/olddoc/clusterd.html b/core/olddoc/clusterd.html similarity index 100% rename from jonas_doc/core/olddoc/clusterd.html rename to core/olddoc/clusterd.html diff --git a/jonas_doc/core/olddoc/clustering.html b/core/olddoc/clustering.html similarity index 100% rename from jonas_doc/core/olddoc/clustering.html rename to core/olddoc/clustering.html diff --git a/jonas_doc/core/olddoc/common.css b/core/olddoc/common.css similarity index 100% rename from jonas_doc/core/olddoc/common.css rename to core/olddoc/common.css diff --git a/jonas_doc/core/olddoc/howto/Clustering.html b/core/olddoc/howto/Clustering.html similarity index 100% rename from jonas_doc/core/olddoc/howto/Clustering.html rename to core/olddoc/howto/Clustering.html diff --git a/jonas_doc/core/olddoc/howto/Firewall.html b/core/olddoc/howto/Firewall.html similarity index 100% rename from jonas_doc/core/olddoc/howto/Firewall.html rename to core/olddoc/howto/Firewall.html diff --git a/jonas_doc/core/olddoc/howto/JMSClustering.html b/core/olddoc/howto/JMSClustering.html similarity index 100% rename from jonas_doc/core/olddoc/howto/JMSClustering.html rename to core/olddoc/howto/JMSClustering.html diff --git a/jonas_doc/core/olddoc/howto/JORAMdistributed_JOnAS_4_1.html b/core/olddoc/howto/JORAMdistributed_JOnAS_4_1.html similarity index 100% rename from jonas_doc/core/olddoc/howto/JORAMdistributed_JOnAS_4_1.html rename to core/olddoc/howto/JORAMdistributed_JOnAS_4_1.html diff --git a/jonas_doc/core/olddoc/howto/JSR160_support.html b/core/olddoc/howto/JSR160_support.html similarity index 100% rename from jonas_doc/core/olddoc/howto/JSR160_support.html rename to core/olddoc/howto/JSR160_support.html diff --git a/jonas_doc/core/olddoc/howto/JonasArchi.html b/core/olddoc/howto/JonasArchi.html similarity index 100% rename from jonas_doc/core/olddoc/howto/JonasArchi.html rename to core/olddoc/howto/JonasArchi.html diff --git a/jonas_doc/core/olddoc/howto/JonasMBeansHowTo.html b/core/olddoc/howto/JonasMBeansHowTo.html similarity index 100% rename from jonas_doc/core/olddoc/howto/JonasMBeansHowTo.html rename to core/olddoc/howto/JonasMBeansHowTo.html diff --git a/jonas_doc/core/olddoc/howto/WebSphereMQ.html b/core/olddoc/howto/WebSphereMQ.html similarity index 100% rename from jonas_doc/core/olddoc/howto/WebSphereMQ.html rename to core/olddoc/howto/WebSphereMQ.html diff --git a/jonas_doc/core/olddoc/howto/Win32Service.html b/core/olddoc/howto/Win32Service.html similarity index 100% rename from jonas_doc/core/olddoc/howto/Win32Service.html rename to core/olddoc/howto/Win32Service.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/AutomaticClusterConfiguration.html b/core/olddoc/howto/clusterdetails/AutomaticClusterConfiguration.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/AutomaticClusterConfiguration.html rename to core/olddoc/howto/clusterdetails/AutomaticClusterConfiguration.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/ManualClusterConfiguration.html b/core/olddoc/howto/clusterdetails/ManualClusterConfiguration.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/ManualClusterConfiguration.html rename to core/olddoc/howto/clusterdetails/ManualClusterConfiguration.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/c-jdbc.html b/core/olddoc/howto/clusterdetails/c-jdbc.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/c-jdbc.html rename to core/olddoc/howto/clusterdetails/c-jdbc.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/director.html b/core/olddoc/howto/clusterdetails/director.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/director.html rename to core/olddoc/howto/clusterdetails/director.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html b/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html rename to core/olddoc/howto/clusterdetails/mod_jk2-to-mod_jk.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2_embeddedtomcat.html b/core/olddoc/howto/clusterdetails/mod_jk2_embeddedtomcat.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/mod_jk2_embeddedtomcat.html rename to core/olddoc/howto/clusterdetails/mod_jk2_embeddedtomcat.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/mod_jk_embeddedtomcat.html b/core/olddoc/howto/clusterdetails/mod_jk_embeddedtomcat.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/mod_jk_embeddedtomcat.html rename to core/olddoc/howto/clusterdetails/mod_jk_embeddedtomcat.html diff --git a/jonas_doc/core/olddoc/howto/clusterdetails/sequoia.html b/core/olddoc/howto/clusterdetails/sequoia.html similarity index 100% rename from jonas_doc/core/olddoc/howto/clusterdetails/sequoia.html rename to core/olddoc/howto/clusterdetails/sequoia.html diff --git a/jonas_doc/core/olddoc/howto/common.css b/core/olddoc/howto/common.css similarity index 100% rename from jonas_doc/core/olddoc/howto/common.css rename to core/olddoc/howto/common.css diff --git a/jonas_doc/core/olddoc/howto/emb-images/emb-component.png b/core/olddoc/howto/emb-images/emb-component.png similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/emb-component.png rename to core/olddoc/howto/emb-images/emb-component.png diff --git a/jonas_doc/core/olddoc/howto/emb-images/emb-deps.png b/core/olddoc/howto/emb-images/emb-deps.png similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/emb-deps.png rename to core/olddoc/howto/emb-images/emb-deps.png diff --git a/jonas_doc/core/olddoc/howto/emb-images/mfb.png b/core/olddoc/howto/emb-images/mfb.png similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/mfb.png rename to core/olddoc/howto/emb-images/mfb.png diff --git a/jonas_doc/core/olddoc/howto/emb-images/src/emb-component.svg b/core/olddoc/howto/emb-images/src/emb-component.svg similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/src/emb-component.svg rename to core/olddoc/howto/emb-images/src/emb-component.svg diff --git a/jonas_doc/core/olddoc/howto/emb-images/src/emb-deps.svg b/core/olddoc/howto/emb-images/src/emb-deps.svg similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/src/emb-deps.svg rename to core/olddoc/howto/emb-images/src/emb-deps.svg diff --git a/jonas_doc/core/olddoc/howto/emb-images/src/mfb.svg b/core/olddoc/howto/emb-images/src/mfb.svg similarity index 100% rename from jonas_doc/core/olddoc/howto/emb-images/src/mfb.svg rename to core/olddoc/howto/emb-images/src/mfb.svg diff --git a/jonas_doc/core/olddoc/howto/images/JOnASJMX.gif b/core/olddoc/howto/images/JOnASJMX.gif similarity index 100% rename from jonas_doc/core/olddoc/howto/images/JOnASJMX.gif rename to core/olddoc/howto/images/JOnASJMX.gif diff --git a/jonas_doc/core/olddoc/howto/images/cluster1.gif b/core/olddoc/howto/images/cluster1.gif similarity index 100% rename from jonas_doc/core/olddoc/howto/images/cluster1.gif rename to core/olddoc/howto/images/cluster1.gif diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Apache.jpg b/core/olddoc/howto/images/clusterfiles/Apache.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Apache.jpg rename to core/olddoc/howto/images/clusterfiles/Apache.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Archi1.jpg b/core/olddoc/howto/images/clusterfiles/Archi1.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Archi1.jpg rename to core/olddoc/howto/images/clusterfiles/Archi1.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Archi2.jpg b/core/olddoc/howto/images/clusterfiles/Archi2.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Archi2.jpg rename to core/olddoc/howto/images/clusterfiles/Archi2.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Archi3.jpg b/core/olddoc/howto/images/clusterfiles/Archi3.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Archi3.jpg rename to core/olddoc/howto/images/clusterfiles/Archi3.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Archi4.jpg b/core/olddoc/howto/images/clusterfiles/Archi4.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Archi4.jpg rename to core/olddoc/howto/images/clusterfiles/Archi4.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Archi5.jpg b/core/olddoc/howto/images/clusterfiles/Archi5.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Archi5.jpg rename to core/olddoc/howto/images/clusterfiles/Archi5.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Architecture.jpg b/core/olddoc/howto/images/clusterfiles/Architecture.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Architecture.jpg rename to core/olddoc/howto/images/clusterfiles/Architecture.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/EJBCont.jpg b/core/olddoc/howto/images/clusterfiles/EJBCont.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/EJBCont.jpg rename to core/olddoc/howto/images/clusterfiles/EJBCont.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/FullJOnAS.jpg b/core/olddoc/howto/images/clusterfiles/FullJOnAS.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/FullJOnAS.jpg rename to core/olddoc/howto/images/clusterfiles/FullJOnAS.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/JOnASEJB.jpg b/core/olddoc/howto/images/clusterfiles/JOnASEJB.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/JOnASEJB.jpg rename to core/olddoc/howto/images/clusterfiles/JOnASEJB.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/JOnASWeb.jpg b/core/olddoc/howto/images/clusterfiles/JOnASWeb.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/JOnASWeb.jpg rename to core/olddoc/howto/images/clusterfiles/JOnASWeb.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Node.jpg b/core/olddoc/howto/images/clusterfiles/Node.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Node.jpg rename to core/olddoc/howto/images/clusterfiles/Node.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/Thumbs.db b/core/olddoc/howto/images/clusterfiles/Thumbs.db similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/Thumbs.db rename to core/olddoc/howto/images/clusterfiles/Thumbs.db diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/WebCont.jpg b/core/olddoc/howto/images/clusterfiles/WebCont.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/WebCont.jpg rename to core/olddoc/howto/images/clusterfiles/WebCont.jpg diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/common.css b/core/olddoc/howto/images/clusterfiles/common.css similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/common.css rename to core/olddoc/howto/images/clusterfiles/common.css diff --git a/jonas_doc/core/olddoc/howto/images/clusterfiles/sampleCluster2Screen.GIF b/core/olddoc/howto/images/clusterfiles/sampleCluster2Screen.GIF similarity index 100% rename from jonas_doc/core/olddoc/howto/images/clusterfiles/sampleCluster2Screen.GIF rename to core/olddoc/howto/images/clusterfiles/sampleCluster2Screen.GIF diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/JmsClustering-queues.jpg b/core/olddoc/howto/images/jmsclustering/JmsClustering-queues.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/JmsClustering-queues.jpg rename to core/olddoc/howto/images/jmsclustering/JmsClustering-queues.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/JmsClustering-topics.jpg b/core/olddoc/howto/images/jmsclustering/JmsClustering-topics.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/JmsClustering-topics.jpg rename to core/olddoc/howto/images/jmsclustering/JmsClustering-topics.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/joram.jpg b/core/olddoc/howto/images/jmsclustering/joram.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/joram.jpg rename to core/olddoc/howto/images/jmsclustering/joram.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/joram_ha.jpg b/core/olddoc/howto/images/jmsclustering/joram_ha.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/joram_ha.jpg rename to core/olddoc/howto/images/jmsclustering/joram_ha.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/mdb.jpg b/core/olddoc/howto/images/jmsclustering/mdb.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/mdb.jpg rename to core/olddoc/howto/images/jmsclustering/mdb.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/mdb_config.jpg b/core/olddoc/howto/images/jmsclustering/mdb_config.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/mdb_config.jpg rename to core/olddoc/howto/images/jmsclustering/mdb_config.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/queue.jpg b/core/olddoc/howto/images/jmsclustering/queue.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/queue.jpg rename to core/olddoc/howto/images/jmsclustering/queue.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jmsclustering/topic.jpg b/core/olddoc/howto/images/jmsclustering/topic.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jmsclustering/topic.jpg rename to core/olddoc/howto/images/jmsclustering/topic.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonas_cmp.gif b/core/olddoc/howto/images/jonas_cmp.gif similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonas_cmp.gif rename to core/olddoc/howto/images/jonas_cmp.gif diff --git a/jonas_doc/core/olddoc/howto/images/jonasarch.gif b/core/olddoc/howto/images/jonasarch.gif similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonasarch.gif rename to core/olddoc/howto/images/jonasarch.gif diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg1.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg1.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg1.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg1.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg2.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg2.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg2.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg2.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg3.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg3.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg3.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg3.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg4.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg4.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg4.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg4.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg5.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg5.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg5.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg5.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg6.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg6.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg6.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg6.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg7.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg7.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg7.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg7.jpg diff --git a/jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg8.jpg b/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg8.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg8.jpg rename to core/olddoc/howto/images/jonastransactionrecoveryhowto/recovimg8.jpg diff --git a/jonas_doc/core/olddoc/howto/images/logo_jonas.jpg b/core/olddoc/howto/images/logo_jonas.jpg similarity index 100% rename from jonas_doc/core/olddoc/howto/images/logo_jonas.jpg rename to core/olddoc/howto/images/logo_jonas.jpg diff --git a/jonas_doc/core/olddoc/howto/install_j2ee.html b/core/olddoc/howto/install_j2ee.html similarity index 100% rename from jonas_doc/core/olddoc/howto/install_j2ee.html rename to core/olddoc/howto/install_j2ee.html diff --git a/jonas_doc/core/olddoc/howto/install_jonas.html b/core/olddoc/howto/install_jonas.html similarity index 100% rename from jonas_doc/core/olddoc/howto/install_jonas.html rename to core/olddoc/howto/install_jonas.html diff --git a/jonas_doc/core/olddoc/howto/ws/sample-deploy.wsdd b/core/olddoc/howto/ws/sample-deploy.wsdd similarity index 100% rename from jonas_doc/core/olddoc/howto/ws/sample-deploy.wsdd rename to core/olddoc/howto/ws/sample-deploy.wsdd diff --git a/jonas_doc/core/olddoc/howto/ws/sample-server-config.wsdd b/core/olddoc/howto/ws/sample-server-config.wsdd similarity index 100% rename from jonas_doc/core/olddoc/howto/ws/sample-server-config.wsdd rename to core/olddoc/howto/ws/sample-server-config.wsdd diff --git a/jonas_doc/core/olddoc/howto/ws/sample-web.xml b/core/olddoc/howto/ws/sample-web.xml similarity index 100% rename from jonas_doc/core/olddoc/howto/ws/sample-web.xml rename to core/olddoc/howto/ws/sample-web.xml diff --git a/jonas_doc/core/olddoc/images/AreaGraph.png b/core/olddoc/images/AreaGraph.png similarity index 100% rename from jonas_doc/core/olddoc/images/AreaGraph.png rename to core/olddoc/images/AreaGraph.png diff --git a/jonas_doc/core/olddoc/images/JonasAdmin.gif b/core/olddoc/images/JonasAdmin.gif similarity index 100% rename from jonas_doc/core/olddoc/images/JonasAdmin.gif rename to core/olddoc/images/JonasAdmin.gif diff --git a/jonas_doc/core/olddoc/images/JonasAreas.png b/core/olddoc/images/JonasAreas.png similarity index 100% rename from jonas_doc/core/olddoc/images/JonasAreas.png rename to core/olddoc/images/JonasAreas.png diff --git a/jonas_doc/core/olddoc/images/WP_distr.gif b/core/olddoc/images/WP_distr.gif similarity index 100% rename from jonas_doc/core/olddoc/images/WP_distr.gif rename to core/olddoc/images/WP_distr.gif diff --git a/jonas_doc/core/olddoc/images/classloaders.png b/core/olddoc/images/classloaders.png similarity index 100% rename from jonas_doc/core/olddoc/images/classloaders.png rename to core/olddoc/images/classloaders.png diff --git a/jonas_doc/core/olddoc/images/cluster1.gif b/core/olddoc/images/cluster1.gif similarity index 100% rename from jonas_doc/core/olddoc/images/cluster1.gif rename to core/olddoc/images/cluster1.gif diff --git a/jonas_doc/core/olddoc/images/clusterd.gif b/core/olddoc/images/clusterd.gif similarity index 100% rename from jonas_doc/core/olddoc/images/clusterd.gif rename to core/olddoc/images/clusterd.gif diff --git a/jonas_doc/core/olddoc/images/clustering.gif b/core/olddoc/images/clustering.gif similarity index 100% rename from jonas_doc/core/olddoc/images/clustering.gif rename to core/olddoc/images/clustering.gif diff --git a/jonas_doc/core/olddoc/images/cmi-cluster-stub.gif b/core/olddoc/images/cmi-cluster-stub.gif similarity index 100% rename from jonas_doc/core/olddoc/images/cmi-cluster-stub.gif rename to core/olddoc/images/cmi-cluster-stub.gif diff --git a/jonas_doc/core/olddoc/images/cmi-jndi.gif b/core/olddoc/images/cmi-jndi.gif similarity index 100% rename from jonas_doc/core/olddoc/images/cmi-jndi.gif rename to core/olddoc/images/cmi-jndi.gif diff --git a/jonas_doc/core/olddoc/images/cmi.gif b/core/olddoc/images/cmi.gif similarity index 100% rename from jonas_doc/core/olddoc/images/cmi.gif rename to core/olddoc/images/cmi.gif diff --git a/jonas_doc/core/olddoc/images/domain_new.gif b/core/olddoc/images/domain_new.gif similarity index 100% rename from jonas_doc/core/olddoc/images/domain_new.gif rename to core/olddoc/images/domain_new.gif diff --git a/jonas_doc/core/olddoc/images/eb_img_31.gif b/core/olddoc/images/eb_img_31.gif similarity index 100% rename from jonas_doc/core/olddoc/images/eb_img_31.gif rename to core/olddoc/images/eb_img_31.gif diff --git a/jonas_doc/core/olddoc/images/favicon.ico b/core/olddoc/images/favicon.ico similarity index 100% rename from jonas_doc/core/olddoc/images/favicon.ico rename to core/olddoc/images/favicon.ico diff --git a/jonas_doc/core/olddoc/images/j2ee.gif b/core/olddoc/images/j2ee.gif similarity index 100% rename from jonas_doc/core/olddoc/images/j2ee.gif rename to core/olddoc/images/j2ee.gif diff --git a/jonas_doc/core/olddoc/images/jcaarch.gif b/core/olddoc/images/jcaarch.gif similarity index 100% rename from jonas_doc/core/olddoc/images/jcaarch.gif rename to core/olddoc/images/jcaarch.gif diff --git a/jonas_doc/core/olddoc/images/jconsole.png b/core/olddoc/images/jconsole.png similarity index 100% rename from jonas_doc/core/olddoc/images/jconsole.png rename to core/olddoc/images/jconsole.png diff --git a/jonas_doc/core/olddoc/images/jonas48repscenarios.jpg b/core/olddoc/images/jonas48repscenarios.jpg similarity index 100% rename from jonas_doc/core/olddoc/images/jonas48repscenarios.jpg rename to core/olddoc/images/jonas48repscenarios.jpg diff --git a/jonas_doc/core/olddoc/images/jonasTree.png b/core/olddoc/images/jonasTree.png similarity index 100% rename from jonas_doc/core/olddoc/images/jonasTree.png rename to core/olddoc/images/jonasTree.png diff --git a/jonas_doc/core/olddoc/images/jonasarch.gif b/core/olddoc/images/jonasarch.gif similarity index 100% rename from jonas_doc/core/olddoc/images/jonasarch.gif rename to core/olddoc/images/jonasarch.gif diff --git a/jonas_doc/core/olddoc/images/logo_jonas.jpg b/core/olddoc/images/logo_jonas.jpg similarity index 100% rename from jonas_doc/core/olddoc/images/logo_jonas.jpg rename to core/olddoc/images/logo_jonas.jpg diff --git a/jonas_doc/core/olddoc/images/pix.gif b/core/olddoc/images/pix.gif similarity index 100% rename from jonas_doc/core/olddoc/images/pix.gif rename to core/olddoc/images/pix.gif diff --git a/jonas_doc/core/olddoc/images/roles1.gif b/core/olddoc/images/roles1.gif similarity index 100% rename from jonas_doc/core/olddoc/images/roles1.gif rename to core/olddoc/images/roles1.gif diff --git a/jonas_doc/core/olddoc/images/sfsb-rep.jpg b/core/olddoc/images/sfsb-rep.jpg similarity index 100% rename from jonas_doc/core/olddoc/images/sfsb-rep.jpg rename to core/olddoc/images/sfsb-rep.jpg diff --git a/jonas_doc/core/olddoc/images/ws_client.jpg b/core/olddoc/images/ws_client.jpg similarity index 100% rename from jonas_doc/core/olddoc/images/ws_client.jpg rename to core/olddoc/images/ws_client.jpg diff --git a/jonas_doc/core/olddoc/images/ws_endpoint.jpg b/core/olddoc/images/ws_endpoint.jpg similarity index 100% rename from jonas_doc/core/olddoc/images/ws_endpoint.jpg rename to core/olddoc/images/ws_endpoint.jpg diff --git a/jonas_doc/core/olddoc/index.html b/core/olddoc/index.html similarity index 100% rename from jonas_doc/core/olddoc/index.html rename to core/olddoc/index.html diff --git a/jonas_doc/core/pom.xml b/core/pom.xml similarity index 100% rename from jonas_doc/core/pom.xml rename to core/pom.xml diff --git a/jonas_doc/core/src/docbook/doc-en/Glossary.xml b/core/src/docbook/doc-en/Glossary.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/Glossary.xml rename to core/src/docbook/doc-en/Glossary.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/JSR160_support.xml b/core/src/docbook/doc-en/admin/JSR160_support.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/JSR160_support.xml rename to core/src/docbook/doc-en/admin/JSR160_support.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/admindefs.xml b/core/src/docbook/doc-en/admin/admindefs.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/admindefs.xml rename to core/src/docbook/doc-en/admin/admindefs.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminfunctions.xml b/core/src/docbook/doc-en/admin/adminfunctions.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/adminfunctions.xml rename to core/src/docbook/doc-en/admin/adminfunctions.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminmbeans.xml b/core/src/docbook/doc-en/admin/adminmbeans.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/adminmbeans.xml rename to core/src/docbook/doc-en/admin/adminmbeans.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/admintools.xml b/core/src/docbook/doc-en/admin/admintools.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/admintools.xml rename to core/src/docbook/doc-en/admin/admintools.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/adminuse.xml b/core/src/docbook/doc-en/admin/adminuse.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/adminuse.xml rename to core/src/docbook/doc-en/admin/adminuse.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/install.xml b/core/src/docbook/doc-en/admin/install.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/install.xml rename to core/src/docbook/doc-en/admin/install.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/mejb.xml b/core/src/docbook/doc-en/admin/mejb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/mejb.xml rename to core/src/docbook/doc-en/admin/mejb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/mejbaccess.xml b/core/src/docbook/doc-en/admin/mejbaccess.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/mejbaccess.xml rename to core/src/docbook/doc-en/admin/mejbaccess.xml diff --git a/jonas_doc/core/src/docbook/doc-en/admin/threadStackDump.xml b/core/src/docbook/doc-en/admin/threadStackDump.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/admin/threadStackDump.xml rename to core/src/docbook/doc-en/admin/threadStackDump.xml diff --git a/jonas_doc/core/src/docbook/doc-en/administration_guide.xml b/core/src/docbook/doc-en/administration_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/administration_guide.xml rename to core/src/docbook/doc-en/administration_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ant_tasks.xml b/core/src/docbook/doc-en/ant_tasks.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ant_tasks.xml rename to core/src/docbook/doc-en/ant_tasks.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml b/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_ejbjar.xml rename to core/src/docbook/doc-en/anttasks/ant_ejbjar.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_genic.xml b/core/src/docbook/doc-en/anttasks/ant_genic.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_genic.xml rename to core/src/docbook/doc-en/anttasks/ant_genic.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonas.xml b/core/src/docbook/doc-en/anttasks/ant_jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonas.xml rename to core/src/docbook/doc-en/anttasks/ant_jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml b/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_jonasbase.xml rename to core/src/docbook/doc-en/anttasks/ant_jonasbase.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_newjc.xml b/core/src/docbook/doc-en/anttasks/ant_newjc.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_newjc.xml rename to core/src/docbook/doc-en/anttasks/ant_newjc.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_property.xml b/core/src/docbook/doc-en/anttasks/ant_property.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_property.xml rename to core/src/docbook/doc-en/anttasks/ant_property.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml b/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml rename to core/src/docbook/doc-en/anttasks/ant_serverdeploy.xml diff --git a/jonas_doc/core/src/docbook/doc-en/anttasks/ant_wsgen.xml b/core/src/docbook/doc-en/anttasks/ant_wsgen.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/anttasks/ant_wsgen.xml rename to core/src/docbook/doc-en/anttasks/ant_wsgen.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/clustering-variables.xml b/core/src/docbook/doc-en/clustering/clustering-variables.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/clustering-variables.xml rename to core/src/docbook/doc-en/clustering/clustering-variables.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/ejb.xml b/core/src/docbook/doc-en/clustering/configuration/ejb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/configuration/ejb.xml rename to core/src/docbook/doc-en/clustering/configuration/ejb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/jms.xml b/core/src/docbook/doc-en/clustering/configuration/jms.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/configuration/jms.xml rename to core/src/docbook/doc-en/clustering/configuration/jms.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/configuration/web.xml b/core/src/docbook/doc-en/clustering/configuration/web.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/configuration/web.xml rename to core/src/docbook/doc-en/clustering/configuration/web.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml b/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml rename to core/src/docbook/doc-en/clustering/examples/sampleCluster2.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml b/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml rename to core/src/docbook/doc-en/clustering/examples/sampleCluster3.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/faq/faq.xml b/core/src/docbook/doc-en/clustering/faq/faq.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/faq/faq.xml rename to core/src/docbook/doc-en/clustering/faq/faq.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/cluster.xml b/core/src/docbook/doc-en/clustering/management/cluster.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/management/cluster.xml rename to core/src/docbook/doc-en/clustering/management/cluster.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/clusterd.xml b/core/src/docbook/doc-en/clustering/management/clusterd.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/management/clusterd.xml rename to core/src/docbook/doc-en/clustering/management/clusterd.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/cmi.xml b/core/src/docbook/doc-en/clustering/management/cmi.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/management/cmi.xml rename to core/src/docbook/doc-en/clustering/management/cmi.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/domain.xml b/core/src/docbook/doc-en/clustering/management/domain.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/management/domain.xml rename to core/src/docbook/doc-en/clustering/management/domain.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/management/ha.xml b/core/src/docbook/doc-en/clustering/management/ha.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/management/ha.xml rename to core/src/docbook/doc-en/clustering/management/ha.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/clustering.xml b/core/src/docbook/doc-en/clustering/principles/clustering.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/principles/clustering.xml rename to core/src/docbook/doc-en/clustering/principles/clustering.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/management.xml b/core/src/docbook/doc-en/clustering/principles/management.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/principles/management.xml rename to core/src/docbook/doc-en/clustering/principles/management.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/principles/terminology.xml b/core/src/docbook/doc-en/clustering/principles/terminology.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/principles/terminology.xml rename to core/src/docbook/doc-en/clustering/principles/terminology.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jasmine.xml b/core/src/docbook/doc-en/clustering/tooling/jasmine.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/tooling/jasmine.xml rename to core/src/docbook/doc-en/clustering/tooling/jasmine.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml b/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering/tooling/jkmanager.xml rename to core/src/docbook/doc-en/clustering/tooling/jkmanager.xml diff --git a/jonas_doc/core/src/docbook/doc-en/clustering_guide.xml b/core/src/docbook/doc-en/clustering_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/clustering_guide.xml rename to core/src/docbook/doc-en/clustering_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF b/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF rename to core/src/docbook/doc-en/cmi/META-INF/MANIFEST.MF diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties b/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties rename to core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.properties diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml b/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml rename to core/src/docbook/doc-en/cmi/META-INF/maven/org.ow2.cmi.doc/cmi-doc/pom.xml diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/developerguide.xml b/core/src/docbook/doc-en/cmi/developerguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/developerguide.xml rename to core/src/docbook/doc-en/cmi/developerguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/algoexample.png b/core/src/docbook/doc-en/cmi/images/algoexample.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/algoexample.png rename to core/src/docbook/doc-en/cmi/images/algoexample.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/algomodel.png b/core/src/docbook/doc-en/cmi/images/algomodel.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/algomodel.png rename to core/src/docbook/doc-en/cmi/images/algomodel.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png b/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/contents_of_jvm.png rename to core/src/docbook/doc-en/cmi/images/contents_of_jvm.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/interfaces.png b/core/src/docbook/doc-en/cmi/images/interfaces.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/interfaces.png rename to core/src/docbook/doc-en/cmi/images/interfaces.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/lazy_lookup.png b/core/src/docbook/doc-en/cmi/images/lazy_lookup.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/lazy_lookup.png rename to core/src/docbook/doc-en/cmi/images/lazy_lookup.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/load_balanceables.png b/core/src/docbook/doc-en/cmi/images/load_balanceables.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/load_balanceables.png rename to core/src/docbook/doc-en/cmi/images/load_balanceables.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/logo-cmi.png b/core/src/docbook/doc-en/cmi/images/logo-cmi.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/logo-cmi.png rename to core/src/docbook/doc-en/cmi/images/logo-cmi.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/managers.png b/core/src/docbook/doc-en/cmi/images/managers.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/managers.png rename to core/src/docbook/doc-en/cmi/images/managers.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/images/sep_control_service.png b/core/src/docbook/doc-en/cmi/images/sep_control_service.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/images/sep_control_service.png rename to core/src/docbook/doc-en/cmi/images/sep_control_service.png diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/integratorguide.xml b/core/src/docbook/doc-en/cmi/integratorguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/integratorguide.xml rename to core/src/docbook/doc-en/cmi/integratorguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/cmi/userguide.xml b/core/src/docbook/doc-en/cmi/userguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/cmi/userguide.xml rename to core/src/docbook/doc-en/cmi/userguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/command_guide.xml b/core/src/docbook/doc-en/command_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/command_guide.xml rename to core/src/docbook/doc-en/command_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjb.xml b/core/src/docbook/doc-en/commands/configuration_newjb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/configuration_newjb.xml rename to core/src/docbook/doc-en/commands/configuration_newjb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_newjc.xml b/core/src/docbook/doc-en/commands/configuration_newjc.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/configuration_newjc.xml rename to core/src/docbook/doc-en/commands/configuration_newjc.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/configuration_raconfig.xml b/core/src/docbook/doc-en/commands/configuration_raconfig.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/configuration_raconfig.xml rename to core/src/docbook/doc-en/commands/configuration_raconfig.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/genic.xml b/core/src/docbook/doc-en/commands/genic.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/genic.xml rename to core/src/docbook/doc-en/commands/genic.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jclient.xml b/core/src/docbook/doc-en/commands/jclient.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/jclient.xml rename to core/src/docbook/doc-en/commands/jclient.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jms.xml b/core/src/docbook/doc-en/commands/jms.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/jms.xml rename to core/src/docbook/doc-en/commands/jms.xml diff --git a/jonas_doc/core/src/docbook/doc-en/commands/jonas.xml b/core/src/docbook/doc-en/commands/jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/commands/jonas.xml rename to core/src/docbook/doc-en/commands/jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonas_properties.xml b/core/src/docbook/doc-en/config/jonas_properties.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/config/jonas_properties.xml rename to core/src/docbook/doc-en/config/jonas_properties.xml diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_conf.xml b/core/src/docbook/doc-en/config/jonasbase_conf.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/config/jonasbase_conf.xml rename to core/src/docbook/doc-en/config/jonasbase_conf.xml diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_creation.xml b/core/src/docbook/doc-en/config/jonasbase_creation.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/config/jonasbase_creation.xml rename to core/src/docbook/doc-en/config/jonasbase_creation.xml diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasbase_structure.xml b/core/src/docbook/doc-en/config/jonasbase_structure.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/config/jonasbase_structure.xml rename to core/src/docbook/doc-en/config/jonasbase_structure.xml diff --git a/jonas_doc/core/src/docbook/doc-en/config/jonasroot_structure.xml b/core/src/docbook/doc-en/config/jonasroot_structure.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/config/jonasroot_structure.xml rename to core/src/docbook/doc-en/config/jonasroot_structure.xml diff --git a/jonas_doc/core/src/docbook/doc-en/configuration_guide.xml b/core/src/docbook/doc-en/configuration_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/configuration_guide.xml rename to core/src/docbook/doc-en/configuration_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/connector_pg.xml b/core/src/docbook/doc-en/connector_pg.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/connector_pg.xml rename to core/src/docbook/doc-en/connector_pg.xml diff --git a/jonas_doc/core/src/docbook/doc-en/continuous_integration_guide.xml b/core/src/docbook/doc-en/continuous_integration_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/continuous_integration_guide.xml rename to core/src/docbook/doc-en/continuous_integration_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/ear.xml b/core/src/docbook/doc-en/deploy/ear.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deploy/ear.xml rename to core/src/docbook/doc-en/deploy/ear.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/ejb2.xml b/core/src/docbook/doc-en/deploy/ejb2.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deploy/ejb2.xml rename to core/src/docbook/doc-en/deploy/ejb2.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/principes.xml b/core/src/docbook/doc-en/deploy/principes.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deploy/principes.xml rename to core/src/docbook/doc-en/deploy/principes.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/war.xml b/core/src/docbook/doc-en/deploy/war.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deploy/war.xml rename to core/src/docbook/doc-en/deploy/war.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deploy/webapps.xml b/core/src/docbook/doc-en/deploy/webapps.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deploy/webapps.xml rename to core/src/docbook/doc-en/deploy/webapps.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployer_guide.xml b/core/src/docbook/doc-en/deployer_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployer_guide.xml rename to core/src/docbook/doc-en/deployer_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan-common.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan-element-attribute.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan-mixed.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan-sample-example.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan-type.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml b/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/deployment-plan.xml rename to core/src/docbook/doc-en/deployment-plans/deployment-plan.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/introduction.xml b/core/src/docbook/doc-en/deployment-plans/introduction.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/introduction.xml rename to core/src/docbook/doc-en/deployment-plans/introduction.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml b/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml rename to core/src/docbook/doc-en/deployment-plans/jonas/jonas-deployment-plan.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/repositories.xml b/core/src/docbook/doc-en/deployment-plans/repositories.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/repositories.xml rename to core/src/docbook/doc-en/deployment-plans/repositories.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml b/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml rename to core/src/docbook/doc-en/deployment-plans/typespecific/deployment-type-specific-data.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml b/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml rename to core/src/docbook/doc-en/deployment-plans/typespecific/maven2-deployment-data.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml b/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml rename to core/src/docbook/doc-en/deployment-plans/typespecific/obr-deployment-data.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml b/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml rename to core/src/docbook/doc-en/deployment-plans/typespecific/url-deployment-data.xml diff --git a/jonas_doc/core/src/docbook/doc-en/deployment-plans_guide.xml b/core/src/docbook/doc-en/deployment-plans_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/deployment-plans_guide.xml rename to core/src/docbook/doc-en/deployment-plans_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide.xml b/core/src/docbook/doc-en/developerguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide.xml rename to core/src/docbook/doc-en/developerguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/building.xml b/core/src/docbook/doc-en/developerguide/building.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/building.xml rename to core/src/docbook/doc-en/developerguide/building.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/code_convention.xml b/core/src/docbook/doc-en/developerguide/code_convention.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/code_convention.xml rename to core/src/docbook/doc-en/developerguide/code_convention.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/contributing.xml b/core/src/docbook/doc-en/developerguide/contributing.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/contributing.xml rename to core/src/docbook/doc-en/developerguide/contributing.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/getting_from_svn.xml b/core/src/docbook/doc-en/developerguide/getting_from_svn.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/getting_from_svn.xml rename to core/src/docbook/doc-en/developerguide/getting_from_svn.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/running.xml b/core/src/docbook/doc-en/developerguide/running.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/running.xml rename to core/src/docbook/doc-en/developerguide/running.xml diff --git a/jonas_doc/core/src/docbook/doc-en/developerguide/usingexamples.xml b/core/src/docbook/doc-en/developerguide/usingexamples.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/developerguide/usingexamples.xml rename to core/src/docbook/doc-en/developerguide/usingexamples.xml diff --git a/jonas_doc/core/src/docbook/doc-en/eardeploy.xml b/core/src/docbook/doc-en/eardeploy.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/eardeploy.xml rename to core/src/docbook/doc-en/eardeploy.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF b/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF rename to core/src/docbook/doc-en/easybeans/META-INF/MANIFEST.MF diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties b/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties rename to core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.properties diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml b/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml rename to core/src/docbook/doc-en/easybeans/META-INF/maven/org.ow2.easybeans.doc/easybeans-doc/pom.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/advanced_topics.xml b/core/src/docbook/doc-en/easybeans/advanced_topics.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/advanced_topics.xml rename to core/src/docbook/doc-en/easybeans/advanced_topics.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/building.xml b/core/src/docbook/doc-en/easybeans/building.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/building.xml rename to core/src/docbook/doc-en/easybeans/building.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/code_convention.xml b/core/src/docbook/doc-en/easybeans/code_convention.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/code_convention.xml rename to core/src/docbook/doc-en/easybeans/code_convention.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/configuration_file.xml b/core/src/docbook/doc-en/easybeans/configuration_file.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/configuration_file.xml rename to core/src/docbook/doc-en/easybeans/configuration_file.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/contributing.xml b/core/src/docbook/doc-en/easybeans/contributing.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/contributing.xml rename to core/src/docbook/doc-en/easybeans/contributing.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/creating_ejbs.xml b/core/src/docbook/doc-en/easybeans/creating_ejbs.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/creating_ejbs.xml rename to core/src/docbook/doc-en/easybeans/creating_ejbs.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/developerguide.xml b/core/src/docbook/doc-en/easybeans/developerguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/developerguide.xml rename to core/src/docbook/doc-en/easybeans/developerguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml b/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/ejb3_introduction.xml rename to core/src/docbook/doc-en/easybeans/ejb3_introduction.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/getting_from_svn.xml b/core/src/docbook/doc-en/easybeans/getting_from_svn.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/getting_from_svn.xml rename to core/src/docbook/doc-en/easybeans/getting_from_svn.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/helloworldbean.xml b/core/src/docbook/doc-en/easybeans/helloworldbean.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/helloworldbean.xml rename to core/src/docbook/doc-en/easybeans/helloworldbean.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png b/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png rename to core/src/docbook/doc-en/easybeans/howto/gwt-ejb3-sudoku.png diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml b/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml rename to core/src/docbook/doc-en/easybeans/howto/gwt-ejb3.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/howto/howtos.xml b/core/src/docbook/doc-en/easybeans/howto/howtos.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/howto/howtos.xml rename to core/src/docbook/doc-en/easybeans/howto/howtos.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/running.xml b/core/src/docbook/doc-en/easybeans/running.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/running.xml rename to core/src/docbook/doc-en/easybeans/running.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/smart_factory.xml b/core/src/docbook/doc-en/easybeans/smart_factory.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/smart_factory.xml rename to core/src/docbook/doc-en/easybeans/smart_factory.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/building.xml b/core/src/docbook/doc-en/easybeans/tests/building.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/building.xml rename to core/src/docbook/doc-en/easybeans/tests/building.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/contribute.xml b/core/src/docbook/doc-en/easybeans/tests/contribute.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/contribute.xml rename to core/src/docbook/doc-en/easybeans/tests/contribute.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/howto_00.xml b/core/src/docbook/doc-en/easybeans/tests/howto_00.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/howto_00.xml rename to core/src/docbook/doc-en/easybeans/tests/howto_00.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/introduction.xml b/core/src/docbook/doc-en/easybeans/tests/introduction.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/introduction.xml rename to core/src/docbook/doc-en/easybeans/tests/introduction.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/packages.xml b/core/src/docbook/doc-en/easybeans/tests/packages.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/packages.xml rename to core/src/docbook/doc-en/easybeans/tests/packages.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/results.xml b/core/src/docbook/doc-en/easybeans/tests/results.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/results.xml rename to core/src/docbook/doc-en/easybeans/tests/results.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/running.xml b/core/src/docbook/doc-en/easybeans/tests/running.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/running.xml rename to core/src/docbook/doc-en/easybeans/tests/running.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/tests/testguide.xml b/core/src/docbook/doc-en/easybeans/tests/testguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/tests/testguide.xml rename to core/src/docbook/doc-en/easybeans/tests/testguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/userguide.xml b/core/src/docbook/doc-en/easybeans/userguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/userguide.xml rename to core/src/docbook/doc-en/easybeans/userguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/easybeans/usingexamples.xml b/core/src/docbook/doc-en/easybeans/usingexamples.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/easybeans/usingexamples.xml rename to core/src/docbook/doc-en/easybeans/usingexamples.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ejb2_programmer_guide.xml b/core/src/docbook/doc-en/ejb2_programmer_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ejb2_programmer_guide.xml rename to core/src/docbook/doc-en/ejb2_programmer_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ejb3_programmer_guide.xml b/core/src/docbook/doc-en/ejb3_programmer_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ejb3_programmer_guide.xml rename to core/src/docbook/doc-en/ejb3_programmer_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/essai.xml b/core/src/docbook/doc-en/essai.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/essai.xml rename to core/src/docbook/doc-en/essai.xml diff --git a/jonas_doc/core/src/docbook/doc-en/essai2.xml b/core/src/docbook/doc-en/essai2.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/essai2.xml rename to core/src/docbook/doc-en/essai2.xml diff --git a/jonas_doc/core/src/docbook/doc-en/essaibook.xml b/core/src/docbook/doc-en/essaibook.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/essaibook.xml rename to core/src/docbook/doc-en/essaibook.xml diff --git a/jonas_doc/core/src/docbook/doc-en/getting_started_guide.xml b/core/src/docbook/doc-en/getting_started_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/getting_started_guide.xml rename to core/src/docbook/doc-en/getting_started_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto.xml b/core/src/docbook/doc-en/howto.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto.xml rename to core/src/docbook/doc-en/howto.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_addons.xml b/core/src/docbook/doc-en/howto_addons.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_addons.xml rename to core/src/docbook/doc-en/howto_addons.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_auditListening.xml b/core/src/docbook/doc-en/howto_auditListening.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_auditListening.xml rename to core/src/docbook/doc-en/howto_auditListening.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_auditPersistence.xml b/core/src/docbook/doc-en/howto_auditPersistence.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_auditPersistence.xml rename to core/src/docbook/doc-en/howto_auditPersistence.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_configadmin.xml b/core/src/docbook/doc-en/howto_configadmin.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_configadmin.xml rename to core/src/docbook/doc-en/howto_configadmin.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_deployme.xml b/core/src/docbook/doc-en/howto_deployme.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_deployme.xml rename to core/src/docbook/doc-en/howto_deployme.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_distributed_joram.xml b/core/src/docbook/doc-en/howto_distributed_joram.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_distributed_joram.xml rename to core/src/docbook/doc-en/howto_distributed_joram.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_firewall.xml b/core/src/docbook/doc-en/howto_firewall.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_firewall.xml rename to core/src/docbook/doc-en/howto_firewall.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_install_jdbc_driver.xml b/core/src/docbook/doc-en/howto_install_jdbc_driver.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_install_jdbc_driver.xml rename to core/src/docbook/doc-en/howto_install_jdbc_driver.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_jndi.xml b/core/src/docbook/doc-en/howto_jndi.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_jndi.xml rename to core/src/docbook/doc-en/howto_jndi.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_mbeans.xml b/core/src/docbook/doc-en/howto_mbeans.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_mbeans.xml rename to core/src/docbook/doc-en/howto_mbeans.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_packaging.xml b/core/src/docbook/doc-en/howto_packaging.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_packaging.xml rename to core/src/docbook/doc-en/howto_packaging.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_services.xml b/core/src/docbook/doc-en/howto_services.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_services.xml rename to core/src/docbook/doc-en/howto_services.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_services_on_demand.xml b/core/src/docbook/doc-en/howto_services_on_demand.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_services_on_demand.xml rename to core/src/docbook/doc-en/howto_services_on_demand.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml b/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml rename to core/src/docbook/doc-en/howto_track_jdbc_connectionleaks.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_use_cdi.xml b/core/src/docbook/doc-en/howto_use_cdi.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_use_cdi.xml rename to core/src/docbook/doc-en/howto_use_cdi.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_use_jaxrs.xml b/core/src/docbook/doc-en/howto_use_jaxrs.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_use_jaxrs.xml rename to core/src/docbook/doc-en/howto_use_jaxrs.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_webspheremq.xml b/core/src/docbook/doc-en/howto_webspheremq.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_webspheremq.xml rename to core/src/docbook/doc-en/howto_webspheremq.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_win32_service.xml b/core/src/docbook/doc-en/howto_win32_service.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_win32_service.xml rename to core/src/docbook/doc-en/howto_win32_service.xml diff --git a/jonas_doc/core/src/docbook/doc-en/howto_wrapper.xml b/core/src/docbook/doc-en/howto_wrapper.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/howto_wrapper.xml rename to core/src/docbook/doc-en/howto_wrapper.xml diff --git a/jonas_doc/core/src/docbook/doc-en/index.html b/core/src/docbook/doc-en/index.html similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/index.html rename to core/src/docbook/doc-en/index.html diff --git a/jonas_doc/core/src/docbook/doc-en/install/install_j2ee.xml b/core/src/docbook/doc-en/install/install_j2ee.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/install/install_j2ee.xml rename to core/src/docbook/doc-en/install/install_j2ee.xml diff --git a/jonas_doc/core/src/docbook/doc-en/install/install_jonas.xml b/core/src/docbook/doc-en/install/install_jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/install/install_jonas.xml rename to core/src/docbook/doc-en/install/install_jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/classloader.xml b/core/src/docbook/doc-en/j2ee/classloader.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2ee/classloader.xml rename to core/src/docbook/doc-en/j2ee/classloader.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-app.xml b/core/src/docbook/doc-en/j2ee/j2ee-app.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-app.xml rename to core/src/docbook/doc-en/j2ee/j2ee-app.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml b/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-ejb.xml rename to core/src/docbook/doc-en/j2ee/j2ee-ejb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-web.xml b/core/src/docbook/doc-en/j2ee/j2ee-web.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2ee/j2ee-web.xml rename to core/src/docbook/doc-en/j2ee/j2ee-web.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2eeclient_pg.xml b/core/src/docbook/doc-en/j2eeclient_pg.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2eeclient_pg.xml rename to core/src/docbook/doc-en/j2eeclient_pg.xml diff --git a/jonas_doc/core/src/docbook/doc-en/j2eeprogrammerguide.xml b/core/src/docbook/doc-en/j2eeprogrammerguide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/j2eeprogrammerguide.xml rename to core/src/docbook/doc-en/j2eeprogrammerguide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/jaxws_developer_guide.xml b/core/src/docbook/doc-en/jaxws_developer_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/jaxws_developer_guide.xml rename to core/src/docbook/doc-en/jaxws_developer_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/jonas-transactions.xml b/core/src/docbook/doc-en/jonas-transactions.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/jonas-transactions.xml rename to core/src/docbook/doc-en/jonas-transactions.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/basics-of-classloading.xml b/core/src/docbook/doc-en/loaders/basics-of-classloading.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/basics-of-classloading.xml rename to core/src/docbook/doc-en/loaders/basics-of-classloading.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml b/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/classloading-in-jonas.xml rename to core/src/docbook/doc-en/loaders/classloading-in-jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/configuration.xml b/core/src/docbook/doc-en/loaders/configuration.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/configuration.xml rename to core/src/docbook/doc-en/loaders/configuration.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/glossary.xml b/core/src/docbook/doc-en/loaders/glossary.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/glossary.xml rename to core/src/docbook/doc-en/loaders/glossary.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/tips.xml b/core/src/docbook/doc-en/loaders/tips.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/tips.xml rename to core/src/docbook/doc-en/loaders/tips.xml diff --git a/jonas_doc/core/src/docbook/doc-en/loaders/tooling.xml b/core/src/docbook/doc-en/loaders/tooling.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/loaders/tooling.xml rename to core/src/docbook/doc-en/loaders/tooling.xml diff --git a/jonas_doc/core/src/docbook/doc-en/log/config.xml b/core/src/docbook/doc-en/log/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/log/config.xml rename to core/src/docbook/doc-en/log/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/mastering-jonas-classloaders.xml b/core/src/docbook/doc-en/mastering-jonas-classloaders.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/mastering-jonas-classloaders.xml rename to core/src/docbook/doc-en/mastering-jonas-classloaders.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_7.xml b/core/src/docbook/doc-en/migration/jonas_4_7.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/jonas_4_7.xml rename to core/src/docbook/doc-en/migration/jonas_4_7.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_8.xml b/core/src/docbook/doc-en/migration/jonas_4_8.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/jonas_4_8.xml rename to core/src/docbook/doc-en/migration/jonas_4_8.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_4_9.xml b/core/src/docbook/doc-en/migration/jonas_4_9.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/jonas_4_9.xml rename to core/src/docbook/doc-en/migration/jonas_4_9.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/jonas_5_0.xml b/core/src/docbook/doc-en/migration/jonas_5_0.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/jonas_5_0.xml rename to core/src/docbook/doc-en/migration/jonas_5_0.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/versionAPI.xml b/core/src/docbook/doc-en/migration/versionAPI.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/versionAPI.xml rename to core/src/docbook/doc-en/migration/versionAPI.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration/versionModules.xml b/core/src/docbook/doc-en/migration/versionModules.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration/versionModules.xml rename to core/src/docbook/doc-en/migration/versionModules.xml diff --git a/jonas_doc/core/src/docbook/doc-en/migration_guide.xml b/core/src/docbook/doc-en/migration_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/migration_guide.xml rename to core/src/docbook/doc-en/migration_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/multitenant_guide.xml b/core/src/docbook/doc-en/multitenant_guide.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/multitenant_guide.xml rename to core/src/docbook/doc-en/multitenant_guide.xml diff --git a/jonas_doc/core/src/docbook/doc-en/protocols/config.xml b/core/src/docbook/doc-en/protocols/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/protocols/config.xml rename to core/src/docbook/doc-en/protocols/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JDBCRA.xml b/core/src/docbook/doc-en/ra/JDBCRA.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ra/JDBCRA.xml rename to core/src/docbook/doc-en/ra/JDBCRA.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JDBCXML.xml b/core/src/docbook/doc-en/ra/JDBCXML.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ra/JDBCXML.xml rename to core/src/docbook/doc-en/ra/JDBCXML.xml diff --git a/jonas_doc/core/src/docbook/doc-en/ra/JMSRA.xml b/core/src/docbook/doc-en/ra/JMSRA.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/ra/JMSRA.xml rename to core/src/docbook/doc-en/ra/JMSRA.xml diff --git a/jonas_doc/core/src/docbook/doc-en/security/configsecurity.xml b/core/src/docbook/doc-en/security/configsecurity.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/security/configsecurity.xml rename to core/src/docbook/doc-en/security/configsecurity.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/cmi/config.xml b/core/src/docbook/doc-en/services/cmi/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/cmi/config.xml rename to core/src/docbook/doc-en/services/cmi/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/db/config.xml b/core/src/docbook/doc-en/services/db/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/db/config.xml rename to core/src/docbook/doc-en/services/db/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/dbm/config.xml b/core/src/docbook/doc-en/services/dbm/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/dbm/config.xml rename to core/src/docbook/doc-en/services/dbm/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml b/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml rename to core/src/docbook/doc-en/services/dbm/jdbcdatasource.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/depmonitor/config.xml b/core/src/docbook/doc-en/services/depmonitor/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/depmonitor/config.xml rename to core/src/docbook/doc-en/services/depmonitor/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/discovery/config.xml b/core/src/docbook/doc-en/services/discovery/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/discovery/config.xml rename to core/src/docbook/doc-en/services/discovery/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ear/config.xml b/core/src/docbook/doc-en/services/ear/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ear/config.xml rename to core/src/docbook/doc-en/services/ear/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml b/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml rename to core/src/docbook/doc-en/services/ejb2/cmp2_usage.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/config.xml b/core/src/docbook/doc-en/services/ejb2/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/config.xml rename to core/src/docbook/doc-en/services/ejb2/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml b/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml rename to core/src/docbook/doc-en/services/ejb2/db_access_bmp.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml b/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml rename to core/src/docbook/doc-en/services/ejb2/db_access_cmp.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/deploy.xml b/core/src/docbook/doc-en/services/ejb2/deploy.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/deploy.xml rename to core/src/docbook/doc-en/services/ejb2/deploy.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/entity.xml b/core/src/docbook/doc-en/services/ejb2/entity.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/entity.xml rename to core/src/docbook/doc-en/services/ejb2/entity.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/entity_tuning.xml b/core/src/docbook/doc-en/services/ejb2/entity_tuning.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/entity_tuning.xml rename to core/src/docbook/doc-en/services/ejb2/entity_tuning.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/environment.xml b/core/src/docbook/doc-en/services/ejb2/environment.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/environment.xml rename to core/src/docbook/doc-en/services/ejb2/environment.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/mdb.xml b/core/src/docbook/doc-en/services/ejb2/mdb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/mdb.xml rename to core/src/docbook/doc-en/services/ejb2/mdb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/mdb_tuning.xml b/core/src/docbook/doc-en/services/ejb2/mdb_tuning.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/mdb_tuning.xml rename to core/src/docbook/doc-en/services/ejb2/mdb_tuning.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/packaging.xml b/core/src/docbook/doc-en/services/ejb2/packaging.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/packaging.xml rename to core/src/docbook/doc-en/services/ejb2/packaging.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/security.xml b/core/src/docbook/doc-en/services/ejb2/security.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/security.xml rename to core/src/docbook/doc-en/services/ejb2/security.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/session.xml b/core/src/docbook/doc-en/services/ejb2/session.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/session.xml rename to core/src/docbook/doc-en/services/ejb2/session.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/session_tuning.xml b/core/src/docbook/doc-en/services/ejb2/session_tuning.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/session_tuning.xml rename to core/src/docbook/doc-en/services/ejb2/session_tuning.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb2/transaction.xml b/core/src/docbook/doc-en/services/ejb2/transaction.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb2/transaction.xml rename to core/src/docbook/doc-en/services/ejb2/transaction.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ejb3/config.xml b/core/src/docbook/doc-en/services/ejb3/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ejb3/config.xml rename to core/src/docbook/doc-en/services/ejb3/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/ha/config.xml b/core/src/docbook/doc-en/services/ha/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/ha/config.xml rename to core/src/docbook/doc-en/services/ha/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/jaxrpc/config.xml b/core/src/docbook/doc-en/services/jaxrpc/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/jaxrpc/config.xml rename to core/src/docbook/doc-en/services/jaxrpc/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/jaxws/config.xml b/core/src/docbook/doc-en/services/jaxws/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/jaxws/config.xml rename to core/src/docbook/doc-en/services/jaxws/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/jmx/config.xml b/core/src/docbook/doc-en/services/jmx/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/jmx/config.xml rename to core/src/docbook/doc-en/services/jmx/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/jtm/config.xml b/core/src/docbook/doc-en/services/jtm/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/jtm/config.xml rename to core/src/docbook/doc-en/services/jtm/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/mail/config.xml b/core/src/docbook/doc-en/services/mail/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/mail/config.xml rename to core/src/docbook/doc-en/services/mail/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/registry/config.xml b/core/src/docbook/doc-en/services/registry/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/registry/config.xml rename to core/src/docbook/doc-en/services/registry/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/resource/config.xml b/core/src/docbook/doc-en/services/resource/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/resource/config.xml rename to core/src/docbook/doc-en/services/resource/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/resource/connector_packaging.xml b/core/src/docbook/doc-en/services/resource/connector_packaging.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/resource/connector_packaging.xml rename to core/src/docbook/doc-en/services/resource/connector_packaging.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/resource/connector_principles.xml b/core/src/docbook/doc-en/services/resource/connector_principles.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/resource/connector_principles.xml rename to core/src/docbook/doc-en/services/resource/connector_principles.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/resource/connector_using.xml b/core/src/docbook/doc-en/services/resource/connector_using.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/resource/connector_using.xml rename to core/src/docbook/doc-en/services/resource/connector_using.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/resource/jonas-ra.xml b/core/src/docbook/doc-en/services/resource/jonas-ra.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/resource/jonas-ra.xml rename to core/src/docbook/doc-en/services/resource/jonas-ra.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/security/config.xml b/core/src/docbook/doc-en/services/security/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/security/config.xml rename to core/src/docbook/doc-en/services/security/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/smartclient/config.xml b/core/src/docbook/doc-en/services/smartclient/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/smartclient/config.xml rename to core/src/docbook/doc-en/services/smartclient/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/versioning/about.xml b/core/src/docbook/doc-en/services/versioning/about.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/versioning/about.xml rename to core/src/docbook/doc-en/services/versioning/about.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/versioning/config.xml b/core/src/docbook/doc-en/services/versioning/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/versioning/config.xml rename to core/src/docbook/doc-en/services/versioning/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/versioning/versioning-ejb.xml b/core/src/docbook/doc-en/services/versioning/versioning-ejb.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/versioning/versioning-ejb.xml rename to core/src/docbook/doc-en/services/versioning/versioning-ejb.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/versioning/versioning-web.xml b/core/src/docbook/doc-en/services/versioning/versioning-web.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/versioning/versioning-web.xml rename to core/src/docbook/doc-en/services/versioning/versioning-web.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/wc/config.xml b/core/src/docbook/doc-en/services/wc/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/wc/config.xml rename to core/src/docbook/doc-en/services/wc/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/web/config.xml b/core/src/docbook/doc-en/services/web/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/web/config.xml rename to core/src/docbook/doc-en/services/web/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/web/webcomponent.xml b/core/src/docbook/doc-en/services/web/webcomponent.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/web/webcomponent.xml rename to core/src/docbook/doc-en/services/web/webcomponent.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/web/webdeploy.xml b/core/src/docbook/doc-en/services/web/webdeploy.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/web/webdeploy.xml rename to core/src/docbook/doc-en/services/web/webdeploy.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/web/webpackaging.xml b/core/src/docbook/doc-en/services/web/webpackaging.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/web/webpackaging.xml rename to core/src/docbook/doc-en/services/web/webpackaging.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/wm/config.xml b/core/src/docbook/doc-en/services/wm/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/wm/config.xml rename to core/src/docbook/doc-en/services/wm/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/services/wsdl-publisher/config.xml b/core/src/docbook/doc-en/services/wsdl-publisher/config.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/services/wsdl-publisher/config.xml rename to core/src/docbook/doc-en/services/wsdl-publisher/config.xml diff --git a/jonas_doc/core/src/docbook/doc-en/terminology.xml b/core/src/docbook/doc-en/terminology.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/terminology.xml rename to core/src/docbook/doc-en/terminology.xml diff --git a/jonas_doc/core/src/docbook/doc-en/transactions/introduction.xml b/core/src/docbook/doc-en/transactions/introduction.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/transactions/introduction.xml rename to core/src/docbook/doc-en/transactions/introduction.xml diff --git a/jonas_doc/core/src/docbook/doc-en/transactions/jdbc-resources-in-jonas.xml b/core/src/docbook/doc-en/transactions/jdbc-resources-in-jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/transactions/jdbc-resources-in-jonas.xml rename to core/src/docbook/doc-en/transactions/jdbc-resources-in-jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/transactions/transactional-resources.xml b/core/src/docbook/doc-en/transactions/transactional-resources.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/transactions/transactional-resources.xml rename to core/src/docbook/doc-en/transactions/transactional-resources.xml diff --git a/jonas_doc/core/src/docbook/doc-en/transactions/transactions-and-exceptions.xml b/core/src/docbook/doc-en/transactions/transactions-and-exceptions.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/transactions/transactions-and-exceptions.xml rename to core/src/docbook/doc-en/transactions/transactions-and-exceptions.xml diff --git a/jonas_doc/core/src/docbook/doc-en/transactions/transactions-in-jonas.xml b/core/src/docbook/doc-en/transactions/transactions-in-jonas.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/transactions/transactions-in-jonas.xml rename to core/src/docbook/doc-en/transactions/transactions-in-jonas.xml diff --git a/jonas_doc/core/src/docbook/doc-en/variables.xml b/core/src/docbook/doc-en/variables.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/variables.xml rename to core/src/docbook/doc-en/variables.xml diff --git a/jonas_doc/core/src/docbook/doc-en/web_pg.xml b/core/src/docbook/doc-en/web_pg.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/web_pg.xml rename to core/src/docbook/doc-en/web_pg.xml diff --git a/jonas_doc/core/src/docbook/doc-en/xmltips.xml b/core/src/docbook/doc-en/xmltips.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-en/xmltips.xml rename to core/src/docbook/doc-en/xmltips.xml diff --git a/jonas_doc/core/src/docbook/doc-fr/howtoJOnASDocBook.xml b/core/src/docbook/doc-fr/howtoJOnASDocBook.xml similarity index 100% rename from jonas_doc/core/src/docbook/doc-fr/howtoJOnASDocBook.xml rename to core/src/docbook/doc-fr/howtoJOnASDocBook.xml diff --git a/jonas_doc/core/src/pom/jonas-doc-en.pom b/core/src/pom/jonas-doc-en.pom similarity index 100% rename from jonas_doc/core/src/pom/jonas-doc-en.pom rename to core/src/pom/jonas-doc-en.pom diff --git a/jonas_doc/core/src/resources/WEB-INF/jonas-web.xml b/core/src/resources/WEB-INF/jonas-web.xml similarity index 100% rename from jonas_doc/core/src/resources/WEB-INF/jonas-web.xml rename to core/src/resources/WEB-INF/jonas-web.xml diff --git a/jonas_doc/core/src/resources/WEB-INF/web.xml b/core/src/resources/WEB-INF/web.xml similarity index 100% rename from jonas_doc/core/src/resources/WEB-INF/web.xml rename to core/src/resources/WEB-INF/web.xml diff --git a/jonas_doc/core/src/resources/chunk.xsl b/core/src/resources/chunk.xsl similarity index 100% rename from jonas_doc/core/src/resources/chunk.xsl rename to core/src/resources/chunk.xsl diff --git a/jonas_doc/core/src/resources/common.css b/core/src/resources/common.css similarity index 100% rename from jonas_doc/core/src/resources/common.css rename to core/src/resources/common.css diff --git a/jonas_doc/core/src/resources/common.xml b/core/src/resources/common.xml similarity index 100% rename from jonas_doc/core/src/resources/common.xml rename to core/src/resources/common.xml diff --git a/jonas_doc/core/src/resources/fo.xsl b/core/src/resources/fo.xsl similarity index 100% rename from jonas_doc/core/src/resources/fo.xsl rename to core/src/resources/fo.xsl diff --git a/jonas_doc/core/src/resources/footer.xml b/core/src/resources/footer.xml similarity index 100% rename from jonas_doc/core/src/resources/footer.xml rename to core/src/resources/footer.xml diff --git a/jonas_doc/core/src/resources/html.xsl b/core/src/resources/html.xsl similarity index 100% rename from jonas_doc/core/src/resources/html.xsl rename to core/src/resources/html.xsl diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSmall.png b/core/src/resources/images/JonasSmall.png similarity index 100% rename from jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSmall.png rename to core/src/resources/images/JonasSmall.png diff --git a/jonas_doc/core/src/resources/images/WP_distr.gif b/core/src/resources/images/WP_distr.gif similarity index 100% rename from jonas_doc/core/src/resources/images/WP_distr.gif rename to core/src/resources/images/WP_distr.gif diff --git a/jonas_doc/core/src/resources/images/admin-webmodule-virtual.png b/core/src/resources/images/admin-webmodule-virtual.png similarity index 100% rename from jonas_doc/core/src/resources/images/admin-webmodule-virtual.png rename to core/src/resources/images/admin-webmodule-virtual.png diff --git a/jonas_doc/core/src/resources/images/admintree.gif b/core/src/resources/images/admintree.gif similarity index 100% rename from jonas_doc/core/src/resources/images/admintree.gif rename to core/src/resources/images/admintree.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/Bamboo_WorkDirectory.gif b/core/src/resources/images/bamboo/Bamboo_WorkDirectory.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/Bamboo_WorkDirectory.gif rename to core/src/resources/images/bamboo/Bamboo_WorkDirectory.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/BuildPlan_AntBuildDependency.gif b/core/src/resources/images/bamboo/BuildPlan_AntBuildDependency.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/BuildPlan_AntBuildDependency.gif rename to core/src/resources/images/bamboo/BuildPlan_AntBuildDependency.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/Builders.gif b/core/src/resources/images/bamboo/Builders.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/Builders.gif rename to core/src/resources/images/bamboo/Builders.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/Dashboard_CurrentActivty.gif b/core/src/resources/images/bamboo/Dashboard_CurrentActivty.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/Dashboard_CurrentActivty.gif rename to core/src/resources/images/bamboo/Dashboard_CurrentActivty.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/JDK_tailor.gif b/core/src/resources/images/bamboo/JDK_tailor.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/JDK_tailor.gif rename to core/src/resources/images/bamboo/JDK_tailor.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestBuildPlan_ActivityLog.gif b/core/src/resources/images/bamboo/TestBuildPlan_ActivityLog.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestBuildPlan_ActivityLog.gif rename to core/src/resources/images/bamboo/TestBuildPlan_ActivityLog.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestBuildPlan_Dashboard_Run.gif b/core/src/resources/images/bamboo/TestBuildPlan_Dashboard_Run.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestBuildPlan_Dashboard_Run.gif rename to core/src/resources/images/bamboo/TestBuildPlan_Dashboard_Run.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestsBuild_Artifacts.gif b/core/src/resources/images/bamboo/TestsBuild_Artifacts.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestsBuild_Artifacts.gif rename to core/src/resources/images/bamboo/TestsBuild_Artifacts.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestsBuild_BuilderConfig.gif b/core/src/resources/images/bamboo/TestsBuild_BuilderConfig.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestsBuild_BuilderConfig.gif rename to core/src/resources/images/bamboo/TestsBuild_BuilderConfig.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestsBuild_PlanDetail.gif b/core/src/resources/images/bamboo/TestsBuild_PlanDetail.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestsBuild_PlanDetail.gif rename to core/src/resources/images/bamboo/TestsBuild_PlanDetail.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/TestsBuild_sourcerepos.gif b/core/src/resources/images/bamboo/TestsBuild_sourcerepos.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/TestsBuild_sourcerepos.gif rename to core/src/resources/images/bamboo/TestsBuild_sourcerepos.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/ant_BuilderConfig.gif b/core/src/resources/images/bamboo/ant_BuilderConfig.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/ant_BuilderConfig.gif rename to core/src/resources/images/bamboo/ant_BuilderConfig.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/ant_createplan.gif b/core/src/resources/images/bamboo/ant_createplan.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/ant_createplan.gif rename to core/src/resources/images/bamboo/ant_createplan.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/jb.config.gif b/core/src/resources/images/bamboo/jb.config.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/jb.config.gif rename to core/src/resources/images/bamboo/jb.config.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/main_tailor.gif b/core/src/resources/images/bamboo/main_tailor.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/main_tailor.gif rename to core/src/resources/images/bamboo/main_tailor.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_BuildArtifacts.gif b/core/src/resources/images/bamboo/maven_BuildArtifacts.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_BuildArtifacts.gif rename to core/src/resources/images/bamboo/maven_BuildArtifacts.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_BuildNotification.gif b/core/src/resources/images/bamboo/maven_BuildNotification.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_BuildNotification.gif rename to core/src/resources/images/bamboo/maven_BuildNotification.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_BuilderConfig.gif b/core/src/resources/images/bamboo/maven_BuilderConfig.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_BuilderConfig.gif rename to core/src/resources/images/bamboo/maven_BuilderConfig.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_CheckoutAndBuilding.gif b/core/src/resources/images/bamboo/maven_CheckoutAndBuilding.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_CheckoutAndBuilding.gif rename to core/src/resources/images/bamboo/maven_CheckoutAndBuilding.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_PlanDetail.gif b/core/src/resources/images/bamboo/maven_PlanDetail.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_PlanDetail.gif rename to core/src/resources/images/bamboo/maven_PlanDetail.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_PostAction.gif b/core/src/resources/images/bamboo/maven_PostAction.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_PostAction.gif rename to core/src/resources/images/bamboo/maven_PostAction.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/maven_sourcerepos_step2.gif b/core/src/resources/images/bamboo/maven_sourcerepos_step2.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/maven_sourcerepos_step2.gif rename to core/src/resources/images/bamboo/maven_sourcerepos_step2.gif diff --git a/jonas_doc/core/src/resources/images/bamboo/variables.gif b/core/src/resources/images/bamboo/variables.gif similarity index 100% rename from jonas_doc/core/src/resources/images/bamboo/variables.gif rename to core/src/resources/images/bamboo/variables.gif diff --git a/jonas_doc/core/src/resources/images/callouts/1.png b/core/src/resources/images/callouts/1.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/1.png rename to core/src/resources/images/callouts/1.png diff --git a/jonas_doc/core/src/resources/images/callouts/10.png b/core/src/resources/images/callouts/10.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/10.png rename to core/src/resources/images/callouts/10.png diff --git a/jonas_doc/core/src/resources/images/callouts/11.png b/core/src/resources/images/callouts/11.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/11.png rename to core/src/resources/images/callouts/11.png diff --git a/jonas_doc/core/src/resources/images/callouts/12.png b/core/src/resources/images/callouts/12.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/12.png rename to core/src/resources/images/callouts/12.png diff --git a/jonas_doc/core/src/resources/images/callouts/13.png b/core/src/resources/images/callouts/13.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/13.png rename to core/src/resources/images/callouts/13.png diff --git a/jonas_doc/core/src/resources/images/callouts/14.png b/core/src/resources/images/callouts/14.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/14.png rename to core/src/resources/images/callouts/14.png diff --git a/jonas_doc/core/src/resources/images/callouts/15.png b/core/src/resources/images/callouts/15.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/15.png rename to core/src/resources/images/callouts/15.png diff --git a/jonas_doc/core/src/resources/images/callouts/2.png b/core/src/resources/images/callouts/2.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/2.png rename to core/src/resources/images/callouts/2.png diff --git a/jonas_doc/core/src/resources/images/callouts/3.png b/core/src/resources/images/callouts/3.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/3.png rename to core/src/resources/images/callouts/3.png diff --git a/jonas_doc/core/src/resources/images/callouts/4.png b/core/src/resources/images/callouts/4.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/4.png rename to core/src/resources/images/callouts/4.png diff --git a/jonas_doc/core/src/resources/images/callouts/5.png b/core/src/resources/images/callouts/5.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/5.png rename to core/src/resources/images/callouts/5.png diff --git a/jonas_doc/core/src/resources/images/callouts/6.png b/core/src/resources/images/callouts/6.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/6.png rename to core/src/resources/images/callouts/6.png diff --git a/jonas_doc/core/src/resources/images/callouts/7.png b/core/src/resources/images/callouts/7.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/7.png rename to core/src/resources/images/callouts/7.png diff --git a/jonas_doc/core/src/resources/images/callouts/8.png b/core/src/resources/images/callouts/8.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/8.png rename to core/src/resources/images/callouts/8.png diff --git a/jonas_doc/core/src/resources/images/callouts/9.png b/core/src/resources/images/callouts/9.png similarity index 100% rename from jonas_doc/core/src/resources/images/callouts/9.png rename to core/src/resources/images/callouts/9.png diff --git a/jonas_doc/core/src/resources/images/caution.png b/core/src/resources/images/caution.png similarity index 100% rename from jonas_doc/core/src/resources/images/caution.png rename to core/src/resources/images/caution.png diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Apache.jpg b/core/src/resources/images/clusterfiles/Apache.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Apache.jpg rename to core/src/resources/images/clusterfiles/Apache.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Archi1.jpg b/core/src/resources/images/clusterfiles/Archi1.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Archi1.jpg rename to core/src/resources/images/clusterfiles/Archi1.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Archi2.jpg b/core/src/resources/images/clusterfiles/Archi2.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Archi2.jpg rename to core/src/resources/images/clusterfiles/Archi2.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Archi3.jpg b/core/src/resources/images/clusterfiles/Archi3.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Archi3.jpg rename to core/src/resources/images/clusterfiles/Archi3.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Archi4.jpg b/core/src/resources/images/clusterfiles/Archi4.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Archi4.jpg rename to core/src/resources/images/clusterfiles/Archi4.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Archi5.jpg b/core/src/resources/images/clusterfiles/Archi5.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Archi5.jpg rename to core/src/resources/images/clusterfiles/Archi5.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Architecture.jpg b/core/src/resources/images/clusterfiles/Architecture.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Architecture.jpg rename to core/src/resources/images/clusterfiles/Architecture.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/EJBCont.jpg b/core/src/resources/images/clusterfiles/EJBCont.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/EJBCont.jpg rename to core/src/resources/images/clusterfiles/EJBCont.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/FullJOnAS.jpg b/core/src/resources/images/clusterfiles/FullJOnAS.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/FullJOnAS.jpg rename to core/src/resources/images/clusterfiles/FullJOnAS.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/JOnASEJB.jpg b/core/src/resources/images/clusterfiles/JOnASEJB.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/JOnASEJB.jpg rename to core/src/resources/images/clusterfiles/JOnASEJB.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/JOnASWeb.jpg b/core/src/resources/images/clusterfiles/JOnASWeb.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/JOnASWeb.jpg rename to core/src/resources/images/clusterfiles/JOnASWeb.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/Node.jpg b/core/src/resources/images/clusterfiles/Node.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/Node.jpg rename to core/src/resources/images/clusterfiles/Node.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/WebCont.jpg b/core/src/resources/images/clusterfiles/WebCont.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/WebCont.jpg rename to core/src/resources/images/clusterfiles/WebCont.jpg diff --git a/jonas_doc/core/src/resources/images/clusterfiles/sampleCluster2Screen.GIF b/core/src/resources/images/clusterfiles/sampleCluster2Screen.GIF similarity index 100% rename from jonas_doc/core/src/resources/images/clusterfiles/sampleCluster2Screen.GIF rename to core/src/resources/images/clusterfiles/sampleCluster2Screen.GIF diff --git a/jonas_doc/core/src/resources/images/clustering/clusterd.png b/core/src/resources/images/clustering/clusterd.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/clusterd.png rename to core/src/resources/images/clustering/clusterd.png diff --git a/jonas_doc/core/src/resources/images/clustering/clusterd.svg b/core/src/resources/images/clustering/clusterd.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/clusterd.svg rename to core/src/resources/images/clustering/clusterd.svg diff --git a/jonas_doc/core/src/resources/images/clustering/clustersolution.png b/core/src/resources/images/clustering/clustersolution.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/clustersolution.png rename to core/src/resources/images/clustering/clustersolution.png diff --git a/jonas_doc/core/src/resources/images/clustering/clustersolution.svg b/core/src/resources/images/clustering/clustersolution.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/clustersolution.svg rename to core/src/resources/images/clustering/clustersolution.svg diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster.png b/core/src/resources/images/clustering/cmi_cluster.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster.png rename to core/src/resources/images/clustering/cmi_cluster.png diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster.svg b/core/src/resources/images/clustering/cmi_cluster.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster.svg rename to core/src/resources/images/clustering/cmi_cluster.svg diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster_config.svg b/core/src/resources/images/clustering/cmi_cluster_config.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster_config.svg rename to core/src/resources/images/clustering/cmi_cluster_config.svg diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_2tiers_client.png b/core/src/resources/images/clustering/cmi_cluster_config_2tiers_client.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_2tiers_client.png rename to core/src/resources/images/clustering/cmi_cluster_config_2tiers_client.png diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_2tiers_server.png b/core/src/resources/images/clustering/cmi_cluster_config_2tiers_server.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_2tiers_server.png rename to core/src/resources/images/clustering/cmi_cluster_config_2tiers_server.png diff --git a/jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_javaclient.png b/core/src/resources/images/clustering/cmi_cluster_config_javaclient.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmi_cluster_config_javaclient.png rename to core/src/resources/images/clustering/cmi_cluster_config_javaclient.png diff --git a/jonas_doc/core/src/resources/images/clustering/cmiv2.png b/core/src/resources/images/clustering/cmiv2.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/cmiv2.png rename to core/src/resources/images/clustering/cmiv2.png diff --git a/jonas_doc/core/src/resources/images/clustering/domain.cmi.cluster.png b/core/src/resources/images/clustering/domain.cmi.cluster.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/domain.cmi.cluster.png rename to core/src/resources/images/clustering/domain.cmi.cluster.png diff --git a/jonas_doc/core/src/resources/images/clustering/domain.jk.cluster.member.png b/core/src/resources/images/clustering/domain.jk.cluster.member.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/domain.jk.cluster.member.png rename to core/src/resources/images/clustering/domain.jk.cluster.member.png diff --git a/jonas_doc/core/src/resources/images/clustering/domain.jk.cluster.png b/core/src/resources/images/clustering/domain.jk.cluster.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/domain.jk.cluster.png rename to core/src/resources/images/clustering/domain.jk.cluster.png diff --git a/jonas_doc/core/src/resources/images/clustering/domainmngt.png b/core/src/resources/images/clustering/domainmngt.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/domainmngt.png rename to core/src/resources/images/clustering/domainmngt.png diff --git a/jonas_doc/core/src/resources/images/clustering/domainmngt.svg b/core/src/resources/images/clustering/domainmngt.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/domainmngt.svg rename to core/src/resources/images/clustering/domainmngt.svg diff --git a/jonas_doc/core/src/resources/images/clustering/easybeans-logo.png b/core/src/resources/images/clustering/easybeans-logo.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/easybeans-logo.png rename to core/src/resources/images/clustering/easybeans-logo.png diff --git a/jonas_doc/core/src/resources/images/clustering/ejbcluster.png b/core/src/resources/images/clustering/ejbcluster.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/ejbcluster.png rename to core/src/resources/images/clustering/ejbcluster.png diff --git a/jonas_doc/core/src/resources/images/clustering/ejbcluster.svg b/core/src/resources/images/clustering/ejbcluster.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/ejbcluster.svg rename to core/src/resources/images/clustering/ejbcluster.svg diff --git a/jonas_doc/core/src/resources/images/clustering/ejbfarm.png b/core/src/resources/images/clustering/ejbfarm.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/ejbfarm.png rename to core/src/resources/images/clustering/ejbfarm.png diff --git a/jonas_doc/core/src/resources/images/clustering/ejbfarm.svg b/core/src/resources/images/clustering/ejbfarm.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/ejbfarm.svg rename to core/src/resources/images/clustering/ejbfarm.svg diff --git a/jonas_doc/core/src/resources/images/clustering/httpcluster.png b/core/src/resources/images/clustering/httpcluster.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/httpcluster.png rename to core/src/resources/images/clustering/httpcluster.png diff --git a/jonas_doc/core/src/resources/images/clustering/httpcluster.svg b/core/src/resources/images/clustering/httpcluster.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/httpcluster.svg rename to core/src/resources/images/clustering/httpcluster.svg diff --git a/jonas_doc/core/src/resources/images/clustering/httpfarm.png b/core/src/resources/images/clustering/httpfarm.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/httpfarm.png rename to core/src/resources/images/clustering/httpfarm.png diff --git a/jonas_doc/core/src/resources/images/clustering/httpfarm.svg b/core/src/resources/images/clustering/httpfarm.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/httpfarm.svg rename to core/src/resources/images/clustering/httpfarm.svg diff --git a/jonas_doc/core/src/resources/images/clustering/jmscluster_a.png b/core/src/resources/images/clustering/jmscluster_a.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmscluster_a.png rename to core/src/resources/images/clustering/jmscluster_a.png diff --git a/jonas_doc/core/src/resources/images/clustering/jmscluster_a.svg b/core/src/resources/images/clustering/jmscluster_a.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmscluster_a.svg rename to core/src/resources/images/clustering/jmscluster_a.svg diff --git a/jonas_doc/core/src/resources/images/clustering/jmscluster_b.png b/core/src/resources/images/clustering/jmscluster_b.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmscluster_b.png rename to core/src/resources/images/clustering/jmscluster_b.png diff --git a/jonas_doc/core/src/resources/images/clustering/jmscluster_b.svg b/core/src/resources/images/clustering/jmscluster_b.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmscluster_b.svg rename to core/src/resources/images/clustering/jmscluster_b.svg diff --git a/jonas_doc/core/src/resources/images/clustering/jmsfarm_a.png b/core/src/resources/images/clustering/jmsfarm_a.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmsfarm_a.png rename to core/src/resources/images/clustering/jmsfarm_a.png diff --git a/jonas_doc/core/src/resources/images/clustering/jmsfarm_a.svg b/core/src/resources/images/clustering/jmsfarm_a.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmsfarm_a.svg rename to core/src/resources/images/clustering/jmsfarm_a.svg diff --git a/jonas_doc/core/src/resources/images/clustering/jmsfarm_b.png b/core/src/resources/images/clustering/jmsfarm_b.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmsfarm_b.png rename to core/src/resources/images/clustering/jmsfarm_b.png diff --git a/jonas_doc/core/src/resources/images/clustering/jmsfarm_b.svg b/core/src/resources/images/clustering/jmsfarm_b.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jmsfarm_b.svg rename to core/src/resources/images/clustering/jmsfarm_b.svg diff --git a/jonas_doc/core/src/resources/images/clustering/jonas48repscenarios.jpg b/core/src/resources/images/clustering/jonas48repscenarios.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/jonas48repscenarios.jpg rename to core/src/resources/images/clustering/jonas48repscenarios.jpg diff --git a/jonas_doc/core/src/resources/images/clustering/logo_jonas2.png b/core/src/resources/images/clustering/logo_jonas2.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/logo_jonas2.png rename to core/src/resources/images/clustering/logo_jonas2.png diff --git a/jonas_doc/core/src/resources/images/clustering/myTomcatCluster.gif b/core/src/resources/images/clustering/myTomcatCluster.gif similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/myTomcatCluster.gif rename to core/src/resources/images/clustering/myTomcatCluster.gif diff --git a/jonas_doc/core/src/resources/images/clustering/registry_replication.png b/core/src/resources/images/clustering/registry_replication.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/registry_replication.png rename to core/src/resources/images/clustering/registry_replication.png diff --git a/jonas_doc/core/src/resources/images/clustering/registry_replication.svg b/core/src/resources/images/clustering/registry_replication.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/registry_replication.svg rename to core/src/resources/images/clustering/registry_replication.svg diff --git a/jonas_doc/core/src/resources/images/clustering/sampleCluster2.png b/core/src/resources/images/clustering/sampleCluster2.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sampleCluster2.png rename to core/src/resources/images/clustering/sampleCluster2.png diff --git a/jonas_doc/core/src/resources/images/clustering/sampleCluster2.svg b/core/src/resources/images/clustering/sampleCluster2.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sampleCluster2.svg rename to core/src/resources/images/clustering/sampleCluster2.svg diff --git a/jonas_doc/core/src/resources/images/clustering/sampleCluster3.png b/core/src/resources/images/clustering/sampleCluster3.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sampleCluster3.png rename to core/src/resources/images/clustering/sampleCluster3.png diff --git a/jonas_doc/core/src/resources/images/clustering/sampleCluster3.svg b/core/src/resources/images/clustering/sampleCluster3.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sampleCluster3.svg rename to core/src/resources/images/clustering/sampleCluster3.svg diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jasmine_design.png b/core/src/resources/images/clustering/sc/jasmine_design.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jasmine_design.png rename to core/src/resources/images/clustering/sc/jasmine_design.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jasmine_eos.png b/core/src/resources/images/clustering/sc/jasmine_eos.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jasmine_eos.png rename to core/src/resources/images/clustering/sc/jasmine_eos.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jkmanager.png b/core/src/resources/images/clustering/sc/jkmanager.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jkmanager.png rename to core/src/resources/images/clustering/sc/jkmanager.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_cluster_tab.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_cluster_tab.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_cluster_tab.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_cluster_tab.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_mbeans_attr.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_mbeans_attr.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_mbeans_attr.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_mbeans_attr.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_object_info.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_object_info.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_object_info.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_object_info.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_policies.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_policies.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_policies.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_policies.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_server_info.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_server_info.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_server_info.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_server_info.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_servers.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_servers.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_servers.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_servers.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_strategies.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_strategies.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_strategies.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_strategies.png diff --git a/jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_tab.png b/core/src/resources/images/clustering/sc/jonasadmin_cmi_tab.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/sc/jonasadmin_cmi_tab.png rename to core/src/resources/images/clustering/sc/jonasadmin_cmi_tab.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_cluster_tab.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_mbeans_attr.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_object_info.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_policies.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_server_info.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_servers.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_strategies.svg diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.png b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.png similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.png rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.png diff --git a/jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.svg b/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.svg similarity index 100% rename from jonas_doc/core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.svg rename to core/src/resources/images/clustering/screenshot_jonasadmin_cmi_tab.svg diff --git a/jonas_doc/core/src/resources/images/cmi.gif b/core/src/resources/images/cmi.gif similarity index 100% rename from jonas_doc/core/src/resources/images/cmi.gif rename to core/src/resources/images/cmi.gif diff --git a/jonas_doc/core/src/resources/images/connect.gif b/core/src/resources/images/connect.gif similarity index 100% rename from jonas_doc/core/src/resources/images/connect.gif rename to core/src/resources/images/connect.gif diff --git a/jonas_doc/core/src/resources/images/contextRootCustomization.png b/core/src/resources/images/contextRootCustomization.png similarity index 100% rename from jonas_doc/core/src/resources/images/contextRootCustomization.png rename to core/src/resources/images/contextRootCustomization.png diff --git a/jonas_doc/core/src/resources/images/customizedMBeanServer.png b/core/src/resources/images/customizedMBeanServer.png similarity index 100% rename from jonas_doc/core/src/resources/images/customizedMBeanServer.png rename to core/src/resources/images/customizedMBeanServer.png diff --git a/jonas_doc/core/src/resources/images/defilement.gif b/core/src/resources/images/defilement.gif similarity index 100% rename from jonas_doc/core/src/resources/images/defilement.gif rename to core/src/resources/images/defilement.gif diff --git a/jonas_doc/core/src/resources/images/deployment.gif b/core/src/resources/images/deployment.gif similarity index 100% rename from jonas_doc/core/src/resources/images/deployment.gif rename to core/src/resources/images/deployment.gif diff --git a/jonas_doc/core/src/resources/images/draft.png b/core/src/resources/images/draft.png similarity index 100% rename from jonas_doc/core/src/resources/images/draft.png rename to core/src/resources/images/draft.png diff --git a/jonas_doc/core/src/resources/images/earsample-add-author.png b/core/src/resources/images/earsample-add-author.png similarity index 100% rename from jonas_doc/core/src/resources/images/earsample-add-author.png rename to core/src/resources/images/earsample-add-author.png diff --git a/jonas_doc/core/src/resources/images/earsample-architecture.png b/core/src/resources/images/earsample-architecture.png similarity index 100% rename from jonas_doc/core/src/resources/images/earsample-architecture.png rename to core/src/resources/images/earsample-architecture.png diff --git a/jonas_doc/core/src/resources/images/earsample-authentication.png b/core/src/resources/images/earsample-authentication.png similarity index 100% rename from jonas_doc/core/src/resources/images/earsample-authentication.png rename to core/src/resources/images/earsample-authentication.png diff --git a/jonas_doc/core/src/resources/images/earsample-jpa-model.png b/core/src/resources/images/earsample-jpa-model.png similarity index 100% rename from jonas_doc/core/src/resources/images/earsample-jpa-model.png rename to core/src/resources/images/earsample-jpa-model.png diff --git a/jonas_doc/core/src/resources/images/earsample-list-content.png b/core/src/resources/images/earsample-list-content.png similarity index 100% rename from jonas_doc/core/src/resources/images/earsample-list-content.png rename to core/src/resources/images/earsample-list-content.png diff --git a/jonas_doc/core/src/resources/images/eb_img_31.gif b/core/src/resources/images/eb_img_31.gif similarity index 100% rename from jonas_doc/core/src/resources/images/eb_img_31.gif rename to core/src/resources/images/eb_img_31.gif diff --git a/jonas_doc/core/src/resources/images/editbuttons.gif b/core/src/resources/images/editbuttons.gif similarity index 100% rename from jonas_doc/core/src/resources/images/editbuttons.gif rename to core/src/resources/images/editbuttons.gif diff --git a/jonas_doc/core/src/resources/images/filtering-loader.png b/core/src/resources/images/filtering-loader.png similarity index 100% rename from jonas_doc/core/src/resources/images/filtering-loader.png rename to core/src/resources/images/filtering-loader.png diff --git a/jonas_doc/core/src/resources/images/firstpage.gif b/core/src/resources/images/firstpage.gif similarity index 100% rename from jonas_doc/core/src/resources/images/firstpage.gif rename to core/src/resources/images/firstpage.gif diff --git a/jonas_doc/core/src/resources/images/forgeadmin.gif b/core/src/resources/images/forgeadmin.gif similarity index 100% rename from jonas_doc/core/src/resources/images/forgeadmin.gif rename to core/src/resources/images/forgeadmin.gif diff --git a/jonas_doc/core/src/resources/images/graphTest.png b/core/src/resources/images/graphTest.png similarity index 100% rename from jonas_doc/core/src/resources/images/graphTest.png rename to core/src/resources/images/graphTest.png diff --git a/jonas_doc/core/src/resources/images/home.png b/core/src/resources/images/home.png similarity index 100% rename from jonas_doc/core/src/resources/images/home.png rename to core/src/resources/images/home.png diff --git a/jonas_doc/core/src/resources/images/important.png b/core/src/resources/images/important.png similarity index 100% rename from jonas_doc/core/src/resources/images/important.png rename to core/src/resources/images/important.png diff --git a/jonas_doc/core/src/resources/images/info.png b/core/src/resources/images/info.png similarity index 100% rename from jonas_doc/core/src/resources/images/info.png rename to core/src/resources/images/info.png diff --git a/jonas_doc/core/src/resources/images/jcaarch.gif b/core/src/resources/images/jcaarch.gif similarity index 100% rename from jonas_doc/core/src/resources/images/jcaarch.gif rename to core/src/resources/images/jcaarch.gif diff --git a/jonas_doc/core/src/resources/images/jconsoleStackDumpList.png b/core/src/resources/images/jconsoleStackDumpList.png similarity index 100% rename from jonas_doc/core/src/resources/images/jconsoleStackDumpList.png rename to core/src/resources/images/jconsoleStackDumpList.png diff --git a/jonas_doc/core/src/resources/images/jconsoleStackDumpOperations.png b/core/src/resources/images/jconsoleStackDumpOperations.png similarity index 100% rename from jonas_doc/core/src/resources/images/jconsoleStackDumpOperations.png rename to core/src/resources/images/jconsoleStackDumpOperations.png diff --git a/jonas_doc/core/src/resources/images/jmsclustering/Cluster JMS-JORAM-JOnAS.ppt b/core/src/resources/images/jmsclustering/Cluster JMS-JORAM-JOnAS.ppt similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/Cluster JMS-JORAM-JOnAS.ppt rename to core/src/resources/images/jmsclustering/Cluster JMS-JORAM-JOnAS.ppt diff --git a/jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-queues.jpg b/core/src/resources/images/jmsclustering/JmsClustering-queues.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-queues.jpg rename to core/src/resources/images/jmsclustering/JmsClustering-queues.jpg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-queues.ppt b/core/src/resources/images/jmsclustering/JmsClustering-queues.ppt similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-queues.ppt rename to core/src/resources/images/jmsclustering/JmsClustering-queues.ppt diff --git a/jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-topics.jpg b/core/src/resources/images/jmsclustering/JmsClustering-topics.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-topics.jpg rename to core/src/resources/images/jmsclustering/JmsClustering-topics.jpg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-topics.ppt b/core/src/resources/images/jmsclustering/JmsClustering-topics.ppt similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/JmsClustering-topics.ppt rename to core/src/resources/images/jmsclustering/JmsClustering-topics.ppt diff --git a/jonas_doc/core/src/resources/images/jmsclustering/joram.jpg b/core/src/resources/images/jmsclustering/joram.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/joram.jpg rename to core/src/resources/images/jmsclustering/joram.jpg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/joram_ha.jpg b/core/src/resources/images/jmsclustering/joram_ha.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/joram_ha.jpg rename to core/src/resources/images/jmsclustering/joram_ha.jpg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/mdbHa.ppt b/core/src/resources/images/jmsclustering/mdbHa.ppt similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/mdbHa.ppt rename to core/src/resources/images/jmsclustering/mdbHa.ppt diff --git a/jonas_doc/core/src/resources/images/jmsclustering/mdbclustering.png b/core/src/resources/images/jmsclustering/mdbclustering.png similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/mdbclustering.png rename to core/src/resources/images/jmsclustering/mdbclustering.png diff --git a/jonas_doc/core/src/resources/images/jmsclustering/mdbclustering.svg b/core/src/resources/images/jmsclustering/mdbclustering.svg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/mdbclustering.svg rename to core/src/resources/images/jmsclustering/mdbclustering.svg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/queuelb.png b/core/src/resources/images/jmsclustering/queuelb.png similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/queuelb.png rename to core/src/resources/images/jmsclustering/queuelb.png diff --git a/jonas_doc/core/src/resources/images/jmsclustering/queuelb.svg b/core/src/resources/images/jmsclustering/queuelb.svg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/queuelb.svg rename to core/src/resources/images/jmsclustering/queuelb.svg diff --git a/jonas_doc/core/src/resources/images/jmsclustering/topic.jpg b/core/src/resources/images/jmsclustering/topic.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jmsclustering/topic.jpg rename to core/src/resources/images/jmsclustering/topic.jpg diff --git a/jonas_doc/core/src/resources/images/jmxInterceptor.png b/core/src/resources/images/jmxInterceptor.png similarity index 100% rename from jonas_doc/core/src/resources/images/jmxInterceptor.png rename to core/src/resources/images/jmxInterceptor.png diff --git a/jonas_doc/core/src/resources/images/jndiInterceptor.png b/core/src/resources/images/jndiInterceptor.png similarity index 100% rename from jonas_doc/core/src/resources/images/jndiInterceptor.png rename to core/src/resources/images/jndiInterceptor.png diff --git a/jonas_doc/core/src/resources/images/jonas-classloaders.png b/core/src/resources/images/jonas-classloaders.png similarity index 100% rename from jonas_doc/core/src/resources/images/jonas-classloaders.png rename to core/src/resources/images/jonas-classloaders.png diff --git a/jonas_doc/core/src/resources/images/jonas-header.jpg b/core/src/resources/images/jonas-header.jpg similarity index 100% rename from jonas_doc/core/src/resources/images/jonas-header.jpg rename to core/src/resources/images/jonas-header.jpg diff --git a/jonas_doc/core/src/resources/images/jonasAdminDomain.gif b/core/src/resources/images/jonasAdminDomain.gif similarity index 100% rename from jonas_doc/core/src/resources/images/jonasAdminDomain.gif rename to core/src/resources/images/jonasAdminDomain.gif diff --git a/jonas_doc/core/src/resources/images/jonasAdminStackDump.png b/core/src/resources/images/jonasAdminStackDump.png similarity index 100% rename from jonas_doc/core/src/resources/images/jonasAdminStackDump.png rename to core/src/resources/images/jonasAdminStackDump.png diff --git a/jonas_doc/core/src/resources/images/jonas_doc.gif b/core/src/resources/images/jonas_doc.gif similarity index 100% rename from jonas_doc/core/src/resources/images/jonas_doc.gif rename to core/src/resources/images/jonas_doc.gif diff --git a/jonas_doc/core/src/resources/images/loaders/bundle-class-space.png b/core/src/resources/images/loaders/bundle-class-space.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/bundle-class-space.png rename to core/src/resources/images/loaders/bundle-class-space.png diff --git a/jonas_doc/core/src/resources/images/loaders/console-osgi.png b/core/src/resources/images/loaders/console-osgi.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/console-osgi.png rename to core/src/resources/images/loaders/console-osgi.png diff --git a/jonas_doc/core/src/resources/images/loaders/filtering-classloaders.png b/core/src/resources/images/loaders/filtering-classloaders.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/filtering-classloaders.png rename to core/src/resources/images/loaders/filtering-classloaders.png diff --git a/jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules-libext.png b/core/src/resources/images/loaders/jonas-osgi-modules-libext.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules-libext.png rename to core/src/resources/images/loaders/jonas-osgi-modules-libext.png diff --git a/jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules-ultra-zoom.png b/core/src/resources/images/loaders/jonas-osgi-modules-ultra-zoom.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules-ultra-zoom.png rename to core/src/resources/images/loaders/jonas-osgi-modules-ultra-zoom.png diff --git a/jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules.png b/core/src/resources/images/loaders/jonas-osgi-modules.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/jonas-osgi-modules.png rename to core/src/resources/images/loaders/jonas-osgi-modules.png diff --git a/jonas_doc/core/src/resources/images/loaders/jonas-round.png b/core/src/resources/images/loaders/jonas-round.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/jonas-round.png rename to core/src/resources/images/loaders/jonas-round.png diff --git a/jonas_doc/core/src/resources/images/loaders/osgi-classloading.gif b/core/src/resources/images/loaders/osgi-classloading.gif similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/osgi-classloading.gif rename to core/src/resources/images/loaders/osgi-classloading.gif diff --git a/jonas_doc/core/src/resources/images/loaders/system-loaders.png b/core/src/resources/images/loaders/system-loaders.png similarity index 100% rename from jonas_doc/core/src/resources/images/loaders/system-loaders.png rename to core/src/resources/images/loaders/system-loaders.png diff --git a/jonas_doc/core/src/resources/images/logoow.gif b/core/src/resources/images/logoow.gif similarity index 100% rename from jonas_doc/core/src/resources/images/logoow.gif rename to core/src/resources/images/logoow.gif diff --git a/jonas_doc/core/src/resources/images/monologExtension.png b/core/src/resources/images/monologExtension.png similarity index 100% rename from jonas_doc/core/src/resources/images/monologExtension.png rename to core/src/resources/images/monologExtension.png diff --git a/jonas_doc/core/src/resources/images/next.png b/core/src/resources/images/next.png similarity index 100% rename from jonas_doc/core/src/resources/images/next.png rename to core/src/resources/images/next.png diff --git a/jonas_doc/core/src/resources/images/note.png b/core/src/resources/images/note.png similarity index 100% rename from jonas_doc/core/src/resources/images/note.png rename to core/src/resources/images/note.png diff --git a/jonas_doc/core/src/resources/images/output.gif b/core/src/resources/images/output.gif similarity index 100% rename from jonas_doc/core/src/resources/images/output.gif rename to core/src/resources/images/output.gif diff --git a/jonas_doc/core/src/resources/images/prev.png b/core/src/resources/images/prev.png similarity index 100% rename from jonas_doc/core/src/resources/images/prev.png rename to core/src/resources/images/prev.png diff --git a/jonas_doc/core/src/resources/images/publish.gif b/core/src/resources/images/publish.gif similarity index 100% rename from jonas_doc/core/src/resources/images/publish.gif rename to core/src/resources/images/publish.gif diff --git a/jonas_doc/core/src/resources/images/service-dependencies.png b/core/src/resources/images/service-dependencies.png similarity index 100% rename from jonas_doc/core/src/resources/images/service-dependencies.png rename to core/src/resources/images/service-dependencies.png diff --git a/jonas_doc/core/src/resources/images/sharedASMultitenantLevel.png b/core/src/resources/images/sharedASMultitenantLevel.png similarity index 100% rename from jonas_doc/core/src/resources/images/sharedASMultitenantLevel.png rename to core/src/resources/images/sharedASMultitenantLevel.png diff --git a/jonas_doc/core/src/resources/images/sharedDatabaseAndSchema.png b/core/src/resources/images/sharedDatabaseAndSchema.png similarity index 100% rename from jonas_doc/core/src/resources/images/sharedDatabaseAndSchema.png rename to core/src/resources/images/sharedDatabaseAndSchema.png diff --git a/jonas_doc/core/src/resources/images/tenantAdminIsolation.png b/core/src/resources/images/tenantAdminIsolation.png similarity index 100% rename from jonas_doc/core/src/resources/images/tenantAdminIsolation.png rename to core/src/resources/images/tenantAdminIsolation.png diff --git a/jonas_doc/core/src/resources/images/tenantContext.png b/core/src/resources/images/tenantContext.png similarity index 100% rename from jonas_doc/core/src/resources/images/tenantContext.png rename to core/src/resources/images/tenantContext.png diff --git a/jonas_doc/core/src/resources/images/tip.png b/core/src/resources/images/tip.png similarity index 100% rename from jonas_doc/core/src/resources/images/tip.png rename to core/src/resources/images/tip.png diff --git a/jonas_doc/core/src/resources/images/up.png b/core/src/resources/images/up.png similarity index 100% rename from jonas_doc/core/src/resources/images/up.png rename to core/src/resources/images/up.png diff --git a/jonas_doc/core/src/resources/images/versioning-ejb-schema.png b/core/src/resources/images/versioning-ejb-schema.png similarity index 100% rename from jonas_doc/core/src/resources/images/versioning-ejb-schema.png rename to core/src/resources/images/versioning-ejb-schema.png diff --git a/jonas_doc/core/src/resources/images/versioning-general-schema.png b/core/src/resources/images/versioning-general-schema.png similarity index 100% rename from jonas_doc/core/src/resources/images/versioning-general-schema.png rename to core/src/resources/images/versioning-general-schema.png diff --git a/jonas_doc/core/src/resources/images/warning.png b/core/src/resources/images/warning.png similarity index 100% rename from jonas_doc/core/src/resources/images/warning.png rename to core/src/resources/images/warning.png diff --git a/jonas_doc/core/src/resources/index.html b/core/src/resources/index.html similarity index 100% rename from jonas_doc/core/src/resources/index.html rename to core/src/resources/index.html diff --git a/jonas_doc/core/tools/docbook-5.0/ChangeLog b/core/tools/docbook-5.0/ChangeLog similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/ChangeLog rename to core/tools/docbook-5.0/ChangeLog diff --git a/jonas_doc/core/tools/docbook-5.0/README b/core/tools/docbook-5.0/README similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/README rename to core/tools/docbook-5.0/README diff --git a/jonas_doc/core/tools/docbook-5.0/VERSION b/core/tools/docbook-5.0/VERSION similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/VERSION rename to core/tools/docbook-5.0/VERSION diff --git a/jonas_doc/core/tools/docbook-5.0/catalog.xml b/core/tools/docbook-5.0/catalog.xml similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/catalog.xml rename to core/tools/docbook-5.0/catalog.xml diff --git a/jonas_doc/core/tools/docbook-5.0/docbook.nvdl b/core/tools/docbook-5.0/docbook.nvdl similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/docbook.nvdl rename to core/tools/docbook-5.0/docbook.nvdl diff --git a/jonas_doc/core/tools/docbook-5.0/dtd/docbook.dtd b/core/tools/docbook-5.0/dtd/docbook.dtd similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/dtd/docbook.dtd rename to core/tools/docbook-5.0/dtd/docbook.dtd diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbook.rnc b/core/tools/docbook-5.0/rng/docbook.rnc similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/rng/docbook.rnc rename to core/tools/docbook-5.0/rng/docbook.rnc diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbook.rng b/core/tools/docbook-5.0/rng/docbook.rng similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/rng/docbook.rng rename to core/tools/docbook-5.0/rng/docbook.rng diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rnc b/core/tools/docbook-5.0/rng/docbookxi.rnc similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rnc rename to core/tools/docbook-5.0/rng/docbookxi.rnc diff --git a/jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rng b/core/tools/docbook-5.0/rng/docbookxi.rng similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/rng/docbookxi.rng rename to core/tools/docbook-5.0/rng/docbookxi.rng diff --git a/jonas_doc/core/tools/docbook-5.0/sch/docbook.sch b/core/tools/docbook-5.0/sch/docbook.sch similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/sch/docbook.sch rename to core/tools/docbook-5.0/sch/docbook.sch diff --git a/jonas_doc/core/tools/docbook-5.0/tools/db4-entities.pl b/core/tools/docbook-5.0/tools/db4-entities.pl similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/tools/db4-entities.pl rename to core/tools/docbook-5.0/tools/db4-entities.pl diff --git a/jonas_doc/core/tools/docbook-5.0/tools/db4-upgrade.xsl b/core/tools/docbook-5.0/tools/db4-upgrade.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/tools/db4-upgrade.xsl rename to core/tools/docbook-5.0/tools/db4-upgrade.xsl diff --git a/jonas_doc/core/tools/docbook-5.0/xsd/docbook.xsd b/core/tools/docbook-5.0/xsd/docbook.xsd similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/xsd/docbook.xsd rename to core/tools/docbook-5.0/xsd/docbook.xsd diff --git a/jonas_doc/core/tools/docbook-5.0/xsd/xlink.xsd b/core/tools/docbook-5.0/xsd/xlink.xsd similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/xsd/xlink.xsd rename to core/tools/docbook-5.0/xsd/xlink.xsd diff --git a/jonas_doc/core/tools/docbook-5.0/xsd/xml.xsd b/core/tools/docbook-5.0/xsd/xml.xsd similarity index 100% rename from jonas_doc/core/tools/docbook-5.0/xsd/xml.xsd rename to core/tools/docbook-5.0/xsd/xml.xsd diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/AUTHORS b/core/tools/docbook-xsl-ns-1.76.1/AUTHORS similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/AUTHORS rename to core/tools/docbook-xsl-ns-1.76.1/AUTHORS diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/BUGS b/core/tools/docbook-xsl-ns-1.76.1/BUGS similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/BUGS rename to core/tools/docbook-xsl-ns-1.76.1/BUGS diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/COPYING b/core/tools/docbook-xsl-ns-1.76.1/COPYING similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/COPYING rename to core/tools/docbook-xsl-ns-1.76.1/COPYING diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/INSTALL b/core/tools/docbook-xsl-ns-1.76.1/INSTALL similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/INSTALL rename to core/tools/docbook-xsl-ns-1.76.1/INSTALL diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/Makefile b/core/tools/docbook-xsl-ns-1.76.1/Makefile similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/Makefile rename to core/tools/docbook-xsl-ns-1.76.1/Makefile diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS b/core/tools/docbook-xsl-ns-1.76.1/NEWS similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS rename to core/tools/docbook-xsl-ns-1.76.1/NEWS diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.html b/core/tools/docbook-xsl-ns-1.76.1/NEWS.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.html rename to core/tools/docbook-xsl-ns-1.76.1/NEWS.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml b/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/NEWS.xml rename to core/tools/docbook-xsl-ns-1.76.1/NEWS.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html b/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html rename to core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf b/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf rename to core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.pdf diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt b/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt rename to core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.txt diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml b/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml rename to core/tools/docbook-xsl-ns-1.76.1/RELEASE-NOTES.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/TODO b/core/tools/docbook-xsl-ns-1.76.1/TODO similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/TODO rename to core/tools/docbook-xsl-ns-1.76.1/TODO diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/VERSION b/core/tools/docbook-xsl-ns-1.76.1/VERSION similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/VERSION rename to core/tools/docbook-xsl-ns-1.76.1/VERSION diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/catalog.xml b/core/tools/docbook-xsl-ns-1.76.1/catalog.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/catalog.xml rename to core/tools/docbook-xsl-ns-1.76.1/catalog.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/addns.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/addns.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/addns.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/addns.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/af.xml b/core/tools/docbook-xsl-ns-1.76.1/common/af.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/af.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/af.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/am.xml b/core/tools/docbook-xsl-ns-1.76.1/common/am.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/am.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/am.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ar.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ar.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ar.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ar.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/as.xml b/core/tools/docbook-xsl-ns-1.76.1/common/as.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/as.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/as.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ast.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ast.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ast.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ast.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kimber.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kimber.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kimber.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kimber.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kosek.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kosek.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kosek.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/autoidx-kosek.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/az.xml b/core/tools/docbook-xsl-ns-1.76.1/common/az.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/az.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/az.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bg.xml b/core/tools/docbook-xsl-ns-1.76.1/common/bg.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bg.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/bg.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/bn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/bn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bn_in.xml b/core/tools/docbook-xsl-ns-1.76.1/common/bn_in.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bn_in.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/bn_in.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bs.xml b/core/tools/docbook-xsl-ns-1.76.1/common/bs.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/bs.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/bs.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ca.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ca.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ca.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ca.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xml b/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/charmap.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/charmap.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/charmap.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/common.xml b/core/tools/docbook-xsl-ns-1.76.1/common/common.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/common.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/common.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/common.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/cs.xml b/core/tools/docbook-xsl-ns-1.76.1/common/cs.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/cs.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/cs.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/cy.xml b/core/tools/docbook-xsl-ns-1.76.1/common/cy.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/cy.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/cy.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/da.xml b/core/tools/docbook-xsl-ns-1.76.1/common/da.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/da.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/da.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/de.xml b/core/tools/docbook-xsl-ns-1.76.1/common/de.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/de.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/de.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/el.xml b/core/tools/docbook-xsl-ns-1.76.1/common/el.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/el.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/el.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/en.xml b/core/tools/docbook-xsl-ns-1.76.1/common/en.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/en.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/en.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/entities.ent b/core/tools/docbook-xsl-ns-1.76.1/common/entities.ent similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/entities.ent rename to core/tools/docbook-xsl-ns-1.76.1/common/entities.ent diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/eo.xml b/core/tools/docbook-xsl-ns-1.76.1/common/eo.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/eo.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/eo.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/es.xml b/core/tools/docbook-xsl-ns-1.76.1/common/es.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/es.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/es.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/et.xml b/core/tools/docbook-xsl-ns-1.76.1/common/et.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/et.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/et.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/eu.xml b/core/tools/docbook-xsl-ns-1.76.1/common/eu.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/eu.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/eu.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fa.xml b/core/tools/docbook-xsl-ns-1.76.1/common/fa.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fa.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/fa.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fi.xml b/core/tools/docbook-xsl-ns-1.76.1/common/fi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fi.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/fi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fr.xml b/core/tools/docbook-xsl-ns-1.76.1/common/fr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/fr.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/fr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ga.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ga.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ga.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ga.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gentext.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/gentext.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gentext.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/gentext.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gl.xml b/core/tools/docbook-xsl-ns-1.76.1/common/gl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gl.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/gl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gu.xml b/core/tools/docbook-xsl-ns-1.76.1/common/gu.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/gu.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/gu.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/he.xml b/core/tools/docbook-xsl-ns-1.76.1/common/he.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/he.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/he.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hi.xml b/core/tools/docbook-xsl-ns-1.76.1/common/hi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hi.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/hi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hr.xml b/core/tools/docbook-xsl-ns-1.76.1/common/hr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hr.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/hr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hu.xml b/core/tools/docbook-xsl-ns-1.76.1/common/hu.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/hu.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/hu.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/id.xml b/core/tools/docbook-xsl-ns-1.76.1/common/id.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/id.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/id.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html b/core/tools/docbook-xsl-ns-1.76.1/common/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/common/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/insertfile.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/insertfile.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/insertfile.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/insertfile.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/is.xml b/core/tools/docbook-xsl-ns-1.76.1/common/is.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/is.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/is.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/it.xml b/core/tools/docbook-xsl-ns-1.76.1/common/it.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/it.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/it.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ja.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ja.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ja.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ja.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ka.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ka.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ka.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ka.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/kn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/kn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/kn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/kn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ko.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ko.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ko.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ko.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ky.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ky.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ky.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ky.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.dtd b/core/tools/docbook-xsl-ns-1.76.1/common/l10n.dtd similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.dtd rename to core/tools/docbook-xsl-ns-1.76.1/common/l10n.dtd diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xml b/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/l10n.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/l10n.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/l10n.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/la.xml b/core/tools/docbook-xsl-ns-1.76.1/common/la.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/la.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/la.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/labels.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/labels.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/labels.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/labels.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/lt.xml b/core/tools/docbook-xsl-ns-1.76.1/common/lt.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/lt.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/lt.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/lv.xml b/core/tools/docbook-xsl-ns-1.76.1/common/lv.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/lv.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/lv.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ml.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ml.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ml.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ml.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/mn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/mn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/mn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/mn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/mr.xml b/core/tools/docbook-xsl-ns-1.76.1/common/mr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/mr.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/mr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nb.xml b/core/tools/docbook-xsl-ns-1.76.1/common/nb.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nb.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/nb.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nds.xml b/core/tools/docbook-xsl-ns-1.76.1/common/nds.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nds.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/nds.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nl.xml b/core/tools/docbook-xsl-ns-1.76.1/common/nl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nl.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/nl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/nn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/nn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/nn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/olink.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/olink.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/olink.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/olink.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/or.xml b/core/tools/docbook-xsl-ns-1.76.1/common/or.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/or.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/or.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pa.xml b/core/tools/docbook-xsl-ns-1.76.1/common/pa.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pa.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/pa.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pi.xml b/core/tools/docbook-xsl-ns-1.76.1/common/pi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pi.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/pi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pl.xml b/core/tools/docbook-xsl-ns-1.76.1/common/pl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pl.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/pl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pt.xml b/core/tools/docbook-xsl-ns-1.76.1/common/pt.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pt.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/pt.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pt_br.xml b/core/tools/docbook-xsl-ns-1.76.1/common/pt_br.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/pt_br.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/pt_br.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xml b/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/refentry.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ro.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ro.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ro.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ro.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ru.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ru.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ru.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ru.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sk.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sk.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sk.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sk.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sl.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sl.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sq.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sq.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sq.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sq.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sr.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sr.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sr_Latn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sr_Latn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sr_Latn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sr_Latn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/subtitles.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/subtitles.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/subtitles.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/subtitles.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sv.xml b/core/tools/docbook-xsl-ns-1.76.1/common/sv.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/sv.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/sv.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ta.xml b/core/tools/docbook-xsl-ns-1.76.1/common/ta.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/ta.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/ta.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/targetdatabase.dtd b/core/tools/docbook-xsl-ns-1.76.1/common/targetdatabase.dtd similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/targetdatabase.dtd rename to core/tools/docbook-xsl-ns-1.76.1/common/targetdatabase.dtd diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/targets.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/targets.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/targets.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/targets.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/te.xml b/core/tools/docbook-xsl-ns-1.76.1/common/te.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/te.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/te.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/th.xml b/core/tools/docbook-xsl-ns-1.76.1/common/th.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/th.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/th.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/titles.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/titles.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/titles.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/titles.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/tl.xml b/core/tools/docbook-xsl-ns-1.76.1/common/tl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/tl.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/tl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/tr.xml b/core/tools/docbook-xsl-ns-1.76.1/common/tr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/tr.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/tr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/uk.xml b/core/tools/docbook-xsl-ns-1.76.1/common/uk.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/uk.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/uk.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/utility.xml b/core/tools/docbook-xsl-ns-1.76.1/common/utility.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/utility.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/utility.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/utility.xsl b/core/tools/docbook-xsl-ns-1.76.1/common/utility.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/utility.xsl rename to core/tools/docbook-xsl-ns-1.76.1/common/utility.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/vi.xml b/core/tools/docbook-xsl-ns-1.76.1/common/vi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/vi.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/vi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/xh.xml b/core/tools/docbook-xsl-ns-1.76.1/common/xh.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/xh.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/xh.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh.xml b/core/tools/docbook-xsl-ns-1.76.1/common/zh.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/zh.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh_cn.xml b/core/tools/docbook-xsl-ns-1.76.1/common/zh_cn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh_cn.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/zh_cn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh_tw.xml b/core/tools/docbook-xsl-ns-1.76.1/common/zh_tw.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/common/zh_tw.xml rename to core/tools/docbook-xsl-ns-1.76.1/common/zh_tw.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/authors.xml b/core/tools/docbook-xsl-ns-1.76.1/docsrc/authors.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/authors.xml rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/authors.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/copyright.xml b/core/tools/docbook-xsl-ns-1.76.1/docsrc/copyright.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/copyright.xml rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/copyright.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/license.xml b/core/tools/docbook-xsl-ns-1.76.1/docsrc/license.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/license.xml rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/license.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/page.png b/core/tools/docbook-xsl-ns-1.76.1/docsrc/page.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/page.png rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/page.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.css b/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.css rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml b/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml.included b/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml.included similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml.included rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/reference.xml.included diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/warranty.xml b/core/tools/docbook-xsl-ns-1.76.1/docsrc/warranty.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/docsrc/warranty.xml rename to core/tools/docbook-xsl-ns-1.76.1/docsrc/warranty.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl b/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse3.xsl b/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse3.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse3.xsl rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/eclipse3.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/profile-eclipse.xsl b/core/tools/docbook-xsl-ns-1.76.1/eclipse/profile-eclipse.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/eclipse/profile-eclipse.xsl rename to core/tools/docbook-xsl-ns-1.76.1/eclipse/profile-eclipse.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/epub/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/epub/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/epub/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/LICENSE.txt b/core/tools/docbook-xsl-ns-1.76.1/extensions/LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/LICENSE.txt rename to core/tools/docbook-xsl-ns-1.76.1/extensions/LICENSE.txt diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/NOTICE.txt b/core/tools/docbook-xsl-ns-1.76.1/extensions/NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/NOTICE.txt rename to core/tools/docbook-xsl-ns-1.76.1/extensions/NOTICE.txt diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/docbook.py b/core/tools/docbook-xsl-ns-1.76.1/extensions/docbook.py similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/docbook.py rename to core/tools/docbook-xsl-ns-1.76.1/extensions/docbook.py diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/extensions/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/xslt.py b/core/tools/docbook-xsl-ns-1.76.1/extensions/xslt.py similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/extensions/xslt.py rename to core/tools/docbook-xsl-ns-1.76.1/extensions/xslt.py diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/admon.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/admon.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/admon.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/admon.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/annotations.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/annotations.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/annotations.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/annotations.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kimber.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kimber.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kimber.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kimber.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kosek.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kosek.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kosek.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-kosek.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/autoidx-ng.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autoidx.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/autoidx.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autotoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/autotoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/autotoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/autotoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/axf.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/axf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/axf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/axf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/biblio-iso690.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/biblio-iso690.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/biblio-iso690.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/biblio-iso690.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/biblio.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/block.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/block.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/block.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/block.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/callout.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/callout.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/callout.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/callout.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/component.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/component.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/component.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/component.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/division.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/division.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/division.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/division.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/ebnf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/fo-rtf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fo.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/fo.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fo.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/fo.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/footnote.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/footnote.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/footnote.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/footnote.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fop.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/fop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/fop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/fop1.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/formal.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/formal.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/formal.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/formal.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/glossary.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/glossary.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/glossary.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/glossary.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/highlight.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/highlight.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/highlight.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/highlight.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/htmltbl.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/htmltbl.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/htmltbl.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/htmltbl.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/index.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/index.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/index.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/info.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/info.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/info.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/info.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/inline.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/inline.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/inline.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/inline.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/keywords.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/keywords.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/keywords.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/keywords.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/lists.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/lists.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/lists.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/lists.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/math.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/math.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/math.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/math.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pagesetup.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/pagesetup.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pagesetup.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/pagesetup.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/param.xml b/core/tools/docbook-xsl-ns-1.76.1/fo/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/fo/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/passivetex.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/passivetex.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/passivetex.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/passivetex.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pdf2index b/core/tools/docbook-xsl-ns-1.76.1/fo/pdf2index similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pdf2index rename to core/tools/docbook-xsl-ns-1.76.1/fo/pdf2index diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xml b/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xml rename to core/tools/docbook-xsl-ns-1.76.1/fo/pi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/profile-docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/profile-docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/profile-docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/profile-docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/ptc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/qandaset.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/qandaset.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/qandaset.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/qandaset.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/sections.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/sections.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/sections.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/sections.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/spaces.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/table.xml b/core/tools/docbook-xsl-ns-1.76.1/fo/table.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/table.xml rename to core/tools/docbook-xsl-ns-1.76.1/fo/table.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/task.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/task.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/task.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/task.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xml b/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xml rename to core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.templates.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/toc.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/toc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/toc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/toc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/verbatim.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/verbatim.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/verbatim.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/verbatim.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/xep.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/xep.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/xep.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/xep.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/xref.xsl b/core/tools/docbook-xsl-ns-1.76.1/fo/xref.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/fo/xref.xsl rename to core/tools/docbook-xsl-ns-1.76.1/fo/xref.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/c-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/c-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/c-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/c-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/common.xsl b/core/tools/docbook-xsl-ns-1.76.1/highlighting/common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/cpp-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/cpp-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/cpp-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/cpp-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/csharp-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/csharp-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/csharp-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/csharp-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/delphi-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/delphi-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/delphi-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/delphi-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/ini-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/ini-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/ini-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/ini-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/java-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/java-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/java-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/java-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/javascript-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/javascript-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/javascript-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/javascript-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/m2-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/m2-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/m2-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/m2-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/myxml-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/myxml-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/myxml-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/myxml-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/perl-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/perl-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/perl-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/perl-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/php-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/php-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/php-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/php-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/python-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/python-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/python-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/python-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/ruby-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/ruby-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/ruby-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/ruby-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/tcl-hl.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/tcl-hl.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/tcl-hl.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/tcl-hl.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/xslthl-config.xml b/core/tools/docbook-xsl-ns-1.76.1/highlighting/xslthl-config.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/highlighting/xslthl-config.xml rename to core/tools/docbook-xsl-ns-1.76.1/highlighting/xslthl-config.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/admon.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/admon.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/admon.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/admon.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/annotations.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/annotations.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/annotations.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/annotations.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kimber.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kimber.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kimber.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kimber.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kosek.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kosek.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kosek.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/autoidx-kosek.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/autoidx-ng.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/autoidx.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autoidx.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/autoidx.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autotoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/autotoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/autotoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/autotoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/biblio-iso690.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/biblio-iso690.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/biblio-iso690.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/biblio-iso690.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/biblio.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/biblio.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/biblio.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/biblio.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/block.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/block.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/block.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/block.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/callout.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/callout.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/callout.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/callout.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunk-changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunk-changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunk-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunk-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunkfast.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunkfast.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunkfast.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunkfast.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunktoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/chunktoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/chunktoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/chunktoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/component.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/component.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/component.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/component.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/division.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/division.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/division.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/division.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/docbook.css.xml b/core/tools/docbook-xsl-ns-1.76.1/html/docbook.css.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/docbook.css.xml rename to core/tools/docbook-xsl-ns-1.76.1/html/docbook.css.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/ebnf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/footnote.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/footnote.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/footnote.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/footnote.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/formal.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/formal.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/formal.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/formal.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/glossary.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/glossary.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/glossary.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/glossary.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/highlight.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/highlight.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/highlight.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/highlight.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/html-rtf.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/html-rtf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/html-rtf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/html-rtf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/html.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/html.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/html.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/html.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/htmltbl.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/htmltbl.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/htmltbl.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/htmltbl.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html b/core/tools/docbook-xsl-ns-1.76.1/html/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/html/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/index.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/index.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/index.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/info.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/info.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/info.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/info.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/inline.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/inline.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/inline.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/inline.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/keywords.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/keywords.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/keywords.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/keywords.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/lists.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/lists.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/lists.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/lists.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/maketoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/maketoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/maketoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/maketoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/manifest.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/manifest.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/manifest.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/manifest.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/math.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/math.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/math.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/math.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/oldchunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/oldchunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/oldchunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/oldchunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/param.xml b/core/tools/docbook-xsl-ns-1.76.1/html/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/html/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/pi.xml b/core/tools/docbook-xsl-ns-1.76.1/html/pi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/pi.xml rename to core/tools/docbook-xsl-ns-1.76.1/html/pi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/profile-chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/profile-docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/profile-docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/profile-onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/profile-onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/profile-onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/qandaset.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/qandaset.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/qandaset.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/qandaset.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/sections.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/sections.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/sections.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/sections.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/task.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/task.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/task.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/task.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xml b/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xml rename to core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/titlepage.templates.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/toc.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/toc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/toc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/toc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/verbatim.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/verbatim.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/verbatim.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/verbatim.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/xref.xsl b/core/tools/docbook-xsl-ns-1.76.1/html/xref.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/html/xref.xsl rename to core/tools/docbook-xsl-ns-1.76.1/html/xref.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/htmlhelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/htmlhelp/profile-htmlhelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/annot-close.png b/core/tools/docbook-xsl-ns-1.76.1/images/annot-close.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/annot-close.png rename to core/tools/docbook-xsl-ns-1.76.1/images/annot-close.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/annot-open.png b/core/tools/docbook-xsl-ns-1.76.1/images/annot-open.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/annot-open.png rename to core/tools/docbook-xsl-ns-1.76.1/images/annot-open.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/blank.png b/core/tools/docbook-xsl-ns-1.76.1/images/blank.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/blank.png rename to core/tools/docbook-xsl-ns-1.76.1/images/blank.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/1.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/10.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/11.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/12.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/13.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/14.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/15.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/16.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/16.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/16.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/16.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/17.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/17.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/17.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/17.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/18.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/18.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/18.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/18.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/19.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/19.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/19.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/19.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/2.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/20.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/20.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/20.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/20.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/21.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/21.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/21.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/21.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/22.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/22.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/22.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/22.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/23.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/23.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/23.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/23.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/24.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/24.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/24.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/24.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/25.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/25.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/25.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/25.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/26.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/26.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/26.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/26.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/27.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/27.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/27.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/27.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/28.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/28.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/28.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/28.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/29.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/29.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/29.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/29.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/3.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/30.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/30.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/30.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/30.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/4.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/5.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/6.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/7.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/8.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.gif b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.png b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.png rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.svg b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/9.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/callouts/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.gif b/core/tools/docbook-xsl-ns-1.76.1/images/caution.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/caution.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.png b/core/tools/docbook-xsl-ns-1.76.1/images/caution.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.png rename to core/tools/docbook-xsl-ns-1.76.1/images/caution.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.svg b/core/tools/docbook-xsl-ns-1.76.1/images/caution.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/caution.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.tif b/core/tools/docbook-xsl-ns-1.76.1/images/caution.tif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/caution.tif rename to core/tools/docbook-xsl-ns-1.76.1/images/caution.tif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/caution.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/caution.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/caution.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/caution.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/home.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/home.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/home.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/home.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/important.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/important.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/important.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/important.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/next.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/next.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/next.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/next.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/note.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/note.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/note.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/note.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/prev.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/prev.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/prev.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/prev.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/tip.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/tip.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/tip.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/tip.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/up.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/up.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/up.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/up.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/warning.svg b/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/warning.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/warning.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/colorsvg/warning.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/draft.png b/core/tools/docbook-xsl-ns-1.76.1/images/draft.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/draft.png rename to core/tools/docbook-xsl-ns-1.76.1/images/draft.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.gif b/core/tools/docbook-xsl-ns-1.76.1/images/home.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/home.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.png b/core/tools/docbook-xsl-ns-1.76.1/images/home.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.png rename to core/tools/docbook-xsl-ns-1.76.1/images/home.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.svg b/core/tools/docbook-xsl-ns-1.76.1/images/home.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/home.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/home.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.gif b/core/tools/docbook-xsl-ns-1.76.1/images/important.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/important.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.png b/core/tools/docbook-xsl-ns-1.76.1/images/important.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.png rename to core/tools/docbook-xsl-ns-1.76.1/images/important.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.svg b/core/tools/docbook-xsl-ns-1.76.1/images/important.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/important.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.tif b/core/tools/docbook-xsl-ns-1.76.1/images/important.tif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/important.tif rename to core/tools/docbook-xsl-ns-1.76.1/images/important.tif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html b/core/tools/docbook-xsl-ns-1.76.1/images/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/images/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/info.png b/core/tools/docbook-xsl-ns-1.76.1/images/info.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/info.png rename to core/tools/docbook-xsl-ns-1.76.1/images/info.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.gif b/core/tools/docbook-xsl-ns-1.76.1/images/next.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/next.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.png b/core/tools/docbook-xsl-ns-1.76.1/images/next.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.png rename to core/tools/docbook-xsl-ns-1.76.1/images/next.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.svg b/core/tools/docbook-xsl-ns-1.76.1/images/next.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/next.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/next.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.gif b/core/tools/docbook-xsl-ns-1.76.1/images/note.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/note.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.png b/core/tools/docbook-xsl-ns-1.76.1/images/note.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.png rename to core/tools/docbook-xsl-ns-1.76.1/images/note.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.svg b/core/tools/docbook-xsl-ns-1.76.1/images/note.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/note.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.tif b/core/tools/docbook-xsl-ns-1.76.1/images/note.tif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/note.tif rename to core/tools/docbook-xsl-ns-1.76.1/images/note.tif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.gif b/core/tools/docbook-xsl-ns-1.76.1/images/prev.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/prev.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.png b/core/tools/docbook-xsl-ns-1.76.1/images/prev.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.png rename to core/tools/docbook-xsl-ns-1.76.1/images/prev.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.svg b/core/tools/docbook-xsl-ns-1.76.1/images/prev.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/prev.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/prev.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.gif b/core/tools/docbook-xsl-ns-1.76.1/images/tip.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/tip.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.png b/core/tools/docbook-xsl-ns-1.76.1/images/tip.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.png rename to core/tools/docbook-xsl-ns-1.76.1/images/tip.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.svg b/core/tools/docbook-xsl-ns-1.76.1/images/tip.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/tip.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.tif b/core/tools/docbook-xsl-ns-1.76.1/images/tip.tif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/tip.tif rename to core/tools/docbook-xsl-ns-1.76.1/images/tip.tif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-blank.png b/core/tools/docbook-xsl-ns-1.76.1/images/toc-blank.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-blank.png rename to core/tools/docbook-xsl-ns-1.76.1/images/toc-blank.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-minus.png b/core/tools/docbook-xsl-ns-1.76.1/images/toc-minus.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-minus.png rename to core/tools/docbook-xsl-ns-1.76.1/images/toc-minus.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-plus.png b/core/tools/docbook-xsl-ns-1.76.1/images/toc-plus.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/toc-plus.png rename to core/tools/docbook-xsl-ns-1.76.1/images/toc-plus.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.gif b/core/tools/docbook-xsl-ns-1.76.1/images/up.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/up.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.png b/core/tools/docbook-xsl-ns-1.76.1/images/up.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.png rename to core/tools/docbook-xsl-ns-1.76.1/images/up.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.svg b/core/tools/docbook-xsl-ns-1.76.1/images/up.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/up.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/up.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.gif b/core/tools/docbook-xsl-ns-1.76.1/images/warning.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.gif rename to core/tools/docbook-xsl-ns-1.76.1/images/warning.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.png b/core/tools/docbook-xsl-ns-1.76.1/images/warning.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.png rename to core/tools/docbook-xsl-ns-1.76.1/images/warning.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.svg b/core/tools/docbook-xsl-ns-1.76.1/images/warning.svg similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.svg rename to core/tools/docbook-xsl-ns-1.76.1/images/warning.svg diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.tif b/core/tools/docbook-xsl-ns-1.76.1/images/warning.tif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/images/warning.tif rename to core/tools/docbook-xsl-ns-1.76.1/images/warning.tif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html b/core/tools/docbook-xsl-ns-1.76.1/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html rename to core/tools/docbook-xsl-ns-1.76.1/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/install.sh b/core/tools/docbook-xsl-ns-1.76.1/install.sh similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/install.sh rename to core/tools/docbook-xsl-ns-1.76.1/install.sh diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/javahelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/javahelp/javahelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/javahelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/javahelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/profile-javahelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/javahelp/profile-javahelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/javahelp/profile-javahelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/javahelp/profile-javahelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/lib/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/lib.xsl b/core/tools/docbook-xsl-ns-1.76.1/lib/lib.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/lib/lib.xsl rename to core/tools/docbook-xsl-ns-1.76.1/lib/lib.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/ChangeLog.20020917 b/core/tools/docbook-xsl-ns-1.76.1/manpages/ChangeLog.20020917 similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/ChangeLog.20020917 rename to core/tools/docbook-xsl-ns-1.76.1/manpages/ChangeLog.20020917 diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/block.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/block.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/block.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/block.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/charmap.groff.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/charmap.groff.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/charmap.groff.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/charmap.groff.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/endnotes.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/endnotes.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/endnotes.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/endnotes.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/html-synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/html-synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/html-synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/html-synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/manpages/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/info.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/info.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/info.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/info.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/inline.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/inline.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/inline.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/inline.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/lists.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/lists.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/lists.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/lists.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/other.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/other.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/other.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/other.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xml b/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/manpages/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xml b/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xml rename to core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/profile-docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/profile-docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/profile-docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/profile-docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/utility.xsl b/core/tools/docbook-xsl-ns-1.76.1/manpages/utility.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/manpages/utility.xsl rename to core/tools/docbook-xsl-ns-1.76.1/manpages/utility.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.notitle.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/abstract.notitle.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.notitle.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/abstract.notitle.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/abstract.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/abstract.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/abstract.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/abstract.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/abstract.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/active.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/active.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/active.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/active.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ade.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ade.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ade.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ade.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.path.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.path.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.path.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.path.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admon.graphics.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admon.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admon.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.textlabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admon.textlabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admon.textlabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admon.textlabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admonition.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admonition.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admonition.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admonition.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admonition.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/admonition.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/admonition.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/admonition.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/alignment.xml b/core/tools/docbook-xsl-ns-1.76.1/params/alignment.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/alignment.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/alignment.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotate.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotate.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotate.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotate.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.css.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotation.css.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.css.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotation.css.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.close.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.close.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.close.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.close.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.open.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.open.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.open.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotation.graphic.open.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotation.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotation.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.support.xml b/core/tools/docbook-xsl-ns-1.76.1/params/annotation.support.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/annotation.support.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/annotation.support.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/appendix.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/appendix.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/appendix.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/appendix.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/arbortext.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/arbortext.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/arbortext.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/arbortext.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/article.appendix.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/article.appendix.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/article.appendix.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/article.appendix.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/author.othername.in.middle.xml b/core/tools/docbook-xsl-ns-1.76.1/params/author.othername.in.middle.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/author.othername.in.middle.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/author.othername.in.middle.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autolayout-file.xml b/core/tools/docbook-xsl-ns-1.76.1/params/autolayout-file.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autolayout-file.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/autolayout-file.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.in.hyperlink.xml b/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.in.hyperlink.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.in.hyperlink.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.in.hyperlink.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/autotoc.label.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/axf.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/axf.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/axf.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/axf.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/banner.before.navigation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/banner.before.navigation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/banner.before.navigation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/banner.before.navigation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/base.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/base.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/base.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/base.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.item.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.item.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.item.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.item.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/biblioentry.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.collection.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.collection.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.collection.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bibliography.collection.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.numbered.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.numbered.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.numbered.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bibliography.numbered.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bibliography.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bibliography.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/blockquote.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/blockquote.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/blockquote.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/blockquote.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/blurb.on.titlepage.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/blurb.on.titlepage.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/blurb.on.titlepage.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/blurb.on.titlepage.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.attributes.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.attributes.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.attributes.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.attributes.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.bg.color.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.bg.color.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.bg.color.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.bg.color.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.end.indent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.end.indent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.end.indent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.end.indent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.master.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.font.master.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.master.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.font.master.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.size.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.font.size.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.font.size.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.font.size.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.bottom.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.bottom.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.bottom.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.margin.bottom.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.top.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.top.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.margin.top.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.margin.top.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.start.indent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/body.start.indent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/body.start.indent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/body.start.indent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bookmarks.collapse.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bookmarks.collapse.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bookmarks.collapse.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bookmarks.collapse.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bridgehead.in.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bridgehead.in.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bridgehead.in.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bridgehead.in.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bullet.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/bullet.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/bullet.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/bullet.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.defaultcolumn.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.defaultcolumn.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.defaultcolumn.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.defaultcolumn.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.number.limit.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.number.limit.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.number.limit.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.number.limit.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.path.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.path.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.path.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.path.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.graphics.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.icon.size.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.icon.size.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.icon.size.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.icon.size.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.list.table.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.list.table.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.list.table.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.list.table.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.font.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.font.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.font.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.font.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.number.limit.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.number.limit.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.number.limit.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.number.limit.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.start.character.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.start.character.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.start.character.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.start.character.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callout.unicode.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callouts.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/callouts.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/callouts.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/callouts.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chapter.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chapter.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chapter.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chapter.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.append.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.append.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.append.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.append.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.first.sections.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.first.sections.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.first.sections.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.first.sections.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.quietly.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.quietly.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.quietly.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.quietly.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.section.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.section.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.section.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.section.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.sections.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.sections.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.sections.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.sections.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.separate.lots.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.separate.lots.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.separate.lots.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.separate.lots.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.has.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.has.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.has.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.has.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunk.tocs.and.lots.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.cdata-section-elements.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.cdata-section-elements.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.cdata-section-elements.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.cdata-section-elements.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-public.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-public.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-public.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-public.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-system.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-system.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-system.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.doctype-system.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.encoding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.encoding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.encoding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.encoding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.indent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.indent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.indent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.indent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.media-type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.media-type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.media-type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.media-type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.method.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.method.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.method.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.method.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.omit-xml-declaration.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.omit-xml-declaration.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.omit-xml-declaration.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.omit-xml-declaration.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.standalone.xml b/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.standalone.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.standalone.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/chunker.output.standalone.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/citerefentry.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/citerefentry.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/citerefentry.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/citerefentry.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/collect.xref.targets.xml b/core/tools/docbook-xsl-ns-1.76.1/params/collect.xref.targets.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/collect.xref.targets.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/collect.xref.targets.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.back.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.back.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.back.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.back.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.body.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.body.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.body.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.body.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.front.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.front.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.front.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.front.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.index.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.index.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.index.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.index.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.lot.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.lot.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.lot.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.lot.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.titlepage.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.count.titlepage.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.count.titlepage.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.count.titlepage.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.back.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.back.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.back.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.back.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.body.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.body.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.body.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.body.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.front.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.front.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.front.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.front.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.index.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.index.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.index.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.index.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.lot.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.lot.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.lot.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.lot.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.titlepage.xml b/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.titlepage.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/column.gap.titlepage.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/column.gap.titlepage.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/compact.list.item.spacing.xml b/core/tools/docbook-xsl-ns-1.76.1/params/compact.list.item.spacing.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/compact.list.item.spacing.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/compact.list.item.spacing.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.label.includes.part.label.xml b/core/tools/docbook-xsl-ns-1.76.1/params/component.label.includes.part.label.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.label.includes.part.label.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/component.label.includes.part.label.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/component.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/component.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.titlepage.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/component.titlepage.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/component.titlepage.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/component.titlepage.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/contrib.inline.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/contrib.inline.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/contrib.inline.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/contrib.inline.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.bleed.xml b/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.bleed.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.bleed.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.bleed.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.offset.xml b/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.offset.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.offset.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.offset.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/crop.mark.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.marks.xml b/core/tools/docbook-xsl-ns-1.76.1/params/crop.marks.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/crop.marks.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/crop.marks.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.decoration.xml b/core/tools/docbook-xsl-ns-1.76.1/params/css.decoration.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.decoration.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/css.decoration.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.xml b/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/css.stylesheet.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/current.docid.xml b/core/tools/docbook-xsl-ns-1.76.1/params/current.docid.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/current.docid.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/current.docid.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/currentpage.marker.xml b/core/tools/docbook-xsl-ns-1.76.1/params/currentpage.marker.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/currentpage.marker.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/currentpage.marker.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/custom.css.source.xml b/core/tools/docbook-xsl-ns-1.76.1/params/custom.css.source.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/custom.css.source.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/custom.css.source.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.float.class.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.float.class.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.float.class.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.float.class.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.image.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.image.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.image.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.image.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.frame.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.table.frame.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.frame.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.table.frame.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.rules.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.table.rules.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.rules.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.table.rules.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.table.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.table.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.table.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.units.xml b/core/tools/docbook-xsl-ns-1.76.1/params/default.units.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/default.units.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/default.units.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dingbat.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/dingbat.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dingbat.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/dingbat.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.source.xml b/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.source.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.source.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/docbook.css.source.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/double.sided.xml b/core/tools/docbook-xsl-ns-1.76.1/params/double.sided.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/double.sided.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/double.sided.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/draft.mode.xml b/core/tools/docbook-xsl-ns-1.76.1/params/draft.mode.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/draft.mode.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/draft.mode.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/draft.watermark.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/draft.watermark.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/draft.watermark.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/draft.watermark.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dry-run.xml b/core/tools/docbook-xsl-ns-1.76.1/params/dry-run.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dry-run.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/dry-run.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dynamic.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/dynamic.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/dynamic.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/dynamic.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.assignment.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.assignment.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.assignment.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ebnf.assignment.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.statement.terminator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.statement.terminator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.statement.terminator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ebnf.statement.terminator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.bgcolor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.bgcolor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.bgcolor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.bgcolor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.border.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.border.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.border.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ebnf.table.border.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/eclipse.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.id.xml b/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.id.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.id.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.id.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.name.xml b/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.name.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.name.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.name.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.provider.xml b/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.provider.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.provider.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/eclipse.plugin.provider.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/editedby.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/editedby.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/editedby.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/editedby.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/email.delimiters.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/email.delimiters.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/email.delimiters.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/email.delimiters.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/email.mailto.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/email.mailto.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/email.mailto.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/email.mailto.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/emphasis.propagates.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/emphasis.propagates.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/emphasis.propagates.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/emphasis.propagates.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/entry.propagates.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/entry.propagates.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/entry.propagates.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/entry.propagates.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/epub.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/epub.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/epub.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/epub.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/equation.number.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/equation.number.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/equation.number.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/equation.number.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/equation.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/equation.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/equation.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/equation.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/example.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/example.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/example.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/example.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/exsl.node.set.available.xml b/core/tools/docbook-xsl-ns-1.76.1/params/exsl.node.set.available.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/exsl.node.set.available.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/exsl.node.set.available.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.href.xml b/core/tools/docbook-xsl-ns-1.76.1/params/feedback.href.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.href.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/feedback.href.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.link.text.xml b/core/tools/docbook-xsl-ns-1.76.1/params/feedback.link.text.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.link.text.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/feedback.link.text.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.with.ids.xml b/core/tools/docbook-xsl-ns-1.76.1/params/feedback.with.ids.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/feedback.with.ids.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/feedback.with.ids.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/figure.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/figure.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/figure.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/figure.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/filename-prefix.xml b/core/tools/docbook-xsl-ns-1.76.1/params/filename-prefix.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/filename-prefix.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/filename-prefix.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/firstterm.only.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/firstterm.only.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/firstterm.only.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/firstterm.only.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foil.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foil.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.subtitle.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foil.subtitle.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.subtitle.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foil.subtitle.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.master.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.master.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.master.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foil.title.master.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.size.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.size.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foil.title.size.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foil.title.size.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/foilgroup.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.column.widths.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.column.widths.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.column.widths.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.column.widths.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.content.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.content.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.content.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.content.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.hr.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.hr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.hr.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.hr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.rule.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.rule.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.rule.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.rule.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.table.height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footer.table.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footer.table.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footers.on.blank.pages.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footers.on.blank.pages.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footers.on.blank.pages.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footers.on.blank.pages.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.font.size.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.font.size.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.font.size.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.font.size.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.mark.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.mark.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.mark.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.mark.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.format.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.format.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.format.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.format.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.symbols.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.symbols.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.symbols.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.number.symbols.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.sep.leader.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/footnote.sep.leader.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/footnote.sep.leader.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/footnote.sep.leader.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/fop.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/fop.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/fop.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/fop.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/fop1.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/fop1.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/fop1.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/fop1.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.object.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/formal.object.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.object.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/formal.object.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.procedures.xml b/core/tools/docbook-xsl-ns-1.76.1/params/formal.procedures.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.procedures.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/formal.procedures.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.placement.xml b/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.placement.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.placement.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/formal.title.placement.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/formal.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/formal.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.decoration.xml b/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.decoration.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.decoration.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.decoration.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/funcsynopsis.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/function.parens.xml b/core/tools/docbook-xsl-ns-1.76.1/params/function.parens.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/function.parens.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/function.parens.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.css.header.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.css.header.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.css.header.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.css.header.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.id.attributes.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.id.attributes.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.id.attributes.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.id.attributes.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.index.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.index.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.index.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.index.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.legalnotice.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.legalnotice.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.legalnotice.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.legalnotice.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.manifest.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.manifest.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.manifest.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.manifest.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.meta.abstract.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.meta.abstract.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.meta.abstract.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.meta.abstract.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.revhistory.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.revhistory.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.revhistory.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.revhistory.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.section.toc.level.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.section.toc.level.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.section.toc.level.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.section.toc.level.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/generate.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/generate.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/generate.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.as.blocks.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossary.as.blocks.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.as.blocks.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossary.as.blocks.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.collection.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossary.collection.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.collection.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossary.collection.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.sort.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossary.sort.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossary.sort.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossary.sort.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.block.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.block.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.block.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossdef.block.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.list.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.list.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossdef.list.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossdef.list.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.list.item.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.list.item.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.list.item.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossentry.list.item.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.show.acronym.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.show.acronym.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossentry.show.acronym.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossentry.show.acronym.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glosslist.as.blocks.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glosslist.as.blocks.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glosslist.as.blocks.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glosslist.as.blocks.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.auto.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.auto.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.auto.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossterm.auto.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.block.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.block.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.block.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossterm.block.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.list.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.list.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.list.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossterm.list.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.separation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.separation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.separation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossterm.separation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/glossterm.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/glossterm.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphic.default.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/graphic.default.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphic.default.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/graphic.default.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphical.admonition.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/graphical.admonition.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphical.admonition.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/graphical.admonition.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphics.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/graphics.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphics.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/graphics.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.use.img.src.path.xml b/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.use.img.src.path.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.use.img.src.path.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/graphicsize.use.img.src.path.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.column.widths.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.column.widths.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.column.widths.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.column.widths.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.content.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.content.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.content.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.content.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.hr.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.hr.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.hr.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.hr.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.rule.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.rule.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.rule.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.rule.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.table.height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.table.height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.table.height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.table.height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.table.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/header.table.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/header.table.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/header.table.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/headers.on.blank.pages.xml b/core/tools/docbook-xsl-ns-1.76.1/params/headers.on.blank.pages.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/headers.on.blank.pages.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/headers.on.blank.pages.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hidetoc.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/hidetoc.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hidetoc.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/hidetoc.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.default.language.xml b/core/tools/docbook-xsl-ns-1.76.1/params/highlight.default.language.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.default.language.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/highlight.default.language.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.source.xml b/core/tools/docbook-xsl-ns-1.76.1/params/highlight.source.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.source.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/highlight.source.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.xslthl.config.xml b/core/tools/docbook-xsl-ns-1.76.1/params/highlight.xslthl.config.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/highlight.xslthl.config.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/highlight.xslthl.config.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/home.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/home.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/home.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/home.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.append.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.append.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.append.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.append.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.base.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.base.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.base.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.base.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cellpadding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.cellpadding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cellpadding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.cellpadding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cellspacing.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.cellspacing.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cellspacing.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.cellspacing.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cleanup.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.cleanup.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.cleanup.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.cleanup.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.ext.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.ext.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.ext.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.ext.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.extra.head.links.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.extra.head.links.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.extra.head.links.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.extra.head.links.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.multiple.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.multiple.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.multiple.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.multiple.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.types.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.types.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.types.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.head.legalnotice.link.types.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.link.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.link.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.link.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.link.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.longdesc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.xml b/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/html.stylesheet.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.alias.file.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.alias.file.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.alias.file.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.alias.file.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.back.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.back.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.back.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.back.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.forward.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.forward.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.forward.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.forward.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.hideshow.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.hideshow.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.hideshow.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.hideshow.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.url.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.url.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.url.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.url.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.home.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.url.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.url.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.url.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.url.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump1.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.url.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.url.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.url.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.url.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.jump2.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.locate.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.locate.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.locate.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.locate.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.next.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.next.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.next.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.next.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.options.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.options.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.options.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.options.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.prev.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.prev.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.prev.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.prev.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.print.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.print.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.print.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.print.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.refresh.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.refresh.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.refresh.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.refresh.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.stop.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.stop.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.stop.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.stop.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.zoom.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.zoom.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.zoom.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.button.zoom.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.chm.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.chm.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.chm.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.chm.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.default.topic.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.default.topic.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.default.topic.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.default.topic.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.display.progress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.display.progress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.display.progress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.display.progress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.encoding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.encoding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.encoding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.encoding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enhanced.decompilation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enhanced.decompilation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enhanced.decompilation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enhanced.decompilation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enumerate.images.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enumerate.images.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enumerate.images.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.enumerate.images.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.force.map.and.alias.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.force.map.and.alias.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.force.map.and.alias.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.force.map.and.alias.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.binary.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.binary.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.binary.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.binary.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.folders.instead.books.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.folders.instead.books.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.folders.instead.books.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.folders.instead.books.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.section.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.section.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.section.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.section.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.show.root.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.show.root.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.show.root.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.show.root.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhk.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhk.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhk.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhk.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.tail.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.tail.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.tail.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.tail.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.window.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.window.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.window.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.window.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.windows.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.windows.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.windows.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.windows.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.hhp.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.map.file.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.map.file.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.map.file.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.map.file.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.only.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.only.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.only.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.only.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.remember.window.position.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.remember.window.position.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.remember.window.position.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.remember.window.position.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.advanced.search.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.advanced.search.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.advanced.search.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.advanced.search.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.favorities.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.favorities.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.favorities.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.favorities.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.menu.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.menu.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.menu.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.menu.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.toolbar.text.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.toolbar.text.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.toolbar.text.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.show.toolbar.text.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.use.hhk.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.use.hhk.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.use.hhk.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.use.hhk.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.window.geometry.xml b/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.window.geometry.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.window.geometry.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/htmlhelp.window.geometry.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.characters.xml b/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.characters.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.characters.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.characters.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.xml b/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.verbatim.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.xml b/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/hyphenate.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/id.warnings.xml b/core/tools/docbook-xsl-ns-1.76.1/params/id.warnings.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/id.warnings.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/id.warnings.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ignore.image.scaling.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ignore.image.scaling.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ignore.image.scaling.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ignore.image.scaling.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/img.src.path.xml b/core/tools/docbook-xsl-ns-1.76.1/params/img.src.path.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/img.src.path.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/img.src.path.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.div.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.div.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.div.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.div.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.entry.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.entry.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.entry.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.entry.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html b/core/tools/docbook-xsl-ns-1.76.1/params/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/params/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.links.to.section.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.links.to.section.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.links.to.section.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.links.to.section.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.method.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.method.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.method.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.method.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.number.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.number.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.number.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.number.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.on.role.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.on.role.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.on.role.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.on.role.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.on.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.on.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.on.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.on.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.page.number.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.page.number.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.page.number.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.page.number.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.prefer.titleabbrev.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.prefer.titleabbrev.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.prefer.titleabbrev.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.prefer.titleabbrev.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.preferred.page.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.preferred.page.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.preferred.page.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.preferred.page.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.range.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.range.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.range.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.range.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.term.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/index.term.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/index.term.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/index.term.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informal.object.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/informal.object.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informal.object.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/informal.object.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalequation.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/informalequation.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalequation.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/informalequation.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalexample.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/informalexample.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalexample.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/informalexample.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalfigure.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/informalfigure.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informalfigure.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/informalfigure.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informaltable.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/informaltable.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/informaltable.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/informaltable.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/inherit.keywords.xml b/core/tools/docbook-xsl-ns-1.76.1/params/inherit.keywords.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/inherit.keywords.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/inherit.keywords.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.link.page.number.xml b/core/tools/docbook-xsl-ns-1.76.1/params/insert.link.page.number.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.link.page.number.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/insert.link.page.number.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.page.number.xml b/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.page.number.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.page.number.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.page.number.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.pdf.frag.xml b/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.pdf.frag.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.pdf.frag.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/insert.olink.pdf.frag.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.xref.page.number.xml b/core/tools/docbook-xsl-ns-1.76.1/params/insert.xref.page.number.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/insert.xref.page.number.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/insert.xref.page.number.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.label.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/itemizedlist.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/javahelp.encoding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/javahelp.encoding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/javahelp.encoding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/javahelp.encoding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/keep.relative.image.uris.xml b/core/tools/docbook-xsl-ns-1.76.1/params/keep.relative.image.uris.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/keep.relative.image.uris.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/keep.relative.image.uris.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/keyboard.nav.xml b/core/tools/docbook-xsl-ns-1.76.1/params/keyboard.nav.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/keyboard.nav.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/keyboard.nav.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.default.language.xml b/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.default.language.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.default.language.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.default.language.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.language.xml b/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.language.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.language.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.language.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.use.xref.language.xml b/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.use.xref.language.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.use.xref.language.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/l10n.gentext.use.xref.language.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.lang.value.rfc.compliant.xml b/core/tools/docbook-xsl-ns-1.76.1/params/l10n.lang.value.rfc.compliant.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/l10n.lang.value.rfc.compliant.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/l10n.lang.value.rfc.compliant.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/label.from.part.xml b/core/tools/docbook-xsl-ns-1.76.1/params/label.from.part.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/label.from.part.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/label.from.part.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/line-height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/line-height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/line-height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/line-height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.everyNth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.everyNth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.everyNth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.everyNth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/linenumbering.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/link.mailto.url.xml b/core/tools/docbook-xsl-ns-1.76.1/params/link.mailto.url.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/link.mailto.url.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/link.mailto.url.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.block.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/list.block.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.block.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/list.block.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.block.spacing.xml b/core/tools/docbook-xsl-ns-1.76.1/params/list.block.spacing.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.block.spacing.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/list.block.spacing.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.item.spacing.xml b/core/tools/docbook-xsl-ns-1.76.1/params/list.item.spacing.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/list.item.spacing.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/list.item.spacing.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.clean.html.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.clean.html.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.clean.html.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.clean.html.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.graphic.viewport.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.graphic.viewport.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.graphic.viewport.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.graphic.viewport.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.index.markup.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.index.markup.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.index.markup.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.index.markup.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.single.year.ranges.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.single.year.ranges.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.single.year.ranges.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.single.year.ranges.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.valid.html.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.valid.html.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.valid.html.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.valid.html.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.year.ranges.xml b/core/tools/docbook-xsl-ns-1.76.1/params/make.year.ranges.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/make.year.ranges.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/make.year.ranges.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.authors.section.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.authors.section.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.authors.section.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.authors.section.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.base.url.for.relative.links.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.base.url.for.relative.links.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.base.url.for.relative.links.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.base.url.for.relative.links.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.break.after.slash.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.break.after.slash.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.break.after.slash.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.break.after.slash.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.english.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.english.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.english.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.english.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.subset.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.uri.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.uri.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.uri.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.uri.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.use.subset.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.use.subset.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.use.subset.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.charmap.use.subset.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.copyright.section.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.copyright.section.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.copyright.section.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.copyright.section.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.are.numbered.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.are.numbered.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.are.numbered.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.are.numbered.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.heading.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.heading.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.heading.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.endnotes.list.heading.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcprototype.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcprototype.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcprototype.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcprototype.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcsynopsisinfo.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcsynopsisinfo.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcsynopsisinfo.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.font.funcsynopsisinfo.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.links.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.font.links.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.links.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.font.links.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.headings.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.headings.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.headings.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.headings.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.font.table.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.funcsynopsis.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.funcsynopsis.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.funcsynopsis.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.funcsynopsis.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.computer.inlines.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.computer.inlines.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.computer.inlines.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.computer.inlines.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.filenames.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.filenames.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.filenames.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.filenames.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.urls.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.urls.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.urls.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.urls.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.hyphenate.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.blurbs.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.blurbs.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.blurbs.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.indent.blurbs.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.lists.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.lists.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.lists.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.indent.lists.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.refsect.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.refsect.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.refsect.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.indent.refsect.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.verbatims.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.verbatims.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.verbatims.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.indent.verbatims.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.indent.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.indent.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.justify.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.justify.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.justify.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.justify.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.base.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.base.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.base.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.base.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.better.ps.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.better.ps.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.better.ps.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.better.ps.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.encoding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.encoding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.encoding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.encoding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.in.separate.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.in.separate.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.in.separate.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.in.separate.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.lang.in.name.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.lang.in.name.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.lang.in.name.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.lang.in.name.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.filename.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.filename.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.filename.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.manifest.filename.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.quietly.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.quietly.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.quietly.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.quietly.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.subdirs.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.output.subdirs.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.output.subdirs.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.output.subdirs.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.segtitle.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.segtitle.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.segtitle.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.segtitle.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.post.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.post.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.post.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.post.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.pre.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.pre.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.pre.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.local.pre.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.string.subst.map.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.subheading.divider.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.table.footnotes.divider.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.table.footnotes.divider.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.table.footnotes.divider.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.table.footnotes.divider.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra1.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra1.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra1.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra1.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.max.length.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.max.length.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.max.length.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.max.length.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra2.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.max.length.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.max.length.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.max.length.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.max.length.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.extra3.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.title.max.length.xml b/core/tools/docbook-xsl-ns-1.76.1/params/man.th.title.max.length.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/man.th.title.max.length.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/man.th.title.max.length.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manifest.in.base.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/manifest.in.base.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manifest.in.base.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/manifest.in.base.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manifest.xml b/core/tools/docbook-xsl-ns-1.76.1/params/manifest.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manifest.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/manifest.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manual.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/manual.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/manual.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/manual.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.float.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.float.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.float.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/margin.note.float.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/margin.note.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/margin.note.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/margin.note.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/margin.note.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/marker.section.level.xml b/core/tools/docbook-xsl-ns-1.76.1/params/marker.section.level.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/marker.section.level.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/marker.section.level.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.menu.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.menu.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.menu.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.menu.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/menuchoice.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/minus.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/minus.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/minus.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/minus.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/monospace.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/monospace.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/monospace.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/monospace.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.font.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.font.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.font.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.font.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/monospace.verbatim.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.bottom.bgcolor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.bottom.bgcolor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.bottom.bgcolor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/multiframe.bottom.bgcolor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.navigation.height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.navigation.height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.navigation.height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/multiframe.navigation.height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.top.bgcolor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.top.bgcolor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.top.bgcolor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/multiframe.top.bgcolor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.xml b/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/multiframe.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/multiframe.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nav.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nav.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nav.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nav.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nav.table.summary.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nav.table.summary.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nav.table.summary.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nav.table.summary.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navbgcolor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navbgcolor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navbgcolor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navbgcolor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navbodywidth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navbodywidth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navbodywidth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navbodywidth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.path.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.path.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.path.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.path.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navig.graphics.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.showtitles.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navig.showtitles.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navig.showtitles.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navig.showtitles.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navtocwidth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/navtocwidth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/navtocwidth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/navtocwidth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/next.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/next.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/next.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/next.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.home.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/no.home.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.home.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/no.home.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.next.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/no.next.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.next.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/no.next.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.prev.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/no.prev.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.prev.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/no.prev.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.toc.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/no.toc.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.toc.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/no.toc.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.up.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/no.up.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/no.up.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/no.up.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nominal.image.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.table.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nominal.table.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nominal.table.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nominal.table.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nongraphical.admonition.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/nongraphical.admonition.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/nongraphical.admonition.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/nongraphical.admonition.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/normal.para.spacing.xml b/core/tools/docbook-xsl-ns-1.76.1/params/normal.para.spacing.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/normal.para.spacing.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/normal.para.spacing.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.base.uri.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.base.uri.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.base.uri.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.base.uri.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.debug.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.debug.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.debug.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.debug.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.doctitle.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.doctitle.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.doctitle.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.doctitle.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.fragid.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.fragid.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.fragid.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.fragid.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.lang.fallback.sequence.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.lang.fallback.sequence.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.lang.fallback.sequence.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.lang.fallback.sequence.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.outline.ext.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.outline.ext.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.outline.ext.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.outline.ext.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.pubid.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.pubid.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.pubid.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.pubid.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.resolver.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.resolver.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.resolver.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.resolver.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.sysid.xml b/core/tools/docbook-xsl-ns-1.76.1/params/olink.sysid.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/olink.sysid.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/olink.sysid.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.label.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/orderedlist.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/othercredit.like.author.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/othercredit.like.author.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/othercredit.like.author.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/othercredit.like.author.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/output-root.xml b/core/tools/docbook-xsl-ns-1.76.1/params/output-root.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/output-root.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/output-root.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/output.indent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/output.indent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/output.indent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/output.indent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/overlay.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/overlay.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.logo.xml b/core/tools/docbook-xsl-ns-1.76.1/params/overlay.logo.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.logo.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/overlay.logo.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.xml b/core/tools/docbook-xsl-ns-1.76.1/params/overlay.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/overlay.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/overlay.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.height.portrait.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.height.portrait.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.height.portrait.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.height.portrait.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.bottom.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.bottom.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.bottom.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.margin.bottom.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.inner.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.inner.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.inner.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.margin.inner.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.outer.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.outer.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.outer.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.margin.outer.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.top.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.top.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.margin.top.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.margin.top.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.orientation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.orientation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.orientation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.orientation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.width.portrait.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.width.portrait.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.width.portrait.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.width.portrait.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/page.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/page.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/page.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pages.template.xml b/core/tools/docbook-xsl-ns-1.76.1/params/pages.template.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pages.template.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/pages.template.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/paper.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/paper.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/paper.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/paper.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/para.propagates.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/para.propagates.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/para.propagates.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/para.propagates.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/part.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/part.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/part.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/part.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/passivetex.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/passivetex.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/passivetex.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/passivetex.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pgwide.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/pgwide.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pgwide.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/pgwide.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/phrase.propagates.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/phrase.propagates.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/phrase.propagates.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/phrase.propagates.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pixels.per.inch.xml b/core/tools/docbook-xsl-ns-1.76.1/params/pixels.per.inch.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/pixels.per.inch.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/pixels.per.inch.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/plus.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/plus.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/plus.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/plus.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/points.per.em.xml b/core/tools/docbook-xsl-ns-1.76.1/params/points.per.em.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/points.per.em.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/points.per.em.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/preface.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/preface.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/preface.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/preface.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/prefer.internal.olink.xml b/core/tools/docbook-xsl-ns-1.76.1/params/prefer.internal.olink.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/prefer.internal.olink.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/prefer.internal.olink.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/preferred.mediaobject.role.xml b/core/tools/docbook-xsl-ns-1.76.1/params/preferred.mediaobject.role.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/preferred.mediaobject.role.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/preferred.mediaobject.role.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/prev.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/prev.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/prev.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/prev.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/procedure.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/procedure.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/procedure.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/procedure.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/process.empty.source.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/process.empty.source.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/process.empty.source.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/process.empty.source.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/process.source.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/process.source.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/process.source.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/process.source.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.arch.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.arch.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.arch.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.arch.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.attribute.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.attribute.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.attribute.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.attribute.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.audience.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.audience.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.audience.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.audience.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.condition.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.condition.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.condition.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.condition.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.conformance.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.conformance.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.conformance.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.conformance.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.lang.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.lang.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.lang.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.lang.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.os.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.os.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.os.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.os.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.revision.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.revision.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.revision.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.revision.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.revisionflag.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.revisionflag.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.revisionflag.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.revisionflag.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.role.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.role.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.role.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.role.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.security.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.security.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.security.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.security.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.status.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.status.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.status.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.status.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.userlevel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.userlevel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.userlevel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.userlevel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.value.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.value.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.value.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.value.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.vendor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.vendor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.vendor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.vendor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.wordsize.xml b/core/tools/docbook-xsl-ns-1.76.1/params/profile.wordsize.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/profile.wordsize.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/profile.wordsize.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/punct.honorific.xml b/core/tools/docbook-xsl-ns-1.76.1/params/punct.honorific.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/punct.honorific.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/punct.honorific.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.defaultlabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.defaultlabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.defaultlabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.defaultlabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.in.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.in.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.in.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.in.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.inherit.numeration.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.inherit.numeration.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.inherit.numeration.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.inherit.numeration.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.nested.in.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.nested.in.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.nested.in.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.nested.in.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level1.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level1.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level1.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level1.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level2.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level2.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level2.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level2.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level3.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level3.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level3.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level3.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level4.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level4.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level4.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level4.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level5.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level5.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level5.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level5.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level6.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level6.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level6.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.level6.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qanda.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qandadiv.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/qandadiv.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/qandadiv.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/qandadiv.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/rebuild-all.xml b/core/tools/docbook-xsl-ns-1.76.1/params/rebuild-all.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/rebuild-all.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/rebuild-all.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refclass.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refclass.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refclass.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refclass.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.date.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.name.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.name.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.name.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.name.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.generate.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.fallback.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.fallback.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.fallback.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.fallback.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.manual.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.meta.get.quietly.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.meta.get.quietly.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.meta.get.quietly.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.meta.get.quietly.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.pagebreak.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.pagebreak.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.pagebreak.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.pagebreak.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.fallback.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.fallback.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.fallback.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.fallback.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.source.name.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.enabled.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.enabled.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.enabled.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.enabled.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.profile.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.suppress.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.suppress.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.suppress.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.version.suppress.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.xref.manvolnum.xml b/core/tools/docbook-xsl-ns-1.76.1/params/refentry.xref.manvolnum.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/refentry.xref.manvolnum.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/refentry.xref.manvolnum.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/reference.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/reference.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/reference.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/reference.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/region.after.extent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/region.after.extent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/region.after.extent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/region.after.extent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/region.before.extent.xml b/core/tools/docbook-xsl-ns-1.76.1/params/region.before.extent.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/region.before.extent.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/region.before.extent.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.cell.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.cell.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.cell.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.cell.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/revhistory.table.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/revhistory.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/revhistory.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/root.filename.xml b/core/tools/docbook-xsl-ns-1.76.1/params/root.filename.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/root.filename.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/root.filename.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/root.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/root.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/root.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/root.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/rootid.xml b/core/tools/docbook-xsl-ns-1.76.1/params/rootid.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/rootid.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/rootid.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.default.title.end.punct.xml b/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.default.title.end.punct.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.default.title.end.punct.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/runinhead.default.title.end.punct.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.title.end.punct.xml b/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.title.end.punct.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/runinhead.title.end.punct.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/runinhead.title.end.punct.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/running.foot.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/running.foot.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/running.foot.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/running.foot.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sans.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sans.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sans.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sans.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.callouts.xml b/core/tools/docbook-xsl-ns-1.76.1/params/saxon.callouts.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.callouts.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/saxon.callouts.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.character.representation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/saxon.character.representation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.character.representation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/saxon.character.representation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.linenumbering.xml b/core/tools/docbook-xsl-ns-1.76.1/params/saxon.linenumbering.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.linenumbering.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/saxon.linenumbering.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.tablecolumns.xml b/core/tools/docbook-xsl-ns-1.76.1/params/saxon.tablecolumns.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/saxon.tablecolumns.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/saxon.tablecolumns.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/script.dir.xml b/core/tools/docbook-xsl-ns-1.76.1/params/script.dir.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/script.dir.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/script.dir.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.max.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.max.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.max.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.max.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.autolabel.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.container.element.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.container.element.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.container.element.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.container.element.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.label.includes.component.label.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.label.includes.component.label.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.label.includes.component.label.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.label.includes.component.label.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level1.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level1.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level1.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level1.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level2.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level2.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level2.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level2.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level3.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level3.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level3.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level3.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level4.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level4.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level4.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level4.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level5.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level5.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level5.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level5.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level6.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.level6.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.level6.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.level6.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level1.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level1.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level1.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level1.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level2.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level2.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level2.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level2.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level3.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level3.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level3.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level3.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level4.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level4.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level4.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level4.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level5.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level5.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level5.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level5.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level6.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level6.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.level6.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.level6.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/section.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/section.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/section.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/segmentedlist.as.table.xml b/core/tools/docbook-xsl-ns-1.76.1/params/segmentedlist.as.table.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/segmentedlist.as.table.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/segmentedlist.as.table.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sequential.links.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sequential.links.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sequential.links.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sequential.links.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.xml b/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/shade.verbatim.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.comments.xml b/core/tools/docbook-xsl-ns-1.76.1/params/show.comments.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.comments.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/show.comments.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.foil.number.xml b/core/tools/docbook-xsl-ns-1.76.1/params/show.foil.number.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.foil.number.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/show.foil.number.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.revisionflag.xml b/core/tools/docbook-xsl-ns-1.76.1/params/show.revisionflag.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/show.revisionflag.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/show.revisionflag.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/showtoc.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/showtoc.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/showtoc.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/showtoc.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/side.float.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/side.float.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/side.float.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/side.float.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sidebar.float.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sidebar.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.title.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.title.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/sidebar.title.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/sidebar.title.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/simplesect.in.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/simplesect.in.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/simplesect.in.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/simplesect.in.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slide.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/slide.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slide.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/slide.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slide.title.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/slide.title.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slide.title.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/slide.title.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slides.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/slides.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slides.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/slides.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slides.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/slides.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/slides.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/slides.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/spacing.paras.xml b/core/tools/docbook-xsl-ns-1.76.1/params/spacing.paras.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/spacing.paras.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/spacing.paras.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/speakernote.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/speakernote.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/speakernote.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/speakernote.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/subscript.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/subscript.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/subscript.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/subscript.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/superscript.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/superscript.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/superscript.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/superscript.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.footer.navigation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/suppress.footer.navigation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.footer.navigation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/suppress.footer.navigation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.header.navigation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/suppress.header.navigation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.header.navigation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/suppress.header.navigation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.homepage.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/suppress.homepage.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.homepage.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/suppress.homepage.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.navigation.xml b/core/tools/docbook-xsl-ns-1.76.1/params/suppress.navigation.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/suppress.navigation.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/suppress.navigation.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/symbol.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/symbol.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/symbol.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/symbol.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.borders.with.css.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.borders.with.css.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.borders.with.css.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.borders.with.css.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.color.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.color.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.color.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.color.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.thickness.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.thickness.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.thickness.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.cell.border.thickness.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.padding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.padding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.cell.padding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.cell.padding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.entry.padding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.entry.padding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.entry.padding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.entry.padding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.format.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.format.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.format.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.format.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.symbols.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.symbols.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.symbols.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.number.symbols.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.footnote.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.color.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.color.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.color.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.color.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.thickness.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.thickness.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.thickness.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.frame.border.thickness.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.spacer.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.spacer.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.spacer.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.spacer.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.table.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/table.table.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/table.table.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/table.table.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tablecolumns.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/tablecolumns.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tablecolumns.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/tablecolumns.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/target.database.document.xml b/core/tools/docbook-xsl-ns-1.76.1/params/target.database.document.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/target.database.document.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/target.database.document.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/targets.filename.xml b/core/tools/docbook-xsl-ns-1.76.1/params/targets.filename.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/targets.filename.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/targets.filename.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/template.xml b/core/tools/docbook-xsl-ns-1.76.1/params/template.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/template.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/template.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.delims.xml b/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.delims.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.delims.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/tex.math.delims.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.file.xml b/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.file.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.file.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/tex.math.file.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.in.alt.xml b/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.in.alt.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/tex.math.in.alt.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/tex.math.in.alt.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.home.xml b/core/tools/docbook-xsl-ns-1.76.1/params/text.home.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.home.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/text.home.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.next.xml b/core/tools/docbook-xsl-ns-1.76.1/params/text.next.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.next.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/text.next.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.prev.xml b/core/tools/docbook-xsl-ns-1.76.1/params/text.prev.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.prev.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/text.prev.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.toc.xml b/core/tools/docbook-xsl-ns-1.76.1/params/text.toc.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.toc.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/text.toc.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.up.xml b/core/tools/docbook-xsl-ns-1.76.1/params/text.up.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/text.up.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/text.up.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textbgcolor.xml b/core/tools/docbook-xsl-ns-1.76.1/params/textbgcolor.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textbgcolor.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/textbgcolor.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textdata.default.encoding.xml b/core/tools/docbook-xsl-ns-1.76.1/params/textdata.default.encoding.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textdata.default.encoding.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/textdata.default.encoding.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textinsert.extension.xml b/core/tools/docbook-xsl-ns-1.76.1/params/textinsert.extension.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/textinsert.extension.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/textinsert.extension.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/title.font.family.xml b/core/tools/docbook-xsl-ns-1.76.1/params/title.font.family.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/title.font.family.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/title.font.family.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/title.margin.left.xml b/core/tools/docbook-xsl-ns-1.76.1/params/title.margin.left.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/title.margin.left.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/title.margin.left.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/titlefoil.html.xml b/core/tools/docbook-xsl-ns-1.76.1/params/titlefoil.html.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/titlefoil.html.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/titlefoil.html.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.bg.color.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.bg.color.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.bg.color.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.bg.color.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.graphic.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.graphic.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.graphic.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.graphic.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.text.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.text.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.text.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.blank.text.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.hide.show.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.hide.show.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.hide.show.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.hide.show.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.html.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.html.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.html.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.html.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.indent.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.indent.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.indent.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.indent.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.line.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.line.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.line.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.line.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.list.type.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.list.type.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.list.type.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.list.type.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.margin.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.margin.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.margin.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.margin.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.max.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.max.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.max.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.max.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.graphic.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.graphic.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.graphic.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.graphic.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.text.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.text.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.text.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.pointer.text.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.row.height.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.row.height.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.row.height.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.row.height.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.section.depth.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.section.depth.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.section.depth.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.section.depth.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.graphic.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.graphic.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.graphic.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.graphic.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.text.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.text.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.text.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.spacer.text.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.width.xml b/core/tools/docbook-xsl-ns-1.76.1/params/toc.width.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/toc.width.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/toc.width.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ua.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ua.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ua.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ua.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.footnotes.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ulink.footnotes.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.footnotes.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ulink.footnotes.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.chars.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.chars.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.chars.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.chars.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ulink.hyphenate.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.show.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ulink.show.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.show.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ulink.show.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.target.xml b/core/tools/docbook-xsl-ns-1.76.1/params/ulink.target.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/ulink.target.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/ulink.target.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/up.image.xml b/core/tools/docbook-xsl-ns-1.76.1/params/up.image.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/up.image.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/up.image.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.embed.for.svg.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.embed.for.svg.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.embed.for.svg.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.embed.for.svg.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.id.as.filename.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.id.as.filename.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.id.as.filename.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.id.as.filename.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.id.function.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.id.function.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.id.function.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.id.function.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.local.olink.style.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.local.olink.style.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.local.olink.style.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.local.olink.style.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.role.as.xrefstyle.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.role.as.xrefstyle.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.role.as.xrefstyle.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.role.as.xrefstyle.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.role.for.mediaobject.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.role.for.mediaobject.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.role.for.mediaobject.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.role.for.mediaobject.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.svg.xml b/core/tools/docbook-xsl-ns-1.76.1/params/use.svg.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/use.svg.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/use.svg.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.blocks.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.blocks.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.blocks.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.blocks.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.table.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.table.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.table.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.as.table.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.max.termlength.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.max.termlength.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.max.termlength.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.max.termlength.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.break.after.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.break.after.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.break.after.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.break.after.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/variablelist.term.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/verbatim.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/verbatim.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/verbatim.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/verbatim.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/wordml.template.xml b/core/tools/docbook-xsl-ns-1.76.1/params/wordml.template.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/wordml.template.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/wordml.template.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/writing.mode.xml b/core/tools/docbook-xsl-ns-1.76.1/params/writing.mode.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/writing.mode.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/writing.mode.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbCollapsibleLists.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xbCollapsibleLists.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbCollapsibleLists.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xbCollapsibleLists.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbDOM.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xbDOM.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbDOM.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xbDOM.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbLibrary.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xbLibrary.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbLibrary.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xbLibrary.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbStyle.js.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xbStyle.js.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xbStyle.js.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xbStyle.js.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xep.extensions.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xep.extensions.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xep.extensions.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xep.extensions.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xep.index.item.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xep.index.item.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xep.index.item.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xep.index.item.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-page.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-page.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-page.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xref.label-page.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-title.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-title.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.label-title.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xref.label-title.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.properties.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xref.properties.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.properties.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xref.properties.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.title-page.separator.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xref.title-page.separator.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.title-page.separator.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xref.title-page.separator.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.with.number.and.title.xml b/core/tools/docbook-xsl-ns-1.76.1/params/xref.with.number.and.title.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/params/xref.with.number.and.title.xml rename to core/tools/docbook-xsl-ns-1.76.1/params/xref.with.number.and.title.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/profiling/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/profile-mode.xsl b/core/tools/docbook-xsl-ns-1.76.1/profiling/profile-mode.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/profile-mode.xsl rename to core/tools/docbook-xsl-ns-1.76.1/profiling/profile-mode.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/profile.xsl b/core/tools/docbook-xsl-ns-1.76.1/profiling/profile.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/profile.xsl rename to core/tools/docbook-xsl-ns-1.76.1/profiling/profile.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/strip-attributes.xsl b/core/tools/docbook-xsl-ns-1.76.1/profiling/strip-attributes.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/strip-attributes.xsl rename to core/tools/docbook-xsl-ns-1.76.1/profiling/strip-attributes.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/xsl2profile.xsl b/core/tools/docbook-xsl-ns-1.76.1/profiling/xsl2profile.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/profiling/xsl2profile.xsl rename to core/tools/docbook-xsl-ns-1.76.1/profiling/xsl2profile.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks-spec.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks-spec.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks-spec.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks-spec.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.dtd b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.dtd similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.dtd rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.dtd diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/blocks2dbk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2ooo.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2ooo.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2ooo.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2ooo.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2pages.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2pages.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2pages.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2pages.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wordml.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wordml.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wordml.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wordml.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wp.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/dbk2wp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise2sections.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise2sections.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise2sections.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/normalise2sections.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/pages2normalise.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/pages2normalise.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/pages2normalise.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/pages2normalise.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections-spec.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections-spec.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections-spec.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections-spec.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections2blocks.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections2blocks.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections2blocks.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/sections2blocks.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/specifications.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/specifications.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/specifications.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/specifications.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template-pages.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template-pages.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template-pages.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/template-pages.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.dot b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.dot similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.dot rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.dot diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.xml b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.xml rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/template.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/wordml2normalise.xsl b/core/tools/docbook-xsl-ns-1.76.1/roundtrip/wordml2normalise.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/roundtrip/wordml2normalise.xsl rename to core/tools/docbook-xsl-ns-1.76.1/roundtrip/wordml2normalise.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/CTOCWidget.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/CTOCWidget.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/CTOCWidget.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/CTOCWidget.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/overlay.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/overlay.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/overlay.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/overlay.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-default.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-default.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-default.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-default.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-frames.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-frames.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-frames.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-frames.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-plain.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-plain.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-plain.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-plain.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-table.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-table.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-table.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-table.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-w3c.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-w3c.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-w3c.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides-w3c.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.css b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.css similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.css rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.css diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/slides.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/ua.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/ua.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/ua.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/ua.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbCollapsibleLists.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbCollapsibleLists.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbCollapsibleLists.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbCollapsibleLists.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDOM.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDOM.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDOM.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDOM.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDebug.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDebug.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDebug.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbDebug.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbLibrary.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbLibrary.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbLibrary.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbLibrary.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-css.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-css.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-css.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-css.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-nn4.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-nn4.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-nn4.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-nn4.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-not-supported.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-not-supported.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-not-supported.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle-not-supported.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle.js b/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle.js similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle.js rename to core/tools/docbook-xsl-ns-1.76.1/slides/browser/xbStyle.js diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xml b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xml b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xml rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain-titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/fo/plain.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/active/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/active/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/active/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/active/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/arrow.gif b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/arrow.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/arrow.gif rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/arrow.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.gif b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.gif rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.png b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.png rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/blank.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/hidetoc.gif b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/hidetoc.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/hidetoc.gif rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/hidetoc.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/inactive/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/inactive/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/inactive/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/inactive/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/plus.gif b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/plus.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/plus.gif rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/plus.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/pointer.png b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/pointer.png similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/pointer.png rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/pointer.png diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/showtoc.gif b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/showtoc.gif similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/showtoc.gif rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/showtoc.gif diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/toc/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/toc/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/graphics/toc/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/graphics/toc/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/css.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/css.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/css.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/css.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/default.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/default.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/default.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/default.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/flat.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/flat.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/flat.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/flat.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/frames.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/frames.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/frames.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/frames.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/jscript.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/jscript.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/jscript.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/jscript.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xml b/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/plain.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/plain.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/plain.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/plain.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/slides-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/slides-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/slides-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/slides-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/tables.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/tables.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/tables.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/tables.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/vslides.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/vslides.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/vslides.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/vslides.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/w3c.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/html/w3c.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/html/w3c.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/html/w3c.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/htmlhelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/htmlhelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/htmlhelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/htmlhelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/htmlhelp/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/default.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/default.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/default.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/default.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/xsltsl/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/xsltsl/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/keynote/xsltsl/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/keynote/xsltsl/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/default.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/default.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/default.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/default.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/svg/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/css.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/css.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/css.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/css.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/default.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/default.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/default.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/default.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/flat.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/flat.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/flat.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/flat.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/frames.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/frames.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/frames.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/frames.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/jscript.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/jscript.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/jscript.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/jscript.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/plain.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/plain.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/plain.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/plain.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/slides-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/slides-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/slides-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/slides-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/tables.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/tables.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/tables.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/tables.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/vslides.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/vslides.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/vslides.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/vslides.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/w3c.xsl b/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/w3c.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/w3c.xsl rename to core/tools/docbook-xsl-ns-1.76.1/slides/xhtml/w3c.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html b/core/tools/docbook-xsl-ns-1.76.1/template/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/template/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xml b/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xml rename to core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/template/titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tests/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.ns.xml b/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.ns.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.ns.xml rename to core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.ns.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.xml b/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.xml rename to core/tools/docbook-xsl-ns-1.76.1/tests/refentry.007.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tools/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.DocBook b/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.DocBook similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.DocBook rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.DocBook diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.combine b/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.combine similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.combine rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.combine diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.docParam b/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.docParam similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.docParam rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/Makefile.docParam diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html b/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/tools/make/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/LICENSE b/core/tools/docbook-xsl-ns-1.76.1/webhelp/LICENSE similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/LICENSE rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/LICENSE diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.properties b/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.properties similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.properties rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/build.properties diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.xml b/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/build.xml rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/build.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/content/ch01.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/content/ch01.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/content/ch01.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/content/ch01.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/favicon.ico b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/favicon.ico similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/favicon.ico rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/favicon.ico diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docs/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/readme.xml b/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/readme.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/readme.xml rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/docsrc/readme.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/common/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/common/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/common/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/common/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/content/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/content/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/content/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/content/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/favicon.ico b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/favicon.ico similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/favicon.ico rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/favicon.ico diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/template/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/webhelp.xsl b/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/webhelp.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/webhelp.xsl rename to core/tools/docbook-xsl-ns-1.76.1/webhelp/xsl/webhelp.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/autolayout.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/autolayout.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/autolayout.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/autolayout.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/chunk-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/chunk-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-tabular.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/chunk-tabular.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-tabular.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/chunk-tabular.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-website.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/chunk-website.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/chunk-website.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/chunk-website.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/head.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/head.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/head.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/head.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html b/core/tools/docbook-xsl-ns-1.76.1/website/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/website/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/makefile-dep.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/makefile-dep.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/makefile-dep.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/makefile-dep.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/olink.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/olink.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/olink.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/olink.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/param.xml b/core/tools/docbook-xsl-ns-1.76.1/website/param.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/param.xml rename to core/tools/docbook-xsl-ns-1.76.1/website/param.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/rss.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/rss.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/rss.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/rss.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/tabular.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/tabular.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/tabular.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/tabular.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/toc-tabular.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/toc-tabular.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/toc-tabular.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/toc-tabular.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/toc.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/toc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/toc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/toc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/website-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/website-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website-targets.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/website-targets.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website-targets.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/website-targets.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/website.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/website.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/website.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/xbel.xsl b/core/tools/docbook-xsl-ns-1.76.1/website/xbel.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/website/xbel.xsl rename to core/tools/docbook-xsl-ns-1.76.1/website/xbel.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/admon.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/annotations.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/annotations.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/annotations.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/annotations.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kimber.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kimber.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kimber.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kimber.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kosek.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kosek.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kosek.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-kosek.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-ng.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-ng.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-ng.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx-ng.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autoidx.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autotoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autotoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autotoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/autotoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio-iso690.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio-iso690.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio-iso690.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio-iso690.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/biblio.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/block.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/callout.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/callout.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/callout.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/callout.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunkfast.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunkfast.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunkfast.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunkfast.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunktoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunktoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunktoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/chunktoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/component.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/component.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/component.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/component.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/division.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/division.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/division.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/division.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.css.xml b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.css.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.css.xml rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.css.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/ebnf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/footnote.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/footnote.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/footnote.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/footnote.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/formal.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/formal.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/formal.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/formal.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/glossary.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/glossary.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/glossary.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/glossary.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/highlight.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/highlight.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/highlight.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/highlight.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html-rtf.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html-rtf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html-rtf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html-rtf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/html.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/htmltbl.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/htmltbl.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/htmltbl.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/htmltbl.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/index.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/info.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/inline.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/inline.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/inline.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/inline.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/keywords.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/keywords.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/keywords.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/keywords.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/lists.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/maketoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/maketoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/maketoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/maketoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/manifest.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/manifest.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/manifest.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/manifest.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/math.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/oldchunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/oldchunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/oldchunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/oldchunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/profile-onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/qandaset.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/qandaset.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/qandaset.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/qandaset.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/sections.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/sections.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/sections.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/sections.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/task.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.templates.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.templates.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.templates.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.templates.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/toc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/verbatim.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/verbatim.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/verbatim.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/verbatim.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml-1_1/xref.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/admon.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/admon.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/admon.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/admon.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/annotations.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/annotations.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/annotations.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/annotations.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kimber.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kimber.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kimber.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kimber.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kosek.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kosek.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kosek.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-kosek.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-ng.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-ng.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-ng.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx-ng.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/autoidx.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/autotoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio-iso690.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio-iso690.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio-iso690.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio-iso690.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/biblio.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/block.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/block.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/block.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/block.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/callout.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/callout.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/callout.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/callout.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-changebars.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-changebars.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-changebars.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-changebars.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-common.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-common.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-common.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk-common.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunkfast.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/chunktoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/component.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/component.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/component.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/component.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/division.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/division.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/division.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/division.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.css.xml b/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.css.xml similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.css.xml rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.css.xml diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/ebnf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/footnote.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/footnote.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/footnote.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/footnote.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/formal.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/formal.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/formal.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/formal.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/glossary.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/glossary.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/glossary.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/glossary.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/graphics.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/graphics.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/graphics.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/graphics.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/highlight.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/highlight.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/highlight.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/highlight.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/html-rtf.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/html.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/html.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/html.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/html.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/htmltbl.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=D;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=M;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=N;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=A b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=A similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=A rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=A diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=D b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=D similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=D rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.html?C=S;O=D diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/index.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/index.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/info.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/info.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/info.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/info.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/inline.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/inline.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/inline.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/inline.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/keywords.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/keywords.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/keywords.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/keywords.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/lists.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/lists.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/lists.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/lists.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/maketoc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/manifest.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/manifest.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/manifest.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/manifest.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/math.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/math.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/math.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/math.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/oldchunker.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/oldchunker.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/oldchunker.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/oldchunker.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/param.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/param.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/param.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/param.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/pi.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk-code.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk-code.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk-code.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk-code.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-chunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-docbook.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-docbook.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-docbook.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-docbook.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-onechunk.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-onechunk.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-onechunk.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/profile-onechunk.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/qandaset.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/refentry.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/refentry.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/refentry.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/refentry.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/sections.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/sections.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/sections.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/sections.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/synop.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/synop.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/synop.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/synop.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/table.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/table.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/table.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/table.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/task.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/task.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/task.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/task.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.templates.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.templates.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.templates.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.templates.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/titlepage.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/toc.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/verbatim.xsl diff --git a/jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/xref.xsl b/core/tools/docbook-xsl-ns-1.76.1/xhtml/xref.xsl similarity index 100% rename from jonas_doc/core/tools/docbook-xsl-ns-1.76.1/xhtml/xref.xsl rename to core/tools/docbook-xsl-ns-1.76.1/xhtml/xref.xsl diff --git a/jonas_doc/core/tools/fop-0.95/KEYS b/core/tools/fop-0.95/KEYS similarity index 100% rename from jonas_doc/core/tools/fop-0.95/KEYS rename to core/tools/fop-0.95/KEYS diff --git a/jonas_doc/core/tools/fop-0.95/LICENSE b/core/tools/fop-0.95/LICENSE similarity index 100% rename from jonas_doc/core/tools/fop-0.95/LICENSE rename to core/tools/fop-0.95/LICENSE diff --git a/jonas_doc/core/tools/fop-0.95/NOTICE b/core/tools/fop-0.95/NOTICE similarity index 100% rename from jonas_doc/core/tools/fop-0.95/NOTICE rename to core/tools/fop-0.95/NOTICE diff --git a/jonas_doc/core/tools/fop-0.95/README b/core/tools/fop-0.95/README similarity index 100% rename from jonas_doc/core/tools/fop-0.95/README rename to core/tools/fop-0.95/README diff --git a/jonas_doc/core/tools/fop-0.95/build/fop.jar b/core/tools/fop-0.95/build/fop.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/build/fop.jar rename to core/tools/fop-0.95/build/fop.jar diff --git a/jonas_doc/core/tools/fop-0.95/conf/fop.xconf b/core/tools/fop-0.95/conf/fop.xconf similarity index 100% rename from jonas_doc/core/tools/fop-0.95/conf/fop.xconf rename to core/tools/fop-0.95/conf/fop.xconf diff --git a/jonas_doc/core/tools/fop-0.95/fop b/core/tools/fop-0.95/fop similarity index 100% rename from jonas_doc/core/tools/fop-0.95/fop rename to core/tools/fop-0.95/fop diff --git a/jonas_doc/core/tools/fop-0.95/fop.bat b/core/tools/fop-0.95/fop.bat similarity index 100% rename from jonas_doc/core/tools/fop-0.95/fop.bat rename to core/tools/fop-0.95/fop.bat diff --git a/jonas_doc/core/tools/fop-0.95/lib/README.txt b/core/tools/fop-0.95/lib/README.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/README.txt rename to core/tools/fop-0.95/lib/README.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/avalon-framework-4.2.0.jar b/core/tools/fop-0.95/lib/avalon-framework-4.2.0.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/avalon-framework-4.2.0.jar rename to core/tools/fop-0.95/lib/avalon-framework-4.2.0.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/avalon-framework.LICENSE.txt b/core/tools/fop-0.95/lib/avalon-framework.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/avalon-framework.LICENSE.txt rename to core/tools/fop-0.95/lib/avalon-framework.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/avalon-framework.NOTICE.TXT b/core/tools/fop-0.95/lib/avalon-framework.NOTICE.TXT similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/avalon-framework.NOTICE.TXT rename to core/tools/fop-0.95/lib/avalon-framework.NOTICE.TXT diff --git a/jonas_doc/core/tools/fop-0.95/lib/batik-all-1.7.jar b/core/tools/fop-0.95/lib/batik-all-1.7.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/batik-all-1.7.jar rename to core/tools/fop-0.95/lib/batik-all-1.7.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/batik.LICENSE.txt b/core/tools/fop-0.95/lib/batik.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/batik.LICENSE.txt rename to core/tools/fop-0.95/lib/batik.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/batik.NOTICE.txt b/core/tools/fop-0.95/lib/batik.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/batik.NOTICE.txt rename to core/tools/fop-0.95/lib/batik.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-io-1.3.1.jar b/core/tools/fop-0.95/lib/commons-io-1.3.1.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-io-1.3.1.jar rename to core/tools/fop-0.95/lib/commons-io-1.3.1.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-io.LICENSE.txt b/core/tools/fop-0.95/lib/commons-io.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-io.LICENSE.txt rename to core/tools/fop-0.95/lib/commons-io.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-io.NOTICE.txt b/core/tools/fop-0.95/lib/commons-io.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-io.NOTICE.txt rename to core/tools/fop-0.95/lib/commons-io.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-logging-1.0.4.jar b/core/tools/fop-0.95/lib/commons-logging-1.0.4.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-logging-1.0.4.jar rename to core/tools/fop-0.95/lib/commons-logging-1.0.4.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-logging.LICENSE.txt b/core/tools/fop-0.95/lib/commons-logging.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-logging.LICENSE.txt rename to core/tools/fop-0.95/lib/commons-logging.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/commons-logging.NOTICE.txt b/core/tools/fop-0.95/lib/commons-logging.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/commons-logging.NOTICE.txt rename to core/tools/fop-0.95/lib/commons-logging.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/serializer-2.7.0.jar b/core/tools/fop-0.95/lib/serializer-2.7.0.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/serializer-2.7.0.jar rename to core/tools/fop-0.95/lib/serializer-2.7.0.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/serializer.LICENSE.txt b/core/tools/fop-0.95/lib/serializer.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/serializer.LICENSE.txt rename to core/tools/fop-0.95/lib/serializer.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/serializer.NOTICE.txt b/core/tools/fop-0.95/lib/serializer.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/serializer.NOTICE.txt rename to core/tools/fop-0.95/lib/serializer.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan-2.7.0.jar b/core/tools/fop-0.95/lib/xalan-2.7.0.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan-2.7.0.jar rename to core/tools/fop-0.95/lib/xalan-2.7.0.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt b/core/tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt rename to core/tools/fop-0.95/lib/xalan.BCEL.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan.LICENSE.txt b/core/tools/fop-0.95/lib/xalan.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan.LICENSE.txt rename to core/tools/fop-0.95/lib/xalan.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan.NOTICE.txt b/core/tools/fop-0.95/lib/xalan.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan.NOTICE.txt rename to core/tools/fop-0.95/lib/xalan.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan.regexp.LICENSE.txt b/core/tools/fop-0.95/lib/xalan.regexp.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan.regexp.LICENSE.txt rename to core/tools/fop-0.95/lib/xalan.regexp.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xalan.runtime.LICENSE.txt b/core/tools/fop-0.95/lib/xalan.runtime.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xalan.runtime.LICENSE.txt rename to core/tools/fop-0.95/lib/xalan.runtime.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xerces.LICENSE.txt b/core/tools/fop-0.95/lib/xerces.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xerces.LICENSE.txt rename to core/tools/fop-0.95/lib/xerces.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xercesImpl-2.7.1.jar b/core/tools/fop-0.95/lib/xercesImpl-2.7.1.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xercesImpl-2.7.1.jar rename to core/tools/fop-0.95/lib/xercesImpl-2.7.1.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/xercesImpl.LICENSE.txt b/core/tools/fop-0.95/lib/xercesImpl.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xercesImpl.LICENSE.txt rename to core/tools/fop-0.95/lib/xercesImpl.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xercesImpl.NOTICE.txt b/core/tools/fop-0.95/lib/xercesImpl.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xercesImpl.NOTICE.txt rename to core/tools/fop-0.95/lib/xercesImpl.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-1.3.04.jar b/core/tools/fop-0.95/lib/xml-apis-1.3.04.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-1.3.04.jar rename to core/tools/fop-0.95/lib/xml-apis-1.3.04.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext-1.3.04.jar b/core/tools/fop-0.95/lib/xml-apis-ext-1.3.04.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext-1.3.04.jar rename to core/tools/fop-0.95/lib/xml-apis-ext-1.3.04.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-documentation.txt b/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-documentation.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-documentation.txt rename to core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-documentation.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-software.txt b/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-software.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-software.txt rename to core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.dom-software.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.sac.html b/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.sac.html similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.sac.html rename to core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.sac.html diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.txt b/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.txt rename to core/tools/fop-0.95/lib/xml-apis-ext.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.NOTICE.txt b/core/tools/fop-0.95/lib/xml-apis-ext.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.NOTICE.txt rename to core/tools/fop-0.95/lib/xml-apis-ext.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.README.dom.txt b/core/tools/fop-0.95/lib/xml-apis-ext.README.dom.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis-ext.README.dom.txt rename to core/tools/fop-0.95/lib/xml-apis-ext.README.dom.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE-SAX.html b/core/tools/fop-0.95/lib/xml-apis.LICENSE-SAX.html similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE-SAX.html rename to core/tools/fop-0.95/lib/xml-apis.LICENSE-SAX.html diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-documentation.html b/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-documentation.html similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-documentation.html rename to core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-documentation.html diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-software.html b/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-software.html similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-software.html rename to core/tools/fop-0.95/lib/xml-apis.LICENSE.DOM-software.html diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.txt b/core/tools/fop-0.95/lib/xml-apis.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis.LICENSE.txt rename to core/tools/fop-0.95/lib/xml-apis.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xml-apis.NOTICE.txt b/core/tools/fop-0.95/lib/xml-apis.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xml-apis.NOTICE.txt rename to core/tools/fop-0.95/lib/xml-apis.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar b/core/tools/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar rename to core/tools/fop-0.95/lib/xmlgraphics-commons-1.3.1.jar diff --git a/jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons.LICENSE.txt b/core/tools/fop-0.95/lib/xmlgraphics-commons.LICENSE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons.LICENSE.txt rename to core/tools/fop-0.95/lib/xmlgraphics-commons.LICENSE.txt diff --git a/jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons.NOTICE.txt b/core/tools/fop-0.95/lib/xmlgraphics-commons.NOTICE.txt similarity index 100% rename from jonas_doc/core/tools/fop-0.95/lib/xmlgraphics-commons.NOTICE.txt rename to core/tools/fop-0.95/lib/xmlgraphics-commons.NOTICE.txt diff --git a/jonas_doc/core/tools/fop-0.95/status.xml b/core/tools/fop-0.95/status.xml similarity index 100% rename from jonas_doc/core/tools/fop-0.95/status.xml rename to core/tools/fop-0.95/status.xml diff --git a/jonas_doc/core/tools/maven-ant-tasks-2.1.3.jar b/core/tools/maven-ant-tasks-2.1.3.jar similarity index 100% rename from jonas_doc/core/tools/maven-ant-tasks-2.1.3.jar rename to core/tools/maven-ant-tasks-2.1.3.jar diff --git a/jonas_doc/core/tools/win32/iconv.dll b/core/tools/win32/iconv.dll similarity index 100% rename from jonas_doc/core/tools/win32/iconv.dll rename to core/tools/win32/iconv.dll diff --git a/jonas_doc/core/tools/win32/libexslt.dll b/core/tools/win32/libexslt.dll similarity index 100% rename from jonas_doc/core/tools/win32/libexslt.dll rename to core/tools/win32/libexslt.dll diff --git a/jonas_doc/core/tools/win32/libxml2.dll b/core/tools/win32/libxml2.dll similarity index 100% rename from jonas_doc/core/tools/win32/libxml2.dll rename to core/tools/win32/libxml2.dll diff --git a/jonas_doc/core/tools/win32/libxslt.dll b/core/tools/win32/libxslt.dll similarity index 100% rename from jonas_doc/core/tools/win32/libxslt.dll rename to core/tools/win32/libxslt.dll diff --git a/jonas_doc/core/tools/win32/xsltproc.exe b/core/tools/win32/xsltproc.exe similarity index 100% rename from jonas_doc/core/tools/win32/xsltproc.exe rename to core/tools/win32/xsltproc.exe diff --git a/jonas_doc/core/tools/win32/zlib1.dll b/core/tools/win32/zlib1.dll similarity index 100% rename from jonas_doc/core/tools/win32/zlib1.dll rename to core/tools/win32/zlib1.dll diff --git a/jonas/.checkstyle b/jonas/.checkstyle deleted file mode 100644 index f197dee3b2..0000000000 --- a/jonas/.checkstyle +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/jonas/.checkstyle_eclipse_config b/jonas/.checkstyle_eclipse_config deleted file mode 100644 index 8bfd33c209..0000000000 --- a/jonas/.checkstyle_eclipse_config +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/.classpath b/jonas/.classpath deleted file mode 100644 index 9867ccd3c3..0000000000 --- a/jonas/.classpath +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/.gitignore b/jonas/.gitignore deleted file mode 100644 index d4a1bf7255..0000000000 --- a/jonas/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -# Maven -# ----------------------------------- -target/ - -# IntelliJ Idea -# ----------------------------------- -.idea/ -*.iml -*.iws - -# Eclipse -# ----------------------------------- -.settings/ -.classpath -.project - -# JacORB -_nsdb_root diff --git a/jonas/.project b/jonas/.project deleted file mode 100644 index 06f49c1fcc..0000000000 --- a/jonas/.project +++ /dev/null @@ -1,35 +0,0 @@ - - - jonas - - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder - - - - - - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - com.atlassw.tools.eclipse.checkstyle.CheckstyleNature - org.eclipse.wst.common.project.facet.core.nature - - diff --git a/jonas/.settings/org.eclipse.jdt.core.prefs b/jonas/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 1d81c0f752..0000000000 --- a/jonas/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,268 +0,0 @@ -#Tue Aug 17 09:56:30 CEST 2010 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=128 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/jonas/.settings/org.eclipse.jdt.ui.prefs b/jonas/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 9d0ec04856..0000000000 --- a/jonas/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,57 +0,0 @@ -#Wed Sep 17 14:43:57 CEST 2008 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_JOnAS formatter -formatter_settings_version=11 -org.eclipse.jdt.ui.text.custom_code_templates= -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=false -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=false -sp_cleanup.correct_indentation=false -sp_cleanup.format_source_code=false -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=false -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=false -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=true -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=false -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=false -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=true -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=false -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=false -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/jonas/.settings/org.maven.ide.eclipse.prefs b/jonas/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 0cda568a4b..0000000000 --- a/jonas/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,9 +0,0 @@ -#Tue Apr 12 11:46:16 CEST 2011 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals= -includeModules=true -resolveWorkspaceProjects=true -resourceFilterGoals= -skipCompilerPlugin=true -version=1 diff --git a/jonas/LicenceAgreement.txt b/jonas/LicenceAgreement.txt deleted file mode 100644 index 678c6921d5..0000000000 --- a/jonas/LicenceAgreement.txt +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/jonas/README b/jonas/README deleted file mode 100644 index fded334f95..0000000000 --- a/jonas/README +++ /dev/null @@ -1,6 +0,0 @@ - ==================== - How to compile JOnAS - ==================== - -Here is how to build JOnAS 5: - http://wiki.jonas.ow2.org/xwiki/bin/view/Doc/BuildingJOnAS5 \ No newline at end of file diff --git a/jonas/ReleaseNotes.txt b/jonas/ReleaseNotes.txt deleted file mode 100644 index b2a5e1f23a..0000000000 --- a/jonas/ReleaseNotes.txt +++ /dev/null @@ -1,2 +0,0 @@ -Release Notes of JOnAS 5.2 are available online -on the JOnAS web site: http://wiki.jonas.ow2.org diff --git a/jonas/assemblies/ant-tasks/pom.xml b/jonas/assemblies/ant-tasks/pom.xml deleted file mode 100644 index 121162ad7a..0000000000 --- a/jonas/assemblies/ant-tasks/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - org.ow2.jonas - assemblies - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.assemblies - jonas-ant-tasks - JOnAS :: Assemblies :: ANT tasks - - - - - maven-dependency-plugin - - - verify - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - jonas-full-${project.version}/lib/common/ow_jonas_ant.jar - - - - - - - maven-antrun-plugin - - - verify - - - - - - - - run - - - - - - - diff --git a/jonas/assemblies/ant-tasks/src/main/resources/README b/jonas/assemblies/ant-tasks/src/main/resources/README deleted file mode 100644 index 6186d8fb48..0000000000 --- a/jonas/assemblies/ant-tasks/src/main/resources/README +++ /dev/null @@ -1,2 +0,0 @@ -This is a maven packaging of JOnAS ANT Tasks - diff --git a/jonas/assemblies/client-jar/pom.xml b/jonas/assemblies/client-jar/pom.xml deleted file mode 100644 index 77b892a1ff..0000000000 --- a/jonas/assemblies/client-jar/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - org.ow2.jonas - assemblies - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.assemblies - client-jar - JOnAS :: Assemblies :: Client JAR - - - - - maven-dependency-plugin - - - verify - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - jonas-full-${project.version}/lib/client.jar - - - - - - - maven-antrun-plugin - - - verify - - - - - - - - run - - - - - - - diff --git a/jonas/assemblies/client-jar/src/main/resources/README b/jonas/assemblies/client-jar/src/main/resources/README deleted file mode 100644 index 491c648e0c..0000000000 --- a/jonas/assemblies/client-jar/src/main/resources/README +++ /dev/null @@ -1 +0,0 @@ -This is a maven packaging of JONAS_ROOT/lib/Client.jar diff --git a/jonas/assemblies/examples/pom.xml b/jonas/assemblies/examples/pom.xml deleted file mode 100644 index d0a0a83809..0000000000 --- a/jonas/assemblies/examples/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - org.ow2.jonas - assemblies - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.assemblies - examples - JOnAS :: Assemblies :: Examples - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/build.properties b/jonas/assemblies/examples/src/main/resources/examples/build.properties deleted file mode 100644 index c95e4e5558..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/build.properties +++ /dev/null @@ -1,37 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Properties defined in this file could be customized - -# options for java compiler -opt.javac.debug on -opt.javac.optimize off - -# genic args -#verbose=true - -# protocols for Carol (jrmp,iiop,cmi) -protocols.names=jrmp,iiop -genicargs=-rmicopts -keep \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/build.xml b/jonas/assemblies/examples/src/main/resources/examples/build.xml deleted file mode 100644 index bb776adfed..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/build.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt deleted file mode 100644 index 5deb5b340c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/PortConfiguration.txt +++ /dev/null @@ -1,63 +0,0 @@ - -This file shows a configuration of -- a cluster of 4 JOnAS instances running on the same machine, -- a master JOnAS instance to manage the domain, and -- a db JOnAS instance -The table below lists a possible configuration of all the ports used by those 6 JOnAS instances. -In the following configuration we will deploy the entity beans on node3 and node4. -The Web application is deployed on node1 and node2. - - __--- Node1 --- Node3 ---__ -Apache with mod_jk ---__ x __--- DB - --- Node2 --- Node4 --- - - Web Ejb - Container Container - -Note : -- You have to activate the AJP Connector (tomcat6-server.xml) for node1 and node2 -in order to be able to communicate with the mod_jk module. -Two different ports (for example 9010 and 9011) must be choosen. -Configure the mod_jk to use the 2 instances. -For further information please consult - http://jonas.objectweb.org/JONAS_5_1_0/doc/doc-en/html/clustering_guide.html -in the section -WEB clustering with Apache/Tomcat - - -- Please note that the database used to store the data of the entity beans has to be -the same on both nodes where the ejb's are deployed. -In this example we use the database HSQL mapped to the JNDI name jdbc_1. -We will use the database started by db node, therefore the url defined in -rajdbc.HSQL1.url of build-jc.properties, must be conform to the db.port defined in build-db.properties. -In this example, we have to start the DB node before the node3 and node4. - - - -FILENAME PROPERTY DB NODE1 NODE2 NODE3 NODE4 MASTER --------- -------- ----- ----- ----- ----- ----- ------ - - -jonas.properties - jonas.service.db.port 9005 xxx xxx xxx xxx xxx - - jonas.service.discovery.source.port 9888 9888 9888 9888 9888 9888 - jonas.service.discovery.greeting.port 9903 9899 9900 9901 9902 9904 - -tomcat6-server.xml - :/sampleCluster2 - ex : http://localhost:80/sampleCluster2 - -4) Stop the cluster: - -jcl4sc stop - -This allows to stop the cluster. - - -You may type jcl4sc -help to get the usage of the command. - - -Attachments: -------------- -+ example configurations (in exampleConfig): - - Jakarta Tomcat 6.x (tomcat6-jk.conf) - - mod_jk (workers.properties, tomcat6-mod_jk.xml) - - ---------------------------- -Good luck!! -================================================================================= diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties deleted file mode 100644 index c59d0b2b43..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/carol.properties +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (C) 2002-2007 ObjectWeb -# -# CAROL: Common Architecture for RMI ObjectWeb Layer -# -# This library is developed inside the ObjectWeb Consortium, -# http://www.ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -------------------------------------------------------------------------- -# $Id$ -# -------------------------------------------------------------------------- - -# jonas rmi activation (iiop, irmi, jrmp) -carol.protocols=jrmp - -# RMI IRMI URL -carol.irmi.url=rmi://localhost:1099 - -# RMI JRMP URL -carol.jrmp.url=rmi://localhost:1099 - -# RMI IIOP URL -carol.iiop.url=iiop://localhost:1099 - -###################################################################### -# Advanced Configuration for IRMI -###################################################################### -# Exported objects will listen on this port for remote method -# invocations. -#A value of 0 will cause a random port to be selected. -# This is the default value. -# Warning : if the port is set (not 0) with the value 'n', be aware that -# the port 'n + 1' will be used by the JMX server. -# So, for the firewall configuration, you have to open the port numbers 'n' -# and 'n+1'. -carol.irmi.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.irmi.url property) -# Use all interfaces available [default configuration = false] -carol.irmi.interfaces.bind.single=false - -###################################################################### -# Advanced Configuration for JRMP -###################################################################### -# If true, local call with jrmp are optimized. If you get "ClassCastException -# with 2 beans in different jars, you should set it at "false". -carol.jvm.rmi.local.call=false - -# If true a local Naming context is used (to be used only with a collocated registry) -carol.jvm.rmi.local.registry=true - -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.jrmp.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.jrmp.url property) -# Use all interfaces available [default configuration = false] -carol.jrmp.interfaces.bind.single=false - - -###################################################################### -# Advanced Configuration for IIOP -###################################################################### -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.iiop.server.port=0 - -# The value of this port is used to set the SSL port of the objects listener. -# Note that this port musn't not be set to 0 as it is used for CsiV2. -# but this port is used only if SSL mode is enable. -# So by default, there is no listener on this port -# [default configuration = not used] -carol.iiop.server.sslport=2003 - -# Delegate used by JOnAS for rmi-iiop protocol -carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.registry.carol.delegate.JacORBPRODelegate - -###################################################################### -# Advanced JNDI Configuration -###################################################################### -carol.jndi.java.naming.factory.url.pkgs=org.ow2.jonas.lib.naming diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml deleted file mode 100644 index 771a2ea092..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/cmi-config.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - rmi://localhost:2032 - rmi://localhost:2043 - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties deleted file mode 100644 index c7bb2c2135..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientConfig/traceclient.properties +++ /dev/null @@ -1,43 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -#logger.org.ow2.carol.level DEBUG -#logger.org.ow2.jonas.level DEBUG diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat deleted file mode 100755 index 3fa1e30a07..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -REM JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM JAVA_OPTS=-Dcmi.disabled=true -jclient -cp %JONAS_ROOT%\examples\cluster-j2ee14\output\ejbjars\ejbs.jar org.ow2.jonas.examples.cluster.j2ee14.client.ClientException -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh deleted file mode 100755 index b730d6890a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientException.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient org.ow2.jonas.examples.cluster.j2ee14.client.ClientException -cp $JONAS_ROOT/examples/classes:$JONAS_ROOT/examples/cluster-j2ee14/output/ejbjars/ejbs.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat deleted file mode 100755 index 233d1dccc4..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -REM JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM JAVA_OPTS=-Dcmi.disabled=true -jclient -cp %JONAS_ROOT%\examples\cluster-j2ee14\output\ejbjars\ejbs.jar org.ow2.jonas.examples.cluster.j2ee14.client.ClientFOSFSB -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh deleted file mode 100755 index 9c362dadf8..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientFOSFSB.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient org.ow2.jonas.examples.cluster.j2ee14.client.ClientFOSFSB -cp $JONAS_ROOT/examples/classes:$JONAS_ROOT/examples/cluster-j2ee14/output/ejbjars/ejbs.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat deleted file mode 100755 index eb2393d0a3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -REM JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM JAVA_OPTS=-Dcmi.disabled=true -jclient -cp %JONAS_ROOT%\examples\cluster-j2ee14\output\ejbjars\ejbs.jar org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBHome -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh deleted file mode 100755 index 161f54320a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBHome.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBHome -cp $JONAS_ROOT/examples/classes:$JONAS_ROOT/examples/cluster-j2ee14/output/ejbjars/ejbs.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat deleted file mode 100755 index ab06007f15..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -REM JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM JAVA_OPTS=-Dcmi.disabled=true -jclient -cp %JONAS_ROOT%\examples\cluster-j2ee14\output\ejbjars\ejbs.jar org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBLookup -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh deleted file mode 100755 index 16762c5b69..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBLookup.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBLookup -cp $JONAS_ROOT/examples/classes:$JONAS_ROOT/examples/cluster-j2ee14/output/ejbjars/ejbs.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat deleted file mode 100755 index 66523a78f5..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -REM JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM JAVA_OPTS=-Dcmi.disabled=true -jclient -cp %JONAS_ROOT%\examples\cluster-j2ee14\output\ejbjars\ejbs.jar org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBRemote -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh deleted file mode 100755 index 33eb201061..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/bin-client/clientLBRemote.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBRemote -cp $JONAS_ROOT/examples/classes:$JONAS_ROOT/examples/cluster-j2ee14/output/ejbjars/ejbs.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties deleted file mode 100644 index eed39a4578..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.properties +++ /dev/null @@ -1,32 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999 Bull S.A. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): ____________________________________. -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Properties defined in this file could be customized - -# protocols for Carol (jrmp,iiop,cmi) -protocols.names=jrmp,iiop -required.services=cmi,ha diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml deleted file mode 100644 index 8684a6b81f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/build.xml +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml deleted file mode 100644 index 74e0d49105..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - ejb/MyEjb1Home - MyEjb1Home - - - - - ejb/MyStatefulHome - MyStatefulHome - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml deleted file mode 100644 index b760d7515c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/WEB-INF/web.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - sessionServlet - org.ow2.jonas.examples.cluster.j2ee14.servlets.SessionServlet - - - - releaseSessionServlet - org.ow2.jonas.examples.cluster.j2ee14.servlets.ReleaseServlet - - - - checkSessionServlet - org.ow2.jonas.examples.cluster.j2ee14.servlets.CheckServlet - - - - exceptionServlet - org.ow2.jonas.examples.cluster.j2ee14.servlets.ExceptionServlet - - - - exceptionServlet - /servlet/exception - - - - sessionServlet - /servlet/session - - - - releaseSessionServlet - /servlet/release - - - - checkSessionServlet - /servlet/check - - - - /index.html - - - - ejb/MyEjb1Home - Session - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1 - - - - - ejb/MyStatefulHome - Session - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulHome - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml deleted file mode 100644 index bd30fbd15f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/policy/round-robin-policy.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - org.ow2.cmi.lb.policy.RoundRobin - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html deleted file mode 100644 index 29837683e3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - sampleCluster2 - - - -

-Home of sampleCluster2

-Open a session : click here -(session servlet) -

Release a session : click here -(release servlet) -

Check a session : click here -(check servlet) -

Test the exception propagation from the server side to the client side : click here -(exception servlet) - -
  -
  -
  -
  -
  -
Sample is OK. - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp deleted file mode 100644 index 33b3d2578a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/checkRsp.jsp +++ /dev/null @@ -1,22 +0,0 @@ -<%@ page session="false" %> -<% -Cookie[] cookies = request.getCookies(); -HttpSession session = request.getSession(false); -%> - -Check session - -

check Servlet output

-<%= (session != null ? "

Logged in.

Session ID: " + session.getId() + "

" : "

No session.

") %> -<% - if ( cookies != null) - for (int i=0; i < cookies.length;i++) - out.println(cookies[i].getName()+ ": " + cookies[i].getValue() + "
"); -%> -
<%=request.getAttribute("sessionCheckInfo")%>

->go to session, -<% if (session != null) out.println("logout, ");%> ->check session, ->home. -
Sample is OK. - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp deleted file mode 100644 index 7b41603aa4..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/exceptionRsp.jsp +++ /dev/null @@ -1,13 +0,0 @@ -<%@ page session="false" %> - -Exception -

exception Servlet output

- -

-<% - - out.println("MyException caught :" + request.getAttribute("expectedException") + "
"); - out.println("Exception=" + request.getAttribute("exception") + "
"); -%> ->return to home. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp deleted file mode 100644 index 26fd17d0aa..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/releaseRsp.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%@ page session="false" %> - -<% Cookie[] cookies = request.getCookies(); %> - -Release session -

release Servlet output

- -

<%=request.getAttribute("sessionToReleaseInfo")%>

-

Cookies

-<% -if (cookies != null) { - for (int i=0; i < cookies.length;i++) - out.println(cookies[i].getName()+ ": " + cookies[i].getValue() + "
"); - out.println("
If present, the JSESSIONID cookie will be obsoleted.
"); -} else { - out.println("None."); -} -%> - -

->go to session, ->check session, ->home. -
Sample is OK. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp deleted file mode 100644 index b89e308573..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/resources/web/jsp/sessionRsp.jsp +++ /dev/null @@ -1,50 +0,0 @@ -<%@ page import="java.util.Enumeration" %> -<%@ page import="java.util.Date" %> -<%@ page import="javax.ejb.Handle" %> -<%@ page import="org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.*" %> -<%@ page import="javax.rmi.PortableRemoteObject" %> -<% - Date dc = new Date(session.getCreationTime()); - Date da = new Date(session.getLastAccessedTime()); -%> -SessionServlet Output - -

SessionServlet Output

-

getRequestURL <%=request.getRequestURL()%> - for the <%=session.getAttribute("sessiontest.counter")%> times.
-from <%=request.getRemoteAddr()%>(user is <%=request.getRemoteUser()%>) -To server <%=request.getServerName()%> on port <%=request.getServerPort()%>. -

-

Request path:
-Servlet executed on JOnAS instance (<%=request.getAttribute("jonas.WEB.served.by")%>)
-Stateless EJB executed on JOnAS instance (<%=request.getAttribute("jonas.EJB.served.by")%>)
- -

-
->Ask again, ->release session, ->check session, ->home.
- -Session Data: -New Session: <%=session.isNew()%> -
Session ID: <%=session.getId()%> -
Creation Time: <%=dc.toString()%> -
Last Accessed Time: <%=da.toString()%> -

-

-<%
-Handle h = (Handle) session.getAttribute("myStateful");
-if (h != null) {
-  MyStateful bean = null;
-  try {
-  bean = (MyStateful) PortableRemoteObject.narrow (h.getEJBObject() , MyStateful.class);
-  out.print(bean.getLogDump());
-  } catch (Exception e) {
-    out.print(e.getMessage());
-  }
-}
-%>
-
-Sample is OK. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml deleted file mode 100644 index 85203bcc09..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/ejb-jar.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - Describe here the content of this file - MyEjb1 - - - - - Describe here the session bean MyEjb1 - - MyEjb1/MyEjb1SLR - MyEjb1SLR - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1 - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1SLR - - Stateless - Container - - - - - Describe here the session bean MyStateful - - ejbs/MyStatefulSFR - MyStatefulSFR - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulHome - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulSFR - - Stateful - Container - - - - - Describe here the session bean MyStateful - - ejbs/MyStatefulInner - MyStatefulInner - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulInnerLocalHome - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulInnerLocal - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulInner - - Stateful - Container - - - - Describe here the entity bean - - MyEntitySLR - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEntityHome - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEntityRemote - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEntityLocalHome - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEntityLocal - - - org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEntitySLR - - Container - java.lang.Object - false - 2.x - ClusterSchema - - number - - - jOnASName - - - - - - - - - - - - - - MyEjb1SLR - * - - Required - - - - - MyStatefulSFR - * - - Required - - - - - MyStatefulInner - * - - Required - - - - - MyEntitySLR - * - - Required - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml deleted file mode 100644 index b8bb83ad2c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.ha.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - MyEjb1SLR - MyEjb1Home - 3 - true - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - true - - - java.util.LinkedList - java.util.ArrayList - - - http://carol.ow2.org - - - - 10 - 15 - 2000 - - - - - - MyStatefulSFR - MyStatefulHome - true - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - 10 - 15 - 2000 - - - isModified - - - - MyStatefulInner - MyStatefulInnerHome - true - isModified - - - - MyEntitySLR - MyEntityHome - true - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - 10 - 15 - 2000 - - - true - - jdbc_1 - - database - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml deleted file mode 100644 index 6a077c8679..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.lb.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - MyEjb1SLR - MyEjb1Home - 3 - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - true - - - java.util.LinkedList - java.util.ArrayList - - - http://carol.ow2.org - - - - 10 - 15 - 2000 - - - - - - MyStatefulSFR - MyStatefulHome - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - true - - - java.util.LinkedList - java.util.ArrayList - - - http://carol.ow2.org - - - - 10 - 15 - 2000 - - - isModified - - - - MyStatefulInner - MyStatefulInnerHome - isModified - - - - MyEntitySLR - MyEntityHome - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - 10 - 15 - 2000 - - - true - - jdbc_1 - - database - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml deleted file mode 100644 index 6a077c8679..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/jonas-ejb-jar.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - MyEjb1SLR - MyEjb1Home - 3 - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - true - - - java.util.LinkedList - java.util.ArrayList - - - http://carol.ow2.org - - - - 10 - 15 - 2000 - - - - - - MyStatefulSFR - MyStatefulHome - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - true - - - java.util.LinkedList - java.util.ArrayList - - - http://carol.ow2.org - - - - 10 - 15 - 2000 - - - isModified - - - - MyStatefulInner - MyStatefulInnerHome - isModified - - - - MyEntitySLR - MyEntityHome - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - 10 - 15 - 2000 - - - true - - jdbc_1 - - database - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml deleted file mode 100644 index 9c34ef41b2..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/ejb-jar.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - Describe here the content of this file - HaTransaction - - - - Describe here the entity bean - - HaTransactionSLR - - org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions.HaTransactionHome - - - org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions.HaTransactionRemote - - - org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions.HaTransactionLocalHome - - - org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions.HaTransactionLocal - - - org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions.HaTransactionSLR - - Container - java.lang.String - false - 2.x - HaTransaction - - txid - - txid - - - - - - - - - - - - HaTransactionSLR - * - - Required - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml deleted file mode 100644 index e787a66820..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/etc/xml/transaction/jonas-ejb-jar.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - HaTransactionSLR - HaTransactionHome - false - true - - cluster-j2ee14 - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - 10 - 15 - 2000 - - - - jdbc_1 - ha_transactions - - txid - txid - varchar(60) - - - database - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf deleted file mode 100644 index 5c3e02fdf3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-jk.conf +++ /dev/null @@ -1,23 +0,0 @@ - -LoadModule jk_module modules/mod_jk.so -# Location of the worker file -JkWorkersFile conf/jk\workers.properties -# Location of the log file -JkLogFile conf/jk\mod_jk.log -# Log level : debug, info, error or emerg -JkLogLevel emerg -# Shared Memory Filename ( Only for Unix platform ) required by loadbalancer -JkShmFile conf/jk\jk.shm -# Assign specific URL to Tomcat workers -JkMount /sampleCluster2 loadbalancer -JkMount /sampleCluster2/* loadbalancer -# A mount point to the status worker -JkMount /jkmanager jkstatus -JkMount /jkmanager/* jkstatus -# Enable the Jk manager access only from localhost - - JkMount jkstatus - Order deny,allow - Deny from all - Allow from 127.0.0.1 - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml deleted file mode 100644 index c1060a8ca7..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/tomcat6-mod_jk.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties deleted file mode 100644 index b757fa81eb..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/example-config/workers.properties +++ /dev/null @@ -1,43 +0,0 @@ - -# ----------------------- -# List the workers name -# ----------------------- -worker.list=loadbalancer,jkstatus -# The worker1, and worker2 should not appear in the worker.list property! -# As they are member of load balancer -# ----------------------- -# worker1 -# ----------------------- -worker.worker1.port=9010 -worker.worker1.host=localhost -worker.worker1.type=ajp13 -# Load balance factor -worker.worker1.lbfactor=1 -# Define prefered failover node for worker1 -worker.worker1.redirect=worker2 -# Disable worker1 for all requests except failover -#worker.worker1.disabled=True - -# ----------------------- -# worker2 -# ----------------------- -worker.worker2.port=9011 -worker.worker2.host=localhost -worker.worker2.type=ajp13 -# Load balance factor -worker.worker2.lbfactor=1 -# Define prefered failover node for worker2 -worker.worker2.redirect=worker1 -# Disable worker2 for all requests except failover -#worker.worker2.disabled=True - -# ----------------------- -# Load Balancer worker -# ----------------------- -worker.loadbalancer.type=lb -worker.loadbalancer.balance_workers=worker1,worker2 -worker.loadbalancer.sticky_session=false -# ----------------------- -# jkstatus worker -# ----------------------- -worker.jkstatus.type=status diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml deleted file mode 100644 index bbe4092921..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/application.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - clusterapp-ear - J2EE Application for a JOnAS Cluster - - - ejbs.jar - - - - - sampleCluster2.war - sampleCluster2 - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml deleted file mode 100644 index 685fa77536..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/applicationHA.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - hatransactions-ear - J2EE Application for a JOnAS Cluster - - - ejbsHA.jar - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java deleted file mode 100644 index 331c0abf7b..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionHome.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions; - -/** - * Local interface for the entity bean - * @author goebelg - */ -public interface HaTransactionHome extends javax.ejb.EJBHome { - - /** - * Creation of the entity bean - * @param txid the primary key - * @return the entity bean - * @throws javax.ejb.CreateException if creation fails - */ - HaTransactionRemote create(String txid) throws javax.ejb.CreateException, java.rmi.RemoteException; - - /** - * Search for a record with the primary key. Indicate the time of the creation as pk. - * @param primaryKey the primary key to look for - * @return the entity bean - * @throws javax.ejb.FinderException if not existing - */ - HaTransactionRemote findByPrimaryKey(Object primaryKey) throws javax.ejb.FinderException, java.rmi.RemoteException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java deleted file mode 100644 index 0e8d7e1092..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocal.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions; - -/** - * @author goebelg - * Local interface for the entity bean - */ -public interface HaTransactionLocal extends javax.ejb.EJBLocalObject { - - /** - * Get the date formatted as string. - * @return the date as string - */ - String getTxid(); - - /** - * Set the date formatted as string - * @param txid the date as string - */ - void setTxid(String txid); - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java deleted file mode 100644 index 3f5996c222..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionLocalHome.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions; - -/** - * Local interface for the entity bean - * @author goebelg - */ -public interface HaTransactionLocalHome extends javax.ejb.EJBLocalHome { - - /** - * Creation of the entity bean - * @param number the primary key - * @return the entity bean - * @throws javax.ejb.CreateException if creation fails - */ - HaTransactionLocal create(String number) throws javax.ejb.CreateException; - - /** - * Search for a record with the primary key. Indicate the time of the creation as pk. - * @param primaryKey the primary key to look for - * @return the entity bean - * @throws javax.ejb.FinderException if not existing - */ - HaTransactionLocal findByPrimaryKey(Object primaryKey) throws javax.ejb.FinderException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java deleted file mode 100644 index 7ece262a72..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionRemote.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions; - -import java.rmi.RemoteException; - -/** - * @author goebelg - * Local interface for the entity bean - */ -public interface HaTransactionRemote extends javax.ejb.EJBObject { - - /** - * Get the date formatted as string. - * @return the date as string - */ - String getTxid() throws RemoteException; - - /** - * Set the date formatted as string - * @param txid the date as string - */ - void setTxid(String txid) throws RemoteException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java deleted file mode 100644 index 9711d23c0d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/hatransactions/HaTransactionSLR.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.hatransactions; - -import javax.ejb.CreateException; -import javax.ejb.EntityContext; - -/** - * Implementation of the entity bean - * @author goebelg - */ -public abstract class HaTransactionSLR implements javax.ejb.EntityBean { - - /** - * Creation of the entity bean - * @param txid the primary key -> date.getTime() as string of creation - * @return the entity bean - * @throws CreateException CreateException - */ - public Object ejbCreate(String txid) throws CreateException { - setTxid(txid); - return null; - } - - /** - * Post create methode invoked after create methode - * @param number the pk of the entity bean - */ - public void ejbPostCreate(String txid) { - } - - /** - * ejbLoad - */ - public void ejbLoad() { - } - - /** - * ejbStore - */ - public void ejbStore() { - } - - /** - * Activation of the ejb - */ - public void ejbActivate() { - } - - /** - * Passivate the ejb - */ - public void ejbPassivate() { - } - - /** - * Removes the ejb - */ - public void ejbRemove() { - } - - /** - * Set the EntityContext - * @param ec entity context - */ - public void setEntityContext(EntityContext ec) { - } - - /** - * Unsets the EntityContext - */ - public void unsetEntityContext() { - } - - /** - * Returns the txid - * @return The txid - */ - public abstract String getTxid(); - - /** - * Sets the txid - * @param txid The txid - */ - public abstract void setTxid(String txid); -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java deleted file mode 100644 index ea4e49030d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; -import java.util.Properties; - -import javax.ejb.EJBObject; - -/** - * MyEjb1 remote interface - */ -public interface MyEjb1 extends EJBObject { - - /** - * Access a property stored in the JOnAS instance executing the EJB - * container. - * @param prop Name of the property - * @return The value of the property - * @throws RemoteException if invocation failed - */ - String getProperty(String prop) throws RemoteException; - - /** - * Retreive some information of the JOnAS instance executing the EJB - * container The names of the properties are : EJB server, EJB id, EJB - * instance calls, EJB total calls - EJB server : name of the JOnAS instance - - * EJB id : toString() of the MyEjb1 - EJB instance calls : number of calls - * to this EJB instance - EJB total calls : number of calls to this EJB for - * all instance of class MyEjb1 - * @return The Properties - * @throws RemoteException if invocation failed - */ - Properties getInfoProps() throws RemoteException; - - /** - * Throw a MyException - * @throws RemoteException remote exception - * @throws MyException application exception - */ - void throwMyException() throws RemoteException, MyException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java deleted file mode 100644 index a89b9f8bcc..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1Home.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean MyEjb1 - */ -public interface MyEjb1Home extends EJBHome { - - /** - * Used to create a new EJB - * @return the new EJB - * @throws CreateException if creation failed - * @throws RemoteException if invocation failed - */ - MyEjb1 create() throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java deleted file mode 100644 index 423ff90ffa..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEjb1SLR.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; -import java.util.Date; -import java.util.Properties; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.Log; - -/** - * @author goebelg - * Implementation of a stateless session bean - */ -public class MyEjb1SLR implements SessionBean { - - /** - * - */ - private static final long serialVersionUID = 1L; - - - /** - * After how many invokes an entity bean is created - */ - private static final int DIV = 10; - /** - * Sets the session Context. - * @param ctx the session context - */ - public void setSessionContext(final SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.ow2.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Removes the ejb. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, "Remove the Bean"); - } - - /** - * Creates the ejb. - * @throws Exception any. - */ - public void ejbCreate() throws RemoteException { - - logger.log(BasicLevel.DEBUG, ""); - jonasInstanceName = "unknown"; - - try { - JProp jp = JProp.getInstance(); - jonasInstanceName = jp.getValue("jonas.name"); - } catch (Exception e) { - logger.log(BasicLevel.FATAL, "Error while creating MyEjb1SLR : " + e.getMessage()); - throw new RemoteException("Error while creating MyEjb1SLR", e); - } - logger.log(BasicLevel.DEBUG, "ejbCreate()->" + this.toString()); - } - - /** - * Passivate of the ejb. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Activation of the ejb. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Access a property stored in the JOnAS instance executing the EJB - * container. - * @param prop Name of the property - * @return The value of the property - * @throws Exception any. - */ - public String getProperty(final String prop) throws RemoteException { - String s = "unknown"; - try { - JProp jp = JProp.getInstance(); - s = jp.getValue(prop); - } catch (Exception e) { - logger.log(BasicLevel.FATAL, "Error while getProperty : " + e.getMessage()); - throw new RemoteException("Error in getProperty ", e); - } - return s; - } - - /** - * Throw a MyException. - * @throws MyException application exception - */ - public void throwMyException() throws MyException { - throw new MyException("From EjbSLR1(" + jonasInstanceName + ")"); - } - - /** - * Retreive some information of the JOnAS instance executing the EJB - * container The names of the properties are : EJB server, EJB id, EJB - * instance calls, EJB total calls - EJB server : name of the JOnAS instance - - * EJB id : toString() of the MyEjb1 - EJB instance calls : number of calls - * to this EJB instance - EJB total calls : number of calls to this EJB for - * all instance of class MyEjb1 - * @return The Properties - * @throws RemoteException any. - */ - public Properties getInfoProps() throws RemoteException { - updateStatistics(); - Properties p = new Properties(); - p.setProperty("EJB server", jonasInstanceName); - p.setProperty("EJB id", this.toString()); - p.setProperty("EJB total calls", (new Integer(allInstancesTotalCallsCount)).toString()); - p.setProperty("EJB server entity created", entityJonasInstanceName); - return p; - } - - /** - * Updates the properties described above - * @throws RemoteException any. - */ - private void updateStatistics() throws RemoteException { - allInstancesTotalCallsCount++; - - // create an entity bean every 10 times - if ((allInstancesTotalCallsCount % DIV) == 0) { - // creating a new entity bean - logger.log(BasicLevel.INFO, "Trying to create the entity"); - Date date = new Date(); - MyEntityLocal entity = createEntity(Long.toString(date.getTime())); - logger.log(BasicLevel.INFO, "Finished to create the entity"); - entityJonasInstanceName = entity.getJOnASName(); - } else { - entityJonasInstanceName = "No entity Bean created"; - } - - logger.log(BasicLevel.INFO, "JOnAS=" + jonasInstanceName + " ; ejb=" + this.toString() + " ; total calls=" - + allInstancesTotalCallsCount + " ; entity created on=" + entityJonasInstanceName); - } - - /** - * Creates a new Entity bean with the time as parameter - * @param valeur The current time as string - * @return A new Entity Bean - * @throws RemoteException any. - */ - private MyEntityLocal createEntity(final String valeur) throws RemoteException { - InitialContext cntx; - MyEntityLocal result = null; - try { - cntx = new InitialContext(); - MyEntityLocalHome entityHome = (MyEntityLocalHome) cntx.lookup("MyEntityHome_L"); - result = entityHome.create(valeur); - } catch (NamingException e) { - logger.log(BasicLevel.FATAL, "Naming exception : " + e.getMessage()); - throw new RemoteException("Naming exception : ", e); - } catch (CreateException e) { - logger.log(BasicLevel.FATAL, "Create exception : " + e.getMessage()); - throw new RemoteException( "Create exception : ", e); - } - return result; - } - - /** - * The logger - */ - private static Logger logger = null; - - - /** - * the node name of the jonas instance where an - * entity bean has bean created - */ - private String entityJonasInstanceName = "unknown"; - - /** - * the node name of the jonas instance where the - * session bean is executed - */ - private String jonasInstanceName = "unknown"; - - /** - * counts all the instances created of this class in - * that JVM - */ - private static int allInstancesTotalCallsCount = 0; -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java deleted file mode 100644 index 20274b6d2a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityHome.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -/** - * Local interface for the entity bean - * @author goebelg - */ -public interface MyEntityHome extends javax.ejb.EJBHome { - - /** - * Creation of the entity bean - * @param number the primary key -> date.getTime() as string of creation - * @return the entity bean - * @throws javax.ejb.CreateException if creation fails - */ - MyEntityRemote create(String number) throws javax.ejb.CreateException, java.rmi.RemoteException; - - /** - * Search for a record with the primary key. Indicate the time of the creation as pk. - * @param primaryKey the primary key to look for - * @return the entity bean - * @throws javax.ejb.FinderException if not existing - */ - MyEntityRemote findByPrimaryKey(Object primaryKey) throws javax.ejb.FinderException, java.rmi.RemoteException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java deleted file mode 100644 index 57c31c3272..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocal.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -/** - * @author goebelg - * Local interface for the entity bean - */ -public interface MyEntityLocal extends javax.ejb.EJBLocalObject { - - /** - * Get the date formatted as string. - * @return the date as string - */ - String getNumber(); - - /** - * Set the date formatted as string - * @param number the date as string - */ - void setNumber(String number); - - /** - * The JOnAS node name where the entity bean is created - * @return JOnAS node name - */ - String getJOnASName(); - - /** - * Get the JOnAS node name of the entity bean - * @param number JOnAS node name - */ - void setJOnASName(String name); -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java deleted file mode 100644 index 5c27e0e38c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityLocalHome.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -/** - * Local interface for the entity bean - * @author goebelg - */ -public interface MyEntityLocalHome extends javax.ejb.EJBLocalHome { - - /** - * Creation of the entity bean - * @param number the primary key -> date.getTime() as string of creation - * @return the entity bean - * @throws javax.ejb.CreateException if creation fails - */ - MyEntityLocal create(String number) throws javax.ejb.CreateException; - - /** - * Search for a record with the primary key. Indicate the time of the creation as pk. - * @param primaryKey the primary key to look for - * @return the entity bean - * @throws javax.ejb.FinderException if not existing - */ - MyEntityLocal findByPrimaryKey(Object primaryKey) throws javax.ejb.FinderException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java deleted file mode 100644 index 10dc9d59c8..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntityRemote.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -/** - * @author goebelg - * Local interface for the entity bean - */ -public interface MyEntityRemote extends javax.ejb.EJBObject { - - /** - * Get the date formatted as string. - * @return the date as string - */ - String getNumber() throws RemoteException; - - /** - * Set the date formatted as string - * @param number the date as string - */ - void setNumber(String number) throws RemoteException; - - /** - * The JOnAS node name where the entity bean is created - * @return JOnAS node name - */ - String getJOnASName() throws RemoteException; - - /** - * Get the JOnAS node name of the entity bean - * @param number JOnAS node name - */ - void setJOnASName(String name) throws RemoteException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java deleted file mode 100644 index 761e60aca1..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyEntitySLR.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EntityContext; - -import org.ow2.jonas.lib.bootstrap.JProp; - -/** - * Implementation of the entity bean - * @author goebelg - */ -public abstract class MyEntitySLR implements javax.ejb.EntityBean { - - /** - * The JOnAS instance name where the bean is executed - */ - private String jonasInstanceName = "unknown"; - - /** - * Creation of the entity bean - * @param number the primary key -> date.getTime() as string of creation - * @return the entity bean - * @throws CreateException CreateException - */ - public Object ejbCreate(final String number) throws CreateException { - - jonasInstanceName = "unknown"; - - try { - JProp jp = JProp.getInstance(); - jonasInstanceName = jp.getValue("jonas.name"); - setNumber(number); - setJOnASName(jonasInstanceName); - } catch (Exception e) { - System.out.println("Error while creating ejb : " + e.getMessage()); - throw new CreateException(e.toString()); - } - return null; - } - - /** - * Post create methode invoked after create methode - * @param number the pk of the entity bean - */ - public void ejbPostCreate(final String number) { - } - - /** - * ejbLoad - */ - public void ejbLoad() { - } - - /** - * ejbStore - */ - public void ejbStore() { - } - - /** - * Activation of the ejb - */ - public void ejbActivate() { - } - - /** - * Passivate the ejb - */ - public void ejbPassivate() { - } - - /** - * Removes the ejb - */ - public void ejbRemove() { - } - - /** - * Set the EntityContext - * @param ec entity context - */ - public void setEntityContext(final EntityContext ec) { - } - - /** - * Unsets the EntityContext - */ - public void unsetEntityContext() { - } - - /** - * Returns the time when the bean was created - * @return The time when the bean was created - */ - public abstract String getNumber() throws RemoteException; - - /** - * Sets the time when the bean was created - * @param number The time when the bean was created - */ - public abstract void setNumber(String number)throws RemoteException; - - /** - * Returns the name of the JOnAS instance - * @return Name of the JOnAS instance where the entity bean was created - */ - public abstract String getJOnASName()throws RemoteException; - - /** - * sets the name of the JOnAS instance - * @param name Name of the JOnAS instance where the entity bean was created - */ - public abstract void setJOnASName(String name)throws RemoteException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java deleted file mode 100644 index b974638aff..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyException.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - - -/** - * @author - * application exception - */ -public class MyException extends Exception { - - /** - * UID - */ - private static final long serialVersionUID = 110L; - - - /** - * Default Constructor - * - */ - public MyException() { - super(); - } - - /** - * Constructor - * @param msg message associated with the exception - */ - public MyException(String msg) { - super(msg); - } - -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java deleted file mode 100644 index c8f2c5a0b2..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStateful.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * MyStateful remote interface - */ -public interface MyStateful extends EJBObject { - - /** - * Initializes the inner beans - * @throws RemoteException fi invocation fails - */ - void initialize() throws RemoteException; - - /** - * Keep the parameter in a list. Note : the parameter represents a line in - * the "session servlet output" screen - * @param s The string to keep. - * @throws RemoteException if invocation fails - */ - void log(java.lang.String s) throws RemoteException; - - /** - * Keep the parameter in a list keeping track of the JOnAS instance - * @param s The string to keep. - * @throws RemoteException if invocation fails - */ - void logWithJOnASInstance(java.lang.String s) throws RemoteException; - - /** - * Retreive all the data in the log table Note : The return value is the - * data shown in the "session servlet output" screen - * @return All the logged data - * @throws RemoteException if invocation fails - */ - java.lang.StringBuffer getLogDump() throws RemoteException; - - /** - * Retreive all the data in the log table Note : The return value is the - * text format (calls from the java client) - * @return All the logged data - * @throws RemoteException if invocation fails - */ - java.lang.StringBuffer getLogTextDump() throws RemoteException; - - - /** - * Set the http sessionid of the caller. - * @param s The sessionid of the caller. - * @throws RemoteException if invocation fails - */ - void setHTTPSessionId(java.lang.String s) throws RemoteException; - - /** - * Get the stored http sessionid of the caller. - * @return The stored sessionid. - * @throws RemoteException if invocation fails - */ - java.lang.String getHTTPSessionId() throws RemoteException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java deleted file mode 100644 index cacc4a409c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulHome.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean MyStateful - */ -public interface MyStatefulHome extends EJBHome { - - /** - * Creation of the Stateful session bean - * @return the stateful session bean - * @throws CreateException if creation fails - * @throws RemoteException if invocation fails - */ - MyStateful create() throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java deleted file mode 100644 index 6a5802632a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInner.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - - -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ -public class MyStatefulInner implements SessionBean, SessionSynchronization { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * After the transaction begun - */ - public void afterBegin() { - logger.log(BasicLevel.DEBUG, "afterBegin"); - } - - /** - * before the commit is executed - */ - public void beforeCompletion() { - logger.log(BasicLevel.DEBUG, "beforeCompletion"); - } - - /** - * after the commit or rollback - * @param committed true -> commit, false -> rollback - */ - public void afterCompletion(boolean committed) { - logger.log(BasicLevel.DEBUG, "afterCompletion: " + committed); - } - - /** - * Set the session context - * @param ctx the session context - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.ow2.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, "setSessionContext"); - } - - /** - * removes the ejb - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, "ejbRemove"); - } - - /** - * creation of the ejb - */ - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, "ejbCreate()->" + this.toString()); - } - - /** - * Passivate of the ejb - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, "ejbPassivate"); - } - - /** - * activation of the ejb - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, "ejbActivate"); - } - - private int count = 0; - - private transient boolean isModified = true; - - public void increment() { - count++; - isModified = true; - } - - public int getCount() { - return count; - } - - /** - * The logger - */ - private static Logger logger = null; - - public boolean isModified() { - boolean result = isModified; - isModified = false; - - return result; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java deleted file mode 100644 index 4634af867f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocal.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import javax.ejb.EJBLocalObject; - -/** - * MyStateful local interface - */ -public interface MyStatefulInnerLocal extends EJBLocalObject { - void increment(); - int getCount(); -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java deleted file mode 100644 index cb238e174c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulInnerLocalHome.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; - -/** - * Home interface for the bean MyStateful - */ -public interface MyStatefulInnerLocalHome extends EJBLocalHome { - - /** - * Creation of the Stateful session bean - * @return the stateful session bean - * @throws CreateException if creation fails - * @throws RemoteException if invocation fails - */ - MyStatefulInnerLocal create() throws CreateException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java deleted file mode 100644 index 002659f05c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/beans/samplecluster2/MyStatefulSFR.java +++ /dev/null @@ -1,397 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2; - - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.Log; - -/** - * - */ -public class MyStatefulSFR implements SessionBean, SessionSynchronization { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * After the transaction begun - */ - public void afterBegin() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * before the commit is executed - */ - public void beforeCompletion() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * after the commit or rollback - * @param committed true -> commit, false -> rollback - */ - public void afterCompletion(final boolean committed) { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Set the session context - * @param ctx the session context - */ - public void setSessionContext(final SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.ow2.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * removes the ejb - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * creation of the ejb - * @throws RemoteException - */ - public void ejbCreate() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - creatorJonasInstanceName = "unknown"; - - try { - JProp jp = JProp.getInstance(); - creatorJonasInstanceName = jp.getValue("jonas.name"); - log = new ArrayList(MAXSIZE); - logger.log(BasicLevel.DEBUG, "ejbCreate()->" + this.toString()); - isModified = true; - } catch (Exception e) { - logger.log(BasicLevel.FATAL, "Ejb create Exception: " + e.getMessage()); - throw new RemoteException("Ejb create Exception: " , e); - } - } - - /** - * Passivate of the ejb - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * activation of the ejb - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Initializes the inner beans - * @throws RemoteException - */ - public void initialize() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - localStateful = createLocalStateful(); - Date date = new Date(); - localEntity = createEntity(Long.toString(date.getTime())); - isModified = true; - } - - /** - * Keep the parameter in a list. Note : the parameter represents a line in - * the "session servlet output" screen - * @param s The string to keep. - * @throws RemoteException - * @throws RemoteException - */ - public void log(final java.lang.String s) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - if (log.size() == MAXSIZE) { - Iterator iter = log.iterator(); - iter.next(); - iter.remove(); - } - - log.add(s); - - // Call local stateful - getLocalStateful().increment(); - - isModified = true; - } - - /** - * Keep the parameter in a list with the source node - * @param s The string to keep. - * @throws RemoteException - * @throws RemoteException - */ - public void logWithJOnASInstance(final java.lang.String s) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - if (log.size() == MAXSIZE) { - Iterator iter = log.iterator(); - iter.next(); - iter.remove(); - } - - log.add("JOnAS instance=" + creatorJonasInstanceName + " - " + s); - - // Call local stateful - getLocalStateful().increment(); - - isModified = true; - } - /** - * Retreive all the data in the log table Note : The return value is the - * data shown in the "session servlet output" screen - * @return All the logged data - * @throws RemoteException - */ - public java.lang.StringBuffer getLogDump() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - StringBuffer sb = new StringBuffer(); - sb.append("JOnAS instance="); - sb.append(creatorJonasInstanceName); - sb.append(" ; EJB="); - sb.append(this.toString()); - sb.append("\n"); - sb.append("Owner: "); - sb.append(callerHTTPSessionId); - sb.append("\n"); - - sb.append("Inner count: "); - sb.append(getLocalStateful().getCount()); - sb.append("\n"); - - sb.append("Local entity: "); - sb.append(getLocalEntity().getNumber()); - sb.append("\n"); - - Iterator iter = log.iterator(); - - sb.append(""); - while (iter.hasNext()) { - sb.append(iter.next()); - } - sb.append("
servlet running onstateless bean created onstateless bean total callsentity bean created on
"); - - logger.log(BasicLevel.INFO, sb.toString()); - return sb; - } - - /** - * Retreive all the data in the log table Note : The return value is the - * text format (calls from the java client) - * @return All the logged data - * @throws RemoteException - */ - public java.lang.StringBuffer getLogTextDump() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - StringBuffer sb = new StringBuffer(); - sb.append("JOnAS instance="); - sb.append(creatorJonasInstanceName); - sb.append(" ; EJB="); - sb.append(this.toString()); - sb.append("\n"); - - sb.append("Inner count: "); - sb.append(getLocalStateful().getCount()); - sb.append("\n"); - - sb.append("Local entity: "); - sb.append(getLocalEntity().getNumber()); - sb.append("\n"); - - Iterator iter = log.iterator(); - int i = 1; - sb.append("Log entries -> \n"); - while (iter.hasNext()) { - sb.append(" " + i + " : "); - sb.append((String) iter.next()); - sb.append("\n"); - i++; - } - sb.append("End\n"); - - logger.log(BasicLevel.INFO, sb.toString()); - return sb; - } - - /** - * Set the http sessionid of the caller. - * @param s The sessionid of the caller. - * @throws RemoteException - */ - public void setHTTPSessionId(final java.lang.String s) { - logger.log(BasicLevel.DEBUG, ""); - callerHTTPSessionId = s; - - isModified = true; - } - - /** - * Get the stored http sessionid of the caller. - * @return The stored sessionid. - * @throws RemoteException - */ - public java.lang.String getHTTPSessionId() { - logger.log(BasicLevel.DEBUG, ""); - return callerHTTPSessionId; - } - - /** - * The JOnAS node name where the bean is executed - * the field is transient because we don't want to passivate or replicate it - */ - private transient String creatorJonasInstanceName = "unknown"; - - /** - * The logger - */ - private static Logger logger = null; - - - /** - * The maximum number of values to conserve - */ - private static final int MAXSIZE = 20; - - /** - * The log output - */ - private ArrayList log = null; - - /** - * caller http session id - */ - private String callerHTTPSessionId = null; - - private MyStatefulInnerLocal localStateful = null; - - private MyEntityLocal localEntity = null; - - private transient boolean isModified = true; - - /** - * Creates a new Entity bean with the time as parameter - * @param valeur The current time as string - * @return A new Entity Bean - */ - private MyStatefulInnerLocal createLocalStateful() throws RemoteException { - InitialContext cntx; - MyStatefulInnerLocal result = null; - try { - cntx = new InitialContext(); - MyStatefulInnerLocalHome statefulHome = (MyStatefulInnerLocalHome) cntx.lookup("MyStatefulInnerHome_L"); - result = statefulHome.create(); - } catch (NamingException e) { - logger.log(BasicLevel.FATAL, "Naming exception : " + e.getMessage()); - throw new RemoteException("Naming exception : " + e.getMessage()); - } catch (CreateException e) { - logger.log(BasicLevel.FATAL, "Create exception : " + e.getMessage()); - throw new RemoteException("Create exception : " + e.getMessage()); - } - return result; - } - - /** - * Returns the local stateful bean - * @return the local stateful bean - */ - private MyStatefulInnerLocal getLocalStateful() throws RemoteException { - if (localStateful == null) { - localStateful = createLocalStateful(); - isModified = true; - } - return localStateful; - } - /** - * Creates a new Entity bean with the time as parameter - * @param valeur The current time as string - * @return A new Entity Bean - */ - private MyEntityLocal createEntity(final String valeur) throws RemoteException { - InitialContext cntx; - MyEntityLocal result = null; - try { - cntx = new InitialContext(); - MyEntityLocalHome entityHome = (MyEntityLocalHome) cntx.lookup("MyEntityHome_L"); - result = entityHome.create(valeur); - } catch (NamingException e) { - logger.log(BasicLevel.FATAL, "Naming exception : " + e.getMessage()); - throw new RemoteException("Naming exception : " + e.getMessage()); - } catch (CreateException e) { - logger.log(BasicLevel.FATAL, "Create exception : " + e.getMessage()); - throw new RemoteException("Create exception : " + e.getMessage()); - } - return result; - } - - /** - * Returns the local entity bean - * @return the local entity bean - */ - private MyEntityLocal getLocalEntity() throws RemoteException { - if (localEntity == null) { - Date date = new Date(); - localEntity = createEntity(Long.toString(date.getTime())); - isModified = true; - } - return localEntity; - } - - public boolean isModified() { - boolean result = isModified; - isModified = false; - return result; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java deleted file mode 100644 index b49f08fbba..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientBase.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import java.io.FileOutputStream; -import java.io.PrintStream; - -public class ClientBase { - - /** - * Iteration number - */ - private static final int ITERATION_NB = 50; - - /** - * Default time to sleep. - */ - private static final long TIME2SLEEP = 10000; - - /** - * Output to be used. - */ - protected PrintStream out = null; - /** - * the name of the client. - */ - protected String clientName = "JOnAS Client for cluster-j2ee14"; - - /** - * Time to sleep each 10 iterations. - */ - protected long time2sleep = 10000; - - /** - * Iterations number. - */ - protected int iterations = ITERATION_NB; - - public ClientBase() { - } - - public ClientBase(final String[] args) { - initArgs(args); - } - - private void initArgs(final String[] args) { - out = System.out; - String url = null; - if(args != null && args.length != 0) { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - if("-out".equals(arg)) { - url = args[++argn]; - continue; - }else if ("-clientName".equals(arg)) { - clientName = args[++argn]; - out.println("Client name set to : " + clientName); - continue; - }else if ("-time2sleep".equals(arg)) { - String time = args[++argn]; - try { - time2sleep = Long.parseLong(time); - } catch (NumberFormatException e) { - time2sleep = TIME2SLEEP; - } - out.println("Time to sleep set to : " + time2sleep); - continue; - }else if ("-iterations".equals(arg)) { - String it = args[++argn]; - try { - iterations = Integer.parseInt(it); - } catch (Exception e) { - // TODO: handle exception - iterations = ITERATION_NB; - } - out.println("Number of iterations set to : " + iterations); - continue; - } - } - } - if (url != null) { - initOut(url); - } - } - /** - * Initializes client output. - * @param url Stringified url of the client output file. - */ - private void initOut(final String url) { - try { - FileOutputStream file = new FileOutputStream(url, true); - out.println("Initializing output '" + url + "' for " + clientName); - out = new PrintStream(file, true); - } catch (Exception e) { - out.println("Unable to initialize output for " + clientName + " because : " + e); - } - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java deleted file mode 100644 index 7925283950..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientException.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyException; - - -/** - * Fat client : - * - get an exception - */ -public class ClientException extends ClientBase { - /** - * Private constructor for utility class - * - */ - private ClientException() { - } - /** - * Contructor. - * @param args : arguments. - */ - private ClientException(final String[] args) { - super(args); - } - /** - * Starts the client. - * @return 0 if ok. - */ - private int start() throws Exception { - out.println(clientName + " : starting ..."); - out.println("------------------------------------------"); - MyEjb1Home home = ClientUtility.getMyEjb1Home(); - out.println("Home retrieved -> " + home); - MyEjb1 bean = ClientUtility.getMyEjb1Bean(home); - out.println("Bean created -> " + bean); - out.println("------------------------------------------"); - - - try { - out.println("Throw an exception at the server side"); - bean.throwMyException(); - } catch (MyException e) { - out.println("MyException caught : invocation successful"); - } catch (Exception e) { - out.println("Invocation failed because : " + e); - out.println("Client KO. Exiting."); - out.close(); - throw e; - } - - out.println(); - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - - } - /** - * Main method - * @param args arguments of the client - * @throws Exception any. - */ - public static int main(final String[] args) throws Exception { - ClientException client = new ClientException(args); - return client.start(); - - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java deleted file mode 100644 index 5083c985c2..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientFOSFSB.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulHome; - - -/** - * Fat client : - * - test Fail Over of the SFSB - */ -public class ClientFOSFSB extends ClientBase { - - /** - * Default constructor. - */ - public ClientFOSFSB() { - } - - /** - * Constructor. - * @param args arguments. - */ - public ClientFOSFSB(final String[] args) { - super(args); - } - /** - * Starts the client. - * @return 0 if ok. - * @throws Exception any. - */ - private int start() throws Exception { - out.println(clientName + " : starting..."); - out.println("------------------------------------------"); - // get home - MyStatefulHome home = ClientUtility.getMyStatefulHome(); - out.println("Home retrieved -> " + home); - - // get primary remote - MyStateful bean = ClientUtility.getMyStatefulBean(home); - out.println("Bean created -> " + bean); - out.println("------------------------------------------"); - - for (int i = 0; i < iterations; i++) { - try { - - String l = "log entry " + i; - // add in the bean state - bean.logWithJOnASInstance(l); - - out.println("Add " + l); - - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Get the log entries from the bean state"); - out.println("------------------------------------------"); - StringBuffer sb = bean.getLogTextDump(); - out.println(sb); - - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 + " s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - } - - } catch (Exception e) { - out.println("exception occured " + e); - out.close(); - throw e; - } - } - try { - bean.remove(); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - out.println(); - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - } - /** - * Main method - * @param args arguments of the client - * @throws Exception - */ - public static int main(final String[] args) throws Exception { - ClientFOSFSB client = new ClientFOSFSB(args); - return client.start(); - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java deleted file mode 100644 index 99028330f8..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBHome.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import java.util.Properties; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; - - -/** - * Fat client : - * - access to a SSB - * - LB at the home, remote - */ -public class ClientLBHome extends ClientBase { - - public ClientLBHome() { - } - - - public ClientLBHome(final String[] args) { - super(args); - } - - /** - * Starts the client. - * @return 0 if ok. - * @throws Exception any. - */ - private int start() throws Exception { - for (int i = 0; i < iterations; i++) { - try { - out.println(clientName + " : starting..."); - out.println("------------------------------------------"); - out.println("Trying to retieve Home"); - MyEjb1Home home = ClientUtility.getMyEjb1Home(); - out.println("Home retrieved -> " + home); - out.println("------------------------------------------"); - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 + " s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - } - - } catch (Exception e) { - out.println(clientName + ": KO." + e); - out.close(); - throw e; - } - out.println(); - } - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - } - - /** - * Main method - * @param args arguments of the client - * @throws Exception - */ - public static int main(final String[] args) throws Exception { - ClientLBHome client = new ClientLBHome(args); - return client.start(); - - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java deleted file mode 100644 index b2eb209950..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBLookup.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import java.util.Properties; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; - - -/** - * Fat client : - * - access to a SSB - * - LB at the lookup, home, remote - */ -public class ClientLBLookup extends ClientBase { - - /** - * Default constructor. - */ - public ClientLBLookup() { - // TODO Auto-generated constructor stub - } - /** - * Constructor using arguments. - * @param args the arguments. - */ - public ClientLBLookup(final String[] args) { - super(args); - } - /** - * Starts the client. - * @return 0 if ok. - * @throws Exception any. - */ - private int start() throws Exception { - out.println(clientName + ": starting..."); - out.println("------------------------------------------"); - - for (int i = 0; i < iterations ; i++) { - try { - - MyEjb1Home home = ClientUtility.getMyEjb1Home(); - out.println("Home retrieved -> " + home); - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 + " s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - } - - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - out.println(); - } - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - } - - /** - * Main method - * @param args arguments of the client - * @throws Exception - */ - public static int main(final String[] args) throws Exception { - ClientLBLookup client = new ClientLBLookup(args); - return client.start(); - - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java deleted file mode 100644 index 73d3d67732..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientLBRemote.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import java.util.Properties; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; - - -/** - * Fat client : - * - access to a SSB - * - LB at the remote - */ -public class ClientLBRemote extends ClientBase { - /** - * Constructor using arguments. - * @param args arguments. - */ - public ClientLBRemote(final String[] args) { - super(args); - } - /** - * Starts the client. - */ - private int start() throws Exception { - String jonasEJBServer = null; - String ejbTotalCallsCount = null; - String ejbEntityCreated = null; - Properties prop = null; - out.println(clientName + ": starting..."); - out.println("------------------------------------------"); - MyEjb1Home home = ClientUtility.getMyEjb1Home(); - out.println("Home retrieved -> " + home); - MyEjb1 bean = ClientUtility.getMyEjb1Bean(home); - out.println("Bean created -> " + bean); - out.println("------------------------------------------"); - for (int i = 0; i < iterations; i++) { - try { - prop = bean.getInfoProps(); - out.println("Bean invoked"); - jonasEJBServer = prop.getProperty("EJB server"); - ejbTotalCallsCount = prop.getProperty("EJB total calls"); - ejbEntityCreated = prop.getProperty("EJB server entity created"); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - - out.println("Calls=" + i + " - EJB served by jonas=" + jonasEJBServer + " - EJB total calls=" + ejbTotalCallsCount + " - ejbEntityCreated=" + ejbEntityCreated); - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 + " s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - } - out.println(); - } - try { - bean.remove(); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - throw e; - } - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - - } - /** - * Main method - * @param args arguments of the client - * @throws Exception - */ - public static int main(final String[] args) throws Exception { - ClientLBRemote client = new ClientLBRemote(args); - return client.start(); - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java deleted file mode 100644 index c3a814a00b..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/ClientUtility.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.client; - -import java.rmi.RemoteException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulHome; - - -/** - * Fat client : generic methods - */ -public class ClientUtility { - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientUtility() { - } - - /** - * @return MyEjb1 home object - * @throws Exception any. - */ - protected static MyEjb1Home getMyEjb1Home() throws Exception { - - MyEjb1Home home = null; - Context ctx = null; - - try { - ctx = new InitialContext(); - } catch (NamingException e) { - throw new Exception("Exception in getMyEjb1Home. Unable to create context ", e); - } - - // Lookup bean home - String bName = "MyEjb1Home"; - try { - home = (MyEjb1Home) PortableRemoteObject.narrow(ctx.lookup(bName), MyEjb1Home.class); - ctx.close(); - } catch (Exception e) { - //e.printStackTrace(); - //System.exit(2); - throw new Exception("Exception in getMyEjb1Home. Unable to get home reference ", e); - } - - return home; - } - /** - * Gets the entity bean reference. - * @param home home object - * @return MyEjb1 remote object - * @throws Exception any. - */ - protected static MyEjb1 getMyEjb1Bean(final MyEjb1Home home) throws Exception { - - MyEjb1 bean = null; - - try { - bean = home.create(); - } catch (Exception e) { - e.printStackTrace(); - throw new Exception("Exception in getMyEjb1Bean. Unable to invoke home.create() ", e); - //System.exit(2); - } - return bean; - } - - /** - * Gets home for stateful bean. - * @return MyStateful home object - * @throws Exception any. - */ - protected static MyStatefulHome getMyStatefulHome() throws Exception { - MyStatefulHome home = null; - Context ctx = null; - - try { - ctx = new InitialContext(); - } catch (NamingException e) { - throw new RemoteException("Exception in getMyStatefulHome. Unable to create context ", e); - } - - // Lookup bean home - String bName = "MyStatefulHome"; - try { - home = (MyStatefulHome) PortableRemoteObject.narrow(ctx.lookup(bName), MyStatefulHome.class); - ctx.close(); - } catch (Exception e) { - //System.exit(2); - throw new Exception("Exception in getMyStatefulHome. Unable get home reference ", e); - } - return home; - } - /** - * Gets the stateful bean from home. - * @param home home object - * @return MyStateful remote object - * @throws Exception any. - */ - protected static MyStateful getMyStatefulBean(final MyStatefulHome home) throws Exception { - - MyStateful bean = null; - - try { - bean = home.create(); - } catch (Exception e) { - //System.exit(2); - throw new Exception("Exception in getMyStatefulHome. Unable invoke home.create()", e); - } - return bean; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README deleted file mode 100644 index 4dc3e0c5ff..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/client/README +++ /dev/null @@ -1,40 +0,0 @@ - =============================== -| SampleCluster2 | - =============================== - -Date: 06/03/2006 -Version: v1.1 - -CMI client ----------- -Examples of a rich java client using the CMI protocol. - -Running --------- -1) cd $JONAS_ROOT/examples/cluster-j2ee14 -2) create the directory './clientConfig' -3) copy $JONAS_ROOT/conf/carol.properties to '/clientConfig' -4) configure a carol.properties file pointing to a registry within a cluster in ./clientConfig/carol.properties. - For instance : - -carol.protocols=cmi -carol.cmi.url=cmi://dhcp0521:2032,dhcp0521:2043 -carol.cmi.multicast.address=224.0.0.35:35467 -carol.cmi.multicast.groupname=G1 -carol.cmi.rr.factor=100 -carol.cmi.stub.debug=false - -5) run the clients with the following commands : -# for testing the load-balancing at the lookup -src/client/clientLBLookup.sh - -# for testing the load-balancing at the home interface -src/client/clientLBHome.sh - -# for testing the load-balancing at the remote interface -src/client/clientLBRemote.sh - -# for testing the exception retrieving -src/client/clientException.sh - -================================================================================= diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java deleted file mode 100644 index 22e820fec0..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/AbstractServlet.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:AbstractServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.j2ee14.servlets; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.servlet.http.HttpServlet; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1Home; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStatefulHome; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.Log; - -/** - * @author goebelg - * - * Servlet super class - */ -public abstract class AbstractServlet extends HttpServlet { - - /** - * Servlet initialization - */ - @Override - public void init() { - - if (logger == null) { - logger = Log.getLogger("org.ow2.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Creates a new Statefull session bean. - * @return A new session bean - */ - public MyStateful createStatefulEJB() { - Context ctx = null; - MyStatefulHome home = null; - MyStateful bean = null; - - try { - ctx = new InitialContext(); - } catch (NamingException e) { - e.printStackTrace(); - } - - // Lookup bean home - String bName = "java:comp/env/ejb/MyStatefulHome"; - try { - home = (MyStatefulHome) PortableRemoteObject.narrow(ctx.lookup(bName), MyStatefulHome.class); - bean = home.create(); - bean.initialize(); - } catch (Exception e) { - e.printStackTrace(); - } - return bean; - } - - /** - * Creates a new stateless session bean. - * @return a new stateless session bean - */ - public MyEjb1 theEJB() { - Context ctx = null; - MyEjb1Home home = null; - MyEjb1 bean = null; - - try { - ctx = new InitialContext(); - } catch (NamingException e) { - e.printStackTrace(); - } - - // Lookup bean home - String bName = "java:comp/env/ejb/MyEjb1Home"; - try { - home = (MyEjb1Home) PortableRemoteObject.narrow(ctx.lookup(bName), MyEjb1Home.class); - bean = home.create(); - } catch (Exception e) { - e.printStackTrace(); - } - return bean; - } - - /** - * Retrieve the name of the JOnAS node where the servlet is executed. - * @return The JOnAS node name where the servlet is executed. - */ - public static String getMyJonasInstanceName() { - - String s = "unknown"; - try { - JProp jp = JProp.getInstance(); - s = jp.getValue("jonas.name"); - } catch (Exception e) { - e.printStackTrace(); - } - return s; - } - - /** - * Get the logger - * @return the logger - */ - public Logger getLogger() { - return logger; - } - - /** - * The logger - */ - private static Logger logger = null; -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java deleted file mode 100644 index f169de7b30..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/CheckServlet.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:CheckServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.servlets; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * @author goebelg - * - * Servlet which checks the HTTP session - */ -public class CheckServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { - - HttpSession session = req.getSession(false); - - String sessionCheckInfo = "JSESSIONID cookie absent."; - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - for (int i = 0; i < cookies.length; i++) { - if (cookies[i].getName().equals("JSESSIONID")) { - sessionCheckInfo = "JSESSIONID cookie present."; - } - } - } - - getLogger().log(BasicLevel.INFO, sessionCheckInfo); - req.setAttribute("sessionCheckInfo", sessionCheckInfo); - - // -------------- - // Write response - // -------------- - RequestDispatcher disp = req.getRequestDispatcher("../jsp/checkRsp.jsp"); - disp.forward(req, res); - - return; - } -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java deleted file mode 100644 index 0d8ad6cb21..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ExceptionServlet.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:ExceptionServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.servlets; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyException; - - - -/** - * @author goebelg Release an http session servlet - */ -public class ExceptionServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - - // creating a new stateless EJB -> EJBCreate - MyEjb1 bean = theEJB(); - try { - bean.throwMyException(); - } catch (MyException e) { - System.out.println("My Exception caught: invocation successful"); - req.setAttribute("expectedException", "OK"); - req.setAttribute("exception", e); - } catch (Exception e) { - System.out.println("Exception caught" + e); - e.printStackTrace(); - req.setAttribute("expectedException", "KO"); - req.setAttribute("exception", e); - } - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/exceptionRsp.jsp"); - disp.forward(req, res); - - return; - } -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java deleted file mode 100644 index c1cafa1510..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/ReleaseServlet.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:ReleaseServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.servlets; - -import java.io.IOException; -import java.rmi.RemoteException; - -import javax.ejb.Handle; -import javax.ejb.RemoveException; -import javax.rmi.PortableRemoteObject; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful; - -/** - * @author goebelg Release an http session servlet - */ -public class ReleaseServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - - // Get the session object to invalidate it - - HttpSession session = req.getSession(false); - String sessionToReleaseInfo = "no session to invalidate"; - if (session != null) { - sessionToReleaseInfo = "session=" + session.getId() + " invalidated"; - // Remove the SFSB if present - // Retrieve or create the Stateful EJB to log history - Handle h = (Handle) session.getAttribute("myStateful"); - if (h != null) { - MyStateful statefulBean = (MyStateful) PortableRemoteObject.narrow(h.getEJBObject(), MyStateful.class); - try { - statefulBean.remove(); - } catch (RemoteException e) { - e.printStackTrace(); - } catch (RemoveException e) { - e.printStackTrace(); - } - } - - session.invalidate(); - } - getLogger().log(BasicLevel.INFO, sessionToReleaseInfo); - req.setAttribute("sessionToReleaseInfo", sessionToReleaseInfo); - - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - Cookie ck = null; - for (int i = 0; i < cookies.length; i++) { - if (cookies[i].getName().equals("JSESSIONID")) { - ck = (Cookie) cookies[i].clone(); - ck.setMaxAge(0); - res.addCookie(ck); - } - } - } - - // -------------- - // Write response - // -------------- - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/releaseRsp.jsp"); - disp.forward(req, res); - - return; - } -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java deleted file mode 100644 index 813a46e89d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-j2ee14/src/java/org/ow2/jonas/examples/cluster/j2ee14/servlets/SessionServlet.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:SessionServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.j2ee14.servlets; - -import java.io.IOException; -import java.util.Properties; - -import javax.ejb.Handle; -import javax.rmi.PortableRemoteObject; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyEjb1; -import org.ow2.jonas.examples.cluster.j2ee14.beans.samplecluster2.MyStateful; - -/** - * @author goebelg - * - * servlet which manages the different instantiations of the ejbs - */ -public class SessionServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - String jonasEJBServer = null; - String ejbId = null; - String ejbTotalCallsCount = null; - String ejbEntityCreated = null; - Properties prop = null; - - /* - * ---------------------------------------- Update the session context - - * sessiontest.counter : number of times this servlet has been called - - * sessiontest.jonas. : counts the number of time the EJB was - * served by JOnAS instance - * ----------------------------------------- - */ - HttpSession session = req.getSession(true); - - // update sessiontest.counter - - Integer ival = (Integer) session.getAttribute("sessiontest.counter"); - if (ival == null) { // If counter is not in session, then create it - ival = new Integer(1); - } else { - ival = new Integer(ival.intValue() + 1); - } - session.setAttribute("sessiontest.counter", ival); - - // Call EJB then update sessiontest.jonas.x - - // creating a new stateless EJB -> EJBCreate - MyEjb1 bean = theEJB(); - try { - prop = bean.getInfoProps(); - jonasEJBServer = prop.getProperty("EJB server"); - ejbId = prop.getProperty("EJB id"); - ejbTotalCallsCount = prop.getProperty("EJB total calls"); - ejbEntityCreated = prop.getProperty("EJB server entity created"); - } catch (Exception e) { - e.printStackTrace(); - } - - // Retrieve or create the Stateful EJB to log history - Handle h = (Handle) session.getAttribute("myStateful"); - MyStateful statefulBean = null; - if (h == null) { - - statefulBean = createStatefulEJB(); - if (statefulBean != null) { - h = statefulBean.getHandle(); - session.setAttribute("myStateful", h); - statefulBean.setHTTPSessionId(session.getId()); - } - } else { - statefulBean = (MyStateful) PortableRemoteObject.narrow(h.getEJBObject(), MyStateful.class); - } - - if (!session.isNew()) { - session.setAttribute("sessiontest.old.EJB", session.getAttribute("sessiontest.EJB")); - session.setAttribute("sessiontest.old.WEB", session.getAttribute("sessiontest.WEB")); - } - session.setAttribute("sessiontest.EJB", jonasEJBServer); - session.setAttribute("sessiontest.WEB", getMyJonasInstanceName()); - - req.setAttribute("jonas.EJB.served.by", jonasEJBServer); - req.setAttribute("jonas.WEB.served.by", getMyJonasInstanceName()); - - session.setAttribute("sessiontest.jonas.EJB_Server", jonasEJBServer); - session.setAttribute("sessiontest.jonas.EJB_id", ejbId); - session.setAttribute("sessiontest.jonas.nb_EJB_totalCalls", ejbTotalCallsCount); - - // Log information - - getLogger().log(BasicLevel.INFO, "session=" + session.getId() + " on jonas=" + getMyJonasInstanceName() - + " - calls=" + ival + " - EJB served by jonas=" + jonasEJBServer + " - EJB total calls=" - + ejbTotalCallsCount); - - if (statefulBean != null) { - try { - statefulBean.log("" + "" + getMyJonasInstanceName() + "" + "" + jonasEJBServer - + "" + "" + ejbTotalCallsCount + "" + "" + ejbEntityCreated + "" - + ""); - } catch (Exception e) { - getLogger().log(BasicLevel.INFO, "session=" + session.getId() - + " : Exception when calling MyStateful EJB (" + e.getMessage() + ")"); - session.removeAttribute("myStateful"); - } - } - // -------------- - // Write response - // -------------- - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/sessionRsp.jsp"); - disp.forward(req, res); - - return; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt deleted file mode 100644 index 5deb5b340c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/PortConfiguration.txt +++ /dev/null @@ -1,63 +0,0 @@ - -This file shows a configuration of -- a cluster of 4 JOnAS instances running on the same machine, -- a master JOnAS instance to manage the domain, and -- a db JOnAS instance -The table below lists a possible configuration of all the ports used by those 6 JOnAS instances. -In the following configuration we will deploy the entity beans on node3 and node4. -The Web application is deployed on node1 and node2. - - __--- Node1 --- Node3 ---__ -Apache with mod_jk ---__ x __--- DB - --- Node2 --- Node4 --- - - Web Ejb - Container Container - -Note : -- You have to activate the AJP Connector (tomcat6-server.xml) for node1 and node2 -in order to be able to communicate with the mod_jk module. -Two different ports (for example 9010 and 9011) must be choosen. -Configure the mod_jk to use the 2 instances. -For further information please consult - http://jonas.objectweb.org/JONAS_5_1_0/doc/doc-en/html/clustering_guide.html -in the section -WEB clustering with Apache/Tomcat - - -- Please note that the database used to store the data of the entity beans has to be -the same on both nodes where the ejb's are deployed. -In this example we use the database HSQL mapped to the JNDI name jdbc_1. -We will use the database started by db node, therefore the url defined in -rajdbc.HSQL1.url of build-jc.properties, must be conform to the db.port defined in build-db.properties. -In this example, we have to start the DB node before the node3 and node4. - - - -FILENAME PROPERTY DB NODE1 NODE2 NODE3 NODE4 MASTER --------- -------- ----- ----- ----- ----- ----- ------ - - -jonas.properties - jonas.service.db.port 9005 xxx xxx xxx xxx xxx - - jonas.service.discovery.source.port 9888 9888 9888 9888 9888 9888 - jonas.service.discovery.greeting.port 9903 9899 9900 9901 9902 9904 - -tomcat6-server.xml - :/sampleCluster3 - ex : http://localhost:80/sampleCluster3 - -4) Stop the cluster: - -jcl4sc stop - -This allows to stop the cluster. - - -You may type jcl4sc -help to get the usage of the command. - - - ---------------------------- -Good luck!! -================================================================================= diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties deleted file mode 100644 index c59d0b2b43..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/carol.properties +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (C) 2002-2007 ObjectWeb -# -# CAROL: Common Architecture for RMI ObjectWeb Layer -# -# This library is developed inside the ObjectWeb Consortium, -# http://www.ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -------------------------------------------------------------------------- -# $Id$ -# -------------------------------------------------------------------------- - -# jonas rmi activation (iiop, irmi, jrmp) -carol.protocols=jrmp - -# RMI IRMI URL -carol.irmi.url=rmi://localhost:1099 - -# RMI JRMP URL -carol.jrmp.url=rmi://localhost:1099 - -# RMI IIOP URL -carol.iiop.url=iiop://localhost:1099 - -###################################################################### -# Advanced Configuration for IRMI -###################################################################### -# Exported objects will listen on this port for remote method -# invocations. -#A value of 0 will cause a random port to be selected. -# This is the default value. -# Warning : if the port is set (not 0) with the value 'n', be aware that -# the port 'n + 1' will be used by the JMX server. -# So, for the firewall configuration, you have to open the port numbers 'n' -# and 'n+1'. -carol.irmi.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.irmi.url property) -# Use all interfaces available [default configuration = false] -carol.irmi.interfaces.bind.single=false - -###################################################################### -# Advanced Configuration for JRMP -###################################################################### -# If true, local call with jrmp are optimized. If you get "ClassCastException -# with 2 beans in different jars, you should set it at "false". -carol.jvm.rmi.local.call=false - -# If true a local Naming context is used (to be used only with a collocated registry) -carol.jvm.rmi.local.registry=true - -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.jrmp.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.jrmp.url property) -# Use all interfaces available [default configuration = false] -carol.jrmp.interfaces.bind.single=false - - -###################################################################### -# Advanced Configuration for IIOP -###################################################################### -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.iiop.server.port=0 - -# The value of this port is used to set the SSL port of the objects listener. -# Note that this port musn't not be set to 0 as it is used for CsiV2. -# but this port is used only if SSL mode is enable. -# So by default, there is no listener on this port -# [default configuration = not used] -carol.iiop.server.sslport=2003 - -# Delegate used by JOnAS for rmi-iiop protocol -carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.registry.carol.delegate.JacORBPRODelegate - -###################################################################### -# Advanced JNDI Configuration -###################################################################### -carol.jndi.java.naming.factory.url.pkgs=org.ow2.jonas.lib.naming diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml deleted file mode 100644 index 771a2ea092..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/cmi-config.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - rmi://localhost:2032 - rmi://localhost:2043 - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties deleted file mode 100644 index c7bb2c2135..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientConfig/traceclient.properties +++ /dev/null @@ -1,43 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -#logger.org.ow2.carol.level DEBUG -#logger.org.ow2.jonas.level DEBUG diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat deleted file mode 100755 index 7a89a4d0f0..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.bat +++ /dev/null @@ -1,3 +0,0 @@ -REM set JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM set JAVA_OPTS=-Dcmi.disabled=true -jclient %JONAS_BASE%\deploy\sampleCluster3.ear -jarClient clientexception.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh deleted file mode 100755 index af35104969..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientException.sh +++ /dev/null @@ -1,3 +0,0 @@ -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient $JONAS_BASE/deploy/sampleCluster3.ear -jarClient clientexception.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat deleted file mode 100755 index 24b2acc05c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.bat +++ /dev/null @@ -1,3 +0,0 @@ -REM set JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM set JAVA_OPTS=-Dcmi.disabled=true -jclient %JONAS_BASE%\deploy\sampleCluster3.ear -jarClient clientfosfsb.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh deleted file mode 100755 index e7da982925..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientFOSFSB.sh +++ /dev/null @@ -1,3 +0,0 @@ -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient $JONAS_BASE/deploy/sampleCluster3.ear -jarClient clientfosfsb.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat deleted file mode 100755 index 027f6f777a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.bat +++ /dev/null @@ -1,3 +0,0 @@ -REM set JAVA_OPTS=-Dcmi.conf.url=clientConfig\cmi-config.xml -REM set JAVA_OPTS=-Dcmi.disabled=true -jclient %JONAS_BASE%\deploy\sampleCluster3.ear -jarClient clientlbremote.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh deleted file mode 100755 index d1997fa728..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/bin-client/clientLBRemote.sh +++ /dev/null @@ -1,3 +0,0 @@ -#export JAVA_OPTS=-Dcmi.conf.url=clientConfig/cmi-config.xml -#export JAVA_OPTS=-Dcmi.disabled=true -jclient $JONAS_BASE/deploy/sampleCluster3.ear -jarClient clientlbremote.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties deleted file mode 100644 index 7e7445b10f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.properties +++ /dev/null @@ -1,33 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): ____________________________________. -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Properties defined in this file could be customized - -# protocols for Carol (jrmp,iiop,cmi) -protocols.names=jrmp,iiop -#required JOnAS services to add to the manifest of the application. -required.services=ejb3-client \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml deleted file mode 100644 index 14af6f4794..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/build.xml +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml deleted file mode 100644 index 3ba61bffab..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/WEB-INF/web.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - sessionServlet - org.ow2.jonas.examples.cluster.javaee5.servlets.SessionServlet - - - - releaseSessionServlet - org.ow2.jonas.examples.cluster.javaee5.servlets.ReleaseServlet - - - - checkSessionServlet - org.ow2.jonas.examples.cluster.javaee5.servlets.CheckServlet - - - - exceptionServlet - org.ow2.jonas.examples.cluster.javaee5.servlets.ExceptionServlet - - - - exceptionServlet - /servlet/exception - - - - sessionServlet - /servlet/session - - - - releaseSessionServlet - /servlet/release - - - - checkSessionServlet - /servlet/check - - - - /index.html - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml deleted file mode 100644 index ec946539ca..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/application.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - Cluster Java EE Sample - Cluster Java EE Sample - - - - clientlbremote.jar - - - - clientfosfsb.jar - - - - clientexception.jar - - - - - ejb3.jar - - - - - - sampleCluster3.war - sampleCluster3 - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml deleted file mode 100644 index c3eb0b02bb..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/client.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - OW2 JOnAS :: Cluster Java EE example - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml deleted file mode 100644 index 86b086555e..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/jonas-client.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml deleted file mode 100644 index 051059f776..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/persistence.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - jdbc_1 - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml deleted file mode 100644 index 307e577c18..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/policy/round-robin-policy.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - org.ow2.cmi.lb.policy.RoundRobin - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html deleted file mode 100644 index 09bf411d3c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - sampleCluster3 - - - -

-Home of sampleCluster3

-Open a session : click here -(session servlet) -

Release a session : click here -(release servlet) -

Check a session : click here -(check servlet) -

Test the exception propagation from the server side to the client side : click here -(exception servlet) - -
  -
  -
  -
  -
  -
Sample is OK. - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp deleted file mode 100644 index 33b3d2578a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/checkRsp.jsp +++ /dev/null @@ -1,22 +0,0 @@ -<%@ page session="false" %> -<% -Cookie[] cookies = request.getCookies(); -HttpSession session = request.getSession(false); -%> - -Check session - -

check Servlet output

-<%= (session != null ? "

Logged in.

Session ID: " + session.getId() + "

" : "

No session.

") %> -<% - if ( cookies != null) - for (int i=0; i < cookies.length;i++) - out.println(cookies[i].getName()+ ": " + cookies[i].getValue() + "
"); -%> -
<%=request.getAttribute("sessionCheckInfo")%>

->go to session, -<% if (session != null) out.println("logout, ");%> ->check session, ->home. -
Sample is OK. - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp deleted file mode 100644 index 7b41603aa4..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/exceptionRsp.jsp +++ /dev/null @@ -1,13 +0,0 @@ -<%@ page session="false" %> - -Exception -

exception Servlet output

- -

-<% - - out.println("MyException caught :" + request.getAttribute("expectedException") + "
"); - out.println("Exception=" + request.getAttribute("exception") + "
"); -%> ->return to home. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp deleted file mode 100644 index 26fd17d0aa..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/releaseRsp.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%@ page session="false" %> - -<% Cookie[] cookies = request.getCookies(); %> - -Release session -

release Servlet output

- -

<%=request.getAttribute("sessionToReleaseInfo")%>

-

Cookies

-<% -if (cookies != null) { - for (int i=0; i < cookies.length;i++) - out.println(cookies[i].getName()+ ": " + cookies[i].getValue() + "
"); - out.println("
If present, the JSESSIONID cookie will be obsoleted.
"); -} else { - out.println("None."); -} -%> - -

->go to session, ->check session, ->home. -
Sample is OK. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp deleted file mode 100644 index bd62ca78ac..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/resources/web/jsp/sessionRsp.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page import="java.util.Enumeration" %> -<%@ page import="java.util.Date" %> -<%@ page import="javax.ejb.Handle" %> -<%@ page import="org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.*" %> -<%@ page import="javax.rmi.PortableRemoteObject" %> -<% - Date dc = new Date(session.getCreationTime()); - Date da = new Date(session.getLastAccessedTime()); -%> -SessionServlet Output - -

SessionServlet Output

-

getRequestURL <%=request.getRequestURL()%> - for the <%=session.getAttribute("sessiontest.counter")%> times.
-from <%=request.getRemoteAddr()%>(user is <%=request.getRemoteUser()%>) -To server <%=request.getServerName()%> on port <%=request.getServerPort()%>. -

-

Request path:
-Servlet executed on JOnAS instance (<%=request.getAttribute("jonas.WEB.served.by")%>)
-Stateless EJB executed on JOnAS instance (<%=request.getAttribute("jonas.EJB.served.by")%>)
- -

-
->Ask again, ->release session, ->check session, ->home.
- -Session Data: -New Session: <%=session.isNew()%> -
Session ID: <%=session.getId()%> -
Creation Time: <%=dc.toString()%> -
Last Accessed Time: <%=da.toString()%> -

-

-<%
-//
-// getHandle() doesn't work
-// see bug http://jira.easybeans.org/browse/EZB-314
-//
-//Handle h = (Handle) session.getAttribute("myStateful");
-//if (h != null) {
-//  MyStateful bean = null;
-//  try {
-//    bean = (MyStateful) PortableRemoteObject.narrow (h.getEJBObject() , MyStateful.class);
-//    out.print(bean.getLogDump());
-//  } catch (Exception e) {
-//    out.print(e.getMessage());
-//  }
-//}
-
-
-MyStateful bean = (MyStateful) session.getAttribute("myStateful");
-if (bean != null) {
-  try {
-  out.print(bean.getLogDump());
-  } catch (Exception e) {
-    out.print(e.getMessage());
-  }
-}
-%>
-
-Sample is OK. - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml deleted file mode 100644 index 75392e200b..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/easybeans.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - MyStatelessBean - - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - MyStatefulBean - - org.ow2.cmi.lb.policy.RoundRobin - org.ow2.cmi.lb.strategy.LocalPreference - - - - - MyStatefulInnerBean - - - - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml deleted file mode 100644 index 92806c9133..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/etc/xml/ejb-jar.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - Describe here the session bean MyStatelessHome - MyStatelessHome - MyStatelessBean - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatelessBean - Stateless - Container - - - - Describe here the session bean MyStatefulHome - MyStatefulHome - MyStatefulBean - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatefulBean - Stateful - Container - - - - Describe here the session bean MyStatefulInnerHome - MyStatefulInnerHome - MyStatefulInnerBean - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatefulInner - org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatefulInnerBean - Stateful - Container - - - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf deleted file mode 100644 index 9e58496394..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-jk.conf +++ /dev/null @@ -1,23 +0,0 @@ - -LoadModule jk_module modules/mod_jk.so -# Location of the worker file -JkWorkersFile conf/jk\workers.properties -# Location of the log file -JkLogFile conf/jk\mod_jk.log -# Log level : debug, info, error or emerg -JkLogLevel emerg -# Shared Memory Filename ( Only for Unix platform ) required by loadbalancer -JkShmFile conf/jk\jk.shm -# Assign specific URL to Tomcat workers -JkMount /sampleCluster3 loadbalancer -JkMount /sampleCluster3/* loadbalancer -# A mount point to the status worker -JkMount /jkmanager jkstatus -JkMount /jkmanager/* jkstatus -# Enable the Jk manager access only from localhost - - JkMount jkstatus - Order deny,allow - Deny from all - Allow from 127.0.0.1 - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml deleted file mode 100644 index c1060a8ca7..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/tomcat6-mod_jk.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties deleted file mode 100644 index 9738a3a777..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/example-config/workers.properties +++ /dev/null @@ -1,42 +0,0 @@ - -# ----------------------- -# List the workers name -# ----------------------- -worker.list=loadbalancer,jkstatus - -# ----------------------- -# worker1 -# ----------------------- -worker.worker1.port=9010 -worker.worker1.host=localhost -worker.worker1.type=ajp13 -# Load balance factor -worker.worker1.lbfactor=1 -# Define prefered failover node for worker1 -#worker.worker1.redirect=worker2 -# Disable worker1 for all requests except failover -#worker.worker1.disabled=True - -# ----------------------- -# worker2 -# ----------------------- -worker.worker2.port=9011 -worker.worker2.host=localhost -worker.worker2.type=ajp13 -# Load balance factor -worker.worker2.lbfactor=1 -# Define prefered failover node for worker2 -#worker.worker2.redirect=worker2 -# Disable worker2 for all requests except failover -#worker.worker2.disabled=True - -# ----------------------- -# Load Balancer worker -# ----------------------- -worker.loadbalancer.type=lb -worker.loadbalancer.balanced_workers=worker1,worker2 -worker.loadbalancer.sticky_session=false -# ----------------------- -# jkstatus worker -# ----------------------- -worker.jkstatus.type=status diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java deleted file mode 100644 index 0b1643149c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyException.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - - -/** - * @author - * application exception - */ -public class MyException extends Exception { - - /** - * UID - */ - private static final long serialVersionUID = 110L; - - - /** - * Default Constructor - * - */ - public MyException() { - super(); - } - - /** - * Constructor - * @param msg message associated with the exception - */ - public MyException(final String msg) { - super(msg); - } - -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java deleted file mode 100644 index b6357044b7..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateful.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - -import javax.ejb.Handle; - - -/** - * MyStateful remote interface - */ -public interface MyStateful { - - /** - * Initializes the inner beans - */ - void initialize(); - - /** - * Keep the parameter in a list. Note : the parameter represents a line in - * the "session servlet output" screen - * @param s The string to keep. - */ - void log(java.lang.String s); - - /** - * Keep the parameter in a list keeping track of the JOnAS instance - * @param s The string to keep. - */ - void logWithJOnASInstance(java.lang.String s); - - /** - * Retreive all the data in the log table Note : The return value is the - * data shown in the "session servlet output" screen - * @return All the logged data - */ - java.lang.StringBuffer getLogDump(); - - /** - * Retreive all the data in the log table Note : The return value is the - * text format (calls from the java client) - * @return All the logged data - */ - java.lang.StringBuffer getLogTextDump(); - - - /** - * Set the http sessionid of the caller. - * @param s The sessionid of the caller. - */ - void setHTTPSessionId(java.lang.String s); - - /** - * Get the stored http sessionid of the caller. - * @return The stored sessionid. - */ - java.lang.String getHTTPSessionId(); - - /** - * - * @return handle on the SFSB - */ - Handle getMyHandle(); - - /** - * Cleanup/Remove - */ - void cleanup(); - - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java deleted file mode 100644 index ba939dc5a5..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulBean.java +++ /dev/null @@ -1,375 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.ejb.Handle; -import javax.ejb.Remote; -import javax.ejb.Remove; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; -import javax.ejb.Stateful; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -import org.ow2.cmi.annotation.Cluster; -import org.ow2.cmi.annotation.Policy; -import org.ow2.cmi.annotation.Strategy; -import org.ow2.cmi.lb.policy.RoundRobin; -import org.ow2.cmi.lb.strategy.LocalPreference; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * - */ -@Stateful -@Remote(MyStateful.class) -@Cluster(name="cluster-javaee5", isReplicated=false) -@Policy(RoundRobin.class) -@Strategy(LocalPreference.class) -public class MyStatefulBean implements SessionSynchronization,MyStateful { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * Session context - */ - @Resource - private SessionContext sessionContext = null; - /** - * The logger. - */ - private Log logger = LogFactory.getLog(MyStatefulBean.class); - - /** - * The JOnAS node name where the bean is executed - * the field is transient because we don't want to passivate or replicate it - */ - private transient String creatorJonasInstanceName = "unknown"; - - /** - * The maximum number of values to conserve - */ - private static final int MAXSIZE = 20; - - /** - * The log output - */ - private ArrayList log = null; - - /** - * caller http session id - */ - private String callerHTTPSessionId = null; - - @EJB - private MyStatefulInner localStateful = null; - - private Node localEntity = null; - - private transient boolean isModified = true; - - /** - * After the transaction begun - */ - public void afterBegin() { - logger.debug(""); - } - - /** - * before the commit is executed - */ - public void beforeCompletion() { - logger.debug(""); - } - - /** - * after the commit or rollback - * @param committed true -> commit, false -> rollback - */ - public void afterCompletion(final boolean committed) { - logger.debug(""); - } - - /** - * Init - */ - @PostConstruct - public void init() { - creatorJonasInstanceName = "unknown"; - try { - JProp jp = JProp.getInstance(); - creatorJonasInstanceName = jp.getValue("jonas.name"); - } catch (Exception e) { - logger.fatal(e.getMessage(), e); - } - - log = new ArrayList(MAXSIZE); - logger.debug("->" + this.toString()); - isModified = true; - } - - /** - * Initializes the inner beans - */ - public void initialize() { - logger.debug(""); - Date date = new Date(); - isModified = true; - } - - /** - * Keep the parameter in a list. Note : the parameter represents a line in - * the "session servlet output" screen - * @param s The string to keep. - */ - public void log(final java.lang.String s) { - logger.debug(""); - - if (log.size() == MAXSIZE) { - Iterator iter = log.iterator(); - iter.next(); - iter.remove(); - } - - log.add(s); - - // Call local stateful - getLocalStateful().increment(); - - isModified = true; - } - - /** - * Keep the parameter in a list with the source node - * @param s The string to keep. - * @throws RemoteException - */ - public void logWithJOnASInstance(final java.lang.String s) { - logger.debug(""); - - if (log.size() == MAXSIZE) { - Iterator iter = log.iterator(); - iter.next(); - iter.remove(); - } - - log.add("JOnAS instance=" + creatorJonasInstanceName + " - " + s); - - // Call local stateful - getLocalStateful().increment(); - - isModified = true; - } - /** - * Retreive all the data in the log table Note : The return value is the - * data shown in the "session servlet output" screen - * @return All the logged data - */ - public java.lang.StringBuffer getLogDump() { - logger.debug(""); - - StringBuffer sb = new StringBuffer(); - sb.append("JOnAS instance="); - sb.append(creatorJonasInstanceName); - sb.append(" ; EJB="); - sb.append(this.toString()); - sb.append("\n"); - sb.append("Owner: "); - sb.append(callerHTTPSessionId); - sb.append("\n"); - - sb.append("Inner count: "); - sb.append(getLocalStateful().getCount()); - sb.append("\n"); - - sb.append("Local entity: "); - sb.append(getLocalEntity().getName()); - sb.append("\n"); - - Iterator iter = log.iterator(); - - sb.append(""); - while (iter.hasNext()) { - sb.append(iter.next()); - } - sb.append("
servlet running onstateless bean created onstateless bean total calls
"); - - logger.info(sb.toString()); - return sb; - } - - /** - * Retreive all the data in the log table Note : The return value is the - * text format (calls from the java client) - * @return All the logged data - */ - public java.lang.StringBuffer getLogTextDump() { - logger.debug(""); - - StringBuffer sb = new StringBuffer(); - sb.append("JOnAS instance="); - sb.append(creatorJonasInstanceName); - sb.append(" ; EJB="); - sb.append(this.toString()); - sb.append("\n"); - - sb.append("Inner count: "); - sb.append(getLocalStateful().getCount()); - sb.append("\n"); - - sb.append("Local entity: "); - sb.append(getLocalEntity().getName()); - sb.append("\n"); - - Iterator iter = log.iterator(); - int i = 1; - sb.append("Log entries -> \n"); - while (iter.hasNext()) { - sb.append(" " + i + " : "); - sb.append(iter.next()); - sb.append("\n"); - i++; - } - sb.append("End\n"); - - logger.info(sb.toString()); - return sb; - } - - /** - * Set the http sessionid of the caller. - * @param s The sessionid of the caller. - * @throws RemoteException - */ - public void setHTTPSessionId(final java.lang.String s) { - logger.debug(""); - callerHTTPSessionId = s; - isModified = true; - } - - /** - * Get the stored http sessionid of the caller. - * @return The stored sessionid. - * @throws RemoteException - */ - public java.lang.String getHTTPSessionId() { - logger.debug(""); - return callerHTTPSessionId; - } - - /** - * - * @return the local stateful bean - */ - private MyStatefulInner getLocalStateful() { - return localStateful; - } - - /** - * Creates a new Entity bean with the time as parameter - * @param valeur The current time as string - * @return A new Entity Bean - */ - private Node createEntity(final String valeur) { - - Node node = new Node() ; - node.setName(valeur); - node.setInvocationNumber(1); - - entityManager.persist(node); - - logger.info("node.name=", valeur ); - - return node; - } - - /** - * Returns the local entity bean - * @return the local entity bean - */ - private Node getLocalEntity() { - if (localEntity == null) { - Date date = new Date(); - localEntity = createEntity("SFSB_" + creatorJonasInstanceName + "_" + Long.toString(date.getTime())); - isModified = true; - } - return localEntity; - } - - public boolean isModified() { - boolean result = isModified; - isModified = false; - return result; - } - - /** - * @return handle on the stateful - */ - public Handle getMyHandle() { - Handle handle = null; - try { - handle = sessionContext.getEJBObject().getHandle(); - } catch (RemoteException e) { - logger.error("Unable to get SFSB handle", e); - } catch (IllegalStateException e) { - logger.error("Unable to get SFSB handle", e); - } - return handle; - } - - - /** - * cleanup all fields - */ - @Remove - public void cleanup() { - logger.debug("cleanup all fields"); - this.localEntity = null; - this.log = null; - this.callerHTTPSessionId = null; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java deleted file mode 100644 index 353a8befef..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInner.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - -/** - * @author pelletib - * MyStateful local interface - */ -public interface MyStatefulInner { - void increment(); - int getCount(); -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java deleted file mode 100644 index 296ec00700..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatefulInnerBean.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - - -import javax.ejb.Local; -import javax.ejb.SessionSynchronization; -import javax.ejb.Stateful; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Inner statefull - * @author pelletib - */ -@Stateful -@Local(MyStatefulInner.class) -public class MyStatefulInnerBean implements SessionSynchronization,MyStatefulInner { - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(MyStatefulInnerBean.class); - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * counter - */ - private int count = 0; - - /** - * Modifier flag - */ - private transient boolean isModified = true; - - /** - * After the transaction begun - */ - public void afterBegin() { - logger.debug("afterBegin"); - } - - /** - * before the commit is executed - */ - public void beforeCompletion() { - logger.debug("beforeCompletion"); - } - - /** - * after the commit or rollback - * @param committed true -> commit, false -> rollback - */ - public void afterCompletion(final boolean committed) { - logger.debug("afterCompletion: " + committed); - } - - - /** - * increment the local counter - */ - public void increment() { - count++; - isModified = true; - } - - /** - * @return local counter - */ - public int getCount() { - return count; - } - - /** - * - * @return true if the counter is modified - */ - public boolean isModified() { - boolean result = isModified; - isModified = false; - return result; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java deleted file mode 100644 index 5839c0526f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStateless.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - -import java.util.Properties; -import java.rmi.RemoteException; - -/** - * MyStateless interface. - */ -public interface MyStateless { - - /** - * Access a property stored in the JOnAS instance executing the EJB - * container. - * @param prop Name of the property - * @return The value of the property - */ - String getProperty(String prop); - - /** - * Retreive some information of the JOnAS instance executing the EJB - * container The names of the properties are : EJB server, EJB id, EJB - * instance calls, EJB total calls - EJB server : name of the JOnAS instance - - * EJB id : toString() of the MyEjb1 - EJB instance calls : number of calls - * to this EJB instance - EJB total calls : number of calls to this EJB for - * all instance of class MyEjb1 - * @return The Properties - */ - Properties getInfoProps(); - - /** - * Throw a MyException - * @throws RemoteException remote exception - * @throws MyException application exception - */ - void throwMyException() throws MyException; - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java deleted file mode 100644 index f82b36f7a9..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/MyStatelessBean.java +++ /dev/null @@ -1,173 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - -import static org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.Node.QN.FIND_NODE; - -import java.util.List; -import java.util.Properties; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -import org.ow2.cmi.annotation.Cluster; -import org.ow2.cmi.annotation.Policy; -import org.ow2.cmi.annotation.Strategy; -import org.ow2.cmi.lb.policy.RoundRobin; -import org.ow2.cmi.lb.strategy.LocalPreference; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This is an example of Session Bean, stateless - * @author pelletib - */ -@Stateless -@Remote(MyStateless.class) -@Cluster(name="cluster-javaee5") -@Policy(RoundRobin.class) -@Strategy(LocalPreference.class) -public class MyStatelessBean implements MyStateless { - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(MyStatelessBean.class); - - - /** - * Find a given {@link Node} using it's name as a key. - * @param name {@link Node}'s name. - * @return the first {@link Node} that matches the given name. - */ - @SuppressWarnings("unchecked") - private Node findNode(final String name) { - Query query = entityManager.createNamedQuery(FIND_NODE); - query.setParameter("name", name); - List nodes = query.getResultList(); - if (nodes != null && nodes.size() > 0) { - return nodes.get(0); - } - return null; - } - - /** - * - * @return the JOnAS instance name - * @throws Exception if the property is not present - */ - private String getName() throws Exception { - - try { - JProp jp = JProp.getInstance(); - return jp.getValue("jonas.name"); - } catch (Exception e) { - logger.error("Error while getting 'jonas.name' property", e); - throw e; - } - } - - /** - * Updates the properties described above - * @param name JOnAS instance name - */ - private int updateStatistics(final String name) { - - Node node = findNode(name); - if (node == null) { - node = new Node() ; - node.setName(name); - node.setInvocationNumber(1); - } else { - node.setInvocationNumber(node.getInvocationNumber() + 1); - } - entityManager.persist(node); - - logger.info("JOnAS={0} ; ejb={1} ; total calls={2}", name, this.toString(), node.getInvocationNumber() ); - return node.getInvocationNumber(); - } - - - /** - * @return get properties about processing node - */ - public Properties getInfoProps() { - String name; - try { - name = getName(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - int in = updateStatistics(name); - Properties p = new Properties(); - p.setProperty("EJB server", name); - p.setProperty("EJB id", this.toString()); - p.setProperty("EJB total calls", (new Integer(in)).toString()); - return p; - } - - /** - * @return get a property value - */ - public String getProperty(final String prop) { - String s = "unknown"; - try { - JProp jp = JProp.getInstance(); - s = jp.getValue(prop); - } catch (Exception e) { - logger.fatal("Error while getProperty)(", e); - return null; - } - return s; - - } - - /** - * @throws MyException generates an exception - */ - public void throwMyException() throws MyException { - String name = ""; - try { - name = getName(); - } catch (Exception e) { - e.printStackTrace(); - } - throw new MyException("From MyStateless(" + name + ")"); - - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java deleted file mode 100644 index 05ffec728d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/beans/samplecluster3/Node.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3; - -import static org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.Node.QN.ALL_NODES; -import static org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.Node.QN.FIND_NODE; - -import java.io.Serializable; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; - -/** - * Node - * @author pelletib - */ -@Entity -@NamedQueries({@NamedQuery(name=ALL_NODES, query="select o FROM Node o"), - @NamedQuery(name=FIND_NODE, query="select o FROM Node o WHERE name = :name")}) -public class Node implements Serializable { - /** - * Store Query names. - */ - public static interface QN { - /** - * Search all authors. - */ - String ALL_NODES = "Node.allNodes"; - - /** - * Search a named author. - */ - String FIND_NODE = "Node.findNode"; - } - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 0L; - - /** - * Primary key (will be auto generated). - */ - private long id; - - /** - * Name of the node. - */ - private String name = null; - - /** - * Creating time of the bean. - */ - private int invocationNumber = 0; - - - /** - * Default constructor. - */ - public Node() { - } - - /** - * Constructor with a given node name. - * @param name - the name of the node - */ - public Node(final String name) { - this(); - setName(name); - } - - /** - * @return name of the node - */ - public String getName() { - return name; - } - - /** - * Sets the name of the node. - * @param name - the name of this node - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return creating time of the bean - */ - public int getInvocationNumber() { - return invocationNumber; - } - - /** - * Sets the creating time of the bean. - * @param number - the creating time of the bean - */ - public void setInvocationNumber(final int invocationNumber) { - this.invocationNumber = invocationNumber; - } - - /** - * @return an id for this object (incremented automatically) - */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - public long getId() { - return this.id; - } - - /** - * Sets the id of this node object. - * @param id the given id of this node - */ - public void setId(final long id) { - this.id = id; - } - - /** - * @return String representation of this entity object. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(this.getClass().getName()); - sb.append("[id="); - sb.append(getId()); - sb.append(", name="); - sb.append(getName()); - sb.append(", invocationNumber="); - sb.append(Integer.valueOf(getInvocationNumber()).toString()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java deleted file mode 100644 index b2ecab44b9..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientBase.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.client; - -import java.io.FileOutputStream; -import java.io.PrintStream; - -public class ClientBase { - - /** - * Iteration number - */ - private static final int ITERATION_NB = 50; - - /** - * Default time to sleep. - */ - private static final long TIME2SLEEP = 10000; - - /** - * Output to be used. - */ - protected PrintStream out = null; - /** - * the name of the client. - */ - protected String clientName = "JOnAS Client for cluster-javaee5"; - - /** - * Time to sleep each 10 iterations. - */ - protected long time2sleep = 10000; - - /** - * Iterations number. - */ - protected int iterations = ITERATION_NB; - - public ClientBase() { - } - - public ClientBase(final String[] args) { - initArgs(args); - } - - private void initArgs(final String[] args) { - out = System.out; - String url = null; - if(args != null && args.length != 0) { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - if("-out".equals(arg)) { - url = args[++argn]; - continue; - }else if ("-clientName".equals(arg)) { - clientName = args[++argn]; - out.println("Client name set to : " + clientName); - continue; - }else if ("-time2sleep".equals(arg)) { - String time = args[++argn]; - try { - time2sleep = Long.parseLong(time); - } catch (NumberFormatException e) { - time2sleep = TIME2SLEEP; - } - out.println("Time to sleep set to : " + time2sleep); - continue; - }else if ("-iterations".equals(arg)) { - String it = args[++argn]; - try { - iterations = Integer.parseInt(it); - } catch (Exception e) { - // TODO: handle exception - iterations = ITERATION_NB; - } - out.println("Number of iterations set to : " + iterations); - continue; - } - } - } - if (url != null) { - initOut(url); - } - } - /** - * Initializes client output. - * @param url Stringified url of the client output file. - */ - private void initOut(final String url) { - try { - FileOutputStream file = new FileOutputStream(url, true); - out.println("Initializing output '" + url + "' for " + clientName); - out = new PrintStream(file, true); - } catch (Exception e) { - out.println("Unable to initialize output for " + clientName + " because : " + e); - } - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java deleted file mode 100644 index 94f6c99525..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientException.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.client; - -import javax.ejb.EJB; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyException; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; - - -/** - * Fat client : - * - get an exception - */ -public class ClientException extends ClientBase { - - /** - * Link to the SSB. - */ - @EJB - private static MyStateless myStateless = null; - - /** - * Private constructor for utility class - * - */ - private ClientException() { - } - - /** - * Private constructor for utility class - * - */ - private ClientException(final String[] args) { - super(args); - } - - /** - * Starts the client. - * @return - */ - private int start() { - out.println("------------------------------------------"); - out.println("Bean created -> " + myStateless); - out.println("------------------------------------------"); - - try { - out.println("Throw an exception at the server side"); - myStateless.throwMyException(); - } catch (MyException e) { - out.println("MyException caught : invocation successful"); - }catch (Exception e) { - out.println("Invocation failed because : " + e); - out.println("Client KO. Exiting."); - return -1; - } - out.println(); - out.println("Client OK. Exiting."); - return 0; - - } - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientException client = new ClientException(args); - return client.start(); - - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java deleted file mode 100644 index ab2445da1f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientFOSFSB.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.client; - -import javax.ejb.EJB; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful; - - -/** - * Fat client : - * - test Fail Over of the SFSB - */ -public class ClientFOSFSB extends ClientBase { - - /** - * Link to the SFSB. - */ - @EJB - private static MyStateful myStateful = null; - - /** - * Default constructor. - */ - public ClientFOSFSB() { - } - - /** - * Constructor. - */ - public ClientFOSFSB(final String[] args) { - super(args); - } - /** - * Starts the client. - * @return 0 if OK, -1 else. - */ - private int start() { - out.println("------------------------------------------"); - out.println("Bean created -> " + myStateful); - out.println("------------------------------------------"); - - for (int i = 0; i < iterations; i++) { - try { - - String l = "log entry " + i; - // add in the bean state - myStateful.logWithJOnASInstance(l); - - out.println("Add " + l); - - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Get the log entries from the bean state"); - out.println("------------------------------------------"); - StringBuffer sb = myStateful.getLogTextDump(); - out.println(sb); - - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 + "s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - } - - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - } - myStateful.cleanup(); - out.println(); - out.println("Client OK. Exiting."); - return 0; - } - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientFOSFSB client = new ClientFOSFSB(args); - return client.start(); - - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java deleted file mode 100644 index d2e1f83648..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/ClientLBRemote.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.client; - -import java.util.Properties; - -import javax.ejb.EJB; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; - - -/** - * Fat client : - * - access to a SSB - * - LB at the remote - */ -public class ClientLBRemote extends ClientBase { - - /** - * Link to the SSB. - */ - @EJB - private static MyStateless myStateless = null; - - /** - * Default constructor. - */ - public ClientLBRemote() { - } - - /** - * Constructor. - */ - public ClientLBRemote(final String[] args) { - super(args); - } - - /** - * Start the client. - */ - private int start() { - String jonasEJBServer = null; - String ejbTotalCallsCount = null; - Properties prop = null; - - out.println("------------------------------------------"); - out.println("Bean created -> " + myStateless); - out.println("------------------------------------------"); - - for (int i = 0; i < iterations; i++) { - try { - - prop = myStateless.getInfoProps(); - out.println("Bean invoked"); - - jonasEJBServer = prop.getProperty("EJB server"); - ejbTotalCallsCount = prop.getProperty("EJB total calls"); - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - - out.println("Calls=" + i + " - EJB served by jonas=" + jonasEJBServer + " - EJB total calls=" + ejbTotalCallsCount); - if (0 == i % 10) { - out.println("------------------------------------------"); - out.println("Sleep " + time2sleep / 1000 +" s"); - out.println("------------------------------------------"); - try { - Thread.sleep(time2sleep); - } catch (Exception e) { - e.printStackTrace(); - return -1; - } - } - out.println(); - } - - out.println("Client OK. Exiting."); - return 0; - } - - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientLBRemote client = new ClientLBRemote(args); - return client.start(); - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README deleted file mode 100644 index 75c9991036..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/client/README +++ /dev/null @@ -1,36 +0,0 @@ - =============================== -| SampleCluster3 | - =============================== - -Date: 14/10/2008 -Version: v1.1 - -CMI client ----------- -Examples of a rich java client using the CMI protocol. - -Running --------- -1) cd $JONAS_ROOT/examples/cluster-javaee5 -2) create the directory './clientConfig' -3) copy $JONAS_ROOT/conf/carol.properties to '/clientConfig' -4) configure a carol.properties file pointing to a registry within a cluster in ./clientConfig/carol.properties. - For instance : - -carol.protocols=jrmp -carol.jrmp.url=rmi://localhost:1099 - -5) run the clients with the following commands : -# for testing the load-balancing at the lookup -..../client/clientLBLookup.sh - -# for testing the load-balancing at the home interface -..../client/clientLBHome.sh - -# for testing the load-balancing at the remote interface -..../client/clientLBRemote.sh - -# for testing the exception retrieving -..../client/clientException.sh - -================================================================================= diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java deleted file mode 100644 index a30c2a1e20..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/AbstractServlet.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.servlets; - -import javax.ejb.EJB; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.http.HttpServlet; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * @author pelletib - * - * Servlet super class - */ -public abstract class AbstractServlet extends HttpServlet { - - /** - * Link to the SSB. - */ - // @EJB - private MyStateless myStateless = null; - - /** - * Link to the SFSB. - */ - private MyStateful myStateful = null; - - /** - * Logger - */ - private Log logger = LogFactory.getLog(AbstractServlet.class); - - - /** - * Servlet initialization - */ - @Override - public void init() { - - logger.debug(""); - } - - /** - * Creates a new Stateful session bean. - * @return A new session bean - */ - public MyStateful getMyStateful() { - try { - Context ctx = new InitialContext(); - myStateful = (MyStateful) ctx.lookup("org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatefulBean" - + "_" + MyStateful.class.getName() + "@Remote"); - } catch (NamingException e) { - e.printStackTrace(); - } - myStateful.initialize(); - return myStateful; - } - - /** - * Creates a new stateless session bean. - * @return a new stateless session bean - */ - public MyStateless getMyStateless() { - try { - Context ctx = new InitialContext(); - myStateless = (MyStateless) ctx.lookup("org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatelessBean" - + "_" + MyStateless.class.getName() + "@Remote"); - } catch (NamingException e) { - e.printStackTrace(); - } - return myStateless; - } - - /** - * Retrieve the name of the JOnAS node where the servlet is executed. - * @return The JOnAS node name where the servlet is executed. - */ - public static String getMyJonasInstanceName() { - - String s = "unknown"; - try { - JProp jp = JProp.getInstance(); - s = jp.getValue("jonas.name"); - } catch (Exception e) { - e.printStackTrace(); - } - return s; - } - - /** - * Get the logger - * @return the logger - */ - public Log getLogger() { - return logger; - } - - -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java deleted file mode 100644 index 56e40acfe9..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/CheckServlet.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.servlets; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -/** - * @author pelletib - * - * Servlet which checks the HTTP session - */ -public class CheckServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - - HttpSession session = req.getSession(false); - - String sessionCheckInfo = "JSESSIONID cookie absent."; - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - for (int i = 0; i < cookies.length; i++) { - if (cookies[i].getName().equals("JSESSIONID")) { - sessionCheckInfo = "JSESSIONID cookie present."; - } - } - } - - getLogger().info(sessionCheckInfo); - req.setAttribute("sessionCheckInfo", sessionCheckInfo); - - // -------------- - // Write response - // -------------- - RequestDispatcher disp = req.getRequestDispatcher("../jsp/checkRsp.jsp"); - disp.forward(req, res); - - return; - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java deleted file mode 100644 index 2c8128cae5..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ExceptionServlet.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.servlets; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyException; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; - - - -/** - * @author pelletib - * Release an http session servlet - */ -public class ExceptionServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - - MyStateless bean = getMyStateless(); - try { - bean.throwMyException(); - } catch (MyException e) { - getLogger().info("My Exception caught" + e); - e.printStackTrace(); - req.setAttribute("expectedException", "OK"); - req.setAttribute("exception", e); - } catch (Exception e) { - getLogger().info("Exception caught" + e); - e.printStackTrace(); - req.setAttribute("expectedException", "KO"); - req.setAttribute("exception", e); - } - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/exceptionRsp.jsp"); - disp.forward(req, res); - - return; - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java deleted file mode 100644 index 6daa0e44f1..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/ReleaseServlet.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.examples.cluster.javaee5.servlets; - -import java.io.IOException; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful; - -/** - * @author pelletib - * Release an http session servlet - */ -public class ReleaseServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - - // Get the session object to invalidate it - - HttpSession session = req.getSession(false); - String sessionToReleaseInfo = "no session to invalidate"; - if (session != null) { - // invalidate the SFSB - MyStateful myStateful = (MyStateful) session.getAttribute("myStateful"); - myStateful.cleanup(); - - // invalidate the HTTP session - sessionToReleaseInfo = "session=" + session.getId() + " invalidated"; - session.setAttribute("myStateful", null); - session.invalidate(); - } - getLogger().info(sessionToReleaseInfo); - req.setAttribute("sessionToReleaseInfo", sessionToReleaseInfo); - - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - Cookie ck = null; - for (int i = 0; i < cookies.length; i++) { - if (cookies[i].getName().equals("JSESSIONID")) { - ck = (Cookie) cookies[i].clone(); - ck.setMaxAge(0); - res.addCookie(ck); - } - } - } - - // -------------- - // Write response - // -------------- - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/releaseRsp.jsp"); - disp.forward(req, res); - - return; - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java b/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java deleted file mode 100644 index 6dc5c0e29a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/cluster-javaee5/src/java/org/ow2/jonas/examples/cluster/javaee5/servlets/SessionServlet.java +++ /dev/null @@ -1,168 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:SessionServlet.java 14651 2008-07-28 11:50:13Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.cluster.javaee5.servlets; - -import java.io.IOException; -import java.util.Properties; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful; - -/** - * @author goebelg - * - * servlet which manages the different instantiations of the ejbs - */ -public class SessionServlet extends AbstractServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * doGet methode of the servlet - * @param req http servlet request - * @param res http servlet response - * @throws ServletException servlet exception - * @throws IOException io exception - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException { - String jonasEJBServer = null; - String ejbId = null; - String ejbTotalCallsCount = null; - String ejbEntityCreated = null; - Properties prop = null; - - /* - * ---------------------------------------- Update the session context - - * sessiontest.counter : number of times this servlet has been called - - * sessiontest.jonas. : counts the number of time the EJB was - * served by JOnAS instance - * ----------------------------------------- - */ - HttpSession session = req.getSession(true); - - // update sessiontest.counter - - Integer ival = (Integer) session.getAttribute("sessiontest.counter"); - if (ival == null) { // If counter is not in session, then create it - ival = new Integer(1); - } else { - ival = new Integer(ival.intValue() + 1); - } - session.setAttribute("sessiontest.counter", ival); - - // Call EJB then update sessiontest.jonas.x - - try { - prop = getMyStateless().getInfoProps(); - jonasEJBServer = prop.getProperty("EJB server"); - ejbId = prop.getProperty("EJB id"); - ejbTotalCallsCount = prop.getProperty("EJB total calls"); - } catch (Exception e) { - e.printStackTrace(); - } - - // Retrieve or create the Stateful EJB to log history - - /* - * getHandle() doesn't work - * see bug http://jira.easybeans.org/browse/EZB-314 - * - Handle h = (Handle) session.getAttribute("myStateful"); - MyStateful statefulBean = null; - if (h == null) { - - statefulBean = getMyStateful(); - if (statefulBean != null) { - - h = statefulBean.getMyHandle(); - session.setAttribute("myStateful", h); - statefulBean.setHTTPSessionId(session.getId()); - } - } else { - statefulBean = (MyStateful) PortableRemoteObject.narrow(h.getEJBObject(), MyStateful.class); - } */ - - MyStateful statefulBean = (MyStateful) session.getAttribute("myStateful"); - if (statefulBean == null) { - getLogger().info("create new stateful"); - statefulBean = getMyStateful(); - if (statefulBean != null) { - session.setAttribute("myStateful", statefulBean); - statefulBean.setHTTPSessionId(session.getId()); - } - } - - if (!session.isNew()) { - session.setAttribute("sessiontest.old.EJB", session.getAttribute("sessiontest.EJB")); - session.setAttribute("sessiontest.old.WEB", session.getAttribute("sessiontest.WEB")); - } - session.setAttribute("sessiontest.EJB", jonasEJBServer); - session.setAttribute("sessiontest.WEB", getMyJonasInstanceName()); - - req.setAttribute("jonas.EJB.served.by", jonasEJBServer); - req.setAttribute("jonas.WEB.served.by", getMyJonasInstanceName()); - - session.setAttribute("sessiontest.jonas.EJB_Server", jonasEJBServer); - session.setAttribute("sessiontest.jonas.EJB_id", ejbId); - session.setAttribute("sessiontest.jonas.nb_EJB_totalCalls", ejbTotalCallsCount); - - // Log information - - getLogger().info("session=" + session.getId() + " on jonas=" + getMyJonasInstanceName() - + " - calls=" + ival + " - EJB served by jonas=" + jonasEJBServer + " - EJB total calls=" - + ejbTotalCallsCount); - - if (statefulBean != null) { - try { - statefulBean.log("" + "" + getMyJonasInstanceName() + "" + "" + jonasEJBServer - + "" + "" + ejbTotalCallsCount + "" - + ""); - } catch (Exception e) { - getLogger().info("session=" + session.getId() - + " : Exception when calling MyStateful EJB (" + e.getMessage() + ")"); - session.removeAttribute("myStateful"); - } - } - // -------------- - // Write response - // -------------- - - RequestDispatcher disp = req.getRequestDispatcher("../jsp/sessionRsp.jsp"); - disp.forward(req, res); - - return; - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README deleted file mode 100644 index 3e38e037b2..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/README +++ /dev/null @@ -1,84 +0,0 @@ -J2EE 1.4 Example Overview: ------------------ - -This example shows how to access an EJB deployed in a JOnAS EJB container, from - - a servlet deployed in a Tomcat/Jetty container (thin client) - - a client running inside the client container (heavy client) - -It also shows how to use security in Tomcat or Jetty to authentificate the user and in JOnAS -to authorize the user to access the EJB methods. This aspect is described in details -in the "Use Security in JOnAS with TOMCAT" howto of the JOnAS documentation. - -Besides, this example shows the uniform naming resource access supported in JOnAS. -The servlet gets a javax.transaction.UserTransaction object reference from the JNDI -using the "java:comp/UserTransaction" name. Moreover, it gets a reference on the -bean's home using an environment entry: "java:comp/env/ejb/". - -This sample contains an example of using ejb-link which allows to link the EJB to the -servlet. It is used in the web.xml file for both the ejb-ref and -ejb-local-ref tags. It implies that when the servlet performs a lookup on the bean, -the web classloader has got the visibility of the ejb class. -This is due to the classloader hierarchy between the ear classloader, ejb -classloader and the web classloader. - -Finally, this example shows how to add a resource adapter in an ear. - -The "src" directory contains - - An EJB that is a stateful session Bean. - - The servlet source of ServletOp. - - The source of a client which run inside the client container with uniform naming available - - The resource adapter source. - -The "etc" directory contains - - the "xml" directory which contains all the deployment descriptors used for this example : - * application.xml (ear file) - * ejb-jar.xml and jonas-ejb-jar.xml (jar file) - * web.xml, jonas-web.xml (war file) - * ra.xml (rar file) - * application-client.xml, jonas-client1.xml and jonas-client2.xml (two clients jar file) - - the "resources" directory which contains all the resources for this application - * "web" directory contains all resources used by the servlet - - -Compiling this example creates an .ear file that represents an application including : - - a session bean used by the web application - - a web application that will be used by Tomcat or Jetty to run the servlet. - - a resource adapter. - -Prerequisites -------------- -First, you must have installed a web container (ie : Catalina or Jetty) -as the web container service or you will use the heavy client - -Compiling and installing this example: --------------------------------------- - ant install - -Running this example: --------------------- -Commands are given for an Unix system. -(Similar commands can be done on Windows) - -1) Run a JOnAS server: - jonas start - -2a) Run your web browser (e.g., netscape): - netscape http://:/j2ee-1.4 - where is the name of your machine (localhost by default) - and the port number (9000 by default) - -2b) You can also lookup the Bean by using one of the client of the ear - - Use the default client (first found) - java -jar $JONAS_ROOT/lib/client.jar ($JONAS_ROOT |$JONAS_BASE)/deploy/j2ee-1.4.ear -carolFile ($JONAS_ROOT |$JONAS_BASE)/conf/carol.properties - - Use a specific client - java -jar $JONAS_ROOT/lib/client.jar ($JONAS_ROOT |$JONAS_BASE)/deploy/j2ee-1.4.ear -jarClient client2.jar -carolFile ($JONAS_ROOT |$JONAS_BASE)/conf/carol.properties - - -Notes : - the argument -carolFile is useless if you have rebuilt this example because in this - case the carol.properties of your environment is inserted in earsample.ear - -3) Stop the JOnAS server - jonas stop diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml deleted file mode 100644 index 69e98e9d8c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/build.xml +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config deleted file mode 100644 index 73bdc1497f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/jaas/jaas.config +++ /dev/null @@ -1,13 +0,0 @@ -earsample { - // Login Module to use for the example earsample. - - //First, use a LoginModule for the authentication - // Use the resource memrlm_1 - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // Use the login module to propagate security to the JOnAS server - org.ow2.jonas.security.auth.spi.ClientLoginModule required - ; -}; \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/logoOW2.png deleted file mode 100644 index 71a185b68ed53e228e23c82c4ea0aa47b7556959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13572 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 diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/tomcat.gif deleted file mode 100644 index 61756736b82350f64b5ea1b2bfc31ac57e30a3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 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 Re0F?dK$vW)v>aKN{y(`9mQw%# diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/img/vcss.png deleted file mode 100644 index 9b2f596e016533327216d98a0a927738fe17384f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^5kM@@!3-or#C~03U|`e?@Ck7Ra+Q_kdEDnlhI%!W zMb4c&_g;@{HxGAjZ*NM+!7cOCYk@#Y{Pps{+}zwx_wR4FlUu4N92*~!s#T`6W<+- zt4%e$w+9&~i2E*D*W)T9Bhx(p?A&_0|7X(X^Ya7IW>?MPDaUzu zczTO0wr<^e|Jf%QG42CClNSR6E4d`dFZlmw6q^`8Jh0FrC=HPY3SEXN1j@jH0f@DT z;lF?am<8g&3^agg*jyz(n}LC8qNj^vNX4zUQ)`1SI|v-Rel?4G(T!h0t6h3r9Tx_% z{GPN=z+e1GN8qGw>eHn5|8FmNua|o1m5;W_zoO+QbMz<2znfQG#(ynM{=I#{0V!X> zqF)tO-~TK+p#QH~U+~Uxw*7OC?@4lzU=MuwAfY=*I-PyJf}6|jF4ry6#nK@bObtKJ z{jpr)a7XQvK=_v<_kY&OUtDf7N2Y`!=sAP5DASo0{WX7G;uf&=`Gs|Enroa;cP#bwBZgT0Vk8}Ij!pi@+JzOex~wA_|LQI>iZ4KOPMZj@RJmq z{=ckJgo`sg=^ee+rLf!@|1r#|1Qou-tz zozY_28jcOAqH_ZHT>9G+6r2tD{%tx^c*pF4-nNSOH_A#)UvDaE^>6pwzeB^b1utmshBn2mW1YZ#q&(r+Ne9lLHSPV z;lJMu*6nF1eX&Vu#au@n)2h{;1^hB;>x|=8`0r4N5Dq`3W>NpNuIHfS-r}72x2dtZ z|1vypS3P_!s?6%3q3f=mrP_V^@twUAXY`EwoTZxX&st-k^Kye`&fdVV(2iA`qSwCa zO3SD?y)^LM2F^-1=1_^hVN1d%c)e7=87<81^0{cK;`g>k^UAjGxu$SW%#%-OqR3cMOS7CD$Nw90jSF7TjZ+3b%7?`))PKP%lew!LZ} z9@4ntXMQ2~DY0cQL^+Gz9jsW~FI2w%Uw?1i^C{7@K5}j{esbPgg&e IbxsLQ074N#oB#j- diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html deleted file mode 100644 index 48abd6db03..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - J2EE 1.4 Example - - - -
logo
-
- Jakarta Tomcat - Mortbay Jetty - JOnAS WebSite -
- -
- J2EE 1.4 Example : Servlet accessing a protected EJB -
- - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css deleted file mode 100644 index 9902f9b13e..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/resources/web/ow2_jonas.css +++ /dev/null @@ -1,183 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - - -body -{ - top: 10px; - margin-top:10px; - background-color: #FFF; - color: #000000; - } - - -img { - margin: 5px; - border:0; -} - - - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - font-size: 14px; - margin-top : 40px; - margin-left : 100px; -} - - -div.titlepage { - margin-left: 200px; - font-family: Arial, Helvetica, sans-serif; - font-size: 1.5em; - line-height: 1.5em; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - - -.h1, .h2, .h3, .h4, .h5 { - color: #000; - background-color: inherit; - padding: 0; -} - -.h1 { - margin-top: 5px; - font-size: 2em; - line-height: 1.5em; - margin: 30px 0 30px 0; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - -.h2 { - margin: 20px 0 15px 0; - border-bottom: 1px solid #0099cc; - font-weight:normal; - font-style: normal; - font-size: 1.6em; - line-height: 1.4em; - color : #0099cc -} - -.h3 { - font-weight: normal; - font-size: 1.4em; - line-height: 1.4em; - margin: 20px 0 15px 0; -} - -.h4 { - font-weight:normal; - color: #404040; - margin: 20px 0 0 0; - left: 0px; - font-size: 1.4em; - line-height: 1.4em; -} -.h5 { - font-weight:normal; - color: #404040; - font-style: normal; - margin: 0px; - left: 0px; - font-size: 1.2em; - line-height: 1.2em; -} - -td -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - font-weight: normal; -} - -p -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - margin: 10px 10px 5px 0px; -} - -p.error -{ - color: red; -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml deleted file mode 100644 index e2688908b9..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application-client.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - Client of the earsample - - - envEntryString - java.lang.String - - Test of envEntry of application-client.xml file - - - - - - ejb/Op - Session - org.ow2.jonas.earsample.beans.secusb.OpHome - org.ow2.jonas.earsample.beans.secusb.Op - secusb.jar#EarOp - - - - - ejb/OpLink - Session - org.ow2.jonas.earsample.beans.secusb.OpHome - org.ow2.jonas.earsample.beans.secusb.Op - EarOp - - - - url/jonas - java.net.URL - Container - - - - org.ow2.jonas.security.auth.callback.LoginCallbackHandler - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml deleted file mode 100644 index f91c69d089..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/application.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - ear example secusb/servlet - earsample secusb/servlet - - - secusb.jar - - - - - earsample.war - j2ee-1.4 - - - - - client1.jar - - - client2.jar - - - - ra-sample.rar - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml deleted file mode 100644 index 9a596a28de..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client1.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - url/jonas - http://jonas.ow2.org - - - - jaas.config - earsample - jonas - jonas - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml deleted file mode 100644 index a1bf42917d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-client2.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - url/jonas - http://jonas.ow2.org - - - - jaas.config - earsample - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml deleted file mode 100644 index ca04b169db..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-secusb.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - EarOp - EarOpHome - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml deleted file mode 100644 index e66d881247..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/jonas-web.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - url/URL - http://jonas.ow2.org - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml deleted file mode 100644 index 3aeee3e280..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/ra.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - rar sample - rar sample - OW2 - - 1.0 - - false - - - - - org.ow2.jonas.earsample.resourceadapters.ResourceAdapterImpl - - - - JNDI name - jndiName - - java.lang.String - - - eisName - - - - URL for EIS instance - EisURL - - java.lang.String - - - EIS_URL - - - - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml deleted file mode 100644 index 5382032825..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/secusb.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - secured session bean JOnAS example - - secusb (earsample) - - - - EarOp - org.ow2.jonas.earsample.beans.secusb.OpHome - org.ow2.jonas.earsample.beans.secusb.Op - org.ow2.jonas.earsample.beans.secusb.OpLocalHome - org.ow2.jonas.earsample.beans.secusb.OpLocal - org.ow2.jonas.earsample.beans.secusb.OpBean - Stateful - Container - - - - - - tomcat - - - jetty - - - - tomcat - - EarOp - * - - - - - jetty - - EarOp - * - - - - - - EarOp - * - - Supports - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml deleted file mode 100644 index f9ad76e411..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/etc/xml/web.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - Op - - org.ow2.jonas.earsample.servlets.ServletOp - - - - - Op - /secured/Op - - - - url/URL - java.net.URL - Application - - - - - Protected Area - - /secured/* - - DELETE - GET - POST - PUT - - - - tomcat - jetty - - - - - - BASIC - JOnAS Realm - - - - - tomcat - - - - jetty - - - - - envEntryString - java.lang.String - - This is a string from the env-entry - - - - - ejb/Op - Session - org.ow2.jonas.earsample.beans.secusb.OpHome - org.ow2.jonas.earsample.beans.secusb.Op - EarOp - - - - ejb/OpLocal - Session - - org.ow2.jonas.earsample.beans.secusb.OpLocalHome - - org.ow2.jonas.earsample.beans.secusb.OpLocal - secusb.jar#EarOp - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java deleted file mode 100644 index 2f7b4bfc36..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/Op.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.beans.secusb; - -import javax.ejb.EJBObject; -import java.rmi.RemoteException; - -/** - * Remote interface for the bean Op - * @author JOnAS team - */ -public interface Op extends EJBObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - * @throws RemoteException if RMI failed. - */ - void buy (int shares) throws RemoteException; - - /** - * Business method implementation. - * @return the nb of shares bought - * @throws RemoteException if RMI failed. - */ - int read () throws RemoteException; - -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java deleted file mode 100644 index 4df11b2e91..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpBean.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.beans.secusb; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; - -/** - * This is an example of Session Bean, statefull, and synchronized. - * @author JOnAS team - */ -public class OpBean implements SessionBean, SessionSynchronization { - - /** - * Actual state of the bean - */ - private int total = 0; - - /** - * value inside Tx, not yet committed. - */ - private int newtotal = 0; - - /** - * User client - */ - private String clientUser = null; - - /** - * Session context that the container provides for a session enterprise Bean - * instance. - */ - private SessionContext sessionContext = null; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param user the user name - */ - public void ejbCreate(String user) { - total = 0; - // in case we are outside transactions - newtotal = total; - clientUser = user; - } - - /* =============== javax.ejb.SessionBean 2.0 implementation ============== */ - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - this.sessionContext = sessionContext; - } - - /* - * ============== javax.ejb.SessionSynchronization implementation - * ============= - */ - - /** - * The afterBegin method notifies a session Bean instance that a new - * transaction has started, and that the subsequent business methods on the - * instance will be invoked in the context of the transaction. The instance - * can use this method, for example, to read data from a database and cache - * the data in the instance fields. This method executes in the proper - * transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterBegin() throws EJBException, java.rmi.RemoteException { - newtotal = total; - } - - /** - * The beforeCompletion method notifies a session Bean instance that a - * transaction is about to be committed. The instance can use this method, - * for example, to write any cached data to a database. This method executes - * in the proper transaction context. Note: The instance may still - * cause the container to rollback the transaction by invoking the - * setRollbackOnly() method on the instance context, or by throwing an - * exception. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void beforeCompletion() throws EJBException, java.rmi.RemoteException { - } - - /** - * The afterCompletion method notifies a session Bean instance that a - * transaction commit protocol has completed, and tells the instance whether - * the transaction has been committed or rolled back. This method executes - * with no transaction context. - * @param committed - True if the transaction has been committed, false if - * is has been rolled back. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterCompletion(boolean committed) throws EJBException, java.rmi.RemoteException { - - if (committed) { - total = newtotal; - } else { - newtotal = total; - } - } - - /* ========================= Op implementation ============================ */ - - /** - * Business method implementation. - * @param s nb of shares to be bought - */ - public void buy(int s) { - newtotal = newtotal + s; - return; - } - - /** - * Business method implementation. - * @return the nb of shares bought - */ - public int read() { - return newtotal; - } -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java deleted file mode 100644 index f9961dec81..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpHome.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.beans.secusb; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Op - * @author JOnAS team - */ -public interface OpHome extends EJBHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - * @throws RemoteException if the RMI call failed. - */ - Op create(String user) throws CreateException, RemoteException; -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java deleted file mode 100644 index 82ca738c2d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocal.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.beans.secusb; - -import javax.ejb.EJBLocalObject; - -/** - * Local interface for the bean Op - * @author JOnAS team - */ -public interface OpLocal extends EJBLocalObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - */ - void buy(int shares); - - /** - * Business method implementation. - * @return the nb of shares bought - */ - int read(); -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java deleted file mode 100644 index 187bd3e950..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/beans/secusb/OpLocalHome.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.beans.secusb; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; - -/** - * Local home interface for the bean Op - * @author JOnAS team - */ -public interface OpLocalHome extends EJBLocalHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - */ - OpLocal create(String user) throws CreateException; -} \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java deleted file mode 100644 index 9c7b510125..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/clients/Client.java +++ /dev/null @@ -1,190 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.clients; - -import java.net.URL; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.transaction.UserTransaction; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.earsample.beans.secusb.Op; -import org.ow2.jonas.earsample.beans.secusb.OpHome; - - -/** - * Heavy client doing some operations on a bean - * @author jonas team - */ -public class Client { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private Client() { - - } - - /** - * Main method - * @param args arguments of the client - */ - public static void main(String[] args) { - - Context initialContext = null; - System.out.print("Building a new InitialContext..."); - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - System.out.println("done !"); - - System.out.print("Looking up java:comp/UserTransaction ..."); - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - System.out.println("done !"); - - String envEntry = null; - System.out.print("Looking up java:comp/env/envEntryString ..."); - try { - envEntry = (String) initialContext.lookup("java:comp/env/envEntryString"); - } catch (Exception e) { - System.err.println("Cannot get env-entry on JNDI " + e); - System.exit(2); - } - System.out.println("done !"); - System.out.println("Env entry is : " + envEntry); - - URL url = null; - System.out.print("Looking up java:comp/env/url/jonas ..."); - try { - url = (URL) initialContext.lookup("java:comp/env/url/jonas"); - } catch (Exception e) { - System.err.println("Cannot get URL on JNDI " + e); - System.exit(2); - } - System.out.println("done !"); - System.out.println("Web site of jonas is at :" + url); - - System.out.print("Looking up java:comp/env/ejb/Op ..."); - // Connecting to OpHome thru JNDI - OpHome home = null; - try { - home = (OpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Op"), OpHome.class); - System.out.println("done !"); - } catch (Exception e) { - e.printStackTrace(); - System.err.println("Cannot lookup OpHome: " + e); - System.exit(2); - } - - // OpBean creation - Op t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create OpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientOp OK. Exiting."); - } -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java deleted file mode 100644 index 8886fde8a0..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/resourceadapters/ResourceAdapterImpl.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.resourceadapters; - - -import java.net.MalformedURLException; -import java.util.HashMap; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapterInternalException; -import javax.resource.spi.endpoint.MessageEndpointFactory; -import javax.transaction.xa.XAResource; - -/** - * A Resource adapter - * @author kemlerp - * - */ -public class ResourceAdapterImpl implements javax.resource.spi.ResourceAdapter, java.io.Serializable { - - - /** - * serialVersionUID - */ - private static final long serialVersionUID = 3834312812943456568L; - - /** - * String should be the RA name when set, ie, EIS - */ - private String eisurl; - - /** - * The JNDI name - */ - private String jndiName; - - /** - * Initial context - */ - private InitialContext ictx; - - /** - * BootstrapContext - */ - private BootstrapContext bootstrapCtx = null; // set in start() - - /** - * EndpointFactories - */ - private transient HashMap endpointFactories = new HashMap(); - - - /** - * Start - * @param bootstrapCtx bootstrapCtx - * @throws ResourceAdapterInternalException if an error occurs - */ - public void start(BootstrapContext bootstrapCtx) throws ResourceAdapterInternalException { - this.bootstrapCtx = bootstrapCtx; - - try { - ictx = new InitialContext(); - ictx.bind(jndiName, eisurl); - } catch (NamingException e) { - e.printStackTrace(); - } - - } - - /** - * Stop - */ - public void stop() { - try { - ictx.unbind(jndiName); - } catch (NamingException e) { - e.printStackTrace(); - } - } - - - /** - * Called by the application server when a message-driven bean - * (MessageEndpoint) is deployed. - * @param factory MessageEndpointFactory - * @param spec activation spec - * @throws NotSupportedException if an error occurs - * @throws ResourceAdapterInternalException if an error occurs - */ - public void endpointActivation(MessageEndpointFactory factory, ActivationSpec spec) throws NotSupportedException, - ResourceAdapterInternalException { - endpointFactories.put(spec, factory); - } - - /** - * Endpoint Deactivation - * @param factory MessageEndpointFactory - * @param spec activation spec - */ - public void endpointDeactivation(MessageEndpointFactory factory, ActivationSpec spec) { - endpointFactories.remove(spec); - } - - /** - * Get XAResources - * @param specs A tab of specs - * @throws ResourceException if an error occurs - * @return Tab of XAResources - */ - public XAResource[] getXAResources(ActivationSpec[] specs) throws ResourceException { - return null; - } - - /** - * Get Eis URL - * @return Eis URL - */ - public String getEisURL() { - return eisurl.toString(); - } - - /** - * Set Eis URL - * @param eisURL Eis URL - * @throws MalformedURLException if 'eisURL' is not a URL - */ - public void setEisURL(String eisURL) throws MalformedURLException { - // ra.xml deployment supplies value - this.eisurl = eisURL; - } - - /** - * Get BootstrapContext - * @return bootstrapCtx - */ - public BootstrapContext getBootstrapCtx() { - return bootstrapCtx; - } - - /** - * Set BootstrapContext - * @param bootstrapCtx bootstrapContext - */ - public void setBootstrapCtx(BootstrapContext bootstrapCtx) { - this.bootstrapCtx = bootstrapCtx; - } - - /** - * Get used JNDI name - * @return A string - */ - public String getJndiName() { - return jndiName; - } - - /** - * Set JNDI name - * @param jndiName a string - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java deleted file mode 100644 index d55b00a618..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/src/java/org/ow2/jonas/earsample/servlets/ServletOp.java +++ /dev/null @@ -1,305 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.earsample.servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.net.URL; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.transaction.UserTransaction; - -import org.ow2.jonas.earsample.beans.secusb.Op; -import org.ow2.jonas.earsample.beans.secusb.OpHome; -import org.ow2.jonas.earsample.beans.secusb.OpLocal; -import org.ow2.jonas.earsample.beans.secusb.OpLocalHome; - - -/** - * This servlet is an example to show how to access a EJB from a servlet - * @author JOnAS team - */ -public class ServletOp extends HttpServlet { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request - * the client has made of the servlet - * @param response an HttpServletResponse object that contains the - * response the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println("Ear Sample of Servlet accessing a protected EJB"); - out.println(""); - out.println(""); - out.println("

Ear sample of Servlet accessing a protected EJB"); - out.println("

\"Tomcat"); - out.println("\"Jetty"); - out.println("\"JOnAS"); - out.println("

Initial context / UserTransaction

"); - out.println("
    "); - Context initialContext = null; - try { - initialContext = new InitialContext(); - out.println("
  • Initial context OK
  • "); - } catch (Exception e) { - out.print("
  • Cannot get initial context for JNDI: "); - out.println(e + "
  • "); - return; - } - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - out.println("
  • Get java:comp/UserTransaction OK
  • "); - } catch (Exception e) { - out.println("
  • Cannot lookup java:comp/UserTransaction: " + e + "
  • "); - return; - } - out.println("

"); - - out.println("

"); - out.println("Lookup on env-entry with java:comp/env/envEntryString"); - out.println("

"); - out.println("
    "); - String envEntry = null; - try { - envEntry = (String) initialContext.lookup("java:comp/env/envEntryString"); - out.println("
  • Env entry is : " + envEntry + "
  • "); - } catch (Exception e) { - out.println("
  • Cannot get env-entry on JNDI " + e + "
  • "); - return; - } - out.println("

"); - - - out.println("
"); - - out.println("

"); - out.println("Lookup on URL with java:comp/env/url/URL"); - out.println("

"); - out.println("
    "); - URL jonasURL = null; - try { - jonasURL = (URL) initialContext.lookup("java:comp/env/url/URL"); - out.println("
  • URL is : " + jonasURL.toString() + "
  • "); - } catch (Exception e) { - out.println("
  • Cannot get url on JNDI " + e + "
  • "); - return; - } - out.println("

"); - - out.println("

Actions realized by the servlet and the EJB

"); - out.println("

With local interface

"); - out.println("
    "); - // Connecting to OpLocalHome thru JNDI - OpLocalHome opLocalHome = null; - try { - opLocalHome = (OpLocalHome) - initialContext.lookup("java:comp/env/ejb/OpLocal"); - } catch (Exception e) { - out.println("
  • Cannot lookup java:comp/env/ejb/OpLocal: " + e + "
  • "); - return; - } - // OpBean creation - OpLocal opLocal = null; - try { - opLocal = opLocalHome.create("User1"); - out.println("
  • Create a bean
  • "); - } catch (Exception e) { - out.println("
  • Cannot create OpBean: " + e + "
  • "); - return; - } - // First transaction (committed) - try { - out.println("
  • Start a first transaction
  • "); - utx.begin(); - opLocal.buy(FIRST_BUY_AMOUNT); - out.println("
  • First request on the new bean
  • "); - opLocal.buy(SECOND_BUY_AMOUNT); - out.println("
  • Second request on the bean
  • "); - utx.commit(); - out.println("
  • Commit the transaction
  • "); - } catch (Exception e) { - out.println("
  • exception during 1st Tx: " + e + "
  • "); - return; - } - // Start another transaction (rolled back) - try { - out.println("
  • Start a second transaction
  • "); - utx.begin(); - opLocal.buy(THIRD_BUY_AMOUNT); - utx.rollback(); - out.println("
  • Rollback the transaction
  • "); - } catch (Exception e) { - out.println("
  • exception during 2nd Tx: " + e + "
  • "); - return; - } - // Get the total bought, outside the transaction - int val = 0; - try { - val = opLocal.read(); - out.println("
  • Request outside any transaction
  • "); - } catch (Exception e) { - out.println("
  • Cannot read value on t1 : " + e + "
  • "); - return; - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - out.println("
  • Bad value read: " + val + "
  • "); - return; - } - // Remove Session bean - try { - opLocal.remove(); - } catch (Exception e) { - out.println("
  • Exception on buy: " + e + "
  • "); - return; - } - out.println("

"); - - out.println("

With remote interface

"); - out.println("
    "); - // Connecting to OpHome thru JNDI - OpHome opHome = null; - try { - opHome = (OpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Op"), OpHome.class); - } catch (Exception e) { - out.println("
  • Cannot lookup java:comp/env/ejb/Op: " + e + "
  • "); - return; - } - // OpBean creation - Op op = null; - try { - op = opHome.create("User1"); - out.println("
  • Create a bean
  • "); - } catch (Exception e) { - out.println("
  • Cannot create OpBean: " + e + "
  • "); - return; - } - // First transaction (committed) - try { - out.println("
  • Start a first transaction
  • "); - utx.begin(); - op.buy(FIRST_BUY_AMOUNT); - out.println("
  • First request on the new bean
  • "); - op.buy(SECOND_BUY_AMOUNT); - out.println("
  • Second request on the bean
  • "); - utx.commit(); - out.println("
  • Commit the transaction
  • "); - } catch (Exception e) { - out.println("
  • exception during 1st Tx: " + e + "
  • "); - return; - } - // Start another transaction (rolled back) - try { - out.println("
  • Start a second transaction
  • "); - utx.begin(); - op.buy(THIRD_BUY_AMOUNT); - utx.rollback(); - out.println("
  • Rollback the transaction
  • "); - } catch (Exception e) { - out.println("
  • exception during 2nd Tx: " + e + "
  • "); - return; - } - // Get the total bought, outside the transaction - val = 0; - try { - val = op.read(); - out.println("
  • Request outside any transaction
  • "); - } catch (Exception e) { - out.println("
  • Cannot read value on t1 : " + e + "
  • "); - return; - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - out.println("
  • Bad value read: " + val + "
  • "); - return; - } - // Remove Session bean - try { - op.remove(); - } catch (Exception e) { - out.println("
  • Exception on buy: " + e + "
  • "); - return; - } - out.println("

"); - - - - out.println("

"); - out.println("Resource Adapter Properties"); - out.println("

"); - out.println("
    "); - String eisName = null; - try { - eisName = (String) initialContext.lookup("eisName"); - out.println("
  • EIS Name is : " + eisName + "
  • "); - } catch (Exception e) { - out.println("
  • Cannot get eis name on JNDI " + e + "
  • "); - return; - } - out.println("

"); - - - out.println("Sample is OK.
"); - out.println(""); - out.println(""); - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log b/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log deleted file mode 100644 index 3589d3311f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/j2ee1.4/velocity.log +++ /dev/null @@ -1,62 +0,0 @@ -Tue Nov 18 12:51:02 CET 2008 [debug] AvalonLogSystem initialized using logfile 'velocity.log' -Tue Nov 18 12:51:02 CET 2008 [info] ************************************************************** -Tue Nov 18 12:51:02 CET 2008 [info] Starting Jakarta Velocity v1.4 -Tue Nov 18 12:51:02 CET 2008 [info] RuntimeInstance initializing. -Tue Nov 18 12:51:02 CET 2008 [info] Default Properties File: org\apache\velocity\runtime\defaults\velocity.properties -Tue Nov 18 12:51:02 CET 2008 [info] Trying to use logger class org.apache.velocity.runtime.log.AvalonLogSystem -Tue Nov 18 12:51:02 CET 2008 [info] Using logger class org.apache.velocity.runtime.log.AvalonLogSystem -Tue Nov 18 12:51:02 CET 2008 [info] Default ResourceManager initializing. (class org.apache.velocity.runtime.resource.ResourceManagerImpl) -Tue Nov 18 12:51:02 CET 2008 [info] Resource Loader Instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:02 CET 2008 [info] ClasspathResourceLoader : initialization starting. -Tue Nov 18 12:51:02 CET 2008 [info] ClasspathResourceLoader : initialization complete. -Tue Nov 18 12:51:02 CET 2008 [info] ResourceCache : initialized. (class org.apache.velocity.runtime.resource.ResourceCacheImpl) -Tue Nov 18 12:51:02 CET 2008 [info] Default ResourceManager initialization complete. -Tue Nov 18 12:51:02 CET 2008 [info] Loaded System Directive: org.apache.velocity.runtime.directive.Literal -Tue Nov 18 12:51:02 CET 2008 [info] Loaded System Directive: org.apache.velocity.runtime.directive.Macro -Tue Nov 18 12:51:02 CET 2008 [info] Loaded System Directive: org.apache.velocity.runtime.directive.Parse -Tue Nov 18 12:51:02 CET 2008 [info] Loaded System Directive: org.apache.velocity.runtime.directive.Include -Tue Nov 18 12:51:02 CET 2008 [info] Loaded System Directive: org.apache.velocity.runtime.directive.Foreach -Tue Nov 18 12:51:03 CET 2008 [info] Created: 20 parsers. -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : initialization starting. -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : adding VMs from VM library template : org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #beforeThrowRemoteException( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #afterThrowRemoteException( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #timerVariablesDeclaration( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #getRequestStartTime( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #getRequestStopTime( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #getBusinessStartTime( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #getBusinessStopTime( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : added new VM : #updateEJBMonitoringData( ) : source = org/ow2/jonas/generators/genic/GenICMacros.vm -Tue Nov 18 12:51:03 CET 2008 [info] ResourceManager : found org/ow2/jonas/generators/genic/GenICMacros.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : VM library template macro registration complete. -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : allowInline = true : VMs can be defined inline in templates -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : allowInlineToOverride = false : VMs defined inline may NOT replace previous VM definitions -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : allowInlineLocal = false : VMs defined inline will be global in scope if allowed. -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : messages on : VM system will output logging messages -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : autoload off : VM system will not automatically reload global library macros -Tue Nov 18 12:51:03 CET 2008 [info] Velocimacro : initialization complete. -Tue Nov 18 12:51:03 CET 2008 [info] Velocity successfully started. -Tue Nov 18 12:51:03 CET 2008 [info] ResourceManager : found org/ow2/jonas/generators/genic/JStatefulHome.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 35,column 11] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulHome.vm [line 182,column 9] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [info] ResourceManager : found org/ow2/jonas/generators/genic/JStatefulRemote.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 36,column 11] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 42] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 1,column 45] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulRemote.vm [line 236,column 9] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [info] ResourceManager : found org/ow2/jonas/generators/genic/JStatefulLocalHome.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulLocalHome.vm [line 30,column 11] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulLocalHome.vm [line 135,column 9] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [info] ResourceManager : found org/ow2/jonas/generators/genic/JStatefulLocal.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulLocal.vm [line 36,column 11] : $Id is not a valid reference. -Tue Nov 18 12:51:03 CET 2008 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = org/ow2/jonas/generators/genic/JStatefulLocal.vm [line 192,column 9] : $Id is not a valid reference. diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README deleted file mode 100644 index d40c62d74e..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/README +++ /dev/null @@ -1,10 +0,0 @@ -- Ant tool must be launched in this directory - --> a file named javaee5-earsample.ear is produced in $JONAS_BASE/deploy - -- Configure JavaMail: see $JONAS_BASE/conf/MailMimePartDS1.properties and $JONAS_BASE/conf/MailSession1.properties - -- Start JOnAS - -- Go on http://localhost:9000/javaee5-earsample/ - -- Example is ready diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties deleted file mode 100644 index c59d0b2b43..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/carol.properties +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright (C) 2002-2007 ObjectWeb -# -# CAROL: Common Architecture for RMI ObjectWeb Layer -# -# This library is developed inside the ObjectWeb Consortium, -# http://www.ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -------------------------------------------------------------------------- -# $Id$ -# -------------------------------------------------------------------------- - -# jonas rmi activation (iiop, irmi, jrmp) -carol.protocols=jrmp - -# RMI IRMI URL -carol.irmi.url=rmi://localhost:1099 - -# RMI JRMP URL -carol.jrmp.url=rmi://localhost:1099 - -# RMI IIOP URL -carol.iiop.url=iiop://localhost:1099 - -###################################################################### -# Advanced Configuration for IRMI -###################################################################### -# Exported objects will listen on this port for remote method -# invocations. -#A value of 0 will cause a random port to be selected. -# This is the default value. -# Warning : if the port is set (not 0) with the value 'n', be aware that -# the port 'n + 1' will be used by the JMX server. -# So, for the firewall configuration, you have to open the port numbers 'n' -# and 'n+1'. -carol.irmi.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.irmi.url property) -# Use all interfaces available [default configuration = false] -carol.irmi.interfaces.bind.single=false - -###################################################################### -# Advanced Configuration for JRMP -###################################################################### -# If true, local call with jrmp are optimized. If you get "ClassCastException -# with 2 beans in different jars, you should set it at "false". -carol.jvm.rmi.local.call=false - -# If true a local Naming context is used (to be used only with a collocated registry) -carol.jvm.rmi.local.registry=true - -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.jrmp.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.jrmp.url property) -# Use all interfaces available [default configuration = false] -carol.jrmp.interfaces.bind.single=false - - -###################################################################### -# Advanced Configuration for IIOP -###################################################################### -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.iiop.server.port=0 - -# The value of this port is used to set the SSL port of the objects listener. -# Note that this port musn't not be set to 0 as it is used for CsiV2. -# but this port is used only if SSL mode is enable. -# So by default, there is no listener on this port -# [default configuration = not used] -carol.iiop.server.sslport=2003 - -# Delegate used by JOnAS for rmi-iiop protocol -carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.registry.carol.delegate.JacORBPRODelegate - -###################################################################### -# Advanced JNDI Configuration -###################################################################### -carol.jndi.java.naming.factory.url.pkgs=org.ow2.jonas.lib.naming diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties deleted file mode 100644 index c7bb2c2135..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientConfig/traceclient.properties +++ /dev/null @@ -1,43 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -#logger.org.ow2.carol.level DEBUG -#logger.org.ow2.jonas.level DEBUG diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat deleted file mode 100755 index 25a39c40ff..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.bat +++ /dev/null @@ -1 +0,0 @@ -jclient %JONAS_BASE%\deploy\javaee5-earsample.ear -jarClient jaas-secured-application-client.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh deleted file mode 100755 index 0f510a8f4b..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJaasSecuredApplication.sh +++ /dev/null @@ -1 +0,0 @@ -jclient $JONAS_BASE/deploy/javaee5-earsample.ear -jarClient jaas-secured-application-client.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat deleted file mode 100755 index 9966a4917f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.bat +++ /dev/null @@ -1 +0,0 @@ -jclient %JONAS_BASE%\deploy\javaee5-earsample.ear -jarClient jms-application-client.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh deleted file mode 100755 index 9f4a12482b..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientJmsApplication.sh +++ /dev/null @@ -1 +0,0 @@ -jclient $JONAS_BASE/deploy/javaee5-earsample.ear -jarClient jms-application-client.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat deleted file mode 100755 index 8ec6ff3979..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.bat +++ /dev/null @@ -1 +0,0 @@ -jclient %JONAS_BASE%\deploy\javaee5-earsample.ear -jarClient not-secured-application-client.jar -carolFile clientConfig\carol.properties -traceFile clientConfig\traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh deleted file mode 100755 index 541ed9e201..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/bin-client/clientNotSecuredApplication.sh +++ /dev/null @@ -1 +0,0 @@ -jclient $JONAS_BASE/deploy/javaee5-earsample.ear -jarClient not-secured-application-client.jar -carolFile clientConfig/carol.properties -traceFile clientConfig/traceclient.properties \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml deleted file mode 100644 index 10961a18f5..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/build.xml +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF deleted file mode 100644 index badbabc3ca..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/META-INF/MANIFEST.MF +++ /dev/null @@ -1 +0,0 @@ -Require-JOnAS-Services: mail diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml deleted file mode 100644 index b0079c8964..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/application.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - Java EE 5.0 EAR Sample - Java EE 5.0 EAR Sample - - - - ejb3.jar - - - - - - javaee5-earsample.war - javaee5-earsample - - - - - - - jms-application-client.jar - - - - not-secured-application-client.jar - - - - jaas-secured-application-client.jar - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml deleted file mode 100644 index a663fd6565..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-application-client.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - OW2 JOnAS :: EAR Sample :: Secured Application Client - - org.ow2.jonas.security.auth.callback.LoginCallbackHandler - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml deleted file mode 100644 index 1f34afa5d3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas-secured-jonas-client.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - jaas.config - javaee5-earsample - jonas - jonas - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config deleted file mode 100644 index 517159a434..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jaas.config +++ /dev/null @@ -1,37 +0,0 @@ -// --------------------------------------------------------------------------- -// JOnAS: Java(TM) Open Application Server -// Copyright (C) 2008 Bull S.A.S. -// Contact: jonas-team@ow2.org -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// --------------------------------------------------------------------------- -// $Id: build.properties 12246 2007-12-09 21:42:38Z benoitf $ -// --------------------------------------------------------------------------- - -javaee5-earsample { - // Login Module to use for the example javaee5-earsample. - - // First, use a LoginModule for the authentication - // Use the resource memrlm_1 - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // Use the login module to propagate security to the JOnAS server - org.ow2.jonas.security.auth.spi.ClientLoginModule required - ; -}; diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml deleted file mode 100644 index 60620aadf7..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-application-client.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - OW2 JOnAS :: EAR Sample :: JMS Application Client - - - - jms/QueueConnectionFactory - javax.jms.QueueConnectionFactory - Container - - - - - jms/SampleQueue - javax.jms.Queue - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml deleted file mode 100644 index c7dae4e51e..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/jms-jonas-client.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - jms/QueueConnectionFactory - JQCF - - - - jms/SampleQueue - SampleQueue - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml deleted file mode 100644 index 38c9eca304..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-application-client.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - OW2 JOnAS :: EAR Sample :: Not Secured Application Client - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml deleted file mode 100644 index 63a21cfb9a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/not-secured-jonas-client.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml deleted file mode 100644 index 13b22224df..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/persistence.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - jdbc_1 - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml deleted file mode 100644 index f71cc4a400..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - DisplayServlet - org.ow2.jonas.examples.ear.web.ExampleServlet - - - - AdminServlet - org.ow2.jonas.examples.ear.web.AdminServlet - - - - DisplayServlet - /display - - - - AdminServlet - /secured/* - - - - - Protected Area - - /secured/* - - DELETE - GET - POST - PUT - - - - earsample - - - - - - BASIC - JOnAS Realm - - - - - earsample - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/architecture.png deleted file mode 100644 index 677540d697923559efa4c2095defb5917134492f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182723 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 z 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

Eo@6imR$wKEBp%ogIlm06!PM9-G!wLL+uLtj zhSs$)k;1EKkNu4 zY&pzlS$=%P$XuohxEqLxUB$s_wnN?GQkm7 z%2~jBDME${O$7I$28)cRKyoo%Dr>jaz2?C^qWa!#H=6NlZHglPUo1t2h^6Ku*3^^$ zFrfUHg5M#qgVM8i+7O*V6<{?Aq~6`zO|H9Rgo=Ad9}SfAzo&^Jw&}Og?*<0o_yeI9 z^#XL_U4vgINDc*kc3Jy_O5!8%i6`gz{_w7H{lh(HdO2NlL>YhO$5+ukO1)!*jSN&_ zhgLq+OJO$Z{I=5eNAZgxc5cQ9B*dqlRuC7c{(uFEU)nii>(s>6f%g@;KA0%KJ z#wG4fd;-hU_MZi)o|o)J1@x&J3s5JBG7{gJYJ&Zb1Fd&DIuyl$GG0~lEhn+4# ztRo;GNEG(=NKz0+mTnLZliOhj$H?$;#B#nMuIKLQOWfya0xjkW>fEoooua)Exwi^L za*m}McgHq_!7)yue7=QPTm~*Kd=Zf*ZXE`@{SH<)tNsKp?j?5*=Wr+2#|-jj(r5*Z zn%$gMzUi*B!R{uzN{46x|BeIRc8qw;APa>mHpziV4+`RtD&>2fEhSXgPJg_|+r3OK zQqU(|;KOM@?;zO3;Tee}V&@vX=py$HM? zdyV?~h}b4j#rR;k58%H;(}qNK0UZNB|75JJjb$?*WH+pC+fOZbFKG&=i6qbkUzx7* z(5?M0e}oy7$PerhrT9BemMo_U4a~gaGv5sy0LKdRNX4|ZKi0KuX%*Fcj#gi5hVcWyeRa2{1?pKWC&j( z{;nF-f}yGhBnW#~rV~KOuXOEEl{jpf-5W0Y5&n+uU9NKbv>|bU#PzoM)l?)D2g1F! zQSUvn+1`$VO&VzQc{CsW_((L1$bcjM(Z7B69SXY5CfxXVcyqAHYpD1(=X~vY?{o2{ zFzh^|FMB2A8mzkLVtXAMl-7TrnmQzUph2{6!g-1!2DXC|_Vbj6@8+zd-0r=`4-0kr z0MBFl*})YFcF-B3RtUvYK1xc;?c43_l%fS`jLL0s( zN!k9zl?gIe5|1fvCmr^}|Kx~8ibwkf9ktez-gVMe&A;#!;eLPL`uJit46cNA&}fio zrI&be*{Zv-xpNNZa-%EnI|Kde#YHW?tIEhrndg6Y7J|ecJ)Ct3EPHl{*z`tPY$TAJ z1399I?MYZ)#E^BHnd{5)CsC$JzgCRaF246@VqOg9m@I@Qx!+!?9N&7l$rZjhe0XEw z)M-NVuZvB>%5kvtv*n#j8AoB}o+zKYDjfbZR9 zY0~Ana4^-lS%>p9xu&Gqg(V2Bbfv@H-FDV_?hfv?ojgtB!@=E?6GwE6!yac(2TK8V zDzB<$ddV32#-ww!t&fj79n*4U^cNS$70#+qc9+L8!rdxdQzz4W9dFNGlvOsnz&=cM ze_;T9EPpi-F8AMMHzxCxD`|bbFJGrlUQc;Pb?7JR&sFlRR&HMIy}0nIcbN9!6^^dD zOzY5m`G;w5!9TCU`ol>`FbVEe4`TAAf`Y|%ii`t{X^-ADhzC3Vtw_6k?x+79iu%oSBjgW%yNs25YZ(?_lt7vmpw zhN0d+#|-*zr!bo(mNMl@4r7U6DZevjFHYWW{yLgwthBQ#SS_-D@$jEsLS()?mB>|% ztGq|RO?154pEn6S@HL5u#J=X{)>RQ}5$O>}F9n}VnW)`Rxmo%Kl>|BZKDzu4?X&n9 z8dUTzCtVeuzP?YFxnolwJV5S0Kk|QS*5BZ0=D<@k;N9=u|9kqDg4b8Qu=|28zPML= zhtTfDW3kvGOp Qu@v=Q z!WWI@U_B#~jGtH@e0N~|H*+yoMq}Ct#NhST-bkp(3xthYvz{~n>oexoxfAoz>lbf= zcH)azAGN*Uc^G1jb|j|pL$}Pm=TS_mnhOn&0Ts#s_PT`q%QdZ3UY%nHmTjY?^Jvp| zGJjn%#iq5hs`%|U+2GMR97T{C1g53VfA`6I3vw|BnQpkmpX)!e(@neOk>G<*H=x?= zs_;ARQ(Rase(NvXtE}Ot8Tt9WFhQ|*v!458VZ~~3Joqo(s)2`#?@0D^@-tZ$M-c(7 z<-IGRT%CeL=6k*uJ2&BvWYRhEw`!e-HXk3c9PO23$X%4VyVmSDPcFZ&$+ViHJB4y_$oo=o$P9H1CC==1PE%KfhIkt_C9~z5{At zywZvk(RY91x=loi-~_{ecOm-B#|0ubAd3JJQBqw;t2#7ZZjM0R0PN{ zX4=;prjg;pRI}bE6wtcJ08H7;cDIcUG@&QI9HiW$d z^bb_khz~FtB$bH}h!g-zyqawkqLYcB2eG=z>Hltqk1iAs!{2^7FTZ84fQ|d z$Xn?0IzqP|=Hc{1sxGz5jMzi|8vhn&RL$0w13(@C%<-sWt&W2kR*2Cm(9`?=LQ$w4 znwRL<*oXgH(7t#4@WymC0B!~NzW~pjhS5pA8g^)Jayc$P^*P^qbai#oR1OfV(%*jGQ^am)Kn5L=W@tu_0R{kYCISJsaHZqh*|7c{nS9b{L^f3mxIocj zQYxO&Ur_BroEM-FhLiKhz>9aUQ$XB5v||X&-@^XU1w9A^gao$GG1z!5fb}r)@sWhJ zx56^4{Vs$Tk4R!59OU2vZIZwZL~j)^6n3r)@#U~_?klD~1r!eAeYs9MC;b0U8`45h z>o4;xMIa95sU*YxLaY$Bn%ddfN*V&>2J8wmU@bnhof`YUcOaJg5OMo0#xUjw@dPpS zcCJhDFU!X@OI{)y_?$67$8Z_o310w1GPC_JeMA?Jdq?mN9wV^bh=z|({bm~FOYWpZ ze#iR==p+EZ5EybV*jBWs|E$V<_Pn3n7Uv+C@5WT1b zeGd!+1B3rN&2U5C$zh`wjW6{i0N9ln*@9TF(JKiS69Jcdi%ZoH{EGH{-hb;l6(flT zrqPNUP@?)CYYZk@;j6`80UyEj>L)!Q1lo1%8rlK3$n^HXe-#h~!h|tYv2XWbBNMim zGk`S;fsGsk<5hB%GgqhUs{gm7_7eY$E(M2mp{MAot~c~a9>77 zM)lJS|8_$lnLKt2WSc*Uq{QM)A+-QQG_(D@vf8Zg9s=qNUdbDnog+LIF>U+N5-CZ9_Tko{3E{A40 zm_aE(oFqN6qXfS2(f@6Fyn6YkQv`tu*C7`*lMWrF1CB5tx?|Q~~vhU9EBjxD0hX!OuUN8K3H&;#sM-9A0DB?)| zJ$$8JqziaMFIxWr7R@pf3_zkdZBHcuKJatCW#0AG-_a%nav$uFhFKi|28JrFpoDLv zS!yJeWMgb>{4OG5nbY?S>+apVSyeqKy?^jEk~&Hz#I6To5uPOHs;rR}yp z?`AE=gUcC53aOjb0jdizP7E%WDB|mrWCO$F91-{eK*NImM^;t2cA?;IGYaBzP`>0o zsR5ulboFHcKnKHpJdBFN>OoE`!IxY?R7VPYG$DuQwVFonj`KVk6w)2_4lgoF}+ zA9?J$t(#;+<+;fP-{5{UqS0er4PZcEBR_rm6uSxRO_B}FhVzDhMRfgPG#zK99w-d~ z`hx~w3&0VNs~Jf1`TGto4)*|nJQ;W#Fx-UjII~yB)!dU5LLRD5jsZijYc{DUeD+1W z1Gb7V>%5#)mhx#pc7s{c$%?oHTvv2VjEd!x*skw@ zRWZmg_PzXjgutZ&w5r_m#5R)r98e91o8z&Fbv;}Dgh_D@$Bd4Pt8~~U^z#FYLF%os zrc}g%Ey_H7Aybk()lczkJMd6di73jMx`(+4$;Nv;f{6EC zE=2}Xkv;+S`yODcv}&E05g~H-frdFhKfl*rJ1GLZW1i~%7O=92_# zUm*@qFNiBCc>p-q&hG9%5Z+|jZh$e;)VxDOLt|P66csuMLj3%Ytod}3Y>1_3*x171 z^B|!EL(Z5=Q@TtbNI{1_XmPP!(s_j@TOiEhcyOn)t1EBN3KI*9wOkMU65w}1BPE?l zKFJ1z40+HU(d9}5*O|rSXysS)nrL|R7US4Tz5c7q5Qa(mC!?-Cu z-4B2@(4~fM{z8Wj+?_^|E^}qdMrrY{HI~D3av~zt3u|P+RrD<_-Qb1xt3&@z7HD4*E!ow3)S69#L zsb>xq2V{cFQw9cxR~;Ec7T-ZLfr=_kB`t>=;a$E(^mCkl5I}|5fM_Hb9D4rGwG2+x zT%9H4TrfmaTA1)uW69+hI6w0`uS-u4jyeD;4Pc9a4_d_Wo>}K$U37hzc_xK3N*5@cl3;UH>e~d3kwrt>Pf$r4|+fhAc$w9$2&_(G#cUDo`ufW~9=E z#18sX$i+b2Bz(bKk4~oZ>tN^F;Y{cI5Kaz=lJbj!sm{xNNo0 zb3iggz&tf zTSrrOdz}k>M)Fu-%{!Z}j*7|tCXb9jpa8NFOOSCO=&QZS{J$pkYMEiSCjh*Fl(F1S zYC!+s!QlTz#u?-QMFTqruE-7CYP$@Tx9XaA2&i&*6rQ@9Vj$<@H;5VBL6O%85MrYF z#>Tqq#c12i>FRjnPjn@;eyZfu@P zRytvcs>!v}ZH| zMnQhlvXI=8@x_!oC8@PwT&m(+9+yv{ZfoLrJxZgCUBR8VXHB5~cwI?5Pc~gsFx?6F zsUC`wO{dK}v66Ggm(>~Cn9XL$HTI9$1ytq4BCJDwGhOWW?&u2RsPm`<@SRFNY?;W$ zUBC8`_<0v8f#w?@>+!d?!K;tHPl?Nb9YH`y=ni>;T`!@!1iW*Sj%7!2NN;Cc&^g=%n^$&30QL>ydsZLH;!Mu@`v( zB|powyzrZduT0HpJ>&}IcP^;6$R%-UOH37qjmesmZ^cluqfeLKVc5o2+kBn{WFKIy zNkbe^bRDb46Z*NtdYl`eoMI3?08}3Tss?i{MZ6HU%_OV z%|kN!@^OLg?@KcpAapIwc^VP1+ROed{#t6sP&M-oSvOcN39gx28bKTWUfGz zm2EfM$fj5O0r2~Ft{d?X_`aXEJ#qOj_1=vFFGNdA%OXgmaWmb&Xa8bM^fyJ)N*R51JYS;|8X5duXIDIz7eP#n`#bx_jUB8ACrKFqwc6cGXME z5dh0>43I(u>4q`Y%^x5YRuT#~2b77Vup5XG>Ap_*v~5m$dU~rI7Q!Ae_LRlH{$P5y zVMf%=?Iv`>U@YN>#8*yzqP4>6zb~^Y3uMppg=I_|Z`@ozp;_CEz_ysjn{q10KDoj& zz9fk_hF`2qB-hdk;2h3Hi3!izP)K}k{pI&iP*gIy0LDdf&$zCLmX;Q|uva3an!2Ma zdAAYpbI5uSG+3ZP8bO>%sbivLpOBQ)1=9!JPUnN$9sVUK_F;hDr9~pH@8FVD|KZF5 zb4fMXNZ@rSd5CHzQSWP4v3nS(r54jp$_qcfp_JFm75t)<@b|g%qPnZqZUQ~-sjM-??lvg8ay9Ccr=HA zo#*^=uhXfnU{HwPov$k{*;k;UWo>>hQi-YDj1tn3pq| z^Y`&SbynIg$_x;3Y{%v&kge3kYIwHw5~1b~~huvm4T zs5^nR4~6&_pOmx%Kn#75HrG#QO-e&>978|-vm*iFTc(O;Ab5u83@8tr)rE-j9&3uB z<#3T{{}=`lF@=6c%~0B-`NrVQUi-|s+oM+aKAEU_Nq{a=%x(H7vQ;Xxbw>0U7l#ox zM=Y!KP8wFM?jT%b4E(QfDv_D;Cq?(KE)Em{U<)$I;gmujpMlOP8L(B`sKc~sZg;g*~*p`h6BT0`V`C< zVpsw%_3V%+>^l@z!L+RD{$E)raYWVBq>4v@dcicXRq=7G%oGc7w$+1jm9R4MKj@UL*!5|Lh}&jq2g~rkCFdVKbab<7+hFpRBQf(S^P`Em3R@i zQv3i(Dh8AFkHBY!6+xw(Pc#8qaW+g|eUQ&3ZfG@+l46$`GZlXEE8>>0SKEyf8{v;P zL>}D8ofBwU`Y7bdmnr>Tytv6-1QQbNS)X%uNcoolPYwQ?_w!(%jbs9u;_6H_SN7(O z01-<`R&-m<3>yYdy zw)2!T(IAp;0Rg?yYWu;XiENAAq}0^s^75GQW3erD6fc}~PHa(UfspHavbQAsj3aV* zKB^+CIeV$8mMn^|UsF?~e|5A=KOub@PMASranf-criZAfP`6J_# zuzFz%lE6<&4i4NPJvjVTi!iKR9KHe42TAGBS;G0hkXZ$!`Amc=$}&ac+*7L7CqfIr zubckS9`3})J{`o*80>RWu~Ni`Q$MYjK>&4Hw`894wJP#3`d1ptDdG|mYcmZ`;0=-k ztN?^1wzw2=0vcx8yuxPsdwc1DA_bWM(*CA2Q6^`Z$!im_Bko+Ss6&+1!}J7l3CD~F zyQYgfa=!^)xq&vXV$i0 z+!ci4O&-rT@ex#t3*6c%w+}K+LA4YG^;DIHio+etG@KscQ9^bxGv_k6$0~TX&p}=a zNL9eo0**R_gGLYTfK&k;SVEvD5fBkc{)^pNri`j=M7py+=svhf@T-o~qXAz{ndt%Z zOK#-31v2rc38`aSe9yt=mh#lS3&qaR870x*ZcxJi^Yz*8W0~V$XO*YiY|nv%mz&E( z>3i{-NXifp8kEK`uK)*`S?>P3ch>yZo)f;zSPKo&t`IDA=OMe z>YzE@Kk|0C`rtUZSe_M~h24To`r!zGb;C#mk4O;*u zeD%i!Y{(iJ{*PWS( zpPK$kA7PV&)-j@D4Eqb5tCiJhettKEH)}vSfm%dG#Y4;AU)Po>v8w&OJrzrrL~p#m zH~ps1l0k^Qa4Zy4y?{b1KC};d9uzJ3%3r7IspR5cO;+vU>@+F8{%6MjtmEm1-b^oQ z(TC*#N6N^`iXi3u0um@__kBB=@dV!73Y4C#Cn~zQ63Xt8kdDD^EgHs7rj(0mj zn8}SMh8LR>71re8E!3nWW$Zr0im0?3l0Uz_HiiOwNS~3EGO;Q#?Z&XwK1Rl?jz(Z< zeUVQRf$ER%)d7_-4274s+rWVqk_n<5dV2Z*%AwHP(M_kBazn6H5kb*p8pi zOYHxn=_|vs*uJ*`K>;NNlukt?q`Q$;1f;t`x&@>}LP-fxIt3)98>CgbQ&K{ZZmD<8 z`MrOy>wGW{&pb1G_Fn6*6|UUX4$_F&keejL|f@a{oD-9qcf}2iSrXe11#B>S~ z2by7pxh&nt(}dsHX!q}-wRR^so{GCC*r}<5VMfS`V)z}e2=zVaN;>Ri)iac^0%s7A1)Q)^Y&GmF0hzPo4;vQbylk|HkX+jT6ztzr zWjl}6%KoY)tykmtI)uvWEqrYKuQUk$fI0{4n;*u}26*kJjJO5kKkdpK?E`|V#d5F2 zufb}N4%~UNFvs1&u_UkzA`p8m=;7(7e@i!s8i%SgyIVeR6q6pbORZ=6V5Ym;zPb?G zJVRnY_~yKCJ0{Z$pZzUIxkbtu2)vs{em~%ghyxR);oo{e!)_<}vOP3qRPdPEpnne& zA)%n?Y4F@%13&8Le@^9ZqoP*9Q;6=EM77M?Y$qz`)s!Nv8=#vZ4MD)u#OD{@9=1lZ zQ&suTWHdy>H2&Uaqt!lpGTb*kH2kBx*YdEg@fNjUx~h*OuE<9Q`LmuvHgLJgz>cV* zq9S}e;{xdZJBW4v0XPFvMTXcc(8^1m(Ks2X1jSryI5=?SwV(M8Hhzfey;h`Cxd?UO zSnvwc%)?W1zC8D=7O%>_&@U;pgr5m;FasCYZFO}K(Hkl;46cHdg4!Vlxormgen&bb zt;IT(p-{gJ<;k>|mZ-EbkZ10%boE_%l-Cw{hz=kr7nFx2Q#DrhnDgBX1Gw ziT8Hnu?KK6P!K2cI|abZ@g1nniKp*BdK3jsA=sN_)YOO|BjIr_GnF#qy?Y1+`7N3> zAJRKNPc^`1GW8%Lv)hu0h{zGH8N9k*z=#TA0**FNd;;o#0?~nxLR)#d^)!(iMh7&s zZi89&@C2;!0NO!f%zI!DjVpDut8BGPK`K^B2n_<?6v#N|X>hqiQRb)0%nj^70aEj z+o0!LN<6z4_lT7>q#Zp|CQtMMXudYfu6DJv9fZ9Ul(uz_OPFEkVQZ+t$wbiF3+6zKF*&%e_X+@KXpBQ zVPSzdbrCq&mL-PqjOrkp*MedA>I^n7I1|7oc|$geY8mMLTX)(0VUZ1$7>f0!iYP*! zz`L_rDv8|v0tR_FFClrm_(GzN3d50M^(;uI=3!X=J+J(A_~ODx6Q-$asa*-Z7At)z z-SGOfUBeUp2Fssih45GFfmfqD!McVEgrPuEZn6Fs{d!&$2;a$s%wKy_5(r}kA??ZE z^8Oj6IAFUFS*;Z~SLaWDAyGKcQ&vyAi~{Kk3Q8n>DT5an9&?cPbtvUSq>~WzTa~fy zj_3evD*Xl~0fXYTT~}lz9fB(ki>9>@^dK<+uwv^Zw*j=G2E+0VBm@N(#tR>}L$EvU zrCptez{$AT1oq$CcTJ4IaF8@t<8ZAFy};i6AGbZEmiS^8$80M9g!CP4Cd%NW71tj#PfO}WV`7jgllvv09|F&%$U$!Vu|?U}R+ z;@}k!(5~P18Vuft*~04-SRQr+V7Rq;0qsj={@tY5*ft24=zuSbq%46;3}WfNK@S=D za08w%?D8l`B?}V=LXj-J0?kMNjy4s$<29KzpCxj?18XqQJl_-_H9iLR1L^$WNg<&W zV5O$-=7hOf2#Gl`pq%Qlh-Id|0yoGE4k6gUjH;)*?VcyXd2Yps4QTym_=a%8M*=^+ z1D@%f?nli7#ri_kcJPp%iHoCvsTld5l{%-#%~!pU8Kd_Xy@3IAA3Z5TA3=Tq0tf7G z`Y(SiyYu*g3mjqMP=pUho`Zl^M+l1=;$xsX%eDVi2cM1XYhdht?BT%=Ul4*j65z^r zA$ZMYXTHUxEdrD(PvMP(O$rbq2#9Ef2$1i9CjHzz+w45$e=m&j7$Xqq%gEWx)<7xj@g8~s#61p2 zGHlrhr~<_2FISAE123PTFtbn;wHjOoSzE*8Z_R} z$0Oox6r?mcKbyO{PQ%Xr9{!y(gumfZ@QXtU0%JtbC{PzcDN`X(fxv%2b;9TX=jpf= zKmHIRTBM&d#FrbxC6GH;5R_#R-rNA}i@!I;n7mTTizMSx92A<2rFtq~V zv1$Me39W=iq5&xK-@kw3Llp?`4G85>Az_%y-Tw>)!3i;xr$P_+Fax7Ry%K~U&|^S;Wurkq1b-w5 zdvXE|4!L8Or~Q60(a{o+P#~wIv;zBz8N5qy94U0;!p5Iu+!l<0wU_&8S5{f14NOAJ zY2h=%M3d1Cj!y()^2ka18XF-{p^QKy>6eqe#_zAsZQaq(yggUmH9M|95w`3z3~c?| zn3@0EEIT&#xp;5lYpTtCkhS$gYEfu!iVt*Cpb4tujaY#97fE~TSh=eh(+-V*)nwT{ z*h*MngYQVqf_jU^u<1Nre?<1d=NXX=`52dNM)=RW?+Kuuo$H|dvDSw5AMGlJgw z93)CeF%JOlWlnt=Bc?gBQ9%0$u-6+XSFPHFQ4uK*QpEuz(F#RI#Z4!dm7WDK0HMx^ zy@9AIDEYadDhKy$8RW+x+7DRmNW=q_We7Eoe*JpgQwQD$+1%zob?Xp7OpzJ<1|$TC1`H~Z6OhXxksq*;0{h?(UO5ypoYNU`B1w=$R zIbX3>(#eSjG?Ul9LAZ+~+$&VsojRbZzC|Z&L%^dh&oXpzb~P_wAjJ(_J4AUD>iWNj za2j}b`#}BzDKr9b+6-|_HSAb#2F6U)(HeA)6EI_7Y?kbaGylF z#e|o>n-Hv^qK#8re>*~6jAc_{SllEG>Po>5EvGSCaI&gqejFIWxqFe(qgxXnq{x^4 z5IZz8#-S1}ZDSDS0P03QBG26a(*i64jdgwg^$jW`IIWO#6sh~Vxf12eH4J#8nj1o#trhuCO%|x+s zknS@;wQm$W%nMaeryqb@#pQkCSfcq}#P^)Pw6qlI+TqRVvWtwQnNc8;riIWs4%1F{ zi=MjxVIUL&{3D1iGlj08$)|pLRS85#aGpG>DuK5XEzJ19gb}0Jx;9iuu ztSSMBW|+Y%J!#8ZL@gb*!+))3D1S^){j)MhilKll4l$O;OT3 z;Unm(!23}eo~Xn)T;p_mh>Mdw;R&cLOb7D$v38Q%HXj72}d!=vxE=`31rGTIeYL1u;^BWL-X=HNhk#p^AIZDR;-UnF!x#7 zb&3|d!MVnPfdP|g;>HvG_{`}vczNqZ0H!h7?6u&6vdn&S3)&HEvAGBnO*K{3p&!Eq zAX1oz_{%}l)rqo;X8{4{m^fIA-!g{vYCZ+PwI4sC{NBxMG`$^Ze02Rys;`fry7r%h50YGI-kKV&=!HV7euV!ISl)7)I^ZnQk)f< zf}kAH&bYdQ(MS zA)6Yi>`D>rfA-TI5ZdJf{joTdzCc(YLMTA$VxSU)P$LL*p@sQl?bek@ZF2qAU1j?u zh`1}&GJNyq4U*FZ91)ZaHc}7EL2h)*Y!K~!Dv(7pO5yk9={Px6lMEA6Q~PS1mS$Gs zEkL^fyoiB8YL&t7bcr_=J^k>`GE?}^+B-YDKo}6Av2h0XO`MK#knLm<=o<&Qbrcg7 z3;DQZ$HZ87nUre$aZr|)kI5$f=&a8?_QNvM?^3 z4k9jxa-UH{`qDLiY(0TTaTH>{6d{t)P~v*_O+Cg+xC=;^4LGxxm)ARD z3H|D#9ztH}+NLcCAkAnu(E-Jnz0_`hnwVk6!X96YL5Wn%p;pnUGXLh<#Jlnet66{F zV^_&L_sh+v(`;vs7)5318|$j+1$f?&8nShCS<$c$M7{FraAeye42ewcH2VoeHeiU7 zuRB6p<|ma`p``F%lFYE#{4c2pme83=u29{=zIY0c_w;Dm0f|3F-Vb$`l<680&WD28 z)$L7jF^#VJ^I9S_4OhV;?4%95@%exMR4Z$bK4AHCadAOvsopzH9fv@u z`39Q({6x?Ga*3YIUjvagTfj3^N0##6EJH5LbdMBYf^T?KU$ z#BB{gZFC)%0+XL@1i@jjZr^7IwG@JLdL8}!0SF&IY?7cDTq>%bHQAi1%+AfN$Kit5 zq!&R`aVxN~qfszs1GjAiq~rO;w%@qY+mxtRst^=`Cwf8y(U#f3jZU4H!_fz_CDd;= zC5_klBR@9zoN)p+jYxam63`=+0>rF!^!GpOX50K#|MCAPQmH)2dlDHfADYP@@Kjp* zVX|T#O!oTYHZ>>sfMP}Kx5LRHqIQQ(7-FKKw;9ceDb%Y~JtN<&>oWq0Im!%M9hI;L zzO)L63?CkP`avi-qMd^Et_6gxlao`jsLxc9c$CXr-$DbR0!F|FAzfjC224R9XVxg3 zZ@#*CpwMYu4v7OiHt4G5GBm~+z|DmAT6dUmz`!8vYkXLKhGMOfBCj}RJyicHt~z|tn+6a`3O zZ-DBi-<3$Mf1Qp;Wi7Vl3@i?FXadd5%}W6h2UWXz4f8vwiql}RYLU+hn*St%TrjOF zTT(dm7a<&W3f#r?06+q84e7T)pp67*tu8q<>|O_W(*%ChauriAEHW8bfefUVv|MOnggLo$eg7lvP7cy7SP@CnFv0NL4&v_M%_L4Z!}z4KaQ z*A-q$q{kBz6SIq$grqA}q>T9rwKp_IxfceYY%SC%(4egZRAXvp5CL2i2h`jfw~_me z$a)ZkH1z(Qj`QLOb}Sju_pK4INN($qw=gsj>T0~}IArL`i-~Qs%JmwUtVz5ym#xyS z6YO_yMTT7pQikT6XcD=Wg|`@qm+%>tYP}dq=e3e9+3ZTkZ-F>sw^pa*DV;X<}(` zIF^C%yQudDwYNCzM%{%52EV{43Z-79iHG@rwPH}WA6>24trRIo{g2NO>;s%qU)1JT z$n?gbjf4IdNhn{~lG(+I#ErFZSu78F;&+wuEeLw}-hl$hjHRW&nnM)cnSy7cC z0{~>=+q^GXg@yHmB-};5K$Yyz8(x_0Sy&8Y-tYJXD2xGugQ`)pur-UN8%bY;zSapC zUugAVzz2jK4uD61_0<8~_F*_y5K9gWng#Z?#f>J!*ZP!KM&^0L}`RN+-BEU=v@ zzw@ji#tT0B(RlgAQ+kSSRALdFb**>#cG3>-6ZZA>Im-_wY$)v@5ezmyFrB3f*S!ojh|4n13rv6o)Av~ zxWHOj-~Ze8yXuCUkC@h={JMwR??wiB0*I*wdM~KgZKNzxhTp*9mbY0Cw->=Qz>9_m z(h<@cL>7QCAz&jEd3XI`WCF0YUC@jpM*}pw5bgw&YYxWGzC&M25F0}BJ(Q1&Ftx!5 zqQ8($9@t|Wp9ZjwR2&y%hi$>z!vyD@8Jr==7`&JmNkA2$rx`|j3RnZu@4?j}-Xc1> z0Pt)O7L4ZOm>*lPuPZO4HHL1!IdbX4 zKh_Qe4+I-|t4T4uTq9(13(k$6!Ot)+*G~Zo378X`pcE>f0~M&Y?SZE)F<(vT)^*#S zO+meO{VS|qSosK2iGcNR)X~702+$4;0l^DR$W554G3z$24^oKo(CzHwr>VjT&}&<@ z#dXtt;d2g1a@3uG!wb=VM#$Wfp-<~g{sFfOFw?;m^SC%^7Ka*J6}a<=iWiyYh#>h> z?K?3_d)TBhC&dQA+`j#xB&}q=k~HC# zKl~st@NIKWdnf?n2OFIQ9H~=JmRwl)&Fhy5;?S*NbLryohzNPjl}y*r_Jn9C<;??E$6{16{I0L2x9smjS%1*jnRj^S1 zqZ5Iig+?_5dd!%QA7!B-K+ZjCzjF?hD3PPPX+B4!^IBX2K$%0$ybJZH<_XU)IZ)GB zfb5z$|HOO4@ZW8Fe);&DtC8Pzc=R5KqF0Y>GT(g*Cj)HwK$AgZ7GINM^;MmnF3$pqIBIM$C(1+>tR;P zzAin5#ZPZq*^=h>&uKC5-BD5R=$zJo&kt< zpYK2MbHiE>pL4PJOB}zn*j%|Xe)Jt?W=F>)$}3ot$WT+GonOG$x*KtwO|Q?n@bE>o zF|Y1d9Tt!j7kOmQ8Zod>q)A-Vt35nHp8#+#XbPd$bXLv*HAfT>-@ku1SP6qSxi%XIyW5=Ksnkm-aKa{S$AYi)@BkMxffn){5NE^|3zd|5QZ0S!CTo4K zmUj$q=GijO$QC{2Yb)Y-))+!}8at|}(8m_JUsAX8Xgs1-atR4cXusW2Vt84(a8qF9ZyD2LHNgJW@NQN8xE4(x=(Tew~?ZJzgW8Po%CrEawz z&C(48aIO}yE2E#^m9=I{%|qZcy1;t-Jfmvyw)74^>lzE~w}z=4k9(74XhShu-9LXi zCwH!jK&G}z5l)bcn7Z=kp*I6? z=2=PO3nQ7qz;C>RjbsmQITu9kk=NbNr-_ptJ&PT)A;@?&`>p2GXW|q~wP-BQ*Ld0f zroX@)rbG1Kxh6NQB`rz>K!&A1E_$;yBHku4(|+lO=lUe(Uvz@I`2K#B9~cT0T=A}5 zl{7_%+mdRlvIi#B8dVKc6+{piW8Yy*D%C0+c^iIo)QxZNL^;KKpN=k0b2j0f#GL?% zs)f}JDP?7RR8&;p*g?%w5Wxnvx!YPEjNNalPq!kYCdtd!;pc+*NkKIQSoT z_~m2Xo7J-4TyJufmq#_1AN>CbqGhE>L)sOL;yfN=TMH-9|+$EAzPN#<1a&T*`?wk^La4=S+e?yC*np~4w3MRPa zvtmHk`glkC*Sr7S66|p_H}vE_1&iW+j&3qG-KqC8Wm_&jPt?`zigUSytk~~9q-fW$ zz_cGU8ankEUtRI=m?U6uW>pAaVv7OzFa ztABR}2Ny%D9b?~{J;9;w8rgAjIDU+uPf1Np@17L&oB3n(y$=95dizjLGOW51)tktw zsHsV}6i+a*6Tgp*RfOcuoO5qiL8rP0Gj|VdLUw+q7ylI^>iSbd)N`NQ*H_}?H;PQyPS-gdZ&dZ#|inV;_7`@+hHyAG(N1|cXS@fE(_LJGn{GndY4>r1iP_?nG>;~ zo`b5h+L)9W%cR5{(_Xt;|Edw~rm6??aB09SL)&-&sHtOro zO2@86k%Uo%zD=JAxbfiS?_hjF=Mb~lzZOvfzJ9ju6TOsJ=)3#gHCulzMY;A<&C7*K zJPjWjlzgnK6J(HYwdJj@eX8iH=HE$#XDz!t{kAdsG-8#zkX_PIXup1R`*K z*?>f79b4U6m)Jgj%_#yxDu#_70Cn&2{Y*ECH=9{(O!!? zqLsZEzK=^K{N2ItY?^l!8};FuEAGwjZN?&Yp2GCqtPwobDLF6D-$;0iQj0&qHFueI z|BdUQSeq7+mPBsz1>1h9;n~~6_hd&K5s_}_FLM+X6_Huk2>t^10CC9JSKi1McdUT) zg*N*;AGk5#Q)&1KPUo&JyMR>;L?L#?kx?>LE0%xkFN3aSS~{u9k@;QgfGaR4scVU2 z?|v4By=+4+>tG^E1WR??wJE*I>CRC{dV~H>5vevh?)AIk%y#0s44}U9J71zkHoy?E zb0i8~Cr}HkE)HOZ^O_ys^?XUAe$JlM5)S#w2|~&TP1usC5nk7g{=B*upFR6Mb3Ip_ z1|JiBv(vhgcUq@Zp#4!{`Y^{o6W+H2@#vN|RQ>VT1Ymfh!T+{>-1Xb5s=`Nhx~Ag8 z)nv?_3MV;xmxanf)9B*|UOw$ra$C8x%7JnYUkI$YkjnuTkgAGG3sfgvz~xMB*D4a}mZ|zl)d{2}agSQP>^wShm}B&M4L zQPJHT#p$Eoq6Dq%i_y2T)JaR(w3gq)vp%?_?;c#D6bb3< zE()5LX|^xkQEm?&d$>l{sESo>z=7r%ghHH*a=z){X9{f}G6*E4$)S0Db+V{`Z{ZT} z3$8{rzrzO;Q?0T#pqJSt-e@jIcXqoS0*1KBod zqL#@{*WKLQQtJA>DpPfvn~2l4mMWPIO&|9Y6!m>%w)y(u@3-yP!Sl1P{AN#bc8){I zhIZ6PZVNKd$KG#93%DKcb9T&Oxm0g8u8IF~AOfFEI*vwV3jZ#Cd>Sp0nY>J2jFUxe zX+-qt>Z>SD+wQye_2*l~B3Lb0@+yP0saJmG0;{cx14I$Z%AYec(bRFef)jdkKAjHo zZQoYq8srXY7Cj<~x^TnZ-KBFq*FvVIflhp+xb}a0A71xLC_WEK8iDax%!zHE4R&wH zA#XKBMv>k?r@=tgV=Kjlir%1E$>$|jW=U^PA`7FAey*$ZqY3R!g#4ctpygT0w0(U9 z==NqX%eQZ({`$vqV;#3b(Ho6nTkna?+~q{SS5#fmFn^rTwa;wSlbJ^Dc{Q)#`LHc2 z9F@K7xM>!7<&rz;m3jNt_0#o&5)?Ukd1KIP>)S@B3n(Zmde*Ob2CRCP{@nG*S8Qt* zA`CtmF^ljGdPDlb`#Sm3c$r8A@oi2)LZ**7r9P|G4FYrR4!##c3s}UiWH5nkxnSGf zWonH>E$##P(vNp+UY7Ugk3$|jIKsd65amIr%-rmkwK}EQ*VtwP-unCp;T+!l4meAF zeGra9rSB#vrU)Q-J8-sB|GQ^tdDz8*+ytLsEmUZ{U=h{5oi*UB^x|OSyK`V4NqP}6 z?Yi9Z^mh-}2`3NBDPw|16zOOZgo1VNoSZFYtb;{77WcT13f0VLPOeG)t)4Bn!KVH;wXC#F3sk^0w> z^e9NYfWa;OJmY$%;hO5|P5|ItbL3phXbhWuPWKK=}pqNjxAykOB1 z3Q07KGYx&Iy!{0u@zVbK4wo`zPhk7a3B%?P9S0l>vcMd4)n~U2?f!)uk~}donv1Pl zcSUEsyTP~J_PiuRQ$6G?!)9S4@A-ANtl~aJr!OJx=yyDC2);2b}dRL}Rrn4SP zIEbDVG!~}ldA$}(;aq(v^VzYuVKIoR2&#PakTzO$t2^Z!FRvNmB`SV1kzy*AiZ}6l zZmumkNbG&%TDy4{!H^V@26g(73uZY{lV13YW975=Cmx4>HJy7xUgn3^`xBt>GzB!A z!xTblK@SL!wQL$BPo3K8S^}wyd<(`pw;P zr6ln!rHYleu8ABeoo0b7!@8G>pKA{Aw>)m}8M^S6G+hYjRxO8=;F;gF;oDrwyy^RT zc(Q^@+y#^lz%!V3GRV_`m=ah-ut~UcD_vNI!8WVJ==}8dmqoIs*v|ymLAUS>O&v^z zecFp{^zw2AcE@L&T{beSZM++*45}>~oKEaqQinTfYoo`z^3{XHcb+qru;KZmezDVB z=61M>H+Zx3e#k4hBln1S!Qlah>peYGO)jbLCKYBJIGD!zb#JX-Qma0z%`TDxsWG^5 zaZ#>->I`3A0U+r&)UR2^#gRbEmxDDXpoIqF5ZIyfU|)HW*a;d-lPUeXDtY?A6%mi)z~R%f4&-_}W6)6)DW25U$ZN_U|Z>d-eqd>pU`$gZ1ef@qm-Aeb~{6gk4mjaA1)n&)U*Z)=BUYCj1U#| zh$}uHHi@t|LyL6WPgjQwqgD=#uT3W9G@x@bt^6^-~0Sy;pbXyG@L++Cchh7m6B0Iqw0*o&ba0XvH#q(dvPlP4|tvtZV zKXB5PaF9wPvTx!1+0*eKe+ST_E5N*@Qr@S%Ue5;WJPOvCzsuC=`w1c6`lXnQFFU>W%(Fc(rGjK&MB@lqU7)7`a1BLVMJ0OSkN2O?A8QVV6eGqz>bsM|eA!hv z-FUH8N5;p=H>km8Ckh!_h;;+R2jDsD+{AsAa0RkdWONt`GIvuZ+)AiHXMp#{&*O5& znuwvyheXX-+VSiOPe1*35=(Jzig0)=`&>t7s(qN} z)zM#G3@g{V@bvv15AVOi%1;!kxm}-1tGjV>#eDyj+Qqj~wRC(IvBrs_{~U#~Kw3s! zz2`nDgPc;R<=XsgPeLVPDkA$(G#ffzqSJ$NcJZ=DxnMp$%?4 zQ2p`&wP~>0jFl4DznYbkv%`V7b1D-gX zJd4tvGZWZrUb~RSYG~W1FGwT^!#BUf(YpJUa~5_9)6w|B}Xd|FS_=nr66Z`;A-EIT3KzA3cC4wx8^CG&wRl$^mx?7i$2-LHAF;fc|X(umo_4_ph1) zFAs(i6>aTz#T$rG9Ee{e3J+rQl-%5SDl01i^_QZkB1+^n`;HIH&zJms$#`?$-7rIx zfpW`d#m$#q$f`hljRNVJ?80~iQQMH~8FccO0d}4G^{TJA_Ch?T5?@hB-rLe7px&0V zNO;)W_A|zOM(FP&oW-Y$gMU}GwDt(7SFS?VrKpe|4|RZobJ{ye$hIFa8(qkvdc9+L z339m`G@$>dl?qPJe+ZgGQ52v@mrH;M!*8P9KUrEhl0%3l=(2gCubOckeu|<8A!e|C z0TH4I4Go3-tp!jHuf{!BdM9uR!l?-5MTCBYBr=GYfmJ~)FCX$s4y?CG7zIM&1HqS} z{1&w4NQfY!n+3hTkoQ(V&fjU>K*qb0%*;~bZo$6~OgI18v7DQ*A}Vz)6V-|sLQXk( z=iS+>cx6@hx2Qg^951r5%-o-u@5ncPP0T24K$8y${fQllOO^T3T_?nrjMMDx?nP2s zT0blyWuhQpH`DX;2}IBq8csk`UFrv^IW<6=eE}ydkOV3H#m0Ds34M z*7w}Og2ny9`1PH83T~zh!efQ9Wf^x>KK?f{BoBLu?Bnk1&aH%B`a5fvej*3jPms zg5T?r>Na5Q&$6c2#{%vL>3bbZyU4BsFDGgZ7yu#!ps#^ZznK1zML1Zb%hxA%<&7BI zKof2|nQfR1+zHV7MSm z3M?+QW60)BL=qHYVhH0|v|-FySON%S|Fa1~vKgXyf%%yth%M>SBMKcKz(1=tX3*`P ztEl(2{JR)AU01#-;fyl&6{TZ{MzWX8mpk4=V`neWk6=iWrS~krukb=>j@ai-W+1yw zdWgTWmjCr0vJXetxFnPe<+3YLWks+kwL~{7hW&RO%zty;(f`!Fw0n1nD(VKNreS2b z9pt619J@e0HRC>Qhp4|h$;q&ywqfF+-@oBBWGpkRV?<)N(%ENtxpzm3AM|w8)ziHo zzCmP~wC_9itfY22rs_&f$qPKYZ=@fqU=D_VRIW4p@QP0xZ~&1Ylv2Lo3Sj z6dAHC!{!9qr_s?-M79gItWxh&XV5VtNxD#*qPNnOHJm#J&B1_@Ql}*uM9BgciSS(z z1MC5ROV(8f&riF-!zo-J86%4b;1Hz}V~Q&wvimfNp)P%bI0?jj2g7yup^~Bku&`}G ze3%;%P=K`fKc`c#gYSOUTo!fP?sgXOIm3&gn0EX`oS)q1`NoAm#zHzQN3DTK&o zHbnFi5NDEe5qi>g6uu4IQ{cuKgWob|z z?dy3)L@1m1Hr@2K`j<9a^^8jzbOuZ<8Y7J6O5@rE0$a>xbu(r1OUxop_X0^Db&1?5 zH65LwQg|Zm;Lq)bA`c}{L?l{h36Y>!>TdFqtHTD^qbNxnN*8 z6$D&Dn5^yZAh1+$=6H-o{b!E^vo73eaz0DQMSj4>#=C-813)-{vY@;Rg$Z5={mdiI ze+~-j>JR`RMe{ep5ROtrjRGDtM0#(1bUkvuONAP9e%GV5b}a)xB;Oh{h^UZ+D?h(u ziQ+Pk-+T~r-pq68Df+23a7{ic3kyqbDV{A5mf*lqoy1$SBvg6lw_ zi=@`oEXV7HHyqq#tNHc`nXXQ@xDT1Gh{_OzTGW_+UCrPJe|nUZnD`U&GJmpG&zOYw zCJV$u7}4&?^JkfX z!O}Dg)M{;>QzOqw8=vlPB<=F@F0n=kONT8?EXhXj?8V4Ds$QYAvz1*ke?7n2iAbMf8 zXncKN%}sv>S?rf7mp4dOe0!=gQ?$%mdFs)OQ47Xjui)Kzzk4Iet67(RD3h@jUhO`x zN=2Rs%ZA@I_D});rMLU`EY3H0`PT;NXCmqUZLh~DvbFqib%u-C1=0LhV0Dl=qF0v} z;8RCj(4dh-2C0J^g%oU*NTO9IxdUX#T)y2T=BD{EGByf2P}=VMGEu^$VI7_Gv1OB$ zt0<>I=KOz;9LdF`JC-Yq%eAq7V80f}mk*G*DF1Z!@Gs5x;3MOD@g7r^~IVZmF)o438#O-APn_j0cs3y5W z!@~ZI7JPKt=eT=|%y=c5eGiUy(rGd9t%3^)GUM*D)veK4!0>c%2rxZ*#K_1P0-C%X z-G}lV#+9I-Nmwv;6HNKfGAi>^_UTg`Bs2p&7?ghHnR$hU*>G}$M6psp6H{3t_x6hx zLRL|Z$5tbSGMVLe3uE88^7+I_=#`RiY9mA}>Lp!F0Ng3ibt)zI#@U&3>*ueJ$>9#Qt{FtHw%ANeMSM)$1XW zfDQ~ESF4BgiQOvU_FEW=j;fe>>;6E#_#TWp#M_@C`2Y{HF$7<33dg-KrDe= z+{Ar-r$WiZL|7wsJZ?ZT(ra=FeA(pHd1|MCc*T&gkhK1gA7&=!C%YWA zX@G`YYn>f}{bwYgk)gsuKItY2u2MBnB6}Qc4Oz1XkLR^$f_KB?P2^Smc`V?x|_M z7t|T!CkD`Vdp&XMgYp&#TRxP9u;nAn0f9v_n!EU|fW zi6@san2m6RE?Kp{Kl$78BSAoq{XkOqa8#J%%E|Y^Oz?Ae&h4$!?CH9!Q*jNiu+MDz|)A^--Az=jvBOiV%g?I3OSVVb*F=Nl1NX+(h7@SSBWW=gtQPz|5vLOT+&xkS;CY ztTI`tboU`cv#pH02ASpUErsXQ&h}qXh?>)A{;`WuYc?wUB4uf&iMNE zYnwZF7aaZw82F{I5P?R;Yj6}5(GK9~K$7YJc;@uG^hWAXX#Y$w2LMBX{>yLXduixf z8;RBEv6T? z<)1yv&CU)4sU;E$0d^y+K&vaQ%r*zGxlt|MOMyw^;0XT=TLa7-NCd4oc=X%B6!R0l zJraC`yhq?DK*m8HtzRMb5^f4EfWW73E#Os-3H;cv%}0+ol)DC^(&J?u`Th#4FVwZi8+ZL&uz_cGalwfF5kaIq|NY6; zJ;-pW`cTgP;hm>+20NZ){?JJhppk_XZ_`_@!6uoxz3Tr{WLR%r5A(XaI~)fyw3pa5&%-Oyzi(3B#?NCi>GvAY|3O){oM=;Q45L9j z8VvwwMV+!I$cC`%34O zGp%2zeQdGlgoiSWm<5OW8HQH#@hdbhlpj;?1&c!H$IOY7-)a1FKif6V1JgHR2G{eu zIJ8RaL>fzamRAt&)o{MoEyGNdF0UIJ33WZR=Z{eCg7F=YMeQE1r^5)ViBFP`1lU6j zkbeq)83zwX4+r+`Z_@w^H8!S`5*FRj%4mHxe_vCqPC%ysMq}}W* zf}lgsL=K4{{Z9;uzy#Yhf|ihSS*t4u9&=;;F<7l zJHfP|?F2h4^M?OqBm;kLQBDa&WJd);^ZFXvy|1HTC1ao(-d*Z+D$8qsfKT!9AZi=$ zTWY9C^6dVB(&TFKo<7H!J#rpek9Rn|@+y+vDy)`yRS;B_i;o^y;LY1<##w0RN9G9uX=h1u zv@Z&|2BrZ01)(OGarBv5Uu zP^Mo}(g;lU7S=N7eK}NJJq&u)r+D8h`?KTbht2+IzJw<->Jw|*yh**V^*6L2M|jQ) zWC?)YpA(Qz5}+-RKm>pnWh5j}d3bohY{&&qHEYPj#3ZwHZcTXtX3Bg3s}KY|hnK>I znu0a;L?&<4+8j=j27uPV>y>`C+sq{u$7Sty5^N$fRuC4Ed~4|2<8E!2?yEM zUN)amBKBLP28DnJB4XkNSHT}JjR02KW*q)ZB+Z{ph0uA%$1c?4YuNRPIUqfTWHsWC zhQ0!DZIrlIqi&QC(zNY+EQEwdkWmG%xj!7FC|T%0YuS~7P=MUvdE8SoOsQA6%iDJ@ z8lNBW*&T9Q*eCxe?tZzzSxp5(5en${d*En9Jps@6pSfn!MZ*E#Q06d?le4+9&op-o zO9Lkt+ZjDuXP@3Q{uua#p8`c$YNy-YwAN^?WKy*z;mVumwj!n(saNvi{EUcQw?ZI=ddrEAbokHe7P4=Q1@@d*FBpjd!aID#~(Y=CR4YX+rU0qm-M2ptc>tu zchKCngJx1dXII6fEo{F)Zbpb@%WV$}OlAC^7NAe=sxRk4#PlNuTFaoh^O0H3_NV{X z)0cpAxvpO$C8Q)&l1gSm=CKgUkjzO)=7`LN21%KsOi?29EM=ajjEPbqLYb0^P-sxT z^|a6bJJ;FQb@tvJe!us9o_kpLy4UI+T;udptuWIfJmOKI`>tZ?=O4zBw$ji0+aPD#c!54C_9aGCUi;&{2-cS- z2DPEKr}C+|&6EbuUY!sUyjD~HKGdMF&2e**Qe)&^4W{zd4^(!~OdCH8so0dRJNjy% zF3%qgJA(Bi6Csm=zWC7b-%D}Dm+UX-n49klP2GKRJbtc|{qNUYkE$Q})CH$~v6I2^ z*>Nv*K&u3=)Lx@niKB;%jF>Z0E*#^tQNYj;tWGFQ0^+`rc_zN=!$w6^8Zb|Kr6b>U zIr)cEcHqyIZHHokXBz3Wkd=Z;O6 zmKdvYzx|D0cDr}7yNB761N);G>Jv)VA5xTnhfX2&RcuCuTH$6TpPCiK0njIiS0MN6Q5X*TQp5FN;^^~9(HtRzeZ#C z*y+lCNiTtoL2Ke(U6nr&QSsw~nebNZ^dKx?g9Qdi6&Cd8Pl={-aA}N7giDQ2Uqbqz!L7(eD&>CBswtCvo*liD zEHCVNM|2s7?e^~3Lz(p?gaDHzu8~`!1JCN;K1Am-&>^yK>;9DA++59)GsXOj?EH79 zLxwIaiug=DF)}>fYh66>NctiVR{9aA_*8795}x!s72Ql#ITCc>PnE}$-f;~bM(NGB z&Z}wDK&VrOedD2vrb4Xa1CFJw>t7v-P*F{m+BmRwkILGE2S{>~4b@}uC1(em%H`1Onb zvg^Y}iT1;gL)w_PBWpN3GmkppfMX4d;jZtNf=4F%Ue~*R=y2Zpl4*SebK$|}!J&(H z9u9=g#z86gu!*aqKoy6#e!R9Fvsy;(Cq{0gmLcCiKJb6s`E9dtEqbb%E=n?zvz6Fb zY-H4XA%Zoo(Gok>H>Y&@R6#GkT>q{@>$9tj=-sY(n=MIfn@(L>WC4M8{?O&u1UQ_^rVFa8Q(>5MfTLn5Bq&@ znD#_k%*?H#JLV;+rbYwkV-wCic7)DXQ0SF}qvOChY0OowqkHy{sVQ5Lke-2omQnAX zTxjFfS<}$ENaOBdb#OaJPkS-y%$n4mkrxitf!kPC*dYbLE4lbFsNB2wd|E>7TfKu3 zO0Jx{JH`0j_-}^G)0}Dul78Q^W5Mc9m&`sLro@ngzs?)(meJ3*yKC^Zf|zB7tw|dXuG*>mOnpZ^Z8Bz^l(*PNu-_eb9UZmQMep@78?o3&jBfDKW_&% zs}i*+a9g$?Sdq}S6L*kXynGNK)omt~J6wiFEz_>=-7Dd10&%r*S*Ck$-|Q7&y#Ep7 z3@A;^OACNYO?CBs^C+aZ$Oa(0jB9ci;i*Mz?@4<8QQ`TK3TM>|H&pg0aBN!qOL0|+ zBB85~(LxX_^5N>uud?c!mYmc)#1gU8!Z$`QC8|NE{j-?9}Gf8kB$Lf5dUK3 z@NeDwBgbER4QGduQ;L8A=e%%Y)7fpnV% ze#pKUxTN%t+RDhj3*aT_Q729~A5Y&3n-Xiy@jC*Mp=FU~&n-odl(txiOF6_v`~FeaB4~R?p0|5=hQ&JEau}(*#FdqP`mu>?^)Ns* zM@OgZ`3u=OIUqlefAgsXmJcbjjGCGa51!NbciA1fW1GgPs}*aX7MJE6#nmx)Up?v1 z<%6NA@Sby(Ni>7?<@a5p{@{!~ecI_-IYwS`f$^7(G;Z^5;0ixeIvP$>J?wHnAvZT( zyK72t{pSDPHfa4lVBETDhpex05V5q8joNhrBwzXcwAI77Z7f%nZd>vl+0E!ZQ*9C@KQ)jPoxY3hM)&8)Df#z1WP-*TOq&epq% z;%?PjnwCC;&B0b?ptmD;;$D~CQ%x;B73K8TuX&op20H};|D*Eb_)P`0Q?jscNe$bi z)*P40w_i3H2Te^6a5eCQ)g#BATe@~z;x`}BuZTK(sKSwN8@1K zn4Vq|vrwcDS1Nu%!L+h6R=|;M<9M(;0we}AF>l6W>Cn)CeoSOcjOz2G6R<(s5%lWn zlhKCHi~8o~N8Q}^ho(vxR+a8au;FT=dTI4|cY-zsZ3!zi3h>x*Fnm%vaCZM6l?3_@ z78OHR&b{vcok|(E%{ZTJEa6X1?wGo&?ykJ|IT~`5$HjinIjH_pK=(T4wZz!)yv$jt zAzIqgJr3mu$O;*jfVb})tHfxr4DD(WAcOe+>1rsg{2hUQ*B zXnq z!v+3FavytXK`Ef(y0$IGA%$B*KYAp7^K(@4+_JKFZ{FN+`Nt?tZeAY0kb?h!4G+KU z-3@BWQM(x*jk?M_mij&*kve1Z z0PqP4?&apr$UBPcO(^l#*Kf*3=+|!9D zhE5$z=g|Y=(ap_V`KR6p&EQ!d?MPiD+efz}+vI1hRqM9waJRe3I9?o{{iHflMJId|@Io#F z1@?U%UIbMJ5ACkOxA$M%+*s%=JY*dBj!wtZrD~c7)p9F1fmMSsX-!~?RN{Nx?8mp- z!^_)t;SU%|WVSqVp%%u95UTOjc2=+ePH^m|Ou2~=1c8Wk-NTv%O<}kNvgQRzX9B~5 zViP5iJO@g4-tg>S{_z~Sz;`FZ*m?!4X_**e8SecR?kLi>a+H%wm~ptv$Jh)buC|n? zata)UJ+TebC6PUfAwMqA*m?Y}+eLji4h$HgJsX47T8w-G-_unEmMQobgovB>LqHJb zb08^HzH*ldG;W#trg!SpE#R&ydzjVsFKt;*jcI;Zi`7{th^$#D<17R{ITJXm-gIrp zmd6>glx%;hDj)Y*&{OlW5mpHl&_6ngM{EbQC`TaHXHLq$k-3N#jjnD3k%q%a7bIM( z>N;MOrVx97K>2Z?c&bNgk@xT!Wsbf!j>5|yScg(-(*bfm3f>~P%srV^yl?2BbCsbnF&1-w{016o@yzF&;%J-z4uQ_ z&nlns+QM!wARvJ2;Ph`xsBP!IkmA0Yz|EA~Ix4AMW!Mw#47A!@gufW?W|Wu&{6usk z4<>M`5>q3%e(+$a2b==n@*j++{1i9<&O=*@qezIzN`N`C5}#m0feAI?p&A+*z6Tww zyZb|aad*?SXPFu1wtH<;bAWjsQCT)nUGLPamG`X>-CeD>$^saK2C7mh<~BjFwNh% z%lVM!`iBV1+cvmk5;Tut-hPPkfcNHM&2Dwb6))0b7L+}VXRMcGp&Ww|z8W4}Zmv79 z$8SA{cS*`Fov=@ALB4t`NwZsC{_Uf^_b?#`UG6N}O$zAg5E1s)&x>pxsRq2@kl0_? ze(KVqQ4++Icz%OA>T!3!wR+y3l1RoO)JUy?4pWnpZjEcV>Yh9q)?qUS$cPtb4U!sB zh!1P#fZopm7c;Q1=qBrO_yLEYf>ibJTi&TZp+r6bbJ0+Ux3KsV9v-3vMdq;w-I%)5 zHbDJD=G!yzfimYE;JtiJ2)qsDS23c_a&sGH1MpzbFCb2S4HYhsxYN&e;&_2Sa`rfP zyS3U0J<5e8+YK5aLBFch$HX)}pYn)G3a#0eq|0x7Q-T+R?eDXm5m8T*lms8`LU;k%z_1ya#M42#!x|w!vG) z<=TGm^2O*%!rJqhN;EV!b|0{f!{F)^;bNicgS_R|=L+98P(aB{EN~L4nemXHz)cwk zCt$zuvq5p1rm<;A4NPGeAr10C&1l9@$(b$q<5bBQ{J_+jrm&y94!HY`)>PHqD2M|!UfOEfNZWx+zliqg?)w%!W`F1K4m5BD^L|$@4LXHS z9y{=}+2k*TXei+UEKT-m8ZB=_Ie>ufge?f(jYX_IO<9kW}h6w zeKkgy7#RJgc<;4QO!6I;fbw-QyZI>BuWfp+$*4kEl6)&U>*nA~g&NzR)QXeI{CXY% zLFGn=-dr@Ie!9tfF^5)X_eNIZx!zy36-=)lnVfyy+c&o8`=nr&Eh%l6Md4O_->fRO zu&xln{o%b%=P_I9?aktJxHdkubpPK%;Z94nknkWWE>Q^um!{qq%z@x45eN7{gD38YEfLm)nCM(Y>`2>gU{+u zpoEls`}RqeA&{x{dtrIMAzdRHb^4iQ_Vs>FV1Qv@k$0iKaK$pKov=C}6jx9>s+x-vJ&q<&VX}E8$?p zKy3!*xvuXUD53F1roE_^TI)RA-HC4%<5KDft}2Ck{K9+y)7+L^f$JPO$v4=p_iFA= z$jRa7wJb{=xPL_M$f9KP&(E&h-h1!wa15Ql@rhC-C3I=hkCxgQIOCt zINyK#8rNyZ^>@z=_M6`laM=|AQLj#n}WDyY%&WWI!dZPu<$Ya>w@WyOj^pm{DwD-ntcVBvxof zcdh<799;>OP3oqt23;W~U_COcji!bP6W1^l5oE@VXyotO-L>VI!qvAkF8%CBUy<3r z4@8iyRnG*rtC^?J_rc+!W0IdnJ}GrPU5=!8cdLl9qG#<8Grh!+lG|7NoC@dgG?{^d zE2PBS=6JP5tKPn!a#II?PCAd=c7;d0G+McD%8J)VPd{28zW!KTXZPgR`|9rc>{@jz zS9f`HsJbu)eJ*29FDr|1;w}F>%re?Yv+KW+vDHrqdfxOpKjap)dEaAja&;6J4WD*) zRzfA365pKjxS8Aa{a2uwrry2^@{%^{1sKh?#=o8UfN5#-)VJ-{co^b!K^D-ZBQrZJ z-9Xu)|CXQl6{>&3OzgVq#f%rNKa_s#lwWlE6=A;6fXp*pOTx_SBM#GD;=zA2C)n@) zxM^o~%H$Gb-*M9p&%Rwfb!6KLbdD>!psUJG-9H47w)h+8yXYvcc?7TM_%|iFSU4aP zL(CtD7p-xDsqF>%eu#-e2nC|QKGh$vowYiOa7^748v+`>Ca`H)P|K|&wmTm_NhPKq zjNwekKhDaprSE}G5h!ocj@*VGpu6;y4aDFf@-Ro^=S3`XJ-D5aK;M7`4C4Exq^+ER zh$*$hW$4};#fMjpbG?Y&eIc*WX59(8Dc`4J_i|6mem&o8n?y}huH4A_sOq-ZuUD6b z7=FanT{SM-G+@)xPAhp=kN$jWZ23V`OHh?-zz!u^LfyD4rq&sn%148Tt*oZDaxb9ih86^c`rEAa z7~M!TEh0xuur80fSKjpLsow-0-S=T4b-_Om$Zg(CRYFgcpOK-!7~T}u3C(04)Ph8} zhqsvqHOt8Oos%y6Ragg8OG;vh;eA4vU7*j-eGhAwOaUpO6`_2OC2l(m+R11s(R;(K zwnL!4MvG*C=NnJhuUM(^a=bpWGzW-k0e`m0x^3f-i!^Exv3@fT2F!pcNWMjlcn8yB zs!_8dXlILp>X~L`W3Ojo5-iktFz*g~K)3xV=O0sf$1hIJh!+(ma){gP9H@gN8!_78 z7Z7kXl3~~`HnCcMe&n=~`H5YZ&t)9noIz{y$SN$Pwmja1=aWop)WtsLw*6w;4Pu!k z?=-)$`kK8*z&m`W+FHS2hHIQAx=Lr6`OEKry(MU0kz&r^c>l|?PZZ5_b1;E6C3tiX zIu*RL0=XHxJNTg6BphzD8)+RoW)GouzF19ch^j{O9G!^4q|Swi;zO>x!gHGG?%lg^ zCMeWS03EF3fg%ixzRb*o9c2(6dg6)XUr|*xHZj2^A6UN%RZESb`YXGxt0-gTZL*)Z z#X-haNX{OP2SJ;5Ma9OpUGy8f$}IS)0Fue8mfqmusElbVz|Kfdvn$?i%jdOb(3=a(ED%C*h~Sz zc3aFKDLiKeVpE;D1*Lk$$i(X#!3rZ^j4Y4G6+Pm5J#CkwIuzY~P zU6tpw3f}O8xAv!?XNMaV^EsZ}A>0k|>YjjUPA{l=bGAL;2KGm+Yw@ygA%E*ZANAp> z`fg%Rg9rypmDn2blku>i`e&Qr_u#J{2KXV6AQtlG{Ncp7d2=JcaMHY2-n73^BT+i} z=8D;(%(CdaqS|7yX?(W3QfsZ0fqp+rkiG?R!dDQb1#%4a%PjZFr^H1BY`1UNLkYvG zfqsFhB<8|GO>(|jEN0#S(BA4zq0z5nwmOZQJdvOu90A+%K~(~2(hjC>py=O z4h|h0A42+ohsf)^uoS=rw&* zcI~_1?Z^#uJGZ$XJ-9}|>7=ekru9qfHc9VILp8w@e;x1cauVGJg1H3zG!7p=Oj17- z9aUgZNhE1IqPSb?zM_@_gB36S7)%Lr%qrak^p~f?g&fA_8^Q&;mtRK~4Z= zz=gfzbNTP5Z5z~$&%L3MDzmXuP|DCx)6Z#tX6P<1dtH!L`s1qcj=poUP2m&rA3fKt zTr!Ki{iw9(Ww|~5$aH^F$iWqD$4@(%>0aH7_U}!RKl5(?BQxojg|JRRP~=?o1O3uH zbQZusaB%Q@jJDQkQ{Ii5T>}FP5Rs|Kx)ZeF3GHKY&@)koxBf492<}T?PC$<-R3&A% zfPkjO6v*JGTS8eD=Hu3m`X4}Qup$Q@vi+ckY_cl^C3SgIZ%55DxYCQFb_LBDt_JNM zUP@tk9lplYYu9dOX8t~OVAFfht-0jn?tuaI3Od3+F94r-cWF8Cgx~ch;@Uy}dhT>D zpq>Ip+a5IN$q)X23oV_UyU<+3!-x4LDojZ#4HFe9`iK~o9sP) zDg#<;?w6d9u)`q14ca|oBdOGJj@mGOq>$+O-tMR@Zm#zr69;V-z%-vIC?ZK;AqJIaRF?RdC`z|oxP7wLG~SFGvv`s zV^fkSQ9hlNv^2eS`t)gZFP+PXKz_$&_f}(fMfR;D<{c7e-`s|Vbmh9Q;0JP{--li< z9Pv5<^?~e749!3?YL5_5f{r3yP3HXr`Td{oVk-wrE4M%A(EsY83+0uZq&$8uYi#19 zzy6*S<2=2*UL>~|P4292v!*`dLv3Y?12up6gu9n&1~Ox$5rLfIdcDo!GDjjioh#MBO*>98?e!7uOX9{|RTJtK%%ex&he zAv!HJ3&GiS)gZVMpaNMl+vG7P%Iv)|GH<@Dt3WqQ{9sUyxOsacK1y9&8n8FaGY-c~ zzz^JtP|W{!7ho}T?f0S3Vdd;hjNRbKbQ`=V1bB7xF(AxjA<2dcgZ@O>lVlBmfrKaxA15~!f7j)>*&ce{s5b#k@<6^`W1e*6Rr6c>9Hkj%^#($8VTy5RoUrwkio`F3L?hlFL&yp0Y zUk9ZiC=`P$1X9x34;KT@ND~hYf%#gjhVMpV&{?H0i2g}L71$MhW1#&8t09sP*RNks zar=1}M5%t@-Xq2}3=ZDIg?ri)hE-rj7MAP!IWf>ck(W29bhnkQ5<>|F)pK>=Z0Mukym_OG ze_ZT&S?la;M@h0O0}rWj+zgxohH&-02R}0NpnbsR0&FHPG%!aBFm7L%pO5@~J%C^B zEF$U0MPJaDNr8--tD?F(E{E-ei9MEbN3IT@)4;DG*g8m%U5IKGmwrp3 z(J=(V^2PV$ZUKXMAhsT#`}Wb-HHImt=u`aU@!AvPA9*%`?xP^}dw;65QhJ}*9hQ&2 zsfw}b$s09sh`ur6YTHL)`$_i8?8>@n4a)+`o0+CB#j=sgK%xPT4n z*!)r5o?k~4p-e6O^_i`$t=q~EHzH7hRb=?&WULG#jF9++hhz=vDZ9M)O~@!qASE1L5W7h7({M6=qBC^B?kI}eHv9B;W)HR2MI^NirRMwn_)eP-FhCv}8WSOU+n;yE*x+ z>N$pEv$GbCsx3@ADE$2V98neKV!O_R+yDy;3*1$-EnIokcS_Er8|R(+A$-wi^wXzb z2cuQad@4z$SWr4m9dr9Zn8yPRK1C|ZM+?~@v4^`jzm^sZQoqeTDjK*-;kHBBd2OE~ z^ERPSe=4F}g+Ln}7Z;?HHIDftiF(*A?SWW0_I-Ci0T+lv(8Xhaf$&b4mcz{9F?PQ3 zP1@0f$hc1gf4Nw8?p+dcE<5(+%QL{^Kkz4M z*RLmrnaF0Zs=S;kg*R$j(U9d2RHE*KhS1uEZy-^^Cej~>N763rM8R?(f-uWNXJU<6 zNe+es!NRUfs65HWCc!6g!xq?4AfQ@$c3*Z&sc9EFI%0h`xw1?pl#?g1Z3Dp*poN{L z%a?t!TzK(wKQH{VkJReIKMMl#0qn}tZ_7o{0Fn)0VxCz>&%h9y(14!yU+Hyzc8F=` zi+A6!sXq=I9;D|gf=Db`MNFRe#yA(1KKBH#ThNe2cm^>hhmo9jgbtzifl!Nrqf9nixE#EVI|aFn@6} zGdCZ=Nntr#f3U(R1{4nVdkskPll`PWKs|wC-Y&oh)#$?&k4CS(SPcZhSiBkl zdV-ofJ*V=qw_&C56SrG_2O(kTZ__lO3z%U0)U;_3K`{EWE~RO?%b$bAo4@7vn4VEe z*|S$1o`r`Ieml2|JC?Ft*Vp*`f#E{+Io=w@q4uYj0}~S&!t7}FpYP!jHmlKeap6G! zS8H($kG8V15>;??bm5^4e!uXoF7uwiIf{#}HqG1(-NI62==x2A-(?6x$8UHe)}q_M z2e_W!EN|K1fAId_lN@BR#jeREV-JA?a4)y-x1xqg4hg*I!8=RELCpu3*M$gB57qj` z0a92%DDC))$Dp3|%I(iDFYM-4U_=?&T1t04^^L_D+a84L;+Z38o9;R5r6O@fF zJ};V8dou_M3Ied~VsGF*jgAA7xDUpWtxAJ z6(t37(P@M~wN}9p$ZBK8rf0KUVAT@3@Ek980`Z?4%^6<8iJR{=WW7Ey!*feo>(;l$ z#S9>*P|kk&W!;b8VM(`c-5T;MT_lM<`$ne6Z2Q1sR zIb_~3Q^IYuZQRRe{>RWVB0O9Y8KYD`?AK$a`xb@Liw}E0KQ1jzIaXLEk$-AU;z+~n zAKvVfoe$W0YkbZt9lt!hMeXB_Oa6iI(#U$1@@iUi+s*74fiGt}by|e;f7Qb638yW* zzWyK@>gdiX_MJN??Q5HM{4U2wY%9Kc*QD?319L&6Tva?^!bC)4<)1TKBD23^>(#ip zt*DPn+KpwBMM(A_zCq+K3gXL*EJsY6r~3*L%nprx_+Zx;)-^D27iZn-+__`=`b-Vt z2IGRx8v&sJdU0L+WYiGza6tmScCw+sWH5KUui)g=R59vFvAs5kL3Yx4V|+(E@KS_d zQA)CfgB29(tAkI~33a7ys7T0A32wZk1+3ORrUGUpEUWq5hx+=ABP#9$s;BXbccq|1 zT7jV{E>l9Uqap*Sps6qpQS)V9w{~qTKbz5gm1Htoi z9M`_dKKiLrb1xlN4C`xub#-+y%&$owfs#E!KPMeU2$%~5U&I;iaV$mdY`;fk>Hg_* z{q**oJHzwx@=pBvfnfB^QvwA=PSh}uCrih3LAQ6wSv5o6l>9;HlF{&R=rqWz}EP(#ZefyS%`0Z|U1-s1X)DD-S zfAt8V>$zgr96kELAAMO*rH8%Bp+i?!rK&C?*Jv583O*v^{E)5$BY{{U$-n7_1*R;b zfAs#=Df>{$%4Vw1Kq?%by1znNpFewM1MC<#KDmA6c)p49kt0WPHfD2ap!J1yZ?*ox zDS(;;sC&ItBgc>g^`<9Jy12^dUrc*KP$U?}CkeEc%<1n~IohJytz!j@WPHD84?Koy z7{DDHwbFx4PKC8MxHM2&YL0yQp?GIx_n$w1=9iX)jVjvpndz<{dBTio+|*5#JPO+g z{;kJTC^#sOx$ZOOZ!ldOMHiE7n61mUPpdIJA_6`10o0CqaJ>^S%vRFYzA3a#5?>UZ z6R}qYhC&!Rn>!iAL+b{P_q}fJIo_AzOSH z{2fwNrKY8&CA|htB}?UV`e$yB$}|0@SkDgmte326qpJ|e{pBZCvHJP-!)YyV?~S8D z*6W8K?b>Qjllt7uu1myky0@04(&y(ziBG%I-(70I8vJTvB0kBFMg8MXb-%ODCAQBR zO7!ZmPm2<@6)juW;KGFq7hpDQ!)j~D$4uM-iB?N|{5F__8M+i$AS@I5Bry6rCr_|k zZk>IRa!u&d+AAC9Q?it0lAlL{+6~^~zZ+E?L;e?JT|~CN?Z=%$nLLlm`6a5O;=vox zyLkbe7ETi=oOZ*<4in+_$Q*Q4?&urQ=%Gg5za@&e>x~J;suG|Rz!q5x2GT8=@C2E7 z`bEl`0|yRV@bfFiqy@CF(1L<}zO{94)F0GEdG*|MGpAvC!AwR4J8-_IvC@XNB?P{l!Fh{PM!;aG&270>H z-p=CoidZ1TO4r!TjI-W8JKV^4i8D-Ot+MMS$()ryHXie9aQC2V8W^KYhL3B--~QX&$CV^yVfu{^5{;VTd~tel(#zxuLxzgUCIh@64v4f__> zT8mR>(`EoHG&MD4pQ=AVS~O%r@bUf8`^KGoR}Jt{95EDbRZ95U*-%HqypI@{&W#?z z4vSNd3|0(ifyQK^Y5e}Fmmb&_K1efMi|&F1u|+l+YnNjvJyP&1al47D$_RvBvi^ip zH9iOcbSP|5!?$`eMK>9{ex(CV1sRC;;VP7L1x)#d$wv2Ho?+3{RZwQg))cEfrLXAi zz|H*A_V6Y0Qqd??x=+%9iHdc?G(&;;g@shKC~A%}pI_%Z!L5}!Kg&-3ZF>6qiHX4a z`uY>ChN#^Js=NgE@854$>l=#?K0ZCIfgER>HHwlu3vdFO?HlOEVNXDhfyzYR!L>WO z(22#hT&I(&qqnxU-n;B}@XB8W>2o8h=+;L^m4R?hd?oP!?o7mcn(!R~)wck5LPtTh z+GVjN{?(UQ$C{UqSohnDr0GrQHTJ^kZ&Qo__rQScN{P*m?RRA{qd}n+$whmuv0d80 z_*Fq?-i9kv3>=dak#U96)7SY@G{)s5=)PYXs|0)zR`h}HQF(cs^zNryuB%+Vb?aE< zI3|3z)oS3jz49{ChaN4hnB!|c;{6Kv7wE_YUM(VDAmQkNbyQ3fgIu&3+OPoFhycH( zC^?JJ%$T@Wh5rYMe}vIB*%=4?*$%b<5MtjV%HN*T>sWcd4_h>I%gco1xnPfzzL}l< zEDyVZ5}0Mg+YY`&aMId*tx*Ym130c3D}Rv`-s54Jm~0b>4F&21qgWB?)_oh%8KI*F zlyd2DVRcp20@l;-^85C}r3VKS0v8{F-G$_!Ds4n`in?>B6~M!@*Vh}<#ZFfI{a5`| zxi#9iwYC=7bTC<2TX(>h7!b{!^Tl?|w8;zV!;gJuF~}rayj_Jtp4nC75|t0d?6r zy(oh>RJ_9%1QuBwDW|@CNaokR_Ex28>}*1s!|>4aaiOe?j41HkFyAy<>gQC~^=VBR z9GERLs7sk7Hr^IpGb>3^Fl_CX+P0}U%H}0+6veg8o&&cZQJ&4$);p%*E0pKtbM76& zOXtQ1+_2_`*P%(Kd765-rt{R|@BYNZ#QC{7(PB4ucPM$X+FrgB6m&Rp`7a0Xe`HKs z?`KhuS3j-1J2;rylU>1hKJj(QZ=sX5(EGSFfjl3K+`mHIBQ{S)W?I|6%C5 zs_>sXs&>XwY=ZLlsEutcA9#!W5>(tm_v@CU#63=xbdfD|)6ZYNSKrM?R_2&EI4rn& zOGTw!hLUmd$e;uzibC4}#5%PI0|>A|zC~@7S*v`!Rg3@n<8{s(OP}T#rBQ!>OSzgK z+cLE%{@`OR8lj>!pQfgQf`VuOgzPs6Ip8+dyk#bzo_eySS1aprb={2{_o6K`D8lJV z1fo~7djiy*H9Pk)vWRK&@EV9*?OyM@b7DgIK<1UHPohVR@Apcly5G7hvXDpn_wa?7 zwDGwRnagG+TVm4>hfs#AUn?%&vT@@^MELyte5BMO6&GL)xCwYFw-4Vc+P{tKJ016~ zD|6DOb*A)Af}8FAMhx>!dN}7b<`c*YLZdh-ox2c4LklY@q)jR<4_;95=j%5|aA?OT3hX^ijt!l3W; znXE#l+B(^$G;B}CONLZ7X6uRdhTT(1;_*wPmAvG3nid#83^F`(w*A%A!h@bGQ@vGI zX4@NkY zv+0Sqd~igBu-FnFK5|xgenbT*b3h$YH3-4U5mm{+5`ie-<|km38`HVWRC5s@N4HYv zyp-xlW53$f#L|)1SGiBkziYQw{%&xUe`f>VRZ6aF)a&*}DXXN2b8crD>Uy;2Ns6SA zW8BCMt=$*&O(o`9{=T~;>m?i_*#EL;a+{l{XXDdBx(t=8-z&}+s5@QP%%Hp;dNKKo zxQGSq_cV(|-mjg)e7g|NWIaFLRx9INdz`F#J--e+4R`0pVwsVM_u>)X3n;G?&cB=upU>Fmc`BJVm=Xk69QPX<^cnXJB7Q_|#Q-rTZ#y3dnO z6|$?3lcoX=66Iz<;nivd5vtVxw%X#c_`K zzj@>N)`NnZR_AKa&3ANmMkmhT1rxtkoGxYLebmys#a|g(=k_{68*#sXzCO-hH}D^n zcve5=MoE=`{>F9kDGPS=UN}g6^sKVtUNJW}zl%!WlIavbBduU?Gu_{+Y(s(EU_$*XJ(I&+!_p2j&1d;G5_)+ zyEAJw^Zl)FSd9>aA#vE*78X_V#znX_*RH(&LOERH{!_N+&Kn7aWg!Q8y=^;6RTb@b zp6YvUYojDJIWI&o-*2FCr@flSaMBX=9^iN3pu{AB|M}3OR^aW8z(8hsb)Yb_v$I4P z9&PK>w&9^6A#Zj%U!DLT5!=R7J4Ti0ETkj^;Cgj7XTs)$pmJl_lb2{Me4J-%iikFGF8-9a+Yjn>sXG?!pwz>F#S^9MRZSL7^QAg(=ouHwf*sqr~7>*W5orA|R$DuB|YfFAw&MG>+P zwf^av&6F&JWS`8A>&}1_yI=kTJ^@lUB`N=b>0_*z2>cV?S=Ws7TENHhO2fFX9`m7# zzh}xPCMWkptD>g1wi1*2N;+AjC4AzV%^S1-k-@LrM*T$Ws*9~1OYb3p5f&B9NrOS5 zSQ$jOiBTIjmLWLtaWOBmwzm%|EEK`av#GC-71s!pC(@z9H?pC(H@2|uS18^X=AMV} zbtmW1cswpDYHDdwJCNDyI4R4*H}{{pPU>c2&Vmo}3?GXJ!h_&FeN{WAMh*>fOETbA z){y(OH2*Hi^ZO`EJ>Uk5aBK11@ZXbWj1ga3TZmHGAhUpR59F!v|2mwZ5A=UNH4F01 z_(Sivi(-n3CdfImAp74_Y!oLI462B_k7vlAKtH<<%W?Qp_K^jy|F#q7p5+`bi>r5pQC5|@0277qUZ(9 zh3x+C(Il6Ns!^*M^RJH>=wP;4;@JBsrZZr+#iLDKNu5rmQ%Ah|9zQcYG%5% z7=e@d91xzd_wVNn$Fu9OzFYY8yd!yNj3yD98ULLrhIoBXN@25#1{CQsZe!E{g;mpf zVq{ujbWFM*Ffo%+`*ROwK!*iP3S7*pF&ZVw{sUIm5w$gu_~D%Y8u zZ|#(C#ox%nwK<$kQYAy5#R;}$C$OT9*^yur7iPG}$Kp`|68}u{9f2^NhNnX647y$u zuvE}(afymPQmqDLLue_Ok>JcX4iDF=zQvgQ5q3~e)T^Pao$xYbClW;fFmM8O@sXHj z^bHK|N}uBZzYkz%so`ioI$h$U3Qm9$hTmFdyr>iiJOeJqmVJnIYfH;x>?nry z{l(^96DI3I7QfMJH@|(mW9!y9d?$8U6;xt(olX_@6ORFmo5BG*BLZ+o_y9h~$F%Gj zdQffrE?9p+{(L#QHDeH({-hS3n?C&g)Z*z?))l zm>~P4`(Y5+Z%lt(Lc$IZn}vGHEN32|FGj%_SFuD%^!U(BhUH%>Fb+eRg>n+7BiFd# zSDRQo*T1m)*9MfGX;5pTC^`W6%Uxcnz=p!{FIO-Eiz+NEq&~9mWSLNpu!zVp9Ll(K zLjmp#eg1u>CE12=(Zp-`gZImW<}y#U8s#grdv%z0hqKETz1|Nh5;rAi#jzzA^y@nV zyA`3-$Dh1L&Cwy+K=pv~C3Zx#O8)>jtpJLT&&T(2r3W}<(uBJYMdMXAK6z*D!RqfgN)lDvDU#N=YR9h+V9}P7f)rTsU G0sjw|5DZfQ diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/logoOW2.png deleted file mode 100644 index 71a185b68ed53e228e23c82c4ea0aa47b7556959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13572 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 diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/tomcat.gif deleted file mode 100644 index 61756736b82350f64b5ea1b2bfc31ac57e30a3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 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 Re0F?dK$vW)v>aKN{y(`9mQw%# diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/img/vcss.png deleted file mode 100644 index 9b2f596e016533327216d98a0a927738fe17384f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^5kM@@!3-or#C~03U|`e?@Ck7Ra+Q_kdEDnlhI%!W zMb4c&_g;@{HxGAjZ*NM+!7cOCYk@#Y{Pps{+}zwx_wR4FlUu4N92*~!s#T`6W<+- zt4%e$w+9&~i2E*D*W)T9Bhx(p?A&_0|7X(X^Ya7IW>?MPDaUzu zczTO0wr<^e|Jf%QG42CClNSR6E4d`dFZlmw6q^`8Jh0FrC=HPY3SEXN1j@jH0f@DT z;lF?am<8g&3^agg*jyz(n}LC8qNj^vNX4zUQ)`1SI|v-Rel?4G(T!h0t6h3r9Tx_% z{GPN=z+e1GN8qGw>eHn5|8FmNua|o1m5;W_zoO+QbMz<2znfQG#(ynM{=I#{0V!X> zqF)tO-~TK+p#QH~U+~Uxw*7OC?@4lzU=MuwAfY=*I-PyJf}6|jF4ry6#nK@bObtKJ z{jpr)a7XQvK=_v<_kY&OUtDf7N2Y`!=sAP5DASo0{WX7G;uf&=`Gs|Enroa;cP#bwBZgT0Vk8}Ij!pi@+JzOex~wA_|LQI>iZ4KOPMZj@RJmq z{=ckJgo`sg=^ee+rLf!@|1r#|1Qou-tz zozY_28jcOAqH_ZHT>9G+6r2tD{%tx^c*pF4-nNSOH_A#)UvDaE^>6pwzeB^b1utmshBn2mW1YZ#q&(r+Ne9lLHSPV z;lJMu*6nF1eX&Vu#au@n)2h{;1^hB;>x|=8`0r4N5Dq`3W>NpNuIHfS-r}72x2dtZ z|1vypS3P_!s?6%3q3f=mrP_V^@twUAXY`EwoTZxX&st-k^Kye`&fdVV(2iA`qSwCa zO3SD?y)^LM2F^-1=1_^hVN1d%c)e7=87<81^0{cK;`g>k^UAjGxu$SW%#%-OqR3cMOS7CD$Nw90jSF7TjZ+3b%7?`))PKP%lew!LZ} z9@4ntXMQ2~DY0cQL^+Gz9jsW~FI2w%Uw?1i^C{7@K5}j{esbPgg&e IbxsLQ074N#oB#j- diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html deleted file mode 100644 index f587aeee4f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - Java EE 5.0 Example - - - -

logo
-
- Jakarta Tomcat - Mortbay Jetty - JOnAS WebSite -
- -
- Java EE 5.0 Example : Servlets accessing EJBs 3.0 -
- - - -
Java EE 5.0 Example : Architecture
- - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css deleted file mode 100644 index 4f0ee0e6b3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/etc/web/ow2_jonas.css +++ /dev/null @@ -1,183 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - - -body -{ - top:10px; - margin-top:10px; - background-color: #FFF; - color: #000000; - } - - -img { - margin: 5px; - border:0; -} - - - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - font-size: 14px; - margin-top : 40px; - margin-left : 200px; -} - - -div.titlepage { - margin-left: 200px; - font-family: Arial, Helvetica, sans-serif; - font-size: 1.5em; - line-height: 1.5em; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - - -.h1, .h2, .h3, .h4, .h5 { - color: #000; - background-color: inherit; - padding: 0; -} - -.h1 { - margin-top: 5px; - font-size: 2em; - line-height: 1.5em; - margin: 30px 0 30px 0; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - -.h2 { - margin: 20px 0 15px 0; - border-bottom: 1px solid #0099cc; - font-weight:normal; - font-style: normal; - font-size: 1.6em; - line-height: 1.4em; - color : #0099cc -} - -.h3 { - font-weight: normal; - font-size: 1.4em; - line-height: 1.4em; - margin: 20px 0 15px 0; -} - -.h4 { - font-weight:normal; - color: #404040; - margin: 20px 0 0 0; - left: 0px; - font-size: 1.4em; - line-height: 1.4em; -} -.h5 { - font-weight:normal; - color: #404040; - font-style: normal; - margin: 0px; - left: 0px; - font-size: 1.2em; - line-height: 1.2em; -} - -td -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - font-weight: normal; -} - -p -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - margin: 10px 10px 5px 0px; -} - -p.error -{ - color: red; -} - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java deleted file mode 100644 index 8ed463dd15..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/JMSApplicationClient.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.client; - -import java.io.PrintStream; -import java.util.Collection; -import java.util.List; -import java.text.MessageFormat; - -import javax.jms.*; -import javax.ejb.EJB; -import javax.annotation.Resource; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.init.Initializer; -import org.ow2.jonas.examples.ear.reader.RemoteReader; - -/** - * This application-client shows usage of JMS destinations to - * interact with the server-side application. - * @author Guillaume Sauthier - */ -public final class JMSApplicationClient { - - /** - * Number of Books to be created. - */ - private static final int ITERATION_NUMBER = 10; - - /** - * Link to the initializer bean. - */ - @EJB - private static Initializer initializerBean; - - /** - * JMS conectionFactoery - */ - // Resource injection - @Resource(mappedName="JQCF") - private static ConnectionFactory factory; - - /** - * JMS Queue SampleQueue - */ - // Resource injection - @Resource(mappedName="SampleQueue") - private static Queue queue; - - - /** - * Link to the Remote Reader bean. Bean will be injected by JOnAS. - */ - @EJB - static private RemoteReader readerBean; - - /** - * Empty default constructor for utility class. - */ - private JMSApplicationClient() { - - } - - /** - * @param args Command line arguments - * @throws Exception InitialContext creation failure / JMS Exception - */ - public static void main(final String[] args) throws Exception { - - PrintStream out = System.out; - - // Print Header - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("OW2 JOnAS :: EAR Sample :: Messager Application Client "); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - - - - - // Init. data if needed - out.print("Initialization ... "); - - initializerBean.initializeEntities(); - out.println("Done."); - - // Send Book creation Messages - Connection connection = factory.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer messageProducer= session.createProducer(queue); - - for (int i = 0; i < ITERATION_NUMBER; i++) { - String title = "Encyclopedia Universalis Vol." + i; - Message message = session.createTextMessage(title); - messageProducer.send(message); - out.println("Sended creation order for '" + title + "'"); - } - - // Close JMS objects - messageProducer.close(); - session.close(); - connection.close(); - - // Wait for some time ... - // Remember JMS is for asynchronous messages :) - final long period = 2500; - out.println(MessageFormat.format("Wait for {0} ms...", period)); - Thread.sleep(period); - - out.println(MessageFormat.format("The RemoteReader Bean reference is: {0}", readerBean)); - // List Authors and Books - List authors = readerBean.listAllAuthors(); - for (Author author : authors) { - out.println(MessageFormat.format(" * {0}", author.getName())); - Collection books = author.getBooks(); - for (Book book : books) { - out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId())); - } - } - - out.println("Success."); - - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java deleted file mode 100644 index 9696b19638..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/NotSecuredApplicationClient.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.client; - -import java.io.PrintStream; -import java.util.Collection; -import java.util.List; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import javax.ejb.EJB; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.init.Initializer; -import org.ow2.jonas.examples.ear.mail.Mailer; -import org.ow2.jonas.examples.ear.reader.RemoteReader; - -/** - * Simple Application Client. - * @author Guillaume Sauthier - */ -public final class NotSecuredApplicationClient { - - /** - * Empty default constructor for utility class. - */ - private NotSecuredApplicationClient() { - - } - - /** - * Link to the initializer bean. - */ - @EJB - static private Initializer initializerBean; - - /** - * Link to the Remote Reader bean. Bean will be injected by JOnAS. - */ - @EJB - static private RemoteReader readerBean; - - /** - * Link to the Mailer bean. Bean will be injected by JOnAS. - */ - @EJB - static private Mailer mailerBean; - - - /** - * @param args Command line arguments - * @throws NamingException InitialContext creation failure - */ - public static void main(final String[] args) throws NamingException { - - PrintStream out = System.out; - - // Print Header - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("OW2 JOnAS :: EAR Sample :: Not Secured Application Client "); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - - // Init datas if needed - out.print("Initialization ... "); - initializerBean.initializeEntities(); - out.println("Done."); - - - out.println("The RemoteReader Bean reference is : " + readerBean); - - // List registered authors and their books - out.println("List of authors, and their books:"); - // retrieve again the authors list (now it has been initialized) - List authors = readerBean.listAllAuthors(); - for (Author author : authors) { - out.println(" * " + author.getName()); - Collection books = author.getBooks(); - for (Book book : books) { - out.println(" -> " + book.getTitle() + " [id: " + book.getId() + "]"); - } - } - - // Only list registered books - List books = readerBean.listAllBooks(); - out.println("List of books:"); - for(Book book : books) { - out.println(" * " + book.getTitle() + " [" + book.getAuthor().getName() + "]"); - } - - // Use the Mailer bean to send - // Use the first command line argument as a mail address. - // Fall back to a reasonable default ${user.name}@localhost - String address = System.getProperty("user.name") + "@localhost"; - if (args.length > 0) { - // Got an argument, use it ... - address = args[0]; - } - - out.println("The Mailer Bean reference is : " + mailerBean); - - // Call the Mailer bean to send the expected e-mail. - mailerBean.sendStatusMail(address); - - // OK, we're done - out.println("Success."); - - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java deleted file mode 100644 index 70a6e7b7d6..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/SecuredApplicationClient.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.client; - -import java.io.PrintStream; -import java.util.Collection; -import java.util.List; -import java.text.MessageFormat; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.ejb.EJB; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.init.Initializer; -import org.ow2.jonas.examples.ear.reader.RemoteReader; -import org.ow2.jonas.examples.ear.writer.RemoteWriter; - -/** - * Simple Application Client. - * @author Guillaume Sauthier - */ -public final class SecuredApplicationClient { - - /** - * Empty default constructor for utility class. - */ - private SecuredApplicationClient() { - - } - - /** - * Link to the initializer bean. - */ - @EJB - static private Initializer initializerBean; - - /** - * Link to the Remote Reader bean. Bean will be injected by JOnAS. - */ - @EJB - static private RemoteReader readerBean; - - /** - * Link to the Remote Writer bean. Bean will be injected by JOnAS. - */ - @EJB - static private RemoteWriter writerBean; - - /** - * @param args Command line arguments - * @throws NamingException InitialContext creation failure - */ - public static void main(final String[] args) throws NamingException { - - PrintStream out = System.out; - - // Print Header - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("OW2 JOnAS :: EAR Sample :: Secured Application Client "); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - // Init. data if needed - out.print("Initialization ... "); - initializerBean.initializeEntities(); - out.println("Done."); - - out.println("The RemoteReader Bean reference is: " + readerBean); - - // List registered authors and their books - out.println("List of authors, and their books:"); - // retrieve again the authors list (now it has been initialized) - List authors = readerBean.listAllAuthors(); - for (Author author : authors) { - out.println(" * " + author.getName()); - Collection books = author.getBooks(); - for (Book book : books) { - out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId())); - } - } - - // Use the secured Bean (RemoteWriter) - // ====================================== - out.println("Get the RemoteWriter Bean reference: " + writerBean); - - // Add another author, and some books - Author zola = new Author("Emile Zola"); - Book germinal = new Book("Germinal", zola); - Book beteHumaine = new Book("La Bete Humaine", zola); - zola.getBooks().add(germinal); - zola.getBooks().add(beteHumaine); - - // Display Author before storage - out.println("Created a new Author: "); - out.println(zola.toString()); - - // Persists - writerBean.addAuthor(zola); - - // See the new content - out.println("Updated authors' list:"); - authors = readerBean.listAllAuthors(); - for (Author author : authors) { - out.println(" * " + author.getName()); - Collection books = author.getBooks(); - for (Book book : books) { - out.println(MessageFormat.format(" -> {0} [id: {1}]", book.getTitle(), book.getId())); - } - } - - // Remove Zola (and its books), so that next time the client - // is executed, we can add them again. - writerBean.removeAuthor(zola); - out.println("Cleaned added Author."); - out.println("Success."); - - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html deleted file mode 100644 index ebf29edebc..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/client/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Application Clients

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java deleted file mode 100644 index 6d30057bb6..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Author.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.entity; - -import static org.ow2.jonas.examples.ear.entity.Author.QN.ALL_AUTHORS; -import static org.ow2.jonas.examples.ear.entity.Author.QN.FIND_AUTHOR; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; - -/** - * Author of a book. - * @author Florent Benoit - */ -@Entity -@NamedQueries({@NamedQuery(name=ALL_AUTHORS, query="select o FROM Author o"), - @NamedQuery(name=FIND_AUTHOR, query="select o FROM Author o WHERE o.name = :MYNAME")}) -public class Author implements Serializable { - /** - * Store Query names. - */ - public static interface QN { - /** - * Search all authors. - */ - String ALL_AUTHORS = "Author.allAuthors"; - - /** - * Search a named author. - */ - String FIND_AUTHOR = "Author.findAuthor"; - } - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 0L; - - /** - * Primary key (will be auto generated). - */ - private long id; - - /** - * Name of the author. - */ - private String name = null; - - /** - * List of books written by the author. - */ - private Collection books; - - /** - * Default constructor. - */ - public Author() { - books = new ArrayList(); - } - - /** - * Constructor with a given author name. - * @param name - the name of the author - */ - public Author(final String name) { - this(); - setName(name); - } - - /** - * Relation ship (do not using lazy mode). - * @return books written by this author - */ - @OneToMany(mappedBy="author", fetch=FetchType.EAGER, cascade=CascadeType.ALL) - public Collection getBooks() { - return books; - } - - /** - * Add a book with a given title. - * @param title - the title of the book - */ - public void addBook(final String title) { - Book livre = new Book(); - livre.setTitle(title); - livre.setAuthor(this); - getBooks().add(livre); - } - - /** - * Sets the collection of books written by this author. - * @param books the list of the books - */ - public void setBooks(final Collection books) { - this.books = books; - } - - /** - * @return name of the author - */ - public String getName() { - return name; - } - - /** - * Sets the name of the author. - * @param name - the name of this author - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return an id for this object (incremented automatically) - */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - public long getId() { - return this.id; - } - - /** - * Sets the id of this author object. - * @param id the given id of this author - */ - public void setId(final long id) { - this.id = id; - } - - - /** - * @return String representation of this entity object. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(this.getClass().getName()); - sb.append("[id="); - sb.append(getId()); - sb.append(", name="); - sb.append(getName()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java deleted file mode 100644 index 66e409da96..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/Book.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.entity; - -import java.io.Serializable; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; - -/** - * Define a book. - * @author Florent Benoit - */ -@Entity -@NamedQueries({@NamedQuery(name=Book.QN.ALL_BOOKS, query="select o FROM Book o"), - @NamedQuery(name=Book.QN.FIND_BOOK, query="select o FROM Book o WHERE o.title = :MYTITLE") -}) -public class Book implements Serializable { - - /** - * Defines Query names. - */ - public static interface QN { - /** - * Search all books. - */ - String ALL_BOOKS = "Book.allBooks"; - - /** - * Search a book. - */ - String FIND_BOOK = "Book.findBook"; - } - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 0L; - - /** - * Primary key. - */ - private long id; - - /** - * Author's book. - */ - private Author author; - - /** - * title of the book. - */ - private String title; - - /** - * Default constructor. - */ - public Book() { - - } - - /** - * Constructor. Build a new Book with the given title and written by the - * given author. - * @param title the given title - * @param author the given author. - */ - public Book(final String title, final Author author) { - setTitle(title); - setAuthor(author); - } - - /** - * @return the Author of this Book. - */ - @ManyToOne - @JoinColumn(name="Author_id") - public Author getAuthor() { - return author; - } - - /** - * Sets the author of this book. - * @param author the given author. - */ - public void setAuthor(final Author author) { - this.author = author; - } - - /** - * @return the title of this book. - */ - public String getTitle() { - return title; - } - - /** - * Set the title of the book. - * @param title - the title of the book - */ - public void setTitle(final String title) { - this.title = title; - } - - /** - * @return an id for this object (incremented automatically) - */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - public long getId() { - return this.id; - } - - /** - * Sets the id of this author object. - * @param id the given id of this author - */ - public void setId(final long id) { - this.id = id; - } - - /** - * @return String representation of this entity object. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(this.getClass().getName()); - sb.append("[id="); - sb.append(getId()); - sb.append(", title="); - sb.append(getTitle()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html deleted file mode 100644 index b8e550a90d..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/entity/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Entity Beans

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java deleted file mode 100644 index f4b6cead33..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/Initializer.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.ow2.jonas.examples.ear.init; - -/** - * The {@link Initializer} Bean initialize the entities data. - * @author Guillaume Sauthier - */ -public interface Initializer { - - /** - * Initialize the minimal set of entities needed by the sample. - */ - void initializeEntities(); - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java deleted file mode 100644 index 27720712d3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/InitializerBean.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.ow2.jonas.examples.ear.init; - -import javax.annotation.security.RunAs; -import javax.ejb.EJB; -import javax.ejb.Remote; -import javax.ejb.Stateless; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.reader.LocalReader; -import org.ow2.jonas.examples.ear.writer.LocalWriter; - -/** - * The {@link InitializerBean} EJB is here to initialize only once - * the Database/Entities. It simply checks if there is some {@link Author}s - * already persisted; if none are found, we will inject defaults values. - * @author Guillaume Sauthier - */ -@Stateless(mappedName="myInitializerBean") -@Remote(Initializer.class) -@RunAs("earsample") -public class InitializerBean implements Initializer { - - /** - * Injected reference to the {@link org.ow2.jonas.examples.ear.writer.Writer} EJB. - */ - @EJB - private LocalWriter writer; - - /** - * Injected reference to the {@link org.ow2.jonas.examples.ear.reader.Reader} EJB. - */ - @EJB - private LocalReader reader; - - /** - * Initialize the minimal set of entities needed by the sample. - * @see org.ow2.jonas.examples.ear.init.Initializer#initializeEntities() - */ - public void initializeEntities() { - - if (reader.findAuthor("Honore de Balzac") == null) { - // Balzac was not persited, add it now. - Author balzac = new Author("Honore de Balzac"); - Book pereGloriot = new Book("Le Pere Goriot", balzac); - balzac.getBooks().add(pereGloriot); - Book lesChouans = new Book("Les Chouans", balzac); - balzac.getBooks().add(lesChouans); - - // Persists the Author and all of his books - writer.addAuthor(balzac); - } - - if (reader.findAuthor("Victor Hugo") == null) { - // Hugo was not persited, add it now. - Author hugo = new Author("Victor Hugo"); - hugo.addBook("Les Miserables"); - hugo.addBook("Notre-Dame de Paris"); - - // Store - writer.addAuthor(hugo); - } - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html deleted file mode 100644 index 4e743e4ae0..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/init/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Initializer Bean

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java deleted file mode 100644 index 7b3a3e1878..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/Mailer.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.mail; - -/** - * The {@link Mailer} business interface is used to send a status - * mail, with all the {@link org.ow2.jonas.examples.ear.entity.Author}s - * and {@link org.ow2.jonas.examples.ear.entity.Book}s in the library. - * @author Guillaume Sauthier - */ -public interface Mailer { - - /** - * Send a mail to the given mail address. - * @param address target mail address (must be of the form: xyz@abc.z) - */ - void sendStatusMail(final String address); -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java deleted file mode 100644 index cbb50e7603..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/MailerBean.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.mail; - -import java.util.Collection; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessageContext; -import javax.mail.MessagingException; -import javax.mail.NoSuchProviderException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimePartDataSource; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.reader.LocalReader; - -/** - * @author Guillaume Sauthier - */ -@Stateless(mappedName="myMailerBean") -@Remote(Mailer.class) -public class MailerBean implements Mailer { - - /** - * Mail Session used to send the Mail. - */ - @Resource(mappedName="mailSession_1") - private Session mailSession; - - /** - * Template for the message's content. - */ - @Resource(mappedName="mailMimePartDS_1") - private MimePartDataSource mimePartDatasource; - - /** - * {@link LocalReader} EJB (Local interface). - */ - @EJB - private LocalReader reader; - - /** - * Send a mail to the given mail address. - * @param address target mail address (must be of the form: xyz@abc.z) - * @see org.ow2.jonas.examples.ear.mail.Mailer#sendStatusMail(java.lang.String) - */ - public void sendStatusMail(final String address) { - - Address mailAddress = null; - try { - mailAddress = new InternetAddress(address); - } catch (AddressException e) { - System.err.println("Invalid mail address: " + e.getMessage()); - e.printStackTrace(); - return; - } - - MessageContext context = mimePartDatasource.getMessageContext(); - Message message = context.getMessage(); - try { - message.setContent(getContent(), "text/plain"); - } catch (MessagingException e) { - System.err.println("Cannot set message content:" + e.getMessage()); - e.printStackTrace(System.err); - return; - } - - Transport transport = null; - try { - transport = mailSession.getTransport(mailAddress); - } catch (NoSuchProviderException e) { - System.err.println("No provider found for @:" + address); - e.printStackTrace(System.err); - return; - } - try { - transport.connect(); - transport.sendMessage(message, new Address[] {mailAddress}); - transport.close(); - } catch (MessagingException e) { - System.err.println("Cannot send message:" + e.getMessage()); - e.printStackTrace(System.err); - return; - } - - System.out.println("Mail successfully sent to: " + address); - } - - /** - * Generate the mail's content. - * @return the mail message content. - */ - private String getContent() { - - StringBuilder sb = new StringBuilder(); - - // Print Header - sb.append("---------------------------------------------------\n"); - sb.append(" OW2 JOnAS EAR Sample Mailer Bean.\n"); - sb.append("---------------------------------------------------\n"); - sb.append("Generated the " + new Date() + "\n"); - sb.append("\n"); - - // Print the Authors - List authors = reader.listAllAuthors(); - sb.append("List of all registered Authors (" + authors.size() + ") and their Books:\n"); - for (Author author : authors) { - sb.append(" * " + author.getName() + " [" + author.getId() + "]\n"); - Collection books = author.getBooks(); - for (Book book : books) { - sb.append(" - " + book.getTitle() + "[" + book.getId() + "]\n"); - } - } - - // Print the Books - sb.append("\n"); - sb.append("List of all registered Books:\n"); - List books = reader.listAllBooks(); - for (Book book : books) { - sb.append(" * " + book.getTitle() + "[" + book.getAuthor().getName() + "]\n"); - } - - // Print the footer - sb.append("\n"); - sb.append("Enjoy your new JOnAS !\n"); - sb.append("\n"); - sb.append(" -- JOnAS Team\n"); - - return sb.toString(); - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html deleted file mode 100644 index 43ff24fdaa..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mail/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Mailer Bean

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java deleted file mode 100644 index 5e87a4d894..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/JMSMessageBean.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.mdb; - -import javax.annotation.security.RunAs; -import javax.ejb.ActivationConfigProperty; -import javax.ejb.EJB; -import javax.ejb.MessageDriven; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.reader.LocalReader; -import org.ow2.jonas.examples.ear.writer.LocalWriter; - -/** - * The {@link JMSMessageBean} is a message driven bean activated when a JMS - * {@link Message} comes to a given Destination. - * For each new {@link Message}, this bean will create and persists a new - * {@link Book} instance. - * This MDB is annotated with {@link RunAs} because it uses a secured - * business interface. - * @author Guillaume Sauthier - */ -@MessageDriven(activationConfig={ - @ActivationConfigProperty(propertyName="destination", - propertyValue="SampleQueue"), - @ActivationConfigProperty(propertyName="destinationType", - propertyValue="javax.jms.Queue") - }) -@RunAs("earsample") -public class JMSMessageBean implements MessageListener { - - /** - * Secured business interface. - */ - @EJB - private LocalWriter writer; - - /** - * Unsecured {@link LocalReader} business interface. - */ - @EJB - private LocalReader reader; - - /** - * Called when a new JMS {@link Message} is received on the destination. - * This method will use the {@link LocalWriter} Bean interface to add - * Books to a given Author. - * @param message {@link Message} containing {@link Book} title. - * @see javax.jms.MessageListener#onMessage(javax.jms.Message) - */ - public void onMessage(final Message message) { - - // TODO to be removed - System.out.println("Received JMS Message: " + message); - - // Extract Message's text value - String text = null; - if (message instanceof TextMessage) { - TextMessage textMessage = (TextMessage) message; - try { - text = textMessage.getText(); - } catch (JMSException e) { - System.err.println("Unexpected Exception: " + e.getMessage()); - e.printStackTrace(System.err); - return; - } - } else { - // not a TextMessage, I don't know what to do with it - return; - } - - Author edition = reader.findAuthor("Editions XY"); - if (edition == null) { - edition = new Author("Editions XY"); - writer.addAuthor(edition); - } - - // Persists a new Book - Book book = new Book(text, edition); - writer.addBook(book); - - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html deleted file mode 100644 index a381f34e33..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/mdb/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: JMS Message Driven Bean

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html deleted file mode 100644 index 81c64c7e71..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java deleted file mode 100644 index a9b9de6fb3..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/LocalReader.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.reader; - -/** - * {@link javax.ejb.Local} interface. - * @author Guillaume Sauthier - */ -public interface LocalReader extends Reader { - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java deleted file mode 100644 index a00d93c329..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/Reader.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.reader; - -import java.util.List; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; - -/** - * The {@link Reader} business interface is an un-restricted - * read only view on the entities. - * @author Guillaume Sauthier - */ -public interface Reader { - - /** - * @return the list of all the persisted {@link Author}s. - */ - List listAllAuthors(); - - /** - * @return the list of all the persisted {@link Book}s. - */ - List listAllBooks(); - - /** - * Find a given {@link Author} using it's name as a key. - * @param name {@link Author}'s name. - * @return the first {@link Author} that matches the given name. - */ - Author findAuthor(final String name); - - /** - * Find a given {@link Book} using it's name as a key. - * @param name {@link Book}'s name. - * @return the first {@link Book} that matches the given name. - */ - Book findBook(final String name); -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java deleted file mode 100644 index 543c54d791..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/ReaderBean.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.reader; - -import static org.ow2.jonas.examples.ear.entity.Author.QN.ALL_AUTHORS; -import static org.ow2.jonas.examples.ear.entity.Author.QN.FIND_AUTHOR; -import static org.ow2.jonas.examples.ear.entity.Book.QN.ALL_BOOKS; -import static org.ow2.jonas.examples.ear.entity.Book.QN.FIND_BOOK; - -import java.util.List; - -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; - -/** - *The {@link ReaderBean} EJB is an unrestricted, read-only, Stateless Bean. - * @author Guillaume Sauthier - */ -@Stateless -@Local(LocalReader.class) -@Remote(RemoteReader.class) -public class ReaderBean implements LocalReader, RemoteReader { - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * Find a given {@link Author} using it's name as a key. - * @param name {@link Author}'s name. - * @return the first {@link Author} that matches the given name. - */ - @SuppressWarnings("unchecked") - public Author findAuthor(final String name) { - Query query = entityManager.createNamedQuery(FIND_AUTHOR); - query.setParameter("MYNAME", name); - List authors = query.getResultList(); - if (authors != null && authors.size() > 0) { - return authors.get(0); - } - return null; - } - - /** - * Find a given {@link Book} using it's name as a key. - * @param name {@link Book}'s name. - * @return the first {@link Book} that matches the given name. - */ - @SuppressWarnings("unchecked") - public Book findBook(final String title) { - Query query = entityManager.createNamedQuery(FIND_BOOK); - query.setParameter("MYTITLE", title); - List books = query.getResultList(); - if (books != null && books.size() > 0) { - return books.get(0); - } - return null; - } - - /** - * @return the list of all the persisted {@link Author}s. - */ - @SuppressWarnings("unchecked") - public List listAllAuthors() { - return entityManager.createNamedQuery(ALL_AUTHORS).getResultList(); - } - - /** - * @return the list of all the persisted {@link Book}s. - */ - @SuppressWarnings("unchecked") - public List listAllBooks() { - return entityManager.createNamedQuery(ALL_BOOKS).getResultList(); - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java deleted file mode 100644 index 634c83d9c4..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/RemoteReader.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.reader; - -/** - * {@link javax.ejb.Remote} interface. - * @author Guillaume Sauthier - */ -public interface RemoteReader extends Reader { - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html deleted file mode 100644 index 81c64c7e71..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/reader/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java deleted file mode 100644 index 001f63aeea..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/AdminServlet.java +++ /dev/null @@ -1,277 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.web; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Collection; -import java.util.List; - -import javax.ejb.EJB; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.init.Initializer; -import org.ow2.jonas.examples.ear.reader.LocalReader; -import org.ow2.jonas.examples.ear.writer.LocalWriter; - -/** - * Defines a servlet that is accessing the two entities through a local session - * bean. - * @author Florent Benoit - * @author Guillaume Sauthier - */ -public class AdminServlet extends HttpServlet { - - /** - * Serializable class uid. - */ - private static final long serialVersionUID = 7724116000656853982L; - - /** - * Local writer bean. - */ - @EJB - private LocalWriter writerBean; - - /** - * Local reader bean. - */ - @EJB - private LocalReader readerBean; - - /** - * Initializer bean. - */ - @EJB - private Initializer initializerBean; - - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - @Override - public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - String title = "Ear Sample of Servlet accessing an EJB"; - - printHTMLHeader(out, title); - - out.println("
"); - out.println(" "); - out.println(" "); - out.println(" "); - out.println(" "); - out.println(" "); - out.println("
"); - - // Try to init the DB if this is the very first call to this application - initAuthorBooks(out); - - out.println("
"); - - // Print the add-author Form - printAddAuthorForm(out); - - out.println("
"); - - // Try to add the new author - addAuthor(out, request.getParameter("author")); - - // Display updated list of authors - printAuthors(out); - - out.println("
"); - out.println("
"); - - printFooter(out); - out.close(); - } - - /** - * Print the page Footer. - * @param out Servlet PrintWriter - */ - private void printFooter(final PrintWriter out) { - out.println("
"); - out.println("

"); - out.println(" "); - out.println(" \"Valid"); - out.println(" "); - out.println(" "); - out.println(" \"Valid"); - out.println(" "); - out.println("

"); - out.println("
"); - - out.println(""); - out.println(""); - } - - /** - * Print the page Header. - * @param out Servlet {@link PrintWriter} - * @param title page's title - */ - private void printHTMLHeader(final PrintWriter out, final String title) { - out.println(""); - out.println(""); - out.println(" "); - out.println(" "); - out.println(" " + title + ""); - out.println(" "); - out.println(""); - - out.println("
\"logo\"/
"); - out.println("
"); - out.println(" \"Tomcat"); - out.println(" \"Jetty"); - out.println(" \"JOnAS"); - out.println("
"); - - out.println("
" + title + "
"); - } - - /** - * Add a named {@link Author} in the model. - * @param out {@link PrintWriter} used for Exception printing. - * @param name Author's name - */ - private void addAuthor(final PrintWriter out, final String name) { - - // Maybe the author param is null (possible for the first access) - if (name != null) { - - try { - // Persists a new Author - Author author = new Author(name); - writerBean.addAuthor(author); - } catch (Exception e) { - printException(out, "Cannot add a new Author (" + name + ")", e); - return; - } - } - - } - - /** - * Init list of authors/books. - * @param out the given writer - */ - private void initAuthorBooks(final PrintWriter out) { - out.println("Initialize authors and their books...
"); - - try { - initializerBean.initializeEntities(); - } catch (Exception e) { - printException(out, "Cannot init list of authors with their books", e); - return; - } - } - - /** - * Display authors. - * @param out the given writer - */ - private void printAuthors(final PrintWriter out) { - out.println("Get authors"); - out.println("

"); - - // Get list of Authors - List authors = null; - try { - authors = readerBean.listAllAuthors(); - } catch (Exception e) { - printException(out, "Cannot call listAllAuthors on the bean", e); - return; - } - - // List for each author, the name of books - if (authors != null) { - for (Author author : authors) { - out.println("List of books with author '" + author.getName() + "' :"); - out.println("
    "); - Collection books = author.getBooks(); - if (books == null || books.size() == 0) { - out.println("
  • No book !
  • "); - } else { - for (Book book : books) { - out.println("
  • Title '" + book.getTitle() + "'.
  • "); - } - } - out.println("
"); - - } - } else { - out.println("No author found !"); - } - - } - - /** - * Display authors. - * @param out the given writer - */ - private void printAddAuthorForm(final PrintWriter out) { - - out.println("Add a new Author:"); - out.println("
"); - out.println("
"); - out.println(" "); - out.println(" "); - out.println("
"); - out.println("
"); - } - - /** - * If there is an exception, print the exception. - * @param out the given writer - * @param errMsg the error message - * @param e the content of the exception - */ - private void printException(final PrintWriter out, final String errMsg, final Exception e) { - out.println("

Exception : " + errMsg); - out.println("

");
-        e.printStackTrace(out);
-        out.println("

"); - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java deleted file mode 100644 index 08c890ed09..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/ExampleServlet.java +++ /dev/null @@ -1,203 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.web; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Collection; -import java.util.List; - -import javax.ejb.EJB; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; -import org.ow2.jonas.examples.ear.init.Initializer; -import org.ow2.jonas.examples.ear.reader.LocalReader; - -/** - * Defines a servlet that is accessing the two entities through a local session - * bean. - * @author Florent Benoit - */ -public class ExampleServlet extends HttpServlet { - - /** - * Serializable class uid. - */ - private static final long serialVersionUID = -3172627111841538912L; - - - /** - * Link to the Local Reader bean. Bean will be injected by JOnAS. - */ - @EJB - private LocalReader readerBean; - - /** - * Link to the initializer bean. - */ - @EJB - private Initializer initializerBean; - - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - @Override - public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - out.println(" "); - out.println(" "); - out.println(" Ear Sample of Servlet accessing an EJB"); - out.println(" "); - out.println(""); - - out.println("
\"logo\"/
"); - out.println("
"); - out.println(" \"Tomcat"); - out.println(" \"Jetty"); - out.println(" \"JOnAS"); - out.println("
"); - - out.println("
Ear sample of Servlet accessing an EJB
"); - - - out.println("
"); - initAuthorBooks(out); - out.println("
"); - out.println("
"); - - out.println("
"); - displayAuthors(out); - out.println("
"); - - out.println("
"); - out.println("
"); - out.println("
"); - out.println("
"); - out.println("
"); - - out.println("
"); - out.println("

"); - out.println(" "); - out.println(" \"Valid"); - out.println(" "); - out.println(" "); - out.println(" \"Valid"); - out.println(" "); - out.println("

"); - out.println("
"); - - out.println(""); - out.println(""); - out.close(); - } - - /** - * Init list of authors/books. - * @param out the given writer - */ - private void initAuthorBooks(final PrintWriter out) { - out.println("Initialize authors and their books...
"); - - try { - initializerBean.initializeEntities(); - } catch (Exception e) { - displayException(out, "Cannot init list of authors with their books", e); - return; - } - } - - /** - * Display authors. - * @param out the given writer - */ - private void displayAuthors(final PrintWriter out) { - out.println("Get authors"); - out.println("

"); - - // Get list of Authors - List authors = null; - try { - authors = readerBean.listAllAuthors(); - } catch (Exception e) { - displayException(out, "Cannot call listAllAuthors on the bean", e); - return; - } - - // List for each author, the name of books - if (authors != null) { - for (Author author : authors) { - out.println("List of books with author '" + author.getName() + "' :"); - out.println("
    "); - Collection books = author.getBooks(); - if (books == null) { - out.println("
  • No book !
  • "); - } else { - for (Book book : books) { - out.println("
  • Title '" + book.getTitle() + "'.
  • "); - } - } - out.println("
"); - - } - } else { - out.println("No author found !"); - } - - } - - /** - * If there is an exception, print the exception. - * @param out the given writer - * @param errMsg the error message - * @param e the content of the exception - */ - private void displayException(final PrintWriter out, final String errMsg, final Exception e) { - out.println("

Exception : " + errMsg); - out.println("

");
-        e.printStackTrace(out);
-        out.println("

"); - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html deleted file mode 100644 index f2e3e4f441..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/web/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Web Application

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java deleted file mode 100644 index ed2031346f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/LocalWriter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.writer; - -/** - * {@link javax.ejb.Local} interface. - * @author Guillaume Sauthier - */ -public interface LocalWriter extends Writer { - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java deleted file mode 100644 index 10f49a7c3c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/RemoteWriter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.writer; - -/** - * {@link javax.ejb.Remote} interface. - * @author Guillaume Sauthier - */ -public interface RemoteWriter extends Writer { - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java deleted file mode 100644 index 8ac4657bc7..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/Writer.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.writer; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; - - -/** - * Remote interface for the bean Writer. - * @author JOnAS team - */ -public interface Writer { - - /** - * Persists a new {@link Author}. - * @param author {@link Author} to add. - */ - void addAuthor(final Author author); - - /** - * Persists a new {@link Book}. - * @param book {@link Book} to add. - */ - void addBook(final Book book); - - /** - * Cascade remove an {@link Author}. - * @param author {@link Author} to be removed. - */ - void removeAuthor(final Author author); - - /** - * Cascade remove a {@link Book}. - * @param book {@link Book} to be removed. - */ - void removeBook(final Book book); -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java deleted file mode 100644 index 21b532100a..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/WriterBean.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.examples.ear.writer; - -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -import org.ow2.jonas.examples.ear.entity.Author; -import org.ow2.jonas.examples.ear.entity.Book; - -/** - * This is an example of Session Bean, stateless, secured, available - * with a Local and a Remote interface (with the same methods). - * @author JOnAS team - */ -@Stateless -@Remote(RemoteWriter.class) -@Local(LocalWriter.class) -@DeclareRoles("earsample") -@RolesAllowed("earsample") -public class WriterBean implements LocalWriter, RemoteWriter { - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * Persists a new {@link Author}. - * @param author {@link Author} to add. - */ - public void addAuthor(final Author author) { - entityManager.persist(author); - } - - /** - * Persists a new {@link Book}. - * @param book {@link Book} to add. - */ - public void addBook(final Book book) { - entityManager.persist(book); - } - - /** - * Cascade remove an {@link Author}. - * @param author {@link Author} to be removed. - */ - public void removeAuthor(final Author author) { - entityManager.remove(author); - } - - /** - * Cascade remove a {@link Book}. - * @param book {@link Book} to be removed. - */ - public void removeBook(final Book book) { - entityManager.remove(book); - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html b/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html deleted file mode 100644 index 88e0e76371..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/javaee5-earsample/src/java/org/ow2/jonas/examples/ear/writer/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Java EE 5.0 EAR Sample - - -

Java Enterprise Edition 5.0: EAR Sample: Writer Bean

- - diff --git a/jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml b/jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml deleted file mode 100644 index f75e765a27..0000000000 --- a/jonas/assemblies/examples/src/main/resources/examples/jonas-common.xml +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README deleted file mode 100644 index 8a9fd024c1..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/README +++ /dev/null @@ -1,31 +0,0 @@ -JAX-WS sample -------------- -This example shows how to access to a webservice deployed via a web application (quote.ear). -The web service is implemented by an annotated POJO (QuoteReporterPoOJO) -A java client launched by the client container calls ten times the web service and prints results - -The service directory contains : - - the POJO QuoteReporterPoOJO that implements QuoteReporter interface that needs the quote class - - an application.xml descriptor in order to package an enterprise application quote.ear - - an empty web.xml descriptor in order to package a web application quote.war -The client directory contains: - - the main class QuoteMain that access to the web service - -In order to run this example JOnAS must be launched with ejb3, jaxws, web and ear services - -################################################## -To build and deploy the application quote.ear do: - 1. ant clean build-deploy-service - 2. ant run-client -################################################## - -The target build-deploy: - - compiles the services classes, build the quote.ear and put it under $JONAS_BASE/deploy. - when quote.ear is deployed by JOnAS a WSDL is created and published at the following URL: - http://localhost:9000/quote/QuoteReporterService?WSDL - -The target run-client: - - creates the artifacts needs by the client from the published WSDL, compiles the corresponding classes - and package the whole in a quote-client.jar client application - - runs quote-client.jar using the container client and executes the main class QuoteMain - - prints the result in the shell of the client diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml deleted file mode 100644 index 32262df481..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/build.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml deleted file mode 100644 index 90aa8f6536..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/build.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml deleted file mode 100644 index fe771b9646..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/application.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - JAX-WS pojo sample - JAX-WS pojo sample - - - - - - quote.war - quote - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml deleted file mode 100644 index 20797bfb75..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/etc/web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java deleted file mode 100644 index 8272bfd69c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/client/src/java/org/ow2/jonas/tutorial/jaxws/client/QuoteMain.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tutorial.jaxws.client; - -import javax.xml.ws.WebServiceRef; -import org.ow2.jonas.tutorial.jaxws.quote.Quote; -import org.ow2.jonas.tutorial.jaxws.quote.QuoteReporter; -import org.ow2.jonas.tutorial.jaxws.quote.QuoteReporterService; - -public class QuoteMain { - - @WebServiceRef - static private QuoteReporterService service; - - /** - * @param args - */ - public static void main(String[] args) throws Exception { - QuoteReporter reporter = service.getQuoteReporterPort(); - for (int i = 0; i < 10; i++) { - Quote quote = reporter.getQuote("Ticker " + i); - System.out.println("Quote[" + quote.getTicker() + ", " + quote.getValue()); - } - } - -} diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml deleted file mode 100644 index de582c51cd..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/build.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml deleted file mode 100644 index fe771b9646..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/application.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - JAX-WS pojo sample - JAX-WS pojo sample - - - - - - quote.war - quote - - - - diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml deleted file mode 100644 index 20797bfb75..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/etc/web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - \ No newline at end of file diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java deleted file mode 100644 index af3cf6b0f0..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/Quote.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tutorial.jaxws.quote; - -public class Quote { - - private String ticker; - private double value; - - public Quote() { - } - - public void setTicker(String ticker) { - this.ticker = ticker; - } - - public void setValue(double value) { - this.value = value; - } - - public String getTicker() { - return ticker; - } - - public double getValue() { - return value; - } - - @Override - public String toString() { - return "Quote[ticker:" + ticker + ", value:" + value + "]"; - } - - - -} diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java deleted file mode 100644 index 344a49bf2f..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tutorial.jaxws.quote; - -import javax.jws.WebParam; -import javax.jws.WebService; - -@WebService(name="QuoteReporter", - targetNamespace="http://jonas.ow2.org/tutorial/jaxws/quote") -public interface QuoteReporter { - Quote getQuote(@WebParam(name="ticker") String ticker); -} diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java b/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java deleted file mode 100644 index 93b19cefe4..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jaxws-sample/service/src/java/org/ow2/jonas/tutorial/jaxws/quote/QuoteReporterPOJO.java +++ /dev/null @@ -1,43 +0,0 @@ - /** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tutorial.jaxws.quote; - -import javax.jws.WebService; - - -@WebService(portName="QuoteReporterPort", - serviceName="QuoteReporterService", - targetNamespace="http://jonas.ow2.org/tutorial/jaxws/quote", - endpointInterface="org.ow2.jonas.tutorial.jaxws.quote.QuoteReporter") - -public class QuoteReporterPOJO implements QuoteReporter { - - public Quote getQuote(String ticker) { - Quote quote = new Quote(); - quote.setTicker(ticker); - quote.setValue(Math.random() * 100); - return quote; - } -} diff --git a/jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml b/jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml deleted file mode 100644 index abe1572f7c..0000000000 --- a/jonas/assemblies/examples/src/main/resources/tutorial/jonas-common.xml +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/pom.xml b/jonas/assemblies/pom.xml deleted file mode 100644 index 9b2107edc3..0000000000 --- a/jonas/assemblies/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - org.ow2.jonas - jonas - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - assemblies - pom - JOnAS :: Assemblies - - - examples - profiles - ant-tasks - client-jar - - - \ No newline at end of file diff --git a/jonas/assemblies/profiles/addons/minimal/pom.xml b/jonas/assemblies/profiles/addons/minimal/pom.xml deleted file mode 100644 index 5faa7810c5..0000000000 --- a/jonas/assemblies/profiles/addons/minimal/pom.xml +++ /dev/null @@ -1,436 +0,0 @@ - - - - - org.ow2.jonas.assemblies.profiles - addons - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.assemblies.profiles.addons - micro-jonas - pom - JOnAS :: Assemblies :: Profiles :: Addons :: Minimal - - - - - - org.apache.maven.plugins - maven-shade-plugin - true - - - org.ow2.jonas.tools.maven - maven-shade-jonas-transformers - ${project.version} - - - org.ow2.util.maven - maven-merge-properties-plugin - ${ow2-util-plugin.version} - - - - - ant-tasks-generation - generate-sources - - shade - - - - - org.ow2.jonas:bootstrap-ant - org.ow2.jonas:jonas-carol-registry-ant - org.ow2.jonas:jonas-security-ant - - - ${project.build.directory}/ant/ow_jonas_ant.jar - - - org/ow2/jonas/antmodular/antlib.xml - - - ${project.build.directory}/extra-newjb-resources/build-jb.xml - ${project.build.directory}/extra-newjb-resources/build-jb.properties - - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - - src/main/assembly/assembly.xml - - - false - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-micro-jonas-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jndi-interceptors-core - config - ${project.version} - - - org.ow2.jonas - bootstrap-core-for-addons - config - ${project.version} - - - org.ow2.jonas - jonas-security-core - config - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - config - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - config - ${project.version} - - - org.ow2.jonas - event-provider-core - config - ${project.version} - - - ${project.build.directory}/extra-configuration-resources - META-INF/** - - * - - - - - - unpack-osgi-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas.launchers - jonas-launcher-for-addons - ${project.version} - - - ${project.build.directory}/osgi-conf-resources - META-INF/** - - org/ow2/jonas/**/auto-deploy.properties, - org/ow2/jonas/**/gateway.properties, - org/ow2/jonas/**/defaults.properties - - - - - - unpack-micro-jonas-binaries-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core-for-addons - bin - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - bin - ${project.version} - - - org.ow2.jonas - jonas-ant-tasks - bin - ${project.version} - - - ${project.build.directory}/extra-binaries-resources - META-INF/**,jcl* - - * - - - - - - unpack-micro-jonas-master-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core-for-addons - templates - ${project.version} - - - ${project.build.directory}/extra-master-template-resources - META-INF/**,jonas-admin.properties.template - - * - - - - - - unpack-micro-jonas-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core-for-addons - templates - ${project.version} - - - org.ow2.jonas - jonas-deployable-monitor-core-for-addons - templates - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - templates - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - templates - ${project.version} - - - org.ow2.jonas - jonas-security-core - templates - ${project.version} - - - org.ow2.jonas - jonas-workcleaner-core - templates - ${project.version} - - - org.ow2.jonas - jonas-workmanager-core - templates - ${project.version} - - - ${project.build.directory}/extra-templates-resources - META-INF/**,jonas-base.properties.template - - * - - - - - - - - - org.ow2.util.maven - maven-merge-properties-plugin - false - - - merge-micro-jonas-properties - process-resources - - merge - - - - ${project.build.directory}/extra-master-template-resources/jonas-base.properties.template - - - ${project.build.directory}/extra-templates-resources - - - ${project.build.directory}/extra-configuration-resources/jonas.properties - - - - - jonas.services - - - - - - - jonas.services - depmonitor - - - - jonas.* - jonas.service[.].* - - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - depmonitor - resourcemonitor - wc - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - repositories/url-internal - - - - - copy-jonas-artifacts - - assemble - - generate-sources - - repositories/maven2-internal - - - - - - generate-versions-properties - - versions - - generate-sources - - ${project.build.directory}/assemble-resources/versions.properties - - - - - - - - - maven-antrun-plugin - false - - - move-osgi-configuration - generate-sources - - run - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml b/jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml deleted file mode 100644 index e89d15577b..0000000000 --- a/jonas/assemblies/profiles/addons/minimal/src/main/assembly/assembly.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - bin - - dir - zip - tar.gz - - true - - - ../../src/main/assembly/common-component.xml - ../src/main/assembly/addons-component.xml - - \ No newline at end of file diff --git a/jonas/assemblies/profiles/addons/pom.xml b/jonas/assemblies/profiles/addons/pom.xml deleted file mode 100644 index e20625644a..0000000000 --- a/jonas/assemblies/profiles/addons/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - org.ow2.jonas.assemblies - profiles - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.assemblies.profiles - addons - pom - JOnAS :: Assemblies :: Profiles :: Addons - - minimal - - - - - - - - - org.ow2.jonas.launchers - jonas-launcher-for-addons - ${project.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - - org.ow2.jonas - bootstrap-core-for-addons - ${project.version} - - - org.ow2.jonas - jonas-service-manager-for-addons - ${project.version} - - - org.ow2.jonas - jonas-mbeans-for-addons - ${project.version} - - - org.ow2.jonas - jonas-addon-core - ${project.version} - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - - - - - depmonitor - - - org.ow2.jonas - jonas-deployable-monitor-core-for-addons - ${project.version} - 3 - - - - - - - - - diff --git a/jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml b/jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml deleted file mode 100644 index 3db15b985e..0000000000 --- a/jonas/assemblies/profiles/addons/src/main/assembly/addons-component.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - lib/bootstrap - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.jonas.launchers:jonas-launcher-for-addons - - - - - - - lib/bootstrap - felix-launcher.jar - true - - org.ow2.jonas.launchers:jonas-launcher-for-addons - - - - \ No newline at end of file diff --git a/jonas/assemblies/profiles/legacy/full/pom.xml b/jonas/assemblies/profiles/legacy/full/pom.xml deleted file mode 100644 index 6d5ec04994..0000000000 --- a/jonas/assemblies/profiles/legacy/full/pom.xml +++ /dev/null @@ -1,1376 +0,0 @@ - - - - - org.ow2.jonas.assemblies.profiles.legacy - micro-jonas - 5.3.0-M7-SNAPSHOT - ../minimal/pom.xml - - 4.0.0 - jonas-full - pom - JOnAS :: Assemblies :: Profiles :: Legacy :: Full - - - - org.ow2.jonas - jonas-cmi-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb-2.1-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-base-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-eclipselink-1.1-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-eclipselink-2.2-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-eclipselink-2.3-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-hibernate-3.6-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-hibernate-4.1-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-openjpa-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb3-provider-openjpa2-ant - ${project.version} - - - org.ow2.jonas - jms-joram-ant - ${project.version} - - - org.ow2.jonas - jonas-db-base-ant - ${project.version} - - - org.ow2.jonas - jonas-db-h2-ant - ${project.version} - - - org.ow2.jonas - jonas-db-hsql-ant - ${project.version} - - - org.ow2.jonas - jonas-dbm-ant - ${project.version} - - - org.ow2.jonas - jonas-discovery-base-ant - ${project.version} - - - org.ow2.jonas - jonas-discovery-jgroups-ant - ${project.version} - - - org.ow2.jonas - jonas-discovery-multicast-ant - ${project.version} - - - org.ow2.jonas - jonas-ejb-ha-ant - ${project.version} - - - org.ow2.jonas - jonas-mail-ant - ${project.version} - - - org.ow2.jonas - jonas-resource-ant - ${project.version} - - - org.ow2.jonas - jonas-jsf-base-ant - ${project.version} - - - org.ow2.jonas - jonas-jsf-mojarra-1.2-ant - ${project.version} - - - org.ow2.jonas - jonas-jsf-mojarra-2.0-ant - ${project.version} - - - org.ow2.jonas - jonas-jsf-myfaces-2.0-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-base-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-base-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-6.1-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-8.0-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-base-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-ant - ${project.version} - - - org.ow2.jonas - jonas-webservices-publish-ant - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-ant - ${project.version} - - - org.ow2.jonas - jonas-cluster-daemon-ant - ${project.version} - - - org.ow2.jonas - jonas-smartclient-ant - ${project.version} - - - - - - org.ow2.jonas - jonas-ctxroot-plan - ${project.version} - deployment-plan - - - org.ow2.jonas - jonas-admin-plan - ${project.version} - deployment-plan - - - org.ow2.jonas - mejb-plan - ${project.version} - deployment-plan - - - org.ow2.jonas - jonas-jca-scout-plan - ${project.version} - deployment-plan - - - org.ow2.jonas.documentation - jonas-doc-en-plan - ${jonas-doc.version} - deployment-plan - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - deployment-plan - - - org.ow2.jonas - jms-joram-server-plan - ${project.version} - deployment-plan - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - ant-tasks-generation - generate-sources - - shade - - - - - org.ow2.jonas:bootstrap-ant - org.ow2.jonas:jonas-cmi-ant - org.ow2.jonas:jonas-ejb-2.1-ant - org.ow2.jonas:jonas-ejb3-base-ant - org.ow2.jonas:jonas-ejb3-provider-hibernate-4.1-ant - org.ow2.jonas:jonas-ejb3-provider-eclipselink-1.1-ant - org.ow2.jonas:jonas-ejb3-provider-eclipselink-2.2-ant - org.ow2.jonas:jonas-ejb3-provider-eclipselink-2.3-ant - org.ow2.jonas:jonas-ejb3-provider-hibernate-3.6-ant - org.ow2.jonas:jonas-ejb3-provider-openjpa-ant - org.ow2.jonas:jonas-ejb3-provider-openjpa2-ant - org.ow2.jonas:jms-joram-ant - org.ow2.jonas:jonas-carol-registry-ant - org.ow2.jonas:jonas-db-base-ant - org.ow2.jonas:jonas-db-h2-ant - org.ow2.jonas:jonas-db-hsql-ant - org.ow2.jonas:jonas-dbm-ant - org.ow2.jonas:jonas-discovery-base-ant - org.ow2.jonas:jonas-discovery-jgroups-ant - org.ow2.jonas:jonas-discovery-multicast-ant - org.ow2.jonas:jonas-ejb-ha-ant - org.ow2.jonas:jonas-mail-ant - org.ow2.jonas:jonas-resource-ant - org.ow2.jonas:jonas-smartclient-ant - org.ow2.jonas:jonas-security-ant - org.ow2.jonas:jonas-jsf-base-ant - org.ow2.jonas:jonas-jsf-mojarra-1.2-ant - org.ow2.jonas:jonas-jsf-mojarra-2.0-ant - org.ow2.jonas:jonas-jsf-myfaces-2.0-ant - org.ow2.jonas:jonas-web-container-base-ant - org.ow2.jonas:jonas-web-container-jetty-base-ant - org.ow2.jonas:jonas-web-container-jetty-6.1-ant - org.ow2.jonas:jonas-web-container-jetty-8.0-ant - org.ow2.jonas:jonas-web-container-tomcat-base-ant - org.ow2.jonas:jonas-web-container-tomcat-6.0-ant - org.ow2.jonas:jonas-web-container-tomcat-7.0-ant - org.ow2.jonas:jonas-webservices-publish-ant - org.ow2.jonas:jonas-webservices-jaxrpc-ant - org.ow2.jonas:jonas-cluster-daemon-ant - - - - - org/ow2/jonas/antmodular/antlib.xml - - - ${project.build.directory}/extra-newjb-resources/build-jb.xml - ${project.build.directory}/extra-newjb-resources/build-jb.properties - - - - db.defaultname - - - discovery.implementation.default - - - jsf.implementation.default - - - webcontainer.service.defaultname - - - ejb3.jpa.provider.default - - - - - - - db.defaultname - h2,hsql - - - discovery.implementation.default - jgroups,multicast - - - jsf.implementation.default - mojarra20,myfaces20,mojarra12 - - - webcontainer.service.defaultname - tomcat7,jetty8,tomcat6,jetty6 - - - ejb3.jpa.provider.default - hibernate4.1 - - - - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - unpack-jonas-configuration - - unpack - - generate-sources - - - - org.ow2.jonas.assemblies - examples - ${project.version} - - - ${project.build.directory}/configuration-resources - META-INF/** - - - - - unpack-jonas-full-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-jetty-6.1-core - ${project.version} - config - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - ${project.version} - config - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - ${project.version} - config - - - org.ow2.jonas - jonas-ejb-easybeans-core - config - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-8.0-core - config - ${project.version} - - - org.ow2.jonas - jonas-cmi-core - config - ${project.version} - - - org.ow2.jonas - jonas-discovery-jgroups-core - config - ${project.version} - - - org.ow2.jonas - jms-joram-core - config - ${project.version} - - - org.ow2.jonas - jonas-ejb-ha-core - config - ${project.version} - - - org.ow2.jonas - jonas-dbm-core - config - ${project.version} - - - org.ow2.jonas - jonas-mail-core - config - ${project.version} - - - org.ow2.jonas - jonas-cluster-daemon-core - config - ${project.version} - - - org.ow2.jonas - jonas-webservices-publish-core - config - ${project.version} - - - org.ow2.jonas - wrapper-core - config - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - config - ${project.version} - - - org.ow2.jonas - jonas-tm-jotm-core - config - ${project.version} - - - ${project.build.directory}/extra-configuration-resources - META-INF/** - - * - - - - - - - unpack-jonas-full-binaries-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-cmi-core - bin - ${project.version} - - - org.ow2.jonas - jms-joram-core - bin - ${project.version} - - - - - org.ow2.jonas - jonas-client-core - bin - ${project.version} - - - org.ow2.jonas - jonas-ejb-2.1-core - bin - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - bin - ${project.version} - - - org.ow2.jonas - jonas-resource-core - bin - ${project.version} - - - ${project.build.directory}/extra-binaries-resources - META-INF/** - - * - - - - - - - unpack-extra-deploy-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-resource-core - deploy - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deploy - ${project.version} - - - org.ow2.jonas - jms-joram-core - deploy - ${project.version} - - - ${project.build.directory}/extra-deploy-resources - META-INF/** - - * - - - - - - - unpack-extra-deploy-example-files - - unpack - - generate-sources - - - - org.ow2.jonas - jms-joram-core - deploy-example - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deploy-example - ${project.version} - - - org.ow2.jonas - jonas-mail-core - deploy-example - ${project.version} - - - org.ow2.jonas - jonas-jndi-core - deploy-example - ${project.version} - - - ${project.build.directory}/extra-deploy-example-resources - META-INF/** - - * - - - - - - - unpack-extra-windows_service-files - - unpack - - generate-sources - - - - org.ow2.jonas - wrapper-core - windows_service - ${project.version} - - - ${project.build.directory}/extra-windows_service-resources - META-INF/** - - * - - - - - - unpack-full-jonas-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-cdi-weld-core - templates - ${project.version} - - - org.ow2.jonas - jonas-cmi-core - templates - ${project.version} - - - org.ow2.jonas - jonas-ejb-easybeans-core - templates - ${project.version} - - - org.ow2.jonas - jonas-ejb-2.1-core - templates - ${project.version} - - - org.ow2.jonas - jaxrs-jersey-core - templates - ${project.version} - - - org.ow2.jonas - jonas-audit-core - templates - ${project.version} - - - org.ow2.jonas - jonas-db-base-core - templates - ${project.version} - - - org.ow2.jonas - jonas-dbm-core - templates - ${project.version} - - - org.ow2.jonas - jonas-discovery-base-core - templates - ${project.version} - - - org.ow2.jonas - jonas-ear-core - templates - ${project.version} - - - org.ow2.jonas - jonas-ejb-ha-core - templates - ${project.version} - - - org.ow2.jonas - jonas-mail-core - templates - ${project.version} - - - org.ow2.jonas - jonas-resource-core - templates - ${project.version} - - - org.ow2.jonas - jonas-resource-monitor-core - templates - ${project.version} - - - org.ow2.jonas - jonas-tm-jotm-core - templates - ${project.version} - - - org.ow2.jonas - jsf-base-core - templates - ${project.version} - - - org.ow2.jonas - jonas-smartclient-core - templates - ${project.version} - - - org.ow2.jonas - jonas-validation-hibernate-core - templates - ${project.version} - - - org.ow2.jonas - jonas-web-container-base-core - templates - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - templates - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxws-core - templates - ${project.version} - - - org.ow2.jonas - jonas-webservices-publish-core - templates - ${project.version} - - - org.ow2.jonas - jonas-versioning-core - templates - ${project.version} - - - org.ow2.jonas - jonas-multitenant-core - templates - ${project.version} - - - org.ow2.jonas - jonas-jndi-core - templates - ${project.version} - - - org.ow2.jonas - jonas-ssh-core - templates - ${project.version} - - - ${project.build.directory}/extra-templates-resources - META-INF/** - - * - - - - - - unpack-full-jonas-properties-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-ejb-easybeans-core - properties - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-6.1-core - properties - ${project.version} - - - org.ow2.jonas - jonas-web-container-jetty-8.0-core - properties - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - properties - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - properties - ${project.version} - - - org.ow2.jonas - jonas-jsf-mojarra-1.2-core - properties - ${project.version} - - - org.ow2.jonas - jonas-jsf-mojarra-2.0-core - properties - ${project.version} - - - org.ow2.jonas - jonas-jsf-myfaces-2.0-core - properties - ${project.version} - - - org.ow2.jonas - jonas-discovery-jgroups-core - properties - ${project.version} - - - org.ow2.jonas - jonas-discovery-multicast-core - properties - ${project.version} - - - org.ow2.jonas - jonas-db-h2-core - properties - ${project.version} - - - org.ow2.jonas - jonas-db-hsql-core - properties - ${project.version} - - - ${project.build.directory}/extra-properties-resources - META-INF/** - - * - - - - - - - - org.ow2.util.maven - maven-merge-properties-plugin - - - merge-full-jonas-properties - process-resources - - merge - - - - ${project.build.directory}/extra-master-template-resources/jonas-base.properties.template - - - ${project.build.directory}/extra-templates-resources - - - ${project.build.directory}/extra-properties-resources - - - ${project.build.directory}/extra-configuration-resources/jonas.properties - - - - - jonas.services - - - jonas.service.ejb3.jpa.provider - - - - - jonas.service.web.class - - - jonas.service.jsf.class - - - jonas.service.discovery.class - - - jonas.service.db.class - - - - - - - jonas.services - jtm,db,validation,wm,resource,ejb3,jsf,jaxws,web,ear,depmonitor - - - jonas.service.ejb3.jpa.provider - hibernate4.1 - - - - - jonas.service.web.class - org.ow2.jonas.web.tomcat7.Tomcat7Service, org.ow2.jonas.web.jetty8.Jetty8Service - - - jonas.service.jsf.class - org.ow2.jonas.jsf.mojarra20.Mojarra20ServiceImpl, org.ow2.jonas.jsf.myfaces20.MyFaces20ServiceImpl, org.ow2.jonas.jsf.mojarra12.Mojarra12ServiceImpl - - - jonas.service.db.class - org.ow2.jonas.db.h2.H2DBServiceImpl, org.ow2.jonas.db.hsqldb.HsqlDBServiceImpl - - - - jonas.* - jonas.service[.].* - - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - false - - - audit - cmi - depmonitor - db-base - db-hsqldb - db-h2 - dbm - discovery-base - discovery-internal - discovery-jgroups - ear - easybeans-core - javassist - easybeans-persistence-eclipselink1.1 - easybeans-persistence-eclipselink2.2 - easybeans-persistence-hibernate3.6 - easybeans-persistence-hibernate4.1 - ejb2 - ejb3 - generators-base - ha - irmi - jaxrpc-axis - jsf-base - jsf-mojarra12 - jsf-mojarra20 - jsf-myfaces20 - jaxrpc-base - jaxws-axis2 - jaxws-base - jaxws-cxf - jdbc-resource-adapters - jgroups - jotm - jtm - lib-ejb2-ha - mail - ow2-util-common-impl - ow2-util-event-common-ejb - resource - resourcemonitor - saaj-ri - sec-interceptors-iiop - smartclient - trans-interceptors-iiop - versioning - multitenant - wc - web-base - web-jetty6 - web-jetty8 - web-tomcat6 - web-tomcat7 - wm - wsdl-publisher - xmlbeans - cdi - jaxrs - validation - jndi - ssh - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - repositories/url-internal - - - - - copy-jonas-artifacts - - assemble - - generate-sources - - repositories/maven2-internal - - - - - - generate-versions-properties - - versions - - generate-sources - - ${project.build.directory}/assemble-resources/versions.properties - - audit - cmi - depmonitor - db-base - db-hsqldb - db-h2 - dbm - discovery-base - discovery-internal - discovery-jgroups - ear - easybeans-core - javassist - easybeans-persistence-eclipselink1.1 - easybeans-persistence-eclipselink2.2 - easybeans-persistence-hibernate3.6 - easybeans-persistence-hibernate4.1 - ejb2 - ejb3 - generators-base - ha - irmi - jaxrpc-axis - jsf-base - jsf-mojarra12 - jsf-mojarra20 - jsf-myfaces20 - jaxrpc-base - jaxws-axis2 - jaxws-base - jaxws-cxf - jdbc-resource-adapters - jgroups - jotm - jtm - lib-ejb2-ha - mail - ow2-util-common-impl - ow2-util-event-common-ejb - resource - resourcemonitor - saaj-ri - sec-interceptors-iiop - smartclient - trans-interceptors-iiop - versioning - multitenant - wc - web-base - web-jetty6 - web-jetty8 - web-tomcat6 - web-tomcat7 - wm - wsdl-publisher - xmlbeans - cdi - jaxrs - validation - jndi - ssh - joram-server - joram-client - - - - - - - generate-client-jar - - client-jar - - generate-sources - - - audit - cmi - depmonitor - db-base - db-hsqldb - db-h2 - dbm - discovery-base - discovery-internal - discovery-jgroups - ear - easybeans-core - javassist - easybeans-persistence-eclipselink1.1 - easybeans-persistence-eclipselink2.2 - easybeans-persistence-hibernate3.6 - easybeans-persistence-hibernate4.1 - ejb2 - ejb3 - generators-base - ha - irmi - jaxrpc-axis - jsf-base - jsf-mojarra12 - jsf-mojarra20 - jsf-myfaces20 - jaxrpc-base - jaxws-axis2 - jaxws-base - jaxws-cxf - jdbc-resource-adapters - jgroups - jotm - jtm - lib-ejb2-ha - mail - ow2-util-common-impl - ow2-util-event-common-ejb - resource - resourcemonitor - saaj-ri - sec-interceptors-iiop - smartclient - trans-interceptors-iiop - versioning - multitenant - wc - web-base - web-jetty6 - web-jetty8 - web-tomcat6 - web-tomcat7 - wm - wsdl-publisher - xmlbeans - cdi - jaxrs - validation - jndi - ssh - joram-server - joram-client - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - maven2-internal-provisioning - - provision-repository - - generate-resources - - ${project.build.directory}/assemble-resources/repositories/maven2-internal - false - - - - url-internal-provisioning - - provision-directory - - generate-resources - - ${project.build.directory}/configuration-resources/repositories/url-internal - - - - deployable-provisioning - - provision-directory - - generate-resources - - ${project.build.directory}/extra-deploy-resources - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - - src/main/assembly/assembly.xml - - - false - true - - - - - - maven-antrun-plugin - - - move-osgi-configuration - generate-sources - - run - - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml b/jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml deleted file mode 100644 index 041b0b31cf..0000000000 --- a/jonas/assemblies/profiles/legacy/full/src/main/assembly/assembly.xml +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - bin - - dir - zip - tar.gz - - true - - - ../../src/main/assembly/common-component.xml - ../src/main/assembly/legacy-component.xml - src/main/assembly/jonas-full-component.xml - src/main/assembly/templates-component.xml - - - - - - - - lib/endorsed - true - - org.jacorb:jacorb - org.jacorb:jacorb-idl - org.ow2.carol:carol-iiop-delegate - xerces:xercesImpl - xalan:xalan - xml-apis:xml-apis - xalan:serializer - - - - - - - - - - - lib/endorsed-client - true - - org.ow2.spec.ee:ow2-interceptor-1.1-spec - org.ow2.spec.ee:ow2-annotation-1.1-spec - org.ow2.spec.ee:ow2-jaspic-1.0-spec - javax.xml.ws:jaxws-api - javax.xml.bind:jaxb-api - - - - - - - - - lib/bootstrap - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.jonas:client-bootstrap - - - - - - - - lib/bootstrap/bundles-jpa2.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-jpa-2.0-spec - - - - - - - - lib/bootstrap/bundles-servlets-3.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-servlet-3.0-spec - org.ow2.spec.ee:ow2-jsp-2.2-spec - org.ow2.spec.ee:ow2-el-2.2-spec - - - - - - - - lib/bootstrap/bundles-jsf-2.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-jsf-2.0-spec - - - - - - - - lib/bootstrap/bundles-javaee-6.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-ejb-3.1-spec - org.ow2.spec.ee:ow2-interceptor-1.1-spec - org.ow2.spec.ee:ow2-annotation-1.1-spec - org.ow2.spec.ee:ow2-jaspic-1.0-spec - org.ow2.spec.ee:ow2-jaxrs-1.1-spec - org.ow2.spec.ee:ow2-connector-1.6-spec - org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2 - org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2 - - - - - - - - lib/bootstrap/bundles-cdi - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-interceptor-1.1-spec - - - - - - - - - lib/ - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.jonas:jonas-client-core - org.ow2.jonas:jonas-generators-raconfig - org.ow2.jonas:jonas-generators-clientstubs - org.ow2.jonas:jonas-cluster-daemon-api:jar - org.ow2.jonas:jonas-cluster-daemon-core:jar - - com.sun.xml.bind:jaxb-xjc - - - - - - - - lib/ - smartclient.jar - true - - org.ow2.easybeans:easybeans-component-smartclient - - - - - - lib/common - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.util:util-ant-tasks - org.apache.cxf:cxf-anttasks - - - - - diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml b/jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml deleted file mode 100644 index b81f959478..0000000000 --- a/jonas/assemblies/profiles/legacy/full/src/main/assembly/jonas-full-component.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - target/extra-deploy-resources/ - deploy - - * - - - - - target/extra-deploy-example-resources/ - conf/deployExample - - * - - - - - - - - - lib/common - ow_jonas_ant_deprecated.jar - true - - org.ow2.jonas:jonas-ant-tasks - - - - - diff --git a/jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml b/jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml deleted file mode 100644 index 5b83903fc7..0000000000 --- a/jonas/assemblies/profiles/legacy/full/src/main/assembly/templates-component.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - target/extra-windows_service-resources - templates/windows_service/ - - * - - - - - target/extra-configuration-resources - templates/conf/conf/ - - *.cfg - *.conf - - - - FirebirdSQL.properties - InstantDB1.properties - InterBase1.properties - McKoi1.properties - MySQL.properties - Oracle1.properties - Oracle1.properties - PostgreSQL1.properties - Sybase1.properties - - - - diff --git a/jonas/assemblies/profiles/legacy/jaxrs/pom.xml b/jonas/assemblies/profiles/legacy/jaxrs/pom.xml deleted file mode 100644 index fc845148e0..0000000000 --- a/jonas/assemblies/profiles/legacy/jaxrs/pom.xml +++ /dev/null @@ -1,371 +0,0 @@ - - - - - org.ow2.jonas.assemblies.profiles.legacy - micro-jonas - 5.3.0-M7-SNAPSHOT - ../minimal/pom.xml - - 4.0.0 - org.ow2.jonas.assemblies.profiles.legacy - jonas-jaxrs - pom - JOnAS :: Assemblies :: Profiles :: Legacy :: JAX-RS - - - - org.ow2.jonas - jonas-web-container-base-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-base-ant - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-ant - ${project.version} - - - org.ow2.jonas - jonas-smartclient-ant - ${project.version} - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - ant-tasks-generation - generate-sources - - shade - - - - - org.ow2.jonas:bootstrap-ant - org.ow2.jonas:jonas-carol-registry-ant - org.ow2.jonas:jonas-security-ant - org.ow2.jonas:jonas-web-container-base-ant - org.ow2.jonas:jonas-web-container-tomcat-base-ant - org.ow2.jonas:jonas-web-container-tomcat-7.0-ant - org.ow2.jonas:jonas-smartclient-ant - - - - - org/ow2/jonas/antmodular/antlib.xml - - - ${project.build.directory}/extra-newjb-resources/build-jb.xml - ${project.build.directory}/extra-newjb-resources/build-jb.properties - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-jonas-jaxrs-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - ${project.version} - config - - - ${project.build.directory}/extra-configuration-resources - META-INF/** - - * - - - - - - - unpack-jonas-jaxrs-extra-deploy-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deploy - ${project.version} - - - ${project.build.directory}/extra-deploy-resources - META-INF/** - - * - - - - - - - unpack-jonas-jaxrs-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - jaxrs-jersey-core - templates - ${project.version} - - - org.ow2.jonas - jonas-web-container-base-core - templates - ${project.version} - - - org.ow2.jonas - jonas-smartclient-core - templates - ${project.version} - - - ${project.build.directory}/extra-templates-resources - META-INF/** - - * - - - - - - - unpack-jonas-jaxrs-properties-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - properties - ${project.version} - - - ${project.build.directory}/extra-properties-resources - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-merge-properties-plugin - - - merge-jonas-jaxrs-jonas-properties - process-resources - - merge - - - - ${project.build.directory}/extra-master-template-resources/jonas-base.properties.template - - - ${project.build.directory}/extra-templates-resources - - - ${project.build.directory}/extra-properties-resources - - - ${project.build.directory}/extra-configuration-resources/jonas.properties - - - - - jonas.services - - - - - - - jonas.services - web,jaxrs,depmonitor - - - - jonas.* - jonas.service[.].* - - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - - depmonitor - wc - web-base - web-tomcat7 - wm - jaxrs - smartclient - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - repositories/url-internal - - - - - copy-jonas-artifacts - - assemble - - generate-sources - - repositories/maven2-internal - - - - - - generate-versions-properties - - versions - - generate-sources - - ${project.build.directory}/assemble-resources/versions.properties - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - - src/main/assembly/assembly.xml - - - false - true - - - - - - maven-antrun-plugin - - - move-osgi-configuration - generate-sources - - run - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml b/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml deleted file mode 100644 index 06d7246292..0000000000 --- a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/assembly.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - bin - - dir - zip - tar.gz - - true - - - ../../src/main/assembly/common-component.xml - ../src/main/assembly/legacy-component.xml - src/main/assembly/jonas-jaxrs-component.xml - - - - - - - - lib/bootstrap/bundles-servlets-3.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-servlet-3.0-spec - org.ow2.spec.ee:ow2-jsp-2.2-spec - org.ow2.spec.ee:ow2-el-2.2-spec - - - - - diff --git a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml b/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml deleted file mode 100644 index e6f24d87a8..0000000000 --- a/jonas/assemblies/profiles/legacy/jaxrs/src/main/assembly/jonas-jaxrs-component.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - target/extra-deploy-resources/ - deploy - - * - - - - - - target/configuration-resources - templates/deploy/ - - deploy/** - - - - - - target/extra-deploy-resources - templates/deploy/deploy - - * - - - - - - target/extra-configuration-resources - templates/conf/conf/ - - *.conf - - - - diff --git a/jonas/assemblies/profiles/legacy/minimal/pom.xml b/jonas/assemblies/profiles/legacy/minimal/pom.xml deleted file mode 100644 index 03f32687a5..0000000000 --- a/jonas/assemblies/profiles/legacy/minimal/pom.xml +++ /dev/null @@ -1,439 +0,0 @@ - - - - - org.ow2.jonas.assemblies.profiles - legacy - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.assemblies.profiles.legacy - micro-jonas - pom - JOnAS :: Assemblies :: Profiles :: Legacy :: Minimal - - - - - - org.apache.maven.plugins - maven-shade-plugin - true - - - org.ow2.jonas.tools.maven - maven-shade-jonas-transformers - ${project.version} - - - org.ow2.util.maven - maven-merge-properties-plugin - ${ow2-util-plugin.version} - - - - - ant-tasks-generation - generate-sources - - shade - - - - - org.ow2.jonas:bootstrap-ant - org.ow2.jonas:jonas-carol-registry-ant - org.ow2.jonas:jonas-security-ant - - - ${project.build.directory}/ant/ow_jonas_ant.jar - - - org/ow2/jonas/antmodular/antlib.xml - - - ${project.build.directory}/extra-newjb-resources/build-jb.xml - ${project.build.directory}/extra-newjb-resources/build-jb.properties - - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - - src/main/assembly/assembly.xml - - - false - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-micro-jonas-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jndi-interceptors-core - config - ${project.version} - - - org.ow2.jonas - bootstrap-core - config - ${project.version} - - - org.ow2.jonas - jonas-security-core - config - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - config - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - config - ${project.version} - - - org.ow2.jonas - event-provider-core - config - ${project.version} - - - ${project.build.directory}/extra-configuration-resources - META-INF/** - - * - - - - - - unpack-osgi-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - ${project.build.directory}/osgi-conf-resources - META-INF/** - - org/ow2/jonas/**/auto-deploy.properties, - org/ow2/jonas/**/gateway.properties, - org/ow2/jonas/**/defaults.properties - - - - - - unpack-micro-jonas-binaries-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core - bin - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - bin - ${project.version} - - - org.ow2.jonas - jonas-ant-tasks - bin - ${project.version} - - - ${project.build.directory}/extra-binaries-resources - - META-INF/**,jcl* - - * - - - - - - unpack-micro-jonas-master-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core - templates - ${project.version} - - - ${project.build.directory}/extra-master-template-resources - META-INF/**,jonas-admin.properties.template - - * - - - - - - unpack-micro-jonas-template-files - - unpack - - generate-sources - - - - org.ow2.jonas - bootstrap-core - templates - ${project.version} - - - org.ow2.jonas - jonas-deployable-monitor-core - templates - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - templates - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - templates - ${project.version} - - - org.ow2.jonas - jonas-security-core - templates - ${project.version} - - - org.ow2.jonas - jonas-workcleaner-core - templates - ${project.version} - - - org.ow2.jonas - jonas-workmanager-core - templates - ${project.version} - - - ${project.build.directory}/extra-templates-resources - META-INF/**,jonas-base.properties.template - - * - - - - - - - - - org.ow2.util.maven - maven-merge-properties-plugin - false - - - merge-micro-jonas-properties - process-resources - - merge - - - - ${project.build.directory}/extra-master-template-resources/jonas-base.properties.template - - - ${project.build.directory}/extra-templates-resources - - - ${project.build.directory}/extra-configuration-resources/jonas.properties - - - - - jonas.services - - - - - - - jonas.services - depmonitor - - - - jonas.* - jonas.service[.].* - - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - depmonitor - resourcemonitor - wc - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - repositories/url-internal - - - - - copy-jonas-artifacts - - assemble - - generate-sources - - repositories/maven2-internal - - - - - - generate-versions-properties - - versions - - generate-sources - - ${project.build.directory}/assemble-resources/versions.properties - - - - - - - - - maven-antrun-plugin - false - - - move-osgi-configuration - generate-sources - - run - - - - - - - - - - - - - - - - - - diff --git a/jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml b/jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml deleted file mode 100644 index 376738c1b7..0000000000 --- a/jonas/assemblies/profiles/legacy/minimal/src/main/assembly/assembly.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - bin - - dir - zip - tar.gz - - true - - - ../../src/main/assembly/common-component.xml - ../src/main/assembly/legacy-component.xml - - - diff --git a/jonas/assemblies/profiles/legacy/pom.xml b/jonas/assemblies/profiles/legacy/pom.xml deleted file mode 100644 index 153c69e3c2..0000000000 --- a/jonas/assemblies/profiles/legacy/pom.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - profiles - org.ow2.jonas.assemblies - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.assemblies.profiles - legacy - - pom - JOnAS :: Assemblies :: Profiles :: Legacy - - - minimal - jaxrs - full - - - - - - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - - org.ow2.jonas - bootstrap-core - ${project.version} - - - org.ow2.jonas - jonas-service-manager - ${project.version} - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - - - - - depmonitor - - - org.ow2.jonas - jonas-deployable-monitor-core - ${project.version} - 3 - - - - - - - - maven-jar-plugin - - - attach-assembly-component - compile - - jar - - - src/main/assembly - ${project.build.directory} - assembly-component - - legacy-component.xml - - - - - - - - diff --git a/jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml b/jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml deleted file mode 100644 index 4d3774c01e..0000000000 --- a/jonas/assemblies/profiles/legacy/src/main/assembly/legacy-component.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - lib/bootstrap - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.jonas.launchers:jonas-launcher - - - - - - - lib/bootstrap - felix-launcher.jar - true - - org.ow2.jonas.launchers:jonas-launcher - - - - diff --git a/jonas/assemblies/profiles/pom.xml b/jonas/assemblies/profiles/pom.xml deleted file mode 100644 index 82e6d62506..0000000000 --- a/jonas/assemblies/profiles/pom.xml +++ /dev/null @@ -1,1739 +0,0 @@ - - - - - org.ow2.jonas - assemblies - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.assemblies - profiles - pom - JOnAS :: Assemblies :: Profiles - - - legacy - addons - - - - - - - - - org.apache.felix - org.apache.felix.framework - - - - - - - - - org.ow2.jonas - jonas-commands - ${project.version} - - - org.ow2.jonas - jonas-ant-tasks - ${project.version} - - - - - - - - - logkit - logkit - - - avalon-framework - avalon-framework - - - - - org.jacorb - jacorb - - - org.jacorb - jacorb-idl - - - - - org.ow2.carol - carol-iiop-delegate - - - - - xerces - xercesImpl - - - xalan - xalan - - - xml-apis - xml-apis - - - xalan - serializer - - - - - org.ow2.jonas - client-bootstrap - ${project.version} - - - - - - - org.ow2.jonas - jonas-generators-raconfig - ${project.version} - - - org.ow2.jonas - jonas-generators-clientstubs - ${project.version} - - - org.ow2.jonas - jonas-cluster-daemon-api - ${project.version} - - - org.ow2.jonas - jonas-cluster-daemon-core - ${project.version} - - - org.ow2.jonas - jonas-client-core - ${project.version} - - - org.ow2.util - util-ant-tasks - ${ow2-util-ant-tasks.version} - - - org.apache.cxf - cxf-anttasks - ${cxf.anttasks.version} - - - org.apache.cxf - cxf-tools-wsdlto-core - - - org.apache.cxf - cxf-tools-java2ws - - - ant - ant - - - ant - ant-nodeps - - - - - - - org.ow2.easybeans - easybeans-component-smartclient - ${easybeans.version} - - - - - com.sun.xml.bind - jaxb-xjc - ${jaxb2-xjc.version} - - - - - org.ow2.jonas.osgi - javaee-api - tld - jar - ${project.version} - - - - - org.ow2.spec.ee - ow2-interceptor-1.1-spec - - - - org.ow2.spec.ee - ow2-jpa-2.0-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-jsp-2.2-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-jsf-2.0-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-ejb-3.1-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-jaspic-1.0-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-annotation-1.1-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-jaxrs-1.1-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-connector-1.6-spec - - - - javax.xml.ws - jaxws-api - 2.2.8 - - - - javax.xml.bind - jaxb-api - ${jaxb2-api.version} - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.jaxws-api-2.2 - 1.9.0 - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.jaxb-api-2.2 - 1.9.0 - - - - org.ow2.spec.ee - ow2-el-2.2-spec - ${ow2.spec.version} - - - - - - org.ow2.util.maven - maven-merge-properties-plugin - ${ow2-util-plugin.version} - - - org.apache.maven.plugins - maven-shade-plugin - 1.4 - - - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-ant - ${project.version} - - - org.ow2.jonas - jonas-security-ant - ${project.version} - - - - - - jboss.release - JBoss M2 Repository (for Xalan Serializer) - http://repository.jboss.com/maven2 - - false - - - true - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - - - - org.ow2.jonas - jonas-jca-jdbc-glue - ${project.version} - client - - - org.ow2.jonas - jonas-jca-scout-glue - ${project.version} - client - - - org.apache.juddi - juddi - ${juddi.version} - client - - - org.apache.ws.scout - scout - ${scout.version} - client - - - - - org.ow2.jonas - client-bootstrap - ${project.version} - client - - - - - org.ow2.jonas - jonas-bootstrap-loader - ${project.version} - client - - - - - org.ow2.jonas - jonas-client-core - ${project.version} - client - - - - - org.ow2.jonas - mejb-core - ${project.version} - client - - - - org.ow2.easybeans - easybeans-injection-api - ${easybeans.version} - client - - - org.ow2.easybeans - easybeans-injection-impl - ${easybeans.version} - client - - - org.apache.ws.commons.axiom - axiom-dom - 1.2.5 - client - - - org.apache.axis2 - axis2-jaxws - ${axis2.version} - client - - - org.apache.axis2 - axis2-kernel - ${axis2.version} - client - - - org.apache.axis2 - axis2-metadata - ${axis2.version} - client - - - commons-codec - commons-codec - 1.3 - client - - - commons-httpclient - commons-httpclient - 3.0.1 - client - - - - - - - - - audit - - - org.ow2.jonas - jonas-audit-core - ${project.version} - - - - - - - - validation - - - org.ow2.bundles - ow2-bundles-externals-slf4j-jcl - ${ow2-bundles.version} - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - org.ow2.jonas - jonas-validation-hibernate-core - ${project.version} - - - - - - - - resourcemonitor - - - org.ow2.jonas - jonas-resource-monitor-core - ${project.version} - - - - - - - wc - - - org.ow2.jonas - jonas-workcleaner-core - ${project.version} - - - - - - - irmi - - - org.ow2.carol.irmi - irmi - ${irmi.version} - - - - - - - sec-interceptors-iiop - - - org.ow2.jonas - jonas-sec-interceptors-iiop - ${project.version} - - - - - - - jotm - - - org.ow2.jotm - jotm-core - ${jotm.version} - - - - - - - trans-interceptors-iiop - - jotm - - - - org.ow2.jonas - jonas-trans-interceptors-iiop - ${project.version} - - - - - - - jtm - - jotm - - - - org.ow2.jotm - jotm-interceptor-jrmp - ${jotm.version} - - - org.ow2.jonas - jonas-tm-jotm-core - ${project.version} - - - - - - - db-base - - - org.ow2.jonas - jonas-db-base-core - ${project.version} - - - - - - - db-hsqldb - - - org.ow2.jonas - jonas-db-hsql-core - ${project.version} - - - - - - db-h2 - - - org.ow2.jonas - jonas-db-h2-core - ${project.version} - - - - - - - - dbm - - - org.ow2.jonas - jonas-dbm-core - ${project.version} - - - - - - - mail - - - org.ow2.jonas - jonas-mail-core - ${project.version} - - - - - - - wm - - - org.ow2.jonas - jonas-workmanager-core - ${project.version} - - - - - - - resource - - - org.ow2.jonas - jonas-resource-core - ${project.version} - - - - - - - jdbc-resource-adapters - - - org.ow2.jonas - jonas-jca-jdbc-cp - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-ds - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-dm - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-xa - ${project.version} - rar - - - - - - - ow2-util-common-impl - - - org.ow2.bundles - ow2-util-event-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-stream - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-pool-impl - ${ow2-bundles.version} - - - - - - - lib-ejb2-ha - - - org.ow2.jonas - jonas-ejb2.1-ha - ${project.version} - - - - - - - ha - - lib-ejb2-ha - - - - org.ow2.jonas - jonas-ejb-ha-core - ${project.version} - - - - - - - jgroups - - - org.ow2.bundles - ow2-bundles-externals-annotations - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-bundles-externals-jgroups - ${ow2-bundles.version} - - - - - - - cmi - - jgroups - ow2-util-common-impl - ow2-util-event-common-ejb - - - - org.ow2.bundles - ow2-util-component-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-component-impl - ${ow2-bundles.version} - - - org.ow2.cmi.osgi - cmi-all - ${cmi-osgi.version} - - - org.ow2.cmi.osgi - cmi-loader - ${cmi-osgi.version} - - - org.ow2.jonas - jonas-cmi-core - ${project.version} - - - - - - - versioning - - - org.ow2.jonas - jonas-versioning-core - ${project.version} - - - - - - - multitenant - - - org.ow2.jonas - jonas-libraries-tenant - ${project.version} - - - org.ow2.jonas - jonas-multitenant-core - ${project.version} - - - - - - - generators-base - - - org.ow2.jonas - eclipse-compiler - ${project.version} - - - org.ow2.jonas - jonas-generators-base - ${project.version} - - - - - - - ejb2 - - generators-base - lib-ejb2-ha - ow2-util-common-impl - ow2-util-event-common-ejb - - - - org.ow2.jonas - jonas-genic - ${project.version} - - - org.ow2.jonas - jonas-ejb-2.1-core - ${project.version} - - - - - - - ejb3 - - - org.ow2.jonas - jonas-ejb-easybeans-core - ${project.version} - - - - - - - easybeans-core - - ow2-util-common-impl - ow2-util-event-common-ejb - - - - org.ow2.easybeans.osgi - easybeans-component-quartz - ${easybeans.version} - - - org.apache.felix - org.apache.felix.dependencymanager - ${felix.dependencymanager.version} - - - org.ow2.bundles - ow2-util-marshalling - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-jmx-impl - ${ow2-bundles.version} - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - - - - - - - javassist - - - org.ow2.bundles - ow2-bundles-externals-javassist - ${ow2-bundles.version} - - - - - - - easybeans-persistence-hibernate3.6 - - javassist - - - - org.ow2.bundles - ow2-bundles-externals-slf4j-jcl - ${ow2-bundles.version} - server - - - org.ow2.easybeans.persistence - easybeans-persistence-hibernate-3.6 - ${easybeans-persistence-hibernate36.version} - server - - - - - - - easybeans-persistence-hibernate4.1 - - javassist - - - - org.ow2.bundles - ow2-bundles-externals-slf4j-jcl - ${ow2-bundles.version} - - - org.ow2.easybeans.persistence - easybeans-persistence-hibernate-4.1 - ${easybeans-persistence-hibernate41.version} - - - - - - - easybeans-persistence-eclipselink1.1 - - - org.ow2.easybeans.persistence - easybeans-persistence-eclipselink-1.1.x - ${easybeans-persistence-eclipselink11.version} - server - - - - - - - easybeans-persistence-eclipselink2.2 - - - org.ow2.easybeans.persistence - easybeans-persistence-eclipselink-2.2.x - ${easybeans-persistence-eclipselink22.version} - - - - - - - easybeans-persistence-eclipselink2.3 - - - org.ow2.easybeans.persistence - easybeans-persistence-eclipselink-2.3.x - ${easybeans-persistence-eclipselink23.version} - server - - - - - - - jsf-base - - - - - jsf-mojarra12 - - - org.ow2.jonas - jonas-jsf-mojarra-1.2-core - ${project.version} - server - - - - - - - jsf-mojarra20 - - - org.ow2.jonas - jonas-jsf-mojarra-2.0-core - ${project.version} - server - - - - - - - jsf-myfaces20 - - - org.ow2.jonas - jonas-jsf-myfaces-2.0-core - ${project.version} - server - - - - - - - web-base - - - org.osgi - org.osgi.compendium - ${osgi.compendium.version} - - - org.ow2.jonas - jonas-web-container-base-core - ${project.version} - - - - - - - web-tomcat6 - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - ${project.version} - - - - - - - web-tomcat7 - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - ${project.version} - - - - - - - web-jetty6 - - - org.mortbay.jetty - jetty-util - ${jetty.version} - server - - - org.mortbay.jetty - jetty - ${jetty.version} - server - - - org.ow2.jonas - jonas-web-container-jetty-6.1-core - ${project.version} - server - - - - - - - web-jetty8 - - - org.eclipse.jetty - jetty-util - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-io - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-http - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-continuation - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-server - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-security - ${jetty8.version} - server - - - - - org.eclipse.jetty - jetty-servlet - ${jetty8.version} - server - - - - - org.eclipse.jetty - jetty-xml - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-webapp - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-ajp - ${jetty8.version} - server - - - - org.glassfish.web - el-impl - 2.2.1-b05 - - - - org.eclipse.jdt.core.compiler - ecj - 3.5.1 - server - - - - org.ow2.jonas - jonas-web-container-jetty-8.0-core - ${project.version} - server - - - - - - - jaxws-base - - saaj-ri - audit - - - - org.ow2.bundles - ow2-util-annotation-processor - ${ow2-bundles.version} - - - - org.ow2.bundles - ow2-util-ee-builder-webservice - ${ow2-bundles.version} - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - org.ow2.jonas.osgi - neethi - ${project.version} - - - org.codehaus.woodstox - stax2-api - ${stax2-api.version} - - - org.codehaus.woodstox - woodstox-core-asl - ${woodstox.version} - - - - - - - jaxws-cxf - - - - org.apache.ws.xmlschema - xmlschema-core - 2.0.1 - - - - org.apache.xml - com.springsource.org.apache.xml.resolver - 1.2.0 - - - org.springframework - spring-asm - ${spring.version} - - - org.springframework - spring-core - ${spring.version} - - - org.aopalliance - com.springsource.org.aopalliance - 1.0.0 - - - org.springframework - spring-aop - ${spring.version} - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-expression - ${spring.version} - - - org.springframework - spring-context - ${spring.version} - - - org.apache.cxf - cxf-bundle - ${cxf.version} - - - org.ow2.jonas - jonas-webservices-cxf-core - ${project.version} - - - - - - - jaxws-axis2 - - - org.ow2.jonas - jonas-webservices-axis2-core - ${project.version} - server - - - - - - - jaxrpc-base - - saaj-ri - generators-base - - - - org.ow2.jonas.osgi - ws-security - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - ${project.version} - - - - - - - saaj-ri - - - org.ow2.jonas.osgi - saaj-ri - ${project.version} - - - - - - - xmlbeans - - - org.ow2.jonas.osgi - xmlbeans - ${project.version} - - - - - - - jaxrpc-axis - - xmlbeans - - - - org.ow2.jonas - jonas-generators-wsgen - ${project.version} - false - - - org.ow2.jonas - jonas-webservices-axis-core - ${project.version} - - - - - - - ear - - generators-base - - - - org.ow2.jonas - jonas-generators-clientstubs - ${project.version} - - - org.ow2.jonas - jonas-ear-core - ${project.version} - 2 - - - - - - - discovery-base - - - org.ow2.jonas - jonas-discovery-base-core - ${project.version} - - - - - - - discovery-multicast - - - org.ow2.jonas - jonas-discovery-multicast-core - ${project.version} - - - - - - - discovery-jgroups - - jgroups - - - - org.ow2.jonas - jonas-discovery-jgroups-core - ${project.version} - - - - - - - smartclient - - - org.ow2.jonas - jonas-smartclient-core - ${project.version} - - - - - - - ow2-util-event-common-ejb - - - org.ow2.bundles - ow2-util-ee-event - ${ow2-bundles.version} - - - - - - - wsdl-publisher - - - org.ow2.jonas - jonas-webservices-publish-core - ${project.version} - - - - - - - - joram-server - - - org.ow2.joram - a3-common - ${joram.version} - - - org.ow2.joram - a3-rt - ${joram.version} - - - org.objectweb.joram - jcup - ${joram.jcup.version} - - - org.ow2.joram - jndi-shared - ${joram.version} - - - org.ow2.joram - jndi-server - ${joram.version} - - - org.ow2.joram - joram-shared - ${joram.version} - - - org.ow2.joram - joram-mom-core - ${joram.version} - - - org.ow2.joram - a3-services - ${joram.version} - - - - - joram-client - deploy - - joram-server - - - - org.ow2.joram - jndi-client - ${joram.version} - - - org.ow2.joram - joram-client-jms - ${joram.version} - - - org.ow2.joram - joram-client-jca - ${joram.version} - - - org.ow2.joram - joram-jca-jonas - ${joram.version} - rar - server - - - org.ow2.jonas - jonas-audit-jms - ${project.version} - - - org.ow2.jonas - joram-admin - ${project.version} - jar - - - - - - - cdi - - javassist - - - - org.ow2.bundles - ow2-bundles-externals-weld - ${ow2-bundles.version} - - - org.ow2.jonas - jonas-cdi-weld-core - ${project.version} - - - - - - - jaxrs - - - org.ow2.spec.ee - ow2-jaxrs-1.1-spec - ${ow2.spec.version} - - - org.ow2.jonas - jaxrs-jersey-core - ${project.version} - - - - - - jndi - - - org.ow2.jonas - jonas-jndi-core - ${project.version} - - - - - - ssh - - - org.bouncycastle - bcprov-jdk16 - 1.46 - - - org.ow2.shelbie - shelbie-ssh-server - ${shelbie.version} - - - org.ow2.shelbie.commands - shelbie-ssh-commands - ${shelbie.version} - - - org.ow2.jonas - jonas-ssh-core - ${project.version} - - - - - - - - - - maven-jar-plugin - - - attach-assembly-component - compile - - jar - - - src/main/assembly - ${project.build.directory} - assembly-component - - common-component.xml - - - - - - - - - diff --git a/jonas/assemblies/profiles/src/main/assembly/common-component.xml b/jonas/assemblies/profiles/src/main/assembly/common-component.xml deleted file mode 100644 index d6ffc64532..0000000000 --- a/jonas/assemblies/profiles/src/main/assembly/common-component.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - target/configuration-resources - / - 774 - - META-INF/** - - - - - target/extra-configuration-resources - conf/ - - *.xml - *.properties - *.txt - *.sh.include - *.config - *.policy - *.access - *.passwords - *.cfg - *.conf - - - - - target/extra-binaries-resources - bin/ - - * - - 774 - - - - target/assemble-resources - / - - META-INF/** - - - - - ../../src/main/resources - / - 774 - - - - - - target/configuration-resources - templates/conf/ - - conf/** - - - - - - target/extra-newjb-resources - templates/newjb/ - - * - - - - - - target/ant/ - lib/common - - * - - - - - - target/extra-configuration-resources - templates/conf/conf/ - - *.xml - *.properties - *.txt - *.sh.include - *.config - *.policy - *.access - *.passwords - - - - - - - - - - - lib/bootstrap - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.jonas:jonas-commands - org.ow2.jonas:jonas-version - - - - - - - - lib/bootstrap/framework - ${artifact.artifactId}-${artifact.version}.${artifact.extension} - true - - org.apache.felix:org.apache.felix.framework - - - - - - lib/internal-ee-tld - javaee-tld.jar - true - - org.ow2.jonas.osgi:javaee-api:jar:tld - - - - - - - - lib/bootstrap/bundles-javaee-6.0 - ${artifact.artifactId}.${artifact.extension} - true - - org.ow2.spec.ee:ow2-ejb-3.1-spec - - - - - diff --git a/jonas/assemblies/profiles/src/main/resources/logs/README b/jonas/assemblies/profiles/src/main/resources/logs/README deleted file mode 100644 index 705c668510..0000000000 --- a/jonas/assemblies/profiles/src/main/resources/logs/README +++ /dev/null @@ -1,8 +0,0 @@ -If the output in trace.properties is set to automatic, -JOnAS will put in this directory the JOnAS logs. - -The name of the log file is : --.log -ie : jonas-2003-04-01.log - -If CATALINA_BASE = JONAS_BASE, catalina will put the logs file in this directory. diff --git a/jonas/clientbuild.xml b/jonas/clientbuild.xml deleted file mode 100644 index 03a35c8406..0000000000 --- a/jonas/clientbuild.xml +++ /dev/null @@ -1,408 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JONAS_BASE structure is not initialized properly. - Run ANT create_jonasbase before attempting to create a Win32 Service. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/eclipse-settings/checkstyle-convention.xml b/jonas/eclipse-settings/checkstyle-convention.xml deleted file mode 100644 index 24314732bf..0000000000 --- a/jonas/eclipse-settings/checkstyle-convention.xml +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/eclipse-settings/eclipse-java-code-formatter.xml b/jonas/eclipse-settings/eclipse-java-code-formatter.xml deleted file mode 100644 index 8d7be071a0..0000000000 --- a/jonas/eclipse-settings/eclipse-java-code-formatter.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/eclipse-settings/jonas-style-convention.xml b/jonas/eclipse-settings/jonas-style-convention.xml deleted file mode 100644 index 8d7be071a0..0000000000 --- a/jonas/eclipse-settings/jonas-style-convention.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/eclipse-settings/plugin-checkstyle-config.xml b/jonas/eclipse-settings/plugin-checkstyle-config.xml deleted file mode 100644 index c8e751d12c..0000000000 --- a/jonas/eclipse-settings/plugin-checkstyle-config.xml +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/itests/applications/classloader/pom.xml b/jonas/itests/applications/classloader/pom.xml deleted file mode 100644 index 377fee28f4..0000000000 --- a/jonas/itests/applications/classloader/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-classloader - bundle - JOnAS :: iTests :: Applications :: ClassLoader - Application which check context classloader at startup - - - - - org.apache.felix - maven-bundle-plugin - true - - - org.ow2.jonas.tests.applications.classloader - - <_plugin>org.apache.felix.ipojo.bnd.PojoizationPlugin;metadata=${basedir}/src/main/resources/metadata.xml;use-local-schemas=true - - - - - org.apache.felix - bnd-ipojo-plugin - ${ipojo-bnd-plugin.version} - - - - - - diff --git a/jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java b/jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java deleted file mode 100644 index d5267d2c16..0000000000 --- a/jonas/itests/applications/classloader/src/main/java/org/ow2/jonas/tests/applications/classloader/ClassLoaderChecker.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.classloader; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Component used to check that the Thread context classloader doesn't contain - * the client.jar - * @author Florent Benoit - */ -public class ClassLoaderChecker { - - /** - * Logger. - */ - private Logger log = Logger.getLogger(ClassLoaderChecker.class.getName()); - - /** - * - */ - public void start() throws IOException { - // Write result into a file in work directory - - String jBase = System.getProperty("jonas.base"); - log.log(Level.INFO, "JONAS_BASE set to '" + jBase + "'."); - - FileWriter writer = null; - File jFile = new File(jBase + File.separator - + "classloader-results.txt"); - writer = new FileWriter(jFile); - - try { - - // Get current CL - ClassLoader currentCL = Thread.currentThread() - .getContextClassLoader(); - - // Expect to miss the client.jar classes but not the bootstrap - // classes that should be available - try { - currentCL - .loadClass("org.ow2.jonas.deployablemonitor.DeployableMonitorService"); - // problem, write it to the file - writer.write("KO\n"); - } catch (ClassNotFoundException e) { - // Not found as expected - writer.write("OK\n"); - } - - // No test with a bootstrap class - try { - currentCL.loadClass("org.ow2.jonas.launcher.jonas.JOnAS"); - // ok, write it to the file - writer.write("OK\n"); - } catch (ClassNotFoundException e) { - // Not found as expected - writer.write("KO\n"); - } - } finally { - writer.write("\n"); - writer.flush(); - writer.close(); - - } - - } - -} diff --git a/jonas/itests/applications/classloader/src/main/resources/metadata.xml b/jonas/itests/applications/classloader/src/main/resources/metadata.xml deleted file mode 100644 index 6ab379282d..0000000000 --- a/jonas/itests/applications/classloader/src/main/resources/metadata.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/itests/applications/connection-leaks/pom.xml b/jonas/itests/applications/connection-leaks/pom.xml deleted file mode 100644 index 1cdf1be49a..0000000000 --- a/jonas/itests/applications/connection-leaks/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - JOnAS :: iTests :: Applications :: Connection Leaks - Application which make connection leaks - - - - org.apache.tomcat - servlet-api - provided - - - - - connection-leaks.war - - - org.apache.maven.plugins - maven-war-plugin - - ${basedir}/src/main/webapp/WEB-INF/web.xml - - - - - diff --git a/jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java b/jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java deleted file mode 100644 index 4f75112054..0000000000 --- a/jonas/itests/applications/connection-leaks/src/main/java/org/ow2/jonas/tests/applications/connectionsleaks/ConnectionLeakServlet.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.connectionsleaks; - -import java.io.IOException; -import java.io.PrintWriter; -import java.sql.SQLException; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.sql.DataSource; - -/** - * This class is getting a JDBC connection and forgot to close the SQL Connection - * @author Florent Benoit - */ -public class ConnectionLeakServlet extends HttpServlet { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = 1L; - - /** - * - */ - @Override - protected void doGet(final HttpServletRequest req, final HttpServletResponse response) throws ServletException, IOException { - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println("Connection Leak Servlet"); - - DataSource ds = null; - try { - ds = (DataSource) new InitialContext().lookup("jdbc_1"); - ds.getConnection(); - out.println("Example OK"); - } catch (NamingException e) { - out.println("Cannot lookup get jdbc_1"); - e.printStackTrace(); - } catch (SQLException e) { - out.println("Cannot get a Connection"); - e.printStackTrace(); - } finally { - out.println(""); - out.close(); - } - - } -} diff --git a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index a91d645b82..0000000000 --- a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - connection-leaks - - diff --git a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index f09a3e280d..0000000000 --- a/jonas/itests/applications/connection-leaks/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Make connection leaks - - ConnectionLeak - org.ow2.jonas.tests.applications.connectionsleaks.ConnectionLeakServlet - - - - ConnectionLeak - /ConnectionLeak - - - - - - ConnectionLeak - - - - diff --git a/jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml b/jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml deleted file mode 100644 index ccd04b8969..0000000000 --- a/jonas/itests/applications/jaxws-add/assemblies/ear/pom.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - assemblies - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Assemblies :: EAR - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean - ${project.version} - ejb - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-wsadd-webapp - ${project.version} - war - - - - wsadd - - - org.apache.maven.plugins - maven-ear-plugin - - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean-api - lib/addbean-api.jar - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-wsadd-webapp - /wsadd-sample - - - - - true - - - true - - - - - diff --git a/jonas/itests/applications/jaxws-add/assemblies/pom.xml b/jonas/itests/applications/jaxws-add/assemblies/pom.xml deleted file mode 100644 index f8b35c5af7..0000000000 --- a/jonas/itests/applications/jaxws-add/assemblies/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - org.ow2.jonas - jonas-itests-applications-jaxws-add - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add - assemblies - pom - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Assemblies - Assemblies of Example Project - - ear - - - - wsadd - - diff --git a/jonas/itests/applications/jaxws-add/modules/api/pom.xml b/jonas/itests/applications/jaxws-add/modules/api/pom.xml deleted file mode 100644 index 4529e1d620..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/api/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - modules - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean-api - jar - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Modules :: Api - - - addbean-api - - - diff --git a/jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java b/jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java deleted file mode 100644 index ad8bddb517..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/api/src/main/java/org/ow2/jonas/tests/applications/wsadd/api/IAddBean.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.tests.applications.wsadd.api; - -/** - * Add Bean interface. - * @author Helene Joanin - */ -public interface IAddBean { - - /** - * @return sum of two args - */ - int addFromBean(int op1, int op2); - -} diff --git a/jonas/itests/applications/jaxws-add/modules/beans/pom.xml b/jonas/itests/applications/jaxws-add/modules/beans/pom.xml deleted file mode 100644 index 1ee10cca99..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/beans/pom.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - modules - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean - ejb - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Modules :: Beans - - - org.ow2.spec.ee - ow2-javaee-5-spec - 1.0.3 - provided - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean-api - ${project.version} - - - - addbean - - - org.apache.maven.plugins - maven-ejb-plugin - - 3.0 - - - - - - - codehaus - Codehaus Release Repo - http://repository.codehaus.org - - - diff --git a/jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java b/jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java deleted file mode 100644 index 11f8d7d606..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/beans/src/main/java/org/ow2/jonas/tests/applications/wsadd/beans/AddBean.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 20010 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.wsadd.beans; - -import javax.ejb.Local; -import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import static javax.ejb.TransactionAttributeType.SUPPORTS; - -import org.ow2.jonas.tests.applications.wsadd.api.IAddBean; - - -/** - * Stateless Add. - * @author Helene Joanin - */ -@Stateless -@Local(IAddBean.class) -public class AddBean implements IAddBean { - - /** - * @return sum of the two args - */ - @TransactionAttribute(SUPPORTS) - public int addFromBean(int op1, int op2) { - return (op1 + op2); - } - -} diff --git a/jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml b/jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml deleted file mode 100644 index 4c8a66240a..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/beans/src/main/resources/META-INF/ejb-jar.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - diff --git a/jonas/itests/applications/jaxws-add/modules/pom.xml b/jonas/itests/applications/jaxws-add/modules/pom.xml deleted file mode 100644 index 32e24d0a2b..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - org.ow2.jonas - jonas-itests-applications-jaxws-add - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add - modules - pom - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Modules - - api - beans - webapp - - diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/pom.xml b/jonas/itests/applications/jaxws-add/modules/webapp/pom.xml deleted file mode 100644 index 38672e1e5f..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-wsadd-webapp - war - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Modules :: Webapp - - - - org.ow2.spec.ee - ow2-javaee-5-spec - 1.0.3 - provided - - - org.ow2.jonas.jonas-itests-applications-jaxws-add - module-addbean-api - ${project.version} - - - org.ow2.bundles - ow2-audit-report - provided - - - org.osgi - org.osgi.core - ${osgi.core.version} - provided - - - org.apache.httpcomponents - httpclient - 4.0-alpha4 - - - org.ow2.util - util-event-impl - ${ow2-util-plugin.version} - - - - - module-wsadd-webapp - - - org.apache.maven.plugins - maven-war-plugin - - ${basedir}/src/main/webapp/WEB-INF/web.xml - - - - - diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java deleted file mode 100644 index 85811a2398..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditEventServiceServlet.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: WebServicesAuditTestCase.java 22467 2012-05-31 14:22:14Z benebrice $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.wsadd.ws; - -import java.io.IOException; - -import javax.naming.InitialContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.InputStreamEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.auditreport.impl.GenericAuditReport; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.event.Event; -import org.ow2.util.event.api.EventPriority; -import org.ow2.util.event.api.IEvent; -import org.ow2.util.event.api.IEventListener; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.event.impl.EventDispatcher; -/** - * - * @author Brice Bene - * - */ -public class AuditEventServiceServlet extends HttpServlet implements IEventListener{ - private IEventService eventService; - private HttpServletRequest req; - private HttpServletResponse resp; - boolean ok = false; - GenericAuditReport report; - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - this.req = req; - this.resp = resp; - - try { - InitialContext ic = new InitialContext(); - BundleContext bc = (BundleContext) ic.lookup("java:comp/env/BundleContext"); - ServiceReference servRef = bc.getServiceReference(IEventService.class.getName()); - eventService = (IEventService) bc.getService(servRef); - register(); - sendEvent(); - } catch (Exception e) { - throw new IllegalStateException("Error on audit tests", e); - } finally { - unregister(); - } - - } - - public void register(){ - -// if(eventService.getDispatcher("JAXWS") == null) { -// EventDispatcher d= new EventDispatcher(); -// d.setNbWorkers(2); -// d.start(); -// eventService.registerDispatcher("JAXWS", d); -// } - eventService.registerListener(this, "JAXWS"); - } - - public void sendEvent(){ - //Call the webservice - try { - String serviceURL = req.getScheme() + "://" + req.getLocalAddr() + ":" + req.getServerPort() + "/wsadd-sample/WSAddService"; - - // Trigger the report generation - DefaultHttpClient client = new DefaultHttpClient(); - HttpPost post = new HttpPost(serviceURL); - InputStreamEntity entity = new InputStreamEntity(getClass().getResourceAsStream("/soap-request-add.xml"), -1); - entity.setContentType("application/soap+xml"); - post.setEntity(entity); - client.execute(post); - - // Wait for some times before failing the tests - // That let some times for the report to be generated - // wait up to 10 seconds (20 * 500ms) - int i = 0; - int times = 20; - int sleepTime = 500; - while ((report == null) && (i < times)) { - Thread.sleep(sleepTime); - i++; - } - - // Fail if the report was not generated - if (!ok) { - resp.getWriter().println("Report was not generated after " + ((i * sleepTime) / 1000) + " seconds"); - } - } catch (Exception e) { - throw new IllegalStateException("Error send JAXWS event on test", e); - } - - } - - - - public void unregister() { - eventService.unregisterListener(this); - } - - public boolean accept(IEvent event) { - return true; - } - - public EventPriority getPriority() { - return EventPriority.ASYNC_HIGH; - } - - public void handle(IEvent event) { - report = (GenericAuditReport) ((Event) event).getReport(); - ok = true; - } - -} diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java deleted file mode 100644 index 203b991f1d..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/AuditPropagationServlet.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.tests.applications.wsadd.ws; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.impl.CurrentInvocationID; - -/** - * A {@code AuditPropagationServlet} is ... - * - * @author Guillaume Sauthier - */ -public class AuditPropagationServlet extends HttpServlet { - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - - // The Audit ID should be installed in the ThreadLocal now ... - IAuditID id = CurrentInvocationID.getInstance().getAuditID(); - String result = "null"; - if (id != null) { - result = id.getID(); - } - - // Print back the result - resp.getWriter().println(result); - } -} diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java deleted file mode 100644 index 4865c2c446..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/IWSAdd.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tests.applications.wsadd.ws; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.xml.ws.RequestWrapper; - -@WebService(name = "WSAdd", targetNamespace = "http://wsadd.applis.tests.jonas.ow2.org/") -public interface IWSAdd { - - @WebMethod(operationName = "add") - @RequestWrapper(localName = "addRequest") - public int add(@WebParam(name = "op1") int op1, @WebParam(name = "op2") int op2); - - public boolean checkEnvEntry(); - public boolean checkEjb(); - public boolean checkResource(); - -} diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java deleted file mode 100644 index 0d8fc5e2ef..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/java/org/ow2/jonas/tests/applications/wsadd/ws/WSAdd.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 20010 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tests.applications.wsadd.ws; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.naming.InitialContext; -import javax.xml.ws.RequestWrapper; - -import org.ow2.jonas.tests.applications.wsadd.api.IAddBean; - - -@WebService(name="WSAdd",targetNamespace="http://wsadd.applis.tests.jonas.ow2.org/") -public class WSAdd implements IWSAdd { - - @WebMethod(operationName = "add") - @RequestWrapper(localName = "addRequest") - public int add(@WebParam(name = "op1") int op1, @WebParam(name = "op2") int op2) { - return op1 + op2; - } - - public boolean checkEnvEntry() { - try { - InitialContext ic = new InitialContext(); - String envValue = (String) ic.lookup("java:comp/env/location"); - return ("echirolles".equals(envValue)); - } catch (javax.naming.NamingException e) { - e.printStackTrace(); - return false; - } - - } - - @EJB - private IAddBean addBean; - public boolean checkEjb() { - int op1 = 10; - int op2 = 12; - int res = addBean.addFromBean(op1, op2); - return (res == (op1 + op2)); - } - - @Resource(mappedName="CF") - private ConnectionFactory cf; - public boolean checkResource() { - try { - Connection con = cf.createConnection(); - con.close(); - return true; - } catch (javax.jms.JMSException e) { - e.printStackTrace(); - return false; - } - } - -} diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml deleted file mode 100644 index b90b8dbffa..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/resources/soap-request-add.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - 1 - 1 - - - diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 3630a9b861..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - /wsadd-sample - diff --git a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 39d69f98d5..0000000000 --- a/jonas/itests/applications/jaxws-add/modules/webapp/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - This is an env entry - location - java.lang.String - echirolles - - - - InvocationIdPropagationChecker - org.ow2.jonas.tests.applications.wsadd.ws.AuditPropagationServlet - - - - AuditEventServiceChecker - org.ow2.jonas.tests.applications.wsadd.ws.AuditEventServiceServlet - - - - InvocationIdPropagationChecker - /PropagationChecker - - - - AuditEventServiceChecker - /AuditEventServiceChecker - - - diff --git a/jonas/itests/applications/jaxws-add/pom.xml b/jonas/itests/applications/jaxws-add/pom.xml deleted file mode 100644 index 50697ed9de..0000000000 --- a/jonas/itests/applications/jaxws-add/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-jaxws-add - pom - JOnAS :: iTests :: Applications :: JAX-WS Add sample :: Modules - - modules - assemblies - - diff --git a/jonas/itests/applications/jaxws-sample/pom.xml b/jonas/itests/applications/jaxws-sample/pom.xml deleted file mode 100644 index 4765af0df6..0000000000 --- a/jonas/itests/applications/jaxws-sample/pom.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - JOnAS :: iTests :: Applications :: JAX-WS sample - JAX-WS sample from the JOnAS JAX-WS tutorial - - - ${project.build.directory}/jonas-full-${project.version} - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - - - - maven-antrun-plugin - - - generate-jaxws-sample - generate-resources - - - - - - - - - - - - - - run - - - - - - maven-ear-plugin - - - - ${project.version} - - - - - - - diff --git a/jonas/itests/applications/jndi/pom.xml b/jonas/itests/applications/jndi/pom.xml deleted file mode 100644 index 724d074bcb..0000000000 --- a/jonas/itests/applications/jndi/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - jonas-itests-applications - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-itests-applications-jndi - ejb - JOnAS :: iTests :: Applications :: JNDI - - - org.ow2.spec.ee - ow2-ejb-3.1-spec - ${ow2.spec.version} - - - - jndi-bean - - - org.apache.maven.plugins - maven-ejb-plugin - - 3.0 - - - - - - - diff --git a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java b/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java deleted file mode 100644 index 073eaea7fd..0000000000 --- a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/Jndi.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 20012 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tests.applications.jndi.ejb3; - -import javax.ejb.Remote; - -/** - * Sample EJB remote interface to test the JNDI service - */ -@Remote -public interface Jndi { - - /** - * @param key The JNDI entry - * @return the associated key - */ - Object getValue(final String key); -} diff --git a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java b/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java deleted file mode 100644 index 77f59c635a..0000000000 --- a/jonas/itests/applications/jndi/src/main/java/org/ow2/jonas/tests/applications/jndi/ejb3/JndiBean.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 20012 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tests.applications.jndi.ejb3; - -import javax.ejb.Stateless; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Sample EJB to test the JNDI service - * @author Jeremy Cazaux - */ -@Stateless(mappedName = "ejb/test/jndi") -public class JndiBean implements Jndi { - - /** - * Logger. - */ - public static Logger log = Logger.getLogger(JndiBean.class.getName()); - - /** - * Default constructor - */ - public JndiBean() { - } - - /** - * {@inheritDoc} - */ - public Object getValue(final String key) { - - //create a new InitialContex - InitialContext initialContext = null; - try { - initialContext = new InitialContext(); - } catch (NamingException e) { - log.log(Level.SEVERE,"Cannot create a new InitialContext", e); - } - - //lookup of the JNDI entry - Object value; - try { - value = initialContext.lookup(key); - } catch (NamingException e) { - log.log(Level.SEVERE, "Cannot lookup the context " + key, e); - return null; - } - return value; - } -} \ No newline at end of file diff --git a/jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml b/jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml deleted file mode 100644 index dc4752835f..0000000000 --- a/jonas/itests/applications/jndi/src/main/resources/META-INF/ejb-jar.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - JndiBean - - - \ No newline at end of file diff --git a/jonas/itests/applications/jsf/jsf-1.x/pom.xml b/jonas/itests/applications/jsf/jsf-1.x/pom.xml deleted file mode 100644 index d37e7d6349..0000000000 --- a/jonas/itests/applications/jsf/jsf-1.x/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications-jsf - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jjonas-itests-applications-jsf-1.x - war - JOnAS :: iTests :: Applications :: JSF : 1.x - Application which is usign JSF 1.2.x - - - jsf-applications-itests-1.2 - - diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml b/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml deleted file mode 100644 index 873392cb75..0000000000 --- a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/faces-config.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 50cd2d9f01..0000000000 --- a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - Faces Servlet - javax.faces.webapp.FacesServlet - 1 - - - - - Faces Servlet - *.jsf - - - - diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp b/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp deleted file mode 100644 index 821c0cff3f..0000000000 --- a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/hello.jsp +++ /dev/null @@ -1,35 +0,0 @@ - - -<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> -<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> - - - - - - - diff --git a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp b/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp deleted file mode 100644 index c3ead18b68..0000000000 --- a/jonas/itests/applications/jsf/jsf-1.x/src/main/webapp/index.jsp +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/jonas/itests/applications/jsf/jsf-2.0/pom.xml b/jonas/itests/applications/jsf/jsf-2.0/pom.xml deleted file mode 100644 index b88a68c14d..0000000000 --- a/jonas/itests/applications/jsf/jsf-2.0/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications-jsf - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-itests-applications-jsf-2.0 - war - JOnAS :: iTests :: Applications :: JSF : 2.0 - Application which is usign JSF 2.0 - - - - org.ow2.spec.ee - ow2-jsf-2.0-spec - ${ow2.spec.version} - provided - - - - - jsf-applications-itests-2.0 - - diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java b/jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java deleted file mode 100644 index e4b30527ae..0000000000 --- a/jonas/itests/applications/jsf/jsf-2.0/src/main/java/org/ow2/jonas/itests/applications/jsf2/HelloNameBean.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.applications.jsf2; - -import javax.faces.bean.ManagedBean; -import javax.faces.bean.ManagedProperty; -import javax.faces.bean.SessionScoped; - -import java.io.Serializable; - - -/** - * Bean with name attribute. - * @author Florent Benoit - */ -@ManagedBean -@SessionScoped -public class HelloNameBean implements Serializable { - - private static final long serialVersionUID = 123456789L; - - //@ManagedProperty(value="Florent") - private String name; - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - -} diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index b86872467f..0000000000 --- a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - JSF 2.0 itests example - - - - javax.faces.PROJECT_STAGE - SystemTest - - - - - helloworld.xhtml - - - - - Faces Servlet - javax.faces.webapp.FacesServlet - 1 - - - - - Faces Servlet - *.jsf - - - Faces Servlet - *.xhtml - - - diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml b/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml deleted file mode 100644 index 94cf453971..0000000000 --- a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/helloworld.xhtml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - JSF 2.0 Hello World - - -

JSF 2.0 Hello World Example : Input

- - - - -
- - diff --git a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml b/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml deleted file mode 100644 index fd661e1777..0000000000 --- a/jonas/itests/applications/jsf/jsf-2.0/src/main/webapp/welcome.xhtml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - JSF 2.0 Hello World ! - - -

JSF 2.0 Hello World Action Page

-

Welcome to #{helloNameBean.name} !

-
- diff --git a/jonas/itests/applications/jsf/pom.xml b/jonas/itests/applications/jsf/pom.xml deleted file mode 100644 index 0389eaa24c..0000000000 --- a/jonas/itests/applications/jsf/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-jsf - pom - JOnAS :: iTests :: Applications :: JSF - JSF examples - - - jsf-1.x - jsf-2.0 - - - diff --git a/jonas/itests/applications/multitenant/pom.xml b/jonas/itests/applications/multitenant/pom.xml deleted file mode 100644 index 6c42c0777b..0000000000 --- a/jonas/itests/applications/multitenant/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - jonas-itests-applications - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-itests-applications-multitenant - JOnAS :: iTests :: Applications :: Multitenant - - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml deleted file mode 100644 index ee503200ee..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - org.ow2.jonas - test-multitenant - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-earT1 - ear - - - - ${pom.groupId} - ${parent.artifactId}-ejb - ${version} - ejb - - - ${pom.groupId} - ${parent.artifactId}-war - ${version} - war - - - - - - - maven-ear-plugin - - ${parent.artifactId}-T1 - ${parent.artifactId}-T1 - ${parent.artifactId}-T1 - ${basedir}/.. - ${basedir}/src/main/resources - META-INF/jonas-application.xml - 5 - - - ${pom.groupId} - - ${parent.artifactId}-war - - - /${parent.artifactId} - - - ${parent.artifactId}.war - - - - ${pom.groupId} - - ${parent.artifactId}-ejb - - - ${parent.artifactId}.jar - - - - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml deleted file mode 100644 index 3a8f551a7e..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT1/src/main/resources/META-INF/jonas-application.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - T1 - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml deleted file mode 100644 index 1c926feccb..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - org.ow2.jonas - test-multitenant - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-earT2 - ear - - - - ${pom.groupId} - ${parent.artifactId}-ejb - ${version} - ejb - - - ${pom.groupId} - ${parent.artifactId}-war - ${version} - war - - - - - - - maven-ear-plugin - - ${parent.artifactId}-T2 - ${parent.artifactId}-T2 - ${parent.artifactId}-T2 - ${basedir}/.. - ${basedir}/src/main/resources - META-INF/jonas-application.xml - 5 - - - ${pom.groupId} - - ${parent.artifactId}-war - - - /${parent.artifactId} - - - ${parent.artifactId}.war - - - - ${pom.groupId} - - ${parent.artifactId}-ejb - - - ${parent.artifactId}.jar - - - - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml deleted file mode 100644 index 4cbbb893ab..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/earT2/src/main/resources/META-INF/jonas-application.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - T2 - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml deleted file mode 100644 index 663388d3cc..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - org.ow2.jonas - test-multitenant - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-ejb - jar - - - - org.ow2.spec.ee - ow2-jpa-2.0-spec - 1.0.11 - - - - - - - - maven-ejb-plugin - - 3.0 - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java deleted file mode 100644 index 6934d4f3be..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Author.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant; - -import static org.ow2.jonas.test.mutlitenant.Author.QN.ALL_AUTHORS; -import static org.ow2.jonas.test.mutlitenant.Author.QN.FIND_AUTHOR; - -import java.io.Serializable; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; - -/** - * Author of a book. - * @author Mohammed Boukada - */ -@Entity -@NamedQueries({@NamedQuery(name=ALL_AUTHORS, query="select o FROM Author o"), - @NamedQuery(name=FIND_AUTHOR, query="select o FROM Author o WHERE o.name = :MYNAME")}) -public class Author implements Serializable { - /** - * Store Query names. - */ - public static interface QN { - /** - * Search all authors. - */ - String ALL_AUTHORS = "Author.allAuthors"; - - /** - * Search a named author. - */ - String FIND_AUTHOR = "Author.findAuthor"; - } - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 0L; - - /** - * Primary key (will be auto generated). - */ - private long id; - - /** - * Name of the author. - */ - private String name = null; - - /** - * Default constructor. - */ - public Author() { - } - - /** - * Constructor with a given author name. - * @param name - the name of the author - */ - public Author(final String name) { - this(); - setName(name); - } - - /** - * @return name of the author - */ - public String getName() { - return name; - } - - /** - * Sets the name of the author. - * @param name - the name of this author - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return an id for this object (incremented automatically) - */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - public long getId() { - return this.id; - } - - /** - * Sets the id of this author object. - * @param id the given id of this author - */ - public void setId(final long id) { - this.id = id; - } - - - /** - * @return String representation of this entity object. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(this.getClass().getName()); - sb.append("[id="); - sb.append(getId()); - sb.append(", name="); - sb.append(getName()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java deleted file mode 100644 index ae479403b3..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/Hello.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant; - -import javax.ejb.Stateless; -import javax.ejb.Remote; - -/** - * @author Mohammed boukada - */ -@Stateless -@Remote(org.ow2.jonas.test.mutlitenant.HelloMBean.class) -public class Hello implements org.ow2.jonas.test.mutlitenant.HelloMBean { - - private String helloWord; - - public int add(int x, int y) { - return x + y; - } - - public String getHelloWord() { - return helloWord; - } - - public void sayHello() { - System.out.println(helloWord); - } - - public void setHelloWord(String value) { - helloWord = value; - } -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java deleted file mode 100644 index e75722c847..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/HelloMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant; - -import javax.ejb.Remote; - -/** - * @author Mohammed Boukada - */ -@Remote -public interface HelloMBean { - public void sayHello(); - - public int add(int x, int y); - - public String getHelloWord(); - - public void setHelloWord(String value); -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java deleted file mode 100755 index c9b4c3a609..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/Initializer.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.test.mutlitenant.init; - -/** - * The {@link Initializer} Bean initialize the entities data. - * @author Guillaume Sauthier - */ -public interface Initializer { - - /** - * Initialize the minimal set of entities needed by the sample. - */ - void initializeEntities(); - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java deleted file mode 100755 index 6e51365b97..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/init/InitializerBean.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.init; - -import org.ow2.jonas.test.mutlitenant.Author; -import org.ow2.jonas.test.mutlitenant.reader.LocalReader; -import org.ow2.jonas.test.mutlitenant.writer.LocalWriter; - -import javax.annotation.security.RunAs; -import javax.ejb.EJB; -import javax.ejb.Remote; -import javax.ejb.Stateless; - -/** - * The {@link InitializerBean} EJB is here to initialize only once - * the Database/Entities. It simply checks if there is some {@link Author}s - * already persisted; if none are found, we will inject defaults values. - * @author Guillaume Sauthier - */ -@Stateless(mappedName="myInitializerBean") -@Remote(Initializer.class) -@RunAs("earsample") -public class InitializerBean implements Initializer { - - /** - * Injected reference to the {@link org.ow2.jonas.test.mutlitenant.writer.Writer} EJB. - */ - @EJB - private LocalWriter writer; - - /** - * Injected reference to the {@link org.ow2.jonas.test.mutlitenant.reader.Reader} EJB. - */ - @EJB - private LocalReader reader; - - /** - * Initialize the minimal set of entities needed by the sample. - * @see org.ow2.jonas.test.mutlitenant.init.Initializer#initializeEntities() - */ - public void initializeEntities() { - - if (reader.findAuthor("Honore de Balzac") == null) { - // Balzac was not persited, add it now. - Author balzac = new Author("Honore de Balzac"); - // Persists the Author and all of his books - writer.addAuthor(balzac); - } - - if (reader.findAuthor("Victor Hugo") == null) { - // Hugo was not persited, add it now. - Author hugo = new Author("Victor Hugo"); - // Store - writer.addAuthor(hugo); - } - } - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java deleted file mode 100755 index 50ff294ce9..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/LocalReader.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.reader; - -import org.ow2.jonas.test.mutlitenant.reader.Reader; - -/** - * {@link javax.ejb.Local} interface. - * @author Guillaume Sauthier - */ -public interface LocalReader extends Reader { - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java deleted file mode 100755 index 01f82b29a9..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/Reader.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.reader; - -import org.ow2.jonas.test.mutlitenant.Author; - -import java.util.List; - -/** - * The {@link Reader} business interface is an un-restricted - * read only view on the entities. - * @author Guillaume Sauthier - */ -public interface Reader { - - /** - * @return the list of all the persisted {@link Author}s. - */ - List listAllAuthors(); - - /** - * Find a given {@link Author} using it's name as a key. - * @param name {@link Author}'s name. - * @return the first {@link Author} that matches the given name. - */ - Author findAuthor(final String name); -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java deleted file mode 100755 index 241d8d04b1..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/ReaderBean.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.reader; - -import org.ow2.jonas.test.mutlitenant.Author; - -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; -import java.util.List; - -import static org.ow2.jonas.test.mutlitenant.Author.QN.ALL_AUTHORS; -import static org.ow2.jonas.test.mutlitenant.Author.QN.FIND_AUTHOR; - -/** - *The {@link ReaderBean} EJB is an unrestricted, read-only, Stateless Bean. - * @author Guillaume Sauthier - */ -@Stateless(mappedName="myReaderBean") -@Local(LocalReader.class) -@Remote(RemoteReader.class) -public class ReaderBean implements LocalReader, RemoteReader { - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * Find a given {@link Author} using it's name as a key. - * @param name {@link Author}'s name. - * @return the first {@link Author} that matches the given name. - */ - @SuppressWarnings("unchecked") - public Author findAuthor(final String name) { - Query query = entityManager.createNamedQuery(FIND_AUTHOR); - query.setParameter("MYNAME", name); - List authors = query.getResultList(); - if (authors != null && authors.size() > 0) { - return authors.get(0); - } - return null; - } - - /** - * @return the list of all the persisted {@link Author}s. - */ - @SuppressWarnings("unchecked") - public List listAllAuthors() { - return entityManager.createNamedQuery(ALL_AUTHORS).getResultList(); - } - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java deleted file mode 100755 index 1f38cbe435..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/reader/RemoteReader.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.reader; - -import org.ow2.jonas.test.mutlitenant.reader.Reader; - -/** - * {@link javax.ejb.Remote} interface. - * @author Guillaume Sauthier - */ -public interface RemoteReader extends Reader { - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java deleted file mode 100755 index a01dbd0158..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/LocalWriter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.writer; - -/** - * {@link javax.ejb.Local} interface. - * @author Guillaume Sauthier - */ -public interface LocalWriter extends Writer { - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java deleted file mode 100755 index 9827f42174..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/RemoteWriter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.writer; - -/** - * {@link javax.ejb.Remote} interface. - * @author Guillaume Sauthier - */ -public interface RemoteWriter extends Writer { - -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java deleted file mode 100755 index 7748572386..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/Writer.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.writer; - -import org.ow2.jonas.test.mutlitenant.Author; - - -/** - * Remote interface for the bean Writer. - * @author JOnAS team - */ -public interface Writer { - - /** - * Persists a new {@link Author}. - * @param author {@link Author} to add. - */ - void addAuthor(final Author author); - - /** - * Cascade remove an {@link Author}. - * @param author {@link Author} to be removed. - */ - void removeAuthor(final Author author); -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java deleted file mode 100755 index 9f3c2cc2a0..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/java/org/ow2/jonas/test/multitenant/writer/WriterBean.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.test.mutlitenant.writer; - -import org.ow2.jonas.test.mutlitenant.Author; - -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -/** - * This is an example of Session Bean, stateless, secured, available - * with a Local and a Remote interface (with the same methods). - * @author JOnAS team - */ -@Stateless(mappedName="myWriterBean") -@Remote(RemoteWriter.class) -@Local(LocalWriter.class) -@DeclareRoles("earsample") -@RolesAllowed("earsample") -public class WriterBean implements LocalWriter, RemoteWriter { - - /** - * Entity manager used by this bean. - */ - @PersistenceContext - private EntityManager entityManager = null; - - /** - * Persists a new {@link Author}. - * @param author {@link Author} to add. - */ - public void addAuthor(final Author author) { - entityManager.persist(author); - } - - /** - * Cascade remove an {@link Author}. - * @param author {@link Author} to be removed. - */ - public void removeAuthor(final Author author) { - entityManager.remove(author); - } -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 4cac256742..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/ejb/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - jdbc_1 - - - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml deleted file mode 100644 index c05b49738a..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/pom.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - org.ow2.jonas - test-multitenant - 1.0.0 - 4.0.0 - pom - - - install - - - maven-compiler-plugin - - 1.5 - 1.5 - - - - - - - ejb - war - earT1 - earT2 - - - - - javax.servlet - servlet-api - 2.5 - provided - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - 1.0-M1 - provided - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/test-multitenant-T1.ear deleted file mode 100644 index 3da4db12d10be1bcaa2a44baa6ae6dd654d52042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98698 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≠AbrQA#>dn!Pjo+ftq^|R z%5vN97$rF)cF{qUDQ;ioS+Qof>BxSA)jG|X(~g*KW0&IDs&Ixl5@LBJ>O1{SLGn!d zS{yD+hZ-^2rdze%x!uspE5`D!q7|=HH99X(SAU%q>RXUT^UWKa*7r2hUK5S-_8&=~ zQ)6ISnesYS6U`!oT<<+y{+a7qGH3g}syXzt$+@>`n4J7> zBzO(Lfbc3HgiHp}+RedA%0#wLv{GT55FI~3iiM(hmo*5<+Cp`)$mTTVTH`E=z~JW7 zNsVsXk;aP)ahFyFAF#~@UtitQT>CY3qz=w8L@Q8|kU*qm2zaO3C~Uys0(tu;k3i~- z*0@EI3w;M(Eobmq+8Ziw)A|FN(@*kV?l>qC4k&ja4T4kv9=&jObKtScIga!-n9S!| z&*m~GD-1jf{&nNy=8rD>_cuNyf5p{b zspDS;KYlf({&CICj~VrYkuk*}>iSZPtGI|VIx0kPbVa~oaiN?vALYL)=L&VX{sUvP z({Guew^x@B*NB_oF!;9|$JV8=rVzWj5y!#ZBZt~v#uHVN-V#2WkP$m+*YpYfutSM^ z#uBOE18qs!p0OMUJ@ERJ4o`25%LQ55!FeCax9-7rTMAEgW)~hu-3lk9V0Ru34r0p= zTPTzwnhty{T1m4cG5uwjlSb2Lr{OZ=WyhMq{rl|e7c@n<8NX5uV9j1h9W-3L<>@P; zmB!-EKE&N~`P5TsHfC|9t3UA_O_5l8yzKc+>y4gyhf(eV!CG2XOiy{&DND9)ZY}0X z3>C-T{M)L^20aP+b1sYz2~T(7n7$CR$G|073=UJ?BvCuSi%PZT? zTgY%CXsa{oBE0ZuuCtfA4y7)Pc z7Yk+>dNh-5E{cSwgj8EguAMUSee!*OLN&R*B*#VUKQ81fzuM{RYCh`wT-nKylg_&i z&{w;zmmg0^LT_Swm1;42*z79OG#se|q$^>EtQyQ>mCvi<4jrQd!8`ZRDg)jB3H_KC0h{?soOm!se^-(ZVpVbj#P6gyigjFHw|G4E{#d^Yw?53NBp+mIeXfe86%6ly}XvrYt{bP zv70!yz5J1uPvevB!(!K!Zd0Rn?s{e+6pGy>ECHCK&F}>&HKby3f09}mNfdqB8_|e- z#5(u?kF$4-?|W;yhtt@$Z99!^+qR8{jqNm6W7}$M+iJ|lP0~C`dYw!6xzGLl&zpYI zm%p|4clONewPpyts-n?3gg1eNp;aLS8NcNGWUhcY4o8o*6*ZJg;vsN@6lRV{w``Ir zf*ZC2s%4Z#6HboXF!1&EZK+G=;XgRwJ*C_Wa2*{<1u<(9X1Dv1Ns18t03yLu0xFY@ zLqzQ#Lg+7#alnreF{H;u><@86CG5v@s;PKrIBN#_h|ZLn!$TTjSoKxcHAX0gKA2(m zaF!7D61~(R!LLx*h-CkF11{E%hF$gbn415kiVX8lkLtg)3f!`<#b=N%n19zIMZut zUeR03x8Gbek{;9_=PPBx2Gu?fh-QA;raoO-JUTnw?ijeRj$DD*gbgC1e!3^|LZehL z!tucAH?OghI#ZF>yf__~KJhO2h^h@9@-5d#jBdJ1El=Q*Ifa(|4p236X$9^83S7w36<#J_ZDUy=?Nc<_P-{Dz zP=J?{07sX;+doALZ3iyTZ<5}Czr5=4{uk&3-;n#S;-*+r)pD++@U^-j_prY_5zh@(c*THR;|$Hke9kZPWkx?g{iaCJr`#^lA?-CN!vz(q@~lI*GM_p9jD@bT!! z?kPOF8_f{J#OTHFb93i*OSkTMvMUNGWMVph+O53Q$R#LBiNSH+L42l<8Bpl`vUlPy zGFmIf1D}|`ubPvo4NpzD1D~mJL$jv{l{IVEeXhv%x$=w zs&1|ePaqsSD=9g_jbTlY9BRXV4Zq{CBGRwEl#zH_c{2%jAS%2Na>8E{tbewZ$+4fw zX?spr2_RE-s5kbl#UIAcz`)R)ViXt_Hd+ISBWdC+WLtSW>u%)%FYv7~ZH!(zpxwY0G-W|*PH%H|)xw1fATGR963_fwQc z%U<{og)~4gkTTAsS8R2vElwB4>@JG8oqhN|*gBdP3^Ds?^WhJeM!hKRasWU^>|vmQ z!-lPD>BR^_gnQaLDw}jqa|6F-Cq+{5Ibn0}Ga{PWp=c;yVMqPTyXwzh`u`33KbJI9 z(Dwre-*<;k`qA^F@kYRt$}r7X^%Fu|_Ds)FB{<<6e$0K55Fr%#x>fsnS)J9(%gwHl z?yt@`X6|$C-`*ZKM(YBU8lI6)^mE#TL#zh2U46e5ooP zLxh;xmHLgl<4935ssG1DMFt%ubGADN`U;|v(@WZ(HXU^694luX`y*?1+{(LUnloEX znlI}`aV3|jTYj`DVHMv`QO3Gl+u9xU@qd&}Rnxc*{J{B!fk>4(w?}vfMscX?%0;%Q zhu)cIT3#i1ptq6p5LZyUug*U~R`4cnc3y$`mhZS&vS3*WhwtLwQaCCz(fD8}Iym~Q zQccLt91$uRJ5v?(33}$``&`U`7Yv&n6Eo4E89EASICRg2a6UA{%Bfp!yAC^>@K@)q zQ(xkw@vM;~OXt?_onGm>W#7k?TXK7xIupm*u7jc@=S)fyUA#Ci_IHC}4)zK$(YsX{=;Qkys`sfnOq)UjtM_ z3RLiN0$KRcsoEuxXL`@3ESlg7_~d@SOI^I!5PXFB0u!}Jo7jpccx8IR=RLM^9JJ8z zzn)0(zr2?Iyf-RgYi{!&t|IwA3}Ia$a;t3HeqDW`rm`aaA@)#FxYx5$Am-E8n^JJG zx>uWE_wxM~S|Vh`xF#(}bD!!v+B@3-yLe`)7i;uZKI4F5^nnd#FPmlFJcO*om1cUC z1Lb&tK~n}xJfvD~m7==16SDx}yZCBD%emjX?T(mb(~^oi#3ITfU>u5E(Msosq^iay zJn`pVV)*C28I16uA*U{4eU^-E<3fkQNu>Bemn!8hm!kpUq66(E3OnSol<%Ylpyxlv zP8;|(5+e6TYr<5@V2b7!4H60e0nd6rD-*j-;6I^e;H%`JiPyl%|C8S z`S!O~_b=>e&|zKQ&=2zH@BIb%yxgLEa^NHx8>bR2j<-g)7Yit^Z?J&Y#~6~&-(1Oj zcwKpZ3nTku!8UsQf(8BN6^`P7$7yNFdYZL{@AUZHb08&2b2b?i_h@H~Eo^{4(y6DA z&8nt?c*CHmCdzHHQ${LNv=<9Vv#eppzeao$NWb`c_w4)>kRNE^1}PJRHFxezxE2ya zi*EJ!r1hfuPxKx8#gG1WgUu^tVIhT;l=IiWa=1)2NT^6Xrj8Z4&;z-Sbw6!3-q-KA zeJt#SOlM^+W}8HUx4XBxfCE?U5)P*VJ9WOU8fqSyLv>t*z!m^oQC|FJ<1D<`^Xol) z`}D-lLB73t|BcSz8?^snoP4hV+kqA-$pN>KLJtJ=4R@9kw-89~!Ijv`g7(4$3lyyj zg}lcC@is*h)T;7$_L*PBEnrFdHA6Ft)`i`f6(1{*jTK9Y^be42raR}v{KAyr@>lx zqfuL~Uw(PeCF0knT{4Qqym^E+d`pRJ6Uw$B1f6Ahit--$}cJE?Wp_SsB zN=RC*kUrrrpbHhiiqv^322MK`h_uGTP6fpA2D<-H*l8_FclkZ`te#^x-5o#fAa%jW zkVKJyB9Z|bo-w9q@5mR}89np*mWGt*bgyWo~~ z@~4+t$ox{tu2m_}Z!LA9WvC-Qz8VWdKa+`n(s!9Cxg-{EhFwv{a7VQtNS)#xjAv?D zr6;fbGT_N54LtsNn_EX-`8c&Y&Ok>+ugWtmhj^97>-jj zY;!!$P`lUL$u|S)Cu$`1(H}G-fpUqd>$Xo_%Ea{0Z8CQ6vL7qBi1@(K7;x z@hJjt5Z$nilBkQF!Z7_(5QD#;0)wF65^)-^SKwnaDSq;rBHUc#6i~U!!ZFMkx#g5q z{gcVpp9)kRoRbECRuhmZgv#t!X?>$2A`~VHfNiD*pSX3!@*A0&l?d8n$5B9<*k;0h za4vgC6*>+vUprT5(<3-OV3UX|Y7U*u)DhxeKOO0u23zD8&w)q<5xvCH798mC*{ZPB zX*v3cmZHpMK$eTGlD$ZDDI~85QI%9bnV3eG*pwD_t{L}r-`vg_7tfJ)~wTM)VD{Zt}@bZu6s zU_C#)+%oQQ?G&`HUJr$If-KWg6(tG?_=U3tzTXhdMsGbp-c9?0;erX>5MGad9DfiW zxY9TCDr2UZO0@*knHfIH>4dVgwlEQE_Qqj9T>+(DC;ItVI-|K?1?>O|J!fLH`s1($ zP>2`lqckoPhu)8-A^v#5h&3HnGzY}3F60XSF6Lqg0~ZcWc%E(t$YU@CKojs&E>`{r zeWB4OW3_t=Ro>nu*{TcyBakFVklKI>7tB4oi~;kefSD(}9tmE))QqdFE^jCC<^b|z z95(lHKqG3z2F?e5PW^>PI(SL1xEtUf4A@%i!n7?-c1ukMd$|MS!gOdhp-^yWUW{nZ zTF^}^?*3XZDWN?!4^-xs;jqr)RymRsOBx3%61S)xiE*=^MJa}8uBk}aXkZYhma80~ zw+<%c3eD5ATWwOqzceuUqfit05zoi;AhmUo-kO1GwQcKRO*?=hR1w~({jXb){Yji&&a&qomoBt)$zNRAkYUs58>96)Qo zDt{EWn8@vS8@nhEfgB0~*A>RLDGl%1PsD~$F*|lMdegkYfjd#z$?Fa17SiHJQHB~b zfa5=0vRX0ZpqgZXThB!uloA70v37oe@8os9c8msX6~8qdbRO7!D>QHh=g#`X__%*} zxK1D#^{E?$4ElSy;A8yS!HQ00^$hoJl$(HUTE%{tbC6U0y#Aoo{bRbm$H>k7t=;5z z{*|-aX6#!W#`>Yu+m;jrFq=U+<;|V`*a&3EGmbX?AJNvXUC%jg?k5*S{OUtC9Y1}* z4>_kcQ2dT>lz4eJ_08_?jXY@diXx)x;Q(K1p$kYQqqw0TeqF^kNz;Z}fKq*X*0Q_G z-QK06xo!$+fOeeInC4}0dDh>&NTOn*BhA5&j@k>VolF>qk6MnoU(C3>WEXqw0)eS^Sg z27k=3XJ#s5F>2_S8RsM%ufd!+omZzUi_c9m{V_I^VpwNgJts+7VO$eqQDFK-@)wKpB6lTl zy;EDLoB|0)f_@53B6tZNSz5&_O1qx08ttsuNfz6@yi0Bza81i)Ue77zU!K!HPyD6z zZQPY?-~RoNgoeAPCwCiYgFMV$-{>u&5eOy42c-(F!8}5-98Re7kJWYDdQ1E@aS@3i z!pB!R_E$OYRuA9(c1*i4yU-_C?C@fi7i&^Ql5fTCo9d-#`YCkpT_Ii%lX)UkiKbV_QGK1eOQBMe5< zK9tgk?us?@`pYWO;^F}-;4Ga^&ycWnTozt(;xv_v34l|tKD2k`)EwJqQ7ISyY``lo zjMc)|Jg>fkWm%oHc4xN7j9NiYO6UwQhZ8}?@QBx;bKuoBb)O~37v-K%rgsT6)5ujtG}Z{1F-oeKFtkPEd#l%UT0|Q%cyL-A!CT4 zw^i?b_|-qiYxYFk(QJLxt8XO+wwrn9-nl?Z8*dW}kqPYJPuf{8ED4*iT;+I zQt-6_M}pGNs6$S+hMR!?6Ph#U2Nc1+c$%dAvj=(Mnd)+im|~Zu6R5dvb}LFu&G2Ba z$Gz_%cF$QjOC6O8&gE-EA7!VY%$d*~N=_bB6QRZ_bv}{sz>%6Nhr%p}I7a=7T@|5( z_Mmnuxnuj~yo9v)+*%TA?DyTiUE(SQ(7SoH7j=gl`*MfyTb8ydB}t4xs;#1@B&Z#F za{nm2SycdARP%=z($^@FBTNm$;!N$>jslCM)`yt|hF#9oKE?OBDwO7NMWkOK0O!Q} z{mcBBfpPBfN@UsJ81f;lZzpN|Pfymn3pQxudnu&1Z|;V_2tP>0Ai?;RIv^h z&6rq{Rb$>7;=}K`l{?I&+kU-0XX7Vr6H>Qp?^cinb{D&Y?9)xLYy%@Hz|)a+GukiH zbJL@%q0)&dYv6S@k>X`_lnh=TiOmgw@I|t5T#;tk%wJ)2Y0u1^l{Wzk`EAO=4%Lk< zO3cSh0Zn~G1~)!q4LgY>6)JyG*k8Rgs2!g{j<4Rb;HR#5&~alsV`4$~AmZUnEB2)p z#AcXz7X6WIhElF}04xi)HF*at1Gzn>EtgsxVT{nsdyZmOkrr9#7`B*p75ThC>IBlN zx~;qy4Uf`*r#xGw`g(tNSB`47Ty(0>XT?Iq< ziuUy1=!pJC`#&1Ytuj4)@WSVqWI-2@dAWQ-$Oz18vr6FD2na|<&@glTn8H}r^GWSd z7nSlCA3Tu_(m&@_2~{(F&2ZemdA@o8*~H|A(}okpjRMh-ES5w((AJ9DccAd185`}K zsUd%>l+9Dfn3YmvZOCgyOH`UmQ&HGMB@E|2uPfygq`tCIUPs9i*mWqv{qW_&@U>EQ zIKA5Q%r@um?^hOquJ6J3PF}rA?~$iB*|1d+Hd60JumpXX($Vny?h27GsrlX6GuWPHZj}5KDHyl+IcA4r}Kg}!aD~`#k zD|-N}i)C%_^UrWQ-yYpJXz{RTXCVJiXZN4i3;%%j-@8k3V{e+{KwEzFC$K&r1R+DC zo!)w?ukfMSpi_Yr!)|?X(-@{7g?_u5iW{>(2lVzyt(<2%er(LRi(X&@U=PrSYM>d^ ztm@GdxMXD%J4d6WS>I~dEiu=%)GgXW@Sm+#sMynJIzq;CCuafDgNI9WgB?O$qgxfG zh*uK`RQM4@{EH(JGBACqUc;{*ktiq@=+6=zCJ+O?+8q zbQJi{maeUKn2NPY*DB&sLgnx494@jR#b5;xpqBM==2QKej0!)p!+rTpisXN3RvoX} z<`!fc;?PRlK3uls_OeoHpL>XHyVa}lwsMiE7HgGFCS#qK!P8PC4$E&zpV6RB>;nC zV_g`i9)eicE?m+}$HP>L1Y;-fsfK*iy zhEXP#N;;jv;N75Bsj8q2&;o-3XYcw-4K($rq*spb{xV>Z{{_$gQ)T(vz#qE~WW+a{?B{VtQaoJ>k;y2ljRYLH<7GZSB+!CTN*fYVm4``%XBw51cWrHu zjCa{O{~W8}J7ksEiCLClQm!W}TwtE?MV6F|-d9KS1L9>-kv`BNu_!YC_5~c#;4 z=P_7D=0NR}&aiAB;CJDbZ+21ywpT_JGX^luAN;VhP<{!=q78oSl8^lg`0X1d*#i4u zPJnX*%PlKazdu7czn37H@{zUOyH zB)B0uR$QMLHMXHx%WL_1@Nv&|cjBO;@JQIN4s0#=pC0w3NV8+Y28+>sd z`E3pYqSnTZVFij@R3$%P<^D@QHGf%CJbku^C55aL)OU(QQ0|L=C0(N4VQ0Q zBoL_%sb8wk$V^XSmHISumMgkY%hWJ!hodag7?(4#%CG-f2Vi$_B>qd}H^S@~&@j25 zA2jI2yOc1KaY0PLlcj+i5A&{k0FKQ3Mxm*@5i?L~k|^4K0AK_tt1)#tFVe$zlUjMb zzZ_GGNWi^4eUAPOx4?fh`_IT%J5tv!Z}BMn@jO#VRQWw5jq~rK{-}S zRsyvYx4+r#6^BF3o9r3qGFeX>81;Vf^#0J)?-yJU%nkPlSYJF#0+Ft(1?yqRk%;Fl z6EA?0BqiWYenpnbZ8E%S+#)p=$+yEoMF!!VV6wF3BVex#gTNjpVW=!|ULq$b-PmuW zqLG*)u<2&AYiTah@nm^logOh*({uR4JDY;Ua7SH6sw9~IX|i)4=HpuSKy$qo3WBWy z!F-*noDO4o90pSR!70aCkYCr*QQC#bSl{X|JE_$Ky>wqGV8cLs1$y=`@2fvoll%r+$=KS?)7;Ah5 zjY{5v<5Ue@@@nX%sMmQ8EOSoAQU>|Tp+g{1syMG{-)KB92wmJ#1og<>@o`512*x9e zAl1d!v>_H*9_$Ch+jb8Xu{Hq|2Ga|;U7jgQT8x9BXxAz73-z0G2JdsKN%e4<0>`lO zE^+Iu8w5~5Kp1bVCxmVUyUE=mzxm;oMWc-!vv7uSCd>fV2C7>BHOjXxI@ue<1_6B& zaIf$V{UyZzYm~AxHu{%x`M=-v%S&%`QMlY!G=M2(y=)DkzV#hpcN* zYDzroaI;luspprbgV+?%ef_XimMP5+PDw`a_=5j+6tf+XULq5Bx;3Ziwgk_%`uaQ) zP0I1fl{8>{`PQD%6bF25S>l-g1|lG+7qn!K@57;joBzffhgV!3#sBN#ecQS7AuJR(q8Df?JknH_^lfrZw#Q}NZ1wBK zoA$4;Ka(61Op5EmbKA~V%k+EHJ*FrvtQL050r;$n!anh2a}zeru7rn1>R{TEQp$ly zwwI-pRlaid;Y{ghJ&G@%A?m)l7*M|YGWG~DR)-dfgI~P4O_|1Y{P3*Sj7Szl`Y&?= zpAU2~=0ZuW8DDlf3P>=p%8(2cyiUMe<9T?!=&wajTECZ2sH58VrmpiQ1gn+WjS0E_ zbi;!l=;*S~al1m4U`k}5AwD;i@tZGLH0sEXadlA9@L}?ly_kR7@&NRDbmex+#?@K; zMll%b*WbrL>4tTIdd+FK!zKkD-xmzTyF^Fhyn;OPmq7pdFen*)YhxoB zeJ67lV|iy|2lGD`3K806x@v3^~>#5f*HP-f=!JQQ_> z+xBRk`=Tf9@ohXtoqOXna!^#lG8=NsUFDTM^e z5w90b^urSS9)Jf@9@ei)Xj{)&_Ac!xGfsCSQy0L>aHyv(7z8dH5~H*5@)sFJsO3xP=IQ`Yk4`xsnpon zNQR6+VN5u&Ne$XjGGRQgNqtybVFhwOPg8D_qIRVt2nabes--ycU=Bp{fm7z=`d;xy z%=}`xl7xOojGAeQgRy}ll7uM)tky4986TFXxG2iFigfD(`kY%0*E9Tt5;awe`9Qk@ zCogY4vX)wq93pcOhiAOqHq_K?@kuJJJ;{MWCGE%K)APIO{HT+qF@IoYxBTP0D2U^0 zH0~#l2OuLRPmme_LtRdf15;PuwRMM5`jAyqf-ZQd9^#cibRuLd<7Iz_2qs#_G`&wX z&?L#-%qG+EdZ>=)Z{$_4l&_e+66g9iOs4PT{pV*P_g+k=!@vezNF2a#s|!u)yc>>^}RLjINqawSqm8N8@HD~qRVe^3n^T2vCd)0y8 z6f=S#(NwXKU)!L7;eyxT`o*oqJSX)V$b!G^|A9S$H&C1Eg9;BDV*&(5h zox0CIE(rFx{+?x>Zdc<37g6(-uRH`_VJRddSy$ysy9YuOZH$zfknZP!E5!cXa*XjI zVrb2CbY2!F&X=60i*ht>uF&H{yh{?IoaP2k+$av0fZAb-<4tS898yz3?@TUn-;J~Aqkm%h&pxfTY&Sh}d*B#> zH$WI(h{z6*9~xSg7bC(~2O{X=u};bvxGZBk)9*VRA$8nhaW@V!v&!9hYIkbQI1p zz#AVhaGJlCwdZsQT>MLG(zK!$gzWkz6r6V7rd7REEv8DMjTednNFKTBM@b>L*h0?S z7{aw%fsJpPTXFRf!s;H1_k?i_k6-AFjon23G^wwv03>M|l%~&FS zU#?1MVdYDj9Uq(3GfcHM8)DK$Q5Ynt$fYMx#sfk`j;CtQk7sY(E@8Iwplj@VL|lDg z+iwo1Ik)dgK%o(tX{MEcn7Eodui&n5`zKNUg@A;&4(CtGF|mV)E<7 zl%qB?VCe(22YYnt1Q&z--Kq$L66k%Knk@sQ$m z)is*K$w#xrmyv_8sK|u~N1o?sSsB)2AHWw*b9HAV%%%#IpM$(5ozBQXn$7Je&?ekB zdY|keU0vqUuXQIo z>l?(hP~?p%AuCV%MDaWcAtS=g0ezo zi318o9oVPHzqh13xV7`jzOsb(mn_l$FD%(8+nC!s8~-n4jYtT*lJ%0<$ZnpRpE#K< zo~$jEiX4RWPS(RbYr{@cbcWhraIBe&KG|m&0~~~3PQG${(DvgHXD0L`(GeU2#Im;>Nc(E$ zz#g!%$fDs)RRf49qmGH#f?`BSVL!Hz{4nE#BEK|zsF^o}L};K^7F3Nr61ZidLO4J4#KscgiES3iS$UClq<#pD#WGibP09aYdk3`5 zcqlqO9?$2pxZBu(7%%w!7q4fD$9x-F^4TzccCaJQ{c@%M#=)dA4yu6OH#mQ?V$9ha z-8`}wYUDKWTfgEZtWLC#O7`5i`qdSKx0VVw(K`ZwE0MUZ)A^ii4lB5k+#w=h*v#>~ z0p>nw7}3M!9@TX5&Pk%$3LflZN@F#2N5*Xm}> zHkBtMsU%g83o}`n6wSG2sW*4kJZ{?aMg`W_lFA{m#!Y8%t?M8BKbVl zDPc4j`somH&WJA8#CEB>j5OvU?J*elbJww1obNkgd;_f3sjYbaF)7p^l^6KEM=o|I0 z@9OwDF${EZ@qFhC0s%$U zW#n-jAc2Ka>xVpNiBjQcpXc|x06BJ9>M95XSDyX#{@k^opLY5-4-@n+9aevC5|@1q zz}Bz-F*kgZPW%te#K@awBIspkOgfcW+DuThJ6}s;8vp`JjhPZLr<@O^*bJh|DP8`E zwVGF3oIV3*+mhFMd*2&8M@ zQ6@MR;p&3il$^2Jb(1BAKddYFNcBdC=eI5$hFy)Q(}$o_*NAT+WSX5=Xjz>`d*}+Q zw=^&5IZdusp3Fx;J!cCmYlb#I)2eMU zdYpbk9}=@j+grrH>Bw7$JQB1}QAeTr7A^kExzCnr z=E1JO!@5K`Rs^z5(cep!hF2Acl;!)wHEHzw`2Qt%7Zh*J#D| zm->l6H>Jor7#TYVxc_I%MU$r_1TqW^PGsBf;O(sgh9u56S)tuc<47!tT65Ya^p9c1 zsp!W!p}`r^Ugu*cqu$=_J^)SKvEe{y!L%O%>+5GRAe_eOM4+0JGLuZsq^)yDpER<) z4FB13se5a=V48{xy|rA@iRltnZD<|ayX<2yN|Ubh6j)}Iki|e`eqG0O`l1aR$t100 zB>wKX*r@d8{al1QC-w4v)H{e?bRALt@NYdAvmPNfw>G$7!>s*56x;Q%IHi24@WDq6 zrEF!Tv{6*#OBESOEaaIx;PbI9#VuZVWj{)b^f`{wJUfi#?a6Pfm?y2+r}SE0L4sxm zY;2zvCn~{d>VB`Ibzk)@!+nhqV}Ij`_8sc~6si9f-@X|z2cly@qvyeXSw(g%ISnZ#I=|i z1D{%_YRDb)+!)9XzzFeE{r9Hx&4Hl?Tzn#6#~wUSWl`hFnLI+#%gvsKfVoNDSCnu8 z`1>*&dHdoTK`g3)u&Vl%^WqwHN*hDF;ER3=E#azn%_0b@0t-B-g#$wfumcy(dLwHI zE6qdel_-P1k+R9@JG@q`PJhf?G#;Ol0OUso-Fzu(F3$f9;YXLvM!VLqEe#JY-+cxZ zF`|#IZfa~2;ZaZP0e~m*(GouesE2p-;hy8MXMxQZ?3&1l=o&nB@1lfNstHS0XZ}dL zFR1WH;#iiO>yIemXLU%hJBePf*kAV!3rFt9%hn6c?G^ z=lo=2bw)JSOyg)D6WdajeS#ESZ-iy@W=9U*Gy%%iLXrX$l8BP~kj9g?OF!%J%h18) zm&a6K0hqaBHgIQVfFUa8XpAk5J(`sH$)v}}qs_hK#&-&WEW5y5m5IStw8S&0`)v`GAM!~pr9h4xD#z{vxIL8AGc=>vX}6=e{zJn zAO8F$u3kJu5&>P~7KtDSfZ5#(@L`m15MZ~Oz6#JB6_gc!2%=Yuk0k;>69DWzpEs6V zBFcRIIjaDF^@G{|&ma76e=9qgTZvoS{o~0cUu8{J(-{4w{nQ+8vZw!kF{lL&o(;VU zHuiAYE2K*#p9&f@?YW=ID>M1ii^SE)N9WooJ7G=>F2&E{ghadaLmblYM ztqoqLKr~$YL41!sil`^KXlGaqoUCCswmx>EppXsNclta7wZ4$B9l-Txlhryn$fh*S ze&B@6-aLXT9;^Py!PS!heVhd{1Fm9NvRn@h32e&Sx)j7B492pAl$uDlS@ilb zH8WNWq)CCxCjFb!X*KRsW4fB5==mTZDTvSL?)q)=TTn46ZUyj|OF^Dk$sC6rUQ)bl z_C_Go`@547H5m67ex}*kmCyRV^Kc=@m6|Ml)F3{N{n4Yq-RfFhrF)x7gYl}sNi+M< zMr1E1uaH55)!>*F&$208j2()ggS2^B+;9F-PpHe76=HTT7PAIMvJr=_O=Okz6eNYb zGz76|)|!!-!4wN2IP++3Ro)Q+3FDw-PJdl3IRa|PN&xph3!#zz zR#bKw!NL-EpP>RcN)fvFsJi@46@_%=aO)b4G0SYOOkZ*k5_|DB28?Eva$i%B>1BG@ zK1-XgBBqQWni<8CGz?M*-fiMTInU0V^#v`out=&n zR^(-qZ=DRraaqUFlX@YsDaw12CXd35#6JX#QF1M=tt^Z{MnL28Ca%qX$NFNbu3B9n z_Zdg?ETw#LocG+qB@y#i=cmoMx$!lTv#0bxt~FFWWJcyp9?K`!~FYFxef z3#uyZi)zO4d5)rbE?%@ATW7SVT9>3-O6|&}Gbo&$CmdwO^nj(17vJiDkaviTXF&Ts z@LE$8JWn40PY*cH0C`83xM!%lr?9oI;s%Vx6X^a0jm|e$_UJS>oQ)lrCtu;!Zq0iH z$@?LQ!BRERb{nn;(jrf5I3LbIH@2M?q%khbT`wpX1~bggevK)SmGSSys1Atxj)+$r zp)(v1BIHO;%@&2S-Rch%=iAR99{1$+E+%orUO&)fjp|w%F>aZvb;f%l8j!wxwN5E= zYBcsoMEH=;je{s0)LYx+P^)9EEs_ZJAvz+23=Kh+l<=I1keY9~GdxzT@Ki_1;VF>y zWjJla?T*aWr;yEO@~E>4&L=*9<=`76=)tJ`R(FgYXW4ChU<0%$uEeq+_Z6-^yMuVA12#+{M+qQF=Ac_=bS;&lZmye`wG@zp1s5_Ty8%B~Cmx(b#hwLF z6vG_l!5%|)$;rFLiEiNaKJ`t#i6vu+GHLhtEFR(I6T3VU}fDGGi-NdT8$0ym|jf@m&7q*!gQq%KMt~+-h@4M!^UpqcNUT|FmPYglKCI(_#Ipnxe zI|y7QTMRI!EL^z$K`G?WH|ffPv|$`K2@FE?l>w-^Y7yNLhS71nXnjZwyVc0SAe>Qv znGrqw@-P)a3dkeU$R3nYS8DQMnNiyq-@9rVJb^YMau6oW-FSjzJSBS?4cUD$VCc;5 zqk_&M`S4?_sSly|BMszHK{Uwn6q&;->KuMVSne@N2Db67^bYPSnH*hHF4bB->>+3k%NfWn!VsBYzWL*?hyWM;Jxw|68BQPBk@-}{hHN8`yNKr zJSK}>trd0sgv0XUb4Ym%Qt7pF6fRSA$$7P0OSmBN^1;0(`6di3gip8Wqs?>V9N(wd zKYh}-{NPEaA!q{ZVUruxTM9j<;jzCy0M1_1Tu{cJJ`7kW?K;!g5Ox?rh2#G*2sycQ zxKn{#aMKO^Wo({z21KoXN7>$CcUYtRcR4=lu2O?4j4ACM`^xFUinOyOR zF+tnG!C_Wus!^%xmP!}`yI&7bx1XN>-2AL^a#dI70kh*v*WD$MMG=g`=4JzKWctL= zXA6d2?eddn5~gzyPF{;IWgOhjhHwfV0AVO=bxyAGN0K7^Sv1Y-k2MyqE$XvN6HbD6 z^>@b|Dn2v^{vMQmc-x{D_tkvbCA@xFn}w7>bR-wbRfX%^@(tDHWU?t|26~Jn7w8Zo z@^A(F!)FMkKS`swWoa}k<bL+iZXztMgPUTR-sJ@_>cmIj_iWzNvnqr@t(vxe=8AKrw;@M4XG($ z0nrV|7ToC+{Rq%sT@z085!y@rXZ0hD8_^<{^TBN!<<`D^We^+EJ&X5Oi3d&E+gXu3 z;S8N*_xgGD^~MWMm@i0fnu!m0YR2~~2F^Z%pk)`AV1AlxEB)eMn+DgUH>0c*mCF+q z`FYnH+n)tb;x%IjxNhSuB{9=VKN23g$Qn)}Fr`b|u1bk-zfN4@zV><3H9Q<&(w)3^ zAPk?<=1`BT;FPC^M=pk6`{8Hx9_ct0PoH&t=Yw#WFM*T!@M2F^a+ua^D<=Xgq?bMw4Y zwmO2jpecfJ1;`gzTgn(60cxOPVdFE%K<#rQXO} zx9m+?hmvNo#-^YaDlAMwToy$FoNv!gyGw>L-bmkLXr{ecP{%KS1`Wyq!FVtdpI@VtF1UxO`97D7`9Y)2hb zTQv7@eAl4cIhff=d(F?GfkYP`$v~g}b>~%rsvyqzM^+d&6xHIiew!#Jsj(ijy|qf1 z=$hf^T8mmKA6PQ_0UspROy804HO;o^_OX!_N|g)R%x|CEQ1LF0Ze_WGeYV`6u;?}o z+YS=95ehmn(25KL0zXO}%ERdo&_`Ep5?e0|$%DdGE#l>nWLNX?U(T-hqZ>Y`6iZ&t zO_`wXJk9MW$ysGF@=Hi%hyfP0N$MPR$Do%E@3`5<42-Wk;MSG}b_BtqZaJbMoMLGT z8{NdeTx%_fP4j~Sp6xrYj%Z#$ei<%p%huTxXcCjtHGr>VYGZ55ZZ&TJK|sF0Kq^l* zpuZXZKxgI#A@{){Tre63?Ku1M)x+M8^16D3X2E~`cA)T7WfyjTs}P(1}+rF zxVU^tmsVi!v3K*uIAN1W=$Bxb!ovOZL#dx{6QTgVR8{s=z<&B@gl-mh7t7C>)_QnJ zz(!5mDx%0C;8KZR_C3E2MYTIg*mE~CA05EIh%B%~CLk3P&WtnbNVFdSN3{vk7%b8w z2FFrJ{(Q-2(7radlJyFtR-u$J1O_|JNFrO3XG!bWwDc$ECn=ulf>RD0YN&AB z^q)Fs-E0OiHf{=`JnK-Zbu`eVd^e0)LA|`R(D9twN=k%`yGf#FqF3%DP>pwTAGyX&*(9r*>ohlN^A0Pwe1lgL61pf?4Eno#H1ixJ+G|5;t%1#4Gpq9}K zTsGw`u=G*ewhlicCP13k>VW`cg(oT|DC2!Mi#S)W>zg%r>n|G@wEsWp{Fl!)@of&I z9=x}Xh8YEpl~wNJmTUnkd<@(pFaZ&CJPB}w@b-400+kDeF@Z^(m|NQF&3fynv*zQQ{mM#SfCRZPf!>DC18#)+!rh7>l+3h@j7i82ChkHqBA<^< z5r05ekC$plR?cxgo}vmixSL^Pk@XRcU@Z}CI7pY?|M=0)Uwz8&iA!R)oVurTDz(#76+DQbcWLO*uFCrZblszYe)?dk&Ky%vi*SehBK3eGFX63%`z zrC$qdtwJ>CNoJpvHQe=GGtj`q$eMK4H@Ra)g^y>+rld1Jl!c6fP1X-zxpS%lpQI-IFsnw`)^wrOwT^9-E;a`|g z2g5hI-vpA8YP8Cf1e`wj`W8+#$dl1JxI3+2_U-o*mSS-(-=COM?Y6-S>&Hr--WS10 z|MKU8_*_r~I3vJnVo-!jh9eak7d_P7~EOwfVwrW4S@PT~On;{eLc zK8eY(98icFNz~j{mK8eJU0+||#dUzLPFI>yF zk!ZBe2r&X7v!9J_Pc^NdJfi!<(mSnvS`bH-T+v82^WCtE;^RCh`Bi0Ms-N%iV6sQf^V4h%O79S-0w>Es`$2)R zklDW@^I;+knoyW9D=3oC1y6`$9Zl3-M)Z;b73*vAQyT>NL%Iw9lvZU0FprdT)l2ka z<16*WyfXjko9R!EyKfHQ^JLxV%&u4;TO(G|!mZqe4yj!D#o-GL=a)zo6iexW<7Q9ikEf2m}P!`C=KFwvxrs_5CJu zN^Z;^&mpw~frB`M+=E(qmcFw>Vrpt~4qwWW7i*ODc6^9mgRqZVRHV4+71*I~q>uZ$ z(hg6-^`X@2ZGn8qTyQEk3X!2DI z3kh8<%u^+SALBxBD4n}=(lU1#2$gPMlj<~nvHv;f&#R%aDGUSN^%B~Wrzswuj2*@U1A}%hz-ANdCf|sOaJ$`Tj9E1LORLE`h(TohrIoPe**-KPWo5 z(WHEQo0bO)fW5{%VrPNxH(|y1I@nP#BSV{fmy=cxj6}-WfKsq*g7w}+zTohZBDx)d zCnLewfK97=5?4HnmQh|?!3DX8j47v&LBGEy7MbOMc(DM3vp_i%NR&~}YYWF<=f>x7 z$e7Qcy`Ne?qT=$-GzD!ueN z&oaBehGuo>I%!{j0K0ywUj-PRpq-$bVA4UNh%ATY?MBeyP$BGKwVveZ9d(JfE?9=^ zlS_=KWM4saA=KYkqAfP)mJMoI51}F3@}T6KVo#}xK*KZO^XyWgvhAVM*Miz1j~oq# z*HP~8VQmG>2O+X=V~6m0mcc4UfIdhUW?mRNcvE#*LdvJ-PwXBHhTV4N6a_mk5%|-XNV{w=?pI!}~YL+%r#_@d- zH=ejW*A7|6-0;o2v4uwc8f^sU0oQ3_bw)G2xDN`#F&$tcF&L?3pZ5E*_w;WG%34BC zaTyzHj)(Mn3-Q&Nh-P+xfiem8#9F;LOuT9{P;2L^!?9GxK#zlaKlq?y9qF_!(!yHb zzAgGS64_Kd1NqbjM613xYYkOMmTBJ*IRw z+q*yKluU0Unh`{vKEHG-~kp2^d$BW7CH|U zW)dc{y5LfVzy#wK@wEYbEDX;~S{g|M%ft}so4W+C}BE4QX`mWWe;iuS6=3NkYjA|l&IXLL2 z90E20F)Ox06-_sPvU#GoVc`ZM!5|TG4(JA~)oE59Vq{2c_Mr}v*=RTAarBg(o}K&2 z?Gbhz^#CldLY4=6?j004okr}2KgZSsikTfZeA@ly1Tffj!p3mk9$4nF zzeN-C`U2c;`N3)W+A7_4{fFQ)-^^xrcPS~2yL%_ZE<%lp3 z+@{zZZ)JopqIT4;o_TX_l--#x{gxE2+|rdD)EnLA{Z!}@^*~G#)A#R@@ zqwB?gk$Je|)jO-&{1AcGz^=X2N-Uj?diq*<_|7fB3X=6=GiOOXK9$H&n$8Aw%2p{- zhu5EwZTh<>OqXdC%W5B=dS)N105y}}*Eco~10sR<-nwa~3`jk61`tF-8229m#}j!X;}KwLI{P z%_H-b%>zEM`&_ku@-x`Nvk$7CF#_5?9^O75B11BSdsZepQbv45L8jRIpD91}^G#;v z{QC)Im--QE0^@@lF~92-6$-_&4@i+d8I0`ZjE<|m-%w-j6CV^k6HRW;GgQM+kPLD#(9HA? zSZDsEuyT4C<`9D(K+?1AyF^l@n zd2~tR)XCUTmMhWnubsOv>Rm%&&{5Rs-Gu?9Welaw>~-FN(>cgGaS$)-_iM`D7EWXy zot5&Z5{c*UsceiB6BOcNnyxq!4}|C2eps#0N{>A!k{KWF7_YlS60#oAKvhIFW<%|k zr8pqT?yO)^1I1D)Ijj$x2}%$W6?#wVKP@l{L%W3axm%|}Tl{M31lyLKAnn5x(xOc% zZo%WR)}vslg@TEK!=jZ5IdL#>&J-VYNnlt%KE4-B98c^(qnIkD1;{mm-ChJ&M31$f zKF5z8Qm(JX(YNo01?mO}`+KAUQ~6OL?a&a*BB%Rw`gI6@OtA=42}wz1!AS?_&d_&D zJw=wS`>%&3%M4Q%)Jxb7zoe~!a!){axY@!+(o&IuFcM)Q`bXp{lYzD0d9Xj4q#exjAS-6C@`CgNMWhkVsKaSJDN%vTPXzfD_l|61#;?Ciy@bbjAE8|!%8 z;saavEVB5fS}KGh!*RL4xe&cB3SCNhc+ex)2unyPF=$ykuXM2vd@H?KlF>qeE=;G> znn;tbb&3N}W|L!`VO=mz_zlNB(a6n;0*MVt%QthbT*Zk83t zo@N!rw_3*luXu%G(ldx;<}Re`U1q~%ZA@DH6;*AsHrnJ>6lk5G%_7bk0@Z;-CvU|k zUDxM`pgJNoX!(IDem3+T-{_)EN>y9U1U}{7iPIe4lf0GBY&qh_A-A#3>X@2l#h zOTlVAM~PHz(?xR#>MnqEkFr8r4tnN=_TDzhp!sY~PhX(%`3F-?ui*XWQ2(?ADZljl z*_Mg*7x;qxW~tubgL#FINNw?V_`I(w)_I7c6Sau$cDF8$vDz8K2w@4s2wZ?xh_zxt zS3ZaVwM+*j$YO{GD$%!00}-q2WF=00g*4Rt{(_(b!z!p(way4h@rwNSHSa+O*4)qd z;wHcLZ>RFw?GXct%B=qDjj4?1qd))V4J$QZkU3s2m_2c@L5FoQ>Tv^XJ%PiF3V zxv1Qm{U|w4fd=1`!?p%Opd?e7xvCO*v|jQMGw7O{ipS%n{WFij$nC{Zau6LfjiVXj zPA=GA)8YND+sx-L_yqlf)tFZVWeqH>9Dg4h9)Bad1V4L5S>(Ah#z4S@=NG~=B+3D+ zLCjTvpb&p!yL60YLHM2R61^W0Qml5Yaqagr;5{N=wg7wp`1zg}Vx0%!7HM=Uto_1S z?NHWA6mlW*ZA@B5Zxzs7Om0_I_hRQpQGLJmE&2*BC=@&)>SX;uxo79Alg*1Mn>(hW zOR2mXaP0DSttLqv?(;2n#HvQ4h@79`*53$`tON47-62gJ#p`s|ILEeRp|<}>u~Xqp zt~1Y&LOqw_(rIvrH3A+2;TtxLHJ$CVvR3mo?Z^lbG-}BenD%<2kJnunb94WVGH6H6 z-1`;4fPV;}g0;Sm{r?ky!YT>N)71Fzgr6pQYu&8#PE9rF#%3kmOB9Sz)b=T%z-{0uYnPB351in3!v9{RD+M{w~G6w+KI?V@hl!&*K*umu11yu$q;_bUsp(U`s}-Y{8I#N z4gU0oUlR=YzGpcLr9+`Z8F}Pii_GXU6-?dxJyT3D21AZ=Q4*EqyB)8ISCDrD2)PeQXVEp7Q(%<_?7fxZ$S z?c)%PrjE=46>Z5=CcvM?A%96vbwdI)SPE3DuY5v#whNX+Uyp#Wk-v2QxXlw9q@AqFFh-s-1=^qx* zyT(AH<+EsfW{!Tf0dvzI4kX~ZN*i~;_s+1>?H8XxP$$oZvX1b6+qOdFj}`}U^kJwl z)*-W2)ucsu$*n=~1}$=ZT|)JfzgQCrv37v1~GVyyY9dvClDjJIZb zuMWiTpP~0}kN5A;TX8v$DSN&8HS{m;_kW|uC$*uRDYf6K{|mi+38=K)Q=+q(&KKQd zD08b2^Qg&9Wo^CUf+m_Dj`yw3UoLWi@j5zI*b+K<>{W`&<&(W%mFEIxJzOSA?Qdex$UQXos8?0olTa3e6(mgH}5dP zO=0$^O!XAT{ic7Kp-Fl4lxktWjV=7*es92ZkFvk|{On=ro}hkKq#d;TyfnbC(YKM|B6)YVFD-}jmt)mKms=WeI@4C|xIEo%Se-N!=BV^aj% z)Ky&gk6F?_CT$1`YTg!%??5fd=GdQG-uhE!{goe8w`Hc>3Py*2h)#u5D60vF}~v!s4+kNn2Y zu~csSScHQHDg#n1K=UH1B;A^tTtVL7I8a2ZNO%9>K)FU7?;3@nKONZ`@p$uCooPN6 z;OwxDphb3ta)|XTR-uh@tnsHOA-`@HoZu>EhExj;V&fTD;-~uWs%AW4=GyRBAk$ZxdQEx%2D6*2KxhC<^&5jv% zX9Pbpoq?EgjEhr&b|q?DROh9@~EzhDl6a^;ULMl}7pukCk1s#F|O7$QwHT^Sc}#bK^Ze~MH) ze*0EJd*43$^_A-2=x<*L)?ecOFH6UzifVFG((tQ3!VNX*Am`q}xCvQ^%_!1NX)WJP%b+Onc(Qs0%xmg0&AMpfh5(b;0LBIwWfy*mRuUkk+T2os=(P{+Ravb%Ro54i=cPU_V8gEuiLwH(YXP4Vel ztW+9Z!QbXqL|BbMF3Wm#ad&dXYy~roz4C(Obw`Ia-j(m@-W#)?O5zgIc+nw@5sA*X z%@SA4T7+~-WWaN0IWd?fSu})i`Kz0oI!*T+Zc~BmX06G2U_o1`FGtaPjUJVBcA=s$ z860F~_?n`c)@nM4e$AEgv=uc|O4wrDIL*c{S`cTD8`_r9f=zyYoE6>T_R5VLLB~t7 zJOycHH3*7Eit8jl6>?E~E`Yh-?;1Z7I$q%B$B@`URmU z-Ha=WJ0hh0OQ|QlacX=NIwC`HT?iBk!bpl;bH99H#cP9h&fZdX)XJ7fG#9-Yq{$EKSSk# zwvL{Mv@^4`lAck9t#HU$FI88kwQMakrM2`OV=kkeUj(A9d$oVXq=tNm&=Xl_=oa504q0Bm@`a*~bsqWLxp{F@Y02~L=>(ot zt)0F0bN}|B{a?H0x2Gd)V)=ViC@t~oQQYO01dC^(@B#zVf;C~%IGv@DAC?uV(Q?4E+d{?v9 zx{QY#)Ul|rDsM&7d5rs2BHuA3RWW}9=y2qdnYL2zNm?(f2>ZNL9#ulzIp4nfHe7>X zaYOui^XJRo8lS&5`fmvSUp&gc?*z7lWlCh!<;3ubC9{k}Kq|h|h+u+1CKKgX_D&9y z&F-dZBBteA6{sJ2A%R-Nxn88+%Om7tSe39zedvS4dg9C7qmG?2AhE(51 zO#kq`ff?Qsd}fpYBeaiB?^c-sY~%73MW4s{=KwEGo%(5e^D$4Ab{dye6AH$C~3{^DI#l%B~SRSF$3WF__j>BZ|PlTSgr z_)i>%y8sn}E%Jr3CFpou6~yoQ;`*dhyHAz*Pe7hdOv2M|^%HkT6m#miXpTJ|+np$z z+6cjn0+ug^TT|>M+biS~KZ8xQ&`2I*HjTRKNPCc74!3U!!Hs3nB?cg!(gJiO-7#` zBTs)E!T)GE&Ob7NB$?q$YOLKqlqwmCDLpJ33L`@?S;o7DUYbM;L_g0=&?@|hQYa<_Y5=H|LO|GQHVxg@$J{i3Qfa^K`j*=DEqKl4nmp??~O&h^fhA;rUXY5Ty;_#R0_ z7Os5bYv3w!^BLf-%`RYfjT3)tZ72Ng+~B6xT3hwS&EwU(cEr3%;f?$#TEZ<+4~zsF z8j*gm$vQu|C=YGdlZ7WHFIWf-wX_euo$tgt3kSE``r>^me;gxytg&ozRL1Sz+ZFTe zj&q`dvD0@n@}?id<%I4GfUX1Sut0=lERB6!cn?+;^AiIm8*B zG%GHK-jvB%iT*l~XVes~^P*NlCkuh$8n@xB#UWfDD#AxmTTy?=sb?EB-v!0F38OU{ zT||+mCIB4}Ft&QfA8Ifr1oeAvvzBQTc7$aEZtpHjC^<_^%G&XgCG;DHrX}_T(*1ud z;PZH;4kiy$Ps5uLm7I+h5p5ro1!gqjppS33fgUTL8!CFKd|0ahqeZUt$Difed;k#i z*l>CmWH^tbxj0o3)L05gpXF01siXH3cINt5K?Qcb*Sg}xVu}8PYmssWdRCVDFTv`c zE`s3x|iU;(UH=F@KkZfTgf<|@= zxGqgi+1a|>pWj`>0tiWqb{Ikhlg{hHD=qVb`H5Z?^?@%(sW&JN-SRc`!N|fgtDDC2 zo_r#;s7Fvu-Nc8>)d7Hs^1ATFHj4Ppt!12Ps_LHxg^np-lp48NJR`&n@5Q^5F>~hE z_qag_+h_h`z)!T8 zIXRQAvx^-8g0D}f-`Ew8^_jK8{Ghs%EB^{ zY@o5g@DJ`7|F}*JK?&nptD}oU;j2@-2gxB^cGQ;R>+wvc)&PgN8@V6SH*8AvtnUN*>f8h@GM!8W;uT#H&Wf z;K5|a=iffbs7uASc;^^XtEUI(Npft|*N)@42E4d*dCacgu+d0GZ!cD zd{3hf3V1Q>EXbr_t*~~UG>6Gxn0*byyE;RDgZKA9*$69r`fhBlMmw+}kR{*9XaelX z^(;Vf*Ka39u^2$;B0YsD2lxzP6lAqTu&QYkNEBs{C_#F2XT6@E1SL3Sy-y(Z&3G|? z$}1)<*wskQ;nN|De(+@%Ve;xRH7_xphz*w4kfW9$sQ8KB_Rwn0iNVzWgTyB_oFw_t znNWg~ZuYP?Xu#z3XIA%CN?h~S1wU#$c`j1fhsPd;s*;_s+&fPaG%rPu_#nxvAH&5d zRU?X7pRJdW1<9%g)=$#kL5N?ka+Wg>?5&jF)Etx&Qs17!oW+~7M(;MzKv<7h?|_8l z;la?-JbdVX0u!Y92`W$1+kPvh?QKESfW-qVr(V~PynC4VAqS#5K`iWUTe)4=8!4{h z;jMhv@!=fJ`9+pd|Kz0@>)0CT^Xupt8@!%{`Ck|9RuoskU=ncgkeK0#`ai7@49i3j zIwT;+QFzegPRq!$RikY_pN01ecN;UfT?=81wJ<>4)>5&KrMZqekJ?#TwYfiEqO{Yc z3F7L|1{3NV5Ev|n$ULhMl8=ko7?JW$r-G$N@D^YtVZ-av8;uTL4*7_ruZAf zHx;I`@*YR>Ug%Q!RWh?=7~3M%X(vXXk5^UsIvaXZ$Mcl_4fc6;u!W!cX)@T;G`?dV zFN|Q>jpd@K2wSunDvLqqmYBI*l}uQ&X>z827vU&lrkE;Ck_a&S*%@Voy})skOmauf zk~XDjB>bRb$SRk6a_z-`{}o+wg?=fOh!k{+BNLfo&T3TSV5WIgCKJ5+kb%>bflXp) z)wX^l(hNmRoxca9jY9-Qisv2u^Na#*sCO{($*m4LKAE7i@EJ{S7mFbJ&vF+-2o=k& zEy2k|vHOKp_HU(3BcmEznNeo7s&{QId0Itxp$3iJHb3z?KOikb^ROJ~b@tKX^s&Mc z-K7=s^MNqaK>CyF)|RbxfkkWFxcKt@hjB=u zkinn<-w)y*4zVn$(xz(oAa%!da8#cy-Lg=&RN0Kcg}VSch@3OSPYg$Wt~a$(Mfq)e zGUIeUE@cliNf|;uoMa3`d*eFo+Chpztu69-f*C+Odvxf&igNY|faKC@03=3?OLN+( zqri<8(x2@hU@~Ff&5LS5ERFxNH`UU37s4<0M*eT@&0m*n|3W~2j7h&Xu8{r0#ey>* zP?&t-13vc#ItnQCUx<;_$jNGzJQUqh;#b3FV=6ci-Wl2d99 zf%)mHxHMwAr6XFyz<~0P&Bar)3KL+Sc?A6?7QA^exViIg_#NLpGs1;UYN>EbM}9zZPah-`5zWpIm8~^ zpn%5&W~;T<#JgKJSMV=#1q&5={4@RwKnduh#&;#z+mE!vd z3jT~rqfrn9fT(b1D9GaBp*>G0{bZP@+L~jJ@V&d6q(%e;lR4?J@SvDIizPDX<8ky- zvfdAFNoG;K^s*dX>aYM{0pbOIz#7S-P?+z$L{SroIJ0Zd1{j`*WdSxkiKaRsWCk7C zJ<@O7(pIBV5_VA1T@yH~3}&>ucaFGfZ^`35=WJMC$#RheE{q2&ock&Jvh z0q6hG&;bs;V-!0F8jjmXJ~s7@q81i3EEsbKsRBbe2|R8O5L~gVssCC zjfq9$zz3J4i^$vnffuy4?M)`e=@LF7FY*xh2RF{&Wb)^bDN^i}Agj+v#Cz#X+)H-# zqjZvb#ePjb6ws&5+-}^=6fiRg=tGB!Ihl=Yn|<(g{>;%l2_$g>*ff>r-J0ixz4-h! zfC}Jb*b;VWTWx+GMLixM!=c!0wWEw;>AGeApd8Cb_z3#Xxh(3pg$~B!{nDosj6{PF z0DxiPU<&hyH1F@3ku$!WU$0meMDe8C-%C136EX-Bxj>>Zb%M%@;mbVUkHnDIz^p|z zNoC1qu3;@kgzJBIY8B1eX|X8OL&}^cLOm;0H*qX~9~67T&nf?;^&eT3bW7G8`b5$!(nWoEpp4f?t)&^UpwaTR7CP_te6Z+ z_`_+YL`upP)mTw;<5rQ==f=LC`EL;CAo&OaKYO>VmQN%l7cpXeZoy5q4&SI2lJ^hHI4cFwGrYGBmr(rAmI?LrQ^+kDjX7vZb3S z%q|;K?hHvFK>42OycyM%$)l*qYF-zMkjbYvpdgqYYHn^DQ1!+%w&UtTa7!soA&&KZ z?q2-HI(1O4#!7^LjF70skG&bZmVa=f?e}(+a#mPdp6utr$?o@|dFhWby$h5w?`!JghnJT*E{5rwT-Q9^ zp1?8!W#OTi`1|ql@pAES_>k2)&B5WJWqw5R9Dzi@x5D$t-u96N!wgOp$>=GUrY9Ng zHu0r50h`fmOD3bitRCN}Pcg0DI44H*PSAez>HIEubqng#I8iXGHEZu*qf`y~V3fzX z3G9Dme!{&zsB_9_6gWc}z>VXew#+yjC!r-jVE4mchnn03s`k4*)X(vn6iHU*WLA~a z8i^*I#yH%R3bL?;9lRTGeA05|Fvex0glDm?Y;~Wa04vHQiUKvPKFlz6-5-Vmc+w_I z(VHuUi%IkciiV^s`LiEem~EFH5(ycI@}}6cRJ&4Ge#H1|aOfzvrpoZYcYPmMNk>cD z%}C%Yf;S4^LK@LASL+JPC~06Pw<)EX-^@v1ll%Rc<=aR{#zQ&q-H0j|$>j0Z$r%OM zNj^XxF4}XEjjgY`6ka^=PBd`-puu$8Jy4+?T%C5Hr{KZpCs9{J>i%aY6q09zpSS1E zFk>EwZ_6?QfyP3;UG;0s(BrJNc1^7MsruW7#NaY^>*A<3xZ85ody2-x7=s3Izc>^s zk6R~wDmg$S8Ob?l`Lqtii{Xom;cJj_rw@PbncL5vcRwxP3vnp1hK}$Ebo4OSE+Wzp z1W{|Uj@M#PaO`mLjw9k}L+Vul^I40Ks9!8Q!QTd*41cYFwmOz}I(n}qL)n+~*yJUl z`cn-tR%S?)j~D&vsoC$9la!rV7c330z;B}$3Mxq0jvE_1d7Ra8lve$ciIbN+Qvhzf z@x~bCILk9kHUj=z!gH^akMo_I3s}WhH%y&vag}f#e18eP#pp7`$69;No&Dk|e4tc> zC#vI0cO+XNwEYZra3SH6q#6=iy;0Z6Wd{r7w~WjvM~*KwKH%}IH>&c*S>eTI@caXot2eQk7+C&! zbg!hgSi$Uy2oDvG^F4n~?BM%flPft3RmqgsGaR=7Tru{WnJpCP3EaaEtr$ey zZCYyp*wz?Z9D>BXemsYa<-s9fy-_@BD2uWFDQ#N&HK_HX? zZF-Ydx%CU8 zVc|7>ySUeQqV?jd6I_LG0wMa0L7lv(r14TRTi%wk_*>C;ZeKu(`X}+GgZ1z6W~i)& z*h>h{nP}&bietz22%de_kp%&)7EFf>28`1f;3ZY*JBiQ~nV02h@zy0v@Ru2!wb=bQ z(7<}L+|_b-r{M-%-{I$F2dv@U5-8%$ZpM&{b2*hrAK6=|FVdf4!?br4RP7WeJU0sx zFhyXixtd22L&ZxUnC&|#PU8)3W!pA-?gZ(&6?E8Cy9oJHQ3N*vPZF;V8N)g$Z$=Po zDcEX;eC|}?jC|;-WaHUw#qz8sPP2BR#y?iqKZO&Dx6Ri7QMJdoP>1S13DLeJSDZ-i zBt-tkAzaC4wG2|@Zt%Sq#xNa1)m}oeNpg}+su7~PB|NTid6GFi{B#6$c9{px0n{nE zJU_o)c02fcWj z7JsO(L1>5R>y^1@88e1i*@>_5X>uU^<)IL=2bstm1mNXn=$(U&{zrNH#m;AdKczQ& zHA_Z!(ogsFc5m!ifIfFc2MEDw@Dc0X6MB5A8cQ69(`=gy<0G_3^&rs^|76@pH`N*E zNAG{rs~zrS}nC*JJ@yJu+!xJI9 z(OZ^z4sSK`YIFa=NZ)HH@UMjHEpcjcQ#{ChW42$_)c|{-HP3(w(dfdc!;bCsyTejR zedhORxEj8R!Q_~%m}7pvnULCkJ@ByexzR?+od1K#AphcneR|+ZZsslDIl#fOrag9Jw*Osk; zG8i#Mjjdai!V&FR!B+*R%1f@`C9`oKnC%k0Yk-Mr_hpc=;FW2IWF8`CbUAoTcIOfd zaO#xZiS-}Q?G*2ONSN(NG;N)6V=#chHJiB7ERu-T6+nf??kv;YOJn3BWGs!wmp=@e z_(1kTnkUn$xI9r9a-$yYt(f$rIY8Bh?w%2=z@J8U5u8`;Sgdk-Ux|Uz+Y`a9_taD~ktkT!wjDO;g zu@~)3`K~ClSt7emwAv9}#T9|LI4_#jl`+GYu2yC~bP1{{KzBMOzR;9@n^Do0^N8}I zuGfX#uicg!2c#-B_pJILMimJJB4nL5INfrA7D$gKjKPZm2?Ivrf3-@gW zodN#jiWP(>9Vylm3}UxDUoOV$N$Fr%*by|44WO@2oTKdGNXpbu;$ zcRH;GuGof_EeB86_!+0aWrEDvKpS34DEe?o3{VJki_oQWnQW*6B)g3sVn3$J=>n8U zovpy04EzxKspEY*8+G>VItov8HOlA#DiBpkr|N|F?9Gb5gNGCAqW1i5NOUP4&pyx1 z+hQBPRSM_(e|Y&xQODdwU*|RE`qx6X#!DiA%n1zLL@_kyT{>M9TZ>viDf^W=B2U;@ z_tWPL!jD{(_B|GHJ?)dX)f5sX6UIM}!s%8qg7_Xtss}h5>`qy4RudPj*0|k4BZNKz zK&p{V_V)|-_ZLCvB_|6(;gNwleeNyuM(;}jO5M`Ka0V-Mvt8B}o*50X+tN5GWyMs% zpR;c?EHjv&E!Xqd~Koq59pYsYcY?bDrTenUsrE&PZy7cji0Ad(3=0a0pU9B$8<@6+otoORh z`+;=6drSIf4#!^nJxJe&hao~o6Bir`J35at<<0dN$es>$J&IA`E-sO~F2i!W2u=ZT zLnLJO&^0!E&S5~Tp~bY7iKqqo<2d!zR8UL8oj1QHf?%ZXpz?TE0zJUMH=pTs zQz6j9F}3+&9{Kj{t$CaZ8#bKDwjndJ+#b*VRr^ydwU+&0o}k z7XKM{T-ikJyno4ss`eZ1-qc7Gx@FkrrSn5~(GxDV?a6F0;tz_=V8#~Dh`Hq?^R5i> zRjtVm5<_m@O2r}VDt!w4D>LPc>U5^GQPK+_<{Iehw%2&_78^GOBA{uWC)zHae4r&8 z?vtP77 z-@fqQ(!u=kr+9T=jj*2mzm7x7FIi6Uz^780M8z>NK*rm)`N$c+gMj>0B8&_LC%>ty z6bwcE!APWz#j#>8*Ll0{^E&V?Np}g7m0k4Kr%%C5Ms#+&!=pzJclU?P037~8tn-6j zlDHQ$H;W)?rcD8tfd{Y-YCp*Xz<6sARl=@dFMzQjb{EC#+^G`A3ZDipKE<|24X9C} zWR5{73qJM$4BYpAtQM$Y5;Rx7GPPiH9Sdz|x9~PfhFrW(8lG@c?+}EwnAvTPTfsKo@dA*bdBlei{u?I^0Km$7a!W{2*Ok3t(W zSW!~&UhX~x`J%%}!cvYl7a?0=`kC8|f@SVUOGWic&w{ulofUX%PA((UZi999vm;*z zmOGl>Zc=!(HGa#y^R^+}K7x}P$PWpa^)gBbbJKfz6A!wto+&IizM-d+JnMHMuER${ zgS-savM1#&CUZ#D*XlCbUm+XNfPe%_>Bdo_2XZgXr{m@ej5|J2;#GKe6WK|VT!((i zBOD6mEUu#cuD-=i)sKj-$t4wkxV>^M-x@0=1N+fyQo3P69jPD`!zf7+XoqDWV$cA) zS+VQ0Xz>w}^05LU8=s{;Ob9*PFpSrgjhP!tl8(gt7#pNK=9clgg%2m%S(D>umLg6B zV(dpCvw}$aknqX?ccg|D9R0YOpS}SsKUg;AzTyMzH}LC29750wp0+ z=TpZHqK4~1Vu9X6<_fzbDuKLyP&X%*_qn$_%eV)W262Mqabl zr@UE9HBWdqunug7KxSs-PY1lne%I4#jj&>(Ny15iQtSLz9#7Ti8Fmi4{REm@p~TPWC-4GUma=)@Rcc2qNZ*!I9Y}Cb z(Iq_i_k~Q8D+MCPx&Sdi&cE~$r3{P_xvCBp_6K#pHdg5LnR#Bv5;y-gP@wxycv@In zIaun;8T98Aph4QvVcb?kl%pK|4YHBC!vXlqO#XPfwHwD)IXFjbL3cuia{ zzV&9VATk*+*R=eUd-(8nx!eX(41#iAf|H`!Y9aAvcce;d4JRF7{EHkkEG0|TdIGNv z9gj%n2qRs=vPe)7mUXENJ%s5E|I=XpC`2qO8{hZrEpmiR#N~#>Fl19ozVAeHDPM+K zFU~kVaobWq4VsTJl~zJ%N~iX0Qvo-T|BMpS6A&fxpB{m6Acq0op1fMtByRgcMChEe zNvSk7R9?E-ec#r|JX}iruKXw(OAuHd38C#nUEBqz{)5hV0cEn1;8n=uguUo4U7ENA zGmWK;b@@VrCc}Ul$DmT}^1HslJ~f1KblBZp2bB1#bziS&yMCCWi%#^E52Sk5CX$M} z?HN2~p&ogch$T=Tbcv{ zJE^*&H`5$4xhgq^D;fNibc(ss#h90mgM$8<=3=aF$m8|YPJQQiPkT@1SA0Gr(n)W~ z6%r)U9r2*%amSHToW79|K6aK`%dsb|sheUyLp}Yx_gjNW(4Aj{_qF1K zx^4~cGy9fulZ4HdRvF0cJK^YRq_~#9)KiqIV%RZM?!ytdOiK5V50A4#Ikg; z@3*LvH5sW4I_WKCqCz4sNzF8FOczd~_&qw&L}iHi8q{vu?;Zr9AMwYX=qQ<^&gb1- zQl%3{>~i7lKFOB~rQ;6W_*1w2$Ka<5Gp zktB1tUswLi$Y;2Fa`ho=cR#p{d6RGptY5=4S)yI5oKOpTg=M>Y=Oun-=~a+)Va?^5Ad33Lo0G@Mh)h=X)=%`W&3#+bEz`mnVOjSv*rmW)1%r3 zDUwdqJKA5(;P5kD&OuDI=rZ8Xm`T&rG~;y)rvk>iN<&n4GEhf!%$_6wum&4fm}~qy zJ!^Okx{)uu-mR=I1+pS8gt!7E5+s078_voQHbm_U@YIN!-s*wzz|Dx83c6S)KPpg5 z4l^c-yviE^O;z3BlBX~ZPzuWzvEu*#Y1rg#O)TuJ4fK9{X!6feQ_}Fy%{6LGGU%2_ zSnEzP79>ar-68N`lIm4Fo7MxHQX0;qQDyiVLJ#@k`UKiE?>(+xvU*o}tXo1u3)`DA zr<;Z`jgzaxx@c;E-7^L#lm&F#gbA9w4PF@h1Qfh-d~EzZegxWle9}vNEYi$9Mh?Sq zvfRz;AG=^at;Y+cqu6!mAytRARx7mZSgSh91xHEuyG;++H*Ai5du2TraYpyc)guos z*2;&Aqp&x59vR3Wn?t${cpWn}rN?OU7Db9B&14D~s9JCk?-!U;%d~4^24I6T%j%q1 z_?vZ`+^UyMt*w^KSuO>l*VU}h2Qh+Doy6-B%YUXFGeIu^4iS=B4B49!ITwmbi#m*; zqP4CKN{0{Cn%$Gb=y__(jLwoQd74eZWGOU#Px6?O4qcNn>nt%z~H0;iJ7`#`}5-MXTXI3_=nQxG7m9Ymtzzbn?r6`=&qHUlmyblfB^eb_(F%D)L`b5B*l| z6|maZ2$IbwkwHtrSHX>wq!mAbREw!KikO*))h@*O2HRITFNo8#S0~~Nse#B>)K07M z`g(6tcKCP)2jBRit)i{IWTaQ+IG(4+CrfqI$t%or{vKQ_3#YAHPR(oVMnpHyr>pny ze0!PCy%TF&`#3h272digGrdr%-2WeG?;M;7wyh7x9iwC0wylnB+qODR$2K~)*|BX~ z9a|mqOZS{JbME=go%znWRqr2fy{Ssoe%4;xYdy;pZBhKV#L9p(^0he2$w0k5%ODm@ z^i5t?bXn2K(!}?*JS&l(F!B|+!oMUKAcCBx1 z^?bG@kJO1q#^}*}wl!y7kp%dPt4QJp<-v7MB?FCX<4zU!*Yb*SvE!Ts7h|a&XDZfX zGE?Jx!rKKz#vrFEMaBp)k(39&Lkxw46G)D)snOR&YH_GI3U%6rB861+}$^ zGE)I(bR#48S;8B?C~SLq_C&Aet5d{_TMdT`ian5E+)WE@_jU0PP)y}eLvdqNu$7(7 zWywkBUOi?f8%MhpV$*iJXz=$qA)`5v?jOW!sNB*($(X5K*wn~H(JU-XVzmz|D=lEc z2-$}!!yt*YJygZKI-mfRyS@Conu_}O=vhbni z9~LiVQ}=!?Gfb$c?yKv(3_6S+?zufs#ETLSJM`<@=3mG<1^{(h(1}+@PMp+qF)A~(k} zhnF53eim4`&>6XqgOV{7`Eg)&BBFXqJUQOL=NsUfz=A#?C1il9_Po9y@ z=CaXjPDBEI_O9-PHR{Sy_>~F`J5NXkXgK~&Vsv3>)j-FGd4}m6h>@PIZU)^d90*?3 zwq6T~@yja7gYxRR80!ReBSP#x3HdyuL7JJP#;(lGL@dcs>SjTn!Re_^_8Q0Zx?NV~ zY{%=8z#l`poGaSR8aMGv+dQreInhN|euzP+n?0FUN&Q~WuSdNuEAxwFbr_AF>la-V`kpq=Ww!4Dge}MX;94rL%CCmIEz#8K zNy>$=%H1x+TGh;ff1SM_;7uM==QR4YRu@SfayHE$+pvMNV1RM0DqeTsOGc!ceW)KS zvj$W<`&Oiw%opUkMN8)4!s#j#htaFcTlaz0g55_u<&n6ty96mkib@W~kWkwaH972g zMT>0M4fV|;`hn?BC&Op?u2F?1x*c&&&n&8Pj`Ws}v2k^>vA8;hk!mF(h1jL5F5`wf z3mko%qgp|w$AU)Xk6i0;mGVb57uG?Qv$b(2>^~OqzsKJe?N-=NQ8?9pFV+y`Q#)^? zbkah{;Hh)rHpA64T>9E*47UR{9_v@8*z8HO$&vc?QyPa0soLwA(((w62R3&*wHbVE zy&&B!wpAiQL}4KH8uQJ?WJranF0?7S>;UW-PQRh4(q!>0Uj&}IlJBTb;YuvgCEUSkCiI5YjADgY&*s+jLOmn<^p$y zr_e+gkMI^`oSd8JgcB<5njr@W&U~c76Up0q6i=CS~lzCad_;kmD++BVvpm^F{G|fYqoKySt&dF=LS+(9Y)l!Z6otFY`Ozb z#SxrVF4HvFuA_a%er)jLlt>TV^PIJ|}s$)sB>p0)O7y zXTj}|)L`s853cJHj0*dbii{c++`qJz0lVfeQR5_{JK^-IPU}g!ie5~B;94QYiaL0x znWjNDslb7a$!8l$P2;P1X17nTp!#*AW<{pzEPM>X3&0Ymk^&s`gV2q_nB4Mdw*h-&NTw zZCpxiBdCYD%+Gm5 z30dtKJIStK+sGvi1B=Krr#x?}P!x-ZG`rQ$s9iQAeeJ zCzR1@Kq@yVurRuGj^LvC#(%NZlt%%2Gx&sUY%wJXO3c-e=0|gZ>;`Yk^H}c3;+Bfh zCPseVxr_`#2`co89Y%g2cQDmi2wb1VNX8p}JL z&z`;$qO`i6fEQ3xf#I}3pJO_`fJo&+FZ(t#iI&6RpWB7+y(A9r$`3x?KCx^v9Tj%K z#aFBZUSk7wByaO?CV{uc#c>L`C0~MH6h-q;{e zA9)FF6miMFsfPbn7VWJ(SPAvugx^84GvV+6Go0{DvMc@ybb*z$kz>i|Ox6;YxVIbJ?j6Ht+}%6ISAbnOhIU|AwIc8T`FWG3`N|{o&=bxp@Q@pR z4#d;9+mUv~9nLHAupQ3J|DfHU3G#}xpq*LZiMu@^TQU2lHk@hj>^7{U`z$=HqyKEQ zSqXmQt+ZKb=gE7q!0xt@rCI%!7EgKW8FuvzofqI4`&z4i1NfC^fEVBue}EV0mHrW8 zI}_+FJnju|Hm@GPTg+vq?$;;AN2u*Dn{PUY z-#W5c8gDyIDD(Q4IpsJtw{1^-EJ!sMy6T}Sj=#Gv&ojRLDq^=u4g1zZ0sw%>{2!iT z{uvVg%Tr9f@;{$q(zWH60jTeu`pAKxa9r_}i9-(*@{zD0gud$?hfkMdajI8JJPq1h zc7C{!3$_zbuBL3#hQd+4Rhvjpad2k7s@&lH4Acp=ShpDh+5l<=c7q0djqDG1dxpTf zM>-B}M5P~?9TiC%C_vu09g!=9>bMIu%SDUq~_5#QGbY`>jMxbD9!TBjT5Ip^(m{e5~3%KhI{3<^_tiac|DvYt6Q9 z2QL?fShRtDX*h`*X(kRpxDVsbNT7o~;^yN`v>qRyy7wW+6g?mB%4UMfeZym?Zpr<% z?P5wuFY>9Z>PL8(n#-5Wm5%1%9;(4V7-|wdktu99_d&LprKgzeV+E3L*SRoVnak&g zibnACh0tYWPMl1L4C|!!${bU}$wstDG1HqaojwB?UL1`YlV3uo3bhXq;}Up(okP=&c&l-`P)h~wYj{~rkXzs@jhc6>4kLkm4we zdHU59i``U}bs_?7cnw-`^T$;zxSv$3KFv4Y7P(6w-DJ_G$a6`Z#Oy}9AeJx=feUDO z+OAi1WPgX{9A`q+W<>6;YmM(KUGmA7tXqA<(VU1y8)fbYcmYxZadOdjO7)|tN28lU z?(&)}ma)+`fJ7I{=m?j(P9#n1gUC_4I8+I%!hiZIg|s^>o@~ru%&M8ZR`$B;ehG@t zR$uc;_UY7bv$tO)q!W5Q9r*{PZ77Iv84yY0)jiM$i(FL}HRL#@&gO?RU4t@Khc@PU zrCf_eoMUW^iu&e;4Rthv-tVMJ+lY@n76hFp{g@SjZ1m5KW{OiKgX@K z0idxv$U4{E=Gr?c8*<V|%t*T9K?G(*1jr*<#_fnU&+qu`TkzJ3A z+enyqfc5^1k*og+u&kc_?>&R%31dHD4m`(`?c%-IK&9i$iNHj4p6-Q#G9W0R5>gSw z9*Jg%))Vh^xj??=*8JJ_YKNvTSOr*OHC?xHJ>Il`O>(-w@bm#7y(KYLH5yYAuvCJD&tIp2*FxW;mjN2T^eSsE+XXcWObB< z^RiH@C2{f}Oxk>#@dVCJMMN2Agi1Bx9=+b%+`G;GK^!qT=fGFj;qmLQr8ix>985v) z^8LBT=s(>+`-gn(ZLEG1Y@e!@%#1ABXE;1yArRq9OyoX50bya^dHh&ge6$b^aH^QR z@VF^8j+1dknuyEs-YBTb@FeYf;MR+7+|4M4c5ci_pbNRApd1}%Xbc*F;%$no#BuOSyW^00mLrI9~ zJT4ppdswGwn4#2t

4y!;9(7%}WfCmE<;~EERiCZcX9YLaR(Dgehi5aMQG^vzW2lcx z*e8;Utx(VtxY?Euv`v8wPNEG%Tm?UBrY)#}I3v@Rd=%D5GjxRD-de z64SPCBq~%sPN9O5!}Su$nz|^_HNV z0x$+;+bblfW5%pcz@_&pBPpE7MB53Qt`qY?+SHsV|S@RL65xU4VrIC)*M#K zB>~464Pa*yx{N#Uh^5O94V584PA)n-BZC61l7QQp9YF<;kB@LM<)1#4EWaM(w^XFS zOb}+*8f+{I3G2sK$+taNh`iA?2~pcbQ6ub5<1*~ z{K_?AF;8HWayp&MH1MOc!m!=c_#mf10Vrd>ry8OZ%$L7Xo-Km!oIhqARgD4y`bl9? z+J_IST|FBH0Bji?%hwqz4By-rwl`xE)aP6@TO%A-a20p}^lZ0LW)l%B6R9zCTLCC@ z&y{bJ5i1k<9&2D9w7v6E*q7Fhi|oQEvJ%`gVH@AK62Bd`2WW#2>kERfC_+@1lHT`(~fp|RaJb`!{BvNIodM>g|+1~UA)xE@- zhRWjpHCii+_A5Vg{+}zLDCmhBP+g@I` zf3N}=mGx)os`>l+g@%Xb1c}85G@sklG`v+rOI0s zS?02bfA=KKyZLoYYQ+WUj5F~eXWzB_?n`TT)~tmFbdewzneJws{2;uq z>729Z4k>CQv(03AGY7OB8y9$o6dY|<=W3=X%%zlDz7dq-inmRM$PeY zj=2dpWd{Iwk`Z*&bnK+Yi0HxJF^oIuB(x)CsjR?n5fDwlz3`&Gb1Vgi?~?O|HOakF zknC7{Vu)WNcALn8=xu%c4yN|P1@ohkeEZsJaC|tEMhGqoMdC+cFqRI#ik;|nWD5i7 z7cyaoTxm8bg86<_vWz+m4&iGM`a{!D$F1q9o@p_m_E=Pm>GC5o!QQlt3;2*dh{elu z-x+y(bclFU-MIBD#oN|z*J<4 z5zh$L7>kcC4&wPxTZ)_iL~TtKoeWAjvaOr zB3>(B{Etq48+Wg-kAFjXSA4O*RQx}0v;Q4zDLvbN#rjt>Mq5v*PZn9b(=MT}kku;s zN;I0kT#PA@UYB(lE1N20iZsM)Fz)tGvY+s8pdqIIjme|wX%6G*=_z+n3#VYCCgrXXcy5{(iJ{Z%Q0>Ob9Z53k&u>Sy-Zy``~k}G?VqXo@xbf^AOsL5!AbF% z`^~x?Hf)1zQT7I0Lo|a5xu`xoK~hbBCFuvUCFF3b;7ov>) z@6V(WQQX!*{Lq1!4=Yt5v4pa+RS5d=9AxsLd7(o5qO8#K=I|KNCVc7CpdU76!OvL^ zKd!ctu4LYLHoc|;wr-IN^7i;dL*S|rAc|~nc^E|98s08n(A(Ksrr-B&m8XoP?nX@h zxFqC&wZIh@aL}ZJc!{0aH>1VM-2fH1yer;NYFp5{XIONEkDzNxN^5JSOr>@HVE4TH zZFtYA(<~4%=#5*zwL*DxK4^MW1=G1$5RXY#sWv||8?>lls+hUQf4qgm3QuLBbZr~v zCq5|PkS?R|rDa;cF28t%2jm?Nzr7#Z<}ZQyo0v*g&(ZXs?IB~*+jQ_az!DnH4;#Fy${u`KKz_kJ z+QCW?CHB7NlpmFB9m9~rSL^JtKq|YTE?}`-0dUOg5m9rxMMAzuXWDQvZg?6*;l8c& z0(8(dBDM@-D`nR>LL$mpyKF^aeYu~m1tmQtFwsMgJY@P+p$=!C(G?P7& zmb7{1kYKioUSV?&N3V`oG3(R;9u|4;Jf3c$gex0g^9HIN+hDvPJ{tS{sE_f!(h26Q zy2&TBKaLefSYy~uxp=LJq;fAJgf8pPO<={b8M*bm@N!R0xblv(GWnu18NU#vl!OZz z@={I|z$wP%s{`tUknABPr8^et5ewi;@7aF|OCz;;+xMv%BqA(*$j5J?7; zD{f28e_x&}$`uer;d!adTkKNBGst^mv*m&21^DMRVUM?7`8gK^3-*5~2g+JH+3Q*U zYy0$X#j(eiM8^4aV+4H1HiHByG02rm{t+gppa3fPgD$Z&#E z+*;j!1U;;_dIL0e*#-E6e?f=@Ukf*q=c*SR3-~e36~rk4AN!^RtQ2=|WE%Ew=5vTQ#`~N{H?UT5(Q>@7FCKx|eWCI6wp_ zd$sSO>LIL7zEmJKqvXIl%?aD2J?Z>fPn9i(nyDHw`CZ1&7#DY|OB#60r* z#MKh6QEP3ixK|%t+G-l-o!xjw8>3E#*E5hVXabrd)nTJ=YfxQK4lMA9{A#$qIO#q$ zx?Cs$xszIt6_}CNK0?o^;6gp9OR7!4fY*WnT?3Y=D<;eNop9!NZG%kQi*H6(cjfK0 zSPJn{6IX#ImsbihCu$^j!e>bgN==((7b*d{%(PcKO@s>=2xK z)(~f{d+dA1vlbB69oDPOM4?Jpb?7bk{kM$LIM?h)?x+eis3k*_%o|C*t)y>(8wccb zw36nXvtk|97_%pK^wZsaz|aU}F?y<`<_J_BIpSEwbyXA_k`S#kUe4ViHE2p3&r(SX zf5SkS);Q~A>@$#H$mEHj9`XZ|w;!JdgW14_aY0um?V_iPQUXS`Gb1X9ri&Kx1DLq& zf@iT>z$dAF=vIvy8*iuc(ocKB^$Z%m{|?5e{jwtS2BBSEIayABP(pqaz5^aDEuJwr z9ETSbie_vFd;K=pEUr%D1%8W@jYxJrsLv+D@bNy8>@!Y^oF{0uF6-AI^=F?82*nh5 zj=1P|nSu9!Qh|KtV2*X@qRg87VA{7EXdndp7E|%PW+#%8f0Q7n*Tt^aFpVRo^cv#G zT3jI#fm?uz&XJjJ>-&TuxgbWbmQ%3nG5E&uC{P5hld(_O#PoG&QlW6$ix*~#e z@Zga>kF8o@lM+U>m$Z5|<^_4PaFHWO(82Kg7)DPi(w!hl%HZ`k&jvq7i%0i7#T{db>T?03-v?~OuT?I&~`}^AzpBO zMmBb+hIsY#N+dthCk4_4a#KDlAn!G9Nhx zkuWX92p3g`5~P>qhuXd-eW3mb&R*U6Tq58Lud4v$Mial+9v-UrEk9LI>5O@nc$}7j z({%KOCUi@}k1E(o6Zf}({9)uJldJ-p1x1b>@iZj-Tw1{T+ZiZ16pp zi;$q0>XDOT`S{?Vr|yz85@*&!3}|l5P&htc2+nel(e&w4cvCj+r1o4NIRMZ$@dYTm zy#iRWW2#%1k@o}E74D46d9MqXt5#CWZBuF}R2>meW*x{yZo^)J5Cync)ryVwle1o7 zB2h*RPY#z%*|`WQ7K{oC&Ml;g(RHF;C#5nFoJC4QYK7sS=Pbuh$Md=9n|R4T*D5~( zl5nk0f?EWP=bu}Vp)EiJghrKklh1)OuRc_qwLlW!@+tveva|lSdewGNNM`081Fyd{ zsDE=)|84jrL!MivhYpGBjnOFbP$?1YNnL27oRz>=0@>2D(cgj zRKy}UQ8*w``X-pGdAV+c$DV{JstgwUVG%0lYC!1*jXkEK#HO^-feoNFUYg`Pf2jl1 zIkgn@W|sJ9C!Oycdg^-!YooP9B+a0GGKtRkD9B)4Ef?2*K zGSpwqFI?C8F*nz{&M-E%)iZ9V${)LaSp|s~Sa76woQ3``DWZbWzoz3q>0tTc%Ob^C zX#F?vz#)&K{gX~U4&vho$t|Yar_Zao2*V=%kTe#nREN20kFP};Q!6Z?ejl@wQ z4pqI?pnHzDXsFK5`qbJLdO*3#GY9TSTv{k`xiMs;r0^SU;2 zsTh!Y>V>f445Iq`aei9rwvqeg#j1WhNy>4fKvJwXf-1p}k?l_e>CZ!|X?&&uY~Z5V zB-tU#Ma$Xdc#zd&90&6@=f9?_dypy?f3ErYZ+Kt-z|cwG?q8Qmto>Z0$@9Si3LNt0 z?d`*qUuUSc=}C}~EG+<_mA`Oh!-`moVXcPAH*i)Gk!|360G?n}9v?U(F3!`){Mih( z878SGsrHBQhw;&`wH=?|?jZoeF6cgpz@F{v(tm)1uK{#O!6vXons+JZw%9Obz+vMb z3_VJ^z88DIl^<*ceYvCDglS4I*$9^Dg}^R-@^q1!#jb(U_nfC%dQv5#h7tb0Rbm6FNLw0VhDA5p-$msa_W+KTjP z9inhvyE2tcY3uEG1=_M&+mWr&+(b^5PpfZr7y+v_Jt`Ru7I|5sf`EGAehI4k2>i)n zCBjM!SYzu%*Y}BV7*Y32c3$-KgdDHs$R$V)zjN?L`G? zC%Yu}rIqj$-Yos7gLvQE%L>v?eo5V}V5_lZ*6p%c(F@wmNJn|e{n+p}*428ib^j}m zP@(CKseHF0M$msXn~e3RTJWBF>si?t8d?5F!^whw^S}5V9qrBZo!(>W-a7+9o8#d0AIjr(HD2{lBob?yb9@dy!e zr!L-uYpy$a5+Qn$nF!l;o~(X3?Fm$bxY${LZZ2w&toe0 z&|8u2vN@H`I*x9&cq#bA)?3wnEk=t7T7s|oy21z>{;m3@_Pz$aG&NGLyp4gf+WBmh z_^A&Rq)4}=f;D5h1|6`bIYF6~Me$=nI)uR|jtbd>pMg}g z6nCZ4t0Hoa40m1FOH)7p&xpB2m5%G*}$F;XlF8%;6s)glXx7r7RN~)EvkA|W5 zMVvGEVw=O5FE&I9v4(Wg?*c-L^um*fWD`sc_ijx78H>RB8M67_yb5mX*~C=_uO^@Z z3PP@C*bHs2y7R^H%+Tb4bW)I)FI5MPGwA#R_wXZ1igT~)=to0wZTkezEa}A`uarXE zRBn;@xLp%sd^<#gAzQn7X>pW1((Y^!V(HiR9~0RRxAS-%F<9Ya+Y#>SOnDru1G5S| zG!Et+b)dLYY3e6S5AC76QgL$f0Z+lZ^`4%A^3bo(i4SiYxmWwKBVFi62~7bm0aW68 zeq-1CXgsCA^sY*H|3!BHCz|vRjgixk0Fs0Mn!C5hEHNU%gF?oyQQ0J>4^%uoh_&Y$Ox1I@`QnGJ)2Y#e=3HW zoZEpdVbS9&p8s|JcGf~eBRm-z8Q3tUHKJV6T;;%XOeu;BbiD-0fGJ&3w62*de$Nkr_*8922Q&4$KDeqej1O)RIdCt#E658l1bjXf|}fq)?uW^9_$-1a!-XS41v zB5^0=souhgO9#*2s6i|Uq|B;IZ@_%H5tlhl;ie2^Ur25)x&*XJ80VAHa)<*;(=<~n zdhpasH)iA{r<|#E(3zOay|0LOoY_bU=r8`PcmL!hMtnd!ob+ zKf7W~={oGN#y08119~m&MeF4U#MAsDj^8kdvux1_{U-BoD*seT4-h`CN4rClKb7{jcmIq zDVvZd$0E+*YVF5;yMu>K$LFVeP(Hv3ec9+4x)5^YTnZd>wC*~(2eKe$NS=@Afn>4W zypaUN&*7nJK>=!N8s!-IW2do3R?3N`$|?Lh&aGM=1H1Dpz|vJ)ZmT+Wr^;d9(2T>q zo+dxX@os(|F#}yK{o(2V!8x~SWbN6_tl*nyjGkdnk#%CYcB-q}Scz)ARcQnNr!mWf zaPuX@WUnby!JSFx6@g7pmIa*;MuFYXJwe--_09%go)Uv&S(e;ikbBIPoyS`mz9q2& zZ(QDnHnk6a6sfgt(P%gy>|-S8tHspp{fwXefPysvfr2jLotquIl5@0KFZg3X(qy96 zzdD_Dn!Id#eM$?0_!q2|Lx&rD8AL{O0gsd3A8mLDCi;;^)ESMZ_3iw2Dm%wCMorIMk?lK#wS2g@APg zeKbPMnCg~z-pCN^S1hm{b1n#@E8y-zS)s1ZKtBt^n_4E#0T}c`YNE8nw=noN9}aeA zJHNpxonfVE(PcZ)Jwy0>(}L0+Vkv^J)1+ke0T>+o*J$(*Ou~MRAnvMuU4te9*{~U7 zsnh(cWr3V%Oi^8tpP|bTAZ+38LP%zbkw4v2(F{RzY`glz5$Uz!{#F-&hgMzmkELo#APP~S5$FhV;f>gw(z-Ppx`#M zd)4{*g)h3&KJ>JvG-=A10B|$0A7R13MrBvat_Z1{1b;^>dz|@nmOsg`6uQKbGx@kp zySf=ik?g-1Go)xt4k6ZSXq0aKDXhs^Ex5@n=uvR=wuEfbYdzwf!^2JvN z!2jE)3<$Fv$My1;kK9(xE>K{Xln*1Ag2!##g8NaA%wR$C?MADG0ph+&v!Nq4KOy3f zu=?2f4uIKTLiFcDmVZDbY^85x_-_{T?@2u9{$szi6M7b6r2FJP1U{|92{n>xU!#^7n%h{}+2u{{;$bM>9vaKZD`3 z^G_sjoWZo6!FWW#Zm(xQcJ!{k`%eTIsXt(N*^JE@ZFRKx11f^7SeAFBh?rl+)QX3Q z=be)UbYmc2{AP2uMz>;TTXz&+R%c^-SD)i&vAibYXIo=O>qg%pn2jFxQ%s8nx8QtM zPiOcc&o_)Oj*i~w_d_BqR$-07!KY%&1r$R?9)dv}&Jdi?AA_eBzT~I7)fykn5)7R| zM^_BCW5FZ@CIm)=XJD)XAoPt1jPZTQ|7{T-OX|AGwW z59q`U-_tHLW3&HxkLndxes*YOfM)w`1%|nJF(3r1dtG+15NYcR2uJrKSlNrNNj?oL)yTt@Rc?gt`sQ}N2>t@S6j;>u zFz843eb>BQr#n~=fl{yRsWj|z7V@O_1xt&XX#PkNwgH^{DR7c5Z{pXTv5z*CMHn2= zSA+yPn^d5fJWePwcRPdpZd__>e4?seVJ=pd@}PEDQmO=A5WUDYO{l@&s;z~#(1}J8 zFu_2@g9t?Jh20SInB`^-s?fw`z4T)6$%;I`uxX&bUc=E=Wf`LBi_+sg=+||L%{8ckR}qeTl~+y$ z^am*?;=UL~@+bdRBjD-|^5MafiWhNYLV%{*Az)t*(C4<#c0v$;7!@K(m%MwV zj;CE&SLw{+{HN$oU5^6O-o@_mm)`2nd6oVU{m(v~f3vQCZ$DW6)PAT?>Hn36y!fO~ z=k#I?#J;Op-gN9w1qpV4nT{RB^1{smOM_Rj;IyFY8tg<)*HMp8KT1pic1(c(gi)ac zmlqMkkC;(K(p`+n zjyrY-#EU6_>WF0az`c9(-A49o_7xI^Px5HIj>|eUZ)d!3e@IeG$+i zpI`)`y<0X%4fO@}usioEL@cZuAL3}DSQw+Kd59y31)C;B3oKJrd2%i37scCS^RToe zHtH=;B8_BDRX<7EFdG5O5IK2xeis``UtSCB#RkKqc6A++fX%1eHxC2L6+X)@oo6=I z(ZpZ~Lo%)oQej+_)K*amMww?<5p|j}HS!QM;$Kl1oH(=S>tLuh$$a z$Q=g3lbTJ;@~YgVzv){~4$t8d)1$sF||RBx-L z+(zr$^~Vhd+GIOqv~X6L=?*L#Ye~PZMKiTJMqOJ7-lWT@*H4)KERBA%k&Y1ZgDMa% zcrM+{nJv*R5O;WYvByu*PY^nyI6nNDU!rZ`+e18|te-qTxFuJmZIG?rJm6fReSaE! zkA^0qqHz&F`*BHMrSN?v;tG65`ue~X!6m4Q@S6F=Mfoi88UMNM`XS+h^r8OZu7Ceq zcjk^u_l8I2egN-K$wlGAGyi>DdVkcN1rAE@-PSKA=i>`roR9BWZx6zMJ{b3}%4Yk& z8X^97r|taHhXaa$wZFUW^I7rA-kRQ@K2`)w@7;q_;mPol($i{fu#;9dE~du#GO{sp z(^luzffoq?DFjLdf2+rqMMv#r3KpY~bwYjwEf(%e=_4+78!CQmDkctTdLS=mf5cPb z<4zSK^H1R&AnAr2vi^rrv!T-0Q|&#W3%ppyidImMPu^CQmyb_TR0nbt0ugHaY$j&> zGdKbqRKwTfOY()ty7T|t&99?^Q1~3r0UsI|PIj7L*SL#-0XlwTU@(o_RAmtX69FT^ zGX@i3M}#5-h61LH9st{-uL6E}_wKelsPKZStI%A!si?n98i5PM#n1L&>c4yfV)=WN zZH){SoZkQX3*-MJWHkNHLq-#Eb8RtWbz^;bY4iUjZln;~==JlPjo*~dLLXue>FdKw zaK|%1M~A*hiIl=6^ap50L`Qf0WJmaqV2F{?2LKTmD%sFT7kK967c_xnjHN$Ys5t-9 z+W%eYMe3j5{_(aGJNC0*b-={J%Ch9;;t4e1sH?9OlYq><#?=%K6m*G2@RQhdtYvR| z>MsT{ml+~!%1^*!X0JWtHm{6vzcw;8`Y8ZM!m#1X_Q<;GOZzzCl0HW$WPYJ(`{9OF z`-AC+vZ9p$ z=%GdpWD%9jn$fZ~CE&`um7`-G5+7Ihphvyk3a*iHSC_e|8o8|VCg@>Cu0Z?r(MIB9 zQc{fE*eg>=|NUn1F|)_Rv4k*z?d|!Xn^0Dpdld#C5VEXJxwtM=iM)-3l2|<;XJCbd zl|b%fi~Ko%?Id;aO6u9Cw#q|bbnJqusb9mhIZ)-z;_u>l{LAVX-`|MnxBjI+9t{4- z4*&I?;2*`J)A@>cR_HImw6ierA%1Wy+G@r%c?_}Av3;4%Zhb%LktD7=Vq=1*Oz)R? zhh5L|hOAkRRzx>DXy~Eet^PYz&OJ|>(8OPa|}mAYNcgJ zbd&_woR2}d=NriD{DOf)kCtCzlps+r?i8k1HG9jo4!zc(<54?-J{o%dBWs5}1NNK_ zshoSi(=B6TpMT&qVAbZzGwh3W>5HGogB2|#mJK5`@Hd1&&s)!0AbeP)9# zdSxcrvEes|)MWmtUZ>H1V~}kUk^nI%#t=J>#r?a%Xj6A9or96R@sp0_#oYcplULkp zI;zZ!j#jEb-i%0G3`oo{M~E+nB%~}10!(~t2nHPeV!k~J`nvJO1cBt5AU#ZO3*dbQ zj$P~7=ODuxS78}a%@(hZm50fHO zqQ`w4!Q!UTr+H!u9S;>3=4c*I-E+bKTfUy?5ApzUKJx(kyYiI;fFN+igzb{-OpB--Jon>bLuMmhOyyyQo5kPO9KbYI5^%*zaEGN9@{=dAtKFf6UZ3T-97UPdWfcA(u&Yz~0E-&dHapMNGT$v1V`4 zSfr?Fk0yhRztMg66<6-)JQRVs7_iLI%({7VA_E8Cxwpih;7lEXI>`dBs;?fYo*oV3 zj-=H#I+?HnMbSuOYUB(pu)+GAxQIXbN2qyWBy%SqG0sz$x(u|*w1F;GP|%5 zVQ+kJSZyhIt^+aI;187smWGD0gNuZpJ7wH10C~j25rh;$Fq<(-N{gC*D?M>3a?f(j zf|_S*lZIvx`x;ao$gr4K=E)7IODAE5F5-H92g_6($J$9ekv>n34K|c4+j0~Z84s@= zhE6Hh<|xo@cRk2AurmCFH7ferIl-TWQ!p;VG*3b~H{32`aA*C|^ljLE4vJ|b4ASw{ zR2>1H%uu7(3zBSCRfM=>{Z}V8mr?pa%ln}f|I%CjISu5$z+z@?;$*33|8Lkt$o(2H z=bq{B?^p5KL?vT_g0Yq&KM;Tqp!t~Bm_{U+%#aaaNN^+ijE4Hz2bXxgcRDZuKIpqP z&AuJ&{_)c`VkgYFWw<5Q3R|_^u=q(Mao1!N&RPFWJY1DTLJo|Fw1T^YL! z_gYhY{p~MrqXjFu%1N9CkmyQ5WqY5u=OH_iIKIa$Q|*DMDfMpgQ#2oNMRSxR(X!+$ z)T8t$rR|`E=w07|1&v6H%ED_k;L_1uAKd84Jtp>5`2#W|9X6j;9K*xv-GR^b@VsoC z0eq3-e*AS0L2De>;Qw|@&)*pZ1xGzcGlPE%QUYVveg-Ll6Z5l+k1AFOLPD20rl9@{ zp?LEARqC;1!73|k@ziNjVk~{_sXrS}h^0ZwO*_N%Cg?WOcTd{eI$D9)L`M2j!<bg>yEOD&tT7+ z6HU$#)LFbTy-h%aFRPn*0G9|W(x1ZR$Ewn%J+)^E#*wFWwfau+4{(0fZU*Jh$g0r( zUyW0)SO&$|@7VABSKm(ht7x~L_b1Tn8hkE?iQ&kOE>5&#~*$w2r6iaJLF0QKg}{6XfK>q zXxI!>`aMN@j;dpg6?E2bJK1`i1>^s#?L6SI?%v05hwQzQEi>7&viF{u8Fz@=Et^uA zWo0WwsfbFp?7c!}A=xV`LXuMYe{Oodxu>4z_xgXHSI>)Ho%cDPGp=)8*Eyf-A}(bW zG8-2miIK?vSz2lQax=!_XO7DwNzjj56fVIxD(W9Ee17x#K39KDmOx6`kE20P9?Eu8 zmsSgsS-pH8e&?D@eWrlBi?{HvAH1=OM16HK?%ePC7B1+PrdHK%fv!9XtXnpHDHd&V z{hNRKhrG)6=R(iy3G^KGr+Yx%Pv}%s+m6LN&!)xZ#iO?;QlcYUs+YvE&VFp|r`~mj zEx^6;Wu|QD`-G_CU-{G0UV;M+Ys(FF%cbqhDQCY&-QVQFGn;)%#UedgQCxA%p7Ge? zg#N=Yp@@seu-IGOlNPuKL$-%YXXHnHbl_Uk^D*!q-0;I{LnET8iF&EpXet_AivNT z&l}`9P1i-oqF=h?UZ|34? z9wW)qZUJm@jb3>kKC!CSF%qL23Bi1l4P_^!UJHmEapvIebeE0iRmHbKE9q}%^E2bw2)*oRBz#zPjrVr& z?KTC9{iAH@-n(l+57nd1+(3i054}8G{?)xGs`A4-_wPj>Ws2V)z+bSQMgMVNJ`>=D> z=UJ{N_=rwge@~C$%YD$YjBn>(-Y)|Q=(Ll5b1T=AiqQ_|=hdCk2cP9_^}nl%#>MKS zUYgjP_RQG2 z7EJfZE=vCH5nj+VHT~|fsadCcjCEUhsHiUlF4voF9e94AzA--pvT(&!)H>^ zKGlZUIYPHkxYRgCG`_(LrK6e!!)z9EWqhVtEIJy|kqM106?C(qXDj&JOZkcUW97T| za%4i~b|%m8aG`LRkv^gQ(8WcN>ae%4puSAL;Z zYj3R(a!E%aai>FAlPFmANrlmrojI6^POV*frJv#E#{{RU+?-evaKR~|EuX%%r-Vv* zZ^nXtQnGv!vlX>GnIYO;;Tl_4-5VbuhOIT->CrxXgEgbO&+sIebW0$@yv4U*v2vkll{JzQhpGB-N!E?VFLE{T!#k?1U^*!`XEQ-?jG^?$MJk&MZ%2bq6(8pob zz_BCGyF#vvWqV>nXGzNEAwhFshrEKaJf?KLvn0=n5i*4YhGFN_Y;d1M-)#LF>6N{e zO)$~QBmyjLf&Xye0-c2ibO?PaY*(V_2Tqi_cX z6_-ir9$ic;>ESPRDgK=mOZR#5R#AVb6vzBr-L3g|Uq3K5vOlA+;;7^pPiwT;eiNDU z(p);zi_V2z&JDkC`K@7LId56_YwZx9fQlziTWKyl?RGPNclYtU{u|9vdQ%-odb^^e zzzy9pAEtCMS{G~w6ALlfc`v7hwxI2+{9c)*+M%{@ajyroQmzhh`4?OkrOp1CW{cax zZYeagQS@Vx)m zo|)`lJp27U&`G2J;l>b(ZZrgWLEL=*>CQiUm(BjcuPWa9=Bva5d)Kx5KT3M2Sneh$ zs4ER|^A+LnVvR@o3y(-!ntXiC%`3 z(RV15L=27M-Odm96FE3e6ZW1I(A4$m?!g?(xz={$-mBRkcS>Hd$;Riz5Jf1zB_8VR zWWn&gs%vjkU4PZk^nxeBzEcw$U#J+vy15Z+zBI(2$nA`rH1?5rVj{dE{C(eVT5QmE zH_#h;X!}e4zx05~((9n-$<*!l9iVY)Yx5QK7XTpnN6%D#1?m z{Dt-X4{0A&dhpzi4^wOI{_JxV<2D;184fvA5xxnGR|< zTr>3Z1zT7B7oT$U>|Q1#t*Z~#6AfxMItrGzT-u)eO#PklG0$rKo`Dsb*?>_3)osvr z5BUGkJ<6c-c0O+2X#OF`KYyWX2mZas)EVhOhR%=$%}HLg*Jd2V3f~~tbRG&3x)XR} z)-dc$iRSB6X0ls4)nNrzHDf+(?msvsSvW|3VC+(0`3zsoz@kow4{==St<98xOm*(8 zyt`G1!EB$8M=NnT`QnhE4(W3lelp%SmLLmKnKJyNdh?6}aiu!>vBGKE)t*L=u* zq>8%8#HW+V=uza4IM~IAhK&r=)7|i!nYlrku0*|?(@`qA_*BfsEw=EhIw$WXZU3pP zhx(J!F)D*cpNkYE+5~e5AGLK?aqX_b@spiM3R_m^^n7r&KOs=f+g_EyV2pbGS%23e z?$TJ*M%m3A@m920@@fvZ)K zbvR8YM+(#5>L{N(-#id9@1JGRijO`q|0uCln0x^pyj)6%D8ia8y)q4ahNnNsH8^ zxmAQUcRZi!t@G-wdKc6y`?=j4%9Qz+IjkYKZ!eT34NH6b^{n$dE~RhE@fuWejf3AuI>vN;UCg!k zXgDcccj|ExxFEVZfel=;%Ww-%Y`xw?hvfRO;EdkAa~DU6xKr`xZ}ov`*Iube=eIp< zFLDv(z9d0kEFNUk8b28wv4owOHC=?Nef|85;jG{*!Zb4k8I7V8Vy>2q1X*W{qrzt5}+Vbw2h zFpnvarq4Y4=GDuA)+pz}kKWf`=)5{-W;tr;)}WklW1v7SH9}EUW|b>F^}&f1-&3+j z+6~pG@3|cVH7QGEHs{5zaz7EED;9~pQgT1G>T|i|6Po~g&5D>d>cN*CK@Yof>n2p6 zmE0%cT=43+U_htYZXc1B=Sn4cyVFB?QN9NZlnh*$B}y^vYac=xM5N!{W>tcfj=dO=Yat2~F3^o)Gq|VS^hxvw^GTO&Y#W-jcT1N6+X2hgZtBIv zWzMZQhTX7tI5eVa*d>J>*w!TpIL#F%)jb_xQV^UG$`KhCz;J_H$T@@zke z80pWQhTI`xVpL3U9>=c~?KVGU|7g=gkdXLlhdd6}oR4(yy%vqrlZFG-+h^`3fqmVu zESn>lqg5je9~)StijTYw%(-PdvKA3zaIRLDx2VhDTvAWgHTT2^91l00M=<%Q=n8p` z_WW$*C&G;t%U)+=PAi3(c9M@M^ z{IPADL!8Df4QmkMUrm;TyH94oKlECp{mohe?>wB5Epu^m(SE9D$H@pW3VJ*EK4Ott zjOm2L_2n1_75v~Y$EP-18M${7?bDcwWP(@Y^g7-=D4bI{UJZG~=)Q%~yxThKrsF3c z+_k~P{^E*LE>>Nfz*D1pfxkN1D<;SI1DzE8UP# z9L%*Yvd=iSk5$?cW4&rIs<+{lOBnFiW&^zGGEiXusCw9-1CyV52VzT*k zy~`H8qBQ?$8(Q&(9}mC81LQAq!7dNBWAQ3KwEveSUU>B%dQH^UjF(3-6 za=Dxcj%}&nH{Yyxi{?MM9dTr`4swK$p7l7_84z=sh&}JK)}wdmntr)@Qj^(aQ`A#K zqIsRbtd}!KS;Q5oP41i2i%>eMjz<#8J&*seJiim*DHnRylPg4$(MR&Sl%F7HP-K~H zZrSHFMoSGJ^4=ElRl&ti6jl*h`E3i8TB+KHA>IL5SRASTK^$!e~#C$gSpA6VfU@Z`>$mD{5w% zqd(d6ogi?0;MuwOCyw8Y&!@yqvA4L>YNha}CaKYO*ZyQKd%Sq<#?P$lr>;sr9#^A@ zk=oEOTNyuc(oSu)$>6EhCpm4#<^h=sp`~(t;nKLX@0?z&HvO286es=Q+g}$zq({DZ zKb06F^|;`RC|<8_o2mAU7k9pIg1ZC{4_T-r4Qb*A>!4hhQHyz#xF-X%0@I~5&m9kG z=8hr%#Hnj~Gb*b#Z6f|jwj}}n!eePNPQ1jXZ= zxAlomyqo0^H|n;~91FSP8NdwUzb)c#%5}yi;=Q)vo66D~l>8|t$+$Bn4Zfj9}~<_Q45}` zBy6xbde*7!$FS~}Q9G^5`}FQf3ssuLkvF0a9C6^zvtgrt zJyKzr8C7;PU0cm2DVmRp{O8ZFU&OWH{v=`bJnDiLKOQ9i^D*XV$8wJ^8>tlRM1)VV zxh<}1fkV8tE8li)wL}uoIvSs~ALz$TIwc=I=WDNV+AHq)>O)T7idE&{WL7K9ENyn; zRlzbx+txdYv|zcynd2o3-}L(?2^_fGPU6-M1>qMeDSW1k^_^vMJhr%+I6s4jZGr$Z<*W6u(u>hI?7Be_X@Y zh>+TCwl&o=av-7SAwudE^c%0oSVIS5PKRXo6DqD(Uz((OPYls2=_zBo+pY8rD`=H5 zc3$+}{9UWN-#{GFJXe>MV+6k&l&9tw8Oq@Km!@NyeeE>8dg`Nq?bgmaCS~h|Xxd=+ zp0Uxv;}_g%B@8@fW+TGIXg{0~s_h=_?%Jk(xcrzXPDEIU>Whxv##-xJ@LdA=>^Dw2 z&zt%yx2z+iYzd#GkIPeM2H(n>_KmP3p~%j*j~sp-Vxz4V7b+U+olf#I+Ix&e<5G0w zcj{429x3giDb{?y$wteb_{Cj*wTIznx~~`h)OPsmrcI8r)=8D+$m1=2zr3#S` zAF0+0zwKq<`;-ZG@jDv1<5}X>C-wF7-Ywy2YNl7`3h{QBMJep!!e4;g!=se-G%kf< z&orq%Id*3b_dCzyR?>n5Ua8GWJ37N~sv6JaW|9&k*dsR#m=y`nwI?34`Rq`_j6KX+SszR zRDNJA5!**robISI`!j;@$Qy<2I{6HuLPgf?tL*4JHidk(eSC_cAocTB zzTES?t~+_UU$k^*6?PhW@8FirYmnY;$c*k3^q+2GS~I)*h`3n>V`hb1@XX7ZW9HtK zqRllPao*hz(?hAhH^_f!(ER0N?p6DR5P~f}aS5AQ(yckQ<@#FZ%$&g_chQQ+k*w2~ z+kefMeYlggFT1MJf6ZV)F9e~TUdW?PA(>u#heCF6H{LRhK0yZ0kzJWA*FSO0&Fy~1 z=Xd%?y;vfL=sJZJg{nnco}MY$Zc4T&*5Y|65WQ=5le5=Zbm!x7Q0;TFj{B?FV9#40 zCS?1(M!x?1_Td95250gtSwhN1(yyHSn*JMx4Da7f+CeEkK zMEW{2(I1b(?*0sxFR~iq{f=F;{a(hs%C~=$Xhfo?akb`U9QKo*`0>IIvBOsi0R8jT zV}{UVuvxjOwUht%K-2!Egc%}%yEAF&8T86ezf4&W@x1gcsIx0{2+(;j*H6o%45@V( zHBnl-?@&2$pV`0St-!nU3tFy0Lmp!hPG0E*x0V=Wqu=e$X7ligV}eB-cUk8^&vYi5 zE@f1ZjjTL##Ziij$4TL~ryfcZZMglupr*wJB>wX)hx+i2QeRotTdQy17l?6t@1G04 zTdIPKOGVGz*ZhH(>;o@<*BolnJ! zboI8oQ@>=@1U@A%37+r{4$Gw0C5hL&*ih8{aDr_s0 zw@{Z12;Iv0PV`Lo{c|DOD?0oNJy#XxiP#{wYx+H6p9%}M5Sq5g6oh{C^nZ>Uh{@AX z>>IVT&bdP2?y*uyKRm8T^!&xml#c@(KX@*O`p2h+8MW$?kz$`E3RRw$R%yP`J02{l zs3?yqy(?lZOqD&DDz0Ily4Jz(=gd7`_-ikBbVR9T0532jqtVVtX(Iis4U6e!F$S-i+`uGvi}ZvJePIoGA)QB@|o!s%_* zCyt+pZHHBu&N}gme9P~=sX1>vrQX7vZArw#@k(CKZiD^f@v;w(xR0$Fx22ApeZTos zaoF|2ticuSrC;Z%BnVbMePjsMSF~9m%#I;ESN?sNfl0cUbks(1j$q%FSNOdN1OAH< z_>*6t&oCgKPH4}0;mhFvE(7rs{#WIQ50rzZ|NK{l$>0lvK>w;d6_WB7Jna6}0k=2` z1`>Tt0T5}v2jb|NS^80$Q0;O(cNv-)HZ1Ba(05L(Afn>wrztWn8ZA3x860wAXg*$7 z!)dmMqs(7{irKr$dpT6Tk(T*#LV20Kb@W0Ksoc(`SD&;8xx|ZUk9!L4eEjhI>l>$y z4%>!W91kMB`=jC6fo0Q)Op}Q%MNy7ac0?+tLJXv=OfPaqJ)v`Ll;oOU^TmEPQys-< z;MT5xjBDX?DarHsA2;VK1*9fpXJy9|LRp_1@fz|D@`gp#@Cp->EHW7gt<+vpk$kos z*sK}Jchg#EsF|MfS*8HKTGRS`jDgVNrd67TpI2^ul>Xh2m8$m+W=*EHX<1);o@ULT zlKRl`G6v)ypmsvCbhh&9&x)O1!;#$l+LYcXg|{26cOFfj8T1vdUOBJ*^O-|W)J}z$ zp1kb~rEK*Em$b>VxJ~9i(nI?1W#;l(CgyUgel9g?P7}&4c__-YlAKU?UNU$5)(uw3 zn4{H%iqhAb}2_TAW9UXm>cg4rTUWaGEH4u zn#*#qNc$Wh^1*B=_qMDUyW!-yVUGzBhQ;-3Ao7tlOiu>6Ry77W)tad54028E#CK;! zh~sj4A28OL@UN9H-U@p15$jh#4e$I-aAo&vQ>!kQLE1!Z9nkeuEvu#%#2Jhw(ax&{ z*55&ey2(*N4+Jh1)G<~{^D!8)X@v9Ts3J^vD6|zx%ZGfoUc1 z4JF}LSVqgs>`wy&ubEa?W7UUKJK4%Gt|$c+b_ErwShwb4Jd-Ek)BCk+i--X5d#R)A~=`_W%H$2a%^*65bHVAbr|G=r3J$(Fn|FeZXG5r1OhF9~`kZ(K7#mh@> zrCb`4lKw7j@(49gtl*W|gK&>Z4l90D`d1jPxl3IlhKhI8 zPSX@QC@&Uz@iaZ)Sosm`#C=(6yV~N%wQIgEWlwJJJQ_6}tDF7AOSpB-*8A>I_(}6T zTVV%V^5{bPHi^nGNJ6V${e#H+l-=90MfaxeDeQi3#62%^X4yu5Zlm35^Gn0Gz0WX= zW8SKn;9_7@??r#Y#G=CZBmRAB@}x$9-OmUID*kaWU>_Y7V+8>XUDcC13c4DqDn`bF zI;y)}h?Ij{0|5--7}fy_x?-d-#Y_(t1Kat6+|d?34pTS;U`Ij+ z6M})w9}WY4767(50bxNQfxRsco=&GOq<$4(#R7liVCc%&|DNsv0SkI~LI4%b+Xdux zur2|hEtmYv3EE=FOb3pgA!LU*ZQM3LSU+}zc zbIJ-3(5`r_{V&e`JU@t#^1Qqt4lZ_3i%!oM?*c357sG226NV5fw6&lAVJyinr~f`jtopw1^A`z7ro) zqeK~kfL8|jf^;CLI`L#xu=6PZdkSa&>h7P1nhqt_2vDTaFr7t9&JqD{TnhYQg<+;M zpk)3DX9JHT?bphV2AWt4G?5(!_k|HT&db5h5rldPvC;%_L8IY60ifJ4zyW5Yz&~FB zqHbk#L6K7;0R4akFEdhDP(Xda?#Nj)_qe$~10}BjJPsI^7aMApA;`A3&&4jM0vrjf$Bmk%y!nC~1c_#ns1R0ly2MJ_zZxGHWSFv#8e&kR70O~$d^_yIr)FyVzf0UuKA z|3c~@=Mg2$4Sxel#{)bT7@i3~Y97cDIW6szL_G9rb238f?g*fxX`tZUv2K@ThfZ~b z?Qu~MDQ_=o4vIH*&!l(`a7?lH!(|+JQz6tW6@TD&FBN|WkO%5Pd49K30tY}p!-QYv zPQs|s+IznOe~lbEu=$?+EYQ{gqW#O@f1XAW)X@DvAD+mOYe%g(Oo28wW5I8{ZW4zg zRqY&r8IPiKzt9VgK*>-6e-ehwB!!x+3-MNk__#YB(!JzLiN??m;_0y9g;d{Z)Nph{ z>U_G2ay3vMx_7`XPAeJI!~-sC?x+AS0D>Asume1-j}+$a4DxjGwgY}f4wPD|7El0S8aVJW-oWq>AnLBu z5wyGwRlOP!miRkkWKd|(dvrR|)s}?U(8wyy2-CXU6g>|`H=e#b?CJ-=+OXi49ho^Q zAR5)xee`41CQulfA(s($RL&y9X+!LhgSHoM{~7|?hnaUNPA6iqwM^lFIkw=xYo|CT_gS!kBA1?}0J zsn9zO2wT6B6B;0zB{HpcwC5y1B*)r68vOI{xu7N=Kz)UvrbM~@4HZSF+K09EkpjpUnDCpxXE184F$nAd@w9V8&g{%(ki!CaRhaM{ zUla5|VDIw< z8TbIA9F-HN_-(;kCxGdPF!X+2f5Anul9nbN2ci90j$oLJ`k# z(Mw&sGtz$tQh}A7;g^un0jY^j6pz?ttUxVsJOqW`JqRTZr6m4jl{;$zG)w{)UO{)c zij)StC>Z#~#R0k*9rES@CGYfmQ&>9znZ`4n+w= zC+RekiI*pU;jeQdUrbcE5^Rx3%1Gq8HbSd_Yb{LEHwMAjuBA+N`&A* zX30DR483HB9D4KNQLZ`wp^wno{H(u#{<$s%53c6ASo8~H-~52x3LEbJ1sK(^(Mz=g zlNDnU1HKQavJa!8Z0dQnPD-e2RvZ_8oB4?X>gDzK!d4sX=f(tGayala?b*Y>pc^?r zP%Vz5ik=rf0h~|-e=Wx&q-2PfH#A@b3a#zZyu>IKsZ=Sb&0u?sc_O*iItH-G7Dxhwg1P=jZyMi(D1K-#cB19OnYI^9=Y4%Y>nE zI2x*$f5e1$rbiY3Eg8jfzp+*_wFcc#nO5MdB z#b7hUADJ_b38dsfi7*Obb>cLmNWe-0bZRl|%Q>U8wc| zu$c%hM6p_ASR;@F#N81XC^SAC2by#2xS0FN2VuqWx4OfbC$_1g9N)6H=_RohQg~@01wzp>wG|+h=v4t;Pr^oEt4j zp%>luZ4)DqH`MHPad$!v&Jk7YhFYk-2=^kA+Wr!ZqI;e1>V!fMBUKPC8hmL-Mn*II zFI&?&p~vl#*zi*-vJ)lhkYTdC)wlQJbqJeUd>2wCT35s)smGKjq5dKqc++{Y8yyX` zM#^yZT7U`We%M1%7@|`zQsSS3B12%Jx&U+PkcFyLPq(lQ@DdRu6>~qz8eBlAB-QR^ z^Y>8i_a}t$1`Qy^`FNlj@6vTL$V;H0D1swmY!D^t_hB}2VvIz?WvF%knh<^u{x*b^ z2#gClM}!jOjx57(FBz=X88nQHx9=_hOa(7*Pdk*tK9eLd1Nn88l@VlAQ#&^o$Gwvh z)RJR7F^G8!AlyW-!9B;2GNC^sn=nQ~Ml&|TjuK~}JMb*RnPdATTK1oN5PuT=!ov-4RCoZT7lQ-g%#mjL5IC^n zecT=4QZ~c$DMWc*Ll3oaaQCx2{dtbfpy&VoLD9!$FZ79$ofnE3;bI|+4|T=j1JYCq zri$U&e^&*>4%l2#xdD=Y%46{X)mUKfhr|8zXwUzvYBW%E)lC^(es|3Mh>g-P6^t(Y zs|t)>2w8`1M&$+58gcVfB$c) zL2(TBX=;lScnNs|_!SrZ<*(>yR@|0|_jf~JB!Y0@wUh5((Xv(iJv^aiD5}+PX>IE! zG%unZf-af!4J~-@C?18{w{Th%dKL)vdBJKtcsqwP^#NrKmH1}HjRc!O?+VbsdjJ=I zpeK7mz$g~cnVBch!!0E&c;rnCOms-p5{%m77)T7jNh928`+#{U61BckUY`7m256}U zf;R1kgBAj4;s2&Yl`N6=FDoXW_V z9fn@Z&@>v**1{@mFYwVa|L0deY&A$FyT64h93*(~lVO(NkQ%&EEC%~kGwLObeeW6U z$|WE|kK7BgkGh8oXx@a$15=?1XaD=$KaVCcdN824x;WT*gE$l+5I2yWyPgL+HU3-o z&nSMN@p%Z&=5^A)s|PvPqf=QA&8%m54vetZl)7%ty2JosQbR@n2Shs=k7 zQKu7zujF8+QrKzj!TNWVpg7++klqtk6Ru`M&qbN_6uydsX)|Fpt_gPZRUpe63Qs?n zSrS&!SmHQ@4wr}%o_sKIA*>O?&V`w;LlYGJIxDWXcL&K*}gJ&Pik|hqqCKNoBjUs6ng6s4^nkQI6zi$K}DEQhAW{x=pQ(K|Pzp4#6{$K_c*in`dLyt#HMgz}2m}~^r zXf+Z)gpE9-3w#9!Git#0O{>Hq6(GxC0*^nK#Q=7eo{>V2N1dbtVY@mIFXg8W<)-78!Fdlm`5{-GLbQu=2JXC1dXzAVRJHc=Exx<*>>ifjlZQT*Q2Yd2k?x zH>`+_Q$YE`Fems2!k@##4+gx3-S>wT{{=d>$ z`HQMx<9)%y560PnwI3VJ{t}Kf+7sf$`V+VY)_5|sKv@q$3?Fpj3^o*iizVh>R2Ot5 z@L@`1{w@KH1B0#T5*GMJ(iR+tEZXV8_Vg6%dWrT4V>Wcx`NrkWWv;Fbu`-`xI5~iCfSlRAt?b z(>O6CZYWEmEmh-Gjk}a@PyaBsvIE>4zu(KVEw{a^le1}q^|)b~NLgY~`_kfZ!`}AK z{E2Ogl~herTdioIlEHyt!%jp^4p6DH5}`w(y@Npl3{%e-Hj{ZD><=Ad6!B5`_6QGY zn!)?a?p2?RQ`}-8g?e-an}?~n^K;}s!jeA;xY^-jE&5Qh>*8xxtdc~QHZ-;R?U77Ry!D<6`0bIf z(C0AtPLpt*VL6Ve4)^iZ7(XfttGqo=@dZ#z0|W{H000O8xP{q32Cw!rr~&{0$^`%b z9smFUO+{2eElEyBFKTaYVRJ2EaBysCV_|e@Z*DGlZEUSnU2ozr5PXJTv4{F_l}I3< z>RO=mQdHVhe5JhulqSozE?Ty$x~j{zZQHhO+qTUv+qP|Y*|yEs>z=pwzGv;T-yP$= z$dQpba>V>1GBYyf{NtZr%y5uLw{od^1l2x~I>GUto@oDkWYtp{3U~b5NjI0J^XbiZ z4u9(62uXWQ`wI_Hxgdr;182?Kk2+^>Z)ZdHFbIfF)HPk!yDP#!y8y5=Q5zJoK+5!bvOglW1NH^BYPnW<#W~gVVo#K5- zMe$X>n(B)&Z;9Np^2x$S*x5`65 z`wUFeKKrA5>43e(G1IWt{IZsw-*G*_VAt8N+-55Sq{dF+kVHaa_}&-RWQj$3gXJR* zL(0R`Y0f6t4?FlqQD_aq?@Cpf^a-^jS)zZhqouFD^ zy&wh7C=SR=fC~@ZJ)@_~hLmrF%v5*Jz<>&O5J(`Q%Zhwd$e1!8DK;dFpbut2OIfi- z>at8eLlHAxuSA1&xr@+roNk-?jVJOojd_bMn68N16N1{S1~qIonl!SHo3%RiOC7aP z1hp8WGUR^LJAN@`@#00k^e0!57C! z6e*mRI_~@o@@@@>Q0J`pcsy$|@2M!Ar%sd-Ey(q+b6bSXlDT|Pxyn-P=mGriecYtb zqyP{Z03Zt;008ArA9pf#bfUI)wsJCeGPcpTaiVe6cPLVG)=FAm!&Z=!XzwUgdF3`bx-~raqRPa^?J$s#5tq!p8mOh z-+8WX!H2S#>9;Mq+W=|a3lDtn5OC0B#FmUpW>@iv9s)?#3KPju+-d0EcGsO1#2eyo zghNI-YH4BbkK)3=sr~Gqr3JjgC)2!j)eVoqHSpm$@q|Uub&16%qaKARnGSClwt9}P zO_3nL1mTB~0avrSg{ZLAAA7WncZYW}ztZ&~5{z4|(39)+VM1^sBL}+WDKOCg(~Kx1 z81v1gqOn^Nl<#s4*Uz5a`M|j5;QLzMjaMjLP-tfQo83!fDUBlIji^ z%Gu9LJ>$UyG{Xz3*VQ3mLQ2^h5u1z*0N@N30N^=P>Q|qM77g7A=cRh4I1X2hv|)$m z)qWH-z~ww$bUhLa1&{#yHiI}qgBYHqCfkGiBx?RH+tLT;z#$(ORaX**GF)PgnsBUXgauu?FV>^;S}b zj9%vNTOcZQWcx)6>`*vlm0|Q7Q;*0<_2QVC+-Vh2gQ>(c5n3hZ8#voJzF&50up^Ir z>@oxuq?V>s*~wvSim8)p;_b8J@ca6C`rys-`@l$CY#1E=r|0YL(M~^EVbUzBK5^km zuhDK08^&_&#@03NHXRrrvPJAN-(p0p_YmS8(=iT@jlw-H!KGLo^p z?s?!YOE5kpYh{+l3-GtzV5w#3JLYu#6Nnv$z*dq_-;ek8NcnLj1z^Vzu;_t`kqX;# zXuC2%bs3H4wk0=)+6AKHa8$SvE^9yxlX@Z>h=+MLamJyR3D5V;;ubG^S8~ej&1=8< zIDPjXA_yOlh>{gTF^N)9z-}uPy*$e?$3>l2u`RkOivDfOdx$yXxUwj5fR_2)k#f&W zR8g|>ieIkGtf8yS%46ri1*OUgwKi7NZyh7jEhm2s1T4})%=3Lv4_8#QX&vA1OL>H1 zK;Ri&6&q-}n0?cI=VE7NZ{7#ZCxVjsg18&b8JCMYk`ejM8jtOI7cDS-;NBocv|0or zu)R(>)G-s^c>cnTQ+cTdH*lL1ETSp92#Q5u!Rh{05ym1?vQBw~ICaKGd3gwX5i9#$ zLdqm0wPamQ9|D$QfjxOXZ4aX8nwuoF^6AEpf{zr1beq zsrFD$JI1#4+WBt1v3Y}y{0-C>cO#`Bp9$vOv9-yjYvdk&c;pU zN!+xnTkSAeTSJHEx_9PVG=HIv4NKbJoKOz0l$Qp||6}s{qsQJi?3qxbxH_ z4Q3l5Jy|XNh?a|2YY7lyQgSt!$)X!V-NbBIXjo(2HfRDv@TlX0R*5V*G2r;#Wo>veW~0^w_?VfDym_kDr0D`@420TH z-|&p7Q$XKL*+gumYsSa)qMNhA^0PA8W6ln;RMyXsb#dv{WMRN3)T85AzN<}99%i?8 zWNz%z1{x3aB>2T z{j)E#$e_*-oSU^M9A)v2*028nAMFVQ^A` z$D)2NCX{uxP2{JQ24aAqUbde~SZFS*A*-2rJ8NXe!f1#&t|+ ztsE4V(w#OrhzQU$I;c9CDET^C(>0^h|L0GGctpcaotV`M?z z>oy1(bV{RNxRLVyHR`cqPScI8u$t zeg#uig(bS$zv*t0Uk5W-7PikNJ zg_H`FuX8t^OtnNQk-WC1l=WM0P~InjdcekE3k_T$?z52|sR0?WhBRz$065n#;6KE3u)e%@v=K~(CN^?k(IHpKQ2(t02Y-2C|+BSSlNmuUo*Xv9$pt%*|Js$ zlH;c4X3-X%>1(|R9mY;)#o7mpt;+F~1@A9kV9Q9oe!m z4}%f7@y8MhSW63PxX-V)04S^)S}L!TAwih$Mre-;l=EqeF@u$p4DDr$Yya8E-DOdD zUhew#U5OP;rtmQhi9w0#R%s$rq7Jkn?)BWOrckEf<(&fr=CG)?C6ag{A#!Pg1Yn0p z_OLqb8Dmpz@0SRE(rAsgboJ<}{S#1=s9XY2OhG5#8&nliP|aZ(&7@TwA&sIi9CYP% zJX;={7$3`cHwsNk92+=!^9}2n^$QU9s%uK(-@*YPhmHyvkF)tFTbha%sohw;le|{Q z3Iv=Z$BXPCi$UlutD3YiU9w2;7pVt62V$oLXOv>@FZt857mfXxu1>YprZo`vUMnmK zNeWL(XPf3b*_wE2<^5g2b0IerX(}K6$lXO8&obt7mgeWxFN(*Y_Efia0yK#}!aTg) zw8Q*M6i{sh6k&qzr|!~_;{%G+S1e;mWFgiU&-Me^d%c%hHD{(e4w_Nr3BSTE)(gFz z$u9^r0=o}0z?F2Of`A8oV8Zda*t+E1Z|$rF8GDYXdCr%oP=xY|$2sT(8K)c=rGOSy+HEH&s3)pfzPbfQpMZ?M zL5VtNM>0?92m&hIwAL1gt0)86Fv*muAalr3fPFRFB?+C_iK~M9G@V!O$3* zO-G)q!@ zd;MdJ{zJC|iqRQJ^E)3g|Lu84vT4w{ET#3U8gl=g^W<6}@*X^I=+w&MTM+a2B`^Ne zAqv%!+v+Kdb~$VOcf`yR*psL%NJF|(f5!=RRL`;g7>KaE%O4l2f!|b)$%W$3drG2{ zcG^4Ophe1nWtH30npJcJ%ns@Y$yBOXidxiJOPyWq%uWknumSfQ#d?HdcTq=LbsX== z#F;p+TbKo=3Q4Ocj=v{@p|%>J9)4~(qP$)I3N40n=lESjsCp$dxG=U`w6KojCH_Zo z9Fg#?I;~4#zD>DTD~KZl%g08$q4f{+iPj58vY^l)drmWn6y2l3kf&nZwJ30~>`)6M z9TF6_RPNM`ul4t6elQ^@Mx($HO5yWA=h5ZyxNDqH!0?RqRU@8 z#fsklqd&9t zlVUOr@1e?pH@|yk!*8V{tQ>646{O*K-8M9V^7tsB`9*f;l$Zuf4JNz%hUFp?Vq|8p zDEqC7fUmHA3y8;WDP$x+#}f!cPLtQE6=B*dY1)nAXi%nV+;gdQ7tMBG9Vx+L#IecOWBp;9uv7we(9S^~M<5NjTyuol#Qa6)t#Tp)OyAsqt=+=58% zH#$6Y?xjfwrkoc1{M|?sqY(01%3&nLvdxeB&iJSx48Vfgm=oLz`Kfp7bZy zF{Dh6%he;(46fqB^9Q#Jq4A#_?^Cy?(H&krpzAzm(xR6U?-<2uJc{(mJOrYdJ*x?~ z;qQCrUxoVP1>NB8gy3jDlmLTj+;X-9hQOa%1Ul!p+Ukz*UC6{Rpoi`;al5`u+-=km z@ilg=4sW=G6~9-{cA&pmM`S8NCdoS-MWMa31NFjg#wVCt?7CBOP;(-TYEOr*QvO!m60XKpSAr45>@4H`a~uX zEuK0Oo@=RiNEH923)vL_%;?{KV3%=Lrt+GiGznt|1;AdiGjJRJXArKZnV*-$Bz` zYc;c3A?-4Gp7Ok4ATdAy@#EwHaM9svHr7oUH3-nI7D<`0(&n*n@Y-wZ3q3FWlUhu4 zzpE<*Q^0+|8^NKCbVG%+ycmm(kdrJEycON#T)7DgrE{q0!d5nZ(NAnNh-?`%))$7W zw;cw+ZYbmf`pJ>-t|tC;0O+NS`n4jOzS?R7;AM`d6DQaevk#3_g8 ztq0gVB}~LJ-G@G_&WwO}@X$RPm2cN;^|3)~zw&L1mhW2pGO~j%KG*9EM9o^__Vv^Z z%y^GTaV)`Itjl3+YmR&Dwtf2O_mR-ox$≠Ss0X&r9DHV;^UqZN(vAuXmP+dt^u_ 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 z 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≠AbrQA#>dn!Pjo+ftq^|R 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 Fe*mBxGtdA4 diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml deleted file mode 100644 index e18005eec6..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - org.ow2.jonas - test-multitenant - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-war - war - - - - ${groupId} - ${parent.artifactId}-ejb - ${version} - provided - - - - - - - maven-war-plugin - - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java deleted file mode 100644 index d846f575f3..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/java/org/ow2/jonas/test/multitenant/TestServlet.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.test.multitenant; - -import java.io.IOException; -import java.io.PrintWriter; -import java.lang.management.ManagementFactory; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.ejb.EJB; -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.test.mutlitenant.Author; - -/** - * @author Mohammed Boukada - */ -public class TestServlet extends HttpServlet { - - private Logger logger = Logger.getLogger(TestServlet.class.getName()); - - /** - * Link to the initializer bean. - */ - @EJB - private org.ow2.jonas.test.mutlitenant.init.Initializer initializerBean; - - /** - * Link to the Local Reader bean. Bean will be injected by JOnAS. - */ - @EJB - private org.ow2.jonas.test.mutlitenant.reader.LocalReader readerBean; - - @Override - public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - ObjectName name = null; - try { - name = new ObjectName("Hello:type=HelloObject"); - org.ow2.jonas.test.mutlitenant.Hello h = new org.ow2.jonas.test.mutlitenant.Hello(); - if (!mbs.isRegistered(name)) { - mbs.registerMBean(h, name); - } - } catch (MalformedObjectNameException e) { - e.printStackTrace(); - } catch (NotCompliantMBeanException e) { - e.printStackTrace(); - } catch (InstanceAlreadyExistsException e) { - e.printStackTrace(); - } catch (MBeanRegistrationException e) { - e.printStackTrace(); - } - - logger.log(Level.INFO, "This is a log message"); - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println("TestServlet : Hey !"); - - - initAuthorBooks(out); - displayAuthors(out); - - out.close(); - } - - /** - * Init list of authors/books. - * @param out the given writer - */ - private void initAuthorBooks(final PrintWriter out) { - out.println("Initialize authors and their books...
"); - - try { - initializerBean.initializeEntities(); - } catch (Exception e) { - displayException(out, "Cannot init list of authors with their books", e); - return; - } - } - - /** - * Display authors. - * @param out the given writer - */ - private void displayAuthors(final PrintWriter out) { - out.println("Get authors"); - out.println("

"); - - // Get list of Authors - List authors = null; - try { - authors = readerBean.listAllAuthors(); - } catch (Exception e) { - displayException(out, "Cannot call listAllAuthors on the bean", e); - return; - } - - // List for each author, the name of books - if (authors != null) { - for (Author author : authors) { - out.println("Author '" + author.getName() + "';"); - - } - } else { - out.println("No author found !"); - } - - } - - /** - * If there is an exception, print the exception. - * @param out the given writer - * @param errMsg the error message - * @param e the content of the exception - */ - private void displayException(final PrintWriter out, final String errMsg, final Exception e) { - out.println("

Exception : " + errMsg); - out.println("

");
-        e.printStackTrace(out);
-        out.println("

"); - } -} diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 08a16ef3f9..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Multitenant Test - - TestServlet - - org.ow2.jonas.test.multitenant.TestServlet - - - - TestServlet - /test-servlet - - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html b/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html deleted file mode 100644 index 30856baef6..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-ear/war/src/main/webapp/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -

Hello, World!

- - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml deleted file mode 100644 index bc81b09d73..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - 4.0.0 - org.ow2.jonas - test-multitenant-war - 1.0.0 - war - - - - - maven-war-plugin - - ${project.artifactId} - ${basedir} - - - - - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index dc160c81ff..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - multitenant-war - T99 - diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index beb95422b4..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - multitenant-war - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html b/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html deleted file mode 100644 index a739f4358b..0000000000 --- a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/src/main/webapp/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - -

Hello World! This is a multitenant war application

- - \ No newline at end of file diff --git a/jonas/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war b/jonas/itests/applications/multitenant/src/main/resources/tenant-war/test-multitenant-war.war deleted file mode 100644 index 18cc1679f6c46623eca533b539e73cb560ee4b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4570 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 XX?<-<((eiY07)Nf5 - - - - org.ow2.jonas - jonas-itests-applications-osgi - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-osgi-datasource - bundle - JOnAS :: iTests :: Applications :: OSGi :: Datasource - Application which check JDBC OSGi datasources - - - - - org.ow2.spec.osgi - ow2-jdbc-service-1.0-spec - provided - - - org.ow2.easybeans.osgi - easybeans-osgi-annotations - ${easybeans.version} - provided - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - provided - - - - org.ow2.jonas - jonas-services-datasource-core - ${project.version} - provided - - - - - - - org.apache.felix - maven-bundle-plugin - true - - - org.ow2.jonas.tests.applications.osgi.datasources.DatasourceBean - org.ow2.easybeans.osgi.ejbjar.Activator - org.ow2.jonas.tests.applications.osgi.datasources - org.ow2.easybeans.osgi.ejbjar,* - * - - <_failok>true - - - - - - - - diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java b/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java deleted file mode 100644 index e1a9482b84..0000000000 --- a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DataSourceServiceBean.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.osgi.datasources; - -import java.sql.Connection; -import java.sql.Statement; - -import javax.ejb.Stateless; -import javax.naming.InitialContext; -import javax.sql.DataSource; - -import org.ow2.easybeans.osgi.annotation.OSGiResource; -import org.ow2.jonas.datasource.DataSourceService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * @author Loic Albertin - */ -@Stateless(mappedName = "DataSourceServiceBean") -public class DataSourceServiceBean implements IDataSourceService { - /** - * Logger. - */ - private static Log LOGGER = LogFactory.getLog(DataSourceServiceBean.class); - - /** - * H2 Driver classname. - */ - private static final String H2_DS_CLASSNAME = "org.h2.jdbcx.JdbcDataSource"; - - @OSGiResource(type = DataSourceService.class) - private DataSourceService dataSourceService = null; - - public boolean testDefault() throws Exception { - String jndiName = dataSourceService - .deployDataSource(H2_DS_CLASSNAME, "", "url", "user", "passwd", "dbName", -1, "serverName", -1, false, -1, -1, -1, -1, -1, - 0, null); - - Object dataSource = new InitialContext().lookup(jndiName); - if (dataSource == null) { - throw new Exception("JNDI lookup returned a null reference"); - } - - if (!DataSource.class.isAssignableFrom(dataSource.getClass())) { - throw new Exception("data source reference is an instance of " + dataSource.getClass().getName() + " while a " + - DataSource.class.getName() + " was expected"); - } - return true; - } - - public boolean testDSCache() throws Exception { - String jndiName1 = dataSourceService - .deployDataSource(H2_DS_CLASSNAME, "", "url", "user", "passwd", "dbName", -1, "serverName", -1, false, -1, -1, -1, - -1, -1, - 0, null); - - Object dataSource1 = new InitialContext().lookup(jndiName1); - if (dataSource1 == null) { - throw new Exception("JNDI lookup returned a null reference"); - } - - if (!DataSource.class.isAssignableFrom(dataSource1.getClass())) { - throw new Exception("data source reference is an instance of " + dataSource1.getClass().getName() + " while a " + - DataSource.class.getName() + " was expected"); - } - - // Call it a second time - String jndiName2 = dataSourceService - .deployDataSource(H2_DS_CLASSNAME, "", "url", "user", "passwd", "dbName", -1, "serverName", -1, false, -1, -1, -1, - -1, -1, - 0, null); - - Object dataSource2 = new InitialContext().lookup(jndiName2); - if (dataSource2 == null) { - throw new Exception("JNDI lookup returned a null reference"); - } - - if (!DataSource.class.isAssignableFrom(dataSource2.getClass())) { - throw new Exception("data source reference is an instance of " + dataSource2.getClass().getName() + " while a " + - DataSource.class.getName() + " was expected"); - } - - - if (dataSource1 != dataSource2) { - throw new Exception("Caching error two identical calls doesn't return the same object"); - } - - return true; - } - - public boolean testDSUsage() throws Exception { - final int isolationLevel = Connection.TRANSACTION_READ_UNCOMMITTED; - final boolean transactional = true; - final int initialPoolSize = 30; - final int maxPoolSize = 40; - final int minPoolSize = 50; - final int maxIdleTime = 600; - final int maxStatements = 70; - final int loginTimeout = 800; - String jndiName = dataSourceService - .deployDataSource(H2_DS_CLASSNAME, "", "jdbc:h2:mem:testDSUsage", "user", "passwd", "", -1, "localhost", isolationLevel, - transactional, initialPoolSize, maxPoolSize, minPoolSize, maxIdleTime, maxStatements, loginTimeout, null); - - Object dataSourceObj = new InitialContext().lookup(jndiName); - if (dataSourceObj == null) { - throw new Exception("JNDI lookup returned a null reference"); - } - - if (!DataSource.class.isAssignableFrom(dataSourceObj.getClass())) { - throw new Exception("data source reference is an instance of " + dataSourceObj.getClass().getName() + " while a " + - DataSource.class.getName() + " was expected"); - } - - DataSource dataSource = (DataSource) dataSourceObj; - Connection connection = dataSource.getConnection(); - Statement statement = null; - try { - statement = connection.createStatement(); - // Try to drop table if exists - String query = "DROP TABLE datasource_service_test"; - try { - statement.executeUpdate(query); - } catch (Exception e) { - // Table may not exist - LOGGER.debug("Table doesn't exist yet", e); - } - - query = "create table datasource_service_test " + "(NAME varchar(50), " + "LASTNAME varchar(50))"; - statement = connection.createStatement(); - statement.executeUpdate(query); - - String insertTest = "INSERT INTO datasource_service_test (NAME, LASTNAME) VALUES ('JOHN', 'DOE')"; - statement.executeUpdate(insertTest); - return true; - } finally { - if (statement != null) { - statement.close(); - } - if (connection != null) { - connection.close(); - } - } - - } - -} diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java b/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java deleted file mode 100644 index 83663caa1e..0000000000 --- a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/DatasourceBean.java +++ /dev/null @@ -1,192 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.osgi.datasources; - -import java.sql.Connection; -import java.sql.Driver; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Properties; - -import javax.ejb.Stateless; -import javax.sql.ConnectionPoolDataSource; -import javax.sql.DataSource; -import javax.sql.XADataSource; - -import org.osgi.service.jdbc.DataSourceFactory; -import org.ow2.easybeans.osgi.annotation.OSGiResource; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This EJB3 Bean will interact with database through a DataSourceFactory. - * @author Florent Benoit - */ -@Stateless(mappedName="DatasourceBean") -public class DatasourceBean implements IDataSource { - - /** - * Logger. - */ - private static Log LOGGER = LogFactory.getLog(DatasourceBean.class); - - /** - * H2 Driver classname. - */ - private static final String H2_DRIVER_CLASSNAME = "org.h2.Driver"; - - /** - * Filter in order to get a H2 datasource factory. - */ - private static final String FILTER = "(&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(" - + DataSourceFactory.OSGI_JDBC_DRIVER_CLASS + "=" + H2_DRIVER_CLASSNAME + "))"; - - /** - * Bundle context. - */ - @OSGiResource(filter=FILTER) - private DataSourceFactory dataSourceFactory = null; - - /** - * Check Datasource Factory has been created. - * @return true if DSF is not null - */ - public boolean checkFactory() { - return dataSourceFactory != null; - } - - - /** - * Test if driver can be retrieved. - * @return true if test is ok - * @throws SQLException if test fails - */ - public boolean testDriver() throws SQLException { - Driver driver = dataSourceFactory.createDriver(null); - if (driver == null) { - throw new IllegalStateException("Driver is null"); - } - return H2_DRIVER_CLASSNAME.equals(driver.getClass().getName()); - } - - /** - * Init the properties used to connect to H2 database. - * @return a properties object - */ - protected Properties initProperties() { - Properties properties = new Properties(); - properties.put(DataSourceFactory.JDBC_USER, "jonas"); - properties.put(DataSourceFactory.JDBC_PASSWORD, "jonas"); - - // Get port - String dbPort = System.getProperty("db.port"); - if (dbPort == null) { - throw new IllegalStateException("Unable to find 'db.port' system property. Check the configuration"); - } - - properties.put(DataSourceFactory.JDBC_URL, "jdbc:h2:tcp://localhost:" + dbPort + "/db_jonas"); - - return properties; - } - - - /** - * Test execution of a datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - public boolean testDatasource() throws SQLException { - DataSource datasource = dataSourceFactory.createDataSource(initProperties()); - - // try connection - return tryConnection(datasource.getConnection()); - } - - /** - * Test execution of a XA datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - public boolean testXADatasource() throws SQLException { - XADataSource xaDatasource = dataSourceFactory.createXADataSource(initProperties()); - - // try connection - return tryConnection(xaDatasource.getXAConnection().getConnection()); - } - - /** - * Test execution of a Pooled datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - public boolean testConnectionPoolDataSourceDatasource() throws SQLException { - ConnectionPoolDataSource connectionPoolDataSource = dataSourceFactory.createConnectionPoolDataSource(initProperties()); - - // try connection - return tryConnection(connectionPoolDataSource.getPooledConnection().getConnection()); - } - - /** - * Try to connect and send operations on the given JDBC connection. - * @param connection the JDBC connection - * @return true if all operations have been successful - * @throws SQLException if operations fails. - */ - protected boolean tryConnection(final Connection connection) throws SQLException { - Statement statement = null; - try { - - // Get statement - statement = connection.createStatement(); - - - // Try to drop table if exists - String query = "DROP TABLE datasource_factory_test"; - try { - statement.executeUpdate(query); - } catch (Exception e) { - // Table may not exist - LOGGER.debug("Table doesn't exist yet", e); - } - - query = "create table datasource_factory_test " + "(NAME varchar(50), " + "LASTNAME varchar(50))"; - statement = connection.createStatement(); - statement.executeUpdate(query); - - String insertTest = "INSERT INTO datasource_factory_test (NAME, LASTNAME) VALUES ('FLORENT', 'BENOIT')"; - statement.executeUpdate(insertTest); - return true; - } finally { - if (statement != null) { - statement.close(); - } - if (connection != null) { - connection.close(); - } - } - - } - -} diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java b/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java deleted file mode 100644 index f2e9d6f98b..0000000000 --- a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSource.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.osgi.datasources; - -import java.sql.SQLException; - -import javax.ejb.Remote; - -/** - * Interface for the EJB3. - * @author Florent Benoit - * - */ -@Remote -public interface IDataSource { - - /** - * Test if driver can be retrieved. - * @return true if test is ok - * @throws SQLException if test fails - */ - boolean testDriver() throws SQLException; - - /** - * Test execution of a datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - boolean testDatasource() throws SQLException; - - /** - * Test execution of a XA datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - boolean testXADatasource() throws SQLException; - - /** - * Test execution of a Pooled datasource. - * @return true if test is ok - * @throws SQLException if test fails - */ - boolean testConnectionPoolDataSourceDatasource() throws SQLException; - -} diff --git a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java b/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java deleted file mode 100644 index f97a5ca3aa..0000000000 --- a/jonas/itests/applications/osgi/osgi-datasource/src/main/java/org/ow2/jonas/tests/applications/osgi/datasources/IDataSourceService.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tests.applications.osgi.datasources; - -import javax.ejb.Remote; - -/** - * @author Loic Albertin - */ -@Remote -public interface IDataSourceService { - /** - * Test if default data-source creation could be perform. - * - * @return true if test is ok - * - * @throws Exception if test fails - */ - boolean testDefault() throws Exception; - - /** - * Test data-source caching. - * - * @return true if test is ok - * - * @throws Exception if test fails - */ - boolean testDSCache() throws Exception; - - /** - * Test data-source usage. - * - * @return true if test is ok - * - * @throws Exception if test fails - */ - boolean testDSUsage() throws Exception; -} diff --git a/jonas/itests/applications/osgi/pom.xml b/jonas/itests/applications/osgi/pom.xml deleted file mode 100644 index 5e165e2e73..0000000000 --- a/jonas/itests/applications/osgi/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-osgi - pom - JOnAS :: iTests :: Applications :: OSGi - OSGi applications - - - osgi-datasource - - diff --git a/jonas/itests/applications/pom.xml b/jonas/itests/applications/pom.xml deleted file mode 100644 index 48179e228b..0000000000 --- a/jonas/itests/applications/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications - pom - JOnAS :: iTests :: Applications - Applications used by tests - - - connection-leaks - classloader - jaxws-sample - versioning - multitenant - jaxws-add - jsf - osgi - jndi - - - diff --git a/jonas/itests/applications/versioning/pom.xml b/jonas/itests/applications/versioning/pom.xml deleted file mode 100644 index 7a89d34252..0000000000 --- a/jonas/itests/applications/versioning/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-applications - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-applications-versioning - JOnAS :: iTests :: Applications :: Versioning - Versioned applications (Web, EJB, EAR) - - diff --git a/jonas/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war b/jonas/itests/applications/versioning/src/main/resources/non-versioned-war/non-versioned-war.war deleted file mode 100644 index 6572e8229c895ec3e79d2e7d50f04bd7ca096d32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmWIWW@Zs#U|`^25QtN@mJE%GbOZAIftU-3GxJhXEA%o-a&vUg7;+s@;BmOP_krvq zy(dfucbdPLBec>fYsrp^-(qjSwVhvnC%-q3dBL2Bf{!MW!SkcjOoq3HX`ZQ3slaYZz z6iHQ9eqLg+Zh2~wUPW$B?*zmALk0q^oq;22AA_mQ@qVlKxgdY^Wd z*46pmYV2Ul+f#l2^6qpq=W=2D2Rl{Qq)dDo#9*~5I!CMW$E{UU@2q)lT&%ifjnbT{ zZ>uLNJn@Qidf~k`xkqyD`Ug(C(w|7%t}@*;=lqeBeBD-Q~L- z(nGstbgU}MJZnxa&Tv21Hsx=xfxn(Ur|r*QTWp@*Jg`+{<%Hcc3tJf57T5$v81KmE z-`aI8TP5WGQm5Q6i}O;>Ua@>z#|R1|i0`d|F;Z~**XOf9Urz%1o*&8gaDV%AA2Q%M zdYLX>39Zh zjMlyWD@E(5PQq#j>0eLc&P3i7Ij&vsR!h*0X~X-O+s*jr)xS6@kURga`kup|4z`zA zeiNMLx7zH^x8q8mfufTf5wjx89^oQ=3N`V95l?TL#REDq(TRMa2QUFp@kaVG>I%Ef9 ei!6i@py-2H42`+~Z&o&t0u~^A2c&zLKs*3}Dn7;l diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.classpath b/jonas/itests/applications/versioning/src/main/resources/root-war/.classpath deleted file mode 100644 index 1984370d7e..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.project b/jonas/itests/applications/versioning/src/main/resources/root-war/.project deleted file mode 100644 index e78624882f..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - Versioning test - version 1.0.0 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - - diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs b/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7e5eaefea5..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=true -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=130 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs b/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 2b1bf7e3e2..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -formatter_profile=_Eclipse + spaces -formatter_settings_version=11 -org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs b/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 3c15060d32..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,8 +0,0 @@ -#Wed Aug 13 13:43:52 CEST 2008 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=false -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -version=1 diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml b/jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml deleted file mode 100644 index 90695bca86..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - org.ow2.jonas - root-war - 1.0.0 - 4.0.0 - war - - - - - maven-war-plugin - - ${project.artifactId} - ${basedir} - - - ${version} - - - - - - - - - - javax.servlet - servlet-api - 2.5 - provided - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/root-war.war b/jonas/itests/applications/versioning/src/main/resources/root-war/root-war.war deleted file mode 100644 index eefc2bd52c10904f6d5b62c7ef618528f94bc3ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6504 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 - - - - / - - diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 81788faffb..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - root-war - - - RedirectServletWithContext - - org.ow2.jonas.test.versioning.RedirectServletWithContext - - - - RedirectServletWithContext - /redirect-servlet-with-context - - - - RedirectServletWithoutContext - - org.ow2.jonas.test.versioning.RedirectServletWithoutContext - - - - RedirectServletWithoutContext - /redirect-servlet-without-context - - diff --git a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp b/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp deleted file mode 100644 index ccb8bd446d..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/root-war/src/main/webapp/test.jsp +++ /dev/null @@ -1,2 +0,0 @@ -Context URL: "<%= getServletContext().getContextPath() %>" -Test image: \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/secured-war/secured-war.war b/jonas/itests/applications/versioning/src/main/resources/secured-war/secured-war.war deleted file mode 100644 index 77fa39682a62a5b1cd5f6802a3d27d2bb33d6d09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmWIWW@Zs#U|`^2xD_O6t!?+N-VDg|1Y#~A&df_mt~0p0Ar{Zb43J zZfaghVo7Fxo^DubQ8AFVQZUpr&@Bvs|9NqQBzIddmp^nPL>aBP0;jsFY31bS?Kr+8x0+Bu5~7Tjy*+IKR>>U!^% z$&)-LCE* zMsv@HG}p6)T&*d)WG1kFTh6tQ$9`w2rd~Gj{H(lDZ~Ez@k9_vsxo`W5cbWpvM)pe* z-)raF=6~Shygnr(`c&AYBeA^f?^mVDJ)FLK?Owh3^OJScW9?^)mPhZ{EVXB2iA%tj z_!Z}G>Q4T=WA2q2F;^|;Yv)23=NP@Zm8d3F;MLc1@Ak`M^&GjKdzqc>c%3>7V?;kF za(LZ2FR8uPI_I3??OT~Shr5_cAC!E$VsLiO3Fq{;T!D?>UuaBS?$vkAHny(+zU6{% zvrj5EKgik0yf2bTY{JyGDKe*Q9~CsMlAL?uz~O^m%6wxYpS#96|9&fYx&1!BxtHHm z#;>`{CbjFYxy&_Nn(OO+HUHzs^)BY;OpE(l^QUy}lNDEX%Qywf?U=G~-{OA3$?76* z*M5Gx|Da-B{QU - - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project deleted file mode 100644 index e78624882f..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - Versioning test - version 1.0.0 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7e5eaefea5..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=true -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=130 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 2b1bf7e3e2..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -formatter_profile=_Eclipse + spaces -formatter_settings_version=11 -org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 3c15060d32..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,8 +0,0 @@ -#Wed Aug 13 13:43:52 CEST 2008 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=false -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -version=1 diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml deleted file mode 100644 index 6c58e9fbee..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ear/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-ear - ear - - - - ${pom.groupId} - ${parent.artifactId}-ejb - ${version} - ejb - - - ${pom.groupId} - ${parent.artifactId}-war - ${version} - war - - - - - - - maven-ear-plugin - - ${parent.artifactId} - ${parent.artifactId} - ${parent.artifactId} - ${basedir}/.. - 5 - - - ${pom.groupId} - - ${parent.artifactId}-war - - - /${parent.artifactId} - - - ${parent.artifactId}.war - - - - ${pom.groupId} - - ${parent.artifactId}-ejb - - - ${parent.artifactId}.jar - - - - - - ${version} - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml deleted file mode 100644 index 93d02e5b3f..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-ejb - jar - - - - - maven-ejb-plugin - - 3.0 - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java deleted file mode 100644 index 8b9a551fe2..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.ow2.jonas.test.versioning; - -public interface TestBean { - - /** - * @return Version number. - */ - String getVersion(); - -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java deleted file mode 100644 index caffcb2a1f..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import javax.ejb.Stateless; - -@Stateless -public class TestBeanImpl implements TestBean { - - private static String version = "1.0.0"; - - public String getVersion() { - return version; - } - -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml deleted file mode 100644 index e31146b3fc..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - org.ow2.jonas - test-versioning - 1.0.0 - 4.0.0 - pom - - - install - - - maven-compiler-plugin - - 1.5 - 1.5 - - - - - - - ejb - war - ear - - - - - javax.servlet - servlet-api - 2.5 - provided - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - 1.0-M1 - provided - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/test-versioning.ear deleted file mode 100644 index 9e8599457c733ba1156d98ceaa75d268ef3dc026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9008 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 RK=jA$_VMYUdGhP-e*m)z=v@E+ diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml deleted file mode 100644 index cf38b48650..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 1.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-war - war - - - - ${groupId} - ${parent.artifactId}-ejb - ${version} - provided - - - - - - - maven-war-plugin - - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java deleted file mode 100644 index b36f69edc9..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import java.io.IOException; - -import javax.ejb.EJB; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class TestServlet extends HttpServlet { - - @EJB - private TestBean bean; - - private static String version = "1.0.0"; - - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse - * response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getSession(true); - response.setContentType("text/html"); - - // Use response.getOutputStream() to test JONAS-166 - ServletOutputStream output = response.getOutputStream(); - output.println("WAR version: " + version); - output.println("EJB version: " + bean.getVersion()); - - // Write two context paths in order to test when offset is not 0 - StringBuilder sb = new StringBuilder(); - sb.append("Context URL: \"" + this.getServletContext().getContextPath() + "\", "); - sb.append("Test image: "); - output.println(sb.toString()); - } -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 6c73668a4f..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Versioning Test - - TestServlet - - org.ow2.jonas.test.versioning.TestServlet - - - - TestServlet - /test-servlet - - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html deleted file mode 100644 index 30856baef6..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -

Hello, World!

- - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp b/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp deleted file mode 100644 index ccb8bd446d..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version1.0.0/war/src/main/webapp/test.jsp +++ /dev/null @@ -1,2 +0,0 @@ -Context URL: "<%= getServletContext().getContextPath() %>" -Test image: \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath deleted file mode 100644 index b6774abec0..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project deleted file mode 100644 index 5505fc25e1..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - Versioning test - version 2.0.0 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.maven.ide.eclipse.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.maven.ide.eclipse.maven2Nature - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7e5eaefea5..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,256 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=true -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=130 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 2b1bf7e3e2..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Wed Aug 13 13:44:14 CEST 2008 -eclipse.preferences.version=1 -formatter_profile=_Eclipse + spaces -formatter_settings_version=11 -org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 3c15060d32..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,8 +0,0 @@ -#Wed Aug 13 13:43:52 CEST 2008 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=false -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -version=1 diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml deleted file mode 100644 index b5768499ab..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ear/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 2.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-ear - ear - - - - ${pom.groupId} - ${parent.artifactId}-ejb - ${version} - ejb - - - ${pom.groupId} - ${parent.artifactId}-war - ${version} - war - - - - - - - maven-ear-plugin - - ${parent.artifactId} - ${parent.artifactId} - ${parent.artifactId} - ${basedir}/.. - 5 - - - ${pom.groupId} - - ${parent.artifactId}-war - - - /${parent.artifactId} - - - ${parent.artifactId}.war - - - - ${pom.groupId} - - ${parent.artifactId}-ejb - - - ${parent.artifactId}.jar - - - - - - ${version} - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml deleted file mode 100644 index ff3aeddcec..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 2.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-ejb - jar - - - - - maven-ejb-plugin - - 3.0 - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java deleted file mode 100644 index 8b9a551fe2..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBean.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.ow2.jonas.test.versioning; - -public interface TestBean { - - /** - * @return Version number. - */ - String getVersion(); - -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java deleted file mode 100644 index c76bbc2539..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/ejb/src/main/java/org/ow2/jonas/test/versioning/TestBeanImpl.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import javax.ejb.Stateless; - -@Stateless -public class TestBeanImpl implements TestBean { - - private static String version = "2.0.0"; - - public String getVersion() { - return version; - } - -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml deleted file mode 100644 index acd4ada46a..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - org.ow2.jonas - test-versioning - 2.0.0 - 4.0.0 - pom - - - install - - - maven-compiler-plugin - - 1.5 - 1.5 - - - - - - - ejb - war - ear - - - - - javax.servlet - servlet-api - 2.5 - provided - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - 1.0-M1 - provided - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/test-versioning.ear deleted file mode 100644 index 4d2c54e1329cee7ae2ed1257bae457e9b3d3d4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10370 zcmbVy1yEi~wl(hV?iSpg-~{+^3+@{H!`&^o1q}pucemi~?i$=(e(rlSbMNHN`(M@T zQ^)G;y}El>cdtIRwgLbg0uJPlqOYYW^j{DExWK;OWyMv58KmSSm=ykD1_Pq=Zid~x zZs+;_IrII*_^X+$u$+{HxUvePti+Y<$gm86fpHQMz(6}TGG3#^Jj1rJ3#6AG8=wa; zh`>PaFvp#zkZ9lz6-VGzKh#j`14dZG_2UA=#iW^<74+zR7Kp?p|u zV(!AwsYtMjK{R!Tx{&zRs-4jU$x|fsEAA)S4@#Kfh-(C)@{L_EkbiG20(0!>{d+4> zz(7E7{@PjtJ3A{2BLhbZTN_4KYpci@LE9b@l-@f}xSvS-wO>^<78ZH)l(mYq#F?cl z5!4BgP8%xTC}dX{6^?z5|`W5?R=Nm$=)zd$Gs!CXw zIKmwr(du#Zxy z@TuiSbzWxoT+&_ev%_e!zPC?TJOUWwR&Qx*cylzpD>0xkhj9lN((Ie>5yY^8V_QeS zJh>+ZmXy6m(k1@CN9zhKRwV@n1mqYI1O)v(T8<_TjttHwK!^7zS=g8{elY;%sd?~E zdk|+Xk5JAxtq*ZH6y@Q3vn;a;)u2pT!D|{>s7+Up+?n~%@DsMGHYYR>iJCt&(Ex3b z+mV?^8jC1Pd)!@4fKhRL`r-8EVf*Q^ZT;-*W9ItZ)k7Ph0)MN&Z}jl$>?ByFA*@}u z4O5@ecpp*K=q5S>gxz*$qlnWO;r?+p52!9|O-*fs@Uc_(!7?e;3C?IejlfI2ERDbb zy2O#d^(|7sE2%%@C9Dp1o*CqpPl^wXtY(3lz_aiiWGw~U3C1_XCU7;3I7tp6fVebg z4mFQ_43wBL1KlLI^0w$*zzK5KDW!$5RGOzeC^gD2RU1_skdQa3jbu~X`PEDxK)h3p>+d9QQotiu5}=5!cWoy+wB z65)JuQPHk2VtLpuM{Sou{|&hF^G9u3e`RNnLQZ<_eyNh}}%bzZL8V^fnS; zX7mo;WH3!D<=lo5i(iP?6ev~NvN+OSt!ljBCdL+T3fcRoI<@VfUi+f%J-)WiHQ}11 z!MXTgJAA#Cnwn}O6<5M!Aopj$^ME}~I3`S0q8X)x<{1g-aZNCQJNWLxSJJ!Pf~OO~ zG2TjV@&&E+vhJ{G5V5=MoFv(9?}N6iMv3TccIbJo{FSQnSfLgF(~T>(o0f7dP_DT< zc7i5o_wuXYC8jzrXs^68Kk6q})>0#9&&og`3uU1)HeW^&1f&D> z7w)U|YaDYo;!nbD-v&PkQJX9p%Fy-M?!%s(uFTSD+MXPv=-qDX z>1JM?-pto8Ytmk8%|y>j*gh;B7=X8aW>;ZAGEw}FsV%n&3PR7*19B?>By~;q=4L!V z%BOCGCdKOIw;DDpCn8+SuOhxg_@x&O(E&yU9ieh{h*BG_XiG_}7^!A$)+bV{GePg0 zL2Z6Dh6^sZ9^7tG^diIxG}7!#&QE}nDQ&y8hl!QP)Vv#pc7v06^2XqSPr0nDoxk!mHIDxh zk3r1Su<>z+id|AHegli#Zg5&T2~U8Tq+^!1+Y2`TuJ{Qu2=Zn-dO3bv9@-w7rn*8t z6Ui5hcv+EogOSg8;i^5IfdkH;YmhUA+Dd$_Hz_wt-kq*DH8YG+0|DntnLLc=yxXwI zzIa-gjDxvS@N?ZxBNzXU&Qd#DP-0nifY)up%mx4HDvy1%)j6Hc~fHBawQ{ zlnEA6(W}~+6L+6oExN8OK35^egw-Y>)~VVdf1#x3X*;)3tM!gc*KoIlBUY#g%bs_7 z4;B|}wx!xDgX$K_9WHPuMX3UA__*W86w3V>y_ju8=dNOGG0%q*VvDG;_Cu#Zq2t8X z_V|2KUW;Bk!J2~%uG}HfU87lvuMk0cWR&e zI>&2RTZQRuLQPWJQ)usXr$glu-6x#{X-Q21;} z+ykU}!+k7&@<$>?9u&q4;u&f3L28mISHw7RPz%8yqn^oR2uAu8lN4p2T||8lawd9S z&Ba6Z$q>C}7-@fAsLGAHn$Zy6j#WS?mRJ=lYKbUR=Rc-`m+~MJl9FsZ*2*DkvdERr z&sGl5Rln+UVDu^X^L$uRPb*eQ>#u@W#7;yHj|tvk0F}!Vudtnt<%8Fj%cGM?kf={~ zUW2DmtXd?^SYeuoUmLrR>5!*cWA-RMH$MVoqav1@5ID`Z&32fpdm@YQQC2seCrW&S ziU{Ln$z8Ei8oO{7=Et>k;7YtFpcC{&_qHoNduXA@o%X6JV@`kUvcAdM@aH26fK;~h zl=)z#r^0OJ;*Y+!zWhWA;R*8%WiOiYkYgRQbeR##wOL_wh*A@vPQle>;^bj9kA@+tI-1ogQ?p4Ll53+*&AmK zSjM|gi?nLBKHnFtZ}_$RyyE~h(af2VQ1bNq$S-W5kiC6?8|ST!4-*T>G8%~b?#{>Q zxjSIyXYU9seJ`_y%Z(fU`O7Y3&`iRGK7aUcYH+iDV$#hL$TaMu0 z>7u^M_mUQL{RUEvr*Su~Vt?}+K<+hv?#rhJHMg=5O|__<*Eho1d7I>euXywfU2gLa zYqm0Kn&P)_ajmyc9aR{Pi7KxRxpQ~m!{XZGsPx$OmmWKU4*_*v4bHdpnXFKc{qX~! zz0l7zRNW6BfUl0dK2Y6y|Gtx<-Zx&ueBYjaCiu@g85aX!ojNpk`tlqRg*z?>t2;I; z?<5*aguWvbEP7i6>(W8n9oF|4Q54Ehl=uB=m@ax707kf$1ft`4KV2{uo#!sY<4s`P zJ7baU$ZJ01rA))4>@#Ap6B6;c6Up^V1$aBYE44CiF(sm!LhQEcQx5|644}cPy0b!0h*M!~rgcjaJef? zvxO2UmwuwAc<9>>P|hFCAA!$|J%ct4b!(+TKDX2Nq^Ns73E|KOmtaC3CnWuZx35-ON+K3{gO&a=pOa}A_Ruq)n1 zv;JmTD4^y8mh>5NyU4eR7qb(I)LL?Qw-wtEXVVH>_}9HSHTt1AY5ya7}4u}*@_u`$y&Yb7NIQt=O!3L^Gvd|2lA6m8N91k~qB5LD$ zXR|86(lxhdeFnM*7^@!(^WDtobQ1wGeg=lT+EVDtLozi-zlvXgwH!WOOf#eDl;<{; zIEZgrX|bH}?F%5U(GN&%XUL4YoW~*8qTSp4-#(f>2=y>_29ox{7^vku?vAIimY2IP z+);fNSC}&R?B(kZN?V zY+DL#U?~Ykm1R-jMqc0 z{n9w|_D8Js{5=t5nN>rnBL(N3&XIDyjWH9QCp5^KsAgKC@OoLeNQI%rFy;#TcC*T)mRob|eh z!gD>MyMeNe-XTbvUJ1WirbiDC7F3_8PARn*8%UwlWLj5p#D z9j}3W)-!XW+(n#>38#wP=;16a$F6+^PJGE!I#AQNBu04%Di8jPZVr=ANLm*CqDZ3G z0Lg%j!`(IkIK|$AxLVSIwr*|zDb(3*UyCO$z& z_z}i@WFe7d$FND;boHV`o~`S$l$#`~&%x@$bvTY#&QyLLn|L%yTE^zYId%L}&Aui} zw4Gj!0TMLw2N7|INVfs)M$5R1kbt$A6ZO^N%bZEdyJonGCmC;E=EIyLGbQ<{gwsJv z#v5Dc;JLxa=pXk22-%zUyzB~a#K(MeE{p+*uz^-rFpfveQ&(^s>TbzhgQ)seF{8oO z{z@W8mn)AOFM-wz3vil>Iw;#-Z>=(;YOEyr6*CVPDl?!u~GbFpQNS~%Q zK78*OAempAyQGOYAsc+*+)fKbII$^ZtLoYvSwi^kQO!gQqYYRn6rctVGmuV4wsnl>H4nWka)99Z865;2Dv5S9IoN|UZ_$HKM>qA0zVxqpD8LF;Ly@L zXK0zklr1V@g_T1Xa-0}p=f33#@$IpCu?%7Db|B9!JJJ%N!0eaF4oqo!SxQEmQvv@D zX*Y@+i?;T!+AYgKINc*RN)Ojh4z0bfQcrN3MnGkfq!>Qc4O4i{HzU3V_|*`T1RJ!3qCCy&tQzWYiI&}*t)-cKKvQ&b7NN!Wa$0xSPQmV~I4(E#%ZL?c z`t7!t&8t4{)cfQPG^A4};o0L?V8jQqiaAt%l@(9x@-&z@)CEa`DM6fvNqIyGiPcs9 zivL*>*GUIneYhyip+<>7RT`GqCUdMVaUg|uITWdqE`;o0*ARX4iv zNGqx{*WczFNhEj#*-d5}$q!ElTE-h!b~+T2R07I%=sBH2B9(cw%WNbK#tGGm=dtJ&heAV86C1Ut7nN3fMe!0_DVAZ zinLfDKTWp^GD(f_c}bF>Zz0iVv#lE;gchzcqA_&b!~~OwQA76|A(LtSnAcfWfgT=+ zS->42Smt)$vBZ!2l9eiA&a#1G($Zlyn-Tc)(=s~-K;jqpxLQ?L#B2JuZSqu^OdxhLbR(N7x|x|?B^Op|L)T_tzqu1H)euuiKn zP9-SarRNDn_>jV~ziTYr?S4qse*msU#5MzFa`9eqpYw3i$-)HjkcO`VBsh>ep05hkfk5mMMtLA%gMYTtR3aKlCGp@5<0D z=r!d2*Qkl`vR+SKPubakep4jaTU&jAB9s1eYn#G*y&zR|m68^Cx5bj=Vc&}A42I0ZPz z9|@W0wN&%93yiS$jiMcDf=f3E=4E$N>HsmXQGk_td5ot}dlR|5%fJB2`H-Esz3mo1 z+1~C;3e;Xn?S4rJzNBs~x^%v~3Ql$qE z%}ui@EXK7vja}dqDG1~wiE#}=;e-(UoyMF#4845HloyexqtdQlSk0$#&;j7+l`r=k zJ||(Xr?BE%?5u39n0)GpomJq^Sws0}nbFlD@uXkd_yh`!IXgE&sl&8MAG)y+jn}X?@wV ztAV#b1sMeznZTf_?PBGTXe7-aeqYmAyJ6eHWRqrYXDTh!T|@7Q^Rg{+rgG%eJt{o&}t@v%t5RqhK`Mu(-(!yD3L z-3q7=ol9rAL{w`5+n}wZ3AZwJ%Fcam7sd;<OoE6H06oS;2uZG z1%-;EmWr1U`C9Z@`GDbC8RqMUCAgzmC8{x`^=J{jL#L=1Is*c#!Q$^GhdB#?|FG8@iwsaYp=d;9+ zeI@@H*6f(Cc(uSJCHUBL@ll0i3Rv9mrw4yxerYs#rAtesn)Z%OqA)@i_(E;lb z7V+6ECav>yOzfvfLwyV@=gKs-av|4i&D$Hb$e9KR@t{Bi{7!uy(Fr3-mItXJ(3*tJ zD=Bn?q-wGm&XbGfC0lvCMzqit*XC4Xwe)!sLXdq4P&JG9pKmV}%^MhPpV7UtFlB;;^ z(wtNikH1!L)Af(mw!*zVumw7x6p+7CqbNKoIjow?&2EYB?ALpY=FhX{fEloV!?>+b zD7#`7DFWh+`cbH{Vr3OV6BUo@o9SGB%<}ya=W5Su3J#>S%0EDbLVcy!PFtd#%7`j{ zt-x`Jl?5V^NMPwD=%n^u6JV0gRJ)r3Q{{tG77oU?8?}BkOrXqES}UI%J>NVMM!+T( z#H$*G>YT9y9tBi~f=#})ZbRhEXG!PL_3<85afBt%L;Xwzgux9iuw_&|JiMm~%?7ZQsfYd*33X37~GJa}Mr$$~st}!Q#t9(V-Yo?E~vS7nDV> zaYikb(tNhvM?-96CoyEXKz)vds4r^VRSdW>sg%E5iao11hrn&5-qMmMDt%}ycb|gY zMwx9psQro5yns!d;L@){0ryn43Ylu?)l&*5ONf~lejV_UzH6!;`K}E*-1*e-SKD+! z*Wk|)b#04ZG@Q3-XWxT${l_LcO_m1YI}W3PX5f%h__sKwPJ z&o|n~fg&ZW_g~opVQg*%7tn7#=~_^+9Qxr!9&YJ;`GkH!Wzrq|+)RyU0pe_sw=C<| zM=~(0>ucdk%f}T7wH@Ue4MMa@d5dyI9g;7TdV(4yzS1(Yb-4~3Hj|ZKNE`T|Un+Sg zgS;K?t=ATz4ZffjwaVFTl`R*m+>b{zwr%;f<#0)Yv$d|Jj?2cjYfK# ze=?C5YXzB)1Ze=XPkea%37tNilcJ&32PYE8onKNKdbunoZKU=gkfi8rCadCuq{5&W zno~6p>Ujc0NoOiLo0q(gNESX5>7IPy4g`@2QrDiDjo=T9^4!3QxoI! z{=m&X$g?)(YogJLa#R|~dP$R6j&FfNxNl}ri&@SGxvUQ?V@e+5rawOR+HE5Qug|X6 zXdK8_xxV@Djvt*{F@96luJakb3E}nRBpv_I{o)gOo}l^6VC9{U{l)`)*=6qd9Np3X zA_Mmt+!FmDi}T7N>62jJk#$h{x}1F)-R^^N-2TAG_x47z{&Mj8N#h{xi8K98o#OH0 z*YiS@m&0wuIn(H3MfV9l4h;84HSpKm2!4DS7r5h>&*#x5yNfE%1%+Q;qYn2?_I|NF zR!uxROK|7DwH`mO4Ud=S+v-x#ylsa|BRUg3(c$(E0=9MtIcMi*-~Oc@|6LMC{;PUy zZQyKT^Dkli@5Y3GH?{?uG1|JYGJdhOF>v_*xU&3juD^-03?>G^f5E|kbXo(17IqtH zf+0Xag5PCa?*9v%ovrmBqIj>Gwe6B5%IjD~vgpHv^gX1=3=!#dy0&={35o8~uvZb5 zMv@g^&xXmWBC4+}hcd1#5I9W{4sa5lxGXenO4Bvy*rk+BR}Nx#8%CQEJQ?b@*GN~TJBN+O}Ro8KT}koW&$2GJ)GH?CUudE<`dZ>+3zyO{Ai+vGRwo0oz4X*TD&(PJ5qv#?{uqm<8us)gWaM_07}h;~>! zy323CJ+QHLcMwPsa^Z%8mKbwgYDvBM&Jtm|J!uED28#k)txUUe4c+|Y?1g{_OEH=A zwNk-Gs<9Ud0Dk; z1NjLKGN^4O)KjGsY7M{_d%d0T14!7-zJL@%G%OlBoVe3(N9#6 zjP@WoUzNSVT0qg5ri@{Plkp>-Hys$qRinIdVgZS~_ukl^+O57qT*4$7=Bc2upOa&) zv&W2>8-^_;vMr^AiQk)I?HD8;-%B23`mP z0qriYdP(#bBAZ>@Xqi4zjrEvNB4hBbQ}tta!zr^?&Lth>OnbDC+cmRi?wd|H1&8v% zE)i&hcwYNrTS?-V`YEQ%v?VS&T&q0GmI-Rx9!bF}r$Y+O*;jsQ{D~c&ok%xDxnSI! zZo4?pPfaJq*>_*)1DE9W35P1NUs6!G<5%DsMH>Q?LrdGsGtRJ;%~wZ8@lSU&HI|>^nMEdU)MG} zpsk$=(9y!gfnk^rshb%AWMZ|Ta;8bqFf5wZ$qE%5AKR`dtb2o`AH&`QCplBs1r5_E z2{Q><*A+d;rry7XJ{c)_O6bYJ<)=k6S+7`SSe=qnE{bTN)y)lmg;5>BVOn<%Etmck za6j#>Gtcc!P~3sZ>Ksx501Acy{y(Q&z4zz6pn#kR|8f6I0@gp>{&Nb}AI5)_TtDjf z>%ZLol92Uh#s7`)ds@_gx&If!>|YUnOOpB><@a=H42x{JZlXg#D+p(BGYZr|JI|{ z6UyU%gZizP|Df}K!vAMN|7QicenbBk_gNioXT(-{bM0I`Ky> Ze@-+703_5OfN<}})BEVKr~KpX{{bhGuM_|P diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml deleted file mode 100644 index 40315a9707..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - org.ow2.jonas - test-versioning - 2.0.0 - ../pom.xml - - 4.0.0 - ${parent.artifactId}-war - war - - - - ${groupId} - ${parent.artifactId}-ejb - ${version} - provided - - - - - - - maven-war-plugin - - ${parent.artifactId} - - - true - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java deleted file mode 100644 index 4e3d7155d3..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithContext.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class RedirectServletWithContext extends HttpServlet { - - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse - * response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.sendRedirect(this.getServletContext().getContextPath() + "/somewhere"); - } -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java deleted file mode 100644 index afd826c8c1..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/RedirectServletWithoutContext.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class RedirectServletWithoutContext extends HttpServlet { - - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse - * response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - response.sendRedirect("somewhere"); - } -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java deleted file mode 100644 index 61944b2173..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/java/org/ow2/jonas/test/versioning/TestServlet.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.ow2.jonas.test.versioning; - -import java.io.IOException; - -import javax.ejb.EJB; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class TestServlet extends HttpServlet { - - @EJB - private TestBean bean; - - private static String version = "2.0.0"; - - /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse - * response) - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - request.getSession(true); - response.setContentType("text/html"); - response.getWriter().println("WAR version: " + version); - response.getWriter().println("EJB version: " + bean.getVersion()); - response.getWriter().println("Context URL: \"" + this.getServletContext().getContextPath() + "\""); - - // Split output to test JONAS-221 - final int firstDivider = 3; - final int secondDivider = 6; - String firstPart = this.getServletContext().getContextPath().substring(0, firstDivider); - String secondPart = this.getServletContext().getContextPath().substring(firstDivider, secondDivider); - String thirdPart = this.getServletContext().getContextPath().substring(secondDivider); - response.getWriter().print("Test image: "); - - // Output that looks like split but that actually isn't (JONAS-221) - response.getWriter().print("First part: " + firstPart); - response.getWriter().println(" ... and no other parts !"); - } -} diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index bf5a54bcac..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Versioning Test - - - TestServlet - - org.ow2.jonas.test.versioning.TestServlet - - - - TestServlet - /test-servlet - - - - RedirectServletWithContext - - org.ow2.jonas.test.versioning.RedirectServletWithContext - - - - RedirectServletWithContext - /redirect-servlet-with-context - - - - RedirectServletWithoutContext - - org.ow2.jonas.test.versioning.RedirectServletWithoutContext - - - - RedirectServletWithoutContext - /redirect-servlet-without-context - - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html deleted file mode 100644 index 30856baef6..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/index.html +++ /dev/null @@ -1,6 +0,0 @@ - - - -

Hello, World!

- - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp b/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp deleted file mode 100644 index ccb8bd446d..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/version2.0.0/war/src/main/webapp/test.jsp +++ /dev/null @@ -1,2 +0,0 @@ -Context URL: "<%= getServletContext().getContextPath() %>" -Test image: \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml b/jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml deleted file mode 100644 index 2d64fad583..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/welcome-file/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - 4.0.0 - org.ow2.jonas - test-versioning-welcome - 1.0.0 - war - - - - - maven-war-plugin - - ${project.artifactId} - ${basedir} - - - ${project.version} - - - - - - - diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index e642c4cad1..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - welcome - diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml b/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 6f38ec77e4..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Versioning Test Welcome Files - - index.jspx - - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx b/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx deleted file mode 100644 index 420b622a59..0000000000 --- a/jonas/itests/applications/versioning/src/main/resources/welcome-file/src/main/webapp/index.jspx +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Welcome - - - Welcome - - - \ No newline at end of file diff --git a/jonas/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war b/jonas/itests/applications/versioning/src/main/resources/welcome-file/test-versioning-welcome.war deleted file mode 100644 index 8a3dd293913c454cb6585768ca878c8fdafa5f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4637 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 diff --git a/jonas/itests/cargo/iiop/pom.xml b/jonas/itests/cargo/iiop/pom.xml deleted file mode 100644 index 5e61c38bee..0000000000 --- a/jonas/itests/cargo/iiop/pom.xml +++ /dev/null @@ -1,324 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-iiop - JOnAS :: iTests :: Cargo :: IIOP - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/iiop - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:iiop://localhost/jndi/iiop://localhost:${carol.port}/iiopconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/irmi/pom.xml b/jonas/itests/cargo/irmi/pom.xml deleted file mode 100644 index 1518c1581c..0000000000 --- a/jonas/itests/cargo/irmi/pom.xml +++ /dev/null @@ -1,328 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-irmi - JOnAS :: iTests :: Cargo :: IRMI - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/irmi - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/irmiconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smart.debug.verbose - true - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/jetty6/pom.xml b/jonas/itests/cargo/jetty6/pom.xml deleted file mode 100644 index 7aaba822d8..0000000000 --- a/jonas/itests/cargo/jetty6/pom.xml +++ /dev/null @@ -1,346 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-jetty6 - JOnAS :: iTests :: Cargo :: Jetty 6.x - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/jetty6 - - - - - process-test-resources - - add-test-resource - - - - - ${project.build.directory}/generated-sources/jetty6 - - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/jrmpconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/jetty8/pom.xml b/jonas/itests/cargo/jetty8/pom.xml deleted file mode 100644 index 2f9b15d913..0000000000 --- a/jonas/itests/cargo/jetty8/pom.xml +++ /dev/null @@ -1,346 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-jetty8 - JOnAS :: iTests :: Cargo :: Jetty 8.x - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/jetty8 - - - - - process-test-resources - - add-test-resource - - - - - ${project.build.directory}/generated-sources/jetty8 - - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/jrmpconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/jrmp/pom.xml b/jonas/itests/cargo/jrmp/pom.xml deleted file mode 100644 index 4d4f68ca52..0000000000 --- a/jonas/itests/cargo/jrmp/pom.xml +++ /dev/null @@ -1,297 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-jrmp - JOnAS :: iTests :: Cargo :: JRMP - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/jrmpconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smart.debug.verbose - true - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java deleted file mode 100644 index fa9320b83c..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas290Test.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.net.URL; - -import org.testng.annotations.Test; - -/** - * Tests that the JONAS-290 bug doesn't happen. - * - * @author S. Ali Tokmen - */ -public class BugJonas290Test extends TestCommons { - - @Test - public void testJonas290() throws Exception { - String response = getContentAsString(new URL("http://localhost:" + webcontainerPort + "/jonas-290/")); - checkString(response, "Hello again, World"); - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java deleted file mode 100644 index cac9928aa2..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas292Test.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.util.List; - -import javax.management.Attribute; -import javax.management.ObjectName; -import org.apache.commons.io.IOUtils; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests that the JONAS-292 bug doesn't happen. - * - * @author S. Ali Tokmen - */ -public class BugJonas292Test extends TestCommons { - - @Test - public void deactivateDevelopmentMode() throws Exception { - ObjectName depmonitor = new ObjectName("jonas:type=service,name=depmonitor"); - this.mBeanServerConnection.setAttribute(depmonitor, new Attribute("development", Boolean.FALSE)); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testJonas292() throws Exception { - final ObjectName j2eeServer = new ObjectName("jonas:j2eeType=J2EEServer,name=jonas"); - - final String jonasBase = (String) this.mBeanServerConnection.getAttribute(j2eeServer, "jonasBase"); - Assert.assertNotNull(jonasBase, "jonasBase is null"); - final String fileName = "jonas-292.jar"; - final File targetFile = new File(jonasBase, "deploy/" + fileName); - final Object[] opParams = {targetFile.getAbsolutePath()}; - final String[] opSignature = {"java.lang.String"}; - - this.checkDeployableStatus(j2eeServer, "deployableJars", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployableFiles", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployedJars", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployedFiles", fileName, false); - - try { - final InputStream fileContents = this.getClass().getClassLoader().getResourceAsStream(fileName); - Assert.assertNotNull(fileContents, "Cannot find " + fileName); - - FileOutputStream targetStream = new FileOutputStream(targetFile); - IOUtils.copy(fileContents, targetStream); - - targetStream.close(); - targetStream = null; - } finally { - System.gc(); - } - - try { - this.checkDeployableStatus(j2eeServer, "deployableJars", fileName, true); - this.checkDeployableStatus(j2eeServer, "deployableFiles", fileName, true); - this.checkDeployableStatus(j2eeServer, "deployedJars", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployedFiles", fileName, false); - - mBeanServerConnection.invoke(j2eeServer, "deploy", opParams, opSignature); - - this.checkDeployableStatus(j2eeServer, "deployableJars", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployableFiles", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployedJars", fileName, true); - this.checkDeployableStatus(j2eeServer, "deployedFiles", fileName, true); - - mBeanServerConnection.invoke(j2eeServer, "undeploy", opParams, opSignature); - - this.checkDeployableStatus(j2eeServer, "deployableJars", fileName, true); - this.checkDeployableStatus(j2eeServer, "deployableFiles", fileName, true); - this.checkDeployableStatus(j2eeServer, "deployedJars", fileName, false); - this.checkDeployableStatus(j2eeServer, "deployedFiles", fileName, false); - } finally { - Assert.assertTrue(targetFile.delete(), "File " + targetFile + " cannot be deleted"); - } - } - - private void checkDeployableStatus(final ObjectName j2eeServer, final String attribute, final String fileName, - final boolean status) throws Exception { - - boolean found = false; - List files = (List) this.mBeanServerConnection.getAttribute(j2eeServer, attribute); - for (String file : files) { - if (file.contains(fileName)) { - found = true; - break; - } - } - - Assert.assertEquals(found, status, "File " + fileName + " is " + (status ? "not " : "") + "in the " + attribute - + " list: " + files); - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java deleted file mode 100644 index a3839d9499..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/BugJonas96Test.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.File; -import java.util.List; - -import javax.management.Attribute; -import javax.management.ObjectName; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests that the JONAS-96 bug doesn't happen. - * - * @author S. Ali Tokmen - */ -public class BugJonas96Test extends TestCommons { - - @Test - public void deactivateDevelopmentMode() throws Exception { - ObjectName depmonitor = new ObjectName("jonas:type=service,name=depmonitor"); - this.mBeanServerConnection.setAttribute(depmonitor, new Attribute("development", Boolean.FALSE)); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testEar() throws Exception { - checkIfFileAppearsAsDeployed("dummy.ear", "Ear"); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testJar() throws Exception { - checkIfFileAppearsAsDeployed("dummy.jar", "Jar"); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testRar() throws Exception { - checkIfFileAppearsAsDeployed("dummy.rar", "Rar"); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testWar() throws Exception { - checkIfFileAppearsAsDeployed("dummy.war", "War"); - } - - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void testFile() throws Exception { - checkIfFileAppearsAsDeployed("dummy.xml", "File"); - } - - private void checkIfFileAppearsAsDeployed(final String fileName, final String type) throws Exception { - // Connect to the JMX server - List files; - ObjectName j2eeServer = new ObjectName("jonas:j2eeType=J2EEServer,name=jonas"); - - files = (List) this.mBeanServerConnection.getAttribute(j2eeServer, "deployable" + type + "s"); - for (String file : files) { - Assert.assertFalse(file.contains(fileName), "File " + fileName + " already exists: " + file); - } - files = (List) this.mBeanServerConnection.getAttribute(j2eeServer, "deployableFiles"); - for (String file : files) { - Assert.assertFalse(file.contains(fileName), "File " + fileName + " already exists: " + file); - } - - String jonasBase = (String) this.mBeanServerConnection.getAttribute(j2eeServer, "jonasBase"); - Assert.assertNotNull(jonasBase, "jonasBase is null"); - File testFile = new File(jonasBase, "deploy/" + fileName); - testFile.createNewFile(); - - try { - boolean found = false; - files = (List) this.mBeanServerConnection.getAttribute(j2eeServer, "deployable" + type + "s"); - for (String file : files) { - if (file.contains(file)) { - found = true; - break; - } - } - Assert.assertTrue(found, "File " + fileName + " doesn't appear in the deployable" + type + "s list"); - files = (List) this.mBeanServerConnection.getAttribute(j2eeServer, "deployableFiles"); - for (String file : files) { - if (file.contains(file)) { - return; - } - } - Assert.fail("File " + fileName + " doesn't appear in the deployableFiles list"); - } finally { - Assert.assertTrue(testFile.delete(), "File " + testFile + " cannot be deleted"); - } - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java deleted file mode 100644 index 00d08bd90d..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CargoTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.net.URL; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests the JOnAS - CARGO plug-in. This test is expected to work with JOnAS 4 - * and JOnAS 5 without any issues. - * - * @author S. Ali Tokmen - * @author Florent Benoit junit->TestNG - */ -public class CargoTest extends TestCommons { - - @Test - public void testCargo() throws Exception { - final URL url = new URL("http://localhost:" + this.webcontainerPort + "/cargocpc/index.html"); - final String expected = "Cargo Ping Component used to verify if the container is started."; - - String content = null; - final long stopTime = System.currentTimeMillis() + TestCommons.TIMEOUT * 1000; - while (System.currentTimeMillis() < stopTime) { - Thread.sleep(1000); - content = this.getContentAsString(url); - if (content.contains(expected)) { - break; - } - } - - Assert.assertTrue(content.contains(expected), content + " does not contain " + expected); - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java deleted file mode 100644 index c9521e8038..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/ClassLoaderTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests that the JONAS-364 bug doesn't happen. - * @author Florent - */ -public class ClassLoaderTest extends TestCommons { - - @Test - public void testJonas364() throws Exception { - String jBase = getJOnASBase(); - Assert.assertNotNull(jBase, "Unable to get JOnAS Base property"); - - // Check the file with result is here - File resultFile = new File(jBase + File.separator + "classloader-results.txt"); - - Assert.assertTrue(resultFile.exists(), "No results for classloader"); - - // Read the first line - FileReader fReader = new FileReader(resultFile); - BufferedReader bufferedReader = new BufferedReader(fReader); - String firstLine = bufferedReader.readLine(); - Assert.assertEquals(firstLine, "OK"); - String secondLine = bufferedReader.readLine(); - Assert.assertEquals(secondLine, "OK"); - - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java deleted file mode 100644 index f10c6a88aa..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/CookieManager.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.IOException; -import java.net.URLConnection; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -/** - * HTTP cookie manager. - * - * @author S. Ali Tokmen - */ -public class CookieManager { - - private static final String DATE_FORMAT = "EEE, dd-MMM-yyyy hh:mm:ss z"; - - private static final DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); - - private List cookies; - - /** - * Constructs a cookie manager with no cookies. - */ - public CookieManager() { - this.cookies = new ArrayList(); - } - - /** - * Constructs a cookie manager with no cookies. - * - * @param copy CookieManager to copy cookies from. - */ - public CookieManager(CookieManager copy) { - if (copy != null) { - this.cookies = new ArrayList(copy.cookies); - } else { - this.cookies = new ArrayList(); - } - } - - /** - * Adds a cookie to the cookies list. - * - * @param cookie Cookie string to add. - */ - private void addCookie(String cookie) { - String key = cookie.substring(0, cookie.indexOf('=')); - for (String c : this.cookies) { - String k = c.substring(0, c.indexOf('=')); - if (k.equals(key)) { - this.cookies.remove(cookie); - break; - } - } - this.cookies.add(cookie); - } - - /** - * Retrieves and stores cookies returned by the host on the other side of - * the the open java.net.URLConnection. The connection MUST have been opened - * using the connect() method or a IOException will be thrown. - * - * @param conn A URLConnection - must be open, or IOException will be thrown - * @throws IOException Thrown if conn is not open. - */ - public void storeCookies(URLConnection conn) throws IOException { - String headerName = null; - for (int i = 1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) { - if ("Set-Cookie".equals(headerName)) { - addCookie(conn.getHeaderField(i)); - } - } - } - - /** - * Prior to opening a URLConnection, calling this method will set all - * unexpired cookies that match the path or subpaths for thi underlying URL. - * The connection MUST NOT have been opened method or an IOException will be - * thrown. - * - * @param conn A URLConnection - must NOT be open, or IOException will be - * thrown - * @throws IOException Thrown if conn has already been opened. - * @throws ParseException Thrown if the "expires" field of the cookie is not - * a valid date. - */ - public void setCookies(URLConnection conn) throws IOException, ParseException { - StringBuilder cookies = new StringBuilder(); - for (String cookie : this.cookies) { - String c = null; - String domain = ""; - String path = ""; - Date expires = null; - for (String part : cookie.split(";")) { - if (c == null) { - c = part; - } - String[] parts = part.trim().split("="); - if (parts.length == 2) { - if ("domain".equals(parts[0])) { - domain = parts[1]; - } else if ("path".equals(parts[0])) { - path = parts[1]; - } else if ("expires".equals(parts[0])) { - expires = dateFormat.parse(parts[1]); - } - } - } - if (c == null) { - break; - } - if (expires != null) { - if ((new Date()).after(expires)) { - break; - } - } - if (!conn.getURL().getHost().endsWith(domain)) { - break; - } - if (!conn.getURL().getPath().startsWith(path)) { - break; - } - if (cookies.length() > 0) { - cookies.append("; "); - } - cookies.append(c); - } - if (cookies.length() > 0) { - conn.setRequestProperty("Cookie", cookies.toString()); - } - } - - @Override - public String toString() { - return super.toString() + this.cookies; - } -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java deleted file mode 100644 index 801d039253..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JDBCConnectionLeakTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.net.URL; - -import javax.management.Attribute; -import javax.management.ObjectName; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests the JDBC connection leak servlet. - * - * @author Florent Benoit - */ -public class JDBCConnectionLeakTest extends TestCommons { - - /** - * Test that the connection leak closing mechanism is working - * @throws Exception - */ - @Test - public void testConnectionLeak() throws Exception { - int CONNECTION_LEAKS_REQUEST = 3; - - ObjectName datasourceON = - new ObjectName("jonas:j2eeType=JCAConnectionFactory,name=jdbc_1,JCAResource=jdbc_1,J2EEServer=jonas"); - ObjectName jndiJDBCInterceptorON = new ObjectName("jonas:type=service,name=jndi-interceptors,interceptor=" - + "org.ow2.jonas.jndi.interceptors.impl.datasource.DataSourceLeakDetectorContextInterceptor"); - - // Check there is no busy connections - Integer currentBusy = (Integer) this.mBeanServerConnection.getAttribute(datasourceON, "currentBusy"); - Assert.assertNotNull(currentBusy); - Assert.assertEquals(currentBusy.intValue(), 0); - - // Do some connection leaks - for (int i = 0; i < CONNECTION_LEAKS_REQUEST; i++) { - hitConnectionLeakServlet(); - } - - // Check busy are still to 0 (automatic close of connection leak is working) - // Wait a little - Thread.sleep(2000); - currentBusy = (Integer) this.mBeanServerConnection.getAttribute(datasourceON, "currentBusy"); - Assert.assertEquals(currentBusy.intValue(), 0); - - // Disable automatic close of connection leaks - Attribute attribute = new Attribute("forceClose", false); - this.mBeanServerConnection.setAttribute(jndiJDBCInterceptorON, attribute); - - // Do some connection leaks - for (int i = 0; i < CONNECTION_LEAKS_REQUEST; i++) { - hitConnectionLeakServlet(); - } - - // Check that now we have busy connections - // Wait a little - Thread.sleep(2000); - currentBusy = (Integer) this.mBeanServerConnection.getAttribute(datasourceON, "currentBusy"); - Assert.assertEquals(currentBusy.intValue(), CONNECTION_LEAKS_REQUEST); - } - - /** - * Make a request and check that the result is OK - */ - protected void hitConnectionLeakServlet() throws Exception { - // Connect on the servlet that is making connection leaks - final URL url = new URL("http://localhost:" + this.webcontainerPort + "/connection-leaks/"); - final String expected = "Example OK"; - - String content = null; - final long stopTime = System.currentTimeMillis() + TestCommons.TIMEOUT * 1000; - while (System.currentTimeMillis() < stopTime) { - Thread.sleep(1000); - content = this.getContentAsString(url); - if (content.contains(expected)) { - break; - } - } - // Check expected value - Assert.assertTrue(content.contains(expected), content + " does not contain " + expected); - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java deleted file mode 100644 index 548550aa60..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSAddTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.lang.reflect.Method; -import java.net.URL; -import java.util.Random; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; - -/** - * Tests the JAX-WS WSAdd service. - */ -public class JaxWSAddTest extends TestCommons { - - private String serviceURL; - - private URL wsdlURL; - - @Test - public void waitForWSAddServiceInitialization() throws Exception { - this.serviceURL = "http://localhost:" + this.webcontainerPort + "/wsadd-sample/WSAddService"; - this.wsdlURL = new URL(this.serviceURL + "?wsdl"); - - final String expected = "http://wsadd.applis.tests.jonas.ow2.org/"; - - String content = null; - final long stopTime = System.currentTimeMillis() + TestCommons.TIMEOUT * 1000; - while (System.currentTimeMillis() < stopTime) { - Thread.sleep(1000); - content = this.getContentAsString(this.wsdlURL); - if (content.contains(expected)) { - break; - } - } - - Assert.assertTrue(content.contains(expected), content + " does not contain " + expected); - } - - - @Test(dependsOnMethods = "waitForWSAddServiceInitialization") - public void testWSAddService() throws Exception { - final Random random = new Random(System.currentTimeMillis()); - final int op1 = random.nextInt(); - final int op2 = random.nextInt(); - - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(this.wsdlURL); - - Object addRequest = Thread.currentThread().getContextClassLoader().loadClass("org.ow2.jonas.tests.applis.wsadd.AddRequest").newInstance(); - Method setOp1 = addRequest.getClass().getMethod("setOp1", Integer.TYPE); - Method setOp2 = addRequest.getClass().getMethod("setOp2", Integer.TYPE); - setOp1.invoke(addRequest, op1); - setOp2.invoke(addRequest, op2); - Object addResponse = client.invoke("add", addRequest)[0]; - - Method getReturn = addResponse.getClass().getMethod("getReturn"); - String sresult = getReturn.invoke(addResponse).toString(); - int result = 0; - try { - result = Integer.parseInt(sresult); - } catch (NumberFormatException e) { - Assert.fail("did not get a add result value: " + sresult); - } - - Assert.assertEquals(result, op1+op2, "add result incorrect: " + result + ", " + op1 + ", " + op2); - - } - - // uncomment the test to reproduce the Bug JIRA #213 - //@Test(dependsOnMethods = "waitForWSAddServiceInitialization") - public void testEnvEntryInWSBug213() throws Exception { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(this.wsdlURL); - - Object checkResponse = client.invoke("checkEnvEntry")[0]; - - Method getReturn = checkResponse.getClass().getMethod("getReturn"); - String sresult = getReturn.invoke(checkResponse).toString(); - boolean result = result = Boolean.valueOf(sresult); - Assert.assertTrue(result, "Env-Entry in WS-Pojo checking failed"); - - } - - // uncomment the test to reproduce the Bug JIRA #215 - //@Test(dependsOnMethods = "waitForWSAddServiceInitialization") - public void testEjbInWSBug215() throws Exception { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(this.wsdlURL); - - Object checkResponse = client.invoke("checkEjb")[0]; - - Method getReturn = checkResponse.getClass().getMethod("getReturn"); - String sresult = getReturn.invoke(checkResponse).toString(); - boolean result = result = Boolean.valueOf(sresult); - Assert.assertTrue(result, "@EJB in WS-Pojo checking failed"); - - } - - // uncomment the test to reproduce the Bug JIRA #215 - //@Test(dependsOnMethods = "waitForWSAddServiceInitialization") - public void testResourceInWSBug215() throws Exception { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(this.wsdlURL); - - Object checkResponse = client.invoke("checkResource")[0]; - - Method getReturn = checkResponse.getClass().getMethod("getReturn"); - String sresult = getReturn.invoke(checkResponse).toString(); - boolean result = result = Boolean.valueOf(sresult); - Assert.assertTrue(result, "@Resource in WS-Pojo checking failed"); - - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java deleted file mode 100644 index 7b2bdf17bf..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JaxWSTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.lang.reflect.Method; -import java.net.URL; -import java.util.UUID; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; - -/** - * Tests the JAX-WS services. - */ -public class JaxWSTest extends TestCommons { - - private String serviceURL; - - private URL wsdlURL; - - @Test - public void waitForQuoteServiceInitialization() throws Exception { - this.serviceURL = "http://localhost:" + this.webcontainerPort + "/quote/QuoteReporterService"; - this.wsdlURL = new URL(this.serviceURL + "?wsdl"); - - final String expected = "http://jonas.ow2.org/tutorial/jaxws/quote"; - - String content = null; - final long stopTime = System.currentTimeMillis() + TestCommons.TIMEOUT * 1000; - while (System.currentTimeMillis() < stopTime) { - Thread.sleep(1000); - content = this.getContentAsString(this.wsdlURL); - if (content.contains(expected)) { - break; - } - } - - Assert.assertTrue(content.contains(expected), content + " does not contain " + expected); - } - - @Test(dependsOnMethods = "waitForQuoteServiceInitialization") - public void checkBugJonas131() throws Exception { - // JONAS-131: When exposing WebServices with OnDemand feature enabled, - // the specified URL, where the webservice is available, is displayed - // using the "onDemand" port and not the web application server port. - - final String content = this.getContentAsString(this.wsdlURL); - Assert.assertTrue(content.contains(this.serviceURL), content + " does not contain " + this.wsdlURL); - } - - @Test(dependsOnMethods = "waitForQuoteServiceInitialization") - public void testQuoteService() throws Exception { - final String quoteTicker = UUID.randomUUID().toString(); - - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(this.wsdlURL); - - Object quoteResponse = client.invoke("getQuote", quoteTicker)[0]; - Method getTicker = quoteResponse.getClass().getMethod("getTicker"); - Method getValue = quoteResponse.getClass().getMethod("getValue"); - - String ticker = getTicker.invoke(quoteResponse).toString(); - String value = getValue.invoke(quoteResponse).toString(); - - Assert.assertEquals(ticker, quoteTicker); - try { - Double.parseDouble(value); - } catch (NumberFormatException e) { - Assert.fail("did not get a ticker value: " + value); - } - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java deleted file mode 100644 index 2fcc4009bb..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/JndiTest.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import org.ow2.easybeans.osgi.tests.AbsTesting; -import org.ow2.jonas.tests.applications.jndi.ejb3.Jndi; -import org.testng.Assert; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import java.util.Hashtable; - -/** - * Integration tests of the JNDI service - * @author Jeremy Cazaux - */ -public class JndiTest extends AbsTesting { - - /** - * The context name of the EJB to lookup - */ - public final static String JNDI_EJB_KEY = "ejb/test/jndi"; - - /** - * Key of first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_KEY_1 = "jndi/developer"; - - /** - * Value of the first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_VALUE_1 = "The JOnAS Team"; - - /** - * Type of the first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_TYPE_1 ="java.lang.String"; - - /** - * Key of second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_KEY_2 = "jndi/arch"; - - /** - * Value of the second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_VALUE_2 = "64"; - - /** - * Type of the second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_TYPE_2 = "java.lang.Integer"; - - /** - * JNDI key of the empty value example - */ - public final static String EMPTY_VALUE_EXAMPLE_JNDI_KEY = "test/value/empty"; - - /** - * The system property for the port of the smartclient - */ - public final static String SMART_CLIENT_PORT_SYSTEM_PROPERTY = "smartclient.port"; - - /** - * Default InitialContextFactory to use. - */ - private static final String INITIAL_CONTEXT_FACTORY = "org.ow2.easybeans.component.smartclient.spi.SmartContextFactory"; - - /** - * URL of the provider (without the port) - */ - private static final String PROVIDER_URL = "smart://localhost:"; - - /** - * The context - */ - private Context initialContext; - - /* - * The remote EJB - */ - private Jndi ejb; - - /** - * The old classloader - */ - private ClassLoader oldClassLoader; - - /** - * Initialize the context - */ - @BeforeClass - public void initInitialContext() throws Exception { - super.init(); - - this.initialContext = getInitialContext(); - - //lookup the EJB from the JNDI context - this.ejb = null; - try { - this.ejb = Jndi.class.cast(this.initialContext.lookup(JNDI_EJB_KEY)); - } catch (NamingException e) { - Assert.fail("Cannot lookup context " + JNDI_EJB_KEY, e); - } - - //nedd to fix a classloader IRMI issue with the smartclient (some class wasn't downloaded...). Ugly but usefull - //to fix a IRMI issue - this.oldClassLoader = Thread.currentThread().getContextClassLoader(); - ClassLoader ejbClassLoader = this.ejb.getClass().getClassLoader(); - Thread.currentThread().setContextClassLoader(ejbClassLoader); - } - - /** - * JNDI injection test of a sample entry - */ - @Test - public void testThatSampleExampleIsOk() throws Exception { - //test the first entry - Object val1 = this.ejb.getValue(SAMPLE_EXAMPLE_JNDI_KEY_1); - Assert.assertEquals(String.valueOf(val1), SAMPLE_EXAMPLE_JNDI_VALUE_1); - Assert.assertEquals(val1.getClass().getName(),SAMPLE_EXAMPLE_JNDI_TYPE_1); - - //test the second entry - Object val2 = this.ejb.getValue(SAMPLE_EXAMPLE_JNDI_KEY_2); - Assert.assertEquals(String.valueOf(val2), SAMPLE_EXAMPLE_JNDI_VALUE_2); - Assert.assertEquals(val2.getClass().getName(),SAMPLE_EXAMPLE_JNDI_TYPE_2); - } - - /** - * Tetst that empty value is Ok - */ - @Test - public void testThatEmptyValueIsOk() { - Object value = this.ejb.getValue(EMPTY_VALUE_EXAMPLE_JNDI_KEY); - Assert.assertTrue(value != null); - } - - /** - * @return Returns the InitialContext. - * @throws javax.naming.NamingException If the Context cannot be created. - */ - private static Context getInitialContext() throws NamingException { - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); - env.put(Context.PROVIDER_URL, PROVIDER_URL + System.getProperty(SMART_CLIENT_PORT_SYSTEM_PROPERTY)); - - return new InitialContext(env); - } - - /** - * Reset the classloader after that all test methods in the current class have been run. - */ - @AfterSuite - public void resetClassLoader() { - Thread.currentThread().setContextClassLoader(this.oldClassLoader); - } -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java deleted file mode 100644 index d82fe147dd..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/MultitenantTest.java +++ /dev/null @@ -1,413 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.cargo.jrmp; - -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.io.IOUtils; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import javax.management.Attribute; -import javax.management.MBeanException; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.Authenticator; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Multitenant Service test suite.
- *
- * - * @author Mohammed Boukada - */ -public class MultitenantTest extends TestCommons { - - /** - * J2EEServer object name. - */ - private static ObjectName j2eeServer; - - /** - * Multitenant service object name. - */ - private static ObjectName multitenant; - - /** - * Was multitenant started at the beginning of the test? - */ - private static boolean multitenantStarted; - - /** - * File name of test-multitenant-war.war - */ - private String tenantWar; - - /** - * File name of test-multitenant-T1.ear - */ - private String tenant1File; - - /** - * File name of test-multitenant-T2.ear - */ - private String tenant2File; - - /** - * Project version - */ - private String projectVersion; - - @Override - @BeforeClass - public void setUp() throws Exception { - super.setUp(); - - // ObjectNames used by these tests - j2eeServer = ObjectName.getInstance("jonas:j2eeType=J2EEServer,name=jonas"); - multitenant = ObjectName.getInstance("jonas:type=service,name=multitenant"); - - projectVersion = System.getProperty("project.version"); - Assert.assertNotNull(projectVersion, "project.version not set!"); - } - - @Test - public void deactivateDevelopmentMode() throws Exception { - ObjectName depmonitor = new ObjectName("jonas:type=service,name=depmonitor"); - this.mBeanServerConnection.setAttribute(depmonitor, new Attribute("development", Boolean.FALSE)); - } - - @SuppressWarnings("unchecked") - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void enableMultitenant() throws Exception { - final Object[] opParams = {"multitenant"}; - final String[] opSignature = {"java.lang.String"}; - - if ("RUNNING".equals(mBeanServerConnection.invoke(j2eeServer, "getServiceState", opParams, opSignature))) { - multitenantStarted = true; - mBeanServerConnection.invoke(j2eeServer, "stopService", opParams, opSignature); - } - - mBeanServerConnection.invoke(j2eeServer, "startService", opParams, opSignature); - while (!"RUNNING".equals(mBeanServerConnection.invoke(j2eeServer, "getServiceState", opParams, opSignature))) { - System.out.println("multitenant service not RUNNING yet..."); - Thread.sleep(1000); - } - } - - @Test(dependsOnMethods = "enableMultitenant") - public void testDeployTenantWar() throws Exception { - tenantWar = deployApplication("tenant-war/test-multitenant-war.war"); - String response = getURL("http://localhost:" + webcontainerPort + "/multitenant-war", null, null); - checkString(response, "Connection error: [404] Not Found"); - response = getURL("http://localhost:" + webcontainerPort + "/T99/multitenant-war", null, null); - checkString(response, "Hello World! This is a multitenant war application"); - } - - @Test(dependsOnMethods = "testDeployTenantWar") - public void testUndeployTenantWar() throws Exception { - undeployApplication(tenantWar); - - String response = getURL("http://localhost:" + webcontainerPort + "/T99/multitenant-war", null, null); - checkString(response, "Connection error: [404] Not Found"); - } - - @Test(dependsOnMethods = "enableMultitenant") - public void testDeployTenants() throws Exception { - tenant1File = deployApplication("tenant-ear/test-multitenant-T1.ear"); - // Test context root customization - String response = getURL("http://localhost:" + webcontainerPort + "/test-multitenant", null, null); - checkString(response, "Connection error: [404] Not Found"); - response = getURL("http://localhost:" + webcontainerPort + "/T1/test-multitenant", null, null); - checkString(response, "Hello, World!"); - response = getURL("http://localhost:" + webcontainerPort + "/T1/test-multitenant/test-servlet", null, null); - checkString(response, "TestServlet : Hey !"); - tenant2File = deployApplication("tenant-ear/test-multitenant-T2.ear"); - response = getURL("http://localhost:" + webcontainerPort + "/test-multitenant", null, null); - checkString(response, "Connection error: [404] Not Found"); - response = getURL("http://localhost:" + webcontainerPort + "/T2/test-multitenant", null, null); - checkString(response, "Hello, World!"); - response = getURL("http://localhost:" + webcontainerPort + "/T2/test-multitenant/test-servlet", null, null); - checkString(response, "TestServlet : Hey !"); - - // Test MBeans customization - Assert.assertFalse(mBeanServerConnection.isRegistered(new ObjectName("Hello:type=HelloObject")), - "MBean ObjectName must be prefixed by tenant-id"); - Assert.assertTrue(mBeanServerConnection.isRegistered(new ObjectName("Hello:type=HelloObject,tenant-id=T1")), - "MBean ObjectName must be prefixed by tenant-id"); - Assert.assertTrue(mBeanServerConnection.isRegistered(new ObjectName("Hello:type=HelloObject,tenant-id=T2")), - "MBean ObjectName must be prefixed by tenant-id"); - - List jndiNames = listJNDINames(); - String notBoundName = "javaEEApplicationName/test-multitenant/Hello"; - String nameT1 = "T1/javaEEApplicationName/test-multitenant/Hello"; - String nameT2 = "T2/javaEEApplicationName/test-multitenant/Hello"; - - if (jndiNames.contains(notBoundName)) { - throw new Exception(notBoundName + " must not be bound, it is not prefixed by tenant-id"); - } - if (!jndiNames.contains(nameT1)) { - throw new Exception(nameT1 + " must be bound for T1"); - } - if (!jndiNames.contains(nameT2)) { - throw new Exception(nameT2 + " must be bound for T2"); - } - } - - @Test(dependsOnMethods = "testDeployTenants") - public void testUndeployTenants() throws Exception { - undeployApplication(tenant1File); - String response = getURL("http://localhost:" + webcontainerPort + "/T1/test-multitenant", null, null); - checkString(response, "Connection error: [404] Not Found"); - - undeployApplication(tenant2File); - response = getURL("http://localhost:" + webcontainerPort + "/T2/test-multitenant", null, null); - checkString(response, "Connection error: [404] Not Found"); - } - - private String deployApplication(final String filename) throws Exception { - Object[] opParams; - String[] opSignature; - - System.out.println("Now deploying " + filename); - InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filename); - if (inputStream == null) { - throw new FileNotFoundException("Cannot find \"" + filename + "\" in the class loader"); - } - byte[] bytesOfFile = IOUtils.toByteArray(inputStream); - - String deployFilename; - if (filename.contains("/")) { - deployFilename = filename.substring(filename.lastIndexOf('/')); - } else { - deployFilename = filename; - } - opParams = new Object[] {bytesOfFile, deployFilename, false}; - opSignature = new String[] {"[B", "java.lang.String", "boolean"}; - String sendFile = (String) mBeanServerConnection.invoke(j2eeServer, "sendFile", opParams, opSignature); - - opParams = new Object[] {sendFile}; - opSignature = new String[] {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "deploy", opParams, opSignature); - - return sendFile; - } - - private void undeployApplication(final String filename) throws Exception { - System.out.println("Now undeploying " + filename); - - Object[] opParams; - String[] opSignature; - - opParams = new Object[] {filename}; - opSignature = new String[] {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "undeploy", opParams, opSignature); - mBeanServerConnection.invoke(j2eeServer, "removeModuleFile", opParams, opSignature); - } - - private String getURL(final String url, final boolean expect404, final CookieManager cookies) throws Exception { - URL urlObject = new URL(url); - HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection(); - try { - System.out.println("Sending cookies: " + cookies); - cookies.setCookies(connection); - if (expect404) { - try { - connection.getInputStream(); - } catch (Exception ignored) { - // We'll check the response code only - } - - if (connection.getResponseCode() != HttpURLConnection.HTTP_NOT_FOUND) { - Assert.fail("Did not get an error " + HttpURLConnection.HTTP_NOT_FOUND + " but rather a code " - + connection.getResponseCode() + " (" + connection.getResponseMessage() - + ") after application undeployment!"); - } - - return null; - } else { - InputStream inputStream; - try { - inputStream = connection.getInputStream(); - } catch (Exception e) { - Assert.fail("HTTP request failed: " + connection.getResponseCode() + " " + connection.getResponseMessage()); - return null; - } - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - StringBuilder builder = new StringBuilder(); - - String inputLine; - while ((inputLine = reader.readLine()) != null) { - builder.append(inputLine); - builder.append(' '); - } - reader.close(); - - cookies.storeCookies(connection); - System.out.println("Received cookies: " + cookies); - - return builder.toString(); - } - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - private String getURL(final String url) throws Exception { - return getURL(url, null, null); - } - - private String getURL(final String url, final String username, final String password) throws Exception { - HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); - try { - connection.setRequestMethod("GET"); - - if (username != null) { - Base64 enc = new Base64(); - String authData = username + ":" + password; - String base64AuthData = enc.encodeToString(authData.getBytes("UTF-8")); - if (base64AuthData.contains("=")) { - // Cut the string at the first equals sign - // For some reason, the Base64 implementation adds characters - // afterwards, which get refused by the URL validator - base64AuthData = base64AuthData.substring(0, base64AuthData.indexOf('=')); - } - String basicHeader = "Basic " + base64AuthData + '='; - - System.out.println("Setting Authorization header: " + basicHeader); - connection.setRequestProperty("Authorization", basicHeader); - } else { - // FIXME: this can be removed as soon as - // https://issues.apache.org/jira/browse/CXF-2702 - // gets fixed and CXF 2.2.7 gets released. - Authenticator.setDefault(null); - } - - String response = null; - int responseCode = connection.getResponseCode(); - - if (responseCode == HttpURLConnection.HTTP_OK) { - InputStream is = connection.getInputStream(); - try { - response = IOUtils.toString(is); - } finally { - is.close(); - is = null; - } - } else { - StringBuilder sb = new StringBuilder(); - sb.append("Connection error: "); - sb.append("["); - sb.append(connection.getResponseCode()); - sb.append("] "); - sb.append(connection.getResponseMessage()); - printHeaders(sb, connection.getHeaderFields()); - response = sb.toString(); - } - - return response; - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - private void printHeaders(StringBuilder sb, Map> headers) { - sb.append("\n"); - sb.append("Headers: "); - sb.append(headers.keySet()); - sb.append("\n"); - for(Map.Entry< String, List < String >> entry : headers.entrySet()) { - String header = entry.getKey(); - sb.append(" * "); - sb.append(header); - sb.append(" : "); - sb.append(entry.getValue()); - sb.append("\n"); - } - } - - private List listJNDINames() throws Exception { - List listJNDINames = new ArrayList(); - try { - ArrayList ons = listJNDIResources("jonas", "jonas", mBeanServerConnection); - for (ObjectName on : ons) { - try { - String[] names = (String[]) mBeanServerConnection.getAttribute(on, "Names"); - for (int i = 0; i < names.length; i++) { - listJNDINames.add(names[i]); - } - } catch (MBeanException e) { - throw new Exception("Cannot access MBean attributes values (" + on + ").",e); - - } - } - } catch (Exception e) { - throw new Exception("Cannot list bound JNDI names.", e); - } - return listJNDINames; - } - - public static ArrayList listJNDIResources(final String domain, final String server, final MBeanServerConnection conn) throws Exception { - ArrayList res = new ArrayList(); - // Get JNDIResource MBean - ObjectName ons = getJ2eeMBean(domain, server, "JNDIResource"); - Set onSet = conn.queryNames(ons, null); - Iterator it = onSet.iterator(); - while(it.hasNext()) { - res.add(it.next()); - } - return res; - } - - private static ObjectName getJ2eeMBean(final String domain, final String server, final String type) throws MalformedObjectNameException { - StringBuilder sb = new StringBuilder(domain); - sb.append(":"); - sb.append("J2EEServer"); - sb.append("="); - sb.append(server); - sb.append(","); - sb.append("j2eeType"); - sb.append("="); - sb.append(type); - sb.append(",*"); - return ObjectName.getInstance(sb.toString()); - } -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java deleted file mode 100644 index 9374321083..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/TestCommons.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import javax.management.MBeanServerConnection; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; - -/** - * Common test files. - * - * @author S. Ali Tokmen - */ -public class TestCommons { - - protected static final int TIMEOUT = 10; - - protected static MBeanServerConnection mBeanServerConnection; - - protected int webcontainerPort; - - @BeforeClass - public void setUp() throws Exception { - String webcontainerPort = System.getProperty("webcontainer.port"); - Assert.assertNotNull(webcontainerPort, "webcontainer.port not set!"); - this.webcontainerPort = Integer.parseInt(webcontainerPort); - if (mBeanServerConnection == null) { - mBeanServerConnection = getMBeanServerConnection("jonas", "jonas"); - } - } - - /** - * Get an MBeanServerConnection using the provided credentials. - * @param username User name. - * @param password Password. - * @return An MBeanServerConnection. - * @throws Exception If anything fails, for example invalid credentials. - */ - protected MBeanServerConnection getMBeanServerConnection(final String username, final String password) throws Exception { - String carolUrl = System.getProperty("carol.url"); - Assert.assertNotNull(carolUrl, "carol.url not set!"); - - Map properties = new HashMap(1); - if (username != null && password != null) { - properties.put(JMXConnector.CREDENTIALS, new String[] { username, password } ); - } - JMXServiceURL address = new JMXServiceURL(carolUrl); - JMXConnector jmxConnector = JMXConnectorFactory.connect(address, properties); - return jmxConnector.getMBeanServerConnection(); - } - - /** - * Get the URL content as a String. - * @param url the url - * @return the URL content as a String - * @throws IOException if an I/O exception occurs. - */ - protected String getContentAsString(final URL url) throws IOException { - final InputStream inStream = url.openStream(); - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - int c; - while ((c = inStream.read()) != -1) { - bos.write(c); - } - } finally { - inStream.close(); - bos.flush(); - } - final String urlString = bos.toString(); - return urlString; - } - - /** - * Check if needle appears in haystack. - * @param haystack Haystack to look in. - * @param needle Needle to look for. - */ - protected void checkString(final String haystack, final String needle) { - if (!haystack.contains(needle)) { - Assert.fail("\"" + needle + "\" not found in \"" + haystack + "\""); - } - } - - /** - * @return jonasBase - */ - protected String getJOnASBase() { - return System.getProperty("jonas.base"); - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java deleted file mode 100644 index 9124f03d16..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/VersioningTest.java +++ /dev/null @@ -1,664 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.Authenticator; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import javax.management.Attribute; -import javax.management.ObjectName; - -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.io.IOUtils; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Versioning Service test suite.
- *
- * Note that this also tests various other Java EE aspects of JOnAS, including - * EJB3, the @EJB annotation in servlets, login modules, etc. - * - * @author S. Ali Tokmen - */ -public class VersioningTest extends TestCommons { - - /** - * J2EEServer object name. - */ - private static ObjectName j2eeServer; - - /** - * Versioning service object name. - */ - private static ObjectName versioning; - - /** - * Was versioning started at the beginning of the test? - */ - private static boolean versioningStarted; - - /** - * Old default deployment policy if versioning was started at the beginning - * of the test. - */ - private static String defaultDeploymentPolicy; - - /** - * File name of the version 1.0.0. - */ - private static String version1File; - - /** - * File name of the version 2.0.0. - */ - private static String version2File; - - /** - * File name of the secured-war. - */ - private static String securedWarFile; - - /** - * File name of the non-versioned-war. - */ - private static String nonVersionedWarFile; - - /** - * File name of the root-war. - */ - private static String rootWarFile; - - /** - * Cookie manager that will be used as soon as version 1.0.0 gets deployed. - * It is expected to stay on version 1.0.0. - */ - private static CookieManager client1; - - /** - * Cookie manager that will be used as soon as version 2.0.0 gets deployed. - * It is expected to stay on version 1.0.0. - */ - private static CookieManager client2; - - /** - * Cookie manager that will be used as soon as version 2.0.0 gets set as - * default version. It is expected to stay on version 2.0.0. - */ - private static CookieManager client3; - - private String projectVersion; - - @Override - @BeforeClass - public void setUp() throws Exception { - super.setUp(); - - // Create all cookie managers - client1 = new CookieManager(); - client2 = new CookieManager(); - client3 = new CookieManager(); - - // ObjectNames used by these tests - j2eeServer = ObjectName.getInstance("jonas:j2eeType=J2EEServer,name=jonas"); - versioning = ObjectName.getInstance("jonas:type=service,name=versioning"); - - projectVersion = System.getProperty("project.version"); - Assert.assertNotNull(projectVersion, "project.version not set!"); - } - - @Test - public void deactivateDevelopmentMode() throws Exception { - ObjectName depmonitor = new ObjectName("jonas:type=service,name=depmonitor"); - this.mBeanServerConnection.setAttribute(depmonitor, new Attribute("development", Boolean.FALSE)); - } - - @SuppressWarnings("unchecked") - @Test(dependsOnMethods = "deactivateDevelopmentMode") - public void enableVersioning() throws Exception { - final Object[] opParams = {"versioning"}; - final String[] opSignature = {"java.lang.String"}; - - if ("RUNNING".equals(mBeanServerConnection.invoke(j2eeServer, "getServiceState", opParams, opSignature))) { - versioningStarted = true; - defaultDeploymentPolicy = (String) mBeanServerConnection.getAttribute(versioning, "DefaultDeploymentPolicy"); - mBeanServerConnection.invoke(j2eeServer, "stopService", opParams, opSignature); - } - - mBeanServerConnection.invoke(j2eeServer, "startService", opParams, opSignature); - while (!"RUNNING".equals(mBeanServerConnection.invoke(j2eeServer, "getServiceState", opParams, opSignature))) { - System.out.println("versioning service not RUNNING yet..."); - Thread.sleep(1000); - } - - // Get the Versioning service - boolean versioningEnabled = ((Boolean) mBeanServerConnection.getAttribute(versioning, "VersioningEnabled")).booleanValue(); - if (!versioningEnabled) { - Assert.fail("Cannot enable the versioning service"); - } - } - - @Test(dependsOnMethods = "enableVersioning") - public void testDeployRootWar() throws Exception { - rootWarFile = deployApplication("root-war/root-war.war"); - } - - @Test(dependsOnMethods = "testDeployRootWar") - public void testRootWar() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/test.jsp", null, null); - - checkString(response, "Context URL: \"\""); - checkString(response, "Test image: "); - } - - @Test(dependsOnMethods = "testDeployRootWar") - public void testRootWarVersionedURL() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/-1.0.0/test.jsp", null, null); - - checkString(response, "Context URL: \"/-1.0.0\""); - checkString(response, "Test image: "); - } - - @Test(dependsOnMethods = "testDeployRootWar") - public void testRootRedirectWithContext() throws Exception { - URL redirect = new URL("http://localhost:" + webcontainerPort + "/redirect-servlet-with-context"); - - HttpURLConnection connection = (HttpURLConnection) redirect.openConnection(); - try { - connection.setInstanceFollowRedirects(false); - - Assert.assertEquals(connection.getResponseCode(), HttpURLConnection.HTTP_MOVED_TEMP); - - String location = connection.getHeaderField("Location"); - Assert.assertEquals(location, "http://localhost:" + webcontainerPort + "/somewhere"); - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - @Test(dependsOnMethods = "testDeployRootWar") - public void testRootRedirectWithoutContext() throws Exception { - URL redirect = new URL("http://localhost:" + webcontainerPort + "/redirect-servlet-without-context"); - - HttpURLConnection connection = (HttpURLConnection) redirect.openConnection(); - try { - connection.setInstanceFollowRedirects(false); - - Assert.assertEquals(connection.getResponseCode(), HttpURLConnection.HTTP_MOVED_TEMP); - - String location = connection.getHeaderField("Location"); - Assert.assertEquals(location, "http://localhost:" + webcontainerPort + "/somewhere"); - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - @Test(dependsOnMethods = {"testRootWar", "testRootWarVersionedURL", "testRootRedirectWithContext", - "testRootRedirectWithoutContext"}) - public void testDeployVersion1() throws Exception { - version1File = deployApplication("version1.0.0/test-versioning.ear"); - - verifyVersion(client1, "1.0.0"); - } - - @Test(dependsOnMethods = "enableVersioning") - public void testDeployVersionedWelcomeFiles() throws Exception { - String deployed = deployApplication("welcome-file/test-versioning-welcome.war"); - - // Expect a 302 for virtual context access without trailing '/' - assertHttpRedirectIsOk("http://localhost:" + webcontainerPort + "/welcome", - "http://localhost:" + webcontainerPort + "/welcome/"); - - // Expect a normal HTML response - String content = getURL("http://localhost:" + webcontainerPort + "/welcome/"); - System.out.println(content); - Assert.assertTrue(content.contains("Welcome")); - - // Expect a 302 for versioned context access without trailing '/' - assertHttpRedirectIsOk("http://localhost:" + webcontainerPort + "/welcome-1.0.0", - "http://localhost:" + webcontainerPort + "/welcome-1.0.0/"); - - // Expect a normal HTML response - String content2 = getURL("http://localhost:" + webcontainerPort + "/welcome-1.0.0/"); - System.out.println(content2); - Assert.assertTrue(content2.contains("Welcome")); - - undeployApplication(deployed); - } - - private void assertHttpRedirectIsOk(String in, String expected) throws Exception { - - URL redirect = new URL(in); - HttpURLConnection connection = (HttpURLConnection) redirect.openConnection(); - try { - connection.setInstanceFollowRedirects(false); - - Assert.assertEquals(connection.getResponseCode(), HttpURLConnection.HTTP_MOVED_TEMP); - - String location = connection.getHeaderField("Location"); - Assert.assertEquals(location, expected); - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - - } - - @Test(dependsOnMethods = "testDeployVersion1") - public void testDeployVersion2() throws Exception { - version2File = deployApplication("version2.0.0/test-versioning.ear"); - - verifyVersion(client1, "1.0.0"); - verifyVersion(client2, "1.0.0"); - } - - @Test(dependsOnMethods = "testDeployVersion2") - public void testSetDefaultVersion2() throws Exception { - final Object[] opParams = {"/test-versioning-2.0.0", "Default"}; - final String[] opSignature = {"java.lang.String", "java.lang.String"}; - - ObjectName webModule = ObjectName.getInstance( - "jonas:j2eeType=WebModule,name=//localhost/test-versioning,J2EEApplication=none,J2EEServer=jonas,virtualContext=true"); - mBeanServerConnection.invoke(webModule, "rebindContext", opParams, opSignature); - - verifyVersion(client1, "1.0.0"); - verifyVersion(client2, "1.0.0"); - verifyVersion(client3, "2.0.0"); - } - - @Test(dependsOnMethods = "testSetDefaultVersion2") - public void testRedirectWithContext() throws Exception { - URL redirect = new URL("http://localhost:" + webcontainerPort + "/test-versioning/redirect-servlet-with-context"); - - HttpURLConnection connection = (HttpURLConnection) redirect.openConnection(); - try { - connection.setInstanceFollowRedirects(false); - - Assert.assertEquals(connection.getResponseCode(), HttpURLConnection.HTTP_MOVED_TEMP); - - String location = connection.getHeaderField("Location"); - Assert.assertEquals(location, "http://localhost:" + webcontainerPort + "/test-versioning/somewhere"); - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - @Test(dependsOnMethods = "testSetDefaultVersion2") - public void testRedirectWithoutContext() throws Exception { - URL redirect = new URL("http://localhost:" + webcontainerPort + "/test-versioning/redirect-servlet-without-context"); - - HttpURLConnection connection = (HttpURLConnection) redirect.openConnection(); - try { - connection.setInstanceFollowRedirects(false); - - Assert.assertEquals(connection.getResponseCode(), HttpURLConnection.HTTP_MOVED_TEMP); - - String location = connection.getHeaderField("Location"); - Assert.assertEquals(location, "http://localhost:" + webcontainerPort + "/test-versioning/somewhere"); - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - @Test(dependsOnMethods = "testSetDefaultVersion2") - public void testUndeployVersion1() throws Exception { - undeployApplication(version1File); - - verifyVersion(client1, "2.0.0"); - verifyVersion(client2, "2.0.0"); - verifyVersion(client3, "2.0.0"); - } - - @Test(dependsOnMethods = {"testUndeployVersion1", "testRedirectWithContext", "testRedirectWithoutContext"}) - public void testUndeployVersion2() throws Exception { - undeployApplication(version2File); - - verifyVersion(client1, null); - verifyVersion(client2, null); - verifyVersion(client3, null); - } - - @Test(dependsOnMethods = {"testRootWar", "testRootWarVersionedURL"}) - public void testDeploySecuredWar() throws Exception { - securedWarFile = deployApplication("secured-war/secured-war.war"); - } - - @Test(dependsOnMethods = "testDeploySecuredWar") - public void testSecuredWarWithoutCredentials() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/", null, null); - checkString(response, "Connection error: [401] Unauthorized"); - } - - @Test(dependsOnMethods = "testDeploySecuredWar") - public void testSecuredWarWithIncorrectCredentials() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/", "jetty", "jetty"); - checkString(response, "Connection error: [403] Forbidden"); - } - - @Test(dependsOnMethods = "testDeploySecuredWar") - public void testSecuredWarWithCorrectCredentials() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/", "jonas", "jonas"); - checkString(response, "Hello, World"); - } - - @Test(dependsOnMethods = "testDeploySecuredWar") - public void testDeployNonVersionedWarUnderTheSecuredWarContext() throws Exception { - nonVersionedWarFile = deployApplication("non-versioned-war/non-versioned-war.war"); - } - - @Test(dependsOnMethods = "testDeployNonVersionedWarUnderTheSecuredWarContext") - public void testNonVersionedWarUnderTheSecuredWarContext() throws Exception { - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/non-versioned/", null, null); - checkString(response, "Hello again, World"); - } - - @Test(dependsOnMethods = {"testSecuredWarWithoutCredentials", "testSecuredWarWithIncorrectCredentials", - "testSecuredWarWithCorrectCredentials", "testNonVersionedWarUnderTheSecuredWarContext"}) - public void testUndeploySecuredWar() throws Exception { - undeployApplication(securedWarFile); - - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/", null, null); - checkString(response, "Connection error: [404] Not Found"); - } - - @Test(dependsOnMethods = {"testUndeploySecuredWar"}) - public void testUndeployNonVersionedWarUnderTheSecuredWarContext() throws Exception { - undeployApplication(nonVersionedWarFile); - - String response = getURL("http://localhost:" + webcontainerPort + "/secured-war/non-versioned/", null, null); - checkString(response, "Connection error: [404] Not Found"); - } - - @Test(dependsOnMethods = {"testUndeployVersion2", "testUndeployNonVersionedWarUnderTheSecuredWarContext"}) - public void testUndeployRootWar() throws Exception { - undeployApplication(rootWarFile); - - String response = getURL("http://localhost:" + webcontainerPort + "/test.jsp", null, null); - // Might be Bad Request (400) or Not Found (404), see JONAS-121 - // The tomcat7 itests module will check for "Connection error: Not Found" - checkString(response, "Connection error: [404] Not Found"); - } - - @Test(dependsOnMethods = "enableVersioning") - public void testJonas239() throws Exception { - final String JAXWS_SAMPLE = "jonas-itests-applications-jaxws-sample"; - String jaxWsSampleURL = null; - List deployedEars = (List) mBeanServerConnection.getAttribute(j2eeServer, "deployedEars"); - for (String deployedEar : deployedEars) { - if (deployedEar.contains(JAXWS_SAMPLE)) { - jaxWsSampleURL = deployedEar; - break; - } - } - Assert.assertNotNull(jaxWsSampleURL, "Cannot find " + JAXWS_SAMPLE + " in " + deployedEars); - - // Redeploy to have it versioned - final Object[] opParams = {jaxWsSampleURL}; - final String[] opSignature = {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "undeploy", opParams, opSignature); - mBeanServerConnection.invoke(j2eeServer, "deploy", opParams, opSignature); - - String wsdl; - final String originalURL = "http://localhost:" + webcontainerPort + "/quote/QuoteReporterService"; - final String versionedURL = "http://localhost:" + webcontainerPort + "/quote-" + projectVersion - + "/QuoteReporterService"; - - wsdl = getURL(originalURL + "?wsdl"); - Assert.assertTrue(wsdl.contains(originalURL), "The WSDL does not contain " + originalURL + ":\n" + wsdl); - Assert.assertFalse(wsdl.contains(versionedURL), "The WSDL contains " + versionedURL + ":\n" + wsdl); - - wsdl = getURL(versionedURL + "?wsdl"); - Assert.assertTrue(wsdl.contains(versionedURL), "The WSDL does not contain " + versionedURL + ":\n" + wsdl); - Assert.assertFalse(wsdl.contains(originalURL), "The WSDL contains " + originalURL + ":\n" + wsdl); - } - - @Test(dependsOnMethods = {"testUndeployRootWar", "testJonas239"}) - public void testDisableVersioning() throws Exception { - final Object[] opParams = {"versioning"}; - final String[] opSignature = {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "stopService", opParams, opSignature); - while ("RUNNING".equals(mBeanServerConnection.invoke(j2eeServer, "getServiceState", opParams, opSignature))) { - System.out.println("versioning service still RUNNING..."); - Thread.sleep(1000); - } - if (versioningStarted) { - versioningStarted = true; - mBeanServerConnection.invoke(j2eeServer, "startService", opParams, opSignature); - mBeanServerConnection.setAttribute(versioning, new Attribute("DefaultDeploymentPolicy", defaultDeploymentPolicy)); - } - } - - private String deployApplication(final String filename) throws Exception { - Object[] opParams; - String[] opSignature; - - System.out.println("Now deploying " + filename); - InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filename); - if (inputStream == null) { - throw new FileNotFoundException("Cannot find \"" + filename + "\" in the class loader"); - } - byte[] bytesOfFile = IOUtils.toByteArray(inputStream); - - String deployFilename; - if (filename.contains("/")) { - deployFilename = filename.substring(filename.lastIndexOf('/')); - } else { - deployFilename = filename; - } - opParams = new Object[] {bytesOfFile, deployFilename, false}; - opSignature = new String[] {"[B", "java.lang.String", "boolean"}; - String sendFile = (String) mBeanServerConnection.invoke(j2eeServer, "sendFile", opParams, opSignature); - - opParams = new Object[] {sendFile}; - opSignature = new String[] {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "deploy", opParams, opSignature); - - return sendFile; - } - - private void undeployApplication(final String filename) throws Exception { - System.out.println("Now undeploying " + filename); - - Object[] opParams; - String[] opSignature; - - opParams = new Object[] {filename}; - opSignature = new String[] {"java.lang.String"}; - mBeanServerConnection.invoke(j2eeServer, "undeploy", opParams, opSignature); - mBeanServerConnection.invoke(j2eeServer, "removeModuleFile", opParams, opSignature); - } - - private void verifyVersion(final CookieManager cookies, final String version) throws Exception { - String staticResponse = getURL("http://localhost:" + webcontainerPort + "/test-versioning", - version == null, cookies); - String servletResponse = getURL("http://localhost:" + webcontainerPort + "/test-versioning/test-servlet", - version == null, cookies); - if (version != null) { - checkString(staticResponse, "Hello, World"); - - checkString(servletResponse, "WAR version: " + version); - checkString(servletResponse, "EJB version: " + version); - - checkString(servletResponse, "Context URL: \"/test-versioning\""); - checkString(servletResponse, "Test image: "); - - // Output that looks like split but that actually isn't (JONAS-221) - if ("2.0.0".equals(version)) { - checkString(servletResponse, "First part: /te ... and no other parts !"); - } - } - - String jspResponse = getURL("http://localhost:" + webcontainerPort + "/test-versioning/test.jsp", - version == null, cookies); - if (version != null) { - checkString(jspResponse, "Context URL: \"/test-versioning\""); - checkString(jspResponse, "Test image: "); - } - } - - private String getURL(final String url, final boolean expect404, final CookieManager cookies) throws Exception { - URL urlObject = new URL(url); - HttpURLConnection connection = (HttpURLConnection) urlObject.openConnection(); - try { - System.out.println("Sending cookies: " + cookies); - cookies.setCookies(connection); - if (expect404) { - try { - connection.getInputStream(); - } catch (Exception ignored) { - // We'll check the response code only - } - - if (connection.getResponseCode() != HttpURLConnection.HTTP_NOT_FOUND) { - Assert.fail("Did not get an error " + HttpURLConnection.HTTP_NOT_FOUND + " but rather a code " - + connection.getResponseCode() + " (" + connection.getResponseMessage() - + ") after application undeployment!"); - } - - return null; - } else { - InputStream inputStream; - try { - inputStream = connection.getInputStream(); - } catch (Exception e) { - Assert.fail("HTTP request failed: " + connection.getResponseCode() + " " + connection.getResponseMessage()); - return null; - } - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); - StringBuilder builder = new StringBuilder(); - - String inputLine; - while ((inputLine = reader.readLine()) != null) { - builder.append(inputLine); - builder.append(' '); - } - reader.close(); - - cookies.storeCookies(connection); - System.out.println("Received cookies: " + cookies); - - return builder.toString(); - } - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - private String getURL(final String url) throws Exception { - return getURL(url, null, null); - } - - private String getURL(final String url, final String username, final String password) throws Exception { - HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); - try { - connection.setRequestMethod("GET"); - - if (username != null) { - Base64 enc = new Base64(); - String authData = username + ":" + password; - String base64AuthData = enc.encodeToString(authData.getBytes("UTF-8")); - if (base64AuthData.contains("=")) { - // Cut the string at the first equals sign - // For some reason, the Base64 implementation adds characters - // afterwards, which get refused by the URL validator - base64AuthData = base64AuthData.substring(0, base64AuthData.indexOf('=')); - } - String basicHeader = "Basic " + base64AuthData + '='; - - System.out.println("Setting Authorization header: " + basicHeader); - connection.setRequestProperty("Authorization", basicHeader); - } else { - // FIXME: this can be removed as soon as - // https://issues.apache.org/jira/browse/CXF-2702 - // gets fixed and CXF 2.2.7 gets released. - Authenticator.setDefault(null); - } - - String response = null; - int responseCode = connection.getResponseCode(); - - if (responseCode == HttpURLConnection.HTTP_OK) { - InputStream is = connection.getInputStream(); - try { - response = IOUtils.toString(is); - } finally { - is.close(); - is = null; - } - } else { - StringBuilder sb = new StringBuilder(); - sb.append("Connection error: "); - sb.append("["); - sb.append(connection.getResponseCode()); - sb.append("] "); - sb.append(connection.getResponseMessage()); - printHeaders(sb, connection.getHeaderFields()); - response = sb.toString(); - } - - return response; - } finally { - connection.disconnect(); - connection = null; - System.gc(); - } - } - - private void printHeaders(StringBuilder sb, Map> headers) { - sb.append("\n"); - sb.append("Headers: "); - sb.append(headers.keySet()); - sb.append("\n"); - for(Map.Entry< String, List < String >> entry : headers.entrySet()) { - String header = entry.getKey(); - sb.append(" * "); - sb.append(header); - sb.append(" : "); - sb.append(entry.getValue()); - sb.append("\n"); - } - } - -} diff --git a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java b/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java deleted file mode 100644 index 95baaf0e2f..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/java/org/ow2/jonas/itests/cargo/jrmp/WebServicesAuditTestCase.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.itests.cargo.jrmp; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; - -import javax.management.Notification; -import javax.management.NotificationListener; -import javax.management.ObjectName; -import javax.xml.namespace.QName; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.InputStreamEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.util.ObjectEncoder; -import org.testng.annotations.Test; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.fail; - -/** - * A {@code WebServicesAuditTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class WebServicesAuditTestCase extends TestCommons { - - private JaxwsAuditReport report; - private boolean ok = false; - - @Test - public void testInvocationIdIsPropagatedThroughHttp() throws Exception { - String serviceURL = "http://localhost:" + this.webcontainerPort + "/wsadd-sample/PropagationChecker"; - - String invocationId = "parent/0:local/1"; - - DefaultHttpClient httpclient = new DefaultHttpClient(); - - HttpGet get = new HttpGet(serviceURL); - get.setHeader("Invocation-ID", invocationId); - HttpResponse response = httpclient.execute(get); - - - // Get hold of the response entity - HttpEntity entity = response.getEntity(); - - // If the response does not enclose an entity, there is no need - // to worry about connection release - if (entity != null) { - InputStream instream = entity.getContent(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); - // do something useful with the response - String line = reader.readLine(); - assertEquals(line, invocationId); - - // Closing the input stream will trigger connection release - instream.close(); - - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - - } else { - fail("No output for PropagateServlet, was expecting an Invocation-ID"); - } - - } - - @Test - public void testEventReportIsSend() throws Exception { - String serviceURL = "http://localhost:" + this.webcontainerPort + "/wsadd-sample/AuditEventServiceChecker"; - DefaultHttpClient httpclient = new DefaultHttpClient(); - HttpGet get = new HttpGet(serviceURL); - HttpResponse response = httpclient.execute(get); - - // Get hold of the response entity - HttpEntity entity = response.getEntity(); - - // If the response does not enclose an entity, there is no need - // to worry about connection release - - //Thread.sleep(10000); - if (entity != null) { - InputStream instream = entity.getContent(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); - // do something useful with the response - String line = reader.readLine(); - - // Closing the input stream will trigger connection release - instream.close(); - - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - - } else { - fail("No output for AuditEventServiceServlet, was expecting an Invocation-ID"); - } - - } -} diff --git a/jonas/itests/cargo/jrmp/src/test/resources/jonas-290.war b/jonas/itests/cargo/jrmp/src/test/resources/jonas-290.war deleted file mode 100644 index 097ac744894e76cfff0a80f99ac112798e72c30f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1148 zcmWIWW@Zs#U|`^25QtN@mJE%Gv;p$`ftU-3GxJhXEA%o-a&tDH)Hr!|SnHsU!tMj-lugyu;}s2U4UPTX6>auwsJmWt+t08lNPg87H~Aa^h5(=) zAk!EaV!ASI!3-$D38Z~pLmYKI{oM3H${ck%6Itg@FMi3RmXq=;!I? z8XThM>$Y~XZT=wxfwu1+KluftmmXPqAV{gL=~mZ5j+LR3R}K_v58rgYi`iY(q`#vU-tg9nqAnl?Plzzt=_#33FZ+ed3>(y zx;x#bzH{Z1%un9`p3GSo5Oh0(=cKjH9JwNm8IE&{w-m-@R`+ffd)<bUr=lO#5rD!gGfs=Iwqav|R7lA*SxP{K|f^C;s_geIU|g%sQ(; zZA#TayW5!v^CTfR+`neLGNq$OvUM&|AUuDh(Eazaz9Qf$1QobONi6xH_TS>gFR4_E!X@Ncv2 zmlWBs8l|Fh487Spd0PMWR-KOfQ8P_V>p=dp-Fm+Blo~?#QndGd-KV{jN3r9BPR#y^ zuJin#oIk$FEIOk!ZQ>p`=09g*XV~w(-c+X1lbsslxulRSJXg~8{e{z)vtK9KiZYuj z`)^zFv305Ot?2f0nI!(m*iG6;rW{{#sm1Ur!_0eS?vHPBo!IXCSX0h(V%o zWxkGno^GzeA$q=UpMB4q_VL!$yU6RUt99&Zi^y$^!w zI(M!N - - - - strict-consistency - - test/value/empty - The description of my first entry - java.lang.String - - - - \ No newline at end of file diff --git a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml b/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml deleted file mode 100644 index 923df2c9fb..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/jndi/ca-jndi-sample-example.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - strict-consistency - - jndi/developer - The JOnAS Team - java.lang.String - The JOnAS Team - - - jndi/arch - My description - java.lang.Integer - 64 - - - \ No newline at end of file diff --git a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml b/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml deleted file mode 100644 index 2b0fa6565e..0000000000 --- a/jonas/itests/cargo/jrmp/src/test/resources/org/ow2/jonas/itests/cargo/jrmp/soap-request-add.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - 1 - 1 - - - diff --git a/jonas/itests/cargo/pom.xml b/jonas/itests/cargo/pom.xml deleted file mode 100644 index 4883cbcb4e..0000000000 --- a/jonas/itests/cargo/pom.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo - JOnAS :: iTests :: Cargo - Tests the JOnAS distribution via CARGO - pom - - - - org.testng - testng - test - - - commons-codec - commons-codec - 1.4 - test - - - commons-io - commons-io - 1.4 - test - - - - - com.sun.xml.bind - jaxb-xjc - 2.1.12 - test - - - org.apache.cxf - cxf-rt-frontend-jaxws - ${cxf.version} - test - - - org.apache.cxf - cxf-rt-transports-http - ${cxf.version} - test - - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - ${project.version} - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ${project.version} - ear - - - org.ow2.jonas - jonas-itests-applications-versioning - ${project.version} - - - org.ow2.jonas - jonas-itests-applications-multitenant - ${project.version} - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ${project.version} - ear - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - - - org.ow2.jonas - jonas-itests-applications-jndi - ${project.version} - ejb - - - - - org.apache.httpcomponents - httpclient - 4.0.3 - test - - - org.apache.httpcomponents - httpcore - 4.0.1 - test - - - org.ow2.bundles - ow2-audit-report - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - - - - - tomcat6 - jetty6 - - - - - - java6+ - - [1.6,) - - - jrmp - iiop - irmi - jetty8 - safe-startup - security - - - - - diff --git a/jonas/itests/cargo/safe-startup/pom.xml b/jonas/itests/cargo/safe-startup/pom.xml deleted file mode 100644 index 0ba0d9fa08..0000000000 --- a/jonas/itests/cargo/safe-startup/pom.xml +++ /dev/null @@ -1,227 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-itests-cargo-safe-startup - JOnAS :: iTests :: Cargo :: Start fail on error - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - com.sun.xml.bind - jaxb-impl - 2.1.13 - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - - - 0 - jonas5x - installed - ${jonas.root} - - true - - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - jrmp.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - jms.port - ${jms.port} - - - db.port - ${db.port} - - - jonas.base - ${jonas.base} - - - false - - - - - - - diff --git a/jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java b/jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java deleted file mode 100644 index a6e24bca62..0000000000 --- a/jonas/itests/cargo/safe-startup/src/test/java/org/ow2/jonas/itest/safe/startup/FailStartOnErrorTestCase.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itest.safe.startup; - -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.net.ServerSocket; - -/** - * Fail start on error test case - * @author Jeremy Cazaux - */ -public class FailStartOnErrorTestCase { - - /** - * One second delay. - */ - private static final long ONE_SECOND = 1000L; - - /** - * Max waiting time = 120 seconds. - */ - private static final long MAX_WAITING_CARGO_RPC = 120 * ONE_SECOND; - - /** - * JONAS_BASE - */ - public static final String JONAS_BASE = System.getProperty("jonas.base"); - - /** - * WEB HTTP port - */ - public static final int WEB_HTTP_PORT = Integer.parseInt(System.getProperty("webcontainer.port")); - - /** - * DB port - */ - public static final int DB_PORT = Integer.parseInt(System.getProperty("db.port")); - - /** - * JRMP port - */ - public static final int JRMP_PORT = Integer.parseInt(System.getProperty("jrmp.port")); - - /** - * JMS port - */ - public static final int JMS_PORT = Integer.parseInt(System.getProperty("jms.port")); - - /** - * Smartclient port - */ - public static final int SMARTCLIENT_PORT = Integer.parseInt(System.getProperty("smartclient.port")); - - /** - * Fail start on error test case - */ - @Test - public void testThatAJOnASInstanceWithAFailedDeloymentIsNotRunning() throws Exception { - // Wait that CargoRPC.war is deployed - waitCargoRPCIsDeployed(); - Thread.sleep(20 * ONE_SECOND); - checkPortAvailability(WEB_HTTP_PORT); - checkPortAvailability(DB_PORT); - checkPortAvailability(JRMP_PORT); - checkPortAvailability(JMS_PORT); - checkPortAvailability(SMARTCLIENT_PORT); - } - - - /** - * Wait CargoRPC is deployed. - */ - private void waitCargoRPCIsDeployed() throws InterruptedException { - final long maxWaitTime = System.currentTimeMillis() + MAX_WAITING_CARGO_RPC; - File cargoRPCFile = new File(JONAS_BASE + File.separator + "work" + File.separator + "webapps" + File.separator + "jonas" + File.separator + "single" + File.separator + "cargocpc.war"); - while (!cargoRPCFile.exists() && System.currentTimeMillis() < maxWaitTime) { - Thread.sleep(ONE_SECOND); - } - if (!cargoRPCFile.exists()) { - throw new IllegalStateException("CargoRPC war has not been deployed. It means that JOnAS hasn't be able to be started"); - } - } - - /** - * Check port availability - * @throws Exception - */ - private void checkPortAvailability(int port) throws Exception { - ServerSocket socket = null; - try { - socket = new ServerSocket(port); - } catch (IOException e) { - throw new Exception("Port " + port + " is not available. The JOnAS instance with a failed " + - "deployment is still running", e); - } - Assert.assertTrue(socket != null); - } -} diff --git a/jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml b/jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml deleted file mode 100644 index 8d9aab6439..0000000000 --- a/jonas/itests/cargo/safe-startup/src/test/resources/wrongDeployable.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-security - JOnAS :: iTests :: Cargo :: JMX security - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/security - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - jonas - jonas - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/jrmpconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java b/jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java deleted file mode 100644 index 8cfd02fdb3..0000000000 --- a/jonas/itests/cargo/security/src/test/java/org/ow2/jonas/itests/cargo/jmx_security/JmxSecurityTest.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.itests.cargo.jmx_security; - -import java.lang.reflect.UndeclaredThrowableException; - -import javax.management.Attribute; -import javax.management.AttributeNotFoundException; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * Tests JMX security. - * - * @author S. Ali Tokmen - */ -public class JmxSecurityTest extends TestCommons { - - @Test - public void connectWithoutCredentials() throws Exception { - try { - this.getMBeanServerConnection(null, null); - Assert.fail("No SecurityException raised"); - } catch (SecurityException expected) { - // Expected - } - } - - @Test - public void connectWithWrongCredentials() throws Exception { - try { - this.getMBeanServerConnection("invalid", "invalid"); - Assert.fail("No SecurityException raised"); - } catch (SecurityException expected) { - // Expected - } - } - - @Test - public void connectWithReadonlyCredentials() throws Exception { - MBeanServerConnection mBeanServerConnection = this.getMBeanServerConnection("monitor", "jonas"); - - ObjectName cargocpc = new ObjectName( - "jonas:j2eeType=WebModule,name=//localhost/cargocpc,J2EEApplication=null,J2EEServer=jonas"); - - mBeanServerConnection.getAttribute(cargocpc, "cookies"); - try { - mBeanServerConnection.setAttribute(cargocpc, new Attribute("cookies", Boolean.FALSE)); - Assert.fail("No UndeclaredThrowableException raised"); - } catch (UndeclaredThrowableException e) { - Assert.assertNotNull(e.getCause()); - Assert.assertEquals(e.getCause().getClass(), IllegalAccessException.class); - } - try { - mBeanServerConnection.invoke(cargocpc, "reload", null, null); - Assert.fail("No UndeclaredThrowableException raised"); - } catch (UndeclaredThrowableException e) { - Assert.assertNotNull(e.getCause()); - Assert.assertEquals(e.getCause().getClass(), IllegalAccessException.class); - } - } - - @Test - public void connectWithReadWriteCredentials() throws Exception { - MBeanServerConnection mBeanServerConnection = this.getMBeanServerConnection("jonas", "jonas"); - - ObjectName cargocpc = new ObjectName( - "jonas:j2eeType=WebModule,name=//localhost/cargocpc,J2EEApplication=null,J2EEServer=jonas"); - - mBeanServerConnection.getAttribute(cargocpc, "cookies"); - mBeanServerConnection.setAttribute(cargocpc, new Attribute("cookies", Boolean.FALSE)); - mBeanServerConnection.invoke(cargocpc, "reload", null, null); - } - - @Test(dependsOnMethods = "connectWithReadonlyCredentials") - public void testJonas385() throws Exception { - MBeanServerConnection mBeanServerConnection = this.getMBeanServerConnection("monitor", "jonas"); - - ObjectName cargocpc = new ObjectName( - "jonas:j2eeType=WebModule,name=//localhost/cargocpc,J2EEApplication=null,J2EEServer=jonas"); - - try { - mBeanServerConnection.getAttribute(cargocpc, "attributeThatDoesntExist"); - Assert.fail("No AttributeNotFoundException raised"); - } catch (AttributeNotFoundException expected) { - // That one was expected - } - } - -} diff --git a/jonas/itests/cargo/tomcat6/pom.xml b/jonas/itests/cargo/tomcat6/pom.xml deleted file mode 100644 index febbf9e56c..0000000000 --- a/jonas/itests/cargo/tomcat6/pom.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-cargo - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-cargo-tomcat6 - JOnAS :: iTests :: Cargo :: Tomcat 6.x - Tests the JOnAS distribution via CARGO - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-tests.version} - test - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - smartclient.port - - - - - add-source - process-test-resources - - add-test-source - - - - ${project.build.directory}/generated-sources/tomcat6 - - - - - process-test-resources - - add-test-resource - - - - - ${project.build.directory}/generated-sources/tomcat6 - - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - ${project.build.directory} - - - true - true - - - - copy-bundles - process-test-resources - - copy - - - - - org.ow2.jonas - jonas-itests-applications-classloader - ${project.version} - jar - ${jonas.base}/deploy - - - true - true - - - - - - - - maven-antrun-plugin - - - copy-tests - generate-test-sources - - - - - - - - - - - - - - - - - - - run - - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo.version} - - - start-jonas - pre-integration-test - - start - - - - stop-jonas - post-integration-test - - stop - - - - - - jonas5x - installed - ${jonas.root} - - - existing - ${jonas.base} - - localhost - ${webcontainer.port} - http - - - - org.ow2.jonas - jonas-itests-applications-connection-leaks - war - - - org.ow2.jonas - jonas-itests-applications-jaxws-sample - ear - - - org.ow2.jonas.jonas-itests-applications-jaxws-add.assemblies - wsadd - ear - - - org.ow2.jonas - jonas-itests-applications-jndi - ejb - - - - - - - - - maven-surefire-plugin - - true - - - - surefire-it - integration-test - - test - - - - - webcontainer.port - ${webcontainer.port} - - - carol.url - service:jmx:rmi://localhost/jndi/rmi://localhost:${carol.port}/jrmpconnector_jonas - - - project.version - ${project.version} - - - jonas.base - ${jonas.base} - - - rmi.port - ${carol.port} - - - smartclient.port - ${smartclient.port} - - - false - - ${jonas.root}/lib/smartclient.jar - - - - - - - - - diff --git a/jonas/itests/intravm/pom.xml b/jonas/itests/intravm/pom.xml deleted file mode 100644 index 5da6e7afa5..0000000000 --- a/jonas/itests/intravm/pom.xml +++ /dev/null @@ -1,268 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-intravm - jar - JOnAS :: iTests :: Intra VM - Allows to run OSGi tests on the server side - - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - test - - - org.ow2.jonas - jonas-commons - - - - - - - org.ow2.jonas - jonas-services-api - ${project.version} - test - - - - - org.ow2.bundles - ow2-util-log - test - - - - - - org.ow2.bundles - ow2-util-file - test - - - - - org.ow2.bundles - ow2-util-url - test - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - ${ow2.spec.version} - test - - - - - org.testng - testng - test - - - - - - org.ops4j.pax.swissbox - pax-swissbox-tinybundles - 1.3.1 - test - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - - - - ${project.build.directory} - - true - true - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - methods - 10 - once - - ${jonas.base}/conf - - - - javax.management.builder.initial - org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder - - - jonas.root - ${jonas.root} - - - jonas.base - ${jonas.base} - - - ipojo.log.level - ERROR - - - java.security.policy - ${jonas.base}/conf/java.policy - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - java.endorsed.dirs - ${jonas.root}/lib/endorsed - - - jonas.felix.configuration.file - ${jonas.base}/conf/felix-config.properties - - - - - - - diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java deleted file mode 100644 index 38950e15eb..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/JOnASLauncher.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm; - -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.ow2.jonas.depmonitor.MonitoringService; -import org.ow2.jonas.launcher.jonas.JOnAS; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.testng.annotations.AfterSuite; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeSuite; -import org.testng.annotations.BeforeClass; - -/** - * Abstract class for starting/stopping JOnAS and providing an access to OSGi - * through BundleContext. - * @author Florent Benoit - */ -public class JOnASLauncher { - - /** - * One second delay. - */ - private static final long ONE_SECOND = 1000L; - - /** - * Waiting time = 30 seconds. - */ - private static final long WAITING_SERVCICES_TIME = 30 * ONE_SECOND; - - /** - * Lock. - */ - private volatile static Lock lock = new ReentrantReadWriteLock().writeLock(); - - /** - * Counter of start of JOnAS. - */ - private static int count = 0; - - /** - * JOnAS instance. - */ - private static JOnAS jonas = null; - - /** - * OSGi bundle context. - */ - private static BundleContext bundleContext = null; - - /** - * Server ready. - */ - private static boolean ready = false; - - /** - * Server is stopping. - */ - private static boolean stopping = false; - - /** - * Server is stopping soon. - */ - private static boolean lastCallStopping = false; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JOnASLauncher.class); - - /** - * Start the JOnAS server. - * @throws Exception if server cannot be started. - */ - @BeforeClass - public void startServer() throws Exception { - try { - lock.lock(); - if (jonas == null) { - jonas = new JOnAS(true); - // Get Bundle Context - bundleContext = jonas.getFramework().getBundleContext(); - - // Start JOnAS - new Thread() { - @Override - public void run() { - try { - jonas.start(); - } catch (Exception e) { - logger.error("Cannot start the server", e); - throw new IllegalStateException("Cannot start the server", e); - } - } - }.start(); - - // wait for depMonitor service - final long maxWaitTime = System.currentTimeMillis() + WAITING_SERVCICES_TIME; - ServiceReference serverReadyReference = null; - while (serverReadyReference == null && System.currentTimeMillis() < maxWaitTime) { - serverReadyReference = getBundleContext().getServiceReference("org.ow2.easybeans.server.Embedded"); - if (serverReadyReference == null) { - Thread.sleep(ONE_SECOND); - } else { - ready = true; - } - } - logger.info("The JOnAS server is ready, tests can be launched."); - } else { - logger.info("The JOnAS server is already launched"); - } - count++; - } finally { - lock.unlock(); - } - } - - /** - * Stop the JOnAS server. - * @throws Exception if server cannot be stopped - */ - @AfterClass - public void stopServer() throws Exception { - count--; - if (count == 1) { - lastCallStopping = true; - } - // last call to the stop is performing the stop; - if (count == 0) { - if (jonas != null) { - stopping = true; - logger.info("The JOnAS server is being stopped."); - jonas.stop(); - } - } - } - - /** - * @return true if server is ready - */ - public boolean isReady() { - return ready; - } - - /** - * Waits that the server is ready. - * @throws InterruptedException if exception - */ - public void waitReady() throws InterruptedException { - while (!ready) { - Thread.sleep(ONE_SECOND); - } - } - - /** - * Waits that the server is ready. - * @throws InterruptedException if exception - */ - public void waitStopping() throws InterruptedException { - while (!stopping) { - Thread.sleep(ONE_SECOND); - } - } - - /** - * Waits that the server is ready. - * @throws InterruptedException if exception - */ - public void waitStoppingSoon() throws InterruptedException { - while (!lastCallStopping) { - Thread.sleep(ONE_SECOND); - } - } - /** - * @return the bundle context. - */ - protected BundleContext getBundleContext() { - return bundleContext; - } -} diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java deleted file mode 100644 index bc28f8a8db..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/OSGiHttpServiceTest.java +++ /dev/null @@ -1,468 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.osgi.httpservice; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.net.URL; - -import org.ops4j.pax.swissbox.tinybundles.core.TinyBundle; -import org.ops4j.pax.swissbox.tinybundles.core.TinyBundles; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpService; -import org.ow2.jonas.itests.intravm.JOnASLauncher; -import org.ow2.jonas.itests.intravm.osgi.httpservice.resource.RegisterResourceTestActivator; -import org.ow2.jonas.itests.intravm.osgi.httpservice.servlet.RegisterServletTestActivator; -import org.ow2.jonas.itests.intravm.osgi.httpservice.servlet.MyServlet; -import org.ow2.jonas.itests.intravm.osgi.httpservice.servlet.SimpleTestServlet; -import org.ow2.jonas.management.ServiceManager; -import org.ow2.util.file.FileUtils; -import org.ow2.util.url.URLUtils; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Tests of the OSGi http service. - * @author Guillaume Porcher - * @author Florent Benoit - */ -public class OSGiHttpServiceTest extends JOnASLauncher { - - /** - * URL for the resource bundle. - */ - private URL resourceBundleURL = null; - - /** - * URL for the first servlet bundle. - */ - private URL servletBundle1URL = null; - - /** - * URL for the second servlet bundle. - */ - private URL servletBundle2URL = null; - - /** - * One second delay. - */ - private static final long ONE_SECOND = 1000L; - - /** - * Waiting time = 5 seconds. - */ - private static final long SLEEP = 5 * ONE_SECOND; - - /** - * HTTP service. - */ - private HttpService httpService = null; - - /** - * Port number. - */ - private String httpServicePort = null; - - /** - * JOnAS service manager service. - */ - private Object serviceManager = null; - - /** - * Create bundles in order to be ready for the tests. - * @throws Exception - */ - @BeforeClass - public void createBundles() throws Exception { - // create bundle for resources - TinyBundle resourceBundle = TinyBundles.newBundle(); - resourceBundle.add("files/index.html", OSGiHttpServiceTest.class.getClassLoader().getResource("index.html")); - resourceBundle.add("files/folder/test.html", OSGiHttpServiceTest.class.getClassLoader().getResource("test.html")); - resourceBundle.add(RegisterResourceTestActivator.class); - resourceBundle.set(Constants.BUNDLE_SYMBOLICNAME, "RegisterResourceBundle"); - resourceBundle.set(Constants.BUNDLE_ACTIVATOR, RegisterResourceTestActivator.class.getName()); - InputStream resourceBundleInputStream = resourceBundle.build(TinyBundles.withBnd()); - File bundleFile = File.createTempFile("rsrbundle", ".jar"); - FileUtils.dump(resourceBundleInputStream, bundleFile); - resourceBundleURL = URLUtils.fileToURL(bundleFile); - - // Create bundle for servlet - TinyBundle servletBundle1 = TinyBundles.newBundle(); - servletBundle1.add(RegisterServletTestActivator.class); - servletBundle1.add(SimpleTestServlet.class); - servletBundle1.set(Constants.BUNDLE_SYMBOLICNAME, "RegisterServletBundle"); - servletBundle1.set(Constants.BUNDLE_ACTIVATOR, RegisterServletTestActivator.class.getName()); - servletBundle1.set(Constants.EXPORT_PACKAGE, ""); - servletBundle1.set(Constants.BUNDLE_VERSION, "1.0.0"); - InputStream servletBundle1InputStream = servletBundle1.build(TinyBundles.withBnd()); - File servlet1File = File.createTempFile("servletbundle1", ".jar"); - FileUtils.dump(servletBundle1InputStream, servlet1File); - servletBundle1URL = URLUtils.fileToURL(servlet1File); - - // Create bundle for servlet with version 2 - TinyBundle servletBundle2 = TinyBundles.newBundle(); - servletBundle2.add(RegisterServletTestActivator.class); - servletBundle2.add(SimpleTestServlet.class); - servletBundle2.set(Constants.BUNDLE_SYMBOLICNAME, "RegisterServletBundle2"); - servletBundle2.set(Constants.BUNDLE_ACTIVATOR, RegisterServletTestActivator.class.getName()); - servletBundle2.set(Constants.EXPORT_PACKAGE, ""); - servletBundle2.set(Constants.BUNDLE_VERSION, "2.0.0"); - InputStream servletBundle2InputStream = servletBundle2.build(TinyBundles.withBnd()); - File servlet2File = File.createTempFile("servletbundle2", ".jar"); - FileUtils.dump(servletBundle2InputStream, servlet2File); - servletBundle2URL = URLUtils.fileToURL(servlet2File); - - } - - /** - * Test the access to the HTTP service. - * @throws InterruptedException if waiting fails - */ - @BeforeClass - public void waitForServices() throws Exception, InterruptedException { - // wait for initialization - final long maxWaitTime = System.currentTimeMillis() + 50 * SLEEP; - - ServiceReference httpServiceReference = null; - while (httpServiceReference == null && System.currentTimeMillis() < maxWaitTime) { - Thread.sleep(ONE_SECOND); - httpServiceReference = getBundleContext().getServiceReference(HttpService.class.getName()); - } - Assert.assertNotNull(httpServiceReference, "HttpService is not registered"); - httpService = (HttpService) getBundleContext().getService(httpServiceReference); - Assert.assertNotNull(httpService, "HttpService is not registered"); - httpServicePort = null; - while (httpServicePort == null && System.currentTimeMillis() < maxWaitTime) { - httpServicePort = (String) httpServiceReference.getProperty("org.osgi.service.http.port"); - if (httpServicePort == null) { - Thread.sleep(ONE_SECOND); - } - } - - ServiceReference serviceManagerServiceReference = null; - while (serviceManagerServiceReference == null && System.currentTimeMillis() < maxWaitTime) { - serviceManagerServiceReference = getBundleContext().getServiceReference(ServiceManager.class.getName()); - if (serviceManagerServiceReference == null) { - Thread.sleep(ONE_SECOND); - } - } - Assert.assertNotNull(serviceManagerServiceReference, "ServiceManager is not registered"); - serviceManager = getBundleContext().getService(serviceManagerServiceReference); - - } - - /** - * Test backwards compatibility. - * @throws Exception on failure - */ - @Test - public void testContextRoot() throws Exception { - // wait for context root - final String expected = "JOnAS Root Context"; - final URL url = new URL("http://localhost:" + httpServicePort + "/"); - isExpectedContent(expected, url); - } - - /** - * Test for registering a servlet on the http service. - * @throws Exception if registering fails - */ - @Test - public void testRegisterServlet() throws Exception { - - String context = "/simpleServletTest"; - httpService.registerServlet(context, new SimpleTestServlet("2503"), null, null); - - - // check index.html - final URL url = new URL("http://localhost:" + httpServicePort + context); - isExpectedContent("This is a test content version 2503 for request", url); - - httpService.unregister(context); - - try { - url.openStream(); - Assert.fail("url still available"); - } catch (final FileNotFoundException e) { - // expected - } - } - - /** - * Test for registering a servlet on the http service. - * @throws Exception if registering fails - */ - @Test - public void testCheckServletContext() throws Exception { - - MyServlet myServlet = new MyServlet(); - String context = "/myservlet"; - httpService.registerServlet(context, myServlet, null, null); - - Assert.assertNotNull(myServlet.getInitServletContext()); - - httpService.unregister(context); - - } - - /** - * Test for {@link HttpService#registerResources(String, String, org.osgi.service.http.HttpContext)}. - * @throws InvalidSyntaxException - * @throws IOException - * @throws InterruptedException - * @throws BundleException - */ - @Test - public void testRegisterResources() throws Exception { - - // start resource bundle - final Bundle resourceBundle = getBundleContext().installBundle(resourceBundleURL.toString()); - resourceBundle.start(); - - // check index.html - final URL url = new URL("http://localhost:" + httpServicePort + "/test/index.html"); - final URL refUrl = OSGiHttpServiceTest.class.getClassLoader().getResource("index.html"); - this.checkContent(url, refUrl); - - // check folder/test.html - final URL url2 = new URL("http://localhost:" + httpServicePort + "/test/folder/test.html"); - final URL refUrl2 = OSGiHttpServiceTest.class.getClassLoader().getResource("test.html"); - this.checkContent(url2, refUrl2); - - resourceBundle.stop(); - resourceBundle.uninstall(); - - // check url not available - final URL url3 = new URL("http://localhost:" + httpServicePort + "/test/index.html"); - try { - url3.openStream(); - Assert.fail("url still available"); - } catch (final FileNotFoundException e) { - // expected - } - } - - /** - * Test for - * {@link HttpService#registerServlet(String, javax.servlet.Servlet, java.util.Dictionary, org.osgi.service.http.HttpContext)} - * . - * @throws InvalidSyntaxException - * @throws IOException - * @throws InterruptedException - * @throws BundleException - */ - @Test - public void testRegisterBundleServlet() throws InvalidSyntaxException, IOException, InterruptedException, BundleException { - - // start servlet bundle - final Bundle bundle = getBundleContext().installBundle(servletBundle1URL.toString()); - bundle.start(); - - // check index.html - final URL url = new URL("http://localhost:" + httpServicePort + "/servletTest/index.html"); - - final String expected = "This is a test content version 1.0.0 for request: /index.html"; - Assert.assertEquals(expected, this.getContentAsString(url)); - - bundle.stop(); - bundle.uninstall(); - - // check url not available - final URL url2 = new URL("http://localhost:" + httpServicePort + "/servletTest/index.html"); - try { - url2.openStream(); - Assert.fail("url available"); - } catch (final FileNotFoundException e) { - // expected - } - } - - /** - * Enable versioning. - * @throws Exception on failure - */ - // @Test - public void enableVersioning() throws Exception { - Method getServiceStateMethod = serviceManager.getClass().getDeclaredMethod("getServiceState", String.class); - Method startServiceMethod = serviceManager.getClass().getDeclaredMethod("startService", - new Class[] {String.class, boolean.class}); - - String state = (String) getServiceStateMethod.invoke(serviceManager, "versioning"); - Assert.assertNull(state, "the versioning service is not active by default"); - - startServiceMethod.invoke(serviceManager, "versioning", true); - - final long maxWaitTime = System.currentTimeMillis() + SLEEP; - while (!"RUNNING".equals(state) && System.currentTimeMillis() < maxWaitTime) { - Thread.sleep(ONE_SECOND); - state = (String) getServiceStateMethod.invoke(serviceManager, "versioning"); - } - Assert.assertEquals("RUNNING", state, "the versioning service is not running"); - } - - /** - * Test for servlet versioning. - * @throws InvalidSyntaxException - * @throws IOException - * @throws InterruptedException - * @throws BundleException - */ - // @Test(dependsOnMethods = {"testRegisterServlet", "enableVersioning"}) - public void testVersioning() throws InvalidSyntaxException, IOException, InterruptedException, BundleException { - - final URL url = new URL("http://localhost:" + httpServicePort + "/servletTest/index.html"); - - // start bundle v1 - final Bundle bundle1 = getBundleContext().installBundle(servletBundle1URL.toString()); - bundle1.start(); - - // check versioned url is available - final URL url1 = new URL("http://localhost:" + httpServicePort + "/servletTest-1.0.0/index.html"); - final String expected1 = "This is a test content version 1.0.0 for request: /index.html"; - Assert.assertEquals(expected1, this.getContentAsString(url1)); - - // check non-versioned url is available and pointing to v1 - Assert.assertEquals(expected1, this.getContentAsString(url)); - - // start bundle 2 - final Bundle bundle2 = getBundleContext().installBundle(servletBundle2URL.toString()); - bundle2.start(); - - // check versioned url is available - final URL url2 = new URL("http://localhost:" + httpServicePort + "/servletTest-2.0.0/index.html"); - final String expected2 = "This is a test content version 2.0.0 for request: /index.html"; - Assert.assertEquals(expected2, this.getContentAsString(url2)); - - // check non-versioned url is available and still pointing to v1 - Assert.assertEquals(expected1, this.getContentAsString(url)); - - // stop bundle 1 - bundle1.stop(); - - // check non-versioned url is unavailable - try { - url.openStream(); - Assert.fail("url still available"); - } catch (final FileNotFoundException e) { - // expected - } - - // check versioned url is available - Assert.assertEquals(expected2, this.getContentAsString(url2)); - - // cleanup - bundle1.uninstall(); - bundle2.stop(); - bundle2.uninstall(); - } - - /** - * Checks the string content in local and remote urls are the same. Throw - * {@link AssertionError} if they are not the same. - * @param remoteURL the remote url - * @param localURL the reference url - * @throws IOException if an I/O exception occurs. - * @throws InterruptedException if sleeping is not done - */ - private void checkContent(final URL remoteURL, final URL localURL) throws IOException, InterruptedException { - // wait for initialization - final long stopTime = System.currentTimeMillis() + SLEEP; - - final String localContent = this.getContentAsString(localURL); - - String remoteContent = null; - while (System.currentTimeMillis() < stopTime) { - Thread.sleep(ONE_SECOND); - remoteContent = this.getContentAsString(remoteURL); - if (remoteContent.equals(localContent)) { - break; - } - } - - Assert.assertEquals(remoteContent, localContent); - } - - /** - * Check that the content on the given URL is the expected content. - * @param expectedContent the expected content - * @param url the url on which to get content - * @throws InterruptedException if cannot wait - * @throws IOException if stream is not opened - */ - protected void isExpectedContent(final String expectedContent, final URL url) throws InterruptedException, IOException { - // wait for initialization - final long maxWaitTime = System.currentTimeMillis() + SLEEP; - - String content = null; - while (System.currentTimeMillis() < maxWaitTime) { - Thread.sleep(ONE_SECOND); - try { - content = this.getContentAsString(url); - } catch (final FileNotFoundException e) { - content = "HTTP Error 404"; - } - if (content != null && content.contains(expectedContent)) { - return; - } - } - Assert.fail("The content '" + content + "' does not contain '" + expectedContent + "'."); - } - - /** - * Get the URL content as a String. - * @param url the url - * @return the URL content as a String or the exception message - * @throws IOException if there is a problem with streams - */ - private String getContentAsString(final URL url) throws IOException { - final InputStream inStream = url.openStream(); - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - int c; - while ((c = inStream.read()) != -1) { - bos.write(c); - } - } finally { - if (inStream != null) { - inStream.close(); - } - if (bos != null) { - bos.flush(); - } - } - final String urlString = bos.toString(); - return urlString; - } -} diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java deleted file mode 100644 index 4472f62668..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/resource/RegisterResourceTestActivator.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.osgi.httpservice.resource; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpService; - -/** - * @author Guillaume Porcher - */ -public class RegisterResourceTestActivator implements BundleActivator, ServiceListener { - - BundleContext context; - - public void start(final BundleContext context) throws Exception { - this.context = context; - - final ServiceReference ref = this.context.getServiceReference(HttpService.class.getName()); - if (ref != null) { - this.register(ref); - } - this.context.addServiceListener(this, "(objectclass=" + HttpService.class.getName() + ")"); - } - - /* - * (non-Javadoc) - * @see - * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) - */ - public void stop(final BundleContext context) throws Exception { - final ServiceReference ref = this.context.getServiceReference(HttpService.class.getName()); - if (ref != null) { - this.unregister(ref); - } - } - - public void serviceChanged(final ServiceEvent event) { - if (event.getType() == ServiceEvent.REGISTERED) { - this.register(event.getServiceReference()); - } else if (event.getType() == ServiceEvent.UNREGISTERING) { - this.unregister(event.getServiceReference()); - } - } - - private void register(final ServiceReference serviceReference) { - try { - final HttpService httpService = (HttpService) this.context.getService(serviceReference); - httpService.registerResources("/test", "/files", null); - } catch (final Exception e) { - throw new RuntimeException(e); - } - } - - /** - * @param serviceReference - */ - private void unregister(final ServiceReference serviceReference) { - try { - final HttpService httpService = (HttpService) this.context.getService(serviceReference); - httpService.unregister("/test"); - } catch (final Exception e) { - throw new RuntimeException(e); - } - - } - -} diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java deleted file mode 100644 index 0e04c92e2b..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/MyServlet.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.osgi.httpservice.servlet; - -import java.io.IOException; -import java.io.PrintStream; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Dummy servlet that loads the servlet context - * @author Florent Benoit - */ -public class MyServlet extends HttpServlet { - - - /** - * Serial version UID. - */ - private static final long serialVersionUID = 8483263607697552196L; - - /** - * Servlet Context found in init(). - */ - private ServletContext initServletContext = null; - - @Override - public void init(ServletConfig servletConfig) { - this.initServletContext = servletConfig.getServletContext(); - System.out.println("init() servletContext = " + initServletContext); - } - - public ServletContext getInitServletContext() { - return initServletContext; - } - -} - diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java deleted file mode 100644 index 9bdea9381d..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/RegisterServletTestActivator.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.osgi.httpservice.servlet; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpService; - -/** - * @author Guillaume Porcher - */ -public class RegisterServletTestActivator implements BundleActivator, ServiceListener { - - BundleContext context; - - String version; - - public void start(final BundleContext context) throws Exception { - this.version = (String) context.getBundle().getHeaders().get(Constants.BUNDLE_VERSION); - try { - this.context = context; - - final ServiceReference ref = this.context.getServiceReference(HttpService.class.getName()); - if (ref != null) { - this.register(ref); - } - this.context.addServiceListener(this, "(objectclass=" + HttpService.class.getName() + ")"); - } catch (final Exception e) { - e.printStackTrace(); - throw e; - } - } - - /* - * (non-Javadoc) - * @see - * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) - */ - public void stop(final BundleContext context) throws Exception { - final ServiceReference ref = this.context.getServiceReference(HttpService.class.getName()); - if (ref != null) { - this.unregister(ref); - } - } - - public void serviceChanged(final ServiceEvent event) { - if (event.getType() == ServiceEvent.REGISTERED) { - this.register(event.getServiceReference()); - } else if (event.getType() == ServiceEvent.UNREGISTERING) { - this.unregister(event.getServiceReference()); - } - } - - private void register(final ServiceReference serviceReference) { - try { - final HttpService httpService = (HttpService) this.context.getService(serviceReference); - - httpService.registerServlet("/servletTest", new SimpleTestServlet(this.version), null, null); - } catch (final Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - - /** - * @param serviceReference - */ - private void unregister(final ServiceReference serviceReference) { - try { - final HttpService httpService = (HttpService) this.context.getService(serviceReference); - httpService.unregister("/servletTest"); - } catch (final Exception e) { - throw new RuntimeException(e); - } - - } - -} diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java deleted file mode 100644 index 33b875f706..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/osgi/httpservice/servlet/SimpleTestServlet.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.osgi.httpservice.servlet; - -import java.io.IOException; -import java.io.PrintStream; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * @author Guillaume Porcher - * - */ -public class SimpleTestServlet extends HttpServlet { - - public static String CONTENT = "This is a test content version %s for request: %s"; - - private final String version; - - /** - * - */ - public SimpleTestServlet(final String version) { - this.version = version; - } - - @Override - protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException { - - final PrintStream ps = new PrintStream(resp.getOutputStream()); - ps.printf(SimpleTestServlet.CONTENT, this.version, req.getPathInfo()); - ps.close(); - } - -} diff --git a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java b/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java deleted file mode 100644 index fe0ea1c801..0000000000 --- a/jonas/itests/intravm/src/test/java/org/ow2/jonas/itests/intravm/workdir/TestWorkDir.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.intravm.workdir; - -import java.io.File; -import java.util.Arrays; - -import org.ow2.jonas.itests.intravm.JOnASLauncher; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - - -/** - * Ensures that the default work dir. - * @author Florent Benoit - */ -public class TestWorkDir extends JOnASLauncher { - - /** - * JONAS_BASE. - */ - private String jonasBase = null; - - /** - * Init properties. - */ - @BeforeClass - public void init() throws Exception { - this.jonasBase = System.getProperty("jonas.base"); - } - - /** - * Test that the default JONAS_BASE/work directory is not present on the - * filesystem. - * @throws Exception on failure - */ - @Test - public void testNotAvailableDefaultWorkDir() throws Exception { - waitStoppingSoon(); - File defaultWorkDir = new File(jonasBase, "work"); - if (defaultWorkDir.exists()) { - throw new Exception("The directory '" + defaultWorkDir - + "' exists while it shouldn't as a new work directory has been set"); - } - - } - - /** - * Test that the defined JOnAS work directory is present on the filesystem - * and contains some files. - * @throws Exception on failure - */ - @Test - public void testExistsNewWorkDir() throws Exception { - waitStoppingSoon(); - File workDir = new File(jonasBase, "work-tests"); - if (!workDir.exists()) { - throw new Exception("The directory '" + workDir - + "' doesn't exists while it should as a new work directory has been set"); - } - File[] files = workDir.listFiles(); - if (files.length < 3) { - throw new Exception("The directory '" + workDir + "' should contains some sub directories. Found '" - + Arrays.asList(files) + "'."); - } - - } - -} diff --git a/jonas/itests/intravm/src/test/resources/index.html b/jonas/itests/intravm/src/test/resources/index.html deleted file mode 100644 index 8678a52e5b..0000000000 --- a/jonas/itests/intravm/src/test/resources/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - -Test page - - - It works ! - - \ No newline at end of file diff --git a/jonas/itests/intravm/src/test/resources/test.html b/jonas/itests/intravm/src/test/resources/test.html deleted file mode 100644 index 0e0f481455..0000000000 --- a/jonas/itests/intravm/src/test/resources/test.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - -Nested Test page - - - It works ! - - \ No newline at end of file diff --git a/jonas/itests/osgi/base/pom.xml b/jonas/itests/osgi/base/pom.xml deleted file mode 100644 index fde78d5943..0000000000 --- a/jonas/itests/osgi/base/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-osgi - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-osgi-base - jar - JOnAS :: iTests :: OSGi :: Base - Tests of OSGi bundles - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java b/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java deleted file mode 100644 index 0b3dd1007a..0000000000 --- a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/OSGiTestCase.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.osgi; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.easybeans.osgi.tests.AbsTesting; - -/** - * @author Loic Albertin - */ -public abstract class OSGiTestCase extends AbsTesting { - - /** - * Default InitialContextFactory to use. - */ - private static final String DEFAULT_INITIAL_CONTEXT_FACTORY = "org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory"; - - - /** - * @return Returns the InitialContext. - * - * @throws javax.naming.NamingException If the Context cannot be created. - */ - protected static Context getInitialContext() throws NamingException { - - // if user don't use jclient/client container - // we can specify the InitialContextFactory to use - // But this is *not recommended*. - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, getInitialContextFactory()); - - // Usually a simple new InitialContext() without any parameters is sufficent. - // return new InitialContext(); - - return new InitialContext(env); - } - - /** - * Returns a configurable InitialContextFactory classname.
- * Can be configured with the easybeans.client.initial-context-factory System property. - * - * @return Returns a configurable InitialContextFactory classname. - */ - private static String getInitialContextFactory() { - String prop = System.getProperty("easybeans.client.initial-context-factory"); - // If not found, use the default - if (prop == null) { - prop = DEFAULT_INITIAL_CONTEXT_FACTORY; - } - return prop; - } -} diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java b/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java deleted file mode 100644 index 80ac1fdcb7..0000000000 --- a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceFactory.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.osgi; - -import java.sql.SQLException; - -import org.ow2.jonas.tests.applications.osgi.datasources.IDataSource; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Test the OSGi Datasource factories. - * - * @author Florent Benoit - */ -public class TestOSGiDataSourceFactory extends OSGiTestCase { - - /** - * Reference to the bean. - */ - private IDataSource dataSourceBean = null; - - /** - * Gets the bean instance. - * - * @throws Exception if bean is not obtained - */ - @BeforeClass - protected void initBean() throws Exception { - super.init(); - this.dataSourceBean = (IDataSource) getInitialContext().lookup("DatasourceBean"); - System.out.println("dataSourceBean = " + dataSourceBean); - } - - - /** - * Test Driver. - * - * @throws SQLException if test fails - */ - @Test - public void testDriver() throws SQLException { - Assert.assertTrue(dataSourceBean.testDriver(), "failure"); - } - - - /** - * Test execution of a datasource. - * - * @throws SQLException if test fails - */ - @Test - public void testDatasource() throws SQLException { - Assert.assertTrue(dataSourceBean.testDatasource(), "failure"); - } - - - /** - * Test execution of a XA datasource. - * - * @throws SQLException if test fails - */ - @Test - public void testXADatasource() throws SQLException { - Assert.assertTrue(dataSourceBean.testXADatasource(), "failure"); - } - - - /** - * Test execution of a Pooled datasource. - * - * @throws SQLException if test fails - */ - @Test - public void testConnectionPoolDataSourceDatasource() throws SQLException { - Assert.assertTrue(dataSourceBean.testConnectionPoolDataSourceDatasource(), "failure"); - } - -} diff --git a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java b/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java deleted file mode 100644 index 3abcc2886d..0000000000 --- a/jonas/itests/osgi/base/src/test/java/org/ow2/jonas/itests/osgi/TestOSGiDataSourceService.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.itests.osgi; - -import org.ow2.jonas.tests.applications.osgi.datasources.IDataSourceService; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Test the OSGi DataSourceService. - * - * @author Loic Albertin - */ -public class TestOSGiDataSourceService extends OSGiTestCase { - - /** - * Reference to the bean. - */ - private IDataSourceService dataSourceServiceBean = null; - - /** - * Gets the bean instance. - * - * @throws Exception if bean is not obtained - */ - @BeforeClass - protected void initBean() throws Exception { - super.init(); - this.dataSourceServiceBean = (IDataSourceService) getInitialContext().lookup("DataSourceServiceBean"); - System.out.println("dataSourceBean = " + dataSourceServiceBean); - } - - - /** - * Test default data source creation. - * - * @throws Exception if test fails - */ - @Test - public void testDefault() throws Exception { - Assert.assertTrue(dataSourceServiceBean.testDefault(), "failure"); - } - - /** - * Test data-source caching. - * - * @throws Exception if test fails - */ - @Test - public void testDSCache() throws Exception { - Assert.assertTrue(dataSourceServiceBean.testDSCache(), "failure"); - } - - /** - * Test data-source usage. - * - * @throws Exception if test fails - */ - @Test - public void testDSUsage() throws Exception { - Assert.assertTrue(dataSourceServiceBean.testDSUsage(), "failure"); - } -} diff --git a/jonas/itests/osgi/equinox/pom.xml b/jonas/itests/osgi/equinox/pom.xml deleted file mode 100644 index 8ffb98b6d9..0000000000 --- a/jonas/itests/osgi/equinox/pom.xml +++ /dev/null @@ -1,382 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-osgi - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-equinox - pom - JOnAS :: iTests :: OSGi :: Equinox - Tests the OSGi Bundles of JOnAS with Eclipse Equinox - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - - - - ${project.build.directory} - - true - true - - - - unpack-properties-file - generate-test-resources - - unpack - - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - - ${project.build.directory}/launcher - - true - true - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.ow2.util.maven - maven-osgi-plugin-launcher-core - - - - org.jibx.config.3rdparty.org.eclipse - org.eclipse.osgi - 3.7.0.v20110613 - - - - ${jonas.root}/lib/bootstrap/bundles-javaee-6.0 - ${jonas.root}/lib/bootstrap/bundles-jsf-2.0 - ${jonas.root}/lib/bootstrap/bundles-jpa2.0 - ${jonas.root}/lib/bootstrap/bundles-servlets-3.0 - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/javase-profiles.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/defaults.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/gateway.properties - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/auto-deploy.properties - - - - javax.management.builder.initial - org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder - - - jonas.base - ${jonas.base} - - - jonas.root - ${jonas.root} - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - m2.repository - ${settings.localRepository} - - - java.naming.factory.initial - - org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory - - - - java.security.policy - ${jonas.base}/conf/java.policy - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - - javax.security.jacc.PolicyConfigurationFactory.provider - - - org.ow2.jonas.lib.security.jacc.JPolicyConfigurationFactory - - - - monolog.wrappers - - mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger,org.ow2.util.log.JDKLogger, - org.apache.juli.logging.DirectJDKLog,org.ow2.carol.util.configuration.TraceCarol - - - - java.awt.headless - true - - - ipojo.log.level - ERROR - - - - - bootstrap.kill.timeout - 420 - - - - - true - - - - ${itestsdebug} - 8000 - - - - 45 - - - 10 - - - - - 15 - org.ow2.easybeans.examples.* - - - - - - ${jonas.base}/conf/ - - - - - org.ow2.easybeans.osgi - easybeans-examples-entitybean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-mdb - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-migrationejb21 - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-example-osgi - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-security - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statefulbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statelessbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-timerservice - ${easybeans-examples.version} - - - - - - - - - start-framework - pre-integration-test - - start - - - - - stop-framework - post-integration-test - - stop - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${basedir}/target - - ${basedir}/../src/test/configuration/testng.xml - - - - rmi.port - ${carol.port} - - - - ${jonas.root}/lib/client.jar - - - - - testing-jonas-full - integration-test - - test - - - - - - - diff --git a/jonas/itests/osgi/felix/pom.xml b/jonas/itests/osgi/felix/pom.xml deleted file mode 100644 index 3cac0a53ae..0000000000 --- a/jonas/itests/osgi/felix/pom.xml +++ /dev/null @@ -1,408 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-osgi - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-felix - pom - JOnAS :: iTests :: OSGi :: Felix - Tests the OSGi Bundles of JOnAS with Apache Felix - - - - - org.ow2.jonas - jonas-itests-osgi-base - ${project.version} - tests - test - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - - - - ${project.build.directory} - - true - true - - - - unpack-properties-file - generate-test-resources - - unpack - - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - - ${project.build.directory}/launcher - - true - true - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.ow2.util.maven - maven-osgi-plugin-launcher-core - - - - org.apache.felix - org.apache.felix.framework - ${felix.framework.version} - - - - ${jonas.root}/lib/bootstrap/bundles-javaee-6.0 - ${jonas.root}/lib/bootstrap/bundles-jsf-2.0 - ${jonas.root}/lib/bootstrap/bundles-jpa2.0 - ${jonas.root}/lib/bootstrap/bundles-servlets-3.0 - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/javase-profiles.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/defaults.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/gateway.properties - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/auto-deploy.properties - - - - javax.management.builder.initial - org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder - - - jonas.base - ${jonas.base} - - - jonas.root - ${jonas.root} - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - db.port - ${db.port} - - - m2.repository - ${settings.localRepository} - - - java.naming.factory.initial - - org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory - - - - java.security.policy - ${jonas.base}/conf/java.policy - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - - javax.security.jacc.PolicyConfigurationFactory.provider - - - org.ow2.jonas.lib.security.jacc.JPolicyConfigurationFactory - - - - monolog.wrappers - - mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger,org.ow2.util.log.JDKLogger, - org.apache.juli.logging.DirectJDKLog,org.ow2.carol.util.configuration.TraceCarol - - - - java.awt.headless - true - - - ipojo.log.level - ERROR - - - - - bootstrap.kill.timeout - 8000 - - - - - true - - - - ${itestsdebug} - 8000 - - - - 45 - - - 10 - - - - - 20 - org.ow2.easybeans.examples.* - - - 2 - org.ow2.jonas.tests.applications.osgi.datasources.* - - - - - - ${jonas.base}/conf/ - - - - - - org.ow2.easybeans.osgi - easybeans-examples-entitybean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-mdb - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-migrationejb21 - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-example-osgi - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-security - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statefulbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statelessbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-timerservice - ${easybeans-examples.version} - - - - org.ow2.jonas - jonas-itests-applications-osgi-datasource - ${project.version} - - - - - - - - start-framework - pre-integration-test - - start - - - - - stop-framework - post-integration-test - - stop - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${basedir}/../src/test/configuration/testng.xml - ${basedir}/../src/test/configuration/testng-osgi.xml - - - - rmi.port - ${carol.port} - - - - ${jonas.root}/lib/client.jar - - - - - testing-jonas-full - integration-test - - test - - - - - - - diff --git a/jonas/itests/osgi/knopflerfish/pom.xml b/jonas/itests/osgi/knopflerfish/pom.xml deleted file mode 100644 index d381900cf6..0000000000 --- a/jonas/itests/osgi/knopflerfish/pom.xml +++ /dev/null @@ -1,387 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests-osgi - 5.3.0-M6-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-knopflerfish - pom - JOnAS :: iTests :: OSGi :: Knopflerfish - Tests the OSGi Bundles of JOnAS with Knopflerfish - - - - knopflerfish - knopflerfish Repository for Maven2 - http://www.knopflerfish.org/maven2 - - true - - - false - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - generate-port-numbers - generate-test-sources - - reserve-network-port - - - - webcontainer.port - carol.port - jms.port - db.port - - - - - - - - - maven-dependency-plugin - - - unpack-assembly - generate-test-resources - - unpack - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${project.version} - bin - zip - - - - ${project.build.directory} - - true - true - - - - unpack-properties-fiile - generate-test-resources - - unpack - - - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - - ${project.build.directory}/launcher - - true - true - - - - - - - - maven-antrun-plugin - - - create-jonas-base-with-all-options - generate-test-resources - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.ow2.util.maven - maven-osgi-plugin-launcher-core - - - - org.knopflerfish - framework - 5.0.0 - - - - ${jonas.root}/lib/bootstrap/bundles-jsf-2.0 - ${jonas.root}/lib/bootstrap/bundles-jpa2.0 - ${jonas.root}/lib/bootstrap/bundles-servlets-3.0 - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/javase-profiles.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/defaults.properties - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/gateway.properties - - - ${project.build.directory}/launcher/org/ow2/jonas/launcher/jonas/auto-deploy.properties - - - - jonas.base - ${jonas.base} - - - jonas.root - ${jonas.root} - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - m2.repository - ${settings.localRepository} - - - java.naming.factory.initial - - org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory - - - - java.security.policy - ${jonas.base}/conf/java.policy - - - java.security.auth.login.config - ${jonas.base}/conf/jaas.config - - - - javax.security.jacc.PolicyConfigurationFactory.provider - - - org.ow2.jonas.lib.security.jacc.JPolicyConfigurationFactory - - - - monolog.wrappers - - mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger,org.ow2.util.log.JDKLogger, - org.apache.juli.logging.DirectJDKLog,org.ow2.carol.util.configuration.TraceCarol - - - - java.awt.headless - true - - - ipojo.log.level - ERROR - - - - - bootstrap.kill.timeout - 420 - - - - - true - - - - ${itestsdebug} - 8000 - - - - 45 - - - 10 - - - - - 20 - org.ow2.easybeans.examples.* - - - - - - ${jonas.base}/conf/ - - - - - org.ow2.easybeans.osgi - easybeans-examples-entitybean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-mdb - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-migrationejb21 - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-example-osgi - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-security - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statefulbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-statelessbean - ${easybeans-examples.version} - - - - org.ow2.easybeans.osgi - easybeans-examples-timerservice - ${easybeans-examples.version} - - - - - - - - start-framework - pre-integration-test - - start - - - - - stop-framework - post-integration-test - - stop - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${basedir}/target - - ${basedir}/../src/test/configuration/testng.xml - - - - rmi.port - ${carol.port} - - - - ${jonas.root}/lib/client.jar - - - - - testing-jonas-full - integration-test - - test - - - - - - - diff --git a/jonas/itests/osgi/pom.xml b/jonas/itests/osgi/pom.xml deleted file mode 100644 index c478b9ee5f..0000000000 --- a/jonas/itests/osgi/pom.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - org.ow2.jonas - jonas-itests - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests-osgi - pom - JOnAS :: iTests :: OSGi - Integration Tests on OSGi - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans-tests.version} - tests - test - - - - - org.testng - testng - 5.1 - jdk15 - test - - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans-examples.version} - test - - - - - org.ow2.easybeans - easybeans-example-entitybean - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-messagedrivenbean - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-migrationejb21 - ${easybeans-examples.version} - test - - - - org.ow2.easybeans.osgi - easybeans-example-osgi - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-security - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-statefulbean - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-statelessbean - ${easybeans-examples.version} - test - - - - org.ow2.easybeans - easybeans-example-timerservice - ${easybeans-examples.version} - test - - - - org.ow2.jonas - jonas-itests-applications-osgi-datasource - ${project.version} - test - - - - - base - felix - equinox - - - - diff --git a/jonas/itests/osgi/src/test/configuration/testng-osgi.xml b/jonas/itests/osgi/src/test/configuration/testng-osgi.xml deleted file mode 100644 index 8b10bc3931..0000000000 --- a/jonas/itests/osgi/src/test/configuration/testng-osgi.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - diff --git a/jonas/itests/osgi/src/test/configuration/testng.xml b/jonas/itests/osgi/src/test/configuration/testng.xml deleted file mode 100644 index 6fcc41fe2b..0000000000 --- a/jonas/itests/osgi/src/test/configuration/testng.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - diff --git a/jonas/itests/pom.xml b/jonas/itests/pom.xml deleted file mode 100644 index 72d41d3d35..0000000000 --- a/jonas/itests/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - org.ow2.jonas - jonas - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-itests - pom - JOnAS :: iTests - Integration Tests - - - db,resource,dbm,validation,ejb3,jaxws,web,ear,audit,depmonitor,jndi,smartclient - ${project.build.directory}/jonas-full-${project.version} - ${project.build.directory}/jonas-base - - - - - - - maven-enforcer-plugin - - - enforce-java - - enforce - - - - - - - 2.1 - - - 1.5 - - - - - - - - - - - maven.test.skip - - - maven.test.skip - !true - - - - applications - cargo - osgi - intravm - - - - diff --git a/jonas/modules/apis/jonas-deployment-api/pom.xml b/jonas/modules/apis/jonas-deployment-api/pom.xml deleted file mode 100644 index bc5bda2bed..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - org.ow2.jonas - jonas-apis - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-deployment-api - JOnAS :: APIs :: Deployment - bundle - \ No newline at end of file diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/DTDs.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/DTDs.java deleted file mode 100644 index 83b4608cde..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/DTDs.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -import java.util.Map; - - -/** - * This class defines the interface for the Mapping between publicId and DTDs. - * @author Florent Benoit - */ -public interface DTDs { - - /** - * Gets the mapping between publicIds and DTDs. - * @return the mapping between publicIds and DTDs - */ - Map getMapping(); - - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDeploymentDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDeploymentDesc.java deleted file mode 100644 index 71c5e87407..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDeploymentDesc.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -/** - * This interface provides a description for deployment descriptor in JOnAS. - * @author Ludovic Bert - * @author Florent Benoit - */ -public interface IDeploymentDesc { - - /** - * Get the display name of the deployment descriptor. - * @return the display name of the deployment descriptor. - */ - String getDisplayName(); - - /** - * Return a String representation of the DeploymentDesc. - * @return a String representation of the DeploymentDesc. - */ - String toString(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDescriptionGroupDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDescriptionGroupDesc.java deleted file mode 100644 index b3a342eb6a..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IDescriptionGroupDesc.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -/** - * This interface provides a description for J2EE deployment descriptors. - * @author Philippe Coq - */ -public interface IDescriptionGroupDesc { - - /** - * Get the display name of the deployment descriptor. - * @return the display name of the deployment descriptor. - */ - String getDisplayName(); - - /** - * Get the description of the deployment descriptor. - * @return the description of the deployment descriptor. - */ - String getDescription(); - - /** - * Get the small-icon of the deployment descriptor. - * @return the small-icon of the deployment descriptor. - */ - String getSmallIcon(); - - /** - * Get the large-icon of the deployment descriptor. - * @return the large-icon of the deployment descriptor. - */ - String getLargeIcon(); - - /** - * Return a String representation of the DescriptionGroup. - * @return a String representation of the DescriptionGroup. - */ - String toString(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBLocalRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBLocalRefDesc.java deleted file mode 100644 index b9d0b83eef..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBLocalRefDesc.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -public interface IEJBLocalRefDesc { - - String getEjbRefName(); - - String getEjbRefType(); - - String getLocalHome(); - - String getLocal(); - - String getEjbLink(); - - String getJndiLocalName(); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBRefDesc.java deleted file mode 100644 index 81e4edd148..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEJBRefDesc.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -public interface IEJBRefDesc { - - /** - * Get the name of the ejb-ref. - * @return String representation of the ejb-ref-name. - */ - String getEjbRefName(); - - /** - * Get the ejb-ref-type. - * @return String representation of the ejb-ref-type. - */ - String getEjbRefType(); - - /** - * Get the ejb-link. - * @return String representation of the ejb-link - */ - String getEjbLink(); - - /** - * Get the jndi name of the ejb-ref. - * @return String representation of the JNDI name - */ - String getJndiName(); - - /** - * @return the fully qualified name of the enterprise bean's home interface - */ - String getHome(); - - /** - * @return the fully qualified name of the enterprise bean's remote interface - */ - String getRemote(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEnvEntryDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEnvEntryDesc.java deleted file mode 100644 index 52516a83b3..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IEnvEntryDesc.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -/** - * This interface represents the description of an EnvEntry object. - * @author Philippe Durieux - */ -public interface IEnvEntryDesc { - - /** - * Get the name of the environemt entry. - * @return Name for environment entry - */ - String getName(); - - /** - * Get the fully-qualified Java type of the environemt entry. - * Type is needed since value is optional - * The possibles values are: - * java.lang.Boolean - * java.lang.Character - * java.lang.String - * java.lang.Integer - * java.lang.Double - * java.lang.Byte - * java.lang.Short - * java.lang.Long - * java.lang.Float - * @return Class the fully-qualified Java type of the environemt entry. - */ - Class getType(); - - /** - * Assessor for existence of value for the descriptor. - * @return true if a value is available - */ - boolean hasValue(); - - /** - * Get the value of the environment entry. - * @return value for the environment entry (must be set) - */ - Object getValue(); - - /** - * @return Env-Entry lookup name. - */ - String getLookupName(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IJNDIEnvRefsGroupDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IJNDIEnvRefsGroupDesc.java deleted file mode 100644 index efb8b95125..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IJNDIEnvRefsGroupDesc.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.api; - - -/** - * This interface provides JNDI environment reference elements - * for J2EE deployment descriptors. - * @author Philippe Coq - */ -public interface IJNDIEnvRefsGroupDesc { - - /** - * Get resource environment references. - * @return array of resource environment reference descriptors - */ - IResourceEnvRefDesc[] getResourceEnvRefDesc(); - - /** - * Get resource manager connection factory references. - * @return array of resource reference descriptors - */ - IResourceRefDesc[] getResourceRefDesc(); - - /** - * Get environment entries. - * @return array of environment entries descriptors - */ - IEnvEntryDesc[] getEnvEntryDesc(); - - /** - * Get EJB references. - * @return array of EJB reference descriptors - */ - IEJBRefDesc[] getEjbRefDesc(); - - /** - * Get ejb local references. - * @return array of ejb local reference descriptors - */ - IEJBLocalRefDesc[] getEjbLocalRefDesc(); - - /** - * Get service references. - * @return array of service references descriptors - */ - IServiceRefDesc[] getServiceRefDesc(); - - /** - * Get message destination references. - * @return array of message destination references descriptors - */ - IMessageDestinationRefDesc[] getMessageDestinationRefDesc(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IMessageDestinationRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IMessageDestinationRefDesc.java deleted file mode 100644 index 3b3c6acf99..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IMessageDestinationRefDesc.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -public interface IMessageDestinationRefDesc { - - /** - * Get the name of the message-destination-ref. - * @return String representation of the message-destination-ref-name. - */ - String getMessageDestinationRefName(); - - /** - * Get the message-destination-type. - * @return String representation of the message-destination-type. - */ - String getMessageDestinationType(); - - /** - * Get the message-destination-usage. - * @return String representation of the message-destination-usage. - */ - String getMessageDestinationUsage(); - - /** - * Get the message-destination-link. - * @return String representation of the message-destination-link - */ - String getMessageDestinationLink(); - - /** - * Get the jndi name of the message-destination-ref. - * @return String representation of the JNDI name - */ - String getJndiName(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IPersistenceUnitRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IPersistenceUnitRefDesc.java deleted file mode 100644 index e6a0ddd487..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IPersistenceUnitRefDesc.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -/** - * Interface for persistence-unit-ref elements in J2EE deployment descriptors. - */ -public interface IPersistenceUnitRefDesc { - - /** - * Get the persistence unit reference name. - * @return persistence unit reference name - */ - String getRefName(); - - /** - * Get the optional persistence unit name. - * @return persistence unit name - */ - String getName(); - - /** - * Get the optional description. - * @return persistence unit reference description - */ - String getDescription(); -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceEnvRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceEnvRefDesc.java deleted file mode 100644 index cfaaecd283..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceEnvRefDesc.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -public interface IResourceEnvRefDesc { - - /** - * @return Returns the resource-env-ref/resource-env-ref-name. - */ - String getName(); - - /** - * @return Returns the resource-env-ref/resource-env-ref-type. - */ - Class getType(); - - /** - * @return Returns the jonas-res-env-ref/jndi-name. - */ - String getJndiName(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceRefDesc.java deleted file mode 100644 index 4f5e57bdfa..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IResourceRefDesc.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -public interface IResourceRefDesc { - - /** - * To indicate that the application manage the authentication. - */ - final int APPLICATION_AUTH = 0; - - /** - * To indicate that the container manage the authentication. - */ - final int CONTAINER_AUTH = 1; - - /** - * Get resource ref. name - * @return Name of the resource ref. - */ - String getName(); - - /** - * Get resource ref. type name - * @return Class name of the resource ref. - */ - String getTypeName(); - - /** - * Get the authentication of the resource ref. - * @return Authentication value within APPLICATION_AUTH, CONTAINER_AUTH - */ - int getAuthentication(); - - /** - * Assessor for JDBC resource - * @return true if the resource is Jdbc compliant - */ - boolean isJdbc(); - - /** - * Get the jndi name of the resource ref. - * @return String representation of the JNDI name - */ - String getJndiName(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IServiceRefDesc.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IServiceRefDesc.java deleted file mode 100644 index 13901ce8f6..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/IServiceRefDesc.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -import java.net.URL; -import java.util.Hashtable; -import java.util.List; - -import javax.xml.namespace.QName; - -public interface IServiceRefDesc { - - /** - * Return the list of PortComponentRef. - * @return the list of PortComponentRef - */ - List getPortComponentRefs(); - - /** - * Return the list of Handler. - * @return the list of Handler - */ - List getHandlerRefs(); - - /** - * Return the name used for Service interface lookup. - * @return the service-ref-name value - */ - String getServiceRefName(); - - /** - * Return the Class object representing the service-interface. - * @return the Class object representing the service-interface. - */ - Class getServiceInterface(); - - /** - * Return the WSDLFile object describing the WebService. - * @return the WSDLFile object describing the WebService. - */ - //WSDLFile getWSDLFile(); - - /** - * Return the MappingFile object. - * @return the MappingFile object. - */ - //MappingFile getMappingFile(); - - /** - * Return all the params of the ServiceRefDesc as an Hashtable. - * @return all the params of the ServiceRefDesc as an Hashtable. - */ - Hashtable getParams(); - - /** - * Return the value of the specified parameter. - * @param name the parameter to retrieve - * @return the value of the specified parameter - */ - String getParam(final String name); - - /** - * Return the name of WSDL inside of the module. - * @return the name of WSDL inside of the module - */ - String getWsdlFileName(); - - /** - * Return the QName identifying the service in the WSDL. can return null if - * WSDL not defined. - * @return Return the QName identifying the service in the WSDL (can be - * null). - */ - QName getServiceQName(); - - /** - * @return Returns the alternate WSDL URL (may be null). - */ - URL getAlternateWsdlURL(); - - /** - * @return Returns the URL where the uptodate WSDL can be found. - */ - URL getLocalWSDLURL(); - - /** - * @return Returns the URL where the mapping file can be found. - */ - URL getMappingFileURL(); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/Schemas.java b/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/Schemas.java deleted file mode 100644 index e5b1843f10..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/java/org/ow2/jonas/deployment/api/Schemas.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.api; - -import java.util.List; - -/** - * This class defines the interface for all Java EE Schemas. - * @author Florent Benoit - */ -public interface Schemas { - - - /** - * Gets the URLs of the local schemas. - * @return the URLs of the local schemas - */ - List getlocalSchemas(); - -} diff --git a/jonas/modules/apis/jonas-deployment-api/src/main/resources/META-INF/jonas-deployment-api.bnd b/jonas/modules/apis/jonas-deployment-api/src/main/resources/META-INF/jonas-deployment-api.bnd deleted file mode 100644 index ef97f2d2ee..0000000000 --- a/jonas/modules/apis/jonas-deployment-api/src/main/resources/META-INF/jonas-deployment-api.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.deployment.api diff --git a/jonas/modules/apis/jonas-management-api/pom.xml b/jonas/modules/apis/jonas-management-api/pom.xml deleted file mode 100644 index 90f982a3db..0000000000 --- a/jonas/modules/apis/jonas-management-api/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - org.ow2.jonas - jonas-apis - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-management-api - JOnAS :: APIs :: Management - bundle - diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/IBaseManagement.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/IBaseManagement.java deleted file mode 100644 index 11ceaf0a8b..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/IBaseManagement.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.base.api; - -import java.util.List; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; - -public interface IBaseManagement { - - /** - * @return The current server name. - */ - String getServerName(); - - /** - * @return The current domain name. - */ - String getDomainName(); - - /** - * Get the String attribute value of an MBean in the current MBean Server. - * @param objectName The MBean's ObjectName - * @param attrName The attribute name - * @return The value of the attribute - */ - String getStringAttribute(final ObjectName objectName, final String attrName) throws ManagementException; - - /** - * Get the integer attribute value of an MBean in the current MBean Server. - * @param objectName The MBean's ObjectName - * @param attrName The attribute name - * @return The value of the attribute - */ - int getIntegerAttribute(final ObjectName objectName, final String attrName) throws ManagementException; - - /** - * Return the value of a key property in an OBJECT_NAME. - * @param objectName the OBJECT_NAME (String form) - * @param keyName key property name - * @return key value - */ - String getKeyValue(final String objectName, final String keyName) throws ManagementException; - - /** - * Return the values of a key property in String OBJECT_NAMEs. - * @param objectNames the OBJECT_NAMEs - * @param keyName key name - * @return array of key values - */ - String[] getKeyValues(final String[] objectNames, final String keyName) throws ManagementException; - - /** - * Get management attributes. - * @param objectName - * @param serverName - * @return attributes for the given objectName. - */ - J2EEMBeanAttributeInfo[] getAttributes(final ObjectName objectName, final String serverName) throws ManagementException; - - /** - * Gets the value of a specific attribute of a named MBean. - * @param on The ObjectName of the MBean. - * @param attribute A String specifying the name of the attribute to be - * retrieved. - * @param serverName The server name - * @return The value of the attribute. - * @throws ManagementException management operation failed - */ - Object getAttribute(final ObjectName on, final String attribute, final String serverName) throws ManagementException; - - /** - * Implementation of the isRegistered method to be applied to a - * server in the domain. - * @return True if the MBean is already registered in the MBean server, - * false otherwise or if an exception is catched. - * @param on ObjectName of the MBean we are looking for - * @param serverName The server name - * @throws ManagementException management operation failed - */ - boolean isRegistered(final ObjectName on, final String serverName) throws ManagementException; - - /** - * Implementation of the invoke method to be applied to a - * server in the domain. - * @param on the ObjectName of the MBean that is the target of the invoke. - * @param operation operation to invoke - * @param param invoke parameters - * @param signature invoke parameters signature - * @param serverName The server's name - * @return The object returned by the operation - * @throws ManagementException management operation failed - */ - Object invoke(final ObjectName on, final String operation, final Object[] param, final String[] signature, - final String serverName) throws ManagementException; - - /** - * Return the list of ObjectName Mbean gotten by the query in - * the current MbeanServer. - * @param p_On Query Mbeans to search - * @return The list of ObjectName - * @throws ManagementException - */ - List getListMbean(final ObjectName p_On, final String serverName) throws ManagementException; - - /** - * Return the MBeanServer connection corresponding to a given server in the - * current domain. The connection for servers in the domain are provided by - * the DomainMonitor. - * @param serverName The managed server name - * @return The MBeanServerConnection corresponding to the managed server - * @throws ManagementException Couldn't get the connection - */ - MBeanServerConnection getServerConnection(final String serverName) throws ManagementException; - - /** - * Sets the value of a specific attribute of a named MBean. - * @param on The ObjectName of the MBean. - * @param serverName The server name - * @param attribute A String specifying the name of the attribute to be set. - * @param value The value to set to the attribute. - * @throws ManagementException management operation failed - */ - void setAttribute(final ObjectName on, final String attribute, final Object value, final String serverName) - throws ManagementException; - - /** - * Return the MBeanServer connection corresponding to a current server in - * the current domain. The connection for servers in the domain are provided - * by the DomainMonitor. - * @return The MBeanServerConnection corresponding to the managed server - * @throws ManagementException Couldn't get the connection - */ - MBeanServerConnection getServerConnection() throws ManagementException; - - /** - * Sets the value of a specific attribute of a named MBean within the - * current server. - * @param on The ObjectName of the MBean. - * @param attribute A String specifying the name of the attribute to be set. - * @param value The value to set to the attribute. - * @throws ManagementException management operation failed - */ - void setAttribute(final ObjectName on, final String attribute, final Object value) throws ManagementException; - - /** - * Get the ObjectName of the Tomcat Realm MBean. - * @param domainName the domain's name - * @param serverName the server's name - * @return ObjectName of the Tomcat Realm MBean. - * @throws ManagementException - */ - ObjectName getTomcatRealm(final String domainName, final String serverName) throws ManagementException; - - /** - * Get realm items of the given type. - * @param realmType realm type. - * @param sSecurityRealmUsed the used security realm. - * @param domainName the domain's name - * @param serverName server's name - * @return real items of the given type - * @throws ManagementException any. - */ - List getRealmItems(final String realmType, final String sSecurityRealmUsed, final String domainName, - final String serverName) throws ManagementException; - - List getTomcatRealmItems(final String usedSecurityRealm, final String domainName, final String serverName) throws ManagementException; - - /** - * Get realm items of the given type within the current server of the - * current domain. - * @param realmType realm type. - * @param sSecurityRealmUsed the used security realm. - * @return realm items of the given type - * @throws ManagementException any. - */ - List getRealmItems(final String realmType, final String sSecurityRealmUsed) throws ManagementException; -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/J2EEMBeanAttributeInfo.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/J2EEMBeanAttributeInfo.java deleted file mode 100644 index 5bb13c88a7..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/J2EEMBeanAttributeInfo.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.base.api; - -import java.io.Serializable; - -import javax.management.MBeanAttributeInfo; - -/** - * Attribute infos. Used for example javaee containers and modules. - * @author eyindanga - */ -public class J2EEMBeanAttributeInfo implements Serializable { - /** - * The value of the property. - */ - private Object value; - - /** - * Label to display. - */ - private String label; - - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - - /** - * Attributes infos. - */ - - MBeanAttributeInfo mbeanAttributeInfo = null; - - /** - * Default constructor. - */ - public J2EEMBeanAttributeInfo() { - - } - - /** - * Constructor using MBeanAttributeInfo - * @param mbeaAttributeInfo attribute infos. - */ - public J2EEMBeanAttributeInfo(final MBeanAttributeInfo mbeaAttributeInfo) { - this.mbeanAttributeInfo = mbeaAttributeInfo; - } - - /** - * @return the value. - */ - public Object getValue() { - return value; - } - - /** - * @param value the value to set. - */ - public void setValue(final Object value) { - this.value = value; - } - - /** - * @return the mbeAttributeInfo. - */ - public MBeanAttributeInfo getMbeanAttributeInfo() { - return mbeanAttributeInfo; - } - - /** - * @param mbeAttributeInfo the mbeAttributeInfo to set. - */ - public void setMbeanAttributeInfo(final MBeanAttributeInfo mbeAttributeInfo) { - this.mbeanAttributeInfo = mbeAttributeInfo; - } - - /** - * Get attribute description. - * @return attribute description. - */ - public String getDescription() { - return mbeanAttributeInfo.getDescription(); - } - - /** - * Get attribute name. - * @return attribute name. - */ - public String getName() { - return mbeanAttributeInfo.getName(); - } - - /** - * Get attribute type. - * @return attribute type. - */ - public String getType() { - return mbeanAttributeInfo.getType(); - } - - /** - * @return true if attribute is IS. - */ - public boolean isIs() { - return mbeanAttributeInfo.isIs(); - } - - /** - * @return true if attribute is readable. - */ - public boolean isReadable() { - return mbeanAttributeInfo.isReadable(); - } - - /** - * @return true if attribute is writable. - */ - public boolean isWritable() { - return mbeanAttributeInfo.isWritable(); - } - - /** - * @return the label. - */ - public String getLabel() { - if (label == null) { - computeLabel(); - } - return label; - } - - /** - * @param label the label to set. - */ - public void setLabel(final String label) { - this.label = label; - } - /** - * Compute the label field. - */ - private void computeLabel() { - if (mbeanAttributeInfo != null && mbeanAttributeInfo.getName()!= null) { - String lbl = mbeanAttributeInfo.getName(); - /** - * TODO: Refine label computing from attribute name. - */ - try { - label = lbl.substring(0, lbl.indexOf("_")); - } catch (Exception e) { - label = lbl; - } - - - } - - } - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/ManagementException.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/ManagementException.java deleted file mode 100644 index cbd2bd01f5..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/base/api/ManagementException.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.management.extensions.base.api; - -/** - * Implement exceptions thrown by the management operations. - * @author Adriana Danes - */ -public class ManagementException extends RuntimeException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * - * @param message - */ - public ManagementException(final String message) { - super(message); - } - - /** - * - * @param message - * @param cause - */ - public ManagementException(final String message, final Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/cluster/api/ICluster.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/cluster/api/ICluster.java deleted file mode 100644 index c29accbaa3..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/cluster/api/ICluster.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.cluster.api; - -import org.ow2.jonas.management.extensions.base.api.IBaseManagement; - -/** - * This interface provides a description of management operations provided for - * cluster management in a master server. - * @author Adriana Danes - * @author Oualaa Hani - * @author THOMAS KOUASSI - */ -public interface ICluster extends IBaseManagement { - - /** - * Add server to cluster. - * @param clusterName cluster name - * @param serverName server name - * @param clusterDaemon cluster daemon name - * @param serverURL server url - */ - - void addServerToCluster(final String clusterName, final String serverName, final String clusterDaemon, - final String serverURL); - - /** - * start all servers in the cluster. - * @param clusterName - */ - void startAllServers(final String clusterName); - - /** - * stop all servers in the cluster. - * @param clusterName - */ - void stopAllServers(final String clusterName); - - /** - * @param clusterName. - * @return the multicast address - */ - String getMcastAddr(final String clusterName); - - /** - * @param clusterName. - * @return the multicast port - */ - int getMcastPort(final String clusterName); - - /** - * @param clusterName. - * @return the delay used by clients to update their cluster view - */ - int getDelayToRefresh(final String clusterName); -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/clusterdaemon/api/IClusterdaemon.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/clusterdaemon/api/IClusterdaemon.java deleted file mode 100644 index f23b21dfeb..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/clusterdaemon/api/IClusterdaemon.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.clusterdaemon.api; - -/** - * This interface provides a description of management operations provided for - * clusterdaemon management in a master server. - * @author Adriana Danes - * @author Oualaa Hani - * @author Thomas KOUASSI - */ -public interface IClusterdaemon { - - /** - * @return list of servers controlled by a cluster daemon. - * @param clusterdaemonName name of the cluster daemon to manage - */ - String[] getControlledServersNames(final String clusterdaemonName); - - /** - * @return the state of a cluster daemon in the domain. - * @param clusterdaemonName name of the cluster daemon to manage - */ - String getClusterdaemonState(final String clusterdaemonName); - - /** - * @param clusterdaemonName name of the cluster daemon to manage. - * @return true if the cluster daemon is in RUNNING state, false otherwise - */ - boolean isRunning(final String clusterdaemonName); - - /** - * Start a server controlled by a cluster daemon. - * @param clusterdaemonName name of the cluster daemon - * @param serverName name of the server to start - * @return true if successfully started - */ - boolean startServer(final String clusterdaemonName, final String serverName); - - /** - * Stop a server controlled by a cluster daemon. - * @param clusterdaemonName name of the cluster daemon - * @param serverName name of the server to stop - * @return true if successfully stopped - */ - - boolean stopServer(final String clusterdaemonName, final String serverName); - - /** - * Add a server to cluster daemon control. - * @param clusterDaemonName the cluster Daemon name - * @param serverName the server name - * @param description server description - * @param javaHome path to JRE - * @param jonasRoot path to bin repository - * @param jonasBase path to lib repository - * @param xprem extra parameter e.g: -Djava.net.preferIPv4Stack=true - * @param autoBoot true if the server is launched when cluster daemon starts - * @param jonasCmd user command - * @param saveIt true to flush the clusterd configuration - */ - - void addServer(final String clusterDaemonName, final String serverName, final String description, final String jonasRoot, - final String jonasBase, final String javaHome, final String xprem, final String autoBoot, final String jonasCmd, - final String saveIt); - - /** - * Remove this server from cluster daemon control. - * @param serverName the server to remove - * @param saveIt true to flush the clusterd configuration - */ - void removeServer(final String clusterDaemonName, final String serverName, final String saveIt); - - /** - * Ask Cluster Daemon to start all the Servers from cluster daemon control. - * @param clusterdaemonName name of the cluster daemon - * @param otherParams the servers to start - */ - void startAllServers(final String clusterDaemonName, final String otherParams); - - /** - * Ask Cluster Daemon to stop all the Servers from cluster daemon control. - * @param clusterdaemonName name of the cluster daemon - * @param otherParams the servers to stop - */ - void stopAllServers(final String clusterDaemonName, final String otherParams); - - /** - * Get the OperatingSystemAvailableProcessorsof a cluster Daemon Name in the - * domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the OperatingSystemAvailableProcessors of the cluster Daemon - */ - String getOperatingSystemAvailableProcessors(final String clusterDaemonName); - - /** - * Get the OperatingSystemName a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the operatingSystemName of the cluster Daemon - */ - String getOperatingSystemName(final String clusterDaemonName); - - /** - * Get the OperatingSystemVersion a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the OperatingSystemVersion of the cluster Daemon - */ - String getOperatingSystemVersion(final String clusterDaemonName); - - /** - * Get the RunTimeSpecVendor a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the RunTimeSpecVendor of the cluster Daemon - */ - String getRunTimeSpecVendor(final String clusterDaemonName); - - /** - * Get the RunTimeSpecVersion a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the RunTimeSpecVersion of the cluster Daemon - */ - String getRunTimeSpecVersion(final String clusterDaemonName); - - /** - * Get the RunTimeVmName a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the RunTimeVmName of the cluster Daemon - */ - String getRunTimeVmName(final String clusterDaemonName); - - /** - * Get the RunTimeVmVendor a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the runTimeVmVendor of the cluster Daemon - */ - String getRunTimeVmVendor(final String clusterDaemonName); - - /** - * Get the RunTimeVmVersion a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the RunTimeVmVersion of the cluster Daemon - */ - String getRunTimeVmVersion(final String clusterDaemonName); - - /** - * Get the OperatingSystemArch a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the OperatingSystem Architecture - */ - String getOperatingSystemArch(final String clusterDaemonName); - - /** - * Get the vmCurrentUsedMemory a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. Getting remote - * Vm used Memory - * @return the value of current used memory of the cluster Daemon - */ - String getVmCurrentUsedMemory(final String clusterDaemonName); - - /** - * Get the vmTotalMemory a cluster Daemon Name in the domain. - * @param clusterDaemonName the cluster Daemon Name's name. Getting remote - * Vm Total Memory - * @return the value of Vm Total memory of the cluster Daemon - */ - String getVmTotalMemory(final String clusterDaemonName); - - /** - * Getting remote Vm's Current used Heap memory - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the value of Vm's Current used Heap memory - */ - String getVmCurrentUsedHeapMemory(final String clusterDaemonName); - - /** - * Getting remote Vm's Current used non Heap memory - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the value of Vm's Current used non Heap memory of the cluster - * Daemon - */ - String getVmCurrentUsedNonHeapMemory(final String clusterDaemonName); - - /** - * Getting Operating system Current used space. - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the value of Operating system Current used space of the cluster - * Daemon - */ - String getOsCurrentUsedSpace(final String clusterDaemonName); - - /** - * Getting Operating system Total space - * @param clusterDaemonName the cluster Daemon Name's name. - * @return the value of Operating system Total space of the cluster Daemon - */ - String getOsTotalSpace(final String clusterDaemonName); - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/container/api/IContainerManagement.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/container/api/IContainerManagement.java deleted file mode 100644 index 6a0e7c38e7..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/container/api/IContainerManagement.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.container.api; - -import java.util.List; -import java.util.Map; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -/** - * Interface for containers management. - * @author eyindanga - * - */ -public interface IContainerManagement { - /** - * Gets ObjectName for J2EE Module. - * @param ejbObjectName - * @return - * @throws MalformedObjectNameException - */ - ObjectName getEJBModuleObjectName(final String ejbObjectName) throws MalformedObjectNameException; - - /** - * Gets all the EntityBean MBeans in a module which is deployed in a given server - * @param pObjectName pObjectName - * @param serverName name of the administrated server. - * @return List of entity beans. - */ - List getEntityBeans(final ObjectName pObjectName, final String serverName); - - /** - * Gets all the Stateful Session MBeans in a module which is deployed in a given server - * @param pObjectName pObjectName - * @param serverName name of the administrated server. - * @return List of entity beans. - */ - List getStatefulSessionBeans(final ObjectName pObjectName, final String serverName); - - /** - * Gets all the Stateless Session MBeans in a module which is deployed in a given server - * @param pObjectName pObjectName - * @param serverName name of the administrated server. - * @return List of entity beans. - */ - List getStatelessSessionBeans(final ObjectName pObjectName, final String serverName); - - /** - * Gets all the Message Driven MBeans in a module which is deployed in a given server - * @param pObjectName pObjectName - * @param serverName name of the administrated server. - * @return List of entity beans. - */ - List getMessageDrivenBeans(final ObjectName pObjectName, final String serverName); - - /** - * Get the total number of EJBs in a EJBModule - * @param moduleOn the EJBModule's ObjectName - * @return map with the number of EJBs of different types where the key is the JSR77 type name - */ - public Map getTotalEJB(final ObjectName moduleOn); -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/domain/api/IDomain.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/domain/api/IDomain.java deleted file mode 100644 index 2127ae566c..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/domain/api/IDomain.java +++ /dev/null @@ -1,173 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.domain.api; - -import org.ow2.jonas.management.extensions.base.api.IBaseManagement; - -/** - * This interface provides a description of management operations - * provided for domain management in a master server. - * @author Adriana Danes - * @author Oualaa Hani - */ -public interface IDomain extends IBaseManagement { - - /** - * Get the name of the server providing the ManagementEntryEndpoint. - * @return the local server name. - */ - String getServerName(); - /** - * Get the domain name. - * @return the domain name. - */ - String getDomainName(); - - /** - * @return the current server's host. - */ - String getServerHost(); - - /** - * @return the current server's port if the web service activated. - */ - String getServerPort(); - - /** - * Return True if the managed server is master. - * @param serverName managed server name - */ - boolean isMaster(final String serverName); - - /** - * Return True if the current server is a master. - */ - boolean isMaster(); - - /** - * Return the type of a cluster in the current domain. - * @param clusterName the cluster's name - */ - String getClusterType(final String clusterName); - - /** - * @return the servers name that are belonging to the domain. - */ - String[] getServerNames(); - - /** - * @return the server names that are belonging to a cluster. - * @param clusterName the cluster name - */ - String[] getServerNames(final String clusterName); - - /** - * @return the clusters objectname in the domain. - */ - String[] getClusters(); - - /** - * @return the clusterdaemons objectname in the domain. - */ - String[] getclusterDaemons(); - - /** - * @return the state of a server in the domain - * @param serverName the server's name - */ - String getServerState(final String serverName); - - /** - * Return the cluster daemon of a server in the domain. - * @param serverName the server's name - */ - String getServerClusterdaemon(final String serverName); - - /** - * @return the state of a cluster in the domain. - * @param clusterName the cluster's name - */ - String getClusterState(final String clusterName); - - /** - * @return the state of a cluster daemon in the domain. - * @param clusterdaemonName the cluster daemon's name. - */ - String getClusterdaemonState(final String clusterDaemonName); - - /** - * @return name of clusters in the domain. - */ - String[] getClustersNames(); - - /** - * @return name of clustersDaemon in the domain. - */ - String[] getClusterDaemonNames(); - - /** - * Add server in domain. - * @param serverName. - * @param serverURL the URL is a JMX URL. - * @param userName this parameter is optional. - * @param password this parameter is optional. - * @param clusterDaemon this parameter means if the server takes part of a clusterdaemon. It's optional. - */ - void addServer(final String serverName, final String serverURL, final String userName, final String password,final String clusterDaemon); - - /** - * Remove server from domain. - * @param serversToRemove List of servers to remove. - */ - void removeServers (final String[] serversToRemove); - - /** - * Start server. - * @param serverName. - * @param standby true to activate standby mode. - */ - void startServer(final String serverName, boolean standby); - - /** - * Stop server. - * @param serverName server's name. - * @param standby true to activate standby mode. - */ - void stopServer(final String serverName, boolean standby); - - /** - * Create logical cluster. - * @param clusterName - */ - void addCluster(final String clusterName); - - /** - * Get the name of the servers in the domain except the ones that are belonging to this cluster. - * @param clusterName the cluster name - * @return name of the servers that can be attached to the cluster - */ - String[] getServersNotInCluster(final String clusterName); - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServer.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServer.java deleted file mode 100644 index 49a8ca2a73..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServer.java +++ /dev/null @@ -1,255 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.server.api; - -/** - * This interface provides a description of management operations provided for a - * server instance management in a domain. - * @author Adriana Danes - * @author Oualaa Hani - * @author Thomas kouassi - */ -public interface IServer { - - // Global - /** - * Get the memory used by a server in the domain. - * @param pServer the server's name. - * @return the used memory - */ - long getCurrentUsedMemory(final String pServer); - - /** - * Get the number of threads used by a server in the domain. - * @param pServer the server's name. - * @return the number of threads - */ - int getAllThreadsCount(final String pServer); - - /** - * Get the total memory of the server in the domain. - * @param pServer the server's name. - * @return the total memory - */ - Long getCurrentTotalMemory(final String pServer); - - /** - * Get the JVM vendor. - * @param pServer the server's name. - * @return the JVM vendor - */ - String getJavaVendor(final String pServer); - - /** - * Get the Java home - * @param server the server's name. - * @return the javaHome - */ - String getJavaHome(final String serverName); - - /** - * Get the java version. - * @param pServer the server's name. - * @return the java version - */ - String getJavaVersion(final String pServer); - - /** - * Get the version of a server in the domain. - * @param pServer the server's name. - * @return the server's version - */ - String getServerVersion(final String pServer); - - /** - * Get the the protocols used bye the server. - * @param pServer the server's name. - * @return the protocols used bye the server - */ - String getProtocols(final String pServer); - - /** - * Get the Jonas Base used by the server - * @param pServer the server's name - * @return the jonas Base sed bye the server - */ - String getJonasBase(final String pServerName); - - /** - * Get the Jonas Root used by the server - * @param pServer the server's name - * @return the Jonas Root used bye the server - */ - String getJonasRoot(final String pServerName); - - /** - * Get the Xprem used by the server - * @param pServer the server's name - * @return the Xprem used bye the server - */ - String getXprem(final String pServerName); - - /** - * Get the Auto boot used by the server - * @param pServer the server's name - * @return the Auto boot used bye the server - */ - String getAutoBoot(final String pServerName); - - /** - * Get the Description - * @param pServer the server's name - * @return the server Description - */ - String getDescription(final String pServerName); - - /** - * Get the JMX connection URL of the server. - * @param pServer the server's name. - * @return the JMX connection URL of the server - */ - String getConnectionUrl(final String pServer); - - // Transactions - - /** - * @return total begun transactions. - * @param pServer Server name - */ - int getTotalBegunTransactions(final String pServer); - - /** - * @return total commited transactions. - * @param pServer Server name - */ - int getTotalCommittedTransactions(final String pServer); - - /** - * @return total current transactions. - * @param pServer Server name - */ - int getTotalCurrentTransactions(final String pServer); - - /** - * @return total expired transactions. - * @param pServer Server name - */ - int getTotalExpiredTransactions(final String pServer); - - /** - * @return total global transactions. - * @param pServer Server name - */ - int getTotalRolledbackTransactions(final String pServer); - - // Tomcat - - /** - * @return the max threads by connector tomcat. - * @param pServer Server name - */ - int getMaxThreadsByConnectorTomcat(final String server); - - /** - * @return current threads count by tomcat connector - * @param pServer Server name - */ - int getCurrentThreadCountByConnectorTomcat(final String server); - - /** - * @param server Server name. - * @return host name - */ - String getHostName(final String serverName); - - /** - * @return current threads busy by connector tomcat. - * @param pServer Server name - */ - int getCurrentThreadBusyByConnectorTomcat(final String server); - - /** - * @return bytes received by connector tomcat. - * @param pServer Server name - */ - long getBytesReceivedByConnectorTomcat(final String server); - - /** - * @return bytes sent by connector tomcat. - * @param pServer Server name - */ - long getBytesSentByConnectorTomcat(final String server); - - /** - * @return error count by connector tomcat. - * @param pServer Server name - */ - int getErrorCountByConnectorTomcat(final String server); - - /** - * @return processing time by connector tomcat. - * @param pServer Server name - */ - long getProcessingTimeByConnectorTomcat(final String server); - - /** - * @return request count by connector tomcat. - * @param pServer Server name - */ - int getRequestCountByConnectorTomcat(final String server); - - // EJBs - - /** - * @return current number of EJB. - * @param pServer Server name - */ - int getCurrentNumberOfEJB(final String server); - - /** - * @return current number of Entity bean. - * @param pServer Server name - */ - int getCurrentNumberOfEntityBean(final String server); - - /** - * @return current number of state full bean. - * @param pServer Server name - */ - int getCurrentNumberOfSBF(final String server); - - /** - * @return current number of state less bean. - * @param pServer Server name - */ - int getCurrentNumberOfSBL(final String server); - - /** - * @return current number of mbean. - * @param pServer Server name - */ - int getCurrentNumberOfMDB(final String server); - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServerManagement.java b/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServerManagement.java deleted file mode 100644 index 92ba960a2c..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/java/org/ow2/jonas/management/extensions/server/api/IServerManagement.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management.extensions.server.api; - -import java.util.List; - -/** - * Server management API. Defines management operations for a server target. - * These operations are based on MBeans associated to the managed server (J2EEServer for example). - * @author Adriana Danes - * - */ -public interface IServerManagement { - /** - * Get threads information for a given server managed in the domain. - * @param serverName the server's name - * @return Thread stack info. - * @throws Exception when operation invocation fails. - */ - List> getServerThreadsInformation(final String serverName) throws Exception; - - /** - * Get threads information for a server identified by the a JMX Url. - * @param jmxUrl the server's jmx url. - * @param username the user name in case the jmx server is protected by user/password. - * @param password the password in case the jmx server is protected by user/password. - * @throws Exception when operation invocation fails - */ - List> getServerThreadsInformation(final String jmxUrl, final String username, final String password) throws Exception; - - /** - * Deploy a module on a target server. - * @param fileName Name of the module's file. - * @param serverName Target server name. - * @throws Exception deploy operation failed. - */ - void deploy(final String fileName, final String serverName) throws Exception; - - /** - * Uneploy a module on a target server. - * @param fileName Name of the module's file. - * @param serverName Target server name. - * @throws Exception undeploy operation failed. - */ - void undeploy(final String fileName, final String serverName) throws Exception; - - /** - * Remove a module on a target server. - * @param fileName Name of the module's file. - * @param serverName Target server name. - * @return true if the file successfully deleted - * @throws Exception remove operation failed. - */ - boolean remove(final String fileName, final String serverName) throws Exception; - - /** - * Return true if a given service is in 'development' mode for a given server managed in the domain. - * @param serviceName The service name, for example "depmonitor". - * @param serverName Target server name. - * @return true if a given service is in 'development' mode, false otherwise - * @throws Exception - */ - boolean developmentMode(final String serviceName, final String serverName) throws Exception; - -} diff --git a/jonas/modules/apis/jonas-management-api/src/main/resources/META-INF/jonas-management-api.bnd b/jonas/modules/apis/jonas-management-api/src/main/resources/META-INF/jonas-management-api.bnd deleted file mode 100644 index 4a937b089f..0000000000 --- a/jonas/modules/apis/jonas-management-api/src/main/resources/META-INF/jonas-management-api.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.management.extensions.domain.api,\ - org.ow2.jonas.management.extensions.server.api,\ - org.ow2.jonas.management.extensions.clusterdaemon.api,\ - org.ow2.jonas.management.extensions.base.api,\ - org.ow2.jonas.management.extensions.container.api,\ - org.ow2.jonas.management.extensions.cluster.api diff --git a/jonas/modules/apis/jonas-services-api/pom.xml b/jonas/modules/apis/jonas-services-api/pom.xml deleted file mode 100644 index fa97d29d7f..0000000000 --- a/jonas/modules/apis/jonas-services-api/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - org.ow2.jonas - jonas-apis - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-services-api - bundle - JOnAS :: APIs :: Services Interfaces - - - org.osgi - org.osgi.compendium - - - org.ow2.jonas - jonas-deployment-api - ${project.version} - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - org.ow2.bundles - ow2-util-event-api - - - org.ow2.bundles - ow2-util-ee-metadata-war-api - - - org.ow2.easybeans - easybeans-api - - - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/config/IAddonConfig.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/config/IAddonConfig.java deleted file mode 100644 index a68d072b18..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/config/IAddonConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.config; - -import java.io.File; - -/** - * Allow to retrieve configuration files of an Addon - * @author Jeremy Cazaux - */ -public interface IAddonConfig { - - /** - * @param fileName The name of the resource to retrieve - * @return the inputstream of the resource to retrieve - */ - File getConfigurationFile(String fileName); - - /* - * @return the configuration directory of an Addon - */ - File getConfigurationDirectory(); -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/IAddonDeployable.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/IAddonDeployable.java deleted file mode 100644 index 881af86c6b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/IAddonDeployable.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.deployable; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -import java.util.List; - -/** - * Represents an Addon Deployable - * @author Jeremy Cazaux - */ -public interface IAddonDeployable extends IDeployable { - - /** - * @return the list of deployables of this deployable addon - */ - List getDeployables(); - - /** - * @param sortableDeployable Sortable deployable to add to the persistent sortable deployable list - */ - void addDeployable(final ISortableDeployable sortableDeployable); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/ISortableDeployable.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/ISortableDeployable.java deleted file mode 100644 index 258f54eae8..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployable/ISortableDeployable.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.deployable; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Class that stores a file and the associated deployable and that can be - * sorted - * @author Jeremy Cazaux - */ -public interface ISortableDeployable { - - /** - * @return the priority of the deployable - */ - Integer getPriority(); - - /** - * @return the deployable - */ - IDeployable getDeployable(); - - /** - * @param deployable The deployable to set - */ - void setDeployable(final IDeployable deployable); - - /** - * @param priority The priority of the deployable - */ - void setPriority(final Integer priority); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployer.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployer.java deleted file mode 100644 index 5bb4ca45ae..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployer.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.deployer; - -import org.ow2.jonas.addon.deploy.api.deployable.IAddonDeployable; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.util.ee.deploy.api.deployer.IDeployer; - -/** - * Represents an Addon Deployer - * @author Jeremy Cazaux - */ -public interface IAddonDeployer extends IDeployer { - - /** - * Test if the specified unpack name is already deployed or not. - * @param unpackName the name of the Addon file. - * @return true if the Addon is deployed, else false. - */ - boolean isAddonDeployedByWorkName(final String unpackName); - - /** - * Set Multitenant service impl - * @param multitenantService - */ - void setMultitenantService(MultitenantService multitenantService); - - /** - * Unset Multitenant service impl - */ - void unsetMultitenantService(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployerLog.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployerLog.java deleted file mode 100644 index e335bc6095..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/deployer/IAddonDeployerLog.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.deployer; - -import org.ow2.jonas.addon.deploy.api.util.IAddonLogEntry; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; - -import java.io.File; -import java.util.Vector; - -/** - * Interface for the addon deployer log - * @author Jeremy Cazaux - */ -public interface IAddonDeployerLog extends IDeployerLog { - - /** - * Add the entry and return the new entries. - * @param original the name of the file - * @param copy the copy of the file - * @return the new vector of IAddonLogEntry item. - * @throws DeployerLogException if the add can't be done - */ - Vector addEntry(final String name, final File original, final File copy) throws DeployerLogException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonLogEntry.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonLogEntry.java deleted file mode 100644 index cc8059d11a..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonLogEntry.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.util; - -import org.ow2.jonas.workcleaner.LogEntry; - -/** - * Interface for IAddonLogEntry - * @author Jeremy Cazaux - */ -public interface IAddonLogEntry extends LogEntry{ - - /** - * @return the name of the Addon - */ - String getName(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonStructure.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonStructure.java deleted file mode 100644 index 0373ed7082..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/addon/deploy/api/util/IAddonStructure.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.api.util; - -import java.io.File; - -/** - * Sets some constants for an Addon Structure - * @author Jeremy Cazaux - */ -public interface IAddonStructure { - - /** - * Configuration directory of an Addon - */ - String CONF_DIRECTORY = "conf"; - - /** - * Bin directory of an Addon - */ - String BIN_DIRECTORY = "bin"; - - /** - * Deployable directory of an Addon - */ - String DEPLOY_DIRECTORY = "deploy"; - - /** - * Repository directory of an Addon - */ - String REPOSITORY_DIRECTORY = "repository"; - - /** - * Ant directory of an Addon - */ - String ANT_DIRECTORY = "ant"; - - /** - * Addon metadata filename - */ - String METADATA_FILENAME = "jonas-addon.xml"; - - /** - * META-INF directory name - */ - String META_INF = "META-INF"; - - /** - * The metadata file of an Addon deployable - */ - String JONAS_ADDON_METADATA = META_INF + File.separator + METADATA_FILENAME; - - /** - * The addon metadata zip entry - */ - String JONAS_ADDON_METADATA_ZIP_ENTRY = META_INF + "/" + METADATA_FILENAME; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmException.java deleted file mode 100644 index f6dab3ba03..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmException.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.adm; - -import org.ow2.jonas.service.ServiceException; - -/** - * - * Exption throwed by the Adm object when a deployment operation failed - * due to a missing service. - * @author Adriana Danes - */ -public class AdmException extends ServiceException { - /** - * Constructs a new AdmException with the specified message. - * @param message the detail message. - */ - public AdmException(final String message) { - super(message, null); - } -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmInterface.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmInterface.java deleted file mode 100644 index 07c193b28d..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/adm/AdmInterface.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * JOnAS 2.4 Murad Meghani (Murad.Meghani@compuware.com) killServer and stopServer - * JOnAS 2.5 2002.06 Florent Benoit & Ludovic Bert : - * Methods for wars and ear files - * Dean Jennings = add deployFile - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.adm; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.util.Properties; -import java.util.Vector; - -import org.ow2.jonas.adm.AdmException; - - -/* - * JOnAS Administration Remote Interface. - * This is used basically by jonas admin. - * @author Philippe Coq - * Contributor(s): - * Murad Meghani (Murad.Meghani@compuware.com) killServer and stopServer - * Florent Benoit & Ludovic Bert : Methods for wars and ear files - */ -public interface AdmInterface extends Remote { - - public static final int TYPE_EJB = 1; - public static final int TYPE_WAR = 2; - public static final int TYPE_EAR = 3; - public static final int TYPE_RAR = 4; - public static final int TYPE_CAR = 5; - - public static final int STATUS_RUNNING = 1; - public static final int STATUS_STOPPED = 2; - public static final int STATUS_ALL = 0; - - /** - * Adm JNDI name suffix. - */ - public static final String ADMNAME_SUFFIX = "_Adm"; - - /** - * JOnAS instance is NotReady. - */ - public static final int NOT_READY = 0; - - /** - * JOnAS instance is Ready. - */ - public static final int READY = 1; - - /** - * JOnAS instance is Stopped. - */ - public static final int STOPPED = 2; - - - /** - * Deploy a given ear file with the help of the ear service. - * @param fileName the name of the ear file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the deployment failed. - */ - public void addEar(String fileName) throws RemoteException, AdmException; - - /** - * Deploy a given rar file with the help of the resource service. - * @param fileName the name of the rar file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the deployment failed. - */ - public void addRar(String fileName) throws RemoteException, AdmException; - - /** - * Deploy a given war file with the help of the web container service. - * @param fileName the name of the war file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the deployment failed. - */ - public void addWar(String fileName) throws RemoteException, AdmException; - - /** - * UnDeploy a given ear file with the help of the ear service. - * @param fileName the name of the ear file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the undeployment failed. - */ - public void removeEar(String fileName) throws RemoteException, AdmException; - - /** - * UnDeploy a given rar file with the help of the resource service. - * @param fileName the name of the rar file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the undeployment failed. - */ - public void removeRar(String fileName) throws RemoteException, AdmException; - - /** - * UnDeploy a given war file with the help of the web container service. - * @param fileName the name of the war file. - * @throws RemoteException if rmi call failed. - * @throws AdmException if the undeployment failed. - */ - public void removeWar(String fileName) throws RemoteException, AdmException; - - /** - * Test if the specified filename is already deployed or not - * @param fileName the name of the ear file. - * @return true if the ear is deployed, else false. - * @throws RemoteException if rmi call failed. - */ - boolean isEarLoaded(String fileName) throws RemoteException, AdmException; - - /** - * Test if the specified filename is already deployed or not - * @param fileName the name of the rar file. - * @return true if the rar is deployed, else false. - * @throws RemoteException if rmi call failed. - */ - boolean isRarLoaded(String fileName) throws RemoteException, AdmException; - - - /** - * Test if the specified filename is already deployed or not - * @param fileName the name of the war file. - * @return true if the war is deployed, else false. - * @throws RemoteException if rmi call failed. - */ - boolean isWarLoaded(String fileName) throws RemoteException, AdmException; - - - void addBeans(String fileName) throws RemoteException; - void removeBeans(String fileName) throws RemoteException; - boolean isLoaded(String fileName) throws RemoteException; - String [] listBeans() throws RemoteException; - String dumpCustom() throws RemoteException; - Vector listContext() throws RemoteException; - Properties listEnv() throws RemoteException; - void stopServer() throws RemoteException; - void killServer() throws RemoteException; - boolean isEJBContainer() throws RemoteException; - int getServerState() throws RemoteException; - void setTransactionTimeout(int timeout) throws RemoteException; - void runGC() throws RemoteException; - void syncAllEntities(boolean passivate) throws RemoteException; - String [] getTopics() throws RemoteException; - String getTopicLevel(String topic) throws RemoteException; - void setTopicLevel(String topic, String l) throws RemoteException; - void deployFileOn(String filename, String [] target) throws RemoteException; - void stopRemoteServers(String [] target) throws RemoteException; - void startRemoteServers(String [] target) throws RemoteException; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/audit/AuditService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/audit/AuditService.java deleted file mode 100644 index 3c2caab65b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/audit/AuditService.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit; - -import javax.servlet.Filter; - -import org.ow2.jonas.service.Service; - -/** - * Audit service API. - * @author Florent Benoit - */ -public interface AuditService extends Service { - - /** - * @return an HTTP filter that can be used for the audit system. - */ - Filter getWebAuditFilter(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/cmi/CmiService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/cmi/CmiService.java deleted file mode 100644 index 17ea4f41b2..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/cmi/CmiService.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi; - -import javax.ejb.EJBObject; - -import org.ow2.jonas.service.Service; -import org.ow2.util.event.api.IEventListener; - -/** - * CMI Service interface. - * It provides a way to use CMI with JOnAS. - * @author Loris Bouzonnet - */ -public interface CmiService extends Service { - - /** - * Add a bean to the cluster. - * @param jndiName name of the bean - * @param clusterConfigMapping The cluster configuration - * @param homeClass class of the home interface - * @param remoteClass class of the remote interface - * @param classLoader the classloader used by the container of this bean - * @param stateful true if the bean has a state - * @param clusterReplicated true if the bean is replicated (ha service is - * required) - * @param env a given environment. - * @throws Exception if the provided policy of load-balancing is not valid - */ - void addClusteredObject( - String jndiName, - Object clusterConfig, - Class homeClass, - Class remoteClass, - ClassLoader classLoader, - boolean stateful, - boolean clusterReplicated) - throws Exception; - - /** - * Remove the given clustered object. - * @param jndiName Name of the object to remove - * @throws Exception any - */ - void removeClusteredObject(String jndiName) throws Exception; - - /** - * Gets Listener for Bean Events. - * @return The bean Event Listener. - * @throws Exception any. - */ - IEventListener getBeanEventListener() throws Exception; - - /** - * Set the bean event listener. - * @param eventListener The bean event listener to set. - * @throws Exception any. - */ - void setBeanEventListener(IEventListener eventListener) throws Exception; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/ConfigurationManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/ConfigurationManager.java deleted file mode 100644 index f9520ec0e4..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/ConfigurationManager.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configuration; - -import org.ow2.jonas.properties.ServerProperties; - -import java.util.Dictionary; -import java.util.List; - -/** - * This interface provides methods to manage the JOnAS service configurations. - * @author Francois Fornaciari - */ -public interface ConfigurationManager { - /** - * Halt server by stopping the system bundle. - * @throws Exception If an exception occurs during server halting - */ - void haltServer() throws Exception; - - /** - * Create or update the service configuration for the given service. - * @param service the service name - * @throws Exception If an exception occurs during configuration updates - */ - void updateServiceConfiguration(final String service) throws Exception; - - /** - * Delete the service configuration for the given service. - * @param service the service name - * @throws Exception If an exception occurs during configuration deletions - */ - void deleteServiceConfiguration(final String service) throws Exception; - - /** - * Return the list of JOnAS services. - * @return All JOnAS services - */ - List getAllServices(); - - /** - * Return the list of JOnAS mandatory services. - * @return All JOnAS mandatory services - */ - List getMandatoryServices(); - - /** - * Return the list of JOnAS optional services. - * @return All JOnAS optional services - */ - List getOptionalServices(); - - /** - * Return true if the given service matches a JOnAS service - * @param service The service name - * @return True if the given service matches a JOnAS service - */ - boolean matchService(final String service); - - /** - * Get all properties for a given JOnAS service name. - * @param service The given service name - * @return A Dictionary value representing all properties for a JOnAS service name - */ - Dictionary getServiceProperties(final String service); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/DeploymentPlanDeployer.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/DeploymentPlanDeployer.java deleted file mode 100644 index fcdf0b1878..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/configuration/DeploymentPlanDeployer.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configuration; - -import org.ow2.util.ee.deploy.api.deployer.DeployerException; - -/** - * Allows to deploy or undeploy all bundles for a particular deployment plan. - * @author Francois Fornaciari - */ -public interface DeploymentPlanDeployer { - - /** - * Try to deploy all bundles for a given deployment plan. - * @param name The deployment plan abstract name - * @throws DeployerException If the deployment of the deployment plan fails - */ - void deploy(final String name) throws DeployerException; - - /** - * Try to undeploy all bundles for a given deployment plan. - * @param name The deployment plan abstract name - * @throws DeployerException If the undeployment of the deployment plan fails - */ - void undeploy(final String name)throws DeployerException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/datasource/DataSourceService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/datasource/DataSourceService.java deleted file mode 100644 index add5cea244..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/datasource/DataSourceService.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2012 Bull S. A. S. - * Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois - * This library is free software; you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Foundation - * version 2.1 of the License. - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public License along with this - * program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth - * Floor, Boston, MA 02110-1301, USA. - */ - -package org.ow2.jonas.datasource; - -import java.util.Map; - -/** - * @author Loic Albertin - */ -public interface DataSourceService { - - /** - * Deploy a DataSource using the given parameters and returns the JNDI name of the created DataSource. - * A caching mechanism is implemented and calling this method twice with same parameters will return the same JNDI name. - * - * @param className DataSource implementation class name - * @param description Description of the data source - * @param url A JDBC url If the url property is specified along with other standard DataSource properties such as - * serverName and portNumber, the more specific properties will take precedence and the url will be ignored - * @param user User name for connection authentications - * @param password password for connection authentications - * @param databaseName Name of a database on a server - * @param portNumber Port number where a server is listening for requests - * @param serverName Database server name - * @param isolationLevel Isolation level for connections. - * @param transactional Indicates whether a connection is transactional or not - * @param initialPoolSize Number of connections that should be created when a connection pool is initialized - * @param maxPoolSize Maximum number of connections that should be concurrently allocated for a connection pool - * @param minPoolSize Minimum number of connections that should be allocated for a connection pool - * @param maxIdleTime The number of seconds that a physical connection should remain unused in the pool before the connection is - * closed for a connection pool - * @param maxStatements The total number of statements that a connection pool should keep open. A value of 0 indicates that - * the caching of statements is disabled for a connection pool - * @param loginTimeout The maximum time in seconds that this data source will wait while attempting to connect to a database. A - * value of 0 specifies that the timeout is the default system timeout if there is one, - * otherwise it specifies that there is no timeout - * @param properties Used to specify vendor specific properties and less commonly used DataSource properties - * - * @return the JNDI name under which the DataSource is registered - */ - String deployDataSource(final String className, final String description, final String url, - final String user, final String password, final String databaseName, final int portNumber, - final String serverName, final int isolationLevel, final boolean transactional, final int initialPoolSize, - final int maxPoolSize, final int minPoolSize, final int maxIdleTime, final int maxStatements, - final int loginTimeout, final Map properties); - - //TODO see if we need to undeploy datasources -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/db/DBService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/db/DBService.java deleted file mode 100644 index 29bb5df39d..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/db/DBService.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db; - -import org.ow2.jonas.service.Service; - -/** - * Interface of the database service - * @author Florent Benoit - */ -public interface DBService extends Service { - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/dbm/DataBaseService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/dbm/DataBaseService.java deleted file mode 100644 index 577db08fca..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/dbm/DataBaseService.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm; - -import java.util.Properties; - -import javax.naming.NamingException; - -import org.ow2.jonas.service.Service; - - -/** - * DataBase Service interface.* - * @author Philippe Durieux - * - * Contributor(s): - * - * 03/01/14 Adriana Danes - * Change createDataSource() signature : take additional argument, the datasource name - */ -public interface DataBaseService extends Service { - - /** - * create a new DataSource - */ - public void createDataSource(String dsName, Properties dsd) throws Exception; - - /** - * Unbind dataSource names from the Naming - */ - public void unbindDataSources() throws NamingException; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/depmonitor/MonitoringService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/depmonitor/MonitoringService.java deleted file mode 100644 index f7308ab072..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/depmonitor/MonitoringService.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.depmonitor; - -import org.ow2.jonas.service.Service; - -/** - * Interface of the depmonitor service. - * @author Francois Fornaciari - */ -public interface MonitoringService extends Service { - /** - * Start monitoring of deployables. - */ - void startMonitoring(); -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryEvent.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryEvent.java deleted file mode 100644 index 90a0c657e0..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hoper that irt will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery; - -/** - * Discovery Message sent by the discovery service to notify - * new servers in the domain. - * @author Philippe Durieux - */ -public interface DiscoveryEvent { - public String getDomainName(); - public String getServerName(); - public String[] getConnectorURL(); - public String getState(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryService.java deleted file mode 100644 index d356d8fff4..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryService.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery; - -import org.ow2.jonas.service.Service; - -/** - * JOnAS Discovery Service interface. - * @author Adriana Danes - */ -public interface DiscoveryService extends Service { - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryState.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryState.java deleted file mode 100644 index 533938c3d1..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/discovery/DiscoveryState.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery; - -/** - * This is a helper class that define the possible state attribute values in a - * DiscoveryEvent class instance. - * - * @author Adriana Danes - */ -public class DiscoveryState { - - /** - * Used when the DiscovetyEvent is emitted to notify a server start-up. - */ - public static final String RUNNING = "running"; - - /** - * Used when the DiscovetyEvent is emitted to notify a server shut-down. - */ - public static final String STOPPING = "stopping"; - - /** - * Used when the DiscovetyEvent is emitted to notify a server start-up - */ - public static final String STARTUP = "starting up"; - - /** - * Another JOnAS instance started with a name already bound in the domain. - */ - public static final String DUPLICATE_NAME = "duplicate server name found"; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarService.java deleted file mode 100644 index 598f3ab709..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarService.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear; - -import org.ow2.jonas.service.Service; - -/** - * JOnAS EAR Service interface. This interface provides a description of an EAR service. - * @author Ludovic Bert - * @author Florent Benoit - */ -public interface EarService extends Service { - - /** - * Test if the specified name is already deployed or not. - * @param workName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - boolean isEarDeployedByWorkName(String workName); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarServiceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarServiceException.java deleted file mode 100644 index 1e9677732d..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ear/EarServiceException.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear; - -import org.ow2.jonas.service.ServiceException; - -/** - * The class EarServiceException that indicates conditions that a reasonable - * application might want to catch. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class EarServiceException extends ServiceException { - - /** - * Constructs a new EarServiceException with the specified message. - * @param message the detail message. - */ - public EarServiceException(String message) { - this(message, null); - } - - /** - * Constructs a new EarServiceException with the specified message. - * @param message the detail message. - * @param throwable the exception - */ - public EarServiceException(String message, Throwable throwable) { - super(message, throwable); - } -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/EJBService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/EJBService.java deleted file mode 100644 index e0f83c7443..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/EJBService.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2; - -import java.net.URL; - -import javax.ejb.Timer; -import javax.naming.Context; - -import org.ow2.jonas.service.Service; -import org.ow2.jonas.service.ServiceException; - - -/** - * EJB Service interface. - */ -public interface EJBService extends Service { - - /** - * Create a JOnAS Container for all the beans that are described in a .xml file, - * or belong to .jar file. - * @param ctx JNDI context in which is found the container configuration. - * @return The ObjectName of the MBean associated to the container (i.e. to the deployed module) - * @throws Exception if Container creation was unable to complete. - */ - String createContainer(Context ctx) throws Exception; - - /** - * Create a JOnAS Container for all the beans that are described in a .xml file, - * or belong to .jar file. - * @param fileName EjbJar filename. - * @throws Exception when the EjbJar cannot be deployed. - * @return The ObjectName of the MBean associated to the container (i.e. to the deployed module) - */ - String createContainer(String fileName) throws Exception; - - /** - * Test if the specified file is already deployed (if a container - * is created for this jar). - * @param fileName the name of the jar file - * @return true if the jar was deployed, false otherwise - * TODO redundant with EJBServiceMBean.isJarLoaded() - * Used in J2EEServer, J2EESERMBean (mbeans-descriptors.xml) - */ - Boolean isJarDeployed(String fileName); - - /** - * Test if the specified jar identified with its work name is already deployed - * (if a container is created for this jar). - * @param workFileName the internal name of the jar file (working copy) - * @return true if the jar was deployed, false otherwise - */ - boolean isJarDeployedByWorkName(String workFileName); - - /** - * Removes a JOnAS Container. - * @param fileName JOnAS container to remove. - * @throws Exception when the EjbJar cannot be undeployed. - */ - void removeContainer(String fileName) throws Exception; - - /** - * Synchronized all entity bean containers. - * @param passivate passivate instances after synchronization. - */ - void syncAllEntities(boolean passivate); - - /** - * Deploy the given ejb-jars of an ear file with the specified parent - * classloader (ear classloader). (This method is only used for - * the ear applications, not for the ejb-jar applications). - * @param ctx the context containing the configuration - * to deploy the ejbjars.
- * This context contains the following parameters :
- * - earRootUrl the root of the ear application.
- * - earClassLoader the ear classLoader of the ear application.
- * - ejbClassLoader the ejb classLoader for the ejbjars.
- * - jarURLs the list of the urls of the ejb-jars to deploy.
- * - roleNames the role names of the security-role.
- * @throws ServiceException if an error occurs during the deployment. - */ - void deployJars(Context ctx)throws ServiceException; - - /** - * Undeploy the given ejb-jars of an ear file with the specified parent - * classloader (ear classloader). (This method is only used for - * the ear applications, not for the ejb-jar applications). - * @param urls the list of the urls of the ejb-jars to deploy. - */ - void unDeployJars(URL[] urls); - - /** - * Make a cleanup of the cache of deployment descriptor. This method must - * be invoked after the ear deployment by the EAR service. - * the deployment of an ear by . - * @param earClassLoader the ClassLoader of the ear application to - * remove from the cache. - */ - void removeCache(ClassLoader earClassLoader); - - /** - * Check that GenIC have been applied on the given ejb-jar file - * If it was not done, it run GenIC against the file. - * @param fileName given EJB-JAR file. - * @param urls Array of URLs used as CLASSPATH during EJB compilation - */ - void checkGenIC(String fileName, URL[] urls); - - /** - * Returns the ContextID associated to this container filename. - * Used by the {@link EARService} for security purpose. - * @param containerFileName container filename - * @return Returns the ContextID associated to this container filename. - */ - String getContainerContextID(String containerFileName); - - /** - * Get a new {@link Timer}. - * @param info {@link JTimerHandleInfo} instance used for {@link Timer} - * creation. - * @return a newly created {@link Timer} - */ - Timer getTimer(JTimerHandleInfo info); - - /** - * Restart a {@link Timer} given some input infos. - * @param info {@link JTimerHandleInfo} instance used for {@link Timer} - * restart. - * @return a newly restarted {@link Timer}. - */ - Timer restartTimer(JTimerHandleInfo info); -} - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/JTimerHandleInfo.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/JTimerHandleInfo.java deleted file mode 100644 index acaee9d9c2..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/JTimerHandleInfo.java +++ /dev/null @@ -1,209 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2; - -import java.io.Serializable; - -/** - * Hold TimerHandle datas. Used to retrieve a given Timer. - * @author Guillaume Sauthier - */ -public class JTimerHandleInfo implements Serializable { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 3580043842820893364L; - - /** - * The EjbJar containing the wanted Timer. - */ - private String containerId = null; - - /** - * The Bean containing the Timer. - */ - private String beanId = null; - - /** - * Timer period. - */ - private long period; - - /** - * Timer start time. - */ - private long startTime; - - /** - * Timer duration. - */ - private long duration; - - /** - * Serializable info. - */ - private Serializable info; - - /** - * Encoded PK. If CMP2 is not used, no encoding is done. - */ - private Serializable pk; - - /** - * @return the beanId - */ - public String getBeanId() { - return beanId; - } - - /** - * @param beanId the beanId to set - */ - public void setBeanId(final String beanId) { - this.beanId = beanId; - } - - /** - * @return the containerId - */ - public String getContainerId() { - return containerId; - } - - /** - * @param containerId the containerId to set - */ - public void setContainerId(final String containerId) { - this.containerId = containerId; - } - - /** - * @return the duration - */ - public long getDuration() { - return duration; - } - - /** - * @param duration the duration to set - */ - public void setDuration(final long duration) { - this.duration = duration; - } - - /** - * @return the info - */ - public Serializable getInfo() { - return info; - } - - /** - * @param info the info to set - */ - public void setInfo(final Serializable info) { - this.info = info; - } - - /** - * @return the period - */ - public long getPeriod() { - return period; - } - - /** - * @param period the period to set - */ - public void setPeriod(final long period) { - this.period = period; - } - - /** - * @return the pk - */ - public Serializable getPk() { - return pk; - } - - /** - * @param pk the pk to set - */ - public void setPk(final Serializable pk) { - this.pk = pk; - } - - /** - * @return the startTime - */ - public long getStartTime() { - return startTime; - } - - /** - * @param startTime the startTime to set - */ - public void setStartTime(final long startTime) { - this.startTime = startTime; - } - - /** - * Test equality between 2 {@link JTimerHandleInfo} instances. - * {@inheritDoc} - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (!(obj instanceof JTimerHandleInfo)) { - return false; - } - JTimerHandleInfo other = (JTimerHandleInfo) obj; - - if (!other.beanId.equals(beanId) - || !other.containerId.equals(containerId) - || other.duration != duration - || !other.info.equals(info) - || other.period != period - || !other.pk.equals(pk) - || other.startTime != startTime) { - return false; - } - - return true; - } - - /** - * {@inheritDoc} - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - long compound = duration + period + startTime; - return (beanId + containerId + info + pk + compound).hashCode(); - } - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/TimerHandleDelegate.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/TimerHandleDelegate.java deleted file mode 100644 index 016f0f2014..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb2/TimerHandleDelegate.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2; - -import javax.ejb.Timer; - - -/** - * Interface implemented by the Delegate used to retrieve Timers from TimerHandles. - * @author durieuxp - */ -public interface TimerHandleDelegate { - - /** - * Retrieve A {@link Timer} from its {@link JTimerHandleInfo}. - * @param info TimerHandle infos - * @return the Timer - */ - Timer getTimer(JTimerHandleInfo info); - - /** - * Restart A {@link Timer} retrieved by its {@link JTimerHandleInfo}. - * @param info TimerHandle infos - * @return the Timer restarted - */ - Timer restartTimer(JTimerHandleInfo info); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb3/IEasyBeansService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb3/IEasyBeansService.java deleted file mode 100644 index a9c2f25872..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ejb3/IEasyBeansService.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - -import java.net.URL; -import java.util.Map; - -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.easybeans.api.naming.EZBNamingStrategy; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.easybeans.resolver.api.EZBApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBJNDIResolver; -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.easybeans.persistence.api.PersistenceXmlFileAnalyzerException; -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJB3Deployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.archive.api.IArchive; - -/** - * EZB Service interface. - * @author Guillaume Sauthier - */ -public interface IEasyBeansService extends Service { - - /** - * TODO Remove it when EarDeployer will use EasyBeans Deployer. - * @return the Embedded instance used by this service. - */ - EZBServer getEasyBeansServer(); - - /** - * Adds the given container. - * @param ejbContainer the given container - */ - void addContainer(final EZBContainer ejbContainer); - - /** - * Remove the given container. - * @param ejbContainer the given container - */ - void removeContainer(final EZBContainer ejbContainer); - - /** - * Test if the specified unpack name is already deployed or not. This method - * is defined in the {@link IEasyBeansService} interface. - * @param unpackName the name of the EJB3 file. - * @return true if the EJB3 is deployed, else false. - */ - boolean isEJB3DeployedByWorkName(final String unpackName); - - /** - * Register Embedded as an OSGi service. - */ - void registerEmbeddedService(); - - - /** - * Allow to build a classloader that provide JPA classtransformers and bytecode modifications. - * @param urls the array of URLs to use - * @param parentClassLoader the parent classloader - * @return a classloader. - */ - ClassLoader buildByteCodeEnhancementClassLoader(final URL[] urls, - final ClassLoader parentClassLoader); - - /** - * @param persistenceUnitManager the Persistence Unit Manager (if any) - * @param jndiResolver the JNDI resolver (if any) - * @return a new Injection holder. - */ - EZBInjectionHolder buildInjectionHolder(final EZBPersistenceUnitManager persistenceUnitManager, - final EZBJNDIResolver jndiResolver); - - /** - * @return a new JNDI application resolver. - */ - EZBApplicationJNDIResolver buildApplicationJNDIResolver(); - - /** - * Gets the persistence unit manager for the given archive and classloader. - * @param archive the archive - * @param appClassLoader the classloader used as deployable - * @return the given persistence unit manager - */ - EZBPersistenceUnitManager getPersistenceUnitManager(final IArchive archive, - final ClassLoader appClassLoader) throws PersistenceXmlFileAnalyzerException; - - /** - * Gets the persistence unit manager for the given EAR and classloader. - * @param earDeployable the ear deployable - * @param appClassLoader the classloader used as deployable - * @return the given persistence unit manager - */ - EZBPersistenceUnitManager getPersistenceUnitManager(final EARDeployable earDeployable, - final ClassLoader appClassLoader) throws PersistenceXmlFileAnalyzerException; - - /** - * Build a new Strategy for the given prefix and the old strategy. - * @param prefix the given prefix - * @param oldNamingStrategy the strategy - * @return the new strategy - */ - EZBNamingStrategy getNamingStrategy(final String prefix, - final EZBNamingStrategy oldNamingStrategy); - - - /** - * Return a container if there are EJBs inside the webApp. - * @param warDeployable - * @param properties - * @return EJB3 container if found - */ - EZBContainer getEJBContainerFromWar(WARDeployable warDeployable, Map properties); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ha/HaService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ha/HaService.java deleted file mode 100644 index 8b83af86ce..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ha/HaService.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * Copyright (C) 2006 Distributed Systems Lab. - * Universidad Politecnica de Madrid (Spain) - * Contact: http://lsd.ls.fi.upm.es/lsd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ha; - -import javax.ejb.EntityContext; - -import org.ow2.jonas.service.Service; - - -/** - * JOnAS HA Service interface. - * @author Francisco Perez-Sorrosal (fpsorrosal@no-spam@fi.upm.es) - * @author Alberto Paz-Jimenez (apaz@no-spam@fi.upm.es) - * @author benoit pelletier - */ -public interface HaService extends Service { - - - void replicate(); - - /** - * Send commit/abort message - * @param reqId the request id - * @param committed true if the transaction has committed - */ - void replicateCommit(boolean committed); - - void addEntityBean(EntityContext jec); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsAdministration.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsAdministration.java deleted file mode 100644 index a1e680f8bc..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsAdministration.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jms; - -import javax.jms.Queue; -import javax.jms.Topic; -import javax.jms.XAConnectionFactory; -import javax.jms.XAQueueConnectionFactory; -import javax.jms.XATopicConnectionFactory; - - -/** - * JMS Administration interface. - * must be implemented for each jms provider - * JOnAS uses this interface to access the JMS provider. - * @author Philippe Coq - * Contributor(s): - * Jeff Mesnil: for JORAM 3.0 integration - * Frederic Maistre: for JORAM 3.4 (JMS 1.1) integration - * 03/05/25 : Adriana Danes : add JMS resource monitoring - */ -public interface JmsAdministration { - - /** - * Jms Administrator is created with newInstance(). - * initialization is done later with this method. - * The MOM will be started if collocated. - * This method should create an XAConnectionFactory, - * a XATopicConnectionFactory and a XAQueueConnectionFactory - * @param boolean true for if the MOM in run in the current JVM - * @param String url connexion that must be used. - */ - public void start(boolean collocated, String url) throws Exception; - - /** - * Stop the Jms Administrator - */ - public void stop(); - - /** - * Get the XAConnectionFactory - */ - public XAConnectionFactory getXAConnectionFactory(); - - /** - * Get the XATopicConnectionFactory - */ - public XATopicConnectionFactory getXATopicConnectionFactory(); - - /** - * Get the XAQueueConnectionFactory - */ - public XAQueueConnectionFactory getXAQueueConnectionFactory(); - - /** - * Create a Topic - */ - public Topic createTopic(String name) throws Exception; - - /** - * Create a Queue - */ - public Queue createQueue(String name) throws Exception; - - /** - * Delete a destination. - */ - public void deleteDestination(String name) throws Exception; - - /** - * Get number of pending messages on a queue - */ - public int getPendingMessages(javax.jms.Queue queue) throws Exception; - - /** - * Get number of pending requests on a queue - */ - public int getPendingRequests(javax.jms.Queue queue) throws Exception; - - /** - * Get number of subscriptions on a topic - */ - public int getSubscriptions(javax.jms.Topic topic) throws Exception; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsManager.java deleted file mode 100644 index e5cbd1dc61..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsManager.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hoper that irt will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jms; - -import java.util.Enumeration; - -import javax.jms.ConnectionFactory; -import javax.jms.Queue; -import javax.jms.QueueConnectionFactory; -import javax.jms.Topic; -import javax.jms.TopicConnectionFactory; -import javax.jms.XAConnectionFactory; -import javax.jms.XAQueueConnectionFactory; -import javax.jms.XATopicConnectionFactory; - -import org.ow2.jonas.tm.TransactionManager; - - -/** - * JMS Manager interface. - * Implemented by the jms module (jonas/lib/jms/JmsManagerImpl) - * This interface allows other jonas module to be independant - * of jonas jms implementation. - * @author Philippe Coq - * Contributor(s): - * Jeff Mesnil: for JORAM 3.0 integration - * Frederic Maistre: for JORAM 3.4 (JMS 1.1) integration - */ -public interface JmsManager { - - /** - * Initialisation of JmsManager - * - * @param class cl class implementing administration process - * @param boolean true for launching the MOM in the same JVM - * @param String connexion url to the MOM (in case of remote mode) - * @param TransactionManager tm - * @exception Exception must be thrown if the MOM is unreachable - */ - public void init(Class cl, boolean collocated, String url, TransactionManager tm) throws Exception; - - /** - * Terminate the administering process - */ - public void stop() throws Exception; - - /** - * Create a Queue and bind it in the registry - */ - public Queue createQueue(String name) throws Exception; - - /** - * Get Queue (creates it if not exist) - */ - public Queue getQueue(String name) throws Exception; - - /** - * Get Queue Names - */ - public Enumeration getQueuesNames(); - - /** - * Create a Topic and bind it in the registry - */ - public Topic createTopic(String name) throws Exception; - - /** - * Get Topic (creates it if not exist) - */ - public Topic getTopic(String name) throws Exception; - - /** - * Get Topic Names - */ - public Enumeration getTopicsNames(); - - /** - * Get the unique ConnectionFactory - */ - public ConnectionFactory getConnectionFactory(); - - /** - * Get the unique XAConnectionFactory - */ - public XAConnectionFactory getXAConnectionFactory(); - - /** - * Get the unique TopicConnectionFactory - */ - public TopicConnectionFactory getTopicConnectionFactory(); - - /** - * Get the unique XATopicConnectionFactory - */ - public XATopicConnectionFactory getXATopicConnectionFactory(); - - /** - * Get the unique QueueConnectionFactory - */ - public QueueConnectionFactory getQueueConnectionFactory(); - - /** - * Get the unique XAQueueConnectionFactory - */ - public XAQueueConnectionFactory getXAQueueConnectionFactory(); -} - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsService.java deleted file mode 100644 index a6521e8860..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jms/JmsService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jms; - - -import org.ow2.jonas.service.Service; - -/** - * Jms Service interface. - */ -public interface JmsService extends Service { - public JmsManager getJmsManager(); -} - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/Interceptor.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/Interceptor.java deleted file mode 100644 index b62040610c..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/Interceptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx; - -import javax.interceptor.InvocationContext; - -/** - * Define an interceptor - * @author Mohammed Boukada - */ -public interface Interceptor { - - /** - * - * @param invocationContext use to apply the interceptors sequence - * @return invocation return - */ - Object invoke (InvocationContext invocationContext) throws Exception; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JManagementIdentifier.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JManagementIdentifier.java deleted file mode 100644 index d95f2515e6..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JManagementIdentifier.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx; - -/** - * JMX Identifier, used to create a JMX ObjectName from an Object. - * @author Guillaume Sauthier - * @author Florent BENOIT - * @param Managed resource Type - */ -public interface JManagementIdentifier { - - /** - * @return Returns the JMX Domain name of the MBean. - */ - String getDomain(); - - /** - * Sets the domain for this identifier. - * @param domainName the JMX Domain name of the MBean. - */ - void setDomain(String domainName); - - /** - * May differ if JSR77 MBean or "normal" MBean.
- * A JSR77 MBean has j2eeType=XX, but a "normal" MBean has type=YY. - * Will probably be implemented by an abstract class. - * @return Returns the type=type_name couple. - */ - String getTypeProperty(); - - /** - * @return Returns the 'type' property name : j2eeType - * for JSR 77 and type for others. - */ - String getTypeName(); - - /** - * This method has to be implemented by each {@link JManagementIdentifier}. - * @return Returns the type value. (example : J2EEServer) - */ - String getTypeValue(); - - /** - * @param instance Managed instance from which the name will be extracted. - * @return Returns the ObjectName 'name' property value. - */ - String getNamePropertyValue(final ManagedType instance); - - /** - * @param instance Managed instance from which the additionnal properties - * will be extracted. - * @return Returns a comma separated(,) list of properties (name=value) - */ - String getAdditionnalProperties(final ManagedType instance); - - /** - * @return the JMX Server name of the MBean. - */ - String getServerName(); - - /** - * Sets the Server name for this identifier. - * @param serverName the JMX Server name of this MBean. - */ - void setServerName(String serverName); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JmxService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JmxService.java deleted file mode 100644 index 435f91856b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jmx/JmxService.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx; - -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXServiceURL; - -import org.ow2.jonas.service.Service; -import org.ow2.jonas.service.ServiceException; - - -/** - * JMX Service interface. - * - */ -public interface JmxService extends Service { - - /** - * @return The reference of the MBean server - */ - MBeanServer getJmxServer(); - - /** - * @return The Connection interface to the MBean server - */ - MBeanServerConnection getJmxServerConnection(); - - /** - * Register an MBean on the JOnAS MBeanServer. - * @param mbean MBean to be registered - * @param objectName Stringified ObjectName of the MBean to be registered - */ - void registerMBean(Object mbean, String objectName); - - /** - * Register an MBean on the JOnAS MBeanServer. - * @param mbean MBean to be registered - * @param objectName ObjectName of the MBean to be registered - */ - void registerMBean(Object mbean, ObjectName objectName); - - /** - * Unregister an MBean from the JOnAS MBeanServer. - * @param objectName the MBean's ObjectName - */ - void unregisterMBean(ObjectName objectName); - - /** - * Register a Model MBean on the JOnAS MBeanServer. - * @param mbean MBean to be registered - * @param objectName Stringified ObjectName of the MBean to be registered - * @exception Exception throwed when registering a modeler MBean - */ - void registerModelMBean(Object mbean, String objectName) throws Exception; - - /** - * Register a Model MBean on the JOnAS MBeanServer. - * @param mbean MBean to be registered - * @param objectName ObjectName of the MBean to be registered - * @exception Exception throwed when registering a modeler MBean - */ - void registerModelMBean(Object mbean, ObjectName objectName) throws Exception; - - /** - * Unegister a Model MBean from the JOnAS MBeanServer. - * @param objectName the Mbean ObjectName - */ - void unregisterModelMBean(ObjectName objectName); - - /** - * Load additional mbean descriptors. - * @param packageName name of the package containing the descriptors file - * @param cl class loader containing the resource - */ - void loadDescriptors(String packageName, ClassLoader cl); - - /** - * @return Returns a {@link JMXServiceURL} array containing the adresses - * associated to the JMX connector servers - */ - JMXServiceURL[] getConnectorServerURLs(); - - /** - * @return The current server name - */ - String getJonasServerName(); - - /** - * @return The current management domain name - */ - String getDomainName(); - - - /** - * Register the instance as a ModelMBean using the delegate. - * @param instance Type - * @param instance Object instance to be managed - * @return the MBean's OBJECT_NAME - * @throws Exception if registration fails. - */ - String registerMBean(final T instance) throws Exception; - - /** - * Unregister the given Object. - * @param instance Type - * @param instance Instance to be deregistered. - * @throws Exception if unregistration fails. - */ - void unregisterMBean(final T instance) throws Exception; - - /** - * @param instance Type - * @param instance Object instance to be managed - * @return Returns the instance ObjectName. - * @throws ServiceException if registration fails. - */ - String getObjectName(final T instance) throws ServiceException; - - /** - * Add an interceptor to invocationHandler - * @param interceptor - */ - public void addInterceptor (Interceptor interceptor); - - /** - * Remove an interceptor from invocation handler - * @param interceptor - */ - public void removeInterceptor (Interceptor interceptor); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceChecker.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceChecker.java deleted file mode 100644 index 713c1202e0..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceChecker.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.checker.api; - -/** - * Checker of resources - * @author Florent Benoit - */ -public interface IResourceChecker { - - /** - * Callback occuring in order to check if there are problems. - * @param resourceCheckerInfo some data for the resource checker - */ - void detect(IResourceCheckerInfo resourceCheckerInfo); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerInfo.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerInfo.java deleted file mode 100644 index 257cf38ff2..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerInfo.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.checker.api; - -/** - * Info for the resource checker. It can give some hints to the resource checker. - * @author Florent Benoit - */ -public interface IResourceCheckerInfo { - - /** - * @return checkpoint of the caller. - */ - ResourceCheckpoints getCheckPoint(); - - /** - * @return data for identifying the current caller (EJB Name, Servlet Name, etc) - */ - String getCallerInfo(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerManager.java deleted file mode 100644 index b3908472c8..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/IResourceCheckerManager.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.checker.api; - -import java.util.List; - -/** - * Manage the resources that can be checked during a call on the same thread. - * @author Florent Benoit - */ -public interface IResourceCheckerManager extends IResourceChecker { - - /** - * Enlist a new resource. - * @param resource the given resource that can be checked. - */ - void enlistResource(final IResourceChecker resource); - - /** - * Delist a resource. - * @param resource the given resource. - */ - void delistResource(final IResourceChecker resource); - - /** - * Delist all resources that are enlisted. - */ - void delistAll(); - - /** - * Push a new list on the stack. - */ - void push(); - - /** - * Pop the list on the stacK. - */ - void pop(); - - /** - * @return list of resources enlisted on the current thread. - */ - List getResources(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/ResourceCheckpoints.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/ResourceCheckpoints.java deleted file mode 100644 index 6c22144901..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jndi/checker/api/ResourceCheckpoints.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.checker.api; - -/** - * Defines the checkpoint where the resource is checked. - * @author Florent Benoit - */ -public enum ResourceCheckpoints { - - /** - * Unknown location. - */ - UNKNOWN, - - /** - * EJB Post Invoke. - */ - EJB_POST_INVOKE, - - /** - * EJB before passivation. - */ - EJB_PRE_PASSIVATE, - - /** - * EJB before removal. - */ - EJB_PRE_DESTROY, - - /** - * After Servlet call. - */ - HTTP_AFTER_CALL, - - /** - * After commit. - */ - TRANSACTION_COMMITTED, - - /** - * After rollback. - */ - TRANSACTION_ROLLEDBACK - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jsf/JSFService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jsf/JSFService.java deleted file mode 100644 index 5f62ee4339..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/jsf/JSFService.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jsf; - -import org.ow2.jonas.service.Service; - - -/** - * JSF Service interface. - * This interface may be required for services wanted to be started after JSF. - * @author Florent Benoit - */ -public interface JSFService extends Service { - - - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailService.java deleted file mode 100644 index bff3309ba1..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailService.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:MailService.java 10050 2007-03-07 10:45:32Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail; - -//import java.util -import java.util.Properties; - -import org.ow2.jonas.mail.factory.JavaMail; -import org.ow2.jonas.service.Service; - -//import jonas - -/** - * This interface provides a description of the JavaMail service. - * @author Ludovic Bert - * @author Florent Benoit - */ -public interface MailService extends Service { - - /** - * Session marker. - */ - String SESSION_PROPERTY_TYPE = "javax.mail.Session"; - - /** - * MimePart DataSource marker. - */ - String MIMEPART_PROPERTY_TYPE = "javax.mail.internet.MimePartDataSource"; - - /** - * JOnAS-specific properties (name). - */ - String PROPERTY_NAME = "mail.factory.name"; - - /** - * JOnAS-specific properties (type). - */ - String PROPERTY_TYPE = "mail.factory.type"; - - /** - * Create a mail factory with the specified properties and register it into - * the registry. The created object is an instance of one of the 2 classes : - * JavaMailSession or JavaMailMimePartDS. - * @param name the mail factory name - * @param props the properties used to configure the mail factory. - * @throws MailServiceException if the creation or the registration of the - * factory failed. - */ - void createMailFactory(String name, Properties props) throws MailServiceException; - - /** - * This method is used when a Mail Factory configuration is modified via - * jonasAdmin. In this case, the updated JavaMail object (JavaMailSession or - * JavaMailMimePartDS object) must be rebound in JNDI - * @param factory the factory - * @throws MailServiceException if the recreation of the factory failed. - */ - void recreateJavaMailFactory(JavaMail factory) throws MailServiceException; - - /** - * This method is used when a particular Mail Factory configuration - * operation is done via jonasAdmin : when the JNDI name of this resource is - * modified. In this case, the initial JavaMail object (JavaMailSession or - * JavaMailMimePartDS object) must be unbound and the updated JavaMail - * object must be reloaded. Also, the Mail Service private data structures - * must be updated. - * @param oldName old name of the factory - * @param factory the new factory - * @throws MailServiceException if the rename of the the factory failed. - */ - void renameJavaMailFactory(String oldName, JavaMail factory) throws MailServiceException; - - /** - * Unregister the factory with the given name. - * @param factoryName the name of the factory to unbind. - * @throws MailServiceException if the unregistration of the factory - * failed. - */ - void unbindMailFactory(final String factoryName) throws MailServiceException; - - /** - * Unregister all the binding factories on the server. - * @throws MailServiceException if the unregistration of the factories - * failed. - */ - void unbindMailFactories() throws MailServiceException; - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailServiceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailServiceException.java deleted file mode 100644 index cfe829a117..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/MailServiceException.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail; - - -//import jonas -import org.ow2.jonas.service.ServiceException; - -/** - * The class MailServiceException that indicates conditions that a - * reasonable application might want to catch. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class MailServiceException extends ServiceException { - - /** - * Constructs a new MailServiceException with the specified - * message. - * @param message the detail message. - */ - public MailServiceException(String message) { - super(message, null); - } - - /** - * Constructs a new MailServiceException with the specified - * message. - * @param message the detail message. - * @param throwable the exception - */ - public MailServiceException(String message, Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/factory/JavaMail.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/factory/JavaMail.java deleted file mode 100644 index 10eea8a354..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/mail/factory/JavaMail.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.factory; - -import java.util.Properties; - -import javax.naming.Referenceable; - -/** - * Represents a JavaMail resource. - * @author Guillaume Sauthier - */ -public interface JavaMail extends Referenceable { - - /** - * Return the jndi name of this object. - * @return the jndi name - */ - String getName(); - - /** - * Set the jndi name of this object. - * @param name the jndi name - */ - void setName(String name); - - /** - * Return the name of this mail factory. - * @return name of this mail factory. - */ - String getFactoryName(); - - /** - * Return the type of the factory. - * @return the type of the mail factory - */ - String getType(); - - /** - * @return Returns the mailSessionProperties. - */ - Properties getMailSessionProperties(); - - /** - * @param mailSessionProperties The mailSessionProperties to set. - */ - void setMailSessionProperties(Properties mailSessionProperties); - - /** - * Retrieves the session properties of this object. - * @return the session properties of this object. - */ - Properties getSessionProperties(); - - /** - * Set the session properties. - * @param props the session properties. - */ - void setSessionProperties(Properties props); - - /** - * Retrieves the authentication properties of this object. - * @return the authentication properties of this object. - */ - Properties getAuthenticationProperties(); - - /** - * Set the authentication properties. - * @param props the authentication properties. - */ - void setAuthenticationProperties(Properties props); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/DeployableState.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/DeployableState.java deleted file mode 100644 index f343c6a529..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/DeployableState.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.management; - -/** - * Represents the state of a deployable - */ -public enum DeployableState { - DEPLOYED, NOT_DEPLOYED -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/J2EEServerService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/J2EEServerService.java deleted file mode 100644 index 343108401f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/J2EEServerService.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.management; - -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Management interface of the J2EEServer states. - * @author Francois Fornaciari - */ -public interface J2EEServerService { - - /** - * OSGi event error key - */ - public static final String EVENT_ERROR_KEY = "error"; - - /** - * OSGi event deployable name key - */ - public static final String EVENT_DEPLOYABLE_NAME_KEY = "name"; - - /** - * OSGi event deployable path key - */ - public static final String EVENT_DEPLOYABLE_PATH_KEY = "path"; - - /** - * OSGi event deployable state key - */ - public static final String EVENT_DEPLOYABLE_STATE_KEY = "state"; - - /** - * OSGi event deployable source key - */ - public static final String EVENT_DEPLOYABLE_SOURCE_KEY = "source"; - - /** - * OSGi event deployable current time key - */ - public static final String EVENT_DEPLOYABLE_CURRENT_TIME = "currentTime"; - - /** - * Is the server STARTING. - */ - boolean isStarting(); - - /** - * Is the server RUNNING. - */ - boolean isRunning(); - - /** - * Is the server FAILED. - */ - boolean isFailed(); - - /** - * Is the server STOPPING. - */ - boolean isStopping(); - - /** - * Is the server STOPPED. - */ - boolean isStopped(); - - /** - * Set the server state to STARTING and perform a notification. - */ - void setStarting(); - - /** - * Set the server state to RUNNING and perform a notification. - */ - void setRunning(); - - /** - * Set the server state to FAILED and perform a notification. - */ - void setFailed(); - - /** - * Set the server state to STOPPING and perform a notification. - */ - void setStopping(); - - /** - * Set the server state to STOPPED and perform a notification. - */ - void setStopped(); - - /** - * Get the directory in which J2EEServer uploads files - * @return directory in which J2EEServer uploads files - */ - String getUploadDirectory(); - - /** - * Start a service. - * @param service the service name. - * @throws Exception If the startup of the service fails - */ - void startService(final String service) throws Exception; - /** - * Stop a service. - * @param service the service name. - * @throws Exception If the stop of the service fails - */ - void stopService(final String service) throws Exception; - - /** - * @return the {@link Map} of a pair of . - */ - Map getDeployables(); - - /** - * Deploy the given file. - * @param filename - */ - void deploy(String filename); - - /** - * Undeploy the given file. - * @param filename - */ - void undeploy(String filename); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/ServiceManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/ServiceManager.java deleted file mode 100644 index 14f8b5089a..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/management/ServiceManager.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.management; - -import java.util.List; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Interface for managing the JOnAS services. - * @author Francois Fornaciari - */ -public interface ServiceManager { - - /** - * Start a given JOnAS service. - * @param serviceName the service name - * @param deployOSGiResources true if OSGi resources of the service need to be deployed - * @throws Exception If the startup of the service fails - */ - void startService(String serviceName, boolean deployOSGiResources) throws Exception; - - /** - * Start all required services for a given deployable. - * @param deployable The deployable to analyse - */ - void startRequiredServices(final IDeployable deployable); - - /** - * Stop a given JOnAS service. - * @param serviceName the service name - * @throws Exception If the stop of the service fails - */ - void stopService(String serviceName) throws Exception; - - /** - * Start optional JOnAS services defined in the server configuration. - * Some JOnAS services may requires other services which will also be started. - */ - void startServices(); - - /** - * Stop all optional started JOnAS services. - */ - void stopServices(); - - /** - * Return the list of all JOnAS services. - * @return The list of all JOnAS services - */ - List getAllServices(); - - /** - * Return the list of optional JOnAS services. - * @return The list of optional JOnAS services - */ - List getOptionalServices(); - - /** - * Return the description of a given JOnAS service. - * @param serviceName the service name - * @return The description of a given JOnAS service - */ - String getServiceDescription(final String serviceName); - - /** - * Return the state of a given JOnAS service. - * @param serviceName the service name - * @return The state of a given JOnAS service - */ - String getServiceState(final String serviceName); - - /** - * Disable the service states check. Called when the server reaches the RUNNING state. - */ - void disableServiceStatesCheck(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/multitenant/MultitenantService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/multitenant/MultitenantService.java deleted file mode 100644 index 7925e0cb70..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/multitenant/MultitenantService.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.multitenant; - -import javax.servlet.Filter; - -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * JOnAS Service interface for the multitenant service. - * @author Mohammed Boukada - */ -public interface MultitenantService extends Service { - /** - * Policy for a default context. All users that cannot access other contexts - * will access the default context. - */ - String DEFAULT = "Default"; - - /** - * Policy for a disabled context. Only old users on that context are allowed - * to access it, new users never get redirected to such a context. - */ - String DISABLED = "Disabled"; - - /** - * Policy for a reserved context. Only users that know the exact address of - * this context can access it. - */ - String RESERVED = "Reserved"; - - /** - * Policy for a private context. - */ - String PRIVATE = "Private"; - - /** - * Possible policies. - */ - String[] POLICIES = {DEFAULT, DISABLED, RESERVED, PRIVATE}; - - /** - * @return The default deployment policy. - */ - String getDefaultDeploymentPolicy(); - - /** - * Returns the default tenantId value - * @return the default tenantId value - */ - String getDefaultTenantID(); - - /** - * Creates an instance of a TenantId HTTP Filter - * @param tenantId the tenant identifier - * @return an instance of a TenantId HTTP Filter - */ - Filter getTenantIdFilter(String tenantId); - - /** - * Creates JNDI binding management beans for a given tenant identifier. - * @param deployable JAR, WAR or EAR object. - * @param tenantId tenant identifier of the application which will prefix JNDI names. - */ - void createJNDIBindingMBeans(final IDeployable deployable, final String tenantId); - - /** - * Removes JNDI binding management beans that are not in the JNDI directory - * anymore. - */ - void garbageCollectJNDIBindingMBeans(); - - /** - * Add eclipselink properties - * @param persistenceUnitManager persistence unit manager - * @param tenantId tenant identifier - */ - void updatePersistenceUnitManager(EZBPersistenceUnitManager persistenceUnitManager, String tenantId); - - /** - * Add tenantId as extension to the earDeployable - * @param deployable application deployable - * @param tenantId tenant identifier to add - */ - void addTenantIdDeployableInfo(IDeployable deployable, String tenantId); - - /** - * Gets tenantIdInfo stored in the deployable - * @param deployable application deployable - * @return tenantIdInfo - */ - String getTenantIdDeployableInfo(IDeployable deployable); - - /** - * Tell if an application is multitenant - * @param deployable application deployable - * @return is multitenant, or not. - */ - boolean isMultitenant (IDeployable deployable); - - /** - * Gets tenantContext from TenantCurrent - * @return tenantContext - */ - Object getTenantContext(); - - /** - * Gets tenant id from TenantContext - * @return tenant id - */ - String getTenantIdFromContext(); - - /** - * Set tenant id in the TenantContext - * @param tenantId to add in TenantContext - */ - void setTenantIdInContext(String tenantId); - - /** - * Set TenantContext in the Thread - * @param ctx - */ - void setTenantContext(Object ctx); - - /** - * Set application instance name in TenantContext - * @param instanceName - */ - void setInstanceNameInContext(String instanceName); - - /** - * Get application instance name from TenantContext - * @return - */ - String getInstanceNameFromContext(); - - /** - * Set TenantId and Instance Name in TenantContext - * @param tenantId - * @param instanceName - */ - void setTenantIdAndInstanceNameInContext(String tenantId, String instanceName); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactory.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactory.java deleted file mode 100644 index f4794c904d..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.naming; - -import javax.naming.Context; -import javax.naming.NamingException; - -/** - * A JComponentContextFactory is a factory for JOnAS Component's Context. - * @see org.ow2.jonas.lib.naming.ComponentContext - * @author Guillaume Sauthier - */ -public interface JComponentContextFactory { - - /** - * Create {@link Context} for component environments. - * The returned context is a Java EE Component Context. - * It contains pre-defined references (according to - * the registered {@link JComponentContextFactoryDelegate}): - *
    - *
  • java:comp/ORB
  • - *
  • java:comp/HandleDelegate
  • - *
  • java:comp/UserTransaction
  • - *
- * - * @param id the Context ID. - * @return Naming {@link Context} for component environment - * @throws NamingException If exception encountered when creating namespace. - * - */ - Context createComponentContext(String id) throws NamingException; - - /** - * Create {@link Context} for component environments. The returned context - * is a Java EE Component Context. - * @param id the Context ID. - * @param moduleContext the application context shared by all the components - * in a module - * @param appContext the application context shared by all the applications - * @return Naming {@link Context} for component environment - * @throws NamingException If exception encountered when creating namespace. - */ - Context createComponentContext(final String id, final Context moduleContext, final Context appContext) throws NamingException; - - /** - * Add the given {@link JComponentContextFactoryDelegate} to this NamingManager instance. - * @param extension Added delegate - * @throws NamingException if the delegates is not added. - */ - void addDelegate(JComponentContextFactoryDelegate extension) throws NamingException; - - /** - * Remove the given {@link JComponentContextFactoryDelegate} from this NamingManager instance. - * @param extension Removed delegate - * @throws NamingException if the delegates is not removed. - */ - void removeDelegate(JComponentContextFactoryDelegate extension) throws NamingException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactoryDelegate.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactoryDelegate.java deleted file mode 100644 index 0e6fa5dd64..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JComponentContextFactoryDelegate.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.naming; - -import javax.naming.Context; -import javax.naming.NamingException; - -/** - * The JComponentContextFactoryDelegate interface is used to - * separate the NamingManager implementation of other container - * implementation details concerning the component Context content. - *
- * Example: Add the java:comp/ORB CORBA ORB instance in the Context. - * @author Guillaume Sauthier - */ -public interface JComponentContextFactoryDelegate { - - /** - * Gives the possibility to modify the java:comp component Context. - * @param componentContext java:comp/ component context to be modified. - * @throws NamingException thrown if something goes wrong - * during the {@link javax.naming.Context} update. - */ - void modify(Context componentContext) throws NamingException; - - /** - * Undo the changes done by this delegate on the given java:comp context. - * @param componentContext java:comp/ component context to be modified. - * @throws NamingException thrown if something goes wrong - * during the {@link javax.naming.Context} update. - */ - void undo(Context componentContext) throws NamingException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JNamingManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JNamingManager.java deleted file mode 100644 index fbf2ef5c00..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/naming/JNamingManager.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.naming; - -import javax.naming.Context; -import javax.naming.NamingException; -import java.util.Hashtable; -import javax.naming.InitialContext; - - -/** - * Provide naming services for JOnAS containers. Containers use this - * interface for binding the environment entries, remote object references, - * resource factories and for managing the naming context of the current - * thread. - */ -public interface JNamingManager { - - /** - * Return the Context associated with the current thread. - * - * @return Context for current thread. - * @throws NamingException If context namespace does not exist. - */ - Context getComponentContext() throws NamingException; - - /** - * Associate this Context with the current thread. - * This method should be called in preinvoke/postinvoke - * and when we build the bean environment. - * - * @param ctx Context to associate with the current thread. - * @return Previous context setting for current thread. - */ - Context setComponentContext(Context ctx); - - /** - * Set back the context with the given value. - * Don't return the previous context, use setComponentContext() method for this. - * @param ctx the context to associate to the current thread. - */ - void resetComponentContext(Context ctx); - - /** - * Associate the specified ComponentContext with the given classloader. - * @param ctx the context to associate to the classloader. - * @param cl the classloader which is bind to the context. - */ - void setComponentContext(Context ctx, ClassLoader cl); - - /** - * Set the context used by client container (per JVM instead of per thread). - * @param ctx the context to set - */ - void setClientContainerComponentContext(Context ctx); - - /** - * Return the ComponentContext associated with the given classloader. - * @param cl the classloader which is bind to the context. - * @return the ComponentContext associated with the given classloader. - */ - Context getComponentContext(ClassLoader cl); - - /** - * Remove the ComponentContext associated with the given classloader. - * @param cl the classloader which is bind to the context. - */ - void unSetComponentContext(ClassLoader cl); - - /** - * Gets the initial context. - * @return the initial context - */ - InitialContext getInitialContext(); - - /** - * @return the environment associated to this initial context - */ - Hashtable getEnv(); - - /** - * Set the unique instance of the JComponentContextFactory. - * @param factory the component context factory - */ - void setJComponentContextFactory(JComponentContextFactory factory); - - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingManager.java deleted file mode 100644 index c1e2aada13..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingManager.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.packaging; - -import java.net.URL; -import java.util.List; - -/** - * JOnAS Service interface for the packaging service. - * @author Mohammed Boukada - */ -public interface IPackagingManager { - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - */ - List generateAddon(URL urlCloudApplication, String tenantId) throws Exception; - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param outputDir - */ - List generateAddon(URL urlCloudApplication, String tenantId, String outputDir) throws Exception; - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param urlEnvironmentTemplate URL of environment-template.xml - * @param urlMappingTopology URL of deployment.xml - */ - List generateAddon(URL urlCloudApplication, String tenantId, URL urlEnvironmentTemplate, URL urlMappingTopology) throws Exception; - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param urlEnvironmentTemplate URL of environment-template.xml - * @param urlMappingTopology URL of deployment.xml - * @param outputDir - */ - List generateAddon(URL urlCloudApplication, String tenantId, URL urlEnvironmentTemplate, URL urlMappingTopology, - String outputDir) throws Exception; - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - */ - List generateAddon(String xmlCloudApplication, String tenantId) throws Exception; - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param outputDir - */ - List generateAddon(String xmlCloudApplication, String tenantId, String outputDir) throws Exception; - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param xmlEnvironmentTemplate environment-template.xml content - * @param xmlMappingTopology deployment.xml content - */ - List generateAddon(String xmlCloudApplication, String tenantId, String xmlEnvironmentTemplate, - String xmlMappingTopology) throws Exception; - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param xmlEnvironmentTemplate environment-template.xml content - * @param xmlMappingTopology deployment.xml content - * @param outputDir - * @return List of zips locations - */ - List generateAddon(String xmlCloudApplication, String tenantId, String xmlEnvironmentTemplate, - String xmlMappingTopology, String outputDir) throws Exception; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingStructure.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingStructure.java deleted file mode 100644 index ec9350cbbe..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/packaging/IPackagingStructure.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.packaging; - -import java.io.File; - -/** - * Some constants for Packaging Service - * @author Mohammed Boukada - */ -public interface IPackagingStructure { - - /** - * ZIP file extension - */ - String ZIP_EXTENSION = ".zip"; - - /** - * XML file extension - */ - String XML_EXTENSION = ".xml"; - - /** - * Work directory - */ - String WORK_DIRECTORY = "work"; - - /** - * Addons directory - */ - String ADDONS_DIR = WORK_DIRECTORY + File.separator + "addons"; - - /** - * Deployable directory of an Addon - */ - String DEPLOY_DIRECTORY = "deploy"; - - /** - * Multitenant repository prefix - */ - String REPOSITORY_DIR = "repository"; - - /** - * Multitenant deployment plan prefix - */ - String DEPLOYMENT_PLAN_PREFIX = "plan"; - - /** - * Cloud application xml file name - */ - String CLOUD_APPLICATION = "cloud-application"; - - /** - * Environment template xml file name - */ - String ENVRIONMENT_TEMPLATE = "environment-template"; - - /** - * Deployment xml file name - */ - String DEPLOYMENT = "deployment"; - - /** - * JVM versions for jonas-addon.xml - */ - String JVM_VERSIONS = "[1.0,2.0]"; - - /** - * Licence for jonas-addon.xml - */ - String LICENCE = "LGPL"; - - /** - * Author for jonas-addon.xml - */ - String AUTHOR = "The JOnAS Team"; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServerProperties.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServerProperties.java deleted file mode 100644 index 15e08daa1f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServerProperties.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:ServerProperties.java 11801 2007-10-17 16:12:15Z fornacif $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.properties; - -import java.util.Properties; - -/** - * Interface used to retrieve the configuration of the Server. - * @author durieuxp - */ -public interface ServerProperties { - - /** - * Get value of a property. - * @param key property name - * @return value as a String - */ - String getValue(String key); - - /** - * Returns the value of the related property. With default values. - * @param key the search key - * @param defaultVal if the key is not found return this default value - * @return property value - */ - String getValue(String key, String defaultVal); - - /** - * Returns the value of the related property as boolean. - * @param key the wanted key - * @param def default run if not found - * @return property value, true or false. - */ - boolean getValueAsBoolean(String key, boolean def); - - /** - * Returns the value of the related property as String []. - * The method returns null if the property is not found. - * @param key the wanted key - * @return property value, null if not exist - */ - String[] getValueAsArray(String key); - - /** - * Retrieve the Domain Name. - * @return Domain Name - */ - String getDomainName(); - - /** - * Retrieve the Server Name. - * @return Server Name - */ - String getServerName(); - - /** - * Retrieve the configuration file name. - * @return configuration file name - */ - String getPropFileName(); - - /** - * Returns JOnAS environment as configured with files properties only. - * @return JOnAS properties - */ - Properties getConfigFileEnv(); - - /** - * @return the VERSIONS file content as a String. - */ - String getVersionsFile(); - - /** - * Needed to determine if the current server is a master. - * @return true of this server is a master, false otherwise - */ - boolean isMaster(); - - /** - * Needed to determine if the current server is in development mode. - * @return true of this server is in development mode, false otherwise - */ - boolean isDevelopment(); - - /** - * @return the work directory. - */ - String getWorkDirectory(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServiceProperties.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServiceProperties.java deleted file mode 100644 index 1625fcbaa4..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/properties/ServiceProperties.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:ServerProperties.java 11801 2007-10-17 16:12:15Z fornacif $ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.properties; - -import java.util.Properties; - -/** - * Interface used to retrieve the configuration of a JOnAS Service. - * @author Jeremy Cazaux - */ -public interface ServiceProperties { - /** - * Get value of a property. - * @param key property name - * @return value as a String - */ - String getValue(String key); - - /** - * @return the name of the service - */ - String getService(); - - /** - * @return properties of the service - */ - Properties getProperties(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/registry/RegistryService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/registry/RegistryService.java deleted file mode 100644 index eff1a3d241..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/registry/RegistryService.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.registry; - -import java.net.URI; -import java.util.List; - -import javax.naming.InitialContext; -import javax.naming.spi.InitialContextFactory; - -import org.ow2.jonas.service.Service; - - -/** - * Registry Service interface. - * @author Julien Lehembre (Libelis) - */ -public interface RegistryService extends Service { - - /** - * @return Returns a {@link List} of currently active protocols - * names (rmi, irmi, iiop, ...). - */ - List getActiveProtocolNames(); - - /** - * @param protocolName protocol name - * @return Returns the given protocol provider URL. - */ - URI getProviderURL(String protocolName); - - /** - * @param protocolName protocol name - * @return Returns the given protocol port where objects are - * exported. Returns 0 if unset. - */ - int getExportedObjectPort(String protocolName); - - /** - * @param protocolName protocol name - * @return Returns the {@link InitialContextFactory} classname - * of the given protocol. - */ - String getInitialContextFactoryName(String protocolName); - - /** - * @return Returns the default protocol name. - */ - String getDefaultProtocolName(); - - /** - * Set the current protocol to the given parameter. - * @param protocolName the new default protocol name. - */ - void setDefaultProtocol(String protocolName); - - /** - * Gets the initial context. - * @return the initial context - */ - InitialContext getRegistryContext(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/Rar.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/Rar.java deleted file mode 100644 index c02d7e899c..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/Rar.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Durieux - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource; - -import java.util.List; - -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ResourceAdapter; - -/** - * This interface is used for example in the ejb container library. - * It avoids a dependency on the Resource Service. - * @author durieuxp - */ -public interface Rar { - - /** - * Get the messagelistenerType - * @param jndiname jndi name of the Rar - * @return the String messagelistenerType - */ - public String getInterface(String jndiname); - - /** - * @return The associated ResourceAdapter - */ - public ResourceAdapter getResourceAdapter(); - - /** - * Configure ActivationSpec - * @param as ActivationSpec to be configured - * @param acp List of activation properties - * @param jacp List of JOnAS activation properties - * @param jndiname String destination desired - * @param ejbName ejb Name - */ - public void configureAS(ActivationSpec as, - List acp, - List jacp, - String jndiname, - String ejbName) throws Exception; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceService.java deleted file mode 100644 index 8d49155ad3..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceService.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): - * JOnAS 2.4 Sebastien Chassande-Barrioz (sebastien.chassande@inrialpes.fr) - * JOnAS 3.0 Eric Hardesty (Eric.Hardesty@bull.com) - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource; - -import java.net.URL; -import java.util.List; - -import javax.naming.Context; - -import org.ow2.jonas.service.Service; - - -/** - * JCA resource service implmentation - * @author Philippe Coq - * Contributor(s): - * JOnAS 2.4 Sebastien Chassande-Barrioz (sebastien.chassande@inrialpes.fr) - * JOnAS 3.0 Eric Hardesty (Eric.Hardesty@bull.com) - * JOnAS 4.0 Adriana Danes (JSR 77 + use of Jakarta Modeler Component : http://jakarta.apache.org/commons/modeler) - * Eric Hardesty (J2CA 1.5) - * - */ -public interface ResourceService extends Service { - - /** - * Create a Resource Adapter - * @param ctx Context that defines the: - * 1) name of the resource adapter. - * 2) information to determine if the rar is in an ear - * - * the configuration information for this resource adapter - * must be found in the xml files in the rar file - * being deployed - * @return The ObjectName of the MBean associated to the deployed J2EE Application - * @throws Exception if the create of the RAR object fails. - */ - String createResourceAdapter(Context ctx) throws Exception; - - /** - * Deploy an RAR, used by management applications via J2EEServer managed object - * @param fileName the fileName of the rar which must be be deployed. - * @return The ObjectName of the MBean associated to the deployed J2EE Application - * @throws Exception if the deployment of the RAR failed. - */ - String deployRar(String fileName) throws Exception; - - /** - * Deploy the given rars of an ear file with the specified parent - * classloader (ear classloader). (This method is only used for - * the ear applications). - * @param ctx Context that defines the: - * This context contains the following parameters :
- * - urls the list of the urls of the rars to deploy.
- * - earRootURL the URL of the ear application file.
- * - earClassLoader the ear classLoader of the j2ee app.
- * - altDDs the optional URI of deployment descriptor.
- * @throws ResourceServiceException if an error occurs during the deployment. - */ - void deployRars(Context ctx) throws ResourceServiceException; - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the rar file. - * @return true if the rar is deployed, else false. - */ - boolean isRarLoaded(String fileName); - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the rar file. - * @return true if the rar is deployed, else false. - */ - Boolean isRarDeployed(String fileName); - - /** - * Test if the specified unpack name is already deployed or not. This - * method is defined in the RarService interface. - * @param unpackName the name of the rar file. - * @return true if the rar is deployed, else false. - */ - boolean isRarDeployedByUnpackName(String unpackName); - - /** - * Undeploy an RAR, used by management applications via J2EEServer managed object - * @param fileName the fileName of the rar which must be be undeployed. - * @throws Exception if the undeployment of the RAR failed. - */ - void unDeployRar(String fileName) throws Exception; - - /** - * Undeploy the given rars of an ear file with the specified parent - * classloader (ear classloader). (This method is only used for - * the ear applications). - * @param urls the list of the urls of the rars to deploy. - * @param earUrl ear's URL - */ - void unDeployRars(URL[] urls, URL earUrl); - - /** - * Get a Rar by its jndi name - */ - org.ow2.jonas.resource.Rar getRar(String jndiName); - -} - - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceServiceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceServiceException.java deleted file mode 100644 index 33e8b093ba..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resource/ResourceServiceException.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource; - -import org.ow2.jonas.service.ServiceException; - -/** - * The class ResourceServiceException that indicates conditions that a - * reasonable application might want to catch. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class ResourceServiceException extends ServiceException { - - /** - * Constructs a new ResourceServiceException with the specified - * message. - * @param message the detail message. - */ - public ResourceServiceException(String message) { - this(message, null); - } - - /** - * Constructs a new ResourceServiceException with the specified - * message. - * @param message the detail message. - * @param throwable the exception - */ - public ResourceServiceException(String message, Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resourcemonitor/ResourceMonitorService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resourcemonitor/ResourceMonitorService.java deleted file mode 100644 index bb39b38704..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/resourcemonitor/ResourceMonitorService.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resourcemonitor; - -import org.ow2.jonas.service.Service; - -/** - * Interface for the resource monitoring service. - * @author MickaëlLEDUQUE - * - */ -public interface ResourceMonitorService extends Service { - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/SecurityService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/SecurityService.java deleted file mode 100644 index 297398e8d3..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/SecurityService.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security; - -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.service.Service; - - - -/** - * Defines the interface for the security service - */ -public interface SecurityService extends Service { - - /** - * Return a resource by giving its name - * @param name the wanted Resource - * @return a JResouce - */ - JResource getJResource(String name); - - - /** - * String representation of the JOnAS realm - * @return the xml representation of the JOnAS realm - */ - String toXML(); - - - /** - * Bind the given resource with the given name. - * @param name resource name - * @param resource resource - */ - void bindResource(String name, JResource resource); - - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResource.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResource.java deleted file mode 100644 index a6c921bb7c..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResource.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.realm.factory; - -import java.util.ArrayList; -import java.util.Hashtable; - -import javax.naming.NamingException; -import javax.naming.Reference; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.realm.principal.JUser; - - - -/** - * This interface represents JOnAS realm factory objects. - * @author Guillaume Sauthier - */ -public interface JResource { - - /** - * Set the name of this resource. - * @param name Name of the resource - */ - void setName(String name); - - /** - * Get the name of this resource. - * @return the name of this resource - */ - String getName(); - - /** - * Set the jmx service reference - * @param jmxService the jmx service reference - */ - void setJmxService(JmxService jmxService); - - /** - * Set the domain name - * @param domain the domain name - */ - void setDomainName(String domain); - - /** - * Set the security service reference - * @param sec security service reference - */ - void setSecurityService(SecurityService sec); - - /** - * Retrieves the Reference of the object. The Reference contains the factory - * used to create this object and the optional parameters used to configure - * the factory. - * @return the non-null Reference of the object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - Reference getReference() throws NamingException; - - /** - * Remove all the Mbeans used by this resource. - * @throws JResourceException if the MBeans can not be removed - */ - void removeMBeans() throws JResourceException; - - /** - * Check if a user is found and return it. - * @param name the wanted user name - * @return the user found or null - * @throws JResourceException if there is an error during the search - */ - JUser findUser(String name) throws JResourceException; - - /** - * Check if the given credential is the right credential for the given user. - * @param user user to check its credentials - * @param credentials the given credentials - * @return true if the credential is valid for this user - */ - boolean isValidUser(JUser user, String credentials); - - /** - * Get all the roles (from the roles and from the groups) of the given user. - * @param user the given user - * @return the array list of all the roles for a given user - * @throws JResourceException if it fails - */ - ArrayList getArrayListCombinedRoles(JUser user) throws JResourceException; - - /** - * Return users. - * @return Return users - */ - Hashtable getUsers(); - - /** - * @param users The users to set. - */ - void setUsers(Hashtable users); - - /** - * Clear the cache. - */ - void clearCache(); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResourceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResourceException.java deleted file mode 100644 index c2fae1d643..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/factory/JResourceException.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.realm.factory; - -/** - * The class JResourceException indicates conditions that a reasonable - * application might want to catch. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JResourceException extends Exception { - - /** - * Uid for serializable class. - */ - private static final long serialVersionUID = -4879978965028070035L; - - /** - * Constructs a new JResourceException with the specified message. - * @param message the detail message. - */ - public JResourceException(String message) { - super(message); - } - - /** - * Constructs a new JResourceException exception with the specified detail message and - * cause.

Note that the detail message associated with - * cause is not automatically incorporated in - * this runtime exception's detail message. - * @param message the detail message. - * @param cause the cause - */ - public JResourceException(String message, Throwable cause) { - super(message, cause); - } - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/lib/HashPassword.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/lib/HashPassword.java deleted file mode 100644 index b1f479e770..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/lib/HashPassword.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.realm.lib; - -import java.io.Serializable; - -/** - * This class implements a way for storing the hash of a password and the - * correspondig algorithm - * @author Florent Benoit - */ -public class HashPassword implements Serializable { - - /** - * Hash password - */ - private String password; - - /** - * Algorithm used - */ - private String algorithm; - - /** - * Constructor - * @param password the hash of the password - * @param algorithm algorithm of the encoded password - */ - public HashPassword(String password, String algorithm) { - this.password = password; - this.algorithm = algorithm; - } - - /** - * Return the hash of the password - * @return the hash of the password - */ - public String getPassword() { - return password; - } - - /** - * Return the algorithm used for this password - * @return the algorithm used for this password - */ - public String getAlgorithm() { - return algorithm; - } - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/principal/JUser.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/principal/JUser.java deleted file mode 100644 index 23b187e4be..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/security/realm/principal/JUser.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.realm.principal; - -import java.util.ArrayList; - -import org.ow2.jonas.security.realm.lib.HashPassword; - - -/** - * This interface represents a user in a security realm. - * @author Guillaume Sauthier - */ -public interface JUser { - - /** - * Set the name of this user - * @param name Name of the user - */ - void setName(String name); - - /** - * Get the name of this user - * @return the name of this user - */ - String getName(); - - /** - * Get the password of this user - * @return the password of this user - */ - String getPassword(); - - /** - * Set the password of this user - * @param password password of the user - */ - void setPassword(String password); - - /** - * Set the hashed password of this user - * @return hashPassword hashed password of this user - */ - HashPassword getHashPassword(); - - /** - * Set the groups of the user - * @param groups the comma separated list of the groups of the user - */ - void setGroups(String groups); - - /** - * Get the groups - * @return the comma separated list of groups - */ - String getGroups(); - - /** - * Get the groups - * @return the array of the groups - */ - String[] getArrayGroups(); - - /** - * Set the roles of the user - * @param roles the comma separated list of the roles of the user - */ - void setRoles(String roles); - - /** - * Add the specified group to this user - * @param group the group to add - */ - void addGroup(String group); - - /** - * Add a role to this user - * @param role the given role - */ - void addRole(String role); - - /** - * Remove a group from this user - * @param group the given group - */ - void removeGroup(String group); - - /** - * Remove a role from this user - * @param role the given role - */ - void removeRole(String role); - - /** - * Get the roles - * @return the array of the roles - */ - String getRoles(); - - /** - * Set the combined roles of this user - * @param combinedRoles combined of the user - */ - void setCombinedRoles(ArrayList combinedRoles); - - /** - * Get the combined roles of this user - * @return the combined of the user - */ - ArrayList getCombinedRoles(); - - /** - * Get the roles - * @return the array of the roles - */ - String[] getArrayRoles(); - - /** - * String representation of the user - * @return the xml representation of the user - */ - String toXML(); - -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ConfigService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ConfigService.java deleted file mode 100644 index 7a7e1a0d38..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ConfigService.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.service; - -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; - -/** - * This interface extends the Service interface. - * It defines commons method to register and unregister an IAddonConfig component - */ -public interface ConfigService extends Service { - - /** - * @param addonConfig Add The AddonConfig component to register - */ - void registerAddonConfig(final IAddonConfig addonConfig); - - /** - * @param addonConfig The AddonConifg component to unregisted - */ - void unregisterAddonConfig(final IAddonConfig addonConfig); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/JonasAlreadyStartedException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/JonasAlreadyStartedException.java deleted file mode 100644 index 67f442920f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/JonasAlreadyStartedException.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.service; - -/** - * This exception is used by services that received java.rmi.AlreadyBoundException - * @author: Ph Coq - */ -public class JonasAlreadyStartedException extends ServiceException { - - /** - * Default constructor. - */ - public JonasAlreadyStartedException() { - super("JonAS already started"); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/Service.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/Service.java deleted file mode 100644 index b48ed83b89..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/Service.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * 01/06/15 Regis Le Brettevillois - Libelis / JOnAS team - Evidian - * Creation. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.service; - -import javax.naming.Context; - -/** - * This interface defines a Service. - * Objects which implement this interface must have a public constructor - * with a string parameter which is the name of the service. - */ -public interface Service { - - /** - * Initialize the service. - * @param ctx configuration of the service - * @throws ServiceException when init fails. - * @deprecated Replaced in favor of IoC. - */ - @Deprecated - void init(Context ctx) throws ServiceException; - - /** - * Start the service. - * @throws ServiceException when start fails. - */ - void start() throws ServiceException; - - /** - * Stop the service. - * @throws ServiceException when stop fails. - */ - void stop() throws ServiceException; - - /** - * @return Returns true if the service is started, false otherwise - */ - boolean isStarted(); - - /** - * Set the service's name. - * @param name the service's name - */ - void setName(String name); - - /** - * @return Returns the service's name - */ - String getName(); -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ServiceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ServiceException.java deleted file mode 100644 index 7300d3bf99..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/service/ServiceException.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * 01/06/15 Regis Le Brettevillois - Libelis / JOnAS team - Evidian - * Creation. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.service; - -/** - * Exception thrown by JOnAS Services. - */ -public class ServiceException extends RuntimeException { - - /** - * Constructor specifying only the cause message. - * @param message Exception description - */ - public ServiceException(String message) { - this(message, null); - } - - /** - * Constructor with message description + cause - * @param message Exception description - * @param throwable cause of the Exception - */ - public ServiceException(String message, Throwable throwable) { - super(message, throwable); - } - - /** - * @return Returns the message description of the Exception - */ - public String getMessage() { - String msg = super.getMessage(); - if (getCause() != null) { - msg += ": " + getCause(); - } - return msg; - } - - /** - * @return Returns a String representation of the Exception - */ - public String toString() { - return getClass().getName() + " : " + getMessage(); - } - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientService.java deleted file mode 100644 index 130dcb704b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientService.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.smartclient; - -import org.ow2.jonas.service.Service; - -/** - * Created the interface for the smartclient service. - * @see org.ow2.jonas.smartclient.SmartclientServiceBase - * - * @author S. Ali Tokmen - */ -public interface SmartclientService extends SmartclientServiceBase, Service { - // This interface should be empty. -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientServiceBase.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientServiceBase.java deleted file mode 100644 index a75764358c..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/smartclient/SmartclientServiceBase.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.smartclient; - -/** - * JOnAS Service interface for the Smartclient service. This service lets - * remote clients download classes necessary for connecting to JOnAS services - * (JNDI context factories, EJB3 interceptors, ...) directly from the JOnAS - * server they're dealing with. - * - * This way, the heavy clients only need to include a lightweight JAR file for - * the Smartclient client and are always guaranteed to have the good versions - * of all components. - * - * Check the EasyBeans documentation on "SmartClient" for details. - * - * @author S. Ali Tokmen - */ -public interface SmartclientServiceBase { - - /** - * @return true if the EasyBeans Smartclient is active, false otherwise. - */ - boolean isActive(); - - /** - * @return The port the smart client is listening on. - */ - int getPort(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/Enlistable.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/Enlistable.java deleted file mode 100644 index 48cb89ddb4..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/Enlistable.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm; - -import javax.transaction.SystemException; -import javax.transaction.Transaction; - -public interface Enlistable { - - /** - * This method is used by the transaction manager to perform callbacks - * on the resource manager when a transaction begins. - * - * @param transaction the transaction that has begun - * @throws SystemException if an exception occurs - */ - void enlistConnection(Transaction transaction) throws SystemException; - - /** - * Delist Connection from the Transaction. - * May be called when Tx is suspended, or when going out of a Stateful bean. - * - * @param transaction the transaction that has begun - * @throws SystemException if an exception occurs - */ - void delistConnection(Transaction transaction) throws SystemException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionManager.java deleted file mode 100644 index 772d3aa1fb..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionManager.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm; - -import java.util.List; -import java.util.Properties; - -import javax.transaction.xa.XAException; -import javax.transaction.xa.XAResource; - - -/** - * JOnAS Transaction Manager interface. - * Add some methods that lakes in the standard JTA interfaces. - * - late connection enlistment - */ -public interface TransactionManager extends javax.transaction.TransactionManager { - - public void notifyConnectionOpen(Enlistable mce); - - public void notifyConnectionClose(Enlistable mce); - - public void notifyConnectionError(Enlistable mce); - - public void pushConnectionList(List cl); - - public List popConnectionList(); - - public boolean nonJotmTransactionContext(); - - /** - * Register a TransactionResourceManager to the TM - * @param rmname - * @param xares XAResource registered - * @param info - * @param prop - * @param trm Object to be called back by the TM or null - * @throws XAException - */ - public void registerResourceManager(String rmname, - XAResource xares, - String info, - Properties prop, - TxResourceManager trm) - throws XAException; - - /** - * @return true if Recovery is enabled - */ - public boolean isRecoveryEnabled(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionService.java deleted file mode 100644 index ae21f24482..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TransactionService.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm; - - -import org.ow2.jonas.service.Service; - -import javax.resource.spi.XATerminator; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; -import javax.transaction.xa.XAException; -import javax.transaction.xa.Xid; - - - -/** - * Transaction Service interface. - */ -public interface TransactionService extends Service { - - /** - * Gets the TransactionManager. - */ - TransactionManager getTransactionManager(); - - /** - * @return Returns the {@link UserTransaction} object. - */ - UserTransaction getUserTransaction(); - - /** - * @return Returns the TransactionSynchronizationRegistry object. - */ - TransactionSynchronizationRegistry getTransactionSynchronizationRegistry(); - - /** - * Gets the inflow transaction object that represents the transaction context of - * the calling thread. If the calling thread is - * not associated with an inflow transaction, a null object reference - * is returned. - * @return a XATerminator handle - * @throws XAException - */ - XATerminator getXATerminator() throws XAException; - - /** - * Start ResourceManager Recovery - * @throws XAException - */ - void startResourceManagerRecovery() throws XAException; - - /** - * Sets the default transaction timeout. - * @param t default transaction timeout. - */ - void setTimeout(int t); - - /** - * Attach the current calling {@link Thread} to the given {@link Xid}. - * @param xid Transaction id. - * @param timeout Transaction timeout. - * @throws SystemException if the TM cannot attach the given {@link Xid}. - * @throws NotSupportedException if the TM cannot attach the given {@link Xid}. - */ - void attachTransaction(Xid xid, long timeout) throws NotSupportedException, SystemException; - - /** - * Detach the current {@link Thread} of the running Transaction. - */ - void detachTransaction(); - -} - diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TxResourceManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TxResourceManager.java deleted file mode 100644 index db72e8bee0..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/tm/TxResourceManager.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm; - -import javax.transaction.xa.XAResource; - -/** - * Interface that must be implemented by an object to be called - * back by TransactionManager when registered by RegisterResourceManager - * @author durieuxp - */ -public interface TxResourceManager { - public void freeXAResource(XAResource xares); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningService.java deleted file mode 100644 index c033c79f9b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningService.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning; - -import java.io.File; - -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * JOnAS Service interface for the versioning service. This interface combines - * the versioning service's JMX interface with the JOnAS Service interface. It - * also adds internal methods for managing contexts, obtaining version - * information from files and watching JNDI bindings. - * - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VersioningService extends Service, VersioningServiceBase { - - /** - * List of allowed special characters in version identifiers and JNDI - * prefixes. If a non-alphanumeric character other than these is found, it - * will be replaced by a '-'. - */ - String ALLOWED_SPECIAL_CHARS = "-_,."; - - /** - * @param file JAR, WAR or EAR file to read the version number from. - * @return Version number of file, null if none found. - */ - String getVersionNumber(File file); - - /** - * @param deployable JAR, WAR or EAR object to read the version number from. - * @return Version number of deployable, null if none found. - */ - String getVersionNumber(IDeployable deployable); - - /** - * @param file JAR, WAR or EAR file to read the version ID from. - * @return Version ID of file, null if none found. - */ - String getVersionID(File file); - - /** - * @param deployable JAR, WAR or EAR object to read the version ID from. - * @return Version ID of deployable, null if none found. - */ - String getVersionID(IDeployable deployable); - - /** - * @param file JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for file, null if none found. - */ - String getPrefix(File file); - - /** - * @param deployable JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for deployable, null if none found. - */ - String getPrefix(IDeployable deployable); - - /** - * Creates JNDI binding management beans for a given archive. - * @param deployable JAR, WAR or EAR object to read the JNDI prefix from. - */ - void createJNDIBindingMBeans(IDeployable deployable); - - /** - * Removes JNDI binding management beans that are not in the JNDI - * directory anymore. - */ - void garbageCollectJNDIBindingMBeans(); - - /** - * @param versioningEnabled Whether versioning is enabled. - */ - void setVersioningEnabled(boolean versioningEnabled); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningServiceBase.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningServiceBase.java deleted file mode 100644 index 1558c241c2..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VersioningServiceBase.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning; - -import java.net.URL; - -/** - * Interface for the versioning service, which only contains methods for the - * versioning service and doesn't inherit from any other interface. This - * interface will be exposed via JMX. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VersioningServiceBase { - - /** - * Policy for a default context. All users that cannot access other contexts - * will access the default context. - */ - String DEFAULT = "Default"; - - /** - * Policy for a disabled context. Only old users on that context are allowed - * to access it, new users never get redirected to such a context. - */ - String DISABLED = "Disabled"; - - /** - * Policy for a reserved context. Only users that know the exact address of - * this context can access it. - */ - String RESERVED = "Reserved"; - - /** - * Policy for a private context. - */ - String PRIVATE = "Private"; - - /** - * Possible policies. - */ - String[] POLICIES = {DEFAULT, DISABLED, RESERVED, PRIVATE}; - - /** - * @return Possible policies. - */ - String[] getPolicies(); - - /** - * @return Whether versioning is enabled. - */ - boolean isVersioningEnabled(); - - /** - * @return The default deployment policy. - */ - String getDefaultDeploymentPolicy(); - - /** - * @param defaultPolicy Default deployment policy to set. - * @throws IllegalArgumentException If defaultPolicy is not in - * {@link VersioningServiceBase#POLICIES}. - */ - void setDefaultDeploymentPolicy(String defaultPolicy) throws IllegalArgumentException; - - /** - * @return The filtered content types. Each type is separated with a comma. - * See {@see VersioningServiceBase#getFilteredContentTypesArray()} - * if you need to access the content types for using them in an - * application (the usage that other method is recommended for - * performance reasons). - */ - String getFilteredContentTypes(); - - /** - * @param filteredContentTypes The filtered content types to set. Each type - * must be separated with a comma, any spacing character between - * each type is omitted. - */ - void setFilteredContentTypes(String filteredContentTypes); - - /** - * @return The filtered content types, each type is another element of the - * returned array. DO NOT MODIFY THE RETURNED ARRAY !! - */ - String[] getFilteredContentTypesArray(); - - /** - * @param url JAR, WAR or EAR file to read the version number from. - * @return Version number of url, null if none found. - */ - String getVersionNumber(URL url); - - /** - * @param url JAR, WAR or EAR file to read the version ID from. - * @return Version ID of url, null if none found. - */ - String getVersionID(URL url); - - /** - * @param url JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for url, null if none found. - */ - String getPrefix(URL url); - - /** - * @param url JAR, WAR or EAR object to get the base name for. The base name - * is used when creating the JNDI naming prefix. - * @return Base name for URL, null if none found. - */ - String getBaseName(URL url); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VirtualContextJMXInterface.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VirtualContextJMXInterface.java deleted file mode 100644 index 3c256385e2..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/versioning/VirtualContextJMXInterface.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning; - -import java.util.Map; - -/** - * JMX Management Interface for any virtual context. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VirtualContextJMXInterface { - /** - * Checks whether a given context has been registered. - * @param versionedPath Versioned path of the context. - * @return true if found, false otherwise. - */ - boolean hasContext(String versionedPath); - - /** - * @return All versioned contexts with their policies for this virtual - * context. - */ - Map getContexts(); - - /** - * Rebinds a context. - * @param versionedPath Versioned path of the context. - * @param policy New policy. - * @return true if succeeded, false otherwise. - */ - boolean rebindContext(String versionedPath, String policy); - - /** - * Removes this virtual context. - * @return true if succeeded, false otherwise. - */ - boolean removeVirtualContext(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/IOnDemandHttpService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/IOnDemandHttpService.java deleted file mode 100644 index bf1480a487..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/IOnDemandHttpService.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web; - -import org.ow2.jonas.service.Service; - -/** - * Loads the Web Container when a request is done on the http port and - * that the web container service is not yet started. - * @author Florent Benoit - */ -public interface IOnDemandHttpService extends Service { - - - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerService.java deleted file mode 100644 index 7aad8098b8..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerService.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web; - -import java.net.URL; -import java.net.URLClassLoader; -import java.rmi.RemoteException; - -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.service.ConfigService; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; - -import javax.naming.Context; - -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - -/** - * JOnAS WEB Container Service interface. - * This interface provides a description of a web container service. - * @author Ludovic Bert - * @author Florent Benoit - */ -public interface JWebContainerService extends ConfigService { - - /** - * Deploy the given wars of an ear file with the specified parent - * classloader (ejb classloader or ear classloader). (This method - * is only used for the ear applications, not for the - * web applications). - * @param ctx the context containing the configuration - * to deploy the wars.
- * This context contains the following parameters :
- * - urls the list of the urls of the wars to deploy.
- * - earURL the URL of the ear application file.
- * - parentClassLoader the parent classLoader of the wars.
- * - earClassLoader the ear classLoader of the j2ee app.
- * - altDDs the optional URI of deployment descriptor.
- * - contextRoots the optional context root of the wars.
- * @throws JWebContainerServiceException if an error occurs during - * the deployment. - */ - void deployWars(Context ctx) throws JWebContainerServiceException; - - /** - * Undeploy the given wars of an ear file with the specified parent - * classloader (ejb classloader or ear classloader). (This method - * is only used for the ear applications, not for the - * war applications). - * @param urls the list of the urls of the wars to undeploy. - */ - void unDeployWars(URL[] urls); - - /** - * Make a cleanup of the cache of deployment descriptor. This method must - * be invoked after the ear deployment by the EAR service. - * the deployment of an ear by . - * @param earClassLoader the ClassLoader of the ear application to - * remove from the cache. - */ - void removeCache(ClassLoader earClassLoader); - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when it is impossible to get the Default Host. - */ - String getDefaultHost() throws JWebContainerServiceException; - - /** - * Return the Default HTTP port number of the web container (can - * be null if multiple HTTP connector has been set). - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when it is impossible to get the Default Http port. - */ - String getDefaultHttpPort() throws JWebContainerServiceException; - - /** - * Return the Default HTTPS port number of the web container (can - * be null if multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when it is impossible to get the Default Https port. - */ - String getDefaultHttpsPort() throws JWebContainerServiceException; - - /** - * Return the class loader of the given warURL. Unpack the associated war - * and build the loader if it's not in the cache. - * @param warURL the url of the war we want to get the loader - * @param earDeployable the EAR deployable (could be null) - * the war. May be null in non ear case. - * @param ejbClassLoader the ejb class loader of the ear. - * May be null in non ear case. - * @return the class loader of the given warURL. - * @throws JWebContainerServiceException if the process failed. - */ - URLClassLoader getClassLoader(URL warURL, final EARDeployable earDeployable, ClassLoader ejbClassLoader) throws JWebContainerServiceException; - - /** - * @param warURL the URL of the webapp - * @return Returns the ClassLoader used to link a JNDI environnment to a webapp - */ - ClassLoader getContextLinkedClassLoader(URL warURL); - - /** - * Register a WAR by delegating the operation to the registerWar() method. - * This is used for JMX management. - * @param fileName the name of the war to deploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the registration failed. - */ - @Deprecated - void registerWar(String fileName) throws RemoteException, JWebContainerServiceException; - - /** - * Register a WAR by delegating the operation to the registerWar() method. - * @param deployable the webapp to be deployed - * @throws JWebContainerServiceException if the registration failed. - */ - void registerWar(WARDeployable deployable) throws JWebContainerServiceException; - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the war file. - * @return true if the war is deployed, else false. - */ - boolean isWarLoaded(String fileName); - - /** - * Unregister a WAR by delegating the operation to the unRegisterWar() - * method. This is used for JMX management. - * @param fileName the name of the war to undeploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Deprecated - void unRegisterWar(String fileName) throws RemoteException, JWebContainerServiceException; - - /** - * Un-register a WAR by delegating the operation to the unRegisterWar(Context) - * method. - * @param deployable the webapp to be un-deployed. - * @throws JWebContainerServiceException if the un-registration failed. - */ - void unRegisterWar(WARDeployable deployable) throws JWebContainerServiceException; - - /** - * Test if the specified unpack name is already deployed or not. - * @param unpackName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - boolean isWarDeployedByWorkName(final String unpackName); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerServiceException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerServiceException.java deleted file mode 100644 index 9c3aa2ba2f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/web/JWebContainerServiceException.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web; - - -//import jonas -import org.ow2.jonas.service.ServiceException; - -/** - * The class JWebContainerServiceException that indicates conditions that a - * reasonable application might want to catch. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JWebContainerServiceException extends ServiceException { - - /** - * Constructs a new JWebContainerServiceException with the specified - * message. - * @param message the detail message. - */ - public JWebContainerServiceException(final String message) { - super(message, null); - } - - /** - * Constructs a new JWebContainerServiceException with the specified - * message. - * @param message the detail message. - * @param throwable the exception - */ - public JWebContainerServiceException(final String message, final Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/CleanTask.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/CleanTask.java deleted file mode 100644 index f6fd2ea863..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/CleanTask.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner; - -/** - * Give access to a CleanTask implementation. - * @author Francois Fornaciari - */ -public interface CleanTask { - - /** - * Run the clean task. - * @throws WorkCleanerException If the execution fails. - */ - void execute() throws WorkCleanerException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/DeployerLogException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/DeployerLogException.java deleted file mode 100644 index 7574e52601..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/DeployerLogException.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner; - -/** - * The class DeployerLogException indicates conditions that a reasonable - * application might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ - -public class DeployerLogException extends Exception { - - /** - * Constructs a new DeployerLogException with no detail message. - */ - public DeployerLogException() { - super(); - } - - /** - * Constructs a new DeployerLogException with the specified message. - * @param message the detail message. - */ - public DeployerLogException(String message) { - super(message); - } -} \ No newline at end of file diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/IDeployerLog.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/IDeployerLog.java deleted file mode 100644 index 0dd2bffb22..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/IDeployerLog.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.workcleaner; - -import java.io.File; -import java.util.Vector; - -/** - * Interface which permits to store or load the association between the name of a package and the timestamped work - * copy associated. - * @author Jeremy Cazaux - */ -public interface IDeployerLog { - - /** - * Return the entries of the file. - * @return a vector of LogEntry item. - */ - Vector getEntries(); - - /** - * Remove the given entry and return the entries of the file. - * @param entry the LogEntry which must be remove. - * @return the new vector of LogEntry item. - * @throws DeployerLogException if the remove can't be done - */ - Vector removeEntry(final T entry) throws DeployerLogException; - - /** - * Add the entry and return the new entries. - * @param logEntry the entry to add - * @throws DeployerLogException if the add can't be done - */ - Vector addEntry(T logEntry) throws DeployerLogException; - - /** - * @param original Original File - * @return the entry which match with the orginal file - */ - T getEntry(File original); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/LogEntry.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/LogEntry.java deleted file mode 100644 index f8a04f10e0..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/LogEntry.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner; - -import java.io.File; - -/** - * Give access to a LogEntry implementation. - * @author Francois Fornaciari - */ -public interface LogEntry { - - /** - * Return the ear file of this ear log entry. - * @return the ear file of this ear log entry. - */ - File getOriginal(); - - /** - * Return the unpacked directory. - * @return the unpacked directory. - */ - File getCopy(); - - //TODO add an equals method - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerException.java deleted file mode 100644 index 302bb0af37..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerException.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner; - -import org.ow2.jonas.service.ServiceException; - -/** - * The class WorkCleanerException indicates conditions that a reasonable application might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class WorkCleanerException extends ServiceException { - - /** - * Constructs a new CleanerException with the specified message. - * @param message the detail message. - */ - public WorkCleanerException(final String message) { - super(message); - } - - /** - * Constructs a new CleanerException with the specified message. - * @param message the detail message. - * @param throwable the exception - */ - public WorkCleanerException(final String message, final Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerService.java deleted file mode 100644 index 72428903d1..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workcleaner/WorkCleanerService.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner; - - -/** - * Give access to a WorkCleaner service implementation. - * @author Francois Fornaciari - */ -public interface WorkCleanerService { - - /** - * Register a new clean task. - * @param cleanTask the task to add - * @throws WorkCleanerException if the task cannot be registred - */ - void registerTask(final CleanTask cleanTask) throws WorkCleanerException; - - /** - * Unregister a clean task. - * @param cleanTask The task to unregister - * @throws WorkCleanerException If the task cannot be unregistered - */ - void unregisterTask(final CleanTask cleanTask) throws WorkCleanerException; - - /** - * Execute the registered tasks. - */ - void executeTasks(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workmanager/WorkManagerService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workmanager/WorkManagerService.java deleted file mode 100644 index 60e294ad19..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/workmanager/WorkManagerService.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workmanager; - -import javax.resource.spi.work.WorkManager; - -import org.ow2.jonas.service.Service; - - -/** - * Give access to a {@link WorkManager} implementation. - * @author Guillaume Sauthier - */ -public interface WorkManagerService extends Service { - - /** - * @return Returns a {@link WorkManager} implementation. - */ - WorkManager getWorkManager(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/IJAXRPCService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/IJAXRPCService.java deleted file mode 100644 index 365c7c59ed..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/IJAXRPCService.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.jaxrpc; - - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.naming.Reference; - -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - - - - -/** - * WebServices Service interface. - * - * @author Guillaume Sauthier - */ -public interface IJAXRPCService extends Service { - - /** - * classloader Context param. - */ - String CLASSLOADER_CTX_PARAM = "classloader"; - - /** - * parentObjectName Context Param. - */ - String PARENT_OBJECTNAME_CTX_PARAM = "parentObjectName"; - - /** - * isInEar Context Param. - */ - String ISINEAR_CTX_PARAM = "isInEar"; - - /** - * warURL Context Param. - */ - String WARURL_CTX_PARAM = "warURL"; - - /** - * Directory (as a File) where is unpacked the deployed archive. - */ - String UNPACK_DIRECTORY_CTX_PARAM = "unpackDir"; - - /** - * explore the context classloader to find Web service deployment - * descriptor (for endpoints) and service-ref element within standard - * deployment descriptor (for clients). It registers each endpoints in WS - * engine publishing relative WSDLs, and it instanciates and binds in the - * registry each clients classes. - * - * @param ctx the context containing the configuration to deploy the - * wars.
This context contains the following parameters :
- - * jarUrls the list of the urls of the jars to deploy.
- - * warUrls the list of the urls of the wars to deploy.
- - * parentClassLoader the parent classLoader of the wars.
- - * earClassLoader the ear classLoader of the j2ee app.
- altDDs - * the optional URI of deployment descriptor.
- * - * @throws WSException if an error occurs during the deployment. - */ - void deployWebServices(Context ctx) throws WSException; - - /** - * Remove the WebServices descriptors associated to the given ClassLoader. - * - * @param cl the key ClassLoader - */ - void removeCache(ClassLoader cl); - - /** - * Complete the WebServices Deployment (add informations in web environment). - * @param ctx Context containing the key ClassLoader - * @throws WSException When Endpoints URLs binding fails - */ - void completeWSDeployment(Context ctx) throws WSException; - - /** - * buildServiceRef from WS ref descriptor. - * @param rd WS ref descriptor - */ - Reference buildServiceRef(IServiceRefDesc rd, ClassLoader loader) throws NamingException; - - /** - * Undeploy the WebServices : unpublish WSDL + unregister MBeans. - * @param ctx Context containing undeployment informations - * @throws WSException When undeployment fails - */ - void undeployWebServices(Context ctx) throws WSException; - - /** - * Automatic WSGen is enabled ? - * @return true if automatic WSGen needs to be Called. - */ - boolean isAutoWsGenEngaged(); - - /** - * Apply WSGen on the given deployable. - * @param deployable the deployable to use - * @return the modified file or the original file if WSGen has not been launched. - * @throws WSException If WSGen cannot be applied. - */ - String applyWSGen(final IDeployable deployable) throws WSException; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/WSException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/WSException.java deleted file mode 100644 index 0ed7f4cc20..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxrpc/WSException.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxrpc; - - -//import jonas -import org.ow2.jonas.service.ServiceException; - -/** - * The class WSException that indicates conditions that a - * reasonable application might want to catch. - * @author Xavier Delplanque - */ -public class WSException extends ServiceException { - - /** - * Constructs a new WSException with the specified - * message. - * @param message the detail message. - */ - public WSException(final String message) { - super(message, null); - } - - /** - * Constructs a new WSException with the specified - * message. - * @param message the detail message. - * @param throwable the exception - */ - public WSException(final String message, final Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/EndpointType.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/EndpointType.java deleted file mode 100644 index 210019f179..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/EndpointType.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -/** - * Supported endpoint types: can be EJB (Stateless Session Beans) - * or POJO. - * @author Guillaume Sauthier - */ -public enum EndpointType { - POJO, EJB -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IJAXWSService.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IJAXWSService.java deleted file mode 100644 index 72fce6d498..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IJAXWSService.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import org.ow2.jonas.service.Service; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.servlet.ServletContext; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -/** - * The JAX-WS Service is used to abstract endpoint (server side) and - * references (client side) creation. - * This interface needs to be implemented by any JAX-WS provider that - * we want to support in JOnAS. - * - * Warning, this interface is subject to changes. - * @author Guillaume Sauthier - */ -public interface IJAXWSService extends Service { - - /** - * The key used to store the webservices related metadata in Context. - */ - static final String KEY_WEB_SERVICES_METADATAS = "webservices-metadatas"; - - /** - * Construct a Reference dedicated to the given @WebServiceRef metadata. - * @param serviceRef the reference described by the user. - * @return a JNDI Naming {@link Reference} that can be bound in a JNDI Context. - */ - Reference createNamingReference(final IJaxwsWebServiceRef serviceRef) throws NamingException; - - /** - * Creates a new POJO Web service endpoint from classes metadata. - * @param metadata the class own metadata (annotation + XML) - * @param loader the ClassLoader to be used to load classes from the metadata - * @param servletContext the webapp ServletContext (used to locate web resource) - * @return A POJO typed IWebServiceEndpoint based on metadata - * @throws WSException if it was impossible to create the endpoint (CNFE, ...) - */ - IWebServiceEndpoint createPOJOWebServiceEndpoint(final IWarClassMetadata metadata, - final ClassLoader loader, - final ServletContext servletContext) - throws WSException; - - /** - * Finalize the deployment of POJO endpoints contained in the given ServletContext. - * @param context ServletContext. - */ - void finalizePOJODeployment(ServletContext context); - - /** - * Stop and undeploy the POJO endpoints contained in the given ServletContext. - * @param context ServletContext. - */ - void undeployPOJOEndpoints(ServletContext context); - - - SOAPHandler getClientAuditHandler(); - SOAPHandler getEndpointAuditHandler(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSRequest.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSRequest.java deleted file mode 100644 index 8f5e4e488f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSRequest.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import java.io.IOException; -import java.io.InputStream; - -/** - * An {@link IWSRequest} represents a request to an {@link IWebServiceEndpoint}. - * - * @author Guillaume Sauthier - */ -public interface IWSRequest { - - - /** - * @return the {@link InputStream} with the web service request - * message's content. - * @throws IOException when {@link InputStream} cannot be returned. - */ - InputStream getInputStream() throws IOException; - - String getRemoteAddr(); - String getHeader(String name); - /** - * @return the MIME Content-Type header. - */ - String getContentType(); - - /** - * Permits to use the {@link IWSRequest} interface as a storage place. - * @param type key - * @param value the object to be stored - * @param interface of the object - * @return the old value if any was set before, or null. - */ - T setAttribute(Class type, T value); - - /** - * Returns an object of the corresponding interface, or null if none was found - * @param interface of the object - * @param type expected interface type used as a key - * @return an object of the corresponding interface, or null if none was found - */ - T getAttribute(Class type); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSResponse.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSResponse.java deleted file mode 100644 index c9f4e8576b..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWSResponse.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * An {@link IWSResponse} represents a web service response to an - * {@link IWebServiceEndpoint}. - * - * @author Guillaume Sauthier - */ -public interface IWSResponse { - - /** - * @return the {@link OutputStream} to be used for response. - * @throws IOException when an {@link OutputStream} is not available - */ - OutputStream getOutputStream() throws IOException; - void setStatus(int code); - void setHeader(String name, String value); - void flushBuffer() throws IOException; - void setContentType(String type); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceDeploymentManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceDeploymentManager.java deleted file mode 100644 index 27923cffda..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceDeploymentManager.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -/** - * An {@link IWebServiceDeploymentManager} is an object that knows how to - * expose an {@link IWebServiceEndpoint} using some protocol. It is also - * responsible of its undeployment.
- * - * For example, a deployment manager that we will probably have to - * implement is a web container based deployment manager: It will know - * what to do with the given endpoint to expose it through HTTP (by - * using a Servlet or anything else that can intercept the request/response - * flow and invoke the endpoint). - * - * @author Guillaume Sauthier - */ -public interface IWebServiceDeploymentManager { - - /** - * Add support for a given {@link IWebServiceEndpoint} (i.e. deploy). - * - * POJO based web services deployment example:
- * As POJO web services are located inside a web-application (.war), a - * Context needs to be configured or updated to allow execution - * of the POJO web service.
- * For example, if a POJO webservice is declared using the - * WEB-INF/web.xml:
- *

-     *   <servlet>
-     *     <servlet-name>My POJO WebService</servlet-name>
-     *     <servlet-class>my.company.app.ServiceImplementationBean</servlet-class>
-     *   </servlet>
-     * 
- * - * Then the servlet element's value has to be replaced - * by a real Servlet implementation. - * Some other changes are probably needed but not described here - * as they are implementation specific.
- * - * EJB based web service deployment example:
- * The web service has to be deployed in a web container (servlet - * container), an implementation of this method will create a new - * Context for the endpoint and then will configure it. - * - * @param endpoint the {@link IWebServiceEndpoint} to deploy. - * - * @throws WSException if deployment fails or if the {@link IWebServiceEndpoint} - * is already registered. - */ - void registerWSEndpoint(IWebServiceEndpoint endpoint) throws WSException; - - /** - * Remove support for the given {@link IWebServiceEndpoint}. - * After a call to this method, the given {@link IWebServiceEndpoint} - * will not be accessible anymore. - * - * @param endpoint the {@link IWebServiceEndpoint} to undeploy. - * - * @throws WSException if undeployment fails or if the {@link IWebServiceEndpoint} - * is not registered. - */ - void unregisterWSEndpoint(IWebServiceEndpoint endpoint) throws WSException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceEndpoint.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceEndpoint.java deleted file mode 100644 index 3fdcfc42ac..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebServiceEndpoint.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -/** - * An {@link IWebServiceEndpoint} is a container around a concrete endpoint - * implementation (Axis2 or CXF for example, but not limited to). It is mapped - * to a wsdl:port and is associated to a WSDL that - * provides a technical description of this web service.
- * - * It provides a management interface that an administrator can use to - * "explore" the web service.
- * - * It also has a runtime interface that has to be used to invoke the web service. - * This runtime interface is a simple invoke method with 2 parameters - * ({@link IWSRequest} and {@link IWSResponse}) wrapping input and output - * messages streams. The {@link IWSRequest} and {@link IWSResponse} interfaces - * has to be implemented to adapt a given InputStream to the WS stream - * (like wrapping a HttpServletRequest and a HttpServletResponse for a webcontainer). - * - * @author Guillaume Sauthier - */ -public interface IWebServiceEndpoint { - - /** - * Supported endpoint types: can be EJB (Stateless Session Beans) - * or POJO. - */ - enum EndpointType { - POJO, EJB - } - - /** - * @return this {@link IWebServiceEndpoint}'s implementation - * type (EJB or POJO) - */ - EndpointType getType(); - - /** - * @return the port identifier of this endpoint. - */ - PortIdentifier getIdentifier(); - - /** - * Invoke this web service endpoint. SOAP Message content (XML) can be - * found in the {@link IWSRequest} object. - * The response has to be written back into the {@link IWSResponse} object. - * - * - * @param request Request wrapper - * @param response Response wrapper - * @throws WSException thrown if anything goes wrong in the - * invocation processing - */ - void invoke(IWSRequest request, IWSResponse response) throws WSException; - - /** - * Starts the {@link IWebServiceEndpoint}. Can be used for initialization - * code. - */ - void start(); - - /** - * Stops the {@link IWebServiceEndpoint}. - * Any resource used by the endpoint should be cleared after this method's - * call. - */ - void stop(); - - // management operations - - /** - * Returns the WSDL for this endpoint. - */ - //Object getWSDL(); - - /** - * Give access to the port's metadata: - *
    - *
  • context-root
  • - *
  • url-pattern
  • - *
  • hostname
  • - *
  • ...
  • - *
- * @return the metadata informations associated with this endpoint. - */ - PortMetaData getPortMetaData(); - - /** - * Prints info about the endPoint. - */ - void displayInfos(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesContainer.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesContainer.java deleted file mode 100644 index 488bddc5f0..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesContainer.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import java.util.Collection; - -/** - * The IWebservicesContainer is a group of webservices endpoints sharing the same WSDL definition. - * - * @author Guillaume Sauthier - */ -public interface IWebservicesContainer { - /** - * Add a new endpoint in the group. - * @param endpoint newly added endpoint. - */ - void addEndpoint(T endpoint); - - /** - * Remove an endpoint from the group. - * @param endpoint removed endpoint. - */ - void removeEndpoint(T endpoint); - - /** - * Given a service/port pair, try to find a matching endpoint URL. - * @param identifier Port identifier - * @return an endpoint URL or null if no match was found. - */ - String findUpdatedURL(PortIdentifier identifier); - - /** - * @return the name of this container (WSDL location) - */ - String getName(); - - /** - * @return All the inner endpoints. - */ - Collection getEndpoints(); - - /** - * Starts the container. - * Recursively starts inner endpoints. - */ - void start(); - - /** - * Stops the container. - * Recursively stops inner endpoints. - */ - void stop(); - - /** - * Set the WSDL publication directory for this WSDL. - * @param wsdlPublicationDirectory directory - */ - void setWsdlPublicationDirectory(String wsdlPublicationDirectory); - - /** - * @return the WSDL publication directory for this WSDL (may be null). - */ - String getWsdlPublicationDirectory(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesModule.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesModule.java deleted file mode 100644 index ce360a9f65..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/IWebservicesModule.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import java.util.Collection; - -/** - * The IWebservicesModule represents all the webservices container included in an archive (ejbjar or webapp). - * - * @author Guillaume Sauthier - */ -public interface IWebservicesModule> { - /** - * Add the given container. - * @param container added container - */ - void addContainer(T container); - - /** - * Remove a given container. - * @param container removed container - */ - void removeContainer(T container); - - /** - * Find a container with the given name. - * @param name name of the container - * @return the container or null if none was found. - */ - T findContainer(String name); - - /** - * @return All the containers in this module - */ - Collection getContainers(); - - /** - * Starts the module. - * Recursively starts inner containers. - */ - void start(); - - /** - * Stop the module. - * Recursively stops inner containers. - */ - void stop(); - - /** - * @return the name of this module - */ - String getName(); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortIdentifier.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortIdentifier.java deleted file mode 100644 index 3750838589..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortIdentifier.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -import javax.xml.namespace.QName; - -/** - * The PortIdentifier is the couple wsdl:service / - * wsdl:port that identifies a port in a WSDL definition. - * - * @author Guillaume Sauthier - */ -public class PortIdentifier { - - /** - * The wsdl:service name. - */ - private QName serviceName; - - /** - * The wsdl:port name. - */ - private String portName; - - /** - * Construct a new identifier. - * @param serviceName wsdl:service name. - * @param portName wsdl:port name. - */ - public PortIdentifier(QName serviceName, String portName) { - this.serviceName = serviceName; - this.portName = portName; - } - - /** - * @return The wsdl:service name. - */ - public QName getServiceName() { - return serviceName; - } - - /** - * @return wsdl:port name. - */ - public String getPortName() { - return portName; - } - - @Override - public boolean equals(Object o) { - // Generated by IDEA - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - PortIdentifier that = (PortIdentifier) o; - - if (portName != null ? !portName.equals(that.portName) : that.portName != null) return false; - if (serviceName != null ? !serviceName.equals(that.serviceName) : that.serviceName != null) return false; - - return true; - } - - @Override - public int hashCode() { - // Generated by IDEA - int result = serviceName != null ? serviceName.hashCode() : 0; - result = 31 * result + (portName != null ? portName.hashCode() : 0); - return result; - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortMetaData.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortMetaData.java deleted file mode 100755 index 7057119236..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/PortMetaData.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -/** - * The {@link PortMetaData} class store deploy time / runtime information - * about the webservice. - * It's associated to an IWebServiceEndpoint. - * @author Guillaume Sauthier - */ -public class PortMetaData { - - /** - * Requested url-mapping pattern. - */ - private String urlPattern = null; - - /** - * Requested context-root of the web-app (only for EJB, or null). - */ - private String contextRoot = null; - - /** - * Host's name. - */ - private String hostname = null; - - /** - * content of Handler.xml - */ - private String handlerXML = null; - - /** - * location of wsdl file - */ - private String wsdlLocationUnresolved = null; - - /** - * Naive endpoint URL. - */ - private String endpointURL = null; - - /** - * @return the urlPattern - */ - public String getUrlPattern() { - return urlPattern; - } - - /** - * @param urlPattern the urlPattern to set - */ - public void setUrlPattern(final String urlPattern) { - this.urlPattern = urlPattern; - } - - /** - * @return the contextRoot - */ - public String getContextRoot() { - return contextRoot; - } - - /** - * @param contextRoot the contextRoot to set - */ - public void setContextRoot(final String contextRoot) { - this.contextRoot = contextRoot; - } - - /** - * @return the hostname - */ - public String getHostname() { - return hostname; - } - - /** - * @param hostname the hostname to set - */ - public void setHostname(final String hostname) { - this.hostname = hostname; - } - - /** - * @return the HandlerXML - */ - public String getHandlerXML() { - return handlerXML; - } - - /** - * @param handlerXML the handler xml to set - */ - public void setHandlerXML(final String handlerXML) { - this.handlerXML = handlerXML; - } - - - /** - * @param wsdlLocation the wsdl location to set - */ - public void setWSDLLocation(final String wsdlLocation) { - this.wsdlLocationUnresolved = wsdlLocation; - } - - /** - * @return the wsdl location - */ - public String getWSDLLocation() { - return this.wsdlLocationUnresolved; - } - - /** - * @return the local endpoint URL that can be used to access this endpoint (may be null). - */ - public String getEndpointURL() { - return endpointURL; - } - - /** - * @param endpointURL the local endpoint URL that can be used to access this endpoint. - */ - public void setEndpointURL(String endpointURL) { - this.endpointURL = endpointURL; - } - - @Override - public String toString() { - return "PortMetaData[" + - "urlPattern='" + urlPattern + '\'' + - ", contextRoot='" + contextRoot + '\'' + - ", hostname='" + hostname + '\'' + - ", handlerXML='" + handlerXML + '\'' + - ", endpointURL='" + endpointURL + '\'' + - ']'; - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/WSException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/WSException.java deleted file mode 100644 index fc7369fcbb..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/WSException.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws; - -/** - * This {@link Exception} signals an error occuring during the web - * services processing. - * @author Guillaume Sauthier - */ -public class WSException extends Exception { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = 585860026640619938L; - - /** - * Constructs a new exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by - * a call to {@link #initCause}. - * - * @param message the detail message. The detail message is saved for - * later retrieval by the {@link #getMessage()} method. - */ - public WSException(final String message) { - super(message); - } - - /** - * Constructs a new exception with the specified cause and a detail - * message of (cause==null ? null : cause.toString()) (which - * typically contains the class and detail message of cause). - * This constructor is useful for exceptions that are little more than - * wrappers for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public WSException(final Throwable cause) { - super(cause); - } - - /** - * Constructs a new exception with the specified detail message and - * cause.

Note that the detail message associated with - * cause is not automatically incorporated in - * this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval - * by the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public WSException(final String message, final Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IEJBWebserviceEndpoint.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IEJBWebserviceEndpoint.java deleted file mode 100644 index c012838084..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IEJBWebserviceEndpoint.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb; - -import java.util.Map; - -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The IEJBWebserviceEndpoint contains metadata specific to EJB endpoints. - * - * @author Guillaume Sauthier - */ -public interface IEJBWebserviceEndpoint extends IWebServiceEndpoint { - - /** - * Get the data used to construct a web context. - * @return the Context naming info structure. - */ - IContextNamingInfo getContextNamingInfo(); - - /** - * Get the data structure used to secure a bean's endpoint. - * @return security constraint structure - */ - ISecurityConstraint getSecurityConstraint(); - - /** - * @return a map of values accessibles after web context deployment. - */ - Map getDeploymentInfos(); - - /** - * Key of the Map for accessing context name value. - */ - static final String KEY_CONTEXT_NAME = "context-name"; - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/ISecurityConstraint.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/ISecurityConstraint.java deleted file mode 100644 index e0df1ce201..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/ISecurityConstraint.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb; - -import java.util.List; - -/** - * The ISecurityConstraint gives info about how a Web context, supporting - * an EJB endpoint, has to be secured. - * - * @author Guillaume Sauthier - */ -public interface ISecurityConstraint { - - /** - * @return the secured Url pattern. - */ - String getUrlPattern(); - - /** - * @return the list of protected HTTP methods. - */ - List getHttpMethods(); - - /** - * @return the required guarantee. - */ - String getTransportGuarantee(); - - /** - * @return the list of references roles in the EJB. - */ - List getRoleNames(); - - /** - * @return the authentication method's name. - */ - String getAuthMethod(); - - /** - * @return the name of the realm to be used for authentication. - */ - String getRealmName(); - - // TODO add getJaasEntry -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IWebDeployer.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IWebDeployer.java deleted file mode 100644 index 815d150c29..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/IWebDeployer.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb; - -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; - -/** - * The IEJBWsModuleWebDeployer is responsible to hook up an ejb endpoint - * inside a web container. - * That means creating one (or more) Web context(s), generating required servlets declarations, - * servlet mappings, security stuff, ... - * - * @author Guillaume Sauthier - */ -public interface IWebDeployer { - - /** - * Deploy the given module, with all its endpoints in the web - * container, creating appropriate contexts when required. - * @param module the webservices module to deploy - * @throws WSException if deployment went wrong. - */ - void deploy(IWebservicesModule> module) throws WSException; - - /** - * Undeploy the given module, with all its endpoints from the - * web container. An implementation should catch most of the - * Exceptions and try to cleanupas much as possible. - * @param module the webservices module to undeploy - */ - void undeploy(IWebservicesModule> module); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/ContextNamingStrategyException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/ContextNamingStrategyException.java deleted file mode 100644 index 432b6b4ed8..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/ContextNamingStrategyException.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb.context; - -/** - * The ContextNamingStrategyException is ... - * - * @author Guillaume Sauthier - */ -public class ContextNamingStrategyException extends Exception { - /** - * Constructs a new exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by - * a call to {@link #initCause}. - * - * @param message the detail message. The detail message is saved for - * later retrieval by the {@link #getMessage()} method. - */ - public ContextNamingStrategyException(String message) { - super(message); - } - - /** - * Constructs a new exception with the specified detail message and - * cause.

Note that the detail message associated with - * cause is not automatically incorporated in - * this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval - * by the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public ContextNamingStrategyException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingInfo.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingInfo.java deleted file mode 100644 index 6b6be996ff..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingInfo.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb.context; - -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; - -/** - * The IContextNamingInfo is a data structure with info used to create a web context name. - * - * @author Guillaume Sauthier - */ -public interface IContextNamingInfo { - - /** - * Get the name of the EJB container hosting the EJB exposed endpoint. - * @return the EJB container name - */ - String getContainerName(); - - /** - * Get J2EE Application name. - * @return application name (is be null for standalone EjbJar) - */ - String getApplicationName(); - - /** - * Get the name of the bean exposed as WS. - * @return bean's name - */ - String getBeanName(); - - /** - * Get the realm name to use if this bean is secured. - * @return a real name (may be null if the bean is not secured) - */ - String getRealmName(); - - /** - * Get the endpoint for which the context needs to be created. - * @return the WS endpoint. - */ - IEJBWebserviceEndpoint getEndpoint(); - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingStrategy.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingStrategy.java deleted file mode 100644 index 9d7b990f1a..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/jaxws/ejb/context/IContextNamingStrategy.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.ejb.context; - -/** - * The IContextNamingStrategy is responsible of a web context name creation. - * It computes a context name from the given set of provided infos. - * - * @author Guillaume Sauthier - */ -public interface IContextNamingStrategy { - - /** - * Creates a context name (web server root / context root). - * @param info used to determine the context name. - * @return a context name - */ - String getContextName(IContextNamingInfo info) throws ContextNamingStrategyException; -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/AbsWSDLPublisher.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/AbsWSDLPublisher.java deleted file mode 100644 index c6289d04fd..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/AbsWSDLPublisher.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.publish; - -import java.util.List; - -/** - * Abstract class for WSDL Publisher. It defines some common methods. - * @author Florent Benoit - */ -public abstract class AbsWSDLPublisher implements WSDLPublisher { - - /** - * publish the given list of wsdl - * @param publishableDefinitionList a list of data containing the WSDL file to be - * published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - public void publish(final List publishableDefinitionList) throws WSDLPublisherException { - if (publishableDefinitionList != null) { - for (PublishableDefinition publishableDefinition : publishableDefinitionList) { - publish(publishableDefinition); - } - } - } - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublicationInfo.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublicationInfo.java deleted file mode 100644 index 0684dc373c..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublicationInfo.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.publish; - -import java.io.File; - -/** - * The PublicationInfo is a data holder storing information about WSDL publication. - * - * @author Guillaume Sauthier - */ -public class PublicationInfo { - - /** - * The original WSDL Definition's filename. - */ - private String originalWsdlFilename; - - /** - * A (possibly null) directory (may be relative or absolute) where the - * WSDL definition will be copied. - */ - private File publicationDirectory; - - /** - * @return the orginial WSDM filename. - */ - public String getOriginalWsdlFilename() { - return originalWsdlFilename; - } - - /** - * Set the WSDL filename (must not be null or empty). - * @param originalWsdlFilename filename - */ - public void setOriginalWsdlFilename(final String originalWsdlFilename) { - - // Check input - if ((originalWsdlFilename == null) || ("".equals(originalWsdlFilename))) { - throw new IllegalStateException("Original WSDL filename cannot be null or empty !"); - } - - // Remove extra META-INF/wsdl or WEB-INF/wsdl if any - if (originalWsdlFilename.startsWith("META-INF/wsdl/")) { - this.originalWsdlFilename = originalWsdlFilename.substring("META-INF/wsdl/".length()); - } else if (originalWsdlFilename.startsWith("WEB-INF/wsdl/")) { - this.originalWsdlFilename = originalWsdlFilename.substring("WEB-INF/wsdl/".length()); - } else { - this.originalWsdlFilename = originalWsdlFilename; - } - } - - /** - * @return the directory where the WSDL will be copied. - */ - public File getPublicationDirectory() { - return publicationDirectory; - } - - /** - * Set the directory where the WSDL will be copied. - * @param publicationDirectory the directory where the WSDL will be copied. - */ - public void setPublicationDirectory(final File publicationDirectory) { - this.publicationDirectory = publicationDirectory; - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublishableDefinition.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublishableDefinition.java deleted file mode 100644 index a6ba2bc11f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/PublishableDefinition.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.publish; - -import javax.wsdl.Definition; - -/** - * This class wrap a WSDL Definition and a PublicationInfo instance that will be - * sent to the publisher. - * @author Florent Benoit - */ -public class PublishableDefinition { - - /** - * WSDL definition. - */ - private Definition definition = null; - - /** - * Publication Info. - */ - private PublicationInfo publicationInfo = null; - - /** - * @return WSDl definition - */ - public Definition getDefinition() { - return definition; - } - - /** - * Sets the WSDL definition. - * @param definition the given definition - */ - public void setDefinition(final Definition definition) { - this.definition = definition; - } - - /** - * @return the publication info - */ - public PublicationInfo getPublicationInfo() { - return publicationInfo; - } - - /** - * Sets the publication info. - * @param publicationInfo the publication info - */ - public void setPublicationInfo(final PublicationInfo publicationInfo) { - this.publicationInfo = publicationInfo; - } -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisher.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisher.java deleted file mode 100644 index a1fbfd982f..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisher.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.publish; - -import java.util.List; - - -/** - * A WSDL Handler is in charge of wsdl publication management. - * @author Xavier Delplanque - */ -public interface WSDLPublisher { - - /** - * publish the given wsdl - * @param publishableDefinition the data containing the WSDL file to be - * published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - void publish(PublishableDefinition publishableDefinition) throws WSDLPublisherException; - - /** - * publish the given list of wsdl - * @param publishableDefinitionList a list of data containing the WSDL file to be - * published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - void publish(List publishableDefinitionList) throws WSDLPublisherException; - - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherException.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherException.java deleted file mode 100644 index 1093799a86..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherException.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.publish; - -/** - * A WSDLPublisherException is used to mark Exception originating - * from the WSDL publising module. - * @author Guillaume Sauthier - */ -public class WSDLPublisherException extends Exception { - /** - * Constructs a new exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by - * a call to {@link #initCause}. - * - * @param message the detail message. The detail message is saved for - * later retrieval by the {@link #getMessage()} method. - */ - public WSDLPublisherException(String message) { - super(message); - } - - /** - * Constructs a new exception with the specified detail message and - * cause.

Note that the detail message associated with - * cause is not automatically incorporated in - * this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval - * by the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public WSDLPublisherException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherManager.java b/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherManager.java deleted file mode 100644 index a155985f49..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/java/org/ow2/jonas/ws/publish/WSDLPublisherManager.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.publish; - -/** - * This is the management interface for WSDLPublisher(s). - * @author Guillaume Sauthier - */ -public interface WSDLPublisherManager extends WSDLPublisher { - - /** - * Add a new publisher in this manager. - * @param publisher new WSDLPublisher - */ - void addPublisher(WSDLPublisher publisher); - - /** - * Remove an already registered publisher. - * @param publisher WSDLPublisher to be removed - */ - void removePublisher(WSDLPublisher publisher); -} diff --git a/jonas/modules/apis/jonas-services-api/src/main/resources/META-INF/jonas-services-api.bnd b/jonas/modules/apis/jonas-services-api/src/main/resources/META-INF/jonas-services-api.bnd deleted file mode 100644 index 724909e800..0000000000 --- a/jonas/modules/apis/jonas-services-api/src/main/resources/META-INF/jonas-services-api.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * - -Export-Package org.ow2.jonas.* diff --git a/jonas/modules/apis/pom.xml b/jonas/modules/apis/pom.xml deleted file mode 100644 index 0c8575a8a0..0000000000 --- a/jonas/modules/apis/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-apis - pom - JOnAS :: APIs - - - jonas-deployment-api - jonas-services-api - jonas-management-api - - - diff --git a/jonas/modules/client-bootstrap/pom.xml b/jonas/modules/client-bootstrap/pom.xml deleted file mode 100644 index 00b364d0e1..0000000000 --- a/jonas/modules/client-bootstrap/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - client-bootstrap - - - bundle - - JOnAS :: Client Container Bootstrap - - - org.ow2.jonas.client.boot.Bootstrap - - - - - org.ow2.jonas - jonas-bootstrap-loader - ${project.version} - - - - diff --git a/jonas/modules/client-bootstrap/src/main/java/org/ow2/jonas/client/boot/Bootstrap.java b/jonas/modules/client-bootstrap/src/main/java/org/ow2/jonas/client/boot/Bootstrap.java deleted file mode 100644 index 89d5549dee..0000000000 --- a/jonas/modules/client-bootstrap/src/main/java/org/ow2/jonas/client/boot/Bootstrap.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.client.boot; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; - -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; - -/** - * Client Bootstrap class that launch given class using client.jar file. - * @author Guillaume Sauthier - */ -public final class Bootstrap { - - /** - * Empty private constructir for main only class. - */ - private Bootstrap() {} - - /** - * Execute the Client class within the client.jar ClassLoader. - * @param args Program arguments. - * @throws Exception if unable to create the {@link ClassLoader} or if - * the executed class is failing - */ - public static void main(final String[] args) throws Exception { - - // Init the directories - String jroot = System.getProperty("jonas.root"); - if (jroot == null) { - throw new Exception("JONAS_ROOT is not set."); - } - File root = new File(jroot); - File lib = new File(root, "lib"); - - URL clientDotJarURL = null; - try { - clientDotJarURL = new File(lib, "client.jar").toURI().toURL(); - } catch (MalformedURLException e) { - e.printStackTrace(); - System.exit(2); - } - - ClassLoader loader = new JClassLoader("ClientClassLoader", - new URL[] {clientDotJarURL}); - - // First argument should be the Java class to execute - Method main = null; - // Do nothing if there is no arg - if (args == null || args.length == 0) { - return; - } - - String classname = args[0]; - try { - Class clazz = loader.loadClass(classname); - main = clazz.getDeclaredMethod("main", new Class[] {String[].class}); - } catch (ClassNotFoundException e) { - System.err.println("Cannot load class: '" + classname + "': " + e.getMessage()); - throw e; - } catch (SecurityException e) { - System.err.println("Permission denied on: '" + classname + "': " + e.getMessage()); - throw e; - } catch (NoSuchMethodException e) { - System.err.println("No main(String[]) method on: '" + classname + "': " + e.getMessage()); - throw e; - } - - // Remove first element now - String[] newArgs = new String[args.length - 1]; - System.arraycopy(args, 1, newArgs, 0, args.length - 1); - - // Invoke the main - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(loader); - main.invoke(null, new Object[] {newArgs}); - } catch (InvocationTargetException e) { - if (e.getCause() != null) { - throw e; - } - } catch (Exception e) { - System.err.println("Cannot execute main(String[]) method on: '" + classname + "': " + e.getMessage()); - throw e; - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - } - - -} diff --git a/jonas/modules/client-bootstrap/src/main/resources/META-INF/client-bootstrap.bnd b/jonas/modules/client-bootstrap/src/main/resources/META-INF/client-bootstrap.bnd deleted file mode 100644 index fbfc68e015..0000000000 --- a/jonas/modules/client-bootstrap/src/main/resources/META-INF/client-bootstrap.bnd +++ /dev/null @@ -1,34 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: felix-launcher.bnd 12337 2007-12-13 02:43:26Z benoitf $ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.client.boot, \ - org.ow2.jonas.lib.bootstrap.loader - -# Import/Export nothing -Import-Package -Export-Package - -# Standard Manifest entries -Main-Class ${main.class} -Implementation-Version ${project.version} diff --git a/jonas/modules/client/core/pom.xml b/jonas/modules/client/core/pom.xml deleted file mode 100644 index b8f62a3de2..0000000000 --- a/jonas/modules/client/core/pom.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - jonas-client - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-client-core - bundle - JOnAS :: Client Container :: Core - - - - org.ow2.carol - carol - provided - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-security-propagation - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.ow2.jonas - jonas-generators-wsgen - ${project.version} - - - org.ow2.jonas - jonas-generators-clientstubs - ${project.version} - - - org.ow2.jonas - jonas-tm-jotm-core - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - org.ow2.jonas - jonas-ejb-2.1-core - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - - org.ow2.easybeans - easybeans-core - ${easybeans.version} - - - - org.ow2.easybeans - easybeans-injection-impl - ${easybeans.version} - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - org.ow2.jonas.client.ClientContainer - true - - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainer.java b/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainer.java deleted file mode 100644 index 7d2ed3e841..0000000000 --- a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainer.java +++ /dev/null @@ -1,1521 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.client; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.Manifest; - -import javax.naming.Context; -import javax.naming.LinkRef; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.persistence.EntityManagerFactory; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.login.LoginContext; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.util.configuration.CarolDefaultValues; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.cmi.ha.interceptor.iiop.HAInterceptorInitializer; -import org.ow2.easybeans.injection.api.ArchiveInjectionException; -import org.ow2.easybeans.injection.impl.ArchiveInjection; -import org.ow2.easybeans.loader.EasyBeansClassLoader; -import org.ow2.easybeans.persistence.PersistenceUnitManager; -import org.ow2.easybeans.persistence.api.PersistenceXmlFileAnalyzerException; -import org.ow2.easybeans.persistence.xml.JPersistenceUnitInfo; -import org.ow2.easybeans.persistence.xml.PersistenceXmlFileAnalyzer; -import org.ow2.easybeans.server.Embedded; -import org.ow2.jonas.Version; -import org.ow2.jonas.client.naming.ClientInitialContextFactory; -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.api.IMessageDestinationRefDesc; -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDesc; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDescException; -import org.ow2.jonas.deployment.client.lib.ClientDeploymentDescManager; -import org.ow2.jonas.deployment.common.PersistenceUnitRefDesc; -import org.ow2.jonas.deployment.ear.EarDeploymentDesc; -import org.ow2.jonas.deployment.ear.EarDeploymentDescException; -import org.ow2.jonas.deployment.ear.lib.EarDeploymentDescManager; -import org.ow2.jonas.deployment.ear.xml.Web; -import org.ow2.jonas.deployment.ejb.lib.EjbDeploymentDescManager; -import org.ow2.jonas.deployment.web.lib.WebDeploymentDescManager; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genclientstub.ClientStubGen; -import org.ow2.jonas.generators.wsgen.WsGen; -import org.ow2.jonas.lib.cpmanager.EarClassPathManager; -import org.ow2.jonas.lib.cpmanager.EarClassPathManagerException; -import org.ow2.jonas.lib.cpmanager.JarList; -import org.ow2.jonas.lib.cpmanager.JarListException; -import org.ow2.jonas.lib.naming.SingletonComponentContextFactory; -import org.ow2.jonas.lib.naming.SingletonNamingManager; -import org.ow2.jonas.lib.security.mapping.JPolicyUserRoleMapping; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JComponentContextFactory; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.jonas.security.interceptors.iiop.SecurityInitializer; -import org.ow2.jonas.tm.jotm.ots.OTSORBInitializer; -import org.ow2.jonas.ws.jaxrpc.base.ClientJServiceFactoryFinder; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; -import org.ow2.jonas.ws.jaxws.client.JAXWSWebServiceRefBuilder; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.builder.webserviceref.WebServiceRefBuilder; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.LibDeployable; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.ee.metadata.car.api.ICarDeployableMetadata; -import org.ow2.util.ee.metadata.common.api.enc.IENCBinding; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.url.URLUtils; - -/** - * Defines the class use for the client container This class analyze the ear or - * the jar client and launch the client. - * @author Florent Benoit - */ -public class ClientContainer { - - /** - * Name of the carol file. - */ - private static final String CAROL_FILE = "carol.properties"; - - /** - * Main class to use to launch the application client. - */ - private String mainClass = null; - - /** - * Temporary directory. - */ - private String tmpDir = null; - - /** - * Jar client to use (if many). - */ - private String jarClient = null; - - /** - * Classpath for the application client. - */ - private String classpath = null; - - /** - * trace.properties file to use instead of the default file. - */ - private String clientTraceFile = null; - - /** - * Reference to the client jar to use - */ - private File clientJarFile = null; - - /** - * Reference on the NamingManager. - */ - private JNamingManager naming; - - /** - * carol.properties file to use instead of the default file. - */ - private String carolFile = null; - - /** - * Arguments used by the client. - */ - private String[] args = null; - - /** - * Class loader of the EAR. - */ - private URLClassLoader earClassLoader = null; - - /** - * Extra Arguments. - */ - private List appArgs = null; - - /** - * URLs resolved in the case of the extension mechanism in the Ear case. - */ - private URL[] extensionsURLs = null; - - /** - * Logger to use. - */ - private Logger logger = null; - - /** - * true if the user want to auto generate web services artifacts. - */ - private boolean applyWsGen = true; - - /** - * true if the user want to auto generate some stubs on client side. - * Default is false. - */ - private boolean applyGenClientStub = false; - - /** - * Allows persistence management in client applications. - */ - private PersistenceUnitManager persistenceUnitManager = null; - - private static final String IIOP_INTERCEPTOR = "org.omg.PortableInterceptor.ORBInitializerClass."; - - /** - * Constructor for a Client container. - * @param args the arguments of the instance of the client container - */ - private ClientContainer(final String[] args) { - this.args = args; - - appArgs = new ArrayList(); - } - - /** - * Call the Log class to instanciate the client container logger. - */ - private void initLogger() { - // Allow tracing ejb/jms code - Log.configure(clientTraceFile); - // init the logger - this.logger = Log.getLogger("org.ow2.jonas.client"); - } - - /** - * Main method of the Client container. - * @param args the arguments of the client container - */ - public static void main(final String[] args) { - // Retrieve command line parameters - ClientContainer cc = new ClientContainer(args); - - try { - cc.start(); - } catch (InvocationTargetException ite) { - Throwable t = ite.getTargetException(); - String message = t.getMessage(); - if (t instanceof Error) { - System.err.println("There was the following error : " + message); - } else if (t instanceof Exception) { - System.err.println("There was the following exception : " + message); - } - t.printStackTrace(System.err); - } catch (Exception e) { - System.err.println("There was the following exception : " + e.getMessage()); - e.printStackTrace(); - System.exit(-1); - } - } - - /** - * Start the client container. - * @throws Exception if it fails - */ - private void start() throws Exception { - analyzeArgs(); - - // Use the specified traceclient.properties - if (clientTraceFile != null) { - File tClient = new File(clientTraceFile); - - if (!tClient.exists()) { - throw new ClientContainerException("The file '" + clientTraceFile + "' was not found."); - } - - if (!tClient.isFile()) { - throw new ClientContainerException("The file '" + clientTraceFile - + "' is not a valid file. Maybe a directory ?"); - } - - // Configure log - System.setProperty("jonas.client.trace.file", clientTraceFile); - Log.reset(); - } else { - clientTraceFile = "traceclient"; - } - - initLogger(); - - // Get the filename - String userArg = null; - String fileName = null; - boolean fileMode = true; - - try { - userArg = appArgs.get(0); - } catch (IndexOutOfBoundsException ioobe) { - usage(); - throw new ClientContainerException( - "You haven't specify a jar, an ear file or class name as argument. See the Usage."); - } - - String className = null; - // Test if this is an ear or a jar file else it must be a class name - if (!(userArg.toLowerCase().endsWith(".jar") || userArg.toLowerCase().endsWith(".ear"))) { - className = userArg; - fileMode = false; - } else { - fileMode = true; - fileName = userArg; - } - - - // Gets the deployable for the given archive - IDeployable deployable = null; - if (fileMode) { - File argFile = new File(fileName); - - if (!argFile.exists()) { - throw new ClientContainerException("The file '" + argFile + "' does not exist !"); - } - - // build archive - IArchive archive = ArchiveManager.getInstance().getArchive(argFile); - - try { - deployable = DeployableHelper.getDeployable(archive); - } catch (DeployableHelperException e) { - throw new Exception("Cannot get a deployable for the archive '" - + archive + "'", e); - } - - // Unpack and analyze EAR file if it is an ear - if (EARDeployable.class.isAssignableFrom(deployable.getClass())) { - // Unpack of EAR - deployable = UnpackDeployableHelper.unpack(EARDeployable.class.cast(deployable), "client-deployer"); - } - } - - // Working directory - File workDir = new File(System.getProperty("java.io.tmpdir")); - - - // WsGen - if (applyWsGen && fileMode) { - try { - File argFile = new File(fileName); - - if (!argFile.exists()) { - throw new ClientContainerException("The specified file '" - + fileName + "' doesn't exists."); - } - Manifest manifest = new JarFile(argFile).getManifest(); - - if (manifest == null) { - throw new ClientContainerException( - "No manifest was found inside the file" + argFile); - } - - // Extract attributes - Attributes attributes = manifest.getMainAttributes(); - - if (attributes == null) { - throw new ClientContainerException( - "No attributes were found in the manifest of the file '" - + argFile + "'."); - } - String archiveVersion = attributes.getValue("WsGen-JOnAS-Version"); - if (!Version.getNumber().equals(archiveVersion)) { - this.logger.log(BasicLevel.DEBUG, "Archive was not compiled with the latest WsGen. Regenerating ..."); - // different versions, re-generate Stuff - WsGen wsGen = new WsGen(); - Config config = new Config(); - String deployablePath = URLUtils.urlToFile(deployable.getArchive().getURL()).getPath(); - config.setInputname(deployablePath); - config.setOut(workDir); - - String path = wsGen.execute(config, deployable); - // Check if a new archive has been created - if (!path.equals(deployablePath)) { - IArchive archive = ArchiveManager.getInstance().getArchive(new File(path)); - // Build a new deployable with the new archive - EARDeployable newDeployable = EARDeployable.class.cast(DeployableHelper.getDeployable(archive)); - deployable = UnpackDeployableHelper.unpack(newDeployable, workDir, newDeployable.getShortName(), false); - } - } - } catch (Exception e) { - throw new ClientContainerException( - "Cannot apply WsGen on the client archive : " + userArg, e); - } - } - - // GenClient stub - if (applyGenClientStub && fileMode) { - try { - File argFile = new File(fileName); - - if (!argFile.exists()) { - throw new ClientContainerException("The specified file '" - + fileName + "' doesn't exists."); - } - // different versions, re-generate Stuff - ClientStubGen stubGen = new ClientStubGen(); - Config config = new Config(); - String deployablePath = URLUtils.urlToFile(deployable.getArchive().getURL()).getPath(); - config.setInputname(deployablePath); - config.setOut(workDir); - - String path = stubGen.execute(config, deployable); - // Check if a new archive has been created - if (!path.equals(deployablePath)) { - IArchive archive = ArchiveManager.getInstance().getArchive(new File(path)); - // Build a new deployable with the new archive - IDeployable newDeployable = DeployableHelper.getDeployable(archive); - deployable = UnpackDeployableHelper.unpack(newDeployable, workDir, newDeployable.getShortName(), false); - } - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Cannot apply GenClientStub on the client archive : " + userArg, e); - } - } - - clientJarFile = null; - if (deployable != null) { - if (EARDeployable.class.isAssignableFrom(deployable.getClass())) { - clientJarFile = extractAndAnalyzeEar(EARDeployable.class.cast(deployable)); - } else { - // Client jar is the given file - clientJarFile = URLUtils.urlToFile(deployable.getArchive().getURL()); - } - } else if (fileName != null) { - clientJarFile = new File(fileName); - } - - // SOAP/SAAJ initialization (property) - System.setProperty("javax.xml.soap.SOAPConnectionFactory", "com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory"); - System.setProperty("javax.xml.soap.SOAPFactory", "com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl"); - System.setProperty("javax.xml.soap.MetaFactory", "com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl"); - System.setProperty("javax.xml.soap.MessageFactory", "com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"); - - // Carol initialization (property) - System.setProperty("javax.rmi.CORBA.PortableRemoteObjectClass", - "org.ow2.carol.rmi.multi.MultiPRODelegate"); - System.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); - System.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); - System.setProperty("org.omg.PortableInterceptor.ORBInitializerClass.standard_init", - "org.jacorb.orb.standardInterceptors.IORInterceptorInitializer"); - System.setProperty("javax.rmi.CORBA.UtilClass", "org.ow2.carol.util.delegate.UtilDelegateImpl"); - - // IIOP Interceptors must be declared via System Properties - System.setProperty(IIOP_INTERCEPTOR + OTSORBInitializer.class.getName(), ""); - System.setProperty(IIOP_INTERCEPTOR + SecurityInitializer.class.getName(), ""); - System.setProperty(IIOP_INTERCEPTOR + HAInterceptorInitializer.class.getName(), ""); - - // Build a classloader for the initialisation of carol - // Priority - // 1/ file as argument - // 2/ file in the jar client - // 3/ file in client.jar - URL urlCarolFile = null; - - if (carolFile != null) { - File fCarol = new File(carolFile); - - if (!fCarol.exists()) { - throw new ClientContainerException("The file '" + carolFile + "' was not found."); - } - - if (!fCarol.isFile()) { - throw new ClientContainerException("The file '" + carolFile - + "' is not a valid file. Maybe a directory ?"); - } - - if (!fCarol.getName().equals(CAROL_FILE)) { - throw new ClientContainerException("The file '" + carolFile + "' must be named '" + CAROL_FILE + "'."); - } - - try { - urlCarolFile = fCarol.toURL(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using carol.properties file specified by the user on command line"); - } - } catch (MalformedURLException mue) { - throw new ClientContainerException("Error when building an URL for the file '" + fCarol + "'.", mue); - } - } - - // carol.properties file in client jar, use it if this is the case ? - if (urlCarolFile == null && fileMode) { - URL tmpUrl = null; - try { - tmpUrl = clientJarFile.toURL(); - } catch (MalformedURLException mue) { - throw new ClientContainerException("Error when building an URL for the file '" + clientJarFile + "'.", mue); - } - // Build classloader with null parent CL, to see if it is in the file. - ClassLoader tmpCl = new URLClassLoader(new URL[] {tmpUrl}, null); - - urlCarolFile = tmpCl.getResource(CarolDefaultValues.CAROL_CONFIGURATION_FILE); - if (urlCarolFile != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using carol.properties file of the '" + clientJarFile + "' file."); - } - } - } - - if (urlCarolFile != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Init carol with URL '" + urlCarolFile + "'."); - } - ConfigurationRepository.init(urlCarolFile); - } else { - ConfigurationRepository.init(); - } - // Add Csiv2 Interceptors - ConfigurationRepository.addInterceptors("iiop", "org.ow2.jonas.security.iiop.Csiv2Initializer"); - - // Must be done AFTER carol init because carol set this property internally. - System.setProperty(Context.INITIAL_CONTEXT_FACTORY, ClientInitialContextFactory.class.getName()); - - // Carol configuration is done - // Extract Main-Class to use in the jar from the manifest - if (fileMode) { - Manifest manifest = new JarFile(clientJarFile).getManifest(); - - if (manifest == null) { - throw new ClientContainerException("No manifest was found inside the file" + clientJarFile); - } - - // Extract attributes - Attributes attributes = manifest.getMainAttributes(); - - if (attributes == null) { - throw new ClientContainerException("No attributes were found in the manifest of the file '" - + clientJarFile + "'."); - } - mainClass = attributes.getValue(Attributes.Name.MAIN_CLASS); - } else { - mainClass = className; - } - - - // Invoke the client if there is no need of XML parsing - if (!fileMode) { - // Use TCCL as parent ClassLoader - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - ClassLoader clientCL = new URLClassLoader(getUserClasspathUrls(), tccl); - Thread.currentThread().setContextClassLoader(clientCL); - // No metadatas to use -> null - invokeClient(null); - return; - } - - if (mainClass == null || mainClass.length() == 0) { - throw new ClientContainerException("No main class was found inside the Manifest of the file '" - + clientJarFile + "'. This attribute is required to launch the application client."); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using Main-Class :" + mainClass); - } - - // Convert file to URL - URL clientJarURL = URLUtils.fileToURL(clientJarFile); - - // Build the urls for the classloader - URL[] urlsClient = null; - - // URLs for the classloader - if (extensionsURLs != null) { - // There were URLs with the extension mechanism in the EAR - urlsClient = new URL[extensionsURLs.length + 1]; - - for (int i = 0; i < extensionsURLs.length; i++) { - urlsClient[i] = extensionsURLs[i]; - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding " + extensionsURLs[i] + " to the urls of the client"); - } - } - - urlsClient[extensionsURLs.length] = clientJarURL; - } else { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Only one url for urls of client"); - } - - // No extension or jar case. - urlsClient = new URL[1]; - urlsClient[0] = clientJarURL; - } - - // Build classloader - URLClassLoader clientClassloader = new URLClassLoader(urlsClient, Thread.currentThread() - .getContextClassLoader()); - Thread.currentThread().setContextClassLoader(clientClassloader); - - // Get the deployment descriptor from file - ClientContainerDeploymentDesc clientDD = null; - if (extensionsURLs != null) { - EjbDeploymentDescManager.getInstance().addClassLoaderUrlMapping(clientClassloader, extensionsURLs); - } - - try { - clientDD = ClientDeploymentDescManager.getInstance() - .getDeploymentDesc(clientJarURL, - clientClassloader, - earClassLoader); - } catch (ClientContainerDeploymentDescException e) { - String err = "Cannot read the deployment descriptors '" + clientJarURL + "'"; - error(err); - throw new ClientContainerException(err, e); - } - - // Populate the java:comp/env (ENC) environment. - try { - setClientEnvironment(clientDD); - } catch (Exception e) { - //populating environment failed. - String err = "Error when populating "; - error(err); - throw new ClientContainerException(err, e); - } - - // JAAS - String jaasFile = clientDD.getJaasFile(); - String jaasEntry = clientDD.getJaasEntry(); - String username = clientDD.getUsername(); - String password = clientDD.getPassword(); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using jaas file = " + jaasFile); - } - - String jaasConfigFile = null; - - if (jaasFile != null) { - // Use JAAS - jaasConfigFile = "jar:" + clientJarURL.toExternalForm() + "!/" + jaasFile; - System.setProperty("java.security.auth.login.config", jaasConfigFile); - } - - CallbackHandler ch = null; - - if ((username != null) && (password != null)) { - ch = new NoInputCallbackHandler(username, password); - info("Using the login/password specified in the jonas-client.xml file with a specific CallbackHandler"); - } else { - // Is there a callbackHandler specified ? - String ddCallbackHandler = clientDD.getCallbackHandler(); - - if (ddCallbackHandler != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using '" + ddCallbackHandler + "' class as CallbackHandler."); - } - - Class clazz = null; - - //try to invoke this class - try { - clazz = clientClassloader.loadClass(ddCallbackHandler); - } catch (Exception e) { - throw new ClientContainerException("There was an error while trying to instantiate the class '" - + ddCallbackHandler - + "' which is specified in the application.xml as CallbackHandler class", e); - } - - try { - ch = (CallbackHandler) clazz.newInstance(); - } catch (Exception e) { - throw new ClientContainerException( - "Error while triyng to cast the class '" + ddCallbackHandler - + "' to CallbackHandler interface, maybe the specified class doesn't implement this interface.", - e); - } - } - } - - // Use JAAS - if (ch != null) { - if (jaasFile == null) { - // check if there is a system property - String sysJaasConfig = System.getProperty("java.security.auth.login.config"); - if (sysJaasConfig == null) { - throw new ClientContainerException("You have defined that you want use a CallbackHandler but " - + "you haven't specify the jaas file to use for the JAAS configuration."); - } else { - info("Using system defined JAAS config file" + sysJaasConfig); - } - } - - if (jaasEntry == null) { - throw new ClientContainerException("You have defined that you want use a CallbackHandler but " - + "you haven't specify the jaas entry to use from the JAAS config file."); - } - - info("Using JAAS loginContext '" + jaasEntry + "' from the file '" + jaasConfigFile + "'."); - - try { - LoginContext lc = new LoginContext(jaasEntry, ch); - lc.login(); - } catch (Exception e) { - String err = "Can not use the JAAS authentication"; - error(err); - throw new ClientContainerException(err, e); - } - } - - // Start client - invokeClient(clientDD.getCarDeployableMetadata()); - - } - - /** - * Start the client on its main class with the thread class loader. - * @throws ClassNotFoundException if class is not found - * @throws NoSuchMethodException if method (main) is not found - * @throws IllegalAccessException if access is illegal - * @throws InvocationTargetException if invocation failed - */ - private void invokeClient(final ICarDeployableMetadata carDeployableMetadata) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, - InvocationTargetException { - ClassLoader clientClassloader = Thread.currentThread().getContextClassLoader(); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - if (clientClassloader instanceof URLClassLoader) { - URLClassLoader urlClassLoader = (URLClassLoader) clientClassloader; - URL[] urls = urlClassLoader.getURLs(); - logger.log(BasicLevel.DEBUG, "URLs of the classloader :"); - for (int u = 0; u < urls.length; u++) { - logger.log(BasicLevel.DEBUG, "URL[" + u + "] = " + urls[u]); - } - } - } - - // Invoke client - // Launch the "class_to_run" by using our classloader. - Class clazz = clientClassloader.loadClass(mainClass); - - // File mode, needs to analyze and perform injection in the client - if (clientJarFile != null) { - ArchiveInjection archiveInjection = new ArchiveInjection(carDeployableMetadata); - try { - archiveInjection.init(clazz); - } catch (ArchiveInjectionException e) { - logger.log(BasicLevel.ERROR, "Cannot make class initialization.", e); - } - - } - - Class[] argList = new Class[] {args.getClass()}; - Method meth = clazz.getMethod("main", argList); - - // Remove name of the file from arguments - String[] newArgs = new String[appArgs.size() - 1]; - String txtArgs = ""; - - for (int i = 0; i < newArgs.length; i++) { - newArgs[i] = appArgs.get(i + 1); - txtArgs += (newArgs[i] + " "); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Starting the application client with the arguments '" + txtArgs + "'."); - } - - info("Starting client..."); - - meth.invoke(null, new Object[] {newArgs}); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "End of main method"); - } - - } - - /** - * Set the environment of this client. - * @param clientDD deployment descriptor used for build the environment - * @throws NamingException if the creation of the environment fails - * @throws ClientContainerException if there was an error during NamingManager retrieving. - */ - private void setClientEnvironment(final ClientContainerDeploymentDesc clientDD) - throws NamingException, ClientContainerException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - //Init the naming manager - JComponentContextFactory ccf = null; - try { - naming = SingletonNamingManager.getInstance(); - ccf = SingletonComponentContextFactory.getInstance(); - naming.setJComponentContextFactory(ccf); - } catch (NamingException e) { - throw new ClientContainerException("Error when getting the reference to the Naming manager", e); - } - - Context javaCtx = ccf.createComponentContext("ClientContainer"); - naming.setClientContainerComponentContext(javaCtx); - - Context envCtx = javaCtx.createSubcontext("comp/env"); - - // Bean Environment - IEnvEntryDesc[] envt = clientDD.getEnvEntryDesc(); - - for (int i = 0; i < envt.length; i++) { - // get information in descriptor - String name = envt[i].getName(); - Object obj = envt[i].getValue(); - - // register object in JNDI - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Binding object " + name + " -> " + obj); - } - - envCtx.rebind(name, obj); - } - - // Resource References - IResourceRefDesc[] resref = clientDD.getResourceRefDesc(); - - for (int i = 0; i < resref.length; i++) { - // get information in descriptor - String name = resref[i].getName(); - String resname = resref[i].getJndiName(); - String type = resref[i].getTypeName(); - - // build the LinkRef that will be registered: - // FactoryClassName = null, size = 1, refAddr = resname. - // register object in JNDI - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Linking resource " + name + " -> " + resname); - } - - if (type.equalsIgnoreCase("java.net.URL")) { - // Specify the factory to use with the right URL - Reference ref = new Reference("java.net.URL", "org.ow2.jonas.lib.naming.URLFactory", null); - StringRefAddr refAddr = new StringRefAddr("url", resname); - ref.add(refAddr); - envCtx.rebind(name, ref); - } else { - LinkRef lref = new LinkRef(resname); - envCtx.rebind(name, lref); - } - } - - // Resource Environment References - IResourceEnvRefDesc[] resEnvref = clientDD.getResourceEnvRefDesc(); - - for (int i = 0; i < resEnvref.length; i++) { - // get information in descriptor - String name = resEnvref[i].getName(); - String resname = resEnvref[i].getJndiName(); - LinkRef lref = new LinkRef(resname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Linking resource environment " + name + " -> " + resname); - } - - envCtx.rebind(name, lref); - } - - // EJB References - IEJBRefDesc[] ejbref = clientDD.getEjbRefDesc(); - - for (int i = 0; i < ejbref.length; i++) { - // get information in descriptor - String name = ejbref[i].getEjbRefName(); - String ejbname = null; - ejbname = ejbref[i].getJndiName(); - - LinkRef lref = new LinkRef(ejbname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Linking ejb " + name + " -> " + ejbname); - } - - envCtx.rebind(name, lref); - } - - // ServiceRef - IServiceRefDesc[] serviceRefs = clientDD.getServiceRefDesc(); - if (serviceRefs.length != 0) { - - // get the current ClassLoader - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - - // get the JServiceFactory - JServiceFactory factory = ClientJServiceFactoryFinder.getJOnASServiceFactory(); - - for (int i = 0; i < serviceRefs.length; i++) { - // Create the Service from the ServiceRef description - String refname = serviceRefs[i].getServiceRefName(); - - Reference ref = factory.getServiceReference(serviceRefs[i], loader); - envCtx.rebind(refname, ref); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding service-ref 'java:comp/env/" + refname + "'"); - } - } - } - - // JAX WS service Ref - IENCBindingHolder encBindingHolder = clientDD.getENCBindingHolder(); - List> webServiceRefBindings = encBindingHolder.getWebServicesBindings(); - if (webServiceRefBindings != null) { - for (IENCBinding webServiceRefBinding : webServiceRefBindings) { - // Get name / value - String encName = webServiceRefBinding.getName(); - IJaxwsWebServiceRef jaxwsWebServiceRef = webServiceRefBinding.getValue(); - - // Build reference - WebServiceRefBuilder builder = new JAXWSWebServiceRefBuilder(); - - Reference ref = null; - try { - ref = builder.build(jaxwsWebServiceRef); - } catch (NamingException e) { - throw new ClientContainerException("Cannot build the Reference for " + "@WebServiceRef(" + jaxwsWebServiceRef.getName() - + ")", e); - } - - envCtx.rebind(encName, ref); - - } - } - - - - // Persistence Unit Reference - PersistenceUnitRefDesc[] puref = clientDD.getPersistenceUnitRefs(); - - for (int i = 0; i < puref.length; i++) { - String refName = puref[i].getRefName(); - String unitName = puref[i].getName(); - - if (persistenceUnitManager == null) { - // This CAR doesn't contain persistence unit metadata - break; - } - - EntityManagerFactory emf = persistenceUnitManager.getEntityManagerFactory(unitName); - - envCtx.rebind(refName, emf); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding persistence-unit-ref 'java:comp/env/" + refName + "'"); - } - } - - // MessageDestination References - IMessageDestinationRefDesc[] mdref = clientDD.getMessageDestinationRefDesc(); - - for (int i = 0; i < mdref.length; i++) { - // get information in descriptor - String name = mdref[i].getMessageDestinationRefName(); - String mdname = null; - mdname = mdref[i].getJndiName(); - - LinkRef lref = new LinkRef(mdname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Linking message-destination-ref " + name + " -> " + mdname); - } - - envCtx.rebind(name, lref); - } - } - - /** - * Analyze arguments and extract parameters for the client container. - * @throws Exception if there is an error when analyzing arguments - */ - private void analyzeArgs() throws Exception { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - - try { - if (arg.equals("-tmpDir")) { - tmpDir = args[++argn]; - - continue; - } - - if (arg.equals("-jarClient")) { - jarClient = args[++argn]; - - continue; - } - - if (arg.equals("-traceFile")) { - clientTraceFile = args[++argn]; - - continue; - } - - if (arg.equals("-carolFile")) { - carolFile = args[++argn]; - - continue; - } - - if (arg.equals("-cp")) { - classpath = args[++argn]; - continue; - } - - if (arg.equals("-nowsgen")) { - applyWsGen = false; - continue; - } - - if (arg.equals("-genclientstub")) { - applyGenClientStub = true; - continue; - } - - if (arg.equals("--help") || arg.equals("-help") || arg.equals("-h") || arg.equals("-?")) { - usage(); - System.exit(1); - } - - // Add argument to the application arguments - appArgs.add(arg); - } catch (ArrayIndexOutOfBoundsException aioobe) { - // The next argument is not in the array - throw new ClientContainerException("A required parameter was missing after the argument" + arg); - } - } - } - - /** - * Print the usage of this client. - */ - private void usage() { - System.out.println("Usage of this client :"); - System.out.println("-------------------------------------------------------------------"); - System.out.println("java -jar client.jar [options]"); - System.out.println("-------------------------------------------------------------------"); - System.out.println(" -jarClient : Specify the client jar to use of the ear if many."); - System.out.println(" -traceFile : Specify the configuration file to use for the traces\n" - + " of this client instead of the default file\n" - + " (traceclient.properties) present in client.jar."); - System.out.println(" -carolFile : Specify the carol.properties file to use instead of \n" - + " the default carol.properties file of the client.jar"); - System.out.println(" -tmpDir : Specify the temp directory where unpack the ear."); - System.out.println(" -cp : Specify the classpath to use for the jar client."); - System.out.println(" -nowsgen : Specify if the Container shouldn't use Automated WsGen."); - System.out.println(" -enable-jpa2 : Enable JPA 2.0 libraries on the client side."); - System.out.println("-------------------------------------------------------------------"); - System.out.println(" --help : Display this help."); - System.out.println(" -help : Display this help."); - System.out.println(" -h : Display this help."); - System.out.println(" -? : Display this help."); - System.out.println("-------------------------------------------------------------------"); - } - - /** - * Extract the client of an ear and analyze ear too. - * @param earDeployable ear to be analyzed - * @return the file of the client which was extracted - * @throws Exception if the analyze and/or extract fails - */ - private File extractAndAnalyzeEar(final EARDeployable earDeployable) throws Exception { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - URL earUrl = null; - - try { - earUrl = earDeployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new ClientContainerException("Cannot get url with deployable '" + earDeployable + "'.", e); - } - - // Create classLoader - URL[] arrURL = new URL[1]; - arrURL[0] = earUrl; - - // parent classloader is the current classloader - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - URLClassLoader loaderCls = new URLClassLoader(arrURL, currentLoader); - - EarDeploymentDesc earDD = null; - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Getting the deployment descriptor of the file" + earDeployable); - } - - try { - earDD = EarDeploymentDescManager.getDeploymentDesc(earDeployable, loaderCls); - } catch (EarDeploymentDescException e) { - String err = "Error in the Deployment descriptor from deployable '" + earDeployable + "'"; - throw new ClientContainerException(err, e); - } - - Map userToRoleMapping = earDD.getUserToRoleMapping(); - // Do user-to-role mapping - if (userToRoleMapping != null) { - for (Iterator itMapping = userToRoleMapping.keySet().iterator(); itMapping.hasNext();) { - String principalName = (String) itMapping.next(); - List roles = (List) userToRoleMapping.get(principalName); - String[] roleNames = (String[]) roles.toArray(new String[roles.size()]); - JPolicyUserRoleMapping.addGlobalUserToRoleMapping(principalName, roleNames); - } - } - - - // Get the tags from the Deployment descriptor - String[] ejbTags = earDD.getEjbTags(); - Web[] webTags = earDD.getWebTags(); - - String[] clientTags = earDD.getClientTags(); - String[] altDDEjbs = earDD.getAltDDEjbs(); - String[] altDDWebs = earDD.getAltDDWebs(); - String[] altDDClients = earDD.getAltDDClients(); - - // Changing arrays into JarList - JarList ejbsList = new JarList(ejbTags); - JarList clientsList = new JarList(clientTags); - - String[] webURIs = new String[webTags.length]; - for (int i = 0; i < webURIs.length; i++) { - webURIs[i] = webTags[i].getWebUri(); - } - JarList websList = new JarList(webURIs); - - // Temporary directory - String tempDir = null; - - if (tmpDir != null) { - // use specific directory - tempDir = tmpDir; - info("Use your specified temp directory '" + tempDir + "'."); - } else { - // use default - tempDir = System.getProperty("java.io.tmpdir"); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using temp directory '" + tempDir + "'."); - } - - // Can we write to ? - File tmpFileDir = new File(tempDir); - - if (!tmpFileDir.exists() || !tmpFileDir.isDirectory()) { - throw new ClientContainerException("The temp directory '" + tempDir - + "' doesn't exist or is not a directory."); - } - - if (!tmpFileDir.canWrite()) { - throw new ClientContainerException("Can not write to the temporary directory '" + tempDir + "'."); - } - - // Unpack the ear file and get the unpacked dir - URL dirUnpackURL = null; - - if (earDeployable.getOriginalDeployable() == null) { - try { - EARDeployable unpackedDeployable = UnpackDeployableHelper.unpack(earDeployable, tmpFileDir, null); - dirUnpackURL = unpackedDeployable.getArchive().getURL(); - } catch (Exception e) { - String err = "Error while unpacking the file '" + earUrl + "'"; - throw new ClientContainerException(err, e); - } - } else { - dirUnpackURL = earDeployable.getArchive().getURL(); - } - - // Ear is unpacked, now analyze manifest Class-path: - EarClassPathManager earCPManager = null; - - try { - earCPManager = new EarClassPathManager(clientsList, dirUnpackURL); - } catch (EarClassPathManagerException e) { - String err = "Error while creating the Ear class path manager of the ear : '" + earUrl + "'"; - error(err + " : " + e.getMessage()); - throw new ClientContainerException(err, e); - } - - URL[] classpathURLs = null; - - //Get the urls of the ear class path manager - try { - classpathURLs = earCPManager.getResolvedClassPath(); - } catch (EarClassPathManagerException e) { - String err = "Error while trying to resolve the classpath of the ejbjars and wars of the ear : '" + earUrl - + "'"; - error(err + " : " + e.getMessage()); - throw new ClientContainerException(err, e); - } - - // Add libraries urls found with Java EE library folder - List libDeployables = earDeployable.getLibDeployables(); - List updatedClasspathURLs = new ArrayList(); - if (classpathURLs != null) { - for (URL classpathURL : classpathURLs) { - updatedClasspathURLs.add(classpathURL); - } - - } - - // Add all extra libraries found with new Java EE 5 feature - for (LibDeployable libDeployable : libDeployables) { - URL libDeployableURL = null; - try { - libDeployableURL = libDeployable.getArchive().getURL(); - } catch (ArchiveException e) { - logger.log(BasicLevel.ERROR, "libs: unable to get URL from '" + libDeployableURL + "'."); - continue; - } - if (!updatedClasspathURLs.contains(libDeployableURL)) { - updatedClasspathURLs.add(libDeployableURL); - } - } - classpathURLs = updatedClasspathURLs.toArray(new URL[updatedClasspathURLs.size()]); - - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "EAR : ejbs = " + ejbsList); - logger.log(BasicLevel.DEBUG, "EAR : webs = " + websList); - logger.log(BasicLevel.DEBUG, "EAR : clientUrls = " + clientsList); - } - - currentLoader = Thread.currentThread().getContextClassLoader(); - earClassLoader = new URLClassLoader(new URL[0], currentLoader); - - //Extract the urls of the jarList - URL[] jarUrls = null; - URL[] warUrls = null; - URL[] clientUrls = null; - - try { - jarUrls = ejbsList.getURLs(dirUnpackURL.toExternalForm()); - warUrls = websList.getURLs(dirUnpackURL.toExternalForm()); - clientUrls = clientsList.getURLs(dirUnpackURL.toExternalForm()); - } catch (JarListException e) { - String err = "Error while getting the URLs from jarlist of the ear : '" + earUrl + "'"; - throw new ClientContainerException(err, e); - } - - // Get PersistenceUnitManagers from client jars - List carDeployables = earDeployable.getCARDeployables(); - if (carDeployables != null) { - - // Construct EasyBeansClassLoader for PersistentContext object creation by EasyBeans - ClassLoader ezbClassLoader = new EasyBeansClassLoader(clientUrls, currentLoader); - - // Configure some dialects. - configureExtraDialects(); - - for (CARDeployable carDeployable : carDeployables) { - updatePersistenceUnitManager(getPersistenceUnitManager(carDeployable, ezbClassLoader)); - } - } - - // TODO - also analyze PersistenceUnitManager info in EAR ! - - //Fill Alt-DD for Ejbs and Clients - String altdd = null; - File fAltDD = null; - - //Transorm the array altDDWebs into an array with the absolute URL to - // the file - URL[] clientsAltDDs = new URL[altDDClients.length]; - - for (int i = 0; i < altDDClients.length; i++) { - if (altDDClients[i] != null) { - altdd = altDDClients[i]; - - if (altdd != null) { - try { - fAltDD = new File(new URL(dirUnpackURL.toExternalForm() + File.separator + altdd).getFile()); - clientsAltDDs[i] = fAltDD.getCanonicalFile().toURL(); - } catch (MalformedURLException e) { - String err = "Can't build URL for alt-dd '" + altdd; - error(err + "': " + e.getMessage()); - throw new ClientContainerException(err, e); - } catch (IOException ioe) { - String err = "Can't get canonicalFile() for the file '" + fAltDD; - error(err + "': " + ioe.getMessage()); - throw new ClientContainerException(err, ioe); - } - } - } - } - - URL[] ejbsAltDDs = new URL[altDDEjbs.length]; - - for (int i = 0; i < altDDEjbs.length; i++) { - if (altDDEjbs[i] != null) { - altdd = altDDEjbs[i]; - - if (altdd != null) { - try { - fAltDD = new File(new URL(dirUnpackURL.toExternalForm() + File.separator + altdd).getFile()); - ejbsAltDDs[i] = fAltDD.getCanonicalFile().toURL(); - } catch (MalformedURLException e) { - String err = "Can't build URL for alt-dd '" + altdd; - error(err + "': " + e.getMessage()); - throw new ClientContainerException(err, e); - } catch (IOException ioe) { - String err = "Can't get canonicalFile() for the file '" + fAltDD; - error(err + "': " + ioe.getMessage()); - throw new ClientContainerException(err, ioe); - } - } - } - } - - URL[] websAltDDs = new URL[altDDWebs.length]; - - for (int i = 0; i < altDDWebs.length; i++) { - if (altDDWebs[i] != null) { - altdd = altDDWebs[i]; - - if (altdd != null) { - try { - fAltDD = new File(new URL(dirUnpackURL.toExternalForm() + File.separator + altdd).getFile()); - websAltDDs[i] = fAltDD.getCanonicalFile().toURL(); - } catch (MalformedURLException e) { - String err = "Can't build URL for alt-dd '" + altdd; - error(err + "': " + e.getMessage()); - throw new ClientContainerException(err, e); - } catch (IOException ioe) { - String err = "Can't get canonicalFile() for the file '" + fAltDD; - error(err + "': " + ioe.getMessage()); - throw new ClientContainerException(err, ioe); - } - } - } - } - - EjbDeploymentDescManager.getInstance().setAvailableEjbJarsAndAltDDs(earClassLoader, jarUrls, ejbsAltDDs); - WebDeploymentDescManager.getInstance().setAltDD(earClassLoader, warUrls, websAltDDs); - ClientDeploymentDescManager.getInstance().setAltDD(earClassLoader, clientUrls, clientsAltDDs); - - // Construct the ejb classloader for all the ejb-jars of the same - // ear application. Because there is one ejb classloader for all - // the ejb-jars of the same ear application. - URL[] userURLs = getUserClasspathUrls(); - extensionsURLs = new URL[jarUrls.length + classpathURLs.length + userURLs.length]; - - System.arraycopy(jarUrls, 0, extensionsURLs, 0, jarUrls.length); - System.arraycopy(classpathURLs, 0, extensionsURLs, jarUrls.length, classpathURLs.length); - System.arraycopy(userURLs, 0, extensionsURLs, jarUrls.length + classpathURLs.length, userURLs.length); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Extensions urls :"); - - for (int ii = 0; ii < extensionsURLs.length; ii++) { - logger.log(BasicLevel.DEBUG, "url[" + ii + "] = " + extensionsURLs[ii]); - } - } - - // Choose the jar client - if (clientUrls.length == 0) { - throw new ClientContainerException("No java client was found in the application.xml file of the Ear '" - + earUrl + "'."); - } - - File fClient = null; - - // User has specify an application client to execute - // Search it - if (jarClient != null) { - int f = 0; - File ff = null; - boolean found = false; - - // Search the best matching file - while (f < clientUrls.length && !found) { - ff = URLUtils.urlToFile(clientUrls[f]); - - if (ff.getName().equals(jarClient)) { - found = true; - fClient = ff; - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Found a matching client with the name " + ff); - } - } - - f++; - } - - if (!found) { - throw new ClientContainerException("No client with the name '" + jarClient - + "' was found in this Ear file"); - } - } else { - // Take first - fClient = URLUtils.urlToFile(clientUrls[0]); - - // Warning if many - if (clientUrls.length > 1) { - warn("There are " + clientUrls.length + " clients in this ear, choosing the first one : " - + fClient.getName()); - } - } - - info("Use the application client '" + fClient + "' of the Ear '" + earUrl + "'."); - - return fClient; - } - - /** - * Gets the URL of user classpath (can be empty). - * @return URL of user classpath (-cp arg) - */ - private URL[] getUserClasspathUrls() { - if (classpath == null) { - return new URL[0]; - } - String sep = File.pathSeparator; - List clUser = new ArrayList(); - StringTokenizer tokenizer = new StringTokenizer(classpath, sep); - while (tokenizer.hasMoreTokens()) { - File file = new File(tokenizer.nextToken()); - try { - clUser.add(file.toURL()); - } catch (MalformedURLException mue) { - logger.log(BasicLevel.WARN, "Cannot transform to URL the file : '" + file + "'", mue); - } - } - return clUser.toArray(new URL[0]); - } - - /** - * Gets the persistence unit manager for a given deplyable and classloader. - * @param deployable EAR or JAR deployable - * @param classLoader EasyBeansClassLoader needed to create PersistenceContext objects. - * @return - */ - private PersistenceUnitManager getPersistenceUnitManager(final IDeployable deployable, - final ClassLoader classLoader) { - PersistenceUnitManager persistenceUnitManager = null; - try { - JPersistenceUnitInfo[] persistenceUnitInfos = PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(deployable.getArchive()); - if (persistenceUnitInfos != null) { - persistenceUnitManager = PersistenceXmlFileAnalyzer.loadPersistenceProvider(persistenceUnitInfos, classLoader); - } - } catch (PersistenceXmlFileAnalyzerException e) { - throw new IllegalStateException("Failure when analyzing the persistence.xml file", e); - } - return persistenceUnitManager; - } - - /** - * Update persistenceUnitManager if already created, initialize it otherwise. - * @param extraPersistenceUnitManager keeps persistence unit info from a given deployabale - */ - private void updatePersistenceUnitManager(final PersistenceUnitManager extraPersistenceUnitManager) { - // Existing manager - if (persistenceUnitManager != null) { - if (extraPersistenceUnitManager != null) { - // Add the persistence unit infos to the existing - // persistence unit manager - persistenceUnitManager.addExtraPersistenceUnitInfos(extraPersistenceUnitManager.getPersistenceUnitInfos()); - } - } else { - // New persistence manager use the built manager - persistenceUnitManager = extraPersistenceUnitManager; - } - } - - /** - * Code from org.ow2.jonas.ejb.easybeans.EasyBeansService. - * Configure some dialects that may be used with some databases used by JOnAS client. - */ - @SuppressWarnings("unchecked") - protected void configureExtraDialects() { - // Add Hibernate dialect - try { - Class hibernateDialectClass = Embedded.class.getClassLoader().loadClass("org.hibernate.dialect.DialectFactory"); - Field mapper = hibernateDialectClass.getDeclaredField("MAPPERS"); - mapper.setAccessible(true); - Map map = null; - map = (Map) mapper.get(null); - Class versionInsensitiveMapperClass = Embedded.class.getClassLoader().loadClass( - "org.hibernate.dialect.DialectFactory$VersionInsensitiveMapper"); - Constructor c = versionInsensitiveMapperClass.getConstructor(String.class); - Object oracle9idialect = c.newInstance("org.hibernate.dialect.Oracle9iDialect"); - map.put("Oracle9i Enterprise Edition", oracle9idialect); - Object oracle10Dialect = c.newInstance("org.hibernate.dialect.OracleDialect"); - map.put("Oracle Database 10g Release 10.2.0.3.0 - 64bit Production", oracle10Dialect); - mapper.setAccessible(false); - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Cannot configure some dialects used by Hibernate", e); - } - } - } - /** - * Display an info message with the logger. - * @param s the message - */ - private void info(final String s) { - logger.log(BasicLevel.INFO, s); - } - - /** - * Display an error message with the logger. - * @param s the message - */ - private void error(final String s) { - logger.log(BasicLevel.ERROR, s); - } - - /** - * Display a warn message with the logger. - * @param s the message - */ - private void warn(final String s) { - logger.log(BasicLevel.WARN, s); - } -} diff --git a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainerException.java b/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainerException.java deleted file mode 100644 index d58bf320e8..0000000000 --- a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/ClientContainerException.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.client; - - - -/** - * The class ClientContainerException that indicates conditions that a - * reasonable application might want to catch. - * - * @author Florent Benoit - */ -public class ClientContainerException extends Exception { - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 5038487298301979152L; - - /** - * Constructs a new ClientContainerException with the specified message. - * - * @param message the detail message. - */ - public ClientContainerException(final String message) { - this(message, null); - } - - /** - * Constructs a new ClientContainerException with the specified message. - * - * @param message the detail message. - * @param throwable the exception - */ - public ClientContainerException(final String message, final Throwable throwable) { - super(message, throwable); - } -} diff --git a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/naming/ClientInitialContextFactory.java b/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/naming/ClientInitialContextFactory.java deleted file mode 100644 index 8ffaee3a74..0000000000 --- a/jonas/modules/client/core/src/main/java/org/ow2/jonas/client/naming/ClientInitialContextFactory.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Durieux, Guillaume Sauthier. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.client.naming; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.naming.spi.InitialContextFactory; - -import org.ow2.jonas.ejb2.internal.delegate.HandleDelegateCCFDelegate; -import org.ow2.jonas.lib.naming.SingletonComponentContextFactory; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JComponentContextFactory; -import org.ow2.jonas.registry.carol.delegate.ORBCCFDelegate; -import org.ow2.jonas.tm.jotm.delegate.UserTransactionCCFDelegate; - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This {@link InitialContextFactory}, to be used on the client side only, - * has the role of initializing the {@link JComponentContextFactory} (for example - * java:comp/UserTransaction). - */ -public class ClientInitialContextFactory implements InitialContextFactory { - - /** - * Logger used for traces. - */ - private static Logger logger = Log.getLogger(Log.JONAS_NAMING_PREFIX); - - /** - * This object is recreated each time. SO, we use a static here to - * avoid multiple initializations of SingletonComponentContextFactory - */ - private static JComponentContextFactory ccf = null; - - /** - * Creates an Initial Context for begining name resolution. - * This class is necessary for the Client to provide a correct Context - * with the delegate objects added (UserTransaction, ...). - * @param env The possibly null environment specifying information - * to be used in the creation of the initial context. - * @return A non-null initial context object that implements the Context - * interface. - * @exception NamingException If cannot create an initial context. - */ - @SuppressWarnings("unchecked") - public Context getInitialContext(final Hashtable env) throws NamingException { - if (ccf == null) { - // Initialize here the ComponentContextFactory - logger.log(BasicLevel.DEBUG, "Init ComponentContextFactory"); - ccf = SingletonComponentContextFactory.getInstance(); - ccf.addDelegate(new UserTransactionCCFDelegate()); - ccf.addDelegate(new HandleDelegateCCFDelegate()); - ccf.addDelegate(new ORBCCFDelegate()); - } - // redirect to carol MultiOrb InitialContextFactory - env.put(Context.INITIAL_CONTEXT_FACTORY, "org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory"); - return new InitialContext(env); - } - -} diff --git a/jonas/modules/client/core/src/main/jonas-resources/bin/jclient b/jonas/modules/client/core/src/main/jonas-resources/bin/jclient deleted file mode 100644 index 1089249342..0000000000 --- a/jonas/modules/client/core/src/main/jonas-resources/bin/jclient +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - - -# ----------------------------------------------------------------------- -# Check JONAS_ROOT is set. -# ----------------------------------------------------------------------- -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - - -# --------------------------------------------- -# Get args -# --------------------------------------------- -ARGS= -while [ "$#" -gt 0 ] -do case "$1" in - -cp) - shift - JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$1 - ;; - -D*) - JAVA_OPTS="$JAVA_OPTS $1" - ;; - -security) - # Use security manager for jclient - JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$JONAS_BASE/conf/java.policy" - ;; - -debug) - shift - # $1=-p - if [ "$1" != "-p" ]; then - echo "-debug mode need a following \"-p \"" - exit 1 - fi - shift - JONAS_DEBUG_PORT=$1 - JONAS_DEBUG_SUSPEND=n - if [ "$2" = "-s" ]; then - shift - shift - JONAS_DEBUG_SUSPEND=$1 - fi - echo "JOnAS Debug Info :" - echo " listening on port : $JONAS_DEBUG_PORT" - echo " suspend mode : $JONAS_DEBUG_SUSPEND" - JONAS_DEBUG_OPTS=" -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=$JONAS_DEBUG_PORT,suspend=$JONAS_DEBUG_SUSPEND" - ;; - -enable-jpa2) - JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/bundles-jpa2.0/ow2-jpa-2.0-spec.jar - JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/repositories/maven2-internal/org/ow2/easybeans/osgi/easybeans-modules-persistence-eclipselink-2.x/${easybeans.version}/easybeans-modules-persistence-eclipselink-2.x-${easybeans.version}.jar - ;; - *) - # all other args are passed "as is" to the java program - ARGS="$ARGS $1" - ;; - esac - shift -done - -JAVA_OPTS="-Djava.security.auth.login.config=$JONAS_BASE/conf/jaas.config \ --Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ --Dregistry=$REGISTRY \ --Djonas.root=$JONAS_ROOT \ -$JAVA_OPTS" - - -# Add client.jar -# CLASSPATH could be upgraded here -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/jonas-client.jar$SPS$JONAS_ROOT/lib/client.jar - - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS $JONAS_DEBUG_OPTS org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.client.ClientContainer $ARGS - diff --git a/jonas/modules/client/core/src/main/jonas-resources/bin/jclient.bat b/jonas/modules/client/core/src/main/jonas-resources/bin/jclient.bat deleted file mode 100755 index ab450aaef4..0000000000 --- a/jonas/modules/client/core/src/main/jonas-resources/bin/jclient.bat +++ /dev/null @@ -1,123 +0,0 @@ -@Echo off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2010 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal -set ARGS= - -Rem check JONAS_ROOT and JONAS_BASE -if ["%JONAS_ROOT%"]==[""] goto setroot -Rem Required for carol.properties file (add JONAS_BASE\conf to classpath) -call "%JONAS_ROOT%\bin\setenv.bat" -set JONAS_LIB=%JONAS_ROOT%\lib - -Rem check client.jar -if not exist "%JONAS_LIB%\client.jar" goto noclient - -Rem --------------------------------------------- -Rem Get args -Rem --------------------------------------------- -:loop_on_args -set VALUE=%~1 -if ["%1"]==["-cp"] goto cp_arg -if ["%1"]==["-security"] goto security -if ["%1"]==["-enable-jpa2"] goto jpa2 -if ["%1"]==["-debug"] goto debug_arg -if ["%VALUE:~0,2%"]==["-D"] goto java_opts -set ARGS=%ARGS% %1 -goto next_arg - -Rem Use security manager for jclient ? -:security -set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -goto next_arg - -:jpa2 -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_LIB%\bootstrap\bundles-jpa2.0\ow2-jpa-2.0-spec.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_LIB%\repositories\maven2-internal\org\ow2\easybeans\osgi\easybeans-modules-persistence-eclipselink-2.x\${easybeans.version}\easybeans-modules-persistence-eclipselink-2.x-${easybeans.version}.jar -goto next_arg - -Rem Add -D System Properties -:java_opts -set PROP=%~1 -shift -set PROP=%PROP%=%1 -set JAVA_OPTS=%JAVA_OPTS% %PROP% -goto next_arg - -:cp_arg -shift -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%~1 -goto next_arg - -:debug_arg -shift -if not [%1]==[-p] goto debug_usage -shift -set JONAS_DEBUG_PORT=%1 -set JONAS_DEBUG_SUSPEND=n -if not [%2]==[-s] goto set_debug_opts -shift -shift -set JONAS_DEBUG_SUSPEND=%1 - -:set_debug_opts -echo JOnAS Debug Info : -echo listening on port : %JONAS_DEBUG_PORT% -echo suspend mode : %JONAS_DEBUG_SUSPEND% -set JONAS_DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=%JONAS_DEBUG_PORT%,suspend=%JONAS_DEBUG_SUSPEND% -goto next_arg - -:next_arg -shift -if not [%1]==[] goto loop_on_args - -Rem Add client.jar -Rem CLASSPATH could be upgraded here -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_LIB%\client.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_LIB%\jonas-client.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_LIB%\bootstrap\client-bootstrap.jar - -set JAVA_OPTS=%JAVA_OPTS% -Djava.security.auth.login.config="%JONAS_BASE%\conf\jaas.config" -set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" -if [%REGISTRY%]==[] goto next_java_opts -set JAVA_OPTS=%JAVA_OPTS% -Dregistry="%REGISTRY%" -:next_java_opts -set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -%JAVA% -cp "%JONAS_CLASSPATH%" %JAVA_OPTS% %JONAS_DEBUG_OPTS% org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.client.ClientContainer %ARGS% -goto :EOF - -:noclient -echo client.jar file must be present in JONAS_ROOT\lib directory -goto :EOF - - -:setroot -echo JONAS_ROOT must be set. -goto :EOF - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto :EOF diff --git a/jonas/modules/client/pom.xml b/jonas/modules/client/pom.xml deleted file mode 100644 index ea7a9b88ba..0000000000 --- a/jonas/modules/client/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-client - pom - JOnAS :: Client Container - - core - - diff --git a/jonas/modules/ee-components/jca/jdbc/cp/pom.xml b/jonas/modules/ee-components/jca/jdbc/cp/pom.xml deleted file mode 100644 index af0e41b57c..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/cp/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-jdbc - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-jdbc-cp - rar - JOnAS :: EE Components :: JCA :: JDBC :: CP - - - - org.ow2.jonas - jonas-jca-jdbc-glue - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/jonas-ra.xml b/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/jonas-ra.xml deleted file mode 100644 index c8b93b42a8..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/jonas-ra.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - JOnASJDBC_CP - - false - - - 0 - 0 - 100 - 0 - 0 - 0 - 0 - 0 - 30 - - - 0 - - - - dsClass - - - - URL - - - - user - - - - password - - - - databaseName - - - - description - - - - portNumber - - - - serverName - - - - loginTimeout - - - - dbSpecificMethods - - - - isolationLevel - - - - mapperName - - - - logTopic - - - - diff --git a/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/ra.xml b/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/ra.xml deleted file mode 100644 index 2771f2f04c..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/cp/src/main/rar/META-INF/ra.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - JOnAS Connection Pool RA - JOnAS Connection Pool RA - Objectweb - 1.0 - JDBC - 1.0 - - org.ow2.jonas.ee.jdbc.ConnectionPoolMCFImpl - javax.sql.DataSource - org.ow2.jonas.ee.jdbc.DataSourceImpl - java.sql.Connection - org.ow2.jonas.ee.jdbc.ConnectionImpl - XATransaction - - dsClass - java.lang.String - - - - URL - java.lang.String - - - - user - java.lang.String - - - - password - java.lang.String - - - - databaseName - java.lang.String - - - - description - java.lang.String - - - - portNumber - java.lang.String - - - - serverName - java.lang.String - - - - loginTimeout - java.lang.String - 0 - - - dbSpecificMethods - java.lang.String - - - - isolationLevel - java.lang.String - - - - mapperName - java.lang.String - - - - logTopic - java.lang.String - - - false - - diff --git a/jonas/modules/ee-components/jca/jdbc/dm/pom.xml b/jonas/modules/ee-components/jca/jdbc/dm/pom.xml deleted file mode 100644 index f221b0da25..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/dm/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-jdbc - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-jdbc-dm - rar - JOnAS :: EE Components :: JCA :: JDBC :: DM - - - - org.ow2.jonas - jonas-jca-jdbc-glue - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/jonas-ra.xml b/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/jonas-ra.xml deleted file mode 100644 index 556ea42348..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/jonas-ra.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - JOnASJDBC_DM - - false - - - 0 - 0 - 100 - 0 - 0 - 0 - 0 - 0 - 30 - - - 0 - - - - dsClass - - - - URL - - - - user - - - - password - - - - loginTimeout - - - - isolationLevel - - - - mapperName - - - - logTopic - - - - diff --git a/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/ra.xml b/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/ra.xml deleted file mode 100644 index 8c57154a8d..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/dm/src/main/rar/META-INF/ra.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - JOnAS DriverManager RA - JOnAS DriverManager RA - Objectweb - 1.0 - JDBC - 1.0 - - org.ow2.jonas.ee.jdbc.DriverManagerMCFImpl - javax.sql.DataSource - org.ow2.jonas.ee.jdbc.DataSourceImpl - java.sql.Connection - org.ow2.jonas.ee.jdbc.ConnectionImpl - XATransaction - - dsClass - java.lang.String - - - - URL - java.lang.String - - - - user - java.lang.String - - - - password - java.lang.String - - - - loginTimeout - java.lang.String - 0 - - - isolationLevel - java.lang.String - - - - mapperName - java.lang.String - - - - logTopic - java.lang.String - - - false - - diff --git a/jonas/modules/ee-components/jca/jdbc/ds/pom.xml b/jonas/modules/ee-components/jca/jdbc/ds/pom.xml deleted file mode 100644 index ecfe464e99..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/ds/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-jdbc - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-jdbc-ds - rar - JOnAS :: EE Components :: JCA :: JDBC :: DS - - - - org.ow2.jonas - jonas-jca-jdbc-glue - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/jonas-ra.xml b/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/jonas-ra.xml deleted file mode 100644 index 05e317f58a..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/jonas-ra.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - JOnASJDBC_DS - - false - - - 0 - 0 - 100 - 0 - 0 - 0 - 0 - 0 - 30 - - - 0 - - - - dsClass - - - - URL - - - - user - - - - password - - - - databaseName - - - - description - - - - portNumber - - - - serverName - - - - loginTimeout - - - - dbSpecificMethods - - - - isolationLevel - - - - mapperName - - - - logTopic - - - - diff --git a/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/ra.xml b/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/ra.xml deleted file mode 100644 index 4c2f948f81..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/ds/src/main/rar/META-INF/ra.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - JOnAS Data Source RA - JOnAS Data Source RA - Objectweb - 1.0 - JDBC - 1.0 - - org.ow2.jonas.ee.jdbc.DataSourceMCFImpl - javax.sql.DataSource - org.ow2.jonas.ee.jdbc.DataSourceImpl - java.sql.Connection - org.ow2.jonas.ee.jdbc.ConnectionImpl - XATransaction - - dsClass - java.lang.String - - - - URL - java.lang.String - - - - user - java.lang.String - - - - password - java.lang.String - - - - databaseName - java.lang.String - - - - description - java.lang.String - - - - portNumber - java.lang.String - - - - serverName - java.lang.String - - - - loginTimeout - java.lang.String - 0 - - - dbSpecificMethods - java.lang.String - - - - isolationLevel - java.lang.String - - - - mapperName - java.lang.String - - - - logTopic - java.lang.String - - - false - - diff --git a/jonas/modules/ee-components/jca/jdbc/glue/pom.xml b/jonas/modules/ee-components/jca/jdbc/glue/pom.xml deleted file mode 100644 index 201ed6799c..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-jdbc - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-jdbc-glue - jar - JOnAS :: EE Components :: JCA :: JDBC :: Glue - - - - - org.ow2.jonas - jonas-resource-core - ${project.version} - provided - - - org.ow2.spec.ee - ow2-connector-1.5-spec - provided - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionImpl.java deleted file mode 100644 index 99a6b6e4ac..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionImpl.java +++ /dev/null @@ -1,301 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.io.PrintWriter; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.sql.Connection; -import java.sql.SQLException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.resource.internal.IJDBCConnection; -import org.ow2.jonas.resource.internal.SQLManager; -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; - -/** - * The class ConnectionImpl provides the Connection implementation for - * encapsulating JDBC {@link Connection}s - * @author Eric hardesty -*/ -public class ConnectionImpl implements InvocationHandler { - - public Logger trace = null; - - ManagedConnectionImpl mc = null; - - Connection connection = null; - - PrintWriter pw = null; - - long key = 0; - - String user = ""; - - private SQLManager conman = null; - - private ManagedConnectionInfo mci = null; - - /** - * Traces are enabled ? - */ - private final boolean isDebugging; - - protected ConnectionImpl(final ManagedConnectionImpl _mc, final Connection _con, final long _key, final PrintWriter _pw) { - mc = _mc; - connection = _con; - key = _key; - pw = _pw; - trace = mc.trace; - isDebugging = trace.isLoggable(BasicLevel.DEBUG); - if (connection == null) { - trace.log(BasicLevel.ERROR, "Init ConnectionImpl with a null Connection"); - } - } - - /** - * @return true if connection is physically closed - */ - public boolean isPhysicallyClosed() throws SQLException { - if (isDebugging) { - trace.log(BasicLevel.DEBUG, ""); - } - return (connection.isClosed()); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ee.jdbc.IJDBCConnection#setJonasInfo(org.ow2.jonas.resource.cm.ManagedConnectionInfo, org.ow2.jonas.resource.SQLManager) - */ - public void setJonasInfo(final ManagedConnectionInfo _mci, final SQLManager _conman) { - mci = _mci; - conman = _conman; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ee.jdbc.IJDBCConnection#setUser() - */ - public void setUser() { - try { - user = mc.getMetaData().getUserName(); - } catch (Exception ex) { - } - } - - - - - /** - * Processes a method invocation on a proxy instance and returns the result. - * This method will be invoked on an invocation handler when a method is - * invoked on a proxy instance that it is associated with. - * @param proxy the proxy instance that the method was invoked on - * @param method the Method instance corresponding to the - * interface method invoked on the proxy instance. - * @param args an array of objects containing the values of the arguments - * passed in the method invocation on the proxy instance, or - * null if interface method takes no arguments. - * @return the value to return from the method invocation on the proxy - * instance. - * @throws Throwable the exception to throw from the method invocation on - * the proxy instance. The exception's type must be assignable - * either to any of the exception types declared in the - * throws clause of the interface method or to the - * unchecked exception types java.lang.RuntimeException - * or java.lang.Error. If a checked exception is - * thrown by this method that is not assignable to any of the - * exception types declared in the throws clause of - * the interface method, then an UndeclaredThrowableException - * containing the exception that was thrown by this method will be - * thrown by the method invocation on the proxy instance. - */ - public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { - // Methods on the Object.class are not send on the connection impl - if (method.getDeclaringClass().getName().equals("java.lang.Object")) { - return handleObjectMethods(method, args); - } - - // Methods that are part of the IJDBCConnection interface - if ("setJonasInfo".equals(method.getName())) { - setJonasInfo((ManagedConnectionInfo) args[0], (SQLManager) args[1]); - return null; - } else if ("isClosed".equals(method.getName())) { - return isClosed(); - } else if ("getKey".equals(method.getName())) { - return getKey(); - } else if ("isPhysicallyClosed".equals(method.getName())) { - return Boolean.valueOf(isPhysicallyClosed()); - } else if ("close".equals(method.getName())) { - close(proxy); - return null; - } else if ("setSignature".equals(method.getName())) { - setSignature((Long) args[0]); - return null; - } else if ("setUser".equals(method.getName())) { - setUser(); - return null; - } else if ("prepareStatement".equals(method.getName()) && conman != null && conman.getMaxPstmtPoolSize() >= 0) { - if (isDebugging) { - trace.log(BasicLevel.DEBUG, method.getName()); - } - try { - checkContext(); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "checkContext error"); - throw new SQLException("JOnAS JDBC: " + e.getMessage()); - } - if (args.length == 1) { - return conman.getPStatement(mci, connection, user, (String) args[0]); - } else if (args.length == 3) { - return conman.getPStatement(mci, connection, user, (String) args[0], (Integer) args[1], (Integer) args[2]); - } else if (args.length == 4) { - return conman.getPStatement(mci, connection, user, (String) args[0], (Integer) args[1], (Integer) args[2], (Integer) args[3]); - } else if (args.length == 2) { - String sql = (String) args[0]; - Object val = args[1]; - if (val.getClass().isArray()) { - if (int.class.equals(val.getClass().getComponentType())) { - return conman.getPStatement(mci, connection, user, sql, toArrayInt((Integer[]) val)); - } else if (String.class.equals(val.getClass().getComponentType())) { - return conman.getPStatement(mci, connection, user, sql, (String[]) val); - } - } else if (val instanceof Integer) { - return conman.getPStatement(mci, connection, user, sql, (Integer) val); - } - } - throw new IllegalStateException("Invalid call with arguments '" + args + "' for the method '" + method.getName() + "'."); - } else { - if (isDebugging) { - trace.log(BasicLevel.DEBUG, method.getName()); - } - try { - checkContext(); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "checkContext error"); - throw new SQLException("JOnAS JDBC: " + e.getMessage()); - } - - // Then delegate to the physicalConnection object - try { - return method.invoke(connection, args); - } catch (InvocationTargetException e) { - // Check if it is an SQLException - Throwable targetException = e.getTargetException(); - // Rethrow Exception - throw targetException; - } - - } - } - - public static int[] toArrayInt(final Integer[] ints) { - int[] values = new int[ints.length]; - int i=0; - for (Integer integer : ints) { - values[i++] = integer; - } - return values; - } - - - /** - * Manages all methods of java.lang.Object class. - * @param method the Method instance corresponding to the - * interface method invoked on the proxy instance. The declaring - * class of the Method object will be the interface - * that the method was declared in, which may be a superinterface of - * the proxy interface that the proxy class inherits the method - * through. - * @param args an array of objects containing the values of the arguments - * passed in the method invocation on the proxy instance - * @return the value of the called method. - */ - protected Object handleObjectMethods(final Method method, final Object[] args) { - String methodName = method.getName(); - - if (methodName.equals("equals")) { - // equals with a proxy - if (Proxy.isProxyClass(args[0].getClass())) { - return this.equals(Proxy.getInvocationHandler(args[0])); - } - return Boolean.valueOf(this.equals(args[0])); - } else if (methodName.equals("toString")) { - return this.toString(); - } else if (methodName.equals("hashCode")) { - return Integer.valueOf(this.hashCode()); - } else { - throw new IllegalStateException("Method '" + methodName + "' is not present on Object.class."); - } - } - - public void close(final Object proxy) throws SQLException { - if (isDebugging) { - trace.log(BasicLevel.DEBUG, ""); - } - try { - if (key != 0) { - mc.close((IJDBCConnection) proxy); - key = 0; - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "error"); - e.printStackTrace(); - throw new SQLException("JOnAS JDBC: " + e.getMessage()); - } - } - - public boolean isClosed() throws SQLException { - if (isDebugging) { - trace.log(BasicLevel.DEBUG, ""); - } - return (key == 0); - } - - private void checkContext() throws Exception { - if (key == 0) { - trace.log(BasicLevel.ERROR, "Connection is closed"); - throw new Exception("Connection is closed"); - } - if (key != mc.getSignature()) { - if (mc.getSignature() == 0) { - mc.setSignature(key); - } else { - trace.log(BasicLevel.ERROR, "not current active Connection "); - throw new Exception("Connection w/sig(" + key + ") is not current active Connection (" - + mc.getSignature() + ")"); - } - } - } - - public void setSignature(final long sig) { - key = sig; - } - - public long getKey() { - return key; - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionManagerImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionManagerImpl.java deleted file mode 100644 index 8de338a264..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionManagerImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import javax.resource.spi.ManagedConnection; - -import java.io.Serializable; -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnectionFactory; - -/** - * Description of the ConnectionManagerImpl. Default ConnectionManager - * for the JDBC RA. - * - *@author Eric Hardesty - *@created 22 May 2003 - */ -public class ConnectionManagerImpl - implements ConnectionManager, Serializable -{ - - public ConnectionManagerImpl() - { - } - - /** - * No pooling is done for non-managed connections, just get a new MC and - * connection to the database. - * - */ - public Object allocateConnection(ManagedConnectionFactory mcf, ConnectionRequestInfo info) - throws ResourceException - { - ManagedConnection mc = mcf.createManagedConnection(null, info); - return mc.getConnection(null, info); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionPoolMCFImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionPoolMCFImpl.java deleted file mode 100644 index 83d109e36d..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionPoolMCFImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import javax.sql.ConnectionPoolDataSource; - -/** - * JDBC RA connection pool MCF implmentation - * @author Eric Hardesty - * Contributor(s): - * - */ -public class ConnectionPoolMCFImpl - extends ManagedConnectionFactoryImpl { - - - ConnectionPoolDataSource ds = null; - - public ManagedConnection createManagedConnection(Subject subject, - ConnectionRequestInfo cxReq) - throws ResourceException { - - PasswordCredential pc = getPasswordCredential(this, subject, cxReq, pw); - if(ds == null) { - try { - ds = (ConnectionPoolDataSource) getDataSource(this, pc, trace); - } catch(Exception ex) { - throw new ResourceException(ex.getMessage(), ex); - } - } - - javax.sql.PooledConnection pConnection = null; - java.sql.Connection connection = null; - try { - if(cxReq != null) { - ConnectionRequestInfoImpl cx = (ConnectionRequestInfoImpl) cxReq; - pConnection = ds.getPooledConnection(cx.getUser(), cx.getPassword()); - } else if (pc != null){ - pConnection = ds.getPooledConnection(pc.getUserName(), new String(pc.getPassword())); - } else if (mcfData.getMCFData(MCFData.USER).length() > 0){ - pConnection = ds.getPooledConnection(mcfData.getMCFData(MCFData.USER), - mcfData.getMCFData(MCFData.PASSWORD)); - } else { - pConnection = ds.getPooledConnection(); - } - if (pConnection != null) { - connection = pConnection.getConnection(); - } - } - catch(SQLException sqle) - { - throw new ResourceAllocationException("The connection could not be allocated: " + sqle.getMessage(), sqle); - } - return new ManagedConnectionImpl(this, pc, connection, pConnection, null, null); - } - - /* Determine if the factories are equal - */ - public boolean equals(Object obj) { - if (obj instanceof ConnectionPoolMCFImpl) { - return mcfData.equals(((ConnectionPoolMCFImpl)obj).mcfData); - } - else { - return false; - } - } - - // JOnAS JDBC RA ConnectionPool config properties - public String getDatabaseName() - { - return mcfData.getMCFData(MCFData.DATABASENAME); - } - - public void setDatabaseName(String val) - { - mcfData.setMCFData(MCFData.DATABASENAME, val); - } - - public String getDescription() - { - return mcfData.getMCFData(MCFData.DESCRIPTION); - } - - public void setDescription(String val) - { - mcfData.setMCFData(MCFData.DESCRIPTION, val); - } - - public String getPortNumber() - { - return mcfData.getMCFData(MCFData.PORTNUMBER); - } - - public void setPortNumber(String val) - { - mcfData.setMCFData(MCFData.PORTNUMBER, val); - } - - public String getServerName() - { - return mcfData.getMCFData(MCFData.SERVERNAME); - } - - public void setServerName(String val) - { - mcfData.setMCFData(MCFData.SERVERNAME, val); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionRequestInfoImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionRequestInfoImpl.java deleted file mode 100644 index 603545ad13..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ConnectionRequestInfoImpl.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.io.Serializable; -import javax.resource.spi.ConnectionRequestInfo; - -/** - * Basic implementation of JCA {@link ConnectionRequestInfo}. - * @author Eric Hardesty - */ -public class ConnectionRequestInfoImpl - implements ConnectionRequestInfo, Serializable { - - /* User/password for this connection */ - String user; - String password; - - public ConnectionRequestInfoImpl() { - user = ""; - password = ""; - } - - public ConnectionRequestInfoImpl(String _user, String _password) { - user = _user; - password = _password; - } - - public boolean equals(Object obj) { - if(obj == null) { - return false; - } - if(obj instanceof ConnectionRequestInfoImpl) { - ConnectionRequestInfoImpl cri = - (ConnectionRequestInfoImpl) obj; - // TODO Object.equals(Object) should be used here - return (user == cri.user) && (password == cri.password); - } else { - return false; - } - } - - public String getPassword() { - return password; - } - - public String getUser() { - return user; - } - - public int hashCode() { - String val = "" + user + password; - return val.hashCode(); - } - - public void setPassword(String pass) { - password = pass; - } - - public void setUser(String _user) { - user = _user; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceImpl.java deleted file mode 100644 index 7b1340944b..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceImpl.java +++ /dev/null @@ -1,169 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.io.PrintWriter; -import java.io.Serializable; - -import java.sql.Connection; -import java.sql.SQLException; - -import javax.naming.Reference; - -import javax.resource.Referenceable; -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionManager; - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Description of the DataSourceImpl. This is the dataSource for the JDBC RA. - * @author Eric Hardesty - * @created 22 May 2003 - */ -public class DataSourceImpl implements javax.sql.DataSource, Serializable, Referenceable { - - private ConnectionManager cm; - - private ManagedConnectionFactoryImpl mcf; - - private PrintWriter pw; - - private Reference reference; - - int loginTimeout = 0; - - /** - * Logging (debug enabled) - */ - private final boolean isDebugOn; - - public DataSourceImpl(ManagedConnectionFactoryImpl _mcf, ConnectionManager _cm) { - if (_cm == null) { - cm = new ConnectionManagerImpl(); - } else { - cm = _cm; - } - mcf = _mcf; - isDebugOn = mcf.trace.isLoggable(BasicLevel.DEBUG); - } - - public Connection getConnection() throws SQLException { - if (isDebugOn) { - mcf.trace.log(BasicLevel.DEBUG, ""); - } - try { - Connection con = (Connection) cm.allocateConnection(mcf, null); - if (con == null) { - SQLException se = new SQLException("Null connection object returned"); - throw se; - } - return con; - } catch (ResourceException re) { - throw new SQLException(re.getMessage()); - } - } - - public Connection getConnection(String user, String pwd) throws SQLException { - if (isDebugOn) { - mcf.trace.log(BasicLevel.DEBUG, "" + user); - } - try { - ConnectionRequestInfoImpl info = new ConnectionRequestInfoImpl(user, pwd); - Connection con = (Connection) cm.allocateConnection(mcf, info); - if (con == null) { - SQLException se = new SQLException("Null connection object returned"); - throw se; - } - return con; - } catch (ResourceException re) { - throw new SQLException(re.getMessage()); - } - } - - public int getLoginTimeout() throws SQLException { - return loginTimeout; - } - - public PrintWriter getLogWriter() throws SQLException { - return pw; - } - - public Reference getReference() { - return reference; - } - - public void setLoginTimeout(int _loginTimeout) throws SQLException { - loginTimeout = _loginTimeout; - } - - public void setLogWriter(PrintWriter _pw) throws SQLException { - pw = _pw; - } - - public void setReference(Reference _ref) { - reference = _ref; - } - - /* JOnAS JDBC implementation for CMP */ - - public String getMapperName() { - String mn = mcf.getMapperName(); - if (isDebugOn) { - mcf.trace.log(BasicLevel.DEBUG, mn); - } - return mn; - } - - /** - * Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. - * Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result - * of recursively calling isWrapperFor on the wrapped object. If this does not implement the interface and is not a wrapper, - * return false. This method should be implemented as a low-cost operation compared to unwrap so that callers can use this method - * to avoid expensive unwrap calls that may fail. If this method returns true then calling unwrap with the same argument should succeed. - * @param iface a Class defining an interface. - * @returns true if this implements the interface or directly or indirectly wraps an object that does. - * @throws SQLException if an error occurs while determining whether this is a wrapper for an object with the given interface. - */ - public boolean isWrapperFor(Class iface) throws SQLException { - return false; - } - - /** - * Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. - * If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper - * and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. - * Otherwise return the the result of calling unwrap recursively on the wrapped object or a proxy for that result. - * If the receiver is not a wrapper and does not implement the interface, then an SQLException is thrown. - * @param iface A Class defining an interface that the result must implement. - * @returns an object that implements the interface. May be a proxy for the actual implementing object. - * @throws SQLException If no object found that implements the interface - */ - public T unwrap(Class iface) throws SQLException { - return null; - } - - -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceMCFImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceMCFImpl.java deleted file mode 100644 index 231ea9a11f..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DataSourceMCFImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import javax.sql.DataSource; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class DataSourceMCFImpl - extends ManagedConnectionFactoryImpl { - - DataSource ds = null; - - public ManagedConnection createManagedConnection(Subject subject, - ConnectionRequestInfo cxReq) - throws ResourceException { - - PasswordCredential pc = getPasswordCredential(this, subject, cxReq, pw); - if(ds == null) { - try { - ds = (DataSource) getDataSource(this, pc, trace); - } catch(Exception ex) { - throw new ResourceException(ex.getMessage(), ex); - } - } - java.sql.Connection connection = null; - try { - if(cxReq != null) { - ConnectionRequestInfoImpl cx = (ConnectionRequestInfoImpl) cxReq; - connection = ds.getConnection(cx.getUser(), cx.getPassword()); - } else if (pc != null){ - connection = ds.getConnection(pc.getUserName(), new String(pc.getPassword())); - } else if (mcfData.getMCFData(MCFData.USER).length() > 0){ - connection = ds.getConnection(mcfData.getMCFData(MCFData.USER), - mcfData.getMCFData(MCFData.PASSWORD)); - } else { - connection = ds.getConnection(); - } - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Connection object returned is "+connection); - } - } catch(SQLException sqle) { - throw new ResourceAllocationException("The connection could not be allocated: " + sqle.getMessage(), sqle); - } - if (connection == null) { - trace.log(BasicLevel.ERROR, "DataSource " + ds + " returned a null Connection"); - throw new ResourceAllocationException("DataSource returned a null Connection"); - } - return new ManagedConnectionImpl(this, pc, connection, null, null, null); - } - - /* Determine if the factories are equal - */ - public boolean equals(Object obj) { - if (obj instanceof DataSourceMCFImpl) { - return mcfData.equals(((DataSourceMCFImpl)obj).mcfData); - } - else { - return false; - } - } - - // JOnAS JDBC RA DataSource config properties - public String getDatabaseName() - { - return mcfData.getMCFData(MCFData.DATABASENAME); - } - - public void setDatabaseName(String val) - { - mcfData.setMCFData(MCFData.DATABASENAME, val); - } - - public String getDescription() - { - return mcfData.getMCFData(MCFData.DESCRIPTION); - } - - public void setDescription(String val) - { - mcfData.setMCFData(MCFData.DESCRIPTION, val); - } - - public String getPortNumber() - { - return mcfData.getMCFData(MCFData.PORTNUMBER); - } - - public void setPortNumber(String val) - { - mcfData.setMCFData(MCFData.PORTNUMBER, val); - } - - public String getServerName() - { - return mcfData.getMCFData(MCFData.SERVERNAME); - } - - public void setServerName(String val) - { - mcfData.setMCFData(MCFData.SERVERNAME, val); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverManagerMCFImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverManagerMCFImpl.java deleted file mode 100644 index 5c5e6307e0..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverManagerMCFImpl.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - - -import java.sql.DriverManager; -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class DriverManagerMCFImpl - extends ManagedConnectionFactoryImpl { - - @Override - public ManagedConnection createManagedConnection(final Subject subject, - final ConnectionRequestInfo cxReq) - throws ResourceException { - - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG,"subject:"+subject+" connectionRequest:"+cxReq); - } - PasswordCredential pc = getPasswordCredential(this, subject, cxReq, pw); - String clsName = null; - DriverWrapper dWrap = null; - try - { - clsName = mcfData.getMCFData(MCFData.DSCLASS); - ClassLoader loader = this.getClass().getClassLoader(); - java.sql.Driver d = (java.sql.Driver) Class.forName(clsName, true, loader).newInstance(); - dWrap = new DriverWrapper(d); - DriverManager.registerDriver(dWrap); - } - catch(ClassNotFoundException cnfe) - { - // Fallback: try TCCL - try { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - java.sql.Driver d = (java.sql.Driver) Class.forName(clsName, true, loader).newInstance(); - dWrap = new DriverWrapper(d); - DriverManager.registerDriver(dWrap); - } catch (Exception e) { - throw new ResourceException("Class Name not found:" + clsName, e); - } - } - catch(Exception ex) - { - throw new ResourceException("Error loading driver manager: " + clsName+" "+ex.getMessage(), ex); - } - - java.sql.Connection connection = null; - try { - String val = null; - if ((val = mcfData.getMCFData(MCFData.LOGINTIMEOUT)) != null) { - if (val.length() > 0) { - DriverManager.setLoginTimeout(Integer.parseInt(val)); - } - } - if(cxReq != null) { - ConnectionRequestInfoImpl cx = (ConnectionRequestInfoImpl) cxReq; - connection = DriverManager.getConnection(mcfData.getMCFData(MCFData.URL), - cx.getUser(), cx.getPassword()); - } else if (pc != null){ - connection = DriverManager.getConnection(mcfData.getMCFData(MCFData.URL), - pc.getUserName(), new String(pc.getPassword())); - } else { - connection = DriverManager.getConnection(mcfData.getMCFData(MCFData.URL), - mcfData.getMCFData(MCFData.USER), - mcfData.getMCFData(MCFData.PASSWORD)); - } - } - catch(SQLException sqle) - { - sqle.printStackTrace(); - throw new ResourceAllocationException("The connection could not be allocated: " + sqle.getMessage(), sqle); - } - catch(Exception ex) - { - ex.printStackTrace(); - throw new ResourceAllocationException("Error on allocation: " + ex.getMessage(), ex); - } - ManagedConnectionImpl mci = new ManagedConnectionImpl(this, pc, connection, null, null, dWrap); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Create Mc="+mci+" with connection="+connection); - } - return mci; - } - - /* Determine if the factories are equal - */ - @Override - public boolean equals(final Object obj) { - if (obj instanceof DriverManagerMCFImpl) { - return mcfData.equals(((DriverManagerMCFImpl)obj).mcfData); - } - else { - return false; - } - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverWrapper.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverWrapper.java deleted file mode 100644 index db49c386b2..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/DriverWrapper.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.sql.Connection; -import java.sql.Driver; -import java.sql.DriverPropertyInfo; -import java.sql.SQLException; -import java.util.Properties; - -class DriverWrapper implements Driver { - private Driver driver; - - DriverWrapper(Driver d) { - this.driver = d; - } - - public boolean acceptsURL(String u) throws SQLException { - return this.driver.acceptsURL(u); - } - - public Connection connect(String u, Properties p) throws SQLException { - return this.driver.connect(u, p); - } - - public int getMajorVersion() { - return this.driver.getMajorVersion(); - } - - public int getMinorVersion() { - return this.driver.getMinorVersion(); - } - - public DriverPropertyInfo[] getPropertyInfo(String u, Properties p) throws SQLException { - return this.driver.getPropertyInfo(u, p); - } - - public boolean jdbcCompliant() { - return this.driver.jdbcCompliant(); - } -} - diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MCFData.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MCFData.java deleted file mode 100644 index 4eff75d06b..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MCFData.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.util.Enumeration; -import java.util.Properties; - -public class MCFData { - - /* Properties object to hold all MCF config information */ - Properties mcfData = null; - - public static String dsMethodNames[] = { - "setDSClass", - "setDbSpecificMethods", - "setDatabaseName", - "setDataSourceName", - "setDescription", - "setPortNumber", - "setServerName", - "setURL", - "setUser", - "setPassword", - "setLoginTimeout", - "setIsolationLevel", - "setInitialPoolSize", - "setMinPoolSize", - "setMaxIdleTime", - "setMaxPoolSize", - "setMaxStatements", - "setPropertyCycle", - "setMapperName", - "setLogTopic", - "setConnCheckLevel", - "setConnMaxAge", - "setConnTestStmt", - }; - // Config properties for JDBC drivers - public static final int DSCLASS = 0; - public static final int DBSPECIFICMETHODS = 1; - public static final int DATABASENAME = 2; - public static final int DATASOURCENAME = 3; - public static final int DESCRIPTION = 4; - public static final int PORTNUMBER = 5; - public static final int SERVERNAME = 6; - public static final int URL = 7; - public static final int USER = 8; - public static final int PASSWORD = 9; - public static final int LOGINTIMEOUT = 10; - public static final int ISOLATIONLEVEL = 11; - - // Config values for JDBC 3.0 - public static final int INITIALPOOLSIZE = 12; - public static final int MINPOOLSIZE = 13; - public static final int MAXIDLETIME = 14; - public static final int MAXPOOLSIZE = 15; - public static final int MAXSTATEMENTS = 16; - public static final int PROPERTYCYCLE = 17; - - //This must be set to the last nonJOnAS config item - public static final int JONASOFFSET = 17; - - // JOnAS specific items - // Config values for CMP 2.0 use with JORM - public static final int MAPPERNAME = 18; - - // Config values for JOnAS logger - public static final int LOGTOPIC = 19; - - // Config values for JOnAS connection testing - public static final int CONNCHECKLEVEL = 20; - public static final int CONNMAXAGE = 21; - public static final int CONNTESTSTMT = 22; - - - public MCFData() { - mcfData = new Properties(); - } - - - public boolean equals(Object obj) { - if (obj instanceof MCFData) { - return mcfData.equals(((MCFData)obj).mcfData); - } else { - return false; - } - } - - /* Return the specified property */ - public String getMCFData(int prop) { - return mcfData.getProperty(""+prop); - } - - public int hashCode() { - return mcfData.hashCode(); - } - - /* Set the specified property/value combination */ - public void setMCFData(int prop, String val) { - mcfData.setProperty(""+prop, val); - } - - public String getProperty(String key) { - return mcfData.getProperty(key); - } - - public Enumeration getProperties() { - return mcfData.propertyNames(); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionFactoryImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionFactoryImpl.java deleted file mode 100644 index 0a0cd9fffc..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionFactoryImpl.java +++ /dev/null @@ -1,720 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.io.ByteArrayInputStream; -import java.io.PrintWriter; -import java.io.Serializable; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.SecurityException; -import javax.resource.spi.ValidatingManagedConnectionFactory; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; - -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.LoggerFactory; -import org.objectweb.util.monolog.wrapper.printwriter.LoggerImpl; - -/** - * @author Eric hardesty - */ -public abstract class ManagedConnectionFactoryImpl implements ManagedConnectionFactory, - ValidatingManagedConnectionFactory, - Serializable { - - // Factory config data property - MCFData mcfData = null; - - int hashcode = 0; - - PrintWriter pw; - - String logTopic = ""; - - protected static final String LOGGER_FACTORY = "org.objectweb.util.monolog.loggerFactory"; - - public Logger trace = null; - - /** - * Debug level ? - */ - private boolean isEnabledDebug = false; - - /** - * connection check level - */ - private int checkLevel = 0; - - /** - * jdbc test statement - */ - private String testStmt = null; - - /** - * Constants for use with JDBC connection level - */ - public final static int JDBC_NO_TEST = 0; - public final static int JDBC_CHECK_CONNECTION = 1; - public final static int JDBC_SEND_STATEMENT = 2; - public final static int JDBC_KEEP_ALIVE = 3; - - public ManagedConnectionFactoryImpl() { - pw = null; - mcfData = new MCFData(); - } - - /* Abstract methods, specific implementation is different - * for each type of MCF - */ - public abstract ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo cxReq) - throws ResourceException; - - public abstract boolean equals(Object obj); - - /* Common methods for each MCF type - */ - public Object createConnectionFactory() throws ResourceException { - return new DataSourceImpl(this, null); - } - - public Object createConnectionFactory(ConnectionManager cxMgr) throws ResourceException { - return new DataSourceImpl(this, cxMgr); - } - - public void getLogger(String _logTopic) throws Exception { - if (trace == null || !(logTopic.equals(_logTopic))) { - logTopic = _logTopic; // set the log topic value - // Get the trace module: - try { - LoggerFactory mf = Log.getLoggerFactory(); - if (logTopic != null && logTopic.length() > 0) { - trace = mf.getLogger(logTopic); - } else if (pw != null) { - trace = new LoggerImpl(pw); - } else { - trace = mf.getLogger("org.ow2.jonas.ee.jdbc.RA"); - } - } catch (Exception ex) { - try { - if (pw != null) { - trace = new LoggerImpl(pw); - } - } catch (Exception e3) { - throw new Exception("Cannot get logger"); - } - } - } - isEnabledDebug = trace.isLoggable(BasicLevel.DEBUG); - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "getLogger(" + _logTopic + ")"); - } - } - - public PrintWriter getLogWriter() throws ResourceException { - return pw; - } - - public int hashCode() { - if (hashcode == 0) { - hashcode = mcfData.hashCode(); - try { - getLogger(mcfData.getMCFData(MCFData.LOGTOPIC)); - } catch (Exception ex) { - } - } - - return hashcode; - } - - public ManagedConnection matchManagedConnections(Set connectionSet, Subject subject, ConnectionRequestInfo cxReq) - throws ResourceException { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "matchManagedConnection(" + connectionSet + "," + subject + "," + cxReq + ")"); - } - if (connectionSet == null) { - return null; - } - javax.resource.spi.security.PasswordCredential pc = getPasswordCredential(this, subject, cxReq, pw); - Iterator it = connectionSet.iterator(); - Object obj = null; - ManagedConnectionImpl mc = null; - while (it.hasNext()) { - try { - obj = it.next(); - if (obj instanceof ManagedConnectionImpl) { - ManagedConnectionImpl mc1 = (ManagedConnectionImpl) obj; - if (pc == null && equals(mc1.mcf)) { - mc = mc1; - break; - } - if (pc != null && pc.equals(mc1.pc)) { - mc = mc1; - break; - } - } - } catch (Exception ex) { - throw new ResourceException(ex.getMessage(), ex); - } - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "matchManagedConnection returns(" + mc + ")"); - } - return mc; - } - - public void setLogWriter(PrintWriter _pw) throws ResourceException { - pw = _pw; - } - - /* Common getter/setters */ - public String getDbSpecificMethods() { - return mcfData.getMCFData(MCFData.DBSPECIFICMETHODS); - } - - public void setDbSpecificMethods(String val) { - mcfData.setMCFData(MCFData.DBSPECIFICMETHODS, val); - } - - public String getDsClass() { - return mcfData.getMCFData(MCFData.DSCLASS); - } - - public void setDsClass(String val) { - mcfData.setMCFData(MCFData.DSCLASS, val); - } - - public String getURL() { - return mcfData.getMCFData(MCFData.URL); - } - - public void setURL(final String val) { - mcfData.setMCFData(MCFData.URL, val); - } - - public String getIsolationLevel() { - String str = mcfData.getMCFData(MCFData.ISOLATIONLEVEL); - String retStr = "default"; - - if (str.length() == 0 || str.equals("-1")) { - return retStr; - } - - int isolationLevel; - try { - isolationLevel = Integer.parseInt(str); - } catch (Exception ex) { - return retStr; - } - - if (isolationLevel == Connection.TRANSACTION_SERIALIZABLE) { - retStr = "serializable"; - } else if (isolationLevel == Connection.TRANSACTION_NONE) { - retStr = "none"; - } else if (isolationLevel == Connection.TRANSACTION_READ_COMMITTED) { - retStr = "read_committed"; - } else if (isolationLevel == Connection.TRANSACTION_READ_UNCOMMITTED) { - retStr = "read_uncommitted"; - } else if (isolationLevel == Connection.TRANSACTION_REPEATABLE_READ) { - retStr = "repeatable_read"; - } - return retStr; - } - - public void setIsolationLevel(String val) { - int isolationLevel = -1; - - if (val.equals("serializable")) { - isolationLevel = Connection.TRANSACTION_SERIALIZABLE; - } else if (val.equals("none")) { - isolationLevel = Connection.TRANSACTION_NONE; - } else if (val.equals("read_committed")) { - isolationLevel = Connection.TRANSACTION_READ_COMMITTED; - } else if (val.equals("read_uncommitted")) { - isolationLevel = Connection.TRANSACTION_READ_UNCOMMITTED; - } else if (val.equals("repeatable_read")) { - isolationLevel = Connection.TRANSACTION_REPEATABLE_READ; - } - - mcfData.setMCFData(MCFData.ISOLATIONLEVEL, "" + isolationLevel); - } - - public String getLoginTimeout() { - return mcfData.getMCFData(MCFData.LOGINTIMEOUT); - } - - public void setLoginTimeout(String val) { - mcfData.setMCFData(MCFData.LOGINTIMEOUT, val); - } - - public String getLogTopic() { - return mcfData.getMCFData(MCFData.LOGTOPIC); - } - - public void setLogTopic(String val) { - mcfData.setMCFData(MCFData.LOGTOPIC, val); - try { - getLogger(val.trim()); - } catch (Exception ex) { - } - } - - public String getMapperName() { - return mcfData.getMCFData(MCFData.MAPPERNAME); - } - - public void setMapperName(String val) { - mcfData.setMCFData(MCFData.MAPPERNAME, val); - } - - public String getPassword() { - return mcfData.getMCFData(MCFData.PASSWORD); - } - - public void setPassword(String val) { - mcfData.setMCFData(MCFData.PASSWORD, val); - } - - public String getUser() { - return mcfData.getMCFData(MCFData.USER); - } - - public void setUser(String val) { - mcfData.setMCFData(MCFData.USER, val); - } - - /** - * Set the level of checking on jdbc Connections - * - * @param lev 0=no check, 1=ckeck open, 2=try stm, 3=keep alive - */ - public void setJdbcConnLevel(int lev) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "checkLevel =" + checkLevel); - } - checkLevel = lev; - } - - public int getJdbcConnLevel() { - return checkLevel; - } - - /** - * Set the tesqt statement to use, in case of check level 2 or 3. - * - * @stmt sql statement - */ - public void setJdbcConnTestStmt(String stmt) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "testStmt =" + testStmt); - } - testStmt = stmt; - } - - public String getJdbcConnTestStmt() { - return testStmt; - } - - /** - * This method returns a set of invalid ManagedConnection objects chosen from - * a specified set of ManagedConnection objects. - * - * @param set of ManagedConnection to test - * - * @return Set of invalid Connections from the given set - * - * @throws ResourceException The operation failed - */ - public Set getInvalidConnections(Set connectionSet) throws ResourceException { - Set ret = new HashSet(); - if (checkLevel != JDBC_KEEP_ALIVE) { - return ret; - } - if (testStmt == null || testStmt.length() == 0) { - trace.log(BasicLevel.WARN, "jdbc-test-statement not set in jonas-ra.xml"); - return ret; - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Keep Alive Connections"); - } - Iterator it = connectionSet.iterator(); - while (it.hasNext()) { - try { - ManagedConnectionImpl mci = (ManagedConnectionImpl) it.next(); - if (!mci.isValid()) { - ret.add(mci); - } - } catch (ClassCastException e) { - trace.log(BasicLevel.DEBUG, "ClassCastException", e); - } catch (Exception e) { - trace.log(BasicLevel.DEBUG, "exc:", e); - } - } - return ret; - } - - /** - * Returns the Password credential - * - * @param mcf ManagedConnectionFactory currently being used - * @param subject Subject associated with this call - * @param info ConnectionRequestInfo - * - * @return PasswordCredential for this user - */ - protected static synchronized PasswordCredential getPasswordCredential(ManagedConnectionFactory mcf, Subject subject, - ConnectionRequestInfo info, java.io.PrintWriter out) throws ResourceException { - - if (subject == null) { - if (info == null) { - return null; - } - ConnectionRequestInfoImpl crii = (ConnectionRequestInfoImpl) info; - PasswordCredential pc = new PasswordCredential(crii.user, crii.password.toCharArray()); - pc.setManagedConnectionFactory(mcf); - return pc; - } - Set cred = subject.getPrivateCredentials(PasswordCredential.class); - PasswordCredential pc = null; - for (Iterator iter = cred.iterator(); iter.hasNext(); ) { - PasswordCredential tmpPc = (PasswordCredential) iter.next(); - if (tmpPc.getManagedConnectionFactory().equals(mcf)) { - pc = tmpPc; - break; - } - } - if (pc == null) { - SecurityException se = new SecurityException("No PasswordCredential found"); - out.println("" + se); - throw se; - } - return pc; - } - - protected static synchronized Object getDataSource(ManagedConnectionFactoryImpl mcf, PasswordCredential pc, Logger trace) - throws ResourceException { - - MCFData prop = mcf.mcfData; - - String clsName = prop.getMCFData(MCFData.DSCLASS); - if (clsName == null || clsName.length() == 0) { - ResourceException re = new ResourceException("A DataSource (dsClass) value must be specified"); - trace.log(BasicLevel.INFO, re.getMessage()); - throw re; - } - Class dsClass = null; - Object dsObj = null; - try { - dsClass = Class.forName(clsName, true, Thread.currentThread().getContextClassLoader()); - dsObj = dsClass.newInstance(); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "dsClass(" + clsName + ") is " + dsObj); - } - } catch (ClassNotFoundException cnfe) { - trace.log(BasicLevel.WARN, "Class name not found:" + clsName); - throw new ResourceException("Class Name not found:" + clsName, cnfe); - } catch (Exception ex) { - trace.log(BasicLevel.WARN, "Error in class:" + clsName); - throw new ResourceException("Error in class: " + clsName + " " + ex.getMessage(), ex); - } - - Object[] param = new Object[1]; - String methodName = null; - String paramVal = null; - Method meth = null; - for (Enumeration e = prop.getProperties(); e.hasMoreElements(); ) { - int offset = Integer.parseInt((String) e.nextElement()); - methodName = MCFData.dsMethodNames[offset]; - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Method: " + methodName); - } - if (!(methodName.equals("setDSClass") || methodName.equals("setDbSpecificMethods") || offset > MCFData.JONASOFFSET)) { - try { - /* Determine if a String method exist */ - paramVal = prop.getProperty("" + offset); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "calling method " + methodName + " with String " + paramVal); - } - meth = dsClass.getMethod(methodName, new Class[]{String.class}); - param[0] = paramVal; - meth.invoke(dsObj, param); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "called method " + methodName + " with String " + paramVal); - } - } catch (NoSuchMethodException ns) { - try { - /* Valid case, determine if an Integer method exist */ - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "calling method " + methodName + " with int " + paramVal); - } - meth = dsClass.getMethod(methodName, new Class[]{int.class}); - param[0] = new Integer(paramVal); - meth.invoke(dsObj, param); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "called method " + methodName + " with int " + paramVal); - } - } catch (NoSuchMethodException nsme) { - // Valid case no String or Integer method continue thru - // remainder of properties - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "No such method " + methodName + " with " + paramVal); - } - } catch (NumberFormatException nfm) { - // Valid case cannot convert to an Integer - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Not found method " + methodName + " with " + paramVal); - } - } catch (Exception ex0) { - ex0.printStackTrace(); - throw new ResourceException("Error on method: " + methodName + " " + ex0.getMessage(), ex0); - } - } catch (IllegalArgumentException iae) { - ; - } catch (Exception ex) { - ex.printStackTrace(); - throw new ResourceException("Error on method: " + methodName + " " + ex.getMessage(), ex); - } - } - if (methodName.equals("setDbSpecificMethods")) { - Vector meths = new Vector(); - Vector methParams = new Vector(); - Vector methTypes = new Vector(); - try { - parseValues(prop.getProperty("" + offset), meths, methParams, methTypes, trace); - } catch (Exception ex1) { - throw new ResourceException("Error parsing dbSpecificMethods: " + ex1.getMessage()); - } - if (meths != null && meths.size() > 0) { - for (int i = 0; i < meths.size(); i++) { - try { - /* Determine if a String method exist */ - methodName = (String) meths.elementAt(i); - Class toPass = null; - String curMethType = (String) methTypes.elementAt(i); - if (curMethType.equalsIgnoreCase("String")) { - toPass = String.class; - param[0] = (String) methParams.elementAt(i); - } else if (curMethType.equalsIgnoreCase("Integer")) { - toPass = Integer.class; - param[0] = Integer.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equalsIgnoreCase("int")) { - toPass = int.class; - param[0] = Integer.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Float")) { - toPass = Float.class; - param[0] = Float.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("float")) { - toPass = float.class; - param[0] = Float.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Boolean")) { - toPass = Boolean.class; - param[0] = Boolean.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("boolean")) { - toPass = boolean.class; - param[0] = Boolean.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equalsIgnoreCase("Character")) { - toPass = Character.class; - param[0] = new Character(((String) methParams.elementAt(i)).charAt(0)); - } else if (curMethType.equalsIgnoreCase("char")) { - toPass = char.class; - param[0] = new Character(((String) methParams.elementAt(i)).charAt(0)); - } else if (curMethType.equals("Double")) { - toPass = Double.class; - param[0] = Double.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("double")) { - toPass = double.class; - param[0] = Double.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Byte")) { - toPass = Byte.class; - param[0] = Byte.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("byte")) { - toPass = byte.class; - param[0] = Byte.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Short")) { - toPass = Short.class; - param[0] = Short.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("short")) { - toPass = short.class; - param[0] = Short.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Long")) { - toPass = Long.class; - param[0] = Long.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("long")) { - toPass = long.class; - param[0] = Long.valueOf((String) methParams.elementAt(i)); - } else if (curMethType.equals("Properties") || curMethType.equals("java.lang.Properties")) { - toPass = Properties.class; - param[0] = buildProperties((String) methParams.elementAt(i), trace); - } - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "calling method " + methodName + " with " + param[0]); - } - meth = dsClass.getMethod(methodName, new Class[]{toPass}); - meth.invoke(dsObj, param); - } catch (NoSuchMethodException ns) { - throw new ResourceException("No such method: " + methodName + " " + ns.getMessage(), ns); - } catch (Exception ex) { - ex.printStackTrace(); - throw new ResourceException("Error on method: " + methodName + " " + ex.getMessage(), ex); - } - } - } - } - } - if (pc != null) { - try { - param[0] = pc.getUserName(); - meth = dsClass.getMethod("setUserName", new Class[] {Class.forName("String")}); - meth.invoke(dsObj, param); - - param[0] = new String(pc.getPassword()); - meth = dsClass.getMethod("setPassword", new Class[] {Class.forName("String")}); - meth.invoke(dsObj, param); - } catch (Exception ex) { - throw new ResourceException("Error on method: " + methodName + " " + ex.getMessage(), ex); - } - } - - if (trace.isLoggable(BasicLevel.DEBUG)) { - try { - meth = dsClass.getMethod("getURL", (Class[]) null); - trace.log(BasicLevel.DEBUG, "URL is " + meth.invoke(dsObj, (Object[]) null)); - } catch (Exception e) { - } - } - return dsObj; - - } - - private static Properties buildProperties(String val, Logger trace) - throws Exception { - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "" + val); - } - Properties ret = new Properties(); - - if (val.length() == 0) { - return ret; - } - String pairs = val.substring(1, val.length() - 1); - String parseVal = pairs.replace(',', '\n'); - try { - ByteArrayInputStream valStream = new ByteArrayInputStream(parseVal.getBytes()); - ret.load(valStream); - } catch (Exception ex) { - ex.printStackTrace(); - throw new Exception("Invalid value specified for Properties parameter in dbSpecificMethods"); - } - - return ret; - } - - private static void parseValues(String val, Vector vMeth, Vector vValues, Vector vTypes, Logger trace) - throws Exception { - char delim = ':'; - boolean done = false; - String methName = null; - int offset = 0; - boolean parsed = false; - String parseVal = val.trim(); - String typeVal = ""; - String valVal = ""; - - if (parseVal.length() == 0) { - return; - } - if (parseVal.startsWith(":")) { - delim = parseVal.charAt(1); - parseVal = parseVal.substring(2); - } - while (!parsed) { - offset = parseVal.indexOf('='); - if (offset < 0) { - throw new Exception("Invalid value specified for dbSpecificMethods"); - } - methName = parseVal.substring(0, offset); - vMeth.add(methName); - parseVal = parseVal.substring(offset + 1); - if (parseVal.charAt(0) == delim) { - valVal = ""; - } else { - offset = parseVal.indexOf(delim); - if (offset < 0) { - valVal = parseVal; - offset = valVal.length() - 1; - } else { - valVal = parseVal.substring(0, offset); - } - } - vValues.add(valVal); - if (offset < 0) { - parsed = true; - } else { - parseVal = parseVal.substring(offset + 1); - if (parseVal.length() == 0) { - parsed = true; - } - } - if (parseVal.startsWith("" + delim)) { - parseVal = parseVal.substring(1); - offset = parseVal.indexOf(delim); - if (offset < 0) { - typeVal = parseVal; - } else { - typeVal = parseVal.substring(0, offset); - } - vTypes.add(typeVal); - if (offset < 0) { - parsed = true; - } else { - parseVal = parseVal.substring(offset + 1); - if (parseVal.length() == 0) { - parsed = true; - } - } - } else { - vTypes.add("String"); - } - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Parsed: method(" + methName + ") value(" + valVal + ") type(" + typeVal + ")"); - } - } - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionImpl.java deleted file mode 100644 index 478f064656..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/ManagedConnectionImpl.java +++ /dev/null @@ -1,593 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.lang.reflect.Proxy; -import org.ow2.jonas.resource.internal.IJDBCConnection; -import java.io.PrintWriter; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.HashSet; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionEvent; -import javax.resource.spi.ConnectionEventListener; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.LocalTransaction; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ManagedConnectionMetaData; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import javax.sql.DataSource; -import javax.sql.PooledConnection; -import javax.sql.XAConnection; -import javax.transaction.xa.XAResource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Represent an underlying Connection - * @author Eric hardesty - */ -public class ManagedConnectionImpl implements ManagedConnection, javax.resource.spi.LocalTransaction { - - public Logger trace = null; - - protected PrintWriter out = null; - - protected DataSource factory = null; - - /** - * Connection Event Listeners - */ - protected HashSet cels = null; - - protected boolean inLocalTransaction = false; - - ManagedConnectionFactoryImpl mcf = null; - - java.sql.Connection connection = null; - - PooledConnection poolCon = null; - - XAConnection xaCon = null; - - PasswordCredential pc = null; - - DriverWrapper wrapper = null; - - private XAResource xares; - - private boolean isAutoCommit = true; - - private boolean closed = false; - - private long[] sigList; - - private int maxSigs; - - private long signature; - - private long lastSig; - - /** - * Logging (debug enabled) - */ - private final boolean isDebugOn; - - /** - * Constructor - * @param _mcf The calling factory - * @param _pc username and password. - * @param _con physical Connection - * @param _pcon PooledConnection in case of CP, or null. - * @param _xa XAConnection in case of XA, or null. - * @param wrp DriverWrapper in case of DM, or null. - */ - public ManagedConnectionImpl(ManagedConnectionFactoryImpl _mcf, - PasswordCredential _pc, - java.sql.Connection _con, - PooledConnection _pcon, - XAConnection _xa, - DriverWrapper wrp) { - - mcf = _mcf; - pc = _pc; - connection = _con; - poolCon = _pcon; - xaCon = _xa; - wrapper = wrp; - xares = null; - out = mcf.pw; - cels = new HashSet(); - maxSigs = 50; - sigList = new long[maxSigs]; - signature = 0; - lastSig = 0; - trace = mcf.trace; - isDebugOn = trace.isLoggable(BasicLevel.DEBUG); - if (connection == null) { - trace.log(BasicLevel.ERROR, "Null Connection"); - } else { - trace.log(BasicLevel.DEBUG, "New Connection: " + connection); - } - } - - /** - * Signal an event to all the registered listeners. - * @param code type of event (CONNECTION_ERROR_OCCURRED, CONNECTION_CLOSED, ...) - * @param ch may be a connection handler or null. - * @param ex exception if CONNECTION_ERROR_OCCURRED - */ - public void signalEvent(int code, Object ch, Exception ex) { - ConnectionEvent ce = null; - if (ex == null) { - ce = new ConnectionEvent(this, code); - } else { - ce = new ConnectionEvent(this, code, ex); - } - if (ch != null) { - ce.setConnectionHandle(ch); - } - for (ConnectionEventListener cel : cels) { - switch (code) { - case ConnectionEvent.CONNECTION_CLOSED: - cel.connectionClosed(ce); - break; - case ConnectionEvent.LOCAL_TRANSACTION_STARTED: - cel.localTransactionStarted(ce); - break; - case ConnectionEvent.LOCAL_TRANSACTION_COMMITTED: - cel.localTransactionCommitted(ce); - break; - case ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK: - cel.localTransactionRolledback(ce); - break; - case ConnectionEvent.CONNECTION_ERROR_OCCURRED: - cel.connectionErrorOccurred(ce); - break; - default: - throw new IllegalArgumentException("Illegal eventType: " + code); - } - } - } - - public synchronized boolean getAutoCommit() throws ResourceException { - return isAutoCommit; - } - - public synchronized void setAutoCommit(boolean ac) throws ResourceException { - try { - if (connection != null) { - connection.setAutoCommit(ac); - } - // Don't change the flag if exception raised. - isAutoCommit = ac; - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "setAutoCommit " + ac); - } - } catch (Exception e) { - trace.log(BasicLevel.WARN, "Cannot set AutoCommit:" + e); - throw new ResourceException(e.getMessage()); - } - } - - /** - * Adds a connection event listener. - */ - public void addConnectionEventListener(ConnectionEventListener listener) { - cels.add(listener); - } - - /** - * Removes an already registered connection event listener from the - * ManagedConnection instance - */ - public void removeConnectionEventListener(ConnectionEventListener listener) { - cels.remove(listener); - } - - /** - * Change the association of a connection handle. Not used. - */ - public synchronized void associateConnection(Object con) throws ResourceException { - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "connection:" + con); - } - if (con instanceof ConnectionImpl) { - ConnectionImpl ci = (ConnectionImpl) con; - long sig = getNewSignature(true); - ci.setSignature(sig); - } else { - throw new ResourceException("The managedConnection cannot associate this connection: " + con); - } - } - - /** - * Cleanup the ManagedConnection instance. - * All the Connection Handle should be invalidated. - * Prepare the CM to be put back in the pool or destroyed. - * @throws ResourceException Error while cleaning up. - * @throws IllegalStateException A transaction is not ended. - */ - public void cleanup() throws ResourceException { - if (inLocalTransaction) { - trace.log(BasicLevel.WARN, "A local transaction is not complete"); - throw new IllegalStateException("A local transaction is not complete"); - } - // Reset autocommit mode before returning to the pool. - if (!isAutoCommit) { - try { - setAutoCommit(true); - } catch (Exception exc) { - trace.log(BasicLevel.WARN, "in global transaction"); - throw new IllegalStateException("in global transaction"); - } - } - // Invalidate all Connection Handles - clearSignature(); - } - - /** - * Destroys the physical connection. - */ - public synchronized void destroy() throws ResourceException { - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "destroy mc=" + this + " with connection=" + connection); - } - // cannot destroy if not clean up before. - cleanup(); - if (xaCon != null) { - // XA case - try { - // must call this to physically close connection. (bug JONAS-159) - xaCon.close(); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Cannot close xaConnection:" + e); - } - xaCon = null; - } else if (poolCon != null) { - // CP case - try { - poolCon.close(); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Cannot close PoolConnection:" + e); - } - poolCon = null; - } else { - if (wrapper != null) { - // DM case - try { - DriverManager.deregisterDriver(wrapper); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Unable to deregister Driver wrapper", e); - } - } - if (connection != null) { - // DM or DS case - try { - connection.close(); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "", e, "ManagedConnectionImpl", "destroy"); - throw new ResourceException(e); - } finally { - connection = null; - } - } - } - - // free the XAResourceImpl - xares = null; - } - - /** - * Create a connection handle for user purpose. - * @return a ConnectionImpl - * @throws ResourceException Cannot create Handle - */ - public Object getConnection(Subject subject, ConnectionRequestInfo cxRequestInfo) throws ResourceException { - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "subject:" + subject + " connectionRequest:" + cxRequestInfo); - } - - long sig = getNewSignature(true); - - if (connection == null) { - trace.log(BasicLevel.ERROR, "null Connection"); - throw new ResourceException("Cannot create Handle on a null Connection"); - } - try { - return Proxy.newProxyInstance(IJDBCConnection.class.getClassLoader(), new Class[] {IJDBCConnection.class}, - new ConnectionImpl(this, connection, sig, out)); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "", e, "ManagedConnectionImpl", "getConnection"); - throw new ResourceException(e.getMessage()); - } - } - - /** - * The Connection Handler has been closed by its user. - * @param ch Connection Handler - * @throws ResourceException error while signaling the event to listeners - */ - public void close(IJDBCConnection ch) throws ResourceException { - clearSignature(ch.getKey(), true); - signalEvent(ConnectionEvent.CONNECTION_CLOSED, ch, null); - } - - /** - * Returns an javax.resource.spi.LocalTransaction instance. - */ - public LocalTransaction getLocalTransaction() throws ResourceException { - return (LocalTransaction) this; - } - - /** - * Gets the log writer for this ManagedConnection instance. - */ - public PrintWriter getLogWriter() { - return out; - } - - /** - * Gets the metadata information for this connection's underlying EIS - * resource manager instance. - */ - public ManagedConnectionMetaData getMetaData() throws ResourceException { - return new MetaDataImpl(this); - } - - /** - * Get an XAResource to enlist with the Transaction Manager. - * @return the XAResource - * @throws ResourceException cannot get it. - */ - public XAResource getXAResource() throws ResourceException { - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, ""); - } - if (inLocalTransaction) { - throw new ResourceException( - "The managedConnection is already in a local transaction and an XA resource cannot be obtained"); - } - if (xares == null) { - if (xaCon != null) { - // XA case - try { - xares = xaCon.getXAResource(); - } catch (Exception ex) { - throw new ResourceException("Unable to obtain XAResource: ", ex); - } - } else { - // other cases - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "JDBC driver doesn't support XA, simulate it"); - } - } - // Always return a wrapper. - xares = new XAResourceImpl(this, xares); - } - return xares; - } - - /** - * Sets the log writer for this ManagedConnection instance. - */ - public void setLogWriter(PrintWriter _out) { - out = _out; - } - - public void addSignature(long sig) { - int off = -1; - for (int i = 0; i < maxSigs; i++) - if (sigList[i] == 0) { - off = i; - break; - } - - if (off > -1) - sigList[off] = sig; - else { - maxSigs += 20; - long[] tmp = new long[maxSigs]; - System.arraycopy(sigList, 0, tmp, 0, maxSigs - 20); - sigList = tmp; - sigList[maxSigs - 20] = sig; - } - } - - public void clearSignature() { - for (int i = 0; i < maxSigs; i++) - sigList[i] = 0; - signature = 0; - } - - public void clearSignature(long sig, boolean clear) { - for (int i = 0; i < maxSigs; i++) { - if (sig == sigList[i]) { - sigList[i] = 0; - break; - } - } - if (clear) { - signature = 0; - } - } - - public void setSignature(long sig) { - if (signature == 0) { - signature = sig; - } - } - - /** - * Gets the signature value passed in if found in the signature hash table - * @param sig value to find in signature table - * @return long signature value or 0 if not found - */ - public long getSignature(long sig) { - // find signature - long retSig = 0; - if (sig > 0) { - for (int i = 0; i < maxSigs; i++) - if (sig == sigList[i]) { - retSig = sig; - break; - } - } - return (retSig); - } - - /** - * Gets the current signature value - * @return long current signature value - */ - public long getSignature() { - return (signature); - } - - /** - * Gets the next signature value - * @return long next signature value - */ - public long getNewSignature(boolean setSig) { - long sig = System.currentTimeMillis(); - if (sig <= lastSig && lastSig != 0) { - sig = lastSig++; - } - if (isDebugOn) { - trace.log(BasicLevel.DEBUG, "Sig is " + sig + " last Sig was " + lastSig); - } - lastSig = sig; - addSignature(sig); - if (setSig) { - signature = sig; - } - return sig; - } - - // --------------------------------------------------------------- - // Implementation of Interface LocalTransaction - // --------------------------------------------------------------- - - /** - * start a new local transaction. - */ - public void begin() throws ResourceException { - if (inLocalTransaction) { - throw new ResourceException("The managedConnection is already in a LocalTransaction"); - } - trace.log(BasicLevel.DEBUG, ""); - try { - inLocalTransaction = true; - connection.setAutoCommit(false); - } catch (Exception ex) { - } - } - - /** - * commit the local transaction. - */ - public void commit() throws ResourceException { - trace.log(BasicLevel.DEBUG, ""); - Exception commitException = null; - try { - connection.commit(); - } catch (Exception e) { - commitException = e; - trace.log(BasicLevel.WARN, "Could not commit local tx: " + e); - } finally { - // Reset the auto-commit flag, even in case of exception - // make sure that the connection can be destroyed if problems - try { - connection.setAutoCommit(true); - // this must be done after the setAutoCommit(true) to make remove Connection work. - if (commitException != null) { - signalEvent(ConnectionEvent.CONNECTION_ERROR_OCCURRED, null, commitException); - } - } catch (Exception ex) { - trace.log(BasicLevel.WARN, ex.getMessage()); - } - inLocalTransaction = false; - } - } - - /** - * rollback the local transaction. - */ - public void rollback() throws ResourceException { - trace.log(BasicLevel.DEBUG, ""); - Exception rbException = null; - try { - connection.rollback(); - } catch (Exception e) { - rbException = e; - trace.log(BasicLevel.WARN, "Could not rollback local tx: " + e); - } finally { - // Reset the auto-commit flag, even in case of exception - // make sure that the connection can be destroyed if problems - try { - connection.setAutoCommit(true); - // this must be done after the setAutoCommit(true) to make remove Connection work. - if (rbException != null) { - signalEvent(ConnectionEvent.CONNECTION_ERROR_OCCURRED, null, rbException); - } - } catch (Exception ex) { - trace.log(BasicLevel.WARN, ex.getMessage()); - } - inLocalTransaction = false; - } - } - - /** - * Check if Connection is still valid - */ - public boolean isValid() { - boolean ret = true; - if (connection == null) { - trace.log(BasicLevel.WARN, "No connection"); - return false; - } - // Try directly the physical Connection - // The Connection is supposed to be locked in the free list - java.sql.Statement stmt = null; - try { - stmt = connection.createStatement(); - stmt.execute(mcf.getJdbcConnTestStmt()); - } catch (SQLException se) { - trace.log(BasicLevel.WARN, "Connection not valid"); - ret = false; - } finally { - if (stmt != null) { - try { - stmt.close(); - } catch (Exception e) { - } - } - } - return ret; - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MetaDataImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MetaDataImpl.java deleted file mode 100644 index cf8b6af30e..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/MetaDataImpl.java +++ /dev/null @@ -1,118 +0,0 @@ - /* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.sql.DatabaseMetaData; -import java.sql.SQLException; - -import javax.resource.ResourceException; - -/** - * Description of the MetaDataImpl. This is the DatabaseMetadata for - * the current JDBC connection. - * - *@author Eric Hardesty - *@created 22 May 2003 - */ -public class MetaDataImpl - implements javax.resource.spi.ManagedConnectionMetaData { - - private ManagedConnectionImpl mcon; - private DatabaseMetaData dMetaData; - - public - MetaDataImpl(ManagedConnectionImpl _mcon) - throws ResourceException { - dMetaData = null; - try { - mcon = _mcon; - dMetaData = mcon.connection.getMetaData(); - } catch (SQLException se) { - throw new ResourceException(se.getMessage()); - } - } - - /** Returns the JDBC Product name - * - * @return String Product name of the JDBC instance. - **/ - public - String getEISProductName() throws ResourceException - { - try { - return(dMetaData.getDatabaseProductName()); - } catch (SQLException se) { - throw new ResourceException(se.getMessage()); - } - } - - /** Returns the JDBC Product version - * - * @return String Product version of the JDBC instance - **/ - public - String getEISProductVersion() throws ResourceException - { - try { - return(dMetaData.getDatabaseProductVersion()); - } catch (SQLException se) { - throw new ResourceException(se.getMessage()); - } - } - - /** Returns maximum limit on number of active concurrent connections - * that this JDBC instance can support across client processes. - * - * @return int of maximum limit for number of active concurrent - * connections. 0 is an unlimited number of connections - **/ - public - int getMaxConnections() throws ResourceException - { - try { - return(dMetaData.getMaxConnections()); - } catch (SQLException se) { - throw new ResourceException(se.getMessage()); - } - } - - /** Returns the name of the user associated with the JdbcRaManagedConnection - * instance. The name corresponds to the resource principal under - * whose security context, a connection to the DB has been - * established. - * - * @return String name of the user - **/ - public - String getUserName() throws ResourceException - { - try { - return(dMetaData.getUserName()); - } catch (SQLException se) { - throw new ResourceException(se.getMessage()); - } - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAExceptionUtils.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAExceptionUtils.java deleted file mode 100644 index 13ea9db75a..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAExceptionUtils.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import javax.transaction.xa.XAException; - -/** - * This helper class is here to ease XAException creation - * when Exception chaining is wanted. - * @author Guillaume Sauthier - */ -public class XAExceptionUtils { - - /** - * Construct and throw a new XAException with the given errorCode - * and initialized with the given cause. - * @param errorCode XA code - * @param cause cause of this Exception - * @throws XAException Always throw a new XAException - */ - public static void throwXAException(final int errorCode, final Throwable cause) throws XAException { - XAException xae = new XAException(errorCode); - xae.initCause(cause); - throw xae; - } - - /** - * Construct and throw a new XAException with the given message - * and initialized with the given cause. - * @param message Exception message - * @param cause cause of this Exception - * @throws XAException Always throw a new XAException - */ - public static void throwXAException(final String message, final Throwable cause) throws XAException { - XAException xae = new XAException(message); - xae.initCause(cause); - throw xae; - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAMCFImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAMCFImpl.java deleted file mode 100644 index e6ed5b1803..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAMCFImpl.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - - -import java.sql.SQLException; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import javax.sql.XADataSource; -import org.objectweb.util.monolog.api.BasicLevel; - -public class XAMCFImpl extends ManagedConnectionFactoryImpl { - - XADataSource ds = null; - - public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo cxReq) - throws ResourceException { - trace.log(BasicLevel.DEBUG, ""); - PasswordCredential pc = getPasswordCredential(this, subject, cxReq, pw); - if (ds == null) { - try { - ds = (XADataSource) getDataSource(this, pc, trace); - } catch(Exception ex) { - trace.log(BasicLevel.WARN, "Cannot get DataSource:" + ex); - throw new ResourceException(ex.getMessage(), ex); - } - } - javax.sql.XAConnection xaConnection = null; - java.sql.Connection connection = null; - try { - if (cxReq != null) { - ConnectionRequestInfoImpl cx = (ConnectionRequestInfoImpl) cxReq; - xaConnection = ds.getXAConnection(cx.getUser(), cx.getPassword()); - } else if (pc != null){ - xaConnection = ds.getXAConnection(pc.getUserName(), new String(pc.getPassword())); - } else if (mcfData.getMCFData(MCFData.USER).length() > 0){ - xaConnection = ds.getXAConnection(mcfData.getMCFData(MCFData.USER), - mcfData.getMCFData(MCFData.PASSWORD)); - } else { - xaConnection = ds.getXAConnection(); - } - if (xaConnection != null) { - connection = xaConnection.getConnection(); - } - } catch(SQLException sqle) { - trace.log(BasicLevel.WARN, "The connection could not be allocated: " + sqle); - throw new ResourceAllocationException("The connection could not be allocated: " + sqle.getMessage(), sqle); - } - ManagedConnection mc = new ManagedConnectionImpl(this, pc, connection, null, xaConnection, null); - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Returning: " + mc); - } - return mc; - } - - /* Determine if the factories are equal - */ - public boolean equals(Object obj) { - if (obj instanceof XAMCFImpl) { - return mcfData.equals(((XAMCFImpl)obj).mcfData); - } else { - return false; - } - } - - // JOnAS JDBC RA DataSource config properties - public String getDatabaseName() { - return mcfData.getMCFData(MCFData.DATABASENAME); - } - - public void setDatabaseName(String val) { - mcfData.setMCFData(MCFData.DATABASENAME, val); - } - - public String getDescription() { - return mcfData.getMCFData(MCFData.DESCRIPTION); - } - - public void setDescription(String val) { - mcfData.setMCFData(MCFData.DESCRIPTION, val); - } - - public String getPortNumber() { - return mcfData.getMCFData(MCFData.PORTNUMBER); - } - - public void setPortNumber(String val) { - mcfData.setMCFData(MCFData.PORTNUMBER, val); - } - - public String getServerName() { - return mcfData.getMCFData(MCFData.SERVERNAME); - } - - public void setServerName(String val) { - mcfData.setMCFData(MCFData.SERVERNAME, val); - } - -} diff --git a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAResourceImpl.java b/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAResourceImpl.java deleted file mode 100644 index ce8cb1a520..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/glue/src/main/java/org/ow2/jonas/ee/jdbc/XAResourceImpl.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.jdbc; - -import java.sql.SQLException; - -import javax.resource.spi.ConnectionEvent; -import javax.transaction.xa.XAException; -import javax.transaction.xa.XAResource; -import javax.transaction.xa.Xid; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This is an implementation of XAResource used for transaction mgmt - * with a JDBC driver. The standard JDBC drivers don't support real - * XA, so the prepare will just return OK and work will be done in the - * commit/rollback. - */ -public class XAResourceImpl implements XAResource { - - // Current Xid - private Xid currentXid = null; - - // Is a xa transaction started ? - boolean started = false; - boolean ended = true; - - protected ManagedConnectionImpl mc = null; - private XAResource xares = null; - - protected Logger xalog = null; - - /** - * XAResourceImpl constructor - * @param mc ManagedConnectionImpl used with this object - * @param xares XAResource from DB if supported - */ - public XAResourceImpl(ManagedConnectionImpl mc, XAResource xares) { - this.mc = mc; - this.xares = xares; - xalog = Log.getLoggerFactory().getLogger("org.ow2.jonas.ee.jdbc.xa"); - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc); - } - } - - /** - * Commit the global transaction specified by xid. - */ - public void commit(Xid xid, boolean onePhase) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc + " xid=" + xid + "," + onePhase); - } - - Exception commitException = null; - - // Commit the transaction - try { - if (xares != null) { - xares.commit(xid, onePhase); - if (xid.equals(currentXid)) { - started = false; - } - } else { - // Make sure that this call is for the XID - if (currentXid == null || !currentXid.equals(xid) || !started) { - xalog.log(BasicLevel.ERROR, "passed xid(" + xid - + "),current Xid(" - + currentXid - + "),started(" + started + ")"); - throw new XAException("Commit: Must call correct XAResource for its started XID"); - } - mc.connection.commit(); - started = false; - } - } catch (XAException xe) { - xalog.log(BasicLevel.ERROR, xe.getMessage()); - commitException = xe; - throw xe; - } catch (SQLException e) { - // Only store the exception at this point since the - // connection cannot be removed until the auto-commit - // mode has been reset - commitException = e; - XAExceptionUtils.throwXAException("Error on commit", e); - } finally { - - // Reset the auto-commit flag - try { - mc.setAutoCommit(true); - } catch (Exception exc) { - if (xares == null) { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, - "Unable to set autoCommit to true:", exc); - } - } - } - if (commitException != null) { - // this must be done after the setAutoCommit(true) to make remove Connection work. - xalog.log(BasicLevel.ERROR, commitException.getMessage()); - // Notify the listeners of the error (will try to remove - // the connection of the busy list) - try { - mc.signalEvent(ConnectionEvent.CONNECTION_ERROR_OCCURRED, null, commitException); - } catch (Exception ex) { - xalog.log(BasicLevel.WARN, ex.getMessage()); - } - } - } - } - - /** - * Ends the transaction - * @param xid transaction xid - * @param flags One of TMSUCCESS, TMFAIL, or TMSUSPEND. - */ - public void end(Xid xid, int flags) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc + " xid=" + xid + "," + flags); - } - // Make sure that the Xid has started - if (currentXid == null || !currentXid.equals(xid)) { - throw new XAException(XAException.XA_RBPROTO); - } - if (!started && ended) { - throw new XAException(XAException.XA_RBPROTO); - } - ended = true; - if (xares != null) { - xares.end(xid, flags); - } - } - - /** - * Need to forget the heuristically completed Xid - */ - public void forget(Xid xid) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc + " xid=" + xid); - } - if (xares != null) { - xares.forget(xid); - } - } - - /** - * Get the current transaction timeout for this XAResource - */ - public int getTransactionTimeout() throws XAException { - if (xares != null) { - return xares.getTransactionTimeout(); - } - return 0; - } - - /** - * Determine if the resource manager instance is the same as the - * resouce manager being passed in - */ - public boolean isSameRM(XAResource xaRes) throws XAException { - - boolean ret = false; - if (xaRes.equals(this)) { - ret = true; - } else if (!(xaRes instanceof XAResourceImpl)) { - ret = false; - } else { - XAResourceImpl xaResImpl = (XAResourceImpl) xaRes; - if (mc == xaResImpl.mc) { - ret = true; - } - } - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "" + xaRes + "," + this + " is " + ret); - } - return ret; - } - - /** - * Prepare the Xid for a transaction commit - */ - public int prepare(Xid xid) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc + " xid=" + xid); - } - if (xares != null) { - int ret = xares.prepare(xid); - if (ret == XA_RDONLY) { - // Cannot setAutocommit here, because still in global tx. - started = false; - } - return ret; - } - // Just return true, since we are just simulating XA with our wrapper - return XA_OK; - } - - /** - * Obtain a list of prepared transaction branches from a resource manager. - */ - public Xid[] recover(int flag) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc); - } - if (xares != null) { - return xares.recover(flag); - } - // Not a full RM, so just return null - return null; - } - - /** - * Roll back work done on the Xid - */ - public void rollback(Xid xid) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "mc=" + mc + " xid=" + xid); - } - - Exception rbException = null; - - // Rollback the Xid - try { - if (xares != null) { - xares.rollback(xid); - if (xid.equals(currentXid)) { - started = false; - } - } else { - // Make sure that this call is for the XID - if (currentXid == null || !currentXid.equals(xid) || !started) { - xalog.log(BasicLevel.ERROR, "passed xid(" + xid - + "),current Xid(" + currentXid - + "),started(" + started + ")"); - throw new XAException("Rollback: Must call correct XAResource for its started XID"); - } - if (mc.connection != null) { - mc.connection.rollback(); - } - started = false; - } - } catch (XAException xe) { - xalog.log(BasicLevel.ERROR, xe.getMessage()); - rbException = xe; - throw xe; - } catch (SQLException e) { - rbException = e; - XAExceptionUtils.throwXAException("Error on rollback", e); - } finally { - // Reset the state of the Connection - try { - mc.setAutoCommit(true); - } catch (Exception exc) { - if (xares == null) { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, - "Unable to set autoCommit to true:", exc); - } - } - } - - // If there was a SQL error - // Try to remove the connection from the pool - if (rbException != null) { - try { - xalog.log(BasicLevel.ERROR, rbException.getMessage()); - mc.signalEvent(ConnectionEvent.CONNECTION_ERROR_OCCURRED, null, rbException); - } catch (Exception ex) { - xalog.log(BasicLevel.WARN, ex.getMessage()); - } - } - } - } - - /** - * Set the current transaction timeout value for this XAResource - */ - public boolean setTransactionTimeout(int seconds) throws XAException { - if (xares != null) { - return xares.setTransactionTimeout(seconds); - } - return false; - } - - /** - * Start work on this Xid. If TMJOIN is on, then join an existing transaction - * already started by the RM. - */ - public void start(Xid xid, int flags) throws XAException { - if (xalog.isLoggable(BasicLevel.DEBUG)) { - xalog.log(BasicLevel.DEBUG, "" + xid + "," + flags); - } - try { - mc.setAutoCommit(false); - } catch (Exception ex) { - ex.printStackTrace(); - xalog.log(BasicLevel.ERROR, - "Unable to set autoCommit to false:" + ex.getMessage()); - XAExceptionUtils.throwXAException("Error : Unable to set autoCommit to false in start", ex); - } - - if (xares != null) { - xares.start(xid, flags); - } else { - if (started && (currentXid == null || !currentXid.equals(xid))) { - xalog.log(BasicLevel.ERROR, - "Must call correct XAResource for its started XID"); - throw new XAException("XAResourceImpl.start : Must call correct XAResource for its started XID"); - } - } - currentXid = xid; - started = true; - ended = false; - } -} diff --git a/jonas/modules/ee-components/jca/jdbc/pom.xml b/jonas/modules/ee-components/jca/jdbc/pom.xml deleted file mode 100644 index 841f576cdf..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jca-jdbc - pom - JOnAS :: EE Components :: JCA :: JDBC - - - glue - cp - dm - ds - xa - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/xa/pom.xml b/jonas/modules/ee-components/jca/jdbc/xa/pom.xml deleted file mode 100644 index fac43fa44c..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/xa/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-jdbc - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-jdbc-xa - rar - JOnAS :: EE Components :: JCA :: JDBC :: XA - - - - org.ow2.jonas - jonas-jca-jdbc-glue - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/jonas-ra.xml b/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/jonas-ra.xml deleted file mode 100644 index f5af0b0144..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/jonas-ra.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - JOnASJDBC_XA - - false - - - 0 - 0 - 100 - 0 - 0 - 0 - 0 - 0 - 30 - - - 0 - - - - dsClass - - - - URL - - - - user - - - - password - - - - databaseName - - - - description - - - - portNumber - - - - serverName - - - - loginTimeout - - - - dbSpecificMethods - - - - isolationLevel - - - - mapperName - - - - logTopic - - - - diff --git a/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/ra.xml b/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/ra.xml deleted file mode 100644 index 250a6021bb..0000000000 --- a/jonas/modules/ee-components/jca/jdbc/xa/src/main/rar/META-INF/ra.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - JOnAS XA RA - JOnAS XA RA - Objectweb - 1.0 - JDBC - 1.0 - - org.ow2.jonas.ee.jdbc.XAMCFImpl - javax.sql.DataSource - org.ow2.jonas.ee.jdbc.DataSourceImpl - java.sql.Connection - org.ow2.jonas.ee.jdbc.ConnectionImpl - XATransaction - - dsClass - java.lang.String - - - - URL - java.lang.String - - - - user - java.lang.String - - - - password - java.lang.String - - - - databaseName - java.lang.String - - - - description - java.lang.String - - - - portNumber - java.lang.String - - - - serverName - java.lang.String - - - - loginTimeout - java.lang.String - 0 - - - dbSpecificMethods - java.lang.String - - - - isolationLevel - java.lang.String - - - - mapperName - java.lang.String - - - - logTopic - java.lang.String - - - false - - diff --git a/jonas/modules/ee-components/jca/pom.xml b/jonas/modules/ee-components/jca/pom.xml deleted file mode 100644 index 28dafb5cc5..0000000000 --- a/jonas/modules/ee-components/jca/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-ee-components - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jca - pom - JOnAS :: EE Components :: JCA - - - scout - jdbc - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/scout/glue/pom.xml b/jonas/modules/ee-components/jca/scout/glue/pom.xml deleted file mode 100644 index 6d875d8e91..0000000000 --- a/jonas/modules/ee-components/jca/scout/glue/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-scout - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-scout-glue - jar - JOnAS :: EE Components :: JCA :: Scout :: Glue - - - - org.ow2.spec.ee - ow2-connector-1.5-spec - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.apache.ws.scout - scout - - - org.apache.juddi - juddi - - - org.objectweb.monolog - monolog-api - ${monolog.version} - provided - - - geronimo-spec - geronimo-spec-jaxr - 1.0-rc4 - provided - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JAXRResourceAdapter.java b/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JAXRResourceAdapter.java deleted file mode 100644 index 0f470e8b50..0000000000 --- a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JAXRResourceAdapter.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.scout; - -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.ResourceAdapterInternalException; -import javax.resource.spi.endpoint.MessageEndpointFactory; -import javax.transaction.xa.XAResource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; - -/** - * This is a very simple ResourceAdapter just used to display traces. - * - * @author Guillaume Sauthier - */ -public class JAXRResourceAdapter implements ResourceAdapter { - - /** - * Logger for this ra. - */ - private static Logger logger = null; - - /** - * Display Info log at JAXR Connector start. - * - * @see javax.resource.spi.ResourceAdapter#start(javax.resource.spi.BootstrapContext) - */ - public void start(final BootstrapContext bCtx) throws ResourceAdapterInternalException { - logger = Log.getLogger(Log.JONAS_JAXR_PREFIX); - logger.log(BasicLevel.INFO, "Starting Scout ResourceAdapter"); - } - - /** - * Display Info log at JAXR Connector stop. - * @see javax.resource.spi.ResourceAdapter#stop() - */ - public void stop() { - logger.log(BasicLevel.INFO, "Stopping Scout ResourceAdapter"); - logger = null; - } - - /** - * Not used. - * @see javax.resource.spi.ResourceAdapter#endpointActivation(javax.resource.spi.endpoint.MessageEndpointFactory, javax.resource.spi.ActivationSpec) - */ - public void endpointActivation(final MessageEndpointFactory mef, - final ActivationSpec as) throws ResourceException { - // NA - } - - /** - * Not used. - * @see javax.resource.spi.ResourceAdapter#endpointDeactivation(javax.resource.spi.endpoint.MessageEndpointFactory, javax.resource.spi.ActivationSpec) - */ - public void endpointDeactivation(final MessageEndpointFactory mef, - final ActivationSpec as) { - // NA - } - - /** - * Not used. - * @see javax.resource.spi.ResourceAdapter#getXAResources(javax.resource.spi.ActivationSpec[]) - */ - public XAResource[] getXAResources(final ActivationSpec[] as) throws ResourceException { - // NA - return null; - } -} diff --git a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JConnectionFactory.java b/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JConnectionFactory.java deleted file mode 100644 index 5af54ed2b9..0000000000 --- a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/JConnectionFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.scout; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.resource.Referenceable; - -import org.apache.ws.scout.registry.ConnectionFactoryImpl; - -/** - * JConnectionFactory is an extension of Scout ConnectionFactoryImpl. - * It's used to store the Naming Reference used by the resource service to recreate the - * ConnectionFactory instance. - * - * @author Guillaume Sauthier - */ -public class JConnectionFactory extends ConnectionFactoryImpl implements Referenceable { - - /** - * UID. - */ - private static final long serialVersionUID = 3257569490513573686L; - - /** - * stored Reference. - */ - private Reference ref = null; - - /** - * {@inheritDoc} - * @see javax.naming.Referenceable#getReference() - */ - public Reference getReference() throws NamingException { - return this.ref; - } - - /** - * {@inheritDoc} - * @see javax.resource.Referenceable#setReference(javax.naming.Reference) - */ - public void setReference(final Reference ref) { - this.ref = ref; - } -} diff --git a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/ManagedConnectionFactoryImpl.java b/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/ManagedConnectionFactoryImpl.java deleted file mode 100644 index 9f03eb3c42..0000000000 --- a/jonas/modules/ee-components/jca/scout/glue/src/main/java/org/ow2/jonas/ee/scout/ManagedConnectionFactoryImpl.java +++ /dev/null @@ -1,237 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.scout; - -import java.io.PrintWriter; -import java.util.Set; - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ManagedConnectionFactory; -import javax.security.auth.Subject; -import javax.xml.registry.ConnectionFactory; - -import org.apache.ws.scout.registry.ConnectionFactoryImpl; - -/** - * - * - * @author Guillaume Sauthier - */ -public class ManagedConnectionFactoryImpl implements ManagedConnectionFactory { - - /** - * UID. - */ - private static final long serialVersionUID = 3258690988061833009L; - - /** - * PrintWriter. - */ - private PrintWriter pw = null; - - /** - * Query Manager URL. - */ - private String queryManagerURL = null; - - /** - * LifeCycle Manager URL. - */ - private String lifeCycleManagerURL = null; - - /** - * semantic Equivalence property. - */ - private String semanticEquivalences = null; - - /** - * Authentication method name to use. - */ - private String authenticationMethod = null; - - /** - * maxRows property. - */ - private Integer maxRows = null; - - /** - * Scheme of the postal address. - */ - private String postalAddressScheme = null; - - /** - * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory(javax.resource.spi.ConnectionManager) - */ - public Object createConnectionFactory(final ConnectionManager manager) - throws ResourceException { - return newConnectionFactory(); - } - - /** - * @return Returns a new JAXr ConnectionFactory instance - */ - private ConnectionFactory newConnectionFactory() { - // create the CF - ConnectionFactoryImpl factory = new JConnectionFactory(); - // assign properties - factory.setAuthenticationMethod(this.authenticationMethod); - factory.setLifeCycleManagerURL(this.lifeCycleManagerURL); - factory.setQueryManagerURL(this.queryManagerURL); - factory.setMaxRows(this.maxRows); - factory.setPostalAddressScheme(this.postalAddressScheme); - factory.setSemanticEquivalences(this.semanticEquivalences); - return factory; - } - - /** - * @see javax.resource.spi.ManagedConnectionFactory#createConnectionFactory() - */ - public Object createConnectionFactory() throws ResourceException { - return newConnectionFactory(); - } - - /** - * Not used. - * @see javax.resource.spi.ManagedConnectionFactory#createManagedConnection(javax.security.auth.Subject, javax.resource.spi.ConnectionRequestInfo) - */ - public ManagedConnection createManagedConnection(final Subject subject, - final ConnectionRequestInfo cri) - throws ResourceException { - // NA - return null; - } - - /** - * Not used. - * @see javax.resource.spi.ManagedConnectionFactory#matchManagedConnections(java.util.Set, javax.security.auth.Subject, javax.resource.spi.ConnectionRequestInfo) - */ - public ManagedConnection matchManagedConnections(final Set set, final Subject subject, - final ConnectionRequestInfo cri) throws ResourceException { - // NA - return null; - } - - /** - * @see javax.resource.spi.ManagedConnectionFactory#setLogWriter(java.io.PrintWriter) - */ - public void setLogWriter(final PrintWriter pw) throws ResourceException { - this.pw = pw; - } - - /** - * @see javax.resource.spi.ManagedConnectionFactory#getLogWriter() - */ - public PrintWriter getLogWriter() throws ResourceException { - return pw; - } - - /** - * @return Returns the authenticationMethod. - */ - public String getAuthenticationMethod() { - return authenticationMethod; - } - - /** - * @param authenticationMethod The authenticationMethod to set. - */ - public void setAuthenticationMethod(final String authenticationMethod) { - this.authenticationMethod = authenticationMethod; - } - - /** - * @return Returns the lifeCycleManagerURL. - */ - public String getLifeCycleManagerURL() { - return lifeCycleManagerURL; - } - - /** - * @param lifeCycleManagerURL The lifeCycleManagerURL to set. - */ - public void setLifeCycleManagerURL(final String lifeCycleManagerURL) { - this.lifeCycleManagerURL = lifeCycleManagerURL; - } - - /** - * @return Returns the maxRows. - */ - public Integer getMaxRows() { - return maxRows; - } - - /** - * @param maxRows The maxRows to set. - */ - public void setMaxRows(final Integer maxRows) { - this.maxRows = maxRows; - } - - /** - * @return Returns the postalAddressScheme. - */ - public String getPostalAddressScheme() { - return postalAddressScheme; - } - - /** - * @param postalAddressScheme The postalAddressScheme to set. - */ - public void setPostalAddressScheme(final String postalAddressScheme) { - this.postalAddressScheme = postalAddressScheme; - } - - /** - * @return Returns the queryManagerURL. - */ - public String getQueryManagerURL() { - return queryManagerURL; - } - - /** - * @param queryManagerURL The queryManagerURL to set. - */ - public void setQueryManagerURL(final String queryManagerURL) { - this.queryManagerURL = queryManagerURL; - } - - /** - * @return Returns the semanticEquivalences. - */ - public String getSemanticEquivalences() { - return semanticEquivalences; - } - - /** - * @param semanticEquivalences The semanticEquivalences to set. - */ - public void setSemanticEquivalences(final String semanticEquivalences) { - this.semanticEquivalences = semanticEquivalences; - } - -} diff --git a/jonas/modules/ee-components/jca/scout/plans/pom.xml b/jonas/modules/ee-components/jca/scout/plans/pom.xml deleted file mode 100644 index 30919a410d..0000000000 --- a/jonas/modules/ee-components/jca/scout/plans/pom.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - jonas-jca-scout - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-jca-scout-plan - deployment-plan - JOnAS :: EE Components :: JCA :: Scout :: Deployment plan - - - - org.ow2.jonas - jonas-jca-scout-rar - ${project.version} - rar - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - true - - - org.ow2.jonas:jonas-jca-scout-rar:rar - - - - org.ow2.jonas:jonas-jca-scout-rar:rar - - - - org.ow2.jonas:jonas-jca-scout-rar:rar - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/scout/pom.xml b/jonas/modules/ee-components/jca/scout/pom.xml deleted file mode 100644 index 91777920c2..0000000000 --- a/jonas/modules/ee-components/jca/scout/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jca-scout - pom - JOnAS :: EE Components :: JCA :: Scout - - - glue - rar - plans - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/scout/rar/pom.xml b/jonas/modules/ee-components/jca/scout/rar/pom.xml deleted file mode 100644 index d36bff06ef..0000000000 --- a/jonas/modules/ee-components/jca/scout/rar/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - org.ow2.jonas - jonas-jca-scout - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-jca-scout-rar - rar - JOnAS :: EE Components :: JCA :: Scout :: RAR - - - - org.ow2.jonas - jonas-jca-scout-glue - ${project.version} - - - - - scout_for_jonas_ra - - - org.apache.maven.plugins - maven-rar-plugin - - - - xmlbeans - - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/jonas-ra.xml b/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/jonas-ra.xml deleted file mode 100644 index 1f39f6ebcf..0000000000 --- a/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/jonas-ra.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - javax.xml.registry.ConnectionFactory - eis/JAXR - - - diff --git a/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/ra.xml b/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/ra.xml deleted file mode 100644 index 2fc5b42150..0000000000 --- a/jonas/modules/ee-components/jca/scout/rar/src/main/rar/META-INF/ra.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - JOnAS JAX-R RA - Objectweb - JAX-R - 1 - - - org.ow2.jonas.ee.scout.JAXRResourceAdapter - - - - - org.ow2.jonas.ee.scout.ManagedConnectionFactoryImpl - - - queryManagerURL - java.lang.String - http://localhost:9000/juddi/inquiry - - - lifeCycleManagerURL - java.lang.String - http://localhost:9000/juddi/publish - - - semanticEquivalences - java.lang.String - - - - authenticationMethod - java.lang.String - UDDI_GET_AUTHTOKEN - - - maxRows - java.lang.Integer - 100 - - - postalAddressScheme - java.lang.String - - - - javax.xml.registry.ConnectionFactory - - - org.ow2.jonas.ee.scout.JConnectionFactory - - - javax.xml.registry.Connection - - - org.apache.ws.scout.registry.ConnectionImpl - - - NoTransaction - false - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/pom.xml b/jonas/modules/ee-components/jonas-admin/core/pom.xml deleted file mode 100644 index b1e235e012..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/pom.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - - - jonas-admin - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-admin-core - war - JOnAS :: EE Components :: JOnAS Admin Console :: WAR - - - target/jonasAdmin - ${basedir}/src/main/webapp/WEB-INF/web.xml - - - - - org.apache.tomcat - servlet-api - provided - - - log4j - log4j - 1.2.16 - - - org.apache.tomcat - jsp-api - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - provided - - - org.ow2.jonas - jonas-domain - ${project.version} - provided - - - org.ow2.jonas - jonas-management-extensions - ${project.version} - provided - - - org.ow2.jonas - jonas-mbeans - ${project.version} - provided - - - org.ow2.jonas - jonas-service-manager - ${project.version} - provided - - - struts - struts - 1.2.9 - - - commons-beanutils - commons-beanutils - - - commons-logging - commons-logging - - - commons-validator - commons-validator - - - commons-fileupload - commons-fileupload - - - oro - oro - - - xml-apis - xml-apis - - - antlr - antlr - - - xalan - xalan - - - - - commons-digester - commons-digester - - - commons-beanutils - commons-beanutils - - - commons-collections - commons-collections - - - commons-logging - commons-logging - - - xml-apis - xml-apis - - - - - velocity - velocity-dep - 1.4 - - - commons-beanutils - commons-beanutils - 1.7.0 - - - commons-logging - commons-logging - - - - - - org.ow2.jonas.admin - jar - ${jonasAdmin-swf.version} - - - org.granite - granite-flex - - - - - - - org.ow2.jonas.admin - swf-server-stackdump - ${jonasAdmin-swf.version} - swf - - - - org.ow2.jonas.admin - jonasadmin-kerneos-assemblies-war - ${jonasAdmin-Kerneos.version} - war - - - - - - jspcompile - - ${pom.basedir}/target/jspweb.xml - - - - - - org.codehaus.mojo.jspc - jspc-maven-plugin - - - jsp-compiler - - compile - - - org.ow2.jonas.webapp.jonasadmin.jsp - ]]> - - - - - - org.codehaus.mojo.jspc - jspc-compiler-tomcat6 - ${jspc.version} - - - - - - - - - - jonasAdmin - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy jonasAdmin-flex swf files - - copy - - compile - - - - org.ow2.jonas.admin - swf-server-stackdump - swf - - - ${target.swf.dir} - true - - - - - - org.apache.maven.plugins - maven-war-plugin - - ${webxml.file} - - - org.ow2.jonas.admin - jonasadmin-kerneos-assemblies-war - - WEB-INF/web.xml - WEB-INF/jonas-web.xml - WEB-INF/index.html - WEB-INF/flex/services-config.xml - WEB-INF/lib/*log4j*.jar - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplicationLocales.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplicationLocales.java deleted file mode 100644 index 08e8227243..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplicationLocales.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Struts", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.ResourceBundle; - -import org.apache.struts.Globals; -import org.apache.struts.action.ActionServlet; -import org.apache.struts.util.MessageResources; - -/** - * Class to hold the Locales supported by this package. - * - * @author Patrick Luby - * @author Craig R. McClanahan - * @version $Revision: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ - -public final class ApplicationLocales { - -// ----------------------------------------------------------- Constructors - - /** - * Initialize the set of Locales supported by this application. - * - * @param servlet ActionServlet we are associated with - */ - public ApplicationLocales(ActionServlet servlet) { - - super(); - Locale list[] = Locale.getAvailableLocales(); - MessageResources resources = (MessageResources) - servlet.getServletContext().getAttribute(Globals.MESSAGES_KEY); - if (resources == null) { - return; - } - String config = resources.getConfig(); - if (config == null) { - return; - } - for (int i = 0; i < list.length; i++) { - ResourceBundle bundle = ResourceBundle.getBundle(config, list[i]); - if (bundle == null) { - continue; - } - if (list[i].equals(bundle.getLocale())) { - localeLabels.add(list[i].getDisplayName()); - localeValues.add(list[i].toString()); - supportedLocales.add(list[i]); - } - } - - } - -// ----------------------------------------------------- Instance Variables - - /** - * The set of Locale labels supported by this application. - */ - protected ArrayList localeLabels = new ArrayList(); - - /** - * The set of Locale values supported by this application. - */ - protected ArrayList localeValues = new ArrayList(); - - /** - * The set of supported Locales for this application. - */ - protected ArrayList supportedLocales = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Return the set of Locale labels supported by this application. - */ - public List getLocaleLabels() { - - return (localeLabels); - - } - - /** - * Return the set of Locale values supported by this application. - */ - public List getLocaleValues() { - - return (localeValues); - - } - - /** - * Return the set of Locales supported by this application. - */ - public List getSupportedLocales() { - - return (supportedLocales); - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplyTopAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplyTopAction.java deleted file mode 100644 index b61abdcf61..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ApplyTopAction.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange Anton (initial developer)
- * @author Adriana Danes - * @author Florent Benoit (changes for struts 1.2.2) - */ -public class ApplyTopAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request - , HttpServletResponse p_Response) - throws IOException, ServletException { - - // Forward control back to the ActionEditTop - return (p_Mapping.findForward("ActionEditTop")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/EditTopAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/EditTopAction.java deleted file mode 100644 index 36d9e715a8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/EditTopAction.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.Log; - -import org.apache.struts.Globals; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Test Action that handles events from the tree control test - * page. - * @author Michel-Ange Anton (initial developer)
- * @author Florent Benoit (changes for struts 1.2.2) - */ - -public class EditTopAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param mapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping mapping, ActionForm form, HttpServletRequest request - , HttpServletResponse response) - throws IOException, ServletException { - - // Test if force to reload all the frames - ActionErrors oActionErrors = (ActionErrors) request.getAttribute(Globals.ERROR_KEY); - if (oActionErrors != null) { - request.setAttribute("errorServerSelect", new Boolean(true)); - } else { - String sFirstCall = request.getParameter("firstCall"); - if (sFirstCall == null) { - request.setAttribute("reloadAll", new Boolean(true)); - } - } - - // Form used - TopForm topFm = new TopForm(); - request.setAttribute("topForm", topFm); - try { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - topFm.setServerSelect(serverName); - } catch (Throwable t) { - String message = "Problem when accessing to JOnAS ! : " + t.getMessage(); - //getServlet().log(message, t); - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, message); - } - response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); - return (null); - } - - // Forward to the jsp. - return (mapping.findForward("Top")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JettyObjectName.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JettyObjectName.java deleted file mode 100644 index 9c0e2f19e4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JettyObjectName.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import javax.management.ObjectName; - -/** - * A set of static classes used to build the names of Jetty MBeans used in JOnAS. - * - * @author Michel-Ange ANTON - */ -public class JettyObjectName { - - public static ObjectName jettyServer(String pDomain) { - try { - return new ObjectName(pDomain + ":type=webContainer,name=Jetty"); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - public static ObjectName jettyContexts(String pDomain) { - try { - return new ObjectName(pDomain + ":type=webContainer,name=Jetty,*"); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - public static ObjectName jettyContexts(String pDomain, String pPath) { - try { - return new ObjectName(pDomain + ":type=webContainer,name=Jetty,context=" + pPath + ",*"); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/Jlists.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/Jlists.java deleted file mode 100644 index 70d4791e4e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/Jlists.java +++ /dev/null @@ -1,338 +0,0 @@ -/* - * $Header$ - * $Revision: 14503 $ - * $Date: 2008-07-10 17:13:06 +0200 (jeu 10 jui 2008) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001-2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; - -import org.ow2.jonas.webapp.taglib.LabelValueBean; - - -/** - * General purpose utility methods to create lists of objects that are - * commonly required in building the user interface. In all cases, if there - * are no matching elements, a zero-length list (rather than null) - * is returned. - * - * @author Craig R. McClanahan - * @version $Revision: 14503 $ $Date: 2008-07-10 17:13:06 +0200 (jeu 10 jui 2008) $ - */ - -public class Jlists { - -// --------------------------------------------------------- Constants - - public final static String SEPARATOR = ","; - -// ----------------------------------------------------------- Constructors - - /** - * Protected constructor to prevent instantiation. - */ - protected Jlists() {} - -// ------------------------------------------------------- Static Variables - - /** - * Precomputed list of debug level labels and values. - */ - private static List debugLevels = new ArrayList(); - - static { - debugLevels.add(new LabelValueBean("0", "0")); - debugLevels.add(new LabelValueBean("1", "1")); - debugLevels.add(new LabelValueBean("2", "2")); - debugLevels.add(new LabelValueBean("3", "3")); - debugLevels.add(new LabelValueBean("4", "4")); - debugLevels.add(new LabelValueBean("5", "5")); - debugLevels.add(new LabelValueBean("6", "6")); - debugLevels.add(new LabelValueBean("7", "7")); - debugLevels.add(new LabelValueBean("8", "8")); - debugLevels.add(new LabelValueBean("9", "9")); - } - - /** - * Precomputed list of verbosity level labels and values. - */ - private static List verbosityLevels = new ArrayList(); - - static { - verbosityLevels.add(new LabelValueBean("0", "0")); - verbosityLevels.add(new LabelValueBean("1", "1")); - verbosityLevels.add(new LabelValueBean("2", "2")); - verbosityLevels.add(new LabelValueBean("3", "3")); - verbosityLevels.add(new LabelValueBean("4", "4")); - } - - /** - * Precomputed list of Jonas logger level labels and values. - */ - private static List loggerJonasLevels = new ArrayList(); - - static { - loggerJonasLevels.add(new LabelValueBean("DEBUG", "DEBUG")); - loggerJonasLevels.add(new LabelValueBean("WARN", "WARN")); - loggerJonasLevels.add(new LabelValueBean("INFO", "INFO")); - loggerJonasLevels.add(new LabelValueBean("ERROR", "ERROR")); - loggerJonasLevels.add(new LabelValueBean("INHERIT", "INHERIT")); - } - - /** - * Precomputed list of (true,false) labels and values. - */ - private static List booleanValues = new ArrayList(); - - static { - booleanValues.add(new LabelValueBean("True", "true")); - booleanValues.add(new LabelValueBean("False", "false")); - } - - /** - * Precomputed list of JdbcConnectionCheckingLevel labels and values. - */ - private static List jdbcConnectionCheckingLevels = new ArrayList(); - - static { - jdbcConnectionCheckingLevels.add(new LabelValueBean("0", "0")); - jdbcConnectionCheckingLevels.add(new LabelValueBean("1", "1")); - jdbcConnectionCheckingLevels.add(new LabelValueBean("2", "2")); - jdbcConnectionCheckingLevels.add(new LabelValueBean("3", "3")); - } - - /** - * Precomputed list of SpecVersions labels and values. - */ - private static List specVersion = new ArrayList(); - - static { - specVersion.add(new LabelValueBean("1.0", "1.0")); - specVersion.add(new LabelValueBean("1.5", "1.5")); - } - - /** - * Precomputed list of SecurityAuthenticationLdap labels and values. - */ - private static List securityAuthenticationLdapValues = new ArrayList(); - - static { - securityAuthenticationLdapValues.add(new LabelValueBean("none", "none")); - securityAuthenticationLdapValues.add(new LabelValueBean("simple", "simple")); - securityAuthenticationLdapValues.add(new LabelValueBean("strong", "strong")); - securityAuthenticationLdapValues.add(new LabelValueBean("CRAM-MD5", "CRAM-MD5")); - securityAuthenticationLdapValues.add(new LabelValueBean("DIGEST-MD5", "DIGEST-MD5")); - } - - /** - * Precomputed list of AuthenticationModeLdapValues labels and values. - */ - private static List authenticationModeLdapValues = new ArrayList(); - - static { - authenticationModeLdapValues.add(new LabelValueBean("compare", "compare")); - authenticationModeLdapValues.add(new LabelValueBean("bind", "bind")); - } - - /** - * Precomputed list of securityAlgorithms labels and values. - */ - private static List securityAlgorithms = new ArrayList(); - - static { - securityAlgorithms.add(new LabelValueBean("", "")); - securityAlgorithms.add(new LabelValueBean("MD5", "MD5")); - securityAlgorithms.add(new LabelValueBean("MD2", "MD2")); - securityAlgorithms.add(new LabelValueBean("SHA-1", "SHA-1")); - securityAlgorithms.add(new LabelValueBean("SHA", "SHA")); - } - - /** - * Precomputed list of monitoring Apply labels and values. - */ - private static List monitoringApplySettingsValues = new ArrayList(); - - static { - monitoringApplySettingsValues.add(new LabelValueBean("All EJBs", "allEjbs")); - monitoringApplySettingsValues.add(new LabelValueBean("All EJBs with inherited settings", "inheritedEjbs")); - monitoringApplySettingsValues.add(new LabelValueBean("All EJBs deployed in the future", "futureDeployedEjbs")); - } - -// --------------------------------------------------------- Public Methods - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for debug properties. - */ - public static List getDebugLevels() { - return (debugLevels); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for verbosity properties. - */ - public static List getVerbosityLevels() { - return (verbosityLevels); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for boolean properties. - */ - public static List getBooleanValues() { - return (booleanValues); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for Logger Jonas Levels properties. - */ - public static List getLoggerJonasLevels() { - return (loggerJonasLevels); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for Jdbc Connection Checking Levels properties. - */ - public static List getJdbcConnectionCheckingLevels() { - return (jdbcConnectionCheckingLevels); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for Spec-Version property. - * @return a List of legal values. - */ - public static List getSpecVersion() { - return (specVersion); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for SecurityAuthenticationLdap properties. - */ - public static List getSecurityAuthenticationLdapValues() { - return (securityAuthenticationLdapValues); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for AuthenticationModeLdap properties. - */ - public static List getAuthenticationModeLdapValues() { - return (authenticationModeLdapValues); - } - - /** - * Return a List of {@link LabelValueBean}s for the legal - * settings for SecurityAlgorithms properties. - */ - public static List getSecurityAlgorithms() { - return (securityAlgorithms); - } - - /** - * Transform the collection like a string, each element are separated by the separator. - * - * @param p_Collection The collection to transform - * @param p_Separator The separator - * @return The collection string - */ - public static String getString(final Collection p_Collection, final String p_Separator) { - StringBuffer sb = new StringBuffer(); - Iterator it = p_Collection.iterator(); - while (it.hasNext()) { - sb.append(it.next()); - if (it.hasNext()) { - sb.append(p_Separator); - } - } - return sb.toString(); - } - - /** - * Transform the string like a ArrayString, each element are separated by the separator. - * - * @param p_String - * @param p_Separator The separator - * @return The list - */ - public static ArrayList getArrayList(final String p_String, final String p_Separator) { - ArrayList al = new ArrayList(); - StringTokenizer st = new StringTokenizer(p_String, p_Separator); - while (st.hasMoreTokens()) { - al.add(st.nextToken().trim()); - } - return al; - } - - /** - * Return a List of {@link LabelValueBean}s for the apply - * settings for EJB monitoring . - */ - public static List getMonitoringApplySettingsValues() { - return (monitoringApplySettingsValues); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JmsConnFact.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JmsConnFact.java deleted file mode 100644 index 879e77777c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JmsConnFact.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -public final class JmsConnFact { - private String name = null; - private String comment = null; - - protected JmsConnFact(String name, String comment) { - this.name = name; - this.comment = comment; - } - - public String getName() { - return name; - } - - public String getComment() { - return comment; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminException.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminException.java deleted file mode 100644 index a5e0945d9c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminException.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import org.ow2.jonas.lib.management.extensions.base.AdminException; - -/** - * JOnAS Administration Application Exception. - * Generic exception for all troubles of the JOnAS Administration Application. - * - * @author Michel-Ange ANTON - */ - -public class JonasAdminException extends AdminException { -// --------------------------------------------------------- Protected variables - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * Error ID - */ - protected String m_Id = null; - -// --------------------------------------------------------- Public Methods - - public JonasAdminException(final String p_Id, final String p_Message, final Throwable p_Throwable) { - super(p_Id, p_Message, p_Throwable); - } - - public JonasAdminException(final String p_Id, final String p_Message) { - super(p_Id, p_Message); - } - - public JonasAdminException(final String p_Id) { - super(p_Id); - } - - /** - * Accessor to the error ID. - * @return String The error ID - */ - @Override - public String getId() { - return m_Id; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminJmx.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminJmx.java deleted file mode 100644 index 74643e83b6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasAdminJmx.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.apache.struts.util.MessageResources; -import org.ow2.jonas.lib.management.extensions.base.AdminJmxHelper; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -import org.ow2.jonas.webapp.jonasadmin.logging.LoggerItem; -import org.ow2.jonas.webapp.jonasadmin.service.container.WebAppItem; - -/** - * Helper class supporting manipulation of MBeans (accessing MBeans). - * @author Michel-Ange ANTON

- * Contributors: Adriana Danes - */ -public class JonasAdminJmx extends AdminJmxHelper { - - -// ----------------------------------------------------------- Constructors - - /** - * Protected constructor to prevent instantiation. - */ - protected JonasAdminJmx() { - super(); - } - - - - /** - * Return the default Connection Factories. - * - * @param p_Resources The messages - * @return The list - */ - public static ArrayList getConnectionFactoriesList(final MessageResources p_Resources, final String domainName, final String serverName) { - synchronized (s_Synchro) { - ObjectName jmsServMB = JonasObjectName.jmsService(domainName); - String cfName = (String) JonasManagementRepr.getAttribute(jmsServMB - , "DefaultConnectionFactoryName", serverName); - String tcfName = (String) JonasManagementRepr.getAttribute(jmsServMB - , "DefaultTopicConnectionFactoryName", serverName); - String qcfName = (String) JonasManagementRepr.getAttribute(jmsServMB - , "DefaultQueueConnectionFactoryName", serverName); - ArrayList al = new ArrayList(); - String comment = p_Resources.getMessage("tab.connfact.defaultconnfact"); - JmsConnFact cf = new JmsConnFact(cfName, comment); - al.add(cf); - comment = p_Resources.getMessage("tab.connfact.defaulttopicconnfact"); - cf = new JmsConnFact(tcfName, comment); - al.add(cf); - comment = p_Resources.getMessage("tab.connfact.defaultqueueconnfact"); - cf = new JmsConnFact(qcfName, comment); - al.add(cf); - return al; - } - } - - /** - * Return the list of all used loggers in this JOnAS server. - * @param p_Resources The used message resource - * @param p_WhereAreYou The used WhereAreYou instance - * @param p_Action True to get the action (to use directly in jsp) or False to get the same action but in forward (write in the file struts-config.xml) - * @return The list of loggers - * @throws ManagementException - */ - public static ArrayList getLoggers(final MessageResources p_Resources, final WhereAreYou p_WhereAreYou - , final boolean p_Action) - throws MalformedObjectNameException { - String serverName = p_WhereAreYou.getCurrentJonasServerName(); - ArrayList al = new ArrayList(); - String sActionForward; - // Get JONAS logger - if (p_Action == true) { - sActionForward = "EditLoggingJonas.do"; - } - else { - sActionForward = "ActionEditLoggingJonas"; - } - String itemName = p_Resources.getMessage("logger.jonas.name"); - String type = LoggerItem.LOGGER_JONAS; - LoggerItem li = new LoggerItem(itemName, type, sActionForward); - al.add(li); - // Get Catalina Logger - if (p_WhereAreYou.isCatalinaServer() == true) { - ObjectName on = CatalinaObjectName.catalinaAccessLogValves(p_WhereAreYou. - getCurrentCatalinaDomainName()); - - Iterator it = getListMbean(on, serverName).iterator(); - while (it.hasNext()) { - ObjectName oItem = (ObjectName) it.next(); - if (p_Action) { - sActionForward = "EditCatalinaAccessLogger.do?select=" + oItem.toString(); - } - else { - sActionForward = "ActionEditCatalinaAccessLogger"; - } - itemName = p_Resources.getMessage("logger.catalina.access.name"); - String hostName = oItem.getKeyProperty("host"); - String containerName = null; - String containerType = null; - String containerLabel = null; - if (hostName == null) { - type = LoggerItem.LOGGER_CATALINA_ACCESS_ENGINE; - containerType = p_Resources.getMessage("label.loggers.container.engine"); - containerName = p_Resources.getMessage("label.loggers.container.engine.name"); - containerLabel = containerName; - } else { - String pathName = oItem.getKeyProperty("path"); - if (pathName != null) { - type = LoggerItem.LOGGER_CATALINA_ACCESS_CONTEXT; - containerName = pathName; - containerType = p_Resources.getMessage("label.loggers.container.context"); - containerLabel = WebAppItem.extractLabelPathContext(containerName, p_WhereAreYou.getCurrentCatalinaDefaultHostName()); - } else { - type = LoggerItem.LOGGER_CATALINA_ACCESS_HOST; - containerName = hostName; - containerType = p_Resources.getMessage("label.loggers.container.host"); - containerLabel = containerName; - } - } - itemName = itemName.concat(" " + containerLabel); - li = new LoggerItem(itemName, type, sActionForward, oItem.toString(), containerType, containerName); - al.add(li); - } - } - BeanComparator beanComparator = new BeanComparator(new String[]{"name"}); - // sort - Collections.sort(al, beanComparator); - return al; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasBaseAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasBaseAction.java deleted file mode 100644 index 3abe254c63..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasBaseAction.java +++ /dev/null @@ -1,1048 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Properties; -import java.util.StringTokenizer; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.struts.Globals; -import org.apache.struts.action.Action; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.util.MessageResources; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.BaseManagement; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.management.extensions.base.api.J2EEMBeanAttributeInfo; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.service.ServiceItem; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -/** - * @author Michel-Ange ANTON - * @author Florent Benoit (changes for struts 1.2.2) - */ - -public abstract class JonasBaseAction extends Action { - - // ----------------------------------------------------- Constants - - public static final int DEPTH_DOMAIN = 1; - - public static final int DEPTH_SERVER = 2; - - /** - * Global Forward error page name. - */ - public static final String GLOBAL_ERROR_FORWARD = "Global Error"; - - // --------------------------------------------------------- Instance - // Variables - - /** - * The MessageResources we will be retrieving messages from. - */ - protected MessageResources m_Resources = null; - - protected HttpSession m_Session = null; - - protected ActionMessages m_Errors = null; - - protected WhereAreYou m_WhereAreYou = null; - - // --------------------------------------------------------- Public Methods - - public abstract ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, ServletException; - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * @param p_Mapping The ActionMapping used to select this instance - * @param p_Form The optional ActionForm bean for this request (if any) - * @param p_Request The HTTP request we are processing - * @param p_Response The HTTP response we are creating - * @return The forward where redirect - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward execute(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - ActionForward oActionForward = null; - - // Instance variables - initialize(p_Request); - - // Verify that a instance of WhereAreYou object exists - if (m_WhereAreYou == null) { - oActionForward = (p_Mapping.findForward("Main Index")); - } else { - oActionForward = executeAction(p_Mapping, p_Form, p_Request, p_Response); - } - return oActionForward; - } - - /** - * Initialize the instance variables. - * @param p_Request The HTTP request we are processing - */ - protected void initialize(final HttpServletRequest p_Request) { - // Acquire the resources that we need - m_Session = p_Request.getSession(); - if (m_Resources == null) { - m_Resources = (MessageResources) getServlet().getServletContext().getAttribute(Globals.MESSAGES_KEY); - } - m_Errors = new ActionMessages(); - m_WhereAreYou = (WhereAreYou) m_Session.getAttribute(WhereAreYou.SESSION_NAME); - - } - - /** - * Return the name of the branch in the tree for the selected node. - * @param p_Width Depth of the branch - * @return The branch name - */ - protected String getTreeBranchName(final int p_Width) { - StringBuffer sb = new StringBuffer(); - try { - StringTokenizer st = new StringTokenizer(m_WhereAreYou.getSelectedNameNode(), WhereAreYou.NODE_SEPARATOR); - for (int i = 0; (st.hasMoreTokens() && (i < p_Width)); i++) { - if (i > 0) { - sb.append(WhereAreYou.NODE_SEPARATOR); - } - sb.append(st.nextToken()); - } - } catch (NullPointerException e) { - // none action - } - return sb.toString(); - } - - /** - * Add a global error in m_Errorsinstance of - * m_ErrorsActionMessages and log it. - * @param p_Throwable Error to add - */ - protected void addGlobalError(final Throwable p_Throwable) { - String sMessResource; - String sMessageError = p_Throwable.getMessage(); - if (sMessageError == null) { - sMessResource = m_Resources.getMessage("error.global.log", p_Throwable.getClass().getName()); - // getServlet().log(sMessResource, p_Throwable); - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, sMessResource); - } - m_Errors.add("error.global", new ActionMessage("error.global", p_Throwable.getClass().getName())); - } else { - sMessResource = m_Resources.getMessage("error.global.message.log", p_Throwable.getClass().getName(), sMessageError); - // getServlet().log(sMessResource, p_Throwable); - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, sMessResource); - } - m_Errors.add("error.global", new ActionMessage("error.global.message", p_Throwable.getClass().getName(), - sMessageError)); - } - } - - /** - * MBean ObjectName accessor. - * @param on Instance of ObjectName to access to MBean - * @param param invoke parameters - * @param signature invoke parameters signature - */ - protected Object invoke(final ObjectName on, final String operation, final Object[] param, final String[] signature) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - return JonasManagementRepr.invoke(on, operation, param, signature, pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String getStringAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - String s = (String) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return s; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String[] getStringArrayAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - String[] s = (String[]) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return s; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setStringAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final String p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, p_Value, pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected int getIntegerAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Integer o = (Integer) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.intValue(); - } catch (Exception e) { - addGlobalError(e); - } - return 0; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String toStringIntegerAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - try { - Integer o = (Integer) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, serverName); - return o.toString(); - } catch (Exception e) { - addGlobalError(e); - } - return null; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setIntegerAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final int p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, new Integer(p_Value), pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setIntegerAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final String p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - if ((p_Value != null) && (p_Value.length() > 0)) { - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, new Integer(p_Value), pServer); - } - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected long getLongAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Long o = (Long) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.longValue(); - } catch (Exception e) { - addGlobalError(e); - } - return 0; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected int getIntAttribute(final ObjectName objectName, final String attrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Integer o = (Integer) JonasManagementRepr.getAttribute(objectName, attrName, pServer); - return o.intValue(); - } catch (Exception e) { - addGlobalError(e); - } - return 0; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String toStringLongAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Long o = (Long) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.toString(); - } catch (Exception e) { - addGlobalError(e); - // None - } - return null; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setLongAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final long p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, new Long(p_Value), pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected long getShortAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Short o = (Short) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.longValue(); - } catch (Exception e) { - addGlobalError(e); - // None - } - return 0; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String toStringShortAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Short o = (Short) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.toString(); - } catch (Exception e) { - addGlobalError(e); - // None - } - return null; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setShortAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final long p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, new Long(p_Value), pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected boolean getBooleanAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Boolean o = (Boolean) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.booleanValue(); - } catch (Exception e) { - addGlobalError(e); - // None - } - return false; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected String toStringBooleanAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - Boolean o = (Boolean) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer); - return o.toString(); - } catch (Exception e) { - addGlobalError(e); - // None - } - return null; - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @param p_Value Value to write - */ - protected void setBooleanAttribute(final ObjectName p_ObjectName, final String ps_AttrName, final boolean p_Value) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - JonasManagementRepr.setAttribute(p_ObjectName, ps_AttrName, new Boolean(p_Value), pServer); - } - - /** - * MBean ObjectName accessor. - * @param p_ObjectName Instance of ObjectName to access to MBean - * @param ps_AttrName Attribute name of MBean - * @return The value of attribute - */ - protected List getListAttribute(final ObjectName p_ObjectName, final String ps_AttrName) { - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - try { - return ((List) JonasManagementRepr.getAttribute(p_ObjectName, ps_AttrName, pServer)); - } catch (Exception e) { - addGlobalError(e); - // None - } - return new ArrayList(); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @return The value of attribute - */ - protected String getStringAttribute(final Properties p_Props, final String ps_AttrName) { - return p_Props.getProperty(ps_AttrName); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Default The returned value if the attribute don't exists in the - * properties - * @return The value of attribute - */ - protected String getStringAttribute(final Properties p_Props, final String ps_AttrName, final String p_Default) { - return p_Props.getProperty(ps_AttrName, p_Default); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Value Value to write - */ - protected void setStringAttribute(final Properties p_Props, final String ps_AttrName, final String p_Value) { - if (p_Value != null) { - p_Props.setProperty(ps_AttrName, p_Value); - } - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Value Value to write - * @param p_Default The forced value if the value is null or empty - */ - protected void setStringAttribute(final Properties p_Props, final String ps_AttrName, final String p_Value, - final String p_Default) { - if ((p_Value != null) && (p_Value.length() == 0)) { - p_Props.setProperty(ps_AttrName, p_Default); - } else { - p_Props.setProperty(ps_AttrName, p_Value); - } - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @return The value of attribute (return 0 if attribute don't exists) - */ - protected int getIntegerAttribute(final Properties p_Props, final String ps_AttrName) { - return getIntegerAttribute(p_Props, ps_AttrName, 0); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Default The returned value if the attribute don't exists in the - * properties - * @return The value of attribute - */ - protected int getIntegerAttribute(final Properties p_Props, final String ps_AttrName, final int p_Default) { - try { - String s = getStringAttribute(p_Props, ps_AttrName); - if (s != null) { - return Integer.parseInt(s); - } - } catch (Exception e) { - addGlobalError(e); - // None - } - return p_Default; - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Value Value to write - */ - protected void setIntegerAttribute(final Properties p_Props, final String ps_AttrName, final int p_Value) { - p_Props.setProperty(ps_AttrName, String.valueOf(p_Value)); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @return The value of attribute (return 0 if attribute don't exists) - */ - protected long getLongAttribute(final Properties p_Props, final String ps_AttrName) { - return getLongAttribute(p_Props, ps_AttrName, 0L); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Default The returned value if the attribute don't exists in the - * properties - * @return The value of attribute - */ - protected long getLongAttribute(final Properties p_Props, final String ps_AttrName, final long p_Default) { - try { - String s = getStringAttribute(p_Props, ps_AttrName); - if (s != null) { - return Long.parseLong(s); - } - } catch (Exception e) { - addGlobalError(e); - // None - } - return p_Default; - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Value Value to write - */ - protected void setLongAttribute(final Properties p_Props, final String ps_AttrName, final long p_Value) { - p_Props.setProperty(ps_AttrName, String.valueOf(p_Value)); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @return The value of attribute (return false if attribute don't exists) - */ - protected boolean getBooleanAttribute(final Properties p_Props, final String ps_AttrName) { - return getBooleanAttribute(p_Props, ps_AttrName, false); - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Default The returned value if the attribute don't exists in the - * properties - * @return The value of attribute - */ - protected boolean getBooleanAttribute(final Properties p_Props, final String ps_AttrName, final boolean p_Default) { - try { - String s = getStringAttribute(p_Props, ps_AttrName); - if (s != null) { - return Boolean.getBoolean(s); - } - } catch (Exception e) { - addGlobalError(e); - // None - } - return p_Default; - } - - /** - * Properties accessor. - * @param p_Props Instance of Properties - * @param ps_AttrName Attribute name of Properties - * @param p_Value Value to write - */ - protected void setBooleanAttribute(final Properties p_Props, final String ps_AttrName, final boolean p_Value) { - p_Props.setProperty(ps_AttrName, String.valueOf(p_Value)); - } - /** - * Get properties from stringified property table. - * @param ps_Props stringified property table - * @return properties. - */ - protected Properties getPropsFromString(final String ps_Props) { - // Clean the string - String sProps = ps_Props.trim(); - sProps = removeChar(sProps, '\r'); - sProps = removeChar(sProps, '\n'); - Properties sp = new Properties(); - StringTokenizer st = new StringTokenizer(sProps, ","); - while (st.hasMoreTokens()) { - String token = st.nextToken(); - int pos = token.indexOf("="); - String propName = token.substring(0, pos); - String propValue = token.substring(pos + 1); - sp.setProperty(propName, propValue); - } - return sp; - } - - /** - * Remove a specific character in a String Do not use replaceAll as it is a - * JDK 1.4 method. - * @param string the given string - * @param c character to remove in the String - * @return a string - */ - protected static String removeChar(final String string, final char c) { - StringBuffer sb = new StringBuffer(); - sb.setLength(string.length()); - int i = 0; - for (int j = 0; j < string.length(); j++) { - char cur = string.charAt(j); - if (cur != c) { - sb.setCharAt(i++, cur); - } - } - return sb.toString(); - } - - /** - * Refresh the entire management tree. - * @throws Exception any. - */ - protected void refreshTree(final HttpServletRequest p_Request) throws Exception { - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // tree root - TreeControlNode root = oControl.getRoot(); - // domain node - TreeControlNode domainNode = oControl.findNode("domain"); - if (domainNode != null) { - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove node - domainNode.remove(); - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - // TODO Flex integration - // oBuilder.getDomainNode(root, m_Resources, p_Request); - oBuilder.getRootNode(root, m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - } - /** - * refresh service's tree. - * @param request the http request. - * @throws Exception any. - */ - protected void refreshServicesTree(final HttpServletRequest request) throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - - String servicesNodeName = "domain" + WhereAreYou.NODE_SEPARATOR + serverName + WhereAreYou.NODE_SEPARATOR + "services"; - // The node representing services in the jonasAdmin tree. - TreeControlNode servicesNode = oControl.findNode(servicesNodeName); - if (servicesNode != null) { - // TreeControlNode serverNode= servicesNode.getParent(); - TreeControlNode[] aoNodes = servicesNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // servicesNode.remove(); - boolean refreshServices = true; - // oBuilder.getServices(serverNode, m_Resources, request, - // domainName, serverName, refreshServices); - oBuilder.getServicesNodes(servicesNode, m_Resources, request, domainName, serverName, refreshServices); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - // Force display to refresh - m_WhereAreYou.setTreeToRefresh(true); - } - } - - /** - * Refresh the domain deployment nodes of the tree. - * @param p_Request the http request - * @throws Exception any. - */ - protected void refreshDomainDeployTree(final HttpServletRequest p_Request) throws Exception { - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - TreeControlNode domainNode = oControl.findNode("domain"); - if (domainNode != null) { - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove node - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getDomainDeploy(oControl.findNode("domain"), m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - - } - - /** - * @return the current server's JONAS_BASE. - */ - protected String getJonasBase() { - String pDomain = m_WhereAreYou.getCurrentDomainName(); - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(pDomain, pServer); - String jonasBase = getStringAttribute(j2eeServerOn, "jonasBase"); - if (!jonasBase.endsWith(File.separator)) { - jonasBase = jonasBase.concat(File.separator); - } - return jonasBase; - } - - /** - * Gets the server name for given provider url. - * @param providerUrl get name for this - * @param checkWithinInThis check in this list - * @return - */ - public static String getNameForProvider(final String providerUrl, final Collection checkWithinInThis) { - - String urlCp = providerUrl; - String host = urlCp.substring(urlCp.lastIndexOf("/") + 1, urlCp.lastIndexOf(":")); - if (host.startsWith("127")) { - urlCp = urlCp.replace(host, "localhost"); - } - for (Object object : checkWithinInThis) { - ServerProxy srv = (ServerProxy) object; - List urls = srv.getUrls(); - String url; - for (int i = 0; i < urls.size(); i++) { - url = urls.get(i).toString(); - if (url.contains(urlCp)) { - return srv.getName(); - } - } - } - return null; - } - /** - * Get service item. - * @param serviceName the service name. - * @return the service item. - */ - public ServiceItem getServerItem(final String serviceName) { - boolean active = isActive(serviceName); - if (ServiceName.JMX.getName().equals(serviceName)) { - String forward = "ActionEditJmxServer"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.jmx"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("mandatory"); - return item; - } - if (ServiceName.REGISTRY.getName().equals(serviceName)) { - String forward = "ActionListRegistry"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.registry"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("mandatory"); - return item; - } - if (ServiceName.CMI.getName().equals(serviceName)) { - String forward = "ActionDisplayCmi"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.cmi"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.HA.getName().equals(serviceName)) { - String forward = null; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.ha"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.EAR.getName().equals(serviceName)) { - String forward = "ActionListAppContainers"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.ear"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.EJB2.getName().equals(serviceName)) { - String forward = "ActionListContainers"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.ejb2Containers"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.EJB3.getName().equals(serviceName)) { - String forward = "ActionListContainers"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.ejb3Containers"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.WEB.getName().equals(serviceName)) { - String forward = "ActionListWebContainers"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.web"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.DBM.getName().equals(serviceName)) { - String forward = "ActionListDatabases"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.database"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.DB.getName().equals(serviceName)) { - String forward = null; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.db"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.RESOURCE.getName().equals(serviceName)) { - String forward = "ActionListResourceAdapters"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.resource"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.JTM.getName().equals(serviceName)) { - String forward = "ActionEditJtmService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.transaction"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("technical"); - return item; - } - if (ServiceName.MAIL.getName().equals(serviceName)) { - String forward = "ActionEditMailService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.mail"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.SECURITY.getName().equals(serviceName)) { - String forward = "ActionEditServiceSecurity"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.security"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("mandatory"); - return item; - } - if (ServiceName.DISCOVERY.getName().equals(serviceName)) { - String forward = "ActionEditServiceDiscovery"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.discovery"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.DEPMONITOR.getName().equals(serviceName)) { - String forward = "ActionEditServiceDepmonitor"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.depmonitor"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.WM.getName().equals(serviceName)) { - String forward = "ActionEditWorkmanagerService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.workmanager"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.WC.getName().equals(serviceName)) { - String forward = "ActionEditWorkcleanerService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.workcleaner"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.WS.getName().equals(serviceName)) { - String forward = "ActionListWebService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.webservices"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("container"); - return item; - } - if (ServiceName.WSDLPUBLISHER.getName().equals(serviceName)) { - String forward = null; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.wsdlpublisher"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("webservices"); - return item; - } - if (ServiceName.JAXRPC.getName().equals(serviceName)) { - String forward = null; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.jaxrpc"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("webservices"); - return item; - } - if (ServiceName.JAXWS.getName().equals(serviceName)) { - String forward = null; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.jaxws"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("webservices"); - return item; - } - if (ServiceName.VERSIONING.getName().equals(serviceName)) { - String forward = "ActionEditVersioningService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.versioning"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - if (ServiceName.SMARTCLIENT.getName().equals(serviceName)) { - String forward = "ActionEditSmartclientService"; - String messageName = m_Resources.getMessage("treenode.jonas.server.services.smartclient"); - ServiceItem item = new ServiceItem(messageName, active, forward); - item.setPropName(serviceName); - item.setCategory("other"); - return item; - } - return null; - } - /** - * true if the given service is active. - * @param serviceName the service name. - * @return true if the given service is active. - */ - public boolean isActive(final String serviceName) { - String pDomain = m_WhereAreYou.getCurrentDomainName(); - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(pDomain, pServer); - String operation = "getServiceState"; - String[] param = new String[1]; - param[0] = serviceName; - String[] signature = {"java.lang.String"}; - String state = (String) JonasManagementRepr.invoke(j2eeServerOn, operation, param, signature, pServer); - if ("RUNNING".equals(state)) { - return true; - } else { - return false; - } - } - - /** - * Get management attributes. - * @param objectName objectName - * @param serverName server name. - * @return attributes for the given objectName. - */ - public J2EEMBeanAttributeInfo[] getAttributes(final ObjectName objectName, final String serverName) { - try { - return BaseManagement.getInstance().getAttributes(objectName, serverName); - } catch (ManagementException e) { - ; - } - return null; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasServerItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasServerItem.java deleted file mode 100644 index c4b88fd3be..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasServerItem.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.Serializable; - -public class JonasServerItem implements Serializable { - private String nameServer = null; - private String nameRmiConnector = null; - public JonasServerItem() { - super(); - } - - public String getNameServer() { - return nameServer; - } - - public void setNameServer(String nameServer) { - this.nameServer = nameServer; - } - - public String getNameRmiConnector() { - return nameRmiConnector; - } - - public void setNameRmiConnector(String nameRmiConnector) { - this.nameRmiConnector = nameRmiConnector; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasTreeBuilder.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasTreeBuilder.java deleted file mode 100644 index d9dc7fe445..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/JonasTreeBuilder.java +++ /dev/null @@ -1,2805 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Set; - -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanInfo; -import javax.management.MBeanOperationInfo; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.Globals; -import org.apache.struts.action.ActionServlet; -import org.apache.struts.util.MessageResources; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.lib.management.extensions.base.mbean.J2eeMbeanItem; -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.lib.management.extensions.base.mbean.OwnerMbeanItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.catalina.ConnectorItem; -import org.ow2.jonas.webapp.jonasadmin.catalina.ConnectorItemByPort; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; -import org.ow2.jonas.webapp.jonasadmin.joramplatform.ItemDestination; -import org.ow2.jonas.webapp.jonasadmin.logging.LoggerItem; -import org.ow2.jonas.webapp.jonasadmin.service.container.ContainerItem; -import org.ow2.jonas.webapp.jonasadmin.service.container.ContainerItemByFile; -import org.ow2.jonas.webapp.jonasadmin.service.container.WebAppItem; -import org.ow2.jonas.webapp.jonasadmin.service.container.WebAppItemByPathContext; -import org.ow2.jonas.webapp.jonasadmin.service.resource.ResourceItem; -import org.ow2.jonas.webapp.jonasadmin.service.resource.ResourceItemByFile; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.JOnASProvider; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.HandlerItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.PortComponentItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.WebServiceDescriptionItem; -import org.ow2.jonas.webapp.taglib.TreeBuilder; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; -/** - * Implementation of TreeBuilder that adds the nodes required - * for administering a JOnAS domain / server. - * - * @author Michel-Ange ANTON (initial developer) - * @author Adriana Danes : add nodes for JMS service - * @author Florent Benoit (changes for struts 1.2.2) - * @author eyindanga - */ -public class JonasTreeBuilder implements TreeBuilder { - -// ----------------------------------------------------- Instance Variables - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); -// ---------------------------------------------------- TreeBuilder Methods - /** - * Add the required nodes to the specified treeControl - * instance. - * - * @param treeControl The TreeControl to which we should - * add our nodes - * @param servlet The controller servlet for the admin application - * @param request The servlet request we are processing - */ - public void buildTree(final TreeControl treeControl, final ActionServlet servlet - , final HttpServletRequest request) { - try { - TreeControlNode baseRootNode = treeControl.getRoot(); - MessageResources resources = (MessageResources) servlet.getServletContext(). - getAttribute(Globals.MESSAGES_KEY); - // TODO Flex integration - //getDomainNode(baseRootNode, resources, request); - getRootNode(baseRootNode, resources, request); - } catch (Throwable t) { - t.printStackTrace(System.out); - } - } - -// ------------------------------------------------------ Protected Methods - - protected void getRootNode(final TreeControlNode p_BaseRootNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - String adminServerName = oWhere.getAdminJonasServerName(); - boolean master = isMaster(p_Request, domainName, adminServerName); - String managedServerName = oWhere.getCurrentJonasServerName(); - String sNodeLabel = "JonasAdmin"; - String rootName = "domain"; - String sIcon = "icon/domain_jonas.gif"; - TreeControlNode rootNode = new TreeControlNode(rootName, sIcon, sNodeLabel, null, "content", true); - if (!addNode(p_BaseRootNode, rootNode)) { - return; - } - // Add children - if (master) { - getMonitoring(rootNode, p_Resources, p_Request, domainName, managedServerName); - getDomainNode(rootNode, p_Resources, p_Request); - getDomainDeploy(rootNode, p_Resources, p_Request); - } - getServer(rootNode, p_Resources, p_Request, domainName, managedServerName); - getJoramPlatform(rootNode, managedServerName, p_Resources, p_Request); - getMBeans(rootNode, p_Resources, p_Request); - } - /** - * Append node for the domain management (struts version). - * - * @param p_RootNode Root node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getDomainNode(final TreeControlNode p_RootNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - // Add domain node - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - //String sDomain = oWhere.getCurrentDomain().toString();// OBJECT_NAME - String sDomainName = oWhere.getCurrentDomainName();// value of the 'name' key property - String sServerName = oWhere.getCurrentJonasServerName(); - - String sNodeLabel = p_Resources.getMessage("treenode.jonas.domain") + " ( " + sDomainName + " )"; - // domain*domain - String sNodeName = p_RootNode.getName() + WhereAreYou.NODE_SEPARATOR + "domain"; - TreeControlNode domainNode = new TreeControlNode(sNodeName - , "icon/domain_jonas.gif" - , sNodeLabel - , "EditDomain.do?select=" + encode(sDomainName) + "&version=jsp" - , "content", true); - addNode(p_RootNode, domainNode); - } - - /** - * Returns if the current server (with discovery running) is a master server. - * @return if the current server is a master server. - */ - protected boolean isMaster(final HttpServletRequest p_Request, final String domainName, final String serverName) { - boolean result = false; - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - ObjectName oObjectName = oWhere.getCurrentDomain(); - if (JonasAdminJmx.hasMBeanName(oObjectName, serverName)) { - result = ((Boolean) JonasManagementRepr.getAttribute(oObjectName, "master", serverName)).booleanValue(); - } - return result; - } - - /** - * Append nodes for domain management deployment. - * - * @param p_DomainNode Domain node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - * @param p_DomainName The name of the domain. - */ - protected void getDomainDeploy(final TreeControlNode p_RootNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - String deployments = p_Resources.getMessage("treenode.jonas.server.deployments"); - String label = p_Resources.getMessage("treenode.jonas.domain") + " " + deployments; - String nodeName = p_RootNode.getName() + WhereAreYou.NODE_SEPARATOR + deployments; - TreeControlNode nodeDeployments = new TreeControlNode(nodeName - , "icon/deployDomainManage.gif" - , label, null, "content", false); - if (addNode(p_RootNode, nodeDeployments, 1)) { - getDomainDeploymentEar(nodeDeployments, p_Resources); - getDomainDeploymentEjb(nodeDeployments, p_Resources); - getDomainDeploymentWebAppli(nodeDeployments, p_Resources); - getDomainDeploymentRar(nodeDeployments, p_Resources); - getDomainDeployment(nodeDeployments, p_Resources); - } - } - - /** - * Append node for Ear deployment using domain management. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDomainDeploymentEar(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR - , "icon/deployDomain_ear.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR) - , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - - /** - * Append node for all deployment using domain management. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDomainDeployment(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING - , "icon/deployDomain_ear.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." + WhereAreYou.DOMAIN_DEPLOYMENT_STRING) - , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING - , "content", false); - - addNode(p_NodeDeployments, oNode); - } - /** - * Append node for Ejb deployment using domain management. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDomainDeploymentEjb(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR - , "icon/deployDomain_jar.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR) - , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Web deployment using domain management. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDomainDeploymentWebAppli(final TreeControlNode p_NodeDeployments - , final MessageResources p_Resources) { - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR - , "icon/deployDomain_war.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR) - , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Rar deployment using domain management. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDomainDeploymentRar(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR - , "icon/deployDomain_rar.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR) - , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - /** - * Append nodes for monitoring of elements in the domain (servers, clusters, cluster daemons) - */ - protected void getMonitoring(final TreeControlNode p_DomainNode, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String domainName, final String serverName) { - String domainNodeName = p_DomainNode.getName(); - TreeControlNode nodeMonitoring = new TreeControlNode(domainNodeName - + WhereAreYou.NODE_SEPARATOR + "monitoring" - , "icon/monitoring.gif" - , p_Resources.getMessage("treenode.jonas.domain.monitoring") - , null, "content", true); - if (addNode(p_DomainNode, nodeMonitoring, 0)) { - getMonitoringNodeList(nodeMonitoring, p_Resources, p_Request, domainName, serverName); - getMonitoringClusterList(nodeMonitoring, p_Resources, p_Request, domainName, serverName); - getMonitoringCDList(nodeMonitoring, p_Resources, p_Request, domainName, serverName, false); - } - } - /** - * Append nodes for servers monitoring - */ - protected void getMonitoringNodeList(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String domainName, final String serverName) { - // get server proxies - try { - ObjectName on = JonasObjectName.serverProxys(domainName); - Iterator itNames = JonasAdminJmx.getListMbean(on, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName elem = (ObjectName) itNames.next(); - TreeControlNode node = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR + elem.getKeyProperty("name") - , "icon/BalJonasTree.gif" - , elem.getKeyProperty("name") - , "DisplayNodeInfo.do?node=" + elem.getKeyProperty("name") - , "content", true); - addNode(p_ParentNode, node); - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - } - - /** - * Append nodes for clusters monitoring - */ - protected void getMonitoringClusterList(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String domainName, final String serverName) { - - String clusterType; - String iconPath; - String membersAttribute; - String clusterActionPage; - String memberActionPage; - - // tomcat cluster - clusterType = "TomcatCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "TomcatClusterInfo.do?clust="; - memberActionPage = "TomcatMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - - - // loadbalancing cluster - clusterType = "JkCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "JkClusterInfo.do?clust="; - memberActionPage = "JkMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - - // CMI cluster - clusterType = "CmiCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "CmiClusterInfo.do?clust="; - memberActionPage = "CmiMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - - // EjbHa cluster - clusterType = "EjbHaCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "EjbHaClusterInfo.do?clust="; - memberActionPage = "EjbHaMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - - // Joram cluster - clusterType = "JoramCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "JoramClusterInfo.do?clust="; - memberActionPage = "JoramMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - - // Logical cluster - clusterType = "LogicalCluster"; - iconPath = "icon/domain_jonas.gif"; - membersAttribute = "Members"; - clusterActionPage = "LogicalClusterInfo.do?clust="; - memberActionPage = "LogicalMemberInfo.do"; - - displayClusterMembers(domainName, p_ParentNode, clusterType, - iconPath, membersAttribute, - clusterActionPage, memberActionPage, - domainName, serverName); - } - /** - * - * @param sDomainName - * @param p_ParentNode - * @param clusterType - * @param iconPath - * @param membersAttribute - * @param clusterActionPage - * @param memberActionPage - */ - private void displayClusterMembers(final String sDomainName, final TreeControlNode p_ParentNode, final String clusterType, - final String iconPath, final String membersAttribute, - final String clusterActionPage, final String memberActionPage, final String domainName, final String serverName) { - boolean isLogicalCluster = false; - if (clusterType.equals("LogicalCluster")) { - isLogicalCluster = true; - } - ObjectName onClusters; - try { - onClusters = JonasObjectName.clusters(sDomainName, clusterType); - Iterator itNames = JonasAdminJmx.getListMbean(onClusters, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName on = (ObjectName) itNames.next(); - String clusterName = on.getKeyProperty("name"); - if (clusterName.equals(domainName)) { - continue; - } - String clusterNodeName = clusterName + " - (" + on.getKeyProperty("type") + ")"; - // Cluster node - TreeControlNode nodeCluster = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR + clusterNodeName - , iconPath - , clusterNodeName - , clusterActionPage + clusterName - , "content", true); - if (addNode(p_ParentNode, nodeCluster)) { - String[] members = null; - members = (String[]) JonasManagementRepr.getAttribute(on, membersAttribute, serverName); - String memberAction = null; - if (members != null) { - for (int i = 0; i < members.length; i++) { - ObjectName onMember = new ObjectName(members[i]); - String memberName = onMember.getKeyProperty("name"); - if ("LogicalCluster".equals(clusterType)) { - memberAction = null; - } else { - memberAction = memberActionPage - + "?member=" + memberName - + "&clust=" + clusterName; - } - // Members node - TreeControlNode node = new TreeControlNode(nodeCluster.getName() - + WhereAreYou.NODE_SEPARATOR + memberName, "icon/BalJonasTree.gif" - , memberName - , memberAction, "content", true); - addNode(nodeCluster, node); - } - } - } - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - } - - /** - * Append nodes for cluster daemons. - * TO DO remove isNotMonitoring usage. This method is now always called - * for monitoring purpose. - * @param p_ParentNode - * @param p_Resources - * @param p_Request - * @param domainName - * @param serverName - * @param isNotMonitoring - */ - protected void getMonitoringCDList(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String domainName, final String serverName, final boolean isNotMonitoring) { - try { - ObjectName on = JonasObjectName.clusterDaemonProxys(domainName); - Iterator itNames = JonasAdminJmx.getListMbean(on, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName elem = (ObjectName) itNames.next(); - String state= (String) JonasManagementRepr.getAttribute(elem, "State", serverName); - if (state.equals("RUNNING")) { - TreeControlNode node = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR + "ClusterDaemonProxy" + elem.getKeyProperty("name") - , "icon/BalJonasGreen.gif" - , elem.getKeyProperty("name") - , "DaemonProxyClusterInfo.do?node=" + elem.getKeyProperty("name") + "&isNotMonitoring=" + isNotMonitoring - , "content", true); - addNode(p_ParentNode, node); - } - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - } - - /** - * Append nodes for a defined Jonas server. - * - * @param p_DomainNode Domain node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getServer(final TreeControlNode p_DomainNode - , final MessageResources p_Resources, final HttpServletRequest p_Request - , final String p_DomainName, final String p_ServerName) { - // Add server node - String sServerName = p_ServerName; - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String sServer = oWhere.getCurrentJonasServer().toString(); - String sNodeLabel = p_Resources.getMessage("treenode.jonas.server") + " ( " + sServerName + " )"; - String sNodeName = p_DomainNode.getName() + WhereAreYou.NODE_SEPARATOR + sServerName; - TreeControlNode serverNode = new TreeControlNode(sNodeName - , "icon/BalJonasTree.gif" - , sNodeLabel - , "EditJonasServer.do?select=" + encode(sServer) - , "content", true); - if (addNode(p_DomainNode,serverNode)) { - getServerMonitoring(serverNode, p_Resources); - getLogging(serverNode, p_Resources, p_Request); - getProtocols(serverNode, p_Resources, p_Request); - boolean refreshServices = false; - getServices(serverNode, p_Resources, p_Request, p_DomainName, sServerName); - getDeployments(serverNode, p_Resources, p_Request); - getResources(serverNode, p_Resources, p_Request); - getSecurity(serverNode, p_Resources, p_Request); - // Add node for MQ connector support - getJonasMqConnectorPlatform(serverNode, sServerName, p_Resources, p_Request); - } - } - - /** - * Append nodes for Server Monitoring. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServerMonitoring(final TreeControlNode p_ServerNode, final MessageResources p_Resources) { - // Monitoring server Service node - TreeControlNode node = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "monitoring" - , "icon/monitoring.gif" - , p_Resources.getMessage("treenode.jonas.server.monitoring") - , "EditMonitoring.do" - , "content", false); - addNode(p_ServerNode, node); - } - - /** - * Append nodes for Logging. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getLogging(final TreeControlNode p_ServerNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - // Logging server Service node - TreeControlNode node = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "logging" - , "icon/loggers.gif" - , p_Resources.getMessage("treenode.jonas.server.logging") - , "ListLoggers.do" - , "content", false); - addNode(p_ServerNode, node); - // Add all loggers - getLoggers(node, p_Resources, p_Request); - } - - /** - * Append nodes for each logger. - * - * @param p_LoggingNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - public void getLoggers(final TreeControlNode p_LoggingNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - // Get WhereAreYou instance in session - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - // Get list of loggers with Action name - ArrayList al = null; - try { - al = JonasAdminJmx.getLoggers(p_Resources, oWhere, true); - // Build the node of each logger - LoggerItem oLog; - String sIcon = "icon/loggers.gif"; - String rootNodeName = p_LoggingNode.getName(); - String nodeName; - for (int i = 0; i < al.size(); i++) { - oLog = (LoggerItem) al.get(i); - if (LoggerItem.LOGGER_JONAS.equals(oLog.getType())) { - sIcon = "icon/logger_jonas.gif"; - nodeName = rootNodeName + WhereAreYou.NODE_SEPARATOR + LoggerItem.LOGGER_JONAS; - } else /*if (LoggerItem.LOGGER_CATALINA_ACCESS.equals(oLog.getType()) == true)*/ { - sIcon = "icon/logger_http.gif"; - nodeName = rootNodeName - + WhereAreYou.NODE_SEPARATOR - + oLog.getType() - + WhereAreYou.NODE_SEPARATOR - + oLog.getContainerName(); - } - // Add a logger node - TreeControlNode node = new TreeControlNode(nodeName, sIcon - , oLog.getName() - , oLog.getForward() - , "content", false); - addNode(p_LoggingNode, node); - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - } - - /** - * Append node for the services sub-tree - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - * @exception Exception if an exception occurs building the tree - */ - protected void getServices(final TreeControlNode serverNode, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String p_DomainName, final String p_ServerName) { - // Services node - TreeControlNode servicesNode = new TreeControlNode(serverNode.getName() - + WhereAreYou.NODE_SEPARATOR + "services" - , "icon/services.gif" - , p_Resources.getMessage("treenode.jonas.server.services") - , "ListServices.do" - , "content", false); - if (addNode(serverNode, servicesNode)) { - getServicesNodes(servicesNode, p_Resources, p_Request, p_DomainName, p_ServerName, false); - } - } - - public void getServicesNodes(final TreeControlNode servicesNode - , final MessageResources p_Resources, final HttpServletRequest p_Request, final String domainName, final String serverName, final boolean refreshServices) { - - // Add EAR service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.earService(domainName), serverName)) { - getServiceApp(servicesNode, p_Resources, domainName, serverName); - } - // Add node for EJB2 and EJB3 services - if (JonasAdminJmx.hasMBeanName(JonasObjectName.ejbService(domainName), serverName)) { - getServiceEjbContainer(servicesNode, p_Resources, domainName, serverName); - } else { - // check for ejb3 - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - String[] services = (String[]) JonasManagementRepr.getAttribute(on, "services", serverName); - for (String service:services) { - if ("ejb3".equals(service)) { - getServiceEjbContainer(servicesNode, p_Resources, domainName, serverName); - break; - } - } - } - // Add resources service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.resourceService(domainName), serverName)) { - getServiceResourceAdapter(servicesNode, p_Resources, domainName, serverName); - } - // Add web service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.webContainerService(domainName), serverName)) { - getServiceWeb(servicesNode, p_Resources, p_Request, domainName, serverName); - } - // Add dbm service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.databaseService(domainName), serverName)) { - getServiceDatabase(servicesNode, p_Resources, domainName, serverName); - } - // Add depmonitor service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.deployableMonitorService(domainName), serverName)) { - getServiceDepmonitor(servicesNode, p_Resources, domainName, serverName); - } - // Add discovery service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.discoveryService(domainName), serverName)) { - getServiceDiscovery(servicesNode, p_Resources, domainName, serverName); - } - // Add mail service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.mailService(domainName), serverName)) { - getServiceMail(servicesNode, p_Resources, p_Request, domainName, serverName); - } - // Add security service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.securityService(domainName), serverName)) { - getServiceSecurity(servicesNode, p_Resources, domainName, serverName); - } - // Add smartclient service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.smartclient(domainName), serverName)) { - getServiceSmartclient(servicesNode, p_Resources, domainName, serverName); - } - // Add jtm service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.transactionService(domainName), serverName)) { - getServiceTransaction(servicesNode, p_Resources, domainName, serverName); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.workCleaner(domainName), serverName)) { - getServiceWorkCleaner(servicesNode, p_Resources, domainName, serverName); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.workManager(domainName), serverName)) { - getServiceWorkManager(servicesNode, p_Resources, domainName, serverName); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.versioning(domainName), serverName)) { - getServiceVersioning(servicesNode, p_Resources, domainName, serverName); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.wsService(domainName), serverName)) { - getServiceWebService(servicesNode, p_Resources, p_Request, domainName, serverName); - } - } - /** - * Append node for Ear service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * - * @exception Exception if an exception occurs building the tree - */ - protected void getServiceApp(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "ear", "icon/service_application.gif" - , p_Resources.getMessage("treenode.jonas.server.services.ear") - , "ListAppContainers.do?refresh=true" - , "content", false); - if (addNode(p_NodeServices, nodeService)) { - // Add App Containers nodes - getAppContainers(nodeService, p_Resources, p_DomainName, p_ServerName); - } - } - - /** - * Append node for all App Containers. - * - * @param p_NodeParent Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - public void getAppContainers(final TreeControlNode p_NodeParent, final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - String sPath; - String sFile; - String sNodeName; - String sName; - ArrayList al = new ArrayList(); - String serverName = p_ServerName; - // Get Container List - ObjectName ons = J2eeObjectName.J2EEApplications(p_DomainName, p_ServerName); - Iterator itNames = JonasManagementRepr.queryNames(ons, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - sPath = JonasManagementRepr.getAttribute(it_on, "earUrl", serverName).toString(); - sFile = JonasAdminJmx.extractFilename(sPath); - sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + sFile; - sName = it_on.getKeyProperty("name"); - if (sFile != null) { - al.add(new ContainerItem(sFile, sPath, sNodeName, it_on.toString(), sName)); - } - } - // Sort list - Collections.sort(al, new ContainerItemByFile()); - // Build nodes - ContainerItem oItem; - for (int i = 0; i < al.size(); i++) { - oItem = al.get(i); - TreeControlNode node = new TreeControlNode(oItem.getNodeName() - , "icon/ear.gif" - , oItem.getFile() - , "EditEar.do?select=" + oItem.getObjectName() - , "content", false); - addNode(p_NodeParent, node); - } - } - - /** - * Append node for EJBContainer service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceEjbContainer(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "ejbContainers" - , "icon/service_ejb.gif" - , p_Resources.getMessage("treenode.jonas.server.services.ejbContainers") - , "ListContainers.do?refresh=true" - , "content", false); - if (addNode(p_NodeServices, nodeService)) { - getContainers(nodeService, p_Resources, p_DomainName, p_ServerName); - } - } - - /** - * Append node for all Containers. - * - * @param p_NodeParent Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - public void getContainers(final TreeControlNode p_NodeParent - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - String sPath; - String sFile; - String sName; - String sNodeName; - ObjectName onContainer; - ArrayList al = new ArrayList(); - String parentName = null; - - // Get Container List - Iterator itNames = JonasManagementRepr.queryNames(J2eeObjectName.getEJBModules(p_DomainName, p_ServerName), p_ServerName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - sPath = ((URL) JonasManagementRepr.getAttribute(it_on, "url", p_ServerName)).toExternalForm(); - sFile = JonasAdminJmx.extractFilename(sPath); - sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + sFile; - sName = it_on.getKeyProperty("name"); - - parentName = it_on.getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - /** - * Allow to build nodes for ejbjars with the same name, contained in differents applications. - * The identifier will be :sNodeName*parentSName/moduleName - * The label will be : parentSName/moduleName - */ - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - String moduleName = sNodeName.substring(sNodeName.lastIndexOf(WhereAreYou.NODE_SEPARATOR) + 1 ); - String nodePrefix = sNodeName.substring(0, sNodeName.lastIndexOf(WhereAreYou.NODE_SEPARATOR) + 1); - sNodeName = nodePrefix.concat(parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + moduleName)); - sFile = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + sFile); - } - if (sFile != null) { - ContainerItem containerItem = new ContainerItem(sFile, sPath, sNodeName, it_on.toString(), sName); - containerItem.setParentName(parentName); - al.add(containerItem); - } - } - - // Sort list - Collections.sort(al, new ContainerItemByFile()); - // Build nodes - ContainerItem oItem; - for (int i = 0; i < al.size(); i++) { - oItem = al.get(i); - TreeControlNode node = new TreeControlNode(oItem.getNodeName() - , "icon/jar.gif" - , oItem.getFile() - , "EditContainer.do?select=" + oItem.getObjectName() - , "content", false); - if (addNode(p_NodeParent, node)) { - // Add ejb node - getEjbs(node, p_Resources, oItem.getPath(), p_DomainName, p_ServerName, oItem.getName(), oItem.getParentName()); - } - } - } - - /** - * Append node for all Ejbs for a Container. - * - * @param p_NodeParent Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Filename Filename of container - */ - protected void getEjbs(final TreeControlNode p_NodeParent, final MessageResources p_Resources - , final String p_Filename, final String p_DomainName, final String p_ServerName, final String p_ModuleName, final String p_ParentName) { - //String sName; - Iterator itNames; - ObjectName on; - ArrayList al = new ArrayList(); - - on = J2eeObjectName.getEntityBeans(p_DomainName, p_ModuleName, p_ServerName); - addEjbItem(al, p_ServerName, p_ParentName, on); - - on = J2eeObjectName.getStatefulSessionBeans(p_DomainName, p_ModuleName, p_ServerName); - addEjbItem(al, p_ServerName, p_ParentName, on); - - on = J2eeObjectName.getStatelessSessionBeans(p_DomainName, p_ModuleName, p_ServerName); - addEjbItem(al, p_ServerName, p_ParentName, on); - - on = J2eeObjectName.getMessageDrivenBeans(p_DomainName, p_ModuleName, p_ServerName); - addEjbItem(al, p_ServerName, p_ParentName, on); - - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - - // Add all node Ejb - String sNodeName; - String sAction; - TreeControlNode nodeEjb; - EjbItem oEjb; - for (int i = 0; i < al.size(); i++) { - oEjb = al.get(i); - sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + oEjb.getName(); - sAction = "EditEjb" + oEjb.getTypeString() + ".do?select=" + oEjb.getObjectName(); - // Add node Ejb - nodeEjb = new TreeControlNode(sNodeName - , "icon/bean.gif" - , oEjb.getName() - , sAction - , "content", false); - addNode(p_NodeParent, nodeEjb); - } - } - - /** - * Check if the given EJB ObjectName has to be used for creating an EJbItem to be added in the items list. - * @param al the items list - * @param serverName the current server name - * @param parentName the parent application name, if any. - * @param on the given EJB's ObjectName - */ - private void addEjbItem(ArrayList al, final String serverName, final String parentName, final ObjectName on) { - Iterator itNames = JonasAdminJmx.getListMbean(on, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName itName = (ObjectName) itNames.next(); - String itParentName = itName.getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - boolean addEjbItem = false; - if (itParentName == null) { - addEjbItem = true; - } else if ("none".equals(itParentName)) { - addEjbItem = true; - } else { - // the item corresponds to a Ejb belonging to a parent application - if (itParentName.equals(parentName)) { - addEjbItem = true; - } - } - if (addEjbItem) { - al.add(new EjbItem(itName, serverName)); - } - } - } - - /** - * Append node for Database service for the JOnAS services. - * - * @param pNodeServices Services node for the tree control - * @param pResources The MessageResources for our localized messages - * @param pDomainName The name of the current management domain - * @param pServerName The name of the currently managed JOnAS server - */ - protected void getServiceDatabase(final TreeControlNode pNodeServices - , final MessageResources pResources, final String pDomainName, final String pServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(pNodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "database" - , "icon/service_database.gif" - , pResources.getMessage("treenode.jonas.server.services.database") - , "ListDatabases.do?refresh=true" - , "content", false); - if (addNode(pNodeServices, nodeService)) { - // Add Datasources nodes - getDatasources(nodeService, pResources, pDomainName, pServerName); - } - } - - /** - * Append node for all deployed Datasources. - * - * @param pNodeParent Server node for the tree control - * @param pResources The MessageResources for our localized messages - * @param pDomainName The name of the current management domain - * @param pServerName The name of the currently managed JOnAS server - */ - public void getDatasources(final TreeControlNode pNodeParent - , final MessageResources pResources, final String pDomainName, final String pServerName) { - - ArrayList al = JonasAdminJmx.getDatasourceFilesDeployed(pDomainName, pServerName); - // Build nodes - for (int i = 0; i < al.size(); i++) { - TreeControlNode node = new TreeControlNode(pNodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + al.get(i).toString() - , "icon/Datasource.gif" - , al.get(i).toString() - , "EditDatasource.do?name=" + al.get(i), "content", false); - addNode(pNodeParent, node); - } - } - - /** - * Append node for Web service for the JOnAS services. - * - * @param pNodeServices Services node for the tree control - * @param pResources The MessageResources for our localized messages - * @param pRequest The servlet request we are processing - * @param pDomainName The name of the current management domain - * @param pServerName The name of the currently managed JOnAS server - */ - protected void getServiceWeb(final TreeControlNode pNodeServices, final MessageResources pResources - , final HttpServletRequest pRequest, final String pDomainName, final String pServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(pNodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "web" - , "icon/service_web.gif" - , pResources.getMessage("treenode.jonas.server.services.web") - , "ListWebContainers.do?refresh=true" - , "content", false); - if (addNode(pNodeServices, nodeService)) { - // Add Web Containers nodes - getWebContainers(nodeService, pResources, pRequest); - } - } - - /** - * Append node for all Web Containers. - * - * @param p_NodeParent Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - public void getWebContainers(final TreeControlNode p_NodeParent, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - ArrayList al = new ArrayList(); - // Detect Catalina items present - if (oWhere.isCatalinaServer()) { - // Get the list of WebModule - Iterator itOns = JonasAdminJmx.getListMbean(J2eeObjectName.getWebModules(oWhere. - getCurrentCatalinaDomainName()), serverName).iterator(); - while (itOns.hasNext()) { - WebAppItem item = new WebAppItem((ObjectName) itOns.next(), oWhere.getCurrentCatalinaDefaultHostName()); - al.add(item); - } - } - // Detect Jetty items present - else if (oWhere.isJettyServer()) { - ObjectName on; - String sPathContext; - HashMap hWebAppItems = new HashMap(); - - // Get the list of Jetty contexts - Iterator itOnContexts = JonasAdminJmx.getListMbean(JettyObjectName.jettyContexts(domainName), serverName). - iterator(); - while (itOnContexts.hasNext()) { - on = (ObjectName) itOnContexts.next(); - sPathContext = on.getKeyProperty("context"); - if (sPathContext != null) { - if (!hWebAppItems.containsKey(sPathContext) && on.getKeyProperty("WebApplicationContext") != null && - on.getKeyProperty("WebApplicationHandler") == null && on.getKeyProperty("config") == null) { - WebAppItem item = new WebAppItem(sPathContext, on.toString()); - hWebAppItems.put(sPathContext, item); - } - } - } - // Prepare to display - al.addAll(hWebAppItems.values()); - } - WebAppItemByPathContext webAppItemByPathContext = new WebAppItemByPathContext(); - // Sort list - Collections.sort(al, webAppItemByPathContext); - // Build nodes - WebAppItem oItem; - for (int i = 0; i < al.size(); i++) { - oItem = al.get(i); - TreeControlNode node = new TreeControlNode(p_NodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getObjectName() - , "icon/war.gif" - , oItem.getLabelPathContext() - , "EditWebApp.do?on=" + oItem.getObjectName() - , "content", false); - addNode(p_NodeParent, node); - } - } - - /** - * Append node for Transaction service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - * - * @exception Exception if an exception occurs building the tree - */ - protected void getServiceTransaction(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "transaction" - , "icon/service_transaction.gif" - , p_Resources.getMessage("treenode.jonas.server.services.transaction") - , "EditJtmService.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - - /** - * Append node for discovery service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceDiscovery(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "discovery" - , "icon/service_discovery.png" - , p_Resources.getMessage("treenode.jonas.server.services.discovery") - , "EditServiceDiscovery.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - - /** - * Append node for depmonitor service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceDepmonitor(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "depmonitor" - , "icon/deploy_ear.gif" - , p_Resources.getMessage("treenode.jonas.server.services.depmonitor") - , "EditServiceDepmonitor.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - /** - * Append node for work manager service (wm) for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceWorkManager(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "workmanager" - , "icon/service_workmanager.gif" - , p_Resources.getMessage("treenode.jonas.server.services.workmanager") - , "EditWorkmanagerService.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - - /** - * Append node for work cleaner service (wc) for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceWorkCleaner(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "workcleaner" - , "icon/service_workcleaner.gif" - , p_Resources.getMessage("treenode.jonas.server.services.workcleaner") - , "EditWorkcleanerService.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - /** - * Append node for versioning service into the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceVersioning(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "versioning" - , "icon/service_versioning.gif" - , p_Resources.getMessage("treenode.jonas.server.services.versioning") - , "EditVersioningService.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - /** - * Append node for smartclient service into the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceSmartclient(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "smartclient" - , "icon/service_smartclient.gif" - , p_Resources.getMessage("treenode.jonas.server.services.smartclient") - , "EditSmartclientService.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - /** - * Append node for WebService (ws) service for the JOnAS services. - * - * @param p_NodeServices - * Services node for the tree control - * @param p_Resources - * The MessageResources for our localized messages - * @param request - * The HTTP request object currently in use. - * @param p_DomainName - * The domain name for the instance - * @param p_ServerName - * The server name for the instance being monitored - */ - public void getServiceWebService(final TreeControlNode p_NodeServices, - final MessageResources p_Resources, final HttpServletRequest request, final String p_DomainName, - final String p_ServerName) { - String nodeName = p_NodeServices.getName() + WhereAreYou.NODE_SEPARATOR + "WebService"; - TreeControlNode nodeService = null; - // Rebuild the webservice tree. - nodeService = p_NodeServices.getTree().findNode(nodeName); - if (nodeService != null) { - nodeService.remove(); - } - // (Re)Add Web Service node - nodeService = new TreeControlNode( - nodeName, - "icon/war.gif", - p_Resources.getMessage("treenode.jonas.server.services.webservices"), - "ListWebService.do", - "content", - false); - if (addNode(p_NodeServices, nodeService)) { - getWebServiceDetails(nodeService, p_Resources, request); - } - } - - /** - * Append Web Service names for web services node in tree. - * - * @param p_WebServicesNode - * Web Services node for the tree control - * @param p_Resources - * The MessageResources for our localized messages - * @param p_Request - * The servlet request we are processing - */ - public void getWebServiceDetails(final TreeControlNode p_webServicesNode, - final MessageResources p_Resources, final HttpServletRequest p_Request) { - // Get WhereAreYou - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - - // Get the server name - String serverName = oWhere.getCurrentJonasServerName(); - // Get the list of webservice descriptions from mbean server. - Collection al = new ArrayList(); - JOnASProvider jProvider = new JOnASProvider(serverName); - try { - al = jProvider.getWebServiceDescription(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return; - } - - // Build the nodes - TreeControlNode node; - WebServiceDescriptionItem oWebServiceDescription = null; - String sLabel; - Iterator it = al.iterator(); - while (it.hasNext()) { - oWebServiceDescription = (WebServiceDescriptionItem) it.next(); - node = new TreeControlNode(p_webServicesNode.getName() - + WhereAreYou.NODE_SEPARATOR - + oWebServiceDescription.getName() - , "icon/war.gif" - , oWebServiceDescription.getName() - , "WebServiceDetails.do?select=" + oWebServiceDescription.getName() - , "content", false); - if (addNode(p_webServicesNode, node)) { - getPortComponents(oWebServiceDescription, node, p_Resources); - } - } - } - - /** - * Append port component names for a web service node in tree. - * - * @param wsd - * Web Service Description for current web service. - * @param p_WebServicesNode - * Connector node for the tree control - * @param p_Resources - * The MessageResources for our localized messages - */ - private void getPortComponents(final WebServiceDescriptionItem wsd, - final TreeControlNode p_webServiceNode, final MessageResources p_Resources) { - String sLabel; - // Build the nodes - TreeControlNode node = null; - for (int i = 0; i < wsd.getPortComponentCount(); i++) { - PortComponentItem pc = wsd.getPortComponent(i); - node = new TreeControlNode(p_webServiceNode.getName() - + WhereAreYou.NODE_SEPARATOR + pc.getName() - , "icon/war.gif" - , pc.getName() - , "PortComponentsDetails.do?pcselect=" + pc.getName() + "&wsdselect=" + wsd.getName() - , "content", false); - if (addNode(p_webServiceNode, node)) { - getPortComponentHandler(wsd, pc, node, p_Resources); - } - } - - } - - /** - * Append handler names for port component node in tree. - * - * @param wsd - * Web Service Description for current web service. - * @param pc - * Port Component for current web service. - * @param p_portComponentNode - * Port component node for the tree control - * @param p_Resources - * The MessageResources for our localized messages - */ - private void getPortComponentHandler(final WebServiceDescriptionItem wsd, - final PortComponentItem pc, final TreeControlNode p_portComponentNode, - final MessageResources p_Resources) { - // Build the nodes - TreeControlNode node = null; - for (int i = 0; i < pc.getHandlerCount(); i++) { - HandlerItem handler = pc.getHandler(i); - node = new TreeControlNode(p_portComponentNode.getName() - + WhereAreYou.NODE_SEPARATOR + handler.getName() - , "icon/war.gif" - , handler.getName() - , "HandlersDetails.do?pcselect=" + pc.getName() + "&wsdselect=" - + wsd.getName() + "&handlerselect=" + handler.getName() - , "content", false); - addNode(p_portComponentNode, node); - } - - } - - /** - * Append node for Mail service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceMail(final TreeControlNode p_NodeServices, final MessageResources p_Resources - , final HttpServletRequest p_Request, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "mail", "icon/service_mail.gif" - , p_Resources.getMessage("treenode.jonas.server.services.mail") - , "EditMailService.do" - , "content", false); - if (addNode(p_NodeServices, nodeService)) { - // Add nodes for MailFactories - getAllSessionMailFactories(nodeService, p_Resources, p_Request); - getAllMimePartDSMailFactories(nodeService, p_Resources, p_Request); - } - } - - public void getAllSessionMailFactories(final TreeControlNode p_NodeParent - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - // Add parent node for all the Session Mail Factories - TreeControlNode nodeSessionMailFactories = new TreeControlNode(p_NodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + "session" - , "icon/mail_session.gif" - , p_Resources.getMessage("treenode.jonas.server.services.mail.session") - , "ListSessionMailFactories.do" - , "content", false); - if (addNode(p_NodeParent, nodeSessionMailFactories)) { - // Add a node for each Session Mail Factory - getSessionMailFactories(nodeSessionMailFactories, p_Resources, p_Request); - } - } - - public void getAllMimePartDSMailFactories(final TreeControlNode p_NodeParent - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - // Add parent node for all the Session Mail Factories - TreeControlNode nodeMimePartMailFactories = new TreeControlNode(p_NodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + "mimepart" - , "icon/mail_mime.gif" - , p_Resources.getMessage("treenode.jonas.server.services.mail.mimepart") - , "ListMimePartMailFactories.do" - , "content", false); - if (addNode(p_NodeParent, nodeMimePartMailFactories)) { - // Add a node for each Session Mail Factory - getMimePartMailFactories(nodeMimePartMailFactories, p_Resources, p_Request); - } - } - - protected void getSessionMailFactories(final TreeControlNode p_NodeParent - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - String sPath; - String sFile; - String sNodeName; - ArrayList al = new ArrayList(); - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - - // Get list - java.util.List deployedFactories = JonasAdminJmx. - getSessionMailFactoriesDeployed(oWhere); - Iterator itNames = deployedFactories.iterator(); - while (itNames.hasNext()) { - al.add(itNames.next().toString()); - } - // Sort list - Collections.sort(al); - // Build nodes - for (int i = 0; i < al.size(); i++) { - TreeControlNode node = new TreeControlNode(p_NodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + al.get(i).toString() - , "icon/mail_session.gif" - , al.get(i).toString() - , "EditSessionMailFactory.do?name=" + al.get(i).toString() - , "content", false); - addNode(p_NodeParent, node); - } - } - - protected void getMimePartMailFactories(final TreeControlNode p_NodeParent - , final MessageResources p_Resource, final HttpServletRequest p_Request) { - String sPath; - String sFile; - String sNodeName; - ArrayList al = new ArrayList(); - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - - // Get List - Iterator itNames = ((java.util.List) JonasAdminJmx.getMimeMailPartFactoriesDeployed(oWhere)). - iterator(); - while (itNames.hasNext()) { - al.add(itNames.next().toString()); - } - // Sort list - Collections.sort(al); - // Build nodes - for (int i = 0; i < al.size(); i++) { - TreeControlNode node = new TreeControlNode(p_NodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + al.get(i).toString() - , "icon/mail_mime.gif" - , al.get(i).toString() - , "EditMimePartMailFactory.do?name=" + al.get(i).toString() - , "content", false); - addNode(p_NodeParent, node); - } - } - - /** - * Append node for Resource service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getServiceResourceAdapter(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" - , "icon/service_resource.gif" - , p_Resources.getMessage("treenode.jonas.server.services.resource") - , "ListResourceAdapters.do?refresh=true" - , "content", false); - if (addNode(p_NodeServices, nodeService)) { - // Add Containers nodes - getResourceAdapters(nodeService, p_Resources, p_DomainName, p_ServerName); - } - } - - /** - * Append node for all Resource Adapters. - * - * @param p_NodeParent Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param pDomainName The name of the current management domain - * @param pServerName The name of the currently managed JOnAS server - */ - public void getResourceAdapters(final TreeControlNode p_NodeParent, final MessageResources p_Resources, - final String p_DomainName, final String p_ServerName) { - String sPath; - String sFile; - String sNodeName; - String sName; - ObjectName on; - ArrayList al = new ArrayList(); - - // Get Resource Adapters - ObjectName ons = J2eeObjectName.getResourceAdapterModules(p_DomainName, p_ServerName); - Iterator itNames = JonasManagementRepr.queryNames(ons, p_ServerName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - sPath = (String) JonasManagementRepr.getAttribute(it_on, "fileName", p_ServerName); - sFile = JonasAdminJmx.extractFilename(sPath); - sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + sFile; - sName = it_on.getKeyProperty("name"); - if (sFile != null) { - al.add(new ResourceItem(sFile, sPath, sNodeName, it_on.toString(), sName)); - } - } - // Sort list - Collections.sort(al, new ResourceItemByFile()); - // Build nodes - ResourceItem oItem; - for (int i = 0; i < al.size(); i++) { - oItem = al.get(i); - TreeControlNode node = new TreeControlNode(oItem.getNodeName() - , "icon/ear.gif" - , oItem.getFile() - , "EditResourceAdapter.do?select=" + oItem.getObjectName() - , "content", false); - addNode(p_NodeParent, node); - } - } - - /** - * Append node for Security service for the JOnAS services. - * - * @param p_NodeServices Services node for the tree control - * @param p_Resources The MessageResources for our localized messages - * messages - */ - protected void getServiceSecurity(final TreeControlNode p_NodeServices - , final MessageResources p_Resources, final String p_DomainName, final String p_ServerName) { - // Add Service node - TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() - + WhereAreYou.NODE_SEPARATOR + "security" - , "icon/service_security.gif" - , p_Resources.getMessage("treenode.jonas.server.services.security") - , "EditServiceSecurity.do" - , "content", false); - addNode(p_NodeServices, nodeService); - } - - /** - * Append nodes for Deployments services for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDeployments(final TreeControlNode p_ServerNode - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - // Deployments node - TreeControlNode nodeDeployments = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "deployments", "icon/deploy.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments"), null, "content", true); - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - if (addNode(p_ServerNode, nodeDeployments)) { - // Detail Service node - if (JonasAdminJmx.hasMBeanName(JonasObjectName.earService(domainName), serverName)) { - getDeploymentEar(nodeDeployments, p_Resources); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.ejbService(domainName), serverName)) { - getDeploymentEjb(nodeDeployments, p_Resources); - } else { - // check for ejb3 - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - String[] services = (String[]) JonasManagementRepr.getAttribute(on, "services", serverName); - for (String service:services) { - if ("ejb3".equals(service)) { - getDeploymentEjb(nodeDeployments, p_Resources); - break; - } - } - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.webContainerService(domainName), serverName)) { - getDeploymentWebAppli(nodeDeployments, p_Resources); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.resourceService(domainName), serverName)) { - getDeploymentRar(nodeDeployments, p_Resources); - } - getDeployment(nodeDeployments, p_Resources); - } - } - /** - * Append node for deployment. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDeployment(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - // Add node - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DEPLOYMENT_STRING - , "icon/deploy_ear.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." - + WhereAreYou.DEPLOYMENT_STRING) - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Ear deployment. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDeploymentEar(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - // Add node - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DEPLOYMENT_STRING_EAR - , "icon/deploy_ear.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." - + WhereAreYou.DEPLOYMENT_STRING_EAR) - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_EAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Ejb deployment. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDeploymentEjb(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - // Add node - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DEPLOYMENT_STRING_JAR - , "icon/deploy_jar.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." - + WhereAreYou.DEPLOYMENT_STRING_JAR) - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_JAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Web deployment. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getDeploymentWebAppli(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - // Add node - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DEPLOYMENT_STRING_WAR - , "icon/deploy_war.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." - + WhereAreYou.DEPLOYMENT_STRING_WAR) - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_WAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append node for Rar deployment. - * - * @param p_NodeDeployments Deployment node for the tree control - * @param p_Resources The MessageResources for our localized messages - * - * @exception Exception if an exception occurs building the tree - */ - protected void getDeploymentRar(final TreeControlNode p_NodeDeployments, final MessageResources p_Resources) { - // Add node - TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() - + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DEPLOYMENT_STRING_RAR - , "icon/deploy_rar.gif" - , p_Resources.getMessage("treenode.jonas.server.deployments." - + WhereAreYou.DEPLOYMENT_STRING_RAR) - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_RAR - , "content", false); - addNode(p_NodeDeployments, oNode); - } - - /** - * Append nodes for Resources services for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getResources(final TreeControlNode p_ServerNode - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Resources node - TreeControlNode nodeDeployments = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "resources" - , "icon/resources.gif" - , p_Resources.getMessage("treenode.jonas.server.resources") - , null, "content", false); - if (addNode(p_ServerNode, nodeDeployments)) { - // - database resources - if (JonasAdminJmx.hasMBeanName(JonasObjectName.databaseService(domainName), serverName)) { - getResourceDatabase(nodeDeployments, p_Resources); - } - // - jms resources - if (JonasAdminJmx.hasMBeanName(JonasObjectName.jmsService(domainName), serverName)) { - getJmsResource(nodeDeployments, p_Resources); - } - // - mail resources - if (JonasAdminJmx.hasMBeanName(JonasObjectName.mailService(domainName), serverName)) { - getMailResource(nodeDeployments, p_Resources); - } - } - } - - /** - * Append nodes for Mail Resources for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getMailResource(final TreeControlNode p_ServerNode, final MessageResources p_Resources) { - // Mail resources node - TreeControlNode nodeDeployments = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "mail" - , "icon/mail.gif" - , p_Resources.getMessage("treenode.jonas.server.resources.mail") - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_MAILFACTORY - , "content", false); - addNode(p_ServerNode, nodeDeployments); - } - - /** - * Append nodes for Jms Resource for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getJmsResource(final TreeControlNode p_ServerNode, final MessageResources p_Resources) { - // Jms resources node - TreeControlNode nodeDeployments = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "jms" - , "icon/jms.gif" - , p_Resources.getMessage("treenode.jonas.server.resources.jms") - , "ListJmsResources.do" - , "content", false); - addNode(p_ServerNode, nodeDeployments); - } - - /** - * Append nodes for Database Resource for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - protected void getResourceDatabase(final TreeControlNode p_ServerNode, final MessageResources p_Resources) { - // Database Resources node - TreeControlNode nodeDeployments = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "database" - , "icon/Database.gif" - , p_Resources.getMessage("treenode.jonas.server.resources.database") - , "EditDeploy.do?type=" + WhereAreYou.DEPLOYMENT_STRING_DATASOURCE - , "content", false); - addNode(p_ServerNode, nodeDeployments); - } - - /** - * Append nodes for Security for the specified server. - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getSecurity(final TreeControlNode p_ServerNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - // Detect JOnAS item presents - boolean bJonasSecurityService = JonasAdminJmx.hasMBeanName(JonasObjectName.securityService(domainName), serverName); - // Detect Catalina items present - boolean bCatalinaRealm = false; - if (oWhere.isCatalinaServer()) { - ObjectName catalinaRealmOn = null; - try { - catalinaRealmOn = CatalinaObjectName.catalinaRealm(oWhere.getCurrentCatalinaServiceName()); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get catalina realm: " + e); - } - return; - } - bCatalinaRealm = JonasAdminJmx.hasMBeanName(catalinaRealmOn, serverName); - } - // Add nodes - if ((bJonasSecurityService) || (bCatalinaRealm)) { - // Active action - String sAction = null; - if (bJonasSecurityService) { - sAction = "ListRealms.do?realm=all"; - } - else if (bCatalinaRealm) { - sAction = "EditSecurityCatalinaRealm.do"; - } - // Security node - TreeControlNode nodeSecurity = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "security" - , "icon/security.gif" - , p_Resources.getMessage("treenode.jonas.server.security") - , sAction - , "content", false); - if (addNode(p_ServerNode, nodeSecurity)) { - // Detail Security node for JOnAS service - if (bJonasSecurityService) { - getSecurityFactories(nodeSecurity, p_Resources, p_Request); - } - } - } - } - - /** - * Append nodes for Security factories for the specified server. - * - * @param p_SecurityNode Security node for the tree control - * @param p_Resources The MessageResources for our localized messages - */ - public void getSecurityFactories(final TreeControlNode p_SecurityNode - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - ArrayList al = null; - String sName = null; - TreeControlNode nodeSecurityFactories = null; - TreeControlNode nodeSecurityFactory = null; - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - // Security Memory factories - try { - al = JonasAdminJmx.getSecurityMemoryFactories(domainName, serverName); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get memory security factories: " + e); - } - } - if (al.size() > 0) { - // Security factories node - nodeSecurityFactories = new TreeControlNode(p_SecurityNode.getName() - + WhereAreYou.NODE_SEPARATOR + "factory.memory" - , "icon/security_memory.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.memory") - , "ListRealms.do?realm=memory" - , "content", false); - if (addNode(p_SecurityNode, nodeSecurityFactories)) { - // List Security factories - for (int i = 0; i < al.size(); i++) { - sName = al.get(i).toString(); - // Security factory node - nodeSecurityFactory = new TreeControlNode(nodeSecurityFactories.getName() - + WhereAreYou.NODE_SEPARATOR + sName - , "icon/security_memory.gif", sName - , "EditMemoryRealm.do?resource=" + sName - , "content", false); - addNode(nodeSecurityFactories, nodeSecurityFactory); - } - } - } - // Security Datasource factories - try { - al = JonasAdminJmx.getSecurityDatasourceFactories(domainName, serverName); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get datasource security factories: " + e); - } - } - if (al.size() > 0) { - // Security factories node - nodeSecurityFactories = new TreeControlNode(p_SecurityNode.getName() - + WhereAreYou.NODE_SEPARATOR + "factory.datasource", "icon/security_database.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.datasource") - , "ListRealms.do?realm=datasource", "content", false); - if (addNode(p_SecurityNode, nodeSecurityFactories)) { - // List Security factories - for (int i = 0; i < al.size(); i++) { - sName = al.get(i).toString(); - // Security factory node - nodeSecurityFactory = new TreeControlNode(nodeSecurityFactories.getName() - + WhereAreYou.NODE_SEPARATOR + sName - , "icon/security_database.gif", sName - , "EditDatasourceRealm.do?resource=" + sName - , "content", false); - addNode(nodeSecurityFactories, nodeSecurityFactory); - } - } - } - // Security Ldap factories - try { - al = JonasAdminJmx.getSecurityLdapFactories(domainName, serverName); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get ldap security factories: " + e); - } - } - if (al.size() > 0) { - // Security factories node - nodeSecurityFactories = new TreeControlNode(p_SecurityNode.getName() - + WhereAreYou.NODE_SEPARATOR + "factory.ldap" - , "icon/security_ldap.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.ldap") - , "ListRealms.do?realm=ldap" - , "content", false); - if (addNode(p_SecurityNode, nodeSecurityFactories)) { - // List Security factories - for (int i = 0; i < al.size(); i++) { - sName = al.get(i).toString(); - // Security factory node - nodeSecurityFactory = new TreeControlNode(nodeSecurityFactories.getName() - + WhereAreYou.NODE_SEPARATOR + sName - , "icon/security_ldap.gif", sName - , "EditLdapRealm.do?resource=" + sName - , "content", false); - addNode(nodeSecurityFactories, nodeSecurityFactory); - } - } - } - } - - /** - * Append nodes for Memory Security Factory for the specified server. - * - * @param p_SecurityMemoryNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_ResourceFactory The name of resource - */ - protected void getSecurityMemoryFactory(final TreeControlNode p_SecurityMemoryNode - , final MessageResources p_Resources, final String p_ResourceFactory) { - TreeControlNode node = null; - // Users node - node = new TreeControlNode(p_SecurityMemoryNode.getName() - + WhereAreYou.NODE_SEPARATOR + "users", "icon/security_memory.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.memory.users") - , "EditMemoryRealmUsers.do?resource=" + p_ResourceFactory - , "content", false); - addNode(p_SecurityMemoryNode, node); - // Groups node - node = new TreeControlNode(p_SecurityMemoryNode.getName() - + WhereAreYou.NODE_SEPARATOR + "groups", "icon/security_memory.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.memory.groups") - , "EditMemoryRealmGroups.do?resource=" + p_ResourceFactory - , "content", false); - addNode(p_SecurityMemoryNode, node); - // Roles node - node = new TreeControlNode(p_SecurityMemoryNode.getName() - + WhereAreYou.NODE_SEPARATOR + "roles", "icon/security_memory.gif" - , p_Resources.getMessage("treenode.jonas.server.security.factory.memory.roles") - , "EditMemoryRealmRoles.do?resource=" + p_ResourceFactory - , "content", false); - addNode(p_SecurityMemoryNode, node); - } - - /** - * Append nodes for the Servlet server - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getProtocols(final TreeControlNode p_ServerNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - // Catalina server - ObjectName cOn; - try { - cOn = CatalinaObjectName.catalinaServer(); - if (JonasAdminJmx.hasMBeanName(cOn, serverName)) { - getCatalinaProtocols(p_ServerNode, p_Resources, p_Request); - } - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get Catalina Server MBean: " + e); - } - return; - } - } - - /** - * Append nodes for the Catalina server - * - * @param p_ServerNode Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getCatalinaProtocols(final TreeControlNode p_ServerNode, final MessageResources p_Resources - , final HttpServletRequest p_Request) { - // Add Catalina server node - TreeControlNode catalinaNode = new TreeControlNode(p_ServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "protocols" - , "icon/protocol.gif" - , p_Resources.getMessage("treenode.jonas.server.protocols") - , "ListCatalinaConnectors.do" - , "content", false); - if (addNode(p_ServerNode, catalinaNode)) { - // Add Connectors nodes - getCatalinaConnector(catalinaNode, p_Resources, p_Request); - } - } - - /** - * Append node for the Connector catalina server - * - * @param p_CatalinaServerNode Catalina Server node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - protected void getCatalinaConnector(final TreeControlNode p_CatalinaServerNode - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - // Add Connector node - TreeControlNode connectorNode = new TreeControlNode(p_CatalinaServerNode.getName() - + WhereAreYou.NODE_SEPARATOR + "connectors" - , "icon/connectors.gif" - , p_Resources.getMessage("treenode.jonas.server.protocols.connectors") - , "ListCatalinaConnectors.do" - , "content", false); - if (addNode(p_CatalinaServerNode, connectorNode)) { - getCatalinaDetailConnectors(connectorNode, p_Resources, p_Request); - } - } - - /** - * Append nodes for all the Connectors catalina server - * - * @param p_ConnectorNode Connector node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - public void getCatalinaDetailConnectors(final TreeControlNode p_ConnectorNode - , final MessageResources p_Resources, final HttpServletRequest p_Request) { - - // Get WhereAreYou - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - - String serverName = oWhere.getCurrentJonasServerName(); - // Get the domain name - String sDomain = oWhere.getCurrentCatalinaDomainName(); - int appServerPort = oWhere.getApplicationServerPort(); - // Get the list of connectors - ArrayList al = new ArrayList(); - ObjectName conns = null; - try { - conns = CatalinaObjectName.catalinaConnectors(sDomain); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get catalina connectors MBeans: " + e); - } - return; - } - Iterator it = JonasAdminJmx.getListMBeanName(conns, serverName).iterator(); - while (it.hasNext()) { - String ons = (String) it.next(); - ObjectName connOn = null; - try { - connOn = ObjectName.getInstance(ons); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get catalina connector MBean " + ons + ": " + e); - } - continue; - } - ConnectorItem item = new ConnectorItem(connOn, appServerPort, serverName); - al.add(item); - } - // Sort - Collections.sort(al, new ConnectorItemByPort()); - // Build the nodes - TreeControlNode node; - ConnectorItem oConnector; - String sLabel; - for (int i = 0; i < al.size(); i++) { - oConnector = al.get(i); - String nodeName = p_ConnectorNode.getName() - + WhereAreYou.NODE_SEPARATOR - + sDomain - + WhereAreYou.NODE_SEPARATOR - + oConnector.getPort(); - String address = oConnector.getAddress(); - if (address != null) { - nodeName = nodeName + address; - } - node = new TreeControlNode(nodeName, "icon/connector.gif" - , oConnector.getLabel() - , "EditCatalinaConnector.do?select=" + oConnector.getObjectName() - , "content", false); - addNode(p_ConnectorNode, node); - } - } - - /** - * Append node for JORAM platform management. - * - * @param pDomainNode Domain node for the tree control - * @param jonasServerName the name of the JOnAS server to which the current JORAM server is connected - * @param pResources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - public void getJoramPlatform(final TreeControlNode pDomainNode, final String jonasServerName, - final MessageResources pResources, final HttpServletRequest p_Request) { - - ObjectName joramAdapterOn = null; - try { - joramAdapterOn = JoramObjectName.joramAdapter(); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get JORAM Adapter MBean: " + e); - } - return; - } - - if (!JonasAdminJmx.hasMBeanName(joramAdapterOn, jonasServerName)) { - // No Joram to manage - // reset localServerId in case we just switched management context - // from a server which has Joram to this server which does not - if (p_Request.getSession().getAttribute("localId") != null) { - p_Request.getSession().setAttribute("localId", null); - } - return; - } - - // Joram adapter present, create node for JORAM platform - TreeControlNode platformNode = - new TreeControlNode(pDomainNode.getName() - + WhereAreYou.NODE_SEPARATOR + "joramplatform" - ,"icon/service_jms.gif" - ,pResources.getMessage("treenode.joramplatform") - ,"EditJoramPlatform.do" - ,"content", - false); - // Create node for the local server (Joram server to which the admin client is connected) - if (addNode(pDomainNode, platformNode)) { - getJoramServers(platformNode, jonasServerName, joramAdapterOn, pResources, p_Request); - } - } - - /** - * Append nodes for Joram server defined in tbe platform - * @param platformNode Joram platform node - * @param jonasServerName the name of the JOnAS server to which the current JORAM server is connected - * @param joramAdapterOn ObjectName of Joram Adapter MBean - * @param pResources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - */ - public void getJoramServers(final TreeControlNode platformNode - , final String jonasServerName - , final ObjectName joramAdapterOn - , final MessageResources pResources - , final HttpServletRequest p_Request) { - - Object attributeValue = null; - boolean collocatedServer = false; - ObjectName on = joramAdapterOn; - // in case of admin tree refresh due to a RAR deploy/undeploy - if (joramAdapterOn == null) { - try { - on = JoramObjectName.joramAdapter(); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get JORAM Adapter MBean: " + e); - } - return; - } - } - attributeValue = JonasManagementRepr.getAttribute(on, "Collocated", jonasServerName); - if (attributeValue != null) { - collocatedServer = ((Boolean) attributeValue).booleanValue(); - } - // get local Joram server - String localId = null; - Short id = null; - attributeValue = JonasManagementRepr.getAttribute(on, "ServerId", jonasServerName); - if (attributeValue != null) { - id = (Short) attributeValue; - localId = id.toString(); - } - // Create the node for the currently managed JORAM server - TreeControlNode currentServerNode = null; - String nodeName = null; - String icon = "icon/service_jms.gif"; - String label = null; - String action = "EditJoramServer.do?id=" + localId; - if (collocatedServer) { - nodeName = platformNode.getName() + WhereAreYou.NODE_SEPARATOR + "joramlocalserver"; - label = pResources.getMessage("treenode.joramplatform.joramlocalserver") + " (" + localId + ")"; - } else { - nodeName = platformNode.getName() + WhereAreYou.NODE_SEPARATOR + "joramcurrentserver"; - label = pResources.getMessage("treenode.joramplatform.joramcurrentserver") + " (" + localId + ")"; - } - currentServerNode = new TreeControlNode(nodeName, icon, label, action, "content", false); - if (addNode(platformNode, currentServerNode)) { - // Add local or current server resources - getJoramResources(currentServerNode, jonasServerName, localId, pResources, p_Request); - } - - p_Request.getSession().setAttribute("localId", localId); - p_Request.getSession().setAttribute("collocatedServer", new Boolean(collocatedServer)); - - // get the other (remote) Joram servers - Short[] serversIds = (Short[]) JonasManagementRepr.getAttribute(on, "ServersIds", jonasServerName); - if (serversIds != null) { - String serverId; - TreeControlNode remoteServerNode = null; - for (int index = 0; index < serversIds.length; index++) { - id = serversIds[index]; - serverId = id.toString(); - String joramremoteserver = null; - if (!id.toString().equals(localId)) { - joramremoteserver = "joramremoteserver" + id; - nodeName = platformNode.getName() + WhereAreYou.NODE_SEPARATOR + joramremoteserver; - label = pResources.getMessage("treenode.joramplatform.joramremoteserver") + " (" + id + ")"; - action = "EditJoramServer.do?id=" + id; - remoteServerNode = new TreeControlNode(nodeName, icon, label, action, "content", false); - platformNode.addChild(remoteServerNode); - // Add remote server's resources - getJoramResources(remoteServerNode, jonasServerName, serverId, pResources, p_Request); - } - } - } - } - /** - * Append nodes for Joram DEstinations created in a Joram server - * @param joramServerNode Joram server node - * @param jonasServerName the name of the JOnAS server to which the current JORAM server is connected - * @param serverId Joram server id - * @param pResources The MessageResources for our localized messages - * @param p_Request The servlet request we are processing - * @throws MalformedObjectNameException - */ - public void getJoramResources(final TreeControlNode joramServerNode, final String jonasServerName, final String serverId, - final MessageResources pResources, final HttpServletRequest p_Request) { - - ObjectName joramAdapterON; - try { - joramAdapterON = JoramObjectName.joramAdapter(); - } catch (MalformedObjectNameException e) { - - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get JORAM Adapter MBean: " + e); - } - return; - } - - String joramServerNodeName = joramServerNode.getName(); - - Short id = new Short(serverId); - // Get all the destinations - Object[] asParam = { - id - }; - String[] asSignature = { - "short" - }; - ArrayList destArray = new ArrayList(); - String[] destinations = null; - try { - destinations = (String[]) JonasManagementRepr.invoke(joramAdapterON, "getDestinations", asParam, asSignature, jonasServerName); - } catch (ManagementException me) { - // Maybe we are blocked on a remote server (Connection failed: Interrupted request) - - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get destinations of JORAM server having id " + id + ", " + me); - } - return; - } - for (int i = 0; i < destinations.length; i++) { - String dest = destinations[i]; - ItemDestination destinationItem = getDestinationItem(dest, jonasServerName); - if (destinationItem == null) { - continue; - } - if ("Queue".equals(destinationItem.getType())) { - // insert in head - destArray.add(0, destinationItem); - } else if ("Topic".equals(destinationItem.getType())) { - // append - destArray.add(destinationItem); - } - } - - // Add sub-nodes for destinations belonging to the server - for (int i = 0; i < destArray.size(); i++) { - ItemDestination item = (ItemDestination) destArray.get(i); - String name = item.getName(); - String nameParamInAction = null; - try { - nameParamInAction = URLEncoder.encode(name, "UTF-8"); - } catch (UnsupportedEncodingException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get encoded value for destination " + name + ". " + e); - } - return; - } - String type = item.getType(); - TreeControlNode destinationNode = null; - String nodeName = null; - String action = null; - String icon = null; - String label = null; - if (type.equals("Queue")) { - nodeName = joramServerNodeName + WhereAreYou.NODE_SEPARATOR + "joramqueue" + name; - icon = "icon/jms_queue.gif"; - label = pResources.getMessage("treenode.joramplatform.queue") + " (" + name + ")"; - action = "EditJoramQueue.do?name=" + nameParamInAction + "&id=" + serverId; - } else if (type.equals("Topic")) { - nodeName = joramServerNodeName + WhereAreYou.NODE_SEPARATOR + "joramtopic" + name; - icon = "icon/jms_topic.gif"; - label = pResources.getMessage("treenode.joramplatform.topic") + " (" + name + ")"; - action = "EditJoramTopic.do?name=" + nameParamInAction + "&id=" + serverId; - } - destinationNode = new TreeControlNode(nodeName, icon, label, action, "content", false); - if (destinationNode != null) { - addNode(joramServerNode, destinationNode); - } - } - } - - /** - * Create a ItemDestination object from a String structured as follows: - * - * joramClient:type=Queue/Topic,name=destName[#x.y.z] - * @param joramDestination String containing destination OBJECT_NAME - * @param serverName the name of the JOnAS server to which the current JORAM server is connected - * @return ItemDestination containing name, type, id and ObjectName of the MBean associated to the corresponding destination - * @throws MalformedObjectNameException could not construct destination ObjectName - */ - public ItemDestination getDestinationItem(final String joramDestination, final String serverName) { - ObjectName destinationOn = null; - try { - destinationOn = ObjectName.getInstance(joramDestination); - } catch (MalformedObjectNameException e) { - if (logger.isLoggable(BasicLevel.INFO)) { - logger.log(BasicLevel.INFO, "Can't get JORAM Destination MBean: " + e); - } - return null; - } - ItemDestination destinationItem = new ItemDestination(); - destinationItem.setType(destinationOn.getKeyProperty("type")); - if (JonasAdminJmx.hasMBeanName(destinationOn, serverName)) { - destinationItem.setRegistered(true); - destinationItem.setName((String) JonasManagementRepr.getAttribute(destinationOn, "AdminName", serverName)); - String agentName = (String) JonasManagementRepr.getAttribute(destinationOn, "Name", serverName); - // destinationItem.setId(""); TODO - destinationItem.setOn(destinationOn); - } - return destinationItem; - } - - /** - * Append nodes for all defined MBeans. - * - * @param domainNode Root node for the tree control - * @param resources The MessageResources for our localized messages - */ - public void getMBeans(final TreeControlNode domainNode, final MessageResources resources, final HttpServletRequest p_Request) { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - TreeControlNode nodeMBeans = new TreeControlNode(domainNode.getName() - + WhereAreYou.NODE_SEPARATOR - + "mbeans" - , "icon/mbeans.gif" - , resources.getMessage("treenode.allmbeans") - , "ListMBeans.do", "content", false); - if (addNode(domainNode, nodeMBeans)) { - ArrayList[] als = JonasAdminJmx.getFamiliesMbeansLists(serverName); - if (als[MbeanItem.FAMILY_J2EE].size() > 0) { - getJ2eeMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_J2EE]); - } - if (als[MbeanItem.FAMILY_OWNER].size() > 0) { - getOwnerMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_OWNER]); - } - if (als[MbeanItem.FAMILY_UNKNOWN].size() > 0) { - getUnknownMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_UNKNOWN]); - } - } - } - - /** - * Append nodes for all defined Owner MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - */ - public void getOwnerMBeans(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final ArrayList p_List) { - - TreeControlNode nodeMBeans = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + "owner" - , "icon/mbeans.gif" - , p_Resources.getMessage("treenode.mbeans.owner") - , "ListOwnerMBeans.do" - , "content", false); - if (!addNode(p_ParentNode, nodeMBeans)) { - return; - } - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "type", "objectName"})); - - // Detail MBean node - String sLastDomain = ""; - String sLastType = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - OwnerMbeanItem oItem; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (OwnerMbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (!oItem.getDomain().equals(sLastDomain)) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - addNode(nodeMBeans, nodeDomain); - } - nodeParent = nodeDomain; - - if (oItem.getType() != null) { - // Type node - if (!oItem.getType().equals(sLastType)) { - sLastType = oItem.getType(); - nodeType = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getType(), "icon/mbeantype.gif" - , oItem.getType(), null, "content", false); - addNode(nodeDomain, nodeType); - } - nodeParent = nodeType; - } - } - - // Mbean node - nodeMBean = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName() - , "icon/mbean.gif" - , oItem.getObjectName() - , "ListMBeanDetails.do?select=" + encode(oItem.getObjectName()) - , "content", false); - addNode(nodeParent, nodeMBean); - } - } - - /** - * Append nodes for all defined J2EE MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - */ - public void getJ2eeMBeans(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final ArrayList p_List) { - - TreeControlNode nodeMBeans = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + "j2ee" - , "icon/mbeans.gif" - , p_Resources.getMessage("treenode.mbeans.j2ee") - , "ListJ2eeMBeans.do", "content", false); - if (!addNode(p_ParentNode, nodeMBeans)) { - return; - } - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "j2eeType", "name", "objectName"})); - - // Detail MBean node - J2eeMbeanItem oItem; - String sLastDomain = ""; - String sLastType = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (J2eeMbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (!oItem.getDomain().equals(sLastDomain)) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - addNode(nodeMBeans, nodeDomain); - } - nodeParent = nodeDomain; - } - if (oItem.getJ2eeType() != null) { - // Type node - if (!oItem.getJ2eeType().equals(sLastType)) { - sLastType = oItem.getJ2eeType(); - nodeType = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getJ2eeType(), "icon/mbeantype.gif" - , oItem.getJ2eeType(), null, "content", false); - addNode(nodeDomain, nodeType); - } - nodeParent = nodeType; - } - - // Mbean node - nodeMBean = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName() - , "icon/mbean.gif" - , oItem.getObjectName() - , "ListMBeanDetails.do?select=" + encode(oItem.getObjectName()) - , "content", false); - addNode(nodeParent, nodeMBean); - - } - } - - /** - * Append nodes for all defined Unknown MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - */ - public void getUnknownMBeans(final TreeControlNode p_ParentNode, final MessageResources p_Resources - , final ArrayList p_List) { - - TreeControlNode nodeMBeans = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + "unknown" - , "icon/mbeans.gif" - , p_Resources.getMessage("treenode.mbeans.unknown") - , "ListUnknownMBeans.do", "content", false); - if (!addNode(p_ParentNode, nodeMBeans)) { - return; - } - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "objectName"})); - - // Detail MBean node - MbeanItem oItem; - String sLastDomain = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (MbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (!oItem.getDomain().equals(sLastDomain)) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - addNode(nodeMBeans, nodeDomain); - } - nodeParent = nodeDomain; - - } - - // Mbean node - nodeMBean = new TreeControlNode(p_ParentNode.getName() - + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName() - , "icon/mbean.gif" - , oItem.getObjectName() - , "ListMBeanDetails.do?select=" + encode(oItem.getObjectName()) - , "content", false); - addNode(nodeParent, nodeMBean); - - } - } - - /** - * Append nodes Attributes and Operations for a defined MBean. - * - * @param nodeMBean The MBean node - * @param onMBean The MBean Object name - * @param resources Resource - * @throws Exception - */ - protected void getMBeanInfo(final TreeControlNode nodeMBean, final ObjectName onMBean - , final MessageResources resources, final HttpServletRequest p_Request) - throws Exception { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - // Get all infos of a MBean - MBeanInfo oMBeanInfo = JonasManagementRepr.getMBeanInfo(onMBean, serverName); - // Get attributes infos - MBeanAttributeInfo[] aoMBeanAttributeInfo = oMBeanInfo.getAttributes(); - if (aoMBeanAttributeInfo.length > 0) { - // Append attributes node - TreeControlNode nodeAttributes = new TreeControlNode("Attributes" - + WhereAreYou.NODE_SEPARATOR + onMBean.toString(), "icon/JonasQuestion.gif" - , resources.getMessage("treenode.allmbeans.attributes"), null, "content", false); - addNode(nodeMBean, nodeAttributes); - // Loop to append each attribute node - for (int i = 0; i < aoMBeanAttributeInfo.length; i++) { - TreeControlNode nodeAttr = new TreeControlNode(String.valueOf(i) - + WhereAreYou.NODE_SEPARATOR + onMBean.toString() + WhereAreYou.NODE_SEPARATOR - + aoMBeanAttributeInfo[i].getName(), "icon/property.gif" - , aoMBeanAttributeInfo[i].getName(), null, "content", false); - addNode(nodeAttributes, nodeAttr); - } - } - // Get operations infos - MBeanOperationInfo[] aoMBeanOperationInfo = oMBeanInfo.getOperations(); - if (aoMBeanOperationInfo.length > 0) { - // Append operations node - TreeControlNode nodeOperations = new TreeControlNode("Operations" - + WhereAreYou.NODE_SEPARATOR + onMBean.toString(), "icon/JonasQuestion.gif" - , resources.getMessage("treenode.allmbeans.operations"), null, "content", false); - addNode(nodeMBean, nodeOperations); - // Loop to append each operation node - for (int i = 0; i < aoMBeanOperationInfo.length; i++) { - TreeControlNode nodeOpe = new TreeControlNode(String.valueOf(i) - + WhereAreYou.NODE_SEPARATOR + onMBean.toString() + WhereAreYou.NODE_SEPARATOR - + aoMBeanOperationInfo[i].getName(), "icon/action.gif" - , aoMBeanOperationInfo[i].getName(), null, "content", false); - addNode(nodeOperations, nodeOpe); - } - } - } - - // MQ Connector support - //---------------------- - /** - * - */ - public void getJonasMqConnectorPlatform(final TreeControlNode pServerNode, - final String sServerName, final MessageResources pResources, - final HttpServletRequest p_Request) { - /* - * retrieve the domain name - */ - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - - TreeControlNode platformNode = new TreeControlNode(pServerNode - .getName() - + WhereAreYou.NODE_SEPARATOR + "jonasmqconnect", - "icon/service_jms.gif", pResources - .getMessage("treenode.joansmqconnect.name"), - "JonasMqConnectPlatform.do", "content", false); - - if (!addNode(pServerNode, platformNode)) { - return; - } - //ObjectName mqOnPattern = new ObjectName(sDomainName + ":type=JonasMQConnector,*"); - ObjectName[] mqOns = MqObjectNames.getConnectorsON(sDomainName, sServerName); - for (int i = 0; i < mqOns.length; i++) { - ObjectName on = mqOns[i]; - String connectorName = on.getKeyProperty("name"); - TreeControlNode serverNode = new TreeControlNode(platformNode - .getName() - + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnector" - + WhereAreYou.NODE_SEPARATOR + connectorName, - "icon/jms_connector.gif", connectorName, - "JonasMqConnect.do?operation=view&connector=" + connectorName, - "content", false); - if (addNode(platformNode, serverNode)) { - getJonasMqDestinations(serverNode, connectorName, sServerName, pResources, p_Request); - } - } - - } - /** - * - * Build the destination nodes - */ - public void getJonasMqDestinations(final TreeControlNode pMQNode, final String connectorName, - final String sServerName, final MessageResources pResources, - final HttpServletRequest p_Request) { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - //ObjectName mqDestPattern = new ObjectName(sDomainName + ":type=MQDestination,JonasMQConnector=" + connectorName+ ",*"); - //System.err.println("JOnASTreeBuilder querying " + mqDestPattern + " for server " + sServerName); - ObjectName mqDestPattern = MqObjectNames.getDestinationsON(sDomainName, connectorName); - Set destOns = JonasManagementRepr.queryNames(mqDestPattern, sServerName); - for (Iterator i = destOns.iterator(); i.hasNext();) { - ObjectName on = (ObjectName) i.next(); - String destName = on.getKeyProperty("name"); - boolean isTopic = ((Boolean) JonasManagementRepr.getAttribute(on, "IsTopic", sServerName)).booleanValue(); - TreeControlNode serverNode = new TreeControlNode(pMQNode.getName() - + WhereAreYou.NODE_SEPARATOR + "destination" - + WhereAreYou.NODE_SEPARATOR + destName, - "icon/" + (isTopic ? "jms_topic.gif" : "jms_queue.gif"), destName, - "JonasMqConnectDestinationEdit.do?operation=view&jndiName=" + destName + "&connector=" + connectorName, - "content", false); - addNode(pMQNode, serverNode); - } - } - - /** - * Add a new node in the tree as child of the current node - * @param currentNode the current node - * @param node the node to add - * @return true if success, false if the new node couldn't be added - */ - private boolean addNode(final TreeControlNode currentNode, final TreeControlNode node) { - String nodeName = node.getName(); - try { - currentNode.addChild(node); - } catch(IllegalArgumentException iae) { - // the name of the new child node is not unique - if (logger.isLoggable(BasicLevel.ERROR)) { - logger.log(BasicLevel.ERROR, "Can't add node " + nodeName + " in the management tree as node name is not unique"); - } - return false; - } - return true; - } - /** - * Add a new node in the tree as child of the current node - * @param currentNode the current node - * @param node the node to add - * @param offset Zero-relative offset at which the new node - * should be inserted - * @return true if success, false if the new node couldn't be added - */ - private boolean addNode(final TreeControlNode currentNode, final TreeControlNode node, final int offset) { - String nodeName = node.getName(); - try { - currentNode.addChild(offset, node); - } catch(IllegalArgumentException iae) { - // the name of the new child node is not unique - if (logger.isLoggable(BasicLevel.ERROR)) { - logger.log(BasicLevel.ERROR, "Can't add node " + nodeName + " in the management tree as node name is not unique"); - } - return false; - } - return true; - } - - private String encode(final String name) { - try { - return URLEncoder.encode(name, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return null; - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/LogOutAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/LogOutAction.java deleted file mode 100644 index ffb3c21fe3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/LogOutAction.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Struts", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.apache.struts.action.Action; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Implementation of Action that logs out of the current - * session and returns to the Main Index (which will trigger the login form). - * - * @author Craig R. McClanahan - * @author Florent Benoit (changes for struts 1.2.2) - * @version $Revision: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ - -public final class LogOutAction extends Action { - - // --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param mapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request - , HttpServletResponse response) - throws IOException, ServletException { - - // Invalidate the current session and create a new one - HttpSession session = request.getSession(); - session.invalidate(); - session = request.getSession(true); - - // Forward control back to the Main Index - return (mapping.findForward("Main Index")); - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/MBeanTreeBuilder.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/MBeanTreeBuilder.java deleted file mode 100644 index fab7991f78..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/MBeanTreeBuilder.java +++ /dev/null @@ -1,363 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanInfo; -import javax.management.MBeanOperationInfo; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.J2eeMbeanItem; -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.lib.management.extensions.base.mbean.OwnerMbeanItem; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -import org.ow2.jonas.webapp.taglib.TreeBuilder; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -import org.apache.struts.Globals; -import org.apache.struts.action.ActionServlet; -import org.apache.struts.util.MessageResources; - - -/** - * Implementation of TreeBuilder that adds the nodes required - * for administering the Jonas server. - * - * @author Michel-Ange ANTON (initial developer) - * @author Florent Benoit (changes for struts 1.2.2) - */ - -public class MBeanTreeBuilder implements TreeBuilder { -// ----------------------------------------------------- Instance Variables - -// ---------------------------------------------------- TreeBuilder Methods - - /** - * Add the required nodes to the specified treeControl - * instance. - * - * @param treeControl The TreeControl to which we should - * add our nodes - * @param servlet The controller servlet for the admin application - * @param request The servlet request we are processing - */ - public void buildTree(final TreeControl treeControl, final ActionServlet servlet - , final HttpServletRequest request) { - try { - TreeControlNode rootNode = treeControl.getRoot(); - MessageResources resources = (MessageResources) servlet.getServletContext(). - getAttribute(Globals.MESSAGES_KEY); - getMBeans(rootNode, resources, request); - } catch (Throwable t) { - t.printStackTrace(System.out); - } - } - -// ------------------------------------------------------ Protected Methods - - /** - * Append nodes for all defined MBeans. - * - * @param rootNode Root node for the tree control - * @param resources The MessageResources for our localized messages - * - * @exception Exception if an exception occurs building the tree - */ - public void getMBeans(TreeControlNode rootNode, MessageResources resources, - HttpServletRequest request) - throws Exception { - - TreeControlNode nodeMBeans = new TreeControlNode("mbeans", "icon/mbeans.gif" - , resources.getMessage("treenode.allmbeans"), "ListMBeans.do", "content", false); - rootNode.addChild(nodeMBeans); - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - ArrayList[] als = JonasAdminJmx.getFamiliesMbeansLists(serverName); - if (als[MbeanItem.FAMILY_J2EE].size() > 0) { - getJ2eeMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_J2EE]); - } - if (als[MbeanItem.FAMILY_OWNER].size() > 0) { - getOwnerMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_OWNER]); - } - if (als[MbeanItem.FAMILY_UNKNOWN].size() > 0) { - getUnknownMBeans(nodeMBeans, resources, als[MbeanItem.FAMILY_UNKNOWN]); - } - } - - /** - * Append nodes for all defined Owner MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - * - * @exception Exception if an exception occurs building the tree - */ - public void getOwnerMBeans(TreeControlNode p_ParentNode, MessageResources p_Resources - , ArrayList p_List) - throws Exception { - - TreeControlNode nodeMBeans = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + "owner", "icon/mbeans.gif", p_Resources.getMessage("treenode.mbeans.owner") - , "ListOwnerMBeans.do", "content", false); - p_ParentNode.addChild(nodeMBeans); - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "type", "objectName"})); - - // Detail MBean node - String sLastDomain = ""; - String sLastType = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - OwnerMbeanItem oItem; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (OwnerMbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (oItem.getDomain().equals(sLastDomain) == false) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - nodeMBeans.addChild(nodeDomain); - } - nodeParent = nodeDomain; - - if (oItem.getType() != null) { - // Type node - if (oItem.getType().equals(sLastType) == false) { - sLastType = oItem.getType(); - nodeType = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getType(), "icon/mbeantype.gif" - , oItem.getType(), null, "content", false); - nodeDomain.addChild(nodeType); - } - nodeParent = nodeType; - } - } - - // Mbean node - nodeMBean = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName(), "icon/mbean.gif", oItem.getObjectName() - , "ListMBeanDetails.do?select=" + URLEncoder.encode(oItem.getObjectName() - , "UTF-8"), "content", false); - nodeParent.addChild(nodeMBean); - - } - } - - /** - * Append nodes for all defined J2EE MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - * - * @exception Exception if an exception occurs building the tree - */ - public void getJ2eeMBeans(TreeControlNode p_ParentNode, MessageResources p_Resources - , ArrayList p_List) - throws Exception { - - TreeControlNode nodeMBeans = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + "j2ee", "icon/mbeans.gif", p_Resources.getMessage("treenode.mbeans.j2ee") - , "ListJ2eeMBeans.do", "content", false); - p_ParentNode.addChild(nodeMBeans); - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "j2eeType", "name", "objectName"})); - - // Detail MBean node - J2eeMbeanItem oItem; - String sLastDomain = ""; - String sLastType = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (J2eeMbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (oItem.getDomain().equals(sLastDomain) == false) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - nodeMBeans.addChild(nodeDomain); - } - nodeParent = nodeDomain; - } - if (oItem.getJ2eeType() != null) { - // Type node - if (oItem.getJ2eeType().equals(sLastType) == false) { - sLastType = oItem.getJ2eeType(); - nodeType = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getJ2eeType(), "icon/mbeantype.gif" - , oItem.getJ2eeType(), null, "content", false); - nodeDomain.addChild(nodeType); - } - nodeParent = nodeType; - } - - // Mbean node - nodeMBean = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName(), "icon/mbean.gif", oItem.getObjectName() - , "ListMBeanDetails.do?select=" + URLEncoder.encode(oItem.getObjectName() - , "UTF-8"), "content", false); - nodeParent.addChild(nodeMBean); - - } - } - - /** - * Append nodes for all defined Unknown MBeans. - * - * @param p_ParentNode Parent node for the tree control - * @param p_Resources The MessageResources for our localized messages - * @param p_List The list of Mbeans - * - * @exception Exception if an exception occurs building the tree - */ - public void getUnknownMBeans(TreeControlNode p_ParentNode, MessageResources p_Resources - , ArrayList p_List) - throws Exception { - - TreeControlNode nodeMBeans = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + "unknown", "icon/mbeans.gif", p_Resources.getMessage("treenode.mbeans.unknown") - , "ListUnknownMBeans.do", "content", false); - p_ParentNode.addChild(nodeMBeans); - // Sort list - Collections.sort(p_List, new BeanComparator(new String[] { - "domain", "objectName"})); - - // Detail MBean node - MbeanItem oItem; - String sLastDomain = ""; - TreeControlNode nodeMBean = null; - TreeControlNode nodeDomain = null; - TreeControlNode nodeType = null; - TreeControlNode nodeParent = null; - - Iterator it = p_List.iterator(); - while (it.hasNext()) { - oItem = (MbeanItem) it.next(); - - nodeParent = nodeMBeans; - if (oItem.getDomain() != null) { - // Domain node - if (oItem.getDomain().equals(sLastDomain) == false) { - sLastDomain = oItem.getDomain(); - nodeDomain = new TreeControlNode(nodeParent.getName() - + WhereAreYou.NODE_SEPARATOR + oItem.getDomain(), "icon/mbeandomain.gif" - , oItem.getDomain(), null, "content", false); - nodeMBeans.addChild(nodeDomain); - } - nodeParent = nodeDomain; - - } - - // Mbean node - nodeMBean = new TreeControlNode("mbeans" + WhereAreYou.NODE_SEPARATOR - + oItem.getObjectName(), "icon/mbean.gif", oItem.getObjectName() - , "ListMBeanDetails.do?select=" + URLEncoder.encode(oItem.getObjectName() - , "UTF-8"), "content", false); - nodeParent.addChild(nodeMBean); - - } - } - - /** - * Append nodes Attributes and Operations for a defined MBean. - * - * @param nodeMBean The MBean node - * @param onMBean The MBean Object name - * @param resources Resource - * @throws Exception - */ - protected void getMBeanInfo(TreeControlNode nodeMBean, ObjectName onMBean - , MessageResources resources, String serverName) - throws Exception { - // Get all infos of a MBean - MBeanInfo oMBeanInfo = JonasManagementRepr.getMBeanInfo(onMBean, serverName); - // Get attributes infos - MBeanAttributeInfo[] aoMBeanAttributeInfo = oMBeanInfo.getAttributes(); - if (aoMBeanAttributeInfo.length > 0) { - // Append attributes node - TreeControlNode nodeAttributes = new TreeControlNode("Attributes" - + WhereAreYou.NODE_SEPARATOR + onMBean.toString(), "icon/JonasQuestion.gif" - , resources.getMessage("treenode.allmbeans.attributes"), null, "content", false); - nodeMBean.addChild(nodeAttributes); - // Loop to append each attribute node - for (int i = 0; i < aoMBeanAttributeInfo.length; i++) { - TreeControlNode nodeAttr = new TreeControlNode(String.valueOf(i) - + WhereAreYou.NODE_SEPARATOR + onMBean.toString() + WhereAreYou.NODE_SEPARATOR - + aoMBeanAttributeInfo[i].getName(), "icon/property.gif" - , aoMBeanAttributeInfo[i].getName(), null, "content", false); - nodeAttributes.addChild(nodeAttr); - } - } - // Get operations infos - MBeanOperationInfo[] aoMBeanOperationInfo = oMBeanInfo.getOperations(); - if (aoMBeanOperationInfo.length > 0) { - // Append operations node - TreeControlNode nodeOperations = new TreeControlNode("Operations" - + WhereAreYou.NODE_SEPARATOR + onMBean.toString(), "icon/JonasQuestion.gif" - , resources.getMessage("treenode.allmbeans.operations"), null, "content", false); - nodeMBean.addChild(nodeOperations); - // Loop to append each operation node - for (int i = 0; i < aoMBeanOperationInfo.length; i++) { - TreeControlNode nodeOpe = new TreeControlNode(String.valueOf(i) - + WhereAreYou.NODE_SEPARATOR + onMBean.toString() + WhereAreYou.NODE_SEPARATOR - + aoMBeanOperationInfo[i].getName(), "icon/action.gif" - , aoMBeanOperationInfo[i].getName(), null, "content", false); - nodeOperations.addChild(nodeOpe); - } - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ServiceName.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ServiceName.java deleted file mode 100644 index d1fac0d1df..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/ServiceName.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin; - - -public enum ServiceName { - REGISTRY ("registry"), - JMX ("jmx"), - JTM ("jtm"), - SECURITY ("security"), - DB ("db"), - MAIL ("mail"), - WM ("wm"), - WC ("wc"), - DBM ("dbm"), - RESOURCE ("resource"), - CMI ("cmi"), - HA ("ha"), - VERSIONING ("versioning"), - SMARTCLIENT ("smartclient"), - EJB2 ("ejb2"), - EJB3 ("ejb3"), - WEB ("web"), - EAR ("ear"), - JAXRPC ("jaxrpc"), - JAXWS ("jaxws"), - WSDLPUBLISHER ("wsdl-publisher"), - WS ("ws"), - DEPMONITOR ("depmonitor"), - DISCOVERY ("discovery"); - - /** - * Service name. - */ - private String name = null; - - /** - * Private constructor. - * @param name the given service name - */ - private ServiceName(final String name) { - this.name = name; - } - - /** - * Returns the service name. - * @return the service name - */ - public String getName(){ - return name; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetUpTreeAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetUpTreeAction.java deleted file mode 100644 index 99a817e264..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetUpTreeAction.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.StringTokenizer; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.webapp.taglib.TreeBuilder; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -import org.apache.struts.action.Action; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionServlet; - -/** - * Test Action sets up tree control data structure - * for tree widget - * - * @author Jazmin Jonson - * @author Manveen Kaur - * @author Florent Benoit (changes for struts 1.2.2) - * @version $Revision: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ - -public class SetUpTreeAction extends Action { - - public static final int INIT_PLUGIN_MAX = 10; - public static final String TREEBUILDER_KEY = "treebuilders"; - public static final String ROOTNODENAME_KEY = "rootnodename"; - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param mapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request - , HttpServletResponse response) - throws IOException, ServletException { - - //ApplicationServlet servlet = (ApplicationServlet) getServlet(); - ActionServlet servlet = (ActionServlet) getServlet(); - - // Getting init parms from web.xml - - // Get the string to be displayed as root node while rendering the tree - String rootnodeName = (String) servlet.getServletConfig().getInitParameter(ROOTNODENAME_KEY); - - String treeBuildersStr = (String) servlet.getServletConfig().getInitParameter( - TREEBUILDER_KEY); - - // Make the root node and tree control - - // The root node gets rendered only if its value - // is set as an init-param in web.xml - - TreeControlNode root = new TreeControlNode("ROOT-NODE", null, rootnodeName - , "setUpTree.do?select=ROOT-NODE", "content", true); - - TreeControl control = new TreeControl(root); - - if (treeBuildersStr != null) { - Class treeBuilderImpl; - TreeBuilder treeBuilderBase; - - ArrayList treeBuilders = new ArrayList(INIT_PLUGIN_MAX); - int i = 0; - StringTokenizer st = new StringTokenizer(treeBuildersStr, ","); - while (st.hasMoreTokens()) { - treeBuilders.add(st.nextToken().trim()); - } - - if (treeBuilders.size() == 0) { - treeBuilders.add(treeBuildersStr.trim()); - } - for (i = 0; i < treeBuilders.size(); i++) { - try { - treeBuilderImpl = Class.forName((String) treeBuilders.get(i)); - treeBuilderBase = (TreeBuilder) treeBuilderImpl.newInstance(); - treeBuilderBase.buildTree(control, servlet, request); - } - catch (Throwable t) { - t.printStackTrace(System.out); - } - } - } - - HttpSession session = request.getSession(); - session.setAttribute("treeControl", control); - - WhereAreYou oWhere = (WhereAreYou) session.getAttribute(WhereAreYou.SESSION_NAME); - if (oWhere != null) { - oWhere.setTreeControl(control); - } else { - // no more WhereAreYou object in the session - oWhere = new WhereAreYou(); - } - - String name = request.getParameter("select"); - if (name != null) { - control.selectNode(name); - // Forward back to the Blank page - return (mapping.findForward("Blank")); - } - - return (mapping.findForward("Tree")); - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetupWhereAreYouAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetupWhereAreYouAction.java deleted file mode 100644 index 9427bde12c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/SetupWhereAreYouAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.Log; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Michel-Ange ANTON (initial developer) - * @author Florent Benoit (changes for struts 1.2.2) - */ -public class SetupWhereAreYouAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // nothing to do - return null; - } - - public ActionForward execute(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Initialize the instance variables - initialize(p_Request); - - try { - if (m_WhereAreYou == null) { - m_WhereAreYou = new WhereAreYou(); - m_WhereAreYou.initialize(getServlet(), p_Request); - m_Session.setAttribute(WhereAreYou.SESSION_NAME, m_WhereAreYou); - } else { - m_WhereAreYou.refreshServers(p_Request); - } - } catch (JonasAdminException e) { - - String message = m_Resources.getMessage(e.getId()); - //getServlet().log(message); - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, message); - } - m_Errors.add(e.getId(), new ActionMessage(e.getId())); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - return (p_Mapping.findForward("Frame Main")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TopForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TopForm.java deleted file mode 100644 index 5536f301d1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TopForm.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Jonas server form page. - */ - -public final class TopForm extends ActionForm { - -// ----------------------------------------------------- Instance Variables - -// ------------------------------------------------------------- Properties - private String serverSelect = null; - - public String getServerSelect() { - return this.serverSelect; - } - - public void setServerSelect(String serverSelect) { - this.serverSelect = serverSelect; - } - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - this.serverSelect = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TreeAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TreeAction.java deleted file mode 100644 index b87d6597dc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/TreeAction.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.IOException; -import java.net.URLEncoder; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -import org.apache.struts.action.Action; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Test Action that handles events from the tree control test - * page. - * - * @author Craig R. McClanahan - * @version $Revision: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ - -public class TreeAction extends Action { - - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param mapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request - , HttpServletResponse response) - throws IOException, ServletException { - - String name = null; - HttpSession session = request.getSession(); - WhereAreYou oWhere = (WhereAreYou) session.getAttribute(WhereAreYou.SESSION_NAME); - // Detect if a WhereAreYou instance is present - if (oWhere == null) { - // Re-init - //getServlet().log("Instance WhereAreYou not found in session : re-init"); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Instance WhereAreYou not found in session : re-init"); - } - return (mapping.findForward("Main Index")); - } - // Get the tree - TreeControl control = oWhere.getTreeControl(); - // Handle a tree expand/contract event - name = request.getParameter("tree"); - if (name != null) { - //getServlet().log("Tree expand/contract on " + name); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Tree expand/contract on " + name); - } - TreeControlNode node = control.findNode(name); - if (node != null) { - //getServlet().log("Found Node: " + name + "[" + node.getLabel() + "]"); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Found Node: " + name + "[" + node.getLabel() + "]"); - } - node.setExpanded(!node.isExpanded()); - // Add the anchor - request.setAttribute("anchorToGo", URLEncoder.encode(name, "UTF-8")); - } - } - else { - //getServlet().log("tree param is null"); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "tree param is null"); - } - } - - // Handle a select item event - name = request.getParameter("select"); - if (name != null) { - //getServlet().log("Select event on " + name); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Select event on " + name); - } - control.selectNode(name); - // Add the anchor - request.setAttribute("anchorToGo", URLEncoder.encode(name, "UTF-8")); - } - - // Forward back to the test page - return (mapping.findForward("Tree")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/WhereAreYou.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/WhereAreYou.java deleted file mode 100644 index 2aa78f1d2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/WhereAreYou.java +++ /dev/null @@ -1,370 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin; - -import java.io.UnsupportedEncodingException; -import java.util.Hashtable; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionServlet; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.management.extensions.base.AdminException; -import org.ow2.jonas.lib.management.extensions.base.AdminHelper; -import org.ow2.jonas.lib.management.extensions.base.AdminJmxHelper; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -/** - * @author Michel-Ange ANTON - */ -/** - * @author eyindanga - */ -public class WhereAreYou extends AdminHelper { - - - /** - * Name of the variable in http session - */ - public final static String SESSION_NAME = "WhereAreYou"; - - // Constant environnement - public final static String TAGS_IMAGES_ROOT_KEY = "tagsimagesroot"; - public final static String CONTEXT_MACRO = "${CONTEXT}"; - public final static String TREE_PAGE_REFRESH = "viewTree.do?select="; - public final static String EXCEPTION_JONASSERVER_NOTFOUND = "error.jonasserver.notfound"; - /** - * Used separator in the ident node in the tree - */ - public final static String NODE_SEPARATOR = "*"; - - /** - * Node name separator. - */ - public final static String NODE_NAME_SEPARATOR = "/"; - - /** - * Node name separator. - */ - public final static String J2EE_APPLICATION_KEY = "J2EEApplication"; - -// --------------------------------------------------------- Properties variable - - private String imagesRoot = null; - private TreeControl treeControl = null; - private boolean treeToRefresh = false; - - - -// --------------------------------------------------------- Constructor - - public WhereAreYou() { - super(); - try { - // Get the name of the Jonas Server who is running the application - JProp oJProp = JProp.getInstance(); - adminJonasServerName = oJProp.getValue(ConfigurationConstants.JONAS_NAME_PROP); - adminJonasServerConfDir = oJProp.getConfDir(); - currentDomainName = oJProp.getValue(ConfigurationConstants.DOMAIN_NAME_PROP); - currentDomain = J2eeObjectName.J2EEDomain(currentDomainName); - currentJonasServerName = adminJonasServerName; - currentJonasServer = J2eeObjectName.J2EEServer(currentDomainName, currentJonasServerName); - clusterdGraphAttributes = new Hashtable(); - configuredServerForClusterDaemonList = new Hashtable(); - removedServersPerClusterd = new Hashtable(); - } catch (Exception e) { - // Current Jonas not found, can't run jonasAdmin - throw new JonasAdminException(EXCEPTION_JONASSERVER_NOTFOUND, e.getMessage(), e); - } - } - -// --------------------------------------------------------- Public Methods - - /** - * Initialize the properties in only reading. - * - * @param p_Servlet The instance of servlet to access to the parameter of the servlet config - * @param p_Request The request to access to the HTTP informations - * @throws JonasAdminException - */ - public void initialize(final ActionServlet p_Servlet, final HttpServletRequest p_Request) - throws JonasAdminException { - // Tags Images Root directory - String sImagesRoot = p_Servlet.getServletConfig().getInitParameter( - TAGS_IMAGES_ROOT_KEY); - if (sImagesRoot != null) { - sImagesRoot = JonasAdminJmx.replace(sImagesRoot, CONTEXT_MACRO - , p_Request.getContextPath()); - } - this.imagesRoot = sImagesRoot; - refreshServers(p_Request, currentDomainName, currentJonasServerName); - } - /** - * Return the name of the selected node in the tree. - * - * @return The name - */ - public String getSelectedNameNode() { - if (treeControl != null) { - TreeControlNode oNode = treeControl.getSelected(); - if (oNode != null) { - return oNode.getName(); - } - } - return null; - } - - /** - * Return the URL to refresh the selected node in the tree. - * - * @param p_Request HTTP request - * @param p_Response HTTP response - * @return The URL - */ - public String getUrlToRefreshSelectedNode(final HttpServletRequest p_Request - , final HttpServletResponse p_Response) { - if (treeControl != null) { - TreeControlNode oNode = treeControl.getSelected(); - if (oNode != null) { - // Disable refresh - treeToRefresh = false; - // Build URL refresh - String encodedName = null; - try { - encodedName = java.net.URLEncoder.encode(oNode.getName(), "UTF-8"); - } catch (UnsupportedEncodingException e) { - // Node name can't be encoded - encodedName = oNode.getName(); - } - StringBuffer sb = new StringBuffer(); - sb.append(p_Request.getContextPath()); - sb.append("/"); - sb.append(TREE_PAGE_REFRESH); - sb.append(encodedName); - // Force the browser to refresh the tree (Netscape and Mozilla) - sb.append("&s="); - sb.append(Math.random()); - - return p_Response.encodeURL(sb.toString()); - } - } - return null; - } - - /** - * Select the node in the tree. - * - * @param p_Name The name of node to select - * @param p_Expand Expand parent branch - */ - public void selectNameNode(final String p_Name, final boolean p_Expand) { - if (treeControl != null) { - // Changing node ? - if (p_Name.equals(getSelectedNameNode()) == false) { - // Change node - treeControl.selectNode(p_Name); - if (p_Expand == true) { - treeControl.expandSelectedParents(); - } - treeToRefresh = true; - } - // Query node not found - if ((getSelectedTreeControlNode() == null) && (p_Name != null) && (p_Name.length() > 0)) { - // Try to select the parent node - String s = p_Name.substring(0, p_Name.lastIndexOf(WhereAreYou.NODE_SEPARATOR)); - if ((s != null) && (s.length() > 0)) { - selectNameNode(s, p_Expand); - } - } - } - } - - /** - * Return the selected node in the tree. - * - * @return The selected node - */ - public TreeControlNode getSelectedTreeControlNode() { - if (treeControl != null) { - return treeControl.getSelected(); - } - return null; - } - - /** - * Return the state of current display of tree. - * - * @return True if the current tree is not correctly displaying - */ - public boolean isTreeToRefresh() { - return treeToRefresh; - } - - /** - * Change the state of current display of tree. - * - * @param treeToRefresh True to refresh - */ - public void setTreeToRefresh(final boolean treeToRefresh) { - this.treeToRefresh = treeToRefresh; - } - - //------------------------------------------- refresh operations. - /** - * Refresh all the servers properties. - * - * @param p_Request The request to access to the HTTP informations - * @throws ManagementException if could not connect to the MBeanServer - * @throws AdminException - */ - public void refreshServers(final HttpServletRequest p_Request, final String domainName, final String serverName) - throws ManagementException, AdminException { - refreshJonas(p_Request, serverName); - applicationServerPort = p_Request.getServerPort(); - applicationContextPath = p_Request.getContextPath(); - refreshCatalina(p_Request, domainName); - refreshJetty(p_Request, domainName); - } - public void refreshServers(final HttpServletRequest p_Request) { - // Nothing to do, no server change - } - /** - * Refresh the Catalina server properties. - * - * @param p_Request The request to access to the HTTP informations - */ - public void refreshCatalina(final HttpServletRequest p_Request, final String domainName) { - resetCatalina(); - try { - String servletServerName = getServletServerName(domainName); - if (servletServerName == null) { - return; - } - String sServer = servletServerName.toLowerCase(); - catalinaServer = (sServer.indexOf("tomcat") > -1); - if (catalinaServer) { - ObjectName onServer = AdminJmxHelper.getFirstMbean(CatalinaObjectName.catalinaServer(), currentJonasServerName); - ObjectName[] aonServices = (ObjectName[]) JonasManagementRepr.getAttribute(onServer - , "serviceNames", currentJonasServerName); - // Service : the first ! - currentCatalinaServiceName = aonServices[0].getKeyProperty("serviceName"); - // Domain - currentCatalinaDomainName = aonServices[0].getDomain(); - // Engine - currentCatalinaEngineName = currentCatalinaDomainName; - ObjectName onEngine = CatalinaObjectName.catalinaEngine(currentCatalinaDomainName); - // Default Host - currentCatalinaDefaultHostName = (String) JonasManagementRepr.getAttribute(onEngine - , "defaultHost", currentJonasServerName); - } - } catch (Exception e) { - // none - } - } - - /** - * Refresh the Jetty server properties. - * - * @param p_Request The request to access to the HTTP informations - */ - public void refreshJetty(final HttpServletRequest p_Request, final String domainName) { - resetJetty(); - try { - String servletServerName = getServletServerName(domainName); - if (servletServerName == null) { - return; - } - String sServer = servletServerName.toLowerCase(); - jettyServer = (sServer.indexOf("jetty") > -1); - if (jettyServer == true) { - // none action - } - } - catch (Exception e) { - // none - } - } - - /** - * Refresh the managed JOnAS server properties. - * - * @param p_Request The request to access to the HTTP informations - * @throws ManagementException if could not connect to the MBeanServer - * @throws AdminException - */ - public void refreshJonas(final HttpServletRequest p_Request, final String serverName) - throws ManagementException, AdminException { - resetJonas(); - // Set J2EEServer information - currentJonasServerName = serverName; - currentJonasServer = J2eeObjectName.J2EEServer(currentDomainName, serverName); - - // Detect if the current managed JOnAS server is the one where the application is running - theCurrentJonasServer = adminJonasServerName.equals(currentJonasServerName); - - } - - /** - * Return in a string the contents of the instance for each propertie. - * Debug utility. - * - * @return The string contents - */ - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("imagesRoot=[").append(imagesRoot).append("] "); - sb.append("treeControl=[").append(treeControl).append("] "); - sb.append("catalinaServer=[").append(catalinaServer).append("] "); - return sb.toString(); - } - -// --------------------------------------------------------- Protected Methods - - - -// --------------------------------------------------------- Properties Methods - - public String getImagesRoot() { - return imagesRoot; - } - - public TreeControl getTreeControl() { - return treeControl; - } - - public void setTreeControl(final TreeControl treeControl) { - this.treeControl = treeControl; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorAction.java deleted file mode 100644 index 30126cf317..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorAction.java +++ /dev/null @@ -1,190 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; -import java.net.InetAddress; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - update to Tomact 5.0 - * Replace MBeanFactory usage with JOnAS CatalinaConnectorFactory MBean - * in order to avoid class loader problems occuring with JRMP - */ -public class ApplyConnectorAction extends CatalinaBaseAction { - - /** - * Signature for the createStandardConnector operation. - */ - private String[] saCreateStandardConnectorTypes = { - "java.lang.String", "java.lang.String", "int" // port - }; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Current JOnAS server name - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // Next forward - String sForward = "Catalina Connector"; - // Identify the requested action - ConnectorForm oForm = (ConnectorForm) p_Form; - String sAction = oForm.getAction(); - String sObjectName = oForm.getObjectName(); - String sConnectorType = oForm.getConnectorType(); - - // Populate - try { - // Perform a "Create Connector operation" - if ("create".equals(sAction)) { - String address = oForm.getAddress(); // IP address - - // Ensure that the requested connector name is unique - ObjectName onConnector = CatalinaObjectName.catalinaConnector( - m_WhereAreYou.getCurrentCatalinaDomainName(), - oForm.getPortText()); - if (JonasAdminJmx.hasMBeanName(onConnector, serverName)) { - m_Errors.add("connector", new ActionMessage("error.catalina.connector.exists")); - saveErrors(p_Request, m_Errors); - return (new ActionForward(p_Mapping.getInput())); - } - - Object values[] = new Object[3]; - String operation = null; - - // Look up the Catalina MBeanFactory - ObjectName onFactory = CatalinaObjectName.catalinaFactory(); - values[0] = CatalinaObjectName.catalinaService(m_WhereAreYou. - getCurrentCatalinaDomainName() - , m_WhereAreYou.getCurrentCatalinaServiceName()).toString(); - values[1] = address; - values[2] = new Integer(oForm.getPortText()); - - if ("HTTP".equalsIgnoreCase(sConnectorType)) { - operation = "createHttpConnector"; // HTTP - } - else if ("HTTPS".equalsIgnoreCase(sConnectorType)) { - operation = "createHttpsConnector"; // HTTPS - } - else { - operation = "createAjpConnector"; // AJP(HTTP) - } - sObjectName = (String) JonasManagementRepr.invoke(onFactory, operation, values - , saCreateStandardConnectorTypes, serverName); - - if (sObjectName == null) { - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // refresh tree - refreshTree(p_Request); - // Force the node selected in tree - String nodeName = getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "protocols" - + WhereAreYou.NODE_SEPARATOR + "connectors"; - //+ WhereAreYou.NODE_SEPARATOR + m_WhereAreYou.getCurrentCatalinaServiceName() - //+ WhereAreYou.NODE_SEPARATOR + oForm.getPortText(); - if (address != null) { - nodeName = nodeName - + WhereAreYou.NODE_SEPARATOR + address; - } - m_WhereAreYou.selectNameNode(nodeName, true); - - } - - ObjectName oObjectName = new ObjectName(sObjectName); - - setIntegerAttribute(oObjectName, "acceptCount", oForm.getAcceptCountText()); - String addressValue = oForm.getAddress(); - InetAddress inetAddress = InetAddress.getByName(addressValue); - JonasManagementRepr.setAttribute(oObjectName, "address", inetAddress, serverName); - setBooleanAttribute(oObjectName, "allowTrace", oForm.isAllowTrace()); - setIntegerAttribute(oObjectName, "connectionTimeout", oForm.getConnTimeOutText()); - setIntegerAttribute(oObjectName, "bufferSize", oForm.getBufferSizeText()); - setIntegerAttribute(oObjectName, "maxPostSize", oForm.getMaxPostSizeText()); - setBooleanAttribute(oObjectName, "enableLookups", oForm.isEnableLookups()); - setBooleanAttribute(oObjectName, "emptySessionPath", oForm.isEmptySessionPath()); - setBooleanAttribute(oObjectName, "xpoweredBy", oForm.isXpoweredBy()); - setBooleanAttribute(oObjectName, "tcpNoDelay", oForm.isTcpNoDelay()); - setBooleanAttribute(oObjectName, "useBodyEncodingForURI", oForm.isUseBodyEncodingForURI()); - setIntegerAttribute(oObjectName, "redirectPort", oForm.getRedirectPortText()); - setIntegerAttribute(oObjectName, "maxThreads", oForm.getMaxThreadsText()); - setIntegerAttribute(oObjectName, "minSpareThreads", oForm.getMinSpareThreadsText()); - setIntegerAttribute(oObjectName, "maxSpareThreads", oForm.getMaxSpareThreadsText()); - - // proxy name and port do not exist for AJP connector - if ("AJP".equalsIgnoreCase(sConnectorType) == false) { - setStringAttribute(oObjectName, "proxyName", oForm.getProxyName()); - setIntegerAttribute(oObjectName, "proxyPort", oForm.getProxyPortText()); - } - - // HTTPS specific properties - if ("HTTPS".equalsIgnoreCase(sConnectorType) == true) { - setBooleanAttribute(oObjectName, "clientAuth", oForm.isClientAuth()); - setStringAttribute(oObjectName, "keystoreFile", oForm.getKeystoreFile()); - setStringAttribute(oObjectName, "keystorePass", oForm.getKeystorePass()); - } - - if ("create".equals(sAction) == true) { - m_Session.removeAttribute(p_Mapping.getAttribute()); - sForward = "ActionListCatalinaConnectors"; - } - - // Save in configuration file - if (oForm.isSave() == true) { - oForm.setSave(false); - p_Request.setAttribute("forward", sForward); - sForward = "ActionEditServletServer"; - //ObjectName on = CatalinaObjectName.catalinaServer(); - //JonasManagementRepr.invoke(on, "store", null, null); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward(sForward); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsAction.java deleted file mode 100644 index 9b17e1b6c1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyConnectorsAction extends CatalinaBaseAction { - - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsConnectorsForm oForm = (ItemsConnectorsForm) p_Form; - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Actions - try { - - // Search type realm - ArrayList alSelected = new ArrayList(); - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - alSelected.add(new ConnectorItem(new ObjectName(oForm.getSelectedItems()[i]), 0, serverName)); - } - m_Session.setAttribute("listConnectorsSelected", alSelected); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("Catalina Connectors Confirm"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsConfirmAction.java deleted file mode 100644 index 725ab3c337..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ApplyConnectorsConfirmAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyConnectorsConfirmAction extends CatalinaBaseAction { - - /** - * Signature for the removeConnector operation. - */ - private String removeConnectorTypes[] = { - "java.lang.String", // Object name - }; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ArrayList alSelected = (ArrayList) m_Session.getAttribute("listConnectorsSelected"); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // Actions - try { - String[] values = new String[1]; - String operation = "removeConnector"; - // Look up the Catalina MBeanFactory - ObjectName onFactory = CatalinaObjectName.catalinaFactory(); - // Remove connectors - for (int i = 0; i < alSelected.size(); i++) { - ConnectorItem o = (ConnectorItem) alSelected.get(i); - values[0] = o.getObjectName(); - JonasManagementRepr.invoke(onFactory, operation, values, removeConnectorTypes, serverName); - } - // refresh tree - refreshTree(p_Request); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionListCatalinaConnectors"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CatalinaBaseAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CatalinaBaseAction.java deleted file mode 100644 index d025997ac4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CatalinaBaseAction.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.JonasTreeBuilder; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - - -/** - * @author Michel-Ange ANTON - */ -abstract public class CatalinaBaseAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - /** - * Refresh the tree. - * - * @param p_Request Current instance - * @throws Exception - */ - protected void refreshTree(HttpServletRequest p_Request) - throws Exception { - // Refresh Security Tree - refreshConnectorsTree(p_Request); - // Refresh MBeans Tree - refreshMBeansTree(p_Request); - // Force display to refresh - m_WhereAreYou.setTreeToRefresh(true); - } - - /** - * Refresh the connectors branch tree. - * - * @param p_Request Current instance - * @throws Exception - */ - protected void refreshConnectorsTree(HttpServletRequest p_Request) - throws Exception { - // Get the current node name - String sCurrentNodeNameItem = getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "protocols" - + WhereAreYou.NODE_SEPARATOR + "connectors"; - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Get branch root node - TreeControlNode oBranchRootNode = oControl.findNode(sCurrentNodeNameItem); - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove old children - TreeControlNode[] aoNodes = oBranchRootNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - // Build node for the Service - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getCatalinaDetailConnectors(oBranchRootNode, m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorForm.java deleted file mode 100644 index f79458ff57..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorForm.java +++ /dev/null @@ -1,1106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.net.InetAddress; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the connector page. - * - * @author Michel-Ange ANTON - * @author Adriana Danes - * - update to Tomact 5.0 - * - update to Tomact 5.5 (04/2005) - */ - -public final class ConnectorForm extends ActionForm { - - // ----------------------------------------------------- Instance Variables - - /** - * The administrative action represented by this form. - */ - private String action = "edit"; - - /** - * The administrative sub-action state. - */ - private boolean save = false; - - /** - * The object name of the Connector this bean refers to. - */ - private String objectName = null; - - /** - * The name of the service this connector belongs to. - */ - private String serviceName = null; - /** - * The text for choosing the connector type at creation - */ - private String connectorType = null; - /** - * Generic max value used by the numberCheck method - */ - private int MAX_VALUE = Integer.MAX_VALUE; - - // Common Connector attributes - // --------------------------- - /** - * Used to enable/disable the TRACE HTTP method - */ - private boolean allowTrace = false; - /** - * The 'empty session path' flag for this Connector - */ - private boolean emptySessionPath = false; - /** - * The 'enable DNS lookups' flag for this Connector - */ - private boolean enableLookups = true; - /** - * Maximum size in bytes of a POST which will be handled by the servlet API provided features - */ - private String maxPostSizeText = "2097152"; - /** - * Coyote protocol handler in use - */ - private String protocol = "HTTP/1.1"; - /** - * The text for the proxyName. - */ - private String proxyName = null; - /** - * The text for the proxy Port Number. - */ - private String proxyPortText = "0"; - /** - * The text for the scheme. - */ - private String scheme = "http"; - /** - * Is this a secure (SSL) Connector? - */ - private boolean secure = false; - /** - * Character encoding used to decode the URI - */ - private String URIEncoding = null; - /** - * Should the body encoding be used for URI query parameters - */ - private boolean useBodyEncodingForURI = false; - /** - * Is generation of X-Powered-By response header enabled/disabled? - */ - private boolean xpoweredBy = false; - - // Additional attributes specific to org.apache.coyote.tomcat5.CoyoteConnector - // --------------------------------------------------------------------------- - /** - * The text for the accept Count. - */ - private String acceptCountText = "10"; - /** - * The IP address on which to bind. - */ - private String address = null; - /** - * The text for the TCP port the created socked awaits for incomming requests - */ - private String portText = null; - /** - * The text for the redirect port for non-SSL to SSL redirects - */ - private String redirectPortText = "-1"; - /** - * Should we use TCP no delay? - */ - private boolean tcpNoDelay = true; - - // Thread pool management - /** - * The text for the number of request processing threads that will be created - * when the connector is first started - */ - private String minSpareThreadsText = "4"; - /** - * The text for the maximum number of unused request processing threads - */ - private String maxSpareThreadsText = "50"; - /** - * The text for the max Threads. - */ - private String maxThreadsText = "200"; - - // The followings are not usefull for AJP / JK connectors - /** - * The text for the buffer size to be provided fo input streams. - */ - private String bufferSizeText = "2048"; - /** - * Compression value - */ - private String compression = "off"; - /** - * Linger value on the incoming connection - * Default value is -1 (socket linger is disabled). - */ - private String connectionLingerText = "-1"; - /** - * The text for the Timeout value on the incoming connection - */ - private String connTimeOutText = "60000"; - /** - * The text for the Timeout value on the incoming connection - * during request processing - */ - private String connectionUploadTimeoutText = null; - /** - * Should Tomcat ignore setting a timeout for uploads? - */ - private boolean disableUploadTimeout = false; - /** - * Text for Maximum size in bytes of the HTTP header - */ - private String maxHttpHeaderSizeText = "4096"; - /** - * Text for Maximum number of Keep-Alive requests to honor per connection - */ - private String maxKeepAliveRequestsText = "100"; - /** - * Thread pool strategy - */ - private String strategy = "If"; - /** - * Text for the priority of request processing threads - */ - private String threadPriorityText = "5"; - - // The following is specific to AJP connectors only - /** - * The text for the output buffer size. If -1 buffering is disabled. - */ - private String outputBufferSizeText = "-1"; - /** - * Should Tomcat perform all authentications? - */ - private boolean tomcatAuthentication = true; - - // The followings are dedicated to SSL support - /** - * The certificate encoding algorithm to be used - */ - private String algorithm = "SunX509"; - /** - * Whether client authentication is supported. - */ - private boolean clientAuth = false; - /** - * Pathname of the keystore file - */ - private String keystoreFile = ".keystore"; - /** - * The keyStore Password. - */ - private String keystorePass = "changeit"; - /** - * The keyStore type - */ - private String keystoreType = "JKS"; - /** - * SSL protocol - */ - private String sslProtocol = "TLS"; - /** - * list of encription ciphers - */ - private String ciphers = null; - - // ------------------------- - /** - * The text for the connectorName. - */ - private String connectorName = null; - - /** - * Represent boolean (true, false) values for enableLookups etc. - */ - private List booleanVals = null; - - /** - * Represent supported connector types. - */ - private List connectorTypeVals = null; - - // --------------------------------------------------------- Public Methods - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return the ActionErrors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - - ActionErrors oErrors = new ActionErrors(); - - // general - numberCheck(oErrors, "acceptCountText", acceptCountText, true, 0, MAX_VALUE); - numberCheck(oErrors, "connTimeOutText", connTimeOutText, true, 0, MAX_VALUE); - numberCheck(oErrors, "bufferSizeText", bufferSizeText, true, 0, MAX_VALUE); - numberCheck(oErrors, "outputBufferSizeText", outputBufferSizeText, true, -1, MAX_VALUE); - - // The IP address can also be null -- - // which means open the server socket on *all* IP addresses for this host - if (address.length() > 0) { - try { - InetAddress.getByName(address); - } catch (Exception e) { - oErrors.add("address", new ActionMessage("error.catalina.connector.address.invalid")); - } - } else { - address = null; - } - - // ports - numberCheck(oErrors, "portNumber", portText, true, 1, MAX_VALUE); - numberCheck(oErrors, "redirectPortText", redirectPortText, true, -1, MAX_VALUE); - - numberCheck(oErrors, "maxThreadsText", maxThreadsText, true, 1, MAX_VALUE); - numberCheck(oErrors, "maxSpareThreadsText", maxSpareThreadsText, true, 1, MAX_VALUE); - numberCheck(oErrors, "minSpareThreadsText", minSpareThreadsText, true, 1, MAX_VALUE); - try { - // if min is a valid integer, then check that max >= min - int min = Integer.parseInt(minSpareThreadsText); - numberCheck(oErrors, "maxThreadsText", maxThreadsText, true, min, MAX_VALUE); - } catch (Exception e) { - } - - // proxy - if ((proxyName != null) && (proxyName.length() > 0)) { - try { - /* - * The proxyName is the server name to be returned for calls to - * request.getServerName() - * This name is the value of the part before ":" in the Host header value, if any, - * or the resolved server name, or the server IP address. - InetAddress.getByName(proxyName); - */ - } catch (Exception e) { - oErrors.add("proxyName" - , new ActionMessage("error.catalina.connector.proxyName.invalid")); - } - } - - // supported only by Coyote HTTP and HTTPS connectors - if (!("AJP".equalsIgnoreCase(connectorType))) { - numberCheck(oErrors, "proxyPortText", proxyPortText, true, 0, MAX_VALUE); - } - - return oErrors; - } - - /** - * Helper method to check that it is a required number and - * is a valid integer within the given range. (min, max). - * - * @param field The field name in the form for which this error occured. - * @param numText The string representation of the number. - * @param rangeCheck Boolean value set to true of reange check should be performed. - * - * @param min The lower limit of the range - * @param max The upper limit of the range - * @param pErrors the ActionErrors - */ - public void numberCheck(ActionErrors pErrors, String field, String numText, boolean rangeCheck - , int min, int max) { - // Check for 'is required' - if ((numText == null) || (numText.length() < 1)) { - pErrors.add(field, new ActionMessage("error.catalina.connector." + field + ".required")); - } else { - - // check for 'must be a number' in the 'valid range' - try { - int num = Integer.parseInt(numText); - // perform range check only if required - if (rangeCheck) { - if ((num < min) || (num > max)) { - pErrors.add(field - , new ActionMessage("error.catalina.connector." + field + ".range")); - } - } - } catch (NumberFormatException e) { - pErrors.add(field, new ActionMessage("error.catalina.connector." + field + ".format")); - } - } - } - -// ------------------------------------------------------------- Properties methods - - /** - * Return the administrative action represented by this form. - * @return the administrative action - */ - public String getAction() { - return this.action; - } - - /** - * Set the administrative action represented by this form. - * @param action the action to set - */ - public void setAction(String action) { - this.action = action; - } - - /** - * Return the object name of the Connector this bean refers to. - * @return the object name of the Connector MBean - */ - public String getObjectName() { - return this.objectName; - } - - /** - * Set the object name of the Connector this bean refers to. - * @param objectName object name of the Connector MBean - */ - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - /** - * Return the object name of the service this connector belongs to. - * @return the object name of the service this connector belongs to - */ - public String getServiceName() { - return this.serviceName; - } - - /** - * Set the object name of the Service this connector belongs to. - * @param serviceName the object name of the service this connector belongs to - */ - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - - /** - * Return the Scheme. - * @return the scheme - */ - public String getScheme() { - return this.scheme; - } - /** - * Set the Scheme. - * @param scheme the scheme to set - */ - public void setScheme(String scheme) { - this.scheme = scheme; - } - - /** - * Return the Connector type. - * @return the Connector type - */ - public String getConnectorType() { - return this.connectorType; - } - - /** - * Set the Connector type. - * @param connectorType the Connector type to set - */ - public void setConnectorType(String connectorType) { - this.connectorType = connectorType; - } - - /** - * Return the acceptCountText. - * @return the acceptCount - */ - public String getAcceptCountText() { - return this.acceptCountText; - } - - /** - * Set the acceptCountText. - * @param acceptCountText the acceptCount text - */ - public void setAcceptCountText(String acceptCountText) { - this.acceptCountText = acceptCountText; - } - - /** - * Return the connTimeOutText. - * @return the connTimeOut - */ - public String getConnTimeOutText() { - return this.connTimeOutText; - } - - /** - * Set the connTimeOutText. - * @param connTimeOutText the connTimeOut text - */ - public void setConnTimeOutText(String connTimeOutText) { - this.connTimeOutText = connTimeOutText; - } - - /** - * Return the bufferSizeText. - * @return the bufferSize - */ - public String getBufferSizeText() { - return this.bufferSizeText; - } - - /** - * Set the bufferSizeText. - * @param bufferSizeText the bufferSize to set - */ - public void setBufferSizeText(String bufferSizeText) { - this.bufferSizeText = bufferSizeText; - } - - /** - * Return the address. - * @return the address - */ - public String getAddress() { - return this.address; - } - - /** - * Set the address. - * @param address the address to set - */ - public void setAddress(String address) { - if (address != null && address.startsWith("/")) { - address = address.substring(1); - } - this.address = address; - } - - /** - * Return the proxy Name. - * @return the proxy name - */ - public String getProxyName() { - return this.proxyName; - } - - /** - * Set the proxy Name. - * @param proxyName the proxy name to set - */ - public void setProxyName(String proxyName) { - this.proxyName = proxyName; - } - - /** - * Return the proxy Port NumberText. - * @return the proxy port number - */ - public String getProxyPortText() { - return this.proxyPortText; - } - - /** - * Set the proxy Port NumberText. - * @param proxyPortText the proxy port number to set - */ - public void setProxyPortText(String proxyPortText) { - this.proxyPortText = proxyPortText; - } - - /** - * Return the true/false value of client authentication. - * @return the value of client authentication - */ - public boolean isClientAuth() { - return this.clientAuth; - } - - /** - * Set whether client authentication is supported or not. - * @param clientAuthentication the client authentication to set or not - */ - public void setClientAuth(boolean clientAuthentication) { - this.clientAuth = clientAuthentication; - } - - /** - * @return the keyStore file name - */ - public String getKeystoreFile() { - return this.keystoreFile; - } - - /** - * @param keyStoreFileName the keyStore file name to set - */ - public void setKeystoreFile(String keyStoreFileName) { - this.keystoreFile = keyStoreFileName; - } - - /** - * @return the keyStore password - */ - public String getKeystorePass() { - return this.keystorePass; - } - - /** - * @param keyStorePassword the keyStore password to set - */ - public void setKeystorePass(String keyStorePassword) { - this.keystorePass = keyStorePassword; - } - - /** - * Return the Enable lookup Text. - * @return true if loookups enabled - */ - public boolean isEnableLookups() { - return this.enableLookups; - } - - /** - * Set the Enable Lookup Text. - * @param enableLookups Enable Lookup Text - */ - public void setEnableLookups(boolean enableLookups) { - this.enableLookups = enableLookups; - } - - /** - * Return the booleanVals. - */ - public List getBooleanVals() { - return this.booleanVals; - } - - /** - * Set the debugVals. - */ - public void setBooleanVals(List booleanVals) { - this.booleanVals = booleanVals; - } - - /** - * Return the min SpareThreads Text. - * @return minSpareThreads value - */ - public String getMinSpareThreadsText() { - return this.minSpareThreadsText; - } - - /** - * Set the minSpareThreads Text. - * @param minSpareThreadsText minSpareThreads value to set - */ - public void setMinSpareThreadsText(String minSpareThreadsText) { - this.minSpareThreadsText = minSpareThreadsText; - } - - /** - * Return the max SpareThreads Text. - * @return maxSpareThreads value - */ - public String getMaxSpareThreadsText() { - return this.maxSpareThreadsText; - } - - /** - * Set the Max SpareThreads Text. - * @param maxSpareThreadsText maxSpareThreads value to set - */ - public void setMaxSpareThreadsText(String maxSpareThreadsText) { - this.maxSpareThreadsText = maxSpareThreadsText; - } - - /** - * Return the max SpareThreads Text. - * @return maxThreads value - */ - public String getMaxThreadsText() { - return this.maxThreadsText; - } - - /** - * Set the Max SpareThreads Text. - * @param maxThreadsText maxSpareThreads value to set - */ - public void setMaxThreadsText(String maxThreadsText) { - this.maxThreadsText = maxThreadsText; - } - - /** - * Return the port text. - * @return the port number - */ - public String getPortText() { - return this.portText; - } - - /** - * Set the port Text. - * @param portText port to set - */ - public void setPortText(String portText) { - this.portText = portText; - } - - /** - * Return the port. - * @return the redirect port number - */ - public String getRedirectPortText() { - return this.redirectPortText; - } - - /** - * Set the Redirect Port Text. - * @param redirectPortText the redirect port to set - */ - public void setRedirectPortText(String redirectPortText) { - this.redirectPortText = redirectPortText; - } - - /** - * @return the connector name - */ - public String getConnectorName() { - return this.connectorName; - } - - /** - * @param connectorName connector name to set - */ - public void setConnectorName(String connectorName) { - this.connectorName = connectorName; - } - - /** - * Return the connectorTypeVals. - * @return the connector types - */ - public List getConnectorTypeVals() { - return this.connectorTypeVals; - } - - /** - * Set the connectorTypeVals. - * @param connectorTypeVals the connector types - */ - public void setConnectorTypeVals(List connectorTypeVals) { - this.connectorTypeVals = connectorTypeVals; - } - /** - * @return the labels - */ - public String getLabel() { - StringBuffer sb = new StringBuffer(getPortText()); - if (getAddress() != null) { - sb.append(" ("); - sb.append(getAddress()); - sb.append(")"); - } - return sb.toString(); - } - - /** - * - * @return true if save action - */ - public boolean isSave() { - return save; - } - - /** - * - * @param save set the save action - */ - public void setSave(boolean save) { - this.save = save; - } - - /** - * @return Returns the allowTrace. - */ - public boolean isAllowTrace() { - return allowTrace; - } - /** - * @param allowTrace The allowTrace to set. - */ - public void setAllowTrace(boolean allowTrace) { - this.allowTrace = allowTrace; - } - - /** - * @return Returns the emptySessionPath. - */ - public boolean isEmptySessionPath() { - return emptySessionPath; - } - /** - * @param emptySessionPath The emptySessionPath to set. - */ - public void setEmptySessionPath(boolean emptySessionPath) { - this.emptySessionPath = emptySessionPath; - } - - /** - * @return Returns the maxPostSize. - */ - public String getMaxPostSizeText() { - return maxPostSizeText; - } - - - /** - * @param maxPostSize The maxPostSize to set. - */ - public void setMaxPostSizeText(String maxPostSizeText) { - this.maxPostSizeText = maxPostSizeText; - } - - /** - * @return Returns the protocol. - */ - public String getProtocol() { - return protocol; - } - - /** - * @return Returns the secure. - */ - public boolean isSecure() { - return secure; - } - - - /** - * @param secure The secure to set. - */ - public void setSecure(boolean secure) { - this.secure = secure; - } - - /** - * @return Returns the uRIEncoding. - */ - public String getURIEncoding() { - return URIEncoding; - } - - - /** - * @param encoding The uRIEncoding to set. - */ - public void setURIEncoding(String encoding) { - URIEncoding = encoding; - } - - /** - * @return Returns the useBodyEncodingForURI. - */ - public boolean isUseBodyEncodingForURI() { - return useBodyEncodingForURI; - } - - - /** - * @param useBodyEncodingForURI The useBodyEncodingForURI to set. - */ - public void setUseBodyEncodingForURI(boolean useBodyEncodingForURI) { - this.useBodyEncodingForURI = useBodyEncodingForURI; - } - - /** - * @return Returns the xpoweredBy. - */ - public boolean isXpoweredBy() { - return xpoweredBy; - } - - - /** - * @param xpoweredBy The xpoweredBy to set. - */ - public void setXpoweredBy(boolean xpoweredBy) { - this.xpoweredBy = xpoweredBy; - } - - /** - * @return Returns the compression. - */ - public String getCompression() { - return compression; - } - - - /** - * @param compression The compression to set. - */ - public void setCompression(String compression) { - this.compression = compression; - } - - /** - * @return Returns the connectionLingerText. - */ - public String getConnectionLingerText() { - return connectionLingerText; - } - - - /** - * @param connectionLingerText The connectionLingerText to set. - */ - public void setConnectionLingerText(String connectionLingerText) { - this.connectionLingerText = connectionLingerText; - } - - /** - * @return Returns the connectionUploadTimeoutText. - */ - public String getConnectionUploadTimeoutText() { - return connectionUploadTimeoutText; - } - - - /** - * @param connectionUploadTimeoutText The connectionUploadTimeoutText to set. - */ - public void setConnectionUploadTimeoutText(String connectionUploadTimeoutText) { - this.connectionUploadTimeoutText = connectionUploadTimeoutText; - } - - /** - * @return Returns the disableUploadTimeout. - */ - public boolean isDisableUploadTimeout() { - return disableUploadTimeout; - } - - - /** - * @param disableUploadTimeout The disableUploadTimeout to set. - */ - public void setDisableUploadTimeout(boolean disableUploadTimeout) { - this.disableUploadTimeout = disableUploadTimeout; - } - - /** - * @return Returns the maxHttpHeaderSize. - */ - public String getMaxHttpHeaderSizeText() { - return maxHttpHeaderSizeText; - } - - - /** - * @param maxHttpHeaderSize The maxHttpHeaderSize to set. - */ - public void setMaxHttpHeaderSizeText(String maxHttpHeaderSize) { - this.maxHttpHeaderSizeText = maxHttpHeaderSize; - } - - /** - * @return Returns the maxKeepAliveRequests. - */ - public String getMaxKeepAliveRequestsText() { - return maxKeepAliveRequestsText; - } - - - /** - * @param maxKeepAliveRequests The maxKeepAliveRequests to set. - */ - public void setMaxKeepAliveRequestsText(String maxKeepAliveRequests) { - this.maxKeepAliveRequestsText = maxKeepAliveRequests; - } - - /** - * @return Returns the strategy. - */ - public String getStrategy() { - return strategy; - } - - - /** - * @param strategy The strategy to set. - */ - public void setStrategy(String strategy) { - this.strategy = strategy; - } - - /** - * @return Returns the threadPriority. - */ - public String getThreadPriorityText() { - return threadPriorityText; - } - - - /** - * @param threadPriority The threadPriority to set. - */ - public void setThreadPriorityText(String threadPriority) { - this.threadPriorityText = threadPriority; - } - - /** - * @return Returns the tomcatAuthentication. - */ - public boolean isTomcatAuthentication() { - return tomcatAuthentication; - } - - - /** - * @param tomcatAuthentication The tomcatAuthentication to set. - */ - public void setTomcatAuthentication(boolean tomcatAuthentication) { - this.tomcatAuthentication = tomcatAuthentication; - } - - /** - * @return Returns the algorithm. - */ - public String getAlgorithm() { - return algorithm; - } - - - /** - * @param algorithm The algorithm to set. - */ - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - /** - * @return Returns the keystoreType. - */ - public String getKeystoreType() { - return keystoreType; - } - - - /** - * @param keystoreType The keystoreType to set. - */ - public void setKeystoreType(String keystoreType) { - this.keystoreType = keystoreType; - } - - /** - * @return Returns the sslProtocol. - */ - public String getSslProtocol() { - return sslProtocol; - } - - - /** - * @param sslProtocol The sslProtocol to set. - */ - public void setSslProtocol(String sslProtocol) { - this.sslProtocol = sslProtocol; - } - - /** - * @return Returns the ciphers. - */ - public String getCiphers() { - return ciphers; - } - - - /** - * @param ciphers The ciphers to set. - */ - public void setCiphers(String ciphers) { - this.ciphers = ciphers; - } - - /** - * @param protocol The protocol to set. - */ - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - /** - * @return Returns the tcpNoDelay. - */ - public boolean isTcpNoDelay() { - return tcpNoDelay; - } - - - /** - * @param tcpNoDelay The tcpNoDelay to set. - */ - public void setTcpNoDelay(boolean tcpNoDelay) { - this.tcpNoDelay = tcpNoDelay; - } - - /** - * @return Returns the outputBufferSizeText. - */ - public String getOutputBufferSizeText() { - return outputBufferSizeText; - } - - /** - * @param outputBufferSizeText The outputBufferSizeText to set. - */ - public void setOutputBufferSizeText(String outputBufferSizeText) { - this.outputBufferSizeText = outputBufferSizeText; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItem.java deleted file mode 100644 index 8a4501996e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItem.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.Serializable; -import java.net.InetAddress; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - - -/** - * @author Michel-Ange ANTON - * @author danesa - */ -public class ConnectorItem implements Serializable { - -// --------------------------------------------------------- Properties Variables - - private String objectName = null; - private String port = null; - private String address = null; - private String scheme = null; - private String connectorType = null; - private boolean applicationServerPort = false; - -// --------------------------------------------------------- Constructors - - public ConnectorItem() { - } - - public ConnectorItem(ObjectName p_OnConnector, int p_ApplicationServerPort, String serverName) { - setObjectName(p_OnConnector.toString()); - setPort(p_OnConnector.getKeyProperty("port")); - applicationServerPort = port.equals(String.valueOf(p_ApplicationServerPort)); - InetAddress address = (InetAddress) JonasManagementRepr.getAttribute(p_OnConnector, "address", serverName); - if (address != null) { - setAddress(address.toString()); - } else { - setAddress(null); - } - setScheme((String) JonasManagementRepr.getAttribute(p_OnConnector, "scheme", serverName)); - - String sHandlerClassName = (String) JonasManagementRepr.getAttribute(p_OnConnector - , "protocolHandlerClassName", serverName); - int period = sHandlerClassName.lastIndexOf('.'); - String sHandlerType = sHandlerClassName.substring(period + 1); - setConnectorType("HTTPS"); - if ("JkCoyoteHandler".equalsIgnoreCase(sHandlerType)) { - setConnectorType("AJP"); - } else if (("Http11Protocol".equalsIgnoreCase(sHandlerType)) - && ("http".equalsIgnoreCase(getScheme()))) { - setConnectorType("HTTP"); - } - } - -// --------------------------------------------------------- Properties Methods - - public String getPort() { - return port; - } - - public void setPort(String port) { - this.port = port; - } - - public String getAddress() { - if (address != null && address.startsWith("/")) { - address = address.substring(1); - } - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - public String getScheme() { - return scheme; - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - public String getObjectName() { - return objectName; - } - - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - public String getConnectorType() { - return connectorType; - } - - public void setConnectorType(String connectorType) { - this.connectorType = connectorType; - } - - public boolean isApplicationServerPort() { - return applicationServerPort; - } - - public String getLabel() { - StringBuffer sb = new StringBuffer(getPort()); - if (getAddress() != null) { - sb.append(" ("); - sb.append(getAddress()); - sb.append(")"); - } - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItemByPort.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItemByPort.java deleted file mode 100644 index 96bdb82b7e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ConnectorItemByPort.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class ConnectorItemByPort implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - ConnectorItem oConnector1 = (ConnectorItem) p_O1; - ConnectorItem oConnector2 = (ConnectorItem) p_O2; - int iRet = 0; - try { - int i1 = Integer.parseInt(oConnector1.getPort()); - int i2 = Integer.parseInt(oConnector2.getPort()); - if (i1 > i2) { - iRet = 1; - } - else if (i1 < i2) { - iRet = -1; - } - else if ((oConnector1.getAddress() != null) && (oConnector2.getAddress() != null)) { - iRet = oConnector1.getAddress().compareToIgnoreCase(oConnector2.getAddress()); - } - else if (oConnector1.getAddress() == null) { - iRet = -1; - } - else { - iRet = 1; - } - } - catch (NumberFormatException e) { - // None - } - - return iRet; - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof ConnectorItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CreateConnectorAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CreateConnectorAction.java deleted file mode 100644 index 43f60d649e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/CreateConnectorAction.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class CreateConnectorAction extends CatalinaBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Get the type of connector to create - String sType = p_Request.getParameter("type"); - if (sType == null) { - addGlobalError(new Exception("The parameter 'type' is null !!!!!")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Fill in the form values for display and editing - ConnectorForm oForm = new ConnectorForm(); - m_Session.setAttribute("catalinaConnectorForm", oForm); - oForm.reset(p_Mapping, p_Request); - oForm.setAction("create"); - oForm.setBooleanVals(Jlists.getBooleanValues()); - - if ("http".equalsIgnoreCase(sType) == true) { - oForm.setConnectorType("HTTP"); - oForm.setScheme("http"); - } - else if ("https".equalsIgnoreCase(sType) == true) { - oForm.setConnectorType("HTTPS"); - oForm.setScheme("https"); - } - else if ("ajp".equalsIgnoreCase(sType) == true) { - oForm.setConnectorType("AJP"); - oForm.setScheme("http"); - } - else { - addGlobalError(new Exception("The parameter 'type' is unknown")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page - return (p_Mapping.findForward("Catalina Connector")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/EditConnectorAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/EditConnectorAction.java deleted file mode 100644 index cfa2eb4f0d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/EditConnectorAction.java +++ /dev/null @@ -1,235 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; -import java.net.InetAddress; -import java.util.Iterator; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - * - update to Tomact 5.0 - * - update to Tomact 5.5 (04/2005) - */ -public class EditConnectorAction extends CatalinaBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Current JOnAS server name - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Current Tomcat Connector MBean (to be used to create form) - ObjectName oObjectName = null; - - // Selected Tomcat Connector MBean - ObjectName selectObjectName = null; - try { - selectObjectName = new ObjectName(pRequest.getParameter("select")); - } catch (Exception e) { - m_Errors.add("select", new ActionMessage("error.catalina.connector.select.bad" - , pRequest.getParameter("select"))); - addGlobalError(e); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - String selectedPort = selectObjectName.getKeyProperty("port"); - String selectedAddress = selectObjectName.getKeyProperty("address"); - // Check InetAddress corectness (get round Tomcat bug) - if (selectedAddress != null) { - boolean fromTreeBuilder = false; - if (selectedAddress.startsWith("/")) { - // We come fropm the tree builder - selectedAddress = selectedAddress.substring(1); - fromTreeBuilder = true; - } - ObjectName o; - try { - o = ObjectName.getInstance(m_WhereAreYou.getCurrentDomainName() + ":type=Connector,port=" + selectedPort + ",*"); - } catch (MalformedObjectNameException e) { - addGlobalError(e); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - Iterator it = JonasManagementRepr.queryNames(o, serverName).iterator(); - while (it.hasNext()) { - ObjectName on = (ObjectName) it.next(); - if (on.getKeyProperty("port").equals(selectedPort)) { - String foundAddress = on.getKeyProperty("address"); - if (foundAddress != null) { - if (fromTreeBuilder) { - // starting / in selected address was eliminated - if (foundAddress.endsWith(selectedAddress)) { - oObjectName = on; - break; - } - } else { - // selected address starts with %2F - if (foundAddress.equals(selectedAddress)) { - // now we can eliminate the %2F - if (selectedAddress.startsWith("%2F")) { - selectedAddress = selectedAddress.substring(3); - } - oObjectName = on; - break; - } - - } - } - } - } - // be sure oObjectName not null - if (oObjectName == null) { - oObjectName = selectObjectName; - } - } else { - // use selected ObjectName directly - oObjectName = selectObjectName; - } - - // Fill in the form values for display and editing - ConnectorForm oForm = new ConnectorForm(); - m_Session.setAttribute("catalinaConnectorForm", oForm); - oForm.setAction("edit"); - oForm.setObjectName(oObjectName.toString()); - oForm.setBooleanVals(Jlists.getBooleanValues()); - // Populate - try { - // Determine connector type - String sHandlerClassName = getStringAttribute(oObjectName, "protocolHandlerClassName"); - int period = sHandlerClassName.lastIndexOf('.'); - String sHandlerType = sHandlerClassName.substring(period + 1); - if ("JkCoyoteHandler".equalsIgnoreCase(sHandlerType)) { - oForm.setConnectorType("AJP"); - } else if ("Http11Protocol".equalsIgnoreCase(sHandlerType)) { - if ("http".equalsIgnoreCase(oForm.getScheme())) { - oForm.setConnectorType("HTTP"); - } else if ("https".equalsIgnoreCase(oForm.getScheme())) { - oForm.setConnectorType("HTTPS"); - } - } else { - oForm.setConnectorType("????"); - } - // Common properties - oForm.setAllowTrace(getBooleanAttribute(oObjectName, "allowTrace")); - oForm.setEmptySessionPath(getBooleanAttribute(oObjectName, "emptySessionPath")); - oForm.setEnableLookups(getBooleanAttribute(oObjectName, "enableLookups")); - oForm.setMaxPostSizeText(toStringIntegerAttribute(oObjectName, "maxPostSize")); - oForm.setProtocol(getStringAttribute(oObjectName, "protocol")); - oForm.setProxyName(getStringAttribute(oObjectName, "proxyName")); - oForm.setProxyPortText(toStringIntegerAttribute(oObjectName, "proxyPort")); - oForm.setRedirectPortText(toStringIntegerAttribute(oObjectName, "redirectPort")); - oForm.setScheme(getStringAttribute(oObjectName, "scheme")); - oForm.setSecure(getBooleanAttribute(oObjectName, "secure")); - oForm.setURIEncoding(getStringAttribute(oObjectName, "URIEncoding")); - oForm.setUseBodyEncodingForURI(getBooleanAttribute(oObjectName, "useBodyEncodingForURI")); - oForm.setXpoweredBy(getBooleanAttribute(oObjectName, "xpoweredBy")); - // Coyote Connector properties - oForm.setAcceptCountText(toStringIntegerAttribute(oObjectName, "acceptCount")); - - InetAddress inetAddress = (InetAddress) JonasManagementRepr.getAttribute(oObjectName, "address", serverName); - if (inetAddress != null) { - oForm.setAddress(inetAddress.toString()); - } - oForm.setPortText(toStringIntegerAttribute(oObjectName, "port")); - oForm.setRedirectPortText(toStringIntegerAttribute(oObjectName, "redirectPort")); - oForm.setTcpNoDelay(getBooleanAttribute(oObjectName, "tcpNoDelay")); - // ------ Threads management - oForm.setMaxThreadsText(toStringIntegerAttribute(oObjectName, "maxThreads")); - oForm.setMinSpareThreadsText(getStringAttribute(oObjectName, "minSpareThreads")); - oForm.setMaxSpareThreadsText(getStringAttribute(oObjectName, "maxSpareThreads")); - // In Tomcat 5.5.17 these attributes hade integer type - //oForm.setMinSpareThreadsText(toStringIntegerAttribute(oObjectName, "minSpareThreads")); - //oForm.setMaxSpareThreadsText(toStringIntegerAttribute(oObjectName, "maxSpareThreads")); - - // Supported by HTTP and HTTPS only - if (!("AJP".equalsIgnoreCase(oForm.getConnectorType()))) { - oForm.setBufferSizeText(toStringIntegerAttribute(oObjectName, "bufferSize")); - oForm.setCompression(getStringAttribute(oObjectName, "compression")); - oForm.setConnectionLingerText(toStringIntegerAttribute(oObjectName, "connectionLingerText")); - oForm.setConnTimeOutText(toStringIntegerAttribute(oObjectName, "connectionTimeout")); - oForm.setConnectionUploadTimeoutText(toStringIntegerAttribute(oObjectName, "connectionUploadTimeout")); - oForm.setDisableUploadTimeout(getBooleanAttribute(oObjectName, "disableUploadTimeout")); - oForm.setMaxHttpHeaderSizeText(toStringIntegerAttribute(oObjectName, "maxHttpHeaderSize")); - oForm.setMaxKeepAliveRequestsText(toStringIntegerAttribute(oObjectName, "maxKeppAliveRequests")); - oForm.setStrategy(getStringAttribute(oObjectName, "strategy")); - oForm.setThreadPriorityText(toStringIntegerAttribute(oObjectName, "threadPriority")); - } - // Supported by AJP only - if (oForm.getConnectorType() == "AJP") { - oForm.setOutputBufferSizeText(toStringIntegerAttribute(oObjectName, "bufferSize")); - oForm.setTomcatAuthentication(getBooleanAttribute(oObjectName, "tomcatAuthentication")); - } - // SSL Support - if ("HTTPS".equalsIgnoreCase(oForm.getConnectorType())) { - // These are set only for SSL connectors. - oForm.setAlgorithm(getStringAttribute(oObjectName, "algorithm")); - oForm.setClientAuth(getBooleanAttribute(oObjectName, "clientAuth")); - oForm.setKeystoreFile(getStringAttribute(oObjectName, "keystoreFile")); - oForm.setKeystorePass(getStringAttribute(oObjectName, "keystorePass")); - oForm.setKeystoreType(getStringAttribute(oObjectName, "keystoreType")); - oForm.setSslProtocol(getStringAttribute(oObjectName, "sslProtocol")); - oForm.setCiphers(getStringAttribute(oObjectName, "ciphers")); - } - - // Force the node selected in tree - String nodeName = getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "protocols" + WhereAreYou.NODE_SEPARATOR - + "connectors" + WhereAreYou.NODE_SEPARATOR - + m_WhereAreYou.getCurrentCatalinaDomainName() + WhereAreYou.NODE_SEPARATOR - + oForm.getPortText(); - if (selectedAddress != null) { - nodeName = nodeName + selectedAddress; - } - m_WhereAreYou.selectNameNode(nodeName, true); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the connector display page - return (pMapping.findForward("Catalina Connector")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ItemsConnectorsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ItemsConnectorsForm.java deleted file mode 100644 index b3114c8ebc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ItemsConnectorsForm.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ItemsConnectorsForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] selectedItems = new String[0]; - private ArrayList selectedConnectorItem = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public ArrayList getSelectedConnectorItem() { - return selectedConnectorItem; - } - - public void setSelectedConnectorItem(ArrayList selectedConnectorItem) { - this.selectedConnectorItem = selectedConnectorItem; - } - -// --------------------------------------------------------- Properties Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ListConnectorsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ListConnectorsAction.java deleted file mode 100644 index 5be8189bf4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/ListConnectorsAction.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ListConnectorsAction extends CatalinaBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "protocols" + WhereAreYou.NODE_SEPARATOR + "connectors", true); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - try { - // Get the list of connectors - ArrayList al = new ArrayList(); - Iterator it = JonasAdminJmx.getListMBeanName(CatalinaObjectName.catalinaConnectors( - m_WhereAreYou.getCurrentCatalinaDomainName()), serverName).iterator(); - while (it.hasNext()) { - al.add(new ConnectorItem(new ObjectName(it.next().toString()) - , m_WhereAreYou.getApplicationServerPort(), serverName)); - } - // Sort - Collections.sort(al, new ConnectorItemByPort()); - // Provide - p_Request.setAttribute("listConnectors", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Catalina Connectors")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/SaveCatalinaAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/SaveCatalinaAction.java deleted file mode 100644 index 2ba1b2c785..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/catalina/SaveCatalinaAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.catalina; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class SaveCatalinaAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // Save catalina configuration in server.xml file - try { - ObjectName on = CatalinaObjectName.catalinaServer(); - JonasManagementRepr.invoke(on, "storeConfig", null, null, serverName); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Get the forward parameter - String sForward = p_Request.getParameter("forward"); - if (sForward == null) { - sForward = "ActionEditServletServer"; - } - - // Forward to the action - return (p_Mapping.findForward(sForward)); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ApplyJonasServersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ApplyJonasServersAction.java deleted file mode 100644 index b77373688e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ApplyJonasServersAction.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $$Id$$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.clusterd.ClusterDaemonProxy; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.domain.ItemsServersForm; - -/** - * Implement actions for servers management in the domain - * @author Adriana Danes - */ -/** - * @author eyindanga - */ -public class ApplyJonasServersAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - /** - * @param p_Mapping - * @param p_Form - * @param p_Request - * @param p_Response - * @return - * @throws IOException - * @throws ServletException - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - - // Form used - try { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getAdminJonasServerName(); - ItemsServersForm oForm = (ItemsServersForm) p_Form; - String action = oForm.getAction(); - // get the selected items - String[] selectedItems = oForm.getSelectedItems(); - // Save config in clusted.xml ? default = no - String saveIt = "false"; - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - String curSrvName = null; - // get the current clusterd proxy - String cdName = m_WhereAreYou.getCurrentClusterDaemonName(); - ClusterDaemonProxy cdProxy = dm.findClusterDaemonProxy(cdName); - if (cdProxy == null) { - // this cluster daemon proxy is not yet registered - registerClusterdProxy(cdName, dm); - } - ServerItem srvItem = null; - if ("add".equals(action)) { - ArrayList srvList = (ArrayList) m_Session.getAttribute("freeServersList"); - // Add selected servers to the current cluster daemon - for (int i = 0; i < selectedItems.length; i++) { - // save config in clusted.xml - curSrvName = selectedItems[i]; - ServerProxy srvProxy = dm.findServerProxy(curSrvName); - srvProxy.setClusterdaemon(cdProxy); - // get The server item associated to this server name - srvItem = findSrvItem(curSrvName, srvList); - // check if the server has been removed from current server - if (m_WhereAreYou.isSrvRemovedFromClusterd(cdName, curSrvName)) { - // Remove the server from removed servers list - m_WhereAreYou.rmvFromClusterdRemovedList(cdName, curSrvName); - } - cdProxy.addServer(srvItem.getName(), srvItem.getDescription(), srvItem.getJonasRoot(), - srvItem.getJonasBase(), srvItem.getJavaHome(), srvItem.getXprem(), - srvItem.getAutoBoot(), "", saveIt); - } - - } else if ("remove".equals(action)) { - // remove servers without saving - for (int i = 0; i < selectedItems.length; i++) { - ServerProxy srvProxy = dm.findServerProxy(selectedItems[i]); - - curSrvName = selectedItems[i]; - // get The server item associated to this server name - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, cdName); - m_WhereAreYou.addRemovedServer(cdName, curSrvName); - String[] opParams = {curSrvName, saveIt}; - String[] opSignature = {"java.lang.String", "java.lang.String"}; - // remove the server from clusterd control - JonasManagementRepr.invoke(on, "removeServer", opParams, opSignature, serverName); - dm.findServerProxy(selectedItems[i]).setClusterdaemon(null); - - } - - } else if ("removeAndSave".equals(action)) { - // remove servers without saving - for (int i = 0; i < selectedItems.length; i++) { - ServerProxy srvProxy = dm.findServerProxy(selectedItems[i]); - // save the configuration - saveIt = "true"; - curSrvName = selectedItems[i]; - // get The server item associated to this server name - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, cdName); - m_WhereAreYou.addRemovedServer(cdName, curSrvName); - String[] opParams = {curSrvName, saveIt}; - String[] opSignature = {"java.lang.String", "java.lang.String"}; - // remove the server from clusterd control - JonasManagementRepr.invoke(on, "removeServer", opParams, opSignature, serverName); - dm.findServerProxy(selectedItems[i]).setClusterdaemon(null); - - } - } else if ("addAndSave".equals(action)) { - // add the server and save it - ArrayList srvList = (ArrayList) m_Session.getAttribute("freeServersList"); - saveIt = "true"; - // Add selected servers to the current cluster daemon - for (int i = 0; i < selectedItems.length; i++) { - // save config in clusted.xml - curSrvName = selectedItems[i]; - ServerProxy srvProxy = dm.findServerProxy(curSrvName); - srvProxy.setClusterdaemon(cdProxy); - // get The server item associated to this server name - srvItem = findSrvItem(curSrvName, srvList); - cdProxy.addServer(srvItem.getName(), srvItem.getDescription(), srvItem.getJonasRoot(), - srvItem.getJonasBase(), srvItem.getJavaHome(), srvItem.getXprem(), - srvItem.getAutoBoot(), "", saveIt); - } - - } else if ("removeFromView".equals(action)) { - ArrayList al = (ArrayList) m_Session.getAttribute("freeServersList"); - for (int i = 0; i < selectedItems.length; i++) { - ServerProxy srvProxy = dm.findServerProxy(selectedItems[i]); - al = removeServerItem(al, srvProxy.getName()); - } - p_Request.setAttribute("freeServersList", al); - p_Request.setAttribute("clusterdName", cdProxy.getName()); - return (p_Mapping.findForward("AddServerToClusterDaemon")); - } - - // we're not in monitoring mode - p_Request.setAttribute("isNotMonitoring", "true"); - if (p_Request.getAttribute("node") == null) { - p_Request.setAttribute("node", cdName); - } - oForm.setAction(""); - // forward to jsp that displays clusterd infos - return p_Mapping.findForward("ActionDaemonProxyClusterInfoFromDomain"); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } - - /** - * Register a cluster daemon proxy in the domain monitor - * @param cdName cluster daemon's name - * @param dm the domain monitor instance - * @throws MalformedObjectNameException ObjectName exception - */ - - private void registerClusterdProxy(final String cdName, final DomainMonitor dm) throws MalformedObjectNameException { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String srvName = m_WhereAreYou.getAdminJonasServerName(); - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, cdName); - Collection urls = (Collection) JonasManagementRepr.getAttribute(on, "JmxUrl", srvName); - dm.registerClusterDaemonProxy(cdName, srvName, urls); - - } - - /** - * Find a server item associated to the given server name - * @param itemName Find associated serverItem of this name - * @param itemSrvList the serverItems list that has been retrieved from - * session - * @return the associated serverItem - */ - - private ServerItem findSrvItem(final String itemName, final ArrayList itemSrvList) { - int i = 0; - boolean stop = false; - ServerItem srv = null; - while (!stop && i < itemSrvList.size()) { - srv = (ServerItem) itemSrvList.get(i); - stop = srv.getName().equals(itemName.toString()); - i++; - - } - // we should always find the item - return srv; - } - - /** - * Removes given server from current free servers list - * @param freeServersList free servers - * @param srvName the server to remove - * @return - */ - - private ArrayList removeServerItem(final ArrayList freeServersList, final String srvName) { - ArrayList ret = new ArrayList(); - for (int i = 0; i < freeServersList.size(); i++) { - - ServerItem srv = (ServerItem) freeServersList.get(i); - if (srv.getName().equals(srvName)) { - freeServersList.remove(i); - } else { - ret.add(freeServersList.get(i)); - } - - } - return ret; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterDaemonItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterDaemonItem.java deleted file mode 100644 index d6b7a5f98b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterDaemonItem.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.mbean.ObjectNameItem; - - -public class ClusterDaemonItem extends ObjectNameItem { - /** - * - */ - private static final long serialVersionUID = 0L; - /** - * server state - */ - private String state = null; - /** - * url used to connect on JMX remote server - */ - private String url = null; - /** - * the cd name - */ - private String name = null; - - - public ClusterDaemonItem(ObjectName pObjectName, String pState) { - super(pObjectName); - this.state = pState; - } - - /** - * @return Returns the url. - */ - public String getUrl() { - return url; - } - - /** - * @param url The url to set. - */ - public void setUrl(String url) { - this.url = url; - } - - /** - * @return Returns the state. - */ - public String getState() { - return state; - } - - /** - * @param state The state to set. - */ - public void setState(String state) { - this.state = state; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterdServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterdServerForm.java deleted file mode 100644 index d0e33476db..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ClusterdServerForm.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import org.apache.struts.action.ActionForm; - -/** - * @author eyindanga - * - */ -public class ClusterdServerForm extends ActionForm { - - - /** - * - */ - private static final long serialVersionUID = 5520164966947545047L; - String name = null; - String state = null; - String javaHome = null; - String jonasRoot = null; - String jonasBase = null; - String description = null; - String xprem = null; - String autoBoot = null; - //current cluster daemon name - String cdName = null; - - - public String getJavaHome() { - return javaHome; - } - public void setJavaHome(final String javaHome) { - this.javaHome = javaHome; - } - public String getJonasBase() { - return jonasBase; - } - public void setJonasBase(final String jonasBase) { - this.jonasBase = jonasBase; - } - public String getJonasRoot() { - return jonasRoot; - } - public void setJonasRoot(final String jonasRoot) { - this.jonasRoot = jonasRoot; - } - public String getName() { - return name; - } - public void setName(final String name) { - this.name = name; - } - public String getState() { - return state; - } - public void setState(final String state) { - this.state = state; - } - public String getAutoBoot() { - return autoBoot; - } - public void setAutoBoot(final String autoBoot) { - this.autoBoot = autoBoot; - } - public String getDescription() { - return description; - } - public void setDescription(final String description) { - this.description = description; - } - /** - * - * @return extra parameter - */ - public String getXprem() { - return xprem; - } - /** - * set extra parameter - * @param xprem - */ - public void setXprem(final String xprem) { - this.xprem = xprem; - } - /** - * @return the cdName - */ - public String getCdName() { - return cdName; - } - /** - * @param cdName the cdName to set - */ - public void setCdName(final String cdName) { - this.cdName = cdName; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterAction.java deleted file mode 100644 index d91767e25e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterAction.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $$Id$$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -import org.ow2.jonas.webapp.jonasadmin.monitoring.DaemonProxyClusterForm; - -public class DaemonProxyClusterAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - String isNotMonitoringStr = null; - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getAdminJonasServerName(); - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) p_Form; - String name = null; - try { - - // monitoring mode = false - isNotMonitoringStr = "true"; - name = (String) p_Request.getAttribute("node"); - if (name == null) { - // that means the request has been forwarded by another - // and the current cluster daemon name attribute has already - // been set - name = m_WhereAreYou.getCurrentClusterDaemonName(); - } - if (name == null) { - // requested by using the parameter attribute - name = p_Request.getParameter("node"); - } - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, name); - m_WhereAreYou.setCurrentClusterDaemon(on); - m_WhereAreYou.setCurrentClusterDaemonName(name); - oForm.setName((String) JonasManagementRepr.getAttribute(on, "Name", serverName)); - oForm.setState((String) JonasManagementRepr.getAttribute(on, "State", serverName)); - oForm.setConServer((ArrayList) JonasManagementRepr.getAttribute(on, "ControlledServersNames", serverName)); - ArrayList srvList = oForm.getConServer(); - - if (srvList == null) { - throw new Throwable("Can't get management information for cluster daemon " + name + ". Please check the domain configuration."); - } - // getting dynamic remote host monitoring infos - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - // the array list to contain the server list - ArrayList al = new ArrayList(); - // are all the servers already started ? - boolean allStarted = true; - // let know if no server is running - boolean noneStarted = true; - // Get requested cluster daemon administered Jonas servers... - for (Iterator it = dm.getServerList().iterator(); it.hasNext();) { - ServerProxy proxy = (ServerProxy) it.next(); - if (srvList.contains(proxy.getName())) { - // if the server is in the clusterd.xml but not in the - // domain.xml - if (m_WhereAreYou.isSrvRemovedFromClusterd(name, proxy.getName())) { - // the server is no more affected to current clusterd - proxy.setClusterdaemon(null); - - } else { - // the server is in clusterd.xml - if (proxy.getClusterDaemonName() == null) { - // the server is not in domain.xml file - proxy.setClusterdaemon(dm.findClusterDaemonProxy(name)); - } - - } - - } - if (proxy.getClusterDaemonName() != null) { - if (proxy.getClusterDaemonName().equals(name)) { - ObjectName myOn = ObjectName.getInstance(proxy.getJ2eeObjectName()); - al.add(new ServerItem(myOn, proxy.getState(), proxy.getClusterDaemonName(), srvList.contains(proxy - .getName()))); - // no server is started we want to disable the startAll - // operation in the jsp - if (noneStarted) { - // None is stared if none is RUNNING nor STANDBY. - noneStarted = !"STANDBY".equals(proxy.getState()) && !"RUNNING".equals(proxy.getState()); - } - // all server are started if alrr server are running or - // STANDBY. - allStarted = (allStarted && (proxy.getState().equals("RUNNING") || "STANDBY".equals(proxy.getState()))); - } - } - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - // if a problem has happened while getting jmxUrl then : - // forward the response to with default values - p_Request.setAttribute("listServers", al); - p_Request.setAttribute("allStarted", allStarted); - p_Request.setAttribute("noneStarted", noneStarted); - p_Request.setAttribute("isNotMonitoring", isNotMonitoringStr); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("DaemonProxyCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterApplyModifAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterApplyModifAction.java deleted file mode 100644 index 4b72152fed..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterApplyModifAction.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.monitoring.DaemonProxyClusterForm; - -public class DaemonProxyClusterApplyModifAction extends JonasBaseAction { -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) p_Form; - - // Actions - try { - // ObjectName of the domain in which the new cluster has to be created - ObjectName cdOn = m_WhereAreYou.getCurrentClusterDaemon(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String[] signature = {"java.lang.String" }; - String[] params = {oForm.getName() }; - signature[0] = "java.lang.String"; - JonasManagementRepr.invoke(cdOn, "save", params, signature, serverName); - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - p_Request.setAttribute("isNotMonitoring", "true"); - p_Request.setAttribute("node",oForm.getName() ); - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionDaemonProxyClusterInfo"); - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterConfigureServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterConfigureServerAction.java deleted file mode 100644 index 54ad4c502d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterConfigureServerAction.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * this servlet will : - * - get the server to configure - * - get its current conf infos - * - forward the request to a jsp - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -public class DaemonProxyClusterConfigureServerAction extends JonasBaseAction { - /** - * Default extra parameters. - */ - public static final String DEF_XPREM = "-Djava.net.preferIPv4Stack=true"; - - /** - * Default Server description. - */ - public static final String DEF_DESC = "jonas server"; - - /** - * Default atoboot value. - */ - public static final String DEF_AUTO_BOOT = "false"; - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - String cdName = m_WhereAreYou.getCurrentClusterDaemonName(); - // getting the server name - String sName = p_Request.getParameter("server"); - ClusterdServerForm oform = (ClusterdServerForm) p_Form; - - oform.setJavaHome(System.getProperty("java.home")); - oform.setJonasRoot(System.getProperty("jonas.root")); - oform.setJonasBase(System.getProperty("jonas.base")); - oform.setDescription(DEF_DESC); - oform.setAutoBoot(DEF_AUTO_BOOT); - oform.setXprem(DEF_XPREM); - oform.setName(sName); - oform.setCdName(cdName); - // getting current server infos - try { - DomainMonitor dm = DomainMonitor.getInstance(); - ServerProxy proxy = dm.findServerProxy(sName); - if (proxy != null) { - // that means the server is in the domain.xml but a server - // should be affected to the domain without being in the - // domain.xml file on start. - // think about adding the server in domain manager when adding - // it into a domain by jonasAdmin console - String state = proxy.getState(); - - // the server is not configured for clusterd affectation - if (!state.equals("UNREACHABLE") && !state.equals("UNKNOWN") && !state.equals("FAILED")) { - // Get required infos. - oform.setJavaHome(proxy.getJavaHome()); - oform.setJonasRoot(proxy.getJonasRoot()); - oform.setJonasBase(proxy.getJonasBase()); - oform.setAutoBoot(proxy.getAutoBoot()); - oform.setXprem(proxy.getXprem()); - } - oform.setState(state); - // Configuration mode - p_Request.setAttribute("isNotMonitoring", "true"); - // set this server as current server to configure - m_WhereAreYou.setCurrentSrvToConfigure(sName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // next operation will set selected server's properties that are needed - // to affect it to the current cluster daemon. - return (p_Mapping.findForward("DaemonProxyClusterDisplayServerConfig")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterModifyAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterModifyAction.java deleted file mode 100644 index 3dbb1b93d8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/DaemonProxyClusterModifyAction.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -import org.ow2.jonas.webapp.jonasadmin.monitoring.DaemonProxyClusterForm; - - -public class DaemonProxyClusterModifyAction extends JonasBaseAction { - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, - final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - String serverName = oWhere.getAdminJonasServerName(); - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) p_Form; - try { - String name = p_Request.getParameter("node"); - if(name == null) - { - //that means the request has been forwarded by another Action Class - name = oWhere.getCurrentClusterDaemonName(); - - } - - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, name); - oWhere.setCurrentClusterDaemon(on); - oWhere.setCurrentClusterDaemonName(name); - - oForm.setName((String) JonasManagementRepr.getAttribute(on, - "Name", serverName)); - - oForm.setState((String) JonasManagementRepr.getAttribute(on, - "State", serverName)); - -// getting requested cluster daemon Administred Jonas servers... - DomainMonitor dm = DomainMonitor.getInstance(); - -// Get servers running in this domain - ArrayList al = new ArrayList(); - //are all the servers already started ? - boolean allStarted = true; - for (Iterator it = dm.getServerList().iterator(); it.hasNext();) { - ServerProxy proxy = (ServerProxy) it.next(); - String cdName = proxy.getClusterDaemonName(); - - if(cdName != null) - { - if(cdName.equals(name)) - { - ObjectName myOn = ObjectName.getInstance(proxy.getJ2eeObjectName()); - al.add(new ServerItem(myOn, proxy.getState(), proxy.getClusterDaemonName())); - allStarted = (allStarted && proxy.getState().equals("RUNNING")); - } - } - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - p_Request.setAttribute("listServers", al); - p_Request.setAttribute("allStarted", allStarted); - - -// oForm.setSrvList((Collection)JonasManagementRepr.getAttribute(on, -// "SrvList", serverName)); - - - // System.out.println("Url de connextion"+(String)JonasManagementRepr.getAttribute(on,"connectionUrl", serverName)); - - - -// Force the node selected in tree - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + name, true); - - - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("DaemonProxyClusterModify")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditAllClusterDaemonsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditAllClusterDaemonsAction.java deleted file mode 100644 index a9298b59fd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditAllClusterDaemonsAction.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class EditAllClusterDaemonsAction extends JonasBaseAction { -// --------------------------------------------------------- Public Methods - /** - * Execute action for a JOnAS server instance management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - - /* - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm pForm - , HttpServletRequest p_Request, HttpServletResponse pResponse) - throws IOException, ServletException { - return (p_Mapping.findForward("EditAllClusterDaemons")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterDaemonAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterDaemonAction.java deleted file mode 100644 index 091174da76..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterDaemonAction.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.DaemonProxyClusterForm; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class EditClusterDaemonAction extends JonasBaseAction { -// --------------------------------------------------------- Public Methods - - /** - * Execute action for a JOnAS server instance management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - * - * - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm pForm - , HttpServletRequest p_Request, HttpServletResponse pResponse) - throws IOException, ServletException { - - String requestedObjectName = (String) p_Request.getParameter("select"); - boolean changeManagement = false; - try { - ObjectName on = ObjectName.getInstance(requestedObjectName); - String requestedJonasServerName = on.getKeyProperty("name"); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + requestedJonasServerName, true); - - // Form used - // JonasServerForm oForm = (JonasServerForm) pForm; - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) pForm; - - - oForm.setName((String) JonasManagementRepr.getAttribute(on, - "Name", serverName)); - - oForm.setState((String) JonasManagementRepr.getAttribute(on, - "State", serverName)); - -// DomainMonitor dm = oWhere.getCurrentDomain(); - - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("DaemonProxyCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterdVmMemoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterdVmMemoryAction.java deleted file mode 100644 index af0f55df77..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/EditClusterdVmMemoryAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - - -/** - * @author Michel-Ange Anton - */ - -public class EditClusterdVmMemoryAction extends JonasBaseAction { - int sizeTableMeasuresVmMemory; - int rangeVmMemory; - - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - MemoryForm oForm = (MemoryForm) p_Form; - try { - // Object name used - String cdName = m_WhereAreYou.getCurrentClusterDaemonName(); - sizeTableMeasuresVmMemory = m_WhereAreYou.getClusterdGraphAttribute(cdName, "sizeTableMeasuresVmMemory"); - rangeVmMemory = m_WhereAreYou.getClusterdGraphAttribute(cdName, "rangeVmMemory"); - if (sizeTableMeasuresVmMemory == -1) { - //session attribute has never been set - sizeTableMeasuresVmMemory = GraphUtils.DEF_SIZE_TABLE_MEASURES; - rangeVmMemory = GraphUtils.DEF_RANGE; - m_WhereAreYou.setClusterdGraphAttribute(cdName, "sizeTableMeasuresVmMemory", sizeTableMeasuresVmMemory); - m_WhereAreYou.setClusterdGraphAttribute(cdName, "rangeVmMemory", rangeVmMemory); - } - oForm.setNumberOfMeasures(sizeTableMeasuresVmMemory); - oForm.setOwnerName(cdName); - oForm.setRange(rangeVmMemory); - oForm.refreshGraphic(); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ClusterdVmMemory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/HaltJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/HaltJonasServerAction.java deleted file mode 100644 index 771a6a5823..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/HaltJonasServerAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author eyindanga - */ - -public class HaltJonasServerAction extends JonasBaseAction { - -//--------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - String currentCd = oWhere.getCurrentClusterDaemonName(); - //we set the cd name for the forward action - p_Request.setAttribute("node", currentCd); - - - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "stop"; - Object[] standby = {false}; - String[] signature = {boolean.class.toString()}; - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - p_Request.setAttribute("isNotMonitoring", "true"); - return (p_Mapping.findForward("ActionDaemonProxyClusterInfoFromDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/MemoryForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/MemoryForm.java deleted file mode 100644 index 8e5165872d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/MemoryForm.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -public class MemoryForm extends ActionForm { - -// --------------------------------------------------------- Properties Variables - - /** - * - */ - private static final long serialVersionUID = 1L; - private int numberOfMeasures = 120; - private int range = 10; - private int widthGraphic; - private int heightGraphic; - private int timerGraphic; - //the server name, or clusterd name - String ownerName = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - numberOfMeasures = 120; - range = 10; - refreshGraphic(); - } - - public void refreshGraphic() { - widthGraphic = GraphUtils.getWidth(numberOfMeasures); - heightGraphic = GraphUtils.getHeight(); - timerGraphic = 1000 * (range + 2); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if (numberOfMeasures <= 1) { - oErrors.add("numberOfMeasures" - , new ActionMessage("error.monitoring.memory.numberOfMeasures")); - } - if (range < 10) { - oErrors.add("range", new ActionMessage("error.monitoring.memory.range")); - } - //System.out.println("oErrors.size() = "+oErrors.size()); - if (oErrors.size() == 0) { - //System.out.println("sizingGraphic"); - refreshGraphic(); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public int getNumberOfMeasures() { - return numberOfMeasures; - } - - public void setNumberOfMeasures(final int numberOfMeasures) { - this.numberOfMeasures = numberOfMeasures; - } - - public int getRange() { - return range; - } - - public void setRange(final int range) { - this.range = range; - } - - public int getWidthGraphic() { - return widthGraphic; - } - - public void setWidthGraphic(final int widthGraphic) { - this.widthGraphic = widthGraphic; - } - - public int getHeightGraphic() { - return heightGraphic; - } - - public void setHeightGraphic(final int heightGraphic) { - this.heightGraphic = heightGraphic; - } - - public int getTimerGraphic() { - return timerGraphic; - } - - public void setTimerGraphic(final int timerGraphic) { - this.timerGraphic = timerGraphic; - } - - /** - * @return the ownerName - */ - public String getOwnerName() { - return ownerName; - } - - /** - * @param ownerName the ownerName to set - */ - public void setOwnerName(final String ownerName) { - this.ownerName = ownerName; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ServerConfigModifiedAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ServerConfigModifiedAction.java deleted file mode 100644 index 1bf5e46db7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/ServerConfigModifiedAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -public class ServerConfigModifiedAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - // form for affecting a server to clusterd control - ClusterdServerForm oForm = (ClusterdServerForm) p_Form; - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - try { - ArrayList al = (ArrayList) m_Session.getAttribute("freeServersList"); - int i = 0; - ServerItem srv = null; - boolean stop = false; - // let's find the serverItem to set its configuration - while (i < al.size() && !stop) { - srv = (ServerItem) al.get(i); - stop = srv.getName().equals(oForm.getName()); - i++; - } - // we should always find the serverItem - if (stop) { - // set properties for clusterd affectation - srv.setIsConfiguredForClusterd(true); - srv.setDescription(oForm.getDescription()); - srv.setJavaHome(oForm.getJavaHome()); - srv.setJonasRoot(oForm.getJonasRoot()); - srv.setAutoBoot(oForm.getAutoBoot()); - srv.setXprem(oForm.getXprem()); - srv.setClusterDaemonName(oWhere.getCurrentClusterDaemonName()); - // This server is now configured for clusterd affectation. - m_WhereAreYou.addSrvConfiguredForClusterd(srv); - } - // set freeServersList attribute for the forward destination - p_Request.setAttribute("freeServersList", al); - p_Request.setAttribute("CdName", oWhere.getCurrentClusterDaemonName()); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // forward destination displays current clusterd infos - return (p_Mapping.findForward("ActionCreateJonasServer")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartJonasServerAction.java deleted file mode 100644 index 81a3c9ede0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartJonasServerAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Adriana Danes - */ - -public class StartJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - String currentCd = oWhere.getCurrentClusterDaemonName(); - //we set the cd name for the forward action - p_Request.setAttribute("node", currentCd); - - - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "start"; - Object[] standby = {false}; - String[] signature = {boolean.class.toString()}; - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - p_Request.setAttribute("isNotMonitoring", "true"); - return (p_Mapping.findForward("ActionDaemonProxyClusterInfoFromDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartStandbyJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartStandbyJonasServerAction.java deleted file mode 100644 index 40ad6f872b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StartStandbyJonasServerAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author eyindanga - */ - -public class StartStandbyJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - String currentCd = oWhere.getCurrentClusterDaemonName(); - //we set the cd name for the forward action - p_Request.setAttribute("node", currentCd); - - - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "start"; - Object[] standby = {true}; - String[] signature = {boolean.class.toString()}; - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - p_Request.setAttribute("isNotMonitoring", "true"); - return (p_Mapping.findForward("ActionDaemonProxyClusterInfoFromDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StopJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StopJonasServerAction.java deleted file mode 100644 index 91abf63e2c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/StopJonasServerAction.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Adriana Danes - */ - -public class StopJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - - - // the session - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - - String currentCd = oWhere.getCurrentClusterDaemonName(); - //we set the cd name for the forward action - p_Request.setAttribute("node", currentCd); - - - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "stop"; - Object[] standby = {true}; - String[] signature = {boolean.class.toString()}; - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - p_Request.setAttribute("isNotMonitoring", "true"); - return (p_Mapping.findForward("ActionDaemonProxyClusterInfoFromDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/servlet/MemoryGraphRemoteHostServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/servlet/MemoryGraphRemoteHostServlet.java deleted file mode 100644 index 95a29b5d99..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/clusterd/servlet/MemoryGraphRemoteHostServlet.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.clusterd.servlet; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -public class MemoryGraphRemoteHostServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void doGet(final HttpServletRequest req, final HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - ObjectName cdOName = oWhere.getCurrentClusterDaemon(); - String currentStr = ((String) JonasManagementRepr.invoke(cdOName, "getVmCurrentUsedMemory", null, null, serverName)); - Long current = new Long(currentStr).longValue(); - current = current / (1024 * 1024); - if (total == 0) { - //get total memory just once - String totalMemoryStr = ((String) JonasManagementRepr.invoke(cdOName, "getVmTotalMemory", null, null, serverName)); - total = new Long(totalMemoryStr).longValue(); - total = total /(1024 * 1024); - } - if (index == data.length) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - }else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Current Used Memory", "MB", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "Used Memory", "MB", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ApplyCmiAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ApplyCmiAction.java deleted file mode 100644 index 80adc2273e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ApplyCmiAction.java +++ /dev/null @@ -1,212 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -/** - * This class executes CMI Actions. - * @author eyindanga - * - */ -public class ApplyCmiAction extends JonasBaseAction { - - @SuppressWarnings("unchecked") - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + serverName, true); - - CmiForm oForm = (CmiForm) p_Form; - String forwardName = "displayCmiInfo"; - String action = oForm.getAction(); - if (m_Session.getAttribute("currentCmiCluster") != null) { - //free session var to let the garbage clean it. - m_Session.setAttribute("currentCmiCluster", null); - } - //The style of the html text containing delay to refresh. This style will be different if the delay is changed by user - p_Request.setAttribute("htmlTextStyle", "htmlText"); - try { - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, serverName); - if (JonasAdminJmx.hasMBeanName(cmiOn, serverName)) { - if (action != null) { - if (action.equals("refresh")) { - JonasManagementRepr.setAttribute(cmiOn, "DelayToRefresh", new Integer(oForm.getDelayToRefresh()), serverName); - //Set the style of html text containing new delay to refresh. - p_Request.setAttribute("htmlTextStyle", "htmlTextChanged"); - // unset action - oForm.setAction(null); - }else if("blacklist".equals(oForm.getAction())) { - /** - * Blacklist the server - */ - String[] signature = {"java.lang.String"}; - String[] params = {oForm.getServerUrl()}; - JonasManagementRepr.invoke(cmiOn, "addServerToBlackList", params, signature, serverName); - }else if ("unblacklist".equals(oForm.getAction())) { - /** - * Unblacklist the server - */ - String[] signature = {"java.lang.String"}; - String[] params = {oForm.getServerUrl()}; - JonasManagementRepr.invoke(cmiOn, "removeServerFromBlackList", params, signature, serverName); - //Enable or disable current cmi server - } - } - Set clusterList = (Set)JonasManagementRepr.getAttribute(cmiOn, "ClusterNames", serverName); - List cmiClusterList = new ArrayList(); - for (Iterator iter = clusterList.iterator(); iter.hasNext();) { - String[] signature = {"java.lang.String"}; - String clusterName = (String) iter.next(); - String[] params = {clusterName}; - Set objectList = (Set)JonasManagementRepr.invoke(cmiOn, "getObjectNames", params, signature, serverName); - cmiClusterList.add(new ClusterAttribute(clusterName, objectList)); - } - oForm.setCmiClusterList(cmiClusterList); - oForm.getProtocols().clear(); - //getting all server proxies of the domain. - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - Collection serverList = null; - if (dm.isMaster()) { - serverList = dm.getServerList(); - } - - Iterator itNames = ((Set)JonasManagementRepr.getAttribute(cmiOn, "Protocols", serverName)).iterator(); - while (itNames.hasNext()) { - Protocol proto = new Protocol(); - String protocol = (String) itNames.next(); - String[] params = {protocol}; - String[] sign = {"java.lang.String"}; - /** - * Get provider URLs for each protocol - */ - Set providerUrls =(Set)JonasManagementRepr.invoke(cmiOn, "getServerRefsForProtocol", params, sign, serverName); - for (Iterator iterator = providerUrls.iterator(); iterator - .hasNext();) { - - String providerUrl = (String) iterator.next(); - Provider prov = new Provider(); - String[] parameters = {providerUrl, protocol}; - String[] signature = {"java.lang.String", "java.lang.String"}; - Set objectList = (Set)JonasManagementRepr.invoke(cmiOn, "getServerObjectsForProtocol", parameters, signature, serverName); - prov.setUrl(providerUrl); - prov.setName(""); - if (serverList != null) { - prov.setName(JonasBaseAction.getNameForProvider(providerUrl, serverList)); - } - - - String[] signat = {"java.lang.String"}; - String[] par = {providerUrl}; - prov.setIsBlackListed((Boolean)JonasManagementRepr.invoke(cmiOn, "isServerBlackListed", par, signat, serverName)); - prov.setListNames(objectList); - proto.getProviders().add(prov); - } - proto.setName(protocol); - oForm.getProtocols().add(proto); - m_Session.setAttribute("currentCmiForm", oForm); - } - //get availaible LBPolicies - Map> availablePoliciesAndStrategies = - (Map>) JonasManagementRepr.invoke( - cmiOn, "retrieveAvailablePoliciesAndStrategies", null, null, serverName); - oForm.setAvailableLBPolicies(getLBClasses(availablePoliciesAndStrategies, "policies")); - oForm.setAvailableLBStrategies(getLBClasses(availablePoliciesAndStrategies, "strategies")); - oForm.setDelayToRefresh(((Integer)JonasManagementRepr.getAttribute(cmiOn, "DelayToRefresh", serverName)).intValue()); - }else { - //cmi mbean is not registered - p_Request.setAttribute("newcmi", false); - } - - }catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(forwardName)); - } - - /** - * Build a Hashmap of full class names/simple class name that will be displayed in a html select - * @param availableLBPoliciesAndStrategies - * @param lbType - * @return - */ - private HashMap getLBClasses( - final Map> availableLBPoliciesAndStrategies, - final String lbType) { - HashMap ret = new HashMap(); - Set fullClassNames = availableLBPoliciesAndStrategies.get(lbType); - for (Iterator iterator = fullClassNames.iterator(); iterator.hasNext();) { - String fullClassName = iterator.next(); - ret.put(fullClassName, getSimpleClassName(fullClassName)); - } - - return ret; - } - - /** - * get simple class name from a full class name. e.g org.toto.Titi --> Titi - * @param fullClassName - * @return - */ - private String getSimpleClassName(final String fullClassName) { - // TODO Auto-generated method stub - for (int i = fullClassName.length() - 1; i >= 0; i--) { - if (String.valueOf(fullClassName.charAt(i)).equals(".")) { - return fullClassName.substring(i + 1, fullClassName.length()); - } - } - return fullClassName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterAttribute.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterAttribute.java deleted file mode 100644 index a691c04eb3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterAttribute.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.Serializable; -import java.util.Set; - -public class ClusterAttribute implements Serializable{ - /** - * - */ - private static final long serialVersionUID = 1L; - String name; - Set objectList; - /** - * @param name - * @param objectList - */ - public ClusterAttribute(String name, Set objectList) { - this.name = name; - this.objectList = objectList; - } - /** - * @return the name - */ - public String getName() { - return name; - } - /** - * @param name the name to set - */ - public void setName(String name) { - this.name = name; - } - /** - * @return the objectList - */ - public Set getObjectList() { - return objectList; - } - /** - * @param objectList the objectList to set - */ - public void setObjectList(Set objectList) { - this.objectList = objectList; - } - - - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterPropertyAttribute.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterPropertyAttribute.java deleted file mode 100644 index 5d23abcb7e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/ClusterPropertyAttribute.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.Serializable; - -public class ClusterPropertyAttribute implements Serializable{ - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - - /** - * Attribute name. - */ - private String name; - - /** - * Attribute value. - */ - private Object value; - - /** - * Constructor using fields. - * @param name attribute name. - * @param value attribute value. - */ - public ClusterPropertyAttribute(final String name, final Object value) { - this.name =name; - this.value = value; - } - /** - * @return the value - */ - public Object getValue() { - return value; - } - /** - * @param value the value to set - */ - public void setValue(final Object value) { - this.value = value; - } - /** - * @return the name - */ - public String getName() { - return name; - } - /** - * Sets the name. - * @param name name to set. - */ - void setName(final String name) { - this.name = name; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterAction.java deleted file mode 100644 index 85d7395521..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class CmiClusterAction extends JonasBaseAction { - @Override - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, HttpServletResponse p_Response) throws IOException, ServletException { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String forwardName = "displayCmiClusterInfo"; - String clusterName = p_Request.getParameter("clusterItem"); - CmiClusterForm clusterForm = (CmiClusterForm) p_Form; - try { - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, serverName); - if (JonasAdminJmx.hasMBeanName(cmiOn, serverName)) { - if (clusterName != null) { - CmiForm currentCmiForm =(CmiForm) m_Session.getAttribute("currentCmiForm"); - ClusterAttribute cluster = currentCmiForm.getCluster(clusterName); - //Display cluster Infos - //Set the current session for eventual edition by user. - clusterForm.setName(cluster.getName()); - clusterForm.setObjectList(cluster.getObjectList()); - m_Session.setAttribute("currentCmiCluster", cluster); - - } else if (true) { - //remove a server - }else if (true) { - //modify LBpolicy for an object - }else if (true) { - //Edit CMI infos - }else if (true) { - //set initial server list - } - }else { - //cmi mbean is not registered - p_Request.setAttribute("newcmi", false); - } - }catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(forwardName)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterForm.java deleted file mode 100644 index 5087b315b7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiClusterForm.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.util.Set; - -import org.ow2.jonas.webapp.jonasadmin.monitoring.BaseClusterForm; - -public class CmiClusterForm extends BaseClusterForm { - /** - * Action to be performed. - */ - private String action = null; - /** - * Multicast Address. - */ - private String mcastAddr = null; - public String getMcastAddr() { - return mcastAddr; - } - public void setMcastAddr(final String addr) { - mcastAddr = addr; - } - - private int mcastPort; - public int getMcastPort() { - return mcastPort; - } - public void setMcastPort(final int port) { - mcastPort = port; - } - - private String protocol; - public String getProtocol() { - return protocol; - } - public void setProtocol(final String proto) { - protocol = proto; - } - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * Cluster Name. - */ - String name; - - /** - * Cluster objects. - */ - Set objectList; - - /** - * Default constructor. - */ - public CmiClusterForm(){ - - } - /** - * @param name - * @param objectList - */ - public CmiClusterForm(final String name, final Set objectList) { - this.name = name; - this.objectList = objectList; - } - /** - * @return the name - */ - @Override - public String getName() { - return name; - } - /** - * @param name the name to set - */ - @Override - public void setName(final String name) { - this.name = name; - } - /** - * @return the objectList - */ - public Set getObjectList() { - return objectList; - } - /** - * @param objectList the objectList to set - */ - public void setObjectList(final Set objectList) { - this.objectList = objectList; - } - public String getAction() { - return action; - } - public void setAction(final String action) { - this.action = action; - } - - private int delayToRefresh; - - public int getDelayToRefresh() { - return delayToRefresh; - } - - public void setDelayToRefresh(final int delayToRefresh) { - this.delayToRefresh = delayToRefresh; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiForm.java deleted file mode 100644 index b9521c6fb5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiForm.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; - - -import org.apache.struts.action.ActionForm; - -public class CmiForm extends ActionForm { - - /** - * The serial Id. - */ - private static final long serialVersionUID = 1L; - /** - * List of cmi clusters. - */ - private List cmiClusterList = new ArrayList(); - /** - * Protocol name and value(url). - */ - private Set protocols = new HashSet(); - /** - * How often ... - */ - private int delayToRefresh = 0; - /** - * Action to perform. - */ - private String action = null; - - /** - * available LBpolicies. - */ - private HashMap availableLBPolicies = new HashMap(); - - /** - * available LBpolicies. - */ - private HashMap availableLBStrategies = new HashMap(); - - /** - * The server to blacklist/unblacklist - */ - private String serverUrl; - /** - * @return the cmiClusterList - */ - public List getCmiClusterList() { - return cmiClusterList; - } - /** - * @param cmiClusterList the cmiClusterList to set - */ - public void setCmiClusterList(final List cmiClusterList) { - this.cmiClusterList = cmiClusterList; - } - /** - * @return the protocols - */ - public Set getProtocols() { - return protocols; - } - /** - * @param protocols the protocols to set - */ - public void setProtocols(final Set protocols) { - this.protocols = protocols; - } - /** - * @return the delayToRefresh - */ - public int getDelayToRefresh() { - return delayToRefresh; - } - /** - * @param delayToRefresh the delayToRefresh to set - */ - public void setDelayToRefresh(final int delayToRefresh) { - this.delayToRefresh = delayToRefresh; - } - /** - * @return the action - */ - public String getAction() { - return action; - } - /** - * @param action the action to set - */ - public void setAction(final String action) { - this.action = action; - } - - - /** - * Get a cluster. - * @param clusterName The cluster name. - * @return The cluster. - * @throws Exception If cluster not found. - */ - public ClusterAttribute getCluster(final String clusterName) throws Exception{ - // TODO Auto-generated method stub - ListIterator it = cmiClusterList.listIterator(); - while(it.hasNext()){ - ClusterAttribute next = it.next(); - if (next.getName().equals(clusterName)) { - return next; - } - } - throw new Exception("Cluster named "+clusterName+" doesn't exist"); - } - - /** - * @return - */ - public HashMap getAvailableLBPolicies() { - return availableLBPolicies; - } - /** - * @param availableLBPolicies - */ - public void setAvailableLBPolicies(final HashMap availableLBPolicies) { - this.availableLBPolicies = availableLBPolicies; - } - /** - * @return - */ - public HashMap getAvailableLBStrategies() { - return availableLBStrategies; - } - /** - * @param availableLBStrageties - */ - public void setAvailableLBStrategies(final HashMap availableLBStrategies) { - this.availableLBStrategies = availableLBStrategies; - } - public String getServerUrl() { - return serverUrl; - } - public void setServerUrl(final String serverUrl) { - this.serverUrl = serverUrl; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObject.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObject.java deleted file mode 100644 index 1e8e265c08..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObject.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.Serializable; - -public class CmiObject implements Serializable { - - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - /** - * Object name. - */ - private String name; - /** - * True if the object is local - */ - private boolean isLocal; - /** - * The uri for the object icon - */ - private String iconSource; - /** - * Constructor using fields. - * @param name - * @param isLocal - * @param iconSource - * @param serverRefs - */ - public CmiObject(final String name, final boolean isLocal, final String iconSource) { - super(); - this.name = name; - this.isLocal = isLocal; - this.iconSource = iconSource; - } - /** - * Default constructor. - */ - public CmiObject() { - - } - - /** - * @return - */ - public String getName() { - return name; - } - /** - * @param name - */ - public void setName(final String name) { - this.name = name; - } - /** - * @return - */ - public boolean getIsLocal() { - return isLocal; - } - /** - * @param isLocal - */ - public void setIsLocal(final boolean isLocal) { - this.isLocal = isLocal; - } - /** - * @return - */ - public String getIconSource() { - return iconSource; - } - /** - * @param iconSource - */ - public void setIconSource(final String iconSource) { - this.iconSource = iconSource; - } - - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - // TODO Auto-generated method stub - return name; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectAction.java deleted file mode 100644 index 0eb7b14f7c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectAction.java +++ /dev/null @@ -1,292 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.management.JMRuntimeException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.upload.FormFile; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -public class CmiObjectAction extends JonasBaseAction { - /** - * Size of Buffer - */ - private static final int BUFFER_SIZE = 1024; - @SuppressWarnings("unchecked") - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String forwardName = "displayCmiObjectInfo"; - String objName = p_Request.getParameter("objName"); - if (objName == null) { - objName = m_WhereAreYou.getVar("objName"); - }else { - m_WhereAreYou.addVar("objName", objName); - } - CmiObjectForm oForm = (CmiObjectForm) p_Form; - String action = oForm.getAction(); - //set Text style for html texts. - p_Request.setAttribute("htmlTextStyleLbPolicy", "htmlTextLbPolicy"); - p_Request.setAttribute("htmlTextStyleLbStrategy", "htmlTextLbPolicy"); - p_Request.setAttribute("htmlTextStyleMinPoolSize", "htmlText"); - p_Request.setAttribute("htmlTextStyleMaxPoolSize", "htmlText"); - try { - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, serverName); - if (JonasAdminJmx.hasMBeanName(cmiOn, serverName)) { - oForm.setName(objName); - // Set clusterList = (Set)JonasManagementRepr.invoke(cmiOn, "getClusterNames", null, null, serverName); - String[] signature = new String[5]; - signature[0] = "java.lang.String"; - String[] params = new String[5]; - params[0] = objName; - - if (action != null) { - if ("changeLBPolicy".equals(action)) { - String[] parameters = {objName, oForm.getCurrentLBPolicySelect()}; - String[] sign = {"java.lang.String", "java.lang.String"}; - JonasManagementRepr.invoke(cmiOn, "setPolicyClassName", parameters, sign, serverName); - p_Request.setAttribute("htmlTextStyleLbPolicy", "htmlTextLbPolicyChanged"); - }else if ("loadLBPolicy".equals(action)) { - //change lbPolicy infos - sendFile(oForm, oForm.getNewLbPolicyClass(), "policy", cmiOn, p_Request); - }else if (action.equals("loadLBStrategy")) { - sendFile(oForm, oForm.getNewLbPolicyClass(), "strategy", cmiOn, p_Request); - }else if("changeLBStrategy".equals(action)){ - String[] parameters = {objName, oForm.getCurrentLBStrategySelect()}; - String[] sign = {"java.lang.String", "java.lang.String"}; - JonasManagementRepr.invoke(cmiOn, "setStrategyClassName", parameters, sign, serverName); - p_Request.setAttribute("htmlTextStyleLbStrategy", "htmlTextLbPolicyChanged"); - }else if("updateSimpleProperty".equals(action)){ - updateSimpleProperty(oForm, cmiOn, serverName); - }else if("updateCurrentSimpleProperty".equals(action)) { - /** - * Update some attribute for presentation purposes. - */ - updateSelectedSimpleProperty(oForm); - // Forward to the jsp. - return (p_Mapping.findForward(forwardName)); - } - } - String[] parameters = {objName}; - String[] sign = {"java.lang.String"}; - oForm.setName(objName); - oForm.setServerRefs((List)JonasManagementRepr.invoke(cmiOn, "getServerRefs", parameters, sign, serverName)); - String currentLB = (String)JonasManagementRepr.invoke(cmiOn, "getPolicyClassName", parameters, sign, serverName); - oForm.setCurrentLBPolicy(new LBAttribute(currentLB, getSimpleClassName(currentLB))); - currentLB = (String)JonasManagementRepr.invoke(cmiOn, "getStrategyClassName", parameters, sign, serverName); - oForm.setCurrentLBStrategy(new LBAttribute(currentLB, getSimpleClassName(currentLB))); - /** - * TODO: enable this when pool management will evolve. - */ - //oForm.setMinPoolSize(((Integer)JonasManagementRepr.invoke(cmiOn, "getMinPoolSize", parameters, sign, serverName)).intValue()); - oForm.setMaxPoolSize(((Integer)JonasManagementRepr.invoke(cmiOn, - "getMaxPoolSize", parameters, sign, serverName)).intValue()); - oForm.setMaxPoolWaiters(((Integer)JonasManagementRepr.invoke(cmiOn, - "getMaxPoolWaiters", parameters, sign, serverName)).intValue()); - oForm.setPoolTimeout(((Long)JonasManagementRepr.invoke(cmiOn, - "getPoolTimeout", parameters, sign, serverName)).longValue()); - oForm.setItfName((String)JonasManagementRepr.invoke(cmiOn, "getItfName", parameters, sign, serverName)); - oForm.setClusterName(((ClusterAttribute)m_Session.getAttribute("currentCmiCluster")).getName()); - try { - getSimpleProperties(objName, cmiOn, oForm, parameters, sign, serverName ); - } catch (Exception e) { - //Do nothing if failures occur while getting properties. - } - oForm.setAction(null); - }else { - // cmi MBean is not registered - p_Request.setAttribute("newcmi", false); - } - }catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(forwardName)); - } - /** - * Update selected simple property. used for presentation purposes. - * @param form the form bean. - */ - private void updateSelectedSimpleProperty(final CmiObjectForm form) { - boolean stop = false; - Iterator it = form.getSimpleProperties().iterator(); - ClusterPropertyAttribute attr = null; - while(it.hasNext() && !stop) { - attr = it.next(); - stop = attr.getName().equals(form.getCurrentSimpPropertySelect()); - } - if(stop) { - form.setCurrentSimpPropertyValue(attr.getValue().toString()); - } - } - - /** - * Update simple properties - * @param form form bean - * @param cmiOn cmi object name. - */ - private void updateSimpleProperty(final CmiObjectForm form, final ObjectName cmiOn, - final String serverName) throws JMRuntimeException { - if(form.getCurrentSimpPropertyValue() != null) { - String[] parameters = {form.getName(), form.getCurrentSimpPropertySelect(), - form.getCurrentSimpPropertyValue()}; - String[] sign = {"java.lang.String", "java.lang.String", "java.lang.String"}; - JonasManagementRepr.invoke(cmiOn, "setStaticPropertyForPolicy", parameters, sign, serverName); - } - } - /** - * Get simple properties for the given clustered object. - * @param objectName the clustered bean - * @param cmiOn objecName to be used. - * @param form the form to fill. - * @param parameters invocation parameters - * @param sign invocation signature. - * @param the server where to invoke. - */ - private void getSimpleProperties(final String objectName, final ObjectName cmiOn, final CmiObjectForm form, - final String[] parameters, final String[] sign, final String serverName) throws JMRuntimeException { - form.getSimpleProperties().clear(); - Set properties = (Set)JonasManagementRepr.invoke(cmiOn, - "getPropertiesNamesForPolicy", parameters, sign, serverName); - for (String property : properties) { - String[] params = {objectName, property}; - String[] signature = {"java.lang.String", "java.lang.String"}; - Object attrValue = JonasManagementRepr.invoke(cmiOn, "getStaticPropertyForPolicy", params, signature, serverName); - ClusterPropertyAttribute attr = new ClusterPropertyAttribute(property, attrValue); - form.getSimpleProperties().add(attr); - } - /** - * The first element will be displayed first. - */ - if (!form.getSimpleProperties().isEmpty()) { - ClusterPropertyAttribute attr = form.getSimpleProperties().iterator().next(); - form.setCurrentSimpPropertySelect(attr.getName()); - if (attr.getValue() != null) { - form.setCurrentSimpPropertyValue(attr.getValue().toString()); - }else { - form.setCurrentSimpPropertyValue(null); - } - - } - - } - - /** Sends a file to the cmi server instance. - * @param p_form current form - * @param file The file to send - * @param remoteMethodName The remote method name to invoke. - * @param cmiOn - * @param request - */ - private void sendFile(final CmiObjectForm p_form, final FormFile file, final String remoteAttributeName, - final ObjectName cmiOn, final HttpServletRequest request) { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // retrieve the file name - String fileName = file.getFileName(); - - // retrieve the content type - String contentType = file.getContentType(); - - // retrieve the file size - String size = (file.getFileSize() + " bytes"); - - - // J2EE server MBean - ObjectName j2eeServer = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName(), serverName); - - // invoke method on the MBean - String sentFile = null; - InputStream inputStream = null; - ByteArrayOutputStream baos = null; - int len; - try { - inputStream = file.getInputStream(); - baos = new ByteArrayOutputStream(); - byte[] buf = new byte[BUFFER_SIZE]; - // Read bytes - while ((len = inputStream.read(buf)) > 0) { - baos.write(buf, 0, len); - } - byte[] bytesOfFile = baos.toByteArray(); - Object[] param = new Object[] {p_form.getName(),bytesOfFile, fileName, remoteAttributeName}; - String[] signature = {"java.lang.String", "[B", "java.lang.String", "java.lang.String"}; - sentFile = (String) JonasManagementRepr.invoke(j2eeServer, "receiveFile", param, signature, serverName); - } catch (Exception e) { - addGlobalError(e); - saveErrors(request, m_Errors); - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - if (baos != null) { - baos.close(); - } - } catch (Exception e) { - getServlet().log("Cannot close streams", e); - } - - } - //destroy temporary file. - file.destroy(); - } - - /** - * get simple class name from a full class name. e.g org.toto.Titi --> Titi - * @param fullClassName - * @return - */ - private String getSimpleClassName(final String fullClassName) { - // TODO Auto-generated method stub - for (int i = fullClassName.length() - 1; i >= 0; i--) { - if (String.valueOf(fullClassName.charAt(i)).equals(".")) { - return fullClassName.substring(i + 1, fullClassName.length()); - } - } - return fullClassName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectForm.java deleted file mode 100644 index ec4943311b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiObjectForm.java +++ /dev/null @@ -1,356 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.management.Attribute; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.upload.FormFile; - -public class CmiObjectForm extends ActionForm { - - /** - * - */ - private static final long serialVersionUID = 1L; - public String name = null ; - - /** - * The interface name - */ - public String itfName = null; - Set properties = null; - /** - * Minimum pool size. - */ - int minPoolSize = 0; - - /** - * Maximum pool size. - */ - int maxPoolSize = 0; - - /** - * Maximum pool waiters. - */ - int maxPoolWaiters = 0; - - - /** - * Pool timeout. - */ - long poolTimeout = 0L; - - /** - * @return the poolTimeout. - */ - public long getPoolTimeout() { - return poolTimeout; - } - /** - * @param poolTimeout the poolTimeout to set. - */ - public void setPoolTimeout(final long poolTimeout) { - this.poolTimeout = poolTimeout; - } - //List of string representing server refs for the object - List serverRefs = new ArrayList(); - /** - * Simple properties fo lb policy - */ - Set simpleProperties = new HashSet(); - /** - * The object's cluster name - */ - String clusterName = null; - - String action = null; - /** - * Checks if user has set a new Lb policy. - */ - String newLbPolicyCheck = null; - /** - * Value of the new Lb policy class. - */ - FormFile newLbPolicyClass = null; - - /** - * Checks if user has set a new LB strategy. - */ - String newLbStrategyCheck = null; - /** - * Value of the new Lb strategy. - */ - FormFile newLbStrategy = null; - /** - * current value of the html:select - */ - private String currentLBPolicySelect = null; - /** - * current value of the html:select - */ - private String currentLBStrategySelect = null; - /** - * current value for the object. - */ - private LBAttribute currentLBPolicy = new LBAttribute(); - /** - * current value for the object. - */ - private LBAttribute currentLBStrategy = new LBAttribute(); - - - /** - * Current selected simple property(stringified). Used for presentations purposes. - */ - private String currentSimpPropertySelect = null; - - - /** - * Value of current simple property. Used for presentations purposes. - */ - String currentSimpPropertyValue = null; - /** - * @return the currentSimpPropertyValue - */ - public String getCurrentSimpPropertyValue() { - return currentSimpPropertyValue; - } - /** - * @param currentSimpPropertyValue the currentSimpPropertyValue to set - */ - public void setCurrentSimpPropertyValue(final String currentSimpPropertyValue) { - this.currentSimpPropertyValue = currentSimpPropertyValue; - } - /** - * @return the currentSimpPropertySelect - */ - public String getCurrentSimpPropertySelect() { - return currentSimpPropertySelect; - } - /** - * @param currentSimpPropertySelect the currentSimpPropertySelect to set - */ - public void setCurrentSimpPropertySelect(final String currentSimpPropertySelect) { - this.currentSimpPropertySelect = currentSimpPropertySelect; - } - /** - * @return the itfName - */ - public String getItfName() { - return itfName; - } - /** - * @param itfName the itfName to set - */ - public void setItfName(final String itfName) { - this.itfName = itfName; - } - /** - * @return the maxPoolSize - */ - public int getMaxPoolSize() { - return maxPoolSize; - } - /** - * @param maxPoolSize the maxPoolSize to set - */ - public void setMaxPoolSize(final int maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - /** - * @return the minPoolSize - */ - public int getMinPoolSize() { - return minPoolSize; - } - /** - * @param minPoolSize the minPoolSize to set - */ - public void setMinPoolSize(final int minPoolSize) { - this.minPoolSize = minPoolSize; - } - - /** - * @return the minPoolSize - */ - public int getMaxPoolWaiters() { - return maxPoolWaiters; - } - /** - * @param minPoolSize the minPoolSize to set - */ - public void setMaxPoolWaiters(final int maxPoolWaiters) { - this.maxPoolWaiters = maxPoolWaiters; - } - /** - * @return the name - */ - public String getName() { - return name; - } - /** - * @param name the name to set - */ - public void setName(final String name) { - this.name = name; - } - /** - * @return the properties - */ - public Set getProperties() { - return properties; - } - /** - * @param properties the properties to set - */ - public void setProperties(final Set properties) { - this.properties = properties; - } - /** - * @return the serverRefs - */ - public List getServerRefs() { - return serverRefs; - } - /** - * @param serverRefs the serverRefs to set - */ - public void setServerRefs(final List serverRefs) { - this.serverRefs = serverRefs; - } - /** - * @return the simpleProperties - */ - public Set getSimpleProperties() { - return simpleProperties; - } - /** - * @param simpleProperties the simpleProperties to set - */ - public void setSimpleProperties(final Set simpleProperties) { - this.simpleProperties = simpleProperties; - } - /** - * @return the clusterName - */ - public String getClusterName() { - return clusterName; - } - /** - * @param clusterName the clusterName to set - */ - public void setClusterName(final String clusterName) { - this.clusterName = clusterName; - } - /** - * @return the action - */ - public String getAction() { - return action; - } - /** - * @param action the action to set - */ - public void setAction(final String action) { - this.action = action; - } - /** - * @return - */ - public String getNewLbPolicyCheck() { - return newLbPolicyCheck; - } - /** - * @param newLbPolicyCheck - */ - public void setNewLbPolicyCheck(final String newLbPolicyCheck) { - this.newLbPolicyCheck = newLbPolicyCheck; - } - public FormFile getNewLbPolicyClass() { - return newLbPolicyClass; - } - /** - * @param newLbPolicyClass - */ - public void setNewLbPolicyClass(final FormFile newLbPolicyClass) { - this.newLbPolicyClass = newLbPolicyClass; - } - /** - * @return - */ - public String getNewLbStrategyCheck() { - return newLbStrategyCheck; - } - /** - * @param newLbStrategyCheck - */ - public void setNewLbStrategyCheck(final String newLbStrategyCheck) { - this.newLbStrategyCheck = newLbStrategyCheck; - } - /** - * @return - */ - public FormFile getNewLbStrategy() { - return newLbStrategy; - } - /** - * @param newLbStrategy - */ - public void setNewLbStrategy(final FormFile newLbStrategy) { - this.newLbStrategy = newLbStrategy; - } - public LBAttribute getCurrentLBPolicy() { - return currentLBPolicy; - } - public void setCurrentLBPolicy(final LBAttribute currentLBPolicy) { - this.currentLBPolicy = currentLBPolicy; - this.currentLBPolicySelect = currentLBPolicy.getValue(); - } - public LBAttribute getCurrentLBStrategy() { - return currentLBStrategy; - } - public void setCurrentLBStrategy(final LBAttribute currentLBStrategy) { - this.currentLBStrategy = currentLBStrategy; - this.currentLBStrategySelect = currentLBStrategy.getValue(); - } - public String getCurrentLBPolicySelect() { - return currentLBPolicySelect; - } - public void setCurrentLBPolicySelect(final String currentLBPolicySelect) { - this.currentLBPolicySelect = currentLBPolicySelect; - } - public String getCurrentLBStrategySelect() { - return currentLBStrategySelect; - } - public void setCurrentLBStrategySelect(final String currentLBStrategySelect) { - this.currentLBStrategySelect = currentLBStrategySelect; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolAction.java deleted file mode 100644 index 57195bf381..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolAction.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.IOException; -import java.util.Iterator; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -public class CmiProtocolAction extends JonasBaseAction{ - - @Override - public ActionForward executeAction(ActionMapping mapping, ActionForm form, - HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - String forwardName = "displayCmiProtocolInfo"; - String objName = request.getParameter("protocol"); - CmiProtocolForm oForm = (CmiProtocolForm)form; - CmiForm currentCmiForm = (CmiForm)m_Session.getAttribute("currentCmiForm"); - try { - for (Iterator iterator = currentCmiForm.getProtocols().iterator(); iterator.hasNext();) { - Protocol elt = (Protocol) iterator.next(); - if (elt.getName().equals(objName)) { - oForm.getProtocol().setName(elt.getName()); - oForm.getProtocol().setIcon(elt.getIcon()); - oForm.getProtocol().setObjectName(elt.getObjectName()); - oForm.getProtocol().setProviders(elt.getProviders()); - break; - } - - } - } catch (Throwable t) { - // TODO: handle exception - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - return (mapping.findForward(forwardName)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolForm.java deleted file mode 100644 index 1a788163fe..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiProtocolForm.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import org.apache.struts.action.ActionForm; - -public class CmiProtocolForm extends ActionForm{ - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * Action to be performed. - */ - String action; - /** - * The protocol. - */ - Protocol protocol = new Protocol(); - /** - * Gets current action. - * @return current action. - */ - public String getAction() { - return action; - } - /** - * sets an action value. - * @param action action to set - */ - public void setAction(final String action) { - this.action = action; - } - /** - * Gets the protocol. - * @return Teh protocol. - */ - public Protocol getProtocol() { - return protocol; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerAction.java deleted file mode 100644 index fcb751b4cd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerAction.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.IOException; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class CmiServerAction extends JonasBaseAction { - @Override - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, HttpServletResponse p_Response) throws IOException, ServletException { - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String forwardName = "displayCmiServerInfo"; - p_Request.setAttribute("htmlTextLoadFactor", "htmlText"); - CmiServerForm cmiServerForm = (CmiServerForm) p_Form; - CmiForm currentCmiForm = (CmiForm) m_Session.getAttribute("currentCmiForm"); - try { - String serverUrl = p_Request.getParameter("providerUrl"); - if (serverUrl == null) { - serverUrl = cmiServerForm.getUrl(); - } - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, serverName); - if (JonasAdminJmx.hasMBeanName(cmiOn, serverName)) { - //display server info - if (cmiServerForm.getAction() != null) { - if ("loadfactor".equals(cmiServerForm.getAction())) { - String[] signature = {"java.lang.String", "java.lang.String"}; - String[] params = {cmiServerForm.getUrl(), cmiServerForm.getLoadFactor().toString()}; - JonasManagementRepr.invoke(cmiOn, "setLoadFactor", params, signature, serverName); - p_Request.setAttribute("htmlTextLoadFactor", "htmlTextChanged"); - }else { - //unknown action. - ; - } - } - - //always get server Infos. - String[] sign = {"java.lang.String"}; - String[] parameters = {serverUrl}; - cmiServerForm.setIsBlackListed((Boolean)JonasManagementRepr.invoke(cmiOn, "isServerBlackListed", parameters, sign, serverName)); - cmiServerForm.setUrl(serverUrl); - cmiServerForm.setProtocol(serverUrl.substring(0, serverUrl.indexOf(":"))); - Set currentProto = currentCmiForm.getProtocols(); - /** - * use this to get informations that change rarely. - */ - Provider currentServer = null; - for (Protocol protocol : currentProto) { - if (protocol.getName().equals(cmiServerForm.getProtocol())) { - List providers = protocol.getProviders(); - for (Iterator iterator = providers.iterator(); iterator - .hasNext();) { - currentServer = (Provider) iterator.next(); - if (currentServer.getUrl().equals(serverUrl)) { - break; - } - } - break; - } - } - cmiServerForm.setLoadFactor((Integer)JonasManagementRepr.invoke(cmiOn, "getLoadFactor", parameters, sign, serverName)); - - if (currentServer != null) { - /** - * server name is already set in ApplyCmiAction. let get it - */ - cmiServerForm.setName(currentServer.getName()); - } - - - }else { -// cmi mbean is not registered - p_Request.setAttribute("newcmi", false); - } - }catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(forwardName)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerForm.java deleted file mode 100644 index c1ce87b0e1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/CmiServerForm.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import org.apache.struts.action.ActionForm; - -public class CmiServerForm extends ActionForm { - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * The action to perform - */ - private String action; - /** - * The server Url. - */ - private String url; - /** - * The server name. - */ - private String name; - /** - * The server Object Name. - */ - private String ObjectName; - /** - * Load factor for the server. - */ - private Integer loadFactor; - /** - * Server protocol - */ - private String protocol = null; - /** - * True if the server is blacklisted. - */ - private Boolean isBlackListed = false; - - - public String getAction() { - return action; - } - public void setAction(String action) { - this.action = action; - } - public String getUrl() { - return url; - } - public void setUrl(String url) { - this.url = url; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getObjectName() { - return ObjectName; - } - public void setObjectName(String objectName) { - ObjectName = objectName; - } - public Integer getLoadFactor() { - return loadFactor; - } - public void setLoadFactor(Integer loadFactor) { - this.loadFactor = loadFactor; - } - public Boolean getIsBlackListed() { - return isBlackListed; - } - public void setIsBlackListed(Boolean isBlackListed) { - this.isBlackListed = isBlackListed; - } - public String getProtocol() { - return protocol; - } - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/LBAttribute.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/LBAttribute.java deleted file mode 100644 index 2507202c9e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/LBAttribute.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.webapp.jonasadmin.cmi; -import java.io.Serializable; -/** - * @author eyindanga - * - */ -public class LBAttribute implements Serializable { - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - /** - * Attribute key - */ - private String value; - /** - * Attribute value - */ - private String key; - - /** - * Default constructor - */ - public LBAttribute(){ - - } - /** - * Constructor using fields. - * @param value - * @param key - */ - public LBAttribute(final String value, final String key) { - super(); - this.value = value; - this.key = key; - } - /** - * @return - */ - public String getValue() { - return value; - } - /** - * @param value - */ - public void setValue(String value) { - this.value = value; - } - /** - * @return - */ - public String getKey() { - return key; - } - /** - * @param key - */ - public void setKey(String key) { - this.key = key; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Protocol.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Protocol.java deleted file mode 100644 index 65e92eb710..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Protocol.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.Serializable; -import java.util.ArrayList; - -/** - * - * @author eyindanga. - * - */ -public class Protocol implements Serializable { - /** - * Serial Id. - */ - private static final long serialVersionUID = 1L; - /** - * Protocol name. - */ - private String name; - /** - * Protocol icon. - */ - private String icon = null; - /** - * Protocol provider urls. The master view should show all providers for a given protocol - */ - private ArrayList providers = new ArrayList(); - /** - * ObjectName of the protocol. - */ - private String objectName = null; - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - /** - * - * @return - */ - public String getIcon() { - return icon; - } - /** - * @param icon - */ - public void setIcon(String icon) { - this.icon = icon; - } - /** - * @return The providers for the given url. - */ - public ArrayList getProviders() { - return providers; - } - /** - * Set the providers. - * @param providers - */ - public void setProviders(ArrayList providers) { - this.providers = providers; - } - public String getObjectName() { - return objectName; - } - public void setObjectName(String objectName) { - this.objectName = objectName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Provider.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Provider.java deleted file mode 100644 index 9244ad2c1a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/cmi/Provider.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.cmi; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - -/** - * @author eyindanga - * - */ -public class Provider implements Serializable { - /** - * Serial Id. - */ - private static final long serialVersionUID = 1L; - /** - * The provider url. - */ - String url; - - /** - * The server name. - */ - String name; - - /** - * Object contained in the registry. - */ - Set listNames = new HashSet(); - - private boolean isBlackListed; - - - /**Gets Provider url. - * @return - */ - public String getUrl() { - return url; - } - /** - * Sets the provider url. - */ - public void setUrl(final String url) { - this.url = url; - } - /** - * Gets the names of the objects contained in the registry. - */ - public Set getListNames() { - return listNames; - } - /** - * Sets the names of the objects contained in the registry. - */ - public void setListNames(final Set listNames) { - this.listNames = listNames; - } - public String getName() { - return name; - } - public void setName(final String name) { - this.name = name; - } - public boolean getIsBlackListed() { - return isBlackListed; - } - public void setIsBlackListed(final boolean isBlacklisted) { - this.isBlackListed = isBlacklisted; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/BeanComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/BeanComparator.java deleted file mode 100644 index 3b1ad29323..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/BeanComparator.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import java.util.Comparator; - -import org.apache.commons.beanutils.PropertyUtils; - -/** - * BeanComparator is a comparator for beans. - * It's used to compare a bean with its own properties or with its own string value - * (return by the toString() method). - * - * @author Michel-Ange ANTON - */ - -public class BeanComparator implements Comparator { - -// --------------------------------------------------------- Instance Variables - - private String[] m_Orders = null; - -// --------------------------------------------------------- Constructors - - /** - * Comparator by default (use the toString() methods). - */ - public BeanComparator() { - m_Orders = null; - } - - /** - * Comparator in order of the properties. - * - * @param p_Orders A array of the names of the properties - */ - public BeanComparator(String[] p_Orders) { - m_Orders = p_Orders; - } - -// --------------------------------------------------------- Public Methods - - /** - * Compare two beans instances. - * - * @param p_O1 The first bean to compare - * @param p_O2 The second bean to compare - * @return 0 if equals, < 0 if first bean lower than second bean, > 0 if first bean upper than second bean. - */ - public int compare(Object p_O1, Object p_O2) { - if (m_Orders != null) { - return compareOrder(p_O1, p_O2); - } - return compareDefault(p_O1, p_O2); - } - - /** - * Indentical bean. - * - * @param p_Obj The bean to compare. - * @return True if identical. - */ - public boolean equals(Object p_Obj) { - if (this.getClass().getName().equals(p_Obj.getClass().getName())) { - return (compare(this, p_Obj) == 0); - } - return false; - } - - /** - * Compare the null of two objects. - * - * @param p_O1 The first object to compare - * @param p_O2 The second object to compare - * @return 0 if the two are null or the two not null, < 0 if second object is null, > 0 if first object is null. - */ - public static int compareNull(Object p_O1, Object p_O2) { - int iRet = 0; - if (p_O1 != p_O2) { - if (p_O1 == null) { - iRet = 1; - } - else if (p_O2 == null) { - iRet = -1; - } - } - return iRet; - } - - /** - * Compare two strings with the ignore case - * but if is identical, compare normaly with case. - * - * @param p_O1 The first string to compare - * @param p_O2 The second string to compare - * @return 0 if equals, < 0 if first string lower than second string, > 0 if first string upper than second string. - */ - public static int compareString(String p_S1, String p_S2) { - int iRet = compareNull(p_S1, p_S2); - if (iRet == 0) { - try { - iRet = p_S1.compareToIgnoreCase(p_S2); - if (iRet == 0) { - iRet = p_S1.compareTo(p_S2); - } - } - catch (NullPointerException e) { - iRet = 0; - } - } - return iRet; - } - -// --------------------------------------------------------- Protected Methods - - /** - * Compare the beans like a string (used the toString() method of the object). - * Used when order is unknown. - * - * @param p_O1 The first bean to compare - * @param p_O2 The second bean to compare - * @return 0 if equals, < 0 if first bean lower than second bean, > 0 if first bean upper than second bean. - */ - protected int compareDefault(Object p_O1, Object p_O2) { - int iRet = compareNull(p_O1, p_O2); - if (iRet == 0) { - iRet = compareString(p_O1.toString(), p_O2.toString()); - } - return iRet; - } - - /** - * Compare the beans with the properties in order given. - * Used when order is known. - * - * @param p_O1 The first bean to compare - * @param p_O2 The second bean to compare - * @return 0 if equals, < 0 if first bean lower than second bean, > 0 if first bean upper than second bean. - */ - protected int compareOrder(Object p_O1, Object p_O2) { - int iRet = 0; - Object oValue1, oValue2; - try { - for (int i = 0; i < m_Orders.length; i++) { - // Get values - oValue1 = PropertyUtils.getProperty(p_O1, m_Orders[i]); - oValue2 = PropertyUtils.getProperty(p_O2, m_Orders[i]); - // Compare - iRet = compareNull(oValue1, oValue2); - if (iRet == 0) { - try { - iRet = compareString(oValue1.toString(), oValue2.toString()); - } - catch (NullPointerException e) { - iRet = 0; - } - } - // Continue in order if always equals - if (iRet != 0) { - break; - } - } - } - catch (Exception e) { - System.err.println("[" + e.getClass().getName() + "] " + e.getMessage()); - iRet = 0; - } - return iRet; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ItemsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ItemsForm.java deleted file mode 100644 index 6f87972502..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ItemsForm.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ItemsForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] selectedItemsArray = new String[0]; - private ArrayList selectedItemsList = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItemsArray = new String[0]; - } - -// --------------------------------------------------------- Properties Methods - - public String[] getSelectedItemsArray() { - return selectedItemsArray; - } - - public void setSelectedItemsArray(String[] selectedItemsArray) { - this.selectedItemsArray = selectedItemsArray; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public ArrayList getSelectedItemsList() { - return selectedItemsList; - } - - public void setSelectedItemsList(ArrayList selectedItemsList) { - this.selectedItemsList = selectedItemsList; - } - - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/LabelValueByLabelComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/LabelValueByLabelComparator.java deleted file mode 100644 index b83af5a012..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/LabelValueByLabelComparator.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import java.util.Comparator; - -import org.ow2.jonas.webapp.taglib.LabelValueBean; - - - -/** - * @author Michel-Ange ANTON - */ -public class LabelValueByLabelComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - LabelValueBean o1 = (LabelValueBean) p_O1; - LabelValueBean o2 = (LabelValueBean) p_O2; - return o1.getLabel().compareToIgnoreCase(o2.getLabel()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof LabelValueBean) { - return (compare(this, p_Obj) == 0); - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItem.java deleted file mode 100644 index 5c04d57a8b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItem.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Adriana.Danes@objectweb.org - * - * ModuleItem objects are used to show management information concerning - * modules in a J2EEApplication. - */ -public class ModuleItem implements NameItem { - /** - * Module name - */ - private String name = null; - /** - * OBJECT_NAME of the J2EEDeployedObject corresponding to the module - */ - private String objectName = null; - /** - * Path of the source file - */ - private String filePath = null; - - /** - * Default constructor - */ - public ModuleItem() { - } - /** - * Constructor - * @param name the module's name - * @param objectName the OBJECT_NAME of the J2EEDeployedObject corresponding to the module - * @param filePath the path of the source file - */ - public ModuleItem(String name, String objectName, String filePath) { - this.name = name; - this.objectName = objectName; - this.filePath = filePath; - } - - /** - * @return Returns the module's name. - */ - public String getName() { - return name; - } - /** - * @param name the module name - */ - public void setName(String name) { - this.name = name; - } - /** - * @return Returns the OBJECT_NAME of the corresponding MBean. - */ - public String getObjectName() { - return objectName; - } - /** - * @param objectName The OBJECT_NAME to set. - */ - public void setObjectName(String objectName) { - this.objectName = objectName; - } - /** - * @return Returns the filePath. - */ - public String getFilePath() { - return filePath; - } - /** - * @param filePath The filePath to set. - */ - public void setFilePath(String filePath) { - this.filePath = filePath; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItemByName.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItemByName.java deleted file mode 100644 index 24481b430f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ModuleItemByName.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import java.util.Comparator; - -import org.ow2.jonas.webapp.jonasadmin.common.ModuleItem; -/** - * @author Adriana.Danes@objectweb.org - * - * ModuleItem objects are used to show management information concerning - * modules in a J2EEApplication. - */ -public class ModuleItemByName implements Comparator { - // --------------------------------------------------------- Public Methods - - public int compare(Object pO1, Object pO2) { - ModuleItem oContainer1 = (ModuleItem) pO1; - ModuleItem oContainer2 = (ModuleItem) pO2; - if ((oContainer1.getName() == null) || (oContainer2.getName() == null)) { - if ((oContainer1.getName() == null) && (oContainer2.getName() == null)) { - return 0; - } else if ((oContainer1.getName() == null) && (oContainer2.getName() != null)) { - return 1; - } else { - return -1; - } - } - return oContainer1.getName().compareToIgnoreCase(oContainer2.getName()); - } - - public boolean equals(Object pObj) { - if (pObj instanceof ModuleItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ObjectNameComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ObjectNameComparator.java deleted file mode 100644 index 7bc3b9d947..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/ObjectNameComparator.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.common; - -import java.util.Comparator; - -import javax.management.ObjectName; - -/** - * @author Michel-Ange ANTON - */ -public class ObjectNameComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - //return p_O1.toString().compareTo(p_O2.toString()); - ObjectName o1 = (ObjectName) p_O1; - ObjectName o2 = (ObjectName) p_O2; - int iRet = o1.getDomain().compareToIgnoreCase(o2.getDomain()); - if (iRet == 0) { - iRet = o1.getDomain().compareTo(o2.getDomain()); - if (iRet == 0) { - iRet = o1.toString().compareToIgnoreCase(o2.toString()); - } - } - return iRet; - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof ObjectName) { - return (compare(this, p_Obj) == 0); - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/TargetItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/TargetItem.java deleted file mode 100644 index d2530bfa3a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/common/TargetItem.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.common; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.mbean.ObjectNameItem; - -public class TargetItem extends ObjectNameItem { - /** - * Target state - */ - private String state = null; - - public TargetItem(final ObjectName pObjectName) { - super(pObjectName); - } - - public String getState() { - return state; - } - - public void setState(final String state) { - this.state = state; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployAction.java deleted file mode 100644 index c9e5ace303..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange Anton - */ -public class ApplyDeployAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String sForward = "Deploy Confirm"; - - // Form used - DeployForm oForm = (DeployForm) p_Form; - try { - oForm.setListDeploy(Jlists.getArrayList(oForm.getDeploy(), Jlists.SEPARATOR)); - oForm.setListUndeploy(Jlists.getArrayList(oForm.getUndeploy(), Jlists.SEPARATOR)); - - ArrayList alAdd = new ArrayList(oForm.getListDeploy()); - alAdd.removeAll(JonasAdminJmx.getDeployed(oForm.getListDeployed())); - oForm.setListAdd(alAdd); - - ArrayList alRemove = new ArrayList(oForm.getListUndeploy()); - alRemove.retainAll(JonasAdminJmx.getDeployed(oForm.getListDeployed())); - oForm.setListRemove(alRemove); - - oForm.setConfirm(((alAdd.size() > 0) || (alRemove.size() > 0))); - if (!oForm.isConfirm()) { - m_Errors.add("error.deploy.noselect", new ActionMessage("error.deploy.noselect")); - saveErrors(p_Request, m_Errors); - sForward = getForwardEdit(); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployConfirmAction.java deleted file mode 100644 index 8511ea386e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDeployConfirmAction.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -/** - * @author Michel-Ange Anton - */ - -public class ApplyDeployConfirmAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - ArrayList al; - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - - // Form used - DeployForm oForm = (DeployForm) p_Form; - - boolean undeployOp = false; - - // Undeploy with Remove list - al = oForm.getListRemove(); - for (int i = 0; i < al.size(); i++) { - try { - String element = al.get(i).toString(); - String elementPath = JonasAdminJmx.findDeployedPath(oForm.getListDeployed(), element); - undeploy(elementPath); - undeployOp = true; - if (isDeployment(element)) { - ArrayList listDeploy = getListDeployedFiles(); - oForm.setListDeploy(listDeploy); - } - } catch (Exception e) { - m_Errors.add("error.undeploy", new ActionMessage("error.undeploy", al.get(i).toString() - , e.getMessage())); - saveErrors(p_Request, m_Errors); - } - } - - // Call garbage collector after undeployment - if (al.size() > 0) { - try { - runGC(); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - } - } - - // Deploy with Add list - al = oForm.getListAdd(); - for (int i = 0; i < al.size(); i++) { - try { - deploy(al.get(i).toString()); - } catch (Exception e) { - m_Errors.add("error.deploy", new ActionMessage("error.deploy", al.get(i).toString() - , e.getMessage())); - saveErrors(p_Request, m_Errors); - } - } - - // Build correct lists after deployment - try { - // Load the new list of deployed files - oForm.setListDeployed(getListDeployedFiles()); - // Build Add list (with items in error status else list empty) - ArrayList alAdd = new ArrayList(oForm.getListDeploy()); - if (undeployOp) { - alAdd.removeAll(oForm.getListDeployed()); - } else { - alAdd.removeAll(JonasAdminJmx.getDeployed(oForm.getListDeployed())); - } - oForm.setListAdd(alAdd); - // Build Remove list (with items in error status else list empty) - ArrayList alRemove = new ArrayList(oForm.getListUndeploy()); - alRemove.retainAll(oForm.getListDeployed()); - oForm.setListRemove(alRemove); - // Confirm status - oForm.setConfirm((m_Errors.size() == 0) && ((alAdd.size() > 0) || (alRemove.size() > 0))); - oForm.setConfirm(false); - // Refresh Tree in memory - refreshTree(p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Deploy Confirm")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployAction.java deleted file mode 100644 index 7a1f488d8c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployAction.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeMap; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Patrick Smith - * @author Gregory Lapouchnian - * @author Adriana Danes - */ -public class ApplyDomainDeployAction extends BaseDeployAction { - - // --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - String sForwardDeploy = "Domain Deploy Confirm"; - String sForwardUndeploy = "Domain Undeploy Confirm"; - String sForward = null; - - // Form used - DomainDeployForm oForm = (DomainDeployForm) p_Form; - oForm.setDeploymentInProgress(false); - oForm.setDeploymentCompleted(false); - - try { - - // set the array lists of selected apps and targets based on - // the selections returned by struts - ArrayList appList = new ArrayList(); - ArrayList targetList = new ArrayList(); - ArrayList targetNamesList = new ArrayList(); - - ArrayList allPossibleTargets = oForm.getListTargetNames(); - - int clustIndex = 0; - boolean foundClust = false; - for (int i = 0; i < oForm.getTargetSelected().length; i++) { - //System.out.println(oForm.getTargetSelected()[i]); - String selectedTargetON = oForm.getTargetSelected()[i]; - if (!targetList.contains(selectedTargetON)) { - targetList.add(selectedTargetON); - ObjectName selectedTargetOn = ObjectName.getInstance(selectedTargetON); - String targetNameToPrint = selectedTargetOn.getKeyProperty("name"); - targetNamesList.add(targetNameToPrint); - } - } - - for (int i = 0; i < oForm.getDeploySelected().length; i++) { - appList.add(oForm.getDeploySelected()[i]); - } - - oForm.setListDeploy(appList); - oForm.setListTargetsSelected(targetList); - oForm.setListTargetSelectedNames(targetNamesList); - - // make sure that the action and the replacement option are transferred - // to the next action - oForm.setSelectedAction(oForm.getSelectedOption()); - oForm.setReplacementOption(oForm.getReplaceOnTarget()); - - // Fill up report with initial empty value for each application - Map blankReport = new TreeMap(); - for (int i = 0; i < appList.size(); i++) { - HashMap appReport = new HashMap(); - blankReport.put(appList.get(i), appReport); - } - oForm.setReports(blankReport); - - // at least one entry must be selected from the list of servers and - // from the list of applications - oForm.setConfirm(oForm.getDeploySelected().length > 0 - && oForm.getTargetSelected().length > 0); - - if (!oForm.isConfirm()) { - m_Errors.add("error.domain.deploy.noselect", - new ActionMessage("error.domain.deploy.noselect")); - saveErrors(p_Request, m_Errors); - sForward = getForwardEdit(); - } - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - if (oForm.getSelectedAction().equals(DomainDeployForm.UNDEPLOY)) { - sForward = sForwardUndeploy; - } else { - sForward = sForwardDeploy; - } - // Forward to the jsp. - return (p_Mapping.findForward(sForward)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployConfirmAction.java deleted file mode 100644 index b76cb7c29a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyDomainDeployConfirmAction.java +++ /dev/null @@ -1,257 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.TreeMap; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Patrick Smith - * @author Gregory Lapouchnian - * @author Adriana Danes - */ -public class ApplyDomainDeployConfirmAction extends BaseDeployAction { - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - DomainDeployForm oForm = (DomainDeployForm) p_Form; - boolean deploymentInProgress = false; - Map reports = new TreeMap(); - try { - ObjectName domainOn = J2eeObjectName.J2EEDomain(domainName); - // apps to be deployed on the selected targets - ArrayList alApps = oForm.getListDeploy(); - for (int i = 0; i < alApps.size(); i++) { - String app = (String) alApps.get(i); - String appPath = JonasAdminJmx.findDeployedPath(oForm.getListDeployed(), app); - if (!oForm.getDeploymentInProgress()) { - String selectedAction = oForm.getSelectedAction(); - boolean replaceExisting = oForm.getReplacementOption(); - boolean autoload = oForm.isAutoload(); - ArrayList selectedTargets = oForm.getListTargetsSelected(); - doSelectedOperation(appPath, selectedAction, replaceExisting, autoload, selectedTargets, domainName, currentServerName); - } - Map appReports = new HashMap(); - reports.put(app, appReports); - // Get effective target server list - Object[] asParam = {app}; - String[] asSignature = {"java.lang.String"}; - String[] targets = (String[]) JonasManagementRepr.invoke(domainOn - , "getDeployServers", asParam, asSignature - , currentServerName); - for (int j = 0; j < targets.length; j++) { - String target = targets[j]; - Object[] as1Param = {app, target}; - String[] as1Signature = {"java.lang.String", "java.lang.String"}; - String status = (String) JonasManagementRepr.invoke(domainOn - , "getDeployState", as1Param, as1Signature - , currentServerName); - if (status.startsWith("IN PROGR")) { - deploymentInProgress = true; - } - if (status.startsWith("FAIL")) { - String error = getError(app, target, currentServerName); - status = status + error; - } - appReports.put(target, status); - } - } - oForm.setDeploymentInProgress(deploymentInProgress); - if (!deploymentInProgress) { - oForm.setDeploymentCompleted(true); - resetReport(currentServerName); - } - oForm.setReports(reports); - } catch (Throwable t) { - oForm.setException(true); - addGlobalError(t); - saveErrors(p_Request, m_Errors); - } - // Forward to the jsp. - return (p_Mapping.findForward("Domain Deploy Progress")); - } - - private String getError(String app, String target, String serverName) throws MalformedObjectNameException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - ObjectName on = J2eeObjectName.J2EEDomain(domainName); - String opName = "getErrorMessage"; - Object[] params = new Object[] {app, target}; - String[] sig = new String[] {"java.lang.String", "java.lang.String"}; - return (String) JonasManagementRepr.invoke(on, opName, params, sig, serverName); - } - - - /** - * A custom thread class used for doing the deployment operations. - */ - protected class DeployThread extends Thread { - - protected ActionMapping p_Mapping; - - protected ActionForm p_Form; - - protected HttpServletRequest p_Request; - - protected HttpServletResponse p_Response; - - public DeployThread(ActionMapping p_Mapping, ActionForm p_Form, - HttpServletRequest p_Request, HttpServletResponse p_Response) { - this.p_Mapping = p_Mapping; - this.p_Form = p_Form; - this.p_Request = p_Request; - this.p_Response = p_Response; - } - - } - - /** - * Deploy the module with name 'appName' on the target - * The operation to invoke has the same name: 'deployModule' for both - * ServerProxy or LogicalCluster. - * @param appName the name of the application - * @param on the ObjectNamer of the target (ServerProxy if server, LogicalCluster if cluster) - * rejected - */ - private void doDeployOperation(String appName, ObjectName on, String serverName) { - String opName = "deployModule"; - Object[] params = new Object[] {appName}; - String[] sig = new String[] {"java.lang.String"}; - JonasManagementRepr.invoke(on, opName, params, sig, serverName); - } - /** - * Undeploy the module with name 'appName' from the target - * The operation to invoke has the same name: 'undeployModule' for both - * ServerProxy or LogicalCluster. - * @param appName the name of the application - * @param on the ObjectNamer of the target (ServerProxy if server, LogicalCluster if cluster) - * rejected - */ - private void doUndeployOperation(String appName, ObjectName on, String serverName) { - String opName = "undeployModule"; - Object[] params = new Object[] {appName}; - String[] sig = new String[] {"java.lang.String"}; - JonasManagementRepr.invoke(on, opName, params, sig, serverName); - } - - /** - * Upload the module with name 'appName' on the target - * The operation to invoke has the same name: 'uploadFile' for both - * ServerProxy or LogicalCluster. - * @param appName the name of the application - * @param on the ObjectNamer of the target (ServerProxy if server, LogicalCluster if cluster) - * rejected - */ - private void doUploadOperation(String appName, boolean replaceExisting, boolean autoload, ObjectName on, String serverName) { - if (autoload) { - //System.out.println("Should call uploadFile with autoload option"); - } - String opName = "uploadFile"; - Object[] params = new Object[] {appName, new Boolean(replaceExisting)}; - String[] sig = new String[] {"java.lang.String", "boolean"}; - JonasManagementRepr.invoke(on, opName, params, sig, serverName); - } - /** - * Upload and deploy the module with name 'appName' on the target - * The operation to invoke has the same name: 'uploadDeployModule' for both - * ServerProxy or LogicalCluster. - * @param appName the name of the application - * @param on the ObjectNamer of the target (ServerProxy if server, LogicalCluster if cluster) - * rejected - */ - private void doUploadDeployOperation(String appName, boolean replaceExisting, boolean autoload, ObjectName on, String serverName) { - String opName = "uploadDeployModule"; - Object[] params = new Object[] {appName, new Boolean(replaceExisting)}; - String[] sig = new String[] {"java.lang.String", "boolean"}; - JonasManagementRepr.invoke(on, opName, params, sig, serverName); - } - - private void resetReport(String serverName) throws MalformedObjectNameException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - ObjectName on = J2eeObjectName.J2EEDomain(domainName); - String opName = "forgetAllDeploy"; - JonasManagementRepr.invoke(on, opName, null, null, serverName); - } - - /** - * Do selected deployment action with the application named 'appName' on the selected targets - * @param appName the name of the application - * @param action action to do - * @param replaceExisting true if must replace the file in case of a 'distribute' operation - * @param targets the targets to deployment on - * @param currentServerName the currently managed server - */ - private void doSelectedOperation(String appName, String action, boolean replaceExisting, boolean autoload, ArrayList targets, - String domainName, String currentServerName) - throws Exception { - Iterator it = targets.iterator(); - while (it.hasNext()) { - ObjectName targetOn = ObjectName.getInstance((String) it.next()); - String j2eeType = targetOn.getKeyProperty("j2eeType"); - String serverName = null; - if ("J2EEServer".equals(j2eeType)) { - // The target server - serverName = targetOn.getKeyProperty("name"); - targetOn = JonasObjectName.serverProxy(domainName, serverName); - } - if (action.equals(DomainDeployForm.DEPLOY)) { - /*result = */doDeployOperation(appName, targetOn, currentServerName); - } else if (action.equals(DomainDeployForm.UPLOAD)) { - /*result = */doUploadOperation(appName, replaceExisting, autoload, targetOn, currentServerName); - } else if (action.equals(DomainDeployForm.UPLOADDEPLOY)) { - /*result = */doUploadDeployOperation(appName, replaceExisting, autoload, targetOn, currentServerName); - } else if (action.equals(DomainDeployForm.UNDEPLOY)) { - /*result = */doUndeployOperation(appName, targetOn, currentServerName); - } - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveAction.java deleted file mode 100644 index fa45a05ce5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveAction.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; -import java.util.Arrays; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * Set the list of removed modules choosen by the user - * @author Florent Benoit - */ -public class ApplyRemoveAction extends BaseDeployAction { - - /** - * Execute the action with given params - * @param actionMapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * @return a forward when action is finished - * @exception ServletException if business logic throws an exception - */ - public ActionForward executeAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, - HttpServletResponse response) throws ServletException { - - String sForward = "Remove Confirm"; - - // Form used - RemoveForm removeForm = (RemoveForm) actionForm; - try { - - removeForm.setListToBeRemoved(Arrays.asList(removeForm.getRemoveSelected())); - removeForm.setListRemoved(new ArrayList()); - removeForm.setConfirm(removeForm.getRemoveSelected().length > 0); - if (!removeForm.isConfirm()) { - m_Errors.add("error.remove.noselect", new ActionMessage("error.remove.noselect")); - saveErrors(request, m_Errors); - sForward = "Remove"; - } - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (actionMapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveConfirmAction.java deleted file mode 100644 index c7f693e444..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyRemoveConfirmAction.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * Remove selected modules (after user confirm) - * @author Florent Benoit - */ - -public class ApplyRemoveConfirmAction extends BaseDeployAction { - - /** - * Execute the action with given params - * @param actionMapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * @return a forward when action is finished - * @exception ServletException if business logic throws an exception - */ - public ActionForward executeAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, - HttpServletResponse response) throws ServletException { - - String sForward = "Remove Confirm"; - - // Form used - RemoveForm removeForm = (RemoveForm) actionForm; - List updatedRemovedList = new ArrayList(removeForm.getListToBeRemoved()); - // list of selected modules - for (Iterator it = removeForm.getListToBeRemoved().iterator(); it.hasNext();) { - String fileName = (String) it.next(); - try { - boolean b = removeFile(fileName); - if (b) { - updatedRemovedList.remove(fileName); - removeForm.getListRemoved().add(fileName); - } else { - m_Errors.add("error.remove", new ActionMessage("error.remove", "File '" + fileName + "' has not be removed.")); - saveErrors(request, m_Errors); - } - } catch (Exception e) { - m_Errors.add("error.remove", new ActionMessage("error.remove", fileName, e.getMessage())); - saveErrors(request, m_Errors); - } - } - // Elements removed should be exclude of the list - removeForm.setListToBeRemoved(updatedRemovedList); - - // Confirm status - removeForm.setConfirm(false); - // Refresh Tree in memory - try { - refreshTree(request); - } catch (Exception e) { - addGlobalError(e); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (actionMapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyUploadAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyUploadAction.java deleted file mode 100644 index 029f045dd0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/ApplyUploadAction.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.ByteArrayOutputStream; -import java.io.InputStream; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.upload.FormFile; - - -/** - * Upload a file to the J2EE server. - * @author Florent Benoit - */ -public class ApplyUploadAction extends BaseDeployAction { - - /** - * Size of Buffer - */ - private static final int BUFFER_SIZE = 1024; - - /** - * Execute the action with given params - * @param actionMapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * @return a forward when action is finished - * @exception ServletException if business logic throws an exception - */ - public ActionForward executeAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, - HttpServletResponse response) throws ServletException { - String sForward = "Upload Result"; - - if (!(actionForm instanceof UploadForm)) { - Throwable t = new Throwable("Action not instance of UploadForm"); - addGlobalError(t); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Global Error")); - } - - // this line is here for when the input page is upload-utf8.jsp, - // it sets the correct character encoding for the response - String encoding = request.getCharacterEncoding(); - if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) { - response.setContentType("text/html; charset=utf-8"); - } - - UploadForm uploadForm = (UploadForm) actionForm; - - // indicated whether to return to regular or domain deployment page - uploadForm.setIsDomain(isDomain()); - - // retrieve the file representation - FormFile file = uploadForm.getUploadedFile(); - - // retrieve the file name - String fileName = file.getFileName(); - - // retrieve the content type - String contentType = file.getContentType(); - - // retrieve the file size - String size = (file.getFileSize() + " bytes"); - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // J2EE server MBean - ObjectName j2eeServer = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName(), serverName); - - // invoke method on the MBean - String sentFile = null; - InputStream inputStream = null; - ByteArrayOutputStream baos = null; - int len; - try { - inputStream = file.getInputStream(); - baos = new ByteArrayOutputStream(); - byte[] buf = new byte[BUFFER_SIZE]; - // Read bytes - while ((len = inputStream.read(buf)) > 0) { - baos.write(buf, 0, len); - } - byte[] bytesOfFile = baos.toByteArray(); - Object[] param = new Object[] {bytesOfFile, fileName, Boolean.valueOf(uploadForm.isOverwrite())}; - String[] signature = {"[B", "java.lang.String", "boolean"}; - sentFile = (String) JonasManagementRepr.invoke(j2eeServer, "sendFile", param, signature, serverName); - } catch (Exception e) { - addGlobalError(e); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Upload")); - } finally { - try { - if (inputStream != null) { - inputStream.close(); - } - if (baos != null) { - baos.close(); - } - } catch (Exception e) { - getServlet().log("Cannot close streams", e); - } - - } - - // place the data into the request for retrieval for display - request.setAttribute("fileName", fileName); - request.setAttribute("contentType", contentType); - request.setAttribute("size", size); - request.setAttribute("data", "File uploaded in '" + sentFile + "'"); - // destroy the temporary file created - file.destroy(); - - // Forward to the jsp. - return (actionMapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/BaseDeployAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/BaseDeployAction.java deleted file mode 100644 index f515bc0642..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/BaseDeployAction.java +++ /dev/null @@ -1,865 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Properties; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.AdminJmxHelper; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.manager.ManagementEntryPoint; -import org.ow2.jonas.lib.management.extensions.util.FileManagementUtils; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.JonasTreeBuilder; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * @author Michel-Ange ANTON - */ - -abstract public class BaseDeployAction extends JonasBaseAction { - -// --------------------------------------------------------- Protected Methods - - protected int getCurrentJonasDeployment() - throws Exception { - int iRet = 0; - iRet = m_WhereAreYou.getCurrentJonasDeploymentType(); - return iRet; - } - - protected void setCurrentJonasDeployment(final HttpServletRequest p_Request) - throws Exception { - int iDeployment = 0; - String sDeployment = p_Request.getParameter("type"); - if (sDeployment != null) { - // Dispatch - if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING)) { - iDeployment = WhereAreYou.DEPLOYMENT; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_EAR)) { - iDeployment = WhereAreYou.DEPLOYMENT_EAR; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_JAR)) { - iDeployment = WhereAreYou.DEPLOYMENT_JAR; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_WAR)) { - iDeployment = WhereAreYou.DEPLOYMENT_WAR; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_RAR)) { - iDeployment = WhereAreYou.DEPLOYMENT_RAR; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_DATASOURCE)) { - iDeployment = WhereAreYou.DEPLOYMENT_DATASOURCE; - } else if (sDeployment.equals(WhereAreYou.DEPLOYMENT_STRING_MAILFACTORY)) { - iDeployment = WhereAreYou.DEPLOYMENT_MAIL; - } else if (sDeployment.equals(WhereAreYou.DOMAIN_DEPLOYMENT_STRING)) { - iDeployment = WhereAreYou.DOMAIN_DEPLOYMENT; - } else if (sDeployment.equals(WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR)) { - iDeployment = WhereAreYou.DOMAIN_DEPLOYMENT_EAR; - } else if (sDeployment.equals(WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR)) { - iDeployment = WhereAreYou.DOMAIN_DEPLOYMENT_JAR; - } else if (sDeployment.equals(WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR)) { - iDeployment = WhereAreYou.DOMAIN_DEPLOYMENT_WAR; - } else if (sDeployment.equals(WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR)) { - iDeployment = WhereAreYou.DOMAIN_DEPLOYMENT_RAR; - } else { - throw new Exception("Unknown type deployment"); - } - // Storing - m_WhereAreYou.setCurrentJonasDeploymentType(iDeployment); - } - } - - /** - * Return the edit forward string. - * - * @return The edit forward string - */ - protected String getForwardEdit() { - String sForward = null; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT: - case WhereAreYou.DEPLOYMENT_EAR: - case WhereAreYou.DEPLOYMENT_JAR: - case WhereAreYou.DEPLOYMENT_WAR: - case WhereAreYou.DEPLOYMENT_RAR: - sForward = "Deploy"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - case WhereAreYou.DOMAIN_DEPLOYMENT: - sForward = "Domain Deploy"; - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - sForward = "Deploy Datasource"; - break; - case WhereAreYou.DEPLOYMENT_MAIL: - sForward = "Deploy Mail Factory"; - break; - } - } - catch (Exception e) { - // none - } - return sForward; - } - - protected boolean isDomain() { - boolean result = false; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - result = true; - break; - } - } catch (Exception e) { - // none - } - return result; - } - - protected boolean isConfigurable() { - boolean result = false; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - case WhereAreYou.DEPLOYMENT_RAR: - result = true; - break; - } - } catch (Exception e) { - // none - } - return result; - } - - protected boolean isModule() { - boolean result = false; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT_JAR: - case WhereAreYou.DEPLOYMENT_WAR: - case WhereAreYou.DEPLOYMENT_EAR: - case WhereAreYou.DEPLOYMENT_RAR: - case WhereAreYou.DEPLOYMENT: - result = true; - break; - } - } catch (Exception e) { - // none - } - return result; - } - - protected String getDomainDeploymentMethodName() { - String result = ""; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - result = "deployEar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - result = "deployJar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - result = "deployWar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - result = "deployRar"; - break; - } - } catch (Exception e) { - // none - } - return result; - } - - protected String getDomainUploadDeployMethodName() { - String result = ""; - try { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - result = "uploadDeployEar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - result = "uploadDeployJar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - result = "uploadDeployWar"; - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - result = "uploadDeployRar"; - break; - } - } catch (Exception e) { - // none - } - return result; - } - - /** - * Return the list of deployable files in using the type of current - * deployment storing in WhereAreYou instance in session. - * - * @return The list of deployable files - * @throws Exception - */ - protected ArrayList getListDeployableFiles() - throws Exception { - ArrayList al = null; - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT: - al = JonasAdminJmx.getFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_EAR: - al = JonasAdminJmx.getEarFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_RAR: - al = JonasAdminJmx.getRarFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_JAR: - al = JonasAdminJmx.getJarFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_WAR: - al = JonasAdminJmx.getWarFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT: - al = JonasAdminJmx.getFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - al = JonasAdminJmx.getEarFilesDeployable(domainName, serverName); - al.addAll(JonasAdminJmx.getEarFilesDeployed(domainName, serverName)); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - al = JonasAdminJmx.getJarFilesDeployable(domainName, serverName); - al.addAll(JonasAdminJmx.getJarFilesDeployed(domainName, serverName)); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - al = JonasAdminJmx.getWarFilesDeployable(domainName, serverName); - al.addAll(JonasAdminJmx.getWarFilesDeployed(domainName, serverName)); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - al = JonasAdminJmx.getRarFilesDeployable(domainName, serverName); - al.addAll(JonasAdminJmx.getRarFilesDeployed(domainName, serverName)); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - al = JonasAdminJmx.getDatasourceFilesDeployable(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - al = JonasAdminJmx.getMailFilesDeployable(domainName, serverName); - break; - } - return al; - } - - /** - * Return the list of deployed files in using the type of current deployment - * storing in WhereAreYou instance in session. - * - * @return The list of deployed files - * @throws Exception - */ - protected ArrayList getListDeployedFiles() - throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - ArrayList al = null; - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT: - al = JonasAdminJmx.getFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_EAR: - al = JonasAdminJmx.getEarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_RAR: - al = JonasAdminJmx.getRarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_JAR: - al = JonasAdminJmx.getJarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_WAR: - al = JonasAdminJmx.getWarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT: - al = JonasAdminJmx.getFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_EAR: - al = JonasAdminJmx.getEarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_JAR: - al = JonasAdminJmx.getJarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_WAR: - al = JonasAdminJmx.getWarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DOMAIN_DEPLOYMENT_RAR: - al = JonasAdminJmx.getRarFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - al = JonasAdminJmx.getDatasourceFilesDeployed(domainName, serverName); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - al = JonasAdminJmx.getMailFilesDeployed(m_WhereAreYou); - break; - } - return al; - } - - /** - * Undeploy a file in using the type of current deployment - * storing in WhereAreYou instance in session. - * - * @param p_Filename Name of file to undeploy - * @throws Exception could not undeploy - */ - protected void undeploy(final String p_Filename) - throws Exception { - String[] asParam = new String[1]; - asParam[0] = p_Filename; - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String op = "undeploy"; - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT_EAR: - case WhereAreYou.DEPLOYMENT_JAR: - case WhereAreYou.DEPLOYMENT_WAR: - case WhereAreYou.DEPLOYMENT_RAR: - case WhereAreYou.DEPLOYMENT: - undeployModule(p_Filename, serverName, domainName); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - undeployDataSource(p_Filename); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - undeployMailFactory(m_WhereAreYou.getCurrentDomainName(), p_Filename); - break; - } - } - - protected boolean isDeployment(final String p_Filename) throws Exception { - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT: - return true; - } - return false; - } - /** - * Undeploy a datasource file. - * - * @param p_Filename Name of file to undeploy - * @throws Exception - */ - protected void undeployDataSource(final String p_Filename) - throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - ArrayList al = JonasAdminJmx.getDatasourceDependences(p_Filename - , m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - if (al.size() == 0) { - String[] asParam = new String[1]; - asParam[0] = p_Filename; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - JonasManagementRepr.invoke(JonasObjectName.databaseService(domainName), "unloadDataSource" - , asParam, asSignature, serverName); - } - else { - throw new Exception(m_Resources.getMessage("error.undeploy.datasource.dependences" - , al.toString())); - } - } - - /** - * Undeploy a mail factory. - * - * @param p_Filename Name of the factory (same as the props file name configuring it) - * @throws Exception - */ - protected void undeployMailFactory(final String domainName, final String p_Filename) - throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ArrayList al = JonasAdminJmx.getMailFactoryDependences(p_Filename, m_WhereAreYou); - if (al.size() == 0) { - String[] asParam = new String[1]; - asParam[0] = p_Filename; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - JonasManagementRepr.invoke(JonasObjectName.mailService(domainName), "unbindMailFactoryMBean" - , asParam, asSignature, serverName); - } - else { - throw new Exception(m_Resources.getMessage("error.undeploy.mailfactory.dependences" - , al.toString())); - } - } - - /** - * Deploy a file in using the type of current deployment - * storing in WhereAreYou instance in session. - * - * @param p_Filename Name of file to deploy - * @throws Exception could not deploy - */ - protected void deploy(final String p_Filename) - throws Exception { - String[] asParam = new String[1]; - asParam[0] = p_Filename; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT_EAR: - case WhereAreYou.DEPLOYMENT_JAR: - case WhereAreYou.DEPLOYMENT_WAR: - case WhereAreYou.DEPLOYMENT_RAR: - case WhereAreYou.DEPLOYMENT: - deployModule(p_Filename, serverName); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - deployDataSource(p_Filename); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - deployMailFactory(m_WhereAreYou.getCurrentDomainName(), p_Filename); - break; - } - } - - /** - * Deploy a datasource file. - * - * @param p_Filename Name of file to deploy - * @throws Exception - */ - protected void deployDataSource(final String p_Filename) - throws Exception { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asParam[0] = p_Filename; - asSignature[0] = "java.lang.String"; - - ObjectName onDb = JonasObjectName.databaseService(domainName); - // Verify if datasource already loaded - Boolean oLoaded = (Boolean) JonasManagementRepr.invoke(onDb, "isLoadedDataSource", asParam - , asSignature, serverName); - if (oLoaded.booleanValue() == false) { - // Get Datasource properties file - Properties oProps = (Properties) JonasManagementRepr.invoke(onDb - , "getDataSourcePropertiesFile", asParam, asSignature, serverName); - // Load Datasource - Object[] aoParam = { - p_Filename, oProps, new Boolean(true)}; - String[] asSign_3 = { - "java.lang.String", "java.util.Properties", "java.lang.Boolean"}; - JonasManagementRepr.invoke(onDb, "loadDataSource", aoParam, asSign_3, serverName); - } - else { - throw new Exception(m_Resources.getMessage("error.deploy.datasource.isloaded")); - } - } - - /** - * Deploy a mail factory. - * - * @param p_Filename Name of the mail factory whch is also the name of the file - * @throws Exception - */ - protected void deployMailFactory(final String domainName, final String p_Filename) - throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asParam[0] = p_Filename; - asSignature[0] = "java.lang.String"; - - ObjectName onMail = JonasObjectName.mailService(domainName); - // Get mail factory properties file - Properties oProps = (Properties) JonasManagementRepr.invoke(onMail - , "getMailFactoryPropertiesFile", asParam, asSignature, serverName); - // Load mail factory - Object[] aoParam = { - p_Filename, oProps, new Boolean(true)}; - String[] asSign_3 = { - "java.lang.String", "java.util.Properties", "java.lang.Boolean"}; - JonasManagementRepr.invoke(onMail, "createMailFactoryMBean", aoParam, asSign_3, serverName); - } - - /** - * Run garbage collector. - * - * @throws Exception - */ - protected void runGC() - throws Exception {String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - JonasManagementRepr.invoke(oObjectName, "runGC", null, null, m_WhereAreYou.getCurrentJonasServerName()); - } - - /** - * Refresh the tree. - * - * @param pRequest The current HTTP Request - * @throws Exception - */ - protected void refreshTree(final HttpServletRequest pRequest) throws Exception { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Refresh Service Tree - switch (getCurrentJonasDeployment()) { - case WhereAreYou.DEPLOYMENT: - break; - case WhereAreYou.DEPLOYMENT_EAR: - refreshServiceTree(WhereAreYou.DEPLOYMENT_EAR, pRequest); - if (JonasAdminJmx.hasMBeanName(JonasObjectName.ejbService(domainName), serverName)) { - refreshServiceTree(WhereAreYou.DEPLOYMENT_JAR, pRequest); - String localJoramServerId = (String) pRequest.getSession().getAttribute("localId"); - refreshJoramTree(pRequest, localJoramServerId); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.webContainerService(domainName), serverName)) { - refreshServiceTree(WhereAreYou.DEPLOYMENT_WAR, pRequest); - } - if (JonasAdminJmx.hasMBeanName(JonasObjectName.resourceService(domainName), serverName)) { - refreshServiceTree(WhereAreYou.DEPLOYMENT_RAR, pRequest); - } - break; - case WhereAreYou.DEPLOYMENT_JAR: - refreshServiceTree(WhereAreYou.DEPLOYMENT_JAR, pRequest); - String localJoramServerId = (String) pRequest.getSession().getAttribute("localId"); - refreshJoramTree(pRequest, localJoramServerId); - break; - case WhereAreYou.DEPLOYMENT_WAR: - refreshServiceTree(WhereAreYou.DEPLOYMENT_WAR, pRequest); - break; - case WhereAreYou.DEPLOYMENT_RAR: - refreshServiceTree(WhereAreYou.DEPLOYMENT_RAR, pRequest); - refreshJoramTree(pRequest, null); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - refreshServiceTree(WhereAreYou.DEPLOYMENT_DATASOURCE, pRequest); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - refreshServiceTree(WhereAreYou.DEPLOYMENT_MAIL, pRequest); - break; - } - // Refresh MBeans Tree - refreshMBeansTree(pRequest); - // Force display to refresh - m_WhereAreYou.setTreeToRefresh(true); - } - - /** - * Refresh the service tree. - * - * @param p_Deployment The type of deployment - * @param p_Request The current HTTP Request - * @throws Exception - */ - protected void refreshServiceTree(final int p_Deployment, final HttpServletRequest p_Request) - throws Exception { - // Get the domain and server name - String sDomainLabel = "domain"; - String sServerName = m_WhereAreYou.getCurrentJonasServerName(); - // Get the service name - String sCurrentNodeNameServiceItem = null; - switch (p_Deployment) { - case WhereAreYou.DEPLOYMENT_EAR: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "ear"; - break; - case WhereAreYou.DEPLOYMENT_JAR: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "ejbContainers"; - break; - case WhereAreYou.DEPLOYMENT_RAR: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "resourceAdapter"; - break; - case WhereAreYou.DEPLOYMENT_WAR: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "web"; - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "database"; - break; - case WhereAreYou.DEPLOYMENT_MAIL: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "mail"; - break; - case WhereAreYou.DEPLOYMENT_JMS: - sCurrentNodeNameServiceItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR - + sServerName + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "jms"; - break; - } - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Get service node - TreeControlNode oServiceNode = oControl.findNode(sCurrentNodeNameServiceItem); - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove old children - TreeControlNode[] aoNodes = oServiceNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - // Build node for the Service - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - - switch (p_Deployment) { - case WhereAreYou.DEPLOYMENT_EAR: - oBuilder.getAppContainers(oServiceNode, m_Resources, sDomainName, sServerName); - refreshWebServiceTree(p_Request); - break; - case WhereAreYou.DEPLOYMENT_JAR: - oBuilder.getContainers(oServiceNode, m_Resources, sDomainName, sServerName); - break; - case WhereAreYou.DEPLOYMENT_RAR: - oBuilder.getResourceAdapters(oServiceNode, m_Resources, sDomainName, sServerName); - break; - case WhereAreYou.DEPLOYMENT_WAR: - oBuilder.getWebContainers(oServiceNode, m_Resources, p_Request); - refreshWebServiceTree(p_Request); - break; - case WhereAreYou.DEPLOYMENT_DATASOURCE: - oBuilder.getDatasources(oServiceNode, m_Resources, sDomainName, sServerName); - break; - case WhereAreYou.DEPLOYMENT_MAIL: - oBuilder.getAllSessionMailFactories(oServiceNode, m_Resources, p_Request); - oBuilder.getAllMimePartDSMailFactories(oServiceNode, m_Resources, p_Request); - break; - } - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - - /** - * @param pRequest request - * @throws Exception could not refresh - */ - protected void refreshWebServiceTree(final HttpServletRequest pRequest) throws Exception { - String sServerName = m_WhereAreYou.getCurrentJonasServerName(); - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - - // Since (un)deployment of ears and wars can add/remove webservices, - // this part of the tree needs to be recreated. - String sServicesNodeName = "domain" + WhereAreYou.NODE_SEPARATOR + sServerName + WhereAreYou.NODE_SEPARATOR + "services"; - // The node representing services in the jonasAdmin tree. - TreeControlNode services = oControl.findNode(sServicesNodeName); - // If any web services are deployed and services node is present in tree. - if (JonasAdminJmx.hasMBeanName(JonasObjectName.wsService(sDomainName), sServerName) && services != null) { - // Rebuild the webservices tree. - oBuilder.getServiceWebService(services, m_Resources, pRequest, sDomainName, sServerName); - } else { - TreeControlNode ws = oControl.findNode(sServicesNodeName + WhereAreYou.NODE_SEPARATOR + "WebService"); - // If a web service node exists in tree already, remove it from there. - if (ws != null) { - ws.remove(); - } - } - } - - /** - * Refresh the MBeans tree. - * - * @throws Exception - */ - protected void refreshMBeansTree(final HttpServletRequest p_Request) throws Exception { - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // MBeans node present ? - TreeControlNode oMBeansNode = oControl.findNode("domain*mbeans"); - TreeControlNode oDomainNode= oMBeansNode.getParent(); - if (oMBeansNode != null) { - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove node - oMBeansNode.remove(); - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getMBeans(oDomainNode, m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - } - - /** - * Refresh the Joram tree after creating / removing a Joram destination. - * or after deploying / undeploying the Joram RAR - * @param pRequest initiator request - * @param serverId Id of the Joram server which was updated - * @throws Exception - */ - protected void refreshJoramTree(final HttpServletRequest pRequest, final String serverId) throws Exception { - m_WhereAreYou.setTreeToRefresh(true); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // selected node - TreeControlNode selectedNode = oControl.getSelected(); - // Joram node - String sJoramNodeName = "domain" + WhereAreYou.NODE_SEPARATOR + "joramplatform"; - TreeControlNode oJoramNode = oControl.findNode(sJoramNodeName); - // Root node - TreeControlNode oDomainNode = oControl.findNode("domain"); - TreeControlNode oNode = null; - // check if this is a Joram tree update case - if (selectedNode.getName().indexOf(sJoramNodeName) < 0) { - // the selected node is not a Joram node, select the Joram node or a Joram server node - oNode = oJoramNode; - if (serverId != null) { - TreeControlNode[] aoNodes = oNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - String serverNodeLabel = aoNodes[i].getLabel(); - int indexBefore = serverNodeLabel.indexOf("(");// ( - int indexAfter = serverNodeLabel.indexOf(")", indexBefore + 1);// ) - String id = serverNodeLabel.substring(indexBefore + 1, indexAfter); - if (id.equals(serverId)) { - oNode = aoNodes[i]; - break; - } - } - } - } else { - // refreshJoramTree was called after a Joram platform configuration operation - // which created or removed a Joram destination - oNode = selectedNode; - if (serverId == null) { - return; - } - } - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - if (oNode != null) { - // Remove old children - TreeControlNode[] aoNodes = oNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - - if (JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), serverName).isEmpty()) { - // Remove node - oNode.remove(); - // Un-register joramClient MBeans - ObjectName joramClients = JoramObjectName.joramClientMBeans(); - Iterator it = JonasManagementRepr.queryNames(joramClients, serverName).iterator(); - ObjectName joramClient = null; - while (it.hasNext()) { - joramClient = (ObjectName) it.next(); - JonasManagementRepr.unregisterMBean(joramClient, serverName); - } - } else { - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - if (serverId != null) { - oBuilder.getJoramResources(oNode, serverName, serverId, m_Resources, pRequest); - } else { - oBuilder.getJoramServers(oJoramNode, serverName, null, m_Resources, pRequest); - } - } - } else { - // Construct tree if necessary - // Build node and his children - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getJoramPlatform(oDomainNode, serverName, m_Resources, pRequest); - } - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } - - /** - * Remove a given file. - * @param fileName Name of file to remove - * @return true if file has been removed - * @throws Exception if remove fails - */ - protected boolean removeFile(final String fileName) throws Exception { - return removeModule(fileName, m_WhereAreYou.getCurrentJonasServerName()); - } - - - - protected void deployModule(final String filename, final String serverName) - throws Exception { - ManagementEntryPoint mgmt = ManagementEntryPoint.getInstance(); - mgmt.deploy(filename, serverName); - } - - protected void undeployModule(final String filename, final String serverName, final String domainName) - throws Exception { - ManagementEntryPoint mgmt = ManagementEntryPoint.getInstance(); - mgmt.undeploy(filename, serverName); - // Check if depmonitor is in development mode - if (mgmt.developmentMode("depmonitor", serverName)) { - String dir = FileManagementUtils.extractDirname(filename); - if (dir != null) { - if (AdminJmxHelper.isDepmonitorDir(dir, domainName, serverName)) { - // remove the file - mgmt.remove(filename, serverName); - } - } - } - } - - protected boolean removeModule(final String filename, final String serverName) - throws Exception { - ManagementEntryPoint mgmt = ManagementEntryPoint.getInstance(); - return mgmt.remove(filename, serverName); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DeployForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DeployForm.java deleted file mode 100644 index 6f477d9ee4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DeployForm.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class DeployForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private ArrayList listDeployable = new ArrayList(); - private ArrayList listDeployed = new ArrayList(); - private ArrayList listDeploy = new ArrayList(); - private ArrayList listUndeploy = new ArrayList(); - private String deploy = null; - private String undeploy = null; - private String[] deploySelected = new String[0]; - private String[] undeploySelected = new String[0]; - private ArrayList listAdd = new ArrayList(); - private ArrayList listRemove = new ArrayList(); - private boolean confirm = false; - private boolean isConfigurable; - /** - * True if the deoable/udeployable is a JAR, WAR, RAR or EAR - */ - private boolean isModule; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - deploySelected = new String[0]; - undeploySelected = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(" listDeployable = ").append(listDeployable).append("\n"); - sb.append(" listDeployed = ").append(listDeployed).append("\n"); - sb.append(" listDeploy = ").append(listDeploy).append("\n"); - sb.append(" listUndeploy = ").append(listUndeploy).append("\n"); - sb.append(" listAdd = ").append(listAdd).append("\n"); - sb.append(" listRemove = ").append(listRemove).append("\n"); - sb.append(" deploySelected = ["); - for (int i = 0; i < deploySelected.length; i++) { - if (i > 0) { - sb.append(", "); - } - sb.append(deploySelected[i]); - } - sb.append("]\n"); - sb.append(" undeploySelected = ["); - for (int i = 0; i < undeploySelected.length; i++) { - if (i > 0) { - sb.append(", "); - } - sb.append(undeploySelected[i]); - } - sb.append("]\n"); - - sb.append(" deploy = ").append(deploy).append("\n"); - sb.append(" undeploy = ").append(undeploy).append("\n"); - - return sb.toString(); - } - -// --------------------------------------------------------- Properties Methods - - public ArrayList getListDeployable() { - return listDeployable; - } - - public void setListDeployable(ArrayList listDeployable) { - this.listDeployable = listDeployable; - } - - public ArrayList getListDeployed() { - return listDeployed; - } - - public void setListDeployed(ArrayList listDeployed) { - this.listDeployed = listDeployed; - } - - public String[] getDeploySelected() { - return deploySelected; - } - - public void setDeploySelected(String[] deploySelected) { - this.deploySelected = deploySelected; - } - - public String[] getUndeploySelected() { - return undeploySelected; - } - - public void setUndeploySelected(String[] undeploySelected) { - this.undeploySelected = undeploySelected; - } - - public ArrayList getListDeploy() { - return listDeploy; - } - - public void setListDeploy(ArrayList listDeploy) { - this.listDeploy = listDeploy; - } - - public ArrayList getListUndeploy() { - return listUndeploy; - } - - public void setListUndeploy(ArrayList listUndeploy) { - this.listUndeploy = listUndeploy; - } - - public String getDeploy() { - return deploy; - } - - public void setDeploy(String deploy) { - this.deploy = deploy; - } - - public String getUndeploy() { - return undeploy; - } - - public void setUndeploy(String undeploy) { - this.undeploy = undeploy; - } - - public ArrayList getListAdd() { - return listAdd; - } - - public void setListAdd(ArrayList listAdd) { - this.listAdd = listAdd; - } - - public ArrayList getListRemove() { - return listRemove; - } - - public void setListRemove(ArrayList listRemove) { - this.listRemove = listRemove; - } - - public boolean isConfirm() { - return confirm; - } - - public void setConfirm(boolean confirm) { - this.confirm = confirm; - } - - /** - * Return if the current deployment type is configurable. - * @return if the current deployment type is configurable. - */ - public boolean getIsConfigurable() { - return this.isConfigurable; - } - - /** - * Sets if the current deployment type is configurable. - * @param isDomain if current deployment type is configurable. - */ - public void setIsConfigurable(boolean isConfigurable) { - this.isConfigurable = isConfigurable; - } -/** - * Return true if the current deployment on a server concerns a JAR, RAR, WAR or EAR - * @return true if the current deployment on a server concerns a JAR, RAR, WAR or EAR - */ - public boolean getIsModule() { - return isModule; - } -/** - * Set isModule to true if the current deployment on a server concerns a JAR, RAR, WAR or EAR - * @param isModule true if the current deployment on a server concerns a JAR, RAR, WAR or EAR - */ - public void setIsModule(boolean isModule) { - this.isModule = isModule; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DomainDeployForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DomainDeployForm.java deleted file mode 100644 index 386ceac5f5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/DomainDeployForm.java +++ /dev/null @@ -1,362 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; -import java.util.Map; -import java.util.TreeMap; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Patrick Smith - * Greg Lapouchnian - */ - -public class DomainDeployForm extends ActionForm { - -// --------------------------------------------------------- Constants - - public static final String DEPLOY = "deploy"; - public static final String UPLOAD = "upload"; - public static final String UPLOADDEPLOY = "uploadDeploy"; - public static final String UNDEPLOY = "undeploy"; - -// --------------------------------------------------------- Properties variables - /** - * all the apps available for deployment - */ - private ArrayList listDeployable = new ArrayList(); - /** - * deployed apps - */ - private ArrayList listDeployed = new ArrayList(); - /** - * possible targets in the domain (contain corresponding ONs) - */ - private ArrayList listTargets = new ArrayList(); - /** - * possible target names in the domain - */ - private ArrayList listTargetNames = new ArrayList(); - /** - * the apps that were selected by the user to be deployed - */ - private ArrayList listDeploy = new ArrayList(); - /** - * the targets selected by the user - */ - private ArrayList listTargetsSelected = new ArrayList(); - /** - * the names selected by the user - */ - private ArrayList listTargetSelectedNames = new ArrayList(); - - // store the progress report to provide the user with feedback - private Map reports = new TreeMap(); - - private String deploy = null; - - // which deployment option was selected by the user - private String selectedOption = null; - // should applications with the same name be replaced during upload - private boolean replaceOnTarget = false; - // should applications be installed in the autoload directory - private boolean autoload = false; - // apps to deploy - private String[] deploySelected = new String[0]; - /** - * all the targets selected by the apply - */ - private String[] targetSelected = new String[0]; - - // has the user confirmed the deployment? - private boolean confirm = false; - // is there a deployment operation in progress? - private boolean deploymentInProgress = false; - // is there a deployment completed? - private boolean deploymentCompleted = false; - - // the action to take - private String selectedAction = null; - // replace on target option - private boolean replacementOption = false; - - // Has an exception occured during this operation. - private boolean exception = false; - - // Is the archive type selected configurable. - private boolean isConfigurable; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - deploySelected = new String[0]; - targetSelected = new String[0]; - setSelectedOption(DEPLOY); - replaceOnTarget = false; - exception = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(" listDeployable = ").append(listDeployable).append("\n"); - sb.append(" listServers = ").append(listTargets).append("\n"); - sb.append(" listDeploy = ").append(listDeploy).append("\n"); - sb.append(" listTargetsSelected = ").append(listTargetsSelected).append("\n"); - sb.append(" reports = ").append(reports).append("\n"); - sb.append(" deploySelected = ["); - for (int i = 0; i < deploySelected.length; i++) { - if (i > 0) { - sb.append(", "); - } - sb.append(deploySelected[i]); - } - sb.append("]\n"); - sb.append(" serverSelected = ["); - for (int i = 0; i < targetSelected.length; i++) { - if (i > 0) { - sb.append(", "); - } - sb.append(targetSelected[i]); - } - sb.append("]\n"); - sb.append(" deploy = ").append(deploy).append("\n"); - sb.append(" progress = ").append(deploymentInProgress).append("\n"); - sb.append(" selectedOption = ").append(selectedOption).append("\n"); - sb.append(" replaceOnTarget = ").append(replaceOnTarget).append("\n"); - sb.append(" selectedAction = ").append(selectedAction).append("\n"); - sb.append(" replacementOption = ").append(replacementOption).append("\n"); - - return sb.toString(); - } - -// --------------------------------------------------------- Properties Methods - - public ArrayList getListTargets() { - return listTargets; - } - - public void setListTargets(ArrayList listTargets) { - this.listTargets = listTargets; - } - - public ArrayList getListTargetNames() { - return listTargetNames; - } - - public void setListTargetNames(ArrayList listTargetNames) { - this.listTargetNames = listTargetNames; - } - - public Map getReports() { - return reports; - } - - public void setReports(Map reports) { - this.reports = reports; - } - - public ArrayList getListTargetsSelected() { - return listTargetsSelected; - } - - public void setListTargetsSelected(ArrayList listTargetsSelected) { - this.listTargetsSelected = listTargetsSelected; - } - - public ArrayList getListTargetSelectedNames() { - return listTargetSelectedNames; - } - - public void setListTargetSelectedNames(ArrayList listTargetSelectedNames) { - this.listTargetSelectedNames = listTargetSelectedNames; - } - - public ArrayList getListDeployable() { - return listDeployable; - } - - public void setListDeployable(ArrayList listDeployable) { - this.listDeployable = listDeployable; - } - - public String[] getDeploySelected() { - return deploySelected; - } - - public void setDeploySelected(String[] deploySelected) { - this.deploySelected = deploySelected; - } - - public String[] getTargetSelected() { - return targetSelected; - } - - public void setTargetSelected(String[] serverSelected) { - this.targetSelected = serverSelected; - } - - public ArrayList getListDeploy() { - return listDeploy; - } - - public void setListDeploy(ArrayList listDeploy) { - this.listDeploy = listDeploy; - } - - public ArrayList getListDeployed() { - return listDeployed; - } - - public void setListDeployed(ArrayList listDeployed) { - this.listDeployed = listDeployed; - } - - public String getDeploy() { - return deploy; - } - - public void setDeploy(String deploy) { - this.deploy = deploy; - } - - public boolean isConfirm() { - return confirm; - } - - public void setConfirm(boolean confirm) { - this.confirm = confirm; - } - - public boolean getDeploymentInProgress() { - return deploymentInProgress; - } - - public void setDeploymentInProgress(boolean deploymentInProgress) { - this.deploymentInProgress = deploymentInProgress; - } - - public String getSelectedOption() { - return this.selectedOption; - } - - public void setSelectedOption(String selectedOption) { - this.selectedOption = selectedOption; - } - - public String getSelectedAction() { - return this.selectedAction; - } - - public void setSelectedAction(String selectedAction) { - this.selectedAction = selectedAction; - } - - public boolean getReplaceOnTarget() { - return replaceOnTarget; - } - - public void setReplaceOnTarget(boolean replaceChecked) { - this.replaceOnTarget = replaceChecked; - } - - public boolean getReplacementOption() { - return replacementOption; - } - - public void setReplacementOption(boolean replacementOption) { - this.replacementOption = replacementOption; - } - - public boolean getException() { - return exception; - } - - public void setException(boolean exception) { - this.exception = exception; - } - - - /** - * Return if the current deployment type is configurable. - * @return if the current deployment type is configurable. - */ - public boolean getIsConfigurable() { - return this.isConfigurable; - } - - /** - * Sets if the current deployment type is configurable. - * @param isDomain if current deployment type is configurable. - */ - public void setIsConfigurable(boolean isConfigurable) { - this.isConfigurable = isConfigurable; - } - - public boolean isDeploymentCompleted() { - return deploymentCompleted; - } - - public void setDeploymentCompleted(boolean deploymentCompleted) { - this.deploymentCompleted = deploymentCompleted; - } - - public boolean isAutoload() { - return autoload; - } - - public void setAutoload(boolean autoload) { - this.autoload = autoload; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDeployAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDeployAction.java deleted file mode 100644 index e462ebbef2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDeployAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class EditDeployAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - DeployForm oForm = (DeployForm) p_Form; - try { - // Store type deployment if exists - setCurrentJonasDeployment(p_Request); - // Deployable files - ArrayList alDeployable = getListDeployableFiles(); - // Deployed files - ArrayList alDeployed = getListDeployedFiles(); - // Undeploy files - ArrayList alUndeploy = new ArrayList(alDeployable); - alUndeploy.removeAll(alDeployed); - // Deploy files - ArrayList alDeploy = new ArrayList(alDeployed); - - // Set in form - oForm.setListDeployable(alDeployable); - oForm.setListDeployed(alDeployed); - oForm.setListDeploy(JonasAdminJmx.getDeployed(alDeploy)); - oForm.setListUndeploy(alUndeploy); - oForm.setDeploy(Jlists.getString(alDeploy, Jlists.SEPARATOR)); - oForm.setUndeploy(Jlists.getString(alUndeploy, Jlists.SEPARATOR)); - oForm.setIsConfigurable(isConfigurable()); - oForm.setIsModule(isModule()); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(getForwardEdit())); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDomainDeployAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDomainDeployAction.java deleted file mode 100644 index 8f318df76b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditDomainDeployAction.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -/** - * - * @author Patrick Smith - * Greg Lapouchnian - * Adriana Danes - */ - -public class EditDomainDeployAction extends BaseDeployAction { - - static final int indentUnit = 2; - static final char indentChar = '_'; - /** - * State corresponding to a cluster having all members running. - * @see org.ow2.jonas.lib.management.domain.cluster.BaseCluster - */ - static final String running_cluster = "UP"; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Form used - DomainDeployForm oForm = (DomainDeployForm) p_Form; - try { - // Store type deployment if exists - setCurrentJonasDeployment(p_Request); - // Domain ObjectName - ObjectName on = J2eeObjectName.J2EEDomain(domainName); - - // Check we are on a master - boolean isMaster = getBooleanAttribute(on, "master"); - if (!isMaster) { - Throwable t = new Throwable("Can't do domain deployment because the current server is not a master"); - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Get all targets in the domain: started servers and clusters - ArrayList alTargets = new ArrayList(); - ArrayList alTargetNames = new ArrayList(); - getTargetServerList(alTargetNames, alTargets, on, serverName); - // Get deployable files (all files on the local server) - ArrayList alDeployable = getListDeployableFiles(); - ArrayList alDeployed = getListDeployedFiles(); - - // Deploy files - //ArrayList alDeploy = new ArrayList(alDeployable); - - // Set in form - oForm.setListDeployable(JonasAdminJmx.getDeployed(alDeployable)); - oForm.setListDeployed(alDeployed); - oForm.setListTargets(alTargets); - oForm.setListTargetNames(alTargetNames); - //oForm.setListDeploy(alDeploy); - //oForm.setDeploy(Jlists.getString(alDeploy, Jlists.SEPARATOR)); - oForm.setIsConfigurable(isConfigurable()); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward(getForwardEdit())); - } - - /** - * - * @param targetNames List of target names - output parameter - * @param targetONs List of target ONs - output parameter - * @param domainOn domain ObjectName - * @param serverName the currently managed server - * @return total number of target servers and clusters - * @throws MalformedObjectNameException Couldn't determine the target ObjectNames - */ - int getTargetServerList(ArrayList targetNames, ArrayList targetONs, final ObjectName domainOn, final String serverName) - throws MalformedObjectNameException { - String domainName = domainOn.getKeyProperty("name"); - String[] startedServers = (String[]) JonasManagementRepr.getAttribute(domainOn, "startedServers", serverName); - - for (int i = 0; i < startedServers.length; i++) { - String startedServer = ObjectName.getInstance(startedServers[i]).getKeyProperty("name"); - targetNames.add(startedServer); - targetONs.add(startedServers[i]); - } - - String[] clusters = (String []) JonasManagementRepr.getAttribute(domainOn, "clusters", serverName); - for (int i = 0; i < clusters.length; i++) { - ObjectName clOn = ObjectName.getInstance(clusters[i]); - String state = getStringAttribute(clOn, "State"); - if (!state.equals(running_cluster)) { - break; - } - String clusterName = clOn.getKeyProperty("name"); - if (!clusterName.equals(domainName)) { - targetNames.add(clusterName); - targetONs.add(clusters[i]); - } - } - - return startedServers.length + clusters.length; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditRemoveAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditRemoveAction.java deleted file mode 100644 index a9b172ac38..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditRemoveAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Florent Benoit - */ - -public class EditRemoveAction extends BaseDeployAction { - - /** - * Execute the action with given params - * @param actionMapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * @return a forward when action is finished - * @exception ServletException if business logic throws an exception - */ - public ActionForward executeAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, - HttpServletResponse response) throws ServletException { - - String forward = "Remove"; - - // Form used - RemoveForm removeForm = (RemoveForm) actionForm; - try { - // Store type deployment if exists - setCurrentJonasDeployment(request); - // Removable files - ArrayList alRemovable = getListDeployableFiles(); - // Set in form - removeForm.setListRemovable(alRemovable); - - RemoveForm rForm = (RemoveForm) actionForm; - rForm.setIsDomain(isDomain()); - rForm.setIsConfigurable(isConfigurable()); - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (actionMapping.findForward(forward)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditUploadAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditUploadAction.java deleted file mode 100644 index 2f48b1f556..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/EditUploadAction.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Forward to the jsp - * @author Florent Benoit - */ -public class EditUploadAction extends BaseDeployAction { - - /** - * Execute the action with given params - * @param actionMapping The ActionMapping used to select this instance - * @param actionForm The optional ActionForm bean for this request (if any) - * @param request The HTTP request we are processing - * @param response The HTTP response we are creating - * @return a forward when action is finished - * @exception ServletException if business logic throws an exception - */ - - public ActionForward executeAction(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, - HttpServletResponse response) throws ServletException { - - String sForward = "Upload"; - try { - // Store type deployment if exists - setCurrentJonasDeployment(request); - UploadForm uForm = (UploadForm) actionForm; - uForm.setIsDomain(isDomain()); - uForm.setIsConfigurable(isConfigurable()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (actionMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (actionMapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/OperationInProgressException.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/OperationInProgressException.java deleted file mode 100644 index 194f41f388..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/OperationInProgressException.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.deploy; - -/** - * An exception used to report to the user that another - * domain deployment operation is already in progress. - * @author Patrick Smith - * @author Greg Lapouchnian - */ -public class OperationInProgressException extends Exception { - - public OperationInProgressException(String message) { - super(message); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/RemoveForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/RemoveForm.java deleted file mode 100644 index 6fea7aa6b6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/RemoveForm.java +++ /dev/null @@ -1,182 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Manage the list of modules that can be removed - * @author Florent Benoit - */ - -public class RemoveForm extends ActionForm { - - /** - * List of removable modules - */ - private List listRemovable = new ArrayList(); - - /** - * List of removed modules - */ - private List listRemoved = new ArrayList(); - - /** - * List of modules to remove (select by user, based on removeSelected array) - */ - private List listToBeRemoved = new ArrayList(); - - /** - * Array of user selected elements to be removed - */ - private String[] removeSelected = new String[0]; - - //private ArrayList listRemove = new ArrayList(); - private boolean confirm = false; - - /** - * Is the current context a domain management action? - */ - private boolean isDomain; - - /** - * Is the current type of deployment currently configurable? - */ - private boolean isConfigurable; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - removeSelected = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public List getListRemovable() { - return listRemovable; - } - - public void setListRemovable(ArrayList listRemovable) { - this.listRemovable = listRemovable; - } - - public String[] getRemoveSelected() { - return removeSelected; - } - - public void setRemoveSelected(String[] removeSelected) { - this.removeSelected = removeSelected; - } - - public boolean isConfirm() { - return confirm; - } - - public void setConfirm(boolean confirm) { - this.confirm = confirm; - } - - - public List getListRemoved() { - return listRemoved; - } - - - public void setListRemoved(List listRemoved) { - this.listRemoved = listRemoved; - } - - - public List getListToBeRemoved() { - return listToBeRemoved; - } - - - public void setListToBeRemoved(List listToBeRemoved) { - this.listToBeRemoved = listToBeRemoved; - } - - /** - * Return if the action is a domain management operation. - * @return if the action is a domain management operation. - */ - public boolean getIsDomain() { - return this.isDomain; - } - - /** - * Sets if the action is a domain management operation. - * @param isDomain if the action is a domain management operation. - */ - public void setIsDomain(boolean isDomain) { - this.isDomain = isDomain; - } - - /** - * Return if the current deployment type is configurable. - * @return if the current deployment type is configurable. - */ - public boolean getIsConfigurable() { - return this.isConfigurable; - } - - /** - * Sets if the current deployment type is configurable. - * @param isDomain if current deployment type is configurable. - */ - public void setIsConfigurable(boolean isConfigurable) { - this.isConfigurable = isConfigurable; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/UploadForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/UploadForm.java deleted file mode 100644 index fe24817471..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/deploy/UploadForm.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright 1999-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.deploy; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.upload.FormFile; -import org.apache.struts.upload.MultipartRequestHandler; - -/** - * This class is a placeholder for form values. In a multipart request, files are represented by - * set and get methods that use the class org.apache.struts.upload.FormFile, an interface with - * basic methods to retrieve file information. The actual structure of the FormFile is dependant - * on the underlying impelementation of multipart request handling. The default implementation - * that struts uses is org.apache.struts.upload.CommonsMultipartRequestHandler. - * - * @version $Rev: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ -public class UploadForm extends ActionForm { - - /** - * The file that the user has uploaded - */ - private FormFile uploadedFile; - - /** - * Is the current context a domain management action? - */ - private boolean isDomain; - - /** - * Is the current type of deployment currently configurable? - */ - private boolean isConfigurable; - - /** - * Overwrite value - */ - private boolean overwrite = false; - - /** - * Return if the action is a domain management operation. - * @return if the action is a domain management operation. - */ - public boolean getIsDomain() { - return this.isDomain; - } - - /** - * Sets if the action is a domain management operation. - * @param isDomain if the action is a domain management operation. - */ - public void setIsDomain(boolean isDomain) { - this.isDomain = isDomain; - } - - /** - * @return a representation of the file the user has uploaded - */ - public FormFile getUploadedFile() { - return uploadedFile; - } - - /** - * Set a representation of the file the user has uploaded - * @param uploadedFile the file uploaded - */ - public void setUploadedFile(FormFile uploadedFile) { - this.uploadedFile = uploadedFile; - } - - - /** - * Check to make sure the client hasn't exceeded the maximum allowed upload size inside of this - * validate method. - * @param mapping the mapping used to select this instance - * @param request the servlet request we are processing - * @return Errors if it fails - */ - public ActionErrors validate( - ActionMapping mapping, - HttpServletRequest request) { - - ActionErrors errors = null; - //has the maximum length been exceeded? - Boolean maxLengthExceeded = - (Boolean) request.getAttribute( - MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); - - if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { - errors = new ActionErrors(); - errors.add( - ActionMessages.GLOBAL_MESSAGE , - new ActionMessage("maxLengthExceeded")); - errors.add( - ActionMessages.GLOBAL_MESSAGE , - new ActionMessage("maxLengthExplanation")); - } - return errors; - - } - - /** - * @return true if the file will be overwritten - */ - public boolean isOverwrite() { - return overwrite; - } - - - /** - * Replace the existing file ? - * @param overwrite true/false - */ - public void setOverwrite(boolean overwrite) { - this.overwrite = overwrite; - } - - /** - * Return if the current deployment type is configurable. - * @return if the current deployment type is configurable. - */ - public boolean getIsConfigurable() { - return this.isConfigurable; - } - - /** - * Sets if the current deployment type is configurable. - * @param isDomain if current deployment type is configurable. - */ - public void setIsConfigurable(boolean isConfigurable) { - this.isConfigurable = isConfigurable; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyClusterAction.java deleted file mode 100644 index 139ce67c94..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyClusterAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Create a LogicalCluster by admin. - * @author Adriana Danes - */ -public class ApplyClusterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - NewClusterForm oForm = (NewClusterForm) p_Form; - - // Actions - try { - // ObjectName of the domain in which the new cluster has to be created - ObjectName domainOn = m_WhereAreYou.getCurrentDomain(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String[] signature = {"java.lang.String" }; - String[] params = {oForm.getClusterName() }; - signature[0] = "java.lang.String"; - JonasManagementRepr.invoke(domainOn, "createCluster", params, signature, serverName); - m_Session.setAttribute("mapChanged", new Boolean(true)); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionEditDomain"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServerAction.java deleted file mode 100644 index e6c27c0494..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServerAction.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * This action is called when confirming a server add the domain. - * @author Adriana Danes - * @author S. Ali Tokmen - */ -public class ApplyJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Form used - NewServerForm oForm = (NewServerForm) p_Form; - // Server to add - String serverName = null; - String serverURL = null; - String clusterDaemon = null; - String username = null; - String password = null; - String[] selecetedServerNames = null; - // - boolean isCluster = oForm.isCluster(); - if (isCluster) { - selecetedServerNames = oForm.getSelectedItems(); - } else { - // Server to add - name, connection URL, cluster daemon - serverName = oForm.getServerName(); - serverURL = oForm.getServerURL(); - clusterDaemon = oForm.getServerCld(); - if (clusterDaemon == null || clusterDaemon.length() < 1) { - clusterDaemon = null; - } - username = oForm.getServerUsername(); - password = oForm.getServerPassword(); - if (username == null || password == null || username.length() < 1 || password.length() < 1) { - username = null; - password = null; - } - } - // Reset form - oForm.reset(p_Mapping, p_Request); - - String clusterName = (String) m_Session.getAttribute("currentCluster"); - String clusterType = "LogicalCluster"; - try { - ObjectName on = JonasObjectName.cluster(domainName, clusterName, clusterType); - String[] signature = {"java.lang.String", "[Ljava.lang.String;", "java.lang.String", "java.lang.String", "java.lang.String"}; - Object[] params = new Object[5]; - if (serverName != null) { - params[0] = serverName; - String[] urls = {serverURL}; - params[1] = urls; - params[2] = clusterDaemon; - params[3] = username; - params[4] = password; - JonasManagementRepr.invoke(on, "addServer", params, signature, currentServerName); - } else { - params[1] = null; - params[2] = null; - params[3] = null; - params[4] = null; - for (int i = 0; i < selecetedServerNames.length; i++) { - params[0] = selecetedServerNames[i]; - JonasManagementRepr.invoke(on, "addServer", params, signature, currentServerName); - } - } - m_Session.setAttribute("mapChanged", new Boolean(true)); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionEditDomain"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersAction.java deleted file mode 100644 index d49f90d592..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersAction.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Implement remove action for servers management in the domain - * @author Adriana Danes - */ - -public class ApplyJonasServersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsServersForm oForm = (ItemsServersForm) p_Form; - String[] selectedItems = oForm.getSelectedItems(); - if (selectedItems.length > 0) { - ArrayList alSelected = new ArrayList(); - for (int i = 0; i < selectedItems.length; i++) { - String selectedServer = selectedItems[i]; - alSelected.add(selectedServer); - } - m_Session.setAttribute("listServersSelected", alSelected); - } - // Forward to the Servers Confirm page - return p_Mapping.findForward("JonasServersConfirm"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmAction.java deleted file mode 100644 index a0a522e499..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmAction.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class ApplyJonasServersConfirmAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // List of servers selected to be removed - ArrayList alSelected = (ArrayList) m_Session.getAttribute("listServersSelected"); - m_Session.setAttribute("listServersSelected", null); - - if (alSelected != null) { - // DomainName - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Current server nmae - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - // Current cluster name - String clusterName = (String) m_Session.getAttribute("currentCluster"); - // Check if the selected cluster is the domain's one - boolean domainRemove = false; - if (clusterName.equals(domainName)) { - // In this case, the server have to be removed from all the clusters - domainRemove = true; - } - // Construct a list with the cluster ons for removing - ArrayList removeClOns = new ArrayList(); - ObjectName domainClusterOn = null; - // Actions - try { - ObjectName domainOn = J2eeObjectName.J2EEDomain(domainName); - // All clusters Ons - String[] clOns = (String[]) JonasManagementRepr.getAttribute(domainOn, "clusters", currentServerName); - for (int index = 0; index < clOns.length; index++) { - ObjectName clOn = ObjectName.getInstance(clOns[index]); - String clType = clOn.getKeyProperty("type"); - String clName = clOn.getKeyProperty("name"); - if (!domainRemove) { - // put clOn in the list for removing if this the current cluster's on - if ("LogicalCluster".equals(clType) && clusterName.equals(clName)) { - removeClOns.add(clOn); - break; - } - } else { - if ("LogicalCluster".equals(clType) && domainName.equals(clName)) { - // keep the domain cluster On in domainClusterOn variable - domainClusterOn = clOn; - } else { - removeClOns.add(clOn); - } - } - } - if (domainRemove) { - // add domainClusterOn et the end in order to be the last treated one - removeClOns.add(domainClusterOn); - m_Session.setAttribute("mapChanged", new Boolean(true)); - } - // Remove all the servers from all the clusters in removeClOns - for (int j = 0; j < alSelected.size(); j++) { - String serverName = (String) alSelected.get(j); - for (int i = 0; i < removeClOns.size(); i++) { - ObjectName clOn = (ObjectName) removeClOns.get(i); - String[] signature = {"java.lang.String" }; - String[] params = {serverName }; - JonasManagementRepr.invoke(clOn, "removeServer", params, signature, currentServerName); - } - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } - // Forward to the domain page - return p_Mapping.findForward("ActionEditDomain"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmMoveAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmMoveAction.java deleted file mode 100644 index 24e403b055..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ApplyJonasServersConfirmMoveAction.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class ApplyJonasServersConfirmMoveAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - ArrayList alSelected = (ArrayList) m_Session.getAttribute("listServersSelected"); - - // Form used - ItemsServersForm oForm = (ItemsServersForm) p_Form; - - // Actions - try { - // This action isn't provided anymore - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the domain page - return p_Mapping.findForward("ActionEditDomain"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateClusterAction.java deleted file mode 100644 index e7b3a2f3c4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateClusterAction.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class CreateClusterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - NewClusterForm oForm = new NewClusterForm(); - m_Session.setAttribute("newClusterForm", oForm); - // Forward to the jsp. - return (p_Mapping.findForward("AddCluster")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateJonasServerAction.java deleted file mode 100644 index 88d1fd3cc9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/CreateJonasServerAction.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.clusterd.ClusterDaemonProxy; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.clusterd.DaemonProxyClusterConfigureServerAction; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -/** - * This action is called when adding a server to the domain (Add server button). - * @author Adriana Danes - */ -public class CreateJonasServerAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - @Override - @SuppressWarnings("unchecked") - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - // Form used - NewServerForm oForm = new NewServerForm(); - m_Session.setAttribute("newServerForm", oForm); - String clusterName = (String) m_Session.getAttribute("currentCluster"); - String clusterDaemonName = p_Request.getParameter("CdName"); - if (clusterDaemonName == null) { - clusterDaemonName = (String) p_Request.getAttribute("CdName"); - } - String domainName = m_WhereAreYou.getCurrentDomainName(); - // first set the attribute to know if we alreaday have the ClusterDameon - // name or not - p_Request.setAttribute("CdName", clusterDaemonName); - try { - if (clusterDaemonName != null) { - m_WhereAreYou.setCurrentClusterDaemonName(clusterDaemonName); - // getting requested cluster daemon Administred Jonas servers... - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - // Get servers running in this domain - ArrayList al = new ArrayList(); - // are all the servers already started ? - // getting the cluster daemon proxy from domain monitor - ClusterDaemonProxy cdProx = dm.findClusterDaemonProxy(clusterDaemonName); - ObjectName on = null; - ServerItem srv = null; - if (cdProx != null) { - // Retrieve servers that can be affected to a cluster daemon - for (Iterator it = dm.getServerList().iterator(); it.hasNext();) { - ServerProxy proxy = (ServerProxy) it.next(); - on = ObjectName.getInstance(proxy.getJ2eeObjectName()); - String cdName = proxy.getClusterDaemonName(); - // get good candidates for being affected to a clusterd - if (cdName == null) { - srv = checkServerConfig(proxy, on); - al.add(srv); - } - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - // this list will be used in the forward destination. - p_Request.setAttribute("freeServersList", al); - p_Request.setAttribute("clusterdName", cdProx.getName()); - // the session attribute will be retrieved when configuring - // server for clusterd affectation - m_Session.setAttribute("freeServersList", al); - } - return (p_Mapping.findForward("AddServerToClusterDaemon")); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - // Forward to the jsp. - if (domainName.equals(clusterName)) { - return (p_Mapping.findForward("AddServerToDomain")); - } else { - oForm.setCluster(true); - ObjectName domainOn = J2eeObjectName.J2EEDomain(domainName); - Object[] asParam = {clusterName}; - String[] asSignature = {"java.lang.String"}; - String[] serverNames = (String[]) JonasManagementRepr.invoke(domainOn, "getServersNotInCluster", asParam, - asSignature, jonasServerName); - oForm.setServerNames(serverNames); - return (p_Mapping.findForward("AddServerToCluster")); - } - } - - /** - * Checks if the server is configured for clusterd affectaion if true, adds - * it to the configured server list. - * @param srv The server proxy - * @param on The server on. Used to create a serverItem instance. - * @return ServerItem correctly configured. - * @throws Exception if a null pointer exception occurs when processing. - */ - private ServerItem checkServerConfig(final ServerProxy srv, final ObjectName on) throws Exception { - - if (m_WhereAreYou.isConfiguredForClusterd(srv.getName())) { - // this server is already configured for clusterd affectation. - return m_WhereAreYou.getSrvConfiguredForClusterd(srv.getName()); - - } - // TODO test following methods. given keys should be wrong. - ServerItem srvItem = new ServerItem(on, srv.getState(), null); - srvItem.setJavaHome(System.getProperty("java.home")); - srvItem.setJonasRoot(System.getProperty("jonas.root")); - srvItem.setJonasBase(System.getProperty("jonas.base")); - srvItem.setIsConfiguredForClusterd(false); - srvItem.setAutoBoot(DaemonProxyClusterConfigureServerAction.DEF_AUTO_BOOT); - srvItem.setXprem(DaemonProxyClusterConfigureServerAction.DEF_XPREM); - if (!srv.getState().equals("UNKNOWN") && !srv.getState().equals("FAILED") && !srv.getState().equals("UNREACHABLE")) { - // the server is running - String javaHome = srv.getJavaHome(); - String jonasRoot = srv.getJonasRoot(); - String jonasBase = srv.getJonasBase(); - if (javaHome != null && jonasRoot != null && jonasBase != null) { - // add the server to configured server list. - srvItem.setJavaHome(javaHome); - srvItem.setJonasRoot(jonasRoot); - srvItem.setJonasBase(jonasBase); - m_WhereAreYou.addSrvConfiguredForClusterd(srvItem); - return srvItem; - } - - } - return srvItem; - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/DomainForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/DomainForm.java deleted file mode 100644 index dbda8919c8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/DomainForm.java +++ /dev/null @@ -1,242 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used for EditDomainAction. - * It is used for domain or cluster display - * @author danesa - */ -public class DomainForm extends ActionForm { - - /** - * Serial Id. - */ - private static final long serialVersionUID = 1L; - - /** - * Domain name or cluster name (if this is a cluster). - */ - private String name = null; - - /** - * Used to define type - domain case. - */ - public final String typeDomain = "Domain"; - - /** - * Used to define type - cluster case. - */ - public final String typeCluster = "Cluster"; - /** - * May be "Domain" or "Cluster". - */ - private String type = null; - - /** - * If cluster, gives cluster type (LogicalCluster, CmiCluster etc.). - */ - private String clusterType = null; - - /** - * Domain name (used if this is a cluster). - */ - private String domainName = null; - - /** - * master server name (the local server name) - */ - private String masterName = null; - - /** - * domain or cluster description - */ - private String description = null; - - /** - * master server's MBean OBJECT_NAME - */ - private String masterON = null; - - /** - * true if the local server is master - */ - private boolean isMaster = false; - - /** - * True if this is a cluster, false if this is domain (root cluster) - */ - private boolean isCluster = false; - /** - * Reset all properties to their default values. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the domainName. - */ - public String getDomainName() { - return domainName; - } - - /** - * @param domainName The domainName to set. - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * @return Returns the isCluster. - */ - public boolean isCluster() { - return isCluster; - } - - /** - * @param isCluster The isCluster to set. - */ - public void setCluster(final boolean isCluster) { - this.isCluster = isCluster; - } - - /** - * @return Returns the masterName. - */ - public String getMasterName() { - return masterName; - } - - /** - * @param masterName The masterName to set. - */ - public void setMasterName(final String masterName) { - this.masterName = masterName; - } - - /** - * @return Returns the masterON. - */ - public String getMasterON() { - return masterON; - } - - /** - * @param masterON The masterON to set. - */ - public void setMasterON(final String masterON) { - this.masterON = masterON; - } - - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - - /** - * @param type The type to set. - */ - public void setType(final String type) { - this.type = type; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - /** - * @param description The description to set. - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * @return Returns the isMaster. - */ - public boolean isMaster() { - return isMaster; - } - - /** - * @param isMaster The isMaster to set. - */ - public void setMaster(final boolean isMaster) { - this.isMaster = isMaster; - } - - public String getClusterType() { - return clusterType; - } - - public void setClusterType(final String clusterType) { - this.clusterType = clusterType; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/EditDomainAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/EditDomainAction.java deleted file mode 100644 index 336c68e421..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/EditDomainAction.java +++ /dev/null @@ -1,255 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.manager.ManagementEntryPoint; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; -/** - * Display domain and cluster informations. - * @author Adriana Danes - */ -public class EditDomainAction extends JonasBaseAction { - - /** - * Compute info about this domain or cluster. - * Populate the DomainForm. - * Eventually call the domain.jsp for display - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // request parameter version allows to choose between the flex and the jsp version - - try { - // Force the node selected in tree - m_WhereAreYou.selectNameNode("domain*domain", true); - - // current Form - DomainForm used for domain and cluster management - DomainForm oForm = (DomainForm) p_Form; - - // TEST new management endpoint to get general info - // ------------------------------------------------- - ManagementEntryPoint domMgmt = ManagementEntryPoint.getInstance(); - // current domain and server name as seen from the ManagementEntryPoint - String domainNameMgmt = domMgmt.getDomainName(); - String serverNameMgmt = domMgmt.getServerName(); - - // current domain name - String domainName = m_WhereAreYou.getCurrentDomainName(); - // current server name - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - // current domain's ObjectName - ObjectName domainOn = J2eeObjectName.J2EEDomain(domainName); - - // request parameter gives the managed resource name - String selected = p_Request.getParameter("select"); - if (selected == null) { - // By default we edit the domain page - // -- this is necessary for example when creating a cluster in the - // domain, at the end of the ApplyClusterAction we come back - // into EditDomainAction - // -- maybe this should be treated otherwise ? - selected = domainName; - } - - // currently managed resource name (domain or cluster name) - String name = selected; - m_Session.setAttribute("currentCluster", name); - - // Support mgmt context switch from a slave to the master - // (to the administrator server) - String adminServerName = m_WhereAreYou.getAdminJonasServerName(); - if (!adminServerName.equals(m_WhereAreYou.getCurrentJonasServerName())) { - m_WhereAreYou.refreshServers(p_Request, domainName, adminServerName); - refreshTree(p_Request); - } - - // Support domain map changes (for example, a new server added to a cluster) - // get 'mapChanged' session attribute - boolean changeMap = getChangeMap(); - if (changeMap) { - refreshTree(p_Request); - m_WhereAreYou.setTreeToRefresh(true); - m_Session.setAttribute("mapChanged", new Boolean(false)); - } - - // Check if this is a cluster or not - boolean isCluster = false; - if (!name.equals(domainName)) { - isCluster = true; - } - oForm.setCluster(isCluster); - - // Domain or cluster type - boolean cmiCluster = false; - if (isCluster) { - oForm.setType(oForm.typeCluster); - String clusterType = domMgmt.getClusterType(name); - oForm.setClusterType(clusterType); - if ("CmiCluster".equals(clusterType)) { - cmiCluster = true; - } - } else { - oForm.setType(oForm.typeDomain); - } - - // set general properties on the Form - oForm.setName(name); - oForm.setDomainName(domainName); - oForm.setCluster(isCluster); - //oForm.setDescription(getStringAttribute(onDomain, "description")); - oForm.setMasterName(adminServerName); - oForm.setMasterON(J2eeObjectName.J2EEServer(domainName, adminServerName).toString()); - oForm.setMaster(domMgmt.isMaster()); - - // get the servers list (server names in the managed domain or cluster) - ArrayList al = new ArrayList(); - String[] servers = null; - if (oForm.isMaster()) { - servers = domMgmt.getServerNames(name); - } else { - servers = domMgmt.getServerNames(); - } - - // In the domain view, check if a new server detected in order to do refresh - if ("Domain".equals(oForm.getType()) && oForm.isMaster()) { - int nbServers = servers.length; - Integer nbServersObj = ((Integer) m_Session.getAttribute("nbServers")); - if (nbServersObj == null) { - m_Session.setAttribute("nbServers", new Integer(nbServers)); - } else { - if (nbServers != nbServersObj.intValue()) { - // Add the new servers number to the session - m_Session.setAttribute("nbServers", new Integer(nbServers)); - if (nbServers > nbServersObj.intValue()) { - // Servers number in the domain increased - refreshTree(p_Request); - m_WhereAreYou.setTreeToRefresh(true); - } - } - } - } - - // Construct the ServerItems list - for (int i = 0; i < servers.length; i++) { - String serverName = servers[i]; - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - ServerItem it = null; - if (!oForm.isMaster() && serverName.equals(currentServerName)) { - it = new ServerItem(on, "RUNNING", null); - - } else { - //String serverState = getAttribute(on, domainOn, "getServerState", adminServerName); - String serverState = domMgmt.getServerState(serverName); - //String clusterdName = getAttribute(on, domainOn, "getServerClusterdaemon", adminServerName); - String clusterdName = domMgmt.getServerClusterdaemon(serverName); - it = new ServerItem(on, serverState, clusterdName); - } - al.add(it); - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - - // Associate the ServerItems list to "listServers" request parameter - p_Request.setAttribute("listServers", al); - - // Construct the clusters and cluster daemons list - // -- Only for a domain management -- - if (oForm.isMaster() && !isCluster) { - // get the clusters list - ArrayList clustAl = new ArrayList(); - String[] clusters = domMgmt.getClusters(); - for (int i = 0; i < clusters.length; i++) { - ObjectName on = ObjectName.getInstance(clusters[i]); - String clusterName = on.getKeyProperty("name"); - if (!domainName.equals(clusterName)) { - String clusterState = domMgmt.getClusterState(clusterName); - ServerItem it = new ServerItem(on, clusterState, null); - it.setName(clusterName); - clustAl.add(it); - } - } - Collections.sort(clustAl, new BeanComparator(new String[] {"name"})); - p_Request.setAttribute("listClusters", clustAl); - - // get the cluster daemons list - ArrayList clustDaemonAl = new ArrayList(); - String[] clusterDaemons = domMgmt.getclusterDaemons(); - for (int i = 0; i < clusterDaemons.length; i++) { - ObjectName on = ObjectName.getInstance(clusterDaemons[i]); - String clusterdaemonName = on.getKeyProperty("name"); - String clusterdaemonState = domMgmt.getClusterdaemonState(clusterdaemonName); - ServerItem it = new ServerItem(on, clusterdaemonState, null); - it.setName(clusterdaemonName); - clustDaemonAl.add(it); - } - Collections.sort(clustDaemonAl, new BeanComparator(new String[] {"name"})); - p_Request.setAttribute("listCdps", clustDaemonAl);// Re-check server states for a more accurate display - //dm.refreshStates(); - } else { - p_Request.setAttribute("listClusters", new ArrayList()); - p_Request.setAttribute("listCdps", new ArrayList()); - } - if (cmiCluster) { - // TODO latter - return (p_Mapping.findForward("ClusterCMI")); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Domain")); - - } - - private boolean getChangeMap() { - Boolean changeMapObj = ((Boolean) m_Session.getAttribute("mapChanged")); - if (changeMapObj == null) { - return false; - } else { - return changeMapObj.booleanValue(); - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/HaltJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/HaltJonasServerAction.java deleted file mode 100644 index c5698881ed..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/HaltJonasServerAction.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Action allowing to halt a managed server in the domain. - * @author Adriana Danes - */ -public class HaltJonasServerAction extends JonasBaseAction { - - - // --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "haltit"; - JonasManagementRepr.invoke(on, opName, null, null, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ItemsServersForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ItemsServersForm.java deleted file mode 100644 index 81563a559a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ItemsServersForm.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class ItemsServersForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } -// --------------------------------------------------------- Properties Methods -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServerItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServerItem.java deleted file mode 100644 index 8578b2c3c3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServerItem.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.Serializable; - -import javax.management.ObjectName; - -/** - * @author Adriana Danes - */ -public class JonasServerItem implements Serializable { - -// --------------------------------------------------------- Properties Variables - - private String objectName = null; - private String name = null; -// --------------------------------------------------------- Constructors - - public JonasServerItem() { - } - - public JonasServerItem(ObjectName serverOn) - throws Exception { - setObjectName(serverOn.toString()); - setName(serverOn.getKeyProperty("name")); - } - -// --------------------------------------------------------- Properties Methods - - - public String getObjectName() { - return objectName; - } - - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServersMoveAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServersMoveAction.java deleted file mode 100644 index d64e009b0a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/JonasServersMoveAction.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class JonasServersMoveAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsServersForm oForm = (ItemsServersForm) p_Form; - - String currentOn = (String) m_Session.getAttribute("currentOn"); - - // Actions - //System.out.println("Apply Move action (" + oForm.getAction() + ") to items:"); - try { - ArrayList alSelected = new ArrayList(); - for (int i=0; i < oForm.getSelectedItems().length; i++) { - String selectedServerOn = oForm.getSelectedItems()[i]; - ObjectName on = ObjectName.getInstance(selectedServerOn); - //System.out.println(selectedServerOn); - JonasServerItem item = new JonasServerItem(on); - alSelected.add(item); - } - m_Session.setAttribute("listServersSelected", alSelected); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the Servers Confirm page - return p_Mapping.findForward("JonasServersConfirmMove"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ModuleItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ModuleItem.java deleted file mode 100644 index 355ce18c75..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/ModuleItem.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -public class ModuleItem { - private String name = null; - private int nbDeployTargets = 0; - private String deployTargetsList = null; - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public int getNbDeployTargets() { - return nbDeployTargets; - } - public void setNbDeployTargets(int nbDeployTargets) { - this.nbDeployTargets = nbDeployTargets; - } - public String getDeployTargetsList() { - return deployTargetsList; - } - public void setDeployTargetsList(String deployTargetsList) { - this.deployTargetsList = deployTargetsList; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewClusterForm.java deleted file mode 100644 index ed37e8026b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewClusterForm.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Adriana Danes - */ - -public final class NewClusterForm extends ActionForm { - -// ----------------------------------------------------- Properties Variables - private String clusterName = null; -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((clusterName == null) || (clusterName.length() < 1)) { - oErrors.add("clusterName", new ActionMessage("error.logger.domain.servername.required")); - } - return oErrors; - } - -// ------------------------------------------------------------- Properties Methods - - /** - * @return Returns the clusterName. - */ - public String getClusterName() { - return clusterName; - } - - /** - * @param clusterName The clusterName to set. - */ - public void setClusterName(String serverName) { - this.clusterName = serverName; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewServerForm.java deleted file mode 100644 index 299a51ee9e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/NewServerForm.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Adriana Danes - * @author S. Ali Tokmen - */ - -public final class NewServerForm extends ActionForm { - -// ----------------------------------------------------- Properties Variables - - private boolean isCluster = false; - // Used when a new server is to be add to the domain - private String serverName = null; - private String serverURL = null; - private String serverCld = null; - private String serverUsername = null; - private String serverPassword = null; - private String serverPasswordAgain = null; - // Used when a new server is to be add to a cluster - private String[] serverNames = null; - private String[] selectedItems = new String[0]; -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if (!isCluster) { - if ((serverName == null) || (serverName.length() < 1)) { - oErrors.add("serverName", new ActionMessage("error.logger.domain.servername.required")); - } - if ((serverURL == null) || (serverURL.length() < 1)) { - oErrors.add("serverURL", new ActionMessage("error.logger.domain.serverurl.required")); - } - if ((serverPassword != null) && !(serverPassword.equals(serverPasswordAgain))) { - oErrors.add("serverPassword", new ActionMessage("")); - oErrors.add("serverPasswordAgain", new ActionMessage("error.logger.domain.passwords.mismatch")); - serverPassword = ""; - serverPasswordAgain = ""; - } - } - return oErrors; - } - -// ------------------------------------------------------------- Properties Methods - - /** - * @return Returns the serverName. - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName The serverName to set. - */ - public void setServerName(String serverName) { - this.serverName = serverName; - } - - /** - * @return Returns the serverURL. - */ - public String getServerURL() { - return serverURL; - } - - /** - * @param serverURL The serverURL to set. - */ - public void setServerURL(String serverURL) { - this.serverURL = serverURL; - } - /** - * @return the name of server's cluster daemon - */ - public String getServerCld() { - return serverCld; - } - - /** - * @param serverCld The server cluster daemon name to set. - */ - public void setServerCld(String serverCld) { - this.serverCld = serverCld; - } - - /** - * @return the serverUsername - */ - public String getServerUsername() { - return serverUsername; - } - - /** - * @param serverUsername the serverUsername to set - */ - public void setServerUsername(String serverUsername) { - this.serverUsername = serverUsername; - } - - /** - * @return the serverPassword - */ - public String getServerPassword() { - return serverPassword; - } - - /** - * @param serverPassword the serverPassword to set - */ - public void setServerPassword(String serverPassword) { - this.serverPassword = serverPassword; - } - - /** - * @return the serverPasswordAgain - */ - public String getServerPasswordAgain() { - return serverPasswordAgain; - } - - /** - * @param serverPasswordAgain the serverPasswordAgain to set - */ - public void setServerPasswordAgain(String serverPasswordAgain) { - this.serverPasswordAgain = serverPasswordAgain; - } - - public boolean isCluster() { - return isCluster; - } - - public void setCluster(boolean isCluster) { - this.isCluster = isCluster; - } - - public String[] getServerNames() { - return serverNames; - } - - public void setServerNames(String[] serverNames) { - this.serverNames = serverNames; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterAction.java deleted file mode 100644 index 9ddfbad257..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterAction.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class StartClusterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - String param = p_Request.getParameter("on"); - try { - ObjectName on = ObjectName.getInstance(param); - String opName = "startit"; - JonasManagementRepr.invoke(on, opName, null, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterDaemonAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterDaemonAction.java deleted file mode 100644 index b265f49b8c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartClusterDaemonAction.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class StartClusterDaemonAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // current server name - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - String param = p_Request.getParameter("on"); - try { - ObjectName on = ObjectName.getInstance(param); - String opName = "startAllServers"; - String[] sign = new String[] {"java.lang.String"}; - String otherParams = null; - String[] params = new String[1]; - params[0] = otherParams; - JonasManagementRepr.invoke(on, opName, params, sign, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartJonasServerAction.java deleted file mode 100644 index 2fc45d5c7f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartJonasServerAction.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.domain.DomainManagement; -import org.ow2.jonas.management.extensions.domain.api.IDomain; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -/** - * @author Adriana Danes - */ - -public class StartJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // server to start - String serverName = p_Request.getParameter("name"); - try { - IDomain domainManagement = DomainManagement.getInstance(); - domainManagement.startServer(serverName, false); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartStandbyJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartStandbyJonasServerAction.java deleted file mode 100644 index 6f4d137ff4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StartStandbyJonasServerAction.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.domain.DomainManagement; -import org.ow2.jonas.management.extensions.domain.api.IDomain; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -/** - * @author Adriana Danes - */ - -public class StartStandbyJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // server to start - String serverName = p_Request.getParameter("name"); - try { - IDomain domainManagement = DomainManagement.getInstance(); - domainManagement.startServer(serverName, true); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterAction.java deleted file mode 100644 index b4f561bc13..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterAction.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class StopClusterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - String param = p_Request.getParameter("on"); - try { - ObjectName on = ObjectName.getInstance(param); - String opName = "stopit"; - JonasManagementRepr.invoke(on, opName, null, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterDaemonAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterDaemonAction.java deleted file mode 100644 index 09ea802986..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopClusterDaemonAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class StopClusterDaemonAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - String param = p_Request.getParameter("on"); - try { - ObjectName on = ObjectName.getInstance(param); - String opName = "stopAllServers"; - String[] sign = new String[] {"java.lang.String"}; - String otherParams = null; - String[] params = new String[1]; - params[0] = otherParams; - JonasManagementRepr.invoke(on, opName, params, sign, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopJonasServerAction.java deleted file mode 100644 index cb9d27eafe..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopJonasServerAction.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -/** - * @author Adriana Danes - */ - -public class StopJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "stop"; - Object[] standby = {false}; - String[] signature = {boolean.class.toString()}; - //Halt it. - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopStandbyJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopStandbyJonasServerAction.java deleted file mode 100644 index 2847335f7b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/domain/StopStandbyJonasServerAction.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.domain; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -/** - * @author eyindanga - */ - -public class StopStandbyJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // server to stop - String serverName = p_Request.getParameter("name"); - // current server - String currentServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - ObjectName on = JonasObjectName.serverProxy(domainName, serverName); - String opName = "stop"; - Object[] standby = {true}; - String[] signature = {boolean.class.toString()}; - JonasManagementRepr.invoke(on, opName, standby, signature, currentServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditDomain")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditAction.java deleted file mode 100644 index ac8ec28f40..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditAction.java +++ /dev/null @@ -1,119 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesComparator; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesUtil; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.Property; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class ConnectionFactoryEditAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - ConnectionFactoryEditForm fBean = (ConnectionFactoryEditForm) form; - String type = fBean.getType(); // CF,TCF,QCF - String operation = fBean.getOperation(); - ArrayList properties = new ArrayList(); - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - /* - * - */ - String connector = "jonasmq"; - String currentConnector = request.getParameter("connector"); - if (currentConnector != null) { - connector = currentConnector; - - } else { - currentConnector = (String) m_Session.getAttribute("mqconnector"); - if (currentConnector != null) { - connector = currentConnector; - } - } - m_Session.setAttribute("mqconnector", connector); - try { - //ObjectName mbName = ObjectNames.getConnectorON(); - ObjectName mbName = MqObjectNames.getConnectorONByName(domainName, connector); - - //Class cfClass = null; - String methodName = ""; - if (type.equals("TCF")) { - /* FWA commented out - cfClass = Thread.currentThread().getClass(). - forName("com.ibm.mq.jms.MQTopicConnectionFactory"); - */ - methodName = "getTcfProperty"; - } else if (type.equals("QCF")) { - /* FWA commented out - cfClass = Thread.currentThread().getClass(). - forName("com.ibm.mq.jms.MQQueueConnectionFactory"); - */ - methodName = "getQcfProperty"; - } else { - /* FWA commented out - cfClass = Thread.currentThread().getClass(). - forName("com.ibm.mq.jms.MQConnectionFactory"); - */ - methodName = "getCfProperty"; - } - /* - * FWA BEGIN - */ - String[] propertiesToSkip = new String []{"Version", "HostName", - "Channel", "Port", "TransportType", "QueueManager", "Reference", "Class", "ConnTag"}; - properties = PropertiesUtil.getJMSObjectProperties(mbName, type, methodName, propertiesToSkip, serverName, domainName); - - /* FWA : commented out : properties = PropertiesUtil.getClassProperties(mbName, cfClass, - "get"+methodName, new String []{"Version", "HostName", - "Channel", "Port", "TransportType", "QueueManager"},serverName); - */ - /* - * FWA END - */ - - if ("apply".equals(operation)) { - for (int i = 0; i < properties.size(); i++) { - Property property = (Property) properties.get(i); - property.setValue(request.getParameter(property.getName())); - } - - PropertiesUtil.setClassProperties(mbName, /* cfClass, */ - "set" + methodName, properties, serverName); - properties = PropertiesUtil.getJMSObjectProperties(mbName, type, methodName, propertiesToSkip, serverName, domainName); - /* FWA commented out - properties = PropertiesUtil.getClassProperties(mbName, cfClass, - "get"+methodName, new String []{"Channel", "HostName", - "Port", "TransportType", "QueueManager", "Version"}, - serverName); - */ - } - Collections.sort(properties, new PropertiesComparator()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - fBean.setProperties(properties); - return mapping.findForward("JonasMqConnectConnectionFactoryEdit"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditForm.java deleted file mode 100644 index 4e316e7ee0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/ConnectionFactoryEditForm.java +++ /dev/null @@ -1,181 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.util.ArrayList; - -import org.apache.struts.action.ActionForm; - -public class ConnectionFactoryEditForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * operation : CF,TCF,QCF - */ - private String type; - - /** - * operation : view,edit - */ - private String operation; - - /** - * Selected queues - */ - private String[] selectedQueues; - - /** - * Selected topics - */ - private String[] selectedTopics; - - /** - * jndiName - */ - private String jndiName = "sampleTopic"; - - /** - * properties - */ - private ArrayList properties; - - /** - * properties name - */ - private ArrayList propertiesName; - - /** - * properties value - */ - private ArrayList propertiesValue; - - /** - * get jndiname - * @return - */ - public String getJndiName() { - return jndiName; - } - - /** - * set jndiname - * @param jndiName - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - /** - * type: CF,TCF,QCF - * @return the type - */ - public String getType() { - return type; - } - - /** - * type: CF,TCF,QCF - * @param type the type to set - */ - public void setType(String type) { - this.type = type; - } - - /** - * Selected Queues - * @return the selected queues - */ - public String[] getSelectedQueues() { - return selectedQueues; - } - - /** - * selected queues - * @param selectedQueues the selected queues to set - */ - public void setSelectedQueues(String[] selectedQueues) { - this.selectedQueues = selectedQueues; - } - - /** - * Selected Topics - * @return the selected topics - */ - public String[] getSelectedTopics() { - return selectedTopics; - } - - /** - * selected topics - * @param selectedTopics the selected topics to set - */ - public void setSelectedTopics(String[] selectedTopics) { - this.selectedTopics = selectedTopics; - } - - /** - * @return the propertiesName - */ - public ArrayList getPropertiesName() { - return propertiesName; - } - - /** - * @param propertiesName the propertiesName to set - */ - public void setPropertiesName(ArrayList propertiesName) { - this.propertiesName = propertiesName; - } - - /** - * @return the propertiesValue - */ - public ArrayList getPropertiesValue() { - return propertiesValue; - } - - /** - * @param propertiesValue the propertiesValue to set - */ - public void setPropertiesValue(ArrayList propertiesValue) { - this.propertiesValue = propertiesValue; - } - - /** - * @return the properties - */ - public ArrayList getProperties() { - return properties; - } - - /** - * @param properties the properties to set - */ - public void setProperties(ArrayList properties) { - this.properties = properties; - } - - /** - * @return the operation - */ - public String getOperation() { - return operation; - } - - /** - * @param operation the operation to set - */ - public void setOperation(String operation) { - this.operation = operation; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddAction.java deleted file mode 100644 index 7aa0eff019..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddAction.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationAddAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - return mapping.findForward("JonasMqConnectDestinationAdd"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmAction.java deleted file mode 100644 index 1561f926cf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmAction.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationAddConfirmAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - DestinationAddConfirmForm fBean = (DestinationAddConfirmForm) form; - try { - //ObjectName mbName = ObjectNames.getConnectorON(); - ObjectName mbName = MqObjectNames.getConnectorONByName( - domainName, - (String) m_Session.getAttribute("mqconnector")); - boolean isTopic = fBean.getType().toLowerCase().equals("topic"); - Object[] params = {isTopic ? Boolean.TRUE : Boolean.FALSE, - fBean.getName(), fBean.getProprieties()}; - String[] signature = {"boolean", "java.lang.String", - "java.lang.String"}; - /* - * FWA begin - */ - - /* - * FWA end - */ - JonasManagementRepr.invoke(mbName, "createDestination", params, - signature, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - return mapping.findForward("JonasMqConnectDestinationsAction"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmForm.java deleted file mode 100644 index 948d6d0a72..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddConfirmForm.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Adriana Danes - */ -public class DestinationAddConfirmForm extends ActionForm { - -// ------------------------------------------------------- Constants - -// ------------------------------------------------------- Properties variables - - private String name = null; - private String type = null; - private String proprieties = null; - - // ------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - type = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, - HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", - new ActionMessage( - "error.joansmqconnect.resource.jms.create.name.required")); - } - if (getType() == null) { - oErrors.add("type", - new ActionMessage( - "error.joansmqconnect.resource.jms.create.type.required")); - } - return oErrors; - } - - // ----------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - /** - * @return the proprieties - */ - public String getProprieties() { - return proprieties; - } - - /** - * @param proprieties the proprieties to set - */ - public void setProprieties(String proprieties) { - this.proprieties = proprieties; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddForm.java deleted file mode 100644 index ca2b8e0a13..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationAddForm.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import org.apache.struts.action.ActionForm; - -public class DestinationAddForm extends ActionForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteAction.java deleted file mode 100644 index d91ce2d220..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteAction.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationDeleteAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - DestinationDeleteForm fBean = (DestinationDeleteForm) form; - String[] selectedDestinations = fBean.getSelectedDestinations(); - ArrayList destinations = new ArrayList(); - String destinationsStr = ""; - if (selectedDestinations != null) { - for (int i = 0; i < selectedDestinations.length; i++) { - destinations.add(selectedDestinations[i]); - destinationsStr += selectedDestinations[i] + ";"; - } - } - fBean.setDestinations(destinations); - fBean.setDestinationsStr(destinationsStr); - - return mapping.findForward("JonasMqConnectDestinationDelete"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmAction.java deleted file mode 100644 index 070a40261c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmAction.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationDeleteConfirmAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - DestinationDeleteForm fBean = (DestinationDeleteForm) form; - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - try { - ObjectName mbName = MqObjectNames.getConnectorONByName( - domainName, - (String) m_Session.getAttribute("mqconnector")); - String[] destinations = {}; - if (fBean.getDestinationsStr() != null) { - destinations = fBean.getDestinationsStr().split(";"); - } - boolean deletePhysicalDestinations = false; - if (fBean.getDeletePhysicalDestination() != null) { - deletePhysicalDestinations = - fBean.getDeletePhysicalDestination().toLowerCase().equals("yes"); - } - for (int i = 0; i < destinations.length; i++) { - String jndiName = destinations[i]; - Object[] params = {jndiName, - deletePhysicalDestinations ? Boolean.TRUE : Boolean.FALSE}; - String[] signature = {"java.lang.String", "boolean"}; - JonasManagementRepr.invoke(mbName, "deleteDestination", params, - signature, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - return mapping.findForward("JonasMqConnectDestinationsAction"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmForm.java deleted file mode 100644 index 55caa4b0b0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteConfirmForm.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class DestinationDeleteConfirmForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - // ------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { -// selectedDestinations = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, - HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); -// if ((selectedDestinations == null) || -// (selectedDestinations.length == 0)) { -// oErrors.add("selectedDestinations", -// new ActionMessage( -// "error.joansmqconnect.resource.jms.create.selecteddestinations.empty")); -// } -// if ((deletePhysicalDestination == null) || -// (selectedDestinations.length == 0)) { -// oErrors.add("deletePhysicalDestination", -// new ActionMessage( -// "error.joansmqconnect.resource.jms.create." + -// "deletephysicaldestination.empty")); -// } - return oErrors; - } - - // ----------------------------------------------------- Properties Methods - - /** - * Selected destinations in string - */ - private String destinationsStr; - - /** - * remove Physical Destination ? - */ - private String deletePhysicalDestination = null; - - /** - * @return the removePhysicalDestination - */ - public String getDeletePhysicalDestination() { - debug("DestinationDeleteConfirmForm#getDeletePhysicalDestination()"); - return deletePhysicalDestination; - } - - /** - * @param deletePhysicalDestination the removePhysicalDestination to set - */ - public void setDeletePhysicalDestination(String deletePhysicalDestination) { - debug("DestinationDeleteConfirmForm#setDeletePhysicalDestination(" - + deletePhysicalDestination - + ")"); - this.deletePhysicalDestination = deletePhysicalDestination; - } - - /** - * get DestinationsStr - * @return DestinationsStr - */ - public String getDestinationsStr() { - debug("DestinationDeleteConfirmForm#getDestinationsStr()"); - return destinationsStr; - } - - /** - * set DestinationsStr - * @param destinationsStr - */ - public void setDestinationsStr(String destinationsStr) { - debug("DestinationDeleteConfirmForm#setDestinationsStr(" - + destinationsStr - + ")"); - this.destinationsStr = destinationsStr; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteForm.java deleted file mode 100644 index 9286e8be25..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationDeleteForm.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.util.ArrayList; - -import org.apache.struts.action.ActionForm; - -public class DestinationDeleteForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * Selected destinations - */ - private String[] selectedDestinations; - - /** - * Selected destinations in string - */ - private String destinationsStr; - - /** - * Selected destinations - */ - private ArrayList destinations; - - /** - * remove Physical Destination ? - */ - private String deletePhysicalDestination = null; - - /** - * Selected destinations - * @return the selected destinations - */ - public String[] getSelectedDestinations() { - debug("DestinationDeleteForm#getSelectedDestinations()"); - return selectedDestinations; - } - - /** - * selected destinations - * @param selectedDestinations the selected destinations to set - */ - public void setSelectedDestinations(String[] selectedDestinations) { - debug("DestinationDeleteForm#setSelectedDestinations(" - + selectedDestinations - + ")"); - this.selectedDestinations = selectedDestinations; - } - - /** - * destinations - * @return the destinations - */ - public ArrayList getDestinations() { - debug("DestinationDeleteForm#getDestinations()"); - return destinations; - } - - /** - * @param destinations the selected destinations to set - */ - public void setDestinations(ArrayList destinations) { - debug("DestinationDeleteForm#setDestinations(" - + destinations + ")"); - this.destinations = destinations; - } - - /** - * @return the removePhysicalDestination - */ - public String getDeletePhysicalDestination() { - debug("DestinationDeleteForm#getDeletePhysicalDestination()"); - return deletePhysicalDestination; - } - - /** - * @param deletePhysicalDestination the deletePhysicalDestination to set - */ - public void setDeletePhysicalDestination(String deletePhysicalDestination) { - debug("DestinationDeleteForm#setDeletePhysicalDestination(" - + deletePhysicalDestination - + ")"); - this.deletePhysicalDestination = deletePhysicalDestination; - } - - /** - * get DestinationsStr - * @return the destinationsStr - */ - public String getDestinationsStr() { - debug("DestinationDeleteForm#getDestinationsStr()"); - return destinationsStr; - } - - /** - * set DestinationsStr - * @param destinationsStr destinations String - */ - public void setDestinationsStr(String destinationsStr) { - debug("DestinationDeleteForm#setDestinationsStr(" - + destinationsStr - + ")"); - this.destinationsStr = destinationsStr; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditAction.java deleted file mode 100644 index e03039cbbe..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditAction.java +++ /dev/null @@ -1,154 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.ListIterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.ItemDestination; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesComparator; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesUtil; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.Property; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationEditAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - DestinationEditForm fBean = (DestinationEditForm)form; - String jndiName = fBean.getJndiName(); - String operation = fBean.getOperation(); - ArrayList properties = new ArrayList(); - ArrayList statProperties = new ArrayList(); - ObjectName mbName; - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - /* - * Get the connector name - */ - String connector = request.getParameter("connector"); - if (connector == null) { - connector = (String) m_Session.getAttribute("mqconnector"); - } else { - m_Session.setAttribute("mqconnector", connector); - } - - try { - - /* - * FWA BEGIN : get the exact ObjectName of the destination - */ - /* */ - mbName = MqObjectNames.getDestinationON(domainName, jndiName, connector); - - //domain*jmq1*jonasmqconnect*jonasmqconnector**destination* - // Force the node selection in tree - String nodeName = "domain" + WhereAreYou.NODE_SEPARATOR - + serverName + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnect" + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnector" + WhereAreYou.NODE_SEPARATOR - + connector + WhereAreYou.NODE_SEPARATOR - + "destination" + WhereAreYou.NODE_SEPARATOR - + jndiName; - m_WhereAreYou.selectNameNode(nodeName, true); - - /* - * FWA END - */ - - boolean isTopic = ((Boolean) JonasManagementRepr.getAttribute( - mbName, "IsTopic", serverName)).booleanValue(); - fBean.setIsTopic(isTopic); - properties.add(new Property("JndiName", jndiName, "JndiName")); - properties.add(new Property("Type", (isTopic) ? "Topic" : "Queue", - "Type")); - - /* - * FWA commented out - */ - /* - * TODO : check why are ALL OF THESE properties out. - * - Class: OK. it's a java class - * - Refernce: OK. Sums all of the properties - * - why Version ? - * - Why Expiry ? - */ - String[] propertiesToSkip = new String []{"Class", "Expiry", "Reference", "Version"}; - properties = PropertiesUtil.getJMSObjectProperties(mbName, ((isTopic) ? "Topic" : "Queue"),"getProperty", propertiesToSkip, serverName, domainName); - - /* - * FWA end - */ - if (!isTopic) { - int currentDepth = ((Integer) JonasManagementRepr.getAttribute( - mbName, "CurrentDepth",serverName)).intValue(); - int maxQueueDepth = ((Integer) JonasManagementRepr.getAttribute( - mbName, "MaxQueueDepth",serverName)).intValue(); - int inputCount = ((Integer) JonasManagementRepr.getAttribute( - mbName, "InputCount",serverName)).intValue(); - int outputCount = ((Integer) JonasManagementRepr.getAttribute( - mbName, "OutputCount",serverName)).intValue(); - - statProperties.add(new Property("CurrentDepth", "" + currentDepth, - m_Resources.getMessage( - "label.joansmqconnect.destination.currentdepth"))); - statProperties.add(new Property("MaxQueueDepth","" + maxQueueDepth, - m_Resources.getMessage( - "label.joansmqconnect.destination.maxqueuedepth"))); - statProperties.add(new Property("InputCount", "" + inputCount, - m_Resources.getMessage( - "label.joansmqconnect.destination.inputcount"))); - statProperties.add(new Property("OutputCount", "" + outputCount, - m_Resources.getMessage( - "label.joansmqconnect.destination.outputcount"))); - } - if ("apply".equals(operation)) { - for (int i = 0; i < properties.size(); i++) { - Property property = (Property) properties.get(i); - property.setValue(request.getParameter(property.getName())); - } - - PropertiesUtil.setClassProperties(mbName, /* FWA - commented out: mqClass, */ - "setProperty", properties, serverName); - properties = PropertiesUtil.getJMSObjectProperties(mbName, ((isTopic) ? "Topic" : "Queue"), "getProperty", propertiesToSkip, serverName, domainName); - /* FWA - commented out: properties = PropertiesUtil.getClassProperties(mbName, mqClass, - "getProperty", new String []{"Version"}, serverName); - */ - } - if ("clearQueue".equals(operation)) { - Object[] params = {}; - String[] signature = {}; - JonasManagementRepr.invoke(mbName, "clearQueue", params, - signature, serverName); - fBean.setOperation("view"); - } - - Collections.sort(properties, new PropertiesComparator()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - fBean.setProperties(properties); - fBean.setStatProperties(statProperties); - return mapping.findForward("JonasMqConnectDestinationEdit"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditForm.java deleted file mode 100644 index 7fd1007bb4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationEditForm.java +++ /dev/null @@ -1,200 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.util.ArrayList; - -import org.apache.struts.action.ActionForm; - -public class DestinationEditForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * operation : view,edit,apply - */ - private String operation; - - /** - * Selected queues - */ - private String[] selectedQueues; - - /** - * Selected topics - */ - private String[] selectedTopics; - - /** - * jndiName - */ - private String jndiName = "sampleTopic"; - - /** - * properties - */ - private ArrayList properties; - - /** - * stat properties - */ - private ArrayList statProperties; - - /** - * properties name - */ - private ArrayList propertiesName; - - /** - * properties value - */ - private ArrayList propertiesValue; - - /** - * isTopic - */ - private boolean isTopic; - - /** - * get jndiname - * @return - */ - public String getJndiName() { - return jndiName; - } - - /** - * set jndiname - * @param jndiName - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - /** - * add,modify,delete - * @return the operation - */ - public String getOperation() { - return operation; - } - - /** - * add,modify,delete - * @param operation the operation to set - */ - public void setOperation(String operation) { - this.operation = operation; - } - - /** - * Selected Queues - * @return the selected queues - */ - public String[] getSelectedQueues() { - return selectedQueues; - } - - /** - * selected queues - * @param selectedQueues the selected queues to set - */ - public void setSelectedQueues(String[] selectedQueues) { - this.selectedQueues = selectedQueues; - } - - /** - * Selected Topics - * @return the selected topics - */ - public String[] getSelectedTopics() { - return selectedTopics; - } - - /** - * selected topics - * @param selectedTopics the selected topics to set - */ - public void setSelectedTopics(String[] selectedTopics) { - this.selectedTopics = selectedTopics; - } - - /** - * @return the propertiesName - */ - public ArrayList getPropertiesName() { - return propertiesName; - } - - /** - * @param propertiesName the propertiesName to set - */ - public void setPropertiesName(ArrayList propertiesName) { - this.propertiesName = propertiesName; - } - - /** - * @return the propertiesValue - */ - public ArrayList getPropertiesValue() { - return propertiesValue; - } - - /** - * @param propertiesValue the propertiesValue to set - */ - public void setPropertiesValue(ArrayList propertiesValue) { - this.propertiesValue = propertiesValue; - } - - /** - * @return the properties - */ - public ArrayList getProperties() { - return properties; - } - - /** - * @param statProperties the stat properties to set - */ - public void setStatProperties(ArrayList statProperties) { - this.statProperties = statProperties; - } - - /** - * @return the stat properties - */ - public ArrayList getStatProperties() { - return statProperties; - } - - /** - * @param properties the properties to set - */ - public void setProperties(ArrayList properties) { - this.properties = properties; - } - - /** - * @return isTopic - */ - public boolean getIsTopic() { - return isTopic; - } - - /** - * @param isTopic - */ - public void setIsTopic(boolean isTopic) { - this.isTopic = isTopic; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsAction.java deleted file mode 100644 index bcf2a82a76..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsAction.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.ItemDestination; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.LogUtils; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DestinationsAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - DestinationsForm fBean = (DestinationsForm) form; - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - /* - * The "connector" session attribute should be set - */ - String connector = (String) m_Session.getAttribute("mqconnector"); - //domain*jmq1*jonasmqconnect*jonasmqconnector*fwaMQJca - // Force the node selection in tree - String nodeName = "domain" + WhereAreYou.NODE_SEPARATOR - + serverName + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnect" + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnector" + WhereAreYou.NODE_SEPARATOR - + connector; - m_WhereAreYou.selectNameNode(nodeName, true); - - try { - //ObjectName mbName = ObjectNames.getConnectorON(); - ObjectName mbName = MqObjectNames.getConnectorONByName(domainName, connector); - Object[] params = {}; - String[] signature = {}; - String[] onDestinations = (String[]) JonasManagementRepr.invoke( - mbName, "listDestinationObjectNames", params, signature, serverName); - ArrayList destinationsArray = new ArrayList(); - for (int i = 0; i < onDestinations.length; i++) { - ObjectName onDest = new ObjectName(onDestinations[i]); - params = new Object[]{}; - signature = new String[]{}; - boolean isTopic = ((Boolean) JonasManagementRepr.getAttribute( - onDest, "IsTopic", serverName)).booleanValue(); - - String baseName = ""; - - signature = new String[]{"java.lang.String"}; - if (isTopic) { - baseName = (String) JonasManagementRepr.invoke(onDest, - "getProperty", new Object[]{"BaseTopicName"}, signature, serverName); - } else { - baseName = (String) JonasManagementRepr.invoke(onDest, - "getProperty", new Object[]{"BaseQueueName"}, signature, serverName); - } - String name = onDest.getKeyProperty("name"); - ItemDestination item = new ItemDestination(name, - (isTopic) ? "topic" : "queue", baseName, onDest); - destinationsArray.add(item); - } - - m_Session.setAttribute("mqdestinations", destinationsArray); - } catch (Exception ex) { - LogUtils.print(ex.getMessage()); - } - return mapping.findForward("JonasMqConnectDestinations"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsForm.java deleted file mode 100644 index bca8a9892a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/DestinationsForm.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import org.apache.struts.action.ActionForm; - -public class DestinationsForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * Selected destinations - */ - private String[] selectedDestinations; - - /** - * Selected destinations - * @return the selected destinations - */ - public String[] getSelectedDestinations() { - debug("DestinationsForm#getSelectedDestinations()"); - return selectedDestinations; - } - - /** - * selected destinations - * @param selectedDestinations the selected destinations to set - */ - public void setSelectedDestinations(String[] selectedDestinations) { - debug("DestinationsForm#setSelectedDestinations(" - + selectedDestinations - + ")"); - this.selectedDestinations = selectedDestinations; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectAction.java deleted file mode 100644 index 1d6685a9a1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectAction.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class JonasMqConnectAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - JonasMqConnectForm fBean = (JonasMqConnectForm) form; - String connector = fBean.getConnector(); - if (connector == null) { - connector = (String) m_Session.getAttribute("mqconnector"); - } else { - m_Session.setAttribute("mqconnector", connector); - } - String operation = fBean.getOperation(); - if (operation == null) { - operation = "view"; - fBean.setOperation(operation); - } - - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domain = oWhere.getCurrentDomainName(); - - //domain*jmq1*jonasmqconnect*jonasmqconnector*fwaMQJca - // Force the node selection in tree - String nodeName = "domain" + WhereAreYou.NODE_SEPARATOR - + serverName + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnect" + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnector" + WhereAreYou.NODE_SEPARATOR - + connector; - m_WhereAreYou.selectNameNode(nodeName, true); - - try { - ObjectName mbName = MqObjectNames.getConnectorONByName(domain, connector); - if ("apply".equals(operation)) { - JonasManagementRepr.setAttribute(mbName, "HostName", - request.getParameter("hostname"), serverName); - JonasManagementRepr.setAttribute(mbName, "Channel", - request.getParameter("channel"), serverName); - JonasManagementRepr.setAttribute(mbName, "Port", - request.getParameter("port"), serverName); - JonasManagementRepr.setAttribute(mbName, "QueueManager", - request.getParameter("queueManager"), serverName); - JonasManagementRepr.setAttribute(mbName, "TransportType", - request.getParameter("transportType"), serverName); - } - if ("saveDestinationConfig".equals(operation)) { - Object[] params = {}; - String[] signature = {}; - JonasManagementRepr.invoke(mbName, "saveDestinationConfig", params, - signature, serverName); - fBean.setOperation("view"); - } - if ("loadDestinationConfig".equals(operation)) { - Object[] params = {}; - String[] signature = {}; - JonasManagementRepr.invoke(mbName, "loadDestinationConfig", params, - signature, serverName); - fBean.setOperation("view"); - } - if ("refresh".equals(operation)) { - Object[] params = {}; - String[] signature = {}; - JonasManagementRepr.invoke(mbName, "restartAdminQm", params, - signature, serverName); - fBean.setOperation("view"); - } - String hostname = (String) JonasManagementRepr.getAttribute(mbName, - "HostName", serverName); - String channel = (String) JonasManagementRepr.getAttribute(mbName, - "Channel", serverName); - String port = (String) JonasManagementRepr.getAttribute(mbName, - "Port", serverName); - String queueManager = (String) JonasManagementRepr.getAttribute( - mbName, "QueueManager", serverName); - String transportType = (String) JonasManagementRepr.getAttribute( - mbName, "TransportType", serverName); - ((JonasMqConnectForm) form).setHostname(hostname); - ((JonasMqConnectForm) form).setChannel(channel); - ((JonasMqConnectForm) form).setPort(port); - ((JonasMqConnectForm) form).setQueueManager(queueManager); - ((JonasMqConnectForm) form).setTransportType(transportType); - } catch (Exception ex) { - ex.printStackTrace(); - } - return mapping.findForward("JonasMqConnectStart"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectForm.java deleted file mode 100644 index 88ff594cf2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectForm.java +++ /dev/null @@ -1,197 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import org.apache.struts.action.ActionForm; - -public class JonasMqConnectForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * Version of the connector - */ - private String version = "1.0.0"; - - /** - * operation : view,edit,apply - */ - private String operation; - - /** - * Name of the connector - */ - private String connector; - - /** - * Hostname of the connector - */ - private String hostname; - - /** - * Channel of the connector - */ - private String channel; - - /** - * Port of the connector - */ - private String port; - - /** - * QueueManager of the connector - */ - private String queueManager; - - /** - * TransportType of the connector - */ - private String transportType; - - /** - * @return the version - */ - public String getVersion() { - return version; - } - - /** - * @param version the version to set - */ - public void setVersion(String version) { - this.version = version; - } - - /** - * add,modify,delete - * @return the operation - */ - public String getOperation() { - return operation; - } - - /** - * add,modify,delete - * @param operation the operation to set - */ - public void setOperation(String operation) { - this.operation = operation; - } - - /** - * get the name of the connector - * @return hostname - */ - public String getConnector() { - debug("JonasMqConnectForm#getConnector"); - return connector; - } - - /** - * set the name of the connector - * @param connector - */ - public void setConnector(String connector) { - debug("JonasMqConnectForm#setConnector("+connector+")"); - this.connector = connector; - } - - /** - * get the hostname of the connector - * @return hostname - */ - public String getHostname() { - debug("JonasMqConnectForm#getHostname"); - return hostname; - } - - /** - * set the hostname of the connector - * @param hostname - */ - public void setHostname(String hostname) { - debug("JonasMqConnectForm#setHostname("+hostname+")"); - this.hostname = hostname; - } - - /** - * get the channel of the connector - * @return channel - */ - public String getChannel() { - debug("JonasMqConnectForm#getChannel"); - return channel; - } - - /** - * set the channel of the connector - * @param channel - */ - public void setChannel(String channel) { - debug("JonasMqConnectForm#setChannel("+channel+")"); - this.channel = channel; - } - - /** - * get the port of the connector - * @return port - */ - public String getPort() { - debug("JonasMqConnectForm#getPort"); - return port; - } - - /** - * set the port of the connector - * @param port - */ - public void setPort(String port) { - debug("JonasMqConnectForm#setPort("+port+")"); - this.port = port; - } - - /** - * get the queueManager of the connector - * @return queueManager - */ - public String getQueueManager() { - debug("JonasMqConnectForm#getQueueManager"); - return queueManager; - } - - /** - * set the queueManager of the connector - * @param queueManager - */ - public void setQueueManager(String queueManager) { - debug("JonasMqConnectForm#setQueueManager("+queueManager+")"); - this.queueManager = queueManager; - } - - /** - * get the transportType of the connector - * @return transportType - */ - public String getTransportType() { - debug("JonasMqConnectForm#getTransportType"); - return transportType; - } - - /** - * set the transportType of the connector - * @param transportType - */ - public void setTransportType(String transportType) { - debug("JonasMqConnectForm#setTransportType("+transportType+")"); - this.transportType = transportType; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformAction.java deleted file mode 100644 index 8409b79fdc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformAction.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.Property; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class JonasMqConnectPlatformAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - JonasMqConnectPlatformForm fBean = (JonasMqConnectPlatformForm) form; - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - String serverName = oWhere.getCurrentJonasServerName(); - ArrayList names = MqObjectNames.getConnectorsONList(domainName, serverName); - ArrayList list = new ArrayList(); - for (int i = 0; i < names.size(); i++) { - list.add(new Property("connector", (String) names.get(i), - "Jonas MQ Connector")); - - } - m_Session.setAttribute("mqconnectors", list); - - /* - * Select the right tree node - */ - String nodeName = "domain" + WhereAreYou.NODE_SEPARATOR - + oWhere.getCurrentJonasServerName() - + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnect"; - - m_WhereAreYou.selectNameNode(nodeName, true); - - - return mapping.findForward("JonasMqConnectPlatform"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformForm.java deleted file mode 100644 index 3f789498a9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/JonasMqConnectPlatformForm.java +++ /dev/null @@ -1,176 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import org.apache.struts.action.ActionForm; - -public class JonasMqConnectPlatformForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * Version of the connector - */ - private String version = "1.0.0"; - - /** - * Name of the connector - */ - private String connector; - - /** - * Hostname of the connector - */ - private String hostname; - - /** - * Channel of the connector - */ - private String channel; - - /** - * Port of the connector - */ - private String port; - - /** - * QueueManager of the connector - */ - private String queueManager; - - /** - * TransportType of the connector - */ - private String transportType; - - /** - * @return the version - */ - public String getVersion() { - return version; - } - - /** - * @param version the version to set - */ - public void setVersion(String version) { - this.version = version; - } - - /** - * get the name of the connector - * @return hostname - */ - public String getConnector() { - debug("JonasMqConnectForm#getConnector"); - return connector; - } - - /** - * set the name of the connector - * @param connector - */ - public void setConnector(String connector) { - debug("JonasMqConnectForm#setConnector("+connector+")"); - this.connector = connector; - } - - /** - * get the hostname of the connector - * @return hostname - */ - public String getHostname() { - debug("JonasMqConnectForm#getHostname"); - return hostname; - } - - /** - * set the hostname of the connector - * @param hostname - */ - public void setHostname(String hostname) { - debug("JonasMqConnectForm#setHostname("+hostname+")"); - this.hostname = hostname; - } - - /** - * get the channel of the connector - * @return channel - */ - public String getChannel() { - debug("JonasMqConnectForm#getChannel"); - return channel; - } - - /** - * set the channel of the connector - * @param channel - */ - public void setChannel(String channel) { - debug("JonasMqConnectForm#setChannel("+channel+")"); - this.channel = channel; - } - - /** - * get the port of the connector - * @return port - */ - public String getPort() { - debug("JonasMqConnectForm#getPort"); - return port; - } - - /** - * set the port of the connector - * @param port - */ - public void setPort(String port) { - debug("JonasMqConnectForm#setPort("+port+")"); - this.port = port; - } - - /** - * get the queueManager of the connector - * @return queueManager - */ - public String getQueueManager() { - debug("JonasMqConnectForm#getQueueManager"); - return queueManager; - } - - /** - * set the queueManager of the connector - * @param queueManager - */ - public void setQueueManager(String queueManager) { - debug("JonasMqConnectForm#setQueueManager("+queueManager+")"); - this.queueManager = queueManager; - } - - /** - * get the transportType of the connector - * @return transportType - */ - public String getTransportType() { - debug("JonasMqConnectForm#getTransportType"); - return transportType; - } - - /** - * set the transportType of the connector - * @param transportType - */ - public void setTransportType(String transportType) { - debug("JonasMqConnectForm#setTransportType("+transportType+")"); - this.transportType = transportType; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditAction.java deleted file mode 100644 index 7434550fd3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditAction.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesComparator; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.PropertiesUtil; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class MdbEditAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - MdbEditForm fBean = (MdbEditForm) form; - String name = fBean.getName(); - ArrayList properties; - ObjectName mbName; - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - try { - ObjectName connectorON = MqObjectNames.getConnectorONByName( - domainName, - (String) m_Session.getAttribute("mqconnector")); - mbName = MqObjectNames.getMdbON(connectorON, name, serverName); - ArrayList propertiesName = new ArrayList(); - propertiesName.add("Destination"); - propertiesName.add("DestinationType"); - propertiesName.add("DestinationProperties"); - propertiesName.add("MessageSelector"); - propertiesName.add("SubscriptionDurability"); - propertiesName.add("SubscriptionName"); - propertiesName.add("AcknowledgeMode"); - propertiesName.add("MaxMessages"); - propertiesName.add("PoolSize"); - propertiesName.add("InitPoolSize"); - propertiesName.add("MaxNumberOfWorks"); - propertiesName.add("MdbName"); - propertiesName.add("UserName"); - propertiesName.add("Password"); - propertiesName.add("ReconnectInterval"); - propertiesName.add("MaxReconnect"); - properties = PropertiesUtil.getProperties(mbName, "getProperty", - propertiesName, serverName); - Collections.sort(properties, new PropertiesComparator()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - fBean.setProperties(properties); - return mapping.findForward("JonasMqConnectMdbEdit"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditForm.java deleted file mode 100644 index 16901383f8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbEditForm.java +++ /dev/null @@ -1,221 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.util.ArrayList; - -import org.apache.struts.action.ActionForm; - -public class MdbEditForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = false; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } - - /** - * operation : view,edit,apply - */ - private String operation; - - /** - * Selected queues - */ - private String[] selectedQueues; - - /** - * Selected topics - */ - private String[] selectedTopics; - - /** - * objectName - */ - private String objectName; - - /** - * name - */ - private String name; - - /** - * properties - */ - private ArrayList properties; - - /** - * stat properties - */ - private ArrayList statProperties; - - /** - * properties name - */ - private ArrayList propertiesName; - - /** - * properties value - */ - private ArrayList propertiesValue; - - /** - * isTopic - */ - private boolean isTopic; - - /** - * get name - * @return - */ - public String getName() { - return name; - } - - /** - * set name - * @param name - */ - public void setName(String name) { - this.name = name; - } - - /** - * get objectName - * @return - */ - public String getObjectName() { - return objectName; - } - - /** - * set objectName - * @param objectName - */ - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - /** - * add,modify,delete - * @return the operation - */ - public String getOperation() { - return operation; - } - - /** - * add,modify,delete - * @param operation the operation to set - */ - public void setOperation(String operation) { - this.operation = operation; - } - - /** - * Selected Queues - * @return the selected queues - */ - public String[] getSelectedQueues() { - return selectedQueues; - } - - /** - * selected queues - * @param selectedQueues the selected queues to set - */ - public void setSelectedQueues(String[] selectedQueues) { - this.selectedQueues = selectedQueues; - } - - /** - * Selected Topics - * @return the selected topics - */ - public String[] getSelectedTopics() { - return selectedTopics; - } - - /** - * selected topics - * @param selectedTopics the selected topics to set - */ - public void setSelectedTopics(String[] selectedTopics) { - this.selectedTopics = selectedTopics; - } - - /** - * @return the propertiesName - */ - public ArrayList getPropertiesName() { - return propertiesName; - } - - /** - * @param propertiesName the propertiesName to set - */ - public void setPropertiesName(ArrayList propertiesName) { - this.propertiesName = propertiesName; - } - - /** - * @return the propertiesValue - */ - public ArrayList getPropertiesValue() { - return propertiesValue; - } - - /** - * @param propertiesValue the propertiesValue to set - */ - public void setPropertiesValue(ArrayList propertiesValue) { - this.propertiesValue = propertiesValue; - } - - /** - * @return the properties - */ - public ArrayList getProperties() { - return properties; - } - - /** - * @param statProperties the stat properties to set - */ - public void setStatProperties(ArrayList statProperties) { - this.statProperties = statProperties; - } - - /** - * @return the stat properties - */ - public ArrayList getStatProperties() { - return statProperties; - } - - /** - * @param properties the properties to set - */ - public void setProperties(ArrayList properties) { - this.properties = properties; - } - - /** - * @return isTopic - */ - public boolean getIsTopic() { - return isTopic; - } - - /** - * @param isTopic - */ - public void setIsTopic(boolean isTopic) { - this.isTopic = isTopic; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsAction.java deleted file mode 100644 index ba393fe704..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsAction.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.ItemMdb; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.LogUtils; -import org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util.MqObjectNames; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class MdbsAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping mapping, ActionForm form - , HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - MdbsForm fBean = (MdbsForm) form; - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - /* - * The "mqconnector" session attribute should be set - */ - String connector = (String) m_Session.getAttribute("mqconnector"); - //domain*jmq1*jonasmqconnect*jonasmqconnector*fwaMQJca - // Force the node selection in tree - String nodeName = "domain" + WhereAreYou.NODE_SEPARATOR - + serverName + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnect" + WhereAreYou.NODE_SEPARATOR - + "jonasmqconnector" + WhereAreYou.NODE_SEPARATOR - + connector; - m_WhereAreYou.selectNameNode(nodeName, true); - - try { - ObjectName mbName = MqObjectNames.getConnectorONByName(domainName, connector); - Object[] params = {}; - String[] signature = {}; - String[] onMdbs = (String[]) JonasManagementRepr.invoke( - mbName, "listConsumerObjectNames", params, signature, serverName); - ArrayList mdbsArray = new ArrayList(); - for (int i = 0; i < onMdbs.length; i++) { - ObjectName on = new ObjectName(onMdbs[i]); - int numberMsg = ((Integer) JonasManagementRepr.getAttribute( - on, "NumberOfReceivedMessages", serverName)).intValue(); - - String name = on.getKeyProperty("name"); - String mqDest = on.getKeyProperty("MQDestination"); - ItemMdb item = new ItemMdb(name, onMdbs[i], mqDest, numberMsg); - mdbsArray.add(item); - } - - m_Session.setAttribute("mqmdbs", mdbsArray); - } catch (Exception ex) { - LogUtils.print(ex.getMessage()); - } - return mapping.findForward("JonasMqConnectMdbs"); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsForm.java deleted file mode 100644 index 97e92c4db1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/MdbsForm.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect; - -import org.apache.struts.action.ActionForm; - -public class MdbsForm extends ActionForm { - /** - * debug or not - */ - private boolean debug = true; - - /** - * printe debug msg - * @param s msg - */ - private void debug(String s) { - if (debug) - System.out.println(s); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemDestination.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemDestination.java deleted file mode 100644 index 3cfe75e794..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemDestination.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - -import javax.management.ObjectName; - - -public class ItemDestination implements java.io.Serializable { - private String name; - private String type; - private String baseName; - private ObjectName mbeanName; - private String connector; - - public ItemDestination(String name, String type, String baseName,ObjectName objectName) { - this.name = name; - this.type = type; - this.baseName = baseName; - this.mbeanName = objectName; - this.connector = objectName.getKeyProperty("JonasMQConnector"); - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - - /** - * @param type The type to set. - */ - public void setType(String type) { - this.type = type; - } - - /** - * @return Returns the baseName. - */ - public String getBaseName() { - return baseName; - } - - /** - * @param baseName The baseName to set. - */ - public void setBaseName(String baseName) { - this.baseName = baseName; - } - - - /** - * @return Returns the baseName. - */ - public ObjectName getMBeanName() { - return mbeanName; - } - - /** - * @return Returns the connector name. - */ - public String getConnector() { - return connector; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemMdb.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemMdb.java deleted file mode 100644 index c91015ee0b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/ItemMdb.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - - -public class ItemMdb implements java.io.Serializable { - private String name; - private String objectName; - private String mqDestination; - private int numberMsg; - - public ItemMdb(String name, String objectName, String mqDestination, int numberMsg) { - this.name = name; - this.objectName = objectName; - this.mqDestination = mqDestination; - this.numberMsg = numberMsg; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the object name. - */ - public String getObjectName() { - return objectName; - } - - /** - * @param objectName The object name to set. - */ - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - /** - * @return Returns the mq destination name. - */ - public String getMqDestination() { - return mqDestination; - } - - /** - * @param mqDestination The mq destination name to set. - */ - public void setMqDestination(String mqDestination) { - this.mqDestination = mqDestination; - } - - /** - * @return Returns number of received message. - */ - public int getNumberMsg() { - return numberMsg; - } - - /** - * @param numberMsg number of received message to set. - */ - public void setNumberMsg(int numberMsg) { - this.numberMsg = numberMsg; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/LogUtils.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/LogUtils.java deleted file mode 100644 index e08e4749aa..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/LogUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - - -/** - * - * @author Yacine TOUIL - */ -public class LogUtils { - - /** - * debug or not - */ - private static boolean DEBUG = false; - - /** - * print msg. - */ - public static void print(String msg) { - if (DEBUG) { - // TO DO - System.out.println(msg); - } - } - - /** - * Private constructor - */ - private LogUtils() { - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/MqObjectNames.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/MqObjectNames.java deleted file mode 100644 index ba15bc0f97..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/MqObjectNames.java +++ /dev/null @@ -1,161 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - -import java.util.Iterator; -import java.util.Set; -import java.util.ArrayList; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - - -public class MqObjectNames { - - /** - * ObjectName of JOnAS MQ connector - * @param domainName domain name - * @param name connector name - * @return ObjectName of JOnAS MQ connector - */ - public static ObjectName getConnectorONByName(String domainName, String name) { - try { - return ObjectName.getInstance(domainName + ":type=JonasMQConnector,name=" + name); - } catch (Exception ex) { - ex.printStackTrace(); - return null; - } - } - - /** - * ObjectName of all JOnAS MQ connectors deployed in a given JOnAS server - * @param domainName domain name - * @param serverName server name - * @return ObjectName of all JOnAS MQ connectors deployed in a given JOnAS server - */ - public static ObjectName[] getConnectorsON(String domainName, String serverName) { - try { - ObjectName on = ObjectName.getInstance(domainName + ":type=JonasMQConnector,*"); - Set set = JonasManagementRepr.queryNames(on, serverName); - ObjectName[] list = new ObjectName[set.size()]; - int j = 0; - for (Iterator i = set.iterator(); i.hasNext();) { - list[j++] = (ObjectName) i.next(); - } - return list; - } catch (Exception ex) { - ex.printStackTrace(System.err); - return null; - } - } - - /** - * ObjectName of all JOnAS MQ connectors deployed in a given JOnAS server - * @param domainName domain name - * @param serverName server name - * @return ObjectName list of all JOnAS MQ connectors deployed in a given JOnAS server - */ - public static ArrayList getConnectorsONList(String domainName, String serverName) { - try { - ObjectName ons = ObjectName.getInstance(domainName + ":type=JonasMQConnector,*"); - Set set = JonasManagementRepr.queryNames(ons, serverName); - ArrayList list = new ArrayList(); - int j = 0; - for (Iterator i = set.iterator(); i.hasNext();) { - ObjectName on = (ObjectName) i.next(); - list.add(on.getKeyProperty("name")); - } - return list; - } catch (Exception ex) { - ex.printStackTrace(System.err); - return null; - } - } - - /** - * ObjectName of a MQ destination created by deploying a given MQ connector - * @param connector connector name - * @param jndiName JNDI name of the MQ destination - * @param domainName domain name - * @return ObjectName of the MQ destination - */ - public static ObjectName getDestinationON(String domainName, String jndiName, String connector) { - try { - return new ObjectName(domainName + ":type=MQDestination,name=" + jndiName - + ",JonasMQConnector=" + connector); - } catch (Exception ex) { - ex.printStackTrace(System.err); - } - return null; - } - - /** - * ObjectName of all the destination created by deploying a given MQ connector - * @param connector connector name - * @param domainName domain name - * @return ObjectName of the MQ destination - */ - public static ObjectName getDestinationsON(String domainName, String connector) { - try { - return new ObjectName(domainName + ":type=MQDestination,JonasMQConnector=" + connector + ",*"); - } catch (Exception ex) { - ex.printStackTrace(System.err); - } - return null; - } - /** - * ObjectName of Mdb - * @param connectorON conector ObjectName - * @param name the name of the requested MDB - * @param serverName JOnAS server name - * @return ObjectName of Mdb - */ - public static ObjectName getMdbON(ObjectName connectorON, String name, String serverName) { - try { - Object[] params = {}; - String[] signature = {}; - String[] onMdbs = (String[]) JonasManagementRepr.invoke( - connectorON, "listConsumerObjectNames", params, signature, serverName); - for (int i = 0; i < onMdbs.length; i++) { - ObjectName on = new ObjectName(onMdbs[i]); - String onName = on.getKeyProperty("name"); - if (onName.equals(name)) { - return on; - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - return null; - } - - - /** - * ObjectName of parent connector - * @param on ObjectName of .. - * @param domainName domain name - * @return the ObjectName of the parent connector, or null - */ - public static ObjectName getParentConnectorON(String domainName, ObjectName on) { - - /* - * If on is a connector, simply return it - */ - if ("JonasMQConnector".equals(on.getKeyProperty("type"))) { - return on; - } - - /* - * Else guess the connector on - */ - ObjectName connectorON = null; - try { - connectorON = ObjectName.getInstance(domainName + ":type=JonasMQConnector,name=" + on.getKeyProperty("JonasMQConnector")); - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(System.err); - } - return connectorON; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesComparator.java deleted file mode 100644 index 2d6f5b0e20..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesComparator.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - -import java.util.Comparator; - -public class PropertiesComparator implements Comparator { - - public int compare(Object obj1, Object obj2) { - Property prop1 = (Property) obj1; - Property prop2 = (Property) obj2; - - int iRet = prop1.getName().compareToIgnoreCase(prop2.getName()); - if (iRet == 0) { - iRet = prop1.getValue().compareToIgnoreCase(prop2.getValue()); - } - return iRet; - } - - public boolean equals(Object obj) { - if (obj instanceof Property) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesUtil.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesUtil.java deleted file mode 100644 index 6c2da2e8d6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/PropertiesUtil.java +++ /dev/null @@ -1,180 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - -import java.lang.reflect.Method; -import java.util.ArrayList; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - - -/** - * Util class for getting MQ class properties - * - * @author Yacine TOUIL - * - */ -public class PropertiesUtil { - - /** - * Get Class Properties - * @param mbName - * @param mqClass - * @param getPropertyMethodName - * @return - */ - public static ArrayList getClassProperties(ObjectName mbName, Class mqClass, - String getPropertyMethodName, String serverName){ - return getClassProperties(mbName, mqClass, getPropertyMethodName, null, serverName); - } - - /** - * Get Class Properties - * @param mbName - * @param mqClass - * @param getPropertyMethodName - * @return - */ - public static ArrayList getClassProperties(ObjectName mbName, Class mqClass, - String getPropertyMethodName, String[] propertiesToRemove, String serverName){ - ArrayList properties = new ArrayList(); - Method[] mqMethod = mqClass.getMethods(); - String[] signature = new String[]{"java.lang.String"}; - Object[] params = new Object[]{}; - for (int i = 0; i < mqMethod.length; i++) { - String propName = null; - String propValue = null; - try { - String name = mqMethod[i].getName(); - if (name.startsWith("get") && - mqMethod[i].getParameterTypes().length == 0 && - (mqMethod[i].getReturnType().equals(String.class) || - mqMethod[i].getReturnType().equals(int.class) || - mqMethod[i].getReturnType().equals(Integer.class)) && - !containStr(propertiesToRemove, name.substring(3))) { - propName = name.substring(3); - params = new Object[]{propName}; - propValue = "" + JonasManagementRepr.invoke( - mbName, getPropertyMethodName, params, signature, serverName); - } - } catch (Exception ex) { - // ignore property - continue; - } - if (propName != null && propName.length() > 0) { - properties.add(new Property(propName, propValue, propName)); - } - } - return properties; - } - - /** - * Get Properties - * @param mbName - * @param getPropertyMethodName - * @param properties - * @return - */ - public static ArrayList getProperties(ObjectName mbName, - String getPropertyMethodName, ArrayList propertiesName,String serverName){ - ArrayList properties = new ArrayList(); - String[] signature = new String[]{"java.lang.String"}; - Object[] params = new Object[]{}; - for (int i = 0; i < propertiesName.size(); i++) { - String propName = null; - String propValue = null; - try { - propName = (String) propertiesName.get(i); - params = new Object[]{propName}; - propValue = "" + JonasManagementRepr.invoke( - mbName, getPropertyMethodName, params, signature, serverName); - } catch (Exception ex) { - // ignore property - continue; - } - if (propName != null && propName.length() > 0) { - properties.add(new Property(propName, propValue, propName)); - } - } - return properties; - } - - /** - * Set Class Properties - * @param mbName - * @param mqClass - * @param getPropertyMethodName - * @return - */ - public static void setClassProperties(ObjectName mbName, /* FWA - commented out: Class mqClass, */ - String setPropertyMethodName, ArrayList properties, String serverName){ - String[] signature = new String[]{"java.lang.String", - "java.lang.String"}; - Object[] params = new Object[]{}; - - for (int i = 0; i < properties.size(); i++) { - try { - Property property = (Property) properties.get(i); - String propName = property.getName(); - String propValue = property.getValue(); - params = new Object[]{propName, propValue}; - JonasManagementRepr.invoke( - mbName, setPropertyMethodName, params, signature, serverName); - } catch (Exception ex) { - LogUtils.print(ex.getMessage()); - } - } - } - - /** - * Get Class Properties - * @param mbName - * @param mqClass - * @param getPropertyMethodName - * @return - */ - public static ArrayList getJMSObjectProperties(ObjectName mbName, String selector, - String getPropertyMethodName, String[] propertiesToRemove, String serverName, String domainName) { - - ObjectName parentConnectorON = MqObjectNames.getParentConnectorON(domainName, mbName); - Object[] params = new String[] { - selector }; - String[] signature = new String[]{"java.lang.String"}; - String[] propertyNames = (String[]) JonasManagementRepr.invoke(parentConnectorON, "listPropertyNames", params, signature, serverName); - - ArrayList properties = new ArrayList(); - for (int i = 0; i < propertyNames.length; i++) { - if (!containStr(propertiesToRemove, propertyNames[i])) { - - params = new Object[]{propertyNames[i]}; - String propValue = null; - try { - propValue = "" + JonasManagementRepr.invoke( - mbName, getPropertyMethodName, params, signature, serverName); - } catch (Exception e) { - // TODO log a WARN record ? or nothing - } - properties.add(new Property(propertyNames[i], propValue, propertyNames[i])); - } - } - return properties; - } - - /** - * if contain str in tab - * @param tab - * @param str - * @return - */ - private static boolean containStr(String[] tab, String str) { - if (tab == null) { - return false; - } - for (int i = 0; i < tab.length; i++) { - if (tab[i].equals(str)) { - return true; - } - } - return false; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/Property.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/Property.java deleted file mode 100644 index 6450a0f51c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasmqconnect/util/Property.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.jonasmqconnect.util; - - -public class Property implements java.io.Serializable { - private String name; - private String value; - private String text; - - public Property(String name, String value, String text) { - this.name = name; - this.value = value; - this.text = text; - } - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the value. - */ - public String getValue() { - return value; - } - - /** - * @param value The value to set. - */ - public void setValue(String value) { - this.value = value; - } - - /** - * @return Returns the text. - */ - public String getText() { - return text; - } - - /** - * @param value The text to set. - */ - public void setText(String text) { - this.text = text; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/BasicJonasServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/BasicJonasServerForm.java deleted file mode 100644 index 171fcb0e70..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/BasicJonasServerForm.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class BasicJonasServerForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - /** - * True is a servlet container is present - */ - private boolean presentServletContainer = false; - - public boolean getPresentServletContainer() { - return presentServletContainer; - } - - public void setPresentServletContainer(boolean present) { - presentServletContainer = present; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - presentServletContainer = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - - } diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/CmiRegistryResource.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/CmiRegistryResource.java deleted file mode 100644 index 68ed368391..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/CmiRegistryResource.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.cmi.ClusterAttribute; -import org.ow2.jonas.webapp.jonasadmin.cmi.CmiObject; - -/** - * Helper class which manipulates CMI MBean for registry content - * @author Adriana Danes - * - */ -public class CmiRegistryResource { - - public static final String PREFIX = "REG_"; - /** - * local node - */ - public static final String LOCAL = "local"; - - public static ArrayList getCmiRegistry(ObjectName cmiOn, final List names, String serverName) { - ArrayList result = new ArrayList(); - List globalObjects = new ArrayList(); - Set clusterList = (Set)JonasManagementRepr.getAttribute(cmiOn, "ClusterNames", serverName); - for (Iterator iter = clusterList.iterator(); iter.hasNext();) { - String[] signature = {"java.lang.String"}; - String clusterName = (String) iter.next(); - String[] params = {clusterName}; - Set objectList = (Set)JonasManagementRepr.invoke(cmiOn, "getObjectNames", params, signature, serverName); - //Add the global objects. - globalObjects.addAll(objectList); - //Set objectList = (Set)cmiMbeansServer.invoke(cmiOn, "getObjectNames", params, signature); - } - for (Iterator iterator = names.iterator(); iterator.hasNext();) { - String object = (String) iterator.next(); - if (globalObjects.contains(object)) { - //the object is global - result.add(new CmiObject(object, false, null)); - }else { - //The object is local - result.add(new CmiObject(object, true, null)); - } - - } - return result; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJmxServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJmxServerAction.java deleted file mode 100644 index 1ba557d737..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJmxServerAction.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditJmxServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - /** - * Execute action for JMX service management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + serverName, true); - - // Form used - JmxServerForm oForm = (JmxServerForm) pForm; - try { - // Object name used - ObjectName oObjectName = JonasObjectName.jmxService(); - // Copy scalar properties - oForm.setMBeanServerId(getStringAttribute(oObjectName, "MBeanServerId")); - oForm.setSpecificationName(getStringAttribute(oObjectName, "SpecificationName")); - oForm.setSpecificationVersion(getStringAttribute(oObjectName, "SpecificationVersion")); - oForm.setSpecificationVendor(getStringAttribute(oObjectName, "SpecificationVendor")); - oForm.setImplementationName(getStringAttribute(oObjectName, "ImplementationName")); - oForm.setImplementationVersion(getStringAttribute(oObjectName, "ImplementationVersion")); - oForm.setImplementationVendor(getStringAttribute(oObjectName, "ImplementationVendor")); - if (JonasManagementRepr.isRegistered(JonasObjectName.webContainerService(domainName), serverName)) { - oForm.setPresentServletContainer(true); - } else { - oForm.setPresentServletContainer(false); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("JmxServer")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJonasServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJonasServerAction.java deleted file mode 100644 index 0279681652..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJonasServerAction.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditJonasServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - /** - * Execute action for a JOnAS server instance management. - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - String param = pRequest.getParameter("select"); - String paramFlex = pRequest.getParameter("flex"); - boolean changeManagement = false; - // target server ObjectName - ObjectName oObjectName = null; - try { - ObjectName requestedObjectName = ObjectName.getInstance(param); - String requestedJonasServerName = requestedObjectName.getKeyProperty("name"); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - ObjectName cmiOn = JonasObjectName.cmiServer(domainName, requestedJonasServerName); - //is cmi enabled started ? - pRequest.setAttribute("cmi", new Boolean(JonasAdminJmx.hasMBeanName(cmiOn, requestedJonasServerName)).toString()); - // Domain ObjectName - ObjectName on = J2eeObjectName.J2EEDomain(domainName); - // Check if we are on a master - boolean isMaster = getBooleanAttribute(on, "master"); - pRequest.setAttribute("master", String.valueOf(isMaster)); - - if (!currentJonasServerName.equals(requestedJonasServerName)) { - // Update management context m_WhereAreYou - m_WhereAreYou.refreshServers(pRequest, domainName, requestedJonasServerName); - // update variable used below - currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - if (currentJonasServerName.equals(requestedJonasServerName)) { - changeManagement = true; - } else { - addGlobalError(new Error("Can't switch management context to server " + requestedJonasServerName)); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - } - - if (changeManagement) { - refreshTree(pRequest); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + requestedJonasServerName, true); - - // Form used - JonasServerForm oForm = (JonasServerForm) pForm; - oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , currentJonasServerName); - oForm.setJonasName(currentJonasServerName); - oForm.setJonasVersion(getStringAttribute(oObjectName, "serverVersion")); - oForm.setProtocols(getStringAttribute(oObjectName, "protocols")); - oForm.setVersions(getStringAttribute(oObjectName, "versions")); - try { - oForm.setState(getStringAttribute(oObjectName, "state")); - } catch (ManagementException me) { - oForm.setState("RUNNING"); - } - if (JonasManagementRepr.isRegistered(JonasObjectName.webContainerService(domainName), currentJonasServerName)) { - oForm.setPresentServletContainer(true); - if (m_WhereAreYou.isCatalinaServer()) { - oForm.setServerServletContainerInfo("Apache Tomcat"); - //oForm.setServerServletContainerInfo(ServerInfo.getServerInfo()); - } - } else { - oForm.setPresentServletContainer(false); - m_Session.setAttribute("presentServletContainer", false); - } - } catch (Throwable t) { - Throwable cause = t.getCause(); - if (cause instanceof javax.management.InstanceNotFoundException - && oObjectName != null) { - t = new ManagementException(targetMassage(oObjectName), cause); - } - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - if (paramFlex != null && paramFlex.equals("true")) { - return (pMapping.findForward("Main Index")); - } - return (pMapping.findForward("JonasServer")); - } - - private String targetMassage(final ObjectName pObjectName) { - StringBuffer buf = new StringBuffer(); - String domainName = pObjectName.getDomain(); - String serverName = pObjectName.getKeyProperty("name"); - buf = buf.append("It seems that server "); - buf = buf.append(serverName); - buf = buf.append(" it's not in domain "); - buf = buf.append(domainName); - buf = buf.append("-"); - return new String(buf); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJvmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJvmAction.java deleted file mode 100644 index 21ab35b4c2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditJvmAction.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana DANES - */ - -public class EditJvmAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - * Execute action for JVM management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER), true); - - ActionMessages oErrors = new ActionMessages(); - - // The MBean of current Jonas server - ObjectName onServer = m_WhereAreYou.getCurrentJonasServer(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // JVM MBean - ObjectName oObjectName = null; - // List of JVMs - in reality we have only one - String[] jvms = (String []) JonasManagementRepr.getAttribute(onServer, "javaVMs", serverName); - try { - if (jvms.length > 0) { - oObjectName = new ObjectName(jvms[0]); - } else { - oErrors.add("JVMs", new ActionMessage("error.server.jonas.jvms")); - saveErrors(pRequest, oErrors); - return (pMapping.findForward("Global Error")); - } - } catch (MalformedObjectNameException e) { - addGlobalError(e); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Form used - JvmForm oForm = (JvmForm) pForm; - try { - // Copy scalar properties - oForm.setJavaVendor(getStringAttribute(oObjectName, "javaVendor")); - oForm.setJavaVersion(getStringAttribute(oObjectName, "javaVersion")); - oForm.setNode(getStringAttribute(oObjectName, "node")); - if (JonasManagementRepr.isRegistered(JonasObjectName.webContainerService(domainName), serverName)) { - oForm.setPresentServletContainer(true); - } else { - oForm.setPresentServletContainer(false); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Jvm")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditRegistryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditRegistryAction.java deleted file mode 100644 index fdb804267b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditRegistryAction.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class EditRegistryAction extends JonasBaseAction { - - /** - * Execute action for registry management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER), true); - - // Selected resource - String sObjectName = pRequest.getParameter("select"); - if (sObjectName != null) { - try { - ObjectName on = ObjectName.getInstance(sObjectName); - JndiResourceForm oForm = new JndiResourceForm(); - // test if the resource corresponds to the CMI protocol - // in this case, the resource name is 'cmi' - // and we have a CMI type MBean - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String sServerName = m_WhereAreYou.getCurrentJonasServerName(); - List lNames = getListAttribute(on, "Names"); - boolean cmi = false; - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, sServerName); - if (JonasAdminJmx.hasMBeanName(cmiOn, sServerName)) { - cmi = true; - } - if (cmi) { - List namesAndNodes = CmiRegistryResource.getCmiRegistry(cmiOn, lNames, sServerName); - oForm.setVector(namesAndNodes); - oForm.setRegistryProtocol("cmi"); - } else { - oForm.setListNames(lNames); - oForm.setRegistryProtocol(getStringAttribute(on, "Name")); - } - pRequest.setAttribute("jndiResourceForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - } - - // Forward to the jsp. - return (pMapping.findForward("List Registry")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditServletServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditServletServerAction.java deleted file mode 100644 index 9dc2d22686..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/EditServletServerAction.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditServletServerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - /** - * Execute action for servlet server management - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER), true); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Form used - ServletServerForm oForm = new ServletServerForm(); - pRequest.setAttribute("servletServerForm", oForm); - try { - // Object name used - ObjectName oObjectName = JonasObjectName.webContainerService(domainName); - oForm.setServerName(getStringAttribute(oObjectName, "ServerName")); - oForm.setServerVersion(getStringAttribute(oObjectName, "ServerVersion")); - if (m_WhereAreYou.isCatalinaServer()) { - oForm.setServerCatalina(true); - oForm.setServerCatalinaService(m_WhereAreYou.getCurrentCatalinaServiceName()); - oForm.setServerCatalinaEngine(m_WhereAreYou.getCurrentCatalinaEngineName()); - oForm.setServerCatalinaDefaultHost(m_WhereAreYou.getCurrentCatalinaDefaultHostName()); - - // Get the forward parameter in query string or in http request - String sForward = pRequest.getParameter("forward"); - if (sForward == null) { - sForward = (String) pRequest.getAttribute("forward"); - } - oForm.setForwardAfter(sForward); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (pMapping.findForward("Servlet Server")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JmxServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JmxServerForm.java deleted file mode 100644 index cd0863b834..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JmxServerForm.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Jmx server form page. - */ - -public final class JmxServerForm extends BasicJonasServerForm { - -// ------------------------------------------------------------- Properties Variables - - private String mBeanServerId = null; - private String specificationName = null; - private String specificationVersion = null; - private String specificationVendor = null; - private String implementationName = null; - private String implementationVersion = null; - private String implementationVendor = null; - -// ------------------------------------------------------------- Properties Methods - - public String getSpecificationVersion() { - return specificationVersion; - } - - public void setSpecificationVersion(String specificationVersion) { - this.specificationVersion = specificationVersion; - } - - public String getMBeanServerId() { - return mBeanServerId; - } - - public void setMBeanServerId(String mBeanServerId) { - this.mBeanServerId = mBeanServerId; - } - - public String getSpecificationName() { - return specificationName; - } - - public void setSpecificationName(String specificationName) { - this.specificationName = specificationName; - } - - public String getSpecificationVendor() { - return specificationVendor; - } - - public void setSpecificationVendor(String specificationVendor) { - this.specificationVendor = specificationVendor; - } - - public String getImplementationName() { - return implementationName; - } - - public void setImplementationName(String implementationName) { - this.implementationName = implementationName; - } - - public String getImplementationVersion() { - return implementationVersion; - } - - public void setImplementationVersion(String implementationVersion) { - this.implementationVersion = implementationVersion; - } - - public String getImplementationVendor() { - return implementationVendor; - } - - public void setImplementationVendor(String implementationVendor) { - this.implementationVendor = implementationVendor; - } - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - mBeanServerId = null; - specificationName = null; - specificationVersion = null; - specificationVendor = null; - implementationName = null; - implementationVersion = null; - implementationVendor = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceForm.java deleted file mode 100644 index edd9b33873..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceForm.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class JndiResourceForm extends BasicJonasServerForm { - -// --------------------------------------------------------- Properties variables - /** - * registry protocol from carl.properties - */ - private String registryProtocol = null; - /** - * Names of registered objects when protocol is not cmi - */ - private ArrayList listNames = new ArrayList(); - /** - * For cmi, in the list we have a 2 elements array were the 1st - * element equal the name and the 2nd element equals the nodes list - */ - private ArrayList listNamesAndNodes = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - listNames = new ArrayList(); - listNamesAndNodes = new ArrayList(); - //v = new Vector(); - } - -// --------------------------------------------------------- Properties Methods - - - /** - * @return the names of registered objects when protocol is not cmi - */ - public ArrayList getListNames() { - return listNames; - } - /** - * @param pList the names of registered objects when protocol is not cmi - */ - public void setListNames(List pList) { - listNames.clear(); - listNames = new ArrayList(pList); - Collections.sort(listNames, new BeanComparator()); - } - /** - * @return the registry protocol from carl.properties - */ - public String getRegistryProtocol() { - return registryProtocol; - } - /** - * @param protocol the registry protocol from carl.properties - */ - public void setRegistryProtocol(String protocol) { - this.registryProtocol = protocol; - } - /** - * @param pList for cmi, in the list we have a 2 elements array were the 1st - * element equal the name and the 2nd element equals the nodes list - */ - public void setVector(List pList) { - listNamesAndNodes.clear(); - listNamesAndNodes = new ArrayList(pList); - Collections.sort(listNamesAndNodes, new BeanComparator()); - } - /** - * @return for cmi, a list haveing 2 elements array were the 1st - * element equals the name and the 2nd element equals the nodes list - */ - public ArrayList getVector() { - return this.listNamesAndNodes; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceItem.java deleted file mode 100644 index 78360600a9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourceItem.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; -/* -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -*/ - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class JndiResourceItem implements NameItem { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String providerUrl = null; - private String protocol = null; - private String resourceON = null; - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - providerUrl = null; - protocol = null; - resourceON = null; - name = null; - //listNames = new ArrayList(); - } - -// --------------------------------------------------------- Properties Methods - - public String getProviderUrl() { - return providerUrl; - } - - public void setProviderUrl(String providerUrl) { - this.providerUrl = providerUrl; - } - /** - * @return Returns the protocol. - */ - public String getProtocol() { - return protocol; - } - /** - * @param protocol The protocol to set. - */ - public void setProtocol(String protocol) { - this.protocol = protocol; - } - /** - * @return Returns the resourceON. - */ - public String getResourceON() { - return resourceON; - } - /** - * @param resourceON The resourceON to set. - */ - public void setResourceON(String resourceON) { - this.resourceON = resourceON; - } - /** - * @return Returns the name. - */ - public String getName() { - return name; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourcesForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourcesForm.java deleted file mode 100644 index 09277bd04b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JndiResourcesForm.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMapping; -/** - * @author Adriana Danes - */ -public class JndiResourcesForm extends JndiResourceForm { - -// --------------------------------------------------------- Properties variables - - private ArrayList providers = new ArrayList(); -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - providers = new ArrayList(); - } - -// --------------------------------------------------------- Properties Methods - - public void addProvider(JndiResourceItem provider) { - providers.add(provider); - } - public List getProviders() { - return providers; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerForm.java deleted file mode 100644 index 20686334cb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerForm.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Jonas server form page. - * @author Michel-Ange ANTON - */ - -public final class JonasServerForm extends BasicJonasServerForm { - -// ------------------------------------------------------------- Properties Variables - - /** - * The text for the Jonas server version. - */ - private String jonasVersion = null; - - /** - * The text for the Jonas server name. - */ - private String jonasName = null; - - /** - * The text for the Jonas server ORB. - */ - private String protocols = null; - - private String versions = null; - - /** - * The info for the servlet container used. - */ - private String serverServletContainerInfo = null; - - /** - * JOnAS server state - */ - private String state = null; - -// ------------------------------------------------------------- Properties Methods - - public String getJonasVersion() { - return jonasVersion; - } - - public void setJonasVersion(String jonasVersion) { - this.jonasVersion = jonasVersion; - } - - public String getJonasName() { - return jonasName; - } - - public void setJonasName(String jonasName) { - this.jonasName = jonasName; - } - - /** - * Get the Jonas server ORB. - * @return - */ - public String getProtocols() { - return protocols; - } - - /** - * Set the Jonas server ORB. - * @param orb - */ - public void setProtocols(String protocols) { - this.protocols = protocols; - } - - public String getServerServletContainerInfo() { - return serverServletContainerInfo; - } - - public void setServerServletContainerInfo(String serverServletContainerInfo) { - this.serverServletContainerInfo = serverServletContainerInfo; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - - jonasName = null; - jonasVersion = null; - protocols = null; - versions = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return action errors - */ - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - /** - * @return Returns the versions. - */ - public String getVersions() { - return versions; - } - - /** - * @param versions The versions to set. - */ - public void setVersions(String versions) { - this.versions = versions; - } - - /** - * @return the state information - */ - public String getState() { - return state; - } - - /** - * Set state information - * @param state value - */ - public void setState(String state) { - this.state = state; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerRunGCAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerRunGCAction.java deleted file mode 100644 index c5be5a10ef..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerRunGCAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange Anton - */ - -public class JonasServerRunGCAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param p_Mapping The ActionMapping used to select this instance - * @param p_Form The optional ActionForm bean for this request (if any) - * @param p_Request The HTTP request we are processing - * @param p_Response The HTTP response we are creating - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Object name used - ObjectName oObjectName = null; - try { - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , serverName); - // call method - JonasManagementRepr.invoke(oObjectName, "runGC", null, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JonasServer")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerStopAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerStopAction.java deleted file mode 100644 index 0b19db249f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JonasServerStopAction.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * @author Michel-Ange Anton - */ -public class JonasServerStopAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param pMapping The ActionMapping used to select this instance - * @param pForm The optional ActionForm bean for this request (if any) - * @param pRequest The HTTP request we are processing - * @param pResponse The HTTP response we are creating - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - try { - // Object name used - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , serverName); - JonasManagementRepr.invoke(oObjectName, "stop", null, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("JonasServer")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JvmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JvmForm.java deleted file mode 100644 index 2c958e8f5e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/JvmForm.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Jvm form page. - */ - -public final class JvmForm extends BasicJonasServerForm { - -// ------------------------------------------------------------- Properties Variables - - private String javaVersion = null; - private String javaVendor = null; - private String node = null; - -// ------------------------------------------------------------- Properties Methods - - public String getJavaVersion() { - return javaVersion; - } - - public void setJavaVersion(String javaVersion) { - this.javaVersion = javaVersion; - } - - public String getJavaVendor() { - return javaVendor; - } - - public void setJavaVendor(String javaVendor) { - this.javaVendor = javaVendor; - } - - public String getNode() { - return node; - } - - public void setNode(String node) { - this.node = node; - } -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - javaVersion = null; - javaVendor = null; - node = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ListRegistryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ListRegistryAction.java deleted file mode 100644 index 356a6d1e50..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ListRegistryAction.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Adriana Danes
- * Contributor Michel-Ange Anton - */ -public class ListRegistryAction extends JonasBaseAction { - /** - * Execute action for registry management. - * @param pMapping mapping info - * @param pForm form object - * @param pRequest HTTP request - * @param pResponse HTTP response - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - // Form used - JndiResourcesForm oForm = new JndiResourcesForm(); - - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + jonasServerName, true); - - try { - String pDomainName = m_WhereAreYou.getCurrentDomainName(); - String pServerName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName resourceOn = null; // used if only one JNDI resource - ObjectName ons = J2eeObjectName.JNDIResources(pDomainName, pServerName); - Iterator itNames = JonasManagementRepr.queryNames(ons, pServerName).iterator(); - List lNames = null; - int nbJNDIResources = 0; - while (itNames.hasNext()) { - JndiResourceItem item = new JndiResourceItem(); - ObjectName itOn = (ObjectName) itNames.next(); - item.setProviderUrl(getStringAttribute(itOn, "ProviderURL")); - item.setProtocol(getStringAttribute(itOn, "Name")); - item.setResourceON(itOn.toString()); - lNames = getListAttribute(itOn, "Names"); - oForm.addProvider(item); - resourceOn = itOn; - nbJNDIResources++; - } - - if (nbJNDIResources == 1) { - // test if the resource corresponds to the CMI protocol - // in this case, the resource name is 'cmi' - // and we have a CMI type MBean - boolean cmi = false; - ObjectName cmiOn = JonasObjectName.cmiServer(sDomainName, pServerName); - if (JonasAdminJmx.hasMBeanName(cmiOn, pServerName)) { - cmi = true; - } - pRequest.setAttribute("cmi", "false"); - if ( cmi ) { - List namesAndNodes = CmiRegistryResource.getCmiRegistry(cmiOn, lNames, pServerName); - oForm.setVector(namesAndNodes); - pRequest.setAttribute("cmi", "true"); - oForm.setRegistryProtocol("cmi"); - } else { - oForm.setListNames(lNames); - oForm.setRegistryProtocol(getStringAttribute(resourceOn, "Name")); - } - - } - if (JonasManagementRepr.isRegistered(JonasObjectName.webContainerService(sDomainName), pServerName)) { - oForm.setPresentServletContainer(true); - } else { - oForm.setPresentServletContainer(false); - } - pRequest.setAttribute("jndiResourcesForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (pMapping.findForward("Registry")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ServletServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ServletServerForm.java deleted file mode 100644 index ceac59bc91..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/jonasserver/ServletServerForm.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.jonasserver; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public final class ServletServerForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String serverName = null; - private String serverVersion = null; - private boolean serverCatalina = false; - private String serverCatalinaService = null; - private String serverCatalinaEngine = null; - private String serverCatalinaDefaultHost = null; - private String forwardAfter = null; - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -// ------------------------------------------------------------- Properties Methods - - public String getServerName() { - return serverName; - } - - public void setServerName(String serverName) { - this.serverName = serverName; - } - - public String getServerVersion() { - return serverVersion; - } - - public void setServerVersion(String serverVersion) { - this.serverVersion = serverVersion; - } - - public String getServerCatalinaService() { - return serverCatalinaService; - } - - public void setServerCatalinaService(String serverCatalinaService) { - this.serverCatalinaService = serverCatalinaService; - } - - public boolean isServerCatalina() { - return serverCatalina; - } - - public void setServerCatalina(boolean serverCatalina) { - this.serverCatalina = serverCatalina; - } - - public String getServerCatalinaEngine() { - return serverCatalinaEngine; - } - - public void setServerCatalinaEngine(String serverCatalinaEngine) { - this.serverCatalinaEngine = serverCatalinaEngine; - } - - public String getServerCatalinaDefaultHost() { - return serverCatalinaDefaultHost; - } - - public void setServerCatalinaDefaultHost(String serverCatalinaDefaultHost) { - this.serverCatalinaDefaultHost = serverCatalinaDefaultHost; - } - - public String getForwardAfter() { - return forwardAfter; - } - - public void setForwardAfter(String forwardAfter) { - this.forwardAfter = forwardAfter; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramReaderAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramReaderAction.java deleted file mode 100644 index 2275b7120a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramReaderAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class AddJoramReaderAction extends EditJoramBaseAction { - - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - return (pMapping.findForward("Add Joram Reader")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramWriterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramWriterAction.java deleted file mode 100644 index b26f105b93..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/AddJoramWriterAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class AddJoramWriterAction extends EditJoramBaseAction { - - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - return (pMapping.findForward("Add Joram Writer")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyDestinationAction.java deleted file mode 100644 index 5a27e79b5a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyDestinationAction.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - - - -/** - * @author Adriana Danes - * Creation of new destinations - */ - -public class ApplyDestinationAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - JoramDestinationForm oForm = (JoramDestinationForm) p_Form; - String idString = (String) m_Session.getAttribute("currentId"); - Short idShort = (new Short(idString)); - - try { - ObjectName oObjectName = null; - ObjectName joramAdapterON = JoramObjectName.joramAdapter(); - if (JonasManagementRepr.isRegistered(joramAdapterON, jonasServerName)) { - oObjectName = joramAdapterON; - } else { - // TODO - } - - Object[] asParam = { - idShort, oForm.getName() - }; - String[] asSignature = { - "short", "java.lang.String" - }; - String type = oForm.getType(); - if (type.equals(m_Resources.getMessage("label.joramplatform.destinations.queue"))) { - JonasManagementRepr.invoke(oObjectName, "createQueue", asParam, asSignature, jonasServerName); - } else if (type.equals(m_Resources.getMessage("label.joramplatform.destinations.topic"))) { - JonasManagementRepr.invoke(oObjectName, "createTopic", asParam, asSignature, jonasServerName); - } - refreshJoramTree(p_Request, idString); - - oForm.reset(p_Mapping, p_Request); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Create Joram Destination")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramQueueAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramQueueAction.java deleted file mode 100644 index 980824af15..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramQueueAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class ApplyJoramQueueAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - try { - // Form used - JoramQueueForm oForm = (JoramQueueForm) pForm; - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - updateReadablesWriteables(oForm, jonasServerName); - populateDestination(oForm.getOName(), oForm, jonasServerName); - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - return (pMapping.findForward("JoramQueue")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramReaderAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramReaderAction.java deleted file mode 100644 index 365fefd4e8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramReaderAction.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - * Add user as reader to a destination referenced (by OBJECT_NAME) in the session - */ - -public class ApplyJoramReaderAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // Form used - JoramReaderWriterForm oForm = (JoramReaderWriterForm) p_Form; - String userId = oForm.getId(); - String destON = (String) m_Session.getAttribute("currentDestination"); - try { - ObjectName destOn = ObjectName.getInstance(destON); - if (destOn == null) { - throw new Exception("No destination ON to add reader"); - } - - String[] asParams = { userId }; - String[] asSignature = { "java.lang.String" }; - JonasManagementRepr.invoke(destOn, "addReader", asParams, asSignature, serverName); - oForm.reset(p_Mapping, p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Add Joram Reader")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramTopicAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramTopicAction.java deleted file mode 100644 index 059c372205..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramTopicAction.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class ApplyJoramTopicAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - try { - // Form used - JoramTopicForm oForm = (JoramTopicForm) pForm; - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - updateReadablesWriteables(oForm, serverName); - populateDestination(oForm.getOName(), oForm, serverName); - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - - return (pMapping.findForward("JoramTopic")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramWriterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramWriterAction.java deleted file mode 100644 index 84d2ebe435..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyJoramWriterAction.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - * Add a new writer to a destination - */ - -public class ApplyJoramWriterAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - JoramReaderWriterForm oForm = (JoramReaderWriterForm) p_Form; - String userId = oForm.getId(); - String destON = (String) m_Session.getAttribute("currentDestination"); - try { - ObjectName destOn = ObjectName.getInstance(destON); - if (destOn == null) { - throw new Exception("No destination ON to add writer"); - } - - String[] asParams = {userId }; - String[] asSignature = {"java.lang.String" }; - JonasManagementRepr.invoke(destOn, "addWriter", asParams, asSignature, serverName); - oForm.reset(p_Mapping, p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Add Joram Writer")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyUserAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyUserAction.java deleted file mode 100644 index a7eac26bf1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ApplyUserAction.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - - - -/** - * @author Adriana Danes - * Creation of new destinations - */ - -public class ApplyUserAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - JoramUserForm oForm = (JoramUserForm) p_Form; - String idString = (String) m_Session.getAttribute("currentId"); - String localIdString = (String) m_Session.getAttribute("localId"); - boolean isLocalServer; - if (localIdString.equals(idString)) { - isLocalServer = true; - } else { - isLocalServer = false; - } - - try { - ObjectName oObjectName = null; - ObjectName joramAdapterON = JoramObjectName.joramAdapter(); - if (JonasManagementRepr.isRegistered(joramAdapterON, jonasServerName)) { - oObjectName = joramAdapterON; - } else { - // TODO - } - if (isLocalServer) { - Object[] asParam = { - oForm.getName(), oForm.getPassword() - }; - String[] asSignature = { - "java.lang.String", "java.lang.String" - }; - JonasManagementRepr.invoke(oObjectName, "createUser", asParam, asSignature, jonasServerName); - } else { - Short idShort = (new Short(idString)); - Object[] asParam = { - oForm.getName(), oForm.getPassword(), idShort - }; - String[] asSignature = { - "java.lang.String", "java.lang.String", "short" - }; - JonasManagementRepr.invoke(oObjectName, "createUser", asParam, asSignature, jonasServerName); - } - oForm.reset(p_Mapping, p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Create Joram User")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramDestinationAction.java deleted file mode 100644 index f87dc5e447..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramDestinationAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class CreateJoramDestinationAction extends EditJoramBaseAction { - - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - return (pMapping.findForward("Create Joram Destination")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramUserAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramUserAction.java deleted file mode 100644 index 24d7a01ab7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/CreateJoramUserAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class CreateJoramUserAction extends EditJoramBaseAction { - - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - return (pMapping.findForward("Create Joram User")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationForm.java deleted file mode 100644 index d74eb3815d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationForm.java +++ /dev/null @@ -1,303 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.ArrayList; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram queue and topic pages - * @author Adriana Danes - */ - -public class DestinationForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - private String action = "edit"; - /** - * admin name (alse jndi name) - */ - private String name = null; - /** - * associated agent id - */ - private String id = null; - /** - * name of the EJBs using this destination - */ - private ArrayList listUsedByEjb = new ArrayList(); - /** - * DeadMQueue - */ - private String dmq = null; - /** - * freelyReadable - */ - private boolean freelyReadable; - /** - * freelyWriteable - */ - private boolean freelyWriteable; - /** - * list if readers - */ - //private String readerList = null; - private ArrayList readerList = null; - /** - * list of writers - */ - //private String writerList = null; - private ArrayList writerList = null; - /** - * destination type: queue or topic - */ - private String type = null; - /** - * creation date - */ - private String creationDate = null; - /** - * joram client 'queue' type MBean ObjectName - */ - private ObjectName oName = null; - /** - * Represent boolean (true, false) values for freelyReadable/freelyWriteable - */ - private List booleanVals = null; - -// ------------------------------------------------------------- Properties Methods - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - /** - * @return Returns the listUsedByEjb. - */ - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - /** - * @param listUsedByEjb The listUsedByEjb to set. - */ - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - /** - * @return Returns the dmq. - */ - public String getDmq() { - return dmq; - } - /** - * @param dmq The dmq to set. - */ - public void setDmq(String dmq) { - this.dmq = dmq; - } - /** - * @return Returns the freelyReadable. - */ - public boolean getFreelyReadable() { - return freelyReadable; - } - /** - * @param freelyReadable The freelyReadable to set. - */ - public void setFreelyReadable(boolean freelyReadable) { - this.freelyReadable = freelyReadable; - } - /** - * @return Returns the freelyWriteable. - */ - public boolean getFreelyWriteable() { - return freelyWriteable; - } - /** - * @param freelyWriteable The freelyWriteable to set. - */ - public void setFreelyWriteable(boolean freelyWriteable) { - this.freelyWriteable = freelyWriteable; - } - /* *//** - * @return Returns the readerList. - *//* - public String getReaderList() { - return readerList; - } - *//** - * @param readerList The readerList to set. - *//* - public void setReaderList(String readerList) { - this.readerList = readerList; - } - *//** - * @return Returns the writerList. - *//* - public String getWriterList() { - return writerList; - } - *//** - * @param writerList The writerList to set. - *//* - public void setWriterList(String writerList) { - this.writerList = writerList; - }*/ - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - /** - * @param type The type to set. - */ - public void setType(String type) { - this.type = type; - } - - /** - * @return Returns the creationDate. - */ - public String getCreationDate() { - return creationDate; - } - /** - * @param creationDate The creationDate to set. - */ - public void setCreationDate(String creationDate) { - this.creationDate = creationDate; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - id = null; - listUsedByEjb = new ArrayList(); - dmq = null; - freelyReadable = true; - freelyWriteable = true; - readerList = null; - writerList = null; - type = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - /** - * @return Returns the oName. - */ - public ObjectName getOName() { - return oName; - } - /** - * @param name The oName to set. - */ - public void setOName(ObjectName name) { - oName = name; - } - - /** - * @return Returns the booleanVals. - */ - public List getBooleanVals() { - return booleanVals; - } - - /** - * @param booleanVals The booleanVals to set. - */ - public void setBooleanVals(List booleanVals) { - this.booleanVals = booleanVals; - } - - /** - * @return Returns the readerList. - */ - public ArrayList getReaderList() { - return readerList; - } - - /** - * @param readerList The readerList to set. - */ - public void setReaderList(ArrayList readerList) { - this.readerList = readerList; - } - - /** - * @return Returns the writerList. - */ - public ArrayList getWriterList() { - return writerList; - } - - /** - * @param writerList The writerList to set. - */ - public void setWriterList(ArrayList writerList) { - this.writerList = writerList; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItem.java deleted file mode 100644 index ce1cf537bf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItem.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Adriana Danes - */ -public class DestinationItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String name = null; - private String type = null; - private boolean used = false; - - public DestinationItem() { - } - - public DestinationItem(String p_Name, String p_Type, boolean p_Used) { - setName(p_Name); - setType(p_Type); - setUsed(p_Used); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public boolean isUsed() { - return used; - } - - public void setUsed(boolean used) { - this.used = used; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItemByNameComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItemByNameComparator.java deleted file mode 100644 index 0360675658..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/DestinationItemByNameComparator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.Comparator; - -public class DestinationItemByNameComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - DestinationItem o_1 = (DestinationItem) p_O1; - DestinationItem o_2 = (DestinationItem) p_O2; - return o_1.getName().compareToIgnoreCase(o_2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof DestinationItem) { - return true; - } - return false; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramBaseAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramBaseAction.java deleted file mode 100644 index 80e28cf00f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramBaseAction.java +++ /dev/null @@ -1,562 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.Vector; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - - -/** - * @author Adriana Danes - */ -public abstract class EditJoramBaseAction extends BaseDeployAction { - - ObjectName ejbServiceObjectName = null; - - /** - * Treat specific case where Joram RAR was unloaded - * @param t Exception to treat - * @param pMapping provided by executeAction - * @param pRequest provided by executeAction - * @return - */ - protected ActionForward treatError(final Throwable pThrowable, final ActionMapping pMapping, final HttpServletRequest pRequest) { - String throwableClassName = pThrowable.getClass().getName(); - Throwable t = null; - if (throwableClassName.equals("javax.management.InstanceNotFoundException")) { - t = new Throwable("No MBeans found for the Joram platform. Try to refresh!", pThrowable); - } else if (throwableClassName.equals("javax.management.MalformedObjectNameException")) { - t = new Throwable("This is not a valid name for a Joram MBean (" + pThrowable.getMessage() + ")", pThrowable); - } else { - pThrowable.printStackTrace(); - t = new Throwable("Joram platform exception (" + pThrowable.getMessage() + ")", pThrowable); - } - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - protected String getPathToExportRepository() { - return m_WhereAreYou.getAdminJonasServerConfDir(); - } - - /** - * Get the path to the joramAdmin.xml file - * @return - */ - protected String getPathToReloadJoramAdmin() { - return m_WhereAreYou.getAdminJonasServerConfDir(); - } - public ObjectName getDmqOn(final String name, final String serverId, final String serverName) throws MalformedObjectNameException { - ObjectName result = getDestinationOn(name, serverId, serverName); - if (result != null) { - return result; - } else { - // search on the other servers - ObjectName joramAdapterOn = JoramObjectName.joramAdapter(); - Short[] serversIds = (Short[]) JonasManagementRepr.getAttribute(joramAdapterOn, "ServersIds", serverName); - if (serversIds != null) { - int i = 0; - for (int index = 0; index < serversIds.length; index++) { - Short id = serversIds[index]; - if (!id.equals(serverId)) { - result = getDestinationOn(name, id.toString(), serverName); - if (result != null) { - return result; - } - } - } - } - } - return null; - } - - /** - * @param name the destination's admin name or name (agent id based) - * @param serverName jonas server name being managed - * @return the ObjectName of the destination's MBean - * @throws MalformedObjectNameException - */ - public ObjectName getDestinationOn(final String name, final String serverId, final String serverName) throws MalformedObjectNameException { - ObjectName result = null; - ObjectName joramAdapterOn = JoramObjectName.joramAdapter(); - Short id = new Short(serverId); - Object[] asParam = { - id - }; - String[] asSignature = { - "short" - }; - String[] destinations = (String[]) JonasManagementRepr.invoke(joramAdapterOn, "getDestinations", asParam, asSignature, serverName); - for (int i = 0; i < destinations.length; i++) { - String dest = destinations[i]; - ObjectName destOn = ObjectName.getInstance(dest); - String destAdminName = (String) JonasManagementRepr.getAttribute(destOn, "AdminName", serverName); - String destName = (String) JonasManagementRepr.getAttribute(destOn, "Name", serverName); - if (name.startsWith("#")) { - // compare name with destName - if (name.equals(destName)) { - // found - return destOn; - } - } else { - // compare name with destAdminName - if (name.equals(destAdminName)) { - // found - return destOn; - } - } - } - - return result; - } - - /** - * - * @param dmqId id=#x.y.z - * @return - */ - protected ObjectName getDmqOn(final String dmqId, final String jonasServerName) throws MalformedObjectNameException { - if (dmqId == null) { - return null; - } - Set namesSet = JonasManagementRepr.queryNames(JoramObjectName.joramQueues(), jonasServerName); - for (Iterator it = namesSet.iterator(); it.hasNext(); ) { - ObjectName itOn = (ObjectName) it.next(); - String itName = (String) JonasManagementRepr.getAttribute(itOn, "Name", jonasServerName); - if (dmqId.equals(itName)) { - // found dmq - return itOn; - } - } - // not found - return null; - } - - /** - * Create a ItemDestination object from a String structured as follows: - * type=queue/topic, name=destName, id=#x.y.z - * @param joramAdminDestination String containing destination description - * @param serverName the name of the JOnAS server to which the current JORAM server is connected - * @return ItemDestination containing name, type, id and ObjectName of the MBean associated to the corresponding destination - * @throws MalformedObjectNameException could not construct destination ObjectName - */ - public ItemDestination getDestinationItem(final String joramAdminDestination, final String serverName) throws MalformedObjectNameException { - ItemDestination destinationItem = new ItemDestination(); - - ObjectName destinationOn = ObjectName.getInstance(joramAdminDestination); - destinationItem.setType(destinationOn.getKeyProperty("type")); - if (JonasAdminJmx.hasMBeanName(destinationOn, serverName)) { - destinationItem.setRegistered(true); - String name = (String) JonasManagementRepr.getAttribute(destinationOn, "AdminName", serverName); - destinationItem.setName(name); - String agentName = (String) JonasManagementRepr.getAttribute(destinationOn, "Name", serverName); - destinationItem.setId(agentName); - destinationItem.setOn(destinationOn); - boolean deps = hasDeps(name, serverName); - destinationItem.setUsed(deps); - destinationItem.setManageable(true); - } - return destinationItem; - } - - /** - * Create a ItemUser object from a String structured as follows: - * User[anonymous]:#0.0.1035 - * @param joramAdminUser String containing user description - * @param serverName the name of the JOnAS server to which the current JORAM server is connected - * @return ItemUser containing name and ObjectName of the MBean associated to the corresponding user - * @throws MalformedObjectNameException - */ - protected ItemUser getUserItem(final String joramAdminUser, final String serverName) throws MalformedObjectNameException { - ItemUser userItem = new ItemUser(); - ObjectName on = ObjectName.getInstance(joramAdminUser); - String name = (String) JonasManagementRepr.getAttribute(on, "Name", serverName); - userItem.setName(name); - String id = (String) JonasManagementRepr.getAttribute(on, "ProxyId", serverName); - userItem.setId(id); - userItem.setServerId(on.getKeyProperty("location")); - if (JonasAdminJmx.hasMBeanName(on, serverName)) { - userItem.setOn(on); - } - return userItem; - } - - /** - * * Return the ObjectName of the User MBean corresponding to a given user - * @param userName the user's name - * @param serverId the JORAM server's Id - * @param serverName the name of the JOnAS server to which the current JORAM server is connected - * @return the Objectname of the User MBean having the ProxyId attribute equal to the userId - */ - protected ObjectName getUserOn(final String userName, final Short serverId, final String serverName) throws MalformedObjectNameException { - ObjectName result = null; - ObjectName joramAdapterOn = JoramObjectName.joramAdapter(); - Object[] asParam = { - serverId - }; - String[] asSignature = { - "short" - }; - String[] users = (String[]) JonasManagementRepr.invoke(joramAdapterOn, "getUsers", asParam, asSignature, serverName); - for (int i = 0; i < users.length; i++) { - String user = users[i]; - ObjectName userOn = ObjectName.getInstance(user); - String userAdminName = (String) JonasManagementRepr.getAttribute(userOn, "Name", serverName); - if (userName.equals(userAdminName)) { - // found - return userOn; - } - } - return result; - } - - /** - * Return the name of the User corresponding to a given agent id - * @param userId Agent id for a user (#x.y.z.) - * @param jonasServerName the name of the JOnAS server to which the current JORAM server is connected - * @return the value of the name attribute of the User MBean having the ProxyId attribute equal to the userId - */ - protected String getUserName(final String userId, final String jonasServerName) { - String name = null; // to be determined - ObjectName userOns = null; // template for User MBeans - try { - userOns = JoramObjectName.joramUsers(); - Iterator it = JonasManagementRepr.queryNames(userOns, jonasServerName).iterator(); - while (it.hasNext()) { - ObjectName on = (ObjectName) it.next(); // a user MBean - String proxyId = (String) JonasManagementRepr.getAttribute(on, "ProxyId", jonasServerName); - if (proxyId.equals(userId)) { - // found the user - name = (String) JonasManagementRepr.getAttribute(on, "Name", jonasServerName); - break; - } - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return name; - } - - public void printDestination(final ItemDestination dest, final String serverName) { - System.out.println("Destination in server JOnAS " + serverName + " :"); - System.out.println("- name " + dest.getName()); - System.out.println("- type " + dest.getType()); - System.out.println("- id " + dest.getId()); - System.out.println("- servrId " + dest.getServerId()); - System.out.println("- on " + dest.getOn()); - } - - void printUser(final ItemUser user) { - System.out.println("User:"); - System.out.println("- name " + user.getName()); - System.out.println("- id " + user.getId()); - System.out.println("- on " + user.getOn()); - } - protected void initRefs(final String domainName, final String jonasServerName) { - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - ejbServiceObjectName = JonasObjectName.ejbService(domainName); - if (!JonasManagementRepr.isRegistered(ejbServiceObjectName, jonasServerName)) { - ejbServiceObjectName = null; - } - } - - protected boolean hasDeps(final String pDestName, final String jonasServerName) { - boolean ret = false; - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - if (ejbServiceObjectName != null) { - asParam[0] = pDestName; - asSignature[0] = "java.lang.String"; - Set deps = (Set) JonasManagementRepr.invoke( - ejbServiceObjectName, "getJmsDestinationDependence", - asParam, asSignature, jonasServerName); - if (!deps.isEmpty()) { - ret = true; - } - } - return ret; - } - - /** - * Return server Id - * @param location String having this form : server#id - * @return id - */ - protected String getServerId(final String location) { - return location.substring(location.indexOf("#") + 1); - } - /** - * Determine the server Id of a destination. - * @param destinationOn the ObjectName destination's MBean. The 'loaction' key has the following structure : server#y. The server id to be returned is "y" - * @return server id - */ - public static String currentServerId(final ObjectName destinationOn) { - String serverId = null; - String location = destinationOn.getKeyProperty("location"); - serverId = location.substring(location.indexOf('#') + 1); - return serverId; - } - - protected void populateDestination(final ObjectName destOn, final DestinationForm oForm, final String serverName) throws MalformedObjectNameException { - oForm.setName(getStringAttribute(destOn, "AdminName")); - //testReaderList(oForm); - /** joramClient destination MBean evolution: - * DMQ attribute replaced with DMQId, Type is String. - */ - String dmqId = getStringAttribute(destOn, "DMQId"); - if (dmqId != null) { - ObjectName dmqOn = getDestinationOn(dmqId, currentServerId(destOn), serverName); - String dmqName = (String) JonasManagementRepr.getAttribute(dmqOn, "AdminName", serverName); - oForm.setDmq(dmqName); - } - oForm.setId(getStringAttribute(destOn, "Name")); - oForm.setType(destOn.getKeyProperty("type")); - boolean readable = getBooleanAttribute(destOn, "FreelyReadable"); - oForm.setFreelyReadable(readable); - if (readable) { - oForm.setReaderList(null); - } else { - List readerList = getListAttribute(destOn, "ReaderList"); - //oForm.setReaderList(getStringAttributeFromList(readerList)); - oForm.setReaderList(getBaseItemList(readerList, destOn, serverName)); - } - boolean writeable = getBooleanAttribute(destOn, "FreelyWriteable"); - oForm.setFreelyWriteable(writeable); - if (writeable) { - oForm.setWriterList(null); - } else { - List writerList = getListAttribute(destOn, "WriterList"); - //oForm.setWriterList(getStringAttributeFromList(writerList)); - oForm.setWriterList(getBaseItemList(writerList, destOn, serverName)); - } - } - - /** - * Treat a list (Vector) of Joram user names - * @param inputList list of Joram user names - * @param destOn the ObjectName corresponding to the destination's MBean - * @return a list of user item objects (ItemUser type) - * @throws MalformedObjectNameException - */ - protected ArrayList getBaseItemList(final List inputList, final ObjectName destOn, final String serverName) throws MalformedObjectNameException { - ArrayList arrayResult = new ArrayList(); - ArrayList arrayInput = null; - try { - arrayInput = (ArrayList) inputList; - } catch (ClassCastException ce) { - try { - Vector vInputList = (Vector) inputList; - arrayInput = new ArrayList(vInputList); - } catch (ClassCastException cee) { - // TO DO, could be a LinkedList - throw cee; - } - } - String serverId = EditJoramBaseAction.currentServerId(destOn); - if (arrayInput != null) { - for (int i = 0; i < arrayInput.size(); i++) { - String item = arrayInput.get(i).toString(); - ItemUser userItem = getUserItem(getUserOn(item, new Short(serverId), serverName).toString(), serverName); - if (userItem.getName() != null) { - arrayResult.add(userItem); - } - } - - } - return arrayResult; - } - protected ObjectName getDmq(final String dmqId, final String serverName) { - ObjectName dmqOn = null; - try { - ObjectName dmqOns = JoramObjectName.joramDmQueues(); - Iterator it = JonasManagementRepr.queryNames(dmqOns, serverName).iterator(); - while (it.hasNext()) { - ObjectName a_dmqOn = (ObjectName) it.next(); - String id = (String) JonasManagementRepr.getAttribute(a_dmqOn, "Name", serverName); - if (id != null && id.equals(dmqId)) { - dmqOn = a_dmqOn; - break; - } - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return dmqOn; - } - /** - * Treat a list (Vector) of Joram user items (example: User[anonymous]:#0.0.1035) - * @param inputList list of Joram user items - * @return a list of user item objects (ItemUser type) - * @throws MalformedObjectNameException - */ - protected ArrayList getBaseItemList(final List inputList, final String serverName) throws MalformedObjectNameException { - ArrayList arrayResult = new ArrayList(); - ArrayList arrayInput = null; - try { - arrayInput = (ArrayList) inputList; - } catch (ClassCastException ce) { - try { - Vector vInputList = (Vector) inputList; - arrayInput = new ArrayList(vInputList); - } catch (ClassCastException cee) { - // TO DO, could be a LinkedList - throw cee; - } - } - if (arrayInput != null) { - for (int i = 0; i < arrayInput.size(); i++) { - String item = arrayInput.get(i).toString(); - //System.out.println("In getBaseItem, treat item=" + item); - ItemUser userItem = getUserItem(item, serverName); - if (userItem.getName() != null) { - arrayResult.add(userItem); - } - } - - } - return arrayResult; - } - /** - * Used to treat the ReaderList and the WriterList currently implemented - * by a Vector of Ids - * @param inputList list of elemements - * @return String containing the concateneted elements - */ - private String getStringAttributeFromList(final List inputList) { - StringBuffer buf = new StringBuffer(); - /* check for choosen List implem in - * - ArrayList - * - Vector - */ - ArrayList arrayInput = null; - try { - arrayInput = (ArrayList) inputList; - } catch (ClassCastException ce) { - try { - Vector vInputList = (Vector) inputList; - arrayInput = new ArrayList(vInputList); - } catch (ClassCastException cee) { - // TO DO, could be a LinkedList - throw cee; - } - } - if (arrayInput != null) { - for (int i = 0; i < arrayInput.size(); i++) { - buf.append(arrayInput.get(i).toString()); - buf.append("\n"); - } - return new String(buf); - } else { - return null; - } - } - protected void getStatistics(final ObjectName destOn, final MonitoringDestForm oMonitForm, final DestinationForm oForm, final String serverName) { - Hashtable stats = (Hashtable) JonasManagementRepr.getAttribute(destOn, "Statistic", serverName); - Calendar cal = Calendar.getInstance(); - Long creationDateVale = (Long) stats.get("CreationTimeInMillis"); - cal.setTimeInMillis(creationDateVale.longValue()); - oForm.setCreationDate(cal.getTime().toString()); - Long value = (Long) stats.get("NbMsgsReceiveSinceCreation"); - oMonitForm.setNbMsgsReceiveSinceCreation(value.longValue()); - value = (Long) stats.get("NbMsgsSentToDMQSinceCreation"); - oMonitForm.setNbMsgsSendToDMQSinceCreation(value.longValue()); - value = (Long) stats.get("NbMsgsDeliverSinceCreation"); - oMonitForm.setNbMsgsDeliverSinceCreation(value.longValue()); - oMonitForm.setName(oForm.getName()); - oMonitForm.setType(oForm.getType()); - } - - protected void populate(final DestinationForm p_Form) - throws Exception { - // Object name used - ObjectName oObjectName = p_Form.getOName(); - // Populate - setBooleanAttribute(oObjectName, "FreelyReadable", p_Form.getFreelyReadable()); - setBooleanAttribute(oObjectName, "FreelyWriteable", p_Form.getFreelyWriteable()); - } - - protected void updateReadablesWriteables(final DestinationForm pForm, final String jonasServerName) { - boolean freelyReadable = pForm.getFreelyReadable(); - boolean freelyWriteable = pForm.getFreelyWriteable(); - ObjectName on = pForm.getOName(); - JonasManagementRepr.setAttribute(on, "FreelyReadable", new Boolean(freelyReadable), jonasServerName); - JonasManagementRepr.setAttribute(on, "FreelyWriteable", new Boolean(freelyWriteable), jonasServerName); - if (!freelyReadable || !freelyWriteable) { - // register in the session the currently managed destination id - m_Session.setAttribute("currentDestination", on.toString()); - } - } - - void testReaderList(final DestinationForm pForm, final String jonasServerName) { - String name = pForm.getName(); - ObjectName queueOn = pForm.getOName(); - if (name.equals("mdbQueue")) { - ObjectName userOn = null; - // Look for user's toto MBean - try { - ObjectName userOns = JoramObjectName.joramUsers(); - Iterator it = JonasManagementRepr.queryNames(userOns, jonasServerName).iterator(); - while (it.hasNext()) { - ObjectName item = (ObjectName) it.next(); - String itemName = (String) JonasManagementRepr.getAttribute(item, "Name", jonasServerName); - if (itemName.equals("toto")) { - // found MBean for user toto - userOn = item; - break; - } - } - } catch (MalformedObjectNameException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - // Add user as reader for mdbQueue - if (userOn != null) { - String userId = (String) JonasManagementRepr.getAttribute(userOn, "ProxyId", jonasServerName); - String[] asParams = {userId }; - String[] asSignature = {"java.lang.String" }; - JonasManagementRepr.invoke(queueOn, "addReader", asParams, asSignature, jonasServerName); - } - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramDestinationAction.java deleted file mode 100644 index 33c71bd7ba..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramDestinationAction.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class EditJoramDestinationAction extends EditJoramBaseAction { - - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - return (pMapping.findForward("Create Joram Destination")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramPlatformAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramPlatformAction.java deleted file mode 100644 index 3280e67f95..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramPlatformAction.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Frederic MAISTRE - */ - -public class EditJoramPlatformAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform", true); - - // Form used - JoramPlatformForm oForm = new JoramPlatformForm(); - try { - // Object name used - ObjectName joramAdapterON = JoramObjectName.joramAdapter(); - boolean isAdapterLoaded = JonasManagementRepr.isRegistered(joramAdapterON, jonasServerName); - // local server Id is given by ServerId in the JoramAdapter MBean - Short localServerId = (Short) JonasManagementRepr.getAttribute(joramAdapterON, "ServerId", jonasServerName); - // get the other (remote) Joram servers - Short[] serversIds = (Short[]) JonasManagementRepr.getAttribute(joramAdapterON, "ServersIds", jonasServerName); - int nbRemoteServers = serversIds.length - 1; - String[] remoteServers = new String[nbRemoteServers]; - ItemServer[] remoteItemServers = new ItemServer[nbRemoteServers]; - if (serversIds != null) { - int i = 0; - for (int index = 0; index < serversIds.length; index++) { - Short id = serversIds[index]; - if (!id.equals(localServerId)) { - remoteServers[i] = id.toString(); - // check for DMQ - Object[] asParam = { - id - }; - String[] asSignature = { - "short" - }; - String dmqId = (String) JonasManagementRepr.invoke(joramAdapterON, "getDefaultDMQId", asParam, asSignature, jonasServerName); - String dmqName = null; - if (dmqId != null) { - ObjectName dmqOn = getDmqOn(dmqId, id.toString(), jonasServerName); - if (dmqOn != null) { - dmqName = (String) JonasManagementRepr.getAttribute(dmqOn, "AdminName", jonasServerName); - } - } - Integer threshold = (Integer) JonasManagementRepr.invoke(joramAdapterON, "getDefaultThreshold", asParam, asSignature, jonasServerName); - ItemServer itemServer = new ItemServer(id.toString(), dmqName); - itemServer.setDefaultThreshold(threshold.intValue()); - remoteItemServers[i] = itemServer; - i++; - } - } - } - oForm.setAdapterLoaded(isAdapterLoaded); - oForm.setLocalServer(localServerId.toString()); - oForm.setRemoteServers(remoteServers); - oForm.setRemoteItemServers(remoteItemServers); - oForm.setConfiguration((String) JonasManagementRepr.getAttribute(joramAdapterON, "Configuration", jonasServerName)); - //oForm.setLocalPort(getIntegerAttribute(joramPlatformON, "LocalPort")); - oForm.setLocalPort(getIntegerAttribute(joramAdapterON, "ServerPort")); - //oForm.setLocalHost(getStringAttribute(joramPlatformON, "LocalHost")); - oForm.setLocalHost(getStringAttribute(joramAdapterON, "HostName")); - oForm.setDefaultThreshold(getIntegerAttribute(joramAdapterON, "DefaultThreshold")); - if (isAdapterLoaded) { - // Get configuration info from RA - //oForm.setVersion(joramAdapterON.getKeyProperty("version")); - oForm.setVersion(getStringAttribute(joramAdapterON, "ProviderVersion")); - oForm.setCollocatedServer(getBooleanAttribute(joramAdapterON, "Collocated")); - //oForm.setConfigDir(getStringAttribute(joramAdapterON, "PlatformConfigDir")); - // TODO this is null - oForm.setConfigDir(""); - oForm.setAdminFile(getStringAttribute(joramAdapterON, "AdminFileXML")); - oForm.setPersistentServer(getBooleanAttribute(joramAdapterON, "PersistentPlatform")); - oForm.setServerIdTxt(toStringShortAttribute(joramAdapterON, "ServerId")); - oForm.setServerName(getStringAttribute(joramAdapterON, "Storage")); - oForm.setHostName(getStringAttribute(joramAdapterON, "HostName")); - oForm.setServerPortTxt(toStringIntegerAttribute(joramAdapterON, "ServerPort")); - oForm.setCnxPendingTimerTxt(toStringIntegerAttribute(joramAdapterON, "CnxPendingTimer")); - oForm.setConnectingTimerTxt(toStringIntegerAttribute(joramAdapterON, "ConnectingTimer")); - oForm.setTxPendingTimerTxt(toStringIntegerAttribute(joramAdapterON, "TxPendingTimer")); - oForm.setTimeOutToAbortRequest(getLongAttribute(joramAdapterON, "TimeOutToAbortRequest")); - String defaultDmqId = getStringAttribute(joramAdapterON, "DefaultDMQId"); - ObjectName defaultDmqOn = getDmqOn(defaultDmqId, jonasServerName); - if (defaultDmqOn != null) { - String defaultDmqName = (String) JonasManagementRepr.getAttribute(defaultDmqOn, "AdminName", jonasServerName); - oForm.setDefaultDMQ(defaultDmqName); - } - } else { - // TODO - } - - m_Session.setAttribute("joramPlatformForm", oForm); - m_Session.setAttribute("localId", oForm.getLocalServer()); - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - // Forward to the jsp. - return (pMapping.findForward("JoramPlatform")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramQueueAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramQueueAction.java deleted file mode 100644 index 16af32d2bb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramQueueAction.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Adriana Danes - */ - -public class EditJoramQueueAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - String name = pRequest.getParameter("name"); - // currently managed server id - String serverId = pRequest.getParameter("id"); - if (serverId != null) { - m_Session.setAttribute("currentId", serverId); - } else { - serverId = (String) m_Session.getAttribute("currentId"); - } - // local server id set by JonasTreeBuilder - String localId = (String) m_Session.getAttribute("localId"); - try { - // Check that Joram RAR still deployed - if (JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), serverName).isEmpty()) { - throw new InstanceNotFoundException(); - } - // Form used - JoramQueueForm oForm = null; - MonitoringDestForm mForm = new MonitoringDestForm(); - if (name != null) { - // Build a new form - oForm = new JoramQueueForm(); - oForm.reset(pMapping, pRequest); - // Attach the form to the session object - m_Session.setAttribute("joramQueueForm", oForm); - // Object name used - ObjectName oObjectName = getDestinationOn(name, serverId, serverName); - oForm.setOName(oObjectName); - oForm.setBooleanVals(Jlists.getBooleanValues()); - populateDestination(oObjectName, oForm, serverName); - getStatistics(oObjectName, mForm, oForm, serverName); - String[] messageIdsResult = (String []) JonasManagementRepr.getAttribute(oObjectName, "MessageIds", serverName); - StringBuffer bufMessageIds = new StringBuffer(); - for (int i = 0; i < messageIdsResult.length; i++) { - String joramMessageId = messageIdsResult[i]; - bufMessageIds.append(joramMessageId); - bufMessageIds.append("\n"); - } - oForm.setMessageIds(new String(bufMessageIds)); - oForm.setNbMaxMsg(getIntegerAttribute(oObjectName, "NbMaxMsg")); - oForm.setPendingMessages(getIntegerAttribute(oObjectName, "PendingMessages")); - oForm.setPendingRequests(getIntegerAttribute(oObjectName, "PendingRequests")); - oForm.setThreshold(getIntegerAttribute(oObjectName, "Threshold")); - m_Session.setAttribute("joramStatForm", mForm); - } else { - // Used last form in session - oForm = (JoramQueueForm) m_Session.getAttribute("joramQueueForm"); - if (!oForm.getFreelyReadable()) { - // update readers list - List readerList = getListAttribute(oForm.getOName(), "ReaderList"); - oForm.setReaderList(getBaseItemList(readerList, oForm.getOName(), serverName)); - } - if (!oForm.getFreelyWriteable()) { - // update writers list - List writerList = getListAttribute(oForm.getOName(), "WriterList"); - oForm.setWriterList(getBaseItemList(writerList, oForm.getOName(), serverName)); - } - name = oForm.getName(); - if (localId == null) { - // TODO see with Joram team - /* - ObjectName joramPlatformON = JoramObjectName.joramPlatform(); - localId = getStringAttribute(joramPlatformON, "LocalServerId"); - m_Session.setAttribute("localId", localId); - */ - } - } - - // Populuate dependency list - if (name != null) { - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = oForm.getName(); - ObjectName ejbServiceObjectName = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(ejbServiceObjectName, serverName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - ejbServiceObjectName, "getJmsDestinationDependence", asParam - , asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Set list in form - oForm.setListUsedByEjb(al); - } - } - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - boolean isLocalServer; - if (serverId.equals(localId)) { - isLocalServer = true; - } else { - isLocalServer = false; - } - m_Session.setAttribute("isLocalServer", new Boolean(isLocalServer)); - - // Force the node selected in tree and forward to the jsp. - String nodeName = null; - boolean collocatedServer = ((Boolean) m_Session.getAttribute("collocatedServer")).booleanValue(); - if (isLocalServer) { - if (collocatedServer) { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramlocalserver" + WhereAreYou.NODE_SEPARATOR - + "joramqueue" + name; - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramcurrentserver" + WhereAreYou.NODE_SEPARATOR - + "joramqueue" + name; - - } - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramremoteserver" + serverId + WhereAreYou.NODE_SEPARATOR - + "joramqueue" + name; - } - m_WhereAreYou.selectNameNode(nodeName, true); - return (pMapping.findForward("JoramQueue")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramRemoteServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramRemoteServerAction.java deleted file mode 100644 index d4628513a4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramRemoteServerAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Frederic MAISTRE - */ - -public class EditJoramRemoteServerAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String id = p_Request.getParameter("id"); - if (id == null) { - id = (String) m_Session.getAttribute("remoteServerId"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramremoteserver" + id, true); - - // Form used - JoramRemoteServerForm o_Form = (JoramRemoteServerForm) p_Form; - - try { - // Object name used - //ObjectName oObjectName = new ObjectName("joram:type=JMSremoteServer,id=" + id); - o_Form.setServerId(id); - - m_Session.setAttribute("remoteServerId", id); - } catch (Throwable t) { - return (treatError(t, p_Mapping, p_Request)); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JoramRemoteServer")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramResourceAdapterAction.java deleted file mode 100644 index a74db6e63d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramResourceAdapterAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.Set; - -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ - -public class EditJoramResourceAdapterAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform", true); - - // Form used - JoramAdapterForm oForm = (JoramAdapterForm) pForm; - try { - // Object name used - Set adapterOns = JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), jonasServerName); - if (adapterOns.isEmpty()) { - throw new InstanceNotFoundException(); - } - ObjectName joramAdapterON = (ObjectName) adapterOns.iterator().next(); - oForm.setCollocatedServer(getBooleanAttribute(joramAdapterON, "Collocated")); - oForm.setConfigDir(getStringAttribute(joramAdapterON, "PlatformConfigDir")); - oForm.setAdminFile(getStringAttribute(joramAdapterON, "AdminFileXML")); - oForm.setPersistentServer(getBooleanAttribute(joramAdapterON, "PersistentPlatform")); - oForm.setServerIdTxt(toStringShortAttribute(joramAdapterON, "ServerId")); - oForm.setServerName(getStringAttribute(joramAdapterON, "Storage")); - oForm.setHostName(getStringAttribute(joramAdapterON, "HostName")); - oForm.setServerPortTxt(toStringIntegerAttribute(joramAdapterON, "ServerPort")); - oForm.setCnxPendingTimerTxt(toStringIntegerAttribute(joramAdapterON, "CnxPendingTimer")); - oForm.setConnectingTimerTxt(toStringIntegerAttribute(joramAdapterON, "ConnectingTimer")); - oForm.setTxPendingTimerTxt(toStringIntegerAttribute(joramAdapterON, "TxPendingTimer")); - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - // Forward to the jsp. - return (pMapping.findForward("JoramAdapter")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramServerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramServerAction.java deleted file mode 100644 index 330d268592..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramServerAction.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Adriana Danes - */ - -public class EditJoramServerAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Serve id currently in management - String serverId = pRequest.getParameter("id"); - if (serverId == null) { - serverId = (String) m_Session.getAttribute("currentId"); - } else { - m_Session.setAttribute("currentId", serverId); - } - String localId = (String) m_Session.getAttribute("localId"); - boolean collocatedServer = ((Boolean) m_Session.getAttribute("collocatedServer")).booleanValue(); - boolean isLocalServer; - if (localId.equals(serverId)) { - isLocalServer = true; - } else { - isLocalServer = false; - } - - m_Session.setAttribute("isLocalServer", new Boolean(isLocalServer)); - // Get reference on EJB container service in order to determine dependencies - // between the deployed EJBs and JMS destinations - initRefs(domainName, serverName); - - try { - ObjectName joramAdapterON = JoramObjectName.joramAdapter(); - boolean isAdapterLoaded = JonasManagementRepr.isRegistered(joramAdapterON, serverName); - - ArrayList destinationsArray = new ArrayList(); - ArrayList topicsArray = new ArrayList(); - - Short id = new Short(serverId); - // Get all the destinations - Object[] asParam = { - id - }; - String[] asSignature = { - "short" - }; - String[] destinations = (String[]) JonasManagementRepr.invoke(joramAdapterON, "getDestinations", asParam, asSignature, serverName); - for (int i = 0; i < destinations.length; i++) { - String dest = destinations[i]; - ItemDestination destinationItem = getDestinationItem(dest, serverName); - if ("Queue".equals(destinationItem.getType())) { - // insert in head - destinationsArray.add(0, destinationItem); - } else if ("Topic".equals(destinationItem.getType())) { - // append - topicsArray.add(destinationItem); - } - } - - // sort queues - Collections.sort(destinationsArray, new ItemDestinationByName()); - // sort topics - Collections.sort(topicsArray, new ItemDestinationByName()); - // append topics to queues - destinationsArray.addAll(topicsArray); - - ArrayList usersArray = new ArrayList(); - String[] usersList = (String[]) JonasManagementRepr.invoke(joramAdapterON, "getUsers", asParam, asSignature, serverName); - for (int i = 0; i < usersList.length; i++) { - String userString = usersList[i]; - ItemUser userItem = getUserItem(userString, serverName); - if (userItem.getName() != null) { - usersArray.add(userItem); - } - } - - m_Session.setAttribute("destinations", destinationsArray); - m_Session.setAttribute("users", usersArray); - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - // Force the node selected in tree - String nodeName = null; - if (isLocalServer) { - if (collocatedServer) { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramlocalserver"; - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramcurrentserver"; - - } - m_WhereAreYou.selectNameNode(nodeName, true); - // Forward to the jsp. - return (pMapping.findForward("JoramDestinations")); - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramremoteserver" + serverId; - m_WhereAreYou.selectNameNode(nodeName, true); - return (pMapping.findForward("JoramRemoteDestinations")); - } - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramTopicAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramTopicAction.java deleted file mode 100644 index f6d882aff5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramTopicAction.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Adriana Danes - */ - -public class EditJoramTopicAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - String name = pRequest.getParameter("name"); - // currently managed server id - String serverId = pRequest.getParameter("id"); - if (serverId != null) { - m_Session.setAttribute("currentId", serverId); - } else { - serverId = (String) m_Session.getAttribute("currentId"); - } - // local server id set by JonasTreeBuilder - String localId = (String) m_Session.getAttribute("localId"); - try { - // Check that Joram RAR still deployed - if (JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), serverName).isEmpty()) { - throw new InstanceNotFoundException(); - } - // Form used - JoramTopicForm oForm = null; - MonitoringDestForm mForm = new MonitoringDestForm(); - if (name != null) { - // Build a new form - oForm = new JoramTopicForm(); - oForm.reset(pMapping, pRequest); - // Attach the form to the session object - m_Session.setAttribute("joramTopicForm", oForm); - // Object name used - ObjectName oObjectName = getDestinationOn(name, serverId, serverName); - oForm.setOName(oObjectName); - oForm.setBooleanVals(Jlists.getBooleanValues()); - populateDestination(oObjectName, oForm, serverName); - getStatistics(oObjectName, mForm, oForm, serverName); - oForm.setSubscriptions(getIntegerAttribute(oObjectName, "Subscriptions")); - String[] subscriberIds = (String []) JonasManagementRepr.getAttribute(oObjectName, "SubscriberIds", serverName); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < subscriberIds.length; i++) { - String subscriberId = subscriberIds[i]; - String subsriberName = getUserName(subscriberId, serverName); - if (subsriberName == null) { - //throw new Exception("Problem with " + name + " topic subscribers: could not found any user having id=" + subscriberId); - subsriberName = subscriberId; - } - buf.append(subsriberName); - buf.append("\n"); - } - oForm.setSubscribers(new String(buf)); - m_Session.setAttribute("joramStatForm", mForm); - } else { - // Used last form in session - oForm = (JoramTopicForm) m_Session.getAttribute("joramTopicForm"); - if (!oForm.getFreelyReadable()) { - // update readers list - List readerList = getListAttribute(oForm.getOName(), "ReaderList"); - oForm.setReaderList(getBaseItemList(readerList, oForm.getOName(), serverName)); - } - if (!oForm.getFreelyWriteable()) { - // update writers list - List writerList = getListAttribute(oForm.getOName(), "WriterList"); - oForm.setWriterList(getBaseItemList(writerList, oForm.getOName(), serverName)); - } - name = oForm.getName(); - if (localId == null) { - // TODO - } - } - - // Populuate dependency list - if (name != null) { - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = name; - ObjectName ejbServiceObjectName = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(ejbServiceObjectName, serverName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - ejbServiceObjectName, "getJmsDestinationDependence", asParam - , asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Set list in form - oForm.setListUsedByEjb(al); - } - } - } catch (Throwable t) { - return (treatError(t, pMapping, pRequest)); - } - - boolean isLocalServer; - if (serverId.equals(localId)) { - isLocalServer = true; - } else { - isLocalServer = false; - } - m_Session.setAttribute("isLocalServer", new Boolean(isLocalServer)); - - // Force the node selected in tree and forward to the jsp. - String nodeName = null; - boolean collocatedServer = ((Boolean) m_Session.getAttribute("collocatedServer")).booleanValue(); - if (isLocalServer) { - if (collocatedServer) { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramlocalserver" + WhereAreYou.NODE_SEPARATOR - + "joramtopic" + name; - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramcurrentserver" + WhereAreYou.NODE_SEPARATOR - + "joramtopic" + name; - - } - } else { - nodeName = getTreeBranchName(DEPTH_DOMAIN) + WhereAreYou.NODE_SEPARATOR - + "joramplatform" + WhereAreYou.NODE_SEPARATOR - + "joramremoteserver" + serverId + WhereAreYou.NODE_SEPARATOR - + "joramtopic" + name; - } - m_WhereAreYou.selectNameNode(nodeName, true); - return (pMapping.findForward("JoramTopic")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramUserAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramUserAction.java deleted file mode 100644 index a707351666..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/EditJoramUserAction.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Frederic MAISTRE - */ - -public class EditJoramUserAction extends EditJoramBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - - - // Forward to the jsp. - return (pMapping.findForward("JoramUser")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ExportRepository.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ExportRepository.java deleted file mode 100644 index 474aa82283..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ExportRepository.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; - - -/** - * @author Adriana danes - */ - -public class ExportRepository extends EditJoramBaseAction { - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param p_Mapping The ActionMapping used to select this instance - * @param p_Form The optional ActionForm bean for this request (if any) - * @param p_Request The HTTP request we are processing - * @param p_Response The HTTP response we are creating - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - try { - // Object name used - ObjectName joramAdapterOn = JoramObjectName.joramAdapter(); - // call method - String[] params = new String[1]; - params[0] = getPathToExportRepository(); - String[] signature = {"java.lang.String"}; - JonasManagementRepr.invoke(joramAdapterOn, "exportRepositoryToFile", params, signature, jonasServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JoramPlatform")); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemBase.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemBase.java deleted file mode 100644 index 6cd00d35ae..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemBase.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.management.ObjectName; - -public class ItemBase implements java.io.Serializable { - private String name = null; - private ObjectName on = null; - private String id = null; - private String serverId = null; - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - /** - * @return Returns the on. - */ - public ObjectName getOn() { - return on; - } - /** - * @param on The on to set. - */ - public void setOn(ObjectName on) { - this.on = on; - } - /** - * @return Returns the id. - */ - public String getId() { - return id; - } - /** - * @param id The id to set. - */ - public void setId(String id) { - this.id = id; - } - /** - * @return Returns the serverId. - */ - public String getServerId() { - return serverId; - } - /** - * @param serverId The serverId to set. - */ - public void setServerId(String serverId) { - this.serverId = serverId; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestination.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestination.java deleted file mode 100644 index fa2c312333..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestination.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - - -public class ItemDestination extends ItemBase implements java.io.Serializable { - private String type = null; - private boolean used = false; - /** The destination has a corresponding MBean registered in the JMX server */ - private boolean registered = false; - /** - * The corresponding MBean is really corresponding to the destination as - * the id is correct - */ - private boolean manageable = false; - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - /** - * @param type The type to set. - */ - public void setType(String type) { - this.type = type; - } - /** - * @return Returns the used. - */ - public boolean isUsed() { - return used; - } - /** - * @param used The used to set. - */ - public void setUsed(boolean used) { - this.used = used; - } - /** - * @return true if the destination has a corresponding MBean - */ - public boolean isRegistered() { - return registered; - } - /** - * - * @param registered is true if the destination has a corresponding MBean - */ - public void setRegistered(boolean registered) { - this.registered = registered; - } - public boolean isManageable() { - return manageable; - } - public void setManageable(boolean manageable) { - this.manageable = manageable; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestinationByName.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestinationByName.java deleted file mode 100644 index fdf761e23e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemDestinationByName.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.Comparator; - -/** - * - */ -public class ItemDestinationByName implements Comparator { - - public int compare(Object pO1, Object pO2) { - ItemDestination dest1 = (ItemDestination) pO1; - ItemDestination dest2 = (ItemDestination) pO2; - return dest1.getName().compareToIgnoreCase(dest2.getName()); - } - public boolean equals(Object pObj) { - if (pObj instanceof ItemDestination) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemServer.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemServer.java deleted file mode 100644 index f899378662..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemServer.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -public class ItemServer implements java.io.Serializable { - private String id = null; - private String defaultDMQ = null; - private int defaultThreshold; - - public int getDefaultThreshold() { - return defaultThreshold; - } - public void setDefaultThreshold(final int defaultThreshold) { - this.defaultThreshold = defaultThreshold; - } - public ItemServer(final String id, final String defaultDMQ) { - this.id = id; - this.defaultDMQ = defaultDMQ; - } - public String getId() { - return id; - } - public void setId(final String id) { - this.id = id; - } - public String getDefaultDMQ() { - return defaultDMQ; - } - public void setDefaultDMQ(final String defaultDMQ) { - this.defaultDMQ = defaultDMQ; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemUser.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemUser.java deleted file mode 100644 index f81c0e9785..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ItemUser.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - - -/** - * - * @author Adriana Danes - * - */ -public class ItemUser extends ItemBase implements java.io.Serializable{ -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramAdapterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramAdapterForm.java deleted file mode 100644 index f522805639..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramAdapterForm.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram Adapter form page. - * @author Adriana Danes - */ - -public final class JoramAdapterForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - /** - * True: when deploying, the adapter starts a collocated JORAM server. - * False: when deploying, the adapter connects to a remote JORAM server. - */ - private boolean collocatedServer; - // Following properties usefull when starting a collocated server - /** - * Directory where the a3servers.xml and joramAdmin.xml files are located - */ - private String configDir = null; - /** - * Name of the file describing the administration tasks to perform - * (by default joramAdmin.xml) - */ - private String adminFile = null; - /** - * Persistence mode of the collocated JORAM server - */ - private boolean persistentServer; - /** - * Identifier of the JORAM server to start - */ - private String serverIdTxt = null; - /** - * Name of the JORAM server to start - */ - private String serverName = null; - // The following properties usefull when manageing a remote server - private String version = null; - /** - * Name of the host where the JORAM server runs - */ - private String hostName = null; - /** - * Port the JORAM server is listening on - */ - private String serverPortTxt = null; - /** - * - */ - private String cnxPendingTimerTxt = null; - /** - * - */ - private String connectingTimerTxt = null; - /** - * - */ - private String txPendingTimerTxt = null; - -// ------------------------------------------------------------- Properties Methods - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - /** - * @return Returns the collocatedServer. - */ - public boolean isCollocatedServer() { - return collocatedServer; - } - - /** - * @param collocatedServer The collocatedServer to set. - */ - public void setCollocatedServer(boolean collocatedServer) { - this.collocatedServer = collocatedServer; - } - - /** - * @return Returns the configDir. - */ - public String getConfigDir() { - return configDir; - } - - /** - * @param configDir The configDir to set. - */ - public void setConfigDir(String configDir) { - this.configDir = configDir; - } - - /** - * @return Returns the adminFile. - */ - public String getAdminFile() { - return adminFile; - } - - /** - * @param adminFile The adminFile to set. - */ - public void setAdminFile(String adminFile) { - this.adminFile = adminFile; - } - - /** - * @return Returns the persistentServer. - */ - public boolean isPersistentServer() { - return persistentServer; - } - - /** - * @param persistentServer The persistentServer to set. - */ - public void setPersistentServer(boolean persistentServer) { - this.persistentServer = persistentServer; - } - - /** - * @return Returns the serverIdTxt. - */ - public String getServerIdTxt() { - return serverIdTxt; - } - - /** - * @param serverIdTxt The serverIdTxt to set. - */ - public void setServerIdTxt(String serverIdTxt) { - this.serverIdTxt = serverIdTxt; - } - - /** - * @return Returns the serverName. - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName The serverName to set. - */ - public void setServerName(String serverName) { - this.serverName = serverName; - } - - /** - * @return Returns the hostName. - */ - public String getHostName() { - return hostName; - } - - /** - * @param hostName The hostName to set. - */ - public void setHostName(String hostName) { - this.hostName = hostName; - } - - /** - * @return Returns the serverPortTxt. - */ - public String getServerPortTxt() { - return serverPortTxt; - } - - /** - * @param serverPortTxt The serverPortTxt to set. - */ - public void setServerPortTxt(String serverPortTxt) { - this.serverPortTxt = serverPortTxt; - } - - /** - * @return Returns the cnxPendingTimerTxt. - */ - public String getCnxPendingTimerTxt() { - return cnxPendingTimerTxt; - } - - /** - * @param cnxPendingTimerTxt The cnxPendingTimerTxt to set. - */ - public void setCnxPendingTimerTxt(String cnxPendingTimerTxt) { - this.cnxPendingTimerTxt = cnxPendingTimerTxt; - } - - /** - * @return Returns the connectingTimerTxt. - */ - public String getConnectingTimerTxt() { - return connectingTimerTxt; - } - - /** - * @param connectingTimerTxt The connectingTimerTxt to set. - */ - public void setConnectingTimerTxt(String connectingTimerTxt) { - this.connectingTimerTxt = connectingTimerTxt; - } - - /** - * @return Returns the txPendingTimerTxt. - */ - public String getTxPendingTimerTxt() { - return txPendingTimerTxt; - } - - /** - * @param txPendingTimerTxt The txPendingTimerTxt to set. - */ - public void setTxPendingTimerTxt(String txPendingTimerTxt) { - this.txPendingTimerTxt = txPendingTimerTxt; - } - - // ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - version = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramDestinationForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramDestinationForm.java deleted file mode 100644 index 41ccc1b92a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramDestinationForm.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class JoramDestinationForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String type = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - type = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.resource.jms.create.name.required")); - } - if (getType() == null) { - oErrors.add("type", new ActionMessage("error.resource.jms.create.type.required")); - } - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalQueueForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalQueueForm.java deleted file mode 100644 index 2e79d79d0e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalQueueForm.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local queue form page. - * @author Frederic MAISTRE - */ - -public final class JoramLocalQueueForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String name = null; - private String id = null; - private ArrayList listUsedByEjb = new ArrayList(); - -// ------------------------------------------------------------- Properties Methods - /** - * @return Returns the listUsedByEjb. - */ - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - /** - * @param listUsedByEjb The listUsedByEjb to set. - */ - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - id = null; - listUsedByEjb = new ArrayList(); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalServerForm.java deleted file mode 100644 index 1e0401c874..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalServerForm.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local server form page. - * @author Frederic MAISTRE - */ - -public final class JoramLocalServerForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String serverId = null; - private String mode = null; - private String host = null; - private String port = null; - -// ------------------------------------------------------------- Properties Methods - - - public String getServerId() { - return serverId; - } - - public void setServerId(String serverId) { - this.serverId = serverId; - } - - public String getMode() { - return mode; - } - - public void setMode(String mode) { - this.mode = mode; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getPort() { - return port; - } - - public void setPort(String port) { - this.port = port; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - - serverId = null; - mode = null; - host = null; - port = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalTopicForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalTopicForm.java deleted file mode 100644 index 61126a5528..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramLocalTopicForm.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local topic form page. - * @author Frederic MAISTRE - */ - -public final class JoramLocalTopicForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String name = null; - private String id = null; - private ArrayList listUsedByEjb = new ArrayList(); - -// ------------------------------------------------------------- Properties Methods - /** - * @return Returns the listUsedByEjb. - */ - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - /** - * @param listUsedByEjb The listUsedByEjb to set. - */ - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - id = null; - listUsedByEjb = new ArrayList(); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramPlatformForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramPlatformForm.java deleted file mode 100644 index 2bc18ea0c4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramPlatformForm.java +++ /dev/null @@ -1,468 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram platform form page. - * @author Frederic MAISTRE - * @author Adriana Danes - */ - -public final class JoramPlatformForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - /** - * local server's id - * */ - private String localServer = null; - /** - * remote servers ids - */ - private String[] remoteServers = null; - - /** - * remote {servers id, defaultDMQ id} - */ - private ItemServer[] remoteItemServers = null; - - /** - * True if a Joram adapter RAR is loaded on the current server - */ - private boolean adapterLoaded = false; - /** - * a3servers.xml content - */ - private String configuration = null; - - private int localPort; - - private String localHost = null; - - private int defaultThreshold; - - private String defaultDMQ = null; - - // The properties below are provided only if the Joram resource adapter is - // deployed on the current server - /** - * RA version (Joram version also) - */ - private String version = null; - /** - * Duration in seconds during which connecting is attempted (connecting - * might take time if the server is temporarily not reachable); the 0 value - * is set for connecting only once and aborting if connecting failed. - */ - private String connectingTimerTxt = null; - /** - * Duration in seconds during which a JMS transacted (non XA) session might - * be pending; above that duration the session is rolled back and closed; - * the 0 value means "no timer". - */ - private String txPendingTimerTxt = null; - /** - * Period in milliseconds between two ping requests sent by the client - * connection to the server; if the server does not receive any ping - * request during more than 2 * cnxPendingTimer, the connection is - * considered as dead and processed as required. - */ - private String cnxPendingTimerTxt = null; - - /** - * True: when deploying, the adapter starts a collocated JORAM server. - * False: when deploying, the adapter connects to a remote JORAM server. - */ - private boolean collocatedServer; - // Following properties usefull when starting a collocated server - /** - * Directory where the a3servers.xml and joramAdmin.xml files are locate - */ - private String configDir = null; - /** - * Name of the file describing the administration tasks to perform - * (by default joramAdmin.xml) - */ - private String adminFile = null; - /** - * Persistence mode of the collocated JORAM server - */ - private boolean persistentServer; - /** - * Identifier of the JORAM server to start - */ - private String serverIdTxt = null; - /** - * Name of the JORAM server to start - */ - private String serverName = null; - // The following properties usefull when manageing a remote server - /** - * Name of the host where the JORAM server runs - */ - private String hostName = null; - /** - * Port the JORAM server is listening on - */ - private String serverPortTxt = null; - - private long timeOutToAbortRequest; -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - version = null; - localServer = null; - remoteServers = null; - adapterLoaded = false; - configuration = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - /** - * @return Returns the localServer. - */ - public String getLocalServer() { - return localServer; - } - - /** - * @param localServer The localServer to set. - */ - public void setLocalServer(final String localServer) { - this.localServer = localServer; - } - - /** - * @return Returns the remoteServers. - */ - public String[] getRemoteServers() { - return remoteServers; - } - - /** - * @param remoteServers The remoteServers to set. - */ - public void setRemoteServers(final String[] remoteServers) { - this.remoteServers = remoteServers; - } - - public ItemServer[] getRemoteItemServers() { - return remoteItemServers; - } - - public void setRemoteItemServers(final ItemServer[] remoteItemServers) { - this.remoteItemServers = remoteItemServers; - } - - /** - * @return Returns the isAdapterLoaded. - */ - public boolean getAdapterLoaded() { - return adapterLoaded; - } - - /** - * @param isAdapterLoaded The isAdapterLoaded to set. - */ - public void setAdapterLoaded(final boolean adapterLoaded) { - this.adapterLoaded = adapterLoaded; - } - - /** - * @return Returns the configuration. - */ - public String getConfiguration() { - return configuration; - } - - /** - * @param configuration The configuration to set. - */ - public void setConfiguration(final String configuration) { - this.configuration = configuration; - } - - /** - * @return Returns the version. - */ - public String getVersion() { - return version; - } - - /** - * @param version The version to set. - */ - public void setVersion(final String version) { - this.version = version; - } - - /** - * @return Returns the localPort. - */ - public int getLocalPort() { - return localPort; - } - - /** - * @param localPort The localPort to set. - */ - public void setLocalPort(final int localPort) { - this.localPort = localPort; - } - - /** - * @return Returns the defaultThreshold. - */ - public int getDefaultThreshold() { - return defaultThreshold; - } - - /** - * @param defaultThreshold The defaultThreshold to set. - */ - public void setDefaultThreshold(final int defaultThreshold) { - this.defaultThreshold = defaultThreshold; - } - - /** - * @return Returns the collocatedServer. - */ - public boolean isCollocatedServer() { - return collocatedServer; - } - - /** - * @param collocatedServer The collocatedServer to set. - */ - public void setCollocatedServer(final boolean collocatedServer) { - this.collocatedServer = collocatedServer; - } - - /** - * @return Returns the configDir. - */ - public String getConfigDir() { - return configDir; - } - - /** - * @param configDir The configDir to set. - */ - public void setConfigDir(final String configDir) { - this.configDir = configDir; - } - - /** - * @return Returns the adminFile. - */ - public String getAdminFile() { - return adminFile; - } - - /** - * @param adminFile The adminFile to set. - */ - public void setAdminFile(final String adminFile) { - this.adminFile = adminFile; - } - - /** - * @return Returns the persistentServer. - */ - public boolean isPersistentServer() { - return persistentServer; - } - - /** - * @param persistentServer The persistentServer to set. - */ - public void setPersistentServer(final boolean persistentServer) { - this.persistentServer = persistentServer; - } - - /** - * @return Returns the serverIdTxt. - */ - public String getServerIdTxt() { - return serverIdTxt; - } - - /** - * @param serverIdTxt The serverIdTxt to set. - */ - public void setServerIdTxt(final String serverIdTxt) { - this.serverIdTxt = serverIdTxt; - } - - /** - * @return Returns the serverName. - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName The serverName to set. - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * @return Returns the hostName. - */ - public String getHostName() { - return hostName; - } - - /** - * @param hostName The hostName to set. - */ - public void setHostName(final String hostName) { - this.hostName = hostName; - } - - /** - * @return Returns the serverPortTxt. - */ - public String getServerPortTxt() { - return serverPortTxt; - } - - /** - * @param serverPortTxt The serverPortTxt to set. - */ - public void setServerPortTxt(final String serverPortTxt) { - this.serverPortTxt = serverPortTxt; - } - - /** - * @return Returns the cnxPendingTimerTxt. - */ - public String getCnxPendingTimerTxt() { - return cnxPendingTimerTxt; - } - - /** - * @param cnxPendingTimerTxt The cnxPendingTimerTxt to set. - */ - public void setCnxPendingTimerTxt(final String cnxPendingTimerTxt) { - this.cnxPendingTimerTxt = cnxPendingTimerTxt; - } - - /** - * @return Returns the connectingTimerTxt. - */ - public String getConnectingTimerTxt() { - return connectingTimerTxt; - } - - /** - * @param connectingTimerTxt The connectingTimerTxt to set. - */ - public void setConnectingTimerTxt(final String connectingTimerTxt) { - this.connectingTimerTxt = connectingTimerTxt; - } - - /** - * @return Returns the txPendingTimerTxt. - */ - public String getTxPendingTimerTxt() { - return txPendingTimerTxt; - } - - /** - * @param txPendingTimerTxt The txPendingTimerTxt to set. - */ - public void setTxPendingTimerTxt(final String txPendingTimerTxt) { - this.txPendingTimerTxt = txPendingTimerTxt; - } - - /** - * @return Returns the localHost. - */ - public String getLocalHost() { - return localHost; - } - - /** - * @param localHost The localHost to set. - */ - public void setLocalHost(final String localHost) { - this.localHost = localHost; - } - - /** - * @return Returns the timeOutToAbortRequest. - */ - public long getTimeOutToAbortRequest() { - return timeOutToAbortRequest; - } - - /** - * @param timeOutToAbortRequest The timeOutToAbortRequest to set. - */ - public void setTimeOutToAbortRequest(final long timeOutToAbortRequest) { - this.timeOutToAbortRequest = timeOutToAbortRequest; - } - - /** - * @return Returns the defaultDMQ. - */ - public String getDefaultDMQ() { - return defaultDMQ; - } - - /** - * @param defaultDMQ The defaultDMQ to set. - */ - public void setDefaultDMQ(final String defaultDMQ) { - this.defaultDMQ = defaultDMQ; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramQueueForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramQueueForm.java deleted file mode 100644 index 230db449f8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramQueueForm.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local queue form page. - * @author Frederic MAISTRE - */ - -public final class JoramQueueForm extends DestinationForm { - -// ------------------------------------------------------------- Properties Variables - /** - * - */ - private String messageIds = null; - /** - * - */ - private int nbMaxMsg = -1; - /** - * - */ - private int pendingMessages = 0; - /** - * - */ - private int pendingRequests = 0; - /** - * - */ - private int threshold = 0; -// ------------------------------------------------------------- Properties Methods - /** - * @return Returns the messageIds. - */ - public String getMessageIds() { - return messageIds; - } - - /** - * @param messageIds The messageIds to set. - */ - public void setMessageIds(String messageIds) { - this.messageIds = messageIds; - } - - /** - * @return Returns the nbMaxMsg. - */ - public int getNbMaxMsg() { - return nbMaxMsg; - } - - /** - * @param nbMaxMsg The nbMaxMsg to set. - */ - public void setNbMaxMsg(int nbMaxMsg) { - this.nbMaxMsg = nbMaxMsg; - } - - /** - * @return Returns the pendingMessages. - */ - public int getPendingMessages() { - return pendingMessages; - } - - /** - * @param pendingMessages The pendingMessages to set. - */ - public void setPendingMessages(int pendingMessages) { - this.pendingMessages = pendingMessages; - } - - /** - * @return Returns the pendingRequests. - */ - public int getPendingRequests() { - return pendingRequests; - } - - /** - * @param pendingRequests The pendingRequests to set. - */ - public void setPendingRequests(int pendingRequests) { - this.pendingRequests = pendingRequests; - } - - /** - * @return Returns the threshold. - */ - public int getThreshold() { - return threshold; - } - - /** - * @param threshold The threshold to set. - */ - public void setThreshold(int threshold) { - this.threshold = threshold; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - messageIds = null; - nbMaxMsg = -1; - pendingMessages = 0; - pendingRequests = 0; - threshold = -1; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return super.validate(mapping, request); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramReaderWriterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramReaderWriterForm.java deleted file mode 100644 index 5db8af66a7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramReaderWriterForm.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Adriana Danes - */ -public class JoramReaderWriterForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String id = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - name = null; - id = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.resource.jms.addreader.name.required")); - } - if (getId() == null) { - oErrors.add("id", new ActionMessage("error.resource.jms.addreader.id.required")); - } - /* - String ons = getName() + "[" + id + "]"; - try { - ObjectName userOn = JoramObjectName.joramUser(ons); - if (!JonasManagementRepr.isRegistered(userOn, serverName)) { - oErrors.add("name", new ActionMessage("error.resource.jms.addreader.name.error")); - } - } catch (MalformedObjectNameException e) { - oErrors.add("name", new ActionMessage("error.resource.jms.addreader.name.error")); - - } - */ - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the id. - */ - public String getId() { - return id; - } - - /** - * @param id The id to set. - */ - public void setId(final String id) { - this.id = id; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramRemoteServerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramRemoteServerForm.java deleted file mode 100644 index cb16a89121..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramRemoteServerForm.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local server form page. - * @author Frederic MAISTRE - */ - -public final class JoramRemoteServerForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String serverId = null; - -// ------------------------------------------------------------- Properties Methods - - - public String getServerId() { - return serverId; - } - - public void setServerId(String serverId) { - this.serverId = serverId; - } - - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - - serverId = null; - - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramServersForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramServersForm.java deleted file mode 100644 index 64233cea01..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramServersForm.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram platform form page. - * @author Frederic MAISTRE - */ - -public final class JoramServersForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String localId = null; - private List remoteIds = null; - -// ------------------------------------------------------------- Properties Methods - - /** - * @return Returns the localId. - */ - public String getLocalId() { - return localId; - } - /** - * @param localId The localId to set. - */ - public void setLocalId(String localId) { - this.localId = localId; - } - /** - * @return Returns the remoteIds. - */ - public List getRemoteIds() { - return remoteIds; - } - /** - * @param remoteIds The remoteIds to set. - */ - public void setRemoteIds(List remoteIds) { - this.remoteIds = remoteIds; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - localId = null; - remoteIds = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramTopicForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramTopicForm.java deleted file mode 100644 index 26b39fc789..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramTopicForm.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram local queue form page. - * @author Frederic MAISTRE - */ - -public final class JoramTopicForm extends DestinationForm { - -// ------------------------------------------------------------- Properties Variables - /** - * The id of a topic's subscribers - */ - private String subscriberIds = null; - /** - * The names of a topic's subscribers - */ - private String subscribers = null; - /** - * number of susbscriptions - */ - private int subscriptions = 0; - -// ------------------------------------------------------------- Properties Methods - - /** - * @return Returns the subscriberIds. - */ - public String getSubscriberIds() { - return subscriberIds; - } - - /** - * @param subscriberIds The subscriberIds to set. - */ - public void setSubscriberIds(String subscriberIds) { - this.subscriberIds = subscriberIds; - } - - /** - * @return Returns the subscriptions. - */ - public int getSubscriptions() { - return subscriptions; - } - - /** - * @param subscriptions The subscriptions to set. - */ - public void setSubscriptions(int subscriptions) { - this.subscriptions = subscriptions; - } - - /** - * @return Returns the subscribers. - */ - public String getSubscribers() { - return subscribers; - } - - /** - * @param subscribers The subscribers to set. - */ - public void setSubscribers(String subscribers) { - this.subscribers = subscribers; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - subscriberIds = null; - subscriptions = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return super.validate(mapping, request); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramUserForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramUserForm.java deleted file mode 100644 index aeefdb941f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/JoramUserForm.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class JoramUserForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String password = null; - private int serverId; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - password = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.resource.jms.create.name.required")); - } - if (getPassword() == null) { - oErrors.add("password", new ActionMessage("error.resource.jms.create.password.required")); - } - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - /** - * @return Returns the serverId. - */ - public int getServerId() { - return serverId; - } - - /** - * @param serverId The serverId to set. - */ - public void setServerId(int serverId) { - this.serverId = serverId; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/MonitoringDestForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/MonitoringDestForm.java deleted file mode 100644 index 4bbaa8ace5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/MonitoringDestForm.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Joram queue and topic pages - * @author Adriana Danes - */ - -public class MonitoringDestForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - /** - * - */ - private long nbMsgsReceiveSinceCreation; - private long nbMsgsSendToDMQSinceCreation; - private long nbMsgsDeliverSinceCreation; - //private Date creationDate; - private String name = null; - private String type = null; -// ------------------------------------------------------------- Properties Methods - - /** - * @return Returns the nbMsgsReceiveSinceCreation. - */ - public long getNbMsgsReceiveSinceCreation() { - return nbMsgsReceiveSinceCreation; - } - - /** - * @param nbMsgsReceiveSinceCreation The nbMsgsReceiveSinceCreation to set. - */ - public void setNbMsgsReceiveSinceCreation(long nbMsgsReceiveSinceCreation) { - this.nbMsgsReceiveSinceCreation = nbMsgsReceiveSinceCreation; - } - - /** - * @return Returns the nbMsgsSendToDMQSinceCreation. - */ - public long getNbMsgsSendToDMQSinceCreation() { - return nbMsgsSendToDMQSinceCreation; - } - - /** - * @param nbMsgsSendToDMQSinceCreation The nbMsgsSendToDMQSinceCreation to set. - */ - public void setNbMsgsSendToDMQSinceCreation(long nbMsgsSendToDMQSinceCreation) { - this.nbMsgsSendToDMQSinceCreation = nbMsgsSendToDMQSinceCreation; - } - - /** - * @return Returns the nbMsgsDeliverSinceCreation. - */ - public long getNbMsgsDeliverSinceCreation() { - return nbMsgsDeliverSinceCreation; - } - - /** - * @param nbMsgsDeliverSinceCreation The nbMsgsDeliverSinceCreation to set. - */ - public void setNbMsgsDeliverSinceCreation(long nbMsgsDeliverSinceCreation) { - this.nbMsgsDeliverSinceCreation = nbMsgsDeliverSinceCreation; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - - /** - * @param type The type to set. - */ - public void setType(String type) { - this.type = type; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - nbMsgsReceiveSinceCreation = 0; - nbMsgsSendToDMQSinceCreation = 0; - nbMsgsDeliverSinceCreation = 0; - name = null; - type = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ReloadJoramAdmin.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ReloadJoramAdmin.java deleted file mode 100644 index 0196411b67..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/ReloadJoramAdmin.java +++ /dev/null @@ -1,100 +0,0 @@ - -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; -import java.util.Set; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; - - -/** - * @author Yannick braeuner - */ - -public class ReloadJoramAdmin extends EditJoramBaseAction { - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param p_Mapping The ActionMapping used to select this instance - * @param p_Form The optional ActionForm bean for this request (if any) - * @param p_Request The HTTP request we are processing - * @param p_Response The HTTP response we are creating - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - try { - // Object name use - Set adapterOns = JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), jonasServerName ); - if (adapterOns.isEmpty()) { - throw new Exception("No JORAM server available"); - } - ObjectName joramPlatformOn = (ObjectName) adapterOns.iterator().next(); - // Call method - String[] params = new String[1]; - params[0] = getPathToReloadJoramAdmin() + "/joramAdmin.xml"; - String[] signature = {"java.lang.String"}; - JonasManagementRepr.invoke(joramPlatformOn, "executeXMLAdminJMX", params, signature, jonasServerName); - // Get the right local Joram id from the server - String localJoramServerId = (String) p_Request.getSession().getAttribute("localId"); - // Refresh the Joram tree from the joram id server - refreshJoramTree(p_Request, null); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JoramPlatform")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmDestinationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmDestinationsAction.java deleted file mode 100644 index 7dce0d4774..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmDestinationsAction.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - - -/** - * @author Adriana Danes - */ -public class RemoveConfirmDestinationsAction extends BaseDeployAction { - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - RemoveDestinationsForm oForm = (RemoveDestinationsForm) m_Session.getAttribute("removeDestinationsForm"); - // Array of ItemDestination - ArrayList destinationsArray = (ArrayList) m_Session.getAttribute("destinations"); - - String currentId = (String) m_Session.getAttribute("currentId"); // Joram server currently being managed - try { - ObjectName joramAdapterOn = JoramObjectName.joramAdapter(); - - String destinationName = null; - ObjectName destinationObjectName = null; - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - destinationName = oForm.getSelectedItems()[i]; - destinationObjectName = getDestinationOn(destinationName, destinationsArray, jonasServerName); - if (destinationObjectName != null) { - JonasManagementRepr.invoke(destinationObjectName, "delete", null, null, jonasServerName); - Object[] asParam = { - destinationName - }; - String[] asSignature = { - "java.lang.String" - }; - JonasManagementRepr.invoke(joramAdapterOn, "removeDestination", asParam, asSignature, jonasServerName); - } - } - // refresh tree - refreshJoramTree(pRequest, currentId); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("ActionEditJoramServer")); - } - - private ObjectName getDestinationOn(final String destinationName, final ArrayList destinationItems, final String jonasServerName) { - for (int i = 0; i < destinationItems.size(); i++) { - ItemDestination item = (ItemDestination) destinationItems.get(i); - ObjectName itemOn = item.getOn(); - if (itemOn != null) { - String itemDestNameProp = itemOn.getKeyProperty("name"); - // compare with destinationName - if (itemDestNameProp.startsWith(destinationName)) { - String itemDestName = (String) JonasManagementRepr.getAttribute(itemOn, "AdminName", jonasServerName); - if (destinationName.equals(itemDestName)) { - return itemOn; - } - } - } - } - return null; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmUsersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmUsersAction.java deleted file mode 100644 index 16c98f3810..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveConfirmUsersAction.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.util.Set; - -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ -public class RemoveConfirmUsersAction extends BaseDeployAction { - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) { - - // Current JOnAS server - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - RemoveUsersForm oForm = (RemoveUsersForm) m_Session.getAttribute("removeUsersForm"); - String localId = (String) m_Session.getAttribute("localId"); // Joram server to which client admin is connected - String currentId = (String) m_Session.getAttribute("currentId"); // Joram server currently being managed - try { - String destinationName = null; - Set adapterOns = JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), jonasServerName); - if (adapterOns.isEmpty()) { - throw new InstanceNotFoundException(); - } - ObjectName joramAdapterON = (ObjectName) adapterOns.iterator().next(); - ObjectName destinationObjectName = null; - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - destinationName = oForm.getSelectedItems()[i]; - if (currentId.equals(localId)) { - String[] asParam = { - destinationName - }; - String[] asSignature = { - "java.lang.String" - }; - JonasManagementRepr.invoke(joramAdapterON, "removeDestination", asParam, asSignature, jonasServerName); - } else { - destinationObjectName = JoramObjectName.joramQueue(destinationName); - if (JonasManagementRepr.isRegistered(destinationObjectName, jonasServerName)) { - // the destination is a queue - JonasManagementRepr.invoke(destinationObjectName, "delete", null, null, jonasServerName); - } else { - destinationObjectName = JoramObjectName.joramTopic(destinationName); - if (JonasManagementRepr.isRegistered(destinationObjectName, jonasServerName)) { - // the destination is a topic - JonasManagementRepr.invoke(destinationObjectName, "delete", null, null, jonasServerName); - } - } - } - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("ActionEditJoramServer")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveDestinationsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveDestinationsForm.java deleted file mode 100644 index 8f314f4af9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveDestinationsForm.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class RemoveDestinationsForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramDestinationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramDestinationsAction.java deleted file mode 100644 index cd667e2319..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramDestinationsAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class RemoveJoramDestinationsAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - /*throws IOException, ServletException*/ { - - // Form used - //RemoveDestinationsForm oForm = (RemoveDestinationsForm) p_Form; - - try { - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Confirm Remove Destinations")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramUsersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramUsersAction.java deleted file mode 100644 index fa73659a39..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveJoramUsersAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class RemoveJoramUsersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - /*throws IOException, ServletException*/ { - - // Form used - //RemoveDestinationsForm oForm = (RemoveDestinationsForm) p_Form; - - try { - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Confirm Remove Users")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveUsersForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveUsersForm.java deleted file mode 100644 index c5484e7b59..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/joramplatform/RemoveUsersForm.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.joramplatform; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class RemoveUsersForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyCatalinaAccessLoggerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyCatalinaAccessLoggerAction.java deleted file mode 100644 index 61d0f2a066..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyCatalinaAccessLoggerAction.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminException; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ -public class ApplyCatalinaAccessLoggerAction extends BaseLoggerAction { - - /** - * Signature for the createStandardConnector operation. - */ - private String sa_CreateAccessLogger[] = { - "java.lang.String" - }; - - private static String sDefaultForward = "ActionEditWebAppCatalina"; - -// --------------------------------------------------------- Protected Variables - -// --------------------------------------------------------- Public Methods - /** - * Execute CatalinaAccessLogger action - * @param pForm The current form - * @param pMapping The current mapping - * @param pRequest The current request - * @param pResponse The response to the current request - * @return The forward to go to the next page - * @throws Exception - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Default forward - ActionForward oForward = null; - - // Form used - CatalinaAccessLogValveForm oForm = (CatalinaAccessLogValveForm) pForm; - - // Populate - try { - if ("create".equals(oForm.getAction())) { - oForward = createAccessLogger(oForm, pMapping, pRequest); - } else if ("edit".equals(oForm.getAction())) { - // Save in memory the new datas - oForward = populateMbean(oForm - , pMapping.findForward("ActionEditCatalinaAccessLogger"), pMapping, pRequest); - } - } catch (JonasAdminException e) { - // Build error - m_Errors.add("logger.catalina.access", new ActionMessage(e.getId())); - saveErrors(pRequest, m_Errors); - // Return to the current page - oForward = new ActionForward(pMapping.getInput()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - oForward = pMapping.findForward("Global Error"); - } - - // Next Forward - return oForward; - } - - /** - * Create a new access logger. - * @param pForm The current form - * @param pMapping The current mapping - * @param pRequest The current request - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward createAccessLogger(CatalinaAccessLogValveForm pForm - , ActionMapping pMapping, HttpServletRequest pRequest) - throws Exception { - Object values[] = null; - // Look up the Catalina MBeanFactory - ObjectName onFactory = CatalinaObjectName.catalinaFactory(); - // Create a new Access Logger Valve object - values = new Object[1]; - String domainName = m_WhereAreYou.getCurrentCatalinaDomainName(); - // Determine container type - String containerType = pForm.getContainerType(); - if (containerType.equals(m_Resources.getMessage("label.loggers.container.engine"))) { - ObjectName onEngine = CatalinaObjectName.catalinaEngine(domainName); - values[0] = (onEngine).toString(); - } else if (containerType.equals(m_Resources.getMessage("label.loggers.container.host"))) { - ObjectName onHost = CatalinaObjectName.catalinaHost(domainName, pForm.getContainerName()); - values[0] = (onHost).toString(); - } - WhereAreYou oWhere = (WhereAreYou) pRequest.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - Object onValve = JonasManagementRepr.invoke(onFactory - , "createAccessLoggerValve", - values, - sa_CreateAccessLogger, - jonasServerName); - pForm.setObjectName((String) onValve); - // Populate - ActionForward oForward = populateMbean(pForm, pMapping.findForward("ActionListLoggers") - , pMapping, pRequest); - - // refresh tree - refreshTree(pRequest); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "logging" + WhereAreYou.NODE_SEPARATOR + LoggerItem.LOGGER_CATALINA_ACCESS_HOST, true); - - // Return the next forward - return oForward; - } - - /** - * Populate the Mbean Access Logger. - * @param p_Form The current form - * @param p_Forward The current forward - * @param p_Mapping The current mapping - * @param p_Request The current request - * @return If 'save' is requested then return the new forward to save - * else return the current forward - * @throws Exception Failed to populate Mbean - */ - protected ActionForward populateMbean(CatalinaAccessLogValveForm p_Form - , ActionForward p_Forward, ActionMapping p_Mapping, HttpServletRequest p_Request) - throws Exception { - ActionForward oForward = p_Forward; - // Access logger - ObjectName on = new ObjectName(p_Form.getObjectName()); - setStringAttribute(on, "directory", p_Form.getDirectory()); - setStringAttribute(on, "prefix", p_Form.getPrefix()); - setStringAttribute(on, "suffix", p_Form.getSuffix()); - setBooleanAttribute(on, "resolveHosts", p_Form.isResolveHosts()); - setBooleanAttribute(on, "rotatable", p_Form.isRotatable()); - setStringAttribute(on, "pattern", p_Form.getPattern()); - // Save in configuration file - if (p_Form.isSave()) { - //ObjectName onServer = CatalinaObjectName.catalinaServer(); - //JonasManagementRepr.invoke(onServer, "store", null, null); - p_Form.setSave(false); - p_Request.setAttribute("forward", p_Forward.getName()); - oForward = p_Mapping.findForward("ActionEditServletServer"); - } - return oForward; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersAction.java deleted file mode 100644 index e1999b93f6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersAction.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.common.ItemsForm; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyLoggersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsForm oForm = (ItemsForm) p_Form; - - // Actions - try { - // Select - ArrayList alSelected = new ArrayList(); - ObjectName on; - for (int i = 0; i < oForm.getSelectedItemsArray().length; i++) { - String selectedItem = oForm.getSelectedItemsArray()[i]; - String hostName = ObjectName.getInstance(selectedItem).getKeyProperty("host"); - String containerName = null; - String type = null; - String containerType = null; - if (hostName == null) { - type = LoggerItem.LOGGER_CATALINA_ACCESS_ENGINE; - containerType = m_Resources.getMessage("label.loggers.container.engine"); - } else { - type = LoggerItem.LOGGER_CATALINA_ACCESS_HOST; - // For the moment it can be only a host container but latter - // we will consider Context container case also - containerName = hostName; - containerType = m_Resources.getMessage("label.loggers.container.host"); - } - alSelected.add(new LoggerItem(m_Resources.getMessage("logger.catalina.access.name") - , type, null, selectedItem, containerType, containerName)); - } - oForm.setSelectedItemsList(alSelected); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("Loggers Confirm"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersConfirmAction.java deleted file mode 100644 index beabdd5faa..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggersConfirmAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.common.ItemsForm; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyLoggersConfirmAction extends BaseLoggerAction { - - /** - * Signature for the remove operation. - */ - private String removeType[] = { - "java.lang.String", // Object name - }; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsForm oForm = (ItemsForm) p_Form; - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Actions - try { - String[] values = new String[1]; - String operation = "removeValve"; - // Look up the Catalina MBeanFactory - ObjectName onFactory = CatalinaObjectName.catalinaFactory(); - // Remove connectors - for (int i = 0; i < oForm.getSelectedItemsList().size(); i++) { - LoggerItem o = (LoggerItem) oForm.getSelectedItemsList().get(i); - values[0] = o.getObjectName(); - JonasManagementRepr.invoke(onFactory, operation, values, removeType, serverName); - } - // refresh tree - refreshTree(p_Request); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionListLoggers"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggingJonasAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggingJonasAction.java deleted file mode 100644 index 20252e9da5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ApplyLoggingJonasAction.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ApplyLoggingJonasAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - LoggingJonasForm oForm = (LoggingJonasForm) p_Form; - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Object name used - ObjectName oObjectName = null; - try { - oObjectName = JonasObjectName.logService(domainName); - // Apply - String[] asSignature = new String[2]; - asSignature[0] = "java.lang.String"; - asSignature[1] = "java.lang.String"; - String[] asParam = new String[2]; - asParam[0] = oForm.getTopic(); - asParam[1] = oForm.getLevel(); - JonasManagementRepr.invoke(oObjectName, "setTopicLevel", asParam, asSignature, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditLoggingJonas")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/BaseLoggerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/BaseLoggerAction.java deleted file mode 100644 index b1131e0785..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/BaseLoggerAction.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasTreeBuilder; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - - -/** - * @author Michel-Ange ANTON - */ -abstract public class BaseLoggerAction extends BaseDeployAction { - -// --------------------------------------------------------- Protected Methods - - /** - * Refresh the tree. - * - * @param p_Request Current instance - * @throws Exception - */ - protected void refreshTree(HttpServletRequest p_Request) - throws Exception { - // Refresh Logger Tree - refreshLoggersTree(p_Request); - // Refresh MBeans Tree - refreshMBeansTree(p_Request); - // Force display to refresh - m_WhereAreYou.setTreeToRefresh(true); - } - - /** - * Refresh the loggers branch tree. - * - * @param p_Request Current instance - * @throws Exception - */ - protected void refreshLoggersTree(HttpServletRequest p_Request) - throws Exception { - // Get the domain and server name - String sDomainLabel = "domain"; - ObjectName oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - String sServerName = getStringAttribute(oObjectName, "serverName"); - // Get the node name - String sCurrentNodeNameItem = sDomainLabel + WhereAreYou.NODE_SEPARATOR + sServerName + WhereAreYou.NODE_SEPARATOR + "logging"; - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Get branch root node - TreeControlNode oBranchRootNode = oControl.findNode(sCurrentNodeNameItem); - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove old children - TreeControlNode[] aoNodes = oBranchRootNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - // Build node for the Service - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getLoggers(oBranchRootNode, m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaAccessLogValveForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaAccessLogValveForm.java deleted file mode 100644 index ee86f0739e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaAccessLogValveForm.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public final class CatalinaAccessLogValveForm extends CatalinaValveForm { - -// ----------------------------------------------------- Properties Variables - - /** - * directory in which log files will be placed - */ - private String directory = null; - /** - * A formatting layout - */ - private String pattern = null; - /** - * prefix added to the start of each log file's name - */ - private String prefix = null; - /** - * suffix added to the end of each log file's name - */ - private String suffix = null; - /** - * Deafult true. Flag to determine if log rotation should occure. - */ - private boolean rotatable = true; - /** - * Set to true to convert the IP address of the remote host into the corresponding host name via a DNS lookup. - * Set to false to skip this lookup, and report the remote IP address instead. - */ - private boolean resolveHosts = false; - /** - * - */ - private List booleanValues = Jlists.getBooleanValues(); - /** - * Domain name used to construct Catalina MBean ObjectNames (JOnAS server name in general) - */ - private String catalinaDomainName = null; - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - directory = "logs"; - prefix = "access_log."; - suffix = ".txt"; - pattern = "%h %l %u %t \"%r\" %s %b"; - resolveHosts = false; - rotatable = true; - String[] containerTypes = {"Engine", "Host"}; - setContainerTypes(containerTypes); - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - ActionErrors oErrors = new ActionErrors(); - // prefix - if ((prefix == null) || (prefix.length() < 1)) { - oErrors.add("pattern", new ActionMessage("error.logger.catalina.access.prefix.required")); - } - // default is a 0 length string - if ((suffix == null) || (suffix.length() < 1)) { - suffix = ""; - } - // pattern - if ((pattern == null) || (pattern.length() < 1)) { - oErrors.add("pattern", new ActionMessage("error.logger.catalina.access.pattern.required")); - } - // Test the provided Engine or Host names only in case we are in a "create" action - if (getAction().equals("edit")) { - return oErrors; - } - if (getContainerType().equals("Engine")) { - // Test if no access valve set already on the Engine - ObjectName onEngine = null; - try { - onEngine = CatalinaObjectName.catalinaEngine(catalinaDomainName); - } catch (MalformedObjectNameException e) { - oErrors.add("", new ActionMessage(e.toString())); - return oErrors; - } - ObjectName[] valveOns = (ObjectName[]) JonasManagementRepr.getAttribute(onEngine, "valveObjectNames", serverName); - for (int i = 0; i < valveOns.length; i++) { - ObjectName valveOn = valveOns[i]; - if (valveOn != null) { // can be null because bug in Tomacat (after a remove) - String valveName = valveOn.getKeyProperty("name"); - if (valveName.equals("AccessLogValve")) { - // we already have an AccessLogValve associated to the Engine - oErrors.add("", new ActionMessage("error.logger.catalina.access.log.engine.alreadypresent")); - break; - } - } - } - } - if (getContainerType().equals("Host")) { - // Test if no access valve set already on the choosen host - ObjectName onHost; - try { - onHost = CatalinaObjectName.catalinaHost(catalinaDomainName, getContainerName()); - } catch (MalformedObjectNameException e) { - oErrors.add("", new ActionMessage(e.toString())); - return oErrors; - } - if (!JonasManagementRepr.isRegistered(onHost, serverName)) { - oErrors.add("", new ActionMessage("error.logger.catalina.access.log.nohost")); - } else { - ObjectName[] valveOns = (ObjectName[]) JonasManagementRepr.getAttribute(onHost, "valveObjectNames", serverName); - for (int i = 0; i < valveOns.length; i++) { - ObjectName valveOn = valveOns[i]; - if (valveOn != null) { // can be null because bug in Tomacat (after a remove) - String valveName = valveOn.getKeyProperty("name"); - if (valveName.equals("AccessLogValve")) { - // we already have an AccessLogValve associated to the Host - oErrors.add("", new ActionMessage("error.logger.catalina.access.log.host.alreadypresent")); - break; - } - } - } - } - } - return oErrors; - } - -// ------------------------------------------------------------- Properties Methods - - public List getBooleanValues() { - return booleanValues; - } - - public void setBooleanValues(List booleanValues) { - this.booleanValues = booleanValues; - } - - public String getDirectory() { - return this.directory; - } - - public void setDirectory(String directory) { - this.directory = directory; - } - - public String getPattern() { - return this.pattern; - } - - public void setPattern(String pattern) { - this.pattern = pattern; - } - - public String getPrefix() { - return this.prefix; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } - - public String getSuffix() { - return this.suffix; - } - - public void setSuffix(String suffix) { - this.suffix = suffix; - } - - public boolean isResolveHosts() { - return this.resolveHosts; - } - - public void setResolveHosts(boolean resolveHosts) { - this.resolveHosts = resolveHosts; - } - - public boolean isRotatable() { - return this.rotatable; - } - - public void setRotatable(boolean rotatable) { - this.rotatable = rotatable; - } - - /** - * @return Returns the catalinaDomainName. - */ - public String getCatalinaDomainName() { - return catalinaDomainName; - } - - - /** - * @param catalinaDomainName The catalinaDomainName to set. - */ - public void setCatalinaDomainName(String catalinaDomainName) { - this.catalinaDomainName = catalinaDomainName; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaValveForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaValveForm.java deleted file mode 100644 index 57c3a3c514..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/CatalinaValveForm.java +++ /dev/null @@ -1,199 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class CatalinaValveForm extends ActionForm { - -// ----------------------------------------------------- Properties Variables - - /** - * - */ - private String action = "edit"; - /** - * - */ - private boolean save = false; - /** - * - */ - private String objectName = null; - /** - * - */ - private String valveName = null; - /** - * - */ - private String valveType = null; - /** - * Type of container in which the valve is defined - */ - private String containerType = null; - /** - * Possible container types - */ - private String[] containerTypes = null; - /** - * Name of container in which the valve is defined - */ - private String containerName = null; - /** - * Possible container names - */ - private String[] containerNames = null; - /** - * ObjectName of container in which the valve is defined - * when the container is a Web application (Catalina context) - */ - private String containerObjectName = null; - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = "edit"; - save = false; - } - -// ------------------------------------------------------------- Properties Methods - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getObjectName() { - return this.objectName; - } - - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - public String getValveType() { - return this.valveType; - } - - public void setValveType(String valveType) { - this.valveType = valveType; - } - - public boolean isSave() { - return save; - } - - public void setSave(boolean save) { - this.save = save; - } - - /** - * @return Returns the containerType. - */ - public String getContainerType() { - return containerType; - } - - /** - * @param containerType The containerType to set. - */ - public void setContainerType(String containerType) { - this.containerType = containerType; - } - - /** - * @return Returns the containerName. - */ - public String getContainerName() { - return containerName; - } - - /** - * @param containerName The containerName to set. - */ - public void setContainerName(String containerName) { - this.containerName = containerName; - } - - /** - * @return Returns the containerTypes. - */ - public String[] getContainerTypes() { - return containerTypes; - } - - - /** - * @param containerTypes The containerTypes to set. - */ - public void setContainerTypes(String[] containerTypes) { - this.containerTypes = containerTypes; - } - - /** - * @return Returns the containerNames. - */ - public String[] getContainerNames() { - return containerNames; - } - - - /** - * @param containerTypes The containerTypes to set. - */ - public void setContainerNames(String[] containerNames) { - this.containerNames = containerNames; - } - - /** - * @return Returns the containerObjectName. - */ - public String getContainerObjectName() { - return containerObjectName; - } - - - /** - * @param containerObjectName The containerObjectName to set. - */ - public void setContainerObjectName(String containerObjectName) { - this.containerObjectName = containerObjectName; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditCatalinaAccessLoggerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditCatalinaAccessLoggerAction.java deleted file mode 100644 index c745b32c0c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditCatalinaAccessLoggerAction.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.service.container.WebAppItem; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class EditCatalinaAccessLoggerAction extends BaseLoggerAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Parameters - String sAction = pRequest.getParameter("action"); - if (sAction == null) { - sAction = "edit"; - } - String sObjectName = pRequest.getParameter("select"); - // Form used - CatalinaAccessLogValveForm oForm = null; - if (("create".equals(sAction) == true) || (sObjectName != null)) { - oForm = new CatalinaAccessLogValveForm(); - m_Session.setAttribute("catalinaAccessLoggerForm", oForm); - oForm.reset(pMapping, pRequest); - oForm.setObjectName(sObjectName); - } else { - oForm = (CatalinaAccessLogValveForm) m_Session.getAttribute("catalinaAccessLoggerForm"); - } - oForm.setAction(sAction); - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Polulate - try { - if (oForm.getObjectName() != null) { - // Get the access logger - ObjectName on = new ObjectName(oForm.getObjectName()); - String loggerContainerType = null; // needed for mgmt tree node name - String loggerContainerName = null; // needed for mgmt tree node name - // Populate - oForm.setObjectName(on.toString()); - oForm.setDirectory(getStringAttribute(on, "directory")); - oForm.setPattern(getStringAttribute(on, "pattern")); - oForm.setPrefix(getStringAttribute(on, "prefix")); - oForm.setResolveHosts(getBooleanAttribute(on, "resolveHosts")); - oForm.setRotatable(getBooleanAttribute(on, "rotatable")); - oForm.setSuffix(getStringAttribute(on, "suffix")); - ObjectName onContainer = (ObjectName) JonasManagementRepr.getAttribute(on, "containerName", serverName); - if (onContainer.getKeyProperty("j2eeType") != null) { - if (onContainer.getKeyProperty("j2eeType").equals("WebModule")) { - // The container is a Web application (Context element in Tomcat) - oForm.setContainerType(m_Resources.getMessage("label.loggers.container.context")); - String webContainerName = WebAppItem.extractLabelPathContext( - onContainer.getKeyProperty("name") - , m_WhereAreYou.getCurrentCatalinaDefaultHostName()); - oForm.setContainerName(webContainerName); - oForm.setContainerObjectName(onContainer.toString()); - loggerContainerType = LoggerItem.LOGGER_CATALINA_ACCESS_CONTEXT; - loggerContainerName = on.getKeyProperty("path"); - } - } else if (onContainer.getKeyProperty("type") != null) { - if (onContainer.getKeyProperty("type").equals("Engine")) { - oForm.setContainerType(m_Resources.getMessage("label.loggers.container.engine")); - oForm.setContainerName(m_Resources.getMessage("label.loggers.container.engine.name")); - loggerContainerType = LoggerItem.LOGGER_CATALINA_ACCESS_ENGINE; - loggerContainerName = oForm.getContainerName(); - } else if (onContainer.getKeyProperty("type").equals("Host")) { - oForm.setContainerType(m_Resources.getMessage("label.loggers.container.host")); - oForm.setContainerName(onContainer.getKeyProperty("host")); - loggerContainerType = LoggerItem.LOGGER_CATALINA_ACCESS_HOST; - loggerContainerName = on.getKeyProperty("host"); - } - } - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "logging" - + WhereAreYou.NODE_SEPARATOR - + loggerContainerType - + WhereAreYou.NODE_SEPARATOR - + loggerContainerName, true); - } else { - oForm.setCatalinaDomainName(m_WhereAreYou.getCurrentCatalinaDomainName()); - ObjectName hostsOn = CatalinaObjectName.catalinaHosts(m_WhereAreYou.getCurrentCatalinaDomainName()); - Iterator hosts = JonasAdminJmx.getListMbean(hostsOn, serverName).iterator(); - ArrayList hostNames = new ArrayList(); - for (; hosts.hasNext();) { - hostNames.add(((ObjectName) hosts.next()).getKeyProperty("host")); - } - String[] allNames = new String[hostNames.size() + 1]; - allNames[0] = "no name required for Engine"; - for (int i=1; i < allNames.length; i++) { - allNames[i] = (String) hostNames.get(i-1); - } - oForm.setContainerNames(allNames); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (pMapping.findForward("Catalina Access Logger")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditLoggingJonasAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditLoggingJonasAction.java deleted file mode 100644 index 4ddc3921a1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/EditLoggingJonasAction.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditLoggingJonasAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "logging" - + WhereAreYou.NODE_SEPARATOR - + LoggerItem.LOGGER_JONAS, true); - - // Form used - LoggingJonasForm oForm = (LoggingJonasForm) p_Form; - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - ObjectName oObjectName = null; - oObjectName = JonasObjectName.logService(domainName); - String[] asTopic = (String[]) JonasManagementRepr.getAttribute(oObjectName, "topics", serverName); - - ArrayList alTopic = new ArrayList(Arrays.asList(asTopic)); - int iPos = alTopic.indexOf("root"); - if (iPos > -1) { - alTopic.remove(iPos); - alTopic.add(0, "root"); - Object[] ao = alTopic.toArray(); - for (int i = 0; i < ao.length; i++) { - asTopic[i] = ao[i].toString(); - } - } - - // Search the level of each topic - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - String sLevel = null; - ArrayList al = new ArrayList(); - String[] asLevel = new String[asTopic.length]; - for (int i = 0; i < asTopic.length; i++) { - asParam[0] = asTopic[i]; - sLevel = (String) JonasManagementRepr.invoke(oObjectName, "getTopicLevel", asParam - , asSignature, serverName); - asLevel[i] = sLevel; - al.add(new TopicLevel(asTopic[i], sLevel)); - } - oForm.setTopicLevelList(al); - oForm.setTopics(asTopic); - oForm.setLoggerJonasLevels(Jlists.getLoggerJonasLevels()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Logging Jonas")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ListLoggersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ListLoggersAction.java deleted file mode 100644 index a9406e86dc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ListLoggersAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ListLoggersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "logging", true); - - // no Form used - try { - // Get list of loggers with Forward name - ArrayList al = JonasAdminJmx.getLoggers(m_Resources, m_WhereAreYou, false); - // Set list in the request - p_Request.setAttribute("listLoggers", al); - // Remove items of the session - m_Session.removeAttribute("itemsLoggersForm"); - m_Session.removeAttribute("catalinaAccessLoggerForm"); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Loggers")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggerItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggerItem.java deleted file mode 100644 index 6439d9ede5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggerItem.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Michel-Ange ANTON - */ -public class LoggerItem implements NameItem { - -// --------------------------------------------------------- Constants - - public static String LOGGER_JONAS = "logger.jonas"; - public static String LOGGER_CATALINA_ACCESS_ENGINE = "logger.catalina.accesslogvalve.engine"; - public static String LOGGER_CATALINA_ACCESS_HOST = "logger.catalina.accesslogvalve.host"; - public static String LOGGER_CATALINA_ACCESS_CONTEXT = "logger.catalina.accesslogvalve.context"; - -// --------------------------------------------------------- Properties Variables - - private String name = null; - private String forward = null; - private String type = null; - private String objectName = null; - /** - * The container type on which the logger is defined - */ - private String containerType = null; - /** - * Name of the container on which the logger is defined - * Used in case of Host and Context conatainers - */ - private String containerName = null; - -// --------------------------------------------------------- Constructors - - public LoggerItem() { - } - - public LoggerItem(String p_Name, String p_Type, String p_Forward) { - setName(p_Name); - setType(p_Type); - setForward(p_Forward); - } - - public LoggerItem(String p_Name, String p_Type, String p_Forward, String p_ObjectName, String containerType, String containerName) { - this(p_Name, p_Type, p_Forward); - setObjectName(p_ObjectName); - setContainerType(containerType); - setContainerName(containerName); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getForward() { - return forward; - } - - public void setForward(String forward) { - this.forward = forward; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getObjectName() { - return objectName; - } - - public void setObjectName(String objectName) { - this.objectName = objectName; - } - - /** - * @return Returns the contextName. - */ - public String getContainerName() { - return containerName; - } - - - /** - * @param contextName The contextName to set. - */ - public void setContainerName(String contextName) { - this.containerName = contextName; - } - - /** - * @return Returns the containerType. - */ - public String getContainerType() { - return containerType; - } - - - /** - * @param containerType The containerType to set. - */ - public void setContainerType(String containerType) { - this.containerType = containerType; - } - - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggingJonasForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggingJonasForm.java deleted file mode 100644 index 2dfd840f84..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/LoggingJonasForm.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form bean for the Jonas server form page. - */ - -public final class LoggingJonasForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private ArrayList topicLevelList = new ArrayList(); - private String[] topics = null; - private List loggerJonasLevels = null; - private String level = null; - private String topic = null; - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - level = null; - topic = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -// ------------------------------------------------------------- Properties Methods - - public ArrayList getTopicLevelList() { - return topicLevelList; - } - - public void setTopicLevelList(ArrayList topicLevelList) { - this.topicLevelList = topicLevelList; - } - - public String[] getTopics() { - return topics; - } - - public void setTopics(String[] topics) { - this.topics = topics; - } - - public List getLoggerJonasLevels() { - return loggerJonasLevels; - } - - public void setLoggerJonasLevels(List loggerJonasLevels) { - this.loggerJonasLevels = loggerJonasLevels; - } - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/TopicLevel.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/TopicLevel.java deleted file mode 100644 index 5d087cf478..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/TopicLevel.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -public class TopicLevel { - -// ------------------------------------------------------------- Properties Variables - - private String topic; - private String level; - -// ------------------------------------------------------------- Constructors - - public TopicLevel() { - - } - - public TopicLevel(String ps_Topic, String ps_Level) { - setTopic(ps_Topic); - setLevel(ps_Level); - } - -// ------------------------------------------------------------- Properties Methods - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasAction.java deleted file mode 100644 index a8b1c80d92..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasAction.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.io.IOException; -import java.util.Set; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author - */ - -public class ViewLoggingJonasAction extends JonasBaseAction { - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "logging" - + WhereAreYou.NODE_SEPARATOR - + LoggerItem.LOGGER_JONAS, true); - - // Form used - ViewLoggingJonasForm oForm = (ViewLoggingJonasForm) p_Form; - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - ObjectName on = JonasObjectName.logBuffers(domainName); - Set ons = JonasManagementRepr.queryNames(on, serverName); - if (ons.isEmpty()) { - oForm.setBuffer(false); - } else { - ObjectName logon = (ObjectName) ons.iterator().next(); - oForm.setBuffer(true); - oForm.setSevereCount(((Long) JonasManagementRepr.getAttribute(logon, "SevereCount", serverName)).longValue()); - oForm.setWarningCount(((Long) JonasManagementRepr.getAttribute(logon, "WarningCount", serverName)).longValue()); - oForm.setLatestStamp(((Long) JonasManagementRepr.getAttribute(logon, "LatestDate", serverName)).longValue()); - oForm.setOldestStamp(((Long) JonasManagementRepr.getAttribute(logon, "OldestDate", serverName)).longValue()); - oForm.setRecent((String) JonasManagementRepr.getAttribute(logon, "Recent", serverName)); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("LoggingView")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasForm.java deleted file mode 100644 index 5e67351fc5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/logging/ViewLoggingJonasForm.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.logging; - -import java.util.Date; - -import org.apache.struts.action.ActionForm; - -public class ViewLoggingJonasForm extends ActionForm { - - /** - * true if LogBuffer MBean exists - */ - private boolean isBuffer = true; - /** - * severeCount - */ - private long severeCount = 0; - - /** - * warningCount - */ - private long warningCount = 0; - - /** - * infoCount - */ - private long infoCount = 0; - - /** - * recordCount - */ - private long recordCount = 0; - - - /** - * latestStamp - */ - private long latestStamp = 0; - - /** - * recent - */ - private String recent = null; - - /** - * oldest - */ - private long oldestStamp = 0; - /** - * get severeCount - * @return - */ - public long getSevereCount() { - return severeCount; - } - - /** - * set severeCount - * @param severeCount - */ - public void setSevereCount(long severeCount) { - this.severeCount = severeCount; - } - - /** - * get warningCount - * @return - */ - public long getWarningCount() { - return warningCount; - } - - /** - * set warningCount - * @param warningCount - */ - public void setWarningCount(long warningCount) { - this.warningCount = warningCount; - } - - /** - * get infoCount - * @return - */ - public long getInfoCount() { - return infoCount; - } - - /** - * set infoCount - * @param infoCount - */ - public void setInfoCount(long infoCount) { - this.infoCount = infoCount; - } - - /** - * get recordCount - * @return - */ - public long getRecordCount() { - return recordCount; - } - - /** - * set recordCount - * @param recordCount - */ - public void setRecordCount(long recordCount) { - this.recordCount = recordCount; - } - - - /** - * get latestStamp - * @return - */ - public long getLatestStamp() { - return latestStamp; - } - - public Date getLatestDate() { - return new Date(latestStamp); - } - - public Date getOldestDate() { - return new Date(oldestStamp); - } - /** - * set latestStamp - * @param recordCount - */ - public void setLatestStamp(long stamp) { - this.latestStamp = stamp; - } - - /** - * get recent - * @return - */ - public String getRecent() { - return recent; - } - - /** - * set recent - * @param recent - */ - public void setRecent(String recent) { - this.recent = recent; - } - - /** - * @return true if LogBuffer MBean exists - */ - public boolean getBuffer() { - return isBuffer; - } - - /** - * @param isBuffer is true if LogBuffer MBean exists - */ - public void setBuffer(boolean isBuffer) { - this.isBuffer = isBuffer; - } - - public long getOldestStamp() { - return oldestStamp; - } - - public void setOldestStamp(long oldestStamp) { - this.oldestStamp = oldestStamp; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ApplyMbeanFilteringAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ApplyMbeanFilteringAction.java deleted file mode 100644 index 59b60c3255..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ApplyMbeanFilteringAction.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ApplyMbeanFilteringAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - MbeanFilteringForm oForm = (MbeanFilteringForm) p_Form; - try { - // Get the current selected node - String s = m_WhereAreYou.getSelectedNameNode(); - // Suppress the 6 first characters of the node name ("MBean*") - s = s.substring(6); - // Forward to the jsp and add the parameter 'select' with the good value. - return new ActionForward(p_Mapping.findForward(oForm.getForward()).getPath() - + "?select=" + oForm.getSelectedName()); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListJ2eeMBeansAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListJ2eeMBeansAction.java deleted file mode 100644 index c42949396d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListJ2eeMBeansAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all MBeans. - * - * @author Michel-Ange ANTON - */ - -public final class ListJ2eeMBeansAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "j2ee", true); - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - try { - ArrayList list = new ArrayList(); - ArrayList[] als = JonasAdminJmx.getFamiliesMbeansLists(serverName); - Collections.sort(als[MbeanItem.FAMILY_J2EE], new BeanComparator(new String[] { - "domain", "j2eeType", "name", "objectName"})); - p_Request.setAttribute("J2eeMBeans", als[MbeanItem.FAMILY_J2EE]); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List J2eeMBeans"); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanAttributesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanAttributesAction.java deleted file mode 100644 index 6ca79070e2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanAttributesAction.java +++ /dev/null @@ -1,302 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; - -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanInfo; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all Attributes for a MBean. - * - * @author Michel-Ange ANTON - */ - -public final class ListMBeanAttributesAction extends ListMBeanDetailsAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - try { - // Save current action - setAction(ACTION_ATTRIBUTES); - // Parameter - String sSelect = p_Request.getParameter("select"); - - // Create a request attribute with our collection of MBeans - ArrayList list = new ArrayList(); - // Get all infos of a MBean - ObjectName on = new ObjectName(sSelect); - MbeanItem oItem = MbeanItem.build(on); - MBeanInfo oMBeanInfo = JonasManagementRepr.getMBeanInfo(on, serverName); - // Get attributes infos - MBeanAttributeInfo[] aoAttributes = oMBeanInfo.getAttributes(); - if (aoAttributes.length > 0) { - Object oValue; - String sError; - // Loop to append each attribute node - for (int i = 0; i < aoAttributes.length; i++) { - sError = null; - oValue = null; - try { - oValue = JonasManagementRepr.getAttribute(on, aoAttributes[i].getName(), serverName); - } catch (Exception ex) { - sError = ex.getMessage(); - } - list.add(new ViewMBeanAttributes(aoAttributes[i], oValue, sError)); - } - // Sort - Collections.sort(list, new MBeanAttributesByName()); - } - // Infos for displaying - p_Request.setAttribute("MBean", oItem); - p_Request.setAttribute("MBeanAttributes", list); - // Active and save filtering display if not exists - MbeanFilteringForm oForm = (MbeanFilteringForm) m_Session.getAttribute( - "mbeanFilteringForm"); - if (oForm == null) { - oForm = new MbeanFilteringForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("mbeanFilteringForm", oForm); - } - oForm.setSelectedName(sSelect); - // Force the node selected in tree when the direct is used (MBeans list) - StringBuffer sbBranch = new StringBuffer("domain*mbeans"); - sbBranch.append(WhereAreYou.NODE_SEPARATOR); - sbBranch.append(sSelect); - m_WhereAreYou.selectNameNode(sbBranch.toString(), true); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List MBean Attributes"); - } - -// --------------------------------------------------------- Inner Classes - - public class ViewMBeanAttributes { - private String name; - private String type; - private String is; - private String read; - private String write; - private String description; - private String value; - private String errorMessage; - private boolean error; - - public ViewMBeanAttributes(MBeanAttributeInfo po_Attr, Object po_Value, String ps_Error) { - setName(po_Attr.getName()); - setType(po_Attr.getType()); - setDescription(po_Attr.getDescription()); - setObjectValue(po_Value); - setErrorMessage(ps_Error); - if (ps_Error != null) { - setError(true); - } - if (po_Attr.isIs() == true) { - setIs("is"); - } - if (po_Attr.isReadable() == true) { - setRead("read"); - } - if (po_Attr.isWritable() == true) { - setWrite("write"); - } - } - - public void setObjectValue(Object objectValue) { - if (objectValue == null) { - value = "null"; - } - else { - // Detect Array or Collection - if (objectValue.getClass().isArray() == true) { - // Array - value = arrayToString((Object[]) objectValue); - } - else { - try { - // Collection - value = collectionToString((Collection) objectValue); - } - catch (Exception e) { - // Default - value = objectValue.toString(); - } - } - } - } - - public String arrayToString(Object[] p_Array) { - StringBuffer sb = new StringBuffer(); - sb.append("[ "); - for (int i = 0; i < p_Array.length; i++) { - if (p_Array[i] == null) { - sb.append("null"); - } - else { - sb.append(p_Array[i].toString()); - } - if ((i + 1) < p_Array.length) { - sb.append(" - "); - } - } - sb.append(" ]"); - return sb.toString(); - } - - public String collectionToString(Collection p_Collection) { - StringBuffer sb = new StringBuffer(); - sb.append("[ "); - Iterator it = p_Collection.iterator(); - while (it.hasNext()) { - sb.append(it.next().toString()); - if (it.hasNext()) { - sb.append(" - "); - } - } - sb.append(" ]"); - return sb.toString(); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getIs() { - return is; - } - - public void setIs(String is) { - this.is = is; - } - - public String getRead() { - return read; - } - - public void setRead(String read) { - this.read = read; - } - - public String getWrite() { - return write; - } - - public void setWrite(String write) { - this.write = write; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public boolean isError() { - return error; - } - - public void setError(boolean error) { - this.error = error; - } - } - - public class MBeanAttributesByName implements Comparator { - - public int compare(Object p_O1, Object p_O2) { - ViewMBeanAttributes o1 = (ViewMBeanAttributes) p_O1; - ViewMBeanAttributes o2 = (ViewMBeanAttributes) p_O2; - return o1.getName().compareToIgnoreCase(o2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof ViewMBeanAttributes) { - return true; - } - return false; - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanDetailsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanDetailsAction.java deleted file mode 100644 index ee85fcf1a4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanDetailsAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List the detail of MBean. - * - * @author Michel-Ange ANTON - */ - -public class ListMBeanDetailsAction extends JonasBaseAction { - -// --------------------------------------------------------- Constants - - public static final int ACTION_PROPERTIES = 0; - public static final int ACTION_ATTRIBUTES = 1; - public static final int ACTION_OPERATIONS = 2; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Forward to the corresponding display page - String sForward = null; - switch (getLastAction()) { - case ACTION_PROPERTIES: - sForward="ActionListMBeanProperties"; - break; - case ACTION_ATTRIBUTES: - sForward="ActionListMBeanAttributes"; - break; - case ACTION_OPERATIONS: - sForward="ActionListMBeanOperations"; - break; - } - return p_Mapping.findForward(sForward); - } - -// --------------------------------------------------------- Protected Methods - - protected int getLastAction() - { - Integer oInt = (Integer)m_Session.getAttribute("MBeanAction"); - if (oInt == null) { - return ACTION_PROPERTIES; - } - return oInt.intValue(); - } - - protected void setAction(int p_Action) - { - m_Session.setAttribute("MBeanAction", new Integer(p_Action)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanOperationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanOperationsAction.java deleted file mode 100644 index c14a00e0fc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanOperationsAction.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; - -import javax.management.MBeanInfo; -import javax.management.MBeanOperationInfo; -import javax.management.MBeanParameterInfo; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * List of all Operations for a MBean. - * - * @author Michel-Ange ANTON - */ - -public final class ListMBeanOperationsAction extends ListMBeanDetailsAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - try { - // Save current action - setAction(ACTION_OPERATIONS); - // Parameter - String sSelect = p_Request.getParameter("select"); - // get server name - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - // Create a request attribute with our collection of MBeans - ArrayList list = new ArrayList(); - - // Get all infos of a MBean - ObjectName on = new ObjectName(sSelect); - MbeanItem oItem = MbeanItem.build(on); - MBeanInfo oMBeanInfo = JonasManagementRepr.getMBeanInfo(on, serverName); - // Get attributes infos - MBeanOperationInfo[] aoMBeanOperationInfo = oMBeanInfo.getOperations(); - if (aoMBeanOperationInfo.length > 0) { - // Loop to append each attribute node - for (int i = 0; i < aoMBeanOperationInfo.length; i++) { - list.add(new ViewMBeanOperations(aoMBeanOperationInfo[i])); - } - // Sort - Collections.sort(list, new MBeanOperationsByName()); - } - // Set the beans - p_Request.setAttribute("MBean", oItem); - p_Request.setAttribute("MBeanOperations", list); - // Active and save filtering display if not exists - MbeanFilteringForm oForm = (MbeanFilteringForm) m_Session.getAttribute( - "mbeanFilteringForm"); - if (oForm == null) { - oForm = new MbeanFilteringForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("mbeanFilteringForm", oForm); - } - oForm.setSelectedName(sSelect); - - // Force the node selected in tree when the direct is used (MBeans list) - StringBuffer sbBranch = new StringBuffer("domain*mbeans"); - sbBranch.append(WhereAreYou.NODE_SEPARATOR); - sbBranch.append(sSelect); - m_WhereAreYou.selectNameNode(sbBranch.toString(), true); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List MBean Operations"); - } - -// --------------------------------------------------------- Inner Classes - - public class ViewMBeanOperations { - private String name; - private String returnType; - private String impact; - private String parameters; - private String description; - - public ViewMBeanOperations() { - } - - public ViewMBeanOperations(MBeanOperationInfo po_Ope) { - setName(po_Ope.getName()); - setReturnType(po_Ope.getReturnType()); - setDescription(po_Ope.getDescription()); - // Impact - switch (po_Ope.getImpact()) { - case MBeanOperationInfo.ACTION: - setImpact("Action"); - break; - case MBeanOperationInfo.ACTION_INFO: - setImpact("Action info"); - break; - case MBeanOperationInfo.INFO: - setImpact("Info"); - break; - default: - setImpact("Unknown"); - } - // Parameters - StringBuffer sb = new StringBuffer(); - MBeanParameterInfo[] oParams = po_Ope.getSignature(); - for (int i = 0; i < oParams.length; i++) { - sb.append(oParams[i].getType()); - sb.append(" "); - sb.append(oParams[i].getName()); - if (i < (oParams.length - 1)) { - sb.append(", "); - } - } - setParameters(sb.toString()); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getReturnType() { - return returnType; - } - - public void setReturnType(String returnType) { - this.returnType = returnType; - } - - public String getImpact() { - return impact; - } - - public void setImpact(String impact) { - this.impact = impact; - } - - public String getParameters() { - return parameters; - } - - public void setParameters(String parameters) { - this.parameters = parameters; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - } - - public class MBeanOperationsByName implements Comparator { - - public int compare(Object p_O1, Object p_O2) { - ViewMBeanOperations o1 = (ViewMBeanOperations) p_O1; - ViewMBeanOperations o2 = (ViewMBeanOperations) p_O2; - return o1.getName().compareToIgnoreCase(o2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof ViewMBeanOperations) { - return true; - } - return false; - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanPropertiesAction.java deleted file mode 100644 index eec9ae4011..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeanPropertiesAction.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all Infos for a MBeans. - * - * @author Michel-Ange ANTON - */ - -public final class ListMBeanPropertiesAction extends ListMBeanDetailsAction { - -// --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - try { - // Save current action - setAction(ACTION_PROPERTIES); - // Parameter - String sSelect = p_Request.getParameter("select"); - - // Create a request attribute with our collection of MBeans - ArrayList list = new ArrayList(); - // Get all infos of a MBean - ObjectName on = new ObjectName(sSelect); - MbeanItem oItem = MbeanItem.build(on); - - // Force the node selected in tree when the direct is used (MBeans list) - StringBuffer sbBranch = new StringBuffer("domain*mbeans"); - sbBranch.append(WhereAreYou.NODE_SEPARATOR); - sbBranch.append(sSelect); - m_WhereAreYou.selectNameNode(sbBranch.toString(), true); - - // Loop for all properties - String sKey; - String sValue; - Iterator it = on.getKeyPropertyList().keySet().iterator(); - while (it.hasNext()) { - sKey = (String) it.next(); - sValue = on.getKeyProperty(sKey); - list.add(new ViewMBeanProperties(sKey, sValue)); - } - // Set the beans - p_Request.setAttribute("MBean", oItem); - p_Request.setAttribute("MBeanProperties", list); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List MBean Properties"); - } - -// --------------------------------------------------------- Inner Classes - - public class ViewMBeanProperties { - private String key; - private String value; - - public ViewMBeanProperties() { - - } - - public ViewMBeanProperties(String ps_Key, String ps_Value) { - setKey(ps_Key); - setValue(ps_Value); - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeansAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeansAction.java deleted file mode 100644 index b7687f68b9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListMBeansAction.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all MBeans. - * - * @author Michel-Ange ANTON - */ - -public final class ListMBeansAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER), true); - - try { - MbeanItem oItem; - ArrayList list = new ArrayList(); - Iterator it = JonasAdminJmx.getListMbean(null, serverName).iterator(); - while (it.hasNext()) { - oItem = MbeanItem.build((ObjectName) it.next()); - list.add(oItem); - } - Collections.sort(list, new BeanComparator(new String[] { - "domain", "textFamily", "objectName"})); - p_Request.setAttribute("MBeans", list); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List MBeans"); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListOwnerMBeansAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListOwnerMBeansAction.java deleted file mode 100644 index 52099d526e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListOwnerMBeansAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all MBeans. - * - * @author Michel-Ange ANTON - */ - -public final class ListOwnerMBeansAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "owner", true); - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - try { - ArrayList list = new ArrayList(); - ArrayList[] als = JonasAdminJmx.getFamiliesMbeansLists(serverName); - Collections.sort(als[MbeanItem.FAMILY_OWNER], new BeanComparator(new String[] { - "domain", "type", "objectName"})); - p_Request.setAttribute("OwnerMBeans", als[MbeanItem.FAMILY_OWNER]); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List OwnerMBeans"); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListUnknownMBeansAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListUnknownMBeansAction.java deleted file mode 100644 index f4bd38c0cd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/ListUnknownMBeansAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.MbeanItem; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * List of all MBeans. - * - * @author Michel-Ange ANTON - */ - -public final class ListUnknownMBeansAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR - + "unknown", true); - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - try { - ArrayList list = new ArrayList(); - ArrayList[] als = JonasAdminJmx.getFamiliesMbeansLists(serverName); - Collections.sort(als[MbeanItem.FAMILY_UNKNOWN], new BeanComparator(new String[] { - "domain", "objectName"})); - p_Request.setAttribute("UnknownMBeans", als[MbeanItem.FAMILY_UNKNOWN]); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the corresponding display page - return p_Mapping.findForward("List UnknownMBeans"); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/MbeanFilteringForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/MbeanFilteringForm.java deleted file mode 100644 index bab36a619d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/mbean/MbeanFilteringForm.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.mbean; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class MbeanFilteringForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private boolean description = false; - private boolean value = false; - private String periodRow; - private String selectedName; - private String forward; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - description = false; - value = false; - periodRow = "2"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return ActionErrors instance - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public boolean isDescription() { - return description; - } - - public void setDescription(boolean description) { - this.description = description; - if (isDescription() == false) { - periodRow = "2"; - } - else { - periodRow = "1"; - } - } - - public boolean isValue() { - return value; - } - - public void setValue(boolean value) { - this.value = value; - } - - public String getPeriodRow() { - return periodRow; - } - public String getSelectedName() { - return selectedName; - } - public void setSelectedName(String selectedName) { - this.selectedName = selectedName; - } - public String getForward() { - return forward; - } - public void setForward(String forward) { - this.forward = forward; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyCmiClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyCmiClusterAction.java deleted file mode 100644 index 3b295945b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyCmiClusterAction.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.cmi.CmiClusterForm; - -/** - * Apply modifications of a CmiCluster. - * @author Adriana.Danes@bull.net - */ -public class ApplyCmiClusterAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, - final HttpServletRequest request, final HttpServletResponse response) - throws IOException, ServletException { - // Form used - CmiClusterForm oForm = (CmiClusterForm) form; - // CmiClustrer type - String clusterType = "CmiCluster"; - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String clusterName = oForm.getName(); - int delayToRefresh = oForm.getDelayToRefresh(); - // Object name used - ObjectName cmiClusterOn = JonasObjectName.cluster(domainName, clusterName, clusterType); - - JonasManagementRepr.setAttribute(cmiClusterOn, "DelayToRefresh", new Integer(delayToRefresh), currentJonasServerName); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - - // Forward to action - return (mapping.findForward("ActionCmiClusterInfo")); - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMemoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMemoryAction.java deleted file mode 100644 index 85e603974f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMemoryAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange Anton - */ - -public class ApplyMemoryAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - MemoryForm oForm = (MemoryForm) p_Form; - try { - // Object name used - ObjectName oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - // Apply - setIntegerAttribute(oObjectName, "sizeTableMeasures", oForm.getNumberOfMeasures()); - setIntegerAttribute(oObjectName, "range", oForm.getRange()); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Memory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMonitoringAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMonitoringAction.java deleted file mode 100644 index 1ab2adedc0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyMonitoringAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class ApplyMonitoringAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - MonitoringForm oForm = (MonitoringForm) p_Form; - // Object name used - ObjectName oObjectName = null; - try { - oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - // Apply - setBooleanAttribute(oObjectName, "activated", oForm.isActivated()); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Monitoring")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyStackDumpAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyStackDumpAction.java deleted file mode 100644 index c6a8b726e8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ApplyStackDumpAction.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$id - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - /** - * - */ - - public class ApplyStackDumpAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - /** - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - StackDumpForm oForm = (StackDumpForm) p_Form; - - // Forward to the jsp. - return (p_Mapping.findForward("StackDump")); - } - } - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/BaseClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/BaseClusterForm.java deleted file mode 100644 index aae927b855..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/BaseClusterForm.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class BaseClusterForm extends ActionForm { - - /** - * cluster name - */ - private String name = null; - - /** - * cluster state - */ - private String state = null; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ClusterdAttribute.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ClusterdAttribute.java deleted file mode 100644 index 299afe3b92..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/ClusterdAttribute.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * Needed to have an attribute class especially for memory values. - * For the conversion unit should change, it's necessary to set the correct one - * and its corresponding value. - * - * The unit field will be null for attribute that don't have unit. - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.Serializable; - -/** - * @author eyindanga - * - */ -public class ClusterdAttribute implements Serializable { - /** - * - */ - private static final long serialVersionUID = 1L; - String unit = null; - String name = null; - Long value; - public ClusterdAttribute() { - //do nothing - } - - public ClusterdAttribute(final String name, final Long value, final String unit) { - this.unit = unit; - this.name = name; - this.value = value; - } - /** - * @return the name - */ - public String getName() { - return name; - } - /** - * @param name the name to set - */ - public void setName(final String name) { - this.name = name; - } - /** - * @return the unit - */ - public String getUnit() { - return unit; - } - /** - * @param unit the unit to set - */ - public void setUnit(final String unit) { - this.unit = unit; - } - /** - * @return the value - */ - public Long getValue() { - return value; - } - /** - * @param value the value to set - */ - public void setValue(final Long value) { - this.value = value; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiClusterAction.java deleted file mode 100644 index 55fabf28b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiClusterAction.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.cmi.CmiClusterForm; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * CmiCluster monitoring action. - * @author Adriana.Danes@bull.net - */ -public class CmiClusterAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, - final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, - ServletException { - - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Get cluster name from the 'clust' parameter - CmiClusterForm oForm = (CmiClusterForm) form; - String name = request.getParameter("clust"); - if (name == null) { - if (oForm.getName() != null) { - name = oForm.getName(); - } else { - addGlobalError(new Exception("CmiClusterAction: clust parameter is null.")); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - } - - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, "CmiCluster"); - oForm.setState(getStringAttribute(on, "State")); - oForm.setMcastAddr(getStringAttribute(on, "McastAddr")); - oForm.setMcastPort(getIntegerAttribute(on, "McastPort")); - oForm.setProtocol(getStringAttribute(on, "Protocol")); - oForm.setDelayToRefresh(getIntegerAttribute(on, "DelayToRefresh")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (mapping.findForward("CmiCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberAction.java deleted file mode 100644 index 274feb9905..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberAction.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class CmiMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get member name from the 'member' parameter and cluster name from the 'clust' parameter - String name = p_Request.getParameter("member"); - if (name == null) { - addGlobalError(new Exception("CmiMemberAction: member parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - String cluster = p_Request.getParameter("clust"); - if (cluster == null) { - addGlobalError(new Exception("CmiClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Form used - CmiMemberForm oForm = (CmiMemberForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.clusterMember(domainName, name, "CmiCluster", cluster); - oForm.setState(getStringAttribute(on, "State")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("CmiMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberForm.java deleted file mode 100644 index 6eb6c47d6d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/CmiMemberForm.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class CmiMemberForm extends ActionForm { - /** - * The member's state - */ - private String state = null; - /** - * The member's name - */ - private String name = null; - public String getState() { - return state; - } - public void setState(String state) { - this.state = state; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterAction.java deleted file mode 100644 index 938b05b995..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterAction.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Hashtable; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -/** - * @author eyindanga - * - */ -public class DaemonProxyClusterAction extends JonasBaseAction { - - - - @Override - @SuppressWarnings("unchecked") - public ActionForward executeAction(final ActionMapping p_Mapping, - final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, - ServletException { - String isNotMonitoringStr=null; - String sDomainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getAdminJonasServerName(); - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) p_Form; - String name=null; - try { - - //we may come from a - isNotMonitoringStr = p_Request.getParameter("isNotMonitoring"); - if(isNotMonitoringStr == null) { - isNotMonitoringStr = (String) p_Request.getAttribute("isNotMonitoring"); - } - name = (String) p_Request.getAttribute("node"); - if(name==null) { - //that means the request has been forwarded by another - //and the current cluster daemon name attribute has already been set - name = m_WhereAreYou.getCurrentClusterDaemonName(); - } - if (name == null) { - //requested by using the parameter attribute - name = p_Request.getParameter("node"); - } - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, name); - m_WhereAreYou.setCurrentClusterDaemon(on); - m_WhereAreYou.setCurrentClusterDaemonName(name); - //the array list to contain the server list - ArrayList al = null; - //are all the servers already started ? - boolean allStarted = true; - //let know if no server is running - boolean noneStarted = true; - oForm.setName((String) JonasManagementRepr.getAttribute(on, - "Name", serverName)); - oForm.setState((String) JonasManagementRepr.getAttribute(on, - "State", serverName)); - oForm.setConServer((ArrayList) JonasManagementRepr.getAttribute(on, - "ControlledServersNames", serverName)); - oForm.setJmxUrl((String) JonasManagementRepr.getAttribute(on, - "ConnectionUrl", serverName)); - ArrayList srvList=oForm.getConServer(); - - oForm.setRunTimeSpecVendor((String) JonasManagementRepr.getAttribute(on, - "RunTimeSpecVendor", serverName)); - oForm.setRunTimeSpecVersion((String) JonasManagementRepr.getAttribute(on, - "RunTimeSpecVersion", serverName)); - oForm.setRunTimeVmName((String) JonasManagementRepr.getAttribute(on, - "RunTimeVmName", serverName)); - oForm.setRunTimeVmVendor((String) JonasManagementRepr.getAttribute(on, - "RunTimeVmVendor", serverName)); - oForm.setRunTimeVmVersion((String) JonasManagementRepr.getAttribute(on, - "RunTimeVmVersion", serverName)); - oForm.setOperatingSystemAvailableProcessors((String) JonasManagementRepr.getAttribute(on, - "OperatingSystemAvailableProcessors", serverName)); - oForm.setOperatingSystemName((String) JonasManagementRepr.getAttribute(on, - "OperatingSystemName", serverName)); - oForm.setOperatingSystemVersion((String) JonasManagementRepr.getAttribute(on, - "OperatingSystemVersion", serverName)); - oForm.setOperatingSystemArch((String) JonasManagementRepr.getAttribute(on, - "OperatingSystemArch", serverName)); - //getting dynamic remote host monitoring infos - Hashtable dynAttr = (Hashtable) JonasManagementRepr.invoke(on, "dynamicRemoteHostInfos", null, null, serverName); - - if (srvList == null || dynAttr == null) { - throw new Throwable("Can't get management information for cluster daemon " + name + ". Please check the domain configuration."); - } - - buildFormRemoteInfos(dynAttr, oForm); - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - al = new ArrayList(); - //are all the servers already started ? - allStarted = true; - //let know if no server is running - noneStarted = true; -// getting requested cluster daemon Administrated Jonas servers... - for (Iterator it = dm.getServerList().iterator(); it.hasNext();) { - ServerProxy proxy = (ServerProxy) it.next(); - if (srvList.contains(proxy.getName())) { - //if the server is in the clusterd.xml but not in the domain.xml - if (m_WhereAreYou.isSrvRemovedFromClusterd(name, proxy.getName())) { - //the server is no more affected to current clusterd - proxy.setClusterdaemon(null); - - }else { - //the server is in clusterd.xml - if (proxy.getClusterDaemonName() == null) { - //the server is not in domain.xml file - proxy.setClusterdaemon(dm.findClusterDaemonProxy(name)); - } - - } - - } - if(proxy.getClusterDaemonName()!=null) { - - if(proxy.getClusterDaemonName().equals(name)) { - ObjectName myOn = ObjectName.getInstance(proxy.getJ2eeObjectName()); - al.add(new ServerItem(myOn, proxy.getState(), proxy.getClusterDaemonName(),srvList.contains(proxy.getName()))); - //no server is started we want to disable the startAll operation in the jsp - if (noneStarted) { - noneStarted=!proxy.getState().equals("RUNNING"); - } - allStarted=(allStarted && proxy.getState().equals("RUNNING")); - } - } - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - //if a problem has happened while getting jmxUrl then : - //forward the response to with default values - p_Request.setAttribute("listServers", al); - p_Request.setAttribute("allStarted", allStarted); - p_Request.setAttribute("noneStarted", noneStarted); - p_Request.setAttribute("isNotMonitoring", isNotMonitoringStr); - m_Session.setAttribute("isNotMonitoring", isNotMonitoringStr); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("DaemonProxyCluster")); - } - - private void buildFormRemoteInfos(final Hashtable myHash, final DaemonProxyClusterForm oform) throws Exception { -// Allocate memory to the Form objects that will contain the dynamic infos - initDynFormObjects(oform); - ClusterdAttribute attr = null; - for (String str : myHash.keySet()) { - Long val = new Long(myHash.get(str)); - String title = fromKey2Title(str); - //converting the key into a title(word separated by spaces) - attr = new ClusterdAttribute(title, val, null); - if (str.contains("mory")&&(str.contains("Vm"))) { - //it's a memory attribute - oform.vmDynMemory.add(convertAttribValueFromByte(attr)); - } else if (str.contains("hread")){ -// it's a threading attribute - oform.dynThread.add(attr); - } else if (str.contains("oad")) { -// it's a loading attribute - oform.dynLoading.add(attr); - }else if (str.contains("mory")) { -// OS Dynamic memory attribute - oform.osDynMemory.add(convertAttribValueFromByte(attr)); - }else { -// Other Operating system(OS) attribute - oform.dynOperatingSystem.add(attr); - } - - - } - - } - - /** - * Convert a string representing a hastable key into a title (words separated bys spaces) - * @param key the string key to convert - * @return key converted in title - */ - private String fromKey2Title(final String fkey) { - if (fkey == null) { - return "Key is null"; - } - String key = null; - try { - key = formatKey(fkey); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - String ret = new String(); - for (int i = 0; i < key.length(); i++) { - Character car = key.charAt(i); - if (i == 0) { -// upperCase for the first letter - ret = ret.concat(car.toString().toUpperCase()); - } else if (!Character.isLowerCase(car)) { -// beginning a new Word in the key - // so we add a space character - ret = ret.concat(" "); - ret = ret.concat(car.toString()); - } else { - ret = ret.concat(car.toString()); - } - - } - return ret; - } - - /** - * used to delete 2 last characters of a key. - * these characters were added on memory key to differenciate "VM" and "OS" - * Memory Attributes. - * @param key the key to format - * @return formatted key - * @throws Exception - */ - @SuppressWarnings("unused") - private String formatKey(final String key) throws Exception { - String myStr = null; - try { - myStr = key.substring(0, key.length()); - } catch (NullPointerException e) { - throw new Exception("String to Format is null"); - } - return myStr; - } - /** - * Allocate memory for the clusterd Form objects that will conatin - * dynamic infos for remote host of current cluterd - * @param oform The Cluster Daemon Form - */ - private void initDynFormObjects(final DaemonProxyClusterForm oform) { - if (oform.dynLoading == null) { - oform.dynLoading = new ArrayList(); - }else { - oform.dynLoading.clear(); - } - if (oform.vmDynMemory == null) { - oform.vmDynMemory = new ArrayList(); - }else { - oform.vmDynMemory.clear(); - } - if ( oform.dynOperatingSystem == null) { - oform.dynOperatingSystem = new ArrayList(); - }else { - oform.dynOperatingSystem.clear(); - } - if ( oform.dynThread == null) { - oform.dynThread = new ArrayList(); - }else { - oform.dynThread.clear(); - } - if (oform.osDynMemory == null) { - oform.osDynMemory = new ArrayList(); - }else { - oform.osDynMemory.clear(); - } - - - } - /** - * - * @param attr convert value fo this attribute - * @return a clusterd attribute with correct converted value - */ - private ClusterdAttribute convertAttribValueFromByte(final ClusterdAttribute attr)throws Exception{ - ClusterdAttribute attrib = null; - try { - attrib = new ClusterdAttribute(attr.name, null, null); - if (attr.value >= 1024) { - if (attr.value >= (1024 * 1024)) { - if (attr.value >= (1024 * 1024 * 1024)) { -// Giga -attrib.setValue(attr.value /(1024 * 1024 * 1024)); -attrib.setUnit("GB"); - }else { -// mega - attrib.setValue(attr.value /(1024 * 1024)); - attrib.setUnit("MB"); - } - - }else { - //Kb - attrib.setValue(attr.value /1024); - attrib.setUnit("KB"); - } - - } else { - //B - attrib.setValue(attr.value); - attrib.setUnit("B"); - } - - } - catch (final NullPointerException e) { - throw new Exception("The attribute cannot be null "+e); - } - return attrib; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterForm.java deleted file mode 100644 index 62951eecf5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyClusterForm.java +++ /dev/null @@ -1,331 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.struts.action.ActionForm; - -/** - * @author eyindanga - * - */ -public class DaemonProxyClusterForm extends ActionForm { - - /** - * - */ - private static final long serialVersionUID = 1L; - /** - * the cluster daemon's remote hostname - */ - private String hostName = "N/A"; - /** - * @uml.property name="state" - */ - private String state="STOPPED"; - /** - * @uml.property name="name" - */ - private String name="CD"; - /** - * @uml.property name="srvList" - */ - private ArrayList conServer=null; - /** - * The connector name. - */ - String connectorName=null; - /** - * The jmx url. - */ - String jmxUrl=null; - /** - * The connector protocol. - */ - String connectorProtocol=null; - //Management attributtes for remote host monitoring - //Runtime Mbean - String runTimeSpecVendor = null; - String runTimeSpecVersion = null; - String runTimeVmName = null; - String runTimeVmVendor = null; - String runTimeVmVersion = null; - //OperatingSystem mbean - String operatingSystemAvailableProcessors = null; - String operatingSystemName = null; - String operatingSystemVersion = null; - //dynamic remote host informations - String classLoadingLoadedClassCount = null; - String classLoadingUnloadedClassCount = null; - String threadingThreadCount = null; - String threadingTotalStartedThreadCount = null; - String operatingSystemArch = null; - //dynamic memroy attributes and values for the VM - public List vmDynMemory = null; - //for host remote memory infos - public List dynThread = null; -// for loading infos - public List dynLoading = null; -// for loading infos - public List dynOperatingSystem = null; - //dynamic memroy attributes and values for the OS - public List osDynMemory = null; - - - - - /** - * @param val - * @uml.property name="hostName" - */ - public void setHostName(final String val){ - this.hostName = val; - } - - public String getHostName(){ - return this.hostName; - } - - /** - * @return - * @uml.property name="state" - */ - public String getState() { - return state; - } - - /** - * @param state - * @uml.property name="state" - */ - public void setState(final String state) { - this.state = state; - } - - /** - * @return - * @uml.property name="name" - */ - public String getName() { - return name; - } - - /** - * @param name - * @uml.property name="name" - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return - * @uml.property name="srvList" - */ - public ArrayList getConServer() { - return conServer; - } - - /** - * @param srvList - * @uml.property name="srvList" - */ - public void setConServer(final ArrayList srvList) { - this.conServer = srvList; - } - - public String getConnectorName() { - return connectorName; - } - - public void setConnectorName(final String connectorName) { - this.connectorName = connectorName; - } - - public String getConnectorProtocol() { - return connectorProtocol; - } - - public void setConnectorProtocol(final String connectorProtocol) { - this.connectorProtocol = connectorProtocol; - } - - public String getJmxUrl() { - return jmxUrl; - } - - public void setJmxUrl(final String jmxurl) { - this.jmxUrl = jmxurl; - } - - public String getOperatingSystemAvailableProcessors() { - return operatingSystemAvailableProcessors; - } - - public void setOperatingSystemAvailableProcessors( - final String operatingSystemAvailableProcessors) { - this.operatingSystemAvailableProcessors = operatingSystemAvailableProcessors; - } - - public String getOperatingSystemName() { - return operatingSystemName; - } - - public void setOperatingSystemName(final String operatingSystemName) { - this.operatingSystemName = operatingSystemName; - } - - public String getOperatingSystemVersion() { - return operatingSystemVersion; - } - - public void setOperatingSystemVersion(final String operatingSystemVersion) { - this.operatingSystemVersion = operatingSystemVersion; - } - public String getOperatingSystemArch() { - return operatingSystemArch; - } - - public void setOperatingSystemArch(final String operatingSystemArch) { - this.operatingSystemArch = operatingSystemArch; - } - public String getRunTimeSpecVendor() { - return runTimeSpecVendor; - } - - public void setRunTimeSpecVendor(final String runTimeSpecVendor) { - this.runTimeSpecVendor = runTimeSpecVendor; - } - - public String getRunTimeSpecVersion() { - return runTimeSpecVersion; - } - - public void setRunTimeSpecVersion(final String runTimeSpecVersion) { - this.runTimeSpecVersion = runTimeSpecVersion; - } - - public String getRunTimeVmName() { - return runTimeVmName; - } - - public void setRunTimeVmName(final String runTimeVmName) { - this.runTimeVmName = runTimeVmName; - } - - public String getRunTimeVmVendor() { - return runTimeVmVendor; - } - - public void setRunTimeVmVendor(final String runTimeVmVendor) { - this.runTimeVmVendor = runTimeVmVendor; - } - - public String getRunTimeVmVersion() { - return runTimeVmVersion; - } - - public void setRunTimeVmVersion(final String runTimeVmVersion) { - this.runTimeVmVersion = runTimeVmVersion; - } - - public String getClassLoadingLoadedClassCount() { - return classLoadingLoadedClassCount; - } - - public void setClassLoadingLoadedClassCount(final String classLoadingLoadedClassCount) { - this.classLoadingLoadedClassCount = classLoadingLoadedClassCount; - } - - public String getClassLoadingUnloadedClassCount() { - return classLoadingUnloadedClassCount; - } - - public void setClassLoadingUnloadedClassCount( - final String classLoadingUnloadedClassCount) { - this.classLoadingUnloadedClassCount = classLoadingUnloadedClassCount; - } - - public String getThreadingThreadCount() { - return threadingThreadCount; - } - - public void setThreadingThreadCount(final String threadingThreadCount) { - this.threadingThreadCount = threadingThreadCount; - } - - public String getThreadingTotalStartedThreadCount() { - return threadingTotalStartedThreadCount; - } - - public void setThreadingTotalStartedThreadCount( - final String threadingTotalStartedThreadCount) { - this.threadingTotalStartedThreadCount = threadingTotalStartedThreadCount; - } - - public List getDynLoading() { - return dynLoading; - } - - public void setDynLoading(final List dynLoading) { - this.dynLoading = dynLoading; - } - - public List getDynOperatingSystem() { - return dynOperatingSystem; - } - - public void setDynOperatingSystem(final List dynOperatingSystem) { - this.dynOperatingSystem = dynOperatingSystem; - } - - public List getDynThread() { - return dynThread; - } - - public void setDynThread(final List dynThread) { - this.dynThread = dynThread; - } - - public List getOsDynMemory() { - return osDynMemory; - } - - public void setOsDynMemory(final List osDynMemory) { - this.osDynMemory = osDynMemory; - } - - public List getVmDynMemory() { - return vmDynMemory; - } - - public void setVmDynMemory(final List vmDynMemory) { - this.vmDynMemory = vmDynMemory; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberAction.java deleted file mode 100644 index f665dc5cdc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberAction.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class DaemonProxyMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - - CmiMemberForm oForm = (CmiMemberForm) p_Form; - try { - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("CmiMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberForm.java deleted file mode 100644 index c47be9d40e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DaemonProxyMemberForm.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class DaemonProxyMemberForm extends ActionForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DisplayNodeInfoAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DisplayNodeInfoAction.java deleted file mode 100644 index a4122fd7d0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/DisplayNodeInfoAction.java +++ /dev/null @@ -1,278 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * This action display all inormations on JOnAS server. - * @author eyindanga. - * - */ -public class DisplayNodeInfoAction extends JonasBaseAction { - - /* (non-Javadoc). - * @see org.ow2.jonas.webapp.jonasadmin.JonasBaseAction#executeAction(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) - */ - public ActionForward executeAction(final ActionMapping p_Mapping, - final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - String serverName = p_Request.getParameter("node"); - if (serverName == null) { - serverName = m_WhereAreYou.getCurrentJonasServerName(); - } - NodeInfoForm oForm = (NodeInfoForm) p_Form; - try { - - /* - * Server related info - */ - // oForm.setServerName(p_Request.getParameter("node")); - oForm.setServerName(serverName); - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - ServerProxy srvProxy = dm.findServerProxy(serverName); - try { - oForm.setState(srvProxy.getState()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setState("Unavailable"); - } - try { - oForm.setHostName(srvProxy.getHostName()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setHostName("Unavailable"); - } - try { - oForm.setAllThreadsCount(srvProxy.getAllThreadsCount()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setAllThreadsCount(-1); - } - try { - oForm.setJavaVersion(srvProxy.getJavaVersion()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setJavaVersion("Unavailable"); - } - try { - oForm.setJavaVendor(srvProxy.getJavaVendor()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setJavaVendor("Unavailable"); - } - try { - oForm.setCurrentTotalMemory(srvProxy.getCurrentTotalMemory().intValue()); - } catch (RuntimeException e) { - oForm.setCurrentTotalMemory(-1); - } - try { - oForm.setCurrentUsedMemory(srvProxy.getCurrentUsedMemory().intValue()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setCurrentUsedMemory(-1); - } - try { - oForm.setJOnASVersion(srvProxy.getJOnASVersion()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setJOnASVersion(null); - } - try { - oForm.setProtocols(srvProxy.getProtocols()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setProtocols(null); - } - try { - oForm.setConnectionUrl(srvProxy.getConnectionUrl()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setConnectionUrl(null); - } - /* - * JDK5 - */ - - /* - * Tomcat - */ - try { - oForm.setTomcat(srvProxy.getTomcat()); - if (oForm.getTomcat()) { - oForm.setMaxThreadsByConnectorTomcat(srvProxy.getMaxThreadsByConnectorTomcat()); - oForm.setCurrentThreadCountByConnectorTomcat(srvProxy.getCurrentThreadCountByConnectorTomcat()); - oForm.setCurrentThreadBusyByConnectorTomcat(srvProxy.getCurrentThreadBusyByConnectorTomcat()); - oForm.setBytesReceivedByConnectorTomcat(srvProxy.getBytesReceivedByConnectorTomcat()); - oForm.setBytesSentByConnectorTomcat(srvProxy.getBytesSentByConnectorTomcat()); - oForm.setErrorCountByConnectorTomcat(srvProxy.getErrorCountByConnectorTomcat()); - oForm.setProcessingTimeByConnectorTomcat(srvProxy.getProcessingTimeByConnectorTomcat()); - oForm.setRequestCountByConnectorTomcat(srvProxy.getRequestCountByConnectorTomcat()); - } - } catch (RuntimeException e) { - // Attibute missing - oForm.setMaxThreadsByConnectorTomcat(-1); - oForm.setCurrentThreadCountByConnectorTomcat(-1); - oForm.setCurrentThreadBusyByConnectorTomcat(-1); - oForm.setBytesReceivedByConnectorTomcat(-1); - oForm.setBytesSentByConnectorTomcat(-1); - oForm.setErrorCountByConnectorTomcat(-1); - oForm.setProcessingTimeByConnectorTomcat(-1); - oForm.setRequestCountByConnectorTomcat(-1); - } - /* - * Tx - */ - try { - oForm.setTransaction(srvProxy.getTransaction()); - if (oForm.getTransaction()) { - oForm.setTotalBegunTransactions(srvProxy.getTotalBegunTransactions()); - oForm.setTotalCommittedTransactions(srvProxy.getTotalCommittedTransactions()); - oForm.setTotalCurrentTransactions(srvProxy.getTotalCurrentTransactions()); - oForm.setTotalExpiredTransactions(srvProxy.getTotalExpiredTransactions()); - oForm.setTotalRolledbackTransactions(srvProxy.getTotalRolledbackTransactions()); - } - } catch (RuntimeException e) { - // Attibute missing - oForm.setTotalBegunTransactions(-1); - oForm.setTotalCommittedTransactions(-1); - oForm.setTotalCurrentTransactions(-1); - oForm.setTotalExpiredTransactions(-1); - oForm.setTotalRolledbackTransactions(-1); - - } - /* - * Worker Pool - */ - try { - oForm.setWorkers(srvProxy.getWorkers()); - if (oForm.getWorkers()) { - oForm.setCurrentWorkerPoolSize(srvProxy.getCurrentWorkerPoolSize()); - oForm.setMaxWorkerPoolSize(srvProxy.getMaxWorkerPoolSize()); - oForm.setMinWorkerPoolSize(srvProxy.getMinWorkerPoolSize()); - } - } catch (RuntimeException e) { - // Attibute missing - oForm.setCurrentWorkerPoolSize(-1); - oForm.setMaxWorkerPoolSize(-1); - oForm.setMinWorkerPoolSize(-1); - } - /* - * JCA - */ - try { - oForm.setJcaConnection(srvProxy.getJcaConnection()); - if (oForm.getJcaConnection()) { - oForm.setConnectionFailuresJCAConnection(srvProxy.getConnectionFailuresJCAConnection()); - oForm.setConnectionLeaksJCAConnection(srvProxy.getConnectionLeaksJCAConnection()); - oForm.setCurrentBusyJCAConnection(srvProxy.getCurrentBusyJCAConnection()); - oForm.setCurrentOpenedJCAConnection(srvProxy.getCurrentOpenedJCAConnection()); - oForm.setRejectedOpenJCAConnection(srvProxy.getRejectedOpenJCAConnection()); - oForm.setServedOpenJCAConnection(srvProxy.getServedOpenJCAConnection()); - oForm.setWaiterCountJCAConnection(srvProxy.getWaiterCountJCAConnection()); - oForm.setWaitingTimeJCAConnection(srvProxy.getWaitingTimeJCAConnection()); - } - } catch (Exception e) { - // Attibute missing - oForm.setConnectionFailuresJCAConnection(-1); - oForm.setConnectionLeaksJCAConnection(-1); - oForm.setCurrentBusyJCAConnection(-1); - oForm.setCurrentOpenedJCAConnection(-1); - oForm.setRejectedOpenJCAConnection(-1); - oForm.setServedOpenJCAConnection(-1); - oForm.setWaiterCountJCAConnection(-1); - oForm.setWaitingTimeJCAConnection(-1); - } - /* - * JDBC - */ - try { - oForm.setJdbcDatasource(srvProxy.getJdbcDatasource()); - if (oForm.getJdbcDatasource()) { - oForm.setConnectionFailuresJDBCDatasource(srvProxy.getConnectionFailuresJDBCResource()); - oForm.setConnectionLeaksJDBCDatasource(srvProxy.getConnectionLeaksJDBCResource()); - oForm.setCurrentBusyJDBCDatasource(srvProxy.getCurrentBusyJDBCResource()); - oForm.setCurrentOpenedJDBCDatasource(srvProxy.getCurrentOpenedJDBCResource()); - oForm.setRejectedOpenJDBCDatasource(srvProxy.getRejectedOpenJDBCResource()); - oForm.setServedOpenJDBCDatasource(srvProxy.getServedOpenJDBCResource()); - oForm.setWaiterCountJDBCDatasource(srvProxy.getWaiterCountJDBCResource()); - oForm.setWaitingTimeJDBCDatasource(srvProxy.getWaitingTimeJDBCResource()); - } - } catch (RuntimeException e) { - // Attibute missing - oForm.setConnectionFailuresJDBCDatasource(-1); - oForm.setConnectionLeaksJDBCDatasource(-1); - oForm.setCurrentBusyJDBCDatasource(-1); - oForm.setCurrentOpenedJDBCDatasource(-1); - oForm.setRejectedOpenJDBCDatasource(-1); - oForm.setServedOpenJDBCDatasource(-1); - oForm.setWaiterCountJDBCDatasource(-1); - oForm.setWaitingTimeJDBCDatasource(-1); - } - /* - * JMS - */ - try { - oForm.setJmsJoram(srvProxy.getJmsJoram()); - if (oForm.getJmsJoram()) { - oForm.setJmsQueuesNbMsgsDeliverSinceCreation(srvProxy.getJmsQueuesNbMsgsDeliverSinceCreation()); - oForm.setJmsQueuesNbMsgsReceiveSinceCreation(srvProxy.getJmsQueuesNbMsgsReceiveSinceCreation()); - oForm.setJmsQueuesNbMsgsSendToDMQSinceCreation(srvProxy.getJmsQueuesNbMsgsSendToDMQSinceCreation()); - - oForm.setJmsTopicsNbMsgsDeliverSinceCreation(srvProxy.getJmsTopicsNbMsgsDeliverSinceCreation()); - oForm.setJmsTopicsNbMsgsReceiveSinceCreation(srvProxy.getJmsTopicsNbMsgsReceiveSinceCreation()); - oForm.setJmsTopicsNbMsgsSendToDMQSinceCreation(srvProxy.getJmsTopicsNbMsgsSendToDMQSinceCreation()); - oForm.setJmsNbMsgsSendToDMQSinceCreation(oForm.getJmsQueuesNbMsgsSendToDMQSinceCreation()+ oForm.getJmsTopicsNbMsgsSendToDMQSinceCreation()); - } - } catch (RuntimeException e) { - // Attibute missing - oForm.setJmsQueuesNbMsgsDeliverSinceCreation(-1); - oForm.setJmsQueuesNbMsgsReceiveSinceCreation(-1); - oForm.setJmsQueuesNbMsgsSendToDMQSinceCreation(-1); - - oForm.setJmsTopicsNbMsgsDeliverSinceCreation(-1); - oForm.setJmsTopicsNbMsgsReceiveSinceCreation(-1); - oForm.setJmsTopicsNbMsgsSendToDMQSinceCreation(-1); - oForm.setJmsNbMsgsSendToDMQSinceCreation(-1); - } - /* - * EJB - */ - try { - oForm.setCurrentNumberOfEJB(srvProxy.getCurrentNumberOfEJB()); - oForm.setCurrentNumberOfEntity(srvProxy.getCurrentNumberOfEntityBean()); - oForm.setCurrentNumberOfMDB(srvProxy.getCurrentNumberOfMDB()); - oForm.setCurrentNumberOfSBF(srvProxy.getCurrentNumberOfSBF()); - oForm.setCurrentNumberOfSBL(srvProxy.getCurrentNumberOfSBL()); - } catch (RuntimeException e) { - // Attibute missing - oForm.setCurrentNumberOfEJB(-1); - oForm.setCurrentNumberOfEntity(-1); - oForm.setCurrentNumberOfMDB(-1); - oForm.setCurrentNumberOfSBF(-1); - oForm.setCurrentNumberOfSBL(-1); - } - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("DisplayNode")); - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMemoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMemoryAction.java deleted file mode 100644 index 1357277011..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMemoryAction.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - - -/** - * @author Michel-Ange Anton - */ - -public class EditMemoryAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - private int sizeTableMeasuresVmMemory; - private int rangeVmMemory; - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Form used - MemoryForm oForm = (MemoryForm) p_Form; - try { - // Object name used - String cdName = p_Request.getParameter("clusterdName"); - if (cdName != null) { - //edit cluster daemon memory -// Object name used - sizeTableMeasuresVmMemory = m_WhereAreYou.getClusterdGraphAttribute(cdName, "sizeTableMeasuresVmMemory"); - rangeVmMemory = m_WhereAreYou.getClusterdGraphAttribute(cdName, "rangeVmMemory"); - if (sizeTableMeasuresVmMemory == -1) { - //session attribute has never been set - sizeTableMeasuresVmMemory = GraphUtils.DEF_SIZE_TABLE_MEASURES; - rangeVmMemory = GraphUtils.DEF_RANGE; - m_WhereAreYou.setClusterdGraphAttribute(cdName, "sizeTableMeasuresVmMemory", sizeTableMeasuresVmMemory); - m_WhereAreYou.setClusterdGraphAttribute(cdName, "rangeVmMemory", rangeVmMemory); - } - oForm.setNumberOfMeasures(sizeTableMeasuresVmMemory); - oForm.setRange(rangeVmMemory); - oForm.setOwnerName(cdName); - oForm.refreshGraphic(); - return (p_Mapping.findForward("ClusterdVmMemory")); - - } - ObjectName oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName() - , m_WhereAreYou.getCurrentJonasServerName()); - oForm.setNumberOfMeasures(getIntegerAttribute(oObjectName, "sizeTableMeasures")); - oForm.setRange(getIntegerAttribute(oObjectName, "range")); - oForm.setOwnerName(m_WhereAreYou.getCurrentJonasServerName()); - oForm.refreshGraphic(); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMonitoringAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMonitoringAction.java deleted file mode 100644 index e79cb80b24..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditMonitoringAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange Anton - */ - -public class EditMonitoringAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - // Form used - MonitoringForm oForm = (MonitoringForm) p_Form; - // Object name used - ObjectName oObjectName = null; - ObjectName o2 = null; - try { - oObjectName = J2eeObjectName.J2EEServer(m_WhereAreYou.getCurrentDomainName(), m_WhereAreYou - .getCurrentJonasServerName()); - oForm.setActivated(getBooleanAttribute(oObjectName, "activated")); - o2 = ObjectName.getInstance(((String[]) JonasManagementRepr.getAttribute(oObjectName , "javaVMs", serverName))[0]); - oForm.setAllThreadsCount(getIntegerAttribute(o2, "allThreadsCount")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Monitoring")); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditStackDumpAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditStackDumpAction.java deleted file mode 100644 index 361421ab48..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EditStackDumpAction.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$id - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -public class EditStackDumpAction extends JonasBaseAction { - - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - // Form used - StackDumpForm oForm = (StackDumpForm) p_Form; - - // Forward to the jsp. - return (p_Mapping.findForward("StackDump")); - } - } diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterAction.java deleted file mode 100644 index e64931a2a1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterAction.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class EjbHaClusterAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get cluster name from the 'clust' parameter - String name = p_Request.getParameter("clust"); - if (name == null) { - addGlobalError(new Exception("EjbHaClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - EjbHaClusterForm oForm = (EjbHaClusterForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, "EjbHaCluster"); - String state = getStringAttribute(on, "State"); - oForm.setState(state); - oForm.setMcastAddr(getStringAttribute(on, "McastAddr")); - oForm.setMcastPort(getIntegerAttribute(on, "McastPort")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("EjbHaCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterForm.java deleted file mode 100644 index fe3e547f67..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaClusterForm.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -public class EjbHaClusterForm extends BaseClusterForm { - - private String mcastAddr; - public String getMcastAddr() { - return mcastAddr; - } - public void setMcastAddr(String addr) { - mcastAddr = addr; - } - - private int mcastPort; - public int getMcastPort() { - return mcastPort; - } - public void setMcastPort(int port) { - mcastPort = port; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberAction.java deleted file mode 100644 index 78d8547ad3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberAction.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class EjbHaMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get member name from the 'member' parameter and cluster name from the 'clust' parameter - String name = p_Request.getParameter("member"); - if (name == null) { - addGlobalError(new Exception("EjbHaMemberAction: member parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - String cluster = p_Request.getParameter("clust"); - if (cluster == null) { - addGlobalError(new Exception("EjbHaClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Form used - EjbHaMemberForm oForm = (EjbHaMemberForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.clusterMember(domainName, name, "EjbHaCluster", cluster); - oForm.setState(getStringAttribute(on, "State")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("EjbHaMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberForm.java deleted file mode 100644 index 429d7b21be..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/EjbHaMemberForm.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class EjbHaMemberForm extends ActionForm { - - /** - * The member's state - */ - private String state = null; - public String getState() { - return state; - } - public void setState(String state) { - this.state = state; - } - - /** - * The member's name - */ - private String name = null; - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterAction.java deleted file mode 100644 index 54cd2fc171..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterAction.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Jk cluster monitoring action - * @author Adriana.Danes@bull.net - */ -public class JkClusterAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get cluster name from the 'clust' parameter - String name = p_Request.getParameter("clust"); - if (name == null) { - addGlobalError(new Exception("JkClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // cluster type - String type = "JkCluster"; - // Form used - JkClusterForm oForm = (JkClusterForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, type); - String state = getStringAttribute(on, "State"); - oForm.setState(state); - String[] workersList = getStringArrayAttribute(on, "BalancedWorkers"); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < workersList.length; i++) { - if (i != 0) { - buf.append(','); - } - buf.append(workersList[i]); - } - oForm.setWorkers(new String(buf)); - oForm.setStickySession(getBooleanAttribute(on, "StickySession")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JkCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterForm.java deleted file mode 100644 index 0a47b16fab..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkClusterForm.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - - -public class JkClusterForm extends BaseClusterForm { - - String workers; - public String getWorkers() { - return workers; - } - public void setWorkers(String workers) { - this.workers = workers; - } - - boolean stickySession; - public boolean isStickySession() { - return stickySession; - } - public void setStickySession(boolean stickySession) { - this.stickySession = stickySession; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberAction.java deleted file mode 100644 index f0de3eb878..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberAction.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class JkMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get member name from the 'member' parameter and cluster name from the 'clust' parameter - String name = p_Request.getParameter("member"); - if (name == null) { - addGlobalError(new Exception("JkMemberAction: member parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - String cluster = p_Request.getParameter("clust"); - if (cluster == null) { - addGlobalError(new Exception("JkClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Form used - JkMemberForm oForm = (JkMemberForm) p_Form; - oForm.setName(name); - // cluster type - String type = "JkCluster"; - try { - ObjectName on = JonasObjectName.clusterMember(domainName, name, type, cluster); - oForm.setHost(getStringAttribute(on, "Host")); - oForm.setState(getStringAttribute(on, "State")); - oForm.setLbfactor(getIntegerAttribute(on, "Lbfactor")); - oForm.setPort(getIntegerAttribute(on, "Port")); - oForm.setType(getStringAttribute(on, "Type")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JkMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberForm.java deleted file mode 100644 index 984555dd71..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JkMemberForm.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class JkMemberForm extends ActionForm { - /** - * The worker's name - */ - private String name = null; - /** - * The worker's host - */ - private String host = null; - /** - * The member's state - */ - private String state = null; - - /** - * The worker's port - */ - private int port; - - /** - * The worker's load balance factor - */ - private int lbFactor; - - /** - * worker type - */ - private String type; - - /** - * load balancing factor, as defined in workers.properties - */ - private int lbfactor; - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public int getLbfactor() { - return lbfactor; - } - - public void setLbfactor(int lbfactor) { - this.lbfactor = lbfactor; - } - - public int getLbFactor() { - return lbFactor; - } - - public void setLbFactor(int lbFactor) { - this.lbFactor = lbFactor; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterAction.java deleted file mode 100644 index 115325d417..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterAction.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Joram cluster monitoring action - * @author Adriana.Danes@bull.net - */ -public class JoramClusterAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Get cluster name from the 'clust' parameter - String name = p_Request.getParameter("clust"); - if (name == null) { - addGlobalError(new Exception("JoramClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // cluster type - String type = "JoramCluster"; - // Form used - JoramClusterForm oForm = (JoramClusterForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, type); - String state = (String) JonasManagementRepr.getAttribute(on, "State", serverName); - oForm.setState(state); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JoramCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterForm.java deleted file mode 100644 index 988fe90ca3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramClusterForm.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -public class JoramClusterForm extends BaseClusterForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberAction.java deleted file mode 100644 index 08d9dbc3b8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberAction.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class JoramMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - - JoramMemberForm oForm = (JoramMemberForm) p_Form; - try { - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("JoramMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberForm.java deleted file mode 100644 index 3e13eb5e5b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/JoramMemberForm.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class JoramMemberForm extends ActionForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterAction.java deleted file mode 100644 index 869fbb3fa4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterAction.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Ligical cluster monitoring action - * @author Adriana.Danes@bull.net - */ -public class LogicalClusterAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Get cluster name from the 'clust' parameter - String name = p_Request.getParameter("clust"); - if (name == null) { - addGlobalError(new Exception("LogicalClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // cluster type - String type = "LogicalCluster"; - // Form used - LogicalClusterForm oForm = (LogicalClusterForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, type); - String state = (String) JonasManagementRepr.getAttribute(on, "State", serverName); - oForm.setState(state); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("LogicalCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterForm.java deleted file mode 100644 index 0e09cb5482..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalClusterForm.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -public class LogicalClusterForm extends BaseClusterForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberAction.java deleted file mode 100644 index 4a9cb3957e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberAction.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class LogicalMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - - LogicalMemberForm oForm = (LogicalMemberForm) p_Form; - try { - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("LogicalMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberForm.java deleted file mode 100644 index 3bf74f913d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/LogicalMemberForm.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class LogicalMemberForm extends ActionForm { - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryForm.java deleted file mode 100644 index 889fc057fe..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryForm.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class MemoryForm extends ActionForm { - -// --------------------------------------------------------- Properties Variables - - /** - * - */ - private static final long serialVersionUID = 1L; - private int numberOfMeasures = 120; - private int range = 10; - private int widthGraphic; - private int heightGraphic; - private int timerGraphic; - String ownerName = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - numberOfMeasures = 120; - range = 10; - refreshGraphic(); - } - - public void refreshGraphic() { - widthGraphic = GraphUtils.getWidth(numberOfMeasures); - heightGraphic = GraphUtils.getHeight(); - timerGraphic = 1000 * (range + 2); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if (numberOfMeasures <= 1) { - oErrors.add("numberOfMeasures" - , new ActionMessage("error.monitoring.memory.numberOfMeasures")); - } - if (range < 10) { - oErrors.add("range", new ActionMessage("error.monitoring.memory.range")); - } - //System.out.println("oErrors.size() = "+oErrors.size()); - if (oErrors.size() == 0) { - //System.out.println("sizingGraphic"); - refreshGraphic(); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public int getNumberOfMeasures() { - return numberOfMeasures; - } - - public void setNumberOfMeasures(int numberOfMeasures) { - this.numberOfMeasures = numberOfMeasures; - } - - public int getRange() { - return range; - } - - public void setRange(int range) { - this.range = range; - } - - public int getWidthGraphic() { - return widthGraphic; - } - - public void setWidthGraphic(int widthGraphic) { - this.widthGraphic = widthGraphic; - } - - public int getHeightGraphic() { - return heightGraphic; - } - - public void setHeightGraphic(int heightGraphic) { - this.heightGraphic = heightGraphic; - } - - public int getTimerGraphic() { - return timerGraphic; - } - - public void setTimerGraphic(int timerGraphic) { - this.timerGraphic = timerGraphic; - } - - /** - * @return the ownerName - */ - public String getOwnerName() { - return ownerName; - } - - /** - * @param ownerName the ownerName to set - */ - public void setOwnerName(String ownerName) { - this.ownerName = ownerName; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryGraphServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryGraphServlet.java deleted file mode 100644 index 7fece6ff79..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MemoryGraphServlet.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -// servlet imports -import java.awt.Color; -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Adriana Danes - *
Contributor Michel-Ange Anton - */ -public class MemoryGraphServlet extends HttpServlet { - - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - - - private static final int HEIGHT = 180; - private static final int TOP_MARGIN = 35; - private static final int RIGHT_MARGIN = 80; - private static final int BOTTOM_MARGIN = 10; - private static final int LEFT_MARGIN = 70; - private static final int HORIZONTAL_SPACE = 30; - - private static final int Y_LENGTH = HEIGHT - TOP_MARGIN - BOTTOM_MARGIN; // the graph height - private static final int GAUGE_WIDTH = 10; - - private static final Color BG_COLOR = new Color(0x006699); - private static final Color FG_COLOR = Color.white; - private static final Color GRAPHICS_BG_COLOR = Color.lightGray; - private static final Color GRAPHICS_FG_COLOR = Color.darkGray; - private static final Color AXIS_COLOR = Color.white; - private static final Color TEXT_COLOR = Color.white; - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - throws IOException, ServletException { - - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - - // get the data to draw: - Long[] data = (Long[]) JonasManagementRepr.getAttribute(J2eeObjectName.J2EEServer(domainName, serverName), "tableMeasures", serverName); - int xLength = 2 * data.length; - int width = LEFT_MARGIN + xLength + HORIZONTAL_SPACE + GAUGE_WIDTH + RIGHT_MARGIN; - - BufferedImage img = new BufferedImage(width, HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); - - // fill the image background: - g.setColor(BG_COLOR); - g.fillRect(0, 0, width, HEIGHT); - - // firstly, the memory used history: - - // draw the chart area: - g.setColor(GRAPHICS_BG_COLOR); - g.fillRect(cartesianXToGraphicsX(0), cartesianYToGraphicsY(Y_LENGTH), xLength - 1, Y_LENGTH); - - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < data.length; i++) { - yMax = Math.max(yMax, data[i].longValue()); - - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - - // draw the range on the y axis: - } - for (int i = 1; i <= k; i++) { - int y = (new Long(i * Y_LENGTH / (k + 1))).intValue(); - g.setColor(FG_COLOR); - g.drawLine(cartesianXToGraphicsX( -3), cartesianYToGraphicsY(y) - , cartesianXToGraphicsX(xLength), cartesianYToGraphicsY(y)); - g.setColor(TEXT_COLOR); - g.drawString("" + (i * pow), cartesianXToGraphicsX( -18 - n * 6) - , cartesianYToGraphicsY(y - 5)); - } - - // draw the values: - g.setColor(GRAPHICS_FG_COLOR); - for (int i = 0; i < data.length; i++) { - int y = (new Long(data[i].longValue() * Y_LENGTH / ((k + 1) * pow))).intValue(); - g.drawLine(cartesianXToGraphicsX(2 * i), cartesianYToGraphicsY(0) - , cartesianXToGraphicsX(2 * i), cartesianYToGraphicsY(y)); - } - - g.setColor(TEXT_COLOR); - g.drawString("History of memory used", cartesianXToGraphicsX(0) - , cartesianYToGraphicsY(Y_LENGTH + 20)); - g.drawString("(Kbytes)", cartesianXToGraphicsX(0), cartesianYToGraphicsY(Y_LENGTH + 10)); - g.drawString("0", cartesianXToGraphicsX( -12), cartesianYToGraphicsY( -5)); - g.setColor(AXIS_COLOR); - g.drawLine(cartesianXToGraphicsX( -3), cartesianYToGraphicsY(0) - , cartesianXToGraphicsX(xLength), cartesianYToGraphicsY(0)); - g.drawLine(cartesianXToGraphicsX( -1), cartesianYToGraphicsY(0), cartesianXToGraphicsX( -1) - , cartesianYToGraphicsY(Y_LENGTH)); - g.drawLine(cartesianXToGraphicsX(xLength - 2), cartesianYToGraphicsY(0) - , cartesianXToGraphicsX(xLength - 2), cartesianYToGraphicsY(Y_LENGTH)); - - // secondly, the current memory used: - - int xGauge = LEFT_MARGIN + xLength + HORIZONTAL_SPACE; - - g.setColor(GRAPHICS_BG_COLOR); - g.fillRect(xGauge, cartesianYToGraphicsY(Y_LENGTH), GAUGE_WIDTH, Y_LENGTH); - - long usedMemory = ((Long) JonasManagementRepr.getAttribute(J2eeObjectName.J2EEServer(domainName, serverName) - , "currentUsedMemory", serverName)).longValue(); - long totalMemory = ((Long) JonasManagementRepr.getAttribute(J2eeObjectName.J2EEServer(domainName, serverName) - , "currentTotalMemory", serverName)).longValue(); - - g.setColor(GRAPHICS_FG_COLOR); - int y = (new Long(usedMemory * Y_LENGTH / totalMemory)).intValue(); - g.fillRect(xGauge, cartesianYToGraphicsY(y), GAUGE_WIDTH, y); - - g.setColor(AXIS_COLOR); - g.drawRect(xGauge, cartesianYToGraphicsY(Y_LENGTH), GAUGE_WIDTH, Y_LENGTH); - - g.setColor(TEXT_COLOR); - g.drawString("0", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY( -5)); - g.drawString("" + usedMemory, xGauge + GAUGE_WIDTH + 3 - , cartesianYToGraphicsY(Math.min(y - 5, Y_LENGTH - 25))); - g.drawString("(current)", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Math.min(y - 15 - , Y_LENGTH - 35))); - g.drawString("" + totalMemory, xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 5)); - g.drawString("(total)", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 15)); - g.drawString("Memory used", xGauge, cartesianYToGraphicsY(Y_LENGTH + 20)); - g.drawString("(Kbytes)", xGauge, cartesianYToGraphicsY(Y_LENGTH + 10)); - - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - - /** - * @param length the data array size (data.length) - * @return the picture width when displaying an array of the specified size - */ - public static int getWidth(int length) { - return LEFT_MARGIN + 2 * length + HORIZONTAL_SPACE + GAUGE_WIDTH + RIGHT_MARGIN; - } - - /** - * @return the picture height - */ - public static int getHeight() { - return HEIGHT; - } - - private int cartesianXToGraphicsX(int x) { - return x + LEFT_MARGIN; - } - - private int cartesianYToGraphicsY(int y) { - return HEIGHT - 1 - y - BOTTOM_MARGIN; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MonitoringForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MonitoringForm.java deleted file mode 100644 index 695262519b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/MonitoringForm.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class MonitoringForm extends ActionForm { - -// --------------------------------------------------------- Properties Variables - - private boolean activated = false; - private int allThreadsCount = 0; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - activated = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - - public boolean isActivated() { - return activated; - } - - public void setActivated(boolean activated) { - this.activated = activated; - } - - public int getAllThreadsCount() { - return allThreadsCount; - } - - public void setAllThreadsCount(int allThreadsCount) { - this.allThreadsCount = allThreadsCount; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/NodeInfoForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/NodeInfoForm.java deleted file mode 100644 index 89aa822f2a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/NodeInfoForm.java +++ /dev/null @@ -1,587 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class NodeInfoForm extends ActionForm { - - private String serverName = "N/A"; - private String hostName = "N/A"; - private String JOnASVersion = "N/A"; - private String javaVendor = "N/A"; - private String javaVersion = "N/A"; - private String state = "N/A"; - private int currentUsedMemory = -1; - private int currentTotalMemory = -1; - private int allThreadsCount = -1; - private String protocols = "N/A"; - private String connectionUrl = null; - // infos jdk5 - private String loadCPU = "N/A"; - // Tomcat - /** - * Set to true if Tomcat info are provided for the node - */ - private boolean tomcat = false; - private int maxThreadsByConnectorTomcat = -1; - private int currentThreadCountByConnectorTomcat = -1; - private int currentThreadBusyByConnectorTomcat = -1; - private long bytesReceivedByConnectorTomcat = -1; - private long bytesSentByConnectorTomcat = -1; - private int errorCountByConnectorTomcat = -1; - private long processingTimeByConnectorTomcat = -1; - private int requestCountByConnectorTomcat = -1; - //Tx - private boolean transaction = false; - private int totalBegunTransactions = -1; - private int totalCommittedTransactions = -1; - private int totalCurrentTransactions = -1; - private int totalExpiredTransactions = -1; - private int totalRolledbackTransactions = -1; - // Worker Pool - private boolean workers = false; - private int currentWorkerPoolSize = -1; - private int maxWorkerPoolSize = -1; - private int minWorkerPoolSize = -1; - // JCA - private boolean jcaConnection = false; - private int connectionFailuresJCAConnection = -1; - private int connectionLeaksJCAConnection = -1; - private int currentBusyJCAConnection = -1; - private int currentOpenedJCAConnection = -1; - private int rejectedOpenJCAConnection = -1; - private int servedOpenJCAConnection = -1; - private int waiterCountJCAConnection = -1; - private long waitingTimeJCAConnection = -1; - // JDBC - private boolean jdbcDatasource = false; - private int connectionFailuresJDBCDatasource = -1; - private int connectionLeaksJDBCDatasource = -1; - private int currentBusyJDBCDatasource = -1; - private int currentOpenedJDBCDatasource = -1; - private int rejectedOpenJDBCDatasource = -1; - private int servedOpenJDBCDatasource = -1; - private int waiterCountJDBCDatasource = -1; - private long waitingTimeJDBCDatasource = -1; - // JMS - private boolean jmsJoram = false; - private int jmsQueuesNbMsgsReceiveSinceCreation = -1; - private int jmsQueuesNbMsgsSendToDMQSinceCreation = -1; - private int jmsQueuesNbMsgsDeliverSinceCreation = -1; - private int jmsTopicsNbMsgsReceiveSinceCreation = -1; - private int jmsTopicsNbMsgsSendToDMQSinceCreation = -1; - private int jmsTopicsNbMsgsDeliverSinceCreation = -1; - private int jmsNbMsgsSendToDMQSinceCreation = -1; - // EJB - private int currentNumberOfEntity = -1; - private int currentNumberOfMDB = -1; - private int currentNumberOfSBF = -1; - private int currentNumberOfSBL = -1; - private int currentNumberOfEJB = -1; - - public void setServerName(String val){ - this.serverName = val; - } - - public String getServerName(){ - return this.serverName; - } - - public void setJOnASVersion(String val){ - this.JOnASVersion = val; - } - - public String getJOnASVersion(){ - return this.JOnASVersion; - } - - public void setJavaVersion(String val){ - this.javaVersion = val; - } - - public String getJavaVersion(){ - return this.javaVersion; - } - - public void setHostName(String val){ - this.hostName = val; - } - - public String getHostName(){ - return this.hostName; - } - - public void setJavaVendor(String val){ - this.javaVendor = val; - } - - public String getJavaVendor(){ - return this.javaVendor; - } - - public void setState(String val){ - this.state = val; - } - - public String getState(){ - return this.state; - } - - public void setLoadCPU(String val){ - this.loadCPU = val; - } - - public String getLoadCPU(){ - return this.loadCPU; - } - - public void setCurrentUsedMemory(int val){ - this.currentUsedMemory = val; - } - - public int getCurrentUsedMemory(){ - return this.currentUsedMemory; - } - - public void setCurrentTotalMemory(int val){ - this.currentTotalMemory = val; - } - - public int getCurrentTotalMemory(){ - return this.currentTotalMemory; - } - - public void setAllThreadsCount(int val){ - this.allThreadsCount = val; - } - - public int getAllThreadsCount(){ - return this.allThreadsCount; - } - - public long getBytesReceivedByConnectorTomcat() { - return bytesReceivedByConnectorTomcat; - } - - public void setBytesReceivedByConnectorTomcat(long l) { - this.bytesReceivedByConnectorTomcat = l; - } - - public long getBytesSentByConnectorTomcat() { - return bytesSentByConnectorTomcat; - } - - public void setBytesSentByConnectorTomcat(long bytesSentByConnectorTomcat) { - this.bytesSentByConnectorTomcat = bytesSentByConnectorTomcat; - } - - public int getConnectionFailuresJCAConnection() { - return connectionFailuresJCAConnection; - } - - public void setConnectionFailuresJCAConnection( - int connectionFailuresJCAConnection) { - this.connectionFailuresJCAConnection = connectionFailuresJCAConnection; - } - - public int getConnectionLeaksJCAConnection() { - return connectionLeaksJCAConnection; - } - - public void setConnectionLeaksJCAConnection(int connectionLeaksJCAConnection) { - this.connectionLeaksJCAConnection = connectionLeaksJCAConnection; - } - - public int getCurrentBusyJCAConnection() { - return currentBusyJCAConnection; - } - - public void setCurrentBusyJCAConnection(int currentBusyJCAConnection) { - this.currentBusyJCAConnection = currentBusyJCAConnection; - } - - public int getCurrentNumberOfEJB() { - return currentNumberOfEJB; - } - - public void setCurrentNumberOfEJB(int currentNumberOfEJB) { - this.currentNumberOfEJB = currentNumberOfEJB; - } - - public int getCurrentNumberOfMDB() { - return currentNumberOfMDB; - } - - public void setCurrentNumberOfMDB(int currentNumberOfMDB) { - this.currentNumberOfMDB = currentNumberOfMDB; - } - - public int getCurrentNumberOfSBF() { - return currentNumberOfSBF; - } - - public void setCurrentNumberOfSBF(int currentNumberOfSBF) { - this.currentNumberOfSBF = currentNumberOfSBF; - } - - public int getCurrentNumberOfSBL() { - return currentNumberOfSBL; - } - - public void setCurrentNumberOfSBL(int currentNumberOfSBL) { - this.currentNumberOfSBL = currentNumberOfSBL; - } - - public int getCurrentOpenedJCAConnection() { - return currentOpenedJCAConnection; - } - - public void setCurrentOpenedJCAConnection(int currentOpenedJCAConnection) { - this.currentOpenedJCAConnection = currentOpenedJCAConnection; - } - - public int getCurrentThreadBusyByConnectorTomcat() { - return currentThreadBusyByConnectorTomcat; - } - - public void setCurrentThreadBusyByConnectorTomcat( - int currentThreadBusyByConnectorTomcat) { - this.currentThreadBusyByConnectorTomcat = currentThreadBusyByConnectorTomcat; - } - - public int getCurrentThreadCountByConnectorTomcat() { - return currentThreadCountByConnectorTomcat; - } - - public void setCurrentThreadCountByConnectorTomcat( - int currentThreadCountByConnectorTomcat) { - this.currentThreadCountByConnectorTomcat = currentThreadCountByConnectorTomcat; - } - - public int getCurrentWorkerPoolSize() { - return currentWorkerPoolSize; - } - - public void setCurrentWorkerPoolSize(int currentWorkerPoolSize) { - this.currentWorkerPoolSize = currentWorkerPoolSize; - } - - public int getErrorCountByConnectorTomcat() { - return errorCountByConnectorTomcat; - } - - public void setErrorCountByConnectorTomcat(int errorCountByConnectorTomcat) { - this.errorCountByConnectorTomcat = errorCountByConnectorTomcat; - } - - public int getJmsQueuesNbMsgsDeliverSinceCreation() { - return jmsQueuesNbMsgsDeliverSinceCreation; - } - - public void setJmsQueuesNbMsgsDeliverSinceCreation( - int jmsQueuesNbMsgsDeliverSinceCreation) { - this.jmsQueuesNbMsgsDeliverSinceCreation = jmsQueuesNbMsgsDeliverSinceCreation; - } - - public int getJmsQueuesNbMsgsReceiveSinceCreation() { - return jmsQueuesNbMsgsReceiveSinceCreation; - } - - public void setJmsQueuesNbMsgsReceiveSinceCreation( - int jmsQueuesNbMsgsReceiveSinceCreation) { - this.jmsQueuesNbMsgsReceiveSinceCreation = jmsQueuesNbMsgsReceiveSinceCreation; - } - - public int getJmsQueuesNbMsgsSendToDMQSinceCreation() { - return jmsQueuesNbMsgsSendToDMQSinceCreation; - } - - public void setJmsQueuesNbMsgsSendToDMQSinceCreation( - int jmsQueuesNbMsgsSendToDMQSinceCreation) { - this.jmsQueuesNbMsgsSendToDMQSinceCreation = jmsQueuesNbMsgsSendToDMQSinceCreation; - } - - public int getJmsTopicsNbMsgsDeliverSinceCreation() { - return jmsTopicsNbMsgsDeliverSinceCreation; - } - - public void setJmsTopicsNbMsgsDeliverSinceCreation( - int jmsTopicsNbMsgsDeliverSinceCreation) { - this.jmsTopicsNbMsgsDeliverSinceCreation = jmsTopicsNbMsgsDeliverSinceCreation; - } - - public int getJmsTopicsNbMsgsReceiveSinceCreation() { - return jmsTopicsNbMsgsReceiveSinceCreation; - } - - public void setJmsTopicsNbMsgsReceiveSinceCreation( - int jmsTopicsNbMsgsReceiveSinceCreation) { - this.jmsTopicsNbMsgsReceiveSinceCreation = jmsTopicsNbMsgsReceiveSinceCreation; - } - - public int getJmsTopicsNbMsgsSendToDMQSinceCreation() { - return jmsTopicsNbMsgsSendToDMQSinceCreation; - } - - public void setJmsTopicsNbMsgsSendToDMQSinceCreation( - int jmsTopicsNbMsgsSendToDMQSinceCreation) { - this.jmsTopicsNbMsgsSendToDMQSinceCreation = jmsTopicsNbMsgsSendToDMQSinceCreation; - } - - public int getMaxThreadsByConnectorTomcat() { - return maxThreadsByConnectorTomcat; - } - - public void setMaxThreadsByConnectorTomcat(int maxThreadsByConnectorTomcat) { - this.maxThreadsByConnectorTomcat = maxThreadsByConnectorTomcat; - } - - public int getMaxWorkerPoolSize() { - return maxWorkerPoolSize; - } - - public void setMaxWorkerPoolSize(int maxWorkerPoolSize) { - this.maxWorkerPoolSize = maxWorkerPoolSize; - } - - public int getMinWorkerPoolSize() { - return minWorkerPoolSize; - } - - public void setMinWorkerPoolSize(int minWorkerPoolSize) { - this.minWorkerPoolSize = minWorkerPoolSize; - } - - public long getProcessingTimeByConnectorTomcat() { - return processingTimeByConnectorTomcat; - } - - public void setProcessingTimeByConnectorTomcat(long value) { - processingTimeByConnectorTomcat = value; - } - - public String getProtocols() { - return protocols; - } - - public void setProtocols(String protocols) { - this.protocols = protocols; - } - - public int getRejectedOpenJCAConnection() { - return rejectedOpenJCAConnection; - } - - public void setRejectedOpenJCAConnection(int rejectedOpenJCAConnection) { - this.rejectedOpenJCAConnection = rejectedOpenJCAConnection; - } - - public int getRequestCountByConnectorTomcat() { - return requestCountByConnectorTomcat; - } - - public void setRequestCountByConnectorTomcat(int requestCountByConnectorTomcat) { - this.requestCountByConnectorTomcat = requestCountByConnectorTomcat; - } - - public int getTotalBegunTransactions() { - return totalBegunTransactions; - } - - public void setTotalBegunTransactions(int totalBegunTransactions) { - this.totalBegunTransactions = totalBegunTransactions; - } - - public int getTotalCommittedTransactions() { - return totalCommittedTransactions; - } - - public void setTotalCommittedTransactions(int totalCommittedTransactions) { - this.totalCommittedTransactions = totalCommittedTransactions; - } - - public int getTotalCurrentTransactions() { - return totalCurrentTransactions; - } - - public void setTotalCurrentTransactions(int totalCurrentTransactions) { - this.totalCurrentTransactions = totalCurrentTransactions; - } - - public int getTotalExpiredTransactions() { - return totalExpiredTransactions; - } - - public void setTotalExpiredTransactions(int totalExpiredTransactions) { - this.totalExpiredTransactions = totalExpiredTransactions; - } - - public int getTotalRolledbackTransactions() { - return totalRolledbackTransactions; - } - - public void setTotalRolledbackTransactions(int totalRolledbackTransactions) { - this.totalRolledbackTransactions = totalRolledbackTransactions; - } - - public int getWaiterCountJCAConnection() { - return waiterCountJCAConnection; - } - - public void setWaiterCountJCAConnection(int waiterCountJCAConnection) { - this.waiterCountJCAConnection = waiterCountJCAConnection; - } - - public long getWaitingTimeJCAConnection() { - return waitingTimeJCAConnection; - } - - public void setWaitingTimeJCAConnection(long waitingTimeJCAConnection) { - this.waitingTimeJCAConnection = waitingTimeJCAConnection; - } - - public String getConnectionUrl() { - return connectionUrl; - } - - public void setConnectionUrl(String connectionUrl) { - this.connectionUrl = connectionUrl; - } - - public boolean getTomcat() { - return tomcat; - } - - public void setTomcat(boolean tomcat) { - this.tomcat = tomcat; - } - - public boolean getTransaction() { - return transaction; - } - - public void setTransaction(boolean transaction) { - this.transaction = transaction; - } - - public boolean getWorkers() { - return workers; - } - - public void setWorkers(boolean workers) { - this.workers = workers; - } - - public int getConnectionFailuresJDBCDatasource() { - return connectionFailuresJDBCDatasource; - } - - public void setConnectionFailuresJDBCDatasource( - int connectionFailuresJDBCDatasource) { - this.connectionFailuresJDBCDatasource = connectionFailuresJDBCDatasource; - } - - public int getConnectionLeaksJDBCDatasource() { - return connectionLeaksJDBCDatasource; - } - - public void setConnectionLeaksJDBCDatasource(int connectionLeaksJDBCDatasource) { - this.connectionLeaksJDBCDatasource = connectionLeaksJDBCDatasource; - } - - public int getCurrentBusyJDBCDatasource() { - return currentBusyJDBCDatasource; - } - - public void setCurrentBusyJDBCDatasource(int currentBusyJDBCDatasource) { - this.currentBusyJDBCDatasource = currentBusyJDBCDatasource; - } - - public int getCurrentOpenedJDBCDatasource() { - return currentOpenedJDBCDatasource; - } - - public void setCurrentOpenedJDBCDatasource(int currentOpenedJDBCDatasource) { - this.currentOpenedJDBCDatasource = currentOpenedJDBCDatasource; - } - - public boolean getJcaConnection() { - return jcaConnection; - } - - public void setJcaConnection(boolean jcaConnection) { - this.jcaConnection = jcaConnection; - } - - public boolean getJdbcDatasource() { - return jdbcDatasource; - } - - public void setJdbcDatasource(boolean jdbcDatasource) { - this.jdbcDatasource = jdbcDatasource; - } - - public int getRejectedOpenJDBCDatasource() { - return rejectedOpenJDBCDatasource; - } - - public void setRejectedOpenJDBCDatasource(int rejectedOpenJDBCDatasource) { - this.rejectedOpenJDBCDatasource = rejectedOpenJDBCDatasource; - } - - public int getServedOpenJCAConnection() { - return servedOpenJCAConnection; - } - - public void setServedOpenJCAConnection(int servedOpenJCAConnection) { - this.servedOpenJCAConnection = servedOpenJCAConnection; - } - - public int getServedOpenJDBCDatasource() { - return servedOpenJDBCDatasource; - } - - public void setServedOpenJDBCDatasource(int servedOpenJDBCDatasource) { - this.servedOpenJDBCDatasource = servedOpenJDBCDatasource; - } - - public int getWaiterCountJDBCDatasource() { - return waiterCountJDBCDatasource; - } - - public void setWaiterCountJDBCDatasource(int waiterCountJDBCDatasource) { - this.waiterCountJDBCDatasource = waiterCountJDBCDatasource; - } - - public long getWaitingTimeJDBCDatasource() { - return waitingTimeJDBCDatasource; - } - - public void setWaitingTimeJDBCDatasource(long waitingTimeJDBCDatasource) { - this.waitingTimeJDBCDatasource = waitingTimeJDBCDatasource; - } - - public int getCurrentNumberOfEntity() { - return currentNumberOfEntity; - } - - public void setCurrentNumberOfEntity(int currentNumberOfEntity) { - this.currentNumberOfEntity = currentNumberOfEntity; - } - - public boolean getJmsJoram() { - return jmsJoram; - } - - public void setJmsJoram(boolean joramJms) { - this.jmsJoram = joramJms; - } - - public int getJmsNbMsgsSendToDMQSinceCreation() { - return jmsNbMsgsSendToDMQSinceCreation; - } - - public void setJmsNbMsgsSendToDMQSinceCreation( - int jmsNbMsgsSendToDMQSinceCreation) { - this.jmsNbMsgsSendToDMQSinceCreation = jmsNbMsgsSendToDMQSinceCreation; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/PingAllJonasServersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/PingAllJonasServersAction.java deleted file mode 100644 index d71c437b97..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/PingAllJonasServersAction.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.management.domain.J2EEDomain; -import org.ow2.jonas.lib.management.domain.proxy.server.ServerProxy; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.server.ServerItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - - -public class PingAllJonasServersAction extends JonasBaseAction { - - @SuppressWarnings("unchecked") - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - String serverName = oWhere.getAdminJonasServerName(); - DaemonProxyClusterForm oForm = (DaemonProxyClusterForm) p_Form; - try { - - String name = p_Request.getParameter("node"); - oWhere.setCurrentClusterDaemonName(name); - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, name); - - oForm.setName((String) JonasManagementRepr.getAttribute(on, - "Name", serverName)); - - oForm.setState((String) JonasManagementRepr.getAttribute(on, - "State", serverName)); - -// getting requested cluster daemon Administred Jonas servers... - DomainMonitor dm = J2EEDomain.getInstance().getDomainMonitor(); - -// Get servers running in this domain - ArrayList al = new ArrayList(); - for (Iterator it = dm.getServerList().iterator(); it.hasNext();) { - ServerProxy proxy = (ServerProxy) it.next(); - String cdName = proxy.getClusterDaemonName(); - if(cdName != null) - { - if(cdName.equals(name)) - { - ObjectName myOn = ObjectName.getInstance(proxy.getJ2eeObjectName()); - al.add(new ServerItem(myOn, proxy.getState(), proxy.getClusterDaemonName())); - } - } - } - Collections.sort(al, new BeanComparator(new String[] {"name"})); - p_Request.setAttribute("listServers", al); - - - - - -// Force the node selected in tree -m_WhereAreYou.selectNameNode("domain" - + WhereAreYou.NODE_SEPARATOR - + name, true); - - - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - p_Request.setAttribute("isNotMonitoring", "true"); - // Forward to the jsp. - return (p_Mapping.findForward("ActionDaemonProxyClusterInfo")); - } -} - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StackDumpForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StackDumpForm.java deleted file mode 100644 index 5203069ae8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StackDumpForm.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$id - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class StackDumpForm extends ActionForm { - - // --------------------------------------------------------- Properties Variables - - // --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - } diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StartAllJonasServersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StartAllJonasServersAction.java deleted file mode 100644 index 111a201295..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StartAllJonasServersAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -public class StartAllJonasServersAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - String serverName=oWhere.getAdminJonasServerName(); - try { - String name = p_Request.getParameter("node"); - ObjectName on = JonasObjectName.clusterDaemonProxy(domainName, name); - String opName = "startAllServers"; - String[] sign = new String[] {"java.lang.String"}; - String otherParams = null; - String[] params = new String[1]; - params[0] = otherParams; - JonasManagementRepr.invoke(on, opName, params, sign, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - p_Request.setAttribute("isNotMonitoring", "true"); - return (p_Mapping.findForward("ActionDaemonProxyClusterInfo")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StopAllJonasServersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StopAllJonasServersAction.java deleted file mode 100644 index 7834e4299c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/StopAllJonasServersAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -public class StopAllJonasServersAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - // Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - - - String serverName = oWhere.getAdminJonasServerName(); - try { - String name = p_Request.getParameter("node"); - ObjectName on = JonasObjectName.clusterDaemonProxy(sDomainName, name); - String opName = "stopAllServers"; - String[] sign = new String[] {"java.lang.String"}; - String otherParams = null; - String[] params = new String[1]; - params[0] = otherParams; - JonasManagementRepr.invoke(on, opName, params, sign, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - p_Request.setAttribute("isNotMonitoring", "true"); - // Forward to the jsp. - return (p_Mapping.findForward("ActionDaemonProxyClusterInfo")); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterAction.java deleted file mode 100644 index f2f990ff9a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterAction.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Tomcat cluster monitoring action - * @author Adriana.Danes@bull.net - */ -public class TomcatClusterAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get cluster name from the 'clust' parameter - String name = p_Request.getParameter("clust"); - if (name == null) { - addGlobalError(new Exception("TomcatClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // cluster type - String type = "TomcatCluster"; - // Form used - TomcatClusterForm oForm = (TomcatClusterForm) p_Form; - oForm.setName(name); - try { - ObjectName on = JonasObjectName.cluster(domainName, name, type); - oForm.setState(getStringAttribute(on, "State")); - // Set specific parameters - oForm.setMcastAddr(getStringAttribute(on, "McastAddr")); - oForm.setMcastDropTime(getLongAttribute(on, "McastDropTime")); - oForm.setMcastFrequency(getLongAttribute(on, "McastFrequency")); - oForm.setMcastPort(getIntegerAttribute(on, "McastPort")); - oForm.setMcastSocketTimeout(getIntegerAttribute(on, "McastSocketTimeout")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("TomcatCluster")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterForm.java deleted file mode 100644 index ae6f0b9b2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatClusterForm.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -public class TomcatClusterForm extends BaseClusterForm { - - /** - * Multicast Port - */ - private int mcastPort; - public int getMcastPort() { - return mcastPort; - } - public void setMcastPort(int port) { - mcastPort = port; - } - - /** - * Multicast Addr - */ - private String mcastAddr = null; - public String getMcastAddr() { - return mcastAddr; - } - public void setMcastAddr(String addr) { - mcastAddr = addr; - } - - /** - * Multicast Drop Time - */ - private long mcastDropTime; - public long getMcastDropTime() { - return mcastDropTime; - } - public void setMcastDropTime(long dropTime) { - mcastDropTime = dropTime; - } - - /** - * Multicast Frequency - */ - private long mcastFrequency; - public long getMcastFrequency() { - return mcastFrequency; - } - public void setMcastFrequency(long frequency) { - mcastFrequency = frequency; - } - - /** - * Multicast Socket Timeout - */ - private int mcastSocketTimeout; - public int getMcastSocketTimeout() { - return mcastSocketTimeout; - } - public void setMcastSocketTimeout(int socketTimeout) { - mcastSocketTimeout = socketTimeout; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberAction.java deleted file mode 100644 index ad2f6494dd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberAction.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -public class TomcatMemberAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Get member name from the 'member' parameter and cluster name from the 'clust' parameter - String name = p_Request.getParameter("member"); - if (name == null) { - addGlobalError(new Exception("JkMemberAction: member parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - String cluster = p_Request.getParameter("clust"); - if (cluster == null) { - addGlobalError(new Exception("JkClusterAction: clust parameter is null.")); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Form used - TomcatMemberForm oForm = (TomcatMemberForm) p_Form; - oForm.setName(name); - // cluster type - String type = "TomcatCluster"; - try { - ObjectName on = JonasObjectName.clusterMember(domainName, name, type, cluster); - oForm.setHost(getStringAttribute(on, "HostName")); - oForm.setState(getStringAttribute(on, "State")); - oForm.setReceiverInfo(getStringAttribute(on, "ReceiverInfo")); - oForm.setTcpListenAddress(getStringAttribute(on, "TcpListenAddress")); - oForm.setTcpListenPort(getIntegerAttribute(on, "TcpListenPort")); - oForm.setTcpThreadCount(getIntegerAttribute(on, "TcpThreadCount")); - oForm.setTcpReceivedBytes(getLongAttribute(on, "TotalReceivedBytes")); - oForm.setSenderInfo(getStringAttribute(on, "SenderInfo")); - oForm.setAckTimeout(getLongAttribute(on, "AckTimeout")); - oForm.setAutoConnect(getBooleanAttribute(on, "AutoConnect")); - oForm.setDoTransmitterProcessingStats(getBooleanAttribute(on, "DoTransmitterProcessingStats")); - oForm.setReplicationMode(getStringAttribute(on, "ReplicationMode")); - oForm.setWaitForAck(getBooleanAttribute(on, "WaitForAck")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("TomcatMember")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberForm.java deleted file mode 100644 index ac4de95c53..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/TomcatMemberForm.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.monitoring; - -import org.apache.struts.action.ActionForm; - -public class TomcatMemberForm extends ActionForm { - /** - * The member's name - */ - private String name = null; - /** - * The member's host - */ - private String host = null; - /** - * The member's state - */ - private String state = null; - - // ---------- Receiver info ---------------------// - /** - * tcp listener address - */ - private String tcpListenAddress = null; - /** - * tcp listener port - */ - private int tcpListenPort; - - private int tcpThreadCount; - - private long tcpReceivedBytes; - - private String receiverInfo; - - // -------------- Sender info -------------------// - private String replicationMode; - - private long ackTimeout; - - private boolean autoConnect; - - private boolean compress; - - private boolean doTransmitterProcessingStats; - - private boolean waitForAck; - - private String senderInfo; - - // -------------- Accessors -------------------// - public String getSenderInfo() { - return senderInfo; - } - public void setSenderInfo(String senderInfo) { - this.senderInfo = senderInfo; - } - public String getReceiverInfo() { - return receiverInfo; - } - public void setReceiverInfo(String receiverInfo) { - this.receiverInfo = receiverInfo; - } - public long getTcpReceivedBytes() { - return tcpReceivedBytes; - } - public void setTcpReceivedBytes(long tcpReceivedBytes) { - this.tcpReceivedBytes = tcpReceivedBytes; - } - public int getTcpThreadCount() { - return tcpThreadCount; - } - public void setTcpThreadCount(int tcpThreadCount) { - this.tcpThreadCount = tcpThreadCount; - } - public String getHost() { - return host; - } - public void setHost(String host) { - this.host = host; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getTcpListenAddress() { - return tcpListenAddress; - } - public void setTcpListenAddress(String tcpListenAddress) { - this.tcpListenAddress = tcpListenAddress; - } - public int getTcpListenPort() { - return tcpListenPort; - } - public void setTcpListenPort(int tcpListenPort) { - this.tcpListenPort = tcpListenPort; - } - public long getAckTimeout() { - return ackTimeout; - } - public void setAckTimeout(long ackTimeout) { - this.ackTimeout = ackTimeout; - } - public boolean isAutoConnect() { - return autoConnect; - } - public void setAutoConnect(boolean autoConnect) { - this.autoConnect = autoConnect; - } - public boolean isDoTransmitterProcessingStats() { - return doTransmitterProcessingStats; - } - public void setDoTransmitterProcessingStats(boolean doTransmitterProcessingStats) { - this.doTransmitterProcessingStats = doTransmitterProcessingStats; - } - public String getReplicationMode() { - return replicationMode; - } - public void setReplicationMode(String replicationMode) { - this.replicationMode = replicationMode; - } - public boolean isWaitForAck() { - return waitForAck; - } - public void setWaitForAck(boolean waitForAck) { - this.waitForAck = waitForAck; - } - public boolean isCompress() { - return compress; - } - public void setCompress(boolean compress) { - this.compress = compress; - } - public String getState() { - return state; - } - public void setState(String state) { - this.state = state; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphForm.java deleted file mode 100644 index 1932d66bfd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphForm.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $$Id$$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author eyindanga - * - */ -public class ServerGraphForm extends ActionForm{ - - /** - * - */ - private static final long serialVersionUID = 0L; - //the action type - private String action = null; - String servletUrl = null; - String actionName = null; - String selectedTabTitle = null; - String serverName = null; - - // --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - - return oErrors; - } - - /** - * @return the action - */ - public String getAction() { - return action; - } - /** - * @param action the action to set - */ - public void setAction(String action) { - this.action = action; - } - - /** - * @return the servletUrl - */ - public String getServletUrl() { - return servletUrl; - } - - /** - * @param servletUrl the servletUrl to set - */ - public void setServletUrl(String servletUrl) { - this.servletUrl = servletUrl; - } - - /** - * @return the actionName - */ - public String getActionName() { - return actionName; - } - - /** - * @param actionName the actionName to set - */ - public void setActionName(String actionName) { - this.actionName = actionName; - } - - /** - * @return the selectedTabTitle - */ - public String getSelectedTabTitle() { - return selectedTabTitle; - } - - /** - * @param selectedTabTitle the selectedTabTitle to set - */ - public void setSelectedTabTitle(String selectedTabTitle) { - this.selectedTabTitle = selectedTabTitle; - } - - /** - * @return the serverName - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName the serverName to set - */ - public void setServerName(String serverName) { - this.serverName = serverName; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphsAction.java deleted file mode 100644 index 8e134d6bd9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerGraphsAction.java +++ /dev/null @@ -1,255 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $$Id$$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author eyindanga - * - */ -public class ServerGraphsAction extends JonasBaseAction{ - - - @Override - public ActionForward executeAction(ActionMapping mapping, ActionForm form, - HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - -// Form used - ServerGraphForm oForm = (ServerGraphForm) form; - WhereAreYou oWhere = (WhereAreYou) request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - //get the action to perform - String actionToPerform = oForm.getAction(); - String sDomainName = oWhere.getCurrentDomainName(); - //admin server name - String serverName = oWhere.getCurrentJonasServerName(); - String servletUrl = null; - String selectedTabTitle = null; - String actionName = null; - String contextPath = request.getContextPath(); - try { - ObjectName on = new ObjectName(sDomainName - + ":type=ServerProxy,name=" + serverName); - if (actionToPerform.equals("totalCurrentTransactions")) { - servletUrl = contextPath+"/ServerCurrentTxServlet"; - selectedTabTitle = serverName+" Transactions Count"; - actionName = "ActionSeverTransactionsCount"; - - } else if (actionToPerform.equals("currentThreadCount")) { - servletUrl = contextPath+"/ThreadCountServlet"; - selectedTabTitle = serverName+" Threads Count"; - actionName = "ActionServerThreadCount"; - - - } else { - //JCA TRANSACTIONS - if (actionToPerform.equals("totalBegunTransactions")) { - servletUrl = contextPath+"/BegunTransactionsServlet"; - selectedTabTitle = serverName+" Begun Tx Count"; - - } else if (actionToPerform.equals("totalCommittedTransactions")) { - servletUrl = contextPath+"/TotalCommittedTransactionsServlet"; - selectedTabTitle = serverName+" Committed Tx Count"; - - }else if (actionToPerform.equals("totalExpiredTransactions")) { - servletUrl = contextPath+"/TotalExpiredTransactionsServlet"; - selectedTabTitle = serverName+" Expired Tx Count"; - - }else if (actionToPerform.equals("totalRolledbackTransactions")) { - servletUrl = contextPath+"/TotalRolledbackTransactionsServlet"; - selectedTabTitle = serverName+" Rolled-back Tx Count"; - - //TOMCAT - }else if (actionToPerform.equals("currentThreadBusyByConnectorTomcat")) { - servletUrl = contextPath+"/ThreadBusyConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat Busy Threads Count"; - - }else if (actionToPerform.equals("bytesReceivedByConnectorTomcat")) { - servletUrl = contextPath+"/BytesReceivedByConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat Conn. Received Bytes"; - - }else if (actionToPerform.equals("bytesSentByConnectorTomcat")) { - servletUrl = contextPath+"/BytesSentByConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat conn. sent Bytes"; - - }else if (actionToPerform.equals("errorCountByConnectorTomcat")) { - servletUrl = contextPath+"/ErrorCountByConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat Conn. Errors Count"; - - }else if (actionToPerform.equals("processingTimeByConnectorTomcat")) { - servletUrl = contextPath+"/ProcessingTimeByConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat Conn. Processing Time"; - - }else if (actionToPerform.equals("requestCountByConnectorTomcat")) { - servletUrl = contextPath+"/RequestCountByConnectorTomcatServlet"; - selectedTabTitle = serverName+" Tomcat Conn. Request Count"; - - //JCA TRANSACTIONS - }else if (actionToPerform.equals("currentBusyJCAConnection")) { - servletUrl = contextPath+"/CurrentBusyJCAConnectionServlet"; - selectedTabTitle = serverName+" Busy JCA Conn. Count"; - - }else if (actionToPerform.equals("connectionFailuresJCAConnection")) { - servletUrl = contextPath+"/ConnectionFailuresJCAConnectionServlet"; - selectedTabTitle = serverName+" Failed JCA Conn. Count"; - - }else if (actionToPerform.equals("connectionLeaksJCAConnection")) { - servletUrl = contextPath+"/ConnectionLeaksJCAConnectionServlet"; - selectedTabTitle = serverName+" Failed JCA Conn. Count"; - - }else if (actionToPerform.equals("rejectedOpenJCAConnection")) { - servletUrl = contextPath+"/RejectedOpenJCAConnectionServlet"; - selectedTabTitle = serverName+" Rejected JCA Conn. Count"; - - }else if (actionToPerform.equals("servedOpenJCAConnection")) { - servletUrl = contextPath+"/ServedOpenJCAConnectionServlet"; - selectedTabTitle = serverName+" Served JCA Conn. Count"; - - }else if (actionToPerform.equals("waiterCountJCAConnection")) { - servletUrl = contextPath+"/WaiterCountJCAConnectionServlet"; - selectedTabTitle = serverName+" begun Tx Count"; - - }else if (actionToPerform.equals("totalBegunTransactions")) { - servletUrl = contextPath+"/BegunTransactionsServlet"; - selectedTabTitle = serverName+" Waiters JCA Conn. Count"; - - //JDBC DATA SoURCES - }else if (actionToPerform.equals("currentBusyJDBCDatasource")) { - servletUrl = contextPath+"/CurrentBusyJDBCResourceServlet"; - selectedTabTitle = serverName+" Busy JDBC Datasources Count"; - - }else if (actionToPerform.equals("connectionLeaksJDBCDatasource")) { - servletUrl = contextPath+"/ConnectionLeaksJDBCResourceServlet"; - selectedTabTitle = serverName+" Leaked JDBC Datasources Count"; - - }else if (actionToPerform.equals("rejectedOpenJDBCDatasource")) { - servletUrl = contextPath+"/RejectedOpenJDBCResourceServlet"; - selectedTabTitle = serverName+" Rejected JDBC Datasources Count"; - - }else if (actionToPerform.equals("servedOpenJDBCDatasource")) { - servletUrl = contextPath+"/ServedOpenJDBCResourceServlet"; - selectedTabTitle = serverName+" Served JDBC Datasources Count"; - - }else if (actionToPerform.equals("waiterCountJDBCDatasource")) { - servletUrl = contextPath+"/WaiterCountJDBCResourceServlet"; - selectedTabTitle = serverName+" Waiting JDBC Datasources Count"; - - //JMS - }else if (actionToPerform.equals("jmsQueuesNbMsgsReceiveSinceCreation")) { - servletUrl = contextPath+"/JmsQMsgReceiveServlet"; - selectedTabTitle = serverName+" Jms Queues Received Msg Count"; - - }else if (actionToPerform.equals("jmsQueuesNbMsgsDeliverSinceCreation")) { - servletUrl = contextPath+"/JmsQMsgDeliverServlet"; - selectedTabTitle = serverName+" Jms Queues Delivered Msg Count"; - - }else if (actionToPerform.equals("jmsTopicsNbMsgsReceiveSinceCreation")) { - servletUrl = contextPath+"/JmsTopicMsgReceiveServlet"; - selectedTabTitle = serverName+" Jms Topics Received Msg Count"; - - }else if (actionToPerform.equals("jmsTopicsNbMsgsDeliverSinceCreation")) { - servletUrl = contextPath+"/JmsTopicMsgDeliverServlet"; - selectedTabTitle = serverName+" Jms Topics Delivered Msg Count"; - - //BEANS - }else if (actionToPerform.equals("currentNumberOfEJB")) { - servletUrl = contextPath+"/CurrentNumberOfEJBServlet"; - selectedTabTitle = serverName+" Ejb count"; - - }else if (actionToPerform.equals("currentNumberOfEntity")) { - servletUrl = contextPath+"/CurrentNumberOfEntityBeanServlet"; - selectedTabTitle = serverName+" Entity Beans Count"; - - }else if (actionToPerform.equals("currentNumberOfSBF")) { - servletUrl = contextPath+"/CurrentNumberOfSBFServlet"; - selectedTabTitle = serverName+" SFSB Count"; - - }else if (actionToPerform.equals("currentNumberOfSBL")) { - servletUrl = contextPath+"/CurrentNumberOfSBLServlet"; - selectedTabTitle = serverName+" SLSB Count"; - - }else if (actionToPerform.equals("currentNumberOfMDB")) { - servletUrl = contextPath+"/CurrentNumberOfMDBServlet"; - selectedTabTitle = serverName+" MDB Count"; - - }else if (actionToPerform.equals("currentUsedMemory")) { - servletUrl = contextPath+"/MemoryGraphServlet"; - selectedTabTitle = serverName+" Current Used memory"; - - }else { - servletUrl = contextPath+"/BegunTransactionsServlet"; - selectedTabTitle = serverName+" Forgot this case"; - } - // there is a single action for plotting all server graphs - actionName = "ActionServerGraph"; - - } - - //set attributes for jsp - request.setAttribute("srvOn",on ); - request.setAttribute("currentServerName", serverName); - //name in the web.xml - request.setAttribute("servletUrl", servletUrl); - //this name is in stuts-config.xml - //TODO dynamically get stuts action name of the current action - //and replaced hard coded name with this dynamic action name - request.setAttribute("actionName", actionName); - request.setAttribute("selectedTabTitle", selectedTabTitle); - - //set attribute for servlets - m_Session.setAttribute("srvOn", on); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - // Forward to the jsp that dispalys all server graphs. - return (mapping.findForward("ServerGraphsDisplay")); - - } - - - -} - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerThreadCountAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerThreadCountAction.java deleted file mode 100644 index 282d9e66fb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerThreadCountAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * This action is used to set values before plotting server Thread count graph - * the graph will be plot using cewolf librairies - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph; -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class ServerThreadCountAction extends JonasBaseAction { - @Override - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, HttpServletResponse p_Response) throws IOException, ServletException { -// Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - String selectedServerName = p_Request.getParameter("srvSelected"); - String serverName = oWhere.getCurrentJonasServerName(); - try { - ObjectName on = new ObjectName(sDomainName - + ":type=ServerProxy,name=" + selectedServerName); - //set attributes for jsp - p_Request.setAttribute("srvOn",on ); - p_Request.setAttribute("currentServerName", serverName); - //name in the web.xml - p_Request.setAttribute("servletUrl", "ThreadCountServlet"); - //this name is in stuts-config.xml - //TODO dynamically get stuts action name of the current action - //and replaced hard coded name with this dynamic action name - p_Request.setAttribute("actionName", "ActionServerThreadCount"); - p_Request.setAttribute("selectedTabTitle", selectedServerName+" Threads Count"); - - //set attribute for servlets - m_Session.setAttribute("srvOn", on); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp that dispalys all server graphs. - return (p_Mapping.findForward("ServerGraphsDisplay")); - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerTransactionsCountAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerTransactionsCountAction.java deleted file mode 100644 index a2d904ec12..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/ServerTransactionsCountAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * This action is used to set values before plotting Transaction count graph - * the graph will be plot using cewolf librairies - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class ServerTransactionsCountAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form, HttpServletRequest p_Request, HttpServletResponse p_Response) throws IOException, ServletException { -// Form used - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute( - WhereAreYou.SESSION_NAME); - String sDomainName = oWhere.getCurrentDomainName(); - String selectedServerName = p_Request.getParameter("srvSelected"); - String serverName = oWhere.getCurrentJonasServerName(); - try { - ObjectName on = new ObjectName(sDomainName - + ":type=ServerProxy,name=" + selectedServerName); - //set attributes for jsp - p_Request.setAttribute("srvOn",on ); - p_Request.setAttribute("currentServerName", serverName); - //name in the web.xml - p_Request.setAttribute("servletUrl", "ServerCurrentTxServlet"); - //this name is in stuts-config.xml - //TODO dynamically get stuts action name of the current action - //and replaced hard coded name with this dynamic action name - p_Request.setAttribute("actionName", "ActionSeverTransactionsCount"); - p_Request.setAttribute("selectedTabTitle", selectedServerName+" Transactions Count"); - //set attribute for servlets - m_Session.setAttribute("srvOn", on); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ServerGraphsDisplay")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ServerCurrentTxServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ServerCurrentTxServlet.java deleted file mode 100644 index fa31583e4f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ServerCurrentTxServlet.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ServerCurrentTxServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 0L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long totalTx = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentTxInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - Long currentTx = new Long(currentTxInt).longValue(); - int totalTxInt = 0; - if (totalTx == 0) { - totalTxInt = currentTxInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCommittedTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalExpiredTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalRolledbackTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalBegunTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - - - - totalTx = new Long(totalTxInt).longValue(); - } - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1 ]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Current Tx count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, totalTx, xLength, "Current Tx Count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ThreadCountServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ThreadCountServlet.java deleted file mode 100644 index 1d30fb4196..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/ThreadCountServlet.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * This servlets has been created to test use of Jfreeshart. - * We've already used Cewolf that is based on jfreeshart libraries. - * We've also made graphics by using classi java libraries. - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets; -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -public class ThreadCountServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 0L; - /** - * Logger. - */ - @SuppressWarnings("unused") - private long total = 0; - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - //TODO add logic for using this servlet for ploting all server graphs - //that means we should set a value do determine datas to provide and the style of graph to be plot. - int allThreadsCountInt = ((Integer) JonasManagementRepr.getAttribute(srvOn, "AllThreadsCount", serverName)); - Long allThreadsCount = new Long(allThreadsCountInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = allThreadsCount; - } else { - data[index] = allThreadsCount; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Current Threads Count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, allThreadsCount, total, xLength, "Threads Count", "", false, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BegunTransactionsServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BegunTransactionsServlet.java deleted file mode 100644 index 32234d29fd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BegunTransactionsServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class BegunTransactionsServlet extends HttpServlet { - - /** - * serialVersionId - */ - private static final long serialVersionUID = 2576550837031579879L; - //there is a totalTransaction number - //totalTransactionCount = TotalBegunTransactions + TotalCommittedTransactions - // + TotalCurrentTransactions + TotalExpiredTransactions - // TotalRolledbackTransactions - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalBegunTransactions", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCommittedTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalExpiredTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalRolledbackTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Begun Tansactions", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "Begun", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesReceivedByConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesReceivedByConnectorTomcatServlet.java deleted file mode 100644 index a1e0f07f94..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesReceivedByConnectorTomcatServlet.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class BytesReceivedByConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 7740996375648369083L; - // there is a totalBytesReceived count - //totalBytesReceived = BytesSentByConnectorTomcat + BytesReceivedByConnectorTomcat - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - Long currentTx = ((Long) (JonasManagementRepr.getAttribute(srvOn, "BytesReceivedByConnectorTomcat", serverName))).longValue(); - //convert n KB - //scale :10 units = 1 KB - //TODO Fix the bug that occurs at this conversion time - //the returned value == 0 - currentTx = (currentTx * 10 )/(1024); - total = currentTx - + - (((Long) (JonasManagementRepr.getAttribute(srvOn, "BytesSentByConnectorTomcat", serverName))).longValue())* 10/(1024); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); - - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Bytes received By tomcat Conn.", "10 units <-> KB", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Received", "10 units <-> KB", true, 1); - //TODO draw a second graph for dif between previous byte number and current bytes number - - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesSentByConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesSentByConnectorTomcatServlet.java deleted file mode 100644 index dcdd7113f2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/BytesSentByConnectorTomcatServlet.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class BytesSentByConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 2811457205023298020L; - //totalBytesReceived = BytesSentByConnectorTomcat + BytesReceivedByConnectorTomcat - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - //difference between current and previous bytes count - private Long[] dataDiff; - private int index = 0; - //default number of measures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //previous byte count, used to draw graph sent per t-time - private long previousByteSent = 0; - //index for diff array - private int indexDiff = 0;; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - dataDiff = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - Long currentTx = ((Long) (JonasManagementRepr.getAttribute(srvOn, "BytesSentByConnectorTomcat", serverName))).longValue(); - //convert n KB - //scale :10 units = 1 megaB - currentTx = (currentTx * 10 )/(1024 * 1024); - total = currentTx - + - (((Long) (JonasManagementRepr.getAttribute(srvOn, "BytesReceivedByConnectorTomcat", serverName))).longValue()* 10 )/(1024 * 1024); - - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - dataDiff[i] = dataDiff[i + 1]; - } - data[index] = currentTx; - dataDiff[index] = previousByteSent; - - } else { - data[index] = currentTx; - dataDiff[index] = previousByteSent; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Bytes sent By tomcat Conn.", "10 units <-> 1MB", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Sent", "10 units <-> 1MB", true, 1); - -// -// if (indexDiff != 0) { -// yMax = dataDiff[0].longValue(); -// for (int i = 1; i < index; i++) { -// yMax = Math.max(yMax, dataDiff[i].longValue()); -// // looking for k and n where: k.10^n <= yMax < (k+1).10^n -// } -// tmp = yMax; -// n = 0; -// while ((tmp / 10) >= 1) { -// tmp = tmp / 10; -// n++; -// } -// k = tmp % 10; -// // pow = 10^n -// pow = 1; -// for (int i = 0; i < n; i++) { -// pow = pow * 10; -// // draw the range on the y axis: -// } -// //let's draw diff graph. -// GraphUtils.drawGraph(g, k, xLength, width, pow , n, indexDiff, dataDiff, MAX_MEASURE_EXPECTED_VALUE, "Sent per t Time", "Bytes", 2); -// //don't display total count -// GraphUtils.drawCurrentUsedPerTotal(g, currentTx - previousByteSent, new Long(0), xLength, "Sent", "Bytes", false, 2); -// } - dataDiff[indexDiff ] = currentTx - previousByteSent; - indexDiff ++; - previousByteSent = currentTx; - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionFailuresJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionFailuresJCAConnectionServlet.java deleted file mode 100644 index 384eb98d92..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionFailuresJCAConnectionServlet.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ConnectionFailuresJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 8265608909415909884L; - //there is a totalConnectionCount -// there is a totalConnectionCount = CurrentOpenedJCAConnection - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ConnectionFailuresJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1 ]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Conn. Failures", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Failures", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJCAConnectionServlet.java deleted file mode 100644 index a91cf846c5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJCAConnectionServlet.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ConnectionLeaksJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -7296812030890829812L; - //there is a totalConnectionCount -// there is a totalConnectionCount = currentOpenedJCAConnection - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ConnectionLeaksJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Conn. Leaks", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Leaks", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJDBCResourceServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJDBCResourceServlet.java deleted file mode 100644 index 5cef6080cc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ConnectionLeaksJDBCResourceServlet.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ConnectionLeaksJDBCResourceServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -7372380403806313536L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ConnectionLeaksJDBCResource", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJDBCResource", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JDBC Res. leaks", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Leaks", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJCAConnectionServlet.java deleted file mode 100644 index 581c6ab7b6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJCAConnectionServlet.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentBusyJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 7842648805573847930L; - //there is a totalConnectionCount -// there is a totalConnectionCount = currentOpenedJCAConnection - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentBusyJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Busy Conn.", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Busy", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJDBCResourceServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJDBCResourceServlet.java deleted file mode 100644 index e1bc2fddec..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentBusyJDBCResourceServlet.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentBusyJDBCResourceServlet extends HttpServlet{ - - /** - * - */ - private static final long serialVersionUID = 8218496745548208073L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentBusyJDBCResource", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJDBCResource", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JDBC Busy Conn.", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Busy", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEJBServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEJBServlet.java deleted file mode 100644 index bbfccd80e7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEJBServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentNumberOfEJBServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -3898700762000221209L; -// compare current value with a total bean value that should be = CurrentNumberOfEntityBean + CurrentNumberOfMDB -// + CurrentNumberOfEJB + CurrentNumberOfSBF + CurrentNumberOfSBL - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEJB", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEntityBean", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfMDB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBF", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBL", serverName)); - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "EJB count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "EJB count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEntityBeanServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEntityBeanServlet.java deleted file mode 100644 index 7fd263fc7c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfEntityBeanServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentNumberOfEntityBeanServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -1041865079729162762L; -// compare current value with a total bean value that should be = CurrentNumberOfEntityBean + CurrentNumberOfMDB -// + CurrentNumberOfEJB + CurrentNumberOfSBF + CurrentNumberOfSBL - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEntityBean", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEJB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfMDB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBF", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBL", serverName)); - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1 ]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "EntityBeans count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "EntityBeans count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfMDBServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfMDBServlet.java deleted file mode 100644 index 96e72a2c3c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfMDBServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentNumberOfMDBServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 2910441259009648860L; -//compare current value with a total bean value that should be = CurrentNumberOfEntityBean + CurrentNumberOfMDB -// + CurrentNumberOfEJB + CurrentNumberOfSBF + CurrentNumberOfSBL - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfMDB", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEJB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEntityBean", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBF", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBL", serverName)); - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "ModelDrivenBeans count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "MDB count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBFServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBFServlet.java deleted file mode 100644 index 6506f5f98e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBFServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentNumberOfSBFServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -4956381037054607447L; -// compare current value with a total bean value that should be = CurrentNumberOfEntityBean + CurrentNumberOfMDB -// + CurrentNumberOfEJB + CurrentNumberOfSBF + CurrentNumberOfSBL - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBF", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEJB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEntityBean", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfMDB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBL", serverName)); - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "SFSB count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "SFSB count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBLServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBLServlet.java deleted file mode 100644 index c6fb28266a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentNumberOfSBLServlet.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class CurrentNumberOfSBLServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -8089314794037573587L; -// compare current value with a total bean value that should be = CurrentNumberOfEntityBean + CurrentNumberOfMDB -// + CurrentNumberOfEJB + CurrentNumberOfSBF + CurrentNumberOfSBL - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBL", serverName)); - Long current = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEJB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfEntityBean", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfMDB", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentNumberOfSBF", serverName)); - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "SLSB count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "SLSB count", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentUsedMemoryServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentUsedMemoryServlet.java deleted file mode 100644 index 9151933a1d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/CurrentUsedMemoryServlet.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import javax.servlet.http.HttpServlet; - -public class CurrentUsedMemoryServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -3056153216436786469L; - //there is a total used memory: see memory serverMemory graph in Action's monitoring folder - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/EditMemoryServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/EditMemoryServlet.java deleted file mode 100644 index 9625ce599a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/EditMemoryServlet.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author eyindanga - * - */ -public class EditMemoryServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 2811457205023298020L; - //totalBytesReceived = BytesSentByConnectorTomcat + BytesReceivedByConnectorTomcat - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - Long currentTx = ((Long) (JonasManagementRepr.getAttribute(srvOn, "CurrentUsedMemory", serverName))).longValue(); - //convert n KB - //scale :10 units = 1 megaB - currentTx = (currentTx * 10 )/(1024 * 1024); - total = currentTx - + - ((Long) (JonasManagementRepr.getAttribute(srvOn, "CurrentTotalMemory", serverName))).longValue() *10 /(1024 * 1024); - - - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i] + 1; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Current Used Memory.", "10 units <-> 1MB", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Used Memory", "10 units <-> 1MB", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ErrorCountByConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ErrorCountByConnectorTomcatServlet.java deleted file mode 100644 index 9a8516f811..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ErrorCountByConnectorTomcatServlet.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ErrorCountByConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -2439171288861298843L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ErrorCountByConnectorTomcat", serverName)); - Long current = new Long(currentInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1 ]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Tomcat Conn. errors count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "errors", "", false, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgDeliverServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgDeliverServlet.java deleted file mode 100644 index 0b53ff3f04..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgDeliverServlet.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class JmsQMsgDeliverServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 4280730122580894649L; - //there is a totalNbMsg = JmsQueuesNbMsgsDeliverSinceCreationServlet + JmsQueuesNbMsgsReceiveSinceCreationServlet - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsQueuesNbMsgsDeliverSinceCreation", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = - currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsQueuesNbMsgsReceiveSinceCreation", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JMS Queue msg received", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Received", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgReceiveServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgReceiveServlet.java deleted file mode 100644 index f6af98c5c8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsQMsgReceiveServlet.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class JmsQMsgReceiveServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 6589664528291225805L; - //there is a totalNbMsg = JmsQMsgDeliverServlet + JmsQueuesNbMsgsReceiveSinceCreationServlet - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsQueuesNbMsgsReceiveSinceCreation", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = - currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsQueuesNbMsgsDeliverSinceCreation", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JMSQueue sent msg", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Sent", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgDeliverServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgDeliverServlet.java deleted file mode 100644 index 5009d7bae6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgDeliverServlet.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class JmsTopicMsgDeliverServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -4009022007743899705L; -// there is a totalNbMsg = JmsTopicsNbMsgsDeliverSinceCreationServlet + JmsTopicsNbMsgsReceiveSinceCreationServlet - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsTopicsNbMsgsDeliverSinceCreation", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = - currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsTopicsNbMsgsReceiveSinceCreation", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JMSTopics delivered msg", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Delivered", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgReceiveServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgReceiveServlet.java deleted file mode 100644 index 4cd8234a2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/JmsTopicMsgReceiveServlet.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class JmsTopicMsgReceiveServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 8025236788425610824L; -// there is a totalNbMsg = JmsTopicsNbMsgsDeliverSinceCreationServlet + JmsTopicsNbMsgsReceiveSinceCreationServlet - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsTopicsNbMsgsReceiveSinceCreation", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = - currentInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "JmsTopicsNbMsgsDeliverSinceCreation", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JMSTopics received msg", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Received", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/LoadCPUServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/LoadCPUServlet.java deleted file mode 100644 index 424273d7c6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/LoadCPUServlet.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import javax.servlet.http.HttpServlet; - -public class LoadCPUServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -1543871682926617906L; - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ProcessingTimeByConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ProcessingTimeByConnectorTomcatServlet.java deleted file mode 100644 index 1981150a7a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ProcessingTimeByConnectorTomcatServlet.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ProcessingTimeByConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -257331601332562258L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - Long current = ((Long) (JonasManagementRepr.getAttribute(srvOn, "ProcessingTimeByConnectorTomcat", serverName))).longValue(); - //convert in seconds - current /= 1000; - - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Tomcat Conn. Processing Time", "Sec.", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "Processing Time", "Sec.", false, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJCAConnectionServlet.java deleted file mode 100644 index 6f24ced7ce..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJCAConnectionServlet.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class RejectedOpenJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -4934579943860811420L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "RejectedOpenJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Conn. rejected", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Rejected", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJDBCResourceServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJDBCResourceServlet.java deleted file mode 100644 index ae3791915e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RejectedOpenJDBCResourceServlet.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class RejectedOpenJDBCResourceServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 425153847610532305L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "RejectedOpenJDBCResource", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJDBCResource", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JDBC Res. rejected", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Rejected", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RequestCountByConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RequestCountByConnectorTomcatServlet.java deleted file mode 100644 index 1b38711394..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/RequestCountByConnectorTomcatServlet.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class RequestCountByConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -3276679556789727554L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "RequestCountByConnectorTomcat", serverName)); - Long current = new Long(currentInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = current; - } else { - data[index] = current; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Tomcat Conn. Request count", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, current, total, xLength, "request count", "", false, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJCAConnectionServlet.java deleted file mode 100644 index ba88c7496c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJCAConnectionServlet.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ServedOpenJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 3619957645830312067L; - //there is a totalConnectionCount -// there is a totalConnectionCount = currentOpenedJCAConnection - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ServedOpenJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Conn. served", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Served", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJDBCResourceServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJDBCResourceServlet.java deleted file mode 100644 index ccb055c973..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ServedOpenJDBCResourceServlet.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ServedOpenJDBCResourceServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 7821841175971112736L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "ServedOpenJDBCResource", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJDBCResource", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JDBC Res. served", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Served", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ThreadBusyConnectorTomcatServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ThreadBusyConnectorTomcatServlet.java deleted file mode 100644 index 88829aaabc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/ThreadBusyConnectorTomcatServlet.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class ThreadBusyConnectorTomcatServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -6069573169818914077L; - //there is a totalThreadCount = CurrentThreadCountByConnectorTomcatServlet - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentThreadBusyByConnectorTomcat", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentThreadCountByConnectorTomcat", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Tomcat Conn. busy threads", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Busy", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalCommittedTransactionsServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalCommittedTransactionsServlet.java deleted file mode 100644 index 476aecc762..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalCommittedTransactionsServlet.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class TotalCommittedTransactionsServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 968614864994663203L; -// there is a totalTransaction number - //totalTransactionCount = TotalBegunTransactions + TotalCommittedTransactions - // + TotalCurrentTransactions + TotalExpiredTransactions - // TotalRolledbackTransactions - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long totalTx = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentTxInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCommittedTransactions", serverName)); - Long currentTx = new Long(currentTxInt).longValue(); - int totalTxInt = 0; - if (totalTx == 0) { - totalTxInt = currentTxInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalExpiredTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalBegunTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalRolledbackTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - - totalTx = new Long(totalTxInt).longValue(); - } - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "Committed Tx", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, totalTx, xLength, "Committed", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalExpiredTransactionsServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalExpiredTransactionsServlet.java deleted file mode 100644 index 0a5f2bd18e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalExpiredTransactionsServlet.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class TotalExpiredTransactionsServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 378891802875504600L; -// there is a totalTransaction number - //totalTransactionCount = TotalBegunTransactions + TotalCommittedTransactions - // + TotalCurrentTransactions + TotalExpiredTransactions - // TotalRolledbackTransactions - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long totalTx = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentTxInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalExpiredTransactions", serverName)); - Long currentTx = new Long(currentTxInt).longValue(); - int totalTxInt = 0; - if (totalTx == 0) { - totalTxInt = currentTxInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCommittedTransactions", serverName)) - +(Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalBegunTransactions", serverName)) - +(Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalRolledbackTransactions", serverName)) - +(Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - - totalTx = new Long(totalTxInt).longValue(); - } - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "expired Tx", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, totalTx, xLength, "Expired", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalRolledbackTransactionsServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalRolledbackTransactionsServlet.java deleted file mode 100644 index d06b9d5cb2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/TotalRolledbackTransactionsServlet.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class TotalRolledbackTransactionsServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 661354852427619697L; -// there is a totalTransaction number - //totalTransactionCount = TotalBegunTransactions + TotalCommittedTransactions - // + TotalCurrentTransactions + TotalExpiredTransactions - // TotalRolledbackTransactions - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long totalTx = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentTxInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalRolledbackTransactions", serverName)); - Long currentTx = new Long(currentTxInt).longValue(); - int totalTxInt = 0; - if (totalTx == 0) { - totalTxInt = currentTxInt - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCommittedTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalExpiredTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalBegunTransactions", serverName)) - + - (Integer) (JonasManagementRepr.getAttribute(srvOn, "TotalCurrentTransactions", serverName)); - - totalTx = new Long(totalTxInt).longValue(); - } - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "RolledBack Tx", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, totalTx, xLength, "RolledBack", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJCAConnectionServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJCAConnectionServlet.java deleted file mode 100644 index a4df64d37d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJCAConnectionServlet.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class WaiterCountJCAConnectionServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = 4429591203084727572L; - //there is a totalConnectionCount -// there is a totalConnectionCount = currentOpenedJCAConnection - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "WaiterCountJCAConnection", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJCAConnection", serverName)); - - - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JCA Conn. waiters", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Waiters", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJDBCResourceServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJDBCResourceServlet.java deleted file mode 100644 index 28e1ed1b2c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WaiterCountJDBCResourceServlet.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import java.awt.Graphics; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.io.OutputStream; - -import javax.imageio.IIOException; -import javax.imageio.ImageIO; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils.GraphUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class WaiterCountJDBCResourceServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -1139520431164474285L; - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - //data source - private Long[] data; - private int index = 0; - //default number ofmeasures - private static final int DEF_NUM_MESURE = 120; - @SuppressWarnings("unused") - private static final long DEF_EPSILON_VALUE = (long) 0.0000000000001; - private long total = 0; - //over his value, number of thread is critical - private static Long MAX_MEASURE_EXPECTED_VALUE = new Long(100); - - - /** - * Respond to a GET request for the content produced by - * this servlet. - * - * @param req The servlet request we are processing - * @param res The servlet response we are producing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doGet(HttpServletRequest req, HttpServletResponse res) - - throws IOException, ServletException { - if (data == null) { - data = new Long[DEF_NUM_MESURE]; - } - HttpSession oSession = req.getSession(); - WhereAreYou oWhere = (WhereAreYou) oSession.getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - ObjectName srvOn = (ObjectName) oSession.getAttribute("srvOn"); - res.setContentType("image/png"); - OutputStream out = res.getOutputStream(); - //GET THE DATA TO DISPLAY - - - int currentInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "WaiterCountJDBCResource", serverName)); - Long currentTx = new Long(currentInt).longValue(); - int totalInt = 0; - totalInt = (Integer) (JonasManagementRepr.getAttribute(srvOn, "CurrentOpenedJDBCResource", serverName)); - total = new Long(totalInt).longValue(); - if (index == data.length - 1) { - for (int i = 0; i < data.length-1; i++) { - data[i] = data[i + 1]; - } - data[index] = currentTx; - } else { - data[index] = currentTx; - index ++; - } - // search the max value in the data array: - long yMax = data[0].longValue(); - for (int i = 1; i < index; i++) { - yMax = Math.max(yMax, data[i].longValue()); - // looking for k and n where: k.10^n <= yMax < (k+1).10^n - } - long tmp = yMax; - int n = 0; - while ((tmp / 10) >= 1) { - tmp = tmp / 10; - n++; - } - long k = tmp % 10; - // pow = 10^n - int pow = 1; - for (int i = 0; i < n; i++) { - pow = pow * 10; - // draw the range on the y axis: - } - // secondly, the current memory used: - int xLength = GraphUtils.DEF_SPACE_BETWEEN_LINES * data.length + GraphUtils.GAUGE_TEXT_MAX_LENGTH ; - int width = GraphUtils.LEFT_MARGIN + xLength + GraphUtils.HORIZONTAL_SPACE + GraphUtils.GAUGE_WIDTH + GraphUtils.RIGHT_MARGIN; - BufferedImage img = new BufferedImage(width, GraphUtils.HEIGHT, BufferedImage.TYPE_INT_RGB); - Graphics g = img.getGraphics(); -// TODO draw main graph here - GraphUtils.drawGraph(g, k, xLength, width, pow , n, index, data, MAX_MEASURE_EXPECTED_VALUE, "JDBC Res. waiters", "", 1); - GraphUtils.drawCurrentUsedPerTotal(g, currentTx, total, xLength, "Waiters", "", true, 1); - try { - ImageIO.write(img, "png", out); - } catch (IIOException iioe) { - logger.log(BasicLevel.DEBUG, "Flushing problem", iioe); - } - out.close(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WorkersServlet.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WorkersServlet.java deleted file mode 100644 index ade37d7674..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/servlets/server/WorkersServlet.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server; - -import javax.servlet.http.HttpServlet; - -public class WorkersServlet extends HttpServlet { - - /** - * - */ - private static final long serialVersionUID = -7710130414417622932L; - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/utils/GraphUtils.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/utils/GraphUtils.java deleted file mode 100644 index a6f3d746aa..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/monitoring/graph/utils/GraphUtils.java +++ /dev/null @@ -1,231 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $$Id$$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.monitoring.graph.utils; - -import java.awt.Color; -import java.awt.Graphics; - -public class GraphUtils { - public final static int DEF_SIZE_TABLE_MEASURES = 120; - public final static int DEF_RANGE = 10; - //this index will be increased when getting a memory value from proxy mandatory - public static final int DEF_NUM_MESURE = 120; - - public static final int HEIGHT = 180; - public static final int TOP_MARGIN = 35; - public static final int RIGHT_MARGIN = 80; - public static final int BOTTOM_MARGIN = 2; - public static final int LEFT_MARGIN = 70; - public static final int HORIZONTAL_SPACE = 30; - - public static final int Y_LENGTH = HEIGHT - TOP_MARGIN - BOTTOM_MARGIN; // the graph height - public static final int GAUGE_WIDTH = 10; - - public static final Color BG_COLOR = new Color(0x006699); - public static final Color FG_COLOR = Color.white; - public static final Color GRAPHICS_BG_COLOR = Color.lightGray; - public static final Color GAUGE_FG_COLOR = new Color(0x2A7FFF); - public static final Color GRAPHICS_FG_COLOR = Color.darkGray; - public static final Color AXIS_COLOR = Color.white; - public static final Color TEXT_COLOR = Color.white; - public static final Color HORIZONTAL_LINE_COLOR = new Color(0x006699); - //space between lines of the graph - public static final int DEF_SPACE_BETWEEN_LINES = 4; - public static final int GAUGE_TEXT_MAX_LENGTH = 20; - public static final int GRAPHIC_SEPARATOR = 5; - - - /** - * @param length the data array size (data.length) - * @return the picture width when displaying an array of the specified size - */ - public synchronized static int getWidth(int length) { - return LEFT_MARGIN + 2 * length + HORIZONTAL_SPACE + GAUGE_WIDTH + RIGHT_MARGIN; - } - - /** - * @return the picture height - */ - public synchronized static int getHeight() { - return HEIGHT; - } - - public synchronized static int cartesianXToGraphicsX(int x) { - return x + LEFT_MARGIN; - } - - /** - * - * @param y the value to convert into cartesian - * @param factor represents the graph rank on the image stream - * @return cartesian value of first parameter. - */ - - public synchronized static int cartesianYToGraphicsY(int y, int factor) { - if (factor == 1) { - return HEIGHT - 2 - y - BOTTOM_MARGIN; - } - return (HEIGHT * factor + GRAPHIC_SEPARATOR) - 2 - y - BOTTOM_MARGIN; - } - /** - * Draw main monitoring Graph - * @param g the graphic (contained in the servlet image) - * @param k used when - * @param xLength 2*monitored data number - * @param width Graph width, depends on xLength - * @param pow = 10^n - * @param n - * @param data datas to draw - * @param maxExpectedValue over this value, current measured value is considered critical - */ - - public synchronized static void drawGraph(Graphics g, long k, int xLength, int width, int pow ,int n, int index, Long[] data, Long maxExpectedValue, String graphTitle, String meausreUnit, int graphRank) { - // fill the image background: - g.setColor(BG_COLOR); - g.fillRect(0, 0, width, HEIGHT); - // firstly, the memory used history: - // draw the chart area: - g.setColor(GRAPHICS_BG_COLOR); - // g.fillRect(cartesianXToGraphicsX(0), cartesianYToGraphicsY(Y_LENGTH), xLength - 1, Y_LENGTH); - g.fill3DRect(cartesianXToGraphicsX(0), cartesianYToGraphicsY(Y_LENGTH, graphRank), xLength - 1, Y_LENGTH, true); - for (int i = 1; i <= k; i++) { - int y = (new Long(i * Y_LENGTH / (k + 1))).intValue(); - g.setColor(FG_COLOR); - g.drawLine(cartesianXToGraphicsX( -3), cartesianYToGraphicsY(y, graphRank) - , cartesianXToGraphicsX(xLength), cartesianYToGraphicsY(y, graphRank)); - g.setColor(TEXT_COLOR); - g.drawString("" + (i * pow), cartesianXToGraphicsX( -18 - n * 6) - , cartesianYToGraphicsY(y - 5, graphRank)); - } - // draw the values: - int xLineBottom = 0; - int xLineTop = 0; - int yLineBottom = 0; - int yLineTop = 0; - - int xLineTopPrevious = 0; - int yLineTopPrevious = 0; - - for (int i = 0; i < index; i++) { - int y = (new Long(data[i].longValue() * Y_LENGTH / ((k + 1) * pow))).intValue(); - //draw vertical line - g.setColor(Color.green); - xLineBottom = GraphUtils.cartesianXToGraphicsX(DEF_SPACE_BETWEEN_LINES * i); - yLineBottom = GraphUtils.cartesianYToGraphicsY(0, graphRank); - xLineTop = GraphUtils.cartesianXToGraphicsX(DEF_SPACE_BETWEEN_LINES * i); - yLineTop = GraphUtils.cartesianYToGraphicsY(y, graphRank); - g.drawLine(xLineBottom, yLineBottom - , xLineTop, yLineTop); - if (i != 0) { - //draw horizontal line - g.setColor(HORIZONTAL_LINE_COLOR); - g.drawLine( xLineTopPrevious, yLineTopPrevious - , xLineTop, yLineTop); - } - xLineTopPrevious = xLineTop; - yLineTopPrevious = yLineTop; - } - - g.setColor(TEXT_COLOR); - g.drawString(graphTitle, cartesianXToGraphicsX(0) - , cartesianYToGraphicsY(Y_LENGTH + 20, graphRank)); - g.drawString(meausreUnit, cartesianXToGraphicsX(0), cartesianYToGraphicsY(Y_LENGTH + 10, graphRank)); - g.drawString("0", cartesianXToGraphicsX( -12), cartesianYToGraphicsY( -5, graphRank)); - g.setColor(AXIS_COLOR); - g.drawLine(cartesianXToGraphicsX( -3), cartesianYToGraphicsY(0, graphRank) - , cartesianXToGraphicsX(xLength), cartesianYToGraphicsY(0, graphRank)); - g.drawLine(cartesianXToGraphicsX( -1), cartesianYToGraphicsY(0, graphRank), cartesianXToGraphicsX( -1) - , cartesianYToGraphicsY(Y_LENGTH, graphRank)); - g.drawLine(cartesianXToGraphicsX(xLength - 2), cartesianYToGraphicsY(0, graphRank) - , cartesianXToGraphicsX(xLength - 2), cartesianYToGraphicsY(Y_LENGTH, graphRank)); - - - - } - - /** - * Draw a box on right of monitoring graph to show current used value - * compared to total value - * @param g The main graphic. The drawn box will be added in this graphic - * @param currentUsed current used value of a given measure - * @param total total used value of a measure - * @param xLength width of the box - * @param usedLabel label to display for currentUsed value - * @param unit measure unit (e.g MB for memory measure) - * @param compareWithTotal if true then the graph will display comparison betxeen current and total value - */ - - public synchronized static void drawCurrentUsedPerTotal(Graphics g, Long currentUsed, Long total, int xLength, String usedLabel, String unit, boolean compareWithTotal, int graphRank) { - int xGauge = LEFT_MARGIN + xLength + HORIZONTAL_SPACE; - - g.setColor(GRAPHICS_BG_COLOR); - g.fillRect(xGauge, cartesianYToGraphicsY(Y_LENGTH, graphRank), GAUGE_WIDTH, Y_LENGTH); - - - int y = 0; - g.setColor(GAUGE_FG_COLOR); - if (compareWithTotal) { - if (total != 0) { - y = (new Long(currentUsed * Y_LENGTH / total)).intValue(); - //to avoid division by zero - } - g.fillRect(xGauge, cartesianYToGraphicsY(y, graphRank), GAUGE_WIDTH, y); - g.setColor(AXIS_COLOR); - g.drawRect(xGauge, cartesianYToGraphicsY(Y_LENGTH, graphRank), GAUGE_WIDTH, Y_LENGTH); - - g.setColor(TEXT_COLOR); - g.drawString("0", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY( -7, graphRank)); - g.drawString("" + currentUsed, xGauge + GAUGE_WIDTH + 3 - , cartesianYToGraphicsY(Math.min(y - 5, Y_LENGTH - 25), graphRank)); - g.drawString("(current)", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Math.min(y - 15 - , Y_LENGTH - 35), graphRank)); - g.drawString("" + total, xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 5, graphRank)); - g.drawString("(total)", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 15, graphRank)); - g.drawString(usedLabel, xGauge, cartesianYToGraphicsY(Y_LENGTH + 20, graphRank)); - g.drawString(unit, xGauge, cartesianYToGraphicsY(Y_LENGTH + 10, graphRank)); - } else { - //Don't draw the graph comparison between current and total value - y = (new Long(Y_LENGTH )).intValue(); - g.fillRect(xGauge, cartesianYToGraphicsY(y, graphRank), GAUGE_WIDTH, y); - g.setColor(AXIS_COLOR); - g.drawRect(xGauge, cartesianYToGraphicsY(Y_LENGTH, graphRank), GAUGE_WIDTH, Y_LENGTH); - - g.setColor(TEXT_COLOR); - g.drawString("0", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY( -7, graphRank)); - g.drawString("" + currentUsed, xGauge + GAUGE_WIDTH + 3 - , cartesianYToGraphicsY(Math.min(y - 5, Y_LENGTH - 25), graphRank)); - g.drawString("(current)", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Math.min(y - 15 - , Y_LENGTH - 35), graphRank)); - g.drawString("" , xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 5, graphRank)); - g.drawString("", xGauge + GAUGE_WIDTH + 3, cartesianYToGraphicsY(Y_LENGTH - 15, graphRank)); - g.drawString(usedLabel, xGauge, cartesianYToGraphicsY(Y_LENGTH + 20, graphRank)); - g.drawString(unit, xGauge, cartesianYToGraphicsY(Y_LENGTH + 10, graphRank)); - } - - - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyConfirmDestinationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyConfirmDestinationsAction.java deleted file mode 100644 index 7020cc2eb2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyConfirmDestinationsAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ -public class ApplyConfirmDestinationsAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - ItemsDestinationsForm oForm = (ItemsDestinationsForm) m_Session.getAttribute("itemsDestinationsForm"); - try { - String[] asParam = new String[1]; - String[] asSignature = {"java.lang.String"}; - ObjectName onJmsMB = JonasObjectName.jmsService(domainName); - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = (String) oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(onJmsMB, "removeJmsDestination", asParam, asSignature, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to action - return (p_Mapping.findForward("ActionListJmsResources")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDatasourcePropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDatasourcePropertiesAction.java deleted file mode 100644 index 0f46827f81..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDatasourcePropertiesAction.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class ApplyDatasourcePropertiesAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - DatasourcePropertiesForm oForm = (DatasourcePropertiesForm) p_Form; - try { - // populate and deploy (load resource) - populate(oForm, domainName, serverName); - // refresh tree - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_DATASOURCE); - refreshTree(p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Remove form - m_Session.removeAttribute("datasourcePropertiesForm"); - // Forward to the jsp. - return (p_Mapping.findForward("ActionListDatasources")); - } - -// --------------------------------------------------------- Protected Methods - - private static final String DEF_CLASSNAME = "no class name"; - private static final String DEF_URL = "no url"; - private static final String DEF_DESCRIPTION = "no desc"; - private static final String DEF_USERNAME = ""; - private static final String DEF_PASSWORD = ""; - private static final String DEF_FACTORY = "none"; - private static final String DEF_MAPPERNAME = "rdb"; - - protected void populate(DatasourcePropertiesForm p_Form, String domainName, String serverName) - throws Exception { - Properties oProps = new Properties(); - setStringAttribute(oProps, "datasource.name", p_Form.getDatasourceName()); - setStringAttribute(oProps, "datasource.description", p_Form.getDatasourceDescription() - , DEF_DESCRIPTION); - setStringAttribute(oProps, "datasource.url", p_Form.getDatasourceUrl(), DEF_URL); - setStringAttribute(oProps, "datasource.classname", p_Form.getDatasourceClassname() - , DEF_CLASSNAME); - setStringAttribute(oProps, "datasource.username", p_Form.getDatasourceUsername() - , DEF_USERNAME); - setStringAttribute(oProps, "datasource.password", p_Form.getDatasourcePassword() - , DEF_PASSWORD); - setStringAttribute(oProps, "datasource.mapper", p_Form.getDatasourceMapper() - , DEF_MAPPERNAME); - setStringAttribute(oProps, "jdbc.connmaxage", p_Form.getJdbcConnmaxage()); - setStringAttribute(oProps, "jdbc.maxopentime", p_Form.getJdbcMaxopentime()); - setStringAttribute(oProps, "jdbc.connchecklevel", p_Form.getJdbcConnchecklevel()); - setStringAttribute(oProps, "jdbc.connteststmt", p_Form.getJdbcConnteststmt()); - setStringAttribute(oProps, "jdbc.minconpool", p_Form.getJdbcMinconpool()); - setStringAttribute(oProps, "jdbc.maxconpool", p_Form.getJdbcMaxconpool()); - setStringAttribute(oProps, "jdbc.maxwaittime", p_Form.getJdbcMaxwaittime()); - setStringAttribute(oProps, "jdbc.maxwaiters", p_Form.getJdbcMaxwaiters()); - setStringAttribute(oProps, "jdbc.samplingperiod", p_Form.getJdbcSamplingperiod()); - setStringAttribute(oProps, "jdbc.adjustperiod", p_Form.getJdbcAdjustperiod()); - - // Load Datasource - Object[] aoParam = { - p_Form.getName(), oProps, new Boolean(false)}; - String[] asSign_3 = { - "java.lang.String", "java.util.Properties", "java.lang.Boolean"}; - JonasManagementRepr.invoke(JonasObjectName.databaseService(domainName), "loadDataSource", aoParam - , asSign_3, serverName); - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationAction.java deleted file mode 100644 index a6186802d4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - - -/** - * @author Adriana Danes - * Creation of new destinations - */ - -public class ApplyDestinationAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - DestinationForm oForm = (DestinationForm) p_Form; - - try { - String name = oForm.getName(); - // Create a Jms destination - // -- create a queue for the moment -- - ObjectName oObjectName = JonasObjectName.jmsService(domainName); - String[] asParam = { - oForm.getName() - }; - String[] asSignature = { - "java.lang.String" - }; - String type = oForm.getType(); - if (type.equals(m_Resources.getMessage("label.resource.destinations.queue"))) - JonasManagementRepr.invoke(oObjectName, "createJmsQueueDestination", asParam, asSignature, serverName); - else if (type.equals(m_Resources.getMessage("label.resource.destinations.topic"))) - JonasManagementRepr.invoke(oObjectName, "createJmsTopicDestination", asParam, asSignature, serverName); - - // refresh tree - refreshServiceTree(WhereAreYou.DEPLOYMENT_JMS, p_Request); - - oForm.reset(p_Mapping, p_Request); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Create Destination")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationsAction.java deleted file mode 100644 index 401e106e66..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyDestinationsAction.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class ApplyDestinationsAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ItemsDestinationsForm oForm = (ItemsDestinationsForm) p_Form; - - try { - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Confirm Destinations")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMailFactoryPropertiesAction.java deleted file mode 100644 index b5d515afe3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMailFactoryPropertiesAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ -public class ApplyMailFactoryPropertiesAction extends EditMailFactoryPropertiesAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - MailFactoryPropertiesForm oForm = (MailFactoryPropertiesForm) m_Session.getAttribute("mailFactoryPropertiesForm"); - // Mail factory name - String name = oForm.getMailFactoryName(); - String type = oForm.getType(); - try { - // Create and load the session mail factory - boolean mimePartFactory; - if (type.equals("javax.mail.internet.MimePartDataSource")) - mimePartFactory = true; - else { - mimePartFactory = false; - } - Properties props = getPropsFromForm(oForm, mimePartFactory); - Boolean fromFile = new Boolean(false); - Object[] aoParam = {name, props, fromFile}; - String[] asSign_3 = {"java.lang.String", "java.util.Properties", "java.lang.Boolean" }; - JonasManagementRepr.invoke(JonasObjectName.mailService(domainName), "createMailFactoryMBean", aoParam, asSign_3, serverName); - // refresh tree - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_MAIL); - refreshTree(p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Remove form - m_Session.removeAttribute("mailFactoryPropertiesForm"); - return (p_Mapping.findForward("ActionListMailFactories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMimePartMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMimePartMailFactoryPropertiesAction.java deleted file mode 100644 index 6fbf966d2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplyMimePartMailFactoryPropertiesAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ -public class ApplyMimePartMailFactoryPropertiesAction extends EditMailFactoryPropertiesAction { - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - MailFactoryPropertiesForm oForm = (MailFactoryPropertiesForm) m_Session.getAttribute("mailFactoryPropertiesForm"); - // Mail factory name - String name = oForm.getMailFactoryName(); - try { - // Create and load the session mail factory - boolean mimePartFactory = true; - Properties props = getPropsFromForm(oForm, mimePartFactory); - Boolean fromFile = new Boolean(true); - Object[] aoParam = { name, props, fromFile }; - String[] asSign_3 = { "java.lang.String", "java.util.Properties", "java.lang.Boolean" }; - JonasManagementRepr.invoke(JonasObjectName.mailService(domainName), "createMailFactoryMBean", aoParam, asSign_3, serverName); - // refresh tree - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_MAIL); - refreshTree(p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Remove form - m_Session.removeAttribute(""); - return (p_Mapping.findForward("ActionListMailFactories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplySessionMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplySessionMailFactoryPropertiesAction.java deleted file mode 100644 index 19414db762..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ApplySessionMailFactoryPropertiesAction.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ -public class ApplySessionMailFactoryPropertiesAction extends EditMailFactoryPropertiesAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - MailFactoryPropertiesForm oForm = (MailFactoryPropertiesForm) m_Session.getAttribute("mailFactoryPropertiesForm"); - // Mail factory name - String name = oForm.getMailFactoryName(); - try { - // Create and load the session mail factory - boolean mimePartFactory = false; - Properties props = getPropsFromForm(oForm, mimePartFactory); - Boolean fromFile = new Boolean(true); - Object[] aoParam = { name, props, fromFile }; - String[] asSign_3 = { "java.lang.String", "java.util.Properties", "java.lang.Boolean" }; - JonasManagementRepr.invoke(JonasObjectName.mailService(domainName), "createMailFactoryMBean", aoParam, asSign_3, serverName); - // refresh tree - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_MAIL); - refreshTree(p_Request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Remove form - m_Session.removeAttribute("mailFactoryPropertiesForm"); - return (p_Mapping.findForward("ActionListMailFactories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DatasourcePropertiesForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DatasourcePropertiesForm.java deleted file mode 100644 index 7ebfae65b0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DatasourcePropertiesForm.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange Anton - */ -public class DatasourcePropertiesForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String datasourceName = null; - private String datasourceDescription = null; - private String datasourceUrl = null; - private String datasourceClassname = null; - private String datasourceUsername = null; - private String datasourcePassword = null; - private String datasourceMapper = null; - private String jdbcConnteststmt = null; - private String jdbcConnchecklevel = null; - private String jdbcConnmaxage = null; - private String jdbcMaxopentime = null; - private String jdbcMaxconpool = null; - private String jdbcMinconpool = null; - private String jdbcMaxwaittime = null; - private String jdbcMaxwaiters = null; - private String jdbcSamplingperiod = null; - private String jdbcAdjustperiod = null; - - private java.util.List booleanValues = Jlists.getBooleanValues(); - private java.util.List checkingLevels = Jlists.getJdbcConnectionCheckingLevels(); - private String action = "edit"; - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - // Reset datas - name = null; - datasourceName = null; - datasourceDescription = null; - datasourceUrl = null; - datasourceClassname = null; - datasourceUsername = null; - datasourcePassword = null; - datasourceMapper = null; - - jdbcConnmaxage = "1440"; - jdbcMaxopentime = "1440"; - jdbcConnchecklevel = "1"; - jdbcConnteststmt = "SELECT 1"; - jdbcMinconpool = "0"; - jdbcMaxconpool = "-1"; - jdbcMaxwaittime = "10"; - jdbcMaxwaiters = "1000"; - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((name == null) || (name.length() == 0)) { - oErrors.add("name" - , new ActionMessage("error.resource.datasource.properties.name.required")); - } - if ((datasourceName == null) || (datasourceName.length() == 0)) { - oErrors.add("datasourceName" - , new ActionMessage("error.resource.datasource.properties.datasourceName.required")); - } - if ((datasourceClassname == null) || (datasourceClassname.length() == 0)) { - oErrors.add("datasourceClassname" - , new ActionMessage("error.resource.datasource.properties.datasourceClassname.required")); - } - validateInteger(oErrors, jdbcConnmaxage, "jdbcConnmaxage" - , "error.resource.datasource.properties.jdbcConnmaxage.numberformat"); - validateInteger(oErrors, jdbcMaxopentime, "jdbcMaxopentime" - , "error.resource.datasource.properties.jdbcMaxopentime.numberformat"); - validateInteger(oErrors, jdbcMinconpool, "jdbcMinconpool" - , "error.resource.datasource.properties.jdbcMinconpool.numberformat"); - validateInteger(oErrors, jdbcMaxconpool, "jdbcMaxconpool" - , "error.resource.datasource.properties.jdbcMaxconpool.numberformat"); - validateInteger(oErrors, jdbcMaxwaittime, "jdbcMaxwaittime" - , "error.resource.datasource.properties.jdbcMaxwaitime.numberformat"); - validateInteger(oErrors, jdbcMaxwaiters, "jdbcMaxwaiters" - , "error.resource.datasource.properties.jdbcMaxwaiters.numberformat"); - return oErrors; - } - - protected void validateInteger(ActionErrors p_Errors, String p_Value, String p_Tag - , String p_ResError) { - try { - Integer.parseInt(p_Value); - } catch (NumberFormatException e) { - p_Errors.add(p_Tag, new ActionMessage(p_ResError)); - } - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDatasourceName() { - return datasourceName; - } - - public void setDatasourceName(String datasourceName) { - this.datasourceName = datasourceName; - } - - public String getDatasourceDescription() { - return datasourceDescription; - } - - public void setDatasourceDescription(String datasourceDescription) { - this.datasourceDescription = datasourceDescription; - } - - public String getDatasourceUrl() { - return datasourceUrl; - } - - public void setDatasourceUrl(String datasourceUrl) { - this.datasourceUrl = datasourceUrl; - } - - public String getDatasourceClassname() { - return datasourceClassname; - } - - public void setDatasourceClassname(String datasourceClassname) { - this.datasourceClassname = datasourceClassname; - } - - public String getDatasourceUsername() { - return datasourceUsername; - } - - public void setDatasourceUsername(String datasourceUsername) { - this.datasourceUsername = datasourceUsername; - } - - public String getDatasourcePassword() { - return datasourcePassword; - } - - public void setDatasourcePassword(String datasourcePassword) { - this.datasourcePassword = datasourcePassword; - } - - public String getDatasourceMapper() { - return datasourceMapper; - } - - public void setDatasourceMapper(String datasourceMapper) { - this.datasourceMapper = datasourceMapper; - } - - public String getJdbcConnmaxage() { - return jdbcConnmaxage; - } - - public void setJdbcConnmaxage(String s) { - jdbcConnmaxage = s; - } - - public String getJdbcMaxopentime() { - return jdbcMaxopentime; - } - - public void setJdbcMaxopentime(String s) { - jdbcMaxopentime = s; - } - - public String getJdbcConnchecklevel() { - return jdbcConnchecklevel; - } - - public void setJdbcConnchecklevel(String jdbcConnchecklevel) { - this.jdbcConnchecklevel = jdbcConnchecklevel; - } - - public String getJdbcConnteststmt() { - return jdbcConnteststmt; - } - - public void setJdbcConnteststmt(String jdbcConnteststmt) { - this.jdbcConnteststmt = jdbcConnteststmt; - } - - public String getJdbcMinconpool() { - return jdbcMinconpool; - } - - public void setJdbcMinconpool(String jdbcMinconpool) { - this.jdbcMinconpool = jdbcMinconpool; - } - - public String getJdbcMaxconpool() { - return jdbcMaxconpool; - } - - public void setJdbcMaxconpool(String jdbcMaxconpool) { - this.jdbcMaxconpool = jdbcMaxconpool; - } - - public String getJdbcMaxwaittime() { - return jdbcMaxwaittime; - } - - public void setJdbcMaxwaittime(String jdbcMaxwaittime) { - this.jdbcMaxwaittime = jdbcMaxwaittime; - } - - public String getJdbcMaxwaiters() { - return jdbcMaxwaiters; - } - - public void setJdbcMaxwaiters(String jdbcMaxwaiters) { - this.jdbcMaxwaiters = jdbcMaxwaiters; - } - - public String getJdbcSamplingperiod() { - return jdbcSamplingperiod; - } - - public void setJdbcSamplingperiod(String s) { - this.jdbcSamplingperiod = s; - } - - public String getJdbcAdjustperiod() { - return jdbcAdjustperiod; - } - - public void setJdbcAdjustperiod(String s) { - this.jdbcAdjustperiod = s; - } - - public java.util.List getBooleanValues() { - return booleanValues; - } - - public java.util.List getCheckingLevels() { - return checkingLevels; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationForm.java deleted file mode 100644 index 4c1e6b2247..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationForm.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class DestinationForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String type = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - type = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.resource.jms.create.name.required")); - } - if (getType() == null) { - oErrors.add("type", new ActionMessage("error.resource.jms.create.type.required")); - } - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItem.java deleted file mode 100644 index 990457a27c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItem.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Adriana Danes - */ -public class DestinationItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String name = null; - private String type = null; - private boolean used = false; - - public DestinationItem() { - } - - public DestinationItem(String p_Name, String p_Type, boolean p_Used) { - setName(p_Name); - setType(p_Type); - setUsed(p_Used); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public boolean isUsed() { - return used; - } - - public void setUsed(boolean used) { - this.used = used; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItemByNameComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItemByNameComparator.java deleted file mode 100644 index 547ad295ab..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/DestinationItemByNameComparator.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.util.Comparator; - -public class DestinationItemByNameComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - DestinationItem o_1 = (DestinationItem) p_O1; - DestinationItem o_2 = (DestinationItem) p_O2; - return o_1.getName().compareToIgnoreCase(o_2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof DestinationItem) { - return true; - } - return false; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDatasourcePropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDatasourcePropertiesAction.java deleted file mode 100644 index b8f1547b7c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDatasourcePropertiesAction.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditDatasourcePropertiesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Datasource to create - String sAction = p_Request.getParameter("action"); - if (sAction == null) { - sAction ="edit"; - } - // Datasource to edit - String sName = p_Request.getParameter("name"); - - DatasourcePropertiesForm oForm = null; - oForm = new DatasourcePropertiesForm(); - m_Session.setAttribute("datasourcePropertiesForm", oForm); - oForm.reset(p_Mapping, p_Request); - oForm.setAction(sAction); - - // Populate - if (sName != null) { - try { - populate(sName, oForm, domainName, serverName); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } - // Forward to the jsp. - return (p_Mapping.findForward("Datasource Properties")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(String p_Name, DatasourcePropertiesForm p_Form, String domainName, String serverName) - throws Exception { - - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asParam[0] = p_Name; - asSignature[0] = "java.lang.String"; - - Properties oProps = (Properties) JonasManagementRepr.invoke(JonasObjectName.databaseService(domainName) - , "getDataSourcePropertiesFile", asParam, asSignature, serverName); - // Populate - p_Form.setName(p_Name); - p_Form.setDatasourceName(getStringAttribute(oProps, "datasource.name" - , p_Form.getDatasourceName())); - p_Form.setDatasourceDescription(getStringAttribute(oProps, "datasource.description" - , p_Form.getDatasourceDescription())); - p_Form.setDatasourceUrl(getStringAttribute(oProps, "datasource.url" - , p_Form.getDatasourceUrl())); - p_Form.setDatasourceClassname(getStringAttribute(oProps, "datasource.classname" - , p_Form.getDatasourceClassname())); - p_Form.setDatasourceUsername(getStringAttribute(oProps, "datasource.username" - , p_Form.getDatasourceUsername())); - p_Form.setDatasourcePassword(getStringAttribute(oProps, "datasource.password" - , p_Form.getDatasourcePassword())); - p_Form.setDatasourceMapper(getStringAttribute(oProps, "datasource.mapper" - , p_Form.getDatasourceMapper())); - p_Form.setJdbcConnmaxage(getStringAttribute(oProps, "jdbc.connmaxage" - , p_Form.getJdbcConnmaxage())); - p_Form.setJdbcMaxopentime(getStringAttribute(oProps, "jdbc.maxopentime" - , p_Form.getJdbcMaxopentime())); - p_Form.setJdbcConnchecklevel(getStringAttribute(oProps, "jdbc.connchecklevel" - , p_Form.getJdbcConnchecklevel())); - p_Form.setJdbcConnteststmt(getStringAttribute(oProps, "jdbc.connteststmt" - , p_Form.getJdbcConnteststmt())); - p_Form.setJdbcMinconpool(getStringAttribute(oProps, "jdbc.minconpool" - , p_Form.getJdbcMinconpool())); - p_Form.setJdbcMaxconpool(getStringAttribute(oProps, "jdbc.maxconpool" - , p_Form.getJdbcMaxconpool())); - p_Form.setJdbcMaxwaittime(getStringAttribute(oProps, "jdbc.maxwaittime" - , p_Form.getJdbcMaxwaittime())); - p_Form.setJdbcMaxwaiters(getStringAttribute(oProps, "jdbc.maxwaiters" - , p_Form.getJdbcMaxwaiters())); - p_Form.setJdbcSamplingperiod(getStringAttribute(oProps, "jdbc.samplingperiod" - , p_Form.getJdbcSamplingperiod())); - p_Form.setJdbcAdjustperiod(getStringAttribute(oProps, "jdbc.adjustperiod" - , p_Form.getJdbcAdjustperiod())); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDestinationAction.java deleted file mode 100644 index bc3cf59de2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditDestinationAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditDestinationAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Forward to the jsp. - return (p_Mapping.findForward("Create Destination")); - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMailFactoryPropertiesAction.java deleted file mode 100644 index 95a8e4d9b5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMailFactoryPropertiesAction.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Properties; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Helper for actions for the deployment of Mail Factories - * @author Adriana Danes - */ -public class EditMailFactoryPropertiesAction extends BaseDeployAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String sAction = p_Request.getParameter("action"); - MailFactoryPropertiesForm oForm = new MailFactoryPropertiesForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("mailFactoryPropertiesForm", oForm); - String name = ""; - Properties props = new Properties(); - try { - populate(name, props, oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("MailFactory Properties")); - } - /** - * Populate a form with configuration properties read in a configuration file - * - * @param mailFactoryName the name of the mail factory - * @param props properties to configure the mail factory - * param pForm the form used to print-out the configuration properties - */ - void populate(String mailFactoryName, Properties props, MailFactoryPropertiesForm pForm) throws Exception { - // Set configuration attributes - // - mail factory name - pForm.setMailFactoryName(mailFactoryName); - // - jndi name - pForm.setJndiName(getStringAttribute(props, "mail.factory.name", pForm.getJndiName())); - props.remove("mail.factory.name"); - // - type - pForm.setType(getStringAttribute(props, "mail.factory.type", pForm.getType())); - props.remove("mail.factory.type"); - - // Set authentication properties - pForm.setUsername(getStringAttribute(props, "mail.authentication.username", pForm.getUsername())); - props.remove("mail.authentication.username"); - pForm.setPassword(getStringAttribute(props, "mail.authentication.password", pForm.getPassword())); - props.remove("mail.authentication.password"); - - // Set mime part properties - pForm.setTo(getStringAttribute(props, "mail.to", pForm.getTo())); - pForm.setSubject(getStringAttribute(props, "mail.subject", pForm.getSubject())); - pForm.setCc(getStringAttribute(props, "mail.cc", pForm.getCc())); - pForm.setBcc(getStringAttribute(props, "mail.bcc", pForm.getBcc())); - props.remove("mail.to"); - props.remove("mail.subject"); - props.remove("mail.cc"); - props.remove("mail.bcc"); - - // Set the rest of the properties as session properties - String aName = null; - String aValue = null; - StringBuffer bufSessionProps = new StringBuffer(); - for(Enumeration pNames = props.propertyNames(); pNames.hasMoreElements() ; ) { - aName = (String)pNames.nextElement(); - aValue = (String)props.getProperty(aName); - bufSessionProps.append(aName); - bufSessionProps.append("="); - bufSessionProps.append(aValue); - bufSessionProps.append(","); - bufSessionProps.append("\n"); - } - if (!props.isEmpty()) { - // delete the last 2 chars (, and \n) - bufSessionProps.delete(bufSessionProps.length() - 2, bufSessionProps.length() - 1); - } else { - // Actually no chars in sessionPropsBuf - //System.out.println("no session props, append mail.host= "); - bufSessionProps.append("mail.host="); - } - String sSessionProps = new String(bufSessionProps); - pForm.setSessionProps(sSessionProps); - } - - /** - * Use a form's content to create the Properties object needed to create and load a Mail factory - * - */ - Properties getPropsFromForm(MailFactoryPropertiesForm p_Form, boolean mimepart) throws Exception { - Properties oProps = new Properties(); - Properties sProps = getPropsFromString(p_Form.getSessionProps()); - oProps.putAll(sProps); - setStringAttribute(oProps, "mail.factory.name", p_Form.getJndiName()); - setStringAttribute(oProps, "mail.factory.type", p_Form.getType()); - setStringAttribute(oProps, "mail.authentication.username", p_Form.getUsername()); - setStringAttribute(oProps, "mail.authentication.password", p_Form.getPassword()); - String aName = null; - String aValue = null; - for(Enumeration pNames = oProps.propertyNames(); pNames.hasMoreElements() ; ) { - aName = (String) pNames.nextElement(); - aValue = (String) oProps.getProperty(aName); - } - if (mimepart == true) { - setStringAttribute(oProps, "mail.to", p_Form.getTo()); - setStringAttribute(oProps, "mail.subject", p_Form.getSubject()); - setStringAttribute(oProps, "mail.cc", p_Form.getCc()); - setStringAttribute(oProps, "mail.bcc", p_Form.getBcc()); - } - return oProps; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMimePartMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMimePartMailFactoryPropertiesAction.java deleted file mode 100644 index 8c7de40467..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditMimePartMailFactoryPropertiesAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - - -/** - * - */ -public class EditMimePartMailFactoryPropertiesAction extends EditMailFactoryPropertiesAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Mail factory to edit - String sName = p_Request.getParameter("name"); - - // Form used - MailFactoryPropertiesForm oForm = (MailFactoryPropertiesForm) m_Session.getAttribute("mailFactoryPropertiesForm"); - if (oForm == null) { - // Create form - oForm = new MailFactoryPropertiesForm(); - m_Session.setAttribute("mailFactoryPropertiesForm", oForm); - } - - try { - ObjectName mailServMBean = JonasObjectName.mailService(domainName); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asParam[0] = sName; - asSignature[0] = "java.lang.String"; - Properties oProps = (Properties) JonasManagementRepr.invoke(mailServMBean, "getMailFactoryPropertiesFile", asParam, asSignature, serverName); - populate(sName, oProps, oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("MimePart Properties")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditSessionMailFactoryPropertiesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditSessionMailFactoryPropertiesAction.java deleted file mode 100644 index bb6fddbf87..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/EditSessionMailFactoryPropertiesAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class EditSessionMailFactoryPropertiesAction extends EditMailFactoryPropertiesAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - String sAction = p_Request.getParameter("action"); - // Mail factory to edit - String sName = p_Request.getParameter("name"); - // Form used - MailFactoryPropertiesForm oForm = (MailFactoryPropertiesForm) m_Session.getAttribute("mailFactoryPropertiesForm"); - if (oForm == null) { - // Create form - oForm = new MailFactoryPropertiesForm(); - m_Session.setAttribute("mailFactoryPropertiesForm", oForm); - } - - try { - ObjectName mailServMBean = JonasObjectName.mailService(domainName); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asParam[0] = sName; - asSignature[0] = "java.lang.String"; - Properties oProps = (Properties) JonasManagementRepr.invoke(mailServMBean, "getMailFactoryPropertiesFile", asParam, asSignature, serverName); - populate(sName, oProps, oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Session Properties")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ItemsDestinationsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ItemsDestinationsForm.java deleted file mode 100644 index 6c5e97eac2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ItemsDestinationsForm.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class ItemsDestinationsForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListDatasourcesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListDatasourcesAction.java deleted file mode 100644 index 967bb8c7db..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListDatasourcesAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.service.db.DatasourceItem; -import org.ow2.jonas.webapp.jonasadmin.service.db.DatasourceItemByNameComparator; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ListDatasourcesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // no Form used - try { - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - ArrayList alDeployable = JonasAdminJmx.getDatasourceFilesDeployable(domainName, serverName); - ArrayList alDeployed = JonasAdminJmx.getDatasourceFilesDeployed(domainName, serverName); - - ArrayList al = new ArrayList(); - String sName; - boolean bDeployed; - Iterator it = alDeployable.iterator(); - while (it.hasNext()) { - sName = it.next().toString(); - bDeployed = alDeployed.contains(sName); - al.add(new DatasourceItem(sName, bDeployed)); - } - Collections.sort(al, new DatasourceItemByNameComparator()); - // Set list in the request - p_Request.setAttribute("listDatasources", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Datasources")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListJmsResourcesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListJmsResourcesAction.java deleted file mode 100644 index 7874dc2b6e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListJmsResourcesAction.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Set; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ListJmsResourcesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - try { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - String asDestName = null; - - // Prepare access to ejbContainer service in order to chech dependences - ObjectName ejbServiceMB = JonasObjectName.ejbService(domainName); - boolean registeredEjbService = JonasManagementRepr.isRegistered(ejbServiceMB, serverName); - - // Get queues - ArrayList alQueues = new ArrayList(); - ArrayList al = JonasAdminJmx.getQueuesList(domainName, serverName); - if (al != null) { - for (int i = 0; i < al.size(); i++) { - asDestName = al.get(i).toString(); - boolean deps = false; - // Chech dependences - if (registeredEjbService) { - deps = hasDeps(asDestName, ejbServiceMB, serverName); - } - alQueues.add(new DestinationItem(asDestName, "queue", deps)); - } - Collections.sort(alQueues, new DestinationItemByNameComparator()); - } - // Get topics - ArrayList alTopics = new ArrayList(); - al = JonasAdminJmx.getTopicsList(domainName, serverName); - if (al != null) { - for (int i = 0; i < al.size(); i++) { - asDestName = al.get(i).toString(); - boolean deps = false; - // Chech dependences - if (registeredEjbService) { - deps = hasDeps(asDestName, ejbServiceMB, serverName); - } - alTopics.add(new DestinationItem(al.get(i).toString(), "topic", deps)); - } - Collections.sort(alTopics, new DestinationItemByNameComparator()); - } - - // merge alQueues and alTopics in alDestinations - ArrayList alDestinations = new ArrayList(alQueues); - alDestinations.addAll(alTopics); - - p_Request.setAttribute("destinationsList", alDestinations); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Jms Resources")); - } - - private boolean hasDeps(String destName, ObjectName ejbServiceMB, String serverName) { - String[] asParam = {destName }; - String[] asSignature = {"java.lang.String" }; - Set deps = (java.util.Set) JonasManagementRepr.invoke(ejbServiceMB, "getJmsDestinationDependence", asParam, asSignature, serverName); - boolean res = deps.size() > 0 ? true : false; - return res; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListMailFactoriesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListMailFactoriesAction.java deleted file mode 100644 index 8e89d09dd9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/ListMailFactoriesAction.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class ListMailFactoriesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // no Form used - try { - ArrayList alSessionDeployable = JonasAdminJmx.getSessionMailFilesDeployable(domainName, serverName); - ArrayList alMimePartDeployable = JonasAdminJmx.getMimePartMailFilesDeployable(domainName, serverName); - ArrayList alDeployed = JonasAdminJmx.getMailFilesDeployed(m_WhereAreYou); - - ArrayList al = new ArrayList(); - String sName; - boolean bDeployed; - Iterator it = alSessionDeployable.iterator(); - while (it.hasNext()) { - sName = it.next().toString(); - bDeployed = alDeployed.contains(sName); - al.add(new MailFactoryItem(sName, bDeployed, "session")); - } - it = alMimePartDeployable.iterator(); - while (it.hasNext()) { - sName = it.next().toString(); - bDeployed = alDeployed.contains(sName); - al.add(new MailFactoryItem(sName, bDeployed, "mimepart")); - } - //Collections.sort(al, new DatasourceItemByNameComparator()); - // Set list in the request - p_Request.setAttribute("listMailFactories", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("MailFactories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryItem.java deleted file mode 100644 index 12f6cd88c9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryItem.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - - -/** - * @author Adriana Danes - */ -public class MailFactoryItem implements NameItem { -// --------------------------------------------------------- Properties Variables - - private String name = null; - private boolean deployed = false; - private String type = null; -// --------------------------------------------------------- Constructors - - public MailFactoryItem() { - } - - public MailFactoryItem(String p_Name, boolean p_deployed, String p_type) { - setName(p_Name); - setDeployed(p_deployed); - setType(p_type); - } -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public boolean getDeployed() { - return deployed; - } - - public void setDeployed(boolean deployed) { - this.deployed = deployed; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryPropertiesForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryPropertiesForm.java deleted file mode 100644 index f5366263e4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/MailFactoryPropertiesForm.java +++ /dev/null @@ -1,185 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class MailFactoryPropertiesForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String mailFactoryName = null; - private String jndiName = null; - private String type = null; - // authentication props - private String username = null; - private String password = null; - // mail session props - private String sessionProps = null; - // mimepart datasource message props - private String to = null; - private String subject = null; - private String cc = null; - private String bcc = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - mailFactoryName = null; - jndiName = null; - type = null; - // authentication props - username = null; - password = null; - // mail session props - sessionProps = null; - // mimepart datasource message props - to = null; - subject = null; - cc = null; - bcc = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((jndiName == null) || (jndiName.length() == 0)) { - oErrors.add("jndiName", new ActionMessage("error.mailservice.mailfactory.emptyjndiname")); - } - if ((mailFactoryName == null) || (mailFactoryName.length() == 0)) { - oErrors.add("jndiName", new ActionMessage("error.mailservice.mailfactory.emptyname")); - } - if ((type == null) || (type.length() == 0)) { - oErrors.add("jndiName", new ActionMessage("error.mailservice.mailfactory.emptytype")); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getMailFactoryName() { - return mailFactoryName; - } - - public void setMailFactoryName(String mailFactoryName) { - this.mailFactoryName = mailFactoryName; - } - - public String getJndiName() { - return jndiName; - } - - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getSessionProps() { - return sessionProps; - } - - public void setSessionProps(String sessionProps) { - this.sessionProps = sessionProps; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String getCc() { - return cc; - } - - public void setCc(String cc) { - this.cc = cc; - } - - public String getBcc() { - return bcc; - } - - public void setBcc(String bcc) { - this.bcc = bcc; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/SaveDestinationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/SaveDestinationAction.java deleted file mode 100644 index 34114d8aeb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resource/SaveDestinationAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resource; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class SaveDestinationAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - ObjectName oObjectName = JonasObjectName.jmsService(domainName); - JonasManagementRepr.invoke(oObjectName, "saveConfig", null, null, serverName); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("ActionListJmsResources")); - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyCreateResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyCreateResourceAdapterAction.java deleted file mode 100644 index d4a23f0fd2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyCreateResourceAdapterAction.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resourceadapter; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; -import org.ow2.jonas.webapp.jonasadmin.xml.ArchiveConfigForm; - -/** - * The action used when a Resource Adapter is created. - * This uses a Velocity template to build up the XML and creates a RAR file. - * - * @author Patrick Smith - */ -public class ApplyCreateResourceAdapterAction extends BaseDeployAction { - - /** - * The location of JOnAS' base directory. - */ - private String jonasBase = JProp.getJonasBase(); - - /** - * The file separator to use for file access. - */ - private String fileSeparator = File.separator; - - /** - * The name of the directory that stores RARs. - */ - private String rarDir = "rars"; - - /** - * The extention the new files should use. - */ - private String extention = ".rar"; - -// --------------------------------------------------------- Public Methods - - /** - * The action to use when the Struts action is executed. - * Create the appropriate RAR and forward to the RAR configuration tool - * if no errors exist. - * @param p_Mapping The ActionMapping for the action. - * @param p_Form The form used in this action. - * @param p_Request HTTP Request for the action. - * @param p_Response The HTTP Response. - * @throws IOException if the there is a problem with the - * template files, creation of the RARs. - * @throws ServletException if the there is a servlet error. - * @return A forward to the next Struts page. - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - CreateResourceAdapterForm oForm = (CreateResourceAdapterForm) p_Form; - - // The path within the new RAR to edit in the xml editor. - String path; - - // Create a VelocityEngine and set the properties of where to find - // the templates for the specific rar files. - VelocityEngine ve = new VelocityEngine(); - ve.setProperty(VelocityEngine.VM_LIBRARY, ""); - ve.setProperty(VelocityEngine.RESOURCE_LOADER, "class"); - try { - if (oForm.getTemplate().equals("Other")) { - path = "META-INF/ra.xml"; - createRa(oForm, ve, domainName, serverName); - } else { - path = "META-INF/jonas-ra.xml"; - createJonasRa(oForm, ve, domainName, serverName); - } - } catch (Exception e) { - m_Errors.add("error.resourceadapter.load.fail", new ActionMessage( - "error.resourceadapter.load.fail", oForm.getRarName())); - saveErrors(p_Request, m_Errors); - if (oForm.getTemplate().equals("Other")) { - return (p_Mapping.findForward("Create Other Resource Adapter")); - } else { - return (p_Mapping.findForward("Create JDBC Resource Adapter")); - } - } - - - m_Session.removeAttribute("createResourceAdapterForm"); - - ArchiveConfigForm form = new ArchiveConfigForm(); - form.reset(); - - // set the list of deployable files, these are the only files that - // can be configured - form.setDeployable(JonasAdminJmx.getRarFilesDeployable(domainName, serverName)); - form.setIsDomain(isDomain()); - form.setJonasBase(getJonasBase()); - form.setArchiveName(oForm.getRarName() + extention); - form.setPathName(path); - m_Session.setAttribute("archiveConfigForm", form); - p_Request.setAttribute("file", path); - return (p_Mapping.findForward("ActionArchiveConfig")); - } - -// --------------------------------------------------------- Protected Methods - - /** - * Creates an empty jonas-ra.xml content header. - * @return The content of an empty jonas-ra XML file. - */ - protected String createEmptyJonasRa() { - StringBuffer sb = new StringBuffer(); - sb.append("\n"); - sb.append(""); - return sb.toString(); - } - - /** - * Create a ra.xml file (from a Velocity template) and adds it to a RAR file. - * @param oForm The struts form used in this Struts action. - * @param ve The Velocity engine that contains the appropriate template. - * @throws Exception If the invokation of creating the RAR or adding a file to the RAR fails. - */ - protected void createRa(final CreateResourceAdapterForm oForm, final VelocityEngine ve, final String domainName, final String serverName) throws Exception { - ve.init(); - VelocityContext context = new VelocityContext(); - context.put("oForm", oForm); - StringWriter st = new StringWriter(); - String packName = this.getClass().getPackage().getName().replace('/', '.'); - ve.mergeTemplate(packName + "/ra-xml.vm", context, st); - String raXml = st.toString(); - - ObjectName on = JonasAdminJmx.getArchiveConfigObjectName(domainName, serverName); - - String fileName = jonasBase + fileSeparator + rarDir + fileSeparator + oForm.getRarName() + extention; - - Object[] params = new Object[] {fileName, - "META-INF/ra.xml", - raXml}; - - String[] sig = new String[] {"java.lang.String", - "java.lang.String", - "java.lang.String" }; - - JonasManagementRepr.invoke(on, "createArchiveWithXmlFile", params, sig, serverName); - - params = new Object[] {fileName, - "META-INF/jonas-ra.xml", - createEmptyJonasRa()}; - JonasManagementRepr.invoke(on, "addXML", params, sig, serverName); - } - - /** - * Create a ra.xml file (from a Velocity template) and adds it to a RAR file. - * @param oForm The struts form used in this Struts action. - * @param ve The Velocity engine that contains the appropriate template. - * @throws Exception If the invokation of creating the RAR or adding a file to the RAR fails. - */ - protected void createJonasRa(final CreateResourceAdapterForm oForm, - final VelocityEngine ve, final String domainName, final String serverName) throws Exception { - ve.init(); - VelocityContext context = new VelocityContext(); - context.put("oForm", oForm); - StringWriter st = new StringWriter(); - String packName = this.getClass().getPackage().getName().replace('/', '.'); - ve.mergeTemplate(packName + "/jonas-ra-xml.vm", context, st); - String raXml = st.toString(); - ObjectName on = JonasAdminJmx.getArchiveConfigObjectName(domainName, serverName); - - String fileName = jonasBase + fileSeparator + rarDir + fileSeparator - + oForm.getRarName() + extention; - Object[] params = new Object[] {fileName, "META-INF/jonas-ra.xml", raXml }; - - String[] sig = new String[] {"java.lang.String", "java.lang.String", - "java.lang.String" }; - - JonasManagementRepr.invoke(on, "createArchiveWithXmlFile", params, sig, serverName); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyTemplateCreateResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyTemplateCreateResourceAdapterAction.java deleted file mode 100644 index 5e9405b8f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ApplyTemplateCreateResourceAdapterAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resourceadapter; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * This action is called when the user picks which type of Resource Archive to create. - * - * @author Patrick Smith - */ -public class ApplyTemplateCreateResourceAdapterAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - /** - * The action to use when the Struts action is executed. - * Directs the user to either template depending on which was selected. - * @param p_Mapping The ActionMapping for the action. - * @param p_Form The form used in this action. - * @param p_Request HTTP Request for the action. - * @param p_Response The HTTP Response. - * @throws IOException if the there is a problem with the - * template files, creation of the RARs. - * @throws ServletException if the there is a servlet error. - * @return A forward to the next Struts page. - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - CreateResourceAdapterForm oForm = (CreateResourceAdapterForm) p_Form; - m_Session.setAttribute("createResourceAdapterForm", oForm); - if (oForm.getTemplate().equals("Other")) { - oForm.setTemplate("Other"); - return (p_Mapping.findForward("Create Other Resource Adapter")); - } else { - oForm.setTemplate("JDBC"); - return (p_Mapping.findForward("Create JDBC Resource Adapter")); - } - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterAction.java deleted file mode 100644 index 2dc4da1017..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resourceadapter; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Forwards to the create resource adapter struts action. - * - * @author Patrick Smith - */ - -public class CreateResourceAdapterAction extends BaseDeployAction { - -// --------------------------------------------------------- Public Methods - - /** - * The action to use when the Struts action is executed. - * Forwards the user to the create resource adapter page. - * @param p_Mapping The ActionMapping for the action. - * @param p_Form The form used in this action. - * @param p_Request HTTP Request for the action. - * @param p_Response The HTTP Response. - * @throws IOException if the there is a problem with the - * template files, creation of the RARs. - * @throws ServletException if the there is a servlet error. - * @return A forward to the next Struts page. - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - CreateResourceAdapterForm oForm = null; - oForm = new CreateResourceAdapterForm(); - m_Session.setAttribute("createResourceAdapterForm", oForm); - oForm.reset(p_Mapping, p_Request); - oForm.setIsDomain(isDomain()); - - // Forward to the jsp. - return (p_Mapping.findForward("Create Resource Adapter")); - } - -// --------------------------------------------------------- Protected Methods - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterForm.java deleted file mode 100644 index fb8d79f5af..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/resourceadapter/CreateResourceAdapterForm.java +++ /dev/null @@ -1,709 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.resourceadapter; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -/** - * The form used for the create resource adapter functionality. - * - * @author Patrick Smith - */ -public class CreateResourceAdapterForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String rarName = null; - private String displayName = null; - private String description = null; - private String vendorName = null; - private String specVersion = null; - private String eisType = null; - private String template = "JDBC"; - private boolean isDomain = false; - - private String jndiName = null; - private String nativeLib = null; - private String logEnabled = null; - private String logTopic = null; - private int poolInit = 0; - private int poolMin = 0; - private int poolMax = 100; - private int poolMaxAge = 0; - private int pstmtMax = 10; - private String pstmtCachePolicy = null; - - private int poolMaxOpenTime = 0; - private int poolMaxWaiters = 0; - private int poolMaxWaittime = 0; - private int poolSamplingPeriod = 30; - private int checkLevel = 0; - private String dsClass = null; - private String URL = null; - private String user = null; - private String password = null; - private String loginTimeout = null; - private String isolationLevel = null; - private String mapperName = null; - private String configLogTopic = null; - - private List booleanValues = Jlists.getBooleanValues(); - private List checkingLevels = Jlists.getJdbcConnectionCheckingLevels(); - private List specVersions = Jlists.getSpecVersion(); - -// --------------------------------------------------------- Public Methods - - /** - * Returns the spec version. - * @return Returns the specVersions. - */ - public List getSpecVersions() { - return specVersions; - } - - /** - * Set the spec version for the form. - * @param specVersions The specVersions to set. - */ - public void setSpecVersions(final List specVersions) { - this.specVersions = specVersions; - } - - - /** - * Reset the form back to its default values. - * @param mapping the ActionMapping used for the struts actions. - * @param request the HttpServletRequest used in the execution of the struts actions. - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - // Reset datas - rarName = null; - displayName = null; - description = null; - vendorName = null; - specVersion = null; - eisType = null; - isDomain = false; - - jndiName = null; - nativeLib = null; - logEnabled = null; - logTopic = null; - poolInit = 0; - poolMin = 0; - poolMax = 100; - poolMaxAge = 0; - pstmtMax = 10; - pstmtCachePolicy = null; - poolMaxOpenTime = 0; - poolMaxWaiters = 0; - poolMaxWaittime = 0; - poolSamplingPeriod = 30; - checkLevel = 0; - dsClass = null; - URL = null; - user = null; - password = null; - loginTimeout = null; - isolationLevel = null; - mapperName = null; - configLogTopic = null; - } - - /** - * Validates the values in the form. - * @param mapping the ActionMapping used in the struts actions. - * @param request the HttpServletRequest used for the struts actions. - * @return The errors generated from the validation. - */ - @Override - public ActionErrors validate(final ActionMapping mapping, - final HttpServletRequest request) { - - ActionErrors oErrors = new ActionErrors(); - if ((rarName == null) || (rarName.length() == 0)) { - oErrors.add("name", new ActionMessage( - "error.resourceadapter.rarname.required")); - } - if (template.equals("Other")) { - if ((displayName == null) || (displayName.length() == 0)) { - oErrors.add("datasourceName", new ActionMessage( - "error.resourceadapter.displayname.required")); - } - if ((description == null) || (description.length() == 0)) { - oErrors.add("datasourceClassname", new ActionMessage( - "error.resourceadapter.description.required")); - } - if ((vendorName == null) || (vendorName.length() == 0)) { - oErrors.add("datasourceClassname", new ActionMessage( - "error.resourceadapter.vendorname.required")); - } - if ((specVersion == null) || (specVersion.length() == 0)) { - oErrors.add("datasourceClassname", new ActionMessage( - "error.resourceadapter.specversion.required")); - } - if ((eisType == null) || (eisType.length() == 0)) { - oErrors.add("datasourceClassname", new ActionMessage( - "error.resourceadapter.eistype.required")); - } - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - /** - * Return the name of the RAR file. - * @return the name of the RAR file. - */ - public String getRarName() { - return this.rarName; - } - - /** - * Sets the name of the RAR file. - * @param rarName the new name of the RAR file. - */ - public void setRarName(final String rarName) { - this.rarName = rarName; - } - - /** - * Returns the display name for this RAR. - * @return the RAR's display name. - */ - public String getDisplayName() { - return this.displayName; - } - - /** - * Sets the display name for this RAR. - * @param displayName The new display name. - */ - public void setDisplayName(final String displayName) { - this.displayName = displayName; - } - - /** - * Return the description for this RAR. - * @return the description for this RAR. - */ - public String getDescription() { - return this.description; - } - - /** - * Sets the description used for this RAR. - * @param description The new description for this RAR. - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * Returns the vendor name used for this RAR. - * @return The vendor name used for this RAR. - */ - public String getVendorName() { - return vendorName; - } - - /** - * Sets the vendor name used for this RAR. - * @param vendorName The new vendor name for this RAR. - */ - public void setVendorName(final String vendorName) { - this.vendorName = vendorName; - } - - /** - * Returns the spec version for this RAR. - * @return the spec version used for this RAR. - */ - public String getSpecVersion() { - return this.specVersion; - } - - /** - * Sets the spec version to use for this RAR. - * @param specVersion the new Spec version for this RAR. - */ - public void setSpecVersion(final String specVersion) { - this.specVersion = specVersion; - } - - /** - * Returns the EIS Type for this RAR. - * @return The EIS type for this RAR. - */ - public String getEisType() { - return this.eisType; - } - - /** - * Sets the EIS Type for this RAR. - * @param eisType The new EIS type to use for thsi RAR. - */ - public void setEisType(final String eisType) { - this.eisType = eisType; - } - - /** - * Returns which template this new RAR should be based on. - * @return which template this new RAR should be based on. - */ - public String getTemplate() { - return this.template; - } - - /** - * Sets which template to use for this RAR. - * @param template The new template to use. - */ - public void setTemplate(final String template) { - this.template = template; - } - - /** - * Returns this RAR's JNDI name. - * @return This RAR's JNDI name. - */ - public String getJndiName() { - return this.jndiName; - } - - /** - * Sets the JNDI name for this RAR. - * @param jndiName The JNDI name for this RAR. - */ - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - /** - * Returns the Native Lib to use for this RAR. - * @return The native Lib to use for this RAR. - */ - public String getNativeLib() { - return this.nativeLib; - } - - /** - * Sets the native lib to use for this RAR. - * @param nativeLib the new Native lib to use for this RAR. - */ - public void setNativeLib(final String nativeLib) { - this.nativeLib = nativeLib; - } - - /** - * If this RAR should be log enabled. - * @return if this RAR should be log enabled. - */ - public String getLogEnabled() { - return this.logEnabled; - } - - /** - * Sets if this RAR should be log enabled. - * @param logEnabled - */ - public void setLogEnabled(final String logEnabled) { - this.logEnabled = logEnabled; - } - - /** - * Get the log topic for this RAR. - * @return the log topic for this RAR. - */ - public String getLogTopic() { - return this.logTopic; - } - - /** - * Sets the log topic for this RAR. - * @param logTopic the new log topic for this RAR. - */ - public void setLogTopic(final String logTopic) { - this.logTopic = logTopic; - } - - /** - * Returns the pool init value for this RAR. - * @return the pool init value to use for this RAR. - */ - public int getPoolInit() { - return this.poolInit; - } - - /** - * Sets a new pool init value for this RAR. - * @param poolInit the new pool init value for this RAR. - */ - public void setPoolInit(final int poolInit) { - this.poolInit = poolInit; - } - - /** - * Returns the pool min value to use for this RAR. - * @return the pool min value to use for this RAR. - */ - public int getPoolMin() { - return this.poolMin; - } - - /** - * Sets the pool min value to use. - * @param poolMin The new pool min value to use for this RAR. - */ - public void setPoolMin(final int poolMin) { - this.poolMin = poolMin; - } - - /** - * Returns the pool max value used for this RAR. - * @return The pool max value used for this RAR. - */ - public int getPoolMax() { - return this.poolMax; - } - - /** - * Sets the pool max value of this new RAR. - * @param poolMax The new pool max value of this RAR.s - */ - public void setPoolMax(final int poolMax) { - this.poolMax = poolMax; - } - - /** - * Returns the pool max age for this new RAR. - * @return the pool max age value used for this RAR. - */ - public int getPoolMaxAge() { - return this.poolMaxAge; - } - - /** - * Sets the pool max age to use for this new RAR. - * @param poolMaxAge The new pool max age to use for this RAR. - */ - public void setPoolMaxAge(final int poolMaxAge) { - this.poolMaxAge = poolMaxAge; - } - - /** - * The PSTMT Max value for this RAR. - * @return the PSTMT max value used for this RAR. - */ - public int getPstmtMax() { - return this.pstmtMax; - } - - /** - * Sets the new PSTMT max value to use for this RAR. - * @param pstmtMax the new PSTMT max value to use. - */ - public void setPstmtMax(final int pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * The PSTMT cache policy value for this RAR. - * @return the PSTMT cache policy value used for this RAR. - */ - public String getPstmtCachePolicy() { - return this.pstmtCachePolicy; - } - - /** - * Sets the new PSTMT cache policy to use for this RAR. - * @param pstmtCachePolicy the new PSTMT cache policy to use. - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - - /** - * Returns the pool max open time value used for this RAR. - * @return The pool max open time value used for this RAR. - */ - public int getPoolMaxOpenTime() { - return this.poolMaxOpenTime; - } - - /** - * Sets the pool max open time value used for this RAR. - * @param poolMaxOpenTime The new pool max open time value to use. - */ - public void setPoolMaxOpenTime(final int poolMaxOpenTime) { - this.poolMaxOpenTime = poolMaxOpenTime; - } - - /** - * Returns the pool max waiters value used by this RAR. - * @return The pool max waiters value used. - */ - public int getPoolMaxWaiters() { - return this.poolMaxWaiters; - } - - /** - * Sets the pool max waiters value used by this RAR. - * @param poolMaxWaiters the new pool max waiters value to use. - */ - public void setPoolMaxWaiters(final int poolMaxWaiters) { - this.poolMaxWaiters = poolMaxWaiters; - } - - /** - * Get the pool max wait time value used by this RAR. - * @return The pool max wait time value. - */ - public int getPoolMaxWaittime() { - return this.poolMaxWaittime; - } - - /** - * Sets the poool max wait time value used. - * @param poolMaxWaittime The new Pool max wait time value to use. - */ - public void setPoolMaxWaittime(final int poolMaxWaittime) { - this.poolMaxWaittime = poolMaxWaittime; - } - - /** - * Get the pool sampling period value used for this RAR. - * @return The pool sampling period used. - */ - public int getPoolSamplingPeriod() { - return this.poolSamplingPeriod; - } - - /** - * Sets the pool sampling period value used for this new RAR. - * @param poolSamplingPeriod The new pool sampling period value to use. - */ - public void setPoolSamplingPeriod(final int poolSamplingPeriod) { - this.poolSamplingPeriod = poolSamplingPeriod; - } - - /** - * REturns the check level value for this new RAR. - * @return the check level value. - */ - public int getCheckLevel() { - return this.checkLevel; - } - - /** - * Sets the new check level value to use for this RAR. - * @param checkLevel the new check level value to use. - */ - public void setCheckLevel(final int checkLevel) { - this.checkLevel = checkLevel; - } - - /** - * Returns the DS Class used for this new RAR. - * @return The DS class used for this new RAR. - */ - public String getDsClass() { - return this.dsClass; - } - - /** - * Sets the DS Class to use for this new RAR. - * @param dsClass The new DS Class value to use for this RAR. - */ - public void setDsClass(final String dsClass) { - this.dsClass = dsClass; - } - - /** - * Returns the URL used in this RAR. - * @return the URL value used in this RAR. - */ - public String getURL() { - return this.URL; - } - - /** - * Sets the new URL value to use for this RAR. - * @param URL the new URL value to use for this RAR. - */ - public void setURL(final String URL) { - this.URL = URL; - } - - /** - * Returns the username used by this RAR. - * @return the username used by this RAR. - */ - public String getUser() { - return this.user; - } - - /** - * Set a new username to use in this RAR. - * @param user The new user name value for this RAR. - */ - public void setUser(final String user) { - this.user = user; - } - - /** - * Returns the password for the user of this RAR. - * @return the password for the user of this RAR. - */ - public String getPassword() { - return this.password; - } - - /** - * Set a new password for the user of this RAR. - * @param password the new password to use for this RAR. - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Returns the login timeout for this RAR. - * @return The login timeout for this RAR. - */ - public String getLoginTimeout() { - return this.loginTimeout; - } - - /** - * Sets a new login timeout value for this RAR. - * @param loginTimeout the new login timeout value for this RAR. - */ - public void setLoginTimeout(final String loginTimeout) { - this.loginTimeout = loginTimeout; - } - - /** - * Returns the isolation level used by this RAR. - * @return the isolation level used by this RAR. - */ - public String getIsolationLevel() { - return this.isolationLevel; - } - - /** - * Sets a new isolation level for this RAR to use. - * @param isolationLevel the new isolation level to use for this RAR. - */ - public void setIsolationLevel(final String isolationLevel) { - this.isolationLevel = isolationLevel; - } - - /** - * Returns the mapper name for this RAR. - * @return the mapper name for this RAR. - */ - public String getMapperName() { - return this.mapperName; - } - - /** - * Sets a new mapper name for this RAR to use. - * @param mapperName the new mapper name for this RAR to use. - */ - public void setMapperName(final String mapperName) { - this.mapperName = mapperName; - } - - /** - * Returns the config log topic for this RAR. - * @return the config log topic for this RAR. - */ - public String getConfigLogTopic() { - return this.configLogTopic; - } - - /** - * Sets a new config log topic for this RAR. - * @param configLogTopic the new config log topic to use for this RAR. - */ - public void setConfigLogTopic(final String configLogTopic) { - this.configLogTopic = configLogTopic; - } - - /** - * Return if the action is a domain management operation. - * @return if the action is a domain management operation. - */ - public boolean getIsDomain() { - return this.isDomain; - } - - /** - * Sets if the action is a domain management operation. - * @param isDomain if the action is a domain management operation. - */ - public void setIsDomain(final boolean isDomain) { - this.isDomain = isDomain; - } - /** - * @return Returns the booleanValues. - */ - public List getBooleanValues() { - return booleanValues; - } - /** - * @param booleanValues The booleanValues to set. - */ - public void setBooleanValues(final List booleanValues) { - this.booleanValues = booleanValues; - } - /** - * @return Returns the checkingLevels. - */ - public List getCheckingLevels() { - return checkingLevels; - } - /** - * @param checkingLevels The checkingLevels to set. - */ - public void setCheckingLevels(final List checkingLevels) { - this.checkingLevels = checkingLevels; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmMemoryRealmAction.java deleted file mode 100644 index 8d23942f8b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmMemoryRealmAction.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ApplyConfirmMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - String sForward = null; - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - // Form used - ItemsMemoryRealmForm oForm = (ItemsMemoryRealmForm) m_Session.getAttribute( - "itemsMemoryRealmForm"); - - // Actions - try { - String[] asParam = new String[1]; - String[] asSignature = { - "java.lang.String"}; - ObjectName onRealm = JonasObjectName.securityMemoryFactory(domainName, oRealmForm.getResource()); - - // User - if (oForm.getType().equals("user")) { - // Remove - if (oForm.getAction().equals("remove")) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(onRealm, "removeUser", asParam, asSignature, serverName); - } - } - sForward = "ActionEditMemoryRealmUsers"; - } - // Role - else if (oForm.getType().equals("role")) { - // Remove - if (oForm.getAction().equals("remove")) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(onRealm, "removeRole", asParam, asSignature, serverName); - } - } - sForward = "ActionEditMemoryRealmRoles"; - } - // Group - else if (oForm.getType().equals("group")) { - // Remove - if (oForm.getAction().equals("remove")) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(onRealm, "removeGroup", asParam, asSignature, serverName); - } - } - sForward = "ActionEditMemoryRealmGroups"; - } - // Release select list of the session - m_Session.removeAttribute("itemsMemoryRealmForm"); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward(sForward)); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmRealmsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmRealmsAction.java deleted file mode 100644 index bd0a4b70b4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyConfirmRealmsAction.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.RealmItem; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyConfirmRealmsAction extends BaseSecurityAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - String sForward = null; - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - ItemsRealmsForm oForm = (ItemsRealmsForm) p_Form; - - // Actions - try { - // Remove factories - if (oForm.getAction().equals("remove") == true) { - RealmItem oRealmItem = null; - String[] asParam = new String[1]; - String[] asSignature = {"java.lang.String"}; - ObjectName onSecurity = JonasObjectName.securityService(domainName); - for (int i = 0; i < oForm.getSelectedRealmItem().size(); i++) { - oRealmItem = (RealmItem) oForm.getSelectedRealmItem().get(i); - asParam[0] = oRealmItem.getName(); - JonasManagementRepr.invoke(onSecurity, "removeJResource", asParam, asSignature, serverName); - } - } - // Release select list of the session - m_Session.removeAttribute("itemsRealmsForm"); - // refresh tree - refreshTree(p_Request); - } - - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("ActionListRealms")); - } - - // --------------------------------------------------------- Protected - // Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyDatasourceRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyDatasourceRealmAction.java deleted file mode 100644 index ac7b4410da..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyDatasourceRealmAction.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ -public class ApplyDatasourceRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - DatasourceRealmForm oForm = (DatasourceRealmForm) p_Form; - - // Populate MBean - try { - // Create new - if (oForm.getAction().equals("create")) { - oForm.setResource(oForm.getName()); - // Add resource - ObjectName oObjectName = JonasObjectName.securityService(domainName); - String[] asParam = { - oForm.getName(), oForm.getDsName(), oForm.getUserTable() - , oForm.getUserTableUsernameCol(), oForm.getUserTablePasswordCol() - , oForm.getRoleTable(), oForm.getRoleTableRolenameCol() - , oForm.getRoleTableUsernameCol(), oForm.getAlgorithm()}; - String[] asSignature = { - "java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String"}; - JonasManagementRepr.invoke(oObjectName, "addJResourceDS", asParam, asSignature, serverName); - // refresh tree - refreshTree(p_Request); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.datasource" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - // To see the form - oForm.setAction("apply"); - } - else { - // Modify existing - ObjectName oObjectName = JonasObjectName.securityDatasourceFactory(domainName, - oForm.getResource()); - setStringAttribute(oObjectName, "DsName", oForm.getDsName()); - setStringAttribute(oObjectName, "RoleTable", oForm.getRoleTable()); - setStringAttribute(oObjectName, "RoleTableRolenameCol" - , oForm.getRoleTableRolenameCol()); - setStringAttribute(oObjectName, "RoleTableUsernameCol" - , oForm.getRoleTableUsernameCol()); - setStringAttribute(oObjectName, "UserTable", oForm.getUserTable()); - setStringAttribute(oObjectName, "UserTablePasswordCol" - , oForm.getUserTablePasswordCol()); - setStringAttribute(oObjectName, "UserTableUsernameCol" - , oForm.getUserTableUsernameCol()); - setStringAttribute(oObjectName, "Algorithm", oForm.getAlgorithm()); - } - // Save - if (oForm.isSave()) { - ObjectName onRealm = JonasObjectName.securityDatasourceFactory(domainName, - oForm.getResource()); - JonasManagementRepr.invoke(onRealm, "saveConfig", null, null, serverName); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Datasource Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyGroupMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyGroupMemoryRealmAction.java deleted file mode 100644 index 772a621898..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyGroupMemoryRealmAction.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ApplyGroupMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Form used - GroupMemoryRealmForm oForm = (GroupMemoryRealmForm) p_Form; - - oForm.setListRolesUsed(Jlists.getArrayList(oForm.getRolesUsed(), Jlists.SEPARATOR)); - oForm.setListRolesNotused(Jlists.getArrayList(oForm.getRolesNotused(), Jlists.SEPARATOR)); - - ArrayList alAddRoles = new ArrayList(oForm.getListRolesUsed()); - alAddRoles.removeAll(oForm.getListRolesGroup()); - ArrayList alRemoveRoles = new ArrayList(oForm.getListRolesNotused()); - alRemoveRoles.retainAll(oForm.getListRolesGroup()); - - // Populate MBean - try { - ObjectName onGroup = null; - // Create a new Group - if (oForm.getAction().equals("create")) { - ObjectName onRealm = JonasObjectName.securityMemoryFactory(domainName, oRealmForm.getResource()); - String[] asParam = { - oForm.getGroup()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onRealm, "addGroup", asParam, asSignature, serverName); - // Search created Group - onGroup = JonasObjectName.group(domainName, oRealmForm.getResource(), oForm.getGroup()); - } else { - // Modify existing Group - onGroup = JonasObjectName.group(domainName, oRealmForm.getResource(), oForm.getGroup()); - } - // Description - setStringAttribute(onGroup, "Description", oForm.getDescription()); - - // Roles - if (alAddRoles.size() > 0) { - for (int i = 0; i < alAddRoles.size(); i++) { - String[] asParam = { - alAddRoles.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onGroup, "addRole", asParam, asSignature, serverName); - } - } - if (alRemoveRoles.size() > 0) { - for (int i = 0; i < alRemoveRoles.size(); i++) { - String[] asParam = { - alRemoveRoles.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onGroup, "removeRole", asParam, asSignature, serverName); - } - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditMemoryRealmGroups")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyLdapRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyLdapRealmAction.java deleted file mode 100644 index 211e725f0b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyLdapRealmAction.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class ApplyLdapRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - LdapRealmForm oForm = (LdapRealmForm) p_Form; - - // Populate MBean - try { - // Create new - if (oForm.getAction().equals("create")) { - oForm.setResource(oForm.getName()); - // Add resource - ObjectName oObjectName = JonasObjectName.securityService(domainName); - String[] asParam = { - oForm.getName(), oForm.getInitialContextFactory(), oForm.getProviderUrl() - , oForm.getSecurityAuthentication(), oForm.getSecurityPrincipal() - , oForm.getSecurityCredentials(), oForm.getSecurityProtocol() - , oForm.getLanguage(), oForm.getReferral(), oForm.getStateFactories() - , oForm.getAuthenticationMode(), oForm.getUserPasswordAttribute() - , oForm.getUserRolesAttribute(), oForm.getRoleNameAttribute(), oForm.getBaseDn() - , oForm.getUserDn(), oForm.getUserSearchFilter(), oForm.getRoleDn() - , oForm.getRoleSearchFilter(), oForm.getAlgorithm()}; - String[] asSignature = { - "java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String", "java.lang.String", "java.lang.String" - , "java.lang.String"}; - JonasManagementRepr.invoke(oObjectName, "addJResourceLDAP", asParam, asSignature, serverName); - // refresh tree - refreshTree(p_Request); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.ldap" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - // To see the form - oForm.setAction("apply"); - } - else { - // Modify existing - ObjectName oObjectName = JonasObjectName.securityLdapFactory(domainName, oForm.getResource()); - setStringAttribute(oObjectName, "AuthenticationMode", oForm.getAuthenticationMode()); - setStringAttribute(oObjectName, "BaseDN", oForm.getBaseDn()); - setStringAttribute(oObjectName, "InitialContextFactory" - , oForm.getInitialContextFactory()); - setStringAttribute(oObjectName, "Language", oForm.getLanguage()); - setStringAttribute(oObjectName, "ProviderUrl", oForm.getProviderUrl()); - setStringAttribute(oObjectName, "Referral", oForm.getReferral()); - setStringAttribute(oObjectName, "RoleDN", oForm.getRoleDn()); - setStringAttribute(oObjectName, "RoleNameAttribute", oForm.getRoleNameAttribute()); - setStringAttribute(oObjectName, "RoleSearchFilter", oForm.getRoleSearchFilter()); - setStringAttribute(oObjectName, "SecurityAuthentication" - , oForm.getSecurityAuthentication()); - setStringAttribute(oObjectName, "SecurityCredentials", oForm.getSecurityCredentials()); - setStringAttribute(oObjectName, "SecurityPrincipal", oForm.getSecurityPrincipal()); - setStringAttribute(oObjectName, "SecurityProtocol", oForm.getSecurityProtocol()); - setStringAttribute(oObjectName, "StateFactories", oForm.getStateFactories()); - setStringAttribute(oObjectName, "UserDN", oForm.getUserDn()); - setStringAttribute(oObjectName, "UserPasswordAttribute" - , oForm.getUserPasswordAttribute()); - setStringAttribute(oObjectName, "UserRolesAttribute", oForm.getUserRolesAttribute()); - setStringAttribute(oObjectName, "UserSearchFilter", oForm.getUserSearchFilter()); - setStringAttribute(oObjectName, "Algorithm", oForm.getAlgorithm()); - } - // Save - if (oForm.isSave()) { - ObjectName onRealm = JonasObjectName.securityLdapFactory(domainName, oForm.getResource()); - JonasManagementRepr.invoke(onRealm, "saveConfig", null, null, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Ldap Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyMemoryRealmAction.java deleted file mode 100644 index 1f5dc6a53c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyMemoryRealmAction.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class ApplyMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - MemoryRealmForm oForm = (MemoryRealmForm) p_Form; - - // Populate MBean - try { - // Create new - if (oForm.getAction().equals("create")) { - oForm.setResource(oForm.getName()); - // Add resource - ObjectName oObjectName = JonasObjectName.securityService(domainName); - String[] asParam = { - oForm.getName()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(oObjectName, "addJResourceMemory", asParam, asSignature, serverName); - // refresh tree - refreshTree(p_Request); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.memory" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - // To modify the form - oForm.setAction("apply"); - } - // Save - if (oForm.isSave()) { - ObjectName onRealm = JonasObjectName.securityMemoryFactory(domainName, oForm.getResource()); - JonasManagementRepr.invoke(onRealm, "saveConfig", null, null, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRealmsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRealmsAction.java deleted file mode 100644 index eddc9b5d52..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRealmsAction.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.RealmItem; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * @author Michel-Ange ANTON - */ - -public class ApplyRealmsAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - String sForward = null; - - // Form used - ItemsRealmsForm oForm = (ItemsRealmsForm) p_Form; - // Display list - ArrayList alRealms = (ArrayList) m_Session.getAttribute("listRealms"); - - // Sort selected items array to correct use of Arrays.binarySearch - // method - Arrays.sort(oForm.getSelectedItems()); - - // Actions - try { - // Search type realm - ArrayList alSelected = new ArrayList(); - if (alRealms != null) { - int iPos; - RealmItem oRealmItem = null; - for (int i = 0; i < alRealms.size(); i++) { - oRealmItem = (RealmItem) alRealms.get(i); - iPos = Arrays.binarySearch(oForm.getSelectedItems(), oRealmItem.getName()); - if (iPos >= 0) { - alSelected.add(new RealmItem(oRealmItem.getName(), oRealmItem.getType())); - } - } - } - // Set selected realm - oForm.setSelectedRealmItem(alSelected); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Confirm Realms")); - } - - // --------------------------------------------------------- Protected - // Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRoleMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRoleMemoryRealmAction.java deleted file mode 100644 index af7b0cb95c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyRoleMemoryRealmAction.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ApplyRoleMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Form used - RoleMemoryRealmForm oForm = (RoleMemoryRealmForm) p_Form; - - // Populate MBean - try { - ObjectName onRole = null; - // Create a new role - if (oForm.getAction().equals("create")) { - ObjectName onRealm = JonasObjectName.securityMemoryFactory(domainName, oRealmForm.getResource()); - String[] asParam = { - oForm.getRole()}; - String[] asSignature = { - "java.lang.String", }; - JonasManagementRepr.invoke(onRealm, "addRole", asParam, asSignature, serverName); - // Search created role - onRole = JonasObjectName.role(domainName, oRealmForm.getResource(), oForm.getRole()); - } else { - // Modify existing user - onRole = JonasObjectName.role(domainName, oRealmForm.getResource(), oForm.getRole()); - } - // Description - setStringAttribute(onRole, "Description", oForm.getDescription()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditMemoryRealmRoles")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyUserMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyUserMemoryRealmAction.java deleted file mode 100644 index a8e38643c1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ApplyUserMemoryRealmAction.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * - */ - -public class ApplyUserMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Form used - UserMemoryRealmForm oForm = (UserMemoryRealmForm) p_Form; - - oForm.setListRolesUsed(Jlists.getArrayList(oForm.getRolesUsed(), Jlists.SEPARATOR)); - oForm.setListRolesNotused(Jlists.getArrayList(oForm.getRolesNotused(), Jlists.SEPARATOR)); - oForm.setListGroupsUsed(Jlists.getArrayList(oForm.getGroupsUsed(), Jlists.SEPARATOR)); - oForm.setListGroupsNotused(Jlists.getArrayList(oForm.getGroupsNotused(), Jlists.SEPARATOR)); - - ArrayList alAddRoles = new ArrayList(oForm.getListRolesUsed()); - alAddRoles.removeAll(oForm.getListRolesUser()); - ArrayList alRemoveRoles = new ArrayList(oForm.getListRolesNotused()); - alRemoveRoles.retainAll(oForm.getListRolesUser()); - ArrayList alAddGroups = new ArrayList(oForm.getListGroupsUsed()); - alAddGroups.removeAll(oForm.getListGroupsUser()); - ArrayList alRemoveGroups = new ArrayList(oForm.getListGroupsNotused()); - alRemoveGroups.retainAll(oForm.getListGroupsUser()); - - // Populate MBean - try { - ObjectName onUser = null; - // Create a new user - if (oForm.getAction().equals("create")) { - String sEncrypted = encryptPassword(domainName, oForm.getPassword(), "MD5", serverName); - ObjectName onRealm = JonasObjectName.securityMemoryFactory(domainName, oRealmForm.getResource()); - String[] asParam = { - oForm.getUser(), sEncrypted}; - String[] asSignature = { - "java.lang.String", "java.lang.String"}; - JonasManagementRepr.invoke(onRealm, "addUser", asParam, asSignature, serverName); - // Search created user - onUser = JonasObjectName.user(domainName, oRealmForm.getResource(), oForm.getUser()); - } - else { - // Modify existing user - onUser = JonasObjectName.user(domainName, oRealmForm.getResource(), oForm.getUser()); - // Password - if (oForm.getPassword().length() > 0) { - // Encrypt and set password - setStringAttribute(onUser, "Password", encryptPassword(domainName, oForm.getPassword() - , "MD5", serverName)); - } - } - // Roles - if (alAddRoles.size() > 0) { - for (int i = 0; i < alAddRoles.size(); i++) { - String[] asParam = { - alAddRoles.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onUser, "addRole", asParam, asSignature, serverName); - } - } - if (alRemoveRoles.size() > 0) { - for (int i = 0; i < alRemoveRoles.size(); i++) { - String[] asParam = { - alRemoveRoles.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onUser, "removeRole", asParam, asSignature, serverName); - } - } - // Groups - if (alAddGroups.size() > 0) { - for (int i = 0; i < alAddGroups.size(); i++) { - String[] asParam = { - alAddGroups.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onUser, "addGroup", asParam, asSignature, serverName); - } - } - if (alRemoveGroups.size() > 0) { - for (int i = 0; i < alRemoveGroups.size(); i++) { - String[] asParam = { - alRemoveGroups.get(i).toString()}; - String[] asSignature = { - "java.lang.String"}; - JonasManagementRepr.invoke(onUser, "removeGroup", asParam, asSignature, serverName); - } - } - - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditMemoryRealmUsers")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseMemoryRealmAction.java deleted file mode 100644 index 886fe49fce..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseMemoryRealmAction.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - - -/** - * - */ - -abstract public class BaseMemoryRealmAction extends BaseSecurityAction { - -// --------------------------------------------------------- Public Methods - -// --------------------------------------------------------- Protected Methods - protected MemoryRealmForm getForm(final ActionMapping p_Mapping, final HttpServletRequest p_Request) { - // Form used - MemoryRealmForm oForm = null; - // Memory realm to edit - String sResource = p_Request.getParameter("resource"); - - // Build a new form - if (sResource != null) { - oForm = new MemoryRealmForm(); - m_Session.setAttribute("memoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - oForm.setResource(sResource); - // free old items of session - m_Session.removeAttribute("userMemoryRealmForm"); - m_Session.removeAttribute("roleMemoryRealmForm"); - m_Session.removeAttribute("groupMemoryRealmForm"); - m_Session.removeAttribute("itemsMemoryRealmForm"); - } - else { - oForm = (MemoryRealmForm) m_Session.getAttribute("memoryRealmForm"); - } - return oForm; - } - - /** - * Remove of session the ItemsMemoryRealmForm instance - * if the given type is different of the current type. - * - * @param p_Type Current type (user, role, group) - */ - protected void removeItemsMemoryRealmForm(final String p_Type) { - ItemsMemoryRealmForm oForm = (ItemsMemoryRealmForm) m_Session.getAttribute( - "itemsMemoryRealmForm"); - if (oForm != null) { - if ((oForm.getType() != null) && (oForm.getType().equals(p_Type) == false)) { - m_Session.removeAttribute("itemsMemoryRealmForm"); - } - } - } - - /** - * Populate the UserMemoryRealmForm with MBeans. - * If the user name is null, the User MBean is not called to populate the form. - * - * @param p_RealmForm Used for the resource name - * @param p_UserForm Form to populate - * @param p_UserName The user (Can be null) - * @throws Exception - */ - protected void populateUserForm(final MemoryRealmForm p_RealmForm, final UserMemoryRealmForm p_UserForm - , final String p_UserName, final String domainName, final String jonasServerName) - throws Exception { - - if (p_UserName != null) { - // Populate with Mbean 'user' - ObjectName oObjectName = JonasObjectName.user(domainName, p_RealmForm.getResource(), p_UserName); - p_UserForm.setUser(getStringAttribute(oObjectName, "Name")); - - p_UserForm.setListGroupsUser(new ArrayList(Arrays.asList((String[]) JonasManagementRepr. - getAttribute(oObjectName, "ArrayGroups", jonasServerName)))); - p_UserForm.setListGroupsUsed(new ArrayList(p_UserForm.getListGroupsUser())); - - p_UserForm.setListRolesUser(new ArrayList(Arrays.asList((String[]) JonasManagementRepr. - getAttribute(oObjectName, "ArrayRoles", jonasServerName)))); - p_UserForm.setListRolesUsed(new ArrayList(p_UserForm.getListRolesUser())); - } - // Populate with Mbean 'realm' - ObjectName oObjectName = JonasObjectName.securityMemoryFactory(domainName, p_RealmForm.getResource()); - p_UserForm.setListGroupsRealm(new ArrayList(Arrays.asList((String[]) JonasManagementRepr. - invoke(oObjectName, "listGroups", null, null, jonasServerName)))); - p_UserForm.setListRolesRealm(new ArrayList(Arrays.asList((String[]) JonasManagementRepr. - invoke(oObjectName, "listRoles", null, null, jonasServerName)))); - - // Calculate Unused - ArrayList alUnused = new ArrayList(p_UserForm.getListGroupsRealm()); - alUnused.removeAll(p_UserForm.getListGroupsUser()); - Collections.sort(alUnused); - p_UserForm.setListGroupsNotused(alUnused); - - alUnused = new ArrayList(p_UserForm.getListRolesRealm()); - alUnused.removeAll(p_UserForm.getListRolesUser()); - Collections.sort(alUnused); - p_UserForm.setListRolesNotused(alUnused); - - // Format list to string - p_UserForm.setGroupsUsed(Jlists.getString(p_UserForm.getListGroupsUsed(), Jlists.SEPARATOR)); - p_UserForm.setGroupsNotused(Jlists.getString(p_UserForm.getListGroupsNotused() - , Jlists.SEPARATOR)); - p_UserForm.setRolesUsed(Jlists.getString(p_UserForm.getListRolesUsed(), Jlists.SEPARATOR)); - p_UserForm.setRolesNotused(Jlists.getString(p_UserForm.getListRolesNotused() - , Jlists.SEPARATOR)); - } - - /** - * Encrypt a password with MBean security service method. - * @param domainName domain name - * @param p_Password Password to encrypt - * @param p_EncrypMethod MD5 or SHA string - * @return The encrypted password - * @throws Exception - */ - protected String encryptPassword(final String domainName, final String p_Password, final String p_EncrypMethod, final String jonasServerName) - throws Exception { - ObjectName onSecurityService = JonasObjectName.securityService(domainName); - String[] asParam = { - p_Password, p_EncrypMethod}; - String[] asSignature = { - "java.lang.String", "java.lang.String"}; - return (String) JonasManagementRepr.invoke(onSecurityService, "encryptPassword", asParam - , asSignature, jonasServerName); - } - - /** - * Populate the RoleMemoryRealmForm with MBeans. - * If the Role name is null, the Role MBean is not called to populate the form. - * @param domainName domain name - * @param p_RealmForm Used for the resource name - * @param p_RoleForm Form to populate - * @param p_RoleName The user (Can be null) - * @throws Exception - */ - protected void populateRoleForm(final String domainName, final MemoryRealmForm p_RealmForm, final RoleMemoryRealmForm p_RoleForm - , final String p_RoleName) - throws Exception { - - if (p_RoleName != null) { - // Populate with Mbean 'Role' - ObjectName oObjectName = JonasObjectName.role(domainName, p_RealmForm.getResource(), p_RoleName); - p_RoleForm.setRole(getStringAttribute(oObjectName, "Name")); - } - } - - /** - * Populate the GroupMemoryRealmForm with MBeans. - * If the user name is null, the Group MBean is not called to populate the form. - * @param domainName the domain name - * @param p_RealmForm Used for the resource name - * @param p_GroupForm Form to populate - * @param p_GroupName The user (Can be null) - * @throws Exception - */ - protected void populateGroupForm(final String domainName, final MemoryRealmForm p_RealmForm, final GroupMemoryRealmForm p_GroupForm - , final String p_GroupName, final String jonasServerName) - throws Exception { - - if (p_GroupName != null) { - // Populate with Mbean 'group' - ObjectName oObjectName = JonasObjectName.group(domainName, p_RealmForm.getResource(), p_GroupName); - p_GroupForm.setGroup(getStringAttribute(oObjectName, "Name")); - p_GroupForm.setDescription(getStringAttribute(oObjectName, "Description")); - - p_GroupForm.setListRolesGroup(new ArrayList(Arrays.asList((String[]) - JonasManagementRepr.getAttribute(oObjectName, "ArrayRoles", jonasServerName)))); - p_GroupForm.setListRolesUsed(new ArrayList(p_GroupForm.getListRolesGroup())); - } - // Populate with Mbean 'realm' - ObjectName oObjectName = JonasObjectName.securityMemoryFactory(domainName, p_RealmForm.getResource()); - p_GroupForm.setListRolesRealm(new ArrayList(Arrays.asList((String[]) JonasManagementRepr. - invoke(oObjectName, "listRoles", null, null, jonasServerName)))); - - // Calculate Unused - ArrayList alUnused = new ArrayList(p_GroupForm.getListRolesRealm()); - alUnused.removeAll(p_GroupForm.getListRolesGroup()); - Collections.sort(alUnused); - p_GroupForm.setListRolesNotused(alUnused); - - // Format list to string - p_GroupForm.setRolesUsed(Jlists.getString(p_GroupForm.getListRolesUsed(), Jlists.SEPARATOR)); - p_GroupForm.setRolesNotused(Jlists.getString(p_GroupForm.getListRolesNotused() - , Jlists.SEPARATOR)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseSecurityAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseSecurityAction.java deleted file mode 100644 index f6043b5925..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/BaseSecurityAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasTreeBuilder; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; -import org.ow2.jonas.webapp.taglib.TreeControl; -import org.ow2.jonas.webapp.taglib.TreeControlNode; - - -/** - * @author Michel-Ange ANTON - */ - -abstract public class BaseSecurityAction extends BaseDeployAction { - -// --------------------------------------------------------- Protected Methods - - /** - * Refresh the tree. - * - * @throws Exception - */ - protected void refreshTree(HttpServletRequest p_Request) - throws Exception { - // Refresh Security Tree - refreshSecurityTree(p_Request); - // Refresh MBeans Tree - refreshMBeansTree(p_Request); - // Force display to refresh - m_WhereAreYou.setTreeToRefresh(true); - } - - /** - * Refresh the security branch tree. - * - * @throws Exception - */ - protected void refreshSecurityTree(HttpServletRequest p_Request) - throws Exception { - String sCurrentNodeNameItem = "domain" - + WhereAreYou.NODE_SEPARATOR - + m_WhereAreYou.getCurrentJonasServerName() - + WhereAreYou.NODE_SEPARATOR - + "security"; - // Get current tree - TreeControl oControl = m_WhereAreYou.getTreeControl(); - // Get branch root node - TreeControlNode oBranchRootNode = oControl.findNode(sCurrentNodeNameItem); - // Enable auto-refresh mode - oControl.enableAutoRefresh(); - // Remove old children - TreeControlNode[] aoNodes = oBranchRootNode.findChildren(); - for (int i = 0; i < aoNodes.length; i++) { - aoNodes[i].remove(); - } - // Build node for the Service - JonasTreeBuilder oBuilder = new JonasTreeBuilder(); - oBuilder.getSecurityFactories(oBranchRootNode, m_Resources, p_Request); - // Disable auto-refresh mode - oControl.disableAutoRefresh(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ClearCacheAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ClearCacheAction.java deleted file mode 100644 index 9cc6312163..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ClearCacheAction.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -public class ClearCacheAction extends JonasBaseAction { - - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - - // Get the forward parameter - String sForward = "ActionEditMemoryRealm"; - - try { - - // Get realm parameter - String realmname = p_Request.getParameter("realm"); - if (realmname != null) { - ObjectName on = JonasObjectName.securityMemoryFactory(domainName, realmname); - JonasManagementRepr.invoke(on, "clearCache", null, null, serverName); - } - - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the actino. - return (p_Mapping.findForward(sForward)); - } - - // --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/DatasourceRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/DatasourceRealmForm.java deleted file mode 100644 index 28a31ad721..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/DatasourceRealmForm.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class DatasourceRealmForm extends FactoryRealmForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String dsName = null; - private String roleTable = null; - private String roleTableRolenameCol = null; - private String roleTableUsernameCol = null; - private String userTable = null; - private String userTablePasswordCol = null; - private String userTableUsernameCol = null; - private String algorithm = null; - - private List securityAlgorithms = Jlists.getSecurityAlgorithms(); - -// --------------------------------------------------------- Public Methods - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name" - , new ActionMessage("error.security.factory.datasource.realm.name.required")); - } - if ((dsName == null) || (dsName.length() == 0)) { - oErrors.add("dsName" - , new ActionMessage("error.security.factory.datasource.realm.dsName.required")); - } - if ((roleTable == null) || (roleTable.length() == 0)) { - oErrors.add("roleTable" - , new ActionMessage("error.security.factory.datasource.realm.roleTable.required")); - } - if ((roleTableRolenameCol == null) || (roleTableRolenameCol.length() == 0)) { - oErrors.add("roleTableRolenameCol" - , new ActionMessage("error.security.factory.datasource.realm.roleTableRolenameCol.required")); - } - if ((roleTableUsernameCol == null) || (roleTableUsernameCol.length() == 0)) { - oErrors.add("roleTableUsernameCol" - , new ActionMessage("error.security.factory.datasource.realm.roleTableUsernameCol.required")); - } - if ((userTable == null) || (userTable.length() == 0)) { - oErrors.add("userTable" - , new ActionMessage("error.security.factory.datasource.realm.userTable.required")); - } - if ((userTablePasswordCol == null) || (userTablePasswordCol.length() == 0)) { - oErrors.add("userTablePasswordCol" - , new ActionMessage("error.security.factory.datasource.realm.userTablePasswordCol.required")); - } - if ((userTableUsernameCol == null) || (userTableUsernameCol.length() == 0)) { - oErrors.add("userTableUsernameCol" - , new ActionMessage("error.security.factory.datasource.realm.userTableUsernameCol.required")); - } - - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getDsName() { - return dsName; - } - - public void setDsName(String dsName) { - this.dsName = dsName; - } - - public String getRoleTable() { - return roleTable; - } - - public void setRoleTable(String roleTable) { - this.roleTable = roleTable; - } - - public String getRoleTableRolenameCol() { - return roleTableRolenameCol; - } - - public void setRoleTableRolenameCol(String roleTableRolenameCol) { - this.roleTableRolenameCol = roleTableRolenameCol; - } - - public String getRoleTableUsernameCol() { - return roleTableUsernameCol; - } - - public void setRoleTableUsernameCol(String roleTableUsernameCol) { - this.roleTableUsernameCol = roleTableUsernameCol; - } - - public String getUserTable() { - return userTable; - } - - public void setUserTable(String userTable) { - this.userTable = userTable; - } - - public String getUserTablePasswordCol() { - return userTablePasswordCol; - } - - public void setUserTablePasswordCol(String userTablePasswordCol) { - this.userTablePasswordCol = userTablePasswordCol; - } - - public String getUserTableUsernameCol() { - return userTableUsernameCol; - } - - public void setUserTableUsernameCol(String userTableUsernameCol) { - this.userTableUsernameCol = userTableUsernameCol; - } - - public String getAlgorithm() { - return algorithm; - } - - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - public List getSecurityAlgorithms() { - return securityAlgorithms; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditDatasourceRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditDatasourceRealmAction.java deleted file mode 100644 index 710db41830..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditDatasourceRealmAction.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ -public class EditDatasourceRealmAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - String sResource = p_Request.getParameter("resource"); - String sAction = p_Request.getParameter("action"); - - // Form used - DatasourceRealmForm oForm = null; - if (sResource != null) { - // Editing a new realm - oForm = new DatasourceRealmForm(); - m_Session.setAttribute("datasourceRealmForm", oForm); - oForm.setResource(sResource); - oForm.setAction("apply"); - } - else { - // Creating - if ((sAction != null) && (sAction.equals("create"))) { - oForm = new DatasourceRealmForm(); - m_Session.setAttribute("datasourceRealmForm", oForm); - oForm.setAction("create"); - } - // Editing a realm in session (Show after apply or save) - else { - oForm = (DatasourceRealmForm) m_Session.getAttribute("datasourceRealmForm"); - oForm.reset(p_Mapping, p_Request); - } - } - - // Populate - try { - // Populate only if action is 'apply' - if (oForm.getAction().equals("apply")) { - ObjectName oObjectName = JonasObjectName.securityDatasourceFactory(domainName, oForm. - getResource()); - oForm.setDsName(getStringAttribute(oObjectName, "DsName")); - oForm.setName(getStringAttribute(oObjectName, "Name")); - oForm.setRoleTable(getStringAttribute(oObjectName, "RoleTable")); - oForm.setRoleTableRolenameCol(getStringAttribute(oObjectName - , "RoleTableRolenameCol")); - oForm.setRoleTableUsernameCol(getStringAttribute(oObjectName - , "RoleTableUsernameCol")); - oForm.setUserTable(getStringAttribute(oObjectName, "UserTable")); - oForm.setUserTablePasswordCol(getStringAttribute(oObjectName - , "UserTablePasswordCol")); - oForm.setUserTableUsernameCol(getStringAttribute(oObjectName - , "UserTableUsernameCol")); - oForm.setAlgorithm(getStringAttribute(oObjectName, "Algorithm")); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.datasource" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Datasource Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditGroupMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditGroupMemoryRealmAction.java deleted file mode 100644 index 3832d28348..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditGroupMemoryRealmAction.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditGroupMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Group to edit - String sGroup = p_Request.getParameter("group"); - // Verify if it is new in session - GroupMemoryRealmForm oForm = new GroupMemoryRealmForm(); - m_Session.setAttribute("groupMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("apply"); - - // Populate - try { - // Protect to a direct access - if (sGroup == null) { - throw new Exception(m_Resources.getMessage( - "error.security.factory.memory.realm.groups.group.required")); - } - populateGroupForm(domainName, oRealmForm, oForm, sGroup, serverName); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Group Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditLdapRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditLdapRealmAction.java deleted file mode 100644 index 58b54c8b66..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditLdapRealmAction.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ -public class EditLdapRealmAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - String sResource = p_Request.getParameter("resource"); - String sAction = p_Request.getParameter("action"); - - // Form used - LdapRealmForm oForm = null; - if (sResource != null) { - // Editing a new realm - oForm = new LdapRealmForm(); - m_Session.setAttribute("ldapRealmForm", oForm); - oForm.setResource(sResource); - oForm.setAction("apply"); - } else { - // Creating - if ((sAction != null) && (sAction.equals("create"))) { - oForm = new LdapRealmForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("ldapRealmForm", oForm); - oForm.setAction("create"); - } - // Editing a realm in session (Show after apply or save) - else { - oForm = (LdapRealmForm) m_Session.getAttribute("ldapRealmForm"); - oForm.reset(p_Mapping, p_Request); - } - } - - // Populate - try { - // Populate only if action is 'apply' - if (oForm.getAction().equals("apply")) { - ObjectName oObjectName = JonasObjectName.securityLdapFactory(domainName, oForm.getResource()); - oForm.setName(getStringAttribute(oObjectName, "Name")); - oForm.setAuthenticationMode(getStringAttribute(oObjectName, "AuthenticationMode")); - oForm.setBaseDn(getStringAttribute(oObjectName, "BaseDN")); - oForm.setInitialContextFactory(getStringAttribute(oObjectName - , "InitialContextFactory")); - oForm.setLanguage(getStringAttribute(oObjectName, "Language")); - oForm.setProviderUrl(getStringAttribute(oObjectName, "ProviderUrl")); - oForm.setReferral(getStringAttribute(oObjectName, "Referral")); - oForm.setRoleDn(getStringAttribute(oObjectName, "RoleDN")); - oForm.setRoleNameAttribute(getStringAttribute(oObjectName, "RoleNameAttribute")); - oForm.setRoleSearchFilter(getStringAttribute(oObjectName, "RoleSearchFilter")); - oForm.setSecurityAuthentication(getStringAttribute(oObjectName - , "SecurityAuthentication")); - oForm.setSecurityCredentials(getStringAttribute(oObjectName, "SecurityCredentials")); - oForm.setSecurityPrincipal(getStringAttribute(oObjectName, "SecurityPrincipal")); - oForm.setSecurityProtocol(getStringAttribute(oObjectName, "SecurityProtocol")); - oForm.setStateFactories(getStringAttribute(oObjectName, "StateFactories")); - oForm.setUserDn(getStringAttribute(oObjectName, "UserDN")); - oForm.setUserPasswordAttribute(getStringAttribute(oObjectName - , "UserPasswordAttribute")); - oForm.setUserRolesAttribute(getStringAttribute(oObjectName, "UserRolesAttribute")); - oForm.setUserSearchFilter(getStringAttribute(oObjectName, "UserSearchFilter")); - oForm.setAlgorithm(getStringAttribute(oObjectName, "Algorithm")); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.ldap" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Ldap Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmAction.java deleted file mode 100644 index 6828e011ef..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmAction.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Form used - MemoryRealmForm oForm = getForm(p_Mapping, p_Request); - String sAction = p_Request.getParameter("action"); - // Creating - if ((sAction != null) && (sAction.equals("create"))) { - oForm = new MemoryRealmForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("memoryRealmForm", oForm); - oForm.setAction("create"); - } - - // Populate - try { - // Populate only if action is 'apply' - if (oForm.getAction().equals("apply")) { - ObjectName oObjectName = JonasObjectName.securityMemoryFactory(domainName, oForm.getResource()); - oForm.setName(getStringAttribute(oObjectName, "Name")); - oForm.setGroups((String[]) JonasManagementRepr.invoke(oObjectName, "listGroups", null, null, serverName)); - oForm.setRoles((String[]) JonasManagementRepr.invoke(oObjectName, "listRoles", null, null, serverName)); - - oForm.setResource(oForm.getName()); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "security" + WhereAreYou.NODE_SEPARATOR - + "factory.memory" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmGroupsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmGroupsAction.java deleted file mode 100644 index 2a1b48b1b5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmGroupsAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditMemoryRealmGroupsAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oForm = getForm(p_Mapping, p_Request); - // Remove selected list to avoid conflict - removeItemsMemoryRealmForm("group"); - - // Populate - try { - ArrayList al = JonasAdminJmx.getGroups(domainName, oForm.getResource(), serverName); - p_Request.setAttribute("listGroups", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory Realm Groups")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmRolesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmRolesAction.java deleted file mode 100644 index 0563f4f47e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmRolesAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditMemoryRealmRolesAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oForm = getForm(p_Mapping, p_Request); - // Remove selected list to avoid conflict - removeItemsMemoryRealmForm("role"); - - // Populate - try { - ArrayList al = JonasAdminJmx.getRoles(domainName, oForm.getResource(), serverName); - p_Request.setAttribute("listRoles", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory Realm Roles")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmUsersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmUsersAction.java deleted file mode 100644 index 905ee3b3c0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditMemoryRealmUsersAction.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditMemoryRealmUsersAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oForm = getForm(p_Mapping, p_Request); - // Remove selected list to avoid conflict - removeItemsMemoryRealmForm("user"); - - // Populate - try { - ArrayList al = JonasAdminJmx.getUsers(domainName, oForm.getResource(), serverName); - p_Request.setAttribute("listUsers", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Memory Realm Users")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewGroupMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewGroupMemoryRealmAction.java deleted file mode 100644 index c49a92579d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewGroupMemoryRealmAction.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditNewGroupMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Verify if it is new in session - GroupMemoryRealmForm oForm = new GroupMemoryRealmForm(); - m_Session.setAttribute("groupMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("create"); - - // Populate - try { - populateGroupForm(domainName, oRealmForm, oForm, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Group Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewRoleMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewRoleMemoryRealmAction.java deleted file mode 100644 index fe988d7bd9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewRoleMemoryRealmAction.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditNewRoleMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Verify if it is new in session - RoleMemoryRealmForm oForm = new RoleMemoryRealmForm(); - m_Session.setAttribute("roleMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("create"); - - // Populate - try { - populateRoleForm(domainName, oRealmForm, oForm, null); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Role Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewUserMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewUserMemoryRealmAction.java deleted file mode 100644 index 9e25b09da7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditNewUserMemoryRealmAction.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditNewUserMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Verify if it is new in session - UserMemoryRealmForm oForm = new UserMemoryRealmForm(); - m_Session.setAttribute("userMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("create"); - - // Populate - try { - populateUserForm(oRealmForm, oForm, null, domainName, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("User Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditRoleMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditRoleMemoryRealmAction.java deleted file mode 100644 index 1006384699..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditRoleMemoryRealmAction.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditRoleMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String domainName = oWhere.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // Role to edit - String sRole = p_Request.getParameter("role"); - // Verify if it is new in session - RoleMemoryRealmForm oForm = new RoleMemoryRealmForm(); - m_Session.setAttribute("roleMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("apply"); - - // Populate - try { - // Protect to a direct access - if (sRole == null) { - throw new Exception(m_Resources.getMessage( - "error.security.factory.memory.realm.roles.role.required")); - } - populateRoleForm(domainName, oRealmForm, oForm, sRole); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Role Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditSecurityCatalinaRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditSecurityCatalinaRealmAction.java deleted file mode 100644 index 4099b316ba..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditSecurityCatalinaRealmAction.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.RealmItem; -import org.ow2.jonas.lib.management.extensions.base.RealmItemByNameComparator; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - */ - -public class EditSecurityCatalinaRealmAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - try { - ArrayList al = new ArrayList(); - // Catalina - if (m_WhereAreYou.isCatalinaServer()) { - try { - ObjectName on; - // Find used realm name - on = CatalinaObjectName.catalinaRealm(m_WhereAreYou.getCurrentCatalinaServiceName()); - String sUsedRealmName = getStringAttribute(on, "resourceName"); - // Find all realms - String sRealmName; - String sRealmType; - Iterator it = JonasAdminJmx.getListMbean(CatalinaObjectName.catalinaRealms(), serverName).iterator(); - while (it.hasNext()) { - on = (ObjectName) it.next(); - sRealmName = getStringAttribute(on, "resourceName"); - al.add(new RealmItem(sRealmName, null, sRealmName.equals(sUsedRealmName))); - } - // Sort - Collections.sort(al, new RealmItemByNameComparator()); - } catch (Exception e) { - // no action - // Exception because catalina realm don't exists - } - } - // Set form in the request - p_Request.setAttribute("listSecurityRealms", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Security Catalina Realm")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditUserMemoryRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditUserMemoryRealmAction.java deleted file mode 100644 index 10c5bb5335..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/EditUserMemoryRealmAction.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class EditUserMemoryRealmAction extends BaseMemoryRealmAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Realm Form used - MemoryRealmForm oRealmForm = getForm(p_Mapping, p_Request); - - // User to edit - String sUser = p_Request.getParameter("user"); - // Verify if it is new in session - UserMemoryRealmForm oForm = new UserMemoryRealmForm(); - m_Session.setAttribute("userMemoryRealmForm", oForm); - oForm.reset(p_Mapping, p_Request); - // Type action - oForm.setAction("apply"); - - // Populate - try { - // Protect to a direct access - if (sUser == null) { - throw new Exception(m_Resources.getMessage( - "error.security.factory.memory.realm.users.user.required")); - } - populateUserForm(oRealmForm, oForm, sUser, domainName, serverName); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("User Memory Realm")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/FactoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/FactoryRealmForm.java deleted file mode 100644 index a4ac214809..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/FactoryRealmForm.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class FactoryRealmForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String resource = null; - private String action = null; - private boolean save = false; - private String name = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - save = false; - action = "apply"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getResource() { - return resource; - } - - public void setResource(String resource) { - this.resource = resource; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public boolean isSave() { - return save; - } - - public void setSave(boolean save) { - this.save = save; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/GroupMemoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/GroupMemoryRealmForm.java deleted file mode 100644 index e89a0f2eb7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/GroupMemoryRealmForm.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class GroupMemoryRealmForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String action = null; - private String group = null; - private String description = null; - private java.util.ArrayList listRolesGroup = new ArrayList(); - private java.util.ArrayList listRolesRealm = new ArrayList(); - private java.util.ArrayList listRolesUsed = new ArrayList(); - private java.util.ArrayList listRolesNotused = new ArrayList(); - private String rolesUsed = null; - private String rolesNotused = null; - private String[] rolesNotusedSelected = new String[0]; - private String[] rolesUsedSelected = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - rolesUsed = null; - rolesNotused = null; - // Mandatory ! - rolesNotusedSelected = new String[0]; - rolesUsedSelected = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - // Create errors - if (action.equals("create") == true) { - group = group.trim(); - if (group.length() == 0) { - oErrors.add("group" - , new ActionMessage("error.security.factory.memory.realm.group.name.required")); - } - } - // Replace the elements in their good place - if (oErrors.size() > 0) { - listRolesUsed = Jlists.getArrayList(rolesUsed, Jlists.SEPARATOR); - listRolesNotused = Jlists.getArrayList(rolesNotused, Jlists.SEPARATOR); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public java.util.ArrayList getListRolesGroup() { - return listRolesGroup; - } - - public void setListRolesGroup(java.util.ArrayList listRolesGroup) { - this.listRolesGroup = listRolesGroup; - } - - public java.util.ArrayList getListRolesRealm() { - return listRolesRealm; - } - - public void setListRolesRealm(java.util.ArrayList listRolesRealm) { - this.listRolesRealm = listRolesRealm; - } - - public java.util.ArrayList getListRolesUsed() { - return listRolesUsed; - } - - public void setListRolesUsed(java.util.ArrayList listRolesUsed) { - this.listRolesUsed = listRolesUsed; - } - - public java.util.ArrayList getListRolesNotused() { - return listRolesNotused; - } - - public void setListRolesNotused(java.util.ArrayList listRolesNotused) { - this.listRolesNotused = listRolesNotused; - } - - public String getRolesUsed() { - return rolesUsed; - } - - public void setRolesUsed(String rolesUsed) { - this.rolesUsed = rolesUsed; - } - - public String getRolesNotused() { - return rolesNotused; - } - - public void setRolesNotused(String rolesNotused) { - this.rolesNotused = rolesNotused; - } - - public String[] getRolesNotusedSelected() { - return rolesNotusedSelected; - } - - public void setRolesNotusedSelected(String[] rolesNotusedSelected) { - this.rolesNotusedSelected = rolesNotusedSelected; - } - - public String[] getRolesUsedSelected() { - return rolesUsedSelected; - } - - public void setRolesUsedSelected(String[] rolesUsedSelected) { - this.rolesUsedSelected = rolesUsedSelected; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsMemoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsMemoryRealmForm.java deleted file mode 100644 index 7d8605d111..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsMemoryRealmForm.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class ItemsMemoryRealmForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String type = null; - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - -// --------------------------------------------------------- Properties Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsRealmsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsRealmsForm.java deleted file mode 100644 index 90420a2429..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ItemsRealmsForm.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class ItemsRealmsForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] selectedItems = new String[0]; - private ArrayList selectedRealmItem = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public ArrayList getSelectedRealmItem() { - return selectedRealmItem; - } - - public void setSelectedRealmItem(ArrayList selectedRealmItem) { - this.selectedRealmItem = selectedRealmItem; - } - -// --------------------------------------------------------- Properties Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/LdapRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/LdapRealmForm.java deleted file mode 100644 index 9c51cbbe2e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/LdapRealmForm.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class LdapRealmForm extends FactoryRealmForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String authenticationMode = null; - private String baseDn = null; - private String initialContextFactory = null; - private String language = null; - private String providerUrl = null; - private String referral = null; - private String roleDn = null; - private String roleNameAttribute = null; - private String roleSearchFilter = null; - private String securityAuthentication = null; - private String securityCredentials = null; - private String securityPrincipal = null; - private String securityProtocol = null; - private String stateFactories = null; - private String userDn = null; - private String userPasswordAttribute = null; - private String userRolesAttribute = null; - private String userSearchFilter = null; - private String algorithm = null; - - private List securityAuthenticationLdapValues = Jlists.getSecurityAuthenticationLdapValues(); - private List authenticationModeLdapValues = Jlists.getAuthenticationModeLdapValues(); - private List securityAlgorithms = Jlists.getSecurityAlgorithms(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - - authenticationMode = "bind"; - baseDn = null; - initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"; - language = null; - providerUrl = "ldap://localhost:389"; - referral = null; - roleDn = null; - roleNameAttribute = "cn"; - roleSearchFilter = "uniqueMember={0}"; - securityAuthentication = "simple"; - securityCredentials = null; - securityPrincipal = null; - securityProtocol = null; - stateFactories = null; - userDn = null; - userPasswordAttribute = "userPassword"; - userRolesAttribute = "memberOf"; - userSearchFilter = "uid={0}"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.security.factory.ldap.realm.name.required")); - } - if ((baseDn == null) || (baseDn.length() == 0)) { - oErrors.add("baseDn" - , new ActionMessage("error.security.factory.ldap.realm.baseDn.required")); - } - if ((initialContextFactory == null) || (initialContextFactory.length() == 0)) { - oErrors.add("initialContextFactory" - , new ActionMessage("error.security.factory.ldap.realm.initialContextFactory.required")); - initialContextFactory = "com.sun.jndi.ldap.LdapCtxFactory"; - } - if ((providerUrl == null) || (providerUrl.length() == 0)) { - oErrors.add("providerUrl" - , new ActionMessage("error.security.factory.ldap.realm.providerUrl.required")); - providerUrl = "ldap://localhost:389"; - } - if ((roleNameAttribute == null) || (roleNameAttribute.length() == 0)) { - oErrors.add("roleNameAttribute" - , new ActionMessage("error.security.factory.ldap.realm.roleNameAttribute.required")); - roleNameAttribute = "cn"; - } - if ((roleSearchFilter == null) || (roleSearchFilter.length() == 0)) { - oErrors.add("roleSearchFilter" - , new ActionMessage("error.security.factory.ldap.realm.roleSearchFilter.required")); - roleSearchFilter = "uniqueMember={0}"; - } - if ((userPasswordAttribute == null) || (userPasswordAttribute.length() == 0)) { - oErrors.add("userPasswordAttribute" - , new ActionMessage("error.security.factory.ldap.realm.userPasswordAttribute.required")); - userPasswordAttribute = "userPassword"; - } - if ((userRolesAttribute == null) || (userRolesAttribute.length() == 0)) { - oErrors.add("userRolesAttribute" - , new ActionMessage("error.security.factory.ldap.realm.userRolesAttribute.required")); - userRolesAttribute = "memberOf"; - } - if ((userSearchFilter == null) || (userSearchFilter.length() == 0)) { - oErrors.add("userSearchFilter" - , new ActionMessage("error.security.factory.ldap.realm.userSearchFilter.required")); - userSearchFilter = "uid={0}"; - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getAuthenticationMode() { - return authenticationMode; - } - - public void setAuthenticationMode(String authenticationMode) { - this.authenticationMode = authenticationMode; - } - - public String getBaseDn() { - return baseDn; - } - - public void setBaseDn(String baseDn) { - this.baseDn = baseDn; - } - - public String getInitialContextFactory() { - return initialContextFactory; - } - - public void setInitialContextFactory(String initialContextFactory) { - this.initialContextFactory = initialContextFactory; - } - - public String getLanguage() { - return language; - } - - public void setLanguage(String language) { - this.language = language; - } - - public String getProviderUrl() { - return providerUrl; - } - - public void setProviderUrl(String providerUrl) { - this.providerUrl = providerUrl; - } - - public String getReferral() { - return referral; - } - - public void setReferral(String referral) { - this.referral = referral; - } - - public String getRoleDn() { - return roleDn; - } - - public void setRoleDn(String roleDn) { - this.roleDn = roleDn; - } - - public String getRoleNameAttribute() { - return roleNameAttribute; - } - - public void setRoleNameAttribute(String roleNameAttribute) { - this.roleNameAttribute = roleNameAttribute; - } - - public String getRoleSearchFilter() { - return roleSearchFilter; - } - - public void setRoleSearchFilter(String roleSearchFilter) { - this.roleSearchFilter = roleSearchFilter; - } - - public String getSecurityAuthentication() { - return securityAuthentication; - } - - public void setSecurityAuthentication(String securityAuthentication) { - this.securityAuthentication = securityAuthentication; - } - - public String getSecurityCredentials() { - return securityCredentials; - } - - public void setSecurityCredentials(String securityCredentials) { - this.securityCredentials = securityCredentials; - } - - public String getSecurityPrincipal() { - return securityPrincipal; - } - - public void setSecurityPrincipal(String securityPrincipal) { - this.securityPrincipal = securityPrincipal; - } - - public String getSecurityProtocol() { - return securityProtocol; - } - - public void setSecurityProtocol(String securityProtocol) { - this.securityProtocol = securityProtocol; - } - - public String getStateFactories() { - return stateFactories; - } - - public void setStateFactories(String stateFactories) { - this.stateFactories = stateFactories; - } - - public String getUserDn() { - return userDn; - } - - public void setUserDn(String userDn) { - this.userDn = userDn; - } - - public String getUserPasswordAttribute() { - return userPasswordAttribute; - } - - public void setUserPasswordAttribute(String userPasswordAttribute) { - this.userPasswordAttribute = userPasswordAttribute; - } - - public String getUserRolesAttribute() { - return userRolesAttribute; - } - - public void setUserRolesAttribute(String userRolesAttribute) { - this.userRolesAttribute = userRolesAttribute; - } - - public String getUserSearchFilter() { - return userSearchFilter; - } - - public void setUserSearchFilter(String userSearchFilter) { - this.userSearchFilter = userSearchFilter; - } - - public List getSecurityAuthenticationLdapValues() { - return securityAuthenticationLdapValues; - } - - public List getAuthenticationModeLdapValues() { - return authenticationModeLdapValues; - } - - public String getAlgorithm() { - return algorithm; - } - - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - public List getSecurityAlgorithms() { - return securityAlgorithms; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ListRealmsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ListRealmsAction.java deleted file mode 100644 index 925446b7f2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/ListRealmsAction.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.BaseManagement; -import org.ow2.jonas.lib.management.extensions.base.RealmItem; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.ServiceName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class ListRealmsAction extends BaseMemoryRealmAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - - String serviceName = ServiceName.SECURITY.getName(); - - if (!isActive(serviceName)) { - return (p_Mapping.findForward("Realms Stopped")); - } - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Realms to list - String sTypeRealm = p_Request.getParameter("realm"); - if (sTypeRealm == null) { - sTypeRealm = (String) m_Session.getAttribute("typeRealm"); - } else { - m_Session.setAttribute("typeRealm", sTypeRealm); - } - // Force view all realm if null - if (sTypeRealm == null) { - sTypeRealm = "all"; - m_Session.setAttribute("typeRealm", sTypeRealm); - } - - // Populate list - try { - String sSecurityRealmUsed = null; - // Detect realm used by the security service - if (m_WhereAreYou.isCatalinaServer()) { - try { - // Object name used Realm - ObjectName oObjectName = CatalinaObjectName.catalinaRealm(m_WhereAreYou.getCurrentCatalinaDomainName()); - // Populate - sSecurityRealmUsed = getStringAttribute(oObjectName, "resourceName"); - } catch (Exception e) { - // no action - // Exception because catalina realm don't exists - } - } - - ArrayList alRealms = (ArrayList) BaseManagement.getInstance().getRealmItems(sTypeRealm, - sSecurityRealmUsed, domainName, serverName); - // Detect the realm type - if (sTypeRealm.equals("all")) { - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "security", true); - } else if (sTypeRealm.equals("memory")) { - // Memory realm factories - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "security" - + WhereAreYou.NODE_SEPARATOR + "factory.memory", true); - } else if (sTypeRealm.equals("datasource")) { - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "security" - + WhereAreYou.NODE_SEPARATOR + "factory.datasource", true); - } else if (sTypeRealm.equals("ldap")) { - // Ldap realm factories - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "security" - + WhereAreYou.NODE_SEPARATOR + "factory.ldap", true); - } - // Unknown - else { - String sMess = m_Resources.getMessage("error.security.factory.realms.type.unknown", sTypeRealm); - throw new Exception(sMess); - } - // Send list to display - m_Session.setAttribute("listRealms", alRealms); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Realms")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/MemoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/MemoryRealmForm.java deleted file mode 100644 index e4e2d16776..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/MemoryRealmForm.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class MemoryRealmForm extends FactoryRealmForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String[] groups = new String[0]; - private String[] roles = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - - roles = new String[0]; - groups = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if ((getName() == null) || (getName().length() == 0)) { - oErrors.add("name", new ActionMessage("error.security.factory.memory.realm.name.required")); - } - if ((getName() != null) && (getName().length() > 0)) { - if (getName().indexOf(' ') >= 0) { - oErrors.add("name" - , new ActionMessage("error.security.factory.memory.realm.name.nospace")); - } - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String[] getGroups() { - return groups; - } - - public void setGroups(String[] groups) { - this.groups = groups; - } - - public String[] getRoles() { - return roles; - } - - public void setRoles(String[] roles) { - this.roles = roles; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/RoleMemoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/RoleMemoryRealmForm.java deleted file mode 100644 index 814cebf6e9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/RoleMemoryRealmForm.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class RoleMemoryRealmForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String action = null; - private String role = null; - private String description = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - // Create errors - if (action.equals("create") == true) { - role = role.trim(); - if (role.length() == 0) { - oErrors.add("role" - , new ActionMessage("error.security.factory.memory.realm.role.name.required")); - } - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getRole() { - return role; - } - - public void setRole(String role) { - this.role = role; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/SaveRealmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/SaveRealmAction.java deleted file mode 100644 index 0dd46ed792..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/SaveRealmAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class SaveRealmAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Save with the first factory found - try { - ObjectName onRealms = JonasObjectName.allSecurityFactories(domainName); - ObjectName onRealm = new ObjectName(JonasAdminJmx.getFirstMBeanName(onRealms, serverName)); - JonasManagementRepr.invoke(onRealm, "saveConfig", null, null, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Get the forward parameter - String sForward = p_Request.getParameter("forward"); - if (sForward == null) { - sForward = "ActionListRealms"; - } - - // Forward to the actino. - return (p_Mapping.findForward(sForward)); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/UserMemoryRealmForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/UserMemoryRealmForm.java deleted file mode 100644 index e673ca93a0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/security/UserMemoryRealmForm.java +++ /dev/null @@ -1,302 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.security; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class UserMemoryRealmForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String action = null; - private String user = null; - private String password = null; - private String confirmPassword = null; - private java.util.ArrayList listGroupsUser = new ArrayList(); - private java.util.ArrayList listGroupsRealm = new ArrayList(); - private java.util.ArrayList listGroupsUsed = new ArrayList(); - private java.util.ArrayList listGroupsNotused = new ArrayList(); - private java.util.ArrayList listRolesUser = new ArrayList(); - private java.util.ArrayList listRolesRealm = new ArrayList(); - private java.util.ArrayList listRolesUsed = new ArrayList(); - private java.util.ArrayList listRolesNotused = new ArrayList(); - private String groupsUsed = null; - private String groupsNotused = null; - private String rolesUsed = null; - private String rolesNotused = null; - private String[] groupsNotusedSelected = new String[0]; - private String[] groupsUsedSelected = new String[0]; - private String[] rolesNotusedSelected = new String[0]; - private String[] rolesUsedSelected = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - password = null; - confirmPassword = null; - groupsUsed = null; - groupsNotused = null; - rolesUsed = null; - rolesNotused = null; - // Mandatory ! - groupsNotusedSelected = new String[0]; - groupsUsedSelected = new String[0]; - rolesNotusedSelected = new String[0]; - rolesUsedSelected = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - // Create errors - if (action.equals("create") == true) { - user = user.trim(); - if (user.length() == 0) { - oErrors.add("user" - , new ActionMessage("error.security.factory.memory.realm.user.name.required")); - } - if (password.length() == 0) { - oErrors.add("password" - , new ActionMessage("error.security.factory.memory.realm.user.password.required")); - } - if (confirmPassword.length() == 0) { - oErrors.add("password" - , new ActionMessage("error.security.factory.memory.realm.user.confirmPassword.required")); - } - } - // Create and apply errors (but this test exists only to not overload the errors) - if (oErrors.size() == 0) { - if (password.length() > 0) { - if (!password.equals(confirmPassword)) { - oErrors.add("password" - , new ActionMessage("error.security.factory.memory.realm.user.password.change.different")); - } - } - if ((confirmPassword.length() > 0) && (password.length() == 0)) { - oErrors.add("password" - , new ActionMessage("error.security.factory.memory.realm.user.password.change.required")); - } - } - // Replace the elements in their good place - if (oErrors.size() > 0) { - listRolesUsed = Jlists.getArrayList(rolesUsed, Jlists.SEPARATOR); - listRolesNotused = Jlists.getArrayList(rolesNotused, Jlists.SEPARATOR); - listGroupsUsed = Jlists.getArrayList(groupsUsed, Jlists.SEPARATOR); - listGroupsNotused = Jlists.getArrayList(groupsNotused, Jlists.SEPARATOR); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getConfirmPassword() { - return confirmPassword; - } - - public void setConfirmPassword(String confirmPassword) { - this.confirmPassword = confirmPassword; - } - - public java.util.ArrayList getListGroupsUser() { - return listGroupsUser; - } - - public void setListGroupsUser(java.util.ArrayList listGroupsUser) { - this.listGroupsUser = listGroupsUser; - } - - public java.util.ArrayList getListGroupsRealm() { - return listGroupsRealm; - } - - public void setListGroupsRealm(java.util.ArrayList listGroupsRealm) { - this.listGroupsRealm = listGroupsRealm; - } - - public java.util.ArrayList getListGroupsUsed() { - return listGroupsUsed; - } - - public void setListGroupsUsed(java.util.ArrayList listGroupsUsed) { - this.listGroupsUsed = listGroupsUsed; - } - - public java.util.ArrayList getListGroupsNotused() { - return listGroupsNotused; - } - - public void setListGroupsNotused(java.util.ArrayList listGroupsNotused) { - this.listGroupsNotused = listGroupsNotused; - } - - public java.util.ArrayList getListRolesUser() { - return listRolesUser; - } - - public void setListRolesUser(java.util.ArrayList listRolesUser) { - this.listRolesUser = listRolesUser; - } - - public java.util.ArrayList getListRolesRealm() { - return listRolesRealm; - } - - public void setListRolesRealm(java.util.ArrayList listRolesRealm) { - this.listRolesRealm = listRolesRealm; - } - - public java.util.ArrayList getListRolesUsed() { - return listRolesUsed; - } - - public void setListRolesUsed(java.util.ArrayList listRolesUsed) { - this.listRolesUsed = listRolesUsed; - } - - public java.util.ArrayList getListRolesNotused() { - return listRolesNotused; - } - - public void setListRolesNotused(java.util.ArrayList listRolesNotused) { - this.listRolesNotused = listRolesNotused; - } - - public String getGroupsUsed() { - return groupsUsed; - } - - public void setGroupsUsed(String groupsUsed) { - this.groupsUsed = groupsUsed; - } - - public String getGroupsNotused() { - return groupsNotused; - } - - public void setGroupsNotused(String groupsNotused) { - this.groupsNotused = groupsNotused; - } - - public String getRolesUsed() { - return rolesUsed; - } - - public void setRolesUsed(String rolesUsed) { - this.rolesUsed = rolesUsed; - } - - public String getRolesNotused() { - return rolesNotused; - } - - public void setRolesNotused(String rolesNotused) { - this.rolesNotused = rolesNotused; - } - - public String[] getGroupsNotusedSelected() { - return groupsNotusedSelected; - } - - public void setGroupsNotusedSelected(String[] groupsNotusedSelected) { - this.groupsNotusedSelected = groupsNotusedSelected; - } - - public String[] getGroupsUsedSelected() { - return groupsUsedSelected; - } - - public void setGroupsUsedSelected(String[] groupsUsedSelected) { - this.groupsUsedSelected = groupsUsedSelected; - } - - public String[] getRolesNotusedSelected() { - return rolesNotusedSelected; - } - - public void setRolesNotusedSelected(String[] rolesNotusedSelected) { - this.rolesNotusedSelected = rolesNotusedSelected; - } - - public String[] getRolesUsedSelected() { - return rolesUsedSelected; - } - - public void setRolesUsedSelected(String[] rolesUsedSelected) { - this.rolesUsedSelected = rolesUsedSelected; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/EditServiceSecurityAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/EditServiceSecurityAction.java deleted file mode 100644 index 08aa3b5df6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/EditServiceSecurityAction.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.BaseManagement; -import org.ow2.jonas.lib.management.extensions.base.RealmItem; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.ServiceName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - */ - -public class EditServiceSecurityAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "security", true); - - String serviceName = ServiceName.SECURITY.getName(); - - if (!isActive(serviceName)) { - return (p_Mapping.findForward("Service Security Stopped")); - } - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - try { - ArrayList al = new ArrayList(); - String sUsedRealmName = null; - // Catalina - if (m_WhereAreYou.isCatalinaServer() == true) { - try { - ObjectName on; - // Find used realm name - on = BaseManagement.getInstance().getTomcatRealm(domainName, serverName); - sUsedRealmName = getStringAttribute(on, "resourceName"); - } catch (Exception e) { - // no action - // Exception because catalina realm don't exists - } - } - al = (ArrayList) BaseManagement.getInstance().getTomcatRealmItems(sUsedRealmName, domainName, serverName); - // Set form in the request - p_Request.setAttribute("listSecurityRealms", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Service Security")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ListServicesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ListServicesAction.java deleted file mode 100644 index 4b9ad94f81..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ListServicesAction.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ - -public class ListServicesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services", true); - - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Services list is provided by the J2EEServer MBean - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - - // no Form used - try { - ArrayList al = new ArrayList(); - ArrayList contl = new ArrayList(); - ArrayList mandl = new ArrayList(); - ArrayList wsdl = new ArrayList(); - String[] services = (String[]) JonasManagementRepr.getAttribute(on, "services", serverName); - for (int i = 0; i < services.length; i++) { - String serviceName = services[i]; - ServiceItem item = getServerItem(serviceName); - if (item != null) { - if (item.isContainer()) { - contl.add(item); - } else if (item.isMandatory()) { - mandl.add(item); - } else if (item.isWebservices()) { - wsdl.add(item); - } else { - al.add(item); - } - } - } - // sort - Collections.sort(contl, new ServiceItemByNameComparator()); - Collections.sort(mandl, new ServiceItemByNameComparator()); - Collections.sort(wsdl, new ServiceItemByNameComparator()); - Collections.sort(al, new ServiceItemByNameComparator()); - // Set lists in the session and not in the request because - // if Stop/Start service action is executed, the Services - // forward (services.jsp) needs these lists. - m_Session.setAttribute("listServices", al); - m_Session.setAttribute("contServices", contl); - m_Session.setAttribute("wsServices", wsdl); - m_Session.setAttribute("mandServices", mandl); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Services")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ModuleForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ModuleForm.java deleted file mode 100644 index 79b46cab75..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ModuleForm.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.net.URL; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ -public class ModuleForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - /** - * True if the module is included in a EAR - */ - private boolean inEar = false; - /** - * File name of the EAR containing the module - */ - private String earFilename = null; - /** - * Path of the EAR file containing the module - */ - private String earPath = null; - /** - * J2EEApplication MBean OBJECT_NAME - */ - private String earON = null; -// --------------------------------------------------------- Public Methods - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getEarFilename() { - return earFilename; - } - - public String getEarPath() { - return earPath; - } - - public void setEarPath(URL p_Url) { - this.earPath = null; - if (p_Url != null) { - this.earPath = p_Url.getPath(); - this.earFilename = JonasAdminJmx.extractFilename(this.earPath); - } - } - - public boolean isInEar() { - return inEar; - } - - public void setInEar(boolean inEar) { - this.inEar = inEar; - } - - public String getEarON() { - return earON; - } - - public void setEarON(String earON) { - this.earON = earON; - } - - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItem.java deleted file mode 100644 index d0b6a49ee7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItem.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Michel-Ange ANTON - */ -public class ServiceItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String category = null; - private String name = null; - private boolean deployed = false; - private String forward; - private String propName = null; - private String description = null; - -// --------------------------------------------------------- Constructors - - public String getDescription() { - return description; - } - - public void setDescription(final String description) { - this.description = description; - } - - public String getPropName() { - return propName; - } - - public void setPropName(final String propName) { - this.propName = propName; - } - - public ServiceItem(final String p_Name, final boolean p_Deployed, final String p_Forward) { - setName(p_Name); - setDeployed(p_Deployed); - if (isDeployed()) { - setForward(p_Forward); - } - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public boolean isDeployed() { - return deployed; - } - - public void setDeployed(final boolean deployed) { - this.deployed = deployed; - } - - public String getForward() { - return forward; - } - - public void setForward(final String forward) { - this.forward = forward; - } - - public String getCategory() { - return category; - } - - public void setCategory(final String category) { - this.category = category; - } - - public boolean isContainer() { - if ("container".equals(category)) { - return true; - } - return false; - } - - public boolean isMandatory() { - if ("mandatory".equals(category)) { - return true; - } - return false; - } - - public boolean isWebservices() { - if ("webservices".equals(category)) { - return true; - } - return false; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItemByNameComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItemByNameComparator.java deleted file mode 100644 index 0e41476b79..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ServiceItemByNameComparator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class ServiceItemByNameComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - ServiceItem o_1 = (ServiceItem) p_O1; - ServiceItem o_2 = (ServiceItem) p_O2; - return o_1.getName().compareToIgnoreCase(o_2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof ServiceItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StartJonasServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StartJonasServiceAction.java deleted file mode 100644 index f97d943069..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StartJonasServiceAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Action allowing to start a JOnAS service. - * @author Adriana Danes - */ -public class StartJonasServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - // Get the name of the service to start - String serviceName = request.getParameter("name"); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - String operation = "startService"; - String[] param = { serviceName }; - String[] signature = { "java.lang.String" }; - try { - JonasManagementRepr.invoke(on, operation, param, signature, serverName); - refreshServicesTree(request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - // Forward to the services jsp. - return (mapping.findForward("ActionListServices")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StopJonasServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StopJonasServiceAction.java deleted file mode 100644 index 17c869b308..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/StopJonasServiceAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Action allowing to stop a JOnAS service. - * @author Adriana Danes - */ -public class StopJonasServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - // Get the name of the service to stop - String serviceName = request.getParameter("name"); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName on = J2eeObjectName.J2EEServer(domainName, serverName); - String operation = "stopService"; - String[] param = { serviceName }; - String[] signature = { "java.lang.String" }; - try { - JonasManagementRepr.invoke(on, operation, param, signature, serverName); - refreshServicesTree(request); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - // Forward to the services jsp. - return (mapping.findForward("ActionListServices")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyContainersStatisticAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyContainersStatisticAction.java deleted file mode 100644 index 52732d00fe..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyContainersStatisticAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Handles update of monitoring configuration for session beans. - * - * @author S. Ali Tokmen, Malek Chahine - */ -public class ApplyContainersStatisticAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - try { - ContainerForm oForm = (ContainerForm) pForm; - ObjectName oObjectName = oForm.getObjectName(); - setBooleanAttribute(oObjectName, "monitoringEnabled", oForm.getMonitoringEnabled()); - setIntegerAttribute(oObjectName, "warningThreshold", oForm.getWarningThreshold()); - /** - * FIXME: Setting averageProcessingTime is not yet supported EJBModule(ejb2) - * implementation. - */ - //setLongAttribute(oObjectName, "averageProcessingTime", oForm.getAverageProcessingTime()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - return (pMapping.findForward("ActionEditContainerStatistic")); - } -} - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyEjbContainersStatisticAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyEjbContainersStatisticAction.java deleted file mode 100644 index ea2f48bac5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyEjbContainersStatisticAction.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.management.extensions.base.api.J2EEMBeanAttributeInfo; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Handles update of monitoring configuration for session beans. - * @author S. Ali Tokmen, Malek Chahine - */ -public class ApplyEjbContainersStatisticAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm, final HttpServletRequest pRequest, - final HttpServletResponse pResponse) throws IOException, ServletException { - try { - EjbContainersStatisticForm oForm = (EjbContainersStatisticForm) pForm; - ObjectName oObjectName = ObjectName.getInstance(m_WhereAreYou.getCurrentDomainName() - + ":type=service,name=ejbContainers"); - for (J2EEMBeanAttributeInfo attribute : oForm.getAttributes()) { - if (attribute.isWritable()) { - updateAttribute(oObjectName, attribute, oForm); - } - } - String[] values = {oForm.getApplySettingsTo()}; - String[] signatures = {"java.lang.String"}; - JonasManagementRepr.invoke(oObjectName, "applyMonitorSettings", values, signatures, m_WhereAreYou - .getCurrentJonasServerName()); - - pRequest.setAttribute("applySettingsTo", oForm.getApplySettingsTo()); - /** - * Edit informations for all containers in the forward action. - */ - m_Session.setAttribute("editAllContainers", "true"); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - return (pMapping.findForward("ActionEditEjbContainersStatistic")); - } - - /** - * Update value of the given attribute for the given object instance. - * @param objectName managed object instance - * @param attribute attribute to update - * @param form the form-bean. - **/ - private void updateAttribute(final ObjectName objectName, final J2EEMBeanAttributeInfo attribute, - final EjbContainersStatisticForm form) { - String atrName = attribute.getName(); - if ("monitoringEnabled".equalsIgnoreCase(atrName)) { - attribute.setValue(form.getMonitoringEnabled()); - } - - if ("warningThreshold".equalsIgnoreCase(atrName)) { - attribute.setValue(form.getWarningThreshold()); - } - /** - * Pass the first character to Uppercase. - */ - if (boolean.class.getName().equals(attribute.getType()) || Boolean.class.getName().equals(attribute.getType())) { - setBooleanAttribute(objectName, atrName, Boolean.parseBoolean(attribute.getValue().toString())); - } else if (Integer.class.getName().equals(attribute.getType()) || int.class.getName().equals(attribute.getType())) { - setIntegerAttribute(objectName, atrName, Integer.parseInt(attribute.getValue().toString())); - } - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppCatalinaAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppCatalinaAction.java deleted file mode 100644 index 77e77f7db5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppCatalinaAction.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminException; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyWebAppCatalinaAction extends BaseWebAppAction { - - private static String sDefaultForward = "ActionEditWebAppCatalina"; - - // --------------------------------------------------------- Protected Variables - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String sServerName = oWhere.getCurrentJonasServerName(); - - // Default forward - ActionForward oForward = null; - - // Identify the requested action - WebAppCatalinaForm oForm = (WebAppCatalinaForm) p_Form; - - // Populate - try { - // Perform a "Create WebApp" transaction (if requested) - if ("edit".equals(oForm.getAction())) { - oForward = populateMbean(oForm, p_Mapping.findForward(sDefaultForward), p_Mapping, p_Request); - } - // Reload the web app - else if ("reload".equals(oForm.getAction())) { - oForward = reloadWebApplication(oForm, p_Mapping, sServerName); - } - // Stop the web app - else if ("stop".equals(oForm.getAction())) { - oForward = stopWebApplication(oForm, p_Mapping, sServerName); - } - // Start the web app - else if ("start".equals(oForm.getAction())) { - oForward = startWebApplication(oForm, p_Mapping, sServerName); - } - } catch (JonasAdminException e) { - // Build error - m_Errors.add("webapp", new ActionMessage(e.getId())); - saveErrors(p_Request, m_Errors); - // Return to the current page - oForward = new ActionForward(p_Mapping.getInput()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - oForward = p_Mapping.findForward("Global Error"); - } - - // Next Forward - return oForward; - } - - /** - * Populate the Mbean web application (Context, Manager, Loader). - * - * @param p_Form The current form - * @param p_Forward The current forward - * @param p_Mapping The current mapping - * @param p_Request The current request - * @return If 'save' is requested then return the new forward to save else - * return the current forward - * @throws Exception - */ - protected ActionForward populateMbean(final WebAppCatalinaForm p_Form, final ActionForward p_Forward, final ActionMapping p_Mapping, - final HttpServletRequest p_Request) throws Exception { - ActionForward oForward = p_Forward; - // Context - ObjectName on = ObjectName.getInstance(p_Form.getObjectName()); - // setBooleanAttribute(on, "available", p_Form.isAvailable()); - setBooleanAttribute(on, "cookies", p_Form.isCookies()); - setBooleanAttribute(on, "crossContext", p_Form.isCrossContext()); - setBooleanAttribute(on, "reloadable", p_Form.isReloadable()); - setBooleanAttribute(on, "swallowOutput", p_Form.isSwallowOutput()); - setBooleanAttribute(on, "override", p_Form.isOverride()); - // Save in configuration file - if (p_Form.isSave()) { - // ObjectName onServer = CatalinaObjectName.catalinaServer(); - // JonasManagementRepr.invoke(onServer, "store", null, null); - p_Form.setSave(false); - p_Request.setAttribute("forward", p_Forward.getName()); - oForward = p_Mapping.findForward("ActionEditServletServer"); - } - return oForward; - } - - /** - * Reload the current web application. - * - * @param p_Form The current form - * @param p_Mapping The current mapping - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward reloadWebApplication(final WebAppCatalinaForm p_Form, final ActionMapping p_Mapping, final String jonasServerName) - throws Exception { - try { - ObjectName onContext = new ObjectName(p_Form.getObjectName()); - JonasManagementRepr.invoke(onContext, "reload", null, null, jonasServerName); - } catch (Throwable t) { - throw new JonasAdminException("error.webapp.reload"); - } - // Forward - ActionForward oForward = null; - if (p_Form.getName().equals(m_WhereAreYou.getApplicationContextPath())) { - oForward = p_Mapping.findForward("Main Index"); - } else { - oForward = p_Mapping.findForward(sDefaultForward); - } - return oForward; - } - - /** - * Start the current web application. - * - * @param p_Form The current form - * @param p_Mapping The current mapping - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward startWebApplication(final WebAppCatalinaForm p_Form, final ActionMapping p_Mapping, final String jonasServerName) - throws Exception { - try { - ObjectName onContext = new ObjectName(p_Form.getObjectName()); - JonasManagementRepr.invoke(onContext, "start", null, null, jonasServerName); - } catch (Throwable t) { - throw new JonasAdminException("error.webapp.start"); - } - return p_Mapping.findForward(sDefaultForward); - } - - /** - * Stop the current web application. - * - * @param p_Form The current form - * @param p_Mapping The current mapping - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward stopWebApplication(final WebAppCatalinaForm p_Form, final ActionMapping p_Mapping, final String jonasServerName) - throws Exception { - try { - ObjectName onContext = new ObjectName(p_Form.getObjectName()); - JonasManagementRepr.invoke(onContext, "stop", null, null, jonasServerName); - } catch (Throwable t) { - throw new JonasAdminException("error.webapp.stop"); - } - return p_Mapping.findForward(sDefaultForward); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppJettyAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppJettyAction.java deleted file mode 100644 index 8109b68ddf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppJettyAction.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminException; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyWebAppJettyAction extends BaseWebAppAction { - - private static String sDefaultForward = "ActionEditWebAppJetty"; - -// --------------------------------------------------------- Protected Variables - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - - // Default forward - ActionForward oForward = null; - - // Identify the requested action - WebAppJettyForm oForm = (WebAppJettyForm) p_Form; - - // Populate - try { - // Stop the web app - if ("stop".equals(oForm.getAction())) { - oForward = stopWebApplication(oForm, p_Mapping, jonasServerName); - } - // Start the web app - else if ("start".equals(oForm.getAction())) { - oForward = startWebApplication(oForm, p_Mapping, jonasServerName); - } - } catch (JonasAdminException e) { - // Build error - m_Errors.add("webapp", new ActionMessage(e.getId())); - saveErrors(p_Request, m_Errors); - // Return to the current page - oForward = new ActionForward(p_Mapping.getInput()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - oForward = p_Mapping.findForward("Global Error"); - } - - // Next Forward - return oForward; - } - - -// --------------------------------------------------------- Protected Methods - - /** - * Start the current web application. - * @param p_Form The current form - * @param p_Mapping The current mapping - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward startWebApplication(WebAppJettyForm p_Form, ActionMapping p_Mapping, String jonasServerName) - throws Exception { - try { - ObjectName onContext = new ObjectName(p_Form.getObjectName()); - JonasManagementRepr.invoke(onContext, "start", null, null, jonasServerName); - } catch (Throwable t) { - throw new JonasAdminException("error.webapp.start"); - } - return p_Mapping.findForward(sDefaultForward); - } - - /** - * Stop the current web application. - * @param p_Form The current form - * @param p_Mapping The current mapping - * @return The forward to go to the next page - * @throws Exception - */ - protected ActionForward stopWebApplication(WebAppJettyForm p_Form, ActionMapping p_Mapping, String jonasServerName) - throws Exception { - try { - ObjectName onContext = new ObjectName(p_Form.getObjectName()); - JonasManagementRepr.invoke(onContext, "stop", null, null, jonasServerName); - } catch (Throwable t) { - throw new JonasAdminException("error.webapp.stop"); - } - return p_Mapping.findForward(sDefaultForward); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppVirtualCatalinaAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppVirtualCatalinaAction.java deleted file mode 100644 index e5b400f634..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebAppVirtualCatalinaAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -import java.io.IOException; -import java.util.Map; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - -/** - * @author S. Ali Tokmen - */ -public class ApplyWebAppVirtualCatalinaAction extends BaseWebAppAction { - - private static String sDefaultForward = "ActionEditWebApp"; - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - - // Default forward - ActionForward oForward = null; - - // Identify the requested action - WebAppVirtualCatalinaForm oForm = (WebAppVirtualCatalinaForm) p_Form; - - // Do the action - try { - oForward = p_Mapping.findForward(sDefaultForward); - - String onString = p_Request.getParameter("on"); - boolean refresh = false; - if (onString == null) { - onString = oForm.getObjectName(); - refresh = true; - } - ObjectName on = ObjectName.getInstance(onString); - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - final String[] opSignature = {"java.lang.String", "java.lang.String"}; - Map contexts = (Map) JonasManagementRepr.getAttribute(on, "Contexts", pServer); - - for (String context : contexts.keySet()) { - String policy = p_Request.getParameter(context); - if (policy == null) { - if (refresh) { - policy = (String) contexts.get(context); - } - } - if (policy != null) { - String[] opParams = {context, policy}; - JonasManagementRepr.invoke(on, "rebindContext", opParams, opSignature, pServer); - } - } - } catch (Throwable t) { - t.printStackTrace(); - addGlobalError(t); - saveErrors(p_Request, m_Errors); - oForward = p_Mapping.findForward("Global Error"); - } - - // Next Forward - return oForward; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebsConfirmAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebsConfirmAction.java deleted file mode 100644 index bfcdfe9b95..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ApplyWebsConfirmAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.CatalinaObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class ApplyWebsConfirmAction extends BaseWebAppAction { - - /** - * Signature for the removeConnector operation. - */ - private String removeContextTypes[] = { - "java.lang.String", // Object name - }; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - - // Form used - ArrayList alSelected = (ArrayList) m_Session.getAttribute("listWebContainersSelected"); - - // Actions - try { - String[] values = new String[1]; - String operation = "removeContext"; - // Look up the Catalina MBeanFactory - ObjectName onFactory = CatalinaObjectName.catalinaFactory(); - // Remove connectors - for (int i = 0; i < alSelected.size(); i++) { - WebAppItem o = (WebAppItem) alSelected.get(i); - values[0] = o.getObjectName(); - JonasManagementRepr.invoke(onFactory, operation, values, removeContextTypes, jonasServerName); - } - // refresh tree - refreshTree(p_Request); - //System.out.println("TODO -> refreshTree"); - - - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the connector display page or the list if create - return p_Mapping.findForward("ActionListWebContainers"); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/BaseWebAppAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/BaseWebAppAction.java deleted file mode 100644 index ed11607cda..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/BaseWebAppAction.java +++ /dev/null @@ -1,420 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.net.URL; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.deploy.BaseDeployAction; -import javax.servlet.http.HttpServletRequest; -import org.apache.struts.action.ActionMapping; -/** - * @author Michel-Ange ANTON - * @author S. Ali Tokmen - */ - -abstract public class BaseWebAppAction extends BaseDeployAction { - - // --------------------------------------------------------- Protected - // variables - - protected WebAppForm mWebAppForm; - - protected WarForm mWarForm; - - // --------------------------------------------------------- Public Methods - - // --------------------------------------------------------- Protected - // Methods - - /** - * Initialize the forms and parameters. - * @param p_Mapping Mapping to reset form - * @param p_Request Http request used - * @return true if the forms must be populated - */ - protected boolean initialize(final ActionMapping p_Mapping, final HttpServletRequest p_Request) { - - boolean bPopulate = false; - - // Global form used - mWebAppForm = null; - mWarForm = null; - - // Action - String sParamAction = p_Request.getParameter("action"); - // Selected WebApp (ObjectName) - String sParamWebAppObjectName = p_Request.getParameter("on"); - // Selected War - String sParamPathWar = p_Request.getParameter("war"); - - // Detect create action - if (sParamAction != null && "create".equals(sParamAction)) { - // Create a new WebApp - mWebAppForm = createWebAppForm(p_Mapping, p_Request); - mWebAppForm.setAction("create"); - // Remove WarForm - m_Session.removeAttribute("warForm"); - } else if (sParamWebAppObjectName != null) { - // Build forms with the object name - mWebAppForm = createWebAppForm(p_Mapping, p_Request); - mWebAppForm.setObjectName(sParamWebAppObjectName); - bPopulate = true; - // Remove WarForm - m_Session.removeAttribute("warForm"); - } else if (sParamPathWar != null) { - // Create a new War form - mWarForm = createWarForm(p_Mapping, p_Request); - mWarForm.setPath(sParamPathWar); - mWarForm.setFilename(JonasAdminJmx.extractFilename(sParamPathWar)); - bPopulate = true; - } else { - // Edit last form in session - mWebAppForm = (WebAppForm) m_Session.getAttribute("webAppForm"); - if (mWebAppForm != null) { - mWebAppForm.setAction("edit"); - } - mWarForm = (WarForm) m_Session.getAttribute("warForm"); - // Force populate - if (("reload".equals(sParamAction) == true) || ("start".equals(sParamAction) == true) - || ("stop".equals(sParamAction) == true)) { - bPopulate = true; - } - } - return bPopulate; - } - - /** - * Create a new WebApp form in function of Web Server. - * @param p_Mapping Mapping to reset form - * @param p_Request Http request used - * @return The new form or null if web server unknown - */ - protected WebAppForm createWebAppForm(final ActionMapping p_Mapping, final HttpServletRequest p_Request) { - WebAppForm oForm = null; - if (m_WhereAreYou.isCatalinaServer() == true) { - boolean virtualContext; - try { - String sParamWebAppObjectName = p_Request.getParameter("on"); - ObjectName on = J2eeObjectName.getObjectName(sParamWebAppObjectName); - virtualContext = "true".equals(on.getKeyProperty("virtualContext")); - } catch (Exception e) { - virtualContext = false; - } - if (virtualContext) { - oForm = new WebAppVirtualCatalinaForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("webAppForm", oForm); - m_Session.setAttribute("webAppVirtualCatalinaForm", oForm); - } else { - oForm = new WebAppCatalinaForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("webAppForm", oForm); - m_Session.setAttribute("webAppCatalinaForm", oForm); - } - } else if (m_WhereAreYou.isJettyServer() == true) { - oForm = new WebAppJettyForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("webAppForm", oForm); - m_Session.setAttribute("webAppJettyForm", oForm); - } - return oForm; - } - - /** - * Create a new War form - * @param p_Mapping Mapping to reset form - * @param p_Request Http request used - * @return The new form or null if web server unknown - */ - protected WarForm createWarForm(final ActionMapping p_Mapping, final HttpServletRequest p_Request) { - WarForm oForm = new WarForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("warForm", oForm); - return oForm; - } - - /** - * Populate a WebApp form in function of Web Server. - * @param p_ObjectName The MBean name - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWebApp(final String p_ObjectName, final WebAppForm p_Form) throws Exception { - if (m_WhereAreYou.isCatalinaServer() == true) { - if (p_Form instanceof WebAppVirtualCatalinaForm) { - populateWebAppVirtualCatalina(p_ObjectName, (WebAppVirtualCatalinaForm) p_Form); - } else { - populateWebAppCatalina(p_ObjectName, (WebAppCatalinaForm) p_Form); - } - } else if (m_WhereAreYou.isJettyServer() == true) { - populateWebAppJetty(p_ObjectName, (WebAppJettyForm) p_Form); - } - } - - /** - * Populate a form with the Catalina Context MBean and with the JOnAS War - * MBean if it's found. - * @param p_ObjectName The MBean name - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWebAppCatalina(final String p_ObjectName, final WebAppCatalinaForm p_Form) throws Exception { - // Context - ObjectName on = new ObjectName(p_ObjectName); - p_Form.setObjectName(on.toString()); - p_Form.setName(on.getKeyProperty("name")); - p_Form.setJ2eeApplication(on.getKeyProperty("J2EEApplication")); - p_Form.setJ2eeServer(on.getKeyProperty("J2EEServer")); - p_Form.setPathContext(WebAppItem.extractPathContext(p_Form.getName())); - p_Form.setLabelPathContext(WebAppItem.extractLabelPathContext(p_Form.getPathContext(), m_WhereAreYou - .getCurrentCatalinaDefaultHostName())); - p_Form.setHost(getStringAttribute(on, "hostname")); - p_Form.setCookies(getBooleanAttribute(on, "cookies")); - p_Form.setReloadable(getBooleanAttribute(on, "reloadable")); - p_Form.setSwallowOutput(getBooleanAttribute(on, "swallowOutput")); - p_Form.setCrossContext(getBooleanAttribute(on, "crossContext")); - p_Form.setOverride(getBooleanAttribute(on, "override")); - p_Form.setState(getIntegerAttribute(on, "state")); - } - - /** - * Populate a form a virtual Catalina context. - * @param p_ObjectName The MBean name - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWebAppVirtualCatalina(final String p_ObjectName, final WebAppVirtualCatalinaForm p_Form) - throws Exception { - // Context - ObjectName on = new ObjectName(p_ObjectName); - ObjectName versioningService = new ObjectName(on.getDomain() + ":type=service,name=versioning"); - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - Map contexts = (Map) JonasManagementRepr.getAttribute(on, "Contexts", pServer); - String[] policies = (String[]) JonasManagementRepr.getAttribute(versioningService, "Policies", pServer); - Map nbSessions = new HashMap(contexts.size()); - Map objectNames = new HashMap(contexts.size()); - Set webModules = JonasManagementRepr.queryNames(new ObjectName("*:j2eeType=WebModule,*"), pServer); - for (String context : contexts.keySet()) { - Set contextsON = JonasManagementRepr.queryNames( - new ObjectName("*:type=Manager,path=" + context + ",*"), pServer); - // Use contextsON.iterator().next() since there's only one Manager - // per path - Integer activeSessions = (Integer) JonasManagementRepr.getAttribute(contextsON.iterator().next(), "activeSessions", - pServer); - nbSessions.put(context, activeSessions); - for (ObjectName webModule : webModules) { - if (webModule.getKeyProperty("name").endsWith(context)) { - objectNames.put(context, webModule.toString()); - } - } - } - - p_Form.setObjectName(on.toString()); - p_Form.setName(on.getKeyProperty("name")); - p_Form.setJ2eeApplication(on.getKeyProperty("J2EEApplication")); - p_Form.setJ2eeServer(on.getKeyProperty("J2EEServer")); - p_Form.setPathContext(WebAppItem.extractPathContext(p_Form.getName())); - p_Form.setLabelPathContext(WebAppItem.extractLabelPathContext(p_Form.getPathContext(), m_WhereAreYou - .getCurrentCatalinaDefaultHostName())); - p_Form.setContexts(contexts); - p_Form.setPolicies(policies); - p_Form.setNbSessions(nbSessions); - p_Form.setObjectNames(objectNames); - } - - /** - * Populate a form with the Jetty Context MBean - * @param p_ObjectName Jetty WebContainer+WebApplicationContext MBean - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWebAppJetty(final String p_ObjectName, final WebAppJettyForm p_Form) throws Exception { - ObjectName on = new ObjectName(p_ObjectName); - // Context - p_Form.setStarted(getBooleanAttribute(on, "started")); - p_Form.setResourceBase(getStringAttribute(on, "resourceBase")); - p_Form.setDisplayName(getStringAttribute(on, "displayName")); - p_Form.setPathContext(getStringAttribute(on, "contextPath")); - p_Form.setLabelPathContext(WebAppItem.extractLabelPathContext(p_Form.getPathContext(), null)); - } - - /** - * Return the JOnAS MBean War. - * @param p_PathContext The path context to find - * @return The JOnAS MBean War or null if not found - * @throws Exception - */ - protected ObjectName findJonasMbeanWar(final String p_PathContext, final String domainName, final String jonasServerName) - throws Exception { - ObjectName onRet = null; - ObjectName on; - String sPathContext; - StringBuffer sb; - - Iterator itOnWars = JonasAdminJmx.getListMbean(JonasObjectName.allWars(domainName), jonasServerName).iterator(); - while (itOnWars.hasNext()) { - on = (ObjectName) itOnWars.next(); - sPathContext = getStringAttribute(on, "ContextRoot"); - if (sPathContext.charAt(0) != '/') { - sb = new StringBuffer("/"); - sb.append(sPathContext); - sPathContext = sb.toString(); - } - // Detect the good War - if (p_PathContext.equals(sPathContext) == true) { - onRet = on; - break; - } - } - return onRet; - } - - /** - * Return the WebApp MBean. - * @param p_PathContext The path context to find - * @return The WebApplication (WebModule) MBean or null if not found - * @throws Exception - */ - protected ObjectName findWebAppMbean(final String p_PathContext, final String jonasServerName) throws Exception { - ObjectName onRet = null; - if (m_WhereAreYou.isCatalinaServer() == true) { - onRet = findJ2eeWebModuleMbean(p_PathContext, jonasServerName); - } else if (m_WhereAreYou.isJettyServer() == true) { - - } - return onRet; - } - - /** - * Return the J2ee WebModule MBean. - * @param p_PathContext The path context to find - * @return The WebApplication (WebModule) MBean or null if not found - * @throws Exception - */ - protected ObjectName findJ2eeWebModuleMbean(final String p_PathContext, final String jonasServerName) throws Exception { - ObjectName onRet = null; - ObjectName on; - String sPathContext; - String sSearchPathContext = p_PathContext; - if (sSearchPathContext.charAt(0) != '/') { - sSearchPathContext = "/" + p_PathContext; - } - - Iterator itOns = JonasAdminJmx.getListMbean(J2eeObjectName.getWebModules(m_WhereAreYou.getCurrentCatalinaDomainName()), - jonasServerName).iterator(); - while (itOns.hasNext()) { - on = (ObjectName) itOns.next(); - // ori: sPathContext = getStringAttribute(on, "name"); - sPathContext = on.getKeyProperty("name"); - // Detect the good War - if (sSearchPathContext.equals(sPathContext) == true) { - onRet = on; - break; - } - } - return onRet; - } - - /** - * Populate a form with the JOnAS WebModule MBean given. - * @param p_ObjectName The JOnAS WebModue MBean - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWar(final ObjectName p_ObjectName, final WarForm p_Form, final String jonasServerName) - throws Exception { - if (p_ObjectName != null) { - // p_Form.setPath(p_ObjectName.getKeyProperty("fname")); - String webModulePath = null; - URL webModulePathUrl = (URL) JonasManagementRepr.getAttribute(p_ObjectName, "warURL", jonasServerName); - if (webModulePathUrl != null) { - webModulePath = webModulePathUrl.toString(); - } - p_Form.setPath(webModulePath); - p_Form.setFilename(JonasAdminJmx.extractFilename(p_Form.getPath())); - // here the hostName is set to null as the War MBean has - // HostName=null - // hope Jetty MBean will provide in the future the correct host name - p_Form.setHostName(getStringAttribute(p_ObjectName, "hostname")); - p_Form.setInEar(getBooleanAttribute(p_ObjectName, "inEarCase")); - // p_Form.setContextRoot(getStringAttribute(p_ObjectName, - // "ContextRoot")); - p_Form.setContextRoot(getStringAttribute(p_ObjectName, "path")); - p_Form.setJava2DelegationModel(getBooleanAttribute(p_ObjectName, "java2DelegationModel")); - p_Form.setXmlContent(getStringAttribute(p_ObjectName, "deploymentDescriptor")); - p_Form.setJonasXmlContent(getStringAttribute(p_ObjectName, "jonasDeploymentDescriptor")); - p_Form.setServletsName((String[]) JonasManagementRepr.getAttribute(p_ObjectName, "servlets", jonasServerName)); - p_Form.setWarPath((URL) JonasManagementRepr.getAttribute(p_ObjectName, "warURL", jonasServerName)); - p_Form.setEarPath((URL) JonasManagementRepr.getAttribute(p_ObjectName, "earURL", jonasServerName)); - p_Form.setEarON((String) JonasManagementRepr.getAttribute(p_ObjectName, "earON", jonasServerName)); - } - } - - /** - * Populate a form with the JOnAS WebModule MBean given. - * @param p_ObjectName The JOnAS WebModue MBean - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateJettyWar(final ObjectName p_ObjectName, final WarForm p_Form, final String jonasServerName) - throws Exception { - if (p_ObjectName != null) { - p_Form.setPath(p_ObjectName.getKeyProperty("fname")); - p_Form.setFilename(JonasAdminJmx.extractFilename(p_Form.getPath())); - - p_Form.setHostName(getStringAttribute(p_ObjectName, "HostName")); - p_Form.setInEar(getBooleanAttribute(p_ObjectName, "InEarCase")); - p_Form.setContextRoot(getStringAttribute(p_ObjectName, "ContextRoot")); - p_Form.setJava2DelegationModel(getBooleanAttribute(p_ObjectName, "Java2DelegationModel")); - p_Form.setXmlContent(getStringAttribute(p_ObjectName, "XmlContent")); - p_Form.setJonasXmlContent(getStringAttribute(p_ObjectName, "JOnASXmlContent")); - p_Form.setServletsName((String[]) JonasManagementRepr.getAttribute(p_ObjectName, "ServletsName", jonasServerName)); - p_Form.setWarPath((URL) JonasManagementRepr.getAttribute(p_ObjectName, "WarURL", jonasServerName)); - p_Form.setEarPath((URL) JonasManagementRepr.getAttribute(p_ObjectName, "EarURL", jonasServerName)); - } - } - - /** - * Populate a form with the JOnAS War path given. - * @param p_Path The JOnAS War MBean path - * @param p_Form The form to populate - * @throws Exception - */ - protected void populateWar(final String p_Path, final WarForm p_Form, final String domainName, final String jonasServerName) - throws Exception { - populateWar(JonasObjectName.war(domainName, p_Path), p_Form, jonasServerName); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerForm.java deleted file mode 100644 index 4112bafe06..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerForm.java +++ /dev/null @@ -1,293 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.List; -import java.util.Map; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.service.ModuleForm; - -/** - * - * @author Michel-Ange ANTON - * @author Adriana Danes - * - */ -public class ContainerForm extends ModuleForm { - -// --------------------------------------------------------- Properties variables - - private String path = null; - private String filename = null; - private String containerName = null; - private int currentNumberOfMDBType = 0; - private int currentNumberOfSBFType = 0; - private int currentNumberOfBMPType = 0; - private int currentNumberOfSBLType = 0; - private int currentNumberOfCMPType = 0; - private int currentNumberOfEntityType = 0; - private int currentNumberOfBeanType = 0; - private List ejbs = null; - private Map contexts = null; - private String[] policies = null; - private ObjectName objectName = null; - private boolean monitoringEnabled = false; - private int warningThreshold = 0; - private long numberOfCalls = 0; - private long totalBusinessProcessingTime = 0; - private long totalProcessingTime = 0; - private long averageBusinessProcessingTime = 0; - private long averageProcessingTime = 0; - private String monitoringApplySettings = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - containerName = null; - currentNumberOfMDBType = 0; - currentNumberOfSBFType = 0; - currentNumberOfBMPType = 0; - currentNumberOfSBLType = 0; - currentNumberOfCMPType = 0; - currentNumberOfBeanType = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getFilename() { - return filename; - } - - public String getContainerName() { - return containerName; - } - - public int getCurrentNumberOfMDBType() { - return currentNumberOfMDBType; - } - - public int getCurrentNumberOfSBFType() { - return currentNumberOfSBFType; - } - - public int getCurrentNumberOfBMPType() { - return currentNumberOfBMPType; - } - - public int getCurrentNumberOfSBLType() { - return currentNumberOfSBLType; - } - - public int getCurrentNumberOfCMPType() { - return currentNumberOfCMPType; - } - - public int getCurrentNumberOfBeanType() { - return currentNumberOfBeanType; - } - - public void setFilename(final String filename) { - this.filename = filename; - } - - public void setContainerName(final String containerName) { - this.containerName = containerName; - } - - public void setCurrentNumberOfMDBType(final int currentNumberOfMDBType) { - this.currentNumberOfMDBType = currentNumberOfMDBType; - } - - public void setCurrentNumberOfSBFType(final int currentNumberOfSBFType) { - this.currentNumberOfSBFType = currentNumberOfSBFType; - } - - public void setCurrentNumberOfBMPType(final int currentNumberOfBMPType) { - this.currentNumberOfBMPType = currentNumberOfBMPType; - } - - public void setCurrentNumberOfSBLType(final int currentNumberOfSBLType) { - this.currentNumberOfSBLType = currentNumberOfSBLType; - } - - public void setCurrentNumberOfCMPType(final int currentNumberOfCMPType) { - this.currentNumberOfCMPType = currentNumberOfCMPType; - } - - public void setCurrentNumberOfBeanType(final int currentNumberOfBeanType) { - this.currentNumberOfBeanType = currentNumberOfBeanType; - } - - public List getEjbs() { - return ejbs; - } - - public void setEjbs(final List ejbs) { - this.ejbs = ejbs; - } - - public String getPath() { - return path; - } - - public void setPath(final String path) { - this.path = path; - } - - public int getCurrentNumberOfEntityType() { - return currentNumberOfEntityType; - } - - public void setCurrentNumberOfEntityType(final int currentNumberOfEntityType) { - this.currentNumberOfEntityType = currentNumberOfEntityType; - } - - public Map getContexts() { - return this.contexts; - } - - public void setContexts(final Map contexts) { - this.contexts = contexts; - } - - public String[] getPolicies() { - return this.policies; - } - - public void setPolicies(final String[] policies) { - this.policies = policies; - } - - public boolean getMonitoringEnabled() { - return monitoringEnabled; - } - - public void setMonitoringEnabled(final boolean monitoringEnabled) { - this.monitoringEnabled = monitoringEnabled; - } - - public int getWarningThreshold() { - return warningThreshold; - } - - public void setWarningThreshold(final int warningThreshold) { - this.warningThreshold = warningThreshold; - } - - public long getNumberOfCalls() { - return numberOfCalls; - } - - public void setNumberOfCalls(final int numberOfCalls) { - this.numberOfCalls = numberOfCalls; - } - - public long getTotalBusinessProcessingTime() { - return totalBusinessProcessingTime; - } - - public void setTotalBusinessProcessingTime(final long totalBusinessProcessingTime) { - this.totalBusinessProcessingTime = totalBusinessProcessingTime; - } - - public long getTotalProcessingTime() { - return totalProcessingTime; - } - - public void setTotalProcessingTime(final long totalProcessingTime) { - this.totalProcessingTime = totalProcessingTime; - } - - public long getAverageBusinessProcessingTime() { - return averageBusinessProcessingTime; - } - - public void setAverageBusinessProcessingTime(final long averageBusinessProcessingTime) { - this.averageBusinessProcessingTime = averageBusinessProcessingTime; - } - - public long getAverageProcessingTime() { - return averageProcessingTime; - } - - public void setAverageProcessingTime(final long averageProcessingTime) { - this.averageProcessingTime = averageProcessingTime; - } - - public List getBooleanValues() { - return Jlists.getBooleanValues(); - } - - public String getMonitoringApplySettings() { - return monitoringApplySettings; - } - - public void setMonitoringApplySettings(final String monitoringApplySettings) { - this.monitoringApplySettings = monitoringApplySettings; - } - - public List getMonitoringApplySettingsValues() { - return Jlists.getMonitoringApplySettingsValues(); - } - - public ObjectName getObjectName() { - return objectName; - } - - public void setObjectName(final ObjectName objectName) { - this.objectName = objectName; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItem.java deleted file mode 100644 index 70deaf39a7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItem.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * Used by the JonasTreeBuilder. - * @author Michel-Ange ANTON - * @author Adriana Danes - */ -public class ContainerItem implements NameItem { - - /** - * - */ - private static final long serialVersionUID = 1L; -// --------------------------------------------------------- Properties Variables - - private String path = null; - private String nodeName = null; - private String name = null; - private String file = null; - private String objectName = null; - private String parentName = null; - - -// --------------------------------------------------------- Constructors - - public ContainerItem() { - } - - public ContainerItem(final String p_File, final String p_Path) { - setPath(p_Path); - setFile(p_File); - } - - public ContainerItem(final String p_File, final String p_Path, final String p_ObjectName, final String p_Name) { - setPath(p_Path); - setFile(p_File); - setObjectName(p_ObjectName); - setName(p_Name); - } - - public ContainerItem(final String p_File, final String p_Path, final String p_NodeName, final String p_ObjectName, final String p_Name) { - setPath(p_Path); - setFile(p_File); - setNodeName(p_NodeName); - setName(p_Name); - setObjectName(p_ObjectName); - } - -// --------------------------------------------------------- Properties Methods - - public String getPath() { - return path; - } - - public void setPath(final String path) { - this.path = path; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public String getNodeName() { - return nodeName; - } - - public void setNodeName(final String nodeName) { - this.nodeName = nodeName; - } - - public String getFile() { - return file; - } - - public void setFile(final String file) { - this.file = file; - } - - public String getObjectName() { - return objectName; - } - - public void setObjectName(final String objectName) { - this.objectName = objectName; - } - - public String getParentName() { - return parentName; - } - - public void setParentName(final String parentName) { - this.parentName = parentName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItemByFile.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItemByFile.java deleted file mode 100644 index c7dea9dc3b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ContainerItemByFile.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class ContainerItemByFile implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object pO1, Object pO2) { - ContainerItem oContainer1 = (ContainerItem) pO1; - ContainerItem oContainer2 = (ContainerItem) pO2; - if ((oContainer1.getFile() == null) || (oContainer2.getFile() == null)) { - if ((oContainer1.getFile() == null) && (oContainer2.getFile() == null)) { - return 0; - } else if ((oContainer1.getFile() == null) && (oContainer2.getFile() != null)) { - return 1; - } else { - return -1; - } - } - return oContainer1.getFile().compareToIgnoreCase(oContainer2.getFile()); - } - - public boolean equals(Object pObj) { - if (pObj instanceof ContainerItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EarForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EarForm.java deleted file mode 100644 index f57e79d5b9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EarForm.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -import org.ow2.jonas.webapp.jonasadmin.common.ModuleItemByName; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ -public class EarForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - /** - * Name of the file containing the ear - */ - private String filename = null; - /** - * Complete path of the file containing the ear - */ - private String earPath = null; - /** - * The ear's deployement descriptor - */ - private String xmlDeploymentDescriptor = null; -// /** -// * List of ContainerItems correspondig to the rars contained in the ear. -// */ -// private ArrayList listRars = new ArrayList(); - /** - * List of ModuleItems corresponding to the ejb-jars (EJBModules) contained in the ear. - */ - private ArrayList ejbjars = new ArrayList(); - /** - * List of ModuleItems corresponding to the wars (WebModules) contained in the ear. - */ - private ArrayList wars = new ArrayList(); - /** - * List of ModuleItems corresponding to the rars contained in the ear. - */ - private ArrayList rars = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - filename = null; - earPath = null; - xmlDeploymentDescriptor = null; -// listRars = new ArrayList(); - ejbjars = new ArrayList(); - wars = new ArrayList(); - rars = new ArrayList(); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return the ActionErrors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - /** - * @return the name of the file containing the ear - */ - public String getFilename() { - return filename; - } - /** - * @param filename the name of the file containing the ear - */ - public void setFilename(String filename) { - this.filename = filename; - } - - /** - * @return the complete path of the file containing the ear - */ - public String getEarPath() { - return earPath; - } - - /** - * @param pUrl the ear's URL - */ - public void setEarPath(URL pUrl) { - this.earPath = null; - if (pUrl != null) { - this.earPath = pUrl.getPath(); - } - } - -// /** -// * @return the list of ContainerItems correspondig to the rars contained in the ear. -// */ -// public ArrayList getListRars() { -// return listRars; -// } -// /** -// * Set list of rars given an array of URLs corresponding to each rar. -// * Each item of list is a ContainerItem containing 2 attributes: -// * - file -// * - path -// * -// * @param pUrl Array of Rar -// */ -// public void setListRars(URL[] pUrl) { -// listRars.clear(); -// if (pUrl != null) { -// for (int i = 0; i < pUrl.length; i++) { -// listRars.add(new ContainerItem(JonasAdminJmx.extractFilename(pUrl[i].getPath()) -// , pUrl[i].getPath())); -// } -// // Sort list -// Collections.sort(listRars, new ContainerItemByFile()); -// } -// } - /** - * @return the ear's deployement descriptor - */ - public String getXmlDeploymentDescriptor() { - return xmlDeploymentDescriptor; - } - - /** - * @param xmlDeploymentDescriptor The ear's deployement descriptor - */ - public void setXmlDeploymentDescriptor(String xmlDeploymentDescriptor) { - this.xmlDeploymentDescriptor = xmlDeploymentDescriptor; - } - /** - * @return The list of ModuleItems corresponding to the ejb-jars (EJBModules) contained in the ear. - */ - public ArrayList getEjbjars() { - return ejbjars; - } - /** - * @param ejbjars The list of ModuleItems corresponding to the ejb-jars (EJBModules) contained in the ear. - */ - public void setEjbjars(ArrayList ejbjars) { - this.ejbjars = ejbjars; - } - /** - * @return The list of ModuleItems corresponding to the wars (WebModules) contained in the ear. - */ - public ArrayList getWars() { - return wars; - } - /** - * @param wars The list of ModuleItems corresponding to the wars (WebModules) contained in the ear. - */ - public void setWars(ArrayList wars) { - this.wars = wars; - Collections.sort(wars, new ModuleItemByName()); - } - - /** - * @return Returns the rars. - */ - public ArrayList getRars() { - return rars; - } - - - /** - * @param rars The rars to set. - */ - public void setRars(ArrayList rars) { - this.rars = rars; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerAction.java deleted file mode 100644 index 1e1eb40ea1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerAction.java +++ /dev/null @@ -1,298 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.BaseManagement; -import org.ow2.jonas.lib.management.extensions.container.ContainerManagement; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - */ - -public class EditContainerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - /** - * Prepare to edit statistics on selected container. - */ - m_Session.setAttribute("editAllContainers", "false"); - // Selected container - String sObjectName = p_Request.getParameter("select"); - if (sObjectName == null) { - // Accept request attribute forced by a EditEjbAction - sObjectName = (String) p_Request.getAttribute("select"); - } - // Get next forward if the access is throught a ejb else by default is null - String sNextForward = (String) p_Request.getAttribute("NextForward"); - // Determine the ObjectName of the managed container (module) - ObjectName oObjectName = null; - try { - if (sNextForward != null) { - oObjectName = getModuleObjectName(sObjectName); - } else { - oObjectName = new ObjectName(sObjectName); - } - - if (!BaseManagement.getInstance().isRegistered(oObjectName, serverName)) { - refreshServicesTree(p_Request); - return (p_Mapping.findForward("ActionListContainers")); - } - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - - // Form used - ContainerForm oForm = null; - String sPath = null; - String parentName = null; - // Build a new form - if (oObjectName != null) { - oForm = new ContainerForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("containerForm", oForm); - URL url = (URL) BaseManagement.getInstance().getAttribute(oObjectName, "url", serverName); - sPath = url.getPath(); - - oForm.setPath(sPath); - oForm.setFilename(JonasAdminJmx.extractFilename(sPath)); - oForm.setObjectName(oObjectName); - - - boolean earSupport = true; - try { - Boolean b = (Boolean) BaseManagement.getInstance().getAttribute(oObjectName, "inEarCase", serverName); - } catch (ManagementException noa) { - Throwable cause = noa.getCause(); - if (cause.getClass().equals(javax.management.AttributeNotFoundException.class)) { - earSupport = false; - } - } - - if (earSupport) { - oForm.setEarPath((URL) BaseManagement.getInstance().getAttribute(oObjectName, "earURL", serverName)); - oForm.setEarON(getStringAttribute(oObjectName, "earON")); - parentName = oObjectName.getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - } - } else { - // Used last form in session - oForm = (ContainerForm) m_Session.getAttribute("containerForm"); - } - - // Force the node selected in tree only when no next forward - if (sNextForward == null) { - String fileName = oForm.getFilename(); - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - fileName = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + fileName); - } - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "services" + WhereAreYou.NODE_SEPARATOR - + "ejbContainers" + WhereAreYou.NODE_SEPARATOR + fileName, true); - } - - // Populate - if (oObjectName != null) { - try { - oForm.setObjectName(oObjectName); - getStats(oForm, oObjectName, serverName); - searchEjbs(oForm, sPath, oObjectName, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - if ("true".equals(oObjectName.getKeyProperty("virtualContext"))) { - sNextForward = "Ejb Virtual"; - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName versioningService; - try { - versioningService = new ObjectName(oObjectName.getDomain() + ":type=service,name=versioning"); - } catch (Exception e) { - throw new ServletException("Cannot find the versioning service MBean", e); - } - String[] policies = (String[]) BaseManagement.getInstance().getAttribute(versioningService, "Policies", pServer); - - // Get contexts - Map contexts = - (Map) BaseManagement.getInstance().getAttribute(oObjectName, "Contexts", pServer); - - // Set new contexts and refresh - String[] opSignature = {"java.lang.String", "java.lang.String"}; - for (String context : contexts.keySet()) { - String policy = p_Request.getParameter(context); - if (policy != null) { - String[] opParams = {context, policy}; - BaseManagement.getInstance().invoke(oObjectName, "rebindContext", opParams, opSignature, pServer); - } - } - contexts = (Map) BaseManagement.getInstance().getAttribute(oObjectName, "Contexts", pServer); - - // Set attributes for the JSP - oForm.setContexts(contexts); - oForm.setPolicies(policies); - p_Request.setAttribute("contexts", contexts); - p_Request.setAttribute("policies", policies); - p_Request.setAttribute("objectName", oObjectName); - } - } else { - oForm.setObjectName(null); - oForm.setContexts(null); - oForm.setPolicies(null); - } - - // Replace the normal forward if exists - if (sNextForward == null) { - sNextForward = "Container"; - } - // Forward to the jsp - return (p_Mapping.findForward(sNextForward)); - } - - protected void getStats(final ContainerForm form, final ObjectName objectName, final String serverName) { - boolean ejb3 = false; - String containerName = null; - try { - containerName = (String) BaseManagement.getInstance().getAttribute(objectName, "containerName", serverName); - } catch (ManagementException noa) { - Throwable cause = noa.getCause(); - if (cause.getClass().getName().equals("javax.management.AttributeNotFoundException")) { - ejb3 = true; - containerName = objectName.getKeyProperty("name"); - } - } - form.setContainerName(containerName); - Map nbs = ContainerManagement.getInstance().getTotalEJB(objectName); - int nbtotal = 0; - int nb = (Integer) nbs.get("MessageDrivenBean"); - nbtotal = nbtotal + nb; - form.setCurrentNumberOfMDBType(nb); - nb = (Integer) nbs.get("StatefulSessionBean"); - nbtotal = nbtotal + nb; - form.setCurrentNumberOfSBFType(nb); - nb = (Integer) nbs.get("StatelessSessionBean"); - nbtotal = nbtotal + nb; - form.setCurrentNumberOfSBLType(nb); - nb = (Integer) nbs.get("EntityBean"); - nbtotal = nbtotal + nb; - form.setCurrentNumberOfEntityType(nb); - form.setCurrentNumberOfBeanType(nbtotal); - form.setMonitoringEnabled(getBooleanAttribute(objectName, "monitoringEnabled")); - form.setWarningThreshold(getIntegerAttribute(objectName, "warningThreshold")); - form.setNumberOfCalls(getIntegerAttribute(objectName, "numberOfCalls")); - form.setTotalBusinessProcessingTime(getLongAttribute(objectName, "totalBusinessProcessingTime")); - form.setTotalProcessingTime(getLongAttribute(objectName, "totalProcessingTime")); - form.setAverageBusinessProcessingTime(getLongAttribute(objectName, "averageBusinessProcessingTime")); - form.setAverageProcessingTime(getLongAttribute(objectName, "averageProcessingTime")); - } - /** - * Prepare Ejb list in this container - * @param p_Form - * @param p_Path - * @param p_ObjectName - * @param serverName - * @throws Exception - */ - protected void searchEjbs(final ContainerForm p_Form, final String p_Path, final ObjectName p_ObjectName, final String serverName) - throws Exception { - String sName; - String sTypeResource; - ArrayList al = new ArrayList(); - - /** - * Get entity beans. - */ - List entityBeans = ContainerManagement.getInstance().getEntityBeans(p_ObjectName, serverName); - al.addAll(entityBeans); - - /** - * Get Stateful Session Beans. - */ - List sfsb = ContainerManagement.getInstance().getStatefulSessionBeans(p_ObjectName, serverName); - al.addAll(sfsb); - - /** - * Get Stateless Session Beans. - */ - List slsb = ContainerManagement.getInstance().getStatelessSessionBeans(p_ObjectName, serverName); - al.addAll(slsb); - - /** - * Get Message Driven Beans. - */ - List mdb = ContainerManagement.getInstance().getMessageDrivenBeans(p_ObjectName, serverName); - al.addAll(mdb); - - - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Save in form - p_Form.setEjbs(al); - } - /** - * Gets ObjectName for J2EE Module. - * @param ejbObjectName - * @return module object name. - * @throws MalformedObjectNameException - */ - ObjectName getModuleObjectName(final String ejbObjectName) throws MalformedObjectNameException { - return ContainerManagement.getInstance().getEJBModuleObjectName(ejbObjectName); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerStatisticAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerStatisticAction.java deleted file mode 100644 index 67a6e9f4b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditContainerStatisticAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class EditContainerStatisticAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - ContainerForm oForm = (ContainerForm) m_Session.getAttribute("containerForm"); - - String fileName = oForm.getFilename(); - String parentName = oForm.getObjectName().getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - fileName = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + fileName); - } - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "ejbContainers" - + WhereAreYou.NODE_SEPARATOR + fileName, true); - - // Next forward in EditEjbCsStatisticAction - p_Request.setAttribute("NextForward", "Container Statistic"); - - // Forward to the jsp. - return (p_Mapping.findForward("ActionEditEjbContainersStatistic")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEarAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEarAction.java deleted file mode 100644 index 5f62357f14..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEarAction.java +++ /dev/null @@ -1,254 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.ModuleItem; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class EditEarAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - /** - * Used to initialize the name variable of a ModuleItem when we could not - * identify the J2EEModule corresponding to a given URL which containes such - * a module contained in a given ear. - * This situation can arrive only with WebModules (in this case the MBeans and - * their ObjectNames are created by CATALINA, not by JOnAS). - */ - private static String NONAME = ""; - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Selected ear - String sObjectName = pRequest.getParameter("select"); - - ObjectName oObjectName = null; - String domainName = null; - String serverName = null; - String appName = null; - - // Form used - EarForm oForm = null; - if (sObjectName != null) { - String sPath = null; - try { - // Recreate ObjectName - oObjectName = ObjectName.getInstance(sObjectName); - domainName = oObjectName.getDomain(); - serverName = oObjectName.getKeyProperty("J2EEServer"); - appName = oObjectName.getKeyProperty("name"); - - // check Objectname - if (!JonasManagementRepr.isRegistered(oObjectName, serverName)) { - refreshServicesTree(pRequest); - return (pMapping.findForward("ActionListAppContainers")); - } - // Build a new form - oForm = new EarForm(); - oForm.reset(pMapping, pRequest); - m_Session.setAttribute("earForm", oForm); - URL earUrl = (java.net.URL) JonasManagementRepr.getAttribute(oObjectName, "earUrl", serverName); - sPath = earUrl.toString(); - //oForm.setPath(sPath); - oForm.setFilename(JonasAdminJmx.extractFilename(sPath)); - //oForm.setObjectName(sObjectName); - //oForm.setModuleName(appName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - } else { - // Used last form in session - oForm = (EarForm) m_Session.getAttribute("earForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "ear" + WhereAreYou.NODE_SEPARATOR - + oForm.getFilename(), true); - - // Populate - try { - if (oObjectName != null) { - oForm.setEarPath((URL) JonasManagementRepr.getAttribute(oObjectName, "earUrl", serverName)); - oForm.setXmlDeploymentDescriptor(getStringAttribute(oObjectName, "deploymentDescriptor")); - - // Get modules and construct ModuleItem list - ModuleItem moduleItem = null; - String[] modules = getStringArrayAttribute(oObjectName, "modules"); - ArrayList wars = new ArrayList(); - ArrayList ejbJars = new ArrayList(); - ArrayList rars = new ArrayList(); - for (int i = 0; i < modules.length; i++) { - String module = modules[i]; - ObjectName moduleOn = ObjectName.getInstance(module); - if(JonasAdminJmx.isWebModule(moduleOn)) { - // Create ModuleItem for a WebModule - // TO DO warURL -> url - URL warURL = (URL) JonasManagementRepr.getAttribute(moduleOn, "warURL", serverName); - String path = warURL.getPath(); - moduleItem = new ModuleItem(getPathContext(moduleOn) - , moduleOn.toString() - , path); - wars.add(moduleItem); - } - if(JonasAdminJmx.isEJBModule(moduleOn)) { - // Create ModuleItem for a EJBModule - URL url = (URL) JonasManagementRepr.getAttribute(moduleOn, "url", serverName); - String path = url.getPath(); - moduleItem = new ModuleItem(moduleOn.getKeyProperty("name") - , moduleOn.toString() - , path); - ejbJars.add(moduleItem); - } - if(JonasAdminJmx.isResourceAdapterModule(moduleOn)) { - // Create ModuleItem for a ResourceAdapterModule - // TO DO fileName -> url - String fileName = null; - fileName = (String) JonasManagementRepr.getAttribute(moduleOn, "fileName", serverName); - // TO DO path = url.getPath() - String path = fileName; - moduleItem = new ModuleItem(moduleOn.getKeyProperty("name") - , moduleOn.toString() - , path); - rars.add(moduleItem); - } - } - oForm.setWars(wars); - oForm.setEjbjars(ejbJars); - oForm.setRars(rars); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (pMapping.findForward("Ear")); - } - - /** - * Construct an array of Strings having the same size as the webModuleObjectNames array, - * where each String represents the pathContext part of the name key property of the - * corresponding OBJECT_NAME (same index in the 2 arrays). - * Note that the structure of the name key property of ObjectNames created by Catalina - * for WebModules is: - * //host/pathContext - * @param webModuleObjectNames array of OBJECT_NAMES corresponding to WebModule MBeans - * @return array of pathContexts - */ - private String[] getPathContexts(String[] webModuleObjectNames) { - int nbNames = webModuleObjectNames.length; - String[] ret = new String[nbNames]; - for (int i = 0; i < nbNames; i++) { - ObjectName oObjectName = null; - try { - oObjectName = ObjectName.getInstance(webModuleObjectNames[i]); - } catch (MalformedObjectNameException e) { - ret[i] = null; - } - String nameKeyProp = oObjectName.getKeyProperty("name"); - ret[i] = WebAppItem.extractLabelPathContext( - nameKeyProp - , m_WhereAreYou.getCurrentCatalinaDefaultHostName()); - } - return ret; - } - /** - * Construct a Strings representing the pathContext part of the name key property of the - * corresponding ObjectName. - * Note that the structure of the name key property of ObjectNames created by Catalina - * for WebModules is: - * //host/pathContext - * @param webModuleOn ObjectName corresponding to WebModule MBeans - * @return pathContext - */ - private String getPathContext(ObjectName webModuleOn) { - String ret = null; - String nameKeyProp = webModuleOn.getKeyProperty("name"); - ret = WebAppItem.extractLabelPathContext( - nameKeyProp - , m_WhereAreYou.getCurrentCatalinaDefaultHostName()); - return ret; - } - /** - * Look for the occurence of a String in arrayPathContext in the war URL. - * If found (index > -1) we suppose that this is the name used to construct - * the OBJECT_NAME of the MBean associated to the war. - * @param warPath the URL of a war contained in the current ear - * @param webModuleObjectNames array of WebModule MBean OBJECT_NAMEs which are - * associated to wars contained in the current ear. - * @return -1 if no association could be made, > -1 if an association was found - */ - private int getWebModuleIndex(URL warPath, String[] webModuleObjectNames, String serverName) { - // In Jetty, JSR77 is not fully compliant yet. - // So, should return -1 as warURL is not in the MBean. - // link to bug #303876 - if (m_WhereAreYou != null && m_WhereAreYou.isJettyServer()) { - return -1; - } - int index = -1; - for (int i = 0; i < webModuleObjectNames.length; i++) { - ObjectName webModuleObjectName = null; - try { - webModuleObjectName = ObjectName.getInstance(webModuleObjectNames[i]); - } catch (MalformedObjectNameException e) { - return -1; - } - URL webModuleWarPath = (URL) JonasManagementRepr.getAttribute(webModuleObjectName, "warURL", serverName); - if (warPath.equals(webModuleWarPath)) { - index = i; - break; - } - } - return index; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEjbCsStatisticAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEjbCsStatisticAction.java deleted file mode 100644 index 517631a972..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditEjbCsStatisticAction.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.util.Map; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * - */ - -public class EditEjbCsStatisticAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - /** - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - // Form used - EjbContainersStatisticForm oForm = (EjbContainersStatisticForm) p_Form; - // EjbContainersStatisticForm oForm = new EjbContainersStatisticForm(); - ContainerForm containerForm = (ContainerForm) m_Session.getAttribute("containerForm"); - p_Request.setAttribute("ejbContainersStatisticForm", oForm); - String applySettingsTo = p_Request.getParameter("applySettingsTo"); - String editAllContainers = (String) m_Session.getAttribute("editAllContainers"); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - try { - /** - * Edit statisctic for all containers ? This attribute should has - * been set in EditContainerAction. - */ - ObjectName oObjectName = null; - if (containerForm != null) { - oObjectName = containerForm.getObjectName(); - } else { - oObjectName = ObjectName.getInstance(domainName + ":type=service,name=ejbContainers"); - } - if (editAllContainers != null && "true".equalsIgnoreCase(editAllContainers)) { - oObjectName = ObjectName.getInstance(domainName + ":type=service,name=ejbContainers"); - } - Map nbs = JonasAdminJmx.getTotalEJB(domainName, serverName); - int nbtotal = 0; - int nb = (Integer) nbs.get("MessageDrivenBean"); - nbtotal = nbtotal + nb; - oForm.setTotalCurrentNumberOfMDBType(nb); - nb = (Integer) nbs.get("StatefulSessionBean"); - nbtotal = nbtotal + nb; - oForm.setTotalCurrentNumberOfSBFType(nb); - nb = (Integer) nbs.get("StatelessSessionBean"); - nbtotal = nbtotal + nb; - oForm.setTotalCurrentNumberOfSBLType(nb); - nb = (Integer) nbs.get("EntityBean"); - nbtotal = nbtotal + nb; - oForm.setTotalCurrentNumberOfEntityType(nb); - oForm.setTotalCurrentNumberOfBeanType(nbtotal); - - oForm.setTotalCurrentNumberOfCMPType(getIntegerAttribute(oObjectName, "TotalCurrentNumberOfCMPType")); - oForm.setMonitoringEnabled(getBooleanAttribute(oObjectName, "MonitoringEnabled")); - oForm.setNumberOfCalls(getIntegerAttribute(oObjectName, "NumberOfCalls")); - oForm.setWarningThreshold(getIntegerAttribute(oObjectName, "WarningThreshold")); - - oForm.setAttributes(getAttributes(oObjectName, serverName)); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - }finally { - m_Session.setAttribute("editAllContainers", "false"); - } - if (applySettingsTo != null) { - oForm.setApplySettingsTo(applySettingsTo); - } - - // Replace the normal forward if exists - String sNextForward = (String) p_Request.getAttribute("NextForward"); - if (sNextForward == null) { - sNextForward = "Ejb Containers Statistic"; - } - // Forward to the jsp. - return (p_Mapping.findForward(sNextForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWarAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWarAction.java deleted file mode 100644 index 51993bb824..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWarAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class EditWarAction extends BaseWebAppAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String sServerName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Initialize form - boolean bPopulate = initialize(p_Mapping, p_Request); - - try { - // Populate - if (bPopulate == true) { - // Populate War - populateWar(mWarForm.getPath(), mWarForm, domainName, sServerName); - // Find context - ObjectName onWebApp = findWebAppMbean(mWarForm.getContextRoot(), sServerName); - // Populate WebApp - mWebAppForm = createWebAppForm(p_Mapping, p_Request); - populateWebApp(onWebApp.toString(), mWebAppForm); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "services" + WhereAreYou.NODE_SEPARATOR + "web" - + WhereAreYou.NODE_SEPARATOR + mWebAppForm.getObjectName(), true); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("War")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppAction.java deleted file mode 100644 index aa5805cf5d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppAction.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author S. Ali Tokmen - */ - -public class EditWebAppAction extends BaseWebAppAction { - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, - final HttpServletRequest p_Request, final HttpServletResponse p_Response) throws IOException, ServletException { - - String sForward = null; - // Select the forward - if (m_WhereAreYou.isCatalinaServer()) { - if (p_Form instanceof WebAppVirtualCatalinaForm) { - sForward = "ActionEditWebAppVirtualCatalina"; - } else { - sForward = "ActionEditWebAppCatalina"; - } - } else if (m_WhereAreYou.isJettyServer()) { - sForward = "ActionEditWebAppJetty"; - } - // Forward to the jsp. - return (p_Mapping.findForward(sForward)); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppCatalinaAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppCatalinaAction.java deleted file mode 100644 index a25cc4ff26..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppCatalinaAction.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - * @author S. Ali Tokmen - */ -public class EditWebAppCatalinaAction extends BaseWebAppAction { - - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm, final HttpServletRequest pRequest, - final HttpServletResponse pResponse) throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) pRequest.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String sServerName = oWhere.getCurrentJonasServerName(); - - // Initialize form - boolean bPopulate = initialize(pMapping, pRequest); - String forward = "WebApp Catalina"; - - try { - ObjectName on = J2eeObjectName.getObjectName(mWebAppForm.getObjectName()); - - // Force the node selected in tree - if (mWebAppForm != null && mWebAppForm.getObjectName() != null) { - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "web" + WhereAreYou.NODE_SEPARATOR + mWebAppForm.getObjectName(), true); - } - - // check Objectname - String serverName = on.getKeyProperty("J2EEServer"); - if (!JonasManagementRepr.isRegistered(on, serverName)) { - refreshServicesTree(pRequest); - return (pMapping.findForward("ActionListWebContainers")); - } - - // Populate - if (bPopulate) { - // Populate WebApp - populateWebApp(mWebAppForm.getObjectName(), mWebAppForm); - - // Before, we used the JOnAS War MBean - // ObjectName on = findJonasMbeanWar(m_WebAppForm.getPathContext()); - // Use informations in the Catalina WebModule MBean - if (on != null) { - // Populate War - if (mWebAppForm instanceof WebAppVirtualCatalinaForm) { - forward = "WebApp Virtual Catalina"; - WebAppVirtualCatalinaForm oWebAppForm = (WebAppVirtualCatalinaForm) mWebAppForm; - pRequest.setAttribute("contexts", oWebAppForm.getContexts()); - pRequest.setAttribute("policies", oWebAppForm.getPolicies()); - pRequest.setAttribute("nbSessions", oWebAppForm.getNbSessions()); - pRequest.setAttribute("objectNames", oWebAppForm.getObjectNames()); - pRequest.setAttribute("objectName", oWebAppForm.getObjectName()); - } else { - mWarForm = createWarForm(pMapping, pRequest); - populateWar(on, mWarForm, sServerName); - } - } - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward(forward)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppJettyAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppJettyAction.java deleted file mode 100644 index 4aae31dcea..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EditWebAppJettyAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class EditWebAppJettyAction extends BaseWebAppAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Initialize form - boolean bPopulate = initialize(p_Mapping, p_Request); - - try { - // Force the node selected in tree - if (mWebAppForm != null && mWebAppForm.getObjectName() != null) { - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "services" + WhereAreYou.NODE_SEPARATOR + "web" - + WhereAreYou.NODE_SEPARATOR + mWebAppForm.getObjectName(), true); - } - - // Populate - if (bPopulate) { - // Populate WebApp - populateWebAppJetty(mWebAppForm.getObjectName(), (WebAppJettyForm) mWebAppForm); - // Detect War, still use the JOnAS War MBean as we could not transfer - // management information we need to the Jetty MBean - String pathContext = mWebAppForm.getPathContext(); - ObjectName on = findJonasMbeanWar(pathContext, domainName, serverName); - if (on != null) { - // Populate War - mWarForm = createWarForm(p_Mapping, p_Request); - populateJettyWar(on, mWarForm, serverName); - // here we populated the WarForm very incompletlly, - // for example hostName is null - } - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("WebApp Jetty")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EjbContainersStatisticForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EjbContainersStatisticForm.java deleted file mode 100644 index fca40ebc46..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/EjbContainersStatisticForm.java +++ /dev/null @@ -1,427 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.management.extensions.base.api.J2EEMBeanAttributeInfo; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -public class EjbContainersStatisticForm extends ActionForm { - - // --------------------------------------------------------- Properties - // Variables - - /** - * - */ - private static final long serialVersionUID = 1L; - - private int totalCurrentNumberOfCMPType = 0; - - private int totalCurrentNumberOfSBFType = 0; - - private int currentNumberOfContainer = 0; - - private int totalCurrentNumberOfBMPType = 0; - - private int totalCurrentNumberOfMDBType = 0; - - private int totalCurrentNumberOfSBLType = 0; - - private int totalCurrentNumberOfEntityType = 0; - - private int totalCurrentNumberOfBeanType = 0; - - private boolean ejb3 = false; - - private boolean monitoringEnabled = false; - - private int warningThreshold = 0; - - private long averageProcessingTime = 0; - - /** - * @return the averageProcessingTime - */ - public long getAverageProcessingTime() { - return averageProcessingTime; - } - - /** - * @param averageProcessingTime the averageProcessingTime to set - */ - public void setAverageProcessingTime(final long averageProcessingTime) { - this.averageProcessingTime = averageProcessingTime; - } - - private String applySettingsTo = "none"; - - private long numberOfCalls = 0; - - private boolean monitoringSettingsDefinedInDD = false; - - /** - * Is the type already calculated ? - */ - private boolean writable = true; - - /** - * The MBean attribute descriptors. - */ - private List attributes = new ArrayList(); - - /** - * The MBean attribute descriptors. - */ - private List namingAttributes = new ArrayList(); - - /** - * The MBean attribute descriptors. - */ - private List monitoringAttributes = new ArrayList(); - - /** - * deployment descriptor. - */ - private J2EEMBeanAttributeInfo deploymentDescriptor = null; - - /** - * JOnAS specific deployment descriptor. - */ - private J2EEMBeanAttributeInfo jonasDeploymentDescriptor = null; - - // --------------------------------------------------------- Public Methods - - /** - * @return the namingAttributes. - */ - public List getNamingAttributes() { - return namingAttributes; - } - - /** - * @param namingAttributes the namingAttributes to set. - */ - public void setNamingAttributes(final J2EEMBeanAttributeInfo[] namingAttributes) { - this.namingAttributes.clear(); - for (J2EEMBeanAttributeInfo beanAttributeInfo : namingAttributes) { - this.namingAttributes.add(beanAttributeInfo); - } - } - - /** - * @param monitoringAttributes the namingAttributes to set. - */ - public void setMonitoringAttributes(final J2EEMBeanAttributeInfo[] monitoringAttributes) { - this.monitoringAttributes.clear(); - for (J2EEMBeanAttributeInfo beanAttributeInfo : monitoringAttributes) { - this.monitoringAttributes.add(beanAttributeInfo); - } - } - - /** - * @param monitoringAttributes the namingAttributes to set. - */ - public void setMonitoringAttributes(final List monitoringAttributes) { - this.monitoringAttributes = monitoringAttributes; - } - - /** - * @return the monitoringAttributes - */ - public List getMonitoringAttributes() { - return monitoringAttributes; - } - - /** - * @return the deploymentDescriptor. - */ - public J2EEMBeanAttributeInfo getDeploymentDescriptor() { - return deploymentDescriptor; - } - - /** - * @param deploymentDescriptor the deploymentDescriptor to set. - */ - public void setDeploymentDescriptor(final J2EEMBeanAttributeInfo deploymentDescriptor) { - this.deploymentDescriptor = deploymentDescriptor; - } - - /** - * @return the jonasDeploymentDescriptor. - */ - public J2EEMBeanAttributeInfo getJonasDeploymentDescriptor() { - return jonasDeploymentDescriptor; - } - - /** - * @param jonasDeploymentDescriptor the jonasDeploymentDescriptor to set. - */ - public void setJonasDeploymentDescriptor(final J2EEMBeanAttributeInfo jonasDeploymentDescriptor) { - this.jonasDeploymentDescriptor = jonasDeploymentDescriptor; - } - - /** - * Reset all properties to their default values. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - totalCurrentNumberOfCMPType = 0; - totalCurrentNumberOfSBFType = 0; - currentNumberOfContainer = 0; - totalCurrentNumberOfBMPType = 0; - totalCurrentNumberOfMDBType = 0; - totalCurrentNumberOfSBLType = 0; - totalCurrentNumberOfBeanType = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, and - * return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no recorded - * error messages. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - // --------------------------------------------------------- Properties - // Methods - - public int getTotalCurrentNumberOfCMPType() { - return totalCurrentNumberOfCMPType; - } - - public int getTotalCurrentNumberOfSBFType() { - return totalCurrentNumberOfSBFType; - } - - public int getCurrentNumberOfContainer() { - return currentNumberOfContainer; - } - - public int getTotalCurrentNumberOfBMPType() { - return totalCurrentNumberOfBMPType; - } - - public int getTotalCurrentNumberOfMDBType() { - return totalCurrentNumberOfMDBType; - } - - public int getTotalCurrentNumberOfSBLType() { - return totalCurrentNumberOfSBLType; - } - - public int getTotalCurrentNumberOfBeanType() { - return totalCurrentNumberOfBeanType; - } - - public void setTotalCurrentNumberOfCMPType(final int totalCurrentNumberOfCMPType) { - this.totalCurrentNumberOfCMPType = totalCurrentNumberOfCMPType; - } - - public void setTotalCurrentNumberOfSBFType(final int totalCurrentNumberOfSBFType) { - this.totalCurrentNumberOfSBFType = totalCurrentNumberOfSBFType; - } - - public void setCurrentNumberOfContainer(final int currentNumberOfContainer) { - this.currentNumberOfContainer = currentNumberOfContainer; - } - - public void setTotalCurrentNumberOfBMPType(final int totalCurrentNumberOfBMPType) { - this.totalCurrentNumberOfBMPType = totalCurrentNumberOfBMPType; - } - - public void setTotalCurrentNumberOfMDBType(final int totalCurrentNumberOfMDBType) { - this.totalCurrentNumberOfMDBType = totalCurrentNumberOfMDBType; - } - - public void setTotalCurrentNumberOfSBLType(final int totalCurrentNumberOfSBLType) { - this.totalCurrentNumberOfSBLType = totalCurrentNumberOfSBLType; - } - - public void setTotalCurrentNumberOfBeanType(final int totalCurrentNumberOfBeanType) { - this.totalCurrentNumberOfBeanType = totalCurrentNumberOfBeanType; - } - - public int getTotalCurrentNumberOfEntityType() { - return totalCurrentNumberOfEntityType; - } - - public void setTotalCurrentNumberOfEntityType(final int totalCurrentNumberOfEntityType) { - this.totalCurrentNumberOfEntityType = totalCurrentNumberOfEntityType; - } - - public boolean getMonitoringEnabled() { - return monitoringEnabled; - } - - public void setMonitoringEnabled(final boolean monitoringEnabled) { - this.monitoringEnabled = monitoringEnabled; - } - - public int getWarningThreshold() { - return warningThreshold; - } - - public void setWarningThreshold(final int warningThreshold) { - this.warningThreshold = warningThreshold; - } - - public String getApplySettingsTo() { - return applySettingsTo; - } - - public void setApplySettingsTo(final String applySettingsTo) { - this.applySettingsTo = applySettingsTo; - } - - public List getBooleanValues() { - return Jlists.getBooleanValues(); - } - - public long getNumberOfCalls() { - return numberOfCalls; - } - - public void setNumberOfCalls(final int numberOfCalls) { - this.numberOfCalls = numberOfCalls; - } - - public boolean isMonitoringSettingsDefinedInDD() { - return monitoringSettingsDefinedInDD; - } - - public void setMonitoringSettingsDefinedInDD(final boolean monitoringSettingsDefinedInDD) { - this.monitoringSettingsDefinedInDD = monitoringSettingsDefinedInDD; - } - - /** - * @return the attributes. - */ - public List getAttributes() { - return attributes; - } - - /** - * @param attributes the attributes to set. - */ - public void setAttributes(final J2EEMBeanAttributeInfo[] attributes) { - this.attributes.clear(); - this.monitoringAttributes.clear(); - this.namingAttributes.clear(); - for (J2EEMBeanAttributeInfo beanAttributeInfo : attributes) { - /** - * put deployment descriptors in dedicated fields. - */ - if ("deploymentDescriptor".equalsIgnoreCase(beanAttributeInfo.getName())) { - String value = beanAttributeInfo.getValue().toString(); - /** - * If the attribute value is consistent - */ - if (value != null && !value.contains("IMPLEMENTED")) { - deploymentDescriptor = beanAttributeInfo; - } - } else if ("jonasDeploymentDescriptor".equalsIgnoreCase(beanAttributeInfo.getName())) { - String value = beanAttributeInfo.getValue().toString(); - if (value != null && !value.contains("IMPLEMENTED")) { - jonasDeploymentDescriptor = beanAttributeInfo; - } - } else { - if (!"ejbs".equals(beanAttributeInfo.getName()) && !"server".equals(beanAttributeInfo.getName()) - && !"objectName".equals(beanAttributeInfo.getName()) - && !beanAttributeInfo.getName().contains("statistic") && !"id".equals(beanAttributeInfo.getName()) - && !"stateManageable".equals(beanAttributeInfo.getName()) - && !beanAttributeInfo.getName().contains("statistic") - && !"eventProvider".equals(beanAttributeInfo.getName()) - && !"javaVMs".equals(beanAttributeInfo.getName()) && !beanAttributeInfo.getName().contains("NumberOf") - && !"earON".equals(beanAttributeInfo.getName()) - && !"modelerType".equals(beanAttributeInfo.getName())) { - if (beanAttributeInfo.getName().contains("ame") || beanAttributeInfo.getName().contains("file") - || beanAttributeInfo.getName().contains("url") || beanAttributeInfo.getName().contains("Ear") - || beanAttributeInfo.getName().contains("ear") || beanAttributeInfo.getName().contains("ejb") - || beanAttributeInfo.getName().contains("java") || beanAttributeInfo.getName().contains("modeler") - || beanAttributeInfo.getName().contains("jar") || beanAttributeInfo.getName().contains("Jar") - || "available".equals(beanAttributeInfo.getName())) { - this.namingAttributes.add(beanAttributeInfo); - } else { - monitoringAttributes.add(beanAttributeInfo); - } - } - this.attributes.add(beanAttributeInfo); - } - } - } - - /** - * true if ejb3 container. - * @return - */ - public boolean isEjb3() { - for (J2EEMBeanAttributeInfo attribute : attributes) { - if ("warningThreshold".equals(attribute.getName())) { - // the "warningThreshold" attribute is defined for ejb2 only. - ejb3 = false; - return ejb3; - } - } - ejb3 = true; - return ejb3; - } - - /** - * true if any attribute is writable. - * @return - */ - public boolean isWritable() { - for (J2EEMBeanAttributeInfo attribute : attributes) { - if (attribute.isWritable()) { - // the "warningThreshold" attribute is defined for ejb2 only. - writable = true; - return writable; - } - } - writable = false; - return writable; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListAppContainersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListAppContainersAction.java deleted file mode 100644 index 374ae22ce2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListAppContainersAction.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ListAppContainersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "ear", true); - - // Force the deployment type to use the refreshing method - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_EAR); - - String s_refresh = (String) p_Request.getParameter("refresh"); - boolean refresh = Boolean.valueOf(s_refresh).booleanValue(); - - // no Form used - try { - // Refresh in case deploy/undeploy operation arrived. - if (refresh) { - refreshServicesTree(p_Request); - } - - // Get container list - String sPath; - String sFile; - String sName; - ArrayList al = new ArrayList(); - String p_DomainName = m_WhereAreYou.getCurrentDomainName(); - String p_ServerName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName onContainers = J2eeObjectName.J2EEApplications(p_DomainName, p_ServerName); - Iterator itNames = JonasManagementRepr.queryNames(onContainers, p_ServerName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - sPath = ((java.net.URL) JonasManagementRepr.getAttribute(it_on, "earUrl",p_ServerName )).toString(); - //sPath = itNames.next().toString(); - sFile = JonasAdminJmx.extractFilename(sPath); - sName = it_on.getKeyProperty("name"); - al.add(new ContainerItem(sFile, sPath, it_on.toString(), sName)); - } - Collections.sort(al, new ContainerItemByFile()); - // Set list in the request - p_Request.setAttribute("listAppContainers", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("App Containers")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListContainersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListContainersAction.java deleted file mode 100644 index 394abb631e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListContainersAction.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class ListContainersAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form, final HttpServletRequest p_Request, - final HttpServletResponse p_Response) throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "ejbContainers", true); - - // Force the deployment type to use the refreshing method - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_JAR); - - String s_refresh = p_Request.getParameter("refresh"); - boolean refresh = Boolean.valueOf(s_refresh).booleanValue(); - // This attribute is used in EditEjbCsStatisticAction, to know whether - // to display infos on all containers or a selected one. - m_Session.setAttribute("editAllContainers", "true"); - // no Form used - try { - // Refresh in case deploy/undeploy operation arrived. - if (refresh) { - refreshServicesTree(p_Request); - } - - // Get container list - String sFile; - String sPath; - String sName; - String parentName; - ArrayList al = new ArrayList(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName onContainers = J2eeObjectName.getEJBModules(domainName, serverName); - Iterator itNames = JonasManagementRepr.queryNames(onContainers, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - URL url = (URL) JonasManagementRepr.getAttribute(it_on, "url", serverName); - String path = url.getPath(); - sFile = JonasAdminJmx.extractFilename(path); - sName = it_on.getKeyProperty("name"); - parentName = it_on.getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - sName = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + sName); - } - boolean add = al.add(new ContainerItem(sFile, path, it_on.toString(), sName)); - } - - Collections.sort(al, new ContainerItemByFile()); - // Set list in the request - p_Request.setAttribute("listContainers", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Containers")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListWebContainersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListWebContainersAction.java deleted file mode 100644 index 398a8dfd6a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ListWebContainersAction.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JettyObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ - -public class ListWebContainersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "web", true); - // Force the deployment type to use the refreshing method - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_WAR); - // Delete last list if used - m_Session.removeAttribute("itemsWebContainersForm"); - - String s_refresh = (String) p_Request.getParameter("refresh"); - boolean refresh = Boolean.valueOf(s_refresh).booleanValue(); - - // no Form used - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - if (refresh) { - refreshServicesTree(p_Request); - } - - ArrayList al = new ArrayList(); - ObjectName on; - String sPathContext; - HashMap hWebAppItems = new HashMap(); - - // Get the list of Catalina contexts - if (m_WhereAreYou.isCatalinaServer()) { - WebAppItem oItem; - //String p_serverName = m_WhereAreYou.getAdminJonasServerName(); - ObjectName onContainers = J2eeObjectName.getWebModules(domainName, serverName); - Iterator itOns = JonasAdminJmx.getListMbean(onContainers, serverName).iterator(); - while (itOns.hasNext()) { - ObjectName onWebModule = (ObjectName) itOns.next(); - oItem = new WebAppItem(onWebModule, m_WhereAreYou.getCurrentCatalinaDefaultHostName()); - try { - String webModulePath = ((URL) JonasManagementRepr.getAttribute(onWebModule, "warURL", serverName)).toString(); - String sFile = JonasAdminJmx.extractFilename(webModulePath); - oItem.setFile(sFile); - oItem.setPath(webModulePath); - } catch(Exception e) { - oItem.setFile(""); - oItem.setPath(""); - } - hWebAppItems.put(oItem.getLabelPathContext(), oItem); - } - } else if (m_WhereAreYou.isJettyServer()) { - // Get the list of Jetty contexts - Iterator itOnContexts = JonasAdminJmx.getListMbean(JettyObjectName.jettyContexts(domainName), serverName). - iterator(); - while (itOnContexts.hasNext()) { - on = (ObjectName) itOnContexts.next(); - sPathContext = on.getKeyProperty("context"); - if (sPathContext != null) { - if (!hWebAppItems.containsKey(sPathContext) && on.getKeyProperty("WebApplicationContext") != null && - on.getKeyProperty("WebApplicationHandler") == null && on.getKeyProperty("config") == null) { - hWebAppItems.put(sPathContext, new WebAppItem(sPathContext, on.toString())); - } - } - } - - // Get the list of JOnAS War - /* This code is only executed with Jetty because the transfere - * of management attributes from 'War' MBeans to JettyMBeans is - * not done yet - */ - String sPath; - String sFile; - WebAppItem oWeb; - Iterator itOnWars = JonasAdminJmx.getListMbean(JonasObjectName.allWars(domainName), serverName).iterator(); - while (itOnWars.hasNext()) { - on = (ObjectName) itOnWars.next(); - sPath = on.getKeyProperty("fname"); - sFile = JonasAdminJmx.extractFilename(sPath); - sPathContext = getStringAttribute(on, "ContextRoot"); - if (sPathContext.charAt(0) != '/') { - sPathContext = "/" + sPathContext; - } - oWeb = (WebAppItem) hWebAppItems.get(sPathContext); - if (oWeb != null) { - oWeb.setFile(sFile); - oWeb.setPath(sPath); - } - } - } - - // Prepare to display and sort - al.addAll(hWebAppItems.values()); - Collections.sort(al, new WebAppItemByPathContext()); - - // Set list in the request - p_Request.setAttribute("listWebContainers", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Web Containers")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/SelectedItemsForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/SelectedItemsForm.java deleted file mode 100644 index 9aa3bd4e28..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/SelectedItemsForm.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class SelectedItemsForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] checkedItems = new String[0]; - private ArrayList selectedItems = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - checkedItems = new String[0]; - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getCheckedItems() { - return checkedItems; - } - - public void setCheckedItems(String[] checkedItems) { - this.checkedItems = checkedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public ArrayList getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(ArrayList selectedItems) { - this.selectedItems = selectedItems; - } - -// --------------------------------------------------------- Properties Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerAction.java deleted file mode 100644 index 7e60675102..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action used to force the node in tree. - * To edit correctly a container call first the EditContainerAction. - * - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class ViewContainerAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - ContainerForm oForm = (ContainerForm) m_Session.getAttribute("containerForm"); - - String fileName = oForm.getFilename(); - String parentName = oForm.getObjectName().getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - fileName = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + fileName); - } - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "services" + WhereAreYou.NODE_SEPARATOR - + "ejbContainers" + WhereAreYou.NODE_SEPARATOR + fileName, true); - - // Forward to the jsp. - return (p_Mapping.findForward("Container")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerEjbsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerEjbsAction.java deleted file mode 100644 index 2f7990969e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/ViewContainerEjbsAction.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action used to force the node in tree. - * - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class ViewContainerEjbsAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - ContainerForm oForm = (ContainerForm) m_Session.getAttribute("containerForm"); - - String fileName = oForm.getFilename(); - String parentName = oForm.getObjectName().getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - if (parentName != null && !"none".equals(parentName) && !"null".equals(parentName)) { - fileName = parentName.concat(WhereAreYou.NODE_NAME_SEPARATOR + fileName); - } - - String nodeName = getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "ejbContainers" - + WhereAreYou.NODE_SEPARATOR + fileName; - m_WhereAreYou.selectNameNode(nodeName, true); - - // Forward to the jsp. - return (p_Mapping.findForward("Container Ejbs")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WarForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WarForm.java deleted file mode 100644 index 6d404eceb0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WarForm.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.ArrayList; -import java.util.Collections; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.service.ModuleForm; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class WarForm extends ModuleForm { - -// --------------------------------------------------------- Properties variables - - private String path = null; - private String filename = null; - private String contextRoot = null; - private String hostName = null; - private String warFile = null; - private String warPath = null; - private boolean java2DelegationModel = false; - private String xmlContent = null; - private String jonasXmlContent = null; - private String[] servletsName = null; - private ArrayList listServlets = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - path = null; - filename = null; - - contextRoot = null; - hostName = null; - warPath = null; - java2DelegationModel = false; - xmlContent = null; - jonasXmlContent = null; - servletsName = null; - listServlets = new ArrayList(); - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getFilename() { - return filename; - } - - public void setFilename(String filename) { - this.filename = filename; - } - - public String getHostName() { - return hostName; - } - - public void setHostName(String hostName) { - this.hostName = hostName; - } - - public String getWarPath() { - return warPath; - } - - public void setWarPath(java.net.URL p_WarUrl) { - this.warPath = null; - if (p_WarUrl != null) { - this.warPath = p_WarUrl.getPath(); - } - } - - public String getContextRoot() { - return contextRoot; - } - - public void setContextRoot(String contextRoot) { - this.contextRoot = contextRoot; - } - - public boolean getJava2DelegationModel() { - return java2DelegationModel; - } - - public void setJava2DelegationModel(boolean java2DelegationModel) { - this.java2DelegationModel = java2DelegationModel; - } - - public String getXmlContent() { - return xmlContent; - } - - public void setXmlContent(String xmlContent) { - this.xmlContent = xmlContent; - } - - public String getJonasXmlContent() { - return jonasXmlContent; - } - - public void setJonasXmlContent(String jonasXmlContent) { - this.jonasXmlContent = jonasXmlContent; - } - - public String[] getServletsName() { - return servletsName; - } - - public void setServletsName(String[] servletsName) { - this.servletsName = servletsName; - // Fill list - listServlets = new ArrayList(); - for (int i = 0; i < this.servletsName.length; i++) { - listServlets.add(this.servletsName[i]); - } - Collections.sort(listServlets); - } - - public ArrayList getListServlets() { - return listServlets; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppCatalinaForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppCatalinaForm.java deleted file mode 100644 index b2b5700013..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppCatalinaForm.java +++ /dev/null @@ -1,195 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class WebAppCatalinaForm extends WebAppForm { - -// --------------------------------------------------------- Properties variables - - private String host = null; - private boolean cookies = false; - private boolean reloadable = false; - private boolean swallowOutput = false; - private boolean crossContext = false; - private boolean override = false; - private String docBase = null; - private int state = 0; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - - cookies = true; - reloadable = false; - swallowOutput = false; - crossContext = false; - override = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = super.validate(mapping, request); - //numberCheck(oErrors, "sessionTimeout", sessionTimeout, true, 1, 65535); - return oErrors; - } - - /* - * Helper method to check that it is a required number and - * is a valid integer within the given range. (min, max). - * - * @param field The field name in the form for which this error occured. - * @param numText The string representation of the number. - * @param rangeCheck Boolean value set to true of reange check should be performed. - * - * @param min The lower limit of the range - * @param max The upper limit of the range - * - */ - public void numberCheck(ActionErrors p_Errors, String field, String numText, boolean rangeCheck - , int min, int max) { - // Check for 'is required' - if ((numText == null) || (numText.length() < 1)) { - p_Errors.add(field, new ActionMessage("error.webapp.setting." + field + ".required")); - } else { - - // check for 'must be a number' in the 'valid range' - try { - int num = Integer.parseInt(numText); - // perform range check only if required - if (rangeCheck) { - if ((num < min) || (num > max)) { - p_Errors.add(field - , new ActionMessage("error.webapp.setting." + field + ".range")); - } - } - } catch (NumberFormatException e) { - p_Errors.add(field, new ActionMessage("error.webapp.setting." + field + ".format")); - } - } - } - -// --------------------------------------------------------- Properties Methods -/* - public boolean isAvailable() { - return available; - } - - public void setAvailable(boolean available) { - this.available = available; - } -*/ - public boolean isCookies() { - return cookies; - } - - public void setCookies(boolean cookies) { - this.cookies = cookies; - } - - public boolean isReloadable() { - return reloadable; - } - - public void setReloadable(boolean reloadable) { - this.reloadable = reloadable; - } - - public boolean isSwallowOutput() { - return swallowOutput; - } - - public void setSwallowOutput(boolean swallowOutput) { - this.swallowOutput = swallowOutput; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public boolean isCrossContext() { - return crossContext; - } - - public void setCrossContext(boolean crossContext) { - this.crossContext = crossContext; - } - - public String getDocBase() { - return docBase; - } - - public void setDocBase(String docBase) { - this.docBase = docBase; - } - - public boolean isOverride() { - return override; - } - - public void setOverride(boolean override) { - this.override = override; - } - public int getState() { - return state; - } - - public void setState(int state) { - this.state = state; - } - - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppForm.java deleted file mode 100644 index e46004b5ff..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppForm.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - - -/** - * @author Michel-Ange ANTON - */ -public class WebAppForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String action = "edit"; - private boolean save = false; - private String pathContext = null; - private String labelPathContext = null; - private List booleanValues = Jlists.getBooleanValues(); - private String objectName = null; - private String j2eeApplication = null; - private String j2eeServer = null; - private String name = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - action = "edit"; - save = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - // Path context - if (getPathContext().length() == 0) { - oErrors.add("context", new ActionMessage("error.webapp.context.required")); - } - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getPathContext() { - return pathContext; - } - - public void setPathContext(final String pathContext) { - this.pathContext = pathContext; - if (pathContext.length() > 0) { - if (pathContext.charAt(0) != '/') { - this.pathContext = "/" + pathContext; - } - } - } - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public List getBooleanValues() { - return booleanValues; - } - - public String getLabelPathContext() { - return labelPathContext; - } - - public void setLabelPathContext(final String labelPathContext) { - this.labelPathContext = labelPathContext; - } - - public boolean isSave() { - return save; - } - - public void setSave(final boolean save) { - this.save = save; - } - - public String getObjectName() { - return objectName; - } - - public void setObjectName(final String objectName) { - this.objectName = objectName; - } - - public String getJ2eeApplication() { - return j2eeApplication; - } - - public void setJ2eeApplication(final String j2eeApplication) { - this.j2eeApplication = j2eeApplication; - } - - public String getJ2eeServer() { - return j2eeServer; - } - - public void setJ2eeServer(final String j2eeServer) { - this.j2eeServer = j2eeServer; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItem.java deleted file mode 100644 index f6d79b5564..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItem.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import javax.management.ObjectName; - -/** - * @author Michel-Ange ANTON - */ -public class WebAppItem extends ContainerItem { - -// --------------------------------------------------------- Constants - - public final static String LABEL_ROOT_WEBMODULE = "ROOT"; - public final static String APPEND_CHAR = "_"; - -// --------------------------------------------------------- Properties Variables - - private String objectName = null; - private String pathContext = null; - private String labelPathContext = null; - private boolean deployed = false; - -// --------------------------------------------------------- Constructors - - public WebAppItem() { - } - - public WebAppItem(ObjectName p_ObjectName, String defaultHost) { - setObjectName(p_ObjectName.toString()); - setName(p_ObjectName.getKeyProperty("name")); - setPathContext(extractPathContext(getName())); - setLabelPathContext(extractLabelPathContext(getName(), defaultHost)); - } - /** - * Used for Jetty containers only - * @param p_PathContext - * @param p_ObjectName - */ - public WebAppItem(String p_PathContext, String p_ObjectName) { - setPathContext(p_PathContext); - setObjectName(p_ObjectName); - setLabelPathContext(extractLabelPathContext(getPathContext(), null)); - } - -// --------------------------------------------------------- Public static Methods - - public static String extractLabelPathContext(String p_Name, String defaultHost) { - String s = p_Name; - if ((s != null) && (s.length() > 0)) { - if (defaultHost == null) { - // Old way - delete HOST - s = extractPathContext(p_Name); - // Delete '/' - if (s.charAt(0) == '/') { - s = s.substring(1); - if (s.length() == 0) { - s = LABEL_ROOT_WEBMODULE; - } - } - } else { - // Extract HOST and use it to construct label if this is not - // the default host (localhost in default configuration) - int iPos = s.indexOf("//"); - if (iPos > -1) { - s = s.substring(iPos + 2); - iPos = s.indexOf("/"); - if (iPos > -1) { - String host = s.substring(0, iPos); - s = s.substring(iPos); - if (s.charAt(0) == '/') { - s = s.substring(1); - if (s.length() == 0) { - if (defaultHost.equals(host)) { - s = LABEL_ROOT_WEBMODULE; - } else { - s = host + APPEND_CHAR + LABEL_ROOT_WEBMODULE; - } - } - } - } - } - } - } - return s; - } - - public static String extractPathContext(String p_Name) { - String s = p_Name; - // Delete //HOST - int iPos = s.indexOf("//"); - if (iPos > -1) { - s = s.substring(iPos + 2); - iPos = s.indexOf("/"); - if (iPos > -1) { - s = s.substring(iPos); - } - } - return s; - } - -// --------------------------------------------------------- Properties Methods - - public String getPathContext() { - return pathContext; - } - - public void setPathContext(String pathContext) { - this.pathContext = pathContext; - } - - public boolean isDeployed() { - return deployed; - } - - public String getLabelPathContext() { - return labelPathContext; - } - - /** - * Extend parent method to set the property deployed. - * - * @param p_Path The complete path (docBase) of the web application - */ - public void setPath(String p_Path) { - super.setPath(p_Path); - if (getPath() != null) { - deployed = true; - } - } - - public void setLabelPathContext(String labelPathContext) { - this.labelPathContext = labelPathContext; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItemByPathContext.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItemByPathContext.java deleted file mode 100644 index 4caecf5466..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppItemByPathContext.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class WebAppItemByPathContext implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - WebAppItem o1 = (WebAppItem) p_O1; - WebAppItem o2 = (WebAppItem) p_O2; - return o1.getPathContext().compareToIgnoreCase(o2.getPathContext()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof WebAppItem) { - return (compare(this, p_Obj) == 0); - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppJettyForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppJettyForm.java deleted file mode 100644 index e6e45443a8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppJettyForm.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class WebAppJettyForm extends WebAppForm { - -// --------------------------------------------------------- Properties variables - - private String host = null; - private String resourceBase = null; - private String displayName = null; - private boolean started = false; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - - started = false; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = super.validate(mapping, request); - return oErrors; - } - - /* - * Helper method to check that it is a required number and - * is a valid integer within the given range. (min, max). - * - * @param field The field name in the form for which this error occured. - * @param numText The string representation of the number. - * @param rangeCheck Boolean value set to true of reange check should be performed. - * - * @param min The lower limit of the range - * @param max The upper limit of the range - * - */ - public void numberCheck(ActionErrors p_Errors, String field, String numText, boolean rangeCheck - , int min, int max) { - // Check for 'is required' - if ((numText == null) || (numText.length() < 1)) { - p_Errors.add(field, new ActionMessage("error.webapp.setting." + field + ".required")); - } else { - - // check for 'must be a number' in the 'valid range' - try { - int num = Integer.parseInt(numText); - // perform range check only if required - if (rangeCheck) { - if ((num < min) || (num > max)) { - p_Errors.add(field - , new ActionMessage("error.webapp.setting." + field + ".range")); - } - } - } catch (NumberFormatException e) { - p_Errors.add(field, new ActionMessage("error.webapp.setting." + field + ".format")); - } - } - } - -// --------------------------------------------------------- Properties Methods - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getResourceBase() { - return resourceBase; - } - - public void setResourceBase(String resourceBase) { - this.resourceBase = resourceBase; - } - - public String getDisplayName() { - return displayName; - } - - public void setDisplayName(String displayName) { - this.displayName = displayName; - } - - public boolean isStarted() { - return started; - } - - public void setStarted(boolean started) { - this.started = started; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppVirtualCatalinaForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppVirtualCatalinaForm.java deleted file mode 100644 index 499f490835..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/container/WebAppVirtualCatalinaForm.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.container; - -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author S. Ali Tokmen - */ -public class WebAppVirtualCatalinaForm extends WebAppForm { - /** - * Contexts for this virtual path. - */ - private Map contexts; - - /** - * List of possible policies. - */ - private String[] policies; - - /** - * Number of active sessions for each version on this virtual path. - */ - private Map nbSessions; - - /** - * Object names for each version on this virtual path. - */ - private Map objectNames; - - /** - * Reset all properties to their default values. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - super.reset(mapping, request); - } - - /** - * Validate the properties that have been set from this HTTP request, and - * return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - /** - * @return Contexts for this virtual path. - */ - public Map getContexts() { - return contexts; - } - - /** - * @param contexts Contexts to set for this virtual path. - */ - public void setContexts(final Map contexts) { - this.contexts = contexts; - } - - /** - * @return List of possible policies. - */ - public String[] getPolicies() { - return policies; - } - - /** - * @param policies List of possible policies to set. - */ - public void setPolicies(final String[] policies) { - this.policies = policies; - } - - /** - * @return Number of active sessions for each version on this virtual path. - */ - public Map getNbSessions() { - return nbSessions; - } - - /** - * @param nbSessions Number of active sessions for each version on this - * virtual path. - */ - public void setNbSessions(final Map nbSessions) { - this.nbSessions = nbSessions; - } - - /** - * @return Object names for each version on this virtual path. - */ - public Map getObjectNames() { - return objectNames; - } - - /** - * @param objectNames Object names for each version on this virtual path. - */ - public void setObjectNames(final Map objectNames) { - this.objectNames = objectNames; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceAction.java deleted file mode 100644 index 6d1e9d9e02..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceAction.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ - -public class ApplyDatasourceAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - DatasourceForm oForm = (DatasourceForm) p_Form; - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - populate(oForm, domainName, serverName); - if (oForm.getAction().equals("save") == true) { - save(oForm, domainName, serverName); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("ActionEditDatasource").getPath() + "?name=" - + oForm.getDatasourceName()); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(DatasourceForm p_Form, String domainName, String serverName) - throws Exception { - // Object name used - ObjectName oObjectName = J2eeObjectName.getJDBCDataSource(domainName, serverName, p_Form.getDatasourceName()); - // Populate - setIntegerAttribute(oObjectName, "jdbcConnMaxAge", p_Form.getJdbcConnMaxAge()); - setIntegerAttribute(oObjectName, "jdbcMaxOpenTime", p_Form.getJdbcMaxOpenTime()); - setIntegerAttribute(oObjectName, "jdbcMaxConnPool", p_Form.getJdbcMaxConnPool()); - setIntegerAttribute(oObjectName, "jdbcMinConnPool", p_Form.getJdbcMinConnPool()); - setIntegerAttribute(oObjectName, "jdbcMaxWaitTime", p_Form.getJdbcMaxWaitTime()); - setIntegerAttribute(oObjectName, "jdbcMaxWaiters", p_Form.getJdbcMaxWaiters()); - setIntegerAttribute(oObjectName, "jdbcSamplingPeriod", p_Form.getJdbcSamplingPeriod()); - setIntegerAttribute(oObjectName, "jdbcAdjustPeriod", p_Form.getJdbcAdjustPeriod()); - setIntegerAttribute(oObjectName, "jdbcPstmtMax", p_Form.getJdbcPstmtMax()); - setIntegerAttribute(oObjectName, "jdbcConnCheckLevel", p_Form.getJdbcConnCheckLevel()); - String testStmt = p_Form.getJdbcTestStatement(); - String[] values = { testStmt }; - String[] signatures = { "java.lang.String" }; - String op = "setJdbcTestStatement"; - String result = (String) JonasManagementRepr.invoke(oObjectName, op, values, signatures, serverName); - if (!result.equals(testStmt)) { - throw new Exception(result); - } - } - - protected void save(DatasourceForm p_Form, String domainName, String serverName) - throws Exception { - // Save - JonasManagementRepr.invoke(J2eeObjectName.getJDBCDataSource(domainName, serverName, p_Form.getDatasourceName()) - , "saveConfig", null, null, serverName); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceStatAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceStatAction.java deleted file mode 100644 index 33fb751421..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ApplyDatasourceStatAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class ApplyDatasourceStatAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - DatasourceForm oForm = (DatasourceForm) p_Form; - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - populate(oForm, domainName, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("ActionEditDatasourceStat").getPath() + "?name=" - + oForm.getDatasourceName()); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(DatasourceForm p_Form, String domainName, String serverName) - throws Exception { - // Object name used - ObjectName oObjectName = J2eeObjectName.getJDBCDataSource(domainName, serverName, p_Form.getDatasourceName()); - // Populate - p_Form.setCurrentOpened(toStringIntegerAttribute(oObjectName, "currentOpened")); - p_Form.setCurrentBusy(toStringIntegerAttribute(oObjectName, "currentBusy")); - p_Form.setCurrentInTx(toStringIntegerAttribute(oObjectName, "currentInTx")); - p_Form.setOpenedCount(toStringIntegerAttribute(oObjectName, "openedCount")); - p_Form.setConnectionFailures(toStringIntegerAttribute(oObjectName, "connectionFailures")); - p_Form.setConnectionLeaks(toStringIntegerAttribute(oObjectName, "connectionLeaks")); - p_Form.setCurrentWaiters(toStringIntegerAttribute(oObjectName, "currentWaiters")); - p_Form.setWaitersHigh(toStringIntegerAttribute(oObjectName, "waitersHigh")); - p_Form.setWaitersHighRecent(toStringIntegerAttribute(oObjectName, "waitersHighRecent")); - p_Form.setWaiterCount(toStringIntegerAttribute(oObjectName, "waiterCount")); - p_Form.setWaitingTime(toStringLongAttribute(oObjectName, "waitingTime")); - p_Form.setWaitingHigh(toStringLongAttribute(oObjectName, "waitingHigh")); - p_Form.setWaitingHighRecent(toStringLongAttribute(oObjectName, "waitingHighRecent")); - p_Form.setServedOpen(toStringIntegerAttribute(oObjectName, "servedOpen")); - p_Form.setRejectedOpen(toStringIntegerAttribute(oObjectName, "rejectedOpen")); - p_Form.setRejectedFull(toStringIntegerAttribute(oObjectName, "rejectedFull")); - p_Form.setRejectedTimeout(toStringIntegerAttribute(oObjectName, "rejectedTimeout")); - p_Form.setRejectedOther(toStringIntegerAttribute(oObjectName, "rejectedOther")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceForm.java deleted file mode 100644 index d2cd1fc674..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceForm.java +++ /dev/null @@ -1,485 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class DatasourceForm extends ActionForm { - - // --------------------------------------------------------- Constants - - // --------------------------------------------------------- Properties variables - - private String action = null; - private String className = null; - private String datasourceDescription = null; - private String datasourceFactory = null; - private String datasourceName = null; - private String dsName = null; - private String jdbcTestStatement = null; - private String password = null; - private String url = null; - private String userName = null; - private String datasourceMapper = null; - private java.util.List checkingLevels = Jlists.getJdbcConnectionCheckingLevels(); - private String currentOpened = null; - private String currentBusy = null; - private String busyMaxRecent = null; - private String busyMinRecent = null; - private String currentInTx = null; - private String openedCount = null; - private String connectionFailures = null; - private String connectionLeaks = null; - private String currentWaiters = null; - private String waitersHigh = null; - private String waitersHighRecent = null; - private String waiterCount = null; - private String waitingTime = null; - private String waitingHigh = null; - private String waitingHighRecent = null; - private String servedOpen = null; - private String rejectedOpen = null; - private String rejectedFull = null; - private String rejectedTimeout = null; - private String rejectedOther = null; - private String jdbcConnCheckLevel = null; - private String jdbcConnMaxAge = null; - private String jdbcMaxOpenTime = null; - private String jdbcMaxConnPool = null; - private String jdbcMinConnPool = null; - private String jdbcMaxWaitTime = null; - private String jdbcMaxWaiters = null; - private String jdbcSamplingPeriod = null; - private String jdbcAdjustPeriod = null; - private String jdbcPstmtMax = null; - - private ArrayList listUsedByEjb = new ArrayList(); - - // --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = "apply"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - - validateInteger(oErrors, jdbcConnMaxAge, "jdbcConnMaxAge" - , "error.database.datasource.jdbcConnMaxAge.numberformat"); - validateInteger(oErrors, jdbcMaxOpenTime, "jdbcMaxOpenTime" - , "error.database.datasource.jdbcMaxOpenTime.numberformat"); - validateInteger(oErrors, jdbcMaxConnPool, "jdbcMaxConnPool" - , "error.database.datasource.jdbcMaxConnPool.numberformat"); - validateInteger(oErrors, jdbcMinConnPool, "jdbcMinConnPool" - , "error.database.datasource.jdbcMinConnPool.numberformat"); - validateInteger(oErrors, jdbcMaxWaitTime, "jdbcMaxWaitTime" - , "error.database.datasource.jdbcMaxWaitTime.numberformat"); - validateInteger(oErrors, jdbcMaxWaiters, "jdbcMaxWaiters" - , "error.database.datasource.jdbcMaxWaiters.numberformat"); - validateInteger(oErrors, jdbcPstmtMax, "jdbcPstmtMax" - , "error.database.datasource.jdbcPstmtMax.numberformat"); - validateInteger(oErrors, jdbcSamplingPeriod, "jdbcSamplingPeriod" - , "error.database.datasource.jdbcSamplingPeriod.numberformat"); - validateInteger(oErrors, jdbcAdjustPeriod, "jdbcAdjustPeriod" - , "error.database.datasource.jdbcAdjustPeriod.numberformat"); - - return oErrors; - } - - protected void validateInteger(ActionErrors p_Errors, String p_Value, String p_Tag - , String p_ResError) { - try { - Integer.parseInt(p_Value); - } catch (NumberFormatException e) { - p_Errors.add(p_Tag, new ActionMessage(p_ResError)); - } - } - - // --------------------------------------------------------- Properties Methods - - public String getClassName() { - return className; - } - - public void setClassName(String className) { - this.className = className; - } - - public String getCurrentOpened() { - return currentOpened; - } - - public void setCurrentOpened(String s) { - currentOpened = s; - } - - public String getCurrentBusy() { - return currentBusy; - } - - public void setCurrentBusy(String s) { - currentBusy = s; - } - - public String getCurrentInTx() { - return currentInTx; - } - - public void setCurrentInTx(String s) { - currentInTx = s; - } - - public String getOpenedCount() { - return openedCount; - } - - public void setOpenedCount(String s) { - openedCount = s; - } - - public String getConnectionFailures() { - return connectionFailures; - } - - public void setConnectionFailures(String s) { - connectionFailures = s; - } - - public String getConnectionLeaks() { - return connectionLeaks; - } - - public void setConnectionLeaks(String s) { - connectionLeaks = s; - } - - public String getCurrentWaiters() { - return currentWaiters; - } - - public void setCurrentWaiters(String s) { - currentWaiters = s; - } - - public String getWaitersHigh() { - return waitersHigh; - } - - public void setWaitersHigh(String s) { - waitersHigh = s; - } - - public String getWaitersHighRecent() { - return waitersHighRecent; - } - - public void setWaitersHighRecent(String s) { - waitersHighRecent = s; - } - - public String getBusyMaxRecent() { - return busyMaxRecent; - } - - public void setBusyMaxRecent(String s) { - busyMaxRecent = s; - } - - public String getBusyMinRecent() { - return busyMinRecent; - } - - public void setBusyMinRecent(String s) { - busyMinRecent = s; - } - - public String getWaiterCount() { - return waiterCount; - } - - public void setWaiterCount(String s) { - waiterCount = s; - } - - public String getWaitingTime() { - return waitingTime; - } - - public void setWaitingTime(String s) { - waitingTime = s; - } - - public String getWaitingHigh() { - return waitingHigh; - } - - public void setWaitingHigh(String s) { - waitingHigh = s; - } - - public String getWaitingHighRecent() { - return waitingHighRecent; - } - - public void setWaitingHighRecent(String s) { - waitingHighRecent = s; - } - - public String getServedOpen() { - return servedOpen; - } - - public void setServedOpen(String s) { - servedOpen = s; - } - - public String getRejectedOpen() { - return rejectedOpen; - } - - public void setRejectedOpen(String s) { - rejectedOpen = s; - } - - public String getRejectedFull() { - return rejectedFull; - } - - public void setRejectedFull(String s) { - rejectedFull = s; - } - - public String getRejectedTimeout() { - return rejectedTimeout; - } - - public void setRejectedTimeout(String s) { - rejectedTimeout = s; - } - - public String getRejectedOther() { - return rejectedOther; - } - - public void setRejectedOther(String s) { - rejectedOther = s; - } - - public String getDatasourceDescription() { - return datasourceDescription; - } - - public void setDatasourceDescription(String datasourceDescription) { - this.datasourceDescription = datasourceDescription; - } - - public String getDatasourceName() { - return datasourceName; - } - - public void setDatasourceName(String datasourceName) { - this.datasourceName = datasourceName; - } - - public String getDatasourceMapper() { - return datasourceMapper; - } - - public void setDatasourceMapper(String datasourceMapper) { - this.datasourceMapper = datasourceMapper; - } - - public String getDsName() { - return dsName; - } - - public void setDsName(String dsName) { - this.dsName = dsName; - } - - public String getJdbcConnCheckLevel() { - return jdbcConnCheckLevel; - } - - public void setJdbcConnCheckLevel(String jdbcConnCheckLevel) { - this.jdbcConnCheckLevel = jdbcConnCheckLevel; - } - - public String getJdbcConnMaxAge() { - return jdbcConnMaxAge; - } - - public void setJdbcConnMaxAge(String s) { - jdbcConnMaxAge = s; - } - - public String getJdbcMaxOpenTime() { - return jdbcMaxOpenTime; - } - - public void setJdbcMaxOpenTime(String s) { - jdbcMaxOpenTime = s; - } - - public String getJdbcMaxConnPool() { - return jdbcMaxConnPool; - } - - public void setJdbcMaxConnPool(String jdbcMaxConnPool) { - this.jdbcMaxConnPool = jdbcMaxConnPool; - } - - public String getJdbcMinConnPool() { - return jdbcMinConnPool; - } - - public void setJdbcMinConnPool(String jdbcMinConnPool) { - this.jdbcMinConnPool = jdbcMinConnPool; - } - - public String getJdbcMaxWaitTime() { - return jdbcMaxWaitTime; - } - - public void setJdbcMaxWaitTime(String jdbcMaxWaitTime) { - this.jdbcMaxWaitTime = jdbcMaxWaitTime; - } - - public String getJdbcMaxWaiters() { - return jdbcMaxWaiters; - } - - public void setJdbcMaxWaiters(String s) { - this.jdbcMaxWaiters = s; - } - - public String getJdbcSamplingPeriod() { - return jdbcSamplingPeriod; - } - - public void setJdbcSamplingPeriod(String s) { - this.jdbcSamplingPeriod = s; - } - - public String getJdbcAdjustPeriod() { - return jdbcAdjustPeriod; - } - - public void setJdbcAdjustPeriod(String s) { - this.jdbcAdjustPeriod = s; - } - - public String getJdbcTestStatement() { - return jdbcTestStatement; - } - - public void setJdbcTestStatement(String jdbcTestStatement) { - this.jdbcTestStatement = jdbcTestStatement; - } - - public String getJdbcPstmtMax() { - return jdbcPstmtMax; - } - - public void setJdbcPstmtMax(String jdbcPstmtMax) { - this.jdbcPstmtMax = jdbcPstmtMax; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public java.util.List getCheckingLevels() { - return checkingLevels; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItem.java deleted file mode 100644 index d68809765b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItem.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Michel-Ange ANTON - */ -public class DatasourceItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String name = null; - private boolean deployed = false; - private String jndiName = null; - private int jdbcConnectionOpened = 0; - -// --------------------------------------------------------- Constructors - - public DatasourceItem() { - } - - public DatasourceItem(String p_Name, boolean p_Deployed) { - setName(p_Name); - setDeployed(p_Deployed); - } - - public DatasourceItem(String p_Name, String p_JndiName, int p_JdbcConnectionOpened - , boolean p_Deployed) { - setName(p_Name); - setJndiName(p_JndiName); - setJdbcConnectionOpened(p_JdbcConnectionOpened); - setDeployed(p_Deployed); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public boolean isDeployed() { - return deployed; - } - - public void setDeployed(boolean deployed) { - this.deployed = deployed; - } - - public String getJndiName() { - return jndiName; - } - - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - public int getJdbcConnectionOpened() { - return jdbcConnectionOpened; - } - - public void setJdbcConnectionOpened(int jdbcConnectionOpened) { - this.jdbcConnectionOpened = jdbcConnectionOpened; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItemByNameComparator.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItemByNameComparator.java deleted file mode 100644 index cb5b045ec7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/DatasourceItemByNameComparator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class DatasourceItemByNameComparator implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object p_O1, Object p_O2) { - DatasourceItem o_1 = (DatasourceItem) p_O1; - DatasourceItem o_2 = (DatasourceItem) p_O2; - return o_1.getName().compareToIgnoreCase(o_2.getName()); - } - - public boolean equals(Object p_Obj) { - if (p_Obj instanceof DatasourceItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceAction.java deleted file mode 100644 index ffd18bb0be..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceAction.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditDatasourceAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Datasource to edit - String sName = p_Request.getParameter("name"); - - // Form used - DatasourceForm oForm = null; - if (sName != null) { - // Editing a new - oForm = new DatasourceForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("datasourceForm", oForm); - oForm.setDatasourceName(sName); - } else { - // Editing that which is in session - oForm = (DatasourceForm) m_Session.getAttribute("datasourceForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "database" + WhereAreYou.NODE_SEPARATOR - + oForm.getDatasourceName(), true); - - // Populate - try { - if (sName != null) { - populate(oForm, m_WhereAreYou.getCurrentDomainName(), m_WhereAreYou.getCurrentJonasServerName()); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Datasource")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(DatasourceForm p_Form, String domainName, String serverName) - throws Exception { - - // ObjectName used for JDBCDataSource - ObjectName oObjectName = J2eeObjectName.getJDBCDataSource(domainName, serverName, p_Form.getDatasourceName()); - // JDBCDriver ObjectName - String jdbcDriverON = getStringAttribute(oObjectName, "jdbcDriver"); - ObjectName onJdbcDriver = ObjectName.getInstance(jdbcDriverON); - // Driver class name moved to JDBCDriver - p_Form.setClassName(getStringAttribute(onJdbcDriver, "driverClassName")); - p_Form.setDatasourceDescription(getStringAttribute(oObjectName, "description")); - p_Form.setDatasourceName(getStringAttribute(oObjectName, "name")); - p_Form.setDatasourceMapper(getStringAttribute(oObjectName, "mapperName")); - p_Form.setDsName(getStringAttribute(oObjectName, "jndiName")); - p_Form.setJdbcConnCheckLevel(toStringIntegerAttribute(oObjectName, "jdbcConnCheckLevel")); - p_Form.setJdbcConnMaxAge(toStringIntegerAttribute(oObjectName, "jdbcConnMaxAge")); - p_Form.setJdbcMaxOpenTime(toStringIntegerAttribute(oObjectName, "jdbcMaxOpenTime")); - p_Form.setJdbcTestStatement(getStringAttribute(oObjectName, "jdbcTestStatement")); - p_Form.setPassword(getStringAttribute(oObjectName, "userPassword")); - p_Form.setUrl(getStringAttribute(oObjectName, "url")); - p_Form.setUserName(getStringAttribute(oObjectName, "userName")); - p_Form.setJdbcMaxConnPool(toStringIntegerAttribute(oObjectName, "jdbcMaxConnPool")); - p_Form.setJdbcMinConnPool(toStringIntegerAttribute(oObjectName, "jdbcMinConnPool")); - p_Form.setJdbcMaxWaitTime(toStringIntegerAttribute(oObjectName, "jdbcMaxWaitTime")); - p_Form.setJdbcMaxWaiters(toStringIntegerAttribute(oObjectName, "jdbcMaxWaiters")); - p_Form.setJdbcSamplingPeriod(toStringIntegerAttribute(oObjectName, "jdbcSamplingPeriod")); - p_Form.setJdbcAdjustPeriod(toStringIntegerAttribute(oObjectName, "jdbcAdjustPeriod")); - p_Form.setJdbcPstmtMax(toStringIntegerAttribute(oObjectName, "jdbcPstmtMax")); - - // Build list of Ejb which used this datasource - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = p_Form.getDsName(); - if (JonasManagementRepr.isRegistered(JonasObjectName.ejbService(domainName), serverName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke(JonasObjectName. - ejbService(domainName), "getDataSourceDependence", asParam, asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Set list in form - p_Form.setListUsedByEjb(al); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceStatAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceStatAction.java deleted file mode 100644 index eb944bfb01..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/EditDatasourceStatAction.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class EditDatasourceStatAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Datasource to edit - String sName = null; - - // Form used is already in session as we already executed one EditDatasource action - DatasourceForm oForm = (DatasourceForm) m_Session.getAttribute("datasourceForm"); - - if (oForm != null) { - sName = oForm.getDatasourceName(); - } else { - return (p_Mapping.findForward("Global Error")); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "database" + WhereAreYou.NODE_SEPARATOR - + sName, true); - - // Populate - try { - if (sName != null) { - populate(oForm, m_WhereAreYou.getCurrentDomainName(), m_WhereAreYou.getCurrentJonasServerName()); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("DatasourceStat")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(DatasourceForm p_Form, String domainName, String serverName) - throws Exception { - - // ObjectName used for JDBCDataSource - ObjectName oObjectName = J2eeObjectName.getJDBCDataSource(domainName, serverName, p_Form.getDatasourceName()); - - p_Form.setCurrentOpened(toStringIntegerAttribute(oObjectName, "currentOpened")); - p_Form.setCurrentBusy(toStringIntegerAttribute(oObjectName, "currentBusy")); - p_Form.setBusyMaxRecent(toStringIntegerAttribute(oObjectName, "busyMax")); - p_Form.setBusyMinRecent(toStringIntegerAttribute(oObjectName, "busyMin")); - p_Form.setCurrentInTx(toStringIntegerAttribute(oObjectName, "currentInTx")); - p_Form.setOpenedCount(toStringIntegerAttribute(oObjectName, "openedCount")); - p_Form.setConnectionFailures(toStringIntegerAttribute(oObjectName, "connectionFailures")); - p_Form.setConnectionLeaks(toStringIntegerAttribute(oObjectName, "connectionLeaks")); - p_Form.setCurrentWaiters(toStringIntegerAttribute(oObjectName, "currentWaiters")); - p_Form.setWaitersHigh(toStringIntegerAttribute(oObjectName, "waitersHigh")); - p_Form.setWaitersHighRecent(toStringIntegerAttribute(oObjectName, "waitersHighRecent")); - p_Form.setWaiterCount(toStringIntegerAttribute(oObjectName, "waiterCount")); - p_Form.setWaitingTime(toStringLongAttribute(oObjectName, "waitingTime")); - p_Form.setWaitingHigh(toStringLongAttribute(oObjectName, "waitingHigh")); - p_Form.setWaitingHighRecent(toStringLongAttribute(oObjectName, "waitingHighRecent")); - p_Form.setServedOpen(toStringIntegerAttribute(oObjectName, "servedOpen")); - p_Form.setRejectedOpen(toStringIntegerAttribute(oObjectName, "rejectedOpen")); - p_Form.setRejectedFull(toStringIntegerAttribute(oObjectName, "rejectedFull")); - p_Form.setRejectedTimeout(toStringIntegerAttribute(oObjectName, "rejectedTimeout")); - p_Form.setRejectedOther(toStringIntegerAttribute(oObjectName, "rejectedOther")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ListDatabasesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ListDatabasesAction.java deleted file mode 100644 index 7bde8941f1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/db/ListDatabasesAction.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.db; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - update to use JSR 77 JDBCResource - */ - -public class ListDatabasesAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - /** - * Action executed to perform HTTP request - * - * @param pMapping The ActionMapping used to select this instance - * @param pForm The optional ActionForm bean for this request (if any) - * @param pRequest The HTTP request we are processing - * @param pResponse The HTTP response we are creating - * - * @return The forward where redirect - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "database", true); - - // no Form used - try { - // Use JDBCResource MBean - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName on = J2eeObjectName.JDBCResource(domainName, serverName); - String[] jdbcDataSources = (String[]) JonasManagementRepr.getAttribute(on, "jdbcDataSources", serverName); - ArrayList al = new ArrayList(); - if (jdbcDataSources.length != 0) { - String jdbcDataSourceON = null; - ObjectName jdbcDataSourceObjectName = null; - String sName = null; - String sJndiName = null; - int iJdbcConOpen; - for (int i = 0; i < jdbcDataSources.length; i++) { - jdbcDataSourceON = jdbcDataSources[i]; - jdbcDataSourceObjectName = ObjectName.getInstance(jdbcDataSourceON); - sName = (String) getStringAttribute(jdbcDataSourceObjectName, "name"); - sJndiName = (String) getStringAttribute(jdbcDataSourceObjectName, "jndiName"); - iJdbcConOpen = getIntegerAttribute(jdbcDataSourceObjectName, "currentOpened"); - al.add(new DatasourceItem(sName, sJndiName, iJdbcConOpen, true)); - } - - Collections.sort(al, new DatasourceItemByNameComparator()); - } - // Set list in the request - pRequest.setAttribute("listDatabases", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - // Forward to the jsp. - return (pMapping.findForward("Databases")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/ApplyDepmonitorConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/ApplyDepmonitorConfigurationAction.java deleted file mode 100644 index 90ce5276d9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/ApplyDepmonitorConfigurationAction.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.service.depmonitor; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -public class ApplyDepmonitorConfigurationAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - // Form used - DepMonitorServiceForm oForm = (DepMonitorServiceForm) form; - try { - // Object name used - String domainName = m_WhereAreYou.getCurrentDomainName(); - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName on = JonasObjectName.deployableMonitorService(domainName); - boolean dvpMode = false; - if (oForm.isDevelopmentMode()) { - dvpMode = true; - } - - Boolean value = new Boolean(dvpMode); - JonasManagementRepr.setAttribute(on, "development", value, jonasServerName); - - // Configure period - int monitorInterval = oForm.getMonitorInterval(); - setIntegerAttribute(on, "monitorPeriod", monitorInterval); - - if (oForm.getAction().equals("save")) { - JonasManagementRepr.invoke(on, "saveConfig", null, null, jonasServerName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - - // Forward to action - return (mapping.findForward("Depmonitor Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/DepMonitorServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/DepMonitorServiceForm.java deleted file mode 100644 index 0c17d85761..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/DepMonitorServiceForm.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.service.depmonitor; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.struts.action.ActionForm; - -public class DepMonitorServiceForm extends ActionForm { - - private boolean developmentMode; - private String directories = null; - private String action = null; - private int monitorInterval = 0; - - public int getMonitorInterval() { - return monitorInterval; - } - - public void setMonitorInterval(int monitorInterval) { - this.monitorInterval = monitorInterval; - } - - /** - * Represent boolean (true, false) values for enableLookups etc. - */ - private List booleanVals = new ArrayList(); - - public DepMonitorServiceForm() { - } - - public boolean isDevelopmentMode() { - return developmentMode; - } - - public void setDevelopmentMode(final boolean developmentMode) { - this.developmentMode = developmentMode; - } - - public List getBooleanVals() { - return booleanVals; - } - - public void setBooleanVals(final List booleanVals) { - this.booleanVals = booleanVals; - } - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public String getDirectories() { - return directories; - } - - public void setDirectories(final String directories) { - this.directories = directories; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/EditServiceDepmonitorAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/EditServiceDepmonitorAction.java deleted file mode 100644 index e114d35c33..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/depmonitor/EditServiceDepmonitorAction.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.service.depmonitor; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -public class EditServiceDepmonitorAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "depmonitor", true); - // Form used - DepMonitorServiceForm oForm = new DepMonitorServiceForm(); - m_Session.setAttribute("depmonitorServiceForm", oForm); - oForm.setBooleanVals(Jlists.getBooleanValues()); - try { - // Object name used - String domainName = m_WhereAreYou.getCurrentDomainName(); - ObjectName on = JonasObjectName.deployableMonitorService(domainName); - oForm.setDevelopmentMode(getBooleanAttribute(on, "development")); - String[] dirs = getStringArrayAttribute(on, "directoryNames"); - StringBuffer buf = new StringBuffer(); - boolean inIteration = false; - for (String dir : dirs) { - if (inIteration) { - buf.append(", "); - } - buf.append(dir); - inIteration = true; - } - oForm.setDirectories(buf.toString()); - int monitorInterval = getIntAttribute(on, "monitorPeriod"); - oForm.setMonitorInterval(monitorInterval); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (mapping.findForward("Depmonitor Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceForm.java deleted file mode 100644 index f8b2f7791d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceForm.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.discovery; - -import org.apache.struts.action.ActionForm; - -/** - * Form used to present the discovery service properties - * @author Adriana Danes - */ -public final class DiscoveryServiceForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - private String multicastAddress = null; - private String multicastPort = null; - private boolean isMaster = false; - private String multicastTtl = null; -// ------------------------------------------------------------- Properties Methods - - public String getMulticastTtl() { - return multicastTtl; - } - public void setMulticastTtl(String multicastTtl) { - this.multicastTtl = multicastTtl; - } -/** - * @return Returns the multicastAddress. - */ -public String getMulticastAddress() { - return multicastAddress; -} -/** - * @param multicastAddress The multicastAddress to set. - */ -public void setMulticastAddress(String multicastAddress) { - this.multicastAddress = multicastAddress; -} - /** - * @return Returns the multicastPort. - */ - public String getMulticastPort() { - return multicastPort; - } - /** - * @param multicastPort The multicastPort to set. - */ - public void setMulticastPort(String multicastPort) { - this.multicastPort = multicastPort; - } - /** - * @return Returns the isMaster. - */ - public boolean getMaster() { - return isMaster; - } - /** - * @param isMaster The isMaster to set. - */ - public void setMaster(boolean isMaster) { - this.isMaster = isMaster; - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceStartMasterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceStartMasterAction.java deleted file mode 100644 index 1bff550cf8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/DiscoveryServiceStartMasterAction.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.discovery; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange Anton - */ - -public class DiscoveryServiceStartMasterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - * Process the specified HTTP request, and create the corresponding HTTP - * response (or forward to another web component that will create it). - * Return an ActionForward instance describing where and how - * control should be forwarded, or null if the response has - * already been completed. - * - * @param p_Mapping The ActionMapping used to select this instance - * @param p_Form The optional ActionForm bean for this request (if any) - * @param p_Request The HTTP request we are processing - * @param p_Response The HTTP response we are creating - * - * @return An ActionForward instance or null - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet exception occurs - */ - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // Object name used - ObjectName oObjectName = JonasObjectName.discoveryService(domainName); - try { - // call method - JonasManagementRepr.invoke(oObjectName, "startDiscoveryMaster", null, null, serverName); - // Refresh (add) the domain deployment nodes of the trees - refreshDomainDeployTree(p_Request); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the originating action to refresh form. - return (p_Mapping.findForward("ActionEditServiceDiscovery")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/EditServiceDiscoveryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/EditServiceDiscoveryAction.java deleted file mode 100644 index aaa9ea267e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/discovery/EditServiceDiscoveryAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.discovery; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ - -public class EditServiceDiscoveryAction extends JonasBaseAction { - - // --------------------------------------------------------- Public Methods - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "discovery", true); - String domainName = m_WhereAreYou.getCurrentDomainName(); - // Form used - DiscoveryServiceForm oForm = (DiscoveryServiceForm) p_Form; - - ObjectName oObjectName = JonasObjectName.discoveryService(domainName); - oForm.setMulticastAddress(getStringAttribute(oObjectName, "MulticastAddress")); - oForm.setMulticastPort(getStringAttribute(oObjectName, "MulticastPort")); - oForm.setMaster(getBooleanAttribute(oObjectName, "IsDiscoveryMaster")); - oForm.setMulticastTtl(getStringAttribute(oObjectName, "DiscoveryTtl")); - // Forward to the jsp. - return (p_Mapping.findForward("Service Discovery")); - - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ApplyEjbSessionConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ApplyEjbSessionConfigurationAction.java deleted file mode 100644 index 2f4549afd2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ApplyEjbSessionConfigurationAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * @author Vivek Lakshmanan - * Handles update of session time out information for session beans. - */ -public class ApplyEjbSessionConfigurationAction extends JonasBaseAction { -/** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - // Form used - EjbSessionForm oForm = (EjbSessionForm) pForm; - // Object name used - String currentObjectName = oForm.getObjectName(); - try { - ObjectName oObjectName = null; - if (currentObjectName != null) { - oObjectName = ObjectName.getInstance(currentObjectName); - String timeOut = oForm.getSessionTimeOut(); - if (timeOut != null) { - setIntegerAttribute(oObjectName, "sessionTimeOut", timeOut); - } - } - if (oForm.getType().equals("StatelessSessionBean")) { - // Forward to stateless action - pRequest.setAttribute("select", currentObjectName); - return (pMapping.findForward("ActionEditEjbSbl")); - } else { - // Forward to stateful action - pRequest.setAttribute("select", currentObjectName); - return (pMapping.findForward("ActionEditEjbSbf")); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbAction.java deleted file mode 100644 index ddcc69face..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbAction.java +++ /dev/null @@ -1,385 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.BaseManagement; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.management.extensions.base.api.ManagementException; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.joramplatform.EditJoramBaseAction; -import org.ow2.jonas.webapp.jonasadmin.service.container.ContainerForm; - -/** - * @author Michel-Ange ANTON - */ - -public abstract class EditEjbAction extends JonasBaseAction { - - /** - * The EJB's OBJECT_NAME (the stringified ObjetName) - */ - private String ejbObjectName = null; - - // --------------------------------------------------------- Public Methods - /** - * Execute a action. - * @param pMapping ActionForward instance - * @param pForm ActionForm instance - * @param pRequest HttpServletRequest instance - * @param pResponse HttpServletResponse instance - * @return ActionForward instance - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm, final HttpServletRequest pRequest, - final HttpServletResponse pResponse) { - - // Current server - WhereAreYou oWhere = (WhereAreYou) pRequest.getSession().getAttribute(WhereAreYou.SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - // setForm is used specifically when this action is invoked as a result - // of invalid input in editEjbSession*.jsp. - EjbForm setForm = (EjbForm) m_Session.getAttribute("ejbForm"); - // Determine the EJB's ObjectName - String sObjectName = pRequest.getParameter("select"); - if (sObjectName == null) { - // Accept request attribute forced by a EditEjbAction - sObjectName = (String) pRequest.getAttribute("select"); - } - - if (sObjectName == null) { - // Use the objectname specified in the cached input form before - // invalid data was submitted by user. - sObjectName = (setForm != null && setForm.getObjectName() != null) ? setForm.getObjectName() : null; - } - - ObjectName oObjectName = null; - if (sObjectName != null) { - try { - oObjectName = ObjectName.getInstance(sObjectName); - - if (!JonasManagementRepr.isRegistered(oObjectName, serverName)) { - refreshServicesTree(pRequest); - return (pMapping.findForward("ActionListContainers")); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - } - - // Form used - EjbForm oForm = getEjbForm(); - ejbObjectName = sObjectName; - oForm.setObjectName(ejbObjectName); - String msParamType = oObjectName.getKeyProperty("j2eeType"); - String msParamName = oObjectName.getKeyProperty("name"); - String fname = null; - boolean ejb3 = false; - try { - fname = (String) JonasManagementRepr.getAttribute(oObjectName, "fileName", serverName); - } catch (ManagementException e) { - Throwable cause = e.getCause(); - if (cause.getClass().getName().equals("javax.management.AttributeNotFoundException")) { - // maybe ejb3 - TO DO check this - ejb3 = true; - String moduleName = oObjectName.getKeyProperty("EJBModule"); - String applicationName = oObjectName.getKeyProperty("J2EEApplication"); - ObjectName moduleOn = J2eeObjectName.getEJBModule(oObjectName.getDomain(), serverName, applicationName, - moduleName); - // patch EJBModule ObjectName pb. - if (applicationName == null) { - String patchON = oObjectName.getDomain() + ":j2eeType=EJBModule,J2EEServer=" + serverName + ",name=" - + moduleName; - try { - moduleOn = ObjectName.getInstance(patchON); - } catch (Exception e1) { - addGlobalError(e1); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - } - if (JonasManagementRepr.isRegistered(moduleOn, serverName)) { - URL moduleUrl = (URL) JonasManagementRepr.getAttribute(moduleOn, "url", serverName); - fname = moduleUrl.getPath(); - } - } - } - oForm.setEjb3(ejb3); - - // Put global properties - oForm.setType(msParamType); - oForm.setName(msParamName); - oForm.setObjectName(ejbObjectName); - oForm.setFile(fname); - if (msParamType != null) { - String sFullType = m_Resources.getMessage("ejb.fulltype." + msParamType); - oForm.setFullType(sFullType); - } - - // Force the node selected in tree - // m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - // DEPTH_SERVER is not good in case the currently selected node do no - // belongs to the Server JOnAS node - // this situation can be found when the selected node is a JMS - // destination managed by Joram and - // when trying to navigate through the EJBs used by a JMS destination - String serverNodeName = "domain" + WhereAreYou.NODE_SEPARATOR + m_WhereAreYou.getCurrentJonasServerName(); - - String fileName = JonasAdminJmx.extractFilename(oForm.getFile()); - String appliName = oObjectName.getKeyProperty(WhereAreYou.J2EE_APPLICATION_KEY); - if (appliName != null && !"none".equals(appliName) && !"null".equals(appliName)) { - fileName = appliName.concat(WhereAreYou.NODE_NAME_SEPARATOR + fileName); - } - - m_WhereAreYou.selectNameNode(serverNodeName + WhereAreYou.NODE_SEPARATOR + "services" + WhereAreYou.NODE_SEPARATOR - + "ejbContainers" + WhereAreYou.NODE_SEPARATOR + fileName - + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - - try { - oForm.setAttributes(BaseManagement.getInstance().getAttributes(oObjectName, serverName)); - // Fill Ejb infos - fillEjbInfo(ejb3, oForm, oObjectName, serverName); - // Fill Ejb dependencies (Datasource, JMS, ...) - fillEjbDependencies(ejb3, oForm, oObjectName, domainName, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - if (setForm != null && oForm.getObjectName() == null) { - sObjectName = setForm.getObjectName(); - oForm = setForm; - } - pRequest.setAttribute("select", sObjectName); - - m_Session.setAttribute("ejbForm", oForm); - - // Ejb Forward - String sForward = getEjbForward(); - - // Control if the Container in session is the parent of the current Ejb - ContainerForm oContForm = (ContainerForm) m_Session.getAttribute("containerForm"); - boolean bChangeForward = false; - if (oContForm == null || oContForm.getPath() == null) { - bChangeForward = true; - } else { - if (!oContForm.getPath().equals(oForm.getFile())) { - bChangeForward = true; - } - } - // Change enabled - if (bChangeForward) { - // Next forward in EditContainerAction - pRequest.setAttribute("NextForward", sForward); - // p_Request.setAttribute("selectedEjb", sObjectName); - // Change the forward to Edit the container - sForward = "ActionEditContainer"; - } - - // Forward to the jsp or the action - return (pMapping.findForward(sForward)); - } - - // --------------------------------------------------------- Protected - // Methods - - /** - * The global forward to go. - * @return Forward - */ - protected abstract String getEjbForward(); - - /** - * Return a EjbForm instance associate to the EJB. - * @return A form instance - */ - protected abstract EjbForm getEjbForm(); - - /** - * Fill all infos of EJB in the EjbForm instance. - * @param pForm Instance to fill - * @param pObjectName Instance to get infos - * @throws Exception Could not fill info - */ - protected abstract void fillEjbInfo(boolean ejb3, EjbForm pForm, ObjectName pObjectName, String serverName) - throws Exception; - - /** - * Get a ObjectName instance for the Ejb given with the - * parameters of the HTPP request. - * @return The ObjectName instance - * @throws Exception Could not construct ObjectName - */ - protected ObjectName getEjbObjectName() throws Exception { - return ObjectName.getInstance(ejbObjectName); - } - - /** - * Fill all global infos of EJB in the EjbForm instance. - * @param pForm Instance to fill - * @param pObjectName Instance to get infos - */ - protected void fillEjbGlobalInfo(final boolean ejb3, final EjbForm pForm, final ObjectName pObjectName) { - if (ejb3) { - return; - } - pForm.setCacheSize(getIntegerAttribute(pObjectName, "cacheSize")); - pForm.setMaxCacheSize(getIntegerAttribute(pObjectName, "maxCacheSize")); - pForm.setMinPoolSize(getIntegerAttribute(pObjectName, "minPoolSize")); - pForm.setPoolSize(getIntegerAttribute(pObjectName, "poolSize")); - pForm.setDisplayName(getStringAttribute(pObjectName, "displayName")); - pForm.setEjbClass(getStringAttribute(pObjectName, "ejbClass")); - pForm.setEjbFileName(getStringAttribute(pObjectName, "fileName")); - pForm.setEjbName(pObjectName.getKeyProperty("name")); - pForm.setHomeClass(getStringAttribute(pObjectName, "homeClass")); - pForm.setJndiName(getStringAttribute(pObjectName, "jndiName")); - pForm.setLocalClass(getStringAttribute(pObjectName, "localClass")); - pForm.setLocalHomeClass(getStringAttribute(pObjectName, "localHomeClass")); - pForm.setRemoteClass(getStringAttribute(pObjectName, "remoteClass")); - if (pObjectName != null) { - pForm.setObjectName(pObjectName.toString()); - } - - } - - /** - * Fill all dependencies of EJB in the EjbForm instance. - * @param pForm Instance to fill - * @param pObjectName Instance to get infos - */ - protected void fillEjbDependencies(final boolean ejb3, final EjbForm pForm, final ObjectName pObjectName, - final String domainName, final String serverName) { - if (ejb3) { - return; - } - // Dependency with Datasource service - pForm.setDatabaseServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.databaseService(domainName), - serverName)); - pForm.setResourceServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.resourceService(domainName), - serverName)); - HashMap hDataSources = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName, "allDataSourceName", serverName)); - HashMap hJdbcRAs = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName, "allJdbcResourceAdapterName", - serverName)); - if (hDataSources.size() > 0) { - pForm.setDataSource(true); - pForm.setDataSources(hDataSources); - } - if (hJdbcRAs.size() > 0) { - pForm.setDataSource(true); - pForm.setJdbcRas(hJdbcRAs); - } - // Dependency with JMS service or Joram resource - pForm.setJmsServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.jmsService(domainName), serverName)); - ObjectName jormamAdapterObjectName = null; - try { - jormamAdapterObjectName = JoramObjectName.joramAdapter(); - pForm.setJoramResourceLoaded(JonasManagementRepr.isRegistered(jormamAdapterObjectName, serverName)); - } catch (MalformedObjectNameException e) { - pForm.setJoramResourceLoaded(false); - } - ArrayList alJmsConnections = new ArrayList((Collection) JonasManagementRepr.getAttribute(pObjectName, - "allJMSConnectionFactoryName", serverName)); - if (alJmsConnections.size() > 0) { - pForm.setJmsConnection(true); - pForm.setJmsConnections(alJmsConnections); - } - ArrayList alJmsDestinations = new ArrayList((Collection) JonasManagementRepr.getAttribute(pObjectName, - "allJMSDestinationName", serverName)); - if (alJmsDestinations.size() > 0) { - pForm.setJmsDestination(true); - if (pForm.isJoramResourceLoaded()) { - // for each destination, look for the Joram destination MBean - ArrayList jmsDestinationItems = new ArrayList(); - EjbDependency depItem = null; - for (int i = 0; i < alJmsDestinations.size(); i++) { - String name = (String) alJmsDestinations.get(i); - try { - ObjectName topicObjectName = JoramObjectName.joramTopic(name); - if (JonasManagementRepr.isRegistered(topicObjectName, serverName)) { - String agentId = (String) JonasManagementRepr.getAttribute(topicObjectName, "Name", serverName); - String serverId = EditJoramBaseAction.currentServerId(topicObjectName); - depItem = new EjbDependency(name, "topic", serverId); - } else { - ObjectName queueObjectName = JoramObjectName.joramQueue(name); - if (JonasManagementRepr.isRegistered(queueObjectName, serverName)) { - String agentId = (String) JonasManagementRepr.getAttribute(queueObjectName, "Name", serverName); - String serverId = EditJoramBaseAction.currentServerId(queueObjectName); - depItem = new EjbDependency(name, "queue", serverId); - } else { - depItem = new EjbDependency(name, null, "0"); - } - } - } catch (MalformedObjectNameException e) { - depItem = new EjbDependency(name, null, "0"); - } - jmsDestinationItems.add(depItem); - } - pForm.setJmsDestinations(jmsDestinationItems); - } else { - pForm.setJmsDestinations(alJmsDestinations); - } - } - // Dependency with Mail service - pForm.setMailServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.mailService(domainName), serverName)); - HashMap hMailSessions = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName, "allMailFactorySName", - serverName)); - if (hMailSessions.size() > 0) { - pForm.setMailSession(true); - pForm.setMailSessions(hMailSessions); - } - HashMap hMailMimes = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName, "allMailFactoryMName", serverName)); - if (hMailMimes.size() > 0) { - pForm.setMailMime(true); - pForm.setMailMimes(hMailMimes); - } - // Detect one dependency - pForm.setDependency(pForm.isDataSource() || pForm.isJmsConnection() || pForm.isJmsDestination() - || pForm.isMailSession() || pForm.isMailMime()); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbEntityAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbEntityAction.java deleted file mode 100644 index 51d8c7afa9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbEntityAction.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; - - -/** - * @author Michel-Ange ANTON - */ -public class EditEjbEntityAction extends EditEjbAction { - -// --------------------------------------------------------- Public Methods - -// --------------------------------------------------------- Protected Methods - - /** - * Return a EjbEntityForm instance associate to the EJB. - * - * @return A form instance - */ - protected EjbForm getEjbForm() { - return new EjbEntityForm(); - } - - /** - * Fill all infos of EJB Entity in the EjbEntityForm instance. - * - * @param p_Form Instance to fill - * @param p_ObjectName Instance to get infos - * @throws Exception - */ - protected void fillEjbInfo(boolean ejb3, EjbForm p_Form, ObjectName p_ObjectName, String serverName) - throws Exception { - fillEjbGlobalInfo(ejb3, p_Form, p_ObjectName); - - EjbEntityForm oForm = (EjbEntityForm) p_Form; - oForm.setPassivationTimeOut(getIntegerAttribute(p_ObjectName, "passivationTimeOut")); - oForm.setInactivityTimeOut(getIntegerAttribute(p_ObjectName, "inactivityTimeOut")); - oForm.setDeadlockTimeOut(getIntegerAttribute(p_ObjectName, "deadlockTimeOut")); - oForm.setReadTimeOut(getIntegerAttribute(p_ObjectName, "readTimeOut")); - oForm.setPersistency(getStringAttribute(p_ObjectName, "persistency")); - oForm.setShared(getBooleanAttribute(p_ObjectName, "shared")); - oForm.setPrefetch(getBooleanAttribute(p_ObjectName, "prefetch")); - oForm.setHardLimit(getBooleanAttribute(p_ObjectName, "hardLimit")); - oForm.setLockPolicy(getStringAttribute(p_ObjectName, "lockPolicy")); - - Integer[] aiEntityCounters = (Integer[]) JonasManagementRepr.getAttribute(p_ObjectName - , "entityCounters", serverName); - oForm.setUsedInTxInstance(aiEntityCounters[0].intValue()); - oForm.setUsedOutTxInstance(aiEntityCounters[1].intValue()); - oForm.setUnusedInstance(aiEntityCounters[2].intValue()); - oForm.setPassivatedInstance(aiEntityCounters[3].intValue()); - oForm.setRemovedInstance(aiEntityCounters[4].intValue()); - oForm.setPkNumber(aiEntityCounters[5].intValue()); - } - - /** - * The global forward to go. - * - * @return Forward - */ - protected String getEjbForward() { - return "Ejb Entity"; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbMessageAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbMessageAction.java deleted file mode 100644 index 63eb918d48..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbMessageAction.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.management.ObjectName; - -public class EditEjbMessageAction extends EditEjbAction { - -// --------------------------------------------------------- Protected Methods - - /** - * Get a ObjectName instance for the Ejb given - * with the parameters of the HTPP request. - * - * @return The ObjectName instance - * @throws Exception - */ - /** - * Return a EjbMessageForm instance associate to the EJB. - * - * @return A form instance - */ - protected EjbForm getEjbForm() { - return new EjbMessageForm(); - } - - /** - * Fill all infos of EJB in the EjbMessageForm instance. - * - * @param p_Form Instance to fill - * @param p_ObjectName Instance to get infos - * @throws Exception - */ - protected void fillEjbInfo(boolean ejb3, EjbForm p_Form, ObjectName p_ObjectName, String serverName) - throws Exception { - fillEjbGlobalInfo(ejb3, p_Form, p_ObjectName); - - EjbMessageForm oForm = (EjbMessageForm) p_Form; - - oForm.setMdbJMSAssociateDestinationName(p_ObjectName.getKeyProperty("name")); - if (oForm.getMdbJMSAssociateDestinationName() == null) { - oForm.setMdbJMSAssociateDestinationName(getStringAttribute(p_ObjectName, - "mdbJMSAssociateDestinationName")); - } - } - - /** - * The global forward to go. - * - * @return Forward - */ - protected String getEjbForward() { - return "Ejb Message"; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionAction.java deleted file mode 100644 index 4680f4de82..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionAction.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; - - -/** - * @author Michel-Ange ANTON - */ -public class EditEjbSessionAction extends EditEjbAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping pMapping, - final ActionForm pForm, - final HttpServletRequest pRequest, - final HttpServletResponse pResponse) { - ActionMessages messages = new ActionMessages(); - ActionMessage msg = new ActionMessage("default.ejb.type.session.sessionTimeOut"); - messages.add("defaultSessionTimeOut", msg); - saveMessages(pRequest, messages); - return super.executeAction(pMapping, pForm, pRequest, pResponse); - } - -// --------------------------------------------------------- Protected Methods - - /** - * Return a EjbSessionForm instance associate to the EJB. - * - * @return A form instance - */ - @Override - protected EjbForm getEjbForm() { - return new EjbSessionForm(); - } - - - /** - * Fill all infos of EJB Session in the EjbSessionForm instance. - * - * @param p_Form Instance to fill - * @param p_ObjectName Instance to get infos - * @throws Exception - */ - @Override - protected void fillEjbInfo(final boolean ejb3, final EjbForm p_Form, final ObjectName p_ObjectName, final String serverName) - throws Exception { - fillEjbGlobalInfo(ejb3, p_Form, p_ObjectName); - - EjbSessionForm oForm = (EjbSessionForm) p_Form; - String sessionTimeOut = toStringIntegerAttribute(p_ObjectName, "sessionTimeOut"); - oForm.setSessionTimeOut(sessionTimeOut); - oForm.setMonitoringSettingsDefinedInDD(getBooleanAttribute(p_ObjectName, "monitoringSettingsDefinedInDD")); - oForm.setMonitoringEnabled(getBooleanAttribute(p_ObjectName, "monitoringEnabled")); - oForm.setWarningThreshold(getIntegerAttribute(p_ObjectName, "warningThreshold")); - oForm.setNumberOfCalls(getIntegerAttribute(p_ObjectName, "numberOfCalls")); - oForm.setTotalBusinessProcessingTime(getLongAttribute(p_ObjectName, "totalBusinessProcessingTime")); - oForm.setTotalProcessingTime(getLongAttribute(p_ObjectName, "totalProcessingTime")); - oForm.setAverageBusinessProcessingTime(getLongAttribute(p_ObjectName, "averageBusinessProcessingTime")); - oForm.setAverageProcessingTime(getLongAttribute(p_ObjectName, "averageProcessingTime")); - } - - /** - * The global forward to go. - * - * @return Forward - */ - @Override - protected String getEjbForward() { - return "Ejb Session"; - } -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionSblAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionSblAction.java deleted file mode 100644 index 48dc857a9a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EditEjbSessionSblAction.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditEjbSessionSblAction extends EditEjbSessionAction { - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, - ActionForm pForm, - HttpServletRequest pRequest, - HttpServletResponse pResponse) { - ActionMessages messages = new ActionMessages(); - ActionMessage msg = new ActionMessage("default.ejb.type.session.instanceMaxSizePool"); - messages.add("defaultMaxSizePool", msg); - saveMessages(pRequest, messages); - return super.executeAction(pMapping, pForm, pRequest, pResponse); - } - - - // --------------------------------------------------------- Protected Methods - - /** - * Get a ObjectName instance for the Ejb given - * with the parameters of the HTPP request. - * - * @return The ObjectName instance - * @throws Exception - */ - - /** - * Return a EjbSessionSblForm instance associate to the EJB. - * - * @return A form instance - */ - protected EjbForm getEjbForm() { - return new EjbSessionForm(); - } - - - /** - * Fill all infos of EJB Session in the EjbSessionForm instance. - * - * @param p_Form Instance to fill - * @param p_ObjectName Instance to get infos - * @throws Exception - */ - protected void fillEjbInfo(boolean ejb3, EjbForm p_Form, ObjectName p_ObjectName, String serverName) - throws Exception { - super.fillEjbInfo(ejb3, p_Form, p_ObjectName, serverName); - } - - /** - * The global forward to go. - * - * @return Forward - */ - protected String getEjbForward() { - return "Ejb Session Sbl"; - } - -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbDependency.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbDependency.java deleted file mode 100644 index f3d750be46..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbDependency.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.io.Serializable; - - -/** - * @author Adriana Danes - */ - -public class EjbDependency implements Serializable { - /** - * - */ - private static final long serialVersionUID = 1L; - - private String name; - private String type; - private String serverId; - - public EjbDependency(final String name, final String type, final String serverId) { - this.name = name; - this.type = type; - this.serverId = serverId; - } - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - /** - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - /** - * @return Returns the serverId. - */ - public String getServerId() { - return serverId; - } - /** - * @param serverId The serverId to set. - */ - public void setServerId(final String serverId) { - this.serverId = serverId; - } - /** - * @return Returns the type. - */ - public String getType() { - return type; - } - /** - * @param type The type to set. - */ - public void setType(final String type) { - this.type = type; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbEntityForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbEntityForm.java deleted file mode 100644 index 3a8415a3fd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbEntityForm.java +++ /dev/null @@ -1,234 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ -public class EjbEntityForm extends EjbForm { - -// --------------------------------------------------------- Properties variables - - /** - * MBean Ejb Entity properties - */ - private int passivationTimeOut = 0; - private int inactivityTimeOut = 0; - private int deadlockTimeOut = 0; - private int readTimeOut = 0; - private boolean shared = false; - private boolean prefetch = false; - private boolean hardLimit = false; - private String lockPolicy = null; - private String persistency = null; - - private int usedInTxInstance = 0; - private int usedOutTxInstance = 0; - private int unusedInstance = 0; - private int passivatedInstance = 0; - private int removedInstance = 0; - private int currentWaiters = 0; - private int pkNumber = 0; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - passivationTimeOut = 0; - inactivityTimeOut = 0; - deadlockTimeOut = 0; - readTimeOut = 0; - shared = false; - prefetch = false; - hardLimit = false; - lockPolicy = null; - persistency = null; - - usedInTxInstance = 0; - usedOutTxInstance = 0; - unusedInstance = 0; - passivatedInstance = 0; - removedInstance = 0; - currentWaiters = 0; - pkNumber = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return super.validate(mapping, request); - } - -// --------------------------------------------------------- Properties Methods - public String getPersistency() { - return persistency; - } - - public void setPersistency(String persistency) { - this.persistency = persistency; - } - - public int getPassivationTimeOut() { - return passivationTimeOut; - } - - public int getInactivityTimeOut() { - return inactivityTimeOut; - } - - public int getDeadlockTimeOut() { - return deadlockTimeOut; - } - - public int getReadTimeOut() { - return readTimeOut; - } - - public String getLockPolicy() { - return lockPolicy; - } - - public void setLockPolicy(String lockPolicy) { - this.lockPolicy = lockPolicy; - } - - public boolean getShared() { - return shared; - } - - public boolean getPrefetch() { - return prefetch; - } - - public boolean getHardLimit() { - return hardLimit; - } - - public void setPassivationTimeOut(int passivationTimeOut) { - this.passivationTimeOut = passivationTimeOut; - } - - public void setInactivityTimeOut(int inactivityTimeOut) { - this.inactivityTimeOut = inactivityTimeOut; - } - - public void setDeadlockTimeOut(int deadlockTimeOut) { - this.deadlockTimeOut = deadlockTimeOut; - } - - public void setReadTimeOut(int readTimeOut) { - this.readTimeOut = readTimeOut; - } - - public void setShared(boolean shared) { - this.shared = shared; - } - - public void setPrefetch(boolean prefetch) { - this.prefetch = prefetch; - } - - public void setHardLimit(boolean hardLimit) { - this.hardLimit = hardLimit; - } - - public int getPassivatedInstance() { - return passivatedInstance; - } - - public void setPassivatedInstance(int passivatedInstance) { - this.passivatedInstance = passivatedInstance; - } - - public int getRemovedInstance() { - return removedInstance; - } - - public void setRemovedInstance(int removedInstance) { - this.removedInstance = removedInstance; - } - - public int getUnusedInstance() { - return unusedInstance; - } - - public void setUnusedInstance(int unusedInstance) { - this.unusedInstance = unusedInstance; - } - - public int getPkNumber() { - return pkNumber; - } - - public void setPkNumber(int pk) { - this.pkNumber = pk; - } - - public int getUsedInTxInstance() { - return usedInTxInstance; - } - - public void setUsedInTxInstance(int usedInTxInstance) { - this.usedInTxInstance = usedInTxInstance; - } - - public int getUsedOutTxInstance() { - return usedOutTxInstance; - } - - public void setUsedOutTxInstance(int usedOutTxInstance) { - this.usedOutTxInstance = usedOutTxInstance; - } - - public int getCurrentWaiters() { - return currentWaiters; - } - - public void setCurrentWaiters(int nb) { - currentWaiters = nb; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbForm.java deleted file mode 100644 index 1359859ff3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbForm.java +++ /dev/null @@ -1,806 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; - -import javax.management.MBeanAttributeInfo; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; -import org.ow2.jonas.management.extensions.base.api.J2EEMBeanAttributeInfo; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -/** - * @author Michel-Ange ANTON - */ -public class EjbForm extends ActionForm { - - // --------------------------------------------------------- Properties - // variables - - /** - * Parameters properties - */ - private String type = null; - - private String fullType = null; - - private String file = null; - - private String name = null; - - private String objectName = null; - - private String action = null; - - /** - * EJB3 support - */ - private boolean ejb3 = false; - - /** - * Global MBean Ejb properties - */ - private int cacheSize = 0; - - private int maxCacheSize = 0; - - private int minPoolSize = 0; - - private int poolSize = 0; - - private String displayName = null; - - private String ejbClass = null; - - private String ejbFileName = null; - - private String ejbName = null; - - private String homeClass = null; - - private String jndiName = null; - - private String localClass = null; - - private String localHomeClass = null; - - private String remoteClass = null; - - private boolean dependency = false; - - private boolean databaseServiceActivated = false; - - private boolean resourceServiceActivated = false; - - private boolean dataSource = false; - - private HashMap dataSources = new HashMap(); - - private HashMap jdbcRas = new HashMap(); - - private boolean jmsServiceActivated = false; - - private boolean joramResourceLoaded = false; - - private boolean jmsConnection = false; - - private ArrayList jmsConnections = new ArrayList(); - - private boolean jmsDestination = false; - - private ArrayList jmsDestinations = new ArrayList(); - - private Hashtable jmsDestinationsTable = new Hashtable(); - - private boolean mailServiceActivated = false; - - private boolean mailSession = false; - - private HashMap mailSessions = new HashMap(); - - private boolean mailMime = false; - - private HashMap mailMimes = new HashMap(); - - /** - * Is the type already calculated ? - */ - private boolean writable = true; - - /** - * true if any attribute is writable. - * @return - */ - public boolean isWritable() { - for (J2EEMBeanAttributeInfo attribute : attributes) { - if (attribute.isWritable()) { - // the "warningThreshold" attribute is defined for ejb2 only. - writable = true; - return writable; - } - } - writable = false; - return writable; - } - - /** - * @param writable the writable to set - */ - public void setWritable(final boolean writable) { - this.writable = writable; - } - - /** - * @return the attributes - */ - public List getAttributes() { - return attributes; - } - - /** - * @param attributes the attributes to set - */ - public void setAttributes(final J2EEMBeanAttributeInfo[] attributes) { - this.attributes.clear(); - this.namingAttributes.clear(); - this.monitoringAttributes.clear(); - if (objectName != null) { - try { - // allow to display Bean type. - ObjectName on = ObjectName.getInstance(objectName); - String beanType = on.getKeyProperty("j2eeType"); - if (beanType != null) { - J2EEMBeanAttributeInfo atr = new J2EEMBeanAttributeInfo(); - atr.setValue(beanType); - MBeanAttributeInfo infos = new MBeanAttributeInfo("Type", String.class.getName(), - "Bean type", true, false, false); - atr.setMbeanAttributeInfo(infos); - this.generalAttributes.add(atr); - } - } catch (Exception e) { - ;// Do nothing - } - } - for (J2EEMBeanAttributeInfo beanAttributeInfo : attributes) { - if (!containsLabel(beanAttributeInfo.getLabel(), this.attributes)) { - /** - * Filter some attributes - */ - if (!"stateManageable".equals(beanAttributeInfo.getName()) - && !beanAttributeInfo.getName().contains("statistic") - && !"eventProvider".equals(beanAttributeInfo.getName()) - && !"javaVMs".equals(beanAttributeInfo.getName()) - && !"objectName".equals(beanAttributeInfo.getName()) - && !"modelerType".equals(beanAttributeInfo.getName())) { - if (beanAttributeInfo.getName().contains("jndi") || beanAttributeInfo.getName().contains("lass") - || beanAttributeInfo.getName().contains("display") - || "name".equalsIgnoreCase(beanAttributeInfo.getName()) - || beanAttributeInfo.getName().contains("file") - || beanAttributeInfo.getName().contains("modeler")) { - /** - * Naming attribute - */ - this.namingAttributes.add(beanAttributeInfo); - } else { - /** - * Monitoring attribute. - */ - monitoringAttributes.add(beanAttributeInfo); - } - /** - * Add the attribute. - */ - this.attributes.add(beanAttributeInfo); - } - } - } - } - - /** - * @return the namingAttributes. - */ - public List getNamingAttributes() { - return namingAttributes; - } - - /** - * @param namingAttributes the namingAttributes to set. - */ - public void setNamingAttributes(final J2EEMBeanAttributeInfo[] namingAttributes) { - this.namingAttributes.clear(); - for (J2EEMBeanAttributeInfo beanAttributeInfo : namingAttributes) { - this.namingAttributes.add(beanAttributeInfo); - } - } - - /** - * @param monitoringAttributes the namingAttributes to set. - */ - public void setMonitoringAttributes(final J2EEMBeanAttributeInfo[] monitoringAttributes) { - this.monitoringAttributes.clear(); - for (J2EEMBeanAttributeInfo beanAttributeInfo : monitoringAttributes) { - this.monitoringAttributes.add(beanAttributeInfo); - } - } - - /** - * @param namingAttributes the namingAttributes to set. - */ - public void setNamingAttributes(final List namingAttributes) { - this.namingAttributes = namingAttributes; - } - - /** - * @param monitoringAttributes the namingAttributes to set. - */ - public void setMonitoringAttributes(final List monitoringAttributes) { - this.monitoringAttributes = monitoringAttributes; - } - - /** - * @return the monitoringAttributes - */ - public List getMonitoringAttributes() { - return monitoringAttributes; - } - - /** - * Naming attributes. - */ - private List namingAttributes = new ArrayList(); - - /** - * General attributes. - */ - private List generalAttributes = new ArrayList(); - - /** - * The MBean attribute descriptors. - */ - private List monitoringAttributes = new ArrayList(); - - /** - * All attributes. - */ - private List attributes = new ArrayList(); - - // --------------------------------------------------------- Public Methods - - /** - * @return the generalAttributes - */ - public List getGeneralAttributes() { - return generalAttributes; - } - - /** - * @param generalAttributes the generalAttributes to set - */ - public void setGeneralAttributes(final List generalAttributes) { - this.generalAttributes = generalAttributes; - } - - /** - * Reset all properties to their default values. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - // Parameters properties - type = null; - file = null; - name = null; - objectName = null; - fullType = null; - action = null; - - // Global MBean Ejb properties - cacheSize = 0; - maxCacheSize = 0; - minPoolSize = 0; - poolSize = 0; - displayName = null; - ejbClass = null; - ejbFileName = null; - ejbName = null; - homeClass = null; - jndiName = null; - localClass = null; - localHomeClass = null; - remoteClass = null; - - dependency = false; - databaseServiceActivated = false; - resourceServiceActivated = false; - dataSources = new HashMap(); - dataSource = false; - jdbcRas = new HashMap(); - jmsServiceActivated = false; - joramResourceLoaded = false; - jmsConnection = false; - jmsConnections = new ArrayList(); - jmsDestination = false; - jmsDestinations = new ArrayList(); - jmsDestinationsTable = new Hashtable(); - mailServiceActivated = false; - mailSession = false; - mailSessions = new HashMap(); - mailMime = false; - mailMimes = new HashMap(); - } - - /** - * Validate the properties that have been set from this HTTP request, and - * return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no recorded - * error messages. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors or null - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - // --------------------------------------------------------- Properties - // Methods - - // Parameters properties - - public String getFile() { - return file; - } - - public String getFilename() { - String sFilename = null; - if (file != null) { - sFilename = file.replace('\\', '/'); - int iPos = sFilename.lastIndexOf('/'); - if (iPos > -1) { - sFilename = sFilename.substring(iPos + 1); - } - } - return sFilename; - } - - public String getName() { - return name; - } - - public String getObjectName() { - return objectName; - } - - public String getType() { - return type; - } - - public void setFile(final String file) { - this.file = file; - } - - public void setName(final String name) { - this.name = name; - } - - public void setObjectName(final String objectName) { - this.objectName = objectName; - } - - public void setType(final String type) { - this.type = type; - } - - // Global MBean Ejb properties - public String getDisplayName() { - return displayName; - } - - public String getEjbClass() { - return ejbClass; - } - - public String getEjbName() { - return ejbName; - } - - public String getHomeClass() { - return homeClass; - } - - public String getJndiName() { - return jndiName; - } - - public String getLocalClass() { - return localClass; - } - - public String getLocalHomeClass() { - return localHomeClass; - } - - public String getRemoteClass() { - return remoteClass; - } - - public void setDisplayName(final String displayName) { - this.displayName = displayName; - } - - public void setEjbClass(final String ejbClass) { - this.ejbClass = ejbClass; - } - - public void setEjbName(final String ejbName) { - this.ejbName = ejbName; - } - - public void setHomeClass(final String homeClass) { - this.homeClass = homeClass; - } - - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - public void setLocalClass(final String localClass) { - this.localClass = localClass; - } - - public void setLocalHomeClass(final String localHomeClass) { - this.localHomeClass = localHomeClass; - } - - public void setRemoteClass(final String remoteClass) { - this.remoteClass = remoteClass; - } - - public String getEjbFileName() { - return ejbFileName; - } - - public void setEjbFileName(final String ejbFileName) { - this.ejbFileName = ejbFileName; - } - - public String getFullType() { - return fullType; - } - - public void setFullType(final String fullType) { - this.fullType = fullType; - } - - public HashMap getDataSources() { - return dataSources; - } - - public void setDataSources(final HashMap dataSources) { - this.dataSources = dataSources; - } - - public boolean isDataSource() { - return dataSource; - } - - public void setDataSource(final boolean dataSource) { - this.dataSource = dataSource; - } - - public boolean isDependency() { - return dependency; - } - - public void setDependency(final boolean dependency) { - this.dependency = dependency; - } - - public boolean isJmsConnection() { - return jmsConnection; - } - - public void setJmsConnection(final boolean jmsConnection) { - this.jmsConnection = jmsConnection; - } - - public ArrayList getJmsConnections() { - return jmsConnections; - } - - public void setJmsConnections(final ArrayList jmsConnections) { - this.jmsConnections = jmsConnections; - } - - public boolean isJmsDestination() { - return jmsDestination; - } - - public void setJmsDestination(final boolean jmsDestination) { - this.jmsDestination = jmsDestination; - } - - public ArrayList getJmsDestinations() { - return jmsDestinations; - } - - public void setJmsDestinations(final ArrayList jmsDestinations) { - this.jmsDestinations = jmsDestinations; - } - - public HashMap getMailSessions() { - return mailSessions; - } - - public void setMailSessions(final HashMap mailSessions) { - this.mailSessions = mailSessions; - } - - public HashMap getMailMimes() { - return mailMimes; - } - - public void setMailMimes(final HashMap mailMimes) { - this.mailMimes = mailMimes; - } - - public boolean isMailSession() { - return mailSession; - } - - public void setMailSession(final boolean mailSession) { - this.mailSession = mailSession; - } - - public boolean isMailMime() { - return mailMime; - } - - public void setMailMime(final boolean mailMime) { - this.mailMime = mailMime; - } - - public boolean isDatabaseServiceActivated() { - return databaseServiceActivated; - } - - public void setDatabaseServiceActivated(final boolean databaseServiceActivated) { - this.databaseServiceActivated = databaseServiceActivated; - } - - public boolean isJmsServiceActivated() { - return jmsServiceActivated; - } - - public void setJmsServiceActivated(final boolean jmsServiceActivated) { - this.jmsServiceActivated = jmsServiceActivated; - } - - public boolean isMailServiceActivated() { - return mailServiceActivated; - } - - public void setMailServiceActivated(final boolean mailServiceActivated) { - this.mailServiceActivated = mailServiceActivated; - } - - /** - * @return Returns the joramResourceLoaded. - */ - public boolean isJoramResourceLoaded() { - return joramResourceLoaded; - } - - /** - * @param joramResourceLoaded The joramResourceLoaded to set. - */ - public void setJoramResourceLoaded(final boolean joramResourceLoaded) { - this.joramResourceLoaded = joramResourceLoaded; - } - - /** - * @return Returns the action. - */ - public String getAction() { - return action; - } - - /** - * @param action The action to set. - */ - public void setAction(final String action) { - this.action = action; - } - - /** - * Helper method to check that it is a required number and is a valid - * integer within the given range. (min, max). - * @param field The field name in the form for which this error occured. - * @param numText The string representation of the number. - * @param rangeCheck Boolean value set to true of reange check should be - * performed. - * @param min The lower limit of the range - * @param max The upper limit of the range - * error.webapp.setting.sessionTimeout.required - */ - protected void numberCheck(final ActionErrors p_Errors, final String field, final String numText, final boolean rangeCheck, - final int min, final int max) { - // Check for 'is required' - if ((numText == null) || (numText.length() < 1)) { - p_Errors.add(field, new ActionMessage("error.ejb.type.session." + field + ".required")); - } else { - - // check for 'must be a number' in the 'valid range' - try { - int num = Integer.parseInt(numText); - // perform range check only if required - if (rangeCheck) { - if ((num < min) || (num > max)) { - p_Errors.add(field, new ActionMessage("error.ejb.type.session." + field + ".range")); - } - } - } catch (NumberFormatException e) { - p_Errors.add(field, new ActionMessage("error.ejb.type.session." + field + ".format")); - } - } - } - - /** - * @return Returns the jmsDestinationsTable. - */ - public Hashtable getJmsDestinationsTable() { - return jmsDestinationsTable; - } - - /** - * @param jmsDestinationsTable The jmsDestinationsTable to set. - */ - public void setJmsDestinationsTable(final Hashtable jmsDestinationsTable) { - this.jmsDestinationsTable = jmsDestinationsTable; - } - - /** - * @return Returns the cacheSize. - */ - public int getCacheSize() { - return cacheSize; - } - - /** - * @param cacheSize The cacheSize to set. - */ - public void setCacheSize(final int cacheSize) { - this.cacheSize = cacheSize; - } - - /** - * @return Returns the maxCacheSize. - */ - public int getMaxCacheSize() { - return maxCacheSize; - } - - /** - * @param maxCacheSize The maxCacheSize to set. - */ - public void setMaxCacheSize(final int maxCacheSize) { - this.maxCacheSize = maxCacheSize; - } - - /** - * @return Returns the minPoolSize. - */ - public int getMinPoolSize() { - return minPoolSize; - } - - /** - * @param minPoolSize The minPoolSize to set. - */ - public void setMinPoolSize(final int minPoolSize) { - this.minPoolSize = minPoolSize; - } - - /** - * @return Returns the poolSize. - */ - public int getPoolSize() { - return poolSize; - } - - /** - * @param poolSize The poolSize to set. - */ - public void setPoolSize(final int poolSize) { - this.poolSize = poolSize; - } - - public boolean isResourceServiceActivated() { - return resourceServiceActivated; - } - - public void setResourceServiceActivated(final boolean resourceServiceActivated) { - this.resourceServiceActivated = resourceServiceActivated; - } - - public HashMap getJdbcRas() { - return jdbcRas; - } - - public void setJdbcRas(final HashMap jdbcRas) { - this.jdbcRas = jdbcRas; - } - - public boolean isEjb3() { - return ejb3; - } - - public void setEjb3(final boolean ejb3) { - this.ejb3 = ejb3; - } - - /** - * Get boolean values. - * @return boolean values. - */ - public List getBooleanValues() { - return Jlists.getBooleanValues(); - } - - /** - * Checks if the given label is already registered in the given set of - * attributes. - * @param label The label to check - * @param attributes attributes to check in. - * @return true if the given label is already registered in the given set of - * attributes. - */ - private static boolean containsLabel(final String label, final List attributes) { - for (Iterator iterator = attributes.iterator(); iterator.hasNext();) { - J2EEMBeanAttributeInfo beanAttributeInfo = iterator.next(); - if (beanAttributeInfo.getLabel().equals(label)) { - return true; - } - } - return false; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbMessageForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbMessageForm.java deleted file mode 100644 index 0a21807463..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbMessageForm.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; - -public class EjbMessageForm extends EjbForm { - -// --------------------------------------------------------- Properties Variables - - /** - * MBean Ejb Message properties - */ - private String mdbJMSAssociateDestinationName = null; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - super.reset(mapping, request); - mdbJMSAssociateDestinationName = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return super.validate(mapping, request); - } - -// --------------------------------------------------------- Properties Methods - - public String getMdbJMSAssociateDestinationName() { - return mdbJMSAssociateDestinationName; - } - - public void setMdbJMSAssociateDestinationName(String mdbJMSAssociateDestinationName) { - this.mdbJMSAssociateDestinationName = mdbJMSAssociateDestinationName; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbSessionForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbSessionForm.java deleted file mode 100644 index 6b71dc5d78..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/EjbSessionForm.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.Jlists; - -/** - * @author Michel-Ange ANTON - */ -public class EjbSessionForm extends EjbForm { - // --------------------------------------------------------- Default for - // session time out - public static final String SESSION_TIME_OUT_DEFAULT = "0"; - - // --------------------------------------------------------- Properties - // Variables - - /** - * MBean Ejb Session properties - */ - private String sessionTimeOut = SESSION_TIME_OUT_DEFAULT; - - private int warningThreshold = 0; - - private long numberOfCalls = 0; - - private long totalBusinessProcessingTime = 0; - - private long totalProcessingTime = 0; - - private long averageBusinessProcessingTime = 0; - - private long averageProcessingTime = 0; - - private boolean monitoringEnabled = false; - - private boolean monitoringSettingsDefinedInDD = false; - - // --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - super.reset(mapping, request); - sessionTimeOut = SESSION_TIME_OUT_DEFAULT; - this.setAction("apply"); - } - - // --------------------------------------------------------- Properties - // Methods - - public String getSessionTimeOut() { - return sessionTimeOut; - } - - public void setSessionTimeOut(final String sessionTimeOut) { - this.sessionTimeOut = sessionTimeOut; - } - - public boolean getMonitoringSettingsDefinedInDD() { - return monitoringSettingsDefinedInDD; - } - - public void setMonitoringSettingsDefinedInDD(final boolean monitoringSettingsDefinedInDD) { - this.monitoringSettingsDefinedInDD = monitoringSettingsDefinedInDD; - } - - public boolean getMonitoringEnabled() { - return monitoringEnabled; - } - - public void setMonitoringEnabled(final boolean monitoringEnabled) { - this.monitoringEnabled = monitoringEnabled; - } - - public int getWarningThreshold() { - return warningThreshold; - } - - public void setWarningThreshold(final int warningThreshold) { - this.warningThreshold = warningThreshold; - } - - public long getNumberOfCalls() { - return numberOfCalls; - } - - public void setNumberOfCalls(final int numberOfCalls) { - this.numberOfCalls = numberOfCalls; - } - - public long getTotalBusinessProcessingTime() { - return totalBusinessProcessingTime; - } - - public void setTotalBusinessProcessingTime(final long totalBusinessProcessingTime) { - this.totalBusinessProcessingTime = totalBusinessProcessingTime; - } - - public long getTotalProcessingTime() { - return totalProcessingTime; - } - - public void setTotalProcessingTime(final long totalProcessingTime) { - this.totalProcessingTime = totalProcessingTime; - } - - public long getAverageBusinessProcessingTime() { - return averageBusinessProcessingTime; - } - - public void setAverageBusinessProcessingTime(final long averageBusinessProcessingTime) { - this.averageBusinessProcessingTime = averageBusinessProcessingTime; - } - - public long getAverageProcessingTime() { - return averageProcessingTime; - } - - public void setAverageProcessingTime(final long averageProcessingTime) { - this.averageProcessingTime = averageProcessingTime; - } - - @Override - public List getBooleanValues() { - return Jlists.getBooleanValues(); - } - - /** - * Validate the properties that have been set from this HTTP request, and - * return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no recorded - * error messages. - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors or null - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors errors = new ActionErrors(); - numberCheck(errors, "sessionTimeOut", sessionTimeOut, true, 0, Integer.MAX_VALUE); - return errors; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ExecuteEjbAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ExecuteEjbAction.java deleted file mode 100644 index b062e147b9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/ejb/ExecuteEjbAction.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.ejb; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ExecuteEjbAction extends JonasBaseAction { - -// --------------------------------------------------------- Protected variables - - protected String mAction = null; - protected String mForward = null; - -// --------------------------------------------------------- Public Methods - - /** - * Execute a action. - * - * @param pMapping ActionForward instance - * @param pForm ActionForm instance - * @param pRequest HttpServletRequest instance - * @param pResponse HttpServletResponse instance - * @return ActionForward instance - * @throws IOException - * @throws ServletException - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Current server - WhereAreYou oWhere = (WhereAreYou) pRequest.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String serverName = oWhere.getCurrentJonasServerName(); - - // Get Http parameters - mAction = pRequest.getParameter("action"); - // Form used - EjbForm oForm = (EjbForm) m_Session.getAttribute("ejbForm"); - // Type Ejb used - //m_Type = getIntegerType(oForm); - - try { - // Execute a method of Ejb - executeEjb(oForm, serverName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp or the action - pRequest.setAttribute("select", oForm.getObjectName()); - return (pMapping.findForward(mForward)); - } - -// --------------------------------------------------------- Protected Methods - - /** - * Dispath executing on Ejb. - * - * @param pForm Current form - * @throws Exception Could not execute the requested action - */ - protected void executeEjb(EjbForm pForm, String serverName) - throws Exception { - // Object name used - String sObjectName = pForm.getObjectName(); - ObjectName on = new ObjectName(sObjectName); - String mType = pForm.getType(); // j2eeType - if (mType.equals("EntityBean")) { - // set forward String - mForward = "ActionEditEjbEntity"; - EjbEntityForm eForm = (EjbEntityForm) pForm; - String mPersistency = eForm.getPersistency(); - if (mPersistency.startsWith("Cont")) { - if ("synchronize".equals(mAction)) { - JonasManagementRepr.invoke(on, "synchronize", null, null, serverName); - } else if ("reduceCache".equals(mAction)) { - JonasManagementRepr.invoke(on, "reduceCache", null, null, serverName); - } - } - } else if (mType.equals("StatelessSessionBean")) { - mForward = "ActionEditEjbSbl"; - if ("reduceCache".equals(mAction)) { - JonasManagementRepr.invoke(on, "reduceCache", null, null, serverName); - } - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/CfForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/CfForm.java deleted file mode 100644 index 3dc4f2dc48..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/CfForm.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present a ConnectionFactory's properties - * @author Adriana Danes - */ -public class CfForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String mode = null; - private ArrayList listUsedByEjb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - mode = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getMode() { - return mode; - } - - public void setMode(String mode) { - this.mode = mode; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/EditJmsServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/EditJmsServiceAction.java deleted file mode 100644 index a4e2f0adf9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/EditJmsServiceAction.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Principal action for JMS service management. Allows to get the configuration - * attributes of the MOM implementing the jms service. - * @author Adriana Danes - */ -public class EditJmsServiceAction extends JonasBaseAction { - - public static final String JORAM = "org.ow2.jonas.lib.jms.JmsAdminForJoram"; - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms", true); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Form used - JmsServiceForm oForm = (JmsServiceForm) p_Form; - try { - // Object name used - ObjectName oObjectName = JonasObjectName.jmsService(domainName); - String momName = (String) getStringAttribute(oObjectName, "Mom"); - if (momName.equals(JORAM)) { - momName = m_Resources.getMessage("tab.mom.joram"); - } - oForm.setMomName(momName); - - String location; - String currentServer = m_WhereAreYou.getCurrentJonasServerName(); - Boolean momLocal = (Boolean) JonasManagementRepr.invoke(oObjectName, "isMomLocal", null, null, currentServer); - if (momLocal.booleanValue()) { - // Collacated MOM - location = m_Resources.getMessage("tab.mom.collocated"); - oForm.setMomLocation(location); - } else { - // Distant MOM - location = m_Resources.getMessage("tab.mom.distant"); - oForm.setMomLocation(location); - } - - String momUrl = (String) getStringAttribute(oObjectName, "Url"); - oForm.setMomUrl(momUrl); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Jms Service")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/JmsServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/JmsServiceForm.java deleted file mode 100644 index ad5936cd0a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/JmsServiceForm.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present a MOM's properties - * @author Adriana Danes - */ -public final class JmsServiceForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String momName = null; - private String momLocation = null; - private String momUrl = null; - -// ------------------------------------------------------------- Properties Methods - - public String getMomName() { - return momName; - } - public void setMomName(String momName) { - this.momName = momName; - } - - public String getMomLocation() { - return momLocation; - } - public void setMomLocation(String momLocation) { - this.momLocation = momLocation; - } - - public String getMomUrl() { - return momUrl; - } - public void setMomUrl(String momUrl) { - this.momUrl = momUrl; - } - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - momName = null; - momLocation = null; - momUrl = null; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListConnectionFactoriesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListConnectionFactoriesAction.java deleted file mode 100644 index 396604cf58..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListConnectionFactoriesAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action listing the JMS Connection Factories created via the JOnAS jms administration facility. - * @author Adriana Danes - */ -public class ListConnectionFactoriesAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR + "cf", true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = oWhere.getCurrentDomainName(); - - try { - ArrayList al = JonasAdminJmx.getConnectionFactoriesList(m_Resources, domainName, jonasServerName); - p_Request.setAttribute("cfList", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Connection Factories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListQueuesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListQueuesAction.java deleted file mode 100644 index 1f5a7fc5e0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListQueuesAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action listing the JMS Queues created via the JOnAS jms administration facility. - * @author Adriana Danes - */ -public class ListQueuesAction extends JonasBaseAction { - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR - + "queue", true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - ArrayList al = JonasAdminJmx.getQueuesList(domainName, jonasServerName); - p_Request.setAttribute("queuesList", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Queues")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListTopicsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListTopicsAction.java deleted file mode 100644 index 46cb12bd52..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/ListTopicsAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action listing the JMS Topics created via the JOnAS jms administration facility. - * @author Adriana Danes - */ -public class ListTopicsAction extends JonasBaseAction { - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR - + "topic", true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - ArrayList al = JonasAdminJmx.getTopicsList(domainName, jonasServerName); - p_Request.setAttribute("topicsList", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Topics")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentConnectionFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentConnectionFactoryAction.java deleted file mode 100644 index 86313a11d1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentConnectionFactoryAction.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Action presenting a given JMS Connection Factory's attributes. - * @author Adriana Danes - */ -public class PresentConnectionFactoryAction extends JonasBaseAction { - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected Connection Factory - String cfName = p_Request.getParameter("name"); - - // Form used - CfForm oForm = null; - if (cfName != null) { - // Build a new form - oForm = new CfForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("cfForm", oForm); - oForm.setName(cfName); - } - else { - // Used last form in session - oForm = (CfForm) m_Session.getAttribute("cfForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR + "cf" - + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Populuate - try { - if (cfName != null) { - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = cfName; - ObjectName ejbServiceMB = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(ejbServiceMB, jonasServerName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - ejbServiceMB, "getJmsConnectionFactoryDependence", asParam - , asSignature, jonasServerName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), jonasServerName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - } - // Set list in form - oForm.setListUsedByEjb(al); - - // Set monitoting info - ObjectName jmsServiceMB = JonasObjectName.jmsService(domainName); - String mode = (String) JonasManagementRepr.invoke(jmsServiceMB - , "getConnectionFactoryMode", asParam, asSignature, jonasServerName); - oForm.setMode(mode); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Connection Factory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentQueueAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentQueueAction.java deleted file mode 100644 index d72d680388..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentQueueAction.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Action presenting a given JMS Queue destination's attributes. - * @author Adriana Danes - */ -public class PresentQueueAction extends JonasBaseAction { - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected queue - String queueName = p_Request.getParameter("name"); - - // Form used - QueueForm oForm = null; - if (queueName != null) { - // Build a new form - oForm = new QueueForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("queueForm", oForm); - oForm.setName(queueName); - } - else { - // Used last form in session - oForm = (QueueForm) m_Session.getAttribute("queueForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR - + "queue" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Populuate - try { - if (queueName != null) { - // set UsedBy - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = queueName; - ObjectName ejbServiceMB = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(ejbServiceMB, jonasServerName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - ejbServiceMB, "getJmsDestinationDependence", asParam - , asSignature, jonasServerName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), jonasServerName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - } - // Set list in form - oForm.setListUsedByEjb(al); - - // Set monitoting info - ObjectName jmsServiceMB = JonasObjectName.jmsService(domainName); - int pendigMessages = ((Integer) JonasManagementRepr.invoke(jmsServiceMB - , "getPendingMessages", asParam, asSignature, jonasServerName)).intValue(); - oForm.setPendingMessages(pendigMessages); - int pendingRequests = ((Integer) JonasManagementRepr.invoke(jmsServiceMB - , "getPendingRequests", asParam, asSignature, jonasServerName)).intValue(); - oForm.setPendingRequests(pendingRequests); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Queue")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentTopicAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentTopicAction.java deleted file mode 100644 index 731fbf1c3d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/PresentTopicAction.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Action presenting a given JMS Topic destination's attributes. - * @author Adriana Danes - */ -public class PresentTopicAction extends JonasBaseAction { - /** - */ - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected Topic - String topicName = p_Request.getParameter("name"); - - // Form used - TopicForm oForm = null; - if (topicName != null) { - // Build a new form - oForm = new TopicForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("topicForm", oForm); - oForm.setName(topicName); - } - else { - // Used last form in session - oForm = (TopicForm) m_Session.getAttribute("topicForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "jms" + WhereAreYou.NODE_SEPARATOR - + "topic" + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true); - - // Current server - WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. - SESSION_NAME); - String jonasServerName = oWhere.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - - // Populuate - try { - if (topicName != null) { - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = topicName; - ObjectName ejbServiceMB = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(ejbServiceMB, jonasServerName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - ejbServiceMB, "getJmsDestinationDependence", asParam - , asSignature, jonasServerName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), jonasServerName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - } - // Set list in form - oForm.setListUsedByEjb(al); - - // Set monitoting info - ObjectName jmsServiceMB = JonasObjectName.jmsService(domainName); - int subscriptions = ((Integer) JonasManagementRepr.invoke(jmsServiceMB - , "getSubscriptions", asParam, asSignature, jonasServerName)).intValue(); - oForm.setSubscriptions(subscriptions); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Topic")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/QueueForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/QueueForm.java deleted file mode 100644 index 97b29ba6e3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/QueueForm.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present a Queue's properties - * @author Adriana Danes - */ -public class QueueForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private int pendingMessages; - private int pendingRequests; - private ArrayList listUsedByEjb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - pendingMessages = 0; - pendingRequests = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getPendingMessages() { - return pendingMessages; - } - - public void setPendingMessages(int pendingMessages) { - this.pendingMessages = pendingMessages; - } - - public int getPendingRequests() { - return pendingRequests; - } - - public void setPendingRequests(int pendingRequests) { - this.pendingRequests = pendingRequests; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/TopicForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/TopicForm.java deleted file mode 100644 index d382fa838c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jms/TopicForm.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jms; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present a Topic's properties - * @author Adriana Danes - */ -public class TopicForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private int subscriptions; - private ArrayList listUsedByEjb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - name = null; - subscriptions = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - // --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getSubscriptions() { - return subscriptions; - } - - public void setSubscriptions(int subscriptions) { - this.subscriptions = subscriptions; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyConfirmXaResourceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyConfirmXaResourceAction.java deleted file mode 100644 index 19281e71af..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyConfirmXaResourceAction.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - */ - -public class ApplyConfirmXaResourceAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - /** - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm, - HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // String sForward = null; - - // Form used - ItemsXaResourceForm oForm = (ItemsXaResourceForm) m_Session.getAttribute("itemsXaResourceForm"); - - // Current server and domain - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - // Actions - try { - String[] asParam = new String[1]; - String[] asSignature = {"java.lang.String"}; - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - // Commit - if (oForm.getAction().equals("commit") == true) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(jtaResourceObjectName, "commitXAResource", asParam, asSignature, currentJonasServerName); - } - } - // Rollback - else if (oForm.getAction().equals("rollback") == true) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(jtaResourceObjectName, "rollbackXAResource", asParam, asSignature, currentJonasServerName); - } - } - // Forget - else if (oForm.getAction().equals("forget") == true) { - for (int i = 0; i < oForm.getSelectedItems().length; i++) { - asParam[0] = oForm.getSelectedItems()[i]; - JonasManagementRepr.invoke(jtaResourceObjectName, "forgetXAResource", asParam, asSignature, currentJonasServerName); - } - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - oForm.setAction(null); - oForm.setSelectedItems(new String[0]); - - try { - // Get container list - String mys; - String sDate; - String sFullTrans; - String sTransaction; - String sResource; - String sState; - String sXidcount; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // Object name used - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllRecoveryTx", null, null, currentJonasServerName); - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sFullTrans = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sTransaction = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sDate = mys.substring(myix2 + 4, myix3); - sXidcount = mys.substring(myix3 + 4); - al.add(new TxRecovery (sFullTrans, sTransaction, sDate, sXidcount)); - } - } - - // Set list in the request - pRequest.setAttribute("listRecoveryEntries", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("Jtm Recovery")); - } - -// --------------------------------------------------------- Protected Methods - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyJtmConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyJtmConfigurationAction.java deleted file mode 100644 index 01e576306c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ApplyJtmConfigurationAction.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class ApplyJtmConfigurationAction extends JonasBaseAction { -/** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Form used - JtmServiceForm oForm = (JtmServiceForm) pForm; - try { - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - JonasManagementRepr.setAttribute(jtaResourceObjectName, "timeOut", new Integer(oForm.getTimeOutText()), currentJonasServerName); - - if (oForm.getAction().equals("save")) { - JonasManagementRepr.invoke(jtaResourceObjectName, "saveConfig", null, null, currentJonasServerName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("Jtm Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditJtmServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditJtmServiceAction.java deleted file mode 100644 index b27545b572..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditJtmServiceAction.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.ServiceName; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * Principal action for JTM service management. - * @author Adriana Danes - */ -public class EditJtmServiceAction extends JonasBaseAction { - - /** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - @Override - public ActionForward executeAction(final ActionMapping pMapping, final ActionForm pForm - , final HttpServletRequest pRequest, final HttpServletResponse pResponse) - throws IOException, ServletException { - - String serviceName = ServiceName.JTM.getName(); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "transaction", true); - - if (!isActive(serviceName)) { - return (pMapping.findForward("Jtm Service Stopped")); - } - // Form used - JtmServiceForm oForm = new JtmServiceForm(); - m_Session.setAttribute("jtmServiceForm", oForm); - try { - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - String location; - boolean collocated = getBooleanAttribute(jtaResourceObjectName, "localJtm"); - if (collocated) { - // Collacated JTM - location = m_Resources.getMessage("tab.jtm.collocated"); - oForm.setJtmLocation(location); - } else { - // Distant MOM - location = m_Resources.getMessage("tab.jtm.distant"); - oForm.setJtmLocation(location); - } - - String host = getStringAttribute(jtaResourceObjectName, "hostName"); - oForm.setJtmHost(host); - - int port = getIntegerAttribute(jtaResourceObjectName, "portNumber"); - String portValue = null; - if (port == 0) { - // Undefined value - portValue = m_Resources.getMessage("tab.jtm.undefined"); - oForm.setJtmPort(portValue); - } else { - oForm.setJtmPort(Integer.toString(port)); - } - - int timeOut = getIntegerAttribute(jtaResourceObjectName, "timeOut"); - oForm.setTimeOutText(String.valueOf(timeOut)); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Jtm Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionMonitorAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionMonitorAction.java deleted file mode 100644 index 3516b01220..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionMonitorAction.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Tony Ortiz - */ - -public class EditTransactionMonitorAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "transaction", true); - - // Form used - JtmServiceMonitorForm oForm = (JtmServiceMonitorForm) pForm; - - try { - // Get container list - String mys; - String sDate; - String sTransaction; - String sResource; - String sState; - String sXidcount; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllActiveTx", null, null, currentJonasServerName); - - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sDate = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sTransaction = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sResource = mys.substring(myix2 + 4, myix3); - sState = mys.substring(myix3 + 4); - al.add(new TxItem (sDate, sTransaction, sResource, sState)); - } - } - - // Set list in the request - pRequest.setAttribute("listTransactionsEntries", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Jtm Monitor")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionRecoveryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionRecoveryAction.java deleted file mode 100644 index d09fd6ebf2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionRecoveryAction.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Tony Ortiz - */ - -public class EditTransactionRecoveryAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "transaction", true); - - // Form used - JtmServiceRecoveryForm oForm = (JtmServiceRecoveryForm) pForm; - - try { - // Get container list - String mys; - String sDate; - String sFullTrans; - String sTransaction; - String sResource; - String sState; - String sXidcount; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllRecoveryTx", null, null, currentJonasServerName); - - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sFullTrans = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sTransaction = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sDate = mys.substring(myix2 + 4, myix3); - sXidcount = mys.substring(myix3 + 4); - al.add(new TxRecovery (sFullTrans, sTransaction, sDate, sXidcount)); - } - } - - // Set list in the request - pRequest.setAttribute("listRecoveryEntries", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Jtm Recovery")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionStatisticAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionStatisticAction.java deleted file mode 100644 index 4482545053..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/EditTransactionStatisticAction.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - * @author Adriana Danes - */ -public class EditTransactionStatisticAction extends JonasBaseAction { - /** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "transaction", true); - - // Form used - JtmServiceStatisticForm oForm = (JtmServiceStatisticForm) pForm; - try { - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - oForm.setCurrentTransactions(getIntegerAttribute(jtaResourceObjectName, "totalCurrentTransactions")); - oForm.setBegunTransactions(getIntegerAttribute(jtaResourceObjectName, "totalBegunTransactions")); - oForm.setCommitedTransactions(getIntegerAttribute(jtaResourceObjectName, "totalCommittedTransactions")); - oForm.setRollBackedTransactions(getIntegerAttribute(jtaResourceObjectName, "totalRolledbackTransactions")); - oForm.setExpiredTransactions(getIntegerAttribute(jtaResourceObjectName, "totalExpiredTransactions")); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Transaction Statistic")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ItemsXaResourceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ItemsXaResourceForm.java deleted file mode 100644 index bbaa64bfc8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ItemsXaResourceForm.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Tony Ortiz - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class ItemsXaResourceForm extends ActionForm { - -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - private String action = null; - private String[] selectedItems = new String[0]; - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = null; - selectedItems = new String[0]; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - - public String[] getSelectedItems() { - return selectedItems; - } - - public void setSelectedItems(String[] selectedItems) { - this.selectedItems = selectedItems; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - -// --------------------------------------------------------- Properties Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceForm.java deleted file mode 100644 index 4f499528ad..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceForm.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present the Transaction Manager properties - * @author Adriana Danes - */ -public final class JtmServiceForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - - private String action = null; - private String timeOutText = null; - private String jtmHost = null; - private String jtmLocation = null; - private String jtmPort = null; - -// ------------------------------------------------------------- Properties Methods - - public String getTimeOutText() { - return timeOutText; - } - public void setTimeOutText(String timeOutText) { - this.timeOutText = timeOutText; - } - public String getJtmHost() { - return jtmHost; - } - public void setJtmHost(String jtmHost) { - this.jtmHost = jtmHost; - } - public String getJtmLocation() { - return jtmLocation; - } - public void setJtmLocation(String jtmLocation) { - this.jtmLocation = jtmLocation; - } - public String getJtmPort() { - return jtmPort; - } - public void setJtmPort(String jtmPort) { - this.jtmPort = jtmPort; - } - public String getAction() { - return action; - } - public void setAction(String action) { - this.action = action; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = "apply"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - numberCheck(oErrors, "timeOut", timeOutText, false, 0, 0); - return oErrors; - } - - /** - * Helper method to check that it is a required number and - * is a valid integer within the given range. (min, max). - * - * @param field The field name in the form for which this error occured. - * @param numText The string representation of the number. - * @param rangeCheck Boolean value set to true of reange check should be performed. - * @param min The lower limit of the range - * @param max The upper limit of the range - */ - public void numberCheck(ActionErrors p_Errors, String field, String numText, boolean rangeCheck - , int min, int max) { - // Check for 'is required' - if ((numText == null) || (numText.length() < 1)) { - p_Errors.add(field, new ActionMessage("error.jtm." + field + ".required")); - } else { - // check for 'must be a number' in the 'valid range' - try { - int num = Integer.parseInt(numText); - // perform range check only if required - if (rangeCheck) { - if ((num < min) || (num > max)) { - p_Errors.add(field - , new ActionMessage("error.jtm." + field + ".range")); - } - } - } catch (NumberFormatException e) { - p_Errors.add(field, new ActionMessage("error.jtm." + field + ".format")); - } - } - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceMonitorForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceMonitorForm.java deleted file mode 100644 index fef281ff79..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceMonitorForm.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Tony Ortiz - */ -public class JtmServiceMonitorForm extends ActionForm { - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceRecoveryForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceRecoveryForm.java deleted file mode 100644 index 15b69e0085..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceRecoveryForm.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Tony Ortiz - */ -public class JtmServiceRecoveryForm extends ActionForm { - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceStatisticForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceStatisticForm.java deleted file mode 100644 index d03a117757..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceStatisticForm.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present the Transaction Manager properties - * @author Adriana Danes - */ -public final class JtmServiceStatisticForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - private int currentTransactions = 0; - private int begunTransactions = 0; - private int commitedTransactions = 0; - private int rollBackedTransactions = 0; - private int expiredTransactions = 0; -// ------------------------------------------------------------- Properties Methods - public int getCurrentTransactions() { - return currentTransactions; - } - public int getBegunTransactions() { - return begunTransactions; - } - public int getCommitedTransactions() { - return commitedTransactions; - } - public int getRollBackedTransactions() { - return rollBackedTransactions; - } - public int getExpiredTransactions() { - return expiredTransactions; - } - public void setCurrentTransactions(int currentTransactions) { - this.currentTransactions = currentTransactions; - } - public void setBegunTransactions(int begunTransactions) { - this.begunTransactions = begunTransactions; - } - public void setCommitedTransactions(int commitedTransactions) { - this.commitedTransactions = commitedTransactions; - } - public void setRollBackedTransactions(int rollBackedTransactions) { - this.rollBackedTransactions = rollBackedTransactions; - } - public void setExpiredTransactions(int expiredTransactions) { - this.expiredTransactions = expiredTransactions; - } -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceXAResourceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceXAResourceForm.java deleted file mode 100644 index 386a927705..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/JtmServiceXAResourceForm.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Tony Ortiz - */ -public class JtmServiceXAResourceForm extends ActionForm { - -// ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ListXaResourceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ListXaResourceAction.java deleted file mode 100644 index bc1a41ed18..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ListXaResourceAction.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Tony Ortiz - */ - -public class ListXaResourceAction extends JonasBaseAction { - - private String myasparam = null; - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - // Reset the selected items in case the user is flip-flopping - // between tabs on jsp pages - try { - ItemsXaResourceForm xForm = (ItemsXaResourceForm) m_Session.getAttribute("itemsXaResourceForm"); - xForm.setAction(null); - xForm.setSelectedItems(new String[0]); - } catch (Exception e) { - // ignore, we may not have yet invoked ItemxXaResourceForm - ; - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "transaction", true); - - // Form used - JtmServiceXAResourceForm oForm = (JtmServiceXAResourceForm) pForm; - - try { - // Get container list - String[] asParam = new String[1]; - String[] asSignature = {"java.lang.String"}; - String mys; - String sResmgr; - String sResource; - String sFullXid; - String sXid; - String sXidstate; - String sXidcount; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // transaction to edit - String sName = pRequest.getParameter("fulltrans"); - - if (sName == null) { - sName = myasparam; - } else { - myasparam = sName; - } - - asParam[0] = sName; - - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllXAResource", asParam, asSignature, currentJonasServerName); - - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sResmgr = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sResource = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sFullXid = mys.substring(myix2 + 4, myix3); - int myix4 = mys.indexOf("????", myix3 + 4); - sXid = mys.substring(myix3 + 4, myix4); - sXidstate = mys.substring(myix4 + 4); - al.add(new TxXaresource (null, sResmgr, sResource, sFullXid, sXid, sXidstate)); - } - } - - // Set list in the request - pRequest.setAttribute("listXaResourceEntries", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (pMapping.findForward("Jtm XAResource")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetCountersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetCountersAction.java deleted file mode 100644 index 1eab47825d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetCountersAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - * @author Adriana Danes - */ -public class ResetCountersAction extends JonasBaseAction { - /** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - try { - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - JonasManagementRepr.invoke(jtaResourceObjectName, "resetAllCounters", null, null, currentJonasServerName); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("ActionEditTransactionStatistic")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetRecoveryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetRecoveryAction.java deleted file mode 100644 index 2ecd055c41..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetRecoveryAction.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - * @author Tony Ortiz - */ -public class ResetRecoveryAction extends JonasBaseAction { - /** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - try { - // Get container list - String mys; - String sDate; - String sFullTrans; - String sTransaction; - String sResource; - String sState; - String sXidcount; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllRecoveryTx", null, null, currentJonasServerName); - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sFullTrans = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sTransaction = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sDate = mys.substring(myix2 + 4, myix3); - sXidcount = mys.substring(myix3 + 4); - al.add(new TxRecovery (sFullTrans, sTransaction, sDate, sXidcount)); - } - } - - // Set list in the request - pRequest.setAttribute("listRecoveryEntries", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("Jtm Recovery")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetTransactionsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetTransactionsAction.java deleted file mode 100644 index a311bd25e7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/ResetTransactionsAction.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * - * @author Tony Ortiz - */ -public class ResetTransactionsAction extends JonasBaseAction { - /** - * Principal method - * @param pMapping action mapping - * @param pForm used form - * @param pRequest request parameters - * @param pResponse response parameters - * @return action forward - * @throws IOException action failed because a IOException - * @throws ServletException a ServletException occured - */ - public ActionForward executeAction(ActionMapping pMapping, ActionForm pForm - , HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - - try { - // Get container list - String mys; - String sDate; - String sTransaction; - String sResource; - String sState; - int sXidcount = 0; - Object txObject; - String [] myTxInfo; - int txInfoSize; - ArrayList al = new ArrayList(); - - // Object name used - String currentDomainName = m_WhereAreYou.getCurrentDomainName(); - String currentJonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - String jtaResourceName = "JTAResource"; - ObjectName jtaResourceObjectName = J2eeObjectName.JTAResource(currentDomainName, currentJonasServerName, jtaResourceName); - - txObject = JonasManagementRepr.invoke(jtaResourceObjectName, "getAllActiveTx", null, null, currentJonasServerName); - myTxInfo = (String []) txObject; - - if (txObject != null) { - txInfoSize = myTxInfo.length; - - for (int i = 0; i < txInfoSize; i++) { - mys = myTxInfo[i]; - int myix1 = mys.indexOf("????"); - sDate = mys.substring(0, myix1); - int myix2 = mys.indexOf("????", myix1 + 4); - sTransaction = mys.substring(myix1 + 4, myix2); - int myix3 = mys.indexOf("????", myix2 + 4); - sResource = mys.substring(myix2 + 4, myix3); - sState = mys.substring(myix3 + 4); - al.add(new TxItem (sDate, sTransaction, sResource, sState)); - } - } - - // Set list in the request - pRequest.setAttribute("listTransactionsEntries", al); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(pRequest, m_Errors); - return (pMapping.findForward("Global Error")); - } - - // Forward to action - return (pMapping.findForward("Jtm Monitor")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxItem.java deleted file mode 100644 index 9625c92a60..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxItem.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Tony Ortiz - */ -public class TxItem implements NameItem { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String date = null; - private String transaction = null; - private String resource = null; - private String state = null; - -// --------------------------------------------------------- Public Methods - - public TxItem(String p_Date, String p_Transaction, String p_Resource, String p_State) { - setDate(p_Date); - setTransaction(p_Transaction); - setResource(p_Resource); - setState(p_State); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDate() { - return date; - } - - public void setDate(String date) { - this.date = date; - } - - public String getTransaction() { - return transaction; - } - - public void setTransaction(String transaction) { - this.transaction = transaction; - } - - public String getResource() { - return resource; - } - - public void setResource(String resource) { - this.resource = resource; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxRecovery.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxRecovery.java deleted file mode 100644 index 1ef5535c1e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxRecovery.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Tony Ortiz - */ -public class TxRecovery implements NameItem { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String date = null; - private String fulltrans = null; - private String transaction = null; - private String state = null; - private String xidcount = null; - -// --------------------------------------------------------- Public Methods - - public TxRecovery(String p_FullTrans, String p_Transaction, String p_Date, String p_Xidcount) { - setFulltrans(p_FullTrans); - setTransaction(p_Transaction); - setDate(p_Date); - setXidcount(p_Xidcount); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDate() { - return date; - } - - public void setDate(String date) { - this.date = date; - } - - public String getFulltrans() { - return fulltrans; - } - - public void setFulltrans(String fulltrans) { - this.fulltrans = fulltrans; - } - - public String getTransaction() { - return transaction; - } - - public void setTransaction(String transaction) { - this.transaction = transaction; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getXidcount() { - return xidcount; - } - - public void setXidcount(String xidcount) { - this.xidcount = xidcount; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxXaresource.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxXaresource.java deleted file mode 100644 index 964e95afe3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/jtm/TxXaresource.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.jtm; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Tony Ortiz - */ -public class TxXaresource implements NameItem { - -// --------------------------------------------------------- Properties variables - - private String name = null; - private String sindex = null; - private String resmgr = null; - private String xares = null; - private String fullxid = null; - private String xid = null; - private String xidstate = null; - private String objectName = null; - -// --------------------------------------------------------- Public Methods - - public TxXaresource(String p_Sindex, String p_Resmgr, String p_Xares, String p_FullXid, String p_Xid, String p_Xidstate) { - - if (p_Sindex == null) { - setSindex (p_Resmgr + '\n' + p_Xares + '\n' + p_FullXid + '\n' + p_Xidstate); - } else { - setSindex(p_Sindex); - } - - setResmgr(p_Resmgr); - setXares(p_Xares); - setFullxid(p_FullXid); - setXid(p_Xid); - setXidstate(p_Xidstate); - } - -// --------------------------------------------------------- Properties Methods - public String getSindex() { - return sindex; - } - - public void setSindex(String sindex) { - this.sindex = sindex; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getResmgr() { - return resmgr; - } - - public void setResmgr(String resmgr) { - this.resmgr = resmgr; - } - - public String getXares() { - return xares; - } - - public void setXares(String xares) { - this.xares = xares; - } - - public String getFullxid() { - return fullxid; - } - - public void setFullxid(String fullxid) { - this.fullxid = fullxid; - } - - public String getXid() { - return xid; - } - - public void setXid(String xid) { - this.xid = xid; - } - - public String getXidstate() { - return xidstate; - } - - public void setXidstate(String xidstate) { - this.xidstate = xidstate; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplyMimePartMailFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplyMimePartMailFactoryAction.java deleted file mode 100644 index 8470e470fb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplyMimePartMailFactoryAction.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ - -public class ApplyMimePartMailFactoryAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - MailFactoryForm oForm = (MailFactoryForm) p_Form; - try { - // process form .... - // Mail factory name - String mfName = oForm.getMailFactoryName(); - // Object name used corresponding to the Mail factory MBean - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName oObjectName = J2eeObjectName.JavaMailResource(domainName, mfName, serverName, - MailService.MIMEPART_PROPERTY_TYPE); - - String jndiName = oForm.getJndiName(); - String currentJndiName = getStringAttribute(oObjectName, "Name"); - if (!jndiName.equals(currentJndiName)) { - // Set new JNDI name - JonasManagementRepr.setAttribute(oObjectName, "Name", jndiName, serverName); - } - - // apply session properties - String sSessionProps = oForm.getSessionProps(); - Properties pSessionProps = getPropsFromString(sSessionProps); - String aName = null; - String aValue = null; - JonasManagementRepr.setAttribute(oObjectName, "SessionProperties", pSessionProps, serverName); - - // apply authentication properties if changed - String username = oForm.getUsername(); - String password = oForm.getPassword(); - Properties authProps = new Properties(); - authProps.setProperty("mail.authentication.username", username); - authProps.setProperty("mail.authentication.password", password); - JonasManagementRepr.setAttribute(oObjectName, "AuthenticationProperties", authProps, serverName); - - // apply specific properties for mime part datasource - String to = oForm.getTo(); - String subject = oForm.getSubject(); - String cc = oForm.getCc(); - String bcc = oForm.getBcc(); - Properties mimeProps = new Properties(); - mimeProps.setProperty("mail.to", to); - mimeProps.setProperty("mail.subject", subject); - mimeProps.setProperty("mail.cc", cc); - mimeProps.setProperty("mail.bcc", bcc); - JonasManagementRepr.setAttribute(oObjectName, "MimeMessageProperties", mimeProps, serverName); - - if (oForm.getAction().equals("save")) { - JonasManagementRepr.invoke(oObjectName, "saveConfig", null, null, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("ActionEditMimePartMailFactory").getPath() - + "?name=" + oForm.getMailFactoryName()); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplySessionMailFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplySessionMailFactoryAction.java deleted file mode 100644 index e33ba50a3d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ApplySessionMailFactoryAction.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ -* -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Adriana Danes - */ - -public class ApplySessionMailFactoryAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - MailFactoryForm oForm = (MailFactoryForm) p_Form; - try { - // process form .... - // Mail factory form - String mfName = oForm.getMailFactoryName(); - // Object name used - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName oObjectName = J2eeObjectName.JavaMailResource(domainName, mfName, serverName, - MailService.SESSION_PROPERTY_TYPE); - String jndiName = oForm.getJndiName(); - String currentJndiName = getStringAttribute(oObjectName, "Name"); - if (!jndiName.equals(currentJndiName)) { - JonasManagementRepr.setAttribute(oObjectName, "Name", jndiName, serverName); - } - - // apply session properties - String sSessionProps = oForm.getSessionProps().trim(); - Properties pSessionProps = getPropsFromString(sSessionProps); // method in JonasBaseAction - JonasManagementRepr.setAttribute(oObjectName, "SessionProperties", pSessionProps, serverName); - - // apply authentication properties if changed - String username = oForm.getUsername(); - String password = oForm.getPassword(); - Properties authProps = new Properties(); - authProps.setProperty("mail.authentication.username", username); - authProps.setProperty("mail.authentication.password", password); - JonasManagementRepr.setAttribute(oObjectName, "AuthenticationProperties", authProps, serverName); - - if (oForm.getAction().equals("save")) { - JonasManagementRepr.invoke(oObjectName, "saveConfig", null, null, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("ActionEditSessionMailFactory").getPath() + "?name=" - + oForm.getMailFactoryName()); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailFactoryAction.java deleted file mode 100644 index 890e2c7047..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailFactoryAction.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Properties; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -/** - * Helper for actions for management of Mail Factories - * @author Adriana Danes - */ -public abstract class EditMailFactoryAction extends JonasBaseAction { - - // Populate the MailFactory form - void populate(ObjectName pObjectName, MailFactoryForm pForm, String domainName, String serverName) throws Exception { - // Set configuration attributes - // - get the jndi name - pForm.setJndiName(getStringAttribute(pObjectName, "Name")); - // - get authentication properties - Properties authProps = (Properties) JonasManagementRepr.getAttribute(pObjectName, "AuthenticationProperties", serverName); - String username = (String) authProps.getProperty("mail.authentication.username"); - pForm.setUsername(username); - String password = (String) authProps.getProperty("mail.authentication.password"); - pForm.setPassword(password); - - // - get the mail session properties - Properties sessionProps = (Properties) JonasManagementRepr.getAttribute(pObjectName, "SessionProperties", serverName); - StringBuffer bufSessionProps = new StringBuffer(); - String propName = null; - String propValue; - for (Enumeration propNames = sessionProps.propertyNames() ; propNames.hasMoreElements() ;) { - propName = (String) propNames.nextElement(); - propValue = sessionProps.getProperty(propName); - bufSessionProps.append(propName); - bufSessionProps.append("="); - bufSessionProps.append(propValue); - bufSessionProps.append(","); - bufSessionProps.append("\n"); - } - if (!sessionProps.isEmpty()) { - // delete the last 2 chars (, and \n) - bufSessionProps.delete(bufSessionProps.length() - 2, bufSessionProps.length() - 1); - } else { - // Actually no chars in sessionPropsBuf - bufSessionProps.append("mail.host="); - } - String sSessionProps = new String(bufSessionProps); - pForm.setSessionProps(sSessionProps); - - // Set list of EJBs which use this mail factory - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = pForm.getJndiName(); - ObjectName oObjectName = JonasObjectName.ejbService(domainName); - if (JonasManagementRepr.isRegistered(oObjectName, serverName) == true) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke( - oObjectName, - "getMailFactoryDependence", - asParam, - asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - } - - // Set list in form - pForm.setListUsedByEjb(al); - } - - // Set the specific properties of a MimePartDataSource - void setMimePartProps(ObjectName pObjectName, MailFactoryForm pForm, String serverName) throws Exception { - Properties mimepartProps = (Properties)JonasManagementRepr.getAttribute(pObjectName, "MimeMessageProperties", serverName); - - String to = (String) mimepartProps.getProperty("mail.to"); - pForm.setTo(to); - - String subject = (String) mimepartProps.getProperty("mail.subject"); - pForm.setSubject(subject); - - String cc = (String) mimepartProps.getProperty("mail.cc"); - pForm.setCc(cc); - - String bcc = (String) mimepartProps.getProperty("mail.bcc"); - pForm.setBcc(bcc); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailServiceAction.java deleted file mode 100644 index 4a9a2ca63f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMailServiceAction.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - - -/** - * Principal action for Mail service management. - * @author Adriana Danes - */ -public class EditMailServiceAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - MailServiceForm oForm = (MailServiceForm) p_Form; - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "mail", true); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - // Object name used - ObjectName oObjectName = JonasObjectName.mailService(domainName); - int factories = getIntegerAttribute(oObjectName, "currentNumberOfSessionMailFactories"); - int totalNumber = factories; - oForm.setNbSessionFactories(factories); - factories = getIntegerAttribute(oObjectName, "currentNumberOfMimeMailFactories"); - oForm.setNbMimePartDatasourceFactories(factories); - totalNumber += factories; - oForm.setNbFactories(totalNumber); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Mail Service")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMimePartMailFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMimePartMailFactoryAction.java deleted file mode 100644 index 3050283e69..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditMimePartMailFactoryAction.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action for management of a MimePartDatasource Mail Factory - * @author Adriana Danes - */ -public class EditMimePartMailFactoryAction extends EditMailFactoryAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Mail factory to edit - String sName = p_Request.getParameter("name"); - - // Form used - MailFactoryForm oForm = null; - if (sName != null) { - // Editing a new - oForm = new MailFactoryForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("mailFactoryForm", oForm); - oForm.setMailFactoryName(sName); - } else { - // Editing the one in current session - oForm = (MailFactoryForm) m_Session.getAttribute("mailFactoryForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "mail" + WhereAreYou.NODE_SEPARATOR - + "mimepart" + WhereAreYou.NODE_SEPARATOR + oForm.getMailFactoryName(), true); - - // Populate - try { - if (sName != null) { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - // if () - ObjectName oObjectName = J2eeObjectName.JavaMailResource(domainName - , oForm.getMailFactoryName(), serverName - , MailService.MIMEPART_PROPERTY_TYPE); - populate(oObjectName, oForm, domainName, serverName); - setMimePartProps(oObjectName, oForm, serverName); - } - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("MimePart Factory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditSessionMailFactoryAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditSessionMailFactoryAction.java deleted file mode 100644 index a6f475494c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/EditSessionMailFactoryAction.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action for management of a Session Mail Factory - * @author Adriana Danes - */ -public class EditSessionMailFactoryAction extends EditMailFactoryAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Mail factory to edit - String sName = p_Request.getParameter("name"); - - // Form used - MailFactoryForm oForm = null; - if (sName != null) { - // Editing a new - oForm = new MailFactoryForm(); - oForm.reset(p_Mapping, p_Request); - m_Session.setAttribute("mailFactoryForm", oForm); - oForm.setMailFactoryName(sName); - } - else { - // Editing the one in current session - oForm = (MailFactoryForm) m_Session.getAttribute("mailFactoryForm"); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "mail" + WhereAreYou.NODE_SEPARATOR - + "session" + WhereAreYou.NODE_SEPARATOR + oForm.getMailFactoryName(), true); - - // Populate - try { - if (sName != null) { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName oObjectName = J2eeObjectName.JavaMailResource(domainName - , oForm.getMailFactoryName(), serverName, MailService.SESSION_PROPERTY_TYPE); - populate(oObjectName, oForm, domainName, serverName); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Session Factory")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListMimePartMailFactoriesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListMimePartMailFactoriesAction.java deleted file mode 100644 index a1e3251036..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListMimePartMailFactoriesAction.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action for management of a Session Mail Factory - * @author Adriana Danes - */ -public class ListMimePartMailFactoriesAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "mail" + WhereAreYou.NODE_SEPARATOR - + "mimepart", true); - - // no Form used - try { - String sName; - String sJndiName; - ObjectName oObjectName; - ArrayList al = new ArrayList(); // list of items - - ArrayList alDeployed = JonasAdminJmx.getMimeMailPartFactoriesDeployed(m_WhereAreYou); - Iterator it = alDeployed.iterator(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - while (it.hasNext()) { - sName = it.next().toString(); - //oObjectName = JonasObjectName.mimeMailFactory(sName); - oObjectName = J2eeObjectName.JavaMailResource(domainName, sName, serverName - , MailService.MIMEPART_PROPERTY_TYPE); - sJndiName = getStringAttribute(oObjectName, "Name"); - al.add(new MailFactoryItem(sName, sJndiName)); - } - - // Set list in the request - p_Request.setAttribute("listMailFactories", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("MimePart Factories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListSessionMailFactoriesAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListSessionMailFactoriesAction.java deleted file mode 100644 index 97d269e3e3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/ListSessionMailFactoriesAction.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * Action for management of a Session Mail Factory - * @author Adriana Danes - */ -public class ListSessionMailFactoriesAction extends JonasBaseAction { - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "mail" + WhereAreYou.NODE_SEPARATOR - + "session", true); - - // no Form used - try { - String sName; - String sJndiName; - ObjectName oObjectName; - ArrayList al = new ArrayList(); // list of items - - ArrayList alDeployed = JonasAdminJmx.getSessionMailFactoriesDeployed(m_WhereAreYou); - Iterator it = alDeployed.iterator(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - while (it.hasNext()) { - sName = it.next().toString(); - //oObjectName = JonasObjectName.sessionMailFactory(sName); - oObjectName = J2eeObjectName.JavaMailResource(domainName, sName, serverName - , MailService.SESSION_PROPERTY_TYPE); - sJndiName = getStringAttribute(oObjectName, "Name"); - al.add(new MailFactoryItem(sName, sJndiName)); - } - - // Set list in the request - p_Request.setAttribute("listMailFactories", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (p_Mapping.findForward("Session Factories")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryForm.java deleted file mode 100644 index 8e04f1617a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryForm.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * @author Adriana Danes - */ -public class MailFactoryForm extends ActionForm { -// --------------------------------------------------------- Constants - -// --------------------------------------------------------- Properties variables - - private String action = null; - - private String mailFactoryName = null; - private String jndiName = null; - // authentication props - private String username = null; - private String password = null; - // mail session props - private String sessionProps = null; - // mimepart datasource message props - private String to = null; - private String subject = null; - private String cc = null; - private String bcc = null; - - private ArrayList listUsedByEjb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - - public void reset(ActionMapping mapping, HttpServletRequest request) { - action = "apply"; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - * @return List of errors - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - if (jndiName.length() == 0) { - oErrors.add("jndiName", new ActionMessage("error.mailservice.mailfactory.emptyjndiname")); - } - return oErrors; - } - - public String getAction() { - return action; - } - - public void setAction(String action) { - this.action = action; - } - - public String getMailFactoryName() { - return mailFactoryName; - } - - public void setMailFactoryName(String mailFactoryName) { - this.mailFactoryName = mailFactoryName; - } - - public String getJndiName() { - return jndiName; - } - - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getSessionProps() { - return sessionProps; - } - - public void setSessionProps(String sessionProps) { - this.sessionProps = sessionProps; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String getCc() { - return cc; - } - - public void setCc(String cc) { - this.cc = cc; - } - - public String getBcc() { - return bcc; - } - - public void setBcc(String bcc) { - this.bcc = bcc; - } - - /* - public String get() { - return ; - } - - public void set(String ) { - this. = ; - } - */ - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryItem.java deleted file mode 100644 index f1af351f01..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailFactoryItem.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * @author Adriana Danes - */ -public class MailFactoryItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String name = null; - private String jndiName = null; -// --------------------------------------------------------- Constructors - - public MailFactoryItem() { - } - - public MailFactoryItem(String p_Name, String p_JndiName) { - setName(p_Name); - setJndiName(p_JndiName); - } - -// --------------------------------------------------------- Properties Methods - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getJndiName() { - return jndiName; - } - - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailServiceForm.java deleted file mode 100644 index 2a54b16325..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/mail/MailServiceForm.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.mail; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Form used to present the Mail Service - * @author Adriana Danes - */ -public final class MailServiceForm extends ActionForm { - -// ------------------------------------------------------------- Properties Variables - private int nbMimePartDatasourceFactories = 0; - private int nbSessionFactories = 0; - private int nbFactories = 0; -// ------------------------------------------------------------- Properties Methods - - public int getNbMimePartDatasourceFactories() { - return nbMimePartDatasourceFactories; - } - public void setNbMimePartDatasourceFactories(int nbMimePartDatasourceFactories) { - this.nbMimePartDatasourceFactories = nbMimePartDatasourceFactories; - } - - public int getNbSessionFactories() { - return nbSessionFactories; - } - public void setNbSessionFactories(int nbSessionFactories) { - this.nbSessionFactories = nbSessionFactories; - } - - public int getNbFactories() { - return nbFactories; - } - public void setNbFactories(int nbFactories) { - this.nbFactories = nbFactories; - } - - // ------------------------------------------------------------- Public Methods - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public void reset(ActionMapping mapping, HttpServletRequest request) { - nbMimePartDatasourceFactories = 0; - nbSessionFactories = 0; - nbFactories = 0; - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - return new ActionErrors(); - // TO DO voir DatasourceForm - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterAction.java deleted file mode 100644 index dd3ea67c29..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterAction.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.HashMap; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * @author Eric Hardesty - */ - -public class ApplyResourceAdapterAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ResourceAdapterForm oForm = (ResourceAdapterForm) p_Form; - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - populate(oForm); - if (oForm.getAction().equals("save") == true) { - save(oForm, domainName, serverName); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("ActionEditResourceAdapter").getPath() + "?select="+ - oForm.getOName()); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(final ResourceAdapterForm p_Form) - throws Exception { - // Object name used - String cf = p_Form.getConnectionFactory(); - ObjectName oObjectName = ObjectName.getInstance(cf); - // Populate - setIntegerAttribute(oObjectName, "jdbcConnCheckLevel", p_Form.getJdbcConnCheckLevel()); - setIntegerAttribute(oObjectName, "connMaxAge", p_Form.getConnMaxAge()); - setIntegerAttribute(oObjectName, "maxOpentime", p_Form.getMaxOpentime()); - setStringAttribute(oObjectName, "jdbcTestStatement", p_Form.getJdbcTestStatement()); - setIntegerAttribute(oObjectName, "maxSize", p_Form.getMaxSize()); - setIntegerAttribute(oObjectName, "minSize", p_Form.getMinSize()); - setIntegerAttribute(oObjectName, "maxWaitTime", p_Form.getMaxWaitTime()); - setIntegerAttribute(oObjectName, "maxWaiters", p_Form.getMaxWaiters()); - setIntegerAttribute(oObjectName, "samplingPeriod", p_Form.getSamplingPeriod()); - //setIntegerAttribute(oObjectName, "pstmtMax ", p_Form.getPstmtMax()); - //setStringAttribute(oObjectName, "pstmtCachePolicy ", p_Form.getPstmtCachePolicy()); - } - - protected void save(final ResourceAdapterForm pForm, final String domainName, final String serverName) throws Exception { - // Create a map containing the configuration parameters' values - HashMap configMap = new HashMap(); - configMap.put("jdbcConnCheckLevel", pForm.getJdbcConnCheckLevel()); - configMap.put("jdbcTestStatement", pForm.getJdbcTestStatement()); - configMap.put("connMaxAge", pForm.getConnMaxAge()); - configMap.put("maxOpentime", pForm.getMaxOpentime()); - configMap.put("maxSize", pForm.getMaxSize()); - configMap.put("minSize", pForm.getMinSize()); - configMap.put("maxWaitTime", pForm.getMaxWaitTime()); - configMap.put("maxWaiters", pForm.getMaxWaiters()); - configMap.put("samplingPeriod", pForm.getSamplingPeriod()); - configMap.put("pstmtMax", pForm.getPstmtMax()); - configMap.put("pstmtCachePolicy", pForm.getPstmtCachePolicy()); - // Get the RarConfigMbean - ObjectName on = JonasAdminJmx.getRarConfigObjectName(domainName, serverName); - Object[] params = new Object[] {pForm.getPath(), configMap}; - String[] sig = new String[] {"java.lang.String", "java.util.Map"}; - JonasManagementRepr.invoke(on, "updateXML", params, sig, serverName); - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterCFAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterCFAction.java deleted file mode 100644 index 6f849ea67c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ApplyResourceAdapterCFAction.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.HashMap; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - - -/** - * @author Eric Hardesty - */ - -public class ApplyResourceAdapterCFAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Form used - ResourceAdapterCFForm oForm = (ResourceAdapterCFForm) p_Form; - try { - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - populate(oForm); - if (oForm.getAction().equals("save") == true) { - save(oForm, domainName, serverName); - } - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp and add the parameter 'name' with the good value. - return new ActionForward(p_Mapping.findForward("Resource AdapterCF")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(final ResourceAdapterCFForm p_Form) - throws Exception { - // Object name used - ObjectName oObjectName = p_Form.getOName(); - // Populate - setIntegerAttribute(oObjectName, "jdbcConnCheckLevel", p_Form.getJdbcConnCheckLevel()); - setIntegerAttribute(oObjectName, "connMaxAge", p_Form.getConnMaxAge()); - setIntegerAttribute(oObjectName, "maxOpentime", p_Form.getMaxOpentime()); - setStringAttribute(oObjectName, "jdbcTestStatement", p_Form.getJdbcTestStatement()); - setIntegerAttribute(oObjectName, "maxSize", p_Form.getMaxSize()); - setIntegerAttribute(oObjectName, "minSize", p_Form.getMinSize()); - setIntegerAttribute(oObjectName, "maxWaitTime", p_Form.getMaxWaitTime()); - setIntegerAttribute(oObjectName, "maxWaiters", p_Form.getMaxWaiters()); - setIntegerAttribute(oObjectName, "samplingPeriod", p_Form.getSamplingPeriod()); - //setIntegerAttribute(oObjectName, "pstmtMax ", p_Form.getPstmtMax()); - //setStringAttribute(oObjectName, "pstmtCachePolicy ", p_Form.getPstmtCachePolicy()); - } - - protected void save(final ResourceAdapterCFForm pForm, final String domainName, final String serverName) { - // Create a map containing the configuration parameters' values - HashMap configMap = new HashMap(); - configMap.put("jdbcConnCheckLevel", pForm.getJdbcConnCheckLevel()); - configMap.put("jdbcTestStatement", pForm.getJdbcTestStatement()); - configMap.put("connMaxAge", pForm.getConnMaxAge()); - configMap.put("maxOpentime", pForm.getMaxOpentime()); - configMap.put("maxSize", pForm.getMaxSize()); - configMap.put("minSize", pForm.getMinSize()); - configMap.put("maxWaitTime", pForm.getMaxWaitTime()); - configMap.put("maxWaiters", pForm.getMaxWaiters()); - configMap.put("samplingPeriod", pForm.getSamplingPeriod()); - configMap.put("pstmtMax", pForm.getPstmtMax()); - configMap.put("pstmtCachePolicy", pForm.getPstmtCachePolicy()); - // Get the RarConfigMbean - ObjectName on = JonasAdminJmx.getRarConfigObjectName(domainName, serverName); - Object[] params = new Object[] {pForm.getPath(), configMap}; - String[] sig = new String[] {"java.lang.String", "java.util.Map"}; - JonasManagementRepr.invoke(on, "updateXML", params, sig, serverName); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAOAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAOAction.java deleted file mode 100644 index 9f939ab55b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAOAction.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class EditResourceAdapterAOAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected resource adapter - String sObjectName = p_Request.getParameter("select"); - - ObjectName oObjectName = null; - String domainName = null; - String serverName = null; - - // Form used - ResourceAdapterAOForm oForm = null; - // Build a new form - if (sObjectName != null) { - try { - // Recreate ObjectName - oObjectName = ObjectName.getInstance(sObjectName); - domainName = oObjectName.getDomain(); - serverName = oObjectName.getKeyProperty("J2EEServer"); - // Build a new form - oForm = new ResourceAdapterAOForm(); - oForm.reset(p_Mapping, p_Request); - if (oObjectName != null) { - // Object name used - oForm.setOName(oObjectName); - oForm.setName(getStringAttribute(oObjectName, "jndiName")); - oForm.setDescription(getStringAttribute(oObjectName, "description")); - oForm.setListProperties((Properties) JonasManagementRepr.getAttribute(oObjectName - , "properties", serverName)); - } - m_Session.setAttribute("resourceAdapterAOForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } else { - // Used last form in session - oForm = (ResourceAdapterAOForm) m_Session.getAttribute("resourceAdapterAOForm"); - } - - ResourceAdapterForm raForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" - + WhereAreYou.NODE_SEPARATOR + raForm.getFile(), true); - - // Forward to the jsp. - return (p_Mapping.findForward("Resource AdapterAO")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterASAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterASAction.java deleted file mode 100644 index ec91aa6f88..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterASAction.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class EditResourceAdapterASAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected resource adapter - String sObjectName = p_Request.getParameter("select"); - - ObjectName oObjectName = null; - String domainName = null; - String serverName = null; - - // Form used - ResourceAdapterASForm oForm = null; - // Build a new form - if (sObjectName != null) { - try { - // Recreate ObjectName - oObjectName = ObjectName.getInstance(sObjectName); - domainName = oObjectName.getDomain(); - serverName = oObjectName.getKeyProperty("J2EEServer"); - // Build a new form - oForm = new ResourceAdapterASForm(); - oForm.reset(p_Mapping, p_Request); - if (oObjectName != null) { - // Object name used - oForm.setOName(oObjectName); - oForm.setName(getStringAttribute(oObjectName, "jndiName")); - oForm.setDescription(getStringAttribute(oObjectName, "description")); - oForm.setListProperties((List) JonasManagementRepr.getAttribute(oObjectName - , "propertiesList", serverName)); - } - m_Session.setAttribute("resourceAdapterASForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } else { - // Used last form in session - oForm = (ResourceAdapterASForm) m_Session.getAttribute("resourceAdapterASForm"); - } - - ResourceAdapterForm raForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" - + WhereAreYou.NODE_SEPARATOR + raForm.getFile(), true); - - // Forward to the jsp. - return (p_Mapping.findForward("Resource AdapterAS")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAction.java deleted file mode 100644 index 05b49afa18..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterAction.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.base.mbean.ObjectNameItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.JoramObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.common.BeanComparator; - -/** - * @author Michel-Ange ANTON - */ - -public class EditResourceAdapterAction extends JonasBaseAction { - - public final static String JORAM_RAR_NAME = "joram_for_jonas_ra"; - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected resource adapter - String raON = p_Request.getParameter("select"); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - - ObjectName raObjectName = null; - ObjectName rarObjectName = null; - String rarName = null; - String fileName = null; - String specVersion = null; - String appName = null; - - // Form used - ResourceAdapterForm oForm = null; - // Build a new form - if (raON != null) { - String sPath = null; - try { - // Recreate ResourceAdapterModule ObjectName - rarObjectName = ObjectName.getInstance(raON); - - // check Objectname - if (!JonasManagementRepr.isRegistered(rarObjectName, serverName)) { - refreshServicesTree(p_Request); - return (p_Mapping.findForward("ActionListResourceAdapters")); - } - rarName = rarObjectName.getKeyProperty("name"); - appName = rarObjectName.getKeyProperty("J2EEApplication"); - // Create the ResourceAdapter ObjectName - raObjectName = J2eeObjectName.getResourceAdapter(domainName, rarName, appName, serverName, rarName); - - // Build a new form - oForm = new ResourceAdapterForm(); - oForm.reset(p_Mapping, p_Request); - oForm.setName(rarName); - - if (raObjectName != null) { - specVersion = getStringAttribute(raObjectName, "specVersion"); - oForm.setSpecVersion(specVersion); - // Object name used - oForm.setOName(rarObjectName); - oForm.setJndiName(getStringAttribute(raObjectName, "jndiName")); - oForm.setRarLink(getStringAttribute(raObjectName, "rarLink")); - oForm.setListProperties((Properties) JonasManagementRepr.getAttribute(raObjectName - , "properties", serverName)); - - // Get RAR info - fileName = getStringAttribute(rarObjectName, "fileName"); - oForm.setPath(fileName); - if (fileName.lastIndexOf(JORAM_RAR_NAME) > 0) { - // this is possibly the Joram RAR - ObjectName joramAdapterOn = (ObjectName) JonasManagementRepr.queryNames(JoramObjectName.joramAdapter(), serverName).iterator().next(); - if (JonasAdminJmx.hasMBeanName(joramAdapterOn, serverName)) { - oForm.setJoramAdapter(true); - Short localServerId = (Short)JonasManagementRepr.getAttribute(joramAdapterOn, "ServerId", serverName); - oForm.setJoramServerId(localServerId.toString()); - oForm.setJoramServerName((String) JonasManagementRepr.getAttribute(joramAdapterOn, "ServerName", serverName)); - } - } - oForm.setFile(JonasAdminJmx.extractFilename(oForm.getPath())); - oForm.setInEar(getBooleanAttribute(rarObjectName, "inEarCase")); - oForm.setEarPath((URL) JonasManagementRepr.getAttribute(rarObjectName, "earURL", serverName)); - oForm.setEarON((String) JonasManagementRepr.getAttribute(rarObjectName, "earON", serverName)); - - // Get info from JCAResource - ObjectName oJCAResource = ObjectName.getInstance(getStringAttribute(raObjectName, "jcaResource")); - - String [] cfs = (String[]) JonasManagementRepr.getAttribute(oJCAResource, "connectionFactories", serverName); - ArrayList cfAl = new ArrayList(); - String cfOn = null; - for (int i = 0; i < cfs.length; i++) { - cfOn = cfs[i]; - ObjectName onCf = ObjectName.getInstance(cfOn); - cfAl.add(new ObjectNameItem(onCf)); - } - Collections.sort(cfAl, new BeanComparator(new String[] { - "name"})); - oForm.setCF(cfAl); - - // Set the ActivationSpecs list - String [] ass = (String[]) JonasManagementRepr.getAttribute(oJCAResource, "activationSpecs", serverName); - ArrayList asAl = new ArrayList(); - String asOn = null; - for (int i = 0; i < ass.length; i++) { - asOn = ass[i]; - ObjectName onAs = ObjectName.getInstance(asOn); - asAl.add(new ObjectNameItem(onAs)); - } - Collections.sort(asAl, new BeanComparator(new String[] { - "name"})); - oForm.setAS(asAl); - - // Set the AdminObjects list - String [] aos = (String[]) JonasManagementRepr.getAttribute(oJCAResource, "adminObjects", serverName); - ArrayList aoAl = new ArrayList(); - String aoOn = null; - for (int i = 0; i < aos.length; i++) { - aoOn = aos[i]; - ObjectName onAo = ObjectName.getInstance(aoOn); - aoAl.add(new ObjectNameItem(onAo)); - } - Collections.sort(aoAl, new BeanComparator(new String[] { - "name"})); - oForm.setAO(aoAl); - - if (specVersion == null || specVersion.equals("1.0")) { - populate(oForm, cfs[0], domainName, serverName); - } - } - - m_Session.setAttribute("resourceAdapterForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } else { - // Used last form in session - oForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - specVersion = oForm.getSpecVersion(); - } - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" - + WhereAreYou.NODE_SEPARATOR + oForm.getFile(), true); - - // Forward to the jsp. - if (specVersion != null && specVersion.equals("1.5")) { - return (p_Mapping.findForward("Resource Adapter1.5")); - } - return (p_Mapping.findForward("Resource Adapter1.0")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(final ResourceAdapterForm p_Form, final String cf, final String domainName, final String serverName) - throws Exception { - - // ObjectName used for CF - ObjectName oObjectName = ObjectName.getInstance(cf); - p_Form.setConnectionFactory (cf); - - p_Form.setJdbcConnCheckLevel(toStringIntegerAttribute(oObjectName, "jdbcConnCheckLevel")); - p_Form.setConnMaxAge(toStringIntegerAttribute(oObjectName, "connMaxAge")); - p_Form.setMaxOpentime(toStringIntegerAttribute(oObjectName, "maxOpentime")); - p_Form.setJdbcTestStatement(getStringAttribute(oObjectName, "jdbcTestStatement")); - p_Form.setMaxSize(toStringIntegerAttribute(oObjectName, "maxSize")); - p_Form.setMinSize(toStringIntegerAttribute(oObjectName, "minSize")); - p_Form.setInitSize(toStringIntegerAttribute(oObjectName, "initSize")); - p_Form.setMaxWaitTime(toStringIntegerAttribute(oObjectName, "maxWaitTime")); - p_Form.setMaxWaiters(toStringIntegerAttribute(oObjectName, "maxWaiters")); - p_Form.setSamplingPeriod(toStringIntegerAttribute(oObjectName, "samplingPeriod")); - p_Form.setPstmtMax(toStringIntegerAttribute(oObjectName, "pstmtMax")); - p_Form.setJdbcConnSetUp(getBooleanAttribute(oObjectName, "jdbcConnSetUp")); - - // Build list of Ejb which used this jndiName - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = p_Form.getJndiName(); - if (JonasManagementRepr.isRegistered(JonasObjectName.ejbService(domainName), serverName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke(JonasObjectName. - ejbService(domainName), "getDataSourceDependence", asParam, asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Set list in form - p_Form.setListUsedByEjb(al); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFAction.java deleted file mode 100644 index 84d0af2a19..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFAction.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItem; -import org.ow2.jonas.lib.management.extensions.container.ejb.EjbItemByNameComparator; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ - -public class EditResourceAdapterCFAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - @Override - public ActionForward executeAction(final ActionMapping p_Mapping, final ActionForm p_Form - , final HttpServletRequest p_Request, final HttpServletResponse p_Response) - throws IOException, ServletException { - - // Selected resource adapter - String sObjectName = p_Request.getParameter("select"); - - ObjectName oObjectName = null; - String domainName = null; - String serverName = null; - - // Form used - ResourceAdapterCFForm oForm = null; - // Build a new form - if (sObjectName != null) { - String sPath = null; - try { - // Recreate ObjectName - oObjectName = ObjectName.getInstance(sObjectName); - domainName = oObjectName.getDomain(); - serverName = oObjectName.getKeyProperty("J2EEServer"); - // Build a new form - oForm = new ResourceAdapterCFForm(); - oForm.reset(p_Mapping, p_Request); - if (oObjectName != null) { - // Object name used - oForm.setOName(oObjectName); - oForm.setName(getStringAttribute(oObjectName, "jndiName")); - oForm.setPath(getStringAttribute(oObjectName, "fileName")); - oForm.setDescription(getStringAttribute(oObjectName, "description")); - oForm.setListProperties((Properties) JonasManagementRepr.getAttribute(oObjectName - , "properties", serverName)); - populate(oForm, oObjectName, domainName, serverName); - } - m_Session.setAttribute("resourceAdapterCFForm", oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - } else { - // Used last form in session - oForm = (ResourceAdapterCFForm) m_Session.getAttribute("resourceAdapterCFForm"); - } - - ResourceAdapterForm raForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" - + WhereAreYou.NODE_SEPARATOR + raForm.getFile(), true); - - // Forward to the jsp. - return (p_Mapping.findForward("Resource AdapterCF")); - } - - protected void populate(final ResourceAdapterCFForm p_Form, final ObjectName oObjectName, final String domainName, final String serverName) - throws Exception { - - p_Form.setJdbcConnCheckLevel(toStringIntegerAttribute(oObjectName, "jdbcConnCheckLevel")); - p_Form.setConnMaxAge(toStringIntegerAttribute(oObjectName, "connMaxAge")); - p_Form.setMaxOpentime(toStringIntegerAttribute(oObjectName, "maxOpentime")); - p_Form.setJdbcTestStatement(getStringAttribute(oObjectName, "jdbcTestStatement")); - p_Form.setMaxSize(toStringIntegerAttribute(oObjectName, "maxSize")); - p_Form.setMinSize(toStringIntegerAttribute(oObjectName, "minSize")); - p_Form.setInitSize(toStringIntegerAttribute(oObjectName, "initSize")); - p_Form.setMaxWaitTime(toStringIntegerAttribute(oObjectName, "maxWaitTime")); - p_Form.setMaxWaiters(toStringIntegerAttribute(oObjectName, "maxWaiters")); - p_Form.setSamplingPeriod(toStringIntegerAttribute(oObjectName, "samplingPeriod")); - p_Form.setPstmtMax(toStringIntegerAttribute(oObjectName, "pstmtMax")); - p_Form.setJdbcConnSetUp(getBooleanAttribute(oObjectName, "jdbcConnSetUp")); - - // Build list of Ejb which used this jndiName - ArrayList al = new ArrayList(); - String[] asParam = new String[1]; - String[] asSignature = new String[1]; - asSignature[0] = "java.lang.String"; - asParam[0] = p_Form.getName(); - if (JonasManagementRepr.isRegistered(JonasObjectName.ejbService(domainName), serverName)) { - java.util.Iterator it = ((java.util.Set) JonasManagementRepr.invoke(JonasObjectName. - ejbService(domainName), "getDataSourceDependence", asParam, asSignature, serverName)).iterator(); - while (it.hasNext()) { - al.add(new EjbItem((ObjectName) it.next(), serverName)); - } - } - // Sort by name - Collections.sort(al, new EjbItemByNameComparator()); - // Set list in form - p_Form.setListUsedByEjb(al); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFStatAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFStatAction.java deleted file mode 100644 index d9d75422ff..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterCFStatAction.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Eric Hardesty - */ - -public class EditResourceAdapterCFStatAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - - - // Form used is already in session as we already executed one EditResourceAdapter action - ResourceAdapterCFForm oForm = (ResourceAdapterCFForm) m_Session.getAttribute("resourceAdapterCFForm"); - - ResourceAdapterForm raForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" + WhereAreYou.NODE_SEPARATOR - + raForm.getFile(), true); - - // Populate - try { - populate(oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - m_Session.setAttribute("resourceAdapterCFForm", oForm); - - // Forward to the jsp. - return (p_Mapping.findForward("RAR1.5 CF Stat")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(ResourceAdapterCFForm p_Form) - throws Exception { - - // ObjectName used for JCAConnectionFactory - - ObjectName oObjectName = p_Form.getOName(); - - p_Form.setCurrentOpened(toStringIntegerAttribute(oObjectName, "currentOpened")); - p_Form.setCurrentBusy(toStringIntegerAttribute(oObjectName, "currentBusy")); - p_Form.setBusyMaxRecent(toStringIntegerAttribute(oObjectName, "busyMax")); - p_Form.setBusyMinRecent(toStringIntegerAttribute(oObjectName, "busyMin")); - p_Form.setCurrentInTx(toStringIntegerAttribute(oObjectName, "currentInTx")); - p_Form.setOpenedCount(toStringIntegerAttribute(oObjectName, "openedCount")); - p_Form.setConnectionFailures(toStringIntegerAttribute(oObjectName, "connectionFailures")); - p_Form.setConnectionLeaks(toStringIntegerAttribute(oObjectName, "connectionLeaks")); - p_Form.setCurrentWaiters(toStringIntegerAttribute(oObjectName, "currentWaiters")); - p_Form.setWaitersHigh(toStringIntegerAttribute(oObjectName, "waitersHigh")); - p_Form.setWaitersHighRecent(toStringIntegerAttribute(oObjectName, "waitersHighRecent")); - p_Form.setWaiterCount(toStringIntegerAttribute(oObjectName, "waiterCount")); - p_Form.setWaitingTime(toStringLongAttribute(oObjectName, "waitingTime")); - p_Form.setWaitingHigh(toStringLongAttribute(oObjectName, "waitingHigh")); - p_Form.setWaitingHighRecent(toStringLongAttribute(oObjectName, "waitingHighRecent")); - p_Form.setServedOpen(toStringIntegerAttribute(oObjectName, "servedOpen")); - p_Form.setRejectedOpen(toStringIntegerAttribute(oObjectName, "rejectedOpen")); - p_Form.setRejectedFull(toStringIntegerAttribute(oObjectName, "rejectedFull")); - p_Form.setRejectedTimeout(toStringIntegerAttribute(oObjectName, "rejectedTimeout")); - p_Form.setRejectedOther(toStringIntegerAttribute(oObjectName, "rejectedOther")); - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterStatAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterStatAction.java deleted file mode 100644 index 88cc9f9678..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/EditResourceAdapterStatAction.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.mbean.ObjectNameItem; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Eric Hardesty - */ - -public class EditResourceAdapterStatAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - - // Form used is already in session as we already executed one EditResourceAdapter action - ResourceAdapterForm oForm = (ResourceAdapterForm) m_Session.getAttribute("resourceAdapterForm"); - - // Populate - try { - populate(oForm); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - m_Session.setAttribute("resourceAdapterForm", oForm); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter" + WhereAreYou.NODE_SEPARATOR - + oForm.getFile(), true); - - // Forward to the jsp. - return (p_Mapping.findForward("RAR1.0 Stat")); - } - -// --------------------------------------------------------- Protected Methods - - protected void populate(ResourceAdapterForm p_Form) - throws Exception { - - // ObjectName used for JCAConnectionFactory - - ObjectNameItem oni = (ObjectNameItem) p_Form.getCF().get(0); - String sObjectName = oni.getObjectName(); - ObjectName oObjectName = ObjectName.getInstance(sObjectName); - - p_Form.setCurrentOpened(toStringIntegerAttribute(oObjectName, "currentOpened")); - p_Form.setCurrentBusy(toStringIntegerAttribute(oObjectName, "currentBusy")); - p_Form.setBusyMaxRecent(toStringIntegerAttribute(oObjectName, "busyMax")); - p_Form.setBusyMinRecent(toStringIntegerAttribute(oObjectName, "busyMin")); - p_Form.setCurrentInTx(toStringIntegerAttribute(oObjectName, "currentInTx")); - p_Form.setOpenedCount(toStringIntegerAttribute(oObjectName, "openedCount")); - p_Form.setConnectionFailures(toStringIntegerAttribute(oObjectName, "connectionFailures")); - p_Form.setConnectionLeaks(toStringIntegerAttribute(oObjectName, "connectionLeaks")); - p_Form.setCurrentWaiters(toStringIntegerAttribute(oObjectName, "currentWaiters")); - p_Form.setWaitersHigh(toStringIntegerAttribute(oObjectName, "waitersHigh")); - p_Form.setWaitersHighRecent(toStringIntegerAttribute(oObjectName, "waitersHighRecent")); - p_Form.setWaiterCount(toStringIntegerAttribute(oObjectName, "waiterCount")); - p_Form.setWaitingTime(toStringLongAttribute(oObjectName, "waitingTime")); - p_Form.setWaitingHigh(toStringLongAttribute(oObjectName, "waitingHigh")); - p_Form.setWaitingHighRecent(toStringLongAttribute(oObjectName, "waitingHighRecent")); - p_Form.setServedOpen(toStringIntegerAttribute(oObjectName, "servedOpen")); - p_Form.setRejectedOpen(toStringIntegerAttribute(oObjectName, "rejectedOpen")); - p_Form.setRejectedFull(toStringIntegerAttribute(oObjectName, "rejectedFull")); - p_Form.setRejectedTimeout(toStringIntegerAttribute(oObjectName, "rejectedTimeout")); - p_Form.setRejectedOther(toStringIntegerAttribute(oObjectName, "rejectedOther")); - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ListResourceAdaptersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ListResourceAdaptersAction.java deleted file mode 100644 index 397de648ff..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ListResourceAdaptersAction.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Michel-Ange ANTON - */ - -public class ListResourceAdaptersAction extends JonasBaseAction { - -// --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, ActionForm p_Form - , HttpServletRequest p_Request, HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "resourceAdapter", true); - - // Force the deployment type to use the refreshing method - m_WhereAreYou.setCurrentJonasDeploymentType(WhereAreYou.DEPLOYMENT_RAR); - - String s_refresh = (String) p_Request.getParameter("refresh"); - boolean refresh = Boolean.valueOf(s_refresh).booleanValue(); - - // no Form used - try { - // Refresh in case deploy/undeploy operation arrived. - if (refresh) { - refreshServicesTree(p_Request); - } - - // Get container list - String sPath; - String sFile; - String sName; - ArrayList al = new ArrayList(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - ObjectName onContainers = J2eeObjectName.getResourceAdapterModules(domainName, serverName); - Iterator itNames = JonasManagementRepr.queryNames(onContainers, serverName).iterator(); - while (itNames.hasNext()) { - ObjectName it_on = (ObjectName) itNames.next(); - sPath = getStringAttribute(it_on, "fileName"); - sFile = JonasAdminJmx.extractFilename(sPath); - //sName = getStringAttribute(it_on, "JndiName"); - sName = it_on.getKeyProperty("name"); - al.add(new ResourceItem(sFile, sPath, it_on.toString(), sName)); - } - Collections.sort(al, new ResourceItemByFile()); - // Set list in the request - p_Request.setAttribute("listResourceAdapters", al); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward("Global Error")); - } - // Forward to the jsp. - return (p_Mapping.findForward("Resources Adapters")); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterAOForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterAOForm.java deleted file mode 100644 index 09384341e9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterAOForm.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -import javax.management.ObjectName; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.deployment.rar.RequiredConfigPropertyDesc; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.common.LabelValueByLabelComparator; -import org.ow2.jonas.webapp.taglib.LabelValueBean; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ -public class ResourceAdapterAOForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String description = null; - private String name = null; - private ArrayList listProperties = new ArrayList(); - private ObjectName oName = null; - - private ArrayList listUsedByMdb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ArrayList getListProperties() { - return listProperties; - } - - public void setListProperties(Properties properties) { - this.listProperties.clear(); - // Fill list with properties (keys and values) - String sKey; - Enumeration oEnum = properties.keys(); - while (oEnum.hasMoreElements()) { - sKey = oEnum.nextElement().toString(); - this.listProperties.add(new LabelValueBean(sKey, properties.getProperty(sKey, ""))); - } - Collections.sort(this.listProperties, new LabelValueByLabelComparator()); - } - - - public void setOName(ObjectName oName) { - this.oName = oName; - } - - public ObjectName getOName() { - return oName; - } - - public ArrayList getListUsedByMdb() { - return listUsedByMdb; - } - - public void setListUsedByMdb(ArrayList listUsedByMdb) { - this.listUsedByMdb = listUsedByMdb; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterASForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterASForm.java deleted file mode 100644 index c31e924800..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterASForm.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -import javax.management.ObjectName; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.deployment.rar.RequiredConfigPropertyDesc; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - - -/** - * @author Michel-Ange ANTON - */ -public class ResourceAdapterASForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String description = null; - private String name = null; - private ArrayList listProperties = new ArrayList(); - private ObjectName oName = null; - - private ArrayList listUsedByMdb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - public void reset(ActionMapping mapping, HttpServletRequest request) { - } - - public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public ArrayList getListProperties() { - return listProperties; - } - - public void setListProperties(List properties) { - this.listProperties.clear(); - RequiredConfigPropertyDesc rcProp = null; - // Get the req properties - for (Iterator r = properties.iterator(); r.hasNext();) { - rcProp = (RequiredConfigPropertyDesc) r.next(); - String reqName = rcProp.getConfigPropertyName(); - this.listProperties.add(reqName); - } - } - - public void setOName(ObjectName oName) { - this.oName = oName; - } - - public ObjectName getOName() { - return oName; - } - - public ArrayList getListUsedByMdb() { - return listUsedByMdb; - } - - public void setListUsedByMdb(ArrayList listUsedByMdb) { - this.listUsedByMdb = listUsedByMdb; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterCFForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterCFForm.java deleted file mode 100644 index 30efa8abcc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterCFForm.java +++ /dev/null @@ -1,462 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.common.LabelValueByLabelComparator; -import org.ow2.jonas.webapp.taglib.LabelValueBean; - - -/** - * @author Michel-Ange ANTON - */ -public class ResourceAdapterCFForm extends ActionForm { - -// --------------------------------------------------------- Properties variables - - private String action = null; - private String description = null; - private String name = null; - private ArrayList listProperties = new ArrayList(); - private ObjectName oName = null; - private String path = null; - - private String jdbcTestStatement = "1"; - private java.util.List checkingLevels = Jlists.getJdbcConnectionCheckingLevels(); - private String currentOpened = null; - private String currentBusy = null; - private String busyMaxRecent = null; - private String busyMinRecent = null; - private String currentInTx = null; - private String openedCount = null; - private String connectionFailures = null; - private String connectionLeaks = null; - private String currentWaiters = null; - private String waitersHigh = null; - private String waitersHighRecent = null; - private String waiterCount = null; - private String waitingTime = null; - private String waitingHigh = null; - private String waitingHighRecent = null; - private String servedOpen = null; - private String rejectedOpen = null; - private String rejectedFull = null; - private String rejectedTimeout = null; - private String rejectedOther = null; - private String jdbcConnCheckLevel = "0"; - private String connMaxAge = "0"; - private String maxOpentime = "0"; - private String initSize = "0"; - private String maxSize = "0"; - private String minSize = "0"; - private String maxWaitTime = "0"; - private String maxWaiters = "0"; - private String samplingPeriod = "0"; - private String pstmtMax = "0"; - private String pstmtCachePolicy = "List"; - - private boolean jdbcConnSetUp = false; - - public boolean isJdbcConnSetUp() { - return jdbcConnSetUp; - } - - public void setJdbcConnSetUp(final boolean jdbcConnSetUp) { - this.jdbcConnSetUp = jdbcConnSetUp; - } - - private ArrayList listUsedByEjb = new ArrayList(); - -// --------------------------------------------------------- Public Methods - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - } - - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public String getDescription() { - return description; - } - - public void setDescription(final String desc) { - description = desc; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public String getPath() { - return path; - } - - public void setPath(final String path) { - this.path = path; - } - - public ArrayList getListProperties() { - return listProperties; - } - - public void setListProperties(final Properties properties) { - this.listProperties.clear(); - // Fill list with properties (keys and values) - String sKey; - Enumeration oEnum = properties.keys(); - while (oEnum.hasMoreElements()) { - sKey = oEnum.nextElement().toString(); - this.listProperties.add(new LabelValueBean(sKey, properties.getProperty(sKey, ""))); - } - Collections.sort(this.listProperties, new LabelValueByLabelComparator()); - } - - public void setOName(final ObjectName oName) { - this.oName = oName; - } - - public ObjectName getOName() { - return oName; - } - - // Statistics - public String getCurrentOpened() { - return currentOpened; - } - - public void setCurrentOpened(final String s) { - currentOpened = s; - } - - public String getCurrentBusy() { - return currentBusy; - } - - public void setCurrentBusy(final String s) { - currentBusy = s; - } - - public String getCurrentInTx() { - return currentInTx; - } - - public void setCurrentInTx(final String s) { - currentInTx = s; - } - - public String getOpenedCount() { - return openedCount; - } - - public void setOpenedCount(final String s) { - openedCount = s; - } - - public String getConnectionFailures() { - return connectionFailures; - } - - public void setConnectionFailures(final String s) { - connectionFailures = s; - } - - public String getConnectionLeaks() { - return connectionLeaks; - } - - public void setConnectionLeaks(final String s) { - connectionLeaks = s; - } - - public String getCurrentWaiters() { - return currentWaiters; - } - - public void setCurrentWaiters(final String s) { - currentWaiters = s; - } - - public String getWaitersHigh() { - return waitersHigh; - } - - public void setWaitersHigh(final String s) { - waitersHigh = s; - } - - public String getWaitersHighRecent() { - return waitersHighRecent; - } - - public void setWaitersHighRecent(final String s) { - waitersHighRecent = s; - } - - public String getBusyMaxRecent() { - return busyMaxRecent; - } - - public void setBusyMaxRecent(final String s) { - busyMaxRecent = s; - } - - public String getBusyMinRecent() { - return busyMinRecent; - } - - public void setBusyMinRecent(final String s) { - busyMinRecent = s; - } - - public String getWaiterCount() { - return waiterCount; - } - - public void setWaiterCount(final String s) { - waiterCount = s; - } - - public String getWaitingTime() { - return waitingTime; - } - - public void setWaitingTime(final String s) { - waitingTime = s; - } - - public String getWaitingHigh() { - return waitingHigh; - } - - public void setWaitingHigh(final String s) { - waitingHigh = s; - } - - public String getWaitingHighRecent() { - return waitingHighRecent; - } - - public void setWaitingHighRecent(final String s) { - waitingHighRecent = s; - } - - public String getServedOpen() { - return servedOpen; - } - - public void setServedOpen(final String s) { - servedOpen = s; - } - - public String getRejectedOpen() { - return rejectedOpen; - } - - public void setRejectedOpen(final String s) { - rejectedOpen = s; - } - - public String getRejectedFull() { - return rejectedFull; - } - - public void setRejectedFull(final String s) { - rejectedFull = s; - } - - public String getRejectedTimeout() { - return rejectedTimeout; - } - - public void setRejectedTimeout(final String s) { - rejectedTimeout = s; - } - - public String getRejectedOther() { - return rejectedOther; - } - - public void setRejectedOther(final String s) { - rejectedOther = s; - } - - public String getJdbcConnCheckLevel() { - return jdbcConnCheckLevel; - } - - public void setJdbcConnCheckLevel(final String jdbcConnCheckLevel) { - this.jdbcConnCheckLevel = jdbcConnCheckLevel; - } - - public String getConnMaxAge() { - return connMaxAge; - } - - public void setConnMaxAge(final String s) { - connMaxAge = s; - } - - public String getMaxOpentime() { - return maxOpentime; - } - - public void setMaxOpentime(final String s) { - maxOpentime = s; - } - - public String getMaxSize() { - return maxSize; - } - - public void setMaxSize(final String maxSize) { - this.maxSize = maxSize; - } - - public String getMinSize() { - return minSize; - } - - public void setMinSize(final String minSize) { - this.minSize = minSize; - } - - public String getMaxWaitTime() { - return maxWaitTime; - } - - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - public String getMaxWaiters() { - return maxWaiters; - } - - public void setMaxWaiters(final String s) { - this.maxWaiters = s; - } - - public String getSamplingPeriod() { - return samplingPeriod; - } - - public void setSamplingPeriod(final String s) { - this.samplingPeriod = s; - } - - public String getJdbcTestStatement() { - return jdbcTestStatement; - } - - public void setJdbcTestStatement(final String jdbcTestStatement) { - this.jdbcTestStatement = jdbcTestStatement; - } - - public java.util.List getCheckingLevels() { - return checkingLevels; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(final ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - - /** - * @return Returns the initSize. - */ - public String getInitSize() { - return initSize; - } - - /** - * @param initSize The initSize to set. - */ - public void setInitSize(final String initSize) { - this.initSize = initSize; - } - - /** - * @return Returns the pstmtMax. - */ - public String getPstmtMax() { - return pstmtMax; - } - - /** - * @param pstmtMax The pstmtMax to set. - */ - public void setPstmtMax(final String pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * @return Returns the pstmtCachePolicy. - */ - public String getPstmtCachePolicy() { - return pstmtCachePolicy; - } - - /** - * @param pstmtMax The pstmtMax to set. - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterForm.java deleted file mode 100644 index 55ded266f0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceAdapterForm.java +++ /dev/null @@ -1,572 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.jonasadmin.Jlists; -import org.ow2.jonas.webapp.jonasadmin.common.LabelValueByLabelComparator; -import org.ow2.jonas.webapp.jonasadmin.service.ModuleForm; -import org.ow2.jonas.webapp.taglib.LabelValueBean; - - -/** - * @author Michel-Ange ANTON - * @author Adriana Danes - */ -public class ResourceAdapterForm extends ModuleForm { - -// --------------------------------------------------------- Properties variables - - private String action = null; - private String name = null; - private String jndiName = null; - private String path = null; - private String file = null; - private String rarLink = null; - - private ArrayList listProperties = new ArrayList(); - private String specVersion = null; - private ArrayList CF = new ArrayList(); - private ArrayList AS = new ArrayList(); - private ArrayList AO = new ArrayList(); - - private ObjectName oName = null; - private String connectionFactory = null; - - private String jdbcTestStatement = null; - private java.util.List checkingLevels = Jlists.getJdbcConnectionCheckingLevels(); - private String currentOpened = null; - private String currentBusy = null; - private String busyMaxRecent = null; - private String busyMinRecent = null; - private String currentInTx = null; - private String openedCount = null; - private String connectionFailures = null; - private String connectionLeaks = null; - private String currentWaiters = null; - private String waitersHigh = null; - private String waitersHighRecent = null; - private String waiterCount = null; - private String waitingTime = null; - private String waitingHigh = null; - private String waitingHighRecent = null; - private String servedOpen = null; - private String rejectedOpen = null; - private String rejectedFull = null; - private String rejectedTimeout = null; - private String rejectedOther = null; - private String jdbcConnCheckLevel = null; - private String connMaxAge = null; - private String maxOpentime = null; - private String maxSize = null; - private String minSize = null; - private String initSize = null; - private String maxWaitTime = null; - private String maxWaiters = null; - private String samplingPeriod = null; - private String pstmtMax = "0"; - private String pstmtCachePolicy = ""; - private boolean jdbcConnSetUp = false; - - public boolean isJdbcConnSetUp() { - return jdbcConnSetUp; - } - - public void setJdbcConnSetUp(final boolean jdbcConnSetUp) { - this.jdbcConnSetUp = jdbcConnSetUp; - } - - private ArrayList listUsedByEjb = new ArrayList(); - - // Specific for Joram adapter - private boolean joramAdapter = false; - private String joramServerId = null; - private String joramServerName = null; - -// --------------------------------------------------------- Public Methods - - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - ActionErrors oErrors = new ActionErrors(); - return oErrors; - } - -// --------------------------------------------------------- Properties Methods - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public ArrayList getAO() { - return AO; - } - - public void setAO(final ArrayList ao) { - AO = ao; - } - - public ArrayList getAS() { - return AS; - } - - public void setAS(final ArrayList as) { - AS = as; - } - - public ArrayList getCF() { - return CF; - } - - public void setCF(final ArrayList cf) { - CF = cf; - } - - public String getJndiName() { - return jndiName; - } - - public void setJndiName(final String name) { - this.jndiName = name; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public String getPath() { - return path; - } - - public void setPath(final String path) { - this.path = path; - } - - public String getFile() { - return file; - } - - public void setFile(final String file) { - this.file = file; - } - - public String getRarLink() { - return rarLink; - } - - public void setRarLink(final String rarLink) { - this.rarLink = rarLink; - } - - public ArrayList getListProperties() { - return listProperties; - } - - public void setListProperties(final Properties properties) { - this.listProperties.clear(); - // Fill list with properties (keys and values) - String sKey; - Enumeration oEnum = properties.keys(); - while (oEnum.hasMoreElements()) { - sKey = oEnum.nextElement().toString(); - this.listProperties.add(new LabelValueBean(sKey, properties.getProperty(sKey, ""))); - } - Collections.sort(this.listProperties, new LabelValueByLabelComparator()); - } - - public String getSpecVersion() { - return specVersion; - } - - public void setSpecVersion(final String specVersion) { - this.specVersion = specVersion; - } - - public void setOName(final ObjectName oName) { - this.oName = oName; - } - - public ObjectName getOName() { - return oName; - } - - public void setConnectionFactory(final String cf) { - connectionFactory = cf; - } - - public String getConnectionFactory() { - return connectionFactory; - } - - // Statistics - public String getCurrentOpened() { - return currentOpened; - } - - public void setCurrentOpened(final String s) { - currentOpened = s; - } - - public String getCurrentBusy() { - return currentBusy; - } - - public void setCurrentBusy(final String s) { - currentBusy = s; - } - - public String getCurrentInTx() { - return currentInTx; - } - - public void setCurrentInTx(final String s) { - currentInTx = s; - } - - public String getOpenedCount() { - return openedCount; - } - - public void setOpenedCount(final String s) { - openedCount = s; - } - - public String getConnectionFailures() { - return connectionFailures; - } - - public void setConnectionFailures(final String s) { - connectionFailures = s; - } - - public String getConnectionLeaks() { - return connectionLeaks; - } - - public void setConnectionLeaks(final String s) { - connectionLeaks = s; - } - - public String getCurrentWaiters() { - return currentWaiters; - } - - public void setCurrentWaiters(final String s) { - currentWaiters = s; - } - - public String getWaitersHigh() { - return waitersHigh; - } - - public void setWaitersHigh(final String s) { - waitersHigh = s; - } - - public String getWaitersHighRecent() { - return waitersHighRecent; - } - - public void setWaitersHighRecent(final String s) { - waitersHighRecent = s; - } - - public String getBusyMaxRecent() { - return busyMaxRecent; - } - - public void setBusyMaxRecent(final String s) { - busyMaxRecent = s; - } - - public String getBusyMinRecent() { - return busyMinRecent; - } - - public void setBusyMinRecent(final String s) { - busyMinRecent = s; - } - - public String getWaiterCount() { - return waiterCount; - } - - public void setWaiterCount(final String s) { - waiterCount = s; - } - - public String getWaitingTime() { - return waitingTime; - } - - public void setWaitingTime(final String s) { - waitingTime = s; - } - - public String getWaitingHigh() { - return waitingHigh; - } - - public void setWaitingHigh(final String s) { - waitingHigh = s; - } - - public String getWaitingHighRecent() { - return waitingHighRecent; - } - - public void setWaitingHighRecent(final String s) { - waitingHighRecent = s; - } - - public String getServedOpen() { - return servedOpen; - } - - public void setServedOpen(final String s) { - servedOpen = s; - } - - public String getRejectedOpen() { - return rejectedOpen; - } - - public void setRejectedOpen(final String s) { - rejectedOpen = s; - } - - public String getRejectedFull() { - return rejectedFull; - } - - public void setRejectedFull(final String s) { - rejectedFull = s; - } - - public String getRejectedTimeout() { - return rejectedTimeout; - } - - public void setRejectedTimeout(final String s) { - rejectedTimeout = s; - } - - public String getRejectedOther() { - return rejectedOther; - } - - public void setRejectedOther(final String s) { - rejectedOther = s; - } - - public String getJdbcConnCheckLevel() { - return jdbcConnCheckLevel; - } - - public void setJdbcConnCheckLevel(final String jdbcConnCheckLevel) { - this.jdbcConnCheckLevel = jdbcConnCheckLevel; - } - - public String getConnMaxAge() { - return connMaxAge; - } - - public void setConnMaxAge(final String s) { - connMaxAge = s; - } - - public String getMaxOpentime() { - return maxOpentime; - } - - public void setMaxOpentime(final String s) { - maxOpentime = s; - } - - public String getMaxSize() { - return maxSize; - } - - public void setMaxSize(final String maxSize) { - this.maxSize = maxSize; - } - - public String getMinSize() { - return minSize; - } - - public void setMinSize(final String minSize) { - this.minSize = minSize; - } - - public String getMaxWaitTime() { - return maxWaitTime; - } - - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - public String getMaxWaiters() { - return maxWaiters; - } - - public void setMaxWaiters(final String s) { - this.maxWaiters = s; - } - - public String getSamplingPeriod() { - return samplingPeriod; - } - - public void setSamplingPeriod(final String s) { - this.samplingPeriod = s; - } - - public String getJdbcTestStatement() { - return jdbcTestStatement; - } - - public void setJdbcTestStatement(final String jdbcTestStatement) { - this.jdbcTestStatement = jdbcTestStatement; - } - - public java.util.List getCheckingLevels() { - return checkingLevels; - } - - public ArrayList getListUsedByEjb() { - return listUsedByEjb; - } - - public void setListUsedByEjb(final ArrayList listUsedByEjb) { - this.listUsedByEjb = listUsedByEjb; - } - /** - * @return Returns the joramAdapter. - */ - public boolean isJoramAdapter() { - return joramAdapter; - } - - /** - * @param joramAdapter The joramAdapter to set. - */ - public void setJoramAdapter(final boolean joramAdapter) { - this.joramAdapter = joramAdapter; - } - - /** - * @return Returns the serverId. - */ - public String getJoramServerId() { - return joramServerId; - } - - /** - * @param serverId The serverId to set. - */ - public void setJoramServerId(final String serverId) { - this.joramServerId = serverId; - } - - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - } - - /** - * @return Returns the joramServerName. - */ - public String getJoramServerName() { - return joramServerName; - } - - /** - * @param joramServerName The joramServerName to set. - */ - public void setJoramServerName(final String joramServerName) { - this.joramServerName = joramServerName; - } - - /** - * @return Returns the initSize. - */ - public String getInitSize() { - return initSize; - } - - /** - * @param initSize The initSize to set. - */ - public void setInitSize(final String initSize) { - this.initSize = initSize; - } - - /** - * @return Returns the pstmtMax. - */ - public String getPstmtMax() { - return pstmtMax; - } - - /** - * @param pstmtMax The pstmtMax to set. - */ - public void setPstmtMax(final String pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * @return Returns the pstmtCachePolicy. - */ - public String getPstmtCachePolicy() { - return pstmtCachePolicy; - } - - /** - * @param pstmtCachePolicy The pstmtCachePolicy to set. - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItem.java deleted file mode 100644 index 02e7b1827d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItem.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -public class ResourceItem implements NameItem { - -// --------------------------------------------------------- Properties Variables - - private String path = null; - private String nodeName = null; - private String name = null; - private String file = null; - private String objectName = null; - - -// --------------------------------------------------------- Constructors - - public ResourceItem() { - } - - public ResourceItem(String p_File, String p_Path) { - setPath(p_Path); - setFile(p_File); - } - - public ResourceItem(String p_File, String p_Path, String p_ObjectName, String p_Name) { - setPath(p_Path); - setFile(p_File); - setObjectName(p_ObjectName); - setName(p_Name); - } - - public ResourceItem(String p_File, String p_Path, String p_NodeName, String p_ObjectName, String p_Name) { - setPath(p_Path); - setFile(p_File); - setNodeName(p_NodeName); - setName(p_Name); - setObjectName(p_ObjectName); - } - -// --------------------------------------------------------- Properties Methods - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getNodeName() { - return nodeName; - } - - public void setNodeName(String nodeName) { - this.nodeName = nodeName; - } - - public String getFile() { - return file; - } - - public void setFile(String file) { - this.file = file; - } - - public String getObjectName() { - return objectName; - } - - public void setObjectName(String objectName) { - this.objectName = objectName; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItemByFile.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItemByFile.java deleted file mode 100644 index 9fdc4c4fe8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/resource/ResourceItemByFile.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.resource; - -import java.util.Comparator; - -/** - * @author Michel-Ange ANTON - */ -public class ResourceItemByFile implements Comparator { - -// --------------------------------------------------------- Public Methods - - public int compare(Object pO1, Object pO2) { - ResourceItem oContainer1 = (ResourceItem) pO1; - ResourceItem oContainer2 = (ResourceItem) pO2; - if ((oContainer1.getFile() == null) || (oContainer2.getFile() == null)) { - if ((oContainer1.getFile() == null) && (oContainer2.getFile() == null)) { - return 0; - } else if ((oContainer1.getFile() == null) && (oContainer2.getFile() != null)) { - return 1; - } else { - return -1; - } - } - return oContainer1.getFile().compareToIgnoreCase(oContainer2.getFile()); - } - - public boolean equals(Object pObj) { - if (pObj instanceof ResourceItem) { - return true; - } - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/EditSmartclientServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/EditSmartclientServiceAction.java deleted file mode 100644 index d26894ef7d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/EditSmartclientServiceAction.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.smartclient; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * Implement action for smartclient service management. - * @author S. Ali Tokmen - */ -public class EditSmartclientServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - // Form used - SmartclientServiceForm oForm = (SmartclientServiceForm) form; - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "smartclient", true); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - // Object name used - ObjectName on = JonasObjectName.smartclient(domainName); - oForm.setPort(getIntegerAttribute(on, "Port")); - oForm.setActive(getBooleanAttribute(on, "Active")); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to the jsp. - return (mapping.findForward("Smartclient Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/SmartclientServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/SmartclientServiceForm.java deleted file mode 100644 index 1803d2d3b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/smartclient/SmartclientServiceForm.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.smartclient; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.taglib.LabelValueBean; - -/** - * Implement form for smartclient service management. - * @author S. Ali Tokmen - */ -public class SmartclientServiceForm extends ActionForm { - - private static final long serialVersionUID = 1L; - - private int port = 0; - - private boolean active = false; - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - public int getPort() { - return this.port; - } - - public void setPort(final int port) { - this.port = port; - } - - public boolean isActive() { - return this.active; - } - - public void setActive(final boolean active) { - this.active = active; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/ApplyVersioningConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/ApplyVersioningConfigurationAction.java deleted file mode 100644 index 7afe08dcd0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/ApplyVersioningConfigurationAction.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.versioning; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -/** - * Implement action for versioning service reconfiguration. - * @author Adriana Danes - */ -public class ApplyVersioningConfigurationAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - // Form used - VersioningServiceForm oForm = (VersioningServiceForm) form; - - String domainName = m_WhereAreYou.getCurrentDomainName(); - if (!"apply".equals(oForm.getAction())) { - return null; - } - // Object name used - ObjectName objectName = null; - try { - objectName = JonasObjectName.versioning(domainName); - setStringAttribute(objectName, "DefaultDeploymentPolicy", oForm.getDefaultPolicy()); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward("Global Error")); - } - - // Forward to the jsp. - return (mapping.findForward("Versioning Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/EditVersioningServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/EditVersioningServiceAction.java deleted file mode 100644 index 4385899a00..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/EditVersioningServiceAction.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.versioning; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.taglib.LabelValueBean; - -/** - * Implement action for Versioning service management. - * @author Adriana Danes - */ -public class EditVersioningServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - // Form used - VersioningServiceForm oForm = (VersioningServiceForm) form; - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "versioning", true); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - try { - // Object name used - ObjectName on = JonasObjectName.versioning(domainName); - oForm.setVersioningEnabled(getBooleanAttribute(on, "VersioningEnabled")); - String pServer = m_WhereAreYou.getCurrentJonasServerName(); - List policies = new ArrayList(); - for (String policy : (String[]) JonasManagementRepr.getAttribute(on, "Policies", pServer)) { - policies.add(new LabelValueBean(policy, policy)); - } - oForm.setPolicyList(policies); - oForm.setDefaultPolicy(getStringAttribute(on, "DefaultDeploymentPolicy")); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to the jsp. - return (mapping.findForward("Versioning Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/VersioningServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/VersioningServiceForm.java deleted file mode 100644 index fb38abef37..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/versioning/VersioningServiceForm.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.versioning; - -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.webapp.taglib.LabelValueBean; -/** - * Implement form for Versioning service management. - * @author Adriana Danes - */ -public class VersioningServiceForm extends ActionForm { - - private static final long serialVersionUID = 1L; - - private String action = null; - - private String defaultPolicy = null; - private List policyList = null; - private boolean versioningEnabled = false; - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - } - - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public String getDefaultPolicy() { - return defaultPolicy; - } - - public void setDefaultPolicy(final String defaultPolicy) { - this.defaultPolicy = defaultPolicy; - } - - public boolean isVersioningEnabled() { - return versioningEnabled; - } - - public void setVersioningEnabled(final boolean versioningEnabled) { - this.versioningEnabled = versioningEnabled; - } - - public List getPolicyList() { - return policyList; - } - - public void setPolicyList(final List policyList) { - this.policyList = policyList; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/HandlersDetailsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/HandlersDetailsAction.java deleted file mode 100644 index a36045325f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/HandlersDetailsAction.java +++ /dev/null @@ -1,136 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.JOnASProvider; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.HandlerItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.PortComponentItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.WebServiceDescriptionItem; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Vivek Lakshmanan - */ -public class HandlersDetailsAction extends JonasBaseAction { - - /** - * Handler Details page. - */ - private static final String HANDLERS_DETAILS_FORWARD = "Handlers Details"; - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, - HttpServletRequest p_Request, - HttpServletResponse p_Response) - throws IOException, ServletException { - // Id for the portcomponent selected by the user. - String wsPCId = p_Request.getParameter("pcselect"); - // Selected web service description - String wsdId = p_Request.getParameter("wsdselect"); - // Handler chosen by the user. - String handlerId = p_Request.getParameter("handlerselect"); - - try { - JOnASProvider jonasProvider = new JOnASProvider(m_WhereAreYou.getCurrentJonasServerName()); - WebServiceDescriptionItem wsd = jonasProvider.getWebServiceDescription(wsdId); - PortComponentItem pc = null; - int wsdPortComponentCount = wsd.getPortComponentCount(); - // Find the port component selected by the user. - for (int i = 0; i < wsdPortComponentCount; i++) { - PortComponentItem tmp = (PortComponentItem) wsd.getPortComponent(i); - if (wsPCId.equals(tmp.getName())) { - pc = tmp; - break; - } - } - HandlerItem handler = null; - for (int i = 0; i < pc.getHandlerCount(); i++) { - if (pc.getHandler(i).getName().equals(handlerId)) { - handler = pc.getHandler(i); - } - } - // HashMap to hold parameters for forwards to - // ActionPortComponentsDetails. - HashMap forwardMap = new HashMap(); - forwardMap.put("pcselect", wsPCId); - forwardMap.put("wsdselect", wsdId); - p_Request.setAttribute("paramMap", forwardMap); - - // Create ArrayLists for lists to be displayed about soap - // headers, soap roles and init-params. - ArrayList soapHeaders = new ArrayList(); - for (int i = 0; i < handler.getSoapHeaderCount(); i++) { - soapHeaders.add(handler.getSoapHeader(i).toString()); - } - - ArrayList soapRoles = new ArrayList(); - for (int i = 0; i < handler.getSoapRoleCount(); i++) { - soapRoles.add(handler.getSoapRole(i)); - } - - ArrayList initParams = new ArrayList(); - for (int i = 0; i < handler.getInitParamCount(); i++) { - initParams.add(handler.getInitParam(i)); - } - - p_Request.setAttribute("portComponent", pc); - p_Request.setAttribute("webServiceDescription", wsd); - p_Request.setAttribute("handler", handler); - p_Request.setAttribute("soapHeaders", soapHeaders); - p_Request.setAttribute("soapRoles", soapRoles); - p_Request.setAttribute("initParams", initParams); - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) - + WhereAreYou.NODE_SEPARATOR + "services" - + WhereAreYou.NODE_SEPARATOR + "WebService" - + WhereAreYou.NODE_SEPARATOR + wsd.getName() - + WhereAreYou.NODE_SEPARATOR + pc.getName() - + WhereAreYou.NODE_SEPARATOR + handler.getName(), true); - - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to jsp. - return (p_Mapping.findForward(HANDLERS_DETAILS_FORWARD)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ListWebServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ListWebServiceAction.java deleted file mode 100644 index 73de5a6869..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ListWebServiceAction.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice; - -import java.io.IOException; -import java.util.Collection; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.JOnASProvider; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Vivek Lakshmanan - */ -public class ListWebServiceAction extends JonasBaseAction { - - /** - * WebService Descriptions page. - */ - private static final String WEBSERVICE_DESCRIPTIONS_FORWARD = "WebService Descriptions"; - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, - HttpServletRequest p_Request, - HttpServletResponse p_Response) - throws IOException, ServletException { - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "WebService", true); - - try { - JOnASProvider jonasProvider = new JOnASProvider(m_WhereAreYou.getCurrentJonasServerName()); - Collection wsc = jonasProvider.getWebServiceDescription(); - // Set list in the request. - p_Request.setAttribute("listWebServiceDescription", wsc); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - // Forward to the jsp. - return (p_Mapping.findForward(WEBSERVICE_DESCRIPTIONS_FORWARD)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/PortComponentsDetailsAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/PortComponentsDetailsAction.java deleted file mode 100644 index 36a6590a36..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/PortComponentsDetailsAction.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice; - -import java.io.IOException; -import java.util.HashMap; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.JOnASProvider; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.PortComponentItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.WebServiceDescriptionItem; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Vivek Lakshmanan - */ - -public class PortComponentsDetailsAction extends JonasBaseAction { - - /** - * PortComponents Details page. - */ - private static final String PORT_COMPONENTS_DETAILS_FORWARD = "PortComponents Details"; - - // --------------------------------------------------------- Public Methods - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, - HttpServletRequest p_Request, - HttpServletResponse p_Response) - throws IOException, ServletException { - - // The webservice description selected by the user. - String wsdId = p_Request.getParameter("wsdselect"); - // The port component selected by the user. - String pcId = p_Request.getParameter("pcselect"); - - try { - JOnASProvider jonasProvider = new JOnASProvider(m_WhereAreYou.getCurrentJonasServerName()); - WebServiceDescriptionItem wsd = jonasProvider.getWebServiceDescription(wsdId); - PortComponentItem pc = null; - for (int i = 0; i < wsd.getPortComponentCount(); i++) { - if (wsd.getPortComponent(i).getName().equals(pcId)) { - pc = wsd.getPortComponent(i); - break; - } - } - - // Set the selected description in the request. - p_Request.setAttribute("selectedWebServiceDescription", wsd); - p_Request.setAttribute("selectedPortComponent", pc); - p_Request.setAttribute("implBean", pc.getServiceImplBean()); - HashMap map = new HashMap(); - map.put("wsdselect", wsd.getName()); - map.put("pcselect", pc.getName()); - p_Request.setAttribute("paramMap", map); - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "WebService" + WhereAreYou.NODE_SEPARATOR - + wsd.getName() + WhereAreYou.NODE_SEPARATOR + pc.getName(), true); - } catch (Throwable t) { - addGlobalError(t); - saveErrors(p_Request, m_Errors); - return (p_Mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - // Forward to the jsp. - - return (p_Mapping.findForward(PORT_COMPONENTS_DETAILS_FORWARD)); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ViewHandlersAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ViewHandlersAction.java deleted file mode 100644 index 1be8d5abd1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/ViewHandlersAction.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.JOnASProvider; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.PortComponentItem; -import org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element.WebServiceDescriptionItem; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; - -/** - * @author Vivek Lakshmanan - */ -public class ViewHandlersAction extends JonasBaseAction { - - /** - * Handlers page. - */ - private static final String HANDLERS_FORWARD = "Handlers"; - - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, - HttpServletRequest p_Request, - HttpServletResponse p_Response) - throws IOException, ServletException { - - String wsPCId = p_Request.getParameter("pcselect"); - // Selected web service description - String wsdId = p_Request.getParameter("wsdselect"); - - try { - JOnASProvider jonasProvider = new JOnASProvider(m_WhereAreYou.getCurrentJonasServerName()); - WebServiceDescriptionItem wsd = jonasProvider.getWebServiceDescription(wsdId); - PortComponentItem pc = null; - int wsdPortComponentCount = wsd.getPortComponentCount(); - for(int i = 0; i < wsdPortComponentCount; i++){ - if(wsPCId.equals(((PortComponentItem) wsd.getPortComponent(i)).getName())){ - pc = (PortComponentItem) wsd.getPortComponent(i); - break; - } - } - - ArrayList handlers = new ArrayList(); - for(int i=0; i 0) { - for (Iterator i = webServicesDescriptions.iterator(); i.hasNext();) { - WebServiceDescriptionItem wsd = (WebServiceDescriptionItem) i.next(); - if (wsd.getName().equals(id)) { - webServiceDescription = wsd; - break; - } - } - } else { - throw new Exception("Web Services list is null"); - } - - if (webServiceDescription == null) { - throw new Exception("No Web Service Description found with name=" + id); - } - - return webServiceDescription; - } - - /** - * Reloads information webservice mbeans in jonas into the wsabi4j2ee - * specific constructs. - * - * @throws Exception - */ - private void reload() throws Exception { - ObjectName wsDescriptionON = null; - wsDescriptionON = new ObjectName(ON_WEB_SERVICES); - - webServicesDescriptions.clear(); - Iterator wsDescIter = null; - wsDescIter = JonasManagementRepr.queryNames(wsDescriptionON, serverName).iterator(); - while (wsDescIter.hasNext()) { - ObjectName wsDescIterON = (ObjectName) wsDescIter.next(); - String[] attributes = { "name", "wsdlFilename", "mappingFilename", "portComponents", "wsdlURL" }; - AttributeList attrList = null; - attrList = JonasManagementRepr.getAttributes(wsDescIterON, attributes, serverName); - Map attrMap = convertToHashMap(attrList); - - // Extract port components from attrList. - String[] pcList = (String[]) attrMap.get("portComponents"); - String name = (String) attrMap.get("name"); - Vector portComponents = null; - // Create new port components. - portComponents = createPortComponentList(pcList); - // Create a new web service description. - WebServiceDescriptionItem wsd = new WebServiceDescriptionItem(name, (String) attrMap - .get("wsdlFilename"), (String) attrMap.get("wsdlURL"), (String) attrMap - .get("mappingFilename"), portComponents); - webServicesDescriptions.add(wsd); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Web service description added: " + wsd); - } - - } - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/HandlerItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/HandlerItem.java deleted file mode 100644 index 3fa7abd2e0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/HandlerItem.java +++ /dev/null @@ -1,280 +0,0 @@ -/** - *============================================================================== - * Copyright © 2001-2005 by Allesta, LLC. All rights reserved. - * Copyright (C) 2007 Bull S.A.S. - *============================================================================== - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *============================================================================== - * $Id$ - *============================================================================== - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element; - -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - - -/** - * Declares the handler for a port-component. Handlers can access the init-param - * name/value pairs using the HandlerInfo interface. Used in: port-component - * - * @author Allesta, LLC - */ -public class HandlerItem implements NameItem { - // ~ Instance fields - // ------------------------------------------------------------------ - - private Vector initParams = new Vector(); - - private Vector soapHeaders = new Vector(); - - private Vector soapRoles = new Vector(); - - private String handlerClass = null; - - private String handlerName = null; - - // ~ Constructors - // --------------------------------------------------------------------- - - /** - * Creates a new Handler object. - */ - public HandlerItem(String handlerName, String handlerClass) { - this.handlerName = handlerName; - this.handlerClass = handlerClass; - } - - // ~ Methods - // -------------------------------------------------------------------------- - - /** - * DOCUMENT ME! - * - * @param handlerClass - * DOCUMENT ME! - */ - public void setHandlerClass(String handlerClass) { - this.handlerClass = handlerClass; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getHandlerClass() { - return handlerClass; - } - - /** - * DOCUMENT ME! - * - * @param handlerName - * DOCUMENT ME! - */ - public void setHandlerName(String handlerName) { - this.handlerName = handlerName; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getHandlerName() { - return handlerName; - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * @param initParam - * DOCUMENT ME! - */ - public void setInitParam(int index, InitParamItem initParam) { - if ((initParams.size() == 0) || (index >= initParams.size())) { - initParams.add(initParam); - - return; - } - - this.initParams.insertElementAt(initParam, index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public InitParamItem getInitParam(int index) { - return (InitParamItem) initParams.get(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getInitParamCount() { - return initParams.size(); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * @param soapHeader - * DOCUMENT ME! - */ - public void setSoapHeader(int index, QName soapHeader) { - if ((soapHeaders.size() == 0) || (index >= soapHeaders.size())) { - soapHeaders.add(soapHeader); - - return; - } - - this.soapHeaders.insertElementAt(soapHeader, index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public QName getSoapHeader(int index) { - return (QName) soapHeaders.get(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSoapHeaderCount() { - return soapHeaders.size(); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * @param soapRole - * DOCUMENT ME! - */ - public void setSoapRole(int index, String soapRole) { - if ((soapRoles.size() == 0) || (index >= soapRoles.size())) { - soapRoles.add(soapRole); - - return; - } - - this.soapRoles.insertElementAt(soapRole, index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getSoapRole(int index) { - return (String) soapRoles.get(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getSoapRoleCount() { - return soapRoles.size(); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - */ - public void removeInitParam(int index) { - initParams.remove(index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - */ - public void removeSoapHeader(int index) { - soapHeaders.remove(index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - */ - public void removeSoapRole(int index) { - soapRoles.remove(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - - sb.append(super.toString()); - - if (soapHeaders.size() > 0) { - sb.append("Soap Headers:\n"); - sb.append(soapHeaders); - } - - if (soapRoles.size() > 0) { - sb.append("Soap Roles:\n"); - sb.append(soapRoles); - } - - return sb.toString(); - } - - public String getName() { - return this.handlerName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/InitParamItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/InitParamItem.java deleted file mode 100644 index 65554c24f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/InitParamItem.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - *============================================================================== - * Copyright © 2001-2005 by Allesta, LLC. All rights reserved. - * Copyright (C) 2007 Bull S.A.S. - *============================================================================== - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *============================================================================== - * $Id$ - *============================================================================== - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - -/** - * The init-param element contains a name/value pair as an initialization param - * of the servlet Used in: handler - * - * @author Allesta, LLC - */ -public class InitParamItem implements NameItem { - // ~ Instance fields - // ------------------------------------------------------------------ - - private String name = null; - - private String value = null; - - private String description = null; - - // ~ Constructors - // --------------------------------------------------------------------- - - /** - * Creates a new InitParam object. - */ - public InitParamItem() { - } - - /** - * Creates a new InitParam object. - * - * @param name - * DOCUMENT ME! - * @param value - * DOCUMENT ME! - */ - public InitParamItem(String name, String value) { - this(name, value, null); - } - - /** - * Creates a new InitParam object. - * - * @param name - * DOCUMENT ME! - * @param value - * DOCUMENT ME! - * @param description - * DOCUMENT ME! - */ - public InitParamItem(String name, String value, String description) { - this.name = name; - this.value = value; - this.description = description; - } - - // ~ Methods - // -------------------------------------------------------------------------- - - /** - * DOCUMENT ME! - * - * @param description - * DOCUMENT ME! - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getDescription() { - return description; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getName() { - return name; - } - - /** - * DOCUMENT ME! - * - * @param value - * DOCUMENT ME! - */ - public void setValue(String value) { - this.value = value; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getValue() { - return value; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/PortComponentItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/PortComponentItem.java deleted file mode 100644 index 75b68f28f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/PortComponentItem.java +++ /dev/null @@ -1,243 +0,0 @@ -/** - *============================================================================== - * Copyright © 2001-2005 by Allesta, LLC. All rights reserved. - * Copyright (C) 2007 Bull S.A.S. - *============================================================================== - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *============================================================================== - * $Id$ - *============================================================================== - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element; - -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - - -/** - * The port-component element associates a WSDL port with a Web service - * interface and implementation. It defines the name of the port as a component, - * optional description, optional display name, optional iconic representations, - * WSDL port QName, Service Endpoint Interface, Service Implementation Bean. - * Used in: webservices - * - * @author Allesta, LLC - */ -public class PortComponentItem implements NameItem { - // ~ Instance fields - // ------------------------------------------------------------------ - - private String portComponentName = null; - - private QName wsdlPort = null; - - private String serviceEndpointInterface = null; - - private Vector handlers = new Vector(); - - private String portUrl = null; - - private ServiceImplBean serviceImplBean = null; - - // ~ Constructors - // --------------------------------------------------------------------- - - /** - * Creates a new PortComponent object. - * - * @param portUrl - * TODO - */ - public PortComponentItem(String name, QName wsdlPort, String enpoint, ServiceImplBean serviceImplBean, - String portUrl) { - this.portComponentName = name; - this.wsdlPort = wsdlPort; - this.serviceEndpointInterface = enpoint; - this.serviceImplBean = serviceImplBean; - this.portUrl = portUrl; - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * @param handler - * DOCUMENT ME! - */ - public void setHandler(int index, HandlerItem handler) { - if ((handlers.size() == 0) || (index >= handlers.size())) { - handlers.add(handler); - - return; - } - - handlers.insertElementAt(handler, index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public HandlerItem getHandler(int index) { - return (HandlerItem) handlers.get(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getHandlerCount() { - return handlers.size(); - } - - /** - * DOCUMENT ME! - * - * @param portComponentName - * DOCUMENT ME! - */ - public void setPortComponentName(String portComponentName) { - this.portComponentName = portComponentName; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getPortComponentName() { - return portComponentName; - } - - /** - * DOCUMENT ME! - * - * @param serviceEndpointInterface - * DOCUMENT ME! - */ - public void setServiceEndpointInterface(String serviceEndpointInterface) { - this.serviceEndpointInterface = serviceEndpointInterface; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getServiceEndpointInterface() { - return serviceEndpointInterface; - } - - /** - * DOCUMENT ME! - * - * @param serviceImplBean - * DOCUMENT ME! - */ - public void setServiceImplBean(ServiceImplBean serviceImplBean) { - this.serviceImplBean = serviceImplBean; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public ServiceImplBean getServiceImplBean() { - return serviceImplBean; - } - - /** - * DOCUMENT ME! - * - * @param wsdlPort - * DOCUMENT ME! - */ - public void setWsdlPort(QName wsdlPort) { - this.wsdlPort = wsdlPort; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public QName getWsdlPort() { - return wsdlPort; - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - */ - public void removeHandler(int index) { - handlers.remove(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - - sb.append(super.toString()); - sb.append("portComponentName="); - sb.append(getPortComponentName()); - - sb.append(", wsdlPort="); - sb.append(wsdlPort); - - sb.append(", serviceEndpointInterface="); - sb.append(getServiceEndpointInterface()); - - sb.append(", serviceImplBean="); - sb.append(getServiceImplBean()); - - if (handlers.size() > 0) { - sb.append(", handlers="); - sb.append(handlers); - } - - return sb.toString(); - } - - public String getPortUrl() { - return portUrl; - } - - public void setPortUrl(String portUrl) { - this.portUrl = portUrl; - } - - public String getName() { - return portComponentName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/ServiceImplBean.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/ServiceImplBean.java deleted file mode 100644 index fb154f1e33..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/ServiceImplBean.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - *============================================================================== - * Copyright © 2001-2005 by Allesta, LLC. All rights reserved. - * Copyright (C) 2007 Bull S.A.S. - *============================================================================== - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *============================================================================== - * $Id$ - *============================================================================== - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element; - -/** - * The service-impl-bean element defines the Web service implementation. A - * service implementation can be an EJB bean class or JAX-RPC web component. - * Existing EJB implementations are exposed as a Web service using an ejb-link. - * Used in: port-component! - * - * @author Allesta, LLC - */ -public class ServiceImplBean { - // ~ Static fields/initializers - // ------------------------------------------------------- - - public static final int SERVLET_BEAN = 0; - - public static final int EJB_BEAN = 1; - - // ~ Instance fields - // ------------------------------------------------------------------ - - private int beanType = 0; - - private String implBeanLink = null; - - // ~ Constructors - // --------------------------------------------------------------------- - - /** - * Creates a new ServiceImplBean object. - * - * @param beanType - * DOCUMENT ME! - */ - public ServiceImplBean(int beanType, String implBeanLink) { - this.beanType = beanType; - this.implBeanLink = implBeanLink; - } - - // ~ Methods - // -------------------------------------------------------------------------- - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public boolean isEjbBean() { - return (this.beanType == EJB_BEAN); - } - - /** - * DOCUMENT ME! - * - * @param ejbLink - * DOCUMENT ME! - */ - public void setImplBeanLink(String ejbLink) { - this.implBeanLink = ejbLink; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getImplBeanLink() { - return implBeanLink; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public boolean isServletBean() { - return (this.beanType == SERVLET_BEAN); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/WebServiceDescriptionItem.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/WebServiceDescriptionItem.java deleted file mode 100644 index 7c4ffb2b16..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/webservice/provider/element/WebServiceDescriptionItem.java +++ /dev/null @@ -1,255 +0,0 @@ -/** - *============================================================================== - * Copyright © 2001-2005 by Allesta, LLC. All rights reserved. - * Copyright (C) 2007 Bull S.A.S. - *============================================================================== - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *============================================================================== - * $Id$ - *============================================================================== - */ - -package org.ow2.jonas.webapp.jonasadmin.service.webservice.provider.element; - -import java.util.Vector; - -import org.ow2.jonas.lib.management.extensions.base.NameItem; - - -/** - * The webservice-description element defines a WSDL document file and the set - * of Port components associated with the WSDL ports defined in the WSDL - * document. There may be multiple webservice-descriptions defined within a - * module. All WSDL file ports must have a corresponding port-component element - * defined. - * - * @author Allesta, LLC - */ -public class WebServiceDescriptionItem implements NameItem { - // ~ Instance fields - // ------------------------------------------------------------------ - - private String webServiceDescriptionName = null; - - private String wsdlFile = null; - - private String wsdlUrl = null; - - private String jaxRpcMappingFile = null; - - private Vector portComponents = new Vector(); - - // ~ Constructors - // --------------------------------------------------------------------- - - /** - * Creates a new WebServiceDescription object. - * - * @param name - * DOCUMENT ME! - * @param wsdlFile - * DOCUMENT ME! - * @param wsdlUrl - * TODO - * @param jaxrpcMappingFile - * DOCUMENT ME! - * @param portComponent - * DOCUMENT ME! - */ - public WebServiceDescriptionItem(String name, String wsdlFile, String wsdlUrl, String jaxrpcMappingFile, - PortComponentItem portComponent) { - this.webServiceDescriptionName = name; - this.wsdlFile = wsdlFile; - this.wsdlUrl = wsdlUrl; - this.jaxRpcMappingFile = jaxrpcMappingFile; - this.portComponents.add(portComponent); - } - - /** - * Creates a new WebServiceDescription object. - * - * @param name - * DOCUMENT ME! - * @param wsdlFile - * DOCUMENT ME! - * @param wsdlUrl - * TODO - * @param jaxrpcMappingFile - * DOCUMENT ME! - * @param portComponents - * DOCUMENT ME! - */ - public WebServiceDescriptionItem(String name, String wsdlFile, String wsdlUrl, String jaxrpcMappingFile, - Vector portComponents) { - this.webServiceDescriptionName = name; - this.wsdlFile = wsdlFile; - this.wsdlUrl = wsdlUrl; - this.jaxRpcMappingFile = jaxrpcMappingFile; - this.portComponents = portComponents; - } - - // ~ Methods - // -------------------------------------------------------------------------- - - /** - * DOCUMENT ME! - * - * @param jaxrpcMappingFile - * DOCUMENT ME! - */ - public void setJaxRpcMappingFile(String jaxrpcMappingFile) { - this.jaxRpcMappingFile = jaxrpcMappingFile; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getJaxRpcMappingFile() { - return jaxRpcMappingFile; - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * @param portComponent - * DOCUMENT ME! - */ - public void setPortComponent(int index, PortComponentItem portComponent) { - if ((portComponents.size() == 0) || (index >= portComponents.size())) { - portComponents.add(portComponent); - - return; - } - - portComponents.insertElementAt(portComponent, index); - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public PortComponentItem getPortComponent(int index) { - return (PortComponentItem) portComponents.get(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public int getPortComponentCount() { - return portComponents.size(); - } - - /** - * DOCUMENT ME! - * - * @param webserviceDescriptionName - * DOCUMENT ME! - */ - public void setWebServiceDescriptionName(String webserviceDescriptionName) { - this.webServiceDescriptionName = webserviceDescriptionName; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getWebServiceDescriptionName() { - return webServiceDescriptionName; - } - - /** - * DOCUMENT ME! - * - * @param wsdlFile - * DOCUMENT ME! - */ - public void setWsdlFile(String wsdlFile) { - this.wsdlFile = wsdlFile; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String getWsdlFile() { - return wsdlFile; - } - - /** - * DOCUMENT ME! - * - * @param index - * DOCUMENT ME! - */ - public void removePortComponent(int index) { - portComponents.remove(index); - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - - sb.append(super.toString()); - sb.append("webServiceDescriptionName="); - sb.append(getWebServiceDescriptionName()); - - if (getWsdlFile() != null) { - sb.append(", "); - sb.append("wsdlFile="); - sb.append(getWsdlFile()); - } - - if (getJaxRpcMappingFile() != null) { - sb.append(", "); - sb.append("jaxRpcMappingFile="); - sb.append(getJaxRpcMappingFile()); - } - - sb.append(", portComponents="); - sb.append(portComponents); - - return sb.toString(); - } - - public String getWsdlUrl() { - return wsdlUrl; - } - - public void setWsdlUrl(String wsdlUrl) { - this.wsdlUrl = wsdlUrl; - } - - public String getName() { - return this.webServiceDescriptionName; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/ApplyWorkcleanerConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/ApplyWorkcleanerConfigurationAction.java deleted file mode 100644 index f3f790a849..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/ApplyWorkcleanerConfigurationAction.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service.workcleaner; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Implement action for WC service reconfiguration. - * @author Adriana Danes - */ -public class ApplyWorkcleanerConfigurationAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - ObjectName serviceOn = JonasObjectName.workCleaner(domainName); - WorkcleanerServiceForm oForm = (WorkcleanerServiceForm) form; - String sAction = oForm.getAction(); - int period = oForm.getPeriod(); - if ("apply".equals(sAction)) { - // Configure period - setIntegerAttribute(serviceOn, "executePeriod", period); - } else if ("execute".equals(sAction)) { - // Execute clean tasks - String operation = "executeTasks"; - JonasManagementRepr.invoke(serviceOn, operation, null, null, serverName); - } else if ("save".equals(sAction)) { - JonasManagementRepr.invoke(serviceOn, "saveConfig", null, null, serverName); - } - // Forward to the jsp. - return (mapping.findForward("Workcleaner Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/EditWorkcleanerServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/EditWorkcleanerServiceAction.java deleted file mode 100644 index e065b04a32..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/EditWorkcleanerServiceAction.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service.workcleaner; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -/** - * Implement action for WC service management. - * @author Adriana Danes - */ -public class EditWorkcleanerServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - // Form used - WorkcleanerServiceForm oForm = (WorkcleanerServiceForm) form; - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "workcleaner", true); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - // Object name used - ObjectName objectName = JonasObjectName.workCleaner(domainName); - int period = getIntAttribute(objectName, "executePeriod"); - oForm.setPeriod(period); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to the jsp. - return (mapping.findForward("Workcleaner Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/WorkcleanerServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/WorkcleanerServiceForm.java deleted file mode 100644 index 6b87868959..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workcleaner/WorkcleanerServiceForm.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service.workcleaner; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -/** - * Implement form for WC service management. - * @author Adriana Danes - */ -public class WorkcleanerServiceForm extends ActionForm { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private String action = null; - - private int period = 0; - - public String getAction() { - return action; - } - - public void setAction(final String action) { - this.action = action; - } - - public int getPeriod() { - return period; - } - - public void setPeriod(final int period) { - this.period = period; - } - - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - this.period = 0; - } - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/ApplyWorkmanagerConfigurationAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/ApplyWorkmanagerConfigurationAction.java deleted file mode 100644 index 7778bc2a12..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/ApplyWorkmanagerConfigurationAction.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.service.workmanager; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; - -/** - * Implement action for WM service reconfiguration. - * @author Adriana Danes - */ -public class ApplyWorkmanagerConfigurationAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - String domainName = m_WhereAreYou.getCurrentDomainName(); - String jonasServerName = m_WhereAreYou.getCurrentJonasServerName(); - - ObjectName serviceOn = JonasObjectName.workManager(domainName); - WorkmanagerServiceForm oForm = (WorkmanagerServiceForm) form; - String sAction = oForm.getAction(); - if ("apply".equals(sAction)) { - setIntegerAttribute(serviceOn, "minPoolSize", oForm.getMinPoolSize()); - setIntegerAttribute(serviceOn, "maxPoolSize", oForm.getMaxPoolSize()); - } - - if (oForm.getAction().equals("save")) { - JonasManagementRepr.invoke(serviceOn, "saveConfig", null, null, jonasServerName); - } - - // Forward to the jsp. - return (mapping.findForward("Workmanager Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/EditWorkmanagerServiceAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/EditWorkmanagerServiceAction.java deleted file mode 100644 index 5c846c142c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/EditWorkmanagerServiceAction.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.service.workmanager; - -import java.io.IOException; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -public class EditWorkmanagerServiceAction extends JonasBaseAction { - - @Override - public ActionForward executeAction(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, - final HttpServletResponse response) throws IOException, ServletException { - - // Form used - WorkmanagerServiceForm oForm = (WorkmanagerServiceForm) form; - - // Force the node selected in tree - m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER) + WhereAreYou.NODE_SEPARATOR - + "services" + WhereAreYou.NODE_SEPARATOR + "workmanager", true); - - String domainName = m_WhereAreYou.getCurrentDomainName(); - - try { - // Object name used - ObjectName objectName = JonasObjectName.workManager(domainName); - int poolSize = getIntAttribute(objectName, "currentPoolSize"); - oForm.setCurrentPoolSize(poolSize); - poolSize = getIntAttribute(objectName, "minPoolSize"); - oForm.setMinPoolSize(poolSize); - poolSize = getIntAttribute(objectName, "maxPoolSize"); - oForm.setMaxPoolSize(poolSize); - } - catch (Throwable t) { - addGlobalError(t); - saveErrors(request, m_Errors); - return (mapping.findForward(GLOBAL_ERROR_FORWARD)); - } - - // Forward to the jsp. - return (mapping.findForward("Workmanager Service")); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/WorkmanagerServiceForm.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/WorkmanagerServiceForm.java deleted file mode 100644 index 38075685d9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/service/workmanager/WorkmanagerServiceForm.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.ow2.jonas.webapp.jonasadmin.service.workmanager; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionErrors; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; - -public class WorkmanagerServiceForm extends ActionForm { - - /** - * - */ - private static final long serialVersionUID = 1L; - - private String action = null; - - private int minPoolSize = 0; - private int maxPoolSize = 0; - private int currentPoolSize = 0; - - public int getMinPoolSize() { - return minPoolSize; - } - public void setMinPoolSize(final int minPoolSize) { - this.minPoolSize = minPoolSize; - } - public int getMaxPoolSize() { - return maxPoolSize; - } - public void setMaxPoolSize(final int maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - public int getCurrentPoolSize() { - return currentPoolSize; - } - public void setCurrentPoolSize(final int currentPoolSize) { - this.currentPoolSize = currentPoolSize; - } - /** - * Reset all properties to their default values. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public void reset(final ActionMapping mapping, final HttpServletRequest request) { - minPoolSize = 0; - maxPoolSize = 0; - currentPoolSize = 0; - } - /** - * Validate the properties that have been set from this HTTP request, - * and return an ActionErrors object that encapsulates any - * validation errors that have been found. If no errors are found, return - * null or an ActionErrors object with no - * recorded error messages. - * - * @param mapping The mapping used to select this instance - * @param request The servlet request we are processing - */ - @Override - public ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) { - return new ActionErrors(); - // TO DO voir DatasourceForm - } - public String getAction() { - return action; - } - public void setAction(final String action) { - this.action = action; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ApplyArchiveConfigAction.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ApplyArchiveConfigAction.java deleted file mode 100644 index 8d8cda01db..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/ApplyArchiveConfigAction.java +++ /dev/null @@ -1,422 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.Map; - -import javax.management.ObjectName; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionForward; -import org.apache.struts.action.ActionMapping; -import org.apache.struts.action.ActionMessage; - -import org.ow2.jonas.lib.management.extensions.base.JonasManagementRepr; -import org.ow2.jonas.lib.util.XMLSerializer; -import org.ow2.jonas.webapp.jonasadmin.JonasAdminJmx; -import org.ow2.jonas.webapp.jonasadmin.JonasBaseAction; -import org.ow2.jonas.webapp.jonasadmin.xml.xs.ElementRestrictions; -import org.ow2.jonas.webapp.jonasadmin.xml.xs.SchemaRestrictions; -import org.ow2.jonas.webapp.jonasadmin.xml.xs.SchemaRestrictionsFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.EntityResolver; - -/** - * Action to process the input when either the advanced or the form view of the - * archive configuration feature is submitted. - * - * If the user selected the 'Apply' button the action validates and saves the - * updated deployment descriptor. - * - * If the user selected the 'Switch to Form/Advanced" the input is validated - * updated in the form and the user is forwarded to the other view. - * - * @author Patrick Smith - * @author Gregory Lapouchnian - */ -public class ApplyArchiveConfigAction extends JonasBaseAction { - - /** - * Executes the struts action. - * - * @param p_Mapping the struts action mapping. - * @param p_Form the struts action form. - * @param p_Request the HttpServletRequest. - * @param p_Response the HttpServletResponse. - * @throws IOException - * @throws ServletException - * @return the action forward to forward to. - */ - public ActionForward executeAction(ActionMapping p_Mapping, - ActionForm p_Form, HttpServletRequest p_Request, - HttpServletResponse p_Response) throws IOException, - ServletException { - - // Form used - ArchiveConfigForm oForm = (ArchiveConfigForm) p_Form; - - // Current JOnAS server - String serverName = m_WhereAreYou.getCurrentJonasServerName(); - String domainName = m_WhereAreYou.getCurrentDomainName(); - /** - * Where the user should be forwarded to display the confirmation page. - */ - String confirmForward = "Archive Config Confirm"; - /** - * Where the user should be returned to when an error occurs. - */ - String currentPageForward = getCurrentPageForward(oForm); - /** - * Where the user should be forwarded to in case of switching views. - */ - String switchForward = getSwitchForward(oForm); - - /** - * The forward to the archive selection page. - */ - String selectForward = "Archive Config Select"; - - // if the operation was cancelled - if (oForm.getCancel() != null) { - oForm.setCancel(null); - return (p_Mapping.findForward(selectForward)); - } - - try { - if (oForm.getConfigType() == ArchiveConfigForm.FORM) { - processFormInput(oForm, p_Mapping, p_Request, domainName, serverName); - } else { - processTextAreaInput(oForm, p_Mapping, p_Request, domainName, serverName); - } - } catch (Exception e) { - return reportError(currentPageForward, oForm, "An error occured when procesing the input. " + e.getMessage(), - p_Mapping, p_Request); - } - - // if we are switching to another view we don't try to save the document - if (oForm.getSwitchTo() != null) { - - // reset the switch button value - oForm.setSwitchTo(null); - - return (p_Mapping.findForward(switchForward)); - } - - // reset the submit button value - oForm.setSubmit(null); - - - try { - saveChanges(oForm, domainName, serverName); - } catch (Exception e) { - return reportError(currentPageForward, oForm, "An error occured when trying to save changed. " + e.getMessage(), - p_Mapping, p_Request); - } - - - // Forward to the confirm jsp. - return (p_Mapping.findForward(confirmForward)); - } - - private void processFormInput(ArchiveConfigForm oForm, - ActionMapping p_Mapping, HttpServletRequest p_Request, String domainName, String serverName) - throws Exception { - // used to keep track of added and removed elements while processing - // form input - ArrayList addedList = new ArrayList(); - ArrayList removedList = new ArrayList(); - - Map mappings = oForm.getMapping(); - Map values = oForm.getValuesMap(); - - Iterator i = values.keySet().iterator(); - while (i.hasNext()) { - - String key = (String) i.next(); - - if (mappings.containsKey(key)) { - Node node = ((Node) mappings.get(key)); - - // wasn't removed, just need to update the values - if (!values.containsKey(key + "-removed")) { - node.setNodeValue((String) values.get(key)); - } else { // this node was removed by the user - node.getParentNode().removeChild(node); - removedList.add(key); - } - - } else if (values.containsKey(key + "-parent")) { - String parentID = (String) values.get(key + "-parent"); - String name = (String) values.get(key + "-name"); - SchemaRestrictions restrictions = (new SchemaRestrictionsFactory()) - .getSchemaRestrictions(SchemaRestrictions.RAR_TYPE); - - - Node parentNode = (Node) mappings.get(parentID); - // if we need to insert the child in a specific location - ElementRestrictions er = restrictions - .getElementRestrictions(parentNode - .getNodeName()); - - Element newElement = ((Document) oForm.getDocument()) - .createElementNS(parentNode.getNamespaceURI(), name); - if (!restrictions.getComplexElements().contains(name)) { - newElement.appendChild(oForm.getDocument() - .createTextNode((String) values.get(key))); - } - - if (er.isSequence()) { - int elIndex = er.getChildren().indexOf(newElement.getNodeName()); - - if(parentNode.getChildNodes().getLength() == 0 || elIndex == er.getChildren().size()) { - parentNode.appendChild(newElement); - } - else { - int insertionIndex = findInsertionIndex(er, parentNode.getChildNodes(), newElement); - - if(insertionIndex < 0) { - parentNode.appendChild(newElement); - } - else { - String insertBefore = (String)er.getChildren().get(insertionIndex); - for(int j = 0; j < parentNode.getChildNodes().getLength(); j++) { - Node current = parentNode.getChildNodes().item(j); - if (current.getNodeName().equals(insertBefore)) { - parentNode.insertBefore(newElement, current); - break; - } - } - } - } - } - else { - // not a sequence, we can simply append - parentNode.appendChild(newElement); - } - mappings.put(key, newElement); - addedList.add(key); - } - // else nothing to update for this key. - } - - // Remove the '-parent' and '-name' keys and values of the - // elements that have been added to the document. - for (int k = 0; k < addedList.size(); k++) { - values.remove(addedList.get(k) + "-parent"); - values.remove(addedList.get(k) + "-name"); - } - - // Remove the '-removed' keys and values of the elements - // that have been removed from the document. - for (int k = 0; k < removedList.size(); k++) { - values.remove(removedList.get(k) + "-removed"); - } - - // remove occurences of that appear after serializing - // the document - String xml = serializeDocument(oForm.getDocument()); - xml = xml.replaceAll(" ", ""); - // update the value of the raw XML in the form - oForm.setXml(xml); - - validateDocument(oForm.getDocument(), domainName, serverName); - } - - private int findInsertionIndex(ElementRestrictions er, NodeList list, Element newElement) { - ArrayList a = new ArrayList(); - for(int i = 0; i < list.getLength(); i++) { - if(list.item(i).getNodeType() == Node.ELEMENT_NODE) { - a.add(new Integer(er.getChildren().indexOf(list.item(i).getNodeName()))); - } - } - Integer newIndex = new Integer(er.getChildren().indexOf(newElement.getNodeName())); - a.add(newIndex); - - Collections.sort(a); - int result = a.indexOf(newIndex); - if(result == a.size()-1) - return -1; - else - return ((Integer)a.get(result+1)).intValue(); - } - - /** - * Save the modified document. - * @param oForm the Struts from which stores the document. - */ - private void saveChanges(ArchiveConfigForm oForm, String domainName, String serverName) throws Exception { - // we are not switching views, but want to save the changes - ObjectName on = JonasAdminJmx.getRarConfigObjectName(domainName, serverName); - - Object[] params = new Object[] { oForm.getArchiveName(), - oForm.getPathName(), - oForm.getDocument() }; - - String[] sig = new String[] { "java.lang.String", - "java.lang.String", - "org.w3c.dom.Document" }; - - JonasManagementRepr.invoke(on, "saveXML", params, sig, serverName); - } - - /** - * Processes the updated XML passed from the
"); - } - sb.append("</" + name + ">"); - sb - .append(""); - sb.append(""); - - return sb.toString(); - } - - /** - * Determine what size of input field to use for the given value of a ndoe. - * - * @param lengthOfValue - * the length of the Node's value - * @return the length of the value if it is less than MAX_INPUT_FIELD_SIZE - * or MAX_INPUT_FIELD_SIZE otherwise - */ - private int getSize(int lengthOfValue) { - if (lengthOfValue < MAX_INPUT_FIELD_SIZE) { - return lengthOfValue; - } else { - return MAX_INPUT_FIELD_SIZE; - } - } - - /** - * Create the HTML to display the attributes of a Node. - * - * @param nodeName - * the name of the node - * @param nodeID - * the ID of the node (from the mapping) - * @param attrs - * the set attributes - * @param i - * the index into the set of attributes - * @param mapping - * the mapping of IDs to Nodes within the tree - * @return HTML to display attributes for this node - */ - private String attributesToForm(String nodeName, int nodeID, - NamedNodeMap attrs, int i, Map mapping) { - StringBuffer sb = new StringBuffer(); - - sb.append(""); - if (i == 0) { - sb.append("- <" + nodeName - + " "); - } - int id = getNextID(); - - sb.append(attrs.item(i).getNodeName()); - sb.append(" = \"\n"); - sb.append("\""); - - // if this is the last attribute - if (i == attrs.getLength() - 1) { - sb.append(">"); - } - - sb.append("\n"); - return sb.toString(); - } - - /** - * Get the next ID to use for the node. - * - * @return the next ID - */ - private int getNextID() { - int result = currentID; - currentID++; - return result; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/AttributeRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/AttributeRestrictions.java deleted file mode 100644 index abba528a6f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/AttributeRestrictions.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs; - -/** - * Interface for attribute restrictions from schema files. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public interface AttributeRestrictions { - - /** - * Get the fixed string for this attribute. - * @return the fixed string for this attribute. - */ - String getFixed(); - - /** - * Sets the fixed string for this attribute - * @param fixed the fixed string for this attribute. - */ - void setFixed(String fixed); - - /** - * If this attribute is optional. - * @return true if this element is optional, false otherwise. - */ - boolean isOptional(); - - /** - * Sets if this attribute is optional - * @param isOptional the value to set. - */ - void setOptional(boolean isOptional); - - /** - * the name of this attribute. - * @return the name of this attribute. - */ - String getName(); - - /** - * Sets the name of this attribute. - * @param name the name to set. - */ - void setName(String name); -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/ElementRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/ElementRestrictions.java deleted file mode 100644 index 648895991e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/ElementRestrictions.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server Copyright (C) 2005 Bull S.A. Contact: - * jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs; - -import java.util.List; - -/** - * An interface to represent the element restrictions of a schema. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public interface ElementRestrictions { - - /** - * Return if this element is simple with no attributes - * @return true if this element is a simple element and has no attributes. - */ - boolean isSimpleAndNoAttributes(); - - /** - * Returns the list of children - * @return the list of children. - */ - List getChildren(); - - /** - * Sets the list of children to the given list. - * @param children the list of children. - */ - void setChildren(List children); - - /** - * Is this element a sequence? - * @return true if this element is a sequence. - */ - boolean isSequence(); - - /** - * Sets if this element is a sequence. - * @param isSequence the value to set. - */ - void setSequence(boolean isSequence); - - /** - * Returns if this element is complex. - * @return true if this element is complex. - */ - boolean isComplex(); - - /** - * sets if this element is complex. - * @param isComplex the value to set. - */ - void setComplex(boolean isComplex); - - /** - * Gets the name of this element - * @return the name of this element. - */ - String getName(); - - /** - * sets the name of this element - * @param name the value to set. - */ - void setName(String name); - - /** - * Return the list of attributes for this element. - * @return the list of attributes for this element. - */ - List getAttributes(); - - /** - * Sets the list of attributes for this element. - * @param attributes the value to set. - */ - void setAttributes(List attributes); - - /** - * Get the min occurances of this element. - * @return the min occurances of this element. - */ - int getMinOccurs(); - - /** - * Sets the min occurrances for this element. - * @param min the min occurrances for this element. - */ - void setMinOccurs(int min); - - /** - * return the max occurrances for this element. - * @return the max occurances for this element. - */ - int getMaxOccurs(); - - /** - * Sets the max occurances for this element. - * @param min the value to set. - */ - void setMaxOccurs(int min); -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictions.java deleted file mode 100644 index c6717a098f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictions.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs; - -import java.util.Set; - -/** - * An interface to represent the schema restrictions from a schema. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public interface SchemaRestrictions { - - /** A rar typed archive */ - static int RAR_TYPE = 0; - - /** A war typed archive. */ - static int WAR_TYPE = 1; - - /** A jar typed archive. */ - static int JAR_TYPE = 2; - - /** An ear typed archive. */ - static int EAR_TYPE = 3; - - /** - * Returns if the element given by name has an element restriction - * @param name the name of the element to check. - * @return if the element given by name has an element restriction. - */ - boolean hasElementRestrictions(String name); - - /** - * Returns the element restrictions for the element given by name. - * @param name the element to get the restrictions for. - * @return the element restrictions for the element given by name. - */ - ElementRestrictions getElementRestrictions(String name); - - /** - * Returns a set of the complex elements from this schema. - * @return a set of the complex elements from this schema. - */ - Set getComplexElements(); - - //public String getElementDocumentation(String name); -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictionsFactory.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictionsFactory.java deleted file mode 100644 index 8644d96d1b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/SchemaRestrictionsFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server Copyright (C) 2005 Bull S.A. Contact: - * jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.webapp.jonasadmin.xml.xs; - -import org.ow2.jonas.webapp.jonasadmin.xml.xs.hardcoded.HCSchemaRestrictions; - -/** - * A factory to create a schema restriction implementation. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public class SchemaRestrictionsFactory { - - /** - * Return a new implementation of a schema restriction. - * @param type the type of archive. - * @return an instance of an implementation of schema restriction. - */ - public SchemaRestrictions getSchemaRestrictions(int type) { - return new HCSchemaRestrictions(type); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCAttributeRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCAttributeRestrictions.java deleted file mode 100644 index 822a344340..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCAttributeRestrictions.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs.hardcoded; - -import org.ow2.jonas.webapp.jonasadmin.xml.xs.AttributeRestrictions; - -/** - * An implementation of HCAttributeRestrictions where the restrictions are not - * retrieved from the schema but hard coded inside the class. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public class HCAttributeRestrictions implements AttributeRestrictions { - - /** The name of this attribute */ - private String name; - - /** If this attribute is optional */ - private boolean isOptional; - - /** The fixed value for this attribute. */ - private String fixed; - - /** - * Create a new hardcoded attribute restriction - * @param name the name of this attribute - * @param optional is this attribute optional - * @param fixed the fixed value for this attribute - */ - public HCAttributeRestrictions(String name, boolean optional, String fixed) { - this.name = name; - this.isOptional = optional; - this.fixed = fixed; - } - - /** - * Get the fixed value for this attribute. - * @return the fixed value for this attribute. - */ - public String getFixed() { - return fixed; - } - - /** - * Sets the fixed value for this attribute. - * @param fixed the fixed value for this attribute. - */ - public void setFixed(String fixed) { - this.fixed = fixed; - } - - /** - * Returns if this attribute is optional. - * @return if this attribute is optional or not. - */ - public boolean isOptional() { - return isOptional; - } - - /** - * Sets if this attribute is optional. - * @param isOptional if this attribute is optional. - */ - public void setOptional(boolean isOptional) { - this.isOptional = isOptional; - } - - /** - * Return the name of the attribute. - * @return the element of this attribute. - */ - public String getName() { - return name; - } - - /** - * Sets the name of this element. - * @param name the name of this element. - */ - public void setName(String name) { - this.name = name; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCElementRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCElementRestrictions.java deleted file mode 100644 index e7f6082f31..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCElementRestrictions.java +++ /dev/null @@ -1,199 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs.hardcoded; - -import java.util.List; - -import org.ow2.jonas.webapp.jonasadmin.xml.xs.ElementRestrictions; - - -/** - * Represents schema restrictions for a single element. The restrictions are - * hard coded. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -/** - * @author pasmith - * - * TODO To change the template for this generated type comment go to - * Window - Preferences - Java - Code Style - Code Templates - */ -public class HCElementRestrictions implements ElementRestrictions { - - /** The name of the element. */ - private String name; - - /** is this element complex */ - private boolean isComplex = false; - - /** is this element a sequence */ - private boolean isSequence = false; - - /** The children of this element. */ - private List children; - - /** The attributes of this element.*/ - private List attributes; - - /** - * Makes a new Hard coded element restriction. - * @param name the name of the element. - * @param complex is this element complex. - * @param children the children of this element. - * @param attrs the attributes of this element. - */ - public HCElementRestrictions(String name, boolean complex, List children, - List attrs) { - this.name = name; - this.isComplex = complex; - this.children = children; - this.attributes = attrs; - } - - /** - * Is this element a simple type with no attributes. - * @return true if this element is simple with no attributes, false otherwise. - */ - public boolean isSimpleAndNoAttributes() { - return (children == null && attributes == null); - } - - /** - * Returns a list of children for this element. - * @return a list of children for this element. - */ - public List getChildren() { - return children; - } - - /** - * Set the list of children for this element. - * @param children the list of children for this element. - */ - public void setChildren(List children) { - if (isComplex()) { - this.children = children; - } - } - - /** - * Is this element complex. - * @return true if this element is complex. - */ - public boolean isComplex() { - return isComplex; - } - - /** - * Sets if this element is complex or not. - * @param isComplex if this element is complex or not. - */ - public void setComplex(boolean isComplex) { - this.isComplex = isComplex; - } - - /** - * Returns the name of this element - * @return the name of this element. - */ - public String getName() { - return name; - } - - /** - * sets the name of this element. - * @param name the name of this element. - */ - public void setName(String name) { - this.name = name; - } - - /** - * Returns the list of attributes for this element. - * @return the list of attributes for this element. - */ - public List getAttributes() { - return attributes; - } - - /** - * Sets the list of elements for this element. - * @param attributes the list of attributs to set for this element. - */ - public void setAttributes(List attributes) { - this.attributes = attributes; - } - - /** - * Returns the min occurances for this element. - * @return the min occurances for this element. - */ - public int getMinOccurs() { - return 0; - } - - /** - * Sets the min occurances for this element. - * @param min the min occurances for this element. - */ - public void setMinOccurs(int min) { - // TODO Auto-generated method stub - } - - /** - * Returns the max occurances for this element. - * @return the max occurances for this element. - */ - public int getMaxOccurs() { - return 0; - } - - /** - * Sets the max occurances for this element. - * @param min the max occurances for this element. - */ - public void setMaxOccurs(int min) { - // TODO Auto-generated method stub - } - - /** - * Returns if this element is a sequence or not. - * @return true if this element is a sequence. - */ - public boolean isSequence() { - return isSequence; - } - - /** - * Sets if this element is a sequence. - * @param isSequence the value to set if this element is a sequence. - */ - public void setSequence(boolean isSequence) { - this.isSequence = isSequence; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCSchemaRestrictions.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCSchemaRestrictions.java deleted file mode 100644 index 1ce0e9364f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/jonasadmin/xml/xs/hardcoded/HCSchemaRestrictions.java +++ /dev/null @@ -1,520 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.jonasadmin.xml.xs.hardcoded; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; - -import org.ow2.jonas.webapp.jonasadmin.xml.xs.ElementRestrictions; -import org.ow2.jonas.webapp.jonasadmin.xml.xs.SchemaRestrictions; - - -/** - * An implementation of SchemaRestrictions where the restrictions are not - * retrieved from the schema but hard coded inside the class. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public class HCSchemaRestrictions implements SchemaRestrictions { - - /** The elements of this schema restriction. */ - private HashMap elements; - - /** - * Create a new hard coded schema restriction. - * @param documentType the document type. - */ - public HCSchemaRestrictions(int documentType) { - elements = new HashMap(); - - if (documentType == RAR_TYPE) { - populateJonasConnectorXSD(); - populateConnectorXSD(); - } - } - - /** - * Populate the connector XSD restrictions. - */ - protected void populateConnectorXSD() { - populateConfigProperty(); - populateResourceAdapter(); - populateConnector(); - populateOutboundResourceAdapter(); - populateInboundResourceAdapter(); - populateLicense(); - populateConnectionDefinition(); - populateAuthenticationMechanism(); - populateMessageAdapter(); - populateMessageListener(); - populateActivationSpec(); - populateRequiredConfigProperty(); - } - - /** - * populate the jonas connector xsd restrictions. - */ - protected void populateJonasConnectorXSD() { - populateJonasConnector(); - populatePoolParams(); - populateJdbcConnParams(); - populateTmParams(); - populateTmConfigProperty(); - populateJonasConfigProperty(); - populateJonasConnectionDefinition(); - populateJonasActivationSpec(); - populateJonasAdminObject(); - populateJonasSecurityMapping(); - populateSecurityEntry(); - } - - /** - * Populate the jonas connector restrictions - * - */ - protected void populateJonasConnector() { - List children = new ArrayList(); - children.add("jndi-name"); - children.add("rarlink"); - children.add("native-lib"); - children.add("log-enabled"); - children.add("log-topic"); - children.add("pool-params"); - children.add("jdbc-conn-params"); - children.add("tm-params"); - children.add("jonas-config-property"); - children.add("jonas-connection-definition"); - children.add("jonas-activationspec"); - children.add("jonas-adminobject"); - children.add("jonas-security-mapping"); - ElementRestrictions el = new HCElementRestrictions("jonas-connector", - true, children, null); - el.setSequence(true); - elements.put("jonas-connector", el); - } - - /** - * Populate the poolparams restrictions - * - */ - protected void populatePoolParams() { - List children = new ArrayList(); - children.add("pool-init"); - children.add("pool-min"); - children.add("pool-max"); - children.add("pool-max-age"); - children.add("pool-max-age-minutes"); - children.add("pstmt-max"); - children.add("pool-max-opentime"); - children.add("pool-max-waiters"); - children.add("pool-max-waittime"); - children.add("pool-sampling-period"); - ElementRestrictions el = new HCElementRestrictions("pool-params", true, - children, null); - el.setSequence(true); - elements.put("pool-params", el); - } - - /** - * Populate the jdbc-conn-params restrictions - * - */ - protected void populateJdbcConnParams() { - List children = new ArrayList(); - children.add("jdbc-check-level"); - children.add("jdbc-test-statement"); - ElementRestrictions el = new HCElementRestrictions("jdbc-conn-params", - true, children, null); - el.setSequence(true); - elements.put("jdbc-conn-params", el); - } - - /** - * Populate the tm-params restrictions - * - */ - protected void populateTmParams() { - List children = new ArrayList(); - children.add("tm-config-property"); - ElementRestrictions el = new HCElementRestrictions("tm-params", true, - children, null); - el.setSequence(true); - elements.put("tm-params", el); - } - - /** - * Populate the tm-config-property restrictions - * - */ - protected void populateTmConfigProperty() { - List children = new ArrayList(); - children.add("tm-config-property-name"); - children.add("tm-config-property-value"); - ElementRestrictions el = new HCElementRestrictions( - "tm-config-property", true, children, null); - el.setSequence(true); - elements.put("tm-config-property", el); - } - - /** - * Populate the jonas-config-property restrictions - * - */ - protected void populateJonasConfigProperty() { - List children = new ArrayList(); - children.add("jonas-config-property-name"); - children.add("jonas-config-property-value"); - ElementRestrictions el = new HCElementRestrictions( - "jonas-config-property", true, children, null); - el.setSequence(true); - elements.put("jonas-config-property", el); - } - - /** - * Populate the jonas-connection-definition restrictions - * - */ - protected void populateJonasConnectionDefinition() { - List children = new ArrayList(); - children.addAll(populateConfigurationGroup()); - children.add("log-enabled"); - children.add("log-topic"); - children.add("pool-params"); - children.add("jdbc-conn-params"); - ElementRestrictions el = new HCElementRestrictions( - "jonas-connection-definition", true, children, null); - el.setSequence(true); - elements.put("jonas-connection-definition", el); - } - - /** - * Populate the jonas-activationspec restrictions - * - */ - protected void populateJonasActivationSpec() { - List children = new ArrayList(); - children.addAll(populateIdGroup()); - children.add("defaultAS"); - ElementRestrictions el = new HCElementRestrictions( - "jonas-activationspec", true, children, null); - el.setSequence(true); - elements.put("jonas-activationspec", el); - } - - /** - * Populate the configurationgroup restrictions - * @return the configuration group list - */ - protected List populateConfigurationGroup() { - List children = new ArrayList(); - children.addAll(populateIdGroup()); - children.add("jonas-config-property"); - return children; - } - - /** - * Populate the idgroup restrictions - * @return the idgroup list - */ - protected List populateIdGroup() { - List children = new ArrayList(); - children.add("id"); - children.add("description"); - children.add("jndi-name"); - return children; - } - - /** - * Populate the jonas-adminobject restrictions - * - */ - protected void populateJonasAdminObject() { - List children = new ArrayList(); - children.addAll(populateConfigurationGroup()); - ElementRestrictions el = new HCElementRestrictions("jonas-adminobject", - true, children, null); - elements.put("jonas-adminobject", el); - } - - /** - * Populate the jonas-security-mapping restrictions - * - */ - protected void populateJonasSecurityMapping() { - List children = new ArrayList(); - children.add("security-entry"); - ElementRestrictions el = new HCElementRestrictions( - "jonas-security-mapping", true, children, null); - el.setSequence(true); - elements.put("jonas-security-mapping", el); - } - - /** - * Populate the security-entry restrictions - * - */ - protected void populateSecurityEntry() { - List children = new ArrayList(); - children.add("principalName"); - children.add("user"); - children.add("password"); - children.add("encrypted"); - ElementRestrictions el = new HCElementRestrictions("security-entry", - true, children, null); - el.setSequence(true); - elements.put("security-entry", el); - } - - /** - * Populate the config-property restrictions - * - */ - protected void populateConfigProperty() { - List configPropertyChildren = new ArrayList(); - - // restrictions for the element - configPropertyChildren.add("description"); - configPropertyChildren.add("config-property-name"); - configPropertyChildren.add("config-property-type"); - configPropertyChildren.add("config-property-value"); - ElementRestrictions el = new HCElementRestrictions("config-property", true, configPropertyChildren, null); - el.setSequence(true); - elements.put("config-property", el); - } - - /** - * Populate the resource-adapter restrictions - * - */ - protected void populateResourceAdapter() { - // restrictions for the element - List resourceadapterChildren = new ArrayList(); - resourceadapterChildren.add("resourceadapter-class"); - resourceadapterChildren.add("config-property"); - resourceadapterChildren.add("outbound-resourceadapter"); - resourceadapterChildren.add("inbound-resourceadapter"); - ElementRestrictions el = new HCElementRestrictions("resourceadapter", - true, resourceadapterChildren, null); - el.setSequence(true); - elements.put("resourceadapter", el); - } - - /** - * Populate the connector restrictions - * - */ - protected void populateConnector() { - List connectorChildren = new ArrayList(); - - // restrictions for the element. - connectorChildren.addAll(populateDescriptionGroup()); - connectorChildren.add("vendor-name"); - connectorChildren.add("eis-type"); - connectorChildren.add("resourceadapter-version"); - connectorChildren.add("license"); - connectorChildren.add("version"); - ElementRestrictions conEl = new HCElementRestrictions("connector", - true, connectorChildren, null); - conEl.setSequence(true); - elements.put("connector", conEl); - } - - /** - * Populate the descriptionGroup restrictions - * @return the descriptionGroup list - */ - protected List populateDescriptionGroup() { - List children = new ArrayList(); - children.add("description"); - children.add("display-name"); - children.add("icon"); - return children; - } - - /** - * Populate the outbound-resourceadapter restrictions - * - */ - protected void populateOutboundResourceAdapter() { - // restrictions for element. - List outboundChildren = new ArrayList(); - outboundChildren.add("connection-definition"); - outboundChildren.add("transaction-support"); - outboundChildren.add("authentication-mechanism"); - outboundChildren.add("reauthentication-support"); - ElementRestrictions outEl = new HCElementRestrictions( - "outbound-resourceadapter", true, outboundChildren, null); - outEl.setSequence(true); - elements.put("outbound-resourceadapter", outEl); - } - /** - * Populate the inbound-resourceadapter restrictions - * - */ - protected void populateInboundResourceAdapter() { - // restrictions for element. - List inboundChildren = new ArrayList(); - inboundChildren.add("messageadapter"); - ElementRestrictions inEl = new HCElementRestrictions( - "inbound-resourceadapter", true, inboundChildren, null); - inEl.setSequence(true); - elements.put("inbound-resourceadapter", inEl); - } - - /** - * Populate the license restrictions - * - */ - protected void populateLicense() { - // restrictions for element. - List licenseChildren = new ArrayList(); - licenseChildren.add("description"); - licenseChildren.add("license-required"); - ElementRestrictions licenseEl = new HCElementRestrictions("license", - true, licenseChildren, null); - licenseEl.setSequence(true); - elements.put("license", licenseEl); - } - - /** - * Populate the connection-definition restrictions - * - */ - protected void populateConnectionDefinition() { - - List children = new ArrayList(); - children.add("managedconnectionfactory-class"); - children.add("config-property"); - children.add("connectionfactory-interface"); - children.add("connectionfactory-impl-class"); - children.add("connection-interface"); - children.add("connection-impl-class"); - ElementRestrictions el = new HCElementRestrictions( - "connection-definition", true, children, null); - el.setSequence(true); - elements.put("connection-definition", el); - } - - /** - * Populate the authentication-mechanism restrictions - * - */ - protected void populateAuthenticationMechanism() { - - List children = new ArrayList(); - children.add("description"); - children.add("authentication-mechanism-type"); - children.add("credential-interface"); - ElementRestrictions el = new HCElementRestrictions( - "authentication-mechanism", true, children, null); - el.setSequence(true); - elements.put("authentication-mechanism", el); - } - - /** - * Populate the message-adapter restrictions - * - */ - protected void populateMessageAdapter() { - List children = new ArrayList(); - children.add("messagelistener"); - ElementRestrictions el = new HCElementRestrictions("messageadapter", - true, children, null); - el.setSequence(true); - elements.put("messageadapter", el); - } - - /** - * Populate the message-listener restrictions - * - */ - protected void populateMessageListener() { - List children = new ArrayList(); - children.add("messagelistener-type"); - children.add("activationspec"); - ElementRestrictions el = new HCElementRestrictions("messagelistener", - true, children, null); - el.setSequence(true); - elements.put("messagelistener", el); - } - - /** - * Populate the activationspec restrictions - * - */ - protected void populateActivationSpec() { - List children = new ArrayList(); - children.add("activationspec-class"); - children.add("required-config-property"); - ElementRestrictions el = new HCElementRestrictions("activationspec", - true, children, null); - el.setSequence(true); - elements.put("activationspec", el); - } - - /** - * Populate the required-config-property restrictions - * - */ - protected void populateRequiredConfigProperty() { - List children = new ArrayList(); - children.add("description"); - children.add("config-property-name"); - ElementRestrictions el = new HCElementRestrictions( - "required-config-property", true, children, null); - el.setSequence(true); - elements.put("required-config-property", el); - } - - /** - * Returns if there is an element restriction for the given name. - * @param name the name of the element to check - * @return true if name has a restriction. - */ - public boolean hasElementRestrictions(String name) { - return elements.containsKey(name); - } - - /** - * Returns the element restrictions for the given element name. - * @param name the name of the element to return the restrictions - * @return the element restrictions for the element. - */ - public ElementRestrictions getElementRestrictions(String name) { - return (ElementRestrictions) elements.get(name); - } - - /** - * Returns a set of all complex elements for this schema. - * @return a set of all complex elements for this schema. - */ - public Set getComplexElements() { - return elements.keySet(); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridBaseTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridBaseTag.java deleted file mode 100644 index 813fb9fdd1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridBaseTag.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; - -import org.apache.struts.taglib.html.BaseHandlerTag; - -abstract public class GridBaseTag extends BaseHandlerTag { - -// ----------------------------------------------------- Protected Constants - - protected final static String QUOTE = "\""; - -// ----------------------------------------------------- Instance Variables - - protected String ms_BodyText = null; - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - ms_BodyText = null; - // Continue processing this page - return (EVAL_BODY_BUFFERED); - } - - public int doAfterBody() - throws JspException { - if (bodyContent != null) { - String value = bodyContent.getString().trim(); - if (value.length() > 0) { - ms_BodyText = value; - } - } - return (SKIP_BODY); - } - - /** - * End of Tag Processing - * - * @exception JspException if a JSP exception occurs - */ - public int doEndTag() - throws JspException { - StringBuffer sb = new StringBuffer(); - // Before Tag option - sb.append(prepareBeforeTag()); - - // Create a ELEMENT element based on the parameters - sb.append("<"); - sb.append(getHtmlElement()); - // Prepare this HTML elements attributes - sb.append(prepareAttributes()); - sb.append(">"); - - // Before Body Content option - sb.append(prepareBeforeBody()); - // Add Body Content - if (ms_BodyText != null) { - sb.append(ms_BodyText); - } - else { - sb.append(getDefaultBody()); - } - // Before After Content option - sb.append(prepareAfterBody()); - // End Tag - sb.append(""); - - // After Tag option - sb.append(prepareAfterTag()); - - // Render this element to our writer - JspWriter out = pageContext.getOut(); - try { - out.print(sb.toString()); - } - catch (IOException e) { - throw new JspException("Exception in " + getClass().getName() + " doEndTag():" - + e.toString()); - } - return EVAL_PAGE; - } - - /** - * Prepare the attributes of the HTML element - */ - protected String prepareAttributes() throws JspException { - StringBuffer sb = new StringBuffer(); - - // Append Event Handler details - sb.append(prepareEventHandlers()); - // Append Style details - sb.append(prepareStyles()); - - return sb.toString(); - } - - /** - * Format attribute="value" from the specified attribute & value - */ - protected String prepareAttribute(String attribute, String value) { - return value == null ? "" : " " + attribute + "=" + QUOTE + value + QUOTE; - } - - /** - * Format attribute="value" from the specified attribute & value - */ - - protected String prepareAttribute(String attribute, int value) { - return value == -1 ? "" : " " + attribute + "=" + QUOTE + value + QUOTE; - } - - /** - * Release resources after Tag processing has finished. - */ - public void release() { - super.release(); - ms_BodyText = null; - } - -// ----------------------------------------------------- Protected Methods - - abstract protected String getHtmlElement(); - - protected String prepareBeforeTag() { - return ""; - } - - protected String prepareAfterTag() { - return ""; - } - - protected String prepareBeforeBody() { - return ""; - } - - protected String prepareAfterBody() { - return ""; - } - - protected String getDefaultBody() { - return ""; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridColTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridColTag.java deleted file mode 100644 index 851a1ab515..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridColTag.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -public class GridColTag extends GridTableBaseTag { - -// ----------------------------------------------------- Properties Variables - - private boolean nowrap = false; - private int colspan = -1; - private int rowspan = -1; - - public boolean isNowrap() { - return nowrap; - } - - public void setNowrap(boolean nowrap) { - this.nowrap = nowrap; - } - - public int getColspan() { - return colspan; - } - - public void setColspan(int colspan) { - this.colspan = colspan; - } - - public int getRowspan() { - return rowspan; - } - - public void setRowspan(int rowspan) { - this.rowspan = rowspan; - } - -// ----------------------------------------------------- Protected Methods - - /** - * Return the HTML element. - */ - protected String getHtmlElement() { - return "td"; - } - - /** - * Prepare the attributes of the HTML element - */ - protected String prepareAttributes() throws JspException { - StringBuffer sb = new StringBuffer(); - // Append nowrap - if (isNowrap()) { - sb.append(" nowrap"); - } - // Append "colspan" parameter - sb.append(prepareAttribute("colspan", colspan)); - // Append "rowspan" parameter - sb.append(prepareAttribute("rowspan", rowspan)); - // Append Parent - sb.append(super.prepareAttributes()); - - return sb.toString(); - } - - protected String getDefaultBody() { - return " "; - } - -// ----------------------------------------------------- Public Methods - - /** - * Release resources after Tag processing has finished. - */ - public void release() { - super.release(); - nowrap = false; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridRowTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridRowTag.java deleted file mode 100644 index c2a0f2cf41..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridRowTag.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.tagext.Tag; - -public class GridRowTag extends GridTableBaseTag { - -// ----------------------------------------------------- Properties - - private boolean changeStyle = false; - - public boolean isChangeStyle() { - return changeStyle; - } - - public void setChangeStyle(boolean changeStyle) { - this.changeStyle = changeStyle; - } - -// ----------------------------------------------------- Public Methods - - /** - * Release resources after Tag processing has finished. - */ - public void release() { - super.release(); - changeStyle = false; - } - -// ----------------------------------------------------- Protected Methods - - /** - * Return the HTML element. - */ - protected String getHtmlElement() { - return "tr"; - } - - /** - * Duplicate of BaseHandlerTag.prepareStyles()" method. - * Add the alternate class (odd or even) with . - * - * @return The prepared String for inclusion in the HTML tag. - */ - protected String prepareStyles() { - StringBuffer styles = new StringBuffer(); - if (getStyle() != null) { - styles.append(" style=\""); - styles.append(getStyle()); - styles.append("\""); - } - - // Get the row class from the GridTag parent - String sClass = getStyleClass(); - if (sClass == null) { - sClass = getRowClass(); - } - // Render class - if (sClass != null) { - styles.append(" class=\""); - styles.append(sClass); - styles.append("\""); - } - - if (getStyleId() != null) { - styles.append(" id=\""); - styles.append(getStyleId()); - styles.append("\""); - } - if (getTitle() != null) { - styles.append(" title=\""); - styles.append(getTitle()); - styles.append("\""); - } - return styles.toString(); - } - - /** - * Determine the Row Class from the GridTag. - */ - protected String getRowClass() { - // Determine if embedded in an GridTag - Tag tag = findAncestorWithClass(this, GridTag.class); - if (tag == null) { - return null; - } - // Determine the current row number - GridTag oTag = (GridTag) tag; - return oTag.getRowStyle(changeStyle); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTableBaseTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTableBaseTag.java deleted file mode 100644 index 15b849b367..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTableBaseTag.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -public class GridTableBaseTag extends GridBaseTag { - -// ----------------------------------------------------- Properties - - private String align = null; - private String valign = null; - private String width = null; - private String height = null; - - /** - * Return the Alignment - */ - public String getAlign() { - return (this.align); - } - - /** - * Set the Alignment - * - * @param Value for Alignment - */ - public void setAlign(String align) { - this.align = align; - } - - /** - * Return the Vertical Alignment - */ - public String getValign() { - return (this.valign); - } - - /** - * Set the Vertical Alignment - * - * @param Value for Vertical Alignment - */ - - public void setValign(String valign) { - this.valign = valign; - } - - public String getWidth() { - return width; - } - - public void setWidth(String width) { - this.width = width; - } - - public String getHeight() { - return height; - } - - public void setHeight(String height) { - this.height = height; - } - -// ----------------------------------------------------- Protected Methods - - /** - * Return the HTML element. - */ - protected String getHtmlElement() { - return "table"; - } - - /** - * Prepare the attributes of the HTML element - */ - protected String prepareAttributes() throws JspException { - StringBuffer sb = new StringBuffer(); - - // Append "width" parameter - sb.append(prepareAttribute("width", width)); - // Append "height" parameter - sb.append(prepareAttribute("height", height)); - // Append "align" parameter - sb.append(prepareAttribute("align", align)); - // Append "valign" parameter - sb.append(prepareAttribute("valign", valign)); - - // Append Event Handler details - sb.append(super.prepareAttributes()); - - return sb.toString(); - - } - -// ----------------------------------------------------- Public Methods - - /** - * Release resources after Tag processing has finished. - */ - public void release() { - super.release(); - align = null; - valign = null; - width = null; - height = null; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTag.java deleted file mode 100644 index 238718d8d7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/GridTag.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -/** - * @author Michel-Ange ANTON - */ -public class GridTag extends GridTableBaseTag { - -// ----------------------------------------------------- Instance Variables - - private int m_iRow = 0; - private boolean m_bEvenRow = false; - -// ----------------------------------------------------- Properties - - private String oddStyleClass = null; - private String evenStyleClass = null; - private String globalRowStyleClass = null; - private int periodRow = 1; - private int border = 0; - private int cellSpacing = 0; - private int cellPadding = 0; - - /** - * Return the Style Class of Odd rows - */ - public String getOddStyleClass() { - return oddStyleClass; - } - - /** - * Set the Style Class of Odd rows - * - * @param styleClass HTML Style Class value for Odd rows - */ - public void setOddStyleClass(String styleClass) { - this.oddStyleClass = styleClass; - } - - /** - * Style Class of Even rows in a table - */ - - /** - * Return the Style Class of Even rows - */ - public String getEvenStyleClass() { - return evenStyleClass; - } - - /** - * Set the styleClass of Even rows - * - * @param styleClass HTML Style Class value for Even rows - */ - public void setEvenStyleClass(String styleClass) { - this.evenStyleClass = styleClass; - } - - public int getPeriodRow() { - return periodRow; - } - - public void setPeriodRow(int periodRow) { - this.periodRow = periodRow; - } - public void setPeriodRow(String p_PeriodRow) { - this.periodRow = Integer.parseInt(p_PeriodRow); - } - - public int getBorder() { - return border; - } - - public void setBorder(int border) { - this.border = border; - } - - public int getCellSpacing() { - return cellSpacing; - } - - public void setCellSpacing(int cellSpacing) { - this.cellSpacing = cellSpacing; - } - - public int getCellPadding() { - return cellPadding; - } - - public void setCellPadding(int cellPadding) { - this.cellPadding = cellPadding; - } - - public String getGlobalRowStyleClass() { - return globalRowStyleClass; - } - - public void setGlobalRowStyleClass(String globalRowStyleClass) { - this.globalRowStyleClass = globalRowStyleClass; - } - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - m_bEvenRow = false; - m_iRow = 0; - return super.doStartTag(); - } - - /** - * Release resources after Tag processing has finished. - */ - public void release() { - super.release(); - m_iRow = 0; - m_bEvenRow = false; - - oddStyleClass = null; - evenStyleClass = null; - globalRowStyleClass = null; - periodRow = 1; - - border = 0; - cellSpacing = 0; - cellPadding = 0; - //border = -1; - //cellSpacing = -1; - //cellPadding = -1; - } - -// ----------------------------------------------------- Protected Methods - - /** - * Prepare the attributes of the HTML element - */ - protected String prepareAttributes() throws JspException { - StringBuffer sb = new StringBuffer(); - - // Append "border" parameter - sb.append(prepareAttribute("border", border)); - // Append "cellspacing" parameter - sb.append(prepareAttribute("cellspacing", cellSpacing)); - // Append "cellpadding" parameter - sb.append(prepareAttribute("cellpadding", cellPadding)); - - // Append Event Handler details - sb.append(super.prepareAttributes()); - - return sb.toString(); - - } - - protected String getRowStyle(boolean p_bChange) { - if (globalRowStyleClass == null) { - if (periodRow > 0) { - if (m_iRow >= periodRow) { - m_bEvenRow = !m_bEvenRow; - m_iRow = 0; - } - m_iRow++; - } - if (p_bChange == true) { - m_bEvenRow = !m_bEvenRow; - m_iRow = 1; - } - if (m_bEvenRow == true) { - return evenStyleClass; - } - return oddStyleClass; - } - return globalRowStyleClass; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasButtonTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasButtonTag.java deleted file mode 100644 index 2264618130..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasButtonTag.java +++ /dev/null @@ -1,361 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.lang.reflect.InvocationTargetException; - -import javax.servlet.jsp.JspException; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.struts.taglib.html.LinkTag; -import org.apache.struts.taglib.TagUtils; - -/** - * @author Michel-Ange ANTON - */ -public class JonasButtonTag extends LinkTag { - -// ----------------------------------------------------- Manifest Constants - - private static final String s_ImageBorder = "dot.gif"; - -// ----------------------------------------------------- Instance Variables - - protected String ms_PathImage = null; - protected String ms_LastStyleClass = null; - protected String ms_StyleClassButton = "btn"; - -// ------------------------------------------------------------- Properties - - private int widthBorder = 1; - private int heightBorder = 1; - private String imagesDir = null; - private String styleClassBorderLight = "btnBorderLight"; - private String styleClassBorderShadow = "btnBorderShadow"; - private String styleClassBackground = "btn"; - private String styleClassDisabled = "btnDisabled"; - private String disabledName = null; - private String disabledProperty = null; - private String disabledValueEqual = null; - private String disabledValueNotEqual = null; - - public int getHeightBorder() { - return heightBorder; - } - - public void setHeightBorder(int heightBorder) { - this.heightBorder = heightBorder; - } - - public String getImagesDir() { - return imagesDir; - } - - public void setImagesDir(String imagesDir) { - this.imagesDir = imagesDir; - } - - public int getWidthBorder() { - return widthBorder; - } - - public void setWidthBorder(int widthBorder) { - this.widthBorder = widthBorder; - } - - public String getStyleClassBorderLight() { - return styleClassBorderLight; - } - - public void setStyleClassBorderLight(String styleClassBorderLight) { - this.styleClassBorderLight = styleClassBorderLight; - } - - public String getStyleClassBorderShadow() { - return styleClassBorderShadow; - } - - public void setStyleClassBorderShadow(String styleClassBorderShadow) { - this.styleClassBorderShadow = styleClassBorderShadow; - } - - public String getStyleClassBackground() { - return styleClassBackground; - } - - public void setStyleClassBackground(String styleClassBackground) { - this.styleClassBackground = styleClassBackground; - } - - public String getStyleClassDisabled() { - return styleClassDisabled; - } - - public void setStyleClassDisabled(String styleClassDisabled) { - this.styleClassDisabled = styleClassDisabled; - } - - public String getDisabledName() { - return disabledName; - } - - public void setDisabledName(String disabledName) { - this.disabledName = disabledName; - } - - public String getDisabledProperty() { - return disabledProperty; - } - - public void setDisabledProperty(String disabledProperty) { - this.disabledProperty = disabledProperty; - } - - public String getDisabledValueEqual() { - return disabledValueEqual; - } - - public void setDisabledValueEqual(String disabledValueEqual) { - this.disabledValueEqual = disabledValueEqual; - } - - public String getDisabledValueNotEqual() { - return disabledValueNotEqual; - } - - public void setDisabledValueNotEqual(String disabledValueNotEqual) { - this.disabledValueNotEqual = disabledValueNotEqual; - } - -// ------------------------------------------------------------- Public methods - - /** - * Render the beginning of the hyperlink. - * - * @exception JspException if a JSP exception has occurred - */ - public int doStartTag() - throws JspException { - - // Test if button disabled - boolean bDisabled = getDisabled(); - TagUtils tagUtils = TagUtils.getInstance(); - if ((getDisabledName() != null) && - ((getDisabledValueEqual() != null) || (getDisabledValueNotEqual() != null))) { - String sValue = lookupProperty(getDisabledName(), getDisabledProperty()); - if (getDisabledValueEqual() != null) { - bDisabled = getDisabledValueEqual().equals(sValue); - } else { - bDisabled = !getDisabledValueNotEqual().equals(sValue); - } - } - - // Force style class to the Link Tag - ms_LastStyleClass = getStyleClass(); - if (getStyleClass() == null) { - setStyleClass(ms_StyleClassButton); - } - // Prepare path image - makePathImage(); - // Add the begining of render button - StringBuffer sb = new StringBuffer( - ""); - sb.append(prepareBorderTop()); - sb.append(""); - sb.append(prepareBorderColumn(styleClassBorderLight)); - sb.append(""); - sb.append(prepareBorderColumn(styleClassBorderShadow)); - sb.append(""); - sb.append(prepareBorderBottom()); - sb.append("
"); - tagUtils.write(pageContext, sb.toString()); - - if (bDisabled == false) { - // Add link if enabled - return (super.doStartTag()); - } - return (EVAL_BODY_BUFFERED); - } - - /** - * Render the end of the hyperlink. - * - * @exception JspException if a JSP exception has occurred - */ - public int doEndTag() - throws JspException { - StringBuffer sb = new StringBuffer(); - int iRet = EVAL_PAGE; - TagUtils tagUtils = TagUtils.getInstance(); - - // If body text exist pre-fix and post-fix with space - if (text != null) { - StringBuffer sbText = new StringBuffer(" "); - sbText.append(text); - sbText.append(" "); - text = sbText.toString(); - } - - if (getDisabled() == false) { - // Add link if enabled - iRet = super.doEndTag(); - } else { - sb.append(text); - } - - // Add the end of render button - sb.append("
"); - tagUtils.write(pageContext, sb.toString()); - - // Force last style - setStyleClass(ms_LastStyleClass); - ms_LastStyleClass = null; - - return (iRet); - } - - public String getImagesRoot() { - String sImagesRoot = null; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - sImagesRoot = oWhere.getImagesRoot(); - } - return sImagesRoot; - } - - public void release() { - super.release(); - ms_PathImage = null; - imagesDir = null; - ms_StyleClassButton = null; - styleClassBorderLight = null; - styleClassBorderShadow = null; - styleClassBackground = null; - styleClassDisabled = null; - } - -// --------------------------------------------------------- Protected Methods - protected void makePathImage() { - // Prepare image separator - if (imagesDir != null) { - ms_PathImage = imagesDir + "/" + s_ImageBorder; - } - else if (getImagesRoot() != null) { - ms_PathImage = getImagesRoot() + "/" + s_ImageBorder; - } - else { - ms_PathImage = s_ImageBorder; - } - } - - /** - * Return render image. - * @return - */ - protected String prepareImage() { - StringBuffer sb = new StringBuffer(""); - return sb.toString(); - } - - /** - * Return render image. - * @return - */ - protected String prepareBorderColumn(String ps_Class) { - StringBuffer sb = new StringBuffer(""); - sb.append(prepareImage()); - sb.append(""); - return sb.toString(); - } - - protected String prepareBorderTop() { - StringBuffer sb = new StringBuffer(""); - sb.append(prepareBorderColumn(styleClassBorderLight)); - sb.append(prepareBorderColumn(styleClassBorderLight)); - sb.append(prepareBorderColumn(styleClassBorderLight)); - sb.append(""); - return sb.toString(); - } - - protected String prepareBorderBottom() { - StringBuffer sb = new StringBuffer(""); - sb.append(prepareBorderColumn(styleClassBorderLight)); - sb.append(prepareBorderColumn(styleClassBorderShadow)); - sb.append(prepareBorderColumn(styleClassBorderShadow)); - sb.append(""); - return sb.toString(); - } - - protected WhereAreYou getWhereAreYouInstance() { - return (WhereAreYou) pageContext.getSession().getAttribute(WhereAreYou.SESSION_NAME); - } - - protected String lookupProperty(String beanName, String property) - throws JspException { - - TagUtils tagUtils = TagUtils.getInstance(); - Object bean = tagUtils.lookup(this.pageContext, beanName, null); - if (bean == null) { - throw new JspException(messages.getMessage("getter.bean", beanName)); - } - if (property == null) { - return bean.toString(); - } - try { - return (PropertyUtils.getProperty(bean, property)).toString(); - } catch (IllegalAccessException e) { - throw new JspException(messages.getMessage("getter.access", property, beanName)); - - } catch (InvocationTargetException e) { - Throwable t = e.getTargetException(); - throw new JspException(messages.getMessage("getter.result", property, t.toString())); - - } catch (NoSuchMethodException e) { - throw new JspException(messages.getMessage("getter.method", property, beanName)); - } - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridColTitleTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridColTitleTag.java deleted file mode 100644 index f3012e753c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridColTitleTag.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - -public class JonasGridColTitleTag extends GridColTag { - -// ------------------------------------------------------------- Instance Variables - private boolean mb_ForceStyleClass = false; - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - // Set default value - mb_ForceStyleClass = false; - if (getStyleClass() == null) { - // Determine if embedded in an JonasGridRowTitleTag - Tag oTag = findAncestorWithClass(this, JonasGridRowTitleTag.class); - if (oTag == null) { - setStyleClass(JonasGridRowTitleTag.CLASS_TITLE); - } - else { - setStyleClass(((JonasGridRowTitleTag) oTag).getStyleClass()); - } - mb_ForceStyleClass = true; - } - if (getHeight() == null) { - setHeight("20"); - } - return super.doStartTag(); - } - - /** - * End of Tag Processing - * - * @exception JspException if a JSP exception occurs - */ - public int doEndTag() - throws JspException { - int iRet = super.doEndTag(); - if (mb_ForceStyleClass == true) { - mb_ForceStyleClass = false; - setStyleClass(null); - } - return iRet; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTag.java deleted file mode 100644 index 8636d50171..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTag.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -public class JonasGridNameTag extends GridColTag { - -// ----------------------------------------------------- Properties - - private boolean bold = true; - - public boolean isBold() { - return bold; - } - - public void setBold(boolean bold) { - this.bold = bold; - } - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - setNowrap(true); - setAlign("right"); - setValign("top"); - setWidth("19%"); - return super.doStartTag(); - } - - public void release() { - super.release(); - } - -// ----------------------------------------------------- Protected Methods - - protected String prepareAfterTag() { - StringBuffer sb = new StringBuffer(" "); - return sb.toString(); - } - - protected String prepareBeforeBody() { - if (bold == true) { - return ""; - } - return ""; - } - - protected String prepareAfterBody() { - if (bold == true) { - return ""; - } - return ""; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTitleTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTitleTag.java deleted file mode 100644 index 8968093e33..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridNameTitleTag.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - -public class JonasGridNameTitleTag extends JonasGridNameTag { - -// ------------------------------------------------------------- Instance Variables - - private boolean mb_ForceStyleClass = false; - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - // Set default value - mb_ForceStyleClass = false; - if (getStyleClass() == null) { - // Determine if embedded in an JonasGridRowTitleTag - Tag oTag = findAncestorWithClass(this, JonasGridRowTitleTag.class); - if (oTag == null) { - setStyleClass(JonasGridRowTitleTag.CLASS_TITLE); - } - else { - setStyleClass(((JonasGridRowTitleTag) oTag).getStyleClass()); - } - mb_ForceStyleClass = true; - } - if (getHeight() == null) { - setHeight("20"); - } - return super.doStartTag(); - } - - /** - * End of Tag Processing - * - * @exception JspException if a JSP exception occurs - */ - public int doEndTag() - throws JspException { - int iRet = super.doEndTag(); - if (mb_ForceStyleClass == true) { - mb_ForceStyleClass = false; - setStyleClass(null); - } - return iRet; - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridRowTitleTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridRowTitleTag.java deleted file mode 100644 index c95c5b1ba9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridRowTitleTag.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -public class JonasGridRowTitleTag extends GridRowTag { - -// ------------------------------------------------------------- Constants - - public static final String CLASS_TITLE = "panelTitle"; - -// ------------------------------------------------------------- Instance Variables - - private boolean mb_ForceStyleClass = false; - -// ------------------------------------------------------------- Properties - - private String level = null; - - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - // Set default value - mb_ForceStyleClass = false; - if (getStyleClass() == null) { - setStyleClass(getStyleClassLevel()); - mb_ForceStyleClass = true; - } - return super.doStartTag(); - } - - public void release() { - super.release(); - level = null; - } - - public String getStyleClassLevel() { - if (level != null) { - return new String((CLASS_TITLE + level)); - } - return CLASS_TITLE; - } - - /** - * End of Tag Processing - * - * @exception JspException if a JSP exception occurs - */ - public int doEndTag() - throws JspException { - int iRet = super.doEndTag(); - if (mb_ForceStyleClass == true) { - mb_ForceStyleClass = false; - setStyleClass(null); - } - return iRet; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridTag.java deleted file mode 100644 index 46fe90bcdf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridTag.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -/** - * Automatic grid tag. - * - * @author Michel-Ange ANTON - */ -public class JonasGridTag extends GridTag { - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - // Set default value - setEvenStyleClass("gridRowEven"); - setOddStyleClass("gridRowOdd"); - setCellSpacing(0); - setCellPadding(2); - setBorder(0); - setWidth("100%"); - return super.doStartTag(); - } - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTag.java deleted file mode 100644 index 636cedb80d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTag.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -public class JonasGridValueTag extends GridColTag { - -// ----------------------------------------------------- Properties - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - setAlign("left"); - setWidth("80%"); - return super.doStartTag(); - } - - public void release() { - super.release(); - } - -// ----------------------------------------------------- Protected Methods - -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTitleTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTitleTag.java deleted file mode 100644 index e59070ce95..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasGridValueTitleTag.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.Tag; - -public class JonasGridValueTitleTag extends JonasGridValueTag { - -// ------------------------------------------------------------- Instance Variables - - private boolean mb_ForceStyleClass = false; - -// ----------------------------------------------------- Public Methods - - /** - * Start of Tag processing - * - * @exception JspException if a JSP exception occurs - */ - public int doStartTag() - throws JspException { - // Set default value - mb_ForceStyleClass = false; - if (getStyleClass() == null) { - // Determine if embedded in an JonasGridRowTitleTag - Tag oTag = findAncestorWithClass(this, JonasGridRowTitleTag.class); - if (oTag == null) { - setStyleClass(JonasGridRowTitleTag.CLASS_TITLE); - } - else { - setStyleClass(((JonasGridRowTitleTag) oTag).getStyleClass()); - } - mb_ForceStyleClass = true; - } - if (getHeight() == null) { - setHeight("20"); - } - return super.doStartTag(); - } - - /** - * End of Tag Processing - * - * @exception JspException if a JSP exception occurs - */ - public int doEndTag() - throws JspException { - int iRet = super.doEndTag(); - if (mb_ForceStyleClass == true) { - mb_ForceStyleClass = false; - setStyleClass(null); - } - return iRet; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasSubmitTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasSubmitTag.java deleted file mode 100644 index 192f3aed13..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/JonasSubmitTag.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; - -import org.apache.struts.taglib.TagUtils; - -public class JonasSubmitTag extends JonasButtonTag { - -// -------------------------------------------------------- Instances Variables - - protected String ms_MyFunctionName = null; - protected String ms_JavascriptName = null; - -// --------------------------------------------------------- Properties Variables - - private String form = null; - private String value = "Apply"; - -// --------------------------------------------------------- Properties Methods - - public String getForm() { - return form; - } - - public void setForm(String form) { - this.form = form; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - -// --------------------------------------------------------- Public Methods - - /** - * Render the beginning. - * - * @exception JspException if a JSP exception has occurred - */ - public int doStartTag() - throws JspException { - TagUtils tagUtils = TagUtils.getInstance(); - - ms_MyFunctionName = "MySubmit"; - ms_JavascriptName = "submit"; - - StringBuffer sb = new StringBuffer(); - if (getDisabled() == false) { - // Add the Javascript begining - sb.append(prepareJavascript()); - // - href = prepareCallJavascript(); - } - tagUtils.write(pageContext, sb.toString()); - - return (super.doStartTag()); - } - - /** - * Render the end. - * - * @exception JspException if a JSP exception has occurred - */ - public int doEndTag() - throws JspException { - // Replace body by value - if (value != null) { - text = value; - } - return super.doEndTag(); - } - - public void release() { - super.release(); - form = null; - value = null; - ms_MyFunctionName = null; - ms_JavascriptName = null; - } - -// --------------------------------------------------------- Protected Methods - - protected String prepareCallJavascript() { - if (form == null) { - return "javascript:" + ms_MyFunctionName + "()"; - } - else { - return "javascript:" + ms_MyFunctionName + form + "()"; - } - } - - protected String prepareJavascript() { - StringBuffer sb = new StringBuffer(); - sb.append(""); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/LabelValueBean.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/LabelValueBean.java deleted file mode 100644 index 1f0e9b2843..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/LabelValueBean.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Struts", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.Serializable; - -/** - * Simple JavaBean to represent label-value pairs for use in collections - * that are utilized by the <form:options> tag. - * - * @author Craig R. McClanahan - * @version $Revision: 1.2 - */ - -public class LabelValueBean implements Serializable { - - // ----------------------------------------------------------- Constructors - - /** - * Construct a new LabelValueBean with the specified values. - * - * @param label The label to be displayed to the user - * @param value The value to be returned to the server - */ - public LabelValueBean(String label, String value) { - this.label = label; - this.value = value; - } - - // ------------------------------------------------------------- Properties - - /** - * The label to be displayed to the user. - */ - protected String label = null; - - public String getLabel() { - return (this.label); - } - - /** - * The value to be returned to the server. - */ - protected String value = null; - - public String getValue() { - return (this.value); - } - - // --------------------------------------------------------- Public Methods - - /** - * Return a string representation of this object. - */ - public String toString() { - StringBuffer sb = new StringBuffer("LabelValueBean["); - sb.append(this.label); - sb.append(", "); - sb.append(this.value); - sb.append("]"); - return (sb.toString()); - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelSeparatorTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelSeparatorTag.java deleted file mode 100644 index 56cba39d4e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelSeparatorTag.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.TagSupport; - -public class PanelSeparatorTag extends TagSupport { - -// --------------------------------------------------------- Public Methods - - /** - * . - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - StringBuffer sb = new StringBuffer(); - // Render Separator - sb.append(""); - sb.append( - ""); - sb.append("
 
"); - - // Render this element to our writer - JspWriter out = pageContext.getOut(); - try { - out.print(sb.toString()); - } - catch (IOException e) { - throw new JspException("Exception in " + getClass().getName() + " doEndTag():" - + e.toString()); - } - return EVAL_PAGE; - } -} \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelTag.java deleted file mode 100644 index de2f975d47..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/PanelTag.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyTagSupport; -import javax.servlet.jsp.tagext.Tag; - -public class PanelTag extends BodyTagSupport { - -// ----------------------------------------------------- Instance Variables - - /** - * The databody that will be rendered for this table row. - */ - private String body = null; - -// --------------------------------------------------------- Public Methods - - /** - * Process the start of this tag. - * - * @exception JspException if a JSP exception has occurred - */ - public int doStartTag() - throws JspException { - // Initialize the holder for our databody text - this.body = null; - // Do no further processing for now - return (EVAL_BODY_BUFFERED); - } - - /** - * Process the body text of this tag (if any). - * - * @exception JspException if a JSP exception has occurred - */ - public int doAfterBody() - throws JspException { - String data = bodyContent.getString(); - if (data != null) { - data = data.trim(); - if (data.length() > 0) { - this.body = data; - } - } - return (SKIP_BODY); - } - - /** - * . - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - // Find our parent TabsTag instance - Tag parent = findAncestorWithClass(this, TabsTag.class); - if ((parent == null) || !(parent instanceof TabsTag)) { - throw new JspException("Must be nested in a TabsTag instance"); - } - TabsTag oTabsTag = (TabsTag) parent; - - // Register the information for the action represented by - // this action - //HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); - oTabsTag.setBody(body); - - return (EVAL_PAGE); - } - - /** - * Release all state information set by this tag. - */ - public void release() { - this.body = null; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/RefreshTreeTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/RefreshTreeTag.java deleted file mode 100644 index 40113edfd1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/RefreshTreeTag.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; - -/** - * @author Michel-Ange ANTON - */ -public class RefreshTreeTag extends WhereAreYouTag { - -// ----------------------------------------------------- Constants - -// ----------------------------------------------------- Instance Variables - -// ----------------------------------------------------- Properties - -// ----------------------------------------------------- Public Methods - - /** - * Render this instant actions control. - * - * @return Constant EVAL_PAGE - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - JspWriter out = pageContext.getOut(); - try { - render(out); - } - catch (IOException e) { - throw new JspException(e); - } - return (EVAL_PAGE); - } - -// -------------------------------------------------------- Protected Methods - - protected void render(JspWriter out) - throws IOException, JspException { - // Action to refresh associate tree - if (isTreeToRefresh() == true) { - out.print(""); - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabTag.java deleted file mode 100644 index 09fbe07120..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabTag.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.net.MalformedURLException; -import java.util.Map; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.tagext.BodyTagSupport; -import javax.servlet.jsp.tagext.Tag; - -import org.apache.struts.taglib.TagUtils; - - -/** - * @author Michel-Ange ANTON - */ -public class TabTag extends BodyTagSupport { - -// ----------------------------------------------------- Instance Variables - private String m_Body = null; - private String m_Url = null; - -// ----------------------------------------------------- Properties - - private boolean selected = false; - private String href = null; - private String forward = null; - private String forwardControl = null; - /** - * Accessor Href property. - */ - public String getHref() { - return href; - } - - public void setHref(String href) { - this.href = href; - } - - /** - * Accessor Selected property. - */ - public boolean getSelected() { - return (this.selected); - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - - /** - * Accessor Forward property. - */ - public String getForward() { - return forward; - } - - public void setForward(String forward) { - this.forward = forward; - } - - /** - * Accessor ForwardControl property. - */ - public String getForwardControl() { - return forwardControl; - } - - public void setForwardControl(String forwardControl) { - this.forwardControl = forwardControl; - } - - /** - * The anchor to be added to the end of the generated hyperlink. - */ - protected String anchor = null; - - public String getAnchor() { - return (this.anchor); - } - - public void setAnchor(String anchor) { - this.anchor = anchor; - } - - /** - * The link name for named links. - */ - protected String linkName = null; - - public String getLinkName() { - return (this.linkName); - } - - public void setLinkName(String linkName) { - this.linkName = linkName; - } - - /** - * The JSP bean name for query parameters. - */ - protected String name = null; - - public String getName() { - return (this.name); - } - - public void setName(String name) { - this.name = name; - } - - /** - * The context-relative page URL (beginning with a slash) to which - * this hyperlink will be rendered. - */ - protected String page = null; - - public String getPage() { - return (this.page); - } - - public void setPage(String page) { - this.page = page; - } - - /** - * The single-parameter request parameter name to generate. - */ - protected String paramId = null; - - public String getParamId() { - return (this.paramId); - } - - public void setParamId(String paramId) { - this.paramId = paramId; - } - - /** - * The single-parameter JSP bean name. - */ - protected String paramName = null; - - public String getParamName() { - return (this.paramName); - } - - public void setParamName(String paramName) { - this.paramName = paramName; - } - - /** - * The single-parameter JSP bean property. - */ - protected String paramProperty = null; - - public String getParamProperty() { - return (this.paramProperty); - } - - public void setParamProperty(String paramProperty) { - this.paramProperty = paramProperty; - } - - /** - * The single-parameter JSP bean scope. - */ - protected String paramScope = null; - - public String getParamScope() { - return (this.paramScope); - } - - public void setParamScope(String paramScope) { - this.paramScope = paramScope; - } - - /** - * The JSP bean property name for query parameters. - */ - protected String property = null; - - public String getProperty() { - return (this.property); - } - - public void setProperty(String property) { - this.property = property; - } - - /** - * The scope of the bean specified by the name property, if any. - */ - protected String scope = null; - - public String getScope() { - return (this.scope); - } - - public void setScope(String scope) { - this.scope = scope; - } - - /** - * The window target. - */ - protected String target = null; - - public String getTarget() { - return (this.target); - } - - public void setTarget(String target) { - this.target = target; - } - - /** - * Include transaction token (if any) in the hyperlink? - */ - protected boolean transaction = false; - - public boolean getTransaction() { - return (this.transaction); - } - - public void setTransaction(boolean transaction) { - this.transaction = transaction; - } - -// --------------------------------------------------------- Public Methods - - public int doStartTag() - throws JspException { - // Initialize the older body - m_Body = null; - - // Do no further processing for now - return (EVAL_BODY_BUFFERED); - } - - public int doAfterBody() - throws JspException { - String sBody = bodyContent.getString(); - if (sBody != null) { - sBody = sBody.trim(); - if (sBody.length() > 0) { - this.m_Body = sBody; - } - } - return (SKIP_BODY); - } - - /** - * Record this tab with our surrounding TabsTag instance. - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - - // Find our parent TabsTag instance - Tag parent = findAncestorWithClass(this, TabsTag.class); - if ((parent == null) || !(parent instanceof TabsTag)) { - throw new JspException("Must be nested in a TabsTag instance"); - } - TabsTag oTabs = (TabsTag) parent; - - // Generate the hyperlink URL - TagUtils tagUtils = TagUtils.getInstance(); - Map oParams = tagUtils.computeParameters(pageContext, paramId, paramName, paramProperty - , paramScope, name, property, scope, transaction); - m_Url = null; - try { - m_Url = tagUtils.computeURL(pageContext, forward, href, page, null, null, oParams, anchor, false); - } catch (MalformedURLException e) { - // none - } - // Verify forwardControl parameter - if ((m_Url == null) && (forwardControl != null) && (oTabs.isUsingWhere() == true)) { - try { - // Get the selected node - TreeControlNode oNode = oTabs.getSelectedTreeControlNode(); - if (oNode != null) { - try { - String sForward = tagUtils.computeURL(pageContext, forwardControl, null, null, null, null, null, null, false); - int iPos = oNode.getAction().indexOf("?"); - m_Url = sForward + oNode.getAction().substring(iPos); - } catch (MalformedURLException e) { - // none - } - } - } catch (Exception ex) { - // none - } - } - // Verify Url - if (m_Url == null) { - m_Url = new String(""); - } - // Verify body label - if (m_Body == null) { - m_Body = new String(""); - } - // Register the information for the action represented by - // this action - oTabs.addTab(m_Body, m_Url, selected); - - return (EVAL_PAGE); - } - - /** - * Release all state information set by this tag. - */ - public void release() { - this.m_Body = null; - this.href = null; - this.forward = null; - this.forwardControl = null; - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabsTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabsTag.java deleted file mode 100644 index 375401ddcc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TabsTag.java +++ /dev/null @@ -1,426 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; - -public class TabsTag extends WhereAreYouTag { - -// ----------------------------------------------------- Constants - - private static final String s_ImageSeparator = "dot.gif"; - -// ----------------------------------------------------- Instance Variables - - private ArrayList m_LabelTabs = new ArrayList(); - private ArrayList m_HrefTabs = new ArrayList(); - private ArrayList m_SelectedTabs = new ArrayList(); - private String m_Body = null; - -// ------------------------------------------------------------- Properties - - private int widthTab = 0; - private int heightTab = 0; - private String width = "100%"; - private String height = ""; - private int widthSeparator = 3; - private int heightSeparator = 1; - private int marginPanel = 5; - private String imagesDir = null; - - /** - * Accessor WidthTab property. - */ - public int getWidthTab() { - return widthTab; - } - - public void setWidthTab(int widthTab) { - this.widthTab = widthTab; - } - - /** - * Accessor HeightTab property. - */ - public int getHeightTab() { - return heightTab; - } - - public void setHeightTab(int heightTab) { - this.heightTab = heightTab; - } - - /** - * Accessor Width property. - */ - public String getWidth() { - return width; - } - - public void setWidth(String width) { - this.width = width; - } - - /** - * Accessor Height property. - */ - public String getHeight() { - return height; - } - - /** - * Accessor Height property. - */ - public void setHeight(String height) { - this.height = height; - } - - /** - * Accessor WidthSeparator property. - */ - public int getWidthSeparator() { - return widthSeparator; - } - - public void setWidthSeparator(int widthSeparator) { - this.widthSeparator = widthSeparator; - } - - /** - * Accessor HeightSeparator property. - */ - public int getHeightSeparator() { - return heightSeparator; - } - - public void setHeightSeparator(int heightSeparator) { - this.heightSeparator = heightSeparator; - } - - /** - * Accessor MarginPanel property. - */ - public int getMarginPanel() { - return marginPanel; - } - - public void setMarginPanel(int marginPanel) { - this.marginPanel = marginPanel; - } - - /** - * Accessor ImagesDir property. - */ - public String getImagesDir() { - return imagesDir; - } - - public void setImagesDir(String imagesDir) { - this.imagesDir = imagesDir; - } - -// --------------------------------------------------------- Public Methods - - public int doStartTag() - throws JspException { - - this.m_LabelTabs.clear(); - this.m_HrefTabs.clear(); - this.m_SelectedTabs.clear(); - this.m_Body = null; - - return (EVAL_BODY_BUFFERED); - } - - /** - * Render this instant actions control. - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - JspWriter out = pageContext.getOut(); - try { - verifySelected(); - render(out); - } - catch (IOException e) { - throw new JspException(e); - } - return (EVAL_PAGE); - } - - /** - * Release all state information set by this tag. - */ - public void release() { - this.m_LabelTabs.clear(); - this.m_HrefTabs.clear(); - this.m_SelectedTabs.clear(); - this.m_Body = null; - this.width = null; - this.height = null; - this.imagesDir = null; - } - -// -------------------------------------------------------- Package Methods - - /** - * Add a new Action to the set that will be rendered by this control. - * - * @param label Localized label visible to the user - * @param selected Initial selected state of this option - * @param url URL to which control should be transferred if selected - */ - - void addTab(String ps_Label, String ps_Href, boolean ps_Selected) { - m_LabelTabs.add(ps_Label); - m_HrefTabs.add(ps_Href); - m_SelectedTabs.add(new Boolean(ps_Selected)); - } - - void setBody(String ps_Body) { - m_Body = ps_Body; - } - -// ------------------------------------------------------ Private Methods - - private void render(JspWriter out) - throws IOException, JspException { - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println("
"); - renderTabs(out); - out.println("
"); - renderPanel(out); - out.println("
"); - } - - private void renderPanel(JspWriter out) - throws IOException, JspException { - // Render the panel of this element - out.print(""); - out.println(""); - out.println(""); - out.println(""); - out.println("
"); - out.print(""); - out.println(""); - out.print(""); - out.println(""); - out.println("
"); - if (m_Body != null) { - out.println(m_Body); - } - out.println("
"); - out.println("
"); - } - - private void renderTabs(JspWriter out) - throws IOException, JspException { - int i = 0; - boolean bSelected = false; - StringBuffer sbLabel = null; - String sImageSep = null; - - // Prepare image separator - if (imagesDir != null) { - sImageSep = imagesDir + "/" + s_ImageSeparator; - } - else if (isUsingWhere()) { - sImageSep = getImagesRoot() + "/" + s_ImageSeparator; - } - else { - sImageSep = s_ImageSeparator; - } - // Render the beginning of this element - try { - out.println(""); - } - catch (IOException ex) { - } - - // Render each defined label tab - int n = m_LabelTabs.size(); - out.println(""); - for (i = 0; i < n; i++) { - // Init Label display - sbLabel = new StringBuffer(); - // Detect selected tab - bSelected = ((Boolean) m_SelectedTabs.get(i)).booleanValue(); - // Display begin tag - out.print(""); - - if (i < (n - 1)) { - // Separator Part - out.print(""); - // Image - out.print(""); - out.println(""); - } - } - out.println(""); - - // Render underline - out.println(""); - for (i = 0; i < n; i++) { - bSelected = ((Boolean) m_SelectedTabs.get(i)).booleanValue(); - // Label Line Part - out.print(""); - out.print(""); - out.println(""); - - // Last tab ? - if (i < (n - 1)) { - // Separator Line Part - out.print(""); - out.print(""); - out.println(""); - } - } - // Display end tag - out.println(""); - out.println("
0) { - out.print(" width=\""); - out.print(widthTab); - out.print("\""); - sbLabel.append(m_LabelTabs.get(i)); - } - else { - sbLabel.append(" "); - sbLabel.append(m_LabelTabs.get(i)); - sbLabel.append(" "); - } - out.print(" class=\""); - if (bSelected == true) { - out.print("tabSelect"); - } - else { - out.print("tab"); - } - out.print("\""); - // Height tab - if (heightTab > 0) { - out.print(" height=\""); - out.print(heightTab); - out.print("\""); - } - out.print(">"); - - // Display label - if ((bSelected == true) || (m_HrefTabs.get(i).toString().length() == 0)) { - // Simple label - out.print(sbLabel.toString()); - } - else { - // Link label - out.print(""); - out.print(sbLabel.toString()); - out.print(""); - } - out.println("
"); - } - - /** - * Verify if one tab is selected else select the first. - */ - private void verifySelected() { - boolean bFound = false; - for (int i = 0; i < m_SelectedTabs.size(); i++) { - if (bFound == true) { - // unselect all next if one is found - m_SelectedTabs.set(i, new Boolean(false)); - } - else { - // detect the first selected - bFound = ((Boolean) m_SelectedTabs.get(i)).booleanValue(); - } - } - if ((bFound == false) && (m_SelectedTabs.size() > 0)) { - m_SelectedTabs.set(0, new Boolean(true)); - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TitleContentTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TitleContentTag.java deleted file mode 100644 index 1eb1c8762a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TitleContentTag.java +++ /dev/null @@ -1,330 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; - - - -/** - * @author Michel-Ange ANTON - */ -public class TitleContentTag extends WhereAreYouTag { - -// ----------------------------------------------------- Constants - -// ----------------------------------------------------- Instance Variables - - protected String m_Body = null; - -// ------------------------------------------------------------- Properties - private String image = null; - private String title = null; - private boolean usingParent = false; - private boolean tomThumb = false; - private boolean tomThumbIcons = false; - - public String getImage() { - return image; - } - - public void setImage(String image) { - this.image = image; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public boolean isUsingParent() { - return usingParent; - } - - public void setUsingParent(boolean usingParent) { - this.usingParent = usingParent; - } - - public boolean isTomThumb() { - return tomThumb; - } - - public void setTomThumb(boolean tomThumb) { - this.tomThumb = tomThumb; - } - - public boolean isTomThumbIcons() { - return tomThumbIcons; - } - - public void setTomThumbIcons(boolean tomThumbIcons) { - this.tomThumbIcons = tomThumbIcons; - } - -// --------------------------------------------------------- Public Methods - - /** - * Render this instant actions control. - * - * @return Constant EVAL_PAGE - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - JspWriter out = pageContext.getOut(); - try { - render(out); - } - catch (IOException e) { - throw new JspException(e); - } - return (EVAL_PAGE); - } - - public int doAfterBody() - throws JspException { - String sBody = bodyContent.getString(); - if (sBody != null) { - sBody = sBody.trim(); - if (sBody.length() > 0) { - this.m_Body = sBody; - } - } - return (SKIP_BODY); - } - - /** - * Release all state information set by this tag. - */ - public void release() { - this.image = null; - this.title = null; - m_Body = null; - } - -// -------------------------------------------------------- Protected Methods - - protected void render(JspWriter out) - throws IOException, JspException { - String sImageDisplay = null; - String sTitleDisplay = null; - ArrayList alTomThumb = null; - //String sThumbDisplay = null; - - // Prepare WhereAreYou infos - if (isUsingWhere()) { - TreeControlNode oNode = getSelectedTreeControlNode(); - if (oNode != null) { - sImageDisplay = getImagesRoot() + "/" + oNode.getIcon(); - sTitleDisplay = oNode.getLabel(); - // Prepare label of parent node - if (isUsingParent() == true) { - TreeControlNode oParent = oNode.getParent(); - if (oParent != null) { - sTitleDisplay = oParent.getLabel() + " : " + oNode.getLabel(); - } - } - // Prepare Tom Thumb list - if (isTomThumb() == true) { - alTomThumb = getTomThumbList(oNode); - } - } - } - // Prepare parameters - if (image != null) { - sImageDisplay = image; - } - if (title != null) { - sTitleDisplay = title; - } - if (m_Body != null) { - sTitleDisplay = m_Body; - m_Body = null; - } - // Display - if ((sImageDisplay != null) || (sTitleDisplay != null)) { - String sTomThumb = null; - // Build Tom Thumb display - if (alTomThumb != null) { - if (alTomThumb.size() > 0) { - sTomThumb = renderTomThumb(alTomThumb); - } - } - // Display Tom Thumb - if (sTomThumb != null) { - out.println( - ""); - out.print(""); - out.print(""); - out.println(""); - } - else { - // No Tom Thumb to display - out.println( - "
"); - out.print(sTomThumb); - out.print("
"); - } - // Display icon - out.println(""); - if (sImageDisplay != null) { - out.print(""); - out.println(""); - } - // Display title - if (sTitleDisplay != null) { - out.print(""); - } - out.println(""); - out.println("
 "); - out.print(sTitleDisplay); - out.println("
"); - } - } - - protected String renderTomThumb(ArrayList p_TomThumb) { - StringBuffer sb = new StringBuffer(); - ItemTomThumb oThumb; - for (int i = p_TomThumb.size() - 1; i >= 0; i--) { - oThumb = (ItemTomThumb) p_TomThumb.get(i); - if (oThumb.getLink() != null) { - sb.append(""); - if ((isTomThumbIcons()== true) && (oThumb.getIcon() != null)) { - sb.append(" "); - } - sb.append(oThumb.getLabel()); - sb.append(""); - } - else { - if ((isTomThumbIcons()== true) && (oThumb.getIcon() != null)) { - sb.append(" "); - } - sb.append(""); - sb.append(oThumb.getLabel()); - sb.append(""); - } - if (i > 0) { - sb.append(" > "); - } - } - return sb.toString(); - } - - protected ArrayList getTomThumbList(TreeControlNode p_Node) { - TreeControlNode oParent; - ItemTomThumb oThumb; - - TreeControlNode oNode = p_Node; - ArrayList alTomThumb = new ArrayList(); - // Loop on each parent - do { - // Get parent - oParent = oNode.getParent(); - // Verify parent exist - if (oParent != null) { - // Verify parent is not empty or root node - if (("ROOT-NODE".equalsIgnoreCase(oParent.getName()) == false) && (oParent.getLabel() != null)) { - // Get Thumb infos - oThumb = new ItemTomThumb(); - oThumb.setLabel(oParent.getLabel()); - oThumb.setIcon(oParent.getIcon()); - if (oParent.getAction() != null) { - oThumb.setLink(((HttpServletResponse) pageContext.getResponse()).encodeURL((( - HttpServletRequest) pageContext.getRequest()).getContextPath() + "/" - + oParent.getAction())); - } - // Add to thumb's list - alTomThumb.add(oThumb); - } - } - // Next parent - oNode = oParent; - } - while (oParent != null); - - return alTomThumb; - } - - class ItemTomThumb { - private String label = null; - private String link = null; - private String icon = null; - - public ItemTomThumb() { - - } - - public ItemTomThumb(String p_Label, String p_Link, String p_Icon) { - setLabel(p_Label); - setLink(p_Link); - setIcon(p_Icon); - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public String getLink() { - return link; - } - - public void setLink(String link) { - this.link = link; - } - - public String getIcon() { - return icon; - } - - public void setIcon(String icon) { - this.icon = icon; - } - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeBuilder.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeBuilder.java deleted file mode 100644 index 2795a906f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeBuilder.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.taglib; - -/** - *

Interface for Admin Tree Controller to build plugin components - * into the tree - * - * @author Jazmin Jonson - * @version - */ - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts.action.ActionServlet; - - - -public interface TreeBuilder { - public void buildTree(TreeControl treeControl, ActionServlet servlet - , HttpServletRequest request); -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControl.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControl.java deleted file mode 100644 index 76dfcfe627..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControl.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.Serializable; -import java.util.HashMap; - -/** - *

The overall data structure representing a tree control - * that can be rendered by the TreeControlTag custom tag. - * Each node of the tree is represented by an instance of - * TreeControlNode.

- * - * @author Jazmin Jonson - * @author Craig R. McClanahan - * @version $Revision: 1.4 - */ - -public class TreeControl implements Serializable { - public static final String ID_PREFIX = "treenode"; - -// ----------------------------------------------------------- Constructors - - /** - * Construct a new instance with no predefined root node. - */ - public TreeControl() { - super(); - setRoot(null); - } - - /** - * Construct a new instance with the specified root node. - * - * @param root The new root node - */ - public TreeControl(TreeControlNode root) { - super(); - setRoot(root); - } - -// ----------------------------------------------------- Instance Variables - - /** - * The collection of nodes that represent this tree, keyed by name. - */ - protected HashMap registry = new HashMap(); - - /** - * The most recently selected node. - */ - protected TreeControlNode selected = null; - - // Id - protected int mi_Id = 0; - -// ------------------------------------------------------------- Properties - - /** - * The root node of the entire tree. - */ - protected TreeControlNode root = null; - - public TreeControlNode getRoot() { - return (this.root); - } - - protected void setRoot(TreeControlNode root) { - if (this.root != null) { - removeNode(this.root); - } - if (root != null) { - addNode(root); - } - root.setLast(true); - this.root = root; - } - - /** - * The current displayable "width" of this tree (that is, the maximum - * depth of the visible part of the tree). - */ - public int getWidth() { - if (root == null) { - return (0); - } - else { - return (getWidth(root)); - } - } - -// --------------------------------------------------------- Public Methods - - /** - * Find and return the TreeControlNode for the specified - * node name, if it exists; otherwise, return null. - * - * @param name Name of the TreeControlNode to be returned - */ - public TreeControlNode findNode(String name) { - synchronized (registry) { - return ((TreeControlNode) registry.get(name)); - } - } - - /** - * Mark the specified node as the one-and-only currently selected one, - * deselecting any previous node that was so marked. - * - * @param node Name of the node to mark as selected, or null - * if there should be no currently selected node - */ - public void selectNode(String name) { - if (selected != null) { - selected.setSelected(false); - selected = null; - } - selected = findNode(name); - if (selected != null) { - selected.setSelected(true); - } - } - - /** - * Get the last node selected. - * - * @return the current node selected - */ - public TreeControlNode getSelected() { - return selected; - } - - /** - * Expand a branch in the tree of the selected node. - */ - public void expandSelectedParents() { - TreeControlNode oCur = getSelected(); - while (oCur != null){ - oCur = oCur.getParent(); - if (oCur != null) { - oCur.setExpanded(true); - } - } - } - - public String newId() { - StringBuffer sbRet = new StringBuffer(ID_PREFIX); - sbRet.append(mi_Id); - mi_Id++; - return sbRet.toString(); - } - -// -------------------------------------------------------- Package Methods - - /** - * Register the specified node in our registry of the complete tree. - * - * @param node The TreeControlNode to be registered - * - * @exception IllegalArgumentException if the name of this node - * is not unique - */ - void addNode(TreeControlNode node) - throws IllegalArgumentException { - synchronized (registry) { - String name = node.getName(); - if (registry.containsKey(name)) { - throw new IllegalArgumentException("Name '" + name + "' is not unique"); - } - node.setTree(this); - registry.put(name, node); - // Refresh expand info - autoRefresh(node); - } - } - - /** - * Calculate the width of the subtree below the specified node. - * - * @param node The node for which to calculate the width - */ - int getWidth(TreeControlNode node) { - int width = node.getWidth(); - if (!node.isExpanded()) { - return (width); - } - TreeControlNode children[] = node.findChildren(); - for (int i = 0; i < children.length; i++) { - int current = getWidth(children[i]); - if (current > width) { - width = current; - } - } - return (width); - } - - /** - * Deregister the specified node, as well as all child nodes of this - * node, from our registry of the complete tree. If this node is not - * present, no action is taken. - * - * @param node The TreeControlNode to be deregistered - */ - void removeNode(TreeControlNode node) { - synchronized (registry) { - TreeControlNode children[] = node.findChildren(); - for (int i = 0; i < children.length; i++) { - removeNode(children[i]); - } - TreeControlNode parent = node.getParent(); - if (parent != null) { - parent.removeChild(node); - } - node.setParent(null); - node.setTree(null); - if (node == this.root) { - this.root = null; - } - registry.remove(node.getName()); - // Save removed node in list - addRemovedList(node); - } - } - - /** - * List to save removed node used by the auto-refresh mode. - * - */ - private HashMap m_RemovedList = null; - - /** - * Disable auto-refresh mode. - */ - public void disableAutoRefresh() { - if (m_RemovedList != null) { - m_RemovedList.clear(); - } - m_RemovedList = null; - } - - /** - * Enable auto-refresh mode. - * When a set of children are refreshed (removed then added), - * the expanded info is copied of the removed node to the added node. - * The name is used to retreive the good node. - * By default, the auto-refresh mode is disabled. - * Be careful, enabled this mode before the remove of all nodes and - * disabled it after the add. - */ - public void enableAutoRefresh() { - m_RemovedList = new HashMap(); - } - - /** - * Add the removed node in the removed list. - * - * @param p_RemovedNode The removed node - */ - void addRemovedList(TreeControlNode p_RemovedNode) { - if (m_RemovedList != null) { - m_RemovedList.put(p_RemovedNode.getName(), p_RemovedNode); - } - } - - /** - * Search the added node in the removed list and if it's found, copy the expanded info. - * - * @param p_AddedNode The added node - */ - protected void autoRefresh(TreeControlNode p_AddedNode) { - if (m_RemovedList != null) { - TreeControlNode oRemove = (TreeControlNode) m_RemovedList.get(p_AddedNode.getName()); - if (oRemove != null) { - p_AddedNode.setExpanded(oRemove.isExpanded()); - } - } - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlNode.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlNode.java deleted file mode 100644 index 6e19d53fd8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlNode.java +++ /dev/null @@ -1,399 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.Serializable; -import java.util.ArrayList; - - -/** - *

An individual node of a tree control represented by an instance of - * TreeControl, and rendered by an instance of - * TreeControlTag.

- * - * @author Jazmin Jonson - * @author Craig R. McClanahan - * @version $Revision: 11749 $ - */ - -public class TreeControlNode implements Serializable { - -// ----------------------------------------------------------- Constructors - - /** - * Construct a new TreeControlNode with the specified parameters. - * - * @param name Internal name of this node (must be unique within - * the entire tree) - * @param icon Pathname of the image file for the icon to be displayed - * when this node is visible, relative to the image directory - * for our images - * @param label The label that will be displayed to the user if - * this node is visible - * @param action The hyperlink to be selected if the user - * selects this node, or null if this node's label should - * not be a hyperlink - * @param target The window target in which the action - * hyperlink's results will be displayed, or null for - * the current window - * @param expanded Should this node be expanded? - */ - public TreeControlNode(String name, String icon, String label, String action, String target - , boolean expanded) { - - super(); - this.name = name; - this.icon = icon; - this.label = label; - this.action = action; - this.target = target; - this.expanded = expanded; - - } - - public TreeControlNode(TreeControlNode p_Node) { - super(); - this.name = p_Node.getName(); - this.icon = p_Node.getIcon(); - this.label = p_Node.getLabel(); - this.action = p_Node.getAction(); - this.target = p_Node.getTarget(); - this.expanded = p_Node.isExpanded(); - } - -// ----------------------------------------------------- Instance Variables - - /** - * The set of child TreeControlNodes for this node, in the - * order that they should be displayed. - */ - protected ArrayList children = new ArrayList(); - -// ------------------------------------------------------------- Properties - - /** - * The hyperlink to which control will be directed if this node - * is selected by the user. - */ - protected String action = null; - - public String getAction() { - return (this.action); - } - - /** - * Is this node currently expanded? - */ - protected boolean expanded = false; - - public boolean isExpanded() { - return (this.expanded); - } - - public void setExpanded(boolean expanded) { - this.expanded = expanded; - } - - /** - * The pathname to the icon file displayed when this node is visible, - * relative to the image directory for our images. - */ - protected String icon = null; - - public String getIcon() { - return (this.icon); - } - - /** - * The label that will be displayed when this node is visible. - */ - protected String label = null; - - public String getLabel() { - return (this.label); - } - - /** - * Is this the last node in the set of children for our parent node? - */ - protected boolean last = false; - - public boolean isLast() { - return (this.last); - } - - void setLast(boolean last) { - this.last = last; - } - - /** - * Is this a "leaf" node (i.e. one with no children)? - */ - public boolean isLeaf() { - synchronized (children) { - return (children.size() < 1); - } - } - - /** - * The unique (within the entire tree) name of this node. - */ - protected String name = null; - - public String getName() { - return (this.name); - } - - /** - * The parent node of this node, or null if this - * is the root node. - */ - protected TreeControlNode parent = null; - - public TreeControlNode getParent() { - return (this.parent); - } - - void setParent(TreeControlNode parent) { - this.parent = parent; - if (parent == null) { - width = 1; - } - else { - width = parent.getWidth() + 1; - } - } - - /** - * Is this node currently selected? - */ - protected boolean selected = false; - - public boolean isSelected() { - return (this.selected); - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - - /** - * The window target for the hyperlink identified by the - * action property, if this node is selected - * by the user. - */ - protected String target = null; - - public String getTarget() { - return (this.target); - } - - /** - * The TreeControl instance representing the - * entire tree. - */ - protected TreeControl tree = null; - - public TreeControl getTree() { - return (this.tree); - } - - void setTree(TreeControl tree) { - this.tree = tree; - } - - /** - * The display width necessary to display this item (if it is visible). - * If this item is not visible, the calculated width will be that of our - * most immediately visible parent. - */ - protected int width = 0; - - public int getWidth() { - return (this.width); - } - -// --------------------------------------------------------- Public Methods - - /** - * Add a new child node to the end of the list. - * - * @param child The new child node - * - * @exception IllegalArgumentException if the name of the new child - * node is not unique - */ - public void addChild(TreeControlNode child) - throws IllegalArgumentException { - - tree.addNode(child); - child.setParent(this); - synchronized (children) { - int n = children.size(); - if (n > 0) { - TreeControlNode node = (TreeControlNode) children.get(n - 1); - node.setLast(false); - } - child.setLast(true); - children.add(child); - } - - } - - /** - * Add a new child node at the specified position in the child list. - * - * @param offset Zero-relative offset at which the new node - * should be inserted - * @param child The new child node - * - * @exception IllegalArgumentException if the name of the new child - * node is not unique - */ - public void addChild(int offset, TreeControlNode child) - throws IllegalArgumentException { - - tree.addNode(child); - child.setParent(this); - synchronized (children) { - children.add(offset, child); - } - - } - - /** - * Return the set of child nodes for this node. - */ - public TreeControlNode[] findChildren() { - - synchronized (children) { - TreeControlNode results[] = new TreeControlNode[children.size()]; - return ((TreeControlNode[]) children.toArray(results)); - } - - } - - /** - * Remove this node from the tree. - */ - public void remove() { - - if (tree != null) { - tree.removeNode(this); - } - - } - - /** - * Remove the child node (and all children of that child) at the - * specified position in the child list. - * - * @param offset Zero-relative offset at which the existing - * node should be removed - */ - public void removeChild(int offset) { - - synchronized (children) { - TreeControlNode child = (TreeControlNode) children.get(offset); - tree.removeNode(child); - child.setParent(null); - children.remove(offset); - } - - } - - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getName()); - sb.append(" - "); - sb.append(isExpanded()); - - return sb.toString(); - } - -// -------------------------------------------------------- Package Methods - - /** - * Remove the specified child node. It is assumed that all of the - * children of this child node have already been removed. - * - * @param child Child node to be removed - */ - void removeChild(TreeControlNode child) { - - if (child == null) { - return; - } - synchronized (children) { - int n = children.size(); - for (int i = 0; i < n; i++) { - if (child == (TreeControlNode) children.get(i)) { - children.remove(i); - return; - } - } - } - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlRenderTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlRenderTag.java deleted file mode 100644 index ef0d9d76c6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlRenderTag.java +++ /dev/null @@ -1,375 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Michel-Ange ANTON - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.net.URLEncoder; - -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; - - - - - -public class TreeControlRenderTag extends TreeControlTag { - /** - * The names of tree state images that we need. - */ - static final String IMAGE_NODE_OPEN = "node_open.gif"; - static final String IMAGE_NODE_OPEN_FIRST = "node_open_first.gif"; - static final String IMAGE_NODE_OPEN_MIDDLE = "node_open_middle.gif"; - static final String IMAGE_NODE_OPEN_LAST = "node_open_last.gif"; - static final String IMAGE_NODE_CLOSE = "node_close.gif"; - static final String IMAGE_NODE_CLOSE_FIRST = "node_close_first.gif"; - static final String IMAGE_NODE_CLOSE_MIDDLE = "node_close_middle.gif"; - static final String IMAGE_NODE_CLOSE_LAST = "node_close_last.gif"; - static final String IMAGE_BLANK = "noline.gif"; - static final String IMAGE_LINE_FIRST = "line_first.gif"; - static final String IMAGE_LINE_LAST = "line_last.gif"; - static final String IMAGE_LINE_MIDDLE = "line_middle.gif"; - static final String IMAGE_LINE_VERTICAL = "line.gif"; - -// --------------------------------------------------------- Instance Variables - - /** - * Flag who indicate when the first node is rendered. - */ - private boolean mb_FirstNodeRendered; - private int mi_MaxChar; - -// --------------------------------------------------------- Public Methods - - /** - * Render this tree control. - * - * @exception JspException if a processing error occurs - */ - @Override - public int doEndTag() - throws JspException { - /* - mb_FirstNodeRendered = false; - return super.doEndTag(); - */ - - TreeControl treeControl = getTreeControl(); - JspWriter out = pageContext.getOut(); - try { - out.print(""); - int level = 0; - mb_FirstNodeRendered = false; - mi_MaxChar = 0; - TreeControlNode node = treeControl.getRoot(); - render(out, node, level, treeControl.getWidth(), true); - - // Avoid bug Netscape 4 - out.print(""); - for (int i = 0; i < treeControl.getWidth() + 2; i++) { - out.print(""); - } - StringBuffer sb = new StringBuffer(""); - out.print(sb.toString()); - out.println(""); - - out.println("
"); - for (int i = 0; i < (mi_MaxChar + 1); i++) { - sb.append("  "); - } - sb.append("
"); - } - catch (IOException e) { - throw new JspException(e); - } - return (EVAL_PAGE); - - } - -// ------------------------------------------------------ Protected Methods - - /** - * Render the specified node, as controlled by the specified parameters. - * - * @param out The JspWriter to which we are writing - * @param node The TreeControlNode we are currently - * rendering - * @param level The indentation level of this node in the tree - * @param width Total displayable width of the tree - * @param last Is this the last node in a list? - * - * @exception IOException if an input/output error occurs - */ - @Override - protected void render(final JspWriter out, final TreeControlNode node, final int level, final int width, final boolean last) - throws IOException { - HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); - - // if the node is root node and the label value is - // null, then do not render root node in the tree. - - if ("ROOT-NODE".equalsIgnoreCase(node.getName()) && (node.getLabel() == null)) { - // Render the children of this node - TreeControlNode children[] = node.findChildren(); - int firstIndex = children.length - 1; - int lastIndex = children.length - 1; - int newLevel = level + 1; - for (int i = 0; i < children.length; i++) { - render(out, children[i], newLevel, width, i == lastIndex); - } - return; - } - - // Render the beginning of this node - out.println(" "); - - // Create the appropriate number of indents - for (int i = 0; i < level; i++) { - int levels = level - i; - TreeControlNode parent = node; - for (int j = 1; j <= levels; j++) { - if (parent.getParent() != null) { - parent = parent.getParent(); - } - } - if (parent.isLast()) { - out.print(" "); - } - else { - out.print(" "); - } - out.println(); - } - - // Render the tree state image for this node - - // HACK to take into account special characters like = and & - // in the node name, could remove this code if encode URL - // and later request.getParameter() could deal with = and & - // character in parameter values. - String encodedNodeName = URLEncoder.encode(node.getName(),"UTF-8"); - - String action = replace(getAction(), "${name}", encodedNodeName); - - String updateTreeAction = replace(getAction(), "tree=${name}", "select=" + encodedNodeName); - updateTreeAction = ((HttpServletResponse) pageContext.getResponse()).encodeURL( - updateTreeAction); - - out.print(" "); - if ((action != null) && !node.isLeaf()) { - out.print(""); - } - out.print(""); - if ((action != null) && !node.isLeaf()) { - out.print(""); - } - out.println(""); - - // Calculate the hyperlink for this node (if any) - String hyperlink = null; - if (node.getAction() != null) { - hyperlink = ((HttpServletResponse) pageContext.getResponse()).encodeURL(node.getAction()); - } - - // Render the icon for this node (if any) - out.print(" "); - - // Anchor name - out.print(""); - - if (node.getIcon() != null) { - if (hyperlink != null) { - out.print(""); - } - out.print(""); - if (hyperlink != null) { - out.print(""); - } - } - out.println(""); - - // Render the label for this node (if any) - int iColspan = width - level + 1; - if (iColspan > 1) { - out.print(" "); - } - else { - out.print(" "); - } - if (node.getLabel() != null) { - if (node.getLabel().length() > mi_MaxChar) { - mi_MaxChar = node.getLabel().length(); - } - // Note the leading space so that the text has some space - // between it and any preceding images - out.print(" "); - String labelStyle = null; - if (node.isSelected() && (styleSelected != null)) { - labelStyle = styleSelected; - } - else if (!node.isSelected() && (styleUnselected != null)) { - labelStyle = styleUnselected; - } - if (hyperlink != null) { - out.print(""); - } - else if (labelStyle != null) { - out.print(""); - } - out.print(node.getLabel()); - if (hyperlink != null) { - out.print(""); - } - else if (labelStyle != null) { - out.print(""); - } - } - out.println(""); - - // Render the end of this node - out.println(" "); - // Remember the first node is rendered - mb_FirstNodeRendered = true; - - // Render the children of this node - if (node.isExpanded()) { - TreeControlNode children[] = node.findChildren(); - int lastIndex = children.length - 1; - int newLevel = level + 1; - for (int i = 0; i < children.length; i++) { - render(out, children[i], newLevel, width, i == lastIndex); - } - } - - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlTag.java deleted file mode 100644 index 2f1d4ebcb2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/TreeControlTag.java +++ /dev/null @@ -1,557 +0,0 @@ -/* - * $Header$ - * $Revision: 11749 $ - * $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - * - * ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.net.URLEncoder; - -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.TagSupport; - - -/** - *

JSP custom tag that renders a tree control represented by the - * TreeControl and TreeControlNode classes. - * This tag has the following user-settable attributes:

- *
    - *
  • action - Hyperlink to which expand/contract actions - * should be sent, with a string "${node} marking where - * the node name of the affected node should be included.
  • - *
  • images - Name of the directory containing the images - * for our icons, relative to the page including this tag. If not - * specified, defaults to "images".
  • - *
  • scope - Attribute scope in which the tree - * attribute is to be found (page, request, session, application). If - * not specified, the attribute is searched for in all scopes.
  • - *
  • style - CSS style class to be applied - * to be applied to the entire rendered output of the tree control. - * If not specified, no style class is applied.
  • - *
  • styleSelected - CSS style class to be - * applied to the text of any element that is currently selected. If not - * specified, no additional style class is applied.
  • - *
  • styleUnselected - CSS style class to be - * applied to the text of any element that is not currently selected. - * If not specified, no additional style class is applied.
  • - *
  • tree - Attribute name under which the - * TreeControl bean of the tree we are rendering - * is stored, in the scope specified by the scope - * attribute. This attribute is required.
  • - *
- * - * FIXME - Internationalize the exception messages! - * - * @author Craig R. McClanahan - * @version $Revision: 11749 $ $Date: 2007-10-08 11:47:44 +0200 (lun 08 oct 2007) $ - */ - -public class TreeControlTag extends TagSupport { - - /** - * The default directory name for icon images. - */ - static final String DEFAULT_IMAGES = "images"; - - /** - * The names of tree state images that we need. - */ - static final String IMAGE_HANDLE_DOWN_LAST = "handledownlast.gif"; - static final String IMAGE_HANDLE_DOWN_MIDDLE = "handledownmiddle.gif"; - static final String IMAGE_HANDLE_RIGHT_LAST = "handlerightlast.gif"; - static final String IMAGE_HANDLE_RIGHT_MIDDLE = "handlerightmiddle.gif"; - static final String IMAGE_LINE_LAST = "linelastnode.gif"; - static final String IMAGE_LINE_MIDDLE = "linemiddlenode.gif"; - static final String IMAGE_LINE_VERTICAL = "linevertical.gif"; - -// ------------------------------------------------------------- Properties - - /** - * The hyperlink to be used for submitting requests to expand and - * contract tree nodes. The placeholder "${name}" will - * be replaced by the name property of the current - * tree node. - */ - protected String action = null; - - public String getAction() { - return (this.action); - } - - public void setAction(String action) { - this.action = action; - } - - /** - * The name of the directory containing the images for our icons, - * relative to the page including this tag. - */ - protected String images = DEFAULT_IMAGES; - - public String getImages() { - return (this.images); - } - - public void setImages(String images) { - this.images = images; - } - - /** - * The name of the scope in which to search for the tree - * attribute. Must be "page", "request", "session", or "application" - * (or null for an ascending-visibility search). - */ - protected String scope = null; - - public String getScope() { - return (this.scope); - } - - public void setScope(String scope) { - if (!"page".equals(scope) && !"request".equals(scope) && !"session".equals(scope) - && !"application".equals(scope)) { - throw new IllegalArgumentException("Invalid scope '" + scope + "'"); - } - this.scope = scope; - } - - /** - * The CSS style class to be applied to the entire tree. - */ - protected String style = null; - - public String getStyle() { - return (this.style); - } - - public void setStyle(String style) { - this.style = style; - } - - /** - * The CSS style class to be applied to the text - * of selected nodes. - */ - protected String styleSelected = null; - - public String getStyleSelected() { - return (this.styleSelected); - } - - public void setStyleSelected(String styleSelected) { - this.styleSelected = styleSelected; - } - - /** - * The CSS style class to be applied to the text - * of unselected nodes. - */ - protected String styleUnselected = null; - - public String getStyleUnselected() { - return (this.styleUnselected); - } - - public void setStyleUnselected(String styleUnselected) { - this.styleUnselected = styleUnselected; - } - - /** - * The name of the attribute (in the specified scope) under which our - * TreeControl instance is stored. - */ - protected String tree = null; - - public String getTree() { - return (this.tree); - } - - public void setTree(String tree) { - this.tree = tree; - } - -// --------------------------------------------------------- Public Methods - - /** - * Render this tree control. - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - - TreeControl treeControl = getTreeControl(); - JspWriter out = pageContext.getOut(); - try { - out.print(""); - int level = 0; - TreeControlNode node = treeControl.getRoot(); - render(out, node, level, treeControl.getWidth(), true); - out.println("
"); - } - catch (IOException e) { - throw new JspException(e); - } - - return (EVAL_PAGE); - - } - - /** - * Release all state information set by this tag. - */ - public void release() { - - this.action = null; - this.images = DEFAULT_IMAGES; - this.scope = null; - this.style = null; - this.styleSelected = null; - this.styleUnselected = null; - this.tree = null; - - } - -// ------------------------------------------------------ Protected Methods - - /** - * Return the TreeControl instance for the tree control that - * we are rendering. - * - * @exception JspException if no TreeControl instance can be found - */ - protected TreeControl getTreeControl() - throws JspException { - - Object treeControl = null; - if (scope == null) { - treeControl = pageContext.findAttribute(tree); - } - else if ("page".equals(scope)) { - treeControl = pageContext.getAttribute(tree, PageContext.PAGE_SCOPE); - } - else if ("request".equals(scope)) { - treeControl = pageContext.getAttribute(tree, PageContext.REQUEST_SCOPE); - } - else if ("session".equals(scope)) { - treeControl = pageContext.getAttribute(tree, PageContext.SESSION_SCOPE); - } - else if ("application".equals(scope)) { - treeControl = pageContext.getAttribute(tree, PageContext.APPLICATION_SCOPE); - } - if (treeControl == null) { - throw new JspException("Cannot find tree control attribute '" + tree + "'"); - } - else if (!(treeControl instanceof TreeControl)) { - throw new JspException("Invalid tree control attribute '" + tree + "'"); - } - else { - return ((TreeControl) treeControl); - } - - } - - /** - * Render the specified node, as controlled by the specified parameters. - * - * @param out The JspWriter to which we are writing - * @param node The TreeControlNode we are currently - * rendering - * @param level The indentation level of this node in the tree - * @param width Total displayable width of the tree - * @param last Is this the last node in a list? - * - * @exception IOException if an input/output error occurs - */ - protected void render(JspWriter out, TreeControlNode node, int level, int width, boolean last) - throws IOException { - - HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); - - // if the node is root node and the label value is - // null, then do not render root node in the tree. - - if ("ROOT-NODE".equalsIgnoreCase(node.getName()) && (node.getLabel() == null)) { - // Render the children of this node - TreeControlNode children[] = node.findChildren(); - int lastIndex = children.length - 1; - int newLevel = level + 1; - for (int i = 0; i < children.length; i++) { - render(out, children[i], newLevel, width, i == lastIndex); - } - return; - } - - // Render the beginning of this node - out.println(" "); - - // Create the appropriate number of indents - for (int i = 0; i < level; i++) { - int levels = level - i; - TreeControlNode parent = node; - for (int j = 1; j <= levels; j++) { - parent = parent.getParent(); - } - if (parent.isLast()) { - out.print(" "); - } - else { - out.print(" "); - } - out.println(); - } - - // Render the tree state image for this node - - // HACK to take into account special characters like = and & - // in the node name, could remove this code if encode URL - // and later request.getParameter() could deal with = and & - // character in parameter values. - String encodedNodeName = URLEncoder.encode(node.getName(),"UTF-8"); - - String action = replace(getAction(), "${name}", encodedNodeName); - - String updateTreeAction = replace(getAction(), "tree=${name}", "select=" + encodedNodeName); - updateTreeAction = ((HttpServletResponse) pageContext.getResponse()).encodeURL( - updateTreeAction); - - out.print(" "); - if ((action != null) && !node.isLeaf()) { - out.print(""); - } - out.print(""); - if ((action != null) && !node.isLeaf()) { - out.print(""); - } - out.println(""); - - // Calculate the hyperlink for this node (if any) - String hyperlink = null; - if (node.getAction() != null) { - hyperlink = ((HttpServletResponse) pageContext.getResponse()).encodeURL(node.getAction()); - - // Render the icon for this node (if any) - } - out.print(" "); - if (node.getIcon() != null) { - if (hyperlink != null) { - out.print(""); - } - out.print(""); - if (hyperlink != null) { - out.print(""); - } - } - - // Render the label for this node (if any) - - if (node.getLabel() != null) { - String labelStyle = null; - if (node.isSelected() && (styleSelected != null)) { - labelStyle = styleSelected; - } - else if (!node.isSelected() && (styleUnselected != null)) { - labelStyle = styleUnselected; - } - if (hyperlink != null) { - // Note the leading space so that the text has some space - // between it and any preceding images - out.print(" "); - } - else if (labelStyle != null) { - out.print(""); - } - out.print(node.getLabel()); - if (hyperlink != null) { - out.print(""); - } - else if (labelStyle != null) { - out.print(""); - } - } - out.println(""); - - // Render the end of this node - out.println(" "); - - // Render the children of this node - if (node.isExpanded()) { - TreeControlNode children[] = node.findChildren(); - int lastIndex = children.length - 1; - int newLevel = level + 1; - for (int i = 0; i < children.length; i++) { - render(out, children[i], newLevel, width, i == lastIndex); - } - } - - } - - /** - * Replace any occurrence of the specified placeholder in the specified - * template string with the specified replacement value. - * - * @param template Pattern string possibly containing the placeholder - * @param placeholder Placeholder expression to be replaced - * @param value Replacement value for the placeholder - */ - protected String replace(String template, String placeholder, String value) { - - if (template == null) { - return (null); - } - if ((placeholder == null) || (value == null)) { - return (template); - } - while (true) { - int index = template.indexOf(placeholder); - if (index < 0) { - break; - } - StringBuffer temp = new StringBuffer(template.substring(0, index)); - temp.append(value); - temp.append(template.substring(index + placeholder.length())); - template = temp.toString(); - } - return (template); - - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/WhereAreYouTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/WhereAreYouTag.java deleted file mode 100644 index bd02e436dc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/WhereAreYouTag.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.jsp.tagext.BodyTagSupport; - -import org.ow2.jonas.webapp.jonasadmin.WhereAreYou; - - -/** - * @author Michel-Ange ANTON - */ -public class WhereAreYouTag extends BodyTagSupport { - -// ----------------------------------------------------- Instance Variables - -// ----------------------------------------------------- Properties - - private boolean usingWhere = false; - - public boolean isUsingWhere() { - return usingWhere; - } - - public boolean getUsingWhere() { - return usingWhere; - } - - public void setUsingWhere(boolean usingWhere) { - this.usingWhere = usingWhere; - } - -// --------------------------------------------------------- Public Methods - - public String getSelectedNameNode() { - String sName = null; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - sName = oWhere.getSelectedNameNode(); - } - return sName; - } - - public TreeControlNode getSelectedTreeControlNode() { - TreeControlNode oNode = null; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - oNode = oWhere.getSelectedTreeControlNode(); - } - return oNode; - } - - public String getImagesRoot() { - String sImagesRoot = null; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - sImagesRoot = oWhere.getImagesRoot(); - } - return sImagesRoot; - } - - public boolean isTreeToRefresh() { - boolean bRefresh = false; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - bRefresh = oWhere.isTreeToRefresh(); - } - return bRefresh; - } - - public String getUrlToRefreshSelectedNode() { - String sUrl = null; - WhereAreYou oWhere = getWhereAreYouInstance(); - if (oWhere != null) { - sUrl = oWhere.getUrlToRefreshSelectedNode((HttpServletRequest) pageContext.getRequest() - , (HttpServletResponse) pageContext.getResponse()); - } - return sUrl; - } - -// --------------------------------------------------------- Protected Methods - - protected WhereAreYou getWhereAreYouInstance() { - return (WhereAreYou) pageContext.getSession().getAttribute(WhereAreYou.SESSION_NAME); - } -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XMLEditorTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XMLEditorTag.java deleted file mode 100644 index 0d5deabdea..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XMLEditorTag.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.util.Map; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.TagSupport; - -import org.ow2.jonas.webapp.jonasadmin.xml.XMLToFormUtil; -import org.w3c.dom.Document; - -/** - * A custom JSP tag to display a form view of an XML deployment descriptor. - * - * @author Gregory Lapouchnian - * @author Patrick Smith - */ -public class XMLEditorTag extends TagSupport { - - // ----------------------------------------------------- Instance Variables - - /** - * Mapping between IDs and Nodes within the Document tree. - */ - private Map mapping; - - /** - * The document to display in this tag. - */ - private Document document; - - /** - * The name of the archive from which the XML file is extracted. - */ - private String fileName; - - /** - * The path within the archive to the XML file. - */ - private String pathName; - - // ------------------------------------------------------------- Properties - - // --------------------------------------------------------- Public Methods - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getPathName() { - return pathName; - } - - public void setPathName(String pathName) { - this.pathName = pathName; - } - - public Document getDocument() { - return document; - } - - public void setDocument(Document xmlDocument) { - this.document = xmlDocument; - } - - public Map getMapping() { - return mapping; - } - - public void setMapping(Map mapping) { - this.mapping = mapping; - } - - public int doEndTag() throws JspException { - StringBuffer sb = new StringBuffer(); - - // get the form's HTML - XMLToFormUtil util = new XMLToFormUtil(); - String form = util.documentToForm(document, mapping); - - // make the last input field ID available to the JSP page - pageContext.setAttribute("lastNum", new Integer(util.getLastId())); - - // display the form - sb.append(form); - - // Render this element to our writer - JspWriter out = pageContext.getOut(); - try { - out.print(sb.toString()); - } catch (IOException e) { - throw new JspException("Exception in " + getClass().getName() - + " doEndTag():" + e.toString()); - } - return EVAL_PAGE; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XmlFileTag.java b/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XmlFileTag.java deleted file mode 100644 index 2d0f04a0e6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/java/org/ow2/jonas/webapp/taglib/XmlFileTag.java +++ /dev/null @@ -1,407 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.webapp.taglib; - -import java.io.IOException; -import java.util.StringTokenizer; - -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspWriter; -import javax.servlet.jsp.tagext.BodyTagSupport; - -/** - * @author Michel-Ange ANTON - */ -public class XmlFileTag extends BodyTagSupport { - -// ----------------------------------------------------- Constants - private static final int NONE = 0; - private static final int HEADER = 1; - private static final int ELEMENT = 2; - private static final int ELEMENT_AUTO_CLOSE = 3; - private static final int ELEMENT_CLOSE = 4; - private static final int COMMENT = 5; - private static final int TEXT = 6; -// ----------------------------------------------------- Instance Variables - - protected String m_Body = null; - protected int m_LastPrint = NONE; - protected int m_Indent = 0; - - //are we printing XML comment content - protected boolean comment = false; - -// ------------------------------------------------------------- Properties - -// --------------------------------------------------------- Public Methods - - /** - * Render this instant actions control. - * - * @exception JspException if a processing error occurs - */ - public int doEndTag() - throws JspException { - JspWriter out = pageContext.getOut(); - try { - String sXml = null; - // Get body - if (m_Body != null) { - sXml = m_Body; - m_Body = null; - } - // Display - if (sXml != null) { - m_LastPrint = NONE; - m_Indent = 0; - render(out, sXml, 0, sXml.length()); - } - } - catch (IOException e) { - throw new JspException(e); - } - return (EVAL_PAGE); - } - - public int doAfterBody() - throws JspException { - String sBody = bodyContent.getString(); - if (sBody != null) { - sBody = sBody.trim(); - if (sBody.length() > 0) { - this.m_Body = sBody; - } - } - return (SKIP_BODY); - } - - /** - * Release all state information set by this tag. - */ - public void release() { - m_Body = null; - } - -// -------------------------------------------------------- Protected Methods - - protected void render(JspWriter p_Out, String p_Xml, int p_Begin, int p_End) - throws IOException, JspException { - - int iCurrent = p_Begin; - int iBegin; - int iEnd; - String sElement; - String sElementWithAttr; - String sName; - char cType; - - for (; ; ) { - // Find begin element - iBegin = p_Xml.indexOf("<", iCurrent); - if ((iBegin == -1) || (iBegin >= p_End)) { - break; - } - // Find end element - iEnd = p_Xml.indexOf(">", iBegin); - if (iEnd == -1) { - break; - } - // render normal text - if (iBegin > iCurrent) { - String sText = p_Xml.substring(iCurrent, iBegin); - sText = sText.trim(); - if (sText.length() > 0) { - printText(p_Out, sText); - } - } - - // Get complete element - sElement = p_Xml.substring(iBegin, iEnd + 4); - // Detect special element (doctype, header, comment) - cType = sElement.charAt(4); - if ((cType == '!') || (cType == '?')) { - // Special element (doctype, header, comment) - if (cType == '!') { - // Detect comment - cType = sElement.charAt(5); - if (cType == '-') { - // Find actual end element - if we are dealing with comment - iEnd = p_Xml.indexOf("-->", iBegin); - if (iEnd == -1) { - break; - } - // set counter on proper value - iEnd = iEnd +2; - - // Get complete element - sElement = p_Xml.substring(iBegin, iEnd + 4); - - printComment(p_Out, sElement); - } - else { - printHeader(p_Out, sElement); - } - } - else { - printHeader(p_Out, sElement); - } - // Next - iCurrent = iEnd + 4; - } - else { - // get name of element - sElementWithAttr = sElement.substring(4, sElement.length() - 4); - sName = getNameElement(sElementWithAttr); - // Detect end element - if (sElementWithAttr.charAt(0) == '/') { - // Next - iCurrent = iEnd + 4; - break; - } - // Detect auto-end element - else if (sElementWithAttr.charAt(sElementWithAttr.length() - 1) == '/') { - printElementAutoClose(p_Out, sElement); - // Next - iCurrent = iEnd + 4; - } - else { - // Render element - printElement(p_Out, sElement); - // Search close element - String sCloseElement = "</" + sName + ">"; - int iPosCloseElement = p_Xml.indexOf(sCloseElement, iEnd); - if (iPosCloseElement == -1) { - // Error - break; - } - // render children element (or text) - render(p_Out, p_Xml, iEnd + 4, iPosCloseElement + sCloseElement.length()); - // render end element - printElementClose(p_Out, sCloseElement); - // Next - iCurrent = iPosCloseElement + sCloseElement.length(); - } - } - } - } - - protected void printElement(JspWriter p_Out, String p_Print) - throws IOException, JspException { - switch (m_LastPrint) { - case NONE: - case TEXT: - break; - case HEADER: - case ELEMENT: - case ELEMENT_AUTO_CLOSE: - case ELEMENT_CLOSE: - case COMMENT: - p_Out.print("
"); - break; - } - - printIndent(p_Out, m_Indent); - - // are we printing comment - if (!comment) - p_Out.print(""); - - p_Out.print(p_Print); - - // are we printing comment - if (!comment) - p_Out.print(""); - - m_LastPrint = ELEMENT; - m_Indent++; - } - - protected void printElementAutoClose(JspWriter p_Out, String p_Print) - throws IOException, JspException { - - switch (m_LastPrint) { - case NONE: - case TEXT: - break; - case HEADER: - case ELEMENT: - case ELEMENT_AUTO_CLOSE: - case ELEMENT_CLOSE: - case COMMENT: - p_Out.print("
"); - break; - } - printIndent(p_Out, m_Indent); - //are we printing comment - if (!comment) - p_Out.print(""); - - p_Out.print(p_Print); - - // are we printing comment - if (!comment) - p_Out.print(""); - - m_LastPrint = ELEMENT_AUTO_CLOSE; - } - - protected void printElementClose(JspWriter p_Out, String p_Print) - throws IOException, JspException { - - m_Indent--; - - switch (m_LastPrint) { - case NONE: - case ELEMENT: - case TEXT: - break; - case HEADER: - case ELEMENT_AUTO_CLOSE: - case ELEMENT_CLOSE: - case COMMENT: - p_Out.print("
"); - printIndent(p_Out, m_Indent); - break; - } - // are we printing comment - if (!comment) - p_Out.print(""); - - p_Out.print(p_Print); - - // are we printing comment - if (!comment) - p_Out.print(""); - - m_LastPrint = ELEMENT_CLOSE; - } - - protected void printComment(JspWriter p_Out, String p_Print) - throws IOException, JspException { - switch (m_LastPrint) { - case NONE: - break; - case HEADER: - case ELEMENT: - case ELEMENT_AUTO_CLOSE: - case ELEMENT_CLOSE: - case COMMENT: - case TEXT: - p_Out.print("
"); - break; - } - printIndent(p_Out, m_Indent); - p_Out.print(""); - - // take only comment content - p_Print = p_Print.substring(7,p_Print.length()-6).trim(); - // start printing commented element - p_Out.print("<!--"); - - // are we dealing with commented element - if (p_Print.indexOf("/>")==-1){ - // print simple comment text - p_Out.print(p_Print); - } else { - // set comment property value - disables elements - setComment(true); - // print commented element - render(p_Out, p_Print, 0, p_Print.length()-1); - p_Out.print("
"); - // turn back comment property value - enable elements again - setComment(false); - } - - // print comment ending - printIndent(p_Out, m_Indent); - p_Out.print("-->"); - - p_Out.print(""); - - m_LastPrint = COMMENT; - } - - protected void printHeader(JspWriter p_Out, String p_Print) - throws IOException, JspException { - switch (m_LastPrint) { - case NONE: - break; - case HEADER: - case ELEMENT: - case ELEMENT_AUTO_CLOSE: - case ELEMENT_CLOSE: - case COMMENT: - case TEXT: - p_Out.print("
"); - break; - } - // are we printing comment - if (!comment) - p_Out.print(""); - - p_Out.print(p_Print); - - // are we printing comment - if (!comment) - p_Out.print(""); - - m_LastPrint = HEADER; - } - - protected void printText(JspWriter p_Out, String p_Print) - throws IOException, JspException { - - // are we printing comment - if (!comment) - p_Out.print(""); - - p_Out.print(p_Print); - - // are we printing comment - if (!comment) - p_Out.print(""); - - m_LastPrint = TEXT; - } - - protected void printIndent(JspWriter p_Out, int p_Indent) - throws IOException, JspException { - for (int i = 0; i < p_Indent; i++) { - p_Out.print("  "); - } - } - - protected String getNameElement(String p_ElementWithAttr) { - StringTokenizer st = new StringTokenizer(p_ElementWithAttr, " "); - return st.nextToken(); - } - - protected void setComment(boolean value){ - // are we printing comment (enable/disable elements) - comment = value; - } - -} diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources.properties b/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources.properties deleted file mode 100644 index 481783d75f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources.properties +++ /dev/null @@ -1,1921 +0,0 @@ -title.application=JOnAS Administration -title.welcome=Welcome - -#--------------------------------------------------------------------------------------------------- - -errors.header= -errors.footer= - -#--------------------------------------------------------------------------------------------------- - -button.login=Login -button.reset=Reset -button.save=Save -button.refresh=Refresh -button.save.all=Save All -button.change=Change -button.cancel=Cancel -button.commit=Commit Changes -button.logout=Log Out -button.apply=Apply -button.execute=Execute -button.create=Create -button.confirm=Confirm -button.remove=Remove -button.push.right=>>> -button.push.left=<<< -button.upload=Upload -button.removeandsave=Remove & save - -#--------------------------------------------------------------------------------------------------- - -title.error.global=Global error -title.global=Global -title.thread.count=Threads Count -title.memory.load= Memory Load -title.memory.total= Total Memory -title.jonas.version=JOnAS Version -title.jvm.version= JVM Version -title.jvm.vendor= JVM Vendor -title.protocols=Protocols -title.modify=Modify -title.submit=Submit -title.jmx.connection.url=Jmx Connection URL -title.transactions=Transactions -title.transaction.begun=Transaction Begun -title.transaction.committed=Committed Transaction -title.transaction.current=Current Transaction -title.transaction.expired=Expired Transactions -title.transaction.rolledback=Rolled Back Transactions -#--------------------------------------------------------------------------------------------------- -title.deployment.item.selected=Selected item -#--------------------------------------------------------------------------------------------------- -title.cd.modify=Modify cluster daemon info -message.clusterd.server.none=No server affected -message.clusterd.none=No cluster daemon -#--------------------------------------------------------------------------------------------------- - -label.login.username=Username -label.login.password=Password -label.url=Jmx Url -label.cd.infos=Infos -label.cd.monitoring.os.infos=Operating system informations -label.cd.monitoring.os.name=OS name -label.cd.monitoring.os.architecture=OS architecture -label.cd.monitoring.os.availableprocessors=OS available processors -label.cd.monitoring.os.version=OS version -label.cd.monitoring.vm.memory.infos=Vm memory infos -label.cd.monitoring.vm.memory.used.graph=Used memory graph -#--------------------------------------------------------------------------------------------------- -error.login=Invalid username or password -error.login.tryagain=To try again, -error.login.clickhere=click here - -#--------------------------------------------------------------------------------------------------- -treenode.cd=Cluster Daemons -treenode.jonas.domain=Domain -treenode.jonas.domain.monitoring=Monitoring -treenode.jonas.server=Server JOnAS -treenode.jonas.server.monitoring=Monitoring -treenode.jonas.server.logging=Logging -treenode.jonas.server.logging.jonas=Jonas Logger -treenode.jonas.server.logging.tomcat=Tomcat Logger - -treenode.jonas.server.protocols=Web Protocols -treenode.jonas.server.protocols.connectors=Connectors - -treenode.jonas.server.services=Services -treenode.jonas.server.services.ear=Application Containers -treenode.jonas.server.services.ejbContainers=EJB Containers -treenode.jonas.server.services.ejb3Containers=EJB3 Containers -treenode.jonas.server.services.ejb2Containers=EJB2 Containers -treenode.jonas.server.services.web=Web Containers -treenode.jonas.server.services.database=Database Manager -treenode.jonas.server.services.db=Database -treenode.jonas.server.services.resource=Resource Adapters -treenode.jonas.server.services.transaction=Transaction -treenode.jonas.server.services.jms=Jms -treenode.jonas.server.services.jms.cf=Connection Factories -treenode.jonas.server.services.jms.queues=Queues -treenode.jonas.server.services.jms.topics=Topics -treenode.jonas.server.services.jmx=Jmx Service -treenode.jonas.server.services.registry=Registry Service -treenode.jonas.server.services.cmi=CMI -treenode.jonas.server.services.ha=HA -treenode.jonas.server.services.mail=Mail -treenode.jonas.server.services.mail.session=Session Factories -treenode.jonas.server.services.mail.mimepart=MimePartDatasource Factories -treenode.jonas.server.services.security=Security -treenode.jonas.server.services.discovery=Discovery -treenode.jonas.server.services.depmonitor=Deployment Monitor -treenode.jonas.server.services.workmanager=Work Manager -treenode.jonas.server.services.workcleaner=Work Cleaner -treenode.jonas.server.services.versioning=Versioning -treenode.jonas.server.services.webservices=Web Services -treenode.jonas.server.services.jaxrpc=JAX-RPC Service -treenode.jonas.server.services.jaxws=JAX-WS Service -treenode.jonas.server.services.wsdlpublisher=WSDL Publisher Service -treenode.jonas.server.services.smartclient=Smartclient - -tab.server.services.cmi=CMI -tab.server.services.cmi.cluster=CMI cluster -tab.server.services.cmi.cluster.objects=Objects -tab.server.services.cmi.object.infos=CMI object infos -tab.server.services.cmi.cluster.user=User defined cluster -tab.server.services.cmi.cluster.system=System cluster -tab.server.services.cmi.notRegistered=New cmi MBean is not registered -tab.server.services.cmi.protocols=Servers for each protocol -tab.server.services.cmi.refreshTime=Refresh time -tab.server.services.cmi.object.servers=Deployer servers -tab.server.services.cmi.object.LB.infos=Load balancing infos -tab.server.services.cmi.object.LB.policy.class=Policy class -tab.server.services.cmi.object.LB.policy.strategy=Policy strategy -tab.server.services.cmi.object.LB.policy.properties.simple=Simple policy properties -tab.server.services.cmi.object.pool.size.min=Min pool size -tab.server.services.cmi.object.pool.size.max=Max pool size -tab.server.services.cmi.object.pool.maxwaiters=Max pool waiters -tab.server.services.cmi.object.pool.timeout=pool timeout -tab.server.services.cmi.object.pool.infos=Pool infos -tab.server.services.cmi.cluster.system.comment=CMI uses this cluster to store internal global objects. -tab.server.services.cmi.protocol=CMI protocol -tab.server.services.cmi.cluster.servers=Servers -tab.server.services.cmi.server=CMI server -tab.server.services.cmi.server.blacklist=Blacklist -tab.server.services.cmi.server.unblacklist=Remove from blacklist -tab.server.services.cmi.server.loadfactor=Load factor - - -treenode.jonas.server.deployments=Deployment -treenode.jonas.server.deployments.ear=Applications (EAR) -treenode.jonas.server.deployments.jar=EJB Modules (JAR) -treenode.jonas.server.deployments.war=Web Modules (WAR) -treenode.jonas.server.deployments.rar=Resource Adapter Modules (RAR) -treenode.jonas.server.deployments.*=All Modules and XML -treenode.jonas.server.deployments.**=All Modules and XML -treenode.jonas.server.deployments.domain-ear=Applications (EAR) -treenode.jonas.server.deployments.domain-jar=EJB Modules (JAR) -treenode.jonas.server.deployments.domain-war=Web Modules (WAR) -treenode.jonas.server.deployments.domain-rar=Resource Adapter Modules (RAR) - -treenode.jonas.server.monitoring=Monitoring - -treenode.jonas.server.resources=Resources -treenode.jonas.server.resources.database=Database (JDBC) -treenode.jonas.server.resources.jms=JMS -treenode.jonas.server.resources.mail=Mail - -treenode.jonas.server.security=Security -treenode.jonas.server.security.factory.memory=Memory realm -treenode.jonas.server.security.factory.memory.users=Users -treenode.jonas.server.security.factory.memory.groups=Groups -treenode.jonas.server.security.factory.memory.roles=Roles -treenode.jonas.server.security.factory.datasource=Datasource realm -treenode.jonas.server.security.factory.ldap=Ldap realm - -treenode.jonas.server.security.catalina.realm=Tomcat realm - -treenode.allmbeans=MBeans -treenode.mbeans.j2ee=J2EE MBeans -treenode.mbeans.owner=Owner MBeans -treenode.mbeans.unknown=Other MBeans - -label.virtual.version=Version -label.virtual.policy=Policy -label.virtual.sessions=Active sessions -label.virtual.setAs=Set as... - -#--------------------------------------------------------------------------------------------------- - -comment.message.ifZeroNoLimit=If 0, there's no limit - -tab.domain=Domain -tab.cluster=Cluster -title.domain.action=Action -action.button.domain.add.server=Add server -action.button.domain.start.server=Start -action.button.domain.stop.server=Stop -action.button.domain.halt.server=Halt -action.button.domain.stopstandby.server=Stop & standby -action.button.domain.startstandby.server=Start & standby -action.button.domain.start.cluster=Start all -action.button.domain.stop.cluster=Stop all -action.button.domain.ping.cluster=Ping all -action.button.domain.create.cluster=Create cluster -action.button.domain.remove.server=Remove server -action.button.domain.move.server=Move server -action.button.domain.undeploy.module=Undeploy module -tab.domain.server.add=Add server -tab.cd.server.add=Add server to Cluster Daemon -tab.domain.cluster.create=Create cluster -label.domain.name=Name -label.domain.range=Range -label.domain.interface=Interface -label.cd.configureServer= Configure Server for Cluster Daemon -label.cluster.type=Type -label.domain.properties=properties -label.domain.description=Description -label.domain.domainName=Domain name -label.domain.parentName=Parent name -label.domain.master=Master server -label.domain.currentServer=JonasAdmin's server -label.domain.totalServers=Total number of servers -label.domain.servers=Servers -label.domain.clusters=Clusters -label.domain.cdps=Cluster Daemons -label.domain.modules=Deployed modules -label.domain.modules.name=Name -label.domain.modules.targets=Targets -message.global.page.onBuild= This Page Is On Build -message.domain.servers.none=No other server in this domain! -message.cd.present.config.server.true=Server is in cluster daemon config file. -message.domain.clusters.none=No clusters in this domain! -message.domain.clds.none=No cluster daemons in this domain! -message.domain.clds.free.none=No server to affect -message.domain.modules.none=No modules deployed in this domain! -message.cluster.servers.none=No servers in this cluster! -message.cluster.clusters.none=No sub-clusters in this cluster! -message.cluster.modules.none=No modules in this cluster! -message.domain.apply.servers.none=No servers found ! -message.domain.apply.modules.none=No modules selected! -label.domain.serverName=Server name -comment.domain.add.serverName= -label.domain.serverURL=Connector server URL -comment.domain.add.serverURL= -label.domain.clusterDaemonName=Cluster daemon name (optional) -comment.domain.add.clusterDaemonName= -label.domain.serverCld=Cluster daemon (optional) -comment.domain.add.serverCld= -label.domain.serverUsername=User name (optional) -comment.domain.add.serverUsername= -label.domain.serverPassword=Password (optional) -comment.domain.add.serverPassword= -label.domain.serverPasswordAgain=Password (again) (optional) -comment.domain.add.serverPasswordAgain= -label.domain.clusterName=Cluster name -label.domain.parentClusterName=Parent cluster name -comment.domain.create.clusterName= -label.domain.move.server=Server -label.domain.move.from=From -get.label.domain.move.cluster=To -error.logger.domain.servername.required=
  • Server name required
  • -error.logger.domain.serverurl.required=
  • Connector server URL required
  • -error.logger.domain.passwords.mismatch=
  • The passwords don't match
  • - - -action.button.service.start=Start -action.button.service.stop=Stop -action.button.services.refresh=Refresh - -tab.server.jonas=Properties -label.server.jonas.jonasName=Server name -label.server.jonas.jonasVersion=Implementation version -label.server.jonas.protocols=Protocols -label.server.jonas.state=State -label.server.jonas.versions=Integrated components versions -label.server.jonas.serverservlet=Server servlet -action.title.server.jonas=Actions -action.button.server.jonas.rungc=Run -action.comment.server.jonas.rungc=Run the garbage collector -action.button.server.jonas.stop=Stop -action.comment.server.jonas.stop=Stop the JOnAS server -error.server.jonas.serverName.bad=Invalid server name {0} -error.server.jonas.jvms=No JVM J2EEManagedObject found - -tab.server.versions=Versions - -tab.server.jmx=JMX Properties -label.server.jmx.MBeanServerId=MBean server ID -label.server.jmx.SpecificationName=Specification -label.server.jmx.SpecificationVersion=Specification Version -label.server.jmx.SpecificationVendor=Specification Vendor -label.server.jmx.ImplementationName=Implementation -label.server.jmx.ImplementationVersion=Implementation Version -label.server.jmx.ImplementationVendor=Implementation Vendor - -tab.server.registry=Registry -title.server.registry.providerUrl=Provider URL -title.server.registry.protocol=Protocol -title.server.registry.providersUrl=Providers -label.server.registry.providerUrl=URL -title.server.registry.jndi.names=JNDI Names -message.server.registry.none=No names registered in JNDI! -message.server.registry.cmi.none=No names registered in cmi JNDI! - -tab.server.servlet=Servlet Server -label.server.servlet.name=Name -label.server.servlet.version=Version -label.server.servlet.catalina.service=Service -label.server.servlet.catalina.engine=Engine -label.server.servlet.catalina.default.host=Default host - -tab.server.jvm=JVM -label.server.jvm.Version=Java Version -label.server.jvm.Vendor=Java Vendor -label.server.jvm.Node=Node - -title.server.servlet.catalina.action=Action -title.server.servlet.catalina.action.save.warning=Warning -message.server.servlet.catalina.action.save.explanation=The Apache Tomcat servlet server saves all the modified configuration data in the configuration file. -message.server.servlet.catalina.action.save.explanation.list=Now, if you click on Save All button, you store :
  • All defined connectors
  • The HTTP Access logger (if defined)
  • All defined contexts for Web Applications
  • -message.server.servlet.catalina.action.save.verify=Verify your configuration before saving all ! -message.server.servlet.catalina.action.save.cancel=You can use the Cancel button to return to the previous page. - -logger.jonas.name=JOnAS logger -logger.catalina.access.name=Access log valve - -tab.loggers=Loggers -title.loggers.action=Action -button.loggers.catalina.access.create=New Access log valve -title.loggers.name=Logger type -title.loggers.container=Container type -title.loggers.container.name=Container name (or path) -label.loggers.container.engine=Engine -label.loggers.container.engine.name=engine -label.loggers.container.host=Host -label.loggers.container.context=Web module -tab.loggers.confirm=Confirm -message.loggers.none=No logger found ! - -tab.logging.jonas=Topics -tab.logging.view_recent=View Recent Log -message.logging.view.nobuffer=Can't find MBean for logs view. Check 'jmx' handler usage in Monolog. -message.logging.view.buffer=Found MBean for logs view. -title.logging.jonas.view.recent=Recent records -label.logging.jonas.view.recent.date.latest=Date of latest record -label.logging.jonas.view.recent.date.oldest=Date of oldest record -label.logging.jonas.view.errors=Errors -label.logging.jonas.view.warnings=Warnings -label.logging.jonas.view.other=Other -button.logging.jonas.view.recent=Refresh -get.title.logging.jonas=Change a topic's level -get.label.logging.jonas.topic=Topic -get.label.logging.jonas.level=Level -list.title.logging.jonas.levels=Levels -list.title.logging.jonas.topics=Topics - -tab.logger.catalina.access=Access Log Valve -label.logger.catalina.access.containerType=Container -comment.logger.catalina.access.containerType=Container to which the access log is associated -label.logger.catalina.access.containerName=Container name -comment.logger.catalina.access.containerName=Name of the container -label.logger.catalina.access.directory=Directory -comment.logger.catalina.access.directory=The directory in which log files are created -label.logger.catalina.access.prefix=Filename prefix -comment.logger.catalina.access.prefix=The prefix name of the log file -error.logger.catalina.access.prefix.required=
  • Filename prefix required
  • -label.logger.catalina.access.suffix=Filename suffix -comment.logger.catalina.access.suffix=The suffix name of the log file -label.logger.catalina.access.resolveHosts=Resolve Hosts -comment.logger.catalina.access.resolveHosts=Flag to indicate automatic host name resolving -label.logger.catalina.access.rotatable=Rotatable -comment.logger.catalina.access.rotatable=Flag to indicate automatic log rotation -label.logger.catalina.access.pattern=Pattern -comment.logger.catalina.access.pattern=The pattern used to format our access log lines.
    The following pattern codes are supported:
    %a - Remote IP address
    %A - Local IP address
    %b - Bytes sent, excluding HTTP headers, or '-' if zero
    %B - Bytes sent, excluding HTTP headers
    %h - Remote host name (or IP address if resolveHosts is false)
    %H - Request protocol
    %l - Remote logical username from identd (always returns '-')
    %m - Request method (GET, POST, etc.)
    %p - Local port on which this request was received
    %q - Query string (prepended with a '?' if it exists)
    %r - First line of the request (method and request URI)
    %s - HTTP status code of the response
    %S - User session ID
    %t - Date and time, in Common Log Format
    %u - Remote user that was authenticated (if any), else '-'
    %U - Requested URL path
    %v - Local server name -error.logger.catalina.access.pattern.required=
  • Pattern required
  • -error.logger.catalina.access.log.engine.alreadypresent=
  • AccessLogValve already associated to the Engine
  • -error.logger.catalina.access.log.nohost=
  • There is no Host having this name
  • -error.logger.catalina.access.log.host.alreadypresent=
  • AccessLogValve already associated to this Host
  • - -tab.monitoring.general=General -get.title.monitoring.general=Activation -get.label.monitoring.general.activated=Activated monitoring -list.title.monitoring.general=JOnAS server all thread groups -list.label.monitoring.general.allThreadsCount=Total number of threads - -tab.monitoring.memory=Memory -get.title.monitoring.memory=Tuning -get.label.monitoring.memory.numberOfMeasures=Number of measures -get.label.monitoring.memory.range=Range -error.monitoring.memory.numberOfMeasures=
  • Number of measures could not be <= 1
  • -error.monitoring.memory.range=
  • Range could not be < 10
  • - -tab.monitoring.stackdump=StackDump - -get.label.monitoring.displaynode.test1=test1 -get.label.monitoring.displaynode.test2=test2 - -tab.catalina.connectors=Connectors -title.catalina.connectors.action=Action -button.catalina.connectors.create.http=New HTTP -button.catalina.connectors.create.https=New HTTPS -button.catalina.connectors.create.ajp=New AJP -button.catalina.connectors.remove=Remove -label.catalina.connectors.port=Port -label.catalina.connectors.address=Address -label.catalina.connectors.type=Type - -tab.catalina.connectors.confirm=Confirm -message.catalina.connectors.none=No connector found ! - -tab.catalina.connector.new.http=New Http connector -tab.catalina.connector.new.https=New Https connector -tab.catalina.connector.new.ajp=New Ajp connector -error.catalina.connector.select.bad=
  • Invalid connector name : {0}
  • -error.catalina.connector.exists=
  • Connector already exists
  • - -tab.catalina.connector=Connector -title.catalina.connector.general=General -label.catalina.connector.type=Type -label.catalina.connector.type.http=HTTP -label.catalina.connector.type.https=HTTPS -label.catalina.connector.type.ajp=AJP/JK -label.catalina.connector.scheme=Scheme -label.catalina.connector.accept.count=Accept Count -label.catalina.connector.allow.trace=Allow Trace -label.catalina.connector.empty.sessionpath=Empty Session Path -label.catalina.connector.max.post.size=Max Bytes in a Post -label.catalina.connector.connection.timeout=Connection Timeout -label.catalina.connector.protocol=Coyote Protocol Handler -label.catalina.connector.secure=Secure (SSL) Connector -label.catalina.connector.uri.encoding=URI Encoding -label.catalina.connector.use.bodyencoding.for.uri=Use Body Encoding for URI -label.catalina.connector.xpoweredby=X-Powered-By Generation Enabled -label.catalina.connector.output.buffer=Output Buffer Size -label.catalina.connector.input.buffer=Input Buffer Size -label.catalina.connector.buffer=Buffer Size -label.catalina.connector.enable.dns=Enable DNS Lookups -label.catalina.connector.tcp.nodelay=Should we use TCP no delay -label.catalina.connector.address.ip=IP Address -title.catalina.connector.port=Port -label.catalina.connector.portnumber=Port Number -label.catalina.connector.redirect.portnumber=Redirect Port Number -title.catalina.connector.threads=Threads -label.catalina.connector.minSpare=Minimum Spare Threads -label.catalina.connector.milliseconds=milliseconds -label.catalina.connector.maxSpare=Maximum Spare Threads -label.catalina.connector.max=Maximum Threads -title.catalina.connector.proxy=Proxy -label.catalina.connector.proxy.name=Proxy Name -label.catalina.connector.proxy.portnumber=Proxy Port Number -title.catalina.connector.factory=Factory properties -label.catalina.connector.algorithm=Encoding algorithm -label.catalina.connector.client.auth=Client Authentication -label.catalina.connector.keystore.filename=Keystore Filename -label.catalina.connector.keystore.password=Keystore Password -label.catalina.connector.keystore.type=Keystore Type -label.catalina.connector.sslprotocol=SSL Protocol -label.catalina.connector.ciphers=Encription Ciphers -label.catalina.connector.keyPass.warning=
  • Please use keytool to generate certificate.
  • - -error.catalina.connector.portNumber.required=
  • PortNumber cannot be empty
  • -error.catalina.connector.portNumber.format=
  • PortNumber not a valid integer!
  • -error.catalina.connector.portNumber.range=
  • PortNumber out of range.
  • -error.catalina.connector.acceptCountText.required=
  • Accept count required
  • -error.catalina.connector.acceptCountText.format=
  • Accept count not a valid integer!
  • -error.catalina.connector.acceptCountText.range=
  • Accept count out of range.
  • -error.catalina.connector.connTimeOutText.required=
  • Connection time out required
  • -error.catalina.connector.connTimeOutText.format=
  • Connection time out not a valid integer!
  • -error.catalina.connector.connTimeOutText.range=
  • Connection time out of range.
  • -error.catalina.connector.bufferSizeText.required=
  • Buffer Size required
  • -error.catalina.connector.bufferSizeText.format=
  • Buffer Size not a valid integer!
  • -error.catalina.connector.bufferSizeText.range=
  • Buffer Size out of range.
  • -error.catalina.connector.address.invalid=
  • IP Address invalid
  • -error.catalina.connector.redirectPortText.required=
  • Redirect Port Number cannot be empty
  • -error.catalina.connector.redirectPortText.format=
  • Redirect Port Number not a valid integer!
  • -error.catalina.connector.redirectPortText.range=
  • Redirect Port Number out of range.
  • -error.catalina.connector.minSpareThreadsText.required=
  • Minimum Spare Threads cannot be empty
  • -error.catalina.connector.minSpareThreadsText.format=
  • Minimum Spare Threads not a valid integer!
  • -error.catalina.connector.minSpareThreadsText.range=
  • Minimum Spare Threads out of range.
  • -error.catalina.connector.maxSpareThreadsText.required=
  • Maximum Spare Threads cannot be empty
  • -error.catalina.connector.maxSpareThreadsText.format=
  • Maximum Spare Threads not a valid integer!
  • -error.catalina.connector.maxSpareThreadsText.range=
  • Maximum Spare Threads out of range.
  • - -error.catalina.connector.maxThreadsText.required=
  • Maximum Threads cannot be empty
  • -error.catalina.connector.maxThreadsText.format=
  • Maximum Threads not a valid integer!
  • -error.catalina.connector.maxThreadsText.range=
  • Maximum Threads seems out of range. Valid range is 1-512. Also, maximum >= minimum.
  • - -error.catalina.connector.proxyName.invalid=
  • Proxy name is invalid
  • -error.catalina.connector.proxyPortText.required=
  • Proxy Port Number cannot be empty
  • -error.catalina.connector.proxyPortText.format=
  • Proxy Port Number not a valid integer!
  • -error.catalina.connector.proxyPortText.range=
  • Proxy Port Number seems out of range. Valid range is 1-65535.
  • - - -tab.services=Services -title.services.name=Name -title.services.description=Description -title.services.deployed=Deployed - -tab.appcontainers=Application Containers -message.appcontainers.none=No application container found ! -list.label.appcontainers.file=File -list.label.appcontainers.path=Path - -tab.ejbcontainers=EJB Containers -message.ejbcontainers.none=No EJB container found ! -label.ejbcontainers.name=Name -label.ejbcontainers.file=File -label.ejbcontainers.path=Path - -tab.ejbcontainers.statistic=Statistics -title.ejbcontainers.statistic=Statistics on all EJB Containers -label.ejbcontainers.statistic.totalCurrentNumberOfBeanType=All EJB -label.ejbcontainers.statistic.totalCurrentNumberOfBMPType=Entity with Bean-Managed Persistence -label.ejbcontainers.statistic.totalCurrentNumberOfCMPType=Entity with Container-Managed Persistence -label.ejbcontainers.statistic.totalCurrentNumberOfEntityType=Entity Bean -label.ejbcontainers.statistic.totalCurrentNumberOfSBFType=Stateful Session Bean -label.ejbcontainers.statistic.totalCurrentNumberOfSBLType=Stateless Session Bean -label.ejbcontainers.statistic.totalCurrentNumberOfMDBType=Message Driven Bean - -tab.ejbcontainers.monitoring=Monitoring - -tab.container=Container -title.container=Properties -label.container.name=Name -label.container.path=Path -title.container.ear=In Ear - -tab.container.statistic=Statistics -title.container.statistic=Statistics on {0} container -label.container.statistic.currentNumberOfBeanType=All EJB -label.container.statistic.currentNumberOfBMPType=Entity with Bean-Managed Persistence -label.container.statistic.currentNumberOfCMPType=Entity with Container-Managed Persistence -label.container.statistic.currentNumberOfEntityType=Entity Bean -label.container.statistic.currentNumberOfSBFType=Stateful Session Bean -label.container.statistic.currentNumberOfSBLType=Stateless Session Bean -label.container.statistic.currentNumberOfMDBType=Message Driven Bean - -tab.container.ejbs=EJBs -message.container.ejbs.none=No EJB found ! -label.container.ejbs.name=Name -label.container.ejbs.type=Type - -ejb.fulltype.Bmp=Entity with Bean-Managed Persistence -ejb.fulltype.Cmp=Entity with Container-Managed Persistence -ejb.fulltype.Sbf=Stateful Session Bean -ejb.fulltype.Sbl=Stateless Session Bean -ejb.fulltype.Mdb=Message Driven Bean - - -tab.ejb=EJB -title.ejb.action=Action -label.ejb.name=Name -label.ejb.file=File -label.ejb.type=Type -title.ejb.monitoring=Monitoring -label.ejb.monitoring.monitoringSettingsDefinedInDD=Monitoring settings defined in DD ? -label.ejb.monitoring.monitoringEnabled=Monitoring enabled ? -label.ejb.monitoring.warningThreshold=Warning threshold (in millis) -label.ejb.monitoring.applySettingsTo=Apply new monitoring settings to -label.ejb.monitoring.applySettingsTo.none=Only to EJBs deployed after this change -label.ejb.monitoring.applySettingsTo.nonDD=All EJBs except the ones with values in the DDs -label.ejb.monitoring.applySettingsTo.all=All EJBs -label.ejb.monitoring.numberOfCalls=Number of calls -label.ejb.monitoring.totalBusinessProcessingTime=Total business processing time (in millis) -label.ejb.monitoring.averageBusinessProcessingTime=Average business processing time (in millis) -label.ejb.monitoring.totalProcessingTime=Total processing time (in millis) -label.ejb.monitoring.averageProcessingTime=Average processing time (in millis) -title.ejb.naming=Naming and Classes -label.ejb.naming.class=EJB class -label.ejb.naming.jndiName=EJB JNDI Name -label.ejb.naming.homeClass=EJB HomeClass -label.ejb.naming.remoteClass=EJB RemoteClass -label.ejb.naming.localHomeClass=EJB LocalHomeClass -label.ejb.naming.localClass=EJB LocalClass -label.ejb.virtual.prefix=JNDI prefix -title.ejb.type.entity=Entity Configuration -button.ejb.type.entity.synchronize=Synchronize -button.ejb.type.entity.reduceCache=Reduce instances -label.ejb.type.entity.persistancy=Persistency -comment.ejb.type.entity.persistancy=Type of Persistency (CMP/BMP) -label.ejb.type.entity.passivationTimeOut=Passivation Timeout -comment.ejb.type.entity.passivationTimeOut=Value in seconds -label.ejb.type.entity.inactivityTimeOut=Inactivity Timeout -comment.ejb.type.entity.inactivityTimeOut=Maximum time of inactivity (in sec.) before freeing objects -label.ejb.type.entity.shared=Shared -comment.ejb.type.entity.shared=True if bean accessed outside this ejb server. -label.ejb.type.entity.prefetch=Prefetch -comment.ejb.type.entity.prefetch=True if prefetch optimization wanted. -label.ejb.type.entity.hardLimit=HardLimit -comment.ejb.type.entity.hardLimit=True if max-cache-size is a hard limit -label.ejb.type.entity.lockPolicy=Lock Policy -comment.ejb.type.entity.lockPolicy=one among CS/CRC/RO/DB/CRW/CST -label.ejb.type.entity.memory.minPoolSize=Min Pool size -comment.ejb.type.entity.minPoolSize=Nb of instances preallocated -label.ejb.type.entity.memory.maxCacheSize=Max Cache Size -comment.ejb.type.entity.maxCacheSize=Max nb of instances in memory -title.ejb.memory=Memory Management -label.ejb.memory.poolSize=Pool size -comment.ejb.memory.poolSize=Current nb of free instances -label.ejb.memory.cacheSize=Cache size -comment.ejb.memory.cacheSize=Total nb of instances in memory -label.ejb.type.entity.instance.usedInTxInstance=Used in TX -comment.ejb.type.entity.instance.usedInTxInstance=Current nb of instances used inside transactions -label.ejb.type.entity.instance.usedOutTxInstance=Used outside TX -comment.ejb.type.entity.instance.usedOutTxInstance=Current nb of instances used outside transaction -label.ejb.type.entity.instance.unusedInstance=Unused but ready -comment.ejb.type.entity.instance.unusedInstance=Current nb of unused, ready instances -label.ejb.type.entity.instance.pkNumber=PK number -comment.ejb.type.entity.instance.pkNumber=Total nb of PK in memory -label.ejb.type.entity.instance.passivatedInstance=Passivated -comment.ejb.type.entity.instance.passivated=Current nb of passivated instances -label.ejb.type.entity.instance.removedInstance=Marked removed -comment.ejb.type.entity.instance.removedInstance=Current nb of instances marked removed -title.ejb.type.session=Session Configuration -label.ejb.type.session.sessionTimeOut=Current session TimeOut -title.ejb.type.session.instance=Instances -label.ejb.type.session.instanceMinSizePool=Min size of pool -label.ejb.type.session.instanceMaxSizePool=Max size of pool -label.ejb.type.session.instanceCurrentNumber=Number instances -button.ejb.type.session.sbl.reduceCache=Reduce instances -title.ejb.type.message=Mdb Configuration - -default.ejb.type.session.sessionTimeOut=No limit -default.ejb.type.session.instanceMaxSizePool=No limit - -label.ejb.type.message.mdbJMSAssociateDestinationName=JMS Destination name -label.ejb.type.message.minPoolSize=Min Pool Size -label.ejb.type.message.maxCacheSize=Max Cache Size -comment.ejb.type.message.mdbJMSAssociateDestinationName= -comment.ejb.type.message.sessionTimeOut= - -tab.ejb.dependency=Dependency -title.ejb.dependency.datasource=Datasource -title.ejb.dependency.jms.connection=JMS Connection factory -title.ejb.dependency.jms.destination=JMS Destination -title.ejb.dependency.mail.session=Session mail factory -title.ejb.dependency.mail.mime=MimePartDataSource mail factory - -tab.webcontainers=Web Containers -message.webcontainers.none=No Web Container found ! -title.webcontainers.action=Action -button.webcontainers.context.create=New web container -label.webcontainers.context=Context -label.webcontainers.deployed=Deployed -label.webcontainers.file=Container -label.webcontainers.path=Path -tab.webcontainers.confirm=Confirm - -tab.webapp=Web context -title.webapp.action=Action -tab.webapp.create=New web application -title.webapp.context=Context -label.webapp.context.path=Path -label.webapp.context.host=Host -label.webapp.context.name=Name -label.webapp.context.started=Started - -button.webapp.reload=Reload -button.webapp.start=Start -button.webapp.stop=Stop - -title.webapp.setting=Setting -label.webapp.setting.available=Available -comment.webapp.setting.available=Web application available for the public -label.webapp.setting.cookies=Cookies -comment.webapp.setting.cookies=Use cookies for session id communication -label.webapp.setting.reloadable=Reloadable -comment.webapp.setting.reloadable=Allow to reload automatically the web application -label.webapp.setting.swallowOutput=Swallow output -comment.webapp.setting.swallowOutput=Cause the system.out and system.err to be redirected to the logger when executing a servlet -label.webapp.setting.crossContext=Cross context -comment.webapp.setting.crossContext=Allow the ServletContext.getContext() method to access the context of other web applications in this server -label.webapp.setting.override=Override -comment.webapp.setting.override=Allow the DefaultContextoverride flag for this Web application -label.webapp.setting.sessionTimeout=Session timeout -comment.webapp.setting.sessionTimeout=The timeout of a session in minutes - -error.webapp.context.required=
  • Path context cannot be empty
  • -error.webapp.context.exists=
  • Path context already exists
  • -error.webapp.setting.sessionTimeout.required=
  • Session timeout cannot be empty
  • -error.webapp.setting.sessionTimeout.format=
  • Session timeout not a valid integer !
  • -error.webapp.setting.sessionTimeout.range=
  • Session timeout seems out of range. Valid range is 1-65535.
  • - -error.webapp.reload=
  • Impossible to reload this web application ! Is the web application running ?
  • -error.webapp.start=
  • Impossible to start this web application ! Is the web application running ?
  • -error.webapp.stop=
  • Impossible to stop this web application ! Is the web application running ?
  • - -error.ejb.type.session.sessionTimeOut.required=
  • Session timeout cannot be empty
  • -error.ejb.type.session.sessionTimeOut.format=
  • Session timeout not a valid integer !
  • -error.ejb.type.session.sessionTimeOut.range=
  • Session timeout seems out of range. Valid range is 1-65535.
  • - -tab.war=War -title.war.container=Web container -label.war.hostName=Host name -label.war.warFile=File -label.war.warPath=Path -label.war.contextRoot=Context root -label.war.java2DelegationModel=Java 2 delegation model -title.war.ear=In application container -label.war.inEarCase=inEarCase -label.war.earPath=Ear path - - -tab.war.servlets=Servlets -label.war.servlets.number=Number of servlets -title.war.servlets.name=Name - -tab.war.xmlContent=Web xml -tab.war.jonasXmlContent=JOnAS xml - -tab.ear=Ear -title.ear=Application -label.ear.file=File -label.ear.path=Path - -tab.ear.wars=Web -title.ear.wars.filename=File -title.ear.wars.name=Name -title.ear.wars.path=Path - -tab.ear.jars=Ejb -title.ear.jars.filename=File -title.ear.jars.path=Path -title.ear.jars.name=Name - -tab.ear.rars=Resource Adapter -title.ear.rars.filename=File -title.ear.rars.name=Name -title.ear.rars.path=Path - -tab.ear.xmlDeploymentDescriptor=Deployment descriptor - -tab.rar=Rar -title.rar=Resource Adapter -label.rar.file=File -label.rar.path=Path -title.rar.ear=In application -label.rar.ear.path=Path -title.rar.properties=Properties -error.rar.notfound=
  • Resource adapter file not found : {0}
  • -title.rar.pooling=Connection pooling configuration -title.rar.poolState=Connections Pool State -title.rar.waitersStat=Statistics on waiters -title.rar.getConnectionStat=Statistics on getConnection operations -title.rar.openPhysConn=Connection to database statistics -label.rar.currentOpened=Current pool size -comment.rar.currentOpened=Physically opened connections -label.rar.currentBusy=Busy connections -comment.rar.currentBusy=Number of connections currently in use -label.rar.currentInTx=Busy in transactions -comment.rar.currentInTx=Number of connections used inside transactions -label.rar.busyMin=Min busy in last period -comment.rar.busyMin=Minimum number of busy connections in the last sampling period -label.rar.busyMax=Max busy in last period -comment.rar.busyMax=Maximum number of busy connections in the last sampling period -label.rar.openedCount=Number of connections -comment.rar.openedCount=Total number of connection operations -label.rar.connectionFailures=Number of failures -comment.rar.connectionFailures=Total number of failures when trying to make a connection -label.rar.connectionLeaks=Connection leaks -comment.rar.connectionLeaks=Number of connections which were closed without being requested by their user -label.rar.currentWaiters=Current number of waiters -comment.rar.currentWaiters=Number of waiters for a connection -label.rar.waitersHigh=Max waiters -comment.rar.waitersHigh=Maximum number of waiters since pool creation -label.rar.waitersHighRecent=Max waiters in last period -comment.rar.waitersHighRecent=Maximum number of waiters in the last sampling period -label.rar.waiterCount=Total waiters -comment.rar.waiterCount=Total number of waiters since pool creation -label.rar.waitingHigh=Max waiting time -comment.rar.waitingHigh=Maximum waiting time (in millisec) since pool creation -label.rar.waitingHighRecent=Max waiting in last period -comment.rar.waitingHighRecent=Maximum waiting time (in millisec) in the last sampling period -label.rar.waitingTime=Total waiting -comment.rar.waitingTime=Total waiting time (in millisec) since pool creation -label.rar.servedOpen=Served connections -comment.rar.servedOpen=Total number of served getConnection operations -label.rar.rejectedOpen=Rejected connections -comment.rar.rejectedOpen=Total number of rejected getConnection operations -label.rar.rejectedFull=By waiter overflow -comment.rar.rejectedFull=Number of rejected getConnection due to waiter overflow -label.rar.rejectedTimeout=By waiter timeout -comment.rar.rejectedTimeout=Number of rejected getConnection due to waiter timeout -label.rar.rejectedOther=By any other reason -comment.rar.rejectedOther=Number of rejected getConnection due to any other reason - -tab.rar.cf=Connection Factories -title.rar.cf=Connection Factories -title.rar.cf.name=Name -title.rar.cf.description=Description - -tab.rar.as=ActivationSpecs -title.rar.as=ActivationSpecs -title.rar.as.name=Name -title.rar.as.description=Description - -tab.rar.ao=Admin Objects -title.rar.ao=Admin Objects -title.rar.ao.name=Name -title.rar.ao.description=Description - -tab.resourceadapters=Resource Adapters -message.resourceadapters.none=No resource adapter found ! -label.resourceadapters.name=Name -label.resourceadapters.file=File -label.resourceadapters.path=Path - -tab.resourceadapter=Resource Adapter -title.resourceadapter=Resource Adapter -label.resourceadapter.name=Name -label.resourceadapter.file=File -label.resourceadapter.path=Path -label.resourceadapter.jndiname=JNDI Name -title.resourceadapter.ear=In application -label.resourceadapter.ear.path=Path -label.resourceadapter.rarlink=RAR Link -title.resourceadapter.properties=Properties -title.resourceadapter.joram.server=Joram server -title.resourceadapter.reqProperties=Required Properties -error.resourceadapter.notfound=
  • Resource adapter file not found : {0}
  • -label.resourceadapter.description=Description -title.resourceadapter.cf=Connection Factory -title.resourceadapter.as=Activation Spec -title.resourceadapter.ao=Admin Object -label.resourceadapter.space= -title.resourceadapter.pooling=Pool properties -title.resourceadapter.jdbcConnection=JDBC connection properties -label.resourceadapter.pstmtMax=Prepared statements max -comment.resourceadapter.pstmtMax=Maximum size of prepared statements cache -label.resourceadapter.initConnPool=Pool initial size -comment.resourceadapter.initConnPool=Initial size of the connection pool -error.resourceadapter.initConnPool.numberformat=
  • Pool initial size must be a number
  • -label.resourceadapter.minConnPool=Pool initial size -comment.resourceadapter.minConnPool=Initial size of the connection pool -label.resourceadapter.minConnPool=Pool minimum -comment.resourceadapter.minConnPool=Minimum size of the connection pool -error.resourceadapter.minConnPool.numberformat=
  • Pool minimum must be a number
  • -label.resourceadapter.maxConnPool=Pool maximum -comment.resourceadapter.maxConnPool=Maximum size of the connection pool (-1 = no max) -error.resourceadapter.maxConnPool.numberformat=
  • Pool maximum must be a number
  • -label.resourceadapter.connMaxAge=Maximum age -comment.resourceadapter.connMaxAge=Connection maximum age (Value in minutes) -error.resourceadapter.connMaxAge.numberformat=
  • Max age must be a number
  • -label.resourceadapter.maxOpentime=Maximum open time -comment.resourceadapter.maxOpentime=Connection maximum open time (Value in minutes) -error.resourceadapter.maxOpentime.numberformat=
  • Max open time must be a number
  • -label.resourceadapter.maxWaiters=Max Waiters -comment.resourceadapter.maxWaiters=Maximum number of concurrent waiters for a Connection -error.resourceadapter.maxWaiters.numberformat=
  • Max Waiters must be a number
  • -label.resourceadapter.maxWaitTime=Max Wait Time -comment.resourceadapter.maxWaitTime=Maximum time in seconds to wait for a Connection (0 = no wait) -error.resourceadapter.maxWaitTime.numberformat=
  • Max Wait Time must be a number
  • -label.resourceadapter.samplingPeriod=Sampling Period -comment.resourceadapter.samplingPeriod=Sampling Period in seconds -error.resourceadapter.samplingPeriod.numberformat=
  • Sampling Period must be a number
  • -label.resourceadapter.adjustPeriod=Adjust Period -comment.resourceadapter.adjustPeriod=Adjust Period in seconds -error.resourceadapter.adjustPeriod.numberformat=
  • Adjust Period must be a number
  • -title.resourceadapter.jdbc=JDBC resource adapter configuration (if applicable) -label.resourceadapter.jdbcConnCheckLevel=Checking level -comment.resourceadapter.jdbcConnCheckLevel=JDBC connection checking level:
    0 = no special checking
    1 = check before reuse if physical connection is still open
    2 = try every connection before reuse
    3 = keep alive (send test statement every sampling period) -label.resourceadapter.jdbcTestStatement=Test -comment.resourceadapter.jdbcTestStatement=SQL query for test statement - -tab.resourceadapter.rar.usedby=Used by -title.resourceadapter.rar.usedby.ejb=Ejb -title.resourceadapter.rar.usedby.type=Type -title.resourceadapter.rar.usedby.container=Container - -tab.resourceadapter.rar.statistics=Statistics - -tab.database.datasources=Datasources -message.database.datasources.none=No datasource found ! -title.database.datasources.name=Name -title.database.datasources.jndiName=JDNI name -title.database.datasources.jdbcConnectionOpened=JDBC Connection - -tab.database.datasource=Datasource -title.database.datasource.poolState=JDBC Connections Pool State -title.database.datasource.waitersStat=Statistics on waiters -title.database.datasource.getConnectionStat=Statistics on getConnection operations -title.database.datasource.openPhysConn=Connection to database statistics -label.database.datasource.currentOpened=Current pool size -comment.database.datasource.currentOpened=Physically opened JDBC Connections -label.database.datasource.currentBusy=Busy connections -comment.database.datasource.currentBusy=Number of connections currently in use -label.database.datasource.currentInTx=Busy in transactions -comment.database.datasource.currentInTx=Number of connections used inside transactions -label.database.datasource.busyMin=Min busy in last period -comment.database.datasource.busyMin=Minimum number of busy connections in the last sampling period -label.database.datasource.busyMax=Max busy in last period -comment.database.datasource.busyMax=Maximum number of busy connections in the last sampling period -label.database.datasource.openedCount=Number of connections -comment.database.datasource.openedCount=Total number of connection operations to the database -label.database.datasource.connectionFailures=Number of failures -comment.database.datasource.connectionFailures=Total number of failures when trying to connect to the database -label.database.datasource.connectionLeaks=Connection leaks -comment.database.datasource.connectionLeaks=Number of connections which were closed without being requested by their user -label.database.datasource.currentWaiters=Current number of waiters -comment.database.datasource.currentWaiters=Number of waiters for a connection -label.database.datasource.waitersHigh=Max waiters -comment.database.datasource.waitersHigh=Maximum number of waiters since pool creation -label.database.datasource.waitersHighRecent=Max waiters in last period -comment.database.datasource.waitersHighRecent=Maximum number of waiters in the last sampling period -label.database.datasource.waiterCount=Total waiters -comment.database.datasource.waiterCount=Total number of waiters since pool creation -label.database.datasource.waitingHigh=Max waiting time -comment.database.datasource.waitingHigh=Maximum waiting time (in millisec) since pool creation -label.database.datasource.waitingHighRecent=Max waiting in last period -comment.database.datasource.waitingHighRecent=Maximum waiting time (in millisec) in the last sampling period -label.database.datasource.waitingTime=Total waiting -comment.database.datasource.waitingTime=Total waiting time (in millisec) since pool creation -label.database.datasource.servedOpen=Served connections -comment.database.datasource.servedOpen=Total number of served getConnection operations -label.database.datasource.rejectedOpen=Rejected connections -comment.database.datasource.rejectedOpen=Total number of rejected getConnection operations -label.database.datasource.rejectedFull=By waiter overflow -comment.database.datasource.rejectedFull=Number of rejected getConnection due to waiter overflow -label.database.datasource.rejectedTimeout=By waiter timeout -comment.database.datasource.rejectedTimeout=Number of rejected getConnection due to waiter timeout -label.database.datasource.rejectedOther=By any other reason -comment.database.datasource.rejectedOther=Number of rejected getConnection due to any other reason -title.database.datasource.config=JDBC Datasource configuration -title.database.driver.config=JDBC Driver configuration -title.database.datasource.config.jdbc=JDBC connection configuration -label.database.datasource.datasourceName=Name -label.database.datasource.dsName=JNDI name -label.database.datasource.datasourceDescription=Description -label.database.datasource.url=URL -label.database.driver.className=Driver class name -label.database.datasource.userName=User name -label.database.datasource.password=User password -label.database.datasource.datasourceFactory=Factory -label.database.datasource.mapper=Mapper -label.database.datasource.jdbcConnMaxAge=Maximum age -comment.database.datasource.jdbcConnMaxAge=JDBC connection maximum age (Value in minutes) -error.database.datasource.jdbcConnMaxAge.numberformat=
  • Max age must be a number
  • -label.database.datasource.jdbcMaxOpenTime=Maximum open time -comment.database.datasource.jdbcMaxOpenTime=JDBC connection maximum open time (Value in minutes) -error.database.datasource.jdbcMaxOpenTime.numberformat=
  • Max open time must be a number
  • -label.database.datasource.jdbcConnCheckLevel=Checking level -comment.database.datasource.jdbcConnCheckLevel=JDBC connection checking level:
    0 = no special checking
    1 = check before reuse if physical connection is still open
    2 = try every connection before reuse -label.database.datasource.jdbcTestStatement=Test -comment.database.datasource.jdbcTestStatement=SQL query for test statement -label.database.datasource.jdbcMinConnPool=Pool minimum -comment.database.datasource.jdbcMinConnPool=Minimum size of the connection pool -error.database.datasource.jdbcMinConnPool.numberformat=
  • Pool minimum must be a number
  • -label.database.datasource.jdbcMaxConnPool=Pool maximum -comment.database.datasource.jdbcMaxConnPool=Maximum size of the connection pool (-1 = no max) -error.database.datasource.jdbcMaxConnPool.numberformat=
  • Pool maximum must be a number
  • -label.database.datasource.jdbcMaxWaitTime=Max Wait Time -comment.database.datasource.jdbcMaxWaitTime=Maximum time in seconds to wait for a jdbc Connection (0 = no wait) -error.database.datasource.jdbcMaxWaitTime.numberformat=
  • Max Wait Time must be a number
  • -label.database.datasource.jdbcMaxWaiters=Max Waiters -comment.database.datasource.jdbcMaxWaiters=Maximum number of concurrent waiters for a jdbc Connection -error.database.datasource.jdbcMaxWaiters.numberformat=
  • Max Waiters must be a number
  • -label.database.datasource.jdbcPstmtMax=Pstmt Pool Max -comment.database.datasource.jdbcPstmtMax=Maximum Size for the pool of Prepared Statements -error.database.datasource.jdbcPstmtMax.numberformat=
  • Pstmt Pool Max must be a number
  • -label.database.datasource.jdbcSamplingPeriod=Sampling Period -comment.database.datasource.jdbcSamplingPeriod=Sampling Period in seconds -error.database.datasource.jdbcSamplingPeriod.numberformat=
  • Sampling Period must be a number
  • -label.database.datasource.jdbcAdjustPeriod=Adjust Period -comment.database.datasource.jdbcAdjustPeriod=Pool Adjustment Period in seconds -error.database.datasource.jdbcAdjustPeriod.numberformat=
  • Adjust Period must be a number
  • - -tab.database.datasource.usedby=Used by -title.database.datasource.usedby.ejb=Ejb -title.database.datasource.usedby.type=Type -title.database.datasource.usedby.container=Container - -tab.database.datasource.statistics=Statistics - -tab.service.discovery=Discovery -action.title.discovery=Actions -label.service.discovery.multicastaddress=Multicast address -label.service.discovery.multicastport=Multicast port -label.service.discovery.multicastttl=Multicast ttl -label.service.discovery.ismaster=Is master -action.comment.service.discovery.start=Start discovery master -action.button.service.discovery.start=Start - -tab.service.security=Realms -title.service.security.realm.name=Name -title.service.security.realm.type=Type -title.service.security.realm.path=Context path -title.service.security.realm.used=Used -label.service.security.realm.type.unknown=unknown -label.service.security.realm.path.unknown=? -message.service.security.realm.notused=Security realm not used - -#--------------------------------------------------------------------------------------------------- - -title.config.confirmed=Configuration Saved - -tab.configure=Configure -tab.config.confirm=Confirm -tab.archiveConfigForm=Form View -tab.archiveConfigAdvanced=Advanced View - -label.config.switchTo=Switch To: - -button.config.switchToForm=Switch To Form View -button.config.switchToAdvanced=Switch To Advanced View -button.config.configure=Configure - -message.config.selectArchive=Select an archive to configure: -message.config.archiveName=Archive Name: -message.config.fileName=File Name: -message.config.confirmation=Are you sure you want to remove this element? -message.config.none=No deployable archives available. -message.config.archiveConfig=Archive Configuration - -error.config.noselect=An archive and a deployment descriptor must be selected. -#--------------------------------------------------------------------------------------------------- - -tab.deployment=Deployment -button.deployment.deploy=>>> -button.deployment.undeploy=<<< -label.deployment.deployable=Deployable -label.deployment.deployed=Deployed -label.deployment.apps=Applications -label.deployment.targets=Targets - -tab.deployment.confirm=Confirm -tab.deployment.result=Result -title.deployment.confirm.deployed=Deployed -message.deployment.confirm.deployed.none=None -title.deployment.confirm.add=To deploy -title.deployment.confirm.remove=To undeploy - -label.deployment.upload.selectFile=Select a file -message.upload.replace=Replace existing file - -tab.deployment.upload=Upload -tab.deployment.upload.result=Result - -tab.deployment.domain=Domain Deployment -tab.deployment.domain.result=Result -message.deployment.domain.deploymentOf=(Un)Deployment Of: -message.deployment.domain.toDeploy=To Deploy -message.deployment.domain.toUndeploy=To Undeploy -message.deployment.domain.targetServers=Deployment Target -message.deployment.domain.targetServersUndeploy=Undeployment Target -message.deployment.domain.noApps=No Applications Selected. -message.deployment.domain.noServers=No Servers Selected. -message.deployment.domain.selAll=Select All -message.deployment.domain.selNone=Select None -title.deployment.domain.deployOptions=Deployment Options -message.deployment.domain.deployOnly=Deploy Only -message.deployment.domain.undeploy=Undeploy -message.deployment.domain.uploadOnly=Distribute File Only -message.deployment.domain.uploadDeploy=Distribute File and (Re)deploy -message.deployment.domain.replace=Replace File(s) on Target(s) -message.deployment.domain.autoload=Distribute File(s) into Autoload -message.deployment.note=Note: Using the 'Distribute File and (Re)deploy' option above will redeploy the existing application if the file is replaced on the remote server using the checkbox below. - -title.deployment.remove.confirm.removed=Removed -title.deployment.remove.confirm.remove=To Remove -message.deployment.remove.confirm.deployed.none=None -tab.deployment.remove=Remove -tab.deployment.remove.confirm=Confirm -tab.deployment.remove.result=Result -label.deployment.remove.removable=Removable modules (undeployed modules) : -message.deployment.modules.none=No module available. Only undeployed modules can be removed. -#--------------------------------------------------------------------------------------------------- - -tab.resource.destinations=Jms destinations -tab.resource.destinations.create=New destination -tab.resource.destinations.confirm=Confirm remove -title.resource.jmsResources.action=Actions -title.resource.destination=Jms destination to create -button.resource.jmsResources.action.create=New Jms destination -button.resource.jmsResources.action.save=Save -button.resource.jmsResources.action.remove=Remove -comment.resource.jmsResources.action.create= -label.resource.destinations.name=Name -label.resource.destination.name=Name -label.resource.destinations.type=Type -label.resource.destinations.topic=topic -label.resource.destinations.queue=queue -comment.resource.destination.name= -error.resource.jms.create.name.required=
  • Name cannot be empty
  • -error.resource.jms.create.type.required=
  • Destination type must be checked
  • -error.resource.jms.create.password.required=
  • Password cannot be empty
  • -message.resource.destinations.none=No Jms destinations found on server -message.resource.destinations.list.empty=The list is empty ! - -error.resource.jms.addreader.name.required=
  • User name required
  • -error.resource.jms.addreader.id.required=
  • User id required
  • -error.resource.jms.addreader.name.error=
  • User name or id error. Check the Jms users list.
  • - -title.resource.mailfactories.action=Actions -button.resource.mailfactories.action.create=New Mail Factory -comment.resource.mailfactories.action.create=Create a new Mail Factory from an empty form - -label.resource.mailfactory.properties.name=Factory Name -label.resource.mailfactory.type.session=Session -label.resource.mailfactory.type.mimepart=MimePartDataSource -comment.resource.mailfactory.properties.name=Mail factory and properties file name -comment.resource.mailfactory.properties.type=Mail factory type -comment.resource.mailfactory.properties.jndiname=Jndi name -title.resource.mailfactory.configuration=Mail factory configuration -label.resource.mailfactory.name=Name -label.resource.mailfactory.type=mail.factory.type -label.resource.mailfactory.jndiname=mail.factory.name -title.resource.mailfactory.authentication=Authentication configuration -label.resource.mailfactory.authentication.username=mail.authentication.username -label.resource.mailfactory.authentication.password=mail.authentication.password -comment.resource.mailfactory.properties.username= -comment.resource.mailfactory.properties.password= -title.resource.mailfactory.session=Mail session configuration -comment.resource.mailfactory.properties.session= -title.resource.mailfactory.mimepart=MimePartDataSource configuration -label.resource.mailfactory.to=mail.to -comment.resource.mailfactory.properties.to= -label.resource.mailfactory.subject=mail.subject -comment.resource.mailfactory.properties.subject= -label.resource.mailfactory.cc=mail.cc -comment.resource.mailfactory.properties.cc= -label.resource.mailfactory.bcc=mail.bcc -comment.resource.mailfactory.properties.bcc= - -tab.resource.mailfactories=Mail Factories -tab.resource.session.mailfactory.properties=Session Mail Factory -tab.resource.mimepart.mailfactory.properties=MimePartDataSource Mail Factory -tab.resource.mailfactory.properties=Mail Factory -message.resource.mailfactories.none=No mail factory found ! -label.resource.mailfactories.name=Name -label.resource.mailfactories.deployed= - -tab.resource.datasources=Datasources -title.resource.datasources.action=Actions -button.resource.datasources.action.create=New datasource -comment.resource.datasources.action.create=Create an empty file for a new datasource -message.resource.datasources.none=No datasource found ! -label.resource.datasources.name=Name -label.resource.datasources.deployed= - -button.rar.action.create=New Resource Adapter -comment.rar.action.create=Create an empty resource adapter. -message.resourcadapter.select.template=Please select a Resource Adapter template -tab.resource.datasource.properties.create=New Datasource -tab.resourceadapter.create=New Resource Adapter -tab.resource.datasource.properties=Datasource -tab.resource.datasource.confirm=Confirm loading datasource -title.resource.datasource.properties.name=File -title.resource.datasource.properties.datasource=Datasource -title.resourceadapter.resourceadapter=Resource Adapter -title.resource.datasource.properties.jdbc=JDBC -label.resource.datasource.properties.name=Name -comment.resource.datasource.properties.name=Name of the datasource -label.resourceadapter.extention=.rar -label.resourceadapter.rarname=Resource Adapter Name -comment.resourceadapter.rarname=Name of the Resource Adapter File -label.resourceadapter.displayname=Display Name -comment.resourceadapter.displayname=Display name for this Resource Adapter -label.resourceadapter.description=Description -comment.resourceadapter.description=The description of this Resource Adapter -label.resourceadapter.vendorname=Vendor Name -comment.resourceadapter.vendorname=Vendor name for this Resource Adapter -label.resourceadapter.specversion=Spec-Version -comment.resourceadapter.specversion=The specification version -label.resourceadapter.eistype=EIS-Type -comment.resourceadapter.eistype=The EIS-Type -label.resourceadapter.version=Version -comment.resourceadapter.version=The version - -label.resourceadapter.jdbcconparam=JDBC Connection Parameters -label.resourceadapter.checklevel=Check Level -comment.resourceadapter.checklevel=JDBC connection checking level:
    0 = no special checking
    1 = check before reuse if physical connection is still open
    2 = try every connection before reuse -title.resourceadapter.jdbc=JDBC Properties -label.resourceadapter.jndiname=JNDI Name -label.resourceadapter.nativelib=Native-Lib -label.resourceadapter.logenabled=Log-Enabled -label.resourceadapter.logtopic=Log-Topic -label.resourceadapter.poolinit=pool-init -comment.resourceadapter.poolinit=Initial size of the connection pool -label.resourceadapter.poolmin=pool-min -comment.resourceadapter.poolmin=Minimum size of the connection pool -label.resourceadapter.poolmax=pool-max -comment.resourceadapter.poolmax=Maximum size of the connection pool (-1 = no max) -label.resourceadapter.poolmaxage=pool-max-age-minutes -comment.resourceadapter.poolmaxage=Connection maximum age (Value in minutes) -label.resourceadapter.pstmtmax=pstmt-max -comment.resourceadapter.pstmtmax=Maximum size of prepared statements cache -label.resourceadapter.poolmaxopentime=pool-max-opentime -comment.resourceadapter.poolmaxopentime=Connection maximum open time (Value in minutes) -label.resourceadapter.poolmaxwaiters=pool-max-waiters -comment.resourceadapter.poolmaxwaiters=Maximum number of concurrent waiters for a Connection -label.resourceadapter.poolmaxwaittime=pool-max-waittime -comment.resourceadapter.poolmaxwaittime=Maximum time in seconds to wait for a Connection (0 = no wait) -label.resourceadapter.poolsamplingperiod=pool-sampling-period -comment.resourceadapter.poolsamplingperiod=Sampling Period in seconds -label.resourceadapter.dsclass=dsClass -label.resourceadapter.url=URL -label.resourceadapter.user=user -label.resourceadapter.password=password -label.resourceadapter.logintimeout=loginTimeout -label.resourceadapter.isolationlevel=isolationLevel -label.resourceadapter.mappername=mapperName -label.resourceadapter.configlogtopic=logTopic -label.resourceadapter.poolparams=Pool-Params -label.resourceadapter.jonasconfigproperties=JOnAS Config Properties - -error.resourceadapter.rarname.required=
  • Resource Adapter Name cannot be empty
  • -error.resourceadapter.displayname.required=
  • Resource Adapter Display Name cannot be empty
  • -error.resourceadapter.description.required=
  • Resource Adapter Description cannot be empty
  • -error.resourceadapter.vendorname.required=
  • Resource Adapter Vendor Name cannot be empty
  • -error.resourceadapter.specversion.required=
  • Resource Adapter Specification Version cannot be empty
  • -error.resourceadapter.eistype.required=
  • Resource Adapter EIS-Type cannot be empty
  • -error.resourceadapter.version.required=
  • Version cannot be empty
  • -error.resource.datasource.properties.name.required=
  • Name cannot be empty
  • -label.resource.datasource.properties.datasourceName=JNDI name -comment.resource.datasource.properties.datasourceName=The JNDI name to use the datasource -error.resource.datasource.properties.datasourceName.required=
  • JNDI name cannot be empty
  • -label.resource.datasource.properties.datasourceDescription=Description -comment.resource.datasource.properties.datasourceDescription=Description of the datasource -label.resource.datasource.properties.datasourceUrl=URL -comment.resource.datasource.properties.datasourceUrl=URL to access to the database -label.resource.datasource.properties.datasourceClassname=JDBC Driver -comment.resource.datasource.properties.datasourceClassname=JDBC driver class name to access to the database -error.resource.datasource.properties.datasourceClassname.required=
  • JDBC Driver cannot be empty
  • -label.resource.datasource.properties.datasourceUsername=User name -comment.resource.datasource.properties.datasourceUsername=User name or login to log in the database -label.resource.datasource.properties.datasourcePassword=User password -comment.resource.datasource.properties.datasourcePassword=User password to log in the database -label.resource.datasource.properties.datasourceFactory=Factory -comment.resource.datasource.properties.datasourceFactory=Name of the class implementing the XAPoolDataSource -label.resource.datasource.properties.datasourceMapper=Mapper -comment.resource.datasource.properties.datasourceMapper=Mapper used for the datasource -label.resource.datasource.properties.jdbcConnmaxage=Maximum age -comment.resource.datasource.properties.jdbcConnmaxage=JDBC connection maximum age (Value in minutes) -error.resource.datasource.properties.jdbcConnmaxage.numberformat=
  • Maximum age must be a number
  • -label.resource.datasource.properties.jdbcMaxopentime=Max open time -comment.resource.datasource.properties.jdbcMaxopentime=JDBC connection maximum open time (Value in minutes) -error.resource.datasource.properties.jdbcMaxopentime.numberformat=
  • Max open time must be a number
  • -label.resource.datasource.properties.jdbcConnchecklevel=Checking level -comment.resource.datasource.properties.jdbcConnchecklevel=JDBC connection checking level:
    0 = no special checking
    1 = check before reuse if physical connection is still open
    2 = try every connection before reuse -label.resource.datasource.properties.jdbcConnteststmt=Test -comment.resource.datasource.properties.jdbcConnteststmt=SQL query for test statement -label.resource.datasource.properties.jdbcMinconpool=Pool minimum -comment.resource.datasource.properties.jdbcMinconpool=Minimum size of the connection pool -error.resource.datasource.properties.jdbcMinconpool.numberformat=
  • Pool minimum must be a number
  • -label.resource.datasource.properties.jdbcMaxconpool=Pool maximum -comment.resource.datasource.properties.jdbcMaxconpool=Maximum size of the connection pool (-1 = no max) -error.resource.datasource.properties.jdbcMaxconpool.numberformat=
  • Pool maximum must be a number
  • -label.resource.datasource.properties.jdbcMaxwaittime=Max Wait Time -comment.resource.datasource.properties.jdbcMaxwaittime=Maximum time in seconds to wait for a jdbc connection (0 = no wait) -error.resource.datasource.properties.jdbcMaxwaittime.numberformat=
  • Max Wait Time must be a number
  • -label.resource.datasource.properties.jdbcMaxwaiters=Max Waiters -comment.resource.datasource.properties.jdbcMaxwaiters=Maximum concurrent waiters for a jdbc connection -error.resource.datasource.properties.jdbcMaxwaiters.numberformat=
  • Max Waiters must be a number
  • - -#--------------------------------------------------------------------------------------------------- - -tab.security.factory.realms=Security -tab.security.factory.realms.memory=Memory realm -tab.security.factory.realms.datasource=Datasource realm -tab.security.factory.realms.ldap=Ldap realm -title.security.factory.realms.action=Actions -button.security.factory.realms.create.memory=New memory realm -button.security.factory.realms.create.datasource=New datasource realm -button.security.factory.realms.create.ldap=New ldap realm -button.security.factory.realms.remove=Remove -message.security.factory.realms.none=No realm found ! -title.security.factory.realms.name=Name -title.security.factory.realms.type=Realm -error.security.factory.realms.type.unknown=
  • Realm type is unknown : {0}
  • -tab.security.factory.realms.confirm=Confirm - -button.security.factory.memory.realm.clearCache=Clear cache - -tab.security.factory.memory.realm=Realm -tab.security.factory.memory.realm.new=New memory realm -title.security.factory.memory.realm.action=Action -title.security.factory.memory.realm=Memory realm -label.security.factory.memory.realm.resource=Realm name -label.security.factory.memory.realm.name=Name -comment.security.factory.memory.realm.name= -error.security.factory.memory.realm.name.required=
  • The name is required !
  • -error.security.factory.memory.realm.name.nospace=
  • Name : spaces forbidden
  • - -tab.security.factory.memory.realm.users=Users -title.security.factory.memory.realm.users.action=Actions -button.security.factory.memory.realm.users.create=New user -button.security.factory.memory.realm.users.remove=Remove users -message.security.factory.memory.realm.users.none=No user found ! -label.security.factory.memory.realm.users.user=User name -error.security.factory.memory.realm.users.user.required=User required ! - -tab.security.factory.memory.realm.roles=Roles -title.security.factory.memory.realm.roles.action=Actions -button.security.factory.memory.realm.roles.create=New role -button.security.factory.memory.realm.roles.remove=Remove roles -message.security.factory.memory.realm.roles.none=No role found ! -label.security.factory.memory.realm.roles.role=Role name -error.security.factory.memory.realm.roles.role.required=Role required ! - -tab.security.factory.memory.realm.groups=Groups -title.security.factory.memory.realm.groups.action=Actions -button.security.factory.memory.realm.groups.create=New group -button.security.factory.memory.realm.groups.remove=Remove groups -message.security.factory.memory.realm.groups.none=No group found ! -label.security.factory.memory.realm.groups.group=Group name -error.security.factory.memory.realm.groups.group.required=Group required ! - -tab.security.factory.memory.realm.confirm=Confirm -message.security.factory.memory.realm.list.empty=The list is empty ! -title.security.factory.memory.realm.confirm.user.remove=User's list to remove -title.security.factory.memory.realm.confirm.group.remove=Group's list to remove -title.security.factory.memory.realm.confirm.role.remove=Role's list to remove - -tab.security.factory.memory.realm.user=User -title.security.factory.memory.realm.user=User -title.security.factory.memory.realm.user.roles=Roles -label.security.factory.memory.realm.user.roles.notused=Available -label.security.factory.memory.realm.user.roles.used=User's roles -title.security.factory.memory.realm.user.groups=Groups -label.security.factory.memory.realm.user.groups.notused=Available -label.security.factory.memory.realm.user.groups.used=User's groups -title.security.factory.memory.realm.user.password=Change password -label.security.factory.memory.realm.user.password=Password -label.security.factory.memory.realm.user.confirmPassword=Confirm password -error.security.factory.memory.realm.user.password.change.different=
  • The password and the confirmation are different !
  • -error.security.factory.memory.realm.user.password.change.required=
  • The password is required with confirmation !
  • - -tab.security.factory.memory.realm.user.new=New user -title.security.factory.memory.realm.user.new=User -label.security.factory.memory.realm.user.name=User name -error.security.factory.memory.realm.user.name.required=
  • The user name is required !
  • -error.security.factory.memory.realm.user.password.required=
  • The password is required !
  • -error.security.factory.memory.realm.user.confirmPassword.required=
  • The confirm password is required !
  • - -tab.security.factory.memory.realm.role=Role -title.security.factory.memory.realm.role=Role -label.security.factory.memory.realm.role.description=Description - -tab.security.factory.memory.realm.role.new=New role -title.security.factory.memory.realm.role.new=Role -label.security.factory.memory.realm.role.name=Role name -error.security.factory.memory.realm.role.name.required=
  • The role name is required !
  • - -tab.security.factory.memory.realm.group=Group -title.security.factory.memory.realm.group=Group -label.security.factory.memory.realm.group.description=Description -title.security.factory.memory.realm.group.roles=Roles -label.security.factory.memory.realm.group.roles.notused=Available -label.security.factory.memory.realm.group.roles.used=Group's roles - -tab.security.factory.memory.realm.group.new=New group -title.security.factory.memory.realm.group.new=Group -label.security.factory.memory.realm.group.name=Group name -error.security.factory.memory.realm.group.name.required=
  • The group name is required !
  • - -tab.security.factory.datasource.realm=Realm -tab.security.factory.datasource.realm.new=New datasource realm -title.security.factory.datasource.realm=Datasource realm -label.security.factory.datasource.realm.dsName=JNDI name -comment.security.factory.datasource.realm.dsName= -error.security.factory.datasource.realm.dsName.required=
  • The JNDI name is required !
  • -label.security.factory.datasource.realm.name=Name -comment.security.factory.datasource.realm.name=Name of realm -error.security.factory.datasource.realm.name.required=
  • The name is required !
  • -label.security.factory.datasource.realm.roleTable=Role table -comment.security.factory.datasource.realm.roleTable=The name of table of roles -error.security.factory.datasource.realm.roleTable.required=
  • The Role table is required !
  • -label.security.factory.datasource.realm.roleTableRolenameCol=Column Rolename in Role table -comment.security.factory.datasource.realm.roleTableRolenameCol=The name of the role's column in the Role table -error.security.factory.datasource.realm.roleTableRolenameCol.required=
  • The Column Rolename in Role table is required !
  • -label.security.factory.datasource.realm.roleTableUsernameCol=Column Username in Role table -comment.security.factory.datasource.realm.roleTableUsernameCol=The name of the user's column in the Role Table -error.security.factory.datasource.realm.roleTableUsernameCol.required=
  • The Column Username in Role table is required !
  • -label.security.factory.datasource.realm.userTable=User table -comment.security.factory.datasource.realm.userTable=The name of table of users -error.security.factory.datasource.realm.userTable.required=
  • The User table is required !
  • -label.security.factory.datasource.realm.userTablePasswordCol=Column Password in User table -comment.security.factory.datasource.realm.userTablePasswordCol=The name of the password's column in the User table -error.security.factory.datasource.realm.userTablePasswordCol.required=
  • The Column Password in User table is required !
  • -label.security.factory.datasource.realm.userTableUsernameCol=Column Username in User table -comment.security.factory.datasource.realm.userTableUsernameCol=The name of the username's column in the User table -error.security.factory.datasource.realm.userTableUsernameCol.required=
  • The Column Username in User table is required !
  • -label.security.factory.datasource.realm.algorithm=Algorithm -comment.security.factory.datasource.realm.algorithm=Default algorithm used to crypt the passwords - -tab.security.factory.ldap.realm=Realm -tab.security.factory.ldap.realm.new=New Ldap realm -title.security.factory.ldap.realm=Ldap realm -label.security.factory.ldap.realm.authenticationMode=Authentication Mode -comment.security.factory.ldap.realm.authenticationMode= -label.security.factory.ldap.realm.baseDn=Base DN -comment.security.factory.ldap.realm.baseDn=DN used by default -error.security.factory.ldap.realm.baseDn.required=
  • The Base DN is required !
  • -label.security.factory.ldap.realm.initialContextFactory=Initial Context Factory -comment.security.factory.ldap.realm.initialContextFactory=Used class to access to Ldap -error.security.factory.ldap.realm.initialContextFactory.required=
  • The Initial Context Factory is required. The default value was replaced !
  • -label.security.factory.ldap.realm.language=Language -comment.security.factory.ldap.realm.language=(optional) -label.security.factory.ldap.realm.name=Name -comment.security.factory.ldap.realm.name=Name of realm -error.security.factory.ldap.realm.name.required=
  • The name is required !
  • -label.security.factory.ldap.realm.providerUrl=Provider URL -comment.security.factory.ldap.realm.providerUrl=Used URL to Ldap access -error.security.factory.ldap.realm.providerUrl.required=
  • The Provider URL is required. The default value was replaced !
  • -label.security.factory.ldap.realm.referral=Referral -comment.security.factory.ldap.realm.referral=(optional) -label.security.factory.ldap.realm.roleDn=Role DN -comment.security.factory.ldap.realm.roleDn=Used DN to access to the role (optional by default the Base DN is used) -label.security.factory.ldap.realm.roleNameAttribute=Role Name Attribute -comment.security.factory.ldap.realm.roleNameAttribute= -error.security.factory.ldap.realm.roleNameAttribute.required=
  • The Role Name Attribute is required. The default value was replaced !
  • -label.security.factory.ldap.realm.roleSearchFilter=Role Search Filter -comment.security.factory.ldap.realm.roleSearchFilter= -error.security.factory.ldap.realm.roleSearchFilter.required=
  • The Role Search Filter is required. The default value was replaced !
  • -label.security.factory.ldap.realm.securityAuthentication=Security Authentication -comment.security.factory.ldap.realm.securityAuthentication= -label.security.factory.ldap.realm.securityCredentials=Security Credentials -comment.security.factory.ldap.realm.securityCredentials= -label.security.factory.ldap.realm.securityPrincipal=Security Principal -comment.security.factory.ldap.realm.securityPrincipal= -label.security.factory.ldap.realm.securityProtocol=Security Protocol -comment.security.factory.ldap.realm.securityProtocol=(optional) -label.security.factory.ldap.realm.stateFactories=State Factories -comment.security.factory.ldap.realm.stateFactories=(optional) -label.security.factory.ldap.realm.userDn=User DN -comment.security.factory.ldap.realm.userDn=Used DN to access to the user (optional by default the Base DN is used) -label.security.factory.ldap.realm.userPasswordAttribute=User Password Attribute -comment.security.factory.ldap.realm.userPasswordAttribute= -error.security.factory.ldap.realm.userPasswordAttribute.required=
  • The User Password Attribute is required. The default value was replaced !
  • -label.security.factory.ldap.realm.userRolesAttribute=User Roles Attribute -comment.security.factory.ldap.realm.userRolesAttribute= -error.security.factory.ldap.realm.userRolesAttribute.required=
  • The User Roles Attribute is required. The default value was replaced !
  • -label.security.factory.ldap.realm.userSearchFilter=User Search Filter -comment.security.factory.ldap.realm.userSearchFilter= -error.security.factory.ldap.realm.userSearchFilter.required=
  • The User Search Filter is required. The default value was replaced !
  • -label.security.factory.ldap.realm.algorithm=Algorithm -comment.security.factory.ldap.realm.algorithm=Default algorithm used to crypt the passwords - -tab.security.catalina.realm=Catalina realms -message.security.catalina.realm.notused=Security realm not used -label.security.catalina.realm.name=Catalina realm name - -title.security.catalina.realm.name=Name -title.security.catalina.realm.used=Used - -tab.jmsservice=MOM -tab.jms.queues=Queues -tab.jms.topics=Topics -tab.jms.connfacts=Connection Factories -tab.jms.cf.usedby=Used by -tab.jms.queue.usedby=Used by -tab.jms.topic.usedby=Used by -title.jms.cf.usedby.ejb=Ejb -title.jms.cf.usedby.type=Type -title.jms.cf.usedby.container=Container -title.jms.queue.usedby.ejb=Ejb -title.jms.queue.usedby.type=Type -title.jms.queue.usedby.container=Container -title.jms.topic.usedby.ejb=Ejb -title.jms.topic.usedby.type=Type -title.jms.topic.usedby.container=Container - -label.service.jms.momName=Name -label.service.jms.momLocation=Location -label.service.jms.momUrl=URL -label.service.jms.topic.subscriptions=Number of subscribers -label.service.jms.queue.pendingMessages=Pending messages -label.service.jms.queue.pendingRequests=Pending consumers -label.service.jms.cf.mode=Messaging mode -tab.mom.collocated=Collocated -tab.mom.distant=Remote -tab.mom.joram=JORAM -tab.connfact.defaultconnfact=Default Connection Factory Name -tab.connfact.defaulttopicconnfact=Default Topic Connection Factory Name -tab.connfact.defaultqueueconnfact=Default Queue Connection Factory Name -title.jms.connfact.name=Name -title.jms.connfact.comment=Info - -message.service.jms.queues.none=No JMS queue found ! -message.service.jms.topics.none=No JMS topic found ! -message.service.jms.destinations.none=No JMS destination found ! -#--------------------------------------------------------------------------------------------------- -tab.workmanagerservice=Work Manager -label.workmanagerservice.current.pool.size=Current Pool Size -label.workmanagerservice.max.pool.size=Max Pool Size -label.workmanagerservice.min.pool.size=Min Pool Size -#--------------------------------------------------------------------------------------------------- -tab.versioningservice=Versioning -label.versioningservice.enabled=Versioning enabled -label.versioningservice.defaultpolicy=Default deployment policy -#--------------------------------------------------------------------------------------------------- -tab.workcleanerservice=Work Cleaner -label.workcleanerservice.period=Execution period -title.workcleanerservice.action=Action -title.workcleanerservice.setting=Setting -#--------------------------------------------------------------------------------------------------- -tab.smartclientservice=Smart Client -label.smartclient.port=Port number -label.smartclient.active=EasyBeans SmartClient active -#--------------------------------------------------------------------------------------------------- -tab.mailservice=Mail -tab.mailservice.sessions=Session Mail Factories -tab.mailservice.mimeparts=MimePartDatasource Mail Factories -tab.mailservice.mailfactory.usedby=Used by -title.mailservice.factories=Number of available mail factories -title.mailservice.mailfactory.configuration=Mail factory configuration -title.mailservice.mailfactory.authentication.configuration=Authentication configuration -title.mailservice.mailfactory.usedby.ejb=Ejb -title.mailservice.mailfactory.usedby.type=Type -title.mailservice.mailfactory.usedby.container=Container -title.mailservice.mailfactory.session.configuration=Mail Session configuration -title.mailservice.mailfactory.mimepart.configuration=MimePartDataSource configuration -label.mailservice.nbfact.session=Session factories -label.mailservice.nbfact.mimepart=MimePartDataSource -label.mailservice.nbfact.total=Total -label.mailservice.mailfactory.type=Type -label.mailservice.mailfactory.jndiname=Jndi name -label.mailservice.mailfactory.authentication.username=mail.authentication.username -label.mailservice.mailfactory.authentication.password=mail.authentication.password -label.mailservice.mailfactory.mimepart.to=mail.to -label.mailservice.mailfactory.mailfactory.subject=mail.subject -label.mailservice.mailfactory.mimepart.cc=mail.cc -label.mailservice.mailfactory.mimepart.bcc=mail.bcc -message.mailservice.mailfactory.session=Session -message.mailservice.mailfactory.mimepart=MimePartDataSource -message.mailservice.sessions.none=No Session mail factories ! -title.mailservice.factory.name=Name -title.mailservice.factory.jndiname=JNDI name -message.mailservice.mimepart.none=No MimePartDataSource mail factories ! -error.mailservice.mailfactory.emptyjndiname=
  • Can't accept empty Jndi name
  • -error.mailservice.mailfactory.emptyname=
  • Can't accept empty factory name
  • -error.mailservice.mailfactory.emptytype=
  • Please check in the type
  • -#--------------------------------------------------------------------------------------------------- - -tab.jtmservice=Transaction Manager -tab.jtmservice.stat=Statistics -tab.jtmservice.moni=Monitor -tab.jtmservice.reco=Recovery -tab.jtmservice.xars=XAResource -tab.jtm.collocated=collocated -tab.jtm.distant=Remote -tab.jtm.undefined=undefined -label.service.jtm.location=Location -label.service.jtm.host=Host name -label.service.jtm.port=Port number -label.service.jtm.timeout=Transaction time-out -label.service.jtm.stat.current=Current number of transactions -label.service.jtm.stat.begun=Number of begun transactions -label.service.jtm.stat.commited=Number of commited transactions -label.service.jtm.stat.rolledback=Number of rolledback transactions -label.service.jtm.stat.expired=Number of transactions with expired time-out -label.service.jtm.moni.date=Date -label.service.jtm.moni.transaction=Transaction -label.service.jtm.moni.resource=Resource -label.service.jtm.moni.state=State -message.transactionsentries.none=No Transactions in Execution ! -label.service.jtm.reco.transaction=Transaction -label.service.jtm.reco.date=Date -label.service.jtm.reco.xidcount=Xid Count -label.service.jtm.reco.resmgr=Resource Manager -label.service.jtm.reco.xares=XAResource -label.service.jtm.reco.xid=Xid -label.service.jtm.reco.xidstate=Xid State -label.service.jtm.reco.nolabel= -message.recoveryentries.none=No Transactions to Recover ! -button.service.jtm.reset=Reset counters -button.service.jtm.refreshtx=Refresh Tx -button.service.jtm.heurcommit=Heuristic Commit -button.service.jtm.heurrollback=Heuristic Rollback -button.service.jtm.heurforget=Forget Tx -tab.xaresource.recovery.confirm=Confirm -message.xaresource.recovery.non.selected=No XAResources selected ! -title.xaresource.recovery.confirm.commit=Commit XAResources selected -title.xaresource.recovery.confirm.rollback=Rollback XAResources selected -title.xaresource.recovery.confirm.forget=Forget XAResources selected -error.jtm.timeOut.required=
  • Transaction time-out cannot be empty
  • -error.jtm.timeOut.format=
  • Transaction time-out not a valid integer!
  • -#--------------------------------------------------------------------------------------------------- - -tab.depmonitorservice= Deployment Monitor -label.service.depmonitorservice.development.mode=Development mode -label.service.depmonitorservice.directories=Deployent directories -label.service.depmonitorservice.monitorInterval=Monitor interval - -#--------------------------------------------------------------------------------------------------- -tab.service.webservice.descriptions.title=Web Service Descriptions -message.service.webservice.nowebservice=No web services found! -label.service.webservice.descriptions.name=Name -label.service.webservice.descriptions.wsdlurl=Published WSDL URL -label.service.webservice.descriptions.portcomponents=Port Components -label.service.webservice.descriptions.wsdlfilename=WSDL File Name - -tab.service.webservice.portcomponents.title=Port Components - -message.service.webservice.portcomponents.none=No port components found! -message.service.webservice.descriptions.portcomponents.link=Click here for Port Components! - -label.service.webservice.portcomponents.name=Name -label.service.webservice.portcomponents.wsdlport=WSDL Port QName -label.service.webservice.portcomponents.sei=SEI -label.service.webservice.portcomponents.endpoint=Endpoint URL -label.service.webservice.portcomponents.implbean=Implementation Bean - -tab.service.webservice.details=Web Service -tab.service.webservice.details.title=Web Service Description Details -title.service.webservice.details=Web Service Description Details -label.service.webservice.details.name=Name -label.service.webservice.details.wsdlurl=Published WSDL URL -label.service.webservice.details.portcomponents=Port Components -label.service.webservice.details.wsdlfilename=WSDL File Name -label.service.webservice.details.mappingfilename=JAX-RPC Mapping File Name -message.service.webservice.details.portcomponents.link=Click here for Port Components! - -title.service.webservice.portcomponents.details=Web Service Port Component Details -label.service.webservice.portcomponents.details.name=Name -label.service.webservice.portcomponents.details.wsdlport=Published Port QName -label.service.webservice.portcomponents.details.sei=Service Endpoint Interface -label.service.webservice.portcomponents.details.endpoint=EndPoint URL -label.service.webservice.portcomponents.details.implbean=Implementation Bean -label.service.webservice.portcomponents.details.handlers=Handlers -message.service.webservice.portcomponents.details.handlers.link=Click here for Handler details! -message.service.webservice.portcomponents.details.implbean.link=Click here for Implementation Bean details! - -tab.service.webservice.portcomponents.handlers.title=Handlers -title.service.webservice.portcomponents.handlers.details=Web Service Handler Details -message.service.webservice.portcomponents.handlers.none=No handlers found! - -label.service.webservice.portcomponents.handlers.details.name=Name -label.service.webservice.portcomponents.handlers.details.classname=Handler Class Name -label.service.webservice.portcomponents.handlers.details.soapheaders=Soap Headers -label.service.webservice.portcomponents.handlers.details.soaproles=Soap Roles -label.service.webservice.portcomponents.handlers.details.initParams=Handler Initialization Parameters - -#--------------------------------------------------------------------------------------------------- - -tab.mbeans=MBeans -title.mbeans.domain=Domain -title.mbeans.family=Family -title.mbeans.objectname=Object Name -label.mbeans.j2ee=J2EE -label.mbeans.owner=Owner -label.mbeans.unknown=? - -tab.mbeans.j2ee=J2EEs -title.mbeans.j2ee.type=j2eeType -title.mbeans.j2ee.name=Name - -tab.mbeans.owner=Owners -title.mbeans.owner.type=Type - -tab.mbeans.unknown=Unknowns - -tab.mbean.properties=Properties -tab.mbean.attributes=Attributes -tab.mbean.operations=Operations -title.mbean.attributes.filtering=Filtering -title.mbean.attributes.list=List of attributes -label.mbean.attributes.values=Values -label.mbean.attributes.descriptions=Descriptions -message.mbean.attributes.none=No attribute found ! -title.mbean.operations.filtering=Filtering -title.mbean.operations.list=List of operations -label.mbean.operations.descriptions=Descriptions -message.mbean.operations.none=No operation found ! - -#--------------------------------------------------------------------------------------------------- - -error.global=
  • Error name : {0}
  • -error.global.log=Error name : {0} -error.global.message=
  • Error name : {0}
      Message :
    • {1}
  • -error.global.message.log=Error name : {0}, message : {1} - -error.mbeanserver.notfound=JOnAS Administration can't execute. The MBean server is not found. Please check the application environment. -error.jonasserver.notfound=JOnAS Administration can't execute. The JOnAS server is not found. Please check the application environment. -error.mbean.j2eedomain.notfound=JOnAS Administration can't execute. The MBean "J2EEDomain" is not found. Please check the application environment. -error.mbean.j2eeserver.notfound=JOnAS Administration can't execute. The MBean "J2EEServer" is not found. Please check the application environment. - -error.ejb.type.unknown=EJB type unknown:
    • name={0}
    • filename={1}
    -error.deploy.noselect=Before submitting, move a file ! -error.deploy=
    • Deploy error : {0}
      {1}
    -error.deploy.datasource.isloaded=Datasource already loaded ! -error.undeploy=
    • Undeploy error : {0}
      {1}
    -error.undeploy.datasource.dependences=Dependence with {0} -error.undeploy.mailfactory.dependences=Dependence with {0} -error.domain.deploy.noselect=Please select at least one application and at least one target server. -error.remove.noselect=Before removing a file, select a file ! -error.remove=
    • Remove error : {0}
      {1}
    - -error.archiveconfig.valid.fail=Validation Failed:
    • {0}
    -error.archiveconfig.load.fail=Cannot edit {0}, the file is not present in the archive. - -warning.jonas.service.database.notActivated=
  • Database Service not activated !
  • -warning.jonas.service.jms.notActivated=
  • JMS Service not activated !
  • -warning.jonas.service.mail.notActivated=
  • Mail Service not activated !
  • - - -# -------------------------------------------------------- - -treenode.joramplatform=Joram platform -treenode.joramplatform.joramlocalserver=Local server -treenode.joramplatform.joramcurrentserver=Current server -treenode.joramplatform.queue=Queue -treenode.joramplatform.topic=Topic -treenode.joramplatform.joramremoteserver=Remote server - -tab.joramplatform=Platform configuration -tab.joramservers=Servers -tab.joramxml=a3servers.xml -tab.joramadapter=Resource Adapter configuration -tab.joramservers=Joram servers -label.joramplatform.release=Implementation version -label.joramplatform.configuration=Configuration -tab.joramplatform.joramlocalserver=Server Id -tab.joramplatform.joramlocaldestinations=Local JMS destinations -tab.joramplatform.joramcurrentdestinations=JMS destinations -tab.joramplatform.joramdestinations=JMS destinations -tab.joramplatform.joramlocalusers=Local JMS users -tab.joramplatform.joramcurrentusers=JMS users -tab.joramplatform.joramusers=JMS users -#tab.joramplatform.joramaftercreate=List -tab.joramplatform.joramaftercreate=JMS destinations -#tab.joramplatform.joramlocalaftercreate=List local -tab.joramplatform.joramlocalaftercreate=Local JMS destinations -tab.joramplatform.joramlocalqueues=Local Queues -tab.joramplatform.joramlocaltopics=Local Topics -tab.joramplatform.joramremotedestinations=Remote JMS destinations -label.joramplatform.joramlocalserver.serverId=Server Id -label.joramplatform.joramlocalserver.host=Host name -label.joramplatform.joramlocalserver.port=Server port -tab.joramplatform.joramremoteserver=Remote server -label.joramplatform.joramremoteserver.serverId=Server identifier -tab.joramplatform.joramlocalserver.destination=Destination properties -label.joramplatform.joramserver.serverId=Server Id -label.joramplatform.joramserver.serverDmq=Default DMQ -label.joramplatform.joramserver.serverThreshold=Default Threshold -tab.joramplatform.queue= queue -tab.joramplatform.topic= topic -label.joramadmin.destination.id=Agent identifier -label.joramadmin.destination.name=Name -label.joramadmin.destination.creationDate=Creation date -label.joramadmin.destination.dmq=Dead Message Queue -label.joramadmin.destination.readable=Freely Readable -label.joramadmin.destination.writeable=Freely Writeable -label.joramadmin.destination.reader.list=Readers -label.joramadmin.destination.writer.list=Writers -label.joramadmin.queue.message.ids=Message Ids -label.joramadmin.queue.message.nbmax=Max number of messages -label.joramadmin.queue.nbmax.notset=Not set -label.joramadmin.queue.pending.messages=Pending messages -label.joramadmin.queue.pending.requests=Pending consumers -label.joramadmin.queue.threshold=Threshold for DMQ -label.joramadmin.queue.dmq.notset=Not set -label.joramadmin.topic.dmq.notset=Not set -label.joramadmin.topic.subscriptions=Number of subscribers -label.joramadmin.topic.subscriberIds=Subscribers Ids -label.joramadmin.topic.subscribers=Subscribers -title.joramplatform.currentserver=Current Joram server configuration -title.joramplatform.timers=Joram timers -title.joramplatform.dmq=Dead Message Queue (DMQ) -title.joramservers.localserver=Local server -title.joramservers.currentserver=Current server -title.joramservers.remoteservers=Remote servers -title.joramplatform.config=Configuration file (a3servers.xml) -message.remoteservers.none=none -message.remoteservers.server=Remote server -action.title.joramplatform.export=Action -action.title.joramplatform.joramremoteserver=Action -action.button.joramplatform.export=Export -action.comment.joramplatform.export=Export Joram server repository to JONAS_BASE/conf/joramAdminExport.xml -action.button.joramplatform.reload=Reload -action.comment.joramplatform.reload=Reload JoramAdmin.xml file -action.button.joramplatform.joramremoteserver.getdestinations=Get destinations -action.comment.joramplatform.joramremoteserver.getdestinations=Lists the destinations deployed on this remote server -title.joramdestinations.action=Actions -title.joramusers.action=Actions -title.joramreaders.action=Actions -title.joramwriters.action=Actions -button.joramdestinations.action.create=Create Jms destination -button.joramdestinations.action.remove=Remove Jms destination -button.joramusers.action.create=Create Jms user -button.joramreaders.action.add=Add reader -button.joramwriters.action.add=Add writer - -message.joramdestinations.none=No Jms destinations found ! -message.joramusers.none=No Jms users found ! -message.joramreaders=No reader found ! -message.joramwriters=No writer found ! -message.joramplatform.destinations.list.empty=No destinations selected - -tab.joramplatform.joramdestination.create=New destination -tab.joramplatform.joramuser.create=New user -tab.joramplatform.joramreader.add=Add reader -tab.joramplatform.joramwriter.add=Add writer -title.joramplatform.destination=Jms destination to create -title.joramplatform.reader=Jms user -title.joramplatform.writer=Jms user -title.joramplatform.destination=Jms destination to create -title.joramplatform.user=Jms user to create -label.joramplatform.destination.name=Name -label.joramplatform.destination.type=Type -label.joramplatform.destination.id=Id -label.joramplatform.user.name=Name -label.joramplatform.user.id=Id -label.joramplatform.destinations.topic=topic -label.joramplatform.destinations.queue=queue -label.joramplatform.destination.stat.nbmsgs.received=Number of messages received since creation -label.joramplatform.destination.stat.nbmsgs.senttodmq=Number of messages sent to the DMQ since creation -label.joramplatform.destination.stat.nbmsgs.delivered=Number of messages delivered since creation - -label.joramplatform.user.name=Name -label.joramplatform.user.password=Password -label.joramplatform.user.id=Id -comment.joramplatform.destination.name= -comment.joramplatform.user.name= -comment.joramplatform.user.id= -tab.joramplatform.topic.usedby=Used by -tab.joramplatform.queue.usedby=Used by -tab.joramplatform.dest.stat= statistics -tab.joramplatform.dest.readers= readers -tab.joramplatform.dest.writers= writers -tab.joramplatform.removedestinations.confirm=Confirm remove -tab.joramplatform.removeusers.confirm=Confirm remove -title.joramplatform.topic.usedby.ejb=Ejb -title.joramplatform.queue.usedby.ejb=Ejb -title.joramplatform.topic.usedby.type=Type -title.joramplatform.queue.usedby.type=Type -title.joramplatform.topic.usedby.container=Container -title.joramplatform.queue.usedby.container=Container - -label.joramadapter.collocated=Collocated server -label.joramadapter.config.dir=Configuration directory -label.joramadapter.admin.file=Administration tasks file -label.joramadaper.persistent=Persistent server -label.joramadapter.server.id=Server Id -label.joramadapter.server.name=Server name -label.joramadapter.host.name=Host name -label.joramadapter.server.port=Server port -label.joramadapter.cnx.pending.timer=Connection pending timer -comment.joramadapter.cnx.pending.timer=Heartbeat period in milliseconds of a connected client (O value means no heartbeat sent and no timer armed on the server) -label.joramadapter.connecting.timer=Connecting timer -comment.joramadapter.connecting.timer=Maximum time in seconds during which connecting is attempted (O value means connecting only once and aborting if connecting failed) -label.joramadapter.tx.pending.timer=Transacted session maximum idleness -comment.joramadapter.tx.pending.timer=Maximum time in seconds a JMS transacted session might be pending (0 value means no limit) -label.joramadmin.timeout=Timeout to abort request -comment.joramadmin.timeout=Timeout in milliseconds to abort a pending request -label.joramadmin.default.dmq=Default DMQ -label.joramadmin.default.threshold=Default threshold for DMQ -label.joramadmin.dmq.notset=Not set -# ------------------------------------------------------------------ -warning.jonas.jms.notActivated=
  • Neither JMS Service, nor Joram server activated !
  • - -# JONAS_MQ_MARK BEGIN -# ------------------------------------------------------------------ -# Messages added for JonasMqConnect -# ------------------------------------------------------------------ -treenode.joansmqconnect.name=Jonas MQ Connect -tab.jonasmqconnect.server=Jonas MQ Connector -tab.jonasmqconnect.servers=Jonas MQ Connectors -tab.jonasmqconnect.destinations=Destinations -tab.jonasmqconnect.mdbs=Mdbs -tab.jonasmqconnect.createdestination=Create destinations -tab.jonasmqconnect.editdestination=Destination - -tab.jonasmqconnect.editmdb=Mdb - -tab.jonasmqconnect.deletedestination=Delete destinations -tab.jonasmqconnect.connectionfactory=Connection Factory -title.joansmqconnect.server=Jonas MQ Connector properties -title.joansmqconnect.servers=Jonas MQ Connectors -title.joansmqconnect.connectionfactory=Connection Factories -title.joansmqconnect.destinations=Destinations -title.joansmqconnect.action=Action -title.joansmqconnect.propetriesdestination=Properties of destination -title.joansmqconnect.propetriesmdb=Properties of MDB -title.joansmqconnect.statpropetriesdestination=Stat. Properties of destination -title.joansmqconnect.createdestination=Jms destination to create -label.joansmqconnect.release=Implementation version -label.joansmqconnect.hostname=Hostname -label.joansmqconnect.channel=Channel -label.joansmqconnect.port=Port -label.joansmqconnect.queuemanager=Queue Manager -label.joansmqconnect.transporttype=TransportType -label.joansmqconnect.server.name=Name -label.joansmqconnect.destination.name=Name -label.joansmqconnect.destination.type=Type -label.joansmqconnect.destination.basename=Base name -label.joansmqconnect.destination.name=Name -label.joansmqconnect.destination.proprieties=Proprieties -label.joansmqconnect.destination.type=Type -label.joansmqconnect.destination.currentdepth=Messages in the queue -label.joansmqconnect.destination.maxqueuedepth=Max messages in the queue -label.joansmqconnect.destination.inputcount=Processus listening on the queue -label.joansmqconnect.destination.outputcount=Processus sending to the queue -label.joansmqconnect.destinations.topic=topic -label.joansmqconnect.destinations.queue=queue -label.joansmqconnect.destinations.deletephysicaldestination=Delete physical destination -label.joansmqconnect.destinations.deletephysicaldestination.yes=Yes -label.joansmqconnect.destinations.deletephysicaldestination.no=No -label.joansmqconnect.mdb.name=Name -label.joansmqconnect.mdb.destinationname=MQ Destination -label.joansmqconnect.mdb.numbermsg=# Received Messages -label.joansmqconnect.connectionfactory.cf=Connection Factory (CF) -label.joansmqconnect.connectionfactory.tcf=Topic Connection Factory (TCF) -label.joansmqconnect.connectionfactory.qcf=Queue Connection Factory (QCF) -button.joansmqconnect.savedestinationconfig=Save Destination Config -button.joansmqconnect.loaddestinationconfig=Load Destination Config -button.joansmqconnect.refresh=Refresh -button.joansmqconnect.editconnectorproperties=Edit Properties -button.joansmqconnect.createdestination=Create Jms destination -button.joansmqconnect.removedestination=Remove Jms destination -button.joansmqconnect.editdestination=Edit -button.joansmqconnect.editconnectionfactory=Edit -button.joansmqconnect.clearqueue=Clear Queue -message.joansmqconnect.server.none=No Connector found ! -message.joansmqconnect.none=No Jms destinations found ! -message.joansmqconnect.destinations.list.empty=No destinations selected -error.joansmqconnect.resource.jms.create.name.required=
  • Name cannot be empty
  • -error.joansmqconnect.resource.jms.create.type.required=
  • Destination type must be checked
  • -error.joansmqconnect.resource.jms.create.selecteddestinations.empty=
  • At least one destination must be checked
  • -error.joansmqconnect.resource.jms.create.deletephysicaldestination.empty=
  • Delete physical destination must be checked
  • -comment.joansmqconnect.destination.name= -comment.joansmqconnect.destination.proprieties= -# JONAS_MQ_MARK END - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources_fr.properties b/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources_fr.properties deleted file mode 100644 index 22db64ab79..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/ApplicationResources_fr.properties +++ /dev/null @@ -1,18 +0,0 @@ -title.application=JOnAS Administration -title.welcome=Bienvenue - -tab.server.jonas=JOnAS -label.server.jonas.jonasName=Nom du serveur -action.button.server.jonas.rungc=Lancer -action.comment.server.jonas.rungc=Lancer le 'garbage collector' -action.button.server.jonas.stop=Stop -action.comment.server.jonas.stop=Arrêter le serveur JOnAS - - -tab.mbean.properties=Propriétés -tab.mbean.attributes=Attributs -tab.mbean.operations=Opérations - -default.ejb.type.session.sessionTimeOut=pas de limite -default.ejb.type.session.instanceMaxSizePool=pas de limite - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/jonas-ra-xml.vm b/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/jonas-ra-xml.vm deleted file mode 100644 index f283c17745..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/jonas-ra-xml.vm +++ /dev/null @@ -1,57 +0,0 @@ - - - $oForm.getJndiName() - JOnASJDBC_DM - $oForm.getNativeLib() - $oForm.getLogEnabled() - $oForm.getLogTopic() - - $oForm.getPoolInit() - $oForm.getPoolMin() - $oForm.getPoolMax() - $oForm.getPoolMaxAge() - $oForm.getPstmtMax() - $oForm.getPoolMaxOpenTime() - $oForm.getPoolMaxWaiters() - $oForm.getPoolMaxWaittime() - $oForm.getPoolSamplingPeriod() - - - $oForm.getCheckLevel() - - - dsClass - $oForm.getDsClass() - - - URL - j$oForm.getURL() - - - user - $oForm.getUser() - - - password - $oForm.getPassword() - - - loginTimeout - $oForm.getLoginTimeout() - - - isolationLevel - $oForm.getIsolationLevel() - - - mapperName - $oForm.getMapperName() - - - logTopic - $oForm.getConfigLogTopic() - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ra-xml.vm b/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ra-xml.vm deleted file mode 100644 index a810aa4585..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/resources/org/ow2/jonas/webapp/jonasadmin/resourceadapter/ra-xml.vm +++ /dev/null @@ -1,13 +0,0 @@ - - -$oForm.getDisplayName() -$oForm.getDescription() -$oForm.getVendorName() -$oForm.getSpecVersion() -$oForm.getEisType() - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestFont.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestFont.jsp deleted file mode 100644 index 9f18835071..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestFont.jsp +++ /dev/null @@ -1,216 +0,0 @@ - - -TestFont - - -<% -String sText= "abcdefABCDEF"; -String sPrefTextSize = "TextSize"; -String[] asTextSize = {"larger", "smaller", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large"}; - -String sPrefPxSize = "PxSize"; -String[] asPxSize = {"1px", "4px", "6px", "8px", "10px", "12px", "14px", "16px", "20px", "24px"}; - -String sPrefEmSize = "EmSize"; -String[] asEmSizeTitle = {"01em", "02em", "04em", "05em", "06em", "07em", "08em", "09em", "1em", "11em", "12em", "14em", "16em", "18em", "2em"}; -String[] asEmSize = {"0.1em", "0.2em", "0.4em", "0.5em", "0.6em", "0.7em", "0.8em", "0.9em", "1em", "1.1em", "1.2em", "1.4em", "1.6em", "1.8em", "2em"}; - -String sPrefPcSize = "PcSize"; -//String[] asPcSizeTitle = {"1", "10", "30", "50", "70", "80", "90", "100", "110", "120", "130", "140", "150", "160", "180", "200", "220", "240"}; -//String[] asPcSize = {"1%", "10%", "30%", "50%", "70%", "80%", "90%", "100%", "110%", "120%", "130%", "140%", "150%", "160%", "180%", "200%", "220%", "240%"}; -int iMax=260; -int iMin=10; -int iGap=5; -int iInter= (iMax - iMin) / iGap; -String[] asPcSizeTitle = new String[iInter]; -String[] asPcSize = new String[iInter]; -int iValue; -for (int i=0; i < iInter; i++) -{ - iValue = iMin + (i * iGap); - asPcSizeTitle[i] = String.valueOf(iValue); - asPcSize[i] = String.valueOf(iValue)+"%"; -} - -%> - - - - - -

    Test Font

    - - - - - - - - - - -<% -// Text -for (iRow=0; iRow < asTextSize.length; iRow++) -{ -%> - - - - - -<% -} -%> -
    Constant font
     normalbold
    <%=asTextSize[iRow]%><%=sText%><%=sText%>
    - - - - - - - - - - -<% -// Pixel -for (iRow=0; iRow < asPxSize.length; iRow++) -{ -%> - - - - - -<% -} -%> -
    Pixel font
     normalbold
    <%=asPxSize[iRow]%><%=sText%><%=sText%>
    - - - - - - - - - - -<% -// EM -for (iRow=0; iRow < asEmSize.length; iRow++) -{ -%> - - - - - -<% -} -%> -
    EM font
     normalbold
    <%=asEmSize[iRow]%><%=sText%><%=sText%>
    - - - - - - - - - - -<% -// Pourcent -for (iRow=0; iRow < asPcSize.length; iRow++) -{ -%> - - - - - -<% -} -%> -
    Pourcent font
     normalbold
    <%=asPcSize[iRow]%><%=sText%><%=sText%>
    - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestNavigator.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestNavigator.jsp deleted file mode 100644 index 89c02fe152..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/TestNavigator.jsp +++ /dev/null @@ -1,51 +0,0 @@ -<%@ page import="javax.servlet.http.*,java.util.*"%> - - - - -TestNavigator - - - -

    Test Navigator

    -<% -String sUserAgent = request.getHeader("user-agent"); -%> -
    -

    Request info

    -Server name : <%=request.getServerName()%>
    -Server port : <%=request.getServerPort()%>
    -Scheme : <%=request.getScheme()%>
    -Protocol : <%=request.getProtocol()%>
    -Query string : <%=request.getQueryString()%>
    -Remote address : <%=request.getRemoteAddr()%>
    -Remote host : <%=request.getRemoteHost()%>
    -Remote user : <%=request.getRemoteUser()%>
    -Request URI : <%=request.getRequestURI()%>
    -Context path : <%=request.getContextPath()%>
    -Servlet path : <%=request.getServletPath()%>
    -Path info : <%=request.getPathInfo()%>
    -Path translated : <%=request.getPathTranslated()%>
    -
    -

    User Agent

    -<%=sUserAgent%> -
    - - - -<% -String sName = null; -String sValue = null; -Enumeration oEnum = request.getHeaderNames(); -while (oEnum.hasMoreElements()) -{ - sName = (String) oEnum.nextElement(); - sValue = request.getHeader(sName); -%> - -<% -} -%> -
    Header
    NameValue
    <%=sName%><%=sValue%>
    - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/controls.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/controls.tld deleted file mode 100644 index 0aa6674c2a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/controls.tld +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - 1.0 - 1.2 - controls - - JSP tag library containing custom GUI controls used in the - Tomcat Administrative Application. - - - - - - - - tree - org.ow2.jonas.webapp.taglib.TreeControlRenderTag - empty - - Render a "tree" control, based on the current state of a data object - of type org.apache.webapp.admin.TreeControl, which is identified - by the name specified in the "tree" attribute, in the JSP scope - specified by the "scope" attribute. - - - - action - false - true - - Hyperlink to which expand/contract actions should be sent, - with a string "${node}" marking where the node name of the - affected node should be included (which will usually be as - the value of a request parameter). - - - - - images - false - true - - Name of a directory containing the images for our icons, - relative to the page including this tag. If not specified, - defaults to "images". - - - - - scope - false - true - - The JSP scope within which the "tree" attribute is to be found - (page, request, session, or application). If not specified, the - "tree" attribute will be searched for in any scope. - - - - - style - false - true - - The CSS style class to be applied to the entire rendered output - of the tree control. If not specified, no overall style class - is applied. - - - - - styleSelected - false - true - - The CSS style class to be applied to the text of any node that - is currently selected. If not specified, no style class will be - applied to the text of the selected node. - - - - - styleUnselected - false - true - - The CSS style class to be applied to the text of any node that - is *not* currently selected. If not specified, no style class will - be applied to the text of non-selected nodes. - - - - - tree - false - true - - Name of the attribute (in the scope specified by the "scope" - attribute, if any) under which an object of type - org.apache.webapp.admin.TreeControl is stored. This object - represents the entire current state of the tree, including - a representation of the hierarchical representation of the - nodes, plus the current expanded/ or contracted state of - non-leaf nodes. - - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/flex/services-config.xml b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/flex/services-config.xml deleted file mode 100644 index 3fe59b17a6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/flex/services-config.xml +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - - - - - - - - session - org.ow2.jonas.domain.TreeDomain - - - - - - - - - org.ow2.jonas.server.ServerInformation - session - - - - - - - - - org.ow2.jonas.servers.Servers - session - - - - - - - - - org.ow2.jonas.clusters.Clusters - session - - - - - - - - org.ow2.jonas.clusters.Cluster - session - - - - - - - - - - org.ow2.jonas.domain.DomainMap - session - - - - - - - - - org.ow2.jonas.server.ServerMonitoring - session - - - - - - - - - org.ow2.jonas.clusters.ServersInCluster - session - - - - - - - - - org.ow2.jonas.domain.DomainSyntheticView - session - - - - - - - - - org.ow2.jonas.clusters.ClusterSyntheticView - session - - - - - - - - - org.ow2.jonas.stackdump.StackDump - session - - - - - - - - - - org.ow2.jonas.clusterdaemons.ClusterDaemonAdministration - session - - - - - - - - - session - org.ow2.jasmine.kerneos.login.LoginService - - - - - - - - - session - org.ow2.jasmine.kerneos.service.KerneosConfigService - - - - - - - - - - session - org.ow2.jonas.admin.jdbcconnections.service.JDBCConnectionsService - - - - - - - - - session - org.ow2.jonas.admin.auditconsole.service.AuditService - - - - - - - - - - session - org.ow2.jonas.admin.classloader.service.ClassLoaderService - - - - - - - - - session - org.ow2.jonas.admin.osgi.bundle.osgiBundleService - - - - - - - - - session - org.ow2.jonas.admin.osgi.obr.osgiOBRService - - - - - - - - - session - org.ow2.jonas.admin.osgi.service.osgiServiceService - - - - - - - - - session - org.ow2.jonas.admin.osgi.shell.osgiShellService - - - - - - - - - - session - org.ow2.jonas.admin.autostart.service.BuilderService - - - - - - - - - session - org.ow2.easybeans.console.jmxbrowser.service.JMXBrowserService - - - - - - - - - session - org.ow2.easybeans.console.registry.service.RegistryService - - - - - - - - - session - org.ow2.jonas.admin.webservicesconsole.service.WebServicesConsoleService - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/granite/granite-config.xml b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/granite/granite-config.xml deleted file mode 100644 index 60752d4575..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/granite/granite-config.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 77895ba766..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - jonasAdmin - - - true - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/sj.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/sj.tld deleted file mode 100644 index 14492e28c0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/sj.tld +++ /dev/null @@ -1,1262 +0,0 @@ - - - - - - - - 1.0 - 1.2 - sj - - JSP tag library containing custom GUI controls used in the - Jonas Administrative Application. - - - - - - - tabs - org.ow2.jonas.webapp.taglib.TabsTag - JSP - - Render a "tabs" object. - NOTE: The valid nested content for this tag is "tab" and "panel" tags and from this library. - - - - width - false - true - - The width of panel tabs. - - - - - height - false - true - - The height of panel tabs. - - - - - widthTab - false - true - - The width of each tabs. - If it's not specified, the width label text is used. - - - - - heightTab - false - true - - The height of each tabs. - If it's not specified, the height label text is used. - - - - - widthSeparator - false - true - - The space width between each tabs. - By default, 3. - - - - - heightSeparator - false - true - - The space height between tabs and panel. - By default, 1. - - - - - marginPanel - false - true - - The margin of panel. - By default, 5. - - - - - usingWhere - false - true - - Using a WhereAreYou instance in session to retreive some parameters. - - - - - imagesDir - false - true - - The directory where are the images. - Used to find the separator image. - - - - - - - - - tab - org.ow2.jonas.webapp.taglib.TabTag - JSP - - - - - href - false - true - - The href element for the tab. - - - - - forward - false - true - - The forward element for the tab. - - - - - forwardControl - false - true - - The forwardControl element to display the tab. - Note : it's necessary that the treeControl attribute of the parent tabs element exists - and the forwardControl's value is known in the "struts-config.xml" file. - - - - - selected - false - true - - The selected tab. - If none selected tab, the first tab is displayed. - If many selected tabs, the first selected tab is displayed. - - - - anchorfalsetrue - linkNamefalsetrue - namefalsetrue - pagefalsetrue - paramIdfalsetrue - paramNamefalsetrue - paramPropertyfalsetrue - paramScopefalsetrue - propertyfalsetrue - scopefalsetrue - targetfalsetrue - transactionfalsetrue - - - - - - - panel - org.ow2.jonas.webapp.taglib.PanelTag - JSP - - - - - - - - panelSeparator - org.ow2.jonas.webapp.taglib.PanelSeparatorTag - JSP - - - - - - - - xmlEditor - org.ow2.jonas.webapp.taglib.XMLEditorTag - JSP - - Display a form that will allow the user to edit the contents of an - XML file. - - - - fileName - true - true - - The name of the archive from which the XML file is retrieved. - - - - - mapping - true - true - - The mapping of ID to document node. - - - - - pathName - true - true - - The path within the archive to the XML file. - - - - - document - false - true - org.w3c.dom.Document - - The contents of the XML file. - - - - - - - - - - titleContent - org.ow2.jonas.webapp.taglib.TitleContentTag - JSP - - Render a title. - - - - usingWhere - false - true - - Using a WhereAreYou instance in session to retreive some parameters. - - - - usingParent - false - true - - Display the parent node label. - NOTA : "usingWhere" attribute it's mandatory to use this option. - - - - tomThumb - false - true - - Display the Tom Thumb for the current node. - NOTA : "usingWhere" attribute it's mandatory to use this option. - - - - tomThumbIcons - false - true - - Display the icons associates in the each item of the Tom Thumb. - NOTA : "tomThumb" attribute it's mandatory to use this option. - - - - - image - false - true - - The image to display. - - - - - title - false - true - - The title to display. - - - - - - - - - grid - org.ow2.jonas.webapp.taglib.GridTag - JSP - - Simple HTML Tag "table" with possibility alternate style line - - globalRowStyleClasstrue - oddStyleClasstrue - evenStyleClasstrue - periodRowtrue - bordertrue - cellSpacingtrue - cellPaddingtrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - gridrow - org.ow2.jonas.webapp.taglib.GridRowTag - JSP - - - changeStyletrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - gridcol - org.ow2.jonas.webapp.taglib.GridColTag - JSP - - Idem Html Tag "td" - - - aligntrue - valigntrue - widthtrue - heighttrue - nowrapfalse - colspanfalse - rowspanfalse - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jonasgrid - org.ow2.jonas.webapp.taglib.JonasGridTag - JSP - - Extends GridTag with default values : - - cellSpacing = "0" - - cellPadding = "2" - - width = "100%" - - globalRowStyleClasstrue - oddStyleClasstrue - evenStyleClasstrue - periodRowtrue - bordertrue - cellSpacingtrue - cellPaddingtrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jgRowTitle - org.ow2.jonas.webapp.taglib.JonasGridRowTitleTag - JSP - - - leveltrue - changeStyletrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jgColTitle - org.ow2.jonas.webapp.taglib.JonasGridColTitleTag - JSP - - - - aligntrue - valigntrue - widthtrue - heighttrue - nowrapfalse - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jgName - org.ow2.jonas.webapp.taglib.JonasGridNameTag - JSP - - Idem Html Tag "td" with : - - align = "right" - - width = "19%" - - valign = "top" - and a new column to space. - - - boldtrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - jonasgridname - org.ow2.jonas.webapp.taglib.JonasGridNameTag - JSP - - Idem Html Tag "td" with : - - align = "right" - - width = "19%" - - valign = "top" - and a new column to space. - - - boldtrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jgNameTitle - org.ow2.jonas.webapp.taglib.JonasGridNameTitleTag - JSP - - - - boldtrue - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - jgValue - org.ow2.jonas.webapp.taglib.JonasGridValueTag - JSP - - Idem Html Tag "td" with : - - align = "left" - - width = "80%" - - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - jonasgridvalue - org.ow2.jonas.webapp.taglib.JonasGridValueTag - JSP - - Idem Html Tag "td" with : - - align = "left" - - width = "80%" - - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jgValueTitle - org.ow2.jonas.webapp.taglib.JonasGridValueTitleTag - JSP - - - - aligntrue - valigntrue - widthtrue - heighttrue - - onblurtrue - onchangetrue - onclicktrue - ondblclicktrue - onfocustrue - onkeydowntrue - onkeypresstrue - onkeyuptrue - onmousedowntrue - onmousemovetrue - onmouseouttrue - onmouseovertrue - onmouseuptrue - styletrue - styleClasstrue - - - - - - jonasbutton - org.ow2.jonas.webapp.taglib.JonasButtonTag - - - disabled - false - true - - - disabledName - false - true - - - disabledProperty - false - true - - - disabledValueEqual - false - true - - - disabledValueNotEqual - false - true - - - - accesskey - false - true - - - anchor - false - true - - - forward - false - true - - -href -false -true - - -linkName -false -true - - -name -false -true - - -onblur -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -target -false -true - - -title -false -true - - -transaction -false -true - - - - - - - jgSubmit - org.ow2.jonas.webapp.taglib.JonasSubmitTag - - - form - false - true - - - - value - false - true - - - - disabled - false - true - - - - accesskey - false - true - - - anchor - false - true - - - forward - false - true - - -href -false -true - - -linkName -false -true - - -name -false -true - - -onblur -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -target -false -true - - -title -false -true - - -transaction -false -true - - - - - - - xmlFile - org.ow2.jonas.webapp.taglib.XmlFileTag - JSP - - Render a Xml file. - - - - - - - - - - tree - org.ow2.jonas.webapp.taglib.TreeControlRenderTag - empty - - Render a "tree" control, based on the current state of a data object - of type org.apache.webapp.admin.TreeControl, which is identified - by the name specified in the "tree" attribute, in the JSP scope - specified by the "scope" attribute. - - - - action - false - true - - Hyperlink to which expand/contract actions should be sent, - with a string "${node}" marking where the node name of the - affected node should be included (which will usually be as - the value of a request parameter). - - - - - images - false - true - - Name of a directory containing the images for our icons, - relative to the page including this tag. If not specified, - defaults to "images". - - - - - scope - false - true - - The JSP scope within which the "tree" attribute is to be found - (page, request, session, or application). If not specified, the - "tree" attribute will be searched for in any scope. - - - - - style - false - true - - The CSS style class to be applied to the entire rendered output - of the tree control. If not specified, no overall style class - is applied. - - - - - styleSelected - false - true - - The CSS style class to be applied to the text of any node that - is currently selected. If not specified, no style class will be - applied to the text of the selected node. - - - - - styleUnselected - false - true - - The CSS style class to be applied to the text of any node that - is *not* currently selected. If not specified, no style class will - be applied to the text of non-selected nodes. - - - - - tree - false - true - - Name of the attribute (in the scope specified by the "scope" - attribute, if any) under which an object of type - org.apache.webapp.admin.TreeControl is stored. This object - represents the entire current state of the tree, including - a representation of the hierarchical representation of the - nodes, plus the current expanded/ or contracted state of - non-leaf nodes. - - - - - - - - - - refreshTree - org.ow2.jonas.webapp.taglib.RefreshTreeTag - empty - - Refresh a "tree" control. To use before the body to be sure that run with all browsers. - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-bean.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-bean.tld deleted file mode 100644 index a4b8fd7fdf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-bean.tld +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - -1.2 -1.1 -bean -http://struts.apache.org/tags-bean - -cookie -org.apache.struts.taglib.bean.CookieTag -org.apache.struts.taglib.bean.CookieTei -empty - -id -true -false - - -multiple -false -true - - -name -true -true - - -value -false -true - - - -define -org.apache.struts.taglib.bean.DefineTag -org.apache.struts.taglib.bean.DefineTei -JSP - -id -true -false - - -name -false -true - - -property -false -true - - -scope -false -true - - -toScope -false -true - - -type -false -true - - -value -false -true - - - -header -org.apache.struts.taglib.bean.HeaderTag -org.apache.struts.taglib.bean.HeaderTei -empty - -id -true -false - - -multiple -false -true - - -name -true -true - - -value -false -true - - - -include -org.apache.struts.taglib.bean.IncludeTag -org.apache.struts.taglib.bean.IncludeTei -empty - -anchor -false -true - - -forward -false -true - - -href -false -true - - -id -true -false - - -name -false -true - - -page -false -true - - -transaction -false -true - - - -message -org.apache.struts.taglib.bean.MessageTag -empty - -arg0 -false -true - - -arg1 -false -true - - -arg2 -false -true - - -arg3 -false -true - - -arg4 -false -true - - -bundle -false -true - - -key -false -true - - -locale -false -true - - -name -false -true - - -property -false -true - - -scope -false -true - - - -page -org.apache.struts.taglib.bean.PageTag -org.apache.struts.taglib.bean.PageTei -empty - -id -true -false - - -property -true -true - - - -parameter -org.apache.struts.taglib.bean.ParameterTag -org.apache.struts.taglib.bean.ParameterTei -empty - -id -true -false - - -multiple -false -true - - -name -true -true - - -value -false -true - - - -resource -org.apache.struts.taglib.bean.ResourceTag -org.apache.struts.taglib.bean.ResourceTei -empty - -id -true -false - - -input -false -true - - -name -true -true - - - -size -org.apache.struts.taglib.bean.SizeTag -org.apache.struts.taglib.bean.SizeTei -empty - -collection -false -true - - -id -true -false - - -name -false -true - - -property -false -true - - -scope -false -true - - - -struts -org.apache.struts.taglib.bean.StrutsTag -org.apache.struts.taglib.bean.StrutsTei -empty - -id -true -false - - -formBean -false -true - - -forward -false -true - - -mapping -false -true - - - -write -org.apache.struts.taglib.bean.WriteTag -empty - -bundle -false -true - - -filter -false -true - - -format -false -true - - -formatKey -false -true - - -ignore -false -true - - -locale -false -true - - -name -true -true - - -property -false -true - - -scope -false -true - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-config.xml b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-config.xml deleted file mode 100644 index cbf2a30ea7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-config.xml +++ /dev/null @@ -1,2134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-html.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-html.tld deleted file mode 100644 index b8be00e3f7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-html.tld +++ /dev/null @@ -1,3032 +0,0 @@ - - - - - - - - - - -1.2 -1.1 -html -http://struts.apache.org/tags-html - -base -org.apache.struts.taglib.html.BaseTag -empty - -target -false -true - - -server -false -true - - - -button -org.apache.struts.taglib.html.ButtonTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -cancel -org.apache.struts.taglib.html.CancelTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -checkbox -org.apache.struts.taglib.html.CheckboxTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -errors -org.apache.struts.taglib.html.ErrorsTag -empty - -bundle -false -true - - -locale -false -true - - -name -false -true - - -property -false -true - - - -file -org.apache.struts.taglib.html.FileTag - -accesskey -false -true - - -accept -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -maxlength -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -size -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -form -org.apache.struts.taglib.html.FormTag -JSP - -action -true -true - - -acceptCharset -false -true - - -enctype -false -true - - -focus -false -true - - -focusIndex -false -true - - -method -false -true - - -onreset -false -true - - -onsubmit -false -true - - -scriptLanguage -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -target -false -true - - - -frame -org.apache.struts.taglib.html.FrameTag - -action -false -true - - -module -false -true - - -anchor -false -true - - -forward -false -true - - -frameborder -false -true - - -frameName -false -true - - -href -false -true - - -longdesc -false -true - - -marginheight -false -true - - -marginwidth -false -true - - -name -false -true - - -noresize -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -scrolling -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -title -false -true - - -titleKey -false -true - - -transaction -false -true - - - -hidden -org.apache.struts.taglib.html.HiddenTag -empty - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - -write -false -true - - - -html -org.apache.struts.taglib.html.HtmlTag -JSP - -lang -false -true - - -locale -false -true - - -xhtml -false -true - - - -image -org.apache.struts.taglib.html.ImageTag - -accesskey -false -true - - -align -false -true - - -alt -false -true - - -altKey -false -true - - -border -false -true - - -bundle -false -true - - -disabled -false -true - - -indexed -false -true - - -locale -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -page -false -true - - -pageKey -false -true - - -property -false -true - - -src -false -true - - -srcKey -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -img -org.apache.struts.taglib.html.ImgTag -empty - -align -false -true - - -alt -false -true - - -altKey -false -true - - -border -false -true - - -bundle -false -true - - -contextRelative -false -true - - -height -false -true - - -hspace -false -true - - -imageName -false -true - - -ismap -false -true - - -locale -false -true - - -lowsrc -false -true - - -name -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -paramId -false -true - - -page -false -true - - -pageKey -false -true - - -action -false -true - - -module -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -src -false -true - - -srcKey -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -title -false -true - - -titleKey -false -true - - -useLocalEncoding -false -true - - -usemap -false -true - - -vspace -false -true - - -width -false -true - - - -javascript -org.apache.struts.taglib.html.JavascriptValidatorTag -empty - -cdata -false -true - - -dynamicJavascript -false -false - - -formName -false -true - - -method -false -true - - -page -false -true - - -scriptLanguage -false -true - - -src -false -true - - -staticJavascript -false -false - - -htmlComment -false -true - - - -link -org.apache.struts.taglib.html.LinkTag - -accesskey -false -true - - -action -false -true - - -module -false -true - - -anchor -false -true - - -forward -false -true - - -href -false -true - - -indexed -false -true - - -indexId -false -true - - -linkName -false -true - - -name -false -true - - -onblur -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -target -false -true - - -title -false -true - - -titleKey -false -true - - -transaction -false -true - - -useLocalEncoding -false -true - - - -messages -org.apache.struts.taglib.html.MessagesTag -org.apache.struts.taglib.html.MessagesTei -JSP - -id -true -false - - -bundle -false -true - - -locale -false -true - - -name -false -true - - -property -false -true - - -header -false -true - - -footer -false -true - - -message -false -true - - - -multibox -org.apache.struts.taglib.html.MultiboxTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -option -org.apache.struts.taglib.html.OptionTag - -bundle -false -true - - -disabled -false -true - - -key -false -true - - -locale -false -true - - -style -false -true - - -styleId -false -true - - -styleClass -false -true - - -value -true -true - - - -options -org.apache.struts.taglib.html.OptionsTag -empty - -collection -false -true - - -filter -false -true - - -labelName -false -true - - -labelProperty -false -true - - -name -false -true - - -property -false -true - - -style -false -true - - -styleClass -false -true - - - -optionsCollection -org.apache.struts.taglib.html.OptionsCollectionTag -empty - -filter -false -true - - -label -false -true - - -name -false -true - - -property -false -true - - -style -false -true - - -styleClass -false -true - - -value -false -true - - - -password -org.apache.struts.taglib.html.PasswordTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -maxlength -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -readonly -false -true - - -redisplay -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -size -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -radio -org.apache.struts.taglib.html.RadioTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -property -true -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -true -true - - -idName -false -true - - - -reset -org.apache.struts.taglib.html.ResetTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -rewrite -org.apache.struts.taglib.html.RewriteTag -empty - -action -false -true - - -module -false -true - - -anchor -false -true - - -forward -false -true - - -href -false -true - - -name -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -transaction -false -true - - -useLocalEncoding -false -true - - - -select -org.apache.struts.taglib.html.SelectTag -JSP - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -multiple -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -size -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -submit -org.apache.struts.taglib.html.SubmitTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -text -org.apache.struts.taglib.html.TextTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -disabled -false -true - - -indexed -false -true - - -maxlength -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -readonly -false -true - - -size -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -textarea -org.apache.struts.taglib.html.TextareaTag - -accesskey -false -true - - -alt -false -true - - -altKey -false -true - - -cols -false -true - - -disabled -false -true - - -indexed -false -true - - -name -false -true - - -onblur -false -true - - -onchange -false -true - - -onclick -false -true - - -ondblclick -false -true - - -onfocus -false -true - - -onkeydown -false -true - - -onkeypress -false -true - - -onkeyup -false -true - - -onmousedown -false -true - - -onmousemove -false -true - - -onmouseout -false -true - - -onmouseover -false -true - - -onmouseup -false -true - - -property -true -true - - -readonly -false -true - - -rows -false -true - - -style -false -true - - -styleClass -false -true - - -styleId -false -true - - -tabindex -false -true - - -title -false -true - - -titleKey -false -true - - -value -false -true - - - -xhtml -org.apache.struts.taglib.html.XhtmlTag -empty - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-logic.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-logic.tld deleted file mode 100644 index f267fcc917..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-logic.tld +++ /dev/null @@ -1,652 +0,0 @@ - - - - - - - - - -1.2 -1.1 -logic -http://struts.apache.org/tags-logic - -empty -org.apache.struts.taglib.logic.EmptyTag -JSP - -name -false -true - - -property -false -true - - -scope -false -true - - - -equal -org.apache.struts.taglib.logic.EqualTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -forward -org.apache.struts.taglib.logic.ForwardTag -empty - -name -true -true - - - -greaterEqual -org.apache.struts.taglib.logic.GreaterEqualTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -greaterThan -org.apache.struts.taglib.logic.GreaterThanTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -iterate -org.apache.struts.taglib.logic.IterateTag -org.apache.struts.taglib.logic.IterateTei -JSP - -collection -false -true - - -id -true -false - - -indexId -false -false - - -length -false -true - - -name -false -true - - -offset -false -true - - -property -false -true - - -scope -false -true - - -type -false -true - - - -lessEqual -org.apache.struts.taglib.logic.LessEqualTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -lessThan -org.apache.struts.taglib.logic.LessThanTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -match -org.apache.struts.taglib.logic.MatchTag -JSP - -cookie -false -true - - -header -false -true - - -location -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -messagesNotPresent -org.apache.struts.taglib.logic.MessagesNotPresentTag -JSP - -name -false -true - - -property -false -true - - -message -false -true - - - -messagesPresent -org.apache.struts.taglib.logic.MessagesPresentTag -JSP - -name -false -true - - -property -false -true - - -message -false -true - - - -notEmpty -org.apache.struts.taglib.logic.NotEmptyTag -JSP - -name -false -true - - -property -false -true - - -scope -false -true - - - -notEqual -org.apache.struts.taglib.logic.NotEqualTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -notMatch -org.apache.struts.taglib.logic.NotMatchTag -JSP - -cookie -false -true - - -header -false -true - - -location -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -scope -false -true - - -value -true -true - - - -notPresent -org.apache.struts.taglib.logic.NotPresentTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -role -false -true - - -scope -false -true - - -user -false -true - - - -present -org.apache.struts.taglib.logic.PresentTag -JSP - -cookie -false -true - - -header -false -true - - -name -false -true - - -parameter -false -true - - -property -false -true - - -role -false -true - - -scope -false -true - - -user -false -true - - - -redirect -org.apache.struts.taglib.logic.RedirectTag - -action -false -true - - -anchor -false -true - - -forward -false -true - - -href -false -true - - -name -false -true - - -page -false -true - - -paramId -false -true - - -paramName -false -true - - -paramProperty -false -true - - -paramScope -false -true - - -property -false -true - - -scope -false -true - - -transaction -false -true - - -useLocalEncoding -false -true - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-template.tld b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-template.tld deleted file mode 100644 index 6ed25493f9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/struts-template.tld +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - -1.0 -1.1 -template -http://jakarta.apache.org/struts/tags-template-1.0.2 - -insert -org.apache.struts.taglib.template.InsertTag -JSP - -template -true -true - - - -put -org.apache.struts.taglib.template.PutTag -JSP - -name -true -true - - -role -false -true - - -content -false -true - - -direct -false -true - - - -get -org.apache.struts.taglib.template.GetTag -empty - -flush -false -true - - -name -true -true - - -role -false -true - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/web.xml b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 9af7b1283d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,575 +0,0 @@ - - - - Jonas Administration Application - Jonas HTML based administration web application. - - - AMFMessageFilter - - org.granite.messaging.webapp.AMFMessageFilter - - - - AMFMessageFilter - /graniteamf/* - - - - org.granite.config.GraniteConfigListener - - - action - org.apache.struts.action.ActionServlet - - config - /WEB-INF/struts-config.xml - - - debug - 0 - - - detail - 0 - - - locale - true - - - nocache - true - - - tagsimagesroot - ${CONTEXT}/images - - - treebuilders - org.ow2.jonas.webapp.jonasadmin.JonasTreeBuilder - - - validate - true - - 2 - - - MemoryGraphServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.MemoryGraphServlet - - - MemoryGraphRemoteHostServlet - org.ow2.jonas.webapp.jonasadmin.clusterd.servlet.MemoryGraphRemoteHostServlet - - - - ThreadCountServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.ThreadCountServlet - - - ServerCurrentTxServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.ServerCurrentTxServlet - - - - AMFMessageServlet - - org.granite.messaging.webapp.AMFMessageServlet - - 1 - - - - - BytesReceivedByConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.BytesReceivedByConnectorTomcatServlet - - - - BytesSentByConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.BytesSentByConnectorTomcatServlet - - - - - ErrorCountByConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ErrorCountByConnectorTomcatServlet - - - - - ProcessingTimeByConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ProcessingTimeByConnectorTomcatServlet - - - - RequestCountByConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.RequestCountByConnectorTomcatServlet - - - - - ThreadBusyConnectorTomcatServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ThreadBusyConnectorTomcatServlet - - - - - - - - JmsQMsgDeliverServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.JmsQMsgDeliverServlet - - - - - JmsQMsgReceiveServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.JmsQMsgReceiveServlet - - - - - - JmsTopicMsgDeliverServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.JmsTopicMsgDeliverServlet - - - - - JmsTopicMsgReceiveServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.JmsTopicMsgReceiveServlet - - - - - - - TotalCommittedTransactionsServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.TotalCommittedTransactionsServlet - - - - BegunTransactionsServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.BegunTransactionsServlet - - - - TotalExpiredTransactionsServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.TotalExpiredTransactionsServlet - - - - - TotalRolledbackTransactionsServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.TotalRolledbackTransactionsServlet - - - - - - ConnectionFailuresJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ConnectionFailuresJCAConnectionServlet - - - - - ConnectionLeaksJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ConnectionLeaksJCAConnectionServlet - - - - - CurrentBusyJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentBusyJCAConnectionServlet - - - - - RejectedOpenJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.RejectedOpenJCAConnectionServlet - - - - - ServedOpenJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ServedOpenJCAConnectionServlet - - - - - WaiterCountJCAConnectionServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.WaiterCountJCAConnectionServlet - - - - - - - - ConnectionLeaksJDBCResourceServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ConnectionLeaksJDBCResourceServlet - - - - - CurrentBusyJDBCResourceServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentBusyJDBCResourceServlet - - - - - RejectedOpenJDBCResourceServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.RejectedOpenJDBCResourceServlet - - - - - ServedOpenJDBCResourceServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.ServedOpenJDBCResourceServlet - - - - - WaiterCountJDBCResourceServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.WaiterCountJDBCResourceServlet - - - - CurrentNumberOfEJBServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentNumberOfEJBServlet - - - - - - CurrentNumberOfEntityBeanServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentNumberOfEntityBeanServlet - - - - - CurrentNumberOfMDBServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentNumberOfMDBServlet - - - - - CurrentNumberOfSBFServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentNumberOfSBFServlet - - - - - - CurrentNumberOfSBLServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.CurrentNumberOfSBLServlet - - - - LoadCPUServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.LoadCPUServlet - - - - - WorkersServlet - org.ow2.jonas.webapp.jonasadmin.monitoring.graph.servlets.server.WorkersServlet - - - - LogoutServlet - org.ow2.jasmine.kerneos.login.LogoutServlet - - - - FileUploadServlet - org.ow2.jonas.admin.autostart.servlet.FileUploadServlet - - - - FileDownloadServlet - org.ow2.jonas.admin.autostart.servlet.FileDownloadServlet - - - - - - FileUploadServlet - /FileUploadServlet - - - - FileDownloadServlet - /FileDownloadServlet - - - LogoutServlet - /LogoutServlet - - action - *.do - - - MemoryGraphRemoteHostServlet - /MemoryGraphRemoteHostServlet - - - MemoryGraphServlet - /MemoryGraphServlet - - - ThreadCountServlet - /ThreadCountServlet - - - ServerCurrentTxServlet - /ServerCurrentTxServlet - - - - BytesReceivedByConnectorTomcatServlet - /BytesReceivedByConnectorTomcatServlet - - - - BytesSentByConnectorTomcatServlet - /BytesSentByConnectorTomcatServlet - - - ErrorCountByConnectorTomcatServlet - /ErrorCountByConnectorTomcatServlet - - - - ProcessingTimeByConnectorTomcatServlet - /ProcessingTimeByConnectorTomcatServlet - - - - RequestCountByConnectorTomcatServlet - /RequestCountByConnectorTomcatServlet - - - - ThreadBusyConnectorTomcatServlet - /ThreadBusyConnectorTomcatServlet - - - - - AMFMessageServlet - /graniteamf/* - - - - - - JmsQMsgDeliverServlet - /JmsQMsgDeliverServlet - - - - JmsQMsgReceiveServlet - /JmsQMsgReceiveServlet - - - - JmsTopicMsgDeliverServlet - /JmsTopicMsgDeliverServlet - - - - JmsTopicMsgReceiveServlet - /JmsTopicMsgReceiveServlet - - - - TotalCommittedTransactionsServlet - /TotalCommittedTransactionsServlet - - - - BegunTransactionsServlet - /BegunTransactionsServlet - - - - TotalExpiredTransactionsServlet - /TotalExpiredTransactionsServlet - - - - TotalRolledbackTransactionsServlet - /TotalRolledbackTransactionsServlet - - - - ConnectionFailuresJCAConnectionServlet - /ConnectionFailuresJCAConnectionServlet - - - ConnectionLeaksJCAConnectionServlet - /ConnectionLeaksJCAConnectionServlet - - - - CurrentBusyJCAConnectionServlet - /CurrentBusyJCAConnectionServlet - - - - RejectedOpenJCAConnectionServlet - /RejectedOpenJCAConnectionServlet - - - ServedOpenJCAConnectionServlet - /ServedOpenJCAConnectionServlet - - - - WaiterCountJCAConnectionServlet - /WaiterCountJCAConnectionServlet - - - - - ConnectionLeaksJDBCResourceServlet - /ConnectionLeaksJDBCResourceServlet - - - - CurrentBusyJDBCResourceServlet - /CurrentBusyJDBCResourceServlet - - - RejectedOpenJDBCResourceServlet - /RejectedOpenJDBCResourceServlet - - - - ServedOpenJDBCResourceServlet - /ServedOpenJDBCResourceServlet - - - - WaiterCountJDBCResourceServlet - /WaiterCountJDBCResourceServlet - - - - - - CurrentNumberOfEJBServlet - /CurrentNumberOfEJBServlet - - - - CurrentNumberOfEntityBeanServlet - /CurrentNumberOfEntityBeanServlet - - - - CurrentNumberOfMDBServlet - /CurrentNumberOfMDBServlet - - - - CurrentNumberOfSBFServlet - /CurrentNumberOfSBFServlet - - - - CurrentNumberOfSBLServlet - /CurrentNumberOfSBLServlet - - - - LoadCPUServlet - /LoadCPUServlet - - - - /WEB-INF/struts-bean.tld - /WEB-INF/struts-bean.tld - - - /WEB-INF/struts-html.tld - /WEB-INF/struts-html.tld - - - /WEB-INF/struts-logic.tld - /WEB-INF/struts-logic.tld - - - /WEB-INF/struts-template.tld - /WEB-INF/struts-template.tld - - - Jonas Server Configuration Security Constraint - - Protected Area - /MemoryGraphServlet - /MemoryGraphRemoteHostServlet - /ThreadCountServlet - /ServerCurrentTxServlet - - /BytesReceivedByConnectorTomcatServlet - /BytesSentByConnectorTomcatServlet - /ErrorCountByConnectorTomcatServlet - /ProcessingTimeByConnectorTomcatServlet - /RequestCountByConnectorTomcatServlet - /ThreadBusyConnectorTomcatServlet - /JmsQMsgDeliverServlet - /JmsQMsgReceiveServlet - /JmsTopicMsgDeliverServlet - /JmsTopicMsgReceiveServlet - /TotalCommittedTransactionsServlet - /BegunTransactionsServlet - /TotalExpiredTransactionsServlet - /TotalRolledbackTransactionsServlet - /ConnectionFailuresJCAConnectionServlet - /ConnectionLeaksJCAConnectionServlet - /CurrentBusyJCAConnectionServlet - /RejectedOpenJCAConnectionServlet - /ServedOpenJCAConnectionServlet - /WaiterCountJCAConnectionServlet - /ConnectionLeaksJDBCResourceServlet - /CurrentBusyJDBCResourceServlet - /RejectedOpenJDBCResourceServlet - /ServedOpenJDBCResourceServlet - /WaiterCountJDBCResourceServlet - /CurrentNumberOfEJBServlet - /CurrentNumberOfEntityBeanServlet - /CurrentNumberOfMDBServlet - /CurrentNumberOfSBFServlet - /CurrentNumberOfSBLServlet - /LoadCPUServlet - *.jsp - *.do - *.html - *.swf - - - jonas-admin - - - NONE - - - - - FORM - JOnAS Realm - - /login.jsp - /error.jsp - - - - The role that is required to log in to the Administration Application - jonas-admin - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/begin.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/begin.jsp deleted file mode 100644 index 9a97a5e211..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/begin.jsp +++ /dev/null @@ -1,5 +0,0 @@ - - <bean:message key="title.application"/> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/blank.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/blank.jsp deleted file mode 100644 index deb0aaf7ce..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/blank.jsp +++ /dev/null @@ -1,24 +0,0 @@ - - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - - - - -<%@ include file="begin.jsp" %> - - - - - - - - - -<%@ include file="end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connector.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connector.jsp deleted file mode 100644 index 663b66fa26..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connector.jsp +++ /dev/null @@ -1,410 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%-- do not show scheme while creating a new connector --%> - - - - - - - - - - - - - - <%-- do not show scheme while creating a new connector --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%-- Input only allowed on create transaction --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --%> - - <%-- The following properties are deprecated--%> - -<%-- The following properties are supported only for Coyote HTTP/S 1.1 Connectors --%> - - - - - - - - - - - - - - - - - - - -<%-- The following properties are supported only on HTTPS Connector --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%-- Input allowed only on create --%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectors.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectors.jsp deleted file mode 100644 index 0b7ffa8dfb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectors.jsp +++ /dev/null @@ -1,99 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectorsConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectorsConfirm.jsp deleted file mode 100644 index 86557e4d22..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/catalina/connectorsConfirm.jsp +++ /dev/null @@ -1,60 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/DaemonProxyClusterDisplayServerConfig.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/DaemonProxyClusterDisplayServerConfig.jsp deleted file mode 100644 index cf74cf8b44..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/DaemonProxyClusterDisplayServerConfig.jsp +++ /dev/null @@ -1,129 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - -<%@ include file="../common/begin.jsp"%> - - - - - - infos - - - - - - Config. - - - - - - Name - - - - - - - State - - - - - - Description - - - - - - - - - java Home - - - - - - - Jonas Root - - - - - - - Jonas Base - - - - - - - - - - - java Home - - - - - - - Jonas Root - - - - - - - Jonas Base - - - - - - - - - Extra parameter - - - - - - Auto Boot - - - - - - - - - - - - - Confirm configuration - - - - - - - - -<%@ include file="../common/end.jsp"%> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/addServerCd.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/addServerCd.jsp deleted file mode 100644 index de8fd7cb84..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/addServerCd.jsp +++ /dev/null @@ -1,141 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> -<% -String cdName = (String) request.getAttribute("clusterdName"); -%> - - - - - - - - <%=cdName%> infos - - - - - - - - - - - - - - - - - - - Add Server - - - - - - Add Server & Save - - - - - Remove from view - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Configure - - - - - - - - Configure - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp"%> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/daemonProxyClusterModify.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/daemonProxyClusterModify.jsp deleted file mode 100644 index 218ca28976..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/daemonProxyClusterModify.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/graph/vmMemory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/graph/vmMemory.jsp deleted file mode 100644 index 9fa49d6c0f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/graph/vmMemory.jsp +++ /dev/null @@ -1,76 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - Infos - Used Memory - - - - - - " name="memory" width="" height=""> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/serversConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/serversConfirm.jsp deleted file mode 100644 index 5fa7104378..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/clusterd/serversConfirm.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Domain - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiClusterInfo.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiClusterInfo.jsp deleted file mode 100644 index 51da893700..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiClusterInfo.jsp +++ /dev/null @@ -1,69 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    -
    - - - - - - - - - - - -   - - - - - - -
    -
    -
    -<%@ include file="../common/end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiInfo.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiInfo.jsp deleted file mode 100644 index 1df533d3f8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiInfo.jsp +++ /dev/null @@ -1,159 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CMI Global Properties - - - - - - -
        -
    - - - -     - - -
    -
    - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - -
    -
    -
    -
    - <%@ include file="../common/end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiObjectInfo.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiObjectInfo.jsp deleted file mode 100644 index 870622d4bd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiObjectInfo.jsp +++ /dev/null @@ -1,270 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - -
    - - - -
    - -
    -
    - - - -
    - - - - -
    - -
    -
    - - - -
    - -
    - - - - - - - - - - - - - -     - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - -
    - - -
    -     -
    -
    - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - -
    - - - -
    - -
    -
    - - - - -
    - - - -
    - -
    -
    - - - - -
    -
    - - - - - - - - - - -
    -
    -
    - <%@ include file="../common/end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiProtocolInfo.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiProtocolInfo.jsp deleted file mode 100644 index 271a59180f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiProtocolInfo.jsp +++ /dev/null @@ -1,70 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    -
    - - - - - - - - - - - -   - - - - - - -
    -
    -
    -<%@ include file="../common/end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiServerInfo.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiServerInfo.jsp deleted file mode 100644 index d74225ce00..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/cmi/displayCmiServerInfo.jsp +++ /dev/null @@ -1,85 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - - - -
    -
    - - - -
    - - - -
        -
    - - - -     - - -
    -
    - - - - - - - - - - -
    -
    -
    -<%@ include file="../common/end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/begin.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/begin.jsp deleted file mode 100644 index 5de2b5318c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/begin.jsp +++ /dev/null @@ -1,7 +0,0 @@ - - <bean:message key="title.application"/> - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/end.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/common/end.jsp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deploy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deploy.jsp deleted file mode 100644 index 8269057c80..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deploy.jsp +++ /dev/null @@ -1,91 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    - - - -
     
    - - - -
    -
    - - - - - - -
    - -   - -   - -
    - - - - - - - - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deployConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deployConfirm.jsp deleted file mode 100644 index d86c6ffe55..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/deployConfirm.jsp +++ /dev/null @@ -1,109 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeploy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeploy.jsp deleted file mode 100644 index 9e3ba75a36..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeploy.jsp +++ /dev/null @@ -1,164 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - -   - - - - - - - -   -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    - -
    -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployConfirm.jsp deleted file mode 100644 index 35c26d74d2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployConfirm.jsp +++ /dev/null @@ -1,125 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - Action selected: - - - - - Action selected: - - - - - Action selected: - - - - - Replace existing files: Yes - - - - - Replace existing files: No - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployProgress.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployProgress.jsp deleted file mode 100644 index aa5cf7e9c2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainDeployProgress.jsp +++ /dev/null @@ -1,95 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Total applications to undeploy: - - - Total applications to deploy: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainUndeployConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainUndeployConfirm.jsp deleted file mode 100644 index 26a2485486..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/domainUndeployConfirm.jsp +++ /dev/null @@ -1,92 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/remove.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/remove.jsp deleted file mode 100644 index 77659fd1df..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/remove.jsp +++ /dev/null @@ -1,75 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/removeConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/removeConfirm.jsp deleted file mode 100644 index 64d50e0ca7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/removeConfirm.jsp +++ /dev/null @@ -1,95 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/upload.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/upload.jsp deleted file mode 100644 index e02e1bc2bf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/upload.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/uploadResult.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/uploadResult.jsp deleted file mode 100644 index d58d077046..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/deploy/uploadResult.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - FileName - <%= request.getAttribute("fileName") %> - - - The File size - <%= request.getAttribute("size") %> - - - Result - <%= request.getAttribute("data") %> - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addCluster.jsp deleted file mode 100644 index 00bdd7ac2c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addCluster.jsp +++ /dev/null @@ -1,51 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServer.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServer.jsp deleted file mode 100644 index 4032d9f16b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServer.jsp +++ /dev/null @@ -1,86 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServerCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServerCluster.jsp deleted file mode 100644 index e2dc46a1e5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/addServerCluster.jsp +++ /dev/null @@ -1,83 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - No servers to add - - - - - - - Cluster name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/clustercmi.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/clustercmi.jsp deleted file mode 100644 index 2f3ffd744c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/clustercmi.jsp +++ /dev/null @@ -1,110 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - no cluster daemon - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/domain.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/domain.jsp deleted file mode 100644 index c242b2b86a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/domain.jsp +++ /dev/null @@ -1,562 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirm.jsp deleted file mode 100644 index 8b22c69f0d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirm.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Domain - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirmMove.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirmMove.jsp deleted file mode 100644 index 61142cc552..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/domain/serversConfirmMove.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/end.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/end.jsp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/error.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/error.jsp deleted file mode 100644 index 732318afa6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/error.jsp +++ /dev/null @@ -1,36 +0,0 @@ - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - - - -<%@ include file="begin.jsp" %> - - - - - - - - - - - - - - -
     
    - - - - - -<%@ include file="end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/framemain.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/framemain.jsp deleted file mode 100644 index 9ee311e8a8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/framemain.jsp +++ /dev/null @@ -1,19 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - -<%@ include file="begin.jsp" %> - - " scrolling="auto"> - " scrolling="No"> - -<%@ include file="end.jsp" %> - - -<body bgcolor="#FFFFFF" text="#000000"> - <h1>Sorry, use a browser who accepts the frames !</h1> -</body> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/frameright.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/frameright.jsp deleted file mode 100644 index b9d27cbedf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/frameright.jsp +++ /dev/null @@ -1,19 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - -<%@ include file="begin.jsp" %> - - " scrolling="No"> - " scrolling="auto"> - -<%@ include file="end.jsp" %> - - -<body bgcolor="#FFFFFF" text="#000000"> - <h1>Sorry, use a browser who accepts the frames !</h1> -</body> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/globalerror.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/globalerror.jsp deleted file mode 100644 index 842a0f8fa9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/globalerror.jsp +++ /dev/null @@ -1,44 +0,0 @@ - - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - - - - -<%@ include file="begin.jsp" %> - - - - - - - - - - - - - -

     
    - - - - -<%@ include file="end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/button/GraphButton.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/button/GraphButton.png deleted file mode 100644 index 6142124230a94d0966bc85b9a2967874c411025f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1160 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 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot.gif deleted file mode 100644 index 5bfd67a2d6f72ac3a55cbfcea5866e841d22f5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 mcmZ?wbhEHbWMp7uXkdT>#h)yUAf^t80Ld^gF}W}@SOWlZ0R#L1 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot1.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot1.gif deleted file mode 100644 index 5bfd67a2d6f72ac3a55cbfcea5866e841d22f5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 mcmZ?wbhEHbWMp7uXkdT>#h)yUAf^t80Ld^gF}W}@SOWlZ0R#L1 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot5.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/dot5.gif deleted file mode 100644 index 52019098523be482650b88d8b37ec0abcc90618c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 ocmZ?wbhEHbWMyDwXkdT>#h)yUAf^t80Ld^gv9$EBj9{<^0D}_+-2eap diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/BalJonasGreen.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/BalJonasGreen.gif deleted file mode 100644 index 4be83dc838e073d70cc949bcb645319801acac31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-ybfP) zQ4kmDqLcmu+P}cXrOpl_f{U|G3JN-@h!jg(ga}G&6Qd;Y<-Pa4_c}-0=g+_(0ni4}qdtrCFj$^c6DKJ~ z1I7SAFc;1G_27~M8Gr$RKfNMj`Fi$j;sF5g0RsSqBb8OkIUayywBuG9X^N^-ftd(@ zgM)2Y0|4Gka2i0Su^{`LxDd>M$Vi6+C8`5hP-q!Y2fyITT^q^;&U8mNNmWr>X@0Si z^!jf)SCWnXdUT_D&vudwB2}AmgHkR_i3X_XhHTph{3Lrc3gQxxTU%+COz5UwEf)j);u2zyG~|9p6nNlN4h^iG>UqO}I!DBg>Vg z8A_n*vQ3M25jDH0$e<9ST|~PUhE!0f8#g@`rJ?!CMssGa^SXB)_uiR%@Bg$2#jHgK zzRltAJDl%)jEL~BVvI@M7cRC1S~>zkE~!jvS#|ouRCIFe**hXiY|ZTiFvi%O;gPGp z#^y^!)!xI2tUxkrA#FHFr!!C!8%sG=dHHqXd2s&y>+BzZj?mD^0U`pI8HBnru6%ygzXhngBSXvyC%MIJgK{z%TV~}|cq$#2LSH&HikmW zOCKNg`T@Y#eeaY5jib+fBEh3?XA}l5&D9ov!`xO z84c%dJq92F;5GiU$B77=a(leHyn!zN_8t*|x1GPz>uVi6q%V9^ikUS@L;`>S@M(L% tQp&0ZK>I7Qtvy38n!AP`>?HrMegTGNUwa-u^>Y9K002ovPDHLkV1iL5Gu8kA diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Database.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Database.gif deleted file mode 100644 index b2ccc7ee1d3a6641b2559f9093615b11ee80d700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmV+-0p0#bNk%w1VGsZi0K^{v|H)|f+^h8C#{c87WmP!a$*Qo9OKe|B+`p0i(}>us zRsYO$C^H|AbVKa8VgKEp$gFt()sXzfVePqG>$_FsvsCD|U7Ct*n1ousonZgkmjBOu z^S@sn9v&?%EdT%jA^8LW0018VEC2ui01yBW000G_;3r;(=XD-|iR^bAS0T&-gu(0q z&4VxukAdcqA&3aF-Y+jFt=Gzc5v&=GY4iU#52VGtS_i6>f!Jlu)MW&r>g zx}OdL@P5Pr92OJ?Yabp63mS0?bb%FjUIiK(a{v+?91aSEYzuM#3lbC-7GZc_b(azj o6BDHrg-CP~fE5b2gM}_<1`4AU83qJKEiNStC{o4C%q$@QJD5&#bpQYW diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Datasource.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/Datasource.gif deleted file mode 100644 index d36a4f61fbb229b679f5f4e06725dcdc15a7b41f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmV+$0p$KiNk%w1VGsZi0K^{v{pqt{RX6F&Xl!Cf@aD??=9}!*lK-wR&a_|uqYa*G z2sSY%i+Dw;lu*~ru*9ic{@i$$hE>*y2A7O(=#l{S(`v)9eYU1?LOnC&#b3dA1GAk` z+rMTW9v&?%EdT%jA^8LW0018VEC2ui01yBW000G;;3rPQ;&oUMiR?EFlS9me6~XLa z%|H(nzrrOT3dnrFpy4tQd0rEXp->Q5NP~{3bC5&=n2u)=U`P@k=V8r0B-{y&_S1Q3 zDDOlL0vrOEIb|CN862R6L@h2Q3t~^c#KkNj06ST-Y+3*S diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/FolderBalJonas.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/FolderBalJonas.gif deleted file mode 100644 index ff461ad6e1989360551aa5af76047566bbd2394a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmV+#0pg|2va&4I=(6JDn5Cu^Ots0GnH1&Qg8(E*B(~aZ+S)FXjU;W6 z07z{Bk+uMBkpKVyA^8LW0018VEC2ui01yBW000G-;3tkySv6xy7J!qS>7>kxWZMZ6 z7d#96fLuxwaX1#m1mPhZ4JZqSKw?}rMGX&wVsH??Ox*}^;CL*F$I_soWGJG^;&4vb z6&?)6E%;Or4I2Rngd81*9TOJsF%51d2MPOda@=TZ`*kh4UJE_nhRMvAJRE zslFo@bLOq8*ma_M?-_~SbIF@#j9RZm`j@vdiFie^;C^fR{^ zytB=MV;!e%RGYA>Y0o)><{3>_9>_M#G3{8IxoXGcIrCSn+nBoHNb2;ZdTn!<<7=4u z*Xm`|@fA%jS#zkQp^ecmzkT(VxD~r?TBq@Lt&psq(0k&#a%M&4+9O=^cBU3rDwa)6 z$SV=(TFzh@WabedkW$KEAGhMb@r7q@vbn|R_AO*^3M*@DQ>mQB7*>7r)raUqml#dF zs!!e6zGt6PZLjF;?HuLPig#a7S-xMz$yd`WOs05x$kyZ1Ua<#mJ#pM|=Ipb#oRilp z<@F2sCvLg*Wbe(#T&aBwDc#n)&dKGqo6ps$E67h0u0swUlh>V diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bean.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bean.gif deleted file mode 100644 index ba74d6432038739746f1fb5f93bb028ce557622a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmZ?wbhEHb6krfw*v!R{X3Q{iX4;vVGtZnkV+>-?G&VL)OJkS`l)wfQf3h$#FmN&G zfFwa?FtE4vFI`iunUNHRLeICF)f?0ldq#; ilIa{3mWC&jJayb=Ml`7wrV7T*=yP}0n{6n_U=0A2Pbnk- diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bullet.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/bullet.png deleted file mode 100644 index 96c596e7c9c8799ac5a4d2844e21a1644dcb3c9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3169 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 Hu0mjf04v>F diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/caution.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/caution.png deleted file mode 100644 index 88d494e79d28b8e9fba47279b5d5c7e6ac596de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV)4D`2Ea1J0^EV)gL7Hc zI6nsvC~8QNghuwxT!P=;E*5ZR#(!Z0SZ$@0s`mhfRYFw_unjDe>zGSCNT` zg+o4EyR4|#sonapEUpS6+^8D9n?fi)KZT|HTO^wbMX928ZCGZbA7ey(j`Y8 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/connectors.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/connectors.gif deleted file mode 100644 index 7059d873350dab646bcd3be6ad99c73a8da78609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmZ?wbhEHb6krfw*v!fB|4iEd|7ZUHpZOmM&KUncGxN-uGihmQ3^;(|PZmZ722KVY zkUYo?29{uhlg|BnD*Adi+23vmxi2_}aZ#CMmy+8X(N+iX4eBc$_p_j9Tb*{STR-FBv9))LI^I!0cbKEBwm@O?G*WqAr0vjfk+EctakS6FrA! zZfntK_|V~%5VtsMbAwF;Tax!(5tn%P LZQXJY1_o;YP9;H4 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_ear.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_ear.gif deleted file mode 100644 index 752b55c04c2f8ba1b04c56deb43f452c721aec4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmZ?wbhEHb6krfwXyIUBFrLXU6Nro%{{K%)Gd4D!dFITSnQ6xV|NoykGmYWQ8HSl> z(u^5qrlm2Y8KVz5)BZC6dANb%KT+qR)Wnk16ovB4k_?5A zj8p}8Pu~Cr#h)yU3=HxNIzatErwA}Gu+~0M@0%YwS7T+AFpHv?r0T@Zd0{qoo`-fB za4lW*+lHr2Ugfw{S6|1I6eSfiZMVaZ51tBK>wLQT!iT4P*I(~AxZ#V`&JC$MRKM`C zxGDNxU&O@7SLjmf>CD8$#ZcTL>h9ex#9i$i@7|`)9p@}!7~STq9#U-SAMNWjcd3#h GgEavB!+HGx diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_jar.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_jar.gif deleted file mode 100644 index f2396cca3d1d83d0542b7ca9379db94d6716e672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ?wbhEHb6krfwc+Ad_X3Q{iX4;vVGtZnkV+>-?G&VN=|Nnnl8Uql_Ofx?7|347V z1d?e$;s1*NM4gLL6H8K46v{J8G895GQWe}ieFGR2f3h$#Fz_?zfb@Y3XJASFaPsG* z-7{Vtxn|X=7I|Z8i_-H(-^UB4?3y!Ywvo^8Yv+#5**TZn&6}rUPoSb=fQH}Uma`HC zN*oMNHY_+GAi(${+rq&^w((1`g-A+l=yS^%3~TiLdhCYGe8D3oWGWGIAWq$;?3`UWs4{$ycfVBloX0U8Q)iU0!x zYhHp<-^t5!G&Eax~8hA!PdR}1;dCd7Su#9Nk=n(tDjZk-;&*Wjh@$=_7L Sz!2)dV=*y$)+{AO25SH&?24ZN diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_war.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployDomain_war.gif deleted file mode 100644 index cecb892019e9ace3a14e8a534084be226619169f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmZ?wbhEHb6krfwXklRZ|Nnnl+RQURIP(kx5Cg&g|1&`#je#M}_{@KX{|pR3iU0qN z)BZC6#byGzAR(YeVu0d5QRkx6#FEq$h4Rdj426)4R0VfW-v9>1pDc_F4Dt**K(l~O z5ny0o&3T~SH~+~TjmSkS7(KF9O00A7-k^1sZJi0PyI;wTzfJodXaw9)mF=ASsk!2T zir~tCCL5Pc6ZH93y4IW*Y%6=i;S!K;Ce8TJYTty`xx9im_Vbsfcr~d9X4~`0H#w@? Udpc*iJ0$a3ScT7YR%EaS0DrK1(*OVf diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_datasource.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_datasource.gif deleted file mode 100644 index 2e794cc3465a090843e82c724f6f2647b407dd7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmZ?wbhEHb6krfwI3mXI|IC^H|If^vY5f08nz1pEoC&06&P)RWAOYk7`9SIa|A7do z7AR~C)BwalzH!=r20}pbCkrD3gBXJjNFm5h2G+U-s(oRub2V0m1<r-L)-H^t7_J zuW)HMPt$}0o8D?HKFlbPaVu%fJl2amBI~BQF($qa<>+L792FoV)N*NJK%4{5gw_NG z&CsfxPo)MGOS~(pYHGOZ%S9@in_HFIbGo`+0!0LPySVsk1VpUOIhnY+nYe9)&6FLT LC;2NYGFSru9aC9g diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_ear.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_ear.gif deleted file mode 100644 index 2c9efebfc00ef4b5f47b22bcaa4dcfd2fd25c8f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmZ?wbhEHb6krfwI3mu#U_6syCJ-4j{QsYpW^8Oc^URquGt-R!|NlR8W*WnpGYm7& zq!}~JOiN=(GfqoOI|CF?V_^6{)A-E)ng9PAr~PNZ3lx8{FfuTRGw6U+f$U^p?S7!z zH$8N&#>yyR7DX{hRpY}O)`|A}Kl;6fvo+{utQ;G&%gIZe+Da;i94c%|roH~0vEi4L z*!8PUXN06UnVJg}9ORZhe|*NG=5B%PMXwKAC0X;8QbaxY&G;A@`B)27t34T*nVFcl r82VZ~1X#JI2yyooPVi!7WLntdWEkc-hoLdd*(xw>TXKZ5B7-#m#~fCg diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_jar.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_jar.gif deleted file mode 100644 index 41cf86c8d963b8b7964bb6167c14722055968660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ?wbhEHb6krfw*v!w6X3Q{iX4;vVGtZnkV+>-?G&VN=|Nnnl8Uql_Ofx?7|347V z1d?h0fg*}OSr{1@_!)FS(jYS!STa7G{5fg&j8{jlS#@qJ^%m+9K5o)mylBo&s}(72 zG1~Xirfyl^vd}<+gK5XiUX1_?!Is&2h8#AW3`|S`jA9}ebd(B0W;8HsI082p|AIAsoK=1-fjYdlW;S-_!h#Ie067Xo3;+NC diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_rar.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deploy_rar.gif deleted file mode 100644 index 5326b68b0e7dcf6e00ce9a3642f541ec466f398a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmZ?wbhEHb6krfwI3mFC|BUhfGc*66Njn21|Ia)#6UZ>0nFd4*|Noyk^Z&o`ng2iu z+|0JKU6q!nZ*18bgwO5cUcb2L`kbuY5$-?iKfg_OaK|(|V#h)yU3=F~yIw18RI~iCjAE@+Aelka6rB_!X!=zo?+C)yX7j5vm zY+)YAXArR=$M(2JK!k<7nP<~iVMVzKN0pU24R%bL|3siO;q*io7A9Y%3or78lYX;4 zc=3!`s!ZVqOGacwNv!}=lt5}kPpMaA4iD#~9FNePoXN9zLL4W}pIpjorX9Gz>% diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployed.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/deployed.gif deleted file mode 100644 index 68e9a5b37f6ca74f7ee4fbc8d46f584fac02a680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmZ?wbhEHb6krfw*v!H3|Ns9p|Nk?bF*ZK)f9C)H#%cc<{u?vk28usf7#SEi7<52N zKxQzo1Ph$3?AmL5+SrMqeOci>!LBO?0xpG%=Ij)Ek){+AJ-_MZKBdNk6BaLQahWfu vI6-8>^5(wG3@6RYiKQGYI4@aCsZGVPW7Q@-q0@)5 zB)XjLC^r@y^5T(bX!n|7EY{M?pmivH4- lnbP?=OX<)Vy-&{R47@%J4$fALJWlK}#vGjN?3#)U)&P%gLz(~p diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/domain_jonas.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/domain_jonas.gif deleted file mode 100644 index 451ce40bc5bc1b0caec8417798ec3475c4551149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1R|P)!+{V2|Ei&(*hqAL)YIJ~LJ0g_iHPC4cse;38uXsv4o~P8@1srX*)BJ* zQ8U@&#l@xhY$j6$&KA(%s`79lF1C&WQJ51&h7k%uQwMi z&D{6{aCPe7?bLYaBvUj2nL9zbUTslTH3p>}fMha5YH_dJur=h~7t>P5JUtPbO&#_p zs4T4kFaZd&ZINd$^GZ)fKrlsx;qy;P0O0d*@A!ef5lYFo?k$DMB6Tcb?g9V+5F$|t z0EWZ*@k0^UX7?~xtU243t!oOEcQf0Tg=+cp0|@})0WAQaS+1G<)w}Or+ZI7tCZw{l zMTLL^fCB&n1hFg&rPbAsE1BmP?#-ULLIJ>`$oiwq7xpx}zK}093iId3?p8M2Zkf_J zFVv$=qUoAvfI0j9cCqsFVfs#bx^oF7gwVOksOEMl?Z{pS&#nDv9v$6xYe3WXJXtPe z2_e#CYIGvZU9skR&H4Jp%Kh#rG#*e-CBx48+fQ3Tjmbd(+2uE-B7hfU9sLGEG5*5QzBH%+0000dL;q? diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/ear.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/ear.gif deleted file mode 100644 index c7ab6178725e057e039ab3738833ceeac45e7a35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmZ?wbhEHb6krfwI3mq3b7mS4Fc<@AV`Jl)Xa4^OQfbBvGt(Ft{{LtAKa;^Y?F>kb z@tHGc7|x_I0LhtWz$$?1K)Q{Aif4lGnVB;gfVxnD;!hSv1_o&c9gr}{P6pQ82WovO zkxC3zYgX@Mbo_uS1+dohMn87To6&5vb%6D7Ld;Wf2q>6v=Y4@8r&ORCAm@ LLvNOfB7-#m9~e&~ diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/help.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/help.gif deleted file mode 100644 index 49f7541c087d9b3a807a509708bd352c7e99371d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmeH`!Alfj7>CEvwcU!?H8&?HnhC;|EOsEOsSY`4yKa|t3Cp#D^&?rE4%TNSj09WL zmNAjl)TJ+3lz}eOMMpFo(9}sIha?!XU=I>)2W6r|Yf#xY(O(fgJp6ty@9~8<(s1+u zm+}*pM3HduV*He!V*C_KF$~3os1TNATselt@}UqLVzE5S$JkhsO$b~p$t46n#`6il zCxuu7B$6-zAOH#w01yNqKp;o}A|Pu52Fikn1W|{g07Vgs5)>6E8c>pAI=wmSG^nv`y16 zP0O^fMawiS3t29;7Z6r7^tQgn)V#JO6;tp4X8 zxj>Ek0q!pl-e1Igu02PWWOp~EXTrTi?KLv>=F7^3dfx^j*m^iR-Z*i6O+_d<_4FPf z@6zpK@%z%`gX(xW-O*SYx#dm2?jHSG_iCfJvhDLsKzdoWgS+zW$L7xT`~Wv6`39yZ zs>-YOcE$TY`hpp9E>}X(*B^?@U% zd@{2?s=SL&%?9XQVgJhZPaTWXceX|PPBrIl25Y47_ukgJ@=cYwbgIR3qlZ2**44fU zBH8M5p5d!o#mmbdM%CNge68f8_I1(?4u*Y00007bV*G`2iXb; z3nvm&$os_r000SaNLh0L01d1F01d1G?*_(4000AtNkl7%Q6vyAp&f1n8 zJ9a`pa2)EUjxD2#MiHVHAdrAcsCsZX<%V)VQ4}sv4wc%%fdd~(dq@N#D%Ze)TZP1- zty&dm1WMw9l19pxYCFM>?f7Hu{g|EIVRmUEF{}UKN%MaD-uu5noO3ulxm?aOJw1Ke zFyZ3!u`>hF-u`s7C*H4VsWU7Q#lTB!+lN(+@LE&Z{q<+1mj7mce*STHcei~6+TPyo z_q}WeC-pURR4(>}sLqq2p=84Zy=%usyl7g>Z8(icVw2XerHSe6CMazGX&PX*zf*ZZI=5{A2rMW`zl zv{eSG#z5CypcH*hl5Tzb#T{}ck-lU?FraGGg_x!ZO~rsli^BP{VMw120pV?6MoY{m z48Rd!Ar2S}Y9osWd&A-I2_nm$4$5rF5S}Y-3Jn2i2?)1s5OW2DM3UpI0|4^OYY~bM z#2t)@mk<)bh1~W-P1$cB)Kw^!+X7+$w}hjPsRBSL1+hoMUL^7*0VaTjBqW1hM#4t5 z)@U>|oJz(QY^_*rDQ(V7OH|_g9b9n%b6TYabs_i}1PcfjaX{8ZZ{N$QDpnqB5tkLl8m|$Xw@ry+m1ieE)%_X}i+LmoKY@ryHw4OI==1 zXF^f9m%Fo&+}7%~16cm61X~3W;|_rX2#~g&h*qmRYYRWDEI;~wbab?M^hAb-hvS`H z@he@iH{Z*yvxsT?k&T4JDmc@TiI01b3Xz~~Ct?T1<;8{DE6a=DWipx7+1Xk12vn(5 zU~Fuxvs^A;chL_ZKYn831_wN02Tim}tH8qu=o10_* zd$i8k+1Y_?Hj5`FCVGh^^@JmlSR@iTDYhI}%H?{!(byI9*b{Mna&odgGc#lP{eCz1 YU(Rj?0h%DgOaK4?07*qoM6N<$f(#1N-~a#s diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jar.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jar.gif deleted file mode 100644 index 8e98e1114c684243bb6c599016e5f1e4583d0efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmZ?wbhEHb6krfwI3mjM{|tk%vGL5AX~t>BXJ!KFv@{?W$o~KT42Y9<=FFKiV+Nq; z%$deBK`Le%r=|S|$pZDxWFQ0-f3h$#Fo-hffE0r4WMEB5Q0+^JWD>DjyE;-cL?^gw zwGQ{B=cSe2lVp=_NdHyYrLsulm#&=P(cG7ZJvp12o4j`May79nUYNR1tdZ%l!U?`J l=0^`sw2+bFwm6^AAW#wN)1xv2)dT(2?q2Hb+P}MumaF8UU|d BArJrn diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_connector.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_connector.gif deleted file mode 100644 index b652a036b6252fb63a25ef37db83c77313cdb67f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHb6krfw*v!fB|NqSYXJ-EYf9C(0w3#z!rlqBwIdkU!|Njg)fZ|UUMg|5> z1|5(*$P5M+Z-bMb*-9GOE;*;%CDP=IW;~AUTaY!gO+q0Z*Jt{;0^Xp6Z*NhkAcA&0P;#O`Tzg` diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_queue.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_queue.gif deleted file mode 100644 index 1dbb30155971eba62c29e2cdd4fd8a0a95f2f602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmZ?wbhEHb6krfwSj56`=FFLyGiUz)|DORBDE?$&WME)n&;bd9)G{zzdF;CL&)|^3 zD%ppj2P<>0D0JMr5pgd~>!AjNtc}hKhVu7oI+7|9w_Ma+#{ElAvW<6owT!N3XUQ%P H1_o;Y>NqAr diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_topic.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/jms_topic.gif deleted file mode 100644 index f9c5ca65bf1d2e9a523100aa908e7689c88eac1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmZ?wbhEHb6krfwSj5gSGmYWQnKLtI&P+>7`+vsx|Ns9CV4(Pug^_`Qok0i01F25zHFGi?UwbG! K?o6m7gEau5?phE4 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/logger_jonas.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/logger_jonas.gif deleted file mode 100644 index 435867a3350c87bac727ca1905318a4b9a92337f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmZ?wbhEHb6krfwIKse?Hgl%&%rpQ0|DSmVNS-k^PGbP#Ga!yJP%3RE1DFR?#{lA{ zF#yrbGig9D6R6nO_{^D^Gl6I(0}i10lLaiJ10q3oGO+e2v;`)6&Qn!elXJVPX~nTk zKD#Ztc}20Z58(#R(?)qM+qTu1|f!x5;=+t)&L0xQGoye diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/loggers.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/loggers.gif deleted file mode 100644 index 6a67bfc37dd95a66037037e466e44c718b853344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmZ?wbhEHb6krfwn8?8J9|X=A8yhn)Fev_H0g?<1Iv@fh&%k7Hr=)W>Gk>zlfgM@8 z(`15rQ=J`3g!wVII?l|y0@jLjC>b9ntS|3lLvoLT)jv&j55&>2Qo^QMATwaT_3%9485Y25noc$wP dwrswJyQuS-FgIz1nV0^qy0jwArjLQa8UQRxFVX-2 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_mime.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_mime.gif deleted file mode 100644 index db6f618fd8c14c66736e5f3b3de7d2ab20465ce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmZ?wbhEHb6krfw*v!F@HuKC(W8?p6X~r|p{Qv*|3<&&Zzzr0CvM@3*a4_hAlz_}& zU@;Ro>A8BZMRx73|MN=(QZl&?DGIe-+?OY?;zS0+fri~Swuc<1_dmELTCh7&;03d# N_3RZTUcC$q)&S^*D?tDN diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_session.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mail_session.gif deleted file mode 100644 index fd3c984a06b1aabd6363cffee96bcf4a9b793e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmZ?wbhEHb6krfwSj56G)7bcbTH62r{~1t$;!hSv1_l-e9gr|cEd#T<$F4j747@B? o?G5KWxSRjrg32Wf3`!fPrtI1@m%IAYnVk`FzBTXvb23;10JmEmwEzGB diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbean.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/mbean.gif deleted file mode 100644 index 47d2ad6cbdc52eb8d61bd82468ef7cea3ef837b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmZ?wbhEHb6krfwI3moD@4>mKEp*@N?)8(CHqNWNckiB?v2dgj@5PH3E!EgotXR?A z-R+~wP!lS)pwfz$mv?fG?*B8!3`7IPpDc_F48jaLARQn(8Ca7asPv_1dR^+6l{Ljn zui8y-?x_N~$9k{qgdQ|cnf*kBwWYzpW^I5F;}OP8gITMX8nbK-q!=D8I`zSfsj1JTUtV2VOHoi>QE769YFb)aXR_MTDiZ~9&Yl!y32lX=D=Q8yuQ;$}-tx|{Sw)6Z zDnl04IWDX)n>B0Jl~cRc&nQ}0Wp(MunyO&wz`!5|hUtuqQ^WOHX3m_+@SlN!A&r4y zCWK&M`2YWmF;HlT0>z&!j0_CU3_2k9gW`mNeOZH(lXFW`OM8ctV{=z?N2g==#J>L4 zNxfErR!UYAntEl$tnKaWZKw5gTU#%+bFf)H-+BHT2YUxwhbhih>Y{Rz4u@>E+4V8- z8W@^ra5|VfFfDFoVARqSx4b2Nam_IXGe%S4Te>_P3~TJ|ofMcYWt63i_>5UZmMn2% y;bY+Evw!)<&Yhpb0rc{P3Xp6maYS)q$|K%Nl@`_3aw#0IbmJ-*}RG*xosvyoOEXo(I&+`9_F#`^u_>+Z^fx(hN2P6;j69ZeL zgN&ZLh)}=Bo!k{NN|U#zUiqoxHTwwrDG_V4*3+{ZoEt5a!k!5=WLD&SaP~VP!o(rD zBSmP1tv;KXyc9RH7zd}UzcjzHk-jJ^7f+o>Qc9YjnU0yiX--~&SQ_M|8;Y4M+&p*p29 zq_fz!J4trs$`y-Sg5?#JmUo6pXe-PrGF;vfxUj;^!rFd8TWnRZw7jm-tXZ>`*O+T5 z3TjC+YAXpzs;b5qvUDb^#hG(5?tXM&%e$5N%c=7*?F#|TB_>+Z^fx(JF2P6sd z69Ze*ffzq`5uyGQGI=XxlqT;;z4BAXYxdRT;2me8X2#ylt+_1K>TGmVdmk&)tK~-~ z{M>UjS?R!{&Xaz|=ImL{3`{DTyk_0HS*Df@+DsA(-Q4183@QBrd}d0D{01UgCi=;y o{j5A3dV-vy8p5;8SNh3vN$aR~n<=mC_h4a`kxO%Pab&Ot0KFb?`Tzg` diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/monitoring.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/monitoring.gif deleted file mode 100644 index a0f453e6b040e92b72927e5d98398bb2722886f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmZ?wbhEHb6krfwSj5Kg|Ns9pXU@!=IWsLSjbY{)1{hHM$->CMz{a2h5&)@XV0O+3 zyYr9dglB5t(n(x%o?ZVGDz`P)L7-(Or@*QxKLeS~B>}ICls{TaYl~gsYN#s#j|aPV>&cS@3?{{Ol)%jeRGUOq$5RU=0B48YTY# diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/resourceAdapter.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/resourceAdapter.gif deleted file mode 100644 index 08e7f1902efd303f092d40dd1e7c4208c609e6f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ?wbhEHb6krfw*v!lD|BUhfGc*66Njn21|Ia)FVi?a%10sh1K#7@Y|NsAIKmv+C zSr{1@co}p+VjwdZSo}Af^jy8y!vC1{@iR(&JUe(aqT&`7?Kzy)>YT`4t%dM%Y^ zGH@8mp1XA{^b$kbqieB^oL$1|tZS_g8OQRkJo9SpynF_pZyv%5{BBVyy{p+(vsOll Iaxz#00Fja)jsO4v diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security.gif deleted file mode 100644 index ab8a7a2b76a53c8fa0968d6d126a7b17990555d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmZ?wbhEHb6krfwSj57RX3TJArZEEp!~ZiN5)Kr9vM@3*urTO=L_lg8n9V(Q-T7x= z<+xNxnMbiuPWlOBl-pcUwh0NG`>t%5=9qi^i= diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security_database.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/security_database.gif deleted file mode 100644 index facb04cdc7118206939f3fe322d612900f2436e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmV&5fhrT^1<>$+R~-=68z zm;1(K9}2teNt6WM`kks z%$YL)0095YGXMYpA^8LW0018VEC2ui01yBW000Gh;3syZXr5;0abAa_>gu)cIB)Dq z?xninv)pV*^89ifjdIB;9%mXtVQL6yibhtnG8qgK3hO7P&0GuyMM9F%*tC&AW}X2c z+#`|(A{Yn+2MqvtCwmYF4+|6sgD)Bph!%?sjVKxd4Gjwz3c%JTbnBTk4_^`_Uw9E64pvzieYi2V5 z%$YL)0095YGXMYpA^8LW0018VEC2ui01yBW000Gk;3syZXr5;0abAa_>gu)cIB)Dq z?xninv)pV*^89ifKx7#KaEiwnU@)mR9E_ro1sMz!;0wZG_{3Nd4Z?zHATpY=Sq2ek z?)ZS*OsZcr7ZM2%6?-Oi5_lQ`1coAY1sVwfln0Iv>e{vMIB)Dq z?xninvs`P|@&Q*IlEK4C8gnF#0U=P4ZcYXOKnP%}woWGCSRfb)NTpJ6eMpJPLZL_i v5Rbt!wMaB1bP5&)0VOE}2Mrei0}wqYBoqe>5sx(<0G2gxE^eDCn;`%@%r0vw diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_application.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_application.gif deleted file mode 100644 index dc25b5d61008fd62522dd312d159b0e06582f442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmZ?wbhEHb6krfwI3mMfY&>&jTAH!3ahfp$h?SPc01`1i^Z)iWqw4~Wcp!7<^{X11u`*-@bQT;SStGqvvG5aiVCr@ oYWQ<72=)sJc1(4hE+8t&&oM>CVm<>K!_sBTgEp*FR%EaS0NMXg>i_@% diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_database.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_database.gif deleted file mode 100644 index d28c42d1485ac4a58011bedac3d9cdab740622e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmZ?wbhEHb6krfwI3mpO|IEz)XVT8hO#2U{jE!f`1QNzTVrCi;82|r2^URsF|7U<; z=9!tsXMoaaX*19KXCN9V{$ycfU=U`|0qFqQ$-r9pK&5YS%A^$;UKeJq5)e7N@yn*- zdwrho)paAEgj5)?c{D6ASmG&kf-!+BfT6*7GGm~CkFwkO`nss{c)~xT4`+^n?_noU4;f`b5|LQCObP5cR3R~r+zBi+B&6LA2>pYQ$Jym{wvnsbtbRwyB>Bzn^z^FexslL>B^aS5_zQ?WRbaua}h9Z#&6Ap)G0f4+1>Q}E{6ujD>Uo@|oMVoSJ z&JZS^&dck8K;U8jz560t-NeQ-6!El;&kNILMj6|W#lHEX(P)Vygxe-9x4d#7MdV^i zq~>pN{MFani9`Y?+k-{oX=0a_mtj_Tq%9WGu~s*4owm&i^Af;S_F8BC%+BVIZ8d9e zWGyMJ8XnK|%>3SNeqU~ zwWrR7Z!jxy0~?71{5}_|BtN*sB35HN*enNh#_0h{>7v`sl24lkR+AQd^+zC!HE>f4 zW^x@{#ab9;#^nfjzp%7LY>TM*Jv7zv@UkUHE(Yl@Z=jVq=zJr}xun850UFvv-Lbr6 zAGhBTYBdwnuwd~zNGXr0?;hJMM8~%#AN4u{gu2#_kITwRktjC>-`-rcK#aAN?k!|= zH!n5Mu1yT~0)qgh^gjcT`yNN^Gk2bs#TtL}VVMIT+8}u0%1B(9Q-?G&VL)OJkS`lwe>;OG}%1=0A`D z2Z}#g7#SFN7<51)ATtJ}`+vL55+Y3**5xa!gJv{fwz{0*zaOVgwm3y!txhPuy+J RHM=HV_%orfjz^He8UP%UJk$UH diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_jms.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_jms.gif deleted file mode 100644 index 92a261c3a44ccd77db064c6e513af0c9ec5ea43a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmZ?wbhEHb6krfwSj5JVmXOfI&di)S^Z)<<3^1VhlZBCifsH{2Bmh#&!0ef^ zEBai(PNuXe3@vj{FO80HGL5V^M%Wua?L8%i_h&YzDWNZsM9u&VSCHU eX%-q~ZSOWllKQV>? diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_mail.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_mail.gif deleted file mode 100644 index e93d626745232c00b5d90b0b756f2edc68d39c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmZ?wbhEHb6krfw*v!R{HuKC(W8?p6X~r|p{QnQ6)6Rgve;|(m8&Leo!pOkD#h?R{ z1ew9W5*TpOa`MuMTOnoFTpN25KNTk5N)_u=691~Up?j-``k`lgS1;==IKe5@=dr{= sz*~TaeZ?06jxQqTm>CRixGfHUUQ)v$yeRIlSc1Xi<%vp#LW~U700N6R>i_@% diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_resource.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_resource.gif deleted file mode 100644 index 2e333f67664c673cd22db807ab32a8b15290b492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmZ?wbhEHb6krfw*v!u`GmYW@nY90BX3k7A{{R2XnKQ;`&dfXm5&?2&0!4vf=9&LM zzyJn{KUo+V82A}r;UldxF# zZpl@R<^_(&ByaMxFLBtKv_;0e*+D?#n$3mGgl;93fZnw?Qap8XPdY8!HFH+XBL=3U bS53GY{=^*Ks`#%ypRZO^LsXn!kii-NGn`U4 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_security.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_security.gif deleted file mode 100644 index a06e9d94bf0375951e09a657bd3454760cd75d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmZ?wbhEHb6krfwSj5JVmXOiFhBGsb|DQ2tfC0syEQ|~cYz#Ue0gze-X8(*` z(dPnoGNnynXqkI@X>^1uA3IzBlZ*`M9ydoGm&8r|Ho~PD$7~pL%`}->s%cXt{4Aua@@+`jq diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_smartclient.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_smartclient.gif deleted file mode 100644 index 684bacfd94e84423537c888aecc2e07153d95483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmZ?wbhEHb6krfw00PCIEUX|}2Sk9xTK z1gp|!&YXGo%&PzY|95nB?B2cm?%mxTX)bqHmA|`tW@bm)?o}N?ML>P;-n|PAb(uM{ z<1SG3s#SOI-d(k-Vyq(tsEU{{R2a00xRbSr{1@*co&{Jdj!jX1|JE z+2;Z*nbW2)w9GxbG&;hSkDZObSZW35RL7+Y?^$=tEquS{o@~n@2M-xOEz_or9xMhN ilV2R!+2FM}#5Ew`LDlZa2jwvw!bUGj+9onESOWlBNHX{U diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_versioning.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_versioning.gif deleted file mode 100644 index 384a4b9481c2abf72c34199289e0e22c1d0d1f38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmZ?wbhEHb6krfw00PCIEUX|}2Sk9xTKS8ZW-=Jh1j;c0wfqMvKLdnmKrO}~6BU25FfuU6 zGw6T}1KG*ITJu1?FF9$_iVU?IvsOujoh|&dsrcS9wcc=b!B(b&7HXUe-a8k1=(I9A zJoq_RL&n$9z(R(@O8RK>4K}^@?uCIXYYiF?sMWo&;L^VRT=2cI3M+%7k^qNfF(Ydu obCohjc`Q2{Lr||Wb07-~7ZcMoWx=_#xmdX8t1Q#gS7fjT0Hg;{z5oCK diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_workcleaner.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/service_workcleaner.gif deleted file mode 100644 index a2a19f17ce7cca142999df2e90748a7fdd5d2d18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmZ?wbhEHb6krfw00PCIEUX|}2Sk9xTL1t54`j|f^FJ*u?Hv&8X86CG;VuxIIkT!f zZTG5=*q{YU@+$g54D<^bqP1$YTSsWglEFwh|*WGGx&})zq z>@ShE(-*d4s7Wq!V^J3iPbzJR(@^9I49Icg<7Q*!We-esWf5m(RghBk@?v3;7UAV( k+Z^fq|Dn2gC!J!N8)t;iTv5kki{317cYwgtjj5IpJx*cFKU$ SIK)u7=gL8rs6*j`4AuZIhb=V# diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/tag_green.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/tag_green.gif deleted file mode 100644 index 38e98447d167125279b1a1025bd9e5bf97331b47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmZ?wbhEHbn5I<7_~O4e0TZoySsgt`9A&hbm4`CH{aa+ z^z)PPOymFm|1*Gr;!hSv1_oXR9S{#>1_O)ohLfJJLr!mV42Wf%7|Oc9=Y*sI+bIK1 T;}ApUo+}4Aq7H=%GFSrup%g9x diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/war.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/icon/war.gif deleted file mode 100644 index 963bebfdda8aa96e3050175d9ff5f18015f9ca05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmZ?wbhEHb6krfwI3mE1mNxVM|Nk>*o=HnfV*pY!&j7*9nQ1d;&SYRnWBAX&zyM@` zm|z;jCkZJ2WMO0gTBQTh1+tTYHBLdLFC}xHMvKgeh9%hw8h(#;)DkrI+_mA9d6^LW zN2dR1v!j!Z+&1+OfyrHbK`V=%Z*XFWe7Wx82e~Ykm4{!v=#ydnb~#*iZFYCUqP*`f WKXb<^H`MbqskU`$b}K6~SOWmCR6}+E diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/jonasAdmin.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/jonasAdmin.png deleted file mode 100644 index 333fac11c3844061ba02497d8a954e23e7699e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8993 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 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSadSmall_Orange.jpg b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSadSmall_Orange.jpg deleted file mode 100644 index d98f8a5ded4298467f11591707896276904ed5d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4775 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 KrJL5}^nU@8@vAog diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSmall_White.jpg b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/JonasSmall_White.jpg deleted file mode 100644 index 92000653a237439a24e28afa95c2078d1cfe1f83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9625 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 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/balJonasAdmin.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/balJonasAdmin.png deleted file mode 100644 index affe9524c87f03055d642bf0c1ea29c01bdfa01a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26496 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≫9Gg#~4Mw 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⁢yEcKA_F8Xgwwj_l3{6po6ppUyze8p7X9 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�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 Q%r-zpNfTJBX!ZGj0WE4xMgRZ+ diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/jonasAdminWelcomeMessage.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/jonasAdminWelcomeMessage.png deleted file mode 100644 index 07734732e0683804153ffac626001e32127ad106..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7750 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 M07*qoM6N<$f^nn1p#T5? diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/logoOW2.png b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/logoOW2.png deleted file mode 100644 index 35cee5856c041ecf5b1b5e8c8a0d784a225a9a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3608 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 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tableftF.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tableftF.gif deleted file mode 100644 index 021624c09aeb41c9d62699c67d9f30056fe4bb43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmZ?wbhEHbWMK$lxT?eO|NsA`@BXHxrRA-AI&IgRNjJVv-1hSC-+zrq-@keNX7>KK zeVbmC?|k**#fw+3UN3m@=k43K^N+r(s;Vk0uXyt0Y3KRRvmX9hdiuk=ckj!)mn~ho z^wHzTA3uJ4_Uw61PEKxa?(JK*KYjk(z4rOfpFcWQKl}9Q)BE=yK7amv=gysnm`OV(=~}cpHC@S2vADt7U=uf={mtLn`liN~nzn}a=FZlR-mbo$dM9By z9brk8=}Jm+-1C^&7BaCcVd7fOB)E!6d@U361}2`(OdQ*oM0YZ=?qL$!&%}R-iSg)> gV@DZ}pE`N^+}R5!E}gl2{_4dmH?Q5g;mBYO04|!Wt^fc4 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tabrightF.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/logo/tabrightF.gif deleted file mode 100644 index 7c236f3a27e89632ca1a12fff0b8026b83b79dc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2095 zcmcJM`6CmG1HdO|QPL|4rTXRwdGb<@96i^}(V=pr9=?SXPdw+hSD4#!)*N%pHpATa zm2#vR=E{}hnQdm5na!AK+k5Yi_P4rNt!{Yl}!CZEtVqwA0|!AF$7xWkW1j9}E6<3r;&&US8hXV&}Hea@*;dO;rB= zKAB9W)Bka@(Om1v5Y^3KFqygE_qbdxw1*)Qi9#AEY&M(A;TEn5((5+%`TGe*B(bv}>6BE%BCp4` z(R+G&(z+N^lT$0pDwWPN=-GBOf2NXLG~!eFrEq+}!#IX6H5^5sjP zR|(1Jf${N)e<}g~KU~if%6{mIQ{e1rv_6`5<+nLVS6F~Tv0m0`m&IQwlO=b-BIj=7pjq^dx6qQJHinX2 zI$_*maTRd14=g_Bs?HB3Vl(93>o3HxPfj8$J)SIgg)#7jPFW#m%_GQT{lCqBvKRtr zIinQWD&@Tgdu-BZ+3mNMkORK&%<6>3n>Rm%(mI4U;x$>R;Z{Z-1OoV|rA|3m z3FNVsc-$|rKS}W~!dl9yu+H*i1DfBs| zFc4i$DGHh~7&<1Ubc9~h_|>brrg<)iQ3p+rXViZj z0KI7Flj)%~3@E=~BEOugVKygejWSz?%;Yy)KZ2Y#+uFP`Hrs21MmIaq^dqd!rdTId zS5Z+0t2+-f%IeANmf!lAHsZ9^+eNHtK<%>RfB!6MmJjWt9&Sj&Xz!E*SdnWV5~(pu3Xd?zO#h1cCjIE*3JDLZ`SK~m$q4tsNS}P zCs{|^zdy?pMl1&8mqaXi4+^g@1^%zDeaS<%DbY&vy-&hnb*XdFt8e8kJ6Ge>T%(EV z`XSMzR4W5ha+2P;uJsRYoahzc!`XxM+6<)u(S_FpvG~V9nV3IsCGqBboTM!r zaH_ys+K3&enCK&+X>tp|nuwDcgG*?p_RE<~f>peIWcKzFH5AqoZP?gD4~GYoyV*&G zka7jz1+eN|XtK$e@3G)$o3jFTiV@jYv5}pq`h$=P+;R8`0*Kc#+fKU!L7c2SZKvhh zB;$cXD0k@C>4B6oj6E)@V1f49u~*Z5oRO-+wYclu+wVdlNc9b%gXt$iW>hWm++L@{ zO-fEyoWiBELLl&00ZAg&8Ff(wH*9al$$94;e@XK&4&*hRn};H6-oW7;{5j&hvK?7T zd&iM`MV$9l&K0_MaS0FG!#*@Zp6Nf{2YD`XpcqtzK?F@vn$OAaQ$QQ0IF9)p`$cBh z7JW4z=j^ZLR)~k7uVw6yoz{UD;dW$?>Gt76!op#HF||wvJ>y@c=M}Ho21tANxkjRY zDxvK7-yE$Tj|pojVYX^pta;uJqq~*y6#}h=7ZQ%8!r^CuRkx0&-$_#5fgf?9+NhaL zr5c<>Cj$^Iz|R+=>MM0hr*c zU86?6l?rw$t&d{vq=04+s=O-T5X~iTWCm@Ze79vpeI&l-NlN;BuYlKJx~bea(7!TjIRW_ iFFl;=o~y$AdFAM?7&R*~U diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line.gif deleted file mode 100644 index 0597cb126ee5d41dab4882b3499b71c08ab2260d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmZ?wbhEHb6krfzXkcVWOG{&5U{L(Y!pOkD$e;scGk|0mn5299SF*j{FEz*iQn${r Vs>|;j6JGQzNt!p)Y9=d#H2?ww6L|mt diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_first.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_first.gif deleted file mode 100644 index 975b2a9e3ca0dab6d8a0354e4af731dc7f5674b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHb6krfzXkcVWOG{&5U{L(Y!pOkD$e;scGk|0mn5268SDt>$zj)4;C=RE4 UzZSi*OgPcABx#;}Fav`%0QLP6)&Kwi diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_last.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/line_last.gif deleted file mode 100644 index f5a08f400c9375cf865cc45f95371babbe237009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHb6krfzXkcVWOG{&5U{L(Y!pOkD$e;scGk|0mn5268SF*j{FEz*iQn${r Us>^I_3*DzZ>s^I_3zwIql*Xk+ZMrNa!e9*m7BLdl diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_close.gif deleted file mode 100644 index 722763bc07f8d1060b449c4617201146314faf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmZ?wbhEHb6krfzn8?78mX^lAz+jv<6G$rlWMO1rU}n$(vKc_~3{0AH`d6NQ%fGl} pLDX)CdulRk8=BKQI>eT|T(I@NeT|T(I@N{y{YJMOy6^>4PK4AuY{%NS<> diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_first.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_first.gif deleted file mode 100644 index a24ca319551f2c3423afff46f68476119c42e616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmZ?wbhEHb6krfzn8*MEX=!Q3X)}Qg#h)yU3=GT+Iv`PyJOh*3oc@)k-|{amSs1n3 i>7G~lyo>`De77nq6gyVv&W^jzvhz#wecwD025SIi6dB6^ diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_last.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_last.gif deleted file mode 100644 index 75c6e1d522acff775d949f38d1f2df6bc71fb6f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmZ?wbhEHb6krfzn8*MEX=!Q3X)}Qg#h)yU3=GT+Iv`PyJOh*3oc@(!ulGyM@xLU! i>Dor^?uPagB?l_`&RSJ*uH2QlCHH#o^I!W!7_0$j#~UC3 diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_middle.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/node_open_middle.gif deleted file mode 100644 index fa28a082ae5eebf1c0afe212a80b22f3cbf79435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZ?wbhEHb6krfzn8*MEX=!Q3X)}Qg#h)yU3=GT+Iv`PyJOh))oc@(!ulGyM@xLU! k>Dor^?uPagB?l_`&RSJ*uH2QlCHFe-{eX4Wm5dD50G7)dfdBvi diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/noline.gif b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/images/tree/noline.gif deleted file mode 100644 index af2f8eb64bbb8b2a2be467462732fa89e2d0d1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58 zcmZ?wbhEHb6krfzXkdT>#h)yUAf^t80Ld^g3AXgFJpGn`@tiHUx;Nk3Qysv-U=08x C{0;#C diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/index.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/index.jsp deleted file mode 100644 index ba2fab2879..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/index.jsp +++ /dev/null @@ -1,4 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<% -response.sendRedirect(response.encodeRedirectURL("index.html")); -%> diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/ConnectionFactoryEdit.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/ConnectionFactoryEdit.jsp deleted file mode 100644 index c5c3eaff0c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/ConnectionFactoryEdit.jsp +++ /dev/null @@ -1,92 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " value=""> - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAdd.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAdd.jsp deleted file mode 100644 index 646b5188fc..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAdd.jsp +++ /dev/null @@ -1,88 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - <%--sj:tab forward="JonasMqConnectStartAction"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAddConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAddConfirm.jsp deleted file mode 100644 index d367461254..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationAddConfirm.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -Add destinations - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDelete.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDelete.jsp deleted file mode 100644 index 4884d5f2cf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDelete.jsp +++ /dev/null @@ -1,86 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - <%--sj:tab forward="JonasMqConnectStartAction"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDeleteConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDeleteConfirm.jsp deleted file mode 100644 index 33c6fd4ba0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationDeleteConfirm.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -

    Delete destination

    - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationEdit.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationEdit.jsp deleted file mode 100644 index 7d77560db3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/DestinationEdit.jsp +++ /dev/null @@ -1,131 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - <%--sj:tab forward="JonasMqConnectDestinationEditAction" selected="true"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : - - - - - - - - - - - - - - - " value=""> - - - - - - - - - - - : - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Destinations.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Destinations.jsp deleted file mode 100644 index bb71c38181..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Destinations.jsp +++ /dev/null @@ -1,100 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="/common/begin.jsp" %> - - - - - <%--sj:tab forward="JonasMqConnectStartAction"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="/common/end.jsp" %> - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnect.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnect.jsp deleted file mode 100644 index 020bf5f8be..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnect.jsp +++ /dev/null @@ -1,189 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="/common/begin.jsp" %> - - - - - - - <%--sj:tab forward="JonasMqConnectForm" selected="true"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "> - - - - - - - - - - - "> - - - - - - - - - - - "> - - - - - - - - - - - "> - - - - - - - - - - - "> - - - - - - - - - - - - - - - -   - - - - - - - -   - - - - - - - -   - - - - - - - - - - - -<%@ include file="/common/end.jsp" %> - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnectPlatform.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnectPlatform.jsp deleted file mode 100644 index e9ce6a5b43..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/JonasMqConnectPlatform.jsp +++ /dev/null @@ -1,47 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="/common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="/common/end.jsp" %> - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/MdbEdit.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/MdbEdit.jsp deleted file mode 100644 index 3e15fb107f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/MdbEdit.jsp +++ /dev/null @@ -1,53 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - <%--sj:tab forward="JonasMqConnectStartAction"> - - - - - - - - - - - : - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Mdbs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Mdbs.jsp deleted file mode 100644 index b9b34131f6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasmqconnect/Mdbs.jsp +++ /dev/null @@ -1,57 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="/common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="/common/end.jsp" %> - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jmxserver.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jmxserver.jsp deleted file mode 100644 index df9a37e7f9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jmxserver.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasserver.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasserver.jsp deleted file mode 100644 index b1c7d5fd3c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasserver.jsp +++ /dev/null @@ -1,86 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); - %> - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - versions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasversions.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasversions.jsp deleted file mode 100644 index b9fb3df3d6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jonasversions.jsp +++ /dev/null @@ -1,45 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - -
    -            
    -          
    -
    -
    -
    - -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jvm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jvm.jsp deleted file mode 100644 index c91d8dc605..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/jvm.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/listRegistry.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/listRegistry.jsp deleted file mode 100644 index a1c13ce71c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/listRegistry.jsp +++ /dev/null @@ -1,105 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - -   - - - - - - - -   - - -   - - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/registry.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/registry.jsp deleted file mode 100644 index 6b57d4c2c3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/registry.jsp +++ /dev/null @@ -1,136 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - -   - - - - - - - -   - - -   - - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/servletServer.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/servletServer.jsp deleted file mode 100644 index 4b23bb6d11..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/jonasserver/servletServer.jsp +++ /dev/null @@ -1,111 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> -<% String cmi = (String)request.getAttribute("cmi"); - String master = (String)request.getAttribute("master"); -%> - - - - - - - <%if("true".equals(cmi) || "true".equals(master)){%> - - <%}%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addreader.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addreader.jsp deleted file mode 100644 index 70eb441b72..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addreader.jsp +++ /dev/null @@ -1,110 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addwriter.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addwriter.jsp deleted file mode 100644 index 9728a01d0d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/addwriter.jsp +++ /dev/null @@ -1,110 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createdestination.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createdestination.jsp deleted file mode 100644 index 04afbb60c1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createdestination.jsp +++ /dev/null @@ -1,89 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createuser.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createuser.jsp deleted file mode 100644 index 324ea12b4d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/createuser.jsp +++ /dev/null @@ -1,81 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramadapter.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramadapter.jsp deleted file mode 100644 index ed5582d14c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramadapter.jsp +++ /dev/null @@ -1,67 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdestinations.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdestinations.jsp deleted file mode 100644 index d76cdaaeed..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdestinations.jsp +++ /dev/null @@ -1,138 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdeststatistics.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdeststatistics.jsp deleted file mode 100644 index 127b44d627..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramdeststatistics.jsp +++ /dev/null @@ -1,78 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramplatform.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramplatform.jsp deleted file mode 100644 index 5de65939b5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramplatform.jsp +++ /dev/null @@ -1,191 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueue.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueue.jsp deleted file mode 100644 index 1c4a6a9537..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueue.jsp +++ /dev/null @@ -1,170 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuereaders.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuereaders.jsp deleted file mode 100644 index fa1fee2566..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuereaders.jsp +++ /dev/null @@ -1,130 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuewriters.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuewriters.jsp deleted file mode 100644 index d06ff2bf1c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramqueuewriters.jsp +++ /dev/null @@ -1,130 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremotedestinations.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremotedestinations.jsp deleted file mode 100644 index 69c008e299..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremotedestinations.jsp +++ /dev/null @@ -1,133 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremoteserver.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremoteserver.jsp deleted file mode 100644 index 11e27e73ad..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramremoteserver.jsp +++ /dev/null @@ -1,44 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramservers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramservers.jsp deleted file mode 100644 index eb5f3c01af..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramservers.jsp +++ /dev/null @@ -1,93 +0,0 @@ - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopic.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopic.jsp deleted file mode 100644 index 7ac58b44c6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopic.jsp +++ /dev/null @@ -1,141 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicreaders.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicreaders.jsp deleted file mode 100644 index 8188a8c3ac..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicreaders.jsp +++ /dev/null @@ -1,130 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicwriters.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicwriters.jsp deleted file mode 100644 index a3a7615933..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramtopicwriters.jsp +++ /dev/null @@ -1,131 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramusers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramusers.jsp deleted file mode 100644 index 4d0f6549ec..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramusers.jsp +++ /dev/null @@ -1,93 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramxml.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramxml.jsp deleted file mode 100644 index 96dab312fd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/joramxml.jsp +++ /dev/null @@ -1,30 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/queueUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/queueUsedBy.jsp deleted file mode 100644 index 34abdbf944..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/queueUsedBy.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeDestinationsConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeDestinationsConfirm.jsp deleted file mode 100644 index 22588850c9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeDestinationsConfirm.jsp +++ /dev/null @@ -1,56 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeUsersConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeUsersConfirm.jsp deleted file mode 100644 index 8cb3f7c042..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/removeUsersConfirm.jsp +++ /dev/null @@ -1,56 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/topicUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/topicUsedBy.jsp deleted file mode 100644 index fecf993f03..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/joramplatform/topicUsedBy.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/catalinaAccessLogger.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/catalinaAccessLogger.jsp deleted file mode 100644 index b836054fd7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/catalinaAccessLogger.jsp +++ /dev/null @@ -1,159 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - -    - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggers.jsp deleted file mode 100644 index 435b306b50..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggers.jsp +++ /dev/null @@ -1,90 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggersConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggersConfirm.jsp deleted file mode 100644 index 1172cd0216..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggersConfirm.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingJonas.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingJonas.jsp deleted file mode 100644 index 85276f54d5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingJonas.jsp +++ /dev/null @@ -1,66 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingView.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingView.jsp deleted file mode 100644 index 77918ee019..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/logging/loggingView.jsp +++ /dev/null @@ -1,83 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/login.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/login.jsp deleted file mode 100644 index 700b09f5d5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/login.jsp +++ /dev/null @@ -1,113 +0,0 @@ - - -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> - - - - - - - - -<%@ include file="begin.jsp"%> - - - - - - - - -
    -
    - - - - - - - -
    -
    -

    -

    - -
    -
    - - - - -
    -
    - - - - -
    -
    JOnAS Administration
    -
    - - - - - - - -
      - - - - - - - - - - - - - -
    - -
    - -
      -    -
     
    -
    - - - - - - - -<%@ include file="end.jsp"%> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listJ2eeMBeans.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listJ2eeMBeans.jsp deleted file mode 100644 index 770e5f21c9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listJ2eeMBeans.jsp +++ /dev/null @@ -1,42 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanAttributes.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanAttributes.jsp deleted file mode 100644 index 77b1f04fbd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanAttributes.jsp +++ /dev/null @@ -1,95 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - == - - -
    -
    -
    -
    -
    - - - - ( - - - - ) - - - - -
    -
    -
    -
    -
    -
    - -<%@ include file="../common/end.jsp" %> -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanOperations.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanOperations.jsp deleted file mode 100644 index 37cdd158b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanOperations.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - () - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanProperties.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanProperties.jsp deleted file mode 100644 index b26a5b1759..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeanProperties.jsp +++ /dev/null @@ -1,43 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - domain - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeans.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeans.jsp deleted file mode 100644 index 946423c97d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listMBeans.jsp +++ /dev/null @@ -1,55 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listOwnerMBeans.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listOwnerMBeans.jsp deleted file mode 100644 index 238ef32c27..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listOwnerMBeans.jsp +++ /dev/null @@ -1,40 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listUnknownMBeans.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listUnknownMBeans.jsp deleted file mode 100644 index cd810e1795..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/mbean/listUnknownMBeans.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - -   - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiCluster.jsp deleted file mode 100644 index 07e8e5ed2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiCluster.jsp +++ /dev/null @@ -1,100 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - Info - - - - - - State - - - - - - - - - - Configuration - - - - - - McastAddr - - - - - - - - McastPort - - - - - - - - Protocol - - - - - - - - DelayToRefresh - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiMember.jsp deleted file mode 100644 index 64a10e79e1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/cmiMember.jsp +++ /dev/null @@ -1,36 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyCluster.jsp deleted file mode 100644 index a822af0609..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyCluster.jsp +++ /dev/null @@ -1,775 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp"%> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyMember.jsp deleted file mode 100644 index dcfe68d468..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/daemonProxyMember.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -

    In progress

    - -<%@ include file="../common/end.jsp" %> - -
    \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/displaynode.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/displaynode.jsp deleted file mode 100644 index 61ca7ed9af..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/displaynode.jsp +++ /dev/null @@ -1,715 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - Infos - - - - - - - Global - - - - - State - - - - - - - - Threads Count - - - - - - - - - - Memory Load - - - - - - - - - - Total Memory - - - - - - - - JOnAS Version - - - - - - - - JVM Version - - - - - - - - JVM Vendor - - - - - - - - Protocols - - - - - - - - Jmx Connection URL - - - - - - - - - - - - - Transactions - - - - - Begun Transactions - - - - - - - - - - Committed Transactions - - - - - - - - - - Current Transactions - - - - - - - - - - Expired Transactions - - - - - - - - - - Rolled Back Transactions - - - - - - - - - - - - - - - JOnAS Worker Pool - - - - - Current Pool Size - - - - - - - - Max Pool Size - - - - - - - - Min Pool Size - - - - - - - - - - - - - Tomcat - - - - - Total Max Threads - - - - - - - - Total Threads Number - - - - - - - - Total Threads Busy - - - - - - - - - - Total Bytes Received - - - - - - - - - - Total Bytes Sent - - - - - - - - - - Total Error Count - - - - - - - - - - Total Processing Time - - - - - - - - - - Total Request Count - - - - - - - - - - - - - - - JCA - - - - - Total Opened Connections - - - - - - - - - Total Busy Connections - - - - - - - - - - Total Connection Failures - - - - - - - - - - Total Connection Leaks - - - - - - - - - - Total Rejected 'open' calls - - - - - - - - - - Total served XA connections - - - - - - - - - - Total Waiters - - - - - - - - - - Total Waiting Time - - - - - - - - - - - - - - JDBC - - - - - Total Opened Connections - - - - - - - - Total Busy Connections - - - - - - - - - - Total Connection Failures - - - - - - - - - - Total Connection Leaks - - - - - - - - - - Total Rejected 'open' calls - - - - - - - - - - Total served XA connections - - - - - - - - - - Total Waiters - - - - - - - - - - Total Waiting Time - - - - - - - - - - - - JMS - - - - - Total Messages Received in Queues - - - - - - - - - - Total Messages Delivered from Queues - - - - - - - - - - Total Messages Received in Topics - - - - - - - - - - Total Messages Delivered from Topics - - - - - - - - - - Total Messages Sent to DMQ - - - - - - - - - - - - EJBs - - - - - Number Of EJB - - - - - - - - - - Number Of EntityBean - - - - - - - - - - Number Of Stateful SessionBean - - - - - - - - - - Number Of Stateless SessionBean - - - - - - - - - - Number Of MessageDrivenBean - - - - - - - - - - - - - - - - Global - - - - - - State - - - - - - - - - - - - <%@ include file="../common/end.jsp"%> - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaCluster.jsp deleted file mode 100644 index da6cb6a97d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaCluster.jsp +++ /dev/null @@ -1,60 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - - - Configuration - - - - - - McastAddr - - - - - - - - McastPort - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaMember.jsp deleted file mode 100644 index 049ef770db..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/ejbHaMember.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverGraphs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverGraphs.jsp deleted file mode 100644 index e8d8eaa0df..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverGraphs.jsp +++ /dev/null @@ -1,88 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - <%=serverName%> infos - <%=selectedTabTitle%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverTransactionCount.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverTransactionCount.jsp deleted file mode 100644 index fede4a5fe1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/graph/serverTransactionCount.jsp +++ /dev/null @@ -1,75 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - Server's infos - Tx Graph - - - - - - " name="memory"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkCluster.jsp deleted file mode 100644 index a190f1dd2a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkCluster.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - Load balancer workers - - - - - - - - Sticky session - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkMember.jsp deleted file mode 100644 index a4c57d5399..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/jkMember.jsp +++ /dev/null @@ -1,81 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - Host - - - - - - - - State - - - - - - - - - - - - - Jk worker info - - - - - - Load balance factor - - - - - - - - Type - - - - - - - - Port - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramCluster.jsp deleted file mode 100644 index cea4e0a771..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramCluster.jsp +++ /dev/null @@ -1,36 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramMember.jsp deleted file mode 100644 index dcfe68d468..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/joramMember.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -

    In progress

    - -<%@ include file="../common/end.jsp" %> - -
    \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalCluster.jsp deleted file mode 100644 index d107d1708b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalCluster.jsp +++ /dev/null @@ -1,38 +0,0 @@ - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - State - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalMember.jsp deleted file mode 100644 index dcfe68d468..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/logicalMember.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -

    In progress

    - -<%@ include file="../common/end.jsp" %> - -
    \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/memory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/memory.jsp deleted file mode 100644 index afda226e43..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/memory.jsp +++ /dev/null @@ -1,78 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - " name="memory" width="" height=""> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/monitoring.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/monitoring.jsp deleted file mode 100644 index 0628410acd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/monitoring.jsp +++ /dev/null @@ -1,56 +0,0 @@ - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/stackDump.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/stackDump.jsp deleted file mode 100644 index 384036034a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/stackDump.jsp +++ /dev/null @@ -1,30 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp"%> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatCluster.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatCluster.jsp deleted file mode 100644 index 6ac7f254c3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatCluster.jsp +++ /dev/null @@ -1,87 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - Info - - - - - - State - - - - - - - - - - Membership multicast ping - - - - - - McastAddr - - - - - - - - McastPort - - - - - - - - McastFrequency - - - - - - - - McastDropTime - - - - - - - - McastSocketTimeout - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatMember.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatMember.jsp deleted file mode 100644 index 7658d78358..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/monitoring/tomcatMember.jsp +++ /dev/null @@ -1,148 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - Info - - - - - - Host - - - - - - - - State - - - - - - - - - - - - - - Receiver info - - - - - - Version info - - - - - - - - TCP listener address - - - - - - - - TCP listener port - - - - - - - - Number of TCP listener worker threads - - - - - - - - - - - - Sender info - - - - - - Version info - - - - - - - - Replication mode - - - - - - - - Acknowledge timeout - - - - - - - - AutoConnect - - - - - - - - Create processing time stats - - - - - - - - Wait for ack after data send - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/createDestination.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/createDestination.jsp deleted file mode 100644 index a1c013f501..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/createDestination.jsp +++ /dev/null @@ -1,72 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasourceProperties.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasourceProperties.jsp deleted file mode 100644 index 0eb6f20c7a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasourceProperties.jsp +++ /dev/null @@ -1,221 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasources.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasources.jsp deleted file mode 100644 index 0a8cff2bdf..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/datasources.jsp +++ /dev/null @@ -1,81 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - -   - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployDatasource.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployDatasource.jsp deleted file mode 100644 index 97974d1b00..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployDatasource.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    - - - -
     
    - - - -
    -
    - - - - - - -
    - -   - -   - -
    - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployMailFactory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployMailFactory.jsp deleted file mode 100644 index ff29bffe8f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/deployMailFactory.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    - - - -
     
    - - - -
    -
    - - - - - - -
    - -   - -   - -
    - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/destinationsConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/destinationsConfirm.jsp deleted file mode 100644 index bc2b196a80..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/destinationsConfirm.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/jmsResources.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/jmsResources.jsp deleted file mode 100644 index d6334c5a5b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/jmsResources.jsp +++ /dev/null @@ -1,98 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactories.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactories.jsp deleted file mode 100644 index 9fdcacd166..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactories.jsp +++ /dev/null @@ -1,101 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactoryProperties.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactoryProperties.jsp deleted file mode 100644 index 7660c6de11..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mailFactoryProperties.jsp +++ /dev/null @@ -1,137 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mimePartFactoryProperties.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mimePartFactoryProperties.jsp deleted file mode 100644 index dbf4d1d0d6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/mimePartFactoryProperties.jsp +++ /dev/null @@ -1,133 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/sessionFactoryProperties.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/sessionFactoryProperties.jsp deleted file mode 100644 index 6632424b40..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resource/sessionFactoryProperties.jsp +++ /dev/null @@ -1,105 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createJDBCResourceAdapter.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createJDBCResourceAdapter.jsp deleted file mode 100644 index 0cd411d22a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createJDBCResourceAdapter.jsp +++ /dev/null @@ -1,292 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createOtherResourceAdapter.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createOtherResourceAdapter.jsp deleted file mode 100644 index 831d9672ed..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createOtherResourceAdapter.jsp +++ /dev/null @@ -1,115 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createResourceAdapter.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createResourceAdapter.jsp deleted file mode 100644 index c715c1ccf3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/resourceadapter/createResourceAdapter.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JDBC (DriverManager)
    - Other
    -
    -
    - - - - - - -
    -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/script/jonasAdmin.js b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/script/jonasAdmin.js deleted file mode 100644 index 68b4048665..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/script/jonasAdmin.js +++ /dev/null @@ -1,214 +0,0 @@ -function ListOption(content, id) -{ - this.content = content; - this.id = id; -} -function copySelected(p_FormName, p_ListNameSource, p_ListNameDestination) -{ - var oSelectSrc = eval("document." + p_FormName + "." + p_ListNameSource + "Selected"); - var oSelectDst = eval("document." + p_FormName + "." + p_ListNameDestination + "Selected"); - var len, i, cpt, cptSel; - var tab = new Array(); - var tabSel = new Array(); - cpt = 0; - cptSel = 0; - oSelectDst.selectedIndex = -1; - for (i = 0; i < oSelectSrc.options.length; i++) - { - if (oSelectSrc.options[i].selected) - { - oSelectDst.options[oSelectDst.options.length] = new Option(oSelectSrc.options[i].text,oSelectSrc.options[i].value); - tabSel[cptSel++] = oSelectDst.options[oSelectDst.options.length - 1]; - } - else - tab[cpt++] = new ListOption(oSelectSrc.options[i].text, oSelectSrc.options[i].value); - } - // we recontruct the select options, otherwise, IE5 crashes when you affect null value to a select option - oSelectSrc.selectedIndex = -1; - oSelectSrc.options.length = 0; - for (i = 0; i < tab.length; i++) - oSelectSrc.options[i] = new Option(tab[i].content, tab[i].id); - // we reselected the item which have just been moved - for (i = 0; i < tabSel.length; i++) - tabSel[i].selected = true; - // Update the corresponding Hidden field - updateHiddenSelect(p_FormName, p_ListNameSource); - updateHiddenSelect(p_FormName, p_ListNameDestination); - return false; -} - - -function selectToString(p_Select) -{ - var len = p_Select.length; - var i; - var res; - res = ""; - for (i = 0; i < len; i++) - { - res += p_Select.options[i].value; - if (i < len - 1) - res += ","; - } - return res; -} - - -function updateHiddenSelect(p_FormName, p_ListName) -{ - var oSelect = eval("document." + p_FormName + "." + p_ListName + "Selected"); - var oHidden = eval("document." + p_FormName + "." + p_ListName); - oHidden.value = selectToString(oSelect); -} - -function submitHiddenSimple(p_FormName, p_HiddenName, p_HiddenValue) -{ - var oForm = eval("document." + p_FormName); - var oHidden = eval("document." + p_FormName + "." + p_HiddenName); - oHidden.value = p_HiddenValue; - oForm.submit(); -} - - -function submitHidden() -{ - var oHidden; - var oForm = eval("document." + arguments[0]); - for (i=1; i < arguments.length; i+=2) - { - oHidden = eval("document." + arguments[0] + "." + arguments[i]); - oHidden.value = arguments[i+1]; - } - oForm.submit(); -} - - -function submitForm() -{ - var oForm = eval("document." + arguments[0]); - oForm.submit(); -} - - -function refreshTree() -{ - if (arguments.length > 0) - { - var sHref = arguments[0]; - if (sHref.length > 0) - { - top.tree.location.href = sHref; - return; - } - } - top.tree.location.reload(); -} - -function selAll(p_FormName, p_Servers, _v) -{ -var oForm = eval("document." + p_FormName + "." + p_Servers); -for(var i=0;i< oForm.length ;i++) - -oForm[i].selected=_v; -} -function enableReplace(p_FormName) -{ - var checkBox = eval("document." + p_FormName + ".replaceOnTarget"); - checkBox.disabled = false; -} -function disableReplace(p_FormName) -{ - var checkBox = eval("document." + p_FormName + ".replaceOnTarget"); - checkBox.disabled = true; -} - -function setHidden(p_FormName, p_HiddenName, p_HiddenValue) { - var oForm = eval("document." + p_FormName); - var oHidden = eval("document." + p_FormName + "." + p_HiddenName); - oHidden.value = p_HiddenValue; - } - - - /** - - **/ - function checkNotEmpty(eltId) { - var elt; - if (document.getElementById) { - //try to use DOM - elt = document.getElementById(eltId); - alert('DOM not activated'); - } else { - elt = document.forms[0].elements[eltId]; - alert('DOM not activated'); - } - - var elt = document.getElementById(eltId); - if (elt.value == "") { - alert('the field cannot be empty'); - elt.focus(); - } - } - - -//confirm operation before submitting.usefull when removing. -/** - arguments[0] the form name - arguments[1]..arguments[argument.length-2]: actioName;actionValue - arguments[argument.length-1]: the confirm message -**/ -function submitHiddenWithConfirm() { - var oHidden; - var oForm = eval("document." + arguments[0]); - for (i=1; i < arguments.length-1; i+=2) - { - oHidden = eval("document." + arguments[0] + "." + arguments[i]); - oHidden.value = arguments[i+1]; - } - //argument[length -1] == message to display - var response = confirm(arguments[i]); - if(response == true) { - //response is "yes" - oForm.submit(); - }else { - return; - } -} -/** - formName: the form name - actionElt: the action element - actionToApply: action to Apply (blacklist/unblacklist) - serverElt: form element that will contain a server value - serverValue: The value to set in serverElt -**/ -function applyCmiServerAction(formName, actionElt, actionToApply, serverElt, serverValue) { - var oForm = document.forms[formName]; - var action = oForm.elements[actionElt]; - action.value = actionToApply; - var server = oForm.elements[serverElt]; - server.value = serverValue; - oForm.submit(); - return; -} - -/** - * Diplay the url of a given deployable. - * @param selectables : set of selectable deployables. - * @param where2display : html text where to display the url. - */ -function displayDeployable(selectable, where2display) { - var dispDest; - var selectElement; - if (document.getElementById) { - //try to use DOM - dispDest = document.getElementById(where2display); - //selectElement = document.getElementById(selectable.id); - } else { - dispDest = document.forms[0].elements[where2display]; - //selectElement = document.forms[0].elements[selectable.id]; - } - dispDest.value = selectable.value; - dispDest.size = selectable.value.length + 5; - selectable.title = selectable.value; -} - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/confirmActionMemoryRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/confirmActionMemoryRealm.jsp deleted file mode 100644 index 5f0ba2ed47..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/confirmActionMemoryRealm.jsp +++ /dev/null @@ -1,108 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/datasourceRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/datasourceRealm.jsp deleted file mode 100644 index 2007096f6b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/datasourceRealm.jsp +++ /dev/null @@ -1,133 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/groupMemoryRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/groupMemoryRealm.jsp deleted file mode 100644 index f953879388..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/groupMemoryRealm.jsp +++ /dev/null @@ -1,153 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    -    -
     
    -    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/ldapRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/ldapRealm.jsp deleted file mode 100644 index 9c0af067f5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/ldapRealm.jsp +++ /dev/null @@ -1,201 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealm.jsp deleted file mode 100644 index d1b5189cfb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealm.jsp +++ /dev/null @@ -1,125 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - -   - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmGroups.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmGroups.jsp deleted file mode 100644 index 6f3427ffab..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmGroups.jsp +++ /dev/null @@ -1,101 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmRoles.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmRoles.jsp deleted file mode 100644 index fa25bf0119..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmRoles.jsp +++ /dev/null @@ -1,100 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmUsers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmUsers.jsp deleted file mode 100644 index 45097849d5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/memoryRealmUsers.jsp +++ /dev/null @@ -1,100 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realms.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realms.jsp deleted file mode 100644 index 20841119b1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realms.jsp +++ /dev/null @@ -1,161 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsConfirm.jsp deleted file mode 100644 index 668ac4fd10..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsConfirm.jsp +++ /dev/null @@ -1,86 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsStopped.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsStopped.jsp deleted file mode 100644 index 15d905447c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/realmsStopped.jsp +++ /dev/null @@ -1,26 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - not active - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/roleMemoryRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/roleMemoryRealm.jsp deleted file mode 100644 index e2e83820e5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/roleMemoryRealm.jsp +++ /dev/null @@ -1,112 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/securityCatalinaRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/securityCatalinaRealm.jsp deleted file mode 100644 index b4daa96e75..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/securityCatalinaRealm.jsp +++ /dev/null @@ -1,50 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - -   - - - - - - - - - - -   - -   - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/userMemoryRealm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/userMemoryRealm.jsp deleted file mode 100644 index e302f27aba..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/security/userMemoryRealm.jsp +++ /dev/null @@ -1,213 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    -    -
     
    -    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - -   - - - - - - - - - - - - - - -
    -    -
     
    -    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/appContainers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/appContainers.jsp deleted file mode 100644 index 2a7f5d4b58..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/appContainers.jsp +++ /dev/null @@ -1,57 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - -   -   - - - - - - -   - -   - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/cfUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/cfUsedBy.jsp deleted file mode 100644 index 2c7448d5d4..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/cfUsedBy.jsp +++ /dev/null @@ -1,67 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/confirmActionXaResource.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/confirmActionXaResource.jsp deleted file mode 100644 index 640dc2e4fd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/confirmActionXaResource.jsp +++ /dev/null @@ -1,69 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/container.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/container.jsp deleted file mode 100644 index 457ac64843..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/container.jsp +++ /dev/null @@ -1,53 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerEjbs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerEjbs.jsp deleted file mode 100644 index 9b811c953b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerEjbs.jsp +++ /dev/null @@ -1,69 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerStatistic.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerStatistic.jsp deleted file mode 100644 index 40ee40498f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containerStatistic.jsp +++ /dev/null @@ -1,186 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containers.jsp deleted file mode 100644 index 136084654d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/containers.jsp +++ /dev/null @@ -1,60 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/databases.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/databases.jsp deleted file mode 100644 index cab707bc7e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/databases.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasource.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasource.jsp deleted file mode 100644 index ef5eb5215e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasource.jsp +++ /dev/null @@ -1,174 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceStatistics.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceStatistics.jsp deleted file mode 100644 index 0ca43c590d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceStatistics.jsp +++ /dev/null @@ -1,180 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceUsedBy.jsp deleted file mode 100644 index 3faf4ef84a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/datasourceUsedBy.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/depmonitorService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/depmonitorService.jsp deleted file mode 100644 index 430512ae75..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/depmonitorService.jsp +++ /dev/null @@ -1,75 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/discovery.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/discovery.jsp deleted file mode 100644 index ff5d68c8e9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/discovery.jsp +++ /dev/null @@ -1,66 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ear.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ear.jsp deleted file mode 100644 index a2f5630c36..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ear.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earJars.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earJars.jsp deleted file mode 100644 index 745a05120b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earJars.jsp +++ /dev/null @@ -1,61 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earRars.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earRars.jsp deleted file mode 100644 index e7f2c3568f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earRars.jsp +++ /dev/null @@ -1,59 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earWars.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earWars.jsp deleted file mode 100644 index f80ce30d93..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earWars.jsp +++ /dev/null @@ -1,61 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earXmlDeployment.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earXmlDeployment.jsp deleted file mode 100644 index 61dfdf95eb..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/earXmlDeployment.jsp +++ /dev/null @@ -1,47 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejb.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejb.jsp deleted file mode 100644 index 8b175bcfb5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejb.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - Type - - - - Name - - - - File - - - - Node - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainerService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainerService.jsp deleted file mode 100644 index ca837f78f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainerService.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainersStatistic.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainersStatistic.jsp deleted file mode 100644 index 911c88ef20..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbContainersStatistic.jsp +++ /dev/null @@ -1,208 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj"%> - - -<%@ include file="../common/begin.jsp"%> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - -<%@ include file="../common/end.jsp"%> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbDependency.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbDependency.jsp deleted file mode 100644 index 895567c4a8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbDependency.jsp +++ /dev/null @@ -1,260 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <% - java.util.HashMap params = new java.util.HashMap(); - params.put("name", param1); - params.put("id", param2); - pageContext.setAttribute("paramsName", params); - %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbEntity.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbEntity.jsp deleted file mode 100644 index eb7aaa93d9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbEntity.jsp +++ /dev/null @@ -1,175 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbMessage.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbMessage.jsp deleted file mode 100644 index 7d41ff1211..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbMessage.jsp +++ /dev/null @@ -1,143 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbSession.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbSession.jsp deleted file mode 100644 index e32909bb79..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbSession.jsp +++ /dev/null @@ -1,203 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbVirtual.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbVirtual.jsp deleted file mode 100644 index 0b7f17e186..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ejbVirtual.jsp +++ /dev/null @@ -1,76 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - -
    " method="post"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - -
    \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactories.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactories.jsp deleted file mode 100644 index f87160a35d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactories.jsp +++ /dev/null @@ -1,40 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactory.jsp deleted file mode 100644 index e277f19ee8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsConnFactory.jsp +++ /dev/null @@ -1,37 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsDestinations.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsDestinations.jsp deleted file mode 100644 index 2c816afdd9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsDestinations.jsp +++ /dev/null @@ -1,24 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueue.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueue.jsp deleted file mode 100644 index 291a3a39bd..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueue.jsp +++ /dev/null @@ -1,41 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueues.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueues.jsp deleted file mode 100644 index 3e9b61a347..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsQueues.jsp +++ /dev/null @@ -1,42 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsService.jsp deleted file mode 100644 index 3a66497585..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsService.jsp +++ /dev/null @@ -1,40 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopic.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopic.jsp deleted file mode 100644 index 36dbe90139..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopic.jsp +++ /dev/null @@ -1,37 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopics.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopics.jsp deleted file mode 100644 index 03bd6510c6..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jmsTopics.jsp +++ /dev/null @@ -1,42 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmService.jsp deleted file mode 100644 index 623ff46e8d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmService.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmServiceStopped.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmServiceStopped.jsp deleted file mode 100644 index 1b45441d8d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/jtmServiceStopped.jsp +++ /dev/null @@ -1,32 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - not active. - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mailService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mailService.jsp deleted file mode 100644 index be3f783850..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mailService.jsp +++ /dev/null @@ -1,41 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactories.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactories.jsp deleted file mode 100644 index c3acfb61db..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactories.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactory.jsp deleted file mode 100644 index 0d2dd1eb2f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartFactory.jsp +++ /dev/null @@ -1,134 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartMailFactoryUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartMailFactoryUsedBy.jsp deleted file mode 100644 index b12db714b2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/mimepartMailFactoryUsedBy.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/queueUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/queueUsedBy.jsp deleted file mode 100644 index 301a156960..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/queueUsedBy.jsp +++ /dev/null @@ -1,67 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10.jsp deleted file mode 100644 index 152715e209..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10.jsp +++ /dev/null @@ -1,214 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10Stats.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10Stats.jsp deleted file mode 100644 index 97e2eac713..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar10Stats.jsp +++ /dev/null @@ -1,181 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15.jsp deleted file mode 100644 index d73b16ec49..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15.jsp +++ /dev/null @@ -1,120 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AO.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AO.jsp deleted file mode 100644 index eba6f63697..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AO.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AOs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AOs.jsp deleted file mode 100644 index e92c6e7239..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AOs.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AS.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AS.jsp deleted file mode 100644 index cb86a2e03d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15AS.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15ASs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15ASs.jsp deleted file mode 100644 index dfba190af7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15ASs.jsp +++ /dev/null @@ -1,53 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CF.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CF.jsp deleted file mode 100644 index aaf4ab0283..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CF.jsp +++ /dev/null @@ -1,189 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFStats.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFStats.jsp deleted file mode 100644 index df4d3bf67b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFStats.jsp +++ /dev/null @@ -1,195 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFs.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFs.jsp deleted file mode 100644 index 4644e80e58..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rar15CFs.jsp +++ /dev/null @@ -1,52 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarPoolStatistics.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarPoolStatistics.jsp deleted file mode 100644 index 812b88c536..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarPoolStatistics.jsp +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarStatistics.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarStatistics.jsp deleted file mode 100644 index a03a4b3748..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarStatistics.jsp +++ /dev/null @@ -1,180 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy10.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy10.jsp deleted file mode 100644 index a527d19da9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy10.jsp +++ /dev/null @@ -1,64 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy15.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy15.jsp deleted file mode 100644 index f2a7e4213f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rarUsedBy15.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rars.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rars.jsp deleted file mode 100644 index ea431a3e7a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/rars.jsp +++ /dev/null @@ -1,59 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/security.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/security.jsp deleted file mode 100644 index f57f3ad524..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/security.jsp +++ /dev/null @@ -1,90 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - -   - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/securityStopped.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/securityStopped.jsp deleted file mode 100644 index 39bf12980e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/securityStopped.jsp +++ /dev/null @@ -1,28 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - not active. - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/services.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/services.jsp deleted file mode 100644 index 083d271f10..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/services.jsp +++ /dev/null @@ -1,233 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - Mandatory services - - - - -   -   -   - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - Container services - - - - -   -   -   - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Webservices services - - - - -   -   -   - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Other services - - - - -   -   -   - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactories.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactories.jsp deleted file mode 100644 index d9d259437f..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactories.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactory.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactory.jsp deleted file mode 100644 index c412bdb762..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionFactory.jsp +++ /dev/null @@ -1,108 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionMailFactoryUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionMailFactoryUsedBy.jsp deleted file mode 100644 index 44fe48b7e0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/sessionMailFactoryUsedBy.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/smartclientService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/smartclientService.jsp deleted file mode 100644 index 642e44518e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/smartclientService.jsp +++ /dev/null @@ -1,32 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/topicUsedBy.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/topicUsedBy.jsp deleted file mode 100644 index 41023dd64e..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/topicUsedBy.jsp +++ /dev/null @@ -1,67 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionMonitor.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionMonitor.jsp deleted file mode 100644 index 23443e9894..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionMonitor.jsp +++ /dev/null @@ -1,60 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionRecovery.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionRecovery.jsp deleted file mode 100644 index 989338036b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionRecovery.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionStatistic.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionStatistic.jsp deleted file mode 100644 index 9de3fc3d2d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/transactionStatistic.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/versioningService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/versioningService.jsp deleted file mode 100644 index 15b482d183..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/versioningService.jsp +++ /dev/null @@ -1,55 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/war.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/war.jsp deleted file mode 100644 index 53a05fdc84..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/war.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warJonasXml.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warJonasXml.jsp deleted file mode 100644 index 19b56c0b81..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warJonasXml.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warServlets.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warServlets.jsp deleted file mode 100644 index d272fba5d8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warServlets.jsp +++ /dev/null @@ -1,63 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warWebXml.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warWebXml.jsp deleted file mode 100644 index 5d8617fef1..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/warWebXml.jsp +++ /dev/null @@ -1,50 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webApp.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webApp.jsp deleted file mode 100644 index 5738894a54..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webApp.jsp +++ /dev/null @@ -1,80 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppCatalina.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppCatalina.jsp deleted file mode 100644 index 015aa4f1e2..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppCatalina.jsp +++ /dev/null @@ -1,196 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppJetty.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppJetty.jsp deleted file mode 100644 index b9ed6bbd35..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppJetty.jsp +++ /dev/null @@ -1,116 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppVirtualCatalina.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppVirtualCatalina.jsp deleted file mode 100644 index f5827c74df..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webAppVirtualCatalina.jsp +++ /dev/null @@ -1,98 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> -<%@ page import="java.util.Map"%> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - <% - request.setAttribute("tempON", ((String) - ( - ((Map)(request.getAttribute("objectNames"))).get( - ((Map.Entry)context).getKey() - ) - ))); - %> - - - - - - - <%=((Integer)(((Map)(request.getAttribute("nbSessions"))).get(((Map.Entry)context).getKey())))%> - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webContainers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webContainers.jsp deleted file mode 100644 index 925610a964..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/webContainers.jsp +++ /dev/null @@ -1,60 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workcleanerService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workcleanerService.jsp deleted file mode 100644 index d060121868..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workcleanerService.jsp +++ /dev/null @@ -1,82 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workmanagerService.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workmanagerService.jsp deleted file mode 100644 index 89bc0a978c..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/workmanagerService.jsp +++ /dev/null @@ -1,59 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -    - -    - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/handlersDetails.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/handlersDetails.jsp deleted file mode 100644 index 4c6c777c06..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/handlersDetails.jsp +++ /dev/null @@ -1,99 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ page import="java.util.HashMap" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      - -
    • - -
    • -
      -
    -
    -
    - - - - -
      - -
    • - -
    • -
      -
    -
    -
    - - - - -
      - -
    • - = -
    • -
      -
    -
    -
    -
    - - -
    -
    - -<%@ include file="../../common/end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/portComponentsDetails.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/portComponentsDetails.jsp deleted file mode 100644 index 37de3a5ff8..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/portComponentsDetails.jsp +++ /dev/null @@ -1,103 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%=portUrl %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewHandlers.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewHandlers.jsp deleted file mode 100644 index 5436dfb7d5..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewHandlers.jsp +++ /dev/null @@ -1,66 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="java.util.HashMap" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <% - HashMap handlerDetailsMap = new HashMap(); - handlerDetailsMap.put("wsdselect", wsdId); - handlerDetailsMap.put("pcselect", pcId); - handlerDetailsMap.put("handlerselect", handlerId); - request.setAttribute("handlerDetailsMap", handlerDetailsMap); - %> - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewPortComponents.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewPortComponents.jsp deleted file mode 100644 index e6f3058f1b..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/viewPortComponents.jsp +++ /dev/null @@ -1,62 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="java.util.HashMap" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <% - HashMap paramMap = new HashMap(); - paramMap.put("wsdselect", wsdId); - paramMap.put("pcselect", pcId); - request.setAttribute("paramMap", paramMap); - %> - - - - - - - - <%=portUrl %> - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDescriptions.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDescriptions.jsp deleted file mode 100644 index 729154e2c3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDescriptions.jsp +++ /dev/null @@ -1,58 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%=wsdlUrl %> - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDetails.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDetails.jsp deleted file mode 100644 index 6d2e26c1f0..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/ws/webserviceDetails.jsp +++ /dev/null @@ -1,78 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <%=wsdlUrl %> - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/xaresourceRecovery.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/xaresourceRecovery.jsp deleted file mode 100644 index ed28b4f839..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/service/xaresourceRecovery.jsp +++ /dev/null @@ -1,79 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/iepngfix.htc b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/iepngfix.htc deleted file mode 100644 index 4e7199f07a..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/iepngfix.htc +++ /dev/null @@ -1,85 +0,0 @@ - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/jonasAdmin.css b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/jonasAdmin.css deleted file mode 100644 index e37c1950f3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/style/jonasAdmin.css +++ /dev/null @@ -1,659 +0,0 @@ -body { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - background-color: #a9a9a9; - SCROLLBAR-FACE-COLOR: #FFFFFF; - SCROLLBAR-HIGHLIGHT-COLOR: #FFFFFF; - SCROLLBAR-SHADOW-COLOR: #FFFFFF; - SCROLLBAR-ARROW-COLOR: #FFFFFF; - SCROLLBAR-TRACK-COLOR: #FFFFFF; - scrollbar-3d-light-color: #FFFFFF; - scrollbar-dark-shadow-color: #FFFFFF -} - -img, div { - behavior: url("./style/iepngfix.htc"); -} - -td { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; -} - -a { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; -} - -select { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; -} - -select.deploy { - width: 250px; -} - -select.dispatch { - width: 150px; -} - -input { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - color:#000000; -} -.longButton { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - background-color: #404e55; - color: #FFFFFF; - font-weight: bold; - text-align: center; - margin: em; - text-decoration: none; -} - - -.button { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - color: #FFFFFF; - background-color: #404e55; - font-weight: bold; - text-align: center; - text-decoration: none; -} - -.buttonDeploy { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - background-color: #404e55; - color: #FFFFFF; - font-weight: bold; - width: 50px; - text-align: center; - text-decoration: none; -} -.buttonSelect { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - background-color: #404e55; - color: #FFFFFF; - font-weight: bold; - text-align: center; - text-decoration: none; -} - -td.top { - font-size: 12px; -} - -a.top { - font-size: 12px; - font-weight: bold; - color: #404e55; -} - -a.top:active { - color: #404e55; - text-decoration: none; -} - -a.top:link { - color: #404e55; - text-decoration: none; -} - -a.top:visited { - color: #404e55; - text-decoration: none; -} - -a.top:hover { - color: #000000; - text-decoration: none; -} - -select.top { - font-size: 12px; -} - -td.topTitle { - font-size: 24px; - color: #000000; -} - -td.maintitle { - font-size: 36px; - color: #FFFFFF; -} - -td.tomthumb { - font-size: 14px; -} - -td.topErrors { - font-size: 10px; - color: #000000; - background-color: #E0ECFF; -} - -tr.errors { - color: #000000; - background-color: #E0ECFF; -} - -td.errors { - font-size: 12px; -} - -td.errorTitle { - font-size: 24px; - font-weight: bold; -} - -td.errorLink { - font-size: 16px; - font-weight: bold; -} - -a.error { - font-size: 16px; - font-weight: bold; - color: #404e55; -} - -a.error:active { - color: #404e55; - text-decoration: none; -} - -a.error:link { - color: #404e55; - text-decoration: none; -} - -a.error:visited { - color: #404e55; - text-decoration: none; -} - -a.error:hover { - color: #666666; - text-decoration: none; -} - -td.contentTitle { - font-size: 16px; - color: #404e55; - font-weight: bold; -} - -td.contentTitleImage { - -} - -td.contentTitleTomThumb { - color: #000000; -} - -.contentTitleTomThumbNotLink { - color: #404e55; -} - -a.contentTitleTomThumb:active { - color: #404e55; - text-decoration: none - font-weight: bold; -} - -a.contentTitleTomThumb:link { - color: #404e55; - font-weight: bold; - text-decoration: none -} - -a.contentTitleTomThumb:visited { - color: #404e55; - text-decoration: none -} - -a.contentTitleTomThumb:hover { - color: #000000; - text-decoration: none -} - -tr.gridRowEven { - background-color: #87a4b3; -} - -tr.gridRowOdd { - background-color: #FFFFFF; -} - -a.tab { - text-decoration: none; - font-weight: bold; - color:#D4D0C8; - - -} -a.tab:visited { - color:#D4D0C8; -} - - -a.tab:hover { - color: #FFFFFF; - font-weight: bold; - -} - -td.tab { - background-color:#738188; - color:#FFFFFF; - border: thick; - border-bottom-color: #404e55; - border-bottom-width: 2px; -} - -td.tabSelect { - color: #FFFFFF; - background-color:#404e55; - border: thick; - font-weight: bold; - border-bottom-color: #404e55; - border-bottom-width: 2px; - border-bottom-width: 1px; - -} - -td.tabSeparatorVertical { - width: 5px; - background-color: transparent; - border-bottom-color: #404e55; - border-bottom-width: 2px; -} - -td.tabSeparatorHorizontal { - width: 0px; -} - - - -tr.panel { - background-color:#87a4b3; -} - -td.panel { - background-color:#404e55; - border-bottom-color: #FFFFFF; - border-bottom-width: 3px; -} - -a.panel { - font-size: 12px; - font-weight: bold; - color: #404e55; -} - -a.panel:active { - color: #404e55; - text-decoration: underline; -} - -a.panel:link { - color: #404e55; - text-decoration: underline; -} - -a.panel:visited { - color: #404e55; - text-decoration: underline; -} - -a.panel:hover { - color: #000000; - text-decoration: underline; -} - -tr.panelTitle { - background-color: #404e55; -} - -td.panelTitle { - font-size: 14px; - color: #FFFFFF; - font-weight: bold; -} - -tr.panelTitle2 { - background-color: #D4D0C8; -} - -td.panelTitle2 { - font-size: 14px; - color: #404e55; - font-weight: bold; -} - -tr.panelSeparator { - background-color: #D4D0C8; -} - -td.panelSeparator { - background-color: #87a4b3; - font-size: 1px; -} - -a.action { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: bold; - color: #660066; -} - -a.action:active { - color: #660066; - text-decoration: underline; -} - -a.action:link { - color: #660066; - text-decoration: none; -} - -a.action:visited { - color: #660066; - text-decoration: none; -} - -a.action:hover { - color: olive; - text-decoration: none; -} - -td.btn { - background-color: #404e55; - text-decoration: none; -} - -td.btnBorderLight { - background-color: #999999; -} - -td.btnBorderShadow { - background-color: #000000; -} - -td.btnDisabled { - font-size: 12px; - font-weight: bold; - color: #FFFFFF; - background-color: #404e55; - text-decoration: none; -} - -a.btn { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - color: #FFFFFF; - background-color: #404e55; - font-weight: bold; - width: 100px; - text-align: center; - text-decoration: none; - } - -a.btn:active { - color: #FFFFFF; - background-color: #404e55; -} - -a.btn:link { - color: #FFFFFF; -} - -a.btn:visited { - color: #E9F3F2; - text-decoration: none; -} - -a.btn:hover { - color: #FFFFFF; - text-decoration: underline; -} - -a.panel2 { - font-size: 12px; - font-weight: bold; - color: #000000; -} - -a.panel2:active { - color: #000000; - text-decoration: underline; -} - -a.panel2:link { - color: #000000; - text-decoration: underline; -} - -a.panel2:visited { - color: #000000; - text-decoration: underline; -} - -a.panel2:hover { - color: #404e55; - text-decoration: underline; -} - -.tree-control { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 80%; - line-height: 1.0; -} - -.tree-control-selected { - color:#404e55; - font-weight: bold; - font-size:13px; - text-decoration: none; -} - -.tree-control-unselected { - color: black; - font-style: normal; - font-weight: normal; - text-decoration: none; -} - -.xmlElement { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - color: #404e55; -} - -.xmlText { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - color: #000000; -} - -.xmlHeader { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 10px; - font-style: normal; - color: #000000; -} - -.xmlComment { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; - color: #660066; -} - -div.element - { - margin-left: 20px; - margin-top: 3px; - margin-bottom: 3px; - background-color: #FFFFCC; -} - -div.element2 { - margin-left: 20px; - margin-top: 3px; - margin-bottom: 3px; - padding: 2px; -} - -div.element1 { - margin-left: 20px; - margin-top: 3px; - margin-bottom: 3px; - padding: 2px; - border: 1px solid #dcdcdc; -} - -div.element2-new { - margin-left: 20px; - margin-top: 3px; - margin-bottom: 3px; - padding: 2px; - background-color: #FFFFCC; -} - -div.element1-new { - margin-left: 20px; - margin-top: 3px; - margin-bottom: 3px; - padding: 2px; - border: 1px solid #dcdcdc; - background-color: #FFFFCC; -} - -div.buttons { - float: right; - padding: 3px; - border-left: 1px solid #dcdcdc; - border-bottom: 1px solid #dcdcdc; -} - -.elementSelect { - font-size: 12px; - border: 1px solid; - border-color: #999 #ccc #ccc #999; -} -.actionButton { - font-size: 12px; - padding: 3px; - background-color: #E4E4E4; - border: 1px solid; - border-color: #999 #ccc #ccc #999; - text-align: center; -} -.removeButton { - font-size: 9px; - padding: 1px; - background-color: #EAEAEA; - border: 1px; -} - -.textElement { - font-size: 12px; - padding: 3px; - background-color: #D4D0C8; - border: 1px solid; - border-color: #999 #ccc #ccc #999; -} - -.textElement:focus { - background-color: #FFFFCC; -} - -.attribute { - font-size: 12px; - padding: 3px; - background-color: #D4D0C8; - border: 1px solid; - border-color: #999 #ccc #ccc #999; -} - -.elementName { - cursor: pointer; - cursor: hand; -} - -td.loginTr { - align: center; - color: #FFFFFF; -} -.graphButton { - background-image:url(../images/button/GraphButton.png); - height: 10px; - width: 47px; - float: right; - padding: 3px; - border-left: 1px solid #dcdcdc; - border-bottom: 1px solid #dcdcdc; - - - } - -selectSoft { - font-family: arial, verdana, geneva, helvetica, sans-serif; - font-size: 12px; - font-style: normal; -} - -selectSoft.deploy { - width: 250px; -} - -selectSoft.dispatch { - width: 150px; -} -.mainLoginTable { - background-image:url(../images/logo/jonasAdmin.png); - background-repeat:no-repeat; -} - -.authentifLoginTable{ - filter:alpha(opacity=70); - -moz-opacity:0.70; - opacity: 0.70; - background-repeat:no-repeat; -} - -.htmlText{ - width : 100px; - } - .htmlTextLbPolicy{ - width : 150px; - } - - .htmlTextLbPolicyChanged{ - width : 150px; - background-color: #FFCC99; - } -.boldText{ - font-weight: bold; -} -.htmlTextChanged{ - width : 100px; - background-color: #FFCC99; - } diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/top.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/top.jsp deleted file mode 100644 index 6ee079d768..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/top.jsp +++ /dev/null @@ -1,78 +0,0 @@ - - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.action.Action"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - - -<%@ include file="begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - JOnAS Administration
    - - - - - - -
    - - - - - - - - - -  
    -
    - - - - -<%@ include file="end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/tree.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/tree.jsp deleted file mode 100644 index 80cc3b8cd9..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/tree.jsp +++ /dev/null @@ -1,47 +0,0 @@ - - -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - - - -<%@ include file="begin.jsp" %> - - - - - - - - - - - - - - - - - -<%@ include file="end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/welcomeContent.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/welcomeContent.jsp deleted file mode 100644 index 6ed9e9717d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/welcomeContent.jsp +++ /dev/null @@ -1,19 +0,0 @@ -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> - - -<%@ include file="begin.jsp" %> - - - - - - - - - -

    JOnAS Administration

    - -<%@ include file="end.jsp" %> -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfig.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfig.jsp deleted file mode 100644 index d6563d1a03..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfig.jsp +++ /dev/null @@ -1,498 +0,0 @@ - <%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jonas-ra.xml
    -
    - - ra.xml
    - -
    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - -
    -<%@ include file="../common/end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAdvanced.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAdvanced.jsp deleted file mode 100644 index 4d87b48902..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAdvanced.jsp +++ /dev/null @@ -1,109 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jonas-ra.xml
    -
    - - ra.xml
    -
    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - -<%@ include file="../common/end.jsp" %> - -
    diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAjax.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAjax.jsp deleted file mode 100644 index 08fd9baeee..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigAjax.jsp +++ /dev/null @@ -1,22 +0,0 @@ - -<%@ page language="java" contentType="text/xml;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigConfirm.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigConfirm.jsp deleted file mode 100644 index dc3e9fe6a7..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigConfirm.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%@ include file="../common/end.jsp" %> - - diff --git a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigSelect.jsp b/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigSelect.jsp deleted file mode 100644 index 224630f2e3..0000000000 --- a/jonas/modules/ee-components/jonas-admin/core/src/main/webapp/xml/archiveConfigSelect.jsp +++ /dev/null @@ -1,90 +0,0 @@ -<%@ page language="java" contentType="text/html;charset=utf-8" %> -<%@ page import="org.apache.struts.Globals"%> -<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> -<%@ taglib uri="/WEB-INF/sj.tld" prefix="sj" %> - - -<%@ include file="../common/begin.jsp" %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - META-INF/ra.xml
    - META-INF/jonas-ra.xml
    -
    -
    - - - -
    - - - - - -
    - - - - - - - - - -
    -
    -
    - -<%@ include file="../common/end.jsp" %> - -
    - diff --git a/jonas/modules/ee-components/jonas-admin/plans/pom.xml b/jonas/modules/ee-components/jonas-admin/plans/pom.xml deleted file mode 100644 index a1688c6f1d..0000000000 --- a/jonas/modules/ee-components/jonas-admin/plans/pom.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - jonas-admin - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-admin-plan - JOnAS :: EE Components :: JOnAS Admin Console :: Deployment plan - deployment-plan - - - - org.ow2.jonas - jonas-management-api - ${project.version} - - - org.ow2.jonas - jonas-management-extensions - ${project.version} - - - org.ow2.jonas - jonas-admin-core - ${project.version} - war - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - true - - - org.ow2.jonas:jonas-management-api:jar - org.ow2.jonas:jonas-management-extensions:jar - org.ow2.jonas:jonas-admin-core:war - - - - org.ow2.jonas:jonas-management-api:jar, org.ow2.jonas:jonas-management-extensions:jar, - org.ow2.jonas:jonas-admin-core:war - - - - org.ow2.jonas:jonas-management-api:jar - org.ow2.jonas:jonas-management-extensions:jar - org.ow2.jonas:jonas-admin-core:war - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-admin/pom.xml b/jonas/modules/ee-components/jonas-admin/pom.xml deleted file mode 100644 index 9547a5e750..0000000000 --- a/jonas/modules/ee-components/jonas-admin/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-ee-components - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-admin - pom - JOnAS :: EE Components :: JOnAS Admin Console - - core - plans - - diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/pom.xml b/jonas/modules/ee-components/jonas-ctxroot/core/pom.xml deleted file mode 100644 index f0bec944a1..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - jonas-ctxroot - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-ctxroot-core - war - JOnAS :: EE Components :: Web Context Root :: Core - - - - org.ow2.jonas - jonas-version - ${project.version} - provided - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - - ctxroot - - - - org.codehaus.mojo.jspc - jspc-maven-plugin - - - jsp-compiler - - compile - - - - - - - org.codehaus.mojo.jspc - jspc-compiler-tomcat6 - ${jspc.version} - - - - - org.apache.maven.plugins - maven-war-plugin - - ${pom.basedir}/target/jspweb.xml - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/jonas-web.xml b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 63dcb6f420..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - / - - - true - diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/web.xml b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index fe61337db1..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/index.jsp b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/index.jsp deleted file mode 100644 index 04d99cbb04..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/index.jsp +++ /dev/null @@ -1,213 +0,0 @@ -<%@ page - language="java" - contentType="text/html;charset=utf-8" - import = "java.util.List" - import = "java.util.Set" - import = "javax.management.MBeanServerFactory" - import = "javax.management.MBeanServer" - import = "javax.management.ObjectName" - import = "javax.management.QueryExp" - import = "javax.management.Query" - import = "org.ow2.jonas.Version" - import = "org.ow2.jonas.lib.bootstrap.JProp" - import = "org.ow2.jonas.lib.util.JonasObjectName" - import = "org.ow2.jonas.lib.management.javaee.J2eeObjectName" -%> - - - - - - - - <% - - // Connect to the local MBeanServer - MBeanServer mbeanServer = null; - List mbeanServers = MBeanServerFactory.findMBeanServer(null); - if (mbeanServers.size() > 0) { - mbeanServer = (MBeanServer) mbeanServers.get(0); - } - - String webContainer = ""; - boolean isJetty = false; - boolean isTomcat = false; - boolean useEarSample = false; - boolean useJavaEEEarSample = false; - boolean isDocumentationAvailable = false; - boolean isJavaDocAvailable = false; - - if (mbeanServer != null) { - - // Retrieve domain - String domain = JProp.getInstance().getValue(JProp.DOMAIN_NAME); - - // Web Container ? - ObjectName webContainerON = JonasObjectName.webContainerService(domain); - - boolean hasWebContainer = mbeanServer.isRegistered(webContainerON); - - if (hasWebContainer) { - // Determine if Jetty or Tomcat - String name = (String) mbeanServer.getAttribute(webContainerON, "ServerName"); - if ("jetty".equalsIgnoreCase(name)) { - isJetty = true; - } else if ("apache tomcat".equalsIgnoreCase(name)) { - isTomcat = true; - } - - // Get version - String version = (String) mbeanServer.getAttribute(webContainerON, "ServerVersion"); - - // Compose web container displayed name - webContainer = name + " v" + version; - - // Web-apps deployed - // ------------------------------------ - // jonas-doc-en - QueryExp query = getContextRootQuery("jonas-doc-en"); - ObjectName on = JonasObjectName.allWars(domain); - Set result = mbeanServer.queryMBeans(on, query); - - if (!result.isEmpty()) { - // Got a matching webapp - isDocumentationAvailable = true; - } - - // jonas-javadoc - query = getContextRootQuery("jonas-javadoc"); - result = mbeanServer.queryMBeans(on, query); - - if (!result.isEmpty()) { - // Got a matching webapp - isJavaDocAvailable = true; - } - - // Same with Ear - // --------------------- - // j2ee-1.4 sample - on = J2eeObjectName.J2EEApplications(domain); - query = getJ2EEApplicationQuery("j2ee-1.4"); - result = mbeanServer.queryMBeans(on, query); - - if (!result.isEmpty()) { - // Got a matching app - useEarSample = true; - } - - // Java EE 5.0 Sample - query = getJ2EEApplicationQuery("javaee5-earsample"); - result = mbeanServer.queryMBeans(on, query); - - if (!result.isEmpty()) { - // Got a matching app - useJavaEEEarSample = true; - } - - - } - - } else { - // We can't do anything, just print a nice warning and exit - } - - // Now display data ... - String title = "JOnAS v" + Version.getNumber(); - if (webContainer != null) { - title += " / " + webContainer; - } - title += " Package"; - out.print(title); - %> - <%! - /** - * Create a JMX Query that match the ContextRoot attribute. - */ - private static QueryExp getContextRootQuery(final String contextName) { - return Query.eq(Query.attr("ContextRoot"), Query.value(contextName)); - } - - /** - * Create a JMX Query that match the name attribute. - */ - private static QueryExp getJ2EEApplicationQuery(final String appName) { - return Query.eq(Query.attr("name"), Query.value(appName)); - } - %> - - - - -
    logo
    -
    - <% - if (isTomcat) { - out.print("\"Apache"); - } - if (isJetty) { - out.print("\"Mortbay"); - } - %> - JOnAS WebSite -
    - -
    - <% - out.print(title); - %> -
    - - - - - - diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/jetty.gif b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/logoOW2.png b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/logoOW2.png deleted file mode 100644 index 71a185b68ed53e228e23c82c4ea0aa47b7556959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13572 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 diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow2_jonas.css b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow2_jonas.css deleted file mode 100644 index c1105511cd..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow2_jonas.css +++ /dev/null @@ -1,183 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - - -body -{ - top:10px; - margin-top:10px; - background-color: #FFF; - color: #000000; - } - - -img { - margin: 5px; - border:0; -} - - - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - font-size: 14px; - margin-top : 40px; - margin-left : 100px; -} - - -div.titlepage { - margin-left: 200px; - font-family: Arial, Helvetica, sans-serif; - font-size: 1.5em; - line-height: 1.5em; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - - -.h1, .h2, .h3, .h4, .h5 { - color: #000; - background-color: inherit; - padding: 0; -} - -.h1 { - margin-top: 5px; - font-size: 2em; - line-height: 1.5em; - margin: 30px 0 30px 0; - border-bottom: 1px solid #0099cc; - color : #ff6600; - font-weight : bold; -} - -.h2 { - margin: 20px 0 15px 0; - border-bottom: 1px solid #0099cc; - font-weight:normal; - font-style: normal; - font-size: 1.6em; - line-height: 1.4em; - color : #0099cc -} - -.h3 { - font-weight: normal; - font-size: 1.4em; - line-height: 1.4em; - margin: 20px 0 15px 0; -} - -.h4 { - font-weight:normal; - color: #404040; - margin: 20px 0 0 0; - left: 0px; - font-size: 1.4em; - line-height: 1.4em; -} -.h5 { - font-weight:normal; - color: #404040; - font-style: normal; - margin: 0px; - left: 0px; - font-size: 1.2em; - line-height: 1.2em; -} - -td -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - font-weight: normal; -} - -p -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - margin: 10px 10px 5px 0px; -} - -p.error -{ - color: red; -} - diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow_jonas_logo.gif b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/style.css b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/style.css deleted file mode 100644 index 4f852c2a87..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/style.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - background : white; - color : black; -} -h1, h2, h3 {font-family : sans-serif; } -h1 {font-size : 175%; color : DarkCyan; text-align : center;} -h2 {font-size : 150%; color : DarkCyan; - border-bottom : solid; - border-bottom-width : 1; -} -h3 {font-size : 125%; } -strong { font-weight : bold; } -hr { size : 1; width : 100%; } diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/tomcat.gif b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/tomcat.gif deleted file mode 100644 index 61756736b82350f64b5ea1b2bfc31ac57e30a3d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1934 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 Re0F?dK$vW)v>aKN{y(`9mQw%# diff --git a/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/vcss.png b/jonas/modules/ee-components/jonas-ctxroot/core/src/main/webapp/vcss.png deleted file mode 100644 index 9b2f596e016533327216d98a0a927738fe17384f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^5kM@@!3-or#C~03U|`e?@Ck7Ra+Q_kdEDnlhI%!W zMb4c&_g;@{HxGAjZ*NM+!7cOCYk@#Y{Pps{+}zwx_wR4FlUu4N92*~!s#T`6W<+- zt4%e$w+9&~i2E*D*W)T9Bhx(p?A&_0|7X(X^Ya7IW>?MPDaUzu zczTO0wr<^e|Jf%QG42CClNSR6E4d`dFZlmw6q^`8Jh0FrC=HPY3SEXN1j@jH0f@DT z;lF?am<8g&3^agg*jyz(n}LC8qNj^vNX4zUQ)`1SI|v-Rel?4G(T!h0t6h3r9Tx_% z{GPN=z+e1GN8qGw>eHn5|8FmNua|o1m5;W_zoO+QbMz<2znfQG#(ynM{=I#{0V!X> zqF)tO-~TK+p#QH~U+~Uxw*7OC?@4lzU=MuwAfY=*I-PyJf}6|jF4ry6#nK@bObtKJ z{jpr)a7XQvK=_v<_kY&OUtDf7N2Y`!=sAP5DASo0{WX7G;uf&=`Gs|Enroa;cP#bwBZgT0Vk8}Ij!pi@+JzOex~wA_|LQI>iZ4KOPMZj@RJmq z{=ckJgo`sg=^ee+rLf!@|1r#|1Qou-tz zozY_28jcOAqH_ZHT>9G+6r2tD{%tx^c*pF4-nNSOH_A#)UvDaE^>6pwzeB^b1utmshBn2mW1YZ#q&(r+Ne9lLHSPV z;lJMu*6nF1eX&Vu#au@n)2h{;1^hB;>x|=8`0r4N5Dq`3W>NpNuIHfS-r}72x2dtZ z|1vypS3P_!s?6%3q3f=mrP_V^@twUAXY`EwoTZxX&st-k^Kye`&fdVV(2iA`qSwCa zO3SD?y)^LM2F^-1=1_^hVN1d%c)e7=87<81^0{cK;`g>k^UAjGxu$SW%#%-OqR3cMOS7CD$Nw90jSF7TjZ+3b%7?`))PKP%lew!LZ} z9@4ntXMQ2~DY0cQL^+Gz9jsW~FI2w%Uw?1i^C{7@K5}j{esbPgg&e IbxsLQ074N#oB#j- diff --git a/jonas/modules/ee-components/jonas-ctxroot/plans/pom.xml b/jonas/modules/ee-components/jonas-ctxroot/plans/pom.xml deleted file mode 100644 index 75076d121b..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/plans/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - jonas-ctxroot - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-ctxroot-plan - JOnAS :: EE Components :: Web Context Root :: Deployment plan - deployment-plan - - - - org.ow2.jonas - jonas-ctxroot-core - ${project.version} - war - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - true - - - org.ow2.jonas:jonas-ctxroot-core:jar - - - org.ow2.jonas:jonas-ctxroot-core:jar - - - org.ow2.jonas:jonas-ctxroot-core:jar - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/jonas-ctxroot/pom.xml b/jonas/modules/ee-components/jonas-ctxroot/pom.xml deleted file mode 100644 index 2be95cfe47..0000000000 --- a/jonas/modules/ee-components/jonas-ctxroot/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-ee-components - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-ctxroot - pom - JOnAS :: EE Components :: Web Context Root - - core - plans - - \ No newline at end of file diff --git a/jonas/modules/ee-components/mejb/core/pom.xml b/jonas/modules/ee-components/mejb/core/pom.xml deleted file mode 100644 index b1ddafd301..0000000000 --- a/jonas/modules/ee-components/mejb/core/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - mejb - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - mejb-core - JOnAS :: EE Components :: MEJB :: Core - jar - - - - org.ow2.bundles - ow2-util-log - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - - - org.ow2.spec.ee - ow2-jsr77-1.1-spec - - - - - mejb - - - maven-ejb-plugin - - 3 - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ListenerRegistrationImpl.java b/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ListenerRegistrationImpl.java deleted file mode 100644 index 88fcdaa609..0000000000 --- a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ListenerRegistrationImpl.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.mejb; - -import java.io.IOException; -import java.rmi.RemoteException; - -import javax.management.InstanceNotFoundException; -import javax.management.ListenerNotFoundException; -import javax.management.MBeanServerConnection; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.ObjectName; -import javax.management.j2ee.ListenerRegistration; - -/** - * ListenerRegistration implementation. - */ -public class ListenerRegistrationImpl implements ListenerRegistration { - - /** - * Wrapped MBeanServer instance. - */ - transient private MBeanServerConnection connection = null; - - /** - * A ListenerRegistration object allows to ad/remove listeners to notifications emitted by - * MBeans which are registered in a remote MBeanServer. - * @param connection the remote MBean server - */ - public ListenerRegistrationImpl(final MBeanServerConnection connection) { - this.connection = connection; - } - - /** - * Add notification listener. - * @param name identifies the emitter MBean - * @param listener the listener to add - * @param filter the associated filter - * @param o the associated handback object - * @exception InstanceNotFoundException emitter MBean not registered in the MBeanServer - * @exception RemoteException operation failed - */ - public void addNotificationListener(final ObjectName name, - final NotificationListener listener, - final NotificationFilter filter, - final Object o) throws InstanceNotFoundException, - RemoteException { - try { - connection.addNotificationListener(name, listener, filter, o); - } catch (IOException e) { - throw new RemoteException(e.toString()); - } - } - /** - * Remove notification listener - * @param name identifies the emitter MBean - * @param listener the listener to remove - * @exception InstanceNotFoundException emitter MBean not registered in the MBeanServer - * @exception ListenerNotFoundException arg1 not registered as listener - * @exception RemoteException operation failed - */ - public void removeNotificationListener(final ObjectName name, - final NotificationListener listener) throws InstanceNotFoundException, - ListenerNotFoundException, - RemoteException { - try { - connection.removeNotificationListener(name, listener); - } catch (IOException e) { - throw new RemoteException(e.toString()); - } - } -} diff --git a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ManagementBean.java b/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ManagementBean.java deleted file mode 100644 index d09a72add3..0000000000 --- a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/ManagementBean.java +++ /dev/null @@ -1,298 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.mejb; - -import java.util.List; -import java.util.Set; - -import javax.ejb.Stateless; -import javax.ejb.RemoteHome; -import javax.management.Attribute; -import javax.management.AttributeList; -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.IntrospectionException; -import javax.management.InvalidAttributeValueException; -import javax.management.MBeanException; -import javax.management.MBeanInfo; -import javax.management.MBeanServerFactory; -import javax.management.ObjectName; -import javax.management.QueryExp; -import javax.management.ReflectionException; -import javax.management.MBeanServer; -import javax.management.j2ee.ListenerRegistration; -import javax.management.j2ee.ManagementHome; -import javax.annotation.PostConstruct; -import javax.annotation.security.RolesAllowed; - -import org.ow2.util.log.LogFactory; -import org.ow2.util.log.Log; - -/** - * This is the Management EJB implementation for JOnAS. - * A MEJB instance is created and deployed at JOnAS start time. - * It is registered in the ejb/mgmt naming subcontext. - * - * The current implementation allows access to managed resources registered in - * the current (local) MBean server via the standard management methods defined in the - * javax.management.j2ee.Management interface. - * - * @author Adriana Danes - * @author Vivek Lakshmanan - * @author Matt Wringe - */ -@Stateless(name="MEJB", - mappedName = "ejb/mgmt/MEJB") -@RemoteHome(ManagementHome.class) -@RolesAllowed({"mejb-admin", "mejb-user"}) -public class ManagementBean { - - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(ManagementBean.class); - - /** - * Connection to the current JOnAS server's MBean server. - */ - private MBeanServer mbeanServer = null; - - /** - * Get the MBeanServer local reference. - */ - @PostConstruct - public void init() { - // TODO : find a 'very better' way to retrieve the MBeanServer used by JOnAS - // Look if there is already a MBeanServer for JOnAS. - List mbeanServers = MBeanServerFactory.findMBeanServer(null); - if (mbeanServers.size() > 0) { - mbeanServer = (MBeanServer) mbeanServers.get(0); - } else { - // Should not be the case, but anyway ... - logger.debug("Cannot find the default MBeanServer for the platform, create a new one."); - mbeanServer = MBeanServerFactory.createMBeanServer(); - } - } - - /** - * Gets the value of a specific attribute of a named managed object. - * The managed object is identified by its object name. - * @param name The object name of the managed object from which the - * attribute is to be retrieved. - * @param attribute A String specifying the name of the attribute - * to be retrieved. - * @return The value of the retrieved attribute. - * @throws MBeanException Wraps an exception thrown by the managed - * object's getter. - * @throws AttributeNotFoundException The attribute specified is - * not accessible in the managed object. - * @throws InstanceNotFoundException The managed object specified is - * not registered in the MEJB. - * @throws ReflectionException An exception occurred when trying to - * invoke the getAttribute method of a Dynamic MBean - */ - public Object getAttribute(final ObjectName name, - final String attribute) throws MBeanException, - AttributeNotFoundException, - InstanceNotFoundException, - ReflectionException { - return mbeanServer.getAttribute(name, attribute); - } - - /** - * Enables the values of several attributes of a named managed object. - * The managed object is identified by its object name. - * @param name The object name of the managed object from which - * the attributes are retrieved. - * @param attributes A list of the attributes to be retrieved. - * @return The list of the retrieved attributes. - * @throws InstanceNotFoundException The managed object specified is - * not registered in the MEJB. - * @throws ReflectionException An exception occurred when trying to - * invoke the getAttributes method of a Dynamic MBean. - */ - public AttributeList getAttributes(final ObjectName name, - final String[] attributes) throws InstanceNotFoundException, - ReflectionException { - return mbeanServer.getAttributes(name, attributes); - } - - /** - * Returns the default domain name of this MEJB. - * @return the default domain name of this MEJB. - */ - public String getDefaultDomain() { - return mbeanServer.getDefaultDomain(); - } - - /** - * Returns the number of managed objects registered in the MEJB. - * @return the number of managed objects registered in the MEJB. - */ - public Integer getMBeanCount() { - return mbeanServer.getMBeanCount(); - } - - /** - * This method discovers the attributes and operations that a managed - * object exposes for management. - * @param name The name of the managed object to analyze - * @return An instance of {@link MBeanInfo} allowing the retrieval of - * all attributes and operations of this managed object. - * @throws IntrospectionException An exception occurs during introspection. - * @throws InstanceNotFoundException The managed object specified is - * not found. - * @throws ReflectionException An exception occurred when trying to - * perform reflection on a managed object - */ - public MBeanInfo getMBeanInfo(final ObjectName name) throws IntrospectionException, - InstanceNotFoundException, - ReflectionException { - return mbeanServer.getMBeanInfo(name); - } - - /** - * Invokes an operation on a managed object. - * @param name The object name of the managed object on which the - * method is to be invoked. - * @param operationName The name of the operation to be invoked. - * @param params An array containing the parameters to be set - * when the operation is invoked - * @param signature An array containing the signature of the operation. - * The class objects will be loaded using the same class loader - * as the one used for loading the managed object on which the - * operation was invoked. - * @return The object returned by the operation, which represents the - * result of invoking the operation on the managed object specified. - * @throws InstanceNotFoundException The managed object specified is not - * registered in the MEJB. - * @throws MBeanException Wraps an exception thrown by the managed - * object's invoked method. - * @throws ReflectionException Wraps a {@link Exception} thrown while - * trying to invoke the method. - */ - @RolesAllowed("mejb-admin") - public Object invoke(final ObjectName name, - final String operationName, - final Object[] params, - final String[] signature) throws MBeanException, - InstanceNotFoundException, - ReflectionException { - return mbeanServer.invoke(name, operationName, params, signature); - } - - /** - * Checks whether a managed object, identified by its object name, is - * already registered with the MEJB. - * @param name The object name of the managed object to be checked. - * @return True if the managed object is already registered in the MEJB, - * false otherwise. - */ - public boolean isRegistered(final ObjectName name) { - return mbeanServer.isRegistered(name); - } - - /** - * Gets the names of managed objects controlled by the MEJB. This method - * enables any of the following to be obtained: The names of all managed - * objects, the names of a set of managed objects specified by pattern - * matching on the {@link ObjectName}, a specific managed object name - * (equivalent to testing whether a managed object is registered). When - * the object name is null or no domain and key properties are specified, - * all objects are selected. It returns the set of J2EEObjectNames for - * the managed objects selected. - * @param name The object name pattern identifying the managed objects to - * be retrieved. If null or no domain and key properties are - * specified, all the managed objects registered will be retrieved. - * @param query a relational constraints for results filtering - * @return A set containing the ObjectNames for the managed objects selected. - * If no managed object satisfies the query, an empty set is returned. - */ - public Set queryNames(final ObjectName name, final QueryExp query) { - return mbeanServer.queryNames(name, query); - } - - /** - * Sets the value of a specific attribute of a named managed object. - * The managed object is identified by its object name. - * @param name The name of the managed object within which the - * attribute is to be set. - * @param attribute The identification of the attribute to be set - * and the value it is to be set to. - * @throws InstanceNotFoundException The managed object specified - * is not registered in the MEJB. - * @throws AttributeNotFoundException The attribute specified is - * not accessible in the managed object. - * @throws InvalidAttributeValueException The value specified for - * the attribute is not valid. - * @throws MBeanException Wraps an exception thrown by the managed - * object's setter. - * @throws ReflectionException An exception occurred when trying - * to invoke the setAttribute method of a Dynamic MBean. - */ - @RolesAllowed("mejb-admin") - public void setAttribute(final ObjectName name, - final Attribute attribute) throws MBeanException, - AttributeNotFoundException, - InstanceNotFoundException, - InvalidAttributeValueException, - ReflectionException { - mbeanServer.setAttribute(name, attribute); - } - - /** - * Sets the values of several attributes of a named managed - * object. The managed object is identified by its object name. - * @param name The object name of the managed object within - * which the attributes are to be set. - * @param attributes A list of attributes: The identification - * of the attributes to be set and the values they are - * to be set to. - * @return The list of attributes that were set, with their new values. - * @throws InstanceNotFoundException The managed object specified - * is not registered in the MEJB. - * @throws ReflectionException An exception occurred when trying - * to invoke the setAttributes method of a Dynamic MBean. - */ - @RolesAllowed("mejb-admin") - public AttributeList setAttributes(final ObjectName name, - final AttributeList attributes) throws InstanceNotFoundException, - ReflectionException { - return mbeanServer.setAttributes(name, attributes); - } - - /** - * Returns the listener registry implementation for this - * MEJB. The listener registry implements the methods that - * enable clients to add and remove event notification - * listeners managed objects - * @return An implementation of {@link ListenerRegistration} - */ - public ListenerRegistration getListenerRegistry() { - // TODO I suspect that the MBeanServer will not support ser/deser process ... - return new ListenerRegistrationImpl(mbeanServer); - } - -} diff --git a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagement.java b/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagement.java deleted file mode 100644 index 364856a85f..0000000000 --- a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagement.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.mejb; - -import javax.management.j2ee.Management; - -/** - * The XManagement is a fake interface introduced as a workaround for bug UTIL-45. - * - * @author Guillaume Sauthier - */ -public interface XManagement extends Management { -} diff --git a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagementHome.java b/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagementHome.java deleted file mode 100644 index cf9700ca48..0000000000 --- a/jonas/modules/ee-components/mejb/core/src/main/java/mejb/XManagementHome.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ee.mejb; - -import javax.management.j2ee.ManagementHome; - -/** - * The XManagementHome is a fake interface introduced as a workaround for bug UTIL-45. - * - * @author Guillaume Sauthier - */ -public interface XManagementHome extends ManagementHome { -} diff --git a/jonas/modules/ee-components/mejb/plans/pom.xml b/jonas/modules/ee-components/mejb/plans/pom.xml deleted file mode 100644 index 97a2959359..0000000000 --- a/jonas/modules/ee-components/mejb/plans/pom.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - mejb - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - mejb-plan - JOnAS :: EE Components :: MEJB :: Deployment plan - deployment-plan - - - - org.ow2.jonas - mejb-core - ${project.version} - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - true - - - org.ow2.jonas:mejb-core:jar - - - org.ow2.jonas:mejb-core:jar - - - org.ow2.jonas:mejb-core:jar - - - - - - \ No newline at end of file diff --git a/jonas/modules/ee-components/mejb/pom.xml b/jonas/modules/ee-components/mejb/pom.xml deleted file mode 100644 index dce5a1a12a..0000000000 --- a/jonas/modules/ee-components/mejb/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-ee-components - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - mejb - pom - JOnAS :: EE Components :: MEJB - - core - plans - - diff --git a/jonas/modules/ee-components/pom.xml b/jonas/modules/ee-components/pom.xml deleted file mode 100644 index 019a1eb979..0000000000 --- a/jonas/modules/ee-components/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ee-components - pom - JOnAS :: EE Components - - - jonas-ctxroot - jca - jonas-admin - mejb - - - diff --git a/jonas/modules/generators/jonas-genbase/pom.xml b/jonas/modules/generators/jonas-genbase/pom.xml deleted file mode 100644 index d5592e4705..0000000000 --- a/jonas/modules/generators/jonas-genbase/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - org.ow2.jonas - jonas-generators - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-generators-base - bundle - JOnAS :: Generators :: Base - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/GenBaseException.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/GenBaseException.java deleted file mode 100644 index 7c0ba73be1..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/GenBaseException.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase; - -/** - * This class represents the exception that can be throwned by the ClientStubGen tool. - * @author Guillaume Sauthier - */ -public class GenBaseException extends Exception { - - /** - * Constructs a GenBaseException with no specified detail message. - */ - public GenBaseException() { - super(); - } - - /** - * Constructs an GenBaseException with the specified detail message. - * @param msg Error message - */ - public GenBaseException(String msg) { - super(msg); - } - - /** - * Constructs an GenBaseException with the specified detail message. - * @param inner Cause Exception to wrap - */ - public GenBaseException(Exception inner) { - super(inner); - } - - /** - * Constructs an GenBaseException with the specified detail message. - * @param msg Error message - * @param inner Cause Exception to wrap - */ - public GenBaseException(String msg, Exception inner) { - super(msg, inner); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/NoJ2EEWebservicesException.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/NoJ2EEWebservicesException.java deleted file mode 100644 index 039e6d2a69..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/NoJ2EEWebservicesException.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genbase; - - - -/** - * Thrown By XMLUtils.newDocument() when DTD validated files are found. - * - * @author Guillaume Sauthier - */ -public class NoJ2EEWebservicesException extends GenBaseException { - - /** - * Constructs NoJ2EEWebservicesException. - */ - public NoJ2EEWebservicesException() { - super(); - } - - /** - * Constructs NoJ2EEWebservicesException. - * @param msg Exception message - */ - public NoJ2EEWebservicesException(String msg) { - super(msg); - } - - /** - * Constructs NoJ2EEWebservicesException. - * @param inner Inner Exception - */ - public NoJ2EEWebservicesException(Exception inner) { - super(inner); - } - - /** - * Constructs NoJ2EEWebservicesException. - * @param msg Message text - * @param inner Inner Exception - */ - public NoJ2EEWebservicesException(String msg, Exception inner) { - super(msg, inner); - } - -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/AbsArchive.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/AbsArchive.java deleted file mode 100644 index ac8530ed0f..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/AbsArchive.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.util.Hashtable; -import java.util.Map; -import java.util.jar.Manifest; - -import org.ow2.jonas.lib.util.I18n; - - -/** - * An AbsArchive centralized commonly used methods for Jar and - * File support. - * - * @author Guillaume Sauthier - */ -public abstract class AbsArchive implements Archive { - - /** i18n */ - private static I18n i18n = I18n.getInstance(AbsArchive.class); - - /** root File of the Archive */ - private File root; - - /** the archive Manifest */ - private Manifest manifest = null; - - /** map between name and files added in the archive */ - private Map files = null; - - /** - * Create a FileArchive where the root if the given file. - * - * @param file the directory base of the archive - */ - public AbsArchive(File file) { - root = file; - files = new Hashtable(); - } - - /** - * add the content of the given directory into the root of the archive. - * - * @param directory directory to add - */ - public void addDirectory(File directory) { - addDirectoryIn("", directory); - } - - /** - * add the content of the given directory into the given directory of the - * archive. - * - * @param dirName archive directory name. - * @param directory directory to add. - */ - public void addDirectoryIn(String dirName, File directory) { - File[] childs = directory.listFiles(); - - // directory exists ? - if (childs != null) { - for (int i = 0; i < childs.length; i++) { - if (childs[i].isFile()) { - // File - addFileIn(dirName, childs[i]); - } else { - // Directory - addDirectoryIn(dirName + childs[i].getName() + File.separator, childs[i]); - } - } - } - } - - /** - * add a lonely file into the root directory of the archive. - * - * @param file the file to be added. - */ - public void addFile(File file) { - addFileIn("", file); - } - - /** - * add a file into the root directory of the archive with a specified name. - * - * @param file the file to be added. - * @param name filename - */ - public void addFile(File file, String name) { - files.put(name, file); - } - - /** - * add a lonely file into the given directory of the archive. - * - * @param dirName archive directory name. - * @param file the file to be added. - */ - public void addFileIn(String dirName, File file) { - files.put(dirName + file.getName(), file); - } - - /** - * Returns the File corresponding to the root of the archive. - * - * @return the File corresponding to the root of the archive. - */ - public File getRootFile() { - return root; - } - - /** - * Returns the name of the Archive. - * - * @return the name of the Archive. - */ - public String getName() { - return root.getName(); - } - - /** - * @return Returns the manifest. - */ - public Manifest getManifest() { - if (manifest == null) { - manifest = new Manifest(); - } - return manifest; - } - /** - * @param manifest The manifest to set. - */ - public void setManifest(Manifest manifest) { - this.manifest = manifest; - } - /** - * @return Returns the i18n. - */ - public static I18n getI18n() { - return i18n; - } - /** - * @return Returns the files. - */ - public Map getFiles() { - return files; - } - - /** - * close this archive - */ - public void close() { - this.files = null; - this.manifest = null; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Application.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Application.java deleted file mode 100644 index 70aafb0286..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Application.java +++ /dev/null @@ -1,578 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; -import java.util.jar.Attributes; - -import javax.xml.parsers.ParserConfigurationException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ear.EarDeploymentDesc; -import org.ow2.jonas.deployment.ear.lib.EarDeploymentDescManager; -import org.ow2.jonas.deployment.ear.xml.Web; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.lib.loader.EjbJarClassLoader; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -/** - * Application is a wrapper around an ear (packaged as a jar or as an unpacked - * jar). - * - * @author Guillaume Sauthier - */ -public class Application extends J2EEArchive { - - /** list of embded clients archive. */ - private List clients; - - /** list of embded webapps archive. */ - private List webapps; - - /** list of embded ejbjars archive. */ - private List ejbjars; - - /** Application DeploymentDesc */ - private EarDeploymentDesc earDD = null; - - /** name to document map */ - private Map descriptors = new Hashtable(); - - /** application Descriptor */ - private Document app; - - /** EJB Jar ClassLoader */ - private URLClassLoader ejbCL = null; - - /** Common Libs ClassLoader */ - private URLClassLoader commonCL = null; - - /** libs path File */ - private List pathFiles; - - /** application archive filename */ - private String appFilename; - - private IDeployable deployable = null; - - /** - * Creates a new Application archive. - * - * @param archive the file containing the application archive. - * - * @throws GenBaseException When Init fails - */ - public Application(final Archive archive, final IDeployable deployable) throws GenBaseException { - super(archive); - this.appFilename = archive.getRootFile().getName(); - this.deployable = deployable; - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in Application"); - } - init(); - } - - /** - * Initialize the Application. Creates modules lists, unpack if not - * unpacked. - * - * @throws GenBaseException When application unpack fails or when Decriptors - * cannot be parsed or found. - */ - protected void init() throws GenBaseException { - - pathFiles = new Vector(); - - ejbjars = new Vector(); - webapps = new Vector(); - clients = new Vector(); - - // load META-INF/application.xml - try { - earDD = EarDeploymentDescManager.getDeploymentDesc((EARDeployable) deployable, Thread.currentThread().getContextClassLoader()); - } catch (DeploymentDescException dde) { - String err = getI18n().getMessage("Application.init.earDDExc", getArchive().getRootFile()); - throw new GenBaseException(err, dde); - } - - // add EjbJars - String[] ejbs = earDD.getEjbTags(); - - for (int i = 0; i < ejbs.length; i++) { - File ejbFile = new File(getRootFile(), ejbs[i]); - Archive ejbArch = null; - - if (ejbFile.isDirectory()) { - // Unpacked Jar - ejbArch = new FileArchive(ejbFile); - } else { - // Packed Jar - ejbArch = new JarArchive(ejbFile); - } - ejbjars.add(new EjbJar(ejbArch, this)); - - // add entries for Class-Path - addClassPathEntry(ejbArch); - } - - // add WebApps - Web[] webs = earDD.getWebTags(); - - for (int i = 0; i < webs.length; i++) { - File webFile = new File(getRootFile(), webs[i].getWebUri()); - Archive webArch = null; - - if (webFile.isDirectory()) { - // Unpacked Jar - webArch = new FileArchive(webFile); - } else { - // Packed Jar - webArch = new JarArchive(webFile); - } - webapps.add(new WebApp(webArch, this)); - } - - // add Clients - String[] clts = earDD.getClientTags(); - - for (int i = 0; i < clts.length; i++) { - File clientFile = new File(getRootFile(), clts[i]); - Archive clientArch = null; - - if (clientFile.isDirectory()) { - // Unpacked Jar - clientArch = new FileArchive(clientFile); - } else { - // Packed Jar - clientArch = new JarArchive(clientFile); - } - clients.add(new Client(clientArch, this)); - } - - // Create ear ClassLoader (from MANIFEST/Class-Path general entry) - setModuleClassloader(createEARClassLoader()); - - // Create EJB ClassLoader - ejbCL = createEJBClassLoader(); - - loadDescriptors(); - } - - /** - * Load Deployment Descriptor of an Application. - * - * @throws GenBaseException When parsing of application.xml fails - */ - protected void loadDescriptors() throws GenBaseException { - - InputStream is = null; - - try { - is = getApplicationInputStream(); - } catch (IOException e) { - throw new GenBaseException("Cannot get inputstream", e); - } - - if (is == null) { - this.app = XMLUtils.newApplication(); - return; - } - - try { - app = XMLUtils.newDocument(is, "META-INF/application.xml", isDTDsAllowed()); - } catch (SAXException saxe) { - String err = getI18n().getMessage("Application.loadDescriptors.parseError"); - throw new GenBaseException(err, saxe); - } catch (ParserConfigurationException pce) { - String err = getI18n().getMessage("Application.loadDescriptors.prepare"); - throw new GenBaseException(err, pce); - } catch (IOException ioe) { - String err = getI18n().getMessage("Application.loadDescriptors.parseError"); - throw new GenBaseException(err, ioe); - } - - descriptors.put("META-INF/application.xml", app); - } - - /** - * Initialize the Archive. - * @throws GenBaseException When initialization fails. - */ - @Override - public void initialize() throws GenBaseException { - - // init ejbjars - for (Iterator i = ejbjars.iterator(); i.hasNext();) { - EjbJar ejb = (EjbJar) i.next(); - ejb.initialize(); - } - - // init webapps - for (Iterator i = webapps.iterator(); i.hasNext();) { - WebApp web = (WebApp) i.next(); - web.initialize(); - } - - // init clients - for (Iterator i = clients.iterator(); i.hasNext();) { - Client client = (Client) i.next(); - client.initialize(); - } - - } - - /** - * Returns the name of the Archive. Overrides J2EEArchive.getName(); - * - * @see org.ow2.jonas.generators.genbase.archive.J2EEArchive#getName() - * - * @return the name of the Archive. - */ - @Override - public String getName() { - return appFilename; - } - - /** - * Construct a ClassLoader for EJBs inside an application. - * - * @return the Ejb-Jar ClassLoader - * - * @throws GenBaseException When URLClassLoader cannot be created. - */ - private URLClassLoader createEJBClassLoader() throws GenBaseException { - - URL[] urls = new URL[pathFiles.size() + ejbjars.size()]; - int index = 0; - for (Iterator i = pathFiles.iterator(); i.hasNext(); index++) { - File f = (File) i.next(); - try { - urls[index] = f.toURL(); - } catch (IOException ioe) { - String err = "Cannot convert " + f + " to URL."; - throw new GenBaseException(err, ioe); - } - } - - for (Iterator i = ejbjars.iterator(); i.hasNext(); index++) { - try { - urls[index] = ((EjbJar) i.next()).getRootFile().toURL(); - } catch (IOException ioe) { - String err = "Cannot transform as a URL : " + ioe.getMessage(); - throw new GenBaseException(err, ioe); - } - } - - try { - return new EjbJarClassLoader(urls, getModuleClassloader()); - } catch (IOException ioe) { - String err = "Cannot create EjbJarClassLoader"; - throw new GenBaseException(err, ioe); - } - - } - - /** - * Construct a ClassLoader for the application. - * - * @return the Application ClassLoader - * - * @throws GenBaseException When URLClassLoader cannot be created. - */ - private URLClassLoader createEARClassLoader() throws GenBaseException { - - // find parent ClassLoader - ClassLoader parent = Thread.currentThread().getContextClassLoader(); - - // get Manifest Attributes if any - String classpath = getManifest().getMainAttributes().getValue(Attributes.Name.CLASS_PATH); - URL[] urls = new URL[0]; - if (classpath != null) { - // Lookup specified files. - String[] paths = classpath.split(" "); - urls = new URL[paths.length]; - for (int i = 0; i < paths.length; i++) { - try { - URL path = new File(getRootFile(), paths[i]).toURL(); - urls[i] = path; - } catch (IOException ioe) { - String err = "Cannot transform '" + paths[i] + "' as a URL"; - throw new GenBaseException(err, ioe); - } - } - } - - return new URLClassLoader(urls, parent); - } - - /** - * Search the given Archive for ClassPath Manifest entry and add the entries - * in the EAR classpath. - * - * @param a the Archive to explore - * - * @throws GenBaseException When a path cannot be added in the EAR classpath. - */ - private void addClassPathEntry(final Archive a) throws GenBaseException { - // get Manifest Attributes if any - String classpath = a.getManifest().getMainAttributes().getValue(Attributes.Name.CLASS_PATH); - - if (classpath != null) { - // Lookup specified files. - String[] paths = classpath.split(" "); - for (int i = 0; i < paths.length; i++) { - try { - File path = new File(a.getRootFile().getParentFile(), paths[i]).getCanonicalFile(); - if (path.exists() && !pathFiles.contains(path)) { - pathFiles.add(path); - } - } catch (IOException ioe) { - String err = "Cannot add in EAR classpath :" + paths[i]; - throw new GenBaseException(err, ioe); - } - } - - } - - } - - /** - * Returns the Document of the application.xml file. - * - * @return the Document of the application.xml file. - */ - public Document getApplicationDoc() { - return app; - } - - /** - * Returns the InputStream of the application.xml file. - * - * @return the InputStream of the application.xml file. - * - * @throws IOException When InputStream of application.xml cannot be - * returned - */ - public InputStream getApplicationInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("META-INF/application.xml"); - } else { - is = getInputStream("META-INF" + File.separator + "application.xml"); - } - - return is; - } - - /** - * Add a new EjbJar in the Application. - * - * @param ejbjar the added EjbJar - */ - public void addEjbJar(final EjbJar ejbjar) { - ejbjars.add(ejbjar); - // add module in application.xml - XMLUtils.addEjb(app, ejbjar); - } - - /** - * Add a new Client in the Application. - * - * @param client the added Client - */ - public void addClient(final Client client) { - clients.add(client); - // add module in application.xml - XMLUtils.addClient(app, client); - } - - /** - * Add a new WebApp in the Application. - * - * @param webapp the added webapp - * @param context context of the webapp - */ - public void addWebApp(final WebApp webapp, final String context) { - if (!XMLUtils.isWebModuleAlreadyDeclared(app, webapp.getName())) { - // the web module is not already declared - webapps.add(webapp); - // add module in application.xml - XMLUtils.addWebApp(app, webapp, context); - } - // use latest file - addFile(webapp.getRootFile(), webapp.getName()); - } - - /** - * Returns the Iterator of EjbJar contained in this Application. - * - * @return the Iterator of EjbJar contained in this Application. - */ - public Iterator getEjbJars() { - return ejbjars.iterator(); - } - - /** - * Returns the Iterator of WebApp contained in this Application. - * - * @return the Iterator of WebApp contained in this Application. - */ - public Iterator getWebApps() { - return webapps.iterator(); - } - - /** - * Returns the Iterator of WebApp contained in this Application. - * - * @return the Iterator of WebApp contained in this Application. - */ - public Iterator getClients() { - return clients.iterator(); - } - - /** - * Returns the ClassLoader of this ear archive. - * - * @return the ClassLoader of this ear archive. - */ - public URLClassLoader getEARClassLoader() { - return commonCL; - } - - /** - * Returns the ClassLoader of the ejbs within this archive. - * - * @return the ClassLoader of the ejbs within this archive. - */ - public URLClassLoader getEJBClassLoader() { - return ejbCL; - } - - /** - * Returns a Map of name to Document for each modified Descriptor of the - * archive. - * - * @return a Map of name to Document - */ - @Override - public Map getDescriptors() { - return descriptors; - } - - /** - * Returns true if filename must be omitted in the archive. - * - * @param name filename to be tested - * - * @return true if filename must be omitted. - */ - @Override - public boolean omit(final String name) { - return (name.equals("META-INF/application.xml") || name.equals("META-INF\\application.xml")); - } - - /** - * @param clients The clients to set. - */ - public void setClients(final List clients) { - this.clients = clients; - } - - /** - * @param ejbjars The ejbjars to set. - */ - public void setEjbjars(final List ejbjars) { - this.ejbjars = ejbjars; - } - - /** - * @param webapps The webapps to set. - */ - public void setWebapps(final List webapps) { - this.webapps = webapps; - } - - /** - * @return Returns the app. - */ - public Document getApp() { - return app; - } - - /** - * Close this archive - */ - @Override - public void close() { - super.close(); - // Remove ear deployment desc - earDD = null; - // reset fields - descriptors = null; - app = null; - ejbCL = null; - commonCL = null; - pathFiles = null; - - // reset - for (Iterator i = getEjbJars(); i.hasNext();) { - EjbJar ejbjar = (EjbJar) i.next(); - ejbjar.close(); - } - - // fill webapp list - for (Iterator i = getWebApps(); i.hasNext();) { - WebApp webapp = (WebApp) i.next(); - webapp.close(); - } - - // fill client list - for (Iterator i = getClients(); i.hasNext();) { - Client client = (Client) i.next(); - client.close(); - } - - // reset internal lists - clients = null; - webapps = null; - ejbjars = null; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Archive.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Archive.java deleted file mode 100644 index 47106f198e..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Archive.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.jar.Manifest; - -/** - * An Archive is a Wrapper around a Jar file (ear, war, jar) or - * around a directory structured lik a Jar file (unpacked jar file for example). - * - * @author Guillaume Sauthier - */ -public interface Archive { - - /** - * add the content of the given directory into the root of the archive. - * - * @param directory directory to add - */ - void addDirectory(File directory); - - /** - * add the content of the given directory into the given directory of the - * archive. - * - * @param dirName archive directory name. - * @param directory directory to add. - */ - void addDirectoryIn(String dirName, File directory); - - /** - * add a lonely file into the root directory of the archive. - * - * @param file the file to be added. - */ - void addFile(File file); - - /** - * add a file into the root directory of the archive with a specified name. - * - * @param file the file to be added. - * @param name filename - */ - void addFile(File file, String name); - - /** - * add a lonely file into the given directory of the archive. - * - * @param dirName archive directory name. - * @param file the file to be added. - */ - void addFileIn(String dirName, File file); - - /** - * Returns the File corresponding to the root of the archive. - * - * @return the File corresponding to the root of the archive. - */ - File getRootFile(); - - /** - * Returns the Manifest of the Archive. - * - * @return the Manifest of the Archive. - */ - Manifest getManifest(); - - /** - * Returns an InputStream corresponding to the given filename. - * - * @param filename file name source of the InputStream - * - * @return the InputStream corresponding to the given filename. - * - * @throws IOException When InputStream cannot be retrieved for filename. - */ - InputStream getInputStream(String filename) throws IOException; - - /** - * Returns a List of all files contained in this archive. Original files in - * jar, added Files are all included as String in this Enumeration. - * - * @return a List of all files contained in this archive. - */ - List getContainedFiles(); - - /** - * Returns true if archive is packed or false if archive is unpacked. - * - * @return true if archive is packed or false if archive is unpacked. - */ - boolean isPacked(); - - /** - * Returns the name of the Archive. - * - * @return the name of the Archive. - */ - String getName(); - - /** - * Close this archive - * @throws IOException if close fail - */ - void close() throws IOException; -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Client.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Client.java deleted file mode 100644 index 0c58075f34..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Client.java +++ /dev/null @@ -1,336 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Vector; -import java.util.jar.Attributes; - -import javax.xml.parsers.ParserConfigurationException; - - - -import org.objectweb.util.monolog.api.BasicLevel; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDesc; -import org.ow2.jonas.deployment.client.lib.ClientDeploymentDescManager; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.lib.loader.ClientClassLoader; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -/** - * Client represnets a J2EE Client Archive. - * - * @author Guillaume Sauthier - */ -public class Client extends J2EEArchive implements EjbRefModule, WsClient { - - /** Container application (can be null) */ - private Application app = null; - - /** Client Deployment Desc */ - private ClientContainerDeploymentDesc clientDD = null; - - /** service-ref list */ - private List sRefs; - - /** - * ejb-ref list - */ - private List ejbRefs; - - /** jonas client descriptors */ - private Map descriptors; - - /** - * jonas-client.xml - */ - private Document jclientDoc; - - /** - * Create a new Client not contained in Application - * - * @param archive the archive file - * - * @throws GenBaseException When Init fails. - */ - public Client(Archive archive) throws GenBaseException { - super(archive); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in Client"); - } - init(); - } - - /** - * Create a new Client contained in Application - * - * @param archive the archive file - * @param app the container Application - * - * @throws GenBaseException When Init fails - */ - public Client(Archive archive, Application app) throws GenBaseException { - super(archive); - setApplication(app); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in Client"); - } - init(); - } - - /** - * Initialize the Client module. - * - * @throws GenBaseException When client classloader cannot be created or when - * client deployment desc cannot be parsed. - */ - private void init() throws GenBaseException { - loadDescriptors(); - } - - /** - * Load Deployment Descriptor of a Client. - * - * @throws GenBaseException when jonas-client.xml cannot be parsed - */ - private void loadDescriptors() throws GenBaseException { - - descriptors = new Hashtable(); - InputStream jcis = null; - try { - jcis = getJonasClientInputStream(); - if (jcis != null) { - jclientDoc = XMLUtils.newDocument(jcis, "META-INF/jonas-client.xml", isDTDsAllowed()); - descriptors.put("META-INF/jonas-client.xml", jclientDoc); - } - } catch (SAXException saxe) { - String err = getI18n().getMessage("Client.loadDescriptors.parseError"); - throw new GenBaseException(err, saxe); - } catch (ParserConfigurationException pce) { - String err = getI18n().getMessage("Client.loadDescriptors.prepare"); - throw new GenBaseException(err, pce); - } catch (IOException ioe) { - String err = getI18n().getMessage("Client.loadDescriptors.parseError"); - throw new GenBaseException(err, ioe); - } - } - - /** - * Set the container application. - * - * @param app the container application. - */ - public void setApplication(Application app) { - this.app = app; - } - - /** - * Returns the container application (can be null). - * - * @return the container application (can be null). - */ - public Application getApplication() { - return app; - } - - /** - * Returns the list of service-ref elements contained by a module. - * - * @return the list of service-ref elements contained by a module. - */ - public List getServiceRefDescs() { - return sRefs; - } - - /** - * add *.class from directory in the archive. - * - * @param classes directory with classes. - */ - public void addClasses(File classes) { - addDirectory(classes); - } - - /** - * Returns a Map of name to Document for each modified Descriptor of the - * archive. - * - * @return a Map of name to Document - */ - public Map getDescriptors() { - return descriptors; - } - - /** - * Returns true if filename must be omitted in the archive. - * - * @param name filename to be tested - * - * @return true if filename must be omitted. - */ - public boolean omit(String name) { - return (name.equals("META-INF/jonas-client.xml") || name.equals("META-INF\\jonas-client.xml")); - } - - /** - * Returns the Document of the jonas-client.xml file. - * - * @return the Document of the jonas-client.xml file. - */ - public Document getJonasClientDoc() { - return jclientDoc; - } - - /** - * Returns the InputStream of the jonas-client.xml file. - * - * @return the InputStream of the jonas-client.xml file. - * - * @throws IOException When InputStream of jonas-client.xml cannot be - * returned. - */ - public InputStream getJonasClientInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("META-INF/jonas-client.xml"); - } else { - is = getInputStream("META-INF" + File.separator + "jonas-client.xml"); - } - - return is; - } - - /** - * Initialize the Archive. - * @throws GenBaseException When initialization fails. - */ - public void initialize() throws GenBaseException { - // if client in application, clientClassLoader includes ejbClassLoader too - - try { - if (app == null) { - // simple client case - setModuleClassloader(new ClientClassLoader(getArchive().getRootFile().toURL(), Thread.currentThread() - .getContextClassLoader())); - } else { - // embedded client case - setModuleClassloader(createClientClassLoaderWithinApplication(getApplication().getEJBClassLoader())); - } - } catch (IOException ioe) { - String err = getI18n().getMessage("Client.init.loader", getArchive().getRootFile()); - throw new GenBaseException(err, ioe); - } - - try { - clientDD = ClientDeploymentDescManager.getInstance(getRootFile().getAbsolutePath(), getModuleClassloader()); - } catch (DeploymentDescException dde) { - throw new GenBaseException(dde); - } - - // we want a List of service-ref - sRefs = new Vector(); - IServiceRefDesc[] refs = clientDD.getServiceRefDesc(); - for (int i = 0; i < refs.length; i++) { - sRefs.add(refs[i]); - } - - // List of ejb-refs - ejbRefs = new Vector(); - IEJBRefDesc[] refDesc = clientDD.getEjbRefDesc(); - - for (int i = 0; i < refDesc.length; i++) { - ejbRefs.add(refDesc[i]); - } - - } - - private ClientClassLoader createClientClassLoaderWithinApplication(ClassLoader parent) throws GenBaseException { - - // get Manifest Attributes if any - String classpath = getManifest().getMainAttributes().getValue(Attributes.Name.CLASS_PATH); - // Minimal array siez: 1 item, the client jar file itself - URL[] urls = new URL[1]; - if (classpath != null) { - // Lookup specified files. - String[] paths = classpath.split(" "); - urls = new URL[paths.length + 1]; - for (int i = 0; i < paths.length; i++) { - try { - URL path = new File(app.getRootFile(), paths[i]).toURL(); - urls[i] = path; - } catch (IOException ioe) { - String err = "Cannot transform '" + paths[i] + "' as a URL"; - throw new GenBaseException(err, ioe); - } - } - } - - - ClientClassLoader ccl = null; - try { - urls[urls.length - 1] = getArchive().getRootFile().toURL(); - ccl = new ClientClassLoader(urls, parent); - } catch (IOException e) { - String err = "Cannot create Client ClassLoader for " + getArchive().getName(); - throw new GenBaseException(err, e); - } - - return ccl; - } - - /** - * Returns the list of ejb-ref elements contained by a module. - * @return the list of ejb-ref elements contained by a module. - */ - public List getEjbRefDescs() { - return ejbRefs; - } - - /** - * Close this archive - */ - public void close() { - super.close(); - ejbRefs = null; - clientDD = null; - app = null; - descriptors = null; - jclientDoc = null; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyApplication.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyApplication.java deleted file mode 100644 index 765f3def51..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyApplication.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Vector; -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; - -/** - * DummyApplication is a wrapper for auto generated application archive. - * - * @author Guillaume Sauthier - */ -public class DummyApplication extends Application { - - /** application filename */ - private String name; - - /** - * Creates a new Application archive. - * - * @param name the file containing the application archive. - * - * @throws GenBaseException When Init fails - */ - public DummyApplication(final String name) throws GenBaseException { - super(createFileArchive(), null); - this.name = name; - init(); - } - - /** - * Create a new FileArchive - * - * @return a new Archive - * - * @throws GenBaseException When Archive creation fails. - */ - private static Archive createFileArchive() throws GenBaseException { - TempRepository tr = TempRepository.getInstance(); - - try { - File tmp = tr.createDir(); - File meta = new File(tmp, "META-INF"); - meta.mkdirs(); - - File manifest = new File(meta, "MANIFEST.MF"); - - Manifest mf = new Manifest(); - mf.getMainAttributes().putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0"); - - OutputStream os = new FileOutputStream(manifest); - mf.write(os); - os.flush(); - os.close(); - - // Provide the basis for application.xml - File application = new File(meta, "application.xml"); - InputStream is = DummyApplication.class.getResourceAsStream("application.xml"); - if (is == null) { - throw new GenBaseException("Cannot load 'application.xml' template."); - } - FileUtils.dump(is, application); - - // Close stream - is.close(); - - return new FileArchive(tmp); - } catch (IOException ioe) { - throw new GenBaseException(ioe); - } catch (FileUtilsException fue) { - throw new GenBaseException(fue); - } - } - - /** - * Initialize the DummyApplication. Creates modules lists. Overriddes - * Application.init() behavior - * - * @throws GenBaseException When Descriptor cannot be parsed. - */ - protected void init() throws GenBaseException { - // remove dummy modules - setEjbjars(new Vector()); - setWebapps(new Vector()); - setClients(new Vector()); - - loadDescriptors(); - - XMLUtils.cleanDummyApplication(getApp()); - - } - - /** - * @return Returns the DummyApplication filename. - */ - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyWebApp.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyWebApp.java deleted file mode 100644 index a7b3c2e60d..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/DummyWebApp.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; - -/** - * DummyWebApp is a wrapper for auto generated webapp archive. - * - * @author Guillaume Sauthier - */ -public class DummyWebApp extends WebApp { - - /** webapp name */ - private String name; - - /** - * Creates a new DummyWebApp archive. - * - * @param app the file containing the webapp archive. - * @param name webapp filename - * - * @throws GenBaseException when archive creation fails. - */ - public DummyWebApp(Application app, String name) throws GenBaseException { - super(createFileArchive(), app); - this.name = name; - } - - /** - * Create a new FileArchive - * - * @return a new Archive - * - * @throws GenBaseException When Archive creation fails. - */ - private static Archive createFileArchive() throws GenBaseException { - TempRepository tr = TempRepository.getInstance(); - - try { - File tmp = tr.createDir(); - File meta = new File(tmp, "META-INF"); - meta.mkdirs(); - - File web = new File(tmp, "WEB-INF"); - web.mkdirs(); - - File manifest = new File(meta, "MANIFEST.MF"); - - Manifest mf = new Manifest(); - mf.getMainAttributes().putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0"); - - OutputStream os = new FileOutputStream(manifest); - mf.write(os); - os.flush(); - os.close(); - - // Provide the basis for web.xml - File webXml = new File(web, "web.xml"); - InputStream wis = DummyWebApp.class.getResourceAsStream("web.xml"); - if (wis == null) { - throw new GenBaseException("Cannot load 'web.xml' template."); - } - FileUtils.dump(wis, webXml); - - // Close stream - wis.close(); - - //Load context.xml, used by Tomcat to determine security realm to use (if any) - // Provide the basis for context.xml - File context = new File(meta, "context.xml"); - InputStream cis = DummyWebApp.class.getResourceAsStream("context.xml"); - if (cis == null) { - throw new GenBaseException("Cannot load 'context.xml' template."); - } - FileUtils.dump(cis, context); - // Close stream - cis.close(); - - //Load web-jetty.xml, used by Jetty to determine security realm to use (if any) - // Provide the basis for web-jetty.xml - File jetty = new File(web, "web-jetty.xml"); - InputStream jis = DummyWebApp.class.getResourceAsStream("web-jetty.xml"); - if (jis == null) { - throw new GenBaseException("Cannot load 'web-jetty.xml' template."); - } - FileUtils.dump(jis, jetty); - // Close stream - jis.close(); - - - return new FileArchive(tmp); - } catch (IOException ioe) { - throw new GenBaseException(ioe); - } catch (FileUtilsException fue) { - throw new GenBaseException(fue); - } - } - - /** - * @return Returns the DummyApplication filename. - */ - public String getName() { - return name; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Ejb.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Ejb.java deleted file mode 100644 index eb96ffa5a6..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/Ejb.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.util.List; -import java.util.Vector; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.w3c.dom.Element; - - - - -/** - * Ejb represent a Bean in an EjbJar. - * @author Guillaume Sauthier - */ -public class Ejb implements EjbRefModule, WsClient { - - /** - * service-ref list - */ - private List sRefs; - - /** - * ejb-ref list - */ - private List ejbRefs; - - /** - * bean name - */ - private String name; - - /** - * jonas- element (session, entity, message) - */ - private Element jbean; - - /** - * Creates a new Ejb from a BeanDesc - * @param bd the BeanDesc - * @param bean jonas specific bean Element - * (jonas-session/jonas-entity/jonas-message-driven) - */ - public Ejb(BeanDesc bd, Element bean) { - // get name - name = bd.getEjbName(); - - // store jonas informations - jbean = bean; - - // we want a List of service-ref - sRefs = new Vector(); - - IServiceRefDesc[] refs = bd.getServiceRefDesc(); - - for (int i = 0; i < refs.length; i++) { - sRefs.add(refs[i]); - } - - // List of ejb-refs - ejbRefs = new Vector(); - IEJBRefDesc[] refDesc = bd.getEjbRefDesc(); - - for (int i = 0; i < refDesc.length; i++) { - ejbRefs.add(refDesc[i]); - } - } - - /** - * Returns the list of service-ref elements contained by a module. - * @return the list of service-ref elements contained by a module. - */ - public List getServiceRefDescs() { - return sRefs; - } - - - /** - * Returns the list of ejb-ref elements contained by a module. - * @return the list of ejb-ref elements contained by a module. - */ - public List getEjbRefDescs() { - return ejbRefs; - } - - /** - * Returns the bean name. - * @return the bean name. - */ - public String getName() { - return name; - } - - /** - * Returns the bean element. - * @return the bean element. - */ - public Element getJonasBeanElement() { - return jbean; - } - - /** - * Close this archive - */ - public void close() { - sRefs = null; - ejbRefs = null; - name = null; - jbean = null; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbJar.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbJar.java deleted file mode 100644 index dceb203729..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbJar.java +++ /dev/null @@ -1,397 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.xml.parsers.ParserConfigurationException; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.DeploymentDesc; -import org.ow2.jonas.deployment.ejb.lib.EjbDeploymentDescManager; -import org.ow2.jonas.deployment.ws.WSDeploymentDesc; -import org.ow2.jonas.deployment.ws.lib.WSDeploymentDescManager; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.lib.loader.EjbJarClassLoader; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.SAXException; - - - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * EjbJar represents an EjbJar J2EE Archive. - * - * @author Guillaume Sauthier - */ -public class EjbJar extends J2EEArchive implements WsEndpoint { - - /** Application containing the ejbjar */ - private Application app; - - /** WebServices deployment descriptor */ - private WSDeploymentDesc wsDD = null; - - /** EjbJar deployment descriptor */ - private DeploymentDesc ejbDD = null; - - /** inner EJBs List */ - private List ejbs; - - /** descriptors list */ - private Map descriptors; - - /** jonas-ejb-jar document */ - private Document jEjbJar; - - /** jonas-webservices document */ - private Document jWebservices = null; - - /** - * Create a new EjbJar not contained in Application - * - * @param archive - * the archive file - * - * @throws GenBaseException - * When init fails - */ - public EjbJar(Archive archive) throws GenBaseException { - super(archive); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in EjbJar"); - } - init(); - } - - /** - * Create a new EjbJar contained in Application - * - * @param archive - * the archive file - * @param app - * container application - * - * @throws GenBaseException - * When init fails - */ - public EjbJar(Archive archive, Application app) throws GenBaseException { - super(archive); - setApplication(app); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in EjbJar"); - } - init(); - } - - /** - * Initialize the EjbJar module. - * - * @throws GenBaseException - * When ejb classlaoder cannot be created or when Descriptor - * cannot be loaded. - */ - private void init() throws GenBaseException { - loadDescriptors(); - } - - - /** - * Initialize the Archive. - * @throws GenBaseException When initialization fails. - */ - public void initialize() throws GenBaseException { - - try { - if (app == null) { - // simple ejb case - setModuleClassloader(new EjbJarClassLoader(new URL[] {getArchive() - .getRootFile().toURL()}, Thread.currentThread() - .getContextClassLoader())); - } else { - // embedded ejb case - setModuleClassloader(app.getEJBClassLoader()); - } - } catch (IOException ioe) { - String err = getI18n().getMessage("EjbJar.init.loader", getArchive() - .getRootFile()); - throw new GenBaseException(err, ioe); - } - - try { - ejbDD = EjbDeploymentDescManager.getDeploymentDesc(getRootFile() - .getAbsolutePath(), getModuleClassloader()); - } catch (DeploymentDescException dde) { - throw new GenBaseException(dde); - } - - try { - wsDD = WSDeploymentDescManager.getDeploymentDesc(getRootFile() - .getAbsolutePath(), getModuleClassloader()); - } catch (DeploymentDescException dde) { - throw new GenBaseException(dde); - } - - // create inner EJBs - ejbs = new Vector(); - - BeanDesc[] bd = ejbDD.getBeanDesc(); - - for (int i = 0; i < bd.length; i++) { - Element jElement = null; - if (jEjbJar != null) { - jElement = XMLUtils.getBeanElement(jEjbJar.getDocumentElement(), bd[i].getEjbName()); - } - ejbs.add(new Ejb(bd[i], jElement)); - } - - } - - - /** - * Load Deployment Descriptor of an EjbJar. - * - * @throws GenBaseException - * When parsing fails - */ - private void loadDescriptors() throws GenBaseException { - InputStream jonasEJBXMLIS = null; - InputStream isJws = null; - try { - - jonasEJBXMLIS = getJonasEjbJarInputStream(); - if (jonasEJBXMLIS != null) { - jEjbJar = XMLUtils.newDocument(jonasEJBXMLIS, "META-INF/jonas-ejb-jar.xml", isDTDsAllowed()); - } - - isJws = getJonasWebservicesInputStream(); - if (isJws != null) { - jWebservices = XMLUtils.newDocument(isJws, - "META-INF/jonas-webservices.xml", isDTDsAllowed()); - } - - } catch (SAXException saxe) { - String err = getI18n().getMessage("EjbJar.loadDescriptors.parseError"); - throw new GenBaseException(err, saxe); - } catch (ParserConfigurationException pce) { - String err = getI18n().getMessage("EjbJar.loadDescriptors.prepare"); - throw new GenBaseException(err, pce); - } catch (IOException ioe) { - String err = getI18n().getMessage("EjbJar.loadDescriptors.parseError"); - throw new GenBaseException(err, ioe); - } - - descriptors = new Hashtable(); - if (jEjbJar != null) { - descriptors.put("META-INF/jonas-ejb-jar.xml", jEjbJar); - } - } - - /** - * Returns the List of Ejb contained in this EjbJar. - * - * @return the List of Ejb contained in this EjbJar. - */ - public List getEjbs() { - return ejbs; - } - - /** - * Returns the list of webservice-description elements contained by a - * module. - * - * @return the list of webservice-description elements contained by a - * module. - */ - public List getServiceDescs() { - if (wsDD != null) { - return wsDD.getServiceDescs(); - } else { - return new Vector(); - } - } - - /** - * Add *.class from directory in the archive. - * - * @param classes - * directory containing classes files. - */ - public void addClasses(File classes) { - addDirectory(classes); - } - - /** - * @return Returns the desired war filename (jonas-webservices/war) - */ - public String getWarName() { - if (wsDD != null) { - return wsDD.getWarFile(); - } else { - return null; - } - } - - /** - * @return Returns the desired context-root (jonas-webservices/context-root) - */ - public String getContextRoot() { - // compute context root name from ejbjar name - String archiveName = this.getArchive().getName(); - String root = null; - if (archiveName.toLowerCase().endsWith(".jar")) { - root = archiveName.toLowerCase().substring(0, archiveName.length() - ".jar".length()); - } else { - root = archiveName; - } - if (wsDD != null) { - String croot = wsDD.getContextRoot(); - if (croot != null) { - root = croot; - } - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Computed context root : " + root); - } - return root; - } - - /** - * Set the container application of this EjbJar - * - * @param app - * container application - */ - public void setApplication(Application app) { - this.app = app; - } - - /** - * Return the container application of this EjbJar - * - * @return the container application of this EjbJar - */ - public Application getApplication() { - return app; - } - - /** - * Returns a Map of name to Document for each modified Descriptor of the - * archive. - * - * @return a Map of name to Document - */ - public Map getDescriptors() { - return descriptors; - } - - /** - * Returns true if filename must be omitted in the archive. - * - * @param name - * filename to be tested - * - * @return true if filename must be omitted. - */ - public boolean omit(String name) { - return (name.equals("META-INF/jonas-ejb-jar.xml") - || name.equals("META-INF\\jonas-ejb-jar.xml")); - } - - /** - * Returns the Document of the jonas-ejb-jar.xml file. - * - * @return the Document of the jonas-ejb-jar.xml file. - */ - public Document getJonasEjbJarDoc() { - return jEjbJar; - } - - /** - * Return the Document of the the jonas-webservices.xml - * - * @return the Document of the jonas-webservices.xml file - */ - public Document getJonasWebservicesDoc() { - return jWebservices; - } - - /** - * Returns the InputStream of the jonas-ejb-jar.xml file. - * - * @return the InputStream of the jonas-ejb-jar.xml file. - * - * @throws IOException if stream is invalid - */ - public InputStream getJonasEjbJarInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("META-INF/jonas-ejb-jar.xml"); - } else { - is = getInputStream("META-INF" + File.separator - + "jonas-ejb-jar.xml"); - } - - // may be null (optional entry) - return is; - } - - /** - * Returns the InputStream of the jonas-webservices.xml file. - * - * @return the InputStream of the jonas-webservices.xml file. - * @throws IOException When InputStream of jonas-webservices.xml cannot be returned - */ - public InputStream getJonasWebservicesInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("META-INF/jonas-webservices.xml"); - } else { - is = getInputStream("META-INF" + File.separator - + "jonas-webservices.xml"); - } - return is; - } - - - - - -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbRefModule.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbRefModule.java deleted file mode 100644 index c70876d9c4..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/EjbRefModule.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genbase.archive; - -import java.util.List; - -/** - * Represents an element which has ejb-ref (client, ejb, webapp) - * @author Florent Benoit - */ -public interface EjbRefModule { - - /** - * Returns the list of ejb-ref elements contained by a module. - * @return the list of ejb-ref elements contained by a module. - */ - List getEjbRefDescs(); -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/FileArchive.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/FileArchive.java deleted file mode 100644 index c072ec15b3..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/FileArchive.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.Vector; -import java.util.jar.Manifest; - -import org.ow2.jonas.generators.genbase.GenBaseException; - - - -/** - * A FileArchive is a wrapper for directory structured as a jar. - * - * @author Guillaume Sauthier - */ -public class FileArchive extends AbsArchive { - - /** - * Creates a new FileArchive object. - * - * @param archive directory structured as a jar - * - * @throws GenBaseException When manifest cannot be loaded - */ - public FileArchive(File archive) throws GenBaseException { - super(archive); - - try { - File mf = new File(archive, "META-INF" + File.separator + "MANIFEST.MF"); - - if (mf.exists()) { - InputStream is = new FileInputStream(mf); - setManifest(new Manifest(is)); - is.close(); - } else { - setManifest(new Manifest()); - } - } catch (Exception e) { - String err = getI18n().getMessage("FileArchive.constr.manifest", getRootFile()); - throw new GenBaseException(err, e); - } - } - - /** - * Returns an InputStream corresponding to the given filename. - * - * @param filename file name source of the InputStream - * - * @return the InputStream corresponding to the given filename. - * - * @throws IOException When InputStream corersponding to the given filename - * cannot be found. - */ - public InputStream getInputStream(String filename) throws IOException { - File file = (File) getFiles().get(filename); - - if (file == null) { - // filename not found in added files - // try root search - file = new File(getRootFile(), filename); - - if (!file.exists()) { - return null; - } - } - - // file exists (in added files or in original archive) - return new FileInputStream(file); - } - - /** - * Returns a List of all files contained in this archive. Original files in - * jar, added Files are all included as String in this Enumeration. - * - * @return a List of all files contained in this archive. - */ - public List getContainedFiles() { - List list = new Vector(getFiles().keySet()); - - // add files of the original archive - traverse("", getRootFile(), list); - - return list; - } - - /** - * Add all files contained in the given directory into a list. - * - * @param dirName current directory name - * @param base directory where file are listed - * @param map list of filename - */ - private static void traverse(String dirName, File base, List map) { - File[] childs = base.listFiles(); - - // directory exists ? - if (childs != null) { - for (int i = 0; i < childs.length; i++) { - if (childs[i].isFile()) { - // File - map.add(dirName + childs[i].getName()); - } else { - // Directory - traverse(dirName + childs[i].getName() + File.separator, childs[i], map); - } - } - } - } - - /** - * Returns true if archive is packed or false if archive is unpacked. - * - * @return true if archive is packed or false if archive is unpacked. - */ - public boolean isPacked() { - return false; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/J2EEArchive.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/J2EEArchive.java deleted file mode 100644 index cabacc05b4..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/J2EEArchive.java +++ /dev/null @@ -1,272 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.Map; -import java.util.jar.Manifest; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.generator.GeneratorFactories; -import org.ow2.jonas.generators.genbase.generator.GeneratorFactory; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; - - - -import org.objectweb.util.monolog.api.Logger; - - -/** - * Base Class for all J2EE modules (application, ejbjar, client, webapp). - * - * @author Guillaume Sauthier - * @see org.ow2.jonas.generators.genbase.archive.Archive - */ -public abstract class J2EEArchive implements Archive { - /** i18n */ - private static I18n i18n = I18n.getInstance(J2EEArchive.class); - - /** logger */ - private static Logger logger = Log.getLogger(Log.JONAS_GENBASE_PREFIX); - - /** encapsulated archive */ - private Archive archive; - - /** J2EE Archive inner ClassLoader */ - private ClassLoader moduleClassloader = null; - - /** - * Creates a new J2EEArchive object. - * - * @param archive Archive containing files - */ - public J2EEArchive(Archive archive) { - this.archive = archive; - } - - /** - * add the content of the given directory into the root of the archive. - * - * @param directory directory to add - */ - public void addDirectory(File directory) { - archive.addDirectory(directory); - } - - /** - * add the content of the given directory into the given directory of the - * archive. - * - * @param dirName archive directory name. - * @param directory directory to add. - */ - public void addDirectoryIn(String dirName, File directory) { - archive.addDirectoryIn(dirName, directory); - } - - /** - * add a lonely file into the root directory of the archive. - * - * @param file the file to be added. - */ - public void addFile(File file) { - archive.addFile(file); - } - - /** - * add a file into the root directory of the archive with a specified name. - * - * @param file the file to be added. - * @param name filename - */ - public void addFile(File file, String name) { - archive.addFile(file, name); - } - - /** - * add a lonely file into the given directory of the archive. - * - * @param dirName archive directory name. - * @param file the file to be added. - */ - public void addFileIn(String dirName, File file) { - archive.addFileIn(dirName, file); - } - - /** - * Returns the File corresponding to the root of the archive. - * - * @return the File corresponding to the root of the archive. - */ - public File getRootFile() { - return archive.getRootFile(); - } - - /** - * Returns the Manifest of the Archive. - * - * @return the Manifest of the Archive. - */ - public Manifest getManifest() { - return archive.getManifest(); - } - - /** - * Returns an InputStream corresponding to the given filename. - * - * @param filename file name source of the InputStream - * - * @return the InputStream corresponding to the given filename. - * - * @throws IOException When Cannot get InputStream from filename - */ - public InputStream getInputStream(String filename) - throws IOException { - return archive.getInputStream(filename); - } - - /** - * Returns a List of all files contained in this archive. Original files in - * jar, added Files are all included as String in this Enumeration. - * - * @return a List of all files contained in this archive. - */ - public List getContainedFiles() { - return archive.getContainedFiles(); - } - - /** - * Returns true if archive is packed or false if archive is unpacked. - * - * @return true if archive is packed or false if archive is unpacked. - */ - public boolean isPacked() { - return archive.isPacked(); - } - - /** - * Returns the name of the Archive. - * - * @return the name of the Archive. - */ - public String getName() { - return archive.getName(); - } - - /** - * Returns a Map of name to Document for each modified Descriptor of the - * archive. - * - * @return a Map of name to Document - */ - public abstract Map getDescriptors(); - - /** - * Returns true if filename must be omitted in the archive. - * - * @param name filename to be tested - * - * @return true if filename must be omitted. - */ - public abstract boolean omit(String name); - - /** - * @return Returns the i18n. - */ - public static I18n getI18n() { - return i18n; - } - /** - * @return Returns the logger. - */ - public static Logger getLogger() { - return logger; - } - /** - * @return Returns the archive. - */ - public Archive getArchive() { - return archive; - } - /** - * @param archive The archive to set. - */ - public void setArchive(Archive archive) { - this.archive = archive; - } - - /** - * Initialize the Archive. - * @throws GenBaseException When initialization fails. - */ - public abstract void initialize() throws GenBaseException; - - /** - * @return Returns the module inner ClassLoader - */ - public ClassLoader getModuleClassloader() { - return moduleClassloader; - } - - /** - * @param moduleClassloader The moduleClassloader to set. - */ - public void setModuleClassloader(ClassLoader moduleClassloader) { - this.moduleClassloader = moduleClassloader; - } - - /** - * @return true if the use of DTDs is allowed or if we have to use only web services - */ - protected boolean isDTDsAllowed() { - GeneratorFactory gf = GeneratorFactories.getCurrentFactory(); - if (gf == null) { - throw new IllegalStateException(i18n.getMessage("J2EEArchive.isDTDsAllowed.noFactory")); - } - Config config = gf.getConfiguration(); - if (config == null) { - throw new IllegalStateException(i18n.getMessage("J2EEArchive.isDTDsAllowed.noConfig")); - } - return config.isDTDsAllowed(); - } - - /** - * Close this archive - */ - public void close() { - try { - this.archive.close(); - } catch (IOException ioe) { - throw new RuntimeException("Cannot close file '" + archive + "'", ioe); - } - archive = null; - } -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/JarArchive.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/JarArchive.java deleted file mode 100644 index 3aeadcfbc8..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/JarArchive.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.List; -import java.util.Vector; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -import org.ow2.jonas.generators.genbase.GenBaseException; - - - -/** - * A JarArchive is a wrapper for jar file. - * - * @author Guillaume Sauthier - */ -public class JarArchive extends AbsArchive { - - /** encapsulated Jar File */ - private JarFile jar; - - /** - * Creates a new JarArchive object. - * - * @param jar the File corresponding to a JarFile - * - * @throws GenBaseException When Manifest cannot be found - */ - public JarArchive(File jar) throws GenBaseException { - super(jar); - - try { - this.jar = new JarFile(jar); - setManifest(this.jar.getManifest()); - } catch (IOException ioe) { - String err = getI18n().getMessage("JarArchive.constr.jar", jar); - throw new GenBaseException(err, ioe); - } - } - - /** - * Returns an InputStream corresponding to the given filename. - * - * @param filename file name source of the InputStream - * - * @return the InputStream corresponding to the given filename. - * - * @throws IOException when InputStream of the filename cannot be found in - * the archive - */ - public InputStream getInputStream(String filename) throws IOException { - // try get the file from the map - File file = (File) getFiles().get(filename); - - if (file == null) { - // filename not found in added files - // try jar search - ZipEntry ze = jar.getEntry(filename); - - // Entry found ? - if (ze == null) { - return null; - } else { - return jar.getInputStream(ze); - } - } else { - // file exists (in added files) - return new FileInputStream(file); - } - } - - /** - * Returns a List of all files contained in this archive. Original files in - * jar, added Files are all included as String in this Enumeration. - * - * @return a List of all files contained in this archive. - */ - public List getContainedFiles() { - List list = new Vector(getFiles().keySet()); - - // add files of the original archive - for (Enumeration e = jar.entries(); e.hasMoreElements();) { - ZipEntry ze = (ZipEntry) e.nextElement(); - list.add(ze.getName()); - } - - return list; - } - - /** - * Returns true if archive is packed or false if archive is unpacked. - * - * @return true if archive is packed or false if archive is unpacked. - */ - public boolean isPacked() { - return true; - } - - /** - * Close this archive - */ - public void close() { - super.close(); - try { - jar.close(); - } catch (IOException ioe) { - throw new RuntimeException("Cannot close file '" + jar + "'", ioe); - } - jar = null; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WebApp.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WebApp.java deleted file mode 100644 index f1abbd4b11..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WebApp.java +++ /dev/null @@ -1,651 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:WebApp.java 10528 2007-06-05 08:26:23Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Vector; -import java.util.jar.JarFile; - -import javax.xml.parsers.ParserConfigurationException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.deployment.web.lib.WebDeploymentDescManager; -import org.ow2.jonas.deployment.ws.WSDeploymentDesc; -import org.ow2.jonas.deployment.ws.lib.WSDeploymentDescManager; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.lib.loader.WebappClassLoader; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -/** - * A WebApp is a wrapper class around a Web Archive. - * - * @author Guillaume Sauthier - */ -public class WebApp extends J2EEArchive implements EjbRefModule, WsClient, WsEndpoint { - - /** Application containing the webapp */ - private Application app = null; - - /** webapp archive filename */ - private String webFilename; - - /** Web deployment descriptor */ - private WebContainerDeploymentDesc webDD; - - /** WebServices deployment descriptor */ - private WSDeploymentDesc wsDD = null; - - /** service-ref list */ - private List sRefs; - - /** web-app */ - private Document webApp = null; - - /** jonas-web-app */ - private Document jonasWebApp = null; - - /** webservices */ - private Document webservices = null; - - /** jonas-webservices */ - private Document jonasWebservices = null; - - /** context */ - private Document context = null; - - /** webjetty */ - private Document webjetty = null; - - /** web descriptors */ - private Map descriptors; - - /** - * ejb-ref list - */ - private List ejbRefs; - - /** - * Create an alone WebApp (not in an ear). - * - * @param archive file archive - * - * @throws GenBaseException When Init fails - */ - public WebApp(final Archive archive) throws GenBaseException { - super(archive); - webFilename = archive.getName(); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in WebApp"); - } - init(); - } - - /** - * Create an embded WebApp. - * - * @param archive Web Archive - * @param app container application - * - * @throws GenBaseException When init fails - */ - public WebApp(final Archive archive, final Application app) throws GenBaseException { - super(archive); - webFilename = archive.getName(); - setApplication(app); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Wrapping '" + archive.getName() + "' in WebApp"); - } - init(); - } - - /** - * Initialize the WebApp module. - * - * @throws GenBaseException When classloader cannot be created or when - * decriptor loading fails. - */ - private void init() throws GenBaseException { - // load Deployment Descs - loadDescriptors(); - } - - /** - * Load Deployment Descriptor of a WebApp. - * - * @throws GenBaseException When descriptor cannot be parsed - */ - private void loadDescriptors() throws GenBaseException { - try { - - // Optional - InputStream webIs = getWebInputStream(); - if (webIs != null) { - webApp = XMLUtils.newDocument(webIs, "WEB-INF/web.xml", isDTDsAllowed()); - } - - // jonas-web.xml (optionnal) - InputStream is = getJonasWebInputStream(); - - if (is != null) { - jonasWebApp = XMLUtils.newDocument(is, "WEB-INF/jonas-web.xml", isDTDsAllowed()); - } - - // webservices.xml (optionnal) - InputStream isWS = getWebservicesInputStream(); - - if (isWS != null) { - webservices = XMLUtils.newDocument(isWS, "WEB-INF/webservices.xml", isDTDsAllowed()); - } - - // jonas-webservices.xml (optionnal) - InputStream isJWS = getJonasWebservicesInputStream(); - - if (isJWS != null) { - jonasWebservices = XMLUtils.newDocument(isJWS, "WEB-INF/jonas-webservices.xml", isDTDsAllowed()); - } - - // context.xml (optional) - InputStream isContext = getContextInputStream(); - if (isContext != null) { - context = XMLUtils.newDocument(isContext, "META-INF/context.xml", isDTDsAllowed(), false); - } - - //web-jetty.xml (optional) - InputStream isWebJetty = getWebJettyInputStream(); - if (isWebJetty != null) { - // Jetty needs web-jetty.xml to have a dtd - webjetty = XMLUtils.newDocument(isWebJetty, "WEB-INF/web-jetty.xml", true, true); - } - - } catch (SAXException saxe) { - String err = getI18n().getMessage("WebApp.loadDescriptors.parseError"); - throw new GenBaseException(err, saxe); - } catch (ParserConfigurationException pce) { - String err = getI18n().getMessage("WebApp.loadDescriptors.prepare"); - throw new GenBaseException(err, pce); - } catch (IOException ioe) { - String err = getI18n().getMessage("WebApp.loadDescriptors.parseError"); - throw new GenBaseException(err, ioe); - } - - descriptors = new Hashtable(); - if (webApp != null) { - descriptors.put("WEB-INF/web.xml", webApp); - } - - if (jonasWebApp != null) { - descriptors.put("WEB-INF/jonas-web.xml", jonasWebApp); - } - - if (webservices != null) { - descriptors.put("WEB-INF/webservices.xml", webservices); - } - - if (jonasWebservices != null) { - descriptors.put("WEB-INF/jonas-webservices.xml", jonasWebservices); - } - - if (context != null) { - descriptors.put("META-INF/context.xml", context); - } - - if (webjetty != null) { - descriptors.put("WEB-INF/web-jetty.xml", webjetty); - } - } - - /** - * Returns the name of the Archive. Overrides J2EEArchive.getName(); - * - * @see org.ow2.jonas.generators.genbase.archive.J2EEArchive#getName() - * - * @return the name of the Archive. - */ - @Override - public String getName() { - return webFilename; - } - - /** - * Set the container application. - * - * @param app the container application. - */ - public void setApplication(final Application app) { - this.app = app; - } - - /** - * Returns the container application (can be null). - * - * @return the container application (can be null). - */ - public Application getApplication() { - return app; - } - - /** - * Returns the list of service-ref elements contained by a module. - * - * @return the list of service-ref elements contained by a module. - */ - public List getServiceRefDescs() { - return sRefs; - } - - /** - * Returns the list of webservice-description elements contained by a - * module. - * - * @return the list of webservice-description elements contained by a - * module. - */ - public List getServiceDescs() { - if (wsDD != null) { - return wsDD.getServiceDescs(); - } else { - return new Vector(); - } - } - - /** - * Add Archive classes. - * - * @param classes root directory containing classes. - */ - public void addClasses(final File classes) { - addDirectoryIn("WEB-INF/classes", classes); - } - - /** - * Returns the Document of the web.xml file. - * - * @return the Document of the web.xml file. - */ - public Document getWebAppDoc() { - return webApp; - } - - /** - * Returns the Document of the jonas-web.xml file. - * - * @return the Document of the jonas-web.xml file. - */ - public Document getJonasWebAppDoc() { - return jonasWebApp; - } - - /** - * Returns the Document of the webservices.xml file. - * - * @return the Document of the webservices.xml file. - */ - public Document getWebservicesDoc() { - return webservices; - } - - /** - * Returns the Document of the jonas-webservices.xml file. - * - * @return the Document of the jonas-webservices.xml file. - */ - public Document getJonasWebservicesDoc() { - return jonasWebservices; - } - - /** - * Returns a new Document of the context.xml file - * - * @return the Document of the context.xml file. - * @throws GenBaseException if context.xml Document cannot be produced. - */ - public Document newContextDoc() throws GenBaseException { - - // Do not validate context.xml as there is no associated DTD or XML Schema - context = loadXMLDescriptorAsResource("context.xml", "META-INF/context.xml", false); - - return context; - } - - /** - * Returns a new Document of the web-jetty.xml file - * - * @return the document of the web-jetty.xml file - * @throws GenBaseException if context.xml Document cannot be produced. - */ - public Document newWebJettyDoc() throws GenBaseException { - - webjetty = loadXMLDescriptorAsResource("web-jetty.xml", "WEB-INF/web-jetty.xml"); - - return webjetty; - } - - /** - * Load and validate an XML {@link Document} as a resource. - * @param resource resource's name (used to load from the classloader) - * @param name name of the resource in the final web-app - * @return Returns an XML {@link Document} representing the given resource. - * @throws GenBaseException If unable to load the specified resource from the classloader. - */ - private Document loadXMLDescriptorAsResource(final String resource, final String name) throws GenBaseException { - - return loadXMLDescriptorAsResource(resource, name, true); - } - - /** - * Load and validate (if required) an XML {@link Document} as a resource. - * @param resource resource's name (used to load from the classloader) - * @param name name of the resource in the final web-app - * @param validate Indicate if the {@link Document} should be validated. - * @return Returns an XML {@link Document} representing the given resource. - * @throws GenBaseException If unable to load the specified resource from the classloader. - */ - private Document loadXMLDescriptorAsResource(final String resource, - final String name, - final boolean validate) throws GenBaseException { - Document doc = null; - try { - doc = XMLUtils.newDocument(this.getClass().getResourceAsStream(resource), name, validate); - } catch (Exception e) { - throw new GenBaseException("Cannot load '" + name + "'", e); - } - - // save the descriptor in the descriptor Map - descriptors.put(name, doc); - - return doc; - } - - /** - * Returns the Document of the context.xml file - * - * @return the Document of the context.xml file. - */ - public Document getContextDoc() { - return context; - } - - /** - * Returns the Document of the web-=jetty.xml file - * - * @return the document of the web-jetty.xml file - */ - public Document getWebJettyDoc() { - return webjetty; - } - - /** - * Returns the InputStream of the web.xml file. - * - * @return the InputStream of the web.xml file. - * - * @throws IOException When InputStream cannot be returned. - */ - private InputStream getWebInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("WEB-INF/web.xml"); - } else { - is = getInputStream("WEB-INF" + File.separator + "web.xml"); - } - - return is; - } - - /** - * Returns the InputStream of the jonas-web.xml file. - * - * @return the InputStream of the jonas-web.xml file. - * - * @throws IOException When InputStream cannot be returned. - */ - private InputStream getJonasWebInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("WEB-INF/jonas-web.xml"); - } else { - is = getInputStream("WEB-INF" + File.separator + "jonas-web.xml"); - } - - return is; - } - - /** - * Returns the InputStream of the webservices.xml file. - * - * @return the InputStream of the webservices.xml file. - * - * @throws IOException When InputStream cannot be returned. - */ - private InputStream getWebservicesInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("WEB-INF/webservices.xml"); - } else { - is = getInputStream("WEB-INF" + File.separator + "webservices.xml"); - } - - return is; - } - - /** - * Returns the InputStream of the jonas-webservices.xml file. - * - * @return the InputStream of the jonas-webservices.xml file. - * - * @throws IOException When InputStream cannot be returned. - */ - private InputStream getJonasWebservicesInputStream() throws IOException { - InputStream is = null; - - if (isPacked()) { - is = getInputStream("WEB-INF/jonas-webservices.xml"); - } else { - is = getInputStream("WEB-INF" + File.separator + "jonas-webservices.xml"); - } - - return is; - } - - /** - * Returns the InputStream of the context.xml file. - * - * @return the InputStream of the context.xml file. - * @throws IOException When InputStream cannot be returned - */ - private InputStream getContextInputStream() throws IOException { - InputStream is = null; - if (isPacked()) { - is = getInputStream("META-INF/context.xml"); - } else { - is = getInputStream("META-INF" + File.separator + "context.xml"); - } - - return is; - } - - /** - * Returns the InputStream of the web-jetty.xml file - * - * @return the InputStream of the web-jetty.xml file - * @throws IOException When InputStream cannot be returned - */ - private InputStream getWebJettyInputStream() throws IOException { - InputStream is = null; - if (isPacked()) { - is = getInputStream("WEB-INF/web-jetty.xml"); - } else { - is = getInputStream("WEB-INF" + File.separator + "web-jetty.xml"); - } - - return is; - } - - /** - * Returns a Map of name to Document for each modified Descriptor of the - * archive. - * - * @return a Map of name to Document - */ - @Override - public Map getDescriptors() { - return descriptors; - } - - /** - * Returns true if filename must be omitted in the archive. - * - * @param name filename to be tested - * - * @return true if filename must be omitted. - */ - @Override - public boolean omit(final String name) { - return (name.equals("WEB-INF/web.xml") || name.equals("WEB-INF\\web.xml") - || name.equals("WEB-INF/jonas-web.xml") || name.equals("WEB-INF\\jonas-web.xml") - || name.equals("WEB-INF/webservices.xml") || name.equals("WEB-INF\\webservices.xml") - || name.equals("WEB-INF/jonas-webservices.xml") || name.equals("WEB-INF\\jonas-webservices.xml") - || name.equals("META-INF/context.xml") || name.equals("META-INF\\context.xml") - || name.equals("WEB-INF/web-jetty.xml") || name.equals("WEB-INF\\web-jetty.xml")); - } - - /** - * Initialize the Archive. - * @throws GenBaseException When initialization fails. - */ - @Override - public void initialize() throws GenBaseException { - File webappUnpackDir = getRootFile(); - try { - - if (getArchive().isPacked()) { - JarFile jf = new JarFile(getRootFile()); - TempRepository tr = TempRepository.getInstance(); - webappUnpackDir = tr.createDir(".war"); - FileUtils.unpack(jf, webappUnpackDir); - jf.close(); - setArchive(new FileArchive(webappUnpackDir)); - } - - if (app == null) { - // simple webapp case - setModuleClassloader(new WebappClassLoader(webappUnpackDir.toURL(), Thread.currentThread() - .getContextClassLoader())); - } else { - // embedded webapp case - setModuleClassloader(new WebappClassLoader(webappUnpackDir.toURL(), app.getEJBClassLoader())); - } - } catch (IOException ioe) { - String err = getI18n().getMessage("WebApp.init.loader", getArchive().getRootFile()); - throw new GenBaseException(err, ioe); - } catch (FileUtilsException fue) { - String err = getI18n().getMessage("WebApp.init.loader", getArchive().getRootFile()); - throw new GenBaseException(err, fue); - } - - try { - webDD = WebDeploymentDescManager.getDeploymentDesc(webappUnpackDir.getAbsolutePath(), getModuleClassloader()); - } catch (DeploymentDescException dde) { - throw new GenBaseException(dde); - } - - try { - wsDD = WSDeploymentDescManager.getDeploymentDesc(webappUnpackDir.getAbsolutePath(), getModuleClassloader()); - } catch (DeploymentDescException dde) { - throw new GenBaseException(dde); - } - - // we want a List of service-ref - sRefs = new Vector(); - - IServiceRefDesc[] refs = webDD.getServiceRefDesc(); - - for (int i = 0; i < refs.length; i++) { - sRefs.add(refs[i]); - } - - // List of ejb-refs - ejbRefs = new Vector(); - IEJBRefDesc[] refDesc = webDD.getEjbRefDesc(); - - for (int i = 0; i < refDesc.length; i++) { - ejbRefs.add(refDesc[i]); - } - - } - - /** - * @return Returns the context-root to use for this group of Services. - */ - public String getContextRoot() { - return this.wsDD.getContextRoot(); - } - - /** - * Returns the list of ejb-ref elements contained by a module. - * @return the list of ejb-ref elements contained by a module. - */ - public List getEjbRefDescs() { - return ejbRefs; - } - - /** - * Close this archive - */ - @Override - public void close() { - sRefs = null; - ejbRefs = null; - webDD = null; - wsDD = null; - webApp = null; - app = null; - descriptors = null; - jonasWebApp = null; - webFilename = null; - webservices = null; - jonasWebservices = null; - context = null; - webjetty = null; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsClient.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsClient.java deleted file mode 100644 index 1cb9defeae..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsClient.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.util.List; - -/** - * represent an element client of webservice (webapp, ejb, client) - * - * @author Guillaume Sauthier - */ -public interface WsClient { - - /** - * Returns the list of service-ref elements contained by a module. - * - * @return the list of service-ref elements contained by a module. - */ - List getServiceRefDescs(); -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsEndpoint.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsEndpoint.java deleted file mode 100644 index d20552d730..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/archive/WsEndpoint.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.archive; - -import java.util.List; - -/** - * represent an element containing webservices.xml file (webapp, ejbjar) - * - * @author Guillaume Sauthier - */ -public interface WsEndpoint { - - /** - * Returns the list of webservice-description elements contained by a - * module. - * - * @return the list of webservice-description elements contained by a - * module. - */ - List getServiceDescs(); - - /** - * @return Returns the context-root to use for this group of Services. - */ - String getContextRoot(); -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/AbsGenerator.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/AbsGenerator.java deleted file mode 100644 index c373362a0d..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/AbsGenerator.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.generator; - -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.file.FileUtils; -import org.ow2.util.url.URLUtils; - -/** - * Generators provide a structure to be extended for specific generation - * mechanisms. - * @author Guillaume Sauthier - */ -public abstract class AbsGenerator { - - /** - * i18n - */ - private static I18n i18n = I18n.getInstance(AbsGenerator.class); - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_GENBASE_PREFIX); - - /** - * Configuration to be used - */ - private Config config; - - /** - * compiled classes directory - */ - private File classes; - - /** - * generated files directory - */ - private File sources; - - /** - * Creates a new Generator with the given Config. - * @param config internal configuration object. - * @throws GenBaseException When sources and target temporary directory - * cannot be created - */ - public AbsGenerator(final Config config) throws GenBaseException { - this.config = config; - - // creates temporary directories - TempRepository tr = TempRepository.getInstance(); - - try { - sources = tr.createDir(); - classes = tr.createDir(); - } catch (IOException ioe) { - String err = i18n.getMessage("AbsGenerator.constr.ioe"); - logger.log(BasicLevel.ERROR, err); - throw new GenBaseException(err, ioe); - } - } - - /** - * Generate files. - * @throws GenBaseException When generation fails. - */ - public abstract void generate() throws GenBaseException; - - /** - * Compile generated java files into classes directory. - * @throws GenBaseException When compilation fails - */ - public abstract void compile() throws GenBaseException; - - /** - * Recursively walk a directory tree and return a List of all files found. - * @param rootSrc root directory - * @param src base directory - * @return the list containing all found files - */ - protected List getJavaSources(final File rootSrc, final File src) { - List result = new ArrayList(); - - // add each java sources contained in the directory - File[] files = src.listFiles(new FileFilter() { - public boolean accept(File file) { - return file.isFile() && file.getName().endsWith(".java"); - } - }); - - for (int i = 0; i < files.length; i++) { - result.add(files[i].getPath().substring(rootSrc.getPath().length() + 1)); - } - - // reapply on subdirectories - files = src.listFiles(new FileFilter() { - public boolean accept(final File file) { - return file.isDirectory(); - } - }); - - for (int i = 0; i < files.length; i++) { - List deeperList = getJavaSources(rootSrc, files[i]); - result.addAll(deeperList); - } - - return result; - } - - /** - * Add generated files into an Archive - * @param archive the archive destination of generated files. - * @throws GenBaseException When files cannot be added in the given Archive. - */ - public abstract void addFiles(Archive archive) throws GenBaseException; - - /** - * @return the config. - */ - public Config getConfig() { - return config; - } - - /** - * @return the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @return the classes. - */ - public File getClasses() { - return classes; - } - - /** - * @return the sources. - */ - public File getSources() { - return sources; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/Config.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/Config.java deleted file mode 100644 index 85a877bf6d..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/Config.java +++ /dev/null @@ -1,423 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genbase.generator; - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.util.Env; - -/** - * Configuration object storing generation params. - */ -public class Config { - - /** - * packed mode. - */ - public static final int PACKED = 0; - - /** - * unpacked mode. - */ - public static final int UNPACKED = 1; - - /** - * Java executable name. - */ - private String nameJava = "java"; - - /** - * Javac executable name. - */ - private String nameJavac = "javac"; - - /** - * Rmic executable name. - */ - private String nameRmic = "rmic"; - - /** - * Javac options. - */ - private List javacOpts = new ArrayList(); - - /** - * Bin directory for JDK. - */ - private String javaHomeBin = null; - - /** - * no config needed . - */ - private boolean noConfig = false; - - /** - * verbose mode. - */ - private boolean verbose = false; - - /** - * debug mode . - */ - private boolean debug = false; - - /** - * classpath. - */ - private String classpath = "."; - - /** - * output directory. - */ - private File out = new File("."); - - /** - * keep alrady generated files. - */ - private boolean keepGenerated = false; - - /** - * validating parser ? - */ - private boolean parseWithValidation = true; - - /** - * configuration error. - */ - private boolean error = false; - - /** - * file input name. - */ - private String inputname; - - /** help requested ? */ - private boolean help = false; - - /** - * Save mode (PACKED/UNPACKED). - */ - private int saveMode = PACKED; - - /** - * DTDs use is allowed. - */ - private boolean dtdsAllowed = false; - - /** - * Creates a new Config. Automatically setup javaHomeBin property. And - * create classpath from classloader. - */ - public Config() { - // Setup java_home/bin directory - setJavaHomeBin(System.getProperty("java.home", "")); - - if (!("".equals(getJavaHomeBin()))) { - if (Env.isOsMacOsX()) { - setJavaHomeBin(getJavaHomeBin() + File.separator + "bin" + File.separator); - } else { - // JRE Directory ! - setJavaHomeBin(getJavaHomeBin() + File.separator + ".." + File.separator + "bin" + File.separator); - } - } - - // classpath - URLClassLoader ucl = (URLClassLoader) (Thread.currentThread().getContextClassLoader()); - - // Try to detect the mode - if (ucl instanceof JClassLoader) { - setClasspath(((JClassLoader) ucl).getClassPath()); - } else { - setClasspath(extractURLs(ucl)); - } - } - - /** - * @param ucl the ClassLoader to search in - * @return Returns the classpath representation of that ClassLoader - */ - private String extractURLs(final URLClassLoader ucl) { - URL[] urls = ucl.getURLs(); - // for each URL - StringBuffer sb = new StringBuffer(); - boolean first = true; - for (int i = 0; i < urls.length; i++) { - String file = urls[i].getFile(); - if (!"".equals(file)) { - if (first) { - sb.append(file); - first = false; - } else { - sb.append(File.pathSeparator + file); - } - } - } - return sb.toString(); - } - - /** - * @param nameJavac Set javac command name to use - */ - public void setNameJavac(final String nameJavac) { - this.nameJavac = nameJavac; - } - - /** - * @return Returns the javac command name to use - */ - public String getNameJavac() { - return nameJavac; - } - - /** - * @param javacOpts Set javac Opts - */ - public void setJavacOpts(final List javacOpts) { - this.javacOpts = javacOpts; - } - - /** - * @return Returns the Javac Opts to use - */ - public List getJavacOpts() { - return javacOpts; - } - - /** - * @param javaHomeBin JAVA_HOME/bin directory - */ - public void setJavaHomeBin(final String javaHomeBin) { - this.javaHomeBin = javaHomeBin; - } - - /** - * @return Returns the JAVA_HOME/bin directory - */ - public String getJavaHomeBin() { - return javaHomeBin; - } - - /** - * @param noConfig Generate Configuration ? - */ - public void setNoConfig(final boolean noConfig) { - this.noConfig = noConfig; - } - - /** - * @return Returns noConfig option - */ - public boolean isNoConfig() { - return noConfig; - } - - /** - * @param verbose Verbose ? - */ - public void setVerbose(final boolean verbose) { - this.verbose = verbose; - } - - /** - * @return Returns verbose option - */ - public boolean isVerbose() { - return verbose; - } - - /** - * @param debug Debug ? - */ - public void setDebug(final boolean debug) { - this.debug = debug; - } - - /** - * @return Returns debug option - */ - public boolean isDebug() { - return debug; - } - - /** - * @param classpath Classpath to use with java commands - */ - public void setClasspath(final String classpath) { - this.classpath = classpath; - } - - /** - * @return Retruns Classpath - */ - public String getClasspath() { - return classpath; - } - - /** - * @param out Output directory - */ - public void setOut(final File out) { - this.out = out; - } - - /** - * @return Returns Ouput directory - */ - public File getOut() { - return out; - } - - /** - * @param keepGenerated Kepp Generated files ? - */ - public void setKeepGenerated(final boolean keepGenerated) { - this.keepGenerated = keepGenerated; - } - - /** - * @return Returns keepGenerated option - */ - public boolean isKeepGenerated() { - return keepGenerated; - } - - /** - * @param parseWithValidation Parse XML desc with validation ? - */ - public void setParseWithValidation(final boolean parseWithValidation) { - this.parseWithValidation = parseWithValidation; - } - - /** - * @return Returns validation - */ - public boolean isParseWithValidation() { - return parseWithValidation; - } - - /** - * @param error Error Mode ? - */ - public void setError(final boolean error) { - this.error = error; - } - - /** - * @return Returns true if there is Configuration errors - */ - public boolean isError() { - return error; - } - - /** - * @param inputname File inputname - */ - public void setInputname(final String inputname) { - this.inputname = inputname; - } - - /** - * @return Returns file input name - */ - public String getInputname() { - return inputname; - } - - /** - * @param help Help Mode ? - */ - public void setHelp(final boolean help) { - this.help = help; - } - - /** - * @return Returns Help option. - */ - public boolean isHelp() { - return help; - } - - /** - * Set Packed Mode for storing. - */ - public void setSavePacked() { - this.saveMode = PACKED; - } - - /** - * Set UnPacked Mode for storing. - */ - public void setSaveUnpacked() { - this.saveMode = UNPACKED; - } - - /** - * @return Returns Save mode - */ - public int getSaveMode() { - return saveMode; - } - - /** - * @return Returns the nameRmic. - */ - public String getNameRmic() { - return nameRmic; - } - - /** - * @param nameRmic The nameRmic to set. - */ - public void setNameRmic(final String nameRmic) { - this.nameRmic = nameRmic; - } - - /** - * @return the java command - */ - public String getNameJava() { - return nameJava; - } - - /** - * @return true if the use of DTDs is allowed. - */ - public boolean isDTDsAllowed() { - return dtdsAllowed; - } - - /** - * Use of DTDs. - * @param dTDsAllowed The dtdsAllowed to set. - */ - public void setDTDsAllowed(final boolean dTDsAllowed) { - this.dtdsAllowed = dTDsAllowed; - } -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactories.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactories.java deleted file mode 100644 index 41ab7fff5b..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactories.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genbase.generator; - -/** - * Allow to get/set current factory - * @author Florent Benoit - */ -public class GeneratorFactories { - - /** - * Current generator factory - */ - private static GeneratorFactory currentFactory = null; - - /** - * Utility class, no constructor - */ - private GeneratorFactories() { - - } - - /** - * @return the currentFactory. - */ - public static GeneratorFactory getCurrentFactory() { - return currentFactory; - } - - /** - * Set the current factory - * @param currentFactory The factory to set. - */ - public static void setCurrentFactory(GeneratorFactory currentFactory) { - GeneratorFactories.currentFactory = currentFactory; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactory.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactory.java deleted file mode 100644 index f98064de20..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/generator/GeneratorFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genbase.generator; - - -/** - * All factories have to implement getter/setter on configuration object - * @author Florent Benoit - */ -public interface GeneratorFactory { - - /** - * Set the Configuration to use with newly created Generator. - * @param config the Configuration to use with newly created Generator. - */ - void setConfiguration(Config config); - - /** - * Get the Configuration to use with newly created Generator. - * @return the Configuration to use with newly created Generator - */ - Config getConfiguration(); -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsApplicationModifier.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsApplicationModifier.java deleted file mode 100644 index b440a9d183..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsApplicationModifier.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Modify a given Application. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public abstract class AbsApplicationModifier extends ArchiveModifier { - - /** - * ejbjar modifiers - */ - private List ejbModifiers = null; - - /** - * web modifiers - */ - private List webModifiers = null; - - /** - * client modifiers - */ - private List cltModifiers = null; - - /** - * Wrapped application - */ - private Application app = null; - - /** - * Configuration used to save - */ - private Config config = null; - - /** - * Creates a new ApplicationModifier. - * @param archive the Application J2EE archive - * @param config the configuration object - */ - public AbsApplicationModifier(Application archive, Config config) { - super(archive); - this.config = config; - app = archive; - initVectors(); - init(); - } - - /** - * Init the vectors of modifiers - */ - private void initVectors() { - // create lists - ejbModifiers = new Vector(); - webModifiers = new Vector(); - cltModifiers = new Vector(); - } - - /** - * initialize modifier - */ - protected abstract void init(); - - /** - * Modify the current archive and return a modified archive. - * @return a modified archive. - * @throws GenBaseException When modifications fails - */ - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing Application " + app.getName()); - - /** - * Modify inner modules - */ - for (Iterator i = webModifiers.iterator(); i.hasNext();) { - ArchiveModifier wm = (ArchiveModifier) i.next(); - Archive a = wm.modify(); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Modifying WebApp '" + a.getName() + "'"); - } - app.addFile(a.getRootFile()); - } - - for (Iterator i = cltModifiers.iterator(); i.hasNext();) { - ArchiveModifier cm = (ArchiveModifier) i.next(); - Archive a = cm.modify(); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Modifying Client '" + a.getName() + "'"); - } - app.addFile(a.getRootFile()); - } - - for (Iterator i = ejbModifiers.iterator(); i.hasNext();) { - ArchiveModifier em = (ArchiveModifier) i.next(); - Archive a = em.modify(); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Modifying EjbJar '" + a.getName() + "'"); - } - app.addFile(a.getRootFile()); - } - - return save(config, "apps" + File.separator + app.getName()); - - } - - /** - * @return the cltModifiers. - */ - protected List getCltModifiers() { - return cltModifiers; - } - - /** - * @return the ejbModifiers. - */ - protected List getEjbModifiers() { - return ejbModifiers; - } - - /** - * @return the webModifiers. - */ - protected List getWebModifiers() { - return webModifiers; - } - /** - * @return the application element. - */ - protected Application getApplication() { - return app; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsModifierFactory.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsModifierFactory.java deleted file mode 100644 index 0017eb319d..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/AbsModifierFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2007 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genbase.modifier; - - - -/** - * Used to create the right ArchiveModifier from a given filename (ear, jar, - * war, ...). - * - * @author Guillaume Sauthier - * @author Florent Benoit (make common class for client stubs and WsGen) - */ -public abstract class AbsModifierFactory { - - /** - * Application Archive mode. - */ - public static final int APPLICATION = 0; - - /** - * EjbJar Archive mode. - */ - public static final int EJBJAR = 1; - - /** - * WebApp Archive mode. - */ - public static final int WEBAPP = 2; - - /** - * ApplicationClient Archive mode. - */ - public static final int CLIENT = 3; - - /** - * Utility class (no default public constructor). - */ - protected AbsModifierFactory() { - - } - -} diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/ArchiveModifier.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/ArchiveModifier.java deleted file mode 100644 index 22d5958040..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/modifier/ArchiveModifier.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.modifier; - -import java.io.File; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.FileArchive; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.JarArchive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.utils.ArchiveStorer; -import org.ow2.jonas.generators.genbase.utils.DirStorer; -import org.ow2.jonas.generators.genbase.utils.JarStorer; -import org.ow2.jonas.lib.util.Log; - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Modify a J2EEArchive - * @author Guillaume Sauthier - */ -public abstract class ArchiveModifier { - - /** - * J2EEArchive to be modified - */ - private J2EEArchive archive; - - /** logger */ - private static Logger logger = Log.getLogger(Log.JONAS_GENBASE_PREFIX); - - /** - * Creates a new ArchiveModifier object. - * @param archive rchive to be modified - */ - public ArchiveModifier(J2EEArchive archive) { - this.archive = archive; - } - - /** - * Modify the current archive and return a modified archive. - * @return a modified archive. - * @throws GenBaseException When Archive modification fails - */ - public abstract Archive modify() throws GenBaseException; - - /** - * Save the curernt archive usin given configuration and given out filename. - * @param config configuration to use - * @param outname filename - * @param archive archive to be saved - * @return the save Archive - * @throws GenBaseException is save fails. - */ - protected static Archive save(Config config, String outname, J2EEArchive archive) throws GenBaseException { - ArchiveStorer storer = null; - File endfile = new File(config.getOut(), outname); - Archive out = null; - - if (config.getSaveMode() == Config.PACKED) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Saving '" + endfile + "' in packed form..."); - } - storer = new JarStorer(archive, endfile); - storer.store(); - out = new JarArchive(endfile); - } else { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Saving '" + endfile + "' in unpacked form..."); - } - storer = new DirStorer(archive, endfile); - storer.store(); - out = new FileArchive(endfile); - } - - return out; - - } - - /** - * Save the current archive using given configuration and given out filename. - * @param config configuration to use - * @param outname filename - * @return the save Archive - * @throws GenBaseException is save fails. - */ - protected Archive save(Config config, String outname) throws GenBaseException { - return save(config, outname, archive); - } - - /** - * @return the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @return returns the J2EE Archive which wil be modified. - */ - public J2EEArchive getArchive() { - return this.archive; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/ArchiveStorer.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/ArchiveStorer.java deleted file mode 100644 index f2fa578b5e..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/ArchiveStorer.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.utils; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.XMLSerializer; -import org.w3c.dom.Document; - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Store an Archive in compressed or uncompressed format - * - * @author Guillaume Sauthier - */ -public abstract class ArchiveStorer { - - /** Buffer Size */ - public static final int MAX_BUFFER_SIZE = 1024; - - /** i18n */ - private static I18n i18n = I18n.getInstance(ArchiveStorer.class); - - /** logger */ - private static Logger logger = Log.getLogger(Log.JONAS_GENBASE_PREFIX); - - /** - * base J2EEArchive to be saved - */ - private J2EEArchive archive; - - /** - * already saved filenames - */ - private List already; - - /** output filename */ - private String out = ""; - - /** - * Creates a new ArchiveStorer object. - * - * @param archive archive to be saved - */ - public ArchiveStorer(J2EEArchive archive) { - this.archive = archive; - already = new Vector(); - // we must use Manifestof the J2EEArchive - already.add(convertName("META-INF/MANIFEST.MF")); - } - - /** - * Fill an OutputStream with content from an InputStream - * - * @param is InputStream - * @param os OutputStream - * - * @throws IOException When filling fails - */ - protected static void fill(InputStream is, OutputStream os) throws IOException { - byte[] buffer = new byte[MAX_BUFFER_SIZE]; - int read; - - while ((read = is.read(buffer, 0, MAX_BUFFER_SIZE)) != -1) { - os.write(buffer, 0, read); - } - os.flush(); - } - - /** - * add a file in saved archive - * - * @param name file name - * - * @throws IOException When save fails - */ - protected abstract void addFile(String name) throws IOException; - - /** - * convert a filename from unix to windows filename and reverse - * - * @param name name to be converted - * - * @return converted filename - */ - protected abstract String convertName(String name); - - /** - * Returns an OutputStream from the given name - * - * @param name the filename we want to open/create - * - * @return an OutputStream from the given name - * - * @throws IOException When OS cannot be created - */ - protected abstract OutputStream getOutputStream(String name) throws IOException; - - /** - * Store the content of the contained archive. - * - * @throws GenBaseException When cannot add all files - */ - public void store() throws GenBaseException { - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Writing '" + out + "' ..."); - } - - for (Iterator i = archive.getContainedFiles().iterator(); i.hasNext();) { - String name = (String) i.next(); - - try { - if (!archive.omit(convertName(name)) && !already.contains(convertName(name))) { - - addFile(name); - already.add(convertName(name)); - } - } catch (IOException ioe) { - String err = i18n.getMessage("ArchiveStorer.store.addFile", name); - throw new GenBaseException(err, ioe); - } - } - - // add Descriptors - Map descs = archive.getDescriptors(); - - for (Iterator i = descs.keySet().iterator(); i.hasNext();) { - String name = (String) i.next(); - - try { - XMLSerializer ser = new XMLSerializer((Document) descs.get(name)); - OutputStream os = getOutputStream(name); - ser.serialize(os); - os.flush(); - } catch (IOException ioe) { - String err = i18n.getMessage("ArchiveStorer.store.serialize", name); - throw new GenBaseException(err, ioe); - } - } - } - /** - * @return Returns the i18n. - */ - public static I18n getI18n() { - return i18n; - } - - /** - * @return Returns the archive. - */ - public J2EEArchive getArchive() { - return archive; - } - - /** - * @param out The out to set. - */ - public void setOut(String out) { - this.out = out; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/DirStorer.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/DirStorer.java deleted file mode 100644 index 37a15d51fc..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/DirStorer.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.utils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; - - -/** - * Store a J2EEArchive in an unpacked form. - * - * @author Guillaume Sauthier - */ -public class DirStorer extends ArchiveStorer { - - /** - * directory name containing unpacked archive. - */ - private File base; - - /** - * Creates a new DirStorer object. - * - * @param archive archive to be stored - * @param dir output directory - * - * @throws GenBaseException if cannot create output directory - */ - public DirStorer(J2EEArchive archive, File dir) throws GenBaseException { - super(archive); - - setOut(dir.getAbsolutePath()); - - // assure base exists - if (!dir.exists()) { - if (!dir.mkdirs()) { - String err = getI18n().getMessage("DirStorer.constr.create", dir); - throw new GenBaseException(err); - } - } - - base = dir; - } - - /** - * Convert a filename to a local filesystem filename. - * - * @param name name to be converted - * - * @return converted filename - */ - protected String convertName(String name) { - return name.replace('/', File.separatorChar); - } - - /** - * add a given file in the filesystem. - * - * @param name filename - * - * @throws IOException When fill fails. - */ - protected void addFile(String name) throws IOException { - OutputStream fos = getOutputStream(name); - InputStream is = getArchive().getInputStream(name); - fill(is, fos); - is.close(); - fos.close(); - } - - /** - * returns the OuputStream corresponding to the given filename. - * - * @param name filename to create - * - * @return An OutputStream - * - * @throws IOException When file creation fails. - */ - protected OutputStream getOutputStream(String name) throws IOException { - File out = new File(base, convertName(name)); - File parent = out.getParentFile(); - - if (!parent.exists()) { - if (!parent.mkdirs()) { - String err = getI18n().getMessage("DirStorer.getOutputStream.create", out); - throw new IOException(err); - } - } - - OutputStream os = new FileOutputStream(out); - - return os; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/JarStorer.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/JarStorer.java deleted file mode 100644 index 62e71d6066..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/JarStorer.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.utils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.jar.JarOutputStream; -import java.util.zip.ZipEntry; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; - - -/** - * Store a J2EEArchive in a Jar file. - * - * @author Guillaume Sauthier - */ -public class JarStorer extends ArchiveStorer { - - /** - * Jar file filled as OutputStream - */ - private JarOutputStream jos; - - /** - * Creates a new JarStorer object. - * - * @param archive archive to be stored - * @param jar outout jar file - * - * @throws GenBaseException When cannot create output jar - */ - public JarStorer(J2EEArchive archive, File jar) throws GenBaseException { - super(archive); - - setOut(jar.getAbsolutePath()); - - try { - if (!jar.getParentFile().exists()) { - if (!jar.getParentFile().mkdirs()) { - String err = getI18n().getMessage("JarStorer.constr.create", jar.getParentFile()); - throw new GenBaseException(err); - } - } - - jos = new JarOutputStream(new FileOutputStream(jar), archive.getManifest()); - } catch (IOException ioe) { - String err = getI18n().getMessage("JarStorer.constr.ioe", jar); - throw new GenBaseException(err, ioe); - } - } - - /** - * Convert a name from any format in Jar filename format - * - * @param name filename to be converted - * - * @return converted filename - */ - protected String convertName(String name) { - return name.replace('\\', '/'); - } - - /** - * Add a file in Jar - * - * @param name file name to be added - * - * @throws IOException when filling fails. - */ - protected void addFile(String name) throws IOException { - ZipEntry ze = new ZipEntry(convertName(name)); - jos.putNextEntry(ze); - - InputStream is = getArchive().getInputStream(name); - fill(is, jos); - is.close(); - } - - /** - * Store the archive and close the streams. - * - * @throws GenBaseException When Output Jar cannot be closed - */ - public void store() throws GenBaseException { - super.store(); - - try { - jos.flush(); - jos.close(); - } catch (IOException ioe) { - String err = getI18n().getMessage("JarStorer.store.close"); - throw new GenBaseException(err, ioe); - } - } - - /** - * returns the OuputStream corresponding to the given filename. - * - * @param name filename to create - * - * @return An OutputStream - * - * @throws IOException When file creation fails. - */ - protected OutputStream getOutputStream(String name) throws IOException { - ZipEntry ze = new ZipEntry(convertName(name)); - jos.putNextEntry(ze); - - return jos; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/TempRepository.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/TempRepository.java deleted file mode 100644 index 734a11808e..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/TempRepository.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.utils; - -import java.io.File; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -/** - * A TempRepository object is tye main container for temporary - * directories. When an object of WsGen or ClientStubGen wants to use a temporary directory, it - * ask TempRepository instance to create a new one. It is usefull when multiples - * tempo directories are created. Deletion is much more simpler. The - * TempRepository is a Singleton. - * - * @author Guillaume Sauthier - */ -public class TempRepository { - - /** the TempRepository instance */ - private static TempRepository instance = null; - - /** list of temporary directories */ - private List directories; - - /** - * Create a new empty TempRepository. - */ - private TempRepository() { - directories = new Vector(); - } - - /** - * Return the only instance of TempRepository. - * - * @return the only instance of TempRepository. - */ - public static TempRepository getInstance() { - if (instance == null) { - instance = new TempRepository(); - } - - return instance; - } - - /** - * Add a temporary File in the repository (file or directory). - * - * @param file the temporary file or directory to add. - */ - public void addDir(File file) { - directories.add(file); - } - - /** - * Delete all the files contained in the repository. Returns true when - * deletion is successfull, false otherwise. - * - * @return true when deletion is successfull, false otherwise. - */ - public boolean deleteAll() { - boolean result = true; - - for (Iterator i = directories.iterator(); i.hasNext();) { - File dir = (File) i.next(); - i.remove(); - - // delete only if file exists - if (dir.exists()) { - result &= delete(dir); - } - } - - return result; - } - - /** - * Delete a file or directory recursively - * - * @param f file or directory to be deleted - * - * @return true if deletion ok, false otherweise. - */ - private boolean delete(File f) { - if (f.isFile()) { - return f.delete(); - } else { - File[] childs = f.listFiles(); - if (childs == null) { - // no childs - return f.delete(); - } else { - // childs - boolean result = true; - for (int i = 0; i < childs.length; i++) { - result &= delete(childs[i]); - } - return result && f.delete(); - } - } - } - - /** - * Return an empty temporary directory and automatically add it into the - * repository. - * - * @return an empty temporary directory. - * - * @throws IOException when creation fails. - */ - public File createDir() throws IOException { - return createDir(null); - } - - /** - * Return an empty temporary directory and automatically add it into the - * repository. - * - * @return an empty temporary directory. - * - * @throws IOException when creation fails. - */ - public File createDir(final String extension) throws IOException { - // create file - File tmp = File.createTempFile("genbase", extension); - - if (!tmp.delete()) { - throw new IOException("Cannot delete temporary file"); - } - - // create directory - if (!tmp.mkdir()) { - throw new IOException("Cannot create temporary directory"); - } - - // add in repo - addDir(tmp); - - return tmp; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/XMLUtils.java b/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/XMLUtils.java deleted file mode 100644 index 84376b3346..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/java/org/ow2/jonas/generators/genbase/utils/XMLUtils.java +++ /dev/null @@ -1,588 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genbase.utils; - -import java.io.IOException; -import java.io.InputStream; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.ow2.jonas.deployment.client.JonasAppClientDTDs; -import org.ow2.jonas.deployment.client.JonasAppClientSchemas; -import org.ow2.jonas.deployment.common.lib.JEntityResolver; -import org.ow2.jonas.deployment.ear.EarDTDs; -import org.ow2.jonas.deployment.ear.EarSchemas; -import org.ow2.jonas.deployment.ejb.JonasEjbjarDTDs; -import org.ow2.jonas.deployment.ejb.JonasEjbjarSchemas; -import org.ow2.jonas.deployment.web.JonasWebAppDTDs; -import org.ow2.jonas.deployment.web.JonasWebAppSchemas; -import org.ow2.jonas.deployment.web.WebAppDTDs; -import org.ow2.jonas.deployment.web.WebAppSchemas; -import org.ow2.jonas.deployment.ws.JonasWsSchemas; -import org.ow2.jonas.deployment.ws.WsSchemas; -import org.ow2.jonas.generators.genbase.NoJ2EEWebservicesException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - - - - - - - -/** - * XML Utils Class. Holds methods for easier DOM parsing, XML modifications, ... - * @author Guillaume Sauthier - */ -public class XMLUtils { - - /** DOM factory */ - private static DocumentBuilderFactory factory = null; - - /** - * J2EE namespace - */ - private static final String J2EE_NS = "http://java.sun.com/xml/ns/j2ee"; - - /** - * JONAS namespace - */ - private static final String JONAS_NS = "http://www.objectweb.org/jonas/ns"; - - /** - * XML NS namespace - */ - private static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/"; - - /** - * XML Schema instance namespace - */ - private static final String XSI_NS = "http://www.w3.org/2001/XMLSchema-instance"; - - /** - * jonas-session tag name - */ - private static final String SESSION_BEAN = "jonas-session"; - - /** - * jonas-entity tag name - */ - private static final String ENTITY_BEAN = "jonas-entity"; - - /** - * jonas-message-driven tag name - */ - private static final String MESSAGE_BEAN = "jonas-message-driven"; - - /** - * ejb-name tag name - */ - private static final String EJB_NAME = "ejb-name"; - - /** - * servlet tag name - */ - private static final String SERVLET = "servlet"; - - /** - * servlet-name tag name - */ - private static final String SERVLET_NAME = "servlet-name"; - - /** - * jonas-service-ref tag name - */ - private static final String JONAS_SERVICE_REF = "jonas-service-ref"; - - /** - * service-ref-name tag name - */ - private static final String SR_NAME = "service-ref-name"; - - /** - * Empty private constructor for Utility Class - */ - private XMLUtils() { - } - - /** - * Returns a new DocumentBuilderFactory. - * @param validating set the parser validating or not - * @return a new DocumentBuilderFactory. - */ - private static DocumentBuilderFactory newFactory(final boolean validating) { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setValidating(validating); - setFactoryValidation (factory, validating); - - return factory; - } - - /** - * Sets the validation for the factory - * - * @param factory the factory - * @param validating to turn on or off validation - */ - private static void setFactoryValidation (final DocumentBuilderFactory factory, final boolean validating) { - factory.setValidating(validating); - // ignore white space can only be set if parser is validating - factory.setIgnoringElementContentWhitespace(validating); - factory.setAttribute("http://apache.org/xml/features/validation/schema", new Boolean(validating)); - } - - - /** - * Creates a new Document from a given InputStream. Validate the file. - * - * @param is the InputStream to be parsed - * @param name filename - * @param isDTDsAllowed if false, throw exception on DTD Doctype - * - * @return the Document instance. - * - * @throws ParserConfigurationException ParserConfigurationException - * @throws SAXException SAXException - * @throws IOException IOException - * @throws NoJ2EEWebservicesException NoJ2EEWebservicesException - */ - public static Document newDocument(final InputStream is, final String name, final boolean isDTDsAllowed) throws ParserConfigurationException, SAXException, IOException, NoJ2EEWebservicesException { - - return newDocument (is, name, isDTDsAllowed, true); - } - - /** - * Creates a new Document from a given InputStream. - * - * @param is the InputStream to be parsed - * @param name filename - * @param isDTDsAllowed if false, throw exception on DTD Doctype - * @param validate if the file is to be validated - * - * @return the Document instance. - * - * @throws ParserConfigurationException ParserConfigurationException - * @throws SAXException SAXException - * @throws IOException IOException - * @throws NoJ2EEWebservicesException NoJ2EEWebservicesException - */ - public static Document newDocument(final InputStream is, final String name, final boolean isDTDsAllowed, final boolean validate) - throws NoJ2EEWebservicesException, ParserConfigurationException, SAXException, IOException { - - if (factory == null) { - factory = newFactory(validate); - } - - if (factory.isValidating() != validate) { - setFactoryValidation(factory, validate); - } - - DocumentBuilder builder = factory.newDocumentBuilder(); - - // add entity resolver - if (factory.isValidating()) { - JEntityResolver jer = new JEntityResolver(); - // add Schemas - jer.addSchemas(new WebAppSchemas()); - jer.addSchemas(new JonasWebAppSchemas()); - jer.addSchemas(new JonasEjbjarSchemas()); - jer.addSchemas(new JonasAppClientSchemas()); - jer.addSchemas(new EarSchemas()); - jer.addSchemas(new WsSchemas()); - jer.addSchemas(new JonasWsSchemas()); - - // add DTDs - jer.addDtds(new WebAppDTDs()); - jer.addDtds(new JonasWebAppDTDs()); - jer.addDtds(new JonasEjbjarDTDs()); - jer.addDtds(new JonasAppClientDTDs()); - jer.addDtds(new EarDTDs()); - - builder.setEntityResolver(jer); - } - Document doc = builder.parse(is); - // close InputStream when finished parsing - is.close(); - if (doc.getDoctype() != null && !isDTDsAllowed) { - // DTD case - // -> Throw Exception - throw new NoJ2EEWebservicesException(name + " use a DTD. Only XML Schema are accepted for J2EE 1.4 webservices"); - } - return doc; - } - - - /** - * Returns the session/entity/ - * message-driven XML Element with given name. - * @param base jonas-ejb-jar Element. - * @param bName the bean name to be found. - * @return the session/entity/ - * message-driven XML Element. - */ - public static Element getBeanElement(final Element base, final String bName) { - Element found = null; - - // try Session Bean - NodeList sessions = base.getElementsByTagNameNS(JONAS_NS, SESSION_BEAN); - - for (int i = 0; (i < sessions.getLength()) && (found == null); i++) { - Element session = (Element) sessions.item(i); - NodeList names = session.getElementsByTagNameNS(JONAS_NS, EJB_NAME); - - // ejb-name mandatory and unique - Element name = (Element) names.item(0); - - if (name.getFirstChild().getNodeValue().equals(bName)) { - found = session; - } - } - - // try Entity Bean - NodeList entities = base.getElementsByTagNameNS(JONAS_NS, ENTITY_BEAN); - - for (int i = 0; (i < entities.getLength()) && (found == null); i++) { - Element entity = (Element) entities.item(i); - NodeList names = entity.getElementsByTagNameNS(JONAS_NS, EJB_NAME); - - // ejb-name mandatory and unique - Element name = (Element) names.item(0); - - if (name.getFirstChild().getNodeValue().equals(bName)) { - found = entity; - } - } - - // try Message Driven Bean - NodeList messages = base.getElementsByTagNameNS(JONAS_NS, MESSAGE_BEAN); - - for (int i = 0; (i < messages.getLength()) && (found == null); i++) { - Element message = (Element) messages.item(i); - NodeList names = message.getElementsByTagNameNS(JONAS_NS, EJB_NAME); - - // ejb-name mandatory and unique - Element name = (Element) names.item(0); - - if (name.getFirstChild().getNodeValue().equals(bName)) { - found = message; - } - } - - return found; - } - - /** - * Returns the matching servlet XML Element with given name. - * @param base web-app Element. - * @param sName the servlet name to be found. - * @return the matching servlet XML Element. - */ - public static Element getServletElement(final Element base, final String sName) { - Element found = null; - - // Search servlet List - NodeList servlets = base.getElementsByTagNameNS(J2EE_NS, SERVLET); - - for (int i = 0; (i < servlets.getLength()) && (found == null); i++) { - Element servlet = (Element) servlets.item(i); - NodeList names = servlet.getElementsByTagNameNS(J2EE_NS, SERVLET_NAME); - - // servlet-name mandatory and unique - Element name = (Element) names.item(0); - - if (name.getFirstChild().getNodeValue().equals(sName)) { - found = servlet; - } - } - - return found; - } - - /** - * Returns the jonas-service-ref XML Element with given name. - * @param base web-app/ bean Element containing - * jonas-service-ref Element(s). - * @param srName the service-ref name to be found. - * @return the jonas-service-ref XML Element. - */ - public static Element getJonasServiceRef(final Element base, final String srName) { - Element found = null; - - // Search jonas-service-ref list - if (base != null) { - NodeList jsrs = base.getElementsByTagNameNS(JONAS_NS, JONAS_SERVICE_REF); - - for (int i = 0; (i < jsrs.getLength()) && (found == null); i++) { - Element jsr = (Element) jsrs.item(i); - - NodeList names = jsr.getElementsByTagNameNS(JONAS_NS, SR_NAME); - - // service-ref-name mandatory and unique - Element name = (Element) names.item(0); - - if (name != null) { - // found jonas:service-ref-name - if (name.getFirstChild().getNodeValue().equals(srName)) { - found = jsr; - } - } - } - } - - return found; - } - - /** - * default application.xml contains a fake ejb module needed to be parsed - * without error but not needed for a normal application. Than we remove it. - * @param doc application.xml document - */ - public static void cleanDummyApplication(final Document doc) { - Element root = doc.getDocumentElement(); - NodeList nl = root.getElementsByTagNameNS(J2EE_NS, "module"); - root.removeChild(nl.item(0)); - } - - /** - * Add an ejb module in an application Document - * @param app application.xml Document - * @param ejbjar EJBJar archive - */ - public static void addEjb(final Document app, final Archive ejbjar) { - Element module = app.createElementNS(J2EE_NS, "module"); - Element ejb = app.createElementNS(J2EE_NS, "ejb"); - Text ejbText = app.createTextNode(ejbjar.getRootFile().getName()); - ejb.appendChild(ejbText); - module.appendChild(ejb); - - insertModule(app, module); - } - - /** - * Add a client module in an application Document - * @param app application.xml Document - * @param client Client archive - */ - public static void addClient(final Document app, final Archive client) { - Element module = app.createElementNS(J2EE_NS, "module"); - Element clt = app.createElementNS(J2EE_NS, "java"); - Text cltText = app.createTextNode(client.getRootFile().getName()); - clt.appendChild(cltText); - module.appendChild(clt); - - insertModule(app, module); - } - - /** - * Add an web module in an application Document - * @param app application.xml Document - * @param webapp WebApp archive - * @param ctx context-root - */ - public static void addWebApp(final Document app, final Archive webapp, final String ctx) { - Element module = app.createElementNS(J2EE_NS, "module"); - Element web = app.createElementNS(J2EE_NS, "web"); - Element webUri = app.createElementNS(J2EE_NS, "web-uri"); - Element context = app.createElementNS(J2EE_NS, "context-root"); - - Text webText = app.createTextNode(webapp.getName()); - Text ctxText = app.createTextNode(ctx); - webUri.appendChild(webText); - context.appendChild(ctxText); - - web.appendChild(webUri); - web.appendChild(context); - - module.appendChild(web); - - insertModule(app, module); - } - - /** - * Insert a module in application Document - * @param app application.xml Document - * @param module module Element - */ - private static void insertModule(final Document app, final Element module) { - Element application = app.getDocumentElement(); - Element first = findFirstSecurityRole(application); - application.insertBefore(module, first); - } - - /** - * return the first found security-role Element (or null if not found) - * @param app application.xml Document - * @return the first found security-role Element (or null if not found) - */ - private static Element findFirstSecurityRole(final Element app) { - NodeList nl = app.getElementsByTagNameNS(J2EE_NS, "security-role"); - - if (nl.getLength() == 0) { - return null; - } else { - return (Element) nl.item(0); - } - } - - /** - * Creates a new XML Document for an empty jonas-client.xml. - * @return Returns a new XML Document for an empty jonas-client.xml. - */ - public static Document newJonasClient() { - - Document root = createDocument(); - - // jonas-client - Element jonasClient = root.createElementNS(JONAS_NS, "jonas-client"); - - // Automatically retrieve latest schema name - String schema = JonasAppClientSchemas.getLastSchema(); - addNamespaces(jonasClient, schema); - root.appendChild(jonasClient); - - return root; - } - - /** - * Creates a new XML Document for an empty application.xml. - * @return Returns a new XML Document for an empty application.xml. - */ - public static Document newApplication() { - - Document root = createDocument(); - - // jonas-client - Element application = root.createElementNS(J2EE_NS, "application"); - - // Automatically retrieve latest schema name - String schema = EarSchemas.getLastSchema(); - addNamespaces(application, schema); - root.appendChild(application); - - return root; - } - - /** - * @return Returns an empty jonas-web-app Document - */ - public static Document newJonasWeb() { - - Document root = createDocument(); - - // jonas-web-app - Element jonasWebApp = root.createElementNS(JONAS_NS, "jonas-web-app"); - - // Automatically retrieve latest schema name - int index = JonasWebAppSchemas.JONAS_WEBAPP_SCHEMAS.length - 1; - String schema = JonasWebAppSchemas.JONAS_WEBAPP_SCHEMAS[index]; - addNamespaces(jonasWebApp, schema); - root.appendChild(jonasWebApp); - - return root; - } - - /** - * @return Returns an empty Document. - */ - private static Document createDocument() { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - DocumentBuilder builder; - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new RuntimeException(e); - } - return builder.newDocument(); - } - - /** - * Add common namespaces to the given element and add schemaLocation - * @param e the Element to be updated - * @param schema the schema location value - */ - private static void addNamespaces(final Element e, final String schema) { - Document root = e.getOwnerDocument(); - // create xmlns="http://www.w3.org/XML/1998/namespace" - Attr xmlns = root.createAttributeNS(XMLNS_NS, "xmlns"); - xmlns.setValue(JONAS_NS); - - // create xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - Attr xsi = root.createAttributeNS(XMLNS_NS, "xmlns:xsi"); - xsi.setValue(XSI_NS); - - // create xsi:schemaLocation="http://www.objectweb.org/jonas/ns - // http://www.objectweb.org/jonas/ns/" - Attr schemaLocation = root.createAttributeNS(XSI_NS, "xsi:schemaLocation"); - schemaLocation.setValue(JONAS_NS + " " + JONAS_NS + "/" + schema); - - e.setAttributeNodeNS(xmlns); - e.setAttributeNodeNS(xsi); - e.setAttributeNodeNS(schemaLocation); - - } - - /** - * Check if the web module name is already declared in the application.xml Document - * @param app the application.xml Doc - * @param name web application name - * @return Returns true if the module is already declared, false otherwise. - */ - public static boolean isWebModuleAlreadyDeclared(final Document app, final String name) { - - // Corresponding Xpath expression : //j2ee:module/j2ee:web/j2ee:web-uri == name - - Element found = null; - NodeList modules = app.getElementsByTagNameNS(J2EE_NS, "module"); - for (int i = 0; (i < modules.getLength()) && (found == null); i++) { - - // we check each module to see if it is a web module - Element module = (Element) modules.item(i); - NodeList webModules = module.getElementsByTagNameNS(J2EE_NS, "web"); - for (int j = 0; (j < webModules.getLength()) && (found == null); j++) { - - // We should only have 0..1 web module in a j2ee:module - Element webModule = (Element) webModules.item(j); - NodeList weburiModules = webModule.getElementsByTagNameNS(J2EE_NS, "web-uri"); - // web-uri is mandatory and is the first element under j2ee:web - Element webUri = (Element) weburiModules.item(0); - if (webUri.getFirstChild().getNodeValue().equals(name)) { - found = webUri; - } - } - } - // "true" if element was found - return (found != null); - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/META-INF/jonas-generators-base.bnd b/jonas/modules/generators/jonas-genbase/src/main/resources/META-INF/jonas-generators-base.bnd deleted file mode 100644 index 37f358cd97..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/META-INF/jonas-generators-base.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.generators.genbase.* diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/I18n.properties b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/I18n.properties deleted file mode 100644 index 932c7397ba..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/I18n.properties +++ /dev/null @@ -1,27 +0,0 @@ -# $Id$ - -Application.init.unpackException Cannot unpack archive ''{0}'' -Application.init.earDDExc Cannot load application Descriptor from ''{0}'' - -FileArchive.constr.manifest Error in Manifest from ''{0}'' - -J2EEArchive.isDTDsAllowed.noFactory No current generator factory. The setCurrentFactory should be called -J2EEArchive.isDTDsAllowed.noConfig No configuration found in the current generator factory - -JarArchive.constr.jar Cannot construct a JarFile from ''{0}'' - -WebApp.loadDescriptors.prepare Cannot setup an appropriate XML Parser -WebApp.loadDescriptors.parseError Parse error in web/jonas-web Descriptor -WebApp.init.loader Cannot create WebApp ClassLoader for ''{0}'' - -Client.loadDescriptors.prepare Cannot setup an appropriate XML Parser -Client.loadDescriptors.parseError Parse error in jonas-client Descriptor -Client.init.loader Cannot create Client ClassLoader for ''{0}'' - -EjbJar.loadDescriptors.prepare Cannot setup an appropriate XML Parser -EjbJar.loadDescriptors.parseError Parse error in jonas-ejb-jar Descriptor -EjbJar.init.loader Cannot create EjbJar ClassLoader for ''{0}'' - -Application.loadDescriptors.prepare Cannot setup an appropriate XML Parser -Application.loadDescriptors.parseError Parse error in application Descriptor -Application.init.loader Cannot create Application ClassLoader for ''{0}'' diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/application.xml b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/application.xml deleted file mode 100644 index 158be67cdb..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/application.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - generated ear - - fake - - diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/context.xml b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/context.xml deleted file mode 100644 index dd1d6b33bb..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/context.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/jonas-web.xml b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/jonas-web.xml deleted file mode 100644 index f318331ef7..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/jonas-web.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web-jetty.xml b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web-jetty.xml deleted file mode 100644 index 154ddef5f9..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web-jetty.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web.xml b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web.xml deleted file mode 100644 index a434390ce3..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/archive/web.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - WebApp Dispatching SOAP Requests to SSBs - - - - wsdl - text/xml - - - - - xsd - text/xml - - - - index.html - index.jsp - - - \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/generator/I18n.properties b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/generator/I18n.properties deleted file mode 100644 index 8de0a2e8ad..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/generator/I18n.properties +++ /dev/null @@ -1,3 +0,0 @@ -# $Id$ - -AbsGenerator.constr.ioe Cannot create temporary directories diff --git a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/utils/I18n.properties b/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/utils/I18n.properties deleted file mode 100644 index 0ee347d27e..0000000000 --- a/jonas/modules/generators/jonas-genbase/src/main/resources/org/ow2/jonas/generators/genbase/utils/I18n.properties +++ /dev/null @@ -1,11 +0,0 @@ -# $Id$ - -ArchiveStorer.store.addFile Cannot add file ''{0}'' in archive -ArchiveStorer.store.serialize Cannot serialize XML Descriptor ''{0}'' - -DirStorer.constr.create Cannot create directory ''{0}'' -DirStorer.getOutputStream.create Cannot create parent directories ''{0}'' - -JarStorer.constr.ioe Cannot create file ''{0}'' -JarStorer.store.close Cannot close jar output stream -JarrStorer.constr.create Cannot create directory ''{0}'' diff --git a/jonas/modules/generators/jonas-genclientstub/pom.xml b/jonas/modules/generators/jonas-genclientstub/pom.xml deleted file mode 100644 index 5b0570abfd..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - org.ow2.jonas - jonas-generators - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-generators-clientstubs - bundle - JOnAS :: Generators :: Client Stubs - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-generators-base - ${project.version} - - - org.ow2.fastrmic - fastrmic - - - org.ow2.carol - carol - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGen.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGen.java deleted file mode 100644 index 55b682832e..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGen.java +++ /dev/null @@ -1,276 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub; - -import java.io.File; -import java.util.StringTokenizer; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.generators.genbase.NoJ2EEWebservicesException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.generator.GeneratorFactories; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.jonas.generators.genclientstub.generator.GeneratorFactory; -import org.ow2.jonas.generators.genclientstub.modifier.ModifierFactory; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Main class of the client stub generator Class. Some code come from WsGen - * classes (Guillaume Sauthier) - * @author Florent Benoit - */ -public class ClientStubGen { - - /** - * logger. - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.generators.genclientstub"); - - /** - * Set to false if input file cannot be processed (DTDs). - */ - private boolean inputModified = true; - - /** - * Private Constructor for Utility class. - */ - public ClientStubGen() { - } - - /** - * Main method. - * @param args Commend line args - * @throws Exception When the execute method fails - */ - public static void main(final String[] args) throws Exception { - ClientStubGen stubGen = new ClientStubGen(); - stubGen.execute(args); - } - - /** - * Method used by main method and by external class to retrieve the name of - * the modified or created file by ClientStubGen. - * @param args command line arguments - * @return the name of the modified or built - * @throws Exception When a failure occurs - */ - public String execute(final String[] args) throws Exception { - // store configuration properties - Config config = parseInput(args); - - if (config.isHelp() || config.isError() || config.getInputname() == null) { - // display usage message - usage(); - return null; - } - - return execute(config, null); - } - - /** - * Method used by main method and by external class to retrieve the name of - * the modified or created file by ClientStubGen. - * @param config the given config - * @param deployable the deployable to analyze - * @return the name of the modified or built - * @throws Exception When a failure occurs - */ - public String execute(final Config config, final IDeployable deployable) throws Exception { - GeneratorFactory gf = GeneratorFactory.getInstance(); - - // For this client generator, the use of DTDs is allowed - config.setDTDsAllowed(true); - - // setup configuration - gf.setConfiguration(config); - GeneratorFactories.setCurrentFactory(gf); - Archive modifiedArchive = null; - ArchiveModifier am = null; - // get the ArchiveModifier - try { - //TODO : get DTD only exception - am = ModifierFactory.getModifier(config.getInputname(), true, deployable); - - logger.log(BasicLevel.INFO, "Client stub generation for '" + config.getInputname() + "'"); - - // modify the given archive - modifiedArchive = am.modify(); - - // Get path - String path = modifiedArchive.getRootFile().getCanonicalPath(); - - return path; - } catch (NoJ2EEWebservicesException e) { - logger.log(BasicLevel.WARN, config.getInputname() + "Error while generating stubs : '" + e.getMessage() - + "'"); - inputModified = false; - return config.getInputname(); - } finally { - // close archive - if (am != null && am.getArchive() != null) { - am.getArchive().close(); - } - - modifiedArchive = null; - am = null; - - // delete all the temporary files created - TempRepository.getInstance().deleteAll(); - - System.gc(); - } - - } - - /** - * Parse Command Line input and returns a Config object. - * @param args Command Lines params - * @return a Config object - */ - private static Config parseInput(final String[] args) { - Config config = new Config(); - - // Get args - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - - if (arg.equals("-help") || arg.equals("-?")) { - config.setHelp(true); - - continue; - } - - if (arg.equals("-verbose")) { - config.setVerbose(true); - - continue; - } - - if (arg.equals("-debug")) { - config.setDebug(true); - config.setVerbose(true); - - continue; - } - - if (arg.equals("-keepgenerated")) { - config.setKeepGenerated(true); - - continue; - } - - if (arg.equals("-noconfig")) { - config.setNoConfig(true); - - continue; - } - - if (arg.equals("-novalidation")) { - config.setParseWithValidation(false); - - continue; - } - - if (arg.equals("-javac")) { - config.setNameJavac(args[++argn]); - - continue; - } - - if (arg.equals("-javacopts")) { - argn++; - - if (argn < args.length) { - StringTokenizer st = new StringTokenizer(args[argn]); - - while (st.hasMoreTokens()) { - config.getJavacOpts().add(st.nextToken()); - } - } else { - config.setError(true); - } - - continue; - } - - if (arg.equals("-d")) { - argn++; - - if (argn < args.length) { - config.setOut(new File(args[argn])); - } else { - config.setError(true); - } - - continue; - } - - if (args[argn] != null) { - config.setInputname(args[argn]); - } else { - config.setError(true); - } - } - - return config; - - } - - /** - * Display the usage. - */ - public static void usage() { - StringBuffer msg = new StringBuffer(); - msg.append("Usage: java org.ow2.jonas.generators.genclientstub.ClientStubgen -help \n"); - msg.append(" to print this help message \n"); - msg.append(" or java org.ow2.jonas.generators.genclientstub.ClientStubgen \n"); - msg.append("Options include: \n"); - msg.append(" -d specify where to place the generated files \n"); - msg.append(" -novalidation parse the XML deployment descriptors without \n"); - msg.append(" validation \n"); - msg.append(" -javac specify the java compiler to use \n"); - msg.append(" -javacopts specify the options to pass to the java compiler \n"); - msg.append(" -keepgenerated do not delete intermediate generated files \n"); - msg.append(" -noconfig do not generate configuration files (require \n"); - msg.append(" user provided files) \n"); - msg.append(" -verbose \n"); - msg.append(" -debug \n"); - msg.append(" \n"); - msg.append(" Input_File the ejb-jar, war or ear filename\n"); - System.out.println(msg.toString()); - } - - /** - * @return the inputModified flag - */ - public boolean isInputModified() { - return inputModified; - } -} diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGenException.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGenException.java deleted file mode 100644 index 5a43b64b2a..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/ClientStubGenException.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub; - -import org.ow2.jonas.generators.genbase.GenBaseException; - -/** - * This class represents the exception that can be throwned by the ClientStubGen tool. - * @author Florent Benoit - */ -public class ClientStubGenException extends GenBaseException { - - /** - * Constructs a ClientStubGenException with no specified detail message. - */ - public ClientStubGenException() { - super(); - } - - /** - * Constructs an ClientStubGenException with the specified detail message. - * @param msg Error message - */ - public ClientStubGenException(String msg) { - super(msg); - } - - /** - * Constructs an ClientStubGenException with the specified detail message. - * @param inner Cause Exception to wrap - */ - public ClientStubGenException(Exception inner) { - super(inner); - } - - /** - * Constructs an ClientStubGenException with the specified detail message. - * @param msg Error message - * @param inner Cause Exception to wrap - */ - public ClientStubGenException(String msg, Exception inner) { - super(msg, inner); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/Generator.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/Generator.java deleted file mode 100644 index a61baa8f66..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/Generator.java +++ /dev/null @@ -1,242 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub.generator; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.fastrmic.RMIC; -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.AbsGenerator; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genclientstub.ClientStubGenException; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.loader.AbsModuleClassLoader; -import org.ow2.jonas.lib.util.Cmd; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * Generator used to generate Stubs for clients. - * @author Florent Benoit - */ -public class Generator extends AbsGenerator { - - /** - * logger. - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.generators.genclientstub"); - /** - * i18n. - */ - private static I18n i18n = I18n.getInstance(Generator.class); - - /** - * EjbRef used for this generator. - */ - private IEJBRefDesc ejbRef = null; - - /** - * Class used if no ejbRef is given. - */ - private String intfStubClassName = null; - - /** - * Archive used by the modifier. - */ - private Archive archive = null; - - /** - * Creates a new Generator with the given Config. - * @param config internal configuration object. - * @param ejbRef reference to the ejb on which we want create the stub - * @param intfStubClassName name of the interface - * @param archive given ejbjar, webapp, ... - * @throws GenBaseException When sources and target temporary directory - * cannot be created - */ - public Generator(Config config, IEJBRefDesc ejbRef, String intfStubClassName, Archive archive) throws GenBaseException { - super(config); - this.ejbRef = ejbRef; - this.intfStubClassName = intfStubClassName; - this.archive = archive; - } - - /** - * Generate stub files. - * @throws ClientStubGenException When generation fails. - */ - public void generate() throws ClientStubGenException { - - try { - //URL[] urls = null; - String archiveClasspath = null; - - J2EEArchive arch = (J2EEArchive) this.archive; - AbsModuleClassLoader loader = (AbsModuleClassLoader) arch.getModuleClassloader(); - - archiveClasspath = loader.getClasspath(); - - // itf class - String itfClass = null; - if (ejbRef != null) { - itfClass = ejbRef.getHome(); - } else { - itfClass = intfStubClassName; - } - - // TODO Now try to load the class and check if stub is here - - // Add to the rmic Classpath all the lib and classes of the archive - String classpath = getConfig().getClasspath() + File.pathSeparator + archiveClasspath; - - // Add client.jar to the classpath - String jRoot = JProp.getJonasRoot(); - if (jRoot != null) { - classpath = jRoot + File.separator + "lib" + File.separator + "client.jar" + File.pathSeparator + classpath; - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Using classpath '" + classpath + "'."); - } - - - // Get current protocol - String rmiName = ConfigurationRepository.getCurrentConfiguration().getProtocol().getName(); - - if (rmiName.equalsIgnoreCase("iiop") && itfClass != null) { - Cmd iiopCmd = new Cmd(getConfig().getJavaHomeBin() + getConfig().getNameRmic()); - iiopCmd.addArgument("-classpath"); - iiopCmd.addArgument(classpath); - iiopCmd.addArgument("-iiop"); - iiopCmd.addArgument("-poa"); - iiopCmd.addArgument("-always"); - iiopCmd.addArgument("-keepgenerated"); - iiopCmd.addArgument("-g"); - - iiopCmd.addArgument("-d"); - iiopCmd.addArgument(getClasses().getCanonicalPath()); - iiopCmd.addArguments(getConfig().getJavacOpts()); - - // add itf class as arg name - iiopCmd.addArgument(itfClass); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Running '" + iiopCmd.toString() + "'"); - } - if (iiopCmd.run()) { - getLogger().log(BasicLevel.INFO, - "Client stubs for classname '" + itfClass + "' successfully generated for protocol 'iiop'."); - } else { - String err = i18n.getMessage("Generator.generate.error"); - getLogger().log(BasicLevel.ERROR, err); - throw new ClientStubGenException(err); - } - - } else if (itfClass != null && (("jrmp".equalsIgnoreCase(rmiName) || "irmi".equalsIgnoreCase(rmiName)))) { - Cmd jrmpCmd = new Cmd(getConfig().getJavaHomeBin() + getConfig().getNameRmic()); - jrmpCmd.addArgument("-classpath"); - jrmpCmd.addArgument(classpath); - jrmpCmd.addArgument("-keepgenerated"); - jrmpCmd.addArgument("-g"); - jrmpCmd.addArgument("-d"); - jrmpCmd.addArgument(getClasses().getCanonicalPath()); - jrmpCmd.addArguments(getConfig().getJavacOpts()); - - // add itf class as arg name - jrmpCmd.addArgument(itfClass); - - ArrayList args = new ArrayList(); - boolean skip = true; - for (Iterator it = jrmpCmd.getCommandLine(); it.hasNext();) { - Object o = it.next(); - if (skip) { - skip = false; - continue; - } - args.add(o); - } - - // Build the stub using Fast RMIC - String[] a = (String[]) args.toArray(new String[] {}); - RMIC rmic = new RMIC(a); - - if (rmic.run()) { - getLogger().log(BasicLevel.INFO, - "Client stubs for classname '" + itfClass + "' successfully generated for protocol '" + rmiName + "'."); - } else { - String err = i18n.getMessage("Generator.generate.error"); - getLogger().log(BasicLevel.ERROR, err); - throw new ClientStubGenException(err, rmic.getException()); - } - - } - - - - } catch (Exception e) { - String err = i18n.getMessage("Generator.generate.error"); - getLogger().log(BasicLevel.ERROR, err); - throw new ClientStubGenException(err, e); - } - - } - - /** - * Compile generated java files into classes directory. Do nothing in case - * of clientstub generator as all classes are generated - * @throws ClientStubGenException When compilation fails - */ - public void compile() throws ClientStubGenException { - } - - /** - * Add generated files into an Archive - * @param archive the archive destination of generated files. - * @throws ClientStubGenException When files cannot be added in the given - * Archive. - */ - public void addFiles(Archive archive) throws ClientStubGenException { - if (archive instanceof WebApp) { - archive.addDirectoryIn("WEB-INF/classes/", getClasses()); - } else if (archive instanceof EjbJar) { - archive.addDirectory(getClasses()); - } else if (archive instanceof Client) { - archive.addDirectory(getClasses()); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/GeneratorFactory.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/GeneratorFactory.java deleted file mode 100644 index 6ca3d48bf3..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/generator/GeneratorFactory.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub.generator; - -import org.ow2.jonas.generators.genbase.generator.Config; - -/** - * A GeneratorFactory has to be extended by specific generation - * mecanism. - * @author Florent Benoit - */ -public class GeneratorFactory implements org.ow2.jonas.generators.genbase.generator.GeneratorFactory { - - /** GeneratorFactory unique instance */ - private static GeneratorFactory instance = null; - - /** Configuration to set on instanciated Generator */ - private Config configuration; - - /** - * Utility class, no constructor - */ - private GeneratorFactory() { - - } - - /** - * Returns the unique GeneratorFactory instance. - * @return the unique GeneratorFactory instance. - */ - public static GeneratorFactory getInstance() { - if (instance == null) { - instance = newInstance(); - } - - return instance; - } - - /** - * Create a new generatorFactory instance - * @return a new generatorFactory instance. - - */ - private static GeneratorFactory newInstance() { - return new GeneratorFactory(); - } - - /** - * Set the Configuration to use with newly created Generator. - * @param config the Configuration to use with newly created Generator. - */ - public void setConfiguration(Config config) { - this.configuration = config; - } - - /** - * Get the Configuration to use with newly created Generator. - * @return the Configuration to use with newly created Generator - */ - public Config getConfiguration() { - return configuration; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/AbsArchiveModifier.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/AbsArchiveModifier.java deleted file mode 100644 index fb82f93d8b..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/AbsArchiveModifier.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.genclientstub.ClientStubGenException; -import org.ow2.jonas.generators.genclientstub.generator.Generator; - - -/** - * Defines common methods used by all modifier - */ -public abstract class AbsArchiveModifier extends ArchiveModifier { - - /** - * Constructor - * @param archive the j2ee archive - */ - public AbsArchiveModifier(J2EEArchive archive) { - super(archive); - } - - /** - * Modify the current archive and return a modified archive. - * @return a modified archive. - * @throws GenBaseException When Client Generation or storing phase fails. - */ - public abstract Archive modify() throws GenBaseException; - - /** - * Generates stub/tie classes for a given archive with its config - * @param config configuration to use for the generator - * @param archive the file containing the remote class - * @throws ClientStubGenException if the generation fails - */ - protected void generateFoundStubs(Config config, Archive archive) throws ClientStubGenException { - - // List of classes on which generate stubs - List classesStub = new ArrayList(); - try { - List files = archive.getContainedFiles(); - - for (Iterator itFiles = files.iterator(); itFiles.hasNext();) { - String clName = (String) itFiles.next(); - if (clName.endsWith("_Stub.class") || clName.endsWith("_Tie.class")) { - // Extract classname from stub and add entry in the list - if (archive instanceof WebApp) { - if (clName.startsWith("WEB-INF/classes/")) { - classesStub.add(clName.substring("WEB-INF/classes/".length())); - } - } else { - classesStub.add(clName); - } - } - } - - // launch generation for all classes found - for (Iterator itClass = classesStub.iterator(); itClass.hasNext();) { - String clName = (String) itClass.next(); - - // Remove stub name - int removeStubIdx = 0; - if (clName.endsWith("_Stub.class")) { - removeStubIdx = clName.length() - "_Stub.class".length(); - } else if (clName.endsWith("_Tie.class")) { - removeStubIdx = clName.length() - "_Tie.class".length(); - } else { - continue; - } - clName = clName.substring(0, removeStubIdx); - - // Remove the _ from the className - int idx = clName.lastIndexOf('/') + 1; - if (clName.charAt(idx) == '_') { - String pkgName = clName.substring(0, idx); - clName = pkgName + clName.substring(idx + 1, clName.length()); - } - - // Translate / into . (/ is in jar entry, classname should contain .) - clName = clName.replaceAll("/", "."); - - // javax object and existing omg stubs - if (clName.indexOf("javax.") != -1 || clName.indexOf("org.omg.stub") != -1) { - continue; - } - - - // Doesn't take into account Home and Remote - if (clName.indexOf("Home") != -1 || clName.indexOf("Remote") != -1) { - continue; - } - - Generator g = new Generator(config, null, clName, archive); - try { - g.generate(); - g.compile(); - } catch (ClientStubGenException cstge) { - continue; - } - // add files in archive - g.addFiles(archive); - } - } catch (Exception e) { - throw new ClientStubGenException("Cannot find/build stubs from the file " + archive.getRootFile(), e); - } - - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ApplicationModifier.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ApplicationModifier.java deleted file mode 100644 index bff14ad80c..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ApplicationModifier.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.util.Iterator; - -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.AbsApplicationModifier; -import org.ow2.jonas.generators.genclientstub.generator.GeneratorFactory; - - -/** - * Modify a given Application. - * (code from WsGen) - * @author Florent Benoit - */ -public class ApplicationModifier extends AbsApplicationModifier { - - /** - * Creates a new ApplicationModifier. - * - * @param archive the Application J2EE archive - */ - public ApplicationModifier(Application archive) { - super(archive, GeneratorFactory.getInstance().getConfiguration()); - } - - /** - * initialize modifier - */ - protected void init() { - - // fill ejbjar list - for (Iterator i = getApplication().getEjbJars(); i.hasNext();) { - EjbJar ejbjar = (EjbJar) i.next(); - getEjbModifiers().add(new EjbJarModifier(ejbjar)); - } - - // fill webapp list - for (Iterator i = getApplication().getWebApps(); i.hasNext();) { - WebApp webapp = (WebApp) i.next(); - getWebModifiers().add(new WebAppModifier(webapp)); - } - - // fill client list - for (Iterator i = getApplication().getClients(); i.hasNext();) { - Client client = (Client) i.next(); - getCltModifiers().add(new ClientModifier(client)); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ClientModifier.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ClientModifier.java deleted file mode 100644 index ba36fee04b..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ClientModifier.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genclientstub.generator.Generator; -import org.ow2.jonas.generators.genclientstub.generator.GeneratorFactory; - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Modify a given Client. - * - * @author Florent Benoit - */ -public class ClientModifier extends AbsArchiveModifier { - - /** client */ - private Client client; - - /** - * Creates a new ClientModifier object. - * - * @param client Client Archive - */ - public ClientModifier(Client client) { - super(client); - this.client = client; - } - - /** - * Modify the current archive and return a modified archive. - * - * @return a modified archive. - * - * @throws GenBaseException When Client Generation or storing phase fails. - */ - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing Client " + client.getName()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - - - // Found automatically the stubs - generateFoundStubs(gf.getConfiguration(), client); - - - - // Ejb-Ref - List ejbRefs = client.getEjbRefDescs(); - for (Iterator j = ejbRefs.iterator(); j.hasNext();) { - IEJBRefDesc ejbRef = (IEJBRefDesc) j.next(); - - // launch generation - Generator g = new Generator(gf.getConfiguration(), ejbRef, null, client); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(client); - } - - return save(gf.getConfiguration(), "clients" + File.separator + client.getRootFile().getName()); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/EjbJarModifier.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/EjbJarModifier.java deleted file mode 100644 index 14bd67a3f3..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/EjbJarModifier.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Ejb; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genclientstub.ClientStubGenException; -import org.ow2.jonas.generators.genclientstub.generator.Generator; -import org.ow2.jonas.generators.genclientstub.generator.GeneratorFactory; - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Modify a given EjbJar. - * @author Florent Benoit - */ -public class EjbJarModifier extends AbsArchiveModifier { - - /** - * Modified ejbjar - */ - private EjbJar ejbjar = null; - - /** - * Creates a new EjbJarModifier object. - * @param ejbjar EjbJar Archive - */ - public EjbJarModifier(EjbJar ejbjar) { - super(ejbjar); - this.ejbjar = ejbjar; - } - - /** - * modify the current EjbJar. If EjbJar is contained in not an application - * and have webservices endpoints, A DummyApplication is created and - * modification process launched against the newly created application. If - * EjbJar is contained in an application + webservices endpoints, a - * DummyWebApp is created to hold "facade" servlet managing SOAP processing. - * @return an EjbJar or an Application Archive - * @throws GenBaseException When generation or storing fails - * @throws ClientStubGenException When generation or storing fails - */ - public Archive modify() throws GenBaseException, ClientStubGenException { - - getLogger().log(BasicLevel.INFO, "Processing EjbJar " + ejbjar.getName()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - - // Found automatically the stubs - generateFoundStubs(gf.getConfiguration(), ejbjar); - - // Ejb-Ref - List ejbs = ejbjar.getEjbs(); - for (Iterator i = ejbs.iterator(); i.hasNext();) { - Ejb ejb = (Ejb) i.next(); - List ejbRefs = ejb.getEjbRefDescs(); - for (Iterator j = ejbRefs.iterator(); j.hasNext();) { - IEJBRefDesc ejbRef = (IEJBRefDesc) j.next(); - - // launch generation - Generator g = new Generator(gf.getConfiguration(), ejbRef, null, ejbjar); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(ejbjar); - } - } - - return save(gf.getConfiguration(), "ejbjars" + File.separator + ejbjar.getRootFile().getName()); - - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ModifierFactory.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ModifierFactory.java deleted file mode 100644 index 516a6ab272..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/ModifierFactory.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.io.File; -import java.io.IOException; -import java.util.jar.JarFile; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.FileArchive; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.JarArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.AbsModifierFactory; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.genclientstub.ClientStubGenException; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJBDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; - -/** - * Used to create the right ArchiveModifier from a given filename (ear, jar, - * war, ... - * @author Guillaume Sauthier - */ -public class ModifierFactory extends AbsModifierFactory { - - /** - * I18n. - */ - private static I18n i18n = I18n.getInstance(ModifierFactory.class); - - /** - * Empty Constructor for utility class. - */ - private ModifierFactory() { - super(); - } - - /** - * Returns an ArchiveModifier according to archive type - * (application, ejbjar, webapp or client). - * @param filename input filename. - * @return an ArchiveModifier. - * @exception GenBaseException when archive creation fails. - */ - public static ArchiveModifier getModifier(final String filename) throws GenBaseException { - return getModifier(filename, true, null); - } - - /** - * Returns an ArchiveModifier according to archive type - * (application, ejbjar, webapp or client). - * @param filename input filename. - * @param init Initialize the archive. - * @param deployable the current deployable (can be null) - * @return an ArchiveModifier. - * @exception GenBaseException when archive creation fails. - */ - public static ArchiveModifier getModifier(final String filename, final boolean init, final IDeployable deployable) throws GenBaseException { - Archive archive = null; - J2EEArchive j2eeArchive = null; - ArchiveModifier modifier = null; - int mode; - IDeployable localDeployable = null; - - File file = new File(filename); - - if (file.exists()) { - if (file.isFile()) { - // should be a jar file - // test jar file - JarFile jarfile; - - try { - jarfile = new JarFile(file); - } catch (IOException ioe) { - // not a jar file - String err = i18n.getMessage("ModifierFactory.getModifier.notjar", filename); - throw new ClientStubGenException(err); - } - - // Create the inner Archive - archive = new JarArchive(file); - } else { - // directory unpacked - // Create the inner Archive - archive = new FileArchive(file); - } - - try { - if (deployable == null) { - // Build Archive - IArchive fileArchive = ArchiveManager.getInstance().getArchive(file); - localDeployable = DeployableHelper.getDeployable(fileArchive); - } else { - localDeployable = deployable; - } - } catch (DeployableHelperException e) { - throw new ClientStubGenException("Cannot get a deployable for the archive '" + archive + "'", e); - } - - // now we are sure that filename is a correct jar - if (localDeployable instanceof EARDeployable) { - // Application J2EE Archive - j2eeArchive = new Application(archive, localDeployable); - mode = APPLICATION; - } else if (localDeployable instanceof EJBDeployable) { - // EjbJar J2EE Archive - j2eeArchive = new EjbJar(archive); - mode = EJBJAR; - - } else if (localDeployable instanceof WARDeployable) { - // WebApp J2EE Archive - j2eeArchive = new WebApp(archive); - mode = WEBAPP; - - } else if (localDeployable instanceof CARDeployable) { - // Client J2EE Archive - j2eeArchive = new Client(archive); - mode = CLIENT; - - } else { - // unsupported archive type - String err = i18n.getMessage("ModifierFactory.getModifier.unsupported", filename); - throw new ClientStubGenException(err); - } - } else { - String err = i18n.getMessage("ModifierFactory.getModifier.notfound", filename); - throw new ClientStubGenException(err); - } - - // init the archive - if (init) { - j2eeArchive.initialize(); - } - - // create the modifier - switch (mode) { - case APPLICATION: - modifier = new ApplicationModifier((Application) j2eeArchive); - break; - case EJBJAR: - modifier = new EjbJarModifier((EjbJar) j2eeArchive); - break; - case WEBAPP: - modifier = new WebAppModifier((WebApp) j2eeArchive); - break; - case CLIENT: - modifier = new ClientModifier((Client) j2eeArchive); - break; - default: - // cannot happen - } - - return modifier; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/WebAppModifier.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/WebAppModifier.java deleted file mode 100644 index 67e3040233..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/modifier/WebAppModifier.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genclientstub.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genclientstub.generator.Generator; -import org.ow2.jonas.generators.genclientstub.generator.GeneratorFactory; - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Modify a given WebApp. - * - * @author Guillaume Sauthier - */ -public class WebAppModifier extends AbsArchiveModifier { - - /** webapp */ - private WebApp web; - - /** - * Creates a new WebAppModifier - * - * @param webapp - * the WebApp J2EE archive - */ - public WebAppModifier(WebApp webapp) { - super(webapp); - web = webapp; - } - - /** - * Modify the current archive and return a modified archive. - * - * @return a modified archive. - * - * @throws GenBaseException - * When modification fails - */ - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing WebApp " + web.getName()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - - // Found automatically the stubs - generateFoundStubs(gf.getConfiguration(), web); - - // Ejb-Ref - List ejbRefs = web.getEjbRefDescs(); - for (Iterator j = ejbRefs.iterator(); j.hasNext();) { - IEJBRefDesc ejbRef = (IEJBRefDesc) j.next(); - - // launch generation - Generator g = new Generator(gf.getConfiguration(), ejbRef, null, web); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(web); - } - - return save(gf.getConfiguration(), "webapps" + File.separator - + web.getName()); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/wrapper/ClientGenStubWrapper.java b/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/wrapper/ClientGenStubWrapper.java deleted file mode 100644 index 4c17b6eca3..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/java/org/ow2/jonas/generators/genclientstub/wrapper/ClientGenStubWrapper.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genclientstub.wrapper; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.ow2.jonas.lib.bootstrap.LoaderManager; - - -/** - * ClientGenStub wrapper Used to launch ClientGenStub in DeployFile of JSR 88 - * @author Florent Benoit - */ -public class ClientGenStubWrapper { - - /** - * ClientGenStub fully qualified classname - */ - private static final String GENSTUB_CLASSNAME = "org.ow2.jonas.generators.genclientstub.ClientStubGen"; - - /** - * Number of arguments of execute method - */ - private static final int ARGS_NUMBER = 3; - - /** - * Method execute of ClientGenStub - */ - private static Method executeMethod = null; - - /** - * The archive was changed or not ? - */ - private static Method isInputModifiedMethod = null; - - /** - * ClientGenStub class - */ - private Object clientGenStub = null; - - /** - * Empty constructor. - */ - public ClientGenStubWrapper() { - }; - - /** - * Wrapper around ClientstubGen.execute(String[]) method - * @param fileName name of the file - * @return name of the modified/built file - * @throws Exception If ClientstubGen fails or if Reflection errors occurs - */ - public String callClientGenStubExecute(final String fileName) throws Exception { - LoaderManager lm = LoaderManager.getInstance(); - ClassLoader old = null; - - try { - ClassLoader ext = lm.getExternalLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - if (executeMethod == null) { - Class clazz = ext.loadClass(GENSTUB_CLASSNAME); - executeMethod = clazz.getDeclaredMethod("execute", new Class[] {String[].class}); - } - - if (clientGenStub == null) { - Class clazz = ext.loadClass(GENSTUB_CLASSNAME); - clientGenStub = clazz.newInstance(); - } - - String[] args = new String[ARGS_NUMBER]; - args[0] = "-d"; - args[1] = System.getProperty("java.io.tmpdir"); - args[2] = fileName; - - return (String) executeMethod.invoke(clientGenStub, new Object[] {args}); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof Error) { - throw (Error) e.getTargetException(); - } else { - throw new Exception("Exception when executing ClientstubGen.execute(String[])", e.getTargetException()); - } - } catch (Exception e) { - throw new Exception("Problems when invoking method ClientstubGen.execute(String[])", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - /** - * Wrapper around ClientGenStubGen.isModified() method - * @return true/false - * @throws Exception If ClientStub fails or if Reflection errors occurs - */ - public boolean callClientGenStubIsInputModifed() throws Exception { - LoaderManager lm = LoaderManager.getInstance(); - ClassLoader old = null; - - try { - ClassLoader ext = lm.getExternalLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - if (isInputModifiedMethod == null) { - Class clazz = ext.loadClass(GENSTUB_CLASSNAME); - isInputModifiedMethod = clazz.getDeclaredMethod("isInputModified", new Class[] {}); - } - - if (clientGenStub == null) { - Class clazz = ext.loadClass(GENSTUB_CLASSNAME); - clientGenStub = clazz.newInstance(); - } - - return ((Boolean) isInputModifiedMethod.invoke(clientGenStub, (Object[]) null)).booleanValue(); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof Error) { - throw (Error) e.getTargetException(); - } else { - throw new Exception("Exception when executing clientGenStub.isInputModified()", e.getTargetException()); - } - } catch (Exception e) { - throw new Exception("Problems when invoking method clientGenStub.isInputModified()", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } -} - diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/resources/META-INF/jonas-generators-clientstubs.bnd b/jonas/modules/generators/jonas-genclientstub/src/main/resources/META-INF/jonas-generators-clientstubs.bnd deleted file mode 100644 index f25e81b567..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/resources/META-INF/jonas-generators-clientstubs.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.generators.genclientstub.* - -DynamicImport-Package org.ow2.jonas.lib.ejb21.*, \ - org.objectweb.jorm.naming.*, \ - org.objectweb.perseus.persistence.api, \ - org.ow2.jonas.lib.ejb21.ha,\ - javax.* - - -# Add dependencies -Embed-Dependency asm;inline=true, \ - asm-attrs;inline=true, \ - fastrmic;inline=true \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/generator/I18n.properties b/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/generator/I18n.properties deleted file mode 100644 index dca304869f..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/generator/I18n.properties +++ /dev/null @@ -1,3 +0,0 @@ -# $Id$ - -Generator.generate.error=Error when running rmic for Client stub generation diff --git a/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/modifier/I18n.properties b/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/modifier/I18n.properties deleted file mode 100644 index 58bcd33df5..0000000000 --- a/jonas/modules/generators/jonas-genclientstub/src/main/resources/org/ow2/jonas/generators/genclientstub/modifier/I18n.properties +++ /dev/null @@ -1,5 +0,0 @@ -# $Id$ - -ModifierFactory.getModifier.notfound file not found ''{0}'' -ModifierFactory.getModifier.notjar ''{0}'' is not a jar file -ModifierFactory.getModifier.unsupported ''{0}'' is not a supported jar archive (should be EjbJar, WebApp, Client or Application) diff --git a/jonas/modules/generators/jonas-genic/pom.xml b/jonas/modules/generators/jonas-genic/pom.xml deleted file mode 100644 index 90a16ab0e6..0000000000 --- a/jonas/modules/generators/jonas-genic/pom.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - org.ow2.jonas - jonas-generators - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-genic - bundle - JOnAS :: Generators :: GenIC (EJB 2.1) - - - - org.ow2.jonas - jonas-ejb-container - ${project.version} - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.objectweb.monolog - monolog-wrapper-velocity - ${monolog.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-ejb2.1-ha - ${project.version} - - - org.objectweb.jorm - jorm-compiler - 2.9.3 - - - org.objectweb.jorm - jorm-core - ${jorm.version} - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - velocity - velocity-dep - 1.4 - - - asm - asm - 1.5.3 - runtime - - - asm - asm-attrs - 1.5.3 - runtime - - - org.ow2.fastrmic - fastrmic - runtime - - - org.ow2.carol - carol - ${carol.version} - - - org.ow2.jonas - eclipse-compiler - ${project.version} - - - diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/BeanSources.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/BeanSources.java deleted file mode 100644 index 777b6ddb0c..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/BeanSources.java +++ /dev/null @@ -1,470 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; - -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.EntityCmp2Desc; -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp1Desc; -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; -import org.ow2.jonas.lib.ejb21.jorm.RdbMappingBuilder; -import org.ow2.jonas.lib.util.BeanNaming; -import org.ow2.jonas.lib.util.Log; - -import org.apache.velocity.app.VelocityEngine; - -import org.objectweb.jorm.compiler.api.JormCompilerParameter; -import org.objectweb.jorm.compiler.lib.JormCompiler; -import org.objectweb.jorm.metainfo.api.Manager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class allows to generate the sources of: the class that implements the - * Enterprise bean's remote interface, the class that implements the Enterprise - * bean's home interface, the class that implements the Enterprise bean's local - * interface, the class that implements the Enterprise bean's localhome - * interface, the class of the Entity Handle in case of entity, and the extended - * class of the Bean for persistence in case of entity with CMP, of a given - * Enterprise Java Bean. - * @author Helene Joanin : Initial developer - * @author Philippe Durieux - * @author Sebastien Chassande - */ -public class BeanSources { - - /** - * java file suffix - */ - private static final String JAVA_SUFFIX = ".java"; - - /** - * EJBObject (Remote). May be null if no Remote interface. - */ - private String wrpRemoteFileName = null; - - /** - * EJBLocalObject (Local). May be null if no Local interface. - */ - private String wrpLocalFileName = null; - - /** - * Home. May be null if no Home interface. - */ - private String wrpHomeFileName = null; - - /** - * Home cluster file name. May be null if no Home interface. - */ - private String wrpHomeClusterFileName = null; - - /** - * Remote cluster file name. May be null if no Remote interface. - */ - private String wrpRemoteClusterFileName = null; - - /** - * LocalHome. May be null if no LocalHome interface. - */ - private String wrpLocalHomeFileName = null; - - /** - * Handle (for Entity only) - */ - private String wrpHandleFileName = null; - - /** - * Bean (for CMP Entity only) - */ - private String wrpBeanFileName = null; - - /** - * Service Endpoint filename - */ - private String wrpServiceEndpointFileName = null; - - /** - * Service Endpoint Home filename - */ - private String wrpSEHomeFileName = null; - - /** - * Interface for Cmp2 Entity coherence - */ - private String itfCohCmp2Entity = null; - - /** - * Source objects used to generate classes - */ - private ArrayList sources; - - /** - * Java sources that are not Remote - */ - private ArrayList noRemoteJava; - - /** - * directory where to place the generated files - */ - private String outdir = null; - - /** - * bean descriptor - */ - private BeanDesc dd = null; - - /** - * JORM compiler - */ - private JormCompiler jormCompiler; - - /** - * Jorm Manager - */ - private Manager manager = null; - - /** - * logger - */ - private Logger logger = null; - - private GenICParameters gp; - - private VelocityEngine ve; - - - /** - * BeanSources Constructor for bean that is not a entity with CMP2 - * @param beanDesc deployment descriptor of the bean - * @param gp @param gp GenIC parameters - * @param ve the Velocity engine - */ - public BeanSources(BeanDesc beanDesc, GenICParameters gp, VelocityEngine ve) { - logger = Log.getLogger(Log.JONAS_GENIC_PREFIX); - dd = beanDesc; - this.gp = gp; - outdir = gp.getOutputDirectory(); - this.ve = ve; - sources = new ArrayList(); - noRemoteJava = new ArrayList(); - } - - - /** - * BeanSources initialization. - * @param jc - * @param mgr - * @exception GenICException In error case - */ - public void init(JormCompiler jc, Manager mgr) throws GenICException { - jormCompiler = jc; - manager = mgr; - - // generated Home - if (dd.getHomeClass() != null) { - if (outdir.length() > 0) { - wrpHomeFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullWrpHomeName()); - } else { - wrpHomeFileName = dd.getWrpHomeName(); - } - - wrpHomeFileName = wrpHomeFileName.concat(JAVA_SUFFIX); - sources.add(new Source(dd, wrpHomeFileName, Source.HOME, ve, manager)); - - // generated Handle for Remote Entity bean - if (dd instanceof EntityDesc) { - if (outdir.length() > 0) { - wrpHandleFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullWrpHandleName()); - } else { - wrpHandleFileName = dd.getWrpHandleName(); - } - wrpHandleFileName = wrpHandleFileName.concat(JAVA_SUFFIX); - noRemoteJava.add(wrpHandleFileName); - sources.add(new Source(dd, wrpHandleFileName, Source.ENTITY_HANDLE, ve, manager)); - } - } - - // generated EJBObject (Remote) - if (dd.getRemoteClass() != null) { - if (outdir.length() > 0) { - wrpRemoteFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullWrpRemoteName()); - } else { - wrpRemoteFileName = dd.getWrpRemoteName(); - } - - wrpRemoteFileName = wrpRemoteFileName.concat(JAVA_SUFFIX); - sources.add(new Source(dd, wrpRemoteFileName, Source.REMOTE, ve, manager)); - } - - // generated LocalHome - if (dd.getLocalHomeClass() != null) { - if (outdir.length() > 0) { - wrpLocalHomeFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullWrpLocalHomeName()); - } else { - wrpLocalHomeFileName = dd.getWrpLocalHomeName(); - } - wrpLocalHomeFileName = wrpLocalHomeFileName.concat(JAVA_SUFFIX); - noRemoteJava.add(wrpLocalHomeFileName); - sources.add(new Source(dd, wrpLocalHomeFileName, Source.LOCAL_HOME, ve, manager)); - } - - // generated EJBLocalObject (Local) - if (dd.getLocalClass() != null) { - if (outdir.length() > 0) { - wrpLocalFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullWrpLocalName()); - } else { - wrpLocalFileName = dd.getWrpLocalName(); - } - wrpLocalFileName = wrpLocalFileName.concat(JAVA_SUFFIX); - noRemoteJava.add(wrpLocalFileName); - sources.add(new Source(dd, wrpLocalFileName, Source.LOCAL, ve, manager)); - } - - // generated ServiceEndpoint and SEHome - if (dd instanceof SessionStatelessDesc) { - SessionStatelessDesc ssd = (SessionStatelessDesc) dd; - if (ssd.getServiceEndpointClass() != null) { - // ServiceEndpoint - if (outdir.length() > 0) { - wrpServiceEndpointFileName = outdir + File.separatorChar - + BeanNaming.getPath(ssd.getFullWrpServiceEndpointName()); - } else { - wrpServiceEndpointFileName = ssd.getWrpServiceEndpointName(); - } - wrpServiceEndpointFileName = wrpServiceEndpointFileName.concat(JAVA_SUFFIX); - //noRemoteJava.add(wrpServiceEndpointFileName); // Accessed locally only - sources.add(new Source(dd, wrpServiceEndpointFileName, Source.SERVICE_ENDPOINT, ve, manager)); - // ServiceEndpointHome - if (outdir.length() > 0) { - wrpSEHomeFileName = outdir + File.separatorChar + BeanNaming.getPath(ssd.getFullWrpSEHomeName()); - } else { - wrpSEHomeFileName = ssd.getWrpSEHomeName(); - } - wrpSEHomeFileName = wrpSEHomeFileName.concat(JAVA_SUFFIX); - noRemoteJava.add(wrpSEHomeFileName); // Accessed locally only - sources.add(new Source(dd, wrpSEHomeFileName, Source.SERVICE_ENDPOINT_HOME, ve, manager)); - } - } - - // generated derived bean class for Entity Bean CMP - if (dd instanceof EntityJdbcCmp1Desc) { - if (outdir.length() > 0) { - wrpBeanFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullDerivedBeanName()); - } else { - wrpBeanFileName = dd.getDerivedBeanName(); - } - wrpBeanFileName = wrpBeanFileName.concat(JAVA_SUFFIX); - noRemoteJava.add(wrpBeanFileName); - sources.add(new Source(dd, wrpBeanFileName, Source.ENTITY_CMP_JDBC, ve, manager)); - } - if (dd instanceof EntityCmp2Desc) { - EntityCmp2Desc ecd = (EntityCmp2Desc) dd; - if (outdir.length() > 0) { - wrpBeanFileName = outdir + File.separatorChar + BeanNaming.getPath(dd.getFullDerivedBeanName()) - + JAVA_SUFFIX; - if (ecd.needJormCoherenceHelper()) { - itfCohCmp2Entity = outdir + File.separatorChar - + BeanNaming.getPath(ecd.getJormCoherenceHelperFQItfName()) + JAVA_SUFFIX; - } - } else { - wrpBeanFileName = BeanNaming.getPath(dd.getDerivedBeanName()) + JAVA_SUFFIX; - if (ecd.needJormCoherenceHelper()) { - itfCohCmp2Entity = BeanNaming.getPath(ecd.getJormCoherenceHelperItfName()) + JAVA_SUFFIX; - } - } - if (ecd.needJormCoherenceHelper()) { - sources.add(new Source(dd, itfCohCmp2Entity, Source.ITF_COH_CMP2_ENTITY, ve, manager)); - noRemoteJava.add(itfCohCmp2Entity); - } - noRemoteJava.add(wrpBeanFileName); - sources.add(new Source(dd, wrpBeanFileName, Source.ENTITY_CMP_JDBC, ve, manager)); - } - } - - /** - * Generates the java sources - * @throws GenICException in error case - */ - public void generate() throws GenICException { - // Generates the java sources - for (Iterator it = sources.iterator(); it.hasNext();) { - Source src = (Source) it.next(); - src.generate(); - } - } - - public void jormCompile(ArrayList jormList) throws GenICException { - - // In case of Cmp2, call jorm compiler. - if (dd instanceof EntityCmp2Desc) { - EntityCmp2Desc ecd = (EntityCmp2Desc) dd; - - // Build and fill a JormCompilerParameter dedicated to the bean - JormCompilerParameter cp = jormCompiler.getCompilerParameter(); - cp.setProjectName(RdbMappingBuilder.getProjectName()); - cp.setKeepSrc(true); - cp.setOutput(outdir); - cp.setClassMappingInheritance("org.ow2.jonas.lib.ejb21.jorm.RdbFactory"); - cp.setStateGenerated(true); - cp.setStateInheritance(ecd.getEjbClass().getName()); - switch (ecd.getLockPolicy()) { - case EntityDesc.LOCK_CONTAINER_READ_UNCOMMITTED: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchCRU"); - break; - case EntityDesc.LOCK_CONTAINER_SERIALIZED: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchCS"); - break; - case EntityDesc.LOCK_CONTAINER_SERIALIZED_TRANSACTED: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchCST"); - break; - case EntityDesc.LOCK_CONTAINER_READ_COMMITTED: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchCRC"); - break; - case EntityDesc.LOCK_DATABASE: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchDB"); - break; - case EntityDesc.LOCK_READ_ONLY: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchRO"); - break; - case EntityDesc.LOCK_CONTAINER_READ_WRITE: - cp.setBindingInheritance("org.ow2.jonas.lib.ejb21.JEntitySwitchCRW"); - break; - default: - throw new GenICException("Cannot find JEntitySwitch: Unknown lock policy"); - } - - // Run the Jorm Compiler - Collection jormflist = null; - try { - jormflist = jormCompiler.generateFiles(jormList); - } catch (Exception e) { - throw new GenICException("Problem during jorm generation", e); - } - // Save the list of Jorm generated files - for (Iterator i = jormflist.iterator(); i.hasNext();) { - String file = (String) i.next(); - logger.log(BasicLevel.DEBUG, "Jorm generated file: " + file); - noRemoteJava.add(file); - } - } - } - - /** - * @return Return the bean's name - */ - public String getEjbName() { - return dd.getEjbName(); - } - - /** - * @return Return the file name of the generated source for the Home (null - * if none) - */ - public String getWrpHomeFileName() { - return wrpHomeFileName; - } - - /** - * @return Return the file name of the cluster configuration for the Home - * (null if none) - */ - public String getWrpHomeClusterFileName() { - return wrpHomeClusterFileName; - } - - /** - * @return Return the file name of the cluster configuration for the Remote - * (null if none) - */ - public String getWrpRemoteClusterFileName() { - return wrpRemoteClusterFileName; - } - - - /** - * @return Return the file name of the generated source for the Remote (null - * if none) - */ - public String getWrpRemoteFileName() { - return wrpRemoteFileName; - } - - /** - * @return Return the class name of the generated source for the Remote - * (package included) - */ - public String getWrpRemoteClassName() { - return dd.getFullWrpRemoteName(); - } - - /** - * @return Return the file name of the generated source for the - * ServiceEndpoint (null if none) - */ - public String getWrpServiceEndpointFileName() { - return wrpServiceEndpointFileName; - } - - /** - * @return Return the file name of the generated source for the - * ServiceEndpointHome (null if none) - */ - public String getWrpSEHomeFileName() { - return wrpSEHomeFileName; - } - - /** - * @return Return the class name of the generated source for the - * ServiceEndpoint (package included) - */ - public String getWrpServiceEndpointClassName() { - if (dd instanceof SessionStatelessDesc) { - return ((SessionStatelessDesc) dd).getFullWrpServiceEndpointName(); - } - return null; - } - - /** - * @return Return the class name of the generated source for the Home - * (package included) - */ - public String getWrpHomeClassName() { - return dd.getFullWrpHomeName(); - } - - /** - * @return Returns the list of the sources that are not Remote - */ - public Collection getNoRemoteJavas() { - return noRemoteJava; - } -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenIC.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenIC.java deleted file mode 100644 index f18f7fe77f..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenIC.java +++ /dev/null @@ -1,1254 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; -import java.util.jar.Attributes; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; - -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.runtime.RuntimeConstants; -import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; -import org.objectweb.jorm.compiler.api.JormCompilerConfigurator; -import org.objectweb.jorm.compiler.lib.JormCompiler; -import org.objectweb.jorm.metainfo.api.Manager; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.DeploymentDesc; -import org.ow2.jonas.deployment.ejb.DeploymentDescEjb2; -import org.ow2.jonas.deployment.ejb.EntityCmp2Desc; -import org.ow2.jonas.deployment.ejb.MessageDrivenDesc; -import org.ow2.jonas.deployment.ejb.lib.EjbDeploymentDescManager; -import org.ow2.jonas.eclipse.compiler.CompilationContext; -import org.ow2.jonas.eclipse.compiler.CompilerError; -import org.ow2.jonas.eclipse.compiler.JOnASCompiler; -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.ejb21.Protocols; -import org.ow2.jonas.lib.ejb21.jorm.CMP2Bean; -import org.ow2.jonas.lib.ejb21.jorm.RdbMappingBuilder; -import org.ow2.jonas.lib.util.BeanNaming; -import org.ow2.jonas.lib.util.Cmd; -import org.ow2.jonas.lib.util.Env; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; - -/** - * This class allows to generate: - *
      - *
    • the classes that implements the Enterprise bean's remote interface, - *
    • the classes that implements the Enterprise bean's home interface, - *
    • the classes that implements the Handles of the Entity beans, - *
    • the classes that implements the persistence of the Entity beans with - * CMP, - *
    - * of all the Enterprise Java Beans defined in the given Deployment Descriptor. - * - * @author Helene Joanin : Initial developer - * @author Christophe Ney (Lutris Technologies) : Fix to handle arguments containing white spaces. - * @author Guillaume Riviere : Fix the addClassesInJar() method (on David, the Stub/Skel classes names are different). - * @author Dean Jennings : Remove System Exit (called now from server) - * @author Sami Lehtinen : use of java.util.jar api instead of jar command - */ -public class GenIC { - - /** - * Logger. - */ - public static Logger logger = Log.getLogger(Log.JONAS_GENIC_PREFIX); - - /** - * java.home property value (ended with '/'). - */ - private static String javaHomeBin = null; - - /** - * Is the command is verbose ? - */ - private boolean verbose = false; - - /** - * Name of the directory where to place the generated file. - */ - private String outputdir = null; - - /** - * Canonical name of the directory where to place the generated file. - */ - private String canonicalOutputdir = null; - - /** - * Are some container classes generated ? - */ - private boolean generatedIC; - - /** - * Path names of the generated files to delete. - */ - private ArrayList filesToDelete = null; - - /** - * Path names of the java generated sources (remote). - */ - private ArrayList remoteJavas = null; - - /** - * Path names of the java generated sources (no remote). - */ - private ArrayList noRemoteJavas = null; - - /** - * Names of the remote classes (package name included). - */ - private ArrayList remoteClasses = null; - - /** - * GenIC Parameters. - */ - private GenICParameters gp = null; - - /** - * Buffer size. - */ - private static final int BUFFER_SIZE = 4096; - - /** META dir. */ - private static final String META_DIR = "META-INF"; - - /** The path to the MANIFEST file. */ - private static final String MANIFEST_PATH = META_DIR + File.separator + "MANIFEST.MF"; - - /** - * GenIC allows to generate the container classes for JOnAS for the given - * Enterprise Java Beans. - *

    - * Usage: java org.ow2.jonas.generators.genic.GenIC -help
    - * to print this help message - *

    - * or java org.ow2.jonas.generators.genic.GenIC <Options><Input_File>
    - * to generate the container classes for the given EJBs. - *

    - * Options include: - *

      - *
    • -d <output_dir>specify where to place the generated files
    • - *
    • -noaddinjar do not add the generated classes in the given ejb-jar - * file
    • - *
    • -classpath <path> define the classpath to be used to compile classes
    • - *
    • -nocompil do not compile the generated source files via the java and - * rmi compilers
    • - *
    • -novalidation parse the XML deployment descriptors without - * validation
    • - *
    • -javac <opt>specify the name of the java compiler to use
    • - *
    • -javacopts <opt>specify the options to pass to the java compiler - *
    • - *
    • -rmicopts <opt>specify the options to pass to the rmi compiler
    • - *
    • -protocols list of protocol, separated by comma
    • - *
    • -keepgenerated do not delete intermediate generated source files - *
    • - *
    • -verbose
    • - *
    • -invokecmd invoke, in some case, directly the method of the java - * class corresponding to the command
    • - *
    - *

    - * Input_File file name of the standard deployment descriptor (.xml ended), - * or file name of the EJB-jar (.jar ended). - * @param args arguments for GenIC - */ - public static void main(final String[] args) { - boolean error = false; - - // don't use the fastrmic compiler by default - //boolean nofastrmic = false; - - String protocolNames = Protocols.RMI_JRMP; // Default to jrmp - - // Holder for GenIC params - GenICParameters gp = new GenICParameters(); - - // Get args - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - if (arg.equals("-help") || arg.equals("-?")) { - gp.setHelp(true); - continue; - } - if (arg.equals("-verbose")) { - gp.setVerbose(true); - continue; - } - if (arg.equals("-debug")) { - // deprecated - continue; - } - if (arg.equals("-mappernames")) { - argn++; - // deprecated - logger.log(BasicLevel.LEVEL_WARN, "The -mappernames option is ignored (deprecated)"); - } - if (arg.equals("-protocols")) { - argn++; - if (argn < args.length) { - protocolNames = args[argn]; - continue; - } else { - error = true; - } - } - if (arg.equals("-keepgenerated")) { - gp.setKeepGenerated(true); - gp.getRmicOptions().add(args[argn]); - continue; - } - if (arg.equals("-nocompil")) { - gp.setCompil(false); - gp.setKeepGenerated(true); - continue; - } - if (arg.equals("-noaddinjar")) { - gp.setAddInJar(false); - continue; - } - if (arg.equals("-novalidation")) { - gp.setParseWithValidation(false); - continue; - } - if (arg.equals("-classpath")) { - gp.setClasspathParam(args[++argn]); - continue; - } - if (arg.equals("-javac")) { - argn++; - if (argn < args.length) { - gp.setJavacName(args[argn]); - } else { - error = true; - } - continue; - } - if (arg.equals("-javacopts")) { - argn++; - if (argn < args.length) { - StringTokenizer st = new StringTokenizer(args[argn]); - while (st.hasMoreTokens()) { - gp.getJavacOptions().add(st.nextToken()); - } - } else { - error = true; - } - continue; - } - if (arg.equals("-rmicopts")) { - argn++; - if (argn < args.length) { - StringTokenizer st = new StringTokenizer(args[argn]); - while (st.hasMoreTokens()) { - gp.getRmicOptions().add(st.nextToken()); - } - } else { - error = true; - } - continue; - } - if (arg.equals("-d")) { - argn++; - if (argn < args.length) { - gp.setOutputDirectory(args[argn]); - } else { - error = true; - } - continue; - } - if (arg.equals("-invokecmd")) { - gp.setInvokeCmd(true); - continue; - } - if (arg.equals("-fastrmic")) { - argn++; - // deprecated - logger.log(BasicLevel.WARN, "The -fastrmic option is ignored as it is the default value. Use -nofastrmic to disable it."); - continue; - } - - if (arg.equals("-nofastrmic")) { - argn++; - gp.setFastRmicEnabled(false); - continue; - } - - gp.setInputFilename(args[argn]); - } - - // Usage ? - if (gp.isHelp()) { - usage(); - return; - } - - // Check args - if (error || (gp.getInputFilename() == null)) { - usage(); - throw new RuntimeException(); - } - // The -d option is deprecated since JOnAS 3.0.7 when the file input is an ejb-jar - // Instead, the output directory must be a temporary directory to make easier - // the ejb-jar updated. - if ((gp.getOutputDirectory() != null) && gp.isAddInJar() && gp.getInputFilename().endsWith(".jar")) { - logger.log(BasicLevel.WARN, "The -d '" + gp.getOutputDirectory() + "' option is ignored" + " (deprecated with an ejb-jar as input file)"); - } - - if (gp.getOutputDirectory() == null) { - gp.setOutputDirectory(""); - } - - // Build the array of protocols name - gp.setProtocols(new Protocols(protocolNames, true)); - - if (gp.getProtocols().isSupported(Protocols.RMI_IIOP)) { - // Disable fastrmic when iiop is found - gp.setFastRmicEnabled(false); - - String classpathParam = gp.getClasspathParam(); - - // Add client.jar file to classpath - String jonasRoot = System.getProperty("jonas.root"); - File clientFile = new File(jonasRoot, "lib" + File.separator + "client.jar"); - - if (clientFile.exists()) { - try { - classpathParam += File.pathSeparator + clientFile.toURL().getPath(); - gp.setClasspathParam(classpathParam); - } catch (MalformedURLException e) { - logger.log(BasicLevel.WARN, "Cannot add client.jar to GenIC classpath."); - } - } - } - - // In case of ejb-jar file, the dirOutputName must be initialized with a - // tempo. directory. - if (gp.getInputFilename().endsWith(".jar") && gp.isAddInJar()) { - try { - gp.setOutputDirectory(GenIC.createTempDir()); - } catch (IOException ioe) { - GenIC.fatalError(ioe); - } - } - - // Init the classpath used for javac, rmic - String classpath = ""; - ClassLoader threadContextClassLoader = Thread.currentThread().getContextClassLoader(); - if (threadContextClassLoader instanceof JClassLoader) { - classpath = ((JClassLoader) threadContextClassLoader).getClassPath(); - } - - if (gp.getInputFilename().endsWith(".jar")) { - // Move the input file to avoid jar locking - File in = new File(gp.getInputFilename()); - - // Only copy the jar file when it's a regular file - if (in.isFile()) { - File out = new File(gp.getWorkingFilename()); - - if (out.exists() && !out.delete()) { - String deleteError = "Cannot delete existant working copy '" + out + "'"; - fatalError(deleteError, new IOException(deleteError)); - } - - try { - FileUtils.copyFile(in, out); - } catch (FileUtilsException e) { - fatalError("Cannot copy input File from '" + gp.getInputFilename() - + "' to '" + gp.getWorkingFilename() + "'", - new IOException(gp.getInputFilename())); - } - - classpath = out.getPath() + File.pathSeparator + classpath; - } - } - if (!"".equals(gp.getOutputDirectory())) { - classpath = gp.getOutputDirectory() + File.pathSeparator + classpath; - } - // add -classpath value - if (gp.getClasspathParam() != null) { - classpath = gp.getClasspathParam() + File.pathSeparator + classpath; - } - // use the new classpath - gp.setClasspathParam(classpath); - - // Set the parsing mode (with or without validation) - if (!gp.isParseWithValidation()) { - EjbDeploymentDescManager.setParsingWithValidation(false); - } - - - // Add into META_INF/MANIFEST jonas information for auto-generation functionality - if (gp.getInputFilename().endsWith(".jar") && gp.isAddInJar()) { - // Update attributes if not up-to-date - Map attributes = new HashMap(); - attributes.put("Genic-Jonas-Version", Version.getNumber()); - attributes.put("Genic-Jonas-protocols", gp.getProtocols().list()); - try { - String filename = null; - if (new File(gp.getInputFilename()).isFile()) { - filename = gp.getWorkingFilename(); - } else { - // directory - filename = gp.getInputFilename(); - } - - FileUtils.updateAttributesInManifest(filename, attributes); - } catch (FileUtilsException e) { - GenIC.fatalError(e); - } - } else if (gp.getOutputDirectory() != null && !gp.isAddInJar()) { - // case of GenIC called by ant task - // noaddinjar = true && -d specified we must add manifest into the directory output - Manifest mf = new Manifest(); - Attributes attributes = mf.getMainAttributes(); - attributes.putValue("Genic-Jonas-Version", Version.getNumber()); - attributes.putValue("Genic-Jonas-protocols", gp.getProtocols().list()); - try { - createManifest(gp.getOutputDirectory(), mf); - } catch (GenICException e) { - GenIC.fatalError(e); - } - } - - // Generates the classes for the set of the beans - ClassLoader loader = null; - try { - DeploymentDesc ejbJarDD = null; - if (gp.getInputFilename().endsWith(".jar")) { - // ejb-jar file/directory - File input = new File(gp.getInputFilename()); - String filename = null; - if (input.isFile()) { - filename = gp.getWorkingFilename(); - } else { - // directory - filename = gp.getInputFilename(); - } - URL[] url = new URL[1]; - url[0] = new File(filename).toURI().toURL(); - JClassLoader cl = new JClassLoader("GenIC-" + gp.getOriginalFilename(), url, threadContextClassLoader); - if (gp.getClasspathParam() != null) { - // add -classpath value inside ClassLoader - addClasspath(cl, gp.getClasspathParam()); - } - ejbJarDD = EjbDeploymentDescManager.getDeploymentDesc(filename, cl); - loader = cl; - cl = null; - } else { - // xml file - ejbJarDD = EjbDeploymentDescManager.getDeploymentDesc( - gp.getOriginalFilename(), - BeanNaming.getJonasXmlName(gp.getOriginalFilename()), - BeanNaming.getParentName(gp.getOriginalFilename())); - } - - GenIC gwc = new GenIC(ejbJarDD, gp); - - - if (gp.isCompil()) { - gwc.compilClasses(classpath, loader); - - // Reset the beans deployment descriptors to unload the beans - // classes - // (loaded from the ejb-jar when creating the - // jonas_ejb.deployment.api.BeanDesc), - // to be able to update the ejb-jar file on Windows. - // See Bug #270 - ejbJarDD = null; - loader = null; - - // Garbage Collect - System.gc(); - - if (gp.getInputFilename().endsWith(".jar") && gp.isAddInJar()) { - gwc.addClassesInJar(); - } - if (!gp.isKeepGenerated()) { - gwc.clean(); - } - } - - } catch (MalformedURLException e) { - GenIC.fatalError("Invalid ejb-jar file name : ", e); - } catch (GenICException e) { - GenIC.fatalError(e); - } catch (DeploymentDescException e) { - GenIC.fatalError("Cannot read the Deployment Descriptors from " + gp.getInputFilename() + ": ", e); - } - // End - } - - /** - * Create Manifest file with name/value. - * @param dirOutputName : output file - * @param manifest : The manifest file to write - * @throws GenICException if manifest is not created. - */ - private static void createManifest(final String dirOutputName, final Manifest manifest) throws GenICException { - - // Ensure that there is the MANIFEST_VERSION - Attributes mainAttributes = manifest.getMainAttributes(); - mainAttributes.putValue("Manifest-Version" , "1.0"); - - File fileOutput = new File(dirOutputName, META_DIR); - - if (!fileOutput.exists()) { - fileOutput.mkdirs(); - } - if (!fileOutput.exists()) { - throw new GenICException("Cannot create META-INF directory into temp dir : " + dirOutputName + "/META-INF"); - } - - fileOutput = new File(dirOutputName, MANIFEST_PATH); - if (!fileOutput.exists()) { - try { - fileOutput.createNewFile(); - } catch (IOException e) { - throw new GenICException("Cannot create '" + fileOutput + "' file", e); - } - } - if (!fileOutput.exists()) { - throw new GenICException("Cannot create manifest.mf file into " + dirOutputName + File.separator + "META-INF"); - } - OutputStream os = null; - try { - os = new FileOutputStream(fileOutput); - manifest.write(os); - } catch (FileNotFoundException e) { - throw new GenICException("Cannot write manifest.mf file", e); - } catch (IOException e) { - throw new GenICException("Cannot write manifest.mf file", e); - } finally { - if (os != null) { - try { - os.close(); - } catch (IOException e) { - logger.log(BasicLevel.WARN, "Cannot close the outputstream", e); - } - } - } - } - - /** - * Add To the given ClassLoader the given classpath. - * @param cl ClassLoader to be updated - * @param classpath the classpath to add inside the ClassLoader - * @throws GenICException When classpath contains invalid URL - */ - private static void addClasspath(final JClassLoader cl, - final String classpath) throws GenICException { - String[] elems = classpath.split(File.pathSeparator); - for (int i = 0; i < elems.length; i++) { - try { - cl.addURL(new File(elems[i]).toURL()); - } catch (MalformedURLException e) { - throw new GenICException("Cannot create URL from '" + elems[i] + "'", e); - } - } - } - - /** - * GenIC Constructor: generates the container classes sources of each beans. - * @param ejbJarDesc deployment descriptors of the beans - * @param gp GenIC parameters - * @throws GenICException In error case - */ - public GenIC(final DeploymentDesc ejbJarDesc, - final GenICParameters gp) throws GenICException { - - // JORM Meta Information - RdbMappingBuilder rdbMapping = null; - - // A BeanSources for each bean - ArrayList beanList = new ArrayList(); - this.gp = gp; - - verbose = gp.isVerbose(); - - if (javaHomeBin == null) { - javaHomeBin = System.getProperty("java.home", ""); - if (!("".equals(javaHomeBin))) { - if (Env.isOsMacOsX()) { - javaHomeBin = javaHomeBin + File.separator + "bin" + File.separator; - } else { - javaHomeBin = javaHomeBin + File.separator + ".." + File.separator + "bin" + File.separator; - } - } - } - outputdir = gp.getOutputDirectory(); - try { - canonicalOutputdir = new File(outputdir).getCanonicalFile().getPath(); - } catch (IOException e) { - throw new GenICException("Cannot get cannonical name of the output directory", e); - } - filesToDelete = new ArrayList(); - remoteJavas = new ArrayList(); - noRemoteJavas = new ArrayList(); - remoteClasses = new ArrayList(); - BeanDesc[] beansDD = ejbJarDesc.getBeanDesc(); - JormCompiler jormCompiler = null; - Manager mgr = null; - VelocityEngine ve = allocateVelocityEngine(); - // Display the bean's names - StringBuffer message = new StringBuffer(); - message.append("GenIC for JOnAS " + Version.getNumber() + ": "); - String sep = ""; - for (int i = 0; i < beansDD.length; i++) { - - if ((beansDD[i] instanceof MessageDrivenDesc)) { - //Nothing to generate in case of MessageDriven Bean - continue; - } - if (beansDD[i] instanceof EntityCmp2Desc) { - if (jormCompiler == null) { - // Load the jorm meta information of the class - // when we encounter the first CMP2 bean. - try { - DeploymentDescEjb2 dd2 = (DeploymentDescEjb2) ejbJarDesc; - - rdbMapping = new RdbMappingBuilder(dd2); - mgr = rdbMapping.getJormMIManager(); - jormCompiler = allocateJormCompiler(mgr); - } catch (DeploymentDescException e) { - throw new GenICException("Impossible to load jorm meta information", e); - } - } - } - BeanSources bs = new BeanSources(beansDD[i], gp, ve); - bs.init(jormCompiler, mgr); - beanList.add(bs); - //compute message - message.append(sep); - sep = ", "; - message.append("'"); - message.append(bs.getEjbName()); - message.append("'"); - } - generatedIC = !beanList.isEmpty(); - if (generatedIC) { - message.append(" generation ..."); - } else { - message.append("No generation to do (only message driven beans)"); - } - logger.log(BasicLevel.INFO, message.toString()); - - // Generates the sources of the container classes of the beans - // and Init the lists of the remote/non-remote java sources and the - // remote classes - for (Iterator it = beanList.iterator(); it.hasNext();) { - BeanSources ics = (BeanSources) it.next(); - // Generate sources for all beans - ics.generate(); - // Call Jorm Generator for CMP2 beans - if (rdbMapping != null) { - CMP2Bean cmp2 = rdbMapping.getCmp2Bean(ics.getEjbName()); - if (cmp2 != null) { - ics.jormCompile(cmp2.getJormList()); - } - } - String cchfn = ics.getWrpHomeClusterFileName(); - if (cchfn != null) { - filesToDelete.add(cchfn); - } - String ccrfn = ics.getWrpRemoteClusterFileName(); - if (ccrfn != null) { - filesToDelete.add(ccrfn); - } - logger.log(BasicLevel.INFO, "Sources classes successfully generated" + " for '" + ics.getEjbName() + "'"); - noRemoteJavas.addAll(ics.getNoRemoteJavas()); - if (ics.getWrpHomeFileName() != null) { - remoteJavas.add(ics.getWrpHomeFileName()); - remoteClasses.add(ics.getWrpHomeClassName()); - } - if (ics.getWrpRemoteFileName() != null) { - remoteJavas.add(ics.getWrpRemoteFileName()); - remoteClasses.add(ics.getWrpRemoteClassName()); - } - if (ics.getWrpServiceEndpointFileName() != null) { - remoteJavas.add(ics.getWrpServiceEndpointFileName()); - remoteClasses.add(ics.getWrpServiceEndpointClassName()); - } - } - jormCompiler = null; - rdbMapping = null; - - } - - /** - * Allocate and configure a JORM compiler. - * @param miManager the JORM Meta-Information manager - * @return a JORM compiler - */ - private JormCompiler allocateJormCompiler(final Manager miManager) { - // Allocate and configure a Jorm Compiler - JormCompiler jormCompiler = new JormCompiler(); - JormCompilerConfigurator jcc = jormCompiler.getCompilerConfigurator(); - Properties prop = new Properties(); - prop.put("jorm.generator", "org.objectweb.jorm.generator.lib.JormGenerator"); - prop.put("jorm.mimanager", "org.objectweb.jorm.metainfo.lib.JormManager"); - prop.put("jorm.writer", "org.objectweb.jorm.mi2xml.lib.BasicDomWriter"); - prop.put("jorm.mapper.list", "rdb"); - prop.put("jorm.mapper.mifactory.rdb", "org.objectweb.jorm.mapper.rdb.metainfo.RdbMappingFactory"); - prop.put("jorm.mapper.mopfactory.rdb", "org.objectweb.jorm.mapper.rdb.generator.RdbMOPFactory"); - prop.put("jorm.mapper.gcmapping.rdb", "org.objectweb.jorm.mapper.rdb.genclass.RdbGenClassMapping"); - prop.put("jorm.mapper.schmgr.rdb", "org.objectweb.jorm.mapper.rdb.lib.RdbPMappingStructuresManager"); - prop.put("jorm.mapper.writer.rdb", "org.objectweb.jorm.mapper.rdb.mi2xml.RdbDomtreeBuilder"); - prop.put("use.context.classloader", "true"); - prop.put("jorm.mapper.submappers.rdb", "generic"); - jcc.configure(prop); - jcc.setLoggerFactory(Log.getLoggerFactory()); - jormCompiler.setMIManager(miManager); - return jormCompiler; - } - - /** - * Allocate and configure a Velocity Engine. - * @return the Velocity Engine - * @throws GenICException in error case - */ - private VelocityEngine allocateVelocityEngine() throws GenICException { - - VelocityEngine ve = new VelocityEngine(); - String packageName = this.getClass().getPackage().getName(); - packageName = packageName.replace('.', '/'); - ve.setProperty(RuntimeConstants.VM_LIBRARY, packageName + "/GenICMacros.vm"); - ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class"); - ve.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName()); - - Logger vLogger = Log.getLogger(Log.JONAS_GENIC_VELOCITY_PREFIX); - // Connect the velocity log system to monolog - ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, new VelocityMonologLogger(vLogger)); - - try { - ve.init(); - } catch (Exception e) { - throw new GenICException("Cannot initialize the Velocity engine", e); - } - return ve; - } - - /** - * Compiles the java sources generated by the constructor I.e. : - *

      - *
    • compile the classes via javac, - *
    • create the stubs and skeletons for the protocols supported(RMI/JRMP, - * RMI/IIOP) via rmic - *
    - * @param classpath classpath value - * @param loader ClassLoader used for compilation of interposition classes - * @exception GenICException In error case - */ - public void compilClasses(final String classpath, - final ClassLoader loader) throws GenICException { - - Cmd jrmpCmd; - Cmd iiopCmd; - - String cmdRmic; - - if (!generatedIC) { - return; - } - - /* - * Init the command names - */ - cmdRmic = javaHomeBin + "rmic"; - - /* - * Compile the generated sources - */ - List sources = new ArrayList(); - for (Iterator it = remoteJavas.iterator(); it.hasNext();) { - String srcName = (String) it.next(); - if (srcName.contains(outputdir)) { - sources.add(srcName.substring(outputdir.length() + 1)); - } else { - sources.add(srcName.substring(canonicalOutputdir.length() + 1)); - } - filesToDelete.add(srcName); - } - for (Iterator it = noRemoteJavas.iterator(); it.hasNext();) { - String srcName = (String) it.next(); - if (srcName.contains(outputdir)) { - sources.add(srcName.substring(outputdir.length() + 1)); - } else { - sources.add(srcName.substring(canonicalOutputdir.length() + 1)); - } - filesToDelete.add(srcName); - } - - File out = new File(outputdir); - - // Init the compilation context - CompilationContext context = new CompilationContext(); - context.setContextualClassLoader(loader); - context.setOutputDirectory(out); - context.setSourceDirectory(out); - context.setSources(sources); - - // Compile - JOnASCompiler compiler = new JOnASCompiler(context); - - logger.log(BasicLevel.INFO, "Compiling Interposition classes ..."); - List errors = compiler.compile(); - if (errors.isEmpty()) { - logger.log(BasicLevel.INFO, "Sources classes successfully compiled with Eclipse compiler."); - } else { - for (CompilerError error : errors) { - logger.log(BasicLevel.ERROR, error.toString()); - } - throw new GenICException("Failed when compiling the generated classes"); - } - - if (remoteJavas.size() == 0) { - return; - } - - /* - * Generate the stub and skeletons of the home and remote implementations - */ - - if (!new File(cmdRmic).exists()) { - // Maybe this is on windows - if (!new File(cmdRmic + ".exe").exists()) { - logger.log(BasicLevel.INFO, "No rmic command was found at '" + cmdRmic - + "'. Check that you are using a JDK and not a JRE."); - } - } - jrmpCmd = new Cmd(cmdRmic, gp.isInvokeCmd()); - jrmpCmd.addArgument("-classpath"); - jrmpCmd.addArgument(classpath); - //jrmpCmd.addArgument("-verbose"); - - iiopCmd = new Cmd(cmdRmic, gp.isInvokeCmd()); - iiopCmd.addArgument("-classpath"); - iiopCmd.addArgument(classpath); - iiopCmd.addArgument("-iiop"); - iiopCmd.addArgument("-poa"); - iiopCmd.addArgument("-always"); - - if (!"".equals(outputdir)) { - jrmpCmd.addArgument("-d"); - jrmpCmd.addArgument(outputdir); - iiopCmd.addArgument("-d"); - iiopCmd.addArgument(outputdir); - } - - jrmpCmd.addArguments(gp.getRmicOptions()); - iiopCmd.addArguments(gp.getRmicOptions()); - - for (Iterator it = remoteClasses.iterator(); it.hasNext();) { - String className = (String) it.next(); - jrmpCmd.addArgument(className); - iiopCmd.addArgument(className); - } - - // Use fast rmic, if there are failures, fallback to rmic - if (gp.getProtocols().isSupported(Protocols.RMI_JRMP) && gp.isFastRmicEnabled()) { - ArrayList args = new ArrayList(); - boolean skip = true; - for (Iterator it = jrmpCmd.getCommandLine(); it.hasNext();) { - Object o = it.next(); - if (skip) { - skip = false; - continue; - } - args.add(o); - } - - String[] a = (String[]) args.toArray(new String[] {}); - Method m = null; - try { - Class c = Class.forName("org.ow2.fastrmic.RMIC"); - m = c.getMethod("main", new Class[] {String[].class}); - } catch (ClassNotFoundException cnfe) { - logger.log(BasicLevel.ERROR, - "continuing after class not found ", cnfe); - gp.setFastRmicEnabled(false); - } catch (NoSuchMethodException nsme) { - logger.log(BasicLevel.ERROR, - "continuing after no such method ", nsme); - gp.setFastRmicEnabled(false); - } - - if (m != null) { - logger.log(BasicLevel.INFO, "Running fastrmic"); - try { - m.invoke(null, new Object[] {a}); - // Call to the GC for bug (#303750) - // fastRMIC load classes of the jar, then there is a lock on the file until the GC is called. - System.gc(); - } catch (IllegalAccessException iae) { - logger.log(BasicLevel.ERROR, "continuing after illegal access", iae); - gp.setFastRmicEnabled(false); - } catch (InvocationTargetException ite) { - throw new GenICException("error in fastrmic", ite); - } - logger.log(BasicLevel.INFO, "Stubs and Skels successfully generated with fastrmic for rmi/jrmp"); - } - } - - if (gp.getProtocols().isSupported(Protocols.RMI_JRMP) && !gp.isFastRmicEnabled()) { - logger.log(BasicLevel.INFO, "Running '" + jrmpCmd.toString() + "'"); - if (jrmpCmd.run()) { - logger.log(BasicLevel.INFO, "Stubs and Skels successfully generated for rmi/jrmp"); - } else { - throw new GenICException("Failed when generating the Stubs and Skels with rmic jrmp"); - } - } - - if (gp.getProtocols().isSupported(Protocols.RMI_IIOP)) { - logger.log(BasicLevel.INFO, "Running '" + iiopCmd.toString() + "'"); - if (iiopCmd.run()) { - logger.log(BasicLevel.INFO, "Stubs and Skels successfully generated for rmi/iiop"); - } else { - throw new GenICException("Failed when generating the Stubs and Skels with rmic iiop"); - } - - } - } - - /** - * Add the generated classes in the given ejb-jar file. - * @throws GenICException if the classes cannot be added in the jar file - */ - public void addClassesInJar() throws GenICException { - - if (!generatedIC) { - // Place back the working copy - File wc = new File(gp.getWorkingFilename()); - File original = new File(gp.getOriginalFilename()); - wc.renameTo(original); - return; - } - - filesToDelete.add(outputdir); - - ArrayList lf = new ArrayList(); - getFilesList(outputdir, lf, !gp.isKeepGenerated()); - - updateJar(lf); - - } - - /** - * Convert a name from any format in Jar filename format. - * @param name filename to be converted - * @return converted filename - */ - protected String convertName(final String name) { - return name.replace('\\', '/'); - } - - /** - * Add some classes in an existing jar file via the java.util.jar api. - * @param lfn list of filenames to add - * @throws GenICException if the classes cannot be added - */ - private void updateJar(final List lfn) - throws GenICException { - - File target = new File(gp.getOriginalFilename()); - - int is = outputdir.length() + 1; - - if (target.isFile()) { - // The original file is a jar, so we need to update a jar - File workingCopy = null; - JarFile wcJarArchive = null; - JarOutputStream finalJarArchive = null; - - // Directly create the final jar as we already have moved - // the original file into a temporary working copy - - try { - workingCopy = new File(gp.getWorkingFilename()); - - // open existing jar file - wcJarArchive = new JarFile(workingCopy); - - // create final jar - finalJarArchive = new JarOutputStream(new FileOutputStream(target)); - - byte[] buffer = new byte[BUFFER_SIZE]; - int read = 0; - - // Add all generated files to the final jar - FileInputStream file = null; - Iterator iterFiles = lfn.iterator(); - while (iterFiles.hasNext()) { - try { - String fileName = (String) iterFiles.next(); - - file = new FileInputStream(fileName); - JarEntry entry = new JarEntry(convertName(fileName.substring(is))); - finalJarArchive.putNextEntry(entry); - // contents - while ((read = file.read(buffer)) != -1) { - finalJarArchive.write(buffer, 0, read); - } - } finally { - file.close(); - } - } - - // Add the rest of files (except if already included) - Enumeration ents = wcJarArchive.entries(); - while (ents.hasMoreElements()) { - JarEntry entry = (JarEntry) ents.nextElement(); - // add only if there is no newer version already included - // In Windows we must replace / by \ for a correct path - if (!lfn.contains(outputdir + File.separator + entry.getName().replace('/', File.separatorChar))) { - InputStream enStream = wcJarArchive.getInputStream(entry); - // If the initial compression level is not the same as the - // target's, the compressed size will change. Therefore, - // ignore initial compressed size. - entry.setCompressedSize(-1); - finalJarArchive.putNextEntry(entry); - // contents - while ((read = enStream.read(buffer)) != -1) { - finalJarArchive.write(buffer, 0, read); - } - enStream.close(); - enStream = null; - } - } - - } catch (Exception e) { - throw new GenICException("Failed when adding the generated classes " - + "in the given ejb-jar file '" + gp.getOriginalFilename(), e); - } finally { - // close jar archives - try { - wcJarArchive.close(); - } catch (IOException ioe) { - logger.log(BasicLevel.WARN, "Failed to close jar archive file '" + wcJarArchive.getName() + "': " - + ioe.getMessage()); - } - wcJarArchive = null; - try { - finalJarArchive.close(); - } catch (IOException ioe) { - logger.log(BasicLevel.WARN, "Failed to close temporary jar archive file '" + wcJarArchive.getName() + "': " - + ioe.getMessage()); - } - finalJarArchive = null; - } - - // Remove the working copy - if (!workingCopy.delete()) { - logger.log(BasicLevel.WARN, "Failed to delete working copy jar archive file '" + workingCopy + "'"); - } - } else { - // the original is a directory, so we simply place the generated - // classes at the appropriate place. - - Iterator iterFiles = lfn.iterator(); - try { - while (iterFiles.hasNext()) { - String fileName = (String) iterFiles.next(); - // Remove the generation directory name of the filename - String partialFileName = fileName.substring(is); - - // Construct any missing parent directory - File targetFile = new File(target, partialFileName); - File parent = targetFile.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - FileUtils.copyFile(new File(fileName), targetFile); - } - } catch (FileUtilsException e) { - throw new GenICException("Cannot update original directory '" + target - + "' with generated classes", e); - } - - } - - } - - /** - * Clean the intermediate generated files. - */ - public void clean() { - logger.log(BasicLevel.DEBUG, "Deleting " + filesToDelete.toString()); - for (Iterator it = filesToDelete.iterator(); it.hasNext();) { - String name = (String) it.next(); - File f = new File(name); - delete(f); - } - } - - /** - * Delete a file or directory recursively. - * @param f file or directory to be deleted - * @return true if deletion ok, false otherwise. - */ - private boolean delete(final File f) { - if (f.isFile()) { - return f.delete(); - } else { - File[] childs = f.listFiles(); - if (childs == null) { - // no childs - return f.delete(); - } else { - // childs - boolean result = true; - for (int i = 0; i < childs.length; i++) { - result &= delete(childs[i]); - } - return result && f.delete(); - } - } - } - - /** - * Display the usage. - */ - static void usage() { - StringBuffer msg = new StringBuffer(); - msg.append("Usage: java org.ow2.jonas.generators.genic.GenIC -help \n"); - msg.append(" to print this help message \n"); - msg.append(" or java org.ow2.jonas.generators.genic.GenIC \n"); - msg.append(" to generate the container-specific classes for given EJB(s). \n"); - msg.append(" \n"); - msg.append("Options include: \n"); - msg.append(" -d specify where to place the generated files \n"); - msg.append(" -noaddinjar do not add the generated classes in the given \n"); - msg.append(" ejb-jar file \n"); - msg.append(" -nocompil do not compile the generated source files via \n"); - msg.append(" the java and rmi compilers \n"); - msg.append(" -novalidation parse the XML deployment descriptors without \n"); - msg.append(" validation \n"); - msg.append(" -classpath define the classpath to be used to compile classes \n"); - msg.append(" -javac specify the java compiler to use \n"); - msg.append(" -javacopts specify the options to pass to the java compiler \n"); - msg.append(" -rmicopts specify the options to pass to the rmi compiler \n"); - msg.append(" -protocols list of protocol, separated by comma \n"); - msg.append(" (default is jrmp) \n"); - msg.append(" -invokecmd invoke, in some case, directly the method of the java class\n"); - msg.append(" corresponding to the command \n"); - msg.append(" -keepgenerated do not delete intermediate generated source files \n"); - msg.append(" -verbose \n"); - msg.append(" -debug deprecated (use the JOnAS trace properties file)\n"); - msg.append(" \n"); - msg.append(" Input_File standard deployment descriptor file's name or \n"); - msg.append(" ejb-jar file's name \n"); - logger.log(BasicLevel.ERROR, msg.toString()); - } - - /** - * Display the specified error message and exits with an EXIT_FAILURE - * status. - * @param msg the error message to display - * @param e the exception raised - */ - static void fatalError(final String msg, final Exception e) { - logger.log(BasicLevel.ERROR, "GenIC fatal error: " + msg + e.getMessage()); - throw new RuntimeException(msg, e); - } - - /** - * Display the specified error message and exits with an EXIT_FAILURE - * status. - * @param e the error to display - */ - static void fatalError(final Exception e) { - logger.log(BasicLevel.ERROR, "GenIC fatal error: " + e.getMessage()); - throw new RuntimeException(e.getMessage(), e); - } - - /** - * Create a cleaned temporary directory. - * @return the temp directory file name - * @throws IOException if a temp directory cannot be created. - */ - static String createTempDir() throws IOException { - File tmpDir = File.createTempFile("genic", null, null); - tmpDir.delete(); - if (!tmpDir.mkdir()) { - throw new IOException("Cannot create the temporary directory '" + tmpDir + "'."); - } - return tmpDir.getAbsolutePath(); - } - - /** - * Get the list file names recursively of the given directory. - * @param dir the directory used to list files - * @param list list to store filenames - * @param onlyClass stores only class or not ? - */ - static void getFilesList(final String dir, - final ArrayList list, - final boolean onlyClass) { - File df = new File(dir); - if (df.exists() && df.isDirectory()) { - File[] ls = df.listFiles(); - for (int i = 0; i < ls.length; i++) { - File f = ls[i]; - String fn = f.getAbsolutePath(); - if (f.isDirectory()) { - getFilesList(fn, list, onlyClass); - } else { - if (!onlyClass || fn.endsWith(".class")) { - if (!fn.endsWith(".save")) { - list.add(fn); - } - } - } - } - } - } -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICException.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICException.java deleted file mode 100644 index 457e24c049..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICException.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genic; - -/** - * This class represents the exception that can be throwned by the GenIC tool. - * - * @author Helene Joanin : Initial developer - */ -public class GenICException extends Exception { - - protected Exception inner = null; - - /** - * Constructs an GenICException with no specified detail message. - */ - public GenICException() { - super(); - } - - /** - * Constructs an GenICException with the specified detail message. - */ - public GenICException(String msg) { - super(msg); - } - - public GenICException(String msg, Exception inner) { - super(msg); - this.inner = inner; - - } - - public String toString() { - String s = GenICException.class.getName() + ": " + super.getMessage(); - if (inner == null) { - return (s); - } else { - return (s + " (" + inner.toString() + ")"); - } - } - - public String getMessage() { - String s = super.getMessage(); - if (inner == null) { - return (s); - } else { - return (s + " (" + inner.getMessage() + ")"); - } - } - - public void printStackTrace() { - System.out.println(getMessage()); - if (inner != null) { - inner.printStackTrace(); - } - } - public void printStackTrace(java.io.PrintStream s) { - s.println(getMessage()); - if (inner != null) { - inner.printStackTrace(s); - } - } - public void printStackTrace(java.io.PrintWriter s) { - s.println(getMessage()); - if (inner != null) { - inner.printStackTrace(s); - } - } -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICParameters.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICParameters.java deleted file mode 100644 index 5a44bfa888..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/GenICParameters.java +++ /dev/null @@ -1,350 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import java.io.File; -import java.util.ArrayList; - -import org.ow2.jonas.lib.ejb21.Protocols; - - -/** - * GenIC Parameters holder. - * - * @author Guillaume Sauthier - */ -public class GenICParameters { - - /** - * Supported protocol list. - */ - private Protocols protocols = null; - - /** - * directory where files will be generated. - */ - private String outputDirectory = null; - - /** - * is verbose mode ? - */ - private boolean verbose = false; - - /** - * do not delete intermediate generated source files. - */ - private boolean keepGenerated = false; - - /** - * compile the generated source files via the java and - * rmi compilers. - */ - private boolean compil = true; - - /** - * display the help message. - */ - private boolean help = false; - - /** - * add the generated classes in the given ejb-jar - * file. - */ - private boolean addInJar = true; - - /** - * parse the XML deployment descriptors with - * validation. - */ - private boolean parseWithValidation = true; - - /** - * invoke, in some case, directly the method of the java - * class corresponding to the command. - */ - private boolean invokeCmd = false; - - /** - * use fastRMIC compiler. - */ - private boolean fastRmicEnabled = true; - - /** - * file name of the standard deployment descriptor (.xml ended), - * or file name of the EJB-jar (.jar ended). - */ - private String inputFilename = null; - - /** - * name of the java compiler to use. - */ - private String javacName = null; - - /** - * options to pass to the java compiler. - */ - private ArrayList javacOptions = new ArrayList(); - - /** - * options to pass to the rmi compiler. - */ - private ArrayList rmicOptions = new ArrayList(); - - /** - * define the classpath to be used to compile classes. - */ - private String classpathParam = null; - - /** - * Generated working copy file. - */ - private String workingFilename = null; - - /** - * @return Returns the outputDirectory. - */ - public String getOutputDirectory() { - return outputDirectory; - } - - /** - * @param outputDirectory The outputDirectory to set. - */ - public void setOutputDirectory(final String outputDirectory) { - this.outputDirectory = outputDirectory; - } - - /** - * @return Returns the protocols. - */ - public Protocols getProtocols() { - return protocols; - } - - /** - * @param protocols The protocols to set. - */ - public void setProtocols(final Protocols protocols) { - this.protocols = protocols; - } - - /** - * @return Returns the verbose. - */ - public boolean isVerbose() { - return verbose; - } - - /** - * @param verbose The verbose to set. - */ - public void setVerbose(final boolean verbose) { - this.verbose = verbose; - } - - /** - * @return Returns the addInJar. - */ - public boolean isAddInJar() { - return addInJar; - } - - /** - * @param addInJar The addInJar to set. - */ - public void setAddInJar(final boolean addInJar) { - this.addInJar = addInJar; - } - - /** - * @return Returns the classpathParam. - */ - public String getClasspathParam() { - return classpathParam; - } - - /** - * @param classpathParam The classpathParam to set. - */ - public void setClasspathParam(final String classpathParam) { - this.classpathParam = classpathParam; - } - - /** - * @return Returns the compil. - */ - public boolean isCompil() { - return compil; - } - - /** - * @param compil The compil to set. - */ - public void setCompil(final boolean compil) { - this.compil = compil; - } - - /** - * @return Returns the fastRmicEnabled. - */ - public boolean isFastRmicEnabled() { - return fastRmicEnabled; - } - - /** - * @param fastRmicEnabled The fastRmicEnabled to set. - */ - public void setFastRmicEnabled(final boolean fastRmicEnabled) { - this.fastRmicEnabled = fastRmicEnabled; - } - - /** - * @return Returns the help. - */ - public boolean isHelp() { - return help; - } - - /** - * @param help The help to set. - */ - public void setHelp(final boolean help) { - this.help = help; - } - - /** - * @return Returns the inputFilename. - */ - public String getInputFilename() { - return inputFilename; - } - - /** - * @param inputFilename The inputFilename to set. - */ - public void setInputFilename(final String inputFilename) { - this.inputFilename = inputFilename; - } - - /** - * @return Returns the original (unchanged) inputFilename. - */ - public String getOriginalFilename() { - return inputFilename; - } - - /** - * @return Returns the working copy inputFilename. - */ - public String getWorkingFilename() { - - // Only do that once - if (workingFilename == null) { - - // prepend an almost unique prefix to the original filename - File input = new File(inputFilename); - String filename = input.getName(); - File parent = input.getParentFile(); - - File out = new File(parent, "GenICWorkingCopyJar-" + filename); - - workingFilename = out.getPath(); - } - return workingFilename; - } - - /** - * @return Returns the invokeCmd. - */ - public boolean isInvokeCmd() { - return invokeCmd; - } - - /** - * @param invokeCmd The invokeCmd to set. - */ - public void setInvokeCmd(final boolean invokeCmd) { - this.invokeCmd = invokeCmd; - } - - /** - * @return Returns the javacName. - */ - public String getJavacName() { - return javacName; - } - - /** - * @param javacName The javacName to set. - */ - public void setJavacName(final String javacName) { - this.javacName = javacName; - } - - /** - * @return Returns the keepGenerated. - */ - public boolean isKeepGenerated() { - return keepGenerated; - } - - /** - * @param keepGenerated The keepGenerated to set. - */ - public void setKeepGenerated(final boolean keepGenerated) { - this.keepGenerated = keepGenerated; - } - - /** - * @return Returns the parseWithValidation. - */ - public boolean isParseWithValidation() { - return parseWithValidation; - } - - /** - * @param parseWithValidation The parseWithValidation to set. - */ - public void setParseWithValidation(final boolean parseWithValidation) { - this.parseWithValidation = parseWithValidation; - } - - /** - * @return Returns the javacOptions. - */ - public ArrayList getJavacOptions() { - return javacOptions; - } - - /** - * @return Returns the rmicOptions. - */ - public ArrayList getRmicOptions() { - return rmicOptions; - } - - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/Source.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/Source.java deleted file mode 100644 index 40fab1b4ab..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/Source.java +++ /dev/null @@ -1,276 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp1Desc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp2Desc; -import org.ow2.jonas.deployment.ejb.SessionStatefulDesc; -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; -import org.ow2.jonas.lib.util.Log; - -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; - -import org.objectweb.jorm.metainfo.api.Manager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class allows to generate the source of : the class that implements the - * Enterprise bean's remote interface, the class that implements the Enterprise - * bean's home interface, the class that implements the Enterprise bean's local - * interface, the class that implements the Enterprise bean's localhome - * interface, the class of the Entity Handle in case of entity, or the extended - * class of the Bean for persistence in case of entity with CMP, via a Velocity - * template of the given Enterprise Java Bean. - * @author Helene Joanin : Initial developer - */ -class Source { - - /** - * home source - */ - static final int HOME = 0; - /** - * local home source - */ - static final int LOCAL_HOME = 1; - /** - * remote source - */ - static final int REMOTE = 2; - /** - * local source - */ - static final int LOCAL = 3; - /** - * entity handle source - */ - static final int ENTITY_HANDLE = 4; - /** - * CMP1 or CMP2 entity bean source - */ - static final int ENTITY_CMP_JDBC = 5; - /** - * interface coherence source for CMP2 entity - */ - static final int ITF_COH_CMP2_ENTITY = 7; - - /** - * service endpoint source - */ - static final int SERVICE_ENDPOINT = 9; - - /** - * service endpoint home source - */ - static final int SERVICE_ENDPOINT_HOME = 10; - - /** - * Bean Deployment Description - */ - private BeanDesc dd = null; - - /** - * Name of the generated source file - */ - private String srcFileName = null; - - /** - * Generated source file type - */ - private int srcType; - - /** - * Velocity engine - */ - private VelocityEngine vEngine = null; - - /** - * Velocity context - */ - private VelocityContext vctx = null; - - /** - * logger - */ - private Logger logger = null; - - /** - * Source Constructor - * @param beanDesc deployment descriptor of the bean - * @param fileName name of the source file to generate - * @param type source's type (HOME, LOCAL_HOME, REMOTE, ...) - * @param ve Velocity engine to use - * @exception GenICException In error case - */ - Source(BeanDesc beanDesc, String fileName, int type, VelocityEngine ve, Manager mgr) throws GenICException { - dd = beanDesc; - srcFileName = fileName; - srcType = type; - vctx = VContextFactory.create(dd, srcType, mgr); - vEngine = ve; - logger = Log.getLogger(Log.JONAS_GENIC_PREFIX); - // Trace of the Velocity Context - Logger vLogger = Log.getLogger(Log.JONAS_GENIC_VELOCITY_PREFIX); - if (vLogger.getCurrentIntLevel() == BasicLevel.DEBUG) { - vLogger.log(BasicLevel.DEBUG, "Source(..,fileName=" + fileName + ", type = " + type + ", ..)"); - vLogger.log(BasicLevel.DEBUG, "VELOCITY CONTEXT = \n(" + VContextFactory.toString(vctx) + "\n)"); - } - } - - /** - * Generates the java source - * @throws GenICException in error case - */ - void generate() throws GenICException { - - String tmplName = null; - Template tmpl = null; - FileWriter fwriter = null; - - switch (srcType) { - case HOME: - if (dd instanceof EntityDesc) { - tmplName = "JEntityHome.vm"; - } else if (dd instanceof SessionStatefulDesc) { - tmplName = "JStatefulHome.vm"; - } else if (dd instanceof SessionStatelessDesc) { - tmplName = "JStatelessHome.vm"; - } - break; - case LOCAL_HOME: - if (dd instanceof EntityDesc) { - tmplName = "JEntityLocalHome.vm"; - } else if (dd instanceof SessionStatefulDesc) { - tmplName = "JStatefulLocalHome.vm"; - } else if (dd instanceof SessionStatelessDesc) { - tmplName = "JStatelessLocalHome.vm"; - } - break; - case REMOTE: - if (dd instanceof EntityDesc) { - tmplName = "JEntityRemote.vm"; - } else if (dd instanceof SessionStatefulDesc) { - tmplName = "JStatefulRemote.vm"; - } else if (dd instanceof SessionStatelessDesc) { - tmplName = "JStatelessRemote.vm"; - } - break; - case LOCAL: - if (dd instanceof EntityDesc) { - tmplName = "JEntityLocal.vm"; - } else if (dd instanceof SessionStatefulDesc) { - tmplName = "JStatefulLocal.vm"; - } else if (dd instanceof SessionStatelessDesc) { - tmplName = "JStatelessLocal.vm"; - } - break; - case SERVICE_ENDPOINT: - if (dd instanceof SessionStatelessDesc) { - tmplName = "JServiceEndpoint.vm"; - } - break; - case SERVICE_ENDPOINT_HOME: - if (dd instanceof SessionStatelessDesc) { - tmplName = "JServiceEndpointHome.vm"; - } - break; - case ENTITY_HANDLE: - if (dd instanceof EntityDesc) { - tmplName = "JEntityHandle.vm"; - } - break; - case ENTITY_CMP_JDBC: - if (dd instanceof EntityJdbcCmp1Desc) { - tmplName = "JEntityCmpJdbc.vm"; - } - if (dd instanceof EntityJdbcCmp2Desc) { - tmplName = "JEntityCmp2.vm"; - } - break; - case ITF_COH_CMP2_ENTITY: - if (dd instanceof EntityJdbcCmp2Desc) { - tmplName = "JEntityCmp2CoherenceItf.vm"; - } - break; - default: - break; - } - if (tmplName == null) { - throw new GenICException("No template for '" + srcFileName + " !!!'"); - } - - String name = null; - try { - // must add the package name - name = this.getClass().getPackage().getName().replace('.', '/') + "/" + tmplName; - tmpl = vEngine.getTemplate(name); - } catch (Exception e) { - throw new GenICException("Cannot get " + name, e); - } - - try { - // Create before the parent directory - File fs = new File(srcFileName); - File fdir = fs.getParentFile(); - if (fdir != null) { - if (!fdir.exists()) { - if (!fdir.mkdirs()) { - throw new IOException("Cannot create the directory '" + fdir.getPath() + "'"); - } - } - } - fwriter = new FileWriter(srcFileName); - } catch (IOException e) { - e.printStackTrace(); - throw new GenICException("Cannot create the '" + srcFileName + "' source file", e); - } - logger.log(BasicLevel.DEBUG, "Generate the file " + srcFileName); - try { - tmpl.merge(vctx, fwriter); - } catch (Exception e) { - throw new GenICException("Cannot generate the '" + srcFileName + "' source from the '" + tmplName - + "' template", e); - } - - try { - fwriter.flush(); - fwriter.close(); - } catch (IOException e) { - throw new GenICException("Cannot close the '" + srcFileName + "' source file", e); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VContextFactory.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VContextFactory.java deleted file mode 100644 index 9c977f8800..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VContextFactory.java +++ /dev/null @@ -1,633 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Date; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Vector; - -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.EjbRelationshipRoleDesc; -import org.ow2.jonas.deployment.ejb.EntityCmp1Desc; -import org.ow2.jonas.deployment.ejb.EntityCmp2Desc; -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.deployment.ejb.FieldDesc; -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; -import org.ow2.jonas.lib.ejb21.JavaType; -import org.ow2.jonas.lib.util.BeanNaming; - -import org.apache.velocity.VelocityContext; - - - - -import org.objectweb.jorm.metainfo.api.Manager; - - -/** - * This class allows to create the Velocity Context used to build the generated - * sources with the Velocity templates. - * - * @author: Helene Joanin (Bull) : Initial developer - */ - -public class VContextFactory { - - /** - * Creates the Velocity Context used to build the generated sources with the Velocity templates. - * There are different types of Velocity Context : - * HOME, LOCAL_HOME, REMOTE, LOCAL, ENTITY_HANDLE, ENTITY_CMP_JDBC, ... - * @see Source.java for type definitions. - * @param dd The bean Deployment Descriptor - * @param srcType the type of Velocity Context - * @return Return the Velocity Context associated to the gievn bean for the given source to generate - * @throws GenICException in error case - */ - public static VelocityContext create(BeanDesc dd, int srcType, Manager mgr) throws GenICException { - - String value = null; - VelocityContext vc = new VelocityContext(); - - vc.put("dd", dd); - vc.put("EntityCMP2", (dd instanceof EntityCmp2Desc ? Boolean.TRUE : Boolean.FALSE)); - - vc.put("jVersion", Version.getNumber()); - - if (dd.getHomeClass() != null) { - value = dd.getHomeClass().getName(); - vc.put("home", value); - } - - if (dd.getLocalHomeClass() != null) { - value = dd.getLocalHomeClass().getName(); - vc.put("localhome", value); - } - - if (dd.getRemoteClass() != null) { - value = dd.getRemoteClass().getName(); - vc.put("remote", value); - } - - if (dd.getLocalClass() != null) { - value = dd.getLocalClass().getName(); - vc.put("local", value); - } - - if (dd instanceof SessionStatelessDesc) { - SessionStatelessDesc ssd = (SessionStatelessDesc) dd; - if (ssd.getServiceEndpointClass() != null) { - value = ssd.getServiceEndpointClass().getName(); - vc.put("serviceEndpoint", value); - } - if (ssd.getFullWrpServiceEndpointName() != null) { - value = ssd.getFullWrpServiceEndpointName(); - vc.put("service-endpoint_wrp", value); - } - if (ssd.getFullWrpSEHomeName() != null) { - value = ssd.getFullWrpSEHomeName(); - vc.put("service-endpoint-home_wrp", value); - } - } - - if (dd.getFullWrpHomeName() != null) { - value = dd.getFullWrpHomeName(); - vc.put("home_wrp", value); - } - - if (dd.getFullWrpLocalHomeName() != null) { - value = dd.getFullWrpLocalHomeName(); - vc.put("localhome_wrp", value); - } - - if (dd.getFullWrpRemoteName() != null) { - value = dd.getFullWrpRemoteName(); - vc.put("remote_wrp", value); - } - - if (dd.getFullWrpLocalName() != null) { - value = dd.getFullWrpLocalName(); - vc.put("local_wrp", value); - } - - value = dd.getEjbClass().getName(); - vc.put("bean", value); - - value = dd.getFullDerivedBeanName(); - vc.put("bean_wrp", value); // Same as "bean" if not a Entity CMP - - if (dd.getFullWrpHandleName() != null) { - value = dd.getFullWrpHandleName(); - vc.put("handle", value); - } - - vc.put("isClusterReplicated", Boolean.valueOf(dd.isClusterReplicated())); - - if (dd instanceof EntityDesc) { - Class c = ((EntityDesc) dd).getPrimaryKeyClass(); - if (c.equals(Object.class)) { - // Auto key generated so convert into Integer - c = Integer.class; - } - value = c.getName(); - vc.put("pk", value); - vc.put("pkIsUserClass", pkIsUserClass(value)); - if (dd instanceof EntityCmp2Desc) { - if (c.equals(String.class)) { - vc.put("pkEncodeMethod", "encodeString"); - vc.put("pkDecodeMethod", "decodeString((java.lang.String) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Character.class)) { - vc.put("pkEncodeMethod", "encodeOchar"); - vc.put("pkDecodeMethod", "decodeOchar((java.lang.Character) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Byte.class)) { - vc.put("pkEncodeMethod", "encodeObyte"); - vc.put("pkDecodeMethod", "decodeObyte((java.lang.Byte) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Short.class)) { - vc.put("pkEncodeMethod", "encodeOshort"); - vc.put("pkDecodeMethod", "decodeOshort((java.lang.Short) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Integer.class)) { - vc.put("pkEncodeMethod", "encodeOint"); - vc.put("pkDecodeMethod", "decodeOint((java.lang.Integer) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Long.class)) { - vc.put("pkEncodeMethod", "encodeOlong"); - vc.put("pkDecodeMethod", "decodeOlong((java.lang.Long) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Date.class)) { - vc.put("pkEncodeMethod", "encodeDate"); - vc.put("pkDecodeMethod", "decodeDate((java.util.Date) pk)"); - vc.put("pkMappingToMemoryMethod", ""); - } else if (c.equals(Float.class)) { - vc.put("pkEncodeMethod", "encodeString"); - vc.put("pkDecodeMethod", "decodeString((java.lang.String) org.ow2.jonas.lib.ejb21.jorm.FloatPkFieldMapping.toStorage(pk))"); - vc.put("pkMappingToMemoryMethod", "org.ow2.jonas.lib.ejb21.jorm.FloatPkFieldMapping.toMemory"); - } - } - } - - switch (srcType) { - case Source.HOME: - value = BeanNaming.getPackageName(dd.getFullWrpHomeName()); - vc.put("package", value); - value = dd.getWrpHomeName(); - vc.put("class", value); - break; - case Source.LOCAL_HOME: - value = BeanNaming.getPackageName(dd.getFullWrpLocalHomeName()); - vc.put("package", value); - value = dd.getWrpLocalHomeName(); - vc.put("class", value); - break; - case Source.REMOTE: - value = BeanNaming.getPackageName(dd.getFullWrpRemoteName()); - vc.put("package", value); - value = dd.getWrpRemoteName(); - vc.put("class", value); - break; - case Source.LOCAL: - value = BeanNaming.getPackageName(dd.getFullWrpLocalName()); - vc.put("package", value); - value = dd.getWrpLocalName(); - vc.put("class", value); - break; - case Source.SERVICE_ENDPOINT: - SessionStatelessDesc ssd = (SessionStatelessDesc) dd; - value = BeanNaming.getPackageName(ssd.getFullWrpServiceEndpointName()); - vc.put("package", value); - value = ssd.getWrpServiceEndpointName(); - vc.put("class", value); - break; - case Source.SERVICE_ENDPOINT_HOME: - SessionStatelessDesc ssd1 = (SessionStatelessDesc) dd; - value = BeanNaming.getPackageName(ssd1.getFullWrpSEHomeName()); - vc.put("package", value); - value = ssd1.getWrpSEHomeName(); - vc.put("class", value); - break; - case Source.ENTITY_HANDLE: - value = BeanNaming.getPackageName(dd.getFullWrpHandleName()); - vc.put("package", value); - value = dd.getWrpHandleName(); - vc.put("class", value); - break; - case Source.ENTITY_CMP_JDBC: - value = BeanNaming.getPackageName(dd.getFullDerivedBeanName()); - vc.put("package", value); - value = dd.getDerivedBeanName(); - vc.put("class", value); - break; - default: - break; - } - - ArrayList prototypeMethodList = new ArrayList(); - ArrayList vcMethodList = new ArrayList(); - Method [] methods = null; - switch (srcType) { - case Source.HOME: - /* - * Add in the methods list, the Home interface methods, except - * - methods (other than remove) defined in javax.ejb.EJBHome, - * - and overriding methods. - */ - methods = dd.getHomeClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBHome.class) - || "remove".equals(method.getName())) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - break; - case Source.LOCAL_HOME: - /* - * Add in the methods list, the LocalHome interface methods, except - * - methods (other than remove) defined in javax.ejb.EJBLocalHome, - * - and overriding methods. - */ - methods = dd.getLocalHomeClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBLocalHome.class) - || "remove".equals(method.getName())) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - break; - case Source.REMOTE: - /* - * Add in the methods list, the Remote interface methods, except - * - methods (other than remove) defined in javax.ejb.EJBObject, - * - and overriding methods. - */ - methods = dd.getRemoteClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBObject.class) - || "remove".equals(method.getName())) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - break; - case Source.LOCAL: - /* - * Add in the methods list, the Local interface methods, except - * - methods (other than remove) defined in javax.ejb.EJBLocalObject, - * - and overriding methods. - */ - methods = dd.getLocalClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBLocalObject.class) - || "remove".equals(method.getName())) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - break; - case Source.SERVICE_ENDPOINT: - /* - * Add in the methods list, the ServiceEndpoint interface methods - */ - SessionStatelessDesc ssd = (SessionStatelessDesc) dd; - methods = ssd.getServiceEndpointClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = new VcMethod(method, ssd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - break; - case Source.ENTITY_CMP_JDBC: - /* - * Add in the methods list, the Home and LocalHome interfaces methods, except - * - methods defined in javax.ejb.EJBHome and javax.ejb.EJBLocalHome and - * - and overriding methods. - * Same methods may be defined both in the Home interface and in the - * LocalHome interface. Don't add twice this method in the vcMethodList !!! - * - * Futhermore, in case of create() methods, methods added in the vcMethodList - * are the ejbCreate() associated bean's methods. - */ - if (dd.getHomeClass() != null) { - methods = dd.getHomeClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBHome.class)) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = null; - if (method.getName().startsWith("create")) { - Method beanMethod = getBeanMethod(method, dd.getEjbClass()); - vm = new VcMethod(beanMethod, dd.getMethodDesc(method), dd, mgr); - // add the ejbPostCreate method - Method m = getEjbPostCreateMethod(method, dd.getEjbClass()); - VcMethod vm2 = new VcMethod(m, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm2); - } else { - vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - } - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - } - if (dd.getLocalHomeClass() != null) { - methods = dd.getLocalHomeClass().getMethods(); - for (int i = 0; i < methods.length; i++) { - Method method = methods[i]; - if (!method.getDeclaringClass().equals(javax.ejb.EJBLocalHome.class)) { - String pMeth = convertMethod2String(method); - if (!prototypeMethodList.contains(pMeth)) { - VcMethod vm = null; - if (method.getName().startsWith("create")) { - Method beanMethod = getBeanMethod(method, dd.getEjbClass()); - vm = new VcMethod(beanMethod, dd.getMethodDesc(method), dd, mgr); - // add the ejbPostCreate method - Method m = getEjbPostCreateMethod(method, dd.getEjbClass()); - VcMethod vm2 = new VcMethod(m, dd.getMethodDesc(method), dd, mgr); - vcMethodList.add(vm2); - } else { - vm = new VcMethod(method, dd.getMethodDesc(method), dd, mgr); - } - vcMethodList.add(vm); - prototypeMethodList.add(pMeth); - } - } - } - } - - /* - * Add the - * - setEntityContext(javax.ejb.EntityContext), - * - ejbActivate(), - * - ejbLoad(), - * - ejbStore(), - * - ejbRemove() - * bean's methods. - */ - try { - Class[] params = {javax.ejb.EntityContext.class}; - Method beanMethod = dd.getEjbClass().getMethod("setEntityContext", - params); - VcMethod vm = new VcMethod(beanMethod, null, dd, mgr); - vcMethodList.add(vm); - } catch (Exception e) { - throw new Error("setEntityContext(javax.ejb.EntityContext) method not defined in " - + dd.getEjbClass().getName()); - } - try { - Method beanMethod = dd.getEjbClass().getMethod("ejbActivate", new Class[0]); - VcMethod vm = new VcMethod(beanMethod, null, dd, mgr); - vcMethodList.add(vm); - } catch (Exception e) { - throw new Error("ejbActivate() method not defined in " - + dd.getEjbClass().getName()); - } - try { - Method beanMethod = dd.getEjbClass().getMethod("ejbLoad", new Class[0]); - VcMethod vm = new VcMethod(beanMethod, null, dd, mgr); - vcMethodList.add(vm); - } catch (Exception e) { - throw new Error("ejbLoad() method not defined in " - + dd.getEjbClass().getName()); - } - try { - Method beanMethod = dd.getEjbClass().getMethod("ejbStore", new Class[0]); - VcMethod vm = new VcMethod(beanMethod, null, dd, mgr); - vcMethodList.add(vm); - } catch (Exception e) { - throw new Error("ejbStore() method not defined in " - + dd.getEjbClass().getName()); - } - try { - Method beanMethod = dd.getEjbClass().getMethod("ejbRemove", new Class[0]); - VcMethod vm = new VcMethod(beanMethod, null, dd, mgr); - vcMethodList.add(vm); - } catch (Exception e) { - throw new Error("ejbRemove() method not defined in " - + dd.getEjbClass().getName()); - } - - if (dd instanceof EntityCmp2Desc) { - /* - * Add the ejbSelect() methods defined in the bean. - */ - Method[] bMeths = dd.getEjbClass().getMethods(); - for (int i = 0; i < bMeths.length; i++) { - if (bMeths[i].getName().startsWith("ejbSelect")) { - VcMethod vm = new VcMethod(bMeths[i], dd.getMethodDesc(bMeths[i]), dd, mgr); - vcMethodList.add(vm); - } - } - } - break; - default: - break; - } - vc.put("methodList", new Vector(vcMethodList)); - - ArrayList vcFieldList = new ArrayList(); - ArrayList vcFieldPkList = new ArrayList(); - ArrayList vcFieldNoPkList = new ArrayList(); - if (dd instanceof EntityCmp1Desc) { - EntityCmp1Desc edd = (EntityCmp1Desc) dd; - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldDesc fd = (FieldDesc) i.next(); - VcField vcf = new VcField(fd.getName(), fd.getFieldType(), fd, true); - vcFieldList.add(vcf); - if (fd.isPrimaryKey()) { - vcFieldPkList.add(vcf); - } else { - vcFieldNoPkList.add(vcf); - } - } - } else if (dd instanceof EntityCmp2Desc) { - EntityCmp2Desc edd = (EntityCmp2Desc) dd; - // Define the CMP fields - Iterator it = edd.getCmpFieldDescIterator(); - while (it.hasNext()) { - FieldDesc fd = (FieldDesc) it.next(); - VcField vcf = new VcField(fd); - vcFieldList.add(vcf); - if (fd.isPrimaryKey()) { - vcFieldPkList.add(vcf); - } else { - vcFieldNoPkList.add(vcf); - } - } - // Define the CMR fields - Hashtable cmrFields = new Hashtable(); - for (Iterator i = edd.getEjbRelationshipRoleDescIterator(); i.hasNext();) { - EjbRelationshipRoleDesc rsr = (EjbRelationshipRoleDesc) i.next(); - String cmrname = rsr.getCmrFieldName(); - if (!cmrFields.containsKey(cmrname)) { - cmrFields.put(cmrname, new VcCMRField(rsr)); - } - } - vc.put("cmrList", cmrFields.values()); - } - - vc.put("fieldList", new Vector(vcFieldList)); - vc.put("fieldPkList", new Vector(vcFieldPkList)); - vc.put("fieldNoPkList", new Vector(vcFieldNoPkList)); - - return vc; - } - - /** - * Convert a method to a string depending on its name and its parameters list. - * @param meth method to convert - * @return Return a string representation of the given method - */ - private static String convertMethod2String(Method meth) { - String value = new String(meth.getName()); - Class[] params = meth.getParameterTypes(); - value = value + "_" + params.length; - for (int p = 0; p < params.length; p++) { - value = value + "_" + JavaType.getName(params[p]); - } - return (value); - } - - /** - * @param method home.create() method - * @param bean class of the bean - * @return Return the associated bean's method ejbPostCreate matching the create method of the interface - */ - private static Method getEjbPostCreateMethod(Method method, Class bean) { - Method beanMethod; - String beanMethodName = "ejbPost" + BeanNaming.firstToUpperCase(method.getName()); - try { - beanMethod = bean.getMethod(beanMethodName, method.getParameterTypes()); - } catch (Exception e) { - throw new Error("No associated ejbPostCreate method for the interface method " + method.toString()); - } - return beanMethod; - } - - /** - * Return the associated bean's method of the given interface's method, ie - * - ejbRemove(..) for [home|object]remove(..) - * - ejbCreateXxx(..) for home.createXxx(..) - * - ejbFindXxx(..) for home.findXxx(..) - * - ejbHomeXxx(..) for home.xxx(..) - * - xxx(..) for object.xxx(..) - * @param method interface method - * @param bean class of the bean - * @return Return the associated bean's method to the interface method - */ - private static Method getBeanMethod(Method method, Class bean) { - - String methodName = method.getName(); - Method beanMethod; - boolean isMethodHome = - javax.ejb.EJBHome.class.isAssignableFrom(method.getDeclaringClass()) - || javax.ejb.EJBLocalHome.class.isAssignableFrom(method.getDeclaringClass()); - - String beanMethodName = methodName; - if ("remove".equals(methodName)) { - beanMethodName = "ejbRemove"; - } else if (isMethodHome) { - if (methodName.startsWith("create") || methodName.startsWith("find")) { - beanMethodName = "ejb" + BeanNaming.firstToUpperCase(methodName); - } else { - beanMethodName = "ejbHome" + BeanNaming.firstToUpperCase(methodName); - } - } - - try { - beanMethod = bean.getMethod(beanMethodName, method.getParameterTypes()); - } catch (Exception e) { - throw new Error("No associated bean's method for the interface method " + method.toString()); - } - return beanMethod; - } - - /** - * @param classname name of a class - * @return true if the class is a 'user' class, false if it's a java class - */ - public static Boolean pkIsUserClass(String classname) { - if (classname.startsWith("java.")) { - return Boolean.FALSE; - } else { - return Boolean.TRUE; - } - } - - /** - * @param vc VelocityContext to trace - * @return Return a string representation of the given VelocityContext for debug use - */ - public static String toString(VelocityContext vc) { - StringBuffer ret = new StringBuffer(); - Object [] keys = vc.internalGetKeys(); - for (int i = 0; i < keys.length; i++) { - String key = (String) keys[i]; - Object value = vc.internalGet(key); - if (i > 0) { - ret.append("\n"); - } - if (!"dd".equals(key)) { - // Do not trace the BeanDesc (variable named "dd") - ret.append(" key = " + key + "; value = " + value); - } - } - return (ret.toString()); - } - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcCMRField.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcCMRField.java deleted file mode 100644 index e771ca9d34..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcCMRField.java +++ /dev/null @@ -1,293 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.genic; - -import org.ow2.jonas.deployment.ejb.EjbRelationshipRoleDesc; -import org.ow2.jonas.deployment.ejb.EntityCmp2Desc; -import org.ow2.jonas.lib.util.BeanNaming; - - - -/** - * This class is used in the velocity context. - * It represents a CMR field. - * - * @author S.Chassande-Barrioz : Initial developer - * @author Helene Joanin - */ -public class VcCMRField { - - /** - * Name of the cmr field - */ - private String name; - /** - * Name of cmr field with the first letter capitalized - */ - private String uFLName; - /** - * Type's name of the cmr field - */ - private String typeName; - /** - * First relationship-role of the cmr field - */ - private EjbRelationshipRoleDesc rsr; - /** - * Second relationship-role of the cmr field - */ - private EjbRelationshipRoleDesc rsr2; - /** - * Relation's type of the cmr field - */ - private byte relationType = -1; - /** - * Name of the JORM genclass. - * This field has a non null value if the cmr field is a multivalued relation - */ - private String genClassName = null; - /** - * Description of the cmr filed. - */ - private EntityCmp2Desc element = null; - - /** - * It builds a cmr field descriptor usable in velocity context. - * @param rsr The EjbRelationshipRoleDesc where this CMR field is defined - * @throws GenICException if the Deployment Decriptor is not conform - */ - public VcCMRField(EjbRelationshipRoleDesc rsr) throws GenICException { - this.rsr = rsr; - name = rsr.getCmrFieldName(); - uFLName = upperFL(name); - element = rsr.getTargetBean(); - typeName = rsr.getCmrFieldType().getName(); - if (rsr.isTargetMultiple()) { - if (java.util.Collection.class.equals(rsr.getCmrFieldType())) { - // TODO : Even if Collection has been defined as CMRField Type, we use a Set - genClassName = "org.ow2.jonas.lib.ejb21.jorm.Set"; - } else if (java.util.Set.class.equals(rsr.getCmrFieldType())) { - genClassName = "org.ow2.jonas.lib.ejb21.jorm.Set"; - } else { - throw new GenICException("Unauthorized multivalued relation type:" + rsr.getCmrFieldType()); - } - } - rsr2 = rsr.getOppositeRelationshipRole(); - relationType = rsr.getRelationType(); - } - - /** - * @return the name of the cmr field. - */ - public String getName() { - return name; - } - - /** - * @return the type name of the cmr field. - * It is the referenced class if the relation is multiple, - * otherwise the type of the multivalued relation (java.util.Collection or java.util.Set). - */ - public String getTypeName() { - return typeName; - } - - /** - * This is used to generate method names relative to the CMR Field - * @return the name of cmr field with the first letter capitalized. - */ - public String getUFLName() { - return uFLName; - } - - public String jormGetter() { - return "paGet" + getUFLName(); - } - - public String jormSetter() { - return "paSet" + getUFLName(); - } - - /** - * @return the JOnAS meta object where the CMR field is defined - */ - public EjbRelationshipRoleDesc getRsr() { - return rsr; - } - - /** - * @return the name of opposite cmr field with the first letter capitalized. - */ - public String getOppositeUFLCMRName() { - return upperFL(rsr2.getCmrFieldName()); - } - - /** - * CoherenceHelper class is used to manage coherence in relations. - * @return The JOnAS CoherenceHelper class name - */ - public String getHelperClassName() { - return "JOnAS" + rsr.getSourceBeanName() + "CoherenceHelper"; - } - - /** - * CoherenceHelper class is used to manage coherence in relations. - * @return The Fully Qualified JOnAS CoherenceHelper class name - */ - public String getHelperFQClassName() { - String pn = BeanNaming.getPackageName(rsr2.getTargetBean().getFullDerivedBeanName()); - if (pn != null && pn.length() > 0) { - return pn + "." + getHelperClassName(); - } else { - return getHelperClassName(); - } - } - - /** - * CoherenceHelper class is used to manage coherence in relations. - * @return The JOnAS CoherenceHelper class name for opposite bean - */ - public String getOppositeHelperClassName() { - return "JOnAS" + rsr2.getSourceBeanName() + "CoherenceHelper"; - } - - /** - * CoherenceHelper class is used to manage coherence in relations. - * @return The JOnAS CoherenceHelper fully qualified class name for opposite bean - */ - public String getOppositeHelperFQClassName() { - String pn = BeanNaming.getPackageName(rsr.getTargetBean().getFullDerivedBeanName()); - if (pn != null && pn.length() > 0) { - return pn + "." + getOppositeHelperClassName(); - } else { - return getOppositeHelperClassName(); - } - } - - /** - * @return the class name of the gen class which must be used if the cmr is multiple - * and return null otherwise. - * The class which the is returned implements the interface which the name is returned by the 'getTypeName' method. - */ - public String getGenClassName() { - return genClassName; - } - - /** - * @return the description of the field - */ - public EntityCmp2Desc getElement() { - return element; - } - - /** - * It capitalizes the first letter of a word. - * @param word is the input string to capitalize the first letter - * @return a String with first letter capitalized - */ - public String upperFL(String word) { - return Character.toUpperCase(word.charAt(0)) + word.substring(1); - } - - /** - * @return true if the relationship role is one-one unidirectional, false if not. - */ - public boolean isOOu() { - return relationType == EjbRelationshipRoleDesc.OOU; - } - - /** - * @return true if the relationship role is one-one bidirectional, false if not. - */ - public boolean isOOb() { - return relationType == EjbRelationshipRoleDesc.OOB; - } - - /** - * @return true if the relationship role is one-many unidirectional, false if not. - */ - public boolean isOMu() { - return relationType == EjbRelationshipRoleDesc.OMU; - } - - /** - * @return true if the relationship role is many-one unidirectional, false if not. - */ - public boolean isMOu() { - return relationType == EjbRelationshipRoleDesc.MOU; - } - - /** - * @return true if the relationship role is many-one bidirectional, false if not. - */ - public boolean isMOb() { - return relationType == EjbRelationshipRoleDesc.MOB; - } - - /** - * @return true if the relationship role is one-many bidirectional, false if not. - */ - public boolean isOMb() { - return relationType == EjbRelationshipRoleDesc.OMB; - } - - /** - * @return true if the relationship role is many-many unidirectional, false if not. - */ - public boolean isMMu() { - return relationType == EjbRelationshipRoleDesc.MMU; - } - - /** - * @return true if the relationship role is many-many bidirectional, false if not. - */ - public boolean isMMb() { - return relationType == EjbRelationshipRoleDesc.MMB; - } - - /** - * @return a string representation of the VcCMRField object for debug use - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\n Name = " + getName()); - ret.append("\n TypeName = " + getTypeName()); - ret.append("\n UFLName = " + getUFLName()); - ret.append("\n OppositeUFLCMRName = " + getOppositeUFLCMRName()); - ret.append("\n HelperClassName = " + getHelperClassName()); - ret.append("\n HelperFQClassName = " + getHelperFQClassName()); - ret.append("\n OppositeHelperClassName = " + getOppositeHelperClassName()); - ret.append("\n OppositeHelperFQClassName = " + getOppositeHelperFQClassName()); - ret.append("\n GenClassName = " + getGenClassName()); - ret.append("\n isOOu = " + isOOu()); - ret.append("\n isOOb = " + isOOb()); - ret.append("\n isOMu = " + isOMu()); - ret.append("\n isOMb = " + isOMb()); - ret.append("\n isMOb = " + isMOb()); - ret.append("\n isMNu = " + isMMu()); - ret.append("\n isMNb = " + isMMb()); - return (ret.toString()); - } -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcField.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcField.java deleted file mode 100644 index 7922ca7c8b..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcField.java +++ /dev/null @@ -1,340 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genic; - - -import java.lang.reflect.Field; - -import org.ow2.jonas.deployment.ejb.FieldDesc; -import org.ow2.jonas.lib.ejb21.JavaType; -import org.ow2.jonas.lib.ejb21.jorm.JormType; - - - -/** - * This class is the "Velocity context" for a container managed persistence bean's field - * used in the Velocity Template. - * @author Helene Joanin : Initial developer - */ - -public class VcField { - - /** - * Name of the cmp field - */ - private String mName = null; - /** - * Type's name of the cmp field - */ - private String mTypeName = null; - /** - * Is the field composes the primary key - */ - private boolean isPrimaryKey = false; - /** - * Is a cmp field version 1 (or version 2) - */ - private boolean mIsCmp1 = false; - /* - * For Cmp1 only - */ - /** - * String representation of the java default value (ie 0 for int, null for object, ...) - */ - private String mDefaultValue = null; - /** - * SQL type's name of the cmp field - */ - private String mSqlTypeName = null; - /** - * SQL getter method's name - */ - private String mSqlGetMethod = null; - /** - * SQL setter method's name - */ - private String mSqlSetMethod = null; - /** - * Is the type of the cmp field is primitive - */ - private boolean hasNotPrimitiveType = false; - /** - * Is the type of the cmp field is java.math.BigInteger - */ - private boolean hasBigIntegerType = false; - /** - * Is the type of the cmp field is Serializable - */ - private boolean hasSerializableType = false; - /** - * Is the type of the cmp field is a java.lang type except java.lang.String - */ - private boolean hasJavaLangTypeExceptString = false; - /* - * For CMP2 only - */ - /** - * JORM type name of the cmp field - */ - private String jormTypeName = null; - /** - * Is the cmp field must be converted between the memory representation and the storage representation - */ - private boolean mustBeConvert = false; - /** - * Convertion class name - */ - private String convertClassName = null; - - /** - * VcField constructor - * @param mName name of the cmp field - * @param fType type of the cmp field - * @param fd field descriptor of the cmp field - * @param isCmp1 true if it's a cmp version 1 field, false if it's a cmp version 2 field. - */ - public VcField(String mName, Class fType, FieldDesc fd, boolean isCmp1) { - mIsCmp1 = isCmp1; - this.mName = mName; - mTypeName = JavaType.getName(fType); - isPrimaryKey = fd.isPrimaryKey(); - mDefaultValue = JavaType.getDefaultValue(fType); - if (mIsCmp1) { - // CMP 1 - mSqlTypeName = JavaType.getSQLType(fType); - mSqlGetMethod = JavaType.getSQLGetMethod(fType); - mSqlSetMethod = JavaType.getSQLSetMethod(fType); - hasNotPrimitiveType = !fType.isPrimitive(); - hasBigIntegerType = fType.equals(java.math.BigInteger.class); - hasSerializableType = "setSerializable".equals(mSqlSetMethod) - && "getSerializable".equals(mSqlGetMethod); - hasJavaLangTypeExceptString = false; - if (fType.getPackage() != null) { - if ("java.lang".equals(fType.getPackage().getName()) - && !java.lang.String.class.equals(fType)) { - hasJavaLangTypeExceptString = true; - } - } - } else { - // CMP 2 - jormTypeName = JormType.getPType(fType, isPrimaryKey).getJavaName(); - if (fType.equals(java.sql.Date.class)) { - mustBeConvert = true; - convertClassName = "org.ow2.jonas.lib.ejb21.sql.SqlDateFieldMapping"; - } else if (fType.equals(java.sql.Time.class)) { - mustBeConvert = true; - convertClassName = "org.ow2.jonas.lib.ejb21.sql.SqlTimeFieldMapping"; - } else if (fType.equals(java.sql.Timestamp.class)) { - mustBeConvert = true; - convertClassName = "org.ow2.jonas.lib.ejb21.sql.SqlTimestampFieldMapping"; - } else if (isPrimaryKey && fType.equals(Float.class)) { - // JORM does not support Float for the primary key, we must so convert it - mustBeConvert = true; - convertClassName = "org.ow2.jonas.lib.ejb21.jorm.FloatPkFieldMapping"; - } - } - } - - /** - * VcField contructor for cmp field version 1 - * @param field java field descriptor of the cmp field - * @param fd field descriptor of the cmp field - */ - VcField(Field field, FieldDesc fd) { - this(field.getName(), field.getType(), fd, true); - } - - /** - * VcField onstructor for cmp field version 2 - * @param fd field descriptor of the cmp field - */ - VcField(FieldDesc fd) { - this(fd.getName(), fd.getFieldType(), fd, false); - } - - /** - * @return the name of the cmp field - */ - public String getName() { - return mName; - } - - /** - * @return the name, with the first letter capitalized, of the cmp field - */ - public String getNameUpperFirst() { - return Character.toUpperCase(mName.charAt(0)) + mName.substring(1); - } - - public String jormGetter() { - return "paGet" + getNameUpperFirst(); - } - - public String jormSetter() { - return "paSet" + getNameUpperFirst(); - } - - /** - * @return the name of the getter method of the cmp field - */ - public String getGetterName() { - return "get" + Character.toUpperCase(mName.charAt(0)) + mName.substring(1); - } - - /** - * @return the name of the setter method of the cmp field - */ - public String getSetterName() { - return "set" + Character.toUpperCase(mName.charAt(0)) + mName.substring(1); - } - - /** - * @return the type name of the cmp field - */ - public String getTypeName() { - return mTypeName; - } - - /** - * @return true if the cmp field composes the primary key - */ - public boolean isPrimaryKey() { - return isPrimaryKey; - } - - /* - * CMP version 1 only - */ - /** - * @return the string representation of the java default value for the cmp field (ie "0 "for int, "null" for object ...) - */ - public String getDefaultValue() { - return mDefaultValue; - } - - /** - * @return the SQL type name of the cmp field - */ - public String getSqlTypeName() { - return mSqlTypeName; - } - - /** - * @return the SQL getter method name for the cmp field - */ - public String getSqlGetMethod() { - return mSqlGetMethod; - } - - /** - * @return the SQL setter method name for the cmp field - */ - public String getSqlSetMethod() { - return mSqlSetMethod; - } - - /** - * @return true if the type of the cmp field is not a java primitive type - */ - public boolean hasNotPrimitiveType() { - return hasNotPrimitiveType; - } - - /** - * @return true if the type of the cmp field is java.math.BigInteger - */ - public boolean hasBigIntegerType() { - return hasBigIntegerType; - } - - /** - * @return true of the type of the cmp field is Serializable - */ - public boolean hasSerializableType() { - return hasSerializableType; - } - - /** - * @return true if the type of the cmp type is a java.lag type except java.lang.String - */ - public boolean hasJavaLangTypeExceptString() { - return hasJavaLangTypeExceptString; - } - - /* - * CMP version 2 only - */ - /** - * @return the JORM type name of the cmp field - */ - public String getJormTypeName() { - return jormTypeName; - } - - /** - * @return true if a conversion must be dome between the memory representation and the storage representation for the cmp field - */ - public boolean isMustBeConvert() { - return mustBeConvert; - } - - /** - * @return the class name of for the convertion between the memory representation and the storage representation for the cmp field - */ - public String getConvertClassName() { - return convertClassName; - } - - /** - * @return a string representation of the VcField for debug use - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\n Name = " + getName()); - ret.append("\n isPrimaryKey = " + isPrimaryKey()); - ret.append("\n NameUpperFirst = " + getNameUpperFirst()); - ret.append("\n GetterName = " + getGetterName()); - ret.append("\n SetterName = " + getSetterName()); - ret.append("\n TypeName = " + getTypeName()); - ret.append("\n DefaultValue = " + getDefaultValue()); - if (mIsCmp1) { - ret.append("\n SqlTypeName = " + getSqlTypeName()); - ret.append("\n SqlGetMethod = " + getSqlGetMethod()); - ret.append("\n SqlSetMethod = " + getSqlSetMethod()); - ret.append("\n hasNotPrimitiveType = " + hasNotPrimitiveType()); - ret.append("\n hasBigIntegerType = " + hasBigIntegerType()); - ret.append("\n hasSerializableType = " + hasSerializableType()); - ret.append("\n hasJavaLangTypeExceptString = " + hasJavaLangTypeExceptString()); - } else { - ret.append("\n JormTypeName = " + getJormTypeName()); - ret.append("\n MustBeConvert = " + isMustBeConvert()); - ret.append("\n ConvertClassName = " + getConvertClassName()); - } - return (ret.toString()); - } - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcMethod.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcMethod.java deleted file mode 100644 index 339b97d5c4..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcMethod.java +++ /dev/null @@ -1,1155 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genic; - - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp1Desc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp2Desc; -import org.ow2.jonas.deployment.ejb.FieldJdbcDesc; -import org.ow2.jonas.deployment.ejb.MethodCmp2Desc; -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.deployment.ejb.MethodJdbcCmp1Desc; -import org.ow2.jonas.lib.ejb21.JavaType; -import org.ow2.jonas.lib.ejb21.sql.EjbqlQueryTreeHolder; -import org.ow2.jonas.lib.util.BeanNaming; - - - - -import org.objectweb.jorm.metainfo.api.Manager; -import org.objectweb.jorm.type.api.PType; -import org.objectweb.util.monolog.api.BasicLevel; - - -/** - * This class is the "Velocity context" for a interface method or a bean method used in the Velocity Templates. - * @author Helene Joanin (Bull) : Initial developer - * @author Santiago Gala (sgala@hisitech.com) - 00/09/14 - Parameters can be followed by a number in the WHERE clause - * @author Joe Gittings has proposed to code method signature for security - * in order to avoid same signature for inherited methods. - */ - -public class VcMethod { - - /** - * home.create method - */ - static final byte METHOD_CREATE = 0; - /** - * bean.ebjCreate method - */ - static final byte METHOD_EJB_CREATE = 1; - /** - * bean.ejbPostCreate method - */ - static final byte METHOD_EJB_POST_CREATE = 2; - /** - * EJBObject.remove() method - */ - static final byte METHOD_REMOVE_THIS = 10; - /** - * home.remove(primarykey) method - */ - static final byte METHOD_REMOVE_PK = 11; - /** - * home.remove(handle) method - */ - static final byte METHOD_REMOVE_HANDLE = 12; - /** - * bean.ejbRemove() method - */ - static final byte METHOD_EJB_REMOVE = 13; - /** - * home.findByPrimaryKey(pk) method - */ - static final byte METHOD_FINDER_BY_PK = 20; - /** - * home.findXxx() method - */ - static final byte METHOD_FINDER_ALL = 21; - /** - * home.findXxx() method that returns a simple object - */ - static final byte METHOD_FINDER_SIMPLE = 22; - /** - * home.findXxx() method that returns an Enumeration - */ - static final byte METHOD_FINDER_ENUM = 23; - /** - * home.findXxx() method that returns a Collection - */ - static final byte METHOD_FINDER_COL = 24; - /** - * bean.ejbSelectXxx() method that returns a simple object - */ - static final byte METHOD_EJB_SELECT_SIMPLE = 30; - /** - * bean.ejbSelectXxx() method that returns a Collection - */ - static final byte METHOD_EJB_SELECT_COL = 31; - /** - * bean.ejbSelectXxx() method that returns a Set - */ - static final byte METHOD_EJB_SELECT_SET = 32; - /** - * bean.ejbLoad() method - */ - static final byte METHOD_EJB_LOAD = 40; - /** - * bean.ejbStore() method - */ - static final byte METHOD_EJB_STORE = 41; - /** - * bean.setEntityContext() method - */ - static final byte METHOD_EJB_SET_ENTITY_CONTEXT = 42; - /** - * bean.ejbActivate() method - */ - static final byte METHOD_EJB_ACTIVATE = 43; - - /** - * kind of the method ie home.create() or bean.ejbCreate, or ... - */ - private byte mKind = -1; - - /** - * name of the method - */ - private String mName = null; - - /** - * name of the method with the firt letter capitalized - */ - private String mCapName = null; - - /** - * string representation of the formal parameters of the method (for ex: "int p1, String p2"); - */ - private StringBuffer mFormalParameters = null; - - /** - * string representation of the actual parameters of the method (for ex: "p1, p2") - */ - private StringBuffer mActualParameters = null; - - /** - * Array of objects of the parameters - */ - private StringBuffer mArrayObjectParameters = null; - - /** - * string representation of the exception list - */ - private StringBuffer mExceptionList = null; - - /** - * string representation of the security signature method - */ - private String mSecuritySignature; - - /** - * transactional attribute of the method - */ - private int mTxAttribute = MethodDesc.TX_NULL; - - /** - * name of the return type of the method - */ - private String mReturnType; - - /** - * default return value - */ - private String mDefaultValue; - - /** - * default wrapper type for the return type - */ - private String mWrapperType; - - /** - * java.lang.reflect.Method, just for explicit error message - */ - private Method mMethod = null; - - /** - * index of the method. Each method is identify with an unuique index. - */ - private int methodIndex = -1; - - /** - * BeanDesc of the associated bean to the method - */ - private BeanDesc beanDesc = null; - - private Manager manager = null; - - /* - * For CMP1 only - */ - - /** - * string representation of the SQL statement associated to the method - */ - private String mSqlStmt = null; - - /** - * VcParamWhere list of the finder method - */ - private ArrayList mParamWhereList = null; - - /* - * For CMP2 only - */ - - /** - * true is this is a finder/ejbSelect method that return a remote bean - * (Only used in CMP2 for finder and ejbSelect methods) - */ - - private boolean isEjbqlReturnRemoteBean = false; - /** - * true is this is a finder/ejbSelect method that return a local bean - * (Only used in CMP2 for finder and ejbSelect methods) - */ - - private boolean isEjbqlReturnLocalBean = false; - /** - * Medor Field representation of the result of the finder/ejbSelect method - * (Only used in CMP2 for finder and ejbSelect methods) - */ - - private org.objectweb.medor.api.Field resFieldOfEjbql = null; - /** - * VcParam list of the finder/ejbSelect method - * (Only used in CMP2 for finder and ejbSelect methods) - */ - private ArrayList mParamList = null; - - /** - * Class list of the parameters of the method - */ - private Class[] parameterTypes = null; - /** - * true if the method throws javax.ejb.CreateException - */ - private boolean canThrowCreate = false; - - /** - * VcMethod constructor - * @param method java.lang.reflect.Method method description - * @param methodDesc method description - * @param dd bean description of the associated bean - */ - VcMethod(Method method, MethodDesc methodDesc, BeanDesc dd, Manager mgr) { - - if (methodDesc != null) { - methodIndex = methodDesc.getIndex(); - } - beanDesc = dd; - manager = mgr; - - /* - * The 'method' may be - * - a home interface's method - * - a local home interface's method - * - a remote interface's method - * - a local interface's method - * - a bean's method as - * - a beans's ejbSelect() method, - * setEntityContext(), ejbActivate(), ejbCreate(), ejbLoad(), ejbStore(), ejbRemove(). - * - a beans's ejbSelect() method, - * In the last case, the 'methodDesc' is null in case of - * setEntityContext(), ejbActivate(), ejbLoad() and ejbStore(). - */ - - Class declClass = method.getDeclaringClass(); - Class [] params = method.getParameterTypes(); - parameterTypes = params; - Class [] exceptions = method.getExceptionTypes(); - mMethod = method; - - // Name and CapName - mName = method.getName(); - mCapName = BeanNaming.firstToUpperCase(mName); - - // FormalParameters and ActualParameters - mFormalParameters = new StringBuffer(); - mActualParameters = new StringBuffer(); - mArrayObjectParameters = new StringBuffer(); - String var = null; - for (int p = 1; p <= params.length; p++) { - var = "p" + p; - mFormalParameters.append(JavaType.getName(params[p - 1]) + " " + var); - mActualParameters.append(var); - mArrayObjectParameters.append(JavaType.toStringObject(var, params[p - 1])); - if (p < params.length) { - mFormalParameters.append(", "); - mActualParameters.append(", "); - mArrayObjectParameters.append(", "); - } - } - - // ExceptionList - mExceptionList = new StringBuffer(); - for (int e = 0; e < exceptions.length; e++) { - Class ecl = exceptions[e]; - if (javax.ejb.CreateException.class.isAssignableFrom(ecl)) { - canThrowCreate = true; - } - mExceptionList.append(JavaType.getName(ecl)); - if (e < exceptions.length - 1) { - mExceptionList.append(", "); - } - } - - // SecuritySignature - // No methodDesc for bean's methods as ejbLoad(), ejbStore(), ... - if (methodDesc != null) { - mSecuritySignature = ""; - if (methodDesc.getRoleName().length > 0 || methodDesc.isExcluded()) { - mSecuritySignature = BeanNaming.getSignature(dd.getEjbName(), method); - } - } - - // TxAttribute - // No methodDesc for bean's methods as ejbLoad(), ejbStore(), ... - if (methodDesc != null) { - mTxAttribute = methodDesc.getTxAttribute(); - } - - // ReturnType - mReturnType = JavaType.getName(method.getReturnType()); - if (! mReturnType.equals("void")) { - mDefaultValue = JavaType.getDefaultValue(method.getReturnType()); - mWrapperType = JavaType.getWrapperType(method.getReturnType()); - } - - // isFinderXXX - boolean isFinder = false; - - if (mName.startsWith("find") - && (javax.ejb.EJBHome.class.isAssignableFrom(declClass) - || javax.ejb.EJBLocalHome.class.isAssignableFrom(declClass)) - ) { - isFinder = true; - } - if (isFinder) { - if ("findByPrimaryKey".equals(mName)) { - mKind = METHOD_FINDER_BY_PK; - } else { - if (java.util.Enumeration.class.equals(method.getReturnType())) { - mKind = METHOD_FINDER_ENUM; - } else if (java.util.Collection.class.equals(method.getReturnType())) { - mKind = METHOD_FINDER_COL; - } else { - mKind = METHOD_FINDER_SIMPLE; - } - } - } - - // isCreate - if (mName.startsWith("create") - && (javax.ejb.EJBHome.class.isAssignableFrom(declClass) - || javax.ejb.EJBLocalHome.class.isAssignableFrom(declClass)) - ) { - mKind = METHOD_CREATE; - } - - // isEjbCreate - if (mName.startsWith("ejbCreate") - && javax.ejb.EnterpriseBean.class.isAssignableFrom(declClass)) { - mKind = METHOD_EJB_CREATE; - } - - // isEjbPostCreate - if (mName.startsWith("ejbPostCreate") - && javax.ejb.EnterpriseBean.class.isAssignableFrom(declClass)) { - mKind = METHOD_EJB_POST_CREATE; - } - - // isRemoveXXX - boolean isRemove = "remove".equals(mName); - if (isRemove) { - if (declClass.equals(javax.ejb.EJBObject.class) - || declClass.equals(javax.ejb.EJBLocalObject.class)) { - mKind = METHOD_REMOVE_THIS; - } else if (declClass.equals(javax.ejb.EJBHome.class) - || declClass.equals(javax.ejb.EJBLocalHome.class)) { - if (params[0].equals(javax.ejb.Handle.class)) { - mKind = METHOD_REMOVE_HANDLE; - } else { - mKind = METHOD_REMOVE_PK; - } - } - } - - // isEjbRemove, isEjbLoad, isEjbStore - if (javax.ejb.EnterpriseBean.class.isAssignableFrom(declClass) - && (params.length == 0)) { - if ("ejbRemove".equals(mName)) { - mKind = METHOD_EJB_REMOVE; - } else if ("ejbLoad".equals(mName)) { - mKind = METHOD_EJB_LOAD; - } else if ("ejbStore".equals(mName)) { - mKind = METHOD_EJB_STORE; - } - } - - // isEjbSetEntityContext - if (javax.ejb.EnterpriseBean.class.isAssignableFrom(declClass)) { - if ("setEntityContext".equals(mName) - && (params.length == 1) - && javax.ejb.EntityContext.class.equals(params[0])) { - mKind = METHOD_EJB_SET_ENTITY_CONTEXT; - } - } - - // isEjbActivate - if (javax.ejb.EnterpriseBean.class.isAssignableFrom(declClass)) { - if ("ejbActivate".equals(mName) - && (params.length == 0)) { - mKind = METHOD_EJB_ACTIVATE; - } - } - - if (dd instanceof EntityJdbcCmp1Desc) { - // For Entity CMP 1 - // SqlStmt, and ParamsWhere in case of FinderSimple, FinderEnum or FinderCol. - EntityJdbcCmp1Desc edd = (EntityJdbcCmp1Desc) dd; - StringBuffer lf = new StringBuffer(); - StringBuffer lv = new StringBuffer(); - boolean firstLf = true; - boolean firstLv = true; - if (mKind == METHOD_EJB_CREATE) { - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (firstLv) { - firstLv = false; - } else { - lf.append(", "); - lv.append(", "); - } - lf.append(fd.getJdbcFieldName()); - lv.append("?"); - } - mSqlStmt = - "insert into " + edd.getJdbcTableName() - + " (" + lf + ") values (" + lv + ")"; - } else if (mKind == METHOD_FINDER_BY_PK) { - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (fd.isPrimaryKey()) { - if (firstLv) { - firstLv = false; - } else { - lf.append(", "); - lv.append(" and "); - } - lf.append(fd.getJdbcFieldName()); - lv.append(fd.getJdbcFieldName() + "=?"); - } - } - - mSqlStmt = - "select " + lf + " from " + edd.getJdbcTableName() - + " where " + lv; - } else if ((mKind == METHOD_FINDER_SIMPLE) - || (mKind == METHOD_FINDER_ENUM) - || (mKind == METHOD_FINDER_COL)) { - if (!((MethodJdbcCmp1Desc) methodDesc).hasWhereClause()) { - throw new Error("No WHERE clause defined for the finder method '" - + method.toString() + "'"); - } - ArrayList posParams = new ArrayList(); - String clauseWhere = parseWhere (((MethodJdbcCmp1Desc) methodDesc).getWhereClause(), posParams); - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (fd.isPrimaryKey()) { - if (firstLf) { - firstLf = false; - } else { - lf.append(", "); - } - lf.append(fd.getJdbcFieldName()); - } - } - - mSqlStmt = - "select " + lf + " from " + edd.getJdbcTableName() - + " " + clauseWhere; - mParamWhereList = new ArrayList(); - for (int i = 0; i < posParams.size(); i++) { - int pos = ((Integer) posParams.get(i)).intValue(); - if (pos >= params.length) { - throw new Error("Wrong parameters number between the method definition and the WHERE clause of the method '" + method + "'"); - } - VcParamWhere vpw = new VcParamWhere(params[pos], pos + 1); - mParamWhereList.add(vpw); - } - } else if (mKind == METHOD_EJB_REMOVE) { - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (fd.isPrimaryKey()) { - if (firstLv) { - firstLv = false; - } else { - lv.append(" and "); - } - lv.append(fd.getJdbcFieldName() + "=?"); - } - } - - mSqlStmt = - "delete from " + edd.getJdbcTableName() - + " where " + lv; - } else if (mKind == METHOD_EJB_LOAD) { - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (firstLf) { - firstLf = false; - } else { - lf.append(", "); - } - lf.append(fd.getJdbcFieldName()); - if (fd.isPrimaryKey()) { - if (firstLv) { - firstLv = false; - } else { - lv.append(" and "); - } - lv.append(fd.getJdbcFieldName() + "=?"); - } - } - - mSqlStmt = - "select " + lf + " from " + edd.getJdbcTableName() - + " where " + lv; - } else if (mKind == METHOD_EJB_STORE) { - for (Iterator i = edd.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - if (fd.isPrimaryKey()) { - if (firstLv) { - firstLv = false; - } else { - lv.append(" and "); - } - lv.append(fd.getJdbcFieldName() + "=?"); - } else { - if (firstLf) { - firstLf = false; - } else { - lf.append(", "); - } - lf.append(fd.getJdbcFieldName() + "=?"); - } - } - mSqlStmt = - "update " + edd.getJdbcTableName() - + " set " + lf + " where " + lv; - } - } else if (dd instanceof EntityJdbcCmp2Desc) { - // ejbSelect() methods - boolean isEjbSelect = false; - if (mName.startsWith("ejbSelect") - && javax.ejb.EntityBean.class.isAssignableFrom(declClass)) { - isEjbSelect = true; - } - if (isEjbSelect) { - if (java.util.Collection.class.equals(method.getReturnType())) { - mKind = METHOD_EJB_SELECT_COL; - } else if (java.util.Set.class.equals(method.getReturnType())) { - mKind = METHOD_EJB_SELECT_SET; - } else { - mKind = METHOD_EJB_SELECT_SIMPLE; - } - } - if (isFinder || isEjbSelect) { - mParamList = new ArrayList(); - for (int p = 0; p < params.length; p++) { - mParamList.add(new VcParam(params[p], dd)); - } - if (isEjbSelect) { - try { - resFieldOfEjbql = getResField((MethodCmp2Desc) methodDesc); - if (resFieldOfEjbql.getType().getTypeCode() == PType.TYPECODE_REFERENCE) { - if (((MethodCmp2Desc) methodDesc).isResultTypeMappingRemote()) { - isEjbqlReturnRemoteBean = true; - } else { - isEjbqlReturnLocalBean = true; - } - } - } catch (DeploymentDescException e) { - throw new Error("Error while the EJB-QL parsing of '" + method.toString() - + "': " + e.getMessage()); - } - } else if (!isFinderByPk()) { - // finder method other than findByPrimaryKey: parse the EJBQL query to check the query - try { - getResField((MethodCmp2Desc) methodDesc); - } catch (DeploymentDescException ignore) { - GenIC.logger.log(BasicLevel.WARN, "Warning: Error while the EJB-QL parsing of '" + method.toString() - + "': " + ignore.getMessage()); - } - } - } - - } - - // System.out.print("VcMethod: "+method.toString()); - // System.out.println(toString()); - } - - protected EjbqlQueryTreeHolder queryTreeHolder = null; - - /** - * Check the query, and return the resfield. - */ - private org.objectweb.medor.api.Field getResField(MethodCmp2Desc md) throws DeploymentDescException { - if (queryTreeHolder == null) { - try { - queryTreeHolder = new EjbqlQueryTreeHolder(md, md.getQueryNode(), null, manager); - } catch (Exception e) { - throw new DeploymentDescException("ejbql query does not map to the persistent schema",e); - } - } - return queryTreeHolder.getResField(); - } - - /** - * @return the string representation of the java default value for the cmp field (ie "0 "for int, "null" for object ...) - */ - public String getDefaultValue() { - return mDefaultValue; - } - - /** - * Parses Strings with syntax "WHERE summary like ?" - * where is a decimal integer that indexes (starting by 0) - * the parameters in the findByXXX method for CMP1. - * @param fragment - * @param pos - * @return - * @author: Santiago Gala (sgala@hisitech.com) - */ - private String parseWhere(String fragment, List pos) { - StringTokenizer parseWhere = new StringTokenizer(fragment, "?\n", true); - int numpos = pos.size(); - String newWhere = ""; - String tok; - while (parseWhere.hasMoreTokens()) { - tok = parseWhere.nextToken(); - String numVar = ""; - if (Character.isDigit(tok.charAt(0))) { - for (int i = 0; tok.length() > i && Character.isDigit(tok.charAt(i)); i++) { - numVar += tok.charAt(i); - } - if (numVar.length() > 0) { - newWhere += tok.substring(numVar.length(), tok.length()); - pos.set(numpos - 1, (Object) new Integer(Integer.parseInt(numVar) - 1)); - } - } else { - newWhere += tok; - if (tok.charAt(0) == '?') { - pos.add(new Integer(numpos++)); - } - } - } - return newWhere; - } - - /** - * @return Return the name of the method - */ - public String getName() { - return mName; - } - - /** - * @return Return the name of the method with the first letter capitalized - */ - public String getCapName() { - return mCapName; - } - - /** - * @return Return the string representation of the formal parameters list (ie "int p1, String p2") - */ - public String getFormalParameters() { - return mFormalParameters.toString(); - } - - /** - * @return Return the string representation of the actual parameters list (ie "p1, p2") - */ - public String getActualParameters() { - return mActualParameters.toString(); - } - - /** - * @return Return the string representation of the exception list of the method - */ - public String getExceptionList() { - return mExceptionList.toString(); - } - - /** - * @return Return true if the method throws the javax.ejb.createException exception - */ - public boolean canThrowCreate() { - return canThrowCreate; - } - - /** - * @return Return the string representation of the security signature of the method - */ - public String getSecuritySignature() { - if (mSecuritySignature == null) { - throw new Error("VcMethod.getSecuritySignature() not available for the method '" - + mMethod.toString() + "'"); - } - return mSecuritySignature; - } - - /** - * @return Return the transactional attribute associated to the method - */ - public int getTxAttribute() { - if (mTxAttribute == MethodDesc.TX_NULL) { - throw new Error("VcMethod.getTxAttribute() not available for the method '" - + mMethod.toString() + "'"); - } - return mTxAttribute; - } - - /** - * @return Return the name of the return type of the method - */ - public String getReturnType() { - return mReturnType; - } - - /** - * @return the string representation of the wrapper type for the field - */ - public String getWrapperType() { - return mWrapperType; - } - - - /** - * @return Return false because we are not able to know if a finder method is a FinderAll method !! - */ - public boolean isFinderAll() { - // How to known a finder is a finderAll !? - return false; - } - - /** - * @return Return true if the method is the findByPrimaryKey() method - */ - public boolean isFinderByPk() { - return (mKind == METHOD_FINDER_BY_PK); - } - - /** - * @return Return true if the method is a finder method that returns a unique object - */ - public boolean isFinderSimple() { - return (mKind == METHOD_FINDER_SIMPLE); - } - - /** - * @return Return true if the method is a finder method that returns a Enumeration - */ - public boolean isFinderEnum() { - return (mKind == METHOD_FINDER_ENUM); - } - - /** - * @return Return true if the method is a finder method that returns a Collection - */ - public boolean isFinderCol() { - return (mKind == METHOD_FINDER_COL); - } - - /** - * @return Return true if the method is an ejbSelect method that returns a unique object - */ - public boolean isEjbSelectSimple() { - return (mKind == METHOD_EJB_SELECT_SIMPLE); - } - - /** - * @return Return true if the method is an ejbSelect method that returns a Set - */ - public boolean isEjbSelectSet() { - return (mKind == METHOD_EJB_SELECT_SET); - } - - /** - * @return Return true if the method is an ejbSelect method that returns a Collection - */ - public boolean isEjbSelectCol() { - return (mKind == METHOD_EJB_SELECT_COL); - } - - /** - * @return Return true if the method is a finder/select method that return a remote bean - */ - public boolean isEjbqlReturnRemoteBean() { - return isEjbqlReturnRemoteBean; - } - - /** - * @return Return true if the method is a finder/select method that return a local bean - */ - public boolean isEjbqlReturnLocalBean() { - return isEjbqlReturnLocalBean; - } - - /** - * @return Return true if the method is home.create() - */ - public boolean isCreate() { - return (mKind == METHOD_CREATE); - } - - /** - * @return Return true if the method is bean.ejbCreate() - */ - public boolean isEjbCreate() { - return (mKind == METHOD_EJB_CREATE); - } - - /** - * @return Return true if the method is bean.ejbPostCreate() - */ - public boolean isEjbPostCreate() { - return (mKind == METHOD_EJB_POST_CREATE); - } - - /** - * @return Return true if the method is EJBObject.remove() method - */ - public boolean isRemoveThis() { - return (mKind == METHOD_REMOVE_THIS); - } - - /** - * @return Return true if the method is home.remove(primarykey) - */ - public boolean isRemovePk() { - return (mKind == METHOD_REMOVE_PK); - } - - /** - * @return Return true if the method is home.remove(handle); - */ - public boolean isRemoveHandle() { - return (mKind == METHOD_REMOVE_HANDLE); - } - - /** - * @return Return true if the method is bean.ejbRemove() - */ - public boolean isEjbRemove() { - return (mKind == METHOD_EJB_REMOVE); - } - - /** - * @return Return true if the method is bean.ejbLoad() - */ - public boolean isEjbLoad() { - return (mKind == METHOD_EJB_LOAD); - } - - /** - * @return Return true if the method is bean.ejbStore() - */ - public boolean isEjbStore() { - return (mKind == METHOD_EJB_STORE); - } - - /** - * @return Return true if the method is bean.setEntityContext() - */ - public boolean isEjbSetEntityContext() { - return (mKind == METHOD_EJB_SET_ENTITY_CONTEXT); - } - - /** - * @return Return true if the method is bean.ejbActivate() - */ - public boolean isEjbActivate() { - return (mKind == METHOD_EJB_ACTIVATE); - } - - /** - * Only for CMP1 finder methods - * @return Return the string representation of the SQL statement associated to the method - */ - public String getSqlStmt() { - if (mSqlStmt == null) { - throw new Error("VcMethod.getSqlStmt() not available for the method '" - + mMethod.toString() + "'"); - } - return mSqlStmt; - } - - - /** - * @return Return the Class array of the parameters of the method - */ - public Class[] getParameterTypes() { - return parameterTypes; - } - - /** - * @return Return the number of the parameters of the method - */ - public int getParametersNumber() { - return parameterTypes.length; - } - - - /** - * Only for CMP1 finder methods - * @return Return the VcParamWhere list of the method - */ - public Vector getParamWhereList() { - if (mParamWhereList == null) { - throw new Error("VcMethod.getParamWhereList() not available for the method '" - + mMethod.toString() + "'"); - } - return (new Vector(mParamWhereList)); - } - - - /** - * @return Return the VcParam list of the method - */ - public Vector getParamList() { - if (mParamList == null) { - throw new Error("VcMethod.getParamList() not available for the method '" - + mMethod.toString() + "'"); - } - return (new Vector(mParamList)); - } - - - /** - * @return Return the index of the method. This is a unique index for each method of a bean. - */ - public int getMethodIndex() { - return methodIndex; - } - - /** - * Only for CMP2 finder/select methods - * @return Return the Medor field of tuple result of an Finder/Select method - */ - public org.objectweb.medor.api.Field getResFieldOfEjbql() { - return resFieldOfEjbql; - } - - /** - * Only for CMP2 finder/select methods - * @return Return the Medor get method name of the tuple result of an ejbSelect method - */ - public String getTupleGetter() { - PType type = resFieldOfEjbql.getType(); - switch(type.getTypeCode()) { - case PType.TYPECODE_BOOLEAN: - return "getBoolean"; - case PType.TYPECODE_BYTE: - return "getByte"; - case PType.TYPECODE_CHAR: - return "getChar"; - case PType.TYPECODE_DATE: - return "getDate"; - case PType.TYPECODE_DOUBLE: - return "getDouble"; - case PType.TYPECODE_FLOAT: - return "getFloat"; - case PType.TYPECODE_INT: - return "getInt"; - case PType.TYPECODE_LONG: - return "getLong"; - case PType.TYPECODE_SERIALIZED: - return "getObject"; - case PType.TYPECODE_SHORT: - return "getShort"; - case PType.TYPECODE_STRING: - return "getString"; - case PType.TYPECODE_BIGDECIMAL: - case PType.TYPECODE_REFERENCE: - case PType.TYPECODE_BYTEARRAY: - case PType.TYPECODE_CHARARRAY: - case PType.TYPECODE_OBJBOOLEAN: - case PType.TYPECODE_OBJBYTE: - case PType.TYPECODE_OBJCHAR: - case PType.TYPECODE_OBJDOUBLE: - case PType.TYPECODE_OBJFLOAT: - case PType.TYPECODE_OBJINT: - case PType.TYPECODE_OBJLONG: - case PType.TYPECODE_OBJSHORT: - default: - return "getObject"; - } - } - - /** - * Only for CMP2 finder/select methods - * @return Return true is the return type of the Medor getter method of the tuple result of an ejbSelect method is a primitive type - */ - public boolean isTupleGetterPrimitive() { - PType type = resFieldOfEjbql.getType(); - switch(type.getTypeCode()) { - case PType.TYPECODE_BOOLEAN: - case PType.TYPECODE_BYTE: - case PType.TYPECODE_CHAR: - case PType.TYPECODE_DOUBLE: - case PType.TYPECODE_FLOAT: - case PType.TYPECODE_INT: - case PType.TYPECODE_LONG: - case PType.TYPECODE_SHORT: - return true; - default: - return false; - } - } - - /** - * Only for CMP2 finder/select methos - * @return Return the associated class of the Medor getter method of the tuple result of an ejbSelect method when it's a primtive type - */ - public String getTupleGetterObjectClass() { - PType type = resFieldOfEjbql.getType(); - switch(type.getTypeCode()) { - case PType.TYPECODE_BOOLEAN: - return "Boolean"; - case PType.TYPECODE_BYTE: - return "Byte"; - case PType.TYPECODE_CHAR: - return "Char"; - case PType.TYPECODE_DOUBLE: - return "Double"; - case PType.TYPECODE_FLOAT: - return "Float"; - case PType.TYPECODE_INT: - return "Integer"; - case PType.TYPECODE_LONG: - return "Long"; - case PType.TYPECODE_SHORT: - return "Short"; - default: - return "Object"; - } - } - - /** - * Split a dot separated path into tokens - * @param path input path to split - * @return Return the string array of the splited token - */ - String[] splitPath(String path) { - StringTokenizer st = new StringTokenizer(path, "."); - String[] ret = new String[st.countTokens()]; - for (int i = 0; i < ret.length; i++) { - ret[i] = st.nextToken(); - } - return ret; - } - - /** - * Gets an empty array if no parameters and return an array of objects of the parameters if any - * @return array of objects - */ - public String getArrayObjectParameters() { - if (mArrayObjectParameters.length() == 0) { - return "new Object[0]"; - } else { - return "new Object[] {" + mArrayObjectParameters.toString() + "}"; - } - } - - - /** - * @return Return a string representation of the VcMethod object for debug use - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\n Name = " + getName()); - ret.append("\n CapName = " + getCapName()); - ret.append("\n FormalParameters = " + getFormalParameters()); - ret.append("\n ActualParameters = " + getActualParameters()); - ret.append("\n ExceptionList = " + getExceptionList()); - if (mSecuritySignature != null) { - ret.append("\n SecuritySignature = " + getSecuritySignature()); - } - if (mTxAttribute != MethodDesc.TX_NULL) { - ret.append("\n TxAttribute = " + getTxAttribute()); - } - ret.append("\n ReturnType = " + getReturnType()); - ret.append("\n isFinderByPk = " + isFinderByPk()); - ret.append("\n isFinderSimple = " + isFinderSimple()); - ret.append("\n isFinderEnum = " + isFinderEnum()); - ret.append("\n isFinderCol = " + isFinderCol()); - ret.append("\n isCreate = " + isCreate()); - ret.append("\n isEjbCreate = " + isEjbCreate()); - ret.append("\n isRemoveThis = " + isRemoveThis()); - ret.append("\n isRemovePk = " + isRemovePk()); - ret.append("\n isRemoveHandle = " + isRemoveHandle()); - ret.append("\n isEjbRemove = " + isEjbRemove()); - ret.append("\n isEjbLoad = " + isEjbLoad()); - ret.append("\n isEjbStore = " + isEjbStore()); - ret.append("\n isEjbSetEntityContext = " + isEjbSetEntityContext()); - ret.append("\n isEjbActivate = " + isEjbActivate()); - ret.append("\n isEjbSelectSimple = " + isEjbSelectSimple()); - ret.append("\n isEjbSelectSet = " + isEjbSelectSet()); - ret.append("\n isEjbSelectCol = " + isEjbSelectCol()); - if (mSqlStmt != null) { - ret.append("\n SqlStmt = " + getSqlStmt()); - } - if (mParamWhereList != null) { - ret.append("\n ParamWhereList = " + getParamWhereList()); - } - return (ret.toString()); - } - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParam.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParam.java deleted file mode 100644 index 024f3d86ac..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParam.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genic; - -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.lib.ejb21.JavaType; -import org.ow2.jonas.lib.ejb21.jorm.JormType; - - -/** - * This class is the "Velocity context" for a parameter of a finder/select method for CMP2 only, - * used in the Velocity Templates. - * @author Helene Joanin : Initial developer - */ -public class VcParam { - - /** - * Type's name of the parameter - */ - private String mTypeName = null; - - /** - * JORM type's name of the parameter - */ - private String mJormTypeName = null; - - /** - * true if the parameter is a local bean - */ - private boolean mIsEjbLocal = false; - /** - * In case the parameter is a local bean, name of this local bean - */ - private String mEjbName = null; - - /** - * VcParam Constructor - * @param type parameter class - * @param dd bean descriptor - */ - VcParam(Class type, BeanDesc dd) { - mTypeName = JavaType.getName(type); - mJormTypeName = JormType.getPTypeDef(type, false); - mIsEjbLocal = javax.ejb.EJBLocalObject.class.isAssignableFrom(type); - if (mIsEjbLocal) { - BeanDesc bdp = dd.getDeploymentDesc().getBeanDescWithLocalInterface(mTypeName); - if (bdp == null) { - throw new Error("VcParam: Cannot get the BeanDesc associated to the interface local '" + mTypeName + "'"); - } - mEjbName = bdp.getEjbName(); - } - } - - /** - * @return Returns the type's name of the parameter - */ - public String getTypeName() { - return mTypeName; - } - - /** - * @return Returns the JORM type's name of the parameter - */ - public String getJormType() { - return mJormTypeName; - } - - /** - * @return Returns true if the parameter is a local bean - */ - public boolean isEjbLocal() { - return mIsEjbLocal; - } - - /** - * @return If the parameter is a local bean, returns the name of this local bean - */ - public String getEjbName() { - if (!isEjbLocal()) { - throw new Error("VcParam.getEjbName(): No BeanDesc associated to the param '" - + mTypeName + "'"); - } - return mEjbName; - } - -} - diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParamWhere.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParamWhere.java deleted file mode 100644 index 13aeb77c0e..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VcParamWhere.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.generators.genic; - -import org.ow2.jonas.lib.ejb21.JavaType; - -/** - * This class is the "Velocity context" for a parameter of a where clause of finder method for CMP1 only, - * used in the Velocity Templates. - * @author Helene Joanin : Initial developer - */ -public class VcParamWhere { - - /** - * name of the parameter (ie "p1") - */ - private String mName; - - /** - * type's name of the parameter - */ - private String mTypeName; - - /** - * SQL type's name of the parameter - */ - private String mSqlTypeName; - - /** - * SQL setter method name for this parameter - */ - private String mSqlSetMethod; - - /** - * true if the parameter hasn't a java primitive type - */ - private boolean hasNotPrimitiveType; - - /** - * true if the parameter has the java.math.BigInteger type - */ - private boolean hasBigIntegerType; - - /** - * true if the parameter has a Serializable type - */ - private boolean hasSerializableType; - - /** - * true if the parameter has a java.lang.* type except java.lang.string - */ - private boolean hasJavaLangTypeExceptString; - - /** - * VcParamWhere Constructor - * @param type parameter's type - * @param position parameter's position in the where clause - */ - VcParamWhere(Class type, int position) { - - mName = new String("p" + position); - mTypeName = JavaType.getName(type); - mSqlTypeName = JavaType.getSQLType(type); - mSqlSetMethod = JavaType.getSQLSetMethod(type); - if (mSqlSetMethod == null) { - throw new Error("Cannot container persistence manage the type '" - + type.getName() + "'"); - } - hasNotPrimitiveType = !type.isPrimitive(); - hasBigIntegerType = type.equals(java.math.BigInteger.class); - hasSerializableType = "setSerializable".equals(mSqlSetMethod); - hasJavaLangTypeExceptString = false; - if (type.getPackage() != null) { - if ("java.lang".equals(type.getPackage().getName()) - && !java.lang.String.class.equals(type)) { - hasJavaLangTypeExceptString = true; - } - } - - // System.out.print("VcParamWhere: "+type.toString()); - // System.out.println(toString()); - } - - /** - * @return Returns the name of the parameter (ie "p1") - */ - public String getName() { - return mName; - } - - /** - * @return Returns the type's name of the parameter - */ - public String getTypeName() { - return mTypeName; - } - - /** - * @return Returns the SQL type's name of the parameter - */ - public String getSqlTypeName() { - return mSqlTypeName; - } - - /** - * @return Returns the SQL setter method associated to the parameter - */ - public String getSqlSetMethod() { - return mSqlSetMethod; - } - - /** - * @return Returns true if the parameter's type is not a java primitive type - */ - public boolean hasNotPrimitiveType() { - return hasNotPrimitiveType; - } - - /** - * @return Returns true if the parameter's type is java.math.BigInteger - */ - public boolean hasBigIntegerType() { - return hasBigIntegerType; - } - - /** - * @return Returns true if the parameter's type is Serializable - */ - public boolean hasSerializableType() { - return hasSerializableType; - } - - /** - * @return true if the parameter's type is a java.lang.* type except java.lang.string - */ - public boolean hasJavaLangTypeExceptString() { - return hasJavaLangTypeExceptString; - } - - /** - * @return Returns a string representation of the VcParamWhere object to debug use - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\n Name = " + getName()); - ret.append("\n TypeName = " + getTypeName()); - ret.append("\n SqlTypeName = " + getSqlTypeName()); - ret.append("\n SqlSetMethod = " + getSqlSetMethod()); - ret.append("\n hasNotPrimitiveType = " + hasNotPrimitiveType()); - ret.append("\n hasBigIntegerType = " + hasBigIntegerType()); - ret.append("\n hasSerializableType = " + hasSerializableType()); - ret.append("\n hasJavaLangTypeExceptString = " + hasJavaLangTypeExceptString()); - return (ret.toString()); - } - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VelocityMonologLogger.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VelocityMonologLogger.java deleted file mode 100644 index e2f5a229d0..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/VelocityMonologLogger.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic; - -import org.apache.velocity.runtime.RuntimeServices; -import org.apache.velocity.runtime.log.LogSystem; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Wrap the velocity logger into a Monolog logger. - * @author Florent Benoit - */ -public class VelocityMonologLogger implements LogSystem { - - /** - * Monolog logger. - */ - private Logger monologLogger = null; - - /** - * Constructor. - * @param monologLogger the given monolog logger. - */ - public VelocityMonologLogger(final Logger monologLogger) { - this.monologLogger = monologLogger; - } - - /** - * Do nothing. - * @param services velocity services - * @throws Exception if there are errors. - */ - public void init(final RuntimeServices services) throws Exception { - } - - /** - * Logs the given message at the specified level. - * @param level the given level of log - * @param message the given message - */ - public void logVelocityMessage(final int level, final String message) { - switch (level) { - case LogSystem.WARN_ID: - monologLogger.log(BasicLevel.WARN, message); - break; - case LogSystem.ERROR_ID: - monologLogger.log(BasicLevel.ERROR, message); - break; - case LogSystem.INFO_ID: - monologLogger.log(BasicLevel.INFO, message); - break; - case LogSystem.DEBUG_ID: - monologLogger.log(BasicLevel.DEBUG, message); - break; - default: - // log in debug by default - monologLogger.log(BasicLevel.DEBUG, message); - } - - } - -} diff --git a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/wrapper/GenicServiceWrapper.java b/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/wrapper/GenicServiceWrapper.java deleted file mode 100644 index f3b4b0bd15..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/java/org/ow2/jonas/generators/genic/wrapper/GenicServiceWrapper.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.genic.wrapper; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.service.ServiceException; - - -/** - * GenIC wrapper - * - * @author Camilleri Jerome : Initial developer - */ -public class GenicServiceWrapper { - - - /** - * GenIC fully qualified classname - */ - private static final String GENIC_CLASSNAME = "org.ow2.jonas.generators.genic.GenIC"; - - /** - * Private empty constructor for utility class - */ - private GenicServiceWrapper() { }; - - /** - * Wrapper around GenIC.main(String[]) method - * @param args GenIC args - * @throws ServiceException If GenIC fails or if Reflection errors occurs - */ - public static void callGenic(final String[] args) throws ServiceException { - LoaderManager lm = LoaderManager.getInstance(); - ClassLoader old = null; - - try { - ClassLoader ext = lm.getExternalLoader(); - if (ext == null) { - throw new ServiceException("cannot get tools classloader"); - } - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - Class manager = ext.loadClass(GENIC_CLASSNAME); - Method m = manager.getDeclaredMethod("main", new Class[] {String[].class}); - m.invoke(null, new Object[] {args}); - } catch (InvocationTargetException e) { - if (e.getTargetException() instanceof Error) { - throw (Error) e.getTargetException(); - } else if (e.getTargetException() instanceof ServiceException) { - throw (ServiceException) e.getTargetException(); - } else { - throw new ServiceException("Problems when invoking main method from GenIC", e.getTargetException()); - } - } catch (Exception e) { - throw new ServiceException("Problems when invoking main method from GenIC" , e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } -} - diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/META-INF/jonas-genic.bnd b/jonas/modules/generators/jonas-genic/src/main/resources/META-INF/jonas-genic.bnd deleted file mode 100644 index 94ff9c220d..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/META-INF/jonas-genic.bnd +++ /dev/null @@ -1,55 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.generators.genic.* - -# ant, avalon, log4j, bcel imported by velocity but not used -Import-Package !org.apache.tools.ant.*,\ - !org.apache.avalon.framework.logger,\ - !org.apache.bcel.*,\ - !org.apache.log4j.*,\ - !org.jdom.*,\ - !com.werken.*,\ - !junit.*,\ - !org.objectweb.jorm.mapper.fos.*,\ - !org.apache.xerces.dom,\ - !org.apache.xml.*,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * - -DynamicImport-Package org.objectweb.jorm.naming.*, \ - org.objectweb.perseus.persistence.api, \ - org.ow2.jonas.lib.ejb21.ha,\ - javax.* - --exportcontents org.objectweb.jorm.generator.*, \ - org.objectweb.jorm.mapper.rdb.*, \ - org.apache.velocity.runtime.log - -# asm needed by jorm-compiler -Embed-Dependency velocity-dep;inline=true, \ - jorm-compiler;inline=true, \ - asm;inline=true, \ - asm-attrs;inline=true, \ - fastrmic;inline=true diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/GenICMacros.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/GenICMacros.vm deleted file mode 100644 index dfd637eaff..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/GenICMacros.vm +++ /dev/null @@ -1,86 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Benoit PELLETIER. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -## Macros library for GenIC - -############################################################################### -## -## macros 'beforeThrowRemoteException' and 'afterThrowRemoteException" aim to -## add a try catch block in order to perform some post exception process like mapping -## to protocol depending exception -## - -#macro( beforeThrowRemoteException ) -// Velocity: beforeThrowRemoteException: $Id$ -try { -#end## - -#macro( afterThrowRemoteException ) - // Velocity: afterThrowRemoteException: $Id$ -} catch ( RemoteException e) { - - // check if rmi exception mapping is needed - if yes the method rethrows it - RmiUtility.rethrowRmiException(e) ; - // if not, throws the exception just as it is - throw e ; -} -#end - -#macro( timerVariablesDeclaration) - long requestStartTime ; - long businessStartTime = -1; - long businessStopTime; - long requestStopTime; -#end - -#macro( getRequestStartTime) - requestStartTime = new Date().getTime(); -#end - -#macro( getRequestStopTime) - requestStopTime = new Date().getTime(); -#end - -#macro( getBusinessStartTime) - businessStartTime = new Date().getTime(); -#end - -#macro( getBusinessStopTime) - businessStopTime = new Date().getTime(); -#end - -#macro( updateEJBMonitoringData) - if (bf instanceof JSessionFactory) { - JSessionFactory jsf = (JSessionFactory) bf; - if (jsf.getMonitoringEnabled()) { - MonitoringEvent monitoringEvent = new MonitoringEvent(System.identityHashCode(jsf), jsf.getEJBName(), - jsf.getContainer().getFileName(), "$package.$class.$M.getName()($M.getFormalParameters())", - businessStartTime, businessStopTime, requestStartTime, requestStopTime); - jsf.getDispatcher().dispatch(monitoringEvent); - } - } -#end diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2.vm deleted file mode 100644 index ff118e1955..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2.vm +++ /dev/null @@ -1,1564 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// -// This class is the bean specific part of the container managed persistence with JDBC. -// Generated by JOnAS's GenIC tool via Velocity. -// DO NOT EDIT THIS FILE. - -#set( $IsAutomaticPk = $dd.isAutomaticPk() ) -#set( $IsUndefinedPK = $dd.isUndefinedPK() ) -package $package; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EJBHome; -import javax.ejb.EJBObject; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.NoSuchObjectLocalException; -import javax.ejb.RemoveException; - -import org.objectweb.util.monolog.api.BasicLevel; - -import org.objectweb.jorm.api.PAccessor; -import org.objectweb.jorm.api.PBinding; -import org.objectweb.jorm.api.PClassMapping; -import org.objectweb.jorm.api.PException; -import org.objectweb.jorm.api.PExceptionExistingDSI; -import org.objectweb.jorm.api.PExceptionIO; -import org.objectweb.jorm.naming.api.PExceptionNaming; -import org.objectweb.jorm.naming.api.PBinder; -import org.objectweb.jorm.naming.api.PExceptionExistingName; -import org.objectweb.jorm.naming.api.PName; -import org.objectweb.jorm.naming.api.PNameCoder; -import org.objectweb.jorm.naming.api.PNameGetter; -import org.objectweb.jorm.naming.api.PNamingContext; -import org.objectweb.jorm.type.api.PType; -import org.objectweb.jorm.type.api.PTypeSpace; - -import org.ow2.jonas.lib.ejb21.jorm.Coder; -import org.ow2.jonas.lib.ejb21.jorm.GenClassElement; -import org.ow2.jonas.lib.ejb21.jorm.GenClassListener; -import org.ow2.jonas.lib.ejb21.jorm.MedorFactory; -import org.ow2.jonas.lib.ejb21.jorm.PObject; -import org.ow2.jonas.lib.ejb21.jorm.PObjectHome; -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntitySwitch; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.MarshallTool; -import org.ow2.jonas.lib.ejb21.JavaType; -import org.ow2.jonas.lib.ejb21.ExceptionHelper; - -import org.objectweb.medor.api.MedorException; -import org.objectweb.medor.api.TupleStructure; -import org.objectweb.medor.expression.api.ParameterOperand; -import org.objectweb.medor.expression.lib.BasicParameterOperand; -import org.objectweb.medor.tuple.api.Tuple; -import org.objectweb.medor.tuple.api.TupleCollection; -import org.objectweb.medor.type.lib.PTypeSpaceMedor; - -public class $class extends ${dd.getJormStateClassName()} implements PAccessor, - ${dd.getJormAccessorClassName()} -#if($pkIsUserClass) - ,${dd.getJormPNameGetterClassName()} -#end -{ - -################################### -############## Fields ############# -################################### -#foreach ($F in $fieldList) -// private ${F.getTypeName()} ${F.getName()}; - -#end -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - private ${F.getGenClassName()} ${F.getName()} = null; - private boolean ${F.getName()}loaded = false; -#* *##else - private ${F.getTypeName()} ${F.getName()} = null; -#* *##end -// private PName ${F.getName()}PName = null; - -#end - protected JEntityContext ejbContext = null; - private MedorFactory factory = null; - private boolean setPkAllowed = false; - private boolean selectForUpdate = false; - - public PNameGetter encode(String field, PName pname) - throws PExceptionNaming { - PNameCoder coder = factory.getPNameCoder(field); - if (pname == null) { - pname = coder.getNull(); - } - PNameGetter result = (PNameGetter) coder.encodeAbstract(pname); - return result; - } - - public PName decode(String field, PNameGetter png, Object ctx) - throws PExceptionNaming { - PNameCoder coder = factory.getPNameCoder(field); - if (png == null) { - return coder.getNull(); - } else { - return coder.decodeAbstract(png, ctx); - } - } - -######################################################################## -############ Accessors (EJB 2.0 & Jorm) for the CMP fields ############# -######################################################################## -#foreach ($F in $fieldList) - //-------------------------------------------------------------// - //------------------- Field ${F.getName()} - //-------------------------------------------------------------// - // EJB 2.0 Getter - public ${F.getTypeName()} ${F.getGetterName()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, "return " + ${F.jormGetter()}()); -#* *##if (!$F.isMustBeConvert()) - return (${F.getTypeName()}) ${F.jormGetter()}(); -#* *##else - return (${F.getTypeName()}) ${F.getConvertClassName()}.toMemory(${F.jormGetter()}()); -#* *##end - } - - // EJB 2.0 Setter - public void ${F.getSetterName()}(${F.getTypeName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG,"param=" + val); -#* *##if ($F.isPrimaryKey()) -#set( $pkField = ${F.jormSetter()} ) - if (!setPkAllowed) { - throw new IllegalStateException("Must not reset a primary key value(${F.jormGetter()}() field)"); - } -#* *##end - ejbContext.setDirty(true); -#* *##if (!$F.isMustBeConvert()) - this.${F.jormSetter()}((${F.getJormTypeName()}) val); -#* *##else - this.${F.jormSetter()}((${F.getJormTypeName()}) ${F.getConvertClassName()}.toStorage(val)); -#* *##end - } - - /* - // Jorm Getter - public ${F.getJormTypeName()} paGet${F.getNameUpperFirst()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, "return " + ${F.jormGetter()}()); -#* *##if (!$F.isMustBeConvert()) - return (${F.getJormTypeName()}) ${F.jormGetter()}(); -#* *##else - return (${F.getJormTypeName()}) ${F.getConvertClassName()}.toStorage(${F.jormGetter()}()); -#* *##end - } - - // Jorm Setter - public void paSet${F.getNameUpperFirst()}(${F.getJormTypeName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG, "param=" + val + " / current=" + ${F.jormGetter()}()); -#* *##if (!$F.isMustBeConvert()) - this.${F.jormSetter()}((${F.getTypeName()}) val); -#* *##else - this.${F.jormSetter()}((${F.getTypeName()}) ${F.getConvertClassName()}.toMemory(val)); -#* *##end - } - */ - -#end ##foreach -######################################################################## -############ Accessors (EJB 2.0 & Jorm) for the CMR fields ############# -######################################################################## -#foreach ($F in $cmrList) - //-------------------------------------------------------------// - //------------------- Field ${F.getName()} - //-------------------------------------------------------------// - - private void update${F.getName()}() { -#* *##if ($F.getRsr().isTargetMultiple()) - try { - Object conn = factory.getConnection(null); - ${F.jormSetter()}(((PNamingContext) factory.getPNameCoder("${F.getName()}")) - .export(conn, ${F.getName()}.gcGetPBinding(), - ((PBinding) ejbContext.getEntitySwitch()).getPName())); - } catch (PException e) { - throw new RuntimeException("Impossible to fetch a PName of the '${F.getName()}' field", e); - } -#* *##else - if (${F.getName()} != null) { - ${F.jormSetter()}(((PObject) ${F.getName()}).getPName()); - } else { - ${F.jormSetter()}(factory.getPNameCoder("${F.getName()}").getNull()); - } -#* *##end - } - -#* *##if (!$F.getRsr().isTargetMultiple()) - private void loadCMR${F.getUFLName()}() { - if (${F.getName()} == null) { - //TraceEjb.interp.log(BasicLevel.DEBUG,"load reference" + ${F.jormGetter()}()); - try { - ${F.getName()} = (${F.getTypeName()}) getPObject(${F.jormGetter()}(), true); - } catch (PException pe) { - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to load the reference", pe); - throw new EJBException("Impossible to load the reference", pe); - } - } - } - - private void clear${F.getUFLName()}() throws RemoveException { - loadCMR${F.getUFLName()}(); - if (${F.getName()} != null) { -#* *##if ($F.getRsr().mustCascade()) -#* *##else - ((${F.getOppositeHelperFQClassName()}) ${F.getName()}).jonasSet${F.getOppositeUFLCMRName()}(null); -#* *##end - } - ejbContext.setDirty(true); - // ${F.jormSetter()}(null); - ${F.getName()} = null; - update${F.getName()}(); - } - -#* *##else - private void loadGC${F.getUFLName()}() { - if (! ${F.getName()}loaded) { - try { - ${F.getName()}.read(${F.jormGetter()}(), null, jonasGetCurrentTransaction()); - ${F.getName()}loaded = true; - } catch (PException pe) { - Exception e = getInnerException(pe); - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to load the CMR field", e); - throw new EJBException("Impossible to load the CMR field", e); - } - } - } -#* *##end - - // ------------------------ E J B G E T T E R ---------------------- // - //-----------------------------------------------------------------------// - public ${F.getTypeName()} get${F.getUFLName()}() { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "bean pname:" + ((JEntitySwitch) ejbContext.getEntitySwitch()).getPrimaryKey()); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}=" + ${F.getName()}); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}PName=" + ${F.jormGetter()}()); - //if (${F.jormGetter()}() != null) { - // TraceEjb.interp.log(BasicLevel.DEBUG, "${F.getName()}PName.isNull(): " + ${F.jormGetter()}().isNull()); - //} -#* *##if (!$F.getRsr().isTargetMultiple()) - loadCMR${F.getUFLName()}(); -#* *##else - loadGC${F.getUFLName()}(); -#* *##end - //TraceEjb.coherence.log(BasicLevel.DEBUG, "return " + ${F.getName()}); - return ${F.getName()}; - } - - // ------------------------ E J B S E T T E R ---------------------- // - //-----------------------------------------------------------------------// - public void set${F.getUFLName()}(${F.getTypeName()} val) { -## -## -#* *##if ($F.getRsr().isTargetMultiple())## MULTIVALUED ###################### - if (val == null) { - throw new IllegalArgumentException("Assign a null value to a multivalued relationship"); - } - loadGC${F.getUFLName()}(); - if (val != ${F.getName()}) { - ejbContext.setDirty(true); - // clear the current gen class - ${F.getName()}.clear(); - - // iterate over the parameter to add each element into the - // current gen class - for(Iterator it = val.iterator(); it.hasNext();) { - ${F.getName()}.add(it.next()); - } - } -## -## -#* *##elseif ($F.isOOb())## ONE - ONE bidrectional############################ - // Load the reference for the coherence management - loadCMR${F.getUFLName()}(); - if (val != null) { - // Remove the relation of the bean which references the parameter - // if there is a relation - ${F.getHelperClassName()} element; - try { - element = ((${F.getOppositeHelperFQClassName()}) val).jonasGet${F.getOppositeUFLCMRName()}(); - } catch (NoSuchObjectLocalException e) { - throw new IllegalArgumentException(e.getMessage()); - } - if (element != null) { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "Remove the relation of the bean which references the parameter" + element); - try { - element.jonasSet${F.getUFLName()}(null); - } catch (Exception e) { - throw new EJBException("impossible to remove the relation of the bean which references the parameter", e); - } - } - - // link the parameter to the current bean (reverse relation coherence) - //TraceEjb.coherence.log(BasicLevel.DEBUG, "link the parameter to the current bean"); - ${F.getHelperClassName()} current = (${F.getHelperClassName()}) -#* *##if ($dd.getLocalClass()) - ejbContext.get2EJBLocalObject(); -#* *##else - ejbContext.getEJBObject(); -#* *##end - if (current == null) { - current = (${F.getHelperClassName()}) ejbContext.getEJBObject(); - } - ((${F.getOppositeHelperFQClassName()}) val).jonasSet${F.getOppositeUFLCMRName()}(current); - } - - // remove the relation of the current referenced bean to this - if (${F.getName()} != null) { - ((${F.getOppositeHelperFQClassName()}) ${F.getName()}).jonasSet${F.getOppositeUFLCMRName()}(null); - } - if (val == null || !val.equals(${F.getName()})) { - ejbContext.setDirty(true); - // ${F.jormSetter()}(null); - ${F.getName()} = val; - update${F.getName()}(); - } -## -## -#* *##elseif ($F.isMOb())## MANY - ONE bidrectional########################## - loadCMR${F.getUFLName()}(); - if (val == null || !val.equals(${F.getName()})) { - ${F.getHelperClassName()} current; - try { - current = (${F.getHelperClassName()}) -#* *##if ($dd.getLocalClass()) - ejbContext.get2EJBLocalObject(); -#* *##else - ejbContext.getEJBObject(); -#* *##end - if (${F.getName()} != null) { - ((${F.getOppositeHelperFQClassName()}) ${F.getName()}).jonasRemove${F.getOppositeUFLCMRName()}(current); - } - if (val != null) { - ((${F.getOppositeHelperFQClassName()}) val).jonasAdd${F.getOppositeUFLCMRName()}(current); - } - } catch (NoSuchObjectLocalException e) { - throw new IllegalArgumentException(e.getMessage()); - } - ejbContext.setDirty(true); - // ${F.jormSetter()}(null); - ${F.getName()} = val; - update${F.getName()}(); - } -## -## -#* *##else#################################################################### - throw new EJBException("Error in generated Setter method"); -#* *##end - //TraceEjb.coherence.log(BasicLevel.DEBUG, "end: ${F.getName()}=" + ${F.getName()}); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "end: ${F.getName()}PName=" + ${F.jormGetter()}()); - } -## - - // ------------------- J O R M A C C E S S O R S ------------------- // - //-----------------------------------------------------------------------// - - private PName ${F.jormGetter()}() { - try { - return super.${F.jormGetter()}((java.lang.Object) null); - } catch (PException e) { - throw new RuntimeException(e); - } - } - - private void ${F.jormSetter()}(PName pname) { - try { - super.${F.jormSetter()}(pname, (java.lang.Object) null); - } catch (PException e) { - throw new RuntimeException(e); - } - } - - // Jorm Getter - public PName paGet${F.getUFLName()}(java.lang.Object conn) - throws PExceptionIO { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}PName=" + ${F.jormGetter()}()); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}=" + ${F.getName()}); -#* *##if ($F.getRsr().isTargetMultiple()) - if (${F.jormGetter()}() == null) { - try { - ${F.jormSetter()}(((PNamingContext) factory.getPNameCoder("${F.getName()}")) - .export(conn, ${F.getName()}.gcGetPBinding(), - ((PBinding) ejbContext.getEntitySwitch()).getPName())); - } catch (PExceptionIO e) { - throw e; - } catch (PException e) { - throw new PExceptionIO(e, "Impossible to fetch a PName of the '${F.getName()}' field"); - } - } -#* *##else - if (${F.jormGetter()}() == null) { - if (${F.getName()} != null) { - ${F.jormSetter()}(((PObject) ${F.getName()}).getPName()); - } else { - ${F.jormSetter()}(factory.getPNameCoder("${F.getName()}").getNull()); - } - } -#* *##end - //TraceEjb.coherence.log(BasicLevel.DEBUG,"return " + ${F.jormGetter()}()); - return ${F.jormGetter()}(); - } - - // Jorm Setter - public void paSet${F.getUFLName()}(PName o, java.lang.Object conn) - throws PExceptionIO { - //TraceEjb.coherence.log(BasicLevel.DEBUG,""); -#* *##if (!$F.getRsr().isTargetMultiple()) - this.${F.getName()} = null; -#* *##end - ${F.jormSetter()}(o); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}PName: " + ${F.jormGetter()}()); - //if (${F.jormGetter()}() != null) - // TraceEjb.coherence.log(BasicLevel.DEBUG, "${F.getName()}PName.isNull(): " + ${F.jormGetter()}().isNull()); - } - - - // IMPLEMENTATION OF THE ${F.getHelperFQClassName()} INTERFACE // - //-------------------------------------------------------------// -#* *##if ($F.getRsr().isTargetMultiple())################################# - public ${F.getTypeName()} jonasGet${F.getUFLName()}() { - //TraceEjb.coherence.log(BasicLevel.DEBUG,"return " + ${F.getName()}); - loadGC${F.getUFLName()}(); - return ${F.getName()}; - } - - public void jonasSet${F.getUFLName()}(${F.getTypeName()} val) { - //TraceEjb.coherence.log(BasicLevel.DEBUG,""); - if (val == null) { - throw new IllegalArgumentException("Assign a null value to a relationship"); - } - loadGC${F.getUFLName()}(); - if (val != ${F.getName()}) { - ejbContext.setDirty(true); - // clear the current gen class - ${F.getName()}.clear(); - - // iterate over the parameter to add each element into the - // current gen class - for (Iterator it = val.iterator(); it.hasNext(); ) { - ${F.getName()}.add(it.next(), false); - } - } - //TraceEjb.coherence.log(BasicLevel.DEBUG, "END"); - } - - public void jonasAdd${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.coherence.log(BasicLevel.DEBUG, ""); - loadGC${F.getUFLName()}(); - // In case of a MANY-MANY relation both gen class are mapped over the - // the same hosting structure (rdb table). Then the coherence must be - // done in memory in both sides, and in the support once time by the - // master gen class. - ${F.getName()}.add(bean, false); - } - - public void jonasRemove${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.coherence.log(BasicLevel.DEBUG,""); - loadGC${F.getUFLName()}(); - // In case of a MANY-MANY relation both gen class are mapped over the - // the same hosting structure (rdb table). Then the coherence must be - // done in memory in both sides, and in the support once time by the - // master gen class. - ${F.getName()}.remove(bean, false); - } - - public void jonasElemWritten${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //${F.getName()}.doNotWrite((PObject) bean); - } - -#* *##else## MONO VALUED FIELD############################################# - public ${F.getOppositeHelperFQClassName()} jonasGet${F.getUFLName()}() { - loadCMR${F.getUFLName()}(); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "return " + ${F.getName()}); - return (${F.getOppositeHelperFQClassName()}) ${F.getName()}; - } - - public void jonasSet${F.getUFLName()}(${F.getOppositeHelperFQClassName()} val) { - //TraceEjb.coherence.log(BasicLevel.DEBUG,""); - if (val == null || !val.equals(${F.getName()})) { - ejbContext.setDirty(true); - // ${F.jormSetter()}(null); - ${F.getName()} = (${F.getTypeName()}) val; - update${F.getName()}(); - } - } -#* *##end## - - -#end##foreach - -#foreach ($M in $methodList) - -############################################### -############## ejbActivate ################ -############################################### -#if ($M.isEjbActivate()) - /* - * ejbActivate() method - */ - public void ejbActivate() -#* *##if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#* *##end - { - setPkAllowed = false; - super.ejbActivate(); - } - -############################################### -############## setEntityContext ################ -############################################### -#elseif ($M.isEjbSetEntityContext()) - /* - * setEntityContext(javax.ejb.EntityContext) method - */ - public void setEntityContext(javax.ejb.EntityContext p1) -#* *##if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#* *##end - { - setPkAllowed = false; - ejbContext = (JEntityContext) p1; - if (factory == null) { - factory = (MedorFactory) ejbContext.getEntityFactory(); - PClassMapping gcm = null; - selectForUpdate = factory.getSelectForUpdate(); -#* *##foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - //initialize the multivalued relation ${F.getName()} - ${F.getName()} = new ${F.getGenClassName()}(); - gcm = factory.getGenClassMapping("${F.getName()}"); - ${F.getName()}.setPClassMapping(gcm); - ${F.getName()}.setEntityContext(ejbContext); - ${F.getName()}.setListener(new ${F.getName()}Of${dd.getEjbName()}Listener(this)); - try { - ${F.getName()}.setPBinding(gcm.createPBinding()); - } catch (PException e) { - TraceEjb.interp.log(BasicLevel.ERROR, - "Impossible to create a PBinding for the relation ${F.getName()}", e); - throw new EJBException("Impossible to create a PBinding for the relation ${F.getName()}", e); - } -#* *##end -#* *##end - } - super.setEntityContext(p1); - } - -######################################### -############## EjbCreate ################ -######################################### -#elseif ($M.isEjbPostCreate()) - /* - * ejbPostCreate(.....) method - */ - public void $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, "differed writing at create"); - super.$M.getName()($M.getActualParameters()); - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - Object conn = null; - try { - conn = factory.getConnection(null); - ejbContext.setDirty(false); - pb.write(conn, this); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, - "Failed to create bean: ", getInnerException(e)); - throw new EJBException("Failed to create bean: " + getInnerException(e).getMessage()); - } finally { - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } - -#elseif ($M.isEjbCreate()) - /* - * ejbCreate(.....) method - */ - public PName _$M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG,""); - // Container-managed fields must be set to the Java language default values -#foreach ($F in $fieldList) - this.${F.jormSetter()}($F.getDefaultValue()); -#end -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - ${F.getName()}.reset(); - ${F.jormSetter()}(null); -#* *##else - jonasSet${F.getUFLName()}(null); -#* *##end -#end - setPkAllowed = true; - super.${M.getName()}(${M.getActualParameters()}); - -#if ( $IsAutomaticPk || $IsUndefinedPK ) // If Pk is auto-incremented, we must set the value of the pk - // Only type Integer is valid - this.$pkField(new Integer(factory.calculateAutomaticPk())); -#end - setPkAllowed = false; - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - //TraceEjb.interp.log(BasicLevel.DEBUG, "pb=" + pb); - Object conn = null; - try { - conn = factory.getConnection(null); -#if($pkIsUserClass) - pb.export(conn, this); -#else - pb.export(conn, JavaType.toObject(get${fieldPkList.elementAt(0).getNameUpperFirst()}())); -#end - //TraceEjb.interp.log(BasicLevel.DEBUG, "PName=" + pb.getPName()); - // The write operation has been differed in the postCreate, to resolve the - // issue when a legacy database has "not null" foreign keys. - return pb.getPName(); - } catch (PExceptionExistingDSI pe) { - throw new DuplicateKeyException(pe.getMessage()); - } catch (PExceptionExistingName pe) { - throw new DuplicateKeyException(pe.getMessage()); - } catch (PExceptionNaming pe) { - throw new CreateException("The pk fields has not been initialized the ejbCreate method of the bean ${dd.getEjbName()}"); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, - "Failed to create bean: ", getInnerException(e)); - throw new CreateException("Failed to create bean: " + getInnerException(e).getMessage()); - } finally { - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } - -########################################## -############## FinderByPk ################ -########################################## -#elseif ($M.isFinderByPk()) - /* - * ejbFindByPrimaryKey(...) method - */ - public PName ejbFindByPrimaryKey($pk pk) - throws FinderException { - // Translate the pk into a PName - Coder c = (Coder) ejbContext.getEntityFactory().getLocalHome(); - if (c == null) { - c = (Coder) ejbContext.getEntityFactory().getHome(); - } - PName pn = null; - try { - pn = c.decode(pk); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, - "Failed to decode the primary key:" + pk, e); - throw new FinderException("Failed to decode the primary key:" + pk); - } - return ejbFindByPrimaryKey(pn); - } - - /* - * ejbFindByPrimaryKey(...) method - */ - public PName ejbFindByPrimaryKey(PName pn) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, pn); - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - //TraceEjb.interp.log(BasicLevel.DEBUG, "pb=" + pb); - //TraceEjb.interp.log(BasicLevel.DEBUG, "pb.getStatus()=" + pb.getStatus()); - Object conn = null; - try { - conn = factory.getConnection(null); - pb.bind(pn); - if (!pb.exist(conn)) { - // TraceEjb.interp.log(BasicLevel.DEBUG, - // "Object not found in database (ejbFindByPrimaryKey(" - // + pn + "))"); - pb.unbind(); - throw new ObjectNotFoundException("Object not found in database (ejbFindByPrimaryKey(" + pn + "))"); - } - return pn; - } catch (ObjectNotFoundException oe) { - throw oe; - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, - "Failed to find bean from database in ejb$M.getCapName()" + pn, - getInnerException(e)); - throw new FinderException("Failed to find bean from database in ejb$M.getCapName()"); - } finally { - //TraceEjb.interp.log(BasicLevel.DEBUG, "pb.getStatus()=" + pb.getStatus()); - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } - -######################################### -############## EjbRemove ################ -######################################### -#elseif ($M.isEjbRemove()) - - private boolean ejbRemoveCalled = false; - - /* - * ejbRemove() method - * This implementation unexports the bean, and remove the data on the - * support. - */ - public void ejbRemove() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - if (ejbRemoveCalled) { - // In case of cascade delete loops. - return; - } - ejbRemoveCalled = true; - try { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - super.ejbRemove(); - -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().mustCascade()) -#* *##if ($F.getRsr().isTargetMultiple()) - loadGC${F.getUFLName()}(); - for (Iterator it = ${F.getName()}.iterator(); it.hasNext();) { - javax.ejb.EJBLocalObject el = (javax.ejb.EJBLocalObject) it.next(); - el.remove(); - } -#* *##else - loadCMR${F.getUFLName()}(); - if (${F.getName()} != null) { - ${F.getName()}.remove(); - } -#* *##end -#* *##end -#end - -#foreach ($F in $cmrList) -#* *##if ($F.isMMb()) ## MANY - MANY bidirectional - loadGC${F.getUFLName()}(); // needed for coherence of remove. - ${F.getName()}.clear(); // MM -#* *##elseif ($F.isOMb()) ## ONE - MANY bidirectional - loadGC${F.getUFLName()}(); // needed for coherence of remove. - ${F.getName()}.gcClear(true); // OM -#* *##elseif ($F.isMOb()) ## MANY - ONE bidirectional - set${F.getUFLName()}(null); // MO -#* *##else - clear${F.getUFLName()}(); // OO -#* *##end -#end - } finally { - ejbRemoveCalled = false; // in case of rollback - } - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - Object conn = null; - try { - conn = factory.getConnection(null); - PName pn = (PName) ((JEntitySwitch) pb).getPrimaryKey(); - - //TraceEjb.interp.log(BasicLevel.DEBUG, "Remove the bean " + pn); - pb.bind((PName) ((JEntitySwitch) pb).getPrimaryKey()); - pb.unexport(conn); - pb.write(conn, this); - //pb.unbind(); - -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - //TraceEjb.interp.log(BasicLevel.DEBUG, "Remove the multivalued CMR ${F.getName()}"); - if (${F.jormGetter()}() == null) { - ${F.jormSetter()}(((PNamingContext) factory.getPNameCoder("${F.getName()}")) - .export(conn, ${F.getName()}.gcGetPBinding(), pn)); - } - pb = ${F.getName()}.gcGetPBinding(); - pb.bind(${F.jormGetter()}()); - pb.unexport(conn); - ${F.getName()}.write(${F.jormGetter()}(), conn); - //pb.unbind(); -#* *##end -#end - ejbContext.setDirty(false); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to remove", getInnerException(e)); -#if ( $M.getExceptionList().indexOf("RemoveException") != -1 ) - throw new RemoveException(e.getMessage()); -#else - throw new EJBException(e.getMessage()); -#end - } finally { - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } - -####################################### -############## EjbLoad ################ -####################################### -#elseif ($M.isEjbLoad()) - /* - * ejbLoad() method - */ - public void ejbLoad() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - Object conn = null; - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - try { - conn = factory.getConnection(null); - pb.bind((PName) ((JEntitySwitch) pb).getPrimaryKey()); - pb.read(conn, this, jonasGetCurrentTransaction(), selectForUpdate); -## -## Be careful the relations must be load after the bean, because the PNames of -## the gen class are assigned by the paSetXXX methods. -## -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - // lazy loading of the multivalued relations ${F.getName()} - ${F.getName()}loaded = false; -#* *##end -#end - ejbContext.setDirty(false); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Jorm could not load bean instance"); - throw new EJBException(getInnerException(e)); - } finally { - //TraceEjb.interp.log(BasicLevel.DEBUG, "pb.getStatus()=" + pb.getStatus()); - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - super.ejbLoad(); - } - -######################################## -############## EjbStore ################ -######################################## -#elseif ($M.isEjbStore()) - /* - * ejbStore() method - */ - public void ejbStore() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - // bean method must be called in any case (spec EJB) - super.ejbStore(); - if (ejbContext.isDirty() -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - || ${F.getName()}.gcIsModified() -#* *##end -#end - ) { - // The bean or a gen class has been modified - // ==> The first allocates a connection which will be shared to - // store the modified objects - Object conn = null; - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - try { - PName pn = null; - if (ejbContext.isDirty()) { - //TraceEjb.interp.log(BasicLevel.DEBUG, "Store the bean"); - conn = factory.getConnection(null); - // The bean has been modified - PBinding pb = (PBinding) ejbContext.getEntitySwitch(); - pn = (PName) ((JEntitySwitch) pb).getPrimaryKey(); - pb.bind(pn); - // try a fix for #306186 : Don't set dirty when - // write raised an exception. - ejbContext.setDirty(false); - pb.write(conn, this); - } -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) - if (${F.getName()}.gcIsModified()) { - if (${F.jormGetter()}()==null) { - if (pn == null) - pn = (PName) ejbContext.getEntitySwitch().getPrimaryKey(); - try { - ${F.jormSetter()}(((PNamingContext) factory.getPNameCoder("${F.getName()}")) - .export(conn, ${F.getName()}.gcGetPBinding(), pn)); - } catch (PExceptionIO e) { - throw e; - } catch (PException e) { - throw new PExceptionIO(e, "Impossible to fetch a PName of the '${F.getName()}' field"); - } - } - //TraceEjb.interp.log(BasicLevel.DEBUG, "Store the gen class ${F.getName()}"); - if (conn == null) - conn = factory.getConnection(null); - // store the multivalued relations ${F.getName()} - // because it has been modified - ${F.getName()}.write(${F.jormGetter()}(), conn); - } -#* *##end -#end - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to store", getInnerException(e)); - throw new EJBException(e); - } finally { - try { - if (conn != null) - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } - } - -############################################ -############## FinderSimple ################ -############################################ -#elseif ($M.isFinderSimple()) - /* - * ejbFindXXX(...) method returning only 1 PK - */ - public PName ejb$M.getCapName()($M.getFormalParameters()) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - TupleCollection tc = null; - Object conn = null; - try { - ParameterOperand[] params = new BasicParameterOperand[${M.getParametersNumber()}]; -#* *##set($pc = 1)## The parameter counter starts always to 1 -#* *##set($idx = 0)## the array index starts to 0 -#* *##foreach($t in $M.getParamList()) -#* *##if (${t.isEjbLocal()}) - // EJBLocalObject param case - if (p$pc == null) { - PClassMapping pcm = (PClassMapping) factory.getContainer().getBeanFactory("${t.getEjbName()}"); - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - pcm.getPBinder().getNull()); - } else { - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - ((PObject) p$pc).getPName()); - } -#* *##else - params[$idx] = new BasicParameterOperand(${t.getJormType()}, "?$pc", p$pc); -#* *##end -#* *##set($idx = $idx + 1) -#* *##set($pc = $pc + 1) -#* *##end - - conn = factory.getConnection(null); - - tc = factory.evaluate(conn, ${M.getMethodIndex()}, params); - - //Build the result - if (tc.isEmpty()) { - // TraceEjb.interp.log(BasicLevel.DEBUG, - // "The bean was not found in the support"); - throw new ObjectNotFoundException("The bean was not found in the support"); - } else { - PName pn = (PName) tc.getTuple().getObject(tc.getMetaData().getSize()); - //TraceEjb.interp.log(BasicLevel.DEBUG, "pn: " + pn); - if (!tc.isLast()) { - throw new FinderException("There is more than one object in response to the ${M.getCapName()} single-object finder"); - } else { - return pn; - } - } - } catch (PException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the finder method ${M.getCapName()}", getInnerException(e)); - throw new FinderException("An error occured during the evaluation of the ${M.getCapName()} request:" - + e.getMessage()); - } catch (MedorException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the finder method ${M.getCapName()}", getInnerException(e)); - throw new FinderException("An error occured during the evaluation of the ${M.getCapName()} request:" - + e.getMessage()); - } finally { - if (tc != null) { - try { - tc.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the TupleCollection in the finder method ${M.getCapName()}", - ignore); - } - } - if (conn != null) { - try { - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to close a connection", e); - } - } - } - //look in the interposition objects (local or remote) the return type !!! - } - - -#elseif ($M.isFinderEnum() || $M.isFinderCol()) -########################################## -############## isFinderAll ############### -########################################## -#**##if ($M.isFinderAll()) - public $M.getReturnType() ejb$M.getCapName()($M.getFormalParameters()) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - Object conn = null; - try { - conn = factory.getConnection(null); - ArrayList beans = new ArrayList(); - for (Iterator it = factory.getPNameIterator(conn); it.hasNext(); ) { - beans.add(it.next()); - } -#* *##if ($M.isFinderEnum()) ## the result is an Enumeration - return java.util.Collections.enumeration(beans); -#* *##else ## the result is a collection - return beans; -#* *##end - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to find all objects", getInnerException(e)); - throw new FinderException("Impossible to find all objects" + e); - } finally { - try { - if (conn != null) { - factory.releaseConnection(conn); - } - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Impossible to release connection", e); - } - } - } -########################################## -####### FinderEnum or FinderColl########## -########################################## -#**##else - /* - * ejbFindXXX(...) method returning a java.util.Enumeration or a java.util.Collection - */ - public $M.getReturnType() ejb$M.getCapName()($M.getFormalParameters()) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - TupleCollection tc = null; - Object conn = null; - try { - ParameterOperand[] params = new BasicParameterOperand[${M.getParametersNumber()}]; -#* *##set($pc = 1)## The parameter counter starts always to 1 -#* *##set($idx = 0)## the array index starts to 0 -#* *##foreach($t in $M.getParamList()) -#* *##if (${t.isEjbLocal()}) - // EJBLocalObject param case - if (p$pc == null) { - PClassMapping pcm = (PClassMapping) factory.getContainer().getBeanFactory("${t.getEjbName()}"); - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - pcm.getPBinder().getNull()); - } else { - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - ((PObject) p$pc).getPName()); - } -#* *##else - params[$idx] = new BasicParameterOperand(${t.getJormType()}, "?$pc", p$pc); -#* *##end -#* *##set($idx = $idx + 1) -#* *##set($pc = $pc + 1) -#* *##end - conn = factory.getConnection(null); - tc = factory.evaluate(conn, ${M.getMethodIndex()}, params); - // Build the result - ArrayList result = new ArrayList(); - if (!tc.isEmpty()) { - do { - result.add(tc.getTuple().getObject(tc.getMetaData().getSize())); - } while (tc.next()); - } -#* *##if ($M.isFinderEnum()) - return Collections.enumeration(result); -#* *##else - return result; -#* *##end - } catch (PException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of ${M.getCapName()}", e); - throw new FinderException("An error occured during the evaluation of the ${M.getCapName()} request:" - + e.getMessage()); - } catch (MedorException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of ${M.getCapName()}", e); - throw new FinderException("An error occured during the evaluation of the ${M.getCapName()} request:" - + e.getMessage()); - } finally { - if (tc != null) { - try { - tc.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the TupleCollection in the finder method ${M.getCapName()}", - ignore); - } - } - if (conn != null) { - try { - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to close a connection", e); - } - } - } - } -#**##end - -############################################ -############## ejbSelect Simple|Set|Col #### -############################################ -#elseif ($M.isEjbSelectSimple() || $M.isEjbSelectSet() || $M.isEjbSelectCol()) - /* - * ejbSelectXXX(...) method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - factory.syncForSelect(); -############ ejbSelect returning a remote bean or a local bean ############## -#* *##if ( $M.isEjbqlReturnRemoteBean() || $M.isEjbqlReturnLocalBean() ) -#* *##set( $returnLocalBean = $M.isEjbqlReturnLocalBean() ) - TupleCollection tc = null; - Object conn = null; - try { - // Build the query paramaters list - ParameterOperand[] params = new BasicParameterOperand[${M.getParametersNumber()}]; -#* *##set($pc = 1)## The parameter counter starts always to 1 -#* *##set($idx = 0)## the array index starts at 0 -#* *##foreach($t in $M.getParamList()) -#* *##if (${t.isEjbLocal()}) - // EJBLocalObject param case - if (p$pc == null) { - PClassMapping pcm = (PClassMapping) factory.getContainer().getBeanFactory("${t.getEjbName()}"); - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - pcm.getPBinder().getNull()); - } else { - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - ((PObject) p$pc).getPName()); - } -#* *##else - params[$idx] = new BasicParameterOperand(${t.getJormType()}, "?$pc", p$pc); -#* *##end -#* *##set($idx = $idx + 1) -#* *##set($pc = $pc + 1) -#* *##end ##foreach - conn = factory.getConnection(null); - // Evaluate the query - tc = factory.evaluate(conn, ${M.getMethodIndex()}, params); - //Build the result -#* *##if ($M.isEjbSelectSimple()) - if (tc.isEmpty()) { - // TraceEjb.interp.log(BasicLevel.DEBUG, - // "No value was not found in the support"); - throw new ObjectNotFoundException("No value was not found in the support"); - } else { - PName pn = (PName) tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()); - ${M.getReturnType()} rValue = (${M.getReturnType()}) getPObject(pn, $returnLocalBean); - if (!tc.isLast()) { - throw new FinderException("There is more than one value in response to the ${M.getName()} single-value ejbSelect"); - } else { - return rValue; - } - } -#* *##elseif ($M.isEjbSelectSet()) - HashSet result = new HashSet(); - if (!tc.isEmpty()) { - do { - PName pn = (PName) tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()); - Object po = getPObject(pn, $returnLocalBean); - if (!result.contains(po)) { - result.add(po); - } - } while (tc.next()); - } - return result; -#* *##elseif ($M.isEjbSelectCol()) - ArrayList result = new ArrayList(); - if (!tc.isEmpty()) { - do { - PName pn = (PName) tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()); - result.add(getPObject(pn, $returnLocalBean)); - } while (tc.next()); - } - return result; -#* *##end ##elseif isEjbSelectCol() - } catch (PException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the ejbSelect method ${M.getName()}", e); - throw new FinderException( - "An error occured during the evaluation of the ${M.getName()} request:" - + e.getMessage()); - } catch (MedorException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the ejbSelect method ${M.getName()}", getInnerException(e)); - throw new FinderException( - "An error occured during the evaluation of the ${M.getName()} request:" - + e.getMessage()); - } finally { - if (tc != null) { - try { - tc.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the TupleCollection in the finder method ${M.getName()}", - ignore); - } - } - if (conn != null) { - try { - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to close a connection", e); - } - } - - - } - -############ ejbSelect returning neither a remote bean nor a local bean ############## -#* *##else - TupleCollection tc = null; - Object conn = null; - try { - // Build the query parameters list - ParameterOperand[] params = new BasicParameterOperand[${M.getParametersNumber()}]; -#* *##set($pc = 1)## The parameter counter starts always to 1 -#* *##set($idx = 0)## the array index starts at 0 -#* *##foreach($t in $M.getParamList()) -#* *##if (${t.isEjbLocal()}) - // EJBLocalObject param case - if (p$pc == null) { - PClassMapping pcm = (PClassMapping) factory.getContainer().getBeanFactory("${t.getEjbName()}"); - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - pcm.getPBinder().getNull()); - } else { - params[$idx] = new BasicParameterOperand(PTypeSpaceMedor.PNAME, - "?$pc", - ((PObject) p$pc).getPName()); - } -#* *##else - params[$idx] = new BasicParameterOperand(${t.getJormType()}, "?$pc", p$pc); -#* *##end -#* *##set($idx = $idx + 1) -#* *##set($pc = $pc + 1) -#* *##end ##foreach - // Evaluate the query - conn = factory.getConnection(null); - tc = factory.evaluate(conn, ${M.getMethodIndex()}, params); - //Build the result -#* *##if ($M.isEjbSelectSimple()) - if (tc.isEmpty()) { - //TraceEjb.interp.log(BasicLevel.DEBUG, - // "No value was not found in the support"); - throw new ObjectNotFoundException("No value was not found in the support"); - } else { - ${M.getReturnType()} rValue = (${M.getReturnType()}) tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()); - // tc.next() causes a NPE with postgres - if (!tc.isLast()) { - throw new FinderException("There is more than one value in response to the ${M.getName()} single-value ejbSelect"); - } else { - return rValue; - } - } -#* *##elseif ($M.isEjbSelectSet()) - HashSet result = new HashSet(); - if (!tc.isEmpty()) { - do { - boolean ignoreNull = false; -#* *##if ($M.isTupleGetterPrimitive()) - ignoreNull = tc.getTuple().isDefined(tc.getMetaData().getSize()); - Object o = new $M.getTupleGetterObjectClass()(tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize())); -#* *##else - Object o = tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()); -#* *##end - if (!ignoreNull && !result.contains(o)) { - result.add(o); - } - } while (tc.next()); - } - return result; -#* *##elseif ($M.isEjbSelectCol()) - ArrayList result = new ArrayList(); - if (!tc.isEmpty()) { - do { -#* *##if ($M.isTupleGetterPrimitive()) - // ignore null values - if (tc.getTuple().isDefined(tc.getMetaData().getSize())) { - result.add(new $M.getTupleGetterObjectClass()(tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize()))); - } -#* *##else - result.add(tc.getTuple().${M.getTupleGetter()}(tc.getMetaData().getSize())); -#* *##end - } while (tc.next()); - } - return result; -#* *##end ##elseif isEjbSelectCol() - } catch (PException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the ejbSelect method ${M.getName()}", getInnerException(e)); - throw new FinderException( - "An error occured during the evaluation of the ${M.getName()} request:" - + e.getMessage()); - } catch (MedorException e) { - TraceEjb.logger.log(BasicLevel.ERROR, "Problem during the evaluation of the ejbSelect method ${M.getName()}", getInnerException(e)); - throw new FinderException( - "An error occured during the evaluation of the ${M.getName()} request:" - + e.getMessage()); - } finally { - if (tc != null) { - try { - tc.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the TupleCollection in the finder method ${M.getName()}", - ignore); - } - } - if (conn != null) { - try { - factory.releaseConnection(conn); - } catch (Exception e) { - TraceEjb.logger.log(BasicLevel.ERROR, "impossible to close a connection", e); - } - } - } - -#* *##end ##else elseif isEjbqlReturnRemoteBean() - } - -#end ##elseif -#end ##foreach method - -########################################## -############## getPObject ################ -########################################## - /** - * This method is used to reach a referenced bean with its pname. - */ - private Object getPObject(PName pn, boolean useLocal) throws PException { - //TraceEjb.interp.log(BasicLevel.DEBUG, "Search PObject with the pnane:" + pn); - if (pn == null || pn.isNull()) { - return null; - } - PBinder f = (PBinder) pn.getPNameManager(); - JEntityFactory ef = (JEntityFactory) f.getBinderClassMapping(); - if (useLocal) { - return ((PObjectHome) ef.getLocalHome()).getPObject(pn); - } else { - return ((PObjectHome) ef.getHome()).getPObject(pn); - } - } - - // IMPLEMENTATION OF THE PAccessor INTERFACE // - - public Object getMemoryInstance() { - return this; - } - - private static Exception getInnerException(Exception e) { - boolean last = false; - Exception res = e; - while (!last) { - if (res instanceof PException - && ((PException) res).getNestedException() != null) { - res = ((PException) res).getNestedException(); - - } else if (res instanceof MedorException - && ((MedorException) res).getNestedException() != null) { - res = ((MedorException) res).getNestedException(); - - } else if (res instanceof EJBException - && ((EJBException) res).getCausedByException() != null) { - res = ((EJBException) res).getCausedByException(); - - } else - last = true; - } - return res; - } -#if($pkIsUserClass) - // IMPLEMENTATION OF THE ${dd.getJormPNameGetterClassName()} INTERFACE // -#* *##foreach ($pkf in $fieldPkList) - public ${pkf.getJormTypeName()} pnGet${pkf.getNameUpperFirst()}(Object ctx) { -#* *##if (!$pkf.isMustBeConvert()) - return (${pkf.getJormTypeName()}) ${pkf.jormGetter()}(); -#* *##else - return (${pkf.getJormTypeName()}) ${pkf.getConvertClassName()}.toStorage(${pkf.jormGetter()}()); -#* *##end - } -#* *##end -#end - - private Object jonasGetCurrentTransaction() { - try { - Object tx = factory.getTransactionManager().getTransaction(); - //TraceEjb.logger.log(BasicLevel.DEBUG, "current transaction=" + tx); - //new Exception("Current Transaction=" + tx).printStackTrace(); - return tx; - } catch (javax.transaction.SystemException e) { - TraceEjb.logger.log(BasicLevel.ERROR, - "Cannot get the current transaction to do the read:", e); - //System.out.println("No current Transaction: " + e.getMessage()); - return null; - } - } -} - - -#foreach ($F in $cmrList) -#* *##if ($F.getRsr().isTargetMultiple()) -/** - * Listener on modifications made on ${F.getName()} - */ -class ${F.getName()}Of${dd.getEjbName()}Listener implements GenClassListener { - - private $class bean; - - protected ${F.getName()}Of${dd.getEjbName()}Listener($class bean) { - this.bean = bean; - } - - public void isLegalElement(GenClassElement gce) throws IllegalArgumentException { - try { - Object o = (${F.getOppositeHelperFQClassName()}) gce.value; - } catch (ClassCastException e) { - throw new IllegalArgumentException(e.getMessage()); - } - } - - /** - * An Element has been added - */ - public void gcAdd(GenClassElement gce) { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "gce.value=" + gce.value); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "gce.pname=" + gce.pname); -## -## ONE - MANY bidrectional -## -#* *##if ($F.isOMb()) - ${F.getHelperFQClassName()} localBean = - ((${F.getOppositeHelperFQClassName()}) gce.value) - .jonasGet${F.getOppositeUFLCMRName()}(); - if (localBean != null) { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "remove the old relation with the element (" + localBean + ")"); - localBean.jonasRemove${F.getUFLName()}((${F.getOppositeHelperFQClassName()}) gce.value); - } - //TraceEjb.coherence.log(BasicLevel.DEBUG, "Assign the opposite cmr field(set this)"); - ((${F.getOppositeHelperFQClassName()}) gce.value) - .jonasSet${F.getOppositeUFLCMRName()}((${F.getHelperFQClassName()}) -#* *##if ($dd.getLocalClass()) - bean.ejbContext.get2EJBLocalObject() -#* *##else - bean.ejbContext.getEJBObject() -#* *##end - ); -#* *##end - -## -## MANY - MANY bidrectional -## -#* *##if ($F.isMMb()) - //TraceEjb.coherence.log(BasicLevel.DEBUG, "Assign the opposite cmr field (add this)"); - ((${F.getOppositeHelperFQClassName()}) gce.value) - .jonasAdd${F.getOppositeUFLCMRName()}((${F.getHelperFQClassName()}) -#* *##if ($dd.getLocalClass()) - bean.ejbContext.get2EJBLocalObject() -#* *##else - bean.ejbContext.getEJBObject() -#* *##end - ); -#* *##end - //TraceEjb.coherence.log(BasicLevel.DEBUG, "END"); - } - - /** - * An element has been removed - */ - public void gcRemove(GenClassElement gce, boolean delete) { - //TraceEjb.coherence.log(BasicLevel.DEBUG, "gce.value=" + gce.value); - //TraceEjb.coherence.log(BasicLevel.DEBUG, "gce.pname=" + gce.pname); -## -## ONE - MANY bidrectional -## -#* *##if ($F.isOMb()) - - ((${F.getOppositeHelperFQClassName()}) gce.value).jonasSet${F.getOppositeUFLCMRName()}(null); -#* *##end - -## -## MANY - MANY bidrectional -## -#* *##if ($F.isMMb()) - //TraceEjb.coherence.log(BasicLevel.DEBUG, "Modify the opposite cmr field (remove this)"); - ((${F.getOppositeHelperFQClassName()}) gce.value) - .jonasRemove${F.getOppositeUFLCMRName()}((${F.getHelperFQClassName()}) -#* *##if ($dd.getLocalClass()) - bean.ejbContext.get2EJBLocalObject() -#* *##else - bean.ejbContext.getEJBObject() -#* *##end - ); -#* *##end - //TraceEjb.coherence.log(BasicLevel.DEBUG, "END"); - } -} -#* *##end## relation multivalued -#end## foreach CMR - diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2CoherenceItf.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2CoherenceItf.vm deleted file mode 100644 index 4aad83ff8c..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmp2CoherenceItf.vm +++ /dev/null @@ -1,49 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// Start: $Id$ - -#if ($dd.getJormCoherenceHelperPackageName()) -package ${dd.getJormCoherenceHelperPackageName()}; -#end -public interface ${dd.getJormCoherenceHelperItfName()} { -#* *##foreach ($F in $cmrList) -#* *##if (!$F.isMMu() && !$F.isMOu())## -#* *##if ($F.getRsr().isTargetMultiple()) - ${F.getTypeName()} jonasGet${F.getUFLName()}(); - - void jonasSet${F.getUFLName()}(${F.getTypeName()} val); - - void jonasAdd${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean); - - void jonasRemove${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean); -#* *##else## - ${F.getOppositeHelperFQClassName()} jonasGet${F.getUFLName()}(); - - void jonasSet${F.getUFLName()}(${F.getOppositeHelperFQClassName()} val); -#* *##end## -#* *##end## -#* *##end##foreach -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmpJdbc.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmpJdbc.vm deleted file mode 100644 index 7b2d9658e4..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityCmpJdbc.vm +++ /dev/null @@ -1,622 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Helene Joanin. -## Contributor(s): ______________________________________. -## 01/01/18 Halas, Miroslav Miroslav.Halas@compuware.com -## javax.ejb.ObjectNotFoundException throwing -## 01/10/16 Nico.Hoogervorst@nl.compuware.com -## Support for BigInteger -## 02/08/07 Karg, Markus -## Performance improvement -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// -// This class is the bean specific part of the container managed persistence with JDBC. -// Generated by JOnAS's GenIC tool via Velocity. -// DO NOT EDIT THIS FILE. -// Start: $Id$ - -#set( $hasPkField = $dd.hasPrimaryKeyField() ) -#if ( $hasPkField ) -#set( $pkField = $dd.getPrimaryKeyFieldName() ) -#end -#set( $IsAutomaticPk = $dd.isAutomaticPk() ) -#set( $IsUndefinedPK = $dd.isUndefinedPK() ) - -#* -* The pStmtSetWithAnyField macro allows to generate the pStmt.setXX() method -* of a PreparedStatement for a given field which is be any field. -* This macro is used in ejbCreate() and ejbStore(). -*# -#macro( pStmtSetWithAnyField $field $index ) -#if ( $field.hasNotPrimitiveType() ) - if ( this.$field.getName() == null ) { - pStmt.setNull($index, $field.getSqlTypeName()); - } else { -#end -#if ( $field.hasSerializableType() ) - pStmt.setBytes($index, MarshallTool.toBytes(this.$field.getName())); -#elseif ( $field.hasBigIntegerType() ) - pStmt.setObject($index, new java.math.BigDecimal(this.$field.getName())); -#elseif ( $field.getSqlSetMethod().equals("setObject") ) - pStmt.$field.getSqlSetMethod()($index, this.$field.getName(), $field.getSqlTypeName()); -#else - pStmt.$field.getSqlSetMethod()($index, this.$field.getName()); -#end -#if ( $field.hasNotPrimitiveType() ) - } -#end -#end - -#* -* The pStmtSetWithParam macro allows to generate the pStmt.setXX() method -* of a PreparedStatement for a given parameter. -* This macro is used in ejbFindXXSimple(), ejbFindXXCol() and ejbFindXXEnum(). -*# -#macro( pStmtSetWithParam $param $index ) -#if ( $param.hasNotPrimitiveType() ) - if ( $param.getName() == null ) { - pStmt.setNull($index, $param.getSqlTypeName()); - } else { -#end -#if ( $param.hasSerializableType() ) - pStmt.setBytes($index, MarshallTool.toBytes($param.getName())); -#elseif ( $param.hasBigIntegerType() ) - pStmt.setObject($index, new java.math.BigDecimal($param.getName())); -#elseif ( $param.getSqlSetMethod().equals("setObject") ) - pStmt.$param.getSqlSetMethod()($index, $param.getName(), $param.getSqlTypeName()); -#else - pStmt.$param.getSqlSetMethod()($index, $param.getName()); -#end -#if ( $param.hasNotPrimitiveType() ) - } -#end -#end - -#* -* The pStmtSetWithPkField macro allows to generate the pStmt.setXX() method -* of a PreparedStatement for a given field which is a primary key field. -* This macro is used in ejbFindByPrimaryKey(), ejbRemove() and ejbLoad(). -*# -#macro( pStmtSetWithPkField $field $index ) -#if ( $hasPkField ) -#set( $fName = "pk" ) -#else -#set( $fName = "pk.$field.getName()" ) -#end -#if ( $field.hasSerializableType() ) - pStmt.setBytes($index, MarshallTool.toBytes($fName)); -#elseif ( $field.hasBigIntegerType() ) - pStmt.setObject($index, new java.math.BigDecimal($fName)); -#elseif ( $field.getSqlSetMethod().equals("setObject") ) - pStmt.$field.getSqlSetMethod()($index, $fName, $field.getSqlTypeName()); -#else - pStmt.$field.getSqlSetMethod()($index, $fName); -#end -#end - -#* -* The resultGetWithAnyField macro allows to generate the rs.getXX() method -* of a ResultSet for a given field which is any field. -* This macro is used in ejbLoad(). -*# -#macro( resultGetWithAnyField $field $index ) -#if ( $field.hasSerializableType() ) - this.$field.getName() = ($field.getTypeName()) MarshallTool.fromBytes((byte[])rs.getBytes($index)); -#elseif ( $field.hasBigIntegerType() ) - if ((rs.$field.getSqlGetMethod()($index)==null) || rs.wasNull()) { - this.$field.getName() = null; - } else { - this.$field.getName() = rs.$field.getSqlGetMethod()($index).toBigInteger(); - } -#elseif ( $field.hasJavaLangTypeExceptString() ) - this.$field.getName() = new $field.getTypeName()(rs.$field.getSqlGetMethod()($index)); - if (rs.wasNull()) { - this.$field.getName() = null; - } -#else - this.$field.getName() = rs.$field.getSqlGetMethod()($index); -#end -#end - -#* -* The resultGetWithPkField macro allows to generate the rs.getXX() method -* of a ResultSet for a given field which is a primary key field. -* This macro is used in ejbFindXXSimple(), ejbFindXXCol() and ejbFindXXEnum(). -*# -#macro( resultGetWithPkField $field $index ) -#if ( $hasPkField ) -#set( $fName = "pk" ) -#else -#set( $fName = "pk.$field.getName()" ) -#end -#if ( $field.hasSerializableType() ) - $fName = ($field.getTypeName()) MarshallTool.fromBytes((byte[])rs.getBytes($index)); -#elseif ( $field.hasBigIntegerType() ) - $fName = rs.$field.getSqlGetMethod()($index).toBigInteger(); -#elseif ( $field.hasJavaLangTypeExceptString() ) - $fName = new $field.getTypeName()(rs.$field.getSqlGetMethod()($index)); -#else - $fName = rs.$field.getSqlGetMethod()($index); -#end -#end - -#if ($package.length() != 0) -package $package; -#end - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EJBHome; -import javax.ejb.EJBObject; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; - -import javax.sql.DataSource; - -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.MarshallTool; -import org.objectweb.util.monolog.api.BasicLevel; - - -public class $class extends $bean { - - private JEntityContext ejbContext = null; - private JEntityFactory ejbFactory = null; - private DataSource datasource = null; - -#if ( $IsUndefinedPK ) - // create new field for auto-generate pk type of java.lang.Object - private java.lang.Integer $pkField = null; -#end - - /* - * isModifiedData() method - */ - private boolean isModifiedData() { -#if ( $dd.hasIsModifiedMethod() ) - boolean b = super.$dd.getIsModifiedMethod().getName()(); -#else - boolean b = true; -#end - //TraceEjb.interp.log(BasicLevel.DEBUG, "--> " + b); - return b; - } - - -#foreach ($M in $methodList) - -#if ($M.isEjbSetEntityContext()) - /* - * setEntityContext(javax.ejb.EntityContext) method - */ - public void setEntityContext(javax.ejb.EntityContext p1) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - this.ejbContext = (JEntityContext)p1; - this.ejbFactory = this.ejbContext.getEntityFactory(); - this.datasource = (DataSource) this.ejbFactory.getDataSource(); - super.setEntityContext(p1); - } - -#elseif ($M.isEjbCreate()) - /* - * ejbCreate(.....) method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) - throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - // Container-managed fields must be set to the Java language default values -#foreach ($F in $fieldList) - this.$F.getName() = $F.getDefaultValue(); -#end - $pk pk; - super.$M.getName()($M.getActualParameters()); -#if ($IsUndefinedPK || $IsAutomaticPk) - // Only type Integer is valid - pk = new Integer(ejbFactory.calculateAutomaticPk()); - this.$pkField = pk; -#else - #if ( $hasPkField ) - // Initialize the pk with the primkey-field - pk = this.$pkField; - #else - // Create the pk and initialise all its fields - pk = new $pk(); - #foreach ($F in $fieldPkList) - pk.$F.getName() = this.$F.getName(); - #end - #end -#end - - Connection conn = null; - PreparedStatement pStmt = null; - try { - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($F in $fieldList) -#pStmtSetWithAnyField( $F $velocityCount ) -#end - pStmt.executeUpdate(); - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to create bean in database", e); - throw new CreateException(e.toString()); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejb$M.getCapName()", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejb$M.getCapName()", - ignore); - } - } - } - - return pk; - - } - -#elseif ($M.isFinderByPk()) - /* - * ejbFindByPrimaryKey(...) method - */ - public $pk ejbFindByPrimaryKey($pk pk) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - Connection conn = null; - PreparedStatement pStmt = null; - try { - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($F in $fieldPkList) -#pStmtSetWithPkField( $F $velocityCount) -#end - ResultSet rs = pStmt.executeQuery(); - if (rs.next() == false) { - //TraceEjb.interp.log(BasicLevel.DEBUG, "object not found in database (ejbFindByPrimaryKey("+pk.toString()+"))"); - throw new ObjectNotFoundException("Object not found in database (ejbFindByPrimaryKey("+pk.toString()+"))"); - } - } catch (ObjectNotFoundException oe) { - throw oe; - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to find bean from database in ejb$M.getCapName()", e); - throw new FinderException("Failed to find bean from database in ejb$M.getCapName()"); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception i) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejb$M.getCapName()", i); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejb$M.getCapName()", ignore); - } - } - } - return pk; - } - -#elseif ($M.isFinderSimple()) - /* - * ejbFindXXX(...) method returning only 1 PK - */ - public $pk ejb$M.getCapName()($M.getFormalParameters()) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#if ( $hasPkField ) - $pk pk; -#else - $pk pk = new $pk(); -#end - Connection conn = null; - PreparedStatement pStmt = null; - try { - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($P in $M.getParamWhereList()) -#pStmtSetWithParam( $P $velocityCount ) -#end - ResultSet rs = pStmt.executeQuery(); - if (rs.next() == false) { - //TraceEjb.interp.log(BasicLevel.DEBUG, "object not found in database"); - throw new ObjectNotFoundException("Object not found in database in ejb$M.getCapName()"); - } -#foreach ($F in $fieldPkList) -#resultGetWithPkField( $F $velocityCount) -#end - if (rs.next()) { - //TraceEjb.interp.log(BasicLevel.DEBUG, "several objects found in database"); - throw new FinderException("There is more than one object in response to the ejb${M.getCapName()} single-object finder"); - } - } catch (ObjectNotFoundException oe) { - throw oe; - } catch (FinderException oe) { - throw oe; - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to find bean from database in ejb$M.getCapName()", e); - throw new FinderException("Failed to find bean from database in ejb$M.getCapName()"); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejb$M.getCapName()", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejb$M.getCapName()", - ignore); - } - } - } - return pk; - } - -#elseif ($M.isFinderEnum() || $M.isFinderCol()) - /* - * ejbFindXXX(...) method returning a java.util.Enumeration or a java.util.Collection - */ - public $M.getReturnType() ejb$M.getCapName()($M.getFormalParameters()) - throws FinderException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - Collection pkC = new ArrayList(); - Connection conn = null; - PreparedStatement pStmt = null; - try { - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($P in $M.getParamWhereList()) -#pStmtSetWithParam( $P $velocityCount ) -#end - ResultSet rs = pStmt.executeQuery(); - while (rs.next()) { -#if ( $hasPkField ) - $pk pk; -#else - $pk pk = new $pk(); -#end -#foreach ($F in $fieldPkList) -#resultGetWithPkField( $F $velocityCount) -#end - pkC.add(pk); - } - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to find beans from database in ejb$M.getCapName()", e); - throw new FinderException("Failed to find beans from database in ejb$M.getCapName()"); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejb$M.getCapName()", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejb$M.getCapName()", - ignore); - } - } - } -#if ($M.isFinderEnum()) - return Collections.enumeration(pkC); -#else - return pkC; -#end - } - -#elseif ($M.isEjbRemove()) - /* - * ejbRemove() method - */ - public void ejbRemove() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - super.ejbRemove(); - Connection conn = null; - PreparedStatement pStmt = null; - try { - $pk pk = ($pk) this.ejbContext.getPrimaryKey(); - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($F in $fieldPkList) -#pStmtSetWithPkField( $F $velocityCount) -#end - pStmt.executeUpdate(); - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to delete bean in database", e); -#if ( $M.getExceptionList().indexOf("RemoveException") != -1 ) - throw new RemoveException(e.getMessage()); -#else - throw new EJBException(e.getMessage()); -#end - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejbRemove", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejbRemove", - ignore); - } - } - } - } - -#elseif ($M.isEjbLoad()) - /* - * ejbLoad() method - */ - public void ejbLoad() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - Connection conn = null; - PreparedStatement pStmt = null; - try { - $pk pk = ($pk) this.ejbContext.getPrimaryKey(); - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($F in $fieldPkList) -#pStmtSetWithPkField( $F $velocityCount) -#end - ResultSet rs = pStmt.executeQuery(); - if (rs.next() == false) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to load bean from database"); - throw new EJBException("Failed to load bean from database"); - } -#foreach ($F in $fieldList) -#resultGetWithAnyField( $F $velocityCount ) -#end - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to load bean from database", e); - throw new EJBException(e); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejbLoad", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejbLoad", - ignore); - } - } - } - super.ejbLoad(); - } - -#elseif ($M.isEjbStore()) - /* - * ejbStore() method - */ - public void ejbStore() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - if (this.isModifiedData()) { - super.ejbStore(); -#if ($fieldNoPkList.size() > 0) - Connection conn = null; - PreparedStatement pStmt = null; - try { - $pk pk = ($pk) this.ejbContext.getPrimaryKey(); - conn = this.datasource.getConnection(); - pStmt = conn.prepareStatement("$M.getSqlStmt()"); -#foreach ($F in $fieldNoPkList) -#pStmtSetWithAnyField( $F $velocityCount) -#end -#foreach ($F in $fieldPkList) -#set( $index = $fieldNoPkList.size() + $velocityCount ) -#pStmtSetWithPkField( $F $index) -#end - pStmt.executeUpdate(); - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to store bean to database", e); - throw new EJBException(e); - } finally { - if (pStmt != null) { - try { - pStmt.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the PreparedStatement in ejbStore", - ignore); - } - } - if (conn != null) { - try { - conn.close(); - } catch (Exception ignore) { - TraceEjb.interp.log(BasicLevel.ERROR,"failed to close the Connection in ejbStore", - ignore); - } - } - } -#end - } - } - -#end -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHandle.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHandle.vm deleted file mode 100644 index 47b626b098..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHandle.vm +++ /dev/null @@ -1,80 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// -// This class is the bean specific part of org.ow2.jonas.lib.ejb21.JEntityHandle. -// Generated by JOnAS's GenIC tool via Velocity. -// DO NOT EDIT THIS FILE. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; -import javax.ejb.HomeHandle; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.ejb21.JEntityHome; -import org.ow2.jonas.lib.ejb21.JEntityHandle; - -import org.ow2.carol.rmi.exception.RmiUtility; - - -public class $class extends JEntityHandle { - - - public $class($remote_wrp ejbobject) { - super(ejbobject); - try { - pk = ($pk)ejbobject.getPrimaryKey(); - } catch (Exception e) { - pk = null; - } - } - - public EJBObject getEJBObject() throws RemoteException { - - #beforeThrowRemoteException() - - $remote ejbobj = null; - try { - $home h = ($home)PortableRemoteObject.narrow(homehandle.getEJBHome(),${home}.class); - ejbobj = h.findByPrimaryKey(($pk)pk); - } catch (Exception e) { - throw new RemoteException("${class}.getEJBObject(): "+e, e); - } - return ejbobj ; - - #afterThrowRemoteException() - - } - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHome.vm deleted file mode 100644 index e4059ea708..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityHome.vm +++ /dev/null @@ -1,787 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2006 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JEntityHome -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.Object; -import java.lang.RuntimeException; -import java.rmi.RemoteException; -import java.rmi.AccessException; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Vector; - -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.Handle; -import javax.ejb.RemoveException; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.ow2.carol.util.configuration.ConfigurationRepository; - -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.JEntityHandle; -import org.ow2.jonas.lib.ejb21.JEntityHome; -import org.ow2.jonas.lib.ejb21.JEntityRemote; -import org.ow2.jonas.lib.ejb21.JEntitySwitch; -import org.ow2.jonas.lib.ejb21.ha.JRepEntityHome; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.lib.ejb21.CollectionEnum; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.svc.JHandleIIOP; -import org.objectweb.util.monolog.api.BasicLevel; -#if ($EntityCMP2.booleanValue()) -import org.objectweb.jorm.api.PException; -import org.objectweb.jorm.api.PClassMapping; -import org.objectweb.jorm.naming.api.PName; -import org.ow2.jonas.lib.ejb21.jorm.Coder; -import org.ow2.jonas.lib.ejb21.jorm.PObject; -import org.ow2.jonas.lib.ejb21.jorm.PObjectHome; - -public class $class -#if ($isClusterReplicated) - extends JRepEntityHome -#else - extends JEntityHome -#end - implements Coder, PObjectHome, $home { -#else - -public class $class -#if ($isClusterReplicated) - extends JRepEntityHome -#else - extends JEntityHome -#end - implements $home { - -#end - - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - /** - * Created by JEntityFactory (by newInstance) - */ - public $class(EntityDesc dd, JEntityFactory bf) throws RemoteException { - - super(dd, bf); - - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - bs = ef.getJEntitySwitch(); - bctx = ef.getJContext(bs); - bctx.setEntitySwitch(bs); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - - rctx.bmcalled = true; - #if ($EntityCMP2.booleanValue()) - Object pk = b._ejb$M.getCapName()($M.getActualParameters()); - #else - Object pk = b.ejb$M.getCapName()($M.getActualParameters()); - #end - bctx.setActive(); - boolean pkadded = ef.rebindEJB(rctx.currTx, bctx, pk); - bs.bindICtx(rctx.currTx, bctx); - mapped = true; - bctx.setNewInstance(); - try { - b.ejbPost$M.getCapName()($M.getActualParameters()); - } catch (EJBException e) { - if (pkadded) { - bs.forceDiscardICtx(rctx.currTx); - bctx = null; - } - throw e; - } - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - - return ($remote) bs.getRemote(); - #afterThrowRemoteException() - - } - -#elseif ($M.isFinderCol()) - - /** - * Finder method returning a Collection - */ - public Collection $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - Vector v = new Vector(); - Collection pkl; - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bctx.setFinding(); - rctx.bmcalled = true; - pkl = b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - Iterator pki = pkl.iterator(); - while (pki.hasNext()) { - - Object _pk = pki.next(); - - #if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) _pk; - if ((pn == null) || (pn.isNull())) { - v.addElement(null); - } else - #end - { - bs = ef.getEJB(_pk); - if (!mapped) { - mapped = bs.tryBindICtx(rctx.currTx, bctx, false); - } - v.addElement(bs.getRemote()); - } - } - - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return v; - - #afterThrowRemoteException() - - } - -#elseif ($M.isFinderEnum()) - - /** - * Finder method returning an Enumeration - */ - public Enumeration $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - CollectionEnum v = new CollectionEnum(); - boolean mapped = false; - Enumeration pkl; - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bctx.setFinding(); - rctx.bmcalled = true; - pkl = b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - while (pkl.hasMoreElements()) { - Object _pk = pkl.nextElement(); - - #if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) _pk; - if ((pn == null) || (pn.isNull())) { - v.addElement(null); - } else - #end - { - bs = ef.getEJB(_pk); - if (!mapped) { - mapped = bs.tryBindICtx(rctx.currTx, bctx, false); - } - v.addElement(bs.getRemote()); - } - } - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return v; - - #afterThrowRemoteException() - } - -#elseif ($M.isFinderSimple()) - - /** - * finder method returning only 1 PK - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bs = ef.getJEntitySwitch(); - bctx.setEntitySwitch(bs); - bctx.setFinding(); - rctx.bmcalled = true; - Object pk = b.ejb$M.getCapName()($M.getActualParameters()); - #if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) pk; - if ((pn == null) || (pn.isNull())) { - return null; - } - #end - bctx.setActive(); - JEntitySwitch old = ef.existEJB(pk, bs, false); - if (old != null) { - bs = old; - bctx.setEntitySwitch(bs); - } - mapped = bs.tryBindICtx(rctx.currTx, bctx, true); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - - return ($remote) bs.getRemote(); - - #afterThrowRemoteException() - } - -#elseif ($M.isFinderByPk()) - - /** - * findByPrimaryKey - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bs = ef.getJEntitySwitch(); - bctx.setEntitySwitch(bs); - bctx.setFinding(); - rctx.bmcalled = true; - Object pk = -#if ($EntityCMP2.booleanValue()) - decode($M.getActualParameters()); -#else - $M.getActualParameters(); -#end - JEntitySwitch old = ef.existEJB(pk, bs, true); - if (old != null) { - bs = old; - bctx.setEntitySwitch(bs); - } else { - try { - pk = b.ejb$M.getCapName()(($pk) $M.getActualParameters()); - } catch (FinderException e) { - bs.forceDiscardICtx(rctx.currTx); - throw e; - } - ef.startEJB(pk); - } - bctx.setActive(); - mapped = bs.tryBindICtx(rctx.currTx, bctx, true); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; -#if ($EntityCMP2.booleanValue()) - } catch (org.objectweb.jorm.api.PException e) { - rctx.sysExc = e; - throw new RemoteException("decoding PK failed", e); -#end - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - - return ($remote) bs.getRemote(); - - #afterThrowRemoteException() - } - -#elseif ($M.isRemovePk()) - - /** - * Remove by PK - * @throws RemoveException - */ - public void remove(Object p1) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - ef.dummyFinderException(true); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - - #if ($EntityCMP2.booleanValue()) - Object pk = decode(($pk) p1); - bs = ef.getEJB(pk); - bctx.setEntitySwitch(bs); - b.ejbFindByPrimaryKey((PName)pk); - #else - bs = ef.getEJB(p1); - bctx.setEntitySwitch(bs); - b.ejbFindByPrimaryKey(($pk) p1); - #end - - bctx = bs.getICtx(rctx.currTx, bctx); - // Must set this before setRemove() because exception may - // occur in ejbRemove, and in that case, we must keep the context. - mapped = true; - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - #if ($EntityCMP2.booleanValue()) - } catch (PException e) { - rctx.sysExc = e; - throw new RemoteException("JORM PException thrown", e); - #end - } catch (FinderException e) { - rctx.sysExc = e; - throw new RemoteException(e.toString()); - } finally { - if (!mapped && bctx != null) { - // release context in case of exception. - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - - #afterThrowRemoteException() - - } - -#elseif ($M.isRemoveHandle()) - - /** - * remove by Handle - * @throws RemoveException - */ - public void remove(Handle p1) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - try { - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - Object pk = null; - checkSecurity(ejbInv); - - // Get the PK embedded inside the Handle - String protocol = ConfigurationRepository.getCurrentConfiguration().getProtocol().getName(); - - //TraceEjb.interp.log(BasicLevel.DEBUG, "Current protocol=" + protocol); - #if ($EntityCMP2.booleanValue()) - if (protocol.equals("iiop")) { - pk = decode(($pk) ((JHandleIIOP) p1).getEJBObject().getPrimaryKey()); - } else { - pk = decode(($pk) ((JEntityHandle) p1).getPK()); - } - #else - if (protocol.equals("iiop")) { - pk = ((JHandleIIOP) p1).getEJBObject().getPrimaryKey(); - } else { - pk = ((JEntityHandle) p1).getPK(); - } - #end - - bs = ef.getEJB(pk); - bctx = bs.getICtx(rctx.currTx, bctx); - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException(e.getMessage()); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - #if ($EntityCMP2.booleanValue()) - } catch (PException e) { - rctx.sysExc = e; - throw new RemoteException("JORM PException thrown", e); - #end - } finally { - postInvoke(rctx); - } - - #afterThrowRemoteException() - - } - -#else - - /** - * Home Method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) - - #if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() - #end - { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntityFactory ef = (JEntityFactory) bf; - - #if ($M.getReturnType() != "void") - $M.getReturnType() result; - #end - - JEntityContext bctx = null; - try { - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - - #if ($M.getReturnType() != "void") - result = - #end - b.ejbHome$M.getCapName()($M.getActualParameters()); - - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - if (bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - - #if ($M.getReturnType() != "void") - return result; - #end - - #afterThrowRemoteException() - - } - -#end - -#end - - public JEntityRemote createRemoteObject() throws RemoteException { - - #beforeThrowRemoteException() - - return new $remote_wrp((JEntityFactory)bf); - - #afterThrowRemoteException() - - } - - -#if ($EntityCMP2.booleanValue()) - - /** - * CMP2 methods : - * ============== - * In our case it has been choosen that the container (the generic part) - * manages PName. This is the generated objects which do the translation - * between PName and PK - */ - - // IMPLEMENTATION OF THE Coder INTERFACE // - /** - * This method build a PName with the primary key specifed in parameter. - * To build the pname the PNamingContext associated to the bean is used. - * Futhermore the PKFieldExtractor class is used as a specific PNameGetter - * in case of the PName is composite (several fields). - */ - public PName decode(Object pk) - throws PException, UnsupportedOperationException { - if (pk == null) { - return ((PClassMapping) bf).getPBinder().getNull(); - } - -#**##if($pkIsUserClass.booleanValue()) - return ((PClassMapping) bf).getPBinder().decodeAbstract( - new PkFieldExtractor(($pk) pk), null); -#**##else ## Pk is a java.lang class (String, Long, ...) - return ((PClassMapping) bf).getPBinder().$pkDecodeMethod; -#**##end - - } - - /** - * This method build a primary key with the PName specifed in parameter. - * To build the primary key the PNamingContext associated to the bean is - * used. In case of the PName is composite (several fields), the - * encodeAbstract must return a specific PNameGetter. - */ - public Object encode(PName pn) - throws PException, UnsupportedOperationException { - if (pn==null || pn.isNull()) { - return null; - } - -#**##if($pkIsUserClass.booleanValue()) - $pk pk = new $pk(); - ${dd.getJormPNameGetterClassName()} png = (${dd.getJormPNameGetterClassName()}) - ((PClassMapping) bf).getPBinder().encodeAbstract(pn); -#* *##foreach ($pkf in $fieldPkList) -#* *##if (!$pkf.isMustBeConvert()) - pk.${pkf.getName()} = png.pnGet${pkf.getNameUpperFirst()}(null); -#* *##else - pk.${pkf.getName()} = (${pkf.getTypeName()})${pkf.getConvertClassName()}.toMemory((png.pnGet${pkf.getNameUpperFirst()}(null))); -#* *##end - -#* *##end - return pk; -#**##else ## Pk is a java.lang class (String, Long, ...) - return $pkMappingToMemoryMethod(((PClassMapping) bf).getPBinder().$pkEncodeMethod(pn)); -#**##end - - } - -#**##if($pkIsUserClass.booleanValue()) - /** - * This class is used to decode a primary key into a PName. It is - * specilized to the name structure - */ - private class PkFieldExtractor implements ${dd.getJormPNameGetterClassName()} { - - $pk pk; - public PkFieldExtractor($pk pk) { - this.pk = pk; - } -#* *##foreach ($pkf in $fieldPkList) - public ${pkf.getJormTypeName()} pnGet${pkf.getNameUpperFirst()}(Object ctx) { -#* *##if (!$pkf.isMustBeConvert()) - return pk.${pkf.getName()}; -#* *##else - return (${pkf.getJormTypeName()})${pkf.getConvertClassName()}.toStorage((pk.${pkf.getName()})); -#* *##end - } -#* *##end - } -#**##end - - // IMPLEMENTATION OF THE PObjectHome INTERFACE // - - public PObject getPObject(PName pn) { - return (PObject) ((JEntityFactory) bf).getEJB(pn).getRemote(); - } -#end ##EntityCMP2 - -} -// End: $Id$ - diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocal.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocal.vm deleted file mode 100644 index d4015e8afb..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocal.vm +++ /dev/null @@ -1,315 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JEntityLocal -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.JEntityLocal; -import org.ow2.jonas.lib.ejb21.ha.JRepEntityLocal; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.JWrapper; -import org.objectweb.util.monolog.api.BasicLevel; -#if ($EntityCMP2.booleanValue()) -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.lib.ejb21.jorm.PObject; -import org.ow2.jonas.lib.ejb21.jorm.Coder; -import org.objectweb.jorm.naming.api.PName; - -public class $class -#if ($isClusterReplicated) - extends JRepEntityLocal -#else - extends JEntityLocal -#end - implements PObject, $local -#* *##if ($dd.needJormCoherenceHelper())## - , ${dd.getJormCoherenceHelperFQItfName()} -#* *##end## - { -#else - -public class $class extends JEntityLocal implements $local { -#end - /** - * Constructor - */ - public $class(JEntityFactory bf) { - super(bf); - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoveException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - JEntityContext bctx = null; - try { - // false -> avoids checking reentrant in cascade delete. - // TODO find a better way to allow this. - bctx = bs.getICtx(rctx.currTx, false); - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { -#if ($isClusterReplicated) - postInvoke(rctx, bctx); -#else - postInvoke(rctx); -#end - } - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#if ($M.getReturnType() != "void") - $M.getReturnType() result; -#end - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntityContext bctx = null; - try { - bctx = bs.getICtx(rctx.currTx, true); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; -#if ($M.getReturnType() != "void") - result = -#end - b.$M.getName()($M.getActualParameters()); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { -#if ($isClusterReplicated) - postInvoke(rctx, bctx); -#else - postInvoke(rctx); -#end - } -#if ($M.getReturnType() != "void") - return result; -#end - } - -#end ##else - -#end ##foreach - - JWrapper jwrapper = null; - public JWrapper getJWrapper() { - if (jwrapper == null) { - String jndiname = bf.getLocalHome().getJndiLocalName(); - Object pk = getPrimaryKey(); - jwrapper = new JWrapper(JWrapper.LOCAL_ENTITY, jndiname, pk); - } - - return jwrapper; - } - -#if ($EntityCMP2.booleanValue()) - /** - * CMP2 methods : - * ============== - * In our case it has been choosen that the container (the generic part) - * manages PName. This is the generated objects which do the translation - */ - - Object pk = null; - - /** - * The getPrimaryKey method is overrided in order to translate the PName - * managed by the container, into a PK. - */ - public Object getPrimaryKey() { - try { - if (pk == null) { - pk = ((Coder) getEJBLocalHome()).encode((PName) super.getPrimaryKey()); - } - return pk; - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR, - "Impossible to translate the PName in Primary key", e); - throw new EJBException( - "Impossible to translate the PName in Primary key", e); - } - } - - // IMPLEMENTATION OF THE PObject INTERFACE // - - public PName getPName() { - return (PName) super.getPrimaryKey(); - } - -############################################################################### -############################################################################### -## -## Iterate over the CMR field in order to add the methods which are used to -## maintain the coherence of relations. There are two macro which avoid to -## duplicate the source code. -## -#macro( beforeRecall ) - RequestCtx rctx = preInvoke(MethodDesc.TX_SUPPORTS); - try { - JEntityContext bctx = bs.getICtx(rctx.currTx, false); - EJBInvocation ejbInv = new EJBInvocation(); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; -#end## - -#macro( afterRecall ) - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - postInvoke(rctx); - } -#end - -#* *##foreach ($F in $cmrList) -#* *##if (!$F.isMMu() && !$F.isMOu())## - // IMPLEMENTATION OF THE ${F.getHelperFQClassName()} INTERFACE // - //-------------------------------------------------------------// -################################################ -#* *##if ($F.getRsr().isTargetMultiple()) - public ${F.getTypeName()} jonasGet${F.getUFLName()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - ${F.getTypeName()} result = null; -#beforeRecall() - result = b.jonasGet${F.getUFLName()}(); -#afterRecall() - return result; - } - - public void jonasSet${F.getUFLName()}(${F.getTypeName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecall() - b.jonasSet${F.getUFLName()}(val); -#afterRecall() - } - - public void jonasAdd${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecall() - b.jonasAdd${F.getUFLName()}(bean); -#afterRecall() - } - - public void jonasRemove${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecall() - b.jonasRemove${F.getUFLName()}(bean); -#afterRecall() - } -## -#* *##else## simple CMR field -## - public ${F.getOppositeHelperFQClassName()} jonasGet${F.getUFLName()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - ${F.getOppositeHelperFQClassName()} result = null; -#beforeRecall() - result = b.jonasGet${F.getUFLName()}(); -#afterRecall() - return result; - } - - public void jonasSet${F.getUFLName()}(${F.getOppositeHelperFQClassName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecall() - b.jonasSet${F.getUFLName()}(val); -#afterRecall() - } -#* *##end## multivalued CMR field - - -#* *##end## -#* *##end## foreach CMR field -#end -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocalHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocalHome.vm deleted file mode 100644 index 88c763580d..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityLocalHome.vm +++ /dev/null @@ -1,659 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2006 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JEntityLocalHome -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.Object; -import java.lang.RuntimeException; -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Vector; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntityLocalHome; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.JEntityLocal; -import org.ow2.jonas.lib.ejb21.JEntitySwitch; -import org.ow2.jonas.lib.ejb21.ha.JRepEntityLocalHome; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.lib.ejb21.CollectionEnum; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.objectweb.util.monolog.api.BasicLevel; -#if ($EntityCMP2.booleanValue()) -import org.objectweb.jorm.api.PClassMapping; -import org.objectweb.jorm.api.PException; -import org.objectweb.jorm.naming.api.PName; -import org.ow2.jonas.lib.ejb21.jorm.Coder; -import org.ow2.jonas.lib.ejb21.jorm.PObject; -import org.ow2.jonas.lib.ejb21.jorm.PObjectHome; - -public class $class -#if ($isClusterReplicated) - extends JRepEntityLocalHome -#else - extends JEntityLocalHome -#end - implements Coder, PObjectHome, $localhome { -#else - public class $class -#if ($isClusterReplicated) - extends JRepEntityLocalHome -#else - extends JEntityLocalHome -#end - implements $localhome { -#end - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - public $class(EntityDesc dd, JEntityFactory bf) { - super(dd, bf); - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - bs = ef.getJEntitySwitch(); - bctx = ef.getJContext(bs); - bctx.setEntitySwitch(bs); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; -#if ($EntityCMP2.booleanValue()) - Object pk = b._ejb$M.getCapName()($M.getActualParameters()); -#else - Object pk = b.ejb$M.getCapName()($M.getActualParameters()); -#end - bctx.setActive(); - boolean pkadded = ef.rebindEJB(rctx.currTx, bctx, pk); - bs.bindICtx(rctx.currTx, bctx); - mapped = true; - bctx.setNewInstance(); - try { - b.ejbPost$M.getCapName()($M.getActualParameters()); - } catch (EJBException e) { - if (pkadded) { - bs.forceDiscardICtx(rctx.currTx); - bctx = null; - } - throw e; - } - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } -#if ($isClusterReplicated) - if (mapped && bctx != null) { - replicateCreate(bctx); - } -#end - - return ($local) bs.getLocal(); - } - -#elseif ($M.isFinderCol()) - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - Vector v = new Vector(); - boolean mapped = false; - Collection pkl; - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bctx.setFinding(); - rctx.bmcalled = true; - pkl = b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - Iterator pki = pkl.iterator(); - while (pki.hasNext()) { - Object _pk = pki.next(); -#if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) _pk; - if ((pn == null) || (pn.isNull())) { - v.addElement(null); - } else -#end - { - bs = ef.getEJB(_pk); - if (!mapped) { - mapped = bs.tryBindICtx(rctx.currTx, bctx, false); - } - v.addElement(bs.getLocal()); - } - } - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return v; - } - -#elseif ($M.isFinderEnum()) - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - CollectionEnum v = new CollectionEnum(); - boolean mapped = false; - Enumeration pkl; - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bctx.setFinding(); - rctx.bmcalled = true; - pkl = b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - while (pkl.hasMoreElements()) { - Object _pk = pkl.nextElement(); -#if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) _pk; - if ((pn == null) || (pn.isNull())) { - v.addElement(null); - } else -#end - { - bs = ef.getEJB(_pk); - if (!mapped) { - mapped = bs.tryBindICtx(rctx.currTx, bctx, false); - } - v.addElement(bs.getLocal()); - } - } - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return v; - } - -#elseif ($M.isFinderSimple()) - /** - * finder method returning only 1 PK - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - ef.syncForFind(rctx.currTx); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bs = ef.getJEntitySwitch(); - bctx.setEntitySwitch(bs); - bctx.setFinding(); - rctx.bmcalled = true; - Object pk = b.ejb$M.getCapName()($M.getActualParameters()); -#if ($EntityCMP2.booleanValue()) - // Fix bug #300526 - PName pn = (PName) pk; - if ((pn == null) || (pn.isNull())) { - return null; - } -#end - bctx.setActive(); - JEntitySwitch old = ef.existEJB(pk, bs, false); - if (old != null) { - bs = old; - bctx.setEntitySwitch(bs); - } - mapped = bs.tryBindICtx(rctx.currTx, bctx, true); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return ($local) bs.getLocal(); - } - -#elseif ($M.isFinderByPk()) - /** - * findByPrimaryKey - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - bs = ef.getJEntitySwitch(); - bctx.setEntitySwitch(bs); - bctx.setFinding(); - rctx.bmcalled = true; - Object pk = -#if ($EntityCMP2.booleanValue()) - decode($M.getActualParameters()); -#else - $M.getActualParameters(); -#end - JEntitySwitch old = ef.existEJB(pk, bs, true); - if (old != null) { - bs = old; - bctx.setEntitySwitch(bs); - } else { - try { - pk = b.ejb$M.getCapName()(($pk) $M.getActualParameters()); - } catch (FinderException e) { - bs.forceDiscardICtx(rctx.currTx); - throw e; - } - ef.startEJB(pk); - } - bctx.setActive(); - mapped = bs.tryBindICtx(rctx.currTx, bctx, true); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); -#if ($EntityCMP2.booleanValue()) - } catch (org.objectweb.jorm.api.PException e) { - rctx.sysExc = e; - throw new EJBException("decoding PK failed", e); -#end - } finally { - if (! mapped && bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - return ($local) bs.getLocal(); - } - -#elseif ($M.isRemovePk()) - - /** - * Remove by PK - * @throws RemoveException - */ - public void remove(Object p1) throws $M.getExceptionList() { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntitySwitch bs = null; - JEntityFactory ef = (JEntityFactory) bf; - JEntityContext bctx = null; - boolean mapped = false; - try { - ef.dummyFinderException(true); - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); -#if ($EntityCMP2.booleanValue()) - Object pk = decode(($pk) p1); - bs = ef.getEJB(pk); - bctx.setEntitySwitch(bs); - b.ejbFindByPrimaryKey((PName)pk); -#else - bs = ef.getEJB(p1); - bctx.setEntitySwitch(bs); - b.ejbFindByPrimaryKey(($pk) p1); -#end - bctx = bs.getICtx(rctx.currTx, bctx); - // Must set this before setRemove() because exception may - // occur in ejbRemove, and in that case, we must keep the context. - mapped = true; - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); -#if ($EntityCMP2.booleanValue()) - } catch (PException e) { - rctx.sysExc = e; - throw new EJBException("JORM PException thrown", e); -#end - } catch (FinderException e) { - rctx.sysExc = e; - throw new EJBException(e.toString()); - } finally { - if (!mapped && bctx != null) { - // release context in case of exception. - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } - } - -#else - - /** - * Home Method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntityFactory ef = (JEntityFactory) bf; -#if ($M.getReturnType() != "void") - $M.getReturnType() result; -#end - JEntityContext bctx = null; - try { - bctx = ef.getJContext(null); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; -#if ($M.getReturnType() != "void") - result = -#end - b.ejbHome$M.getCapName()($M.getActualParameters()); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - if (bctx != null) { - ef.releaseJContext(bctx); - } - postInvoke(rctx); - } -#if ($M.getReturnType() != "void") - return result; -#end - } - -#end - -#end - - public JEntityLocal createLocalObject() { - return new $local_wrp((JEntityFactory)bf); - } - -#if ($EntityCMP2.booleanValue()) - /** - * CMP2 methods : - * ============== - * In our case it has been choosen that the container (the generic part) - * manages PName. This is the generated objects which do the translation - * between PName and PK - */ - - // IMPLEMENTATION OF THE Coder INTERFACE // - /** - * This method build a PName with the primary key specifed in parameter. - * To build the pname the PNamingContext associated to the bean is used. - * Futhermore the PKFieldExtractor class is used as a specific PNameGetter - * in case of the PName is composite (several fields). - */ - public PName decode(Object pk) - throws PException, UnsupportedOperationException { - if (pk == null) { - return ((PClassMapping) bf).getPBinder().getNull(); - } -#**##if($pkIsUserClass.booleanValue()) - return ((PClassMapping) bf).getPBinder().decodeAbstract( - new PkFieldExtractor(($pk) pk), null); -#**##else ## Pk is a java.lang class (String, Long, ...) - return ((PClassMapping) bf).getPBinder().$pkDecodeMethod; -#**##end - } - - /** - * This method build a primary key with the PName specifed in parameter. - * To build the primary key the PNamingContext associated to the bean is - * used. In case of the PName is composite (several fields), the - * encodeAbstract must return a specific PNameGetter. - */ - public Object encode(PName pn) - throws PException, UnsupportedOperationException { - if (pn==null || pn.isNull()) { - return null; - } -#**##if($pkIsUserClass.booleanValue()) - $pk pk = new $pk(); - ${dd.getJormPNameGetterClassName()} png = (${dd.getJormPNameGetterClassName()}) - ((PClassMapping) bf).getPBinder().encodeAbstract(pn); -#* *##foreach ($pkf in $fieldPkList) -#* *##if (!$pkf.isMustBeConvert()) - pk.${pkf.getName()} = png.pnGet${pkf.getNameUpperFirst()}(null); -#* *##else - pk.${pkf.getName()} = (${pkf.getTypeName()})${pkf.getConvertClassName()}.toMemory((png.pnGet${pkf.getNameUpperFirst()}(null))); -#* *##end -#* *##end - return pk; -#**##else ## Pk is a java.lang class (String, Long, ...) - return $pkMappingToMemoryMethod(((PClassMapping) bf).getPBinder().$pkEncodeMethod(pn)); -#**##end - } - -#**##if($pkIsUserClass.booleanValue()) - /** - * This class is used to decode a primary key into a PName. It is - * specilized to the name structure - */ - private class PkFieldExtractor implements ${dd.getJormPNameGetterClassName()} { - $pk pk; - public PkFieldExtractor($pk pk) { - this.pk = pk; - } -#* *##foreach ($pkf in $fieldPkList) - public ${pkf.getJormTypeName()} pnGet${pkf.getNameUpperFirst()}(Object ctx) { -#* *##if (!$pkf.isMustBeConvert()) - return pk.${pkf.getName()}; -#* *##else - return (${pkf.getJormTypeName()})${pkf.getConvertClassName()}.toStorage((pk.${pkf.getName()})); -#* *##end - } -#* *##end -} -#**##end - - // IMPLEMENTATION OF THE PObjectHome INTERFACE // - - public PObject getPObject(PName pn) { - return (PObject) ((JEntityFactory) bf).getEJB(pn).getLocal(); - } -#end ##EntityCMP2 - } -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityRemote.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityRemote.vm deleted file mode 100644 index 8fd45be6f9..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JEntityRemote.vm +++ /dev/null @@ -1,400 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JEntityRemote -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.rmi.RemoteException; -import java.rmi.AccessException; - -import javax.ejb.Handle; -import javax.ejb.RemoveException; -import javax.ejb.EJBException; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.ow2.carol.util.configuration.ConfigurationRepository; - -import org.ow2.jonas.lib.ejb21.JEntityContext; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.JEntityRemote; -import org.ow2.jonas.lib.ejb21.ha.JRepEntityRemote; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.svc.JHandleIIOP; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -#if ($EntityCMP2.booleanValue()) -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.lib.ejb21.jorm.PObject; -import org.ow2.jonas.lib.ejb21.jorm.Coder; -import org.objectweb.jorm.naming.api.PName; - - - -public class $class -#if ($isClusterReplicated) - extends JRepEntityRemote -#else - extends JEntityRemote -#end - implements PObject, $remote -#* *##if ($dd.needJormCoherenceHelper())## - , ${dd.getJormCoherenceHelperFQItfName()} -#* *##end## - { -#else - -public class $class -#if ($isClusterReplicated) - extends JRepEntityRemote -#else - extends JEntityRemote -#end - implements $remote { -#end - - /** - * Constructor - */ - public $class(JEntityFactory bf) throws RemoteException { - - super(bf); - } - - /** - * EJBObject interface : getHandle. - * If Handle not build yet, create a ne one before. - */ - public Handle getHandle() { - String protocol = ConfigurationRepository.getCurrentConfiguration().getProtocol().getName(); - //TraceEjb.interp.log(BasicLevel.DEBUG, "Current protocol = " + protocol); - - if (protocol.equals("iiop")) { - return new JHandleIIOP(this); - } else { - return new $handle(this); - } - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoteException, RemoveException { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - if (hasResponse()) { - cmilogger.log(BasicLevel.DEBUG, "Response found"); - // Obtain the response associated with the request - // and delete the request because the method is going to return - Object response = getResponse(); - return; - } else { - cmilogger.log(BasicLevel.DEBUG, "Response not found"); - } -/* **********************END OF REPLICATION CODE************************ */ -#end - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - JEntityContext bctx = null; - try { - bctx = bs.getICtx(rctx.currTx, true); - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // There is no response to the client (void parameter needed by HA) - postInvoke(rctx, bctx, null); -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - } - - #afterThrowRemoteException() - - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - #if ($M.getReturnType() != "void") - $M.getReturnType() result = $M.getDefaultValue(); - #end - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - if (hasResponse()) { - cmilogger.log(BasicLevel.DEBUG, "Response found"); - // Obtain the response associated with the request - // and delete the request because the method is going to return - Object response = getResponse(); - #if ($M.getReturnType() == "void") - cmilogger.log(BasicLevel.DEBUG, "\tResponse void"); - return; - #else - cmilogger.log(BasicLevel.DEBUG, "\tResponse not void"); - #if ($M.getWrapperType() != "") - return ($M.getReturnType()) (($M.getWrapperType())response).$M.getReturnType()Value(); - #else - return ($M.getReturnType()) response; - #end - #end - } else { - cmilogger.log(BasicLevel.DEBUG, "Response not found"); - } -/* **********************END OF REPLICATION CODE************************ */ -#end - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - JEntityContext bctx = null; - try { - bctx = bs.getICtx(rctx.currTx, true); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - #if ($M.getReturnType() != "void") - result = - #end - b.$M.getName()($M.getActualParameters()); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // If exists, pass the return type to postInvoke (Needed by HA) - #if ($M.getReturnType() != "void") - #if ($M.getWrapperType() != "") - postInvoke(rctx, bctx, new $M.getWrapperType()(result)); - #else - postInvoke(rctx, bctx, result); - #end - #else - postInvoke(rctx, bctx, null); - #end -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - } - #if ($M.getReturnType() != "void") - return result; - #end - - #afterThrowRemoteException() - } - -#end - -#end - -#if ($EntityCMP2.booleanValue()) - /** - * CMP2 methods : - * ============== - * In our case it has been choosen that the container (the generic part) - * manages PName. This is the generated objects which do the translation - */ - - /** - * The getPrimaryKey method is overrided in order to translate the PName - * managed by the container, into a PK. - */ - public Object getPrimaryKey() { - try { - return ((Coder) getEJBHome()) - .encode((PName) super.getPrimaryKey()); - } catch (Exception e) { - TraceEjb.interp.log(BasicLevel.ERROR, - "Impossible to translate the PName in Primary key", e); - throw new EJBException( - "Impossible to translate the PName in Primary key", e); - } - } - - // IMPLEMENTATION OF THE PObject INTERFACE // - - public PName getPName() { - return (PName) super.getPrimaryKey(); - } - // Management of the CMR coherence // - //---------------------------------// -############################################################################### -############################################################################### -## -## Iterate over the CMR field in order to add the methods which are used to -## maintain the coherence of relations. There are two macro which avoid to -## duplicate the source code. -## -#macro( beforeRecallr ) - RequestCtx rctx = null; - try { - rctx = preInvoke(MethodDesc.TX_SUPPORTS); - } catch (RemoteException e) { - throw new EJBException("Remote Exception raised:", e); - } - try { - JEntityContext bctx = bs.getICtx(rctx.currTx, false); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - rctx.bmcalled = true; -#end## -#macro( afterRecallr ) - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - try { - postInvoke(rctx); - } catch (RemoteException e) { - throw new EJBException("Remote Exception raised:", e); - } - } -#end -#* *##foreach ($F in $cmrList) -#* *##if (!$F.isMMu() && !$F.isMOu())## - // Methods to manage the coherence of the ${F.getName()} CMR field // - //------------------------------------------------------------// -################################################ -#* *##if ($F.getRsr().isTargetMultiple()) - public ${F.getTypeName()} jonasGet${F.getUFLName()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - ${F.getTypeName()} result = null; -#beforeRecallr() - result = b.jonasGet${F.getUFLName()}(); -#afterRecallr() - return result; - } - - public void jonasSet${F.getUFLName()}(${F.getTypeName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecallr() - b.jonasSet${F.getUFLName()}(val); -#afterRecallr() - } - - public void jonasAdd${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecallr() - b.jonasAdd${F.getUFLName()}(bean); -#afterRecallr() - } - - public void jonasRemove${F.getUFLName()}(${F.getOppositeHelperFQClassName()} bean) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecallr() - b.jonasRemove${F.getUFLName()}(bean); -#afterRecallr() - } - -## -#* *##else## simple CMR field -## - public ${F.getOppositeHelperFQClassName()} jonasGet${F.getUFLName()}() { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - ${F.getOppositeHelperFQClassName()} result = null; -#beforeRecallr() - result = b.jonasGet${F.getUFLName()}(); -#afterRecallr() - return result; - } - - public void jonasSet${F.getUFLName()}(${F.getOppositeHelperFQClassName()} val) { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#beforeRecallr() - b.jonasSet${F.getUFLName()}(val); -#afterRecallr() - } -#* *##end## multivalued CMR field - - -#* *##end## -#* *##end## foreach CMR field -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpoint.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpoint.vm deleted file mode 100644 index 7ab70c78e7..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpoint.vm +++ /dev/null @@ -1,126 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Guillaume Sauthier -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JServiceEndpoint -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.rmi.RemoteException; - -import javax.ejb.EJBException; -import javax.ejb.RemoveException; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.ejb21.JServiceEndpoint; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class $class extends JServiceEndpoint implements $serviceEndpoint { - - /** - * Constructor - */ - public $class(JStatelessFactory sf) throws RemoteException { - super(sf); - } - -#foreach ($M in $methodList) - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) - #if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() - #end - - { - - //logger.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - #if ($M.getReturnType() != "void") - $M.getReturnType() result; - #end - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke($M.getTxAttribute()); - try { - rctx.ejbContext = bs.getICtx(rctx.currTx); - $bean_wrp b = ($bean_wrp) rctx.ejbContext.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - - #if ($M.getReturnType() != "void") - result = - #end - b.$M.getName()($M.getActualParameters()); - - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - postInvoke(rctx); - } - - #if ($M.getReturnType() != "void") - return result; - #end - - #afterThrowRemoteException() - - } - -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpointHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpointHome.vm deleted file mode 100644 index c9c0ce27f4..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JServiceEndpointHome.vm +++ /dev/null @@ -1,58 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JServiceEndpointHome -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.rmi.RemoteException; - -import javax.ejb.EJBException; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.ejb21.JServiceEndpoint; -import org.ow2.jonas.lib.ejb21.JServiceEndpointHome; - -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class $class extends JServiceEndpointHome { - - /** - * Constructor - */ - public $class(SessionStatelessDesc sd, JStatelessFactory sf) { - super(sd, sf); - } - - public JServiceEndpoint createServiceEndpointObject() throws RemoteException { - return new $service-endpoint_wrp((JStatelessFactory)bf); - } -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulHome.vm deleted file mode 100644 index 0c51d3c00b..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulHome.vm +++ /dev/null @@ -1,183 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## Copyright (C) 2006 Distributed Systems Lab. -## Universidad Politenica de Madrid (Spain) -## Contact: http://lsd.ls.fi.upm.es/lsd -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): -## Francisco Perez-Sorrosal (fpsorrosal@no-spam@fi.upm.es) -## Alberto Paz-Jimenez (apaz@no-spam@fi.upm.es) -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionHome for Stateful Sessions -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.rmi.RemoteException; -import java.rmi.Remote; - -import javax.ejb.Handle; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; - -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionHome; -import org.ow2.jonas.lib.ejb21.JSessionRemote; -import org.ow2.jonas.lib.ejb21.JStatefulContext; -import org.ow2.jonas.lib.ejb21.JStatefulFactory; -import org.ow2.jonas.lib.ejb21.JStatefulSwitch; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.deployment.ejb.SessionDesc; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.objectweb.util.monolog.api.BasicLevel; - -public class $class extends JSessionHome implements $home { - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - /** - * Created by JSessionFactory (by newInstance) - */ - public $class(SessionDesc dd, JSessionFactory bf) throws RemoteException { - - super(dd, bf); - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - JStatefulSwitch bs = null; - JSessionFactory sf = (JSessionFactory) bf; - try { - bs = (JStatefulSwitch) sf.createEJB(); - JSessionContext bctx = sf.getJContext(bs); - rctx.ejbContext = bctx; - bs.bindICtx(rctx.currTx, (JStatefulContext) bctx); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - bs.saveOpenResources(); - } catch (javax.ejb.AccessLocalException e) { - throw new RemoteException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - postInvoke(rctx); - } - - return ($remote) bs.getRemote(); - #afterThrowRemoteException() - - } - -#elseif ($M.isRemoveHandle()) - - /** - * Remove by Handle - */ - public void remove(Handle p1) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - checkSecurity(ejbInv); - javax.ejb.EJBObject ejbobj = null; - try { - ejbobj = p1.getEJBObject(); - rctx.bmcalled = true; - ejbobj.remove(); - } catch (javax.ejb.AccessLocalException e) { - throw new RemoteException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - postInvoke(rctx); - } - - #afterThrowRemoteException() - } - -#end - -#end - - public JSessionRemote createRemoteObject() throws RemoteException { - - #beforeThrowRemoteException() - - return new $remote_wrp((JStatefulFactory)bf); - - #afterThrowRemoteException() - - } -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocal.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocal.vm deleted file mode 100644 index bd743ef1d9..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocal.vm +++ /dev/null @@ -1,192 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2008 Bull S.A. -## Contact: jonas-team@objectweb.org -## Copyright (C) 2006 Distributed Systems Lab. -## Universidad Politecnica de Madrid (Spain) -## Contact: http://lsd.ls.fi.upm.es/lsd -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux. -## Contributor(s): -## Francisco Perez-Sorrosal (fpsorrosal@no-spam@fi.upm.es) -## Alberto Paz-Jimenez (apaz@no-spam@fi.upm.es) -## S. Ali Tokmen, Malek Chahine: EJB statistics -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionLocal -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.util.Date; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionLocal; -import org.ow2.jonas.lib.ejb21.ha.JRepStatefulLocal; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.MonitoringEvent; -import org.objectweb.util.monolog.api.BasicLevel; - - -#if ($isClusterReplicated) -public class $class extends JRepStatefulLocal implements $local { -#else -public class $class extends JSessionLocal implements $local { -#end - - /** - * Constructor - */ - public $class(JSessionFactory bf) { - super(bf); - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoveException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - - try { - JSessionContext bctx = bs.getICtx(rctx.currTx); - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean: "+e); - - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised: ", e); - } finally { -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // There is no response to the client (void parameter needed by HA) - postInvoke(rctx, true); -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - - - } - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - #timerVariablesDeclaration() - #getRequestStartTime() - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#if ($M.getReturnType() != "void") - $M.getReturnType() result; -#end - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // Inject the state if found on HA tables - injectState(); -/* **********************END OF REPLICATION CODE************************ */ -#end - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - try { - JSessionContext bctx = bs.getICtx(rctx.currTx); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - #getBusinessStartTime() - -#if ($M.getReturnType() != "void") - result = -#end - b.$M.getName()($M.getActualParameters()); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - #getBusinessStopTime() -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - postInvoke(rctx, false); -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - #getRequestStopTime() - #updateEJBMonitoringData() - } -#if ($M.getReturnType() != "void") - return result; -#end - } - -#end - -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocalHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocalHome.vm deleted file mode 100644 index e583361df2..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulLocalHome.vm +++ /dev/null @@ -1,136 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A.S. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionLocalHome for Stateful Sessions -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionLocalHome; -import org.ow2.jonas.lib.ejb21.ha.JRepStatefulLocalHome; -import org.ow2.jonas.lib.ejb21.JSessionLocal; -import org.ow2.jonas.lib.ejb21.JStatefulContext; -import org.ow2.jonas.lib.ejb21.JStatefulFactory; -import org.ow2.jonas.lib.ejb21.JStatefulSwitch; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.deployment.ejb.SessionDesc; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -import org.objectweb.util.monolog.api.BasicLevel; - -#if ($isClusterReplicated) -public class $class extends JRepStatefulLocalHome implements $localhome { -#else -public class $class extends JSessionLocalHome implements $localhome { -#end - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - /** - * Created by JSessionFactory (by newInstance) - */ - public $class(SessionDesc dd, JSessionFactory bf) { - super(dd, bf); - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method - */ - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - JStatefulSwitch bs = null; - JSessionFactory sf = (JSessionFactory) bf; - try { - bs = (JStatefulSwitch) sf.createEJB(); - JSessionContext bctx = sf.getJContext(bs); - rctx.ejbContext = bctx; - bs.bindICtx(rctx.currTx, (JStatefulContext) bctx); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - b.ejb$M.getCapName()($M.getActualParameters()); - bctx.setActive(); - bs.saveOpenResources(); - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - postInvoke(rctx); - } -#if ($isClusterReplicated) - replicateCreate(bs); -#end - return ($local) bs.getLocal(); - } - -#end - -#end - - public JSessionLocal createLocalObject() { - return new $local_wrp((JStatefulFactory)bf); - } -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulRemote.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulRemote.vm deleted file mode 100644 index b909da9c63..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatefulRemote.vm +++ /dev/null @@ -1,236 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## Copyright (C) 2006 Distributed Systems Lab. -## Universidad Politenica de Madrid (Spain) -## Contact: http://lsd.ls.fi.upm.es/lsd -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux. -## Contributor(s): -## Francisco Perez-Sorrosal (fpsorrosal@no-spam@fi.upm.es) -## Alberto Paz-Jimenez (apaz@no-spam@fi.upm.es) -## S. Ali Tokmen, Malek Chahine: EJB statistics -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionRemote -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.util.Date; -import java.rmi.AccessException; -import java.rmi.RemoteException; - -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionRemote; -import org.ow2.jonas.lib.ejb21.ha.JRepStatefulRemote; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.MonitoringEvent; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.objectweb.util.monolog.api.BasicLevel; - -#if ($isClusterReplicated) -public class $class extends JRepStatefulRemote implements $remote { -#else -public class $class extends JSessionRemote implements $remote { -#end - - /** - * Constructor - */ - public $class(JSessionFactory bf) throws RemoteException { - - super(bf); - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoteException, RemoveException { - - //TraceEjb.interp.log(BasicLevel.DEBUG,""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - - try { - JSessionContext bctx = bs.getICtx(rctx.currTx); - rctx.bmcalled = true; - bctx.setRemoved(); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // There is no response to the client (void parameter needed by HA) - postInvoke(rctx, null, true); -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - } - - #afterThrowRemoteException() - - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG,""); - #timerVariablesDeclaration() - #getRequestStartTime() - #beforeThrowRemoteException() - - #if ($M.getReturnType() != "void") - $M.getReturnType() result = $M.getDefaultValue(); - #end - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - if (hasResponse()) { - // Inject the state if found on HA tables - injectState(); - - cmilogger.log(BasicLevel.DEBUG, "Response found"); - // Obtain the response associated with the request - // and delete the request because the method is going to return - Object response = getResponse(); - #if ($M.getReturnType() == "void") - cmilogger.log(BasicLevel.DEBUG, "\tResponse void"); - return; - #else - cmilogger.log(BasicLevel.DEBUG, "\tResponse not void"); - #if ($M.getWrapperType() != "") - return ($M.getReturnType()) (($M.getWrapperType())response).$M.getReturnType()Value(); - #else - return ($M.getReturnType()) response; - #end - #end - } else { - // Inject the state if found on HA tables - injectState(); - cmilogger.log(BasicLevel.DEBUG, "Response not found"); - } -/* **********************END OF REPLICATION CODE************************ */ -#end - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - - try { - JSessionContext bctx = bs.getICtx(rctx.currTx); - $bean_wrp b = ($bean_wrp) bctx.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - - #getBusinessStartTime() - - #if ($M.getReturnType() != "void") - result = - #end - - b.$M.getName()($M.getActualParameters()); - - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - #getBusinessStopTime() - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // If exists, pass the return type to postInvoke (Needed by HA) - #if ($M.getReturnType() != "void") - #if ($M.getWrapperType() != "") - postInvoke(rctx, new $M.getWrapperType()(result), false); - #else - postInvoke(rctx, result, false); - #end - #else - postInvoke(rctx, null, false); - #end -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - - #getRequestStopTime() - #updateEJBMonitoringData() - } - - #if ($M.getReturnType() != "void") - return result; - #end - - #afterThrowRemoteException() - - } - -#end - -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessHome.vm deleted file mode 100644 index f2ebb629c6..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessHome.vm +++ /dev/null @@ -1,169 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionHome for Stateless Sessions -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.rmi.RemoteException; - -import javax.ejb.Handle; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; - -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionHome; -import org.ow2.jonas.lib.ejb21.JSessionRemote; -import org.ow2.jonas.lib.ejb21.JSessionSwitch; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.deployment.ejb.SessionDesc; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.objectweb.util.monolog.api.BasicLevel; - - -public class $class extends JSessionHome implements $home { - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - /** - * Created by JSessionFactory (by newInstance) - */ - public $class(SessionDesc dd, JSessionFactory bf) throws RemoteException { - - super(dd, bf); - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method (unique for stateless session beans) - */ - public $M.getReturnType() create() throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - checkSecurity(ejbInv); - JSessionSwitch bs = null; - try { - rctx.bmcalled = true; - bs = ((JSessionFactory) bf).createEJB(); - } catch (javax.ejb.AccessLocalException e) { - throw new RemoteException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - postInvoke(rctx); - } - - return ($remote) bs.getRemote(); - - #afterThrowRemoteException() - - } - -#elseif ($M.isRemoveHandle()) - - /** - * Remove by Handle - */ - public void remove(Handle p1) throws $M.getExceptionList() { - - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - checkSecurity(ejbInv); - javax.ejb.EJBObject ejbobj = null; - try { - ejbobj = p1.getEJBObject(); - rctx.bmcalled = true; - ejbobj.remove(); - } catch (javax.ejb.AccessLocalException e) { - throw new RemoteException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - postInvoke(rctx); - } - - #afterThrowRemoteException() - } - -#end - -#end - - public JSessionRemote createRemoteObject() throws RemoteException { - - #beforeThrowRemoteException() - - return new $remote_wrp((JStatelessFactory)bf); - - #afterThrowRemoteException() - - } -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocal.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocal.vm deleted file mode 100644 index a0e085d3a7..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocal.vm +++ /dev/null @@ -1,155 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2008 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux. -## Contributor(s): - S. Ali Tokmen, Malek Chahine: EJB statistics -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionLocal -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.util.Date; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionLocal; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.MonitoringEvent; -import org.objectweb.util.monolog.api.BasicLevel; - -public class $class extends JSessionLocal implements $local { - - /** - * Constructor - */ - public $class(JSessionFactory bf) { - super(bf); - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoveException { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - - try { - rctx.ejbContext = bs.getICtx(rctx.currTx); - rctx.bmcalled = true; - rctx.ejbContext.setRemoved(); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - postInvoke(rctx); - } - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - #timerVariablesDeclaration() - #getRequestStartTime() - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); -#if ($M.getReturnType() != "void") - $M.getReturnType() result; -#end - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - try { - rctx.ejbContext = bs.getICtx(rctx.currTx); - $bean_wrp b = ($bean_wrp) rctx.ejbContext.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - #getBusinessStartTime() - -#if ($M.getReturnType() != "void") - result = -#end - b.$M.getName()($M.getActualParameters()); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean: "+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised", e); - } finally { - #getBusinessStopTime() - postInvoke(rctx); - #getRequestStopTime() - #updateEJBMonitoringData() - } -#if ($M.getReturnType() != "void") - return result; -#end - } - -#end - -#end - -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocalHome.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocalHome.vm deleted file mode 100644 index 56a02be2a5..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessLocalHome.vm +++ /dev/null @@ -1,118 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2004 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux, Helene Joanin. -## Contributor(s): ______________________________________. -## -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionLocalHome for Stateless Sessions -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionLocalHome; -import org.ow2.jonas.lib.ejb21.JSessionLocal; -import org.ow2.jonas.lib.ejb21.JSessionSwitch; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.deployment.ejb.MethodDesc; -import org.ow2.jonas.deployment.ejb.SessionDesc; -import org.ow2.jonas.lib.ejb21.EJBInvocation; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class $class extends JSessionLocalHome implements $localhome { - - // JOnAS version used to deploy - public static final String JONAS_VERSION = "$jVersion"; - - /** - * Created by JSessionFactory (by newInstance) - */ - public $class(SessionDesc dd, JSessionFactory bf) { - super(dd, bf); - } - -#foreach ($M in $methodList) - -#if ($M.isCreate()) - - /** - * create method (unique for stateless session beans) - */ - public $M.getReturnType() create() -#if ( $M.getExceptionList().length() > 0 ) - throws $M.getExceptionList() -#end - { - //TraceEjb.interp.log(BasicLevel.DEBUG, ""); - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - RequestCtx rctx = preInvoke(MethodDesc.TX_NOT_SET); - checkSecurity(ejbInv); - JSessionSwitch bs = null; - try { - rctx.bmcalled = true; - bs = ((JSessionFactory) bf).createEJB(); - } catch (javax.ejb.AccessLocalException e) { - throw new EJBException("Security Exception thrown by an enterprise Bean", e); - } catch (EJBException e) { - rctx.sysExc = e; - throw e; - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new EJBException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new EJBException("Error thrown by an enterprise Bean"+e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw new EJBException("Remote Exception raised:", e); - } finally { - postInvoke(rctx); - } - return ($local) bs.getLocal(); - } - -#end - -#end - - public JSessionLocal createLocalObject() { - return new $local_wrp((JStatelessFactory)bf); - } -} -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessRemote.vm b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessRemote.vm deleted file mode 100644 index 591b48638a..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/JStatelessRemote.vm +++ /dev/null @@ -1,220 +0,0 @@ -## --------------------------------------------------------------------------- -## JOnAS: Java(TM) Open Application Server -## Copyright (C) 1999-2008 Bull S.A. -## Contact: jonas-team@objectweb.org -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -## USA -## -## Initial developer(s): Philippe Durieux. -## Contributor(s): - S. Ali Tokmen, Malek Chahine: EJB statistics -## --------------------------------------------------------------------------- -## $Id$ -## --------------------------------------------------------------------------- - -// This class is the bean specific part of JSessionRemote -// Generated by GenIC via Velocity. Do not edit directly this file. -// Start: $Id$ - -#if ($package.length() != 0) -package $package; -#end - -import java.lang.Error; -import java.lang.RuntimeException; -import java.rmi.AccessException; -import java.rmi.RemoteException; -import javax.ejb.RemoveException; -import java.util.Date; - -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JSessionRemote; -import org.ow2.jonas.lib.ejb21.ha.JRepStatelessRemote; -import org.ow2.jonas.lib.ejb21.RequestCtx; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.MonitoringEvent; - -import org.ow2.carol.rmi.exception.RmiUtility; -import org.objectweb.util.monolog.api.BasicLevel; - -#if ($isClusterReplicated) -public class $class extends JRepStatelessRemote implements $remote { -#else -public class $class extends JSessionRemote implements $remote { -#end - - /** - * Constructor - */ - public $class(JSessionFactory bf) throws RemoteException { - super(bf); - } - -#foreach ($M in $methodList) - -#if ($M.isRemoveThis()) - - /** - * remove this bean instance - */ - public void remove() throws RemoteException, RemoveException { - //TraceEjb.interp.log(BasicLevel.DEBUG,""); - - #beforeThrowRemoteException() - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - checkSecurity(ejbInv); - - try { - rctx.ejbContext = bs.getICtx(rctx.currTx); - rctx.bmcalled = true; - rctx.ejbContext.setRemoved(); - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // There is no response to the client (void parameter needed by HA) - postInvoke(rctx, null); -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - } - - #afterThrowRemoteException() - - } - -#else - - public $M.getReturnType() $M.getName()($M.getFormalParameters()) throws $M.getExceptionList() { - //TraceEjb.interp.log(BasicLevel.DEBUG,""); - - #timerVariablesDeclaration() - #getRequestStartTime() - #beforeThrowRemoteException() - -#if ($M.getReturnType() != "void") - $M.getReturnType() result = $M.getDefaultValue(); -#end - -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - if (hasResponse()) { - cmilogger.log(BasicLevel.DEBUG, "Response found"); - // Obtain the response associated with the request - // and delete the request because the method is going to return - Object response = getResponse(); - #if ($M.getReturnType() == "void") - cmilogger.log(BasicLevel.DEBUG, "\tResponse void"); - return; - #else - cmilogger.log(BasicLevel.DEBUG, "\tResponse not void"); - #if ($M.getWrapperType() != "") - return ($M.getReturnType()) (($M.getWrapperType())response).$M.getReturnType()Value(); - #else - return ($M.getReturnType()) response; - #end - #end - } else { - cmilogger.log(BasicLevel.DEBUG, "Response not found"); - } -/* **********************END OF REPLICATION CODE************************ */ -#end - - EJBInvocation ejbInv = new EJBInvocation(); - ejbInv.methodPermissionSignature = "$M.getSecuritySignature()"; - ejbInv.arguments = $M.getArrayObjectParameters(); - - RequestCtx rctx = preInvoke($M.getTxAttribute()); - - try { - rctx.ejbContext = bs.getICtx(rctx.currTx); - $bean_wrp b = ($bean_wrp) rctx.ejbContext.getInstance(); - ejbInv.bean = b; - checkSecurity(ejbInv); - rctx.bmcalled = true; - #getBusinessStartTime() - -#if ($M.getReturnType() != "void") - result = -#end - - b.$M.getName()($M.getActualParameters()); - - } catch (javax.ejb.AccessLocalException e) { - throw new AccessException("Security Exception thrown by an enterprise Bean", e); - } catch (RuntimeException e) { - rctx.sysExc = e; - throw new RemoteException("RuntimeException thrown by an enterprise Bean", e); - } catch (Error e) { - rctx.sysExc = e; - throw new RemoteException("Error thrown by an enterprise Bean", e); - } catch (RemoteException e) { - rctx.sysExc = e; - throw e; - } finally { - #getBusinessStopTime() -#if ($isClusterReplicated) -/* ******************REPLICATION CODE STARTS HERE*********************** */ - // If exists, pass the return type to postInvoke (Needed by HA) - #if ($M.getReturnType() != "void") - #if ($M.getWrapperType() != "") - postInvoke(rctx, new $M.getWrapperType()(result)); - #else - postInvoke(rctx, result); - #end - #else - postInvoke(rctx, null); - #end -/* **********************END OF REPLICATION CODE************************ */ -#else - postInvoke(rctx); -#end - #getRequestStopTime() - #updateEJBMonitoringData() - } - -#if ($M.getReturnType() != "void") - return result; -#end - -#afterThrowRemoteException() - - } - -#end - -#end - -} - -// End: $Id$ diff --git a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/README b/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/README deleted file mode 100644 index e5cb6ec673..0000000000 --- a/jonas/modules/generators/jonas-genic/src/main/resources/org/ow2/jonas/generators/genic/README +++ /dev/null @@ -1,94 +0,0 @@ - -+-------------------------------------------------------+ -| List of args used for Velocity: (for 1 bean) | -+-------------------------------------------------------+ - - -Common for all generated files: -------------------------------------------------------------------------------- -dd Deployment Descriptor -home Home Interface (full name) -localhome LocalHome Interface (full name) -remote Remote Interface (full name) -local Local Interface (full name) -home_wrp Wrapper Home (full name) used ? -localhome_wrp Wrapper localhome (full name) used ? -remote_wrp Wrapper remote (full name) -local_wrp Wrapper local (full name) -bean Bean class (full name of bean provider class) -bean_wrp Bean derived class (CMP) or Bean class (others) -handle Handle generated class -pk class of PK (entity only) - -fieldList Container managed persistence bean's fields -fieldPkList CMP bean's fields which make up the primary key -fieldNoPkList CMP bean's fields which don't make up the primary key - -Specific to each generated file: -------------------------------------------------------------------------------- -package package of generated file (same as inherited class) -class class of generated file -methodList List of Method's for this generated class, - including remove methods. - -Class Field: List of function calls: --------------------------------------------------------------------------------- -getName() -getTypeName() -getDefaultValue() -getSqlTypeName() -getSqlGetMethod() -getSqlSetMethod() -hasNotPrimitiveType() -hasBigIntegerType() -hasSerializableType() -hasJavaLangTypeExceptString() - - -Class Method: List of function calls: --------------------------------------------------------------------------------- -isFinderByPk() true if findByPrimaryKey method -isFinderSimple() true if finder method returning 1 value and if it's not findByPrimaryKey -isFinderEnum() true if finder method returning Enumeration -isFinderCol() true if finder method returning Collection -isCreate() true if create method -isCreate() true if ejbCreate bean method -isRemovePk() true if remove by PK -isRemoveHandle() true if remove by Handle -isRemoveThis() true if remove bean method -isEjbRemove() true if ejbRemove bean method -isEjbLoad() true if ejbLoad bean method -isEjbStore() true if ejbStore bean method -isEjbSetEntityContext() true if ejbSetEntityContext bean method - -getName() -getCapName() -getFormalParameters() -getActualParameters() -getExceptionList() -getSecuritySignature() -getTxAttribute() -getReturnType() -getSqlStmt() SQL statement (available for Entity CMP) -getParamWhereList() parameters list for the WHERE clause - (available for Entity CMP for finder methods) - - -Class ParamWhere: List of function calls: --------------------------------------------------------------------------------- -getName() -getTypeName() -getDefaultValue() -getSqlTypeName() -getSqlSetMethod() -hasNotPrimitiveType() -hasBigIntegerType() -hasSerializableType() -hasJavaLangTypeExceptString() - - --------------------------------------------------------------------------------- -A VOIR : --------------------------------------------------------------------------------- -1 seul template pour local/remote ? -1 seul template pour session/entity ? diff --git a/jonas/modules/generators/jonas-wsgen/pom.xml b/jonas/modules/generators/jonas-wsgen/pom.xml deleted file mode 100644 index 80b1783dd4..0000000000 --- a/jonas/modules/generators/jonas-wsgen/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - org.ow2.jonas - jonas-generators - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-generators-wsgen - bundle - JOnAS :: Generators :: WSGen - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-generators-base - ${project.version} - - - org.ow2.jonas.osgi - xmlbeans - ${project.version} - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.apache.axis - axis - - - org.apache.ws.ews - ews-mapper - 1.1 - - - - velocity - velocity-dep - 1.4 - - - commons-discovery - commons-discovery - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - org.ow2.jonas - eclipse-compiler - ${project.version} - - - diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGen.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGen.java deleted file mode 100644 index edecd72f99..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGen.java +++ /dev/null @@ -1,290 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen; - -import java.io.File; -import java.util.StringTokenizer; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.generators.genbase.NoJ2EEWebservicesException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.generator.GeneratorFactories; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.genbase.utils.TempRepository; -import org.ow2.jonas.generators.wsgen.finder.GeneralWSFinder; -import org.ow2.jonas.generators.wsgen.finder.J2EEWebServicesFinder; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.ow2.jonas.generators.wsgen.modifier.ModifierFactory; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Main WsGen Class. - * @author Guillaume Sauthier - */ -public class WsGen { - - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** - * Set to false if input file cannot be processed by WsGen (DTDs). - */ - private boolean inputModified = true; - - /** - * Private Constructor for Utility class WsGen. - */ - public WsGen() { } - - /** - * Main method. - * @param args Commend line args - * @throws Exception When the execute method fails - */ - public static void main(final String[] args) throws Exception { - WsGen wsgen = new WsGen(); - wsgen.execute(args); - } - - /** - * Method used by the main method and by external class to retrieve the name of - * the modified or created file by WsGen. - * @param args command line arguments - * @throws Exception When a failure occurs - * @return the modified file name or the input file name if nothing has been changed - */ - public String execute(final String[] args) throws Exception { - // store configuration properties - Config config = parseInput(args); - - if (config.isHelp() || config.isError() || config.getInputname() == null) { - // display usage message - usage(); - return null; - } - - return execute(config, null); - } - - /** - * Method used by the main method and by external class to retrieve the name of - * the modified or created file by WsGen. - * @param config the given config - * @param deployable the current deployable - * @return the modified file name or the input file name if nothing has been changed - * @throws Exception When a failure occurs - */ - public String execute(final Config config, final IDeployable deployable) throws Exception { - GeneratorFactory gf = GeneratorFactory.getInstance(); - - // Make sure that DTD is turned to off - config.setDTDsAllowed(false); - - // setup configuration - gf.setConfiguration(config); - GeneratorFactories.setCurrentFactory(gf); - Archive modifiedArchive = null; - ArchiveModifier am = null; - // get the ArchiveModifier - try { - am = ModifierFactory.getModifier(config.getInputname(), false, deployable); - - J2EEWebServicesFinder finder = new GeneralWSFinder(am.getArchive()); - - // Do not touch the archive unless necessary ! - if (finder.find()) { - - logger.log(BasicLevel.INFO, "WebServices generation for '" + config.getInputname() + "'"); - - am.getArchive().initialize(); - - // modify the given archive - modifiedArchive = am.modify(); - - return modifiedArchive.getRootFile().getCanonicalPath(); - } - - } catch (NoJ2EEWebservicesException e) { - logger.log(BasicLevel.DEBUG, config.getInputname() + " is using DTDs, WsGen needs Schema only : " - + e.getMessage()); - inputModified = false; - return config.getInputname(); - } finally { - // close archive - if (am != null && am.getArchive() != null) { - am.getArchive().close(); - } - - modifiedArchive = null; - am = null; - - // delete all the temporary files created - TempRepository.getInstance().deleteAll(); - - System.gc(); - } - // no changes needed ... - inputModified = false; - return config.getInputname(); - - } - - /** - * Parse Command Line input and returns a Config object. - * @param args Command Lines params - * @return a Config object - */ - private static Config parseInput(final String[] args) { - Config config = new Config(); - - // Get args - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - - if (arg.equals("-help") || arg.equals("-?")) { - config.setHelp(true); - - continue; - } - - if (arg.equals("-verbose")) { - config.setVerbose(true); - - continue; - } - - if (arg.equals("-debug")) { - config.setDebug(true); - config.setVerbose(true); - - continue; - } - - if (arg.equals("-keepgenerated")) { - config.setKeepGenerated(true); - - continue; - } - - if (arg.equals("-noconfig")) { - config.setNoConfig(true); - - continue; - } - - if (arg.equals("-novalidation")) { - config.setParseWithValidation(false); - - continue; - } - - if (arg.equals("-javac")) { - config.setNameJavac(args[++argn]); - - continue; - } - - if (arg.equals("-javacopts")) { - argn++; - - if (argn < args.length) { - StringTokenizer st = new StringTokenizer(args[argn]); - - while (st.hasMoreTokens()) { - config.getJavacOpts().add(st.nextToken()); - } - } else { - config.setError(true); - } - - continue; - } - - if (arg.equals("-d")) { - argn++; - - if (argn < args.length) { - config.setOut(new File(args[argn])); - } else { - config.setError(true); - } - - continue; - } - - if (arg.equals("-unpacked")) { - config.setSaveUnpacked(); - - continue; - } - - if (args[argn] != null) { - config.setInputname(args[argn]); - } else { - config.setError(true); - } - } - - return config; - - } - - /** - * Display the usage. - */ - public static void usage() { - StringBuffer msg = new StringBuffer(); - msg.append("Usage: java org.ow2.jonas.generators.wsgen.WsGen -help \n"); - msg.append(" to print this help message \n"); - msg.append(" or java org.ow2.jonas.generators.wsgen.WsGen \n"); - msg.append("Options include: \n"); - msg.append(" -d specify where to place the generated files \n"); - msg.append(" -novalidation parse the XML deployment descriptors without \n"); - msg.append(" validation \n"); - msg.append(" -javac specify the java compiler to use \n"); - msg.append(" -javacopts specify the options to pass to the java compiler \n"); - msg.append(" -keepgenerated do not delete intermediate generated files \n"); - msg.append(" -noconfig do not generate configuration files (require \n"); - msg.append(" user provided files) \n"); - msg.append(" -verbose \n"); - msg.append(" -debug \n"); - msg.append(" \n"); - msg.append(" Input_File the ejb-jar, war or ear filename\n"); - System.out.println(msg.toString()); - } - - /** - * @return Returns the inputModified. - */ - public boolean isInputModified() { - return inputModified; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGenException.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGenException.java deleted file mode 100644 index 5722c85fd1..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/WsGenException.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume Sauthier - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen; - -import org.ow2.jonas.generators.genbase.GenBaseException; - -/** - * This class represents the exception that can be throwned by the WsGen tool. - */ -public class WsGenException extends GenBaseException { - - /** - * Constructs a WsGenException with no specified detail message. - */ - public WsGenException() { - super(); - } - - /** - * Constructs an WsGenException with the specified detail message. - * @param msg Error message - */ - public WsGenException(String msg) { - super(msg); - } - - /** - * Constructs an WsGenException with the specified detail message. - * @param inner Cause Exception to wrap - */ - public WsGenException(Exception inner) { - super(inner); - } - - /** - * Constructs an WsGenException with the specified detail message. - * @param msg Error message - * @param inner Cause Exception to wrap - */ - public WsGenException(String msg, Exception inner) { - super(msg, inner); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/ContextDDModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/ContextDDModifier.java deleted file mode 100644 index cc59546dfe..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/ContextDDModifier.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Matt Wringe - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Modify a the context.xml file. Wrapper around a web.xml DOM - * - * @author Matt Wringe - */ -public class ContextDDModifier extends DeploymentDescModifier { - - - /** - * The class used by Tomcat to setup the realm - */ - private static final String REALM_CLASS_NAME = "org.ow2.jonas.web.tomcat6.security.Realm"; - - - /** - * Create a new ContextDDModifier - * - * @param doc the context.xml Document - */ - public ContextDDModifier(Document doc) { - super(doc.getDocumentElement(), doc); - } - - /** - * Setups the realm for Tomcat to use - * - * @param realm the realm to use - */ - public void addContextRealm(String realm) { - Element contextElement = getElement(); - - contextElement.appendChild (setRealm(realm)); - } - - /** - * Returns an element that defines the realm to use - * - * @param realm the realm to use - * @return an element the defines the realm to use - */ - private Element setRealm (String realm) { - Element realmElement = newElement("Realm"); - realmElement.setAttribute("className", REALM_CLASS_NAME); - realmElement.setAttribute("resourceName", realm); - - return realmElement; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/DeploymentDescModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/DeploymentDescModifier.java deleted file mode 100644 index 340a6d4fb6..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/DeploymentDescModifier.java +++ /dev/null @@ -1,213 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.ow2.jonas.lib.util.Log; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - - -import org.objectweb.util.monolog.api.Logger; - -/** - * Modify an Element from a Deployment Descriptor. Contains XML commons - * utilities. - * - * @author Guillaume Sauthier - */ -public class DeploymentDescModifier { - - /** J2EE Default XML namespace */ - protected static final String J2EE_NS = "http://java.sun.com/xml/ns/j2ee"; - - /** JOnAS Default XML namespace */ - protected static final String JONAS_NS = "http://www.objectweb.org/jonas/ns"; - - /** logger */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** base element */ - private Element element; - - /** parent element */ - private Element parent; - - /** base document */ - private Document doc; - - /** - * Create a new DeploymentDescModifier to update the given Element. - * - * @param element XML element to be modified. - * @param doc base document for Element creation. - */ - public DeploymentDescModifier(Element element, Document doc) { - this(element, doc, null); - } - - /** - * Create a new DeploymentDescModifier to update the given Element. - * - * @param element XML element to be modified. - * @param doc base document for Element creation. - * @param parent parent Element, used if element is null - */ - public DeploymentDescModifier(Element element, Document doc, Element parent) { - this.element = element; - this.doc = doc; - this.parent = parent; - } - - /** - * Create a new Element with given name in J2EE XML namespace. - * - * @param name Element name - * - * @return the created Element - */ - protected Element newJ2EEElement(String name) { - return doc.createElementNS(J2EE_NS, name); - } - - /** - * Create a new Element with given name in J2EE XML namespace with an inner - * Text Node. - * - * @param name Element name - * @param text Element content - * - * @return the created Element - */ - protected Element newJ2EEElement(String name, String text) { - Element e = doc.createElementNS(J2EE_NS, name); - Text txt = doc.createTextNode(text); - e.appendChild(txt); - - return e; - } - - /** - * Create a new Element with given name in JOnAS XML namespace. - * - * @param name Element name - * - * @return the created Element - */ - protected Element newJOnASElement(String name) { - return doc.createElementNS(JONAS_NS, name); - } - - /** - * Create a new Element with given name in JOnAS XML namespace, with an - * inner Text Node. - * - * @param name Element name - * @param text node's text - * - * @return the created Element - */ - protected Element newJOnASElement(String name, String text) { - Element e = doc.createElementNS(JONAS_NS, name); - Text txt = doc.createTextNode(text); - e.appendChild(txt); - - return e; - } - - - /** - * Create a new Element with given name - * - * @param name Element name - * @return the created Element - */ - protected Element newElement (String name) { - return doc.createElement(name); - } - - /** - * Create a new Element with an inner Text Node. - * - * @param name Element name - * @param text node's text - * - * @return the created Element - */ - protected Element newElement (String name, String text) { - Element e = doc.createElement(name); - Text txt = doc.createTextNode(text); - e.appendChild(txt); - - return e; - } - - /** - * @return Returns the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @return Returns the parent (can be null). - */ - public Element getParent() { - return parent; - } - - /** - * @return Returns the element. - */ - public Element getElement() { - return element; - } - - /** - * @return Returns the document. - */ - public Document getDocument() { - return doc; - } - - /** - * Set the new document to use - * @param doc the new document to use - */ - public void setDocument(Document doc) { - this.doc = doc; - this.parent = doc.getDocumentElement(); - } - - /** - * Set the new base Element to use - * @param e the new base Element to use - */ - public void setElement(Element e) { - element = e; - getParent().appendChild(e); - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebJettyDDModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebJettyDDModifier.java deleted file mode 100644 index 6dd1dfeb1b..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebJettyDDModifier.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer: Matt Wringe - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Modify the web-jetty.xml file. Wrapper around a web.xml DOM - * - * @author Matt Wringe - */ -public class WebJettyDDModifier extends DeploymentDescModifier { - - /** the name of the class that sets the realm for Jetty */ - private static final String REALM_CLASS = "org.ow2.jonas.web.jetty6.security.Realm"; - - /** the name of the class that sets the context for Jetty */ - private static final String CONTEXT_CLASS = "org.mortbay.jetty.webapp.WebAppContext"; - - /** Default Realm name is no name is specified */ - private static final String DEFAULT_REALM_NAME = "Endpoint Authentication Area"; - - /** - * Create a new WebJettyDDModifier - * - * @param doc the context.xml Document - */ - public WebJettyDDModifier(Document doc) { - super(doc.getDocumentElement(), doc); - } - - /** - * Sets up the realm for Jetty to use - * - * @param realm the realm to use - */ - public void configRealm (String realm) { - configRealm (DEFAULT_REALM_NAME, realm); - } - - /** - * Sets up the realm for Jetty to use - * - * @param realmName the realm name for the realm - * @param realm the realm to use - */ - public void configRealm(String realmName, String realm) { - Element configureElement = getElement(); - configureElement.appendChild(setRealmName(realmName)); - configureElement.appendChild(setRealm(realm, realmName)); - } - - - /** - * Returns an element that defines the realm name to use - * - * @param realmName the name of the realm - * @return an element that defines the realm name - */ - private Element setRealmName (String realmName) { - Element callElement = newElement("Call"); - callElement.setAttribute("name", "setRealmName"); - - Element argElement = newElement("Arg", realmName); - callElement.appendChild(argElement); - - return callElement; - } - - /** - * Returns an element that defines which realm to use - * - * @param realm the realm - * @param realmName the name of the realm - * @return an element that defines which realm to use - */ - private Element setRealm (String realm, String realmName) { - Element callElement = newElement ("Call"); - callElement.setAttribute("name", "setRealm"); - - Element argElement = newElement ("Arg"); - - Element newElement = newElement ("New"); - newElement.setAttribute("class", REALM_CLASS); - - Element argRealmName = newElement ("Arg", realmName); - Element argRealm = newElement ("Arg", realm); - - newElement.appendChild(argRealmName); - newElement.appendChild(argRealm); - - argElement.appendChild(newElement); - callElement.appendChild(argElement); - - return callElement; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebServicesDDModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebServicesDDModifier.java deleted file mode 100644 index 58f3c43d7d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WebServicesDDModifier.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * @author Guillaume Sauthier - */ -public class WebServicesDDModifier extends DeploymentDescModifier { - - /** - * @param doc webservices.xml Document - */ - public WebServicesDDModifier(Document doc) { - super(doc.getDocumentElement(), doc); - } - - /** - * Update the servlet-link element in webservices.xml to the Generated servlet element. - * - * @param wsdName WebService Description name - * @param link old servlet-link value - * @param replace new servlet-link value - */ - public void changeServletLink(String wsdName, String link, String replace) { - - Element wsd = findWebserviceDesc(wsdName); - - // if element found - if (wsd != null) { - NodeList nl = wsd.getElementsByTagNameNS(J2EE_NS, "port-component"); - - for (int i = 0; i < nl.getLength(); i++) { - Element e = (Element) nl.item(i); - NodeList sib = e.getElementsByTagNameNS(J2EE_NS, "service-impl-bean"); - - Node servletLink = ((Element) sib.item(0)).getElementsByTagNameNS(J2EE_NS, "servlet-link").item(0); - - // test - // port-component/sib-link/servlet-link/#text-node.value - if (servletLink.getFirstChild().getNodeValue().equals(link)) { - servletLink.getFirstChild().setNodeValue(replace); - } - } - } - } - - /** - * Search element for webservices-description named with the given name. - * - * @param name the searched webservices-description name - * - * @return the found element or null if element is not found (should'nt - * occurs). - */ - private Element findWebserviceDesc(String name) { - NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, "webservice-description"); - Element wsd = null; - - for (int i = 0; (i < nl.getLength()) && (wsd == null); i++) { - Element e = (Element) nl.item(i); - - NodeList names = e.getElementsByTagNameNS(J2EE_NS, "webservice-description-name"); - - // test - // webservices-description/webservices-description--name/#text-node.value - if (names.item(0).getFirstChild().getNodeValue().equals(name)) { - wsd = e; - } - } - - return wsd; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsClientDDModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsClientDDModifier.java deleted file mode 100644 index 26f8f6fed8..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsClientDDModifier.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - - - -/** - * Modify a Web Services Client Deployment Desc Element. Wrapper around a - * jonas-service-ref element - * @author Guillaume Sauthier - */ -public class WsClientDDModifier extends DeploymentDescModifier { - - /** - * jonas-init-param Element name - */ - private static final String JONAS_INIT_PARAM = "jonas-init-param"; - - /** - * param-name Element name - */ - private static final String PARAM_NAME = "param-name"; - - /** - * param-value Element name - */ - private static final String PARAM_VALUE = "param-value"; - - /** - * Creates a new WsClientDDModifier where element is a - * jonas-service-ref XML Node. - * @param name service-ref-name value - * @param doc document base for Element creation - * @param base base element for searching jonas-service-ref - */ - public WsClientDDModifier(String name, Document doc, Element base) { - super(XMLUtils.getJonasServiceRef(base, name), doc, base); - } - - /** - * Add a jonas-init-param in jonas-service-ref. - * @param name param name - * @param value param value - */ - public void addJonasInitParam(String name, String value) { - Element jip = newJOnASElement(JONAS_INIT_PARAM); - Element pn = newJOnASElement(PARAM_NAME, name); - Element pv = newJOnASElement(PARAM_VALUE, value); - - jip.appendChild(pn); - jip.appendChild(pv); - - getElement().appendChild(jip); - } - - /** - * @return Returns true if this web service client has a JOnAS specific - * descriptor (jonas-service-ref). - */ - public boolean hasJonasServiceRef() { - return (getElement() != null); - } - - /** - * @param serviceRefName the value of service-ref-name Element - * @return Returns a default jonas-service-ref Element (initialized with the given service-ref-name). - */ - public Element createJonasServiceRef(String serviceRefName) { - Element jsr = newJOnASElement("jonas-service-ref"); - Element srn = newJOnASElement("service-ref-name", serviceRefName); - - jsr.appendChild(srn); - return jsr; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsEndpointDDModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsEndpointDDModifier.java deleted file mode 100644 index 1a83db2695..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/ddmodifier/WsEndpointDDModifier.java +++ /dev/null @@ -1,572 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.ddmodifier; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; - -/** - * Modify a Deployment Desc for Endpoint. Wrapper around a web.xml DOM. - * - * @author Guillaume Sauthier - */ -public class WsEndpointDDModifier extends DeploymentDescModifier { - - /** - * servlet Element name - */ - private static final String SERVLET = "servlet"; - - /** - * servlet-name Element name - */ - private static final String SERVLET_NAME = "servlet-name"; - - /** - * servlet-class Element name - */ - private static final String SERVLET_CLASS = "servlet-class"; - - /** - * servlet-mapping Element name - */ - private static final String SERVLET_MAPPING = "servlet-mapping"; - - /** - * url-pattern Element name - */ - private static final String URL_MAPPING = "url-pattern"; - - /** - * init-param Element name - */ - private static final String INIT_PARAM = "init-param"; - - /** - * param-name Element name - */ - private static final String PARAM_NAME = "param-name"; - - /** - * param-value Element name - */ - private static final String PARAM_VALUE = "param-value"; - - /** - * security-role-ref Element name - */ - private static final String SECURITY_ROLE_REF = "security-role-ref"; - - /** - * url-pattern Element name - */ - private static final String URL_PATTERN = "url-pattern"; - - /** - * security-constraint Element name - */ - private static final String SECURITY_CONSTRAINT = "security-constraint"; - - /** - * login-config Element name - */ - private static final String LOGIN_CONFIG = "login-config"; - - /** - * security-role Element name - */ - private static final String SECURITY_ROLE = "security-role"; - - /** - * role-name Element name. - */ - private static final String ROLE_NAME = "role-name"; - - /** - * Used to retrieve any Element childrens. - */ - private static final String ANY_TAG_NAME = "*"; - - /** - * Creates a new WsEndpointDDModifier object. - * @param web web.xml document - */ - public WsEndpointDDModifier(Document web) { - super(web.getDocumentElement(), web); - } - - /** - * Add a new servlet element in the web.xml. - * @param name servlet name. - * @param classname servlet fully qualified classname. - */ - public void addServlet(String name, String classname) { - Element servlet = newJ2EEElement(SERVLET); - Element servletName = newJ2EEElement(SERVLET_NAME, name); - Element servletClass = newJ2EEElement(SERVLET_CLASS, classname); - - servlet.appendChild(servletName); - servlet.appendChild(servletClass); - - // add servlet in the webapp Element - getElement().appendChild(servlet); - - } - - /** - * Add a new security-constraint element into the web.xml - * - * @param securityConstraint A node containing the security-constraint setting - */ - public void addEndpointSecurityConstraint(Node securityConstraint) { - Element sConstraintElement = newJ2EEElement(SECURITY_CONSTRAINT); - - // securityConstraint comes from another document, therefore have to - // import first - Node newSecurityConstraint = getDocument().importNode(securityConstraint, true); - - while (newSecurityConstraint.hasChildNodes()) { - sConstraintElement.appendChild(newSecurityConstraint.getFirstChild()); - } - - // add security-constraint to webapp - getElement().appendChild(sConstraintElement); - } - - /** - * Add a new login-config element into the web.xml - * - * @param loginConfig An element constaining the login-config setting - */ - public void addEndpointLoginConfig(Element loginConfig) { - - // A MUST only have 1 element - // If the same login-config is already there, that's fine. - // But if there is *another* login-config, we must throw an Exception - - // Try to get a reference on a login-config element - NodeList configs = getElement().getElementsByTagNameNS(J2EE_NS, LOGIN_CONFIG); - if (configs.getLength() == 0) { - // no login-config, we can insert our own ... - Element myLoginConfig = newJ2EEElement(LOGIN_CONFIG); - - // loginConfig comes from another document, therefore have to import - // first - Node importedLoginConfig = getDocument().importNode(loginConfig, true); - - while (importedLoginConfig.hasChildNodes()) { - myLoginConfig.appendChild(importedLoginConfig.getFirstChild()); - } - - // add login-config to webapp - getElement().appendChild(myLoginConfig); - } else { - // Ooops, found another login-config - // Check if the login-config is the same than our own... - - // There can be only 1 login-config per web-app - Element config = (Element) configs.item(0); - - // If nodes are not the same - if (!areChildNodesIdentical(config, loginConfig)) { - String msg = "Cannot insert the new login-config element (login-config cannot " - + "be defined twice, even with different values !) : " + loginConfig; - throw new IllegalStateException(msg); - } - // OK, That's fine, we can let it 'as is' - - } - } - - /** - * @param first first Node to compare childs. - * @param second second nodes to compare childs. - * @return Returns true if nodes childs are identical. - */ - private static boolean areChildNodesIdentical(final Element first, final Element second) { - - // Check childrens - boolean identical = true; - // by using getElementsByTagName, we avoid to check meaningless Text nodes - NodeList firstChilds = first.getElementsByTagName(ANY_TAG_NAME); - NodeList secondChilds = second.getElementsByTagName(ANY_TAG_NAME); - - if (firstChilds.getLength() != secondChilds.getLength()) { - // one of the 2 nodes have more childrens, so they are not - // identical. - - return false; - } else if (firstChilds.getLength() == 0) { - // no child *Element* - // get the elements inner value - String one = first.getFirstChild().getNodeValue(); - String two = second.getFirstChild().getNodeValue(); - - // End recursion - return one.equals(two); - - } else { - // There is some children Elements - // same number of childrens - - boolean childrensIdentical = true; - for (int index = 0; index < firstChilds.getLength() - && childrensIdentical; index++) { - // Compare childrens 1-to-1 - Element firstChild = (Element) firstChilds.item(index); - Element secondChild = (Element) secondChilds.item(index); - childrensIdentical = areElementIdentical(firstChild, secondChild); - } - identical &= childrensIdentical; - } - return identical; - } - - /** - * @param first first element to compare. - * @param second second element to compare. - * @return Returns true if both elements are identical. - */ - private static boolean areElementIdentical(final Element first, final Element second) { - - // Check namespace URI - if (!first.getNamespaceURI().equals(second.getNamespaceURI())) { - return false; - } - - // Check localname - if (!first.getLocalName().equals(second.getLocalName())) { - return false; - } - - return areChildNodesIdentical(first, second); - } - - /** - * Add a new security-role element into the web.xml - * @param securityRole A node containing the login-config setting - */ - public void addSecurityRole(Node securityRole) { - - // Maybe the security-role element was already added. - // Look in the Document to find an pre-existing security-role element - // with the same name. - - Element foundSecurityRole = findSecurityRole((Element) securityRole); - if (foundSecurityRole == null) { - // no security-rople element, or none is matching - // we can add our own ... - - Element mySecurityRole = newJ2EEElement(SECURITY_ROLE); - - // securityRole comes from another document, therefor have to import - // first - Node importedSecurityRole = getDocument().importNode(securityRole, true); - - while (importedSecurityRole.hasChildNodes()) { - mySecurityRole.appendChild(importedSecurityRole.getFirstChild()); - } - - // add security-role to webapp - getElement().appendChild(mySecurityRole); - } - // else, the right security-role is already there, nothing to do ... - } - - /** - * @param securityRole security-role element. - * @return Returns a matching security-role element already - * in the Document. - */ - private Element findSecurityRole(Element securityRole) { - - NodeList potentialSecurityRoles = getElement().getElementsByTagNameNS(J2EE_NS, SECURITY_ROLE); - if (potentialSecurityRoles.getLength() == 0) { - // no security-role elements defined - // exit safely - return null; - } - - // Iterates over the potential security-role to find a matching - // role-name - Element found = null; - String requiredRoleName = getRoleName(securityRole); - // while nothing was found AND iteration not over - for (int index = 0; (index < potentialSecurityRoles.getLength()) - && (found == null); index++) { - Element potentialSR = (Element) potentialSecurityRoles.item(index); - // get the potential security-role name - String roleName = getRoleName(potentialSR); - - // compare, if equals, we're done - if (requiredRoleName.equals(roleName)) { - found = potentialSR; - } - } - - // found is still null if no matching security-role was found - return found; - } - - /** - * @param securityRole security-role element in which the role name - * will be extracted. - * @return Returns the extracted role-name value. - */ - private static String getRoleName(Element securityRole) { - Node roleName = securityRole.getElementsByTagNameNS(J2EE_NS, ROLE_NAME).item(0); - // j2ee:security-role/j2ee:role-name/#text - return roleName.getFirstChild().getNodeValue().trim(); - } - - /** - * Remove a servlet element from the web.xml. - * @param name servlet name. - */ - public void removeServlet(String name) { - Element servlet = findServlet(name); - - if (servlet != null) { - getElement().removeChild(servlet); - } - } - - /** - * Remove a servlet element from the web.xml. - * @param name servlet name. - * @return security-role elements for this servlet if such elements exist - */ - public NodeList removeServletWithSecurity(String name) { - Element servlet = findServlet(name); - NodeList elements = null; - - if (servlet != null) { - - elements = servlet.getElementsByTagNameNS(J2EE_NS, SECURITY_ROLE_REF); - // if the list is empty, return null - if (elements.getLength() == 0) { - elements = null; - } - getElement().removeChild(servlet); - } - return elements; - } - - /** - * Add a new servlet-mapping element in the web.xml. - * @param name servlet name. - * @param mapping url-mapping value - */ - public void addServletMapping(String name, String mapping) { - Element servletMapping = newJ2EEElement(SERVLET_MAPPING); - Element servletName = newJ2EEElement(SERVLET_NAME, name); - Element urlMapping = newJ2EEElement(URL_MAPPING, mapping); - - servletMapping.appendChild(servletName); - servletMapping.appendChild(urlMapping); - - // add servletMapping in the webapp Element - getElement().appendChild(servletMapping); - } - - /** - * Add a new init-param element in the web.xml. - * @param servletName the servlet name where init-param will be added. - * @param pName parameter name - * @param pValue parameter value - */ - public void addServletParam(String servletName, String pName, String pValue) { - Element ip = newJ2EEElement(INIT_PARAM); - Element pn = newJ2EEElement(PARAM_NAME, pName); - Element pv = newJ2EEElement(PARAM_VALUE, pValue); - - ip.appendChild(pn); - ip.appendChild(pv); - - Element servlet = findServlet(servletName); - servlet.appendChild(ip); - - } - - /** - * Add a new security-role-ref element in the web.xml. - * @param servletName the servlet name where security-role-ref will be - * added. - * @param securityRoleRefs security-role elements for a servlet - */ - public void addServletSecurityRoleRefs(String servletName, NodeList securityRoleRefs) { - // find the servlet - Element servlet = findServlet(servletName); - // add all security-role-ref - for (int i = 0; i < securityRoleRefs.getLength(); i++) { - Node securityRoleRefItem = securityRoleRefs.item(i); - servlet.appendChild(securityRoleRefItem); - } - } - - /** - * search webapp element for servlet named with the given name. - * @param name the searched servlet name - * @return the found element or null if element is not found (should'nt - * occurs). - */ - private Element findServlet(String name) { - NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SERVLET); - Element servlet = null; - - for (int i = 0; (i < nl.getLength()) && (servlet == null); i++) { - Element e = (Element) nl.item(i); - - NodeList names = e.getElementsByTagNameNS(J2EE_NS, SERVLET_NAME); - - // test servlet/servlet-name/#text-node.value - if (names.item(0).getFirstChild().getNodeValue().equals(name)) { - servlet = e; - } - } - - return servlet; - } - - /** - * Remove servlet-mapping tag associated to a given servlet-name - * @param sName servlet-name - * @return url-pattern element's value in the servelet-mapping - */ - public String removeServletMapping(String sName) { - NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SERVLET_MAPPING); - Element mapping = null; - String urlPatternValue = null; - - for (int i = 0; (i < nl.getLength()) && (mapping == null); i++) { - Element e = (Element) nl.item(i); - - NodeList names = e.getElementsByTagNameNS(J2EE_NS, SERVLET_NAME); - - // test servlet-mapping/servlet-name/#text-node.value - if (names.item(0).getFirstChild().getNodeValue().equals(sName)) { - mapping = e; - } - } - - if (mapping != null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "mapping element found : " + mapping); - } - // pick up the url-pattern before removing - NodeList urlPatterns = mapping.getElementsByTagNameNS(J2EE_NS, URL_PATTERN); - urlPatternValue = urlPatterns.item(0).getFirstChild().getNodeValue(); - - getElement().removeChild(mapping); - } - - return urlPatternValue; - } - - /** - * Update the security-constraint element having url-pattern equal with - * oldPattern by replacing this old pattern with the newUrlPattern - * @param oldUrlPatter url-pattern to be replaced - * @param newUrlPatterValue url-pattern to replace with - */ - public void updateSecurityConstraint(String oldUrlPatter, String newUrlPatterValue) { - - NodeList nl = getElement().getElementsByTagNameNS(J2EE_NS, SECURITY_CONSTRAINT); - - // loop over security constraints - for (int i = 0; i < nl.getLength(); i++) { - Element e = (Element) nl.item(i); - - // look at nested url-pattern Element(s) - NodeList urlPatternCollection = e.getElementsByTagNameNS(J2EE_NS, URL_PATTERN); - for (int j = 0; j < urlPatternCollection.getLength(); j++) { - - Element urlPatternElement = (Element) urlPatternCollection.item(j); - Text urlPatternText = (Text) urlPatternElement.getFirstChild(); - - // if found urlPattern Element, replace its value - if (urlPatternText.getNodeValue().equals(oldUrlPatter)) { - urlPatternText.setNodeValue(newUrlPatterValue); - } - } - } - } - - /** - * DOCUMENT ME! - * @param name DOCUMENT ME! - * @param home DOCUMENT ME! - * @param remote DOCUMENT ME! - * @param link DOCUMENT ME! - */ - public void addEjbRef(String name, String home, String remote, String link) { - - Element ejbRef = newJ2EEElement("ejb-ref"); - Element ejbRefName = newJ2EEElement("ejb-ref-name", name); - Element ejbRefType = newJ2EEElement("ejb-ref-type", "Session"); - Element ejbHome = newJ2EEElement("home", home); - Element ejbRemote = newJ2EEElement("remote", remote); - Element ejbLink = newJ2EEElement("ejb-link", link); - - ejbRef.appendChild(ejbRefName); - ejbRef.appendChild(ejbRefType); - ejbRef.appendChild(ejbHome); - ejbRef.appendChild(ejbRemote); - ejbRef.appendChild(ejbLink); - - getElement().appendChild(ejbRef); - - } - - /** - * DOCUMENT ME! - * @param name DOCUMENT ME! - * @param home DOCUMENT ME! - * @param remote DOCUMENT ME! - * @param link DOCUMENT ME! - */ - public void addEjbLocalRef(String name, String home, String remote, String link) { - - Element ejbRef = newJ2EEElement("ejb-local-ref"); - Element ejbRefName = newJ2EEElement("ejb-ref-name", name); - Element ejbRefType = newJ2EEElement("ejb-ref-type", "Session"); - Element ejbHome = newJ2EEElement("local-home", home); - Element ejbRemote = newJ2EEElement("local", remote); - Element ejbLink = newJ2EEElement("ejb-link", link); - - ejbRef.appendChild(ejbRefName); - ejbRef.appendChild(ejbRefType); - ejbRef.appendChild(ejbHome); - ejbRef.appendChild(ejbRemote); - ejbRef.appendChild(ejbLink); - - getElement().appendChild(ejbRef); - - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GeneralWSFinder.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GeneralWSFinder.java deleted file mode 100644 index 3a85ab2c50..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GeneralWSFinder.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.finder; - -import java.util.Iterator; - -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; - - -/** - * GeneralWSFinder is a wrapper for ear and other J2EE module types. - * - * @author Guillaume Sauthier - */ -public class GeneralWSFinder implements J2EEWebServicesFinder { - - /** - * Explored archive. - */ - private J2EEArchive archive = null; - - /** - * Creates a WSFinder suitable for all types of modules. - * @param archive Explored archive. - */ - public GeneralWSFinder(J2EEArchive archive) { - super(); - this.archive = archive; - } - - /** - * @see org.ow2.jonas.generators.wsgen.finder.J2EEWebServicesFinder#find() - */ - public boolean find() { - - if (archive instanceof Application) { - // explore sub modules - Application app = (Application) archive; - - // If any ejbjar has a webservice, return directly - for (Iterator i = app.getEjbJars(); i.hasNext();) { - EjbJar ejb = (EjbJar) i.next(); - if (findWebServicesInEjbJar(ejb)) { - return true; - } - } - - // If any webapp has a webservice, return directly - for (Iterator i = app.getWebApps(); i.hasNext();) { - WebApp web = (WebApp) i.next(); - if (findWebServicesInWebApp(web)) { - return true; - } - } - - //If any client has a webservice, return directly - for (Iterator i = app.getClients(); i.hasNext();) { - Client client = (Client) i.next(); - if (findWebServicesInClient(client)) { - return true; - } - } - - } else if (archive instanceof EjbJar) { - return findWebServicesInEjbJar((EjbJar) archive); - } else if (archive instanceof WebApp) { - return findWebServicesInWebApp((WebApp) archive); - } else if (archive instanceof Client) { - return findWebServicesInClient((Client) archive); - } - return false; - } - - /** - * @param archive The archive to explore. - * @return Returns true if the Client has WebServices. - */ - private static boolean findWebServicesInClient(Client archive) { - J2EEWebServicesFinder finder = new GenericWSFinder(archive, "META-INF/application-client.xml"); - return finder.find(); - } - - /** - * @param archive The archive to explore. - * @return Returns true if the WebApp has WebServices. - */ - private static boolean findWebServicesInWebApp(WebApp archive) { - J2EEWebServicesFinder finder = new GenericWSFinder(archive, "WEB-INF/web.xml"); - return finder.find(); - } - - /** - * @param archive The archive to explore. - * @return Returns true if the EjbJar has WebServices. - */ - private static boolean findWebServicesInEjbJar(EjbJar archive) { - J2EEWebServicesFinder finder = new GenericWSFinder(archive, "META-INF/ejb-jar.xml"); - return finder.find(); - } - - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GenericWSFinder.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GenericWSFinder.java deleted file mode 100644 index c7e709d09a..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/GenericWSFinder.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.finder; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.lib.util.Log; -import org.xml.sax.SAXException; - -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import java.io.InputStream; - -/** - * Multi-module (EjbJar, WebApp, Client) WebServices Finder. - * - * @author Guillaume Sauthier - */ -public class GenericWSFinder implements J2EEWebServicesFinder { - - /** - * logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** - * The archive to be explored. - */ - private J2EEArchive archive = null; - - /** - * Standard XML descriptor name. - */ - private String descriptorName = null; - - /** - * Create a multi-module type WSFinder. - * @param archive The archive to be explored. - * @param descriptorName Standard XML descriptor name. - */ - public GenericWSFinder(J2EEArchive archive, String descriptorName) { - super(); - this.archive = archive; - this.descriptorName = descriptorName; - } - - /** - * @see org.ow2.jonas.generators.wsgen.finder.J2EEWebServicesFinder#find() - */ - public boolean find() { - - // Look for webservices.xml - WebServicesXmlFinder wsFinder = new WebServicesXmlFinder(archive); - try { - wsFinder.init(getSAXParser()); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Cannot return a SAXParser", e); - // by default, the WebServicesXmlFinder will return false... - - } - - // Look for service-ref - ServiceRefFinder srFinder = new ServiceRefFinder(); - try { - InputStream is = archive.getInputStream(descriptorName); - SAXParser parser = getSAXParser(); - parser.parse(is, srFinder); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Cannot return a SAXParser", e); - // by default, the ServiceRefFinder will return false... - } - - // returns true if there is a webservices.xml (JAX-RPC only) - // and/or some service-ref (J2EE namespace only) - return wsFinder.find() || srFinder.find(); - } - /** - * @return Returns a SAXParser - * @throws ParserConfigurationException when Parser cannot be created. - * @throws SAXException when Parser cannot be created. - */ - protected SAXParser getSAXParser() throws ParserConfigurationException, SAXException { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - return factory.newSAXParser(); - } - -} - diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/J2EEWebServicesFinder.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/J2EEWebServicesFinder.java deleted file mode 100644 index d08e427010..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/J2EEWebServicesFinder.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.finder; - -/** - * The J2EEWebServiceFinder interface is used to react if an - * archive may contains some J2EE webservices or J2EE webservices clients. - * - * @author Guillaume Sauthier - */ -public interface J2EEWebServicesFinder { - - /** - * @return Returns true if webservices have been found. - */ - boolean find(); -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/ServiceRefFinder.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/ServiceRefFinder.java deleted file mode 100644 index 2176ef125c..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/ServiceRefFinder.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.finder; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Specialized Finder for XML files. - * If one contains some service-ref elements, it will be marked has WS enabled. - * - * @author Guillaume Sauthier - */ -public class ServiceRefFinder extends DefaultHandler implements J2EEWebServicesFinder { - - /** - * J2EE Namespace URI. - */ - private static final String J2EE_NS = "http://java.sun.com/xml/ns/j2ee"; - - /** - * true if a service-ref element was found. - */ - private boolean found = false; - - /** - * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) - */ - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - super.startElement(uri, localName, qName, attributes); - if ("service-ref".equals(localName) && J2EE_NS.equals(uri)) { - // found a j2ee:service-ref element - // react in some way - found = true; - } - } - - /** - * @see org.ow2.jonas.generators.wsgen.finder.J2EEWebServicesFinder#find() - */ - public boolean find() { - return found; - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/WebServicesXmlFinder.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/WebServicesXmlFinder.java deleted file mode 100644 index 6e7fde6a9f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/finder/WebServicesXmlFinder.java +++ /dev/null @@ -1,176 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.finder; - -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.lib.util.Log; -import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -import javax.xml.parsers.SAXParser; -import java.util.Iterator; -import java.util.List; -import java.io.InputStream; -import java.io.IOException; - - -/** - * WebServicesXmlFinder finds out if there is any - * webservices.xml within the given {@link J2EEArchive}. - * - * @author Guillaume Sauthier - */ -public class WebServicesXmlFinder extends DefaultHandler implements J2EEWebServicesFinder { - - /** - * logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** - * WebApp's webservices.xml. - */ - private static final String WEBINF_WEBSERVICES_XML = "WEB-INF/webservices.xml"; - - /** - * EjbJar's webservices.xml. - */ - private static final String METAINF_WEBSERVICES_XML = "META-INF/webservices.xml"; - - /** - * JAX-RPC value for the version attribute of the webservices.xml - */ - private static final String JAXRPC_VERSION = "1.1"; - - /** - * Archive to browse. - */ - private J2EEArchive archive = null; - - /** - * Tell if the archive is a jaxrpc archive or not. - */ - private boolean jaxrpc = false; - - /** - * Constructs a WebServicesXmlFinder that will - * explore the given {@link J2EEArchive}. - * @param archive archive to explore. - */ - public WebServicesXmlFinder(J2EEArchive archive) { - this.archive = archive; - } - - /** - * @see org.ow2.jonas.generators.wsgen.finder.J2EEWebServicesFinder#find() - */ - public boolean find() { - return jaxrpc; - } - - /** - * Explore the archive and find a webservices.xml. If found, parse the - * file and observe the 'version' attribute. - * @param parser SAX Parser - */ - public void init(SAXParser parser) { - List files = archive.getContainedFiles(); - for (Iterator i = files.iterator(); i.hasNext();) { - String filename = (String) i.next(); - - // If there is a webservices.xml file, check if it's a JAX-RPC file - if (WEBINF_WEBSERVICES_XML.equals(filename)) { - parseWebservicesDescriptor(parser, filename); - } - if (METAINF_WEBSERVICES_XML.equals(filename)) { - parseWebservicesDescriptor(parser, filename); - } - } - } - - /** - * Parse the descriptor. - * @param parser SAX Parser - * @param filename webservices.xml filename - */ - private void parseWebservicesDescriptor(SAXParser parser, String filename) { - InputStream is = null; - try { - is = archive.getArchive().getInputStream(filename); - parser.parse(is, this); - } catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Cannot open " + filename + " in archive " + archive.getArchive().getName()); - } catch (SAXException e) { - logger.log(BasicLevel.DEBUG, "Cannot parse " + filename + " in archive " + archive.getArchive().getName()); - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Ignored"); - } - } - } - } - - /** - * Receive notification of the start of an element. - *

    - *

    By default, do nothing. Application writers may override this - * method in a subclass to take specific actions at the start of - * each element (such as allocating a new tree node or writing - * output to a file).

    - * - * @param uri The Namespace URI, or the empty string if the - * element has no Namespace URI or if Namespace - * processing is not being performed. - * @param localName The local name (without prefix), or the - * empty string if Namespace processing is not being - * performed. - * @param qName The qualified name (with prefix), or the - * empty string if qualified names are not available. - * @param attributes The attributes attached to the element. If - * there are no attributes, it shall be an empty - * Attributes object. - * @throws org.xml.sax.SAXException Any SAX exception, possibly - * wrapping another exception. - * @see org.xml.sax.ContentHandler#startElement - */ - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - // the 'version' attribute is located on the 'webservices' element - if ("webservices".equals(localName)) { - - // Check value of the 'version' attribute - String value = attributes.getValue("version"); - if (JAXRPC_VERSION.equals(value)) { - jaxrpc = true; - } - } - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/Generator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/Generator.java deleted file mode 100644 index d4b59ebacb..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/Generator.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.eclipse.compiler.CompilationContext; -import org.ow2.jonas.eclipse.compiler.CompilerError; -import org.ow2.jonas.eclipse.compiler.JOnASCompiler; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.generator.AbsGenerator; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.util.I18n; - -/** - * Generators provide a structure to be extended for specific generation - * mecanisms. Axis will provide an AxisWsClientGenerator that will be in charge - * of client side generation (WSDL2Java tool) and an AxisWsEndpointGenerator - * that will bother with server side artifact generation. - * - * @author Guillaume Sauthier - */ -public abstract class Generator extends AbsGenerator { - - /** - * i18n. - */ - private static I18n i18n = I18n.getInstance(Generator.class); - - /** - * Creates a new Generator with the given Config. - * - * @param config internal configuration object. - * - * @throws GenBaseException When sources and target temporary directory cannot - * be created - */ - public Generator(final Config config) throws GenBaseException { - super(config); - } - - /** - * Generate files. - * - * @throws WsGenException When generation fails. - */ - @Override - public abstract void generate() throws WsGenException; - - /** - * Compile generated java files into classes directory. - * - * @throws WsGenException When compilation fails - */ - @Override - public void compile() throws WsGenException { - // get all java files contained in the sources dir - List sources = new ArrayList(); - sources = getJavaSources(getSources(), getSources()); - - // Init the compilation context - CompilationContext context = new CompilationContext(); - - JClassLoader classLoader = new JClassLoader("WSGen", new URL[]{}, Thread.currentThread().getContextClassLoader()); - addClasspath(classLoader, getConfig().getClasspath()); - context.setContextualClassLoader(classLoader); - - context.setOutputDirectory(getClasses()); - context.setSourceDirectory(getSources()); - context.setSources(sources); - - // Compile - JOnASCompiler compiler = new JOnASCompiler(context); - - List errors = compiler.compile(); - if (errors.isEmpty()) { - getLogger().log(BasicLevel.INFO, "Sources classes successfully compiled with Eclipse compiler."); - } else { - for (CompilerError error : errors) { - getLogger().log(BasicLevel.ERROR, error.toString()); - } - throw new WsGenException("Failed when compiling classes"); - } - - classLoader = null; - context = null; - compiler = null; - - // Perform garbage collector - System.gc(); - } - - /** - * Add To the given ClassLoader the given classpath. - * @param cl ClassLoader to be updated - * @param classpath the classpath to add inside the ClassLoader - * @throws WsGenException When classpath contains invalid URL - */ - private static void addClasspath(final JClassLoader cl, - final String classpath) throws WsGenException { - String[] elems = classpath.split(File.pathSeparator); - for (int i = 0; i < elems.length; i++) { - try { - cl.addURL(new File(elems[i]).toURL()); - } catch (MalformedURLException e) { - throw new WsGenException("Cannot create URL from '" + elems[i] + "'", e); - } - } - } - - - /** - * @return the i18n. - */ - protected static I18n getI18n() { - return i18n; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/GeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/GeneratorFactory.java deleted file mode 100644 index 2824016bc0..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/GeneratorFactory.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; - - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * a GeneratorFactory has to be extended by specific generation - * mecanism. It will look in jonas.properties file for a property - * named :jonas.service.ws.wsgen.generator.factory that is a - * classname extending GeneratorFactory. By default Axis - * GeneratorFactory is used. - * - * @author Guillaume Sauthier - */ -public abstract class GeneratorFactory implements org.ow2.jonas.generators.genbase.generator.GeneratorFactory { - - /** - * Generator Factory property name in jonas.properties - */ - public static final String GENERATOR_FACTORY = "jonas.service.jaxrpc.wsgen.generator.factory"; - - /** - * Default GeneratorFactory impl to use - */ - public static final String GENERATOR_FACTORY_DEFAULT = "org.ow2.jonas.generators.wsgen.generator.ews.EWSGeneratorFactory"; - - /** GeneratorFactory unique instance */ - private static GeneratorFactory instance = null; - - /** i18n */ - private static I18n i18n = I18n.getInstance(GeneratorFactory.class); - - /** logger */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** Configuration to set on instanciated Generator */ - private Config configuration; - - /** - * Returns the unique GeneratorFactory instance. - * - * @return the unique GeneratorFactory instance. - * - * @throws WsGenException When instanciation fails - */ - public static GeneratorFactory getInstance() throws WsGenException { - if (instance == null) { - instance = newInstance(); - } - - return instance; - } - - /** - * Create a new generatorFactory instance by looking up in - * jonas.properties and load class specified with - * jonas.service.ws.wsgen.generator-factory property. If not - * set, Axis GeneratorFactory is the default Factory returned. - * - * @return a new generatorFactory instance. - * - * @throws WsGenException when Exception occurs when dynamiccaly - * instantiating GeneratorFactory subclass - */ - private static GeneratorFactory newInstance() throws WsGenException { - - String classname = null; - - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - InputStream is = cl.getResourceAsStream("jonas.properties"); - - if (is == null) { - // Should be on the client side - // use default value - classname = GENERATOR_FACTORY_DEFAULT; - } else { - Properties jprop = new Properties(); - try { - jprop.load(is); - classname = jprop.getProperty(GENERATOR_FACTORY, GENERATOR_FACTORY_DEFAULT); - } catch (IOException e) { - // cannot read properties, use default value - logger.log(BasicLevel.WARN, "Cannot get '" + GENERATOR_FACTORY + "' value, default used : '" - + GENERATOR_FACTORY_DEFAULT + "'"); - classname = GENERATOR_FACTORY_DEFAULT; - } finally { - try { - is.close(); - } catch (IOException e) { - // use default if it was not set - if (classname == null) { - classname = GENERATOR_FACTORY_DEFAULT; - } - } - } - } - - // instanciate - GeneratorFactory gf = null; - - try { - Class gfc = cl.loadClass(classname) - .asSubclass(GeneratorFactory.class); - gf = gfc.newInstance(); - } catch (Exception e) { - // Try with another ClassLoader - cl = GeneratorFactory.class.getClassLoader(); - try { - Class gfc = cl.loadClass(classname) - .asSubclass(GeneratorFactory.class); - gf = gfc.newInstance(); - } catch (Exception e2) { - String err = i18n.getMessage("GeneratorFactory.newInstance.instance", classname); - throw new WsGenException(err, e2); - } - } - - return gf; - - } - - /** - * Return a new WsClientGenerator for the specific generation mecanism. - * - * @param serviceRef the service-ref containing information for client side - * generation process. - * @param ddm the XML modifier. - * @param archive the Archive to be modified - * - * @return a new WsClientGenerator. - * - * @throws GenBaseException When Factory cannot instanciate WsClientGenerator - */ - public abstract WsClientGenerator newGenerator(ServiceRefDesc serviceRef, WsClientDDModifier ddm, Archive archive) - throws GenBaseException; - - /** - * Return a new WsEndpointGenerator for the specific generation mecanism. - * - * @param serviceDesc the webservice-description containing information for - * server side generation process. - * @param ddm the XML modifier. - * @param wsddm the Webservices.xml DD modifier - * @param arch The archive to modify - * - * @return a new WsEndpointGenerator. - * - * @throws GenBaseException When Factory cannot instanciate WsEndpointGenerator - */ - public abstract WsEndpointGenerator newGenerator(ServiceDesc serviceDesc, WsEndpointDDModifier ddm, - WebServicesDDModifier wsddm, Archive arch) throws GenBaseException; - - /** - * Set the Configuration to use with newly created Generator. - * - * @param config the Configuration to use with newly created Generator. - */ - public void setConfiguration(Config config) { - this.configuration = config; - } - - /** - * Get the Configuration to use with newly created Generator. - * - * @return the Configuration to use with newly created Generator - */ - public Config getConfiguration() { - return configuration; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/SecurityGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/SecurityGenerator.java deleted file mode 100644 index 46099b4651..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/SecurityGenerator.java +++ /dev/null @@ -1,304 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Inital Developer : Matt Wringe - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator; - -import org.ow2.jonas.generators.wsgen.ddmodifier.ContextDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebJettyDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - - -/** - * Generates the necessary security files to the generated - * webapp for a stateless session bean endpoint. - * - * @author Matt Wringe - */ -public class SecurityGenerator { - - /** - * Document that contains the security configurations to be used - */ - private Document securityDesc = null; - - /** - * WsEndpointDDModifier used to add security settings to the web.xml - */ - private WsEndpointDDModifier wsddm = null; - - /** - * ContextDDModifier used to add Realm settings to the context.xml - */ - private ContextDDModifier cddm = null; - - /** - * WebJettyDDModifuer used to add Realm settings to web-jetty.xml - */ - private WebJettyDDModifier wjddm = null; - - /** - * The name of the node in securityDesc that contains the login-config settings - */ - private static final String LOGIN_CONFIG = "endpoint-login-config"; - - /** - * The name of the node in securityDesc that contains the security-constraint settings - */ - private static final String SECURITY_CONSTRAINT = "endpoint-security-constraint"; - - /** - * The name of the node that contains the realm - */ - private static final String REALM = "endpoint-realm"; - - /** - * The name of the node that contains the name of the realm - */ - private static final String REALM_NAME = "endpoint-realm-name"; - - /** - * The name of the node that contains the security role - */ - private static final String SECURITY_ROLE = "endpoint-security-role"; - - /** - * The realm the webapp should use - */ - private String realm = null; - - /** - * The name of the realm that the webapp should use - */ - private String realmName = null; - - - /** - * Creates a new SecurityGenerator object - * @param securityDesc Dom Document that contains the security settings - */ - public SecurityGenerator(final Document securityDesc) { - this.securityDesc = securityDesc; - } - - /** - * Generates the security settings specified in securityDesc document - * - * @param ddm Used to add security to the web.xml - * @param cddm Used to add a security realm to the context.xml - * @param wjddm Used to add a security realn to the web-jetty.xml - */ - public void generate(final WsEndpointDDModifier ddm, final ContextDDModifier cddm, final WebJettyDDModifier wjddm) { - this.wsddm = ddm; - this.cddm = cddm; - this.wjddm = wjddm; - - if (securityDesc != null) { - - realm = getRealm(); - realmName = getRealmName(); - - if (ddm != null) { - addEndpointSecurity(); - } - if (cddm != null) { - addContextRealm(); - } - // Do not add the realm in web-jetty.xml (already in jetty6.xml) - // TODO has to be refined - /* - if (wjddm != null) { - addWebJettyRealm(); - } - */ - } - } - - - /** - * Add realm settings to the context.xml - * - */ - private void addContextRealm() { - if (realm != null) { - cddm.addContextRealm(realm); - } - } - - /** - * Add realm settings to web-jetty.xml - * - */ - private void addWebJettyRealm() { - if (realm != null) { - if (realmName != null) { - wjddm.configRealm(realmName, realm); - } else { - wjddm.configRealm(realm); - } - } - } - - /** - * Setup the web security in the web.xml - * - */ - private void addEndpointSecurity() { - - //Add the security constraints - NodeList securityConstraints = getEndpointSecurityConstraints(); - if (securityConstraints != null) { - for (int i = 0; i < securityConstraints.getLength(); i++) { - //remove the j2ee prefix of this node - removePrefix(securityConstraints.item(i)); - wsddm.addEndpointSecurityConstraint(securityConstraints.item(i)); - } - } - - //Add the login configs - NodeList loginConfigs = getEndpointLoginConfig(); - if (loginConfigs != null) { - for (int i = 0; i < loginConfigs.getLength(); i++) { - //remove the j2ee prefix from this node - removePrefix(loginConfigs.item(i)); - wsddm.addEndpointLoginConfig((Element) loginConfigs.item(i)); - } - } - - //Add the security roles - NodeList securityRoles = getEndpointSecurityRole(); - if (securityRoles != null) { - for (int i = 0; i < securityRoles.getLength(); i++) { - //remove the j2ee prefix from thie node - removePrefix(securityRoles.item(i)); - wsddm.addSecurityRole(securityRoles.item(i)); - } - } - } - - /** - * Returns the DocumentElement for the securityDesc document - * - * @return DocumentElement for the securityDesc document - */ - private Element getElement() { - return securityDesc.getDocumentElement(); - } - - /** - * Returns the login-config nodes from the securityDesc document - * @return the login-config nodes from the securityDesc document - */ - public NodeList getEndpointLoginConfig() { - NodeList nodeList = getElement().getElementsByTagName(LOGIN_CONFIG); - return nodeList; - } - - /** - * Returns the security-constraint nodes from the securityDesc document - * - * @return the security-constraint nodes from the securityDesc document - */ - public NodeList getEndpointSecurityConstraints() { - NodeList nodeList = getElement().getElementsByTagName(SECURITY_CONSTRAINT); - return nodeList; - } - - /** - * Returns the security-role nodes from the securityDesc document - * - * @return the security-role nodes from the securityDesc document - */ - public NodeList getEndpointSecurityRole() { - NodeList nodeList = getElement().getElementsByTagName(SECURITY_ROLE); - return nodeList; - } - - /** - * Returns the context-realm node from the securityDesc document - * - * @return the realm node from the securityDesc document - */ - public String getRealm() { - NodeList nodeList = getElement().getElementsByTagName(REALM); - Node node = nodeList.item(0); - - if (node != null && node.hasChildNodes()) { - Node realmNode = nodeList.item(0).getFirstChild(); - realm = realmNode.getNodeValue(); - } - return realm; - } - - /** - * Returns the realm name - * - * @return the realm name - */ - public String getRealmName() { - String realmName = null; - NodeList nodeList = getElement().getElementsByTagName(REALM_NAME); - Node node = nodeList.item(0); - - if (node != null && node.hasChildNodes()) { - Node realmNameNode = nodeList.item(0).getFirstChild(); - realmName = realmNameNode.getNodeValue(); - } - return realmName; - } - - /** - * Returns the Document that contains the security settings - * - * @return Document that contains the security settings - */ - public Document getSecurityDesc() { - return securityDesc; - } - - /** - * Removes the prefix from all the children of a node - * - * @param node Node - */ - private void removePrefix (final Node node) { - if (node != null) { - if (node.getPrefix() != null) { - node.setPrefix(null); - } - if (node.hasChildNodes()) { - for (int i = 0; i < node.getChildNodes().getLength(); i++) { - removePrefix (node.getChildNodes().item(i)); - } - } - } - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsClientGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsClientGenerator.java deleted file mode 100644 index c7c79176d7..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsClientGenerator.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator; - -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; - - - -/** - * Generate sources and/or config for WebServices clients. - * - * @author Guillaume Sauthier - */ -public abstract class WsClientGenerator extends Generator { - - /** service-ref describing client dependency on a webservice */ - private ServiceRefDesc ref; - - /** jonas-service-ref modifier */ - private WsClientDDModifier modifier; - - /** archive */ - private Archive archive; - - /** - * Creates a new WsClientGenerator. - * - * @param config Generator Configuration - * @param serviceRef client dependency on a webservice - * @param ddm jonas-service-ref modifier - * @param arch modified archive - * - * @throws GenBaseException When instanciation fails - */ - public WsClientGenerator(Config config, ServiceRefDesc serviceRef, WsClientDDModifier ddm, Archive arch) - throws GenBaseException { - super(config); - ref = serviceRef; - modifier = ddm; - archive = arch; - } - /** - * @return the archive. - */ - public Archive getArchive() { - return archive; - } - /** - * @return the modifier. - */ - public WsClientDDModifier getModifier() { - return modifier; - } - /** - * @return the ref. - */ - public ServiceRefDesc getRef() { - return ref; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsEndpointGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsEndpointGenerator.java deleted file mode 100644 index ad6b238775..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/WsEndpointGenerator.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator; - -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; - - - -/** - * Generate sources and/or config files for WebServices Endpoint. - * @author Guillaume Sauthier - */ -public abstract class WsEndpointGenerator extends Generator { - - /** WebService Endpoint description */ - private ServiceDesc service; - - /** archive */ - private Archive archive; - - /** Web DD Modifier */ - private WsEndpointDDModifier modifier; - - /** Webservices DD Modifier */ - private WebServicesDDModifier wsModifier; - - /** - * Creates a new WsEndpointGenerator - * @param config Generator Configuration - * @param serviceDesc WebService Endpoint description - * @param ddm Web DD Modifier - * @param wsddm webservices.xml DD modifier - * @param arch the Archive to modify - * @throws GenBaseException When instanciation fails - */ - public WsEndpointGenerator(Config config, ServiceDesc serviceDesc, WsEndpointDDModifier ddm, - WebServicesDDModifier wsddm, Archive arch) throws GenBaseException { - super(config); - service = serviceDesc; - modifier = ddm; - wsModifier = wsddm; - archive = arch; - } - - /** - * @return the service. - */ - public ServiceDesc getService() { - return service; - } - - /** - * @return the archive. - */ - public Archive getArchive() { - return archive; - } - - /** - * @return the modifier. - */ - public WsEndpointDDModifier getModifier() { - return modifier; - } - - /** - * @return the wsModifier. - */ - public WebServicesDDModifier getWsModifier() { - return wsModifier; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisGeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisGeneratorFactory.java deleted file mode 100644 index 6cabe4eda8..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisGeneratorFactory.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.ow2.jonas.generators.wsgen.generator.WsClientGenerator; -import org.ow2.jonas.generators.wsgen.generator.WsEndpointGenerator; - - - - -/** - * GeneratorFactory impl for Axis. - * - * @deprecated - * @author Guillaume Sauthier - */ -public class AxisGeneratorFactory extends GeneratorFactory { - /** - * Return a new WsClientGenerator for the specific generation mecanism. - * - * @param serviceRef the service-ref containing information for client side - * generation process. - * @param ddm the XML modifier. - * @param archive the Archive to be modified - * - * @return a new WsClientGenerator. - * - * @throws GenBaseException When creation fails. - * @throws WsGenException When creation fails. - */ - public WsClientGenerator newGenerator(ServiceRefDesc serviceRef, - WsClientDDModifier ddm, Archive archive) throws GenBaseException, WsGenException { - return new AxisWsClientGenerator(getConfiguration(), serviceRef, ddm, archive); - } - - /** - * Return a new WsEndpointGenerator for the specific generation mecanism. - * - * @param serviceDesc the webservice-description containing information for - * server side generation process. - * @param ddm the XML modifier. - * @param wsddm webservices.xml DD modifier - * - * @return a new WsEndpointGenerator. - * - * @throws GenBaseException When creation fails. - * @throws WsGenException When creation fails. - */ - public WsEndpointGenerator newGenerator(ServiceDesc serviceDesc, - WsEndpointDDModifier ddm, WebServicesDDModifier wsddm, Archive arch) throws GenBaseException, WsGenException { - return new AxisWsEndpointGenerator(getConfiguration(), serviceDesc, ddm, wsddm, arch); - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsClientGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsClientGenerator.java deleted file mode 100644 index f54a1627fe..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsClientGenerator.java +++ /dev/null @@ -1,294 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.io.File; - -import org.ow2.jonas.deployment.ws.MappingFile; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.generator.WsClientGenerator; -import org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java.JOnASWSDL2Java; -import org.ow2.jonas.lib.loader.AbsModuleClassLoader; -import org.ow2.jonas.lib.util.I18n; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.apache.velocity.VelocityContext; - - - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Generate WebServices client files dedicated to axis.
    • - * client-config.wsdd : if needed
    • java sources : from WSDL
    • - *
    - * - * @author Guillaume sauthier - */ -public class AxisWsClientGenerator extends WsClientGenerator { - - /** unique JVelocity instance */ - private static JVelocity jvelocity = null; - - /** - * jonas-init-param name for client configuration file declaration - */ - private static final String CLIENT_CONFIG = "axis.clientConfigFile"; - - /** - * WSDD Extension suffix - */ - private static final String WSDD_SUFFIX = ".wsdd"; - - /** - * WSDD Extension prefix - */ - private static final String WSDD_PREFIX = "deploy-client-"; - - /** count generated files to assure names unicity */ - private static int count = 0; - - /** generated config file */ - private File generated = null; - - /** - * WEB-INF/ prefix - */ - private static final String WEB_PREFIX = "WEB-INF/"; - - /** - * I18n - */ - private static I18n i18n = I18n.getInstance(AxisWsClientGenerator.class); - - /** - * Creates a new AxisWsClientGenerator - * @param config Generator Configuration - * @param srd WebService Endpoint description - * @param ddm Web DD Modifier - * @param archive client archive containing WSDL - * @throws GenBaseException When instanciation fails - * @throws WsGenException When instanciation fails - */ - public AxisWsClientGenerator(Config config, ServiceRefDesc srd, WsClientDDModifier ddm, Archive archive) - throws GenBaseException, WsGenException { - super(config, srd, ddm, archive); - - // init velocity - if (jvelocity == null) { - String packageName = this.getClass().getPackage().getName(); - packageName = packageName.replace('.', '/'); - jvelocity = new JVelocity(packageName + "/deploy_client.vm"); - } - } - - /** - * generate axis specific files - * @throws WsGenException if WSDL cannot be found in archive - */ - public void generate() throws WsGenException { - - // the source generation is possible only when a - // WSDL Definition is provided - if ((getRef().getWsdlFileName() != null) - && !getRef().getServiceInterface().getName().equals("javax.xml.rpc.Service")) { - - try { - // classpath creation - J2EEArchive j2eeArchive = (J2EEArchive) getArchive(); - AbsModuleClassLoader cl = (AbsModuleClassLoader) j2eeArchive.getModuleClassloader(); - getConfig().setClasspath(getConfig().getClasspath() + cl.getClasspath()); - - - JOnASWSDL2Java jWsdl2Java = new JOnASWSDL2Java(); - jWsdl2Java.run(this); - getLogger().log(BasicLevel.INFO, "Web Services Classes successfully generated by Axis."); - } catch (Exception e) { - String err = getI18n().getMessage("AxisWsClientGenerator.generate.WSDL2Java"); - e.printStackTrace(System.err); - throw new WsGenException(err, e); - } - } - - // Client-config.wsdd ?? - // only if handlers are specified in ServiceRef - // but if noConfig set to true, assume that - // user configure himself the client. (expert) - // Could we create configuration ? - if (hasClientConfigFile(getRef())) { - // create deploy.wsdd - // use velocity template - // build a unique file name - String filename = WSDD_PREFIX + (count++) + WSDD_SUFFIX; - - VelocityContext vctx = VContextFactory.getContext(getRef()); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Creating '" + filename + "'"); - } - generated = new File(getSources(), filename); - - jvelocity.generate(generated, vctx); - - } - // End !noConfig - } - - /** - * Returns true if given service-ref need a client configuration files - * @param ref Service Ref - * @return true if given service-ref need a client configuration files - */ - private boolean hasClientConfigFile(ServiceRefDesc ref) { - // no configuration asked - if (getConfig().isNoConfig()) { - return false; - } - - MappingFile mf = ref.getMappingFile(); - - if (mf != null) { - // mapping file defined - if (mf.getXmlTypeMappings().hasNext()) { - // we have 1 mapping at least - return true; - } else { - // no mapping - // return true if ref has Handlers - return (ref.getHandlerRefs().size() != 0); - } - } else { - // no mapping file - // return true if ref has Handlers - return (ref.getHandlerRefs().size() != 0); - } - } - - /** - * Add generated files in given archive - * @param archive archive where generated fils will be added. - * @throws WsGenException when files cannot be added - */ - public void addFiles(Archive archive) throws WsGenException { - if (archive instanceof WebApp) { - archive.addDirectoryIn("WEB-INF/classes/", getClasses()); - - if (generated != null) { - archive.addFileIn("WEB-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - if (!getArchive().getContainedFiles().contains("WEB-INF/jonas-web.xml")) { - // jonas-web.xml doesn't exists - createEmptyJonasWeb((J2EEArchive) archive); - } - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, WEB_PREFIX + generated.getName()); - } - } else if (archive instanceof EjbJar) { - archive.addDirectory(getClasses()); - - if (generated != null) { - archive.addFileIn("META-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); - } - } else { - archive.addDirectory(getClasses()); - - if (generated != null) { - archive.addFileIn("META-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - if (!getArchive().getContainedFiles().contains("META-INF/jonas-client.xml")) { - // jonas-client.xml doesn't exists - createEmptyJonasClient((J2EEArchive) archive); - } - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); - } - } - } - - /** - * Add an empty jonas-web.xml in given J2EEArchive. - * @param archive archive to be updated - */ - private void createEmptyJonasWeb(J2EEArchive archive) { - Document doc = XMLUtils.newJonasWeb(); - archive.getDescriptors().put("WEB-INF/jonas-web.xml", doc); - getModifier().setDocument(doc); - } - - /** - * Add an empty jonas-client.xml in given J2EEArchive. - * @param archive archive to be updated - */ - private void createEmptyJonasClient(J2EEArchive archive) { - Document doc = XMLUtils.newJonasClient(); - archive.getDescriptors().put("META-INF/jonas-client.xml", doc); - getModifier().setDocument(doc); - } - - /** - * @return Returns the i18n. - */ - public static I18n getI18n() { - return i18n; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsEndpointGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsEndpointGenerator.java deleted file mode 100644 index fb6492168d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/AxisWsEndpointGenerator.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.io.File; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.ow2.jonas.deployment.ws.JaxRpcPortComponentDesc; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.WsEndpointGenerator; -import org.ow2.jonas.lib.util.Log; - -import org.apache.velocity.VelocityContext; - - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Generate Axis specific config files for Endpoint - * - * @author Guillaume Sauthier - */ -public class AxisWsEndpointGenerator extends WsEndpointGenerator { - - /** - * unique JVelocity instance - */ - private static JVelocity jvelocity = null; - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** - * Axis Servlet classname - */ - private static final String AXIS_SERVLET_CLASS = "org.ow2.jonas.ws.axis.JAxisServlet"; - - /** - * init-param name for declaring server configuration file - */ - private static final String SERVER_CONFIG = "axis.serverConfigFile"; - - /** - * WSDD Extension suffix - */ - private static final String WSDD_SUFFIX = ".wsdd"; - - /** - * WSDD Extension prefix - */ - private static final String WSDD_PREFIX = "deploy-server-"; - - /** - * count generated files - */ - private static int count = 0; - - /** - * generated server-config file - */ - private File generatedServerConfig; - - /** - * Creates a new AxisWsEndpointGenerator - * - * @param config Generator Configuration - * @param serviceDesc WebService Endpoint description - * @param ddm Web DD Modifier - * @param wsddm webservices.xml DD modifier - * - * @throws GenBaseException When instanciation fails - * @throws WsGenException When instanciation fails. - */ - public AxisWsEndpointGenerator(Config config, ServiceDesc serviceDesc, WsEndpointDDModifier ddm, - WebServicesDDModifier wsddm, Archive arch) throws GenBaseException, WsGenException { - super(config, serviceDesc, ddm, wsddm, arch); - - // init velocity - if (jvelocity == null) { - String packageName = this.getClass().getPackage().getName(); - packageName = packageName.replace('.', '/'); - jvelocity = new JVelocity(packageName + "/deploy_endpoint.vm"); - } - } - - /** - * Generate server side configuration file - * - * @throws WsGenException When generation fails - */ - public void generate() throws WsGenException { - String sName = getService().getName(); - - // construct VelocityContext - VelocityContext vc = VContextFactory.getContext(getService()); - - // Generate file - String filename = WSDD_PREFIX + (count++) + WSDD_SUFFIX; - generatedServerConfig = new File(getSources(), filename); - jvelocity.generate(generatedServerConfig, vc); - - // remove existing servlets - for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) { - Object obj = i.next(); - if (obj instanceof JaxRpcPortComponentDesc) { - JaxRpcPortComponentDesc jax = (JaxRpcPortComponentDesc) obj; - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Removing servlet '" + jax.getSibLink() + "'"); - } - - // remove servlet mapping - getModifier().removeServletMapping(jax.getSibLink()); - // remove old servlet - getModifier().removeServlet(jax.getSibLink()); - // change sib-link - getWsModifier().changeServletLink(sName, jax.getSibLink(), sName); - } - } - - // and use our own - getModifier().addServlet(sName, AXIS_SERVLET_CLASS); - getModifier().addServletParam(sName, SERVER_CONFIG, filename); - - // setup servlet-mappings - boolean requireDefaultMapping = false; - List usedServletMappings = new Vector(); - for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) { - PortComponentDesc pcd = (PortComponentDesc) i.next(); - String mapping = pcd.getMapping(); - if (mapping != null) { - // port has specified an endpoint URI - // use it for servlet-mapping - if (!usedServletMappings.contains(mapping)) { - usedServletMappings.add(mapping); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding servlet-mapping for '" + sName + "' -> '" + mapping + "'"); - } - - getModifier().addServletMapping(sName, mapping); - } - } else { - // no specified endpoint uri for the port - requireDefaultMapping = true; - } - } - if (requireDefaultMapping) { - // try to set a default mapping - String defaultEndpointURI = getService().getEndpointURI(); - if (defaultEndpointURI == null) { - // default behavior - getModifier().addServletMapping(sName, "/" + sName + "/*"); - } else { - // use retieved value - getModifier().addServletMapping(sName, defaultEndpointURI); - } - } - - } - - /** - * Add generated files in given Archive - * - * @param archive WebApp archive - * - * @throws WsGenException When cannot add files in archive - */ - public void addFiles(Archive archive) throws WsGenException { - // archive must be a WebApp - if (!(archive instanceof WebApp)) { - String err = getI18n().getMessage("AxisWsEndpointGenerator.addFiles.illegal", archive.getRootFile()); - throw new IllegalArgumentException(err); - } - - WebApp web = (WebApp) archive; - web.addFileIn("WEB-INF/", generatedServerConfig); - - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/JVelocity.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/JVelocity.java deleted file mode 100644 index 07c26a12e4..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/JVelocity.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; - -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.runtime.RuntimeConstants; - - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Wrapper around Velocity tool. - * - * @author Guillaume Sauthier - */ -public class JVelocity { - - /** i18n */ - private static I18n i18n = I18n.getInstance(JVelocity.class); - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_PREFIX); - - /** Velocity Engine */ - private VelocityEngine vEngine; - - /** Velocity Template */ - private Template template; - - /** - * Creates a new JVelocity instance using the given template. - * - * @param tmplName the template filename - * - * @exception WsGenException when error occurs during Velocity - * initialization. - */ - public JVelocity(String tmplName) throws WsGenException { - // Prepare Velocity Engine - String jonasRoot = System.getProperty("jonas.root"); - - if (jonasRoot == null) { - String err = i18n.getMessage("JVelocity.constr.notset"); - throw new WsGenException(err); - } - - //String path2Tmpl = new String(jonasRoot + File.separatorChar + "templates" + File.separatorChar + "wsgen" - // + File.separatorChar + "generator" + File.separatorChar + "axis"); - - // instanciate the engine - vEngine = new VelocityEngine(); - //vEngine.setProperty(RuntimeConstants.VM_LIBRARY, ""); - vEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "class"); - //vEngine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, path2Tmpl); - - try { - vEngine.init(); - } catch (Exception e) { - String err = i18n.getMessage("JVelocity.constr.initFailure"); - throw new WsGenException(err, e); - } - - // Create the Template - try { - template = vEngine.getTemplate(tmplName); - } catch (Exception e) { - String err = i18n.getMessage("JVelocity.constr.tmplError", tmplName); - throw new WsGenException(err, e); - } - } - - /** - * Generate the given file with the given VelocityContext. - * - * @param fs the output file - * @param context VelocityContext - * - * @throws WsGenException when velocity generation fails - */ - public void generate(File fs, VelocityContext context) throws WsGenException { - FileWriter fwriter = null; - - try { - // Create before the parent directory - File fdir = fs.getParentFile(); - - if (fdir != null) { - if (!fdir.exists()) { - if (!fdir.mkdirs()) { - String err = i18n.getMessage("JVelocity.generate.directories", fdir.getPath()); - throw new WsGenException(err); - } - } - } - - fwriter = new FileWriter(fs); - } catch (IOException e) { - String err = i18n.getMessage("JVelocity.generate.file", fs); - throw new WsGenException(err, e); - } - - try { - template.merge(context, fwriter); - } catch (Exception e) { - String err = i18n.getMessage("JVelocity.generate.cannot", fs); - throw new WsGenException(err, e); - } - - try { - fwriter.flush(); - fwriter.close(); - } catch (IOException e) { - // do nothing, just a warn - String err = i18n.getMessage("JVelocity.generate.close", fs); - logger.log(BasicLevel.WARN, err); - } - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VContextFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VContextFactory.java deleted file mode 100644 index fb7ad42de5..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VContextFactory.java +++ /dev/null @@ -1,238 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.HandlerDesc; -import org.ow2.jonas.deployment.ws.MappingFile; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.SSBPortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; - -import org.apache.velocity.VelocityContext; - - - -/** - * This class allows to create the Velocity Context used to build the generated - * sources with the Velocity templates. - * - * @author Xavier Delplanque (Bull) - */ -public class VContextFactory { - - /** - * Provider property name - */ - public static final String PROVIDER = "provider"; - - /** - * JOnAS EJB Provider name - */ - public static final String EJB_PROVIDER = "JOnASEJB"; - - /** - * Default RPC Provider name - */ - public static final String RPC_PROVIDER = "RPC"; - - /** - * Mapping property name - */ - public static final String MAPPINGS = "mappings"; - - /** - * Port Components list property name - */ - public static final String PORT_COMPONENTS = "portComponents"; - - /** - * WSDL directory in Webapp - */ - private static final String WEB_WSDL = "WEB-INF/wsdl/"; - - /** - * WSDL directory in EjbJar/Client - */ - private static final String META_WSDL = "META-INF/wsdl/"; - - /** - * Empty Constructor for Utility class - */ - private VContextFactory() { - } - - /** - * Creates the Velocity Context used to build the generated files with the - * Velocity templates. - * - * @param sd The ServiceDesc Deployment Descriptor - * - * @return a VelocityContext customized with the SD - */ - public static VelocityContext getContext(ServiceDesc sd) { - - VelocityContext vc = new VelocityContext(); - - // Set provider value - String wsdl; - if (sd.getPortComponents().get(0) instanceof SSBPortComponentDesc) { - // EJB Provider - vc.put(PROVIDER, EJB_PROVIDER); - // get wsdl name - wsdl = sd.getWSDL().getName().substring(META_WSDL.length()); - } else { - // JAXRPC Provider - vc.put(PROVIDER, RPC_PROVIDER); - // get wsdl name - wsdl = sd.getWSDL().getName().substring(WEB_WSDL.length()); - } - - // Add all ports - List ports = sd.getPortComponents(); - List portComponents = new Vector(); - for (Iterator it = ports.iterator(); it.hasNext();) { - PortComponentDesc pcd = (PortComponentDesc) it.next(); - portComponents.add(new VcPortComponent(pcd, wsdl)); - } - vc.put(PORT_COMPONENTS, portComponents); - - // add types mappings - List mappings = new Vector(); - MappingFile mf = sd.getMapping(); - for (Iterator m = mf.getXmlTypeMappings(); m.hasNext();) { - QName xml = (QName) m.next(); - String classname = mf.getClassname(xml); - - // if we have an Array, Axis use a different representation - if (classname.endsWith("[]")) { - mappings.add(new VcArrayMapping(xml, classname)); - } else { - mappings.add(new VcBeanMapping(xml, classname)); - } - } - vc.put(MAPPINGS, mappings); - - return vc; - } - - /** - * Creates the Velocity Context used to build the generated files with the - * Velocity templates. - * - * @param sr The ServiceRefDesc Deployment Descriptor - * - * @return a VelocityContext customized with the SR - */ - public static VelocityContext getContext(ServiceRefDesc sr) { - - VelocityContext vc = new VelocityContext(); - - Hashtable pcds = new Hashtable(); - - // for each service-ref handler - List hrs = sr.getHandlerRefs(); - - Vector commonh = new Vector(); - for (Iterator itHr = hrs.iterator(); itHr.hasNext();) { - HandlerDesc hr = (HandlerDesc) itHr.next(); - List pcns = hr.getPortNames(); - - if (pcns.size() != 0) { - // a port name list is defined : add the handler to each - // specified port - for (Iterator itPcn = pcns.iterator(); itPcn.hasNext();) { - String pcn = (String) itPcn.next(); - if (!pcds.containsKey(pcn)) { - pcds.put(pcn, new Vector()); - } - ((Vector) pcds.get(pcn)).add(hr); - } - } else { - // no port name is specified : the handler is added to each - // port - commonh.add(hr); - } - } - - // now, we can create the port component list - Vector portComponents = new Vector(); - - // if there is not port-component-ref - if (pcds.isEmpty()) { - Definition def = sr.getWSDLFile().getDefinition(); - Service s = def.getService(sr.getServiceQName()); - Map ports = s.getPorts(); - // for each wsdl:port - for (Iterator i = ports.values().iterator(); i.hasNext();) { - Port p = (Port) i.next(); - portComponents.add(new VcPortComponent(p.getName(), commonh)); - } - } else { - for (Enumeration enPc = pcds.keys(); enPc.hasMoreElements();) { - String pcn = (String) enPc.nextElement(); - // add common handlers to the list - Vector pchrs = (Vector) pcds.get(pcn); - pchrs.addAll(commonh); - portComponents.add(new VcPortComponent(pcn, pchrs)); - } - } - - vc.put(PORT_COMPONENTS, portComponents); - - // add types mappings - List mappings = new Vector(); - MappingFile mf = sr.getMappingFile(); - if (mf != null) { - for (Iterator m = mf.getXmlTypeMappings(); m.hasNext();) { - QName xml = (QName) m.next(); - String classname = mf.getClassname(xml); - - // if we have an Array, Axis use a different representaion - if (classname.endsWith("[]")) { - mappings.add(new VcArrayMapping(xml, classname)); - } else { - mappings.add(new VcBeanMapping(xml, classname)); - } - } - } - vc.put(MAPPINGS, mappings); - - return vc; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcArrayMapping.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcArrayMapping.java deleted file mode 100644 index 05d81f3fe7..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcArrayMapping.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Sauthier Guillaume - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import javax.xml.namespace.QName; - -/** - * Member of a VelocityContext. Contains information used to create a - * typeMapping WSDD tag. - * - * @author Guillaume SAUTHIER - */ -public class VcArrayMapping extends VcTypeMapping { - - /** - * Axis Array Serializer Factory - */ - private static final String ARRAY_SERIALIZER_FACTORY = "org.apache.axis.encoding.ser.ArraySerializerFactory"; - - /** - * Axis Array DeSerializer Factory - */ - private static final String ARRAY_DESERIALIZER_FACTORY = "org.apache.axis.encoding.ser.ArrayDeserializerFactory"; - - /** - * Create a VcArrayMapping holding arrayMapping information. - * - * @param xml XML Qname of the Array type - * @param name Java name of the Array type - */ - public VcArrayMapping(QName xml, String name) { - super(xml, name); - } - - /** - * @return Returns the serializer factory for the mapping - */ - public String getSerializerFactory() { - return ARRAY_SERIALIZER_FACTORY; - } - - /** - * @return Returns the deserializer factory for the mapping - */ - public String getDeserializerFactory() { - return ARRAY_DESERIALIZER_FACTORY; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBean.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBean.java deleted file mode 100644 index 96b96cf84f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBean.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; - -/** - * Member of a VelocityContext. Contains information about a bean. - * - * @author Xavier Delplanque - */ -public class VcBean { - - /** - * the bean jndi name - */ - private String jndiName; - - /** - * ServiceEndpoint interface name - */ - private String serviceEndpointInterface; - - /** - * Construct a Holder for Bean informations - * - * @param ssd SessionStatelessDesc descripting the given SessionBean - */ - public VcBean(SessionStatelessDesc ssd) { - - // set jndiName - jndiName = ssd.getJndiServiceEndpointName(); - - // set service endpoint - serviceEndpointInterface = ssd.getServiceEndpointClass().getName(); - - } - - /** - * The bean jndi name - * - * @return The bean jndi name - */ - public String getServiceEndpointJndiName() { - return jndiName; - } - - /** - * the bean service-endpoint interface name - * - * @return the bean service-endpoint interface name - */ - public String getServiceEndpointInterfaceName() { - return serviceEndpointInterface; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBeanMapping.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBeanMapping.java deleted file mode 100644 index 68d5940f83..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcBeanMapping.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import javax.xml.namespace.QName; - -/** - * Member of a VelocityContext. Contains information used to create a - * beanMapping WSDD tag. - * - * @author Guillaume SAUTHIER - */ -public class VcBeanMapping extends VcTypeMapping { - - /** - * Axis bean serializer factory - */ - private static final String BEAN_SERIALIZER_FACTORY = "org.apache.axis.encoding.ser.BeanSerializerFactory"; - - /** - * Axis bean deserializer factory - */ - private static final String BEAN_DESERIALIZER_FACTORY = "org.apache.axis.encoding.ser.BeanDeserializerFactory"; - - /** - * Create a VcBeanMapping holding typeMapping information. - * - * @param xml XML Qname of the type - * @param name Java name of the type - */ - public VcBeanMapping(QName xml, String name) { - super(xml, name); - } - - /** - * @return Returns the serializer factory for the mapping - */ - public String getSerializerFactory() { - return BEAN_SERIALIZER_FACTORY; - } - - /** - * @return Returns the deserializer factory for the mapping - */ - public String getDeserializerFactory() { - return BEAN_DESERIALIZER_FACTORY; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHandler.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHandler.java deleted file mode 100644 index 105e900fb2..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHandler.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.HandlerDesc; - - -/** - * Member of a VelocityContext. Contains information about a Handler (Ref/Desc). - * - * @author Xavier Delplanque - */ -public class VcHandler { - - /** handler name (unique) */ - private String name; - - /** handler class name */ - private String className; - - /** handler init parameters */ - private Vector initParameters; - - /** handler SOAP headers */ - private Vector headers; - - /** handler SOAP roles */ - private Vector soapRoles; - - /** - * Create a new VcHandler from a HandlerDesc - * - * @param hr HandlerDesc - */ - public VcHandler(HandlerDesc hr) { - - // set name - name = hr.getName(); - - //set className - className = hr.getHandlerClass().getName(); - - // set initParameters - Map ips = hr.getInitParams(); - initParameters = new Vector(); - for (Iterator itKey = ips.keySet().iterator(); itKey.hasNext();) { - String key = (String) itKey.next(); - String val = (String) ips.get(key); - initParameters.add(new VcInitParam(key, val)); - } - - // set headers - List hs = hr.getSOAPHeaders(); - headers = new Vector(); - for (Iterator itH = hs.iterator(); itH.hasNext();) { - QName qn = (QName) itH.next(); - headers.add(new VcHeader(qn)); - } - - // set soapRoles - soapRoles = new Vector(); - List srs = hr.getSOAPRoles(); - for (Iterator itSr = srs.iterator(); itSr.hasNext();) { - String sr = (String) itSr.next(); - soapRoles.add(sr); - } - } - - /** - * @return Returns the Handler name - */ - public String getName() { - return name; - } - - /** - * @return Returns the handler classname - */ - public String getClassName() { - return className; - } - - /** - * @return Returns the list of handler init param - */ - public Vector getInitParameters() { - return initParameters; - } - - /** - * @return Returns the list of header the given Handler is able to access. - */ - public Vector getHeaders() { - return headers; - } - - /** - * @return Returns the list of SOAP roles the Handler use - */ - public Vector getSoapRoles() { - return soapRoles; - } - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHeader.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHeader.java deleted file mode 100644 index f43c312b75..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcHeader.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import javax.xml.namespace.QName; - -/** - * Member of a VelocityContext. Contains information about a SOAP Header - * (basically a qName). - * - * @author Xavier Delplanque - */ -public class VcHeader { - - /** LocalPart of the QName */ - private String qname; - - /** NamespaceURI of the QName */ - private String namespace; - - /** - * Construct a VcHeader from a QName. - * - * @param qn the Header QName - */ - public VcHeader(QName qn) { - - // set qname - qname = qn.getLocalPart(); - - // set namespace - namespace = qn.getNamespaceURI(); - } - - /** - * @return Returns the Header localpart - */ - public String getQName() { - return qname; - } - - /** - * @return Returns the Header namespace URI - */ - public String getNamespace() { - return namespace; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcInitParam.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcInitParam.java deleted file mode 100644 index f7c439d99f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcInitParam.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -/** - * Member of a VelocityContext. Contains information about an InitParameter - * (basically a name/value pair). - * - * @author Xavier Delplanque - */ -public class VcInitParam { - - /** parameter name */ - private String name; - - /** parameter value */ - private String value; - - /** - * Construct a VcInitParam from a couple name/value. - * - * @param name init param name - * @param value init param value - */ - public VcInitParam(String name, String value) { - this.name = name; - this.value = value; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @return Returns the value. - */ - public String getValue() { - return value; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcPortComponent.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcPortComponent.java deleted file mode 100644 index 48f1db93d8..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcPortComponent.java +++ /dev/null @@ -1,370 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Xavier Delplanque - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import java.lang.reflect.Method; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import javax.wsdl.BindingFault; -import javax.wsdl.BindingOperation; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPBinding; -import javax.wsdl.extensions.soap.SOAPBody; -import javax.wsdl.extensions.soap.SOAPFault; -import javax.wsdl.extensions.soap.SOAPOperation; -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.HandlerDesc; -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.SSBPortComponentDesc; - - - - -/** - * Member of a VelocityContext. Contains information about a - * PortComponent(Desc/Ref). - * @author Xavier Delplanque - */ -public class VcPortComponent { - - /** port component name */ - private String name; - - /** the sib if the endpoint is an ejb */ - private VcBean bean = null; - - /** a string containing sei method names separated by ',' */ - private static final String SEP = ","; - - /** a list of method names */ - private String methods = null; - - /** port component handlers */ - private Vector handlers = new Vector(); - - /** the JAXRPC class name if the sib is a servlet */ - private String jaxRpcClassName; - - /** the wsdl file to display when ?wsdl is used */ - private String wsdlFilename; - - /** - * Document style name - */ - private static final String DOCUMENT_STYLE = "document"; - - /** - * SOAP style - */ - private String style = null; - - /** - * SOAP use - */ - private String use = null; - - /** - * target Namespace - */ - private String namespace = null; - - /** - * SOAP NS URI - */ - public static final String NS_URI_SOAP = "http://schemas.xmlsoap.org/wsdl/soap/"; - - /** - * soap:binding - */ - private static final QName SOAP_BINDING_QNAME = new QName(NS_URI_SOAP, "binding"); - - /** - * soap:operation - */ - private static final QName SOAP_OPERATION_QNAME = new QName(NS_URI_SOAP, "operation"); - - /** - * soap:body - */ - private static final QName SOAP_BODY_QNAME = new QName(NS_URI_SOAP, "body"); - - /** - * soap:fault - */ - private static final QName SOAP_FAULT_QNAME = new QName(NS_URI_SOAP, "fault"); - - /** - * Construct a VcPortComponent from a PortComponentDesc. used for - * server-side configuration files generation. (server-config.wsdd) - * @param pcd PortComponentDesc to be used - * @param wsdl wsdl filename of the port - */ - public VcPortComponent(PortComponentDesc pcd, String wsdl) { - - // set name - name = pcd.getServiceName(); - - wsdlFilename = wsdl; - - // set bean or jaxRpcClassName - if (pcd.hasBeanImpl()) { - // set bean - SessionStatelessDesc ssb = ((SSBPortComponentDesc) pcd).getSessionStatelessDesc(); - bean = new VcBean(ssb); - } else { - jaxRpcClassName = pcd.getSIBClassname(); - } - // set methods - Method[] m = pcd.getServiceEndpointInterface().getMethods(); - for (int i = 0; i < m.length; i++) { - if (methods != null) { - methods += SEP; - } else { - methods = ""; - } - methods += m[i].getName(); - } - - // set style/use/namespace - Definition def = pcd.getServiceDesc().getWSDL().getDefinition(); - boolean portFound = false; - for (Iterator i = def.getServices().keySet().iterator(); i.hasNext() && !portFound;) { - Service s = def.getService((QName) i.next()); - Port p = s.getPort(pcd.getQName().getLocalPart()); - if (p != null) { - // we found the linked port - portFound = true; - - // search style attribute - style = getStyle(p); - - // search use attribute inside port - use = getUse(p); - } - } - namespace = def.getTargetNamespace(); - - // set handlers - List hs = pcd.getHandlers(); - for (Iterator itH = hs.iterator(); itH.hasNext();) { - HandlerDesc hd = (HandlerDesc) itH.next(); - handlers.add(new VcHandler(hd)); - } - - } - - /** - * @param p the wsdl port - * @return Returns the use to use with the port - */ - private static String getUse(Port p) { - String use = null; - - // use is declared inside - // - wsdl:definition/wsdl:binding/wsdl:operation/wsdl:input/soap:body@use - // - wsdl:definition/wsdl:binding/wsdl:operation/wsdl:output/soap:body@use - // - wsdl:definition/wsdl:binding/wsdl:operation/wsdl:fault/soap:fault@use - // take the first one. - List ops = p.getBinding().getBindingOperations(); - for (Iterator j = ops.iterator(); j.hasNext() && (use == null);) { - BindingOperation bop = (BindingOperation) j.next(); - - // search input - List inputExt = bop.getBindingInput().getExtensibilityElements(); - for (Iterator k = inputExt.iterator(); k.hasNext() && (use == null);) { - ExtensibilityElement ext = (ExtensibilityElement) k.next(); - if (ext.getElementType().equals(SOAP_BODY_QNAME)) { - SOAPBody sb = (SOAPBody) ext; - use = sb.getUse(); - } - } - - // search output - List outputExt = bop.getBindingOutput().getExtensibilityElements(); - for (Iterator k = outputExt.iterator(); k.hasNext() && (use == null);) { - ExtensibilityElement ext = (ExtensibilityElement) k.next(); - if (ext.getElementType().equals(SOAP_BODY_QNAME)) { - SOAPBody sb = (SOAPBody) ext; - use = sb.getUse(); - } - } - - // search faults - for (Iterator k = bop.getBindingFaults().keySet().iterator(); k.hasNext() && (use == null);) { - BindingFault bf = bop.getBindingFault((String) k.next()); - - // search soap:fault - List faultExt = bf.getExtensibilityElements(); - for (Iterator i = faultExt.iterator(); i.hasNext() && (use == null);) { - ExtensibilityElement ext = (ExtensibilityElement) i.next(); - if (ext.getElementType().equals(SOAP_FAULT_QNAME)) { - SOAPFault sf = (SOAPFault) ext; - use = sf.getUse(); - } - } - } - } - // use cannot be null as it is required ! - - return use; - } - - /** - * @param p the wsdl port - * @return Returns the style to use with the port - */ - private static String getStyle(Port p) { - String style = null; - - // we need to explore soap:operation and get the first that set a style attribute - List bindingOps = p.getBinding().getBindingOperations(); - for (Iterator i = bindingOps.iterator(); i.hasNext() && (style == null);) { - - BindingOperation bop = (BindingOperation) i.next(); - // browse soap:operation - List extElements = bop.getExtensibilityElements(); - for (Iterator j = extElements.iterator(); j.hasNext();) { - ExtensibilityElement ext = (ExtensibilityElement) j.next(); - if (ext.getElementType().equals(SOAP_OPERATION_QNAME)) { - - // Got a soap:operation element - SOAPOperation sop = (SOAPOperation) ext; - style = sop.getStyle(); - } - } - } - - // browse extensibility elements of port's binding - List soapElements = p.getBinding().getExtensibilityElements(); - for (Iterator i = soapElements.iterator(); i.hasNext() && (style == null);) { - - ExtensibilityElement ext = (ExtensibilityElement) i.next(); - if (ext.getElementType().equals(SOAP_BINDING_QNAME)) { - - // Got a soap:binding element - SOAPBinding soapb = (SOAPBinding) ext; - style = soapb.getStyle(); - } - - } - - if (style == null) { - style = DOCUMENT_STYLE; - } - - return style; - } - - /** - * Construct a VcPortComponent from a PortComponentRef. used for client-side - * configuration files generation. (client-config.wsdd) - * @param name Port Ref name - * @param hrs HandlerRef list - */ - public VcPortComponent(String name, List hrs) { - - // set name - this.name = name; - - // set handlers - for (Iterator itH = hrs.iterator(); itH.hasNext();) { - HandlerDesc hr = (HandlerDesc) itH.next(); - handlers.add(new VcHandler(hr)); - } - - } - - /** - * @return Returns the PortComponent name - */ - public String getName() { - return name; - } - - /** - * @return Returns the VcBean of this PortComponent - */ - public VcBean getBean() { - return bean; - } - - /** - * @return Returns the WSDL filename - */ - public String getWSDLFilename() { - return wsdlFilename; - } - - /** - * @return returns the exposed methods as a comma separated list - */ - public String getMethods() { - return methods; - } - - /** - * @return Returns a list of Handler/HandlerRef - */ - public Vector getHandlers() { - return handlers; - } - - /** - * @return Returns the JaxRpc implementation classname - */ - public String getJaxRpcClassName() { - return jaxRpcClassName; - } - - /** - * @return Returns the style. - */ - public String getStyle() { - return style; - } - - /** - * @return Returns the use. - */ - public String getUse() { - return use; - } - - /** - * @return Returns the namespace. - */ - public String getNamespace() { - return namespace; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcTypeMapping.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcTypeMapping.java deleted file mode 100644 index a78423433d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/VcTypeMapping.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Sauthier Guillaume - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.axis; - -import javax.xml.namespace.QName; - -/** - * Member of a VelocityContext. Contains information used to create a - * typeMapping WSDD tag. - * - * @author Guillaume SAUTHIER - */ -public abstract class VcTypeMapping { - - /** classname */ - private String classname; - - /** xml type QName */ - private QName xmlType; - - /** - * SOAP Encoding Style - */ - private static final String ENCODING_STYLE = "http://schemas.xmlsoap.org/soap/encoding/"; - - /** - * Create a VcTypeMapping holding typeMapping information. - * - * @param xml XML Qname of the type - * @param name Java name of the type - */ - public VcTypeMapping(QName xml, String name) { - classname = name; - xmlType = xml; - } - - /** - * @return Returns the Java classname - */ - public String getClassname() { - return classname; - } - - /** - * @return Returns the namespace of the QName - */ - public String getNamespaceURI() { - return xmlType.getNamespaceURI(); - } - - /** - * @return Returns the local-part of the QName - */ - public String getLocalPart() { - return xmlType.getLocalPart(); - } - - /** - * @return Returns the serializer factory for the mapping - */ - protected abstract String getSerializerFactory(); - - /** - * @return Returns the deserializer factory for the mapping - */ - protected abstract String getDeserializerFactory(); - - /** - * @return Returns the encoding style for the mapping - */ - protected String getEncodingStyle() { - return ENCODING_STYLE; - } - - /** - * @return Returns a String representation of the typeMapping - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(""); - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASEmitter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASEmitter.java deleted file mode 100644 index 9887d6ced3..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASEmitter.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import org.apache.axis.wsdl.toJava.Emitter; - - -/** - * JOnASEmitter to override Service extends in ServiceLocator Writer. - * - * @author Guillaume Sauthier - */ -public class JOnASEmitter extends Emitter { - - /** - * Constructs new JOnASEmitter. - */ - public JOnASEmitter() { - setFactory(new JOnASGeneratorFactory(this)); - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASGeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASGeneratorFactory.java deleted file mode 100644 index c44681fb13..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASGeneratorFactory.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import javax.wsdl.Definition; -import javax.wsdl.Service; - -import org.apache.axis.wsdl.gen.Generator; -import org.apache.axis.wsdl.gen.NoopGenerator; -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaDefinitionWriter; -import org.apache.axis.wsdl.toJava.JavaGeneratorFactory; - -/** - * JOnASGeneratorFactory returns our own JOnASServiceWriter in WSDL2Java process. - * - * @author Guillaume Sauthier - */ -public class JOnASGeneratorFactory extends JavaGeneratorFactory { - - /** - * Constructs a new JOnASGeneratorFactory associated with a given - * JOnASEmitter - * @param emitter the JOnASEmitter - */ - public JOnASGeneratorFactory(Emitter emitter) { - super(emitter); - } - - /** - * Method addDefinitionGenerators - */ - protected void addDefinitionGenerators() { - addGenerator(Definition.class, JavaDefinitionWriter.class); // for - // faults - } // addDefinitionGenerators - - /** - * @param service wsdl:service instance - * @param symbolTable SymbolTable - * @return Returns the JOnASServiceWriter when encoutering Service in - * SymbolTable - */ - public Generator getGenerator(Service service, SymbolTable symbolTable) { - if (include(service.getQName())) { - Generator writer = new JOnASServiceWriter(emitter, service, symbolTable); - ServiceEntry sEntry = symbolTable.getServiceEntry(service.getQName()); - serviceWriters.addStuff(writer, sEntry, symbolTable); - return serviceWriters; - } else { - return new NoopGenerator(); - } - } // getGenerator - - /** - * Method getGenerator - * - * @param type TypeEntry - * @param symbolTable SymbolTable - * @return a NoopGenerator (we don't need Types at this time, should be already generated) - */ - /* - public Generator getGenerator(TypeEntry type, SymbolTable symbolTable) { - return new NoopGenerator(); - } // getGenerator -*/ -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASInterfaceServiceImplWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASInterfaceServiceImplWriter.java deleted file mode 100644 index 4067ad419f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASInterfaceServiceImplWriter.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceIfaceWriter; - - -/** - * Used for service interface generation. - * The super class has protected constructor, so redefine it. - * @author Florent Benoit - */ -public class JOnASInterfaceServiceImplWriter extends JavaServiceIfaceWriter { - - /** - * Constructor. - * @param emitter JOnASEmitter - * @param sEntry ServiceEntry - * @param symbolTable SymbolTable - */ - public JOnASInterfaceServiceImplWriter(Emitter emitter, ServiceEntry sEntry, SymbolTable symbolTable) { - super(emitter, sEntry, symbolTable); - } - - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceImplWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceImplWriter.java deleted file mode 100644 index 91f62a8ff7..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceImplWriter.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceImplWriter; - - -/** - * ServiceImplWriter that substitues Axis' Service implementation with our own. - * - * @author Guillaume Sauthier - */ -public class JOnASServiceImplWriter extends JavaServiceImplWriter { - - /** - * Constructor. - * - * @param emitter JOnASEmitter - * @param sEntry ServiceEntry - * @param symbolTable SymbolTable - */ - public JOnASServiceImplWriter(Emitter emitter, ServiceEntry sEntry, SymbolTable symbolTable) { - super(emitter, sEntry, symbolTable); - } - - /** - * @return Returns "extends org.ow2.jonas.ws.axis.JService ". - */ - protected String getExtendsText() { - return "extends org.ow2.jonas.ws.axis.JService "; - //return "extends org.apache.axis.client.Service "; - } // getExtendsText - - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceWriter.java deleted file mode 100644 index 542bc1cfaf..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASServiceWriter.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import javax.wsdl.Service; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceWriter; - - -/** - * This is JOnASWsdl2java's Service Writer. It writes the following files, as - * appropriate: .java, Locator.java. - */ -public class JOnASServiceWriter extends JavaServiceWriter { - - /** - * Constructor. - * @param emitter JOnASEmitter - * @param service Service - * @param symbolTable SymbolTable - */ - public JOnASServiceWriter(Emitter emitter, Service service, SymbolTable symbolTable) { - super(emitter, service, symbolTable); - ServiceEntry sEntry = symbolTable.getServiceEntry(service.getQName()); - - if (sEntry.isReferenced()) { - serviceIfaceWriter = null; - // Write service interface if : - // - class is not available - // - emitter is not a J2eeEmitter (for backward compliance) - if (emitter instanceof JOnASWSEmitter) { - ClassLoader cl = ((JOnASWSEmitter) emitter).getClassLoader(); - String className = sEntry.getName(); - try { - cl.loadClass(className); - } catch (ClassNotFoundException cnfe) { - // class not available, generate it - serviceIfaceWriter = new JOnASInterfaceServiceImplWriter(emitter, sEntry, symbolTable); - } - } - - // overwrite Axis Writer - serviceImplWriter = new JOnASServiceImplWriter(emitter, sEntry, symbolTable); - } - } // ctor - -} // class JOnASServiceWriter diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASWSDL2Java.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASWSDL2Java.java deleted file mode 100644 index 49003d2c7d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/axis/wsdl2java/JOnASWSDL2Java.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.axis.wsdl2java; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import javax.wsdl.WSDLException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.generator.axis.AxisWsClientGenerator; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import org.apache.axis.wsdl.WSDL2Java; -import org.apache.axis.wsdl.gen.Parser; - - -/** - * Programmatic interface to the WSDL2Java Axis tool. - * @author Guillaume Sauthier - */ -public class JOnASWSDL2Java extends WSDL2Java { - - /** - * Field emitter - */ - private JOnASEmitter jEmitter; - - /** - * WSDL Localtion URL - */ - private String wsdlURL = null; - - /** - * Parsed WSDL Document - */ - private Document wsdlDoc = null; - - /** - * JOnASWSDL2Java Constructor. - */ - public JOnASWSDL2Java() { - super(); - // just cast it once - jEmitter = (JOnASEmitter) getParser(); - } - - /** - * @return Returns an extension of the Parser - */ - protected Parser createParser() { - return new JOnASEmitter(); - } // createParser - - /** - * Setup the JOnASWSDL2Java generator. - * @param wsc WsClientGenerator from wich the configuration will be read. - * @throws WsGenException Cannot parse WSDL Document - */ - private void setup(AxisWsClientGenerator wsc) throws WsGenException { - setupEmitter(wsc); - setupWSDL(wsc); - } - - /** - * Setup the WSDL Document before giving it to the Emitter. - * @param wsc configuration - * @throws WsGenException Cannot load WSDL - */ - private void setupWSDL(AxisWsClientGenerator wsc) throws WsGenException { - try { - if (wsc.getArchive().isPacked()) { - // URL Loading - String jarpath = wsc.getArchive().getRootFile().getCanonicalFile().toURL().toExternalForm(); - wsdlURL = "jar:" + jarpath + "!/" + wsc.getRef().getWsdlFileName(); - } else { - // File Loading - wsdlURL = new File(wsc.getArchive().getRootFile(), wsc.getRef().getWsdlFileName()).toURL() - .toExternalForm(); - } - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - wsdlDoc = builder.parse(wsdlURL); - } catch (ParserConfigurationException pce) { - throw new WsGenException("", pce); - } catch (IOException ioe) { - throw new WsGenException("", ioe); - } catch (SAXException se) { - throw new WsGenException("", se); - } - } - - /** - * Setup the JOnASEmitter instance. - * @param wsc configuration - */ - private void setupEmitter(AxisWsClientGenerator wsc) { - jEmitter.setDebug(wsc.getConfig().isDebug()); - jEmitter.setVerbose(wsc.getConfig().isVerbose()); - jEmitter.setNamespaceMap(convert2HashMap(wsc.getRef().getMappingFile().getMappings())); - jEmitter.setOutputDir(wsc.getSources().getPath()); - } - - /** - * Converts Hashtable to HashMap. - * @param m Hashtable to be converted - * @return HashMap converted - */ - private HashMap convert2HashMap(Map m) { - HashMap ns2pkg = new HashMap(); - for (Iterator i = m.keySet().iterator(); i.hasNext();) { - String ns = (String) i.next(); - ns2pkg.put(ns, m.get(ns)); - } - return ns2pkg; - } - - /** - * Setup and runs the JOnASEmitter. - * - * @param wsc Configuration. - * - * @throws WsGenException When WSDL has not been properly parsed - * @throws SAXException Cannot parse WSDL document - * @throws WSDLException When WSDL is incorrect - * @throws ParserConfigurationException Cannot Configure Parser - * @throws IOException Import URL cannot be loaded - */ - public void run(AxisWsClientGenerator wsc) throws WsGenException, IOException, SAXException, WSDLException, ParserConfigurationException { - setup(wsc); - parser.run(wsdlURL, wsdlDoc); - } // run - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSGeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSGeneratorFactory.java deleted file mode 100644 index 7fa10f88fe..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSGeneratorFactory.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.ews; - -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.ow2.jonas.generators.wsgen.generator.WsClientGenerator; -import org.ow2.jonas.generators.wsgen.generator.WsEndpointGenerator; - - - - -/** - * GeneratorFactory impl for EWS. - * - * @author Guillaume Sauthier - */ -public class EWSGeneratorFactory extends GeneratorFactory { - /** - * Return a new WsClientGenerator for the specific generation mecanism. - * - * @param serviceRef the service-ref containing information for client side - * generation process. - * @param ddm the XML modifier. - * @param archive the Archive to be modified - * - * @return a new WsClientGenerator. - * - * @throws GenBaseException When creation fails. - */ - public WsClientGenerator newGenerator(ServiceRefDesc serviceRef, - WsClientDDModifier ddm, Archive archive) throws GenBaseException { - return new EWSWsClientGenerator(getConfiguration(), serviceRef, ddm, archive); - } - - /** - * Return a new WsEndpointGenerator for the specific generation mecanism. - * - * @param serviceDesc the webservice-description containing information for - * server side generation process. - * @param ddm the XML modifier. - * @param wsddm webservices.xml DD modifier - * @param arch base archive - * - * @return a new WsEndpointGenerator. - * - * @throws GenBaseException When creation fails. - */ - public WsEndpointGenerator newGenerator(ServiceDesc serviceDesc, - WsEndpointDDModifier ddm, WebServicesDDModifier wsddm, Archive arch) throws GenBaseException { - return new EWSWsEndpointGenerator(getConfiguration(), serviceDesc, ddm, wsddm, arch); - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsClientGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsClientGenerator.java deleted file mode 100644 index 15b4480baf..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsClientGenerator.java +++ /dev/null @@ -1,311 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.ews; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.common.HandlerDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genbase.utils.XMLUtils; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.generator.WsClientGenerator; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.ServiceReferenceContextImpl; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.FullEmitter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.factory.JOnASClientGeneratorFactory; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.wscf.JOnASWSCFHandler; -import org.ow2.jonas.lib.loader.AbsModuleClassLoader; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import org.apache.axis.constants.Scope; -import org.apache.axis.wsdl.toJava.GeneratedFileInfo; -import org.apache.ws.ews.context.webservices.client.ServiceReferenceContext; - - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Generate WebServices client files dedicated to axis.
    • - * client-config.wsdd : if needed
    • java sources : from WSDL
    • - *
    - * @author Guillaume sauthier - */ -public class EWSWsClientGenerator extends WsClientGenerator { - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_EWS_PREFIX); - - /** - * jonas-init-param name for client configuration file declaration - */ - private static final String CLIENT_CONFIG = "axis.clientConfigFile"; - - /** generated config file */ - private File generated = null; - - /** - * WEB-INF/ prefix - */ - private static final String WEB_PREFIX = "WEB-INF/"; - - /** - * I18n - */ - private static I18n i18n = I18n.getInstance(EWSWsClientGenerator.class); - - /** - * Creates a new AxisWsClientGenerator - * @param config Generator Configuration - * @param srd WebService Endpoint description - * @param ddm Web DD Modifier - * @param archive client archive containing WSDL - * @throws GenBaseException When instanciation fails - */ - public EWSWsClientGenerator(Config config, ServiceRefDesc srd, WsClientDDModifier ddm, Archive archive) - throws GenBaseException { - super(config, srd, ddm, archive); - } - - /** - * generate axis specific files - * @throws WsGenException if WSDL cannot be found in archive - */ - public void generate() throws WsGenException { - - // the source generation is possible only when a - // WSDL Definition is provided - // we need : - // - a: wsdl-file - // - b: jaxrpc-mapping-file - // - c: service-interface != javax.xml.rpc.Service - // - d: some port-component-ref - // = ((a && b) && (c || d)) - - boolean hasWSDL = getRef().getWsdlFileName() != null; - - if (hasWSDL) { - // classpath creation - J2EEArchive j2eeArchive = (J2EEArchive) getArchive(); - AbsModuleClassLoader cl = (AbsModuleClassLoader) j2eeArchive.getModuleClassloader(); - getConfig().setClasspath(getConfig().getClasspath() + cl.getClasspath()); - - try { - // WSDL + mapping file - FullEmitter wsEmitter = new FullEmitter(); - wsEmitter.setMappingFileInputStream(getRef().getMappingFileURL().openStream()); - JOnASClientGeneratorFactory factory = new JOnASClientGeneratorFactory(); - factory.setEmitter(wsEmitter); - - wsEmitter.setTypeMappingVersion("1.3"); - wsEmitter.setScope(Scope.REQUEST); - wsEmitter.setWrapArrays(true); - - // Classloader to use to check if classes are present before - // generating java classes - wsEmitter.setClassLoader(cl); - - wsEmitter.setFactory(factory); - //wsEmitter.setNowrap(true); - - wsEmitter.setJOnASWsContext(prepareJ2EEWebServicesContext(getRef())); - - wsEmitter.setOutputDir(this.getSources().getCanonicalPath()); - wsEmitter.setAllowInvalidURL(true); - - wsEmitter.run(getRef().getLocalWSDLURL().toExternalForm()); - - generated = new File(findClientConfigFile(wsEmitter.getGeneratedFileInfo())); - - getLogger().log(BasicLevel.INFO, "Web Services Classes successfully generated by EWS."); - getLogger().log(BasicLevel.INFO, - "Webservice client WSDD file '" + generated + "' sucessfully generated by EWS."); - } catch (Exception e) { - String err = getI18n().getMessage("EWSWsClientGenerator.generate.WSDL2Java", e.getMessage()); - logger.log(BasicLevel.ERROR, err, e); - throw new WsGenException(err, e); - } - - } - - } - - /** - * @param generatedFileInfo files generated by Axis - * @return Returns the first filename that matches "deploy-client-*.wsdd" - */ - private static String findClientConfigFile(GeneratedFileInfo generatedFileInfo) { - List generated = generatedFileInfo.getFileNames(); - boolean found = false; - String filename = null; - for (Iterator i = generated.iterator(); i.hasNext() && !found;) { - String entry = (String) i.next(); - // */deploy-client-*.wsdd - if (entry.matches(".*deploy-client-\\d+\\.wsdd$")) { - found = true; - filename = entry; - } - } - return filename; - } - - /** - * @param ref the ServiceRefDesc to be used in J2EE WS Context - * @return Returns a configured J2EEWebServiceContext - */ - private JOnASJ2EEWebServicesContext prepareJ2EEWebServicesContext(ServiceRefDesc ref) { - - JOnASJ2EEWebServicesContext wsCtx = new JOnASJ2EEWebServicesContext(); - ServiceReferenceContext sRefCtx = new ServiceReferenceContextImpl(); - sRefCtx.setServiceQName(ref.getServiceQName()); - - for (Iterator i = ref.getHandlerRefs().iterator(); i.hasNext();) { - HandlerDesc handler = (HandlerDesc) i.next(); - sRefCtx.addHandler(new JOnASWSCFHandler(handler)); - } - wsCtx.addServiceReferenceContext(sRefCtx); - return wsCtx; - } - - /** - * Add generated files in given archive - * @param archive archive where generated fils will be added. - * @throws WsGenException when files cannot be added - */ - public void addFiles(Archive archive) throws WsGenException { - if (archive instanceof WebApp) { - WebApp web = (WebApp) archive; - archive.addDirectoryIn("WEB-INF/classes/", getClasses()); - archive.addDirectoryIn("WEB-INF/sources/", getSources()); - - if (generated != null) { - archive.addFileIn("WEB-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - boolean jwaFileExists = getArchive().getContainedFiles().contains("WEB-INF/jonas-web.xml"); - boolean jwaDocumentExists = web.getDescriptors().containsKey("WEB-INF/jonas-web.xml"); - if (!(jwaFileExists || jwaDocumentExists)) { - // jonas-web.xml doesn't exists - createEmptyJonasWeb((J2EEArchive) archive); - } - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, WEB_PREFIX + generated.getName()); - } - } else if (archive instanceof EjbJar) { - archive.addDirectory(getClasses()); - - if (generated != null) { - archive.addFileIn("META-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); - } - } else { - // We have a Client archive - Client client = (Client) archive; - archive.addDirectory(getClasses()); - - if (generated != null) { - archive.addFileIn("META-INF/", generated); - - // ensure the optionnal descriptor exists - if (!getModifier().hasJonasServiceRef()) { - boolean jcFileExists = getArchive().getContainedFiles().contains("META-INF/jonas-client.xml"); - boolean jcDocumentExists = client.getDescriptors().containsKey("META-INF/jonas-client.xml"); - if (!(jcFileExists || jcDocumentExists)) { - // jonas-client.xml doesn't exists - createEmptyJonasClient((J2EEArchive) archive); - } - Element jsr = getModifier().createJonasServiceRef(getRef().getServiceRefName()); - // update - getModifier().setElement(jsr); - - } - - // add init param - getModifier().addJonasInitParam(CLIENT_CONFIG, "META-INF/" + generated.getName()); - } - } - } - - /** - * Add an empty jonas-web.xml in given J2EEArchive. - * @param archive archive to be updated - */ - private void createEmptyJonasWeb(J2EEArchive archive) { - Document doc = XMLUtils.newJonasWeb(); - archive.getDescriptors().put("WEB-INF/jonas-web.xml", doc); - getModifier().setDocument(doc); - } - - /** - * Add an empty jonas-client.xml in given J2EEArchive. - * @param archive archive to be updated - */ - private void createEmptyJonasClient(J2EEArchive archive) { - Document doc = XMLUtils.newJonasClient(); - archive.getDescriptors().put("META-INF/jonas-client.xml", doc); - getModifier().setDocument(doc); - } - - /** - * @return Returns the i18n. - */ - public static I18n getI18n() { - return i18n; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsEndpointGenerator.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsEndpointGenerator.java deleted file mode 100644 index b89229700e..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/EWSWsEndpointGenerator.java +++ /dev/null @@ -1,251 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.generator.ews; - -import java.io.File; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.ws.JaxRpcPortComponentDesc; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.WsEndpointGenerator; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.FullEmitter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.factory.JOnASEndpointGeneratorFactory; -import org.ow2.jonas.lib.loader.AbsModuleClassLoader; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.w3c.dom.NodeList; - -import org.apache.axis.constants.Scope; -import org.apache.axis.wsdl.toJava.GeneratedFileInfo; -import org.apache.ws.ews.mapper.J2eeGeneratorFactory; -import org.apache.ws.ews.mapper.context.JAXRPCMapperContext; - - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Generate Axis specific config files for Endpoint - * @author Guillaume Sauthier - */ -public class EWSWsEndpointGenerator extends WsEndpointGenerator { - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_WSGEN_EWS_PREFIX); - - /** - * Axis Servlet classname - */ - private static final String AXIS_SERVLET_CLASS = "org.ow2.jonas.ws.axis.JAxisServlet"; - - /** - * init-param name for declaring server configuration file - */ - private static final String SERVER_CONFIG = "axis.serverConfigFile"; - - /** - * generated server-config file - */ - private File generatedServerConfig; - - /** - * I18n - */ - private static I18n i18n = I18n.getInstance(EWSWsClientGenerator.class); - - /** - * Creates a new AxisWsEndpointGenerator - * @param config Generator Configuration - * @param serviceDesc WebService Endpoint description - * @param ddm Web DD Modifier - * @param wsddm webservices.xml DD modifier - * @param arch base archive - * @throws GenBaseException When instanciation fails - */ - public EWSWsEndpointGenerator(Config config, ServiceDesc serviceDesc, WsEndpointDDModifier ddm, - WebServicesDDModifier wsddm, Archive arch) throws GenBaseException { - super(config, serviceDesc, ddm, wsddm, arch); - } - - /** - * Generate server side configuration file - * @throws WsGenException When generation fails - */ - public void generate() throws WsGenException { - - // 1. Generation of wsdd server file - String filename = null; - try { - FullEmitter emitter = new FullEmitter(); - - emitter.setWscontext(prepareJ2EEWebServicesContext(getService())); - emitter.setMappingFileInputStream(getService().getMappingFileURL().openStream()); - emitter.setOutputDir(this.getSources().getCanonicalPath()); - J2eeGeneratorFactory factory = new JOnASEndpointGeneratorFactory(); - factory.setEmitter(emitter); - emitter.setFactory(factory); - emitter.setTypeMappingVersion("1.3"); - emitter.setScope(Scope.REQUEST); - emitter.setWrapArrays(true); - - emitter.setServerSide(true); - emitter.run(getService().getLocalWSDLURL().toExternalForm()); - - generatedServerConfig = new File(findServerConfigFile(emitter.getGeneratedFileInfo())); - filename = generatedServerConfig.getName(); - getLogger().log(BasicLevel.INFO, - "Webservice endpoint WSDD file '" + filename + "' sucessfully generated by EWS."); - } catch (Exception e) { - String err = i18n.getMessage("EWSWsEndpointGenerator.generate.WSDL2Java", getService().getName(), e - .getMessage()); - logger.log(BasicLevel.ERROR, err, e); - throw new WsGenException(err, e); - } - - // 2. classpath creation - J2EEArchive j2eeArchive = (J2EEArchive) getArchive(); - AbsModuleClassLoader cl = (AbsModuleClassLoader) j2eeArchive.getModuleClassloader(); - getConfig().setClasspath(getConfig().getClasspath() + cl.getClasspath()); - - // 3. Remove existing servlets - // * remove the servlet used by the port (store security informations) - // * remove the associated servlet-mapping (store old url-pattern value) - for (Iterator i = getService().getPortComponents().iterator(); i.hasNext();) { - PortComponentDesc desc = (PortComponentDesc) i.next(); - - String urlPatternOld = null; - NodeList securityRoleRefs = null; - - // port-component linked to a servlet : - if (desc.hasJaxRpcImpl()) { - JaxRpcPortComponentDesc jax = (JaxRpcPortComponentDesc) desc; - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Removing servlet '" + jax.getSibLink() + "'"); - } - - // remove servlet mapping - urlPatternOld = getModifier().removeServletMapping(jax.getSibLink()); - - // remove old servlet but pick up its security role refs - //getModifier().removeServlet(jax.getSibLink()); - securityRoleRefs = getModifier().removeServletWithSecurity(jax.getSibLink()); - } - - // in all case : - // create a servlet with all needed configuration - // and use our own - getModifier().addServlet(desc.getSibLink(), AXIS_SERVLET_CLASS); - getModifier().addServletParam(desc.getSibLink(), SERVER_CONFIG, filename); - getModifier().addServletParam(desc.getSibLink(), "axis.development.system", "true"); - - String mapping = null; - if (desc.getEndpointURI() != null) { - // simple style - mapping = desc.getEndpointURI(); - } else { - // old style - mapping = "/" + desc.getName() + "/*"; - } - getModifier().addServletMapping(desc.getSibLink(), mapping); - - if (desc.hasJaxRpcImpl()) { - // add the first element in the servletToSecurityRoleRefs map - // (currently consider that only one servlet with security - // constraints was removed !! - if there were more, keep the - // constraints of the last removed) - if (securityRoleRefs != null) { - getModifier().addServletSecurityRoleRefs(desc.getSibLink(), securityRoleRefs); - } - // update url-pattern - getModifier().updateSecurityConstraint(urlPatternOld, mapping); - } - } - } - - /** - * @param generatedFileInfo files generated by Axis - * @return Returns the first filename that matches "deploy-server-*.wsdd" - */ - private static String findServerConfigFile(GeneratedFileInfo generatedFileInfo) { - List generated = generatedFileInfo.getFileNames(); - boolean found = false; - String filename = null; - for (Iterator i = generated.iterator(); i.hasNext() && !found;) { - String entry = (String) i.next(); - // */deploy-server-*.wsdd - if (entry.matches(".*deploy-server-\\d+\\.wsdd$")) { - found = true; - filename = entry; - } - } - return filename; - } - - /** - * @param service the ServiceDesc to be used in J2EE WS Context - * @return Returns a configured J2EEWebServiceContext - */ - private JAXRPCMapperContext prepareJ2EEWebServicesContext(ServiceDesc service) { - JOnASJ2EEWebServicesContext ctx = new JOnASJ2EEWebServicesContext(); - ctx.setServiceDesc(service); - return ctx; - } - - /** - * Add generated files in given Archive - * @param archive WebApp archive - * @throws WsGenException When cannot add files in archive - */ - public void addFiles(Archive archive) throws WsGenException { - // archive must be a WebApp - if (!(archive instanceof WebApp)) { - String err = getI18n().getMessage("AxisWsEndpointGenerator.addFiles.illegal", archive.getRootFile()); - throw new IllegalArgumentException(err); - } - - WebApp web = (WebApp) archive; - web.addFileIn("WEB-INF/", generatedServerConfig); - - web.addDirectoryIn("WEB-INF/classes/", getClasses()); - web.addDirectoryIn("WEB-INF/sources/", getSources()); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/JOnASJ2EEWebServicesContext.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/JOnASJ2EEWebServicesContext.java deleted file mode 100644 index 44a21bd77d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/JOnASJ2EEWebServicesContext.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee; - -import java.util.List; -import java.util.Vector; - -import javax.ejb.EJBContext; - -import org.ow2.jonas.deployment.ws.ServiceDesc; - -import org.apache.ws.ews.context.webservices.client.ServiceReferenceContext; -import org.apache.ws.ews.context.webservices.server.WSCFContext; -import org.apache.ws.ews.mapper.context.JAXRPCMapperContext; - - - -/** - * JOnAS implementation of the J2EEWebServiceContext from EWS - * @author Guillaume Sauthier - */ -public class JOnASJ2EEWebServicesContext implements JAXRPCMapperContext { - - /** - * list of service-ref (for client) - */ - private List srCtx; - - /** - * service description (for endpoint) - */ - private ServiceDesc serviceDesc = null; - - /** - * Default constructor - */ - public JOnASJ2EEWebServicesContext() { - super(); - this.srCtx = new Vector(); - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#getWSCFContext() - */ - public WSCFContext getWSCFContext() { - return null; - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#setWSCFContext(org.apache.geronimo.ews.ws4j2ee.context.webservices.server.interfaces.WSCFContext) - */ - public void setWSCFContext(WSCFContext wscfcontext) { - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#getJAXRPCMappingContext() - */ - public JAXRPCMapperContext getJAXRPCMappingContext() { - return null; - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#setJAXRPCMappingContext(org.apache.geronimo.ews.ws4j2ee.context.JaxRpcMapperContext) - */ - public void setJAXRPCMappingContext(JAXRPCMapperContext context) { - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#validate() - */ - public void validate() { - } - - /** - * @return Returns the serviceDesc. - */ - public ServiceDesc getServiceDesc() { - return serviceDesc; - } - - /** - * @param serviceDesc The serviceDesc to set. - */ - public void setServiceDesc(ServiceDesc serviceDesc) { - this.serviceDesc = serviceDesc; - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#getEJBDDContext() - */ - public EJBContext getEJBDDContext() { - return null; - } - - /** - * @deprecated not used by JOnAS Implementation - * @inheritDoc - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#setEJBDDContext(org.apache.geronimo.ews.ws4j2ee.context.j2eeDD.EJBContext) - */ - public void setEJBDDContext(EJBContext context) { - } - - /** - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#getServiceReferanceContext(int) - */ - public ServiceReferenceContext getServiceReferenceContext(int index) { - return (ServiceReferenceContext) srCtx.get(index); - } - - /** - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#addServiceReferanceContext(org.apache.geronimo.ews.ws4j2ee.context.webservices.client.interfaces.ServiceReferanceContext) - */ - public void addServiceReferenceContext(ServiceReferenceContext context) { - srCtx.add(context); - } - - /** - * @see org.apache.geronimo.ews.ws4j2ee.context.J2EEWebServiceContext#getServiceReferanceContextCount() - */ - public int getServiceReferenceContextCount() { - return srCtx.size(); - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/ServiceReferenceContextImpl.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/ServiceReferenceContextImpl.java deleted file mode 100644 index 2d4a33b698..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/ServiceReferenceContextImpl.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee; - -import java.util.ArrayList; -import java.util.List; - -import javax.xml.namespace.QName; - -import org.apache.ws.ews.context.webservices.client.ServiceReferenceContext; -import org.apache.ws.ews.context.webservices.server.WSCFHandler; - -/** - * Implementation of EWS ServiceReferenceContext for JOnAS. - * - * @author Guillaume Sauthier - */ -public class ServiceReferenceContextImpl implements ServiceReferenceContext { - - /** - * The service [to be used] QName - */ - private QName serviceQName = null; - - /** - * handlers to be applied for this service-ref - */ - private List handlers = null; - - /** - * Default constructor - */ - public ServiceReferenceContextImpl() { - super(); - handlers = new ArrayList(); - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#setServiceInterface(java.lang.String) - */ - public void setServiceInterface(String arg0) { - - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getServiceInterface() - */ - public String getServiceInterface() { - return null; - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getWsdlFile() - */ - public String getWsdlFile() { - return null; - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#setWsdlFile(java.lang.String) - */ - public void setWsdlFile(String arg0) { - - } - - /** - * Set the QName of the service to be used - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#setServiceQName(javax.xml.namespace.QName) - */ - public void setServiceQName(QName serviceQName) { - this.serviceQName = serviceQName; - } - - /** - * Returns the QName of the service to be used - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getServiceQName() - */ - public QName getServiceQName() { - return this.serviceQName; - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getJaxrpcMappingFile() - */ - public String getJaxrpcMappingFile() { - return null; - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#setJaxrpcMappingFile(java.lang.String) - */ - public void setJaxrpcMappingFile(String arg0) { - - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getServiceRefName() - */ - public String getServiceRefName() { - return null; - } - - /** - * @deprecated not used by JOnAS - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#setServiceRefName(java.lang.String) - */ - public void setServiceRefName(String arg0) { - - } - - /** - * Return the array of Handlers to be pplied for this service-ref - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#getHandlers() - */ - public WSCFHandler[] getHandlers() { - WSCFHandler[] handlersArray = new WSCFHandler[handlers.size()]; - return (WSCFHandler[]) handlers.toArray(handlersArray); - } - - /** - * Add a given handler to the list of applied handlers - * @param handler the added handler - * @see org.apache.ws.ews.context.webservices.client.ServiceReferenceContext#addHandler(org.apache.ws.ews.context.webservices.server.WSCFHandler) - */ - public void addHandler(WSCFHandler handler) { - this.handlers.add(handler); - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/FullEmitter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/FullEmitter.java deleted file mode 100644 index 4132d35253..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/FullEmitter.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS : Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; - -import org.apache.ws.ews.mapper.J2eeEmitter; - - -/** - * Allows to define more options like classloader. - * @author Florent Benoit - */ -public class FullEmitter extends J2eeEmitter implements JOnASWSEmitter { - - /** - * Classloader to use - */ - private ClassLoader classLoader = null; - - /** - * Generate bindings ? - */ - private boolean bindingGeneration = true; - - /** - * Generate Services ? - */ - private boolean serviceGeneration = true; - - /** - * Generate WSDDs ? - */ - private boolean deployGeneration = true; - - /** - * @return the classLoader. - */ - public ClassLoader getClassLoader() { - return classLoader; - } - - /** - * Set the classloader to use - * @param classLoader The classLoader to set. - */ - public void setClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - /** - * @see org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter#getJOnASWsContext() - */ - public JOnASJ2EEWebServicesContext getJOnASWsContext() { - return (JOnASJ2EEWebServicesContext) getWscontext(); - } - - /** - * @see org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter#setJOnASWsContext(org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext) - */ - public void setJOnASWsContext(JOnASJ2EEWebServicesContext context) { - setWscontext(context); - } - - /** - * @see org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter#hasBindingGeneration() - */ - public boolean hasBindingGeneration() { - return bindingGeneration; - } - - /** - * @see org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter#hasServiceGeneration() - */ - public boolean hasServiceGeneration() { - return serviceGeneration; - } - - /** - * @see org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter#hasDeployGeneration() - */ - public boolean hasDeployGeneration() { - return deployGeneration; - } - - /** - * @param bg generate bindings on/off - */ - public void setBindingGeneration(boolean bg) { - bindingGeneration = bg; - } - - /** - * @param sg generate services on/off - */ - public void setServiceGeneration(boolean sg) { - serviceGeneration = sg; - } - - /** - * @param dg generate deploy files on/off - */ - public void setDeployGeneration(boolean dg) { - deployGeneration = dg; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/JOnASWSEmitter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/JOnASWSEmitter.java deleted file mode 100644 index 698811deda..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/emitter/JOnASWSEmitter.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; - - -/** - * JOnAS interface for code Emitter - * @author Guillaume Sauthier - */ -public interface JOnASWSEmitter { - - /** - * @return Returns the Ws Context - */ - JOnASJ2EEWebServicesContext getJOnASWsContext(); - - /** - * @param context set the WS Context - */ - void setJOnASWsContext(JOnASJ2EEWebServicesContext context); - - /** - * @return true if needs to generate bindings - */ - boolean hasBindingGeneration(); - - /** - * @return true if needs to generate services - */ - boolean hasServiceGeneration(); - - /** - * @return true if needs to generate deploy files - */ - boolean hasDeployGeneration(); - - /** - * @return the classLoader. - */ - ClassLoader getClassLoader(); - - /** - * Set the classloader to use - * @param classLoader The classLoader to set. - */ - void setClassLoader(ClassLoader classLoader); -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASClientGeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASClientGeneratorFactory.java deleted file mode 100644 index 9fe3bff55d..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASClientGeneratorFactory.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.factory; - -import javax.wsdl.Binding; -import javax.wsdl.Definition; -import javax.wsdl.PortType; -import javax.wsdl.Service; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.J2EEClientDeployWriter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.JOnASEWSBindingWriter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.JOnASEWSServiceWriter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.JOnASTypeWriter; - -import org.apache.axis.wsdl.gen.Generator; -import org.apache.axis.wsdl.gen.NoopGenerator; -import org.apache.axis.wsdl.symbolTable.BindingEntry; -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.symbolTable.TypeEntry; -import org.apache.ws.ews.mapper.J2eeGeneratorFactory; - - -/** - * JOnAS implementation of J2EEGeneratorFactory for the client side. - * @author Guillaume Sauthier - */ -public class JOnASClientGeneratorFactory extends J2eeGeneratorFactory { - - /** - * @see org.apache.geronimo.ews.jaxrpcmapping.J2eeGeneratorFactory#addDefinitionGenerators() - */ - protected void addDefinitionGenerators() { - // for faults - // Do not emit Faults - //addGenerator(Definition.class, JavaDefinitionWriter.class); - // for deploy.wsdd - addGenerator(Definition.class, J2EEClientDeployWriter.class); - } - - /** - * Use the JOnASServiceWriter instead of default JavaServiceWriter - * @param service wsdl:service - * @param symbolTable symbol Table - * @return Returns the JOnASServiceWriter - */ - public Generator getGenerator(Service service, SymbolTable symbolTable) { - Generator writer = new JOnASEWSServiceWriter(emitter, service, symbolTable); - ServiceEntry sEntry = symbolTable.getServiceEntry(service.getQName()); - serviceWriters.addStuff(writer, sEntry, symbolTable); - return serviceWriters; - } - - /** - * Use the JOnASServiceWriter instead of default JavaServiceWriter - * @param binding wsdl:binding - * @param symbolTable symbol Table - * @return Returns the JOnASJ2eeBindingWriter - */ - public Generator getGenerator(Binding binding, SymbolTable symbolTable) { - Generator writer = new JOnASEWSBindingWriter(emitter, binding, symbolTable); - BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName()); - bindingWriters.addStuff(writer, bEntry, symbolTable); - return bindingWriters; - } - - /** - * Since this Generator doesn't output anything else than - * deploy-server.wsdd, other generator are NoopGenerator. - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(javax.wsdl.PortType, - * org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(PortType portType, SymbolTable symbolTable) { - return new NoopGenerator(); - } - - /** - * Use the JOnASTypeWriter instead of default JavaTypeWriter - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(org.apache.axis.wsdl.symbolTable.TypeEntry, - * org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(TypeEntry type, SymbolTable symbolTable) { - Generator writer = new JOnASTypeWriter(emitter, type, symbolTable); - typeWriters.addStuff(writer, type, symbolTable); - return typeWriters; - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASEndpointGeneratorFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASEndpointGeneratorFactory.java deleted file mode 100644 index 546760a4a8..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/factory/JOnASEndpointGeneratorFactory.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.factory; - -import javax.wsdl.Binding; -import javax.wsdl.Definition; -import javax.wsdl.PortType; -import javax.wsdl.Service; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.J2EEServerDeployWriter; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer.JOnASTypeWriter; - -import org.apache.axis.wsdl.gen.Generator; -import org.apache.axis.wsdl.gen.NoopGenerator; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.symbolTable.TypeEntry; -import org.apache.ws.ews.mapper.J2eeGeneratorFactory; - - - -/** - * JOnAS extension of the EWS J2EEGeneratorFactory that handles the jaxrpc mapping file. - * It only writes the deploy-server.wsdd ... - * @author Guillaume Sauthier - */ -public class JOnASEndpointGeneratorFactory extends J2eeGeneratorFactory { - - /** - * @see org.apache.geronimo.ews.jaxrpcmapping.J2eeGeneratorFactory#addDefinitionGenerators() - */ - protected void addDefinitionGenerators() { - addGenerator(Definition.class, J2EEServerDeployWriter.class); // for deploy.wsdd - } - - /** - * Since this Generator doesn't output anything else than deploy-server.wsdd, other generator are NoopGenerator. - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(javax.wsdl.Binding, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(Binding binding, SymbolTable symbolTable) { - return new NoopGenerator(); - } - - /** - * Since this Generator doesn't output anything else than deploy-server.wsdd, other generator are NoopGenerator. - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(javax.wsdl.PortType, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(PortType portType, SymbolTable symbolTable) { - return new NoopGenerator(); - } - - /** - * Since this Generator doesn't output anything else than deploy-server.wsdd, other generator are NoopGenerator. - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(javax.wsdl.Service, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(Service service, SymbolTable symbolTable) { - return new NoopGenerator(); - } - - /** - * Use the JOnASTypeWriter instead of default JavaTypeWriter - * @see org.apache.axis.wsdl.gen.GeneratorFactory#getGenerator(org.apache.axis.wsdl.symbolTable.TypeEntry, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - public Generator getGenerator(TypeEntry type, SymbolTable symbolTable) { - Generator writer = new JOnASTypeWriter(emitter, type, symbolTable); - typeWriters.addStuff(writer, type, symbolTable); - return typeWriters; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEClientDeployWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEClientDeployWriter.java deleted file mode 100644 index 163e17f988..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEClientDeployWriter.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2001-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Iterator; -import java.util.List; - -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.UnknownExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPBinding; -import javax.xml.namespace.QName; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.wscf.JOnASWSCFHandler; - -import org.apache.axis.Constants; -import org.apache.axis.constants.Style; -import org.apache.axis.constants.Use; -import org.apache.axis.utils.Messages; -import org.apache.axis.wsdl.symbolTable.BindingEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.Utils; -import org.apache.ws.ews.context.webservices.client.ServiceReferenceContext; -import org.apache.ws.ews.context.webservices.server.WSCFHandler; -import org.apache.ws.ews.context.webservices.server.WSCFInitParam; -import org.apache.ws.ews.context.webservices.server.WSCFSOAPHeader; - - -/** - * This is Wsdl2java's deploy Writer. It writes the deploy.wsdd file. - * Based on J2eeDeployWriter from Ias - * (http://cvs.apache.org/viewcvs.cgi/ws-axis/contrib/ews/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java?rev=1.13&view=markup) - */ -public class J2EEClientDeployWriter extends JOnASDeployWriter { - - /** - * WSDD Extension prefix - */ - private static final String WSDD_PREFIX = "deploy-client-"; - - /** - * Constructor. - * @param emitter J2eeEmitter - * @param definition wsdl:definition - * @param symbolTable SymbolTable - */ - public J2EEClientDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) { - super(emitter, definition, symbolTable); - } - - /** - * Generate deploy.wsdd. Only generate it if the emitter is generating - * server-side mappings. - * @throws IOException When generation fails - */ - public void generate() throws IOException { - - if (!emitter.isServerSide()) { - super.generate(); - } - } - - /** - * Write out deployment and undeployment instructions for each WSDL service - * @param pw PrintWriter - * @throws IOException IOException - */ - protected void writeDeployServices(PrintWriter pw) throws IOException { - - int sRefIndex = getJonasWSContext().getServiceReferenceContextCount(); - // should only have 1 service-ref - if (sRefIndex == 1) { - - ServiceReferenceContext ctx = getJonasWSContext().getServiceReferenceContext(0); - QName desiredServiceQName = ctx.getServiceQName(); - - Service myService = getDefinition().getService(desiredServiceQName); - - // Generate only if there is a Service - if (myService != null) { - pw.println(); - pw.println(" "); - pw.println(); - - for (Iterator portIterator = myService.getPorts().values().iterator(); portIterator.hasNext();) { - Port myPort = (Port) portIterator.next(); - BindingEntry bEntry = getSymbolTable().getBindingEntry(myPort.getBinding().getQName()); - - // If this isn't an SOAP binding, skip it - if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) { - continue; - } - - writeDeployPort(pw, myPort, bEntry, ctx); - } - } - } - } - - /** - * Write out deployment and undeployment instructions for given WSDL port - * @param pw PrintWriter - * @param port wsdl:port - * @param bEntry Axis BindingEntry - * @param ctx ServiceReferanceContext - */ - protected void writeDeployPort(PrintWriter pw, Port port, BindingEntry bEntry, ServiceReferenceContext ctx) { - - String serviceName = port.getName(); - boolean hasLiteral = bEntry.hasLiteral(); - boolean hasMIME = Utils.hasMIME(bEntry); - - - Use use = Use.DEFAULT; - String styleStr = ""; - Iterator iterator = bEntry.getBinding().getExtensibilityElements().iterator(); - - // iterate throught extensibilityElements of given Port's Binding - while (iterator.hasNext()) { - Object obj = iterator.next(); - - if (obj instanceof SOAPBinding) { - use = Use.ENCODED; - } else if (obj instanceof UnknownExtensibilityElement) { - - // TODO After WSDL4J supports soap12, change this code - UnknownExtensibilityElement unkElement = (UnknownExtensibilityElement) obj; - QName name = unkElement.getElementType(); - - if (name.getNamespaceURI().equals(Constants.URI_WSDL12_SOAP) && name.getLocalPart().equals("binding")) { - use = Use.ENCODED; - } - } - } - - if (getSymbolTable().isWrapped()) { - styleStr = " style=\"" + Style.WRAPPED + "\""; - use = Use.LITERAL; - } else { - styleStr = " style=\"" + bEntry.getBindingStyle().getName() + "\""; - if (hasLiteral) { - use = Use.LITERAL; - } - } - - String useStr = " use=\"" + use + "\""; - - pw.println(" "); - - // MIME attachments don't work with multiref, so turn it off. - if (hasMIME) { - pw.println(" "); - } - // force JAXRPC 1.1 Type Mapping - pw.println(" "); - - //writeDeployBinding(pw, bEntry); - writeDeployTypes(pw, bEntry.getBinding(), hasLiteral, hasMIME, use); - - WSCFHandler[] handlers = ctx.getHandlers(); - if (handlers != null && handlers.length != 0) { - pw.println(" "); - for (int i = 0; i < handlers.length; i++) { - writeHandlerForPort(pw, (JOnASWSCFHandler) handlers[i], port); - } - pw.println(" "); - } - pw.println(" "); - } - - /** - * Writes out a client-side handler - * @param pw PrintWriter - * @param handler EWS Handler description - * @param port wsdl:port - */ - private void writeHandlerForPort(PrintWriter pw, JOnASWSCFHandler handler, Port port) { - - /** - * If handler contains no port-names, add the handler - * else, check if the handler is applied to the current port - */ - List ports = handler.getPortNames(); - if (ports.isEmpty()) { - // handler applied for all ports - writeHandler(pw, handler); - } else if (ports.contains(port.getName())) { - // handler applied for current port - writeHandler(pw, handler); - } - } - /** - * Writes out a client-side handler - * @param pw PrintWriter - * @param handler EWS Handler description - */ - private void writeHandler(PrintWriter pw, JOnASWSCFHandler handler) { - - pw.println(" "); - WSCFInitParam[] param = handler.getInitParam(); - for (int i = 0; i < param.length; i++) { - pw.println(" "); - } - WSCFSOAPHeader[] headers = handler.getSoapHeader(); - for (int i = 0; i < headers.length; i++) { - pw.println("
    "); - } - pw.println(" "); - String[] roles = handler.getSoapRole(); - for (int i = 0; i < roles.length; i++) { - pw.println(" "); - } - } - - /** - * @return Returns the filename prefix - */ - protected String getPrefix() { - return WSDD_PREFIX; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEServerDeployWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEServerDeployWriter.java deleted file mode 100644 index 4e4ee0079a..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/J2EEServerDeployWriter.java +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright 2001-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.wsdl.Binding; -import javax.wsdl.BindingOperation; -import javax.wsdl.Definition; -import javax.wsdl.Operation; -import javax.wsdl.OperationType; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.UnknownExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPBinding; -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.HandlerDesc; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.SSBPortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; - -import org.apache.axis.Constants; -import org.apache.axis.constants.Scope; -import org.apache.axis.constants.Style; -import org.apache.axis.constants.Use; -import org.apache.axis.deployment.wsdd.WSDDConstants; -import org.apache.axis.utils.JavaUtils; -import org.apache.axis.utils.Messages; -import org.apache.axis.wsdl.symbolTable.BindingEntry; -import org.apache.axis.wsdl.symbolTable.Parameters; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.Utils; - - - -/** - * This is Wsdl2java's deploy Writer. It writes the server-deploy-XX.wsdd file. - * Based on J2eeDeployWriter from Ias - * (http://cvs.apache.org/viewcvs.cgi/ws-axis/contrib/ews/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java?rev=1.13&view=markup) - */ -public class J2EEServerDeployWriter extends JOnASDeployWriter { - - /** - * WSDD Extension prefix - */ - private static final String WSDD_PREFIX = "deploy-server-"; - - /** - * Axis parameter name for SE interface name - */ - private static final String SERVICE_ENDPOINT_INTERFACE_NAME = "serviceEndpointInterfaceName"; - - /** - * Axis parameter name for SE jndi name - */ - private static final String SERVICE_ENDPOINT_JNDI_NAME = "serviceEndpointJndiName"; - - /** - * Constructor. - * @param emitter J2EEEmitter - * @param definition Definition - * @param symbolTable SymbolTable - */ - public J2EEServerDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) { - super(emitter, definition, symbolTable); - } // ctor - - /** - * Write out deployment and undeployment instructions for each WSDL service - * @param pw PrintWriter - * @throws IOException when services cannot be created - */ - protected void writeDeployServices(PrintWriter pw) throws IOException { - - // deploy the ports on each service - Map serviceMap = getDefinition().getServices(); - ServiceDesc desc = getJonasWSContext().getServiceDesc(); - - for (Iterator mapIterator = serviceMap.values().iterator(); mapIterator.hasNext();) { - Service myService = (Service) mapIterator.next(); - - pw.println(); - pw.println(" "); - pw.println(); - - for (Iterator portIterator = myService.getPorts().values().iterator(); portIterator.hasNext();) { - Port myPort = (Port) portIterator.next(); - BindingEntry bEntry = getSymbolTable().getBindingEntry(myPort.getBinding().getQName()); - - // If this isn't an SOAP binding, skip it - if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) { - continue; - } - - PortComponentDesc portDesc = findPortComponentDesc(desc, myPort); - - if (portDesc != null) { - // write ports described by the current ServiceDesc - writeDeployPort(pw, myService, bEntry, portDesc); - } - } - } - } // writeDeployServices - - /** - * @param desc JOnAS Service Description - * @param myPort wsdl:port - * @return Returns the JOnAS PortComponentDesc associated with the given wsdl:port - */ - private static PortComponentDesc findPortComponentDesc(ServiceDesc desc, Port myPort) { - - PortComponentDesc port = null; - List ports = desc.getPortComponents(); - for (Iterator i = ports.iterator(); i.hasNext() && port == null;) { - PortComponentDesc pcd = (PortComponentDesc) i.next(); - if (pcd.getQName().getLocalPart().equals(myPort.getName())) { - port = pcd; - } - } - return port; - } - - /** - * Write out deployment and undeployment instructions for given WSDL port - * @param pw PrintWriter - * @param service wsdl:service - * @param bEntry BindingEntry - * @param portComponentDesc JOnAS Port representation - * @throws IOException IOException - */ - protected void writeDeployPort(PrintWriter pw, Service service, BindingEntry bEntry, - PortComponentDesc portComponentDesc) throws IOException { - - String serviceName = portComponentDesc.getServiceName(); - boolean hasLiteral = bEntry.hasLiteral(); - boolean hasMIME = Utils.hasMIME(bEntry); - String prefix = WSDDConstants.NS_PREFIX_WSDD_JAVA; - String styleStr = ""; - Iterator iterator = bEntry.getBinding().getExtensibilityElements().iterator(); - - // iterate throught extensibilityElements of given Port's Binding - while (iterator.hasNext()) { - Object obj = iterator.next(); - - if (obj instanceof SOAPBinding) { - use = Use.ENCODED; - } else if (obj instanceof UnknownExtensibilityElement) { - - // TODO After WSDL4J supports soap12, change this code - UnknownExtensibilityElement unkElement = (UnknownExtensibilityElement) obj; - QName name = unkElement.getElementType(); - - if (name.getNamespaceURI().equals(Constants.URI_WSDL12_SOAP) && name.getLocalPart().equals("binding")) { - use = Use.ENCODED; - } - } - } - - if (getSymbolTable().isWrapped()) { - styleStr = " style=\"" + Style.WRAPPED + "\""; - use = Use.LITERAL; - } else { - styleStr = " style=\"" + bEntry.getBindingStyle().getName() + "\""; - - if (hasLiteral) { - use = Use.LITERAL; - } - } - - String useStr = " use=\"" + use + "\""; - - if (portComponentDesc.hasBeanImpl()) { - pw.println(" "); - - SSBPortComponentDesc ssbPCD = (SSBPortComponentDesc) portComponentDesc; - - pw.println(" "); - pw.println(" "); - - } else { - pw.println(" "); - pw.println(" "); - - } - - pw.println(" "); - pw.println(" "); - pw.println(" "); - - // MIME attachments don't work with multiref, so turn it off. - if (hasMIME) { - pw.println(" "); - } - - writeDeployBinding(pw, bEntry); - writeDeployTypes(pw, bEntry.getBinding(), hasLiteral, hasMIME, use); - - List handlers = portComponentDesc.getHandlers(); - if (!handlers.isEmpty()) { - pw.println(" "); - for (Iterator i = handlers.iterator(); i.hasNext();) { - writeHandler(pw, (HandlerDesc) i.next()); - } - pw.println(" "); - } - pw.println(" "); - } - - /** - * Write out deployment instructions for given WSDL binding - * @param pw PrintWriter - * @param bEntry BindingEntry - * @throws IOException IOException - */ - protected void writeDeployBinding(PrintWriter pw, BindingEntry bEntry) throws IOException { - - Binding binding = bEntry.getBinding(); - - pw.println(" "); - // force JAXRPC 1.1 Type Mapping - pw.println(" "); - - HashSet allowedMethods = new HashSet(); - - if (!emitter.isSkeletonWanted()) { - Iterator operationsIterator = binding.getBindingOperations().iterator(); - - for (; operationsIterator.hasNext();) { - BindingOperation bindingOper = (BindingOperation) operationsIterator.next(); - Operation operation = bindingOper.getOperation(); - OperationType type = operation.getStyle(); - String javaOperName = JavaUtils.xmlNameToJava(operation.getName()); - - // These operation types are not supported. The signature - // will be a string stating that fact. - if ((type == OperationType.NOTIFICATION) || (type == OperationType.SOLICIT_RESPONSE)) { - continue; - } - - allowedMethods.add(javaOperName); - - // We pass "" as the namespace argument because we're just - // interested in the return type for now. - Parameters params = getSymbolTable().getOperationParameters(operation, "", bEntry); - - if (params != null) { - - // Get the operation QName - QName elementQName = Utils.getOperationQName(bindingOper, bEntry, getSymbolTable()); - - // Get the operation's return QName and type - QName returnQName = null; - QName returnType = null; - - if (params.returnParam != null) { - returnQName = params.returnParam.getQName(); - returnType = Utils.getXSIType(params.returnParam); - } - - // Get the operations faults - Map faultMap = bEntry.getFaults(); - ArrayList faults = null; - - if (faultMap != null) { - faults = (ArrayList) faultMap.get(bindingOper); - } - - String soapAction = Utils.getOperationSOAPAction(bindingOper); - - // Write the operation metadata - writeOperation(pw, javaOperName, elementQName, returnQName, returnType, params, faults, soapAction); - } - } - } - - pw.print(" "); - } else { - boolean first = true; - - for (Iterator i = allowedMethods.iterator(); i.hasNext();) { - String method = (String) i.next(); - - if (first) { - pw.print(method); - - first = false; - } else { - pw.print(" " + method); - } - } - - pw.println("\"/>"); - } - - Scope scope = emitter.getScope(); - - if (scope != null) { - pw.println(" "); - } - } - - /** - * @param pw PrintWriter - * @param handler the server Handler to write - */ - protected void writeHandler(PrintWriter pw, HandlerDesc handler) { - pw.println(" "); - Map params = handler.getInitParams(); - for (Iterator i = params.keySet().iterator(); i.hasNext();) { - String pName = (String) i.next(); - pw.println(" "); - } - List headers = handler.getSOAPHeaders(); - for (Iterator i = headers.iterator(); i.hasNext();) { - QName sh = (QName) i.next(); - pw.println("
    "); - } - pw.println(" "); - List roles = handler.getSOAPRoles(); - for (Iterator i = roles.iterator(); i.hasNext();) { - String role = (String) i.next(); - pw.println(" "); - } - } - - /** - * @return Returns "deploy-server-" - */ - protected String getPrefix() { - return WSDD_PREFIX; - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASDeployWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASDeployWriter.java deleted file mode 100644 index 016b2af661..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASDeployWriter.java +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright 2001-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.wsdl.Binding; -import javax.wsdl.Definition; -import javax.wsdl.OperationType; -import javax.xml.namespace.QName; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.JOnASJ2EEWebServicesContext; -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter; - -import org.apache.axis.deployment.wsdd.WSDDConstants; -import org.apache.axis.constants.Use; -import org.apache.axis.utils.Messages; -import org.apache.axis.wsdl.symbolTable.FaultInfo; -import org.apache.axis.wsdl.symbolTable.Parameter; -import org.apache.axis.wsdl.symbolTable.Parameters; -import org.apache.axis.wsdl.symbolTable.SchemaUtils; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.symbolTable.TypeEntry; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaWriter; -import org.apache.axis.wsdl.toJava.Utils; - - - -/** - * JOnAS Base DeployWriter. It's a placeholder for commonly used methods and fields. - * @author Guillaume Sauthier - * Based on J2eeDeployWriter from Ias - * (http://cvs.apache.org/viewcvs.cgi/ws-axis/contrib/ews/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java?rev=1.13&view=markup) - */ -public abstract class JOnASDeployWriter extends JavaWriter { - - /** - * JOnASJ2EEWebServicesContext storing JOnAS specific info. - */ - private JOnASJ2EEWebServicesContext jonasWSContext; - - /** - * WSDD Extension suffix - */ - protected static final String WSDD_SUFFIX = ".wsdd"; - - /** - * count generated files - */ - private static int count = 0; - - /** - * Definition base used to write deploy file - */ - private Definition definition = null; - - /** - * Symbol Table to use - */ - private SymbolTable symbolTable = null; - - /** Field use */ - protected Use use = Use.DEFAULT; - - /** - * Constructor. - * @param emitter J2EE Emitter - * @param definition Current Definition - * @param symbolTable SymbolTable - */ - public JOnASDeployWriter(Emitter emitter, Definition definition, SymbolTable symbolTable) { - - super(emitter, "deploy"); - this.definition = definition; - this.symbolTable = symbolTable; - if (emitter instanceof JOnASWSEmitter) { - this.jonasWSContext = ((JOnASWSEmitter) emitter).getJOnASWsContext(); - } - if (jonasWSContext == null) { - throw new RuntimeException("jonasWSContext can not be null"); - } - } - - /** - * @return Returns the fully-qualified name of the deploy.wsdd file to be generated. - */ - protected String getFileName() { - // put directly in "output" directory - String dir = emitter.getNamespaces().getAsDir(""); - return dir + getPrefix() + getCount() + WSDD_SUFFIX; - } - - /** - * Replace the default file header with the deployment doc file header. - * - * @param pw PrintWriter where descriptor has to be written - * @throws IOException not thrown - */ - protected void writeFileHeader(PrintWriter pw) throws IOException { - - pw.println(Messages.getMessage("deploy00")); - pw.println(Messages.getMessage("deploy02")); - pw.println(Messages.getMessage("deploy03")); - pw.println(Messages.getMessage("deploy05")); - pw.println(Messages.getMessage("deploy06")); - pw.println(Messages.getMessage("deploy07")); - pw.println(Messages.getMessage("deploy09")); - pw.println(); - pw.println(""); - } - - /** - * Write the body of the deploy.wsdd file. - * - * @param pw PrintWriter - * @throws IOException thrown by writeDeployServices - */ - protected void writeFileBody(PrintWriter pw) throws IOException { - writeDeployServices(pw); - pw.println(""); - } - - /** - * @return Returns the filename prefix. - */ - protected abstract String getPrefix(); - - /** - * Writes te list of wsdd:service - * @param pw PrintWriter - * @throws IOException implementation may throw IOException - */ - protected abstract void writeDeployServices(PrintWriter pw) throws IOException; - - /** - * Raw routine that writes out the typeMapping. - * @param pw PrintWriter - * @param namespaceURI xml type namespace - * @param localPart xml type localpart - * @param javaType java classname - * @param serializerFactory java serializer factory classname - * @param deserializerFactory java deserializer factory classname - * @param encodingStyle encoding style - */ - protected void writeTypeMapping(PrintWriter pw, String namespaceURI, String localPart, String javaType, - String serializerFactory, String deserializerFactory, String encodingStyle) { - - pw.println(" "); - } - - /** - * Raw routine that writes out the operation and parameters. - * - * @param pw PrintWriter - * @param javaOperName java method name - * @param elementQName wsdl operation qname - * @param returnQName wsdl return type qname - * @param returnType java return type classname ? - * @param params list of params used by this operation - * @param faults list of faults thrown by this operation - * @param soapAction soapAction value - */ - protected void writeOperation(PrintWriter pw, String javaOperName, - QName elementQName, QName returnQName, - QName returnType, Parameters params, - ArrayList faults, String soapAction) { - - pw.print(" "); - - Vector paramList = params.list; - - for (int i = 0; i < paramList.size(); i++) { - Parameter param = (Parameter) paramList.elementAt(i); - - // Get the parameter name QName and type QName - QName paramQName = param.getQName(); - QName paramType = Utils.getXSIType(param); - - pw.print(" "); - } - - if (faults != null) { - for (Iterator iterator = faults.iterator(); iterator.hasNext();) { - FaultInfo faultInfo = (FaultInfo) iterator.next(); - QName faultQName = faultInfo.getQName(); - - if (faultQName != null) { - String className = - Utils.getFullExceptionName(faultInfo.getMessage(), - symbolTable); - - pw.print(" "); - } - } - } - - pw.println(" "); - } - - /** - * Write out bean mappings for each type - * @param pw PrintWriter - * @param binding wsdl:binding - * @param hasLiteral has a literal type ? - * @param hasMIME has MIME type ? - * @param use Use - */ - protected void writeDeployTypes(PrintWriter pw, Binding binding, boolean hasLiteral, boolean hasMIME, Use use) { - - pw.println(); - - if (hasMIME) { - QName bQName = binding.getQName(); - - writeTypeMapping(pw, bQName.getNamespaceURI(), "DataHandler", "javax.activation.DataHandler", - "org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory", - "org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory", use.getEncoding()); - } - - boolean useJAF = false; - - Map types = getSymbolTable().getTypeIndex(); - Collection typeCollection = types.values(); - for (Iterator i = typeCollection.iterator(); i.hasNext();) { - TypeEntry type = (TypeEntry) i.next(); - - // Note this same check is repeated in JavaStubWriter. - boolean process = true; - - // 1) Don't register types we shouldn't - if (!Utils.shouldEmit(type)) { - process = false; - } - - if (process) { - String namespaceURI = type.getQName().getNamespaceURI(); - String localPart = type.getQName().getLocalPart(); - String javaType = type.getName(); - String serializerFactory; - String deserializerFactory; - String encodingStyle = ""; - QName innerType = null; - - if (!hasLiteral) { - encodingStyle = use.getEncoding(); - } - - if (javaType.endsWith("[]")) { - if (SchemaUtils.isListWithItemType(type.getNode())) { - serializerFactory = "org.apache.axis.encoding.ser.SimpleListSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.SimpleListDeserializerFactory"; - } else { - serializerFactory = "org.apache.axis.encoding.ser.ArraySerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.ArrayDeserializerFactory"; - innerType = type.getComponentType(); - } - } else if ((type.getNode() != null) - && (Utils.getEnumerationBaseAndValues(type.getNode(), getSymbolTable()) != null)) { - serializerFactory = "org.apache.axis.encoding.ser.EnumSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.EnumDeserializerFactory"; - } else if (type.isSimpleType()) { - serializerFactory = "org.apache.axis.encoding.ser.SimpleSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.SimpleDeserializerFactory"; - } else if (type.getBaseType() != null) { - serializerFactory = "org.apache.axis.encoding.ser.SimpleSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.SimpleDeserializerFactory"; - } else { - serializerFactory = "org.apache.axis.encoding.ser.BeanSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.BeanDeserializerFactory"; - } - - List jafType = new Vector(); - jafType.add("java.awt.Image"); - jafType.add("javax.xml.transform.Source"); - jafType.add("javax.mail.internet.MimeMultipart"); - if (jafType.contains(javaType)) { - serializerFactory = "org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"; - deserializerFactory = "org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"; - useJAF = true; - } - - if (innerType == null) { - // no arrays - writeTypeMapping(pw, namespaceURI, localPart, javaType, - serializerFactory, deserializerFactory, - encodingStyle); - } else { - // arrays - writeArrayTypeMapping(pw, namespaceURI, localPart, javaType, - encodingStyle, innerType); - } - } - } - - if (useJAF) { - // mime don't work with ref - pw.println(" "); - } - } - - - /** - * Raw routine that writes out the arrayMapping. - * @param pw PrintWriter - * @param namespaceURI xml type namespace - * @param localPart xml type localpart - * @param javaType java classname - * @param encodingStyle encoding style - * @param innerType array component type QName - */ - protected void writeArrayTypeMapping( - PrintWriter pw, String namespaceURI, String localPart, String javaType, String encodingStyle, QName innerType) { - - pw.println(" "); - } - - /** - * Method getModeString - * - * @param mode Parameter mode (IN, INOUT, OUT) - * @return Parameter Mode String representation - */ - public String getModeString(byte mode) { - - if (mode == Parameter.IN) { - return "IN"; - } else if (mode == Parameter.INOUT) { - return "INOUT"; - } else { - return "OUT"; - } - } - - /** - * Method getPrintWriter - * @param filename file to open - * @return Returns the printWriter for the file - * @throws IOException When File cannot be open/written - */ - protected PrintWriter getPrintWriter(String filename) throws IOException { - - File file = new File(filename); - File parent = new File(file.getParent()); - - parent.mkdirs(); - - FileOutputStream out = new FileOutputStream(file); - OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8"); - - return new PrintWriter(writer); - } - - /** - * @return Returns the count. - */ - public static int getCount() { - return count++; - } - - /** - * @return Returns the definition. - */ - public Definition getDefinition() { - return definition; - } - - /** - * @return Returns the jonasWSContext. - */ - public JOnASJ2EEWebServicesContext getJonasWSContext() { - return jonasWSContext; - } - - /** - * @return Returns the symbolTable. - */ - public SymbolTable getSymbolTable() { - return symbolTable; - } - - /** - * Store operation type String representation - */ - private static Map mepStrings = new HashMap(); - static { - mepStrings.put(OperationType.REQUEST_RESPONSE, "request-response"); - mepStrings.put(OperationType.ONE_WAY, "oneway"); - } - - /** - * @param mep OperationType - * @return Returns the String representation of this type - */ - private String getMepString(OperationType mep) { - return (String) mepStrings.get(mep); - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSBindingWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSBindingWriter.java deleted file mode 100644 index e603255d0f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSBindingWriter.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import javax.wsdl.Binding; - -import org.apache.axis.wsdl.gen.Generator; -import org.apache.axis.wsdl.symbolTable.BindingEntry; -import org.apache.axis.wsdl.symbolTable.PortTypeEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.ws.ews.mapper.J2eeBindingWriter; -import org.apache.ws.ews.mapper.J2eeEmitter; - - -/** - * Extends EWS J2eeBindingWriter to generate port interface only when needed. - * @author Guillaume Sauthier - */ -public class JOnASEWSBindingWriter extends J2eeBindingWriter implements Generator { - - /** - * @param emitter J2eeEmitter - * @param binding wsdl:binding containing port-interface infos - * @param st Entry table - */ - public JOnASEWSBindingWriter(J2eeEmitter emitter, Binding binding, SymbolTable st) { - super(emitter, binding, st); - } - - /** - * @see org.apache.geronimo.ews.jaxrpcmapping.J2eeBindingWriter#getJavaInterfaceWriter(org.apache.geronimo.ews.jaxrpcmapping.J2eeEmitter, org.apache.axis.wsdl.symbolTable.PortTypeEntry, org.apache.axis.wsdl.symbolTable.BindingEntry, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - protected Generator getJavaInterfaceWriter(J2eeEmitter emitter, PortTypeEntry ptEntry, BindingEntry bEntry, SymbolTable st) { - ClassLoader cl = ((org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter) emitter).getClassLoader(); - try { - cl.loadClass(ptEntry.getName()); - } catch (ClassNotFoundException cnfe) { - // class not available, generate it - return super.getJavaInterfaceWriter(emitter, ptEntry, bEntry, symbolTable); - } - return null; - } - - /** - * @see org.apache.geronimo.ews.jaxrpcmapping.J2eeBindingWriter#getJavaImplWriter(org.apache.geronimo.ews.jaxrpcmapping.J2eeEmitter, org.apache.axis.wsdl.symbolTable.BindingEntry, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - protected Generator getJavaImplWriter(J2eeEmitter arg0, BindingEntry arg1, - SymbolTable arg2) { - return null; - } - - /** - * @see org.apache.geronimo.ews.jaxrpcmapping.J2eeBindingWriter#getJavaSkelWriter(org.apache.geronimo.ews.jaxrpcmapping.J2eeEmitter, org.apache.axis.wsdl.symbolTable.BindingEntry, org.apache.axis.wsdl.symbolTable.SymbolTable) - */ - protected Generator getJavaSkelWriter(J2eeEmitter arg0, BindingEntry arg1, - SymbolTable arg2) { - return null; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceImplWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceImplWriter.java deleted file mode 100644 index ab0b69c38c..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceImplWriter.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceImplWriter; - - -/** - * ServiceImplWriter that substitues Axis' Service implementation with our own. - * - * @author Guillaume Sauthier - */ -public class JOnASEWSServiceImplWriter extends JavaServiceImplWriter { - - /** - * Constructor. - * - * @param emitter JOnASEmitter - * @param sEntry ServiceEntry - * @param symbolTable SymbolTable - */ - public JOnASEWSServiceImplWriter(Emitter emitter, ServiceEntry sEntry, SymbolTable symbolTable) { - super(emitter, sEntry, symbolTable); - } - - /** - * @return Returns "extends org.ow2.jonas.ws.axis.JService ". - */ - protected String getExtendsText() { - return "extends org.ow2.jonas.ws.axis.JService "; - } // getExtendsText - - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceIntfWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceIntfWriter.java deleted file mode 100644 index 8c2b8f1b85..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceIntfWriter.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceIfaceWriter; - - -/** - * Used for service interface generation. - * The super class has protected constructor, so redefine it. - * @author Florent Benoit - */ -public class JOnASEWSServiceIntfWriter extends JavaServiceIfaceWriter { - - /** - * Constructor. - * @param emitter JOnASEmitter - * @param sEntry ServiceEntry - * @param symbolTable SymbolTable - */ - public JOnASEWSServiceIntfWriter(Emitter emitter, ServiceEntry sEntry, SymbolTable symbolTable) { - super(emitter, sEntry, symbolTable); - } - - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceWriter.java deleted file mode 100644 index 79afc96611..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASEWSServiceWriter.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import javax.wsdl.Service; - -import org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.emitter.JOnASWSEmitter; - -import org.apache.axis.wsdl.symbolTable.ServiceEntry; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaServiceWriter; - -/** - * This is JOnASWsdl2java's Service Writer. It writes the following files, as - * appropriate: .java, Locator.java. - */ -public class JOnASEWSServiceWriter extends JavaServiceWriter { - - /** - * Constructor. - * @param emitter JOnASEmitter - * @param service Service - * @param symbolTable SymbolTable - */ - public JOnASEWSServiceWriter(Emitter emitter, Service service, SymbolTable symbolTable) { - super(emitter, service, symbolTable); - } // ctor - - /** - * setGenerators - * Logic to set the generators that are based on the Service. - * This logic was moved from the constructor so extended interfaces - * can more effectively use the hooks. - */ - protected void setGenerators() { - ServiceEntry sEntry = symbolTable.getServiceEntry(service.getQName()); - - if (sEntry.isReferenced()) { - serviceIfaceWriter = null; - testCaseWriter = null; - // Write service interface if : - // - class is not available - // - emitter is not a J2eeEmitter (for backward compliance) - if (emitter instanceof JOnASWSEmitter) { - ClassLoader cl = ((JOnASWSEmitter) emitter).getClassLoader(); - String className = sEntry.getName(); - try { - cl.loadClass(className); - } catch (ClassNotFoundException cnfe) { - // class not available, generate it - serviceIfaceWriter = new JOnASEWSServiceIntfWriter(emitter, sEntry, symbolTable); - } - } - - // overwrite Axis Writer - serviceImplWriter = new JOnASEWSServiceImplWriter(emitter, sEntry, symbolTable); - } - } -} // class JOnASServiceWriter diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASTypeWriter.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASTypeWriter.java deleted file mode 100644 index 67d06b3536..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/writer/JOnASTypeWriter.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.writer; - -import java.io.IOException; -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.w3c.dom.Node; - -import org.apache.axis.wsdl.gen.Generator; -import org.apache.axis.wsdl.symbolTable.SchemaUtils; -import org.apache.axis.wsdl.symbolTable.SymbolTable; -import org.apache.axis.wsdl.symbolTable.Type; -import org.apache.axis.wsdl.symbolTable.TypeEntry; -import org.apache.axis.wsdl.toJava.Emitter; -import org.apache.axis.wsdl.toJava.JavaGeneratorFactory; -import org.apache.axis.wsdl.toJava.JavaTypeWriter; -import org.apache.axis.wsdl.toJava.Utils; - -/** - * This is Wsdl2java's Type Writer. It writes the following files, as appropriate: - * .java, Holder.java. - */ -public class JOnASTypeWriter extends JavaTypeWriter implements Generator { - - /** Field typeWriter */ - private Generator jonasTypeWriter = null; - - /** - * Constructor. - * - * @param emitter the Emitter - * @param type Type to be generated - * @param symbolTable SymbolTable containing mapping informations - */ - public JOnASTypeWriter(Emitter emitter, TypeEntry type, - SymbolTable symbolTable) { - super(emitter, type, symbolTable); - if (type.isReferenced() && !type.isOnlyLiteralReferenced() && type instanceof Type) { - - // Determine what sort of type this is and instantiate - // the appropriate Writer. - Node node = type.getNode(); - - boolean isSimpleList = SchemaUtils.isListWithItemType(node); - // If it's an array, don't emit a class - if (!type.getName().endsWith("[]") && !isSimpleList) { - - // Generate the proper class for either "complex" or "enumeration" types - Vector v = Utils.getEnumerationBaseAndValues(node, symbolTable); - - if (v == null) { - // that's not an enumeration - TypeEntry base = - SchemaUtils.getComplexElementExtensionBase(node, - symbolTable); - - if (base == null) { - base = SchemaUtils.getComplexElementRestrictionBase( - node, symbolTable); - } - - if (base == null) { - QName baseQName = SchemaUtils.getSimpleTypeBase(node); - - if (baseQName != null) { - base = symbolTable.getType(baseQName); - } - } - Vector elements = type.getContainedElements(); - Vector attributes = type.getContainedAttributes(); - - // If this complexType is referenced in a - // fault context, emit a bean-like exception - // class - Boolean isComplexFault = (Boolean) type.getDynamicVar( - JavaGeneratorFactory.COMPLEX_TYPE_FAULT); - - if ((isComplexFault != null) && isComplexFault.booleanValue()) { - - jonasTypeWriter = getBeanHelperWriter(emitter, type, elements, base, attributes, true); - } else { - jonasTypeWriter = getBeanHelperWriter(emitter, type, elements, base, attributes, false); - } - } - } - } - } // ctor - - /** - * Write all the service bindnigs: service and testcase. - * - * @throws IOException if generation of Helper fails - */ - public void generate() throws IOException { - - if (jonasTypeWriter != null) { - jonasTypeWriter.generate(); - } - } - -} // class JavaTypeWriter diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFHandler.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFHandler.java deleted file mode 100644 index 4bb662f8b9..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFHandler.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.wscf; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.HandlerDesc; - -import org.apache.ws.ews.context.webservices.server.impl.AbstractWSCFHandler; - - - -/** - * JOnAS WSCFHandler implementation. - * That's used to fit into the EWS model. - * @author Guillaume Sauthier - */ -public class JOnASWSCFHandler extends AbstractWSCFHandler { - - /** - * port-name list - */ - private List portNames; - - /** - * @param handler JOnAS Handler implementation - */ - public JOnASWSCFHandler(HandlerDesc handler) { - // handler-class - this.handlerClass = handler.getHandlerClassName(); - // handler-name - this.handlerName = handler.getName(); - - // handler/init-param - this.initParam = new HashMap(); - for (Iterator i = handler.getInitParams().keySet().iterator(); i.hasNext();) { - String paramName = (String) i.next(); - this.initParam.put(paramName, new JOnASWSCFInitParam(paramName, handler.getInitParam(paramName))); - } - - // port-name list - this.portNames = new Vector(); - for (Iterator i = handler.getPortNames().iterator(); i.hasNext();) { - String sr = (String) i.next(); - this.portNames.add(sr); - } - - // soap-header* - this.soapHeader = new Vector(); - for (Iterator i = handler.getSOAPHeaders().iterator(); i.hasNext();) { - QName sh = (QName) i.next(); - this.soapHeader.add(new JOnASWSCFSOAPHeader(sh)); - } - - // soap-roles* - this.soapRole = new Vector(); - for (Iterator i = handler.getSOAPRoles().iterator(); i.hasNext();) { - String sr = (String) i.next(); - this.soapRole.add(sr); - } - } - - /** - * Gets the port name of the handler element - * - * @return port-name - */ - public List getPortNames() { - return portNames; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFInitParam.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFInitParam.java deleted file mode 100644 index 743f2950eb..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFInitParam.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.wscf; - -import org.apache.ws.ews.context.webservices.server.impl.AbstractWSCFInitParam; - - -/** - * JOnAS WSCFInitParam implementation. - * That's used to fit into the EWS model. - * @author Guillaume Sauthier - */ -public class JOnASWSCFInitParam extends AbstractWSCFInitParam { - - /** - * @param paramName parameter name - * @param initParam parameter value - */ - public JOnASWSCFInitParam(String paramName, String initParam) { - this.paramName = paramName; - this.paramValue = initParam; - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFSOAPHeader.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFSOAPHeader.java deleted file mode 100644 index 5e31eded01..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/generator/ews/wsdltoj2ee/wscf/JOnASWSCFSOAPHeader.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.generator.ews.wsdltoj2ee.wscf; - -import javax.xml.namespace.QName; - -import org.apache.ws.ews.context.webservices.server.impl.AbstractWSCFSOAPHeader; - - -/** - * JOnAS WSCFSOAPHeader implementation. - * That's used to fit into the EWS model. - * @author Guillaume Sauthier - */ -public class JOnASWSCFSOAPHeader extends AbstractWSCFSOAPHeader { - - /** - * @param sh SOAP Header QName - */ - public JOnASWSCFSOAPHeader(QName sh) { - this.localpart = sh.getLocalPart(); - this.namespaceURI = sh.getNamespaceURI(); - } - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ApplicationModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ApplicationModifier.java deleted file mode 100644 index 37fbad8c97..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ApplicationModifier.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.modifier; - -import java.util.Iterator; -import java.util.jar.Attributes; - -import org.ow2.jonas.Version; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.AbsApplicationModifier; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; - - - -/** - * Modify a given Application. - * @author Guillaume Sauthier - */ -public class ApplicationModifier extends AbsApplicationModifier { - - /** - * Creates a new ApplicationModifier. - * @param archive the Application J2EE archive - * @throws WsGenException if the application modifier cannot be built - */ - public ApplicationModifier(Application archive) throws WsGenException { - super(archive, GeneratorFactory.getInstance().getConfiguration()); - } - - /** - * initialize modifier - */ - protected void init() { - - // fill ejbjar list - for (Iterator i = getApplication().getEjbJars(); i.hasNext();) { - EjbJar ejbjar = (EjbJar) i.next(); - getEjbModifiers().add(new EjbJarModifier(ejbjar)); - } - - // fill webapp list - for (Iterator i = getApplication().getWebApps(); i.hasNext();) { - WebApp webapp = (WebApp) i.next(); - getWebModifiers().add(new WebAppModifier(webapp)); - } - - // fill client list - for (Iterator i = getApplication().getClients(); i.hasNext();) { - Client client = (Client) i.next(); - getCltModifiers().add(new ClientModifier(client)); - } - } - - /** - * Update the Manifest of the Application before modifying it. - * @return Returns the modified Archive. - * @see org.ow2.jonas.generators.genbase.modifier.AbsApplicationModifier#modify() - */ - public Archive modify() throws GenBaseException { - // Update MANIFEST with Version Number - // used to say if WsGen has already been applied to this Module - Attributes main = this.getApplication().getManifest().getMainAttributes(); - main.put(new Attributes.Name(WsGenModifierConstants.WSGEN_JONAS_VERSION_ATTR), Version.getNumber()); - - return super.modify(); - } - - -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ClientModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ClientModifier.java deleted file mode 100644 index fda91ae8e9..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ClientModifier.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; -import java.util.jar.Attributes; - -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.generator.Generator; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Modify a given Client. - * - * @author Guillaume Sauthier - */ -public class ClientModifier extends ArchiveModifier { - - /** client */ - private Client client; - - /** - * Creates a new ClientModifier object. - * - * @param client Client Archive - */ - public ClientModifier(Client client) { - super(client); - this.client = client; - } - - /** - * Modify the current archive and return a modified archive. - * - * @return a modified archive. - * - * @throws GenBaseException When Client Generation or storing phase fails. - */ - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing Client " + client.getName()); - - // Update MANIFEST with Version Number - // used to say if WsGen has already been applied to this Module - Attributes main = this.client.getManifest().getMainAttributes(); - main.put(new Attributes.Name(WsGenModifierConstants.WSGEN_JONAS_VERSION_ATTR), Version.getNumber()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - Document jclient = client.getJonasClientDoc(); - - List refs = client.getServiceRefDescs(); - for (Iterator i = refs.iterator(); i.hasNext();) { - ServiceRefDesc ref = (ServiceRefDesc) i.next(); - - // create dd modifier - Element base = null; - if (jclient != null) { - base = jclient.getDocumentElement(); - } - WsClientDDModifier ddm = new WsClientDDModifier(ref.getServiceRefName(), jclient, base); - - // launch generation - Generator g = gf.newGenerator(ref, ddm, client); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(client); - - // update the Document if it was created - // in the meantime - jclient = ddm.getDocument(); - } - - return save(gf.getConfiguration(), "clients" + File.separator + client.getRootFile().getName()); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/EjbJarModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/EjbJarModifier.java deleted file mode 100644 index 8fef43735e..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/EjbJarModifier.java +++ /dev/null @@ -1,206 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; -import java.util.jar.Attributes; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.DummyApplication; -import org.ow2.jonas.generators.genbase.archive.DummyWebApp; -import org.ow2.jonas.generators.genbase.archive.Ejb; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.ContextDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebJettyDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.Generator; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.ow2.jonas.generators.wsgen.generator.SecurityGenerator; -import org.w3c.dom.Document; - -/** - * Modify a given EjbJar. - * - * @author Guillaume Sauthier - */ -public class EjbJarModifier extends ArchiveModifier { - - /** modified ejbjar */ - private EjbJar ejbjar = null; - - /** - * Creates a new EjbJarModifier object. - * - * @param ejbjar EjbJar Archive - */ - public EjbJarModifier(final EjbJar ejbjar) { - super(ejbjar); - this.ejbjar = ejbjar; - } - - /** - * modify the current EjbJar. If EjbJar is contained in not an application - * and have webservices endpoints, A DummyApplication is created and - * modification process launched against the newly created application. If - * EjbJar is contained in an application + webservices endpoints, a - * DummyWebApp is created to hold "facade" servlet managing SOAP processing. - * - * @return an EjbJar or an Application Archive - * - * @throws GenBaseException When generation or storing fails - */ - @Override - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing EjbJar " + ejbjar.getName()); - - // MANIFEST attributes - Attributes main = this.ejbjar.getManifest().getMainAttributes(); - - // Add all MANIFEST entries from parent - if (this.getArchive() != null && this.getArchive().getArchive() != null) { - main.putAll(this.getArchive().getArchive().getManifest().getMainAttributes()); - } - - // Update MANIFEST with Version Number - // used to say if WsGen has already been applied to this Module - main.put(new Attributes.Name(WsGenModifierConstants.WSGEN_JONAS_VERSION_ATTR), Version.getNumber()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - Document jejbjar = ejbjar.getJonasEjbJarDoc(); - - // Webservices endpoint - List sds = ejbjar.getServiceDescs(); - - if (sds.size() != 0) { - if (ejbjar.getApplication() == null) { - // we have webservices outside of an application - - /** - * Process : - create a default Application - add EjbJar within - - * return ApplicationModifier.modify() - */ - String ejbName = ejbjar.getRootFile().getName(); - String earName = ejbName.substring(0, ejbName.length() - ".jar".length()) + ".ear"; - Application application = new DummyApplication(earName); - ejbjar.setApplication(application); - application.addEjbJar(ejbjar); - ApplicationModifier am = new ApplicationModifier(application); - - return am.modify(); - - } else { - // we have webservices inside of an application - - /** - * Process : - create a default WebApp - add in Application - - * iterate over the services - add files in web instead of - * ejbjar - */ - - String warName = null; - String war = ejbjar.getWarName(); - if (war != null) { - warName = war; - } else { - String ejbName = ejbjar.getRootFile().getName(); - String contextName = ejbName.substring(0, ejbName.length() - ".jar".length()); - warName = contextName + ".war"; - } - - Application application = ejbjar.getApplication(); - WebApp web = new DummyWebApp(application, warName); - - for (Iterator i = sds.iterator(); i.hasNext();) { - ServiceDesc sd = (ServiceDesc) i.next(); - - // create dd modifier - WsEndpointDDModifier ddm = new WsEndpointDDModifier(web.getWebAppDoc()); - - // launch generation - Generator g = gf.newGenerator(sd, ddm, null, ejbjar); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(web); - - //Now generate the security for the web app - Document context = web.getContextDoc(); - if (context == null) { - context = web.newContextDoc(); - } - ContextDDModifier cddm = new ContextDDModifier(context); - Document webJetty = web.getWebJettyDoc(); - if (webJetty == null) { - webJetty = web.newWebJettyDoc(); - } - WebJettyDDModifier wjddm = new WebJettyDDModifier(webJetty); - Document jonaswebservices = ejbjar.getJonasWebservicesDoc(); - SecurityGenerator sm = new SecurityGenerator(jonaswebservices); - sm.generate(ddm, cddm, wjddm); - - - } - // save webapp - application.addWebApp(new WebApp(save(gf.getConfiguration(), - "webapps" + File.separator + web.getName(), web)), ejbjar.getContextRoot()); - } - } - - // add client files - List ejbs = ejbjar.getEjbs(); - for (Iterator i = ejbs.iterator(); i.hasNext();) { - Ejb ejb = (Ejb) i.next(); - List refs = ejb.getServiceRefDescs(); - for (Iterator j = refs.iterator(); j.hasNext();) { - ServiceRefDesc ref = (ServiceRefDesc) j.next(); - - // create dd modifier - WsClientDDModifier ddm = new WsClientDDModifier(ref.getServiceRefName(), jejbjar, ejb.getJonasBeanElement()); - - // launch generation - Generator g = gf.newGenerator(ref, ddm, ejbjar); - g.generate(); - g.compile(); - // add files in web archive - g.addFiles(ejbjar); - } - } - - return save(gf.getConfiguration(), "ejbjars" + File.separator + ejbjar.getRootFile().getName()); - - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ModifierFactory.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ModifierFactory.java deleted file mode 100644 index b384880b6b..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/ModifierFactory.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.modifier; - -import java.io.File; - -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Application; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.Client; -import org.ow2.jonas.generators.genbase.archive.EjbJar; -import org.ow2.jonas.generators.genbase.archive.FileArchive; -import org.ow2.jonas.generators.genbase.archive.J2EEArchive; -import org.ow2.jonas.generators.genbase.archive.JarArchive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.AbsModifierFactory; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.wsgen.WsGenException; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJBDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.url.URLUtils; - -/** - * Used to create the right ArchiveModifier from a given filename (ear, jar, - * war, ... - * @author Guillaume Sauthier - */ -public class ModifierFactory extends AbsModifierFactory { - - /** - * I18n. - */ - private static I18n i18n = I18n.getInstance(ModifierFactory.class); - - /** - * Empty Constructor for utility class. - */ - private ModifierFactory() { - } - - /** - * Returns an ArchiveModifier according to archive type - * (application, ejbjar, webapp or client). - * @param filename input filename. - * @return an ArchiveModifier. - * @exception GenBaseException when archive creation fails. - */ - public static ArchiveModifier getModifier(final String filename) throws GenBaseException { - return getModifier(filename, true, null); - } - - /** - * Returns an ArchiveModifier according to archive type (application, ejbjar, webapp or client). - * @param filename input filename. - * @param init Initialize the archive. - * @param deployable the current deployable (can be null) - * @return an ArchiveModifier. - * @exception GenBaseException when archive creation fails. - */ - public static ArchiveModifier getModifier(final String filename, final boolean init, final IDeployable deployable) - throws GenBaseException { - Archive archive = null; - J2EEArchive j2eeArchive = null; - ArchiveModifier modifier = null; - int mode; - IDeployable localDeployable = null; - - File file = new File(filename); - - if (file.exists()) { - if (file.isFile()) { - // Create the inner Archive - archive = new JarArchive(file); - } else { - // directory unpacked - // Create the inner Archive - archive = new FileArchive(file); - } - - try { - if (deployable == null) { - // Build Archive - IArchive fileArchive = ArchiveManager.getInstance().getArchive(file); - localDeployable = DeployableHelper.getDeployable(fileArchive); - } else { - localDeployable = deployable; - } - } catch (Exception e) { - throw new WsGenException("Cannot get a deployable for the archive '" + archive + "'", e); - } - - // now we are sure that filename is a correct jar - // Workaround for http://bugs.sun.com/view_bug.do?bug_id=6548436 - if (EARDeployable.class.isInstance(localDeployable)) { - if (archive instanceof JarArchive) { - try { - localDeployable = UnpackDeployableHelper.unpack(EARDeployable.class.cast(localDeployable), "genbase"); - archive = new FileArchive(URLUtils.urlToFile(localDeployable.getArchive().getURL())); - } catch (Exception e) { - throw new GenBaseException("Cannot unpack the deployable '" + deployable + "'.", e); - } - } - - // Application J2EE Archive - j2eeArchive = new Application(archive, localDeployable); - mode = APPLICATION; - } else if (EJBDeployable.class.isInstance(localDeployable)) { - // EjbJar J2EE Archive - j2eeArchive = new EjbJar(archive); - mode = EJBJAR; - - } else if (WARDeployable.class.isInstance(localDeployable)) { - // WebApp J2EE Archive - j2eeArchive = new WebApp(archive); - mode = WEBAPP; - - } else if (CARDeployable.class.isInstance(localDeployable)) { - // Client J2EE Archive - j2eeArchive = new Client(archive); - mode = CLIENT; - - } else { - // unsupported archive type - String err = i18n.getMessage("ModifierFactory.getModifier.unsupported", filename); - throw new WsGenException(err); - } - } else { - String err = i18n.getMessage("ModifierFactory.getModifier.notfound", filename); - throw new WsGenException(err); - } - - // init the archive - if (init) { - j2eeArchive.initialize(); - } - - // create the modifier - switch (mode) { - case APPLICATION: - modifier = new ApplicationModifier((Application) j2eeArchive); - break; - case EJBJAR: - modifier = new EjbJarModifier((EjbJar) j2eeArchive); - break; - case WEBAPP: - modifier = new WebAppModifier((WebApp) j2eeArchive); - break; - case CLIENT: - modifier = new ClientModifier((Client) j2eeArchive); - break; - default: - // cannot happen - } - - return modifier; - } -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WebAppModifier.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WebAppModifier.java deleted file mode 100644 index f85eb90cdd..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WebAppModifier.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.wsgen.modifier; - -import java.io.File; -import java.util.Iterator; -import java.util.List; -import java.util.jar.Attributes; - -import org.objectweb.util.monolog.api.BasicLevel; - -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.generators.genbase.GenBaseException; -import org.ow2.jonas.generators.genbase.archive.Archive; -import org.ow2.jonas.generators.genbase.archive.WebApp; -import org.ow2.jonas.generators.genbase.modifier.ArchiveModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.ContextDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebJettyDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WebServicesDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsClientDDModifier; -import org.ow2.jonas.generators.wsgen.ddmodifier.WsEndpointDDModifier; -import org.ow2.jonas.generators.wsgen.generator.Generator; -import org.ow2.jonas.generators.wsgen.generator.GeneratorFactory; -import org.ow2.jonas.generators.wsgen.generator.SecurityGenerator; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Modify a given WebApp. - * - * @author Guillaume Sauthier - */ -public class WebAppModifier extends ArchiveModifier { - - /** webapp */ - private WebApp web; - - /** - * Creates a new WebAppModifier - * - * @param webapp - * the WebApp J2EE archive - */ - public WebAppModifier(WebApp webapp) { - super(webapp); - web = webapp; - } - - /** - * Modify the current archive and return a modified archive. - * - * @return a modified archive. - * - * @throws GenBaseException - * When modification fails - */ - public Archive modify() throws GenBaseException { - - getLogger().log(BasicLevel.INFO, "Processing WebApp " + web.getName()); - - // Update MANIFEST with Version Number - // used to say if WsGen has already been applied to this Module - Attributes main = this.web.getManifest().getMainAttributes(); - main.put(new Attributes.Name(WsGenModifierConstants.WSGEN_JONAS_VERSION_ATTR), Version.getNumber()); - - GeneratorFactory gf = GeneratorFactory.getInstance(); - Document jwebapp = web.getJonasWebAppDoc(); - Document webapp = web.getWebAppDoc(); - Document webservices = web.getWebservicesDoc(); - Document jonasWebservices = web.getJonasWebservicesDoc(); - - List refs = web.getServiceRefDescs(); - - for (Iterator i = refs.iterator(); i.hasNext();) { - ServiceRefDesc ref = (ServiceRefDesc) i.next(); - - // create dd modifier - Element base = null; - if (jwebapp != null) { - base = jwebapp.getDocumentElement(); - } - WsClientDDModifier ddm = new WsClientDDModifier(ref.getServiceRefName(), jwebapp, base); - - // launch generation - Generator g = gf.newGenerator(ref, ddm, web); - g.generate(); - g.compile(); - - // add files in web archive - g.addFiles(web); - - // update the Document if it was created - // in the meantime - jwebapp = ddm.getDocument(); - - } - - // create dd modifier - WsEndpointDDModifier ddm = new WsEndpointDDModifier(webapp); - WebServicesDDModifier wsddm = null; - if (webservices != null) { - wsddm = new WebServicesDDModifier(webservices); - } - - List sds = web.getServiceDescs(); - - for (Iterator i = sds.iterator(); i.hasNext();) { - ServiceDesc sd = (ServiceDesc) i.next(); - - // launch generation - Generator g = gf.newGenerator(sd, ddm, wsddm, web); - g.generate(); - g.compile(); - - // add files in web archive - g.addFiles(web); - - //Now generate the security for the web app - Document context = web.getContextDoc(); - if (context == null) { - context = web.newContextDoc(); - } - ContextDDModifier cddm = new ContextDDModifier(context); - Document webJetty = web.getWebJettyDoc(); - if (webJetty == null) { - webJetty = web.newWebJettyDoc(); - } - WebJettyDDModifier wjddm = new WebJettyDDModifier(webJetty); - SecurityGenerator sm = new SecurityGenerator(jonasWebservices); - sm.generate(ddm, cddm, wjddm); - - } - - return save(gf.getConfiguration(), "webapps" + File.separator - + web.getName()); - } -} \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WsGenModifierConstants.java b/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WsGenModifierConstants.java deleted file mode 100644 index 3c75f4b472..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/java/org/ow2/jonas/generators/wsgen/modifier/WsGenModifierConstants.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.wsgen.modifier; - -/** - * Modifier Constants for WsGen. - * - * @author Guillaume Sauthier - */ -public interface WsGenModifierConstants { - - /** - * Manifest Attribute for WsGen. - * Injected in the Manifest for updated archive. - */ - String WSGEN_JONAS_VERSION_ATTR = "WsGen-JOnAS-Version"; - -} diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/META-INF/jonas-generators-wsgen.bnd b/jonas/modules/generators/jonas-wsgen/src/main/resources/META-INF/jonas-generators-wsgen.bnd deleted file mode 100644 index 5d390b4779..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/META-INF/jonas-generators-wsgen.bnd +++ /dev/null @@ -1,34 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.generators.wsgen, \ - org.ow2.jonas.generators.wsgen.wrapper - -Private-Package org.ow2.jonas.generators.wsgen.*;-split-package:=merge-first - -Import-Package !org.apache.velocity.*,\ - javax.xml.namespace,\ - org.apache.xmlbeans.impl.schema,\ - * - -Embed-Dependency ews-mapper;inline=true \ No newline at end of file diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/I18n.properties b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/I18n.properties deleted file mode 100644 index 8f10e42f12..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/I18n.properties +++ /dev/null @@ -1,7 +0,0 @@ -# $Id$ - -GeneratorFactory.newInstance.instance Cannot instanciate ''{0}'' GeneratorFactory - -Generator.constr.ioe Cannot create temporary directories - -Generator.compile.error=Error when running javac for WebServices clients compilation. diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/I18n.properties b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/I18n.properties deleted file mode 100644 index 8f43bc4de5..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/I18n.properties +++ /dev/null @@ -1,15 +0,0 @@ -# $Id$ - -JVelocity.constr.initFailure Cannot initialize the Velocity engine -JVelocity.constr.tmplError Cannot get the ''{0}'' template file -JVelocity.constr.notset System property 'jonas.root' not set - -JVelocity.generate.directories Cannot create the directory ''{0}'' -JVelocity.generate.file Cannot create the ''{0}'' file -JVelocity.generate.cannot Cannot generate the file ''{0}'' from the template. -JVelocity.generate.close Cannot close the file ''{0}'' - -AxisWsEndpointGenerator.generate.illegal ''{0}'' is not a WebApp instance -AxisWsClientGenerator.generate.wsdl Cannot retrieve WSDL file ''{0}'' from ''{1}'' - -AxisWsClientGenerator.generate.WSDL2Java Error when running axis WSDL2Java tool. diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_client.vm b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_client.vm deleted file mode 100644 index 9ba17a831f..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_client.vm +++ /dev/null @@ -1,32 +0,0 @@ - - - - -#foreach ($pc in $portComponents) - - - #foreach ($handler in $pc.getHandlers()) - - ## pour chaque init parameter - #foreach ($param in $handler.getInitParameters()) - - #end - ## pour chaque header - #foreach ($header in $handler.getHeaders()) -
    - #end - - #foreach ($role in $handler.getSoapRoles()) - - #end - #end - - -#end - -#foreach ($mapping in $mappings) - $mapping.toString() -#end - - diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_endpoint.vm b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_endpoint.vm deleted file mode 100644 index 54de608d44..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/axis/deploy_endpoint.vm +++ /dev/null @@ -1,87 +0,0 @@ - - - - -#* *##foreach ($pc in $portComponents) -## start foreach pc - -#if ($pc.getWSDLFilename()) - $pc.getWSDLFilename() -#end -#if ($pc.getNamespace()) - - $pc.getNamespace() -#end - - -#if ($provider == "JOnASEJB") -## start if ejb -#set ($bean = $pc.getBean()) - - - - - -#foreach ($handler in $pc.getHandlers()) -##start foreach handlers - -## pour chaque init parameter -#foreach ($param in $handler.getInitParameters()) - -#end -## pour chaque header -#foreach ($header in $handler.getHeaders()) -
    -#end - -#foreach ($role in $handler.getSoapRoles()) - -#end -#end -## end foreach handlers - -#end -## end if ejb -#if ($provider == "RPC") -## start if rpc - -#if ($pc.getMethods().length() != 0) - -#else - -#end - -#foreach ($handler in $pc.getHandlers()) -##start foreach handlers - -## pour chaque init parameter -#foreach ($param in $handler.getInitParameters()) - -#end -## pour chaque header -#foreach ($header in $handler.getHeaders()) -
    -#end - -#end -## end foreach handlers - -#end -## end if rpc - - -#* *##end -## end foreach pc - -#foreach ($mapping in $mappings) - $mapping.toString() -#end - diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/ews/I18n.properties b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/ews/I18n.properties deleted file mode 100644 index c3f7a20720..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/generator/ews/I18n.properties +++ /dev/null @@ -1,7 +0,0 @@ -# $Id$ - -AxisWsEndpointGenerator.generate.illegal ''{0}'' is not a WebApp instance -AxisWsClientGenerator.generate.wsdl Cannot retrieve WSDL file ''{0}'' from ''{1}'' - -EWSWsClientGenerator.generate.WSDL2Java Error when running axis WSDL2Java tool. ''{0}'' -EWSWsEndpointGenerator.generate.WSDL2Java Error when generating server-side deploy file for ''{0}''. ''{1}'' diff --git a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/modifier/I18n.properties b/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/modifier/I18n.properties deleted file mode 100644 index 58bcd33df5..0000000000 --- a/jonas/modules/generators/jonas-wsgen/src/main/resources/org/ow2/jonas/generators/wsgen/modifier/I18n.properties +++ /dev/null @@ -1,5 +0,0 @@ -# $Id$ - -ModifierFactory.getModifier.notfound file not found ''{0}'' -ModifierFactory.getModifier.notjar ''{0}'' is not a jar file -ModifierFactory.getModifier.unsupported ''{0}'' is not a supported jar archive (should be EjbJar, WebApp, Client or Application) diff --git a/jonas/modules/generators/pom.xml b/jonas/modules/generators/pom.xml deleted file mode 100644 index 0f3c4ae0ea..0000000000 --- a/jonas/modules/generators/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-generators - JOnAS :: Generators - - pom - - jonas-genbase - jonas-genclientstub - jonas-wsgen - jonas-genic - raconfig - - \ No newline at end of file diff --git a/jonas/modules/generators/raconfig/pom.xml b/jonas/modules/generators/raconfig/pom.xml deleted file mode 100644 index b4885c53c2..0000000000 --- a/jonas/modules/generators/raconfig/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - org.ow2.jonas - jonas-generators - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - - jonas-generators-raconfig - bundle - JOnAS :: Generators :: RAConfig - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfig.java b/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfig.java deleted file mode 100644 index 517e6e81af..0000000000 --- a/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfig.java +++ /dev/null @@ -1,938 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Eric Hardesty - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.generators.raconfig; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Properties; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; - -import javax.naming.Context; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.rar.ConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.RarDeploymentDesc; -import org.ow2.jonas.deployment.rar.RarDeploymentDescException; -import org.ow2.jonas.deployment.rar.lib.RarDeploymentDescManager; -import org.ow2.jonas.deployment.rar.xml.Activationspec; -import org.ow2.jonas.deployment.rar.xml.Adminobject; -import org.ow2.jonas.deployment.rar.xml.ConfigProperty; -import org.ow2.jonas.deployment.rar.xml.ConnectionDefinition; -import org.ow2.jonas.deployment.rar.xml.Connector; -import org.ow2.jonas.deployment.rar.xml.InboundResourceadapter; -import org.ow2.jonas.deployment.rar.xml.JdbcConnParams; -import org.ow2.jonas.deployment.rar.xml.JonasActivationspec; -import org.ow2.jonas.deployment.rar.xml.JonasAdminobject; -import org.ow2.jonas.deployment.rar.xml.JonasConfigProperty; -import org.ow2.jonas.deployment.rar.xml.JonasConnectionDefinition; -import org.ow2.jonas.deployment.rar.xml.JonasConnector; -import org.ow2.jonas.deployment.rar.xml.JonasSecurityMapping; -import org.ow2.jonas.deployment.rar.xml.Messageadapter; -import org.ow2.jonas.deployment.rar.xml.Messagelistener; -import org.ow2.jonas.deployment.rar.xml.OutboundResourceadapter; -import org.ow2.jonas.deployment.rar.xml.PoolParams; -import org.ow2.jonas.deployment.rar.xml.RequiredConfigProperty; -import org.ow2.jonas.deployment.rar.xml.Resourceadapter; -import org.ow2.jonas.deployment.rar.xml.SecurityEntry; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.util.Base64; - -/** - * This class may be used to parse a resource adapter deployment descriptor and - * generate the corresponding properties files for the jca service java RAConfig - * -j jndiname -r rarlink -verbose java - * org.ow2.jonas.generators.raconfig.RAConfig -u jonas-ra.xml java - * org.ow2.jonas.generators.raconfig.RAConfig -dm -p db.properties - * - */ -public class RAConfig { - - /** - * Buffer Size - */ - private static final int BUFFER_SIZE = 500; - - /** JCA 1.5 */ - private static final double JCA_1_5 = 1.5; - - /** JCA 1.0 */ - private static final double JCA_1_0 = 1.0; - - RarDeploymentDesc rarDD = null; - - /** - * Validate the XML - */ - private static boolean validation = true; - - /** - * jonas-ra.xml XML filename - */ - private static final String JONAS_RA_FILENAME = "META-INF/jonas-ra.xml"; - - /** - * Constructor - */ - public RAConfig(final String fileName) throws RAConfigException { - ClassLoader curLoader = Thread.currentThread().getContextClassLoader(); - - try { - RarDeploymentDescManager.setParsingWithValidation(validation); - rarDD = getRarDD(fileName, curLoader); - } catch (Exception e) { - throw new RAConfigException(e); - } - - } - - /** - * Get an instance of an RAR deployment descriptor by parsing the ra.xml and - * jonas-ra.xml deployment descriptors. - * @param rarFileName the fileName of the rar file for the deployment - * descriptors. - * @param classLoader the classloader for the classes. - * @return an RAR deployment descriptor by parsing the ra.xml & jonas-ra.xml - * deployment descriptors. - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private RarDeploymentDesc getRarDD(final String rarFileName, final ClassLoader classLoader) throws DeploymentDescException { - - // The context to give for the creation of an instance - // of RarDeploymentDesc - Context contctx = null; - try { - contctx = new ComponentContext(rarFileName); - contctx.rebind("rarFileName", rarFileName); - contctx.rebind("classloader", classLoader); - } catch (Exception e) { - // An exception occurred trying to bind context - // logger.log(BasicLevel.ERROR, "Error when binding context for - // RarDeploymentDesc for '" + rarFileName + "'"); - // logger.log(BasicLevel.ERROR, e.getMessage()); - - throw new RarDeploymentDescException("Error during the deployment", e); - } - // want both ra.xml & jonas-ra.xml - return RarDeploymentDescManager.getInstance(contctx); - } - - public RarDeploymentDesc getRarDeploymentDesc() { - return rarDD; - } - - /** - * Process the ra.xml file in the input rar file and build the corresponding - * jonas-ra.xml. If the -p argument is specified, then retrieve the - * appropriate configuration values to pre-configure the corrsponding JDBC - * RA config properties. - * @param fileInputName String file name - * @param jndiname String jndi name - * @param rarlink String rar link - * @param dbProps Properties - * @param encrypt boolean - * @param securityfile String security file - * @param path String path - * @param isVerbose boolean - * @param createNew boolean - * @throws RAConfigException if an Exception occurs - */ - private static void buildXML(final String fileInputName, String jndiname, final String rarlink, final Properties dbProps, final boolean encrypt, - final String securityfile, final String path, final boolean isVerbose, final boolean createNew) throws RAConfigException { - - // Check if jonas-ra.xml already exists and return it - if (!createNew) { - boolean ext = extractJonasRAXml(fileInputName, path); - if (ext) { - return; - } - } - - RAConfig raxml = new RAConfig(fileInputName); - Connector conn = raxml.getRarDeploymentDesc().getConnector(); - double specVersion = 0.0; - ConfigPropertyDesc[] raProps = raxml.getRarDeploymentDesc().getRaConfigPropTags(); - if (raProps == null) { - throw new RAConfigException("RAR file doesn't contain ra.xml"); - } - if (conn.getSpecVersion().equals("1.0")) { - specVersion = JCA_1_0; - } else if (conn.getSpecVersion().equals("1.5")) { - specVersion = JCA_1_5; - } else { - throw new RAConfigException("ra.xml doesn't correct spec version"); - } - - JonasConnector jConn = new JonasConnector(); - PoolParams jPool = new PoolParams(); - JdbcConnParams jConnParams = new JdbcConnParams(); - JonasConfigProperty jCfg = null; - - String val = ""; - String str = ""; - - val = "0"; - if (dbProps.getProperty("jdbc.initconpool") != null && dbProps.getProperty("jdbc.initconpool").length() > 0) { - val = dbProps.getProperty("jdbc.initconpool").trim(); - } - jPool.setPoolInit(val); - - val = "0"; - if (dbProps.getProperty("jdbc.minconpool") != null && dbProps.getProperty("jdbc.minconpool").length() > 0) { - val = dbProps.getProperty("jdbc.minconpool").trim(); - } - jPool.setPoolMin(val); - - val = "-1"; - if (dbProps.getProperty("jdbc.maxconpool") != null && dbProps.getProperty("jdbc.maxconpool").length() > 0) { - val = dbProps.getProperty("jdbc.maxconpool").trim(); - } - jPool.setPoolMax(val); - - val = "0"; - if (dbProps.getProperty("jdbc.connmaxage") != null && dbProps.getProperty("jdbc.connmaxage").length() > 0) { - val = dbProps.getProperty("jdbc.connmaxage").trim(); - } - jPool.setPoolMaxAgeMinutes(val); - - val = "0"; - if (dbProps.getProperty("jdbc.maxopentime") != null && dbProps.getProperty("jdbc.maxopentime").length() > 0) { - val = dbProps.getProperty("jdbc.maxopentime").trim(); - } - jPool.setPoolMaxOpentime(val); - - val = "0"; - if (dbProps.getProperty("jdbc.maxwaiters") != null && dbProps.getProperty("jdbc.maxwaiters").length() > 0) { - val = dbProps.getProperty("jdbc.maxwaiters").trim(); - } - jPool.setPoolMaxWaiters(val); - - val = "0"; - if (dbProps.getProperty("jdbc.maxwaittime") != null && dbProps.getProperty("jdbc.maxwaittime").length() > 0) { - val = dbProps.getProperty("jdbc.maxwaittime").trim(); - } - jPool.setPoolMaxWaittime(val); - - val = "30"; - if (dbProps.getProperty("jdbc.samplingperiod") != null && dbProps.getProperty("jdbc.samplingperiod").length() > 0) { - val = dbProps.getProperty("jdbc.samplingperiod").trim(); - } - jPool.setPoolSamplingPeriod(val); - - val = "10"; - if (dbProps.getProperty("jdbc.pstmtmax") != null && dbProps.getProperty("jdbc.pstmtmax").length() > 0) { - val = dbProps.getProperty("jdbc.pstmtmax").trim(); - } - jPool.setPstmtMax(val); - - val = "List"; - if (dbProps.getProperty("jdbc.pstmtcachepolicy") != null && dbProps.getProperty("jdbc.pstmtcachepolicy").length() > 0) { - val = dbProps.getProperty("jdbc.pstmtcachepolicy").trim(); - } - jPool.setPstmtCachePolicy(val); - - jConn.setLogEnabled("false"); - jConn.setLogTopic(""); - jConn.setNativeLib(""); - if (jndiname.length() == 0) { - jndiname = dbProps.getProperty("datasource.name", "").trim(); - } - - val = "0"; - if (dbProps.getProperty("jdbc.connchecklevel") != null && dbProps.getProperty("jdbc.connchecklevel").length() > 0) { - val = dbProps.getProperty("jdbc.connchecklevel").trim(); - } - jConnParams.setJdbcCheckLevel(val); - - val = ""; - if (dbProps.getProperty("jdbc.connteststmt") != null && dbProps.getProperty("jdbc.connteststmt").length() > 0) { - val = dbProps.getProperty("jdbc.connteststmt").trim(); - jConnParams.setJdbcTestStatement(val); - } - - if (specVersion == JCA_1_0) { - jConn.setJndiName(jndiname); - } - jConn.setRarlink(rarlink); - jConn.setPoolParams(jPool); - jConn.setJdbcConnParams(jConnParams); - - if (specVersion == JCA_1_0) { - val = ""; - str = ""; - for (int i = 0; i < raProps.length; i++) { - jCfg = new JonasConfigProperty(); - str = raProps[i].getConfigPropertyName(); - jCfg.setJonasConfigPropertyName(str); - if (dbProps.size() > 0) { - val = getProp(dbProps, str); - } else { - val = ""; - } - jCfg.setJonasConfigPropertyValue(val); - jConn.addJonasConfigProperty(jCfg); - } - } else if (specVersion == JCA_1_5) { - Resourceadapter rAdapter = conn.getResourceadapter(); - ConfigProperty cProperty = null; - // TODO rProperty never used !!! - RequiredConfigProperty rProperty = null; - // Process config properties if they exist - for (Iterator i = rAdapter.getConfigPropertyList().iterator(); i.hasNext();) { - cProperty = (ConfigProperty) i.next(); - jCfg = new JonasConfigProperty(); - str = cProperty.getConfigPropertyName(); - jCfg.setJonasConfigPropertyName(str); - if (dbProps.size() > 0) { - val = getProp(dbProps, str); - } else { - val = ""; - } - jCfg.setJonasConfigPropertyValue(val); - jConn.addJonasConfigProperty(jCfg); - } - - // is it the first jonas-connection-definition - boolean first = true; - - // Now process the outbound-resourceadapter - OutboundResourceadapter oRes = rAdapter.getOutboundResourceadapter(); - if (oRes != null) { - ConnectionDefinition cDef = null; - JonasConnectionDefinition jcDef = null; - for (Iterator it = oRes.getConnectionDefinitionList().iterator(); it.hasNext();) { - cDef = (ConnectionDefinition) it.next(); - jcDef = new JonasConnectionDefinition(); - jcDef.setId(cDef.getId()); - jcDef.addDescription(cDef.getManagedconnectionfactoryClass()); - - // This allows the jndi name to be set for the first - // jonas-connection-definition - // with a 1.5 version of the connector. - if (first && (jndiname.length() != 0)) { - jcDef.setJndiName(jndiname); - first = false; - } else { - jcDef.setJndiName(""); - } - - for (Iterator i = cDef.getConfigPropertyList().iterator(); i.hasNext();) { - cProperty = (ConfigProperty) i.next(); - jCfg = new JonasConfigProperty(); - str = cProperty.getConfigPropertyName(); - jCfg.setJonasConfigPropertyName(str); - jCfg.setJonasConfigPropertyValue(""); - jcDef.addJonasConfigProperty(jCfg); - } - jConn.addJonasConnectionDefinition(jcDef); - } - } - // Now process the inbound-resourceadapter - InboundResourceadapter iRes = rAdapter.getInboundResourceadapter(); - if (iRes != null) { - Messageadapter mAdapter = iRes.getMessageadapter(); - if (mAdapter != null) { - Messagelistener mList = null; - JonasActivationspec jaSpec = null; - Activationspec aSpec = null; - for (Iterator it = mAdapter.getMessagelistenerList().iterator(); it.hasNext();) { - mList = (Messagelistener) it.next(); - aSpec = mList.getActivationspec(); - if (aSpec != null) { - jaSpec = new JonasActivationspec(); - jaSpec.setId(mList.getId()); - jaSpec.addDescription(mList.getMessagelistenerType()); - jaSpec.setJndiName(""); - jConn.addJonasActivationspec(jaSpec); - } - } - } - } - // Now process the adminobject - for (Iterator it = rAdapter.getAdminobjectList().iterator(); it.hasNext();) { - Adminobject aObj = (Adminobject) it.next(); - JonasAdminobject jaObj = null; - if (aObj != null) { - jaObj = new JonasAdminobject(); - jaObj.setId(aObj.getId()); - jaObj.addDescription(aObj.getAdminobjectClass()); - jaObj.setJndiName(""); - // Process config properties if they exist - for (Iterator i = aObj.getConfigPropertyList().iterator(); i.hasNext();) { - cProperty = (ConfigProperty) i.next(); - jCfg = new JonasConfigProperty(); - str = cProperty.getConfigPropertyName(); - jCfg.setJonasConfigPropertyName(str); - jCfg.setJonasConfigPropertyValue(""); - jaObj.addJonasConfigProperty(jCfg); - } - jConn.addJonasAdminobject(jaObj); - } - } - } - - if (securityfile != null) { - Properties secProps = new Properties(); - File f = null; - try { - f = new File(securityfile); - FileInputStream is = new FileInputStream(f); - secProps.load(is); - } catch (FileNotFoundException e) { - System.err.println("Cannot find security properties file: " + securityfile); - System.err.println("Continuing with creation of jonas-ra.xml"); - } catch (IOException e) { - System.err.println(e); - } - - JonasSecurityMapping jsMap = new JonasSecurityMapping(); - String pName = null; - String user = null; - String pass = null; - String tmp = null; - int offset = 0; - SecurityEntry sEnt = null; - for (Enumeration e = secProps.propertyNames(); e.hasMoreElements();) { - pName = (String) e.nextElement(); - tmp = secProps.getProperty(pName); - offset = tmp.indexOf("::"); - if (offset < 0) { - System.err.println("Error in format of file: principalName = user::password"); - continue; - } - user = tmp.substring(0, offset); - pass = tmp.substring(offset + 2); - - sEnt = new SecurityEntry(); - sEnt.setPrincipalName(pName); - sEnt.setUser(user); - if (encrypt) { - try { - pass = new String(Base64.encode(pass.getBytes())); - sEnt.setEncrypted("" + encrypt); - } catch (Exception ex) { - System.err.println("Unable to encrypt the password."); - } - } - sEnt.setPassword(pass); - jsMap.addSecurityEntry(sEnt); - } - jConn.setJonasSecurityMapping(jsMap); - } - - try { - String tmpDir = path; - if (path.length() == 0) { - tmpDir = System.getProperty("java.io.tmpdir"); - } - String fileName = tmpDir; - int fileLen = fileName.length(); - if (fileName.charAt(fileLen - 1) != File.separatorChar) { - fileName += File.separatorChar; - } - fileName += "jonas-ra.xml"; - FileWriter fw = new FileWriter(fileName); - fw.write(jConn.toXML()); - fw.close(); - if (isVerbose) { - System.out.println("Build Jonas Specific DD File '" + fileName + "' OK"); - } - - } catch (Exception e) { - throw new RAConfigException("Error writing output", e); - } - } - - /** - * Mapping routine for the JDBC RA config values and the existing - * .properties values. - * @param prop Properties - * @param str String - * @return String - */ - private static String getProp(final Properties prop, final String str) { - // ra-keys | properties-keys - String[][] mapping = { {"connCheckLevel", "jdbc.connchecklevel"}, {"connMaxAge", "jdbc.connmaxage"}, - {"connTestStmt", "jdbc.connteststmt"}, {"URL", "datasource.url"}, {"dsClass", "datasource.classname"}, - {"user", "datasource.username"}, {"password", "datasource.password"}, - {"isolationLevel", "datasource.isolationlevel"}, {"mapperName", "datasource.mapper"}, - {"databaseName", "datasource.databaseName"}, {"loginTimeout", "datasource.loginTimeout"}, - {"description", "datasource.description"}, {"portNumber", "datasource.portNumber"}, - {"serverName", "datasource.serverName"}}; - - String ret = ""; - for (int i = 0; i < mapping.length; i++) { - if (mapping[i][0].equalsIgnoreCase(str)) { - String value = prop.getProperty(mapping[i][1]); - if (value == null) { - ret = ""; - } else { - ret = value.trim(); - } - } - } - - return ret; - } - - /** - * Update the RAR file - * @param infile String input RAR file - * @param outfile String output RAR file - * @param updatename String update file - * @param rarlink String RAR link - * @throws RAConfigException to throw if an Exception occurs - */ - private static void updateRAR(final String infile, final String outfile, final String updatename, final String rarlink) throws RAConfigException { - - ZipOutputStream zipOutput = null; - ZipFile zipFile = null; - Enumeration zippedFiles = null; - ZipEntry currEntry = null; - ZipEntry entry = null; - byte[] buffer = new byte[BUFFER_SIZE]; - int num = 0; - - String filename = infile; - String outfilename = infile; - boolean outNew = false; - if (outfile != null && outfile.length() != 0) { - outfilename = outfile; - outNew = true; - } - - try { - File file = new File(filename); - if (file.exists()) { - zipFile = new ZipFile(file.getAbsolutePath()); - // get an enumeration of all existing entries - zippedFiles = zipFile.entries(); - // create your output zip file - if (!outNew) { - zipOutput = new ZipOutputStream(new FileOutputStream(new File(file.getAbsolutePath() + "NEW"))); - } else { - File ofile = new File(outfilename); - if (ofile.exists()) { - ofile.delete(); - } - - zipOutput = new ZipOutputStream(new FileOutputStream(new File(outfilename))); - } - // Get all the data out of the previously zipped files and - // write - // it to a new ZipEntry to go into a new file archive - if ((outfile == null || outfile.length() == 0) && rarlink.length() == 0) { - while (zippedFiles.hasMoreElements()) { - // Retrieve entry of existing files - currEntry = (ZipEntry) zippedFiles.nextElement(); - if (currEntry.getName().equalsIgnoreCase(JONAS_RA_FILENAME)) { - continue; - } - // Read data from existing file - zipOutput.putNextEntry(new ZipEntry(currEntry.getName())); - InputStream reader = zipFile.getInputStream(currEntry); - while ((num = reader.read(buffer)) != -1) { - zipOutput.write(buffer, 0, num); - } - // Commit the data - zipOutput.flush(); - zipOutput.closeEntry(); - } - } - // Close the old zip file - zipFile.close(); - - // Write the 'new' file to the archive, commit, and close - entry = new ZipEntry(JONAS_RA_FILENAME); - zipOutput.putNextEntry(entry); - - // Read data from existing file - try { - BufferedReader reader = new BufferedReader(new FileReader(updatename)); - int ch = 0; - while ((ch = reader.read()) != -1) { - zipOutput.write(ch); - } - } catch (Exception ex) { - System.out.println("Error reading input file: " + updatename + " " + ex); - // Commit the data - zipOutput.flush(); - zipOutput.closeEntry(); - zipOutput.finish(); - zipOutput.close(); - } - // Commit the data - zipOutput.flush(); - zipOutput.closeEntry(); - zipOutput.finish(); - zipOutput.close(); - - if (!outNew) { - // delete the old file and rename the new one - File toBeDeleted = new File(file.getAbsolutePath()); - toBeDeleted.delete(); - File toBeRenamed = new File(file.getAbsolutePath() + "NEW"); - toBeRenamed.renameTo(file); - } - } else { - // create your output zip file - zipOutput = new ZipOutputStream(new FileOutputStream(new File(outfilename))); - - // Write the file to the archive, commit, and close - entry = new ZipEntry(JONAS_RA_FILENAME); - zipOutput.putNextEntry(entry); - // Read data from existing file - BufferedReader reader = new BufferedReader(new FileReader(updatename)); - int ch = 0; - while ((ch = reader.read()) != -1) { - zipOutput.write(ch); - } - - // Commit the data - zipOutput.flush(); - zipOutput.closeEntry(); - zipOutput.finish(); - zipOutput.close(); - } - // finally, we delete generated jonas-ra.xml - new File(updatename).delete(); - } catch (Exception ex) { - throw new RAConfigException(ex); - } - - } - - /** - * Extract the jonas-ra.xml file if it exists in the rar - * @param infile String rar file name - * @param path String path - */ - private static boolean extractJonasRAXml(final String infile, final String path) { - ZipFile zipFile = null; - ZipEntry entry = null; - byte[] buffer = new byte[BUFFER_SIZE]; - - String filename = infile; - File file = new File(filename); - if (file.exists()) { - try { - zipFile = new ZipFile(file.getAbsolutePath()); - entry = zipFile.getEntry(JONAS_RA_FILENAME); - if (entry != null) { - InputStream input = zipFile.getInputStream(entry); - String tmpDir = path; - if (path.length() == 0) { - tmpDir = System.getProperty("java.io.tmpdir"); - } - String fileName = tmpDir; - int fileLen = fileName.length(); - if (fileName.charAt(fileLen - 1) != File.separatorChar) { - fileName += File.separatorChar; - } - fileName += "jonas-ra.xml"; - - FileOutputStream output = new FileOutputStream(fileName); - for (int j = 0;;) { - int length = input.read(buffer); - if (length <= 0) { - break; - } - output.write(buffer, 0, length); - } - output.close(); - return true; - } - } catch (Exception ex) { - return false; - } - } - return false; - } - - /** - * Usage of RAConfig - */ - public static void usage() { - System.out.println(""); - System.out.println("Usage: java org.ow2.jonas.generators.raconfig.RAConfig [Output_File]"); - System.out.println(" to generate the jonas-ra.xml file for a Resource Adapter."); - System.out.println(" The output file will be written to the default location of the java "); - System.out.println(" system property 'java.io.tmpdir' unless the -path parameter is specified"); - System.out.println(""); - System.out.println(" Note: for a parameter either the whole name must be used or only the"); - System.out.println(" the capital letters, e.g. -jndiname or -j are equivalent"); - System.out.println(""); - System.out.println(" With Options:"); - System.out.println(" -? or -help print this help message"); - System.out.println(" -DM,-DS,-CP,-XA DriverManager, Datasource, ConnectionPoolDatasource,"); - System.out.println(" XAConnection only used with -p. Additional"); - System.out.println(" user configuration of the jonas-ra.xml file"); - System.out.println(" will be necessary for any option but -DM."); - System.out.println(" -Jndiname specifies the jndiname RA"); - System.out.println(" -Property specifies the database property file"); - System.out.println(" to process"); - System.out.println(" -Rarlink specifies the rar file to link to"); - System.out.println(" -Update update the input rar with the specified file"); - System.out.println(" unless an output_file named is specified"); - System.out.println(" -ENcrypt used with -sf to encrypt the passwords "); - System.out.println(" -SecurityFile security xml file to add to jonas-ra.xml "); - System.out.println(" -Verbose output the contents of the deployment descriptor "); - System.out.println(" -NoValidation turn off xml dtd/schema validation "); - System.out.println(" -PATH path where jonas-ra.xml should be written to "); - System.out.println(" default is System.property('java.io.tmpdir')"); - System.out.println(" -NEW don't extract jonas-ra.xml create a new one "); - System.out.println(""); - System.out.println(" Input_File Resource Adapter RAR file"); - System.out.println(" Output_File Resource Adapter RAR file only used with "); - System.out.println(" -p(required) or -u(optional)"); - System.out.println(""); - } - - // Main Method - /** - * Main routine - * @param args String [] input arguments - * @throws RAConfigException if an Exception occurs - */ - public static void main(final String[] args) throws RAConfigException { - boolean isHelp = false; - boolean isVerbose = false; - boolean doProperty = false; - boolean doUpdate = false; - boolean encrypt = false; - boolean newXml = false; - String fileInputName = null; - String fileOutputName = null; - String securityfile = null; - String jndiname = ""; - String rarlink = ""; - String updatename = ""; - String jdbcRarLink = ""; - String jonasRarStr = "JOnASJDBC_"; - String propertyFile = ""; - String path = ""; - // Get command args - - Properties dbProps = null; - - if (args.length < 1) { - isHelp = true; - } - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn].toLowerCase(); - if (arg.equals("-help") || arg.equals("-?")) { - isHelp = true; - continue; - } - if (arg.equals("-verbose") || arg.equals("-v")) { - isVerbose = true; - continue; - } - if (arg.equals("-encrypt") || arg.equals("-en")) { - encrypt = true; - continue; - } - if (arg.equals("-securityfile") || arg.equals("-sf")) { - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -sf input"); - } - securityfile = args[argn]; - continue; - } - if (arg.equals("-novalidation") || arg.equals("-nv")) { - validation = false; - continue; - } - if (arg.equals("-update") || arg.equals("-u")) { - doUpdate = true; - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -u input"); - } - updatename = args[argn]; - continue; - } - if (arg.equals("-jndiname") || arg.equals("-j")) { - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -j input"); - } - jndiname = args[argn]; - continue; - } - if (arg.equals("-rarlink") || arg.equals("-r")) { - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -r input"); - } - rarlink = args[argn]; - continue; - } - if (arg.equals("-property") || arg.equals("-p")) { - doProperty = true; - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -p input"); - } - propertyFile = args[argn]; - continue; - } - if (arg.equals("-dm")) { - jdbcRarLink = jonasRarStr + "DM"; - continue; - } - if (arg.equals("-ds")) { - jdbcRarLink = jonasRarStr + "DS"; - continue; - } - if (arg.equals("-xa")) { - jdbcRarLink = jonasRarStr + "XA"; - continue; - } - if (arg.equals("-cp")) { - jdbcRarLink = jonasRarStr + "CP"; - continue; - } - if (arg.equals("-path")) { - if (argn + 1 == args.length || args[++argn].startsWith("-")) { - usage(); - throw new RAConfigException("Error with -path"); - } - path = args[argn]; - continue; - } - if (arg.equals("-new")) { - newXml = true; - continue; - } - if (fileInputName == null) { - fileInputName = args[argn]; - if (!fileInputName.endsWith(".rar")) { - fileInputName += ".rar"; - } - } else if (doProperty || doUpdate) { - if (fileOutputName == null) { - fileOutputName = args[argn]; - if (!fileOutputName.endsWith(".rar")) { - fileOutputName += ".rar"; - } - } - } else { - usage(); - throw new RAConfigException("Error multiple input files specified without -property or -update"); - } - } - - // Usage ? - if (isHelp) { - usage(); - System.exit(0); - } - if (fileInputName == null) { - usage(); - throw new RAConfigException("Error missing input file"); - } - if (doProperty && fileOutputName == null) { - usage(); - throw new RAConfigException("Error missing output file"); - } - if (fileInputName.equals(fileOutputName)) { - throw new RAConfigException("Input and Output filenames cannot be the same"); - } - - dbProps = new Properties(); - if (doProperty) { - if (jdbcRarLink.length() > 0 && rarlink.length() == 0) { - rarlink = jdbcRarLink; - } - try { - dbProps.load(new FileInputStream(propertyFile)); - } catch (Exception ex) { - if (propertyFile.endsWith(".properties")) { - System.out.println("Error reading " + propertyFile + " " + ex); - } else { - try { - dbProps.load(new FileInputStream(propertyFile + ".properties")); - } catch (Exception ex1) { - System.out.println("Error reading " + propertyFile + " " + ex); - } - } - } - buildXML(fileInputName, jndiname, rarlink, dbProps, encrypt, securityfile, path, isVerbose, true); - if (updatename.length() == 0) { - updatename = System.getProperty("java.io.tmpdir") + File.separator + "jonas-ra.xml"; - } - updateRAR(fileInputName, fileOutputName, updatename, rarlink); - } else if (doUpdate) { - updateRAR(fileInputName, fileOutputName, updatename, rarlink); - } else { - buildXML(fileInputName, jndiname, rarlink, dbProps, encrypt, securityfile, path, isVerbose, newXml); - } - } - - /** - * This method is used to generate rar files from a Properties object - * @param props the properties object which fields are used to create the - * rar file - * @param rarLink rarlink - * @param inputfile the jonas rar file used - * @param outputfile the url of the rar file - * @throws RAConfigException when a problem occurs while generating the rar - * file - */ - public static void generateRars(final Properties props, final String rarLink, final String inputfile, - final String outputfile) throws RAConfigException { - String jndiname = ""; - Boolean encrypt = false; - String securityfile = null; - String path = ""; - Boolean isVerbose = false; - String updatename = ""; - - buildXML(inputfile, jndiname, rarLink, props, encrypt, securityfile, path, isVerbose, true); - if (updatename.length() == 0) { - updatename = System.getProperty("java.io.tmpdir") + File.separator + "jonas-ra.xml"; - } - updateRAR(inputfile, outputfile, updatename, rarLink); - - } -} diff --git a/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfigException.java b/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfigException.java deleted file mode 100644 index a4f7440ecc..0000000000 --- a/jonas/modules/generators/raconfig/src/main/java/org/ow2/jonas/generators/raconfig/RAConfigException.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.generators.raconfig; - - -/** - * RAConfigException thrown when RAConfig fails. - * - * @author Guillaume Sauthier - */ -public class RAConfigException extends Exception { - - /** - * @param message inner message - */ - public RAConfigException(String message) { - super(message); - } - - /** - * @param cause inner cause - */ - public RAConfigException(Throwable cause) { - super(cause); - } - - /** - * @param message inner message - * @param cause inner cause - */ - public RAConfigException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/generators/raconfig/src/main/resources/META-INF/jonas-generators-raconfig.bnd b/jonas/modules/generators/raconfig/src/main/resources/META-INF/jonas-generators-raconfig.bnd deleted file mode 100644 index a35ec917a9..0000000000 --- a/jonas/modules/generators/raconfig/src/main/resources/META-INF/jonas-generators-raconfig.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.generators.raconfig diff --git a/jonas/modules/libraries/externals/javaee-api/pom.xml b/jonas/modules/libraries/externals/javaee-api/pom.xml deleted file mode 100644 index 7352595cb8..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/pom.xml +++ /dev/null @@ -1,255 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - javaee-api - bundle - JOnAS :: Libraries :: Externals :: Java EE API - - - - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - - - org.apache.geronimo.specs - geronimo-jaxrpc_1.1_spec - - - - - org.ow2.spec.ee - ow2-jpa-1.0-spec - ${ow2.spec.version} - provided - - - org.ow2.spec.ee - ow2-connector-1.5-spec - provided - - - org.ow2.spec.ee - ow2-jta-1.1-spec - provided - - - org.ow2.spec.ee - ow2-deployment-1.2-spec - provided - - - org.ow2.spec.ee - ow2-jsr77-1.1-spec - provided - - - - - org.apache.axis - axis-jaxrpc - provided - - - wsdl4j - wsdl4j - 1.6.1 - provided - - - - org.apache.tomcat - servlet-api - provided - - - - org.mortbay.jetty - jsp-api-2.1 - - 6.1.5 - - - org.mortbay.jetty - servlet-api-2.5 - - - - - - - org.apache.geronimo.specs - geronimo-jaxr_1.0_spec - 1.1 - provided - - - org.apache.geronimo.specs - geronimo-ws-metadata_2.0_spec - 1.1.2 - provided - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.stax-api-1.0 - 1.9.0 - provided - - - javax.security - jacc - provided - - - javax.mail - mail - provided - - - org.apache.geronimo.specs - geronimo-jms_1.1_spec - provided - - - org.apache.geronimo.specs - geronimo-jaxws_2.1_spec - - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.jaxb-api-2.1 - 1.9.0 - provided - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.stax-api-1.0 - - - javax.xml.stream - stax-api - - - org.apache.geronimo.specs - geronimo-activation_1.1_spec - - - - - javax.xml.soap - com.springsource.javax.xml.soap - 1.3.0 - provided - - - - javax.faces - jsf-api - provided - - - - - javax.faces - jsf-impl - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-stax - process-classes - - unpack - - - - - org.apache.servicemix.specs - org.apache.servicemix.specs.jaxp-api-1.4 - 1.2.0 - jar - false - ${project.build.directory}/classes - javax/xml/transform/stax/*.class - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-tld-assembly - package - - attached - - - - src/main/assembly/assembly.xml - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/assembly/assembly.xml b/jonas/modules/libraries/externals/javaee-api/src/main/assembly/assembly.xml deleted file mode 100644 index 16ec2ea0fd..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/assembly/assembly.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - tld - - jar - - - - false - - - - - - - / - - true - true - - - **/*.tld - - - - org.mortbay.jetty:jsp-api-2.1 - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java b/jonas/modules/libraries/externals/javaee-api/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java deleted file mode 100644 index d09e2400d5..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java +++ /dev/null @@ -1,425 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * Portions Copyright Apache Software Foundation. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can obtain - * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. - * Sun designates this particular file as subject to the "Classpath" exception - * as provided by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the License - * Header, with the fields enclosed by brackets [] replaced by your own - * identifying information: "Portions Copyrighted [year] - * [name of copyright owner]" - * - * Contributor(s): - * - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ - -package org.apache.taglibs.standard.tag.common.xml; - -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.io.StringReader; -import java.io.Writer; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.JspException; -import javax.servlet.jsp.JspTagException; -import javax.servlet.jsp.PageContext; -import javax.servlet.jsp.tagext.BodyTagSupport; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.URIResolver; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import org.apache.taglibs.standard.resources.Resources; -import org.apache.taglibs.standard.tag.common.core.ImportSupport; -import org.apache.taglibs.standard.tag.common.core.Util; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - *

    - * Support for tag handlers for <transform>, the XML transformation tag. - *

    - * @author Shawn Bayern - */ -public abstract class TransformSupport extends BodyTagSupport { - - // ********************************************************************* - // Protected state - - protected Object xml; // attribute - - protected String xmlSystemId; // attribute - - protected Object xslt; // attribute - - protected String xsltSystemId; // attribute - - protected Result result; // attribute - - // ********************************************************************* - // Private state - - private String var; // 'var' attribute - - private int scope; // processed 'scope' attr - - private Transformer t; // actual Transformer - - private TransformerFactory tf; // reusable factory - - private DocumentBuilder db; // reusable factory - - private DocumentBuilderFactory dbf; // reusable factory - - // ********************************************************************* - // Constructor and initialization - - public TransformSupport() { - super(); - init(); - } - - private void init() { - xml = xslt = null; - xmlSystemId = xsltSystemId = null; - var = null; - result = null; - tf = null; - scope = PageContext.PAGE_SCOPE; - } - - // ********************************************************************* - // Tag logic - - @Override - public int doStartTag() throws JspException { - /* - * We can set up our Transformer here, so we do so, and we let it - * receive parameters directly from subtags (instead of caching them. - */ - try { - - // ************************************ - // Initialize - - // set up our DocumentBuilderFactory if necessary - if (dbf == null) { - dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - dbf.setValidating(false); - } - if (db == null) { - db = dbf.newDocumentBuilder(); - } - - // set up the TransformerFactory if necessary - if (tf == null) { - tf = TransformerFactory.newInstance(); - } - - // ************************************ - // Produce transformer - - Source s; - if (xslt != null) { - if (!(xslt instanceof String) && !(xslt instanceof Reader) && !(xslt instanceof javax.xml.transform.Source)) { - throw new JspTagException(Resources.getMessage("TRANSFORM_XSLT_UNRECOGNIZED")); - } - s = getSource(xslt, xsltSystemId); - } else { - throw new JspTagException(Resources.getMessage("TRANSFORM_NO_TRANSFORMER")); - } - tf.setURIResolver(new JstlUriResolver(pageContext)); - t = tf.newTransformer(s); - - // ############################################### - // Patch for xalan 2.7.0 - // The method newTransformer(s) should throw a - // TransformerConfigurationException if the XSLT source is not valid - // instead of returning an object Transformer null - if (t == null) { - throw new TransformerConfigurationException(); - } - // ############################################### - - return EVAL_BODY_BUFFERED; - - } catch (SAXException ex) { - throw new JspException(ex); - } catch (ParserConfigurationException ex) { - throw new JspException(ex); - } catch (IOException ex) { - throw new JspException(ex); - } catch (TransformerConfigurationException ex) { - throw new JspException(ex); - } - } - - // parse 'xml' or body, transform via our Transformer, - // and store as 'var' or through 'result' - @Override - public int doEndTag() throws JspException { - try { - - // ************************************ - // Determine source XML - - // if we haven't gotten a source, use the body (which may be empty) - Object xml = this.xml; - if (xml == null) { - if (bodyContent != null && bodyContent.getString() != null) { - xml = bodyContent.getString().trim(); - } else { - xml = ""; - } - } - - // let the Source be with you - Source source = getSource(xml, xmlSystemId); - - // ************************************ - // Conduct the transformation - - // we can assume at most one of 'var' or 'result' is specified - if (result != null) { - // we can write directly to the Result - t.transform(source, result); - } else if (var != null) { - // we need a Document - Document d = db.newDocument(); - Result doc = new DOMResult(d); - t.transform(source, doc); - pageContext.setAttribute(var, d, scope); - } else { - Result page = new StreamResult(new SafeWriter(pageContext.getOut())); - t.transform(source, page); - } - - return EVAL_PAGE; - } catch (SAXException ex) { - throw new JspException(ex); - } catch (ParserConfigurationException ex) { - throw new JspException(ex); - } catch (IOException ex) { - throw new JspException(ex); - } catch (TransformerException ex) { - throw new JspException(ex); - } - } - - // Releases any resources we may have (or inherit) - @Override - public void release() { - init(); - } - - // ********************************************************************* - // Public methods for subtags - - /** Sets (adds) a transformation parameter on our transformer. */ - public void addParameter(final String name, final Object value) { - t.setParameter(name, value); - } - - // ********************************************************************* - // Utility methods - - /** - * Wraps systemId with a "jstl:" prefix to prevent the parser from thinking - * that the URI is truly relative and resolving it against the current - * directory in the filesystem. - */ - private static String wrapSystemId(final String systemId) { - if (systemId == null) { - return "jstl:"; - } else if (ImportSupport.isAbsoluteUrl(systemId)) { - return systemId; - } else { - return ("jstl:" + systemId); - } - } - - /** - * Retrieves a Source from the given Object, whether it be a String, Reader, - * Node, or other supported types (even a Source already). If 'url' is true, - * then we must be passed a String and will interpret it as a URL. A null - * input always results in a null output. - */ - private Source getSource(final Object o, final String systemId) throws SAXException, ParserConfigurationException, - IOException { - if (o == null) { - return null; - } else if (o instanceof Source) { - return (Source) o; - } else if (o instanceof String) { - // if we've got a string, chain to Reader below - return getSource(new StringReader((String) o), systemId); - } else if (o instanceof Reader) { - // explicitly go through SAX to maintain control - // over how relative external entities resolve - XMLReader xr = XMLReaderFactory.createXMLReader(); - xr.setEntityResolver(new ParseSupport.JstlEntityResolver(pageContext)); - InputSource s = new InputSource((Reader) o); - s.setSystemId(wrapSystemId(systemId)); - Source result = new SAXSource(xr, s); - result.setSystemId(wrapSystemId(systemId)); - return result; - } else if (o instanceof Node) { - return new DOMSource((Node) o); - } else if (o instanceof List) { - // support 1-item List because our XPath processor outputs them - List l = (List) o; - if (l.size() == 1) { - return getSource(l.get(0), systemId); // unwrap List - } else { - throw new IllegalArgumentException(Resources.getMessage("TRANSFORM_SOURCE_INVALID_LIST")); - } - } else { - throw new IllegalArgumentException(Resources.getMessage("TRANSFORM_SOURCE_UNRECOGNIZED") + o.getClass()); - } - } - - // ********************************************************************* - // Tag attributes - - public void setVar(final String var) { - this.var = var; - } - - public void setScope(final String scope) { - this.scope = Util.getScope(scope); - } - - // ********************************************************************* - // Private utility classes - - /** - * A Writer based on a wrapped Writer but ignoring requests to close() and - * flush() it. (Someone must have wrapped the toilet in my office - * similarly...) - */ - private static class SafeWriter extends Writer { - private Writer w; - - public SafeWriter(final Writer w) { - this.w = w; - } - - @Override - public void close() { - } - - @Override - public void flush() { - } - - @Override - public void write(final char[] cbuf, final int off, final int len) throws IOException { - w.write(cbuf, off, len); - } - } - - // ********************************************************************* - // JSTL-specific URIResolver class - - /** Lets us resolve relative external entities. */ - private static class JstlUriResolver implements URIResolver { - private final PageContext ctx; - - public JstlUriResolver(final PageContext ctx) { - this.ctx = ctx; - } - - public Source resolve(final String href, String base) throws TransformerException { - - // pass if we don't have a systemId - if (href == null) { - return null; - } - - // remove "jstl" marker from 'base' - // NOTE: how 'base' is determined varies among different Xalan - // xsltc implementations - int index; - if (base != null && (index = base.indexOf("jstl:")) != -1) { - base = base.substring(index + 5); - } - - // we're only concerned with relative URLs - if (ImportSupport.isAbsoluteUrl(href) || (base != null && ImportSupport.isAbsoluteUrl(base))) { - return null; - } - - // base is relative; remove everything after trailing '/' - if (base == null || base.lastIndexOf("/") == -1) { - base = ""; - } else { - base = base.substring(0, base.lastIndexOf("/") + 1); - } - - // concatenate to produce the real URL we're interested in - String target = base + href; - - // for relative URLs, load and wrap the resource. - // don't bother checking for 'null' since we specifically want - // the parser to fail if the resource doesn't exist - InputStream s; - if (target.startsWith("/")) { - s = ctx.getServletContext().getResourceAsStream(target); - if (s == null) { - throw new TransformerException(Resources.getMessage("UNABLE_TO_RESOLVE_ENTITY", href)); - } - } else { - String pagePath = ((HttpServletRequest) ctx.getRequest()).getServletPath(); - String basePath = pagePath.substring(0, pagePath.lastIndexOf("/")); - s = ctx.getServletContext().getResourceAsStream(basePath + "/" + target); - if (s == null) { - throw new TransformerException(Resources.getMessage("UNABLE_TO_RESOLVE_ENTITY", href)); - } - } - return new StreamSource(s); - } - } - -} diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/META-INF/javaee-api.bnd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/META-INF/javaee-api.bnd deleted file mode 100644 index eae72971fd..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/META-INF/javaee-api.bnd +++ /dev/null @@ -1,108 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# javax.xml.namespace got from the JDK. -# com.ibm , ..not needed (?) -# Ensure consistency by forcing import on interceptor 1.0 (if 1.1 is here, -# wire will be created between this bundle and the interceptor 1.1 bundle) -Import-Package !javax.activation.*,\ - !com.sun.org.apache.*,\ - !com.ibm.*,\ - javax.interceptor.*;version=1.0,\ - javax.xml.namespace;version=0.0.0,\ - javax.ejb;version="[3.0.0,3.1.0]",\ - javax.ejb.spi;version="[3.0.0,3.1.0]",\ - javax.ejb.embeddable;version="[3.0.0,3.1.0]";resolution:=optional,\ - javax.el;version="[2.1.0,2.2.0]",\ - javax.faces;version="[1.2.0,2.0.0]",\ - javax.faces.application;version="[1.2.0,2.0.0]",\ - javax.faces.component;version="[1.2.0,2.0.0]",\ - javax.faces.component.html;version="[1.2.0,2.0.0]",\ - javax.faces.context;version="[1.2.0,2.0.0]",\ - javax.faces.convert;version="[1.2.0,2.0.0]",\ - javax.faces.el;version="[1.2.0,2.0.0]",\ - javax.faces.event;version="[1.2.0,2.0.0]",\ - javax.faces.lifecycle;version="[1.2.0,2.0.0]",\ - javax.faces.model;version="[1.2.0,2.0.0]",\ - javax.faces.render;version="[1.2.0,2.0.0]",\ - javax.faces.validator;version="[1.2.0,2.0.0]",\ - javax.faces.webapp;version="[1.2.0,2.0.0]",\ - javax.persistence;version="[1.0.0,2.0.0]",\ - javax.persistence.spi;version="[1.0.0,2.0.0]",\ - javax.servlet.jsp;version="[2.1.0,2.2.0]";-split-package:=merge-first,\ - javax.servlet.jsp.el;version="[2.1.0,2.2.0]";-split-package:=merge-first,\ - javax.servlet.jsp.resources;version="[2.1.0,2.2.0]";-split-package:=merge-first,\ - javax.servlet.jsp.tagext;version="[2.1.0,2.2.0]";-split-package:=merge-first,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * - - -# These resources must be present. They cannot be exported. -Include-Resource @mail-1.4.jar!/META-INF/javamail.default.providers, \ - @mail-1.4.jar!/META-INF/javamail.default.address.map, \ - @mail-1.4.jar!/META-INF/javamail.charset.map, \ - @mail-1.4.jar!/META-INF/mailcap - -# List of packages exported by the bundle. -# TODO mail and activation implementations should be in jonas-mail -Export-Package com.ibm.wsdl.*;version=1.6.1,\ - com.sun.activation.*;version=1.1,\ - com.sun.mail.*;version=${javax.mail.version},\ - javax.activation.*;version=1.1;-split-package:=merge-first,\ - javax.annotation.*;version=1.0,\ - javax.faces.*;version=1.2;-split-package:=merge-first,\ - javax.ejb.*;version=3.0,\ - javax.el.*;version=2.1,\ - javax.enterprise.deploy.*;version=1.2,\ - javax.interceptor;version=1.0,\ - javax.jms.*;version=1.1,\ - javax.jws.*;version=2.0,\ - javax.mail.*;version=1.4,\ - javax.management.j2ee.*;version=1.2,\ - javax.persistence.*;version=1.0,\ - javax.resource.*;version=1.5,\ - javax.security.jacc;version=1.1,\ - javax.servlet.jsp.jstl.*;version=1.2,\ - javax.servlet.jsp.*;version=2.1;-split-package:=merge-first,\ - javax.servlet.*;version=2.5,\ - javax.transaction.*;version=1.1.0,\ - javax.wsdl.*;version=1.2,\ - javax.xml.bind.*;version=2.1;-split-package:=merge-first,\ - javax.xml.rpc.*;version=1.1,\ - javax.xml.soap.*;version=1.3,\ - javax.xml.stream.*;version=1.0,\ - javax.xml.ws.*;version=2.1,\ - javax.xml.namespace.*;version=1.5,\ - javax.xml.messaging.*;version=1.0,\ - javax.xml.registry.*;version=1.0,\ - javax.xml.transform.stax;version=1.0,\ - org.apache.taglibs.*;version=2.1;-split-package:=merge-first - -# Private package (Some OSGi utility to help SPI loading) -Private-Package org.apache.servicemix.specs.locator;-split-package:=merge-first - -Bundle-Activator org.apache.servicemix.specs.locator.Activator - -# JSTL Taglib may import JDBC Drivers and we don't know the name of the JDBC Driver, so we need the wildcard. -DynamicImport-Package * diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_0.xsd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_0.xsd deleted file mode 100644 index a27f3bc7b7..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_0.xsd +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - @(#)jsp_2_0.xsds 1.17 03/18/03 - - - - - - - This is the XML Schema for the JSP 2.0 deployment descriptor - types. The JSP 2.0 schema contains all the special - structures and datatypes that are necessary to use JSP files - from a web application. - - The contents of this schema is used by the web-app_2_4.xsd - file to define JSP specific content. - - - - - - - - The following conventions apply to all J2EE - deployment descriptor elements unless indicated otherwise. - - - In elements that specify a pathname to a file within the - same JAR file, relative filenames (i.e., those not - starting with "/") are considered relative to the root of - the JAR file's namespace. Absolute filenames (i.e., those - starting with "/") also specify names in the root of the - JAR file's namespace. In general, relative names are - preferred. The exception is .war files where absolute - names are preferred for consistency with the Servlet API. - - - - - - - - - - - - - - The jsp-configType is used to provide global configuration - information for the JSP files in a web application. It has - two subelements, taglib and jsp-property-group. - - - - - - - - - - - - - - - - - - The jsp-file element contains the full path to a JSP file - within the web application beginning with a `/'. - - - - - - - - - - - - - - - - The jsp-property-groupType is used to group a number of - files so they can be given global property information. - All files so described are deemed to be JSP files. The - following additional properties can be described: - - - Control whether EL is ignored - - Control whether scripting elements are invalid - - Indicate pageEncoding information. - - Indicate that a resource is a JSP document (XML) - - Prelude and Coda automatic includes. - - - - - - - - - - - - Can be used to easily set the isELIgnored - property of a group of JSP pages. By default, the - EL evaluation is enabled for Web Applications using - a Servlet 2.4 or greater web.xml, and disabled - otherwise. - - - - - - - - - The valid values of page-encoding are those of the - pageEncoding page directive. It is a - translation-time error to name different encodings - in the pageEncoding attribute of the page directive - of a JSP page and in a JSP configuration element - matching the page. It is also a translation-time - error to name different encodings in the prolog - or text declaration of a document in XML syntax and - in a JSP configuration element matching the document. - It is legal to name the same encoding through - mulitple mechanisms. - - - - - - - - - Can be used to easily disable scripting in a - group of JSP pages. By default, scripting is - enabled. - - - - - - - - - If true, denotes that the group of resources - that match the URL pattern are JSP documents, - and thus must be interpreted as XML documents. - If false, the resources are assumed to not - be JSP documents, unless there is another - property group that indicates otherwise. - - - - - - - - - The include-prelude element is a context-relative - path that must correspond to an element in the - Web Application. When the element is present, - the given path will be automatically included (as - in an include directive) at the beginning of each - JSP page in this jsp-property-group. - - - - - - - - - The include-coda element is a context-relative - path that must correspond to an element in the - Web Application. When the element is present, - the given path will be automatically included (as - in an include directive) at the end of each - JSP page in this jsp-property-group. - - - - - - - - - - - - - - - The taglibType defines the syntax for declaring in - the deployment descriptor that a tag library is - available to the application. This can be done - to override implicit map entries from TLD files and - from the container. - - - - - - - - - - A taglib-uri element describes a URI identifying a - tag library used in the web application. The body - of the taglib-uri element may be either an - absolute URI specification, or a relative URI. - There should be no entries in web.xml with the - same taglib-uri value. - - - - - - - - - - the taglib-location element contains the location - (as a resource relative to the root of the web - application) where to find the Tag Library - Description file for the tag library. - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_1.xsd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_1.xsd deleted file mode 100644 index 1f4f8ff2f6..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jsp_2_1.xsd +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.dtd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.dtd deleted file mode 100644 index 5d8515d492..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.dtd +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.xsd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.xsd deleted file mode 100644 index 2532dc4aa7..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/jspxml.xsd +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - - - - - - - - - - -]> - - - - - - - - - XML Schema for JSP 2.0. - - This schema is based upon the recent (May 5th, 2001) - W3C recommendation for XML Schema. - - A JSP translator should reject an XML-format file that is - not strictly valid according to this schema or does not observe - the constraints documented here. A translator is not required - to use this schema for validation or to use a validating parser. - - - - - - - - - - Body defines the "top-level" elements in root and beanInfo. - There are probably other elements that should use it. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A request-time expression value - - - - - - - - - - - Bool would be boolean except it does not accept 1 and 0. - - - - - - - - - - - - - - Identifier is an unqualified Java identifier. - - - - - - - - - - - TypeName is one or more Java identifiers separated by dots - with no whitespace. - - - - - - - - - - - ImportList is one or more typeNames separated by commas. - Whitespace is allowed before and after the comma. - - - - - - - - - - - SetProp is an Identifier or *. - - - - - - - - - - - RelativeURL is a uriReference with no colon character - before the first /, ? or #, if any (RFC2396). - - - - - - - - - - - - - - - Length is nn or nn%. - - - - - - - - - - - - Buffer Size with an explicit value - - - - - - - - - - - Buffer Size with a "none" value - - - - - - - - - - - Buffer size is xkb or none. - - - - - - - - - Content type and character encoding for this page. - - - - - - - - - - - Page Encoding for this page. - - - - - - - - - - - valid scope values - - - - - - - - - - - - - - valid values for a plugin type - - - - - - - - - - - - Buffer size is xkb. - - - - - - - - - - - - - - - - - The root element of all JSP documents is named root. - - Authors may, if they wish, include schema location information. - If specified, the information may appear as attributes of - the root element as follows: - - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/JSP/Page xsd-file-location" - - Documents should not specify the system identifier of a DTD - in a DOCTYPE declaration. - - - - - - - - - - - - - - - directive.page is the "page directive". - - - - - - - - - - - - - - - - - - - - - - - directive.include is the "include directive". - This element does not appear on XML views of JSP pages. - - - - - - - - - - - The representation of a scriplet. - - - - - - - - The reprsentation of a declaration. - - - - - - - - The representation of an expression. - - - - - - - - Verbatim template text. - - - - - - - - useBean instantiates or accesses a bean in the specified scope. - - Constraint: The allowed combinations of attributes are: - - class [type] | type [( class | beanName)] - - - - - - - - - - - - - - - - - - - - setProperty changes the value of an object property. - - Constraint: The object named by the name must have been - "introduced" to the JSP processor using either the - jsp:useBean action or a custom action with an associated - VariableInfo entry for this name. - - Exact valid combinations are not expressable in XML Schema. - They are: - - name="Identifier" property="*" - name="Identifier" property="Identfiier" param="string" - name="Identifier" property="Identifier" value="string" - - - - - - - - - - - - - - - getProperty obtains the value of an object property. - - Constraint: The object named by the name must have been - "introduced" to the JSP processor using either the - jsp:useBean action or a custom action with an associated - VariableInfo entry for this name. - - ???The spec is interpreted as restricting the values of - property to Identifier. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd deleted file mode 100644 index cd15422dec..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd deleted file mode 100644 index a3e39f54f3..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd deleted file mode 100644 index 447394adef..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd +++ /dev/null @@ -1,989 +0,0 @@ - - - - - - - %W% %G% - - - - - - ... - - - The instance documents may indicate the published - version of the schema using xsi:schemaLocation attribute - for J2EE namespace with the following location: - - http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd - - ]]> - - - - - - - - - - - - - - The taglib tag is the document root. - The definition of taglib is provided - by the tldTaglibType. - - - - - - - - The taglib element contains, among other things, tag and - tag-file elements. - The name subelements of these elements must each be unique. - - - - - - - - - - - - The taglib element contains function elements. - The name subelements of these elements must each be unique. - - - - - - - - - - - - - - - - - Specifies the type of body that is valid for a tag. - This value is used by the JSP container to validate - that a tag invocation has the correct body syntax and - by page composition tools to assist the page author - in providing a valid tag body. - - There are currently four values specified: - - tagdependent The body of the tag is interpreted by the tag - implementation itself, and is most likely - in a different "language", e.g embedded SQL - statements. - - JSP The body of the tag contains nested JSP - syntax. - - empty The body must be empty - - scriptless The body accepts only template text, EL - Expressions, and JSP action elements. No - scripting elements are allowed. - - - - - - - - - - - - - - - - - - - - - The extensibleType is an abstract base type that is used to - define the type of extension-elements. Instance documents - must substitute a known type to define the extension by - using xsi:type attribute to define the actual type of - extension-elements. - - - - - - - - - - - - - The function element is used to provide information on each - function in the tag library that is to be exposed to the EL. - - The function element may have several subelements defining: - - description Optional tag-specific information - - display-name A short name that is intended to be - displayed by tools - - icon Optional icon element that can be used - by tools - - name A unique name for this function - - function-class Provides the name of the Java class that - implements the function - - function-signature Provides the signature, as in the Java - Language Specification, of the Java - method that is to be used to implement - the function. - - example Optional informal description of an - example of a use of this function - - function-extension Zero or more extensions that provide extra - information about this function, for tool - consumption - - - - - - - - - - - A unique name for this function. - - - - - - - - - Provides the fully-qualified class name of the Java - class containing the static method that implements - the function. - - - - - - - - - - Provides the signature, of the static Java method that is - to be used to implement the function. The syntax of the - function-signature element is as follows: - - FunctionSignature ::= ReturnType S MethodName S? - '(' S? Parameters? S? ')' - - ReturnType ::= Type - - MethodName ::= Identifier - - Parameters ::= Parameter - | ( Parameter S? ',' S? Parameters ) - - Parameter ::= Type - - Where: - - * Type is a basic type or a fully qualified Java class name - (including package name), as per the 'Type' production - in the Java Language Specification, Second Edition, - Chapter 18. - - * Identifier is a Java identifier, as per the 'Identifier' - production in the Java Language Specification, Second - Edition, Chapter 18. - - Example: - - java.lang.String nickName( java.lang.String, int ) - - - - - - - - - - The example element contains an informal description - of an example of the use of this function. - - - - - - - - - - Function extensions are for tool use only and must not affect - the behavior of a container. - - - - - - - - - - - - - - - Defines an action in this tag library that is implemented - as a .tag file. - - The tag-file element has two required subelements: - - description Optional tag-specific information - - display-name A short name that is intended to be - displayed by tools - - icon Optional icon element that can be used - by tools - - name The unique action name - - path Where to find the .tag file implementing this - action, relative to the root of the web - application or the root of the JAR file for a - tag library packaged in a JAR. This must - begin with /WEB-INF/tags if the .tag file - resides in the WAR, or /META-INF/tags if the - .tag file resides in a JAR. - - example Optional informal description of an - example of a use of this tag - - tag-extension Zero or more extensions that provide extra - information about this tag, for tool - consumption - - - - - - - - - - - - - The example element contains an informal description - of an example of the use of a tag. - - - - - - - - - - Tag extensions are for tool use only and must not affect - the behavior of a container. - - - - - - - - - - - - - - - The tag defines a unique tag in this tag library. It has one - attribute, id. - - The tag element may have several subelements defining: - - description Optional tag-specific information - - display-name A short name that is intended to be - displayed by tools - - icon Optional icon element that can be used - by tools - - name The unique action name - - tag-class The tag handler class implementing - javax.servlet.jsp.tagext.JspTag - - tei-class An optional subclass of - javax.servlet.jsp.tagext.TagExtraInfo - - body-content The body content type - - variable Optional scripting variable information - - attribute All attributes of this action that are - evaluated prior to invocation. - - dynamic-attributes Whether this tag supports additional - attributes with dynamic names. If - true, the tag-class must implement the - javax.servlet.jsp.tagext.DynamicAttributes - interface. Defaults to false. - - example Optional informal description of an - example of a use of this tag - - tag-extension Zero or more extensions that provide extra - information about this tag, for tool - consumption - - - - - - - - - - - - Defines the subclass of javax.serlvet.jsp.tagext.JspTag - that implements the request time semantics for - this tag. (required) - - - - - - - - - - Defines the subclass of javax.servlet.jsp.tagext.TagExtraInfo - for this tag. (optional) - - If this is not given, the class is not consulted at - translation time. - - - - - - - - - Specifies the format for the body of this tag. - The default in JSP 1.2 was "JSP" but because this - is an invalid setting for simple tag handlers, there - is no longer a default in JSP 2.0. A reasonable - default for simple tag handlers is "scriptless" if - the tag can have a body. - - - - - - - - - - - - The example element contains an informal description - of an example of the use of a tag. - - - - - - - - - - Tag extensions are for tool use only and must not affect - the behavior of a container. - - - - - - - - - - - - - - - The attribute element defines an attribute for the nesting - tag. The attributre element may have several subelements - defining: - - description a description of the attribute - - name the name of the attribute - - required whether the attribute is required or - optional - - rtexprvalue whether the attribute is a runtime attribute - - type the type of the attributes - - fragment whether this attribute is a fragment - - - - - - - - - - - Defines if the nesting attribute is required or - optional. - - If not present then the default is "false", i.e - the attribute is optional. - - - - - - - - - - - - Defines if the nesting attribute can have scriptlet - expressions as a value, i.e the value of the - attribute may be dynamically calculated at request - time, as opposed to a static value determined at - translation time. - - If not present then the default is "false", i.e the - attribute has a static value - - - - - - - - - - Defines the Java type of the attributes value. For - static values (those determined at translation time) - the type is always java.lang.String. - - - - - - - - - - "true" if this attribute is of type - javax.jsp.tagext.JspFragment, representing dynamic - content that can be re-evaluated as many times - as needed by the tag handler. If omitted or "false", - the default is still type="java.lang.String" - - - - - - - - - - - - - - - - - Defines the canonical name of a tag or attribute being - defined. - - The name must conform to the lexical rules for an NMTOKEN. - - - - - - - - - - - - - - - - The tld-extensionType is used to indicate - extensions to a specific TLD element. - - It is used by elements to designate an extension block - that is targeted to a specific extension designated by - a set of extension elements that are declared by a - namespace. The namespace identifies the extension to - the tool that processes the extension. - - The type of the extension-element is abstract. Therefore, - a concrete type must be specified by the TLD using - xsi:type attribute for each extension-element. - - - - - - - - - - - - - - - - - - - - The taglib tag is the document root, it defines: - - description a simple string describing the "use" of this taglib, - should be user discernable - - display-name the display-name element contains a - short name that is intended to be displayed - by tools - - icon optional icon that can be used by tools - - tlib-version the version of the tag library implementation - - short-name a simple default short name that could be - used by a JSP authoring tool to create - names with a mnemonic value; for example, - the it may be used as the prefered prefix - value in taglib directives - - uri a uri uniquely identifying this taglib - - validator optional TagLibraryValidator information - - listener optional event listener specification - - tag tags in this tag library - - tag-file tag files in this tag library - - function zero or more EL functions defined in this - tag library - - taglib-extension zero or more extensions that provide extra - information about this taglib, for tool - consumption - - - - - - - - - - Describes this version (number) of the taglibrary. - It is described as a dewey decimal. - - - - - - - - - - - Defines a simple default name that could be used by - a JSP authoring tool to create names with a - mnemonicvalue; for example, it may be used as the - preferred prefix value in taglib directives. Do - not use white space, and do not start with digits - or underscore. - - - - - - - - - - Defines a public URI that uniquely identifies this - version of the taglibrary. Leave it empty if it - does not apply. - - - - - - - - - - - - - - - - - Taglib extensions are for tool use only and must not affect - the behavior of a container. - - - - - - - - - - Describes the JSP version (number) this taglibrary - requires in order to function (dewey decimal) - - - - - - - - - - - - - - - A validator that can be used to validate - the conformance of a JSP page to using this tag library is - defined by a validatorType. - - - - - - - - - - - Defines the TagLibraryValidator class that can be used - to validate the conformance of a JSP page to using this - tag library. - - - - - - - - - The init-param element contains a name/value pair as an - initialization param. - - - - - - - - - - - - - - - - - This type defines scope of the scripting variable. See - TagExtraInfo for details. The allowed values are, - "NESTED", "AT_BEGIN" and "AT_END". - - - - - - - - - - - - - - - - - - - - The variableType provides information on the scripting - variables defined by using this tag. It is a (translation - time) error for a tag that has one or more variable - subelements to have a TagExtraInfo class that returns a - non-null value from a call to getVariableInfo(). - - The subelements of variableType are of the form: - - description Optional description of this - variable - - name-given The variable name as a constant - - name-from-attribute The name of an attribute whose - (translation time) value will - give the name of the - variable. One of name-given or - name-from-attribute is required. - - variable-class Name of the class of the variable. - java.lang.String is default. - - declare Whether the variable is declared - or not. True is the default. - - scope The scope of the scripting varaible - defined. NESTED is default. - - - - - - - - - - - - The name for the scripting variable. - - - - - - - - - - The name of an attribute whose - (translation-time) value will give the name of - the variable. - - - - - - - - - - The optional name of the class for the scripting - variable. The default is java.lang.String. - - - - - - - - - - - - Whether the scripting variable is to be defined - or not. See TagExtraInfo for details. This - element is optional and "true" is the default. - - - - - - - - - The element is optional and "NESTED" is the default. - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_1.xsd b/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_1.xsd deleted file mode 100644 index 46b89222bf..0000000000 --- a/jonas/modules/libraries/externals/javaee-api/src/main/resources/javax/servlet/jsp/resources/web-jsptaglibrary_2_1.xsd +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/externals/jaxp-ri/pom.xml b/jonas/modules/libraries/externals/jaxp-ri/pom.xml deleted file mode 100644 index aba2e2266c..0000000000 --- a/jonas/modules/libraries/externals/jaxp-ri/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - jaxp-ri - bundle - JOnAS :: Libraries :: Externals :: JAXP-RI - - - 1.4.2 - - - - - com.sun.xml.parsers - jaxp-ri - ${jaxp-ri.version} - - - - diff --git a/jonas/modules/libraries/externals/jaxp-ri/src/main/resources/META-INF/jaxp-ri.bnd b/jonas/modules/libraries/externals/jaxp-ri/src/main/resources/META-INF/jaxp-ri.bnd deleted file mode 100644 index 0844b487ba..0000000000 --- a/jonas/modules/libraries/externals/jaxp-ri/src/main/resources/META-INF/jaxp-ri.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: javaee-api.bnd 13444 2008-03-28 15:57:28Z benoitf $ -# --------------------------------------------------------------------------- - -# List of packages exported by the bundle. -# For now, export only some packages of JAXP-RI dependency --exportcontents com.sun.org.apache.xalan.internal.*;version=${jaxp-ri.version}, \ - com.sun.org.apache.xerces.internal.*;version=${jaxp-ri.version}, \ - com.sun.org.apache.xml.internal.*;version=${jaxp-ri.version}, \ - com.sun.org.apache.xpath.internal.*;version=${jaxp-ri.version} - -Private-Package !* - -Import-Package !com.sun.java_cup.internal, \ - * - -Embed-Dependency jaxp-ri;inline=true diff --git a/jonas/modules/libraries/externals/monolog/pom.xml b/jonas/modules/libraries/externals/monolog/pom.xml deleted file mode 100644 index 14e5585b12..0000000000 --- a/jonas/modules/libraries/externals/monolog/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - monolog - bundle - JOnAS :: Libraries :: Externals :: Monolog Pack - - - - org.ow2.monolog - monolog-api - 2.2.1-SNAPSHOT - - - org.ow2.monolog - monolog-core - 2.2.1-SNAPSHOT - - - org.ow2.monolog - monolog-wrapper-javalog - 2.2.1-SNAPSHOT - - - org.ow2.monolog - monolog-wrapper-log4j - 2.2.1-SNAPSHOT - - - org.ow2.monolog - monolog-wrapper-velocity - 2.2.1-SNAPSHOT - - - org.ow2.monolog - monolog-wrapper-config - 2.2.1-SNAPSHOT - - - org.ow2.bundles - ow2-util-log - - - \ No newline at end of file diff --git a/jonas/modules/libraries/externals/monolog/src/main/java/org/ow2/jonas/monolog/MonologExtension.java b/jonas/modules/libraries/externals/monolog/src/main/java/org/ow2/jonas/monolog/MonologExtension.java deleted file mode 100644 index f4d44ff1b1..0000000000 --- a/jonas/modules/libraries/externals/monolog/src/main/java/org/ow2/jonas/monolog/MonologExtension.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.monolog; - -import org.objectweb.util.monolog.Monolog; -import org.objectweb.util.monolog.api.LogInfo; - -import org.osgi.framework.ServiceReference; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This class implements monolog extensions registry - * @author Mohammed Boukada - */ -public class MonologExtension { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(MonologExtension.class); - - /** - * Add an extension to Monolog - * @param logInfoProvider - */ - public void addExtension(final LogInfo logInfoProvider, ServiceReference ref) { - Character pattern = (Character) ref.getProperty("pattern"); - try { - Monolog.monologFactory.addLogInfo(pattern, logInfoProvider); - } catch (Exception e) { - - } - logger.info("Extension ''{0}'' was added by ''{1}'' to Monolog", pattern, logInfoProvider.getClass().getName()); - } - - - /** - * Remove and extension from Monolog - */ - public void removeExtension(ServiceReference ref) { - Character pattern = (Character) ref.getProperty("pattern"); - Monolog.monologFactory.removeLogInfo(pattern); - logger.info("Extension ''{0}'' was removerd from Monolog.", pattern); - } - - /** - * Start ipojo component - */ - public void start() { - logger.debug("Monolog extension component was started"); - } - - /** - * Stop ipojo component - */ - public void stop() { - logger.debug("Monolog extension component was stopped"); - } -} diff --git a/jonas/modules/libraries/externals/monolog/src/main/resources/META-INF/monolog.bnd b/jonas/modules/libraries/externals/monolog/src/main/resources/META-INF/monolog.bnd deleted file mode 100644 index cfd39bb0f8..0000000000 --- a/jonas/modules/libraries/externals/monolog/src/main/resources/META-INF/monolog.bnd +++ /dev/null @@ -1,49 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Empty export package list -Export-Package org.ow2.jonas.monolog - -# FIXME Reduce exported packages list --exportcontents org.objectweb.util.monolog.api.*,\ - org.objectweb.util.monolog.file.*,\ - org.objectweb.util.monolog.wrapper.printwriter,\ - org.objectweb.util.monolog.wrapper.p6spy,\ - org.objectweb.util.monolog.wrapper.javaLog,\ - org.objectweb.util.monolog.wrapper.velocity,\ - org.objectweb.util.monolog - -# Just to clear some warnings -Private-Package !* - -# P6Spy and Log4J are optional -Import-Package com.p6spy.*;resolution:=optional,\ - org.apache.*;resolution:=optional,\ - org.objectweb.util.monolog.wrapper.log4jMini;resolution:=optional,\ - * - -Embed-Dependency monolog-api,monolog-core,monolog-wrapper-javalog,monolog-wrapper-log4j,monolog-wrapper-velocity,monolog-wrapper-config;inline=true - -# Allow to resolve P6Spy/Velocity and Log4J if bundles are provided after the start of the Monolog Bundle -DynamicImport-Package com.p6spy.*,\ - org.apache.* diff --git a/jonas/modules/libraries/externals/monolog/src/main/resources/metadata.xml b/jonas/modules/libraries/externals/monolog/src/main/resources/metadata.xml deleted file mode 100644 index 0114657973..0000000000 --- a/jonas/modules/libraries/externals/monolog/src/main/resources/metadata.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/libraries/externals/neethi/pom.xml b/jonas/modules/libraries/externals/neethi/pom.xml deleted file mode 100755 index 4f8e6af369..0000000000 --- a/jonas/modules/libraries/externals/neethi/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - neethi - bundle - JOnAS :: Libraries :: Externals :: Neethi - - - - 3.0.1 - 1.2.12 - - - - - org.apache.neethi - neethi - ${neethi.version} - - - - org.apache.ws.commons.axiom - axiom-api - ${axiom.version} - - - org.apache.ws.commons.axiom - axiom-impl - ${axiom.version} - - - org.apache.ws.commons.axiom - axiom-dom - ${axiom.version} - - - diff --git a/jonas/modules/libraries/externals/neethi/src/main/resources/META-INF/neethi.bnd b/jonas/modules/libraries/externals/neethi/src/main/resources/META-INF/neethi.bnd deleted file mode 100755 index 23cbeb74c8..0000000000 --- a/jonas/modules/libraries/externals/neethi/src/main/resources/META-INF/neethi.bnd +++ /dev/null @@ -1,33 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: javaee-api.bnd 13444 2008-03-28 15:57:28Z benoitf $ -# --------------------------------------------------------------------------- - -# List of packages exported by the bundle. -Export-Package org.apache.neethi.*;version=${neethi.version} - -Import-Package org.jaxen.*;resolution:=optional,\ - * - -# Axiom as Private-Package -Embed-Dependency axiom-api;inline=true,\ - axiom-impl;inline=true,\ - axiom-dom;inline=true diff --git a/jonas/modules/libraries/externals/pom.xml b/jonas/modules/libraries/externals/pom.xml deleted file mode 100644 index 5e3825fa21..0000000000 --- a/jonas/modules/libraries/externals/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - org.ow2.jonas - jonas-libraries - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - jonas-externals - pom - JOnAS :: Libraries :: Externals - - - javaee-api - jaxp-ri - saaj-ri - monolog - ws-security - neethi - xmlbeans - - - diff --git a/jonas/modules/libraries/externals/saaj-ri/pom.xml b/jonas/modules/libraries/externals/saaj-ri/pom.xml deleted file mode 100644 index 777db0851d..0000000000 --- a/jonas/modules/libraries/externals/saaj-ri/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - saaj-ri - bundle - JOnAS :: Libraries :: Externals :: SAAJ-RI - - - 1.3.2 - - - - - com.sun.xml.messaging.saaj - saaj-impl - ${saaj-ri.version} - - - javax.xml.soap - saaj-api - - - - - org.apache.geronimo.specs - geronimo-saaj_1.3_spec - provided - - - javax.activation - activation - 1.1 - provided - - - - diff --git a/jonas/modules/libraries/externals/saaj-ri/src/main/java/com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.java b/jonas/modules/libraries/externals/saaj-ri/src/main/java/com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.java deleted file mode 100644 index 743b2fd317..0000000000 --- a/jonas/modules/libraries/externals/saaj-ri/src/main/java/com/sun/xml/messaging/saaj/client/p2p/HttpSOAPConnection.java +++ /dev/null @@ -1,814 +0,0 @@ -/* - * The contents of this file are subject to the terms - * of the Common Development and Distribution License - * (the "License"). You may not use this file except - * in compliance with the License. - * - * You can obtain a copy of the license at - * https://jwsdp.dev.java.net/CDDLv1.0.html - * See the License for the specific language governing - * permissions and limitations under the License. - * - * When distributing Covered Code, include this CDDL - * HEADER in each file and include the License file at - * https://jwsdp.dev.java.net/CDDLv1.0.html If applicable, - * add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your - * own identifying information: Portions Copyright [yyyy] - * [name of copyright owner] - */ -/* - * $Id$ - * $Revision: 1.7 $ - * $Date: 2008/09/29 06:48:21 $ - */ - -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can obtain - * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html - * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt. - * Sun designates this particular file as subject to the "Classpath" exception - * as provided by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the License - * Header, with the fields enclosed by brackets [] replaced by your own - * identifying information: "Portions Copyrighted [year] - * [name of copyright owner]" - * - * Contributor(s): - * - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ -package com.sun.xml.messaging.saaj.client.p2p; - -import com.sun.xml.messaging.saaj.SOAPExceptionImpl; -import com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl; -import com.sun.xml.messaging.saaj.util.Base64; -import com.sun.xml.messaging.saaj.util.ByteInputStream; -import com.sun.xml.messaging.saaj.util.JaxmURI; -import com.sun.xml.messaging.saaj.util.LogDomainConstants; -import com.sun.xml.messaging.saaj.util.ParseUtil; - -import javax.xml.soap.MessageFactory; -import javax.xml.soap.MimeHeader; -import javax.xml.soap.MimeHeaders; -import javax.xml.soap.SOAPConnection; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.reflect.Method; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.AccessController; -import java.security.PrivilegedExceptionAction; -import java.security.Provider; -import java.security.Security; -import java.util.Iterator; -import java.util.StringTokenizer; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * This represents a "connection" to the simple HTTP-based provider. - * - * @author Anil Vijendran (akv@eng.sun.com) - * @author Rajiv Mordani (rajiv.mordani@sun.com) - * @author Manveen Kaur (manveen.kaur@sun.com) - * - */ -public class HttpSOAPConnection extends SOAPConnection { - - public static final String vmVendor = System.getProperty("java.vendor.url"); - private static final String sunVmVendor = "http://java.sun.com/"; - private static final String ibmVmVendor = "http://www.ibm.com/"; - private static final boolean isSunVM = sunVmVendor.equals(vmVendor) ? true: false; - private static final boolean isIBMVM = ibmVmVendor.equals(vmVendor) ? true : false; - private static final String JAXM_URLENDPOINT="javax.xml.messaging.URLEndpoint"; - - protected static final Logger log = - Logger.getLogger(LogDomainConstants.HTTP_CONN_DOMAIN, - "com.sun.xml.messaging.saaj.client.p2p.LocalStrings"); - - private static final String defaultProxyHost = null; - private static final int defaultProxyPort = -1; - - MessageFactory messageFactory = null; - - boolean closed = false; - - public HttpSOAPConnection() throws SOAPException { - proxyHost = defaultProxyHost; - proxyPort = defaultProxyPort; - - try { - messageFactory = MessageFactory.newInstance(SOAPConstants.DYNAMIC_SOAP_PROTOCOL); - } catch (NoSuchMethodError ex) { - //fallback to default SOAP 1.1 in this case for backward compatibility - messageFactory = MessageFactory.newInstance(); - } catch (Exception ex) { - log.log(Level.SEVERE, "SAAJ0001.p2p.cannot.create.msg.factory", ex); - throw new SOAPExceptionImpl("Unable to create message factory", ex); - } - } - - public void close() throws SOAPException { - if (closed) { - log.severe("SAAJ0002.p2p.close.already.closed.conn"); - throw new SOAPExceptionImpl("Connection already closed"); - } - - messageFactory = null; - closed = true; - } - - public SOAPMessage call(SOAPMessage message, Object endPoint) - throws SOAPException { - if (closed) { - log.severe("SAAJ0003.p2p.call.already.closed.conn"); - throw new SOAPExceptionImpl("Connection is closed"); - } - - Class urlEndpointClass = null; - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - try { - if (loader != null) { - urlEndpointClass = loader.loadClass(JAXM_URLENDPOINT); - } else { - urlEndpointClass = Class.forName(JAXM_URLENDPOINT); - } - } catch (ClassNotFoundException ex) { - //Do nothing. URLEndpoint is available only when JAXM is there. - log.finest("SAAJ0090.p2p.endpoint.available.only.for.JAXM"); - } - - if (urlEndpointClass != null) { - if (urlEndpointClass.isInstance(endPoint)) { - String url = null; - - try { - Method m = urlEndpointClass.getMethod("getURL", (Class[])null); - url = (String) m.invoke(endPoint, (Object[])null); - } catch (Exception ex) { - // TBD -- exception chaining - log.log(Level.SEVERE,"SAAJ0004.p2p.internal.err",ex); - throw new SOAPExceptionImpl( - "Internal error: " + ex.getMessage()); - } - try { - endPoint = new URL(url); - } catch (MalformedURLException mex) { - log.log(Level.SEVERE,"SAAJ0005.p2p.", mex); - throw new SOAPExceptionImpl("Bad URL: " + mex.getMessage()); - } - } - } - - if (endPoint instanceof String) { - try { - endPoint = new URL((String) endPoint); - } catch (MalformedURLException mex) { - log.log(Level.SEVERE, "SAAJ0006.p2p.bad.URL", mex); - throw new SOAPExceptionImpl("Bad URL: " + mex.getMessage()); - } - } - - if (endPoint instanceof URL) - try { - PriviledgedPost pp = - new PriviledgedPost(this, message, (URL) endPoint); - SOAPMessage response = - (SOAPMessage) AccessController.doPrivileged(pp); - - return response; - } catch (Exception ex) { - // TBD -- chaining? - throw new SOAPExceptionImpl(ex); - } else { - log.severe("SAAJ0007.p2p.bad.endPoint.type"); - throw new SOAPExceptionImpl("Bad endPoint type " + endPoint); - } - } - - static class PriviledgedPost implements PrivilegedExceptionAction { - - HttpSOAPConnection c; - SOAPMessage message; - URL endPoint; - - PriviledgedPost( - HttpSOAPConnection c, - SOAPMessage message, - URL endPoint) { - this.c = c; - this.message = message; - this.endPoint = endPoint; - } - - public Object run() throws Exception { - return c.post(message, endPoint); - } - } - - // TBD - // Fix this to do things better. - - private String proxyHost = null; - - static class PriviledgedSetProxyAction implements PrivilegedExceptionAction { - - String proxyHost = null; - int proxyPort = 0; - - PriviledgedSetProxyAction(String host, int port) { - this.proxyHost = host; - this.proxyPort = port; - } - - public Object run() throws Exception { - System.setProperty("http.proxyHost", proxyHost); - System.setProperty("http.proxyPort", new Integer(proxyPort).toString()); - log.log(Level.FINE, "SAAJ0050.p2p.proxy.host", - new String[] { proxyHost }); - log.log(Level.FINE, "SAAJ0051.p2p.proxy.port", - new String[] { new Integer(proxyPort).toString() }); - return proxyHost; - } - } - - - public void setProxy(String host, int port) { - try { - proxyPort = port; - PriviledgedSetProxyAction ps = new PriviledgedSetProxyAction(host, port); - proxyHost = (String) AccessController.doPrivileged(ps); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public String getProxyHost() { - return proxyHost; - } - - private int proxyPort = -1; - - public int getProxyPort() { - return proxyPort; - } - - SOAPMessage post(SOAPMessage message, URL endPoint) throws SOAPException { - boolean isFailure = false; - - URL url = null; - HttpURLConnection httpConnection = null; - - int responseCode = 0; - try { - if (endPoint.getProtocol().equals("https")) - //if(!setHttps) - initHttps(); - // Process the URL - JaxmURI uri = new JaxmURI(endPoint.toString()); - String userInfo = uri.getUserinfo(); - - url = endPoint; - - if (dL > 0) - d("uri: " + userInfo + " " + url + " " + uri); - - // TBD - // Will deal with https later. - if (!url.getProtocol().equalsIgnoreCase("http") - && !url.getProtocol().equalsIgnoreCase("https")) { - log.severe("SAAJ0052.p2p.protocol.mustbe.http.or.https"); - throw new IllegalArgumentException( - "Protocol " - + url.getProtocol() - + " not supported in URL " - + url); - } - httpConnection = (HttpURLConnection) createConnection(url); - - httpConnection.setRequestMethod("POST"); - - httpConnection.setDoOutput(true); - httpConnection.setDoInput(true); - httpConnection.setUseCaches(false); - HttpURLConnection.setFollowRedirects(true); - - if (message.saveRequired()) - message.saveChanges(); - - MimeHeaders headers = message.getMimeHeaders(); - - // JOnAS Start Change - // ------------------------------------------------------------- - // If there is still no SOAPAction header just before writing the - // SOAPMessage, add a default one (only for SOAP 1.1). - // ------------------------------------------------------------- - if(message instanceof Message1_1Impl) { - if (headers.getHeader("SOAPAction") == null) { - // Set the default SOAPAction header: "" - headers.addHeader("SOAPAction", "\"\""); - } - } - // ------------------------------------------------------------- - // JOnAS End Change - - Iterator it = headers.getAllHeaders(); - boolean hasAuth = false; // true if we find explicit Auth header - while (it.hasNext()) { - MimeHeader header = (MimeHeader) it.next(); - - String[] values = headers.getHeader(header.getName()); - - if (values.length == 1) - httpConnection.setRequestProperty( - header.getName(), - header.getValue()); - else { - StringBuffer concat = new StringBuffer(); - int i = 0; - while (i < values.length) { - if (i != 0) - concat.append(','); - concat.append(values[i]); - i++; - } - - httpConnection.setRequestProperty( - header.getName(), - concat.toString()); - } - - if ("Authorization".equals(header.getName())) { - hasAuth = true; - log.fine("SAAJ0091.p2p.https.auth.in.POST.true"); - } - } - - if (!hasAuth && userInfo != null) { - initAuthUserInfo(httpConnection, userInfo); - } - - OutputStream out = httpConnection.getOutputStream(); - message.writeTo(out); - - out.flush(); - out.close(); - - httpConnection.connect(); - - try { - - responseCode = httpConnection.getResponseCode(); - - // let HTTP_INTERNAL_ERROR (500) through because it is used for SOAP faults - if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { - isFailure = true; - } - //else if (responseCode != HttpURLConnection.HTTP_OK) - //else if (!(responseCode >= HttpURLConnection.HTTP_OK && responseCode < 207)) - else if ((responseCode / 100) != 2) { - log.log(Level.SEVERE, - "SAAJ0008.p2p.bad.response", - new String[] {httpConnection.getResponseMessage()}); - throw new SOAPExceptionImpl( - "Bad response: (" - + responseCode - + httpConnection.getResponseMessage()); - - } - } catch (IOException e) { - // on JDK1.3.1_01, we end up here, but then getResponseCode() succeeds! - responseCode = httpConnection.getResponseCode(); - if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { - isFailure = true; - } else { - throw e; - } - - } - - } catch (SOAPException ex) { - throw ex; - } catch (Exception ex) { - log.severe("SAAJ0009.p2p.msg.send.failed"); - throw new SOAPExceptionImpl("Message send failed", ex); - } - - SOAPMessage response = null; - if (responseCode == HttpURLConnection.HTTP_OK || isFailure) { - try { - MimeHeaders headers = new MimeHeaders(); - - String key, value; - - // Header field 0 is the status line so we skip it. - - int i = 1; - - while (true) { - key = httpConnection.getHeaderFieldKey(i); - value = httpConnection.getHeaderField(i); - - if (key == null && value == null) - break; - - if (key != null) { - StringTokenizer values = - new StringTokenizer(value, ","); - while (values.hasMoreTokens()) - headers.addHeader(key, values.nextToken().trim()); - } - i++; - } - - InputStream httpIn = - (isFailure - ? httpConnection.getErrorStream() - : httpConnection.getInputStream()); - - byte[] bytes = readFully(httpIn); - - int length = - httpConnection.getContentLength() == -1 - ? bytes.length - : httpConnection.getContentLength(); - - // If no reply message is returned, - // content-Length header field value is expected to be zero. - if (length == 0) { - response = null; - log.warning("SAAJ0014.p2p.content.zero"); - } else { - ByteInputStream in = new ByteInputStream(bytes, length); - response = messageFactory.createMessage(headers, in); - } - - httpIn.close(); - httpConnection.disconnect(); - - } catch (SOAPException ex) { - throw ex; - } catch (Exception ex) { - log.log(Level.SEVERE,"SAAJ0010.p2p.cannot.read.resp", ex); - throw new SOAPExceptionImpl( - "Unable to read response: " + ex.getMessage()); - } - } - return response; - } - - // Object identifies where the request should be sent. - // It is required to support objects of type String and java.net.URL. - - public SOAPMessage get(Object endPoint) throws SOAPException { - if (closed) { - log.severe("SAAJ0011.p2p.get.already.closed.conn"); - throw new SOAPExceptionImpl("Connection is closed"); - } - Class urlEndpointClass = null; - - try { - urlEndpointClass = Class.forName("javax.xml.messaging.URLEndpoint"); - } catch (Exception ex) { - //Do nothing. URLEndpoint is available only when JAXM is there. - } - - if (urlEndpointClass != null) { - if (urlEndpointClass.isInstance(endPoint)) { - String url = null; - - try { - Method m = urlEndpointClass.getMethod("getURL", (Class[])null); - url = (String) m.invoke(endPoint, (Object[])null); - } catch (Exception ex) { - log.severe("SAAJ0004.p2p.internal.err"); - throw new SOAPExceptionImpl( - "Internal error: " + ex.getMessage()); - } - try { - endPoint = new URL(url); - } catch (MalformedURLException mex) { - log.severe("SAAJ0005.p2p."); - throw new SOAPExceptionImpl("Bad URL: " + mex.getMessage()); - } - } - } - - if (endPoint instanceof String) { - try { - endPoint = new URL((String) endPoint); - } catch (MalformedURLException mex) { - log.severe("SAAJ0006.p2p.bad.URL"); - throw new SOAPExceptionImpl("Bad URL: " + mex.getMessage()); - } - } - - if (endPoint instanceof URL) - try { - PriviledgedGet pg = new PriviledgedGet(this, (URL) endPoint); - SOAPMessage response = - (SOAPMessage) AccessController.doPrivileged(pg); - - return response; - } catch (Exception ex) { - throw new SOAPExceptionImpl(ex); - } else - throw new SOAPExceptionImpl("Bad endPoint type " + endPoint); - } - - static class PriviledgedGet implements PrivilegedExceptionAction { - - HttpSOAPConnection c; - URL endPoint; - - PriviledgedGet(HttpSOAPConnection c, URL endPoint) { - this.c = c; - this.endPoint = endPoint; - } - - public Object run() throws Exception { - return c.get(endPoint); - } - } - - SOAPMessage get(URL endPoint) throws SOAPException { - boolean isFailure = false; - - URL url = null; - HttpURLConnection httpConnection = null; - - int responseCode = 0; - try { - /// Is https GET allowed?? - if (endPoint.getProtocol().equals("https")) - initHttps(); - // Process the URL - JaxmURI uri = new JaxmURI(endPoint.toString()); - String userInfo = uri.getUserinfo(); - - url = endPoint; - - if (dL > 0) - d("uri: " + userInfo + " " + url + " " + uri); - - // TBD - // Will deal with https later. - if (!url.getProtocol().equalsIgnoreCase("http") - && !url.getProtocol().equalsIgnoreCase("https")) { - log.severe("SAAJ0052.p2p.protocol.mustbe.http.or.https"); - throw new IllegalArgumentException( - "Protocol " - + url.getProtocol() - + " not supported in URL " - + url); - } - httpConnection = (HttpURLConnection) createConnection(url); - - httpConnection.setRequestMethod("GET"); - - httpConnection.setDoOutput(true); - httpConnection.setDoInput(true); - httpConnection.setUseCaches(false); - HttpURLConnection.setFollowRedirects(true); - - httpConnection.connect(); - - try { - - responseCode = httpConnection.getResponseCode(); - - // let HTTP_INTERNAL_ERROR (500) through because it is used for SOAP faults - if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { - isFailure = true; - } else if ((responseCode / 100) != 2) { - log.log(Level.SEVERE, - "SAAJ0008.p2p.bad.response", - new String[] { httpConnection.getResponseMessage()}); - throw new SOAPExceptionImpl( - "Bad response: (" - + responseCode - + httpConnection.getResponseMessage()); - - } - } catch (IOException e) { - // on JDK1.3.1_01, we end up here, but then getResponseCode() succeeds! - responseCode = httpConnection.getResponseCode(); - if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { - isFailure = true; - } else { - throw e; - } - - } - - } catch (SOAPException ex) { - throw ex; - } catch (Exception ex) { - log.severe("SAAJ0012.p2p.get.failed"); - throw new SOAPExceptionImpl("Get failed", ex); - } - - SOAPMessage response = null; - if (responseCode == HttpURLConnection.HTTP_OK || isFailure) { - try { - MimeHeaders headers = new MimeHeaders(); - - String key, value; - - // Header field 0 is the status line so we skip it. - - int i = 1; - - while (true) { - key = httpConnection.getHeaderFieldKey(i); - value = httpConnection.getHeaderField(i); - - if (key == null && value == null) - break; - - if (key != null) { - StringTokenizer values = - new StringTokenizer(value, ","); - while (values.hasMoreTokens()) - headers.addHeader(key, values.nextToken().trim()); - } - i++; - } - - InputStream httpIn = - (isFailure - ? httpConnection.getErrorStream() - : httpConnection.getInputStream()); - - byte[] bytes = readFully(httpIn); - - int length = - httpConnection.getContentLength() == -1 - ? bytes.length - : httpConnection.getContentLength(); - - // If no reply message is returned, - // content-Length header field value is expected to be zero. - if (length == 0) { - response = null; - log.warning("SAAJ0014.p2p.content.zero"); - } else { - - ByteInputStream in = new ByteInputStream(bytes, length); - response = messageFactory.createMessage(headers, in); - } - - httpIn.close(); - httpConnection.disconnect(); - - } catch (SOAPException ex) { - throw ex; - } catch (Exception ex) { - log.log(Level.SEVERE, - "SAAJ0010.p2p.cannot.read.resp", - ex); - throw new SOAPExceptionImpl( - "Unable to read response: " + ex.getMessage()); - } - } - return response; - } - - private byte[] readFully(InputStream istream) throws IOException { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - byte[] buf = new byte[1024]; - int num = 0; - - while ((num = istream.read(buf)) != -1) { - bout.write(buf, 0, num); - } - - byte[] ret = bout.toByteArray(); - - return ret; - } - - //private static String SSL_PKG = "com.sun.net.ssl.internal.www.protocol"; - //private static String SSL_PROVIDER = - // "com.sun.net.ssl.internal.ssl.Provider"; - private static final String SSL_PKG; - private static final String SSL_PROVIDER; - - static { - if (isIBMVM) { - SSL_PKG ="com.ibm.net.ssl.internal.www.protocol"; - SSL_PROVIDER ="com.ibm.net.ssl.internal.ssl.Provider"; - } else { - //if not IBM VM default to Sun. - SSL_PKG = "com.sun.net.ssl.internal.www.protocol"; - SSL_PROVIDER ="com.sun.net.ssl.internal.ssl.Provider"; - } - } - - private void initHttps() { - //if(!setHttps) { - String pkgs = System.getProperty("java.protocol.handler.pkgs"); - log.log(Level.FINE, - "SAAJ0053.p2p.providers", - new String[] { pkgs }); - - if (pkgs == null || pkgs.indexOf(SSL_PKG) < 0) { - if (pkgs == null) - pkgs = SSL_PKG; - else - pkgs = pkgs + "|" + SSL_PKG; - System.setProperty("java.protocol.handler.pkgs", pkgs); - log.log(Level.FINE, - "SAAJ0054.p2p.set.providers", - new String[] { pkgs }); - try { - Class c = Class.forName(SSL_PROVIDER); - Provider p = (Provider) c.newInstance(); - Security.addProvider(p); - log.log(Level.FINE, - "SAAJ0055.p2p.added.ssl.provider", - new String[] { SSL_PROVIDER }); - //System.out.println("Added SSL_PROVIDER " + SSL_PROVIDER); - //setHttps = true; - } catch (Exception ex) { - } - } - //} - } - - private void initAuthUserInfo(HttpURLConnection conn, String userInfo) { - String user; - String password; - if (userInfo != null) { // get the user and password - //System.out.println("UserInfo= " + userInfo ); - int delimiter = userInfo.indexOf(':'); - if (delimiter == -1) { - user = ParseUtil.decode(userInfo); - password = null; - } else { - user = ParseUtil.decode(userInfo.substring(0, delimiter++)); - password = ParseUtil.decode(userInfo.substring(delimiter)); - } - - String plain = user + ":"; - byte[] nameBytes = plain.getBytes(); - byte[] passwdBytes = password.getBytes(); - - // concatenate user name and password bytes and encode them - byte[] concat = new byte[nameBytes.length + passwdBytes.length]; - - System.arraycopy(nameBytes, 0, concat, 0, nameBytes.length); - System.arraycopy( - passwdBytes, - 0, - concat, - nameBytes.length, - passwdBytes.length); - String auth = "Basic " + new String(Base64.encode(concat)); - conn.setRequestProperty("Authorization", auth); - if (dL > 0) - d("Adding auth " + auth); - } - } - - private static final int dL = 0; - private void d(String s) { - log.log(Level.SEVERE, - "SAAJ0013.p2p.HttpSOAPConnection", - new String[] { s }); - System.err.println("HttpSOAPConnection: " + s); - } - - private HttpURLConnection createConnection(URL endpoint) - throws IOException { - return (HttpURLConnection) endpoint.openConnection(); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/externals/saaj-ri/src/main/resources/META-INF/saaj-ri.bnd b/jonas/modules/libraries/externals/saaj-ri/src/main/resources/META-INF/saaj-ri.bnd deleted file mode 100644 index f3d9d4498b..0000000000 --- a/jonas/modules/libraries/externals/saaj-ri/src/main/resources/META-INF/saaj-ri.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: javaee-api.bnd 13444 2008-03-28 15:57:28Z benoitf $ -# --------------------------------------------------------------------------- - -Import-Package !com.sun.*, \ - !org.jvnet.fastinfoset, \ - * - - -# List of packages exported by the bundle. -Export-Package com.sun.xml.messaging.saaj.*;version=${saaj-ri.version};-split-package:=merge-first diff --git a/jonas/modules/libraries/externals/ws-security/pom.xml b/jonas/modules/libraries/externals/ws-security/pom.xml deleted file mode 100644 index 9abdd81452..0000000000 --- a/jonas/modules/libraries/externals/ws-security/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - ws-security - bundle - JOnAS :: Libraries :: Externals :: WS-Security - - - - xfire - opensaml - 1.0.1 - - - xml-security - xmlsec - 1.3.0 - - - org.apache.axis - addressing - 1.0 - - - wss4j - wss4j - 1.1.0-jonas-patch - - - org.bouncycastle - bcprov-jdk15 - 1.46 - - - diff --git a/jonas/modules/libraries/externals/ws-security/src/main/resources/META-INF/ws-security.bnd b/jonas/modules/libraries/externals/ws-security/src/main/resources/META-INF/ws-security.bnd deleted file mode 100644 index 609462a3e8..0000000000 --- a/jonas/modules/libraries/externals/ws-security/src/main/resources/META-INF/ws-security.bnd +++ /dev/null @@ -1,40 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export class from boucycastle because the jar contains also other files to not include -Export-Package org.bouncycastle.* - -Import-Package javax.xml.transform,\ - org.apache.xpath,\ - org.apache.xpath.compiler,\ - org.apache.xpath.functions,\ - org.apache.xpath.objects,\ - org.apache.xml.utils,\ - *;resolution:=optional - -Private-Package !* - --exportcontents org.apache.ws.security,\ - org.apache.ws.security.handler - -Embed-Dependency *;scope=compile|runtime;inline=true;artifactId=!bcprov-jdk15 \ No newline at end of file diff --git a/jonas/modules/libraries/externals/xmlbeans/pom.xml b/jonas/modules/libraries/externals/xmlbeans/pom.xml deleted file mode 100644 index f4590b09a1..0000000000 --- a/jonas/modules/libraries/externals/xmlbeans/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - org.ow2.jonas.osgi - jonas-externals - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.osgi - xmlbeans - bundle - JOnAS :: Libraries :: Externals :: XmlBeans - - - 2.4.0 - - - - - org.apache.xmlbeans - xmlbeans - ${xmlbeans.version} - - - - diff --git a/jonas/modules/libraries/externals/xmlbeans/src/main/resources/META-INF/xmlbeans.bnd b/jonas/modules/libraries/externals/xmlbeans/src/main/resources/META-INF/xmlbeans.bnd deleted file mode 100644 index 81ea5808dd..0000000000 --- a/jonas/modules/libraries/externals/xmlbeans/src/main/resources/META-INF/xmlbeans.bnd +++ /dev/null @@ -1,35 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: javaee-api.bnd 13444 2008-03-28 15:57:28Z benoitf $ -# --------------------------------------------------------------------------- - --exportcontents org.apache.xmlbeans.*;version=${xmlbeans.version} - -Import-Package !com.sun.*,\ - !org.apache.tools.ant.*,\ - !org.apache.xml.resolver.*,\ - !org.apache.crimson.*,\ - org.w3c.dom,\ - * - -Private-Package !* - -Embed-Dependency xmlbeans;inline=true diff --git a/jonas/modules/libraries/jonas-audit-jms/pom.xml b/jonas/modules/libraries/jonas-audit-jms/pom.xml deleted file mode 100644 index 27a911c5b4..0000000000 --- a/jonas/modules/libraries/jonas-audit-jms/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - org.ow2.jonas - jonas-libraries - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-audit-jms - bundle - JOnAS :: Libraries :: JOnAS Audit JMS interceptor - - - - org.ow2.joram - joram-client-jms - ${joram.version} - provided - - - org.ow2.joram - joram-shared - - - org.ow2.joram - joram-mom-core - - - - - org.ow2.bundles - ow2-audit-report - ${ow2-bundles.version} - provided - - - diff --git a/jonas/modules/libraries/jonas-audit-jms/src/main/java/org/ow2/jonas/audit/jms/interceptor/JMSClientInterceptor.java b/jonas/modules/libraries/jonas-audit-jms/src/main/java/org/ow2/jonas/audit/jms/interceptor/JMSClientInterceptor.java deleted file mode 100644 index 9191627d61..0000000000 --- a/jonas/modules/libraries/jonas-audit-jms/src/main/java/org/ow2/jonas/audit/jms/interceptor/JMSClientInterceptor.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.jms.interceptor; - -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Session; - -import org.objectweb.joram.client.jms.MessageInterceptor; -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Client Interceptor. - * @author Florent Benoit - */ -public class JMSClientInterceptor implements MessageInterceptor { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JMSClientInterceptor.class); - - /** - * Handle the given message. - * @param msg the given message - * @param session the JMS Session - */ - public void handle(final Message msg, final Session session) { - - // Get current ID - ICurrentInvocationID currentInvocationID = CurrentInvocationID.getInstance(); - - // Existing ID ? - IAuditID localID = currentInvocationID.getAuditID(); - - // If there is an ID, propagate it - if (localID != null) { - localID.increment(); - - // Store it in the message - try { - msg.setStringProperty(IAuditID.class.getName(), localID.getID()); - } catch (JMSException e) { - // Unable to set the property - logger.warn("Unable to set the property ''{0}'' on the message", IAuditID.class.getName(), e); - } - - } - } - -} diff --git a/jonas/modules/libraries/jonas-audit-jms/src/main/resources/META-INF/jonas-audit-jms.bnd b/jonas/modules/libraries/jonas-audit-jms/src/main/resources/META-INF/jonas-audit-jms.bnd deleted file mode 100644 index 6ea4771d17..0000000000 --- a/jonas/modules/libraries/jonas-audit-jms/src/main/resources/META-INF/jonas-audit-jms.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.audit.jms.interceptor diff --git a/jonas/modules/libraries/jonas-bootstrap-loader/pom.xml b/jonas/modules/libraries/jonas-bootstrap-loader/pom.xml deleted file mode 100644 index f35801a9be..0000000000 --- a/jonas/modules/libraries/jonas-bootstrap-loader/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-libraries - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-bootstrap-loader - - bundle - - JOnAS :: Libraries :: Bootstrap :: Loader - - - - diff --git a/jonas/modules/libraries/jonas-bootstrap-loader/src/main/java/org/ow2/jonas/lib/bootstrap/loader/JClassLoader.java b/jonas/modules/libraries/jonas-bootstrap-loader/src/main/java/org/ow2/jonas/lib/bootstrap/loader/JClassLoader.java deleted file mode 100644 index fc9db55eef..0000000000 --- a/jonas/modules/libraries/jonas-bootstrap-loader/src/main/java/org/ow2/jonas/lib/bootstrap/loader/JClassLoader.java +++ /dev/null @@ -1,204 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JClassLoader.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap.loader; - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; - -/** - * This class implements a URLClassLoader, that permits to add some URLs in it. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JClassLoader extends URLClassLoader { - - /** - * JClassLoader name - */ - private String name = null; - - /** - * Need to recompute toString() value ? (urls have changed) - * True by default (not done). - * Then, compute is done only when required and if needed - */ - private boolean recomputeToString = true; - - /** - * Need to recompute getClassPath() value ? (urls have changed) - * True by default (not done). - * Then, compute is done only when required and if needed - */ - private boolean recomputeClassPath = true; - - /** - * String representation used by toString() method - */ - private String toStringValue = null; - - /** - * Classpath value - */ - private String classpath = null; - - /** - * Constructs a new ClassLoader with the specified URLs. - * @param name ClassLoader name (used for Display) - * @param urls the URLs to add at the ClassLoader creation. - * @param parent parent ClassLoader, null if no parent. - */ - public JClassLoader(String name, URL[] urls, ClassLoader parent) { - super(urls, parent); - this.name = name; - this.recomputeToString = true; - this.recomputeClassPath = true; - } - - /** - * Constructs a new ClassLoader with the specified URLs. - * Uses the default delegation parent classloader. - * @param name ClassLoader name (used for Display) - * @param urls the URLs to add at the ClassLoader creation. - */ - public JClassLoader(String name, URL[] urls) { - super(urls, Thread.currentThread().getContextClassLoader()); - this.name = name; - this.recomputeToString = true; - this.recomputeClassPath = true; - } - - /** - * Add the specified URL to this ClassLoader. - * @param url the URL to add to this ClassLoader. - */ - public void addURL(URL url) { - if (url != null) { - super.addURL(url); - } - this.recomputeToString = true; - this.recomputeClassPath = true; - } - - /** - * Add the specified URLs to this ClassLoader. - * @param urls the URLs to add to this ClassLoader. - */ - public void addURLs(URL[] urls) { - if (urls != null) { - for (int i = 0; i < urls.length; i++) { - if (urls[i] != null) { - super.addURL(urls[i]); - } - } - } - this.recomputeToString = true; - this.recomputeClassPath = true; - } - - /** - * Display all the URLs from the class loader - */ - public void printURLs() { - System.out.println(name + " ClassLoader :"); - URL[] urls = super.getURLs(); - for (int i = 0; i < urls.length; i++) { - System.out.println("url=" + (new File(urls[i].getFile())).getAbsolutePath()); - } - // display parent classloader - if (getParent() != null && getParent() instanceof JClassLoader) { - System.out.println("parent :"); - ((JClassLoader) getParent()).printURLs(); - } - } - - /** - * Get the class path of this classloader - * @return the class path of this classloader - */ - public String getClassPath() { - // urls have changed, need to build value - if (recomputeClassPath) { - computeClassPath(); - } - return classpath; - } - - /** - * Displays useful information - * @return information - */ - public String toString() { - // urls have changed, need to build value - if (recomputeToString) { - computeToString(); - } - return toStringValue; - } - - /** - * Compute a string representation used by toString() method - */ - private void computeToString() { - StringBuffer sb = new StringBuffer(); - sb.append(this.getClass().getName()); - sb.append("["); - sb.append(name); - sb.append(", urls="); - URL[] urls = getURLs(); - for (int u = 0; u < urls.length; u++) { - sb.append(urls[u]); - if (u != urls.length - 1) { - sb.append(";"); - } - } - sb.append("]"); - toStringValue = sb.toString(); - - // value is updated, no need to do it again. - recomputeToString = false; - } - - /** - * Compute classpath value - */ - private void computeClassPath() { - String cp = ""; - // add parent classpath before - if (getParent() != null && getParent() instanceof JClassLoader) { - cp += ((JClassLoader) getParent()).getClassPath(); - } - URL[] urls = super.getURLs(); - for (int i = 0; i < urls.length; i++) { - cp = cp + File.pathSeparator + (new File(urls[i].getFile())).getAbsolutePath(); - } - classpath = cp; - // update value - recomputeClassPath = false; - } - - -} diff --git a/jonas/modules/libraries/jonas-bootstrap-loader/src/main/resources/META-INF/jonas-bootstrap-loader.bnd b/jonas/modules/libraries/jonas-bootstrap-loader/src/main/resources/META-INF/jonas-bootstrap-loader.bnd deleted file mode 100644 index e6f4e4ce1b..0000000000 --- a/jonas/modules/libraries/jonas-bootstrap-loader/src/main/resources/META-INF/jonas-bootstrap-loader.bnd +++ /dev/null @@ -1,25 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package !* -Export-Package org.ow2.jonas.lib.bootstrap.loader diff --git a/jonas/modules/libraries/jonas-commons/pom.xml b/jonas/modules/libraries/jonas-commons/pom.xml deleted file mode 100644 index 1a49ea3829..0000000000 --- a/jonas/modules/libraries/jonas-commons/pom.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - org.ow2.jonas - jonas-libraries - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-commons - bundle - JOnAS :: Libraries :: Commons - - - org.ow2.carol - carol - provided - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - compile - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.objectweb.monolog - monolog-core - ${monolog.version} - - - org.objectweb.monolog - monolog-wrapper-p6spy - ${monolog.version} - - - org.ow2.bundles - ow2-util-log - - - - - p6spy - p6spy - - - org.ow2.bundles - ow2-util-file - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-xmlconfig - ${ow2-bundles.version} - provided - - - org.ow2.jonas - jonas-bootstrap-loader - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - provided - - - org.testng - testng - test - - - org.hamcrest - hamcrest-all - 1.1 - test - - - diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/Bootstrap.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/Bootstrap.java deleted file mode 100644 index 15cc5eb26e..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/Bootstrap.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:Bootstrap.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; - - -/** - * This class load all the jars needed to start JOnAS and after this, it launch - * the JOnAS server (Server class). - * @author Ludovic Bert (initial developer) - * @author Florent Benoit (initial developer) - * @author Philippe Durieux (new jonas jar files architecture) - */ -public class Bootstrap { - - /** - * Required JVM version - */ - private static final String REQUIRED_JVM_VERSION = "1.5"; - - /** - * Empty, private Constructor for Utility Class - */ - private Bootstrap() { - } - - /** - * Server main routine (Load all the jars needed to start jonas) - * @param args the list of the args to give to the bootstrap class. - */ - public static void main(final String[] args) { - String classToRun = args[0]; - - // JDK 1.5 or higher is required - String specVersion = System.getProperty("java.specification.version"); - if (specVersion.compareTo(REQUIRED_JVM_VERSION) < 0) { - String implVersion = System.getProperty("java.vm.version"); - System.err.println("A '" + REQUIRED_JVM_VERSION + "' JVM version or higher is required for JOnAS. Current JVM implementation version is '" - + implVersion + "' with specification '" + specVersion + "'"); - System.exit(0); - } - - try { - - LoaderManager lm = LoaderManager.getInstance(); - JClassLoader jonasLoader = null; - - jonasLoader = lm.getExternalLoader(); - - Thread.currentThread().setContextClassLoader(jonasLoader); - - //jonasLoader.printURLs(); // DEBUG - - // Launch the "class_to_run" by using our classloader. - Class clazz = jonasLoader.loadClass(classToRun); - Class[] argList = new Class[] {args.getClass()}; - Method meth = clazz.getMethod("main", argList); - String[] newArgs = new String[args.length - 1]; - System.arraycopy(args, 1, newArgs, 0, newArgs.length); - meth.invoke(null, new Object[] {newArgs}); - } catch (InvocationTargetException ite) { - Throwable t = ite.getTargetException(); - String message = t.getMessage(); - if (t instanceof Error) { - System.err.println("Error during execution of " + classToRun + " : " + message); - } else if (t instanceof Exception) { - System.err.println("Exception during execution of " + classToRun + " : " + message); - } - t.printStackTrace(System.err); - System.exit(2); - } catch (Exception e) { - System.err.println(classToRun + " reflection error : " + e); - e.printStackTrace(); - System.exit(2); - } - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JFileFilter.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JFileFilter.java deleted file mode 100644 index 84afef4b1d..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JFileFilter.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id:JFileFilter.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap; - -//import java -import java.util.StringTokenizer; -import java.io.File; -import java.io.FileFilter; - -/** - * This class implements a FileFilter, used to list files of a directory. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JFileFilter implements FileFilter { - - /** - * The extensions that match in the file filter. - */ - private String[] extensions = null; - - /** - * Contruct a new JFileFilter with the specified filter. - * @param filter the filter to use. A comma-separated list of the allowed - * extensions. For instance ".jar,.dtd", note that ".*" is allowed. - */ - public JFileFilter(String filter) { - StringTokenizer st = new StringTokenizer(filter, ","); - int tokenCount = st.countTokens(); - extensions = new String[tokenCount]; - for (int i = 0; i < tokenCount; i++) { - extensions[i] = st.nextToken(); - } - } - - /** - * Tests whether or not the specified abstract pathname should be included - * in a pathname list. - * @param pathname the abstract pathname to be tested. - * @return true if and only if pathname should be included. - */ - public boolean accept(File pathname) { - if (pathname.isDirectory()) { - return true; - } else { - for (int i = 0; i < extensions.length; i++) { - if (extensions[i].equals(".*")) { - return true; - } else { - if (pathname.getName().endsWith(extensions[i])) { - return true; - } - } - } - return false; - } - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JProp.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JProp.java deleted file mode 100644 index e96e4c96c5..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JProp.java +++ /dev/null @@ -1,750 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Adriana Danes - * - * -------------------------------------------------------------------------- - * $Id:JProp.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.lib.bootstrap; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Properties; -import java.util.StringTokenizer; - -import javax.naming.Context; - -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.properties.ServerProperties; - - -/** - * This class manages configuration properties for a JOnAS Server. - * It adopts the singleton design-pattern. Configuration parameters - * are read from .properties file (jonas.properties or resource.properties). - * In order to support dynamically created resources, JProp also allows for - * a .properties file generation using a java.lang.Properties object content - * @author jonas-team - * @author Adriana Danes - * @author Florent Benoit - *
      - *
    • - * ../03/2003 Adriana Danes - *
        - *
      1. Manage unique instances for resource.properties - *
      2. Replace 'config' with 'conf' - *
      3. Change initial configuration policy : read properties file in a sole location : JONAS_BASE/CONFIG_DIR/ - *
      4. Replace method name getFilesEnv to getConfigFileEnv - *
      - *
    • - * 05/05/2003 Adriana Danes. Support JProp instance creation for dynamically created resources. - *
    - * 05/2003 Florent Benoit. Add support of xml files and checkstyle - */ -public class JProp implements ServerProperties { - - /** - * Domain name. - */ - public static final String DOMAIN_NAME = "domain.name"; - - /** - * -Djonas.base property. - */ - public static final String JONAS_BASE = "jonas.base"; - - /** - * jonas.master property. - */ - public static final String JONAS_MASTER = "jonas.master"; - - /** - * jonas.development property. - */ - public static final String JONAS_DEVELOPMENT = "jonas.development"; - - /** - * configuration directory name. - */ - private static final String CONFIG_DIR = "conf"; - - /** - * Repositories directory name. - */ - private static final String REPOSITORIES_DIR = "repositories"; - - /** - * System properties. - */ - private static Properties systEnv = System.getProperties(); - - /** - * JONAS_ROOT. - */ - private static String jonasRoot = systEnv.getProperty("jonas.root"); - - /** - * JONAS_BASE. - */ - private static String jonasBase = systEnv.getProperty(JONAS_BASE); - - /** - * Separator of file. - */ - private static String fileSeparator = systEnv.getProperty("file.separator"); - - /** - * Content of the file (xml). - */ - private String configFileXml = null; - - /** - * Content of a text file (may be a .properties file. - */ - private String versionFileContent = null; - - /** - * Properties of the config file. - */ - private Properties configFileEnv = new Properties(); - - /** - * System properties + properties of the file. - */ - private Properties allEnv = null; - - /** - * Name of the property file. - */ - private String propFileName = null; - - /** - * The JProp singleton for jonas.properties file. - */ - private static JProp unique = null; - - /** - * The multiple JProp objects for the resources configuration files (resource.properties) - * the keys are the configuration file names and the values, the JProp objects. - */ - private static Hashtable multiple = new Hashtable(); - - /** - * Default master value. - */ - private boolean master = false; - - /** - * Default execution mode value set to development. - */ - private boolean development = true; - - /** - * Private constructor which reads a resource.properties file. - * @param fileName the file name to read (the resource name) - */ - private JProp(final String fileName) { - readFile(fileName); - } - - /** - * Public constructor which reads the JONAS properties file (jonas.properties). - */ - public JProp() { - readFile(ConfigurationConstants.DEFAULT_JONAS_PREFIX); - } - - /** - * private constructor which writes properties in the provided file. - * @param fileName the file name in which configuration properties are written - * @param props configuration properties used to initialize the resource - */ - private JProp(final String fileName, final Properties props) { - writePropsToFile(fileName, props); - } - - /** - * private constructor which writes text in the provided file. - * @param fileName the file name in which configuration is written - * @param txt xml configuration for this resource - */ - private JProp(final String fileName, final String txt) { - writeXmlToFile(fileName, txt); - } - - /** - * Get the unique instance corresponding to the JOnAS server. - * Create it at first call. - * @return unique instance corresponding to the JOnAS server. - */ - public static JProp getInstance() { - if (unique == null) { - unique = new JProp(); - } - return unique; - } - - /** - * Get one of the multiple instances corresponding to a given resource. - * Create it at first call with a given configuration file name - * @param fileName the name of the configuration file which is given by the resource name - * @return one of the multiple instances corresponding to a given resource. - */ - public static JProp getInstance(final String fileName) { - if (!multiple.containsKey(fileName)) { - multiple.put(fileName, new JProp(fileName)); - } - return multiple.get(fileName); - } - - /** - * Get one of the multiple instances corresponding to a given resource. - * Create it at first call with a given configuration file name - * @param fileName the name of the configuration file - * @param props the content of the configuration file to be written in fileName - * @return one of the multiple instances corresponding to a given resource. - */ - public static JProp getInstance(final String fileName, final Properties props) { - if (!multiple.containsKey(fileName)) { - multiple.put(fileName, new JProp(fileName, props)); - } - return multiple.get(fileName); - } - - /** - * Remove the JProp instance corresponding to the given file name from the 'multiple' - * data structure. - * @param fileName file name corresponding to the name of the resource to be removed - */ - public static void removeInstance(final String fileName) { - if (multiple.containsKey(fileName)) { - multiple.remove(fileName); - } - } - - /** - * Remove the JProp instance corresponding to the given file name from the 'multiple' - * data structure and delete the file. - * @param fileName file name corresponding to the name of the resource to be removed - * and deleted from the file system - */ - public static void deleteInstance(final String fileName) { - if (multiple.containsKey(fileName)) { - multiple.remove(fileName); - // Check the JONAS_BASE environment property - if (jonasBase == null) { - return; - } - jonasBase = jonasBase.trim(); - - // JONAS_BASE/conf/fileName - String propFileName = jonasBase + fileSeparator + CONFIG_DIR + fileSeparator + fileName + ".properties"; - File del = new File(propFileName); - del.delete(); - } - } - - /** - * Write configuration properties in file getProperty(JONAS_BASE)/conf/fileName - * @param fileName name of the configuration file to write - * @param props Properties to register in the fileName file - * @throws Exception if it can't write to the specified file - */ - private void writePropsToFile(final String fileName, final Properties props) { - - // Check the JONAS_BASE environment property - if (jonasBase == null) { - throw new RuntimeException("JOnAS configuration error: environment property jonas.base not set!"); - } - jonasBase = jonasBase.trim(); - if (jonasBase.length() <= 0) { - throw new RuntimeException("JOnAS configuration error: jonas.base is null"); - } - - // JONAS_BASE/conf/fileName - propFileName = jonasBase + fileSeparator + CONFIG_DIR + fileSeparator + fileName + ".properties"; - - try { - FileOutputStream os = new FileOutputStream(propFileName); - props.store(os, "This file is generated by JOnAS"); - os.close(); - } catch (FileNotFoundException e) { - // File propFileName could not be opened - propFileName = null; - throw new RuntimeException("Cannot write config file :" + e); - } catch (IOException e) { - throw new RuntimeException("Cannot write config file :" + e); - } - configFileEnv = (Properties) props.clone(); - allEnv = configFileEnv; - } - - - /** - * Write xml configuration in file getProperty(JONAS_BASE)/conf/fileName - * @param fileName name of the configuration file to write - * @param txt text to write - * @throws Exception if it can't write to the specified file - */ - private void writeXmlToFile(final String fileName, final String txt) { - - // Check the JONAS_BASE environment property - if (jonasBase == null) { - throw new RuntimeException("JOnAS configuration error: environment property jonas.base not set!"); - } - jonasBase = jonasBase.trim(); - - // JONAS_BASE/conf/fileName - propFileName = jonasBase + fileSeparator + CONFIG_DIR + fileSeparator + fileName + ".properties"; - - try { - BufferedWriter out = new BufferedWriter(new FileWriter(new File(propFileName))); - out.write(txt); - out.flush(); - out.close(); - } catch (FileNotFoundException e) { - // File propFileName could not be opened - propFileName = null; - throw new RuntimeException("Cannot write xml configuration file:" + e); - } catch (IOException e) { - throw new RuntimeException("Cannot write xml configuration file:" + e); - } - } - - - /** - * Read the content of the specified file. It can be an xml or properties file - * @param fileName name of the properties configuration file to read - * @throws Exception if it fails - */ - private void readFile(final String fileName) { - // Check the JONAS_BASE environment property - if (jonasBase == null) { - throw new RuntimeException("JOnAS configuration error: environment property jonas.base not set!"); - } - jonasBase = jonasBase.trim(); - if (jonasBase.length() <= 0) { - throw new RuntimeException("JOnAS configuration error: jonas.base is null"); - } - - - if (fileName.equals(ConfigurationConstants.DEFAULT_JONAS_VERSIONS)) { - readVersionFile(); - return; - } - - // JONAS_BASE/conf/fileName - String fileFullPathname = jonasBase + fileSeparator + CONFIG_DIR + fileSeparator + fileName; - - if (fileFullPathname.toLowerCase().endsWith(".xml")) { - readXmlFile(fileFullPathname); - } else { - readPropsFile(fileFullPathname); - } - } - - private void readVersionFile() { - String fileFullPathname = jonasRoot + fileSeparator + ConfigurationConstants.DEFAULT_JONAS_VERSIONS; - try { - File f = new File(fileFullPathname); - int length = (int) f.length(); - FileInputStream fis = new FileInputStream(f); - byte[] buffer = new byte[length]; - fis.read(buffer); - fis.close(); - versionFileContent = new String(buffer); - } catch (FileNotFoundException e) { - throw new RuntimeException("Cannot find file " + fileFullPathname); - } catch (IOException e) { - throw new RuntimeException("Cannot read file " + fileFullPathname); - } - } - - /** - * Read initial configuration properties in file getProperty(JONAS_BASE)/conf/fileName - * These properties may be overridden by system properties, provided on the java command line. - * @param fileName name of the configuration file to read - * @throws Exception if it fails - */ - private void readPropsFile(final String fileName) { - - // Update filename of this JProp - this.propFileName = fileName; - - if (!fileName.endsWith(".properties")) { - propFileName += ".properties"; - } - - File f = null; - try { - f = new File(propFileName); - FileInputStream is = new FileInputStream(f); - configFileEnv.load(is); - } catch (FileNotFoundException e) { - throw new RuntimeException("Cannot find properties for " + propFileName); - } catch (IOException e) { - throw new RuntimeException("Cannot load properties for " + propFileName); - } - - allEnv = (Properties) configFileEnv.clone(); - // Overriddes with syst properties - if (f.getName().equalsIgnoreCase("jonas.properties")) { - for (Enumeration e = systEnv.keys(); e.hasMoreElements();) { - Object key = e.nextElement(); - String value = ((String) systEnv.get(key)).trim(); - allEnv.put(key, value); - } - - String serverName; - // If no system properties is set for the server name and that the - // property is missing in the jonas.properties file, use the - // default value - if (!systEnv.containsKey(ConfigurationConstants.JONAS_NAME_PROP)) { - if (!configFileEnv.containsKey(ConfigurationConstants.JONAS_NAME_PROP)) { - allEnv.put(ConfigurationConstants.JONAS_NAME_PROP, ConfigurationConstants.DEFAULT_JONAS_NAME); - } else { - allEnv.put(ConfigurationConstants.JONAS_NAME_PROP, configFileEnv.getProperty(ConfigurationConstants.JONAS_NAME_PROP)); - } - } - serverName = ((String) allEnv.get(ConfigurationConstants.JONAS_NAME_PROP)).trim(); - - // If no system properties is set for the domain name and that the - // property is missing in the jonas.properties file, use the - // server name as default value - if (!allEnv.containsKey(ConfigurationConstants.DOMAIN_NAME_PROP) && !systEnv.containsKey(ConfigurationConstants.DOMAIN_NAME_PROP)) { - if (!configFileEnv.containsKey(ConfigurationConstants.DOMAIN_NAME_PROP)) { - allEnv.put(ConfigurationConstants.DOMAIN_NAME_PROP, serverName); - } else { - allEnv.put(ConfigurationConstants.DOMAIN_NAME_PROP, configFileEnv.getProperty(ConfigurationConstants.DOMAIN_NAME_PROP)); - } - } - } - - if (allEnv.containsKey(JONAS_MASTER)) { - if(Boolean.parseBoolean(allEnv.getProperty(JONAS_MASTER))) { - setMaster(true); - } - } - - if (allEnv.containsKey(JONAS_DEVELOPMENT)) { - if(!Boolean.parseBoolean(allEnv.getProperty(JONAS_DEVELOPMENT))) { - setDevelopment(false); - } - } - } - - /** - * Read initial configuration in file getProperty(JONAS_BASE)/conf/fileName - * @param fileName name of the xml configuration file to read - */ - private void readXmlFile(final String fileName) { - - // Update filename of this JProp - this.propFileName = fileName; - - try { - File f = new File(propFileName); - int length = (int) f.length(); - FileInputStream fis = new FileInputStream(f); - byte[] buffer = new byte[length]; - fis.read(buffer); - fis.close(); - configFileXml = new String(buffer); - } catch (FileNotFoundException e) { - throw new RuntimeException("Cannot find file " + propFileName); - } catch (IOException e) { - throw new RuntimeException("Cannot read file " + propFileName); - } - } - - /** - * Static method which return the jonas.root property - * @return the jonas.root property - */ - public static String getJonasRoot() { - return jonasRoot; - } - - /** - * Static method which return the jonas.base property - * @return the jonas.base property - */ - public static String getJonasBase() { - return jonasBase; - } - - /** - * Static method which returns the configuration directory in jonas.base - * @return The configuration directory in jonas.base - */ - public static String getConfDir() { - return jonasBase + File.separator + CONFIG_DIR; - } - - /** - * Static method which returns the repositories directory in jonas.root - * @return The repositories directory in jonas.root - */ - public static String getRepositoriesRootDir() { - return jonasRoot + File.separator + REPOSITORIES_DIR; - } - - /** - * Static method which returns the repositories directory in jonas.base - * @return The repositories directory in jonas.base - */ - public static String getRepositoriesBaseDir() { - return jonasBase + File.separator + REPOSITORIES_DIR; - } - - /** - * Returns properties filename - * - * @return JOnAS properties filename - */ - public String getPropFile() { - return propFileName; - } - - /** - * Returns JOnAS environment as configured with configuration file properties content and - * system properties. - * @return JOnAS properties - */ - public Properties getEnv() { - return allEnv; - } - - /** - * Returns JOnAS environment as configured with files properties only. - * - * @return JOnAS properties - */ - public Properties getConfigFileEnv() { - return configFileEnv; - } - - public String getPropFileName() { - return propFileName; - } - /** - * Returns xml content of the resource file. - * - * @return xml content of the resource file - */ - public String getConfigFileXml() { - return configFileXml; - } - - public String getVersionFile() { - return versionFileContent; - } - - /** - * Returns the value of the related property. With default values. - * @param key the search key - * @param defaultVal if the key is not found return this default value - * @return property value - */ - public String getValue(final String key, final String defaultVal) { - String retProperty = allEnv.getProperty(key, defaultVal); - return retProperty.trim(); - } - - /** - * Returns the value of the related property. - * The method returns null if the property is not found. - * @param key the wanted key - * @return property value, null if not exist - */ - public String getValue(final String key) { - - String retProperty = allEnv.getProperty(key); - if (retProperty != null) { - retProperty = retProperty.trim(); - } - return retProperty; - } - - /** - * Returns the value of the related property as boolean. - * @param key the wanted key - * @param def default run if not found - * @return property value, true or false. - */ - public boolean getValueAsBoolean(final String key, final boolean def) { - boolean ret = def; - String value = this.getValue(key); - if (value != null && value.equalsIgnoreCase("true")) { - ret = true; - } - return ret; - } - - /** - * Returns the value of the related property as String []. - * The method returns null if the property is not found. - * @param key the wanted key - * @return property value, null if not exist - */ - public String[] getValueAsArray(final String key) { - - String [] res = null; - String value = this.getValue(key); - if (value != null) { - StringTokenizer st = new StringTokenizer(value, ","); - res = new String [st.countTokens()]; - int i = 0; - while (st.hasMoreTokens()) { - res[i++] = st.nextToken().trim(); - } - } - return res; - } - - /** - * String representation of the object for trace purpose - * @return String representation of this object - */ - @Override - public String toString() { - String s = new String(); - for (Enumeration e = this.configFileEnv.keys(); e.hasMoreElements();) { - Object key = e.nextElement(); - Object value = this.configFileEnv.get(key); - s = s.concat(" " + key + " = " + value + "\n"); - } - if (s.length() > 0) { - // take of the last '\n' - s = s.substring(0, s.length() - 1); - } - return s; - } - - /** - * Bind all the properties found in file properties in a naming context - * the naming context must be allocated by the caller - * @param ctx given context for bindings properties - * @throws Exception if it fails - */ - public void env2Ctx(final Context ctx) throws Exception { - Enumeration e = configFileEnv.propertyNames(); - String key = null; - while (e.hasMoreElements()) { - key = (String) e.nextElement(); - ctx.bind(key, configFileEnv.getProperty(key, "")); - } - } - - /** - * Displays the JOnAS properties values, as they are set by the - * different property files. - * @param args the arguments for launching this program - */ - public static void main(final String args[]) { - - JProp jonasProperties = null; - try { - jonasProperties = JProp.getInstance(); - } catch (Exception e) { - System.err.println(e); - System.exit(2); - } - for (Enumeration e = jonasProperties.configFileEnv.keys(); e.hasMoreElements();) { - Object key = e.nextElement(); - Object value = jonasProperties.configFileEnv.get(key); - System.out.println(key.toString() + "=" + value.toString()); - } - } - - // ----------------------------------------------------------------------------- - // Implementation of ServerProperties - // ----------------------------------------------------------------------------- - - /** - * @return The Domain Name - */ - public String getDomainName() { - return getValue(ConfigurationConstants.DOMAIN_NAME_PROP, null); - } - - /** - * @return the Server Name - */ - public String getServerName() { - return getValue(ConfigurationConstants.JONAS_NAME_PROP, null); - } - - /** - * @return the VERSIONS file content as a String. - */ - public String getVersionsFile() { - JProp jp = JProp.getInstance(ConfigurationConstants.DEFAULT_JONAS_VERSIONS); - return jp.versionFileContent; - } - - public boolean isMaster() { - return master; - } - - public void setMaster(final boolean master) { - this.master = master; - } - - public boolean isDevelopment() { - return development; - } - - public void setDevelopment(final boolean development) { - this.development = development; - } - - /** - * @return work directory - */ - public String getWorkDirectory() { - String workDir = getValue(ConfigurationConstants.WORK_DIRECTORY_PROP, - ConfigurationConstants.DEFAULT_WORK_DIRECTORY); - - File f = new File(workDir); - if (!f.isAbsolute()) { - // If property is not absolute, prefix it with JONAS_BASE - workDir = jonasBase + File.separator + workDir; - } - // Make the work directory property available for replacing expressions - if (System.getProperty(ConfigurationConstants.WORK_DIRECTORY_PROP) == null) { - System.setProperty(ConfigurationConstants.WORK_DIRECTORY_PROP, workDir); - } - return workDir; - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JURLs.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JURLs.java deleted file mode 100644 index fc65d3f8c9..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/JURLs.java +++ /dev/null @@ -1,239 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id:JURLs.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap; - -import java.util.Enumeration; -import java.util.Vector; -import java.io.File; -import java.net.URL; -import java.net.MalformedURLException; - -/** - * This implements an utility class that list the URLs of the jars to load at - * the launch time of the JOnAS server. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JURLs extends Vector { - - /** - * Construct an empty JURLs. - */ - public JURLs() { - super(); - } - - /** - * Add the specified file or directory to this JURLs. Note that in the case - * of a directory this method add only the content of this one. - * @param file the specified file or directory to add to this JURLs. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void add(File file) throws MalformedURLException { - add(file, null, null, null); - } - - /** - * Add the specified directory to this JURLs. Note that this method add the - * URL of the specified directory and not the content of this directory. - * @param file the directory to add to this JURLs. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void addDir(File file) throws MalformedURLException { - if (!file.exists() || !file.isDirectory()) { - String err = "Warning: Resource " + file.getName(); - err += " cannot be loaded : The directory does not exist"; - System.out.println(err); - } else { - if (!contains(file.toURL())) { - add(file.toURL()); - } - } - } - - /** - * Add the content of the specified directory to this JURLs, by using the - * specified filter. - * @param file the directory to add to this JURLs. - * @param filter the filter to use to add the content of this directory, - * null if not use the filter. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void add(File file, String filter) throws MalformedURLException { - if (file.isDirectory()) { - add(file, filter, null, null); - } else { - String err = "Warning: Resource " + file.getName(); - err += " cannot be loaded : It is not a directory"; - System.out.println(err); - } - } - - /** - * Add the content of the specified directory to this JURLs if the contained - * file not starts with the specified prefix. - * @param file the directory to add to this JURLs. - * @param prefix the prefix to ignore, null if not use the prefix. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void addNotStartWith(File file, String prefix) throws MalformedURLException { - - if (file.isDirectory()) { - add(file, null, prefix, null); - } else { - String err = "Warning: Resource " + file.getName(); - err += " cannot be loaded : It is not a directory"; - System.out.println(err); - } - } - - /** - * Add the content of the specified directory to this JURLs if the contained - * file not ends with the specified suffix. - * @param file the directory to add to this JURLs. - * @param suffix the suffix to ignore, null if not use the suffix. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void addNotEndWith(File file, String suffix) throws MalformedURLException { - - if (file.isDirectory()) { - add(file, null, null, suffix); - } else { - String err = "Warning: Resource " + file.getName(); - err += " cannot be loaded : It is not a directory"; - System.out.println(err); - } - } - - /** - * Add the content of the specified directory to this JURLs by using a file - * filter and if the contained file not starts with the prefix and not ends - * with the suffix. - * @param file the directory to add to this JURLs. - * @param filter the filter to use to add the content of this directory, - * null if not use the filter. - * @param prefix the prefix to ignore, null if not use the prefix. - * @param suffix the suffix to ignore, null if not use the suffix. - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void add(File file, String filter, String prefix, String suffix) throws MalformedURLException { - if (!file.exists()) { - String err = "Warning: Resource " + file.getPath(); - err += " cannot be loaded : The file or directory does not exist"; - err += "(Check your environment variable)"; - System.out.println(err); - } else { - if (file.isFile()) { - if (!isMatching(file, prefix, suffix) && !contains(file.toURL())) { - // System.out.println("Adding URL "+file.toURL()); // DEBUG - add(file.toURL()); - } - } else { - File[] childrenFiles = null; - if (filter != null) { - childrenFiles = file.listFiles(new JFileFilter(filter)); - } else { - childrenFiles = file.listFiles(); - } - for (int i = 0; i < childrenFiles.length; i++) { - add(childrenFiles[i], filter, prefix, suffix); - } - } - } - } - - /** - * Return true if only if the file starts with the specified prefix or ends - * with the specified suffix. - * @param file the file to match. - * @param prefix the prefix to use for the matching, null if do not use the - * prefix. - * @param suffix the suffix to use for the matching, null if do not use the - * suffix. - * @return true if only if the file starts with the specified prefix or ends - * with the specified suffix. - */ - private boolean isMatching(File file, String prefix, String suffix) { - String fileName = file.getName(); - if (prefix == null) { - if (suffix == null) { - return false; - } else { - return fileName.endsWith(suffix); - } - } else { - if (suffix == null) { - return fileName.startsWith(prefix); - } else { - return fileName.startsWith(prefix) || fileName.endsWith(suffix); - } - } - } - - /** - * Merge the specified JURls to this JURLs. - * @param jurl the JURls to merge with this JURLs. - */ - public void merge(JURLs jurl) { - for (Enumeration e = jurl.elements(); e.hasMoreElements();) { - URL url = (URL) e.nextElement(); - if (!contains(url)) { - add(url); - } - } - } - - /** - * Remove the specified file of this JURLs - * @param file the file to be removed - * @throws MalformedURLException to indicate that a malformed URL has - * occured. - */ - public void remove(File file) throws MalformedURLException { - if (file.exists()) { - remove(file.toURL()); - } else { - String err = "Warning: Resource " + file.getName(); - err += " cannot be removed : It doesn't exist"; - System.out.println(err); - } - } - - /** - * Return an array containing all the URLs of this JURLs. - * @return an array containing all the URLs of this JURLs. - */ - public URL[] toURLs() { - return (URL[]) super.toArray(new URL[elementCount]); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/LoaderManager.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/LoaderManager.java deleted file mode 100644 index 299e13602c..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/LoaderManager.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:LoaderManager.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap; - -import java.io.File; -import java.net.URL; - -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.loader.OSGiClassLoader; -import org.ow2.util.url.URLUtils; - -/** - * This class create all the ClassLoader necessary for JOnAS. - * @author Guillaume Sauthier - * @author Francois Fornaciari - */ -public final class LoaderManager { - - /** - * LoaderManager unique instance. - */ - private static LoaderManager instance = null; - - /** - * External ClassLoader. - */ - private JClassLoader externalClassLoader = null; - - /** - * $JONAS_ROOT. - */ - private String jonasRoot = null; - - /** - * $JONAS_BASE. - */ - private String jonasBase = null; - - /** - * $JONAS_ROOT/lib. - */ - private File jonasRootLib = null; - - /** - * $JONAS_ROOT/lib/ext. - */ - private File jonasRootLibExt = null; - - /** - * Relative library path. - */ - private static final String LIB = "lib"; - - /** - * Relative external library path : ext. - */ - private static final String EXTERNAL_FOLDER = "ext"; - - /** - * Relative external library path : lib/ext. - */ - private static final String LIB_EXTERNAL = LIB + File.separator + "ext"; - - /** - * Relative external library path : ext. - */ - private static final String TLD_FOLDER = "internal-ee-tld"; - - /** - * Initialize main directories. - */ - private LoaderManager() { - jonasRoot = JProp.getJonasRoot(); - jonasBase = JProp.getJonasBase(); - jonasRootLib = new File(jonasRoot, LIB); - jonasRootLibExt = new File(jonasRootLib, EXTERNAL_FOLDER); - } - - /** - * @return Returns the unique instance of LoaderManager. - */ - public static LoaderManager getInstance() { - if (instance == null) { - instance = new LoaderManager(); - } - return instance; - } - - /** - * @return Returns the External ClassLoader which contains user libraries. - * @throws Exception When ClassLoader cannot be created. - */ - public JClassLoader getExternalLoader() throws Exception { - if (externalClassLoader == null) { - externalClassLoader = createExternalClassLoader(); - } - return externalClassLoader; - } - - /** - * Constructs the External ClassLoader. - * - * @return Returns the External ClassLoader. - * @throws Exception When ClassLoader cannot be created from CLASSPATH or resources cannot be added to URLs List. - */ - private JClassLoader createExternalClassLoader() throws Exception { - JURLs jurls = new JURLs(); - - // Add TLD Java EE file - jurls.add(new File(jonasRootLib, TLD_FOLDER), "javaee-tld.jar"); - - // Load $JONAS_ROOT/lib/ext/*.jar - jurls.add(jonasRootLibExt, ".jar"); - - // Add $JONAS_BASE/lib/ext only if $JONAS_BASE != $JONAS_ROOT - // $JONAS_BASE/lib/ext is added before $JONAS_ROOT/lib/ext - if (!jonasRoot.toLowerCase().equals(jonasBase.toLowerCase())) { - File jonasBaseLibExt = new File(jonasBase, LIB_EXTERNAL); - if (jonasBaseLibExt.exists()) { - jurls.add(jonasBaseLibExt, ".jar"); - } - } - - return new JClassLoader("External", - jurls.toURLs(), - createSystemFilteringClassLoader()); - } - - /** - * Creates a {@code FilteringClassLoader} instance delegating to its parent - * {@code OSGiClassLoader}. - * Filters are loaded from the {@code $[jonas.base]/conf/classloader-default-filtering.xml}. - * If no XML definition file is found, it returns a non-filtrant loader. - * @return a configured FilteringClassLoader - */ - private FilteringClassLoader createSystemFilteringClassLoader() { - - // OSGiClassLoader delegates class loading to the bundle ClassLoader - // so we can benefit of OSGi properties (Dynamic-Import, ...) - FilteringClassLoader loader = new FilteringClassLoader(new OSGiClassLoader()); - - File xmlConfigFile = new File(new File(JProp.getConfDir()), - FilteringClassLoader.XML_FILE); - if (xmlConfigFile.isFile()) { - URL systemDefinitionUrl = URLUtils.fileToURL(xmlConfigFile); - loader.setDefinitionUrl(systemDefinitionUrl); - } // else will be a transparent ClassLoader (no filters) - - loader.start(); - - return loader; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/RemoteClassLoaderSpi.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/RemoteClassLoaderSpi.java deleted file mode 100644 index fffd5f6f4a..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/bootstrap/RemoteClassLoaderSpi.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RemoteClassLoaderSpi.java 10822 2007-07-04 08:26:06Z durieuxp $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.bootstrap; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLClassLoader; -import java.rmi.server.RMIClassLoader; -import java.rmi.server.RMIClassLoaderSpi; -import java.util.StringTokenizer; - -import org.ow2.carol.util.configuration.CarolDefaultValues; -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; - -/** - * Class RemoteClassLoaderSpi is the CAROL JRMP CLass Loader SPI - * for serialization performances. - * @author Guillaume Riviere (Guillaume.Riviere@inrialpes.fr) - * @author S. Ali Tokmen - */ -public class RemoteClassLoaderSpi extends RMIClassLoaderSpi { - - /** - * Carol was already initialized - */ - private static boolean carolIsInitialized = false; - - /** - * Local call optimization is set - */ - private static boolean carolIsOptimized = false; - - /** - * Current provider - */ - private final RMIClassLoaderSpi defaultProvider = RMIClassLoader.getDefaultProviderInstance(); - - /** - * Loads a class from a codebase URL path, optionally using the supplied - * loader. - * @param codebase the list of URLs (separated by spaces) to load the class - * from, or null - * @param name the name of the class to load - * @param defaultLoader additional contextual class loader to use, or - * null - * @return the Class object representing the loaded class - * @throws MalformedURLException if codebase is non-null - * and contains an invalid URL, or if codebase is - * null and the system property - * java.rmi.server.codebase contains an invalid URL - * @throws ClassNotFoundException if a definition for the class could not be - * found at the specified location - */ - public Class loadClass(String codebase, String name, ClassLoader defaultLoader) throws MalformedURLException, - ClassNotFoundException { - return defaultProvider.loadClass(normalizeCodebase(codebase), name, defaultLoader); - } - - /** - * Loads a dynamic proxy class (see {@link java.lang.reflect.Proxy} that - * implements a set of interfaces with the given names from a codebase URL - * path, optionally using the supplied loader. - * @param codebase the list of URLs (space-separated) to load classes from, - * or null - * @param interfaces the names of the interfaces for the proxy class to - * implement - * @return a dynamic proxy class that implements the named interfaces - * @param defaultLoader additional contextual class loader to use, or - * null - * @throws MalformedURLException if codebase is non-null - * and contains an invalid URL, or if codebase is - * null and the system property - * java.rmi.server.codebase contains an invalid URL - * @throws ClassNotFoundException if a definition for one of the named - * interfaces could not be found at the specified location, or if - * creation of the dynamic proxy class failed (such as if - * {@link java.lang.reflect.Proxy#getProxyClass(ClassLoader,Class[])} - * would throw an IllegalArgumentException for the - * given interface list) - */ - public Class loadProxyClass(String codebase, String[] interfaces, ClassLoader defaultLoader) - throws MalformedURLException, ClassNotFoundException { - return defaultProvider.loadProxyClass(normalizeCodebase(codebase), interfaces, defaultLoader); - } - - /** - * Returns a class loader that loads classes from the given codebase URL - * path. - * @param codebase the list of URLs (space-separated) from which the - * returned class loader will load classes from, or null - * @return a class loader that loads classes from the given codebase URL - * path - * @throws MalformedURLException if codebase is non-null - * and contains an invalid URL, or if codebase is - * null and the system property - * java.rmi.server.codebase contains an invalid URL - */ - public ClassLoader getClassLoader(String codebase) throws MalformedURLException { - return defaultProvider.getClassLoader(normalizeCodebase(codebase)); - } - - /** - * Returns the annotation string (representing a location for the class - * definition) that RMI will use to annotate the class descriptor when - * marshalling objects of the given class.
    - * By default, remove rmi annotations of JClassLoader class. Between two - * JOnAS, commons classes are the same, don't need t have a bigger - * annotation. When local call is set, always disable annotation. - * @param cl the class to obtain the annotation for - * @return a string to be used to annotate the given class when it gets - * marshalled, or null - */ - public String getClassAnnotation(Class cl) { - ClassLoader loader = cl.getClassLoader(); - - // Init values - if (!carolIsInitialized) { - String sValue = System.getProperty(CarolDefaultValues.LOCALREG_JRMP_PROPERTY, "init"); - if (!sValue.equals("init")) { - carolIsOptimized = new Boolean(sValue).booleanValue(); - carolIsInitialized = true; - } - } - - if (loader instanceof JClassLoader) { - return null; - } else if ((loader instanceof URLClassLoader) && (carolIsOptimized)) { - return null; - } else { - return defaultProvider.getClassAnnotation(cl); - } - } - - /** - * The standard separator between codebases is the space character and - * many operating systems use paths with spaces. One classical example - * would be C:\Program Files\JOnAS\ in Windows. - * - * This function does the necessary transformation in order the codebase to - * be separated correctly and the file:/C:/Program Files/JOnAS/ path - * not to be interpreted as two separate codebases (Namely, - * file:/C:/Program and /JOnAS/). It also successfully - * normalizes multiple paths in one codebase (for example, - * file:/C:/Program Files/foo.jar file:/C:/Program Files/bar.jar). - * - * @param input Codebase to normalize (may be null). - * - * @return Normalized codebase. - * - * @throws MalformedURLException If URL really is malformed. - */ - static String normalizeCodebase(final String input) throws MalformedURLException { - // null is a perfectly valid codebase - if (input == null) { - return null; - } - - StringBuffer codebase = new StringBuffer(); - StringBuffer current = new StringBuffer(); - StringTokenizer stok = new StringTokenizer(input, " \t\n\r\f", false); - - while (stok.hasMoreTokens()) { - String item = stok.nextToken(); - - // Ignore empty tokens - if (item.length() < 1) { - continue; - } - - if (item.indexOf(':') != -1) { - // This is the beginning of a new URL, - // therefore the end of an the previous URL - onGotURL(current, codebase); - } else { - // This is the inner part of a URL that contains a space - current.append(' '); - } - - current.append(item); - } - - // Make sure we don't miss the last URL - onGotURL(current, codebase); - - if (codebase.length() > 0) { - return codebase.toString(); - } else { - return null; - } - } - - /** - * Callback when the {@link RemoteClassLoaderSpi#normalizeCodebase(String)} - * method has recognized a URL. The URL (that may be empty) will be escaped - * using {@link java.net.URL} and added to the codebase. - * - * @param current Recognized URL. - * @param codebase Base to add the reformatted URL to. - * - * @throws MalformedURLException If URL current's content is invalid. - */ - static void onGotURL(final StringBuffer current, final StringBuffer codebase) throws MalformedURLException { - // Ignore empty recognitions - if (current.length() < 1) { - return; - } - - URL url; - String currentToString = current.toString(); - try { - // Check if the URL is valid, therefore already escaped correctly - url = new URI(new URL(currentToString).toString()).toURL(); - } catch (URISyntaxException e) { - try { - // Given URL wasn't escaped correctly, escape spaces - url = new URI(new URL(currentToString.replaceAll("\\ ", "%20")).toString()).toURL(); - } catch (URISyntaxException ie) { - // URL is really not valid - url = null; - } - } - - if (url != null) { - if (codebase.length() > 0) { - codebase.append(' '); - } - codebase.append(url.toString()); - current.setLength(0); - } - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManager.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManager.java deleted file mode 100644 index ac006b075c..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManager.java +++ /dev/null @@ -1,340 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.cpmanager; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.StringTokenizer; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.Manifest; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.url.URLUtils; - -/** - * JOnAS Ear class path manager class. This class provides a way for managing - * the class-path dependency libraries. - * @author Florent Benoit - * @author Ludovic Bert - * @author Nicolas Van Caneghem Allow the - * deployment of an exploded ear - */ -public class EarClassPathManager { - - /** - * Logger. - */ - private static final Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX); - - /** - * Urls of the class path manager. - */ - private URL[] urls = null; - - /** - * List of jars that must be parsed. - */ - private JarList toParse = null; - - /** - * List of jars that have been parsed. - */ - private JarList parsed = null; - - /** - * List of jars which are libraries. - */ - private JarList libraries = null; - - /** - * List of the ejb jars. - */ - private JarList ejbs = null; - - /** - * List of the war files. - */ - private JarList wars = null; - - /** - * List of the client jars. - */ - private JarList clients = null; - - /** - * Directory of the ear. - */ - private URL directory = null; - - /** - * Construct an instance of a EarClassPathManager. - * @param ejbs JarList of ejb-jar - * @param wars JarList of war - * @param clients JarList of the clients - * @param directory URL of the directory - * @throws EarClassPathManagerException if we can't create the manager - */ - private EarClassPathManager(final JarList ejbs, - final JarList wars, - final JarList clients, - final URL directory) throws EarClassPathManagerException { - - // Check protocol - if (!"file".equalsIgnoreCase(directory.getProtocol())) { - throw new EarClassPathManagerException("Only the file:/ URL can be used"); - } - this.ejbs = ejbs; - this.wars = wars; - this.clients = clients; - this.directory = directory; - } - - /** - * Construct an instance of a EarClassPathManager. - * @param ejbs JarList of ejb-jar - * @param wars JarList of war - * @param directory URL of the directory - * @throws EarClassPathManagerException if we can't create the manager - */ - public EarClassPathManager(final JarList ejbs, final JarList wars, final URL directory) throws EarClassPathManagerException { - - this(ejbs, wars, new JarList(), directory); - - if ((ejbs == null) || (wars == null) || (directory == null)) { - throw new EarClassPathManagerException("The constructor EarClassPathManager can't accept null parameters"); - } - } - - /** - * Construct an instance of a EarClassPathManager. - * @param clients JarList of the clients - * @param directory URL of the directory - * @throws EarClassPathManagerException if we can't create the manager - */ - public EarClassPathManager(final JarList clients, final URL directory) throws EarClassPathManagerException { - - this(new JarList(), new JarList(), clients, directory); - - if ((clients == null) || (directory == null)) { - throw new EarClassPathManagerException("The constructor EarClassPathManager can't accept null parameters"); - } - } - - /** - * Get the class-path from the MANIFEST.MF file of the specified archive. - * @param url the URL of the JAR file which contains the MANIFEST file. - * @return the class-path from the MANIFEST.MF file of the specified - * archive. - * @throws IOException if creation of a file based upon the url failed - * @throws EarClassPathManagerException if it failed - */ - private JarList getManifestClassPath(final URL url) throws EarClassPathManagerException, IOException { - - if (url == null) { - throw new EarClassPathManagerException("JarList.getManifestClassPath : The url parameter can't be null"); - } - - Manifest manifest = null; - - if (new File(url.getFile()).isDirectory()) { - File manifestFile = new File(url.getFile() + File.separator + JarFile.MANIFEST_NAME); - if (manifestFile.exists()) { - InputStream is = null; - try { - is = new FileInputStream(manifestFile); - manifest = new Manifest(is); - } finally { - if (is != null) { - is.close(); - } - } - } - - } else { - //Construct a JarFile in order to access to the manifest - // IOException it if failed - JarFile jarFile = null; - - try { - jarFile = new JarFile(URLUtils.urlToFile(url)); - //get manifest from the jarFile - manifest = jarFile.getManifest(); - } finally { - if (jarFile != null) { - jarFile.close(); - } - } - - } - - //classpath - String classPath = null; - - //Only if a manifest is found - if (manifest != null) { - //get attributes (classpath) - Attributes attributes = manifest.getMainAttributes(); - classPath = attributes.getValue(Attributes.Name.CLASS_PATH); - } - - //New JarList - JarList jarList = null; - - //The jarList will be Empty if classpath is null or populate with - // classpath entries - if (classPath != null) { - jarList = new JarList(new StringTokenizer(classPath)); - } else { - jarList = new JarList(); - } - - //Return the list - return jarList; - } - - /** - * Get the list of the URLs. - * @return the list of the URLs. - * @throws EarClassPathManagerException if we can't resolve the path - */ - public URL[] getResolvedClassPath() throws EarClassPathManagerException { - - //If we don't have already compute - if (urls == null) { - resolveClassPath(); - } - - //return the cache - return urls; - } - - /** - * Resolve the class-path dependencies of WAR and JAR files. - * @throws EarClassPathManagerException if it failed - */ - private void resolveClassPath() throws EarClassPathManagerException { - - //Set the list to parsed - toParse = new JarList(); - - //Set the list already parsed - parsed = new JarList(); - - //Set the list of libraries - libraries = new JarList(); - - //add the ejbs, wars and clients to this list - toParse.merge(ejbs); - toParse.merge(wars); - toParse.merge(clients); - - //dependencies list - JarList lstOfFilesDep = new JarList(); - - //Url of the current filename - URL depUrl = null; - - //While there are elements to analyse - while (toParse.size() > 0) { - - //File to look for Manifest - String fileName = (String) toParse.firstElement(); - - if (fileName.endsWith("/")) { - throw new EarClassPathManagerException("In j2ee application, Class-Path with directory is forbidden. '" - + fileName + "' is not authorized."); - } - try { - //Get dependency entries - depUrl = new URL(directory.toExternalForm() + "/" + fileName); - lstOfFilesDep = getManifestClassPath(depUrl); - } catch (MalformedURLException mue) { - lstOfFilesDep.removeAllElements(); - logger.log(BasicLevel.ERROR, "Error while trying to get the url for " - + directory.toExternalForm() + File.separator + fileName + " : ", mue); - } catch (IOException ioe) { - lstOfFilesDep.removeAllElements(); - logger.log(BasicLevel.ERROR, "Error while reading manifest file from the file " + fileName - + " : ", ioe); - } - - String parentDir = new File(fileName).getParent(); - //subDirectory (the parent dir or "") - String subDir = null; - if (parentDir != null) { - subDir = parentDir; - } else { - subDir = ""; - } - - //Set the relative path of EAR / file - lstOfFilesDep.setRelativePath(subDir); - - //Merge the list - toParse.merge(lstOfFilesDep); - - //Add the parsed file - parsed.add(fileName); - - //Add to the libraries if it's not an EJB or a WEB application - if (isALibrary(fileName)) { - libraries.add(fileName); - } - - //Remove all the parsed files - toParse.remove(parsed); - - } - - //We've got the list of files, its the JarList : parsed - try { - urls = libraries.getURLs(directory.toExternalForm()); - } catch (JarListException e) { - throw new EarClassPathManagerException( - "Error while geting the URLs of the jars files which must be loaded at the EAR level"); - - } - - } - - /** - * Check if the file is a library , ie : - It's not an EJB Jar. - It's not a - * War. - * @param fileName name of the file to check - * @return true if it's not either an ejbjar either a war file. (a library). - */ - private boolean isALibrary(final String fileName) { - return (!ejbs.contains(fileName) && !wars.contains(fileName)); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManagerException.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManagerException.java deleted file mode 100644 index c3fcc08fb6..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/EarClassPathManagerException.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.cpmanager; - -/** - * The class EarClassPathManagerException indicates conditions - * that a reasonable application might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class EarClassPathManagerException extends Exception { - - /** - * Constructs a new EarClassPathManagerException with no detail - * message. - */ - public EarClassPathManagerException() { - super(); - } - - /** - * Constructs a new EarClassPathManagerException with the specified - * message. - * @param message the detail message. - */ - public EarClassPathManagerException(String message) { - super(message); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarList.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarList.java deleted file mode 100644 index 8dc0e3c160..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarList.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JarList.java 10672 2007-06-19 07:18:50Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.cpmanager; - -//java import -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.ow2.util.url.URLUtils; - -/** - * JOnAS Jar list This class provides a way for managing the class-path - * dependency libraries. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JarList extends Vector { - - /** - * Construct an instance of a JarList - */ - public JarList() { - super(); - } - - /** - * Construct an instance of a JarList - * @param st a String tokenizer - */ - public JarList(StringTokenizer st) { - super(); - - //add each entries - while (st.hasMoreTokens()) { - String fileName = st.nextToken(); - add(fileName); - } - } - - /** - * Construct an instance of a JarList - * @param strs an array of files - */ - public JarList(String[] strs) { - super(); - - for (int i = 0; i < strs.length; i++) { - add(strs[i]); - } - } - - /** - * Add the specified file to the current list. - * @param fileName the name of the file to add. - */ - public void add(String fileName) { - if (!contains(fileName) && !fileName.equals("")) { - super.add(fileName); - } - } - - /** - * Get the URLs of all the JAR file list append to dirName. - * @param dirName the name of the directory where we append the files (URL format). - * @return the absolute URLs of the JAR files. - * @throws JarListException if url are malformed - */ - public URL[] getURLs(String dirName) throws JarListException { - - List verifiedUrls = new ArrayList(); - for (int i = 0; i < elementCount; i++) { - String s = (String) elementData[i]; - try { - URL potentialUrl = new URL(dirName + File.separator + s); - File potentialFile = URLUtils.urlToFile(potentialUrl); - if (potentialFile.exists()) { - // Avoid incorporating an URL pointing to a non-existent file - URL verifiedUrl = URLUtils.fileToURL(potentialFile.getCanonicalFile()); - verifiedUrls.add(verifiedUrl); - } - } catch (IOException e) { - throw new JarListException("Error when trying to get the canonical form for the file " + elementData[i]); - } - } - return verifiedUrls.toArray(new URL[verifiedUrls.size()]); - } - - /** - * Merge the specified JarList to the current JarList without adding - * duplicate entry. - * @param jarList the list to merge. - */ - public void merge(JarList jarList) { - for (Enumeration e = jarList.elements(); e.hasMoreElements();) { - String s = (String) e.nextElement(); - //call add which call super.add - add(s); - } - } - - /** - * Remove all the entries contained in the jarList to the current jarList. - * @param jarList the jarList to remove. - */ - public void remove(JarList jarList) { - - for (Enumeration e = jarList.elements(); e.hasMoreElements();) { - String s = (String) e.nextElement(); - if (contains(s)) { - remove(s); - } - } - } - - /** - * Set the relative path of the current list. This is useful in the case of - * an EAR file because the class-path is relative to the JAR file and not - * the EAR file. - * @param path the path for set the relative path - */ - public void setRelativePath(String path) { - if (path.equals("")) { - return; - } - - for (int i = 0; i < elementCount; i++) { - elementData[i] = path + File.separator + elementData[i]; - } - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarListException.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarListException.java deleted file mode 100644 index 560d1f7689..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/cpmanager/JarListException.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.cpmanager; - -/** - * The class JarListException indicates conditions that a reasonable application - * might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JarListException extends Exception { - - /** - * Constructs a new JarListException with no detail message. - */ - public JarListException() { - super(); - } - - /** - * Constructs a new JarListException with the specified message. - * @param message the detail message. - */ - public JarListException(String message) { - super(message); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/ExecutionResult.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/ExecutionResult.java deleted file mode 100644 index 47b5b7a5e2..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/ExecutionResult.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.execution; - -/** - * Store the result of an {@link IExecution}. - * @param result object type. - * @author Guillaume Sauthier - */ -public class ExecutionResult { - - /** - * Object result of the execution. - */ - private T result; - - /** - * Exception (if any). - */ - private Exception exception; - - /** - * @return the result - */ - public T getResult() { - return result; - } - /** - * @param result the result to set - */ - public void setResult(final T result) { - this.result = result; - } - /** - * @return the exception - */ - public Exception getException() { - return exception; - } - /** - * @param exception the Exception to set - */ - public void setException(final Exception exception) { - this.exception = exception; - } - - /** - * @return true if errors were thrown during the execution. - */ - public boolean hasException() { - return exception != null; - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/IExecution.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/IExecution.java deleted file mode 100644 index 895cc1e500..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/IExecution.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.lib.execution; - -/** - * Defines a job execution. - * @param returned type - * @author Guillaume Sauthier - */ -public interface IExecution { - - /** - * Execute some user's code. - * @return an Object instance if something has to be - * returned (null otherwise). - * @throws Exception may be thrown by the user code. - */ - T execute() throws Exception; -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/RunnableHelper.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/RunnableHelper.java deleted file mode 100644 index a6da4ee49e..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/execution/RunnableHelper.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.execution; - -import java.security.AccessController; -import java.security.PrivilegedAction; - -/** - * Helps to run blocks of code under a controlled environment. - * @author Guillaume Sauthier - */ -public final class RunnableHelper { - - /** - * Private empty constructor for utility class. - */ - private RunnableHelper() { } - - /** - * Run a code block in the context of a given ClassLoader. - * @param loader The {@link ClassLoader} to be used as TCCL. - * @param exec code block. - * @param execution result type. - * @return the result of this execution. - */ - public static ExecutionResult execute(final ClassLoader loader, - final IExecution exec) { - - ExecutionResult result = new ExecutionResult(); - - // Store the old loader - ClassLoader old = getThreadContextClassLader(); - try { - // Set the new one - Thread.currentThread().setContextClassLoader(loader); - - // Run the code and store the result - result.setResult(exec.execute()); - - } catch (Exception e) { - result.setException(e); - } finally { - // Revert to the previous loader - Thread.currentThread().setContextClassLoader(old); - } - - // return the result holder - return result; - } - - /** - * @return Return the current {@link Thread} context ClassLoader - * (using a priviledged block). - */ - public static ClassLoader getThreadContextClassLader() { - return AccessController.doPrivileged(new PrivilegedAction() { - public ClassLoader run() { - return Thread.currentThread().getContextClassLoader(); - } - }); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/AbsModuleClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/AbsModuleClassLoader.java deleted file mode 100644 index 808b52cd8a..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/AbsModuleClassLoader.java +++ /dev/null @@ -1,196 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.List; -import java.util.Iterator; - -import org.ow2.jonas.lib.loader.factory.URLFactory; -import org.ow2.jonas.lib.loader.locator.Locator; - - -/** - * The AbsModuleClassLoader class is used in JOnAS - * for loading web, ejbjars and client modules. - * - * @author Guillaume Sauthier - */ -public abstract class AbsModuleClassLoader extends URLClassLoader { - - /** factories used to create URLs for URLClassLoader. */ - private URLFactory[] factories; - - /** locators used to search jar/dir for files, directories, ... */ - private Locator[] locators; - - /** bases URLs. */ - private URL[] bases; - - /** - * Create a new AbsModuleClassLoader for a list of URLs. - * - * @param modules the list of URL to be used in the ClassLoader. - * - * @throws IOException when Initialization fails. - */ - public AbsModuleClassLoader(URL[] modules) throws IOException { - super(new URL[0]); - bases = modules; - init(); - } - - /** - * Create a new AbsModuleClassLoader for a list of URLs with a specified parent loader. - * - * @param modules the list of URL to be used in the ClassLoader. - * @param parent the parent ClassLoader to be used. - * - * @throws IOException when Initialization fails. - */ - public AbsModuleClassLoader(URL[] modules, ClassLoader parent) throws IOException { - super(new URL[0], parent); - bases = modules; - init(); - } - - /** - * Base Initialization of the ClassLoader, storage of URL list. - * - * @throws IOException when URL pointed file is not supported (not an jar nor a directory). - */ - protected void init() throws IOException { - factories = new URLFactory[bases.length]; - locators = new Locator[bases.length]; - - // Create factories and locator for each URL - for (int i = 0; i < bases.length; i++) { - - factories[i] = URLFactory.getFactory(bases[i]); - locators[i] = Locator.getLocator(bases[i]); - } - } - - /** - * Add specified location into the repository. - * If location is found in multiple URLs of the bases, new - * URLs will be added multiple times. - * - * @param location an entry name (for a jar) or a path name (for a directory) - * - * @throws IOException when constructed URL is malformed - */ - protected void addInRepository(String location) throws IOException { - // test existence in each base URL - for (int i = 0; i < bases.length; i++) { - if (locators[i].hasDirectory(location) - || locators[i].hasFile(location)) { - addURL(factories[i].getURL(location)); - } - } - } - - /** - * Add specified location childs into the repository. - * Search will be performed on the bases URLs. - * - * @param location an entry name (for a jar) or a path name (for a directory) - * - * @throws IOException When a directory content cannot be explored. - * - * TODO test existence is now done in AbsModuleClassLoader - */ - protected void addContentInRepository(String location) throws IOException { - // test existence in each base URL - for (int i = 0; i < bases.length; i++) { - List list = locators[i].listContent(location); - for (Iterator l = list.iterator(); l.hasNext();) { - // TODO Exclude non jar content ! - addURL(factories[i].getURL((String) l.next())); - } - } - } - - /** - * @return Returns a String representation of the AbsModuleClassLoader - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - - sb.append("classloader : " + getClass().getName() + "\n"); - sb.append("\tmodules bases (not in loader!) : \n"); - for (int i = 0; i < bases.length; i++) { - sb.append("\t\t -" + bases[i] + "\n"); - } - sb.append("\trepositories :\n"); - URL[] rep = getURLs(); - for (int i = 0; i < rep.length; i++) { - sb.append("\t\t -" + rep[i] + "\n"); - } - sb.append("\tparent : " + getParent() + "\n"); - - return sb.toString(); - } - - /** - * @return Returns the bases. - */ - public URL[] getBases() { - return bases; - } - - /** - * @return Returns a String representation of the classpath used by this classloader - */ - public String getClasspath() { - URL[] urls = getURLs(); - StringBuffer cp = new StringBuffer(); - for (int i = 0; i < urls.length; i++) { - String url = urls[i].getFile(); - // do not add URL with !/ inside - if (url.indexOf("!/") == -1) { - cp.append(File.pathSeparator + url); - } - } - if (getParent() instanceof AbsModuleClassLoader) { - AbsModuleClassLoader module = (AbsModuleClassLoader) getParent(); - cp.append(module.getClasspath()); - } - return cp.toString(); - } - - /** - * Appends the specified URL to the list of URLs to search for - * classes and resources. - * @param url the URL to be added to the search path of URLs - */ - public void addURL(URL url) { - super.addURL(url); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ClientClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ClientClassLoader.java deleted file mode 100644 index e271ce7251..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ClientClassLoader.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.net.URL; - -/** - * ClassLoader used for loading Client classes and resources - * - * @author Guillaume Sauthier - */ -public class ClientClassLoader extends AbsModuleClassLoader { - - /** classes are located in the module root */ - private static final String CLASSES_DIRECTORY = ""; - - /** WSDL files are located in META-INF/wsdl directory */ - private static final String WSDL_DIRECTORY = "META-INF/wsdl/"; - - /** - * Create a new ClientClassLoader with default parent ClassLoader - * - * @param module an URL of Client files - * - * @throws IOException if creation fails - */ - public ClientClassLoader(final URL module) throws IOException { - super(new URL[]{module}); - } - - /** - * Create a new ClientClassLoader with specified parent ClassLoader - * - * @param module an URL of Client files - * @param parent the parent ClassLoader to use - * - * @throws IOException if creation fails - */ - public ClientClassLoader(final URL module, final ClassLoader parent) throws IOException { - super(new URL[]{module}, parent); - } - - /** - * Create a new ClientClassLoader with specified parent ClassLoader - * - * @param modules an URL[] of Client files + dependencies - * @param parent the parent ClassLoader to use - * - * @throws IOException if creation fails - */ - public ClientClassLoader(final URL[] modules, final ClassLoader parent) throws IOException { - super(modules, parent); - } - - /** - * Add the directory and the content of - * META-INF/wsdl/ in the ClassLoader. - * - * @throws IOException When initialisation fails. - */ - @Override - protected void init() throws IOException { - super.init(); - addInRepository(CLASSES_DIRECTORY); - addInRepository(WSDL_DIRECTORY); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/EjbJarClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/EjbJarClassLoader.java deleted file mode 100644 index c2a382039f..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/EjbJarClassLoader.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.net.URL; - -/** - * ClassLoader used for loading EJB classes and resources - * - * @author Guillaume Sauthier - */ -public class EjbJarClassLoader extends AbsModuleClassLoader { - - /** classes are located in the module root */ - private static final String CLASSES_DIRECTORY = ""; - - /** WSDL files are located in META-INF/wsdl directory */ - private static final String WSDL_DIRECTORY = "META-INF/wsdl/"; - - /** - * Create a new EjbJarClassLoader with default parent ClassLoader - * - * @param modules an URL[] of EjbJar files - * - * @throws IOException if creation fails - */ - public EjbJarClassLoader(URL[] modules) throws IOException { - super(modules); - } - - /** - * Create a new EjbJarClassLoader with specified parent ClassLoader - * - * @param modules an URL[] of EjbJar files - * @param parent the parent ClassLoader to use - * - * @throws IOException if creation fails - */ - public EjbJarClassLoader(URL[] modules, ClassLoader parent) throws IOException { - super(modules, parent); - } - - /** - * Add the directory and the content of META-INF/wsdl/ in the ClassLoader - * - * @throws IOException When WEB-INF/classes and WEB-INF/wsdl directories cannot be added - * in loader - */ - protected void init() throws IOException { - super.init(); - addInRepository(CLASSES_DIRECTORY); - addInRepository(WSDL_DIRECTORY); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/FilteringClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/FilteringClassLoader.java deleted file mode 100644 index c8f0d8f8ab..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/FilteringClassLoader.java +++ /dev/null @@ -1,277 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.ow2.jonas.lib.loader.xml.FiltersDefinition; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.xmlconfig.XMLConfiguration; -import org.ow2.util.xmlconfig.XMLConfigurationException; -import org.ow2.util.xmlconfig.properties.SystemPropertyResolver; - - - -/** - * ClassLoader that allows to filter the classes or resources that are loaded.
    - * It is extending URLClassLoader as for example Tomcat is looking for getURLs() method, etc. - * @author Florent Benoit - */ -public class FilteringClassLoader extends URLClassLoader { - - /** - * Name of the XML file inside modules. - */ - public static final String CLASSLOADER_FILTERING_FILE = "classloader-filtering.xml"; - - /** - * Name of the XML file. - */ - public static final String XML_FILE = "classloader-default-filtering.xml"; - - /** - * Mapping file of the XML file. - */ - public static final String MAPPING_FILE = "classloader-default-filtering-mapping.xml"; - - - /** - * System property for disabling the Filtering. - */ - public static final String DISABLE_FILTERING_PROPERTY_NAME = "jonas-disable-filtering-class-loader"; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(FilteringClassLoader.class); - - /** - * If transparent, there will be no filtering (by default: filtering enabled). - */ - private boolean transparent = false; - - /** - * Lock to inhibits any change after the loader has been started. - */ - private boolean started = false; - - /** - * Url of the filtering definition. - */ - private URL definitionUrl; - - /** - * List of default filters. - */ - private List filters = null; - - /** - * Build a new filtering classloader by using the given parent classloader. - * @param parentClassLoader the given parent classloader - */ - public FilteringClassLoader(final ClassLoader parentClassLoader) { - super(new URL[0], parentClassLoader); - } - - public boolean isTransparent() { - return transparent; - } - - public void setTransparent(final boolean transparent) { - if (!started) { - this.transparent = transparent; - } - } - - public URL getDefinitionUrl() { - return definitionUrl; - } - - public void setDefinitionUrl(final URL definitionUrl) { - if (!started) { - this.definitionUrl = definitionUrl; - } - } - - public void start() { - this.started = true; - - // Allow to disable this filtering by the admin - if (!transparent) { - if (Boolean.getBoolean(DISABLE_FILTERING_PROPERTY_NAME)) { - this.transparent = true; - logger.debug("FilteringClassLoader has been disabled."); - } - } - - // Load default filters if option is enabled - if (!transparent && (definitionUrl != null)) { - loadFilters(); - } - } - - /** - * Load the default filters. - */ - private void loadFilters() { - - // Parse with XML config - XMLConfiguration xmlConfiguration = new XMLConfiguration(MAPPING_FILE); - - // Set the source configuration(s) - xmlConfiguration.addConfigurationFile(definitionUrl); - - // Resolve properties as system properties - xmlConfiguration.setPropertyResolver(new SystemPropertyResolver()); - - // Use a map for some properties - Map contextualInstances = new HashMap(); - - // Sets the contextual instances - xmlConfiguration.setContextualInstances(contextualInstances); - - // Start configuration of this object - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(FilteringClassLoader.class.getClassLoader()); - xmlConfiguration.configure(this); - } catch (XMLConfigurationException e) { - throw new IllegalArgumentException("Cannot configure the Filters inside the Filtering Classloader", e); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - // check - verifyFilters(); - - } - - /** - * Loads the class if it is not filtered. - * @param name the name of the class. - * @param resolve if true, resolve the class - * @return The resulting Class object - * @throws ClassNotFoundException If the class was not found or if it is - * filtered - */ - @Override - public Class loadClass(final String name, final boolean resolve) throws ClassNotFoundException { - - // If the class filtering is enabled and that the class is filtered, throws a CNFE exception - if (isFiltered(name)) { - throw new ClassNotFoundException("The class '" + name - + "' is a filtered class so it cannot be found in the Application Server classloader." - + " The class should be added into the application classloader."); - } - - return super.loadClass(name, resolve); - } - - /** - * Find the given resource specified by its name. - * @param name the resource name - * @return the URL if the resource has been found, else null - */ - @Override - public URL getResource(final String name) { - // If the resource filtering is enabled and that the resource is filtered, return null - if (isFiltered(name)) { - logger.debug("The resource ''{0}'' has been asked but as it is a filtered resource, return null", name); - return null; - } - - return super.getResource(name); - } - - /** - * Detects if the given class/resource should be filtered or not. - * @param name the name of the class - * @return true if it should be filtered, else false - */ - protected boolean isFiltered(final String name) { - if (transparent || name == null || filters == null) { - return false; - } - - // Finding a matching pattern - for (String pattern : filters) { - if (name.matches(pattern)) { - return true; - } - } - - // Not filtered ! - return false; - } - - /** - * @return a cloned filter list (so that it cannot be changed after the start-up). - */ - public List getFilters() { - List clone = new ArrayList(); - if (filters != null) { - clone.addAll(filters); - } - return clone; - } - - /** - * Sets the filters definition element. - * @param filtersDefinition the filters definition element. - */ - public void setFiltersDefinition(final FiltersDefinition filtersDefinition) { - this.filters = filtersDefinition.getFilters(); - } - - /** - * Ensure that the filters are valid. - */ - protected void verifyFilters() { - - // Check the list of filters - if (filters != null) { - Iterator it = filters.iterator(); - while (it.hasNext()) { - String filter = it.next(); - if ("*".equals(filter)) { - logger.warn("The '*' filter is not a valid value for a filter for definition file '" + definitionUrl + "'."); - it.remove(); - } - - } - } - } - - - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/IMetaInfLocator.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/IMetaInfLocator.java deleted file mode 100644 index bc24c456d1..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/IMetaInfLocator.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Enumeration; - -/** - * Interface used to search entries located in META-INF/ folder of some bundles. - * @author Florent Benoit - */ -public interface IMetaInfLocator { - - /** - * Gets an URL for a given resource name. - * @param name the name to search - * @return value else null if not found - */ - URL getResource(String name); - - - /** - * Gets list of URL for a given resource name. - * @param name the name to search - * @return value else null if not found - * @throws IOException if there is an error while searching - */ - Enumeration getResources(String name) throws IOException; - - /** - * Gets an input stream for a given resource name. - * @param name the name to search - * @return value else null if not found - */ - InputStream getResourceAsStream(String name); - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScanner.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScanner.java deleted file mode 100644 index 2d23f00d8c..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScanner.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Enumeration; -import java.util.List; -import java.util.Vector; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.util.tracker.BundleTracker; - -/** - * This class will track all META-INF/ resources (except MANIFEST) so that we can get URL for META-INF/services/* key for example. - * @author Florent Benoit - */ -public class MetaInfScanner implements IMetaInfLocator { - - /** - * BundleContext. - */ - private final BundleContext bundleContext; - - /** - * Bundle Tracker. - */ - private BundleTracker bundleTracker; - - /** - * Registration of the locator service. - */ - private ServiceRegistration metaInfLocatorService; - - /** - * Bundle Customizer used to track entries in bundles. - */ - private MetaInfScannerBundleTrackerCustomizer metaInfScannerBundleTrackerCustomizer = null; - - /** - * Default constructor for the given bundle context. - * @param bundleContext the bundle context - */ - public MetaInfScanner(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * Register the service when we start. - * So we will track META-INF/ entries - */ - public void start() { - this.metaInfLocatorService = this.bundleContext.registerService(IMetaInfLocator.class.getName(), this, null); - this.metaInfScannerBundleTrackerCustomizer = new MetaInfScannerBundleTrackerCustomizer(this.bundleContext); - - // Start the OSGi JDBC Driver tracker - this.bundleTracker = new BundleTracker(this.bundleContext, Bundle.ACTIVE, this.metaInfScannerBundleTrackerCustomizer); - this.bundleTracker.open(); - } - - - /** - * Stop the locator and stop tracking entries. - */ - public void stop() { - if (this.metaInfLocatorService != null) { - this.metaInfLocatorService.unregister(); - } - this.bundleTracker.close(); - } - - /** - * Gets an URL for a given resource name. - * @param name the name to search - * @return value else null if not found - */ - @Override - public URL getResource(final String name) { - List urls = this.metaInfScannerBundleTrackerCustomizer.getEntries(name); - if (urls != null) { - return urls.get(0); - } - return null; - } - - /** - * Gets inputstream for the given name. - * @param name the name to search - * @return value else null if not found - */ - @Override - public InputStream getResourceAsStream(final String name) { - List urls = this.metaInfScannerBundleTrackerCustomizer.getEntries(name); - if (urls != null) { - try { - return urls.get(0).openStream(); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot get stream", e); - } - } - return null; - } - - /** - * Gets list of URL for the given resource name. - * @param name the name to search - * @return value else null if not found - * @throws IOException if there is an error while searching entry - */ - @Override - public Enumeration getResources(final String name) throws IOException { - List urls = this.metaInfScannerBundleTrackerCustomizer.getEntries(name); - if (urls != null) { - Vector collectionURLs = new Vector(); - collectionURLs.addAll(urls); - return collectionURLs.elements(); - } - return null; - - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScannerBundleTrackerCustomizer.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScannerBundleTrackerCustomizer.java deleted file mode 100644 index ece7d35edb..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/MetaInfScannerBundleTrackerCustomizer.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.WeakHashMap; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.util.tracker.BundleTrackerCustomizer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Tracker of META/INF entries in bundles. - * @author Florent Benoit - */ -public class MetaInfScannerBundleTrackerCustomizer implements BundleTrackerCustomizer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(MetaInfScannerBundleTrackerCustomizer.class); - - /** - * Filter : we won't keep entries starting with these names. - */ - private static final String[] DENY_FILTERS = new String[] {"META-INF/maven", "META-INF/MANIFEST.MF", "META-INF/LICENSE"}; - - /** - * Associate a bundle and a list of META/INF URL entries for the given - * bundle. - */ - private Map> bundleMapEntries = null; - - /** - * Associate a entry name and the list of all URL resources that are - * providing these entries. - */ - private Map> urlEntries = null; - - /** - * Default constructor. - * @param bundleContext the given bundle context - */ - public MetaInfScannerBundleTrackerCustomizer(final BundleContext bundleContext) { - this.bundleMapEntries = new WeakHashMap>(); - this.urlEntries = new HashMap>(); - } - - /** - * A bundle is being added to the BundleTracker. This method is called - * before a bundle which matched the search parameters of the BundleTracker - * is added to the BundleTracker. This method should return the object to be - * tracked for the specified Bundle. The returned object is stored in the - * BundleTracker and is available from the getObject method. - * @param bundle The Bundle being added to the BundleTracker. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the call to - * this method. - * @return The object to be tracked for the specified Bundle object or null - * if the specified Bundle object should not be tracked. - */ - @Override - public Object addingBundle(final Bundle bundle, final BundleEvent event) { - logger.debug("Bundle ''{0}'' with event ''{1}''", bundle, event); - return register(bundle); - } - - /** - * A bundle tracked by the BundleTracker has been modified. This method is - * called when a bundle being tracked by the BundleTracker has had its state - * modified. - * @param bundle The Bundle whose state has been modified. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the call to - * this method. - * @param object The tracked object for the specified bundle. - */ - @Override - public void modifiedBundle(final Bundle bundle, final BundleEvent event, final Object object) { - logger.debug("Bundle ''{0}'' with event ''{1}''", bundle, event); - if (bundle.getState() == Bundle.STOPPING || bundle.getState() == Bundle.ACTIVE) { - unregister(bundle); - } - if (bundle.getState() == Bundle.ACTIVE) { - register(bundle); - } - - } - - /** - * A bundle tracked by the BundleTracker has been removed. This method is - * called after a bundle is no longer being tracked by the BundleTracker. - * @param bundle The Bundle that has been removed. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the call to - * this method. - * @param object The tracked object for the specified bundle. - */ - @Override - public void removedBundle(final Bundle bundle, final BundleEvent event, final Object object) { - logger.debug("Bundle ''{0}'' with event ''{1}''", bundle, event); - unregister(bundle); - } - - /** - * Find the URLs entries available in the given Bundle. - * @param bundle the bundle to analyze - * @return the updated list of URLs found in META-INF directory - */ - public List register(final Bundle bundle) { - - List list = new ArrayList(); - - // Scan all entries and search for META-INF entries - Enumeration enumeration = bundle.findEntries("META-INF", "*", true); - if (enumeration != null) { - while (enumeration.hasMoreElements()) { - URL url = enumeration.nextElement(); - String path = url.getPath(); - - if (path.length() > 1) { - path = path.substring(1); - } - - // directory, do not check - if (path.endsWith("/")) { - continue; - } - - // Filter - boolean denied = false; - for (String filter : DENY_FILTERS) { - if (path.startsWith(filter)) { - denied = true; - break; - } - } - if (denied) { - continue; - } - - list.add(url); - } - synchronized (this.bundleMapEntries) { - this.bundleMapEntries.put(bundle, list); - } - refresh(); - } - return list; - - } - - /** - * Unregister the URLs associated to the given bundle. - * @param bundle the bundle that is stopping - */ - public void unregister(final Bundle bundle) { - // remove all the urls associated to this bundle - synchronized (this.bundleMapEntries) { - this.bundleMapEntries.remove(bundle); - } - refresh(); - - } - - /** - * Refresh data of all URL entries. - */ - public void refresh() { - synchronized (this.bundleMapEntries) { - - synchronized (this.urlEntries) { - // Reset current state - this.urlEntries.clear(); - - // Compute list of entries - Collection> listUrls = this.bundleMapEntries.values(); - Iterator> itListURLS = listUrls.iterator(); - while (itListURLS.hasNext()) { - List urls = itListURLS.next(); - for (URL url : urls) { - - String path = url.getPath(); - - // Remove start / of all entries in order to get the name - if (path.length() > 1) { - path = path.substring(1); - } - - List lstURL = this.urlEntries.get(path); - if (lstURL == null) { - lstURL = new ArrayList(); - this.urlEntries.put(path, lstURL); - } - lstURL.add(url); - } - } - } - } - - } - - /** - * Gets the list of the current URL entries. - * @param name the given name - * @return the list of URL - */ - public List getEntries(final String name) { - // Return a clone - List newList = null; - synchronized (this.urlEntries) { - List foundList = this.urlEntries.get(name); - if (foundList != null) { - newList = new ArrayList(); - newList.addAll(foundList); - } - } - return newList; - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/OSGiClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/OSGiClassLoader.java deleted file mode 100644 index 5ff54466df..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/OSGiClassLoader.java +++ /dev/null @@ -1,200 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Enumeration; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; - -/** - * {@link OSGiClassLoader} delegates class loading to the OSGi framework. - * @author Francois Fornaciari - */ -public class OSGiClassLoader extends URLClassLoader { - - /** - * META-INF path. - */ - private static final String META_INF = "META-INF"; - - /** - * This bundle's Bundle ClassLoader. - */ - private ClassLoader classLoader = null; - - /** - * MetaInf locator. - */ - private IMetaInfLocator metaInfLocator = null; - - /** - * Construct a new delegating ClassLoader. - */ - @SuppressWarnings("unchecked") - public OSGiClassLoader() { - super(new URL[0]); - this.classLoader = getClass().getClassLoader(); - - // Search the META-INF locator service - Bundle bundle = FrameworkUtil.getBundle(OSGiClassLoader.class); - if (bundle != null) { - BundleContext bundleContext = bundle.getBundleContext(); - - // Now, gets the service - ServiceReference serviceReference = (ServiceReference) bundleContext - .getServiceReference(IMetaInfLocator.class.getName()); - if (serviceReference != null) { - this.metaInfLocator = bundleContext.getService(serviceReference); - } - } // else we're in a non-OSGi environment (maven plugin for example) - } - - /** - * {@inheritDoc} - * @see java.lang.ClassLoader#loadClass(java.lang.String) - */ - @Override - public Class loadClass(final String name) throws ClassNotFoundException { - return this.classLoader.loadClass(name); - } - - /** - * {@inheritDoc} - * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean) - */ - @Override - public Class loadClass(final String name, final boolean flag) throws ClassNotFoundException { - return loadClass(name); - } - - /** - * {@inheritDoc} - * @see java.lang.ClassLoader#getResource(java.lang.String) - */ - @Override - public URL getResource(final String name) { - // First look if OSGi can find the resource we want - URL resource = null; - - if (this.metaInfLocator != null && name.startsWith(META_INF)) { - resource = this.metaInfLocator.getResource(name); - if (resource != null) { - return resource; - } - } - - try { - resource = this.classLoader.getResource(name); - } catch (IllegalArgumentException e) { - // Fall-back: if not found, try the usual getResource() search mechanism. - // This will let our services to access properties file that are in JB/conf - try { - resource = super.getResource(name); - } catch (IllegalArgumentException e2) { - return resource; - } - - } - if (resource == null) { - resource = super.getResource(name); - } - // Finally return the resource (may be null) - return resource; - } - - - /** - * {@inheritDoc} - * @see java.lang.ClassLoader#getResources(java.lang.String) - */ - @Override - public Enumeration getResources(final String name) throws IOException { - - Enumeration enumeration = null; - - if (this.metaInfLocator != null && name.startsWith(META_INF)) { - enumeration = this.metaInfLocator.getResources(name); - if (enumeration != null) { - return enumeration; - } - } - - // First look if OSGi can find the resource we want - - try { - enumeration = this.classLoader.getResources(name); - } catch (IllegalArgumentException e) { - // Fall-back: if not found, try the usual getResource() search mechanism. - // This will let our services to access properties file that are in JB/conf - try { - enumeration = super.getResources(name); - } catch (IllegalArgumentException e2) { - return enumeration; - } - - } - if (enumeration == null || !enumeration.hasMoreElements()) { - enumeration = super.getResources(name); - } - // Finally return the resource (may be null) - return enumeration; - } - - - /** - * {@inheritDoc} - * @see java.lang.ClassLoader#getResourceAsStream(java.lang.String) - */ - @Override - public InputStream getResourceAsStream(final String name) { - InputStream is = null; - if (this.metaInfLocator != null && name.startsWith(META_INF)) { - is = this.metaInfLocator.getResourceAsStream(name); - if (is != null) { - return is; - } - } - - // First look if OSGi can find the resource we want - is = this.classLoader.getResourceAsStream(name); - - // Fall-back: if not found, try the usual getResourceAsStream() search mechanism. - // This will let our services to access properties file that are in JB/conf - if (is == null) { - is = super.getResourceAsStream(name); - } - - // Finally return the resource (may be null) - return is; - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/SimpleWebappClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/SimpleWebappClassLoader.java deleted file mode 100644 index 14a217f4dc..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/SimpleWebappClassLoader.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.net.URL; - -/** - * ClassLoader specialized for WebApps. It add only the WEB-INF/wsdl/ directory - * of the war in the URL repository. Used because Catalina doesn't automatically - * add this resources in its own ClassLoader - * - * @author Guillaume Sauthier - */ -public class SimpleWebappClassLoader extends AbsModuleClassLoader { - - /** WSDL directory in a Web module */ - private static final String WSDL_DIRECTORY = "WEB-INF/wsdl/"; - - /** - * Create a new SimpleWebappClassLoader with default parent ClassLoader - * - * @param module an URL of Web file - * - * @throws IOException if creation fails - */ - public SimpleWebappClassLoader(URL module) throws IOException { - super(new URL[] {module}); - } - - /** - * Create a new SimpleWebappClassLoader with specified parent ClassLoader - * - * @param module an URL of Web file - * @param parent the parent ClassLoader - * - * @throws IOException if creation fails - */ - public SimpleWebappClassLoader(URL module, ClassLoader parent) throws IOException { - super(new URL[] {module}, parent); - } - - /** - * Add the WEB-INF/wsdl/ directory in the ClassLoader. - * - * @throws IOException if META-INF/wsdl and ejb-jar root directories cannot - * be inserted in loader - */ - protected void init() throws IOException { - super.init(); - addInRepository(WSDL_DIRECTORY); - addInRepository(""); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ThreadContextClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ThreadContextClassLoader.java deleted file mode 100644 index 7233f354c6..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/ThreadContextClassLoader.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.loader; - -import java.io.InputStream; -import java.net.URL; - -/** - * Delegate all call to the Thread context ClassLoader. - * @author Guillaume Sauthier - */ -public class ThreadContextClassLoader extends ClassLoader { - - /** - * - */ - public ThreadContextClassLoader() { - super(); - } - - /** - * @see java.lang.ClassLoader#clearAssertionStatus() - */ - public synchronized void clearAssertionStatus() { - getContextClassLoader().clearAssertionStatus(); - } - - /** - * @see java.lang.ClassLoader#getResource(java.lang.String) - */ - public URL getResource(String name) { - return getContextClassLoader().getResource(name); - } - - /** - * @see java.lang.ClassLoader#getResourceAsStream(java.lang.String) - */ - public InputStream getResourceAsStream(String name) { - return getContextClassLoader().getResourceAsStream(name); - } - - /** - * @see java.lang.ClassLoader#loadClass(java.lang.String) - */ - public Class loadClass(String name) throws ClassNotFoundException { - return getContextClassLoader().loadClass(name); - } - - /** - * @see java.lang.ClassLoader#setClassAssertionStatus(java.lang.String, - * boolean) - */ - public synchronized void setClassAssertionStatus(String className, boolean enabled) { - getContextClassLoader().setClassAssertionStatus(className, enabled); - } - - /** - * @see java.lang.ClassLoader#setDefaultAssertionStatus(boolean) - */ - public synchronized void setDefaultAssertionStatus(boolean enabled) { - getContextClassLoader().setDefaultAssertionStatus(enabled); - } - - /** - * @see java.lang.ClassLoader#setPackageAssertionStatus(java.lang.String, - * boolean) - */ - public synchronized void setPackageAssertionStatus(String packageName, boolean enabled) { - getContextClassLoader().setPackageAssertionStatus(packageName, enabled); - } - - /** - * @return Thread context ClassLoader - */ - private ClassLoader getContextClassLoader() { - return Thread.currentThread().getContextClassLoader(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/WebappClassLoader.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/WebappClassLoader.java deleted file mode 100644 index 0daf0f33c1..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/WebappClassLoader.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2003-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader; - -import java.io.IOException; -import java.net.URL; - -/** - * ClassLoader specialized for WebApps. It add the WEB-INF/wsdl/ directory - * of the war in the URL repository, the base URL of the jar file and the - * WEB-INF/classes/ directory. - * Used in WsGen. - * - * @author Guillaume Sauthier - */ -public class WebappClassLoader extends SimpleWebappClassLoader { - - /** Classes directory entry name in Web module */ - private static final String CLASSES_DIRECTORY = "WEB-INF/classes/"; - - /** Libraries directory entry name in Web module */ - private static final String LIB_DIRECTORY = "WEB-INF/lib/"; - - /** - * Create a new WebappClassLoader with default parent ClassLoader - * - * @param module an URL of Web file - * - * @throws IOException if creation fails - */ - public WebappClassLoader(URL module) throws IOException { - super(module); - } - - /** - * Create a new WebappClassLoader with specified parent ClassLoader - * - * @param module an URL of Web file - * @param parent the parent ClasLoader - * - * @throws IOException if creation fails - */ - public WebappClassLoader(URL module, ClassLoader parent) throws IOException { - super(module, parent); - } - - /** - * Add the WEB-INF/classes/ directory and the content of - * WEB-INF/lib/ in the ClassLoader - * - * @throws IOException if cannot add in repository specified paths - */ - protected void init() throws IOException { - super.init(); - addInRepository(CLASSES_DIRECTORY); - addContentInRepository(LIB_DIRECTORY); - } - - /** - * @return Returns the Base URL for this ClassLoader - */ - public URL getBaseURL() { - return getBases()[0]; - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/DirURLFactory.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/DirURLFactory.java deleted file mode 100644 index a3a880ac87..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/DirURLFactory.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader.factory; - -import java.net.URL; -import java.io.IOException; - -/** - * A DirURLFactory is used to create URLs - * from an URL (pointing to a directory) and paths. - * Example :
    - * base : file:/path/
    - * path : META-INF/directory/
    - * results : file:/path/META-INF/directory/
    - * - * @author Guillaume Sauthier - */ -public class DirURLFactory extends URLFactory { - - /** the base URL */ - private URL base; - - /** - * Create a new DirURLFactory using the specified base URL. - * - * @param url the base url. (must be a directory) - */ - public DirURLFactory(URL url) { - base = url; - } - - /** - * Returns a new URL basically adding path to the base URL. - * - * @param path the path to add to the URL. (must not start with "/") - * - * @return a new URL of the form . - * - * @throws IOException when created URL is invalid. - */ - public URL getURL(String path) throws IOException { - return new URL(base + path); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/JarURLFactory.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/JarURLFactory.java deleted file mode 100644 index 6d62af2524..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/JarURLFactory.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader.factory; - -import java.net.URL; -import java.io.IOException; - -/** - * A JarURLFactory is used to create URLs - * from a JarURL (jar:XXX) and paths. - * Example :
    - * base : file:lib.jar
    - * path : META-INF/directory/
    - * results : jar:file:lib.jar!/META-INF/directory/
    - * - * @author Guillaume Sauthier - */ -public class JarURLFactory extends URLFactory { - - /** the base URL */ - private URL base; - - /** Jar URl prefix */ - private static final String JAR = "jar:"; - - /** - * Jar URL separator - */ - private static final String SEP = "!/"; - - /** - * Create a new JarURLFactory using the specified base URL. - * - * @param url the base url. (must be a Jar archive) - */ - public JarURLFactory(URL url) { - base = url; - } - - /** - * Returns a new URL basically adding path to the base URL. - * returns the base URL when "" is used as parameter. - * - * @param path the path to add to the URL. (must not start with "/") - * - * @return a new URL of the form jar:!/. - * - * @throws IOException when created URL is invalid. - */ - public URL getURL(String path) throws IOException { - if (path.equals("")) { - return base; - } else { - return new URL(JAR + base + SEP + path); - } - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/URLFactory.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/URLFactory.java deleted file mode 100644 index 61c7c2c51a..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/factory/URLFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader.factory; - -import java.net.URL; -import java.io.IOException; - -/** - * An URLFactory is used to create a URL from a base URL. - * - * @author Guillaume Sauthier - */ -public abstract class URLFactory { - - /** - * Returns a new URL basically adding path to the base URL. - * - * @param path the path to add to the URL. - * - * @return a new URL. - * - * @throws IOException when created URL is invalid. - */ - public abstract URL getURL(String path) throws IOException; - - /** - * Return a new URLFactory in function of the URL type. - * an URL pointing to a jar file will return a JarURLFactory - * and an URL pointing to a directory file will return a DirURLFactory. - * - * @param url the base URL - * - * @return a new URLFactory in function of the URL type. - * - * @throws IOException when cannot find a specialized factory for the given URL. - */ - public static URLFactory getFactory(URL url) throws IOException { - - String path = url.getPath(); - if (path.matches(".*\\..ar")) { - // jar detected if path ends with .?ar (*.jar, *.war, *.ear) - return new JarURLFactory(url); - } else if (path.endsWith("/")) { - // directory detected if url ends with a separator / - return new DirURLFactory(url); - } else { - String err = "Unsupported URL '" + url + "' support " - + "only jar archive and directory"; - throw new IOException(err); - } - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/DirLocator.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/DirLocator.java deleted file mode 100644 index 3180771953..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/DirLocator.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.loader.locator; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.List; -import java.util.Vector; - -import org.ow2.util.url.URLUtils; - -/** - * A DirLocator is used to look up for a file - * inside a directory. - * - * @author Guillaume Sauthier - */ -public class DirLocator extends Locator { - - /** - * Wrapped File where search will be performed. - */ - private File file = null; - - /** - * Construct a new DirLocator from an URL pointing to a directory. - * - * @param jar URL pointing to a directory. - * - * @throws IOException When - */ - public DirLocator(final URL jar) throws IOException { - this.file = URLUtils.urlToFile(jar); - - if (!file.exists()) { - throw new IOException("File " + file + " does not exists."); - } - if (!file.isDirectory()) { - throw new IOException("File " + file + " is not a directory."); - } - } - - /** - * Returns true when file was found. - * - * @param path the path to the file to look up - * - * @return true when file was found, otherwise false. - */ - @Override - public boolean hasFile(final String path) { - - File child = new File(file, path); - return (child.exists() && child.isFile()); - } - - /** - * Returns true when directory was found. - * - * @param path the path to the directory to look up - * - * @return true when directory was found, otherwise false. - */ - @Override - public boolean hasDirectory(final String path) { - - File child = new File(file, path); - return (child.exists() && child.isDirectory()); - } - - /** - * Returns a list of filename stored in path. - * - * @param path the path to the directory where looking for files - * - * @return a list of filename stored in path. - */ - @Override - public List listContent(final String path) { - - File child = new File(file, path); - List libs = new Vector(); - // List directory content - if (child.isDirectory()) { - addContent(child, libs); - } - - return libs; - } - - /** - * Add only files in the given List. - * Recursive! - * - * @param f base directory to explore - * @param l file list to be filled - */ - private void addContent(final File f, final List l) { - File[] childs = f.listFiles(); - if (childs != null) { - for (int i = 0; i < childs.length; i++) { - if (childs[i].isDirectory()) { - addContent(childs[i], l); - } else if (childs[i].isFile()) { - l.add(childs[i].getPath().substring(file.getPath().length())); - } - } - } - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/JarFileLocator.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/JarFileLocator.java deleted file mode 100644 index 813c6f424e..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/JarFileLocator.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.loader.locator; - -import java.io.IOException; -import java.net.URL; -import java.util.Enumeration; -import java.util.List; -import java.util.Vector; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -/** - * A JarfileLocator is used to look up for a file inside a Jar - * archive. Works only for local jars. - * - * @author Guillaume Sauthier - */ -public class JarFileLocator extends Locator { - - /** - * Wrapped JarFile where searches will be performed. - */ - private JarFile file = null; - - /** - * Construct a new JarFileLocator from an URL representing a Jar. - * - * @param jar URL pointing to a Jar file - * - * @throws IOException When URL is not a JarFile. - */ - public JarFileLocator(final URL jar) throws IOException { - String filename = jar.getFile(); - file = new JarFile(filename); - } - - /** - * Returns true when file was found. - * - * @param path the path to the file to look up - * - * @return true when file was found, otherwise false. - */ - @Override - public boolean hasFile(final String path) { - - ZipEntry entry = file.getEntry(path); - return (entry != null); - } - - /** - * Returns true when directory was found. - * - * @param path the path to the directory to look up - * - * @return true when directory was found, otherwise false. - */ - @Override - public boolean hasDirectory(final String path) { - - boolean found = false; - for (Enumeration e = file.entries(); e.hasMoreElements() && !found;) { - ZipEntry entry = (ZipEntry) e.nextElement(); - if (entry.getName().startsWith(path)) { - return true; - } - } - - return false; - } - - /** - * Returns a list of filename stored in path. - * - * @param path the path to the directory where looking for files - * - * @return a list of filename stored in path. - */ - @Override - public List listContent(final String path) { - - List libs = new Vector(); - for (Enumeration e = file.entries(); e.hasMoreElements();) { - ZipEntry entry = (ZipEntry) e.nextElement(); - if (entry.getName().startsWith(path)) { - libs.add(entry.getName()); - } - } - - return libs; - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/Locator.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/Locator.java deleted file mode 100644 index 99de059b2d..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/locator/Locator.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume SAUTHIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader.locator; - -import java.io.IOException; -import java.net.URL; -import java.util.List; - -/** - * A Locator is used to hide System specific - * when looking for a file. - * - * @author Guillaume Sauthier - */ -public abstract class Locator { - - /** - * Returns true when file was found. - * - * @param path the path to the file to look up - * - * @return true when file was found, otherwise false. - */ - public abstract boolean hasFile(String path); - - /** - * Returns true when directory was found. - * - * @param path the path to the directory to look up - * - * @return true when directory was found, otherwise false. - */ - public abstract boolean hasDirectory(String path); - - /** - * Returns a list of filename stored in path. - * - * @param path the path to the directory where looking for files - * - * @return a list of filename stored in path. - */ - public abstract List listContent(String path); - - /** - * Return a new Locator in function of the URL type. - * an URL pointing to a jar file will return a JarFileLocator - * and an URL pointing to a directory file will return a DirFileLocator. - * - * @param url the base URL - * - * @return a new Locator in function of the URL type. - * - * @throws IOException when cannot find a specialized locator for the given URL. - */ - public static Locator getLocator(URL url) throws IOException { - - String path = url.getPath(); - if (path.matches(".*\\..ar")) { - // jar detected if path ends with .?ar (*.jar, *.war, *.ear) - return new JarFileLocator(url); - } else if (path.endsWith("/")) { - // directory detected if url ends with a separator / - return new DirLocator(url); - } else { - String err = "Unsupported URL '" + url + "' support " - + "only jar archive and directory"; - throw new IOException(err); - } - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/xml/FiltersDefinition.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/xml/FiltersDefinition.java deleted file mode 100644 index db8fac51c8..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/loader/xml/FiltersDefinition.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.loader.xml; - -import java.util.ArrayList; -import java.util.List; - -/** - * A {@code FiltersDefinition} is the XML representation of the {@code <filters>} (or - * {@code <default-filters>}) elements.
    - * It defines a set of filter name. - * @author Florent Benoit - * - */ -public class FiltersDefinition { - - /** - * List of filters. - */ - private List filters = new ArrayList(); - - /** - * @return list of filters. - */ - public List getFilters() { - return this.filters; - } - - /** - * Sets the list of filters. - * @param filters the given value - */ - public void setFilters(final List filters) { - this.filters = filters; - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsConfigServiceImpl.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsConfigServiceImpl.java deleted file mode 100644 index a8e6f5d9fa..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsConfigServiceImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.service; - -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.service.ConfigService; - -/** - * Abstract implementation of a {@link org.ow2.jonas.service.ConfigService}. - * @author Jeremy Cazaux - */ -public abstract class AbsConfigServiceImpl extends AbsServiceImpl implements ConfigService { - - /** - * Addon configuration component - */ - protected IAddonConfig addonConfig; - - /** - * {@inheritDoc} - */ - public void registerAddonConfig(final IAddonConfig addonConfig) { - this.addonConfig = addonConfig; - } - - /** - * {@inheritDoc} - */ - public void unregisterAddonConfig(final IAddonConfig addonConfig) { - this.addonConfig = null; - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsServiceImpl.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsServiceImpl.java deleted file mode 100644 index f1ed7c83d2..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/service/AbsServiceImpl.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.service; - -import java.util.ArrayList; -import java.util.List; - -import javax.naming.Context; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.service.Service; -import org.ow2.jonas.service.ServiceException; - -import org.ow2.jonas.lib.management.javaee.ManagedObject; -/** - * Abstract implementation of a {@link Service}. - */ -public abstract class AbsServiceImpl extends ManagedObject implements Service { - - /** - * Logger. - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.service"); - - /** - * service name. - */ - private String name = null; - - /** - * service status. - */ - private boolean started = false; - - /** - * Server Properties. - */ - private ServerProperties serverProps; - - /** - * Initialize the service. - * @param ctx configuration of the service - * @throws ServiceException service initialization failed - */ - public void init(final Context ctx) throws ServiceException { - // Only call doInit(Context) for old fashioned services - this.doInit(ctx); - } - - /** - * Get the Server Properties. - */ - public ServerProperties getServerProperties() { - return this.serverProps; - } - - /** - * Set the Server Properties. - * @param props {@link ServerProperties} instance - */ - public void setServerProperties(final ServerProperties props) { - this.serverProps = props; - } - - /** - * Start the service. - * @throws ServiceException service start-up failed - */ - public void start() throws ServiceException { - this.doStart(); - this.started = true; - } - - /** - * Stop the service. - * @throws ServiceException service stopping failed - */ - public void stop() throws ServiceException { - if (this.isStarted()) { - this.doStop(); - this.started = false; - } - } - - /** - * Returns true if the service is started, false otherwise. - * @return true if the service is started - */ - public boolean isStarted() { - return this.started; - } - - /** - * Returns the service's name. - * @return the service name - */ - public String getName() { - return this.name; - } - - /** - * Set the service's name. - * @param name the name to set - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Return the domain's name of this service. - * @return the domain name - */ - public String getDomainName() { - return serverProps.getDomainName(); - } - - /** - * Return the JOnAS server's name of this service. - * @return the server name - */ - public String getJonasServerName() { - return serverProps.getServerName(); - } - - /** - * Default initialization method to be overridden by sub-classes. - * @param ctx configuration of the service - * @throws ServiceException service initialization failed - * @deprecated - */ - @Deprecated - protected void doInit(final Context ctx) throws ServiceException { - logger.log(BasicLevel.WARN, "Deprecated initialization method. New services must have setters."); - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - protected abstract void doStart() throws ServiceException; - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - protected abstract void doStop() throws ServiceException; - - /** - * @return a String representation of a given Service. - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return this.getClass().getSimpleName() + "[name:" + getName() + ", started:" + isStarted() + "]"; - } - - /** - * Utility Exception throwing method to identify the error source. - * @param message Descriptive requirement message. - * @throws ServiceException always. - */ - protected void throwRequirementException(final String message) throws ServiceException { - StringBuilder sb = new StringBuilder(); - sb.append("Service: '" + getName() + "' requires: "); - sb.append(message); - throw new ServiceException(sb.toString()); - } - - /** - * Utility method to convert a given String of comma-separated elements to a List. - * @param value String value - * @return List constructed from the given String - */ - protected static List convertToList(final String value) { - // only handle String list - // separator is the ',' - String[] values = value.split(","); - List injection = new ArrayList(); - - // We should have at least 1 real value - if (!((values.length == 1) && ("".equals(values[0])))) { - for (int i = 0; i < values.length; i++) { - String part = values[i]; - injection.add(part.trim()); - } - } - return injection; - } - - /** - * Value used as sequence number by reconfiguration notifications. - */ - private long sequenceNumber; - - /** - * Return a sequence number and increase this number. - * @return a sequence number - */ - public long getSequenceNumber() { - return ++sequenceNumber; - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Base64.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Base64.java deleted file mode 100644 index ca8251f45b..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Base64.java +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Base64 - encode/decode data using the Base64 encoding scheme - * Copyright (c) 1998 by Kevin Kelley - * Contact: Kevin Kelley - * 30718 Rd. 28, La Junta, CO, 81050 USA. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - */ - -package org.ow2.jonas.lib.util; - -/** - * Provides encoding of raw bytes to base64-encoded characters, and - * decoding of base64 characters to raw bytes. - * - * @author Kevin Kelley (kelley@ruralnet.net) - * @version 1.3 - * @date 06 August 1998 - * @modified 14 February 2000 - * @modified 22 September 2000 - */ -public class Base64 { - - /** - * Default empty constructor for utility class. - */ - private Base64() {} - - /** - * code characters for values 0..63. - */ - private static char[] alphabet = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" - .toCharArray(); - - /** - * lookup table for converting base64 characters to value in range 0..63. - */ - private static byte[] codes = new byte[256]; - - static { - for (int i = 0; i < 256; i++) { - codes[i] = -1; - } - for (int i = 'A'; i <= 'Z'; i++) { - codes[i] = (byte) (i - 'A'); - } - for (int i = 'a'; i <= 'z'; i++) { - codes[i] = (byte) (26 + i - 'a'); - } - for (int i = '0'; i <= '9'; i++) { - codes[i] = (byte) (52 + i - '0'); - } - codes['+'] = 62; - codes['/'] = 63; - } - - - - /** - * returns an array of base64-encoded characters to represent the - * passed data array. - * - * @param data the array of bytes to encode - * @return base64-coded character array. - */ - public static char[] encode(final byte[] data) { - char[] out = new char[((data.length + 2) / 3) * 4]; - - // - // 3 bytes encode to 4 chars. Output is always an even - // multiple of 4 characters. - // - for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { - boolean quad = false; - boolean trip = false; - - int val = (0xFF & (int) data[i]); - val <<= 8; - if ((i + 1) < data.length) { - val |= (0xFF & (int) data[i + 1]); - trip = true; - } - val <<= 8; - if ((i + 2) < data.length) { - val |= (0xFF & (int) data[i + 2]); - quad = true; - } - out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 1] = alphabet[val & 0x3F]; - val >>= 6; - out[index + 0] = alphabet[val & 0x3F]; - } - return out; - } - - /** - * Decodes a BASE-64 encoded stream to recover the original - * data. White space before and after will be trimmed away, - * but no other manipulation of the input will be performed. - * - * As of version 1.2 this method will properly handle input - * containing junk characters (newlines and the like) rather - * than throwing an error. It does this by pre-parsing the - * input and generating from that a count of VALID input - * characters. - * @param data BASE-64 encoded stream - * @return original data - **/ - public static byte[] decode(final char[] data) { - // as our input could contain non-BASE64 data (newlines, - // whitespace of any sort, whatever) we must first adjust - // our count of USABLE data so that... - // (a) we don't misallocate the output array, and - // (b) think that we miscalculated our data length - // just because of extraneous throw-away junk - - int tempLen = data.length; - for (int ix = 0; ix < data.length; ix++) { - if ((data[ix] > 255) || codes[ data[ix] ] < 0) { - --tempLen; // ignore non-valid chars and padding - } - } - // calculate required length: - // -- 3 bytes for every 4 valid base64 chars - // -- plus 2 bytes if there are 3 extra base64 chars, - // or plus 1 byte if there are 2 extra. - - int len = (tempLen / 4) * 3; - if ((tempLen % 4) == 3) { - len += 2; - } - if ((tempLen % 4) == 2) { - len += 1; - } - - byte[] out = new byte[len]; - - - - int shift = 0; // # of excess bits stored in accum - int accum = 0; // excess bits - int index = 0; - - // we now go through the entire array (NOT using the 'tempLen' value) - for (int ix = 0; ix < data.length; ix++) { - int value = (data[ix] > 255) ? -1 : codes[ data[ix] ]; - - if (value >= 0) { // skip over non-code - accum <<= 6; // bits shift up by 6 each time thru - shift += 6; // loop, with new bits being put in - accum |= value; // at the bottom. - if (shift >= 8) { // whenever there are 8 or more shifted in, - shift -= 8; // write them out (from the top, leaving any - out[index++] = // excess at the bottom for next iteration. - (byte) ((accum >> shift) & 0xff); - } - } - // we will also have skipped processing a padding null byte ('=') here; - // these are used ONLY for padding to an even length and do not legally - // occur as encoded data. for this reason we can ignore the fact that - // no index++ operation occurs in that special case: the out[] array is - // initialized to all-zero bytes to start with and that works to our - // advantage in this combination. - } - - // if there is STILL something wrong we just have to throw up now! - if (index != out.length) { - throw new Error("Miscalculated data length (wrote " + index + " instead of " + out.length + ")"); - } - - return out; - } - - - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/BeanNaming.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/BeanNaming.java deleted file mode 100644 index 911de16f51..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/BeanNaming.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.lang.reflect.Method; -import java.util.StringTokenizer; - -import javax.security.jacc.EJBMethodPermission; - -/** - * This class is made for hiding Naming convention in all JOnAS framework.
    - * (Among other things, names of the implementation classes of the Enterprise - * Bean's Home and Enterprise Bean Remote interfaces generated by the GenIC - * tools.)
    - * It is used by the EJB generation tools and framework - * - * @author Helene Joanin - * @author Joe Gittings has proposed to code method signature in order to avoid same signature for inherited methods - * @author Christophe Ney [cney@batisseurs.com] - * @author Sebastien Chassande-Barrioz - */ -public class BeanNaming { - - /** - * returns the name of the package of the given full name - */ - public static String getPackageName(String name) { - if (name == null) { return null; } - int idx = name.lastIndexOf('.'); - return (idx == -1 ? "" : name.substring(0, idx)); - } - - /** - * return full name of a class for given package and class names - * - * @param packageName - * possibly empty package name - * @param name - * class name - * @return fully qualified class name - */ - public static String getClassName(String packageName, String name) { - return (packageName.length() == 0) ? name : packageName + "." + name; - } - - /** - * returns the basename of the given full name - */ - public static String getBaseName(String fullName) { - String baseName = null; - if (fullName != null) { - int idx = fullName.lastIndexOf('.'); - int len = fullName.length(); - if (idx == -1) { - baseName = fullName; - } else { - if (idx != (len - 1)) { - baseName = fullName.substring(idx + 1, len); - } else { - baseName = ""; - } - } - } - return baseName; - } - - /** - * returns the full path of the file name. mainly replace '.' by '/'. - */ - public static String getPath(String fullName) { - String pkg = new String(); - StringTokenizer stk = new StringTokenizer(fullName, "."); - int nb = stk.countTokens(); - for (int i = 0; i < nb; i++) { - pkg = pkg.concat(stk.nextToken()); - if (i < nb - 1) { - pkg = pkg + File.separatorChar; - } - } - return pkg; - } - - /** - * returns the given string with the first character converted to upper case - */ - public static String firstToUpperCase(String s) { - String value; - if (s.length() > 0) { - char c = Character.toUpperCase(s.charAt(0)); - value = new String(c + s.substring(1)); - } else { - value = new String(); - } - return (value); - } - - /** - * returns the name of the JOnAS specific deployment descriptor file's name - * corresponding to the given standard deployment descriptor file's name. - * (ex: returns "jonas-XXX.xml" for "XXX.xml" and "../../jonas-XXX.xml" for - * "../../XXX.xml") - */ - public static String getJonasXmlName(String stdXmlName) { - - String jonasXmlName = new String(); - File f = new File(stdXmlName); - String p = f.getParent(); - String n = f.getName(); - if (p != null) { - jonasXmlName = jonasXmlName.concat(p); - jonasXmlName = jonasXmlName.concat(File.separator); - } - jonasXmlName = jonasXmlName.concat("jonas-"); - jonasXmlName = jonasXmlName.concat(n); - - return (jonasXmlName); - } - - /** - * returns the name of the parent directory - */ - public static String getParentName(String fileName) { - File f = new File(fileName); - return f.getParent(); - } - - /** - * Gets a string that represents the signature of a method - * - * @param ejbName - * name of the ejb - * @param method - * Method on which the signature is required - * @return string that represents the signature of a method - */ - public static String getSignature(String ejbName, Method method) { - - Class clazz = method.getDeclaringClass(); - String methItf = ""; - - if (javax.ejb.EJBHome.class.isAssignableFrom(clazz)) { - methItf = "Home"; - } else if (javax.ejb.EJBObject.class.isAssignableFrom(clazz)) { - methItf = "Remote"; - } else if (javax.ejb.EJBLocalHome.class.isAssignableFrom(clazz)) { - methItf = "LocalHome"; - } else if (javax.ejb.EJBLocalObject.class.isAssignableFrom(clazz)) { - methItf = "Local"; - } else if (java.rmi.Remote.class.isAssignableFrom(clazz)) { - methItf = "ServiceEndpoint"; - } - - return new EJBMethodPermission(ejbName, methItf, method).getActions(); - } -} - diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Cmd.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Cmd.java deleted file mode 100644 index 13951671a0..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Cmd.java +++ /dev/null @@ -1,306 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class allows to run a command in sub-process. - * @author Helene Joanin : Initial developer - * @author Christophe Ney : Fix to handle arguments containing white spaces. - * @author Nozomi Matsumura : GenIC i18n problem. GenIC invoke javac and javac's output has non asc-ii characters, - * javac's output did not show collectly. - * @author Guillaume Tulloup : Invoke directly the com.sun.tools.javac.Main.compile() method to work around a limitation on Windows. - * (See bug #100587) - * @author Helene Joanin : Invoke directly the com.sun.tools.rmic.Main.compile() method to work around a limitation on Windows. - */ - -public class Cmd { - - /** - * Class name of the sun javac compiler - */ - private static final String COMPILER_CLASS_NAME = "com.sun.tools.javac.Main"; - /** - * Class name of the sun rmic compiler - */ - private static final String RMICOMPILER_CLASS_NAME = "sun.rmi.rmic.Main"; - - /** - * Command arguments list (included the command name) - */ - private Vector mCmd = new Vector(); - - /** - * Command environment variables - */ - private String[] mEnv = null; - - /** - * Invoke (or not) the compile method of the corresponding sun compiler class - */ - private boolean tryToInvoke = false; - - /** - * The Common Logger. - */ - private static final Logger logger = Log.getLogger("org.ow2.jonas.cmd"); - - /** - * Construtor method of Cmd class. - * @param cmd command - * @param invoke try to invoke directly the method of the java class of the - * command - */ - public Cmd(final String cmd, final boolean invoke) { - mCmd.addElement(cmd); - tryToInvoke = invoke; - } - - /** - * Construtor method of Cmd class. Equivalent to Cmd(cmd, false). - * @param cmd command - */ - public Cmd(final String cmd) { - this(cmd, false); - } - - /** - * Construtor method of Cmd class. - * @param cmd command - * @param env environment of the command - * @param invoke invoke the compile method of the class instead of execute the command - */ - public Cmd(final String cmd, final String[] env, final boolean invoke) { - this(cmd, invoke); - mEnv = env; - } - - /** - * Add a new argument to the command. - * @param arg argument added to the tail of the command argument list - */ - public void addArgument(final String arg) { - mCmd.addElement(arg); - } - - /** - * Add a new argument to the command. - * @param args argument added to the tail of the command argument list - */ - public void addArguments(final List args) { - for (Iterator it = args.iterator(); it.hasNext();) { - mCmd.addElement(it.next()); - } - } - - /** - * Execute the command. (In case of the exit value of the command is not 0, - * the output and error streams of the command is traced.) - * @return false if the command cannot be executed, or if its exit value is - * not 0. - */ - public boolean run() { - - if (tryToInvoke) { - File toolsJar = new File(System.getProperty("java.home") + File.separator + "lib" + File.separator + "tools.jar"); - if (toolsJar.exists()) { - ClassLoader classLoader = getClass().getClassLoader(); - try { - classLoader = new URLClassLoader(new URL[]{toolsJar.toURL()}, classLoader); - } catch (MalformedURLException e) { - logger.log(BasicLevel.WARN, "The tools.jar file was not found in "+ toolsJar.getParent() + "."); - } - - if ((((String) mCmd.get(0)).endsWith("javac"))) { - // Bug #100587 fixed to work around a limitation on Windows - return compile(classLoader); - } - if ((((String) mCmd.get(0)).endsWith("rmic"))) { - return rmicompile(classLoader); - } - } - } - - RunnableStreamListener out, err; - Process proc = null; - boolean val = true; - try { - String[] cmd = new String[mCmd.size()]; - mCmd.copyInto(cmd); - proc = Runtime.getRuntime().exec(cmd, mEnv); - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "exception", e); - return (false); - } - out = new RunnableStreamListener(new BufferedReader(new InputStreamReader(proc.getInputStream())), System.out); - new Thread(out, "stdout listener for " + this.toString()).start(); - err = new RunnableStreamListener(new BufferedReader(new InputStreamReader(proc.getErrorStream())), System.err); - new Thread(err, "stderr listener for " + this.toString()).start(); - try { - val = proc.waitFor() == 0; - } catch (InterruptedException e) { - logger.log(BasicLevel.ERROR, "exception", e); - val = false; - } finally { - // destroy the process - if (proc != null) { - proc.destroy(); - } - } - - return (val); - } - - /** - * invoke the compile method of the compiler javac class - * @return false in error case - */ - private boolean compile(final ClassLoader classLoader) { - // first arg should not be added because it's the name of the command - String[] args = new String[mCmd.size() - 1]; - for (int i = 0; i < mCmd.size() - 1; i++) { - args[i] = (String) mCmd.get(i + 1); - } - - try { - // Use reflection - Class c = Class.forName(COMPILER_CLASS_NAME, false, classLoader); - Object compiler = c.newInstance(); - java.lang.reflect.Method compile = c.getMethod("compile", new Class[] {(new String[] {}).getClass()}); - int result = ((Integer) compile.invoke(compiler, new Object[] {args})).intValue(); - return (result == 0); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "exception", e); - return false; - } - } - - /** - * invoke the main method of the rmi compiler rmic class - * @return false in error case - */ - private boolean rmicompile(final ClassLoader classLoader) { - // first arg should not be added because it's the name of the command - String[] args = new String[mCmd.size() - 1]; - for (int i = 0; i < mCmd.size() - 1; i++) { - args[i] = (String) mCmd.get(i + 1); - } - - try { - // Use reflection - Class c = Class.forName(RMICOMPILER_CLASS_NAME, false, classLoader); - - Constructor cons = c.getConstructor(new Class[] { OutputStream.class, String.class }); - Object rmic = cons.newInstance(new Object[] { System.out, "rmic" }); - - Method doRmic = c.getMethod("compile", new Class[] { String[].class }); - Boolean result = (Boolean) doRmic.invoke(rmic, new Object[] { args }); - - return result; - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "exception", e); - return false; - } - } - - /** - * @return iterator over the command line - */ - public Iterator getCommandLine() { - return mCmd.iterator(); - } - - /** - * @return the string representation of the object for UI purpose - */ - @Override - public String toString() { - StringBuffer buf = new StringBuffer(); - Enumeration e = mCmd.elements(); - while (e.hasMoreElements()) { - String arg = (String) e.nextElement(); - if (arg == null) { - arg = "null"; - } - for (int i = 0; i < arg.length(); i++) { - if (Character.isWhitespace(arg.charAt(i))) { - arg = "\"" + arg + "\""; - break; - } - } - buf.append(arg); - buf.append(' '); - } - return buf.toString().trim(); - } - -} - -/** - * To run the command happily, and to swallow the stdout from the process - */ -class RunnableStreamListener implements Runnable { - - BufferedReader in_; - - PrintStream stream_; - - RunnableStreamListener(final BufferedReader in, final PrintStream stream) { - in_ = in; - stream_ = stream; - } - - public void run() { - String line; - try { - while ((line = in_.readLine()) != null) { - stream_.println(line); - } - } catch (IOException e) { - stream_.println(e.toString()); - } - - } -} - diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ConfigurationConstants.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ConfigurationConstants.java deleted file mode 100644 index 3744a95fad..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ConfigurationConstants.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.util; - -/** - * @author eyindanga - * - */ -public interface ConfigurationConstants { - - /** - * JOnAS Development mode. - */ - String JONAS_PROPERTIES_PROP = "jonas.properties"; - - - /** - * System property name for JONAS_ROOT. - */ - String JONAS_ROOT_PROP = "jonas.root"; - - /** - * System property name for JONAS_BASE. - */ - String JONAS_BASE_PROP = "jonas.base"; - - /** - * JOnAS Development mode. - */ - String JONAS_DEVELOPER_PROP = "jonas.developer"; - - /** - * File name where JOnAS components versions are stored. - */ - String DEFAULT_JONAS_VERSIONS = "VERSIONS"; - - /** - * Prefix for jonas.properties file - */ - String DEFAULT_JONAS_PREFIX = "jonas"; - - /** - * JOnAS server name - */ - String JONAS_NAME_PROP = "jonas.name"; - - /** - * jonas.master property - */ - String JONAS_MASTER_PROP = "jonas.master"; - - /** - * Work directory property. - */ - String WORK_DIRECTORY_PROP = "jonas.workdirectory"; - - /** - * Default work directory name. - */ - String DEFAULT_WORK_DIRECTORY = "work"; - - /** - * configuration directory name (changed from 'config' to 'conf' !!) - */ - String DEFAULT_CONFIG_DIR = "conf"; - - /** - * Default server name - */ - String DEFAULT_JONAS_NAME = "jonas"; - - /** - * Default server name - */ - String DEFAULT_DOMAIN_NAME = "jonas"; - - /** - * domain.name property - */ - String DOMAIN_NAME_PROP = "domain.name"; - - /** - * Directory in the work directory where the jonas.properties is generated - */ - String CONF_GENERATED_DIRECTORY = "conf-generated"; - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/DirFilter.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/DirFilter.java deleted file mode 100644 index d49fcb2e8e..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/DirFilter.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.io.FilenameFilter; - -/** - * Filter used to seek directories - * @author durieuxp - */ -public class DirFilter implements FilenameFilter { - - String prefix = null; - String suffix = null; - - public DirFilter(String p1, String s1) { - prefix = p1; - suffix = s1; - } - - public boolean accept(File dir, String name) { - if (name.endsWith("~")) { - return false; - } - if (suffix != null && ! name.endsWith(suffix)) { - return false; - } - if (prefix != null && ! name.startsWith(prefix)) { - return false; - } - return true; - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Env.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Env.java deleted file mode 100644 index f0988512da..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Env.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -/** - * This class manages global variables and properties used by EJB Server. A - * static design pattern is used. - */ -public class Env { - - /** - * No public constructor : utility class - */ - private Env() { - - } - - // Variables related to Java Version - public static final int JAVA_1_1_6 = 116; - - public static final int JAVA_1_1_7 = 117; - - public static final int JAVA_1_1_8 = 118; - - public static final int JAVA_1_2 = 120; - - public static final int JAVA_1_3 = 130; - - public static final int JAVA_1_4 = 140; - - private static int javaVersion = -1; - - /** - * @return true if the os.name starts with "Windows" - */ - public static boolean isOsWindows() { - String osName = System.getProperty("os.name", ""); - return (osName.startsWith("Windows")); - } - - /** - * @return true if the os.name starts with "Mac OS X" - */ - public static boolean isOsMacOsX() { - String osName = System.getProperty("os.name", ""); - return (osName.startsWith("Mac OS X")); - } - - /** - * Gets Java Version. - * @return javaVersion or -1 if error - */ - public static int getJavaVersion() { - - if (javaVersion == -1) { - // Sets Java Version - String strjv = System.getProperty("java.version", ""); - if (strjv.indexOf("1.1.6") == 0) { - javaVersion = JAVA_1_1_6; - } - if (strjv.indexOf("1.1.7") == 0) { - javaVersion = JAVA_1_1_7; - } - if (strjv.indexOf("1.1.8") == 0) { - javaVersion = JAVA_1_1_8; - } - if (strjv.indexOf("1.2") == 0) { - javaVersion = JAVA_1_2; - } - if (strjv.indexOf("1.3") == 0) { - javaVersion = JAVA_1_3; - } - if (strjv.indexOf("1.4") == 0) { - javaVersion = JAVA_1_4; - } - } - return javaVersion; - } - - /** - * @return true if JDK 1.2 or later - */ - public static boolean isJAVA2() { - return (getJavaVersion() >= JAVA_1_2); - } - - /** - * @return true if JDK 1.4 or later - */ - public static boolean isJAVA4() { - return (getJavaVersion() >= JAVA_1_4); - } -} - diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/I18n.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/I18n.java deleted file mode 100644 index 2d304e8ae0..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/I18n.java +++ /dev/null @@ -1,254 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - - -/** - * This class defines the way for getting message with - * ResourceBundle for different language. - * Inspired from http://java.sun.com/docs/books/tutorial/i18n/ - * @author Florent Benoit - */ -public final class I18n { - - /** - * Name of the resource bundle to use. - */ - private static final String RESOURCE_BUNDLE_NAME = "I18n"; - - /** - * List of our I18n objects. - */ - private static Map bundles = null; - - /** - * Internal Resource Bundle. - */ - private ResourceBundle resourceBundle = null; - - /** - * Constructor (private access, use getInstance instead). - * @param packageName name of the package for the bundle - * @param cl the classloader used to load bundle - */ - private I18n(final String packageName, final ClassLoader cl) { - - String bundleName = packageName + "." + RESOURCE_BUNDLE_NAME; - - // Resource bundle is on the form packageName.I18n.properties - try { - Locale locale = Locale.getDefault(); - resourceBundle = ResourceBundle.getBundle(bundleName, locale, cl); - } catch (MissingResourceException mre) { - String err = "Error when trying to get a ResourceBundle for package '" + packageName + "' : " + mre.getMessage(); - throw new IllegalStateException(err); - } - } - - /** - * Gets the instance for a given class. - * @param c the class for which we want a bundle - * @return I18n object - */ - public static I18n getInstance(final Class c) { - return getInstance(c.getPackage().getName(), c.getClassLoader()); - } - - /** - * Gets the instance for a given class. - * @param c the class for which we want a bundle - * @param cl the classloader used to load bundle - * @return I18n object - */ - public static I18n getInstance(final Class c, final ClassLoader cl) { - return getInstance(c.getPackage().getName(), cl); - } - - /** - * Gets the instance for a given package. - * @param packageName the package for which we want a bundle - * @return I18n object - */ - public static I18n getInstance(final String packageName) { - return getInstance(packageName, Thread.currentThread().getContextClassLoader()); - } - - /** - * Gets the instance for a given package. - * @param packageName the package for which we want a bundle - * @param cl the classloader used to load bundle - * @return I18n object - */ - public static I18n getInstance(final String packageName, final ClassLoader cl) { - if (bundles == null) { - bundles = new HashMap(); - } - - I18n i18n = (I18n) bundles.get(packageName); - if (i18n != null) { - return i18n; - } - - - i18n = new I18n(packageName, cl); - bundles.put(packageName, i18n); - return i18n; - } - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param args the object arguments for the formatter - * @return the formatted string - */ - public String getMessage(final String key, final Object[] args) { - String value = getMessage(key); - return MessageFormat.format(value, args); - } - - - /** - * Gets the value of the given key. - * @param key the keystring to retrieve - * @return the value for the given key or the key if the value can not be found - */ - public String getMessage(final String key) { - String ret = null; - - // No bundle, return key - if (resourceBundle == null) { - return key; - } - - try { - ret = resourceBundle.getString(key); - } catch (MissingResourceException mre) { - // key not found, return the key - ret = key; - } - - return ret; - } - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj the object argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, final Object obj) { - return getMessage(key, new Object[] {obj}); - } - - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj1 the first object argument for the formatter - * @param obj2 the second object argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, final Object obj1, final Object obj2) { - return getMessage(key, new Object[] {obj1, obj2 }); - } - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj1 the first object argument for the formatter - * @param obj2 the second object argument for the formatter - * @param obj3 the third object argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, final Object obj1, final Object obj2, final Object obj3) { - return getMessage(key, new Object[] {obj1, obj2, obj3 }); - } - - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj1 argument for the formatter - * @param obj2 argument for the formatter - * @param obj3 argument for the formatter - * @param obj4 argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, final Object obj1, final Object obj2, final Object obj3, final Object obj4) { - return getMessage(key, new Object[] {obj1, obj2, obj3, obj4 }); - } - - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj1 argument for the formatter - * @param obj2 argument for the formatter - * @param obj3 argument for the formatter - * @param obj4 argument for the formatter - * @param obj5 argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, - final Object obj1, - final Object obj2, - final Object obj3, - final Object obj4, - final Object obj5) { - return getMessage(key, new Object[] {obj1, obj2, obj3, obj4, obj5 }); - } - - - /** - * Gets the formatted string with the given arguments. - * @param key the keystring on which to apply arguments - * @param obj1 argument for the formatter - * @param obj2 argument for the formatter - * @param obj3 argument for the formatter - * @param obj4 argument for the formatter - * @param obj5 argument for the formatter - * @param obj6 argument for the formatter - * @return the formatted string - */ - public String getMessage(final String key, - final Object obj1, - final Object obj2, - final Object obj3, - final Object obj4, - final Object obj5, - final Object obj6) { - return getMessage(key, new Object[] {obj1, obj2, obj3, obj4, obj5, obj6 }); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JJarFile.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JJarFile.java deleted file mode 100644 index 5ba8f3e0ef..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JJarFile.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.util.jar.JarFile; -import java.util.jar.JarEntry; - -/** - * This class implements a JarFile that adds a extract/write method. - * @author Eric Hardesty - */ -public class JJarFile extends JarFile { - - /** - * Size of the buffer. - */ - private static final int BUFFER_SIZE = 2048; - - /** - * Constructs a new JarFile with the specified File. - * @param file the jar file to be opened - */ - public JJarFile(File file) throws IOException { - super(file); - } - - /** - * Constructs a new JarFile with the specified File. - * @param file the jar file to be opened - * @param verity boolean to verify if the JarFile is signed - */ - public JJarFile(File file, boolean verify) throws IOException { - super(file, verify); - } - - /** - * Constructs a new JarFile with the specified File. - * @param file the jar file to be opened - * @param verity boolean to verify if the JarFile is signed - * @param mode int of the mode to open the jar - */ - public JJarFile(File file, boolean verify, int mode) throws IOException { - super(file, verify, mode); - } - - /** - * Constructs a new JarFile with the specified File. - * @param name the name of the jar file to be opened - */ - public JJarFile(String name) throws IOException { - super(name); - } - - /** - * Constructs a new JarFile with the specified File. - * @param name the name of the jar file to be opened - * @param verity boolean to verify if the JarFile is signed - */ - public JJarFile(String name, boolean verify) throws IOException { - super(name, verify); - } - - /** - * Extract the specified Jar Entry to the path given - * @param jEnt the JarEntry to extract - * @param filename the filename to write the extracted file - */ - public void extract(JarEntry jEnt, String filename) throws IOException { - - try { - //File output - FileOutputStream out = new FileOutputStream(filename); - InputStream jis = this.getInputStream(jEnt); - int n = 0; - try { - //buffer - byte buffer[] = new byte[BUFFER_SIZE]; - - while ((n = jis.read(buffer)) > 0) { - out.write(buffer, 0, n); - } - } finally { - out.close(); - jis.close(); - } - } catch (IOException e) { - throw new IOException("Error while uncompressing the file " + filename + ": " + e.getMessage()); - } - - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JModule.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JModule.java deleted file mode 100644 index f8f930567d..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JModule.java +++ /dev/null @@ -1,339 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Properties; - -import org.ow2.jonas.lib.bootstrap.JProp; - -/** - * This class implements utility methods for the manipulation of application modules. - * @author Adriana Danes - */ -public class JModule { - - /** - * file extension containing the different module types. - */ - public static final String EJBJAR_EXTENSION = "jar"; - public static final String RAR_EXTENSION = "rar"; - public static final String WAR_EXTENSION = "war"; - public static final String EAR_EXTENSION = "ear"; - - /** - * Child directory of a expanded container. - */ - public static final String EJBJAR_CHILD_DIR = "META-INF"; - public static final String RAR_CHILD_DIR = "META-INF"; - public static final String WAR_CHILD_DIR = "WEB-INF"; - public static final String EAR_CHILD_DIR = "META-INF"; - - /** - * xml file in a child directory of a expanded container. - */ - public static final String EJBJAR_CONFIRM_FILE = "ejb-jar.xml"; - public static final String RAR_CONFIRM_FILE = "ra.xml"; - public static final String WAR_CONFIRM_FILE = "web.xml"; - public static final String EAR_CONFIRM_FILE = "application.xml"; - - public static final String JONAS_BASE = JProp.getJonasBase(); - public static final String DEPLOY_DIR = JONAS_BASE + File.separator + "deploy"; - /** - * properties file extension. - */ - public static final String PROPS_EXTENSION = "properties"; - - - /** - * name of the directory containig configuration. - */ - public static final String CONF_DIR = "conf"; - - public static ArrayList getFilesInDir(final String dirName, final String extension) throws Exception { - ArrayList al = new ArrayList(); - File file = new File(dirName); - String[] files = file.list(); - int pos; - String fileName; - if (files != null) { - for (int i = 0; i < files.length; i++) { - file = new File(dirName, files[i]); - if (file.isFile()) { - fileName = file.getName().toLowerCase(); - pos = fileName.lastIndexOf(extension); - if (pos > -1) { - if (pos == (fileName.length() - extension.length())) { - al.add(file.getName()); - } - } - } - } - } - Collections.sort(al); - return al; - } - - public static ArrayList getDatasourcePropsInDir() throws Exception { - // Get all files include in configuration directory - ArrayList al = getFilesInDir(JProp.getJonasBase() + File.separator + CONF_DIR, PROPS_EXTENSION); - // Keep all datasources properties - String sPath; - Properties oProps = new Properties(); - boolean bDelete; - int i = 0; - while (i < al.size()) { - sPath = JProp.getJonasBase() + File.separator + CONF_DIR + File.separator - + al.get(i).toString(); - bDelete = true; - try { - oProps.clear(); - oProps.load(new FileInputStream(sPath)); - // Detect datasource property - if (oProps.getProperty("datasource.name") != null) { - // Remove Extension - int iPos = al.get(i).toString().toLowerCase().lastIndexOf(".properties"); - al.set(i, al.get(i).toString().substring(0, iPos)); - // Next - i++; - bDelete = false; - } - } catch (Exception e) { - // none - } finally { - // Remove no-datasource - if (bDelete) { - al.remove(i); - } - } - } - return al; - } - - public static ArrayList getMailFactoryPropsInDir(final String type) throws Exception { - // Get all files include in configuration directory - ArrayList al = getFilesInDir(JProp.getJonasBase() + File.separator + CONF_DIR, PROPS_EXTENSION); - // Keep all datasources properties - String sPath; - Properties oProps = new Properties(); - boolean bDelete; - int i = 0; - while (i < al.size()) { - sPath = JProp.getJonasBase() + File.separator + CONF_DIR + File.separator - + al.get(i).toString(); - bDelete = true; - try { - oProps.clear(); - oProps.load(new FileInputStream(sPath)); - // Detect mail factory property - if (oProps.getProperty("mail.factory.name") != null) { - boolean bToReturn; - if (type == null) { - // any type OK - bToReturn = true; - } else { - // Check type - if (oProps.getProperty("mail.factory.type").equals(type)) { - bToReturn = true; - } else { - bToReturn = false; - } - } - if (bToReturn) { - // Remove Extension - int iPos = al.get(i).toString().toLowerCase().lastIndexOf(".properties"); - al.set(i, al.get(i).toString().substring(0, iPos)); - // Next - i++; - bDelete = false; - } - } - } catch (Exception e) { - // none - } finally { - // Remove no-mail factory - if (bDelete) { - al.remove(i); - } - } - } - return al; - } - - public static ArrayList getMailFactoryPropsInDir() throws Exception { - return getMailFactoryPropsInDir(null); - } - - /** - * Return the URL list of files (possibly directories) having a given extension located in a given directory. - * @param dirName name of the directory to lookup - * @param extension extension to check - * @return list of URLs of the files/directories which were found - * @throws MalformedURLException If the path cannot be parsed as a URL - * @throws IOException If an I/O error occurs, which is possible because the - * construction of the canonical pathname may require - * file system queries - */ - public static ArrayList getInstalledFileInDir(final String dirName, final String extension) throws MalformedURLException, IOException { - ArrayList al = new ArrayList(); - // Search all files in directory - File oFile = new File(dirName); - String[] asFiles = oFile.list(); - if (asFiles != null) { - // Loop for each found file - for (int i = 0; i < asFiles.length; i++) { - oFile = new File(dirName, asFiles[i]); - // Detect extension - String sFilename = oFile.getName().toLowerCase(); - int iPos = sFilename.lastIndexOf(extension); - if (iPos > -1 && iPos == (sFilename.length() - extension.length())) { - URL url = oFile.getCanonicalFile().toURL(); - al.add(url); - } - } - } - return al; - } - - /** - * Return the list of all installed containers in a directory. - * The container may be :
    - * - a archive file container with a known extension : jar, war, ear, rar
    - * - a directory where the container is expanded
    - * To control if a directory contains a expanded container, it's necessary - * to provide the child directory and the xml file that confirm the expanded container.
    - * Parameter example to retrieve :
    - * - web application : war, WEB-INF, web.xml - * - application : ear, META-INF, application.xml - * - ejb container : jar, META-INF, ejb-jar.xml - * - resource : rar, META-INF, ra.xml - * - * @param p_DirName The name of the directory to find - * @param p_Extension The extension of container (jar, war, ear, rar) - * @param p_DirChildConfirm The child directory that confirm the container - * @param p_FileConfirm The xml file inside the child directory that confirm the container - * @return A list of absolute path container - * @throws Exception - */ - public static ArrayList getInstalledContainersInDir(final String p_DirName, - final String p_Extension, - final String p_DirChildConfirm, - final String p_FileConfirm) - throws Exception { - - // Return variable - ArrayList al = new ArrayList(); - // Variables used in loop - int iPos; - String sFilename; - File oDirChild; - File oFileConfirm; - // Search all files in directory - File oFile = new File(p_DirName); - String[] asFiles = oFile.list(); - - if (asFiles != null) { - // Loop for each found file - for (int i = 0; i < asFiles.length; i++) { - oFile = new File(p_DirName, asFiles[i]); - // Detect file with extension - if (oFile.isFile()) { - sFilename = oFile.getName().toLowerCase(); - iPos = sFilename.lastIndexOf(p_Extension); - if (iPos > -1) { - if (iPos == (sFilename.length() - p_Extension.length())) { - al.add(oFile.getCanonicalFile().toURL().getPath()); - } - } - } - // Detect directory of expanded container - else if (oFile.isDirectory()) { - oDirChild = new File(oFile, p_DirChildConfirm); - if (oDirChild.exists() && oDirChild.isDirectory()) { - oFileConfirm = new File(oDirChild, p_FileConfirm); - if (oFileConfirm.exists()) { - al.add(oFile.getCanonicalFile().toURL().getPath()); - } - } - } - } - } - return al; - } - - /** - * Return the list of all installed modules/apps in a directory. - * The container may be :
    - * - a archive file container with a known extension : jar, war, ear, rar
    - * - a directory where the container is expanded
    - * - * @param dirName The name of the directory to find - * @param extension The extension of container (jar, war, ear, rar) - * @return A list of absolute paths - * @throws Exception - */ - public static ArrayList getInstalledContainersInDir(final String dirName, final String extension) - throws Exception { - - // Return variable - ArrayList al = new ArrayList(); - // Variables used in loop - int iPos; - String sFilename; - // Search all files in directory - File oFile = new File(dirName); - String[] asFiles = oFile.list(); - - if (asFiles != null) { - // Loop for each found file - for (int i = 0; i < asFiles.length; i++) { - oFile = new File(dirName, asFiles[i]); - // Detect file with extension - if (oFile.isFile()) { - sFilename = oFile.getName().toLowerCase(); - iPos = sFilename.lastIndexOf(extension); - if (iPos > -1) { - if (iPos == (sFilename.length() - extension.length())) { - al.add(oFile.getCanonicalFile().toURL().getPath()); - } - } - } - // Detect directory of expanded container - else if (oFile.isDirectory()) { - // yet not support - } - } - } - return al; - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JNDIUtils.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JNDIUtils.java deleted file mode 100644 index 10ded06de9..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JNDIUtils.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume Sauthier - * Contributor(s): - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.util; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.naming.BinaryRefAddr; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.OptionalDataException; - -/** - * JNDIUtils groups all commonly used methods for JNDI. - * @author Guillaume Sauthier - */ -public class JNDIUtils { - - /** - * Private empty Constructor for Utility classes - */ - private JNDIUtils() { } - - /** - * Return an array of byte from a given object - * @param obj the object from which we must extract the bytes. - * @return the byte[] from an object - */ - public static byte[] getBytesFromObject(Object obj) { - return getBytesFromObject(obj, null); - } - - /** - * Return an array of byte from a given object - * @param obj the object from which we must extract the bytes. - * @param logger logger to log exceptions - * @return the byte[] from an object - */ - public static byte[] getBytesFromObject(Object obj, Logger logger) { - - if (obj == null) { - return null; - } - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - ObjectOutputStream oos = null; - byte[] bytes = null; - - try { - oos = new ObjectOutputStream(baos); - oos.writeObject(obj); - bytes = baos.toByteArray(); - } catch (Exception e) { - //Can't tranform - return null; - } finally { - try { - oos.close(); - baos.close(); - } catch (Exception e) { - if (logger != null) { - logger.log(BasicLevel.DEBUG, "Cannot close output streams : '" + e.getMessage() + "'"); - } - } - } - return bytes; - } - - /** - * Return an object from an array of bytes. Useful for BinaryRefAddr - * Useful for BinaryRefAddr - * @param bytes an array of bytes - * @return an object or null if there is an error of if it's empty - */ - public static Object getObjectFromBytes(byte[] bytes) { - return getObjectFromBytes(bytes, null); - } - - /** - * Return an object from an array of bytes. - * Useful for BinaryRefAddr - * @param bytes an array of bytes - * @param logger logger to log exceptions - * @return an object or null if there is an error of if it's empty - */ - public static Object getObjectFromBytes(byte[] bytes, Logger logger) { - //Declaration - ByteArrayInputStream bis = null; - ObjectInputStream ois = null; - Object obj = null; - - if (bytes == null) { - return null; - } - - bis = new ByteArrayInputStream(bytes); - try { - ois = new ObjectInputStream(bis); - obj = ois.readObject(); - - } catch (ClassNotFoundException cfe) { - if (logger != null) { - logger.log(BasicLevel.DEBUG, "Cannot get object from bytes : " + cfe.getMessage()); - } - } catch (OptionalDataException ode) { - if (logger != null) { - logger.log(BasicLevel.DEBUG, "Cannot get object from bytes : " + ode.getMessage()); - } - } catch (IOException ioe) { - if (logger != null) { - logger.log(BasicLevel.DEBUG, "Cannot get object from bytes : " + ioe.getMessage()); - } - } finally { - try { - bis.close(); - ois.close(); - } catch (Exception e) { - if (logger != null) { - logger.log(BasicLevel.DEBUG, "Cannot close input stream : " + e.getMessage()); - } - } - } - return obj; - } - - /** - * Insert a key/value String/String couple in the given Reference as a StringRefAddr. - * @param ref Reference to be modified - * @param key Address' key - * @param value Address' value - */ - public static void insertInto(final Reference ref, final String key, final String value) { - if (value != null) { - RefAddr addr = new StringRefAddr(key, value); - ref.add(addr); - } // else, print a debug message ? - } - - /** - * Insert a key/value String/Object couple in the given Reference after serialization of the value. - * @param ref Reference to be modified - * @param key Address' key - * @param value Object value (will be serialized) - */ - public static void insertInto(final Reference ref, final String key, final Object value) { - if (value != null) { - RefAddr addr = new BinaryRefAddr(key, getBytesFromObject(value)); - ref.add(addr); - } // else, print a debug message ? - } - - /** - * Extract a String value with the given key, from the Reference. - * @param ref Reference that holds the value within - * @param key Key of the value - * @return the String value - */ - public static String extractStringFrom(final Reference ref, final String key) { - StringRefAddr addr = (StringRefAddr) ref.get(key); - if (addr == null) { - return null; - } - return (String) addr.getContent(); - } - - /** - * Extract an Object from the Reference. Notice that this object have to - * be castable to the given Class parameter. The ClassLoader where this - * class live is used to deserialize the object. - * If it cannot load the requested class, a ClassLoading error will probably occur. - * @param ref Reference that holds the serialized version of the requested object - * @param key Object's key - * @param type Object's type (may be an interface) - * @return an Object casted with Class - */ - public static T extractObjectFrom(final Reference ref, - final String key, - final Class type) { - BinaryRefAddr addr = (BinaryRefAddr) ref.get(key); - if (addr == null) { - return null; - } - byte[] serialized = (byte[]) addr.getContent(); - Object result = getObjectFromBytes(serialized); - return type.cast(result); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JonasObjectName.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JonasObjectName.java deleted file mode 100644 index faea0a35cb..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JonasObjectName.java +++ /dev/null @@ -1,896 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -/** - * A set of static classes used to build the names of proprietary MBeans used in JOnAS and in Joram. - * @author Bruno Michel - * @author Guillaume Riviere - * @author Florent Benoit - * @author Ludovic Bert - * @author Miroslav Halas - * @author Adriana Danes - */ -public class JonasObjectName { - - /** - * Create ObjectName for the JMX Connector Server which is an MBean inside the target MBeanServer. - * @param protocol used protocol - * @param connectorName name used to distinguish connector servers using the same protocol - * @return ObjectName for the JMX Connector Server MBean - */ - public static ObjectName jmxConnectorServer(final String protocol, final String connectorName) { - try { - return ObjectName.getInstance("connectors:protocol=" + protocol + ",name=" + connectorName); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName domain name - * @return ObjectName for reconfiguration manager MBean - */ - public static ObjectName serverConfig(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=management,name=reconfigManager"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for an web services - */ - public static ObjectName wsService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=WebService,*"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for the ejb service MBean - */ - public static ObjectName ejbService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=ejbContainers"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for the ejb3 service MBean - */ - public static ObjectName ejb3Service(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=ejb3"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for the validation service MBean - */ - public static ObjectName jsfService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jsf"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for the validation service MBean - */ - public static ObjectName validationService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=validation"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the earService (Jmx). - * @param domainName the domain name - * @return the Ear service. - */ - public static ObjectName earService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=ear"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the deployableMonitorService (Jmx). - * @param domainName the domain name - * @return the DeployableMonitor service. - */ - public static ObjectName deployableMonitorService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=depmonitor"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the mailService (Jmx). - * @param domainName the domain name - * @return the Mail service. - */ - public static ObjectName mailService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=mail"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the JNDI Interceptors Object Name (Jmx). - * @param domainName the domain name - * @return the ObjectName of the JNDI Interceptor component. - */ - public static ObjectName jndiInterceptors(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jndi-interceptors"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * ObjectName for a given context interceptor. - * @param domainName the JMX domain - * @param interceptorName the name of the interceptor - * @return the built object name - */ - public static ObjectName jndiContextInterceptor(final String domainName, final String interceptorName) { - try { - StringBuffer sb = new StringBuffer(domainName); - sb.append(":type=service"); - sb.append(",name=jndi-interceptors"); - sb.append(",interceptor="); - sb.append(interceptorName); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - - - /** - * Return the webContainerService MBean ObjectName. - * @param domainName the domain name - * @return the web container service. - */ - public static ObjectName webContainerService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=webContainers"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the jaxrpcService MBean ObjectName - * @param domainName the domain name - * @return the JAX-RPC service. - */ - public static ObjectName jaxrpcService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jaxrpc"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the jaxwsService MBean ObjectName - * @param domainName the domain name - * @return the JAX-WS service. - */ - public static ObjectName jaxwsService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jaxws"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return the wsdlPublisher MBean ObjectName - * @param domainName the domain name - * @return the WSDL Publisher service. - */ - public static ObjectName wsdlPublisherService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=wsdl-publisher"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for dbm service MBean - */ - public static ObjectName databaseService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=database"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for resource service MBean - */ - public static ObjectName resourceService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=resource"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for jtm service MBean - */ - public static ObjectName transactionService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jtm"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName domain name - * @return ObjectName for JOnAS logging MBeans - */ - public static ObjectName logService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=log"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - /** - * @return ObjectName for JOnAS logging MBeans - */ - public static ObjectName logService() { - try { - return ObjectName.getInstance("*:type=service,name=log"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Create ObjectName for the LogBuffer MBean - * @param domainName domain name - * @param name LogBuffer name - * @return ObjectName for the LogBuffer MBean - */ - public static ObjectName logBuffer(final String domainName, final String name) { - try { - return ObjectName.getInstance(domainName + ":type=LogBuffer,name=" + name); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Create ObjectName for the LogBuffer MBean - * @param domainName domain name - * @param name LogBuffer name - * @return ObjectName for the LogBuffer MBean - */ - public static ObjectName logBuffers(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=LogBuffer,*"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - /** - * Construct ObjectName for the discovery service MBean - * @param domainName the domain name - * @return ObjectName for the discovery service MBean - */ - public static ObjectName discoveryService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=discovery"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for jms service MBean - */ - public static ObjectName jmsService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=jms"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the domain name - * @return ObjectName for jtm service MBean - */ - public static ObjectName securityService(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=security"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @return ObjectName for jmx service MBean - */ - public static ObjectName jmxService() { - try { - return ObjectName.getInstance("JMImplementation:type=MBeanServerDelegate"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * War MBean ObjectName - * @param domainName domain name - * @param filename name of the file containing the war - * @return War MBean ObjectName - * @throws MalformedObjectNameException Could not construct ObjectName - */ - public static ObjectName war(final String domainName, final String filename) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=war,fname=" + fileNameForObjectName(filename)); - } - - /** - * Return an objectName for the WorkCleaner. - * @param domainName domain name - * @return an objectName for the WorkCleaner - */ - public static ObjectName workCleaner(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=workcleaner"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for the versioning service. - * @param domainName domain name - * @return an objectName for the versioning service. - */ - public static ObjectName versioning(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=versioning"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for the multitenant service. - * @param domainName domain name - * @return an objectName for the multitenant service. - */ - public static ObjectName multitenant(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=multitenant"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for the packaging service. - * @param domainName domain name - * @return an objectName for the packaging service. - */ - public static ObjectName packaging(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=packaging"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for the smartclient service. - * @param domainName domain name - * @return an objectName for the smartclient service. - */ - public static ObjectName smartclient(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=smartclient"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for the WorkManager - * @param domainName domain name - * @return an objectName for the WorkManager - */ - public static ObjectName workManager(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=workmanager"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * Return an objectName for a Security memory factory. - * @param domainName the domain name - * @param name the name of the security memory factory - * @return an objectName for the security memory factory. - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName securityMemoryFactory(final String domainName, final String name) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=memory,name=" + name); - } - - /** - * Return an objectName for a Security datasource factory. - * @param domainName the domain name - * @param name the name of the security datasource factory - * @return an objectName for the security datasource factory. - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName securityDatasourceFactory(final String domainName, final String name) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=datasource,name=" + name); - } - - /** - * Return an objectName for a Security ldap factory. - * @param domainName the domain name - * @param name the name of the security ldap factory - * @return an objectName for the security ldap factory. - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName securityLdapFactory(final String domainName, final String name) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=ldap,name=" + name); - } - - /** - * Return an objectName for a user - * @param resource the name of the resource on which the user depends - * @param username the name of the user - * @param domainName the domain name - * @return an objectName for the user MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName user(final String domainName, final String resource, final String username) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=users,resource=" + resource - + ",name=" + username); - } - - /** - * Return an objectName for a group - * @param resource the name of the resource on which the group depends - * @param groupname the name of the group - * @param domainName the domain name - * @return an objectName for the group MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName group(final String domainName, final String resource, final String groupname) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=groups,resource=" + resource - + ",name=" + groupname); - } - - /** - * Return an objectName for a role - * @param resource the name of the resource on which the role depends - * @param rolename the name of the role - * @param domainName the domain name - * @return an objectName for the user MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName role(final String domainName, final String resource, final String rolename) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=roles,resource=" + resource - + ",name=" + rolename); - } - - /** - * ObjectName for all war MBeans in the domain - * @param domainName domain name - * @return ObjectName for all war MBeans in the domain - */ - public static ObjectName allWars(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=war,*"); - } catch (MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - public static String getType(final ObjectName obj) { - return obj.getKeyProperty("type"); - } - - public static String fileNameForObjectName(final String fileName) { - return fileName.replace(':', '|'); - } - - /** - * Return an objectName for the Security factory name. - * @param domainName the domain name - * @return an objectName for the security factory name. - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allSecurityFactories(final String domainName) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,*"); - } - - /** - * Return an objectName for all the Security memory factories. - * @param domainName the domain name - * @return an objectName for all the security memory factories - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allSecurityMemoryFactories(final String domainName) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=memory,*"); - } - - /** - * Return an objectName for all the Security datasource factories. - * @param domainName the domain name - * @return an objectName for all the security datasource factories - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allSecurityDatasourceFactories(final String domainName) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=datasource,*"); - } - - /** - * Return an objectName for all the Security ldap factories. - * @param domainName the domain name - * @return an objectName for all the security ldap factories - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allSecurityLdapFactories(final String domainName) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=securityfactory,subtype=ldap,*"); - } - - /** - * Return an objectName for all users in a resource. - * @param domainName the management domain name - * @param pResource the name of the resource on which the user depends - * @return an objectName for the user MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allUsers(final String domainName, final String pResource) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=users,resource=" - + pResource + ",*"); - } - - /** - * Return an objectName for all roles in a resource. - * @param domainName the management domain name - * @param pResource the name of the resource on which the role depends - * @return an objectName for the user MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allRoles(final String domainName, final String pResource) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=roles,resource=" - + pResource + ",*"); - } - - /** - * Return an objectName for all groups in a resource. - * @param domainName the management domain name - * @param pResource the name of the resource on which the group depends - * @return an objectName for the user MBean - * @throws MalformedObjectNameException if the objectname can't be build - */ - public static ObjectName allGroups(final String domainName, final String pResource) - throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=security,subtype=groups,resource=" - + pResource + ",*"); - } - - /** - * A different implementation should allow returning a logical name. - * This is done currently in the invoke method of ManagementReprImpl/Mx4jManagementReprImpl classes. - * @return String representation of the ObjectName - */ - @Override - public String toString() { - return super.toString(); - } - - /** - * @return ObjectName for discovery manager MBean - * @param domainName the management domain name - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName discoveryManager(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=management,name=discoveryManager,server=JOnAS"); - } - - /** - * @return ObjectName for Jgroups discovery manager MBean - * @param domainName the management domain name - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName jgroupsDiscoveryManager(final String domainName, final String discoveryType, final String srvName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=management,name=discoveryManager"+discoveryType+",server="+srvName); - } - - /** - * @return ObjectName for discovery client MBean - * @param domainName the management domain name - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName discoveryClient(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=management,name=discoveryClient,server=JOnAS"); - } - /** - * @return ObjectName for discovery enroller MBean - * @param domainName the management domain name - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName discoveryEnroller(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=management,name=discoveryEnroller,server=JOnAS"); - } - - /** - * @return ObjectName for ServerProxy MBean - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName serverProxy(final String domainName, final String serverName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=ServerProxy,name=" + serverName); - } - - /** - * @return ObjectName for ServerProxy MBean - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName serverProxys(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=ServerProxy,*"); - } - - /** - * Build an ObjectName for a Cluster defined by its type and its name. - * @param name Name of the Cluster - * @param type Type: JkCluster, TomcatCluster, JoramCluster, EjbHaCluster, CmiCluster, ... - * @return ObjectName for a Cluster - * @throws MalformedObjectNameException - */ - public static ObjectName cluster(final String domainName, final String name, final String type) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=" + type + ",name=" + name); - } - - /** - * Build an ObjectName for a Cluster defined by its type only. - * @param type Type: JkCluster, TomcatCluster, JoramCluster, EjbHaCluster, CmiCluster, ... - * @return ObjectName for a Cluster - * @throws MalformedObjectNameException - */ - public static ObjectName clusters(final String domainName, final String type) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=" + type + ",*"); - } - - /** - * Build an ObjectName for a ClusterMember. - * All ClusterMember have the same type, regardless the cluster type. - * @param name Name of the ClusterMember - * @param type type of the cluster (ex: JkCluster or TomcatCluster) - * @param cluster Name of the Cluster - * @return ObjectName for a ClusterMember - * @throws MalformedObjectNameException - */ - public static ObjectName clusterMember(final String domainName, final String name, final String type, final String cluster) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=" + type + "Member,name=" + name + "," + type + "=" + cluster); - } - - public static ObjectName clusterDaemon(final String domainName) throws Exception { - return ObjectName.getInstance(domainName + ":type=ClusterDaemon"); - } - - /** - * @param name name of the ClusterDaemon - * @return - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName clusterDaemonProxy(final String domainName, final String name) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=ClusterDaemonProxy,name=" + name); - } - - /** - * @param name name of the ClusterDaemon - * @return - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName clusterDaemonProxys(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=ClusterDaemonProxy,*"); - } - - /** - * @param domainName the management domain name - * @return ObjectName for the generic archive configurationMBean - */ - public static ObjectName ArchiveConfig(final String domainName) { - try { - return new ObjectName(":type=archiveConfig,name=ArchiveConfigMBean"); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName the management domain name - * @return ObjectName for RAR specific archive configuration MBean - */ - public static ObjectName RarConfig(final String domainName) { - try { - return new ObjectName(":type=archiveConfig,name=RarConfigMBean"); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param domainName - * @return - * @throws MalformedObjectNameException - */ - public static ObjectName jgroupsDiscoveryCommManager(final String domainName, final String discoveryType, final String srvName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=management,name=discoveryCommManager"+discoveryType+",server="+srvName); - } - - /** - * Build an ObjectName for the CMIClient MBean. - * @param domainName the management domain name - * @param serverName the managed server - * @return ObjectName for a CMIClient - * @throws MalformedObjectNameException if an ObjectName cannot be created with the given String - */ - public static ObjectName cmiClient(final String domainName, final String serverName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=cmi,name=CMIClient,J2EEServer=" + serverName); - } - - /** - * Build an ObjectName for the CMIServer MBean. - * @param domainName the management domain name - * @param serverName the managed server - * @return ObjectName for a CMIServer - * @throws MalformedObjectNameException if an ObjectName cannot be created with the given String - */ - public static ObjectName cmiServer(final String domainName, final String serverName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName + ":type=cmi,name=CMIServer,J2EEServer=" + serverName); - } - - /** - * Build an ObjectName for the Repository MBean. - * @param domainName the management domain name - * @return ObjectName for a Repository Service - * @throws MalformedObjectNameException if an ObjectName cannot be created with the given String - */ - public static ObjectName repository(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName +":type=deployment,name=repository"); - } - - /** - * Build an ObjectName for the DeploymentPlan MBean. - * @param domainName the management domain name - * @return ObjectName for a deploymentPlan Service - * @throws MalformedObjectNameException if an ObjectName cannot be created with the given String - */ - public static ObjectName deploymentPlan(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName +":type=deployment,name=deploymentPlan"); - } - - - /** - * Build an ObjectName for the ResourceMonitor MBean. - * @param domainName the management domain name - * @return ObjectName for a resource monitor Service - * @throws MalformedObjectNameException if an ObjectName cannot be created with the given String - */ - public static ObjectName resourceMonitor(final String domainName) throws MalformedObjectNameException { - return ObjectName.getInstance(domainName +":type=deployment,name=resourceMonitor"); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JoramObjectName.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JoramObjectName.java deleted file mode 100644 index bb85662ab0..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/JoramObjectName.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -/** - * A set of static methods used to build the names of proprietary MBeans used in Joram. - * @author Adriana Danes - */ -public class JoramObjectName { - - /** - * JORAM MOM Domain. - */ - static final String JORAM_DOMAIN = "Joram"; - - /** - * JORAM Client Domain. - */ - static final String JORAM_CLIENT_DOMAIN = "joramClient"; - - /** - * JORAM Adapter domain - */ - public static final String JORAM_ADAPTER_DOMAIN = "JoramAdapter"; - - /** - * @return Returns an ObjectName pattern for JORAM Client MBeans. - * @throws MalformedObjectNameException Could not create {@link ObjectName} - */ - public static ObjectName joramClientMBeans() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":*"); - } - - /** - * @return ObjectName for the current JoramAdapter MBean - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramAdapter() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_ADAPTER_DOMAIN + "#ra:type=JoramAdapter"); - //return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=JoramAdapter"); - } - - /** - * Create ObjectName for a Joram managed queue. - * @param name queue name - * @return ObjectName for a Joram managed queue - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramQueue(final String name) throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Queue,name=" + name); - } - - /** - * Create ObjectName for all Joram managed queues - * @return ObjectName for a Joram managed queue - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramQueues() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Queue,*"); - } - - /** - * Create ObjectName for a Joram managed dead message queue. - * @param name queue name - * @return ObjectName for a Joram managed dead message queue - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramDmQueue(final String name) throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Queue.dmq,name=" + name); - } - /** - * Create ObjectName for all Joram managed dead message queues - * @return ObjectName for a Joram managed dead message queue - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramDmQueues() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Queue.dmq,*"); - } - - /** - * Create ObjectName for a Joram managed topic - * @param name topic name - * @return ObjectName for a Joram managed topic - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramTopic(final String name) throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Topic,name=" + name); - } - - /** - * Create ObjectName for all Joram managed topics - * @return ObjectName for a Joram managed topic - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramTopics() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=Topic,*"); - } - - /** - * Create ObjectName for a Joram managed user - * @param name user name - * @return ObjectName for a Joram managed user - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramUser(final String name) throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=User,name=" + name); - } - - /** - * Create ObjectName for all Joram managed users - * @return ObjectName for a Joram managed user - * @exception MalformedObjectNameException Could not create ObjectName with the given String - */ - public static ObjectName joramUsers() throws MalformedObjectNameException { - return ObjectName.getInstance(JORAM_CLIENT_DOMAIN + ":type=User,*"); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Log.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Log.java deleted file mode 100644 index f686337128..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/Log.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.Enumeration; -import java.util.List; -import java.util.Properties; - -import org.objectweb.util.monolog.Monolog; -import org.objectweb.util.monolog.api.Handler; -import org.objectweb.util.monolog.api.HandlerFactory; -import org.objectweb.util.monolog.api.Level; -import org.objectweb.util.monolog.api.LevelFactory; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.LoggerFactory; -import org.objectweb.util.monolog.api.MonologFactory; -import org.objectweb.util.monolog.file.DottedStringTools; -import org.objectweb.util.monolog.file.monolog.PropertiesConfAccess; -import org.objectweb.util.monolog.wrapper.printwriter.PrintWriterImpl; -import org.ow2.jonas.lib.bootstrap.JProp; - -/** - * This class provides utility method for using Monolog. - * @author Philippe Coq. - * @author Sebastien Chassande-Barrioz sebastien.chassande@inrialpes.fr - * @author Philippe Durieux - * @author Florent Benoit & Ludovic Bert - * @author Adriana Danes : change MBean implementation model from inheritance to delegation - */ -public class Log { - - /** - * name of the config file - initialized by the configure method. - */ - private static String configFile = "trace"; - - /** - * This class is actually a wrapper on the unique loggerFactory - */ - private static LoggerFactory lf = null; - - /** - * Properties used for Logging system. - * Kept here mainly for debugging - */ - private static Properties props = null; - - /** - * Config file name for the Logging system. - */ - private static String configFileName = null; - - // List of topic used inside JOnAS - // This list may be not exhaustive since many topics can be added for - // different purposes or to refine debugging. - // To get the complete list, use "jonas admin -t" - public static final String JONAS_ADMIN_PREFIX = "org.ow2.jonas.admin"; - public static final String JONAS_BOOTSTRAP_PREFIX = "org.ow2.jonas.bootstrap"; - public static final String JONAS_CLUSTER_DAEMON = "org.ow2.jonas.cluster.daemon"; - public static final String JONAS_DB_PREFIX = "org.ow2.jonas.db"; - public static final String JONAS_DBM_PREFIX = "org.ow2.jonas.dbm"; - public static final String JONAS_DEPLOY_PREFIX = "org.ow2.jonas.deployment"; - public static final String JONAS_DISCOVERY_PREFIX = "org.ow2.jonas.discovery"; - public static final String JONAS_EAR_PREFIX = "org.ow2.jonas.ear"; - public static final String JONAS_EJB_PREFIX = "org.ow2.jonas.ejb"; - public static final String SPY_LOGGER_NAME = "org.ow2.jonas.ee.jdbc.sql"; - public static final String JONAS_JAXR_PREFIX = "org.ow2.jonas.ee.scout"; - public static final String JONAS_GENBASE_PREFIX = "org.ow2.jonas.generators.genbase"; - public static final String JONAS_GENIC_PREFIX = "org.ow2.jonas.generators.genic"; - public static final String JONAS_GENIC_VELOCITY_PREFIX = "org.ow2.jonas.generators.genic.velocity"; - public static final String JONAS_WSGEN_PREFIX = "org.ow2.jonas.generators.wsgen"; - public static final String JONAS_WSGEN_EWS_PREFIX = "org.ow2.jonas.generators.wsgen.ews"; - public static final String JONAS_JCA_PREFIX = "org.ow2.jonas.jca"; - public static final String JONAS_JMX_PREFIX = "org.ow2.jonas.jmx"; - public static final String JONAS_WORK_MGR_PREFIX = "org.ow2.jonas.lib.work"; - public static final String JONAS_LOADER_PREFIX = "org.ow2.jonas.loader"; - public static final String JONAS_MAIL_PREFIX = "org.ow2.jonas.mail"; - public static final String JONAS_MANAGEMENT_PREFIX = "org.ow2.jonas.management"; - public static final String JONAS_MANAGEMENT_EVENT_PREFIX = "org.ow2.jonas.management.event"; - public static final String JONAS_NAMING_PREFIX = "org.ow2.jonas.naming"; - public static final String JONAS_PROPCTX_PREFIX = "org.ow2.jonas.propagation"; - public static final String JONAS_REGISTRY_PREFIX = "org.ow2.jonas.registry"; - public static final String JONAS_SECURITY_PREFIX = "org.ow2.jonas.security"; - public static final String JONAS_CSIV2_SECURITY_PREFIX = "org.ow2.jonas.security.csiv2"; - public static final String JONAS_CSIV2_DETAILS_SECURITY_PREFIX = "org.ow2.jonas.security.csiv2_details"; - public static final String JONAS_JACC_SECURITY_PREFIX = "org.ow2.jonas.security.jacc"; - public static final String JONAS_WS_SECURITY_PREFIX = "org.ow2.jonas.security.ws"; - public static final String JONAS_SERVER_PREFIX = "org.ow2.jonas.server"; - public static final String JONAS_WEB_PREFIX = "org.ow2.jonas.web"; - public static final String JONAS_DEPLOY_WORK_PREFIX = "org.ow2.jonas.work"; - public static final String JONAS_TESTS_PREFIX = "org.ow2.jonas_tests"; - - /** - * Output tag for the handler - */ - private static final String HANDLER_OUTPUT_ATTRIBUTE = "output"; - - /** - * Output tag which must be replaced by JOnAS - */ - private static final String AUTOMATIC_CONFIG = "automatic"; - - /** - * Directory for the logs $JONAS_BASE/logs - */ - private static final String LOG_DIRECTORY = "logs"; - - /** - * Format of a timestamp log. - */ - private static final String TIMESTAMP_FORMAT = "-yyyy-MM-dd"; - - /** - * Suffix of a log file. - */ - private static final String SUFFIX_LOGFILE = "log"; - - /** - * Default logger factory - */ - private static final String DEFAULT_LOGGERFACTORY = "org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory"; - - /** - * Is in ClientContainer ? - */ - private static boolean clientcontainer = false; - - /** - * JProp fully qualified Classname - */ - private static final String JPROP_CLASSNAME = "org.ow2.jonas.lib.bootstrap.JProp"; - - /** - * Default Private Constructor for utility classes - */ - private Log() { } - - /** - * Configure Logger. - * @param file The configuration file for monolog (usually: trace.properties) - */ - public static void configure(final String file) { - configFile = file; - getLoggerFactory(); - if (!clientcontainer) { - // TODO find a good place for this initialization - // to allow using Monolog when want traces of P6Spy usage in SQL requests - //P6SpyLogger.logger = lf.getLogger(SPY_LOGGER_NAME); - // ----------- - // Comment out call until JONAS uses Log4j - // TraceTm.configure(lf); - } - } - - - - /** - * Use a Monolog class ? - */ - private static String JMX_HANDLER_TYPE = "jmx"; - - /** - * @return a jmx handler. If several, return the first one. - * If none, return null; - */ - public static Handler getJmxHandler() { - Handler[] handlers = Monolog.getMonologFactory().getHandlers(); - for (int i = 0; i < handlers.length; i++) { - Handler handler = handlers[i]; - if (handler.getType().equals(JMX_HANDLER_TYPE)) { - return handler; - } - } - return null; - } - - /** - * Return a given Monolog handler - * @param handlerName the name of the handler - * @return the corresponding Monolog handler - */ - public static Handler getHandler(final String handlerName) { - Handler[] handlers = Monolog.getMonologFactory().getHandlers(); - for (int i = 0; i < handlers.length; i++) { - Handler handler = handlers[i]; - String handType = handler.getType(); - String handName = handler.getName(); - String[] attNames = handler.getAttributeNames(); - } - return Monolog.getMonologFactory().getHandler(handlerName); - - } - - /** - * It returns the unique LoggerFactory used in JOnAS. - * initialize it if not already done. - * @return the unique LoggerFactory used in JOnAS. - */ - public static synchronized LoggerFactory getLoggerFactory() { - if (lf == null) { - try { - // Detect client case = no JONAS_BASE - if (isClient()) { - clientcontainer = true; - InputStream is = null; - - // Is there a specific file to use instead the default name - String traceClient = System.getProperty("jonas.client.trace.file"); - if (traceClient != null) { - try { - is = new FileInputStream(new File(traceClient)); - } catch (FileNotFoundException fne) { - System.err.println("Can not init logger with the supplied file '" + traceClient + "'" + - ", this file doesn't exist. Init with default values."); - - } - } else { - //Client - //Is there a trace properties file in the classpath ? - is = Thread.currentThread().getContextClassLoader().getResourceAsStream("traceclient.properties"); - } - if (is == null) { - // no traceclient.properties found - // using a default configuration - props = new Properties(); - props.put("log.config.classname", DEFAULT_LOGGERFACTORY); - props.put("logger.root.level", "INFO"); - } else { - // use the configuration of the properties file. - props = new Properties(); - props.load(is); - } - lf = Monolog.getMonologFactory(props); - return lf; - } - // server case - // get jonas configuration properties - Object jProp = null; - try { - jProp = JProp.getInstance(); - // Run jonas - // Create a JProp object for the configFile - JProp.getInstance(configFile); - } catch (Exception e) { - System.err.println("Can't read jonas.properties. Check that you have defined a $JONAS_BASE variable"); - } - - - // load properties from config file - props = JProp.getInstance(configFile).getConfigFileEnv(); - configFileName = JProp.getInstance(configFile).getPropFileName(); - - String jonasBase = null; - String nameOfServer = null; - if (jProp != null) { - jonasBase = JProp.getJonasBase(); - nameOfServer = ((JProp) jProp).getValue("jonas.name", "jonas"); - } else { - // Set default - jonasBase = "."; - nameOfServer = "jonas"; - } - - // Before sending props, replace AUTOMATIC pattern by a file in $JONAS_BASE/logs/ - // File are named TIMESTAMP_FORMAT.SUFFIX_LOGFILE - File logDirFile = new File(jonasBase + File.separator + LOG_DIRECTORY); - - // Properties may be updated if AUTOMATIC_CONFIG is used - // Also, path to the log files are set by using a relative path to JONAS_BASE/logs - Properties updatedProps = (Properties) props.clone(); - - //Create a date format - SimpleDateFormat sdf = new SimpleDateFormat(TIMESTAMP_FORMAT); - String date = sdf.format(new Date()); - // How many AUTOMATIC field have been replaced - int nbAut = 0; - - File logFile = null; - // Handlers alredy updated - List handlersUpdated = new ArrayList(); - - - - for (Enumeration keys = props.keys(); keys.hasMoreElements();) { - String key = (String) keys.nextElement(); - if (key == null) { - continue; - } - - if (key.startsWith(PropertiesConfAccess.HANDLER_FIELD)) { - String temp = DottedStringTools.getFirst(key); - - if (temp == null) { - continue; - } - - temp = DottedStringTools.getEnd(key); - if (temp == null) { - continue; - } - - String handlerName = DottedStringTools.getBegin(temp); - - // handler already updated - if (handlersUpdated.contains(handlerName)) { - continue; - } - - // Add handler as handled - handlersUpdated.add(handlerName); - - // Now, get the type and output for the given handler - String stringType = props.getProperty(PropertiesConfAccess.HANDLER_FIELD + PropertiesConfAccess.DOT + handlerName + PropertiesConfAccess.DOT + PropertiesConfAccess.HANDLER_TYPE_ATTRIBUTE, null); - String stringOutput = props.getProperty(PropertiesConfAccess.HANDLER_FIELD + PropertiesConfAccess.DOT + handlerName + PropertiesConfAccess.DOT + HANDLER_OUTPUT_ATTRIBUTE, null); - // Got the type and the output - // --> Compare with the pattern AUTOMATIC_CONFIG for the FILE type. - if ((stringType != null) && (stringOutput != null)) { - if (PropertiesConfAccess.HANDLER_TYPE_ATTRIBUTE_FILE_VALUE.equalsIgnoreCase(stringType) - || (PropertiesConfAccess.HANDLER_TYPE_ATTRIBUTE_ROLLING_FILE_VALUE.equalsIgnoreCase(stringType))) { - if (stringOutput.equalsIgnoreCase(AUTOMATIC_CONFIG)) { - // OK, it's match - String fileName = null; - - if (nbAut > 0) { - // Add an unique entry by adding nbAut value. - fileName = nameOfServer + date + PropertiesConfAccess.DOT + nbAut + PropertiesConfAccess.DOT + SUFFIX_LOGFILE; - } else { - fileName = nameOfServer + date + PropertiesConfAccess.DOT + SUFFIX_LOGFILE; - } - - // Create the directory if it doesn't exists - if (!logDirFile.exists()) { - logDirFile.mkdirs(); - } - logFile = new File(logDirFile, fileName); - - updatedProps.setProperty(PropertiesConfAccess.HANDLER_FIELD + PropertiesConfAccess.DOT + handlerName + PropertiesConfAccess.DOT + HANDLER_OUTPUT_ATTRIBUTE, logFile.getPath()); - nbAut++; - - } - else { - // not automatic -- change relative file name to be relative to JONAS_BASE/logs - logFile = new File(stringOutput); - if (!logFile.isAbsolute()) { - // file name is relative so try to create in JONAS_BASE/logs - // Create the directory if it doesn't exists - if (!logDirFile.exists()) { - logDirFile.mkdirs(); - } - logFile = new File(logDirFile, stringOutput); - if (stringOutput.endsWith(".automatic") || - stringOutput.endsWith(".auto")) { - nbAut++; - String autoStr = logFile.getPath().substring(0, logFile.getPath().lastIndexOf('.')) + date + - PropertiesConfAccess.DOT + nbAut + PropertiesConfAccess.DOT + SUFFIX_LOGFILE; - logFile = new File(autoStr); - } - updatedProps.setProperty(PropertiesConfAccess.HANDLER_FIELD + PropertiesConfAccess.DOT + handlerName + PropertiesConfAccess.DOT + HANDLER_OUTPUT_ATTRIBUTE, logFile.getPath()); - } else { - File logFileParent = logFile.getParentFile(); - if (!logFileParent.exists()) { - logFileParent.mkdirs(); - } - } - } - } - } - } - } - - // Instanciate the LoggerFactory - String b = props.getProperty("log.config.classname", null); - if (b == null) { - System.err.println("Malformed configuration log file: log.config.classname not available"); - return null; - } - lf = (LoggerFactory) Class.forName(b).newInstance(); - - // Configure the LoggerFactory with the updated properties - PropertiesConfAccess.load(updatedProps, lf, (HandlerFactory) lf, (LevelFactory) lf); - - //Register the monolog factory in Monolog - Monolog.monologFactory = (MonologFactory) lf; - } catch (Exception e) { - System.err.println("Cannot get LoggerFactory:" + e); - e.printStackTrace(); - } - } - return lf; - } - - /** - * @return Returns true if we are in a client context - */ - private static boolean isClient() { - boolean hasJonasBase = System.getProperty("jonas.base") != null; - boolean hasJonasRoot = System.getProperty("jonas.root") != null; - boolean hasJProp = true; - try { - Log.class.getClassLoader().loadClass(JPROP_CLASSNAME); - } catch (ClassNotFoundException cnfe) { - hasJProp = false; - } - // a server has the 3 params, all other case are clients case - return !(hasJProp && hasJonasBase && hasJonasRoot); - } - - /** - * Reset logger factory - */ - public static void reset() { - lf = null; - } - - /** - * Returns the standard PrintWriter associated to the logger defined by - * its topic. - * This is mainly used for DBM and Connectors. - */ - public static PrintWriter getLogWriter(final String topic) { - // TODO : should not create a new object at each call - return new PrintWriterImpl(getLogger(topic), getLoggerFactory()); - } - - /** - * Shortcut that returns the LevelFactory - */ - public static LevelFactory getLevelFactory() { - return (LevelFactory) getLoggerFactory(); - } - - /** - * Shortcut to get the Logger by its topic name. - * @param topic the topic of the returned logger - * @return always a logger instance (never null value). - */ - public static Logger getLogger(final String topic) { - return getLoggerFactory().getLogger(topic); - } - - public static Properties getProperties() { - return props; - } - - public static String getConfigFileName() { - return configFileName; - } - - public static void setConfigFileName(final String configFileName) { - Log.configFileName = configFileName; - } - - /** - * Set the given log level to the specified logger. - * @param loggerName name of the loger to be configured - * @param level target level - * @return the previous level of the logger - */ - public static Level setComponentLogLevel(final String loggerName, - final Level level) { - Logger log = Log.getLogger(loggerName); - Level old = log.getCurrentLevel(); - log.setLevel(level); - return old; - } - - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ModuleNamingUtils.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ModuleNamingUtils.java deleted file mode 100644 index f6800bcd99..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/ModuleNamingUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.io.File; -import java.net.URL; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Utility class to build J2eeApplicationNames. - * @Deprecated Use Deployable.getModuleName() instead - */ -@Deprecated -public class ModuleNamingUtils { - - private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX); - - /** - * Build the J2EEApplication name. - * @param pUrl The URL of Ear file - * @return The J2EEApplication name - */ - public static String fromURL(final URL pUrl) { - String sName = null; - try { - sName = new File(pUrl.getFile()).getName(); - if ("file".equals(pUrl.getProtocol())) { - sName = fromFileName(sName); - } - } catch (NullPointerException e) { - logger.log(BasicLevel.DEBUG, "Can't build j2ee application", e); - } - return sName; - } - - /** - * Build the J2EEApplication name. - * @param pFilename The name of Ear file - * @return The J2EEApplication name - */ - public static String fromFileName(final String pFilename) { - String sName = null; - try { - sName = new File(pFilename).getName(); - int iPos = sName.lastIndexOf('.'); - if (iPos > -1) { - sName = sName.substring(0, iPos); - } - } catch (NullPointerException e) { - logger.log(BasicLevel.DEBUG, "Can't build j2ee application : " + e); - } - return sName; - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/NetUtils.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/NetUtils.java deleted file mode 100644 index 870d9fe9b0..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/NetUtils.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.util; - -import java.net.Inet4Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.net.UnknownHostException; -import java.util.Enumeration; - -/** - * {@link NetUtils} is meant to provide routine network related information to - * components of JONAS. One of the main purposes is to allow the server to - * extract it's own IP address correctly. This addresses a bug in java when - * dealing with Linux boxes on DHCP trying to extract their own IP addresses and - * always getting the loop back address instead of the external one. - * - * @link http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4060691 - * - * @author Vivek Lakshmanan - */ -public class NetUtils { - - /** - * IPv4 Loop back address. - */ - public static final String LOOP_BACK_ADDR = "127.0.0.1"; - - /** - * Get the string form of the local IP address and not naively assume - * InetAddress.getLocalHost().getHostAddress() is the - * correct value. See the class description above for details. - * - * @return A string representing the IPv4 localhost IP address. - * @throws UnknownHostException - */ - public static String getLocalAddress() throws UnknownHostException { - - InetAddress localhost = InetAddress.getLocalHost(); - // Check if the value of the localhost address is a loop back address. - if (localhost.getHostAddress().equals(LOOP_BACK_ADDR)) { - // If so, try to find a non-loop back address (IPv4 only) - try { - NetworkInterface inter = null; - InetAddress addr = null; - // Get all network interfaces on this machine. - Enumeration networkEnum = NetworkInterface.getNetworkInterfaces(); - while (networkEnum.hasMoreElements()) { - inter = (NetworkInterface) networkEnum.nextElement(); - Enumeration enumAddr = inter.getInetAddresses(); - // Check all addresses for this interface. - while (enumAddr.hasMoreElements()) { - addr = (InetAddress) enumAddr.nextElement(); - // Check only IP v4 addresses. - if (addr instanceof Inet4Address) { - if (!addr.isLoopbackAddress()) { - // Found a non-loop back address so return it. - return addr.getHostAddress(); - } - } - - } - } - - // No non-loop back IP v4 addresses found so return loop back - // address. - return localhost.getHostAddress(); - - } catch (SocketException e) { - return localhost.getHostAddress(); - } - } else { - // Got a non-loop back address so return it. - return localhost.getHostAddress(); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/PropDump.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/PropDump.java deleted file mode 100644 index cf1e544795..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/PropDump.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.util; - -import java.util.Enumeration; -import java.util.Properties; -import org.objectweb.util.monolog.api.Logger; - -/** - * Used to print out properties - */ -public class PropDump { - - /** - * Prints out the {@link Properties}. - * @param header Display header - * @param props Properties to be printed - * @param logger {@link Logger} to use - * @param logLevel Log level - */ - public static void print(final String header, - final Properties props, - final Logger logger, - final int logLevel) { - - logger.log(logLevel, header); - logger.log(logLevel, "================================="); - String aName = null; - String aValue = null; - for (Enumeration pNames = props.propertyNames(); pNames.hasMoreElements();) { - aName = (String) pNames.nextElement(); - aValue = (String) props.getProperty(aName); - if (aValue != null) { - logger.log(logLevel, aName + " = " + aValue); - } - } - logger.log(logLevel, "================================="); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/XMLSerializer.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/XMLSerializer.java deleted file mode 100644 index b312cc490e..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/util/XMLSerializer.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.util; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.Writer; - -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.bootstrap.DOMImplementationRegistry; -import org.w3c.dom.ls.DOMImplementationLS; -import org.w3c.dom.ls.LSOutput; -import org.w3c.dom.ls.LSSerializer; - - -/** - * Serialize a given DOM Document. - * Handle namespaces nicely. - * - * @author Guillaume Sauthier - */ -public class XMLSerializer { - - /** - * Default Line separator (unix). - */ - private static final String DEF_LINE_SEP = "\n"; - - /** - * Document to be formated and serialized - */ - private Document doc; - - /** - * DOM L3 Serializer. - */ - private LSSerializer serializer; - - /** - * DOM L3 output. - */ - private LSOutput output; - - /** - * Creates a new XMLSerializer object. - * @param doc Document to be serialized - */ - public XMLSerializer(Document doc) { - // Store the ref - this.doc = doc; - - // Create the LSSerializer and LSOutput instances - DOMImplementationRegistry registry; - try { - registry = DOMImplementationRegistry.newInstance(); - } catch (Exception e) { - throw new RuntimeException("Cannot get the system DOMImplementationRegistry", e); - } - DOMImplementation impl = registry.getDOMImplementation("LS 3.0"); - DOMImplementationLS factory = (DOMImplementationLS) impl; - - // Define the format for the xml document - serializer = factory.createLSSerializer(); - serializer.setNewLine(DEF_LINE_SEP); - output = factory.createLSOutput(); - output.setEncoding("UTF-8"); - - //DOMConfiguration dc = serializer.getDomConfig(); - //dc.setParameter("format-pretty-print", Boolean.TRUE); - //dc.setParameter("schema-type", "http://www.w3.org/2001/XMLSchema"); - - } - - /** - * Serialize the encapsulated Document into the OutputStream - * - * @param os output stream - * - * @throws IOException When serialization fails - */ - public void serialize(OutputStream os) throws IOException { - output.setByteStream(os); - serialize(); - } - - /** - * Serialize the encapsulated Document into the Writer - * - * @param writer writer - * - * @throws IOException When serialization fails - */ - public void serialize(Writer writer) throws IOException { - output.setCharacterStream(writer); - serialize(); - } - - /** - * Serialize the wrapped Document. - */ - private void serialize() { - serializer.write(doc, output); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/windows/WinSysEnv.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/windows/WinSysEnv.java deleted file mode 100644 index 36c1ffb22c..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/windows/WinSysEnv.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Francois Waeselynck - * Contributor(s): Benoit Pelletier - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.windows; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -//import java.util.Iterator; -import java.util.Properties; - -import org.ow2.jonas.lib.util.Log; -//import java.util.Map.Entry; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class provides some utilities for the windows environment - */ -public class WinSysEnv { - - /** - * Maintains an image of the environment - */ - private static Properties env = null; - - /** - * Logger - */ - private static Logger logger = Log.getLogger(WinSysEnv.class.getName()); - - - /** - * Get a variable from the windows env - * @param var variable name - * @return the variable value - */ - public static String get(String var) { - if (env == null) load(); - String value = null; - if (env != null) value = (String) env.getProperty(var); - return value; - } - - /** - * Get the windows env - * @return properties - */ - public static Properties getEnv() { - if (env == null) load(); - return env; - } - - /** - * Get the windows environment - * - */ - private static void load() { - - if (env == null) { - Properties props = new Properties(); - Runtime rt = Runtime.getRuntime(); - Process proc = null; - try { - proc = rt.exec("cmd /c SET"); - BufferedReader r = new BufferedReader(new InputStreamReader( - proc.getInputStream())); - String ln = null; - while ((ln = r.readLine()) != null) { - //System.out.println(ln); - int ix = ln.indexOf("="); - props.setProperty(ln.substring(0, ix), ln.substring(ix + 1)); - } - if (proc != null) - proc.waitFor(); - } catch (IOException e1) { - logger.log(BasicLevel.ERROR, "Cannot get System environment : " + e1); - } catch (InterruptedException e) { - // Do nothing - } - env = props; - } - } - - /** - * main - * For test purposes - * @param args - */ - /* - public static void main(String[] args) { - - Properties props = System.getProperties(); - - // props.list(System.out); - - Iterator it = props.entrySet().iterator(); - while (it.hasNext()) { - Entry p = (Entry) it.next(); - System.out.println(p.getKey() + "=" + p.getValue()); - - } - System.out.println("\n=========\nWinSysEnv\n========="); - System.out.println("SystemRoot="+WinSysEnv.get("SystemRoot")); - props = WinSysEnv.getEnv(); - it = props.entrySet().iterator(); - while (it.hasNext()) { - Entry p = (Entry) it.next(); - System.out.println(p.getKey() + "=" + p.getValue()); - } - } - */ - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsCleanTask.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsCleanTask.java deleted file mode 100644 index 78747d3c0c..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsCleanTask.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Benoit PELLETIER - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.work; - -import java.io.File; -import java.util.Enumeration; -import java.util.Vector; - -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Abstract Clean Task class which define a generic job executed by the cleaner thread. - * @author Benoit PELLETIER - */ -public abstract class AbsCleanTask implements CleanTask { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(AbsCleanTask.class); - - /** - * Default constructor : Construct a new cleaner. - */ - protected AbsCleanTask() { - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException If it fails - */ - protected abstract boolean isDeployedLogEntry(LogEntry logEntry) throws WorkCleanerException; - - /** - * Returns the {@link IDeployerLog} of the task. - * @return The DeployerLog of the task - */ - public abstract IDeployerLog getDeployerLog(); - - /** - * Return true if the work copy exists and is up to date. - * @param logEntry entry in a deploy log - * @return true if the work copy exists and is up to date - * @throws WorkCleanerException if it fails - */ - public boolean isValidLogEntry(final LogEntry logEntry) throws WorkCleanerException { - String lastModifiedFileName = null; - File logEntryFile = logEntry.getOriginal(); - String logEntryUnpackedDir = logEntry.getCopy().getName(); - - logger.debug("LogEntry <" + logEntryFile.getName() + "> exists :" + logEntryFile.exists()); - - // If the file doesn't exist, return - if (!logEntryFile.exists()) { - return false; - } - - // Get the file name containing the last modification date - try { - lastModifiedFileName = FileUtils.lastModifiedFileName(logEntryFile); - } catch (FileUtilsException e) { - logger.error("Cannot retrieve the working file name for the deployable '{0}'", logEntryFile); - } - - logger.debug("LogEntry lastModificationFileName :" + lastModifiedFileName); - logger.debug("LogEntry isValid :" + lastModifiedFileName.equalsIgnoreCase(logEntryUnpackedDir)); - - // Compare the two file names - return (lastModifiedFileName.equalsIgnoreCase(logEntryUnpackedDir)); - - } - - /** - * Run the clean task. - * @throws WorkCleanerException if it failed. - */ - public void execute() throws WorkCleanerException { - logger.debug("Execute called"); - - // Get the entries from the logger - Vector logEntries = getLogEntries(); - - // Check if the files in this vector exists - LogEntry logEntry = null; - - for (Enumeration e = logEntries.elements(); e.hasMoreElements();) { - logEntry = e.nextElement(); - logger.debug("LogEntry <" + logEntry.getOriginal().getName() + "," + logEntry.getCopy().getName() + ">"); - - // If the package is deployed, do nothing - if (isDeployedLogEntry(logEntry)) { - logger.debug("LogEntry currently deployed - > do nothing"); - continue; - } - - // If the source package file doesn't exists anymore or if the file is present but don't care the right last - // modification date - if (!isValidLogEntry(logEntry)) { - - // We try to remove the entry - if (removeLogEntry(logEntry)) { - // Enumeration is now inconsistent, so we 're restarting the loop - e = logEntries.elements(); - } - } - // Else last modification dates always the same - } - } - - /** - * Remove the work copy specified in the log entry and the log entry. - * @param logEntry entry in a deploy log - * @return true if the log entry has been removed successfully - * @throws WorkCleanerException if it fails - */ - public boolean removeLogEntry(final LogEntry logEntry) throws WorkCleanerException { - if (FileUtils.delete(logEntry.getCopy())) { - try { - getDeployerLog().removeEntry(logEntry); - return true; - } catch (DeployerLogException edle) { - throw new WorkCleanerException("Can't remove an entry" + edle.getMessage()); - } - } - return false; - } - - /** - * Gets the log entries. - * @return the log entries - */ - public Vector getLogEntries() { - return getDeployerLog().getEntries(); - } - - /** - * Get logger. - * @return the logger - */ - protected Log getLogger() { - return logger; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsDeployerLog.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsDeployerLog.java deleted file mode 100644 index b44adf89f7..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/AbsDeployerLog.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.lib.work; - -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import java.io.File; -import java.util.Vector; - -/** - * Abstract class for deployer log - * @author Jeremy Cazaux - */ -public abstract class AbsDeployerLog implements IDeployerLog { - - /** - * The logger. - */ - protected Log logger = LogFactory.getLog(AbsDeployerLog.class); - - /** - * Separator char of a entry in the log file. - */ - protected static final String SEPARATOR_ENTRY = ";"; - - /** - * File for logging. - */ - protected File logFile; - - /** - * The current entries of the logFile. - */ - protected Vector logEntries = null; - - /** - * Constructor for the deployerLog. - * @param logFile the file which is used for read/write entries - * @throws DeployerLogException if the loadentries failed. - */ - public AbsDeployerLog(final File logFile) throws DeployerLogException { - logger.debug("logfile=" + logFile.getName()); - - this.logFile = logFile; - logEntries = new Vector(); - loadEntries(); - } - - /** - * @return the logger - */ - protected Log getLogger() { - return logger; - } - - /** - * load the entries of the log file. - * @throws DeployerLogException if the load failed. - */ - protected abstract void loadEntries() throws DeployerLogException; - - /** - * Dump(save) the entries to the log file. - * @throws DeployerLogException if the save failed. - */ - protected abstract void saveEntries() throws DeployerLogException; - - /** - * Return the entries of the file. - * @return a vector of LogEntry item. - */ - public synchronized Vector getEntries() { - return logEntries; - } - - /** - * Remove the given entry and return the entries of the file. - * @param entry the LogEntry which must be remove. - * @return the new vector of LogEntry item. - * @throws DeployerLogException if the remove can't be done - */ - public synchronized Vector removeEntry(final T entry) throws DeployerLogException { - if (logEntries == null) { - throw new DeployerLogException("Can not remove a entry, the vector is null"); - } - - if (!logEntries.contains(entry)) { - throw new DeployerLogException("Can not remove entry " + entry + ". There is no such entry"); - } - - //remove can be done - logEntries.remove(entry); - - //write to the file. - saveEntries(); - - //return the new vector - return logEntries; - } - - /** - * Add the entry and return the new entries. - * @param logEntry the entry to add - * @throws DeployerLogException if the add can't be done - */ - public abstract Vector addEntry(T logEntry) throws DeployerLogException; - - /** - * @param original Original File - * @return the entry which match with the orginal file - */ - public abstract T getEntry(File original); - -} diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/DeployerLog.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/DeployerLog.java deleted file mode 100644 index cc950ebf07..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/DeployerLog.java +++ /dev/null @@ -1,219 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.work; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Enumeration; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.LogEntry; - -/** - * Class which permits to store or load the association between the name of a package and the timestamped work copy associated. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class DeployerLog extends AbsDeployerLog { - - /** - * Constructor for the deployerLog. - * @param logFile the file which is used for read/write entries - * @throws DeployerLogException if the loadentries failed. - */ - public DeployerLog(final File logFile) throws DeployerLogException { - super(logFile); - } - - /** - * load the entries of the log file. - * @throws DeployerLogException if the load failed. - */ - protected synchronized void loadEntries() throws DeployerLogException { - - BufferedReader br = null; - try { - br = new BufferedReader(new FileReader(logFile)); - } catch (FileNotFoundException e) { - throw new DeployerLogException("Can not read the " + logFile + " file"); - } - String line = null; - - String field = null; - File originalField = null; - File copyField = null; - StringTokenizer st = null; - - try { - //Read the text file - while ((line = br.readLine()) != null) { - - //parse the String - st = new StringTokenizer(line, SEPARATOR_ENTRY); - field = st.nextToken(); - if (field == null) { - throw new DeployerLogException("Inconsistent line in the file " + logFile); - } - originalField = new File(field); - - field = st.nextToken(); - if (field == null) { - throw new DeployerLogException("Inconsistent line in the file " + logFile); - } - - copyField = new File(field); - - logger.debug("Entry[originalField=" + originalField + ",copyField=" + copyField + "]"); - logEntries.add(new LogEntryImpl(originalField, copyField)); - } - // Close the input stream - br.close(); - } catch (IOException ioe) { - throw new DeployerLogException("Error while reading the log file " + logFile + " :" + ioe.getMessage()); - } - } - - /** - * Dump(save) the entries to the log file. - * @throws DeployerLogException if the save failed. - */ - protected synchronized void saveEntries() throws DeployerLogException { - - PrintWriter pw = null; - try { - pw = new PrintWriter(new BufferedWriter(new FileWriter(logFile))); - } catch (IOException e) { - throw new DeployerLogException("Problem while trying to get an output stream for the " + logFile + " file"); - } - - LogEntry logEntry = null; - String original = null; - String copy = null; - String line = null; - for (Enumeration e = logEntries.elements(); e.hasMoreElements();) { - logEntry = e.nextElement(); - - //get the infos - - try { - original = logEntry.getOriginal().getCanonicalPath(); - copy = logEntry.getCopy().getCanonicalPath(); - } catch (IOException ioe) { - throw new DeployerLogException("Problem while trying to get files names "); - } - - //create the line - line = original + SEPARATOR_ENTRY + copy; - - //dump the line - pw.println(line); - } - // Close the stream - pw.close(); - } - - @Override - public Vector addEntry(LogEntry logEntry) throws DeployerLogException { - if (logEntries == null) { - throw new DeployerLogException("Can not add an entry, the vector is null"); - } - - //add only if it's not already present - File originalEntry = null; - File copyEntry = null; - - boolean found = false; - Enumeration e = logEntries.elements(); - - //add only if the entry is not found - while (e.hasMoreElements() && !found) { - LogEntry entry = e.nextElement(); - originalEntry = entry.getOriginal(); - copyEntry = entry.getCopy(); - - if (originalEntry.getPath().equals(logEntry.getOriginal().getPath()) - && copyEntry.getPath().equals(logEntry.getCopy().getPath())) { - found = true; - } - } - if (found) { - return logEntries; - } - - //add can be done - logEntries.add(logEntry); - - //write to the file. - saveEntries(); - - //return the new vector - return logEntries; - } - - /** - * Add the entry and return the new entries. - * @param original the name of the file - * @param copy the copy of the file - * @return the new vector of LogEntry item. - * @throws DeployerLogException if the add can't be done - */ - public synchronized Vector addEntry(final File original, final File copy) throws DeployerLogException { - if (logEntries == null) { - throw new DeployerLogException("Can not add an entry, the vector is null"); - } - - //add only if it's not already present - LogEntry logEntry = new LogEntryImpl(original, copy); - - return addEntry(logEntry); - } - - /** - * @param original Original File - * @return the entry which match with the orginal file - */ - public LogEntry getEntry(File original) { - - for (LogEntry logEntry: this.logEntries) { - - if (logEntry.getOriginal().equals(original)) { - return logEntry; - } - } - - return null; - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/LogEntryImpl.java b/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/LogEntryImpl.java deleted file mode 100644 index a7fa3e3397..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/java/org/ow2/jonas/lib/work/LogEntryImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.lib.work; - -// import java -import java.io.File; - -import org.ow2.jonas.workcleaner.LogEntry; - -/** - * Class wich represent an entry in a log file : a original associate with its work copy. - * @author Florent Benoit - * @author Ludovic Bert - * @author Benoit PELLETIER - */ -public class LogEntryImpl implements LogEntry { - - /** - * The original file. - */ - private File original = null; - - /** - * The copy file / directory. - */ - private File copy = null; - - /** - * Constructor of a log entry. - * @param original the file to copy - * @param copy name of the copy - */ - public LogEntryImpl(final File original, final File copy) { - super(); - this.original = original; - this.copy = copy; - } - - /** - * Return the ear file of this ear log entry. - * @return the ear file of this ear log entry. - */ - public File getOriginal() { - return original; - } - - /** - * Return the unpacked directory. - * @return the unpacked directory. - */ - public File getCopy() { - return copy; - } - - //TODO add an equals method - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-commons/src/main/resources/META-INF/jonas-commons.bnd b/jonas/modules/libraries/jonas-commons/src/main/resources/META-INF/jonas-commons.bnd deleted file mode 100644 index 8df47153d8..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/resources/META-INF/jonas-commons.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.lib.* --exportcontents org.ow2.jonas.lib.mapping - -DynamicImport-Package * diff --git a/jonas/modules/libraries/jonas-commons/src/main/resources/metadata.xml b/jonas/modules/libraries/jonas-commons/src/main/resources/metadata.xml deleted file mode 100644 index df0ce8c501..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/resources/metadata.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/jonas/modules/libraries/jonas-commons/src/main/resources/org/ow2/jonas/lib/loader/mapping/classloader-default-filtering-mapping.xml b/jonas/modules/libraries/jonas-commons/src/main/resources/org/ow2/jonas/lib/loader/mapping/classloader-default-filtering-mapping.xml deleted file mode 100644 index e3a9edde1f..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/main/resources/org/ow2/jonas/lib/loader/mapping/classloader-default-filtering-mapping.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - filters - default-filters - - - - - diff --git a/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/cpmanager/JarListTestCase.java b/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/cpmanager/JarListTestCase.java deleted file mode 100644 index 5eb63f1e89..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/cpmanager/JarListTestCase.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.lib.cpmanager; - -import java.io.File; -import java.net.URL; - -import org.hamcrest.Matchers; -import org.ow2.util.url.URLUtils; -import org.testng.annotations.Test; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.*; - -public class JarListTestCase { - - @Test - public void testReferenceToMissingArchiveIsOmitted() throws Exception { - JarList list = new JarList(); - list.add("$$$$non-existent.jar"); - - String userDir = System.getProperty("user.dir"); - File userDirFile = new File(userDir); - URL userDirUrl = URLUtils.fileToURL(userDirFile); - URL[] urls = list.getURLs(userDirUrl.toExternalForm()); - - assertThat(urls, is(Matchers.notNullValue())); - assertThat(urls.length, is(equalTo(0))); - } - -} diff --git a/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/loader/FilteringClassLoaderTestCase.java b/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/loader/FilteringClassLoaderTestCase.java deleted file mode 100644 index 933b4fefb8..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/test/java/org/ow2/jonas/lib/loader/FilteringClassLoaderTestCase.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.lib.loader; - -import java.net.URL; - -import org.testng.Assert; -import org.testng.annotations.Test; - -/** - * A {@code FilteringClassLoaderTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class FilteringClassLoaderTestCase { - - private ClassLoader getParent() { - return FilteringClassLoaderTestCase.class.getClassLoader(); - } - - private URL getResource(final String name) { - return FilteringClassLoaderTestCase.class.getResource(name); - } - - @Test - public void testAdminCanForceDisabledFiltering() throws Exception { - FilteringClassLoader loader = new FilteringClassLoader(getParent()); - loader.setTransparent(false); - loader.setDefinitionUrl(getResource("/test-default-filters.xml")); - System.setProperty(FilteringClassLoader.DISABLE_FILTERING_PROPERTY_NAME, "true"); - - loader.start(); - - Assert.assertTrue(loader.isTransparent(), "ClassLoader is not transparent"); - - System.getProperties().remove(FilteringClassLoader.DISABLE_FILTERING_PROPERTY_NAME); - - } - - @Test - public void testXmlParsingWithDefaultFiltersDefinition() throws Exception { - FilteringClassLoader loader = new FilteringClassLoader(getParent()); - loader.setDefinitionUrl(getResource("/test-default-filters.xml")); - - loader.start(); - Assert.assertTrue(loader.getFilters().contains("the.system.filter.*"), - "ClassLoader has not the expected filtering content"); - } - - @Test - public void testXmlParsingWithFiltersDefinition() throws Exception { - FilteringClassLoader loader = new FilteringClassLoader(getParent()); - loader.setDefinitionUrl(getResource("/test-app-filters.xml")); - - loader.start(); - Assert.assertTrue(loader.getFilters().contains("my.app.filter.*"), - "ClassLoader has not the expected filtering content"); - } - - - @Test - public void testXmlParsingWithFiltersDefinitionAndWildcardForbidden() throws Exception { - FilteringClassLoader loader = new FilteringClassLoader(getParent()); - loader.setDefinitionUrl(getResource("/test-app-filters-wildcard-forbidden.xml")); - - loader.start(); - Assert.assertEquals(loader.getFilters().size(), 1, "* wildcard should have been removed"); - Assert.assertTrue(loader.getFilters().contains("library.*"), - "ClassLoader has not the expected filtering content"); - } -} diff --git a/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters-wildcard-forbidden.xml b/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters-wildcard-forbidden.xml deleted file mode 100644 index c43dd36d19..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters-wildcard-forbidden.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - * - library.* - - diff --git a/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters.xml b/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters.xml deleted file mode 100644 index 04b67a3aae..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/test/resources/test-app-filters.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - my.app.filter.* - - diff --git a/jonas/modules/libraries/jonas-commons/src/test/resources/test-default-filters.xml b/jonas/modules/libraries/jonas-commons/src/test/resources/test-default-filters.xml deleted file mode 100644 index 08c2807426..0000000000 --- a/jonas/modules/libraries/jonas-commons/src/test/resources/test-default-filters.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - the.system.filter.* - - diff --git a/jonas/modules/libraries/jonas-deployment/pom.xml b/jonas/modules/libraries/jonas-deployment/pom.xml deleted file mode 100644 index 7a5f18943c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/pom.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - org.ow2.jonas - jonas-libraries - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-deployment - bundle - JOnAS :: Libraries :: Deployment - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.carol - carol - provided - - - org.apache.axis - axis-jaxrpc - - - org.apache.geronimo.specs - geronimo-corba_2.3_spec - - - commons-digester - commons-digester - - - commons-beanutils - commons-beanutils - - - wsdl4j - wsdl4j - 1.6.1 - - - org.apache.tomcat - servlet-api - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-deployment-api - ${project.version} - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - org.ow2.bundles - ow2-util-ee-metadata-war-impl - - - org.ow2.bundles - ow2-util-ee-metadata-car-api - - - org.ow2.bundles - ow2-util-ee-metadata-common-api - - - org.ow2.bundles - ow2-util-ee-metadata-common-impl - - - org.ow2.bundles - ow2-util-ee-metadata-car-impl - - - xml-apis - xml-apis - 1.0.b2 - - - - org.ow2.easybeans - easybeans-api - - - org.ow2.easybeans - easybeans-deployment - - - org.ow2.easybeans - easybeans-util - - - org.ow2.easybeans - easybeans-asm - 3.0 - - - org.ow2.easybeans - easybeans-asm-commons - 3.0 - - - org.ow2.easybeans - easybeans-asm-tree - 3.0 - - - org.ow2.bundles - ow2-util-event-impl - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientDTDs.java deleted file mode 100644 index db9ac9e1f4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientDTDs.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - - -import org.ow2.jonas.deployment.common.CommonsDTDs; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of DTDs for application-client.xml and jonas-client.xml. - * @author Florent Benoit - */ -public class AppClientDTDs extends CommonsDTDs { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(AppClientDTDs.class); - - /** - * List of application-client dtds. - */ - private static final String[] APPCLIENT_DTDS = new String[] { - PACKAGE + "application-client_1_2.dtd", - PACKAGE + "application-client_1_3.dtd" - }; - - /** - * List of application-client publicId. - */ - private static final String[] APPCLIENT_DTDS_PUBLIC_ID = new String[] { - "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.2//EN", - "-//Sun Microsystems, Inc.//DTD J2EE Application Client 1.3//EN" - }; - - - - - /** - * Build a new object for web.xml DTDs handling. - */ - public AppClientDTDs() { - super(); - addMapping(APPCLIENT_DTDS, APPCLIENT_DTDS_PUBLIC_ID); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientSchemas.java deleted file mode 100644 index 9cb2bb7413..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/AppClientSchemas.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for appliation-client.xml and jonas-client.xml. - * @author Philippe Coq - */ -public class AppClientSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(AppClientSchemas.class); - - /** - * List of schemas used for application-client.xml. - */ - private static final String[] APPCLIENT_SCHEMAS = new String[] { - PACKAGE + "application-client_1_4.xsd", - PACKAGE + "application-client_5.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public AppClientSchemas() { - super(); - addSchemas(APPCLIENT_SCHEMAS); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDesc.java deleted file mode 100644 index a99b228c18..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDesc.java +++ /dev/null @@ -1,288 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - - -// import java -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.api.IMessageDestinationRefDesc; -import org.ow2.jonas.deployment.api.IPersistenceUnitRefDesc; -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.client.xml.ApplicationClient; -import org.ow2.jonas.deployment.client.xml.JonasClient; -import org.ow2.jonas.deployment.client.xml.JonasSecurity; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.JndiEnvRefsGroupDesc; -import org.ow2.util.ee.metadata.car.api.ICarDeployableMetadata; - - -/** - * This class do the parsing of the application-client.xml file and jonas-client.xml files and - * contruct a data structure associated to these two files. - * @author Florent Benoit - * @author Philippe Coq - */ -public class ClientContainerDeploymentDesc extends JndiEnvRefsGroupDesc { - - /** - * The name of the callback handler - */ - private String callbackHandler = null; - - /** - * The name of the jaas config file - */ - private String jaasFile = null; - - /** - * The name of the jaas entry - */ - private String jaasEntry = null; - - /** - * The username to use for the callback handler - */ - private String username = null; - - /** - * The password to use for the callback handler - */ - private String password = null; - - /** - * Xml content of the standard deployement descriptor file - */ - private String xmlContent = ""; - - /** - * Xml content of the JOnAS deployement descriptor file - */ - private String jonasXmlContent = ""; - - /** - * Application-Client archive metadatas. - */ - private ICarDeployableMetadata carDeployableMetadata; - - /** - * Construct an instance of a ClientContainerDeploymentDesc.
    - * Constructor is private, call one of the static getInstance - * method instead. - * @param classLoader the classloader for the classes. - * @param applicationClient the data structure of the application-client (application-client.xml) - * @param jonasClient the data structure of the jonas-client (jonas-client.xml) - * @throws DeploymentDescException if the deployment - * descriptors are corrupted. - */ - public ClientContainerDeploymentDesc(final ClassLoader classLoader, - final ApplicationClient applicationClient, - final JonasClient jonasClient) - throws DeploymentDescException { - super(classLoader, applicationClient, jonasClient, null); - - // callbackHandler - callbackHandler = null; - if (applicationClient.getCallbackHandler() != null) { - callbackHandler = applicationClient.getCallbackHandler(); - } - - JonasSecurity jonasSecurity = jonasClient.getJonasSecurity(); - if (jonasSecurity != null) { - // jaas config file - jaasFile = null; - if (jonasSecurity.getJaasfile() != null) { - jaasFile = jonasSecurity.getJaasfile(); - } - - // jaas entry - jaasEntry = null; - if (jonasSecurity.getJaasentry() != null) { - jaasEntry = jonasSecurity.getJaasentry(); - } - - // username - username = null; - if (jonasSecurity.getUsername() != null) { - username = jonasSecurity.getUsername(); - } - - // password - password = null; - if (jonasSecurity.getPassword() != null) { - password = jonasSecurity.getPassword(); - } - } - - - } - - /** - * Get the name of the jaas configuration file - * @return the name of the jaas configuration file - */ - public String getJaasFile() { - return jaasFile; - } - - /** - * Get the entry in the jaas configuration file - * @return the entry in the jaas configuration file - */ - public String getJaasEntry() { - return jaasEntry; - } - - /** - * Get the username used for a callback handler - * @return the username used for a callback handler - */ - public String getUsername() { - return username; - } - - /** - * Get the password used for a callback handler - * @return the password used for a callback handler - */ - public String getPassword() { - return password; - } - - /** - * Get the callback handler of this client application. - * @return the callback handler of this client application. - */ - public String getCallbackHandler() { - return callbackHandler; - } - - /** - * Return the content of the web.xml file - * @return the content of the web.xml file - */ - public String getXmlContent() { - return xmlContent; - } - - /** - * Return the content of the jonas-web.xml file - * @return the content of the jonas-web.xml file - */ - public String getJOnASXmlContent() { - return jonasXmlContent; - } - - /** - * @param xmlContent XML Content - */ - public void setXmlContent(final String xmlContent) { - this.xmlContent = xmlContent; - } - - /** - * @param jonasXmlContent XML Content - */ - public void setJOnASXmlContent(final String jonasXmlContent) { - this.jonasXmlContent = jonasXmlContent; - } - - /** - * Return a String representation of the ClientContainerDeploymentDesc. - * @return a String representation of the ClientContainerDeploymentDesc. - */ - @Override - public String toString() { - StringBuffer ret = new StringBuffer(); - - // Return the displayName - ret.append("\ngetDisplayName()=" + getDisplayName()); - - // Return the resource-env-ref - IResourceEnvRefDesc[] rer = getResourceEnvRefDesc(); - for (int i = 0; i < rer.length; i++) { - ret.append("\ngetResourceEnvRefDesc(" + i + ")=" + rer[i].getClass().getName()); - ret.append(rer[i].toString()); - } - - // Return the resource-ref - IResourceRefDesc[] resourceRefDesc = getResourceRefDesc(); - for (int i = 0; i < resourceRefDesc.length; i++) { - ret.append("\ngetResourceRefDesc(" + i + ")=" + resourceRefDesc[i].getClass().getName()); - ret.append(resourceRefDesc[i].toString()); - } - - // Return the env-entry - IEnvEntryDesc[] envEntries = getEnvEntryDesc(); - for (int i = 0; i < envEntries.length; i++) { - ret.append("\ngetEnvEntryDesc(" + i + ")=" + envEntries[i].getClass().getName()); - ret.append(envEntries[i].toString()); - } - - // Return the ejb-ref - IEJBRefDesc[] ejbRefDesc = getEjbRefDesc(); - for (int i = 0; i < ejbRefDesc.length; i++) { - ret.append("\ngetEjbRefDesc(" + i + ")=" + ejbRefDesc[i].getClass().getName()); - ret.append(ejbRefDesc[i].toString()); - } - - // Return the message-destination-ref - IMessageDestinationRefDesc[] mdRefDesc = getMessageDestinationRefDesc(); - for (int i = 0; i < mdRefDesc.length; i++) { - ret.append("\ngetMessageDestinationRefDesc(" + i + ")=" + mdRefDesc[i].getClass().getName()); - ret.append(mdRefDesc[i].toString()); - } - - // Return the persistence-unit-ref - IPersistenceUnitRefDesc[] persistUnitRefDesc = getPersistenceUnitRefs(); - for (int i = 0; i < persistUnitRefDesc.length; i++) { - ret.append("\ngetPersistenceUnitRefs(" + i + ")=" + persistUnitRefDesc[i].getClass().getName()); - ret.append(persistUnitRefDesc[i].toString()); - } - - // Return the callbackHandler - ret.append("\ngetCallbackHandler()=" + getCallbackHandler()); - - return ret.toString(); - } - - /** - * Store a reference to this application-client metadatas - * @param carDeployableMetadata application-client metadatas - */ - public void setCarMetadata(ICarDeployableMetadata carDeployableMetadata) { - this.carDeployableMetadata = carDeployableMetadata; - } - - /** - * @return this application-client metadatas. - */ - public ICarDeployableMetadata getCarDeployableMetadata() { - return this.carDeployableMetadata; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDescException.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDescException.java deleted file mode 100644 index eb21df0b49..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/ClientContainerDeploymentDescException.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer : Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - -import org.ow2.jonas.deployment.common.DeploymentDescException; - -/** - * This class ClientContainerDeploymentDescException indicates conditions - * that a reasonable application might want to catch. - * @author Florent Benoit - */ -public class ClientContainerDeploymentDescException - extends DeploymentDescException { - - /** - * Constructs a new ClientContainerDeploymentDescException with no detail - * message. - */ - public ClientContainerDeploymentDescException() { - super(); - } - - /** - * Constructs a new ClientContainerDeploymentDescException with the specified - * message. - * @param message the detail message. - */ - public ClientContainerDeploymentDescException(String message) { - super(message); - } - - /** - * Constructs a new ClientContainerDeploymentDescException with the specified - * message and cause. - * @param message the detail message. - * @param cause The error or exception that cause this exception. - */ - public ClientContainerDeploymentDescException(String message, - Throwable cause) { - super(message, cause); - } - - /** - * Construct an exception from a causing exception. - * @param cause The error or exception that cause this exception. - * The message will be take be this object's message. - */ - public ClientContainerDeploymentDescException(Throwable cause) { - super(cause); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientDTDs.java deleted file mode 100644 index 1e93a1c391..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientDTDs.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - -import org.ow2.jonas.deployment.common.CommonsDTDs; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of DTDs for jonas-client.xml. - * @author Florent Benoit - */ -public class JonasAppClientDTDs extends CommonsDTDs { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(JonasAppClientDTDs.class); - - /** - * List of jonas-client-app dtds. - */ - private static final String[] JONAS_APPCLIENT_DTDS = new String[] { - PACKAGE + "jonas-client_3_2.dtd" - - }; - - /** - * List of jonas-client-app publicId. - */ - private static final String[] JONAS_APPCLIENT_DTDS_PUBLIC_ID = new String[] { - "-//ObjectWeb//DTD JOnAS Client 3.2//EN" - }; - - - /** - * Build a new object for jonas-client.xml DTDs handling. - */ - public JonasAppClientDTDs() { - super(); - addMapping(JONAS_APPCLIENT_DTDS, JONAS_APPCLIENT_DTDS_PUBLIC_ID); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientSchemas.java deleted file mode 100644 index 318850d712..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/JonasAppClientSchemas.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for and jonas-web.xml. - * @author Philippe Coq - */ -public class JonasAppClientSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(JonasAppClientSchemas.class); - - /** - * List of schemas used for jonas-web.xml. - */ - private static final String[] JONAS_APPCLIENT_SCHEMAS = new String[] { - PACKAGE + "jonas-client_4_0.xsd", - PACKAGE + "jonas-client_4_1.xsd", - PACKAGE + "jonas-client_4_1_2.xsd", - PACKAGE + "jonas-client_4_1_4.xsd", - PACKAGE + "jonas-client_4_2.xsd", - PACKAGE + "jonas-client_5_0.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public JonasAppClientSchemas() { - super(); - addSchemas(JONAS_APPCLIENT_SCHEMAS); - } - - /** - * @return Returns the last Schema. - */ - public static String getLastSchema() { - return getLastSchema(JONAS_APPCLIENT_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/lib/ClientDeploymentDescManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/lib/ClientDeploymentDescManager.java deleted file mode 100644 index ba27be7c70..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/lib/ClientDeploymentDescManager.java +++ /dev/null @@ -1,1145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.client.lib; - -//import java - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.rmi.RemoteException; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.List; -import java.util.StringTokenizer; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -import javax.annotation.Resource; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.easybeans.resolver.api.EZBJNDIBeanData; -import org.ow2.easybeans.resolver.api.EZBJNDIData; -import org.ow2.easybeans.resolver.api.EZBRemoteJNDIResolver; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.client.AppClientDTDs; -import org.ow2.jonas.deployment.client.AppClientSchemas; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDesc; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDescException; -import org.ow2.jonas.deployment.client.JonasAppClientDTDs; -import org.ow2.jonas.deployment.client.JonasAppClientSchemas; -import org.ow2.jonas.deployment.client.rules.ApplicationClientRuleSet; -import org.ow2.jonas.deployment.client.rules.JonasClientRuleSet; -import org.ow2.jonas.deployment.client.xml.ApplicationClient; -import org.ow2.jonas.deployment.client.xml.JonasClient; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.EjbRefDesc; -import org.ow2.jonas.deployment.common.MessageDestinationRefDesc; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.ow2.jonas.deployment.common.lib.AbsDeploymentDescManager; -import org.ow2.jonas.deployment.common.xml.EjbRef; -import org.ow2.jonas.deployment.common.xml.JonasEjbRef; -import org.ow2.jonas.deployment.common.xml.JonasMessageDestination; -import org.ow2.jonas.deployment.common.xml.JonasResource; -import org.ow2.jonas.deployment.common.xml.JonasServiceRef; -import org.ow2.jonas.deployment.common.xml.MessageDestinationRef; -import org.ow2.jonas.deployment.common.xml.PersistenceUnitRef; -import org.ow2.jonas.deployment.common.xml.ResourceRef; -import org.ow2.jonas.deployment.ejb.DeploymentDesc; -import org.ow2.jonas.deployment.ejb.lib.EjbDeploymentDescManager; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.PortComponentRefDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.WSDeploymentDesc; -import org.ow2.jonas.deployment.ws.lib.WSDeploymentDescManager; -import org.ow2.jonas.lib.loader.WebappClassLoader; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.ee.metadata.car.api.ICarDeployableMetadata; -import org.ow2.util.ee.metadata.car.impl.CarDeployableMetadataFactory; -import org.ow2.util.ee.metadata.car.impl.enc.CarENCBindingBuilder; -import org.ow2.util.ee.metadata.common.api.enc.IENCBinding; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -import org.ow2.util.ee.metadata.common.api.struct.IJAnnotationResource; -import org.ow2.util.ee.metadata.common.api.struct.IJEjbEJB; -import org.ow2.util.ee.metadata.common.api.struct.IJavaxPersistenceUnit; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.common.impl.enc.ENCBindingException; -import org.ow2.util.url.URLUtils; - - -/** - * This class provide a way for managing the ClientContainerDeploymentDesc. - * @author Florent Benoit - */ -public class ClientDeploymentDescManager extends AbsDeploymentDescManager { - - /** - * The unique instance of the ClientDeploymentDescManager. - */ - private static ClientDeploymentDescManager unique; - - /** - * Reference on the EjbDeploymentDescManager. - */ - private EjbDeploymentDescManager ejbDDManager = null; - - /** - * Associate a ear classLoader to an hashtable which contains association - * between Urls of wars and their optional alt-dd - */ - private Hashtable earCLAltDDBindings = null; - - /** - * The path to the application-client.xml file. - */ - public static final String CLIENT_FILE_NAME = "META-INF/application-client.xml"; - - /** - * The path to the jonas-client.xml file. - */ - public static final String JONAS_CLIENT_FILE_NAME = "META-INF/jonas-client.xml"; - - /** - * Digester used to parse application-client.xml - */ - private static JDigester appClientDigester = null; - - /** - * Digester use to parse jonas-client.xml - */ - private static JDigester jonasAppClientDigester = null; - - /** - * Flag for parser validation - */ - private static boolean parsingWithValidation = true; - - /** - * Rules to parse the application-client.xml - */ - private static ApplicationClientRuleSet appClientRuleSet = new ApplicationClientRuleSet(); - - /** - * Rules to parse the jonas-client.xml - */ - private static JonasClientRuleSet jonasAppClientRuleSet = new JonasClientRuleSet(); - - /** - * logger. - */ - private static Logger logger = Log.getLogger(ClientDeploymentDescManager.class.getName()); - - /** - * Contructs a unique ClientDeploymentDescManager - */ - private ClientDeploymentDescManager() { - ejbDDManager = EjbDeploymentDescManager.getInstance(); - earCLAltDDBindings = new Hashtable(); - } - - /** - * Get an instance of the ClientDeploymentDescManager. - * @return the instance of the ClientDeploymentDescManager. - */ - public static ClientDeploymentDescManager getInstance() { - if (unique == null) { - unique = new ClientDeploymentDescManager(); - } - return unique; - } - - /** - * Get the specified client deployment descriptor. - * @param url the url where to load xml deployment descriptors. - * @param loaderForCls classloader used to load client classes. - * @param earLoader the ear classloader. - * @return ClientContainerDeploymentDesc the client deployment descriptor. - * @throws DeploymentDescException when - * ClientContainerDeploymentDesc cannot be created with the given - * files. - */ - public ClientContainerDeploymentDesc getDeploymentDesc(final URL url, final ClassLoader loaderForCls, final ClassLoader earLoader) - throws DeploymentDescException { - - // Check if the jar exists ... - if (!URLUtils.urlToFile(url).exists()) { - String err = "Cannot get the deployment descriptor for "; - err = err + "'" + url.getFile() + "'. The file doesn't exist."; - throw new ClientContainerDeploymentDescException(err); - } - - //url used to load an alternate DDesc in the EAR case - URL altDDUrl = null; - - //check if it's an Ear case or not - Hashtable urlAltddBindings = null; - if (earLoader != null) { - //Mapping ? - urlAltddBindings = (Hashtable) earCLAltDDBindings.get(earLoader); - if (urlAltddBindings == null) { - //If there is no mapping, the setAltDD function was badly - // called - String err = "Cannot find if there is alt-dd for '" + url.getFile() - + "', the setAltDD function was badly called"; - throw new ClientContainerDeploymentDescException(err); - } - //Now we can get the optional alt-dd url file - altDDUrl = (URL) urlAltddBindings.get(url); - } - - // ... and get the instance of the ClientContainerDeploymentDesc. - // If there is an alternate url for the application-client.xml, call the - // method with this param. - ClientContainerDeploymentDesc clientDD = null; - try { - if (altDDUrl != null) { - clientDD = getInstance(URLUtils.urlToFile(url).getPath(), loaderForCls, altDDUrl.getFile()); - } else { - clientDD = getInstance(URLUtils.urlToFile(url).getPath(), loaderForCls); - } - } catch (org.ow2.jonas.deployment.common.DeploymentDescException dde) { - throw new ClientContainerDeploymentDescException(dde); - } - - // Resolve the ejb-link for ejb-ref - EjbRefDesc[] ejbRef = clientDD.getEjbRefDesc(); - for (int i = 0; i < ejbRef.length; i++) { - if (ejbRef[i].getJndiName() == null) { - String ejbLink = ejbRef[i].getEjbLink(); - String ejbRefType = ejbRef[i].getEjbRefType(); - String home = ejbRef[i].getHome(); - String remote = ejbRef[i].getRemote(); - if (ejbLink != null) { - if (earLoader == null) { - throw new ClientContainerDeploymentDescException( - "Ejb-link is not authorized from a single client jar. The client jar must be in an ear."); - } else { - String jndiName = null; - // First, try to get JNDI name through the manager before trying with the remote JNDI resolver. - try { - jndiName = getJndiName(url, ejbLink, earLoader, ejbRefType); - } catch (DeploymentDescException e) { - - // log first exception - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Unable to get JNDI name with the EJB DD manager", e); - } - - // Was not able to get a JNDI name, try with the remote object. - EZBRemoteJNDIResolver jndiResolver = null; - - // Get object - Object o = null; - try { - o = new InitialContext().lookup("EZB_Remote_JNDIResolver"); - } catch (NamingException ne) { - // No Remote JNDI resolver, so throw first exception - logger.log(BasicLevel.DEBUG, "No Remote EJB3 JNDI Resolver found"); - throw e; - } - - // Object is here, so we can cast it - jndiResolver = (EZBRemoteJNDIResolver) PortableRemoteObject.narrow(o, EZBRemoteJNDIResolver.class); - - // Ask the Resolver with interface name and bean name - String interfaceName = remote; - if (home != null && !"".equals(home)) { - interfaceName = home; - } - String beanName = ejbLink; - List jndiDataList = null; - try { - jndiDataList = jndiResolver.getEJBJNDINames(interfaceName, beanName); - } catch (RemoteException re) { - // No Remote JNDI resolver, so throw first exception - throw new DeploymentDescException("Unable to get EJB-LINK for interface'" + interfaceName + "' and beanName'" + beanName + "'", re); - } - - // Data is here, check if it is empty or not - if (jndiDataList.size() == 0) { - throw new DeploymentDescException("Unable to get EJB-LINK for interface'" + interfaceName + "' and beanName'" + beanName + "', no data was found on the remote side."); - } else if (jndiDataList.size() > 1) { - // too many entries - throw new DeploymentDescException("Unable to get EJB-LINK for interface'" + interfaceName + "' and beanName'" + beanName + "', too many answers : '" + jndiDataList + "'."); - } - - // Only one item found, so get JNDI Name from this object - EZBJNDIBeanData jndiData = jndiDataList.get(0); - // Update JNDI name - jndiName = jndiData.getName(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Found JNDI Name '" + jndiName + "' for interface'" + interfaceName + "' and beanName'" + beanName + "', too many answers : '" + jndiDataList + "'."); - } - } - ejbRef[i].setJndiName(jndiName); - } - } - } - } - // Resolve the port-component-link for service-ref - IServiceRefDesc[] serviceRef = clientDD.getServiceRefDesc(); - - for (int i = 0; i < serviceRef.length; i++) { - - List pcRefs = serviceRef[i].getPortComponentRefs(); - for (int j = 0; j < pcRefs.size(); j++) { - // for each service portComponents : resolve links - PortComponentRefDesc pcr = (PortComponentRefDesc) pcRefs.get(j); - String pclink = pcr.getPortComponentLink(); - if (pclink != null) { - // a pc link is defined, we resolve it - PortComponentDesc pcDesc = getPCDesc(url, pclink, earLoader); - pcr.setPortComponentDesc(pcDesc); - } - } - } - - - // Resolve the message-destination-link for message-destination-ref - MessageDestinationRefDesc[] mdRef = clientDD.getMessageDestinationRefDesc(); - for (int i = 0; i < mdRef.length; i++) { - if (mdRef[i].getJndiName() == null) { - String jndiName = mdRef[i].getJndiName(); - String mdLink = mdRef[i].getMessageDestinationLink(); - String mdType = mdRef[i].getMessageDestinationType(); - String mdUsage = mdRef[i].getMessageDestinationUsage(); - if (mdLink != null) { - if (earLoader == null) { - throw new ClientContainerDeploymentDescException( - "Message-destination-link is not authorized from a single client jar. The client jar must be in an ear."); - } else { - jndiName = getMDJndiName(url, mdLink, mdType, mdUsage, earLoader); - // String jndiName = getMdJndiName(url, mdLink, - // earLoader, mdType); - mdRef[i].setJndiName(jndiName); - } - } - } - } - return clientDD; - } - /** - * Return the port component desc from the pcLink string. pcLink format : - * filename.[jar or war]#portComponentName in the same Ear File - * @param warURL the url of the war being parsed. This is needed because - * pcLink is relative. With the url and the pcLink, we can know where - * the file is locate. - * @param pcLink the pcLink tag of an port-component-ref. - * @param earLoader the classloader of the ear. - * @return the pcLink portComponent. - * @throws DeploymentDescException when it failed - */ - private PortComponentDesc getPCDesc(final URL warURL, final String pcLink, final ClassLoader earLoader) - throws DeploymentDescException { - - // Extract from the pc link - // - the name of the file - // - the name of the bean - String moduleLink = null; - String pcNameLink = null; - - // Check the format of the pc-link. It must contains .jar# or .war# - if ((pcLink.toLowerCase().indexOf(".war" + LINK_SEPARATOR) == -1) - && (pcLink.toLowerCase().indexOf(".jar" + LINK_SEPARATOR) == -1)) { - // the pc link is not in war or jar file - String err = "PC-link " + pcLink - + " has a bad format. Correct format : filename.(jar|war)#portComponentName"; - throw new DeploymentDescException(err); - } - StringTokenizer st = new StringTokenizer(pcLink, LINK_SEPARATOR); - - // We must have only two elements after this step, one for the fileName - // before the # and the name of the bean after the # char - if (st.countTokens() != 2 || pcLink.startsWith(LINK_SEPARATOR) || pcLink.endsWith(LINK_SEPARATOR)) { - String err = "PC-link " + pcLink - + " has a bad format. Correct format : filename.[jar or war]#portComponentName"; - throw new DeploymentDescException(err); - } - - //Get the token - moduleLink = st.nextToken(); - pcNameLink = st.nextToken(); - - // Now construct the URL from the absolute path from the url module and - // the relative path from moduleJarLink - URL moduleLinkUrl = null; - try { - moduleLinkUrl = new File(URLUtils.urlToFile(warURL).getParent() + File.separator + moduleLink) - .getCanonicalFile().toURL(); - } catch (MalformedURLException mue) { - String err = "Error when creating an url for the module filename. Error :" + mue.getMessage(); - throw new DeploymentDescException(err); - } catch (IOException ioe) { - String err = "Error when creating/accessing a file. Error :" + ioe.getMessage(); - throw new DeploymentDescException(err); - } - - // Check if the jar exist. - if (!new File(moduleLinkUrl.getFile()).exists()) { - String err = "Cannot get the deployment descriptor for '" + moduleLinkUrl.getFile() - + "'. The file doesn't exist."; - throw new DeploymentDescException(err); - } - - // We've got the url - // Now, We can ask the Deployment Descriptor of this url - ClassLoader loaderForCls = null; - ClassLoader current = Thread.currentThread().getContextClassLoader(); - if (moduleLink.toLowerCase().endsWith(".war")) { - try { - // webservice in webapp - loaderForCls = new WebappClassLoader(moduleLinkUrl, current); - } catch (IOException ioe) { - throw new DeploymentDescException("Unable to create Web ClassLoader", ioe); - } - } else { - // webservice in ejbjar - loaderForCls = current; - } - - WSDeploymentDesc wsDD = null; - - try { - wsDD = WSDeploymentDescManager.getInstance().getDeploymentDesc(moduleLinkUrl, loaderForCls, earLoader); - } catch (DeploymentDescException e) { - String err = "Cannot get the deployment descriptor for '" + moduleLinkUrl.getFile() + "'."; - throw new DeploymentDescException(err, e); - } - if (wsDD == null) { - // the module doesn't contain port components. - String err = "Port component link " + pcNameLink + " not found in " + moduleLinkUrl.getFile(); - throw new DeploymentDescException(err); - } - - //get port component desc //pcNameLink - List sdl = wsDD.getServiceDescs(); - boolean isFound = false; - PortComponentDesc pcd = null; - for (int i = 0; (i < sdl.size()) && !isFound; i++) { - if (sdl.get(i) != null) { - pcd = ((ServiceDesc) sdl.get(i)).getPortComponent(pcNameLink); - isFound = (pcd != null); - // we stop when we have found the good portComponent - } - } - if (!isFound) { - // the module doesn't contain port components. - String err = "the port component link " + pcNameLink + " doesn't exist in " + moduleLinkUrl.getFile(); - throw new DeploymentDescException(err); - } - - return pcd; - } - - - /** - * Get an instance of a Client deployment descriptor by parsing the - * application-client.xml and jonas-client.xml deployment descriptors. - * @param clientFileName the fileName of the client file for the deployment - * descriptors. - * @param classLoaderForCls the classloader for the classes. - * @return a Client deployment descriptor by parsing the - * application-client.xml and jonas-client.xml deployment - * descriptors. - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - public static ClientContainerDeploymentDesc getInstance(final String clientFileName, final ClassLoader classLoaderForCls) - throws DeploymentDescException { - - return getInstance(clientFileName, classLoaderForCls, null); - } - - /** - * Get an instance of a Client deployment descriptor by parsing the - * application-client.xml and jonas-client.xml deployment descriptors. - * @param clientFileName the fileName of the client file for the deployment - * descriptors. - * @param classLoaderForCls the classloader for the classes. - * @param altClientXmlFilename the fileName to the application-client.xml - * for the alt-dd tag in the Ear Case. This is used for specify an - * alternate DDesc file. - * @return a Client deployment descriptor by parsing the - * application-client.xml and jonas-client.xml deployment - * descriptors. - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - public static ClientContainerDeploymentDesc getInstance(final String clientFileName, final ClassLoader classLoaderForCls, - final String altClientXmlFilename) - - throws DeploymentDescException { - - // clientjar file - JarFile clientFile = null; - - // Input streams - InputStream applicationClientInputStream = null; - InputStream jonasClientInputStream = null; - - // ZipEntry - ZipEntry applicationClientZipEntry = null; - ZipEntry jonasClientZipEntry = null; - - // Clients - ApplicationClient applicationClient; - JonasClient jonasClient; - - // Init xml contents values; - String xmlContent = ""; - String jonasXmlContent = ""; - - // Build the file - File fClient = new File(clientFileName); - - //Check if the file exists. - if (!(fClient.exists())) { - String err = "' " + clientFileName + "' was not found."; - throw new ClientContainerDeploymentDescException(err); - } - - //Check if the Alt deploymentDesc file exists. - //But only if it's a non null value because it's optionnal. - if ((altClientXmlFilename != null) && (!new File(altClientXmlFilename).exists())) { - String err = "The file for the altdd tag for the EAR case '" + altClientXmlFilename + "' was not found."; - throw new ClientContainerDeploymentDescException(err); - } - - // load the application-client deployment descriptor data - // (META-INF/application-client.xml - // and META-INF/jonas-client.xml) - //No alt-dd case - if (altClientXmlFilename == null) { - try { - clientFile = new JarFile(clientFileName); - - //Lookup in the JAR - //Check the client entry - applicationClientZipEntry = clientFile.getEntry(CLIENT_FILE_NAME); - if (applicationClientZipEntry != null) { - //Get the stream - applicationClientInputStream = clientFile.getInputStream(applicationClientZipEntry); - xmlContent = xmlContent(applicationClientInputStream); - // necessary to have a not empty InputStream !!! - applicationClientInputStream = clientFile.getInputStream(applicationClientZipEntry); - } - } catch (Exception e) { - if (clientFile != null) { - try { - clientFile.close(); - } catch (IOException ioe) { - //We can't close the file - } - } - throw new ClientContainerDeploymentDescException( - "Can not read the XML deployment descriptors of the client jar file '" + clientFileName + "'.", - e); - } - } else { - try { - applicationClientInputStream = new FileInputStream(altClientXmlFilename); - xmlContent = xmlContent(applicationClientInputStream); - // necessary to have a not empty InputStream !!! - applicationClientInputStream = new FileInputStream(altClientXmlFilename); - } catch (FileNotFoundException ioe) { - throw new ClientContainerDeploymentDescException("The altDD file '" + altClientXmlFilename - + "' was not found."); - } catch (Exception e) { - if (applicationClientInputStream != null) { - try { - applicationClientInputStream.close(); - } catch (IOException ioe) { - // Can't close the file - } - } - throw new ClientContainerDeploymentDescException("Cannot read the XML deployment descriptors of the client jar file '" - + clientFileName + "'.", e); - } - } - - if (applicationClientInputStream != null) { - applicationClient = loadApplicationClient(new InputStreamReader(applicationClientInputStream), CLIENT_FILE_NAME); - } else { - applicationClient = new ApplicationClient(); - } - - try { - clientFile = new JarFile(clientFileName); - - // Lookup in the JAR - // Check the client entry - jonasClientZipEntry = clientFile.getEntry(JONAS_CLIENT_FILE_NAME); - if (jonasClientZipEntry != null) { - //Get the stream - jonasClientInputStream = clientFile.getInputStream(jonasClientZipEntry); - jonasXmlContent = xmlContent(jonasClientInputStream); - // necessary to have a not empty InputStream !!! - jonasClientInputStream = clientFile.getInputStream(jonasClientZipEntry); - } - } catch (Exception e) { - if (clientFile != null) { - try { - clientFile.close(); - } catch (IOException ioe) { - //We can't close the file - } - } - throw new ClientContainerDeploymentDescException( - "Can not read the XML deployment descriptors of the client jar file '" + clientFileName + "'.", e); - } - - // load jonas-client deployment descriptor data - // (META-INF/jonas-client.xml) - if (jonasClientInputStream != null) { - jonasClient = loadJonasClient(new InputStreamReader(jonasClientInputStream), JONAS_CLIENT_FILE_NAME); - try { - jonasClientInputStream.close(); - } catch (IOException e) { - // Nothing to do - } - } else { - jonasClient = new JonasClient(); - } - - // Compute Metadatas - ICarDeployableMetadata carDeployableMetadata = getCarMetadata(clientFileName, classLoaderForCls); - - - // Get Holder and complete metadata - IENCBindingHolder holder = completeClient(carDeployableMetadata, - applicationClient, - jonasClient, - classLoaderForCls); - - // instantiate client deployment descriptor - ClientContainerDeploymentDesc clientDD = new ClientContainerDeploymentDesc(classLoaderForCls, applicationClient, jonasClient); - clientDD.setXmlContent(xmlContent); - clientDD.setJOnASXmlContent(jonasXmlContent); - clientDD.setENCBindingHolder(holder); - - clientDD.setCarMetadata(carDeployableMetadata); - - return clientDD; - } - - /** - * Extract all the metadatas from the application client. - * @param clientFileName the client - * @param classLoader the classloader used for the client - * @return the metadata structure associated to this client - * @throws ClientContainerDeploymentDescException if an error occured during annotation/XML parsing - */ - public static ICarDeployableMetadata getCarMetadata(final String clientFileName, final ClassLoader classLoader) throws ClientContainerDeploymentDescException { - // Analyze metadata of the client - - File clientFile = new File(clientFileName); - - // First, get an archive - IArchive archive = ArchiveManager.getInstance().getArchive(clientFile); - - ICarDeployableMetadata carDeployableMetadata; - CARDeployable carDeployable; - try { - // Workaround for http://bugs.sun.com/view_bug.do?bug_id=6548436 - carDeployable = CARDeployable.class.cast(DeployableHelper.getDeployable(archive)); - // check if client is uncompressed - if (!clientFile.isDirectory()) { - carDeployable = UnpackDeployableHelper.unpack(carDeployable); - logger.log(BasicLevel.DEBUG, "Unpack an application-client to create metadata"); - } - carDeployableMetadata = new CarDeployableMetadataFactory().createDeployableMetadata(carDeployable, classLoader); - } catch (Exception e) { - throw new ClientContainerDeploymentDescException(e); - } - return carDeployableMetadata; - } - - /** - * Complete the given applicationClient object and jonasClient by reading annotations. - * @param carDeployableMetadata given war file to analyze - * @param applicationClient the web app struct - * @param jonasClient the jonas webapp struct - * @param classLoader the classloader used to get the classes - * @return the binding holder - * @throws ClientContainerDeploymentDescException if complete is not done - */ - public static IENCBindingHolder completeClient(final ICarDeployableMetadata carDeployableMetadata, - final ApplicationClient applicationClient, - final JonasClient jonasClient, - final ClassLoader classLoader) throws ClientContainerDeploymentDescException { - - // Complete the standard application-client object with the annotations found - IENCBindingHolder encBindingHolder = null; - try { - encBindingHolder = CarENCBindingBuilder.analyze(carDeployableMetadata); - } catch (ENCBindingException e) { - logger.log(BasicLevel.ERROR, "Unable to analyze metadata of '" + carDeployableMetadata + "'", e); - } - - // Get @PersistenceUnit annotations bindings - List> persistenceUnitBindings = encBindingHolder.getPersistenceUnitBindings(); - // Adds each binding as a persistence unit object - for (IENCBinding persistenceUnitBinding : persistenceUnitBindings) { - // get object - IJavaxPersistenceUnit annotationPersistenceUnit = persistenceUnitBinding.getValue(); - PersistenceUnitRef persistenceUnitRef = new PersistenceUnitRef(); - applicationClient.addPersistenceUnitRef(persistenceUnitRef); - // set the ref name - persistenceUnitRef.setPersistenceUnitRefName(annotationPersistenceUnit.getName()); - // set the unit name - persistenceUnitRef.setPersistenceUnitName(annotationPersistenceUnit.getUnitName()); - } - - // Get @Resource annotations bindings - List> resourcesBindings = encBindingHolder.getResourceBindings(); - // Adds each binding as a resource object - for (IENCBinding resourceBinding : resourcesBindings) { - - // get object - IJAnnotationResource annotationResource = resourceBinding.getValue(); - - // Build a new object and add it (if not a session context) - if ("javax.ejb.SessionContext".equals(annotationResource.getType())) { - continue; - } else if ("org.omg.CORBA.ORB".equals(annotationResource.getType())) { - continue; - } else if ("javax.transaction.UserTransaction".equals(annotationResource.getType())) { - continue; - } - - // Already present ? - String resourceName = resourceBinding.getName(); - if (containsResource(resourceName, applicationClient)) { - continue; - } - - String messageDestinationLink = annotationResource.getMessageDestinationLink(); - - // Resource ref - if (messageDestinationLink == null) { - ResourceRef resourceRef = new ResourceRef(); - applicationClient.addResourceRef(resourceRef); - - // Sets the name - resourceRef.setResRefName(resourceBinding.getName()); - - // Set auth - Resource.AuthenticationType authType = annotationResource.getAuthenticationType(); - if (authType.equals(Resource.AuthenticationType.CONTAINER)) { - resourceRef.setResAuth("Container"); - } else { - resourceRef.setResAuth("Application"); - } - - // Sets type - resourceRef.setResType(annotationResource.getType()); - - // if there is a mapped name, add a jonas-resource element - String mappedName = annotationResource.getMappedName(); - if (mappedName != null) { - JonasResource jonasResource = new JonasResource(); - jonasResource.setResRefName(annotationResource.getName()); - jonasResource.setJndiName(mappedName); - jonasClient.addJonasResource(jonasResource); - } - } else { - // Message destination ref - MessageDestinationRef messageDestinationRef = new MessageDestinationRef(); - applicationClient.addMessageDestinationRef(messageDestinationRef); - - // Sets the name - messageDestinationRef.setMessageDestinationRefName(resourceBinding.getName()); - - // Set auth - messageDestinationRef.setMessageDestinationLink(messageDestinationLink); - - // Sets type - messageDestinationRef.setMessageDestinationType(annotationResource.getType()); - - // if there is a mapped name, add a jonas-resource element - String mappedName = annotationResource.getMappedName(); - if (mappedName != null) { - JonasMessageDestination jonasMessageDestination = new JonasMessageDestination(); - jonasMessageDestination.setMessageDestinationName(annotationResource.getName()); - jonasMessageDestination.setJndiName(mappedName); - jonasClient.addJonasMessageDestination(jonasMessageDestination); - } - - } - - } - - // Get @EJB annotations bindings - List> ejbsBindings = encBindingHolder.getEJBBindings(); - - // Adds each binding as a resource object - for (IENCBinding ejbBinding : ejbsBindings) { - // Build a new object and add it - EjbRef ejbRef = new EjbRef(); - applicationClient.addEjbRef(ejbRef); - - // Sets the name - ejbRef.setEjbRefName(ejbBinding.getName()); - - // get object - IJEjbEJB jEJB = ejbBinding.getValue(); - - // if there is a mapped name, add a jonas-resource element - String mappedName = jEJB.getMappedName(); - if (mappedName != null) { - JonasEjbRef jonasEjbRef = new JonasEjbRef(); - jonasEjbRef.setEjbRefName(ejbBinding.getName()); - jonasEjbRef.setJndiName(mappedName); - jonasClient.addJonasEjbRef(jonasEjbRef); - } - } - - // Iterates on jonas-service-ref elements to see if there are some values to override - List> webServicesBindings = encBindingHolder.getWebServicesBindings(); - for (IENCBinding binding : webServicesBindings) { - IJaxwsWebServiceRef wsr = binding.getValue(); - JonasServiceRef jsr = findJonasServiceRef(jonasClient.getJonasServiceRefList(), wsr.getName()); - - // Found a matching jonas-service-ref - if (jsr != null) { - mergeWebServiceRef(jsr, wsr); - } - } - - return encBindingHolder; - } - - /** - * Load the application-client.xml file. - * @param reader the reader of the XML file. - * @param fileName the name of the file (application-client.xml). - * @return a structure containing the result of the application-client.xml - * parsing. - * @throws DeploymentDescException if the deployment descriptor is - * corrupted. - */ - public static ApplicationClient loadApplicationClient(final Reader reader, final String fileName) - throws DeploymentDescException { - - ApplicationClient appc = new ApplicationClient(); - - // No reader, return now the object - if (reader == null) { - return appc; - } - - // Create if null - if (appClientDigester == null) { - // Create and initialize the digester - appClientDigester = new JDigester(appClientRuleSet, getParsingWithValidation(), true, new AppClientDTDs(), - new AppClientSchemas()); - } - - try { - appClientDigester.parse(reader, fileName, appc); - } catch (DeploymentDescException e) { - throw e; - } finally { - appClientDigester.push(null); - } - return appc; - } - - /** - * Load the jonas-client.xml file. - * @param reader the stream of the XML file. - * @param fileName the name of the file (jonas-client.xml). - * @return a structure containing the result of the jonas-client.xml - * parsing. - * @throws DeploymentDescException if the deployment descriptor is - * corrupted. - */ - public static JonasClient loadJonasClient(final Reader reader, final String fileName) throws DeploymentDescException { - - JonasClient jc = new JonasClient(); - - // Create if null - if (jonasAppClientDigester == null) { - jonasAppClientDigester = new JDigester(jonasAppClientRuleSet, getParsingWithValidation(), true, - new JonasAppClientDTDs(), new JonasAppClientSchemas()); - } - - try { - jonasAppClientDigester.parse(reader, fileName, jc); - - } catch (DeploymentDescException e) { - throw e; - } finally { - jonasAppClientDigester.push(null); - } - return jc; - } - - /** - * Return the JNDI name from the ejbLink string. ejbLink format : - * filename.jar#beanName in the same Ear File - * @param clientURL the url of the jar being parsed. This is needed because - * ejbLink is relative. With the url and the ejbLink, we can know - * where the file is locate. - * @param ejbLink the ejbLink tag of an ejb-ref. - * @param earLoader the classloader of the ear. - * @param ejbType the type of the referenced ejb in the ejb-ref tag. - * @return the JNDI name if found, null otherwise - * @throws DeploymentDescException when it failed - */ - private String getJndiName(final URL clientURL, final String ejbLink, final ClassLoader earLoader, final String ejbType) - throws DeploymentDescException { - // Now ask EJB deployment Desc manager - // Last arg is always true as it is always ejb ref and not local ref from a client - return ejbDDManager.getJndiName(clientURL, ejbLink, earLoader, ejbType, null, true); - } - - /** - * Make a cleanup of the cache of deployment descriptor. This method must - * Return the JNDI name from the mdLink string. mdLink format : - * filename.jar#mdName in the same Ear File - * @param clientURL the url of the jar being parsed. This is needed because - * mdLink is relative. With the url and the mdLink, we can know where - * the file is locate. - * @param mdLink the mdLink tag of a message-destination-ref - * @param mdType the type of the referenced mdb in the - * message-destination-ref tag. - * @param mdUsage the usage of the referenced mdb in the - * message-destination-ref tag. - * @param earLoader the classloader of the ear. - * @return the JNDI name if found, null otherwise - * @throws ClientContainerDeploymentDescException when it failed - */ - private String getMDJndiName(final URL clientURL, final String mdLink, final String mdType, final String mdUsage, final ClassLoader earLoader) - throws ClientContainerDeploymentDescException { - - // Extract from the mdb link - // - the name of the file - // - the name of the destination - String ejbJarLink = null; - String destNameLink = null; - DeploymentDesc dd = null; - - JonasMessageDestination md = null; - // contains ejb-jar name - if (mdLink.indexOf("#") > 0) { - ejbJarLink = mdLink.split("#")[0]; - destNameLink = mdLink.split("#")[1]; - } else { - // ask for any jar - destNameLink = mdLink; - } - if (ejbJarLink != null) { - //Check if ejbJarLink is a jar or not - if (!ejbJarLink.endsWith(".jar")) { - String err = "Ejbjar filename " + ejbJarLink + " from the message-destination-link " + mdLink - + " has a bad format. Correct format : filename.jar"; - throw new ClientContainerDeploymentDescException(err); - } - // Now construct the URL from the absolute path from the url clientURL - // and - // the relative path from ejbJarLink - URL ejbJarLinkUrl = null; - try { - ejbJarLinkUrl = new File(new File(clientURL.getFile()).getParent() + File.separator + ejbJarLink) - .getCanonicalFile().toURL(); - } catch (MalformedURLException mue) { - String err = "Error when creating an url for the ejb jar filename. Error :" + mue.getMessage(); - throw new ClientContainerDeploymentDescException(err); - } catch (IOException ioe) { - String err = "Error when creating/accessing a file. Error :" + ioe.getMessage(); - throw new ClientContainerDeploymentDescException(err); - } - - // Check if the jar exist. - if (!new File(ejbJarLinkUrl.getFile()).exists()) { - String err = "Cannot get the deployment descriptor for '" + ejbJarLinkUrl.getFile() - + "'. The file doesn't exist."; - throw new ClientContainerDeploymentDescException(err); - } - - // We've got the url - // Now, We can ask the Deployment Descriptor of this url - URL[] ddURL = new URL[1]; - ddURL[0] = ejbJarLinkUrl; - URLClassLoader loaderForClsEjb = new URLClassLoader(ddURL, earLoader); - try { - dd = ejbDDManager.getDeploymentDesc(ejbJarLinkUrl, loaderForClsEjb, earLoader); - } catch (DeploymentDescException e) { - String err = "Cannot get the deployment descriptor for '" + ejbJarLinkUrl.getFile() + "'."; - throw new ClientContainerDeploymentDescException(err, e); - } - - md = dd.getJonasMessageDestination(mdLink); - } - if (md == null) { - - String err = "No message-destination-link was found for '" + mdLink + "' in the file " - + clientURL.getFile() + " specified."; - ClientContainerDeploymentDescException e = new ClientContainerDeploymentDescException(err); - - // Not found, try with the remote resolver - - // Was not able to get a JNDI name, try with the remote object. - EZBRemoteJNDIResolver jndiResolver = null; - - // Get object - Object o = null; - try { - o = new InitialContext().lookup("EZB_Remote_JNDIResolver"); - } catch (NamingException ne) { - // No Remote JNDI resolver, so throw first exception - logger.log(BasicLevel.DEBUG, "No Remote EJB3 JNDI Resolver found"); - throw e; - } - - // Object is here, so we can cast it - jndiResolver = (EZBRemoteJNDIResolver) PortableRemoteObject.narrow(o, EZBRemoteJNDIResolver.class); - - // Ask the Resolver - List jndiDataList = null; - try { - jndiDataList = jndiResolver.getMessageDestinationJNDINames(destNameLink); - } catch (RemoteException re) { - // No Remote JNDI resolver, so throw first exception - throw new ClientContainerDeploymentDescException("Unable to get EJB-LINK for destination '" + destNameLink + "'", re); - } - - // Data is here, check if it is empty or not - if (jndiDataList.size() == 0) { - throw new ClientContainerDeploymentDescException("Unable to get EJB-LINK for destination '" + destNameLink + "'"); - } else if (jndiDataList.size() > 1) { - // too many entries - throw new ClientContainerDeploymentDescException("Unable to get EJB-LINK for destination '" + destNameLink + "', too many answers : '" + jndiDataList + "'."); - } - - // Only one item found, so get JNDI Name from this object - EZBJNDIData jndiData = jndiDataList.get(0); - // Update JNDI name - return jndiData.getName(); - - } - - //Check if the type & usage of the message-destination-ref is correct. - //For now checkTypeUsage(clientURL, mdType, mdUsage, dd); - - return md.getJndiName(); - } - - /** - * Make a cleanup of the cache of deployment descriptor. This method must be - * invoked after the ear deployment by the EAR service. - * @param earClassLoader the ClassLoader of the ear application to remove - * from the cache. - */ - public void removeCache(final ClassLoader earClassLoader) { - //Remove the altdd mapping - earCLAltDDBindings.remove(earClassLoader); - - //Then remove the cache of the ejb dd manager - ejbDDManager.removeCache(earClassLoader); - } - - /** - * Set the alt deployment desc which are used instead of the web.xml file - * which is in the war file. The alt-dd tag is in the application.xml file - * of the ear files and is used ony in the EAR case. ie : deployment of wars - * packaged into EAR applications. alt-dd tag is optionnal - * @param earClassLoader the ear classloader which is used for mapped the - * URLs of the wars to the Alt dd. - * @param urls the urls of the wars - * @param altDDs the alt-dd name for the specified war URLs - */ - public void setAltDD(final ClassLoader earClassLoader, final URL[] urls, final URL[] altDDs) { - - //Associate an url to a altDD url - Hashtable urlAltddBindings = new Hashtable(); - - //Fill the hashtable for each url - for (int i = 0; i < urls.length; i++) { - if (altDDs[i] != null) { - urlAltddBindings.put(urls[i], altDDs[i]); - } - } - - //Bind the hashtable - earCLAltDDBindings.put(earClassLoader, urlAltddBindings); - - } - - /** - * Get the size of the cache (number of entries in the cache). This method - * is used only for the tests. - * @return the size of the cache (number of entries in the cache). - */ - public int getCacheSize() { - int bufferSize = 0; - - Enumeration keys = earCLAltDDBindings.keys(); - while (keys.hasMoreElements()) { - ClassLoader loader = (ClassLoader) keys.nextElement(); - Hashtable hashtab = (Hashtable) earCLAltDDBindings.get(loader); - bufferSize = bufferSize + hashtab.size(); - } - - return bufferSize; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @return if true, all external entities will be read. - */ - public static boolean getParsingWithValidation() { - return parsingWithValidation; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @param validation if true, all external entities will be read. - */ - public static void setParsingWithValidation(final boolean validation) { - ClientDeploymentDescManager.parsingWithValidation = validation; - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/ApplicationClientRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/ApplicationClientRuleSet.java deleted file mode 100644 index c8afb60b29..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/ApplicationClientRuleSet.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.rules; - -import org.ow2.jonas.deployment.common.rules.EnvironmentRuleSet; -import org.ow2.jonas.deployment.common.rules.IconRuleSet; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.deployment.common.rules.MessageDestinationRuleSet; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element application-client - * - * @author jonas-team - */ -public class ApplicationClientRuleSet extends JRuleSetBase { - - /** - *

    RuleSet for processing the contents of a - *application-client definition element. - * - * @author jonas-team - */ - - /** - * Construct an object with a specific prefix - */ - public ApplicationClientRuleSet() { - super("application-client/"); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addRuleSet(new IconRuleSet(prefix)); - digester.addCallMethod(prefix + "display-name", - "setDisplayName", 0); - digester.addCallMethod(prefix + "description", - "setDescription", 0); - digester.addRuleSet(new EnvironmentRuleSet(prefix)); - digester.addCallMethod(prefix + "callback-handler", - "setCallbackHandler", 0); - digester.addRuleSet(new MessageDestinationRuleSet(prefix)); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasClientRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasClientRuleSet.java deleted file mode 100644 index 03c5d6e1f1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasClientRuleSet.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.deployment.common.rules.JonasEjbRefRuleSet; -import org.ow2.jonas.deployment.common.rules.JonasMessageDestinationRefRuleSet; -import org.ow2.jonas.deployment.common.rules.JonasMessageDestinationRuleSet; -import org.ow2.jonas.deployment.common.rules.JonasResourceEnvRuleSet; -import org.ow2.jonas.deployment.common.rules.JonasResourceRuleSet; -import org.ow2.jonas.deployment.common.rules.JonasServiceRefRuleSet; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element jonas-client - * - * @author jonas-team - */ - -public class JonasClientRuleSet extends JRuleSetBase { - - /** - *

    RuleSet for processing the contents of a - *jonas-client definition element. - * - * @author jonas-team - */ - - /** - * Construct an object with a specific prefix - */ - public JonasClientRuleSet() { - super("jonas-client/"); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addRuleSet(new JonasEjbRefRuleSet(prefix)); - digester.addRuleSet(new JonasResourceRuleSet(prefix)); - digester.addRuleSet(new JonasResourceEnvRuleSet(prefix)); - digester.addRuleSet(new JonasSecurityRuleSet(prefix)); - digester.addRuleSet(new JonasServiceRefRuleSet(prefix)); - digester.addRuleSet(new JonasMessageDestinationRefRuleSet(prefix)); - digester.addRuleSet(new JonasMessageDestinationRuleSet(prefix)); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasSecurityRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasSecurityRuleSet.java deleted file mode 100644 index 79eb69db73..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/rules/JonasSecurityRuleSet.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element jonas-security - * - * @author jonas-team - */ - -public class JonasSecurityRuleSet extends JRuleSetBase { - - /** - *

    RuleSet for processing the contents of a - *jonas-security definition element. - * - * @author jonas-team - */ - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasSecurityRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-security", - "org.ow2.jonas.deployment.client.xml.JonasSecurity"); - digester.addSetNext(prefix + "jonas-security", - "setJonasSecurity", - "org.ow2.jonas.deployment.client.xml.JonasSecurity"); - digester.addCallMethod(prefix + "jonas-security/jaasfile", - "setJaasfile", 0); - digester.addCallMethod(prefix + "jonas-security/jaasentry", - "setJaasentry", 0); - digester.addCallMethod(prefix + "jonas-security/username", - "setUsername", 0); - digester.addCallMethod(prefix + "jonas-security/password", - "setPassword", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/wrapper/ClientManagerWrapper.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/wrapper/ClientManagerWrapper.java deleted file mode 100644 index 529d35b2de..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/wrapper/ClientManagerWrapper.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Guillaume Sauthier - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.wrapper; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDesc; -import org.ow2.jonas.deployment.client.ClientContainerDeploymentDescException; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.util.Log; - -/** - * Wrap the call to ClientDeploymentDescManager during JOnAS runtime to solve - * classloader problem with Digester. - * - * @author Guillaume Sauthier - */ -public class ClientManagerWrapper { - - /** - * logger - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.deployment.client"); - - /** - * Private Empty constructor for utility class. - */ - private ClientManagerWrapper() { } - - /** - * Wrap the ClientDeploymentDescManager.getDeploymentDesc(URL, ClassLoader, - * ClassLoader). - * - * @param url URL of the client to deploy - * @param moduleCL ClassLoader of the Client - * @param earCL ClassLoader of the application wrapping the client. - * - * @return the ClientContainerDeploymentDesc found at the given URL. - * @throws ClientContainerDeploymentDescException When deployment fails. - */ - public static ClientContainerDeploymentDesc getDeploymentDesc(final URL url, final ClassLoader moduleCL, final ClassLoader earCL) - throws ClientContainerDeploymentDescException { - LoaderManager lm = LoaderManager.getInstance(); - ClientContainerDeploymentDesc ccDD = null; - - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass("org.ow2.jonas.deployment.client.lib.ClientDeploymentDescManager"); - Method m = manager.getDeclaredMethod("getInstance", new Class[] {}); - Object instance = m.invoke(null, new Object[] {}); - m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {URL.class, ClassLoader.class, - ClassLoader.class}); - ccDD = (ClientContainerDeploymentDesc) m.invoke(instance, new Object[] {url, moduleCL, earCL}); - } catch (InvocationTargetException ite) { - Throwable t = ite.getTargetException(); - if (ClientContainerDeploymentDescException.class.isInstance(t)) { - throw (ClientContainerDeploymentDescException) ite.getTargetException(); - } else { - throw new ClientContainerDeploymentDescException("ClientDeploymentDescManager.getDeploymentDesc fails", t); - } - } catch (Exception e) { - e.printStackTrace(); - // TODO add i18n here - throw new ClientContainerDeploymentDescException("Problems when using reflection on ClientDeploymentDescManager", e); - } - - return ccDD; - } - - /** - * Wrap the ClientDeploymentDescManager.getInstance().setAltDD(ClassLoader, URL[], URL[]) - * - * @param earClassLoader ClassLoader of the Application wrapping the Client - * @param clientUrls Array of ClientApplication URL - * @param clientsAltDDs Array of Client Alternative Deployment Desc URL - */ - public static void setAltDD(final URLClassLoader earClassLoader, final URL[] clientUrls, final URL[] clientsAltDDs) { - LoaderManager lm = LoaderManager.getInstance(); - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass("org.ow2.jonas.deployment.client.lib.ClientDeploymentDescManager"); - Method m = manager.getDeclaredMethod("getInstance", new Class[] {}); - Object instance = m.invoke(null, new Object[] {}); - m = manager.getDeclaredMethod("setAltDD", new Class[] {ClassLoader.class, URL[].class, URL[].class}); - m.invoke(instance, new Object[] {earClassLoader, clientUrls, clientsAltDDs}); - } catch (Exception e) { - // Should never occurs - logger.log(BasicLevel.ERROR, e); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/ApplicationClient.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/ApplicationClient.java deleted file mode 100644 index 6e9039be8e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/ApplicationClient.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.xml; - -import org.ow2.jonas.deployment.common.xml.AbsEnvironmentElement; -import org.ow2.jonas.deployment.common.xml.JndiEnvRefsGroupXml; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; - -/** - * This class defines the implementation of the element application-client - * @author jonas-team - */ - -public class ApplicationClient extends AbsEnvironmentElement implements TopLevelElement, JndiEnvRefsGroupXml { - - /** - * callback-handler - */ - private String callbackHandler = null; - - /** - * Constructor - */ - public ApplicationClient() { - super(); - } - - /** - * @return the callback-handler - */ - public String getCallbackHandler() { - return callbackHandler; - } - - /** - * Set the callback-handler - * @param callbackHandler callbackHandler - */ - public void setCallbackHandler(final String callbackHandler) { - this.callbackHandler = callbackHandler; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - @Override - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // icon - sb.append(getIcon().toXML(indent)); - // display-name - sb.append(xmlElement(getDisplayName(), "display-name", indent)); - // description - sb.append(xmlElement(getDescription(), "description", indent)); - // env-entry - sb.append(getEnvEntryList().toXML(indent)); - // ejb-ref - sb.append(getEjbRefList().toXML(indent)); - // service-ref - sb.append(getServiceRefList().toXML(indent)); - // resource-ref - sb.append(getResourceRefList().toXML(indent)); - // resource-env-ref - sb.append(getResourceEnvRefList().toXML(indent)); - // message-destination-ref - sb.append(getMessageDestinationRefList().toXML(indent)); - // persistence-unit-ref - sb.append(getPersistenceUnitRefList().toXML(indent)); - // callback-handler - sb.append(xmlElement(callbackHandler, "callback-handler", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasClient.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasClient.java deleted file mode 100644 index 9bde26e3a0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasClient.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.xml; - -import org.ow2.jonas.deployment.client.JonasAppClientSchemas; -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.xml.AbsJonasEnvironmentElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.JonasMessageDestination; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; - - - -/** - * This class defines the implementation of the element jonas-client - * @author jonas-team - */ - -public class JonasClient extends AbsJonasEnvironmentElement implements TopLevelElement { - - /** - * Header (with right XSD version) for XML - */ - private String header = null; - - /** - * jonas-security - */ - private JonasSecurity jonasSecurity = null; - - /** - * jonas-message-destination - */ - private JLinkedList jonasMessageDestinationList = null; - - /** - * jonas-client element XML header - */ - public static final String JONAS_CLIENT_ELEMENT = CommonsSchemas.getHeaderForElement("jonas-client", - JonasAppClientSchemas.getLastSchema()); - - /** - * Default constructor - */ - public JonasClient() { - super(); - jonasMessageDestinationList = new JLinkedList("jonas-message-destination"); - - header = JONAS_CLIENT_ELEMENT; - } - - /** - * @return the jonas-security - */ - public JonasSecurity getJonasSecurity() { - return jonasSecurity; - } - - /** - * Set the jonas-security - * @param jonasSecurity jonasSecurity - */ - public void setJonasSecurity(JonasSecurity jonasSecurity) { - this.jonasSecurity = jonasSecurity; - } - - /** - * @return the list of all jonas-message-destination elements - */ - public JLinkedList getJonasMessageDestinationList() { - return jonasMessageDestinationList; - } - - /** - * Set the jonas-message-destination - * @param jonasMessageDestinationList jonasMessageDestination - */ - public void setJonasMessageDestinationList(JLinkedList jonasMessageDestinationList) { - this.jonasMessageDestinationList = jonasMessageDestinationList; - } - - /** - * Add a new jonas-message-destination element to this object - * @param jonasMessageDestination the jonas-message-destination object - */ - public void addJonasMessageDestination(JonasMessageDestination jonasMessageDestination) { - jonasMessageDestinationList.add(jonasMessageDestination); - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - if (header != null) { - sb.append(header); - } else { - sb.append("\n"); - } - - indent += 2; - - // jonas-ejb-ref - sb.append(getJonasEjbRefList().toXML(indent)); - // jonas-resource - sb.append(getJonasResourceList().toXML(indent)); - // jonas-resource-env - sb.append(getJonasResourceEnvList().toXML(indent)); - // jonas-security - if (jonasSecurity != null) { - sb.append(jonasSecurity.toXML(indent)); - } - // jonas-service-ref - sb.append(getJonasServiceRefList().toXML(indent)); - // jonas-message-destination-ref - sb.append(getJonasMessageDestinationRefList().toXML(indent)); - // jonas-message-destination - sb.append(jonasMessageDestinationList.toXML(indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - /** - * @return the header. - */ - public String getHeader() { - return header; - } - - /** - * @param header The header to set. - */ - public void setHeader(String header) { - this.header = header; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasSecurity.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasSecurity.java deleted file mode 100644 index 57d8bbd97c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/client/xml/JonasSecurity.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.client.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; - -/** - * This class defines the implementation of the element jonas-security - * @author jonas-team - */ - -public class JonasSecurity extends AbsElement { - - /** - * jaasfile - */ - private String jaasfile = null; - - /** - * jaasentry - */ - private String jaasentry = null; - - /** - * username - */ - private String username = null; - - /** - * password - */ - private String password = null; - - /** - * Default constructor - */ - public JonasSecurity() { - super(); - } - - /** - * @return the jaasfile - */ - public String getJaasfile() { - return jaasfile; - } - - /** - * Set the jaasfile - * @param jaasfile jaasfile - */ - public void setJaasfile(String jaasfile) { - this.jaasfile = jaasfile; - } - - /** - * @return the jaasentry - */ - public String getJaasentry() { - return jaasentry; - } - - /** - * Set the jaasentry - * @param jaasentry jaasentry - */ - public void setJaasentry(String jaasentry) { - this.jaasentry = jaasentry; - } - - /** - * @return the username - */ - public String getUsername() { - return username; - } - - /** - * Set the username - * @param username username - */ - public void setUsername(String username) { - this.username = username; - } - - /** - * @return the password - */ - public String getPassword() { - return password; - } - - /** - * Set the password - * @param password password - */ - public void setPassword(String password) { - this.password = password; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // jaasfile - sb.append(xmlElement(jaasfile, "jaasfile", indent)); - // jaasentry - sb.append(xmlElement(jaasentry, "jaasentry", indent)); - // username - sb.append(xmlElement(username, "username", indent)); - // password - sb.append(xmlElement(password, "password", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfiguration.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfiguration.java deleted file mode 100644 index 5319240966..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfiguration.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.clusterd; - -import org.ow2.jonas.deployment.clusterd.xml.ClusterDaemon; -import org.ow2.jonas.deployment.common.AbsDeploymentDesc; - -/** - * This class provides a cluster daemon configuration structure as described by - * the description file. It extends the AbsDeploymentDesc which requires to - * implement toString() and provides getSAXMsg() method (displayName is not used - * by ClusterDaemonConfiguration). - * @author Benoit Pelletier - */ - -public class ClusterDaemonConfiguration extends AbsDeploymentDesc { - - /** - * The cluster daemon configuraton - */ - private ClusterDaemon clusterDaemon = null; - - /** - * Constructor - * @param clusterDaemon Cluster daemon - */ - public ClusterDaemonConfiguration(final ClusterDaemon clusterDaemon) { - - this.clusterDaemon = clusterDaemon; - - } - - /** - * Return a String representation of the ClusterDaemonConfiguration - * @return a String representation of the ClusterDaemonConfiguration - */ - @Override - public String toString() { - - return toXML(); - } - - /** - * @return Return a XML representation of the clusterDaemonConfiguration - */ - public String toXML() { - - StringBuffer sb = new StringBuffer(); - sb.append(clusterDaemon.toXML()); - return sb.toString(); - } - - /** - * @return the cluster daemon bean - */ - public ClusterDaemon getClusterDaemon() { - return clusterDaemon; - } - - /** - * Set the cluster daemon bean - * @param clusterDaemon cluster daemon - */ - public void setClusterDaemon(final ClusterDaemon clusterDaemon) { - this.clusterDaemon = clusterDaemon; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfigurationException.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfigurationException.java deleted file mode 100644 index c725db35cf..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonConfigurationException.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.clusterd; - -import org.ow2.jonas.deployment.common.DeploymentDescException; - -/** - * Cluster daemon exception when loading its configuration - * @author Benoit Pelletier - */ -public class ClusterDaemonConfigurationException extends DeploymentDescException { - - /** - * version UID - */ - private static final long serialVersionUID = 2734060670758309859L; - - /** - * Constructs a new ClusterDaemonConfigurationException with no detail - * message. - */ - public ClusterDaemonConfigurationException() { - super(); - } - - /** - * Constructs a new ClusterDaemonConfigurationException with the specified - * message. - * @param message the detail message. - */ - public ClusterDaemonConfigurationException(String message) { - super(message); - } - - /** - * Constructs a new ClusterDaemonConfigurationException with the specified - * error cause. - * @param cause the cause of the error. - */ - public ClusterDaemonConfigurationException(Throwable cause) { - super(cause); - } - - /** - * Constructs a new ClusterDaemonConfigurationException with the specified - * error cause. - * @param message the detail message. - * @param cause the cause of the error. - */ - public ClusterDaemonConfigurationException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonSchemas.java deleted file mode 100644 index 36f6e5f831..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/ClusterDaemonSchemas.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.clusterd; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for clusterd.xml file. - * @author Benoit Pelletier - */ -public class ClusterDaemonSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(ClusterDaemonSchemas.class); - - /** - * List of schemas used for clusterd.xml file. - */ - private static final String[] CLUSTER_DAEMON_SCHEMAS = new String[] { - PACKAGE + "jonas-clusterd_5_3.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public ClusterDaemonSchemas() { - super(); - addSchemas(CLUSTER_DAEMON_SCHEMAS); - } - - - /** - * @return Returns the last Schema. - */ - public static String getLastSchema() { - return getLastSchema(CLUSTER_DAEMON_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/lib/ClusterDaemonConfigurationManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/lib/ClusterDaemonConfigurationManager.java deleted file mode 100644 index 4a98a7b7cb..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/lib/ClusterDaemonConfigurationManager.java +++ /dev/null @@ -1,199 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.clusterd.lib; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; - -import org.ow2.jonas.deployment.clusterd.ClusterDaemonConfiguration; -import org.ow2.jonas.deployment.clusterd.ClusterDaemonConfigurationException; -import org.ow2.jonas.deployment.clusterd.ClusterDaemonSchemas; -import org.ow2.jonas.deployment.clusterd.rules.ClusterDaemonRuleSet; -import org.ow2.jonas.deployment.clusterd.xml.ClusterDaemon; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.ow2.jonas.deployment.common.lib.AbsDeploymentDescManager; -import org.ow2.jonas.lib.util.Log; - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Description of the cluster daemon configuration - * @author Benoit Pelletier - */ -public class ClusterDaemonConfigurationManager extends AbsDeploymentDescManager { - - /** - * Path of the clusterd.xml configuration file - */ - public static final String CLUSTERD_FILE_NAME = "clusterd.xml"; - - /** - * Digester used to parse clusterd.xml - */ - private static JDigester clusterDaemonDigester = null; - - /** - * Rules to parse the application.xml - */ - private static ClusterDaemonRuleSet clusterDaemonRuleSet = new ClusterDaemonRuleSet(); - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_CLUSTER_DAEMON); - - /** - * Flag for parser validation - */ - private static boolean parsingWithValidation = true; - /** - * Private Empty constructor for utility class - */ - private ClusterDaemonConfigurationManager() { - } - - /** - * Get an instance of a ClusterDaemonConfiguration by parsing the clusterd.xml configuration file. - * @param clusterDaemonFileName used when specific cluster daemon configuration file name has to be used - * @param classLoaderForCls the classloader for the classes. - * @return a ClusterDaemonConfiguration instance by parsing the clusterd.xml file - * @throws ClusterDaemonConfigurationException if the clusterd.xml file is corrupted. - */ - public static ClusterDaemonConfiguration getClusterDaemonConfiguration(String clusterDaemonFileName, ClassLoader classLoaderForCls) - throws ClusterDaemonConfigurationException { - - //Input Stream - InputStream is = null; - String fileName = null; - if (clusterDaemonFileName == null) { - // clusterd.xml in JONAS_BASE/conf - fileName = System.getProperty("jonas.base") + File.separator - + "conf" + File.separator - + CLUSTERD_FILE_NAME; - } else { - fileName = clusterDaemonFileName; - } - // load clusterd.xml - File clusterDaemonFile = new File(fileName); - if (!clusterDaemonFile.exists()) { - is = classLoaderForCls.getResourceAsStream(CLUSTERD_FILE_NAME); - if (is == null) { - throw new ClusterDaemonConfigurationException("Cannot read the " + fileName + " and " + CLUSTERD_FILE_NAME + " is not accessible in the classpath"); - } - } else { - try { - is = new FileInputStream(clusterDaemonFile); - } catch (Exception e) { - throw new ClusterDaemonConfigurationException("Cannot read the " + CLUSTERD_FILE_NAME, e); - } - } - ClusterDaemon clusterDaemon = loadClusterDaemon(new InputStreamReader(is), CLUSTERD_FILE_NAME); - try { - is.close(); - } catch (IOException e) { - // Can't close the file - logger.log(BasicLevel.WARN, "Cannot close InputStream for " + CLUSTERD_FILE_NAME); - } - - // instantiate the domain map - ClusterDaemonConfiguration clusterDaemonConfiguration = new ClusterDaemonConfiguration(clusterDaemon); - return clusterDaemonConfiguration; - } - /** - * Gets the cluster daemon config file. Default is clusterd.xml - * @param clusterDaemonFileName - * @return cluster daemon configuration file name. - */ - public static String getClusterDaemonFileName(String clusterDaemonFileName) { - String fileName = null; - if (clusterDaemonFileName == null) { - // clusterd.xml in JONAS_BASE/conf - fileName = System.getProperty("jonas.base") + File.separator - + "conf" + File.separator - + CLUSTERD_FILE_NAME; - } else { - fileName = clusterDaemonFileName; - } - return fileName; - - } - - /** - * Load the clusterd.xml file. - * @param reader the Reader of the XML file. - * @param fileName the name of the file (clusterd.xml). - * @throws ClusterDaemonConfigurationException if the file is corrupted. - * @return a ClusterDaemon object. - */ - public static ClusterDaemon loadClusterDaemon(Reader reader, String fileName) throws ClusterDaemonConfigurationException { - - ClusterDaemon clusterDaemon = new ClusterDaemon(); - // Create if domainDigester is null - if (clusterDaemonDigester == null) { - try { - // Create and initialize the digester - - clusterDaemonDigester = new JDigester(clusterDaemonRuleSet, getParsingWithValidation(), true, null, - new ClusterDaemonSchemas()); - } catch (DeploymentDescException e) { - throw new ClusterDaemonConfigurationException(e); - } - } - - try { - clusterDaemonDigester.parse(reader, fileName, clusterDaemon); - } catch (DeploymentDescException e) { - throw new ClusterDaemonConfigurationException(e); - } finally { - clusterDaemonDigester.push(null); - } - - return clusterDaemon; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @return if true, all external entities will be read. - */ - public static boolean getParsingWithValidation() { - return parsingWithValidation; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @param validation if true, all external entities will be read. - */ - public static void setParsingWithValidation(boolean validation) { - ClusterDaemonConfigurationManager.parsingWithValidation = validation; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ClusterDaemonRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ClusterDaemonRuleSet.java deleted file mode 100644 index 3f51838990..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ClusterDaemonRuleSet.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.clusterd.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the cluster-daemon element. - * - * @author Benoit Pelletier - * @author S. Ali Tokmen - */ - -public class ClusterDaemonRuleSet extends JRuleSetBase { - - /** - * Constructs an object with the prefix "cluster-daemon". - */ - public ClusterDaemonRuleSet() { - super("cluster-daemon/"); - } - - /** Add a set of rules to the digester object. - * @param digester Digester instance. - */ - public void addRuleInstances(final Digester digester) { - digester.addCallMethod(prefix + "name", "setName", 0); - digester.addCallMethod(prefix + "domain-name", "setDomainName", 0); - digester.addCallMethod(prefix + "jonas-interaction-mode", "setJonasInteractionMode", 0); - digester.addCallMethod(prefix + "jmx.secured", "setJmxSecured", 0); - digester.addCallMethod(prefix + "jmx.authentication.method", "setJmxAuthenticationMethod", 0); - digester.addCallMethod(prefix + "jmx.authentication.parameter", "setJmxAuthenticationParameter", 0); - digester.addCallMethod(prefix + "jmx.authorization.method", "setJmxAuthorizationMethod", 0); - digester.addCallMethod(prefix + "jmx.authorization.parameter", "setJmxAuthorizationParameter", 0); - digester.addRuleSet(new DiscoveryRuleSet(prefix)); - digester.addRuleSet(new ServerRuleSet(prefix)); - - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/DiscoveryRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/DiscoveryRuleSet.java deleted file mode 100644 index de804961f7..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/DiscoveryRuleSet.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.clusterd.rules; - -import org.apache.commons.digester.Digester; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -public class DiscoveryRuleSet extends JRuleSetBase { - /** - * Construct an object with the prefix. - * @param prefix prefix for the rule set - */ - public DiscoveryRuleSet(String prefix) { - super(prefix); - } - - @Override - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "discovery", - "org.ow2.jonas.deployment.clusterd.xml.Discovery", "discovery"); - digester.addSetNext(prefix + "discovery", - "setDiscovery", - "org.ow2.jonas.deployment.clusterd.xml.Discovery"); - digester.addCallMethod(prefix + "discovery/group-name", "setDiscoveryGroupName", 0); - digester.addCallMethod(prefix + "discovery/stack-file", "setDiscoveryStackFile", 0); - digester.addCallMethod(prefix + "discovery/start-up", "setStartDiscovery", 0); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ServerRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ServerRuleSet.java deleted file mode 100644 index 93f0ac0034..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/rules/ServerRuleSet.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.clusterd.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the server element. - * @author Benoit Pelletier. - */ -public class ServerRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix. - * @param prefix prefix for the rule set. - */ - public ServerRuleSet(final String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object. - * @param digester Digester instance. - */ - public void addRuleInstances(final Digester digester) { - digester.addObjectCreate(prefix + "server", - "org.ow2.jonas.deployment.clusterd.xml.Server"); - digester.addSetNext(prefix + "server", - "addServer", - "org.ow2.jonas.deployment.clusterd.xml.Server"); - digester.addCallMethod(prefix + "server/name", "setName", 0); - digester.addCallMethod(prefix + "server/domain", "setDomain", 0); - digester.addCallMethod(prefix + "server/description", "setDescription", 0); - digester.addCallMethod(prefix + "server/java-home", "setJavaHome", 0); - digester.addCallMethod(prefix + "server/jonas-root", "setJonasRoot", 0); - digester.addCallMethod(prefix + "server/jonas-base", "setJonasBase", 0); - digester.addCallMethod(prefix + "server/xprm", "setXprm", 0); - digester.addCallMethod(prefix + "server/auto-boot", "setAutoBoot", 0); - digester.addCallMethod(prefix + "server/jmx-port", "setJmxPort", 0); - digester.addCallMethod(prefix + "server/jonas-cmd", "setJonasCmd", 0); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/ClusterDaemon.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/ClusterDaemon.java deleted file mode 100644 index 48e51fbdbe..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/ClusterDaemon.java +++ /dev/null @@ -1,356 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.clusterd.xml; - -import org.ow2.jonas.deployment.clusterd.ClusterDaemonSchemas; -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.xml.AbsDescriptionElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; - -/** - * This class defines the configuration of the cluster daemon - * - * @author Benoit Pelletier - * @author eyindanga (Added discovery configuration) - * @author S. Ali Tokmen (Added JMX security) - */ -public class ClusterDaemon extends AbsDescriptionElement implements TopLevelElement { - - /** - * Version UID. - */ - private static final long serialVersionUID = 3212755715938568244L; - - /** - * name. - */ - private String name = null; - - /** - * Domain name - */ - private String domainName = null; - - /** - * JOnAS interaction mode : loosely/tighly coupled. - */ - private String jonasInteractionMode = null; - - /** - * servers - */ - private JLinkedList serverList = null; - - /** - * Discovery configuration : stack file and group name. - */ - private Discovery discovery = null; - - /** - * Whether JMX is secured. - */ - private boolean jmxSecured = false; - - /** - * JMX authentication method. - */ - private String jmxAuthenticationMethod = null; - - /** - * JMX authentication method's parameter. - */ - private String jmxAuthenticationParameter = null; - - /** - * JMX authorization method. - */ - private String jmxAuthorizationMethod = null; - - /** - * JMX authorization method's parameter. - */ - private String jmxAuthorizationParameter = null; - - /** - * XML export header. - */ - private static final String header = CommonsSchemas.getHeaderForElement("cluster-daemon", - ClusterDaemonSchemas.getLastSchema()); - - /** - * Constructor - */ - public ClusterDaemon() { - super(); - serverList = new JLinkedList("server"); - } - - /** - * Add a new server element to this object - * @param server the Server object - */ - @SuppressWarnings("unchecked") - public void addServer(final Server server) { - serverList.add(server); - } - - /** - * @return Returns the serverList. - */ - public JLinkedList getServerList() { - return serverList; - } - - /** - * @param serverList The serverList to set. - */ - public void setServerList(final JLinkedList serverList) { - this.serverList = serverList; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prefixing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append(header); - indent += 2; - - // name - if (getName() != null) { - sb.append(xmlElement(getName(), "name", indent)); - } - - // domain-name - if (getDomainName() != null) { - sb.append(xmlElement(getDomainName(), "domain-name", indent)); - } - - // jonas-interaction-mode - if (getJonasInteractionMode() != null) { - sb.append(xmlElement(getJonasInteractionMode(), "jonas-interaction-mode", indent)); - } - - // JMX security - sb.append(xmlElement(getJmxSecured(), "jmx.secured", indent)); - sb.append(xmlElement(getJmxAuthenticationMethod(), "jmx.authentication.method", indent)); - sb.append(xmlElement(getJmxAuthenticationParameter(), "jmx.authentication.parameter", indent)); - sb.append(xmlElement(getJmxAuthorizationMethod(), "jmx.authorization.method", indent)); - sb.append(xmlElement(getJmxAuthorizationParameter(), "jmx.authorization.parameter", indent)); - - //discovery config - if (discovery != null) { - sb.append(discovery.toXML(indent)); - } - // servers - sb.append(getServerList().toXML(indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - /** - * - * @return the domain name - */ - public String getDomainName() { - return domainName; - } - - /** - * Sets the domain name - * @param domainName domain name - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * - * @return the name - */ - public String getName() { - return name; - } - - /** - * set the name - * @param name name - */ - public void setName(final String name) { - this.name = name; - } - - /** - * - * @return the interaction mode with JOnAS - */ - public String getJonasInteractionMode() { - return jonasInteractionMode; - } - - - /** - * set the interaction mode with JOnAS. - * @param jonasInteraction interaction mode - */ - public void setJonasInteractionMode(final String jonasInteractionMode) { - this.jonasInteractionMode = jonasInteractionMode; - } - - /** - * @return the discoveryStackFile - */ - public String getDiscoveryStackFile() { - return discovery.getDiscoveryStackFile(); - } - - /** - * @param discoveryStackFile the discoveryStackFile to set - */ - public void setDiscoveryStackFile(final String discoveryStackFile) { - this.discovery.setDiscoveryStackFile(discoveryStackFile); - } - - /** - * @return the discoveryGroupName - */ - public String getDiscoveryGroupName() { - return this.discovery.getDiscoveryGroupName(); - } - - /** - * @param discoveryGroupName the discoveryGroupName to set - */ - public void setDiscoveryGroupName(final String discoveryGroupName) { - this.discovery.setDiscoveryGroupName(discoveryGroupName); - } - - /** - * @return the discovery - */ - public Discovery getDiscovery() { - return discovery; - } - - /** - * @param discovery the discovery to set - */ - public void setDiscovery(Discovery discovery) { - this.discovery = discovery; - } - - /** - * @return Whether JMX is secured. - */ - public boolean isJmxSecured() { - return jmxSecured; - } - - /** - * @return Whether JMX is secured. - */ - public String getJmxSecured() { - return Boolean.toString(jmxSecured); - } - - /** - * @param jmxSecured Whether JMX is secured. - */ - public void setJmxSecured(boolean jmxSecured) { - this.jmxSecured = jmxSecured; - } - - /** - * @param jmxSecured Whether JMX is secured. - */ - public void setJmxSecured(String jmxSecured) { - this.jmxSecured = "true".equalsIgnoreCase(jmxSecured); - } - - /** - * @return JMX authentication method. - */ - public String getJmxAuthenticationMethod() { - return jmxAuthenticationMethod; - } - - /** - * @param jmxAuthenticationMethod JMX authentication method. - */ - public void setJmxAuthenticationMethod(String jmxAuthenticationMethod) { - this.jmxAuthenticationMethod = jmxAuthenticationMethod; - } - - /** - * @return JMX authentication method's parameter. - */ - public String getJmxAuthenticationParameter() { - return jmxAuthenticationParameter; - } - - /** - * @param jmxAuthenticationParameter JMX authentication method's parameter. - */ - public void setJmxAuthenticationParameter(String jmxAuthenticationParameter) { - this.jmxAuthenticationParameter = jmxAuthenticationParameter; - } - - /** - * @return JMX authorization method. - */ - public String getJmxAuthorizationMethod() { - return jmxAuthorizationMethod; - } - - /** - * @param jmxAuthorizationMethod JMX authorization method. - */ - public void setJmxAuthorizationMethod(String jmxAuthorizationMethod) { - this.jmxAuthorizationMethod = jmxAuthorizationMethod; - } - - /** - * @return JMX authentication method's parameter. - */ - public String getJmxAuthorizationParameter() { - return jmxAuthorizationParameter; - } - - /** - * @param jmxAuthorizationParameter JMX authentication method's parameter. - */ - public void setJmxAuthorizationParameter(String jmxAuthorizationParameter) { - this.jmxAuthorizationParameter = jmxAuthorizationParameter; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Discovery.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Discovery.java deleted file mode 100644 index 6051119283..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Discovery.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.clusterd.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; - -public class Discovery extends AbsElement { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * File name for JGroups discovery stack - */ - - private String discoveryStackFile = null; - - /** - * JGroups discovery will be connected to this group. - */ - private String discoveryGroupName = null; - - /** - * Set to true to start JGroups discovery. - */ - private boolean startDiscovery = false; - - /** - * @return the discoveryStackFile - */ - public String getDiscoveryStackFile() { - return discoveryStackFile; - } - - /** - * @param discoveryStackFile the discoveryStackFile to set - */ - public void setDiscoveryStackFile(final String discoveryStackFile) { - this.discoveryStackFile = discoveryStackFile; - } - - /** - * @return the discoveryGroupName - */ - public String getDiscoveryGroupName() { - return discoveryGroupName; - } - - /** - * @param discoveryGroupName the discoveryGroupName to set - */ - public void setDiscoveryGroupName(final String discoveryGroupName) { - this.discoveryGroupName = discoveryGroupName; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - @Override - public String toXML(final int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - sb.append(xmlElement(this.getDiscoveryGroupName(), "group-name", indent + 2)); - sb.append(xmlElement(this.getDiscoveryStackFile(), "stack-file", indent + 2)); - sb.append(xmlElement(String.valueOf(this.getStartDiscovery()), "start-up", indent + 2)); - sb.append(indent(indent)); - sb.append("\n"); - return sb.toString(); - } - - /** - * @return the startDiscovery - */ - public boolean getStartDiscovery() { - return startDiscovery; - } - - /** - * @param startDiscovery the startDiscovery to set - */ - public void setStartDiscovery(final String startDiscovery) { - this.startDiscovery = new Boolean(startDiscovery); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Server.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Server.java deleted file mode 100644 index 97cb27d8f4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/clusterd/xml/Server.java +++ /dev/null @@ -1,286 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.clusterd.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; - -/** - * - * Server element - * @author pelletib - */ -public class Server extends AbsElement { - - /** - * Version UID - */ - private static final long serialVersionUID = -7044912860997997046L; - - /** - * JOnAS instance name - */ - private String name = null; - - /** - * JOnAS instance domain name - */ - private String domain = null; - - /** - * description - */ - private String description = null; - - /** - * JAVA_HOME directory - */ - private String javaHome = null; - - /** - * JONAS_ROOT directory - */ - private String jonasRoot = null; - - /** - * JONAS_BASE directory - */ - private String jonasBase = null; - - /** - * Extra parameters for starting the JVM - */ - private String xprm = null; - - /** - * Automatic boot - */ - private String autoBoot = null; - - /** - * User command for controlling JOnAS (optional) - * If not set, use the JOnAS one - */ - private String jonasCmd = null; - - /** - * Constructor - */ - public Server() { - super(); - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the domain. - */ - public String getDomain() { - return domain; - } - - /** - * @param domain The domain to set. - */ - public void setDomain(String domain) { - this.domain= domain; - } - - /** - * @return Returns the JAVA_HOME dir. - */ - public String getJavaHome() { - return javaHome; - } - - /** - * @param javaHome The JAVA_HOME to set. - */ - public void setJavaHome(String javaHome) { - this.javaHome = javaHome; - } - - /** - * @return Returns the JONAS_ROOT. - */ - public String getJonasRoot() { - return jonasRoot; - } - - /** - * @param jonasRoot The JONAS_ROOT to set. - */ - public void setJonasRoot(String jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return Returns the JONAS_BASE. - */ - public String getJonasBase() { - return jonasBase; - } - - /** - * @param jonasBase The JONAS_BASE to set. - */ - public void setJonasBase(String jonasBase) { - this.jonasBase = jonasBase; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - /** - * @param description The description to set. - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - if (name != null) { - sb.append(xmlElement(name, "name", indent)); - } - // domain - if (domain != null) { - sb.append(xmlElement(domain, "domain", indent)); - } - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - // javaHome - if (getJavaHome() != null) { - sb.append(xmlElement(getJavaHome(), "java-home", indent)); - } - // jonasRoot - if (getJonasRoot() != null) { - sb.append(xmlElement(getJonasRoot(), "jonas-root", indent)); - } - // jonasBase - if (getJonasBase() != null) { - sb.append(xmlElement(getJonasBase(), "jonas-base", indent)); - } - - // xprm - if (getXprm() != null) { - sb.append(xmlElement(getXprm(), "xprm", indent)); - } - - // autoBoot - sb.append(xmlElement(new Boolean(isAutoBoot()).toString(), "auto-boot", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - /** - * Set the auto boot for the server - * @param autoBoot true if automatic boot is set - */ - public void setAutoBoot(String autoBoot) { - this.autoBoot = autoBoot; - } - - /** - * @return true/false - */ - public String getAutoBoot() { - return this.autoBoot; - } - - /** - * - * @return true if the auto boot is set - */ - public boolean isAutoBoot() { - return new Boolean(getAutoBoot()).booleanValue(); - } - - - /** - * - * @return the extra parameters - */ - public String getXprm() { - return xprm; - } - - /** - * Set the extra parameters - * @param xprm extra parameters - */ - public void setXprm(String xprm) { - this.xprm = xprm; - } - - /** - * - * @return JOnAS command - */ - public String getJonasCmd() { - return jonasCmd; - } - - /** - * Set the JOnAS command - * @param jonasCmd user command - */ - public void setJonasCmd(String jonasCmd) { - this.jonasCmd = jonasCmd; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/AbsDeploymentDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/AbsDeploymentDesc.java deleted file mode 100644 index 6e2dba98e8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/AbsDeploymentDesc.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Ludovic BERT & Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.common; - -// SAX imports -import org.ow2.jonas.deployment.api.IDeploymentDesc; -import org.xml.sax.SAXParseException; - - -/** - * This class provides an abstract implementation of the - * DeploymentDescriptor interface of JOnAS - * @author Ludovic Bert - * @author Florent Benoit - */ - -public abstract class AbsDeploymentDesc implements IDeploymentDesc { - - - /** - * The displayName field - */ - protected String displayName = null; - - - /** - * Get the display name of the deployment descriptor. - * @return the display name of the deployment descriptor. - */ - public String getDisplayName() { - return displayName; - } - - /** - * Return a String representation of the DeploymentDesc. - * @return a String representation of the DeploymentDesc. - */ - public abstract String toString(); - - /** - * build a message from SAX Exception in a consistent style, consistent - * with emacs compile mode (same as grep, cc, javac, etc). - * @param fileName name of the file - * @param exception the SAX exception - * @param msg the string message - * @return a message which is in a consistent style - */ - protected static String getSAXMsg(String fileName, - SAXParseException exception, String msg) { - String ret = fileName + ":" + exception.getLineNumber() + ":" - + exception.getColumnNumber() + ": "; - ret += msg; - return ret; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsDTDs.java deleted file mode 100644 index d67ee6071e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsDTDs.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import org.ow2.jonas.deployment.api.DTDs; - - -/** - * This class defines the declarations of defaults DTDs used for J2EE 1.4 and less - * @author Florent Benoit - */ -public abstract class CommonsDTDs implements DTDs { - - /** - * Commons DTDs location. - */ - private static final String PACKAGE = "org/ow2/jonas/deployment/"; - - /** - * List of default dtds. - */ - private static final String[] DEFAULT_DTDS = new String[] { - PACKAGE + "XMLSchema.dtd", - PACKAGE + "datatypes.dtd" - }; - - /** - * List of default publicId. - */ - private static final String[] DEFAULT_DTDS_PUBLIC_ID = new String[] { - "-//W3C//DTD XMLSCHEMA 200102//EN", - "datatypes" - }; - - - /** - * Map where mapping publicId/dtds are stored. - */ - private static HashMap dtdsMapping = null; - - /** - * Build a new object for DTDs handling. - */ - public CommonsDTDs() { - dtdsMapping = new HashMap(); - addMapping(DEFAULT_DTDS, DEFAULT_DTDS_PUBLIC_ID); - } - - /** - * Gets the mapping between publicIds and DTDs. - * @return the mapping between publicIds and DTDs. - */ - public Map getMapping() { - return dtdsMapping; - } - - - - /** - * Add to the list of DTDS the given dtds/publicId. - * @param dtds array of dtds - * @param publicIds array of publicIds - */ - protected void addMapping(String[] dtds, String[] publicIds) { - if (dtds.length != publicIds.length) { - throw new IllegalStateException("SEVERE ERROR !!! Number of dtds is different of the number of PublicId !!! check the source code"); - } - - URL url = null; - for (int i = 0; i < dtds.length; i++) { - url = CommonsDTDs.class.getResource("/" + dtds[i]); - if (url == null) { - throw new IllegalStateException("'" + dtds[i] + "' was not found in the current classloader !"); - } - dtdsMapping.put(publicIds[i], url.toString()); - } - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsSchemas.java deleted file mode 100644 index 79099e0621..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/CommonsSchemas.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - - -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.deployment.api.Schemas; - - -/** - * This class defines the declarations of the default Java EE 5 Schemas. - * @author Florent Benoit - */ -public abstract class CommonsSchemas implements Schemas { - - /** - * Commons XML Schemas location. - */ - private static final String PACKAGE = "org/ow2/jonas/deployment/"; - - /** - * List of schemas used by components. - */ - private static final String[] DEFAULT_SCHEMAS = new String[] { - PACKAGE + "javaee_6.xsd", - PACKAGE + "javaee_web_services_client_1_3.xsd", - PACKAGE + "javaee_5.xsd", - PACKAGE + "javaee_web_services_client_1_2.xsd", - PACKAGE + "j2ee_1_4.xsd", - PACKAGE + "j2ee_web_services_client_1_1.xsd", - PACKAGE + "xml.xsd", - PACKAGE + "jonas_j2ee_4_0.xsd", - PACKAGE + "jonas_j2ee_4_1.xsd", - PACKAGE + "jonas_j2ee_4_1_2.xsd", - PACKAGE + "jonas_j2ee_4_1_4.xsd", - PACKAGE + "jonas_j2ee_4_2.xsd" - }; - - - /** - * List where the local schemas URLs are stored. - */ - private static List localSchemas = null; - - - /** - * Build a new object for Schemas handling. - */ - public CommonsSchemas() { - localSchemas = new ArrayList(); - addSchemas(DEFAULT_SCHEMAS); - } - - /** - * Gets the URLs of the local schemas. - * @return the URLs of the local schemas - */ - public List getlocalSchemas() { - return localSchemas; - } - - - /** - * Add to our repository the given local schemas. - * @param schemas schemas to add to the repository - * @throws IllegalStateException if the dtds is not found as resource - */ - protected static void addSchemas(final String[] schemas) throws IllegalStateException { - URL url = null; - for (int i = 0; i < schemas.length; i++) { - url = CommonsSchemas.class.getResource("/" + schemas[i]); - if (url == null) { - throw new IllegalStateException("'" + schemas[i] + "' was not found in the current classloader !"); - } - localSchemas.add(url.toString()); - } - } - - /** - * @param element name of the root element (jonas-ejb-jar, ...) - * @param schema XML Schema - * @return a header for the right element with last element - */ - public static String getHeaderForElement(final String element, final String schema) { - StringBuffer header = new StringBuffer(); - header.append("\n"); - header.append("<"); - header.append(element); - header.append(" xmlns=\"http://www.objectweb.org/jonas/ns\"\n"); - header.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"); - header.append(" xsi:schemaLocation=\"http://www.objectweb.org/jonas/ns\n"); - header.append(" http://jonas.ow2.org/ns/"); - // add the schema - header.append(schema); - header.append("\" >\n"); - - return header.toString(); - } - - /** - * @param element name of the root element (jonas-ejb-jar, ...) - * @param schema XML Schema - * @return a header for the right element with last element - */ - public static String getHeaderForStandardElement(final String element, final String schema) { - StringBuffer header = new StringBuffer(); - header.append("\n"); - header.append("<"); - header.append(element); - header.append(" xmlns=\"http://java.sun.com/xml/ns/javaee\"\n"); - header.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"); - header.append(" version=\"5\"\n"); - header.append(" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n"); - header.append(" http://java.sun.com/xml/ns/javaee/"); - // add the schema - header.append(schema); - header.append("\" >\n"); - - return header.toString(); - } - - /** - * @param schemas array of schema locations - * @param packageName package name to remove from schema location. - * @return Returns the last Schema for a given set of schemas. - */ - protected static String getLastSchema(final String[] schemas, final String packageName) { - String schema = schemas[schemas.length - 1]; - return schema.substring(packageName.length()); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DeploymentDescException.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DeploymentDescException.java deleted file mode 100644 index 05a66a7013..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DeploymentDescException.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Lutris Technologies Inc http://www.lutris.com - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - - -package org.ow2.jonas.deployment.common; - -import java.io.PrintStream; -import java.io.PrintWriter; - -/** - * The DeploymentDesc exception uses the pattern defined by the Enhydra - * com.lutris.util.ChainedException - * The source has been temporary duplicated to prevent Jonas using - * from external dependencies. - * @author Christophe Ney - */ -public class DeploymentDescException extends Exception { - - /** - * Cause of the exception - */ - private Throwable cause; - - /** - * Construct an exception without anything - */ - public DeploymentDescException() { - super(); - cause = null; - } - - - /** - * Construct an exception without a specified cause. - * - * @param msg The message associated with the exception. - */ - public DeploymentDescException(String msg) { - super(msg); - cause = null; - } - - /** - * Construct an exception with an associated causing exception. - * - * @param msg The message associated with the exception. - * @param cause The error or exception that cause this - * exception. - */ - public DeploymentDescException(String msg, - Throwable cause) { - super(msg); - this.cause = cause; - } - - /** - * Construct an exception from a causing exception. - * - * @param cause The error or exception that cause this - * exception. The message will be take be this object's - * messasge. - */ - public DeploymentDescException(Throwable cause) { - super(cause.getMessage()); - this.cause = cause; - } - - /** - * @return the message associated with this exception. If causes - * are included, they will be appended to the message. - */ - public String getMessage() { - String msg = super.getMessage(); - if (cause == null) { - return msg; - } else { - return msg + ": " + cause.getMessage(); - } - } - - /** - * Gets the causing exception associated with this exception. - * @return The causing exception or null if no cause is specified. - */ - public Throwable getCause() { - return cause; - } - - /** - * Prints this DeploymentDescException and its backtrace, and the causes - * and their stack traces to the standard error stream. - */ - public void printStackTrace() { - super.printStackTrace(); - if (cause != null) { - System.err.println(); - System.err.println("*** Caused by:"); - cause.printStackTrace(); - } - } - - /** - * Prints this DeploymentDescException and its backtrace, and the causes - * and their stack traces to the e specified print stream. - * @param s print the trace on a specific print stream - */ - public void printStackTrace(PrintStream s) { - super.printStackTrace(s); - if (cause != null) { - s.println(); - s.println ("*** Caused by:"); - cause.printStackTrace(s); - } - } - - /** - * Prints this DeploymentDescException and its backtrace, and the causes - * and their stack traces to the e specified print writer. - * @param s print the trace on a specific print stream - */ - public void printStackTrace(PrintWriter s) { - super.printStackTrace(s); - if (cause != null) { - s.println(); - s.println("*** Caused by:"); - cause.printStackTrace(s); - } - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DescriptionGroupDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DescriptionGroupDesc.java deleted file mode 100644 index caede2cab8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/DescriptionGroupDesc.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.common; - -// SAX imports -import org.ow2.jonas.deployment.api.IDescriptionGroupDesc; -import org.xml.sax.SAXParseException; - - -/** - * This class is used to keep the usage of the contained description related - * elements consistent acoross J2EE deployment descriptors. - * Elements are "description", "display-name", "icon" - * used by application, connector, ejb-jar, webservices. - * - * @author Philippe Coq - * - */ - -public abstract class DescriptionGroupDesc implements IDescriptionGroupDesc { - - /** - * The description field - */ - protected String description = null; - - /** - * The displayName field - */ - protected String displayName = null; - - /** - * The small-icon field - */ - protected String smallIcon = null; - - /** - * The large-icon field - */ - protected String largeIcon = null; - - /** - * Get the display name of the deployment descriptor. - * @return the display name of the deployment descriptor. - */ - public String getDisplayName() { - return displayName; - } - - /** - * Get the description of the deployment descriptor. - * @return the description of the deployment descriptor. - */ - public String getDescription() { - return description; - } - - /** - * Get the small-icon of the deployment descriptor. - * @return the small-icon of the deployment descriptor. - */ - public String getSmallIcon() { - return smallIcon; - } - - /** - * Get the large-icon of the deployment descriptor. - * @return the large-icon of the deployment descriptor. - */ - public String getLargeIcon() { - return largeIcon; - } - - /** - * Return a String representation of the DeploymentDesc. - * @return a String representation of the DeploymentDesc. - */ - public abstract String toString(); - - /** - * build a message from SAX Exception in a consistent style, consistent - * with emacs compile mode (same as grep, cc, javac, etc). - * @param fileName name of the file - * @param exception the SAX exception - * @param msg the string message - * @return a message which is in a consistent style - */ - protected static String getSAXMsg(String fileName, - SAXParseException exception, String msg) { - String ret = fileName + ":" + exception.getLineNumber() + ":" - + exception.getColumnNumber() + ": "; - ret += msg; - return ret; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbLocalRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbLocalRefDesc.java deleted file mode 100644 index 2582347932..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbLocalRefDesc.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Christophe Ney - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IEJBLocalRefDesc; -import org.ow2.jonas.deployment.common.xml.EjbLocalRef; - - -/** - * This class represents the description of an EjblocalRef object - * @author Christophe Ney - * @author Florent Benoit - */ -public class EjbLocalRefDesc implements IEJBLocalRefDesc { - - /** - * The ejb local ref name. - */ - private String ejbRefName = null; - - /** - * The type of the ejb ref - */ - private String ejbRefType = null; - - /** - * The local home of the ejb local ref. - */ - private String localHome = null; - - /** - * The local interface name of the ejb local ref. - */ - private String local = null; - - /** - * The ejb link of the ejb local ref. - */ - private String ejbLink = null; - - /** - * The jndi name of the ejb local ref. - */ - private String jndiName = null; - - - /** - * Construct a descriptor for an ejb-local-ref tag. - * @param ejbLocalRef the ejb local ref resulting of the xml parsing. - * @throws DeploymentDescException when missing information for - * creating the EjbLocalRefDesc. - */ - public EjbLocalRefDesc(EjbLocalRef ejbLocalRef) throws DeploymentDescException { - ejbRefName = ejbLocalRef.getEjbRefName(); - ejbRefType = ejbLocalRef.getEjbRefType(); - localHome = ejbLocalRef.getLocalHome(); - local = ejbLocalRef.getLocal(); - if (ejbLocalRef.getEjbLink() == null) { - String err = "ejb-link missing for ejb-local-ref '" + ejbRefName + "'."; - throw new DeploymentDescException(err); - } - ejbLink = ejbLocalRef.getEjbLink(); - } - - /** - * Get the name of the ejb-ref - * @return String representation of the ejb-ref-name. - */ - public String getEjbRefName() { - return ejbRefName; - } - - /** - * Get the ejb-ref-type. - * @return String representation of the ejb-ref-type. - */ - public String getEjbRefType() { - return ejbRefType; - } - - /** - * Get the LocalHome class of the target bean - * @return String representation of the class. - */ - public String getLocalHome() { - return localHome; - } - - /** - * Get the Local class of the target bean - * @return String representation of the class. - */ - public String getLocal() { - return local; - } - - /** - * Get the ejb-link - * @return String representation of the ejb-link - */ - public String getEjbLink() { - return ejbLink; - } - - /** - * Get the jndi name of the ejb-local-ref. - * @return the string representation of the JNDI name - */ - public String getJndiLocalName() { - return jndiName; - } - - /** - * Set the jndi name of the ejb-local-ref. - * @param jndiName the string representation of the jndi name. - */ - public void setJndiLocalName(String jndiName) { - this.jndiName = jndiName; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetEjbRefName()=" + getEjbRefName()); - ret.append("\ngetEjbRefType()=" + getEjbRefType()); - ret.append("\ngetLocalHome()=" + getLocalHome()); - ret.append("\ngetLocal()=" + getLocal()); - ret.append("\ngetEjbLink()=" + getEjbLink()); - ret.append("\ngetJndiLocalName()=" + getJndiLocalName()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbRefDesc.java deleted file mode 100644 index 49d1433689..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EjbRefDesc.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.common.xml.EjbRef; -import org.ow2.jonas.deployment.common.xml.JonasEjbRef; - - -/** - * This class represents the description of an EjbRef object - * @author Christophe Ney - * @author Florent Benoit - */ -public class EjbRefDesc implements IEJBRefDesc { - - /** - * The ejb ref name. - */ - private String ejbRefName = null; - - /** - * The type of the ejb ref - */ - private String ejbRefType = null; - - /** - * Fully qualified name of the enterprise bean's home interface - */ - private String home = null; - - /** - * Fully qualified name of the enterprise bean's remote interface - */ - private String remote = null; - - /** - * The ejb link of the ejb local ref. - */ - private String ejbLink = null; - - /** - * The jndi name of the ejb local ref. - */ - private String jndiName = null; - - - /** - * Construct a descriptor for an ejb-ref tag. - * @param ejbRef the ejb ref resulting of the xml parsing. - * @param jonasEjbRef the jonas ejb ref resulting of the xml parsing. - */ - public EjbRefDesc(EjbRef ejbRef, JonasEjbRef jonasEjbRef) { - ejbRefName = ejbRef.getEjbRefName(); - ejbRefType = ejbRef.getEjbRefType(); - ejbLink = null; - if (ejbRef.getEjbLink() != null) { - ejbLink = ejbRef.getEjbLink(); - } - jndiName = null; - if (jonasEjbRef != null) { - jndiName = jonasEjbRef.getJndiName(); - } - this.home = ejbRef.getHome(); - this.remote = ejbRef.getRemote(); - - } - - public String getEjbRefName() { - return ejbRefName; - } - - public String getEjbRefType() { - return ejbRefType; - } - - public String getEjbLink() { - return ejbLink; - } - - - public String getJndiName() { - return jndiName; - } - - /** - * Set the jndi name of the ejb-ref. - * @param jndiName representation of the JNDI name - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetEjbRefName()=" + getEjbRefName()); - ret.append("\ngetEjbRefType()=" + getEjbRefType()); - ret.append("\ngetEjbLink()=" + getEjbLink()); - ret.append("\ngetJndiName()=" + getJndiName()); - return ret.toString(); - } - - public String getHome() { - return home; - } - - public String getRemote() { - return remote; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EnvEntryDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EnvEntryDesc.java deleted file mode 100644 index 446bfbe9b5..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/EnvEntryDesc.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Christophe Ney - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.common.xml.EnvEntry; -import org.ow2.jonas.lib.util.Log; - - -/** - * This class represents the description of an EnvEntry object - * @author Christophe Ney - * @author Florent Benoit - */ -public class EnvEntryDesc implements IEnvEntryDesc { - - /** - * logger - */ - protected static Logger logger = Log.getLogger(Log.JONAS_DEPLOY_PREFIX); - - /** - * The env entry name. - */ - private String name; - - /** - * The env entry type. - */ - private Class type; - - /** - * The lookup name element. - */ - private String lookupName; - - /** - * The env entry value. - */ - private Object value; - - /** - * Construct a descriptor for an env-entry tag. - * @param env the env-entry resulting of the xml parsing. - * @throws DeploymentDescException when missing information for - * creating the EnvEntryDesc. - */ - public EnvEntryDesc(EnvEntry env) throws DeploymentDescException { - name = env.getEnvEntryName(); - String t = env.getEnvEntryType(); - String v = null; - if (env.getEnvEntryValue() != null) { - v = env.getEnvEntryValue(); - } - - this.lookupName = env.getEnvEntryLookupName(); - - - if (t == null) { - return; - } - - - try { - if (t.equals(Boolean.class.getName())) { - type = Boolean.class; - if (v != null) { - if (v.equalsIgnoreCase("true")) { - value = Boolean.TRUE; - } else if (v.equalsIgnoreCase("false")) { - value = Boolean.FALSE; - } else { - value = Boolean.FALSE; - logger.log(BasicLevel.WARN, v + " is not a valid boolean value for env-entry " + name + "', defaulting to false"); - } - } else { - value = Boolean.FALSE; - } - - } else if (t.equals(String.class.getName())) { - type = String.class; - if (v != null) { - value = v; - } else { - value = new String(); - } - } else if (t.equals(Integer.class.getName())) { - type = Integer.class; - if (v != null) { - value = new Integer(v); - } else { - value = new Integer(0); - } - } else if (t.equals(Character.class.getName())) { - type = Character.class; - if (v != null) { - if (v.length() != 1) { - throw new DeploymentDescException("The value '" + v + "' is not a valid value for env-entry of type java.lang.Character."); - } - value = new Character(v.charAt(0)); - } else { - value = new Character("".charAt(0)); - } - } else if (t.equals(Double.class.getName())) { - type = Double.class; - if (v != null) { - value = new Double(v); - } else { - value = new Double(0); - } - } else if (t.equals(Byte.class.getName())) { - type = Byte.class; - if (v != null) { - value = new Byte(v); - } else { - value = new Byte(""); - } - } else if (t.equals(Short.class.getName())) { - type = Short.class; - if (v != null) { - value = new Short(v); - } else { - value = new Short(""); - } - } else if (t.equals(Long.class.getName())) { - type = Long.class; - if (v != null) { - value = new Long(v); - } else { - value = new Long(0); - } - } else if (t.equals(Float.class.getName())) { - type = Float.class; - if (v != null) { - value = new Float(v); - } else { - value = new Float(0); - } - } else { - throw new DeploymentDescException(t + " is not a valid type for env-entry " + name); - } - } catch (NumberFormatException e) { - throw new DeploymentDescException(v + " is not a valid value for env-entry " + name, e); - } - - } - - public String getName() { - return name; - } - - public Class getType() { - return type; - } - - public boolean hasValue() { - return value != null; - } - - public Object getValue() { - // An env-entry value is optional, so no error should be thrown - /* - * if (value == null) { - * throw new Error("Value not set for env-entry " + name); - * } - */ - return value; - } - - /** - * @return Env-Entry lookup name. - */ - public String getLookupName() { - return lookupName; - } - - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName()=" + getName()); - ret.append("\ngetType()=" + getType()); - if (hasValue()) { - ret.append("\ngetValue()=" + getValue().toString()); - } - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/HandlerDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/HandlerDesc.java deleted file mode 100644 index 6e539e96c4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/HandlerDesc.java +++ /dev/null @@ -1,271 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial Developer : Delplanque Xavier & Sauthier Guillaume - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.deployment.common; - -import java.util.List; -import java.util.Properties; -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.xml.Handler; -import org.ow2.jonas.deployment.common.xml.InitParam; - - - -/** - * The Handler class describe both - * - a Handler reference to use on the client side of a Web Service, - * - and a Handler description. - * The difference is that the port-names attribute is present for a handler reference, - * and the port-names attribute does not exist for a handler description. - * - * @author Guillaume Sauthier - * @author Xavier Delplanque - * @author Helene Joanin - */ -public class HandlerDesc { - - /** The name of the handler (must be unique) */ - private String name; - - /** The classname of the Handler */ - private String className; - - /** The handler class */ - private Class clazz; - - /** Params needed to initialize the handler */ - private Properties params = new Properties(); - - /** The list of SOAP Headers the handler will access */ - private List headers = new Vector(); - - /** The list of SOAP actor the handler will play as a role */ - private List roles = new Vector(); - - /** List of port names the handler is associated with */ - private List portNames = new Vector(); - - /** - * Creates a new HandlerRef object. - * - * @param classLoader ejbjar classLoader - * @param handler contains informations defined in web deployment - * descriptor (service-ref) - * - * @throws DeploymentDescException When Construction fails. - */ - public HandlerDesc(ClassLoader classLoader, Handler handler) - throws DeploymentDescException { - - name = handler.getHandlerName(); - - className = handler.getHandlerClass(); - - try { - clazz = classLoader.loadClass(className); - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("handler class not found", e); - } - - // fill init params table - List iparams = handler.getInitParamList(); - try { - for (int i = 0; i < iparams.size(); i++) { - // add in params table each init parameter name and associated value - InitParam p = (InitParam) iparams.get(i); - - if (p != null) { - params.put(p.getParamName(), p.getParamValue()); - } - } - } catch (NullPointerException e) { - throw new DeploymentDescException("parameter name missing", e); - } - - // fill headers a list containing soap header QNames - List shl = handler.getSoapHeaderList(); - for (int i = 0; i < shl.size(); i++) { - // build qnames and add it in the table - org.ow2.jonas.deployment.common.xml.Qname sh = (org.ow2.jonas.deployment.common.xml.Qname) shl.get(i); - - if (sh != null) { - QName qn = sh.getQName(); - headers.add(qn); - } - } - - // fill roles a list containing soap role names - List srl = handler.getSoapRoleList(); - for (int i = 0; i < srl.size(); i++) { - String role = (String) srl.get(i); - if (role != null) { - roles.add(role); - } - } - - // fill portNames a list containing ports names - List pnl = handler.getPortNameList(); - for (int i = 0; i < pnl.size(); i++) { - String pn = (String) pnl.get(i); - if (pn != null) { - portNames.add(pn); - } - } - } - - /** - * Return the name of the Handler. - * - * @return the name of the Handler. - */ - public String getName() { - return name; - } - - - /** - * Return the name of class of the Handler. - * - * @return the name of class of the Handler. - */ - public String getHandlerClassName() { - return className; - } - - /** - * Return the Handler implementation class. - * - * @return the Handler class - */ - public Class getHandlerClass() { - return clazz; - } - - /** - * Return all the init-params of the Handler. - * - * @return the init-params of the Handler - */ - public Properties getInitParams() { - return params; - } - - /** - * Return the value of an init-param. - * - * @param pname The key of init-param map. - * - * @return the value of an init-param - */ - public String getInitParam(String pname) { - return params.getProperty(pname); - } - - /** - * Return the list of Headers the Handlers will access. - * - * @return the list of Headers the Handlers will access. - */ - public List getSOAPHeaders() { - return headers; - } - - /** - * Return the list of SOAP Actor Definitions the Handler will play as a - * role. - * - * @return the list of Role the Handler will play - */ - public List getSOAPRoles() { - return roles; - } - - /** - * Return the list of port name the Handler is associated with. The names - * match the localPart of the Port QName. - * - * @return the list of port name the Handler is associated with. - */ - public List getPortNames() { - return portNames; - } - - /** - * Test Equality between 2 Objects. - * - * @param other The object to compare. - * - * @return true if the objects are equals in value, else false. - */ - public boolean equals(Object other) { - if (other == null) { - return false; - } - if (!(other instanceof HandlerDesc)) { - return false; - } - HandlerDesc ref = (HandlerDesc) other; - if (!name.equals(ref.getName())) { - return false; - } - if (!clazz.getName().equals(ref.getHandlerClass().getName())) { - return false; - } - if (!params.equals(ref.getInitParams())) { - return false; - } - if (!headers.equals(ref.getSOAPHeaders())) { - return false; - } - if (!roles.equals(ref.getSOAPRoles())) { - return false; - } - if (!portNames.equals(ref.getPortNames())) { - return false; - } - // After all theses tests, the 2 objects are equals in value - return true; - } - - /** - * @return Returns a String representation of a HandlerDesc - */ - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("\n" + getClass().getName()); - sb.append("\ngetName()=" + getName()); - sb.append("\ngetClassname()=" + getHandlerClassName()); - sb.append("\ngetSOAPRoles()=" + getSOAPRoles()); - sb.append("\ngetSOAPHeaders()=" + getSOAPHeaders()); - sb.append("\ngetInitParams()=" + getInitParams()); - sb.append("\ngetPortNames()=" + getPortNames()); - return sb.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/JndiEnvRefsGroupDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/JndiEnvRefsGroupDesc.java deleted file mode 100644 index 06ab6eacc1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/JndiEnvRefsGroupDesc.java +++ /dev/null @@ -1,556 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.api.IJNDIEnvRefsGroupDesc; -import org.ow2.jonas.deployment.api.IPersistenceUnitRefDesc; -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.common.xml.EjbLocalRef; -import org.ow2.jonas.deployment.common.xml.EjbRef; -import org.ow2.jonas.deployment.common.xml.EnvEntry; -import org.ow2.jonas.deployment.common.xml.JndiEnvRefsGroupXml; -import org.ow2.jonas.deployment.common.xml.JonasEjbRef; -import org.ow2.jonas.deployment.common.xml.JonasJndiEnvRefsGroupXml; -import org.ow2.jonas.deployment.common.xml.JonasMessageDestinationRef; -import org.ow2.jonas.deployment.common.xml.JonasResource; -import org.ow2.jonas.deployment.common.xml.JonasResourceEnv; -import org.ow2.jonas.deployment.common.xml.JonasServiceRef; -import org.ow2.jonas.deployment.common.xml.MessageDestinationRef; -import org.ow2.jonas.deployment.common.xml.PersistenceUnitRef; -import org.ow2.jonas.deployment.common.xml.ResourceEnvRef; -import org.ow2.jonas.deployment.common.xml.ResourceRef; -import org.ow2.jonas.deployment.common.xml.ServiceRef; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.deployment.ws.WSDeploymentDescException; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -/** - * This class is used to keep the usage of containedJNDI environment - * regerence elements consistent across J2EE deployment descriptors - * Elements are "env-entry", "ejb-ref", "ejb-local-ref", "resource-ref", - * "resource-env-ref, "service-ref", "message-destination-ref" - * This class extends DescriptionGroupDesc and give access to elements - * "description", "display-name", "icon" - * used by entity, session, message-driven-bean, web-app, clientApp - * - * @author Philippe Coq - * - */ - -public abstract class JndiEnvRefsGroupDesc extends DescriptionGroupDesc implements IJNDIEnvRefsGroupDesc { - - /** - * List of resource env ref Descriptors. - */ - private Vector resourceEnvRefs = new Vector(); - - /** - * List of resource ref Descriptors.. - */ - private Vector resourceRefs = new Vector(); - - /** - * List of env-entry Descriptors. - */ - private Vector envEntries = new Vector(); - - /** - * List of service-ref Descriptors. - */ - private Vector serviceRefs = new Vector(); - - /** - * List of EJB ref Descriptors.. - */ - private Vector ejbRefs = new Vector(); - - /** - * List of local EJB ref Descriptors.. - */ - private Vector ejbLocalRefs = new Vector(); - - /** - * List of message destination ref Descriptors.. - */ - private Vector messageDestinationRefs = new Vector(); - - /** - * List of persistence-unit-ref elements. - */ - private Vector persistenceUnitRefs = new Vector(); - /** - * Keeps some annotations processing data. - */ - private IENCBindingHolder encBindingHolder = null; - - /** - * logger - */ - protected static Logger logger = Log.getLogger(Log.JONAS_DEPLOY_PREFIX); - - /** - * Construct an instance of a JndiEnvRefsGroupDesc.
    - * - * @param classLoader the classloader for the deployed module. - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @param fileName the file name of the module (useful only for service-ref) - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - protected JndiEnvRefsGroupDesc(final ClassLoader classLoader, - final JndiEnvRefsGroupXml app, - final JonasJndiEnvRefsGroupXml jonasApp, - final String fileName) - throws DeploymentDescException { - - // test classloader - if (classLoader == null) { - throw new DeploymentDescException("Classloader is null"); - } - // display name - displayName = null; - if (app.getDisplayName() != null) { - displayName = app.getDisplayName(); - } - - // resource-env-ref - processResourceEnvRef(classLoader, app, jonasApp); - - // resource-ref - processResourceRef(classLoader, app, jonasApp); - - // env-entry - processEnvEntry(app); - - // ejb-ref - processEjbRef(app, jonasApp); - - // ejb-local-ref - processEjbLocalRef(app); - - // service-ref - processServiceRef(classLoader, app, jonasApp, fileName); - - // message-destination-ref - processMessageDestinationRef(app, jonasApp); - - // persistence-unit-ref - processPersistenceUnitRef(app); - - } - - /** - * @param app the data structure of the J2EE application - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processEnvEntry(final JndiEnvRefsGroupXml app) throws DeploymentDescException { - // env-entry - for (Iterator i = app.getEnvEntryList().iterator(); i.hasNext();) { - IEnvEntryDesc envEntryDesc = new EnvEntryDesc((EnvEntry) i.next()); - envEntries.addElement(envEntryDesc); - } - } - - /** - * @param app the data structure containing the value of Xml elements of a JndiEnvRefsGroup - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processPersistenceUnitRef(final JndiEnvRefsGroupXml app) throws DeploymentDescException { - for (Iterator i = app.getPersistenceUnitRefList().iterator(); i.hasNext();) { - IPersistenceUnitRefDesc persistenceUnitRefDesc = new PersistenceUnitRefDesc((PersistenceUnitRef) i.next()); - persistenceUnitRefs.addElement(persistenceUnitRefDesc); - } - } - - /** - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processMessageDestinationRef(final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException { - List messageDestinationRefList = app.getMessageDestinationRefList(); - List jonasMessageDestinationRefList = jonasApp.getJonasMessageDestinationRefList(); - - - HashMap messageDestinationRef = new HashMap(); - for (Iterator i = jonasMessageDestinationRefList.iterator(); i.hasNext();) { - JonasMessageDestinationRef jonasMessageDestinationRef = (JonasMessageDestinationRef) i.next(); - String mdrName = jonasMessageDestinationRef.getMessageDestinationRefName(); - boolean findMDRef = false; - for (Iterator j = messageDestinationRefList.iterator(); j.hasNext() && !findMDRef;) { - MessageDestinationRef mdRef = (MessageDestinationRef) j.next(); - if (mdrName.equals(mdRef.getMessageDestinationRefName())) { - findMDRef = true; - } - } - if (!findMDRef) { - throw new DeploymentDescException("message-destination-ref missing for jonas-message-destination-ref " + mdrName); - } - messageDestinationRef.put(mdrName, jonasMessageDestinationRef); - } - for (Iterator i = messageDestinationRefList.iterator(); i.hasNext();) { - MessageDestinationRef mdRef = (MessageDestinationRef) i.next(); - String mdrName = mdRef.getMessageDestinationRefName(); - JonasMessageDestinationRef jonasMessageDestinationRef = (JonasMessageDestinationRef) messageDestinationRef.get(mdrName); - if (jonasMessageDestinationRef == null) { - // The message-destination-link must be specified when there is no jonas-message-destination-ref - if ((mdRef.getMessageDestinationLink() == null)) { - // Ignore the message-destination-link syntax "product.jar#ProductMD" - throw new DeploymentDescException("message-destination-link missing for message-destination-ref-name " + mdrName); - } } - messageDestinationRefs.addElement(new MessageDestinationRefDesc(mdRef, jonasMessageDestinationRef)); - } - } - - /** - * @param classLoader the classloader for the deployed module. - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @param fileName the file name of the module (useful only for service-ref) - * @throws WSDeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processServiceRef(final ClassLoader classLoader, final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp, final String fileName) throws WSDeploymentDescException { - Map links = linksSR2JSR(app, jonasApp); - List serviceRefList = app.getServiceRefList(); - for (Iterator i = serviceRefList.iterator(); i.hasNext();) { - ServiceRef serviceRef = ((ServiceRef) i.next()); - JonasServiceRef jsr = (JonasServiceRef) links.get(serviceRef.getServiceRefName()); - serviceRefs.addElement(new ServiceRefDesc(classLoader, serviceRef, jsr, fileName)); - } - } - - /** - * @param app the data structure of the J2EE application - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processEjbLocalRef(final JndiEnvRefsGroupXml app) throws DeploymentDescException { - List ejbLocalRefList = app.getEjbLocalRefList(); - for (Iterator i = ejbLocalRefList.iterator(); i.hasNext();) { - EjbLocalRef ejbLocalRef = (EjbLocalRef) i.next(); - if ((ejbLocalRef.getEjbLink() == null)) { - throw new DeploymentDescException("ejb-link missing for ejb-ref-name " + ejbLocalRef.getEjbRefName()); - } - ejbLocalRefs.addElement(new EjbLocalRefDesc(ejbLocalRef)); - } - } - - /** - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processEjbRef(final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException { - List ejbRefList = app.getEjbRefList(); - List jonasEjbRefList = jonasApp.getJonasEjbRefList(); - - HashMap ejbRef = new HashMap(); - for (Iterator i = jonasEjbRefList.iterator(); i.hasNext();) { - JonasEjbRef jonasEjbRef = (JonasEjbRef) i.next(); - String brName = jonasEjbRef.getEjbRefName(); - boolean findBRef = false; - for (Iterator j = ejbRefList.iterator(); j.hasNext() && !findBRef;) { - EjbRef eRef = (EjbRef) j.next(); - if (brName.equals(eRef.getEjbRefName())) { - findBRef = true; - } - } - if (!findBRef) { - throw new DeploymentDescException("ejb-ref missing for jonas-ejb-ref " + brName); - } - ejbRef.put(brName, jonasEjbRef); - } - for (Iterator i = ejbRefList.iterator(); i.hasNext();) { - EjbRef eRef = (EjbRef) i.next(); - String brName = eRef.getEjbRefName(); - JonasEjbRef jonasEjbRef = (JonasEjbRef) ejbRef.get(brName); - if (jonasEjbRef == null) { - // The ejb-link must be specified when there is no jonas-ejb-ref - if ((eRef.getEjbLink() == null)) { - // Ignore the ejb-link syntax "product.jar#ProductEJB" - // throw new DeploymentDescException("ejb-link missing for ejb-ref-name " + brName); - // FIXME gaellalire : get ejb3 compatibility - logger.log(BasicLevel.DEBUG, "Maybe the ejb-link is missing for ejb-ref-name " + brName); - continue; - } - } - ejbRefs.addElement(new EjbRefDesc(eRef, jonasEjbRef)); - } - } - - /** - * @param classLoader the classloader for the deployed module. - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processResourceRef(final ClassLoader classLoader, final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException { - List resourceRefList = app.getResourceRefList(); - List jonasResourceList = jonasApp.getJonasResourceList(); - HashMap resource = new HashMap(); - for (Iterator i = jonasResourceList.iterator(); i.hasNext();) { - JonasResource jonasResource = ((JonasResource) i.next()); - String rName = jonasResource.getResRefName(); - boolean findResRef = false; - for (Iterator j = resourceRefList.iterator(); j.hasNext() && !findResRef;) { - if (rName.equals(((ResourceRef) j.next()).getResRefName())) { - findResRef = true; - } - } - - if (!findResRef) { - throw new DeploymentDescException("resource-ref missing for jonas-resource " + rName); - } - resource.put(rName, jonasResource); - } - - for (Iterator i = resourceRefList.iterator(); i.hasNext();) { - ResourceRef resourceRef = ((ResourceRef) i.next()); - String rName = resourceRef.getResRefName(); - - // Handle some special cases - String jndiName = null; - if ("org.omg.CORBA.ORB".equals(resourceRef.getResType())) { - jndiName = "java:comp/ORB"; - } else if ("javax.transaction.UserTransaction".equals(resourceRef.getResType())) { - jndiName = "java:comp/UserTransaction"; - } - if (jndiName != null) { - JonasResource jonasResource = new JonasResource(); - jonasResource.setResRefName(rName); - jonasResource.setJndiName(jndiName); - jonasResourceList.add(jonasResource); - resource.put(rName, jonasResource); - resourceRef.setResAuth("Container"); - } - - if (!resource.containsKey(rName)) { - logger.log(BasicLevel.DEBUG, "Unable to find the given resource, it may be resolved at runtime"); - continue; - } - resourceRefs.addElement(new ResourceRefDesc(classLoader, resourceRef, (JonasResource) resource.get(rName))); - } - } - - /** - * @param classLoader the classloader for the deployed module. - * @param app the data structure of the J2EE application - * @param jonasApp the data structure of the jonas specific deployment - * descriptor - * @throws DeploymentDescException if the deployment descriptors are - * corrupted. - */ - private void processResourceEnvRef(final ClassLoader classLoader, final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException { - List resourceEnvRefList = app.getResourceEnvRefList(); - List jonasResourceEnvList = jonasApp.getJonasResourceEnvList(); - HashMap resourceEnv = new HashMap(); - for (Iterator i = jonasResourceEnvList.iterator(); i.hasNext();) { - JonasResourceEnv jonasResourceEnv = (JonasResourceEnv) i.next(); - String rName = jonasResourceEnv.getResourceEnvRefName(); - boolean findResRef = false; - for (Iterator j = resourceEnvRefList.iterator(); j.hasNext() && !findResRef;) { - ResourceEnvRef resourceEnvRef = (ResourceEnvRef) j.next(); - if (rName.equals(resourceEnvRef.getResourceEnvRefName())) { - findResRef = true; - } - } - if (!findResRef) { - throw new DeploymentDescException("resource-env-ref missing for jonas-resource-env " + rName); - } - resourceEnv.put(rName, jonasResourceEnv); - } - for (Iterator i = resourceEnvRefList.iterator(); i.hasNext();) { - ResourceEnvRef resourceEnvRef = (ResourceEnvRef) i.next(); - String rName = resourceEnvRef.getResourceEnvRefName(); - if (!resourceEnv.containsKey(rName)) { - throw new DeploymentDescException("jonas-resource-env missing for resource-env-ref-name " + rName); - } - resourceEnvRefs.addElement(new ResourceEnvRefDesc(classLoader, resourceEnvRef, - (JonasResourceEnv) resourceEnv.get(rName))); - } - } - - /** - * @param app JndiEnvRefsGroupXml instance - * @param jonasApp linked JonasJndiEnvRefsGroupXml instance - * @return Returns a map associating the ServiceRef.name with the JonasServiceRef - */ - private Map linksSR2JSR(final JndiEnvRefsGroupXml app, final JonasJndiEnvRefsGroupXml jonasApp) { - Map res = new HashMap(); - // for each sr - for (Iterator i = app.getServiceRefList().iterator(); i.hasNext();) { - ServiceRef sr = (ServiceRef) i.next(); - res.put(sr.getServiceRefName(), null); - } - // jonas-.xml - if (jonasApp != null) { - - // get all ServiceRef.name - Set keys = res.keySet(); - - // for each jonas service ref - for (Iterator i = jonasApp.getJonasServiceRefList().iterator(); i.hasNext();) { - JonasServiceRef jsr = (JonasServiceRef) i.next(); - String srName = jsr.getServiceRefName(); - - if (keys.contains(srName)) { - // jonas-service-ref linked to service-ref - res.put(srName, jsr); - } else { - String err = "jonas-service-ref '" + srName + "' is not linked to any service-ref. It will be ignored."; //getI18n().getMessage("WSDeploymentDesc.wsdlDeclareUnknownPort", wsdlf.getName()); - logger.log(BasicLevel.WARN, err); - } - } - } - return res; - } - - /** - * Get resource environment references. - * - * @return array of resource environment reference descriptors - */ - public IResourceEnvRefDesc[] getResourceEnvRefDesc() { - IResourceEnvRefDesc[] ret = new IResourceEnvRefDesc[resourceEnvRefs.size()]; - resourceEnvRefs.copyInto(ret); - return ret; - } - - /** - * Get resource manager connection factory references. - * - * @return array of resource reference descriptors - */ - public IResourceRefDesc[] getResourceRefDesc() { - IResourceRefDesc[] ret = new ResourceRefDesc[resourceRefs.size()]; - resourceRefs.copyInto(ret); - return ret; - } - - /** - * Get environment entries. - * - * @return array of Env entries descriptors - */ - public IEnvEntryDesc[] getEnvEntryDesc() { - IEnvEntryDesc[] ret = new EnvEntryDesc[envEntries.size()]; - envEntries.copyInto(ret); - return ret; - } - - /** - * Get EJB references. - * - * @return array of EJB reference descriptors - */ - public EjbRefDesc[] getEjbRefDesc() { - EjbRefDesc[] ret = new EjbRefDesc[ejbRefs.size()]; - ejbRefs.copyInto(ret); - return ret; - } - - /** - * Get ejb local references. - * - * @return array of ejb local reference descriptors - */ - public EjbLocalRefDesc[] getEjbLocalRefDesc() { - EjbLocalRefDesc[] ret = new EjbLocalRefDesc[ejbLocalRefs.size()]; - ejbLocalRefs.copyInto(ret); - return ret; - } - - /** - * Get service references. - * - * @return array of service references descriptors - */ - public IServiceRefDesc[] getServiceRefDesc() { - IServiceRefDesc[] ret = new ServiceRefDesc[serviceRefs.size()]; - serviceRefs.copyInto(ret); - return ret; - } - - /** - * Get message-destination references. - * @return array of message-destination references descriptors - */ - public MessageDestinationRefDesc[] getMessageDestinationRefDesc() { - MessageDestinationRefDesc[] ret = new MessageDestinationRefDesc[messageDestinationRefs.size()]; - messageDestinationRefs.copyInto(ret); - return ret; - } - - /** - * @return the ENC Binding holder object. - */ - public IENCBindingHolder getENCBindingHolder() { - return encBindingHolder; - } - - /** - * Sets the given ENC binding holder. - * @param encBindingHolder the given environment holder. - */ - public void setENCBindingHolder(final IENCBindingHolder encBindingHolder) { - this.encBindingHolder = encBindingHolder; - } - - /** - * Get and array of the persistence-unit-refs. - * @return array of persistence unit refs - */ - public PersistenceUnitRefDesc[] getPersistenceUnitRefs() { - PersistenceUnitRefDesc[] ret = new PersistenceUnitRefDesc[persistenceUnitRefs.size()]; - persistenceUnitRefs.copyInto(ret); - return ret; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/MessageDestinationRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/MessageDestinationRefDesc.java deleted file mode 100644 index a5926aac03..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/MessageDestinationRefDesc.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IMessageDestinationRefDesc; -import org.ow2.jonas.deployment.common.xml.JonasMessageDestinationRef; -import org.ow2.jonas.deployment.common.xml.MessageDestinationRef; - - -/** - * This class represents the description of a MessageDestinationRef object - * @author Eric Hardesty - */ -public class MessageDestinationRefDesc implements IMessageDestinationRefDesc { - - /** - * The name of the message destination ref - */ - private String messageDestinationRefName = null; - - /** - * The type of the message destination ref - */ - private String messageDestinationType = null; - - /** - * The usage of the message destination ref. - */ - private String messageDestinationUsage = null; - - /** - * The link of the message destination ref. - */ - private String messageDestinationLink = null; - - /** - * The jndi name of the message destination ref. - */ - private String jndiName = null; - - - /** - * Construct a descriptor for an message-destination-ref tag. - * @param messageDestinationRef the messageDestination ref result of the xml parsing. - * @param jonasMessageDestinationRef the jonas messageDestinationRef result of the xml parsing. - * @throws DeploymentDescException when missing information for - * creating the MessageDestinationRefDesc. - */ - public MessageDestinationRefDesc(MessageDestinationRef messageDestinationRef, - JonasMessageDestinationRef jonasMessageDestinationRef) - throws DeploymentDescException { - messageDestinationRefName = messageDestinationRef.getMessageDestinationRefName(); - messageDestinationType = messageDestinationRef.getMessageDestinationType(); - messageDestinationUsage = messageDestinationRef.getMessageDestinationUsage(); - messageDestinationLink = messageDestinationRef.getMessageDestinationLink(); - jndiName = null; - if (jonasMessageDestinationRef != null) { - jndiName = jonasMessageDestinationRef.getJndiName(); - } - } - - public String getMessageDestinationRefName() { - return messageDestinationRefName; - } - - public String getMessageDestinationType() { - return messageDestinationType; - } - - public String getMessageDestinationUsage() { - return messageDestinationUsage; - } - - public String getMessageDestinationLink() { - return messageDestinationLink; - } - - - public String getJndiName() { - return jndiName; - } - - /** - * Set the jndi name of the messageDestination-ref. - * @param jndiName representation of the JNDI name - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetMessageDestinationRefName()=" + getMessageDestinationRefName()); - ret.append("\ngetMessageDestinationType()=" + getMessageDestinationType()); - ret.append("\ngetMessageDestinationUsage()=" + getMessageDestinationUsage()); - ret.append("\ngetMessageDestinationLink()=" + getMessageDestinationLink()); - ret.append("\ngetJndiName()=" + getJndiName()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/PersistenceUnitRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/PersistenceUnitRefDesc.java deleted file mode 100644 index 070d6a459a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/PersistenceUnitRefDesc.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IPersistenceUnitRefDesc; -import org.ow2.jonas.deployment.common.xml.PersistenceUnitRef; - -/** - * Class used to represent persistence-unit-ref elements in J2EE deployment descriptors. - * @author Adriana Danes - */ -public class PersistenceUnitRefDesc implements IPersistenceUnitRefDesc { - - /** - * optional description. - */ - private String description; - - /** - * persistence unit reference name. - */ - private String persistenceUnitRefName; - - /** - * persistence unit name. - */ - private String persistenceUnitName; - - - /** - * Construct a descriptor for an persistence-unit-ref tag. - * @param persistenceUnitRef the persistence-unit-ref resulting of the xml parsing. - * @throws DeploymentDescException when missing information for - * creating the PersistenceUnitRefDesc - */ - public PersistenceUnitRefDesc(final PersistenceUnitRef persistenceUnitRef) throws DeploymentDescException { - description = persistenceUnitRef.getDescription(); - persistenceUnitRefName = persistenceUnitRef.getPersistenceUnitRefName(); - persistenceUnitName = persistenceUnitRef.getPersistenceUnitName(); - if (persistenceUnitName == null) { - // set default value to "" - persistenceUnitName = ""; - } - } - - /** - * @return persistence unit reference description - */ - public String getDescription() { - return description; - } - - /** - * @return persistence unit name - */ - public String getName() { - return persistenceUnitName; - } - - /** - * @return persistence unit reference name - */ - public String getRefName() { - return persistenceUnitRefName; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceEnvRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceEnvRefDesc.java deleted file mode 100644 index 1e92a3efa0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceEnvRefDesc.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Christophe Ney - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.common.xml.JonasResourceEnv; -import org.ow2.jonas.deployment.common.xml.ResourceEnvRef; - - -/** - * This class represents the description of a ResourceEnvRef object - * @author Christophe Ney - * @author Florent Benoit - */ -public class ResourceEnvRefDesc implements IResourceEnvRefDesc { - - /** - * The resource env ref name. - */ - private String name; - - /** - * The resource env ref type. - */ - private Class type; - - /** - * The resource env ref jndi name. - */ - private String jndiName; - - /** - * Construct a descriptor for the resource-env-ref and jonas-resource-env - * tags. - * @param classLoader the classloader for the classes. - * @param res the resource-env-ref resulting of the web.xml parsing. - * @param jRes the jonas-resource-env resulting of the jonas-web.xml - * parsing. - * @throws DeploymentDescException when missing information for - * creating the ResourceEnvRefDesc. - */ - public ResourceEnvRefDesc(ClassLoader classLoader, ResourceEnvRef res, - JonasResourceEnv jRes) throws DeploymentDescException { - - name = res.getResourceEnvRefName(); - try { - type = classLoader.loadClass(res.getResourceEnvRefType()); - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("resource-env-ref-type class not found for resource-env-ref " + name, e); - } - jndiName = jRes.getJndiName(); - } - - public String getName() { - return name; - } - - public Class getType() { - return type; - } - - public String getJndiName() { - return jndiName; - } - - /** - * String representation of the object for test purpose. - * @return String representation of this object. - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName()=" + getName()); - ret.append("\ngetType()=" + getType()); - ret.append("\ngetJndiName()=" + getJndiName()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceRefDesc.java deleted file mode 100644 index 7db1c046df..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/ResourceRefDesc.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Christophe Ney - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.common.xml.JonasResource; -import org.ow2.jonas.deployment.common.xml.ResourceRef; - - - -/** - * This class represents the description of a ResourceRef object - * @author Christophe Ney - * @author Florent Benoit - */ -public class ResourceRefDesc implements IResourceRefDesc { - - /** - * List of all possible authentication. - */ - private static final String[] AUTH = {"APPLICATION_AUTH", "CONTAINER_AUTH"}; - - /** - * The resource ref name. - */ - private String name; - - /** - * The resource ref type name. - */ - private String typeName; - - /** - * The resource ref authentication. - */ - private int authentication; - - /** - * The resource ref jndi name. - */ - private String jndiName; - - /** - * Construct a descriptor for the resource-ref and jonas-resource tags. - * @param classLoader the classloader for the classes. - * @param res the resource-ref resulting of the web.xml parsing. - * @param jRes the jonas-resource resulting of the jonas-web.xml parsing. - * @throws DeploymentDescException when missing information for - * creating the ResourceRefDesc. - */ - public ResourceRefDesc(ClassLoader classLoader, - ResourceRef res, JonasResource jRes) - throws DeploymentDescException { - name = res.getResRefName(); - typeName = new String(res.getResType()); - String auth = res.getResAuth(); - - if (auth.equals("Application")) { - authentication = APPLICATION_AUTH; - } else if (auth.equals("Container")) { - authentication = CONTAINER_AUTH; - } else { - throw new DeploymentDescException("res-auth not valid for resource-ref " + name); - } - jndiName = jRes.getJndiName(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.deployment.api.IResourceRefDesc#getName() - */ - public String getName() { - return name; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.deployment.api.IResourceRefDesc#getTypeName() - */ - public String getTypeName() { - return typeName; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.deployment.api.IResourceRefDesc#getAuthentication() - */ - public int getAuthentication() { - return authentication; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.deployment.api.IResourceRefDesc#isJdbc() - */ - public boolean isJdbc() { - return "javax.sql.DataSource".equals(typeName); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.deployment.api.IResourceRefDesc#getJndiName() - */ - public String getJndiName() { - return jndiName; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName()=" + getName()); - ret.append("\ngetTypeName()=" + getTypeName()); - ret.append("\ngetAuthentication()=" + AUTH[getAuthentication()]); - ret.append("\nisJdbc()=" + new Boolean(isJdbc()).toString()); - ret.append("\ngetJndiName()=" + getJndiName()); - return ret.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/SecurityRoleRefDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/SecurityRoleRefDesc.java deleted file mode 100644 index b5a34b860b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/SecurityRoleRefDesc.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common; - -import java.security.Permission; - -import javax.security.jacc.EJBRoleRefPermission; -import javax.security.jacc.WebRoleRefPermission; - -import org.ow2.jonas.deployment.common.xml.SecurityRoleRef; - - -/** - * Defines a SecurityRoleRefDesc class for the management of - * EJBRoleRefPermissions and WebRoleRefPermissions in JACC - * @author Florent Benoit - */ -public class SecurityRoleRefDesc { - - /** - * EJBRoleRefPermission - */ - private EJBRoleRefPermission ejbRoleRefPermission = null; - - - /** - * WebRoleRefPermission - */ - private WebRoleRefPermission webRoleRefPermission = null; - - - /** - * role-link used for addToRole method on PolicyConfiguration - */ - private String roleLink = null; - - - /** - * role-name - */ - private String roleName = null; - - - /** - * Constructor for SecurityRoleRefDesc - * @param componentName name of the EJB or Servlet - * @param securityRoleRef the security role of the assembly descriptor - * @param isEjb indicate if the is a SecurityRoleRef for an EJB or a Web Component - */ - public SecurityRoleRefDesc(String componentName, SecurityRoleRef securityRoleRef, boolean isEjb) { - this.roleLink = securityRoleRef.getRoleLink(); - this.roleName = securityRoleRef.getRoleName(); - if (isEjb) { - this.ejbRoleRefPermission = new EJBRoleRefPermission(componentName, roleName); - } else { - this.webRoleRefPermission = new WebRoleRefPermission(componentName, roleName); - } - } - - - - /** - * Gets the role-name value - * @return role-name - */ - public String getRoleName() { - return roleName; - } - - - /** - * Gets the role-link value - * @return role-link - */ - public String getRoleLink() { - return roleLink; - } - - /** - * @return Returns the EJBRoleRefPermission - */ - public Permission getEJBRoleRefPermission() { - return ejbRoleRefPermission; - } - - /** - * @return Returns the WebRoleRefPermission - */ - public Permission getWebRoleRefPermission() { - return webRoleRefPermission; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JDigester.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JDigester.java deleted file mode 100644 index 26a90acab2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JDigester.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.digester; - -import java.io.IOException; -import java.io.Reader; - -import org.ow2.jonas.deployment.api.DTDs; -import org.ow2.jonas.deployment.api.Schemas; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.lib.JEntityResolver; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; - -import org.apache.commons.digester.Digester; - - -/** - * This class defines a Digester for the xml parsing of - * deployment descriptors standard and specific - * - * @author Philippe Coq - */ - -public class JDigester extends Digester { - - /** - * Construct an instance of a JDigester which is a Digester - * that is configured for parsing the deployment descriptors standards - * and specifics used in JOnAS application. - * the Digester contains the rules for the xml parsing - * By default the created digester is set with: - * useContextClassLoader = true - * @param ruleSet an object that extends JRuleSetBase - * @param parsingWithValidation flag for xmlvalidation - * @param namespaceAware must be true when schema is used - * @param dtds mapping between publicId and local Urls of DTDs - * @param schemas local urls for the schemas - * @throws DeploymentDescException if the deployment descriptors are corrupted. - */ - - public JDigester(JRuleSetBase ruleSet, - boolean parsingWithValidation, - boolean namespaceAware, - DTDs dtds, - Schemas schemas) - throws DeploymentDescException { - super(); - - - String packageName = ruleSet.getClass().getPackage().getName(); - String rootPackageName = packageName.substring(0, packageName.lastIndexOf('.')); - - - // Set the validation process - setNamespaceAware(namespaceAware); - setValidating(parsingWithValidation); - - // Define an error handler - setErrorHandler(new JErrorHandler()); - - // Register all Sun dtds/Schemas - JEntityResolver jEntityResolver = new JEntityResolverWithDigester(this); - jEntityResolver.addDtds(dtds); - jEntityResolver.addSchemas(schemas); - setEntityResolver(jEntityResolver); - - - // Set the schema that Digester must use - if (parsingWithValidation) { - try { - setFeature("http://apache.org/xml/features/validation/schema", - true); - } catch (Exception ee) { - throw new DeploymentDescException("Error setting feature", ee); - } - } - - org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(rootPackageName + ".digester"); - setLogger(log); - - // Set the encoding feature - try { - setFeature("http://apache.org/xml/features/allow-java-encodings", - true); - } catch (Exception ee) { - throw new DeploymentDescException("Error setting feature", ee); - } - - // Don't use ContextClassLoader - setUseContextClassLoader(false); - - // Add rules - addRuleSet(ruleSet); - } - - - /** - * Parse the deployment descriptor - * @param reader the Reader of the XML file. - * @param fileName the name of the file. - * @param element top level xml element - * which is a structure containing the result of the xml parsing. - * @throws DeploymentDescException if the deployment descriptor - * is corrupted. - */ - public void parse(Reader reader, - String fileName, - TopLevelElement element) - throws DeploymentDescException { - try { - clear(); - push(element); - parse(reader); - } catch (Exception ioe) { - throw new DeploymentDescException("Error when parsing XML document " + fileName, ioe); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ignored) { - getLogger().warn("Can't close '" + fileName + "'"); - } - } - push(null); - } - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JEntityResolverWithDigester.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JEntityResolverWithDigester.java deleted file mode 100644 index d489828775..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JEntityResolverWithDigester.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.digester; - - -import java.io.IOException; - -import org.ow2.jonas.deployment.common.lib.JEntityResolver; -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * This class defines the entity resolver used to resolve DTDs/Schemas during - * the xml parsing. It extends the JEntityResolver - * in order to allow for that parser to be used without having the digester classes. - */ -public class JEntityResolverWithDigester extends JEntityResolver implements EntityResolver { - - /** - * JDigester Object associated - */ - private JDigester jDigester = null; - - - /** - * Constructor - * - * @param jd linked JDigester object - */ - public JEntityResolverWithDigester(JDigester jd) { - super(); - jDigester = jd; - } - - /** - * The Parser will call this method before opening any external entity except - * the top-level document entity. - * @param publicId The public identifier of the external entity being referenced, - * or null if none was supplied. - * @param systemId The system identifier of the external entity being referenced. - * @return An InputSource object describing the new input source, or null to request that - * the parser open a regular URI connection to the system identifier. - * @throws SAXException Any SAX exception, possibly wrapping another exception. - * @throws IOException A Java-specific IO exception, possibly the result of creating - * a new InputStream or Reader for the InputSource. - */ - public InputSource resolveEntity(String publicId, String systemId) - throws IOException, SAXException { - - if (jDigester != null) { - jDigester.setPublicId(publicId); - } - - return super.resolveEntity(publicId, systemId); - } -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JErrorHandler.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JErrorHandler.java deleted file mode 100644 index 75e02bf177..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/JErrorHandler.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.digester; - -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -/** - * Define an error handler which throw an exception as Digester not (only print - * stack trace). This handler is use for throwing/catching in a convenient way - * the xml parsing error of xml file. - */ -public class JErrorHandler implements ErrorHandler { - - /** - * Receive notification of a warning. - * - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void warning(SAXParseException exception) throws SAXException { - - } - - /** - * Receive notification of a recoverable error. - * - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void error(SAXParseException exception) throws SAXException { - throw new SAXException("Parse Fatal Error at line " + exception.getLineNumber() + " column " - + exception.getColumnNumber() + ": " + exception.getMessage()); - } - - /** - * Receive notification of a non-recoverable error. - * - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void fatalError(SAXParseException exception) throws SAXException { - throw new SAXException("Parse Fatal Error at line " + exception.getLineNumber() + " column " - + exception.getColumnNumber() + ": " + exception.getMessage()); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/NoTrimCallMethodRule.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/NoTrimCallMethodRule.java deleted file mode 100644 index 9c911f02da..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/digester/NoTrimCallMethodRule.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.digester; - -import org.apache.commons.digester.CallMethodRule; - -/** - * Do not apply trim on the given body. - * @author Florent Benoit - */ -public class NoTrimCallMethodRule extends CallMethodRule { - - public NoTrimCallMethodRule(String methodName, int paramCount) { - super(methodName, paramCount); - } - - /** - * Process the body text of this element. - * @param bodyText The body text of this element - */ - public void body(String bodyText) throws Exception { - if (paramCount == 0) { - // Do not apply trim() - this.bodyText = bodyText; - } - - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/AbsDeploymentDescManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/AbsDeploymentDescManager.java deleted file mode 100644 index 8e328dfa50..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/AbsDeploymentDescManager.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.lib; - -import org.ow2.jonas.deployment.common.xml.JonasServiceRef; -import org.ow2.jonas.deployment.common.xml.ResourceRef; -import org.ow2.jonas.deployment.common.xml.ResourceEnvRef; -import org.ow2.jonas.deployment.common.xml.AbsEnvironmentElement; -import org.ow2.jonas.deployment.common.xml.JonasPortComponentRef; -import org.ow2.jonas.deployment.common.xml.JonasStubProperty; -import org.ow2.jonas.deployment.client.xml.ApplicationClient; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.common.api.xml.struct.IPortComponentRef; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.List; -import java.util.Iterator; - -/** - * Abstract class of DeploymentDesc manager. Use for common methods. - * @author Florent Benoit - */ -public abstract class AbsDeploymentDescManager implements DeploymentDescManager { - - /** - * Char separator in a link. - */ - public static final String LINK_SEPARATOR = "#"; - - /** - * Utility class, no public constructor - */ - protected AbsDeploymentDescManager() { - - } - - /** - * Return the content of the inut stream - * @param in the given input stream - * @return the content of the inut stream - * @throws IOException if the file can't be read - */ - protected static String xmlContent(InputStream in) throws IOException { - - StringBuffer sb = new StringBuffer(); - String line; - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - // loop until the end - while ((line = br.readLine()) != null) { - sb.append(line); - sb.append("\n"); - } - return sb.toString(); - } - - /** - * Find a jonas-service-ref element with a given name. - * @param jonasServiceRefList the list of elements to search in - * @param name the name - * @return a jonas-service-ref element matching the given name or null if not found - */ - protected static JonasServiceRef findJonasServiceRef(final List jonasServiceRefList, - final String name) { - JonasServiceRef found = null; - for (Iterator i = jonasServiceRefList.iterator(); i.hasNext() && found == null;) { - JonasServiceRef element = (JonasServiceRef) i.next(); - if (name.equals(element.getServiceRefName())) { - found = element; - } - } - - return found; - } - - /** - * @return true if the resource name is already present as a resource-ref or resource-env-ref - */ - public static boolean containsResource(final String resourceName, final AbsEnvironmentElement env) { - List resourceRefList = env.getResourceRefList(); - for (ResourceRef resourceRef : resourceRefList) { - if (resourceName.equals(resourceRef.getResRefName())) { - return true; - } - } - - List resourceEnvRefList = env.getResourceEnvRefList(); - for (ResourceEnvRef resourceEnvRef : resourceEnvRefList) { - if (resourceName.equals(resourceEnvRef.getResourceEnvRefName())) { - return true; - } - } - - // not found - return false; - } - - /** - * Merge into the Jax WS service ref some data from the jonas-xxx.xml files - * @param jsr the XML struct of the JOnAS service ref - * @param wsr the JAX WS metadata which has been merged - */ - protected static void mergeWebServiceRef(JonasServiceRef jsr, IJaxwsWebServiceRef wsr) { - // Override wsdl-location value if specified - if (jsr.getAltWsdl() != null) { - wsr.setWsdlLocation(jsr.getAltWsdl()); - } - - List portComponentRefList = jsr.getJonasPortComponentRefList(); - for (JonasPortComponentRef jonasPortComponentRef : portComponentRefList) { - // Get SEI - String serviceEndpointInterface = jonasPortComponentRef.getServiceEndpointInterface(); - - // matching port component ? - IPortComponentRef portComponentRef = wsr.getPortComponentRef(serviceEndpointInterface); - if (portComponentRef == null) { - // no, needs to add one - portComponentRef = new org.ow2.util.ee.metadata.common.impl.xml.struct.PortComponentRef(); - portComponentRef.setServiceEndpointInterface(serviceEndpointInterface); - List wsrPortcomponentRefs = wsr.getPortComponentRefs(); - wsrPortcomponentRefs.add(portComponentRef); - wsr.setPortComponentRefs(wsrPortcomponentRefs); - } - // add stub properties - List jonasStubProperties = jonasPortComponentRef.getJonasStubPropertyList(); - for (JonasStubProperty jonasStubProperty : jonasStubProperties) { - portComponentRef.getStubProperties().put(jonasStubProperty.getParamName(), jonasStubProperty.getParamValue()); - } - - } - - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/DeploymentDescManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/DeploymentDescManager.java deleted file mode 100644 index 0d08304d1a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/DeploymentDescManager.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.lib; - - -/** - * Defines an interface for all Deployment Desc manager - * @author Florent Benoit - */ -public interface DeploymentDescManager { - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JEntityResolver.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JEntityResolver.java deleted file mode 100644 index d07a81ecc6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JEntityResolver.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.lib; - - -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.ow2.jonas.deployment.api.DTDs; -import org.ow2.jonas.deployment.api.Schemas; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - - -/** - * This class defines the entity resolver used to resolve DTDs/Schemas during - * the xml parsing - * @author Florent Benoit - */ -public class JEntityResolver implements EntityResolver { - - /** - * Map which contains DTDs and Schemas available in local - */ - private HashMap entries = new HashMap(); - - /** - * Constructor without JDigester instance (used in WsGen only) - */ - public JEntityResolver() { - super(); - } - - /** - * Add a local schema to the known entries - * @param path path to a local schema - */ - private void addSchema(String path) { - String id = path.substring(path.lastIndexOf('/') + 1); - entries.put(id, path); - } - - - - /** - * The Parser will call this method before opening any external entity except - * the top-level document entity. - * @param publicId The public identifier of the external entity being referenced, - * or null if none was supplied. - * @param systemId The system identifier of the external entity being referenced. - * @return An InputSource object describing the new input source, or null to request that - * the parser open a regular URI connection to the system identifier. - * @throws SAXException Any SAX exception, possibly wrapping another exception. - * @throws IOException A Java-specific IO exception, possibly the result of creating - * a new InputStream or Reader for the InputSource. - */ - public InputSource resolveEntity(String publicId, String systemId) - throws IOException, SAXException { - - // DTD : check if we got this entry - String localPath = null; - if (publicId != null) { - localPath = (String) entries.get(publicId); - } else if (systemId != null) { - // Can be a schema - if (systemId.toLowerCase().endsWith(".xsd")) { - // Retrieve basename - String baseName = systemId.substring(systemId.lastIndexOf('/') + 1); - - // Registred ? - localPath = (String) entries.get(baseName); - } - } - - if (localPath == null) { - // This DTD/Schema was not added to this DTD/Schame local repository - return null; - } - - // Return the local path source - return (new InputSource(localPath)); - } - - - /** - * Add the mapping between a public Id and the local path of the DTD - * @param dtds Object containing the mapping PublicId --> Local URL - */ - public void addDtds(DTDs dtds) { - if (dtds != null) { - Map dtdsMapping = dtds.getMapping(); - if (dtdsMapping != null) { - for (Iterator it = dtdsMapping.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = (Map.Entry) it.next(); - String publicId = (String) entry.getKey(); - String localURL = (String) entry.getValue(); - entries.put(publicId, localURL); - } - } - } - } - - - /** - * Add the given Schemas to the schemas available for this resolver - * @param schemas Definition of the schemas to add to this resolver - */ - public void addSchemas(Schemas schemas) { - // no schemas - if (schemas == null) { - return; - } - - List localSchemas = schemas.getlocalSchemas(); - - // there are schemas - if (localSchemas != null) { - for (Iterator it = localSchemas.iterator(); it.hasNext();) { - String schema = (String) it.next(); - addSchema(schema); - } - } - } - - - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSInput.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSInput.java deleted file mode 100644 index 9b71abd71e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSInput.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.lib; - -import java.io.InputStream; -import java.io.Reader; - -import org.w3c.dom.ls.LSInput; -import org.xml.sax.InputSource; - -/** - * A wrapper around the InputSource class returned by EntityResolver - * to be returned by the ResourceResolver class. - * - * @author Patrick Smith - * @author Greg Lapouchnian - */ -public class JLSInput implements LSInput { - - /** - * The InputSource that this class is wrapping. - */ - private InputSource source; - - /** - * Creates a wrapper around the given InputSource object. - * @param source - */ - public JLSInput(InputSource source) { - this.source = source; - } - - /** - * Return the character stream representation of the resource. - * @return character stream representation of the resource - */ - public Reader getCharacterStream() { - return source.getCharacterStream(); - } - - public void setCharacterStream(Reader arg0) {} - - /** - * Return the byte stream representation of the resource. - * @return byte stream representation of the resource - */ - public InputStream getByteStream() { - return source.getByteStream(); - } - - public void setByteStream(InputStream arg0) {} - - public String getStringData() { - // No corresponding method in InputSource - return null; - } - - public void setStringData(String arg0) {} - - /** - * Returns the System ID of the resource. - * @return the system ID of the resource - */ - public String getSystemId() { - return source.getSystemId(); - } - - public void setSystemId(String id) {} - - /** - * Returns the Public ID of the resource. - * @return the public ID of the resource - */ - public String getPublicId() { - return source.getPublicId(); - } - - public void setPublicId(String id) {} - - public String getBaseURI() { - return null; - } - - public void setBaseURI(String arg0) {} - - /** - * Returns the encoding of the resource. - * @return the encoding of the resource - */ - public String getEncoding() { - return source.getEncoding(); - } - - public void setEncoding(String arg0) {} - - public boolean getCertifiedText() { - return false; - } - - public void setCertifiedText(boolean arg0) {} - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSResourceResolver.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSResourceResolver.java deleted file mode 100644 index 35cc194d7e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JLSResourceResolver.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.lib; - -import org.w3c.dom.ls.LSInput; -import org.w3c.dom.ls.LSResourceResolver; -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; - -/** - * A custom ResourceResolver to use in SchemaFactory. It uses the JEntityResolver - * to resolve system IDs for DTDs and Schemas to local copies of those files. - * - * @author Patrick Smith - * @author Greg Lapouchnian - */ -public class JLSResourceResolver implements LSResourceResolver { - - /** - * The entity resolver to use for lookups. - */ - EntityResolver er; - - /** - * - * @param er the EntityResolver to use for resolving external - * resources - */ - public JLSResourceResolver(EntityResolver er) { - this.er = er; - } - - /** - * Uses the EntityResolver to resolve an external resource. - */ - public LSInput resolveResource(String type, String namespaceURI, - String publicId, String systemId, - String baseURI) { - try { - InputSource source = er.resolveEntity(publicId, systemId); - return new JLSInput(source); - - } catch (Exception e) { - return null; - } - } - } - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JavaType.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JavaType.java deleted file mode 100644 index d54950d0b3..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/lib/JavaType.java +++ /dev/null @@ -1,442 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.common.lib; - -import java.util.Hashtable; - -/** - * This class implements methods which permit to get informations about Java Types: - *

      - *
    • - * the JDBC Types associated - *
    • - * the ResultSet.getXXX() methods associated - *
    • - * the PreparedStatement.setXXX() methods associated - *
    - *
    - * (The Java Type may be or not a primitive type) - * - * @author Helene Joanin : Initial developer - * @author ico.Hoogervorst@nl.compuware.com : Support for BigInteger and avoid cast exceptions with rs.getObject() - */ -public class JavaType { - - // Default values for Java primitive type - private static Hashtable tableDefaultValues = new Hashtable(); - static { - tableDefaultValues.put(java.lang.Boolean.TYPE, "false"); - tableDefaultValues.put(java.lang.Character.TYPE, "'\u0000'"); - tableDefaultValues.put(java.lang.Byte.TYPE, "(byte)0"); - tableDefaultValues.put(java.lang.Short.TYPE, "(short)0"); - tableDefaultValues.put(java.lang.Integer.TYPE, "0"); - tableDefaultValues.put(java.lang.Long.TYPE, "0L"); - tableDefaultValues.put(java.lang.Float.TYPE, "0.0f"); - tableDefaultValues.put(java.lang.Double.TYPE, "0.0d"); - } - - private static Hashtable tableWrapperType = new Hashtable(); - static { - tableWrapperType.put(java.lang.Boolean.TYPE, "java.lang.Boolean"); - tableWrapperType.put(java.lang.Character.TYPE, "java.lang.Character"); - tableWrapperType.put(java.lang.Byte.TYPE, "java.lang.Byte"); - tableWrapperType.put(java.lang.Short.TYPE, "java.lang.Short"); - tableWrapperType.put(java.lang.Integer.TYPE, "java.lang.Integer"); - tableWrapperType.put(java.lang.Long.TYPE, "java.lang.Long"); - tableWrapperType.put(java.lang.Float.TYPE, "java.lang.Float"); - tableWrapperType.put(java.lang.Double.TYPE, "java.lang.Double"); - } - - - /** - * Returns true if the given type is the type 'void' - */ - public static boolean isVoid(Class c) { - return (c.equals(java.lang.Void.TYPE)); - } - - /** - * Returns the name of the given type - */ - public static String getName(Class c) { - String name; - if (c.isArray()) { - name = getName(c.getComponentType()) + "[]"; - } else { - // The '$' in the name of a inner class is no more allowed since JDK 1.4.2 - name = c.getName().replace('$', '.'); - } - return (name); - } - - /** - * Returns true if the given class is a Serializable Java Type, - * false otherwise. - */ - public static boolean isSerializable(Class c) { - boolean isSerializable = false; - if (c.isArray()) { - isSerializable = isSerializable(c.getComponentType()); - } else if (c.isPrimitive()) { - isSerializable = true; - } else { - isSerializable = java.io.Serializable.class.isAssignableFrom(c); - } - return (isSerializable); - } - - /** - * Returns true if the given class is a valid type for RMI, - * false otherwise. - * Valid types for RMI are primitive types, remote objects, - * and non-remote objects that implement the java.io.Serializable interface - */ - public static boolean isValidForRmi(Class c) { - return (JavaType.isSerializable(c) || java.rmi.Remote.class.isAssignableFrom(c)); - } - - /** - * Returns true if the given class implements java.uti.Collection or java.util.Enumeration - * false otherwise. - */ - public static boolean isCollecOrEnum(Class c) { - return (java.util.Collection.class.isAssignableFrom(c) || java.util.Enumeration.class.isAssignableFrom(c)); - } - - /** - * Returns the name of the getXXX method associated with the given type in - * java.sql.ResultSet. - * @param c the class object for a Java type. - * @return a string representing the name of the get method, null in error case - */ - public static String getSQLGetMethod(Class c) { - return (JavaTypesForSQL.getSQLGetMethod(c)); - } - - /** - * Returns the name of the setXXX method associated with the given type in - * java.sql.ResultSet. - * @param c the class object for a Java type. - * @return a string representing the name of the set method, null in error case - */ - public static String getSQLSetMethod(Class c) { - return (JavaTypesForSQL.getSQLSetMethod(c)); - } - - /** - * Returns true if the given method name is getObject() or setObject() - */ - public static boolean isXxxObjectMethod(String name) { - return (name.equals("getObject") || name.equals("setObject")); - } - - /** - * Returns the SQL Type mapping the given Java Type. - * @param c the class object for a Java type. - * @return the SQL Type mapping the given Java Type, (Types.OTHER in error case) - */ - public static String getSQLType(Class c) { - return (JavaTypesForSQL.getSQLType(c)); - } - - /** - * Returns the default value of the given Java Type. - * @param c the class object for a Java type. - * @return the default value of the given Java Type - */ - public static String getDefaultValue(Class c) { - String val = null; - if (c.isPrimitive()) { - val = (String) tableDefaultValues.get(c); - } else { - val = new String("null"); - } - if (val == null) { - throw new Error("JavaType ERROR: No default value for the class " + c.getName()); - } - return (val); - } - - /** - * Returns the wrapper type of the given Java Type. - * @param c the class object for a Java type. - * @return the wrapper type of the given Java Type. Empty String for non primitive classes - */ - public static String getWrapperType(Class c) { - String val = null; - if (c.isPrimitive()) { - val = (String) tableWrapperType.get(c); - } else { - val = new String(""); - } - if (val == null) { - throw new Error("JavaType ERROR: No wrapper type for the class " + c.getName()); - } - return (val); - } - - public static Boolean toObject(boolean val) { - return new Boolean(val); - } - public static Byte toObject(byte val) { - return new Byte(val); - } - public static Short toObject(short val) { - return new Short(val); - } - public static Integer toObject(int val) { - return new Integer(val); - } - public static Long toObject(long val) { - return new Long(val); - } - public static Float toObject(float val) { - return new Float(val); - } - public static Double toObject(double val) { - return new Double(val); - } - public static Character toObject(char val) { - return new Character(val); - } - public static Object toObject(Object val) { - return val; - } - - /** - * If it is a primitive type, return a new Object constructor, - * else return the same object. - * There are nine predefined Class objects to represent the eight - * primitive types and void. These are created by the Java Virtual Machine, - * and have the same names as the primitive types that they represent, - * namely boolean, byte, char, short, int, long, float, and double. - * @param name name of the var - * @param val the object value - * @return new object - */ - public static String toStringObject(String name, Class c) { - if (c.isPrimitive()) { - if (c == Boolean.TYPE) { - return "Boolean.valueOf(" + name + ")"; - } else if (c == Byte.TYPE) { - return "new Byte(" + name + ")"; - } else if (c == Character.TYPE) { - return "new Character(" + name + ")"; - } else if (c == Short.TYPE) { - return "new Short(" + name + ")"; - } else if (c == Integer.TYPE) { - return "new Integer(" + name + ")"; - } else if (c == Long.TYPE) { - return "new Long(" + name + ")"; - } else if (c == Float.TYPE) { - return "new Float(" + name + ")"; - } else if (c == Double.TYPE) { - return "new Double(" + name + ")"; - } else { - return name; - } - } else { - return name; - } - } - - -} - - -/** - * This inner class allows to calculate, for a given Java Type: - * - the corresponding SQL type, - * - the corresponding set method of the java.sql.PreparedStatement, - * - the corresponding get method of the java.sql.ResultSet. - */ -class JavaTypesForSQL { - - private static JavaTypesForSQL mTypesForSQL = new JavaTypesForSQL(); - private static Hashtable mGets; - private static Hashtable mSets; - private static Hashtable mSQLTypes; - - private JavaTypesForSQL() { - - mGets = new Hashtable(); - mSets = new Hashtable(); - mSQLTypes = new Hashtable(); - - mGets.put(java.lang.Boolean.TYPE, "getBoolean"); - mSets.put(java.lang.Boolean.TYPE, "setBoolean"); - mSQLTypes.put(java.lang.Boolean.TYPE, "Types.BIT"); - mGets.put(java.lang.Byte.TYPE, "getByte"); - mSets.put(java.lang.Byte.TYPE, "setByte"); - mSQLTypes.put(java.lang.Byte.TYPE, "Types.TINYINT"); - mGets.put(java.lang.Short.TYPE, "getShort"); - mSets.put(java.lang.Short.TYPE, "setShort"); - mSQLTypes.put(java.lang.Short.TYPE, "Types.SMALLINT"); - mGets.put(java.lang.Integer.TYPE, "getInt"); - mSets.put(java.lang.Integer.TYPE, "setInt"); - mSQLTypes.put(java.lang.Integer.TYPE, "Types.INTEGER"); - mGets.put(java.lang.Long.TYPE, "getLong"); - mSets.put(java.lang.Long.TYPE, "setLong"); - mSQLTypes.put(java.lang.Long.TYPE, "Types.BIGINT"); - mGets.put(java.lang.Float.TYPE, "getFloat"); - mSets.put(java.lang.Float.TYPE, "setFloat"); - mSQLTypes.put(java.lang.Float.TYPE, "Types.FLOAT"); - mGets.put(java.lang.Double.TYPE, "getDouble"); - mSets.put(java.lang.Double.TYPE, "setDouble"); - mSQLTypes.put(java.lang.Double.TYPE, "Types.DOUBLE"); - //mGets.put(java.lang.Character.TYPE, "????"); - //mSets.put(java.lang.Character.TYPE, "????"); - //mSQLTypes.put(java.lang.Character.TYPE, "???"); - mGets.put(java.lang.String.class, "getString"); - mSets.put(java.lang.String.class, "setString"); - mSQLTypes.put(java.lang.String.class, "Types.VARCHAR"); - mGets.put(java.sql.Date.class, "getDate"); - mSets.put(java.sql.Date.class, "setDate"); - mSQLTypes.put(java.sql.Date.class, "Types.DATE"); - mGets.put(java.sql.Time.class, "getTime"); - mSets.put(java.sql.Time.class, "setTime"); - mSQLTypes.put(java.sql.Time.class, "Types.TIME"); - mGets.put(java.sql.Timestamp.class, "getTimestamp"); - mSets.put(java.sql.Timestamp.class, "setTimestamp"); - mSQLTypes.put(java.sql.Timestamp.class, "Types.TIMESTAMP"); - mGets.put(java.lang.Boolean.class, "getBoolean"); - mSets.put(java.lang.Boolean.class, "setObject"); - mSQLTypes.put(java.lang.Boolean.class, "Types.BIT"); - mGets.put(java.lang.Integer.class, "getInt"); - mSets.put(java.lang.Integer.class, "setObject"); - mSQLTypes.put(java.lang.Integer.class, "Types.INTEGER"); - mGets.put(java.lang.Long.class, "getLong"); - mSets.put(java.lang.Long.class, "setObject"); - mSQLTypes.put(java.lang.Long.class, "Types.BIGINT"); - mGets.put(java.lang.Float.class, "getFloat"); - mSets.put(java.lang.Float.class, "setObject"); - mSQLTypes.put(java.lang.Float.class, "Types.REAL"); - mGets.put(java.lang.Double.class, "getDouble"); - mSets.put(java.lang.Double.class, "setObject"); - mSQLTypes.put(java.lang.Double.class, "Types.DOUBLE"); - mGets.put(java.lang.Byte.class, "getByte"); - mSets.put(java.lang.Byte.class, "setObject"); - mSQLTypes.put(java.lang.Byte.class, "Types.TINYINT"); - mGets.put(java.lang.Short.class, "getShort"); - mSets.put(java.lang.Short.class, "setObject"); - mSQLTypes.put(java.lang.Short.class, "Types.SMALLINT"); - mGets.put(java.math.BigDecimal.class, "getBigDecimal"); - mSets.put(java.math.BigDecimal.class, "setObject"); - mSQLTypes.put(java.math.BigDecimal.class, "Types.NUMERIC"); - mGets.put(java.math.BigInteger.class, "getBigDecimal"); - mSets.put(java.math.BigInteger.class, "setObject"); - mSQLTypes.put(java.math.BigInteger.class, "Types.NUMERIC"); - } - - /** - * Returns the name of the getXXX method associated with the given type - * in java.sql.ResultSet. - * @param c the class object for a Java type. - * @return a string representing the name of the get method, null in error case - */ - static String getSQLGetMethod(Class c) { - String val = null; - val = (String) mGets.get(c); - if (val == null) { - if (c.isArray()) { - // See if c is byte[] or serializable[] - Class component = c.getComponentType(); - if (component != null) { - if (component.equals(java.lang.Byte.TYPE)) { - val = new String("getBytes"); - } else if (JavaType.isSerializable(component)) { - val = new String("getSerializable"); - } - } - } else if (JavaType.isSerializable(c)) { - // See if c is serializable - val = new String("getSerializable"); - } - } - return (val); - } - - /** - * Returns the name of the setXXX method associated with the given type - * in java.sql.PreparedStatement. - * @param c the class object for a Java type. - * @return a string representing the name of the set method, null in error case - */ - static String getSQLSetMethod(Class c) { - String val = null; - val = (String) mSets.get(c); - if (val == null) { - if (c.isArray()) { - // See if c is byte[] or serializable[] - Class component = c.getComponentType(); - if (component != null) { - if (component.equals(java.lang.Byte.TYPE)) { - val = new String("setBytes"); - } else if (JavaType.isSerializable(component)) { - val = new String("setSerializable"); - } - } - } else if (JavaType.isSerializable(c)) { - // See if c is serializable - val = new String("setSerializable"); - } - } - return (val); - } - - /** - * Returns the SQL Type mapping the given Java Type. - * @param c the class object for a Java type. - * @return the SQL Type mapping the given Java Type, (Types.OTHER in error case) - */ - static String getSQLType(Class c) { - String val = null; - val = (String) mSQLTypes.get(c); - if (val == null) { - val = new String("Types.OTHER"); - if (c.isArray()) { - // See if c is byte[] or serializable[] - Class component = c.getComponentType(); - if (component != null) { - if (component.equals(java.lang.Byte.TYPE)) { - val = new String("Types.VARBINARY"); - } else if (JavaType.isSerializable(component)) { - val = new String("Types.VARBINARY"); - } - } - } else if (JavaType.isSerializable(c)) { - // See if c is serializable - val = new String("Types.VARBINARY"); - } - } - return (val); - } - -} - - - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/AnonymousQNameRule.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/AnonymousQNameRule.java deleted file mode 100644 index 553e78fc30..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/AnonymousQNameRule.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.rules; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.xml.Qname; - - - -/** - * Rule that create a new QName object for anonymous-type-qname in jaxrpc mapping file. - * @author Guillaume Sauthier - */ -public class AnonymousQNameRule extends QNameRule { - - /** - * This method is called when the body of a matching XML element is - * encountered. If the element has no body, this method is not called at - * all. The default implementation delegates to the deprecated method - * body without the namespace and name parameters, to retain backwards - * compatibility. - * @param namespace the namespace URI of the matching element, - * or an empty string if the parser is not namespace - * aware or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param text The text of the body of this element - */ - public void body(String namespace, String name, String text) { - - // Check that there the value of the element is not null - if (text == null) { - throw new IllegalArgumentException("No QName found in the body of the tag " + name); - } - - // Extract namespace and localpart - int colonIndex = text.lastIndexOf(":"); - if (colonIndex == -1) { - throw new IllegalArgumentException("QName must be on the form namespace:localpart for element " + name); - } - String namespaceURI = text.substring(0, colonIndex); - String localPart = text.substring(colonIndex + 1, text.length()); - - // Build QName - QName qName = new QName(namespaceURI, localPart); - - // Add this QName to the element at the top of the stack - Qname qNameObject = (Qname) digester.peek(); - qNameObject.setName(name); - qNameObject.setQName(qName); - - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbLocalRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbLocalRefRuleSet.java deleted file mode 100644 index 366dde5535..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbLocalRefRuleSet.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze ejb-local-ref - * @author Florent Benoit - */ -public class EjbLocalRefRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public EjbLocalRefRuleSet(String prefix) { - super(prefix); - } - - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "ejb-local-ref", - "org.ow2.jonas.deployment.common.xml.EjbLocalRef"); - digester.addSetNext(prefix + "ejb-local-ref", - "addEjbLocalRef", - "org.ow2.jonas.deployment.common.xml.EjbLocalRef"); - - digester.addCallMethod(prefix + "ejb-local-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "ejb-local-ref/ejb-ref-name", - "setEjbRefName", 0); - digester.addCallMethod(prefix + "ejb-local-ref/ejb-ref-type", - "setEjbRefType", 0); - digester.addCallMethod(prefix + "ejb-local-ref/local-home", - "setLocalHome", 0); - digester.addCallMethod(prefix + "ejb-local-ref/local", - "setLocal", 0); - digester.addCallMethod(prefix + "ejb-local-ref/ejb-link", - "setEjbLink", 0); - - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbRefRuleSet.java deleted file mode 100644 index b17b2ef349..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EjbRefRuleSet.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze ejb-ref - * @author Florent Benoit - */ -public class EjbRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public EjbRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "ejb-ref", - "org.ow2.jonas.deployment.common.xml.EjbRef"); - digester.addSetNext(prefix + "ejb-ref", - "addEjbRef", - "org.ow2.jonas.deployment.common.xml.EjbRef"); - - digester.addCallMethod(prefix + "ejb-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "ejb-ref/ejb-ref-name", - "setEjbRefName", 0); - digester.addCallMethod(prefix + "ejb-ref/ejb-ref-type", - "setEjbRefType", 0); - digester.addCallMethod(prefix + "ejb-ref/home", - "setHome", 0); - digester.addCallMethod(prefix + "ejb-ref/remote", - "setRemote", 0); - digester.addCallMethod(prefix + "ejb-ref/ejb-link", - "setEjbLink", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvEntryRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvEntryRuleSet.java deleted file mode 100644 index c8bd86d404..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvEntryRuleSet.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; -import org.ow2.jonas.deployment.common.digester.NoTrimCallMethodRule; - -/** - * This class defines a rule to analyze environment entries - * @author Florent Benoit - */ -public class EnvEntryRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public EnvEntryRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "env-entry", - "org.ow2.jonas.deployment.common.xml.EnvEntry"); - - digester.addSetNext(prefix + "env-entry", - "addEnvEntry", - "org.ow2.jonas.deployment.common.xml.EnvEntry"); - digester.addCallMethod(prefix + "env-entry/description", - "setDescription", 0); - digester.addCallMethod(prefix + "env-entry/env-entry-name", - "setEnvEntryName", 0); - - digester.addRule(prefix + "env-entry/env-entry-value", new NoTrimCallMethodRule("setEnvEntryValue", 0)); - digester.addCallMethod(prefix + "env-entry/lookup-name", - "setEnvEntryLookupName", 0); - - digester.addCallMethod(prefix + "env-entry/env-entry-type", - "setEnvEntryType", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvironmentRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvironmentRuleSet.java deleted file mode 100644 index 4478115611..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/EnvironmentRuleSet.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze environment of bean, web app, client, etc - * @author Florent Benoit - */ -public class EnvironmentRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public EnvironmentRuleSet(String prefix) { - super(prefix); - } - - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addRuleSet(new ResourceEnvRefRuleSet(prefix)); - digester.addRuleSet(new ResourceRefRuleSet(prefix)); - digester.addRuleSet(new EnvEntryRuleSet(prefix)); - digester.addRuleSet(new EjbRefRuleSet(prefix)); - digester.addRuleSet(new EjbLocalRefRuleSet(prefix)); - digester.addRuleSet(new ServiceRefRuleSet(prefix)); - digester.addRuleSet(new MessageDestinationRefRuleSet(prefix)); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/HandlerRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/HandlerRuleSet.java deleted file mode 100644 index 0a7a3572d1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/HandlerRuleSet.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze handler - * @author Florent Benoit - */ -public class HandlerRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public HandlerRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "handler", - "org.ow2.jonas.deployment.common.xml.Handler"); - - digester.addSetNext(prefix + "handler", - "addHandler", - "org.ow2.jonas.deployment.common.xml.Handler"); - - digester.addCallMethod(prefix + "handler/handler-name", - "setHandlerName", 0); - digester.addCallMethod(prefix + "handler/handler-class", - "setHandlerClass", 0); - - digester.addRuleSet(new InitParamRuleSet(prefix + "handler/")); - digester.addRuleSet(new SoapHeaderRuleSet(prefix + "handler/")); - - digester.addCallMethod(prefix + "handler/soap-role", - "addSoapRole", 0); - - digester.addCallMethod(prefix + "handler/port-name", - "addPortName", 0); - } - - /** - * @return the namespaceURI that is relevant for this RuleSet. - */ - @Override - public String getNamespaceURI() { - return "http://java.sun.com/xml/ns/j2ee"; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/IconRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/IconRuleSet.java deleted file mode 100644 index 9546d77e1b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/IconRuleSet.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: jonas-team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - - -/** - * This class defines the rules to analyze the element icon - * - * @author jonas-team - */ - -public class IconRuleSet extends JRuleSetBase { - - /** - *

    RuleSet for processing the contents of a - *icon definition element. - * - * @author jonas-team - */ - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public IconRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "icon", - "org.ow2.jonas.deployment.common.xml.Icon"); - digester.addSetNext(prefix + "icon", - "setIcon", - "org.ow2.jonas.deployment.common.xml.Icon"); - digester.addCallMethod(prefix + "icon/small-icon", - "setSmallIcon", 0); - digester.addCallMethod(prefix + "icon/large-icon", - "setLargeIcon", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/InitParamRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/InitParamRuleSet.java deleted file mode 100644 index 47d6d335a9..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/InitParamRuleSet.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze init-param - * @author Florent Benoit - */ -public class InitParamRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public InitParamRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "init-param", - "org.ow2.jonas.deployment.common.xml.InitParam"); - - digester.addSetNext(prefix + "init-param", - "addInitParam", - "org.ow2.jonas.deployment.common.xml.InitParam"); - digester.addCallMethod(prefix + "init-param/param-name", - "setParamName", 0); - digester.addCallMethod(prefix + "init-param/param-value", - "setParamValue", 0); - digester.addCallMethod(prefix + "init-param/description", - "setDescription", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JRuleSetBase.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JRuleSetBase.java deleted file mode 100644 index e473083e26..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JRuleSetBase.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.RuleSetBase; - - -/** - * This class defines a JOnAS rule which is used by all the rules to parse XML - * @author Florent Benoit - */ -public abstract class JRuleSetBase extends RuleSetBase { - - /** - * Pattern prefix - */ - protected String prefix = null; - - - /** - * Constructor - * use an empty prefix - */ - public JRuleSetBase() { - this(""); - } - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JRuleSetBase(String prefix) { - super(); - this.namespaceURI = null; - this.prefix = prefix; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasCustomParamRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasCustomParamRuleSet.java deleted file mode 100644 index aeed132340..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasCustomParamRuleSet.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze param-valueType - * @author Guillaume Sauthier - */ -public class JonasCustomParamRuleSet extends JRuleSetBase { - - /** - * paramvalueType element name - */ - private String elementName; - - /** - * xml element classname element name - */ - private String classname; - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - * @param ename element name to use - * @param classname element classname to use - */ - public JonasCustomParamRuleSet(String prefix, String ename, String classname) { - super(prefix); - elementName = ename; - this.classname = classname; - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + elementName, - "org.ow2.jonas.deployment.common.xml." + classname); - digester.addSetNext(prefix + elementName, - "add" + classname, - "org.ow2.jonas.deployment.common.xml." + classname); - digester.addCallMethod(prefix + elementName + "/param-name", - "setParamName", 0); - digester.addCallMethod(prefix + elementName + "/param-value", - "setParamValue", 0); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEjbRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEjbRefRuleSet.java deleted file mode 100644 index 35c3bcd072..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEjbRefRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-ejb-ref - * @author Florent Benoit - */ -public class JonasEjbRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasEjbRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-ejb-ref", - "org.ow2.jonas.deployment.common.xml.JonasEjbRef"); - digester.addSetNext(prefix + "jonas-ejb-ref", - "addJonasEjbRef", - "org.ow2.jonas.deployment.common.xml.JonasEjbRef"); - - digester.addCallMethod(prefix + "jonas-ejb-ref/ejb-ref-name", - "setEjbRefName", 0); - digester.addCallMethod(prefix + "jonas-ejb-ref/jndi-name", - "setJndiName", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEnvironmentRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEnvironmentRuleSet.java deleted file mode 100644 index a70157b0a1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasEnvironmentRuleSet.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze JOnAS environment of bean, web app, - * client, etc - * @author Florent Benoit - */ -public class JonasEnvironmentRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasEnvironmentRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addRuleSet(new JonasResourceEnvRuleSet(prefix)); - digester.addRuleSet(new JonasResourceRuleSet(prefix)); - digester.addRuleSet(new JonasEjbRefRuleSet(prefix)); - digester.addRuleSet(new JonasServiceRefRuleSet(prefix)); - digester.addRuleSet(new JonasMessageDestinationRefRuleSet(prefix)); - digester.addCallMethod(prefix + "run-as/principal-name", "setRunAsPrincipalName", 0); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasInitParamRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasInitParamRuleSet.java deleted file mode 100644 index 336c8b7f49..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasInitParamRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-init-param - * @author Florent Benoit - */ -public class JonasInitParamRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasInitParamRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-init-param", - "org.ow2.jonas.deployment.common.xml.JonasInitParam"); - - digester.addSetNext(prefix + "jonas-init-param", - "addJonasInitParam", - "org.ow2.jonas.deployment.common.xml.JonasInitParam"); - digester.addCallMethod(prefix + "jonas-init-param/param-name", - "setParamName", 0); - digester.addCallMethod(prefix + "jonas-init-param/param-value", - "setParamValue", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRefRuleSet.java deleted file mode 100644 index 39dc93a75a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRefRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-message-destination-ref - * @author Eric Hardesty - */ -public class JonasMessageDestinationRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasMessageDestinationRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-message-destination-ref", - "org.ow2.jonas.deployment.common.xml.JonasMessageDestinationRef"); - digester.addSetNext(prefix + "jonas-message-destination-ref", - "addJonasMessageDestinationRef", - "org.ow2.jonas.deployment.common.xml.JonasMessageDestinationRef"); - - digester.addCallMethod(prefix + "jonas-message-destination-ref/message-destination-ref-name", - "setMessageDestinationRefName", 0); - digester.addCallMethod(prefix + "jonas-message-destination-ref/jndi-name", - "setJndiName", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRuleSet.java deleted file mode 100644 index 2b3ba470ec..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasMessageDestinationRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-message-destination - * @author Eric Hardesty - */ -public class JonasMessageDestinationRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasMessageDestinationRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-message-destination", - "org.ow2.jonas.deployment.common.xml.JonasMessageDestination"); - digester.addSetNext(prefix + "jonas-message-destination", - "addJonasMessageDestination", - "org.ow2.jonas.deployment.common.xml.JonasMessageDestination"); - - digester.addCallMethod(prefix + "jonas-message-destination/message-destination-name", - "setMessageDestinationName", 0); - digester.addCallMethod(prefix + "jonas-message-destination/jndi-name", - "setJndiName", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasPortComponentRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasPortComponentRefRuleSet.java deleted file mode 100644 index 5445153db4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasPortComponentRefRuleSet.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-port-component-ref - * @author Florent Benoit - */ -public class JonasPortComponentRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasPortComponentRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-port-component-ref", - "org.ow2.jonas.deployment.common.xml.JonasPortComponentRef"); - - digester.addSetNext(prefix + "jonas-port-component-ref", "addJonasPortComponentRef", - "org.ow2.jonas.deployment.common.xml.JonasPortComponentRef"); - digester.addCallMethod(prefix + "jonas-port-component-ref/service-endpoint-interface", - "setServiceEndpointInterface", 0); - - digester.addRuleSet(new WsdlPortRuleSet(prefix + "jonas-port-component-ref/")); - - digester.addRuleSet(new JonasCustomParamRuleSet(prefix + "jonas-port-component-ref/", "jonas-stub-property", - "JonasStubProperty")); - digester.addRuleSet(new JonasCustomParamRuleSet(prefix + "jonas-port-component-ref/", "jonas-call-property", - "JonasCallProperty")); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceEnvRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceEnvRuleSet.java deleted file mode 100644 index 71a89e0d7b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceEnvRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-resource-env - * @author Florent Benoit - */ -public class JonasResourceEnvRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasResourceEnvRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-resource-env", - "org.ow2.jonas.deployment.common.xml.JonasResourceEnv"); - digester.addSetNext(prefix + "jonas-resource-env", - "addJonasResourceEnv", - "org.ow2.jonas.deployment.common.xml.JonasResourceEnv"); - - digester.addCallMethod(prefix + "jonas-resource-env/resource-env-ref-name", - "setResourceEnvRefName", 0); - digester.addCallMethod(prefix + "jonas-resource-env/jndi-name", - "setJndiName", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceRuleSet.java deleted file mode 100644 index 12268552ec..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasResourceRuleSet.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze jonas-resource - * @author Florent Benoit - */ -public class JonasResourceRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasResourceRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-resource", - "org.ow2.jonas.deployment.common.xml.JonasResource"); - digester.addSetNext(prefix + "jonas-resource", - "addJonasResource", - "org.ow2.jonas.deployment.common.xml.JonasResource"); - - digester.addCallMethod(prefix + "jonas-resource/res-ref-name", - "setResRefName", 0); - digester.addCallMethod(prefix + "jonas-resource/jndi-name", - "setJndiName", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasServiceRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasServiceRefRuleSet.java deleted file mode 100644 index 8129182614..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/JonasServiceRefRuleSet.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze element jonas-service-ref - * @author Florent Benoit - */ -public class JonasServiceRefRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasServiceRefRuleSet(String prefix) { - super(prefix); - } - - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-service-ref", - "org.ow2.jonas.deployment.common.xml.JonasServiceRef"); - digester.addSetNext(prefix + "jonas-service-ref", - "addJonasServiceRef", - "org.ow2.jonas.deployment.common.xml.JonasServiceRef"); - - // jonas-service-ref/service-ref-name - digester.addCallMethod(prefix + "jonas-service-ref/service-ref-name", - "setServiceRefName", 0); - - // jonas-service-ref/alt-wsdl - digester.addCallMethod(prefix + "jonas-service-ref/alt-wsdl", "setAltWsdl", 0); - - // jonas-service-ref/jonas-init-param* - digester.addRuleSet(new JonasCustomParamRuleSet(prefix + "jonas-service-ref/", "jonas-init-param", "JonasInitParam")); - // jonas-service-ref/jonas-port-component-ref* - digester.addRuleSet(new JonasPortComponentRefRuleSet(prefix + "jonas-service-ref/")); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRefRuleSet.java deleted file mode 100644 index 7f72a783d6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRefRuleSet.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze message-destination-ref - * @author Eric Hardesty - */ -public class MessageDestinationRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public MessageDestinationRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "message-destination-ref", - "org.ow2.jonas.deployment.common.xml.MessageDestinationRef"); - digester.addSetNext(prefix + "message-destination-ref", - "addMessageDestinationRef", - "org.ow2.jonas.deployment.common.xml.MessageDestinationRef"); - - digester.addCallMethod(prefix + "message-destination-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "message-destination-ref/message-destination-ref-name", - "setMessageDestinationRefName", 0); - digester.addCallMethod(prefix + "message-destination-ref/message-destination-type", - "setMessageDestinationType", 0); - digester.addCallMethod(prefix + "message-destination-ref/message-destination-usage", - "setMessageDestinationUsage", 0); - digester.addCallMethod(prefix + "message-destination-ref/message-destination-link", - "setMessageDestinationLink", 0); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRuleSet.java deleted file mode 100644 index 37e1c3e462..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/MessageDestinationRuleSet.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze message-destination - * @author Eric Hardesty - */ -public class MessageDestinationRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public MessageDestinationRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "message-destination", - "org.ow2.jonas.deployment.common.xml.MessageDestination"); - digester.addSetNext(prefix + "message-destination", - "addMessageDestination", - "org.ow2.jonas.deployment.common.xml.MessageDestination"); - - digester.addCallMethod(prefix + "message-destination/message-destination-name", - "setMessageDestinationName", 0); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/PortComponentRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/PortComponentRefRuleSet.java deleted file mode 100644 index 49b346b271..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/PortComponentRefRuleSet.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze port-component-ref - * @author Florent Benoit - */ -public class PortComponentRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public PortComponentRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "port-component-ref", - "org.ow2.jonas.deployment.common.xml.PortComponentRef"); - - digester.addSetNext(prefix + "port-component-ref", - "addPortComponentRef", - "org.ow2.jonas.deployment.common.xml.PortComponentRef"); - digester.addCallMethod(prefix + "port-component-ref/service-endpoint-interface", - "setServiceEndpointInterface", 0); - digester.addCallMethod(prefix + "port-component-ref/port-component-link", - "setPortComponentLink", 0); - } - - /** - * @return the namespaceURI that is relevant for this RuleSet. - */ - @Override - public String getNamespaceURI() { - return "http://java.sun.com/xml/ns/j2ee"; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/QNameRule.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/QNameRule.java deleted file mode 100644 index eeeea6aa22..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/QNameRule.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import java.util.StringTokenizer; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.common.xml.Qname; - -import org.apache.commons.digester.Rule; - - -/** - * Rule that create a new QName object - * @author Florent Benoit - */ -public class QNameRule extends Rule { - - - /** - * This method is called when the body of a matching XML element is - * encountered. If the element has no body, this method is not called at - * all. The default implementation delegates to the deprecated method - * body without the namespace and name parameters, to retain backwards - * compatibility. - * @param namespace the namespace URI of the matching element, - * or an empty string if the parser is not namespace - * aware or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param text The text of the body of this element - */ - public void body(String namespace, String name, String text) { - - // Check that there the value of the element is not null - if (text == null) { - throw new IllegalArgumentException("No QName found in the body of the tag " + name); - } - - // Extract prefix and localpart - StringTokenizer st = new StringTokenizer(text, ":"); - if (st.countTokens() != 2) { - throw new IllegalArgumentException("QName must be on the form prefix:localpart for element " + name); - } - String prefix = st.nextToken(); - String localPart = st.nextToken(); - - // Get namespaceURI from prefix - String namespaceURI = digester.findNamespaceURI(prefix); - if (namespaceURI == null) { - throw new IllegalArgumentException("No namespace found for the prefix '" + prefix + "' in element " + name); - } - - // Build QName - QName qName = new QName(namespaceURI, localPart, prefix); - - // Add this QName to the element at the top of the stack - Qname qNameObject = (Qname) digester.peek(); - qNameObject.setName(name); - qNameObject.setQName(qName); - - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceEnvRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceEnvRefRuleSet.java deleted file mode 100644 index daef2b664b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceEnvRefRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; -/** - * This class defines a rule to analyze resource-env-ref - * @author Florent Benoit - */ -public class ResourceEnvRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public ResourceEnvRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "resource-env-ref", - "org.ow2.jonas.deployment.common.xml.ResourceEnvRef"); - - digester.addSetNext(prefix + "resource-env-ref", - "addResourceEnvRef", - "org.ow2.jonas.deployment.common.xml.ResourceEnvRef"); - digester.addCallMethod(prefix + "resource-env-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "resource-env-ref/resource-env-ref-name", - "setResourceEnvRefName", 0); - digester.addCallMethod(prefix + "resource-env-ref/resource-env-ref-type", - "setResourceEnvRefType", 0); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceRefRuleSet.java deleted file mode 100644 index dc2535ed10..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ResourceRefRuleSet.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze resource-ref - * @author Florent Benoit - */ -public class ResourceRefRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public ResourceRefRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "resource-ref", - "org.ow2.jonas.deployment.common.xml.ResourceRef"); - - digester.addSetNext(prefix + "resource-ref", - "addResourceRef", - "org.ow2.jonas.deployment.common.xml.ResourceRef"); - digester.addCallMethod(prefix + "resource-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "resource-ref/res-ref-name", - "setResRefName", 0); - digester.addCallMethod(prefix + "resource-ref/res-type", - "setResType", 0); - digester.addCallMethod(prefix + "resource-ref/res-auth", - "setResAuth", 0); - digester.addCallMethod(prefix + "resource-ref/res-sharing-scope", - "setResSharingScope", 0); - - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/RunAsRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/RunAsRuleSet.java deleted file mode 100644 index 1b34c4d8b8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/RunAsRuleSet.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element run-as - * - * @author JOnAS team - */ - -public class RunAsRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public RunAsRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "run-as", - "org.ow2.jonas.deployment.common.xml.RunAs"); - digester.addSetNext(prefix + "run-as", - "setRunAs", - "org.ow2.jonas.deployment.common.xml.RunAs"); - digester.addCallMethod(prefix + "run-as/description", - "setDescription", 0); - digester.addCallMethod(prefix + "run-as/role-name", - "setRoleName", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRefRuleSet.java deleted file mode 100644 index cba91bcd37..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRefRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element security-role-ref - * - * @author JOnAS team - */ - -public class SecurityRoleRefRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public SecurityRoleRefRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "security-role-ref", - "org.ow2.jonas.deployment.common.xml.SecurityRoleRef"); - digester.addSetNext(prefix + "security-role-ref", - "addSecurityRoleRef", - "org.ow2.jonas.deployment.common.xml.SecurityRoleRef"); - digester.addCallMethod(prefix + "security-role-ref/description", - "setDescription", 0); - digester.addCallMethod(prefix + "security-role-ref/role-name", - "setRoleName", 0); - digester.addCallMethod(prefix + "security-role-ref/role-link", - "setRoleLink", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRuleSet.java deleted file mode 100644 index 9c1fcdb3b2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SecurityRoleRuleSet.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element security-role - * - * @author JOnAS team - */ - -public class SecurityRoleRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public SecurityRoleRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "security-role", - "org.ow2.jonas.deployment.common.xml.SecurityRole"); - digester.addSetNext(prefix + "security-role", - "addSecurityRole", - "org.ow2.jonas.deployment.common.xml.SecurityRole"); - digester.addCallMethod(prefix + "security-role/description", - "setDescription", 0); - digester.addCallMethod(prefix + "security-role/role-name", - "setRoleName", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceQnameRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceQnameRuleSet.java deleted file mode 100644 index a227bed0d6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceQnameRuleSet.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - - -import org.apache.commons.digester.Digester; - - -/** - * This class defines a rule to analyze service-qname - * @author Florent Benoit - */ -public class ServiceQnameRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public ServiceQnameRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - - digester.addObjectCreate(prefix + "service-qname", - "org.ow2.jonas.deployment.common.xml.Qname"); - - // Object created at runtime with the right namespace - digester.addRule(prefix + "service-qname", new QNameRule()); - - digester.addSetNext(prefix + "service-qname", - "setServiceQname", - "org.ow2.jonas.deployment.common.xml.Qname"); - - } - - /** - * @return the namespaceURI that is relevant for this RuleSet. - */ - @Override - public String getNamespaceURI() { - return "http://java.sun.com/xml/ns/j2ee"; - } - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceRefRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceRefRuleSet.java deleted file mode 100644 index cbd223dfe3..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/ServiceRefRuleSet.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze element service-ref - * @author Florent Benoit - */ -public class ServiceRefRuleSet extends JRuleSetBase { - - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public ServiceRefRuleSet(String prefix) { - super(prefix); - } - - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "service-ref", - "org.ow2.jonas.deployment.common.xml.ServiceRef"); - - digester.addSetNext(prefix + "service-ref", - "addServiceRef", - "org.ow2.jonas.deployment.common.xml.ServiceRef"); - - digester.addCallMethod(prefix + "service-ref/service-ref-name", - "setServiceRefName", 0); - - - digester.addCallMethod(prefix + "service-ref/service-interface", - "setServiceInterface", 0); - - digester.addCallMethod(prefix + "service-ref/wsdl-file", - "setWsdlFile", 0); - - digester.addCallMethod(prefix + "service-ref/jaxrpc-mapping-file", - "setJaxrpcMappingFile", 0); - - - digester.addRuleSet(new ServiceQnameRuleSet(prefix + "service-ref/")); - digester.addRuleSet(new PortComponentRefRuleSet(prefix + "service-ref/")); - digester.addRuleSet(new HandlerRuleSet(prefix + "service-ref/")); - } - - /** - * @return the namespaceURI that is relevant for this RuleSet. - */ - @Override - public String getNamespaceURI() { - return "http://java.sun.com/xml/ns/j2ee"; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SoapHeaderRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SoapHeaderRuleSet.java deleted file mode 100644 index 237cc9b0ab..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/SoapHeaderRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines a rule to analyze soap-header - * @author Florent Benoit - */ -public class SoapHeaderRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public SoapHeaderRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "soap-header", - "org.ow2.jonas.deployment.common.xml.Qname"); - - // Object created at runtime with the right namespace - digester.addRule(prefix + "soap-header", - new QNameRule()); - - digester.addSetNext(prefix + "soap-header", - "addSoapHeader", - "org.ow2.jonas.deployment.common.xml.Qname"); - - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/WsdlPortRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/WsdlPortRuleSet.java deleted file mode 100644 index 22b95b22f6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/rules/WsdlPortRuleSet.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.rules; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element wsdl-port - * - * @author JOnAS team - */ - -public class WsdlPortRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public WsdlPortRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "wsdl-port", - "org.ow2.jonas.deployment.common.xml.Qname"); - // Object created at runtime with the right namespace - digester.addRule(prefix + "wsdl-port", new QNameRule()); - digester.addSetNext(prefix + "wsdl-port", - "setWsdlPort", - "org.ow2.jonas.deployment.common.xml.Qname"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/util/ResourceHelper.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/util/ResourceHelper.java deleted file mode 100644 index c176cd09f0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/util/ResourceHelper.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.util; - -/** - * Resource name helper. - * @author Guillaume Sauthier - */ -public final class ResourceHelper { - - /** - * Default private constructor for utility class. - */ - private ResourceHelper() { } - - /** - * @param clazz Class located in the package. - * @return the class package name that can be used to load resources (. replaced by /). - */ - public static String getResourcePackage(final Class clazz) { - String packageName = clazz.getPackage().getName(); - return convertPackageName(packageName); - } - - /** - * @param packageName a java package name. - * @return the package name that can be used to load resources (. replaced by /). - */ - public static String convertPackageName(final String packageName) { - return packageName.replace('.', '/').concat("/"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsDescriptionElement.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsDescriptionElement.java deleted file mode 100644 index 2f4b63ce95..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsDescriptionElement.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines an abstract implementation for all statndard environment element - * (entity, session, web-app, application-client, etc.).. - * - * @author Florent Benoit - */ -public abstract class AbsDescriptionElement extends AbsElement implements DescriptionGroupXml { - - /** - * icon - */ - private Icon icon = null; - - /** - * description - */ - private String description = null; - - /** - * Display name - */ - private String displayName = null; - - /** - * Construct an empty AbsDescriptionElement. - */ - public AbsDescriptionElement() { - super(); - icon = new Icon(); - } - - /** - * @return the display-name element - */ - public String getDisplayName() { - return displayName; - } - - - /** - * Set the display-name - * @param displayname displayname - */ - public void setDisplayName(String displayname) { - displayName = displayname; - } - /** - * @return the icon - */ - public Icon getIcon() { - return icon; - } - - - /** - * Set the icon - * @param icon icon - */ - public void setIcon(Icon icon) { - this.icon = icon; - } - - - /** - * Set the small icon - * @param small small icon - */ - public void setSmallIcon(String small) { - icon.setSmallIcon(small); - } - - /** - * get the small icon - * @return String small icon - */ - public String setSmallIcon() { - return icon.getSmallIcon(); - } - /** - * Set the large icon - * @param large large icon - */ - public void setLargeIcon(String large) { - icon.setLargeIcon(large); - } - /** - * get the large icon - * @return String large icon - */ - public String setLargeIcon() { - return icon.getLargeIcon(); - } - - /** - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Set the description - * @param description description - */ - public void setDescription(String description) { - this.description = description; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsElement.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsElement.java deleted file mode 100644 index ea89ce63f8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsElement.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the interface Element. - * These elements are used by Digester during the xml parsing. - * @author Florent Benoit - */ -public abstract class AbsElement implements Element { - - /** - * Tenant identifier - */ - private String tenantId = null; - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public abstract String toXML(int indent); - - - /** - * Represents this element by it's XML description. - * Use a default indent set to 0. - * @return the XML description of this object. - */ - public String toXML() { - return toXML(0); - } - - /** - * Return the representation of this element. - * Use the XML representation of the object for the toString() method. - * @return the XML description of this object. - */ - public String toString() { - return toXML(); - } - - - /** - * Return indent spaces. - * @param indent number of indentation. - * @return the indent space string. - */ - protected String indent(int indent) { - String txt = ""; - for (int i = 0; i < indent; i++) { - txt += " "; - } - return txt; - } - - /** - * Return the xml representation of the specified value with the root-element xmlTag - * @param value String value to represent in XML - * @param xmlTag tag of the root-element - * @param indent indent to use - * @return xml representation of the specified value - */ - protected String xmlElement(String value, String xmlTag, int indent) { - if (value == null) { - return ""; - } - - // else - - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("<"); - sb.append(xmlTag); - sb.append(">"); - sb.append(value); - sb.append("\n"); - return sb.toString(); - } - - /** - * Return the xml representation of the specified attribute value - * @param value String value to represent in XML - * @param xmlTag tag of the attribute - * @return xml representation of the specified value - */ - protected String xmlAttribute(String value, String xmlTag) { - if (value == null) { - return ""; - } - - // else - - StringBuffer sb = new StringBuffer(); - sb.append(" "); - sb.append(xmlTag); - sb.append("=\""); - sb.append(value); - sb.append("\""); - return sb.toString(); - } - - /** - * Set the tenant identifier - * @param tenantId tenant identifier - */ - public void setTenantId(final String tenantId) { - this.tenantId = tenantId; - } - - /** - * @return the tenant identifier - */ - public String getTenantId() { - return tenantId; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsEnvironmentElement.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsEnvironmentElement.java deleted file mode 100644 index 76bd0df10f..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsEnvironmentElement.java +++ /dev/null @@ -1,221 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines an abstract implementation for all environment element - * - * Entity, Session, WebApp, Application-client elements must extend this class - * @author Florent Benoit - */ -public abstract class AbsEnvironmentElement extends AbsDescriptionElement implements JndiEnvRefsGroupXml { - - /** - * List of ejb-local-ref - */ - private JLinkedList ejbLocalRefList = null; - - /** - * List of ejb-ref - */ - private JLinkedList ejbRefList = null; - - /** - * List of env-entry - */ - private JLinkedList envEntryList = null; - - /** - * List of resource-env-ref - */ - private JLinkedList resourceEnvRefList = null; - - /** - * List of resource-ref - */ - private JLinkedList resourceRefList = null; - - - /** - * List of service-ref - */ - private JLinkedList serviceRefList = null; - - /** - * List of message-destination-ref - */ - private JLinkedList messageDestinationRefList = null; - - /** - * List of persistence-unit-ref - */ - private JLinkedList persistenceUnitRefList = null; - - /** - * Constructor : build a new object for environment - */ - public AbsEnvironmentElement() { - super(); - ejbLocalRefList = new JLinkedList("ejb-local-ref"); - ejbRefList = new JLinkedList("ejb-ref"); - envEntryList = new JLinkedList("env-entry"); - resourceEnvRefList = new JLinkedList("resource-env-ref"); - resourceRefList = new JLinkedList("resource-ref"); - serviceRefList = new JLinkedList("service-ref"); - messageDestinationRefList = new JLinkedList("message-destination-ref"); - persistenceUnitRefList = new JLinkedList("persistence-unit-ref"); - } - - - - // Setters - - /** - * Add a new ejb-local-ref element to this object - * @param ejbLocalRef the ejb-local-ref object - */ - public void addEjbLocalRef(final EjbLocalRef ejbLocalRef) { - ejbLocalRefList.add(ejbLocalRef); - } - - - /** - * Add a new ejb-ref element to this object - * @param ejbRef the ejb-ref object - */ - public void addEjbRef(final EjbRef ejbRef) { - ejbRefList.add(ejbRef); - } - - /** - * Add a new env-entry element to this object - * @param envEntry the ejb-ref object - */ - public void addEnvEntry(final EnvEntry envEntry) { - envEntryList.add(envEntry); - } - - /** - * Add a new resource-env-ref element to this object - * @param resourceEnvRef the resource-env-ref object - */ - public void addResourceEnvRef(final ResourceEnvRef resourceEnvRef) { - resourceEnvRefList.add(resourceEnvRef); - } - - /** - * Add a new resource-ref element to this object - * @param resourceRef the resource-ref object - */ - public void addResourceRef(final ResourceRef resourceRef) { - resourceRefList.add(resourceRef); - } - - - /** - * Add a new service-ref element to this object - * @param serviceRef the service-ref object - */ - public void addServiceRef(final ServiceRef serviceRef) { - serviceRefList.add(serviceRef); - } - - /** - * Add a new message-destination-ref element to this object - * @param messageDestinationRef the message-destination-ref object - */ - public void addMessageDestinationRef(final MessageDestinationRef messageDestinationRef) { - messageDestinationRefList.add(messageDestinationRef); - } - - /** - * Add a new persistence-unit-ref element to this object - * @param persistenceUnitRef the persistence-unit-ref object - */ - public void addPersistenceUnitRef(final PersistenceUnitRef persistenceUnitRef) { - persistenceUnitRefList.add(persistenceUnitRef); - } - - // Getters - - /** - * @return the list of all ejb-local-ref elements - */ - public JLinkedList getEjbLocalRefList() { - return ejbLocalRefList; - } - - /** - * @return the list of all ejb-ref elements - */ - public JLinkedList getEjbRefList() { - return ejbRefList; - } - - /** - * @return the list of all env-entry elements - */ - public JLinkedList getEnvEntryList() { - return envEntryList; - } - - /** - * @return the list of all resource-env-ref elements - */ - public JLinkedList getResourceEnvRefList() { - return resourceEnvRefList; - } - - - /** - * @return the list of all resource-ref elements - */ - public JLinkedList getResourceRefList() { - return resourceRefList; - } - - /** - * @return the list of all service-ref elements - */ - public JLinkedList getServiceRefList() { - return serviceRefList; - } - - /** - * @return the list of all messageDestination-ref elements - */ - public JLinkedList getMessageDestinationRefList() { - return messageDestinationRefList; - } - - /** - * @return the list of all persistence-unit-ref elements - */ - public JLinkedList getPersistenceUnitRefList() { - return persistenceUnitRefList; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasEnvironmentElement.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasEnvironmentElement.java deleted file mode 100644 index 6cb0dcc600..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasEnvironmentElement.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines an abstract implementation for all jonas environment element - * (jonas-entity, jonas-session, jonas-web-app, jonas-client, etc.). - * - * @author Florent Benoit - */ -public abstract class AbsJonasEnvironmentElement extends AbsElement implements JonasJndiEnvRefsGroupXml { - - /** - * List of jonas-ejb-ref - */ - private JLinkedList jonasEjbRefList = null; - - /** - * List of jonas-resource-env - */ - private JLinkedList jonasResourceEnvRefList = null; - - /** - * List of jonas-resource - */ - private JLinkedList jonasResourceRefList = null; - - - /** - * List of jonas-service-ref - */ - private JLinkedList jonasServiceRefList = null; - - /** - * List of jonas-message-destination-ref - */ - private JLinkedList jonasMessageDestinationRefList = null; - - /** - * Constructor : build a new object which is common to environment elements - */ - public AbsJonasEnvironmentElement() { - super(); - jonasEjbRefList = new JLinkedList("jonas-ejb-ref"); - jonasResourceEnvRefList = new JLinkedList("jonas-resource-env"); - jonasResourceRefList = new JLinkedList("jonas-resource"); - jonasServiceRefList = new JLinkedList("jonas-service-ref"); - jonasMessageDestinationRefList = new JLinkedList("jonas-message-destination-ref"); - } - - - - // Setters - - /** - * Add a new jonas-ejb-ref element to this object - * @param jonasEjbRef the jonas-ejb-ref object - */ - public void addJonasEjbRef(JonasEjbRef jonasEjbRef) { - jonasEjbRefList.add(jonasEjbRef); - } - - - /** - * Add a new jonas-resource-env element to this object - * @param jonasResourceEnv the jonas-resource-env object - */ - public void addJonasResourceEnv(JonasResourceEnv jonasResourceEnv) { - jonasResourceEnvRefList.add(jonasResourceEnv); - } - - /** - * Add a new jonas-resource element to this object - * @param jonasResource the jonas-resource object - */ - public void addJonasResource(JonasResource jonasResource) { - jonasResourceRefList.add(jonasResource); - } - - /** - * Add a new jonas-service-ref element to this object - * @param jonasServiceRef the jonas-service-ref object - */ - public void addJonasServiceRef(JonasServiceRef jonasServiceRef) { - jonasServiceRefList.add(jonasServiceRef); - } - - - /** - * Add a new jonas-message-destination-ref element to this object - * @param jonasMessageDestinationRef the jonas-message-destination-ref object - */ - public void addJonasMessageDestinationRef(JonasMessageDestinationRef jonasMessageDestinationRef) { - jonasMessageDestinationRefList.add(jonasMessageDestinationRef); - } - - // Getters - - /** - * @return the list of all jonas-ejb-ref elements - */ - public JLinkedList getJonasEjbRefList() { - return jonasEjbRefList; - } - - /** - * @return the list of all jonas-resource-env elements - */ - public JLinkedList getJonasResourceEnvList() { - return jonasResourceEnvRefList; - } - - /** - * @return the list of all jonas-resource elements - */ - public JLinkedList getJonasResourceList() { - return jonasResourceRefList; - } - - - /** - * @return the list of all jonas-service-ref elements - */ - public JLinkedList getJonasServiceRefList() { - return jonasServiceRefList; - } - - /** - * @return the list of all jonas-message-destination-ref elements - */ - public JLinkedList getJonasMessageDestinationRefList() { - return jonasMessageDestinationRefList; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasParam.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasParam.java deleted file mode 100644 index 35579b833b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/AbsJonasParam.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-param - * @author Guillaume Sauthier - */ -public abstract class AbsJonasParam extends AbsElement { - - /** - * Name of this parameter - */ - private String paramName = null; - - /** - * Value of this parameter - */ - private String paramValue = null; - - /** - * Element name - */ - private String elementName = null; - - /** - * Construct a JOnASParam with given Element name. - * @param ename Element name - */ - protected AbsJonasParam(String ename) { - elementName = ename; - } - - // Setters - - /** - * Sets the name - * @param paramName the name to use - */ - public void setParamName(String paramName) { - this.paramName = paramName; - } - - - /** - * Sets the value - * @param paramValue the value - */ - public void setParamValue(String paramValue) { - this.paramValue = paramValue; - } - - // Getters - - - /** - * @return the name of the parameter - */ - public String getParamName() { - return paramName; - } - - - /** - * @return the value of the parameter - */ - public String getParamValue() { - return paramValue; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("<" + elementName + ">\n"); - - indent += 2; - - // name - sb.append(xmlElement(paramName, "param-name", indent)); - - // value - sb.append(xmlElement(paramValue, "param-value", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/DescriptionGroupXml.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/DescriptionGroupXml.java deleted file mode 100644 index 652af9d183..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/DescriptionGroupXml.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.common.xml; - -/** - * This interface provides to the value of Xml element of a DescritionGroup - * @author Philippe Coq - */ - -public interface DescriptionGroupXml { - - /** - * Get the display name of the deployment descriptor. - * @return the display name of the deployment descriptor. - */ - String getDisplayName(); - - /** - * Get the description of the deployment descriptor. - * @return the description of the deployment descriptor. - */ - String getDescription(); - - /** - * Get the icon of the deployment descriptor. - * @return the small-icon of the deployment descriptor. - */ - Icon getIcon(); - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbLocalRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbLocalRef.java deleted file mode 100644 index e34969af33..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbLocalRef.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element ejb-local-ref. - * @author Florent Benoit - */ -public class EjbLocalRef extends AbsElement { - - /** - * Description of the ejb-local-ref - */ - private String description = null; - - /** - * Name of this ejb-local-ref - */ - private String ejbRefName = null; - - /** - * Type of this ejb-local-ref - */ - private String ejbRefType = null; - - /** - * Local Home of this ejb-local-ref - */ - private String localHome = null; - - /** - * Local interface of this ejb-local-ref - */ - private String local = null; - - /** - * ejb-link of this ejb-local-ref - */ - private String ejbLink = null; - - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - - /** - * Sets the name - * @param ejbRefName the name to use - */ - public void setEjbRefName(String ejbRefName) { - this.ejbRefName = ejbRefName; - } - - - /** - * Sets the type - * @param ejbRefType the type to use - */ - public void setEjbRefType(String ejbRefType) { - this.ejbRefType = ejbRefType; - } - - - /** - * Sets the local home interface - * @param localHome the local home interface to use - */ - public void setLocalHome(String localHome) { - this.localHome = localHome; - } - /** - * Sets the local interface - * @param local the local interface to use - */ - public void setLocal(String local) { - this.local = local; - } - - - /** - * Sets the ejb-link - * @param ejbLink the ejb-link to use - */ - public void setEjbLink(String ejbLink) { - this.ejbLink = ejbLink; - } - - - // Getters - - /** - * @return the description of the ejb-local-ref - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the ejb-local-ref - */ - public String getEjbRefName() { - return ejbRefName; - } - - - /** - * @return the type of the ejb-local-ref - */ - public String getEjbRefType() { - return ejbRefType; - } - - /** - * @return the local home interface of the ejb-local-ref - */ - public String getLocalHome() { - return localHome; - } - - /** - * @return the local interface of the ejb-local-ref - */ - public String getLocal() { - return local; - } - - /** - * @return the ejb-link of the ejb-local-ref - */ - public String getEjbLink() { - return ejbLink; - } - - - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(ejbRefName, "ejb-ref-name", indent)); - - // type - sb.append(xmlElement(ejbRefType, "ejb-ref-type", indent)); - - // local home interface - sb.append(xmlElement(localHome, "local-home", indent)); - - // local interface - sb.append(xmlElement(local, "local", indent)); - - // ejb-link - sb.append(xmlElement(ejbLink, "ejb-link", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbRef.java deleted file mode 100644 index d17e9c06cc..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EjbRef.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element ejb-ref. - * @author Florent Benoit - */ -public class EjbRef extends AbsElement { - - /** - * Description of the ejb-ref - */ - private String description = null; - - /** - * Name of this ejb-ref - */ - private String ejbRefName = null; - - /** - * Type of this ejb-ref - */ - private String ejbRefType = null; - - /** - * Home of this ejb-ref - */ - private String home = null; - - /** - * Remote of this ejb-ref - */ - private String remote = null; - - /** - * ejb-link of this ejb-ref - */ - private String ejbLink = null; - - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - - /** - * Sets the name - * @param ejbRefName the name to use - */ - public void setEjbRefName(String ejbRefName) { - this.ejbRefName = ejbRefName; - } - - - /** - * Sets the type - * @param ejbRefType the type to use - */ - public void setEjbRefType(String ejbRefType) { - this.ejbRefType = ejbRefType; - } - - - /** - * Sets the home interface - * @param home the home interface to use - */ - public void setHome(String home) { - this.home = home; - } - /** - * Sets the remote interface - * @param remote the remote interface to use - */ - public void setRemote(String remote) { - this.remote = remote; - } - - - /** - * Sets the ejb-link - * @param ejbLink the ejb-link to use - */ - public void setEjbLink(String ejbLink) { - this.ejbLink = ejbLink; - } - - - // Getters - - /** - * @return the description of the ejb-ref - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the ejb-ref - */ - public String getEjbRefName() { - return ejbRefName; - } - - - /** - * @return the type of the ejb-ref - */ - public String getEjbRefType() { - return ejbRefType; - } - - /** - * @return the home interface of the ejb-ref - */ - public String getHome() { - return home; - } - - /** - * @return the remote interface of the ejb-ref - */ - public String getRemote() { - return remote; - } - - /** - * @return the ejb-link of the ejb-ref - */ - public String getEjbLink() { - return ejbLink; - } - - - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(ejbRefName, "ejb-ref-name", indent)); - - // type - sb.append(xmlElement(ejbRefType, "ejb-ref-type", indent)); - - // home interface - sb.append(xmlElement(home, "home", indent)); - - // remote interface - sb.append(xmlElement(remote, "remote", indent)); - - // ejb-link - sb.append(xmlElement(ejbLink, "ejb-link", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Element.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Element.java deleted file mode 100644 index d6c5420e68..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Element.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -import java.io.Serializable; - -/** - * This class defines the interface that all Element objects must use. - * These elements are used by Digester during the xml parsing - * @author Florent Benoit - */ -public interface Element extends Serializable { - - - /** - * Represents this element by it's XML description - * @param indent use this indent for prexifing XML representation - * @return the XML description of this object - */ - String toXML(int indent); - - - /** - * Represents this element by it's XML description - * Use a default indent set to 0 - * @return the XML description of this object - */ - String toXML(); - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EnvEntry.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EnvEntry.java deleted file mode 100644 index 8f44336944..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/EnvEntry.java +++ /dev/null @@ -1,182 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element env-entry. - * @author Florent Benoit - */ -public class EnvEntry extends AbsElement { - - /** - * Description of the env-entry - */ - private String description = null; - - /** - * Name of the env-entry - */ - private String envEntryName = null; - - /** - * Value of the env-entry - */ - private String envEntryValue = null; - - /** - * Type of the env-entry - */ - private String envEntryType = null; - - /** - * Lookup-name of the env-entry - */ - private String envEntryLookupName = null; - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * Sets the name - * @param envEntryName the name to use - */ - public void setEnvEntryName(final String envEntryName) { - this.envEntryName = envEntryName; - } - - /** - * Sets the value - * @param envEntryValue the value to use - */ - public void setEnvEntryValue(final String envEntryValue) { - this.envEntryValue = envEntryValue; - } - - /** - * Sets the type - * @param envEntryType the type to use - */ - public void setEnvEntryType(final String envEntryType) { - this.envEntryType = envEntryType; - } - - /** - * Sets the lookup name - * @param envEntryLookupName the value to use - */ - public void setEnvEntryLookupName(final String envEntryLookupName) { - this.envEntryLookupName = envEntryLookupName; - } - - // Getters - - /** - * @return the description of the env-entry - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the env-entry - */ - public String getEnvEntryName() { - return envEntryName; - } - - - /** - * @return the value of the env-entry - */ - public String getEnvEntryValue() { - return envEntryValue; - } - - /** - * @return the value of the lookup-name - */ - public String getEnvEntryLookupName() { - return envEntryLookupName; - } - - - /** - * @return the type of the env-entry - */ - public String getEnvEntryType() { - return envEntryType; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - @Override - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(envEntryName, "env-entry-name", indent)); - - // type - sb.append(xmlElement(envEntryType, "env-entry-type", indent)); - - // value - if (envEntryValue != null) { - sb.append(xmlElement(envEntryValue, "env-entry-value", indent)); - } - - // value - if (envEntryLookupName != null) { - sb.append(xmlElement(envEntryLookupName, "lookup-name", indent)); - } - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Handler.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Handler.java deleted file mode 100644 index 92c588d206..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Handler.java +++ /dev/null @@ -1,211 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element handler. - * @author Florent Benoit - */ -public class Handler extends AbsElement { - - /** - * Name of the handler - */ - private String handlerName = null; - - /** - * List of elements init-param - */ - private JLinkedList initParamList = null; - - /** - * List of elements soap-header - */ - private JLinkedList soapHeaderList = null; - - /** - * List of elements soap-role - */ - private JLinkedList soapRoleList = null; - - /** - * List of elements port-name - */ - private JLinkedList portNameList = null; - - - /** - * Class of the handler - */ - private String handlerClass = null; - - /** - * Constructor : build a new Handler object - */ - public Handler() { - super(); - initParamList = new JLinkedList("init-param"); - soapHeaderList = new JLinkedList("soap-header"); - soapRoleList = new JLinkedList("soap-role"); - portNameList = new JLinkedList("port-name"); - } - - - // Setters - - /** - * Sets the name - * @param handlerName the name to use - */ - public void setHandlerName(String handlerName) { - this.handlerName = handlerName; - } - - /** - * Add a new port-name element to this object - * @param portName the port-name object - */ - public void addPortName(String portName) { - portNameList.add(portName); - } - - - /** - * Add a new soap-role element to this object - * @param soapRole the soap-role object - */ - public void addSoapRole(String soapRole) { - soapRoleList.add(soapRole); - } - - /** - * Add a new soap-header element to this object - * @param soapHeader the soap-header object - */ - public void addSoapHeader(Qname soapHeader) { - soapHeaderList.add(soapHeader); - } - - /** - * Add a new init-param element to this object - * @param initParam the init-param object - */ - public void addInitParam(InitParam initParam) { - initParamList.add(initParam); - } - - /** - * Sets the class - * @param handlerClass the class to use - */ - public void setHandlerClass(String handlerClass) { - this.handlerClass = handlerClass; - } - - // Getters - - /** - * @return the name of the handler - */ - public String getHandlerName() { - return handlerName; - } - - /** - * @return the class of the handler - */ - public String getHandlerClass() { - return handlerClass; - } - - /** - * @return the list of all init-param elements - */ - public JLinkedList getInitParamList() { - return initParamList; - } - - /** - * @return the list of all soap-header elements - */ - public JLinkedList getSoapHeaderList() { - return soapHeaderList; - } - - /** - * @return the list of all soap-role elements - */ - public JLinkedList getSoapRoleList() { - return soapRoleList; - } - - /** - * @return the list of all port-name elements - */ - public JLinkedList getPortNameList() { - return portNameList; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // handler-name - sb.append(xmlElement(handlerName, "handler-name", indent)); - - // handler-class - sb.append(xmlElement(handlerClass, "handler-class", indent)); - - // init-param - sb.append(initParamList.toXML(indent)); - - // soap-header - sb.append(soapHeaderList.toXML(indent)); - - // soap-role - sb.append(soapRoleList.toXML(indent)); - - // port-name - sb.append(portNameList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Icon.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Icon.java deleted file mode 100644 index 8f8833d2f3..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Icon.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element icon. - * @author Florent Benoit - */ -public class Icon extends AbsElement { - - /** - * Name of the small icon - */ - private String smallIcon = null; - - /** - * Name of the large icon - */ - private String largeIcon = null; - - - // Setters - - /** - * Sets the small icon name - * @param smallIcon the name of the file for small GIF or JPEG icon image - */ - public void setSmallIcon(String smallIcon) { - this.smallIcon = smallIcon; - } - - - /** - * Sets the large icon name - * @param largeIcon the name of the file for large GIF or JPEG icon image - */ - public void setLargeIcon(String largeIcon) { - this.largeIcon = largeIcon; - } - - - - - // Getters - - /** - * @return the small icon name - */ - public String getSmallIcon() { - return smallIcon; - } - - - /** - * @return the large icon name - */ - public String getLargeIcon() { - return largeIcon; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // small-icon - sb.append(xmlElement(smallIcon, "small-icon", indent)); - - // large-icon - sb.append(xmlElement(largeIcon, "large-icon", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/InitParam.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/InitParam.java deleted file mode 100644 index d0ffdfafad..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/InitParam.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element init-param - * @author Florent Benoit - */ -public class InitParam extends AbsElement { - - /** - * Name of this parameter - */ - private String paramName = null; - - /** - * Value of this parameter - */ - private String paramValue = null; - - /** - * Description of the ejb-ref - */ - private String description = null; - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Sets the name - * @param paramName the name to use - */ - public void setParamName(String paramName) { - this.paramName = paramName; - } - - - /** - * Sets the value - * @param paramValue the value - */ - public void setParamValue(String paramValue) { - this.paramValue = paramValue; - } - - - - // Getters - - - /** - * @return the name of the parameter - */ - public String getParamName() { - return paramName; - } - - - /** - * @return the value of the parameter - */ - public String getParamValue() { - return paramValue; - } - - /** - * @return the description of the parameter - */ - public String getDescription() { - return description; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(paramName, "param-name", indent)); - - // value - sb.append(xmlElement(paramValue, "param-value", indent)); - - // value - sb.append(xmlElement(description, "description", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JLinkedList.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JLinkedList.java deleted file mode 100644 index d2ecabd3e5..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JLinkedList.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -import java.util.Iterator; -import java.util.LinkedList; - -/** - * This class defines a linked list with the ability to display its content in XML. - * @author Florent Benoit - */ -public class JLinkedList extends LinkedList { - - - /** - * serial ID. - */ - private static final long serialVersionUID = 1L; - /** - * Tag of the root element. - */ - private String tag = null; - - - /** - * Constructor with a specified tag - * @param tag of the root element (use for xml representation) - */ - public JLinkedList(final String tag) { - super(); - this.tag = tag; - } - - - /** - * Represents this element by it's XML description. - * Use a default indent set to 0. - * @return the XML description of this object. - */ - public String toXML() { - return toXML(0); - } - - /** - * Return the representation of this element. - * Use the XML representation of the object for the toString() method. - * @return the XML description of this object. - */ - public String toString() { - return toXML(); - } - - - /** - * Return indent spaces. - * @param indent number of indentation. - * @return the indent space string. - */ - private String indent(final int indent) { - String txt = ""; - for (int i = 0; i < indent; i++) { - txt += " "; - } - return txt; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - @SuppressWarnings("unchecked") - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - // Only if there are elements - if (this.size() > 0) { - for (Iterator i = this.iterator(); i.hasNext();) { - Object o = i.next(); - // Element or String ? - if (o instanceof Element) { - sb.append(((Element) o).toXML(indent)); - } else { - sb.append(indent(indent)); - sb.append("<"); - sb.append(tag); - sb.append(">"); - sb.append(o); - sb.append("\n"); - } - } - } - return sb.toString(); - } - - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JndiEnvRefsGroupXml.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JndiEnvRefsGroupXml.java deleted file mode 100644 index 3299d0baf6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JndiEnvRefsGroupXml.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - - -/** - * This interface provides to the value of Xml elements of a JndiEnvRefsGroup - * @author Philippe Coq - */ - -public interface JndiEnvRefsGroupXml extends DescriptionGroupXml { - /** - * @return the list of all ejb-local-ref elements - */ - JLinkedList getEjbLocalRefList(); - - /** - * @return the list of all ejb-ref elements - */ - JLinkedList getEjbRefList(); - - /** - * @return the list of all env-entry elements - */ - JLinkedList getEnvEntryList(); - - /** - * @return the list of all resource-env-ref elements - */ - JLinkedList getResourceEnvRefList(); - - /** - * @return the list of all resource-ref elements - */ - JLinkedList getResourceRefList(); - - /** - * @return the list of all service-ref elements - */ - JLinkedList getServiceRefList(); - - /** - * @return the list of all message-destination-ref elements - */ - JLinkedList getMessageDestinationRefList(); - - /** - * @return the list of all persistence-unit-ref elements - */ - JLinkedList getPersistenceUnitRefList(); -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasCallProperty.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasCallProperty.java deleted file mode 100644 index a2300f5882..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasCallProperty.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-init-param - * @author Florent Benoit - */ -public class JonasCallProperty extends AbsJonasParam { - - /** - * Default constructor - */ - public JonasCallProperty() { - super("jonas-call-property"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasEjbRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasEjbRef.java deleted file mode 100644 index 2b17fe3d49..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasEjbRef.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-ejb-ref. - * @author Florent Benoit - */ -public class JonasEjbRef extends AbsElement { - - /** - * Name of this jonas-ejb-ref - */ - private String ejbRefName = null; - - /** - * jndi name of this jonas-ejb-ref - */ - private String jndiName = null; - - - // Setters - - /** - * Sets the name - * @param ejbRefName the name to use - */ - public void setEjbRefName(String ejbRefName) { - this.ejbRefName = ejbRefName; - } - - - /** - * Sets the jndi name - * @param jndiName the jndi-name to use - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - - // Getters - - - /** - * @return the name of the jonas-ejb-ref - */ - public String getEjbRefName() { - return ejbRefName; - } - - - /** - * @return the jndi-name of the jonas-ejb-ref - */ - public String getJndiName() { - return jndiName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(ejbRefName, "ejb-ref-name", indent)); - - // jndi-name - sb.append(xmlElement(jndiName, "jndi-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasInitParam.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasInitParam.java deleted file mode 100644 index e76192e9bc..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasInitParam.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-init-param - * @author Florent Benoit - */ -public class JonasInitParam extends AbsJonasParam { - - /** - * Default constructor - */ - public JonasInitParam() { - super("jonas-init-param"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasJndiEnvRefsGroupXml.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasJndiEnvRefsGroupXml.java deleted file mode 100644 index 80a10d32d9..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasJndiEnvRefsGroupXml.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.common.xml; - - -/** - * This interface provides to the value of Xml elements of a JonasJndiEnvRefsGroup - * @author Philippe Coq - */ - -public interface JonasJndiEnvRefsGroupXml { - - /** - * @return the list of all jonas-ejb-ref elements - */ - JLinkedList getJonasEjbRefList(); - - - /** - * @return the list of all jonas-resource-env elements - */ - JLinkedList getJonasResourceEnvList(); - - - /** - * @return the list of all jonas-resource elements - */ - JLinkedList getJonasResourceList(); - - - /** - * @return the list of all jonas-service elements - */ - JLinkedList getJonasServiceRefList(); - - /** - * @return the list of all jonas-message-destination-ref elements - */ - JLinkedList getJonasMessageDestinationRefList(); - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestination.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestination.java deleted file mode 100644 index 1f4208033a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestination.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-message-destination. - * @author Eric Hardesty - */ -public class JonasMessageDestination extends AbsElement { - - /** - * Name of this jonas-message-destination - */ - private String messageDestinationName = null; - - /** - * jndi name of this jonas-message-destination - */ - private String jndiName = null; - - - // Setters - - /** - * Sets the name - * @param name the name to use - */ - public void setMessageDestinationName(String name) { - this.messageDestinationName = name; - } - - - /** - * Sets the jndi name - * @param jndiName the jndi-name to use - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - - // Getters - - - /** - * @return the name of the jonas-message-destination - */ - public String getMessageDestinationName() { - return messageDestinationName; - } - - - /** - * @return the jndi-name of the jonas-message-destination - */ - public String getJndiName() { - return jndiName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(messageDestinationName, "message-destination-name", indent)); - - // jndi-name - sb.append(xmlElement(jndiName, "jndi-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestinationRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestinationRef.java deleted file mode 100644 index 75e0f45c91..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasMessageDestinationRef.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-message-destination-ref. - * @author Eric Hardesty - */ -public class JonasMessageDestinationRef extends AbsElement { - - /** - * Name of this jonas-message-destination-ref - */ - private String messageDestinationRefName = null; - - /** - * jndi name of this jonas-message-destination-ref - */ - private String jndiName = null; - - - // Setters - - /** - * Sets the name - * @param name the name to use - */ - public void setMessageDestinationRefName(String name) { - this.messageDestinationRefName = name; - } - - - /** - * Sets the jndi name - * @param jndiName the jndi-name to use - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - - // Getters - - - /** - * @return the name of the jonas-message-destination-ref - */ - public String getMessageDestinationRefName() { - return messageDestinationRefName; - } - - - /** - * @return the jndi-name of the jonas-message-destination-ref - */ - public String getJndiName() { - return jndiName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(messageDestinationRefName, "message-destination-ref-name", indent)); - - // jndi-name - sb.append(xmlElement(jndiName, "jndi-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasParam.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasParam.java deleted file mode 100644 index db2d23f78c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasParam.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-init-param - * @author Florent Benoit - */ -public class JonasParam extends AbsJonasParam { - - /** - * Default constructor - */ - public JonasParam() { - super("jonas-param"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasPortComponentRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasPortComponentRef.java deleted file mode 100644 index 34b4caf133..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasPortComponentRef.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - - - -/** - * This class defines the implementation of the element jonas-port-component-ref. - * @author Florent Benoit - */ -public class JonasPortComponentRef extends AbsElement { - - /** - * service endpoint interface - */ - private String serviceEndpointInterface = null; - - /** - * wsdl port - */ - private Qname wsdlPort = null; - - /** - * jonas-stub-property list - */ - private JLinkedList jonasStubPropList = null; - - /** - * jonas-call-property list - */ - private JLinkedList jonasCallPropList = null; - - /** - * Constructor : build a new JonasServiceRef object - */ - public JonasPortComponentRef() { - jonasStubPropList = new JLinkedList("jonas-stub-property"); - jonasCallPropList = new JLinkedList("jonas-call-property"); - } - - - // Setters - - - /** - * Sets the wsdl port QName of the jonas-port-component-ref - * @param wsdlPort wsdl port QName of the jonas-port-component-ref - */ - public void setWsdlPort(Qname wsdlPort) { - this.wsdlPort = wsdlPort; - } - - /** - * Sets the service endpoint interface of the port-component-ref - * @param serviceEndpointInterface service endpoint interface of the port-component-ref - */ - public void setServiceEndpointInterface(String serviceEndpointInterface) { - this.serviceEndpointInterface = serviceEndpointInterface; - } - - /** - * Add a parameter - * @param jonasCallProperty the JonasCallProperty object to add to our list - */ - public void addJonasCallProperty(JonasCallProperty jonasCallProperty) { - jonasCallPropList.add(jonasCallProperty); - } - - /** - * Add a parameter - * @param jonasStubProperty the JonasStubProperty object to add to our list - */ - public void addJonasStubProperty(JonasStubProperty jonasStubProperty) { - jonasStubPropList.add(jonasStubProperty); - } - - - // Getters - - /** - * @return the service endpoint interface of the port-component-ref - */ - public String getServiceEndpointInterface() { - return serviceEndpointInterface; - } - - /** - * @return the wsdl port QName of the jonas-port-component-ref - */ - public Qname getWsdlPort() { - return wsdlPort; - } - - /** - * @return the list of jonas-call-property - */ - public JLinkedList getJonasCallPropertyList() { - return jonasCallPropList; - } - - /** - * @return the list of jonas-stub-property - */ - public JLinkedList getJonasStubPropertyList() { - return jonasStubPropList; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // service-endpoint-interface - if (serviceEndpointInterface != null) { - sb.append(xmlElement(serviceEndpointInterface, "service-endpoint-interface", indent)); - } - - // wsdl-port - if (wsdlPort != null) { - sb.append(wsdlPort.toXML(indent)); - } - - // jonas-stub-property - sb.append(jonasStubPropList.toXML(indent)); - - // jonas-call-property - sb.append(jonasCallPropList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResource.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResource.java deleted file mode 100644 index 15619a7c3e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResource.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-resource. - * @author Florent Benoit - */ -public class JonasResource extends AbsElement { - - /** - * Name of this jonas-resource - */ - private String resRefName = null; - - /** - * jndi name of this jonas-resource - */ - private String jndiName = null; - - - // Setters - - /** - * Sets the name - * @param resRefName the name to use - */ - public void setResRefName(String resRefName) { - this.resRefName = resRefName; - } - - - /** - * Sets the jndi name - * @param jndiName the jndi-name to use - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - - // Getters - - - /** - * @return the name of the jonas-resource - */ - public String getResRefName() { - return resRefName; - } - - - /** - * @return the jndi-name of the jonas-resource - */ - public String getJndiName() { - return jndiName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(resRefName, "res-ref-name", indent)); - - // jndi-name - sb.append(xmlElement(jndiName, "jndi-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResourceEnv.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResourceEnv.java deleted file mode 100644 index bdbcb5d285..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasResourceEnv.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-resource-env. - * @author Florent Benoit - */ -public class JonasResourceEnv extends AbsElement { - - /** - * Name of this jonas-resource-env - */ - private String resourceEnvRefName = null; - - /** - * jndi name of this jonas-resource-env - */ - private String jndiName = null; - - - // Setters - - /** - * Sets the name - * @param resourceEnvRefName the name to use - */ - public void setResourceEnvRefName(String resourceEnvRefName) { - this.resourceEnvRefName = resourceEnvRefName; - } - - - /** - * Sets the jndi name - * @param jndiName the jndi-name to use - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } - - - - // Getters - - - /** - * @return the name of the jonas-resource-env - */ - public String getResourceEnvRefName() { - return resourceEnvRefName; - } - - - /** - * @return the jndi-name of the jonas-resource-env - */ - public String getJndiName() { - return jndiName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(resourceEnvRefName, "resource-env-ref-name", indent)); - - // jndi-name - sb.append(xmlElement(jndiName, "jndi-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasServiceRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasServiceRef.java deleted file mode 100644 index 13ff3279b3..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasServiceRef.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-service-ref. - * @author Florent Benoit - */ -public class JonasServiceRef extends AbsElement { - - /** - * Name of this jonas-service-ref - */ - private String serviceRefName = null; - - /** - * URL pointing to an alternate WSDL Definition - */ - private String altWsdl = null; - - /** - * List of init parameters - */ - private JLinkedList jonasInitParamList = null; - - /** - * List of jonas-port-component-ref - */ - private JLinkedList jonasPortComponentRefList = null; - - /** - * Constructor : build a new JonasServiceRef object - */ - public JonasServiceRef() { - jonasInitParamList = new JLinkedList("jonas-init-param"); - jonasPortComponentRefList = new JLinkedList("jonas-port-component-ref"); - } - - - - // Setters - - /** - * Sets the name - * @param serviceRefName the name to use - */ - public void setServiceRefName(String serviceRefName) { - this.serviceRefName = serviceRefName; - } - - - /** - * Add a parameter - * @param jonasInitParam the JonasInitParam object to add to our list - */ - public void addJonasInitParam(JonasInitParam jonasInitParam) { - jonasInitParamList.add(jonasInitParam); - } - - /** - * Add a parameter - * @param jonasPortComponentRef the JonasPortComponentRef object to add to our list - */ - public void addJonasPortComponentRef(JonasPortComponentRef jonasPortComponentRef) { - jonasPortComponentRefList.add(jonasPortComponentRef); - } - - /** - * @param altWsdl The altWsdl to set. - */ - public void setAltWsdl(String altWsdl) { - this.altWsdl = altWsdl; - } - - // Getters - - /** - * @return the name of the service-ref - */ - public String getServiceRefName() { - return serviceRefName; - } - - - /** - * @return the list of init parameters - */ - public JLinkedList getJonasInitParamList() { - return jonasInitParamList; - } - - /** - * @return the list of jonas port component ref - */ - public JLinkedList getJonasPortComponentRefList() { - return jonasPortComponentRefList; - } - - /** - * @return Returns the altWsdl. - */ - public String getAltWsdl() { - return altWsdl; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(serviceRefName, "service-ref-name", indent)); - - // jonas port component ref - sb.append(jonasPortComponentRefList.toXML(indent)); - - // alt-wsdl - sb.append(xmlElement(altWsdl, "alt-wsdl", indent)); - - // init parameters - sb.append(jonasInitParamList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasStubProperty.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasStubProperty.java deleted file mode 100644 index 744c64e3c5..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/JonasStubProperty.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element jonas-init-param - * @author Florent Benoit - */ -public class JonasStubProperty extends AbsJonasParam { - - /** - * Default constructor - */ - public JonasStubProperty() { - super("jonas-stub-property"); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestination.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestination.java deleted file mode 100644 index ed4707e54d..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestination.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element message-destination. - * @author Eric Hardesty - */ -public class MessageDestination extends AbsElement { - - /** - * Name of this message-destination - */ - private String messageDestinationName = null; - - - // Setters - - /** - * Sets the name - * @param name the name to use - */ - public void setMessageDestinationName(String name) { - this.messageDestinationName = name; - } - - - // Getters - - /** - * @return the name of the jonas-message-destination - */ - public String getMessageDestinationName() { - return messageDestinationName; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - sb.append(xmlElement(messageDestinationName, "message-destination-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestinationRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestinationRef.java deleted file mode 100644 index f72f0c522b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/MessageDestinationRef.java +++ /dev/null @@ -1,184 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Eric Hardesty - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element message-destination-ref. - * @author Eric Hardesty - */ -public class MessageDestinationRef extends AbsElement { - - /** - * Description of the message-destination-ref - */ - private String description = null; - - /** - * Name of this message-destination-ref - */ - private String messageDestinationRefName = null; - - /** - * Type of this message-destination-ref - */ - private String messageDestinationType = null; - - /** - * Usage of this message-destination-ref - */ - private String messageDestinationUsage = null; - - /** - * Link of this message-destination-ref - */ - private String messageDestinationLink = null; - - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - - /** - * Sets the name - * @param refName the name to use - */ - public void setMessageDestinationRefName(String refName) { - this.messageDestinationRefName = refName; - } - - - /** - * Sets the type - * @param type the type to use - */ - public void setMessageDestinationType(String type) { - this.messageDestinationType = type; - } - - - /** - * Sets the usage - * @param usage the usage to use - */ - public void setMessageDestinationUsage(String usage) { - this.messageDestinationUsage = usage; - } - - - /** - * Sets the link - * @param link the link to use - */ - public void setMessageDestinationLink(String link) { - this.messageDestinationLink = link; - } - - - // Getters - - /** - * @return the description of the messageDestination-ref - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the messageDestination-ref - */ - public String getMessageDestinationRefName() { - return messageDestinationRefName; - } - - - /** - * @return the type of the messageDestination-ref - */ - public String getMessageDestinationType() { - return messageDestinationType; - } - - /** - * @return the usage of the messageDestination-ref - */ - public String getMessageDestinationUsage() { - return messageDestinationUsage; - } - - /** - * @return the link of the messageDestination-ref - */ - public String getMessageDestinationLink() { - return messageDestinationLink; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(messageDestinationRefName, "message-destination-ref-name", indent)); - - // type - sb.append(xmlElement(messageDestinationType, "message-destination-type", indent)); - - // usage - sb.append(xmlElement(messageDestinationUsage, "message-destination-usage", indent)); - - // link - sb.append(xmlElement(messageDestinationLink, "message-destination-link", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PersistenceUnitRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PersistenceUnitRef.java deleted file mode 100644 index 115f7943d2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PersistenceUnitRef.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the persistence-unit-ref XML element. - * @author Adriana Danes - */ -public class PersistenceUnitRef extends AbsElement { - /** - * Description of the persistence-unit-ref element. - */ - private String description = null; - - /** - * Name of the persistence-unit-ref element. - */ - private String persistenceUnitRefName = null; - - /** - * Optional persistence unit name. - */ - private String persistenceUnitName = null; - - public String getDescription() { - return description; - } - - public void setDescription(final String description) { - this.description = description; - } - - public String getPersistenceUnitRefName() { - return persistenceUnitRefName; - } - - public void setPersistenceUnitRefName(final String persistenceUnitRefName) { - this.persistenceUnitRefName = persistenceUnitRefName; - } - - public String getPersistenceUnitName() { - return persistenceUnitName; - } - - public void setPersistenceUnitName(final String persistenceUnitName) { - this.persistenceUnitName = persistenceUnitName; - } - /** - * Represents this element by it's XML description. - * @param indent use this indent for prefixing XML representation. - * @return the XML description of this object. - */ - @Override - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // peristence unit ref name - sb.append(xmlElement(persistenceUnitRefName, "persistence-unit-ref-name", indent)); - - // peristence unit name - sb.append(xmlElement(persistenceUnitName, "persistence-unit-name", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PortComponentRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PortComponentRef.java deleted file mode 100644 index 1a0927e92c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/PortComponentRef.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - - -/** - * This class defines the implementation of the element port-component-ref. - * @author Florent Benoit - */ -public class PortComponentRef extends AbsElement { - - /** - * service endpoint interface - */ - private String serviceEndpointInterface = null; - - /** - * port component link - */ - private String portComponentLink = null; - - - // Setters - - - /** - * Sets the service endpoint interface of the port-component-ref - * @param serviceEndpointInterface service endpoint interface of the port-component-ref - */ - public void setServiceEndpointInterface(String serviceEndpointInterface) { - this.serviceEndpointInterface = serviceEndpointInterface; - } - - - /** - * Sets the port component link of the port-component-ref - * @param portComponentLink port component link of the port-component-ref - */ - public void setPortComponentLink(String portComponentLink) { - this.portComponentLink = portComponentLink; - } - - - // Getters - - /** - * @return the service endpoint interface of the port-component-ref - */ - public String getServiceEndpointInterface() { - return serviceEndpointInterface; - } - - /** - * @return the port component link of the port-component-ref - */ - public String getPortComponentLink() { - return portComponentLink; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // service-endpoint-interface - sb.append(xmlElement(serviceEndpointInterface, "service-endpoint-interface", indent)); - - // port-component-link - sb.append(xmlElement(portComponentLink, "port-component-link", indent)); - - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Qname.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Qname.java deleted file mode 100644 index 0374970318..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/Qname.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -import javax.xml.namespace.QName; - -/** - * This class defines an implementation for a QName - * It is use by Soap-Header or Service-qname - * @author Florent Benoit - */ -public class Qname extends AbsElement { - - /** - * Name of the element - */ - private String name = null; - - /** - * Internal QName - */ - private QName qName = null; - - - /** - * Constructor : build a new object - */ - public Qname() { - super(); - } - - - // Setters - - /** - * Sets the QName of this object - * @param qName QName of this object - */ - public void setQName(QName qName) { - this.qName = qName; - } - - /** - * Sets the Name of this object - * @param name name of this object - */ - public void setName(String name) { - this.name = name; - } - - // Getters - - /** - * @return the QName of this object - */ - public QName getQName() { - return qName; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - //String prefix = qName.getPrefix(); - String prefix = "pr"; - - if (qName == null) { - return ""; - } - - String namespaceURI = qName.getNamespaceURI(); - String localPart = qName.getLocalPart(); - - - sb.append("<"); - sb.append(name); - sb.append(" xmlns:"); - sb.append(prefix); - sb.append("=\""); - sb.append(namespaceURI); - sb.append("\">"); - sb.append(prefix); - sb.append(":"); - sb.append(localPart); - sb.append("\n"); - - return sb.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceEnvRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceEnvRef.java deleted file mode 100644 index 084df7411f..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceEnvRef.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element resource-env-ref. - * @author Florent Benoit - */ -public class ResourceEnvRef extends AbsElement { - - /** - * Description of the resource-env-ref - */ - private String description = null; - - /** - * Name of this resource-env-ref - */ - private String resourceEnvRefName = null; - - /** - * Type of this resource-env-ref - */ - private String resourceEnvRefType = null; - - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - - /** - * Sets the name - * @param resourceEnvRefName the name to use - */ - public void setResourceEnvRefName(String resourceEnvRefName) { - this.resourceEnvRefName = resourceEnvRefName; - } - - - /** - * Sets the type - * @param resourceEnvRefType the type to use - */ - public void setResourceEnvRefType(String resourceEnvRefType) { - this.resourceEnvRefType = resourceEnvRefType; - } - - - - // Getters - - /** - * @return the description of the resource-env-ref - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the resource-env-ref - */ - public String getResourceEnvRefName() { - return resourceEnvRefName; - } - - - /** - * @return the type of the resource-env-ref - */ - public String getResourceEnvRefType() { - return resourceEnvRefType; - } - - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(resourceEnvRefName, "resource-env-ref-name", indent)); - - // type - sb.append(xmlElement(resourceEnvRefType, "resource-env-ref-type", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceRef.java deleted file mode 100644 index 2ebb3dde23..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ResourceRef.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element resource-ref. - * @author Florent Benoit - */ -public class ResourceRef extends AbsElement { - - /** - * Description of the resource-ref - */ - private String description = null; - - /** - * Name of this resource-ref - */ - private String resRefName = null; - - /** - * Type of this resource-ref - */ - private String resType = null; - - /** - * Auth of this resource-ref - */ - private String resAuth = null; - - /** - * Sharing-scope of this resource-ref - */ - private String resSharingScope = null; - - - - // Setters - - /** - * Sets the description - * @param description the description to use - */ - public void setDescription(String description) { - this.description = description; - } - - - /** - * Sets the name - * @param resRefName the name to use - */ - public void setResRefName(String resRefName) { - this.resRefName = resRefName; - } - - - /** - * Sets the type - * @param resType the type to use - */ - public void setResType(String resType) { - this.resType = resType; - } - - - /** - * Sets the auth - * @param resAuth the auth to use - */ - public void setResAuth(String resAuth) { - this.resAuth = resAuth; - } - - - /** - * Sets the sharing-scope - * @param resSharingScope the sharing-scope to use - */ - public void setResSharingScope(String resSharingScope) { - this.resSharingScope = resSharingScope; - } - - - - // Getters - - /** - * @return the description of the resource-ref - */ - public String getDescription() { - return description; - } - - - /** - * @return the name of the resource-ref - */ - public String getResRefName() { - return resRefName; - } - - - /** - * @return the type of the resource-ref - */ - public String getResType() { - return resType; - } - - - /** - * @return the auth of the resource-ref - */ - public String getResAuth() { - return resAuth; - } - - - /** - * @return the sharing-scope of the resource-ref - */ - public String getResSharingScope() { - return resSharingScope; - } - - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // Description - sb.append(xmlElement(description, "description", indent)); - - // name - sb.append(xmlElement(resRefName, "res-ref-name", indent)); - - // type - sb.append(xmlElement(resType, "res-type", indent)); - - // auth - sb.append(xmlElement(resAuth, "res-auth", indent)); - - // sharing-scope - sb.append(xmlElement(resSharingScope, "res-sharing-scope", indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/RunAs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/RunAs.java deleted file mode 100644 index 0e02be511e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/RunAs.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element run-as - * - * @author JOnAS team - */ - -public class RunAs extends AbsElement { - - /** - * description - */ - private String description = null; - - /** - * role-name - */ - private String roleName = null; - - - /** - * Constructor - */ - public RunAs() { - super(); - } - - /** - * Gets the description - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Set the description - * @param description description - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Gets the role-name - * @return the role-name - */ - public String getRoleName() { - return roleName; - } - - /** - * Set the role-name - * @param roleName roleName - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // description - sb.append(xmlElement(description, "description", indent)); - // role-name - sb.append(xmlElement(roleName, "role-name", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRole.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRole.java deleted file mode 100644 index 75e849af97..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRole.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element security-role - * - * @author JOnAS team - */ - -public class SecurityRole extends AbsElement { - - /** - * description - */ - private String description = null; - - /** - * role-name - */ - private String roleName = null; - - - /** - * Constructor - */ - public SecurityRole() { - super(); - } - - /** - * Gets the description - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Set the description - * @param description description - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Gets the role-name - * @return the role-name - */ - public String getRoleName() { - return roleName; - } - - /** - * Set the role-name - * @param roleName roleName - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // description - sb.append(xmlElement(description, "description", indent)); - // role-name - sb.append(xmlElement(roleName, "role-name", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRoleRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRoleRef.java deleted file mode 100644 index a6e0d9f935..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/SecurityRoleRef.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element security-role-ref - * - * @author JOnAS team - */ - -public class SecurityRoleRef extends AbsElement { - - /** - * description - */ - private String description = null; - - /** - * role-name - */ - private String roleName = null; - - /** - * role-link - */ - private String roleLink = null; - - - /** - * Constructor - */ - public SecurityRoleRef() { - super(); - } - - /** - * Gets the description - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Set the description - * @param description description - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Gets the role-name - * @return the role-name - */ - public String getRoleName() { - return roleName; - } - - /** - * Set the role-name - * @param roleName roleName - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * Gets the role-link - * @return the role-link - */ - public String getRoleLink() { - return roleLink; - } - - /** - * Set the role-link - * @param roleLink roleLink - */ - public void setRoleLink(String roleLink) { - this.roleLink = roleLink; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // description - sb.append(xmlElement(description, "description", indent)); - // role-name - sb.append(xmlElement(roleName, "role-name", indent)); - // role-link - sb.append(xmlElement(roleLink, "role-link", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ServiceRef.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ServiceRef.java deleted file mode 100644 index 7976582ce1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/ServiceRef.java +++ /dev/null @@ -1,241 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - -/** - * This class defines the implementation of the element service-ref. - * @author Florent Benoit - */ -public class ServiceRef extends AbsElement { - - /** - * Service name - */ - private String serviceRefName = null; - - - /** - * Service Interface - */ - private String serviceInterface = null; - - /** - * Mapping jaxrpc - */ - private String jaxrpcMappingFile = null; - - /** - * WSDL file - */ - private String wsdlFile = null; - - - /** - * Service-qname element - */ - private Qname serviceQname = null; - - /** - * List of elements port-component-ref - */ - private JLinkedList portComponentRefList = null; - - - /** - * List of elements handler - */ - private JLinkedList handlerList = null; - - - /** - * Constructor : build a new ServiceRef object - */ - public ServiceRef() { - super(); - portComponentRefList = new JLinkedList("port-component-ref"); - handlerList = new JLinkedList("handler"); - } - - - // Setters - - /** - * Add a new port-component-ref element to this object - * @param portComponentRef the port-component-ref object - */ - public void addPortComponentRef(PortComponentRef portComponentRef) { - portComponentRefList.add(portComponentRef); - } - - /** - * Add a new handler element to this object - * @param handler the handler object - */ - public void addHandler(Handler handler) { - handlerList.add(handler); - } - - /** - * Sets the service-ref-name of the service-ref - * @param serviceRefName of the service-ref - */ - public void setServiceRefName(String serviceRefName) { - this.serviceRefName = serviceRefName; - } - - - /** - * Sets the service-interface of the service-ref - * @param serviceInterface name of the service-ref - */ - public void setServiceInterface(String serviceInterface) { - this.serviceInterface = serviceInterface; - } - - - /** - * Sets the jaxrpc-mapping-file element of the service-ref - * @param jaxrpcMappingFile jaxrpc-mapping-file of the service-ref - */ - public void setJaxrpcMappingFile(String jaxrpcMappingFile) { - this.jaxrpcMappingFile = jaxrpcMappingFile; - } - - - /** - * Sets the wsdl-file element of the service-ref - * @param wsdlFile name of the service-ref - */ - public void setWsdlFile(String wsdlFile) { - this.wsdlFile = wsdlFile; - } - - - /** - * Sets the service-qname of the service-ref - * @param serviceQname of the service-ref - */ - public void setServiceQname(Qname serviceQname) { - this.serviceQname = serviceQname; - } - - // Getters - - /** - * @return the service-ref-name of the service-ref - */ - public String getServiceRefName() { - return serviceRefName; - } - - /** - * @return the service-interface of the service-ref - */ - public String getServiceInterface() { - return serviceInterface; - } - - /** - * @return the Jaxrpc-mapping-file of the service-ref - */ - public String getJaxrpcMappingFile() { - return jaxrpcMappingFile; - } - - /** - * @return the wsdl-file of the service-ref - */ - public String getWsdlFile() { - return wsdlFile; - } - - - /** - * @return the service-qname element - */ - public Qname getServiceQname() { - return serviceQname; - } - - /** - * @return the list of all handler elements - */ - public JLinkedList getHandlerList() { - return handlerList; - } - - /** - * @return the list of all port-component-ref elements - */ - public JLinkedList getPortComponentRefList() { - return portComponentRefList; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // service-ref-name - sb.append(xmlElement(serviceRefName, "service-ref-name", indent)); - - // service-interface - sb.append(xmlElement(serviceInterface, "service-interface", indent)); - - // wsdl-file - sb.append(xmlElement(wsdlFile, "wsdl-file", indent)); - - // jaxrpc-mapping-file - sb.append(xmlElement(jaxrpcMappingFile, "jaxrpc-mapping-file", indent)); - - //service-qname - if (serviceQname != null) { - sb.append(serviceQname.toXML(indent)); - } - - // port-component-ref - sb.append(portComponentRefList.toXML(indent)); - - // handler - sb.append(handlerList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/TopLevelElement.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/TopLevelElement.java deleted file mode 100644 index 7c13c9d538..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/common/xml/TopLevelElement.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.common.xml; - - -/** - * This class defines the interface that all root Element objects must use. - * @author Philippe Coq - */ -public interface TopLevelElement { - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMap.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMap.java deleted file mode 100644 index 012a9e6494..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMap.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.domain; - -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Vector; - -import org.ow2.jonas.deployment.common.AbsDeploymentDesc; -import org.ow2.jonas.deployment.domain.xml.Cluster; -import org.ow2.jonas.deployment.domain.xml.ClusterDaemon; -import org.ow2.jonas.deployment.domain.xml.Domain; -import org.ow2.jonas.deployment.domain.xml.Server; - - -/** - * This class provides the map of the domain as described by the - * domain description file. - * It extends the AbsDeploymentDesc which requires to implement toString() - * and provides getSAXMsg() method (displayName is not used by DomainMap). - * @author Adriana Danes - * @author S. Ali Tokmen - */ -public class DomainMap extends AbsDeploymentDesc { - - /** - * the domain description - */ - private String description = null; - - /** - * Default user name of the domain - */ - private String username = null; - - /** - * Default password of the domain, may be encoded - */ - private String password = null; - - /** - * the clusterDaemons in the domain - */ - private Vector clusterDaemons = null; - - /** - * the clusters in the domain - */ - private Vector clusters = null; - - /** - * the servers in the domain - */ - private Vector servers = null; - - /** - * @return Returns the clusterDaemons. - */ - public Vector getClusterDaemons() { - return clusterDaemons; - } - - /** - * @param clusters The clusterDaemons to set. - */ - public void setClusterDaemons(final Vector clusterDaemons) { - this.clusterDaemons = clusterDaemons; - } - - /** - * @return Returns the clusters. - */ - public Vector getClusters() { - return clusters; - } - - /** - * @param clusters The clusters to set. - */ - public void setClusters(final Vector clusters) { - this.clusters = clusters; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - /** - * @param description The description to set. - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * @return Returns the default username of the domain. - */ - public final String getUsername() { - return username; - } - - /** - * @param username The default username of the domain to set. - */ - public final void setUsername(final String username) { - this.username = username; - } - - /** - * @return Returns the default password of the domain - * as encoded in the XML file. - */ - public final String getPassword() { - return password; - } - - /** - * @param password The default password of the domain to set - * as encoded in the XML file. - */ - public final void setPassword(final String password) { - this.password = password; - } - - /** - * @return Returns the servers. - */ - public Vector getServers() { - return servers; - } - - /** - * @param servers The servers to set. - */ - public void setServers(final Vector servers) { - this.servers = servers; - } - - /** - * Constructor - * @param domain domain - */ - public DomainMap(final Domain domain) { - description = domain.getDescription(); - username = domain.getUsername(); - password = domain.getPassword(); - clusterDaemons = new Vector(); - clusters = new Vector(); - servers = new Vector(); - - for (Iterator i = domain.getClusterDaemonList().iterator(); i.hasNext();) { - ClusterDaemon clusterDaemon = (ClusterDaemon) i.next(); - clusterDaemons.add(clusterDaemon); - } - - for (Iterator i = domain.getClusterList().iterator(); i.hasNext();) { - Cluster cluster = (Cluster) i.next(); - clusters.add(cluster); - } - - for (Iterator i = domain.getServerList().iterator(); i.hasNext();) { - Server server = (Server) i.next(); - servers.add(server); - } - - } - - /** - * Return a String representation of the DomainMap - * @return a String representation of the DomainMap - */ - @Override - public String toString() { - - StringBuffer ret = new StringBuffer(); - ret.append("\ndescription=" + description); - - ret.append("\nclusterDaemons="); - for (Enumeration e = clusterDaemons.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - - ret.append("\nservers="); - for (Enumeration e = servers.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - ret.append("\nclusters="); - for (Enumeration e = clusters.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - - return ret.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMapException.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMapException.java deleted file mode 100644 index ab85c82c82..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainMapException.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.domain; - -import org.ow2.jonas.deployment.common.DeploymentDescException; - -/** - * The class EarDeploymentDescException indicates conditions - * that a reasonable application might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class DomainMapException extends DeploymentDescException { - - /** - * Constructs a new DomainMapException with no detail - * message. - */ - public DomainMapException() { - super(); - } - - /** - * Constructs a new DomainMapException with the specified - * message. - * @param message the detail message. - */ - public DomainMapException(String message) { - super(message); - } - - /** - * Constructs a new DomainMapException with the specified - * error cause. - * @param cause the cause of the error. - */ - public DomainMapException(Throwable cause) { - super(cause); - } - - /** - * Constructs a new DomainMapException with the specified - * error cause. - * @param message the detail message. - * @param cause the cause of the error. - */ - public DomainMapException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainSchemas.java deleted file mode 100644 index eb8f7075a2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/DomainSchemas.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.domain; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for domain.xml file. - * @author Florent Benoit - * @author S. Ali Tokmen - */ -public class DomainSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(DomainSchemas.class); - - /** - * List of schemas used for domain.xml file. - */ - private static final String[] DOMAIN_SCHEMAS = new String[] { - PACKAGE + "jonas-domain_4_7.xsd", - PACKAGE + "jonas-domain_4_9.xsd", - PACKAGE + "jonas-domain_5_0.xsd", - PACKAGE + "jonas-domain_5_1.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public DomainSchemas() { - super(); - addSchemas(DOMAIN_SCHEMAS); - } - - - /** - * @return Returns the last Schema - */ - public static String getLastSchema() { - return getLastSchema(DOMAIN_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/lib/DomainMapManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/lib/DomainMapManager.java deleted file mode 100644 index 2a7c6af09e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/lib/DomainMapManager.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.domain.lib; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.ow2.jonas.deployment.common.lib.AbsDeploymentDescManager; -import org.ow2.jonas.deployment.domain.DomainMap; -import org.ow2.jonas.deployment.domain.DomainMapException; -import org.ow2.jonas.deployment.domain.DomainSchemas; -import org.ow2.jonas.deployment.domain.rules.DomainRuleSet; -import org.ow2.jonas.deployment.domain.xml.Domain; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class extends the AbsDeploymentDescriptor class of JOnAS It provides a - * description of the domain map - * @author Adriana Danes - * @author S. Ali Tokmen - */ -public class DomainMapManager extends AbsDeploymentDescManager { - - /** - * Path of the domain.xml configuration file - */ - public static final String DOMAIN_FILE_NAME = "domain.xml"; - - /** - * Digester used to parse domain.xml - */ - private static JDigester domainDigester = null; - - /** - * Rules to parse the application.xml - */ - private static DomainRuleSet domainRuleSet = new DomainRuleSet(); - - /** - * logger - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.deployment.domain"); - - /** - * Flag for parser validation - */ - private static boolean parsingWithValidation = true; - /** - * Private Empty constructor for utility class - */ - private DomainMapManager() { - } - - /** - * Get an instance of a DomainMap by parsing the domain.xml configuration file. - * @param domainFileName used when specific domain description file name has to be used - * @param classLoaderForCls the classloader for the classes. - * @return a DomainMap instance by parsing the domain.xml file - * @throws DomainMapException if the domain.xml file is - * corrupted. - */ - public static DomainMap getDomainMap(String domainFileName, ClassLoader classLoaderForCls) - throws DomainMapException { - - //Input Stream - InputStream domainInputStream = null; - String fileName = null; - if (domainFileName == null) { - // domain.xml in JONAS_BASE/conf - fileName = System.getProperty("jonas.base") + File.separator - + "conf" + File.separator - + DOMAIN_FILE_NAME; - } else { - fileName = domainFileName; - } - // load domain.xml - File domainFile = new File(fileName); - if (!domainFile.exists()) { - domainInputStream = classLoaderForCls.getResourceAsStream(DOMAIN_FILE_NAME); - } else { - try { - domainInputStream = new FileInputStream(domainFile); - } catch (Exception e) { - throw new DomainMapException("Cannot read the " + DOMAIN_FILE_NAME, e); - } - } - - Domain domain = loadDomain(new InputStreamReader(domainInputStream), DOMAIN_FILE_NAME); - try { - domainInputStream.close(); - } catch (IOException e) { - // Can't close the file - logger.log(BasicLevel.WARN, "Cannot close InputStream for " + DOMAIN_FILE_NAME); - } - - // instantiate the domain map - DomainMap domainMap = new DomainMap(domain); - return domainMap; - } - - /** - * Load the domain.xml file. - * @param reader the Reader of the XML file. - * @param fileName the name of the file (domain.xml). - * @throws DomainMapException if the file is - * corrupted. - * @return a Domain object. - */ - public static Domain loadDomain(Reader reader, String fileName) throws DomainMapException { - - Domain domain = new Domain(); - // Create if domainDigester is null - if (domainDigester == null) { - try { - // Create and initialize the digester - - domainDigester = new JDigester(domainRuleSet, getParsingWithValidation(), true, null, - new DomainSchemas()); - } catch (DeploymentDescException e) { - throw new DomainMapException(e); - } - } - - // Specify the TC ClassLoader to use - final Reader myReader = reader; - final String myFilename = fileName; - final Domain myDomain = domain; - IExecution exec = new IExecution() { - public Void execute() throws Exception { - try { - domainDigester.parse(myReader, myFilename, myDomain); - } catch (DeploymentDescException e) { - throw new DomainMapException(e); - } finally { - domainDigester.push(null); - } - return null; - } - }; - - // Execute - ExecutionResult result = RunnableHelper.execute(Domain.class.getClassLoader(), exec); - - // Throw an Exception if needed - if (result.hasException()) { - throw (DomainMapException) result.getException(); - } - - return domain; - } - - /** - * Save the domain.xml file. - * @param domain domain representation. - * @param fileName the name of the file (domain.xml). - * @throws DomainMapException Problem writing into file - */ - public static void saveDomain(Domain domain, String fileName) throws DomainMapException { - if (fileName == null) { - // domain.xml in JONAS_BASE/conf - fileName = System.getProperty("jonas.base") + File.separator - + "conf" + File.separator - + DOMAIN_FILE_NAME; - } - - try { - BufferedWriter out = new BufferedWriter(new FileWriter(fileName)); - out.write(domain.toXML()); - out.close(); - } catch(Exception e) { - throw new DomainMapException("Failed writing into domain.xml", e); - } - } - - /** - * Controls whether the parser is reporting all validity errors. - * @return if true, all external entities will be read. - */ - public static boolean getParsingWithValidation() { - return parsingWithValidation; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @param validation if true, all external entities will be read. - */ - public static void setParsingWithValidation(boolean validation) { - DomainMapManager.parsingWithValidation = validation; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterDaemonRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterDaemonRuleSet.java deleted file mode 100644 index 91db2d9818..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterDaemonRuleSet.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the server element - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ - -public class ClusterDaemonRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "application" - */ - public ClusterDaemonRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "cluster-daemon", - "org.ow2.jonas.deployment.domain.xml.ClusterDaemon"); - digester.addSetNext(prefix + "cluster-daemon", - "addClusterDaemon", - "org.ow2.jonas.deployment.domain.xml.ClusterDaemon"); - digester.addCallMethod(prefix + "cluster-daemon/name", "setName", 0); - digester.addCallMethod(prefix + "cluster-daemon/description", "setDescription", 0); - digester.addCallMethod(prefix + "cluster-daemon/password", "setPassword", 0); - digester.addCallMethod(prefix + "cluster-daemon/username", "setUsername", 0); - digester.addRuleSet(new LocationRuleSet(prefix + "cluster-daemon/")); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterRuleSet.java deleted file mode 100644 index 271c198ea2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ClusterRuleSet.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the cluster element. - * A Cluster element may contain another cluster element. - * - * @author Adriana Danes - */ - -public class ClusterRuleSet extends JRuleSetBase { - - private String CLUSTER = "cluster"; - - /** - * If greater than 0 it gives the level of an inner cluster element - */ - int indentLevel = 0; - - /** - * Maximum sub-elements - */ - int maxLevel = 3; - - /** - * Construct an object with the given prefix - * @param prefix prefix to use during the parsing - */ - public ClusterRuleSet(String prefix) { - super(prefix); - int previousIndex = 0; - int index; - while(true) { - index = prefix.indexOf(CLUSTER, previousIndex); - if (index < 0) { - break; - } else { - indentLevel++; - previousIndex = index + CLUSTER.length(); - } - } - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "cluster", - "org.ow2.jonas.deployment.domain.xml.Cluster"); - digester.addSetNext(prefix + "cluster", - "addCluster", - "org.ow2.jonas.deployment.domain.xml.Cluster"); - digester.addCallMethod(prefix + "cluster/name", "setName", 0); - digester.addCallMethod(prefix + "cluster/description", "setDescription", 0); - digester.addRuleSet(new ServerRuleSet(prefix + "cluster/")); - if (indentLevel < maxLevel) { - digester.addRuleSet(new ClusterRuleSet(prefix + "cluster/")); - } - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/DomainRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/DomainRuleSet.java deleted file mode 100644 index 252c3795ac..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/DomainRuleSet.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the domain element - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ - -public class DomainRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "domain" - */ - public DomainRuleSet() { - super("domain/"); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addCallMethod(prefix + "name", "setName", 0); - digester.addCallMethod(prefix + "description", "setDescription", 0); - digester.addCallMethod(prefix + "username", "setUsername", 0); - digester.addCallMethod(prefix + "password", "setPassword", 0); - digester.addRuleSet(new ClusterDaemonRuleSet(prefix)); - digester.addRuleSet(new ServerRuleSet(prefix)); - digester.addRuleSet(new ClusterRuleSet(prefix)); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/LocationRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/LocationRuleSet.java deleted file mode 100644 index 386f957780..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/LocationRuleSet.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the location element - * - * @author Adriana Danes - */ - -public class LocationRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "application" - */ - public LocationRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "location", - "org.ow2.jonas.deployment.domain.xml.Location"); - digester.addSetNext(prefix + "location", - "addLocation", - "org.ow2.jonas.deployment.domain.xml.Location"); - digester.addCallMethod(prefix + "location/url", "addUrl", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ServerRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ServerRuleSet.java deleted file mode 100644 index 7c303fd6e2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/rules/ServerRuleSet.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the server element - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ - -public class ServerRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "application" - */ - public ServerRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "server", - "org.ow2.jonas.deployment.domain.xml.Server"); - digester.addSetNext(prefix + "server", - "addServer", - "org.ow2.jonas.deployment.domain.xml.Server"); - digester.addCallMethod(prefix + "server/name", "setName", 0); - digester.addCallMethod(prefix + "server/password", "setPassword", 0); - digester.addCallMethod(prefix + "server/username", "setUsername", 0); - digester.addCallMethod(prefix + "server/description", "setDescription", 0); - digester.addCallMethod(prefix + "server/cluster-daemon", "setClusterDaemon", 0); - digester.addRuleSet(new LocationRuleSet(prefix + "server/")); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/wrapper/DomainManagerWrapper.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/wrapper/DomainManagerWrapper.java deleted file mode 100644 index a407e0c2d8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/wrapper/DomainManagerWrapper.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.wrapper; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.ow2.jonas.deployment.domain.DomainMap; -import org.ow2.jonas.deployment.domain.DomainMapException; -import org.ow2.jonas.lib.bootstrap.LoaderManager; - - -/** - * - * - * @author Adriana Danes - */ -public class DomainManagerWrapper { - - /** - * DomainMapManager fully qualified classname - */ - private static final String DOMAIN_MANAGER_CLASSNAME = "org.ow2.jonas.deployment.domain.lib.DomainMapManager"; - - /** - * Empty private constructor for utility classes - */ - private DomainManagerWrapper() { } - - /** - * Wrap DomainMapManager.getDeploymentDesc(domainFileName, cl) - * - * @param domainFileName name of the file containing the domain map - * @param cl Domain ClassLoader - * - * @return the DomainMap containing the map description - * - * @throws DomainMapException When DomainMap can't be created - */ - public static DomainMap getDomainMap(final String domainFileName, final ClassLoader cl) - throws DomainMapException { - LoaderManager lm = LoaderManager.getInstance(); - DomainMap map = null; - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass(DOMAIN_MANAGER_CLASSNAME); - Method m = manager.getDeclaredMethod("getDomainMap", new Class[] {String.class, ClassLoader.class}); - map = (DomainMap) m.invoke(null, new Object[] {domainFileName, cl}); - } catch (InvocationTargetException ite) { - Throwable t = ite.getTargetException(); - if (DomainMapException.class.isInstance(t)) { - throw (DomainMapException) ite.getTargetException(); - } else { - throw new DomainMapException("DomainMapManager.getDomainMap fails", t); - } - } catch (Exception e) { - // TODO add i18n here - throw new DomainMapException("Problems when using reflection on DomainMapManager", e); - } - - return map; - } - - /** - * Wrap DomainMapManager.setParsingWithValidation(b) - * - * @param b true/false - */ - public static void setParsingWithValidation(final boolean b) { - LoaderManager lm = LoaderManager.getInstance(); - - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass(DOMAIN_MANAGER_CLASSNAME); - Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class}); - m.invoke(null, new Object[] {new Boolean(b)}); - } catch (Exception e) { - // Should never occurs - //logger.log(BasicLevel.ERROR, e); - } - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Cluster.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Cluster.java deleted file mode 100644 index 62172192fb..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Cluster.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; - -public class Cluster extends AbsElement { - - private String name = null; - - /** - * description - */ - private String description = null; - /** - * servers in the cluster - */ - private JLinkedList serverList = null; - - /** - * sub-clusters - */ - private JLinkedList clusterList = null; - /** - * Constructor - */ - public Cluster() { - super(); - serverList = new JLinkedList("server"); - clusterList = new JLinkedList("cluster"); - } - - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - - /** - * @param description The description to set. - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Add a new sub-cluster (cluster element) to this object - * @param cluster the Cluster object representing a sub-cluster - */ - public void addCluster(Cluster cluster) { - clusterList.add(cluster); - } - /** - * Add a new server element to this object - * @param server the Server object - */ - public void addServer(Server server) { - serverList.add(server); - } - - /** - * @return Returns the clusterList. - */ - public JLinkedList getClusterList() { - return clusterList; - } - /** - * @param clusterList The clusterList to set. - */ - public void setClusterList(JLinkedList clusterList) { - this.clusterList = clusterList; - } - /** - * @return Returns the serverList. - */ - public JLinkedList getServerList() { - return serverList; - } - - /** - * @param serverList The serverList to set. - */ - public void setServerList(JLinkedList serverList) { - this.serverList = serverList; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // cluster name - if (name != null) { - sb.append(xmlElement(name, "name", indent)); - } - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - // servers - sb.append(getServerList().toXML(indent)); - // clusters - sb.append(getClusterList().toXML(indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/ClusterDaemon.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/ClusterDaemon.java deleted file mode 100644 index 723b572dce..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/ClusterDaemon.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; - -/** - * Cluster Daemon configuration element - * - * @author Benoit Pelletier - * @author S. Ali Tokmen - */ -public class ClusterDaemon extends AbsElement { - - /** - * Version UID - */ - private static final long serialVersionUID = 1322641391857423458L; - - /** - * Instance name - */ - private String name = null; - - /** - * description - */ - private String description = null; - - /** - * URL - */ - private Location location = null; - - /** - * User name - */ - private String username = null; - - /** - * Password, may be encoded - */ - private String password = null; - - // TO DO - // Add state element - - /** - * Constructor - */ - public ClusterDaemon() { - super(); - } - - /** - * @return Returns the location. - */ - public Location getLocation() { - return location; - } - - /** - * @param location The location to set. - */ - public void setLocation(Location location) { - this.location = location; - } - - /** - * @param location The location to set. - */ - public void addLocation(Location location) { - this.location = location; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - /** - * @param description The description to set. - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * @return Returns the username. - */ - public final String getUsername() { - return username; - } - - /** - * @param username The username to set. - */ - public final void setUsername(String username) { - this.username = username; - } - - /** - * @return Returns the password as encoded in the XML file. - */ - public final String getPassword() { - return password; - } - - /** - * @param password The password to set as encoded in the XML file. - */ - public final void setPassword(String password) { - this.password = password; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - if (name != null) { - sb.append(xmlElement(name, "name", indent)); - } - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - // location - if (location != null) { - sb.append(location.toXML(indent)); - } - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Domain.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Domain.java deleted file mode 100644 index 6ef3807f51..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Domain.java +++ /dev/null @@ -1,250 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.xml; - -import org.ow2.jonas.deployment.clusterd.ClusterDaemonSchemas; -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.xml.AbsDescriptionElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; -import org.ow2.jonas.deployment.domain.DomainSchemas; - -/** - * This class defines the implementation of the domain - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ - -public class Domain - extends AbsDescriptionElement - implements TopLevelElement { - - /** - * Version UID - */ - private static final long serialVersionUID = 3866056043763651049L; - - /** - * servers - */ - private JLinkedList serverList = null; - - /** - * cluster daemons - */ - private JLinkedList clusterDaemonList = null; - - /** - * cluster - */ - private JLinkedList clusterList = null; - - /** - * Domain name - */ - private String name = null; - - /** - * Default user name of the domain - */ - private String username = null; - - /** - * Default password of the domain, may be encoded - */ - private String password = null; - - /** - * Latest XML Header. - */ - private static final String header = CommonsSchemas.getHeaderForElement("domain", - DomainSchemas.getLastSchema()); - - /** - * Constructor - */ - public Domain() { - super(); - serverList = new JLinkedList("server"); - clusterList = new JLinkedList("cluster"); - clusterDaemonList = new JLinkedList("clusterDaemon"); - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the default username of the domain. - */ - public final String getUsername() { - return username; - } - - /** - * @param username The default username of the domain to set. - */ - public final void setUsername(String username) { - this.username = username; - } - - /** - * @return Returns the default password of the domain - * as encoded in the XML file. - */ - public final String getPassword() { - return password; - } - - /** - * @param password The default password of the domain to set - * as encoded in the XML file. - */ - public final void setPassword(String password) { - this.password = password; - } - - /** - * Add a new cluster element to this object - * @param cluster the Cluster object - */ - public void addCluster(Cluster cluster) { - clusterList.add(cluster); - } - - /** - * Add a new cluster daemon element to this object - * @param clusterDaemon the ClusterDaemon object - */ - public void addClusterDaemon(ClusterDaemon clusterDaemon) { - clusterDaemonList.add(clusterDaemon); - } - - /** - * Add a new server element to this object - * @param server the Server object - */ - public void addServer(Server server) { - serverList.add(server); - } - - /** - * @return Returns the clusterList. - */ - public JLinkedList getClusterList() { - return clusterList; - } - - /** - * @param clusterList The clusterList to set. - */ - public void setClusterList(JLinkedList clusterList) { - this.clusterList = clusterList; - } - - /** - * @param clusterDaemonList The clusterDaemonList to set. - */ - public void setClusterDaemonList(JLinkedList clusterDaemonList) { - this.clusterDaemonList = clusterDaemonList; - } - - /** - * @return Returns the clusterDaemonList. - */ - public JLinkedList getClusterDaemonList() { - return clusterDaemonList; - } - - /** - * @return Returns the serverList. - */ - public JLinkedList getServerList() { - return serverList; - } - - /** - * @param serverList The serverList to set. - */ - public void setServerList(JLinkedList serverList) { - this.serverList = serverList; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prefixing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append(header); - indent += 2; - - // name - if (name != null) { - sb.append(xmlElement(getName(), "name", indent)); - } - - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - - // username and password - if (username != null && password != null) { - sb.append(xmlElement(username, "username", indent)); - sb.append(xmlElement(password, "password", indent)); - } - - // cluster daemons - sb.append(getClusterDaemonList().toXML(indent)); - - // servers - sb.append(getServerList().toXML(indent)); - - // clusters - sb.append(getClusterList().toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Location.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Location.java deleted file mode 100644 index 39e0ad87f1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Location.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; - -/** - * - * @author Adriana Danes - * - * A location element is composed of a list of urls, where a url is - * the-string-representation-of-the-url - */ -public class Location extends AbsElement { - - private JLinkedList urlList = null; - /** - * Constructor - */ - public Location() { - super(); - urlList = new JLinkedList("url"); - } - - /** - * @return Returns the urlList. - */ - public JLinkedList getUrlList() { - return urlList; - } -/** - * Add a url to the urlList. - * @param url - */ - public void addUrl(String url) { - urlList.add(url); - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // principal-name - sb.append(urlList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Server.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Server.java deleted file mode 100644 index de2eba4618..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/domain/xml/Server.java +++ /dev/null @@ -1,219 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.domain.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -/** - * JOnAS instance - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ -public class Server extends AbsElement { - - /** - * Version UID - */ - private static final long serialVersionUID = 3775047449169303947L; - - /** - * Instance name - */ - private String name = null; - - /** - * description - */ - private String description = null; - - /** - * URL - */ - private Location location = null; - - /** - * User name - */ - private String username = null; - - /** - * Password, may be encoded - */ - private String password = null; - - /** - * Cluster Daemon - */ - private String clusterDaemon = null; - - // TO DO - // Add state element - - /** - * Constructor - */ - public Server() { - super(); - } - - /** - * @return Returns the location. - */ - public Location getLocation() { - return location; - } - - /** - * @param location The location to set. - */ - public void setLocation(Location location) { - this.location = location; - } - - /** - * @param location The location to set. - */ - public void addLocation(Location location) { - this.location = location; - } - - /** - * @return Returns the username. - */ - public final String getUsername() { - return username; - } - - /** - * @param username The username to set. - */ - public final void setUsername(String username) { - this.username = username; - } - - /** - * @return Returns the password as encoded in the XML file. - */ - public final String getPassword() { - return password; - } - - /** - * @param password The password to set as encoded in the XML file. - */ - public final void setPassword(String password) { - this.password = password; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(String name) { - this.name = name; - } - - /** - * @return Returns the description. - */ - public String getDescription() { - return description; - } - - /** - * @param description The description to set. - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // name - if (name != null) { - sb.append(xmlElement(name, "name", indent)); - } - - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - - // location - if (location != null) { - sb.append(location.toXML(indent)); - } - - // username and password - if (username != null && password != null) { - sb.append(xmlElement(username, "username", indent)); - sb.append(xmlElement(password, "password", indent)); - } - - // cluster-daemon - if (clusterDaemon != null) { - sb.append(xmlElement(clusterDaemon, "cluster-daemon", indent)); - } - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - /** - * - * @return the cluster daemon name - */ - public String getClusterDaemon() { - return clusterDaemon; - } - - /** - * Set the cluster daemon name - * @param clusterDaemon name - */ - public void setClusterDaemon(String clusterDaemon) { - this.clusterDaemon = clusterDaemon; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDTDs.java deleted file mode 100644 index 67018abd34..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDTDs.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Helene Joanin - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ear; - - -import org.ow2.jonas.deployment.common.CommonsDTDs; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of DTDs for application.xml. - * @author Helene Joanin - */ -public class EarDTDs extends CommonsDTDs { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(EarDTDs.class); - - /** - * List of application dtds. - */ - private static final String[] EAR_DTDS = new String[] { - PACKAGE + "application_1_2.dtd", - PACKAGE + "application_1_3.dtd" - }; - - /** - * List of application publicId. - */ - private static final String[] EAR_DTDS_PUBLIC_ID = new String[] { - "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN", - "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" - }; - - /** - * Build a new object for appliaction.xml DTDs handling. - */ - public EarDTDs() { - super(); - addMapping(EAR_DTDS, EAR_DTDS_PUBLIC_ID); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDesc.java deleted file mode 100644 index 441ee93b08..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDesc.java +++ /dev/null @@ -1,387 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ear; - -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import org.ow2.jonas.deployment.common.AbsDeploymentDesc; -import org.ow2.jonas.deployment.ear.xml.Application; -import org.ow2.jonas.deployment.ear.xml.JonasApplication; -import org.ow2.jonas.deployment.ear.xml.JonasSecurity; -import org.ow2.jonas.deployment.ear.xml.Module; -import org.ow2.jonas.deployment.ear.xml.SecurityRole; -import org.ow2.jonas.deployment.ear.xml.SecurityRoleMapping; -import org.ow2.jonas.deployment.ear.xml.Web; - - - -/** - * This class extends the AbsDeploymentDescriptor class of JOnAS It provides a - * description of the specific EAR desployment descriptor - * @author Florent Benoit - * @author Ludovic Bert - * @author Helene Joanin - */ - -public class EarDeploymentDesc extends AbsDeploymentDesc { - - /** - * Vector of connectorTags (Connector objects). - */ - private Vector connectorTags = null; - - /** - * Vector of altDD for connectors - */ - private Vector altDDConnectors = null; - - /** - * Vector of ejbTags (Ejb objects). - */ - private Vector ejbTags = null; - - /** - * Vector of altDD for EJBs - */ - private Vector altDDEjbs = null; - - /** - * Vector of webTags (Web objects). - */ - private Vector webTags = null; - - /** - * Vector of clientTags (Java objects). - */ - private Vector clientTags = null; - - /** - * Vector of altDD for wars - */ - private Vector altDDWebs = null; - - /** - * Vector of altDD for clients - */ - private Vector altDDClients = null; - - /** - * Vector of security roles - */ - private Vector securityRolesNames = null; - - /** - * Xml content of application.xml file - */ - private String xmlContent = null; - - /** - * Xml content of jonas-application.xml file - */ - private String jonasXmlContent = null; - - /** - * User to role mapping - */ - private Map userToRoleMapping = null; - - /** - * The tenant identifier of the application. - */ - private String tenantId = null; - - /** - * Construct an instance of a EarDeploymentDesc. Called by the getInstance() - * method. - * @param classLoaderForCls ClassLoader of the classes . - * @param application application.xml parsed file. - * @param jonasApplication jonas-application.xml parsed file. - * @throws EarDeploymentDescException if we can't build an instance. - */ - public EarDeploymentDesc(ClassLoader classLoaderForCls, Application application, JonasApplication jonasApplication) - throws EarDeploymentDescException { - - // test classloader - if (classLoaderForCls == null) { - throw new EarDeploymentDescException("DeploymentDesc: Classloader is null"); - } - - ejbTags = new Vector(); - connectorTags = new Vector(); - webTags = new Vector(); - clientTags = new Vector(); - altDDEjbs = new Vector(); - altDDClients = new Vector(); - altDDConnectors = new Vector(); - altDDWebs = new Vector(); - securityRolesNames = new Vector(); - - // display name - displayName = application.getDisplayName(); - - // Tags - for (Iterator i = application.getModuleList().iterator(); i.hasNext();) { - Module module = (Module) i.next(); - String ejb = module.getEjb(); - String connector = module.getConnector(); - String java = module.getJava(); - Web web = module.getWeb(); - String altDD = module.getAltDd(); - if (ejb != null) { - ejbTags.add(ejb); - altDDEjbs.add(altDD); - } else if (connector != null) { - connectorTags.add(connector); - altDDConnectors.add(altDD); - } else if (java != null) { - clientTags.add(java); - altDDClients.add(altDD); - } else if (web != null) { - webTags.add(web); - altDDWebs.add(altDD); - } - } - - // application security role - for (Iterator i = application.getSecurityRoleList().iterator(); i.hasNext();) { - SecurityRole securityRole = (SecurityRole) i.next(); - if (securityRole != null) { - if (securityRole.getRoleName() != null) { - securityRolesNames.add(securityRole.getRoleName()); - } - } - } - - //tenantId - tenantId = jonasApplication.getTenantId(); - - // user to role mapping - JonasSecurity jonasSecurity = jonasApplication.getJonasSecurity(); - if (jonasSecurity != null) { - userToRoleMapping = new HashMap(); - for (Iterator it = jonasSecurity.getSecurityRoleMappingList().iterator(); it.hasNext();) { - SecurityRoleMapping securityRoleMapping = (SecurityRoleMapping) it.next(); - if (securityRoleMapping != null) { - // get role name - String roleName = securityRoleMapping.getRoleName(); - // get principals - List principals = securityRoleMapping.getPrincipalNamesList(); - - // Iterator on principals - for (Iterator itPrincipals = principals.iterator(); itPrincipals.hasNext();) { - // get principal name - String principalName = (String) itPrincipals.next(); - // Existing mapping ? - List currentMapping = (List) userToRoleMapping.get(principalName); - if (currentMapping == null) { - currentMapping = new ArrayList(); - userToRoleMapping.put(principalName, currentMapping); - } - // add mapping - currentMapping.add(roleName); - } - } - } - } - - } - - /** - * Get the ejb tags of the application.xml file. - * @return the ejb tags of the application.xml file. - */ - public String[] getEjbTags() { - String[] tmp = new String[ejbTags.size()]; - ejbTags.copyInto(tmp); - return tmp; - } - - /** - * Get the alt-dd of the ejbs of the application.xml file. - * @return the alt-dd of the ejbs of the application.xml file. - */ - public String[] getAltDDEjbs() { - String[] tmp = new String[altDDEjbs.size()]; - altDDEjbs.copyInto(tmp); - return tmp; - } - - /** - * Get the client tags of the application.xml file. - * @return the client tags of the application.xml file. - */ - public String[] getClientTags() { - String[] tmp = new String[clientTags.size()]; - clientTags.copyInto(tmp); - return tmp; - } - - /** - * Get the alt-dd of the clients of the application.xml file. - * @return the alt-dd of the clients of the application.xml file. - */ - public String[] getAltDDClients() { - String[] tmp = new String[altDDClients.size()]; - altDDClients.copyInto(tmp); - return tmp; - } - - /** - * Get the web tags of the application.xml file. - * @return the web tags of the application.xml file. - */ - public Web[] getWebTags() { - Web[] tmp = new Web[webTags.size()]; - webTags.copyInto(tmp); - return tmp; - } - - /** - * Get the alt-dd of the wars of the application.xml file. - * @return the alt-dd of the wars of the application.xml file. - */ - public String[] getAltDDWebs() { - String[] tmp = new String[altDDWebs.size()]; - altDDWebs.copyInto(tmp); - return tmp; - } - - /** - * Get the connector tags of the application.xml file. - * @return the connector tags of the application.xml file. - */ - public String[] getConnectorTags() { - String[] tmp = new String[connectorTags.size()]; - connectorTags.copyInto(tmp); - return tmp; - } - - /** - * Get the alt-dd of the connectors of the application.xml file. - * @return the alt-dd of the connectors of the application.xml file. - */ - public String[] getAltDDConnectors() { - String[] tmp = new String[altDDConnectors.size()]; - altDDConnectors.copyInto(tmp); - return tmp; - } - - /** - * Get the security-role names tags - * @return the security roles names. - */ - public String[] getSecurityRolesNames() { - String[] tmp = new String[securityRolesNames.size()]; - securityRolesNames.copyInto(tmp); - return tmp; - } - - /** - * Get the tenant identifier - * @return the identifier of the tenant - */ - public String getTenantId() { - return tenantId; - } - - /** - * Get the content of the xml file - * @return the content of the application xml file - */ - public String getXmlContent() { - return xmlContent; - } - - /** - * Get the content of the jonas-application xml file - * @return the content of the jonas-application xml file - */ - public String getJonasXmlContent() { - return jonasXmlContent; - } - - /** - * Set the content of the xml file - * @param xml the content of the application xml file - */ - public void setXmlContent(String xml) { - xmlContent = xml; - } - - /** - * Set the content of the xml file - * @param xml the content of the jonas-application xml file - */ - public void setJonasXmlContent(String xml) { - jonasXmlContent = xml; - } - - /** - * Return a String representation of the EarDeploymentDesc. - * @return a String representation of the EarDeploymentDesc. - */ - public String toString() { - - StringBuffer ret = new StringBuffer(); - ret.append("\ndisplay-name=" + displayName); - ret.append("\nconnectors="); - for (Enumeration e = connectorTags.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - ret.append("\nejbs="); - for (Enumeration e = ejbTags.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - ret.append("\nwebs="); - for (Enumeration e = webTags.elements(); e.hasMoreElements();) { - ret.append(((Web) e.nextElement()).getWebUri() + ","); - } - ret.append("\njavas="); - for (Enumeration e = clientTags.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - ret.append("\nsecurity-roles-names="); - for (Enumeration e = securityRolesNames.elements(); e.hasMoreElements();) { - ret.append(e.nextElement() + ","); - } - - return ret.toString(); - } - - /** - * @return the userToRoleMapping. - */ - public Map getUserToRoleMapping() { - return userToRoleMapping; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDescException.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDescException.java deleted file mode 100644 index 506114c8f7..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarDeploymentDescException.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ear; - -import org.ow2.jonas.deployment.common.DeploymentDescException; - -/** - * The class EarDeploymentDescException indicates conditions - * that a reasonable application might want to catch. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class EarDeploymentDescException extends DeploymentDescException { - - /** - * Constructs a new EarDeploymentDescException with no detail - * message. - */ - public EarDeploymentDescException() { - super(); - } - - /** - * Constructs a new EarDeploymentDescException with the specified - * message. - * @param message the detail message. - */ - public EarDeploymentDescException(String message) { - super(message); - } - - /** - * Constructs a new EarDeploymentDescException with the specified - * error cause. - * @param cause the cause of the error. - */ - public EarDeploymentDescException(Throwable cause) { - super(cause); - } - - /** - * Constructs a new EarDeploymentDescException with the specified - * error cause. - * @param message the detail message. - * @param cause the cause of the error. - */ - public EarDeploymentDescException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarSchemas.java deleted file mode 100644 index 5a4216913e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/EarSchemas.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ear; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for application.xml. - * @author Helene Joanin - */ -public class EarSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(EarSchemas.class); - - /** - * List of schemas used for application.xml. - */ - private static final String[] APP_SCHEMAS = new String[] { - PACKAGE + "application_1_4.xsd", - PACKAGE + "application_5.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public EarSchemas() { - super(); - addSchemas(APP_SCHEMAS); - } - - /** - * @return Returns the last Schema. - */ - public static String getLastSchema() { - return getLastSchema(APP_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/JonasEarSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/JonasEarSchemas.java deleted file mode 100644 index 000c1c548e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/JonasEarSchemas.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ear; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for jonas-application.xml file. - * @author Florent Benoit - */ -public class JonasEarSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(JonasEarSchemas.class); - - /** - * List of schemas used for jonas-application.xml file. - */ - private static final String[] JONAS_EAR_SCHEMAS = new String[] { - PACKAGE + "jonas-application_4_1_4.xsd", - PACKAGE + "jonas-application_5_0.xsd", - PACKAGE + "jonas-application_5_3.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public JonasEarSchemas() { - super(); - addSchemas(JONAS_EAR_SCHEMAS); - } - - - /** - * @return Returns the last Schema. - */ - public static String getLastSchema() { - return getLastSchema(JONAS_EAR_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/lib/EarDeploymentDescManager.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/lib/EarDeploymentDescManager.java deleted file mode 100644 index 94af7465dc..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/lib/EarDeploymentDescManager.java +++ /dev/null @@ -1,378 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ear.lib; - -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.net.URL; -import java.net.URLConnection; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.ow2.jonas.deployment.common.lib.AbsDeploymentDescManager; -import org.ow2.jonas.deployment.ear.EarDTDs; -import org.ow2.jonas.deployment.ear.EarDeploymentDesc; -import org.ow2.jonas.deployment.ear.EarDeploymentDescException; -import org.ow2.jonas.deployment.ear.EarSchemas; -import org.ow2.jonas.deployment.ear.JonasEarSchemas; -import org.ow2.jonas.deployment.ear.rules.ApplicationRuleSet; -import org.ow2.jonas.deployment.ear.rules.JonasApplicationRuleSet; -import org.ow2.jonas.deployment.ear.xml.Application; -import org.ow2.jonas.deployment.ear.xml.JonasApplication; -import org.ow2.jonas.deployment.ear.xml.Module; -import org.ow2.jonas.deployment.ear.xml.Web; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJBDeployable; -import org.ow2.util.ee.deploy.api.deployable.RARDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - -/** - * This class extends the AbsDeploymentDescriptor class of JOnAS It provides a - * description of the specific EAR desployment descriptor. - * @author Florent Benoit - * @author Ludovic Bert - * @author Helene Joanin - */ -public final class EarDeploymentDescManager extends AbsDeploymentDescManager { - - /** - * Path of the application.xml deploymnet descriptor file. - */ - public static final String APPLICATION_FILE_NAME = "META-INF/application.xml"; - - /** - * Path of the jonas-application.xml deploymnet descriptor file. - */ - public static final String JONAS_APPLICATION_FILE_NAME = "META-INF/jonas-application.xml"; - - /** - * Digester used to parse application.xml. - */ - private static JDigester earDigester = null; - - /** - * Digester used to parse jonas-application.xml. - */ - private static JDigester jonasEarDigester = null; - - /** - * Rules to parse the application.xml. - */ - private static ApplicationRuleSet appRuleSet = new ApplicationRuleSet(); - - /** - * Rules to parse the jonas-application.xml. - */ - private static JonasApplicationRuleSet jonasApplicationRuleSet = new JonasApplicationRuleSet(); - - /** - * logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX); - - /** - * Flag for parser validation. - */ - private static boolean parsingWithValidation = true; - - /** - * Private Empty constructor for utility class. - */ - private EarDeploymentDescManager() { - } - - /** - * Get an instance of an EAR deployment descriptor by parsing the - * application.xml deployment descriptor. - * @param earDeployable the deployable to analyze. - * @param classLoaderForCls the classloader for the classes. - * @return an EAR deployment descriptor by parsing the application.xml - * deployment descriptor. - * @throws EarDeploymentDescException if the deployment descriptor is - * corrupted. - */ - public static EarDeploymentDesc getDeploymentDesc(final EARDeployable earDeployable, final ClassLoader classLoaderForCls) - throws EarDeploymentDescException { - - // Input Stream - Reader appReader = null; - Reader jonasApplicationReader = null; - - Application application = null; - JonasApplication jonasApplication = null; - - String xmlContent = ""; - String jonasXmlContent = ""; - - // Get Archive - IArchive archive = earDeployable.getArchive(); - - // Get the stream - URL applicationXMLURL; - try { - applicationXMLURL = archive.getResource(APPLICATION_FILE_NAME); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get entry '" + APPLICATION_FILE_NAME + "' from the archive '" - + archive + "'.", e); - } - if (applicationXMLURL != null) { - URLConnection urlConnection = null; - try { - urlConnection = applicationXMLURL.openConnection(); - } catch (IOException e) { - throw new EarDeploymentDescException("Unable to open connection on URL '" + applicationXMLURL + "'.", e); - } - urlConnection.setDefaultUseCaches(false); - try { - xmlContent = xmlContent(urlConnection.getInputStream()); - // Read again the input stream - appReader = new StringReader(xmlContent); - } catch (IOException e) { - throw new EarDeploymentDescException("Unable to get Stream on URL '" + applicationXMLURL + "'.", e); - } - - } - - URL jonasApplicationXMLURL; - try { - jonasApplicationXMLURL = archive.getResource(JONAS_APPLICATION_FILE_NAME); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get entry '" + JONAS_APPLICATION_FILE_NAME - + "' from the archive '" + archive + "'.", e); - } - if (jonasApplicationXMLURL != null) { - URLConnection urlConnection = null; - try { - urlConnection = jonasApplicationXMLURL.openConnection(); - } catch (IOException e) { - throw new EarDeploymentDescException("Unable to open connection on URL '" + applicationXMLURL + "'.", e); - } - urlConnection.setDefaultUseCaches(false); - try { - jonasXmlContent = xmlContent(urlConnection.getInputStream()); - // Read again the input stream - jonasApplicationReader = new StringReader(jonasXmlContent); - } catch (IOException e) { - throw new EarDeploymentDescException("Unable to get Stream on URL '" + applicationXMLURL + "'.", e); - } - } - - if (appReader != null) { - application = loadApplication(appReader, APPLICATION_FILE_NAME); - try { - appReader.close(); - } catch (IOException e) { - // Can't close the file - logger.log(BasicLevel.WARN, "Cannot close InputStream for META-INF/application.xml in '" + earDeployable - + "'"); - } - } else { - application = new Application(); - - // Get URL of the deployable - URL earDeployableURL = null; - try { - earDeployableURL = earDeployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get URL for the deployable for the archive '" + archive - + "'", e); - } - - // Perform update - if (earDeployable != null) { - - // For clients - for (CARDeployable carDeployable : earDeployable.getCARDeployables()) { - Module m = new Module(); - try { - m.setJava(carDeployable.getArchive().getURL().toExternalForm().substring( - earDeployableURL.toExternalForm().length())); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get URL for the deployable for the deployable '" - + carDeployable + "'", e); - } - application.addModule(m); - } - - // For Web - for (WARDeployable warDeployable : earDeployable.getWARDeployables()) { - Web web = new Web(); - web.setContextRoot(warDeployable.getContextRoot()); - try { - web.setWebUri(warDeployable.getArchive().getURL().toExternalForm().substring( - earDeployableURL.toExternalForm().length())); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get URL for the deployable for the deployable '" - + warDeployable + "'", e); - } - Module m = new Module(); - m.setWeb(web); - application.addModule(m); - } - - // For EJBs - for (EJBDeployable ejbDeployable : earDeployable.getEJBDeployables()) { - Module m = new Module(); - try { - m.setEjb(ejbDeployable.getArchive().getURL().toExternalForm().substring( - earDeployableURL.toExternalForm().length())); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get URL for the deployable for the deployable '" - + ejbDeployable + "'", e); - } - application.addModule(m); - } - - // For Connectors - for (RARDeployable rarDeployable : earDeployable.getRARDeployables()) { - Module m = new Module(); - try { - m.setEjb(rarDeployable.getArchive().getURL().toExternalForm().substring( - earDeployableURL.toExternalForm().length())); - } catch (ArchiveException e) { - throw new EarDeploymentDescException("Cannot get URL for the deployable for the deployable '" - + rarDeployable + "'", e); - } - application.addModule(m); - } - } - - } - - // load jonas-application deployment descriptor data - // (META-INF/jonas-application.xml) - if (jonasApplicationReader != null) { - jonasApplication = loadJonasApplication(jonasApplicationReader, - JONAS_APPLICATION_FILE_NAME); - try { - jonasApplicationReader.close(); - } catch (IOException e) { - // We can't close the file - logger.log(BasicLevel.WARN, "Cannot close InputStream for '" + earDeployable + "'"); - } - } else { - jonasApplication = new JonasApplication(); - } - - // instantiate deployment descriptor - EarDeploymentDesc earDD = new EarDeploymentDesc(classLoaderForCls, application, jonasApplication); - earDD.setXmlContent(xmlContent); - earDD.setJonasXmlContent(jonasXmlContent); - return earDD; - } - - /** - * Load the application.xml file. - * @param reader the Reader of the XML file. - * @param fileName the name of the file (application.xml). - * @throws EarDeploymentDescException if the deployment descriptor is - * corrupted. - * @return an application object. - */ - public static Application loadApplication(final Reader reader, final String fileName) throws EarDeploymentDescException { - - Application app = new Application(); - // Create if earDigester is null - if (earDigester == null) { - try { - // Create and initialize the digester - earDigester = new JDigester(appRuleSet, getParsingWithValidation(), true, new EarDTDs(), - new EarSchemas()); - } catch (DeploymentDescException e) { - throw new EarDeploymentDescException(e); - } - } - - try { - earDigester.parse(reader, fileName, app); - } catch (DeploymentDescException e) { - throw new EarDeploymentDescException(e); - } finally { - earDigester.push(null); - } - - return app; - } - - /** - * Load the jonas-application.xml file. - * @param reader the stream of the XML file. - * @param fileName the name of the file (jonas-application.xml). - * @return a structure containing the result of the jonas-application.xml - * parsing. - * @throws EarDeploymentDescException if the deployment descriptor is - * corrupted. - */ - public static JonasApplication loadJonasApplication(final Reader reader, final String fileName) - throws EarDeploymentDescException { - - JonasApplication ja = new JonasApplication(); - - // Create if null - if (jonasEarDigester == null) { - try { - jonasEarDigester = new JDigester(jonasApplicationRuleSet, getParsingWithValidation(), true, null, - new JonasEarSchemas()); - } catch (DeploymentDescException e) { - throw new EarDeploymentDescException(e); - } - } - - try { - jonasEarDigester.parse(reader, fileName, ja); - - } catch (DeploymentDescException e) { - throw new EarDeploymentDescException(e); - } finally { - jonasEarDigester.push(null); - } - return ja; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @return if true, all external entities will be read. - */ - public static boolean getParsingWithValidation() { - return parsingWithValidation; - } - - /** - * Controls whether the parser is reporting all validity errors. - * @param validation if true, all external entities will be read. - */ - public static void setParsingWithValidation(final boolean validation) { - EarDeploymentDescManager.parsingWithValidation = validation; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ApplicationRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ApplicationRuleSet.java deleted file mode 100644 index 1a8126a0a4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ApplicationRuleSet.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element application - * - * @author JOnAS team - */ - -public class ApplicationRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "application" - */ - public ApplicationRuleSet() { - super("application/"); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - //digester.addRuleSet(new IconRuleSet(prefix)); - digester.addCallMethod(prefix + "display-name", "setDisplayName", 0); - //digester.addCallMethod(prefix + "description", "setDescription", 0); - digester.addRuleSet(new ModuleRuleSet(prefix)); - digester.addRuleSet(new SecurityRoleRuleSet(prefix)); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasApplicationRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasApplicationRuleSet.java deleted file mode 100644 index 838308a21b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasApplicationRuleSet.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - - -/** - * This class defines the rules to analyze the element jonas-application - * @author Florent Benoit - */ - -public class JonasApplicationRuleSet extends JRuleSetBase { - - /** - * Construct an object with the prefix "jonas-application" - */ - public JonasApplicationRuleSet() { - super("jonas-application/"); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - public void addRuleInstances(Digester digester) { - digester.addRuleSet(new JonasSecurityRuleSet(prefix)); - - digester.addCallMethod(prefix + "tenant-id", - "setTenantId", 0); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRoleMappingRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRoleMappingRuleSet.java deleted file mode 100644 index 1303b3f3f9..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRoleMappingRuleSet.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element security-role - * @author Florent benoit - */ - -public class JonasSecurityRoleMappingRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasSecurityRoleMappingRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "security-role-mapping", - "org.ow2.jonas.deployment.ear.xml.SecurityRoleMapping"); - digester.addSetNext(prefix + "security-role-mapping", "addSecurityRoleMapping", - "org.ow2.jonas.deployment.ear.xml.SecurityRoleMapping"); - digester.addCallMethod(prefix + "security-role-mapping/role-name", "setRoleName", 0); - digester.addCallMethod(prefix + "security-role-mapping/principal-name", "addPrincipalName", 0); - - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRuleSet.java deleted file mode 100644 index 329f112ea1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/JonasSecurityRuleSet.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element jonas-security-mapping - * @author Florent Benoit - */ - -public class JonasSecurityRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JonasSecurityRuleSet(String prefix) { - super(prefix); - } - - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "jonas-security", "org.ow2.jonas.deployment.ear.xml.JonasSecurity"); - digester.addSetNext(prefix + "jonas-security", "setJonasSecurity", - "org.ow2.jonas.deployment.ear.xml.JonasSecurity"); - digester.addRuleSet(new JonasSecurityRoleMappingRuleSet(prefix + "jonas-security/")); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ModuleRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ModuleRuleSet.java deleted file mode 100644 index 5d21922674..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/ModuleRuleSet.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element module - * - * @author JOnAS team - */ - -public class ModuleRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public ModuleRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "module", - "org.ow2.jonas.deployment.ear.xml.Module"); - digester.addSetNext(prefix + "module", - "addModule", - "org.ow2.jonas.deployment.ear.xml.Module"); - digester.addCallMethod(prefix + "module/connector", - "setConnector", 0); - digester.addCallMethod(prefix + "module/ejb", - "setEjb", 0); - digester.addCallMethod(prefix + "module/java", - "setJava", 0); - digester.addRuleSet(new WebRuleSet(prefix + "module/")); - digester.addCallMethod(prefix + "module/alt-dd", - "setAltDd", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/SecurityRoleRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/SecurityRoleRuleSet.java deleted file mode 100644 index 6f832fcc66..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/SecurityRoleRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element security-role - * - * @author JOnAS team - */ - -public class SecurityRoleRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public SecurityRoleRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "security-role", - "org.ow2.jonas.deployment.ear.xml.SecurityRole"); - digester.addSetNext(prefix + "security-role", - "addSecurityRole", - "org.ow2.jonas.deployment.ear.xml.SecurityRole"); - digester.addCallMethod(prefix + "security-role/description", - "setDescription", 0); - digester.addCallMethod(prefix + "security-role/role-name", - "setRoleName", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/WebRuleSet.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/WebRuleSet.java deleted file mode 100644 index b056e328ea..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/rules/WebRuleSet.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.rules; - -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; - -import org.apache.commons.digester.Digester; - -/** - * This class defines the rules to analyze the element web - * - * @author JOnAS team - */ - -public class WebRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public WebRuleSet(String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - - public void addRuleInstances(Digester digester) { - digester.addObjectCreate(prefix + "web", - "org.ow2.jonas.deployment.ear.xml.Web"); - digester.addSetNext(prefix + "web", - "setWeb", - "org.ow2.jonas.deployment.ear.xml.Web"); - digester.addCallMethod(prefix + "web/web-uri", - "setWebUri", 0); - digester.addCallMethod(prefix + "web/context-root", - "setContextRoot", 0); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/wrapper/EarManagerWrapper.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/wrapper/EarManagerWrapper.java deleted file mode 100644 index c81726fed3..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/wrapper/EarManagerWrapper.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.wrapper; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.ear.EarDeploymentDesc; -import org.ow2.jonas.deployment.ear.EarDeploymentDescException; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; - - -/** - * Wrapper that allow us to use Commons Digester. - * @author Guillaume Sauthier - */ -public final class EarManagerWrapper { - - /** - * EarDeploymentDescManager fully qualified classname. - */ - private static final String EAR_MANAGER_CLASSNAME = "org.ow2.jonas.deployment.ear.lib.EarDeploymentDescManager"; - - /** - * logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_EAR_PREFIX); - - /** - * Empty private constructor for utility classes. - */ - private EarManagerWrapper() { } - - /** - * Wrap EarDeploymentDescManager.getDeploymentDesc(ear, cl). - * - * @param earDeployable the given EAR deployable - * @param cl Application ClassLoader - * - * @return the EarDeploymentDesc of the ear filename - * - * @throws EarDeploymentDescException When Descriptor cannot be instanciated - */ - public static EarDeploymentDesc getDeploymentDesc(final EARDeployable earDeployable, final ClassLoader cl) - throws EarDeploymentDescException { - LoaderManager lm = LoaderManager.getInstance(); - EarDeploymentDesc earDD = null; - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass(EAR_MANAGER_CLASSNAME); - Method m = manager.getDeclaredMethod("getDeploymentDesc", new Class[] {EARDeployable.class, ClassLoader.class}); - earDD = (EarDeploymentDesc) m.invoke(null, new Object[] {earDeployable, cl}); - } catch (InvocationTargetException ite) { - Throwable t = ite.getTargetException(); - if (EarDeploymentDescException.class.isInstance(t)) { - throw (EarDeploymentDescException) ite.getTargetException(); - } else { - throw new EarDeploymentDescException("EarDeploymentDescManager.getDeploymentDesc fails", t); - } - } catch (Exception e) { - // TODO add i18n here - throw new EarDeploymentDescException("Problems when using reflection on EarDeploymentDescManager", e); - } - - return earDD; - } - - /** - * Wrap EarDeploymentDescManager.setParsingWithValidation(b). - * - * @param b true/false - */ - public static void setParsingWithValidation(final boolean b) { - LoaderManager lm = LoaderManager.getInstance(); - - try { - ClassLoader ext = lm.getExternalLoader(); - Class manager = ext.loadClass(EAR_MANAGER_CLASSNAME); - Method m = manager.getDeclaredMethod("setParsingWithValidation", new Class[] {boolean.class}); - m.invoke(null, new Object[] {new Boolean(b)}); - } catch (Exception e) { - // Should never occurs - logger.log(BasicLevel.ERROR, e); - } - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Application.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Application.java deleted file mode 100644 index 2e06a48df4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Application.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsDescriptionElement; -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.xml.DescriptionGroupXml; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; -import org.ow2.jonas.deployment.ear.EarSchemas; - -/** - * This class defines the implementation of the element application - * - * @author JOnAS team - */ - -public class Application - extends AbsDescriptionElement - implements TopLevelElement, DescriptionGroupXml { - - /** - * Header (with right XSD version) for XML - */ - private String header = null; - - /** - * module - */ - private JLinkedList moduleList = null; - - /** - * security-role - */ - private JLinkedList securityRoleList = null; - - /** - * application element XML header - */ - public static final String APPLICATION_ELEMENT = CommonsSchemas.getHeaderForStandardElement("application", EarSchemas.getLastSchema()); - - /** - * Constructor - */ - public Application() { - super(); - moduleList = new JLinkedList("module"); - securityRoleList = new JLinkedList("security-role"); - - header = APPLICATION_ELEMENT; - } - - /** - * Gets the module - * @return the module - */ - public JLinkedList getModuleList() { - return moduleList; - } - - /** - * Set the module - * @param moduleList module - */ - public void setModuleList(JLinkedList moduleList) { - this.moduleList = moduleList; - } - - /** - * Add a new module element to this object - * @param module the moduleobject - */ - public void addModule(Module module) { - moduleList.add(module); - } - - /** - * Gets the security-role - * @return the security-role - */ - public JLinkedList getSecurityRoleList() { - return securityRoleList; - } - - /** - * Set the security-role - * @param securityRoleList securityRole - */ - public void setSecurityRoleList(JLinkedList securityRoleList) { - this.securityRoleList = securityRoleList; - } - - /** - * Add a new security-role element to this object - * @param securityRole the securityRoleobject - */ - public void addSecurityRole(SecurityRole securityRole) { - securityRoleList.add(securityRole); - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - if (header != null) { - sb.append(header); - } else { - sb.append("\n"); - } - - indent += 2; - - // icon - if (getIcon() != null) { - sb.append(getIcon().toXML(indent)); - } - // display-name - if (getDisplayName() != null) { - sb.append(xmlElement(getDisplayName(), "display-name", indent)); - } - // description - if (getDescription() != null) { - sb.append(xmlElement(getDescription(), "description", indent)); - } - // module - sb.append(getModuleList().toXML(indent)); - // security-role - sb.append(getSecurityRoleList().toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasApplication.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasApplication.java deleted file mode 100644 index 1983563f65..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasApplication.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.xml.AbsDescriptionElement; -import org.ow2.jonas.deployment.common.xml.DescriptionGroupXml; -import org.ow2.jonas.deployment.common.xml.TopLevelElement; -import org.ow2.jonas.deployment.ear.JonasEarSchemas; - - - -/** - * This class defines the implementation of the element jonas-application - * @author Florent Benoit - */ -public class JonasApplication extends AbsDescriptionElement implements TopLevelElement, DescriptionGroupXml { - - /** - * Header (with right XSD version) for XML - */ - private String header = null; - - /** - * Element jonas-security - */ - private JonasSecurity jonasSecurity = null; - - /** - * jonas-ejb-jar element XML header - */ - public static final String JONAS_APPLICATION_ELEMENT = CommonsSchemas.getHeaderForElement("jonas-application", - JonasEarSchemas.getLastSchema()); - - /** - * Constructor - */ - public JonasApplication() { - super(); - - header = JONAS_APPLICATION_ELEMENT; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - if (header != null) { - sb.append(header); - } else { - sb.append("\n"); - } - indent += 2; - - // tenantId - sb.append(xmlElement(getTenantId(),"tenant-id",indent)); - - // jonas-security - if (jonasSecurity != null) { - sb.append(jonasSecurity.toXML(indent)); - } - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - - /** - * @return the jonasSecurity. - */ - public JonasSecurity getJonasSecurity() { - return jonasSecurity; - } - - /** - * @param jonasSecurity The jonasSecurity to set. - */ - public void setJonasSecurity(JonasSecurity jonasSecurity) { - this.jonasSecurity = jonasSecurity; - } - - /** - * @return the header. - */ - public String getHeader() { - return header; - } - - /** - * @param header The header to set. - */ - public void setHeader(String header) { - this.header = header; - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasSecurity.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasSecurity.java deleted file mode 100644 index 585cb3621a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/JonasSecurity.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; - -/** - * This class defines the implementation of the element jonas-security - * @author Florent Benoit - */ -public class JonasSecurity extends AbsElement { - - /** - * security-role-mapping - */ - private JLinkedList securityRoleMappingList = null; - - /** - * Constructor - */ - public JonasSecurity() { - super(); - securityRoleMappingList = new JLinkedList("security-role-mapping"); - } - - - /** - * Gets the security-role-mapping - * @return the security-role-mapping - */ - public JLinkedList getSecurityRoleMappingList() { - return securityRoleMappingList; - } - - /** - * Add a new security-role-mapping element to this object - * @param securityRoleMapping the securityRoleMapping object - */ - public void addSecurityRoleMapping(SecurityRoleMapping securityRoleMapping) { - securityRoleMappingList.add(securityRoleMapping); - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - indent += 2; - - // security-role-mapping - sb.append(securityRoleMappingList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Module.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Module.java deleted file mode 100644 index 8ee4528cad..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Module.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -/** - * This class defines the implementation of the element module - * - * @author JOnAS team - */ - -public class Module extends AbsElement { - - /** - * connector - */ - private String connector = null; - - /** - * ejb - */ - private String ejb = null; - - /** - * java - */ - private String java = null; - - /** - * web - */ - private Web web = null; - - /** - * alt-dd - */ - private String altDd = null; - - - /** - * Constructor - */ - public Module() { - super(); - } - - /** - * Gets the connector - * @return the connector - */ - public String getConnector() { - return connector; - } - - /** - * Set the connector - * @param connector connector - */ - public void setConnector(String connector) { - this.connector = connector; - } - - /** - * Gets the ejb - * @return the ejb - */ - public String getEjb() { - return ejb; - } - - /** - * Set the ejb - * @param ejb ejb - */ - public void setEjb(String ejb) { - this.ejb = ejb; - } - - /** - * Gets the java - * @return the java - */ - public String getJava() { - return java; - } - - /** - * Set the java - * @param java java - */ - public void setJava(String java) { - this.java = java; - } - - /** - * Gets the web - * @return the web - */ - public Web getWeb() { - return web; - } - - /** - * Set the web - * @param web web - */ - public void setWeb(Web web) { - this.web = web; - } - - /** - * Gets the alt-dd - * @return the alt-dd - */ - public String getAltDd() { - return altDd; - } - - /** - * Set the alt-dd - * @param altDd altDd - */ - public void setAltDd(String altDd) { - this.altDd = altDd; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // connector - if (connector != null) { - sb.append(xmlElement(connector, "connector", indent)); - } - // ejb - if (ejb != null) { - sb.append(xmlElement(ejb, "ejb", indent)); - } - // java - if (java != null) { - sb.append(xmlElement(java, "java", indent)); - } - // web - if (web != null) { - sb.append(web.toXML(indent)); - } - // alt-dd - if (altDd != null) { - sb.append(xmlElement(altDd, "alt-dd", indent)); - } - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRole.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRole.java deleted file mode 100644 index 52d1c4c76d..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRole.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -/** - * This class defines the implementation of the element security-role - * - * @author JOnAS team - */ - -public class SecurityRole extends AbsElement { - - /** - * description - */ - private String description = null; - - /** - * role-name - */ - private String roleName = null; - - - /** - * Constructor - */ - public SecurityRole() { - super(); - } - - /** - * Gets the description - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Set the description - * @param description description - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Gets the role-name - * @return the role-name - */ - public String getRoleName() { - return roleName; - } - - /** - * Set the role-name - * @param roleName roleName - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // description - sb.append(xmlElement(description, "description", indent)); - // role-name - sb.append(xmlElement(roleName, "role-name", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRoleMapping.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRoleMapping.java deleted file mode 100644 index 2ea2511636..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/SecurityRoleMapping.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -import org.ow2.jonas.deployment.common.xml.JLinkedList; - -/** - * This class defines the implementation of the element security-role-mapping. - * It allow to define mapping between roles and principal which use these roles. - * @author Florent Benoit - */ - -public class SecurityRoleMapping extends AbsElement { - - /** - * role name - */ - private String roleName = null; - - /** - * principal names - */ - private JLinkedList principalNamesList = null; - - /** - * Constructor - */ - public SecurityRoleMapping() { - super(); - principalNamesList = new JLinkedList("principal-name"); - } - - /** - * Gets the principal-name list - * @return the principal-name list - */ - public JLinkedList getPrincipalNamesList() { - return principalNamesList; - } - - /** - * Set the role-name element of this object - * @param roleName the name of the role - */ - public void setRoleName(String roleName) { - this.roleName = roleName; - } - - /** - * @return the role Name. - */ - public String getRoleName() { - return roleName; - } - - /** - * Add the given principal to the list of principals - * @param principalName name of the principal to add. - */ - public void addPrincipalName(String principalName) { - principalNamesList.add(principalName); - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // role-name - sb.append(xmlElement(roleName, "role-name", indent)); - - // principal-name - sb.append(principalNamesList.toXML(indent)); - - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Web.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Web.java deleted file mode 100644 index 7f48e4bb00..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ear/xml/Web.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ear.xml; - -import org.ow2.jonas.deployment.common.xml.AbsElement; -/** - * This class defines the implementation of the element web - * - * @author JOnAS team - */ - -public class Web extends AbsElement { - - /** - * web-uri - */ - private String webUri = null; - - /** - * context-root - */ - private String contextRoot = null; - - - /** - * Constructor - */ - public Web() { - super(); - } - - /** - * Gets the web-uri - * @return the web-uri - */ - public String getWebUri() { - return webUri; - } - - /** - * Set the web-uri - * @param webUri webUri - */ - public void setWebUri(String webUri) { - this.webUri = webUri; - } - - /** - * Gets the context-root - * @return the context-root - */ - public String getContextRoot() { - return contextRoot; - } - - /** - * Set the context-root - * @param contextRoot contextRoot - */ - public void setContextRoot(String contextRoot) { - this.contextRoot = contextRoot; - } - - /** - * Represents this element by it's XML description. - * @param indent use this indent for prexifing XML representation. - * @return the XML description of this object. - */ - public String toXML(int indent) { - StringBuffer sb = new StringBuffer(); - sb.append(indent(indent)); - sb.append("\n"); - - indent += 2; - - // web-uri - sb.append(xmlElement(webUri, "web-uri", indent)); - // context-root - sb.append(xmlElement(contextRoot, "context-root", indent)); - indent -= 2; - sb.append(indent(indent)); - sb.append("\n"); - - return sb.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigDesc.java deleted file mode 100644 index 42cfeaf080..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigDesc.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.util.LinkedList; -import java.util.List; - -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.ActivationConfig; -import org.ow2.jonas.deployment.ejb.xml.ActivationConfigProperty; - - - - -/** - * This class defines the implementation of the element activation-config - * - * @author JOnAS team - */ - -public class ActivationConfigDesc { - - /** - * description - */ - private String description = null; - - - /** - * activation-config-property - */ - private List activationConfigPropertyList = null; - - /** - * Constructor - */ - public ActivationConfigDesc(ActivationConfig ac) { - if (ac != null) { - description = ac.getDescription(); - activationConfigPropertyList = convert(ac.getActivationConfigPropertyList()); - } else { - activationConfigPropertyList = new LinkedList(); - } - } - - /** - * Gets the description - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * Gets the list of activation-config-property - * @return the list of activation-config-property - */ - public List getActivationConfigPropertyList() { - return activationConfigPropertyList; - } - - private List convert(JLinkedList acpl) { - ActivationConfigProperty acp = null; - LinkedList ll = new LinkedList(); - for (int i = 0; i < acpl.size(); i++) { - acp = (ActivationConfigProperty) acpl.get(i); - ll.add(new ActivationConfigPropertyDesc(acp)); - } - return ll; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigPropertyDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigPropertyDesc.java deleted file mode 100644 index 3ee6107dc0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ActivationConfigPropertyDesc.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.ejb.xml.ActivationConfigProperty; - -/** - * This class defines the implementation of the element activation-config-property - * - * @author JOnAS team - */ - -public class ActivationConfigPropertyDesc { - - /** - * activation-config-property-name - */ - private String activationConfigPropertyName = null; - - /** - * activation-config-property-value - */ - private String activationConfigPropertyValue = null; - - /** - * Constructor - */ - public ActivationConfigPropertyDesc() { - - } - - public ActivationConfigPropertyDesc(ActivationConfigProperty acp) { - if (acp != null) { - activationConfigPropertyName = acp.getActivationConfigPropertyName(); - activationConfigPropertyValue = acp.getActivationConfigPropertyValue(); - } - } - - /** - * Gets the activation-config-property-name - * @return the activation-config-property-name - */ - public String getActivationConfigPropertyName() { - return activationConfigPropertyName; - } - - /** - * Set the activation-config-property-name - * @param activationConfigPropertyName activation-config-property-name - */ - public void setActivationConfigPropertyName(String activationConfigPropertyName) { - this.activationConfigPropertyName = activationConfigPropertyName; - } - - - /** - * Gets the activation-config-property-value - * @return the activation-config-property-value - */ - public String getActivationConfigPropertyValue() { - return activationConfigPropertyValue; - } - - /** - * Set the activation-config-property-value - * @param activationConfigPropertyValue activation-config-property-value - */ - public void setActivationConfigPropertyValue(String activationConfigPropertyValue) { - this.activationConfigPropertyValue = activationConfigPropertyValue; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/BeanDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/BeanDesc.java deleted file mode 100644 index 2e943f3509..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/BeanDesc.java +++ /dev/null @@ -1,1583 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Modifier; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.omg.CSI.ITTAbsent; -import org.omg.CSI.ITTAnonymous; -import org.omg.CSI.ITTDistinguishedName; -import org.omg.CSI.ITTPrincipalName; -import org.omg.CSI.ITTX509CertChain; -import org.omg.CSIIOP.Confidentiality; -import org.omg.CSIIOP.EstablishTrustInClient; -import org.omg.CSIIOP.EstablishTrustInTarget; -import org.omg.CSIIOP.IdentityAssertion; -import org.omg.CSIIOP.Integrity; -import org.ow2.carol.util.csiv2.SasComponent; -import org.ow2.carol.util.csiv2.struct.AsStruct; -import org.ow2.carol.util.csiv2.struct.SasStruct; -import org.ow2.carol.util.csiv2.struct.TransportStruct; -import org.ow2.jonas.deployment.api.IEJBLocalRefDesc; -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.api.IMessageDestinationRefDesc; -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.JndiEnvRefsGroupDesc; -import org.ow2.jonas.deployment.common.SecurityRoleRefDesc; -import org.ow2.jonas.deployment.common.lib.JavaType; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.RunAs; -import org.ow2.jonas.deployment.common.xml.SecurityRole; -import org.ow2.jonas.deployment.common.xml.SecurityRoleRef; -import org.ow2.jonas.deployment.ejb.xml.AsContextMapping; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.CommonEjb; -import org.ow2.jonas.deployment.ejb.xml.ContainerTransaction; -import org.ow2.jonas.deployment.ejb.xml.IorSecurityConfigMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasCommonEjb; -import org.ow2.jonas.deployment.ejb.xml.Method; -import org.ow2.jonas.deployment.ejb.xml.MethodPermission; -import org.ow2.jonas.deployment.ejb.xml.SasContextMapping; -import org.ow2.jonas.deployment.ejb.xml.TransportConfigMapping; -import org.ow2.jonas.lib.util.BeanNaming; - -/** - * Class to hold meta-information related to any enterprise-beans - * - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - * @author Jeff Mesnil - * @author Philippe Coq - * @author Florent Benoit & Ludovic Bert : ejb_link - */ -public abstract class BeanDesc extends JndiEnvRefsGroupDesc { - - /** - * Bean transaction type - */ - protected static final int BEAN_TRANSACTION_TYPE = 1; - - /** - * Container transaction type - */ - protected static final int CONTAINER_TRANSACTION_TYPE = 2; - - protected static final String[] TRANS = {null, "BEAN_TRANSACTION_TYPE", "CONTAINER_TRANSACTION_TYPE"}; - - private static final String ejb10PropertiesPrefix = "ejb10-properties/"; - - /** - * When no jndi-name specified, jndi name is set to Ejb-Name + "Home" - */ - private static final String REMOTEDEFAULTSUFFIX = "Home"; - - /** - * When no local-jndi-name specified, local jndi name is set to jndi-name + - * "_L" - */ - private static final String LOCALDEFAULTSUFFIX = "_L"; - - /** - * Package prefix for generated files - */ - public static final String GENERATED_PREFIX = "org.ow2.jonas_gen."; - - /** - * name of the Bean - */ - protected String ejbName = null; - - /** - * JNDI name of the Bean - */ - protected String jndiName = null; - - /** - * JNDI local name of the Bean - */ - protected String jndiLocalName = null; - - /** - * Home Class - */ - protected Class home = null; - - /** - * Remote Class - */ - protected Class remote = null; - - /** - * LocalHome Class - */ - protected Class localhome = null; - - /** - * Local Class - */ - protected Class local = null; - - /** - * Bean Class - */ - protected Class ejbClass = null; - - /** - * bean identification string - */ - protected String beanIdentification = null; - - /** - * EJB 1.0 Environment as Properties - */ - protected Properties ejb10EnvProps = new Properties(); - - /** - * array of methods meta-info - */ - private ArrayList methodDesc = new ArrayList(); - - /** - * hash map of the methods - */ - private HashMap methodDescMap = new HashMap(); - - /** - * List of SecurityRoleRefDesc for JACC - */ - protected List securityRoleRefDescList = null; - - /** - * DeploymentDesc parent of this BeanDesc - */ - protected DeploymentDesc deploymentDesc = null; - - /** - * JOnAS Remote Wrapper fully qualified classname - */ - private String fullWrpRemoteName = null; - - /** - * JOnAS Remote Wrapper Classname - */ - private String wrpRemoteName = null; - - /** - * JOnAS Home Wrapper fully qualified classname - */ - private String fullWrpHomeName = null; - - /** - * JOnAS Home Wrapper Classname - */ - private String wrpHomeName = null; - - /** - * JOnAS Local Wrapper fully qualified classname - */ - private String fullWrpLocalName = null; - - /** - * JOnAS Local Wrapper Classname - */ - private String wrpLocalName = null; - - /** - * JOnAS LocalHome Wrapper fully qualified classname - */ - private String fullWrpLocalHomeName = null; - - /** - * JOnAS LocalHome Wrapper Classname - */ - private String wrpLocalHomeName = null; - - /** - * JOnAS Handle Wrapper fully qualified classname - */ - private String fullWrpHandleName = null; - - /** - * JOnAS Handle Wrapper Classname - */ - private String wrpHandleName = null; - - /** - * Bean fully qualified classname - */ - protected String fullDerivedBeanName = null; - - /** - * Bean classname - */ - protected String derivedBeanName = null; - - /** - * Run-as role - */ - private String runAsRole = null; - - /** - * Run-as principal name - */ - private String runAsPrincipalName = null; - - /** - * Minimum Bean Pool size - */ - protected int poolMin = 0; - - /** - * Maximum Bean Cache size - */ - protected int cacheMax = 0; - - /** - * SasComponent (for CSIv2 over IIOP) - */ - private SasComponent sasComponent = null; - - protected int timerTxAttribute = MethodDesc.TX_REQUIRES_NEW; // default - - protected String ejbTimeoutSignature; - - /** - * Cluster - true if the bean has to be replicated - */ - protected boolean clusterReplicated = false; - /** - * The cluster configuration - */ - - private Object cluster; - - /** - * Constructor to be used by parent node - * - * @param classLoader ClassLoader used to load Bean's classes - * @param ejb XML Element from standard Deployment Descriptor - * @param jonasEjb XML Element from jonas specific Deployment Descriptor - * @param asd XML Element for the AssemblyDescriptor - * @param fileName jar filename - * - * @throws DeploymentDescException when BeanDesc cannot be instanciated - * (class loading problem, ...) - */ - public BeanDesc(final ClassLoader classLoader, final CommonEjb ejb, final JonasCommonEjb jonasEjb, final AssemblyDescriptor asd, - final JLinkedList jMDRList, final String fileName) throws DeploymentDescException { - - super(classLoader, ejb, jonasEjb, fileName); - securityRoleRefDescList = new LinkedList(); - if (ejb.getEjbName() != null) { - ejbName = ejb.getEjbName(); - } else { - ejbName = null; - } - - // If no value given specifically, we use the optionnal mapped-name in standardDD or ejbName+Home as JNDI name. - if (jonasEjb.getJndiName() != null) { - jndiName = jonasEjb.getJndiName(); - } else if (ejb.getMappedName() != null) { - jndiName = ejb.getMappedName(); - } else { - jndiName = ejbName + REMOTEDEFAULTSUFFIX; - } - // If no value given specifically, we use the optionnal mapped-name in standardDD jndiName+_L as JNDI local - // name. - if (jonasEjb.getJndiLocalName() != null) { - jndiLocalName = jonasEjb.getJndiLocalName(); - } else { - jndiLocalName = jndiName + LOCALDEFAULTSUFFIX; - } - - // classes - // -------------------------------------------------- - if (ejb.getHome() != null) { - try { - this.home = classLoader.loadClass(ejb.getHome()); - // check home extends javax.ejb.EJBHome - if (!javax.ejb.EJBHome.class.isAssignableFrom(this.home)) { - throw new DeploymentDescException("Home class '" + ejb.getHome() - + "' does not extend javax.ejb.EJBHome"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("Home class not found for bean " + ejbName, e); - } - } - - if (ejb.getRemote() != null) { - try { - this.remote = classLoader.loadClass(ejb.getRemote()); - // check remote extends javax.ejb.EJBObject - if (!javax.ejb.EJBObject.class.isAssignableFrom(this.remote)) { - throw new DeploymentDescException("Remote class '" + ejb.getRemote() - + "' does not extend javax.ejb.EJBObject"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("Remote class not found for bean " + ejbName, e); - } - } - - String localhomename = ejb.getLocalHome(); - // Note: Should do this only if bean is implied in a relation. - if (localhomename == null && this instanceof EntityCmp2Desc) { - localhomename = "javax.ejb.EJBLocalHome"; - } - if (localhomename != null) { - try { - this.localhome = classLoader.loadClass(localhomename); - // check localhome extends javax.ejb.EJBLocalHome - if (!javax.ejb.EJBLocalHome.class.isAssignableFrom(this.localhome)) { - throw new DeploymentDescException("LocalHome class '" + localhomename - + "' does not extend javax.ejb.EJBLocalHome"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("LocalHome class not found for bean " + ejbName, e); - } - } - - String localname = ejb.getLocal(); - // Note: Should do this only if bean is implied in a relation. - if (localname == null && this instanceof EntityCmp2Desc) { - localname = "javax.ejb.EJBLocalObject"; - } - if (localname != null) { - try { - this.local = classLoader.loadClass(localname); - // check local extends javax.ejb.EJBLocalObject - if (!javax.ejb.EJBLocalObject.class.isAssignableFrom(this.local)) { - throw new DeploymentDescException("Local class '" + localname - + "' does not extend javax.ejb.EJBLocalObject"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("Local class not found for bean " + ejbName, e); - } - } - - // permit to load service-endpoint class - loadExtraClasses(ejb, classLoader); - - try { - this.ejbClass = classLoader.loadClass(ejb.getEjbClass()); - // check ejb-class extends javax.ejb.EnterpriseBean - if (!javax.ejb.EnterpriseBean.class.isAssignableFrom(this.ejbClass)) { - throw new DeploymentDescException("Ejb class '" + ejb.getEjbClass() - + "' does not extend javax.ejb.EnterpriseBean"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("Ejb class not found for bean " + ejbName, e); - } - - // Set EJB 1.0 Environment properties from env entries - IEnvEntryDesc[] envt = getEnvEntryDesc(); - for (int i = 0; i < envt.length; i++) { - if (envt[i].getName().startsWith(ejb10PropertiesPrefix)) { - String newName = envt[i].getName().substring(ejb10PropertiesPrefix.length()); - String value = new String(); - if (envt[i].hasValue()) { - value = envt[i].getValue().toString(); - } - ejb10EnvProps.put(newName, value); - } - } - - // run-as - if (ejb.getSecurityIdentity() != null) { - RunAs runAsElem = ejb.getSecurityIdentity().getRunAs(); - if (runAsElem != null) { - String roleName = runAsElem.getRoleName(); - if (roleName != null) { - runAsRole = roleName; - boolean runAsRoleFound = false; - if (asd != null && asd.getSecurityRoleList() != null) { - for (Iterator j = asd.getSecurityRoleList().iterator(); j.hasNext();) { - SecurityRole securityRole = (SecurityRole) j.next(); - // role name of a security-role element defined in the - // assembly descriptor - String r = securityRole.getRoleName(); - if (r.equals(runAsRole)) { - runAsRoleFound = true; - } - } - } - //if there are no matching run-as and security-role - if (!runAsRoleFound) { - throw new DeploymentDescException("There is no security-role defined for the run-as role: " - + runAsRole); - } - } - // Run-as principal name - runAsPrincipalName = jonasEjb.getRunAsPrincipalName(); - // if no principal name set in JOnAS DD, set it to run-as role - if (runAsPrincipalName == null) { - runAsPrincipalName = runAsRole; - } - } - } - - // populate array with all methods - try { - java.lang.reflect.Method[] m; - int beginIdx = methodDesc.size(); - int len = 0; - if ((this.home != null) && (this.remote != null)) { - // session bean or entity bean with remote interface - m = this.home.getMethods(); - for (int i = 0; i < m.length; i++) { - if (!m[i].getDeclaringClass().equals(javax.ejb.EJBHome.class) - || m[i].getName().equals("remove")) { - addMethodDesc(m[i], this.home); - len++; - // check RemoteException is thrown - checkRemoteException(m[i], true); - /* - * // arguments and return types must be valid types for - * RMI if - * (!m[i].getDeclaringClass().equals(javax.ejb.EJBHome.class) && - * !m[i].getName().equals("findByPrimaryKey")) { - * checkValidTypesForRmi(m[i]); } - */ - } - } - - m = this.remote.getMethods(); - for (int i = 0; i < m.length; i++) { - if (!m[i].getDeclaringClass().equals(javax.ejb.EJBObject.class) - || m[i].getName().equals("remove")) { - addMethodDesc(m[i], this.remote); - len++; - // check RemoteException is thrown - checkRemoteException(m[i], true); - /* - * // arguments and return types must be valid for RMI - * if - * (!m[i].getDeclaringClass().equals(javax.ejb.EJBObject.class)) { - * checkValidTypesForRmi(m[i]); } - */ - } - } - } - if ((this.localhome != null) && (this.local != null)) { - // session bean or entity bean with local interface - m = this.localhome.getMethods(); - for (int i = 0; i < m.length; i++) { - if (!m[i].getDeclaringClass().equals(javax.ejb.EJBLocalHome.class) - || m[i].getName().equals("remove")) { - addMethodDesc(m[i], this.localhome); - len++; - // check RemoteException is NOT thrown - checkRemoteException(m[i], false); - } - } - m = this.local.getMethods(); - for (int i = 0; i < m.length; i++) { - if (!m[i].getDeclaringClass().equals(javax.ejb.EJBLocalObject.class) - || m[i].getName().equals("remove")) { - addMethodDesc(m[i], this.local); - len++; - // check RemoteException is NOT thrown - checkRemoteException(m[i], false); - } - } - } - if (this.home == null && this.localhome == null) { - - if (ejb.getMessagingType() != null) { - // message driven bean & endpoints - String msgType = ejb.getMessagingType(); - try { - m = classLoader.loadClass(msgType).getMethods(); - for (int i = 0; i < m.length; i++) { - addMethodDesc(m[i], m[i].getDeclaringClass()); - len++; - } - } catch (Exception ex) { - throw new DeploymentDescException("Cannot load messaging type class (" + msgType + ") for " - + ejbName, ex); - } - } - // (web)service-endpoints may have no home or local-home too !! - } - - if (javax.ejb.EntityBean.class.isAssignableFrom(this.ejbClass)) { - // ejbSelect methods - m = this.ejbClass.getMethods(); - for (int i = 0; i < m.length; i++) { - if (m[i].getName().startsWith("ejbSelect") && Modifier.isAbstract(m[i].getModifiers())) { - addMethodDesc(m[i], this.ejbClass); - len++; - } - } - } - - if (javax.ejb.TimedObject.class.isAssignableFrom(this.ejbClass)) { - try { - java.lang.reflect.Method timeout = this.ejbClass.getMethod("ejbTimeout", - new Class[]{javax.ejb.Timer.class}); - addMethodDesc(timeout, this.ejbClass); - len++; - } catch (NoSuchMethodException e) { - throw new DeploymentDescException("ejbTimeout not implemented in " + ejbName); - } - } - - len = addEJBMethodDesc(len); - orderMethodDesc(methodDesc, beginIdx, len); - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflection on " + ejbName, e); - } - - // populate HashMap with all security role references - // for each security-role-ref of the bean - if (ejb.getSecurityRoleRefList() != null) { - for (Iterator i = ejb.getSecurityRoleRefList().iterator(); i.hasNext();) { - SecurityRoleRef sRoleRef = (SecurityRoleRef) i.next(); - // test if the assembly-descriptor element exists - if (asd == null) { - throw new DeploymentDescException( - "No assembly-descriptor element (and security-role elements) whereas security-role-ref element(s) are defined"); - } else { - // test if the assembly-descriptor element contains - // security-role elements - if (asd.getSecurityRoleList().isEmpty()) { - throw new DeploymentDescException( - "No security-role elements defined in the assembly-descriptor element whereas security-role-ref element(s) are defined"); - } - } - // test if the role-link element of the security-role-ref - // element exists - if (sRoleRef.getRoleLink() == null) { - throw new DeploymentDescException( - "No role-link element in a security-role-ref element with role-name element : " - + sRoleRef.getRoleName()); - } - String roleLink = sRoleRef.getRoleLink(); - // correspond to role-name element in security-role-ref element - String roleRefName = sRoleRef.getRoleName(); - // to know if there are corresponding roleLink and roleRefName - boolean correspondingRoles = false; - for (Iterator j = asd.getSecurityRoleList().iterator(); j.hasNext();) { - SecurityRole securityRole = (SecurityRole) j.next(); - // role name of a security-role element defined in the - // assembly descriptor - String roleName = securityRole.getRoleName(); - if (roleName.equals(roleLink)) { - securityRoleRefDescList.add(new SecurityRoleRefDesc(ejbName, sRoleRef, true)); - correspondingRoles = true; - } - } - //if there are no matching roleLink and roleName - if (!correspondingRoles) { - throw new DeploymentDescException( - "No corresponding role-name in a security-role element for role-link : " + roleLink); - } - } - } - - // check if there are corresponding role-name element in security-role - // and method-permission element of the Assembly Descriptor - if (asd != null) { - verifyRoleName(asd); - // set method descriptor values for method permissions - for (Iterator i = asd.getMethodPermissionList().iterator(); i.hasNext();) { - MethodPermission methodPermission = (MethodPermission) i.next(); - for (Iterator j = methodPermission.getMethodList().iterator(); j.hasNext();) { - Method m = ((Method) j.next()); - // check method applies to current bean - if (!m.getEjbName().equals(ejbName)) { - continue; - } - // selection of interface home/remote - Class pClass = null; - if (m.getMethodIntf() != null) { - pClass = getParentClass(m.getMethodIntf()); - } - for (int k = 0; k < methodDesc.size(); k++) { - MethodDesc md = (MethodDesc) methodDesc.get(k); - int matchStatus = md.matchPattern(pClass, m.getMethodName(), m.getMethodParams()); - for (Iterator l = methodPermission.getRoleNameList().iterator(); l.hasNext();) { - String roleName = (String) l.next(); - // Add only if it greater than APPLY_TO_NOTHING - if (matchStatus > MethodDesc.APPLY_TO_NOTHING) { - md.addRoleName(roleName); - } - } - } - } - } - } - - // Set excluded method - if (asd != null && asd.getExcludeList() != null) { - // For each excluded method, find a methodDesc corresponding to this excluded method - for (Iterator i = asd.getExcludeList().getMethodList().iterator(); i.hasNext();) { - Method m = (Method) i.next(); - // check method applies to current bean - if (!m.getEjbName().equals(ejbName)) { - continue; - } - // selection of interface home/remote - Class pClass = null; - if (m.getMethodIntf() != null) { - pClass = getParentClass(m.getMethodIntf()); - } - // Find methodDesc with matching pattern of excluded method - for (int k = 0; k < methodDesc.size(); k++) { - MethodDesc md = (MethodDesc) methodDesc.get(k); - int matchStatus = md.matchPattern(pClass, m.getMethodName(), m.getMethodParams()); - // Add only if it greater than APPLY_TO_NOTHING - if (matchStatus > MethodDesc.APPLY_TO_NOTHING) { - md.setExcluded(true); - } - } - } - } - - // set method descriptor values for container transactions - if (asd != null) { - // Loop on ContainerTransaction list - Iterator i = asd.getContainerTransactionList().iterator(); - while (i.hasNext()) { - ContainerTransaction cotr = (ContainerTransaction) i.next(); - // Loop on Method list - Iterator j = cotr.getMethodList().iterator(); - while (j.hasNext()) { - Method m = (Method) j.next(); - // check method applies to current bean - if (!m.getEjbName().equals(ejbName)) { - continue; - } - - // selection of interface home/remote - Class pClass = null; - if (m.getMethodIntf() != null) { - pClass = getParentClass(m.getMethodIntf()); - } - - // loop on methods in the array - boolean found = false; - for (int k = 0; k < methodDesc.size(); k++) { - MethodDesc md = (MethodDesc) methodDesc.get(k); - int matchStatus = md.matchPattern(pClass, m.getMethodName(), m.getMethodParams()); - if (matchStatus != MethodDesc.APPLY_TO_NOTHING) { - found = true; - } - // set if proper level of assignation - String transAttribute = null; - if (cotr.getTransAttribute() != null) { - transAttribute = cotr.getTransAttribute(); - } - md.overwriteTxAttribute(transAttribute, matchStatus); - } - if (!found) { - // The method defined via the element is not a - // declared method - logger.log(BasicLevel.WARN, "Invalid container-transaction: method '" - + MethodDesc.methodElementToString(m) + "' not declared in bean " + ejbName); - } - } - } - } - - String packageName = ""; - String ejbIdentifier = getIdentifier(); - - if (getRemoteClass() != null) { - packageName = GENERATED_PREFIX + BeanNaming.getPackageName(getRemoteClass().getName()); - wrpRemoteName = new String("JOnAS" + ejbIdentifier + "Remote"); - wrpHandleName = new String("JOnAS" + ejbIdentifier + "Handle"); - fullWrpRemoteName = BeanNaming.getClassName(packageName, wrpRemoteName); - fullWrpHandleName = BeanNaming.getClassName(packageName, wrpHandleName); - } - - if (getLocalClass() != null) { - packageName = GENERATED_PREFIX + BeanNaming.getPackageName(getLocalClass().getName()); - wrpLocalName = new String("JOnAS" + ejbIdentifier + "Local"); - fullWrpLocalName = BeanNaming.getClassName(packageName, wrpLocalName); - } - - if (getHomeClass() != null) { - packageName = GENERATED_PREFIX + BeanNaming.getPackageName(getHomeClass().getName()); - wrpHomeName = new String("JOnAS" + ejbIdentifier + "Home"); - fullWrpHomeName = BeanNaming.getClassName(packageName, wrpHomeName); - } - - if (getLocalHomeClass() != null) { - packageName = GENERATED_PREFIX + BeanNaming.getPackageName(getLocalHomeClass().getName()); - wrpLocalHomeName = new String("JOnAS" + ejbIdentifier + "LocalHome"); - fullWrpLocalHomeName = BeanNaming.getClassName(packageName, wrpLocalHomeName); - } - - fullDerivedBeanName = getEjbClass().getName(); - derivedBeanName = BeanNaming.getBaseName(getEjbClass().getName()); - - IorSecurityConfigMapping iorSecurityConfigMapping = jonasEjb.getIorSecurityConfig(); - if (iorSecurityConfigMapping != null) { - processIorSecurityConfig(iorSecurityConfigMapping); - } - - if (jonasEjb.getClusterReplicated() != null) { - if (jonasEjb.getClusterReplicated().equalsIgnoreCase("True")) { - clusterReplicated = true; - } else if (jonasEjb.getClusterReplicated().equalsIgnoreCase("False")) { - clusterReplicated = false; - } else { - throw new DeploymentDescException("Invalid cluster-replicated value for bean " + this.ejbName); - } - } - cluster = jonasEjb.getCluster(); - } - - /** - * Permit classes loading from subtypes. (needed for Stateless Session Beans - * with service-endpoints). Needs to be overridden in subtypes. - * - * @param ce XML Element representing EJB Descriptor - * @param loader ClassLoader used to load classes - * - * @throws DeploymentDescException when a class cannot be loaded - */ - protected void loadExtraClasses(final CommonEjb ce, final ClassLoader loader) throws DeploymentDescException { - // do nothing by default - } - - /** - * Permit Methods addition from subtypes Protected method that need to be - * overridden in subclasses - * - * @param len method array length - * @return new len value - * - * @throws DeploymentDescException when java reflection cannot be used on - * classes - */ - protected int addEJBMethodDesc(final int len) throws DeploymentDescException { - return len; - } - - /** - * Returns the parent Class for a method given an interface type. - * - * @param intfType type of the interface (Home/Remote/LocalHome/Local or - * ServiceEndpoint) - * - * @return the parent class for a method given an interface type - * - * @throws DeploymentDescException when intfType is unknown - */ - protected Class getParentClass(final String intfType) throws DeploymentDescException { - Class pClass = null; - if (intfType.equals("Home")) { - pClass = javax.ejb.EJBHome.class; - } else if (intfType.equals("Remote")) { - pClass = javax.ejb.EJBObject.class; - } else if (intfType.equals("LocalHome")) { - pClass = javax.ejb.EJBLocalHome.class; - } else if (intfType.equals("Local")) { - pClass = javax.ejb.EJBLocalObject.class; - } else { - throw new DeploymentDescException(intfType + " is invalid value for method-intf on bean " + ejbName); - } - return pClass; - } - - /** - * Gets an hashcode for this bean - * Return hashcode for jndiname + jndi localname - * @return a string for hashcode for jndiname + jndi localname - */ - protected String getHashCodeForIdentifier() { - String hash = ""; - if (getJndiName() != null) { - hash += getJndiName(); - } - if (getJndiLocalName() != null) { - hash += getJndiLocalName(); - } - return Integer.toString(hash.hashCode()); - } - - /** - * Build a valid java identifier for the bean. - * @return Returns a valid java identifier from the bean. - */ - public String getIdentifier() { - - if (beanIdentification == null) { - String identifier = getEjbName(); - identifier += getHashCodeForIdentifier(); - - char[] tabChar = new char[identifier.length()]; - for (int i = 0; i < identifier.length(); i++) { - if (!Character.isJavaIdentifierPart(identifier.charAt(i))) { - tabChar[i] = '_'; - } else { - tabChar[i] = identifier.charAt(i); - } - } - beanIdentification = new String(tabChar); - } - return beanIdentification; - } - - /** - * Check if method throws RemoteException (or not). - * - * @param m the method to examine - * @param shouldThrow boolean value indicating if the method should or - * shouldn't throw RemoteException - * - * @throws DeploymentDescException thrown for non-valid method - */ - public void checkRemoteException(final java.lang.reflect.Method m, final boolean shouldThrow) throws DeploymentDescException { - Class[] excepts = m.getExceptionTypes(); - for (int j = 0; j < excepts.length; j++) { - if (RemoteException.class.isAssignableFrom(excepts[j])) { - if (shouldThrow) { - return; - } else { - throw new DeploymentDescException("Method " + m.getName() + " of " + m.getDeclaringClass() - + " should NOT throw RemoteException"); - } - } - } - if (shouldThrow) { - throw new DeploymentDescException("Method " + m.getName() + " of " + m.getDeclaringClass() - + " must throw RemoteException"); - } else { - return; - } - - } - - /** - * Check if argument and return types are valid types for RMI-IIOP. - * (Primitive types, remote objects, or non-remote objects that implement - * the java.io.Serializable interface) Only a warning is logging if it's not - * the case. - * - * @param m the methode to examine - */ - public void checkValidTypesForRmi(final java.lang.reflect.Method m) { - boolean isValid = true; - Class[] paramTypes = m.getParameterTypes(); - for (int i = 0; i < paramTypes.length; i++) { - if (!JavaType.isValidForRmi(paramTypes[i])) { - isValid = false; - } - } - if (!JavaType.isValidForRmi(m.getReturnType()) && !JavaType.isVoid(m.getReturnType()) - && !JavaType.isCollecOrEnum(m.getReturnType())) { - // Allow Collection or Enumeration type (finder methods) - isValid = false; - } - if (!isValid) { - logger.log(BasicLevel.WARN, "Method " + m.getName() + " of " + m.getDeclaringClass() - + " may be have an invalid argument or return type for RMI"); - } - } - - /** - * Check that the bean descriptor is valid - * - * @throws DeploymentDescException thrown for non-valid bean - */ - public void check() throws DeploymentDescException { - // check business methods transaction attribute - for (int i = 0; i < methodDesc.size(); i++) { - checkTxAttribute(((MethodDesc) methodDesc.get(i))); - } - checkRunAsMapping(); - } - - /** - * Check that the runAs role mapping is correct - * @throws DeploymentDescException if role mapping is incorrect - */ - public void checkRunAsMapping() throws DeploymentDescException { - if (runAsPrincipalName != null) { - // verify roles of run-as principal name - String[] runAsPrincipalRoles = deploymentDesc.getRolesForRunAsPrincipal(runAsPrincipalName); - // Check that the run-as role is included in principal roles - if (runAsPrincipalRoles != null) { - boolean isIncluded = false; - for (int r = 0; r < runAsPrincipalRoles.length; r++) { - if (runAsPrincipalRoles[r].equals(runAsRole)) { - isIncluded = true; - } - } - if (!isIncluded) { - throw new DeploymentDescException("The run-as roles defined for the runas principal name '" - + runAsPrincipalName + "' does not contains the run-as role '" - + runAsRole + "' in bean '" + getEjbName() + "."); - } - } - } - } - - /** - * Check that trans-attribute is valid for a bean's method. - * - * @param md MethodDesc to check - * - * @throws DeploymentDescException When MethodDesc is not valid - */ - protected abstract void checkTxAttribute(MethodDesc md) throws DeploymentDescException; - - /** - * Check that there are always corresponding role-name element in - * security-role and method-permission elements. - * - * @param asd the AssemblyDescriptor used to check bean's role names - * - * @throws DeploymentDescException When verification fails - */ - protected void verifyRoleName(final AssemblyDescriptor asd) throws DeploymentDescException { - boolean verify; - List methodPermission = asd.getMethodPermissionList(); - if (methodPermission != null) { - for (Iterator i = methodPermission.iterator(); i.hasNext();) { - MethodPermission mPermission = (MethodPermission) i.next(); - for (Iterator j = mPermission.getRoleNameList().iterator(); j.hasNext();) { - verify = false; - String mpRoleName = (String) j.next(); - for (Iterator k = asd.getSecurityRoleList().iterator(); k.hasNext();) { - String srRoleName = ((SecurityRole) k.next()).getRoleName(); - if (mpRoleName.equals(srRoleName)) { - verify = true; - } - } - if (!verify) { - throw new DeploymentDescException( - "a method-permission element defined a role-name element \"" - + mpRoleName - + "\" which doesn't correspond to any security-role element of the Deployment Descriptor"); - } - } - } - } - } - - /** - * Get the enterprise bean's name. - * - * @return Name of the bean - */ - public String getEjbName() { - return ejbName; - } - - /** - * Get the name to associate with the enterprise Bean in the JNDI name - * space. Invoking this method is disallowed for message driven bean. (This - * information is JOnAS specific). Used by Server - * - * @return Jndi name of the bean - */ - public String getJndiName() { - return jndiName; - } - - /** - * Set the name to associate with the enterprise Bean in the JNDI name - * space. Invoking this method is disallowed for message driven bean. (This - * information is JOnAS specific). Used by Server - * - * @param jndiName Jndi name of the bean - */ - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - /** - * Get the name to associate with the enterprise Bean in the JNDI name space - * for local access (inside the same JOnAS Server) - * - * @return Jndi local name of the bean - */ - public String getJndiLocalName() { - return jndiLocalName; - } - - /** - * Set the name to associate with the enterprise Bean in the JNDI name space - * for local access (inside the same JOnAS Server) - * - * @param jndiLocalName Jndi local name of the bean - */ - public void setJndiLocalName(final String jndiLocalName) { - this.jndiLocalName = jndiLocalName; - } - - /** - * Get bean's home interface. Invoking this method is disallowed for message - * driven bean. Used by GenIC and Server - * - * @return Class for the home interface or null - */ - public Class getHomeClass() { - return home; - } - - /** - * Get bean's remote interface. Invoking this method is disallowed for - * message driven bean. Used by GenIC and Server - * - * @return Class for the remote interface or null - */ - public Class getRemoteClass() { - return remote; - } - - /** - * Get bean's local home interface. Invoking this method is disallowed for - * message driven bean. Used by GenIC and Server - * - * @return Class for the home interface or null - */ - public Class getLocalHomeClass() { - return localhome; - } - - /** - * Get bean's local interface. Invoking this method is disallowed for - * message driven bean. Used by GenIC and Server - * - * @return Class for the Local interface or null - */ - public Class getLocalClass() { - return local; - } - - /** - * Get bean's class. Used by GenIC and Server - * - * @return Class for the bean - */ - public Class getEjbClass() { - return ejbClass; - } - - /** - * Get bean's EJB 1.0 environment properties. - * - * @return Returns the bean's EJB 1.0 environment properties - */ - public Properties getEjb10Environment() { - Properties ret = new Properties(ejb10EnvProps); - return ret; - } - - /** - * Get descriptor attached to a given method. Used by GenIC and JMdbEndpointFactory - * - * @param method Method from the Home/Remote/MessageListener interface - * @return The method descriptor (never returns null) - */ - public MethodDesc getMethodDesc(final java.lang.reflect.Method method) { - - if (!methodDescMap.containsKey(method)) { - throw new Error(method.getName() + " is not a method of home/remote interfaces for bean " + getEjbName()); - } - return (MethodDesc) methodDescMap.get(method); - } - - /** - * get an iterator for all MethodDesc of the bean. - * - * @return Returns an iterator for all MethodDesc of the bean - */ - public Iterator getMethodDescIterator() { - return methodDesc.iterator(); - } - - /** - * get a MethodDesc from its index. - * - * @param index MethodDesc index - * - * @return Returns a MethodDesc from its index - */ - public MethodDesc getMethodDesc(final int index) { - return (MethodDesc) methodDesc.get(index); - } - - /** - * Gets the security-role-ref of the beans can access to the - * EJBRoleRefPermission and role-link. - * - * @return the security-role-ref of the beans - */ - public List getSecurityRoleRefDescList() { - return securityRoleRefDescList; - } - - /** - * @return min size of the pool - */ - public int getPoolMin() { - return poolMin; - } - - /** - * @return max size of the cache - */ - public int getCacheMax() { - return cacheMax; - } - - /** - * @return the run-as role name - */ - public String getRunAsRole() { - return runAsRole; - } - - /** - * @return the transaction attribute for the ejbTimeout method - */ - public int getTimerTxAttribute() { - return timerTxAttribute; - } - - /** - * @return the security signature for the ejbTimeout method - */ - public String getEjbTimeoutSignature() { - return ejbTimeoutSignature; - } - - /** - * String representation of the object for test purpose - * - * @return String representation of this object - */ - @Override - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetDisplayName()=" + getDisplayName()); - ret.append("\ngetEjbName()=" + getEjbName()); - if (jndiName != null) { - ret.append("\ngetJndiName()=" + getJndiName()); - } - if (home != null) { - ret.append("\ngetHomeClass()=" + getHomeClass().toString()); - } - if (remote != null) { - ret.append("\ngetRemoteClass()=" + getRemoteClass().toString()); - } - if (localhome != null) { - ret.append("\ngetLocalHomeClass()=" + getLocalHomeClass().toString()); - } - if (local != null) { - ret.append("\ngetLocalClass()=" + getLocalClass().toString()); - } - ret.append("\ngetEjbClass()=" + getEjbClass().toString()); - IEnvEntryDesc[] envE = getEnvEntryDesc(); - for (int i = 0; i < envE.length; i++) { - ret.append("\ngetEnvEntryDesc(" + i + ")=" + envE[i].toString()); - } - IServiceRefDesc[] sr = getServiceRefDesc(); - for (int i = 0; i < sr.length; i++) { - ret.append("\ngetServiceRefDesc(" + i + ")=" + sr[i].toString()); - } - IResourceEnvRefDesc[] resEnvR = getResourceEnvRefDesc(); - for (int i = 0; i < resEnvR.length; i++) { - ret.append("\ngetResourceEnvRefDesc(" + i + ")=" + resEnvR[i].toString()); - } - IResourceRefDesc[] resR = getResourceRefDesc(); - for (int i = 0; i < resR.length; i++) { - ret.append("\ngetResourceRefDesc(" + i + ")=" + resR[i].toString()); - } - IEJBRefDesc[] ejbR = getEjbRefDesc(); - for (int i = 0; i < ejbR.length; i++) { - ret.append("\ngetEjbRefDesc(" + i + ")=" + ejbR[i].toString()); - } - IEJBLocalRefDesc[] ejbLR = getEjbLocalRefDesc(); - for (int i = 0; i < ejbLR.length; i++) { - ret.append("\ngetEjbLocalRefDesc(" + i + ")=" + ejbLR[i].toString()); - } - IMessageDestinationRefDesc[] mdR = getMessageDestinationRefDesc(); - for (int i = 0; i < mdR.length; i++) { - ret.append("\ngetMessageDestinationRefDesc(" + i + ")=" + mdR[i].toString()); - } - for (int i = 0; i < methodDesc.size(); i++) { - MethodDesc md = (MethodDesc) methodDesc.get(i); - ret.append("\ngetMethodDesc(" + i + ")=" + md.getClass().getName()); - ret.append(md.toString()); - } - - if (securityRoleRefDescList != null) { - for (Iterator i = securityRoleRefDescList.iterator(); i.hasNext();) { - SecurityRoleRefDesc sRoleRefDesc = (SecurityRoleRefDesc) i.next(); - ret.append("\nsecurity-role-ref, role-name = '" + sRoleRefDesc.getRoleName() + "', role-link = '" - + sRoleRefDesc.getRoleLink() + "'"); - } - } - ret.append("\ngetFullWrpRemoteName() = " + getFullWrpRemoteName()); - ret.append("\ngetFullWrpHomeName() = " + getFullWrpHomeName()); - ret.append("\ngetFullWrpLocalName() = " + getFullWrpLocalName()); - ret.append("\ngetFullWrpLocalHomeName() = " + getFullWrpLocalHomeName()); - ret.append("\ngetFullWrpHandleName() = " + getFullWrpHandleName()); - ret.append("\ngetFullDerivedBeanName() = " + getFullDerivedBeanName()); - ret.append("\ngetRunAsRole() = " + getRunAsRole()); - return ret.toString(); - } - - /** - * MethodDesc constructor factory method to ovewrite - * - * @param meth the method to be wrapped into a MethodDesc instance - * @param index index of the method inside the MethodDesc List - * - * @return Returns a new MethodDesc (or subclass) - */ - protected MethodDesc newMethodDescInstance(final java.lang.reflect.Method meth, final Class classDef, final int index) { - return new MethodDesc(this, meth, classDef, index); - } - - /** - * Add a new method descriptor to the bean - * - * @param meth method to add inside MethodDescs list - * - * @return the constructed MethodDesc - */ - protected MethodDesc addMethodDesc(final java.lang.reflect.Method meth, final Class classDef) { - MethodDesc md = newMethodDescInstance(meth, classDef, methodDesc.size()); - methodDesc.add(md); - methodDescMap.put(meth, md); - return md; - } - - /** - * @return Returns the full name of the wrapper class for the bean - */ - public String getFullWrpRemoteName() { - return fullWrpRemoteName; - } - - /** - * @return Returns the full name of the wrapper class for the bean - */ - public String getFullWrpLocalName() { - return fullWrpLocalName; - } - - /** - * @return Returns the name of the wrapper class for the bean - */ - public String getWrpRemoteName() { - return wrpRemoteName; - } - - /** - * @return Returns the name of the wrapper class for the bean - */ - public String getWrpLocalName() { - return wrpLocalName; - } - - /** - * @return Returns the full name of the Handle class for the bean - */ - public String getFullWrpHandleName() { - return fullWrpHandleName; - } - - /** - * @return Returns the name of the Handle class for the bean - */ - public String getWrpHandleName() { - return wrpHandleName; - } - - /** - * @return Returns the full name of the wrapper home class for the bean - */ - public String getFullWrpHomeName() { - return fullWrpHomeName; - } - - /** - * @return Returns the full name of the wrapper local home class for the bean - */ - public String getFullWrpLocalHomeName() { - return fullWrpLocalHomeName; - } - - /** - * @return Returns the name of the wrapper home class for the bean - */ - public String getWrpHomeName() { - return wrpHomeName; - } - - /** - * @return Returns the name of the wrapper local home class for the bean - */ - public String getWrpLocalHomeName() { - return wrpLocalHomeName; - } - - /** - * @return Returns the full name of the derived class of the bean - */ - public String getFullDerivedBeanName() { - return fullDerivedBeanName; - } - - /** - * @return Returns the name of the derived class of the bean - */ - public String getDerivedBeanName() { - return derivedBeanName; - } - - /** - * @return Returns the parent deployment descriptor - */ - public DeploymentDesc getDeploymentDesc() { - return deploymentDesc; - } - - /** - * Set the parent deployment descriptor - * - * @param deploymentDesc parent DeploymentDesc - */ - public void setDeploymentDesc(final DeploymentDesc deploymentDesc) { - this.deploymentDesc = deploymentDesc; - logger = deploymentDesc.getLogger(); - } - - /** - * Sort the MethodDesc list. - * - * @param al ArrayList to be sorted - * @param begin begin index - * @param length size of the list - */ - private void orderMethodDesc(final ArrayList al, final int begin, final int length) { - MethodDesc[] mds = new MethodDesc[length]; - for (int i = 0; i < length; i++) { - mds[i] = (MethodDesc) al.get(begin + i); - } - Arrays.sort(mds, 0, length, new MethodDescComparator()); - for (int i = 0; i < length; i++) { - al.set(begin + i, mds[i]); - mds[i].setIndex(begin + i); - } - } - - /** - * Compare 2 MethodDesc. - */ - private class MethodDescComparator implements Comparator { - - /** - * Compare 2 Object. - * - * @param o1 instance 1 - * @param o2 instance 2 to be compared to instance 1 - * - * @return integer difference between the 2 instance - */ - public int compare(final Object o1, final Object o2) { - MethodDesc md1 = (MethodDesc) o1; - MethodDesc md2 = (MethodDesc) o2; - int res = md1.getMethod().getDeclaringClass().getName().compareTo( - md2.getMethod().getDeclaringClass().getName()); - if (res == 0) { - res = md1.getMethod().getName().compareTo(md2.getMethod().getName()); - if (res == 0) { - // Same method name => compare the parameter types - Class[] p1 = md1.getMethod().getParameterTypes(); - Class[] p2 = md2.getMethod().getParameterTypes(); - res = p1.length - p2.length; - if (res == 0) { - //Same parameter size - for (int i = 0; i < p1.length && (res = p1[i].getName().compareTo(p2[i].getName())) == 0; i++) { - // compare each method - } - } - } - } - return res; - } - } - - /** - * @return the runAs principal name. - */ - public String getRunAsPrincipalName() { - return runAsPrincipalName; - } - - /** - * @return true if local interface has been defined in the DD - */ - public boolean hasDefinedLocalInterface() { - if (localhome == null) { - return false; - } else { - return (!"javax.ejb.EJBLocalHome".equals(localhome.getName())); - } - } - - /** - * Build sas component used for CSIv2 interop - * @param iorSecurityConfigMapping CsiV2 ior configuration - */ - private void processIorSecurityConfig(final IorSecurityConfigMapping iorSecurityConfigMapping) { - - // Transport - TransportStruct transportStruct = new TransportStruct(); - // As - AsStruct asStruct = new AsStruct(); - // Sas - SasStruct sasStruct = new SasStruct(); - - // Now fill SasComponent with given ior values - TransportConfigMapping transportConfigMapping = iorSecurityConfigMapping.getTransportConfig(); - AsContextMapping asContextMapping = iorSecurityConfigMapping.getAsContext(); - SasContextMapping sasContextMapping = iorSecurityConfigMapping.getSasContext(); - - // target requires (if required) - int targetRequires = 0; - if (transportConfigMapping.getIntegrity().equals("required")) { - targetRequires |= Integrity.value; - } - if (transportConfigMapping.getConfidentiality().equals("required")) { - targetRequires |= Confidentiality.value; - } - if (transportConfigMapping.getEstablishTrustInClient().equals("required")) { - targetRequires |= EstablishTrustInClient.value; - } - if (transportConfigMapping.getEstablishTrustInTarget().equals("required")) { - targetRequires |= EstablishTrustInTarget.value; - } - transportStruct.setTargetRequires(targetRequires); - - - // target supports (supported or required) - int targetSupports = 0; - if (transportConfigMapping.getIntegrity().equals("supported") || transportConfigMapping.getIntegrity().equals("required")) { - targetSupports |= Integrity.value; - } - if (transportConfigMapping.getConfidentiality().equals("supported") || transportConfigMapping.getConfidentiality().equals("required")) { - targetSupports |= Confidentiality.value; - } - if (transportConfigMapping.getEstablishTrustInClient().equals("supported") || transportConfigMapping.getEstablishTrustInClient().equals("required")) { - targetSupports |= EstablishTrustInClient.value; - } - if (transportConfigMapping.getEstablishTrustInTarget().equals("supported") || transportConfigMapping.getEstablishTrustInTarget().equals("required")) { - targetSupports |= EstablishTrustInTarget.value; - } - transportStruct.setTargetSupports(targetSupports); - - - // As struct (if it is needed) - if (!asContextMapping.getAuthMethod().equals("none")) { - asStruct.setTargetName(asContextMapping.getRealm()); - asStruct.setTargetSupports(EstablishTrustInClient.value); - if (asContextMapping.getRequired().equals("true")) { - asStruct.setTargetRequires(EstablishTrustInClient.value); - - } - } - - // Sas struct (if supported) - if (sasContextMapping.getCallerPropagation().equals("supported")) { - sasStruct.enableGSSUPSupportedNamingMechanisms(); - sasStruct.setSupportedIdentityTypes(ITTAbsent.value | ITTAnonymous.value | ITTPrincipalName.value | ITTX509CertChain.value | ITTDistinguishedName.value); - sasStruct.setTargetSupports(IdentityAssertion.value); - } - - // and then, set our SAS component - sasComponent = new SasComponent(transportStruct, asStruct, sasStruct); - - - } - - /** - * @return the sasComponent. - */ - public SasComponent getSasComponent() { - return sasComponent; - } - /** - * @param sasComponent The sasComponent to set. - */ - public void setSasComponent(final SasComponent sasComponent) { - this.sasComponent = sasComponent; - } - - /** - * @return true if the bean has to be replicated over the cluster - */ - public boolean isClusterReplicated() { - return clusterReplicated; - } - - - /** - * Set the cluster replicated attribute - * @param replicated true if the replicated mode is enabled - */ - public void setClusterReplicated(final boolean replicated) { - this.clusterReplicated = replicated; - } - - /** - * @return the cluster - */ - public Object getCluster() { - return cluster; - } - - /** - * @param cluster the cluster to set - */ - public void setCluster(final Object cluster) { - this.cluster = cluster; - } -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/CommonMethodDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/CommonMethodDesc.java deleted file mode 100644 index f5827872ee..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/CommonMethodDesc.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.security.PermissionCollection; -import java.security.Permissions; -import java.util.List; -import java.util.Iterator; -import javax.security.jacc.EJBMethodPermission; - -import org.ow2.jonas.deployment.ejb.xml.Method; -import org.ow2.jonas.deployment.ejb.xml.MethodParams; - - -/** - * Defines a ExcludeListDesc class for the management of - * EJBMEthodPermissions in JACC - * @author Florent Benoit : Initial developer - */ -public class CommonMethodDesc { - - /** - * List of EJBMethodPermission - */ - private PermissionCollection ejbMethodPermissions = null; - - - /** - * Constructor for CommonMethodDesc - * @param list given methods - */ - public CommonMethodDesc(List list) { - this.ejbMethodPermissions = new Permissions(); - generateEJBMethodPermissions(list); - } - - - /** - * Build all ejbMethodPermissions for the given methods - * @param methodList given methods - */ - protected void generateEJBMethodPermissions(List methodList) { - Iterator it = methodList.iterator(); - - // Manage permissions - while (it.hasNext()) { - Method method = (Method) it.next(); - MethodParams methodParams = method.getMethodParams(); - String[] methodParamsArray = null; - if (methodParams != null) { - - List methodParamsList = method.getMethodParams().getMethodParamList(); - String[] methodParamSize = new String[methodParamsList.size()]; - methodParamsArray = (String[]) methodParamsList.toArray(methodParamSize); - } - - // * or null value means that permission pertains to all methods - String methodName = method.getMethodName(); - if (methodName.equals("*")) { - methodName = null; - } - - - EJBMethodPermission ejbMethodPermission = - new EJBMethodPermission(method.getEjbName(), - methodName, - method.getMethodIntf(), - methodParamsArray); - // Add the permission - ejbMethodPermissions.add(ejbMethodPermission); - } - } - - /** - * Gets EJBMethod permissions - * @return the EJBMethodPermissions - */ - public PermissionCollection getEJBMethodPermissions() { - return ejbMethodPermissions; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDesc.java deleted file mode 100644 index f73f837823..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDesc.java +++ /dev/null @@ -1,529 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 021ejbJarDD11-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.DescriptionGroupDesc; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.common.xml.JonasMessageDestination; -import org.ow2.jonas.deployment.common.xml.MessageDestination; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.EjbJar; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbJar; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.deployment.ejb.xml.JonasRunAsMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasSession; -import org.ow2.jonas.deployment.ejb.xml.MethodPermission; -import org.ow2.jonas.deployment.ejb.xml.Session; - -/** - * Class to hold meta-information related to the deployment of an ejb-jar - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - * @author Philippe Durieux - * @author Markus Karg (Novell port) - * @author Philippe Coq - */ -public abstract class DeploymentDesc extends DescriptionGroupDesc { - - /** - * Logger - */ - protected Logger logger; - - - /** - * Ejb spec version - */ - protected String specVersion = null; - - /** - * Set of enterprise beans deployment descriptors - */ - protected HashMap beanDesc = new HashMap(); - - /** - * Assembly descriptor - */ - protected AssemblyDescriptor asd = null; - - /** - * Deployment desc's file name (jar or directory) - */ - protected String fileName = null; - - /** - * Deployment desc's file name (jar or directory) - */ - protected String ejbClientJar = null; - - /** - * List of MethodPermissions - */ - private List methodPermissionsDescList = null; - - /** - * ExcludeList in Assembly descriptor - */ - private ExcludeListDesc excludeListDesc = null; - - /** - * List of JonasMessageDestinations - */ - protected JLinkedList jonasMDList = null; - - /** - * Xml content of the standard deployement descriptor file - */ - private String xmlContent = ""; - - /** - * Xml content of the JOnAS deployement descriptor file - */ - private String jonasXmlContent = ""; - - /** - * Mapping for runAs principals - * Principal name --> list of roles (array) - */ - private Map runAsMapping = null; - - /** - * true if EJB monitoring is active for this EJB-JAR, null if nothing set. - */ - private Boolean monitoringEnabled; - - /** - * Number of milliseconds after which methods will start warning for this - * EJB-JAR, null if nothing set. - */ - - private Integer warningThreshold; - - /** - * Build the Meta-Information from the XML data binding trees - * containing the EJB and JOnAS deployment descriptors. - * @param classLoader The Class Loader to be used - * @param ejbJar The EjbJar information, from standard deployment descriptor. - * @param jonasEjbJar The JonasEjbJar information, from JOnAS specific deployment descriptor. - * @param l The logger to be used for tracing - * @param fileName deployment desc's jar or directory name - * @throws DeploymentDescException Cannot deploy bean - */ - public DeploymentDesc(final ClassLoader classLoader, - final EjbJar ejbJar, - final JonasEjbJar jonasEjbJar, - final Logger l, - final String fileName) - throws DeploymentDescException { - - - logger = l; - - // set jarFileName - this.fileName = fileName; - - // test classloader - if (classLoader == null) { - throw new DeploymentDescException("DeploymentDesc: Classloader is null"); - } - - // spec-version - specVersion = ejbJar.getVersion(); - - // ejb-client-jar - ejbClientJar = ejbJar.getEjbClientJar(); - - // assembly descriptor - asd = ejbJar.getAssemblyDescriptor(); - - // Run-as mapping - runAsMapping = new HashMap(); - for (Iterator i = jonasEjbJar.getJonasRunAsMappingList().iterator(); i.hasNext();) { - // Get Mapping - JonasRunAsMapping jonasRunAsMapping = (JonasRunAsMapping) i.next(); - String principalName = jonasRunAsMapping.getPrincipalName(); - // Get existing roles if any - String[] existingRunAsRoleMapping = (String[]) runAsMapping.get(principalName); - String[] newMappingRoles = null; - int r = 0; - if (existingRunAsRoleMapping == null) { - newMappingRoles = new String[jonasRunAsMapping.getRoleNamesList().size()]; - } else { - newMappingRoles = new String[jonasRunAsMapping.getRoleNamesList().size() + existingRunAsRoleMapping.length]; - // Now add existing roles - System.arraycopy(existingRunAsRoleMapping, 0, newMappingRoles, 0, existingRunAsRoleMapping.length); - r = existingRunAsRoleMapping.length; - } - Iterator itR = jonasRunAsMapping.getRoleNamesList().iterator(); - while (itR.hasNext()) { - newMappingRoles[r] = (String) itR.next(); - r++; - } - runAsMapping.put(principalName, newMappingRoles); - - } - - // Use by PermissionManager for translating xml into EJBMethodPermission - methodPermissionsDescList = new LinkedList(); - // Create EJBMEthodPermissions for each method-permission - if (asd != null) { - for (Iterator i = asd.getMethodPermissionList().iterator(); i.hasNext();) { - MethodPermission methodPermission = (MethodPermission) i.next(); - methodPermissionsDescList.add(new MethodPermissionDesc(methodPermission)); - } - } - - // Use by PermissionManager for translating xml into EJBMethodPermission - if (asd != null && asd.getExcludeList() != null) { - excludeListDesc = new ExcludeListDesc(asd.getExcludeList()); - } - - // jonas-message-destination - jonasMDList = jonasEjbJar.getJonasMessageDestinationList(); - - // HashMap of jonas-session - HashMap jonasSession = new HashMap(); - for (Iterator i = jonasEjbJar.getJonasSessionList().iterator(); i.hasNext();) { - JonasSession jSes = (JonasSession) i.next(); - jonasSession.put(jSes.getEjbName(), jSes); - } - - // session beans - if (ejbJar.getEnterpriseBeans() != null) { - for (Iterator i = ejbJar.getEnterpriseBeans().getSessionList().iterator(); i.hasNext();) { - BeanDesc bd = null; - Session ses = (Session) i.next(); - // find corresponding jonas session - JonasSession jSes = (JonasSession) jonasSession.get(ses.getEjbName()); - if (jSes == null) { - // Build a default jonas-session if not exist - jSes = new JonasSession(); - jSes.setEjbName(ses.getEjbName()); - } - // Can be an EJB3, continue - if (ses.getSessionType() == null) { - continue; - } - if (ses.getSessionType().equals("Stateful")) { - // stateful - bd = new SessionStatefulDesc(classLoader, ses, asd, jSes, jonasMDList, fileName); - } else if (ses.getSessionType().equals("Stateless")) { - // stateless - bd = new SessionStatelessDesc(classLoader, ses, asd, jSes, jonasMDList, fileName); - } else { - throw new DeploymentDescException("invalid session-type content for bean " + ses.getEjbName()); - } - bd.setDeploymentDesc(this); - bd.check(); - beanDesc.put(bd.getEjbName(), bd); - } - } - - // HashMap of jonas-entity - HashMap jonasEntity = new HashMap(); - for (Iterator i = jonasEjbJar.getJonasEntityList().iterator(); i.hasNext();) { - JonasEntity jEnt = (JonasEntity) i.next(); - jonasEntity.put(jEnt.getEjbName(), jEnt); - } - // entity beans - if (ejbJar.getEnterpriseBeans() != null) { - for (Iterator i = ejbJar.getEnterpriseBeans().getEntityList().iterator(); i.hasNext();) { - BeanDesc bd = null; - Entity ent = (Entity) i.next(); - // find corresponding jonas entity - JonasEntity jEnt = (JonasEntity) jonasEntity.get(ent.getEjbName()); - if (jEnt == null) { - throw new DeploymentDescException("jonas-entity missing for bean " + ent.getEjbName()); - } - if (ent.getPersistenceType().equals("Bean")) { - // bean managed - bd = new EntityBmpDesc(classLoader, ent, asd, jEnt, jonasMDList, fileName); - } else if (ent.getPersistenceType().equals("Container")) { - // container managed (always jdbc) - bd = newEntityBeanDesc(classLoader, ent, asd, jEnt, jonasMDList); - } else { - throw new DeploymentDescException("Invalid persistence-type content for bean " + ent.getEjbName()); - } - bd.setDeploymentDesc(this); - bd.check(); - beanDesc.put(bd.getEjbName(), bd); - } - } - } - - /** - * Get an Iterator on the Bean Desc list - * @return Iterator on BeanDesc - */ - public Iterator getBeanDescIterator() { - return beanDesc.values().iterator(); - } - - /** - * Get descriptors for all beans contained in jar file - * @return Array of bean's descriptors - */ - public BeanDesc[] getBeanDesc() { - BeanDesc[] ret = new BeanDesc[beanDesc.size()]; - int j = 0; - for (Iterator i = beanDesc.values().iterator(); i.hasNext(); j++) { - ret[j] = (BeanDesc) i.next(); - } - return ret; - } - - /** - * Gets the Mapping for run-as principal - * @param principalName name of the run-as principal - * @return array of roles - */ - public String[] getRolesForRunAsPrincipal(final String principalName) { - return (String[]) runAsMapping.get(principalName); - } - - /** - * Get bean descriptor given its name - * @param ejbName the name of the bean in the Deployment Descriptor - * @return bean descriptor given its name - */ - public BeanDesc getBeanDesc(final String ejbName) { - return (BeanDesc) beanDesc.get(ejbName); - } - - /** - * Get bean descriptor given its abstract schema name - * @param asn Abstract Schema Name - * @return null if it doesn't exist. - */ - public EntityCmp2Desc asn2BeanDesc(final String asn) { - for (Iterator i = beanDesc.values().iterator(); i.hasNext();) { - BeanDesc bd = (BeanDesc) i.next(); - if (bd instanceof EntityCmp2Desc) { - if (asn.equals(((EntityCmp2Desc) bd).getAbstractSchemaName())) { - return ((EntityCmp2Desc) bd); - } - } - } - return null; - } - - - /** - * Get the list of the methodPermissionDesc objects which represent - * method-permission elements in assembly-descriptor - * @return the list of methodPermissionDesc objects - */ - public List getMethodPermissionsDescList() { - return methodPermissionsDescList; - } - - /** - * Get the exclude list of the assembly descriptor - * @return the exclude list of the assembly descriptor - */ - public ExcludeListDesc getExcludeListDesc() { - return excludeListDesc; - } - - - /** - * Get bean descriptor given its interface local name - * @param itfLocalName local interface name - * @return null if it doesn't exist. - */ - public BeanDesc getBeanDescWithLocalInterface(final String itfLocalName) { - for (Iterator i = beanDesc.values().iterator(); i.hasNext();) { - BeanDesc bd = (BeanDesc) i.next(); - if (bd.getLocalClass() != null) { - if (itfLocalName.equals(bd.getLocalClass().getName())) { - return bd; - } - } - } - return null; - } - - /** - * Find the JOnAS message destination for the given name - * @param mdLink the name of the message destination link in the Deployment Descriptor - * @return boolean if link was found - */ - public boolean getMessageDestination(final String mdLink) { - MessageDestination md = null; - if (asd != null && asd.getMessageDestinationList() != null) { - for (Iterator i = asd.getMessageDestinationList().iterator(); i.hasNext();) { - md = (MessageDestination) i.next(); - if (md.getMessageDestinationName().equals(mdLink)) { - return true; - } - } - } - return false; - } - - /** - * Get the JOnAS message destination for the given name - * @param mdLink the name of the message destination link in the Deployment Descriptor - * @return the jonas message destination given the name - */ - public JonasMessageDestination getJonasMessageDestination(final String mdLink) { - JonasMessageDestination jmd = null; - if (jonasMDList != null) { - for (Iterator i = jonasMDList.iterator(); i.hasNext();) { - jmd = (JonasMessageDestination) i.next(); - if (jmd.getMessageDestinationName().equals(mdLink)) { - return jmd; - } - } - } - return null; - } - - /** - * In case of beans with old CMP1 persistance, we need to instanciate the old class, - * as if we were in an old Deployment Descriptor. - * Default is CMP2.x for entity beans with a EJB2.0 DD. - * - * @param cl The ClassLoader to be used - * @param ent Entity MetaInformation from XML files - * @param asd AssemblyDescriptor MetaInformation from XML files - * @param j JonasEntity MetaInformation from XML files - * @param jMDRList MessageDrivenRef list - * - * @return The Entity Bean Descriptor, for the good CMP version. - * - * @throws DeploymentDescException Cannot build Entity Descriptor - */ - protected abstract BeanDesc newEntityBeanDesc(ClassLoader cl, Entity ent, - AssemblyDescriptor asd, JonasEntity j, JLinkedList jMDRList) - throws DeploymentDescException; - - /** - * Get the display name - * @return the Display name string, from the deployment descriptor. - */ - @Override - public String getDisplayName() { - return displayName; - } - - /** - * Get the ejb-client-jar name - * @return the ejb-client-jar string, from the deployment descriptor (may be null). - */ - public String getEjbClientJar() { - return ejbClientJar; - } - - - /** - * get the current logger - * @return the Logger - */ - public Logger getLogger() { - return logger; - } - - /** - * set the current logger - * @param logger the Logger - */ - public void setLogger(final Logger logger) { - this.logger = logger; - } - - /** - * Return the content of the web.xml file - * @return the content of the web.xml file - */ - public String getXmlContent() { - return xmlContent; - } - - /** - * Return the content of the jonas-web.xml file - * @return the content of the jonas-web.xml file - */ - public String getJOnASXmlContent() { - return jonasXmlContent; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - @Override - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetDisplayName()=" + getDisplayName()); - ret.append("\ngetEjbClientJar()=" + getEjbClientJar()); - BeanDesc[] b = getBeanDesc(); - for (int i = 0; i < b.length; i++) { - ret.append("\ngetBeanDesc(" + i + ")=" + b[i].getClass().getName()); - ret.append(b[i].toString()); - } - return ret.toString(); - } - - /** - * @param xmlContent XML Content - */ - public void setXmlContent(final String xmlContent) { - this.xmlContent = xmlContent; - } - - /** - * @param jonasXmlContent XML Content - */ - public void setJOnASXmlContent(final String jonasXmlContent) { - this.jonasXmlContent = jonasXmlContent; - } - /** - * @return true if EJB monitoring is active for this EJB-JAR, null if - * nothing set. - */ - public Boolean getMonitoringEnabled() { - return this.monitoringEnabled; - } - - /** - * @return Number of milliseconds after which methods will start warning - * for this EJB-JAR, null if nothing set. - */ - public Integer getWarningThreshold() { - return this.warningThreshold; - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb1_1.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb1_1.java deleted file mode 100644 index f569ee8fb8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb1_1.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.EjbJar; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbJar; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Class to hold meta-information related to the deployment of an ejb-jar 1.1 - * @author Philippe Durieux (Bull) - */ -public class DeploymentDescEjb1_1 extends DeploymentDesc { - - /** - * constructor - */ - public DeploymentDescEjb1_1(ClassLoader cl, EjbJar ej, - JonasEjbJar jej, Logger l, - String fileName) - throws DeploymentDescException { - super(cl, ej, jej, l, fileName); - // Trace - if (logger.getCurrentIntLevel() == BasicLevel.DEBUG) { - logger.log(BasicLevel.DEBUG, "DEPLOYMENT DESCRIPTOR = \n(" + this.toString() + "\n)"); - } - } - - protected BeanDesc newEntityBeanDesc(ClassLoader classLoader, - Entity ent, - AssemblyDescriptor asd, - JonasEntity jEnt, - JLinkedList jMDRList) throws DeploymentDescException { - return new EntityJdbcCmp1Desc(classLoader, ent, asd, jEnt, jMDRList, fileName); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb2.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb2.java deleted file mode 100644 index c6a17508cb..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/DeploymentDescEjb2.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.EjbJar; -import org.ow2.jonas.deployment.ejb.xml.EjbRelation; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbJar; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbRelation; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.deployment.ejb.xml.JonasMessageDriven; -import org.ow2.jonas.deployment.ejb.xml.MessageDriven; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Class to hold meta-information related to the deployment of an ejb-jar - * This subclass is for specification EJB 2.x, i.e. CMP2 persistance and MDB. - * It is also responsible for loading the Jorm Meta Information. - * @author S.Chassande-Barrioz : Initial developer - * @author Christophe Ney [cney@batisseurs.com] - * @author Philippe Durieux (new Jorm mapping) - */ -public class DeploymentDescEjb2 extends DeploymentDesc { - - /** - * List of relations (EjbRelationDesc) defined in this Descriptor - */ - private ArrayList ejbRelations = new ArrayList(); - - /** - * Build the Meta-Information from the XML data binding trees - * containing the EJB and JOnAS deployment descriptors. - * @param classLoader The Class Loader to be used - * @param ejbJar The EjbJar information, from standard deployment descriptor. - * @param jonasEjbJar The JonasEjbJar information, from JOnAS specific deployment descriptor. - * @param l The logger to be used for tracing - * @param FileName deployment desc's jar or directory name - * @throws DeploymentDescException Error when building the Deployment Descriptor - */ - public DeploymentDescEjb2(ClassLoader classLoader, EjbJar ejbJar, - JonasEjbJar jonasEjbJar, Logger l, - String fileName) - throws DeploymentDescException { - - // Session and Entity bean descriptors are built here. - // This part is common with EJB1.1 spec (no CMP2, no MDB) - super(classLoader, ejbJar, jonasEjbJar, l, fileName); - - // HashMap of jonas-message-driven - HashMap jonasMessageDriven = new HashMap(); - for (Iterator i = jonasEjbJar.getJonasMessageDrivenList().iterator(); i.hasNext(); ) { - JonasMessageDriven jMd = (JonasMessageDriven) i.next(); - jonasMessageDriven.put(jMd.getEjbName(), jMd); - } - - // message-driven beans - if (ejbJar.getEnterpriseBeans() != null) { - for (Iterator i = ejbJar.getEnterpriseBeans().getMessageDrivenList().iterator(); i.hasNext(); ) { - BeanDesc bd = null; - MessageDriven md = (MessageDriven) i.next(); - /* - * The Standard DTD allows a message-driven-bean without ejb-name - * Problem to associate infos to this bean (trans-attribute, jonas-specific infos) - * So the ejb-name must be specify and we check this - */ - if (md.getEjbName() == null) { - throw new DeploymentDescException("ejb-name missing for a message driven bean"); - } - // find corresponding jonas message-driven - JonasMessageDriven jMd = (JonasMessageDriven) jonasMessageDriven.get(md.getEjbName()); - if (jMd == null) { - throw new DeploymentDescException("jonas-message-driven-bean missing for bean " + md.getEjbName()); - } - - bd = new MessageDrivenDesc(classLoader, md, asd, jMd, - jonasEjbJar.getJonasMessageDestinationList(), fileName); - - bd.setDeploymentDesc(this); - bd.check(); - beanDesc.put(bd.getEjbName(), bd); - } - } - - // Relations on Entity beans CMP2 - if (ejbJar.getRelationships() != null) { - - // ArrayList of standard-relation names (Strings) - ArrayList stdRelations = new ArrayList(); - - // HashMap of jonas-relation - HashMap jonasRelations = new HashMap(); - for (Iterator i = jonasEjbJar.getJonasEjbRelationList().iterator(); i.hasNext(); ) { - JonasEjbRelation jer = (JonasEjbRelation) i.next(); - String jerName = jer.getEjbRelationName(); - //if (!stdRelations.contains(jerName)) { - // throw new DeploymentDescException("ejb-relation missing in ejb-jar.xml for the relation " + jerName); - //} - jonasRelations.put(jerName, jer); - } - - // ejb-relation - for (Iterator i = ejbJar.getRelationships().getEjbRelationList().iterator(); i.hasNext();) { - EjbRelation er = (EjbRelation) i.next(); - - // build the descriptors for the relation. - EjbRelationDesc erd = new EjbRelationDesc(er, logger); - ejbRelations.add(erd); - - // Keep a list of relation names. - stdRelations.add(erd.getName()); - - // find corresponding jonas relation (may not exist) - JonasEjbRelation jer = (JonasEjbRelation) jonasRelations.get(erd.getName()); - erd.setJonasInfo(jer); - - // makes the links between entity beans and relationship roles - EjbRelationshipRoleDesc rsd1 = erd.getRelationshipRole1(); - EjbRelationshipRoleDesc rsd2 = erd.getRelationshipRole2(); - EntityCmp2Desc ed1 = (EntityCmp2Desc) beanDesc.get(rsd1.getSourceBeanName()); - EntityCmp2Desc ed2 = (EntityCmp2Desc) beanDesc.get(rsd2.getSourceBeanName()); - // Check the sources beans names are correct - if ((ed1 == null) || (ed2 == null)) { - throw new DeploymentDescException("Invalid ejb-name for a relation-ship-role-source for the relation '" - + erd.getName() - + "' ('" - + rsd1.getSourceBeanName() - + "' or '" - + rsd2.getSourceBeanName() - + "' invalid)"); - } - // Check if the source beans have local interfaces - if ((ed1.getLocalHomeClass() == null) || (ed1.getLocalClass() == null)) { - throw new DeploymentDescException("The entity bean '" + ed1.getEjbName() - + "' involved in the relationship '" - + erd.getName() - + "' must have local interfaces"); - } - if ((ed2.getLocalHomeClass() == null) || (ed2.getLocalClass() == null)) { - throw new DeploymentDescException("The entity bean '" + ed2.getEjbName() - + "' involved in the relationship '" - + erd.getName() - + "' must have local interfaces"); - } - ed1.addEjbRelationshipRoleDesc(rsd1); - ed2.addEjbRelationshipRoleDesc(rsd2); - rsd1.setTargetBean(ed2); - rsd1.setSourceBean(ed1); - rsd2.setTargetBean(ed1); - rsd2.setSourceBean(ed2); - - // Fill the mapping information with the values defined in jonas DD - erd.fillMappingInfo(); - - // Fill the mapping information for the relation with default values - // if some mapping information is missing - erd.fillMappingInfoWithDefault(); - } - - for (Iterator i = jonasEjbJar.getJonasEjbRelationList().iterator(); i.hasNext(); ) { - JonasEjbRelation jer = (JonasEjbRelation) i.next(); - String jerName = jer.getEjbRelationName(); - if (!stdRelations.contains(jerName)) { - throw new DeploymentDescException("ejb-relation missing in ejb-jar.xml for the relation " + jerName); - } - } - } - - // Trace - if (logger.getCurrentIntLevel() == BasicLevel.DEBUG) { - logger.log(BasicLevel.DEBUG, "DEPLOYMENT DESCRIPTOR = \n(" + this.toString() + "\n)"); - } - } - - /** - * In case of beans with old CMP1 persistance, we need to instanciate the old class, - * as if we were in an old Deployment Descriptor. - * Default is CMP2.x for entity beans with a EJB2.0 DD. - * @param classLoader The ClassLoader to be used - * @param ent Entity MetaInformation from XML files - * @param asd AssemblyDescriptor MetaInformation from XML files - * @param jEnt JonasEntity MetaInformation from XML files - * @return The Entity Bean Descriptor, for the good CMP version. - * @throws DeploymentDescException Cannot build Entity Descriptor - */ - protected BeanDesc newEntityBeanDesc(ClassLoader classLoader, - Entity ent, - AssemblyDescriptor asd, - JonasEntity jEnt, - JLinkedList jMDRList) - throws DeploymentDescException { - - if (ent.getCmpVersion() == null || ent.getCmpVersion().equals("2.x")) { - return new EntityJdbcCmp2Desc(classLoader, ent, asd, jEnt, this, jMDRList, fileName); - } else { - return new EntityJdbcCmp1Desc(classLoader, ent, asd, jEnt, jMDRList, fileName); - } - } - - /** - * Get iterator of meta-info for all defined relations - * @return an iterator of EjbRelationDesc - */ - public Iterator getEjbRelationDescIterator() { - return ejbRelations.iterator(); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - for (Iterator i = getEjbRelationDescIterator(); i.hasNext();) { - ret.append("\nejbRelationDesc[]=" + i.next()); - } - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationDesc.java deleted file mode 100644 index 714271cd28..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationDesc.java +++ /dev/null @@ -1,311 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ejb; - -import java.util.HashMap; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.xml.EjbRelation; -import org.ow2.jonas.deployment.ejb.xml.EjbRelationshipRole; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbRelation; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbRelationshipRole; - -import org.objectweb.util.monolog.api.Logger; - -/** - * Class to hold meta-information related to an ejb-relation. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin on May 2003: code cleanup - * @author Helene Joanin on May 2003: complement for legacy first version - * @author Ph Durieux (may 2004): default names for relations and roles. - */ - -public class EjbRelationDesc { - - private Logger logger = null; - private String name; // name of the relation - private String name1; // name of the relation role 1 - private String name2; // name of the relation role 2 - private EjbRelationshipRoleDesc relationshipRoleDesc1; - private EjbRelationshipRoleDesc relationshipRoleDesc2; - private String jdbcTableName = null; - - - // Zeus objects for the associated mapping information (needed in fillMappingInfo); - private EjbRelationshipRole role1; - private EjbRelationshipRole role2; - JonasEjbRelation jRel = null; - JonasEjbRelationshipRole jRsRole1 = null; - JonasEjbRelationshipRole jRsRole2 = null; - - - /** - * constructor to be used by parent node. - * @param er The described object EjbRelation - * @param logger The logger - * @throws DeploymentDescException thrown in error case. - */ - public EjbRelationDesc(EjbRelation er, Logger logger) throws DeploymentDescException { - - this.logger = logger; - - role1 = er.getEjbRelationshipRole(); - role2 = er.getEjbRelationshipRole2(); - - String cmr1 = ""; - if (role1.getCmrField() != null) { - cmr1 = role1.getCmrField().getCmrFieldName(); - } - String cmr2 = ""; - if (role2.getCmrField() != null) { - cmr2 = role2.getCmrField().getCmrFieldName(); - } - - // first role. A name is mandatory. - // If not set: choose the cmr name of the opposite role, if it exists. - name1 = role1.getEjbRelationshipRoleName(); - if (name1 == null || name1.length() == 0) { - if (role2.getCmrField() != null) { - name1 = cmr2; - } else { - name1 = "role1"; // a default value - } - // We have changed the name, keep the new one. - role1.setEjbRelationshipRoleName(name1); - } - - // second role. A name is mandatory. - // If not set: choose the cmr name of the opposite role, if it exists. - name2 = role2.getEjbRelationshipRoleName(); - if (name2 == null || name2.length() == 0) { - if (role1.getCmrField() != null) { - name2 = cmr1; - } else { - name2 = "role2"; // a default value - } - // We have changed the name, keep the new one. - role2.setEjbRelationshipRoleName(name2); - } - - // the two roles must have different names - if (name1.equals(name2)) { - throw new DeploymentDescException("Relation " + name + " have 2 roles with same name: " + name1); - } - - // name of the relation. If not set, choose a combination of the 2 cmr names. - String ern = er.getEjbRelationName(); - if (ern == null || ern.length() == 0) { - name = cmr2 + "-" + cmr1; - } else { - name = ern; - } - } - - /** - * Finish initialisation - * @param jer The described object JonasEjbRelation. This param may be null. - * @throws DeploymentDescException in error case - */ - public void setJonasInfo(JonasEjbRelation jer) throws DeploymentDescException { - // search the associated JonasEjbRelationshipRole of EjbRelationshipRole. - // They may not exist. - jRel = jer; - HashMap table = new HashMap(); - if (jRel != null) { - for (Iterator i = jRel.getJonasEjbRelationshipRoleList().iterator(); i.hasNext();) { - JonasEjbRelationshipRole jersr = (JonasEjbRelationshipRole) i.next(); - String rname = jersr.getEjbRelationshipRoleName(); - if (!rname.equals(name1) && !rname.equals(name2)) { - throw new DeploymentDescException("Invalid relationship-role-name \"" + rname + "\" for relation \"" + name + "\" in jonas-ejb-jar.xml"); - } - table.put(rname, jersr); - } - } - jRsRole1 = (JonasEjbRelationshipRole) table.get(name1); - jRsRole2 = (JonasEjbRelationshipRole) table.get(name2); - - relationshipRoleDesc1 = new EjbRelationshipRoleDesc(this, name1, role1, jRsRole1, role2, true, logger); - relationshipRoleDesc2 = new EjbRelationshipRoleDesc(this, name2, role2, jRsRole2, role1, false, logger); - - // Add the opposite CMR field for the relation XXu - // in order to implement the coherence. - boolean r1hf = relationshipRoleDesc1.hasCmrField(); - boolean r2hf = relationshipRoleDesc2.hasCmrField(); - EjbRelationshipRoleDesc nocmr = null; - EjbRelationshipRoleDesc cmr = null; - if (r1hf && !r2hf) { - nocmr = relationshipRoleDesc2; - cmr = relationshipRoleDesc1; - } else if (!r1hf && r2hf) { - nocmr = relationshipRoleDesc1; - cmr = relationshipRoleDesc2; - } - if (nocmr != null) { - // The relation is OXu, the role 'role' does not have cmr field - String cmrName = name; - // calculate a cmr field name with the relation name. The bad - // character are replaced by the character '_'. - for (int i = 0; i < cmrName.length(); i++) { - char c = cmrName.charAt(i); - if (!Character.isJavaIdentifierPart(c)) { - cmrName = cmrName.replace(c, '_'); - } - } - cmrName = "jonasCMR" + cmrName; - // Add the cmr, no type is specified because the added cmr field - // is mono valued. - nocmr.setCmrFieldName(cmrName); - nocmr.setIsJOnASCmrField(); - if (nocmr.isTargetMultiple()) { - if (cmr.isTargetMultiple()) { - nocmr.setCmrFieldType(cmr.cmrFieldType.getName()); - } else { - nocmr.setCmrFieldType("java.util.Collection"); - } - } - } - } - - /** - * Fills the mapping information of this relation with the values defined in jonas DD. - * @throws DeploymentDescException thrown in error case. - */ - protected void fillMappingInfo() throws DeploymentDescException { - if (jRel != null) { - if (jRel.getJdbcTableName() != null) { - if (jRel.getJdbcTableName().length() != 0) { - jdbcTableName = jRel.getJdbcTableName(); - } - } - relationshipRoleDesc1.fillMappingInfo(); - relationshipRoleDesc2.fillMappingInfo(); - } - } - - /** - * Fills the mapping information of this relation with default values, - * if the mapping information is not already initialized. - */ - protected void fillMappingInfoWithDefault() { - if (!hasJdbcTable()) { - if (getRelationshipRole1().isTargetMultiple() - && getRelationshipRole2().isTargetMultiple()) { - // Many-Many: join table needed for the relation - jdbcTableName = getRelationshipRole1().getSourceBean().getAbstractSchemaName().toUpperCase() - + "_" + getRelationshipRole2().getSourceBean().getAbstractSchemaName().toUpperCase(); - } - } - if (!getRelationshipRole1().isSourceMultiple() - && !getRelationshipRole2().isSourceMultiple()) { - // One-One - if (!getRelationshipRole1().hasJdbcMapping() - && !getRelationshipRole2().hasJdbcMapping()) { - if (!getRelationshipRole1().isJOnASCmrField() - && !getRelationshipRole2().isJOnASCmrField()) { - // One <-> One: foreign keys in the source bean of the first RsRole defined - getRelationshipRole1().fillMappingInfoWithDefault(); - } else { - if (!getRelationshipRole1().isJOnASCmrField()) { - // One -> One: foreign keys in the source bean of RsRole1 - getRelationshipRole1().fillMappingInfoWithDefault(); - } else { - // One <- One: foreign keys in the target bean of RsRole1 - getRelationshipRole2().fillMappingInfoWithDefault(); - } - } - } - } else if (getRelationshipRole1().isSourceMultiple() - && getRelationshipRole2().isSourceMultiple()) { - // Many-Many - getRelationshipRole1().fillMappingInfoWithDefault(); - getRelationshipRole2().fillMappingInfoWithDefault(); - } else { - // One-Many or Many-One - if (getRelationshipRole1().isSourceMultiple()) { - // Many-One - getRelationshipRole1().fillMappingInfoWithDefault(); - } else { - // One-Many - getRelationshipRole2().fillMappingInfoWithDefault(); - } - } - } - - /** - * get the name of the relationship. - * @return the String name of the relationship. - */ - public String getName() { - return name; - } - - /** - * get the meta-information for the first relation-ship-role - * @return the EjbRelationshipRoleDesc for the first relation-ship-role - */ - public EjbRelationshipRoleDesc getRelationshipRole1() { - return relationshipRoleDesc1; - } - - /** - * get the meta-information for the second relation-ship-role - * @return the EjbRelationshipRoleDesc for the second relation-ship-role - */ - public EjbRelationshipRoleDesc getRelationshipRole2() { - return relationshipRoleDesc2; - } - - /** - * Is a table in the database is defined for this relation ? - * @return true if table name in the database is defined for this relation. - */ - public boolean hasJdbcTable() { - return (jdbcTableName != null); - } - - /** - * Return the table name in the database associated to this relation. - * @return the String name of the table associated to this relation. - */ - public String getJdbcTableName() { - return jdbcTableName; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName()=" + getName()); - if (hasJdbcTable()) { - ret.append("\ngetJdbcTableName() = " + getJdbcTableName()); - } - ret.append("\ngetRelationshipRole1() = " + getRelationshipRole1()); - ret.append("\ngetRelationshipRole2() = " + getRelationshipRole2()); - return ret.toString(); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationshipRoleDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationshipRoleDesc.java deleted file mode 100644 index 9a970c903b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbRelationshipRoleDesc.java +++ /dev/null @@ -1,496 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployment.ejb; - -import java.util.HashMap; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.xml.EjbRelationshipRole; -import org.ow2.jonas.deployment.ejb.xml.ForeignKeyJdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbRelationshipRole; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Class to hold meta-information related to an ejb-relation-role - * Created on July 7, 2002 - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin on May 2003: code cleanup - * @author Helene Joanin on May 2003: complement for legacy first version - */ -public class EjbRelationshipRoleDesc { - - private Logger logger = null; - - /** - * This constant can be used to represent an index of a gen class. - */ - public static final byte INDEX = 1; - - /** - * This constant can be used to represent the source of the relation, ie the - * element which references the other. - */ - public static final byte SOURCE = 2; - - /** - * This constant can be used to represent the target of the relation, ie the - * element which is referenced by the other. - */ - public static final byte TARGET = 4; - - /** - * Don't change these values without looking at getRelationType() ! - */ - public static final byte OOU = 0; - - public static final byte OOB = 1; - - public static final byte OMU = 2; - - public static final byte OMB = OMU + OOB; - - public static final byte MOU = 4; - - public static final byte MOB = MOU + OOB; - - public static final byte MMU = OMU + MOU; - - public static final byte MMB = MMU + OOB; - - private String rsrName; - - private String ejbSourceName; - - private EjbRelationDesc ejbRelationDesc; - - private EntityCmp2Desc sourceEntityCmp2Desc; - - private boolean isSourceMultiple; - - private EntityCmp2Desc targetEntityCmp2Desc; - - private boolean isTargetMultiple; - - private boolean isSlave; - - protected String cmrFieldName = null; - - protected Class cmrFieldType = null; - - protected boolean isJOnASCMR = false; - - private byte relationType = -1; - - private boolean mustCascade; - - // Zeus objects for the associated mapping information (needed in - // fillMappingInfo); - // They may be null. - private JonasEjbRelationshipRole jSourceRsRole = null; - - // mapping information build by fillMappingInfo and - // fillMappingInfoWithDefault - private HashMap foreignKeyMap = new HashMap(); - - private boolean hasJdbcMapping = false; - - /** - * constructor to be used by parent node - * @param rd parent node = EjbRelationDesc - * @param role this role (standard EjbRelationshipRole) - * @param jrole this Jonas role (JonasEjbRelationshipRole). This param may - * be null. - * @param opposite opposite role in the relation (standard - * EjbRelationshipRole) - * @throws DeploymentDescException in error case. - */ - public EjbRelationshipRoleDesc(EjbRelationDesc rd, String name, EjbRelationshipRole role, - JonasEjbRelationshipRole jrole, EjbRelationshipRole opposite, boolean isSlave, Logger logger) - throws DeploymentDescException { - - this.logger = logger; - ejbRelationDesc = rd; - this.isSlave = isSlave; - rsrName = name; - mustCascade = opposite.isCascadeDelete(); - ejbSourceName = role.getRelationshipRoleSource().getEjbName(); - - // mutiplicity is One or Many - if (opposite.getMultiplicity().equalsIgnoreCase("Many")) { - isTargetMultiple = true; - if (role.isCascadeDelete()) { - throw new DeploymentDescException("Cascade delete not allowed for relationshipRole for relationship '" - + rd.getName() + "(because opposite role has a multiplicity of Many)"); - } - } else if (opposite.getMultiplicity().equalsIgnoreCase("One")) { - isTargetMultiple = false; - } else { - throw new DeploymentDescException("Invalid multiplicity value for relationshipRole for relationship '" - + rd.getName() + "'(must be One or Many)"); - } - if (role.getMultiplicity().equalsIgnoreCase("Many")) { - isSourceMultiple = true; - } else if (role.getMultiplicity().equalsIgnoreCase("One")) { - isSourceMultiple = false; - } else { - throw new DeploymentDescException("Invalid multiplicity value for relationshipRole for relationship '" - + rd.getName() + "'(must be One or Many)"); - } - - // store cmr field if any - if (role.getCmrField() != null) { - setCmrFieldName(role.getCmrField().getCmrFieldName()); - if (isTargetMultiple) { - String type = role.getCmrField().getCmrFieldType(); - if (type == null) { - throw new DeploymentDescException( - "You must specify a cmr-field-type in case where the relation is 'Many' in the cmr-field '" - + cmrFieldName + "' of bean " + ejbSourceName); - } - setCmrFieldType(type); - } - } - - // store the JonasEjbRelationshipRole - jSourceRsRole = jrole; - } - - /** - * Fills the mapping information of this relation-ship role with the values - * defined in jonas DD. - * @throws DeploymentDescException in error case. - */ - protected void fillMappingInfo() throws DeploymentDescException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "" + (jSourceRsRole != null) + " for " + rsrName); - } - if (jSourceRsRole != null) { - for (Iterator i = jSourceRsRole.getForeignKeyJdbcMappingList().iterator(); i.hasNext();) { - ForeignKeyJdbcMapping fkMapping = (ForeignKeyJdbcMapping) i.next(); - String fkc = fkMapping.getForeignKeyJdbcName(); - String kc = null; - if (fkMapping.getKeyJdbcName() != null) { - kc = fkMapping.getKeyJdbcName(); - } - if (kc == null) { - // if the target bean has a primary-key-field, this value - // may not be defined - // in this case, this is the column name of the - // primary-key-field - if (targetEntityCmp2Desc.hasSimplePkField()) { - kc = ((FieldJdbcDesc) targetEntityCmp2Desc.getSimplePkField()).getJdbcFieldName(); - } else { - // error - throw new DeploymentDescException( - "key-jdbc-name must be provided for foreign-key-jdbc-mapping " + fkc - + " of relation-ship role " + rsrName + "of relation " - + ejbRelationDesc.getName()); - } - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "explicit fk mapping = " + fkc + " for " + kc); - } - foreignKeyMap.put(kc, fkc); - } - hasJdbcMapping = true; - } - } - - /** - * Fills the mapping information of this relation-ship role with default - * values if the mapping information is not already initialized. - */ - protected void fillMappingInfoWithDefault() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "" + hasJdbcMapping); - } - if (!hasJdbcMapping) { - if (targetEntityCmp2Desc.hasSimplePkField()) { - // target entity has a simple pk (primary-key-field) - String fn = targetEntityCmp2Desc.getSimplePkFieldName(); - FieldJdbcDesc fd = (FieldJdbcDesc) targetEntityCmp2Desc.getCmpFieldDesc(fn); - String kc = fd.getJdbcFieldName(); - String fkc = targetEntityCmp2Desc.getAbstractSchemaName() + "_" + kc; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "default fk mapping = " + fkc + " for " + kc); - } - foreignKeyMap.put(kc, fkc); - } else { - // target entity has a composite pk - for (Iterator i = targetEntityCmp2Desc.getCmpFieldDescIterator(); i.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) i.next(); - String kc = fd.getJdbcFieldName(); - String fkc = targetEntityCmp2Desc.getAbstractSchemaName() + "_" + kc; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "default fk mapping = " + fkc + " for " + kc); - } - foreignKeyMap.put(kc, fkc); - } - } - hasJdbcMapping = true; - } - } - - /** - * return the name of this relationship role. - * @return the String name of this relationship role. - */ - public String getName() { - return rsrName; - } - - protected void setCmrFieldName(String name) throws DeploymentDescException { - cmrFieldName = name; - } - - protected void setCmrFieldType(String type) throws DeploymentDescException { - try { - cmrFieldType = Class.forName(type); - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("class name not found for cmr-field " + cmrFieldName + " of bean " - + ejbSourceName, e); - } - if (!(cmrFieldType.getName().equals("java.util.Collection") || cmrFieldType.getName().equals("java.util.Set"))) { - throw new DeploymentDescException("value of cmr-field-type " + cmrFieldName + " of bean " + ejbSourceName - + " should be java.util.Set or java.util.Collection if set"); - } - } - - /** - * mark the cmr as added by JOnAS - */ - protected void setIsJOnASCmrField() { - isJOnASCMR = true; - } - - /** - * set the source bean of this relation-ship role. - * @param led EntityCmp2Desc for the source bean of this relation-ship role. - */ - protected void setSourceBean(EntityCmp2Desc led) { - sourceEntityCmp2Desc = led; - } - - /** - * set the target bean of this relation-ship role. - * @param led EntityCmp2Desc for the target bean of this relation-ship role. - */ - protected void setTargetBean(EntityCmp2Desc led) { - targetEntityCmp2Desc = led; - if (cmrFieldType == null) { - cmrFieldType = led.getLocalClass(); - } - } - - /** - * get the parent ejb relation of this relation-ship-role. - * @return the EjbRelationDesc of this relation-ship-role. - */ - public EjbRelationDesc getRelation() { - return ejbRelationDesc; - } - - /** - * get the opposite relation-ship-role of this relation-ship-role. - * @return the opposite EjbRelationshipRoleDesc of this relation-ship-role. - */ - public EjbRelationshipRoleDesc getOppositeRelationshipRole() { - EjbRelationshipRoleDesc res = ejbRelationDesc.getRelationshipRole1(); - if (res == this) { - return ejbRelationDesc.getRelationshipRole2(); - } else { - return res; - } - } - - /** - * Get the name of the ejb involved in this relation-ship-role. This is the - * source bean name of this relation. - * @return the String ejb-name of the source bean. - */ - public String getSourceBeanName() { - return ejbSourceName; - } - - /** - * Get the ejb involved in this relation-ship-role. this is the source bean - * of this relation. - * @return the EntityCmp2Desc of the source bean. - */ - public EntityCmp2Desc getSourceBean() { - return sourceEntityCmp2Desc; - } - - /** - * It retrieves the EntityCmp2Desc which is linked to the EntityCmp2Desc - * associated to this EjbRelationshipRoleDesc. This is the target bean of - * this relationship role - * @return the EntityCmp2Desc of the target bean. - */ - public EntityCmp2Desc getTargetBean() { - return targetEntityCmp2Desc; - } - - /** - * Get state of opposite relationship-role is relation multiple. - * @return true if the opposite relationship-role is relation multiple. - */ - public boolean isSourceMultiple() { - return isSourceMultiple; - } - - /** - * Get state of this relationship-role is relation multiple. (get state of - * field is relation multiple). - * @return true if the relationship-role is relation multiple. - */ - public boolean isTargetMultiple() { - return isTargetMultiple; - } - - /** - * @return true if this bean must cascade delete the other bean in this - * relation. - */ - public boolean mustCascade() { - return mustCascade; - } - - /** - * It returns a boolean value which indicates if the cmr has been added by - * JOnAS (true) or if the user has specified a cmr field in the descriptor. - * A CMR field is be added to manage the coherence of the relation OXu - * @return true if the CMR field is not a bean's programmer CMR field. - */ - public boolean isJOnASCmrField() { - return isJOnASCMR; - } - - /** - * It retrieves true if the EntityCmp2Desc associated to this - * EjbRelationshipRoleDesc has a cmr field to the linked EntityCmp2Desc - * @return true if the relation-ship-role has a CMR field. - */ - // TODO: is this method really needed (return always true??) - public boolean hasCmrField() { - return cmrFieldName != null; - } - - /** - * get the name of the cmr-field. - * @return the String name of the cmr-field. - */ - public String getCmrFieldName() { - return cmrFieldName; - } - - /** - * get the type of the cmr-field when set in the deployment descriptor. - * @return Collection or Set for multiple rel. and null for non multiple - * rel. - */ - public Class getCmrFieldType() { - return cmrFieldType; - } - - /** - * This method depends on static values OOB,OOU,... defined upper ! - * @return the type of the relation: OO-u, OO-b, OM-u, .... - */ - public byte getRelationType() { - if (relationType == -1) { - relationType = OOU; - EjbRelationshipRoleDesc rsr2 = getOppositeRelationshipRole(); - if (rsr2.hasCmrField() && hasCmrField()) { - relationType += OOB; - } - if (isTargetMultiple()) { - relationType += OMU; - } - if (rsr2.isTargetMultiple()) { - relationType += MOU; - } - } - return relationType; - } - - /** - * Is a jdbc mapping is defined for this relationship role ? - * @return true if a jdbc mapping is defined for this relationship role. - */ - public boolean hasJdbcMapping() { - return hasJdbcMapping; - } - - /** - * In M-N relationships, only 1 role will write data on DB. - * @return true if role will not write MN relations on database - */ - public boolean isSlave() { - return isSlave; - } - - /** - * @param jdbcFieldName a primary key column name of the table associated to - * the target bean. - * @return the foreign key column name associated to the given primary key - * column name. - */ - public String getForeignKeyJdbcName(String jdbcFieldName) { - return (String) foreignKeyMap.get(jdbcFieldName); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName() = " + getName()); - ret.append("\ngetRelation().getName() = " + getRelation().getName()); - ret.append("\ngetOppositeRelationshipRole().getName() = " + getOppositeRelationshipRole().getName()); - ret.append("\ngetSourceBeanName() = " + getSourceBeanName()); - ret.append("\ngetTargetBean().getName() = " + getTargetBean().getEjbName()); - ret.append("\nisSourceMultiple() = " + isSourceMultiple()); - ret.append("\nisTargetMultiple() = " + isTargetMultiple()); - ret.append("\nmustCascade() = " + mustCascade()); - ret.append("\nisJOnASCmrField() = " + isJOnASCmrField()); - ret.append("\ngetCmrFieldName() = " + getCmrFieldName()); - ret.append("\ngetCmrFieldType() = " + getCmrFieldType()); - ret.append("\ngetRelationType() = " + getRelationType()); - if (hasJdbcMapping()) { - for (Iterator i = foreignKeyMap.keySet().iterator(); i.hasNext();) { - String key = (String) i.next(); - String fkey = (String) foreignKeyMap.get(key); - ret.append("\ngetForeignKeyJdbcName(" + key + ")=" + fkey); - } - } - return ret.toString(); - } - -} \ No newline at end of file diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarDTDs.java deleted file mode 100644 index 1136615d58..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarDTDs.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - - -import org.ow2.jonas.deployment.common.CommonsDTDs; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of DTDs for ejbjar.xml. - * @author Philippe Coq - */ -public class EjbjarDTDs extends CommonsDTDs { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(EjbjarDTDs.class); - - /** - * List of ejb-jar dtds. - */ - private static final String[] EJBJAR_DTDS = new String[] { - PACKAGE + "ejb-jar_1_1.dtd", - PACKAGE + "ejb-jar_2_0.dtd" - }; - - /** - * List of jonas-ejb-jar publicId. - */ - private static final String[] EJBJAR_DTDS_PUBLIC_ID = new String[] { - "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN", - "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN", - }; - - - - - /** - * Build a new object for web.xml DTDs handling. - */ - public EjbjarDTDs() { - super(); - addMapping(EJBJAR_DTDS, EJBJAR_DTDS_PUBLIC_ID); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarSchemas.java deleted file mode 100644 index 9b72a9b0d1..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EjbjarSchemas.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for ejb-jar.xml. - * @author Philippe Coq - */ -public class EjbjarSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(EjbjarSchemas.class); - - /** - * List of schemas used for ejb-jar.xml. - */ - protected static final String[] EJBJAR_SCHEMAS = new String[] { - PACKAGE + "ejb-jar_2_1.xsd", - PACKAGE + "ejb-jar_3_0.xsd", - PACKAGE + "ejb-jar_3_1.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public EjbjarSchemas() { - super(); - addSchemas(EJBJAR_SCHEMAS); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityBmpDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityBmpDesc.java deleted file mode 100644 index d9a8ba5913..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityBmpDesc.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; - - -/** - * Class to hold meta-information related to an entity of type BMP. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - */ -public class EntityBmpDesc extends EntityDesc { - - /** - * constructor to be used by parent node - */ - public EntityBmpDesc(ClassLoader classLoader, Entity ent, - AssemblyDescriptor asd, JonasEntity jEnt, - JLinkedList jMDRList, String fileName) - throws DeploymentDescException { - super(classLoader, ent, asd, jEnt, jMDRList, fileName); - } - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp1Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp1Desc.java deleted file mode 100644 index 647b20ba7e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp1Desc.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; - - -/** - * Class to hold meta-information related to an entity of type CMP version 1.x. - * Created on Jun 24, 2002 - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class EntityCmp1Desc extends EntityCmpDesc { - - protected Method isModifiedMethod = null; - - /** - * constructor to be used by parent node - */ - public EntityCmp1Desc(ClassLoader classLoader, Entity ent, - AssemblyDescriptor asd, JonasEntity jEnt, - JLinkedList jMDRList, String fileName) - throws DeploymentDescException { - - super(classLoader, ent, asd, jEnt, jMDRList, fileName); - - // check if persistent fields map to fields - for (Iterator i = fieldDesc.keySet().iterator();i.hasNext();) { - String fn = (String)i.next(); - // check for valid field name - try { - Field f = ejbClass.getField(fn); - ((FieldDesc)(fieldDesc.get(fn))).setFieldType(f.getType()); - } catch (NoSuchFieldException e) { - throw new DeploymentDescException("Invalid field name "+fn+" in field-name in bean "+this.ejbName,e); - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflexion on "+this.ejbClass.getName()); - } - } - - // isModifiedMethod - if (jEnt.getIsModifiedMethodName() != null) { - String mName = jEnt.getIsModifiedMethodName(); - try { - isModifiedMethod = this.ejbClass.getMethod(mName, new Class[0]); - } catch (NoSuchMethodException e) { - isModifiedMethod = null; - throw new DeploymentDescException(mName + " is not a method of " + this.ejbClass.getName()); - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflexion on " + this.ejbClass.getName()); - } - } - if (isUndefinedPK()) { - FieldDesc fd = this.newFieldDescInstance(); - fd.setName("JONASAUTOPKFIELD"); - fd.setPrimaryKey(true); - fieldDesc.put("JONASAUTOPKFIELD", fd); - ((FieldDesc) (fieldDesc.get("JONASAUTOPKFIELD"))).setFieldType(java.lang.Integer.class); - ((FieldJdbcDesc) (fieldDesc.get("JONASAUTOPKFIELD"))).setJdbcFieldName(this.getJdbcAutomaticPkFieldName()); - } - } - - /** - * Get descriptor for a given field - * @param field of the bean class - * @return Descriptor for the given field - */ - public FieldDesc getCmpFieldDesc(Field field) { - FieldDesc ret = (FieldDesc) fieldDesc.get(field.getName()); - if (ret == null) - throw new Error("Field " + field.getName() + " is not a cmp field of class " + this.ejbClass.getName()); - return ret; - } - - - /** - * Get the 'isModified' method name implemented in the bean class. - * (This information is JOnAS specific). - * @return Name of the isModified method - */ - public Method getIsModifiedMethod(){ - if (isModifiedMethod == null) - throw new Error("No isModified method defined for bean " + this.ejbName); - return isModifiedMethod; - } - - /** - * Assessor for existence of a isModified method - * @return true of isModified method exist for the bean - */ - public boolean hasIsModifiedMethod() { - return isModifiedMethod != null; - } - - /** - * Assessor for a CMP field - * @param field for which a descriptor is to be returned - * @return Descriptor for the given field - */ - public boolean hasCmpFieldDesc(Field field) { - return fieldDesc.containsKey(field.getName()); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - if (hasIsModifiedMethod()) - ret.append("getIsModifiedMethod()=" + getIsModifiedMethod().toString()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp2Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp2Desc.java deleted file mode 100644 index 10f8e10add..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmp2Desc.java +++ /dev/null @@ -1,380 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.util.ArrayList; -import java.util.Iterator; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.ejbql.ParseException; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.deployment.ejb.xml.Query; -import org.ow2.jonas.lib.util.BeanNaming; - - - - - -/** - * Class to hold meta-information related to an entity of type CMP version 2. - * Created on Jun 24, 2002 - * @author Christophe Ney [cney@batisseurs.com] : Initial developper - * @author Helene Joanin : code cleanup on May 2003 - * @author Helene Joanin : complement for legacy first version on May 2003 - */ -public abstract class EntityCmp2Desc extends EntityCmpDesc { - - private ArrayList ejbRelationshipRoleDesc = new ArrayList(); - protected String abstractSchemaName; - - private static final String JORM_PACKAGE = "jorm"; - - private String jormClassName = null; - private String jormFQClassName = null; - private String jormAccessorClassName = null; - private String jormPKClassName = null; - private String jormPNameGetterClassName = null; - private String jormBinderClassName = null; - - - protected String factoryClassName = null; - protected DeploymentDescEjb2 dc2d = null; - - /** - * constructor: called when the DeploymentDescriptor is read. - * Currently, called by both GenIC and createContainer. - */ - public EntityCmp2Desc(ClassLoader classLoader, - Entity ent, - AssemblyDescriptor asd, - JonasEntity jEnt, - DeploymentDescEjb2 dc2d, - JLinkedList jMDRList, - String fileName) - throws DeploymentDescException { - - super(classLoader, ent, asd, jEnt, jMDRList, fileName); - this.dc2d = dc2d; - - // An abstract schema name is required - if ((ent.getAbstractSchemaName() == null) - || (ent.getAbstractSchemaName().length() == 0)) { - throw new DeploymentDescException("abstract-schema-name must be provided for bean " + this.ejbName); - } - abstractSchemaName = ent.getAbstractSchemaName(); - - // check if persistent fields exist - if (fieldDesc.isEmpty()) { - throw new DeploymentDescException("No cmp-field defined in bean " + this.ejbName); - } - // check if persistent fields map to getter and setter - for (Iterator i = fieldDesc.keySet().iterator(); i.hasNext();) { - String fn = (String) i.next(); - - // field should not be defined - try { - Field f = ejbClass.getField(fn); - throw new DeploymentDescException("In cmp-version 2.x, field-name " + fn + " should not be defined in bean " + this.ejbName); - } catch (NoSuchFieldException e) { - // this is what we expect: nothing to do - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflexion on " + this.ejbClass.getName()); - } - - try { - Method getter = null; - try { - getter = ejbClass.getMethod(FieldDesc.getGetterName(fn), (Class[]) null); - ((FieldDesc) (fieldDesc.get(fn))).setFieldType(getter.getReturnType()); - } catch (NoSuchMethodException e) { - throw new DeploymentDescException("Getter method not found for field-name " + fn + " in bean " + this.ejbName, e); - } - try { - ejbClass.getMethod(FieldDesc.getSetterName(fn), new Class[]{getter.getReturnType()}); - } catch (NoSuchMethodException e) { - throw new DeploymentDescException("Setter method not found for field-name " + fn + " in bean " + this.ejbName, e); - } - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflexion on " + this.ejbClass.getName()); - } - } - - // isModifiedMethod deprecated for CMP 2.x - if (jEnt.getIsModifiedMethodName() != null) { - throw new DeploymentDescException("use of is-modified-method-name deprecated for CMP 2.x"); - } - - // EJB-QL query - if (ent.getQueryList() != null) { - for (Iterator i = ent.getQueryList().iterator(); i.hasNext();) { - Query q = (Query) i.next(); - boolean foundMatch = false; - for (Iterator j = getMethodDescIterator(); j.hasNext();) { - MethodDesc methd = (MethodDesc) j.next(); - String methName = q.getQueryMethod().getMethodName(); - if (methd.matchPattern(null, methName, q.getQueryMethod().getMethodParams()) - != MethodDesc.APPLY_TO_NOTHING) { - foundMatch = true; - String query = q.getEjbQl(); - if (!(methd instanceof MethodCmp2Desc)) { - throw new DeploymentDescException("ejbql query " + query + " can't apply to method " - + methName + " in bean " + ejbName); - } - try { - ((MethodCmp2Desc) methd).setQuery(query); - } catch (ParseException e) { - throw new DeploymentDescException("Invalid ejbql syntax for bean " + ejbName + ":\n" - + e.getMessage(query)); - } - if (q.getResultTypeMapping() != null) { - ((MethodCmp2Desc) methd).setResultTypeMapping(q.getResultTypeMapping()); - } - } - } - if (!foundMatch) { - throw new DeploymentDescException("invalid query-method definition for bean " + ejbName + "\nno such method as " - + MethodCmp2Desc.queryMethodElementToString(q.getQueryMethod()) + "\ncheck method name and method parameters"); - } - } - } - // check that all finder/selecter methods but findByPrimaryKey have a non null query - for (Iterator j = getMethodDescIterator(); j.hasNext();) { - MethodDesc md = (MethodDesc) j.next(); - if ((md.isFinder() || md.isEjbSelect()) && !md.isFindByPrimaryKey()) { - if (((MethodCmp2Desc) md).getQuery() == null) { - throw new DeploymentDescException("query not defined for method " + MethodDesc.toString(md.getMethod()) - + " of bean" + ejbName); - - } - } - } - if (isUndefinedPK()) { - FieldDesc fd = this.newFieldDescInstance(); - fd.setName("JONASAUTOPKFIELD"); - fd.setPrimaryKey(true); - fieldDesc.put("JONASAUTOPKFIELD", fd); - ((FieldDesc) (fieldDesc.get("JONASAUTOPKFIELD"))).setFieldType(java.lang.Integer.class); - ((FieldJdbcDesc) (fieldDesc.get("JONASAUTOPKFIELD"))).setJdbcFieldName(this.getJdbcAutomaticPkFieldName()); - } - } - - public DeploymentDescEjb2 getDeploymentDescEjb2() { - return dc2d; - } - - /** - * getter for field abstractSchemaName - */ - public String getAbstractSchemaName() { - return abstractSchemaName; - } - - /** - * Get the Jorm Class name in JOrm Meta Info - * It is built from the Abstract Shema Name. - * @return the Jorm Class Name - */ - private String getJormCName() { - if (jormClassName == null) { - jormClassName = BeanNaming.firstToUpperCase(abstractSchemaName); - } - return jormClassName; - } - - /** - * Get the Jorm Fully Qualified Class name in JOrm Meta Info - * It is built from the Abstract Shema Name. - * @return the Jorm Class Name - */ - public String getJormClassName() { - if (jormFQClassName == null) { - jormFQClassName = BeanNaming.getClassName(JORM_PACKAGE, getJormCName()); - } - return jormFQClassName; - } - - /** - * Add meta-info of a relationship in which the bean is involved - */ - public void addEjbRelationshipRoleDesc(EjbRelationshipRoleDesc ersrd) { - ejbRelationshipRoleDesc.add(ersrd); - } - - /** - * Get Iterator on meta-info for all relationships for which the bean - * is involved in. - */ - public Iterator getEjbRelationshipRoleDescIterator() { - return ejbRelationshipRoleDesc.iterator(); - } - - /** - * Get the EjbRelationshipRoleDesc corresponding to the given cmr field name. - * Return null if it doesn't exist. - */ - public EjbRelationshipRoleDesc getEjbRelationshipRoleDesc(String cmr) { - for (Iterator i = ejbRelationshipRoleDesc.iterator(); i.hasNext();) { - EjbRelationshipRoleDesc rsr = (EjbRelationshipRoleDesc) i.next(); - if (rsr.hasCmrField() && cmr.equals(rsr.getCmrFieldName())) { - return rsr; - } - } - return null; - } - - /** - * Factory method for MethodDesc. - * Only method with EJBQL queries are of type MethodCmp2Desc - */ - protected MethodDesc newMethodDescInstance(Method meth, Class classDef, int index) { - return new MethodCmp2Desc(this, meth, classDef, index); - } - - /** - * It retrieves the class name of the generated Jorm accessor interface. - * Used in the templates - * @return the fully qualified class name - */ - public String getJormAccessorClassName() { - if (jormAccessorClassName == null) { - jormAccessorClassName = BeanNaming.getClassName(JORM_PACKAGE, getJormCName() + "Accessor"); - } - return jormAccessorClassName; - } - - /** - * It retrieves the class name of the generated Jorm binding. - * Used by the JormFactory - * @return the fully qualified class name - */ - public String getJormBindingClassName() { - return BeanNaming.getClassName(JORM_PACKAGE, getJormCName() + "Binding"); - } - - /** - * Return the class name of the generated Jorm state class. - * @return the fully qualified class name - */ - public String getJormStateClassName() { - return BeanNaming.getClassName(JORM_PACKAGE, getJormCName() + "State"); - } - - /** - * It retrieves the class name of the generated Jorm mapping. - * Used in the JContainer to instanciate the JEntityFactory - * @return the fully qualified class name - */ - public String getFactoryClassName() { - return BeanNaming.getClassName(JORM_PACKAGE, "rdb." + getJormCName() + "Mapping"); - } - - /** - * Retrieves the Jorm PK Class, in case of composite PK - * Used by Jorm to generate PNameGetter and Binder classes - * @return the fully qualified class name - */ - public String getJormPKClassName() { - if (! hasPrimaryKeyField() && jormPKClassName == null) { - jormPKClassName = BeanNaming.getClassName(JORM_PACKAGE, - BeanNaming.getBaseName(getPrimaryKeyClass().getName())); - } - return jormPKClassName; - } - - /** - * It retrieves the class name of the generated Jorm PNameGetter interface. - * Used in the templates to generate CMP2 classes. - * @return the fully qualified class name - */ - public String getJormPNameGetterClassName() { - if (! hasPrimaryKeyField() && jormPNameGetterClassName == null) { - jormPNameGetterClassName = getJormPKClassName() + "PNG"; - } - return jormPNameGetterClassName; - } - - /** - * It retrieves the class name of the generated Jorm Binder. - * Used in the Jorm Factory - * @return the fully qualified class name - */ - public String getJormBinderClassName() { - if (jormBinderClassName == null) { - if (hasPrimaryKeyField()) { - jormBinderClassName = "org.objectweb.jorm.facility.naming.basidir.BasidBinder"; - } else { - jormBinderClassName = getJormPKClassName() + "Binder"; - } - } - return jormBinderClassName; - } - - /** - * @return true if at least one relation - */ - public boolean needJormCoherenceHelper() { - return ejbRelationshipRoleDesc.iterator().hasNext(); - } - - public String getJormCoherenceHelperItfName() { - return "JOnAS" + ejbName + "CoherenceHelper"; - } - - public String getJormCoherenceHelperPackageName() { - return BeanNaming.getPackageName(getFullDerivedBeanName()); - } - - public String getJormCoherenceHelperFQItfName() { - String pn = getJormCoherenceHelperPackageName(); - return (pn != null && pn.length() > 0 - ? pn + "." + getJormCoherenceHelperItfName() - : getJormCoherenceHelperItfName()); - } - - /** - * String representation of the object for test and debug purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - for (Iterator i = ejbRelationshipRoleDesc.iterator(); i.hasNext(); ) { - ret.append("\nejbRelationshipRoleDesc[]=" + i.next()); - } - ret.append("\ngetAbstractSchemaName()=" + getAbstractSchemaName()); - ret.append("\ngetJormAccessorClassName() = " + getJormAccessorClassName()); - ret.append("\nneedJormCoherenceHelper() = " + needJormCoherenceHelper()); - return ret.toString(); - } - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmpDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmpDesc.java deleted file mode 100644 index 35f19b4b3e..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityCmpDesc.java +++ /dev/null @@ -1,237 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.HashMap; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.CmpField; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.lib.util.BeanNaming; - - - -/** - * Base class to hold meta-information related to an entity of type CMP. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - * @author Jerome Camilleri : automatic PK - */ -public abstract class EntityCmpDesc extends EntityDesc { - - protected HashMap fieldDesc = new HashMap(); - protected String primaryKeyField = null; - protected String jdbcAutomaticPkFieldName = null; - - /** - * constructor to be used by parent node. - * @param classLoader class loader to use to laod bean's classes - * @param ent entity in the standard deployment descriptor - * @param asd assembly-descriptor in the standard deployment descriptor - * @param jEnt jonas-entity in the JOnAS deployment descriptor - * @param fileName jar or directory containing ejb - * @throws DeploymentDescException in error case. - */ - public EntityCmpDesc(ClassLoader classLoader, Entity ent, - AssemblyDescriptor asd, JonasEntity jEnt, - JLinkedList jMDRList, String fileName) - throws DeploymentDescException { - - super(classLoader, ent, asd, jEnt, jMDRList, fileName); - - // field descriptors for persistent fields - for (Iterator i = ent.getCmpFieldList().iterator(); i.hasNext();) { - String fn = ((CmpField) i.next()).getFieldName(); - FieldDesc fd = this.newFieldDescInstance(); - fd.setName(fn); - fd.setPrimaryKey(false); - fieldDesc.put(fn, fd); - - } - - // jdbc pk auto field name - JdbcMapping jm = jEnt.getJdbcMapping(); - if ((jm != null) && (jm.getJdbcAutomaticPkFieldName() != null)) { - if (jm.getJdbcAutomaticPkFieldName().length() != 0) { - jdbcAutomaticPkFieldName = jm.getJdbcAutomaticPkFieldName(); - } - } - if (jdbcAutomaticPkFieldName == null) { - // Default value - jdbcAutomaticPkFieldName = "JPK_"; - } - - if (isUndefinedPK()) { // Automatic PK - // If Primary Field is not declared (auto generated key field) - primaryKeyField = "JONASAUTOPKFIELD"; - } else if (ent.getPrimkeyField() != null) { - // primary key field - primaryKeyField = ent.getPrimkeyField(); - FieldDesc fd = (FieldDesc) fieldDesc.get(primaryKeyField); - if (fd == null) { - throw new DeploymentDescException("primkey-field " + primaryKeyField + " is not listed as cmp-field in bean " + this.ejbName); - } - fd.setPrimaryKey(true); - } else { - // public fields of primary key class - Field[] pcf = primaryKeyClass.getFields(); - for (int i = 0; i < pcf.length; i++) { - if (Modifier.isPublic(pcf[i].getModifiers())) { - String pn = pcf[i].getName(); - // exclude serialVersionUID field for jdk1.2.1 on solaris and - // exclude JProbe$ for JProbe using - if (!pn.equals("serialVersionUID") && !pn.startsWith("JProbe$")) { - FieldDesc fd = (FieldDesc) fieldDesc.get(pn); - if (fd == null) { - throw new DeploymentDescException("public field " + pn + " of primkey-class is not listed as cmp-field in bean " + this.ejbName); - } - fd.setPrimaryKey(true); - } - } - } - } - String packageName = BeanDesc.GENERATED_PREFIX + BeanNaming.getPackageName(getEjbClass().getName()); - derivedBeanName = new String("JOnAS" + getIdentifier() + "Bean"); - fullDerivedBeanName = BeanNaming.getClassName(packageName, derivedBeanName); - - // automatic-pk - // used of specific tag automatic-pk is deprecated so nothing in this code was about jdbc-mapping - String primkeytype = ent.getPrimKeyClass(); - if ((jm != null) && (jm.getAutomaticPk() != null)) { - // optional parameter automatic-pk - jdbcAutomaticPk = jm.getAutomaticPk().equalsIgnoreCase("true"); - if (jdbcAutomaticPk && pkObjectType) { - // You can't use specific tag 'automatic-pk' with prim-key-type=java.lang.Object - throw new DeploymentDescException("Don't use specific tag 'automatic-pk' with prim-key-type=java.lang.Object in bean " + ent.getEjbName()); - } - } - if (pkObjectType && ent.getPrimkeyField() != null) { - throw new DeploymentDescException("'prim-key-field' must not be set if your prim-key-type was java.lang.Object in bean " + ent.getEjbName()); - } - if (this.isAutomaticPk()) { // Check if prim-key-class type is Integer or java.lang.Object - if (!(primkeytype.equalsIgnoreCase("java.lang.Integer") - || primkeytype.equalsIgnoreCase("Integer"))) { - throw new DeploymentDescException("You must used java.lang.Integer type for your auto-generate primary key field in bean " + ent.getEjbName()); - } - } - } - - /** - * Get descriptor for a given field name - * Used by GenIC - * @param fieldName Name of the field - * @return Descriptor for the given field or null - */ - public FieldDesc getCmpFieldDesc(String fieldName) { - return (FieldDesc) fieldDesc.get(fieldName); - } - - /** - * Indicate if the primary key field is only one field with a primary-key-field - * defined in the DD. - * @return true if the primary key field is only one field - * with a primary-key-field defined in the DD. - */ - public boolean hasSimplePkField() { - return primaryKeyField != null; - } - - // TODO remove this method and keep only the hasSimplePkField method - public boolean hasPrimaryKeyField() { - return hasSimplePkField(); - } - - /** - * Get the primary key field for the entity. - * @return Field for the primary key - */ - public FieldDesc getSimplePkField() { - FieldDesc fd = (FieldDesc) fieldDesc.get(getSimplePkFieldName()); - return fd; - } - - /** - * Get the primary key field name for the entity. - * @return Field for the primary key - */ - public String getSimplePkFieldName() { - if (primaryKeyField == null) { - throw new Error("No primary key field defined for bean " + this.ejbName); - } - return primaryKeyField; - } - - // TODO remove this method and keep only the getSimplePkFieldName() method - public String getPrimaryKeyFieldName() { - return getSimplePkFieldName(); - } - - /** - * Get the associated field for auto genarated pk field specify by user - * @return Name of the field where automatic pk bean is stored - */ - public String getJdbcAutomaticPkFieldName() { - return jdbcAutomaticPkFieldName; - } - - public Iterator getCmpFieldDescIterator() { - return fieldDesc.values().iterator(); - } - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - for (Iterator i = fieldDesc.keySet().iterator(); i.hasNext();) { - String f = (String) i.next(); - FieldDesc fd = (FieldDesc) fieldDesc.get(f); - ret.append("\ngetCmpFieldDesc(" + f + ")=" + fd.getClass().getName()); - ret.append(fd.toString()); - } - if (hasPrimaryKeyField()) { - ret.append("\ngetPrimaryKeyField()=" + getPrimaryKeyFieldName()); - } - return ret.toString(); - } - - /** - * factory method for field descriptors - * @return a FieldDesc. - */ - protected FieldDesc newFieldDescInstance() { - return new FieldJdbcDesc(); - } -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityDesc.java deleted file mode 100644 index 423d699f37..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityDesc.java +++ /dev/null @@ -1,434 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.lib.util.BeanNaming; - - - -import org.objectweb.util.monolog.api.BasicLevel; - - -/** - * Base class to hold meta-information related to an entity bean. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - * @author Helene Joanin: take into account ejbSelect() methods. - * @author Helene Joanin: unsetting transaction attribute set to a default value. - */ -public abstract class EntityDesc extends BeanDesc { - - - /** - * remote methods for which no transaction attribute is to be set - */ - protected static final String METHODS_REMOTE_NO_TX = ",getEJBHome,getHandle,getPrimaryKey,isIdentical,"; - - /** - * home methods for which no transaction attribute is to be set - */ - protected static final String METHODS_HOME_NO_TX = ",getEJBMetaData,getHomeHandle,"; - - /** - * This field contains the class name of the factory instanciate by the - * container. - */ - protected Class primaryKeyClass; - protected boolean reentrant; - protected int passivationTimeout = 0; - protected int inactivityTimeout = 0; - protected int deadlockTimeout = 20; // default = 20 sec. - protected int readTimeout = 15 * 60; // default = 15mn. - protected int maxWaitTime = 0; // default = 0s - protected boolean shared = false; - protected boolean prefetch = false; - protected boolean hardLimit = false; - - // Field used for pk auto-generate - protected boolean jdbcAutomaticPk = false; // first implementation with specific tag into JOnAS Descriptor file - protected boolean pkObjectType = false; // second implementation with prim-key-type=java.lang.Object (cf spec ?14.1.9.3) - - // mapping cleanup policy - public static final int CLEANUP_NONE = 0; - public static final int CLEANUP_CREATE = 1; - public static final int CLEANUP_REMOVEDATA = 2; - public static final int CLEANUP_REMOVEALL = 3; - protected int cleanup = CLEANUP_CREATE; - - // lock policy - public static final int LOCK_CONTAINER_READ_UNCOMMITTED = 0; - public static final int LOCK_CONTAINER_SERIALIZED = 1; - public static final int LOCK_CONTAINER_READ_COMMITTED = 2; - public static final int LOCK_DATABASE = 3; - public static final int LOCK_READ_ONLY = 4; - public static final int LOCK_CONTAINER_READ_WRITE = 5; - public static final int LOCK_CONTAINER_SERIALIZED_TRANSACTED = 6; - protected int lockPolicy = LOCK_CONTAINER_SERIALIZED; - - /** - * constructor to be used by parent node - */ - public EntityDesc(ClassLoader classLoader, - Entity ent, - AssemblyDescriptor asd, - JonasEntity jEnt, - JLinkedList jMDRList, - String fileName) - throws DeploymentDescException { - - super(classLoader, ent, jEnt, asd, jMDRList, fileName); - - // primary Key class - try { - // Test for automatic PK - if (ent.getPrimKeyClass().equalsIgnoreCase("Object") || ent.getPrimKeyClass().equalsIgnoreCase("java.lang.Object")) { - primaryKeyClass = classLoader.loadClass("java.lang.Integer"); - pkObjectType = true; - } - else - primaryKeyClass = classLoader.loadClass(ent.getPrimKeyClass()); - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("Primary Key class not found for bean " + this.ejbName, e); - } - - // passivation timeout - if (jEnt.getPassivationTimeout() != null) { - String tstr = jEnt.getPassivationTimeout(); - Integer tval = new Integer(tstr); - passivationTimeout = tval.intValue(); - } - - // inactivity timeout - if (jEnt.getInactivityTimeout() != null) { - String tstr = jEnt.getInactivityTimeout(); - Integer tval = new Integer(tstr); - inactivityTimeout = tval.intValue(); - } - - // deadlock timeout - if (jEnt.getDeadlockTimeout() != null) { - String tstr = jEnt.getDeadlockTimeout(); - Integer tval = new Integer(tstr); - deadlockTimeout = tval.intValue(); - } - - // read timeout - if (jEnt.getReadTimeout() != null) { - String tstr = jEnt.getReadTimeout(); - Integer tval = new Integer(tstr); - readTimeout = tval.intValue(); - } - - // max wait time - if (jEnt.getMaxWaitTime() != null) { - String tstr = jEnt.getMaxWaitTime(); - Integer tval = new Integer(tstr); - maxWaitTime = tval.intValue(); - } - - // reentrant - if (ent.getReentrant().equalsIgnoreCase("True")) { - reentrant = true; - } else if (ent.getReentrant().equalsIgnoreCase("False")) { - reentrant = false; - } else { - throw new DeploymentDescException("Invalid reentrant value for bean " + this.ejbName); - } - - // prefetch - if (jEnt.getPrefetch() != null) { - if (jEnt.getPrefetch().equalsIgnoreCase("True")) { - prefetch = true; - } else if (jEnt.getPrefetch().equalsIgnoreCase("False")) { - prefetch = false; - } else { - throw new DeploymentDescException("Invalid prefetch value for bean " + this.ejbName); - } - } - - // hard limit - if (jEnt.getHardLimit() != null) { - if (jEnt.getHardLimit().equalsIgnoreCase("True")) { - hardLimit = true; - } else if (jEnt.getPrefetch().equalsIgnoreCase("False")) { - hardLimit = false; - } else { - throw new DeploymentDescException("Invalid hard-limit value for bean " + this.ejbName); - } - } - - // min-pool-size - if (jEnt.getMinPoolSize() != null) { - String tstr = jEnt.getMinPoolSize(); - Integer tval = new Integer(tstr); - poolMin = tval.intValue(); - } - - // max-cache-size - if (jEnt.getMaxCacheSize() != null) { - String tstr = jEnt.getMaxCacheSize(); - Integer tval = new Integer(tstr); - cacheMax = tval.intValue(); - } - - // lock policy. - // Set default value for shared, depending on policy. - if (jEnt.getLockPolicy() != null) { - String tstr = jEnt.getLockPolicy(); - if (tstr.equals("container-serialized")) { - lockPolicy = LOCK_CONTAINER_SERIALIZED; - shared = false; - } else if (tstr.equals("container-serialized-transacted")) { - lockPolicy = LOCK_CONTAINER_SERIALIZED_TRANSACTED; - shared = false; - } else if (tstr.equals("container-read-committed")) { - lockPolicy = LOCK_CONTAINER_READ_COMMITTED; - shared = true; - } else if (tstr.equals("container-read-uncommitted")) { - lockPolicy = LOCK_CONTAINER_READ_UNCOMMITTED; - shared = false; - } else if (tstr.equals("database")) { - lockPolicy = LOCK_DATABASE; - shared = true; - } else if (tstr.equals("read-only")) { - lockPolicy = LOCK_READ_ONLY; - shared = true; - } else if (tstr.equals("container-read-write")) { - lockPolicy = LOCK_CONTAINER_READ_WRITE; - shared = false; - } else { - throw new DeploymentDescException("Invalid lock-policy value for bean " + jEnt.getEjbName()); - } - } - - // shared - if (jEnt.getShared() != null) { - if (jEnt.getShared().equalsIgnoreCase("True")) { - shared = true; - } else if (jEnt.getShared().equalsIgnoreCase("False")) { - shared = false; - } else { - throw new DeploymentDescException("Invalid shared value for bean " + this.ejbName); - } - } - - // cleanup policy. Possible values are : - // create = create table only if does not exist yet. (default) - // none = nothing is done (not implemented) - // removeall = drop table and recreate it. - // removedata = remove all data if exist, create table if does not exist. - if (jEnt.getCleanup() != null) { - String tstr = jEnt.getCleanup(); - if (tstr.equals("create")) { - cleanup = CLEANUP_CREATE; - } else if (tstr.equals("none")) { - cleanup = CLEANUP_NONE; - } else if (tstr.equals("removeall")) { - cleanup = CLEANUP_REMOVEALL; - } else if (tstr.equals("removedata")) { - cleanup = CLEANUP_REMOVEDATA; - } else { - throw new DeploymentDescException("Invalid cleanup value for bean " + jEnt.getEjbName()); - } - } - - // cache TxAttribute for ejbTimeout - for (Iterator i = getMethodDescIterator(); i.hasNext();) { - MethodDesc methd = (MethodDesc) i.next(); - if (methd.getMethod().getName().equals("ejbTimeout")) { - timerTxAttribute = methd.getTxAttribute(); - ejbTimeoutSignature = BeanNaming.getSignature(getEjbName(), methd.getMethod()); - } - } - } - - /** - * @return the cleanup policy for this bean - */ - public int getCleanupPolicy() { - return cleanup; - } - - /** - * @return the lock policy for this bean - */ - public int getLockPolicy() { - return lockPolicy; - } - - /** - * check that trans-attribute is valid for bean - */ - protected void checkTxAttribute(MethodDesc md) throws DeploymentDescException { - java.lang.reflect.Method m = md.getMethod(); - if (md.getTxAttribute() == MethodDesc.TX_NOT_SET) { - // exclude method list for home interface - if (javax.ejb.EJBHome.class.isAssignableFrom(m.getDeclaringClass()) - && (METHODS_HOME_NO_TX.indexOf("," + m.getName() + ",") != -1)) { - return; - } - // exclude method list for remote interface - if (javax.ejb.EJBObject.class.isAssignableFrom(m.getDeclaringClass()) - && (METHODS_REMOTE_NO_TX.indexOf("," + m.getName() + ",") != -1)) { - return; - } - // exclude ejbSelect methods - if (md.isEjbSelect()) { - return; - } - // trans-attribute not set ! - // trace a warning and set the tx-attribute with the default value - logger.log(BasicLevel.WARN, - "trans-attribute missing for method " - + m.toString() + " in entity bean " - + getEjbName() - + " (set to the default value " - + MethodDesc.TX_STR_DEFAULT_VALUE - + ")"); - md.setTxAttribute(MethodDesc.TX_STR_DEFAULT_VALUE); - } - } - - /** - * Get the passivation timeout value - */ - public int getPassivationTimeout() { - return passivationTimeout; - } - - /** - * Get the inactivity timeout value - */ - public int getInactivityTimeout() { - return inactivityTimeout; - } - - /** - * Get the deadlock timeout value - */ - public int getDeadlockTimeout() { - return deadlockTimeout; - } - - /** - * Get the read timeout value - */ - public int getReadTimeout() { - return readTimeout; - } - - /** - * Get the max wait time - */ - public int getMaxWaitTime() { - return maxWaitTime; - } - - /** - * Get the entity's primary key class. - * @return Class for the primary key - */ - public Class getPrimaryKeyClass() { - return primaryKeyClass; - } - - /** - * Assessor for reentrant entity bean - * @return true for reentrant entity bean - */ - public boolean isReentrant() { - return reentrant; - } - - /** - * @return true for shared entity bean - */ - public boolean isShared() { - return shared; - } - - /** - * @return true for prefetch entity bean - */ - public boolean isPrefetch() { - return prefetch; - } - - /** - * @return true for hard-limit entity bean - */ - public boolean isHardLimit() { - return hardLimit; - } - - /** - * Assessor for existence of automatic-pk element to True value - * @param field public field of the bean class - * @return true if automatic-pk element value is true else otherwise false - */ - public boolean isAutomaticPk() { - return jdbcAutomaticPk; - } - - /** - * Assessor for primary key undefined (declare like java.lang.Object type) - * @param field public field of the bean class - * @return true if primary key is undefined (java.lang.Object type) - */ - public boolean isUndefinedPK() { - return pkObjectType; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\nPrimaryKeyClass() =" + getPrimaryKeyClass().toString()); - ret.append("\nReentrant() =" + isReentrant()); - ret.append("\nPassivationTimeout() =" + getPassivationTimeout()); - ret.append("\nInactivityTimeout() =" + getInactivityTimeout()); - ret.append("\nDeadlockTimeout() =" + getDeadlockTimeout()); - ret.append("\nReadTimeout() =" + getReadTimeout()); - ret.append("\nMaxWaitTime() =" + getMaxWaitTime()); - ret.append("\nShared() =" + isShared()); - ret.append("\nPoolMin() =" + getPoolMin()); - ret.append("\nCacheMax() =" + getCacheMax()); - return ret.toString(); - } - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp1Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp1Desc.java deleted file mode 100644 index 3eb012527a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp1Desc.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.CmpFieldJdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.FinderMethodJdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.JdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; -import org.ow2.jonas.deployment.ejb.xml.JonasMethod; - - -/** - * Class to hold meta-information related to an CMP v1 entity bean with jdbc data store. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin -*/ -// TODO : fill mapping information with defaults values (same as CMP 2) -// to accept to have optional mapping information in the jonas-ejb-jar.xml. -// TODO : Review this class, many methods are common with EntityJdbcCmp2yDesc - -public class EntityJdbcCmp1Desc extends EntityCmp1Desc { - - - String jdbcTableName; - String datasourceJndiName; - /** - * constructor: called when the DeploymentDescriptor is read. - * Currently, called by both GenIC and createContainer. - */ - public EntityJdbcCmp1Desc(ClassLoader classLoader, Entity ent, - AssemblyDescriptor asd, JonasEntity jEnt, - JLinkedList jMDRList, String fileName) - throws DeploymentDescException { - - super(classLoader, ent, asd, jEnt, jMDRList, fileName); - - // check for jdbcMapping - JdbcMapping jm = jEnt.getJdbcMapping(); - if (jm == null) { - throw new DeploymentDescException("jdbc-mapping missing for bean " + ent.getEjbName()); - } - - // populate field descriptor map with jdbc information - for (Iterator i = jm.getCmpFieldJdbcMappingList().iterator(); i.hasNext(); ) { - CmpFieldJdbcMapping cmpFieldJdbcMapping = (CmpFieldJdbcMapping) i.next(); - String fn = cmpFieldJdbcMapping.getFieldName(); - FieldDesc f = (FieldDesc) fieldDesc.get(fn); - if (f == null) { - throw new DeploymentDescException("field-name " + fn - + " listed in cmp-field-jdbc-mapping is not of cmp-field of bean " + ent.getEjbName()); - } - ((FieldJdbcDesc) f).setJdbcFieldName(cmpFieldJdbcMapping.getJdbcFieldName()); - } - // check that all cmp fields are jdbc - for (Iterator j = fieldDesc.values().iterator(); j.hasNext();) { - FieldJdbcDesc fd = (FieldJdbcDesc) j.next(); - if (fd.getJdbcFieldName() == null) { - throw new DeploymentDescException("field-name " + fd.getName() - + " is missing in cmp-field-jdbc-mapping for bean " + ent.getEjbName()); - } - } - - // populate method descriptor map with jdbc information - for (Iterator i = jm.getFinderMethodJdbcMappingList().iterator(); i.hasNext(); ) { - FinderMethodJdbcMapping fmj = ((FinderMethodJdbcMapping) i.next()); - JonasMethod m = fmj.getJonasMethod(); - for (Iterator j = getMethodDescIterator(); j.hasNext();) { - MethodJdbcCmp1Desc md = (MethodJdbcCmp1Desc) j.next(); - int matchStatus = md.matchPattern(null, m.getMethodName(), m.getMethodParams()); - md.overwriteJdbcWhereClause(fmj.getJdbcWhereClause(), matchStatus); - } - } - - // jndi name of the datasource - datasourceJndiName = jm.getJndiName(); - - // table name - jdbcTableName = jm.getJdbcTableName(); - - // optionnal parameter automatic-pk - if (jm.getAutomaticPk() != null) { - jdbcAutomaticPk = jm.getAutomaticPk().equalsIgnoreCase("true"); - } - } - - - /** - * Get the datasource jndi name - * @return String representation of the jndi name - */ - public String getDatasourceJndiName() { - return datasourceJndiName; - } - - /** - * Get jdbc specific descriptor for a given field. - * Used by GenIC - * @param field of the bean class - * @return Descriptor for the given field - */ - public FieldJdbcDesc getFieldJdbcDesc(Field field) { - return (FieldJdbcDesc) super.getCmpFieldDesc(field); - } - - - /** - * Get the associated DataBase table name in case of container persistence type. - * Used by GenIC (This information is JOnAS specific). - * @return Name of the database table where entity bean is stored - */ - public String getJdbcTableName() { - return jdbcTableName; - } - - /** - * factory method for method descriptors - */ - protected MethodDesc newMethodDescInstance(Method meth, Class classDef, int index) { - return new MethodJdbcCmp1Desc(this, meth, classDef, index); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\ngetDatasourceJndiName()=" + getDatasourceJndiName()); - ret.append("\ngetJdbcTableName()=" + getJdbcTableName()); - return ret.toString(); - } - - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp2Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp2Desc.java deleted file mode 100644 index 132d6cec81..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/EntityJdbcCmp2Desc.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.util.Iterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.CmpFieldJdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.Entity; -import org.ow2.jonas.deployment.ejb.xml.JdbcMapping; -import org.ow2.jonas.deployment.ejb.xml.JonasEntity; - -import org.ow2.jonas.deployment.ejb.xml.*; - -/** - * Class to hold meta-information related to an CMP v2 entity bean with jdbc data store. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin on May 2003: code cleanup - * @author Helene Joanin on May 2003: complement for legacy first version - */ - -// TODO : Review this class, many methods are common with EntityJdbcCmp1Desc - -public class EntityJdbcCmp2Desc extends EntityCmp2Desc { - - protected String dsname; - protected String jdbcTableName = null; - - /** - * constructor: called when the DeploymentDescriptor is read. - * Currently, called by both GenIC and createContainer. - */ - public EntityJdbcCmp2Desc(ClassLoader classLoader, - Entity ent, - AssemblyDescriptor asd, - JonasEntity jEnt, - DeploymentDescEjb2 dc2d, - JLinkedList jMDRList, - String fileName) - throws DeploymentDescException { - - super(classLoader, ent, asd, jEnt, dc2d, jMDRList, fileName); - - // check for jdbcMapping - JdbcMapping jm = jEnt.getJdbcMapping(); - if (jm == null) { - throw new DeploymentDescException("jdbc-mapping missing for bean " + ent.getEjbName()); - } - - // jndi name of the datasource - dsname = jm.getJndiName(); - - // jdbc table name - if (jm.getJdbcTableName() != null) { - if (jm.getJdbcTableName().length() != 0) { - jdbcTableName = jm.getJdbcTableName(); - } - } - if (jdbcTableName == null) { - // Default value - jdbcTableName = getAbstractSchemaName().toUpperCase() + "_"; - } - - // Default mapping information for cmp fields - for (Iterator i = fieldDesc.keySet().iterator();i.hasNext();) { - String fn = (String) i.next(); - ((FieldJdbcDesc)(fieldDesc.get(fn))).setJdbcFieldName(fn + "_"); - } - - // mapping information for cmp fields from jonas DD - for (Iterator i = jm.getCmpFieldJdbcMappingList().iterator();i.hasNext();) { - CmpFieldJdbcMapping fm = (CmpFieldJdbcMapping) i.next(); - String fn = fm.getFieldName(); - String cn = fm.getJdbcFieldName(); - String ct = null; - if (fm.getSqlType() != null) { - ct = fm.getSqlType(); - } - FieldJdbcDesc fdesc = (FieldJdbcDesc) fieldDesc.get(fn); - if (fdesc == null) { - throw new DeploymentDescException("field-name " + fn - + " listed in cmp-field-jdbc-mapping is not of cmp-field of bean " + ent.getEjbName()); - } - fdesc.setJdbcFieldName(cn); - if (ct != null) { - fdesc.setSqlType(ct); - } - } - // Specific mapping for primary key auto generated (type = java.lang.Object) if tag is specified - if (isUndefinedPK() && this.getJdbcAutomaticPkFieldName()!= null) { - ((FieldJdbcDesc)(fieldDesc.get("JONASAUTOPKFIELD"))).setJdbcFieldName(this.getJdbcAutomaticPkFieldName()); - } - } - - /** - * field descriptor factory method - */ - protected FieldDesc newFieldDescInstance() { - return new FieldJdbcDesc(); - } - - /** - * Get the datasource jndi name - * @return String representation of the jndi name - */ - public String getDatasourceJndiName() { - return dsname; - } - - /** - * Get the associated DataBase table name. - * @return Name of the database table where entity bean is stored - */ - public String getJdbcTableName() { - return jdbcTableName; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\ngetDatasourceJndiName()=" + getDatasourceJndiName()); - ret.append("\ngetJdbcTableName()=" + getJdbcTableName()); - return ret.toString(); - } - - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ExcludeListDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ExcludeListDesc.java deleted file mode 100644 index 0922e5ad81..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ExcludeListDesc.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.ejb.xml.ExcludeList; - -/** - * Defines a ExcludeListDesc class for the management of - * EJBMEthodPermissions in JACC - * @author Florent Benoit : Initial developer - */ -public class ExcludeListDesc extends CommonMethodDesc { - - /** - * Constructor for ExcludeListDesc - * @param excludeList excludelist which contains xml content - */ - public ExcludeListDesc(ExcludeList excludeList) { - super(excludeList.getMethodList()); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldDesc.java deleted file mode 100644 index cc996cf905..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldDesc.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -/** - * Class to hold meta-information related to a cmp-field - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin on May 2003: code cleanup - */ -public class FieldDesc { - - protected String fieldName = null; - protected boolean pkField = false; - protected Class fieldType = null; - - - /** - * Assessor method for primary key field - * @return true if field is a primary key - */ - public boolean isPrimaryKey() { - return pkField; - } - - /** - * Field name getter - * @return field name - */ - public String getName() { - return fieldName; - } - - /** - * field name setter - */ - protected void setName(String fieldName) { - this.fieldName = fieldName; - } - - /** - * primary key flag setter - */ - protected void setPrimaryKey(boolean pkField) { - this.pkField = pkField; - } - - /** - * field type getter - */ - public Class getFieldType() { - return fieldType; - } - - /** - * field type setter - */ - protected void setFieldType(Class fieldType) { - this.fieldType = fieldType; - } - - /** - * get the setter method name for a given field - */ - public static String getSetterName(String fieldName) { - return "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); - } - - /** - * get the getter method name for a given field - */ - public static String getGetterName(String fieldName) { - return "get" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetName() = " + getName()); - ret.append("\ngetFieldType() = " + getFieldType()); - ret.append("\nisPrimaryKey() = " + isPrimaryKey()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldJdbcDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldJdbcDesc.java deleted file mode 100644 index dc8536eb68..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/FieldJdbcDesc.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -/** - * Class to hold meta-information related to a cmp-field of a bean with jdbc based store - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin on May 2003: code cleanup - * @author Helene Joanin on May 2003: add sqlType. - */ -// TODO : Remove this class and merge it with the FieldDesc class. - -public class FieldJdbcDesc extends FieldDesc { - - - protected String jdbcFieldName = null; - protected String sqlType = null; - - /** - * Get database field name in the table where bean is stored - * @return Name of the field in the database - */ - public String getJdbcFieldName() { - return jdbcFieldName; - } - - /** - * Jdbc field name setter. - */ - protected void setJdbcFieldName(String jdbcFieldName) { - this.jdbcFieldName = jdbcFieldName; - } - - /** - * Is the field sql-type is defined. - * @return true if the sql-type of the field is defined. - */ - public boolean hasSqlType() { - return (sqlType != null); - } - - /** - * Get field sql-type - * @return sql-type of the field in the database - */ - public String getSqlType() { - return sqlType; - } - - /** - * Field sql-type setter. - */ - protected void setSqlType(String st) { - sqlType = st; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\ngetJdbcFieldName()=" + getJdbcFieldName()); - if (hasSqlType()) { - ret.append("\ngetSqlType()=" + getSqlType()); - } - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarDTDs.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarDTDs.java deleted file mode 100644 index 5b1986d97b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarDTDs.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - - -import org.ow2.jonas.deployment.common.CommonsDTDs; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of DTDs for jonas-ejb-jar.xml. - * @author Philippe Coq - */ -public class JonasEjbjarDTDs extends CommonsDTDs { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(JonasEjbjarDTDs.class); - - /** - * List of jonas-ejb-jar dtds. - */ - private static final String[] JONAS_EJBJAR_DTDS = new String[] { - PACKAGE + "jonas-ejb-jar_2_4.dtd", - PACKAGE + "jonas-ejb-jar_2_5.dtd", - PACKAGE + "jonas-ejb-jar_3_0.dtd", - PACKAGE + "jonas-ejb-jar_3_2.dtd", - PACKAGE + "jonas-ejb-jar_3_3.dtd", - PACKAGE + "jonas-ejb-jar_3_3_1.dtd", - PACKAGE + "jonas-ejb-jar_3_3_2.dtd", - }; - - /** - * List of jonas-ejb-jar publicId. - */ - private static final String[] JONAS_EJBJAR_DTDS_PUBLIC_ID = new String[] { - "-//ObjectWeb//DTD JOnAS 2.4//EN", - "-//ObjectWeb//DTD JOnAS 2.5//EN", - "-//ObjectWeb//DTD JOnAS 3.0//EN", - "-//ObjectWeb//DTD JOnAS 3.2//EN", - "-//ObjectWeb//DTD JOnAS 3.3//EN", - "-//ObjectWeb//DTD JOnAS 3.3.1//EN", - "-//ObjectWeb//DTD JOnAS 3.3.2//EN", - }; - - - - - /** - * Build a new object for web.xml DTDs handling. - */ - public JonasEjbjarDTDs() { - super(); - addMapping(JONAS_EJBJAR_DTDS, JONAS_EJBJAR_DTDS_PUBLIC_ID); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarSchemas.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarSchemas.java deleted file mode 100644 index 7f8cef1f8b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/JonasEjbjarSchemas.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Philippe Coq - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.common.CommonsSchemas; -import org.ow2.jonas.deployment.common.util.ResourceHelper; - -/** - * This class defines the declarations of Schemas for jonas-ejb-jar.xml. - * @author Philippe Coq - */ -public class JonasEjbjarSchemas extends CommonsSchemas { - - /** - * Package name. - */ - private static final String PACKAGE = ResourceHelper.getResourcePackage(JonasEjbjarSchemas.class); - - /** - * List of schemas used for jonas-ejb-jar.xml. - */ - private static final String[] JONAS_EJBJAR_SCHEMAS = new String[] { - PACKAGE + "jonas-ejb-jar_4_0.xsd", - PACKAGE + "jonas-ejb-jar_4_1.xsd", - PACKAGE + "jonas-ejb-jar_4_1_2.xsd", - PACKAGE + "jonas-ejb-jar_4_1_4.xsd", - PACKAGE + "jonas-ejb-jar_4_2.xsd", - PACKAGE + "jonas-ejb-jar_4_3.xsd", - PACKAGE + "jonas-ejb-jar_4_6.xsd", - PACKAGE + "jonas-ejb-jar_4_7.xsd", - PACKAGE + "jonas-ejb-jar_4_8.xsd", - PACKAGE + "jonas-ejb-jar_4_10.xsd", - PACKAGE + "jonas-ejb-jar_5_0.xsd", - PACKAGE + "jonas-ejb-jar_5_1.xsd", - PACKAGE + "jonas-ejb-jar_5_2.xsd" - }; - - - /** - * Build a new object for Schemas handling. - */ - public JonasEjbjarSchemas() { - super(); - // Required ejb schemas - addSchemas(EjbjarSchemas.EJBJAR_SCHEMAS); - addSchemas(JONAS_EJBJAR_SCHEMAS); - } - - - /** - * @return Returns the last Schema - */ - public static String getLastSchema() { - return getLastSchema(JONAS_EJBJAR_SCHEMAS, PACKAGE); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MessageDrivenDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MessageDrivenDesc.java deleted file mode 100644 index 9e195bd122..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MessageDrivenDesc.java +++ /dev/null @@ -1,467 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.ActivationConfig; -import org.ow2.jonas.deployment.ejb.xml.ActivationConfigProperty; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.JonasMessageDriven; -import org.ow2.jonas.deployment.ejb.xml.MessageDriven; -import org.ow2.jonas.deployment.ejb.xml.MessageDrivenDestination; -import org.ow2.jonas.lib.util.BeanNaming; - - - - - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Class to hold meta-information related to a message driven bean - * - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class MessageDrivenDesc extends BeanDesc { - - public final static int AUTO_ACKNOWLEDGE = 1; - public final static int DUPS_OK_ACKNOWLEDGE = 2; - protected static final String[] ACKMODE = {null, "AUTO_ACKNOWLEDGE", - "DUPS_OK_ACKNOWLEDGE"}; - - public final static int SUBS_DURABLE = 1; - public final static int SUBS_NON_DURABLE = 2; - protected static final String[] SUBS_DURABILITY = {null, - "SUBSCRIPTION_DURABLE", "SUBSCRIPTION_NON_DURABLE"}; - - public final static int DEFAULT_MAX_MESSAGES = 1; - - protected String selector = null; - protected int acknowledgeMode; - protected int subscriptionDurability = SUBS_NON_DURABLE; - protected Class destinationType = null; - protected int txAttribute = MethodDesc.TX_NOT_SET; // for onMessage method - protected boolean isTopicDestination = false; - protected int transactionType; - protected String destinationJndiName = null; - protected String destinationLink = null; - - // Used with JMS Rars - protected String destination = null; - - protected ActivationConfigDesc mdActivationConfigDesc = null; - - protected ActivationConfigDesc mdJonasActivationConfigDesc = null; - - /** - * package protected constructor used by API - */ - MessageDrivenDesc(ClassLoader classLoader, MessageDriven md, - AssemblyDescriptor asd, JonasMessageDriven jMd, - JLinkedList jMDRList, String fileName) - throws DeploymentDescException { - - super(classLoader, md, jMd, asd, jMDRList, fileName); - mdActivationConfigDesc = new ActivationConfigDesc(md.getActivationConfig()); - mdJonasActivationConfigDesc = new ActivationConfigDesc(jMd.getActivationConfig()); - - // min-pool-size - if (jMd.getMinPoolSize() != null) { - String tstr = jMd.getMinPoolSize(); - Integer tval = new Integer(tstr); - poolMin = tval.intValue(); - } - - // max-cache-size - if (jMd.getMaxCacheSize() != null) { - String tstr = jMd.getMaxCacheSize(); - Integer tval = new Integer(tstr); - cacheMax = tval.intValue(); - } - - // necessary check - if (md.getEjbName() == null) { - throw new Error("No ejb-name specified for a message-driven bean"); - } - - // transaction-type - if (md.getTransactionType().equals("Bean")) { - transactionType = BEAN_TRANSACTION_TYPE; - } else if (md.getTransactionType().equals("Container")) { - transactionType = CONTAINER_TRANSACTION_TYPE; - } else { - throw new DeploymentDescException( - "Invalid transaction-type content for ejb-name " + ejbName); - } - - // message driven destination - if (jMd.getJonasMessageDrivenDestination() != null) { - destinationJndiName = jMd.getJonasMessageDrivenDestination() - .getJndiName(); - } - - // Set values can be from old 2.0 way, ActivationConfig in std xml, - // or ActivationConfig in jonas xml - - // message selector - selector = md.getMessageSelector(); - // acknowledge mode - if (md.getAcknowledgeMode() == null) { - acknowledgeMode = AUTO_ACKNOWLEDGE; - } else { - if (md.getAcknowledgeMode().equals("Auto-acknowledge")) { - acknowledgeMode = AUTO_ACKNOWLEDGE; - } else if (md.getAcknowledgeMode().equals("Dups-ok-acknowledge")) { - acknowledgeMode = DUPS_OK_ACKNOWLEDGE; - } else { - throw new DeploymentDescException("Invalid acknowledge-mode content for ejb-name " + ejbName); - } - } - MessageDrivenDestination d = md.getMessageDrivenDestination(); - if (d != null && d.getDestinationType() != null) { - if (d.getDestinationType().equals("javax.jms.Queue")) { - destinationType = javax.jms.Queue.class; - } else if (d.getDestinationType().equals("javax.jms.Topic")) { - destinationType = javax.jms.Topic.class; - isTopicDestination = true; - } else { - try { - destinationType = classLoader.loadClass(d.getDestinationType()); - } catch (Exception ex) { - throw new DeploymentDescException("Invalid destination-type for ejb-name " + ejbName); - } - } - if (d.getSubscriptionDurability() != null) { - if (destinationType.equals(javax.jms.Queue.class)) { - throw new DeploymentDescException("subscription-durability of message-driven-destination for ejb-name " - + ejbName + " defined"); - } - if (d.getSubscriptionDurability().equals("Durable")) { - subscriptionDurability = SUBS_DURABLE; - } else if (d.getSubscriptionDurability().equals("NonDurable")) { - subscriptionDurability = SUBS_NON_DURABLE; - } else { - throw new DeploymentDescException("Invalid subscription-durability content for ejb-name " + ejbName); - } - } else { - // non-durable subscription default value for topic - if (destinationType.equals(javax.jms.Topic.class)) { - subscriptionDurability = SUBS_NON_DURABLE; - } - } - - } - - destinationLink = md.getMessageDestinationLink(); - - if( mdActivationConfigDesc != null) { - configureAC(mdActivationConfigDesc, classLoader); - } - - if( mdJonasActivationConfigDesc != null) { - configureAC(mdJonasActivationConfigDesc, classLoader); - } - - if (destinationJndiName == null) { - throw new Error("No destination specified for message-driven bean " + ejbName); - } - - // cache TxAttribute for onMessage and ejbTimeout - for (Iterator i = getMethodDescIterator(); i.hasNext();) { - MethodDesc methd = (MethodDesc) i.next(); - if (methd.getMethod().getName().equals("onMessage")) { - txAttribute = methd.getTxAttribute(); - } - if (methd.getMethod().getName().equals("ejbTimeout")) { - timerTxAttribute = methd.getTxAttribute(); - ejbTimeoutSignature = BeanNaming.getSignature(getEjbName(), methd.getMethod()); - } - } - } - - /** - * Get transaction management type of the message driven. - * - * @return transaction type value within - * BEAN_TRANSACTION_TYPE,CONTAINER_TRANSACTION_TYPE - */ - public int getTransactionType() { - return transactionType; - } - - /** - * Return the transaction attribute for the onMessage method of Message - * driven bean - * - */ - public int getTxAttribute() { - return txAttribute; - } - - /** - * @return true if BEAN_TRANSACTION_TYPE - */ - public boolean isBeanManagedTransaction() { - return (transactionType == BeanDesc.BEAN_TRANSACTION_TYPE); - } - - /** - * Get the the destination name of the message driven bean. - * @return name of the destination of the message driven bean. - */ - public String getDestination() { - return(destination); - } - - /** - * Get the the destination JNDI name of the message driven bean. - * - * @return JNDI name of the destination of the message driven bean. - */ - public String getDestinationJndiName() { - return (destinationJndiName); - } - - /** - * Get the the destination link name of the message driven bean. - * - * @return link name of the destination of the message driven bean. - */ - public String getDestinationLink() { - return (destinationLink); - } - - /** - * Get the the destination type of the message driven bean. - * - * @return type of the destination of the message driven bean. - */ - public Class getDestinationType() { - return (destinationType); - } - - /** - * Return true if it is a Topic destination - */ - public boolean isTopicDestination() { - return (isTopicDestination); - } - - /** - * Assessor for existence of a message-selector for the message driven bean - * - * @return true if message-selector is defined for the bean - */ - public boolean hasSelector() { - return (selector != null); - } - - /** - * Get the message-selector value of the message driven bean. - * - * @return value of the message selector return null if no selector - */ - public String getSelector() { - return (selector); - } - - /** - * Get the acknowledge-mode of the message driven bean. - * - * @return acknowledge-mode value within AUTO_ACKNOWLEDGE, - * DUPS_OK_ACKNOWLEDGE - */ - public int getAcknowledgeMode() { - return (acknowledgeMode); - } - - /** - * Get the the durability of the subscription of the message driven bean. - * - * @return durability of the subscription value within SUBS_DURABLE, - * SUBS_NON_DURABLE - */ - public int getSubscriptionDurability() { - return (subscriptionDurability); - } - - public boolean isSubscriptionDurable() { - return (subscriptionDurability == SUBS_DURABLE); - } - - /** - * Return true if tx attribute for onMessage is Required - */ - public boolean isRequired() { - return (txAttribute == MethodDesc.TX_REQUIRED); - } - - /** - * @return the maximum number of messages that can be assigned to a server - * session at one time. will be configurable in the future - */ - public int getMaxMessages() { - return DEFAULT_MAX_MESSAGES; - } - - /** - * check that trans-attribute is valid for bean - */ - protected void checkTxAttribute(MethodDesc md) - throws DeploymentDescException { - java.lang.reflect.Method m = md.getMethod(); - if (getTransactionType() == CONTAINER_TRANSACTION_TYPE) { - if (md.getTxAttribute() == MethodDesc.TX_NOT_SET) { - // trans-attribute not set ! - // trace a warning and set the tx-attribute with the default value - logger.log(BasicLevel.WARN, - "trans-attribute missing for method " - + m.toString() + " in message driven bean " - + getEjbName() - + " (set to the default value " - + MethodDesc.TX_STR_DEFAULT_VALUE_4_MDB - + ")"); - md.setTxAttribute(MethodDesc.TX_STR_DEFAULT_VALUE_4_MDB); - } - if ((md.getTxAttribute() != MethodDesc.TX_REQUIRED) - && (md.getTxAttribute() != MethodDesc.TX_NOT_SUPPORTED)) { - if (!"ejbTimeout".equals(md.getMethod().getName())) { - throw new DeploymentDescException(md.getTxAttributeName() - + " is not a valid trans-attribute for method " - + m.toString() + " in message driven bean " - + getEjbName()); - } - } - } else { - if (md.getTxAttribute() != MethodDesc.TX_NOT_SET) { - throw new DeploymentDescException( - "trans-attribute for message driven bean " - + getEjbName() - + " must not be defined (transaction bean managed)"); - } - } - } - - /** - * Check that the message diven bean descriptor is valid - * - * @exception DeploymentDescException - * thrown for non-valid bean - */ - public void check() throws DeploymentDescException { - super.check(); - } - - /** - * String representation of the object for test purpose - * - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\ngetTransactionType()=" + TRANS[getTransactionType()]); - if (hasSelector()) { - ret.append("\ngetSelector()=\"" + getSelector() + "\""); - } - ret.append("\ngetAcknowledgeMode()=" + ACKMODE[getAcknowledgeMode()]); - if (getDestinationType() != null) { - ret.append("\ngetDestinationType()=" - + getDestinationType().getName()); - } - ret.append("\ngetSubscriptionDurability()=" - + SUBS_DURABILITY[getSubscriptionDurability()]); - ret.append("\ngetDestinationJndiName()=" + getDestinationJndiName()); - return ret.toString(); - } - - - /** - * @return the MessageDriven ActivationConfigDesc object - */ - public ActivationConfigDesc getMdActivationConfigDesc() { - return mdActivationConfigDesc; - } - - /** - * @return the JOnAS MessageDriven ActivationConfigDesc object - */ - public ActivationConfigDesc getJonasMdActivationConfigDesc() { - return mdJonasActivationConfigDesc; - } - - private void configureAC(ActivationConfigDesc ac, ClassLoader curLoader) throws DeploymentDescException{ - try { - List acpl = ac.getActivationConfigPropertyList(); - for (ListIterator lit = acpl.listIterator();lit.hasNext();) { - ActivationConfigPropertyDesc el = (ActivationConfigPropertyDesc)lit.next(); - if (el.getActivationConfigPropertyName().equals("destinationType")) { - if (el.getActivationConfigPropertyValue().equals("javax.jms.Queue")) { - destinationType = javax.jms.Queue.class; - } else if (el.getActivationConfigPropertyValue().equals("javax.jms.Topic")) { - destinationType = javax.jms.Topic.class; - isTopicDestination = true; - } else { - try { - destinationType = curLoader.loadClass(el.getActivationConfigPropertyValue()); - } catch (Exception ex) { - throw new DeploymentDescException("Invalid destination-type of " - + el.getActivationConfigPropertyValue() - + "for ejb-name" + ejbName); - } - } - } else if (el.getActivationConfigPropertyName().equals("messageSelector")) { - selector = el.getActivationConfigPropertyValue(); - } else if (el.getActivationConfigPropertyName().equals("acknowledgeMode")) { - if (el.getActivationConfigPropertyValue().equals("Auto-acknowledge")) { - acknowledgeMode = AUTO_ACKNOWLEDGE; - } else if (el.getActivationConfigPropertyValue().equals("Dups-ok-acknowledge")) { - acknowledgeMode = DUPS_OK_ACKNOWLEDGE; - } - } else if (el.getActivationConfigPropertyName().equals("subscriptionDurability")) { - if (el.getActivationConfigPropertyValue().equals("Durable")) { - subscriptionDurability = SUBS_DURABLE; - } else { - subscriptionDurability = SUBS_NON_DURABLE; - } - } else if (el.getActivationConfigPropertyName().equals("destination")) { - destination = el.getActivationConfigPropertyValue(); - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodCmp2Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodCmp2Desc.java deleted file mode 100644 index 9945594490..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodCmp2Desc.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.io.CharArrayReader; -import java.lang.reflect.Method; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.ejbql.ASTEJBQL; -import org.ow2.jonas.deployment.ejb.ejbql.EJBQL; -import org.ow2.jonas.deployment.ejb.ejbql.ParseException; - - - -/** - * Class to hold meta-information related to CMP2 find/select methods - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class MethodCmp2Desc extends MethodDesc { - - protected String query = null; - protected ASTEJBQL queryNode = null; - protected boolean resultTypeMappingRemote = false; - protected EntityDesc entityDesc; - - - /** - * construtor form XML data binding structures - */ - MethodCmp2Desc(BeanDesc beanDesc, Method meth, Class classDef, int index) { - super(beanDesc, meth, classDef, index); - entityDesc = (EntityDesc) beanDesc; - } - - /** - * get EJB-QL query when defined - * @return possibly null String containing the EJB-QL query for the method - */ - public String getQuery() { - return query; - } - - /** - * set EJB-QL query. Because of the deployment descriptor structure, the query is - * set after the object is created. - */ - public void setQuery(String query) throws ParseException { - // we want a one line query for error reporting - this.query = query.replace('\r',' ').replace('\n',' ').replace('\t',' '); - EJBQL parser = new EJBQL(new CharArrayReader(query.toCharArray())); - queryNode = (ASTEJBQL)parser.EJBQL(); - } - - - public ASTEJBQL getQueryNode() { - return queryNode; - } - - /** - * get result type mapping state (remote/local) - * @return true when remote - */ - public boolean isResultTypeMappingRemote() { - return resultTypeMappingRemote; - } - - /** - * set the state of resultTypeMappingRemote - */ - public void setResultTypeMapping(String resultTypeMapping) - throws DeploymentDescException { - if (resultTypeMapping.equals("Remote")) { - resultTypeMappingRemote=true; - } else if (resultTypeMapping.equals("Local")) { - resultTypeMappingRemote=false; - } else { - throw new DeploymentDescException(resultTypeMapping+" is not a valid result-type-mapping value"); - } - } - - /** - * Get the prefetch tag value for this method. - * May be true only for finder methods (not for ejbSelect methods) - */ - public boolean getPrefetch() { - if (this.isFinder()) { - return entityDesc.isPrefetch(); - } else { - return false; - } - } - - - /** - * String representation of the given element - * @param m an element - * @return String representation of the given element method - */ - public static String queryMethodElementToString(org.ow2.jonas.deployment.ejb.xml.QueryMethod m) { - return methodElementToString(null, m.getMethodName(),m.getMethodParams()); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\nquery = " + query); - ret.append("\nqueryNode = " + queryNode); - ret.append("\nresultTypeMappingRemote = " + resultTypeMappingRemote); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodDesc.java deleted file mode 100644 index a69351f783..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodDesc.java +++ /dev/null @@ -1,477 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Method; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.xml.MethodParams; - - -/** - * Class to hold meta-information related to bean and home methods. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin: fix a bug about select method select method is a bean's method which name begins with ejbSelect, - * (and not home interface method as finder method). - */ -public class MethodDesc { - - /** - * Set of constants for method transaction attribute - */ - public static final int TX_NULL = -1; - public static final int TX_NOT_SET = 0; - public static final int TX_NOT_SUPPORTED = 1; - public static final int TX_REQUIRED = 2; - public static final int TX_SUPPORTS = 3; - public static final int TX_REQUIRES_NEW = 4; - public static final int TX_MANDATORY = 5; - public static final int TX_NEVER = 6; - - - private static final String[] ATTR = { - "TX_NOT_SET", - "TX_NOT_SUPPORTED", - "TX_REQUIRED", - "TX_SUPPORTS", - "TX_REQUIRES_NEW", - "TX_MANDATORY", - "TX_NEVER" - }; - - /** - * default value for undefined transaction attribute for sessions and entities - */ - protected static final String TX_STR_DEFAULT_VALUE = "Supports"; - - /** - * default value for undefined transaction attribute for message driven beans - */ - protected static final String TX_STR_DEFAULT_VALUE_4_MDB = "NotSupported"; - - /** - * value for undefined transaction attribute - */ - private int txAttribute = TX_NOT_SET; - private int txAttributeStatus = APPLY_TO_BEAN; - - // Array of String representing the roles which can execute the method of this MethodDesc - private HashSet roleName = new HashSet(); - - public static final int APPLY_TO_NOTHING = 0; - public static final int APPLY_TO_BEAN = 1; - public static final int APPLY_TO_CLASS = 2; - public static final int APPLY_TO_BEAN_METHOD_NAME = 3; - public static final int APPLY_TO_CLASS_METHOD_NAME = 4; - public static final int APPLY_TO_BEAN_METHOD = 5; - public static final int APPLY_TO_CLASS_METHOD = 6; - - protected static final String[] APPLY_TO = { - "APPLY_TO_NOTHING", - "APPLY_TO_BEAN", - "APPLY_TO_CLASS", - "APPLY_TO_BEAN_METHOD_NAME", - "APPLY_TO_CLASS_METHOD_NAME", - "APPLY_TO_BEAN_METHOD", - "APPLY_TO_CLASS_METHOD" - }; - - private Method meth; - private Class classDef; - private int index; - - protected BeanDesc beanDesc; - - private boolean isFinder = false; - private boolean isEjbSelect = false; - private boolean isFindByPrimaryKey = false; - - /** - * This method was marked as excluded in ejb-jar.xml ? - */ - private boolean excluded = false; - - /** - * constructor to be used by parent node - */ - public MethodDesc(BeanDesc beanDesc, Method meth, Class clDef, int index) { - this.meth = meth; - this.classDef = clDef; - this.index = index; - this.beanDesc = beanDesc; - isFindByPrimaryKey = MethodDesc.isFindByPrimaryKey(meth); - isFinder = isFinder(meth); - isEjbSelect = isEjbSelect(meth); - } - - /** - * get a unique index of the method for the bean - */ - public int getIndex() { - return index; - } - - public void setIndex(int idx) { - index = idx; - } - - /** - * access if the method is a finder - * @return true for finder methods - */ - public boolean isFinder() { - return isFinder; - } - - /** - * access if the method is findByPrimaryKey - * @return true for the findByPrimaryKey method - */ - public boolean isFindByPrimaryKey() { - return isFindByPrimaryKey; - } - - - /** - * access if the method is a select - * @return true for select methods - */ - public boolean isEjbSelect() { - return isEjbSelect; - } - - - /** - * Overwrite TxAttribute - * @param transAttribute new value for txAttribute - * @param status applicability of given transAttribute parameter - */ - void overwriteTxAttribute(String transAttribute, int status) throws DeploymentDescException { - // overwrite only if numerical value greater than existing one - if (status < this.txAttributeStatus) { - return; - } - setTxAttribute(transAttribute); - txAttributeStatus = status; - } - - /** - * Set TxAttribute with given value - */ - void setTxAttribute(String transAttribute) throws DeploymentDescException { - if (transAttribute.equals("NotSupported")) { - txAttribute = TX_NOT_SUPPORTED; - } else if (transAttribute.equals("Required")) { - txAttribute = TX_REQUIRED; - } else if (transAttribute.equals("Supports")) { - txAttribute = TX_SUPPORTS; - } else if (transAttribute.equals("RequiresNew")) { - txAttribute = TX_REQUIRES_NEW; - } else if (transAttribute.equals("Mandatory")) { - txAttribute = TX_MANDATORY; - } else if (transAttribute.equals("Never")) { - txAttribute = TX_NEVER; - } else { - throw new DeploymentDescException(transAttribute - + " is not a valid trans-attribute value"); - } - } - - /** - * Add a role name to the role names which can execute the method - * @param rn role name to add - */ - void addRoleName (String rn) { - roleName.add(rn); - } - - /** - * Evaluate method pattern maching as defined in the EJB specifications - * @return one of the APPLY_TO_* values. - */ - public int matchPattern(Class pclass, String mName, MethodParams patternMethodParams) { - return matchPattern(getMethod(), classDef, pclass, mName, patternMethodParams); - } - - /** - * Get the status of applicability for a given pattern to a method - * @return status of applicability APPLY_TO_NOTHING,APPLY_TO_BEAN,APPLY_TO_CLASS,APPLY_TO_METHOD_NAME,APPLY_TO_METHOD - */ - public static int matchPattern(java.lang.reflect.Method meth, - Class classMeth, - Class pclass, - String mName, - MethodParams patternMethodParams) { - - // If pclass don't match -> APPLY_TO_NOTHING - if (pclass != null && !pclass.isAssignableFrom(classMeth)) { - return APPLY_TO_NOTHING; - } - - // class is enough - if (mName.equals("*")) { - return (pclass == null) ? APPLY_TO_BEAN : APPLY_TO_CLASS; - } - - // method name does not match - if (!mName.equals(meth.getName())) { - return APPLY_TO_NOTHING; - } - - // no params specified (name test is enough) - if (patternMethodParams == null) { - return (pclass == null) ? APPLY_TO_BEAN_METHOD_NAME : APPLY_TO_CLASS_METHOD_NAME; - } - - Class pars[] = meth.getParameterTypes(); - List pattPars = patternMethodParams.getMethodParamList(); - // number of parameters does not match - if (pars.length != pattPars.size()) { - return APPLY_TO_NOTHING; - } - Iterator i = pattPars.iterator(); - for (int ii = 0; ii < pars.length; ii++) { - String cName = (String) i.next(); - if (!getClassName(pars[ii]).equals(cName)) { - return APPLY_TO_NOTHING; - } - } - return (pclass == null) ? APPLY_TO_BEAN_METHOD : APPLY_TO_CLASS_METHOD; - } - - /** - * Returns common name of a given type
    - * For example it returns int[] for an array of int - * @return String with the name of the given type - */ - private static String getClassName(Class c) { - String name; - if (c.isArray()) { - name = getClassName(c.getComponentType()) + "[]"; - } else { - name = c.getName(); - } - return (name); - } - - - - /** - * Get the container transaction attribute that match the method - * @return Constant value within list : - * TX_NOT_SUPPORTED,TX_REQUIRED,TX_SUPPORTS,TX_REQUIRES_NEW,TX_MANDATORY,TX_NEVER,TX_NOT_SET - */ - public int getTxAttribute() { - return txAttribute; - } - - /** - * Get the container transaction attribute that match the method - * @return Constant value within list : - * APPLY_TO_NOTHING, APPLY_TO_BEAN, APPLY_TO_CLASS, APPLY_TO_BEAN_METHOD_NAME, - * APPLY_TO_CLASS_METHOD_NAME, APPLY_TO_BEAN_METHOD, APPLY_TO_CLASS_METHOD - */ - public int getTxAttributeStatus() { - return txAttributeStatus; - } - - /** - * String representation of the transactionnal attribute - * @return String representation of this transactionnal attribute - */ - public static String getTxAttributeName(int value) { - if ((value < 0) || (value > ATTR.length)) { - throw new Error(value + " is not a valid TxAttribute"); - } - return ATTR[value]; - } - - /** - * String representation of the transactionnal attribute - * @return String representation of this transactionnal attribute - */ - public String getTxAttributeName() { - return ATTR[txAttribute]; - } - - /** - * String representation of the roles which can execute the method - * @return Array of String representing the roles which can execute the method - */ - public String[] getRoleName () { - if (roleName.isEmpty()) { - return new String[0]; - } - Object[] o = roleName.toArray(); - String[] rn = new String[o.length]; - for (int i = 0; i < rn.length; i++) { - rn[i] = (String) o[i]; - } - return rn; - } - - /** - * String representation of the given element - * @param m an element - * @return String representation of the given element method - */ - public static String methodElementToString(org.ow2.jonas.deployment.ejb.xml.Method m) { - return methodElementToString(m.getMethodIntf(), m.getMethodName(), m.getMethodParams()); - } - - /** - * get a String representation of a method from it's XML representation - */ - protected static String methodElementToString(String intf, String name, MethodParams params) { - String s = new String(); - if (intf != null) { - s = s.concat(intf + "."); - } - s = s.concat(name); - if (params != null) { - s = s.concat("("); - for (Iterator i = params.getMethodParamList().iterator(); i.hasNext();) { - s = s.concat((String) i.next()); - if (i.hasNext()) { - s = s.concat(","); - } - } - s = s.concat(")"); - } - return (s); - } - - /** - * get a String representation of a method from the reflection object - */ - public static String toString(Method m) { - StringBuffer ret = new StringBuffer(); - ret.append(m.getDeclaringClass().getName()); - ret.append('.'); - ret.append(m.getName()); - ret.append('('); - Class[] params = m.getParameterTypes(); - for (int i = 0; i < params.length; i++) { - ret.append(getClassName(params[i])); - if (i == params.length - 1) { - break; - } - ret.append(','); - } - ret.append(')'); - return ret.toString(); - } - - /** - * return the method to which the meta-information applies - */ - public Method getMethod() { - return meth; - } - - /** - * get the parent node - */ - public BeanDesc getBeanDesc() { - return beanDesc; - } - - /** - * access if a method is a finder - */ - public static boolean isFinder(Method meth) { - return (meth.getName().startsWith("find") - && (javax.ejb.EJBHome.class.isAssignableFrom(meth.getDeclaringClass()) - || javax.ejb.EJBLocalHome.class.isAssignableFrom(meth.getDeclaringClass()))); - } - - /** - * access if a method is findByPrimaryKey - */ - public static boolean isFindByPrimaryKey(Method meth) { - return (meth.getName().equals("findByPrimaryKey") - && (javax.ejb.EJBHome.class.isAssignableFrom(meth.getDeclaringClass()) - || javax.ejb.EJBLocalHome.class.isAssignableFrom(meth.getDeclaringClass()))); - } - - /** - * access if a method is a select - */ - public static boolean isEjbSelect(Method meth) { - return (meth.getName().startsWith("ejbSelect") - && javax.ejb.EntityBean.class.isAssignableFrom(meth.getDeclaringClass())); - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("\ngetTxAttribute() = " + ATTR[getTxAttribute()]); - ret.append("\ngetTxAttributeStatus() = " + APPLY_TO[getTxAttributeStatus()]); - ret.append("\nMethodIndex = " + index); - ret.append("\nmeth = " + toString(meth)); - ret.append("\nisFinder = " + isFinder); - ret.append("\nisEjbSelect = " + isEjbSelect); - ret.append("\nisFindByPrimaryKey = " + isFindByPrimaryKey); - if (!roleName.isEmpty()) { - ret.append("\ngetRoleName() = ["); - String [] rn = getRoleName(); - for (int i = 0; i < rn.length - 1; i++) { - ret.append (rn[i] + ", "); - } - ret.append(rn[rn.length - 1] + "]"); - ret.append("\n"); - } - return ret.toString(); - } - - /** - * @return true if this method is excluded (in DD), else false - */ - public boolean isExcluded() { - return excluded; - } - /** - * Sets the excluded attribute. - * @param excluded true of false - */ - public void setExcluded(boolean excluded) { - this.excluded = excluded; - } -} - - - - - - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodJdbcCmp1Desc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodJdbcCmp1Desc.java deleted file mode 100644 index 4d2304066b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/MethodJdbcCmp1Desc.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Method; - -import org.ow2.jonas.deployment.common.DeploymentDescException; - -/** - * Class to hold meta-information related to CMP v1 attributes of a method when a jdbc - * data store is used. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class MethodJdbcCmp1Desc extends MethodDesc { - - protected String whereClause = null; - protected int whereClauseStatus = APPLY_TO_BEAN; - - /** - * constructor to be used by parent node - */ - public MethodJdbcCmp1Desc(BeanDesc beanDesc,Method meth, Class classDef, int index) { - super(beanDesc,meth, classDef,index); - } - - /** - * Overwrite JdbcWhereClause - * @param jdbcWhereClause new value for jdbcWhereClause - * @param status applicability of given transAttribute parameter - */ - void overwriteJdbcWhereClause(String jdbcWhereClause,int status) - throws DeploymentDescException { - if (status - * - * @return transaction type value within - * BEAN_TRANSACTION_TYPE,CONTAINER_TRANSACTION_TYPE - */ - public int getTransactionType() { - return transactionType; - } - - /** - * Returns true if bean managed transaction. (used by JOnAS Server) - */ - public boolean isBeanManagedTransaction() { - return (transactionType == BEAN_TRANSACTION_TYPE); - } - - /** - * Get the session timeout value - */ - public int getSessionTimeout() { - return sessionTimeout; - } - - /** - * Check that the bean descriptor is valid - * - * @exception DeploymentDescException - * thrown for non-valid bean - */ - @Override - public void check() throws DeploymentDescException { - super.check(); - // for BEAN_TRANSACTION_TYPE transactions ejbClass should not implement - // javax.ejb.SessionSynchronization - if ((getTransactionType() == BEAN_TRANSACTION_TYPE) - && (javax.ejb.SessionSynchronization.class - .isAssignableFrom(ejbClass))) { - throw new DeploymentDescException( - ejbClass.getName() - + " should NOT manage transactions and implement javax.ejb.SessionSynchronization"); - } - } - - /** - * String representation of the object for test purpose - * - * @return String representation of this object - */ - @Override - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - ret.append("\ngetTransactionType()" + TRANS[getTransactionType()]); - ret.append("\nsessionTimeout = " + sessionTimeout); - return ret.toString(); - } - - public boolean isMonitoringSettingsDefinedInDD() { - return monitoringSettingsDefinedInDD; - } - - public void setWarningThreshold(final int warningThreshold) { - this.warningThreshold = warningThreshold; - } - - public boolean isMonitoringEnabled() { - return monitoringEnabled; - } - - public int getWarningThreshold() { - return warningThreshold; - } - -} - diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatefulDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatefulDesc.java deleted file mode 100644 index d2b63823b0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatefulDesc.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.deployment.ejb; - -import java.lang.reflect.Method; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.JonasSession; -import org.ow2.jonas.deployment.ejb.xml.Session; - - -/** - * class to hold meta-information related to a stateful session bean. - * At this stage, this is only a tagger class. - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class SessionStatefulDesc extends SessionDesc { - - protected Method isModifiedMethod = null; - - /** - * constructor: called when the DeploymentDescriptor is read. - * Currently, called by both GenIC and createContainer. - */ - public SessionStatefulDesc(ClassLoader classLoader, Session ses, - AssemblyDescriptor asd, JonasSession jSes, - JLinkedList jMDRList, String filename) - throws DeploymentDescException { - super(classLoader, ses, asd, jSes, jMDRList, filename); - - // isModifiedMethod - if (jSes.getIsModifiedMethodName() != null) { - String mName = jSes.getIsModifiedMethodName(); - try { - isModifiedMethod = this.ejbClass.getMethod(mName, new Class[0]); - } catch (NoSuchMethodException e) { - isModifiedMethod = null; - throw new DeploymentDescException(mName + " is not a method of " + this.ejbClass.getName()); - } catch (SecurityException e) { - throw new DeploymentDescException("Cannot use java reflexion on " + this.ejbClass.getName()); - } - } - } - - /** - * Get the 'isModified' method name implemented in the bean class. - * (This information is JOnAS specific). - * @return Name of the isModified method - */ - public Method getIsModifiedMethod(){ - if (isModifiedMethod == null) - throw new Error("No isModified method defined for bean " + this.ejbName); - return isModifiedMethod; - } - - /** - * Assessor for existence of a isModified methoe - * @return true of isModified method exist for the bean - */ - public boolean hasIsModifiedMethod(){ - return isModifiedMethod != null; - } - - /** - * String representation of the object for test purpose - * @return String representation of this object - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append(super.toString()); - if (hasIsModifiedMethod()) - ret.append("getIsModifiedMethod()=" + getIsModifiedMethod().toString()); - return ret.toString(); - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatelessDesc.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatelessDesc.java deleted file mode 100644 index 098a555770..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/SessionStatelessDesc.java +++ /dev/null @@ -1,295 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployment.ejb; - -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.deployment.ejb.xml.AssemblyDescriptor; -import org.ow2.jonas.deployment.ejb.xml.CommonEjb; -import org.ow2.jonas.deployment.ejb.xml.JonasSession; -import org.ow2.jonas.deployment.ejb.xml.Session; -import org.ow2.jonas.lib.util.BeanNaming; - -import java.lang.reflect.Method; -import java.util.Iterator; - - - - -/** - * class to hold meta-information related to a stateless session bean. - * - * @author Christophe Ney [cney@batisseurs.com] : Initial developer - * @author Helene Joanin - */ -public class SessionStatelessDesc extends SessionDesc { - - /** - * Default service endpoint jndi suffix - */ - private static final String SERVICE_ENDPOINT_JNDI_SUFFIX = "_SE"; - - /** - * class name of the JOnAS wrapper (without package prefix) - */ - private String wrpServiceEndpointName; - private String wrpSEHomeName; - - /** - * Singleton=True if only 1 SessionSwitch (and 1 Remote) when possible. - */ - protected boolean singleton = true; - - /** - * fully qualified class name of the JOnAS wrapper - */ - private String fullWrpServiceEndpointName; - private String fullWrpSEHomeName; - - /** - * ServiceEndpoint Class - */ - private Class serviceEndpointClass; - - /** - * jndi name - */ - private String serviceEndpointJndiName; - - /** - * constructor: called when the DeploymentDescriptor is read. Currently, - * called by both GenIC and createContainer. - * - * @param classLoader ClassLoader to load Bean's classes - * @param ses XML Element for session standard deployment descriptor - * @param asd Assembly Descriptor of the EjbJar - * @param jSes XML Element for session jonas deployment descriptor - * @param filename bean's jar filename - * - * @throws DeploymentDescException When SessionDesc cannot be instanciated - */ - public SessionStatelessDesc(ClassLoader classLoader, Session ses, AssemblyDescriptor asd, JonasSession jSes, - JLinkedList jMDRList, String filename) throws DeploymentDescException { - super(classLoader, ses, asd, jSes, jMDRList, filename); - - // create wrapper names - String ejbIdentifier = getIdentifier(); - if (getServiceEndpointClass() != null) { - String packageName = BeanDesc.GENERATED_PREFIX + - BeanNaming.getPackageName(getServiceEndpointClass().getName()); - wrpServiceEndpointName = new String("JOnAS" + ejbIdentifier + "ServiceEndpoint"); - fullWrpServiceEndpointName = BeanNaming.getClassName(packageName, wrpServiceEndpointName); - wrpSEHomeName = new String("JOnAS" + ejbIdentifier + "SEHome"); - fullWrpSEHomeName = BeanNaming.getClassName(packageName, wrpSEHomeName); - } - - // get jndi-endpoint-name - if (jSes.getJndiEndpointName() != null) { - serviceEndpointJndiName = jSes.getJndiEndpointName(); - } else { - serviceEndpointJndiName = getJndiName() + SERVICE_ENDPOINT_JNDI_SUFFIX; - } - - // singleton - if (jSes.getSingleton() != null) { - if (jSes.getSingleton().equalsIgnoreCase("True")) { - singleton = true; - } else if (jSes.getSingleton().equalsIgnoreCase("False")) { - singleton = false; - } else { - throw new DeploymentDescException("Invalid singleton value for bean " + this.ejbName); - } - } - - // cache TxAttribute for ejbTimeout - for (Iterator i = getMethodDescIterator(); i.hasNext();) { - MethodDesc methd = (MethodDesc) i.next(); - if (methd.getMethod().getName().equals("ejbTimeout")) { - timerTxAttribute = methd.getTxAttribute(); - ejbTimeoutSignature = BeanNaming.getSignature(getEjbName(), methd.getMethod()); - } - } - } - - /** - * Check that the bean descriptor is valid - * - * @exception DeploymentDescException thrown for non-valid bean - */ - public void check() throws DeploymentDescException { - super.check(); - // ejbClass should not implement javax.ejb.SessionSynchronization - if (javax.ejb.SessionSynchronization.class.isAssignableFrom(ejbClass)) { - throw new DeploymentDescException(ejbClass.getName() - + " should NOT implement javax.ejb.SessionSynchronization"); - } - } - - /** - * Permit Methods addition from subtypes Protected method that need to be - * overridden in subclasses - * - * @param len method array length - * @return new len value - * - * @throws DeploymentDescException when java reflection cannot be used on - * classes - */ - protected int addEJBMethodDesc(int len) throws DeploymentDescException { - - if (this.serviceEndpointClass != null) { - // session bean or entity bean with local interface - Method[] m = this.serviceEndpointClass.getMethods(); - for (int i = 0; i < m.length; i++) { - addMethodDesc(m[i], this.serviceEndpointClass); - len++; - // check RemoteException is thrown - checkRemoteException(m[i], true); - } - } - return len; - } - - /** - * load class for service-endpoint - * - * @param bd XML Element representing EJB Descriptor - * @param classLoader ClassLoader used to load classes - * - * @throws DeploymentDescException when a class cannot be loaded - */ - protected void loadExtraClasses(CommonEjb bd, ClassLoader classLoader) throws DeploymentDescException { - - Session ses = (Session) bd; - - // load service-endpoint interface - if (ses.getServiceEndpoint() != null) { - try { - serviceEndpointClass = classLoader.loadClass(ses.getServiceEndpoint()); - // check service-endpoint extends java.rmi.Remote - if (!java.rmi.Remote.class.isAssignableFrom(serviceEndpointClass)) { - throw new DeploymentDescException("ServiceEndpoint class '" + ses.getServiceEndpoint() - + "' does not extend java.rmi.Remote"); - } - } catch (ClassNotFoundException e) { - throw new DeploymentDescException("ServiceEndpoint class not found for bean " + ejbName, e); - } - } - - } - - /** - * Returns the parent Class for a method given an interface type. - * - * @param intfType type of the interface (Home/Remote/LocalHome/Local or - * ServiceEndpoint) - * - * @return the parent class for a method given an interface type - * - * @throws DeploymentDescException when intfType is unknown - */ - protected Class getParentClass(String intfType) throws DeploymentDescException { - Class pClass = null; - if (intfType.equals("Home")) { - pClass = javax.ejb.EJBHome.class; - } else if (intfType.equals("Remote")) { - pClass = javax.ejb.EJBObject.class; - } else if (intfType.equals("LocalHome")) { - pClass = javax.ejb.EJBLocalHome.class; - } else if (intfType.equals("Local")) { - pClass = javax.ejb.EJBLocalObject.class; - } else if (intfType.equals("ServiceEndpoint")) { - pClass = java.rmi.Remote.class; - } else { - throw new DeploymentDescException(intfType + " is invalid value for method-intf on bean " + ejbName); - } - return pClass; - } - - /** - * @return Returns the serviceEndpointClass. - */ - public Class getServiceEndpointClass() { - return serviceEndpointClass; - } - - private void checkValidServiceEndpointInterface() { - // extends java.rmi.Remote - // arguments and returns types are valid types for JAX-RPC (may be - // Holders) - // throws must includes java.rmi.RemoteException - // each endpoint method must have a matching session bean method : - // - same name - // - same number and types of arguments and same return type - // - session exceptions must eb included in endpoint - // no EJBObject or EJBLocalObject - // service endpoint interface must not include constants (public final - // static) - } - - /** - * @return jndi name where ServiceEndpoint interface will be bound - */ - public String getJndiServiceEndpointName() { - return serviceEndpointJndiName; - } - - /** - * @return Returns the fullWrpServiceEndpointName. - */ - public String getFullWrpServiceEndpointName() { - return fullWrpServiceEndpointName; - } - - /** - * @return Returns the wrpServiceEndpointName. - */ - public String getWrpServiceEndpointName() { - return wrpServiceEndpointName; - } - - /** - * @return Returns the fullWrpSEHomeName. - */ - public String getFullWrpSEHomeName() { - return fullWrpSEHomeName; - } - - /** - * @return Returns the wrpSEHomeName. - */ - public String getWrpSEHomeName() { - return wrpSEHomeName; - } - - /** - * @return true for singleton session bean - */ - public boolean isSingleton() { - return singleton; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAbstractSchemaName.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAbstractSchemaName.java deleted file mode 100644 index 693c822651..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAbstractSchemaName.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTAbstractSchemaName.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTAbstractSchemaName extends SimpleNode { - public ASTAbstractSchemaName(int id) { - super(id); - } - - public ASTAbstractSchemaName(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAggregateSelectExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAggregateSelectExpression.java deleted file mode 100644 index f112f922be..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTAggregateSelectExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTAggregateSelectExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTAggregateSelectExpression extends SimpleNode { - public ASTAggregateSelectExpression(int id) { - super(id); - } - - public ASTAggregateSelectExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticExpression.java deleted file mode 100644 index cb3748a83a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTArithmeticExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTArithmeticExpression extends SimpleNode { - public ASTArithmeticExpression(int id) { - super(id); - } - - public ASTArithmeticExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticFactor.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticFactor.java deleted file mode 100644 index 51a0a34c44..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticFactor.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTArithmeticFactor.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTArithmeticFactor extends SimpleNode { - public ASTArithmeticFactor(int id) { - super(id); - } - - public ASTArithmeticFactor(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticLiteral.java deleted file mode 100644 index db95236088..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTArithmeticLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTArithmeticLiteral extends SimpleNode { - public ASTArithmeticLiteral(int id) { - super(id); - } - - public ASTArithmeticLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticTerm.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticTerm.java deleted file mode 100644 index 034eb2ef2d..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTArithmeticTerm.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTArithmeticTerm.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTArithmeticTerm extends SimpleNode { - public ASTArithmeticTerm(int id) { - super(id); - } - - public ASTArithmeticTerm(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBetweenExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBetweenExpression.java deleted file mode 100644 index 1bbe2e34c5..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBetweenExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTBetweenExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTBetweenExpression extends SimpleNode { - public ASTBetweenExpression(int id) { - super(id); - } - - public ASTBetweenExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanExpression.java deleted file mode 100644 index 65976caf83..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTBooleanExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTBooleanExpression extends SimpleNode { - public ASTBooleanExpression(int id) { - super(id); - } - - public ASTBooleanExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanLiteral.java deleted file mode 100644 index b23a842305..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTBooleanLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTBooleanLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTBooleanLiteral extends SimpleNode { - public ASTBooleanLiteral(int id) { - super(id); - } - - public ASTBooleanLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCmpPathExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCmpPathExpression.java deleted file mode 100644 index 936993c55c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCmpPathExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTCmpPathExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTCmpPathExpression extends SimpleNode { - public ASTCmpPathExpression(int id) { - super(id); - } - - public ASTCmpPathExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberDeclaration.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberDeclaration.java deleted file mode 100644 index c276c0c53a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberDeclaration.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTCollectionMemberDeclaration.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTCollectionMemberDeclaration extends SimpleNode { - public ASTCollectionMemberDeclaration(int id) { - super(id); - } - - public ASTCollectionMemberDeclaration(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberExpression.java deleted file mode 100644 index 2b1814a08b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionMemberExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTCollectionMemberExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTCollectionMemberExpression extends SimpleNode { - public ASTCollectionMemberExpression(int id) { - super(id); - } - - public ASTCollectionMemberExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionValuedPathExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionValuedPathExpression.java deleted file mode 100644 index 6187758ee4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTCollectionValuedPathExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTCollectionValuedPathExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTCollectionValuedPathExpression extends SimpleNode { - public ASTCollectionValuedPathExpression(int id) { - super(id); - } - - public ASTCollectionValuedPathExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTComparisonExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTComparisonExpression.java deleted file mode 100644 index 056de6745b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTComparisonExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTComparisonExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTComparisonExpression extends SimpleNode { - public ASTComparisonExpression(int id) { - super(id); - } - - public ASTComparisonExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalExpression.java deleted file mode 100644 index 2a3e8704ac..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTConditionalExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTConditionalExpression extends SimpleNode { - public ASTConditionalExpression(int id) { - super(id); - } - - public ASTConditionalExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalFactor.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalFactor.java deleted file mode 100644 index 6297ff6a2a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalFactor.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTConditionalFactor.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTConditionalFactor extends SimpleNode { - public ASTConditionalFactor(int id) { - super(id); - } - - public ASTConditionalFactor(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalTerm.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalTerm.java deleted file mode 100644 index 164b72617a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTConditionalTerm.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTConditionalTerm.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTConditionalTerm extends SimpleNode { - public ASTConditionalTerm(int id) { - super(id); - } - - public ASTConditionalTerm(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTDatetimeExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTDatetimeExpression.java deleted file mode 100644 index 5b4166399f..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTDatetimeExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTDatetimeExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTDatetimeExpression extends SimpleNode { - public ASTDatetimeExpression(int id) { - super(id); - } - - public ASTDatetimeExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEJBQL.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEJBQL.java deleted file mode 100644 index cbdb79515b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEJBQL.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTEJBQL.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTEJBQL extends SimpleNode { - public ASTEJBQL(int id) { - super(id); - } - - public ASTEJBQL(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEmptyCollectionComparisonExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEmptyCollectionComparisonExpression.java deleted file mode 100644 index aadd3d7823..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEmptyCollectionComparisonExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTEmptyCollectionComparisonExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTEmptyCollectionComparisonExpression extends SimpleNode { - public ASTEmptyCollectionComparisonExpression(int id) { - super(id); - } - - public ASTEmptyCollectionComparisonExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEntityBeanExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEntityBeanExpression.java deleted file mode 100644 index 5410984dc8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTEntityBeanExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTEntityBeanExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTEntityBeanExpression extends SimpleNode { - public ASTEntityBeanExpression(int id) { - super(id); - } - - public ASTEntityBeanExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFloatingPointLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFloatingPointLiteral.java deleted file mode 100644 index 39d525c5a0..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFloatingPointLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTFloatingPointLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTFloatingPointLiteral extends SimpleNode { - public ASTFloatingPointLiteral(int id) { - super(id); - } - - public ASTFloatingPointLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFromClause.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFromClause.java deleted file mode 100644 index c5d7f4d64a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFromClause.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTFromClause.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTFromClause extends SimpleNode { - public ASTFromClause(int id) { - super(id); - } - - public ASTFromClause(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningNumerics.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningNumerics.java deleted file mode 100644 index 73cbdd9b05..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningNumerics.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTFunctionsReturningNumerics.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTFunctionsReturningNumerics extends SimpleNode { - public ASTFunctionsReturningNumerics(int id) { - super(id); - } - - public ASTFunctionsReturningNumerics(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningStrings.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningStrings.java deleted file mode 100644 index dcde5da9cf..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTFunctionsReturningStrings.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTFunctionsReturningStrings.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTFunctionsReturningStrings extends SimpleNode { - public ASTFunctionsReturningStrings(int id) { - super(id); - } - - public ASTFunctionsReturningStrings(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentificationVariable.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentificationVariable.java deleted file mode 100644 index ce05f6fcab..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentificationVariable.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTIdentificationVariable.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTIdentificationVariable extends SimpleNode { - public ASTIdentificationVariable(int id) { - super(id); - } - - public ASTIdentificationVariable(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentifier.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentifier.java deleted file mode 100644 index 7920c5892c..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIdentifier.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTIdentifier.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTIdentifier extends SimpleNode { - public ASTIdentifier(int id) { - super(id); - } - - public ASTIdentifier(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInExpression.java deleted file mode 100644 index 029710cdd7..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTInExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTInExpression extends SimpleNode { - public ASTInExpression(int id) { - super(id); - } - - public ASTInExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInputParameter.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInputParameter.java deleted file mode 100644 index 2aeb9a0eb8..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTInputParameter.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTInputParameter.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTInputParameter extends SimpleNode { - public ASTInputParameter(int id) { - super(id); - } - - public ASTInputParameter(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIntegerLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIntegerLiteral.java deleted file mode 100644 index 698fdeff5b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTIntegerLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTIntegerLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTIntegerLiteral extends SimpleNode { - public ASTIntegerLiteral(int id) { - super(id); - } - - public ASTIntegerLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLikeExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLikeExpression.java deleted file mode 100644 index 544ff0eccb..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLikeExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTLikeExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTLikeExpression extends SimpleNode { - public ASTLikeExpression(int id) { - super(id); - } - - public ASTLikeExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitClause.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitClause.java deleted file mode 100644 index 467203ddd4..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitClause.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTLimitClause.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTLimitClause extends SimpleNode { - public ASTLimitClause(int id) { - super(id); - } - - public ASTLimitClause(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitExpression.java deleted file mode 100644 index 06019c560b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLimitExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTLimitExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTLimitExpression extends SimpleNode { - public ASTLimitExpression(int id) { - super(id); - } - - public ASTLimitExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLiteral.java deleted file mode 100644 index 528da577a2..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTLiteral extends SimpleNode { - public ASTLiteral(int id) { - super(id); - } - - public ASTLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTNullComparisonExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTNullComparisonExpression.java deleted file mode 100644 index 652bd2d922..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTNullComparisonExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTNullComparisonExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTNullComparisonExpression extends SimpleNode { - public ASTNullComparisonExpression(int id) { - super(id); - } - - public ASTNullComparisonExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByClause.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByClause.java deleted file mode 100644 index e44af6613d..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByClause.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTOrderByClause.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTOrderByClause extends SimpleNode { - public ASTOrderByClause(int id) { - super(id); - } - - public ASTOrderByClause(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByItem.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByItem.java deleted file mode 100644 index 9011495c76..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTOrderByItem.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTOrderByItem.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTOrderByItem extends SimpleNode { - public ASTOrderByItem(int id) { - super(id); - } - - public ASTOrderByItem(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTPath.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTPath.java deleted file mode 100644 index 10dfde999b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTPath.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTPath.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTPath extends SimpleNode { - public ASTPath(int id) { - super(id); - } - - public ASTPath(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTRangeVariableDeclaration.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTRangeVariableDeclaration.java deleted file mode 100644 index 650b5808f6..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTRangeVariableDeclaration.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTRangeVariableDeclaration.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTRangeVariableDeclaration extends SimpleNode { - public ASTRangeVariableDeclaration(int id) { - super(id); - } - - public ASTRangeVariableDeclaration(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectClause.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectClause.java deleted file mode 100644 index cc723efd78..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectClause.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTSelectClause.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTSelectClause extends SimpleNode { - public ASTSelectClause(int id) { - super(id); - } - - public ASTSelectClause(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectExpression.java deleted file mode 100644 index 3f36563be7..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSelectExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTSelectExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTSelectExpression extends SimpleNode { - public ASTSelectExpression(int id) { - super(id); - } - - public ASTSelectExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedCmrPathExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedCmrPathExpression.java deleted file mode 100644 index a030370668..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedCmrPathExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTSingleValuedCmrPathExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTSingleValuedCmrPathExpression extends SimpleNode { - public ASTSingleValuedCmrPathExpression(int id) { - super(id); - } - - public ASTSingleValuedCmrPathExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedPathExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedPathExpression.java deleted file mode 100644 index d693366649..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTSingleValuedPathExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTSingleValuedPathExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTSingleValuedPathExpression extends SimpleNode { - public ASTSingleValuedPathExpression(int id) { - super(id); - } - - public ASTSingleValuedPathExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringExpression.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringExpression.java deleted file mode 100644 index 78ded92c4a..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringExpression.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTStringExpression.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTStringExpression extends SimpleNode { - public ASTStringExpression(int id) { - super(id); - } - - public ASTStringExpression(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringLiteral.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringLiteral.java deleted file mode 100644 index c37287d95b..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTStringLiteral.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTStringLiteral.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTStringLiteral extends SimpleNode { - public ASTStringLiteral(int id) { - super(id); - } - - public ASTStringLiteral(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTWhereClause.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTWhereClause.java deleted file mode 100644 index 04cad04423..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/ASTWhereClause.java +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated By:JJTree: Do not edit this line. ASTWhereClause.java */ - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class ASTWhereClause extends SimpleNode { - public ASTWhereClause(int id) { - super(id); - } - - public ASTWhereClause(EJBQL p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EJBQLVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.java b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.java deleted file mode 100644 index 1efe65fceb..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.java +++ /dev/null @@ -1,3746 +0,0 @@ -/* Generated By:JJTree&JavaCC: Do not edit this line. EJBQL.java */ -package org.ow2.jonas.deployment.ejb.ejbql; - -public class EJBQL/*@bgen(jjtree)*/implements EJBQLTreeConstants, EJBQLConstants {/*@bgen(jjtree)*/ - protected JJTEJBQLState jjtree = new JJTEJBQLState(); - - final public SimpleNode EJBQL() throws ParseException { - /*@bgen(jjtree) EJBQL */ - ASTEJBQL jjtn000 = new ASTEJBQL(JJTEJBQL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - SelectClause(); - FromClause(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case WHERE: - WhereClause(); - break; - default: - jj_la1[0] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case ORDERBY: - OrderByClause(); - break; - default: - jj_la1[1] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case LIMIT: - LimitClause(); - break; - default: - jj_la1[2] = jj_gen; - ; - } - jj_consume_token(0); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - {if (true) return jjtn000;} - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - throw new Error("Missing return statement in function"); - } - - final public void FromClause() throws ParseException { - /*@bgen(jjtree) FromClause */ - ASTFromClause jjtn000 = new ASTFromClause(JJTFROMCLAUSE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(FROM); - IdentificationVariableDeclaration(); - label_1: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - ; - break; - default: - jj_la1[3] = jj_gen; - break label_1; - } - jj_consume_token(COMMA); - IdentificationVariableDeclaration(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void IdentificationVariableDeclaration() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IN: - CollectionMemberDeclaration(); - break; - case IDENTIFIER: - RangeVariableDeclaration(); - break; - default: - jj_la1[4] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void CollectionMemberDeclaration() throws ParseException { - /*@bgen(jjtree) CollectionMemberDeclaration */ - ASTCollectionMemberDeclaration jjtn000 = new ASTCollectionMemberDeclaration(JJTCOLLECTIONMEMBERDECLARATION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(IN); - jj_consume_token(LPAREN); - CollectionValuedPathExpression(); - jj_consume_token(RPAREN); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AS: - jj_consume_token(AS); - break; - default: - jj_la1[5] = jj_gen; - ; - } - Identifier(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void RangeVariableDeclaration() throws ParseException { - /*@bgen(jjtree) RangeVariableDeclaration */ - ASTRangeVariableDeclaration jjtn000 = new ASTRangeVariableDeclaration(JJTRANGEVARIABLEDECLARATION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - AbstractSchemaName(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AS: - jj_consume_token(AS); - break; - default: - jj_la1[6] = jj_gen; - ; - } - Identifier(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void SingleValuedPathExpression() throws ParseException { - /*@bgen(jjtree) SingleValuedPathExpression */ - ASTSingleValuedPathExpression jjtn000 = new ASTSingleValuedPathExpression(JJTSINGLEVALUEDPATHEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - Path(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void CmpPathExpression() throws ParseException { - /*@bgen(jjtree) CmpPathExpression */ - ASTCmpPathExpression jjtn000 = new ASTCmpPathExpression(JJTCMPPATHEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - Path(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void SingleValuedCmrPathExpression() throws ParseException { - /*@bgen(jjtree) SingleValuedCmrPathExpression */ - ASTSingleValuedCmrPathExpression jjtn000 = new ASTSingleValuedCmrPathExpression(JJTSINGLEVALUEDCMRPATHEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - Path(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void CollectionValuedPathExpression() throws ParseException { - /*@bgen(jjtree) CollectionValuedPathExpression */ - ASTCollectionValuedPathExpression jjtn000 = new ASTCollectionValuedPathExpression(JJTCOLLECTIONVALUEDPATHEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - Path(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void SelectClause() throws ParseException { - /*@bgen(jjtree) SelectClause */ - ASTSelectClause jjtn000 = new ASTSelectClause(JJTSELECTCLAUSE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(SELECT); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DISTINCT: - jj_consume_token(DISTINCT); - jjtn000.distinct=true; - break; - default: - jj_la1[7] = jj_gen; - ; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AVG: - case COUNT: - case MAX: - case MIN: - case SUM: - case IDENTIFIER: - SelectExpression(); - break; - case OBJECT: - jj_consume_token(OBJECT); - jj_consume_token(LPAREN); - IdentificationVariable(); - jj_consume_token(RPAREN); - break; - default: - jj_la1[8] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void SelectExpression() throws ParseException { - /*@bgen(jjtree) SelectExpression */ - ASTSelectExpression jjtn000 = new ASTSelectExpression(JJTSELECTEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - SingleValuedPathExpression(); - break; - case AVG: - case COUNT: - case MAX: - case MIN: - case SUM: - AggregateSelectExpression(); - break; - default: - jj_la1[9] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void AggregateSelectExpression() throws ParseException { - /*@bgen(jjtree) AggregateSelectExpression */ - ASTAggregateSelectExpression jjtn000 = new ASTAggregateSelectExpression(JJTAGGREGATESELECTEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AVG: - case MAX: - case MIN: - case SUM: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AVG: - t = jj_consume_token(AVG); - break; - case MAX: - t = jj_consume_token(MAX); - break; - case MIN: - t = jj_consume_token(MIN); - break; - case SUM: - t = jj_consume_token(SUM); - break; - default: - jj_la1[10] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DISTINCT: - jj_consume_token(DISTINCT); - jjtn000.distinct=true; - break; - default: - jj_la1[11] = jj_gen; - ; - } - CmpPathExpression(); - jj_consume_token(RPAREN); - break; - case COUNT: - t = jj_consume_token(COUNT); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DISTINCT: - jj_consume_token(DISTINCT); - jjtn000.distinct=true; - break; - default: - jj_la1[12] = jj_gen; - ; - } - if (jj_2_1(2147483647)) { - SingleValuedPathExpression(); - } else { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - IdentificationVariable(); - break; - default: - jj_la1[13] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - jj_consume_token(RPAREN); - break; - default: - jj_la1[14] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void OrderByClause() throws ParseException { - /*@bgen(jjtree) OrderByClause */ - ASTOrderByClause jjtn000 = new ASTOrderByClause(JJTORDERBYCLAUSE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(ORDERBY); - OrderByItem(); - label_2: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - ; - break; - default: - jj_la1[15] = jj_gen; - break label_2; - } - jj_consume_token(COMMA); - OrderByItem(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void OrderByItem() throws ParseException { - /*@bgen(jjtree) OrderByItem */ - ASTOrderByItem jjtn000 = new ASTOrderByItem(JJTORDERBYITEM); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - CmpPathExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case ASC: - case DESC: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case ASC: - jj_consume_token(ASC); - jjtn000.asc=true; - break; - case DESC: - jj_consume_token(DESC); - jjtn000.asc=false; - break; - default: - jj_la1[16] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[17] = jj_gen; - ; - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void LimitClause() throws ParseException { - /*@bgen(jjtree) LimitClause */ - ASTLimitClause jjtn000 = new ASTLimitClause(JJTLIMITCLAUSE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(LIMIT); - LimitExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - jj_consume_token(COMMA); - LimitExpression(); - break; - default: - jj_la1[18] = jj_gen; - ; - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void LimitExpression() throws ParseException { - /*@bgen(jjtree) LimitExpression */ - ASTLimitExpression jjtn000 = new ASTLimitExpression(JJTLIMITEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case INTEGER_LITERAL: - IntegerLiteral(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[19] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void WhereClause() throws ParseException { - /*@bgen(jjtree) WhereClause */ - ASTWhereClause jjtn000 = new ASTWhereClause(JJTWHERECLAUSE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - jj_consume_token(WHERE); - ConditionalExpression(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ConditionalExpression() throws ParseException { - /*@bgen(jjtree) ConditionalExpression */ - ASTConditionalExpression jjtn000 = new ASTConditionalExpression(JJTCONDITIONALEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - ConditionalTerm(); - label_3: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case OR: - ; - break; - default: - jj_la1[20] = jj_gen; - break label_3; - } - jj_consume_token(OR); - ConditionalTerm(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ConditionalTerm() throws ParseException { - /*@bgen(jjtree) ConditionalTerm */ - ASTConditionalTerm jjtn000 = new ASTConditionalTerm(JJTCONDITIONALTERM); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - ConditionalFactor(); - label_4: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case AND: - ; - break; - default: - jj_la1[21] = jj_gen; - break label_4; - } - jj_consume_token(AND); - ConditionalFactor(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ConditionalFactor() throws ParseException { - /*@bgen(jjtree) ConditionalFactor */ - ASTConditionalFactor jjtn000 = new ASTConditionalFactor(JJTCONDITIONALFACTOR); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[22] = jj_gen; - ; - } - ConditionalPrimary(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ConditionalPrimary() throws ParseException { - if (jj_2_2(2147483647)) { - SimpleCondExpression(); - } else if (jj_2_3(2147483647)) { - jj_consume_token(LPAREN); - ConditionalExpression(); - jj_consume_token(RPAREN); - } else { - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void SimpleCondExpression() throws ParseException { - if (jj_2_4(2147483647)) { - ComparisonExpression(); - } else if (jj_2_5(2147483647)) { - BetweenExpression(); - } else if (jj_2_6(2147483647)) { - LikeExpression(); - } else if (jj_2_7(2147483647)) { - InExpression(); - } else if (jj_2_8(2147483647)) { - NullComparisonExpression(); - } else if (jj_2_9(2147483647)) { - EmptyCollectionComparisonExpression(); - } else if (jj_2_10(2147483647)) { - CollectionMemberExpression(); - } else { - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void BetweenExpression() throws ParseException { - /*@bgen(jjtree) BetweenExpression */ - ASTBetweenExpression jjtn000 = new ASTBetweenExpression(JJTBETWEENEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - ArithmeticExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[23] = jj_gen; - ; - } - jj_consume_token(BETWEEN); - ArithmeticExpression(); - jj_consume_token(AND); - ArithmeticExpression(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void InExpression() throws ParseException { - /*@bgen(jjtree) InExpression */ - ASTInExpression jjtn000 = new ASTInExpression(JJTINEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - CmpPathExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[24] = jj_gen; - ; - } - jj_consume_token(IN); - jj_consume_token(LPAREN); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case string_literal: - case FALSE: - case TRUE: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - Literal(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[25] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.eltnum=1; - label_5: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - ; - break; - default: - jj_la1[26] = jj_gen; - break label_5; - } - jj_consume_token(COMMA); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case string_literal: - case FALSE: - case TRUE: - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - Literal(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[27] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.eltnum++; - } - jj_consume_token(RPAREN); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void LikeExpression() throws ParseException { - /*@bgen(jjtree) LikeExpression */ - ASTLikeExpression jjtn000 = new ASTLikeExpression(JJTLIKEEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - CmpPathExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[28] = jj_gen; - ; - } - jj_consume_token(LIKE); - PatternValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case ESCAPE: - jj_consume_token(ESCAPE); - jjtn000.third=true; - EscapeCharacter(); - break; - default: - jj_la1[29] = jj_gen; - ; - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void NullComparisonExpression() throws ParseException { - /*@bgen(jjtree) NullComparisonExpression */ - ASTNullComparisonExpression jjtn000 = new ASTNullComparisonExpression(JJTNULLCOMPARISONEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - SingleValuedPathExpression(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[30] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jj_consume_token(IS); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[31] = jj_gen; - ; - } - jj_consume_token(NULL); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void EmptyCollectionComparisonExpression() throws ParseException { - /*@bgen(jjtree) EmptyCollectionComparisonExpression */ - ASTEmptyCollectionComparisonExpression jjtn000 = new ASTEmptyCollectionComparisonExpression(JJTEMPTYCOLLECTIONCOMPARISONEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - CollectionValuedPathExpression(); - jj_consume_token(IS); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[32] = jj_gen; - ; - } - jj_consume_token(EMPTY); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void CollectionMemberExpression() throws ParseException { - /*@bgen(jjtree) CollectionMemberExpression */ - ASTCollectionMemberExpression jjtn000 = new ASTCollectionMemberExpression(JJTCOLLECTIONMEMBEREXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - if (jj_2_11(2)) { - SingleValuedCmrPathExpression(); - } else if (jj_2_12(2)) { - IdentificationVariable(); - } else { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case input_parameter: - InputParameter(); - break; - default: - jj_la1[33] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case NOT: - jj_consume_token(NOT); - jjtn000.not=true; - break; - default: - jj_la1[34] = jj_gen; - ; - } - jj_consume_token(MEMBER); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case OF: - jj_consume_token(OF); - break; - default: - jj_la1[35] = jj_gen; - ; - } - CollectionValuedPathExpression(); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ComparisonExpression() throws ParseException { - /*@bgen(jjtree) ComparisonExpression */ - ASTComparisonExpression jjtn000 = new ASTComparisonExpression(JJTCOMPARISONEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - if (jj_2_13(2147483647)) { - StringValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ: - t = jj_consume_token(EQ); - break; - case GT: - t = jj_consume_token(GT); - break; - case GE: - t = jj_consume_token(GE); - break; - case LT: - t = jj_consume_token(LT); - break; - case LE: - t = jj_consume_token(LE); - break; - case NE: - t = jj_consume_token(NE); - break; - default: - jj_la1[36] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - StringExpression(); - } else if (jj_2_14(2147483647)) { - BooleanValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ: - t = jj_consume_token(EQ); - break; - case NE: - t = jj_consume_token(NE); - break; - default: - jj_la1[37] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - BooleanExpression(); - } else if (jj_2_15(2147483647)) { - DatetimeValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ: - t = jj_consume_token(EQ); - break; - case GT: - t = jj_consume_token(GT); - break; - case GE: - t = jj_consume_token(GE); - break; - case LT: - t = jj_consume_token(LT); - break; - case LE: - t = jj_consume_token(LE); - break; - case NE: - t = jj_consume_token(NE); - break; - default: - jj_la1[38] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - DatetimeExpression(); - } else if (jj_2_16(2147483647)) { - EntityBeanValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ: - t = jj_consume_token(EQ); - break; - case NE: - t = jj_consume_token(NE); - break; - default: - jj_la1[39] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - EntityBeanExpression(); - } else if (jj_2_17(2147483647)) { - ArithmeticValue(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case EQ: - t = jj_consume_token(EQ); - break; - case GT: - t = jj_consume_token(GT); - break; - case GE: - t = jj_consume_token(GE); - break; - case LT: - t = jj_consume_token(LT); - break; - case LE: - t = jj_consume_token(LE); - break; - case NE: - t = jj_consume_token(NE); - break; - default: - jj_la1[40] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - ArithmeticExpression(); - } else { - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ArithmeticValue() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - CmpPathExpression(); - break; - case ABS: - case LENGTH: - case LOCATE: - case MOD: - case SQRT: - FunctionsReturningNumerics(); - break; - default: - jj_la1[41] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void ArithmeticExpression() throws ParseException { - /*@bgen(jjtree) ArithmeticExpression */ - ASTArithmeticExpression jjtn000 = new ASTArithmeticExpression(JJTARITHMETICEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - ArithmeticTerm(); - label_6: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MINUS: - case PLUS: - ; - break; - default: - jj_la1[42] = jj_gen; - break label_6; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PLUS: - t = jj_consume_token(PLUS); - break; - case MINUS: - t = jj_consume_token(MINUS); - break; - default: - jj_la1[43] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - ArithmeticTerm(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ArithmeticTerm() throws ParseException { - /*@bgen(jjtree) ArithmeticTerm */ - ASTArithmeticTerm jjtn000 = new ASTArithmeticTerm(JJTARITHMETICTERM); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - ArithmeticFactor(); - label_7: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MULT: - case DIV: - ; - break; - default: - jj_la1[44] = jj_gen; - break label_7; - } - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MULT: - t = jj_consume_token(MULT); - break; - case DIV: - t = jj_consume_token(DIV); - break; - default: - jj_la1[45] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - jjtn000.ops.add(new Integer(t.kind)); - ArithmeticFactor(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ArithmeticFactor() throws ParseException { - /*@bgen(jjtree) ArithmeticFactor */ - ASTArithmeticFactor jjtn000 = new ASTArithmeticFactor(JJTARITHMETICFACTOR); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t=null; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case MINUS: - case PLUS: - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case PLUS: - t = jj_consume_token(PLUS); - break; - case MINUS: - t = jj_consume_token(MINUS); - break; - default: - jj_la1[46] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - default: - jj_la1[47] = jj_gen; - ; - } - ArithmeticPrimary(); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.ops.add(new Integer((t!=null)?t.kind:EJBQLConstants.PLUS)); - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ArithmeticPrimary() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - CmpPathExpression(); - break; - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - ArithmeticLiteral(); - break; - case LPAREN: - jj_consume_token(LPAREN); - ArithmeticExpression(); - jj_consume_token(RPAREN); - break; - case input_parameter: - InputParameter(); - break; - case ABS: - case LENGTH: - case LOCATE: - case MOD: - case SQRT: - FunctionsReturningNumerics(); - break; - default: - jj_la1[48] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void StringValue() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - CmpPathExpression(); - break; - case CONCAT: - case SUBSTRING: - FunctionsReturningStrings(); - break; - default: - jj_la1[49] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void StringExpression() throws ParseException { - /*@bgen(jjtree) StringExpression */ - ASTStringExpression jjtn000 = new ASTStringExpression(JJTSTRINGEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case LPAREN: - case CONCAT: - case SUBSTRING: - case string_literal: - case IDENTIFIER: - StringPrimary(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[50] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void StringPrimary() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - CmpPathExpression(); - break; - case string_literal: - StringLiteral(); - break; - case LPAREN: - jj_consume_token(LPAREN); - StringExpression(); - jj_consume_token(RPAREN); - break; - case CONCAT: - case SUBSTRING: - FunctionsReturningStrings(); - break; - default: - jj_la1[51] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void DatetimeValue() throws ParseException { - CmpPathExpression(); - } - - final public void DatetimeExpression() throws ParseException { - /*@bgen(jjtree) DatetimeExpression */ - ASTDatetimeExpression jjtn000 = new ASTDatetimeExpression(JJTDATETIMEEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - DatetimeValue(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[52] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void BooleanValue() throws ParseException { - CmpPathExpression(); - } - - final public void BooleanExpression() throws ParseException { - /*@bgen(jjtree) BooleanExpression */ - ASTBooleanExpression jjtn000 = new ASTBooleanExpression(JJTBOOLEANEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t=null; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - CmpPathExpression(); - break; - case FALSE: - case TRUE: - BooleanLiteral(); - break; - case input_parameter: - InputParameter(); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - if (t!=null) jjtn000.ops.add(new Integer(t.kind)); - break; - default: - jj_la1[53] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void EntityBeanValue() throws ParseException { - if (jj_2_18(2)) { - SingleValuedCmrPathExpression(); - } else if (jj_2_19(2)) { - IdentificationVariable(); - } else { - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void EntityBeanExpression() throws ParseException { - /*@bgen(jjtree) EntityBeanExpression */ - ASTEntityBeanExpression jjtn000 = new ASTEntityBeanExpression(JJTENTITYBEANEXPRESSION); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case IDENTIFIER: - EntityBeanValue(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[54] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void FunctionsReturningStrings() throws ParseException { - /*@bgen(jjtree) FunctionsReturningStrings */ - ASTFunctionsReturningStrings jjtn000 = new ASTFunctionsReturningStrings(JJTFUNCTIONSRETURNINGSTRINGS); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case CONCAT: - t = jj_consume_token(CONCAT); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - StringExpression(); - jj_consume_token(COMMA); - StringExpression(); - jj_consume_token(RPAREN); - break; - case SUBSTRING: - t = jj_consume_token(SUBSTRING); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - StringExpression(); - jj_consume_token(COMMA); - ArithmeticExpression(); - jj_consume_token(COMMA); - ArithmeticExpression(); - jj_consume_token(RPAREN); - break; - default: - jj_la1[55] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void FunctionsReturningNumerics() throws ParseException { - /*@bgen(jjtree) FunctionsReturningNumerics */ - ASTFunctionsReturningNumerics jjtn000 = new ASTFunctionsReturningNumerics(JJTFUNCTIONSRETURNINGNUMERICS); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case LENGTH: - t = jj_consume_token(LENGTH); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - StringExpression(); - jj_consume_token(RPAREN); - break; - case LOCATE: - t = jj_consume_token(LOCATE); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - StringExpression(); - jj_consume_token(COMMA); - StringExpression(); - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case COMMA: - jj_consume_token(COMMA); - jjtn000.third=true; - ArithmeticExpression(); - break; - default: - jj_la1[56] = jj_gen; - ; - } - jj_consume_token(RPAREN); - break; - case ABS: - t = jj_consume_token(ABS); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - ArithmeticExpression(); - jj_consume_token(RPAREN); - break; - case SQRT: - t = jj_consume_token(SQRT); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - ArithmeticExpression(); - jj_consume_token(RPAREN); - break; - case MOD: - t = jj_consume_token(MOD); - jjtn000.ops.add(new Integer(t.kind)); - jj_consume_token(LPAREN); - ArithmeticExpression(); - jj_consume_token(COMMA); - ArithmeticExpression(); - jj_consume_token(RPAREN); - break; - default: - jj_la1[57] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void PatternValue() throws ParseException { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case string_literal: - StringLiteral(); - break; - case input_parameter: - InputParameter(); - break; - default: - jj_la1[58] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } - - final public void EscapeCharacter() throws ParseException { - StringLiteral(); - } - - final public void AbstractSchemaName() throws ParseException { - /*@bgen(jjtree) AbstractSchemaName */ - ASTAbstractSchemaName jjtn000 = new ASTAbstractSchemaName(JJTABSTRACTSCHEMANAME); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(IDENTIFIER); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= t.image; - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void IdentificationVariable() throws ParseException { - /*@bgen(jjtree) IdentificationVariable */ - ASTIdentificationVariable jjtn000 = new ASTIdentificationVariable(JJTIDENTIFICATIONVARIABLE); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(IDENTIFIER); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= t.image; - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void Identifier() throws ParseException { - /*@bgen(jjtree) Identifier */ - ASTIdentifier jjtn000 = new ASTIdentifier(JJTIDENTIFIER); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(IDENTIFIER); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= t.image; - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void Path() throws ParseException { - /*@bgen(jjtree) Path */ - ASTPath jjtn000 = new ASTPath(JJTPATH); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(IDENTIFIER); - jjtn000.value= t.image; - jj_consume_token(DOT); - t = jj_consume_token(IDENTIFIER); - jjtn000.value = jjtn000.value + "."+t.image; - label_8: - while (true) { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case DOT: - ; - break; - default: - jj_la1[59] = jj_gen; - break label_8; - } - jj_consume_token(DOT); - t = jj_consume_token(IDENTIFIER); - jjtn000.value = jjtn000.value + "."+t.image; - } - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void Literal() throws ParseException { - /*@bgen(jjtree) Literal */ - ASTLiteral jjtn000 = new ASTLiteral(JJTLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case string_literal: - StringLiteral(); - break; - case INTEGER_LITERAL: - case FLOATING_POINT_LITERAL: - ArithmeticLiteral(); - break; - case FALSE: - case TRUE: - BooleanLiteral(); - break; - default: - jj_la1[60] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void StringLiteral() throws ParseException { - /*@bgen(jjtree) StringLiteral */ - ASTStringLiteral jjtn000 = new ASTStringLiteral(JJTSTRINGLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(string_literal); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= t.image.substring(1,t.image.length()-1); - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void ArithmeticLiteral() throws ParseException { - /*@bgen(jjtree) ArithmeticLiteral */ - ASTArithmeticLiteral jjtn000 = new ASTArithmeticLiteral(JJTARITHMETICLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000); - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case INTEGER_LITERAL: - IntegerLiteral(); - break; - case FLOATING_POINT_LITERAL: - FloatingPointLiteral(); - break; - default: - jj_la1[61] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void IntegerLiteral() throws ParseException { - /*@bgen(jjtree) IntegerLiteral */ - ASTIntegerLiteral jjtn000 = new ASTIntegerLiteral(JJTINTEGERLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(INTEGER_LITERAL); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= new Long(t.image); - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void FloatingPointLiteral() throws ParseException { - /*@bgen(jjtree) FloatingPointLiteral */ - ASTFloatingPointLiteral jjtn000 = new ASTFloatingPointLiteral(JJTFLOATINGPOINTLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(FLOATING_POINT_LITERAL); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= new Double(t.image); - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void BooleanLiteral() throws ParseException { - /*@bgen(jjtree) BooleanLiteral */ - ASTBooleanLiteral jjtn000 = new ASTBooleanLiteral(JJTBOOLEANLITERAL); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case TRUE: - t = jj_consume_token(TRUE); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= Boolean.TRUE; - break; - case FALSE: - t = jj_consume_token(FALSE); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= Boolean.FALSE; - break; - default: - jj_la1[62] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final public void InputParameter() throws ParseException { - /*@bgen(jjtree) InputParameter */ - ASTInputParameter jjtn000 = new ASTInputParameter(JJTINPUTPARAMETER); - boolean jjtc000 = true; - jjtree.openNodeScope(jjtn000);Token t; - try { - t = jj_consume_token(input_parameter); - jjtree.closeNodeScope(jjtn000, true); - jjtc000 = false; - jjtn000.value= new Integer(t.image.substring(1)); - } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - } - } - } - - final private boolean jj_2_1(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_1(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(0, xla); } - } - - final private boolean jj_2_2(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_2(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(1, xla); } - } - - final private boolean jj_2_3(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_3(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(2, xla); } - } - - final private boolean jj_2_4(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_4(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(3, xla); } - } - - final private boolean jj_2_5(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_5(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(4, xla); } - } - - final private boolean jj_2_6(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_6(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(5, xla); } - } - - final private boolean jj_2_7(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_7(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(6, xla); } - } - - final private boolean jj_2_8(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_8(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(7, xla); } - } - - final private boolean jj_2_9(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_9(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(8, xla); } - } - - final private boolean jj_2_10(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_10(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(9, xla); } - } - - final private boolean jj_2_11(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_11(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(10, xla); } - } - - final private boolean jj_2_12(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_12(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(11, xla); } - } - - final private boolean jj_2_13(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_13(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(12, xla); } - } - - final private boolean jj_2_14(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_14(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(13, xla); } - } - - final private boolean jj_2_15(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_15(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(14, xla); } - } - - final private boolean jj_2_16(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_16(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(15, xla); } - } - - final private boolean jj_2_17(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_17(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(16, xla); } - } - - final private boolean jj_2_18(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_18(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(17, xla); } - } - - final private boolean jj_2_19(int xla) { - jj_la = xla; jj_lastpos = jj_scanpos = token; - try { return !jj_3_19(); } - catch(LookaheadSuccess ls) { return true; } - finally { jj_save(18, xla); } - } - - final private boolean jj_3R_120() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_102() { - if (jj_3R_95()) return true; - return false; - } - - final private boolean jj_3R_23() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3_1() { - if (jj_3R_9()) return true; - return false; - } - - final private boolean jj_3R_69() { - if (jj_3R_25()) return true; - return false; - } - - final private boolean jj_3R_26() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_69()) { - jj_scanpos = xsp; - if (jj_3R_70()) return true; - } - return false; - } - - final private boolean jj_3R_65() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_63() { - if (jj_3R_87()) return true; - return false; - } - - final private boolean jj_3R_25() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_122() { - if (jj_3R_90()) return true; - return false; - } - - final private boolean jj_3R_119() { - if (jj_3R_116()) return true; - return false; - } - - final private boolean jj_3R_101() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_88() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_101()) { - jj_scanpos = xsp; - if (jj_3R_102()) { - jj_scanpos = xsp; - if (jj_3R_103()) { - jj_scanpos = xsp; - if (jj_3R_104()) return true; - } - } - } - return false; - } - - final private boolean jj_3R_64() { - if (jj_3R_88()) return true; - return false; - } - - final private boolean jj_3R_22() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_64()) { - jj_scanpos = xsp; - if (jj_3R_65()) return true; - } - return false; - } - - final private boolean jj_3R_62() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_21() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_62()) { - jj_scanpos = xsp; - if (jj_3R_63()) return true; - } - return false; - } - - final private boolean jj_3R_92() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(6)) { - jj_scanpos = xsp; - if (jj_scan_token(11)) return true; - } - if (jj_3R_91()) return true; - return false; - } - - final private boolean jj_3R_121() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_118() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_113() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_118()) { - jj_scanpos = xsp; - if (jj_3R_119()) { - jj_scanpos = xsp; - if (jj_3R_120()) { - jj_scanpos = xsp; - if (jj_3R_121()) { - jj_scanpos = xsp; - if (jj_3R_122()) return true; - } - } - } - } - return false; - } - - final private boolean jj_3R_76() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)) { - jj_scanpos = xsp; - if (jj_scan_token(5)) return true; - } - if (jj_3R_75()) return true; - return false; - } - - final private boolean jj_3R_74() { - if (jj_3R_90()) return true; - return false; - } - - final private boolean jj_3R_117() { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_30()) return true; - return false; - } - - final private boolean jj_3R_112() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(8)) { - jj_scanpos = xsp; - if (jj_scan_token(5)) return true; - } - return false; - } - - final private boolean jj_3R_91() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_112()) jj_scanpos = xsp; - if (jj_3R_113()) return true; - return false; - } - - final private boolean jj_3R_58() { - if (jj_3R_31()) return true; - return false; - } - - final private boolean jj_3R_84() { - if (jj_scan_token(input_parameter)) return true; - return false; - } - - final private boolean jj_3R_98() { - if (jj_3R_89()) return true; - return false; - } - - final private boolean jj_3R_75() { - if (jj_3R_91()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_92()) { jj_scanpos = xsp; break; } - } - return false; - } - - final private boolean jj_3R_19() { - if (jj_3R_31()) return true; - return false; - } - - final private boolean jj_3R_106() { - if (jj_scan_token(FALSE)) return true; - return false; - } - - final private boolean jj_3R_124() { - if (jj_3R_126()) return true; - return false; - } - - final private boolean jj_3R_105() { - if (jj_scan_token(TRUE)) return true; - return false; - } - - final private boolean jj_3R_89() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_105()) { - jj_scanpos = xsp; - if (jj_3R_106()) return true; - } - return false; - } - - final private boolean jj_3R_30() { - if (jj_3R_75()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_76()) { jj_scanpos = xsp; break; } - } - return false; - } - - final private boolean jj_3R_47() { - if (jj_3R_31()) return true; - return false; - } - - final private boolean jj_3_17() { - if (jj_3R_29()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_30()) return true; - return false; - } - - final private boolean jj_3_16() { - if (jj_3R_27()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - if (jj_3R_28()) return true; - return false; - } - - final private boolean jj_3R_126() { - if (jj_scan_token(FLOATING_POINT_LITERAL)) return true; - return false; - } - - final private boolean jj_3R_73() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_29() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_73()) { - jj_scanpos = xsp; - if (jj_3R_74()) return true; - } - return false; - } - - final private boolean jj_3R_9() { - if (jj_3R_31()) return true; - return false; - } - - final private boolean jj_3_15() { - if (jj_3R_25()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_26()) return true; - return false; - } - - final private boolean jj_3_14() { - if (jj_3R_23()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - if (jj_3R_24()) return true; - return false; - } - - final private boolean jj_3R_125() { - if (jj_scan_token(INTEGER_LITERAL)) return true; - return false; - } - - final private boolean jj_3_13() { - if (jj_3R_21()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_22()) return true; - return false; - } - - final private boolean jj_3R_45() { - if (jj_3R_29()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_30()) return true; - return false; - } - - final private boolean jj_3R_56() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_97() { - if (jj_3R_116()) return true; - return false; - } - - final private boolean jj_3R_44() { - if (jj_3R_27()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - if (jj_3R_28()) return true; - return false; - } - - final private boolean jj_3R_43() { - if (jj_3R_25()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_26()) return true; - return false; - } - - final private boolean jj_3R_123() { - if (jj_3R_125()) return true; - return false; - } - - final private boolean jj_3R_116() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_123()) { - jj_scanpos = xsp; - if (jj_3R_124()) return true; - } - return false; - } - - final private boolean jj_3R_42() { - if (jj_3R_23()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - if (jj_3R_24()) return true; - return false; - } - - final private boolean jj_3R_12() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_41()) { - jj_scanpos = xsp; - if (jj_3R_42()) { - jj_scanpos = xsp; - if (jj_3R_43()) { - jj_scanpos = xsp; - if (jj_3R_44()) { - jj_scanpos = xsp; - if (jj_3R_45()) return true; - } - } - } - } - return false; - } - - final private boolean jj_3R_41() { - if (jj_3R_21()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(9)) { - jj_scanpos = xsp; - if (jj_scan_token(13)) { - jj_scanpos = xsp; - if (jj_scan_token(7)) { - jj_scanpos = xsp; - if (jj_scan_token(18)) { - jj_scanpos = xsp; - if (jj_scan_token(10)) { - jj_scanpos = xsp; - if (jj_scan_token(16)) return true; - } - } - } - } - } - if (jj_3R_22()) return true; - return false; - } - - final private boolean jj_3R_61() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_50() { - if (jj_scan_token(ESCAPE)) return true; - if (jj_3R_82()) return true; - return false; - } - - final private boolean jj_3R_95() { - if (jj_scan_token(string_literal)) return true; - return false; - } - - final private boolean jj_3R_86() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_60() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3_12() { - if (jj_3R_20()) return true; - return false; - } - - final private boolean jj_3R_53() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3_11() { - if (jj_3R_19()) return true; - return false; - } - - final private boolean jj_3R_48() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_18() { - Token xsp; - xsp = jj_scanpos; - if (jj_3_11()) { - jj_scanpos = xsp; - if (jj_3_12()) { - jj_scanpos = xsp; - if (jj_3R_60()) return true; - } - } - xsp = jj_scanpos; - if (jj_3R_61()) jj_scanpos = xsp; - if (jj_scan_token(MEMBER)) return true; - xsp = jj_scanpos; - if (jj_scan_token(45)) jj_scanpos = xsp; - if (jj_3R_58()) return true; - return false; - } - - final private boolean jj_3R_96() { - if (jj_3R_95()) return true; - return false; - } - - final private boolean jj_3R_83() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_96()) { - jj_scanpos = xsp; - if (jj_3R_97()) { - jj_scanpos = xsp; - if (jj_3R_98()) return true; - } - } - return false; - } - - final private boolean jj_3R_59() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_77() { - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - final private boolean jj_3R_17() { - if (jj_3R_58()) return true; - if (jj_scan_token(IS)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_59()) jj_scanpos = xsp; - if (jj_scan_token(EMPTY)) return true; - return false; - } - - final private boolean jj_3R_51() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_85() { - if (jj_3R_83()) return true; - return false; - } - - final private boolean jj_3R_57() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_31() { - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_77()) { jj_scanpos = xsp; break; } - } - return false; - } - - final private boolean jj_3R_52() { - if (jj_3R_83()) return true; - return false; - } - - final private boolean jj_3R_46() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_55() { - if (jj_3R_9()) return true; - return false; - } - - final private boolean jj_3R_16() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_55()) { - jj_scanpos = xsp; - if (jj_3R_56()) return true; - } - if (jj_scan_token(IS)) return true; - xsp = jj_scanpos; - if (jj_3R_57()) jj_scanpos = xsp; - if (jj_scan_token(NULL)) return true; - return false; - } - - final private boolean jj_3R_54() { - if (jj_scan_token(COMMA)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_85()) { - jj_scanpos = xsp; - if (jj_3R_86()) return true; - } - return false; - } - - final private boolean jj_3R_14() { - if (jj_3R_47()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_48()) jj_scanpos = xsp; - if (jj_scan_token(LIKE)) return true; - if (jj_3R_49()) return true; - xsp = jj_scanpos; - if (jj_3R_50()) jj_scanpos = xsp; - return false; - } - - final private boolean jj_3R_20() { - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - final private boolean jj_3R_15() { - if (jj_3R_47()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_51()) jj_scanpos = xsp; - if (jj_scan_token(IN)) return true; - if (jj_scan_token(LPAREN)) return true; - xsp = jj_scanpos; - if (jj_3R_52()) { - jj_scanpos = xsp; - if (jj_3R_53()) return true; - } - while (true) { - xsp = jj_scanpos; - if (jj_3R_54()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3_10() { - if (jj_3R_18()) return true; - return false; - } - - final private boolean jj_3R_81() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3_9() { - if (jj_3R_17()) return true; - return false; - } - - final private boolean jj_3_8() { - if (jj_3R_16()) return true; - return false; - } - - final private boolean jj_3_7() { - if (jj_3R_15()) return true; - return false; - } - - final private boolean jj_3_6() { - if (jj_3R_14()) return true; - return false; - } - - final private boolean jj_3_19() { - if (jj_3R_20()) return true; - return false; - } - - final private boolean jj_3R_13() { - if (jj_3R_30()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_46()) jj_scanpos = xsp; - if (jj_scan_token(BETWEEN)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(AND)) return true; - if (jj_3R_30()) return true; - return false; - } - - final private boolean jj_3_5() { - if (jj_3R_13()) return true; - return false; - } - - final private boolean jj_3R_104() { - if (jj_3R_87()) return true; - return false; - } - - final private boolean jj_3_4() { - if (jj_3R_12()) return true; - return false; - } - - final private boolean jj_3R_38() { - if (jj_3R_18()) return true; - return false; - } - - final private boolean jj_3R_37() { - if (jj_3R_17()) return true; - return false; - } - - final private boolean jj_3R_36() { - if (jj_3R_16()) return true; - return false; - } - - final private boolean jj_3R_82() { - if (jj_3R_95()) return true; - return false; - } - - final private boolean jj_3_3() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_11()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_35() { - if (jj_3R_15()) return true; - return false; - } - - final private boolean jj_3R_34() { - if (jj_3R_14()) return true; - return false; - } - - final private boolean jj_3R_33() { - if (jj_3R_13()) return true; - return false; - } - - final private boolean jj_3_2() { - if (jj_3R_10()) return true; - return false; - } - - final private boolean jj_3R_79() { - if (jj_scan_token(AND)) return true; - if (jj_3R_78()) return true; - return false; - } - - final private boolean jj_3R_10() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_32()) { - jj_scanpos = xsp; - if (jj_3R_33()) { - jj_scanpos = xsp; - if (jj_3R_34()) { - jj_scanpos = xsp; - if (jj_3R_35()) { - jj_scanpos = xsp; - if (jj_3R_36()) { - jj_scanpos = xsp; - if (jj_3R_37()) { - jj_scanpos = xsp; - if (jj_3R_38()) return true; - } - } - } - } - } - } - return false; - } - - final private boolean jj_3R_32() { - if (jj_3R_12()) return true; - return false; - } - - final private boolean jj_3R_80() { - if (jj_3R_95()) return true; - return false; - } - - final private boolean jj_3R_68() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_49() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_80()) { - jj_scanpos = xsp; - if (jj_3R_81()) return true; - } - return false; - } - - final private boolean jj_3R_115() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_11()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_111() { - if (jj_scan_token(MOD)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_110() { - if (jj_scan_token(SQRT)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_72() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_109() { - if (jj_scan_token(ABS)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_108() { - if (jj_scan_token(LOCATE)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_22()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_117()) jj_scanpos = xsp; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_40() { - if (jj_scan_token(OR)) return true; - if (jj_3R_39()) return true; - return false; - } - - final private boolean jj_3R_114() { - if (jj_3R_10()) return true; - return false; - } - - final private boolean jj_3R_94() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_114()) { - jj_scanpos = xsp; - if (jj_3R_115()) return true; - } - return false; - } - - final private boolean jj_3R_107() { - if (jj_scan_token(LENGTH)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_90() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_107()) { - jj_scanpos = xsp; - if (jj_3R_108()) { - jj_scanpos = xsp; - if (jj_3R_109()) { - jj_scanpos = xsp; - if (jj_3R_110()) { - jj_scanpos = xsp; - if (jj_3R_111()) return true; - } - } - } - } - return false; - } - - final private boolean jj_3R_93() { - if (jj_scan_token(NOT)) return true; - return false; - } - - final private boolean jj_3R_78() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_93()) jj_scanpos = xsp; - if (jj_3R_94()) return true; - return false; - } - - final private boolean jj_3R_100() { - if (jj_scan_token(SUBSTRING)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_30()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_99() { - if (jj_scan_token(CONCAT)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_87() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_99()) { - jj_scanpos = xsp; - if (jj_3R_100()) return true; - } - return false; - } - - final private boolean jj_3R_67() { - if (jj_3R_89()) return true; - return false; - } - - final private boolean jj_3R_39() { - if (jj_3R_78()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_79()) { jj_scanpos = xsp; break; } - } - return false; - } - - final private boolean jj_3R_103() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_22()) return true; - if (jj_scan_token(RPAREN)) return true; - return false; - } - - final private boolean jj_3R_71() { - if (jj_3R_27()) return true; - return false; - } - - final private boolean jj_3R_28() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_71()) { - jj_scanpos = xsp; - if (jj_3R_72()) return true; - } - return false; - } - - final private boolean jj_3R_11() { - if (jj_3R_39()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_40()) { jj_scanpos = xsp; break; } - } - return false; - } - - final private boolean jj_3_18() { - if (jj_3R_19()) return true; - return false; - } - - final private boolean jj_3R_27() { - Token xsp; - xsp = jj_scanpos; - if (jj_3_18()) { - jj_scanpos = xsp; - if (jj_3_19()) return true; - } - return false; - } - - final private boolean jj_3R_70() { - if (jj_3R_84()) return true; - return false; - } - - final private boolean jj_3R_66() { - if (jj_3R_47()) return true; - return false; - } - - final private boolean jj_3R_24() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_66()) { - jj_scanpos = xsp; - if (jj_3R_67()) { - jj_scanpos = xsp; - if (jj_3R_68()) return true; - } - } - return false; - } - - public EJBQLTokenManager token_source; - SimpleCharStream jj_input_stream; - public Token token, jj_nt; - private int jj_ntk; - private Token jj_scanpos, jj_lastpos; - private int jj_la; - public boolean lookingAhead = false; - private boolean jj_semLA; - private int jj_gen; - final private int[] jj_la1 = new int[63]; - static private int[] jj_la1_0; - static private int[] jj_la1_1; - static private int[] jj_la1_2; - static { - jj_la1_0(); - jj_la1_1(); - jj_la1_2(); - } - private static void jj_la1_0() { - jj_la1_0 = new int[] {0x0,0x0,0x0,0x4000,0x0,0x200000,0x200000,0x10000000,0x4800000,0x4800000,0x800000,0x10000000,0x10000000,0x0,0x4800000,0x4000,0x8400000,0x8400000,0x4000,0x0,0x0,0x100000,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x52680,0x10200,0x52680,0x10200,0x52680,0x80000,0x120,0x120,0x840,0x840,0x120,0x120,0xa0000,0x2000000,0x2020000,0x2020000,0x0,0x0,0x0,0x2000000,0x4000,0x80000,0x0,0x1000,0x0,0x0,0x0,}; - } - private static void jj_la1_1() { - jj_la1_1 = new int[] {0x100000,0x8000,0x10,0x0,0x80000001,0x0,0x0,0x0,0x80081140,0x80080140,0x80140,0x0,0x0,0x80000000,0x80140,0x0,0x0,0x0,0x0,0x2400000,0x4000,0x0,0x400,0x400,0x400,0x23e00000,0x0,0x23e00000,0x400,0x0,0x80400000,0x400,0x400,0x400000,0x400,0x2000,0x0,0x0,0x0,0x0,0x0,0x80020224,0x0,0x0,0x0,0x0,0x0,0x0,0xa2420224,0x80040000,0x80640000,0x80240000,0x80400000,0x81c00000,0x80400000,0x40000,0x0,0x20224,0x600000,0x0,0x23a00000,0x22000000,0x1800000,}; - } - private static void jj_la1_2() { - jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; - } - final private JJCalls[] jj_2_rtns = new JJCalls[19]; - private boolean jj_rescan = false; - private int jj_gc = 0; - - public EJBQL(java.io.InputStream stream) { - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new EJBQLTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.InputStream stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public EJBQL(java.io.Reader stream) { - jj_input_stream = new SimpleCharStream(stream, 1, 1); - token_source = new EJBQLTokenManager(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(java.io.Reader stream) { - jj_input_stream.ReInit(stream, 1, 1); - token_source.ReInit(jj_input_stream); - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public EJBQL(EJBQLTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - public void ReInit(EJBQLTokenManager tm) { - token_source = tm; - token = new Token(); - jj_ntk = -1; - jjtree.reset(); - jj_gen = 0; - for (int i = 0; i < 63; i++) jj_la1[i] = -1; - for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); - } - - final private Token jj_consume_token(int kind) throws ParseException { - Token oldToken; - if ((oldToken = token).next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - if (token.kind == kind) { - jj_gen++; - if (++jj_gc > 100) { - jj_gc = 0; - for (int i = 0; i < jj_2_rtns.length; i++) { - JJCalls c = jj_2_rtns[i]; - while (c != null) { - if (c.gen < jj_gen) c.first = null; - c = c.next; - } - } - } - return token; - } - token = oldToken; - jj_kind = kind; - throw generateParseException(); - } - - static private final class LookaheadSuccess extends java.lang.Error { } - final private LookaheadSuccess jj_ls = new LookaheadSuccess(); - final private boolean jj_scan_token(int kind) { - if (jj_scanpos == jj_lastpos) { - jj_la--; - if (jj_scanpos.next == null) { - jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken(); - } else { - jj_lastpos = jj_scanpos = jj_scanpos.next; - } - } else { - jj_scanpos = jj_scanpos.next; - } - if (jj_rescan) { - int i = 0; Token tok = token; - while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; } - if (tok != null) jj_add_error_token(kind, i); - } - if (jj_scanpos.kind != kind) return true; - if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls; - return false; - } - - final public Token getNextToken() { - if (token.next != null) token = token.next; - else token = token.next = token_source.getNextToken(); - jj_ntk = -1; - jj_gen++; - return token; - } - - final public Token getToken(int index) { - Token t = lookingAhead ? jj_scanpos : token; - for (int i = 0; i < index; i++) { - if (t.next != null) t = t.next; - else t = t.next = token_source.getNextToken(); - } - return t; - } - - final private int jj_ntk() { - if ((jj_nt=token.next) == null) - return (jj_ntk = (token.next=token_source.getNextToken()).kind); - else - return (jj_ntk = jj_nt.kind); - } - - private java.util.Vector jj_expentries = new java.util.Vector(); - private int[] jj_expentry; - private int jj_kind = -1; - private int[] jj_lasttokens = new int[100]; - private int jj_endpos; - - private void jj_add_error_token(int kind, int pos) { - if (pos >= 100) return; - if (pos == jj_endpos + 1) { - jj_lasttokens[jj_endpos++] = kind; - } else if (jj_endpos != 0) { - jj_expentry = new int[jj_endpos]; - for (int i = 0; i < jj_endpos; i++) { - jj_expentry[i] = jj_lasttokens[i]; - } - boolean exists = false; - for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) { - int[] oldentry = (int[])(e.nextElement()); - if (oldentry.length == jj_expentry.length) { - exists = true; - for (int i = 0; i < jj_expentry.length; i++) { - if (oldentry[i] != jj_expentry[i]) { - exists = false; - break; - } - } - if (exists) break; - } - } - if (!exists) jj_expentries.addElement(jj_expentry); - if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; - } - } - - public ParseException generateParseException() { - jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[66]; - for (int i = 0; i < 66; i++) { - la1tokens[i] = false; - } - if (jj_kind >= 0) { - la1tokens[jj_kind] = true; - jj_kind = -1; - } - for (int i = 0; i < 63; i++) { - if (jj_la1[i] == jj_gen) { - for (int j = 0; j < 32; j++) { - if ((jj_la1_0[i] & (1< jj_gen) { - jj_la = p.arg; jj_lastpos = jj_scanpos = p.first; - switch (i) { - case 0: jj_3_1(); break; - case 1: jj_3_2(); break; - case 2: jj_3_3(); break; - case 3: jj_3_4(); break; - case 4: jj_3_5(); break; - case 5: jj_3_6(); break; - case 6: jj_3_7(); break; - case 7: jj_3_8(); break; - case 8: jj_3_9(); break; - case 9: jj_3_10(); break; - case 10: jj_3_11(); break; - case 11: jj_3_12(); break; - case 12: jj_3_13(); break; - case 13: jj_3_14(); break; - case 14: jj_3_15(); break; - case 15: jj_3_16(); break; - case 16: jj_3_17(); break; - case 17: jj_3_18(); break; - case 18: jj_3_19(); break; - } - } - p = p.next; - } while (p != null); - } - jj_rescan = false; - } - - final private void jj_save(int index, int xla) { - JJCalls p = jj_2_rtns[index]; - while (p.gen > jj_gen) { - if (p.next == null) { p = p.next = new JJCalls(); break; } - p = p.next; - } - p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla; - } - - static final class JJCalls { - int gen; - Token first; - int arg; - JJCalls next; - } - -} diff --git a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.jjt b/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.jjt deleted file mode 100644 index 9c885e8c16..0000000000 --- a/jonas/modules/libraries/jonas-deployment/src/main/java/org/ow2/jonas/deployment/ejb/ejbql/EJBQL.jjt +++ /dev/null @@ -1,668 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * Initial developer(s): Christophe Ney for France Telecom. - * Contributor(s): - * - * -------------------------------------------------------------------------- - * $Id:EJBQL.jjt 11129 2007-08-03 07:15:41Z durieuxp $ - * -------------------------------------------------------------------------- - */ - - -/** -* This is the JJTree grammar file that was used to generate -* All files of this package -* @author Christophe Ney [cney@batisseurs.com] -* contributor(s): -* - Helene Joanin: Fix the bug about the unary minus operator. -* - Helene Joanin: Add the flag 'third' for operator with optional third operand. -* - Helene Joanin: Add the counter 'opNbEnum' for the IN operator -* to count the number of string_literal. -* - Helene Joanin: Add the ORDER BY clause -* - Helene Joanin: Take into account the EJBQL version 2.1 syntax -* - Cyrille Blot: Add the LIMIT clause -* -**/ - -options { - // javacc options - LOOKAHEAD = 1; - CHOICE_AMBIGUITY_CHECK = 2; - OTHER_AMBIGUITY_CHECK = 1; - STATIC = false; - DEBUG_PARSER = false; - DEBUG_LOOKAHEAD = false; - DEBUG_TOKEN_MANAGER = false; - ERROR_REPORTING = true; - JAVA_UNICODE_ESCAPE = false; - UNICODE_INPUT = false; - IGNORE_CASE = false; - USER_TOKEN_MANAGER = false; - USER_CHAR_STREAM = false; - BUILD_PARSER = true; - BUILD_TOKEN_MANAGER = true; - SANITY_CHECK = true; - FORCE_LA_CHECK = false; - - // jjtree options - BUILD_NODE_FILES=true; // this creates all AST* classes - MULTI=true; - VISITOR=true; // create a visitor method - NODE_FACTORY= false; // build nodes using a factory - NODE_PACKAGE=""; // package of node classes - NODE_PREFIX="AST"; //prefix for generated classes -} - - -PARSER_BEGIN(EJBQL) - -package org.ow2.jonas.deployment.ejb.ejbql; - -public class EJBQL { -} - -PARSER_END(EJBQL) - -SimpleNode EJBQL() : -{} -{ - SelectClause() FromClause() ( WhereClause() )? ( OrderByClause() )? ( LimitClause() )? - { return jjtThis; } -} - -void FromClause() : -{} -{ - IdentificationVariableDeclaration() ( IdentificationVariableDeclaration() )* - -} - -void IdentificationVariableDeclaration() #void : -{} -{ - CollectionMemberDeclaration() | RangeVariableDeclaration() - -} - -void CollectionMemberDeclaration() : -{} -{ - CollectionValuedPathExpression() ( )? Identifier() -} - -void RangeVariableDeclaration() : -{} -{ - AbstractSchemaName() ( )? Identifier() - -} - -void SingleValuedPathExpression() : -{} -{ - Path() -} - -void CmpPathExpression() : -{} -{ - Path() -} - -void SingleValuedCmrPathExpression() : -{} -{ - Path() -} - -void CollectionValuedPathExpression() : -{} -{ - Path() -} - -void SelectClause() : -{} -{ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/bootstrap/ant/src/main/resources/org/ow2/jonas/ant/antlib.xml b/jonas/modules/services/bootstrap/ant/src/main/resources/org/ow2/jonas/ant/antlib.xml deleted file mode 100644 index efbaad94d0..0000000000 --- a/jonas/modules/services/bootstrap/ant/src/main/resources/org/ow2/jonas/ant/antlib.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/bootstrap/core-for-addons/pom.xml b/jonas/modules/services/bootstrap/core-for-addons/pom.xml deleted file mode 100644 index ad01cdffcf..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/pom.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - bootstrap - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - org.ow2.jonas - bootstrap-core-for-addons - JOnAS :: Services :: Bootstrap :: Core for Addons - bundle - - - - org.osgi - org.osgi.compendium - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - org.ow2.bundles - util-plan-repository-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-reader - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deployer - ${ow2-bundles.version} - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - - src/main/jonas-resources/conf - true - - banner.txt - - - - - src/main/jonas-resources/conf - false - - banner.txt - - - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - ${project.build.directory}/extra-resources - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java deleted file mode 100644 index fca98bc892..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java +++ /dev/null @@ -1,491 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceReference; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.osgi.service.cm.ConfigurationPlugin; -import org.ow2.jonas.configuration.ConfigurationManager; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.properties.ServiceProperties; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * JOnAS Configuration component. - * @author Francois Fornaciari - * Contributor(s): Jeremy Cazaux (support to ServiceProperties) - */ -public class JOnASConfiguration implements ConfigurationManager, ConfigurationPlugin { - - /** - * Reference to the {@link org.osgi.service.cm.ConfigurationAdmin} service. - */ - private ConfigurationAdmin configurationAdmin = null; - - /** - * Property name for the service name. - */ - private static final String JONAS_SERVICE = "jonas.service"; - - /** - * OSGi {@link org.osgi.framework.BundleContext}. - */ - private BundleContext bc = null; - - /** - * Mandatory JOnAS services. - */ - private List mandatoryServices = null; - - /** - * Management loggers. - */ - private Log logger = LogFactory.getLog(JOnASConfiguration.class); - - /** - * JOnAS Server properties. - */ - private JProp serverProperties = null; - - /** - * Last modification date of the jonas.properties file. - */ - private long lastModified; - - /** - * List of {@link ServiceProperties} - */ - private List servicePropertiesList; - - /** - * Constructor used to retrieve the OSGi BundleContext. - * @param bc OSGi BundleContext - */ - public JOnASConfiguration(final BundleContext bc) { - this.bc = bc; - - // Initialize mandatory services list - mandatoryServices = new ArrayList(); - - // Registry is always mandatory and part of the autodeploy bundles - mandatoryServices.add("registry"); - - // Security is always mandatory and part of the autodeploy bundles - // See JIRA issues JONAS-224 and JONAS-280 - mandatoryServices.add("security"); - - // JMX is always mandatory and part of the autodeploy bundles - mandatoryServices.add("jmx"); - - // The discovery service must be added to mandatory services - if (getDeclaredServices().contains("discovery")) { - mandatoryServices.add("discovery"); - } - - //Initialize the list of ServiceProperties - this.servicePropertiesList = new ArrayList(); - } - - /** - * Method called when the Configuration Admin Service is bound to the component.
    - * This method creates service configurations for mandatory JOnAS services (regitry and jmx) - * @throws Exception Thrown if the configuration failed. - */ - public void configure() throws Exception { - // Delete all service configurations - deleteServiceConfigurations(); - - // Create service configurations for mandatory services only - manageServiceConfigurations(mandatoryServices, false); - - // The ServerProperties service must be registered after the configuration updates - // to avoid that services are started before they are configured - ServiceReference sr = bc.getServiceReference(ServerProperties.class.getName()); - if (sr == null) { - bc.registerService(ServerProperties.class.getName(), getServerProperties(), null); - } - } - - /** - * {@inheritDoc} - */ - public void haltServer() throws Exception { - // Stop the system bundle - bc.getBundle(0).stop(); - } - - /** - * {@inheritDoc} - */ - public synchronized void updateServiceConfiguration(final String service) throws Exception { - List services = new ArrayList(); - services.add(service); - manageServiceConfigurations(services, false); - } - - /** - * {@inheritDoc} - */ - public synchronized void deleteServiceConfiguration(final String service) throws Exception { - List services = new ArrayList(); - services.add(service); - manageServiceConfigurations(services, true); - } - - /** - * {@inheritDoc} - */ - public boolean matchService(final String service) { - String factoryPID = getFactoryPID(service); - return (factoryPID != null); - } - - /** - * Create, update or delete service configurations for the given services. - * @param services List of services to configure - * @param delete 'true' when configurations have to be delete - * @throws Exception If an exception occurs during configuration updates or deletions - */ - @SuppressWarnings("unchecked") - private void manageServiceConfigurations(final List services, final boolean delete) throws Exception { - for (String service : removeDuplicateServices(services)) { - - // Get the service properties - Dictionary newProperties = null; - - if (!delete) { - newProperties = getServiceProperties(service); - } - - // Get the configuration if exist - Configuration configuration = getConfiguration(service); - - // There is no stored configuration for this factory - if (!delete && configuration == null) { - // Create a configuration for this factory PID - configuration = configurationAdmin.createFactoryConfiguration(getFactoryPID(service), null); - - // Update the configuration - configuration.update(newProperties); - } else if (configuration != null) { - // A configuration already exists - configuration = configurationAdmin.getConfiguration(configuration.getPid(), null); - - if (delete) { - configuration.delete(); - } else { - // Look if service properties have been changed - Dictionary storedProperties = configuration.getProperties(); - if (isConfigurationModified(storedProperties, newProperties)) { - // Update the configuration - configuration.update(newProperties); - } - } - } - } - } - - /** - * Get mandatory services. - * @return Mandatory services - */ - public List getMandatoryServices() { - return mandatoryServices; - } - - /** - * Get all services. - * @return All services - */ - public List getAllServices() { - List allServices = getOptionalServices(); - - // Add mandatory services - for (int i = 0; i < mandatoryServices.size(); i++) { - allServices.add(i, mandatoryServices.get(i)); - } - - return allServices; - } - - /** - * Get optional services. - * @return Optional services - */ - public List getOptionalServices() { - List optionalServices = new ArrayList(); - - // Add optional services ignoring mandatory services - for (String declaredService : getDeclaredServices()) { - if (!mandatoryServices.contains(declaredService)) { - - //only add depmonitor,wc and wm optional services. Other optionnal services should be addons services. - // They should be started by the addon deployer (not by the ServiceManager or by the JEEServer) - if (declaredService.equals("depmonitor") || declaredService.equals("wm") || declaredService.equals("wc")) { - optionalServices.add(declaredService); - } - } - } - - return optionalServices; - } - - /** - * Get list of all declared services. - * @return Declared services - */ - private List getDeclaredServices() { - String[] declaredServices = getServerProperties().getValueAsArray("jonas.services"); - return Arrays.asList(declaredServices); - } - - /** - * Get all properties for a given JOnAS service name. - * @param service The given service name - * @return A Dictionary value representing all properties for a JOnAS service name - */ - public Dictionary getServiceProperties(final String service) { - JProp serverProperties = getServerProperties(); - Dictionary props = getServicesProperties(serverProperties.getConfigFileEnv(), service); - - if (props.isEmpty()) { - int i = 0; - while (i < servicePropertiesList.size() && props.isEmpty()) { - ServiceProperties serviceProperties = servicePropertiesList.get(i); - if (serviceProperties.getService().equals(service)) { - props = getServicesProperties(serviceProperties.getProperties(), service); - } - i++; - } - } - - // Add static properties - props.put(JONAS_SERVICE, service); - return props; - } - - /** - * Get all properties for a given JOnAS service name. - * @param properties The given properties - * @param service The given service name - * @return A Dictionary value representing all properties for a JOnAS service name - */ - private Dictionary getServicesProperties(final Properties properties, final String service) { - Dictionary props = new Hashtable(); - for (Object key : properties.keySet()) { - String name = (String) key; - String servicePrefix = JONAS_SERVICE + "." + service + "."; - if (name.startsWith(servicePrefix)) { - String value = properties.getProperty(name); - name = name.substring(servicePrefix.length()); - props.put(name, value); - } - } - return props; - } - - /** - * Return a JOnAS service configuration or null if the configuration doesn't exist. - * @param service The given service name - * @return The JOnAS service configuration - * @throws Exception If the service configuration cannot be retrieved - */ - private Configuration getConfiguration(final String service) throws Exception { - // Get the list of configurations for a factory - Configuration[] storedConfigurations = configurationAdmin.listConfigurations("(" - + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + getFactoryPID(service) + ")"); - - if (storedConfigurations != null && storedConfigurations.length == 1) { - return storedConfigurations[0]; - } - - return null; - } - - /** - * Return the JOnAS service configuration factory PID. - * @param service The given service name - * @return The JOnAS service configuration factory PID - */ - private String getFactoryPID(final String service) { - String serviceClass = JONAS_SERVICE + "." + service + ".class"; - String factoryPID = getServerProperties().getValue(serviceClass); - - if (factoryPID == null) { - for (ServiceProperties serviceProperties: this.servicePropertiesList) { - if (serviceProperties.getService().equals(service)) { - return serviceProperties.getValue(serviceClass); - } - } - } - return factoryPID; - } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public void modifyConfiguration(final ServiceReference serviceReference, final Dictionary storedProperties) { - try { - String serviceName = (String) storedProperties.get(JONAS_SERVICE); - if (serviceName != null) { - // Get the last service properties - Dictionary newProperties = getServiceProperties(serviceName); - - // If the configuration for the service has changed - if (isConfigurationModified(storedProperties, newProperties)) { - // Set new properties - for (Enumeration enProps = newProperties.keys(); enProps.hasMoreElements();) { - String key = (String) enProps.nextElement(); - storedProperties.put(key, newProperties.get(key)); - } - } - } - } catch (Exception e) { - logger.error(e); - } - } - - /** - * @param configurationAdmin the configurationAdmin to set - */ - public void setConfigurationAdmin(final ConfigurationAdmin configurationAdmin) { - this.configurationAdmin = configurationAdmin; - } - - /** - * Get 'true' if the two dictionaries don't contain the same properties. - * @param storedProperties Stored properties - * @param newProperties New properties for JOnAS properties - * @return A boolean value representing the fact that the two dictionaries contain or not the same properties - */ - private boolean isConfigurationModified(final Dictionary storedProperties, - final Dictionary newProperties) { - // Remove automatic properties added by the Configuration Admin service - storedProperties.remove(Constants.SERVICE_PID); - storedProperties.remove(ConfigurationAdmin.SERVICE_FACTORYPID); - storedProperties.remove(ConfigurationAdmin.SERVICE_BUNDLELOCATION); - - if (storedProperties.size() != newProperties.size()) { - return true; - } else { - for (Enumeration enProps = storedProperties.keys(); enProps.hasMoreElements();) { - String key = enProps.nextElement(); - - if (newProperties.get(key) == null) { - return true; - } else if (!storedProperties.get(key).equals(newProperties.get(key))) { - return true; - } - } - } - return false; - } - - /** - * Delete service configurations. - * @throws Exception If an exception occurs during configuration deletions - */ - private void deleteServiceConfigurations() throws Exception { - // Get all configurations - Configuration[] storedConfigurations = configurationAdmin.listConfigurations(null); - - if (storedConfigurations != null) { - // Delete configurations - for (Configuration configuration : storedConfigurations) { - String serviceName = (String) configuration.getProperties().get(JONAS_SERVICE); - if (serviceName != null) { - configuration.delete(); - } - } - } - } - - /** - * Returns JOnAS Server properties. Read jonas.properties file only if modified. - * @return Returns JOnAS Server properties. - */ - private JProp getServerProperties() { - File conf = new File(JProp.getJonasBase(), ConfigurationConstants.DEFAULT_CONFIG_DIR); - File jonasPropertyFile = new File(conf, ConfigurationConstants.JONAS_PROPERTIES_PROP); - long currentLastModified = jonasPropertyFile.lastModified(); - - if (currentLastModified != this.lastModified) { - this.serverProperties = new JProp(); - this.lastModified = currentLastModified; - } - - return this.serverProperties; - } - - /** - * Remove duplicate service names. - * @param services list of services to analyze - * @return A list of distinct service names - */ - private List removeDuplicateServices(final List services) { - List result = new LinkedList(); - for (String service : services) { - if (!result.contains(service)) { - result.add(service); - } else { - logger.warn("Service ''{0}'' declared many times in jonas.properties", service); - } - } - return result; - } - - /** - * @param serviceProperties The {@link ServiceProperties} to add - */ - public void addServiceProperties(ServiceProperties serviceProperties) { - this.servicePropertiesList.add(serviceProperties); - } - - /** - * @param serviceProperties The {@link ServiceProperties} to remove - */ - public void removeServiceProperties(ServiceProperties serviceProperties) { - this.servicePropertiesList.remove(serviceProperties); - } -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java deleted file mode 100644 index 94baaf5007..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java +++ /dev/null @@ -1,210 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.File; -import java.io.FilenameFilter; - -import org.ow2.jonas.configuration.ConfigurationManager; -import org.ow2.jonas.configuration.DeploymentPlanDeployer; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Allows to deploy or undeploy all bundles for a particular deployment plan. At the - * server initialization, deploy all JOnAS services defined in the configuration. - * @author Francois Fornaciari - */ -public class JOnASDeploymentPlanDeployer implements DeploymentPlanDeployer { - - /** - * Deployer Manager service reference - */ - private IDeployerManager deployerManager = null; - - /** - * ConfigurationManager service reference. - */ - private ConfigurationManager configurationManager = null; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JOnASDeploymentPlanDeployer.class); - - /** - * URL internal repository location. - */ - private static final String URL_INTERNAL_REPOSITORY = JProp.getRepositoriesRootDir() + File.separator + "url-internal"; - - /** - * {@inheritDoc} - */ - public void deploy(final String name) throws DeployerException { - String service = name; - String baseName = getBaseName(service); - if (baseName != null) { - deploy(baseName); - service = getImplementationName(service); - } - - File file = new File(URL_INTERNAL_REPOSITORY, service + ".xml"); - if (file.exists()) { - deployDeploymentPlan(file); - } else { - throw new DeployerException("Cannot deploy the deployment plan '" + name + "', file '" + file + "' not found"); - } - } - - /** - * {@inheritDoc} - */ - public void undeploy(final String name) throws DeployerException { - String service = name; - String baseName = getBaseName(service); - if (baseName != null) { - undeploy(baseName); - service = getImplementationName(service); - } - - File file = new File(URL_INTERNAL_REPOSITORY, service + ".xml"); - if (file.exists()) { - undeployDeploymentPlan(file); - } else { - throw new DeployerException("Cannot undeploy the deployment plan '" + name + "', file '" + file + "' not found"); - } - } - - /** - * Deploy a deployment plan using its associated deployment plan file. - * @param file File corresponding to the plan to deploy - * @throws Exception If the deployment of the deployment plan fails - */ - private void deployDeploymentPlan(final File file) throws DeployerException { - logger.debug("Deploying the deployment plan for ''{0}''", file); - - // Get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - throw new DeployerException("Ignoring invalid file '" + file + "'"); - } - - IDeployable deployable = null; - try { - deployable = DeployableHelper.getDeployable(archive); - if (!this.deployerManager.isDeployed(deployable)) { - this.deployerManager.deploy(deployable); - } - } catch (Exception e) { - throw new DeployerException("Cannot deploy the deployment plan for '" + file + "'", e); - } - } - - /** - * Undeploy a deployment plan using its associated deployment plan file. - * @param file File corresponding to the plan to undeploy - * @throws org.ow2.util.ee.deploy.api.deployer.DeployerException If the undeployment of the deployment plan fails - */ - private void undeployDeploymentPlan(final File file) throws DeployerException { - logger.debug("Undeploying the deployment plan for ''{0}''", file); - - // Get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - throw new DeployerException("Ignoring invalid file '" + file + "'"); - } - - IDeployable deployable = null; - try { - deployable = DeployableHelper.getDeployable(archive); - if (this.deployerManager.isDeployed(deployable)) { - this.deployerManager.undeploy(deployable); - } - } catch (Exception e) { - throw new DeployerException("Cannot undeploy the deployment plan for '" + file + "'", e); - } - } - - /** - * @param deployerManager the {@link org.ow2.util.ee.deploy.api.deployer.IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Set the ConfigurationManager service. - * @param configurationManager the configurationManager to set - */ - public void setConfigurationManager(final ConfigurationManager configurationManager) { - this.configurationManager = configurationManager; - } - - /** - * Returns the name of the user-defined implementation service. - * @param service The given service name - * @return The name of the user-defined implementation service - */ - private String getImplementationName (final String service) { - String serviceClass = configurationManager.getServiceProperties(service).get("class"); - // The value follows this construction: - // org.ow2.jonas...<...> - // The implementation name is the 5th element. - // TODO: method not easily extensible if the package name doesn't - // start with org.ow2.jonas - String implementationName = serviceClass.split("\\.")[4]; - - // Return the -.xml file name - return service + "-" + implementationName; - } - - /** - * Returns the base deployment plan for a given service or null if it doesn't exist. - * @param service The service name - * @return The base deployment plan for a given service - */ - private String getBaseName (final String service) { - File configDir = new File(URL_INTERNAL_REPOSITORY); - final String baseName = service + "-base"; - File[] base = configDir.listFiles(new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return (name.equalsIgnoreCase(baseName.concat(".xml"))); - } - }); - if (base != null && base.length == 1) { - return baseName; - } else { - return null; - } - } -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java deleted file mode 100644 index b92946c105..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.ObjectInputStream; -import java.lang.management.ManagementFactory; -import java.util.Set; - -import javax.management.Attribute; -import javax.management.AttributeList; -import javax.management.AttributeNotFoundException; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.IntrospectionException; -import javax.management.InvalidAttributeValueException; -import javax.management.ListenerNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanInfo; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.NotCompliantMBeanException; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.ObjectInstance; -import javax.management.ObjectName; -import javax.management.OperationsException; -import javax.management.QueryExp; -import javax.management.ReflectionException; -import javax.management.loading.ClassLoaderRepository; - -/** - * This component register a MBeanServer service that delegates all the call to the platform MBeanServer. - * @author Francois Fornaciari - */ -public class PlatformMBeanServerDelegate implements MBeanServer { - - /** - * The real MBeanServer - */ - private MBeanServer delegate; - - /** - * Start the component (aka retrieve the platform MBeanServer) - */ - public void start() throws Exception { - // Check whether javax.management.builder.initial property was set - if (System.getProperty("javax.management.builder.initial") == null) { - throw new Exception("The system property 'javax.management.builder.initial' was not set."); - } - - // Change classloader to load customized MBeanServerBuilder class - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(PlatformMBeanServerDelegate.class.getClassLoader()); - this.delegate = ManagementFactory.getPlatformMBeanServer(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - } - - // All the delegating methods... - // -------------------------------------------------------------- - - public ObjectInstance createMBean(final String className, - final ObjectName name) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException { - return delegate.createMBean(className, name); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final ObjectName loaderName) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException { - return delegate.createMBean(className, name, loaderName); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final Object[] params, - final String[] signature) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException { - return delegate.createMBean(className, name, params, signature); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final ObjectName loaderName, - final Object[] params, - final String[] signature) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException { - return delegate.createMBean(className, name, loaderName, params, signature); - } - - public ObjectInstance registerMBean(final Object object, final ObjectName name) - throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException { - return delegate.registerMBean(object, name); - } - - public void unregisterMBean(final ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException { - delegate.unregisterMBean(name); - } - - public ObjectInstance getObjectInstance(final ObjectName name) throws InstanceNotFoundException { - return delegate.getObjectInstance(name); - } - - public Set queryMBeans(final ObjectName name, final QueryExp query) { - return delegate.queryMBeans(name, query); - } - - public Set queryNames(final ObjectName name, final QueryExp query) { - return delegate.queryNames(name, query); - } - - public boolean isRegistered(final ObjectName name) { - return delegate.isRegistered(name); - } - - public Integer getMBeanCount() { - return delegate.getMBeanCount(); - } - - public Object getAttribute(final ObjectName name, final String attribute) - throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException { - return delegate.getAttribute(name, attribute); - } - - public AttributeList getAttributes(final ObjectName name, final String[] attributes) - throws InstanceNotFoundException, ReflectionException { - return delegate.getAttributes(name, attributes); - } - - public void setAttribute(final ObjectName name, final Attribute attribute) - throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { - delegate.setAttribute(name, attribute); - } - - public AttributeList setAttributes(final ObjectName name, final AttributeList attributes) - throws InstanceNotFoundException, ReflectionException { - return delegate.setAttributes(name, attributes); - } - - public Object invoke(final ObjectName name, - final String operationName, - final Object[] params, - final String[] signature) - throws InstanceNotFoundException, MBeanException, ReflectionException { - return delegate.invoke(name, operationName, params, signature); - } - - public String getDefaultDomain() { - return delegate.getDefaultDomain(); - } - - public String[] getDomains() { - return delegate.getDomains(); - } - - public void addNotificationListener(final ObjectName name, - final NotificationListener listener, - final NotificationFilter filter, - final Object handback) throws InstanceNotFoundException { - delegate.addNotificationListener(name, listener, filter, handback); - } - - public void addNotificationListener(final ObjectName name, - final ObjectName listener, - final NotificationFilter filter, - final Object handback) throws InstanceNotFoundException { - delegate.addNotificationListener(name, listener, filter, handback); - } - - public void removeNotificationListener(final ObjectName name, final ObjectName listener) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener); - } - - public void removeNotificationListener(final ObjectName name, - final ObjectName listener, - final NotificationFilter filter, - final Object handback) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener, filter, handback); - } - - public void removeNotificationListener(final ObjectName name, final NotificationListener listener) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener); - } - - public void removeNotificationListener(final ObjectName name, - final NotificationListener listener, - final NotificationFilter filter, - final Object handback) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener, filter, handback); - } - - public MBeanInfo getMBeanInfo(final ObjectName name) - throws InstanceNotFoundException, IntrospectionException, ReflectionException { - return delegate.getMBeanInfo(name); - } - - public boolean isInstanceOf(final ObjectName name, final String className) throws InstanceNotFoundException { - return delegate.isInstanceOf(name, className); - } - - public Object instantiate(final String className) throws ReflectionException, MBeanException { - return delegate.instantiate(className); - } - - public Object instantiate(final String className, final ObjectName loaderName) - throws ReflectionException, MBeanException, InstanceNotFoundException { - return delegate.instantiate(className, loaderName); - } - - public Object instantiate(final String className, final Object[] params, final String[] signature) - throws ReflectionException, MBeanException { - return delegate.instantiate(className, params, signature); - } - - public Object instantiate(final String className, - final ObjectName loaderName, - final Object[] params, - final String[] signature) - throws ReflectionException, MBeanException, InstanceNotFoundException { - return delegate.instantiate(className, loaderName, params, signature); - } - - @Deprecated - public ObjectInputStream deserialize(final ObjectName name, final byte[] data) - throws InstanceNotFoundException, OperationsException { - return delegate.deserialize(name, data); - } - - @Deprecated - public ObjectInputStream deserialize(final String className, final byte[] data) - throws OperationsException, ReflectionException { - return delegate.deserialize(className, data); - } - - @Deprecated - public ObjectInputStream deserialize(final String className, final ObjectName loaderName, final byte[] data) - throws InstanceNotFoundException, OperationsException, ReflectionException { - return delegate.deserialize(className, loaderName, data); - } - - public ClassLoader getClassLoaderFor(final ObjectName mbeanName) throws InstanceNotFoundException { - return delegate.getClassLoaderFor(mbeanName); - } - - public ClassLoader getClassLoader(final ObjectName loaderName) throws InstanceNotFoundException { - return delegate.getClassLoader(loaderName); - } - - public ClassLoaderRepository getClassLoaderRepository() { - return delegate.getClassLoaderRepository(); - } -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java deleted file mode 100644 index 595e747536..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.deploymentplan; - -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deployer.api.IDeploymentPlanDeployer; - -/** - * Implementation of the Deployment plan MBean. - * @author Mickaël LEDUQUE - * @author Francois Fornaciari - */ -public class JOnASDeploymentPlan implements JOnASDeploymentPlanMBean { - /** - * The logger. - */ - private Log logger = LogFactory.getLog(JOnASDeploymentPlan.class); - - /** - * JMX server (MBean server) instance. - */ - private MBeanServer mbeanServer = null; - - /** - * ServerProperties service object. - */ - private ServerProperties serverProperties = null; - - /** - * The deployment plan deployer. - */ - private IDeploymentPlanDeployer deploymentPlanDeployer = null; - - /** - * This callback method is called during the service starting as soon as all - * service dependencies are resolved. - */ - public void start() throws Exception { - try { - ObjectName objectName = JonasObjectName.deploymentPlan(serverProperties.getDomainName()); - mbeanServer.registerMBean(this, objectName); - } catch (Exception e) { - logger.error("MBean registration error, {0}", e); - } - } - - /** - * This callback method is called during the service stopping. - * The unregistration of one of the required service can trigger the method invocation. - */ - public void stop() throws ServiceException { - // MBean unregistration - if (mbeanServer != null) { - try { - ObjectName objectName = JonasObjectName.deploymentPlan(serverProperties.getDomainName()); - mbeanServer.unregisterMBean(objectName); - } catch (Exception e) { - logger.error("MBean unregistration error, {0}", e); - } - } - } - - /** - * Set the MBean Server. - * @param mbeanServer the new JMX service. - */ - public void setMBeanServer(final MBeanServer mbeanServer) { - this.mbeanServer = mbeanServer; - } - - /** - * Set the server properties service. - * @param serverProperties the serverProperties to set - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * Sets the deployment plan deployer. - * @param deploymentPlanDeployer the new deployment plan deployer. - */ - public void setDeploymentPlanDeployer(final IDeploymentPlanDeployer deploymentPlanDeployer) { - this.deploymentPlanDeployer = deploymentPlanDeployer; - } - - /** - * {@inheritDoc} - */ - public Integer getDeploymentPlansCount() { - return this.deploymentPlanDeployer.getDeploymentPlansCount(); - } - - /** - * Returns the list of deployed deployment plans. - * @return the list of deployed deployment plans. - */ - public String[] getDeploymentPlans() { - List planPaths = this.deploymentPlanDeployer.getDeploymentPlansUrls(); - String[] result = new String[planPaths.size()]; - int index = 0; - for (String path : planPaths) { - result[index++] = path; - } - return result; - } -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java deleted file mode 100644 index 883e0943dc..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.deploymentplan; - -public interface JOnASDeploymentPlanMBean { - - /** - * Returns the number of deployed deployment plans. - * @return the number of deployed deployment plans. - */ - public Integer getDeploymentPlansCount(); - - /** - * Returns the list of deployed deployment plans. - * @return the list of deployed deployment plans. - */ - public String[] getDeploymentPlans(); - -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java deleted file mode 100644 index d6aed7bbac..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.mbeanbuilder; - -import org.ow2.jonas.jmx.internal.interceptor.InvocationHandlerImpl; -import org.ow2.jonas.jmx.internal.interceptor.MBeanServerDelegateInterceptor; - -import javax.management.MBeanServer; -import javax.management.MBeanServerBuilder; -import javax.management.MBeanServerDelegate; -import java.lang.reflect.Proxy; - -/** - * This class represents a builder that creates a proxy of default - * MBeanServer implementation. - * @author Mohammed Boukada - */ -public class JOnASMBeanServerBuilder extends MBeanServerBuilder { - - /** - * Empty constructor - */ - public JOnASMBeanServerBuilder() {} - - /** - * Creates a new MBeanServer - * @param defaultDomain - * @param initialOuter - * @param delegate - * @return proxy of the MBeanServer - */ - public MBeanServer newMBeanServer(String defaultDomain, - MBeanServer initialOuter, - MBeanServerDelegate delegate) { - - // handler for outer proxy - InvocationHandlerImpl proxyHandler = new InvocationHandlerImpl(); - - // Create an empty proxy with no interceptor handler which - // will delegate invocations to real MBeanServer - // - // Outer proxy will be used when a call is done - // on a MBean which implements MBeanRegistration - MBeanServer outerProxy = (MBeanServer) Proxy.newProxyInstance(MBeanServer.class.getClassLoader(), - new Class[]{MBeanServer.class}, - proxyHandler); - - // Create real MBeanServer with outerProxy - MBeanServer origin = super.newMBeanServer(defaultDomain, outerProxy, delegate); - - // Create handler for MBeanServer proxy and add - // the default interceptor - InvocationHandlerImpl invocationHandler = new InvocationHandlerImpl(origin); - invocationHandler.addInterceptor(new MBeanServerDelegateInterceptor(origin)); - - // Create the MBeanServer proxy - MBeanServer proxy = (MBeanServer) Proxy.newProxyInstance(origin.getClass().getClassLoader(), - new Class[]{MBeanServer.class}, - invocationHandler); - - // Set delegate handler when outer MBeanServer is used - proxyHandler.setDelegate(invocationHandler); - - // return "proxyfied" MBeanServer - return proxy; - } - - /** - * Delegate creating MBeanServerDelegate to MBeanServerBuilder - * @return - */ - public MBeanServerDelegate newMBeanServerDelegate() { - return super.newMBeanServerDelegate(); - } -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java deleted file mode 100644 index a9b964accd..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java +++ /dev/null @@ -1,396 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.repository; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.exceptions.InvalidRepositoryException; -import org.ow2.util.plan.bindings.repository.ExtendedRepository; -import org.ow2.util.plan.bindings.repository.Repositories; -import org.ow2.util.plan.bindings.repository.Repository; -import org.ow2.util.plan.bindings.repository.RepositoryKind; -import org.ow2.util.plan.deployer.api.IRepositoryDeployer; -import org.ow2.util.plan.fetcher.api.Constants; -import org.ow2.util.plan.reader.repository.IRepositoryDataReader; -import org.ow2.util.plan.repository.api.IRepositoryManager; -import org.ow2.util.plan.repository.api.RepositoryIdCollisionException; - -/** - * This component is part of the bootstrap module and registers initial - * repositories that will be used by the deployment plan. - * @author Mickaël LEDUQUE - * @author Francois Fornaciari - * @author Adriana Danes - */ -public class JOnASRepositories implements JOnASRepositoriesMBean { - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(JOnASRepositories.class); - - /** - * ServerProperties service object. - */ - private ServerProperties serverProperties = null; - - /** - * The repository manager. - */ - private IRepositoryManager repositoryManager = null; - - /** - * Reference to the {@link org.osgi.service.cm.ConfigurationAdmin} service. - */ - private ConfigurationAdmin configurationAdmin = null; - - /** - * JMX server (MBean server) instance. - */ - private MBeanServer mbeanServer = null; - - /** - * The repository deployer. - */ - private IRepositoryDeployer repositoryDeployer; - - /** - * The repository file reader. - */ - private IRepositoryDataReader repositoryReader = null; - - /** - * User specified user repository property name. - */ - private static final String PROP_M2_LOCAL_REPOSITORY = "m2.repository"; - - /** - * Path to default M2 repository. - */ - private static final String PATH_DEFAULT_REPOSITORY = ".m2/repository"; - - /** - * Configuration file for initial repositories. - */ - private static final String CONFIG_FILE = "initial-repositories.xml"; - - /** - * The Id for the internal ROOT repository - */ - private static final String ROOT_URL_INTERNAL_REPOSITORY_ID = "Root URL internal"; - - /** - * This callback method is called during the service starting as soon as all - * service dependencies are resolved. - */ - public void start() throws Exception { - // Set the local repositories base directory into the configuration - Configuration configuration = configurationAdmin.getConfiguration(Constants.CONFIG_PID, null); - if (configuration != null) { - Dictionary props = new Hashtable(); - props.put(Constants.LOCAL_REPOSITORIES_BASE_DIR, JProp.getJonasBase() + "/repositories"); - configuration.update(props); - } - - // Add the local repositories - addLocalRepositories(); - - // Initial repositories file - Repositories initialRepositories = null; - File configFile = new File(JProp.getConfDir(), CONFIG_FILE); - if (configFile.exists()) { - try { - initialRepositories = repositoryReader.readRepositories(configFile); - } catch (Exception e) { - logger.error("Exception while parsing the initial repositories file : {0}", e); - } - } - - // Add the initial repositories in the repositories manager - if (initialRepositories != null) { - int repositoryCount = 0; - for (Repository repository : initialRepositories.getRepositories()) { - try { - repositoryManager.addRepository(repository); - repositoryCount++; - } catch (RepositoryIdCollisionException e) { - logger.warn("Multiple repository with same id; id={0}", repository.getId()); - } catch (InvalidRepositoryException e) { - logger.warn("Invalid repository with id {0}", repository.getId()); - } - } - logger.debug("JOnAS started with {0} repositories.", repositoryCount); - } else { - logger.debug("JOnAS started with no repositories"); - } - - try { - ObjectName objectName = JonasObjectName.repository(serverProperties.getDomainName()); - mbeanServer.registerMBean(this, objectName); - } catch (Exception e) { - logger.error("MBean registration error, {0}", e); - } - } - - /** - * This callback method is called during the service stopping. The - * unregistration of one of the required service can trigger the method - * invocation. - */ - public void stop() throws Exception { - // MBean unregistration - if (mbeanServer != null) { - try { - ObjectName objectName = JonasObjectName.repository(serverProperties.getDomainName()); - mbeanServer.unregisterMBean(objectName); - } catch (Exception e) { - logger.error("MBean unregistration error, {0}", e); - } - } - } - - /** - * {@inheritDoc} - */ - public Integer getRepositoryDeployablesCount() { - return this.repositoryDeployer.getDeployablesCount(); - } - - /** - * {@inheritDoc} - */ - public List getRepositoriesDescriptions() { - List repositoriesDescriptions = new ArrayList(); - for (Repository repository : this.repositoryManager) { - repositoriesDescriptions.add(repository.toString()); - } - return repositoriesDescriptions; - } - - /** - * Get the URL repositories from the repositoryManager, and exclude the internal ROOT repository - * @return List of URL repository names. - */ - public List getURLRepositories() { - List urlRepositories = new ArrayList(); - for (Repository repository : this.repositoryManager) { - RepositoryKind repositoryType = repository.getType(); - String repositoryId = repository.getId(); - if (repositoryType.equals(RepositoryKind.URL)) { - // This is a URL repository - // filter out Root URL internal repository - if (!repositoryId.equals(ROOT_URL_INTERNAL_REPOSITORY_ID)) { - //repositoriesDescriptions.add(repository.toString()); - String location = repository.getUrl(); - urlRepositories.add(location); - } - } - } - return urlRepositories; - } - /** - * {@inheritDoc} - */ - public Integer getRepositoriesNumber() { - return this.repositoryManager.getRepositoryCount(); - } - - /** - * Set the server properties service. - * @param serverProperties the serverProperties to set - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * Set the repository manager used by this service. - * @param repositoryManager the new repository manager. - */ - public void setRepositoryManager(final IRepositoryManager repositoryManager) { - this.repositoryManager = repositoryManager; - } - - /** - * Set the repository deployer. - * @param repositoryDeployer the new repository deployer. - */ - public void setRepositoryDeployer(final IRepositoryDeployer repositoryDeployer) { - this.repositoryDeployer = repositoryDeployer; - } - - /** - * Set the MBean Server. - * @param mbeanServer the new JMX service. - */ - public void setMBeanServer(final MBeanServer mbeanServer) { - this.mbeanServer = mbeanServer; - } - - /** - * Set the repository reader. - * @param repositoryReader the new repository reader. - */ - public void setRepositoryReader(final IRepositoryDataReader repositoryReader) { - this.repositoryReader = repositoryReader; - } - - /** - * @param configurationAdmin the configurationAdmin to set - */ - public void setConfigurationAdmin(final ConfigurationAdmin configurationAdmin) { - this.configurationAdmin = configurationAdmin; - } - - /** - * Add local repositories. - */ - private void addLocalRepositories() { - addLocalMaven2Repositories(); - - // Registers the url internal repository - File base = new File(getURLInternalBaseRepositoryLocation()); - File root = new File(getURLInternalRootRepositoryLocation()); - if (!root.equals(base) && base.exists()) { - addRepository("Base URL internal", base.getPath(), RepositoryKind.URL); - } - addRepository(ROOT_URL_INTERNAL_REPOSITORY_ID, root.getPath(), RepositoryKind.URL); - } - - /** - * Add a new repository to the repository manager. - * @param id Repository id - * @param location Repository location - * @param repositoryKind King of repository - */ - private void addRepository(final String id, final String location, final RepositoryKind repositoryKind) { - Repository repository = new ExtendedRepository(); - repository.setType(repositoryKind); - repository.setId(id); - - String locationWithAppendingSlash; - if (location.startsWith("/")) { - locationWithAppendingSlash = location; - } else { - locationWithAppendingSlash = '/' + location; - } - repository.setUrl("file:" + locationWithAppendingSlash); - - try { - repositoryManager.addRepository(repository); - } catch (RepositoryIdCollisionException e) { - logger.error("Cannot add repository {0}, it already exists", repository); - } catch (InvalidRepositoryException e) { - logger.error("Invalid repository {0}", repository); - } - } - - /** - * Add a Maven2 repositories to the repository manager. - */ - private void addLocalMaven2Repositories() { - boolean developer = Boolean.getBoolean(ConfigurationConstants.JONAS_DEVELOPER_PROP); - if (developer) { - addRepository("Maven2 local repository", getMaven2RepositoryLocation(), RepositoryKind.MAVEN_2); - } else { - File repositoriesRootDir = new File(JProp.getRepositoriesRootDir()); - File repositoriesBaseDir = new File(JProp.getRepositoriesBaseDir()); - List repositoriesDirs = new ArrayList(); - if (repositoriesRootDir.exists()) { - repositoriesDirs.add(repositoriesRootDir); - } - if (!repositoriesBaseDir.equals(repositoriesRootDir) && repositoriesBaseDir.exists()) { - repositoriesDirs.add(repositoriesBaseDir); - } - - for (File repositoryDir: repositoriesDirs) { - String dir; - if (repositoriesRootDir.equals(repositoryDir)) { - dir = "root"; - } else { - dir = "base"; - } - - List repositories = Arrays.asList(repositoryDir.listFiles()); - for (File repository: repositories) { - if (repository.isDirectory() && repository.getName().startsWith("maven2-")) { - String repositoryId = repository.getName() + "-" + dir; - addRepository(repositoryId, repository.getAbsolutePath(), RepositoryKind.MAVEN_2); - } - } - } - } - } - - /** - * @return Location pointing to $JONAS_ROOT/repositories/url-internal - */ - private String getURLInternalRootRepositoryLocation() { - return JProp.getRepositoriesRootDir() + File.separator + "url-internal"; - } - - /** - * @return Location pointing to $JONAS_BASE/repositories/url-internal - */ - private String getURLInternalBaseRepositoryLocation() { - return JProp.getRepositoriesBaseDir() + File.separator + "url-internal"; - } - - /** - * Get the local maven2 repository location - * @return a {@link String} to a usable Maven2 repository. - */ - private String getMaven2RepositoryLocation() { - String m2Repository = System.getProperty(PROP_M2_LOCAL_REPOSITORY); - - // Priority to a user defined repository - if (m2Repository == null) { - // Nothing, so try a reasonable default - // Assume that local Maven2 repository is in ~/.m2/repository - String userHome = System.getProperty("user.home"); - m2Repository = userHome + File.separator + PATH_DEFAULT_REPOSITORY; - } - - // Return the detected repository - return m2Repository; - } -} - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java b/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java deleted file mode 100644 index 7680079619..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.repository; - -import java.util.List; - -/** - * MBean interface for the JOnASRepositories. - * @author Mickaël LEDUQUE - * @author Adriana Danes - */ -public interface JOnASRepositoriesMBean { - - /** - * Returns the number of available repositories. - * @return the number of repositories. - */ - public Integer getRepositoriesNumber(); - - /** - * Returns the list of repository ids. - * @return the list of repository ids. - */ - public List getRepositoriesDescriptions(); - - /** - * Returns the list of URL repository names. - * @return the list of repository ids. - */ - public List getURLRepositories(); - - /** - * Returns the number of deployed repositories deployables. - * @return the number of deployed repositories deployables. - */ - public Integer getRepositoryDeployablesCount(); -} diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bash b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bash deleted file mode 100644 index 504109ed41..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bash +++ /dev/null @@ -1,582 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8.2: Jerome Pioux - Benoit Pelletier -# -# Modifications for 4.8.3 -# ----------------------- -# Jerome - 10/17/2006 -# - Make this bash script to work for ksh. ie: -# (first line may need to be altered on some sites)... -# * change all with -# * Add a prefix (Do) in the start,stop,kill,status function names -# * Other modifications are flagged as Jerome - 10/17/2006 in the code -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Status|Start|Stop|Kill JONAS cluster node(s) -# Usage: cl [-n ] [status] | < [-f] kill | [-d] start | stop >" - -# If XWINDOWS=yes or YES exists in the user env., then use -win on startup -XWINDOWS=${XWINDOWS:-no} - -# Default values -JCL_NUMBER_OF_NODES=${JCL_NUMBER_OF_NODES:-40} -JCL_BASE_PREFIX=${JCL_BASE_PREFIX:-$JCL_CLUSTER_DAEMON_DIR/jb} -JCL_DOMAIN_NAME=${JCL_DOMAIN_NAME:-sampleClusterDomain} -JCL_EAR_FILE=${JCL_EAR_FILE:-$JONAS_ROOT/examples/cluster-j2ee14/output/apps/sampleCluster2.ear} -JCL_HA_EAR_FILE=${JCL_HA_EAR_FILE:-$JONAS_ROOT/examples/cluster-j2ee14/output/apps/haTransactions.ear} -JCL_JAVAEE5_EAR_FILE=${JCL_JAVAEE5_EAR_FILE:-$JONAS_ROOT/examples/cluster-javaee5/output/apps/sampleCluster3.ear} -JCL_NODE_NAME_PREFIX=${JCL_NODE_NAME_PREFIX:-node} -JCL_CLUSTER_DAEMON_DIR=${JCL_CLUSTER_DAEMON_DIR:-cd} -JCL_DB_DIR=${JCL_DB_DIR:-db} -JCL_DB_NAME=${JCL_DB_NAME:-db} -JCL_MASTER_DIR=${JCL_MASTER_DIR:-master} -JCL_MASTER_NAME=${JCL_MASTER_NAME:-master} - -# ------------------------------------------ -# NO NEED TO MODIFY ANYTHING BELOW THIS LINE -# ------------------------------------------ -JCL_BASE_DEBUG_PORT=${JCL_BASE_DEBUG_PORT:-414} - -# Delay in seconds to apply between nodes startup/shutdown -DELAY1_AFTER_NODE_START=20 -DELAY2_AFTER_NODE_START=3 -DELAY_BETWEEN_NODE_STOP=1 - -CLUSTER="" -jonasbase="" -typeset -i nnodes=0 -typeset -i wholeCluster=0 -osname=`uname -s` - - -# ------ -# ATEXIT -# ------ -atexit() -{ - printf "\n" -} - -# ----- -# USAGE -# ----- -usage() -{ - printf "\n" - printf "usage: $(basename $0) [ [-n ] [status]] | < [-f] kill | [-d] start | stop > ]\n" - printf "\n" - printf " With node_id: clusterd (or cd), $JCL_MASTER_NAME (or ms), $JCL_DB_NAME \n" - printf " With node_number: node number of JOnAS instances which corresponds to the suffix of the node name\n" - printf " * Form1: Multiple nodes can be specified between commas (no space)\n" - printf " * Form2: Range(s) can be entered using a dash between node numbers (no space)\n" - printf " * Any combination between form1 and form2 is allowed\n" - printf " Ex: -n $JCL_DB_NAME,1-3 applies to the $JCL_DB_NAME node and nodes 1,2 and 3\n" - printf " Notes:\n" - printf " * Do not specify -n or use -nall to address all nodes in the cluster\n" - printf " * A node number for your cluster must be between 1 and $JCL_NUMBER_OF_NODES\n" - printf "\n" - printf " Use \"export XWINDOWS=yes\" if you want to start the JVMs in dedicated xterms\n"; - printf "\n" - exit 1 -} - -# --------- -# DOPADDING -# --------- -DoPadding() -{ - # Use to align fields on the screen - typeset -i m1=$1 - typeset -i m2=$2 - typeset -i p=m2-m1 - - typeset -i i=1 - while [[ $i -le $p ]]; do - printf " " - i=i+1 - done - printf " " - return -} - -# ------------ -# SETJONASBASE -# ------------ -SetJonasBase() -{ - # Do not add any echo or printf in this routine - # besides the one before the return - case $1 in - clusterd) - base=$JCL_CLUSTER_DAEMON_DIR - ;; - $JCL_MASTER_NAME) - base=$JCL_MASTER_DIR - ;; - $JCL_DB_NAME) - base=$JCL_DB_DIR - ;; - *) - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#JCL_NODE_NAME_PREFIX} - #base=$JCL_BASE_PREFIX${node:$l} - base=$JCL_BASE_PREFIX${node#*$JCL_NODE_NAME_PREFIX} - ;; - esac - echo $base - return -} - -# ---------- -# SETCLUSTER -# ---------- -SetCluster() -{ -str=${1:-all} -typeset -i n=1 - -# --- All nodes -# We are in control so order nodes "startup-ready" -if [[ $str = 0 || $str = all ]]; then - wholeCluster=1 - cluster="clusterd $JCL_DB_NAME $JCL_MASTER_NAME" - while [[ $n -le $JCL_NUMBER_OF_NODES ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$n" - n=n+1 - done - CLUSTER=${cluster#\ *} - return -fi - -# --- Partial nodes list -# Respect order chosen by user -typeset -i err=0 -typeset -i numnode -OLDIFS=$IFS - -# For nodes between commas -IFS=, -for substr in $str; do - n="$(expr $substr : '.*-')" - - # No dash-formed node - if [[ $n -eq 0 ]]; then - # Non numeric node - if ( echo "$substr" | grep -q [^[:digit:]] ); then - # Abbrev. - [[ $substr = cd ]] && substr=clusterd - [[ $substr = ms ]] && substr=$JCL_MASTER_NAME - if [[ $substr != clusterd && - $substr != $JCL_MASTER_NAME && - $substr != $JCL_DB_NAME ]]; then - err=1 - fi - cluster="$cluster $substr" - # Numeric - else - numnode=$substr - # numnode must be less then JCL_NUMBER_OF_NODES - [[ $numnode -gt $JCL_NUMBER_OF_NODES ]] && err=1 - cluster="$cluster $JCL_NODE_NAME_PREFIX$substr" - fi - - # dash-formed node - else - n1=${substr%%-*} - n2=${substr##*-} - # Both dash-formed nodes must be numeric - if ( echo "$n1" | grep -q [^[:digit:]] || - echo "$n2" | grep -q [^[:digit:]] ); then - err=1 - else - typeset -i i=$n1 && typeset -i imax=$n2 - # First dash-formed node must be less or equal the second - # which in turn must be less then JCL_NUMBER_OF_NODES - [[ $i -gt $imax || $imax -gt $JCL_NUMBER_OF_NODES ]] && err=1 - while [[ $i -le $imax ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$i" - i=i+1 - done - fi - fi -done -IFS=$OLDIFS - -# Remove heading space if any -cluster=${cluster#\ *} - -# Raise error on duplicates -if [[ $err -eq 0 ]]; then - for node1 in $cluster; do - n=0 - for node2 in $cluster; do - [[ $node1 = $node2 ]] && n=n+1 - done - [[ $n -gt 1 ]] && err=1 && break - done -fi - -# Error - empty cluster -[[ $err -eq 1 ]] && cluster="" -CLUSTER=$cluster -return -} - -# --------------- -# CLUSTER DAEMON -# --------------- -ClusterDaemon() -{ - case ${1:-na} in - start) - printf "\n\n*** Starting JOnAS cluster daemon ... \n" - # Jerome - 10/17/2006 - Change regex below for ksh support - #if [[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]]; then - if [[ $XWINDOWS = [Yy][Ee][Ss] ]]; then - xterm -title $HOSTNAME:clusterd -geometry 110x16 -sb -e jclusterd start & - else - jclusterd start & - fi - sleep $DELAY2_AFTER_NODE_START - ;; - - stop) - echo -e "\n\n*** Stopping JOnAS cluster daemon ..." - jclusterd stop - sleep $DELAY_BETWEEN_NODE_STOP - ;; - esac - return -} - -# ------- -# SOSTART -# ------- -Dostart() -{ - typeset -i delay - typeset -i n=1 - - # Jerome - 10/17/2006 - Change regex below for ksh support - #[[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]] && WIN="-win" || WIN="" - [[ $XWINDOWS = [Yy][Ee][Ss] ]] && WIN="-win" || WIN="" - - # Startup cluster; If we are in control of the whole cluster, the nodes - # are already in the correct order for startup - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - DBG="" - OSGI="" - - # Set debug and startup delay - case $node in - clusterd) - ClusterDaemon start - continue - ;; - master | db) - delay=$DELAY1_AFTER_NODE_START - [[ $CLEAN = true ]] && OSGI="-clean" - [[ $DEV = true ]] && OSGI="$OSGI -dev" - [[ $GUI = true ]] && OSGI="$OSGI -gui" - ;; - *) - delay=$DELAY2_AFTER_NODE_START - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#node} - #[[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node:$l}" - [[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node#*$JCL_NODE_NAME_PREFIX}" - [[ $CLEAN = true ]] && OSGI="-clean" - [[ $DEV = true ]] && OSGI="$OSGI -dev" - [[ $GUI = true ]] && OSGI="$OSGI -gui" - ;; - esac - - - - # Save and clean up logs - rm -rf $JONAS_BASE/logs/old/* - mkdir -p $JONAS_BASE/logs/old - mv $JONAS_BASE/logs/* $JONAS_BASE/logs/old 2>/dev/null - - case $node in - node1 | node2 | node3 | node4) - if [[ "$JCL_EAR_FILE" != "NULL" && -f $JCL_EAR_FILE ]]; then - cp $JCL_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - if [[ "$JCL_HA_EAR_FILE" != "NULL" && -f $JCL_HA_EAR_FILE ]]; then - cp $JCL_HA_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - if [[ "$JCL_JAVAEE5_EAR_FILE" != "NULL" && -f $JCL_JAVAEE5_EAR_FILE ]]; then - cp $JCL_JAVAEE5_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - ;; - esac - - cmd="jonas start $OSGI $WIN $DBG -n $node -Ddomain.name=$JCL_DOMAIN_NAME" - printf "\n\n*** Starting JOnAS $node instance ... \n($cmd)\n" - $cmd - - # Wait delay seconds between nodes startup - if [[ $n -lt $nnodes && $WIN = "-win" ]]; then - printf "\n\tWaiting ${delay}s before starting next node ..." - sleep $delay - fi - n=n+1 - done - return -} - -# ------ -# DOSTOP -# ------ -Dostop() -{ - typeset -i delay=$DELAY_BETWEEN_NODE_STOP - - # Stop cluster; If we are in control of the whole cluster, the nodes - # are in the correct order for startup which is the reverse order of - # how we would like to stop them; so let's build a "reverse" cluster - if [[ $wholeCluster -eq 1 ]]; then - for node in $CLUSTER; do - cluster2="$node $cluster2" - done - CLUSTER=$cluster2 - fi - - # Stop cluster - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - - if [[ $node = clusterd ]]; then - ClusterDaemon stop - continue - fi - - cmd="jonas stop -n $node" - printf "\n\n*** Stopping JOnAS $node instance ...\n($cmd)\n" - $cmd - - sleep $delay - done - return -} - -# ------ -# DOKILL -# ------ -Dokill() -{ - # Kill cluster - for node in $CLUSTER; do - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - if [[ $osname = "HP-UX" ]]; then - pid=$(ps -efx | grep $strToMatch | grep -v grep | awk '{ print $2 }') - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - fi - - if [[ ! -z $pid ]]; then - cmd="/bin/kill -$force $pid" - printf "\n*** Killing JOnAS $node instance ...\n($cmd)\n" - $cmd - fi - done - return -} - -# -------- -# DOSTATUS -# -------- -Dostatus() -{ - typeset -i l - typeset -i lnode - typeset -i ljonasbase - typeset -i maxlnode=0 - typeset -i maxljonasbase=0 - - # Get longest strings length - # (to use in field alignment for display below) - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - [[ $lnode -gt $maxlnode ]] && maxlnode=$lnode - [[ $ljonasbase -gt $maxljonasbase ]] && maxljonasbase=$ljonasbase - done - - printf "\n" - - # Display status - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - - printf " node=%-s" $node - DoPadding $lnode $maxlnode - - printf "base=%-s" $jonasbase - DoPadding $ljonasbase $maxljonasbase - - printf "%0.s-> " - - if [[ $node = clusterd ]]; then - strToMatch=ClusterDaemon - else - strToMatch=Djonas.name=$node - fi - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - if [[ $osname = "HP-UX" ]]; then - pid=$(ps -efx | grep $strToMatch | grep -v grep | awk '{ print $2 }') - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - fi - - if [[ ! -z $pid ]]; then - printf "running [$pid]\n" - else - printf "not running\n" - fi - done - return -} - -# ----- -# MAIN -# ----- -trap "atexit" exit - -# Jerome - 10/17/2006 -# On AIX, the ww is not supported (and not needed) -if [[ $(uname -s) = AIX ]]; then - XTERM=aixterm - psfmt=eo -else - XTERM=xterm - psfmt=ewwo -fi - -typeset -i n -typeset -i force=15 -debug=false -clean=false -dev=false - -# Show stopper -if [[ ! -n $JONAS_ROOT ]]; then - printf "$0: JONAS_ROOT is not defined\n" - exit 2 -fi -if ( ! echo $PATH | grep $JONAS_ROOT/bin >/dev/null 2>&1 ) then - printf "$0: JONAS_ROOT/bin is not in your PATH\n" - exit 3 -fi - -# Read inputs -if [[ $# -ne 0 ]]; then - # linux/bash help way - [[ "$1" = --help ]] && usage - - while getopts ?cegfhn:d c - do - case $c in - # Nodes - n) - node=$OPTARG - ;; - f) - force=9 - ;; - d) - DEBUG=true - ;; - c) - CLEAN=true - ;; - e) - DEV=true - ;; - g) - GUI=true - ;; - *) - usage - ;; - esac - done - shift `expr $OPTIND - 1` - action="$@" -fi - -# Define the cluster -SetCluster $node -if [[ -z $CLUSTER ]]; then - printf "$0: illegal -n parameters\n" - usage -else - # Remember the number of nodes in the cluster - for node in $CLUSTER; do - nnodes=nnodes+1 - done -fi - -# Do the action -[[ "$action" = "" ]] && action=status -case "$action" in - start|stop|kill|status) - Do$action - ;; - *) - usage - ;; -esac -exit 0 diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bat b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bat deleted file mode 100755 index 95bd93b246..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.bat +++ /dev/null @@ -1,371 +0,0 @@ -@echo off -REM --------------------------------------------------------------------------- -REM JOnAS: Java(TM) Open Application Server -REM Copyright (C) 2006-2009 Bull S.A.S. -REM Contact: jonas-team@ow2.org -REM -REM This library is free software; you can redistribute it and/or -REM modify it under the terms of the GNU Lesser General Public -REM License as published by the Free Software Foundation; either -REM version 2.1 of the License, or any later version. -REM -REM This library is distributed in the hope that it will be useful, -REM but WITHOUT ANY WARRANTY; without even the implied warranty of -REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -REM Lesser General Public License for more details. -REM -REM You should have received a copy of the GNU Lesser General Public -REM License along with this library; if not, write to the Free Software -REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -REM USA -REM -REM Initial developer(s): Jerome Pioux - Benoit Pelletier -REM --------------------------------------------------------------------------- -REM $Id$ -REM --------------------------------------------------------------------------- - -REM Start, Stop JONAS cluster nodes -REM Usage: jcl [-n ] start | stop - -setlocal enabledelayedexpansion - -REM ----- If SEPARATE_WINDOWS=yes or YES exists in the user env., then use -win on startup -if not defined SEPARATE_WINDOWS set SEPARATE_WINDOWS=No - -:: ------------------------------------------ -:: NO NEED TO MODIFY ANYTHING BELOW THIS LINE -:: ------------------------------------------ - -REM ----- Delay in seconds to apply between nodes startup/shutdown -set /a DELAY1_AFTER_NODE_START=10 -set /a DELAY2_AFTER_NODE_START=4 -set /a DELAY_BETWEEN_NODE_STOP=1 - -REM ----- Set defaults if this script is called directly w/o the script wrapper -if "%JCL_NUMBER_OF_NODES%"=="" set JCL_NUMBER_OF_NODES=4 -if "%JCL_BASE_PREFIX%"=="" set JCL_BASE_PREFIX=%JCL_CLUSTER_DAEMON_DIR%\jb -if "%JCL_DOMAIN_NAME%"=="" set JCL_DOMAIN_NAME=sampleClusterDomain -if "%JCL_NODE_NAME_PREFIX%"=="" set JCL_NODE_NAME_PREFIX=node -if "%JCL_CLUSTER_DAEMON_DIR%"=="" set JCL_CLUSTER_DAEMON_DIR=cd -if "%JCL_DB_DIR%"=="" set JCL_DB_DIR=db -if "%JCL_DB_NAME%"=="" set JCL_DB_NAME=db -if "%JCL_MASTER_DIR%"=="" set JCL_MASTER_DIR=master -if "%JCL_MASTER_NAME%"=="" set JCL_MASTER_NAME=master - -REM ----- Defined list of supported actions -set /a numberOfCommands=2 -set actionTable[1]=start -set actionTable[2]=stop - -REM ----- CHECK if JONAS_ROOT is set -if not defined JONAS_ROOT ( - echo. - echo Error: JONAS_ROOT is not defined - goto endScript -) - -REM Set bin directory -set BIN=%JONAS_ROOT%\bin - -REM ----- Need findstr -findstr /? >nul 2>&1 -if errorlevel 1 ( - echo. - echo Error: findstr is not available! - goto endScript -) - -REM ----- Help wanted the "dos cmdline way" -if "%1X"=="/?X" goto usage - -REM ----- Parse input parameters -set /a nflag=0 -set /a err=0 -set cluster= -set action= - -for %%i in (%*) do ( - REM ----- err=3: Command syntax error - if defined action if %err% equ 0 set /a err=3 - - REM ----- There is an error, break out of the parser - if !err! equ 1 goto endParsing - - set param=%%i - - REM ----- Param starts with a dash - if /I "!param:~0,1!"=="-" ( - set /a nflag=0 - set key=!param:~1,2! - REM ----- Found -n flag to customize cluster nodes - if /I "!key!"=="n" ( - set /a nflag=1 - REM ----- err=1: Invalid flag - ) else ( - if %err% equ 0 set /a err=1 - ) - - REM ----- Param does not start with a dash - ) else ( - REM ----- Param is following up the -n flag - if !nflag! equ 1 ( - REM ----- See if param is a known action - for /l %%c in (1,1,%numberOfCommands%) do ( - REM ----- param is an action, register it and turn off the nflag - if /I !param! equ !actionTable[%%c]! ( - set action=!param! - set /a nflag=0 - ) - ) - REM ----- param was not an action, so it is a node - enter it in cluster - if !nflag! equ 1 ( - call :IsNumeric !param! answer - if "!answer!"=="yes" ( - if !param! GTR %JCL_NUMBER_OF_NODES% if %err% equ 0 set /a err=4 - set param=%JCL_NODE_NAME_PREFIX%!param! - ) - if defined cluster (set cluster=!cluster!,!param!) else (set cluster=!param!) - ) - - REM ----- Param is not following up the -n - ) else ( - REM ----- See if param is a known action - for /l %%c in (1,1,%numberOfCommands%) do ( - REM ----- param is an action, register it and turn on the done flag - if /I !param! equ !actionTable[%%c]! ( - set action=!param! - set /a done=1 - ) - ) - REM ----- err=2: Invalid action specified - if !done! equ 0 if %err% equ 0 set /a err=2 - ) - ) -) -:endParsing - -REM ----- err=2: No action specified -if %err% equ 0 if not defined action set /a err=2 - -REM ----- Work on the cluster nodes -set wholeCluster= -if not defined cluster set wholeCluster=1 -if "%cluster%"=="all" set wholeCluster=1 -if "%cluster%"=="0" set wholeCluster=1 - -if defined wholeCluster ( - set cluster=clusterd,db,master - for /l %%c in (1,1,%JCL_NUMBER_OF_NODES%) do ( - set cluster=!cluster!,%JCL_NODE_NAME_PREFIX%%%c - ) -) - -REM ----- report errors -if not %err% equ 0 ( - echo. - if %err% equ 1 echo Error: Invalid flag ^(-%key%^) - if %err% equ 2 echo Error: Invalid action or no action specified - if %err% equ 3 echo Error: Command syntax error - if %err% equ 4 echo Error: Node must be less than %JCL_NUMBER_OF_NODES% - goto usage -) - -REM Remember the number of nodes in the cluster -set /a nnodes=0 -for %%i in (%cluster%) do (set /a nnodes+=1) - -REM ----- Go do the work -call :%action% - -:endScript -endlocal - -REM ----- Unset variables -for /f "usebackq tokens=1-2 delims==" %%a in (`set JCL_`) do set %%a= - -echo. -exit /b 0 - -REM ------------------------------- END MAIN ------------------------------- - -REM ------------------------------ SUBROUTINES ----------------------------- -:: --------------- -:: CLUSTER DAEMON -:: --------------- -:ClusterDaemon -setlocal -set action=%1 - -if "%action%"=="start" ( - echo. - echo *** Starting JOnAS cluster daemon ... - call %BIN%\jclusterd start - call :sleep %DELAY2_AFTER_NODE_START% -) else ( -if "%action%"=="stop" ( - echo. - echo *** Stopping JOnAS cluster daemon ... - call %BIN%\jclusterd stop - call :sleep %DELAY_BETWEEN_NODE_STOP% -)) -endlocal&goto :eof - -:: --------------- -:: START -:: --------------- -:start -setlocal - -set /a n=1 - -echo %SEPARATE_WINDOWS%|findStr "[Yy][Ee][Ss]" >nul -if %errorlevel% equ 0 (set WIN=-win) else (set WIN=) - -REM ----- Startup cluster; If we are in control of the whole cluster, the nodes -REM ----- are already in the correct order for startup -for %%i in (%cluster%) do ( - set node=%%i - - call :SetJonasBase !node! base - set JONAS_BASE=!base! - set CATALINA_BASE=!JONAS_BASE! - - REM ----- Set debug and startup delay - if /I "!node!"=="clusterd" ( - call :ClusterDaemon start - ) else ( - - if /I "!node!"=="master" ( - set /a delay=%DELAY1_AFTER_NODE_START% - ) else ( - if /I "!node!"=="db" ( - set /a delay=%DELAY1_AFTER_NODE_START% - ) else ( - set /a delay=%DELAY2_AFTER_NODE_START% - )) - - REM ----- Save and clean up logs - rmdir /S /Q !JONAS_BASE!\logs\old\* 2>NUL - mkdir !JONAS_BASE!\logs\old 2>NUL - xcopy /Q /Y !JONAS_BASE!\logs\* !JONAS_BASE!\logs\old >NUL - - - - echo. - echo *** Starting JOnAS !node! instance ... - echo ^(jonas start !WIN! -n !node! -Ddomain.name=%JCL_DOMAIN_NAME%^) - call %BIN%\jonas start !WIN! -n !node! -Ddomain.name=%JCL_DOMAIN_NAME% - - REM ----- Wait delay seconds between nodes startup - if !n! LSS %nnodes% ( - if /I "!WIN!"=="-win" ( - echo. - echo Waiting !%delay!s before starting next node ... - call :sleep !delay! - ) - ) - set /a n+=1 - ) -) -endlocal&goto :eof - -:: --------------- -:: STOP -:: --------------- -:stop -setlocal - -REM ----- Stop cluster; If we are in control of the whole cluster, the nodes -REM ----- are in the correct order for startup which is the reverse order of -REM ----- how we would like to stop them; so let's build a "reverse" cluster -set cluster2= -if defined wholeCluster ( - for %%i in (%cluster%) do ( - set node=%%i - if defined cluster2 (set cluster2=!node!,!cluster2!) else (set cluster2=!node!) - ) - set cluster=!cluster2! -) - -REM ----- Stop cluster -for %%i in (%cluster%) do ( - set node=%%i - - call :SetJonasBase !node! base - set JONAS_BASE=!base! - set CATALINA_BASE=!JONAS_BASE! - - if /I "!node!"=="clusterd" ( - call :ClusterDaemon stop - ) else ( - echo. - echo *** Stopping JOnAS !node! instance ... - echo ^(jonas stop -n !node!^) - call %BIN%\jonas stop -n !node! - - call :sleep %DELAY_BETWEEN_NODE_STOP% - ) -) -:endStop -endlocal&goto :eof - -:: --------------- -:: SetJonasBase -:: --------------- -:SetJonasBase -setlocal -set node=%1 - -if "%node%"=="clusterd" ( - set base=%JCL_CLUSTER_DAEMON_DIR% -)else ( -if "%node%"=="master" ( - set base=%JCL_MASTER_DIR% -) else ( -if "%node%"=="db" ( - set base=%JCL_DB_DIR% -) else ( - set /a l=%node:node=% - set base=%JCL_BASE_PREFIX%!l! -))) -endlocal&set %2=%base%&goto :eof - -:: --------------- -:: ISNUMERIC -:: --------------- -:isnumeric -setlocal -set string=%1 -REM ----- Do not consider quote if any -set string=%string:"=% -REM ----- Use findstr with reg.ex. -echo %string%|findStr "[^0-9]" >nul -set answer=no -if %errorlevel% equ 1 set answer=yes -endlocal&set %2=%answer%&goto :eof - -:: --------------- -:: SLEEP -:: --------------- -:sleep -setlocal -set delay=%1 -ping 1.1.1.1 -n 1 -w %delay%000 >nul -endlocal&goto :eof - -:: --------------- -:: USAGE -:: --------------- -:usage -echo. -echo usage: %~n0 ^[ -n ^[clusterd^],^[db^],^[master^],^[node number^],... ^] start^|stop -echo Syntax notes: -echo * At least, one space is mandatory after -n -echo * If multiple values are used after -n, they must be separated by a -echo delimiter ^(space, comma...^) or multiple -n can also be used -echo * All nodes in the cluster will be used if -n is not specified -echo. -echo Example: -n db,1,3 addresses the db, node1 and node3 instances -echo. -echo Use "set SEPARATE_WINDOWS=yes" if you want to start the JVMs in dedicated windows -goto endScript diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.ksh b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.ksh deleted file mode 100644 index 0ebf89756d..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.ksh +++ /dev/null @@ -1,541 +0,0 @@ -#!/bin/ksh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8.2: Jerome Pioux - Benoit Pelletier -# -# Modifications for 4.8.3 -# ----------------------- -# Jerome - 10/17/2006 -# - Make this bash script to work for ksh. ie: -# (first line may need to be altered on some sites)... -# * change all with -# * Add a prefix (Do) in the start,stop,kill,status function names -# * Other modifications are flagged as Jerome - 10/17/2006 in the code -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Status|Start|Stop|Kill JONAS cluster node(s) -# Usage: cl [-n ] [status] | < [-f] kill | [-d] start | stop>" - -# If XWINDOWS=yes or YES exists in the user env., then use -win on startup -XWINDOWS=${XWINDOWS:-no} - -# Default values -JCL_NUMBER_OF_NODES=${JCL_NUMBER_OF_NODES:-40} -JCL_BASE_PREFIX=${JCL_BASE_PREFIX:-$JCL_CLUSTER_DAEMON_DIR/jb} -JCL_DOMAIN_NAME=${JCL_DOMAIN_NAME:-sampleClusterDomain} -JCL_NODE_NAME_PREFIX=${JCL_NODE_NAME_PREFIX:-node} -JCL_CLUSTER_DAEMON_DIR=${JCL_CLUSTER_DAEMON_DIR:-cd} -JCL_DB_DIR=${JCL_DB_DIR:-db} -JCL_DB_NAME=${JCL_DB_NAME:-db} -JCL_MASTER_DIR=${JCL_MASTER_DIR:-master} -JCL_MASTER_NAME=${JCL_MASTER_NAME:-master} - -# ------------------------------------------ -# NO NEED TO MODIFY ANYTHING BELOW THIS LINE -# ------------------------------------------ -JCL_BASE_DEBUG_PORT=${JCL_BASE_DEBUG_PORT:-414} - -# Delay in seconds to apply between nodes startup/shutdown -DELAY1_AFTER_NODE_START=20 -DELAY2_AFTER_NODE_START=3 -DELAY_BETWEEN_NODE_STOP=1 - -CLUSTER="" -jonasbase="" -typeset -i nnodes=0 -typeset -i wholeCluster=0 -osname=`uname -s` - - -# ------ -# ATEXIT -# ------ -atexit() -{ - printf "\n" -} - -# ----- -# USAGE -# ----- -usage() -{ - printf "\n" - printf "usage: $(basename $0) [ [-n ] [status]] | < [-f] kill | [-d] start | stop > ]\n" - printf "\n" - printf " With node_id: clusterd (or cd), $JCL_MASTER_NAME (or ms), $JCL_DB_NAME \n" - printf " With node_number: node number of JOnAS instances which corresponds to the suffix of the node name\n" - printf " * Form1: Multiple nodes can be specified between commas (no space)\n" - printf " * Form2: Range(s) can be entered using a dash between node numbers (no space)\n" - printf " * Any combination between form1 and form2 is allowed\n" - printf " Ex: -n $JCL_DB_NAME,1-3 applies to the $JCL_DB_NAME node and nodes 1,2 and 3\n" - printf " Notes:\n" - printf " * Do not specify -n or use -nall to address all nodes in the cluster\n" - printf " * A node number for your cluster must be between 1 and $JCL_NUMBER_OF_NODES\n" - printf "\n" - printf " Use \"export XWINDOWS=yes\" if you want to start the JVMs in dedicated xterms\n"; - printf "\n" - exit 1 -} - -# --------- -# DOPADDING -# --------- -DoPadding() -{ - # Use to align fields on the screen - typeset -i m1=$1 - typeset -i m2=$2 - typeset -i p=m2-m1 - - typeset -i i=1 - while [[ $i -le $p ]]; do - printf " " - i=i+1 - done - printf " " - return -} - -# ------------ -# SETJONASBASE -# ------------ -SetJonasBase() -{ - # Do not add any echo or printf in this routine - # besides the one before the return - case $1 in - clusterd) - base=$JCL_CLUSTER_DAEMON_DIR - ;; - $JCL_MASTER_NAME) - base=$JCL_MASTER_DIR - ;; - $JCL_DB_NAME) - base=$JCL_DB_DIR - ;; - *) - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#JCL_NODE_NAME_PREFIX} - #base=$JCL_BASE_PREFIX${node:$l} - base=$JCL_BASE_PREFIX${node#*$JCL_NODE_NAME_PREFIX} - ;; - esac - echo $base - return -} - -# ---------- -# SETCLUSTER -# ---------- -SetCluster() -{ -str=${1:-all} -typeset -i n=1 - -# --- All nodes -# We are in control so order nodes "startup-ready" -if [[ $str = 0 || $str = all ]]; then - wholeCluster=1 - cluster="clusterd $JCL_DB_NAME $JCL_MASTER_NAME" - while [[ $n -le $JCL_NUMBER_OF_NODES ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$n" - n=n+1 - done - CLUSTER=${cluster#\ *} - return -fi - -# --- Partial nodes list -# Respect order chosen by user -typeset -i err=0 -typeset -i numnode -OLDIFS=$IFS - -# For nodes between commas -IFS=, -for substr in $str; do - n="$(expr $substr : '.*-')" - - # No dash-formed node - if [[ $n -eq 0 ]]; then - # Non numeric node - if ( echo "$substr" | grep -q [^[:digit:]] ); then - # Abbrev. - [[ $substr = cd ]] && substr=clusterd - [[ $substr = ms ]] && substr=$JCL_MASTER_NAME - if [[ $substr != clusterd && - $substr != $JCL_MASTER_NAME && - $substr != $JCL_DB_NAME ]]; then - err=1 - fi - cluster="$cluster $substr" - # Numeric - else - numnode=$substr - # numnode must be less then JCL_NUMBER_OF_NODES - [[ $numnode -gt $JCL_NUMBER_OF_NODES ]] && err=1 - cluster="$cluster $JCL_NODE_NAME_PREFIX$substr" - fi - - # dash-formed node - else - n1=${substr%%-*} - n2=${substr##*-} - # Both dash-formed nodes must be numeric - if ( echo "$n1" | grep -q [^[:digit:]] || - echo "$n2" | grep -q [^[:digit:]] ); then - err=1 - else - typeset -i i=$n1 && typeset -i imax=$n2 - # First dash-formed node must be less or equal the second - # which in turn must be less then JCL_NUMBER_OF_NODES - [[ $i -gt $imax || $imax -gt $JCL_NUMBER_OF_NODES ]] && err=1 - while [[ $i -le $imax ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$i" - i=i+1 - done - fi - fi -done -IFS=$OLDIFS - -# Remove heading space if any -cluster=${cluster#\ *} - -# Raise error on duplicates -if [[ $err -eq 0 ]]; then - for node1 in $cluster; do - n=0 - for node2 in $cluster; do - [[ $node1 = $node2 ]] && n=n+1 - done - [[ $n -gt 1 ]] && err=1 && break - done -fi - -# Error - empty cluster -[[ $err -eq 1 ]] && cluster="" -CLUSTER=$cluster -return -} - -# --------------- -# CLUSTER DAEMON -# --------------- -ClusterDaemon() -{ - case ${1:-na} in - start) - printf "\n\n*** Starting JOnAS cluster daemon ... \n" - # Jerome - 10/17/2006 - Change regex below for ksh support - #if [[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]]; then - if [[ $XWINDOWS = [Yy][Ee][Ss] ]]; then - xterm -title $HOSTNAME:clusterd -geometry 110x16 -sb -e jclusterd start & - else - jclusterd start & - fi - sleep $DELAY2_AFTER_NODE_START - ;; - - stop) - echo -e "\n\n*** Stopping JOnAS cluster daemon ..." - jclusterd stop - sleep $DELAY_BETWEEN_NODE_STOP - ;; - esac - return -} - -# ------- -# SOSTART -# ------- -Dostart() -{ - typeset -i delay - typeset -i n=1 - - # Jerome - 10/17/2006 - Change regex below for ksh support - #[[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]] && WIN="-win" || WIN="" - [[ $XWINDOWS = [Yy][Ee][Ss] ]] && WIN="-win" || WIN="" - - # Startup cluster; If we are in control of the whole cluster, the nodes - # are already in the correct order for startup - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - DBG="" - - # Set debug and startup delay - case $node in - clusterd) - ClusterDaemon start - continue - ;; - - $JCL_MASTER_NAME | $JCL_DB_NODE) - delay=$DELAY1_AFTER_NODE_START - ;; - - *) - delay=$DELAY2_AFTER_NODE_START - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#node} - #[[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node:$l}" - [[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node#*$JCL_NODE_NAME_PREFIX}" - ;; - esac - - # Save and clean up logs - rm -rf $JONAS_BASE/logs/old/* - mkdir -p $JONAS_BASE/logs/old - mv $JONAS_BASE/logs/* $JONAS_BASE/logs/old 2>/dev/null - - cmd="jonas start $WIN $DBG -n $node -Ddomain.name=$JCL_DOMAIN_NAME" - printf "\n\n*** Starting JOnAS $node instance ... \n($cmd)\n" - $cmd - - # Wait delay seconds between nodes startup - if [[ $n -lt $nnodes && $WIN = "-win" ]]; then - printf "\n\tWaiting ${delay}s before starting next node ..." - sleep $delay - fi - n=n+1 - done - return -} - -# ------ -# DOSTOP -# ------ -Dostop() -{ - typeset -i delay=$DELAY_BETWEEN_NODE_STOP - - # Stop cluster; If we are in control of the whole cluster, the nodes - # are in the correct order for startup which is the reverse order of - # how we would like to stop them; so let's build a "reverse" cluster - if [[ $wholeCluster -eq 1 ]]; then - for node in $CLUSTER; do - cluster2="$node $cluster2" - done - CLUSTER=$cluster2 - fi - - # Stop cluster - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - - if [[ $node = clusterd ]]; then - ClusterDaemon stop - continue - fi - - cmd="jonas stop -n $node" - printf "\n\n*** Stopping JOnAS $node instance ...\n($cmd)\n" - $cmd - - sleep $delay - done - return -} - -# ------ -# DOKILL -# ------ -Dokill() -{ - # Kill cluster - for node in $CLUSTER; do - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - - if [[ ! -z $pid ]]; then - cmd="/bin/kill -$force $pid" - printf "\n*** Killing JOnAS $node instance ...\n($cmd)\n" - $cmd - fi - done - return -} - -# -------- -# DOSTATUS -# -------- -Dostatus() -{ - typeset -i l - typeset -i lnode - typeset -i ljonasbase - typeset -i maxlnode=0 - typeset -i maxljonasbase=0 - - # Get longest strings length - # (to use in field alignment for display below) - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - [[ $lnode -gt $maxlnode ]] && maxlnode=$lnode - [[ $ljonasbase -gt $maxljonasbase ]] && maxljonasbase=$ljonasbase - done - - printf "\n" - - # Display status - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - - printf " node=%-s" $node - DoPadding $lnode $maxlnode - - printf "base=%-s" $jonasbase - DoPadding $ljonasbase $maxljonasbase - - printf "%0.s-> " - - if [[ $node = clusterd ]]; then - strToMatch=ClusterDaemon - else - strToMatch=Djonas.name=$node - fi - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - - if [[ ! -z $pid ]]; then - printf "running [$pid]\n" - else - printf "not running\n" - fi - done - return -} - -# ----- -# MAIN -# ----- -trap "atexit" exit - -# Jerome - 10/17/2006 -# On AIX, the ww is not supported (and not needed) -if [[ $(uname -s) = AIX ]]; then - XTERM=aixterm - psfmt=eo -else - XTERM=xterm - psfmt=ewwo -fi - -typeset -i n -typeset -i force=15 -debug=false - -# Show stopper -if [[ ! -n $JONAS_ROOT ]]; then - printf "$0: JONAS_ROOT is not defined\n" - exit 2 -fi -if ( ! echo $PATH | grep $JONAS_ROOT/bin >/dev/null 2>&1 ) then - printf "$0: JONAS_ROOT/bin is not in your PATH\n" - exit 3 -fi - -# Read inputs -if [[ $# -ne 0 ]]; then - # linux/bash help way - [[ "$1" = --help ]] && usage - - while getopts ?fhn:d c - do - case $c in - # Nodes - n) - node=$OPTARG - ;; - f) - force=9 - ;; - d) - debug=true - ;; - *) - usage - ;; - esac - done - shift `expr $OPTIND - 1` - action="$@" -fi - -# Define the cluster -SetCluster $node -if [[ -z $CLUSTER ]]; then - printf "$0: illegal -n parameters\n" - usage -else - # Remember the number of nodes in the cluster - for node in $CLUSTER; do - nnodes=nnodes+1 - done -fi - -# Do the action -[[ "$action" = "" ]] && action=status -case "$action" in - start|stop|kill|status) - Do$action - ;; - *) - usage - ;; -esac -exit 0 - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.sh b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.sh deleted file mode 100755 index 5b64827987..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jcl.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8: Jerome Pioux -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# jcl.ksh|bash launcher script -# Jerome - -# Recup jcl scripts location -if [ -L $0 ]; then - JCL_DIR=`dirname $(ls -l "$0" |sed "s/^.*-> //")` -else - JCL_DIR=`dirname $0` -fi - -# Check what shell is available (priority to bash) -if [ -x /bin/bash ]; then - shell=bash -elif [ -x /bin/ksh ]; then - shell=ksh -else - echo "Error: Could not find either /bin/bash or /bin/ksh" - exit 2 -fi - -# Setup appropriate script -JCL_SCP=$JCL_DIR/jcl.$shell - -# Should never see this if the install did its job -if [ ! -x $JCL_SCP ]; then - echo "Error: Could not find or execute $JCL_SCP" - exit 3 -fi - -# Runit -$JCL_SCP $* -exit 0 - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas deleted file mode 100644 index c9aca0942c..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas +++ /dev/null @@ -1,414 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): Adriana Danes : -# - Change /config en /conf -# - Use JONAS_BASE -# Florent Benoit & Ludovic Bert -# eyindanga -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -cygwin=false; -case "`uname`" in - CYGWIN*) cygwin=true ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "JONAS_ROOT" ] && - JONAS_ROOT=`cygpath --unix "$JONAS_ROOT"` - [ -n "JONAS_BASE" ] && - JONAS_BASE=`cygpath --unix "$JONAS_BASE"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath -m -s "$JAVA_HOME"` -fi - -# ----------------------------------------------------------------------- -# Compute JONAS_ROOT in case it has not been set. -# ----------------------------------------------------------------------- -if [ -z "$JONAS_ROOT" ]; then - savewd=`pwd` - cd `dirname "$0"` - zdir=`pwd` - cd "$savewd" - zfqn=$zdir/`basename "$0"` - JONAS_ROOT=`dirname "$zdir"` -## echo JONAS_ROOT is set to "$JONAS_ROOT" - export JONAS_ROOT -fi - - -# Check if $JONAS_ROOT is set. -if [ ! -f "$JONAS_ROOT"/bin/setenv ]; then - echo "Please set the JONAS_ROOT variable." - exit -fi - -# Set CLASSPATH and JONAS_BASE -. "$JONAS_ROOT"/bin/setenv - -# Display banner (if any) -if [ -f "$JONAS_BASE"/conf/banner.txt ]; then - cat "$JONAS_BASE"/conf/banner.txt -fi - -# Set path for JOnAS bootstrap libraries -LIB_BOOTSTRAP_PATH="$JONAS_ROOT"/lib/bootstrap - -# Update JONAS_CLASSPATH -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-launcher-for-addons.jar" -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-commands.jar" -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-version.jar" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JONAS_ROOT" ] && - JONAS_ROOT=`cygpath --path --windows "$JONAS_ROOT"` - [ -n "$JONAS_BASE" ] && - JONAS_BASE=`cygpath --path --windows "$JONAS_BASE"` -fi - -JONAS_ROOT_OPTS=-Djonas.root="$JONAS_ROOT" -JONAS_BASE_OPTS=-Djonas.base="$JONAS_BASE" -JONAS_SECURITYPOLICY_OPTS=-Djava.security.policy="$JONAS_BASE"/conf/java.policy -JONAS_SECURITYAUTH_OPTS=-Djava.security.auth.login.config="$JONAS_BASE"/conf/jaas.config -JONAS_ENDORSEDDIRS_OPTS=-Djava.endorsed.dirs="$JONAS_ROOT"/lib/endorsed - -JONAS_OPTS="\ - -Dipojo.log.level=ERROR \ - -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB \ - -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton \ - -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer \ - -Dcom.sun.CORBA.ORBDynamicStubFactoryFactoryClass=com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl \ - -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory \ - -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl \ - -Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl \ - -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl \ - " - - -# Most of the ORB and naming properties are not usually changed by the user !! Should be in a class. - -# --------------------------------------------- -# Get arguments -# --------------------------------------------- -ARGS= -MODE= -JONAS_NAME= -PINGTIMEOUT= -PINGSTATE= -HEADLESS="-Djava.awt.headless=true" -START_OPTS= -PINGTIMEOUT_OPT= -PINGSTATE_OPT= -WHERE=background -FORCE_FOREGROUND=false -ADMIN_CLASS=org.ow2.jonas.commands.admin.ClientAdmin -USERNAME= -PASSWORD= -while [ "$#" -gt 0 ] - do case "$1" in - start) - MODE=start - ;; - halt) - echo "[DEPRECATED] Please use stop argument instead of halt" - MODE=stop - PINGSTATE=j2ee.state.stopped - ;; - stop) - MODE=stop - PINGSTATE=j2ee.state.stopped - ;; - admin) - MODE=admin - FORCE_FOREGROUND=true - ;; - version) - MODE=version - FORCE_FOREGROUND=true - ;; - check) - MODE=check - FORCE_FOREGROUND=true - ;; - -standby) - ARGS="$ARGS -standby" - if [ "$MODE" = "stop" ]; then - FORCE_FOREGROUND=false - fi - ;; - -running) - # Implicit argument for the 'start' argument - ;; - -halt) - # Implicit argument for the 'stop' argument - ;; - -cp) - PARAMS="$PARAMS $1" - shift - JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS$1 - ;; - -debug) - PARAMS="$PARAMS $1" - shift - # $1=-p - if [ "$1" != "-p" ]; then - echo "-debug mode need a following \"-p \"" - exit 1 - fi - shift - JONAS_DEBUG_PORT=$1 - JONAS_DEBUG_SUSPEND=n - if [ "$2" = "-s" ]; then - shift - shift - JONAS_DEBUG_SUSPEND=$1 - fi - echo "JOnAS Debug Info :" - echo " listening on port : $JONAS_DEBUG_PORT" - echo " suspend mode : $JONAS_DEBUG_SUSPEND" - JONAS_DEBUG_OPTS=" -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=$JONAS_DEBUG_PORT,suspend=$JONAS_DEBUG_SUSPEND" - ;; - -fg) - WHERE=foreground - ;; - -bg) - WHERE=background - ;; - -gui) - echo "Start Felix GUI with JOnAS." - START_OPTS="$START_OPTS -Djonas.felix.gui.enabled=true" - HEADLESS="" - ;; - -tui) - echo "Start Felix TUI with JOnAS." - START_OPTS="$START_OPTS -Djonas.felix.tui.enabled=true" - FORCE_FOREGROUND=true - ;; - -win) - WHERE=window - ;; - -nojit) - JONAS_OPTS="$JONAS_OPTS -Djava.compiler=NONE" - START_OPTS="$START_OPTS -Djava.compiler=NONE" - ;; - -dev) - START_OPTS="$START_OPTS -Djonas.developer=true" - ;; - -failStartOnError) - JONAS_OPTS="$START_OPTS -Djonas.start.nofail=true" - ;; - -clean) - echo "Clean Felix cache before starting JOnAS." - START_OPTS="$START_OPTS -Djonas.cache.clean=true" - ;; - -n) - PARAMS="$PARAMS $1" - shift - JONAS_NAME=$1 - ;; - -timeout) - PARAMS="$PARAMS $1" - shift - PINGTIMEOUT=$1 - ;; - -state) - PARAMS="$PARAMS $1" - shift - PINGSTATE=$1 - ;; - -D*) - JONAS_OPTS="$JONAS_OPTS $1" - START_OPTS="$START_OPTS $1" - ;; - -X*) - JAVA_OPTS="$JAVA_OPTS $1" - ;; - -target) - if [ "$MODE" = "start" ]; then - ARGS="$ARGS -start" - fi - if [ "$MODE" = "stop" ]; then - ARGS="$ARGS -stop" - fi - MODE=admin - ARGS="$ARGS -target" - ;; - -username) - PARAMS="$PARAMS $1" - shift - USERNAME="-username $1" - ;; - -password) - PARAMS="$PARAMS $1" - shift - PASSWORD="-password $1" - ;; - *) - # All other args are passed "as is" to the java program - ARGS="$ARGS $1" - ;; - esac - if [ "$1" != "-win" ]; then - PARAMS="$PARAMS $1" - fi - shift -done - -# --------------------------------------------- -# Check args -# --------------------------------------------- -case "$MODE" in - start) - CLASS_TO_RUN="$ADMIN_CLASS -start" - ;; - stop) - CLASS_TO_RUN="$ADMIN_CLASS -stop" - ;; - admin) - CLASS_TO_RUN=$ADMIN_CLASS - ;; - version) - CLASS_TO_RUN=org.ow2.jonas.Version - ;; - check) - CLASS_TO_RUN=org.ow2.jonas.commands.check.CheckEnv - ;; - *) - # Usage - # Will be displayed if the user type an unrecognized command - echo "Unrecognized command : '$*'" - echo "Usage: $0 start | stop | admin | version | check" - echo "Options:" - echo " for 'start': [-fg] [-bg] [-win] [-n] [-standby] [-debug] [-gui] [-tui] [-dev] [-clean] [-nojit]" - echo " -fg Launch JOnAS in foreground (Only applicable for 'start')." - echo " -bg Launch JOnAS in background (Only applicable for 'start')." - echo " -win Launch JOnAS in a separate window (Only applicable for 'start')." - echo " -n Specify the JOnAS instance name." - echo " -standby Allow to reach the STANDBY state (Only applicable for 'start' and 'stop')." - echo " -debug -p [-s ] Debug the JOnAS instance." - echo " -gui Launch JOnAS with the Apache Felix GUI (Only applicable for 'start')." - echo " -tui Launch JOnAS with the Apache Felix Shell" - echo " (allow to perform OSGi operations on the framework)." - echo " (Only applicable for 'start')" - echo " -dev Use M2 registry for bundles (for JOnAS developers)." - echo " -failStartOnError Make the server startup fail (i.e., stop automatically) if deployment of any deployable fails." - echo " -clean Clean Felix cache before starting JOnAS." - echo " -nojit Disable JIT." - echo " for '*': [-cp] [-n] [-timeout] [-target] [-D*]" - echo " -cp Additional CLASSPATH entries (to be used with care)." - echo " -timeout Specify a new connection timeout." - echo " -target [options] Perform remote administration tasks." - echo " -Dname=value Add JVM properties." - exit 1 - ;; -esac - -# --------------------------------------------- -# Print out JONAS_BASE -# --------------------------------------------- -case "$MODE" in - start|check) - echo "JONAS_BASE is set to" $JONAS_BASE - ;; -esac - -# --------------------------------------------- -# Add RMI Annotation -# --------------------------------------------- -#if [ -z "$ANNOTATE" ]; then -# JONAS_OPTS="$JONAS_OPTS \ -# -Djava.rmi.server.RMIClassLoaderSpi=org.ow2.jonas.lib.bootstrap.RemoteClassLoaderSpi" -#fi - -# --------------------------------------------- -# Set jonas server name -# --------------------------------------------- -if [ ! -z "$JONAS_NAME" ]; then - JONAS_OPTS="$JONAS_OPTS -Djonas.name=$JONAS_NAME " - START_OPTS="$START_OPTS -Djonas.name=$JONAS_NAME " -fi - -# --------------------------------------------- -# Set jonas timeout for ping -# --------------------------------------------- -if [ ! -z "$PINGTIMEOUT" ]; then - PINGTIMEOUT_OPT="-timeout $PINGTIMEOUT" -fi - -# --------------------------------------------- -# Set jonas state for ping -# --------------------------------------------- -if [ ! -z "$PINGSTATE" ]; then - PINGSTATE_OPT="-state $PINGSTATE" -fi - -# Add Headless if needed -START_OPTS="$START_OPTS $HEADLESS" - -# Force foreground mode -if [ "$FORCE_FOREGROUND" = true ]; then - WHERE=foreground -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JONAS_CLASSPATH" ] && - JONAS_CLASSPATH=`cygpath --path --windows "$JONAS_CLASSPATH"` -fi - - -# --------------------------------------------- -# Run java command -# --------------------------------------------- -if [ "$MODE" = "start" ] -then - case "$WHERE" in - window) - xterm -title $HOSTNAME:$JONAS_NAME -geometry 110x16 -sb -e $0 $PARAMS -fg & - ;; - foreground) - # Start JOnAS in the foreground - exec $JAVA $JAVA_OPTS $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" $JONAS_OPTS -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD - ;; - *) - # Start JOnAS in the background - $JAVA $JAVA_OPTS $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD & - - # Wait for JOnAS to actually start - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $ADMIN_CLASS -ping $PINGTIMEOUT_OPT $PINGSTATE_OPT $ARGS $USERNAME $PASSWORD - ;; - esac -elif [ "$MODE" = "stop" ] -then - # Send the JMX command for stopping JOnAS, in the background - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD & - - # Wait for JOnAS to actually stop - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $ADMIN_CLASS -ping $PINGTIMEOUT_OPT $PINGSTATE_OPT $ARGS $USERNAME $PASSWORD -else - # JOnAS admin or other similar command - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $PINGTIMEOUT_OPT $PINGSTATE_OPT $USERNAME $PASSWORD -fi diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas.bat b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas.bat deleted file mode 100755 index dab4d6ccc1..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonas.bat +++ /dev/null @@ -1,426 +0,0 @@ -@Echo Off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): Miroslav Halas -Rem Adriana Danes : -Rem - Change /config in /conf -Rem - Use JONAS_BASE -Rem Jerome Pioux: -Rem - Remove extra spaces in :start_jonas_bg after %JAVA% - was causing -Rem bug #306113 - happen only if the script is used from the tarball -Rem (UNIX format [LF]). As a side note, with 4.8.3, the script will -Rem be saved as DOS format [CRLF] inside SVN. -Rem eyindanga: -Rem - Start JOnAS on OSGi. -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -if ["%JONAS_ROOT%"]==[""] goto emptyroot -goto execute - -Rem %~dp0 is the directory in which this batch file is. JONAS_ROOT\bin in our case. -:emptyroot -pushd "%~dp0" -cd .. -@set JONAS_ROOT=%cd% -@echo JONAS_ROOT is set to %JONAS_ROOT% -popd - -Rem --------------------------------------------- -Rem set environment -Rem --------------------------------------------- -if ["%JONAS_ROOT%"]==[""] goto setroot - -:execute -call "%JONAS_ROOT%\bin\setenv.bat" - -Rem Display JOnAS banner (if any) -if not exist "%JONAS_BASE%\conf\banner.txt" goto no_banner -more "%JONAS_BASE%\conf\banner.txt" - -Rem Marker when no banner is available -:no_banner - -Rem Set path for JOnAS bootstrap libraries -set LIB_BOOTSTRAP_PATH=%JONAS_ROOT%\lib\bootstrap - -Rem Set JONAS_CLASSPATH -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-launcher-for-addons.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-commands.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-version.jar - -Rem --------------------------------------------- -Rem set JONAS_OPTS -Rem --------------------------------------------- -Rem JAVA_HOME must be set since config_env.bat requires it for tools.jar -if ["%JAVA_HOME%"]==[""] goto setjava - -Rem JONAS_OPTS may be already partially initialized -set JONAS_OPTS=%JONAS_OPTS% -Djonas.root="%JONAS_ROOT%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.base="%JONAS_BASE%" -set JONAS_OPTS=%JONAS_OPTS% -Dipojo.log.level=ERROR -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.auth.login.config="%JONAS_BASE%\conf\jaas.config" -set JONAS_OPTS=%JONAS_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" -set JONAS_OPTS=%JONAS_OPTS% -Dcom.sun.CORBA.ORBDynamicStubFactoryFactoryClass=com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl - -Rem --------------------------------------------- -Rem Get args -Rem --------------------------------------------- - -if [%1]==[] goto no_arg - -set ARGS= -set MODE= -set JONASNAME= -set PINGTIMEOUT= -set PINGSTATE= -set ANNOTATE= -set WHERE=background -set HEADLESS=-Djava.awt.headless=true -set START_OPTS= -set FORCE_FOREGROUND=false -set ADMIN_CLASS=org.ow2.jonas.commands.admin.ClientAdmin -set USERNAME= -set PASSWORD= -:loop_on_args -set VALUE=%~1 -if [%1]==[start] goto start_arg -if [%1]==[stop] goto stop_arg -if [%1]==[halt] goto halt_arg -if [%1]==[admin] goto admin_arg -if [%1]==[version] goto version_arg -if [%1]==[check] goto check_arg -if [%1]==[ntservice] goto ntservice_arg -if [%1]==[-standby] goto standby_arg -if [%1]==[-running] goto next_arg -if [%1]==[-halt] goto next_arg -if [%1]==[-fg] goto fg_arg -if [%1]==[-bg] goto bg_arg -if [%1]==[-win] goto win_arg -if [%1]==[-n] goto n_arg -if [%1]==[-timeout] goto timeout_arg -if [%1]==[-state] goto state_arg -if [%1]==[-cfgsvc] goto cfgsvc_arg -if [%1]==[-cp] goto cp_arg -if [%1]==[-debug] goto debug_arg -if [%1]==[-target] goto target_arg -if [%1]==[-gui] goto gui_arg -if [%1]==[-tui] goto tui_arg -if [%1]==[-dev] goto dev_arg -if [%1]==[-failStartOnError] goto start_no_fail_arg -if [%1]==[-clean] goto clean_arg -if [%1]==[-username] goto username_arg -if [%1]==[-password] goto password_arg -if %VALUE:~0,2%==-D goto jonas_opts -if %VALUE:~0,2%==-X goto java_opts -set ARGS=%ARGS% %1 -goto next_arg - -Rem First arguments : start, stop, admin, version, check - -:start_arg -set MODE=start -set CLASS_TO_RUN=%ADMIN_CLASS% -start -goto next_arg - -:stop_arg -set MODE=stop -set CLASS_TO_RUN=%ADMIN_CLASS% -stop -set PINGSTATE=-state j2ee.state.stopped -goto next_arg - -:halt_arg -echo [DEPRECATED] Please use stop argument instead of halt -goto stop_arg - -:admin_arg -set MODE=admin -set CLASS_TO_RUN=%ADMIN_CLASS% -set FORCE_FOREGROUND=true -goto next_arg - -:version_arg -set MODE=version -set CLASS_TO_RUN=org.ow2.jonas.Version -set FORCE_FOREGROUND=true -goto next_arg - -:check_arg -set MODE=check -set CLASS_TO_RUN=org.ow2.jonas.commands.check.CheckEnv -set FORCE_FOREGROUND=true -goto next_arg - -Rem Take all arguments after ntservice and goto ntservice processing -:ntservice_arg -set MODE=ntservice -shift -set ARGS= -:nt_args -if [%1]==[] goto nt_args_done -set ARGS=%ARGS% %1 -shift -goto nt_args - -:nt_args_done -echo JONAS_BASE is set to %JONAS_BASE% -goto ntservice - -Rem Add -D System Properties -:jonas_opts -Set PROP=%~1 -shift -Set PROP=%PROP%=%1 -Set JONAS_OPTS=%JONAS_OPTS% %PROP% -Set START_OPTS=%START_OPTS% %PROP% -goto next_arg - -Rem Add -X System Properties -:java_opts -Set JAVA_OPTS=%JAVA_OPTS% %~1 -goto next_arg - -:standby_arg -set ARGS=%ARGS% -standby -if [%MODE%]==[stop] set FORCE_FOREGROUND=false -goto next_arg - -:gui_arg -echo Start Felix GUI with JOnAS. -set START_OPTS=%START_OPTS% -Djonas.felix.gui.enabled=true -set HEADLESS= -goto next_arg - -:tui_arg -echo Start Felix TUI with JOnAS. -set START_OPTS=%START_OPTS% -Djonas.felix.tui.enabled=true -set FORCE_FOREGROUND=true -goto next_arg - -:dev_arg -echo JOnAS starts in developer mode. -set START_OPTS=%START_OPTS% -Djonas.developer=true -goto next_arg - -:start_no_fail_arg -echo JOnAS starts in fail start on error. -set START_OPTS=%START_OPTS% -Djonas.start.nofail=true -goto next_arg - -:clean_arg -echo Clean Felix cache before starting JOnAS. -set START_OPTS=%START_OPTS% -Djonas.cache.clean=true -goto next_arg - -:fg_arg -set WHERE=foreground -goto next_arg - -:bg_arg -set WHERE=background -goto next_arg - -:win_arg -set WHERE=window -goto next_arg - -:n_arg -shift -set JONASNAME=%1 -set JONAS_OPTS=%JONAS_OPTS% -Djonas.name="%JONASNAME%" -set START_OPTS=%START_OPTS% -Djonas.name="%JONASNAME%" -goto next_arg - -:timeout_arg -shift -set PINGTIMEOUT=-timeout %1 -goto next_arg - -:state_arg -shift -set PINGSTATE=-state %1 -goto next_arg - -:cfgsvc_arg -shift -if [%1]==[] goto cfgsvc_usage -set WHERE=cfgsvc -set WRAPPER_CONF=%1 -goto start_arg - -:cp_arg -shift -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%~1 -goto next_arg - -:debug_arg -shift -if not [%1]==[-p] goto debug_usage -shift -set JONAS_DEBUG_PORT=%1 -set JONAS_DEBUG_SUSPEND=n -if not [%2]==[-s] goto set_debug_opts -shift -shift -set JONAS_DEBUG_SUSPEND=%1 - -:set_debug_opts -echo JOnAS Debug Info : -echo listening on port : %JONAS_DEBUG_PORT% -echo suspend mode : %JONAS_DEBUG_SUSPEND% -set JONAS_DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=%JONAS_DEBUG_PORT%,suspend=%JONAS_DEBUG_SUSPEND% -goto next_arg - -:target_arg -if [%MODE%]==[start] set ARGS=%ARGS% -start -if [%MODE%]==[stop] set ARGS=%ARGS% -stop -set MODE=admin -set ARGS=%ARGS% -target -goto next_arg - -:username_arg -shift -set USERNAME=-username %1 -goto next_arg - -:password_arg -shift -set PASSWORD=-password %1 -goto next_arg - -:next_arg -if not [%1]==[-win] set PARAMS=%PARAMS% %1 -shift -if not [%1]==[] goto loop_on_args - -if [%MODE%]==[] goto no_mode - -Rem --------------------------------------------- -Rem Remove RMI Annotation -Rem --------------------------------------------- -Rem set JONAS_OPTS=%JONAS_OPTS% -Djava.rmi.server.RMIClassLoaderSpi=org.ow2.jonas.lib.bootstrap.RemoteClassLoaderSpi - -Rem Add Headless if needed -set START_OPTS=%START_OPTS% %HEADLESS% - -Rem Print out JONAS_BASE -if [%MODE%]==[start] echo JONAS_BASE is set to %JONAS_BASE% -if [%MODE%]==[check] echo JONAS_BASE is set to %JONAS_BASE% - -if %FORCE_FOREGROUND%==true set WHERE=foreground - -Rem --------------------------------------------- -Rem Run java command -Rem --------------------------------------------- - -if [%MODE%]==[stop] goto stop -if not [%MODE%]==[start] goto admin -if %WHERE%==cfgsvc goto cfgsvc_mode -if %WHERE%==window goto window -if %WHERE%==foreground goto foreground -if %WHERE%==background goto background -goto :EOF - -:cfgsvc_mode -rem called by ANT create_windows_service -set JAVA_CMD=%JAVA% -classpath "%JONAS_CLASSPATH%" org.ow2.jonas.commands.wrapper.GenerateWrapperConf -%JAVA_CMD% -d ; -i 2 wrapper.java.classpath "%JONAS_CLASSPATH%" >>%WRAPPER_CONF% -%JAVA_CMD% -i 2 wrapper.java.additional %JAVA_OPTS% %JONAS_OPTS% >>%WRAPPER_CONF% -echo wrapper.app.parameter.10=%JONASNAME% >>%WRAPPER_CONF% -echo wrapper.ntservice.name=JOnAS_%JONASNAME% >>%WRAPPER_CONF% -echo wrapper.ntservice.displayname=JOnAS (%JONASNAME%) >>%WRAPPER_CONF% -goto :EOF - -:foreground -REM start JOnAS in foreground mode -%JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:background -REM start JOnAS in background mode -start /B "JOnAS" %JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %ADMIN_CLASS% -ping %PINGTIMEOUT% %PINGSTATE% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:stop -REM stop JOnAS and wait for it to stop -start /B "JOnAS" %JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %PINGTIMEOUT% %PINGSTATE% %USERNAME% %PASSWORD% -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %ADMIN_CLASS% -ping %PINGTIMEOUT% %PINGSTATE% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:window -set WINDOW_TITLE="%HOSTNAME%:%JONASNAME%" -if %WINDOW_TITLE%==":" set WINDOW_TITLE="JOnAS Server" -start %WINDOW_TITLE% %JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:admin -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %PINGTIMEOUT% %PINGSTATE% %USERNAME% %PASSWORD% -goto :EOF - -:ntservice -"%JONAS_ROOT%\bin\jonasnt" %ARGS% -goto :EOF - -:setjava -echo JAVA_HOME not set. -goto :EOF - -:no_mode -echo No startup mode specified, specify start | stop | admin | version | check -goto usage - -:no_arg -echo No arguments specified. -goto usage - -:usage -echo jonas start | stop | admin | version | check| ntservice | -fg | -bg | -win | -n | -standby | -debug | -cfgsvc | -gui | -tui | -dev | -failStartOnError | -clean -echo Debug mode : jonas start -debug -p [-s ] -REM TODO: Add here explanation for the arguments -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto :EOF - -:cfgsvc_usage -echo -cfgsvc option requires filename for target wrapper.conf file -goto :EOF - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonasnt.bat b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonasnt.bat deleted file mode 100755 index cf4baa9d25..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/jonasnt.bat +++ /dev/null @@ -1,138 +0,0 @@ -@echo off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Copyright (c) 1999-2006 Tanuki Software Inc. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -if "%OS%"=="Windows_NT" goto nt -echo This script only works with NT-based versions of Windows. -goto :eof - -:nt -Rem check JONAS_ROOT -if ["%JONAS_ROOT%"]==[""] goto setJonasRoot - -Rem check JONAS_BASE -if ["%JONAS_BASE%"]==[""] goto setJonasBase - -Rem check WRAPPER_HOME -if ["%WRAPPER_HOME%"]==[""] goto setWrapperHome - -rem -rem Find the application home. -rem -set _WRAPPER_BIN=%WRAPPER_HOME%\bin\ -set _WRAPPER_BASE=wrapper -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-32.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-64.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -echo Unable to locate a Wrapper executable using any of the following names: -echo %_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-32.exe -echo %_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-64.exe -echo %_WRAPPER_BIN%%_WRAPPER_BASE%.exe -rem pause -goto :eof - -:jonasbase -rem Check that the JONAS_BASE is valid -if exist "%JONAS_BASE%\conf\jonas.properties" goto validate -echo The JONAS_BASE is not valid -rem pause -goto :eof - -:validate -rem Find the requested command. -for /F %%v in ('echo %1^|findstr "^console$ ^start$ ^stop$ ^restart$ ^status$ ^install$ ^uninstall"') do call :exec set COMMAND=%%v - -if "%COMMAND%" == "" ( - echo Usage: %0 { console : start : stop : restart : status : install : uninstall} - goto :eof -) else ( - shift -) - -set WRAPPER_CONF=%JONAS_BASE%\conf\wrapper.conf - -rem -rem Run the application. -rem At runtime, the current directory will be that of wrapper.exe -rem -:run -call :%COMMAND% -rem if errorlevel 1 pause -goto :eof - -:console -"%_WRAPPER_EXE%" -c "%WRAPPER_CONF%" -goto :eof - -:start -"%_WRAPPER_EXE%" -t "%WRAPPER_CONF%" -goto :eof - -:stop -"%_WRAPPER_EXE%" -p "%WRAPPER_CONF%" -goto :eof - -:status -"%_WRAPPER_EXE%" -q "%WRAPPER_CONF%" -goto :eof - -:install -"%_WRAPPER_EXE%" -i "%WRAPPER_CONF%" -goto :eof - -:uninstall -"%_WRAPPER_EXE%" -r "%WRAPPER_CONF%" -goto :eof - -:console -"%_WRAPPER_EXE%" -c "%WRAPPER_CONF%" -goto :eof - -:restart -call :stop -call :start -goto :eof - -:exec -%* -goto :eof - -:setJonasRoot -echo JONAS_ROOT must be set. -goto :eof - -:setJonasBase -echo JONAS_BASE must be set. -goto :eof - -:setWrapperHome -echo WRAPPER_HOME must be set. -echo Please check your Tanuki Java Service wrapper installation. -goto :eof diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv deleted file mode 100644 index 57beef2d91..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv +++ /dev/null @@ -1,138 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Check JONAS_ROOT is set. -# ----------------------------------------------------------------------- -if [ ! -d $JONAS_ROOT/repositories ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# ----------------------------------------------------------------------- -# Check JONAS_BASE is set. Set it to JONAS_ROOT if not set. -# ----------------------------------------------------------------------- -if [ -z "$JONAS_BASE" ] -then - JONAS_BASE=$JONAS_ROOT - export JONAS_BASE -fi - -# --------------------------- -# Resolve links -# --------------------------- - -# Do the same stuff than readlink -f but using standard sh commands -# On some Unix systems, readlink -f is not supported -readlink_f() { - # if $1 is a file remove the possible last / - dname=`dirname "$1"` - bname=`basename "$1"` - noslash="$dname"/"$bname" - - linktofile=`read_last_link "$noslash"` # `basename linktofile` is not a link - dna=`dirname "$linktofile"` - # res=the sure path (1 by 1 add no symb link) - res=`basename "$linktofile"` - - while ([ "$dna" != "/" ] && [ "$dna" != "." ]) # Finished if . or / (loop) - do - if [ -L "$dna" ] - then - dna=`read_last_link "$dna"` # last directory is not a link - fi - # basename $dna is not a symbolic link, we can add it to res - res=`basename "$dna"`/"$res" - dna=`dirname "$dna"` - done - if ([ "$dna" = "/" ] && [ "$res" != '/' ]) - then - res=/"$res"; - fi - D=`dirname "$res"` - B=`basename "$res"` - res="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B" - echo $res -} - -# ensure that the basename of result will not be a link -read_last_link() { - res="$1" - while [ -L "$res" ] - do - ls=`ls -ld "$res"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null - then # if absolute link (begin with /) - res="$link" - else # if relative link (not begin with /) - rel=`dirname "$res"` - res="$rel"/"$link" - fi - done - echo $res -} -JONAS_ROOT=`readlink_f $JONAS_ROOT` -JONAS_BASE=`readlink_f $JONAS_BASE` - - -# must be : for Unix, \; for CygWin on NT -SPS=: - -# ----------------------------------------------------------------------- -# JAVA setup -# We try to use first the java JVM in JAVA_HOME and if not found, -# we use the one found in the path. -# ----------------------------------------------------------------------- -if [ -z "$JAVA" ]; then - if [ -z "$JAVA_HOME" ] - then - JAVA=java - JAVAC=javac - else - JAVA=$JAVA_HOME/bin/java - JAVAC=$JAVA_HOME/bin/javac - fi - export JAVA JAVAC -fi - - -# You can specify additional options to give to the Java JVM in the -# JAVA_OPTS environment variable. -export JAVA_OPTS - -# ----------------------------------------------------------------------- -# Take always the JOnAS configuration files in $JONAS_BASE/conf -# So it must be before the $JONAS_CLASSPATH (if carol.properties is redefined elsewhere) -# ----------------------------------------------------------------------- -if [ "$JONAS_CLASSPATH" = "" ]; then - JONAS_CLASSPATH=$JONAS_BASE/conf -else - JONAS_CLASSPATH=$JONAS_BASE/conf$SPS$JONAS_CLASSPATH -fi - -export JONAS_CLASSPATH diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv.bat b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv.bat deleted file mode 100755 index 4f22b8d28c..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/bin/setenv.bat +++ /dev/null @@ -1,51 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): Miroslav Halas -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - - -Rem check JONAS_ROOT and JONAS_BASE -if ["%JONAS_ROOT%"]==[""] goto setroot -if ["%JONAS_BASE%"]==[""] set JONAS_BASE=%JONAS_ROOT% - -Rem ---------- -Rem JAVA setup -Rem ---------- -Rem We try to use first the java JVM in JAVA_HOME and if not found, -Rem we use the one found in the path. -Rem You can specify additional options to give to the Java JVM in the -Rem JAVA_OPTS environment variable. -Rem JAVA_HOME must be set since config_env.bat requires it for tools.jar -set JAVA="%JAVA_HOME%\bin\java.exe" -set JAVAC="%JAVA_HOME%\bin\javac.exe" -Rem For JOnAS configuration files (carol.properties, trace.properties, ...) -Rem must be before the CLASSPATH (if carol.properties is redefined elsewhere) -set JONAS_CLASSPATH=%JONAS_BASE%\conf;%JONAS_CLASSPATH% -goto :EOF - -:setroot -echo JONAS_ROOT must be set. -goto :EOF diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/banner.txt b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/banner.txt deleted file mode 100644 index b43cd9d14a..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/banner.txt +++ /dev/null @@ -1,3 +0,0 @@ - -OW2 JOnAS ${project.version} [ http://jonas.ow2.org / jonas@ow2.org ] - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/classloader-default-filtering.xml b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/classloader-default-filtering.xml deleted file mode 100644 index 2407a5c4cb..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/classloader-default-filtering.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - org.apache.commons.digester.* - org.springframework.* - - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.sh.include b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.sh.include deleted file mode 100644 index 2526da3a4c..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.sh.include +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -#set -xv -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Guillaume Sauthier -# -# --------------------------------------------------------------------------- -# $Id: env.sh.include 11267 2007-08-08 16:51:45Z sauthieg $ -# --------------------------------------------------------------------------- - -# Environment -# -------------------------------- -JONAS_ROOT=@JONAS_ROOT@ -export JONAS_ROOT -SERVER_NAME=jonas -export SERVER_NAME - -# Allow that script to be executed without hard-writing -# the JVM and Ant version to use -VAR_HOME_SET=@VAR_HOME_SET@ - -# Fix the JAVA_HOME value -if [ "$VAR_HOME_SET" = "true" ]; then -#JAVA_HOME=@JAVA_HOME@ -#export JAVA_HOME - echo -n -fi -# Fix the ANT_HOME value -if [ "$VAR_HOME_SET" = "true" ]; then -#ANT_HOME=@ANT_HOME@ -#export ANT_HOME - echo -n -fi - - -# JVM Memory options -# --------------------------------- -# example : 128m -INI_HEAP_SIZE="" -MAX_HEAP_SIZE="" -THREAD_STACK_SIZE="" - -[ "$INI_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xms"$INI_HEAP_SIZE -[ "$MAX_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xmx"$MAX_HEAP_SIZE -[ "$THREAD_STACK_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xss"$THREAD_STACK_SIZE - -# JVM Misc Options -# -------------------------------- -# Uncomment the following line -#JAVA_OPTS=$JAVA_OPTS" -Dyour.property=value" - -export JAVA_OPTS - -# Classpath -# -------------------------------- -if [ "$CLASSPATH" != "" ]; then - S="\033[1;31m" - E="\033[0m" - printf "${S}Warning : CLASSPATH should be empty with JOnAS !$E\n" - printf "Please use ${S}JONAS_BASE/lib/apps$E or ${S}JONAS_BASE/lib/commons$E ...\n" -fi -# You may add jars here, but this is not recommended -CLASSPATH=$CLASSPATH -export CLASSPATH - -# Script Debug -# -------------------------------- -if [ "$ENV_DEBUG" = "yes" ]; then - echo "* -------------------------------------------" - echo "* Returned by $0 :" - echo "* JONAS_ROOT = $JONAS_ROOT" - echo "* SERVER_NAME = $SERVER_NAME" - echo "* JAVA_HOME = $JAVA_HOME" - echo "* ANT_HOME = $ANT_HOME" - echo "* JAVA_OPTS = $JAVA_OPTS" - echo "* CLASSPATH = $CLASSPATH" - echo "* -------------------------------------------" -fi diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.start.sh.include b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.start.sh.include deleted file mode 100644 index 23b384e8a8..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/env.start.sh.include +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -#set -xv -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Guillaume Sauthier -# -# --------------------------------------------------------------------------- -# $Id: env.start.sh.include 11267 2007-08-08 16:51:45Z sauthieg $ -# --------------------------------------------------------------------------- - - -# JVM Memory options -# --------------------------------- -# example : 128m -INI_HEAP_SIZE="256m" -MAX_HEAP_SIZE="256m" -THREAD_STACK_SIZE="" - -[ "$INI_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xms"$INI_HEAP_SIZE -[ "$MAX_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xmx"$MAX_HEAP_SIZE -[ "$THREAD_STACK_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xss"$THREAD_STACK_SIZE - -# JVM Misc Options -# -------------------------------- -JAVA_OPTS=$JAVA_OPTS" -Djava.awt.headless=true" -export JAVA_OPTS - -# Classpath -# -------------------------------- -if [ "$CLASSPATH" != "" ]; then - S="\033[1;31m" - E="\033[0m" - printf "${S}Warning : CLASSPATH should be empty with JOnAS !$E\n" - printf "Please use ${S}JONAS_BASE/lib/apps$E or ${S}JONAS_BASE/lib/commons$E ...\n" -fi -# You may add jars here, but this is not recommended -CLASSPATH=$CLASSPATH -export CLASSPATH - -# Script Debug -# -------------------------------- -if [ "$ENV_DEBUG" = "yes" ]; then - echo "* -------------------------------------------" - echo "* Returned by $0 :" - echo "* JONAS_ROOT =$JONAS_ROOT" - echo "* SERVER_NAME =$SERVER_NAME" - echo "* JAVA_HOME =$JAVA_HOME" - echo "* ANT_HOME =$ANT_HOME" - echo "* JAVA_OPTS =$JAVA_OPTS" - echo "* CLASSPATH =$CLASSPATH" - echo "* -------------------------------------------" -fi diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/initial-repositories.xml b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/initial-repositories.xml deleted file mode 100644 index 0542744f7d..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/initial-repositories.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - maven2 - http://repo1.maven.org/maven2/ - - - maven2 - http://repository.ow2.org/nexus/content/repositories/releases/ - - - maven2 - http://repository.ow2.org/nexus/content/repositories/snapshots/ - - \ No newline at end of file diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/trace.properties b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/trace.properties deleted file mode 100644 index cec081e24e..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/trace.properties +++ /dev/null @@ -1,441 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# 2 handlers have been defined : tty (System.out) and logf (file) -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# A list of predefined loggers is given at the end of the file. -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG | FATAL | INHERIT -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# The switch attribute is used to log either on System.out or System.err -# depending of the level of the log. -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output Switch -handler.tty.pattern %d : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# mesonly : console handler without header -# ----------------------------------------------------------------------- -handler.mesonly.type Console -handler.mesonly.output Switch -handler.mesonly.pattern %m%n - -# ----------------------------------------------------------------------- -# logf : file handler -# ----------------------------------------------------------------------- -handler.logf.type File -handler.logf.output automatic -handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# wsdl : file handler -# ----------------------------------------------------------------------- -handler.wsdl.type File -handler.wsdl.output jonas_wsdls.log -handler.wsdl.pattern %d : %l : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# jmxHandler : jmx handler -# ----------------------------------------------------------------------- -#handler.jmxHandler.type jmx -#handler.jmxHandler.output Switch -#handler.jmxHandler.pattern %d : %l : %h : %O{1}.%M : %m%n - - -# ----------------------------------------------------------------------- -# logf : rolling file handler -# ----------------------------------------------------------------------- -#handler.logf.type RollingFile -#handler.logf.output jonas.log -#handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n -#handler.logf.fileNumber 2 -#handler.logf.maxSize 10000 - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty -logger.root.handler.1 logf -#logger.root.handler.2 jmxHandler - -logger.root.level INFO -logger.org.ow2.level INFO -logger.org.objectweb.level INFO - -#----------------------------------------------------------------------- -# JOnAS logger definitions -#----------------------------------------------------------------------- - -logger.org.ow2.jonas.admin.level INHERIT - -logger.org.ow2.jonas.bootstrap.level INHERIT - -logger.org.ow2.jonas.client.level INHERIT - -logger.org.ow2.jonas.cluster.daemon.level INHERIT - -logger.org.ow2.jonas.cmd.level INHERIT - -logger.org.ow2.jonas.cmi.level INHERIT - -logger.org.ow2.jonas.ha.level INHERIT - -logger.org.ow2.jonas.db.level INHERIT - -logger.org.ow2.jonas.dbm.level INHERIT -logger.org.ow2.jonas.dbm.con.level INHERIT -logger.org.ow2.jonas.dbm.ps.level INHERIT -logger.org.ow2.jonas.dbm.xa.level INHERIT - -logger.org.ow2.jonas.deployment.level INHERIT -logger.org.ow2.jonas.deployablemonitor.level INHERIT -logger.org.ow2.jonas.deployment.client.level INHERIT -logger.org.ow2.jonas.deployment.domain.level INHERIT -logger.org.ow2.jonas.deployment.ejb.level INHERIT -logger.org.ow2.jonas.deployment.ejb.digester.level FATAL - - - -logger.org.ow2.jonas.domain.management.level INHERIT - -# EJB 3 container -logger.org.ow2.easybeans.level INHERIT - -logger.org.ow2.jonas.ear.level INHERIT - -logger.org.ow2.jonas.ee.level INHERIT -logger.org.ow2.jonas.ee.jdbc.level INHERIT -logger.org.ow2.jonas.ee.jdbc.RA.level INHERIT -logger.org.ow2.jonas.ee.jdbc.sql.level INHERIT -logger.org.ow2.jonas.ee.jdbc.xa.level INHERIT - -logger.org.ow2.jonas.ejb.level INHERIT - -#logger.org.ow2.jonas.generators.handler.0 mesonly -#logger.org.ow2.jonas.generators.additivity false - -logger.org.ow2.jonas.generators.genbase.level INHERIT -logger.org.ow2.jonas.generators.genclientstub.level INHERIT -logger.org.ow2.jonas.generators.genic.level INHERIT -logger.org.ow2.jonas.generators.genic.velocity.level ERROR -logger.org.ow2.jonas.generators.wsgen.level INHERIT -logger.org.ow2.jonas.generators.wsgen.ews.level INHERIT - -logger.org.ow2.jonas.jca.level INHERIT -logger.org.ow2.jonas.jca.connection.level INHERIT -logger.org.ow2.jonas.jca.management.level INHERIT -logger.org.ow2.jonas.jca.pool.level INHERIT -logger.org.ow2.jonas.jca.process.level INHERIT -logger.org.ow2.jonas.jca.setters.level INHERIT - -logger.org.ow2.jonas.jmx.level INHERIT - -logger.org.ow2.jonas.jtm.level ERROR - -logger.org.ow2.jonas.lib.ejb21.level INHERIT -logger.org.ow2.jonas.lib.ejb21.coherence.level INHERIT -logger.org.ow2.jonas.lib.ejb21.context.level INHERIT -logger.org.ow2.jonas.lib.ejb21.dd.level INHERIT -logger.org.ow2.jonas.lib.ejb21.endpoint.level INHERIT -logger.org.ow2.jonas.lib.ejb21.factory.level INHERIT -logger.org.ow2.jonas.lib.ejb21.genclass.level INHERIT -logger.org.ow2.jonas.lib.ejb21.interp.level INHERIT -logger.org.ow2.jonas.lib.ejb21.mdb.level INHERIT -logger.org.ow2.jonas.lib.ejb21.mijorm.level INHERIT -logger.org.ow2.jonas.lib.ejb21.query.level INHERIT -logger.org.ow2.jonas.lib.ejb21.security.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ssfpool.level INHERIT -logger.org.ow2.jonas.lib.ejb21.swapper.level INHERIT -logger.org.ow2.jonas.lib.ejb21.synchro.level INHERIT -logger.org.ow2.jonas.lib.ejb21.thread.level INHERIT -logger.org.ow2.jonas.lib.ejb21.tx.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.interceptors.iiop.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.interceptors.jrmp.level INHERIT - - -logger.org.ow2.jonas.lib.jms.level INHERIT - -logger.org.ow2.jonas.lib.naming.java.level INHERIT - -logger.org.ow2.jonas.lib.svc.level INHERIT - -logger.org.ow2.jonas.lib.timer.level INHERIT - -logger.org.ow2.jonas.lib.util.level INHERIT - -logger.org.ow2.jonas.lib.windows.level INHERIT - -logger.org.ow2.jonas.lib.work.level INHERIT - -logger.org.ow2.jonas.loader.level INHERIT - -logger.org.ow2.jonas.mail.level INHERIT - -logger.org.ow2.jonas.management.level INHERIT -logger.org.ow2.jonas.management.cluster.level INHERIT -logger.org.ow2.jonas.management.domain.level INHERIT -logger.org.ow2.jonas.management.event.level INHERIT -logger.org.ow2.jonas.management.j2eemanagement.level INHERIT -logger.org.ow2.jonas.management.j2eemanagement.event.level INHERIT - -logger.org.ow2.jonas.naming.level INHERIT - -logger.org.ow2.jonas.propagation.level INHERIT - -logger.org.ow2.jonas.publication.handler.0 wsdl -logger.org.ow2.jonas.publication.additivity false - -logger.org.ow2.jonas.registry.level INHERIT - -logger.org.ow2.jonas.security.level INHERIT -logger.org.ow2.jonas.security.csiv2.level INHERIT -logger.org.ow2.jonas.security.csiv2_details.level INHERIT -logger.org.ow2.jonas.security.jacc.level INHERIT -logger.org.ow2.jonas.security.ws.level INHERIT - -logger.org.ow2.jonas.server.level INHERIT - -logger.org.ow2.jonas.web.level INHERIT - -logger.org.ow2.jonas.webapp.jadmin.servlet.level INHERIT - -logger.org.ow2.jonas.work.level INHERIT - -logger.org.ow2.jonas.workcleaner.level INHERIT - -logger.org.ow2.jonas.ws.level INHERIT -logger.org.ow2.jonas.ws.wsdl.level INHERIT - -#----------- -# Hibernate -#----------- -logger.org.hibernate.cache.level ERROR -logger.org.hibernate.cfg.level ERROR -logger.org.hibernate.connection.level ERROR -logger.org.hibernate.dialect.level ERROR -logger.org.hibernate.ejb.level ERROR -logger.org.hibernate.impl.level ERROR -logger.org.hibernate.hql.ast.level ERROR -logger.org.hibernate.search.level ERROR -logger.org.hibernate.tool.hbm2ddl.level ERROR -logger.org.hibernate.transaction.level ERROR -logger.org.hibernate.validator.level ERROR - -#------- -# JOTM -#------- -logger.org.objectweb.jotm.level INFO -logger.org.objectweb.jotm.jta.level INHERIT -logger.org.objectweb.jotm.tm.level INHERIT -logger.org.objectweb.jotm.recovery.level INHERIT - -#------- -# MEJB -#------- -logger.org.ow2.jonas.ee.mejb.level INFO - -#------- -# CAROL -#------- -logger.org.ow2.carol.level INFO -logger.org.ow2.carol.rmi.level INHERIT -logger.org.ow2.carol.jndi.level INHERIT - -#------- -# JORM -#------- -logger.org.objectweb.jorm.level WARN -logger.org.objectweb.jorm.compiler.level INHERIT -logger.org.objectweb.jorm.xml2mi.level INHERIT -logger.org.objectweb.jorm.mi2xml.level INHERIT -logger.org.objectweb.jorm.metainfo.level INHERIT -logger.org.objectweb.jorm.generator.level INHERIT -logger.org.objectweb.jorm.generator.velocity.level ERROR -logger.org.objectweb.jorm.mapper.rdb.generator.level INHERIT - -#------- -# MEDOR -#------- -logger.org.objectweb.medor.level INHERIT -logger.org.objectweb.medor.optim.rule.level INHERIT -logger.org.objectweb.medor.optim.rewriter.level INHERIT -logger.org.objectweb.medor.eval.rdb.level INHERIT - -#------- -# JORAM -#------- -logger.fr.dyade.aaa.level ERROR -logger.fr.dyade.aaa.agent.level ERROR -logger.fr.dyade.aaa.agent.Agent.level INHERIT -logger.fr.dyade.aaa.agent.Engine.level INHERIT -logger.fr.dyade.aaa.agent.Service.level INHERIT -logger.org.objectweb.joram.level ERROR -logger.org.objectweb.joram.mom.level INHERIT -logger.org.objectweb.joram.mom.Destination.level INHERIT -logger.org.objectweb.joram.mom.Proxy.level INHERIT -logger.org.objectweb.joram.client.level INHERIT -logger.org.objectweb.joram.client.jms.Client.level ERROR -logger.org.objectweb.joram.client.connector.Adapter.level ERROR - -#------- -# SPEEDO -#------- -logger.org.objectweb.speedo.level WARN -## GENERATION -logger.org.objectweb.speedo.generation.SpeedoCompiler.level INFO -## RUN TIME -logger.org.objectweb.speedo.init.level INHERIT -logger.org.objectweb.speedo.po-manager-factory.level INHERIT -logger.org.objectweb.speedo.po-manager-switch.level INHERIT -logger.org.objectweb.speedo.po-manager-pool.level INHERIT -logger.org.objectweb.speedo.po-manager-instanciator.level INHERIT -logger.org.objectweb.speedo.po-manager.level INHERIT -logger.org.objectweb.speedo.po-manager.query.level INHERIT -logger.org.objectweb.speedo.mapper.level INHERIT -logger.org.objectweb.speedo.mapper.mapper.level INHERIT -logger.org.objectweb.speedo.mapper.mapper.sql.level INHERIT -logger.org.objectweb.speedo.mapper.jorm-factory.level INHERIT -logger.org.objectweb.speedo.mapper.jorm-factory.class-properties.level INHERIT -logger.org.objectweb.speedo.mapper.pool.level INHERIT -logger.org.objectweb.speedo.mapper.storage-manager.level INHERIT -logger.org.objectweb.speedo.memory-instance-manager.level INHERIT -logger.org.objectweb.speedo.workingset-manager.level INHERIT -logger.org.objectweb.speedo.naming-manager-factory.level INHERIT -logger.org.objectweb.speedo.transaction.level INHERIT -logger.org.objectweb.speedo.tpm.level INHERIT -logger.org.objectweb.speedo.tpm.transactional-persistence-manager.level INHERIT -logger.org.objectweb.speedo.tpm.cache-manager.level INHERIT -logger.org.objectweb.speedo.tpm.cache-manager.bgcleaner.level INHERIT -logger.org.objectweb.speedo.tpm.concurrency-manager.level INHERIT -logger.org.objectweb.speedo.query-manager.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.allocator.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.variable.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.filter.level INHERIT -logger.org.objectweb.speedo.compiled-query-cache.level INHERIT -logger.org.objectweb.speedo.jca.level INHERIT -logger.org.objectweb.speedo.txStatistic.level INHERIT -logger.org.objectweb.speedo.jmx.level INHERIT - -# Struts -logger.org.apache.struts.util.level WARN - -#------------------------------ -# Tomcat 6 - Catalina logging -#------------------------------ -logger.org.apache.catalina.core.ContainerBase.[jonas].level INFO -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].level INFO -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].[path].level INFO -### example for jonasAdmin ### -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].[jonasAdmin].level INFO - -#----------------------------- -# Jetty 6 (Avoid log of MBean registration (info level) -#----------------------------- -logger.org.mortbay.util.jmx.ModelMBeanImpl.level ERROR - -#----------------------------- -# Apache CXF -#----------------------------- -logger.org.apache.cxf.level INHERIT -# Avoid a log diplaying erroneous informations (INFO level) -# TODO remove theses lines when a proper startup message policy will be decided -logger.org.apache.cxf.endpoint.ServerImpl.level ERROR - -#----------------------------- -# Open Symphony Quartz -#----------------------------- -logger.org.quartz.level INHERIT -# Avoid logs of unwanted informations (INFO level) -# TODO remove theses lines when a proper startup message policy will be decided -logger.org.quartz.core.QuartzScheduler.level ERROR -logger.org.quartz.simpl.RAMJobStore.level ERROR -logger.org.quartz.impl.StdSchedulerFactory.level ERROR - -# ----------------------------------------------------------------------- -# MX4J - also need to set system proprty mx4j.log.priority to the corresponding level -# (fatal, error, warn, info, debug, trace) -# ----------------------------------------------------------------------- -logger.mx4j.level ERROR - -#----------------------------- -# OSGi logging -#----------------------------- -logger.org.ow2.util.log.impl.osgi.level ERROR - -#----------------------------- -# Deployment plan logging -#----------------------------- -logger.org.ow2.util.plan.deployer.impl.level ERROR - -#--------- -# File logger for JGroups -# JGroups -#--------- -handler.all_jgroups.type File -handler.all_jgroups.output all_jgroups.log -handler.all_jgroups.pattern %d : %l : %h : %O{1}.%M : %m%n -logger.org.jgroups.level FATAL -logger.org.jgroups.handler.0 all_jgroups -logger.org.jgroups.additivity false - -# ----------------------------------------------------------------------- -# For Log file (tests) -# ----------------------------------------------------------------------- -handler.logtest.type File -handler.logtest.output jonas_tests.log -handler.logtest.pattern %d : %l : %h : %O{1}.%M : %m%n -logger.org.ow2.jonas_tests.history.level INFO -logger.org.ow2.jonas_tests.history.handler.0 logtest -logger.org.ow2.jonas_tests.history.additivity false - - -#--- -# Discovery Logger configuration -#uncomment these lines to configure a file logger for jonas discovery -#handler.jonas-discovery.type File -#handler.jonas-discovery.output jonas_discovery.log -#handler.jonas-discovery.pattern %d : %l : %h : %O{1}.%M : %m%n -# Don't forget to set logs level. -logger.org.ow2.jonas.discovery.level INFO -#logger.org.ow2.jonas.discovery.handler.0 jonas-discovery -#logger.org.ow2.jonas.discovery.additivity false - -#--- -#Granite Logger configuration -handler.granite-ds.type File -handler.granite-ds.output granite-ds.log -handler.granite-ds.pattern %d : %l : %h : %O{1}.%M : %m%n -# Don't forget to set logs level. -logger.org.granite.config.level INFO -logger.org.granite.config.handler.0 granite-ds -logger.org.granite.config.additivity false - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/traceclient.properties b/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/traceclient.properties deleted file mode 100644 index 5190f18bcc..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/jonas-resources/conf/traceclient.properties +++ /dev/null @@ -1,45 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %d : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -logger.org.ow2.jonas.client.level WARN - -# Set INFO to see test names. -logger.org.objectweb.jonas_tests.level WARN \ No newline at end of file diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/META-INF/bootstrap-core-for-addons.bnd b/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/META-INF/bootstrap-core-for-addons.bnd deleted file mode 100644 index 93dd277279..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/META-INF/bootstrap-core-for-addons.bnd +++ /dev/null @@ -1,35 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.services.bootstrap.mbeanbuilder - -Private-Package org.ow2.jonas.services.bootstrap.* - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - org.ow2.jonas.jmx.internal.interceptor, \ - * - -# FIXME: Required by Java-RTS-2.2 -DynamicImport-Package: org.ow2.util.plan.reader,javax.xml.bind - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/metadata.xml b/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/metadata.xml deleted file mode 100644 index 8f1324b7ec..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/resources/metadata.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-admin.properties.template b/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-admin.properties.template deleted file mode 100644 index 29f6daead1..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-admin.properties.template +++ /dev/null @@ -1,8 +0,0 @@ -# -###################### JOnAS Admin Client configuration -# -# If JMX security is enabled, the JOnAS Admin Client requires its parameters -# To be passed using -username and -password arguments. These two parameters -# pass these arguments to the JOnAS Admin Client internally. -jonas.adminClient.username jonas -jonas.adminClient.password jonas diff --git a/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-base.properties.template b/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-base.properties.template deleted file mode 100644 index 7a32d8163f..0000000000 --- a/jonas/modules/services/bootstrap/core-for-addons/src/main/templates/jonas-base.properties.template +++ /dev/null @@ -1,83 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - - -###################### JOnAS Server configuration -# The current file is in the /conf directory. It can be copied and -# customized in JONAS_BASE/conf directory -###################### - -# Name of the JOnAS server -# default value is "jonas" -jonas.name jonas - -# Name of the JOnAS domain -# default value is "jonas" -domain.name jonas - -# Enable the Security context propagation (for jrmp) -jonas.security.propagation true - -# Enable the Security manager -# default value is true (if not set) -# Setting this to false implies a collocated registry and setting in carol.properties: -# carol.jvm.rmi.local.registry=true -jonas.security.manager false - -# Enable csiv2 -jonas.csiv2.propagation true - -# Enable the Transaction context propagation -jonas.transaction.propagation true - -# Set the name of log configuration file -jonas.log.configfile trace - -# Set the work directory used by JOnAS (relative or absolute) -# A relative directory name will be prefixed by JONAS_BASE/ -# An absolute path will be used directly -jonas.workdirectory work - -# Set to true if the server is a master -jonas.master false - -# Set to true in order to execute the JOnAS Server in development mode. -# -# WAR archive deployment case in development mode (for single or EAR packaged WARs): -# Each modified WAR archive will be unpacked in the working directory of the JOnAS Server -# in a different folder to avoid file locks. This is especially useful in a Windows environment. -jonas.development true - -# Set the list of the services launched in the JOnAS Server. -# Possible services are: jtm,db,dbm,validation,resource,mail,cmi,ha,versioning,ejb2,ejb3, -# jaxrpc,jaxws,web,ear,depmonitor,discovery,resourcemonitor,smartclient,audit,cdi,jaxrs,jndi -# -# Notes: -# - registry, security and jmx services are always started -# - some services may start automatically if required (depending on the server configuration and deployed applications) -# See 'Configuring JOnAS services' in JOnAS documentation for more information -# -%jonas.services% - diff --git a/jonas/modules/services/bootstrap/core/pom.xml b/jonas/modules/services/bootstrap/core/pom.xml deleted file mode 100644 index 5718403ad4..0000000000 --- a/jonas/modules/services/bootstrap/core/pom.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - bootstrap - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - org.ow2.jonas - bootstrap-core - JOnAS :: Services :: Bootstrap :: Core - bundle - - - - org.osgi - org.osgi.compendium - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - org.ow2.bundles - util-plan-repository-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-reader - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deployer - ${ow2-bundles.version} - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - - src/main/jonas-resources/conf - true - - banner.txt - - - - - src/main/jonas-resources/conf - false - - banner.txt - - - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - ${project.build.directory}/extra-resources - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java deleted file mode 100644 index 7e72af51da..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASConfiguration.java +++ /dev/null @@ -1,430 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.List; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.osgi.service.cm.ConfigurationPlugin; -import org.ow2.jonas.configuration.ConfigurationManager; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * JOnAS Configuration component. - * @author Francois Fornaciari Contributor(s): Jeremy Cazaux (updateServerProperties) - */ -public class JOnASConfiguration implements ConfigurationManager, ConfigurationPlugin { - - /** - * Reference to the {@link ConfigurationAdmin} service. - */ - private ConfigurationAdmin configurationAdmin = null; - - /** - * Property name for the service name. - */ - private static final String JONAS_SERVICE = "jonas.service"; - - /** - * OSGi {@link BundleContext}. - */ - private BundleContext bc = null; - - /** - * Mandatory JOnAS services. - */ - private List mandatoryServices = null; - - /** - * Management loggers. - */ - private Log logger = LogFactory.getLog(JOnASConfiguration.class); - - /** - * JOnAS Server properties. - */ - private JProp serverProperties = null; - - /** - * Last modification date of the jonas.properties file. - */ - private long lastModified; - - /** - * Constructor used to retrieve the OSGi BundleContext. - * @param bc OSGi BundleContext - */ - public JOnASConfiguration(final BundleContext bc) { - this.bc = bc; - - // Initialize mandatory services list - mandatoryServices = new ArrayList(); - - // Registry is always mandatory and part of the autodeploy bundles - mandatoryServices.add("registry"); - - // Security is always mandatory and part of the autodeploy bundles - // See JIRA issues JONAS-224 and JONAS-280 - mandatoryServices.add("security"); - - // JMX is always mandatory and part of the autodeploy bundles - mandatoryServices.add("jmx"); - - // The discovery service must be added to mandatory services - if (getDeclaredServices().contains("discovery")) { - mandatoryServices.add("discovery"); - } - } - - /** - * Method called when the Configuration Admin Service is bound to the component.
    - * This method creates service configurations for mandatory JOnAS services (regitry and jmx) - * @throws Exception Thrown if the configuration failed. - */ - public void configure() throws Exception { - // Delete all service configurations - deleteServiceConfigurations(); - - // Create service configurations for mandatory services only - manageServiceConfigurations(mandatoryServices, false); - - // The ServerProperties service must be registered after the configuration updates - // to avoid that services are started before they are configured - ServiceReference sr = bc.getServiceReference(ServerProperties.class.getName()); - if (sr == null) { - bc.registerService(ServerProperties.class.getName(), getServerProperties(), null); - } - } - - /** - * {@inheritDoc} - */ - public void haltServer() throws Exception { - // Stop the system bundle - bc.getBundle(0).stop(); - } - - /** - * {@inheritDoc} - */ - public synchronized void updateServiceConfiguration(final String service) throws Exception { - List services = new ArrayList(); - services.add(service); - manageServiceConfigurations(services, false); - } - - /** - * {@inheritDoc} - */ - public synchronized void deleteServiceConfiguration(final String service) throws Exception { - List services = new ArrayList(); - services.add(service); - manageServiceConfigurations(services, true); - } - - /** - * {@inheritDoc} - */ - public boolean matchService(final String service) { - String serviceClass = JONAS_SERVICE + "." + service + ".class"; - String factoryPID = getServerProperties().getValue(serviceClass); - return (factoryPID != null); - } - - /** - * Create, update or delete service configurations for the given services. - * @param services List of services to configure - * @param delete 'true' when configurations have to be delete - * @throws Exception If an exception occurs during configuration updates or deletions - */ - @SuppressWarnings("unchecked") - private void manageServiceConfigurations(final List services, final boolean delete) throws Exception { - for (String service : removeDuplicateServices(services)) { - // Get the service properties - Dictionary newProperties = null; - - if (!delete) { - newProperties = getServiceProperties(service); - } - - // Get the configuration if exist - Configuration configuration = getConfiguration(service); - - // There is no stored configuration for this factory - if (!delete && configuration == null) { - // Create a configuration for this factory PID - configuration = configurationAdmin.createFactoryConfiguration(getFactoryPID(service), null); - - // Update the configuration - configuration.update(newProperties); - } else if (configuration != null) { - // A configuration already exists - configuration = configurationAdmin.getConfiguration(configuration.getPid(), null); - - if (delete) { - configuration.delete(); - } else { - // Look if service properties have been changed - Dictionary storedProperties = configuration.getProperties(); - if (isConfigurationModified(storedProperties, newProperties)) { - // Update the configuration - configuration.update(newProperties); - } - } - } - } - } - - /** - * Get mandatory services. - * @return Mandatory services - */ - public List getMandatoryServices() { - return mandatoryServices; - } - - /** - * Get all services. - * @return All services - */ - public List getAllServices() { - List allServices = getOptionalServices(); - - // Add mandatory services - for (int i = 0; i < mandatoryServices.size(); i++) { - allServices.add(i, mandatoryServices.get(i)); - } - - return allServices; - } - - /** - * Get optional services. - * @return Optional services - */ - public List getOptionalServices() { - List optionalServices = new ArrayList(); - - // Add optional services ignoring mandatory services - for (String declaredService : getDeclaredServices()) { - if (!mandatoryServices.contains(declaredService)) { - optionalServices.add(declaredService); - } - } - - return optionalServices; - } - - /** - * Get list of all declared services. - * @return Declared services - */ - private List getDeclaredServices() { - String[] declaredServices = getServerProperties().getValueAsArray("jonas.services"); - return Arrays.asList(declaredServices); - } - - /** - * Get all properties for a given JOnAS service name. - * @param service The given service name - * @return A Dictionary value representing all properties for a JOnAS service name - */ - public Dictionary getServiceProperties(final String service) { - JProp serverProperties = getServerProperties(); - - Dictionary props = new Hashtable(); - // Add static properties - props.put(JONAS_SERVICE, service); - for (Object key : serverProperties.getConfigFileEnv().keySet()) { - String name = (String) key; - String servicePrefix = JONAS_SERVICE + "." + service + "."; - if (name.startsWith(servicePrefix)) { - String value = serverProperties.getValue(name); - name = name.substring(servicePrefix.length()); - props.put(name, value); - } - } - return props; - } - - /** - * Return a JOnAS service configuration or null if the configuration doesn't exist. - * @param service The given service name - * @return The JOnAS service configuration - * @throws Exception If the service configuration cannot be retrieved - */ - private Configuration getConfiguration(final String service) throws Exception { - // Get the list of configurations for a factory - Configuration[] storedConfigurations = configurationAdmin.listConfigurations("(" - + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + getFactoryPID(service) + ")"); - - if (storedConfigurations != null && storedConfigurations.length == 1) { - return storedConfigurations[0]; - } - - return null; - } - - /** - * Return the JOnAS service configuration factory PID. - * @param service The given service name - * @return The JOnAS service configuration factory PID - */ - private String getFactoryPID(final String service) { - String serviceClass = JONAS_SERVICE + "." + service + ".class"; - return getServerProperties().getValue(serviceClass); - } - - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - public void modifyConfiguration(final ServiceReference serviceReference, final Dictionary storedProperties) { - try { - String serviceName = (String) storedProperties.get(JONAS_SERVICE); - if (serviceName != null) { - // Get the last service properties - Dictionary newProperties = getServiceProperties(serviceName); - - // If the configuration for the service has changed - if (isConfigurationModified(storedProperties, newProperties)) { - // Set new properties - for (Enumeration enProps = newProperties.keys(); enProps.hasMoreElements();) { - String key = (String) enProps.nextElement(); - storedProperties.put(key, newProperties.get(key)); - } - } - } - } catch (Exception e) { - logger.error(e); - } - } - - /** - * @param configurationAdmin the configurationAdmin to set - */ - public void setConfigurationAdmin(final ConfigurationAdmin configurationAdmin) { - this.configurationAdmin = configurationAdmin; - } - - /** - * Get 'true' if the two dictionaries don't contain the same properties. - * @param storedProperties Stored properties - * @param newProperties New properties for JOnAS properties - * @return A boolean value representing the fact that the two dictionaries contain or not the same properties - */ - private boolean isConfigurationModified(final Dictionary storedProperties, - final Dictionary newProperties) { - // Remove automatic properties added by the Configuration Admin service - storedProperties.remove(Constants.SERVICE_PID); - storedProperties.remove(ConfigurationAdmin.SERVICE_FACTORYPID); - storedProperties.remove(ConfigurationAdmin.SERVICE_BUNDLELOCATION); - - if (storedProperties.size() != newProperties.size()) { - return true; - } else { - for (Enumeration enProps = storedProperties.keys(); enProps.hasMoreElements();) { - String key = enProps.nextElement(); - - if (newProperties.get(key) == null) { - return true; - } else if (!storedProperties.get(key).equals(newProperties.get(key))) { - return true; - } - } - } - return false; - } - - /** - * Delete service configurations. - * @throws Exception If an exception occurs during configuration deletions - */ - private void deleteServiceConfigurations() throws Exception { - // Get all configurations - Configuration[] storedConfigurations = configurationAdmin.listConfigurations(null); - - if (storedConfigurations != null) { - // Delete configurations - for (Configuration configuration : storedConfigurations) { - String serviceName = (String) configuration.getProperties().get(JONAS_SERVICE); - if (serviceName != null) { - configuration.delete(); - } - } - } - } - - /** - * Returns JOnAS Server properties. Read jonas.properties file only if modified. - * @return Returns JOnAS Server properties. - */ - private JProp getServerProperties() { - File conf = new File(JProp.getJonasBase(), ConfigurationConstants.DEFAULT_CONFIG_DIR); - File jonasPropertyFile = new File(conf, ConfigurationConstants.JONAS_PROPERTIES_PROP); - long currentLastModified = jonasPropertyFile.lastModified(); - - if (currentLastModified != this.lastModified) { - this.serverProperties = new JProp(); - this.lastModified = currentLastModified; - } - - return this.serverProperties; - } - - /** - * Remove duplicate service names. - * @param services list of services to analyze - * @return A list of distinct service names - */ - private List removeDuplicateServices(final List services) { - List result = new LinkedList(); - for (String service : services) { - if (!result.contains(service)) { - result.add(service); - } else { - logger.warn("Service ''{0}'' declared many times in jonas.properties", service); - } - } - return result; - } -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java deleted file mode 100644 index 5c5707255e..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/JOnASDeploymentPlanDeployer.java +++ /dev/null @@ -1,210 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.File; -import java.io.FilenameFilter; - -import org.ow2.jonas.configuration.ConfigurationManager; -import org.ow2.jonas.configuration.DeploymentPlanDeployer; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Allows to deploy or undeploy all bundles for a particular deployment plan. At the - * server initialization, deploy all JOnAS services defined in the configuration. - * @author Francois Fornaciari - */ -public class JOnASDeploymentPlanDeployer implements DeploymentPlanDeployer { - - /** - * Deployer Manager service reference - */ - private IDeployerManager deployerManager = null; - - /** - * ConfigurationManager service reference. - */ - private ConfigurationManager configurationManager = null; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JOnASDeploymentPlanDeployer.class); - - /** - * URL internal repository location. - */ - private static final String URL_INTERNAL_REPOSITORY = JProp.getRepositoriesRootDir() + File.separator + "url-internal"; - - /** - * {@inheritDoc} - */ - public void deploy(final String name) throws DeployerException { - String service = name; - String baseName = getBaseName(service); - if (baseName != null) { - deploy(baseName); - service = getImplementationName(service); - } - - File file = new File(URL_INTERNAL_REPOSITORY, service + ".xml"); - if (file.exists()) { - deployDeploymentPlan(file); - } else { - throw new DeployerException("Cannot deploy the deployment plan '" + name + "', file '" + file + "' not found"); - } - } - - /** - * {@inheritDoc} - */ - public void undeploy(final String name) throws DeployerException { - String service = name; - String baseName = getBaseName(service); - if (baseName != null) { - undeploy(baseName); - service = getImplementationName(service); - } - - File file = new File(URL_INTERNAL_REPOSITORY, service + ".xml"); - if (file.exists()) { - undeployDeploymentPlan(file); - } else { - throw new DeployerException("Cannot undeploy the deployment plan '" + name + "', file '" + file + "' not found"); - } - } - - /** - * Deploy a deployment plan using its associated deployment plan file. - * @param file File corresponding to the plan to deploy - * @throws Exception If the deployment of the deployment plan fails - */ - private void deployDeploymentPlan(final File file) throws DeployerException { - logger.debug("Deploying the deployment plan for ''{0}''", file); - - // Get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - throw new DeployerException("Ignoring invalid file '" + file + "'"); - } - - IDeployable deployable = null; - try { - deployable = DeployableHelper.getDeployable(archive); - if (!this.deployerManager.isDeployed(deployable)) { - this.deployerManager.deploy(deployable); - } - } catch (Exception e) { - throw new DeployerException("Cannot deploy the deployment plan for '" + file + "'", e); - } - } - - /** - * Undeploy a deployment plan using its associated deployment plan file. - * @param file File corresponding to the plan to undeploy - * @throws DeployerException If the undeployment of the deployment plan fails - */ - private void undeployDeploymentPlan(final File file) throws DeployerException { - logger.debug("Undeploying the deployment plan for ''{0}''", file); - - // Get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - throw new DeployerException("Ignoring invalid file '" + file + "'"); - } - - IDeployable deployable = null; - try { - deployable = DeployableHelper.getDeployable(archive); - if (this.deployerManager.isDeployed(deployable)) { - this.deployerManager.undeploy(deployable); - } - } catch (Exception e) { - throw new DeployerException("Cannot undeploy the deployment plan for '" + file + "'", e); - } - } - - /** - * Set the ConfigurationManager service. - * @param configurationManager the configurationManager to set - */ - public void setConfigurationManager(final ConfigurationManager configurationManager) { - this.configurationManager = configurationManager; - } - - /** - * @param deployerManager the {@link org.ow2.util.ee.deploy.api.deployer.IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Returns the name of the user-defined implementation service. - * @param service The given service name - * @return The name of the user-defined implementation service - */ - private String getImplementationName (final String service) { - String serviceClass = configurationManager.getServiceProperties(service).get("class"); - // The value follows this construction: - // org.ow2.jonas...<...> - // The implementation name is the 5th element. - // TODO: method not easily extensible if the package name doesn't - // start with org.ow2.jonas - String implementationName = serviceClass.split("\\.")[4]; - - // Return the -.xml file name - return service + "-" + implementationName; - } - - /** - * Returns the base deployment plan for a given service or null if it doesn't exist. - * @param service The service name - * @return The base deployment plan for a given service - */ - private String getBaseName (final String service) { - File configDir = new File(URL_INTERNAL_REPOSITORY); - final String baseName = service + "-base"; - File[] base = configDir.listFiles(new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return (name.equalsIgnoreCase(baseName.concat(".xml"))); - } - }); - if (base != null && base.length == 1) { - return baseName; - } else { - return null; - } - } -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java deleted file mode 100644 index 159a0f7d68..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/PlatformMBeanServerDelegate.java +++ /dev/null @@ -1,282 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap; - -import java.io.ObjectInputStream; -import java.lang.management.ManagementFactory; -import java.util.Set; - -import javax.management.Attribute; -import javax.management.AttributeList; -import javax.management.AttributeNotFoundException; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.IntrospectionException; -import javax.management.InvalidAttributeValueException; -import javax.management.ListenerNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanInfo; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.NotCompliantMBeanException; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.ObjectInstance; -import javax.management.ObjectName; -import javax.management.OperationsException; -import javax.management.QueryExp; -import javax.management.ReflectionException; -import javax.management.loading.ClassLoaderRepository; - -/** - * This component register a MBeanServer service that delegates all the call to the platform MBeanServer. - * @author Francois Fornaciari - * @author Mohammed Boukada (Proxy MBeanServer) - */ -public class PlatformMBeanServerDelegate implements MBeanServer { - - /** - * The real MBeanServer - */ - private MBeanServer delegate; - - /** - * Start the component (aka retrieve the platform MBeanServer) - */ - public void start() throws Exception { - // Check whether javax.management.builder.initial property was set - if (System.getProperty("javax.management.builder.initial") == null) { - throw new Exception("The system property 'javax.management.builder.initial' was not set."); - } - - // Change classloader to load customized MBeanServerBuilder class - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(PlatformMBeanServerDelegate.class.getClassLoader()); - this.delegate = ManagementFactory.getPlatformMBeanServer(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - } - - // All the delegating methods... - // -------------------------------------------------------------- - - public ObjectInstance createMBean(final String className, - final ObjectName name) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException { - return delegate.createMBean(className, name); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final ObjectName loaderName) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException { - return delegate.createMBean(className, name, loaderName); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final Object[] params, - final String[] signature) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException { - return delegate.createMBean(className, name, params, signature); - } - - public ObjectInstance createMBean(final String className, - final ObjectName name, - final ObjectName loaderName, - final Object[] params, - final String[] signature) - throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, MBeanException, NotCompliantMBeanException, InstanceNotFoundException { - return delegate.createMBean(className, name, loaderName, params, signature); - } - - public ObjectInstance registerMBean(final Object object, final ObjectName name) - throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException { - return delegate.registerMBean(object, name); - } - - public void unregisterMBean(final ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException { - delegate.unregisterMBean(name); - } - - public ObjectInstance getObjectInstance(final ObjectName name) throws InstanceNotFoundException { - return delegate.getObjectInstance(name); - } - - public Set queryMBeans(final ObjectName name, final QueryExp query) { - return delegate.queryMBeans(name, query); - } - - public Set queryNames(final ObjectName name, final QueryExp query) { - return delegate.queryNames(name, query); - } - - public boolean isRegistered(final ObjectName name) { - return delegate.isRegistered(name); - } - - public Integer getMBeanCount() { - return delegate.getMBeanCount(); - } - - public Object getAttribute(final ObjectName name, final String attribute) - throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException { - return delegate.getAttribute(name, attribute); - } - - public AttributeList getAttributes(final ObjectName name, final String[] attributes) - throws InstanceNotFoundException, ReflectionException { - return delegate.getAttributes(name, attributes); - } - - public void setAttribute(final ObjectName name, final Attribute attribute) - throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { - delegate.setAttribute(name, attribute); - } - - public AttributeList setAttributes(final ObjectName name, final AttributeList attributes) - throws InstanceNotFoundException, ReflectionException { - return delegate.setAttributes(name, attributes); - } - - public Object invoke(final ObjectName name, - final String operationName, - final Object[] params, - final String[] signature) - throws InstanceNotFoundException, MBeanException, ReflectionException { - return delegate.invoke(name, operationName, params, signature); - } - - public String getDefaultDomain() { - return delegate.getDefaultDomain(); - } - - public String[] getDomains() { - return delegate.getDomains(); - } - - public void addNotificationListener(final ObjectName name, - final NotificationListener listener, - final NotificationFilter filter, - final Object handback) throws InstanceNotFoundException { - delegate.addNotificationListener(name, listener, filter, handback); - } - - public void addNotificationListener(final ObjectName name, - final ObjectName listener, - final NotificationFilter filter, - final Object handback) throws InstanceNotFoundException { - delegate.addNotificationListener(name, listener, filter, handback); - } - - public void removeNotificationListener(final ObjectName name, final ObjectName listener) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener); - } - - public void removeNotificationListener(final ObjectName name, - final ObjectName listener, - final NotificationFilter filter, - final Object handback) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener, filter, handback); - } - - public void removeNotificationListener(final ObjectName name, final NotificationListener listener) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener); - } - - public void removeNotificationListener(final ObjectName name, - final NotificationListener listener, - final NotificationFilter filter, - final Object handback) - throws InstanceNotFoundException, ListenerNotFoundException { - delegate.removeNotificationListener(name, listener, filter, handback); - } - - public MBeanInfo getMBeanInfo(final ObjectName name) - throws InstanceNotFoundException, IntrospectionException, ReflectionException { - return delegate.getMBeanInfo(name); - } - - public boolean isInstanceOf(final ObjectName name, final String className) throws InstanceNotFoundException { - return delegate.isInstanceOf(name, className); - } - - public Object instantiate(final String className) throws ReflectionException, MBeanException { - return delegate.instantiate(className); - } - - public Object instantiate(final String className, final ObjectName loaderName) - throws ReflectionException, MBeanException, InstanceNotFoundException { - return delegate.instantiate(className, loaderName); - } - - public Object instantiate(final String className, final Object[] params, final String[] signature) - throws ReflectionException, MBeanException { - return delegate.instantiate(className, params, signature); - } - - public Object instantiate(final String className, - final ObjectName loaderName, - final Object[] params, - final String[] signature) - throws ReflectionException, MBeanException, InstanceNotFoundException { - return delegate.instantiate(className, loaderName, params, signature); - } - - @Deprecated - public ObjectInputStream deserialize(final ObjectName name, final byte[] data) - throws InstanceNotFoundException, OperationsException { - return delegate.deserialize(name, data); - } - - @Deprecated - public ObjectInputStream deserialize(final String className, final byte[] data) - throws OperationsException, ReflectionException { - return delegate.deserialize(className, data); - } - - @Deprecated - public ObjectInputStream deserialize(final String className, final ObjectName loaderName, final byte[] data) - throws InstanceNotFoundException, OperationsException, ReflectionException { - return delegate.deserialize(className, loaderName, data); - } - - public ClassLoader getClassLoaderFor(final ObjectName mbeanName) throws InstanceNotFoundException { - return delegate.getClassLoaderFor(mbeanName); - } - - public ClassLoader getClassLoader(final ObjectName loaderName) throws InstanceNotFoundException { - return delegate.getClassLoader(loaderName); - } - - public ClassLoaderRepository getClassLoaderRepository() { - return delegate.getClassLoaderRepository(); - } -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java deleted file mode 100644 index 595e747536..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlan.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.deploymentplan; - -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deployer.api.IDeploymentPlanDeployer; - -/** - * Implementation of the Deployment plan MBean. - * @author Mickaël LEDUQUE - * @author Francois Fornaciari - */ -public class JOnASDeploymentPlan implements JOnASDeploymentPlanMBean { - /** - * The logger. - */ - private Log logger = LogFactory.getLog(JOnASDeploymentPlan.class); - - /** - * JMX server (MBean server) instance. - */ - private MBeanServer mbeanServer = null; - - /** - * ServerProperties service object. - */ - private ServerProperties serverProperties = null; - - /** - * The deployment plan deployer. - */ - private IDeploymentPlanDeployer deploymentPlanDeployer = null; - - /** - * This callback method is called during the service starting as soon as all - * service dependencies are resolved. - */ - public void start() throws Exception { - try { - ObjectName objectName = JonasObjectName.deploymentPlan(serverProperties.getDomainName()); - mbeanServer.registerMBean(this, objectName); - } catch (Exception e) { - logger.error("MBean registration error, {0}", e); - } - } - - /** - * This callback method is called during the service stopping. - * The unregistration of one of the required service can trigger the method invocation. - */ - public void stop() throws ServiceException { - // MBean unregistration - if (mbeanServer != null) { - try { - ObjectName objectName = JonasObjectName.deploymentPlan(serverProperties.getDomainName()); - mbeanServer.unregisterMBean(objectName); - } catch (Exception e) { - logger.error("MBean unregistration error, {0}", e); - } - } - } - - /** - * Set the MBean Server. - * @param mbeanServer the new JMX service. - */ - public void setMBeanServer(final MBeanServer mbeanServer) { - this.mbeanServer = mbeanServer; - } - - /** - * Set the server properties service. - * @param serverProperties the serverProperties to set - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * Sets the deployment plan deployer. - * @param deploymentPlanDeployer the new deployment plan deployer. - */ - public void setDeploymentPlanDeployer(final IDeploymentPlanDeployer deploymentPlanDeployer) { - this.deploymentPlanDeployer = deploymentPlanDeployer; - } - - /** - * {@inheritDoc} - */ - public Integer getDeploymentPlansCount() { - return this.deploymentPlanDeployer.getDeploymentPlansCount(); - } - - /** - * Returns the list of deployed deployment plans. - * @return the list of deployed deployment plans. - */ - public String[] getDeploymentPlans() { - List planPaths = this.deploymentPlanDeployer.getDeploymentPlansUrls(); - String[] result = new String[planPaths.size()]; - int index = 0; - for (String path : planPaths) { - result[index++] = path; - } - return result; - } -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java deleted file mode 100644 index 883e0943dc..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/deploymentplan/JOnASDeploymentPlanMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.deploymentplan; - -public interface JOnASDeploymentPlanMBean { - - /** - * Returns the number of deployed deployment plans. - * @return the number of deployed deployment plans. - */ - public Integer getDeploymentPlansCount(); - - /** - * Returns the list of deployed deployment plans. - * @return the list of deployed deployment plans. - */ - public String[] getDeploymentPlans(); - -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java deleted file mode 100644 index d6aed7bbac..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/mbeanbuilder/JOnASMBeanServerBuilder.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.mbeanbuilder; - -import org.ow2.jonas.jmx.internal.interceptor.InvocationHandlerImpl; -import org.ow2.jonas.jmx.internal.interceptor.MBeanServerDelegateInterceptor; - -import javax.management.MBeanServer; -import javax.management.MBeanServerBuilder; -import javax.management.MBeanServerDelegate; -import java.lang.reflect.Proxy; - -/** - * This class represents a builder that creates a proxy of default - * MBeanServer implementation. - * @author Mohammed Boukada - */ -public class JOnASMBeanServerBuilder extends MBeanServerBuilder { - - /** - * Empty constructor - */ - public JOnASMBeanServerBuilder() {} - - /** - * Creates a new MBeanServer - * @param defaultDomain - * @param initialOuter - * @param delegate - * @return proxy of the MBeanServer - */ - public MBeanServer newMBeanServer(String defaultDomain, - MBeanServer initialOuter, - MBeanServerDelegate delegate) { - - // handler for outer proxy - InvocationHandlerImpl proxyHandler = new InvocationHandlerImpl(); - - // Create an empty proxy with no interceptor handler which - // will delegate invocations to real MBeanServer - // - // Outer proxy will be used when a call is done - // on a MBean which implements MBeanRegistration - MBeanServer outerProxy = (MBeanServer) Proxy.newProxyInstance(MBeanServer.class.getClassLoader(), - new Class[]{MBeanServer.class}, - proxyHandler); - - // Create real MBeanServer with outerProxy - MBeanServer origin = super.newMBeanServer(defaultDomain, outerProxy, delegate); - - // Create handler for MBeanServer proxy and add - // the default interceptor - InvocationHandlerImpl invocationHandler = new InvocationHandlerImpl(origin); - invocationHandler.addInterceptor(new MBeanServerDelegateInterceptor(origin)); - - // Create the MBeanServer proxy - MBeanServer proxy = (MBeanServer) Proxy.newProxyInstance(origin.getClass().getClassLoader(), - new Class[]{MBeanServer.class}, - invocationHandler); - - // Set delegate handler when outer MBeanServer is used - proxyHandler.setDelegate(invocationHandler); - - // return "proxyfied" MBeanServer - return proxy; - } - - /** - * Delegate creating MBeanServerDelegate to MBeanServerBuilder - * @return - */ - public MBeanServerDelegate newMBeanServerDelegate() { - return super.newMBeanServerDelegate(); - } -} diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java deleted file mode 100644 index bc66f23cfe..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositories.java +++ /dev/null @@ -1,396 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.repository; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.exceptions.InvalidRepositoryException; -import org.ow2.util.plan.bindings.repository.ExtendedRepository; -import org.ow2.util.plan.bindings.repository.Repositories; -import org.ow2.util.plan.bindings.repository.Repository; -import org.ow2.util.plan.bindings.repository.RepositoryKind; -import org.ow2.util.plan.deployer.api.IRepositoryDeployer; -import org.ow2.util.plan.fetcher.api.Constants; -import org.ow2.util.plan.reader.repository.IRepositoryDataReader; -import org.ow2.util.plan.repository.api.IRepositoryManager; -import org.ow2.util.plan.repository.api.RepositoryIdCollisionException; - -/** - * This component is part of the bootstrap module and registers initial - * repositories that will be used by the deployment plan. - * @author Mickaël LEDUQUE - * @author Francois Fornaciari - * @author Adriana Danes - */ -public class JOnASRepositories implements JOnASRepositoriesMBean { - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(JOnASRepositories.class); - - /** - * ServerProperties service object. - */ - private ServerProperties serverProperties = null; - - /** - * The repository manager. - */ - private IRepositoryManager repositoryManager = null; - - /** - * Reference to the {@link ConfigurationAdmin} service. - */ - private ConfigurationAdmin configurationAdmin = null; - - /** - * JMX server (MBean server) instance. - */ - private MBeanServer mbeanServer = null; - - /** - * The repository deployer. - */ - private IRepositoryDeployer repositoryDeployer; - - /** - * The repository file reader. - */ - private IRepositoryDataReader repositoryReader = null; - - /** - * User specified user repository property name. - */ - private static final String PROP_M2_LOCAL_REPOSITORY = "m2.repository"; - - /** - * Path to default M2 repository. - */ - private static final String PATH_DEFAULT_REPOSITORY = ".m2/repository"; - - /** - * Configuration file for initial repositories. - */ - private static final String CONFIG_FILE = "initial-repositories.xml"; - - /** - * The Id for the internal ROOT repository - */ - private static final String ROOT_URL_INTERNAL_REPOSITORY_ID = "Root URL internal"; - - /** - * This callback method is called during the service starting as soon as all - * service dependencies are resolved. - */ - public void start() throws Exception { - // Set the local repositories base directory into the configuration - Configuration configuration = configurationAdmin.getConfiguration(Constants.CONFIG_PID, null); - if (configuration != null) { - Dictionary props = new Hashtable(); - props.put(Constants.LOCAL_REPOSITORIES_BASE_DIR, JProp.getJonasBase() + "/repositories"); - configuration.update(props); - } - - // Add the local repositories - addLocalRepositories(); - - // Initial repositories file - Repositories initialRepositories = null; - File configFile = new File(JProp.getConfDir(), CONFIG_FILE); - if (configFile.exists()) { - try { - initialRepositories = repositoryReader.readRepositories(configFile); - } catch (Exception e) { - logger.error("Exception while parsing the initial repositories file : {0}", e); - } - } - - // Add the initial repositories in the repositories manager - if (initialRepositories != null) { - int repositoryCount = 0; - for (Repository repository : initialRepositories.getRepositories()) { - try { - repositoryManager.addRepository(repository); - repositoryCount++; - } catch (RepositoryIdCollisionException e) { - logger.warn("Multiple repository with same id; id={0}", repository.getId()); - } catch (InvalidRepositoryException e) { - logger.warn("Invalid repository with id {0}", repository.getId()); - } - } - logger.debug("JOnAS started with {0} repositories.", repositoryCount); - } else { - logger.debug("JOnAS started with no repositories"); - } - - try { - ObjectName objectName = JonasObjectName.repository(serverProperties.getDomainName()); - mbeanServer.registerMBean(this, objectName); - } catch (Exception e) { - logger.error("MBean registration error, {0}", e); - } - } - - /** - * This callback method is called during the service stopping. The - * unregistration of one of the required service can trigger the method - * invocation. - */ - public void stop() throws Exception { - // MBean unregistration - if (mbeanServer != null) { - try { - ObjectName objectName = JonasObjectName.repository(serverProperties.getDomainName()); - mbeanServer.unregisterMBean(objectName); - } catch (Exception e) { - logger.error("MBean unregistration error, {0}", e); - } - } - } - - /** - * {@inheritDoc} - */ - public Integer getRepositoryDeployablesCount() { - return this.repositoryDeployer.getDeployablesCount(); - } - - /** - * {@inheritDoc} - */ - public List getRepositoriesDescriptions() { - List repositoriesDescriptions = new ArrayList(); - for (Repository repository : this.repositoryManager) { - repositoriesDescriptions.add(repository.toString()); - } - return repositoriesDescriptions; - } - - /** - * Get the URL repositories from the repositoryManager, and exclude the internal ROOT repository - * @return List of URL repository names. - */ - public List getURLRepositories() { - List urlRepositories = new ArrayList(); - for (Repository repository : this.repositoryManager) { - RepositoryKind repositoryType = repository.getType(); - String repositoryId = repository.getId(); - if (repositoryType.equals(RepositoryKind.URL)) { - // This is a URL repository - // filter out Root URL internal repository - if (!repositoryId.equals(ROOT_URL_INTERNAL_REPOSITORY_ID)) { - //repositoriesDescriptions.add(repository.toString()); - String location = repository.getUrl(); - urlRepositories.add(location); - } - } - } - return urlRepositories; - } - /** - * {@inheritDoc} - */ - public Integer getRepositoriesNumber() { - return this.repositoryManager.getRepositoryCount(); - } - - /** - * Set the server properties service. - * @param serverProperties the serverProperties to set - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * Set the repository manager used by this service. - * @param repositoryManager the new repository manager. - */ - public void setRepositoryManager(final IRepositoryManager repositoryManager) { - this.repositoryManager = repositoryManager; - } - - /** - * Set the repository deployer. - * @param repositoryDeployer the new repository deployer. - */ - public void setRepositoryDeployer(final IRepositoryDeployer repositoryDeployer) { - this.repositoryDeployer = repositoryDeployer; - } - - /** - * Set the MBean Server. - * @param mbeanServer the new JMX service. - */ - public void setMBeanServer(final MBeanServer mbeanServer) { - this.mbeanServer = mbeanServer; - } - - /** - * Set the repository reader. - * @param repositoryReader the new repository reader. - */ - public void setRepositoryReader(final IRepositoryDataReader repositoryReader) { - this.repositoryReader = repositoryReader; - } - - /** - * @param configurationAdmin the configurationAdmin to set - */ - public void setConfigurationAdmin(final ConfigurationAdmin configurationAdmin) { - this.configurationAdmin = configurationAdmin; - } - - /** - * Add local repositories. - */ - private void addLocalRepositories() { - addLocalMaven2Repositories(); - - // Registers the url internal repository - File base = new File(getURLInternalBaseRepositoryLocation()); - File root = new File(getURLInternalRootRepositoryLocation()); - if (!root.equals(base) && base.exists()) { - addRepository("Base URL internal", base.getPath(), RepositoryKind.URL); - } - addRepository(ROOT_URL_INTERNAL_REPOSITORY_ID, root.getPath(), RepositoryKind.URL); - } - - /** - * Add a new repository to the repository manager. - * @param id Repository id - * @param location Repository location - * @param repositoryKind King of repository - */ - private void addRepository(final String id, final String location, final RepositoryKind repositoryKind) { - Repository repository = new ExtendedRepository(); - repository.setType(repositoryKind); - repository.setId(id); - - String locationWithAppendingSlash; - if (location.startsWith("/")) { - locationWithAppendingSlash = location; - } else { - locationWithAppendingSlash = '/' + location; - } - repository.setUrl("file:" + locationWithAppendingSlash); - - try { - repositoryManager.addRepository(repository); - } catch (RepositoryIdCollisionException e) { - logger.error("Cannot add repository {0}, it already exists", repository); - } catch (InvalidRepositoryException e) { - logger.error("Invalid repository {0}", repository); - } - } - - /** - * Add a Maven2 repositories to the repository manager. - */ - private void addLocalMaven2Repositories() { - boolean developer = Boolean.getBoolean(ConfigurationConstants.JONAS_DEVELOPER_PROP); - if (developer) { - addRepository("Maven2 local repository", getMaven2RepositoryLocation(), RepositoryKind.MAVEN_2); - } else { - File repositoriesRootDir = new File(JProp.getRepositoriesRootDir()); - File repositoriesBaseDir = new File(JProp.getRepositoriesBaseDir()); - List repositoriesDirs = new ArrayList(); - if (repositoriesRootDir.exists()) { - repositoriesDirs.add(repositoriesRootDir); - } - if (!repositoriesBaseDir.equals(repositoriesRootDir) && repositoriesBaseDir.exists()) { - repositoriesDirs.add(repositoriesBaseDir); - } - - for (File repositoryDir: repositoriesDirs) { - String dir; - if (repositoriesRootDir.equals(repositoryDir)) { - dir = "root"; - } else { - dir = "base"; - } - - List repositories = Arrays.asList(repositoryDir.listFiles()); - for (File repository: repositories) { - if (repository.isDirectory() && repository.getName().startsWith("maven2-")) { - String repositoryId = repository.getName() + "-" + dir; - addRepository(repositoryId, repository.getAbsolutePath(), RepositoryKind.MAVEN_2); - } - } - } - } - } - - /** - * @return Location pointing to $JONAS_ROOT/repositories/url-internal - */ - private String getURLInternalRootRepositoryLocation() { - return JProp.getRepositoriesRootDir() + File.separator + "url-internal"; - } - - /** - * @return Location pointing to $JONAS_BASE/repositories/url-internal - */ - private String getURLInternalBaseRepositoryLocation() { - return JProp.getRepositoriesBaseDir() + File.separator + "url-internal"; - } - - /** - * Get the local maven2 repository location - * @return a {@link String} to a usable Maven2 repository. - */ - private String getMaven2RepositoryLocation() { - String m2Repository = System.getProperty(PROP_M2_LOCAL_REPOSITORY); - - // Priority to a user defined repository - if (m2Repository == null) { - // Nothing, so try a reasonable default - // Assume that local Maven2 repository is in ~/.m2/repository - String userHome = System.getProperty("user.home"); - m2Repository = userHome + File.separator + PATH_DEFAULT_REPOSITORY; - } - - // Return the detected repository - return m2Repository; - } -} - diff --git a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java b/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java deleted file mode 100644 index 7680079619..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/java/org/ow2/jonas/services/bootstrap/repository/JOnASRepositoriesMBean.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.services.bootstrap.repository; - -import java.util.List; - -/** - * MBean interface for the JOnASRepositories. - * @author Mickaël LEDUQUE - * @author Adriana Danes - */ -public interface JOnASRepositoriesMBean { - - /** - * Returns the number of available repositories. - * @return the number of repositories. - */ - public Integer getRepositoriesNumber(); - - /** - * Returns the list of repository ids. - * @return the list of repository ids. - */ - public List getRepositoriesDescriptions(); - - /** - * Returns the list of URL repository names. - * @return the list of repository ids. - */ - public List getURLRepositories(); - - /** - * Returns the number of deployed repositories deployables. - * @return the number of deployed repositories deployables. - */ - public Integer getRepositoryDeployablesCount(); -} diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bash b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bash deleted file mode 100644 index 504109ed41..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bash +++ /dev/null @@ -1,582 +0,0 @@ -#!/bin/bash -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8.2: Jerome Pioux - Benoit Pelletier -# -# Modifications for 4.8.3 -# ----------------------- -# Jerome - 10/17/2006 -# - Make this bash script to work for ksh. ie: -# (first line may need to be altered on some sites)... -# * change all with -# * Add a prefix (Do) in the start,stop,kill,status function names -# * Other modifications are flagged as Jerome - 10/17/2006 in the code -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Status|Start|Stop|Kill JONAS cluster node(s) -# Usage: cl [-n ] [status] | < [-f] kill | [-d] start | stop >" - -# If XWINDOWS=yes or YES exists in the user env., then use -win on startup -XWINDOWS=${XWINDOWS:-no} - -# Default values -JCL_NUMBER_OF_NODES=${JCL_NUMBER_OF_NODES:-40} -JCL_BASE_PREFIX=${JCL_BASE_PREFIX:-$JCL_CLUSTER_DAEMON_DIR/jb} -JCL_DOMAIN_NAME=${JCL_DOMAIN_NAME:-sampleClusterDomain} -JCL_EAR_FILE=${JCL_EAR_FILE:-$JONAS_ROOT/examples/cluster-j2ee14/output/apps/sampleCluster2.ear} -JCL_HA_EAR_FILE=${JCL_HA_EAR_FILE:-$JONAS_ROOT/examples/cluster-j2ee14/output/apps/haTransactions.ear} -JCL_JAVAEE5_EAR_FILE=${JCL_JAVAEE5_EAR_FILE:-$JONAS_ROOT/examples/cluster-javaee5/output/apps/sampleCluster3.ear} -JCL_NODE_NAME_PREFIX=${JCL_NODE_NAME_PREFIX:-node} -JCL_CLUSTER_DAEMON_DIR=${JCL_CLUSTER_DAEMON_DIR:-cd} -JCL_DB_DIR=${JCL_DB_DIR:-db} -JCL_DB_NAME=${JCL_DB_NAME:-db} -JCL_MASTER_DIR=${JCL_MASTER_DIR:-master} -JCL_MASTER_NAME=${JCL_MASTER_NAME:-master} - -# ------------------------------------------ -# NO NEED TO MODIFY ANYTHING BELOW THIS LINE -# ------------------------------------------ -JCL_BASE_DEBUG_PORT=${JCL_BASE_DEBUG_PORT:-414} - -# Delay in seconds to apply between nodes startup/shutdown -DELAY1_AFTER_NODE_START=20 -DELAY2_AFTER_NODE_START=3 -DELAY_BETWEEN_NODE_STOP=1 - -CLUSTER="" -jonasbase="" -typeset -i nnodes=0 -typeset -i wholeCluster=0 -osname=`uname -s` - - -# ------ -# ATEXIT -# ------ -atexit() -{ - printf "\n" -} - -# ----- -# USAGE -# ----- -usage() -{ - printf "\n" - printf "usage: $(basename $0) [ [-n ] [status]] | < [-f] kill | [-d] start | stop > ]\n" - printf "\n" - printf " With node_id: clusterd (or cd), $JCL_MASTER_NAME (or ms), $JCL_DB_NAME \n" - printf " With node_number: node number of JOnAS instances which corresponds to the suffix of the node name\n" - printf " * Form1: Multiple nodes can be specified between commas (no space)\n" - printf " * Form2: Range(s) can be entered using a dash between node numbers (no space)\n" - printf " * Any combination between form1 and form2 is allowed\n" - printf " Ex: -n $JCL_DB_NAME,1-3 applies to the $JCL_DB_NAME node and nodes 1,2 and 3\n" - printf " Notes:\n" - printf " * Do not specify -n or use -nall to address all nodes in the cluster\n" - printf " * A node number for your cluster must be between 1 and $JCL_NUMBER_OF_NODES\n" - printf "\n" - printf " Use \"export XWINDOWS=yes\" if you want to start the JVMs in dedicated xterms\n"; - printf "\n" - exit 1 -} - -# --------- -# DOPADDING -# --------- -DoPadding() -{ - # Use to align fields on the screen - typeset -i m1=$1 - typeset -i m2=$2 - typeset -i p=m2-m1 - - typeset -i i=1 - while [[ $i -le $p ]]; do - printf " " - i=i+1 - done - printf " " - return -} - -# ------------ -# SETJONASBASE -# ------------ -SetJonasBase() -{ - # Do not add any echo or printf in this routine - # besides the one before the return - case $1 in - clusterd) - base=$JCL_CLUSTER_DAEMON_DIR - ;; - $JCL_MASTER_NAME) - base=$JCL_MASTER_DIR - ;; - $JCL_DB_NAME) - base=$JCL_DB_DIR - ;; - *) - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#JCL_NODE_NAME_PREFIX} - #base=$JCL_BASE_PREFIX${node:$l} - base=$JCL_BASE_PREFIX${node#*$JCL_NODE_NAME_PREFIX} - ;; - esac - echo $base - return -} - -# ---------- -# SETCLUSTER -# ---------- -SetCluster() -{ -str=${1:-all} -typeset -i n=1 - -# --- All nodes -# We are in control so order nodes "startup-ready" -if [[ $str = 0 || $str = all ]]; then - wholeCluster=1 - cluster="clusterd $JCL_DB_NAME $JCL_MASTER_NAME" - while [[ $n -le $JCL_NUMBER_OF_NODES ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$n" - n=n+1 - done - CLUSTER=${cluster#\ *} - return -fi - -# --- Partial nodes list -# Respect order chosen by user -typeset -i err=0 -typeset -i numnode -OLDIFS=$IFS - -# For nodes between commas -IFS=, -for substr in $str; do - n="$(expr $substr : '.*-')" - - # No dash-formed node - if [[ $n -eq 0 ]]; then - # Non numeric node - if ( echo "$substr" | grep -q [^[:digit:]] ); then - # Abbrev. - [[ $substr = cd ]] && substr=clusterd - [[ $substr = ms ]] && substr=$JCL_MASTER_NAME - if [[ $substr != clusterd && - $substr != $JCL_MASTER_NAME && - $substr != $JCL_DB_NAME ]]; then - err=1 - fi - cluster="$cluster $substr" - # Numeric - else - numnode=$substr - # numnode must be less then JCL_NUMBER_OF_NODES - [[ $numnode -gt $JCL_NUMBER_OF_NODES ]] && err=1 - cluster="$cluster $JCL_NODE_NAME_PREFIX$substr" - fi - - # dash-formed node - else - n1=${substr%%-*} - n2=${substr##*-} - # Both dash-formed nodes must be numeric - if ( echo "$n1" | grep -q [^[:digit:]] || - echo "$n2" | grep -q [^[:digit:]] ); then - err=1 - else - typeset -i i=$n1 && typeset -i imax=$n2 - # First dash-formed node must be less or equal the second - # which in turn must be less then JCL_NUMBER_OF_NODES - [[ $i -gt $imax || $imax -gt $JCL_NUMBER_OF_NODES ]] && err=1 - while [[ $i -le $imax ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$i" - i=i+1 - done - fi - fi -done -IFS=$OLDIFS - -# Remove heading space if any -cluster=${cluster#\ *} - -# Raise error on duplicates -if [[ $err -eq 0 ]]; then - for node1 in $cluster; do - n=0 - for node2 in $cluster; do - [[ $node1 = $node2 ]] && n=n+1 - done - [[ $n -gt 1 ]] && err=1 && break - done -fi - -# Error - empty cluster -[[ $err -eq 1 ]] && cluster="" -CLUSTER=$cluster -return -} - -# --------------- -# CLUSTER DAEMON -# --------------- -ClusterDaemon() -{ - case ${1:-na} in - start) - printf "\n\n*** Starting JOnAS cluster daemon ... \n" - # Jerome - 10/17/2006 - Change regex below for ksh support - #if [[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]]; then - if [[ $XWINDOWS = [Yy][Ee][Ss] ]]; then - xterm -title $HOSTNAME:clusterd -geometry 110x16 -sb -e jclusterd start & - else - jclusterd start & - fi - sleep $DELAY2_AFTER_NODE_START - ;; - - stop) - echo -e "\n\n*** Stopping JOnAS cluster daemon ..." - jclusterd stop - sleep $DELAY_BETWEEN_NODE_STOP - ;; - esac - return -} - -# ------- -# SOSTART -# ------- -Dostart() -{ - typeset -i delay - typeset -i n=1 - - # Jerome - 10/17/2006 - Change regex below for ksh support - #[[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]] && WIN="-win" || WIN="" - [[ $XWINDOWS = [Yy][Ee][Ss] ]] && WIN="-win" || WIN="" - - # Startup cluster; If we are in control of the whole cluster, the nodes - # are already in the correct order for startup - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - DBG="" - OSGI="" - - # Set debug and startup delay - case $node in - clusterd) - ClusterDaemon start - continue - ;; - master | db) - delay=$DELAY1_AFTER_NODE_START - [[ $CLEAN = true ]] && OSGI="-clean" - [[ $DEV = true ]] && OSGI="$OSGI -dev" - [[ $GUI = true ]] && OSGI="$OSGI -gui" - ;; - *) - delay=$DELAY2_AFTER_NODE_START - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#node} - #[[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node:$l}" - [[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node#*$JCL_NODE_NAME_PREFIX}" - [[ $CLEAN = true ]] && OSGI="-clean" - [[ $DEV = true ]] && OSGI="$OSGI -dev" - [[ $GUI = true ]] && OSGI="$OSGI -gui" - ;; - esac - - - - # Save and clean up logs - rm -rf $JONAS_BASE/logs/old/* - mkdir -p $JONAS_BASE/logs/old - mv $JONAS_BASE/logs/* $JONAS_BASE/logs/old 2>/dev/null - - case $node in - node1 | node2 | node3 | node4) - if [[ "$JCL_EAR_FILE" != "NULL" && -f $JCL_EAR_FILE ]]; then - cp $JCL_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - if [[ "$JCL_HA_EAR_FILE" != "NULL" && -f $JCL_HA_EAR_FILE ]]; then - cp $JCL_HA_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - if [[ "$JCL_JAVAEE5_EAR_FILE" != "NULL" && -f $JCL_JAVAEE5_EAR_FILE ]]; then - cp $JCL_JAVAEE5_EAR_FILE $JONAS_BASE/deploy 2>/dev/null - fi - ;; - esac - - cmd="jonas start $OSGI $WIN $DBG -n $node -Ddomain.name=$JCL_DOMAIN_NAME" - printf "\n\n*** Starting JOnAS $node instance ... \n($cmd)\n" - $cmd - - # Wait delay seconds between nodes startup - if [[ $n -lt $nnodes && $WIN = "-win" ]]; then - printf "\n\tWaiting ${delay}s before starting next node ..." - sleep $delay - fi - n=n+1 - done - return -} - -# ------ -# DOSTOP -# ------ -Dostop() -{ - typeset -i delay=$DELAY_BETWEEN_NODE_STOP - - # Stop cluster; If we are in control of the whole cluster, the nodes - # are in the correct order for startup which is the reverse order of - # how we would like to stop them; so let's build a "reverse" cluster - if [[ $wholeCluster -eq 1 ]]; then - for node in $CLUSTER; do - cluster2="$node $cluster2" - done - CLUSTER=$cluster2 - fi - - # Stop cluster - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - - if [[ $node = clusterd ]]; then - ClusterDaemon stop - continue - fi - - cmd="jonas stop -n $node" - printf "\n\n*** Stopping JOnAS $node instance ...\n($cmd)\n" - $cmd - - sleep $delay - done - return -} - -# ------ -# DOKILL -# ------ -Dokill() -{ - # Kill cluster - for node in $CLUSTER; do - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - if [[ $osname = "HP-UX" ]]; then - pid=$(ps -efx | grep $strToMatch | grep -v grep | awk '{ print $2 }') - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - fi - - if [[ ! -z $pid ]]; then - cmd="/bin/kill -$force $pid" - printf "\n*** Killing JOnAS $node instance ...\n($cmd)\n" - $cmd - fi - done - return -} - -# -------- -# DOSTATUS -# -------- -Dostatus() -{ - typeset -i l - typeset -i lnode - typeset -i ljonasbase - typeset -i maxlnode=0 - typeset -i maxljonasbase=0 - - # Get longest strings length - # (to use in field alignment for display below) - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - [[ $lnode -gt $maxlnode ]] && maxlnode=$lnode - [[ $ljonasbase -gt $maxljonasbase ]] && maxljonasbase=$ljonasbase - done - - printf "\n" - - # Display status - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - - printf " node=%-s" $node - DoPadding $lnode $maxlnode - - printf "base=%-s" $jonasbase - DoPadding $ljonasbase $maxljonasbase - - printf "%0.s-> " - - if [[ $node = clusterd ]]; then - strToMatch=ClusterDaemon - else - strToMatch=Djonas.name=$node - fi - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - if [[ $osname = "HP-UX" ]]; then - pid=$(ps -efx | grep $strToMatch | grep -v grep | awk '{ print $2 }') - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - fi - - if [[ ! -z $pid ]]; then - printf "running [$pid]\n" - else - printf "not running\n" - fi - done - return -} - -# ----- -# MAIN -# ----- -trap "atexit" exit - -# Jerome - 10/17/2006 -# On AIX, the ww is not supported (and not needed) -if [[ $(uname -s) = AIX ]]; then - XTERM=aixterm - psfmt=eo -else - XTERM=xterm - psfmt=ewwo -fi - -typeset -i n -typeset -i force=15 -debug=false -clean=false -dev=false - -# Show stopper -if [[ ! -n $JONAS_ROOT ]]; then - printf "$0: JONAS_ROOT is not defined\n" - exit 2 -fi -if ( ! echo $PATH | grep $JONAS_ROOT/bin >/dev/null 2>&1 ) then - printf "$0: JONAS_ROOT/bin is not in your PATH\n" - exit 3 -fi - -# Read inputs -if [[ $# -ne 0 ]]; then - # linux/bash help way - [[ "$1" = --help ]] && usage - - while getopts ?cegfhn:d c - do - case $c in - # Nodes - n) - node=$OPTARG - ;; - f) - force=9 - ;; - d) - DEBUG=true - ;; - c) - CLEAN=true - ;; - e) - DEV=true - ;; - g) - GUI=true - ;; - *) - usage - ;; - esac - done - shift `expr $OPTIND - 1` - action="$@" -fi - -# Define the cluster -SetCluster $node -if [[ -z $CLUSTER ]]; then - printf "$0: illegal -n parameters\n" - usage -else - # Remember the number of nodes in the cluster - for node in $CLUSTER; do - nnodes=nnodes+1 - done -fi - -# Do the action -[[ "$action" = "" ]] && action=status -case "$action" in - start|stop|kill|status) - Do$action - ;; - *) - usage - ;; -esac -exit 0 diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bat b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bat deleted file mode 100755 index 95bd93b246..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.bat +++ /dev/null @@ -1,371 +0,0 @@ -@echo off -REM --------------------------------------------------------------------------- -REM JOnAS: Java(TM) Open Application Server -REM Copyright (C) 2006-2009 Bull S.A.S. -REM Contact: jonas-team@ow2.org -REM -REM This library is free software; you can redistribute it and/or -REM modify it under the terms of the GNU Lesser General Public -REM License as published by the Free Software Foundation; either -REM version 2.1 of the License, or any later version. -REM -REM This library is distributed in the hope that it will be useful, -REM but WITHOUT ANY WARRANTY; without even the implied warranty of -REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -REM Lesser General Public License for more details. -REM -REM You should have received a copy of the GNU Lesser General Public -REM License along with this library; if not, write to the Free Software -REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -REM USA -REM -REM Initial developer(s): Jerome Pioux - Benoit Pelletier -REM --------------------------------------------------------------------------- -REM $Id$ -REM --------------------------------------------------------------------------- - -REM Start, Stop JONAS cluster nodes -REM Usage: jcl [-n ] start | stop - -setlocal enabledelayedexpansion - -REM ----- If SEPARATE_WINDOWS=yes or YES exists in the user env., then use -win on startup -if not defined SEPARATE_WINDOWS set SEPARATE_WINDOWS=No - -:: ------------------------------------------ -:: NO NEED TO MODIFY ANYTHING BELOW THIS LINE -:: ------------------------------------------ - -REM ----- Delay in seconds to apply between nodes startup/shutdown -set /a DELAY1_AFTER_NODE_START=10 -set /a DELAY2_AFTER_NODE_START=4 -set /a DELAY_BETWEEN_NODE_STOP=1 - -REM ----- Set defaults if this script is called directly w/o the script wrapper -if "%JCL_NUMBER_OF_NODES%"=="" set JCL_NUMBER_OF_NODES=4 -if "%JCL_BASE_PREFIX%"=="" set JCL_BASE_PREFIX=%JCL_CLUSTER_DAEMON_DIR%\jb -if "%JCL_DOMAIN_NAME%"=="" set JCL_DOMAIN_NAME=sampleClusterDomain -if "%JCL_NODE_NAME_PREFIX%"=="" set JCL_NODE_NAME_PREFIX=node -if "%JCL_CLUSTER_DAEMON_DIR%"=="" set JCL_CLUSTER_DAEMON_DIR=cd -if "%JCL_DB_DIR%"=="" set JCL_DB_DIR=db -if "%JCL_DB_NAME%"=="" set JCL_DB_NAME=db -if "%JCL_MASTER_DIR%"=="" set JCL_MASTER_DIR=master -if "%JCL_MASTER_NAME%"=="" set JCL_MASTER_NAME=master - -REM ----- Defined list of supported actions -set /a numberOfCommands=2 -set actionTable[1]=start -set actionTable[2]=stop - -REM ----- CHECK if JONAS_ROOT is set -if not defined JONAS_ROOT ( - echo. - echo Error: JONAS_ROOT is not defined - goto endScript -) - -REM Set bin directory -set BIN=%JONAS_ROOT%\bin - -REM ----- Need findstr -findstr /? >nul 2>&1 -if errorlevel 1 ( - echo. - echo Error: findstr is not available! - goto endScript -) - -REM ----- Help wanted the "dos cmdline way" -if "%1X"=="/?X" goto usage - -REM ----- Parse input parameters -set /a nflag=0 -set /a err=0 -set cluster= -set action= - -for %%i in (%*) do ( - REM ----- err=3: Command syntax error - if defined action if %err% equ 0 set /a err=3 - - REM ----- There is an error, break out of the parser - if !err! equ 1 goto endParsing - - set param=%%i - - REM ----- Param starts with a dash - if /I "!param:~0,1!"=="-" ( - set /a nflag=0 - set key=!param:~1,2! - REM ----- Found -n flag to customize cluster nodes - if /I "!key!"=="n" ( - set /a nflag=1 - REM ----- err=1: Invalid flag - ) else ( - if %err% equ 0 set /a err=1 - ) - - REM ----- Param does not start with a dash - ) else ( - REM ----- Param is following up the -n flag - if !nflag! equ 1 ( - REM ----- See if param is a known action - for /l %%c in (1,1,%numberOfCommands%) do ( - REM ----- param is an action, register it and turn off the nflag - if /I !param! equ !actionTable[%%c]! ( - set action=!param! - set /a nflag=0 - ) - ) - REM ----- param was not an action, so it is a node - enter it in cluster - if !nflag! equ 1 ( - call :IsNumeric !param! answer - if "!answer!"=="yes" ( - if !param! GTR %JCL_NUMBER_OF_NODES% if %err% equ 0 set /a err=4 - set param=%JCL_NODE_NAME_PREFIX%!param! - ) - if defined cluster (set cluster=!cluster!,!param!) else (set cluster=!param!) - ) - - REM ----- Param is not following up the -n - ) else ( - REM ----- See if param is a known action - for /l %%c in (1,1,%numberOfCommands%) do ( - REM ----- param is an action, register it and turn on the done flag - if /I !param! equ !actionTable[%%c]! ( - set action=!param! - set /a done=1 - ) - ) - REM ----- err=2: Invalid action specified - if !done! equ 0 if %err% equ 0 set /a err=2 - ) - ) -) -:endParsing - -REM ----- err=2: No action specified -if %err% equ 0 if not defined action set /a err=2 - -REM ----- Work on the cluster nodes -set wholeCluster= -if not defined cluster set wholeCluster=1 -if "%cluster%"=="all" set wholeCluster=1 -if "%cluster%"=="0" set wholeCluster=1 - -if defined wholeCluster ( - set cluster=clusterd,db,master - for /l %%c in (1,1,%JCL_NUMBER_OF_NODES%) do ( - set cluster=!cluster!,%JCL_NODE_NAME_PREFIX%%%c - ) -) - -REM ----- report errors -if not %err% equ 0 ( - echo. - if %err% equ 1 echo Error: Invalid flag ^(-%key%^) - if %err% equ 2 echo Error: Invalid action or no action specified - if %err% equ 3 echo Error: Command syntax error - if %err% equ 4 echo Error: Node must be less than %JCL_NUMBER_OF_NODES% - goto usage -) - -REM Remember the number of nodes in the cluster -set /a nnodes=0 -for %%i in (%cluster%) do (set /a nnodes+=1) - -REM ----- Go do the work -call :%action% - -:endScript -endlocal - -REM ----- Unset variables -for /f "usebackq tokens=1-2 delims==" %%a in (`set JCL_`) do set %%a= - -echo. -exit /b 0 - -REM ------------------------------- END MAIN ------------------------------- - -REM ------------------------------ SUBROUTINES ----------------------------- -:: --------------- -:: CLUSTER DAEMON -:: --------------- -:ClusterDaemon -setlocal -set action=%1 - -if "%action%"=="start" ( - echo. - echo *** Starting JOnAS cluster daemon ... - call %BIN%\jclusterd start - call :sleep %DELAY2_AFTER_NODE_START% -) else ( -if "%action%"=="stop" ( - echo. - echo *** Stopping JOnAS cluster daemon ... - call %BIN%\jclusterd stop - call :sleep %DELAY_BETWEEN_NODE_STOP% -)) -endlocal&goto :eof - -:: --------------- -:: START -:: --------------- -:start -setlocal - -set /a n=1 - -echo %SEPARATE_WINDOWS%|findStr "[Yy][Ee][Ss]" >nul -if %errorlevel% equ 0 (set WIN=-win) else (set WIN=) - -REM ----- Startup cluster; If we are in control of the whole cluster, the nodes -REM ----- are already in the correct order for startup -for %%i in (%cluster%) do ( - set node=%%i - - call :SetJonasBase !node! base - set JONAS_BASE=!base! - set CATALINA_BASE=!JONAS_BASE! - - REM ----- Set debug and startup delay - if /I "!node!"=="clusterd" ( - call :ClusterDaemon start - ) else ( - - if /I "!node!"=="master" ( - set /a delay=%DELAY1_AFTER_NODE_START% - ) else ( - if /I "!node!"=="db" ( - set /a delay=%DELAY1_AFTER_NODE_START% - ) else ( - set /a delay=%DELAY2_AFTER_NODE_START% - )) - - REM ----- Save and clean up logs - rmdir /S /Q !JONAS_BASE!\logs\old\* 2>NUL - mkdir !JONAS_BASE!\logs\old 2>NUL - xcopy /Q /Y !JONAS_BASE!\logs\* !JONAS_BASE!\logs\old >NUL - - - - echo. - echo *** Starting JOnAS !node! instance ... - echo ^(jonas start !WIN! -n !node! -Ddomain.name=%JCL_DOMAIN_NAME%^) - call %BIN%\jonas start !WIN! -n !node! -Ddomain.name=%JCL_DOMAIN_NAME% - - REM ----- Wait delay seconds between nodes startup - if !n! LSS %nnodes% ( - if /I "!WIN!"=="-win" ( - echo. - echo Waiting !%delay!s before starting next node ... - call :sleep !delay! - ) - ) - set /a n+=1 - ) -) -endlocal&goto :eof - -:: --------------- -:: STOP -:: --------------- -:stop -setlocal - -REM ----- Stop cluster; If we are in control of the whole cluster, the nodes -REM ----- are in the correct order for startup which is the reverse order of -REM ----- how we would like to stop them; so let's build a "reverse" cluster -set cluster2= -if defined wholeCluster ( - for %%i in (%cluster%) do ( - set node=%%i - if defined cluster2 (set cluster2=!node!,!cluster2!) else (set cluster2=!node!) - ) - set cluster=!cluster2! -) - -REM ----- Stop cluster -for %%i in (%cluster%) do ( - set node=%%i - - call :SetJonasBase !node! base - set JONAS_BASE=!base! - set CATALINA_BASE=!JONAS_BASE! - - if /I "!node!"=="clusterd" ( - call :ClusterDaemon stop - ) else ( - echo. - echo *** Stopping JOnAS !node! instance ... - echo ^(jonas stop -n !node!^) - call %BIN%\jonas stop -n !node! - - call :sleep %DELAY_BETWEEN_NODE_STOP% - ) -) -:endStop -endlocal&goto :eof - -:: --------------- -:: SetJonasBase -:: --------------- -:SetJonasBase -setlocal -set node=%1 - -if "%node%"=="clusterd" ( - set base=%JCL_CLUSTER_DAEMON_DIR% -)else ( -if "%node%"=="master" ( - set base=%JCL_MASTER_DIR% -) else ( -if "%node%"=="db" ( - set base=%JCL_DB_DIR% -) else ( - set /a l=%node:node=% - set base=%JCL_BASE_PREFIX%!l! -))) -endlocal&set %2=%base%&goto :eof - -:: --------------- -:: ISNUMERIC -:: --------------- -:isnumeric -setlocal -set string=%1 -REM ----- Do not consider quote if any -set string=%string:"=% -REM ----- Use findstr with reg.ex. -echo %string%|findStr "[^0-9]" >nul -set answer=no -if %errorlevel% equ 1 set answer=yes -endlocal&set %2=%answer%&goto :eof - -:: --------------- -:: SLEEP -:: --------------- -:sleep -setlocal -set delay=%1 -ping 1.1.1.1 -n 1 -w %delay%000 >nul -endlocal&goto :eof - -:: --------------- -:: USAGE -:: --------------- -:usage -echo. -echo usage: %~n0 ^[ -n ^[clusterd^],^[db^],^[master^],^[node number^],... ^] start^|stop -echo Syntax notes: -echo * At least, one space is mandatory after -n -echo * If multiple values are used after -n, they must be separated by a -echo delimiter ^(space, comma...^) or multiple -n can also be used -echo * All nodes in the cluster will be used if -n is not specified -echo. -echo Example: -n db,1,3 addresses the db, node1 and node3 instances -echo. -echo Use "set SEPARATE_WINDOWS=yes" if you want to start the JVMs in dedicated windows -goto endScript diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.ksh b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.ksh deleted file mode 100644 index 0ebf89756d..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.ksh +++ /dev/null @@ -1,541 +0,0 @@ -#!/bin/ksh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8.2: Jerome Pioux - Benoit Pelletier -# -# Modifications for 4.8.3 -# ----------------------- -# Jerome - 10/17/2006 -# - Make this bash script to work for ksh. ie: -# (first line may need to be altered on some sites)... -# * change all with -# * Add a prefix (Do) in the start,stop,kill,status function names -# * Other modifications are flagged as Jerome - 10/17/2006 in the code -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Status|Start|Stop|Kill JONAS cluster node(s) -# Usage: cl [-n ] [status] | < [-f] kill | [-d] start | stop>" - -# If XWINDOWS=yes or YES exists in the user env., then use -win on startup -XWINDOWS=${XWINDOWS:-no} - -# Default values -JCL_NUMBER_OF_NODES=${JCL_NUMBER_OF_NODES:-40} -JCL_BASE_PREFIX=${JCL_BASE_PREFIX:-$JCL_CLUSTER_DAEMON_DIR/jb} -JCL_DOMAIN_NAME=${JCL_DOMAIN_NAME:-sampleClusterDomain} -JCL_NODE_NAME_PREFIX=${JCL_NODE_NAME_PREFIX:-node} -JCL_CLUSTER_DAEMON_DIR=${JCL_CLUSTER_DAEMON_DIR:-cd} -JCL_DB_DIR=${JCL_DB_DIR:-db} -JCL_DB_NAME=${JCL_DB_NAME:-db} -JCL_MASTER_DIR=${JCL_MASTER_DIR:-master} -JCL_MASTER_NAME=${JCL_MASTER_NAME:-master} - -# ------------------------------------------ -# NO NEED TO MODIFY ANYTHING BELOW THIS LINE -# ------------------------------------------ -JCL_BASE_DEBUG_PORT=${JCL_BASE_DEBUG_PORT:-414} - -# Delay in seconds to apply between nodes startup/shutdown -DELAY1_AFTER_NODE_START=20 -DELAY2_AFTER_NODE_START=3 -DELAY_BETWEEN_NODE_STOP=1 - -CLUSTER="" -jonasbase="" -typeset -i nnodes=0 -typeset -i wholeCluster=0 -osname=`uname -s` - - -# ------ -# ATEXIT -# ------ -atexit() -{ - printf "\n" -} - -# ----- -# USAGE -# ----- -usage() -{ - printf "\n" - printf "usage: $(basename $0) [ [-n ] [status]] | < [-f] kill | [-d] start | stop > ]\n" - printf "\n" - printf " With node_id: clusterd (or cd), $JCL_MASTER_NAME (or ms), $JCL_DB_NAME \n" - printf " With node_number: node number of JOnAS instances which corresponds to the suffix of the node name\n" - printf " * Form1: Multiple nodes can be specified between commas (no space)\n" - printf " * Form2: Range(s) can be entered using a dash between node numbers (no space)\n" - printf " * Any combination between form1 and form2 is allowed\n" - printf " Ex: -n $JCL_DB_NAME,1-3 applies to the $JCL_DB_NAME node and nodes 1,2 and 3\n" - printf " Notes:\n" - printf " * Do not specify -n or use -nall to address all nodes in the cluster\n" - printf " * A node number for your cluster must be between 1 and $JCL_NUMBER_OF_NODES\n" - printf "\n" - printf " Use \"export XWINDOWS=yes\" if you want to start the JVMs in dedicated xterms\n"; - printf "\n" - exit 1 -} - -# --------- -# DOPADDING -# --------- -DoPadding() -{ - # Use to align fields on the screen - typeset -i m1=$1 - typeset -i m2=$2 - typeset -i p=m2-m1 - - typeset -i i=1 - while [[ $i -le $p ]]; do - printf " " - i=i+1 - done - printf " " - return -} - -# ------------ -# SETJONASBASE -# ------------ -SetJonasBase() -{ - # Do not add any echo or printf in this routine - # besides the one before the return - case $1 in - clusterd) - base=$JCL_CLUSTER_DAEMON_DIR - ;; - $JCL_MASTER_NAME) - base=$JCL_MASTER_DIR - ;; - $JCL_DB_NAME) - base=$JCL_DB_DIR - ;; - *) - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#JCL_NODE_NAME_PREFIX} - #base=$JCL_BASE_PREFIX${node:$l} - base=$JCL_BASE_PREFIX${node#*$JCL_NODE_NAME_PREFIX} - ;; - esac - echo $base - return -} - -# ---------- -# SETCLUSTER -# ---------- -SetCluster() -{ -str=${1:-all} -typeset -i n=1 - -# --- All nodes -# We are in control so order nodes "startup-ready" -if [[ $str = 0 || $str = all ]]; then - wholeCluster=1 - cluster="clusterd $JCL_DB_NAME $JCL_MASTER_NAME" - while [[ $n -le $JCL_NUMBER_OF_NODES ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$n" - n=n+1 - done - CLUSTER=${cluster#\ *} - return -fi - -# --- Partial nodes list -# Respect order chosen by user -typeset -i err=0 -typeset -i numnode -OLDIFS=$IFS - -# For nodes between commas -IFS=, -for substr in $str; do - n="$(expr $substr : '.*-')" - - # No dash-formed node - if [[ $n -eq 0 ]]; then - # Non numeric node - if ( echo "$substr" | grep -q [^[:digit:]] ); then - # Abbrev. - [[ $substr = cd ]] && substr=clusterd - [[ $substr = ms ]] && substr=$JCL_MASTER_NAME - if [[ $substr != clusterd && - $substr != $JCL_MASTER_NAME && - $substr != $JCL_DB_NAME ]]; then - err=1 - fi - cluster="$cluster $substr" - # Numeric - else - numnode=$substr - # numnode must be less then JCL_NUMBER_OF_NODES - [[ $numnode -gt $JCL_NUMBER_OF_NODES ]] && err=1 - cluster="$cluster $JCL_NODE_NAME_PREFIX$substr" - fi - - # dash-formed node - else - n1=${substr%%-*} - n2=${substr##*-} - # Both dash-formed nodes must be numeric - if ( echo "$n1" | grep -q [^[:digit:]] || - echo "$n2" | grep -q [^[:digit:]] ); then - err=1 - else - typeset -i i=$n1 && typeset -i imax=$n2 - # First dash-formed node must be less or equal the second - # which in turn must be less then JCL_NUMBER_OF_NODES - [[ $i -gt $imax || $imax -gt $JCL_NUMBER_OF_NODES ]] && err=1 - while [[ $i -le $imax ]]; do - cluster="$cluster $JCL_NODE_NAME_PREFIX$i" - i=i+1 - done - fi - fi -done -IFS=$OLDIFS - -# Remove heading space if any -cluster=${cluster#\ *} - -# Raise error on duplicates -if [[ $err -eq 0 ]]; then - for node1 in $cluster; do - n=0 - for node2 in $cluster; do - [[ $node1 = $node2 ]] && n=n+1 - done - [[ $n -gt 1 ]] && err=1 && break - done -fi - -# Error - empty cluster -[[ $err -eq 1 ]] && cluster="" -CLUSTER=$cluster -return -} - -# --------------- -# CLUSTER DAEMON -# --------------- -ClusterDaemon() -{ - case ${1:-na} in - start) - printf "\n\n*** Starting JOnAS cluster daemon ... \n" - # Jerome - 10/17/2006 - Change regex below for ksh support - #if [[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]]; then - if [[ $XWINDOWS = [Yy][Ee][Ss] ]]; then - xterm -title $HOSTNAME:clusterd -geometry 110x16 -sb -e jclusterd start & - else - jclusterd start & - fi - sleep $DELAY2_AFTER_NODE_START - ;; - - stop) - echo -e "\n\n*** Stopping JOnAS cluster daemon ..." - jclusterd stop - sleep $DELAY_BETWEEN_NODE_STOP - ;; - esac - return -} - -# ------- -# SOSTART -# ------- -Dostart() -{ - typeset -i delay - typeset -i n=1 - - # Jerome - 10/17/2006 - Change regex below for ksh support - #[[ $XWINDOWS =~ '[Yy][Ee][Ss]' ]] && WIN="-win" || WIN="" - [[ $XWINDOWS = [Yy][Ee][Ss] ]] && WIN="-win" || WIN="" - - # Startup cluster; If we are in control of the whole cluster, the nodes - # are already in the correct order for startup - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - DBG="" - - # Set debug and startup delay - case $node in - clusterd) - ClusterDaemon start - continue - ;; - - $JCL_MASTER_NAME | $JCL_DB_NODE) - delay=$DELAY1_AFTER_NODE_START - ;; - - *) - delay=$DELAY2_AFTER_NODE_START - # Jerome - 10/17/2006 - char pos in string doesn't work in ksh - #typeset -i l=${#node} - #[[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node:$l}" - [[ $DEBUG = true ]] && DBG="-debug -p $JCL_BASE_DEBUG_PORT${node#*$JCL_NODE_NAME_PREFIX}" - ;; - esac - - # Save and clean up logs - rm -rf $JONAS_BASE/logs/old/* - mkdir -p $JONAS_BASE/logs/old - mv $JONAS_BASE/logs/* $JONAS_BASE/logs/old 2>/dev/null - - cmd="jonas start $WIN $DBG -n $node -Ddomain.name=$JCL_DOMAIN_NAME" - printf "\n\n*** Starting JOnAS $node instance ... \n($cmd)\n" - $cmd - - # Wait delay seconds between nodes startup - if [[ $n -lt $nnodes && $WIN = "-win" ]]; then - printf "\n\tWaiting ${delay}s before starting next node ..." - sleep $delay - fi - n=n+1 - done - return -} - -# ------ -# DOSTOP -# ------ -Dostop() -{ - typeset -i delay=$DELAY_BETWEEN_NODE_STOP - - # Stop cluster; If we are in control of the whole cluster, the nodes - # are in the correct order for startup which is the reverse order of - # how we would like to stop them; so let's build a "reverse" cluster - if [[ $wholeCluster -eq 1 ]]; then - for node in $CLUSTER; do - cluster2="$node $cluster2" - done - CLUSTER=$cluster2 - fi - - # Stop cluster - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - export JONAS_BASE=$jonasbase - export CATALINA_BASE=$JONAS_BASE - - if [[ $node = clusterd ]]; then - ClusterDaemon stop - continue - fi - - cmd="jonas stop -n $node" - printf "\n\n*** Stopping JOnAS $node instance ...\n($cmd)\n" - $cmd - - sleep $delay - done - return -} - -# ------ -# DOKILL -# ------ -Dokill() -{ - # Kill cluster - for node in $CLUSTER; do - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - - if [[ ! -z $pid ]]; then - cmd="/bin/kill -$force $pid" - printf "\n*** Killing JOnAS $node instance ...\n($cmd)\n" - $cmd - fi - done - return -} - -# -------- -# DOSTATUS -# -------- -Dostatus() -{ - typeset -i l - typeset -i lnode - typeset -i ljonasbase - typeset -i maxlnode=0 - typeset -i maxljonasbase=0 - - # Get longest strings length - # (to use in field alignment for display below) - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - [[ $lnode -gt $maxlnode ]] && maxlnode=$lnode - [[ $ljonasbase -gt $maxljonasbase ]] && maxljonasbase=$ljonasbase - done - - printf "\n" - - # Display status - for node in $CLUSTER; do - jonasbase=$(SetJonasBase $node) - - lnode=${#node} - ljonasbase=${#jonasbase} - - printf " node=%-s" $node - DoPadding $lnode $maxlnode - - printf "base=%-s" $jonasbase - DoPadding $ljonasbase $maxljonasbase - - printf "%0.s-> " - - if [[ $node = clusterd ]]; then - strToMatch=ClusterDaemon - else - strToMatch=Djonas.name=$node - fi - - # flegare+vma - little adaptation to make it run under solaris: - # this ps does not truncate its output to 80 chars but does not accept - # the '-o' param - if [[ $osname = "SunOS" ]]; then - pid=$(/usr/ucb/ps aww | grep $strToMatch | grep -v grep | cut -d' ' -f2) - else - # Jerome - 10/17/2006 - Make ps formatting variables to please AIX and LINUX - proc=$(ps -$psfmt "%p|%a" | grep Djonas.name=$node | grep -v grep | sed -e 's/ *//g') - # Jerome - 10/17/2006 - The pipe below must be protected in ksh - pid=${proc%%\|*} - fi - - if [[ ! -z $pid ]]; then - printf "running [$pid]\n" - else - printf "not running\n" - fi - done - return -} - -# ----- -# MAIN -# ----- -trap "atexit" exit - -# Jerome - 10/17/2006 -# On AIX, the ww is not supported (and not needed) -if [[ $(uname -s) = AIX ]]; then - XTERM=aixterm - psfmt=eo -else - XTERM=xterm - psfmt=ewwo -fi - -typeset -i n -typeset -i force=15 -debug=false - -# Show stopper -if [[ ! -n $JONAS_ROOT ]]; then - printf "$0: JONAS_ROOT is not defined\n" - exit 2 -fi -if ( ! echo $PATH | grep $JONAS_ROOT/bin >/dev/null 2>&1 ) then - printf "$0: JONAS_ROOT/bin is not in your PATH\n" - exit 3 -fi - -# Read inputs -if [[ $# -ne 0 ]]; then - # linux/bash help way - [[ "$1" = --help ]] && usage - - while getopts ?fhn:d c - do - case $c in - # Nodes - n) - node=$OPTARG - ;; - f) - force=9 - ;; - d) - debug=true - ;; - *) - usage - ;; - esac - done - shift `expr $OPTIND - 1` - action="$@" -fi - -# Define the cluster -SetCluster $node -if [[ -z $CLUSTER ]]; then - printf "$0: illegal -n parameters\n" - usage -else - # Remember the number of nodes in the cluster - for node in $CLUSTER; do - nnodes=nnodes+1 - done -fi - -# Do the action -[[ "$action" = "" ]] && action=status -case "$action" in - start|stop|kill|status) - Do$action - ;; - *) - usage - ;; -esac -exit 0 - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.sh b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.sh deleted file mode 100755 index 5b64827987..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jcl.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s) 4.8: Jerome Pioux -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# jcl.ksh|bash launcher script -# Jerome - -# Recup jcl scripts location -if [ -L $0 ]; then - JCL_DIR=`dirname $(ls -l "$0" |sed "s/^.*-> //")` -else - JCL_DIR=`dirname $0` -fi - -# Check what shell is available (priority to bash) -if [ -x /bin/bash ]; then - shell=bash -elif [ -x /bin/ksh ]; then - shell=ksh -else - echo "Error: Could not find either /bin/bash or /bin/ksh" - exit 2 -fi - -# Setup appropriate script -JCL_SCP=$JCL_DIR/jcl.$shell - -# Should never see this if the install did its job -if [ ! -x $JCL_SCP ]; then - echo "Error: Could not find or execute $JCL_SCP" - exit 3 -fi - -# Runit -$JCL_SCP $* -exit 0 - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas deleted file mode 100644 index 0d56a07d60..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas +++ /dev/null @@ -1,414 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): Adriana Danes : -# - Change /config en /conf -# - Use JONAS_BASE -# Florent Benoit & Ludovic Bert -# eyindanga -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -cygwin=false; -case "`uname`" in - CYGWIN*) cygwin=true ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "JONAS_ROOT" ] && - JONAS_ROOT=`cygpath --unix "$JONAS_ROOT"` - [ -n "JONAS_BASE" ] && - JONAS_BASE=`cygpath --unix "$JONAS_BASE"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath -m -s "$JAVA_HOME"` -fi - -# ----------------------------------------------------------------------- -# Compute JONAS_ROOT in case it has not been set. -# ----------------------------------------------------------------------- -if [ -z "$JONAS_ROOT" ]; then - savewd=`pwd` - cd `dirname "$0"` - zdir=`pwd` - cd "$savewd" - zfqn=$zdir/`basename "$0"` - JONAS_ROOT=`dirname "$zdir"` -## echo JONAS_ROOT is set to "$JONAS_ROOT" - export JONAS_ROOT -fi - - -# Check if $JONAS_ROOT is set. -if [ ! -f "$JONAS_ROOT"/bin/setenv ]; then - echo "Please set the JONAS_ROOT variable." - exit -fi - -# Set CLASSPATH and JONAS_BASE -. "$JONAS_ROOT"/bin/setenv - -# Display banner (if any) -if [ -f "$JONAS_BASE"/conf/banner.txt ]; then - cat "$JONAS_BASE"/conf/banner.txt -fi - -# Set path for JOnAS bootstrap libraries -LIB_BOOTSTRAP_PATH="$JONAS_ROOT"/lib/bootstrap - -# Update JONAS_CLASSPATH -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-launcher.jar" -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-commands.jar" -JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS"$LIB_BOOTSTRAP_PATH/jonas-version.jar" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JONAS_ROOT" ] && - JONAS_ROOT=`cygpath --path --windows "$JONAS_ROOT"` - [ -n "$JONAS_BASE" ] && - JONAS_BASE=`cygpath --path --windows "$JONAS_BASE"` -fi - -JONAS_ROOT_OPTS=-Djonas.root="$JONAS_ROOT" -JONAS_BASE_OPTS=-Djonas.base="$JONAS_BASE" -JONAS_SECURITYPOLICY_OPTS=-Djava.security.policy="$JONAS_BASE"/conf/java.policy -JONAS_SECURITYAUTH_OPTS=-Djava.security.auth.login.config="$JONAS_BASE"/conf/jaas.config -JONAS_ENDORSEDDIRS_OPTS=-Djava.endorsed.dirs="$JONAS_ROOT"/lib/endorsed - -JONAS_OPTS="\ - -Dipojo.log.level=ERROR \ - -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB \ - -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton \ - -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer \ - -Dcom.sun.CORBA.ORBDynamicStubFactoryFactoryClass=com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl \ - -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory \ - -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl \ - -Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl \ - -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl \ - " - - -# Most of the ORB and naming properties are not usually changed by the user !! Should be in a class. - -# --------------------------------------------- -# Get arguments -# --------------------------------------------- -ARGS= -MODE= -JONAS_NAME= -PINGTIMEOUT= -PINGSTATE= -HEADLESS="-Djava.awt.headless=true" -START_OPTS= -PINGTIMEOUT_OPT= -PINGSTATE_OPT= -WHERE=background -FORCE_FOREGROUND=false -ADMIN_CLASS=org.ow2.jonas.commands.admin.ClientAdmin -USERNAME= -PASSWORD= -while [ "$#" -gt 0 ] - do case "$1" in - start) - MODE=start - ;; - halt) - echo "[DEPRECATED] Please use stop argument instead of halt" - MODE=stop - PINGSTATE=j2ee.state.stopped - ;; - stop) - MODE=stop - PINGSTATE=j2ee.state.stopped - ;; - admin) - MODE=admin - FORCE_FOREGROUND=true - ;; - version) - MODE=version - FORCE_FOREGROUND=true - ;; - check) - MODE=check - FORCE_FOREGROUND=true - ;; - -standby) - ARGS="$ARGS -standby" - if [ "$MODE" = "stop" ]; then - FORCE_FOREGROUND=false - fi - ;; - -running) - # Implicit argument for the 'start' argument - ;; - -halt) - # Implicit argument for the 'stop' argument - ;; - -cp) - PARAMS="$PARAMS $1" - shift - JONAS_CLASSPATH="$JONAS_CLASSPATH"$SPS$1 - ;; - -debug) - PARAMS="$PARAMS $1" - shift - # $1=-p - if [ "$1" != "-p" ]; then - echo "-debug mode need a following \"-p \"" - exit 1 - fi - shift - JONAS_DEBUG_PORT=$1 - JONAS_DEBUG_SUSPEND=n - if [ "$2" = "-s" ]; then - shift - shift - JONAS_DEBUG_SUSPEND=$1 - fi - echo "JOnAS Debug Info :" - echo " listening on port : $JONAS_DEBUG_PORT" - echo " suspend mode : $JONAS_DEBUG_SUSPEND" - JONAS_DEBUG_OPTS=" -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=$JONAS_DEBUG_PORT,suspend=$JONAS_DEBUG_SUSPEND" - ;; - -fg) - WHERE=foreground - ;; - -bg) - WHERE=background - ;; - -gui) - echo "Start Felix GUI with JOnAS." - START_OPTS="$START_OPTS -Djonas.felix.gui.enabled=true" - HEADLESS="" - ;; - -tui) - echo "Start Felix TUI with JOnAS." - START_OPTS="$START_OPTS -Djonas.felix.tui.enabled=true" - FORCE_FOREGROUND=true - ;; - -win) - WHERE=window - ;; - -nojit) - JONAS_OPTS="$JONAS_OPTS -Djava.compiler=NONE" - START_OPTS="$START_OPTS -Djava.compiler=NONE" - ;; - -dev) - START_OPTS="$START_OPTS -Djonas.developer=true" - ;; - -failStartOnError) - JONAS_OPTS="$START_OPTS -Djonas.start.nofail=true" - ;; - -clean) - echo "Clean Felix cache before starting JOnAS." - START_OPTS="$START_OPTS -Djonas.cache.clean=true" - ;; - -n) - PARAMS="$PARAMS $1" - shift - JONAS_NAME=$1 - ;; - -timeout) - PARAMS="$PARAMS $1" - shift - PINGTIMEOUT=$1 - ;; - -state) - PARAMS="$PARAMS $1" - shift - PINGSTATE=$1 - ;; - -D*) - JONAS_OPTS="$JONAS_OPTS $1" - START_OPTS="$START_OPTS $1" - ;; - -X*) - JAVA_OPTS="$JAVA_OPTS $1" - ;; - -target) - if [ "$MODE" = "start" ]; then - ARGS="$ARGS -start" - fi - if [ "$MODE" = "stop" ]; then - ARGS="$ARGS -stop" - fi - MODE=admin - ARGS="$ARGS -target" - ;; - -username) - PARAMS="$PARAMS $1" - shift - USERNAME="-username $1" - ;; - -password) - PARAMS="$PARAMS $1" - shift - PASSWORD="-password $1" - ;; - *) - # All other args are passed "as is" to the java program - ARGS="$ARGS $1" - ;; - esac - if [ "$1" != "-win" ]; then - PARAMS="$PARAMS $1" - fi - shift -done - -# --------------------------------------------- -# Check args -# --------------------------------------------- -case "$MODE" in - start) - CLASS_TO_RUN="$ADMIN_CLASS -start" - ;; - stop) - CLASS_TO_RUN="$ADMIN_CLASS -stop" - ;; - admin) - CLASS_TO_RUN=$ADMIN_CLASS - ;; - version) - CLASS_TO_RUN=org.ow2.jonas.Version - ;; - check) - CLASS_TO_RUN=org.ow2.jonas.commands.check.CheckEnv - ;; - *) - # Usage - # Will be displayed if the user type an unrecognized command - echo "Unrecognized command : '$*'" - echo "Usage: $0 start | stop | admin | version | check" - echo "Options:" - echo " for 'start': [-fg] [-bg] [-win] [-n] [-standby] [-debug] [-gui] [-tui] [-dev] [-clean] [-nojit]" - echo " -fg Launch JOnAS in foreground (Only applicable for 'start')." - echo " -bg Launch JOnAS in background (Only applicable for 'start')." - echo " -win Launch JOnAS in a separate window (Only applicable for 'start')." - echo " -n Specify the JOnAS instance name." - echo " -standby Allow to reach the STANDBY state (Only applicable for 'start' and 'stop')." - echo " -debug -p [-s ] Debug the JOnAS instance." - echo " -gui Launch JOnAS with the Apache Felix GUI (Only applicable for 'start')." - echo " -tui Launch JOnAS with the Apache Felix Shell" - echo " (allow to perform OSGi operations on the framework)." - echo " (Only applicable for 'start')" - echo " -dev Use M2 registry for bundles (for JOnAS developers)." - echo " -failStartOnError Make the server startup fail (i.e., stop automatically) if deployment of any deployable fails." - echo " -clean Clean Felix cache before starting JOnAS." - echo " -nojit Disable JIT." - echo " for '*': [-cp] [-n] [-timeout] [-target] [-D*]" - echo " -cp Additional CLASSPATH entries (to be used with care)." - echo " -timeout Specify a new connection timeout." - echo " -target [options] Perform remote administration tasks." - echo " -Dname=value Add JVM properties." - exit 1 - ;; -esac - -# --------------------------------------------- -# Print out JONAS_BASE -# --------------------------------------------- -case "$MODE" in - start|check) - echo "JONAS_BASE is set to" $JONAS_BASE - ;; -esac - -# --------------------------------------------- -# Add RMI Annotation -# --------------------------------------------- -#if [ -z "$ANNOTATE" ]; then -# JONAS_OPTS="$JONAS_OPTS \ -# -Djava.rmi.server.RMIClassLoaderSpi=org.ow2.jonas.lib.bootstrap.RemoteClassLoaderSpi" -#fi - -# --------------------------------------------- -# Set jonas server name -# --------------------------------------------- -if [ ! -z "$JONAS_NAME" ]; then - JONAS_OPTS="$JONAS_OPTS -Djonas.name=$JONAS_NAME " - START_OPTS="$START_OPTS -Djonas.name=$JONAS_NAME " -fi - -# --------------------------------------------- -# Set jonas timeout for ping -# --------------------------------------------- -if [ ! -z "$PINGTIMEOUT" ]; then - PINGTIMEOUT_OPT="-timeout $PINGTIMEOUT" -fi - -# --------------------------------------------- -# Set jonas state for ping -# --------------------------------------------- -if [ ! -z "$PINGSTATE" ]; then - PINGSTATE_OPT="-state $PINGSTATE" -fi - -# Add Headless if needed -START_OPTS="$START_OPTS $HEADLESS" - -# Force foreground mode -if [ "$FORCE_FOREGROUND" = true ]; then - WHERE=foreground -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JONAS_CLASSPATH" ] && - JONAS_CLASSPATH=`cygpath --path --windows "$JONAS_CLASSPATH"` -fi - - -# --------------------------------------------- -# Run java command -# --------------------------------------------- -if [ "$MODE" = "start" ] -then - case "$WHERE" in - window) - xterm -title $HOSTNAME:$JONAS_NAME -geometry 110x16 -sb -e $0 $PARAMS -fg & - ;; - foreground) - # Start JOnAS in the foreground - exec $JAVA $JAVA_OPTS $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" $JONAS_OPTS -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD - ;; - *) - # Start JOnAS in the background - $JAVA $JAVA_OPTS $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD & - - # Wait for JOnAS to actually start - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $ADMIN_CLASS -ping $PINGTIMEOUT_OPT $PINGSTATE_OPT $ARGS $USERNAME $PASSWORD - ;; - esac -elif [ "$MODE" = "stop" ] -then - # Send the JMX command for stopping JOnAS, in the background - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD & - - # Wait for JOnAS to actually stop - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $ADMIN_CLASS -ping $PINGTIMEOUT_OPT $PINGSTATE_OPT $ARGS $USERNAME $PASSWORD -else - # JOnAS admin or other similar command - $JAVA $START_OPTS $JONAS_OPTS "$JONAS_ROOT_OPTS" "$JONAS_BASE_OPTS" "$JONAS_SECURITYPOLICY_OPTS" "$JONAS_SECURITYAUTH_OPTS" "$JONAS_ENDORSEDDIRS_OPTS" -cp "$JONAS_CLASSPATH" $JONAS_DEBUG_OPTS $CLASS_TO_RUN $ARGS $PINGTIMEOUT_OPT $PINGSTATE_OPT $USERNAME $PASSWORD -fi diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas.bat b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas.bat deleted file mode 100755 index c18fe7e869..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonas.bat +++ /dev/null @@ -1,426 +0,0 @@ -@Echo Off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): Miroslav Halas -Rem Adriana Danes : -Rem - Change /config in /conf -Rem - Use JONAS_BASE -Rem Jerome Pioux: -Rem - Remove extra spaces in :start_jonas_bg after %JAVA% - was causing -Rem bug #306113 - happen only if the script is used from the tarball -Rem (UNIX format [LF]). As a side note, with 4.8.3, the script will -Rem be saved as DOS format [CRLF] inside SVN. -Rem eyindanga: -Rem - Start JOnAS on OSGi. -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -if ["%JONAS_ROOT%"]==[""] goto emptyroot -goto execute - -Rem %~dp0 is the directory in which this batch file is. JONAS_ROOT\bin in our case. -:emptyroot -pushd "%~dp0" -cd .. -@set JONAS_ROOT=%cd% -@echo JONAS_ROOT is set to %JONAS_ROOT% -popd - -Rem --------------------------------------------- -Rem set environment -Rem --------------------------------------------- -if ["%JONAS_ROOT%"]==[""] goto setroot - -:execute -call "%JONAS_ROOT%\bin\setenv.bat" - -Rem Display JOnAS banner (if any) -if not exist "%JONAS_BASE%\conf\banner.txt" goto no_banner -more "%JONAS_BASE%\conf\banner.txt" - -Rem Marker when no banner is available -:no_banner - -Rem Set path for JOnAS bootstrap libraries -set LIB_BOOTSTRAP_PATH=%JONAS_ROOT%\lib\bootstrap - -Rem Set JONAS_CLASSPATH -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-launcher.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-commands.jar -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%LIB_BOOTSTRAP_PATH%\jonas-version.jar - -Rem --------------------------------------------- -Rem set JONAS_OPTS -Rem --------------------------------------------- -Rem JAVA_HOME must be set since config_env.bat requires it for tools.jar -if ["%JAVA_HOME%"]==[""] goto setjava - -Rem JONAS_OPTS may be already partially initialized -set JONAS_OPTS=%JONAS_OPTS% -Djonas.root="%JONAS_ROOT%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.base="%JONAS_BASE%" -set JONAS_OPTS=%JONAS_OPTS% -Dipojo.log.level=ERROR -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.auth.login.config="%JONAS_BASE%\conf\jaas.config" -set JONAS_OPTS=%JONAS_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" -set JONAS_OPTS=%JONAS_OPTS% -Dcom.sun.CORBA.ORBDynamicStubFactoryFactoryClass=com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.SOAPFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.MetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl -set JONAS_OPTS=%JONAS_OPTS% -Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl - -Rem --------------------------------------------- -Rem Get args -Rem --------------------------------------------- - -if [%1]==[] goto no_arg - -set ARGS= -set MODE= -set JONASNAME= -set PINGTIMEOUT= -set PINGSTATE= -set ANNOTATE= -set WHERE=background -set HEADLESS=-Djava.awt.headless=true -set START_OPTS= -set FORCE_FOREGROUND=false -set ADMIN_CLASS=org.ow2.jonas.commands.admin.ClientAdmin -set USERNAME= -set PASSWORD= -:loop_on_args -set VALUE=%~1 -if [%1]==[start] goto start_arg -if [%1]==[stop] goto stop_arg -if [%1]==[halt] goto halt_arg -if [%1]==[admin] goto admin_arg -if [%1]==[version] goto version_arg -if [%1]==[check] goto check_arg -if [%1]==[ntservice] goto ntservice_arg -if [%1]==[-standby] goto standby_arg -if [%1]==[-running] goto next_arg -if [%1]==[-halt] goto next_arg -if [%1]==[-fg] goto fg_arg -if [%1]==[-bg] goto bg_arg -if [%1]==[-win] goto win_arg -if [%1]==[-n] goto n_arg -if [%1]==[-timeout] goto timeout_arg -if [%1]==[-state] goto state_arg -if [%1]==[-cfgsvc] goto cfgsvc_arg -if [%1]==[-cp] goto cp_arg -if [%1]==[-debug] goto debug_arg -if [%1]==[-target] goto target_arg -if [%1]==[-gui] goto gui_arg -if [%1]==[-tui] goto tui_arg -if [%1]==[-dev] goto dev_arg -if [%1]==[-failStartOnError] goto start_no_fail_arg -if [%1]==[-clean] goto clean_arg -if [%1]==[-username] goto username_arg -if [%1]==[-password] goto password_arg -if %VALUE:~0,2%==-D goto jonas_opts -if %VALUE:~0,2%==-X goto java_opts -set ARGS=%ARGS% %1 -goto next_arg - -Rem First arguments : start, stop, admin, version, check - -:start_arg -set MODE=start -set CLASS_TO_RUN=%ADMIN_CLASS% -start -goto next_arg - -:stop_arg -set MODE=stop -set CLASS_TO_RUN=%ADMIN_CLASS% -stop -set PINGSTATE=-state j2ee.state.stopped -goto next_arg - -:halt_arg -echo [DEPRECATED] Please use stop argument instead of halt -goto stop_arg - -:admin_arg -set MODE=admin -set CLASS_TO_RUN=%ADMIN_CLASS% -set FORCE_FOREGROUND=true -goto next_arg - -:version_arg -set MODE=version -set CLASS_TO_RUN=org.ow2.jonas.Version -set FORCE_FOREGROUND=true -goto next_arg - -:check_arg -set MODE=check -set CLASS_TO_RUN=org.ow2.jonas.commands.check.CheckEnv -set FORCE_FOREGROUND=true -goto next_arg - -Rem Take all arguments after ntservice and goto ntservice processing -:ntservice_arg -set MODE=ntservice -shift -set ARGS= -:nt_args -if [%1]==[] goto nt_args_done -set ARGS=%ARGS% %1 -shift -goto nt_args - -:nt_args_done -echo JONAS_BASE is set to %JONAS_BASE% -goto ntservice - -Rem Add -D System Properties -:jonas_opts -Set PROP=%~1 -shift -Set PROP=%PROP%=%1 -Set JONAS_OPTS=%JONAS_OPTS% %PROP% -Set START_OPTS=%START_OPTS% %PROP% -goto next_arg - -Rem Add -X System Properties -:java_opts -Set JAVA_OPTS=%JAVA_OPTS% %~1 -goto next_arg - -:standby_arg -set ARGS=%ARGS% -standby -if [%MODE%]==[stop] set FORCE_FOREGROUND=false -goto next_arg - -:gui_arg -echo Start Felix GUI with JOnAS. -set START_OPTS=%START_OPTS% -Djonas.felix.gui.enabled=true -set HEADLESS= -goto next_arg - -:tui_arg -echo Start Felix TUI with JOnAS. -set START_OPTS=%START_OPTS% -Djonas.felix.tui.enabled=true -set FORCE_FOREGROUND=true -goto next_arg - -:dev_arg -echo JOnAS starts in developer mode. -set START_OPTS=%START_OPTS% -Djonas.developer=true -goto next_arg - -:start_no_fail_arg -echo JOnAS starts in fail start on error. -set START_OPTS=%START_OPTS% -Djonas.start.nofail=true -goto next_arg - -:clean_arg -echo Clean Felix cache before starting JOnAS. -set START_OPTS=%START_OPTS% -Djonas.cache.clean=true -goto next_arg - -:fg_arg -set WHERE=foreground -goto next_arg - -:bg_arg -set WHERE=background -goto next_arg - -:win_arg -set WHERE=window -goto next_arg - -:n_arg -shift -set JONASNAME=%1 -set JONAS_OPTS=%JONAS_OPTS% -Djonas.name="%JONASNAME%" -set START_OPTS=%START_OPTS% -Djonas.name="%JONASNAME%" -goto next_arg - -:timeout_arg -shift -set PINGTIMEOUT=-timeout %1 -goto next_arg - -:state_arg -shift -set PINGSTATE=-state %1 -goto next_arg - -:cfgsvc_arg -shift -if [%1]==[] goto cfgsvc_usage -set WHERE=cfgsvc -set WRAPPER_CONF=%1 -goto start_arg - -:cp_arg -shift -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%~1 -goto next_arg - -:debug_arg -shift -if not [%1]==[-p] goto debug_usage -shift -set JONAS_DEBUG_PORT=%1 -set JONAS_DEBUG_SUSPEND=n -if not [%2]==[-s] goto set_debug_opts -shift -shift -set JONAS_DEBUG_SUSPEND=%1 - -:set_debug_opts -echo JOnAS Debug Info : -echo listening on port : %JONAS_DEBUG_PORT% -echo suspend mode : %JONAS_DEBUG_SUSPEND% -set JONAS_DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=%JONAS_DEBUG_PORT%,suspend=%JONAS_DEBUG_SUSPEND% -goto next_arg - -:target_arg -if [%MODE%]==[start] set ARGS=%ARGS% -start -if [%MODE%]==[stop] set ARGS=%ARGS% -stop -set MODE=admin -set ARGS=%ARGS% -target -goto next_arg - -:username_arg -shift -set USERNAME=-username %1 -goto next_arg - -:password_arg -shift -set PASSWORD=-password %1 -goto next_arg - -:next_arg -if not [%1]==[-win] set PARAMS=%PARAMS% %1 -shift -if not [%1]==[] goto loop_on_args - -if [%MODE%]==[] goto no_mode - -Rem --------------------------------------------- -Rem Remove RMI Annotation -Rem --------------------------------------------- -Rem set JONAS_OPTS=%JONAS_OPTS% -Djava.rmi.server.RMIClassLoaderSpi=org.ow2.jonas.lib.bootstrap.RemoteClassLoaderSpi - -Rem Add Headless if needed -set START_OPTS=%START_OPTS% %HEADLESS% - -Rem Print out JONAS_BASE -if [%MODE%]==[start] echo JONAS_BASE is set to %JONAS_BASE% -if [%MODE%]==[check] echo JONAS_BASE is set to %JONAS_BASE% - -if %FORCE_FOREGROUND%==true set WHERE=foreground - -Rem --------------------------------------------- -Rem Run java command -Rem --------------------------------------------- - -if [%MODE%]==[stop] goto stop -if not [%MODE%]==[start] goto admin -if %WHERE%==cfgsvc goto cfgsvc_mode -if %WHERE%==window goto window -if %WHERE%==foreground goto foreground -if %WHERE%==background goto background -goto :EOF - -:cfgsvc_mode -rem called by ANT create_windows_service -set JAVA_CMD=%JAVA% -classpath "%JONAS_CLASSPATH%" org.ow2.jonas.commands.wrapper.GenerateWrapperConf -%JAVA_CMD% -d ; -i 2 wrapper.java.classpath "%JONAS_CLASSPATH%" >>%WRAPPER_CONF% -%JAVA_CMD% -i 2 wrapper.java.additional %JAVA_OPTS% %JONAS_OPTS% >>%WRAPPER_CONF% -echo wrapper.app.parameter.10=%JONASNAME% >>%WRAPPER_CONF% -echo wrapper.ntservice.name=JOnAS_%JONASNAME% >>%WRAPPER_CONF% -echo wrapper.ntservice.displayname=JOnAS (%JONASNAME%) >>%WRAPPER_CONF% -goto :EOF - -:foreground -REM start JOnAS in foreground mode -%JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:background -REM start JOnAS in background mode -start /B "JOnAS" %JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %ADMIN_CLASS% -ping %PINGTIMEOUT% %PINGSTATE% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:stop -REM stop JOnAS and wait for it to stop -start /B "JOnAS" %JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %PINGTIMEOUT% %PINGSTATE% %USERNAME% %PASSWORD% -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %ADMIN_CLASS% -ping %PINGTIMEOUT% %PINGSTATE% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:window -set WINDOW_TITLE="%HOSTNAME%:%JONASNAME%" -if %WINDOW_TITLE%==":" set WINDOW_TITLE="JOnAS Server" -start %WINDOW_TITLE% %JAVA% %JAVA_OPTS% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %USERNAME% %PASSWORD% -goto :EOF - -:admin -%JAVA% %START_OPTS% %JONAS_OPTS% -cp "%JONAS_CLASSPATH%" %JONAS_DEBUG_OPTS% %CLASS_TO_RUN% %ARGS% %PINGTIMEOUT% %PINGSTATE% %USERNAME% %PASSWORD% -goto :EOF - -:ntservice -"%JONAS_ROOT%\bin\jonasnt" %ARGS% -goto :EOF - -:setjava -echo JAVA_HOME not set. -goto :EOF - -:no_mode -echo No startup mode specified, specify start | stop | admin | version | check -goto usage - -:no_arg -echo No arguments specified. -goto usage - -:usage -echo jonas start | stop | admin | version | check| ntservice | -fg | -bg | -win | -n | -standby | -debug | -cfgsvc | -gui | -tui | -dev | -failStartOnError | -clean -echo Debug mode : jonas start -debug -p [-s ] -REM TODO: Add here explanation for the arguments -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto :EOF - -:cfgsvc_usage -echo -cfgsvc option requires filename for target wrapper.conf file -goto :EOF - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonasnt.bat b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonasnt.bat deleted file mode 100755 index cf4baa9d25..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/jonasnt.bat +++ /dev/null @@ -1,138 +0,0 @@ -@echo off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Copyright (c) 1999-2006 Tanuki Software Inc. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -if "%OS%"=="Windows_NT" goto nt -echo This script only works with NT-based versions of Windows. -goto :eof - -:nt -Rem check JONAS_ROOT -if ["%JONAS_ROOT%"]==[""] goto setJonasRoot - -Rem check JONAS_BASE -if ["%JONAS_BASE%"]==[""] goto setJonasBase - -Rem check WRAPPER_HOME -if ["%WRAPPER_HOME%"]==[""] goto setWrapperHome - -rem -rem Find the application home. -rem -set _WRAPPER_BIN=%WRAPPER_HOME%\bin\ -set _WRAPPER_BASE=wrapper -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-32.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-64.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -set _WRAPPER_EXE=%_WRAPPER_BIN%%_WRAPPER_BASE%.exe -if exist "%_WRAPPER_EXE%" goto jonasbase -echo Unable to locate a Wrapper executable using any of the following names: -echo %_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-32.exe -echo %_WRAPPER_BIN%%_WRAPPER_BASE%-windows-x86-64.exe -echo %_WRAPPER_BIN%%_WRAPPER_BASE%.exe -rem pause -goto :eof - -:jonasbase -rem Check that the JONAS_BASE is valid -if exist "%JONAS_BASE%\conf\jonas.properties" goto validate -echo The JONAS_BASE is not valid -rem pause -goto :eof - -:validate -rem Find the requested command. -for /F %%v in ('echo %1^|findstr "^console$ ^start$ ^stop$ ^restart$ ^status$ ^install$ ^uninstall"') do call :exec set COMMAND=%%v - -if "%COMMAND%" == "" ( - echo Usage: %0 { console : start : stop : restart : status : install : uninstall} - goto :eof -) else ( - shift -) - -set WRAPPER_CONF=%JONAS_BASE%\conf\wrapper.conf - -rem -rem Run the application. -rem At runtime, the current directory will be that of wrapper.exe -rem -:run -call :%COMMAND% -rem if errorlevel 1 pause -goto :eof - -:console -"%_WRAPPER_EXE%" -c "%WRAPPER_CONF%" -goto :eof - -:start -"%_WRAPPER_EXE%" -t "%WRAPPER_CONF%" -goto :eof - -:stop -"%_WRAPPER_EXE%" -p "%WRAPPER_CONF%" -goto :eof - -:status -"%_WRAPPER_EXE%" -q "%WRAPPER_CONF%" -goto :eof - -:install -"%_WRAPPER_EXE%" -i "%WRAPPER_CONF%" -goto :eof - -:uninstall -"%_WRAPPER_EXE%" -r "%WRAPPER_CONF%" -goto :eof - -:console -"%_WRAPPER_EXE%" -c "%WRAPPER_CONF%" -goto :eof - -:restart -call :stop -call :start -goto :eof - -:exec -%* -goto :eof - -:setJonasRoot -echo JONAS_ROOT must be set. -goto :eof - -:setJonasBase -echo JONAS_BASE must be set. -goto :eof - -:setWrapperHome -echo WRAPPER_HOME must be set. -echo Please check your Tanuki Java Service wrapper installation. -goto :eof diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv deleted file mode 100644 index 9114f1e37d..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv +++ /dev/null @@ -1,138 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Check JONAS_ROOT is set. -# ----------------------------------------------------------------------- -if [ ! -d "$JONAS_ROOT"/repositories ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# ----------------------------------------------------------------------- -# Check JONAS_BASE is set. Set it to JONAS_ROOT if not set. -# ----------------------------------------------------------------------- -if [ -z "$JONAS_BASE" ] -then - JONAS_BASE=$JONAS_ROOT - export JONAS_BASE -fi - -# --------------------------- -# Resolve links -# --------------------------- - -# Do the same stuff than readlink -f but using standard sh commands -# On some Unix systems, readlink -f is not supported -readlink_f() { - # if $1 is a file remove the possible last / - dname=`dirname "$1"` - bname=`basename "$1"` - noslash="$dname"/"$bname" - - linktofile=`read_last_link "$noslash"` # `basename linktofile` is not a link - dna=`dirname "$linktofile"` - # res=the sure path (1 by 1 add no symb link) - res=`basename "$linktofile"` - - while ([ "$dna" != "/" ] && [ "$dna" != "." ]) # Finished if . or / (loop) - do - if [ -L "$dna" ] - then - dna=`read_last_link "$dna"` # last directory is not a link - fi - # basename $dna is not a symbolic link, we can add it to res - res=`basename "$dna"`/"$res" - dna=`dirname "$dna"` - done - if ([ "$dna" = "/" ] && [ "$res" != '/' ]) - then - res=/"$res"; - fi - D=`dirname "$res"` - B=`basename "$res"` - res="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B" - echo $res -} - -# ensure that the basename of result will not be a link -read_last_link() { - res="$1" - while [ -L "$res" ] - do - ls=`ls -ld "$res"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null - then # if absolute link (begin with /) - res="$link" - else # if relative link (not begin with /) - rel=`dirname "$res"` - res="$rel"/"$link" - fi - done - echo $res -} -JONAS_ROOT=`readlink_f "$JONAS_ROOT"` -JONAS_BASE=`readlink_f "$JONAS_BASE"` - - -# must be : for Unix, \; for CygWin on NT -SPS=: - -# ----------------------------------------------------------------------- -# JAVA setup -# We try to use first the java JVM in JAVA_HOME and if not found, -# we use the one found in the path. -# ----------------------------------------------------------------------- -if [ -z "$JAVA" ]; then - if [ -z "$JAVA_HOME" ] - then - JAVA=java - JAVAC=javac - else - JAVA=$JAVA_HOME/bin/java - JAVAC=$JAVA_HOME/bin/javac - fi - export JAVA JAVAC -fi - - -# You can specify additional options to give to the Java JVM in the -# JAVA_OPTS environment variable. -export JAVA_OPTS - -# ----------------------------------------------------------------------- -# Take always the JOnAS configuration files in $JONAS_BASE/conf -# So it must be before the $JONAS_CLASSPATH (if carol.properties is redefined elsewhere) -# ----------------------------------------------------------------------- -if [ "$JONAS_CLASSPATH" = "" ]; then - JONAS_CLASSPATH="$JONAS_BASE"/conf -else - JONAS_CLASSPATH="$JONAS_BASE"/conf$SPS$JONAS_CLASSPATH -fi - -export JONAS_CLASSPATH diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv.bat b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv.bat deleted file mode 100755 index 4f22b8d28c..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/bin/setenv.bat +++ /dev/null @@ -1,51 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): Miroslav Halas -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - - -Rem check JONAS_ROOT and JONAS_BASE -if ["%JONAS_ROOT%"]==[""] goto setroot -if ["%JONAS_BASE%"]==[""] set JONAS_BASE=%JONAS_ROOT% - -Rem ---------- -Rem JAVA setup -Rem ---------- -Rem We try to use first the java JVM in JAVA_HOME and if not found, -Rem we use the one found in the path. -Rem You can specify additional options to give to the Java JVM in the -Rem JAVA_OPTS environment variable. -Rem JAVA_HOME must be set since config_env.bat requires it for tools.jar -set JAVA="%JAVA_HOME%\bin\java.exe" -set JAVAC="%JAVA_HOME%\bin\javac.exe" -Rem For JOnAS configuration files (carol.properties, trace.properties, ...) -Rem must be before the CLASSPATH (if carol.properties is redefined elsewhere) -set JONAS_CLASSPATH=%JONAS_BASE%\conf;%JONAS_CLASSPATH% -goto :EOF - -:setroot -echo JONAS_ROOT must be set. -goto :EOF diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/banner.txt b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/banner.txt deleted file mode 100644 index b43cd9d14a..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/banner.txt +++ /dev/null @@ -1,3 +0,0 @@ - -OW2 JOnAS ${project.version} [ http://jonas.ow2.org / jonas@ow2.org ] - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/classloader-default-filtering.xml b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/classloader-default-filtering.xml deleted file mode 100644 index 2407a5c4cb..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/classloader-default-filtering.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - org.apache.commons.digester.* - org.springframework.* - - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.sh.include b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.sh.include deleted file mode 100644 index 2526da3a4c..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.sh.include +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -#set -xv -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Guillaume Sauthier -# -# --------------------------------------------------------------------------- -# $Id: env.sh.include 11267 2007-08-08 16:51:45Z sauthieg $ -# --------------------------------------------------------------------------- - -# Environment -# -------------------------------- -JONAS_ROOT=@JONAS_ROOT@ -export JONAS_ROOT -SERVER_NAME=jonas -export SERVER_NAME - -# Allow that script to be executed without hard-writing -# the JVM and Ant version to use -VAR_HOME_SET=@VAR_HOME_SET@ - -# Fix the JAVA_HOME value -if [ "$VAR_HOME_SET" = "true" ]; then -#JAVA_HOME=@JAVA_HOME@ -#export JAVA_HOME - echo -n -fi -# Fix the ANT_HOME value -if [ "$VAR_HOME_SET" = "true" ]; then -#ANT_HOME=@ANT_HOME@ -#export ANT_HOME - echo -n -fi - - -# JVM Memory options -# --------------------------------- -# example : 128m -INI_HEAP_SIZE="" -MAX_HEAP_SIZE="" -THREAD_STACK_SIZE="" - -[ "$INI_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xms"$INI_HEAP_SIZE -[ "$MAX_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xmx"$MAX_HEAP_SIZE -[ "$THREAD_STACK_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xss"$THREAD_STACK_SIZE - -# JVM Misc Options -# -------------------------------- -# Uncomment the following line -#JAVA_OPTS=$JAVA_OPTS" -Dyour.property=value" - -export JAVA_OPTS - -# Classpath -# -------------------------------- -if [ "$CLASSPATH" != "" ]; then - S="\033[1;31m" - E="\033[0m" - printf "${S}Warning : CLASSPATH should be empty with JOnAS !$E\n" - printf "Please use ${S}JONAS_BASE/lib/apps$E or ${S}JONAS_BASE/lib/commons$E ...\n" -fi -# You may add jars here, but this is not recommended -CLASSPATH=$CLASSPATH -export CLASSPATH - -# Script Debug -# -------------------------------- -if [ "$ENV_DEBUG" = "yes" ]; then - echo "* -------------------------------------------" - echo "* Returned by $0 :" - echo "* JONAS_ROOT = $JONAS_ROOT" - echo "* SERVER_NAME = $SERVER_NAME" - echo "* JAVA_HOME = $JAVA_HOME" - echo "* ANT_HOME = $ANT_HOME" - echo "* JAVA_OPTS = $JAVA_OPTS" - echo "* CLASSPATH = $CLASSPATH" - echo "* -------------------------------------------" -fi diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.start.sh.include b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.start.sh.include deleted file mode 100644 index 23b384e8a8..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/env.start.sh.include +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -#set -xv -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2006 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Guillaume Sauthier -# -# --------------------------------------------------------------------------- -# $Id: env.start.sh.include 11267 2007-08-08 16:51:45Z sauthieg $ -# --------------------------------------------------------------------------- - - -# JVM Memory options -# --------------------------------- -# example : 128m -INI_HEAP_SIZE="256m" -MAX_HEAP_SIZE="256m" -THREAD_STACK_SIZE="" - -[ "$INI_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xms"$INI_HEAP_SIZE -[ "$MAX_HEAP_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xmx"$MAX_HEAP_SIZE -[ "$THREAD_STACK_SIZE" != "" ] && JAVA_OPTS=$JAVA_OPTS" -Xss"$THREAD_STACK_SIZE - -# JVM Misc Options -# -------------------------------- -JAVA_OPTS=$JAVA_OPTS" -Djava.awt.headless=true" -export JAVA_OPTS - -# Classpath -# -------------------------------- -if [ "$CLASSPATH" != "" ]; then - S="\033[1;31m" - E="\033[0m" - printf "${S}Warning : CLASSPATH should be empty with JOnAS !$E\n" - printf "Please use ${S}JONAS_BASE/lib/apps$E or ${S}JONAS_BASE/lib/commons$E ...\n" -fi -# You may add jars here, but this is not recommended -CLASSPATH=$CLASSPATH -export CLASSPATH - -# Script Debug -# -------------------------------- -if [ "$ENV_DEBUG" = "yes" ]; then - echo "* -------------------------------------------" - echo "* Returned by $0 :" - echo "* JONAS_ROOT =$JONAS_ROOT" - echo "* SERVER_NAME =$SERVER_NAME" - echo "* JAVA_HOME =$JAVA_HOME" - echo "* ANT_HOME =$ANT_HOME" - echo "* JAVA_OPTS =$JAVA_OPTS" - echo "* CLASSPATH =$CLASSPATH" - echo "* -------------------------------------------" -fi diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/initial-repositories.xml b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/initial-repositories.xml deleted file mode 100644 index 0542744f7d..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/initial-repositories.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - maven2 - http://repo1.maven.org/maven2/ - - - maven2 - http://repository.ow2.org/nexus/content/repositories/releases/ - - - maven2 - http://repository.ow2.org/nexus/content/repositories/snapshots/ - - \ No newline at end of file diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/trace.properties b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/trace.properties deleted file mode 100644 index cec081e24e..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/trace.properties +++ /dev/null @@ -1,441 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# 2 handlers have been defined : tty (System.out) and logf (file) -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# A list of predefined loggers is given at the end of the file. -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG | FATAL | INHERIT -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# The switch attribute is used to log either on System.out or System.err -# depending of the level of the log. -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output Switch -handler.tty.pattern %d : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# mesonly : console handler without header -# ----------------------------------------------------------------------- -handler.mesonly.type Console -handler.mesonly.output Switch -handler.mesonly.pattern %m%n - -# ----------------------------------------------------------------------- -# logf : file handler -# ----------------------------------------------------------------------- -handler.logf.type File -handler.logf.output automatic -handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# wsdl : file handler -# ----------------------------------------------------------------------- -handler.wsdl.type File -handler.wsdl.output jonas_wsdls.log -handler.wsdl.pattern %d : %l : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# jmxHandler : jmx handler -# ----------------------------------------------------------------------- -#handler.jmxHandler.type jmx -#handler.jmxHandler.output Switch -#handler.jmxHandler.pattern %d : %l : %h : %O{1}.%M : %m%n - - -# ----------------------------------------------------------------------- -# logf : rolling file handler -# ----------------------------------------------------------------------- -#handler.logf.type RollingFile -#handler.logf.output jonas.log -#handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n -#handler.logf.fileNumber 2 -#handler.logf.maxSize 10000 - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty -logger.root.handler.1 logf -#logger.root.handler.2 jmxHandler - -logger.root.level INFO -logger.org.ow2.level INFO -logger.org.objectweb.level INFO - -#----------------------------------------------------------------------- -# JOnAS logger definitions -#----------------------------------------------------------------------- - -logger.org.ow2.jonas.admin.level INHERIT - -logger.org.ow2.jonas.bootstrap.level INHERIT - -logger.org.ow2.jonas.client.level INHERIT - -logger.org.ow2.jonas.cluster.daemon.level INHERIT - -logger.org.ow2.jonas.cmd.level INHERIT - -logger.org.ow2.jonas.cmi.level INHERIT - -logger.org.ow2.jonas.ha.level INHERIT - -logger.org.ow2.jonas.db.level INHERIT - -logger.org.ow2.jonas.dbm.level INHERIT -logger.org.ow2.jonas.dbm.con.level INHERIT -logger.org.ow2.jonas.dbm.ps.level INHERIT -logger.org.ow2.jonas.dbm.xa.level INHERIT - -logger.org.ow2.jonas.deployment.level INHERIT -logger.org.ow2.jonas.deployablemonitor.level INHERIT -logger.org.ow2.jonas.deployment.client.level INHERIT -logger.org.ow2.jonas.deployment.domain.level INHERIT -logger.org.ow2.jonas.deployment.ejb.level INHERIT -logger.org.ow2.jonas.deployment.ejb.digester.level FATAL - - - -logger.org.ow2.jonas.domain.management.level INHERIT - -# EJB 3 container -logger.org.ow2.easybeans.level INHERIT - -logger.org.ow2.jonas.ear.level INHERIT - -logger.org.ow2.jonas.ee.level INHERIT -logger.org.ow2.jonas.ee.jdbc.level INHERIT -logger.org.ow2.jonas.ee.jdbc.RA.level INHERIT -logger.org.ow2.jonas.ee.jdbc.sql.level INHERIT -logger.org.ow2.jonas.ee.jdbc.xa.level INHERIT - -logger.org.ow2.jonas.ejb.level INHERIT - -#logger.org.ow2.jonas.generators.handler.0 mesonly -#logger.org.ow2.jonas.generators.additivity false - -logger.org.ow2.jonas.generators.genbase.level INHERIT -logger.org.ow2.jonas.generators.genclientstub.level INHERIT -logger.org.ow2.jonas.generators.genic.level INHERIT -logger.org.ow2.jonas.generators.genic.velocity.level ERROR -logger.org.ow2.jonas.generators.wsgen.level INHERIT -logger.org.ow2.jonas.generators.wsgen.ews.level INHERIT - -logger.org.ow2.jonas.jca.level INHERIT -logger.org.ow2.jonas.jca.connection.level INHERIT -logger.org.ow2.jonas.jca.management.level INHERIT -logger.org.ow2.jonas.jca.pool.level INHERIT -logger.org.ow2.jonas.jca.process.level INHERIT -logger.org.ow2.jonas.jca.setters.level INHERIT - -logger.org.ow2.jonas.jmx.level INHERIT - -logger.org.ow2.jonas.jtm.level ERROR - -logger.org.ow2.jonas.lib.ejb21.level INHERIT -logger.org.ow2.jonas.lib.ejb21.coherence.level INHERIT -logger.org.ow2.jonas.lib.ejb21.context.level INHERIT -logger.org.ow2.jonas.lib.ejb21.dd.level INHERIT -logger.org.ow2.jonas.lib.ejb21.endpoint.level INHERIT -logger.org.ow2.jonas.lib.ejb21.factory.level INHERIT -logger.org.ow2.jonas.lib.ejb21.genclass.level INHERIT -logger.org.ow2.jonas.lib.ejb21.interp.level INHERIT -logger.org.ow2.jonas.lib.ejb21.mdb.level INHERIT -logger.org.ow2.jonas.lib.ejb21.mijorm.level INHERIT -logger.org.ow2.jonas.lib.ejb21.query.level INHERIT -logger.org.ow2.jonas.lib.ejb21.security.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ssfpool.level INHERIT -logger.org.ow2.jonas.lib.ejb21.swapper.level INHERIT -logger.org.ow2.jonas.lib.ejb21.synchro.level INHERIT -logger.org.ow2.jonas.lib.ejb21.thread.level INHERIT -logger.org.ow2.jonas.lib.ejb21.tx.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.interceptors.iiop.level INHERIT -logger.org.ow2.jonas.lib.ejb21.ha.interceptors.jrmp.level INHERIT - - -logger.org.ow2.jonas.lib.jms.level INHERIT - -logger.org.ow2.jonas.lib.naming.java.level INHERIT - -logger.org.ow2.jonas.lib.svc.level INHERIT - -logger.org.ow2.jonas.lib.timer.level INHERIT - -logger.org.ow2.jonas.lib.util.level INHERIT - -logger.org.ow2.jonas.lib.windows.level INHERIT - -logger.org.ow2.jonas.lib.work.level INHERIT - -logger.org.ow2.jonas.loader.level INHERIT - -logger.org.ow2.jonas.mail.level INHERIT - -logger.org.ow2.jonas.management.level INHERIT -logger.org.ow2.jonas.management.cluster.level INHERIT -logger.org.ow2.jonas.management.domain.level INHERIT -logger.org.ow2.jonas.management.event.level INHERIT -logger.org.ow2.jonas.management.j2eemanagement.level INHERIT -logger.org.ow2.jonas.management.j2eemanagement.event.level INHERIT - -logger.org.ow2.jonas.naming.level INHERIT - -logger.org.ow2.jonas.propagation.level INHERIT - -logger.org.ow2.jonas.publication.handler.0 wsdl -logger.org.ow2.jonas.publication.additivity false - -logger.org.ow2.jonas.registry.level INHERIT - -logger.org.ow2.jonas.security.level INHERIT -logger.org.ow2.jonas.security.csiv2.level INHERIT -logger.org.ow2.jonas.security.csiv2_details.level INHERIT -logger.org.ow2.jonas.security.jacc.level INHERIT -logger.org.ow2.jonas.security.ws.level INHERIT - -logger.org.ow2.jonas.server.level INHERIT - -logger.org.ow2.jonas.web.level INHERIT - -logger.org.ow2.jonas.webapp.jadmin.servlet.level INHERIT - -logger.org.ow2.jonas.work.level INHERIT - -logger.org.ow2.jonas.workcleaner.level INHERIT - -logger.org.ow2.jonas.ws.level INHERIT -logger.org.ow2.jonas.ws.wsdl.level INHERIT - -#----------- -# Hibernate -#----------- -logger.org.hibernate.cache.level ERROR -logger.org.hibernate.cfg.level ERROR -logger.org.hibernate.connection.level ERROR -logger.org.hibernate.dialect.level ERROR -logger.org.hibernate.ejb.level ERROR -logger.org.hibernate.impl.level ERROR -logger.org.hibernate.hql.ast.level ERROR -logger.org.hibernate.search.level ERROR -logger.org.hibernate.tool.hbm2ddl.level ERROR -logger.org.hibernate.transaction.level ERROR -logger.org.hibernate.validator.level ERROR - -#------- -# JOTM -#------- -logger.org.objectweb.jotm.level INFO -logger.org.objectweb.jotm.jta.level INHERIT -logger.org.objectweb.jotm.tm.level INHERIT -logger.org.objectweb.jotm.recovery.level INHERIT - -#------- -# MEJB -#------- -logger.org.ow2.jonas.ee.mejb.level INFO - -#------- -# CAROL -#------- -logger.org.ow2.carol.level INFO -logger.org.ow2.carol.rmi.level INHERIT -logger.org.ow2.carol.jndi.level INHERIT - -#------- -# JORM -#------- -logger.org.objectweb.jorm.level WARN -logger.org.objectweb.jorm.compiler.level INHERIT -logger.org.objectweb.jorm.xml2mi.level INHERIT -logger.org.objectweb.jorm.mi2xml.level INHERIT -logger.org.objectweb.jorm.metainfo.level INHERIT -logger.org.objectweb.jorm.generator.level INHERIT -logger.org.objectweb.jorm.generator.velocity.level ERROR -logger.org.objectweb.jorm.mapper.rdb.generator.level INHERIT - -#------- -# MEDOR -#------- -logger.org.objectweb.medor.level INHERIT -logger.org.objectweb.medor.optim.rule.level INHERIT -logger.org.objectweb.medor.optim.rewriter.level INHERIT -logger.org.objectweb.medor.eval.rdb.level INHERIT - -#------- -# JORAM -#------- -logger.fr.dyade.aaa.level ERROR -logger.fr.dyade.aaa.agent.level ERROR -logger.fr.dyade.aaa.agent.Agent.level INHERIT -logger.fr.dyade.aaa.agent.Engine.level INHERIT -logger.fr.dyade.aaa.agent.Service.level INHERIT -logger.org.objectweb.joram.level ERROR -logger.org.objectweb.joram.mom.level INHERIT -logger.org.objectweb.joram.mom.Destination.level INHERIT -logger.org.objectweb.joram.mom.Proxy.level INHERIT -logger.org.objectweb.joram.client.level INHERIT -logger.org.objectweb.joram.client.jms.Client.level ERROR -logger.org.objectweb.joram.client.connector.Adapter.level ERROR - -#------- -# SPEEDO -#------- -logger.org.objectweb.speedo.level WARN -## GENERATION -logger.org.objectweb.speedo.generation.SpeedoCompiler.level INFO -## RUN TIME -logger.org.objectweb.speedo.init.level INHERIT -logger.org.objectweb.speedo.po-manager-factory.level INHERIT -logger.org.objectweb.speedo.po-manager-switch.level INHERIT -logger.org.objectweb.speedo.po-manager-pool.level INHERIT -logger.org.objectweb.speedo.po-manager-instanciator.level INHERIT -logger.org.objectweb.speedo.po-manager.level INHERIT -logger.org.objectweb.speedo.po-manager.query.level INHERIT -logger.org.objectweb.speedo.mapper.level INHERIT -logger.org.objectweb.speedo.mapper.mapper.level INHERIT -logger.org.objectweb.speedo.mapper.mapper.sql.level INHERIT -logger.org.objectweb.speedo.mapper.jorm-factory.level INHERIT -logger.org.objectweb.speedo.mapper.jorm-factory.class-properties.level INHERIT -logger.org.objectweb.speedo.mapper.pool.level INHERIT -logger.org.objectweb.speedo.mapper.storage-manager.level INHERIT -logger.org.objectweb.speedo.memory-instance-manager.level INHERIT -logger.org.objectweb.speedo.workingset-manager.level INHERIT -logger.org.objectweb.speedo.naming-manager-factory.level INHERIT -logger.org.objectweb.speedo.transaction.level INHERIT -logger.org.objectweb.speedo.tpm.level INHERIT -logger.org.objectweb.speedo.tpm.transactional-persistence-manager.level INHERIT -logger.org.objectweb.speedo.tpm.cache-manager.level INHERIT -logger.org.objectweb.speedo.tpm.cache-manager.bgcleaner.level INHERIT -logger.org.objectweb.speedo.tpm.concurrency-manager.level INHERIT -logger.org.objectweb.speedo.query-manager.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.allocator.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.variable.level INHERIT -logger.org.objectweb.speedo.query-manager.compiled-query.parser.filter.level INHERIT -logger.org.objectweb.speedo.compiled-query-cache.level INHERIT -logger.org.objectweb.speedo.jca.level INHERIT -logger.org.objectweb.speedo.txStatistic.level INHERIT -logger.org.objectweb.speedo.jmx.level INHERIT - -# Struts -logger.org.apache.struts.util.level WARN - -#------------------------------ -# Tomcat 6 - Catalina logging -#------------------------------ -logger.org.apache.catalina.core.ContainerBase.[jonas].level INFO -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].level INFO -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].[path].level INFO -### example for jonasAdmin ### -logger.org.apache.catalina.core.ContainerBase.[jonas].[localhost].[jonasAdmin].level INFO - -#----------------------------- -# Jetty 6 (Avoid log of MBean registration (info level) -#----------------------------- -logger.org.mortbay.util.jmx.ModelMBeanImpl.level ERROR - -#----------------------------- -# Apache CXF -#----------------------------- -logger.org.apache.cxf.level INHERIT -# Avoid a log diplaying erroneous informations (INFO level) -# TODO remove theses lines when a proper startup message policy will be decided -logger.org.apache.cxf.endpoint.ServerImpl.level ERROR - -#----------------------------- -# Open Symphony Quartz -#----------------------------- -logger.org.quartz.level INHERIT -# Avoid logs of unwanted informations (INFO level) -# TODO remove theses lines when a proper startup message policy will be decided -logger.org.quartz.core.QuartzScheduler.level ERROR -logger.org.quartz.simpl.RAMJobStore.level ERROR -logger.org.quartz.impl.StdSchedulerFactory.level ERROR - -# ----------------------------------------------------------------------- -# MX4J - also need to set system proprty mx4j.log.priority to the corresponding level -# (fatal, error, warn, info, debug, trace) -# ----------------------------------------------------------------------- -logger.mx4j.level ERROR - -#----------------------------- -# OSGi logging -#----------------------------- -logger.org.ow2.util.log.impl.osgi.level ERROR - -#----------------------------- -# Deployment plan logging -#----------------------------- -logger.org.ow2.util.plan.deployer.impl.level ERROR - -#--------- -# File logger for JGroups -# JGroups -#--------- -handler.all_jgroups.type File -handler.all_jgroups.output all_jgroups.log -handler.all_jgroups.pattern %d : %l : %h : %O{1}.%M : %m%n -logger.org.jgroups.level FATAL -logger.org.jgroups.handler.0 all_jgroups -logger.org.jgroups.additivity false - -# ----------------------------------------------------------------------- -# For Log file (tests) -# ----------------------------------------------------------------------- -handler.logtest.type File -handler.logtest.output jonas_tests.log -handler.logtest.pattern %d : %l : %h : %O{1}.%M : %m%n -logger.org.ow2.jonas_tests.history.level INFO -logger.org.ow2.jonas_tests.history.handler.0 logtest -logger.org.ow2.jonas_tests.history.additivity false - - -#--- -# Discovery Logger configuration -#uncomment these lines to configure a file logger for jonas discovery -#handler.jonas-discovery.type File -#handler.jonas-discovery.output jonas_discovery.log -#handler.jonas-discovery.pattern %d : %l : %h : %O{1}.%M : %m%n -# Don't forget to set logs level. -logger.org.ow2.jonas.discovery.level INFO -#logger.org.ow2.jonas.discovery.handler.0 jonas-discovery -#logger.org.ow2.jonas.discovery.additivity false - -#--- -#Granite Logger configuration -handler.granite-ds.type File -handler.granite-ds.output granite-ds.log -handler.granite-ds.pattern %d : %l : %h : %O{1}.%M : %m%n -# Don't forget to set logs level. -logger.org.granite.config.level INFO -logger.org.granite.config.handler.0 granite-ds -logger.org.granite.config.additivity false - diff --git a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/traceclient.properties b/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/traceclient.properties deleted file mode 100644 index 5190f18bcc..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/jonas-resources/conf/traceclient.properties +++ /dev/null @@ -1,45 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %d : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -logger.org.ow2.jonas.client.level WARN - -# Set INFO to see test names. -logger.org.objectweb.jonas_tests.level WARN \ No newline at end of file diff --git a/jonas/modules/services/bootstrap/core/src/main/resources/META-INF/bootstrap-core.bnd b/jonas/modules/services/bootstrap/core/src/main/resources/META-INF/bootstrap-core.bnd deleted file mode 100644 index ba78005260..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/resources/META-INF/bootstrap-core.bnd +++ /dev/null @@ -1,35 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.services.bootstrap.mbeanbuilder - -Private-Package org.ow2.jonas.services.bootstrap.* - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - org.ow2.jonas.jmx.internal.interceptor, \ - * - -# FIXME: Required by Java-RTS-2.2 -DynamicImport-Package: org.ow2.util.plan.reader,javax.xml.bind - diff --git a/jonas/modules/services/bootstrap/core/src/main/resources/metadata.xml b/jonas/modules/services/bootstrap/core/src/main/resources/metadata.xml deleted file mode 100644 index a465cf16ac..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/bootstrap/core/src/main/templates/jonas-admin.properties.template b/jonas/modules/services/bootstrap/core/src/main/templates/jonas-admin.properties.template deleted file mode 100644 index 775d7d27cf..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/templates/jonas-admin.properties.template +++ /dev/null @@ -1,8 +0,0 @@ -# -###################### JOnAS Admin Client configuration -# -# If JMX security is enabled, the JOnAS Admin Client requires its parameters -# To be passed using -username and -password arguments. These two parameters -# pass these arguments to the JOnAS Admin Client internally. -jonas.adminClient.username jonas -jonas.adminClient.password jonas diff --git a/jonas/modules/services/bootstrap/core/src/main/templates/jonas-base.properties.template b/jonas/modules/services/bootstrap/core/src/main/templates/jonas-base.properties.template deleted file mode 100644 index 2e2043f060..0000000000 --- a/jonas/modules/services/bootstrap/core/src/main/templates/jonas-base.properties.template +++ /dev/null @@ -1,84 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - - -###################### JOnAS Server configuration -# The current file is in the /conf directory. It can be copied and -# customized in JONAS_BASE/conf directory -###################### - -# Name of the JOnAS server -# default value is "jonas" -jonas.name jonas - -# Name of the JOnAS domain -# default value is "jonas" -domain.name jonas - -# Enable the Security context propagation (for jrmp) -jonas.security.propagation true - -# Enable the Security manager -# default value is true (if not set) -# Setting this to false implies a collocated registry and setting in carol.properties: -# carol.jvm.rmi.local.registry=true -jonas.security.manager false - -# Enable csiv2 -jonas.csiv2.propagation true - -# Enable the Transaction context propagation -jonas.transaction.propagation true - -# Set the name of log configuration file -jonas.log.configfile trace - -# Set the work directory used by JOnAS (relative or absolute) -# A relative directory name will be prefixed by JONAS_BASE/ -# An absolute path will be used directly -jonas.workdirectory work - -# Set to true if the server is a master -jonas.master false - -# Set to true in order to execute the JOnAS Server in development mode. -# -# WAR archive deployment case in development mode (for single or EAR packaged WARs): -# Each modified WAR archive will be unpacked in the working directory of the JOnAS Server -# in a different folder to avoid file locks. This is especially useful in a Windows environment. -jonas.development true - -# Set the list of the services launched in the JOnAS Server. -# Possible services are: jtm,db,dbm,validation,resource,mail,cmi,ha,versioning,ejb2,ejb3, -# jaxrpc,jaxws,web,ear,depmonitor,discovery,resourcemonitor,smartclient,audit,cdi,jaxrs, -# jndi,ssh,multitenant -# -# Notes: -# - registry, security and jmx services are always started -# - some services may start automatically if required (depending on the server configuration and deployed applications) -# See 'Configuring JOnAS services' in JOnAS documentation for more information -# -%jonas.services% - diff --git a/jonas/modules/services/bootstrap/pom.xml b/jonas/modules/services/bootstrap/pom.xml deleted file mode 100644 index 7563b932a7..0000000000 --- a/jonas/modules/services/bootstrap/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - bootstrap - JOnAS :: Services :: Bootstrap - pom - - ant - core - core-for-addons - - diff --git a/jonas/modules/services/cdi-weld/core/pom.xml b/jonas/modules/services/cdi-weld/core/pom.xml deleted file mode 100644 index 03e7d02511..0000000000 --- a/jonas/modules/services/cdi-weld/core/pom.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - jonas-cdi-weld - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - jonas-cdi-weld-core - bundle - JOnAS :: Services :: Weld :: Core - - - 1.1.7.Final - - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - org.ow2.jonas.osgi - javaee-api - - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - ${project.version} - provided - - - org.apache.tomcat - servlet-api - - - - - - org.ow2.spec.ee - ow2-cdi-1.0-spec - ${ow2.spec.version} - provided - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - provided - - - - org.ow2.spec.ee - ow2-jsf-2.0-spec - ${ow2.spec.version} - provided - - - - org.ow2.spec.ee - ow2-jsp-2.2-spec - provided - - - - org.jboss.weld - weld-core - ${weld.version} - provided - - - org.jboss.weld.servlet - weld-servlet-core - ${weld.version} - provided - - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/IWeldService.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/IWeldService.java deleted file mode 100644 index 1724dee238..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/IWeldService.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld; - -import org.ow2.util.archive.api.IArchive; - -/** - * A {@code IWeldService} is some kind of utility service that takes care of Weld related - * operations. - * - * @author Guillaume Sauthier - */ -public interface IWeldService { - - /** - * Detect if the given {@code IArchive} contains a {@code beans.xml}. - * Checked location includes: - *

      - *
    • {@code WEB-INF/beans.xml}
    • - *
    • {@code META-INF/beans.xml}
    • - *
    - * @param archive explored archive - * @return {@code true} if the given archive is CDI enabled, {@code false} otherwise. - */ - boolean isCdiEnabled(IArchive archive); - -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/DefaultWeldService.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/DefaultWeldService.java deleted file mode 100644 index 4efe24da8c..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/DefaultWeldService.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal; - -import java.net.URL; - -import javax.servlet.jsp.JspFactory; -import org.ow2.jonas.cdi.weld.IWeldService; -import org.ow2.jonas.cdi.weld.internal.jsp.WeldJspFactory; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; - -/** - * Weld CDI service implementation. - * - * @author Guillaume Sauthier - */ -public class DefaultWeldService extends AbsServiceImpl implements IWeldService { - - public static final String METAINF_BEANS_XML = "META-INF/beans.xml"; - public static final String WEBINF_BEANS_XML = "WEB-INF/beans.xml"; - - private JspFactory jspFactoryDelegate; - /** - * Abstract start-up method to be implemented by sub-classes. - * - * @throws org.ow2.jonas.service.ServiceException - * service start-up failed - */ - @Override - protected void doStart() throws ServiceException { - jspFactoryDelegate = JspFactory.getDefaultFactory(); - if (jspFactoryDelegate != null) { - // Wrap jspFactory - JspFactory jspFactoryWrapper = new WeldJspFactory(jspFactoryDelegate); - JspFactory.setDefaultFactory(jspFactoryWrapper); - } - } - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * - * @throws org.ow2.jonas.service.ServiceException - * service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - // Un-wrap the JspFactory - if (jspFactoryDelegate != null) { - JspFactory.setDefaultFactory(jspFactoryDelegate); - } - } - - /** - * Detect if the given {@code IArchive} contains a {@code beans.xml}. - * Checked location includes: - *
      - *
    • {@code WEB-INF/beans.xml}
    • - *
    • {@code META-INF/beans.xml}
    • - *
    - * - * @param archive explored archive - * - * @return {@code true} if the given archive is CDI enabled, {@code false} otherwise. - */ - public boolean isCdiEnabled(IArchive archive) { - - try { - - // Search in usual jar place ... - URL resource = archive.getResource(METAINF_BEANS_XML); - if (resource != null) { - // CDI enabled archive (Jar) - return true; - } - - // ... and in the war usual location - resource = archive.getResource(WEBINF_BEANS_XML); - if (resource != null) { - // CDI enabled archive (Web) - return true; - } - - } catch (ArchiveException e) { - // Missing entry, not CDI enabled - } - - return false; - } - -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspApplicationContext.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspApplicationContext.java deleted file mode 100644 index 43c97ec227..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspApplicationContext.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.jsp; - -import javax.el.ELContextListener; -import javax.el.ELResolver; -import javax.el.ExpressionFactory; -import javax.servlet.jsp.JspApplicationContext; - -/** - * A {@code ForwardingJspApplicationContext} is ... - * - * @author Guillaume Sauthier - */ -public abstract class ForwardingJspApplicationContext implements JspApplicationContext { - - protected abstract JspApplicationContext delegate(); - - public void addELContextListener(ELContextListener elContextListener) { - delegate().addELContextListener(elContextListener); - } - - public void addELResolver(ELResolver elResolver) throws IllegalStateException { - delegate().addELResolver(elResolver); - } - - public ExpressionFactory getExpressionFactory() { - return delegate().getExpressionFactory(); - } -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspFactory.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspFactory.java deleted file mode 100644 index 08ec163cef..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/ForwardingJspFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.jsp; - -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.jsp.JspApplicationContext; -import javax.servlet.jsp.JspEngineInfo; -import javax.servlet.jsp.JspFactory; -import javax.servlet.jsp.PageContext; - -/** - * A {@code ForwardingJspFactory} is ... - * - * @author Guillaume Sauthier - */ -public abstract class ForwardingJspFactory extends JspFactory { - - protected abstract JspFactory delegate(); - - public PageContext getPageContext(Servlet servlet, ServletRequest servletRequest, ServletResponse servletResponse, String s, boolean b, int i, boolean b1) { - return delegate().getPageContext(servlet, servletRequest, servletResponse, s, b, i, b1); - } - - public void releasePageContext(PageContext pageContext) { - delegate().releasePageContext(pageContext); - } - - public JspEngineInfo getEngineInfo() { - return delegate().getEngineInfo(); - } - - public JspApplicationContext getJspApplicationContext(ServletContext servletContext) { - return delegate().getJspApplicationContext(servletContext); - } -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspApplicationContext.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspApplicationContext.java deleted file mode 100644 index bee5c57f4c..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspApplicationContext.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.jsp; - -import javax.el.ExpressionFactory; -import javax.enterprise.inject.spi.BeanManager; -import javax.servlet.jsp.JspApplicationContext; - -/** - * A {@code WeldJspApplicationContext} intercepts {@link #getExpressionFactory()} to - * produces a CDI enabled {@link ExpressionFactory}. - * - * @author Guillaume Sauthier - */ -public class WeldJspApplicationContext extends ForwardingJspApplicationContext { - - /** - * Instance to delegate to. - */ - private JspApplicationContext delegate; - - private BeanManager manager; - - public WeldJspApplicationContext(final JspApplicationContext delegate, - final BeanManager manager) { - this.delegate = delegate; - this.manager = manager; - } - - @Override - protected JspApplicationContext delegate() { - return delegate; - } - - @Override - public ExpressionFactory getExpressionFactory() { - // TODO Optimize this, maybe the ExpressionFactory is available earlier and could be stored as instance property ? - return manager.wrapExpressionFactory(super.getExpressionFactory()); - } -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspFactory.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspFactory.java deleted file mode 100644 index db14a723e5..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/jsp/WeldJspFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.jsp; - -import javax.enterprise.inject.spi.BeanManager; -import javax.servlet.ServletContext; -import javax.servlet.jsp.JspApplicationContext; -import javax.servlet.jsp.JspFactory; - -import org.jboss.weld.environment.servlet.Listener; - -/** - * A {@code WeldJspFactory} is ... - * - * @author Guillaume Sauthier - */ -public class WeldJspFactory extends ForwardingJspFactory { - - /** - * Instance to delegate to. - */ - private JspFactory delegate; - - public WeldJspFactory(final JspFactory delegate) { - this.delegate = delegate; - } - - @Override - protected JspFactory delegate() { - return delegate; - } - - /** - * Encapsulate default {@link JspApplicationContext} in a BeanManager-aware - * JspApplicationContext (if the application is CDI-ready). - * @param servletContext Stores the WebApplication's BeanManager - * @return a wrapped {@link JspApplicationContext} or the default {@link JspApplicationContext} - * if application is not CDI-ready. - */ - @Override - public JspApplicationContext getJspApplicationContext(final ServletContext servletContext) { - - // Get default context - JspApplicationContext jspApplicationContext = super.getJspApplicationContext(servletContext); - // Lookup for the BeanManager's instance bound earlier in the deployment pipeline - BeanManager manager = (BeanManager) servletContext.getAttribute(Listener.BEAN_MANAGER_ATTRIBUTE_NAME); - - if (manager != null) { - // Wraps the default context - return new WeldJspApplicationContext(jspApplicationContext, manager); - } - // non CDI-enabled applications - return jspApplicationContext; - } -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizer.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizer.java deleted file mode 100644 index 9038600b51..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizer.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.tomcat; - -import org.apache.catalina.core.StandardContext; -import org.jboss.weld.servlet.WeldListener; -import org.ow2.jonas.cdi.weld.IWeldService; -import org.ow2.jonas.web.tomcat7.custom.ContextCustomizer; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - -/** - * A {@code WeldContextCustomizer} will add to the Tomcat Context the appropriate - * application and Context listeners. - * - * @author Guillaume Sauthier - */ -public class WeldContextCustomizer implements ContextCustomizer { - - /** - * Our weld service. - */ - private IWeldService weld; - - /** - * Bind the WeldService reference. - */ - public void setWeldService(final IWeldService weld) { - this.weld = weld; - } - - /** - * Customize the given Catalina Context instance using the given WAR deployable. - * This is called just before the Context start-up. - * - * @param context Catalina Context to be customized - * @param deployable the WAR being deployed - */ - public void customize(final StandardContext context, final WARDeployable deployable) { - - // Currently, only standalone applications have their WARDeployable passed through services - // If no deployable is here, just return - // TODO Should be removed when CDI support will be wider (ejbjar, ear, ...) - if (deployable == null) { - return; - } - - // Only handle CDI enabled web applications - if (weld.isCdiEnabled(deployable.getArchive())) { - - // Add a Tomcat LifecycleListener to hook up during Context lifecycle events - context.addLifecycleListener(new WeldLifeCycleListener()); - - // Add an application listener that handle scope - // boundaries (application, session, request) - context.addApplicationListener(WeldListener.class.getName()); - - } - } -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldLifeCycleListener.java b/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldLifeCycleListener.java deleted file mode 100644 index da8d2de9c2..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldLifeCycleListener.java +++ /dev/null @@ -1,263 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cdi.weld.internal.tomcat; - -import java.util.EnumSet; -import javax.decorator.Decorator; -import javax.enterprise.inject.spi.InjectionPoint; -import javax.faces.FactoryFinder; -import javax.faces.application.Application; -import javax.faces.application.ApplicationFactory; -import javax.faces.application.ViewHandler; -import javax.faces.lifecycle.LifecycleFactory; -import javax.inject.Inject; -import javax.interceptor.Interceptor; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.jsp.JspApplicationContext; -import javax.servlet.jsp.JspFactory; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.core.StandardContext; -import org.apache.tomcat.InstanceManager; -import org.jboss.weld.bootstrap.WeldBootstrap; -import org.jboss.weld.bootstrap.api.Bootstrap; -import org.jboss.weld.bootstrap.api.Environments; -import org.jboss.weld.el.WeldELContextListener; -import org.jboss.weld.environment.servlet.Listener; -import org.jboss.weld.environment.servlet.deployment.ServletDeployment; -import org.jboss.weld.environment.servlet.deployment.URLScanner; -import org.jboss.weld.environment.tomcat7.WeldForwardingInstanceManager; -import org.jboss.weld.environment.tomcat7.WeldInstanceManager; -import org.jboss.weld.jsf.ConversationAwareViewHandler; -import org.jboss.weld.jsf.WeldPhaseListener; -import org.jboss.weld.manager.api.WeldManager; -import org.jboss.weld.resources.ClassLoaderResourceLoader; -import org.jboss.weld.resources.spi.ResourceLoader; -import org.jboss.weld.servlet.ConversationPropagationFilter; -import org.ow2.util.execution.ExecutionResult; -import org.ow2.util.execution.IExecution; -import org.ow2.util.execution.helper.RunnableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * A {@code WeldLifeCycleListener} is a Tomcat Context Lifecycle listener. - * It is in charge of Weld container start-up and shut-down process for a web-app. - * - * @author Guillaume Sauthier - */ -public class WeldLifeCycleListener implements LifecycleListener { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WeldLifeCycleListener.class); - - /** - * BeanManager for this web application. - */ - private WeldManager manager; - - private Bootstrap bootstrap; - - - private ClassLoader webappClassLoader; - - /** - * React when an event is fired by the Context. - * - * @param event tomcat Context's life-cycle event - */ - public void lifecycleEvent(final LifecycleEvent event) { - - if (event.getLifecycle() instanceof StandardContext) { - StandardContext context = (StandardContext) event.getLifecycle(); - - if (Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) { - configureStart(context); - } else if (Lifecycle.AFTER_START_EVENT.equals(event.getType())) { - afterStart(context); - } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { - afterStop(context); - } - } - } - - - /** - * Plug-in a JSF PhaseListener in order to bound conversation's scopes - * - * @param context Tomcat Context - */ - private void afterStart(final StandardContext context) { - IExecution execution = new IExecution() { - public Void execute() throws Exception { - ApplicationFactory applicationFactory = (ApplicationFactory) - FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY); - Application application = applicationFactory.getApplication(); - if (application != null) { - ViewHandler currentHandler = application.getViewHandler(); - application.setViewHandler(new ConversationAwareViewHandler(currentHandler)); - } - LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); - // Maybe the JSF implementation is not installed - if (factory != null) { - javax.faces.lifecycle.Lifecycle lc = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); - lc.addPhaseListener(new WeldPhaseListener()); - } - return null; - } - }; - ExecutionResult result = new RunnableHelper().execute(webappClassLoader, execution); - if (result.hasException()) { - logger.debug("The current Webapp {0} is not JSF-enabled", context.getName(), result.getException()); - } - - } - - /** - * Stop the Weld container (if any has been started) - * - * @param context Tomcat Context - */ - private void afterStop(final StandardContext context) { - - // Stop the weld container - if (bootstrap != null) { - logger.debug("Stop Weld container for ''{0}'' ...", context.getName()); - bootstrap.shutdown(); - } - } - - /** - * Start the Weld container - * - * @param context Tomcat Context - */ - private void configureStart(final StandardContext context) { - - logger.debug("Start Weld container for ''{0}'' ...", context.getName()); - - bootstrap = new WeldBootstrap(); - ServletContext servletContext = context.getServletContext(); - URLScanner scanner = new URLScanner(context.getLoader().getClassLoader()); - servletContext.setAttribute(URLScanner.class.getName(), scanner); - ServletDeployment deployment = new ServletDeployment(servletContext, bootstrap); - - // Provides our Application ClassLoader backed ResourceLoader - webappClassLoader = context.getLoader().getClassLoader(); - deployment.getServices().add(ResourceLoader.class, new ClassLoaderResourceLoader(webappClassLoader)); - - // TODO Beurk, this HAS to be improved - performUglyClassLoaderHack(webappClassLoader); - - // Start Weld - // TODO Maybe the Servlet Env is not well suited for our case - // Consider built up our own Env with a minimal required set of services - bootstrap.startContainer(Environments.SERVLET, deployment); - bootstrap.startInitialization(); - - manager = bootstrap.getManager(deployment.getWebAppBeanDeploymentArchive()); - servletContext.setAttribute(Listener.BEAN_MANAGER_ATTRIBUTE_NAME, manager); - - registerFilters(servletContext); - - configureJsp(servletContext); - - bindBeanManager(context); - wrapInstanceManager(context); - - // Initialization process - bootstrap.deployBeans(); - bootstrap.validateBeans(); - bootstrap.endInitialization(); - } - - private void configureJsp(ServletContext servletContext) { - JspFactory jspFactory = JspFactory.getDefaultFactory(); - if (jspFactory != null) { - JspApplicationContext jspApplicationContext = jspFactory.getJspApplicationContext(servletContext); - jspApplicationContext.addELResolver(manager.getELResolver()); - jspApplicationContext.addELContextListener(new WeldELContextListener()); - } - } - - private void registerFilters(ServletContext servletContext) { - FilterRegistration registration = servletContext.addFilter("ConversationPropagationFilter", new ConversationPropagationFilter()); - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); - } - - private void wrapInstanceManager(StandardContext context) { - // Replace the AnnotationProcessor with our own version - final InstanceManager original = context.getInstanceManager(); - final InstanceManager weldInstanceManager = new WeldInstanceManager2(manager); - - // Place the new processor back into the Context - context.setInstanceManager(new WeldForwardingInstanceManager(original, weldInstanceManager)); - } - - private void bindBeanManager(StandardContext context) { - try { - InitialContext initialContext = new InitialContext(); - initialContext.rebind("java:comp/BeanManager", manager); - } catch (NamingException e) { - logger.error("Unable to register BeanManager into JNDI.", e); - context.setConfigured(false); - } - } - - private void performUglyClassLoaderHack(ClassLoader loader) { - - // TODO Fix me this is a ugly hack to force loading of some packages - // This is required because the WebApp ClassLoader parent (indirect parent) - // has a "DynamicImport-Package *". DIP has a something subtle: it seems the - // wires are not created eagerly. - // So in order to force the wire creation, we pre-load some classes to unsure - // that the wire is done. - try { - loader.loadClass("org.jboss.interceptor.util.proxy.TargetInstanceProxy"); - loader.loadClass("javassist.util.proxy.ProxyObject"); - loader.loadClass(Decorator.class.getName()); - loader.loadClass(Inject.class.getName()); - loader.loadClass(Interceptor.class.getName()); - loader.loadClass(InjectionPoint.class.getName()); - } catch (ClassNotFoundException e) { - logger.debug("Cannot load a class from {0}", loader, e); - } - } - - private static class WeldInstanceManager2 extends WeldInstanceManager { - - public WeldInstanceManager2(WeldManager manager) { - super(manager); - } - } - -} diff --git a/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/jonas-cdi-weld-core.bnd b/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/jonas-cdi-weld-core.bnd deleted file mode 100644 index 1bf391c6b2..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/jonas-cdi-weld-core.bnd +++ /dev/null @@ -1,37 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - - -Export-Package org.ow2.jonas.cdi.weld, \ - org.jboss.weld.environment.servlet.jsf.* - -Private-Package org.ow2.jonas.cdi.weld.*, \ - org.jboss.weld.environment.servlet.*, \ - org.jboss.weld.environment.tomcat7.* - -Import-Package org.jboss.weld.environment.gwtdev;resolution:=optional, \ - org.jboss.weld.environment.jetty;resolution:=optional, \ - org.jboss.weld.environment.tomcat;resolution:=optional, \ - org.jboss.weld.environment;resolution:=optional, \ - org.jboss.virtual;resolution:=optional, \ - * diff --git a/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/services/javax.faces.application.ApplicationFactory b/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/services/javax.faces.application.ApplicationFactory deleted file mode 100644 index 0afbacbd1a..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/resources/META-INF/services/javax.faces.application.ApplicationFactory +++ /dev/null @@ -1 +0,0 @@ -org.jboss.weld.environment.servlet.jsf.WeldApplicationFactory \ No newline at end of file diff --git a/jonas/modules/services/cdi-weld/core/src/main/resources/metadata.xml b/jonas/modules/services/cdi-weld/core/src/main/resources/metadata.xml deleted file mode 100644 index 7e0be6b1ec..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/cdi-weld/core/src/main/templates/jonas-cdi.properties.template b/jonas/modules/services/cdi-weld/core/src/main/templates/jonas-cdi.properties.template deleted file mode 100644 index 6eb669d20a..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/main/templates/jonas-cdi.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS CDI service configuration -# -jonas.services cdi -# Set the name of the implementation class of the cdi service -jonas.service.cdi.class org.ow2.jonas.cdi.weld.internal.DefaultWeldService diff --git a/jonas/modules/services/cdi-weld/core/src/test/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizerTestCase.java b/jonas/modules/services/cdi-weld/core/src/test/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizerTestCase.java deleted file mode 100644 index a8ecae78f3..0000000000 --- a/jonas/modules/services/cdi-weld/core/src/test/java/org/ow2/jonas/cdi/weld/internal/tomcat/WeldContextCustomizerTestCase.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.cdi.weld.internal.tomcat; - -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.core.StandardContext; -import org.jboss.weld.servlet.WeldListener; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; -import org.mockito.verification.VerificationMode; -import org.ow2.jonas.cdi.weld.IWeldService; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - -/** - * A {@code WeldContextCustomizerTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class WeldContextCustomizerTestCase { - - @Mock - private IWeldService weldService; - - @Spy - private StandardContext standardContext = new StandardContext(); - - @Mock - private WARDeployable warDeployable; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testCustomizeWithNonCdiEnabledArchive() throws Exception { - - when(weldService.isCdiEnabled(null)).thenReturn(Boolean.FALSE); - - WeldContextCustomizer customizer = new WeldContextCustomizer(); - customizer.setWeldService(weldService); - - customizer.customize(standardContext, warDeployable); - - verify(standardContext, never()).addLifecycleListener(any(LifecycleListener.class)); - verify(standardContext, never()).addApplicationListener(any(String.class)); - } - - @Test - public void testCustomizeWithCdiEnabledArchive() throws Exception { - - when(weldService.isCdiEnabled(null)).thenReturn(Boolean.TRUE); - - WeldContextCustomizer customizer = new WeldContextCustomizer(); - customizer.setWeldService(weldService); - - customizer.customize(standardContext, warDeployable); - - verify(standardContext).addLifecycleListener(any(WeldLifeCycleListener.class)); - verify(standardContext).addApplicationListener(WeldListener.class.getName()); - } -} diff --git a/jonas/modules/services/cdi-weld/pom.xml b/jonas/modules/services/cdi-weld/pom.xml deleted file mode 100644 index bd988e5d57..0000000000 --- a/jonas/modules/services/cdi-weld/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - - 4.0.0 - - jonas-cdi-weld - pom - JOnAS :: Services :: Weld - - core - - - - \ No newline at end of file diff --git a/jonas/modules/services/cmi/ant/pom.xml b/jonas/modules/services/cmi/ant/pom.xml deleted file mode 100644 index d41e38c761..0000000000 --- a/jonas/modules/services/cmi/ant/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - jonas-cmi - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-cmi-ant - bundle - JOnAS :: Services :: CMI :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-carol-registry-ant - ${project.version} - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - provided - - - \ No newline at end of file diff --git a/jonas/modules/services/cmi/ant/src/main/java/org/ow2/jonas/antmodular/cmi/Cmi.java b/jonas/modules/services/cmi/ant/src/main/java/org/ow2/jonas/antmodular/cmi/Cmi.java deleted file mode 100644 index 16ef25e1bb..0000000000 --- a/jonas/modules/services/cmi/ant/src/main/java/org/ow2/jonas/antmodular/cmi/Cmi.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.cmi; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.carol.Carol; - -/** - * Defines properties for cmi service. - * @author Loris Bouzonnet - */ -public class Cmi extends AbstractJOnASBaseAntTask { - - - /** - * Info for the logger. - */ - private static final String INFO = "[Cmi] "; - - /** - * CMI mcast address attribute. - */ - private static final String CMI_MCASTADDR_ATTR = "mcast_addr"; - - /** - * CMI mcast port attribute. - */ - private static final String CMI_MCASTPORT_ATTR = "mcast_port"; - - /** - * Default cmi mcast address. - */ - private static final String DEFAULT_CMI_MCASTADDR = "224.0.0.35"; - - /** - * Default cmi mcast port. - */ - private static final String DEFAULT_CMI_MCASTPORT = "35467"; - - /** - * CMI replication enabled attribute. - */ - private static final String REPLICATION_ENABLED_ATTR = "cmi.server.start.replication"; - - /** - * Name of JGroups CMI configuration file. - */ - public static final String JGROUPS_CMI_CONF_FILE = "jgroups-cmi.xml"; - - /** - * Default constructor. - */ - public Cmi() { - super(); - } - - /** - * Set mcastAddr for CMI. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace the multicast addr - String token = CMI_MCASTADDR_ATTR + "=" + "\"" + DEFAULT_CMI_MCASTADDR - + "\""; - String value = CMI_MCASTADDR_ATTR + "=" + "\"" + mcastAddr + "\""; - JReplace mcastAddrReplace = new JReplace(); - mcastAddrReplace - .setLogInfo(INFO + "Setting mcastaddr for cmi"); - mcastAddrReplace - .setConfigurationFile(JGROUPS_CMI_CONF_FILE); - mcastAddrReplace.setToken(token); - mcastAddrReplace.setValue(value); - addTask(mcastAddrReplace); - } - - /** - * Set mcastPort for CMI. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace the multicast port - String token = CMI_MCASTPORT_ATTR + "=" + "\"" + DEFAULT_CMI_MCASTPORT - + "\""; - String value = CMI_MCASTPORT_ATTR + "=" + "\"" + mcastPort + "\""; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace - .setLogInfo(INFO + "Setting mcastport for cmi"); - mcastPortReplace - .setConfigurationFile(JGROUPS_CMI_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - - } - - /** - * Set if the replication is enabled. - * @param replicationEnabled true if the replication is enabled - */ - public void setReplicationEnabled(final boolean replicationEnabled) { - // Token to replace the MBean name - String token = REPLICATION_ENABLED_ATTR + "=false"; - String value = REPLICATION_ENABLED_ATTR + "=true"; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace - .setLogInfo(INFO + "Setting if replication is enabled for cmi"); - mcastPortReplace - .setConfigurationFile(Carol.CAROL_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/cmi/ant/src/main/resources/jonas-cmi-ant.bnd b/jonas/modules/services/cmi/ant/src/main/resources/jonas-cmi-ant.bnd deleted file mode 100644 index e79df95d47..0000000000 --- a/jonas/modules/services/cmi/ant/src/main/resources/jonas-cmi-ant.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.antmodular.cmi.* - -# Import/Export nothing -Import-Package !* -Export-Package !* \ No newline at end of file diff --git a/jonas/modules/services/cmi/core/pom.xml b/jonas/modules/services/cmi/core/pom.xml deleted file mode 100644 index 6748c5df3d..0000000000 --- a/jonas/modules/services/cmi/core/pom.xml +++ /dev/null @@ -1,154 +0,0 @@ - - - - - jonas-cmi - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - org.ow2.jonas - jonas-cmi-core - bundle - JOnAS :: Services :: CMI :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - ${ow2.spec.version} - - - org.ow2.carol - carol - ${carol.version} - - - org.ow2.cmi - cmi-core-server - ${cmi.version} - - - org.ow2.cmi - cmi-api-server - ${cmi.version} - - - org.ow2.bundles - ow2-util-url - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.cmi - cmi-components-event - ${cmi.version} - - - org.ow2.bundles - ow2-util-event-api - - - org.ow2.bundles - ow2-util-event-impl - - - - org.ow2.bundles - ow2-util-ee-event - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/BundleContent.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/BundleContent.java deleted file mode 100644 index 7e92d26240..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/BundleContent.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi.internal; - -import org.ow2.cmi.lb.policy.IPolicy; -import org.ow2.cmi.lb.strategy.IStrategy; - -/** - * Wrapper for a policy/strategy bundle. - * @author eyindanga - * - */ -public class BundleContent { - /** - * Bundle location. - */ - private String location; - /** - * Policies of the bundle. - */ - private String[] policyNames; - /** - * Strategies of the bundle. - */ - private String[] strategyNames; - - /** - * Strategy classes. - */ - private Class[] strategyClasses; - - /** - * Policy classes. - */ - private Class[] policyClasses; - - - /** - * Constructor using fields. - * @param location bundle location. - * @param policies Policies of the bundle - * @param strategies Strategies of the bundle - */ - public BundleContent(final String location, final Class>[] policies, - final Class>[] strategies) { - this.location = location; - this.policyNames = new String[policies.length]; - this.strategyNames = new String[strategies.length]; - strategyClasses = strategies; - policyClasses = policies; - extractPoliciesAndStrategiesNames(policies, strategies); - } - - /** - * Extracts strategies and policy names, - * and store them in dedicated containers. - * @param policies Policies of the bundle - * @param strategies Strategies of the bundle - */ - private void extractPoliciesAndStrategiesNames( - final Class>[] policies, - final Class>[] strategies) { - for (int i = 0; i < strategies.length; i++) { - this.strategyNames[i] = strategies[i].getName(); - } - for (int i = 0; i < policies.length; i++) { - this.policyNames[i] = policies[i].getName(); - } - - } - - /** - * @return the location - */ - public String getLocation() { - return location; - } - - /** - * @return the policies - */ - public String[] getPolicyNames() { - return policyNames; - } - - /** - * @return the strategies - */ - public String[] getStrategyNames() { - return strategyNames; - } - - /** - * @return the strategyClasses - */ - public Class[] getStrategyClasses() { - return strategyClasses; - } - - /** - * @param strategyClasses the strategyClasses to set - */ - public void setStrategyClasses(final Class[] strategyClasses) { - this.strategyClasses = strategyClasses; - } - - /** - * @return the policyClasses - */ - public Class[] getPolicyClasses() { - return policyClasses; - } - - /** - * @param policyClasses the policyClasses to set - */ - public void setPolicyClasses(final Class[] policyClasses) { - this.policyClasses = policyClasses; - } - -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceException.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceException.java deleted file mode 100644 index 9861c1de44..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceException.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi.internal; - -/** - * Cmi service Exceptions. - * @author eyindanga - * - */ -public class CmiServiceException extends Exception { - - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - - /** - * Default constructor. - */ - public CmiServiceException() { - - } - - /** - * Constructor using fields. - * @param message message of the exception. - */ - public CmiServiceException(final String message) { - super(message); - } - -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceHelper.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceHelper.java deleted file mode 100644 index 05919d04ef..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceHelper.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi.internal; - -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; - -import org.ow2.cmi.controller.server.ServerClusterViewManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Cmi service helper. - * @author eyindanga - * - */ -public final class CmiServiceHelper { - - /** - * The cmi configuration file. - */ - public static final String CMI_CONFIGURATION_FILE_NAME = "cmi-config.xml"; - /** - * The logger. - */ - private static final Log LOGGER = LogFactory.getLog(CmiServiceHelper.class); - - /** - * Size of Buffer. - */ - private static final int BUFFER_SIZE = 1024; - - private CmiServiceHelper() { - - } - - /** - * Sends bundle content to the server-side manager. - * @param clusterViewManager the server-side manager - * @param bundle the bundle to send. - * @return Archive Id - * @throws FileNotFoundException bundle does'nt exist - */ - public static String sendBundle( - final ServerClusterViewManager clusterViewManager, - final BundleContent bundle) throws FileNotFoundException { - LOGGER - .debug("Sending new load balancing archive located at '" - + bundle.getLocation() - + "' step 2: trying to transfer data array of the archive to the server-side manager"); - InputStream inputStream = null; - String archiveId = null; - try { - URL url = new URL(bundle.getLocation()); - inputStream = url.openStream(); - } catch (MalformedURLException e1) { - // TODO Auto-generated catch block - LOGGER - .error("Unable to send load balancing archive bacause: ", - e1); - } catch (IOException e1) { - // TODO Auto-generated catch block - LOGGER.error("Unable to send load balancing archive bacause: ", e1); - } - ByteArrayOutputStream baos = null; - int len; - try { - byte[] buf = new byte[BUFFER_SIZE]; - baos = new ByteArrayOutputStream(); - // Read bytes - while ((len = inputStream.read(buf)) > 0) { - baos.write(buf, 0, len); - } - byte[] bytesOfFile = baos.toByteArray(); - archiveId = (String) clusterViewManager.addLoadBalancingArchive( - bytesOfFile, bundle.getLocation(), bundle.getPolicyClasses(), bundle.getStrategyClasses()); - } catch (Exception e) { - LOGGER.error("Unable to send load balancing archive", e); - } finally { - try { - inputStream.close(); - baos.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - LOGGER - .error( - " Unable to close archive or stream for file located at ", - bundle.getLocation()); - } - } - return archiveId; - } -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceImpl.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceImpl.java deleted file mode 100644 index 26286612b7..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceImpl.java +++ /dev/null @@ -1,336 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi.internal; - -import java.io.File; -import java.net.URL; -import java.util.List; - -import javax.ejb.EJBObject; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.osgi.framework.BundleContext; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceRegistration; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.cmi.component.event.EventComponent; -import org.ow2.cmi.controller.common.ClusterViewManager; -import org.ow2.cmi.controller.factory.ClusterViewManagerFactory; -import org.ow2.cmi.controller.server.AbsServerClusterViewManager; -import org.ow2.cmi.controller.server.IServerConfig; -import org.ow2.cmi.controller.server.ServerClusterViewManager; -import org.ow2.cmi.osgi.ILoadBalancingService; -import org.ow2.jonas.cmi.CmiService; -import org.ow2.jonas.cmi.internal.event.BeanEventListener; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.component.api.Component; -import org.ow2.util.event.api.IEventListener; -import org.ow2.util.event.api.IEventService; - -/** - * CMI Service interface. It provides a way to use CMI with JOnAS. - * @author Loris Bouzonnet - */ -public class CmiServiceImpl extends AbsServiceImpl implements CmiService { - - /** - * Logger for traces. - */ - private static Logger cmilogger = Log.getLogger("org.ow2.jonas.cmi"); - - /** - * The JMX service. - */ - private JmxService jmxService = null; - - /** - * OSGi bundle context. - */ - private final BundleContext context; - - /** - * The manager of cluster view. - */ - private static ClusterViewManager clusterViewManager; - - /** - * Registration of the cluster view manager. - */ - private ServiceRegistration clusterViewManagerRegistration; - - /** - * The EventService. - */ - private IEventService eventService = null; - - /** - * Manager for load balancing policy/strategy. - */ - private CmiServicePolicyStrategyManager policyStrategyManager = null; - - /** - * Listener for Load Balancing services. - */ - private LoadBalancingListener listener; - - /** - * bean event listener. - */ - IEventListener beanEventListener = null; - - /** - * Constructor providing the bundle context. - * @param context the bundle context - */ - public CmiServiceImpl(final BundleContext context) { - this.context = context; - } - - /** - * Start the service. - * @throws ServiceException when cannot configure or start the CMI instance. - */ - @Override - protected void doStart() throws ServiceException { - - File deployDirectory = new File(JProp.getJonasBase(), CmiServiceProperty.DEFAULT_DEPLOY_DIRECTORY.getPropertyName()); - final URL cmiConfUrl; - try { - File cmiConf = new File(JProp.getConfDir(), CmiServiceHelper.CMI_CONFIGURATION_FILE_NAME); - if (cmiConf.exists()) { - cmiConfUrl = cmiConf.toURI().toURL(); - } else { - cmilogger.log(BasicLevel.ERROR, "Missing file '" + CmiServiceHelper.CMI_CONFIGURATION_FILE_NAME - + "' in JONAS_BASE : " + JProp.getConfDir()); - throw new ServiceException("Missing file '" + CmiServiceHelper.CMI_CONFIGURATION_FILE_NAME - + "' in JONAS_BASE : " + JProp.getConfDir()); - - } - - } catch (Exception e) { - cmilogger.log(BasicLevel.ERROR, "Cannot configure Carol to use CMI", e); - throw new ServiceException("Cannot configure Carol to use CMI", e); - } - - final ClusterViewManagerFactory clusterViewManagerFactory = ClusterViewManagerFactory.getFactory(); - - // Start the CMI server in an execution block - IExecution startExec = new IExecution() { - public Boolean execute() throws Exception { - ConfigurationRepository.getServerConfiguration().enableCMI(cmiConfUrl); - clusterViewManager = clusterViewManagerFactory.create(); - if (eventService != null) { - List components = clusterViewManagerFactory.getConfig().getComponents().getComponents(); - if (components != null) { - for (Component eventComponent : components) { - if (EventComponent.class.isAssignableFrom(eventComponent.getClass())) { - ((EventComponent) eventComponent).setEventService(eventService); - } - } - } - if (clusterViewManager instanceof ServerClusterViewManager) { - beanEventListener = new BeanEventListener((ServerClusterViewManager)clusterViewManager); - eventService.registerListener(beanEventListener, ( - (BeanEventListener) beanEventListener).getEventProviderFilter()); - } - } - return clusterViewManager.start(); - } - }; - // Execute - ExecutionResult startExecResult = RunnableHelper.execute(getClass().getClassLoader(), startExec); - - if (startExecResult.hasException()) { - // Disable binding into the cluster - try { - ConfigurationRepository.getServerConfiguration().disableCMI(); - } catch (Exception e) { - cmilogger.log(BasicLevel.WARN, "Cannot disable cmi in Carol", e); - } - cmilogger.log(BasicLevel.ERROR, "Cannot start the server-side manager", startExecResult.getException()); - throw new ServiceException("Cannot start the CMI server", startExecResult.getException()); - } - // Set the deploy directory of. - if (deployDirectory.exists()) { - cmilogger.log(BasicLevel.DEBUG, "Deploy directory of CMI service is: " + deployDirectory.getAbsolutePath()); - try { - IServerConfig srvConfig = (IServerConfig) clusterViewManager.getConfig(); - srvConfig.setDeployDirectory(deployDirectory.getAbsolutePath()); - }catch (ClassCastException e) { - cmilogger.log(BasicLevel.DEBUG, "Set deploy directory only if CMI is server"); - }catch (Exception e1) { - cmilogger.log(BasicLevel.DEBUG, "Cannot set deploy directory", e1); - } - - } else { - cmilogger.log(BasicLevel.DEBUG, "No deploy directory for CMI service"); - } - - // FIXME Sometimes cause a deadlock with Felix and iPOJO: should be done - // by the CMI bundle - // Register the cluster view manager as a service - clusterViewManagerRegistration = context.registerService(ClusterViewManager.class.getName(), clusterViewManager, null); - - if (clusterViewManager instanceof ServerClusterViewManager) { - policyStrategyManager = new CmiServicePolicyStrategyManager((ServerClusterViewManager) clusterViewManager); - /** - * The LoadBalancingListener will delegate processing of - * policy/strategy services to policyStrategyManager - */ - listener = new LoadBalancingListener(policyStrategyManager); - - /** - * Add listener for load balancing service - */ - cmilogger.log(BasicLevel.DEBUG, "Adding listener for load balancing service "); - try { - context.addServiceListener(listener, "(objectClass=" + ILoadBalancingService.class.getName() + ")"); - } catch (InvalidSyntaxException e) { - // TODO Auto-generated catch block - cmilogger.log(BasicLevel.WARN, "Unable to add service listener for " + ILoadBalancingService.class.getName() - + " because: " + e); - } - } - - } - - /** - * Stop the service. - * @throws ServiceException when the CMI server side manager cannot be - * stopped. - */ - @Override - protected void doStop() throws ServiceException { - - if (listener != null) { - context.removeServiceListener(listener); - } - - // Unregister the cluster view manager of the OSGi bundle context - if (clusterViewManagerRegistration != null) { - clusterViewManagerRegistration.unregister(); - } - - // Disable binding into the cluster - try { - ConfigurationRepository.getServerConfiguration().disableCMI(); - } catch (Exception e) { - cmilogger.log(BasicLevel.WARN, "Cannot disable cmi in Carol", e); - } - - // Stop it - if (clusterViewManager != null) { - try { - ((AbsServerClusterViewManager) clusterViewManager).stop(); - } catch (Exception e) { - cmilogger.log(BasicLevel.ERROR, "Cannot stop the server-side manager", e); - throw new ServiceException("Cannot stop the server-side manager", e); - } - } - } - - /** - * @return the jmxService - */ - protected JmxService getJmxService() { - return jmxService; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param eventService the EventService to set - */ - public void setEventService(final IEventService eventService) { - this.eventService = eventService; - } - - /** - * Add a bean to the cluster. - * @param jndiName name of the bean - * @param clusterConfigMapping The cluster configuration - * @param homeClass class of the home interface - * @param remoteClass class of the remote interface - * @param classLoader the classloader used by the container of this bean - * @param stateful true if the bean has a state - * @param clusterReplicated true if the bean is replicated (ha service is - * required) - * @param env a given environment. - * @throws Exception if the provided policy of load-balancing is not valid - */ - public void addClusteredObject(final String jndiName, final Object clusterConfig, final Class homeClass, - final Class remoteClass, final ClassLoader classLoader, final boolean stateful, - final boolean clusterReplicated) throws Exception { - cmilogger.log(BasicLevel.DEBUG, "Adding clustered object named: " + jndiName); - ((BeanEventListener) beanEventListener).addClusteredObject(jndiName, clusterConfig, homeClass, remoteClass, - classLoader, stateful, clusterReplicated); - - } - - /** - * Removes the given clustered object. - * @param jndiName Name of the object to remove - * @throws Exception any - */ - public void removeClusteredObject(final String jndiName) throws Exception { - cmilogger.log(BasicLevel.DEBUG, "Removing clustered object named :" + jndiName); - ((BeanEventListener) beanEventListener).removeClusteredObject(jndiName); - } - - /** - * @return the beanEventListener - */ - public IEventListener getBeanEventListener() { - return beanEventListener; - } - - /** - * @param beanEventListener the beanEventListener to set - */ - public void setBeanEventListener(final IEventListener beanEventListener) { - this.beanEventListener = beanEventListener; - } - - /** - * Gets the clusterview manager - * @return - */ - public synchronized static ClusterViewManager getClusterViewManager() { - return clusterViewManager; - } -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServicePolicyStrategyManager.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServicePolicyStrategyManager.java deleted file mode 100644 index 9204afacf5..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServicePolicyStrategyManager.java +++ /dev/null @@ -1,199 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cmi.internal; - -import java.io.FileNotFoundException; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.cmi.controller.server.ServerClusterViewManager; -import org.ow2.cmi.lb.policy.IPolicy; -import org.ow2.cmi.lb.strategy.IStrategy; -import org.ow2.jonas.lib.util.Log; - -/** - * Manager for cmi policies and strategies. The Cmi service of JOnAS delegates - * management of cmi policies and strategies to this class - * - * @author eyindanga - */ -public class CmiServicePolicyStrategyManager { - /** - * Logger. - */ - private static Logger LOGGER = Log.getLogger("org.ow2.jonas.cmi"); - - /** - * server-side manager. - */ - - private ServerClusterViewManager serverClusterViewManager = null; - - /** - * Stores the Ids of deployed bundles that export load balancing - * policy/strategy. - */ - private HashMap deployedBundleId = new HashMap(); - - /** - * Default constructor. - */ - public CmiServicePolicyStrategyManager() { - } - - /** - * Constructor using fields. - * - * @param serverClusterViewManager - * the server-side manager to communicate with. - */ - public CmiServicePolicyStrategyManager( - final ServerClusterViewManager serverClusterViewManager) { - this.serverClusterViewManager = serverClusterViewManager; - } - - /** - * Load the given archive. - * - * @param location - * of the bundle - * @param policies - * the policies - * @param strategies - * the strategies - * @throws CmiServiceException - * any. - */ - public void addPolicyStrategyBundle(final String location, - final Class>[] policies, - final Class>[] strategies) - throws CmiServiceException { - String bundleId = null; - if (policies == null && strategies == null) { - LOGGER.log(BasicLevel.DEBUG, "No strategies nor policies to be added"); - return; - } - Class[] filteredPolicies = removeAbstractAndInterfaces(policies); - Class[] filteredStrategies = removeAbstractAndInterfaces(strategies); - BundleContent policiesAndStrategies = new BundleContent(location, - (Class>[]) filteredPolicies, - (Class>[]) filteredStrategies); - try { - bundleId = CmiServiceHelper.sendBundle(serverClusterViewManager, policiesAndStrategies); - if (deployedBundleId.containsKey(bundleId)) { - deployedBundleId.remove(bundleId); - } - deployedBundleId.put(bundleId, policiesAndStrategies); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - LOGGER.log(BasicLevel.ERROR, "Unable to load archive located at '" - + policiesAndStrategies.getLocation() + "' because " + e); - throw new CmiServiceException(e.getMessage()); - } - - } - - /** - * Filter interfaces and abstract classes. - * - * @param classes - * the classes to filter. - * @return filtered classes. - */ - private Class[] removeAbstractAndInterfaces(final Class[] classes) { - ArrayList> ret = new ArrayList>(); - if (classes != null) { - for (Class clz : classes) { - if (!Modifier.isAbstract(clz.getModifiers()) - && !Modifier.isInterface(clz.getModifiers())) { - ret.add(clz); - } - } - } - return ret.toArray(new Class[ret.size()]); - } - - /** - * Unload the given archive. - * - * @param location - * bundle location - * @throws CmiServiceException any - * - */ - public void removePolicyStrategyBundle(final String location) - throws CmiServiceException { - try { - String bundleId = null; - bundleId = getBundleId(location); - boolean isOwner = false; - if (bundleId.contains(serverClusterViewManager.getUUID().toString())) { - /** - * Remove policies and strategies previously added from this bundle + - * Tell other servers to undeploy the bundle. - * - */ - isOwner = true; - } - BundleContent bundleContent = deployedBundleId.get(bundleId); - serverClusterViewManager.removeLoadBalancingArchive(bundleId, - bundleContent.getPolicyNames(), bundleContent.getStrategyNames(), - isOwner); - } catch (Exception e) { - throw new CmiServiceException(e.getMessage()); - } - - } - - /** - * Gets Id for given bundle. - * - * @param location - * Bundle location - * @return Id of the bundle. - * @throws CmiServiceException - * if bundle is not deployed. - */ - @SuppressWarnings("unchecked") - private String getBundleId(final String location) - throws CmiServiceException { - // TODO Auto-generated method stub - Iterator iter = deployedBundleId.entrySet().iterator(); - while (iter.hasNext()) { - Map.Entry entry = (Map.Entry) iter.next(); - String key = (String) entry.getKey(); - BundleContent bundleContent = (BundleContent) entry.getValue(); - if (bundleContent.getLocation().equals(location)) { - return key; - } - } - throw new CmiServiceException(" Unable to find Id for bundle deployed at " + location); - } - -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceProperty.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceProperty.java deleted file mode 100644 index 8aa08e7379..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/CmiServiceProperty.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cmi.internal; - -/** - * Properties for CMI service. - * @author eyindanga - * - */ -public enum CmiServiceProperty { - /** - * Property name for specifying if the replication is enabled. - */ - DEPLOY_DIRECTORY_KEY("cmi.server.deploy.directory"), - /** - * Default cluster factory. - */ - DEFAULT_CLUSTER_FACTORY("org.ow2.jonas.cmi.internal.DefaultClusterFactory"), - - /** - * Key for cluster factory. - */ - CLUSTER_FACTORY_KEY("cmi.cluster.factory"), - /** - * Key for cluster factory. - */ - CLUSTER_BUILD_METHOD("getCluster"), - /** - * Property name for specifying if the replication is enabled. - */ - DEFAULT_DEPLOY_DIRECTORY("deploy"); - - /** - * A name of property. - */ - private final String propertyName; - - /** - * @param propertyName - * a name of property - */ - CmiServiceProperty(final String propertyName) { - this.propertyName = propertyName; - } - - /** - * @return the name of property - */ - @Override - public String toString() { - return propertyName; - } - - /** - * @return the name of property - */ - public String getPropertyName() { - return propertyName; - } -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/LoadBalancingListener.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/LoadBalancingListener.java deleted file mode 100644 index f5e553272c..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/LoadBalancingListener.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cmi.internal; - -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.ServiceReference; -import org.ow2.cmi.osgi.ILoadBalancingService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Listener for services that export Load balancing policies and strategies. - * - * @author eyindanga - * - */ -public class LoadBalancingListener implements ServiceListener { - - /** - * Logger. - */ - private static final Log LOGGER = LogFactory - .getLog(LoadBalancingListener.class); - - /** - * Current cmi service. - */ - private CmiServicePolicyStrategyManager policyStrategyManager = null; - - /** - * Contructor without fields. - */ - public LoadBalancingListener() { - - } - - /** - * Constructor with current cmi service. - * - * @param cmiPolicyStrategyManager - * the policy strategy manager that will be used by the listener. - * This manager will be notified all events from a service that export - * policies/strategies. - * - */ - public LoadBalancingListener( - final CmiServicePolicyStrategyManager cmiPolicyStrategyManager) { - this.policyStrategyManager = cmiPolicyStrategyManager; - } - - /* - * (non-Javadoc) - * - * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent) - */ - public void serviceChanged(final ServiceEvent arg0) { - ServiceReference srvRef = arg0.getServiceReference(); - String location = srvRef.getBundle().getLocation(); - switch (arg0.getType()) { - case ServiceEvent.REGISTERED: - ILoadBalancingService loadBalancingService = (ILoadBalancingService) srvRef.getBundle().getBundleContext().getService(srvRef); - LOGGER.debug("Sending new load balancing archive '{0}' step 1: handling new archive registration.", - location); - try { - policyStrategyManager.addPolicyStrategyBundle(location, loadBalancingService.getPolicies(), - loadBalancingService.getStrategies()); - } catch (CmiServiceException e) { - LOGGER.error("Unable to load archive for load balacing policies/strategies located at {0} because: {1}", - location, e); - } - - break; - case ServiceEvent.MODIFIED: - LOGGER.debug("Registering modifications for load balacing policies/strategies archive located at: {0}", - location); - break; - case ServiceEvent.UNREGISTERING: - LOGGER.debug("Unregistering load balacing policies/strategies archive located on: {0}", - location); - try { - policyStrategyManager.removePolicyStrategyBundle(srvRef - .getBundle().getLocation()); - } catch (Exception e) { - // TODO Auto-generated catch block - LOGGER.error("Unable to unload archive for load balacing policies/strategies located at '" - + location + "' because " + e); - } - break; - - } - - } -} diff --git a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/event/BeanEventListener.java b/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/event/BeanEventListener.java deleted file mode 100644 index a9c49f06fd..0000000000 --- a/jonas/modules/services/cmi/core/src/main/java/org/ow2/jonas/cmi/internal/event/BeanEventListener.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cmi.internal.event; - -import java.util.Iterator; -import java.util.Set; - -import javax.ejb.EJBObject; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.cmi.controller.server.ServerClusterViewManager; -import org.ow2.cmi.info.CMIInfoExtractor; -import org.ow2.cmi.info.CMIInfoExtractorException; -import org.ow2.cmi.info.CMIInfoRepository; -import org.ow2.cmi.info.ClusteredObjectInfo; -import org.ow2.cmi.reference.CMIReference; -import org.ow2.cmi.reference.ServerRef; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.ee.event.listeners.AbsBeanEventListener; -import org.ow2.util.ee.event.types.BeanRegisterEvent; -import org.ow2.util.ee.event.types.BeanUnregisterEvent; -import org.ow2.util.event.api.IEvent; - -/** - * Listener for Beans events. - * @author eyindanga - */ -public class BeanEventListener extends AbsBeanEventListener { - /** - * Event provider filter. - */ - private static final String EVENT_PROVIDER_FILTER = "/beans/lifecycle/events"; - - /** - * Serial UID. - */ - private static final long serialVersionUID = 1L; - - /** - * Logger for traces. - */ - private static Logger cmilogger = Log.getLogger("org.ow2.jonas.cmi"); - - /** - * The clusterView manager. - */ - private ServerClusterViewManager clusterViewManager = null; - - /** - * Default constructor. - */ - public BeanEventListener(final ServerClusterViewManager clusterViewManager) { - super(EVENT_PROVIDER_FILTER); - this.clusterViewManager = clusterViewManager; - } - - /** - * Handles the given event. - * @param event the event to handle - */ - @Override - public void handle(final IEvent event) { - try { - if (BeanUnregisterEvent.class.isAssignableFrom(event.getClass())) { - removeClusteredObject(((BeanUnregisterEvent) event).getJndiName()); - } else if (BeanRegisterEvent.class.isAssignableFrom(event.getClass())) { - BeanRegisterEvent beanRegisterEvent = (BeanRegisterEvent) event; - addClusteredObject(beanRegisterEvent.getJndiName(), beanRegisterEvent.getClusterConfig(), - beanRegisterEvent.getHomeClass(), beanRegisterEvent.getRemoteClass(), - beanRegisterEvent.getClassLoader(), beanRegisterEvent.isStateful(), - beanRegisterEvent.isClusterReplicated()); - } else { - cmilogger.log(BasicLevel.DEBUG, "Unrecognized event type"); - } - } catch (Exception e) { - cmilogger.log(BasicLevel.ERROR, "Unable to handle event \n" + e); - } - - } - - /** - * Removes the given clustered object. - * @param jndiName Name of the object to remove - * @param clusterViewManager the server cluster view manager - * @throws Exception any - */ - public synchronized void removeClusteredObject(final String jndiName) - throws Exception { - cmilogger.log(BasicLevel.DEBUG, "Removing clustered object named :" + jndiName); - if (CMIInfoRepository.containClusteredObjectInfo(jndiName)) { - ServerRef serverRef = null; - Set protocols = clusterViewManager.getProtocols(); - for (Iterator iterator = protocols.iterator(); iterator.hasNext();) { - String proto = iterator.next(); - serverRef = clusterViewManager.getRefOnLocalRegistry(proto); - CMIReference cmiReference = new CMIReference(serverRef, jndiName); - try { - clusterViewManager.removeCMIReference(cmiReference); - } catch (Exception e) { - cmilogger.log(BasicLevel.DEBUG, jndiName + "Not bound in the with protocol " + proto); - } - } - CMIInfoRepository.removeClusteredObjectInfo(jndiName); - } - } - - /** - * Add a clustered bean. - * @param jndiName name of the bean - * @param clusterConfig The cluster configuration - * @param homeClass class of the home interface - * @param remoteClass class of the remote interface - * @param classLoader he classloader used by the container of this bean - * @param stateful true if the bean has a state - * @param clusterReplicated true if the bean is replicated (ha service is - * required) - * @throws Exception any. - */ - public synchronized void addClusteredObject(final String jndiName, final Object clusterConfig, final Class homeClass, - final Class remoteClass, final ClassLoader classLoader, final boolean stateful, - final boolean clusterReplicated) throws Exception { - if (clusterConfig != null) { - try { - ClusteredObjectInfo clusteredObjectInfo = - CMIInfoExtractor.extractClusteringInfoFromClusteredObject(clusterConfig, - homeClass, remoteClass, stateful, clusterReplicated, null); - CMIInfoRepository.addClusteredObjectInfo(jndiName, clusteredObjectInfo); - cmilogger.log(BasicLevel.INFO, "The object with name " + jndiName + " is clustered."); - } catch (CMIInfoExtractorException e) { - cmilogger.log(BasicLevel.ERROR, "Error when extracting infos about clustering for the object with name " - + jndiName, e); - throw new Exception("Error when extracting infos about clustering for the object with name " + jndiName, e); - } - } else { - cmilogger.log(BasicLevel.DEBUG, "Cluster configuration not set for the object : " + clusterConfig); - } - - } - -} diff --git a/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups b/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups deleted file mode 100644 index d27a036ced..0000000000 --- a/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups +++ /dev/null @@ -1,53 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" - -# Find jar with the jgroups classes -JGROUPSLIB=`find $JONAS_ROOT/repositories -name ow2-bundles-externals-jgroups*.jar` - -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JGROUPSLIB - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap org.jgroups.tests.Probe -timeout 500 $* diff --git a/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups.bat b/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups.bat deleted file mode 100755 index 77d418ab39..0000000000 --- a/jonas/modules/services/cmi/core/src/main/jonas-resources/bin/probeJgroups.bat +++ /dev/null @@ -1,69 +0,0 @@ -@Echo Off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -Rem --------------------------------------------- -Rem set environment -Rem --------------------------------------------- -if ["%JONAS_ROOT%"]==[""] goto setroot -call "%JONAS_ROOT%\bin\setenv.bat" - -Rem --------------------------------------------- -Rem set JAVA_OPTS -Rem --------------------------------------------- -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.base="%JONAS_BASE%" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Rem --------------------------------------------- -Rem include jgroups class -Rem THIS MUST BE UPDATED FOR WINDOWS !!!!!!!!!!!! -Rem unix: JGROUPSLIB=`find $JONAS_ROOT/repositories -name ow2-bundles-externals-jgroups*.jar` -Rem --------------------------------------------- -Rem Setting JGroups libraries. -for /r %JONAS_ROOT%/repositories %%i in (ow2-bundles-externals-jgroups*.jar) do (set JGROUPSLIB=%%i %JGROUPSLIB%) - - - -Set JONAS_CLASSPATH=%JGROUPSLIB%;%JONAS_CLASSPATH% - -Rem --------------------------------------------- -Rem Run java command -Rem --------------------------------------------- -Set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar - -%JAVA% %JAVA_OPTS% -cp "%JONAS_CLASSPATH%" org.ow2.jonas.client.boot.Bootstrap org.jgroups.tests.Probe -timeout 500 %1 %2 %3 %4 %5 %6 %7 %8 %9 -goto :EOF - -:setjava -echo JAVA_HOME not set. -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF diff --git a/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/cmi-config.xml b/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/cmi-config.xml deleted file mode 100644 index e31b5ed91a..0000000000 --- a/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/cmi-config.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/jgroups-cmi.xml b/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/jgroups-cmi.xml deleted file mode 100644 index 662346b415..0000000000 --- a/jonas/modules/services/cmi/core/src/main/jonas-resources/conf/jgroups-cmi.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/cmi/core/src/main/resources/META-INF/jonas-cmi-core.bnd b/jonas/modules/services/cmi/core/src/main/resources/META-INF/jonas-cmi-core.bnd deleted file mode 100644 index 735e62c036..0000000000 --- a/jonas/modules/services/cmi/core/src/main/resources/META-INF/jonas-cmi-core.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export-nothing -Export-Package !* - -Private-Package org.ow2.jonas.cmi.internal.* - -DynamicImport-Package org.ow2.cmi.*,\ - org.ow2.util.ee.event.types,\ - org.ow2.util.pool.*,\ - org.ow2.util.ee.event.listeners - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * diff --git a/jonas/modules/services/cmi/core/src/main/resources/metadata.xml b/jonas/modules/services/cmi/core/src/main/resources/metadata.xml deleted file mode 100644 index 08d5f3f3e0..0000000000 --- a/jonas/modules/services/cmi/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/cmi/core/src/main/templates/jonas-cmi.properties.template b/jonas/modules/services/cmi/core/src/main/templates/jonas-cmi.properties.template deleted file mode 100644 index 1e083e930d..0000000000 --- a/jonas/modules/services/cmi/core/src/main/templates/jonas-cmi.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -# -###################### JOnAS CMI service configuration -# -# Set the name of the implementation class of the CMI service. -jonas.service.cmi.class org.ow2.jonas.cmi.internal.CmiServiceImpl diff --git a/jonas/modules/services/cmi/pom.xml b/jonas/modules/services/cmi/pom.xml deleted file mode 100644 index 4db546dd19..0000000000 --- a/jonas/modules/services/cmi/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-cmi - pom - JOnAS :: Services :: CMI - - core - ant - - diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/pom.xml b/jonas/modules/services/deployable-monitor/core-for-addons/pom.xml deleted file mode 100644 index 62ad70e781..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/pom.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - jonas-deployable-monitor - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-deployable-monitor-core-for-addons - bundle - JOnAS :: Services :: Deployable Monitor :: Core for addons - - Analyze directories/file and send them to the deployer manager - - - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - commons-modeler - commons-modeler - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - org.ow2.bundles - ow2-util-substitution - ${ow2-bundles.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - depmonitor - - - org.ow2.jonas - jonas-deployable-monitor-core - ${project.version} - 3 - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java deleted file mode 100644 index 3c92253dbd..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java +++ /dev/null @@ -1,921 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.concurrent.ConcurrentHashMap; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.UnknownDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.api.report.IDeploymentReport; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; - -/** - * This monitor will search all the deployable from a list of directories.
    - * In development mode, this monitor will detect changes on the deployables and - * then restart or undeploy them if they have been changed or removed. - * @author Florent BENOIT - */ -public class DeployableMonitor extends Thread { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(DeployableMonitor.class); - - /** - * List of directories to analyze. - */ - private List directories = null; - - /** - * Development mode or not ? - */ - private boolean developmentMode = false; - - /** - * Monitor interval between each directory scan. - */ - private int monitorInterval; - - /** - * Stop order received ? - */ - private boolean stopped = false; - - /** - * Map between a File (monitored) and the last updated file. - */ - private Map modifiedFiles = null; - - /** - * List of deployed files (by this monitor). - */ - private Map> deployed = null; - - /** - * Map between a File and its last length known. - */ - private Map fileLengths = null; - - /** - * List of File that have a failed deployment (by this monitor). - */ - private List failed = null; - - /** - * List of File that are not known deployable. - */ - private List unknown = null; - - /** - * Deployer Manager. (that allow us to deploy Deployable). - */ - private IDeployerManager deployerManager = null; - - /** - * First launch of this monitor. - */ - private boolean firstCheck = true; - - /** - * Exclusion filter. - */ - private ExclusionFilenameFilter filter = null; - - /** - * Allow to inform the Service that the firstCheck ended. - */ - private DeployableMonitorService myService = null; - - /** - * Comparator used to sort the deployables. - */ - private Comparator sortDeployablesComparator = null; - - /** - * The Bundle context - */ - private BundleContext bundleContext = null; - - /** - * Constructor of this monitor. - * @param service the {@link DeployableMonitorService} instance - * @param bundleContext The bundle context - */ - public DeployableMonitor(final DeployableMonitorService service, final BundleContext bundleContext) { - this.directories = new LinkedList(); - this.modifiedFiles = new WeakHashMap(); - this.deployed = new ConcurrentHashMap>(); - this.fileLengths = new HashMap(); - this.failed = new ArrayList(); - this.unknown = new ArrayList(); - this.filter = new ExclusionFilenameFilter(); - this.myService = service; - this.sortDeployablesComparator = new SortableFileDeployableComparator(); - this.bundleContext = bundleContext; - } - - /** - * reset the state of all deployables. - */ - public void reset() { - if (firstCheck) { - return; - } - - this.modifiedFiles.clear(); - this.deployed.clear(); - this.fileLengths.clear(); - - for (File deployDirectory : directories) { - File[] files = deployDirectory.listFiles(filter); - - if (files == null) { - continue; - } - - for (File file : files) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - continue; - } - IDeployable deployable = this.myService.getDeployableHelper().getDeployable(archive); - if (deployerManager.isDeployed(deployable)) { - - deployed.put(file, deployable); - fileLengths.put(file, getFileSize(file)); - // hasBeenUpdated will update the modifiedFiles - hasBeenUpdated(file); - } - } catch (Throwable t) { - logger.warn("Cannot reset file {0}", file, t); - } - } - } - } - - /** - * Start the thread of this class.
    - * It will search and deploy files to deploy.
    - * In development mode, it will check the changes. - */ - @Override - public void run() { - for (;;) { - if (stopped) { - // Stop the thread - return; - } - - if (developmentMode || firstCheck) { - // Save file lengths in order to avoid deploying file for which copy is in process - saveFileLengths(); - - // 20% of the monitor interval is spent to wait in order to guarantee the file integrity - // If the file is being copied, the file size increases in the time - try { - Thread.sleep((long) (monitorInterval * 0.2)); - } catch (InterruptedException e) { - throw new RuntimeException("Thread fail to sleep"); - } - - // Undeploy/ReDeploy archives for deployed modules - updateArchives(); - - // Check new archives/containers to start - checkNewArchives(); - - if (firstCheck) { - final String failStartOnError = System.getProperty("jonas.start.nofail"); - if (!this.developmentMode && failStartOnError != null && Boolean.parseBoolean(failStartOnError)) { - //check if there is at least one deployable with a fail deployment - if (!this.failed.isEmpty()) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("The deployment of " + this.failed.size() + " deployable"); - if (this.failed.size() > 1) { - stringBuilder.append("s"); - } - stringBuilder.append(" has failed. The server is going to shut down."); - logger.error(stringBuilder.toString()); - //stop the server - Bundle bundle = this.bundleContext.getBundle(0); - try { - bundle.stop(); - } catch (BundleException e) { - logger.error("Cannot stop bundle " + bundle.getLocation(), e); - } - } - } - myService.firstCheckEnded(); - } - - // Next step, we will be in a checking step. - firstCheck = false; - } - - try { - Thread.sleep((long) (monitorInterval * 0.8)); - } catch (InterruptedException e) { - throw new RuntimeException("Thread fail to sleep"); - } - } - } - - /** - * Save file lengths in scanned directories. - */ - private void saveFileLengths() { - // Clear Map - fileLengths.clear(); - - for (File deployDirectory : directories) { - // Get files - File[] files = deployDirectory.listFiles(filter); - - // Next directory if there are no files to scan. - if (files == null) { - continue; - } - - for (File file : files) { - try { - fileLengths.put(file, getFileSize(file)); - } catch (Exception e) { - // File cannot be read - // or a sub file is not completed (in case of a directory) - } - } - } - } - - /** - * The windows related method test if the file is complete (any write - * operations on the given file are finished). - * @param file tested file (regular file only) - * @throws java.io.IOException if the given file is not completed (only thrown - * under windows when file is not completed) - */ - private static void checkFileCompleteness(final File file) throws IOException { - if (file.isFile()) { - // Try to open an input stream on the file - // This should throw an exception if the file copy is not finished (Windows only) - FileInputStream fis = new FileInputStream(file); - fis.close(); - } - } - - /** - * Return the file or directory size. - * @param file a file or directory - * @return the total file size (files in folders included) - * @throws Exception if one of the analyzed files was not completed - */ - private static long getFileSize(final File file) throws Exception { - if (file.isFile()) { - checkFileCompleteness(file); - return file.length(); - } - - // Directory case - long size = 0; - File[] childs = file.listFiles(); - for (File child : childs) { - // Add the size of the child - size += getFileSize(child); - } - - return size; - - } - - /** - * Check new archives/containers. - */ - private void checkNewArchives() { - try { - detectNewArchives(); - } catch (Exception e) { // Catch all exception - logger.error("Problem when trying to find and deploy new archives", e); - } catch (Error e) { - logger.error("Error when trying to find and deploy new archives", e); - } - } - - /** - * Undeploy/ReDeploy archives for deployed modules. - */ - private void updateArchives() { - try { - checkModifiedDeployables(); - } catch (Exception e) { // Catch all exception - logger.error("Problem when checking current deployables", e); - } catch (Error e) { - logger.error("Error when checking current deployables", e); - } - } - - /** - * Scan all files present in the deploy directory and deploy them. (if not - * deployed). - */ - private void detectNewArchives() { - - for (File deployDirectory : directories) { - // get files - File[] files = deployDirectory.listFiles(filter); - - // next directory if there are no files to scan. - if (files == null) { - continue; - } - - // Sort the files by names - Arrays.sort(files, new LexicographicallyFileComparator()); - - // Sort the file by type (first check only) - if (firstCheck) { - // Build a list of deployable - List deployables = new LinkedList(); - - // for each file - for (File f : files) { - // Get deployable - IArchive archive = ArchiveManager.getInstance().getArchive(f); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", f); - continue; - } - - IDeployable deployable; - try { - deployable = this.myService.getDeployableHelper().getDeployable(archive); - } catch (DeployableHelperException e) { - // Deployment of this deployable has failed - failed.add(f); - logger.error("Cannot get a deployable for the archive ''{0}''", archive, e); - continue; - } - - deployables.add(new SortableFileDeployable(f, deployable)); - } - - // Sort the deployables by using the given comparator - Collections.sort(deployables, sortDeployablesComparator); - - - // Add files sorted from the comparator - List filesToDeploy = new ArrayList(); - for (SortableFileDeployable sortableFileDeployable : deployables) { - filesToDeploy.add(sortableFileDeployable.getFile()); - } - - if (filesToDeploy.size() > 0) { - logger.info("Deployables to deploy at startup: [{0}]", deployables); - } - - // Update the array - files = filesToDeploy.toArray(new File[filesToDeploy.size()]); - - } - - //list of deployable to deploy - Map> deployablesToDeploy = new HashMap>(); - - // analyze each file to detect new modules that are not yet deployed. - for (File file : files) { - // Already deployed ? - if (deployed.containsKey(file)) { - // yes, then check other files - continue; - } - - // File length has changed: file copy is not finished ? - if (fileLengthHasChanged(file)) { - continue; - } - - // This module has failed previously ? - if (failed.contains(file)) { - // If the module hasn't been updated, no need to deploy it again as it will fails again - if (!hasBeenUpdated(file)) { - continue; - } - // Cleanup the previous failure and try again the deployment - failed.remove(file); - } - - // Else, get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", file); - continue; - } - IDeployable deployable; - try { - deployable = this.myService.getDeployableHelper().getDeployable(archive); - } catch (DeployableHelperException e) { - // Deployment of this deployable has failed - failed.add(file); - logger.error("Cannot get a deployable for the archive ''{0}''", archive, e); - continue; - } - - // Unkown deployable, do not deploy it for now - if (UnknownDeployable.class.isInstance(deployable)) { - if (!unknown.contains(file)) { - unknown.add(file); - logger.error("The archive ''{0}'' is flagged as unkwnown deployable. Do not deploy it", archive); - } - continue; - } - - - // File is not an unknown deployable anymore, remove it - if (unknown.contains(file)) { - unknown.remove(file); - logger.info("The archive ''{0}'' is not anymore an unknown deployable, deploy it now as ''{1}''", archive, - deployable); - } - - // Already deployed ? (don't check DeploymentPlanDeployable) - try { - if (deployerManager.isDeployed(deployable) && !DeploymentPlanDeployable.class.isInstance(deployable)) { - deployed.put(file, deployable); - continue; - } - } catch (Exception e) { - // Deployable not supported. - } - - - if (stopped) { - // Don't deploy new archives after the reception of a stop order - return; - } - - deployablesToDeploy.put(file, deployable); - logger.debug("Detect a new Deployable ''{0}'' and deploying it.", deployable); - } - - //Now deploy files - try { - List deploymentReports = this.deployerManager.deploy(new ArrayList>( - deployablesToDeploy.values())); - - for (Map.Entry> entry: deployablesToDeploy.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - - if (deploymentReport == null || deploymentReport.isDeploymentOk()) { - // Store the new deployable - this.deployed.put(file, deployable); - } else { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - this.failed.add(file); - logger.error("DeployerException : Cannot deploy the deployable ''{0}''", deployable, - deploymentReport.getException()); - } else { - // Deployment of this deployable is not supported. - // We will try to deploy this file in the next detection cycle. - } - } - } - - // Perform a garbage collector to avoid file lock - System.gc(); - } catch (RuntimeException e) { - // Runtime exception but deployment has failed - this.failed.addAll(deployablesToDeploy.keySet()); - for (IDeployable deployable: deployablesToDeploy.values()) { - logger.error("RuntimeException : Cannot deploy the deployable ''{0}''", deployable, e); - } - } catch (Error e) { - // Error but deployment has failed - this.failed.addAll(deployablesToDeploy.keySet()); - for (IDeployable deployable: deployablesToDeploy.values()) { - logger.error("Error : Cannot deploy the deployable ''{0}''", deployable, e); - } - } - } - } - - /** - * - * @param deployable The {@link IDeployable} - * @param deploymentReports The list of {@link IDeploymentReport} - * @return the {@link IDeploymentReport} associated to the given deployable - */ - private IDeploymentReport getDeploymentReport(final IDeployable deployable, final List deploymentReports) { - for (IDeploymentReport deploymentReport: deploymentReports) { - if (deploymentReport.getDeployable().equals(deployable)) { - return deploymentReport; - } - } - return null; - } - - /** - * Gets the last modified attribute of a given archive.
    If it is a - * directory, returns the last modified file of the archive. - * @param archive the archive to monitor. - * @return the last modified version of the given archive. - */ - protected long getLastModified(final File archive) { - if (archive.isFile()) { - return archive.lastModified(); - } - // else - File[] files = archive.listFiles(); - long last = 0; - if (files != null) { - for (File f : files) { - last = Math.max(last, getLastModified(f)); - } - } - return last; - } - - /** - * Check if the given file has been updated since the last check. - * @param file the file to test - * @return true if the archive has been updated - */ - protected boolean hasBeenUpdated(final File file) { - // File length has changed: file copy is not finished ? - if (fileLengthHasChanged(file)) { - return false; - } - - // get lastmodified for this URL - long previousLastModified = 0; - Long l = modifiedFiles.get(file); - if (l != null) { - previousLastModified = l.longValue(); - } - - long updatedModified = getLastModified(file); - - // first check. nothing to do - if (previousLastModified == 0) { - // Store initial time - modifiedFiles.put(file, Long.valueOf(updatedModified)); - return false; - } - // URL has been updated since the last time - if (updatedModified > previousLastModified) { - modifiedFiles.put(file, Long.valueOf(updatedModified)); - return true; - } - - return false; - } - - /** - * Check if the current deployables that are deployed have been updated. - * If it is the case, undeploy them and then deploy it again (except for EJB3 Deployable where there is a stop/start). - */ - private void checkModifiedDeployables() { - // Get list of files that are failed - Iterator fileIterator = failed.iterator(); - - // For each failed module, check if the module has been removed - while (fileIterator.hasNext()) { - File f = fileIterator.next(); - // File has been removed - if (!f.exists()) { - fileIterator.remove(); - } - } - - // Get list of files that are undeployed - Set files = deployed.keySet(); - for (File f : files) { - IDeployable deployable = deployed.get(f); - try { - if (!deployerManager.isDeployed(deployable)) { - deployed.remove(f); - } - } catch (Exception e) { - deployed.remove(f); - } - } - - // Nothing to do if no modules are deployed. - if (files == null) { - return; - } - - //list of deployable to undeploy - Map> deployablesToUnDeploy = new HashMap>(); - - //list of deployable to update - Map> deployablesToUpdate = new HashMap>(); - - // For each deployed module that is not an EJB3, check if the module has been updated - for (File f : files) { - IDeployable deployable = deployed.get(f); - - // Not yet deployed ? - if (deployable == null) { - continue; - } - - // File has been removed - if (!f.exists()) { - // undeploy - logger.info("Deployable ''{0}'' has been removed on the filesystem, undeploy it", deployable); - deployablesToUnDeploy.put(f, deployable); - continue; - } - - // Update has been detected, need to undeploy and then to deploy again - if (hasBeenUpdated(f)) { - logger.info("Deployable ''{0}'' has been updated, reloading it", deployable); - deployablesToUpdate.put(f, deployable); - } - } - - //Undeploy files which have been removed - try { - List deploymentReports = this.deployerManager.undeploy(new ArrayList>( - deployablesToUnDeploy.values())); - - for (Map.Entry> entry: deployablesToUnDeploy.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport != null && !deploymentReport.isDeploymentOk()) { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - logger.error("Undeploy of the deployable '" + deployable + "' has failed", - deploymentReport.getException()); - this.failed.add(file); - } else { - // Undeployment of this deployable is not supported. - // We will try to undeploy this file in the next detection cycle. - } - } - } - - // Perform a garbage collector to avoid file lock during redeployment - System.gc(); - } catch (RuntimeException e) { - for (Map.Entry> entry: deployablesToUnDeploy.entrySet()) { - logger.error("Undeploy of the deployable '" + entry.getValue() + "' has failed", e); - this.failed.add(entry.getKey()); - } - } finally { - for (File file: deployablesToUnDeploy.keySet()) { - // even in error case, the file should have been removed - this.deployed.remove(file); - } - } - - - //update deployables - boolean undeploymentIsOk = true; - List deploymentReports = this.deployerManager.undeploy(new ArrayList>( - deployablesToUpdate.values())); - for (Map.Entry> entry: deployablesToUpdate.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport != null && !deploymentReport.isDeploymentOk()) { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - logger.error("Undeploy of the deployable '" + deployable + "' has failed", - deploymentReport.getException()); - // Deployment has failed, it is now undeployed - this.failed.add(file); - } else { - // Undeployment of this deployable is not supported. - // We will try to undeploy this file in the next detection cycle. - undeploymentIsOk = false; - } - } - if (undeploymentIsOk) { - this.deployed.remove(file); - } - } - // Perform a garbage collector to avoid file lock during redeployment - System.gc(); - - - if (undeploymentIsOk) { - - // Get a new deployables - Map> newDeployables = new LinkedHashMap>(); - for (File file: deployablesToUpdate.keySet()) { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", file); - } else { - try { - newDeployables.put(file, this.myService.getDeployableHelper().getDeployable(archive)); - } catch (DeployableHelperException e) { - logger.error("Cannot get a deployable for the archive '" + archive + "'", e); - } - } - } - - //deploy new deployables - deploymentReports = this.deployerManager.deploy(new ArrayList>( - newDeployables.values())); - for (Map.Entry> entry: newDeployables.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport == null || deploymentReport.isDeploymentOk()) { - // Store the new deployable - this.deployed.put(file, deployable); - } else { - if (deploymentReport.getException() instanceof UnsupportedDeployerException) { - // Deployment of this deployable is not supported. - // We will try to deploy this file in the next detection cycle. - } else { - // Deployment of this deployable has failed - this.failed.add(file); - logger.error("Error : Cannot redeploy the deployable ''{0}''", deployable, - deploymentReport.getException()); - } - } - } - // Perform a garbage collector to avoid file lock - System.gc(); - } - } - - /** - * Check if the file length has changed. - * @param file The given file - * @return True if the file length has changed - */ - private boolean fileLengthHasChanged(final File file) { - // File length not known - if (!fileLengths.containsKey(file)) { - return true; - } - - long storedFileLength = fileLengths.get(file); - long currentFileLength = 0; - try { - currentFileLength = getFileSize(file); - } catch (Exception e) { - // File cannot be checked, probably the file is being written. - return true; - } - if (storedFileLength != currentFileLength) { - // File length has changed - return true; - } - - // No change in file length - return false; - } - - /** - * @return the list of directories that this monitor is monitoring. - */ - public List getDirectories() { - return directories; - } - - /** - * Sets the list of directories to monitor. - * @param directories the list of directories to use. - */ - public void setDirectories(final List directories) { - this.directories = directories; - } - - /** - * Add a directory to the list of directories to monitor. - * @param directory the directory to add - */ - public void addDirectory(final File directory) { - directories.add(directory); - } - - /** - * Remove a directory to the list of directories to monitor. - * @param directory the directory to remove - */ - public void removeDirectory(final File directory) { - directories.remove(directory); - } - - /** - * @return true if the development is enabled, else false (production mode). - */ - public boolean isDevelopmentMode() { - return developmentMode; - } - - /** - * Enable or disable the development mode. - * @param developmentMode true if it has to be enabled. - */ - public void setDevelopmentMode(final boolean developmentMode) { - this.developmentMode = developmentMode; - } - - /** - * Set the monitor interval between each directory scan. - * @param monitorInterval value to set - */ - public void setMonitorInterval(final int monitorInterval) { - this.monitorInterval = monitorInterval; - } - - /** - * Receives a stop order. - */ - public void stopOrder() { - this.stopped = true; - } - - /** - * @return the instance of the deployer manager. - */ - public IDeployerManager getDeployerManager() { - return deployerManager; - } - - /** - * Sets the deployer manager for deployers. - * @param deployerManager the instance of the deployer manager. - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * @param patterns List of exclusion patterns. - */ - public void setExclusionPatterns(final List patterns) { - filter.setExclusionList(patterns); - } - - /** - * @return the sort comparator for deployables - */ - public Comparator getSortDeployablesComparator() { - return sortDeployablesComparator; - } - - /** - * Defines the comparator used for deployables. - * @param sortDeployablesComparator the given comparator - */ - public void setSortDeployablesComparator(final Comparator sortDeployablesComparator) { - this.sortDeployablesComparator = sortDeployablesComparator; - } -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java deleted file mode 100644 index 8669b639b0..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -/** - * Component exception if the component has some errors. - * @author Florent Benoit - */ -public class DeployableMonitorException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = 191216840656391462L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public DeployableMonitorException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public DeployableMonitorException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public DeployableMonitorException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new exception with the specified cause and a detail message - * of (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This - * constructor is useful for exceptions that are little more than wrappers - * for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public DeployableMonitorException(final Throwable cause) { - super(cause); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java deleted file mode 100644 index 526c417579..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java +++ /dev/null @@ -1,487 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import org.osgi.framework.BundleContext; -import org.ow2.jonas.depmonitor.MonitoringService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.substitution.engine.DefaultSubstitutionEngine; -import org.ow2.util.substitution.resolver.PropertiesResolver; - -/** - * Service that will launch the Deployable Monitor. - * @author Florent BENOIT - */ -public class DeployableMonitorService extends AbsServiceImpl implements MonitoringService { - - /** - * Property for the development mode. - */ - public static final String DEVELOPMENT_MODE_PROPERTY = "development"; - - /** - * Property for the list of extra directories to analyze. - */ - public static final String DIRECTORIES_LIST_PROPERTY = "directories"; - - /** - * The name of the JONAS_BASE directory. - */ - protected static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * Name as used to label configuration properties. - */ - public static final String SERVICE_NAME = "depmonitor"; - - static final String MONITOR_INTERVAL = "jonas.service.depmonitor.monitorInterval"; - - static final String DEVELOPMENT = "jonas.service.depmonitor.development"; - /** - * Logger. - */ - private Log logger = LogFactory.getLog(DeployableMonitorService.class); - - /** - * Development mode or not ? Default is true. - */ - private boolean developmentMode = true; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * List of directories. - */ - private List directories = null; - - /** - * Link to the deployable monitor. - */ - private DeployableMonitor deployableMonitor = null; - - /** - * Reference to the J2EEServer service. - */ - private J2EEServerService j2eeServer = null; - - /** - * Monitor interval between each directory scan. - */ - private int monitorInterval; - - /** - * Ordered deployables. - */ - private String orderedDeployables = null; - - /** - * DeployableHelper - */ - private IDeployableHelper deployableHelper = null; - - /** - * The bundle context - */ - private BundleContext bundleContext = null; - - /** - * Default constructor. - * @param bundleContext The bundleContext - */ - public DeployableMonitorService(final BundleContext bundleContext) { - this.directories = new LinkedList(); - this.deployableMonitor = new DeployableMonitor(this, bundleContext); - } - - /** - * Start the Deployable Monitor service. - * @throws org.ow2.jonas.service.ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - logger.info("Use the deploy directories ''{0}'', development mode is ''{1}''", directories, developmentMode); - - // Add the default directory - File defaultDirectory = new File(j2eeServer.getUploadDirectory()); - if (!defaultDirectory.exists()) { - logger.info("Creating default deploy directory ''{0}''", defaultDirectory); - defaultDirectory.mkdirs(); - } - directories.add(defaultDirectory); - - // Load the Descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // And register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.deployableMonitorService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for Deployable Monitor service", e); - } catch (Throwable t) { - t.printStackTrace(); - } - } - - /** - * Starts the {@link DeployableMonitor} instance. - */ - public void startMonitoring() { - if (!getDeployableMonitor().isAlive()) { - logger.debug("Start DeployableMonitor"); - deployableMonitor.start(); - } - } - - /** - * Stop the Deployable Monitor service. - * @throws org.ow2.jonas.service.ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Unregister MBean - if (jmxService != null) { - try { - jmxService.unregisterModelMBean(JonasObjectName.deployableMonitorService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot unregister MBean for Deployable Monitor service", e); - } - } - // Stop deploy monitor - deployableMonitor.stopOrder(); - /** - * Don't keep the resources. - */ - deployableMonitor = null; - - logger.info("DeployableMonitor stopped successfully"); - - } - - /** - * @param dirs List of deployment directories to observe. - */ - public void setDirectories(final String dirs) { - List additionalDirectories = convertToList(dirs); - boolean addDirectory = true; - for (String dir : additionalDirectories) { - updateDirectories(dir, addDirectory); - } - - getDeployableMonitor().setDirectories(directories); - } - - /** - * Update the directories datastructure. - * @param dir directory to add - * @param addOp if true, add new directory, if false, remove directory - * @return true if update occured - */ - private boolean updateDirectories(final String dir, final boolean addOp) { - - DefaultSubstitutionEngine engine = new DefaultSubstitutionEngine(); - engine.setResolver(new PropertiesResolver(System.getProperties())); - - String substitutedDir = engine.substitute(dir); - File tmpFile = new File(substitutedDir); - - // Not an absolute file, should be relative to JONAS_BASE. - if (!tmpFile.isAbsolute()) { - tmpFile = new File(JONAS_BASE + File.separator + substitutedDir); - } - - // Directory exists ? - if (!tmpFile.exists()) { - logger.warn("The given directory ''{0}'' is neither present on the filesystem or in JONAS_BASE ''{1}''", - tmpFile, JONAS_BASE); - return false; - } - if (addOp) { - // Add the directory - return directories.add(tmpFile); - } else { - return directories.remove(tmpFile); - } - } - - /** - * @param exclusionList The list of exclusion patterns. - */ - public void setExclusions(final String exclusionList) { - List exclusions = convertToList(exclusionList); - getDeployableMonitor().setExclusionPatterns(exclusions); - } - - /** - * @param deployerManager the {@link org.ow2.util.ee.deploy.api.deployer.IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - // update the monitor object - getDeployableMonitor().setDeployerManager(deployerManager); - } - - /** - * Sets the deployer helper - * @param deployableHelper The instance of the deployer helper - */ - public void setDeployableHelperComponent(final IDeployableHelper deployableHelper) { - this.deployableHelper = deployableHelper; - } - - /** - * - * @return The instance of the deployer helper - */ - public IDeployableHelper getDeployableHelper() { - return deployableHelper; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param j2eeServer the j2eeServer to set - */ - public void setJ2EEServer(final J2EEServerService j2eeServer) { - this.j2eeServer = j2eeServer; - } - - /** - * Called when the DeploymentMonitor has finished its first round of - * deployment (all that was under deploy/ at startup time). - */ - public void firstCheckEnded() { - j2eeServer.setRunning(); - } - - /** - * Set developmentMode value to true (enable), or to false (disable). Component (IPOJO) initializer. - * "inherit" case: correspondence between the service and the server - * development mode - * @param mode value to set - */ - public void setDevelopmentMode(final String mode) { - if (mode.equals("inherit")) { - developmentMode = getServerProperties().isDevelopment(); - } else { - developmentMode = Boolean.parseBoolean(mode); - } - - setDevelopmentMode(developmentMode); - } - - /** - * Set developmentMode value to true (enable), or to false (disable). - * @param mode value to set - */ - public void setDevelopmentMode(final boolean mode) { - developmentMode = mode; - - // if development mode has been enabled on the fly, - // make sure the deployables' status are reset - if (developmentMode && j2eeServer.isRunning()) { - getDeployableMonitor().reset(); - } - - // update the monitor object - getDeployableMonitor().setDevelopmentMode(developmentMode); - } - - /** - * Set the monitor interval between each directory scan. Component (IPOJO) initializer. - * @param monitorInterval value to set - */ - public void setMonitorInterval(final int monitorInterval) { - this.monitorInterval = monitorInterval; - - // update the monitor object - getDeployableMonitor().setMonitorInterval(monitorInterval); - } - - /** - * Get the deployable monitor. - * @return the deployable monitor - */ - private DeployableMonitor getDeployableMonitor() { - // Create a new instance if necessary. - if (deployableMonitor == null) { - deployableMonitor = new DeployableMonitor(this, this.bundleContext); - } - return deployableMonitor; - } - - // Management operations - // --------------------- - - /** - * @return true if the development mode set to true. - */ - public boolean isDevelopment() { - return developmentMode; - } - - /** - * Set developmentMode value to true (enable), or to false (disable). Management operation. - * "inherit" case: correspondence between the service and the server - * development mode - * @param mode value to set - */ - public void setDevelopment(final boolean mode) { - String developmentMode = (new Boolean(mode)).toString(); - setDevelopmentMode(developmentMode); - - // Send a notification containing the new value of this property to the - // listener MBean - String propName = DEVELOPMENT; - String propValue = developmentMode; - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * Sets the list of deployables to use. - * @param deployables the given deployables to use - */ - public void setOrderedDeployables(final String deployables) { - // Convert list - List ordering = convertToList(deployables); - - // sets the new comparator - SortableFileDeployableComparator sortableFileDeployableComparator = new SortableFileDeployableComparator(); - sortableFileDeployableComparator.setOrderedDeployables(ordering); - this.deployableMonitor.setSortDeployablesComparator(sortableFileDeployableComparator); - } - - /** - * Returns the monitor interval between each directory scan. - */ - public int getMonitorPeriod() { - return this.monitorInterval; - } - - /** - * Set the monitor interval between each directory scan. Management method. - * @param monitorInterval value to set - */ - public void setMonitorPeriod(final int monitorInterval) { - setMonitorInterval(monitorInterval); - // Send a notification containing the new value of this property to the - // listener MBean - String propName = MONITOR_INTERVAL; - String propValue = new Integer(monitorInterval).toString(); - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * The list of the directory names. - * @return The list of the directory names. - */ - public String[] getDirectoryNames() { - ArrayList result = new ArrayList(); - Iterator it = directories.iterator(); - while (it.hasNext()) { - File directory = it.next(); - result.add(directory.getName()); - } - String[] dirNames = new String[result.size()]; - int i = 0; - for (String dir : result) { - dirNames[i++] = dir; - } - return dirNames; - } - - /** - * Add a new deployment directory (management operation). - * @param directory the directory name. - */ - public void addDirectory(final String directory) { - if (updateDirectories(directory, true)) { - getDeployableMonitor().setDirectories(directories); - } - } - - /** - * Add a new deployment directory (management operation). - * @param directory the directory name. - */ - public void removeDirectory(final String directory) { - if (updateDirectories(directory, false)) { - getDeployableMonitor().setDirectories(directories); - } - } - - /** - * Checks if a given directory is a deployment directory monitored by this service. - * @param dir the directory name - * @return true if the directory is a deployment directory - */ - public boolean isDepmonitorDir(final String dir) { - Iterator it = directories.iterator(); - while (it.hasNext()) { - File directory = it.next(); - try { - if (directory.getCanonicalPath().equals(dir)) { - return true; - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return false; - } - - /** - * Save updated configuration. - */ - public void saveConfig() { - // Send save reconfig notification - sendSaveNotification(getSequenceNumber(), SERVICE_NAME); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java deleted file mode 100644 index 7945ed260f..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.FilenameFilter; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -/** - * Exclude monitored filenames based on patterns. - * By default, system files are excluded too (starting with '.') - * @author Guillaume Sauthier - */ -public class ExclusionFilenameFilter implements FilenameFilter { - - /** - * Exclusion patterns. - */ - private List patterns = new ArrayList(); - - /** - * Tests if a specified file should be included in a file list. - * @param dir the directory in which the file was found. - * @param name the name of the file. - * @return true if and only if the name should be - * included in the file list; false otherwise. - */ - public boolean accept(final File dir, final String name) { - // Exclude system files, backup files or file matching the patterns. - if(name.startsWith(".") || name.endsWith("~") || match(name)) { - return false; - } - return true; - } - - /** - * @param name filename to be matched. - * @return true if the file name matches one the patterns. - */ - private boolean match(final String name) { - for (String pattern : patterns) { - if (Pattern.matches(pattern, name)) { - return true; - } - } - return false; - } - - /** - * @param patterns list of filename patterns to be excluded. - */ - public void setExclusionList(final List patterns) { - this.patterns = patterns; - } - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java deleted file mode 100644 index 9046093407..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.util.Comparator; - -/** - * Sort a list of files by using an lexicographically order. - * @author Florent BENOIT - * - */ -public class LexicographicallyFileComparator implements Comparator { - - /** - * Compare two files. - * @param file1 the first file to compare - * @param file2 the second file to compare. - * @return compare mode between - */ - public int compare(final File file1, final File file2) { - return file1.getName().compareToIgnoreCase(file2.getName()); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java deleted file mode 100644 index a6278602a6..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Class that stores a file and the associated deployable and that can be - * sorted. - * @author Florent Benoit - */ -public class SortableFileDeployable { - - /** - * File that represents the associated deployabled. - */ - private File file = null; - - /** - * Deployable object linked to the given file. - */ - private IDeployable deployable = null; - - /** - * Defines the file and its deployable. - * @param file the given file - * @param deployable the given deployable - */ - public SortableFileDeployable(final File file, final IDeployable deployable) { - this.file = file; - this.deployable = deployable; - } - - /** - * @return the file - */ - public File getFile() { - return file; - } - - /** - * @return the deployable - */ - public IDeployable getDeployable() { - return deployable; - } - - /** - * @return string representation of this sorted deployable. - */ - @Override - public String toString() { - String deployableClassName = deployable.getClass().getSimpleName(); - String DEP = "DeployableImpl"; - if (deployableClassName.endsWith(DEP)) { - deployableClassName = deployableClassName.substring(0, deployableClassName.length() - DEP.length()); - } - - return "[".concat(deployableClassName).concat(":").concat(file.getPath()).concat("]"); - } - - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java deleted file mode 100644 index b9b91b7f5a..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -/** - * Comparator used to sort the deployables in the wanted order. - * @author Florent Benoit - */ -public class SortableFileDeployableComparator implements Comparator { - - /** - * Ordered deployables. - */ - private List orderedDeployables = null; - - /** - * Default constructor. - */ - public SortableFileDeployableComparator() { - this.orderedDeployables = new ArrayList(); - } - - /** - * Sets the given list of ordered deployables that we should use to select our order. - * @param orderedDeployables the given list - */ - public void setOrderedDeployables(final List orderedDeployables) { - this.orderedDeployables = orderedDeployables; - } - - /** - * @param sortableFileDeployable the deployable from which we will get the index - * @return the index value from the ordered list - */ - private int index(final SortableFileDeployable sortableFileDeployable) { - // Unknown, return the max value so that it will be ordered at the end - if (sortableFileDeployable == null) { - return Integer.MAX_VALUE; - } - - String deployableClassName = sortableFileDeployable.getDeployable().getClass().getName(); - - // Search with the full name - int index = this.orderedDeployables.indexOf(deployableClassName); - if (index == -1) { - // search with fragment - int i = 0; - boolean found = false; - while (i < orderedDeployables.size() && !found) { - String name = orderedDeployables.get(i); - if (deployableClassName.toLowerCase().contains(name.toLowerCase())) { - // found it - found = true; - break; - } - i++; - } - if (!found) { - index = Integer.MAX_VALUE; - } else { - index = i; - } - } - return index; - } - - /** - * Compare two deployables and return a value to sort them. - * @param sortableFileDeployable1 first archive to compare - * @param sortableFileDeployable2 the other archive to compare - * @return a compare value that allows to sort the given deployables - */ - @Override - public int compare(final SortableFileDeployable sortableFileDeployable1, - final SortableFileDeployable sortableFileDeployable2) { - - // Get index of the two deployables - int index1 = index(sortableFileDeployable1); - int index2 = index(sortableFileDeployable2); - - // Return order - if (index1 > index2) { - return 1; - } else if (index1 == index2) { - // use of lexicographic order when the deployable are with the same kind of deployable - return sortableFileDeployable1.getFile().getName().compareTo(sortableFileDeployable2.getFile().getName()); - } else { - return -1; - } - - } - -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java deleted file mode 100644 index 933ec00d1b..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployablemonitor.mbean; - -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -import org.ow2.jonas.lib.management.services.JOnASServiceModelMBean; - -/** - * Provides Model MBean for the depmonitor service. - * @author danesa - */ -public class DeployableMonitorServiceMBean extends JOnASServiceModelMBean { - - public DeployableMonitorServiceMBean() throws MBeanException, RuntimeOperationsException { - super(); - } -} diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/META-INF/jonas-deployable-monitor-core-for-addons.bnd b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/META-INF/jonas-deployable-monitor-core-for-addons.bnd deleted file mode 100644 index 6ca2bcd2b0..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/META-INF/jonas-deployable-monitor-core-for-addons.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.deployablemonitor.* - diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/metadata.xml b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/metadata.xml deleted file mode 100644 index cf9096d662..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/metadata.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml deleted file mode 100644 index 683a5a909a..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/templates/jonas-depmonitor.properties.template b/jonas/modules/services/deployable-monitor/core-for-addons/src/main/templates/jonas-depmonitor.properties.template deleted file mode 100644 index 90f211df31..0000000000 --- a/jonas/modules/services/deployable-monitor/core-for-addons/src/main/templates/jonas-depmonitor.properties.template +++ /dev/null @@ -1,37 +0,0 @@ -# -###################### JOnAS Deployment Monitor -# -jonas.services depmonitor -# Set the name of the implementation class of the depmonitor service -# -jonas.service.depmonitor.class org.ow2.jonas.deployablemonitor.DeployableMonitorService - -# Set the execution mode (three possible values): -# - inherit: inherit of the value of the "jonas.development" key -# - true : development mode -# - false : production mode -jonas.service.depmonitor.development inherit - -jonas.service.depmonitor.directories -# List (comma separated) of exclusion patterns (based on names, not directories) -jonas.service.depmonitor.exclusions README - -# Monitor interval in milliseconds -jonas.service.depmonitor.monitorInterval 5000 - -# Ordering used by the depmonitor service when deploying new deployables. -# Note: Tweaking this ordering may lead to deployable missing some stuff -# (for example if repository deployables are deployed at the end, -# this will lead to errors for deployable referencing these repositories -jonas.service.depmonitor.ordering Repository, \ - Addon, \ - OSGi, \ - RAR, \ - Datasource, \ - DeploymentPlan, \ - ConfigAdmin, \ - EJB2, \ - EJB3, \ - EAR, \ - WAR - diff --git a/jonas/modules/services/deployable-monitor/core/pom.xml b/jonas/modules/services/deployable-monitor/core/pom.xml deleted file mode 100644 index 84f17a3c06..0000000000 --- a/jonas/modules/services/deployable-monitor/core/pom.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - jonas-deployable-monitor - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-deployable-monitor-core - bundle - JOnAS :: Services :: Deployable Monitor :: Core - - Analyze directories/file and send them to the deployer manager - - - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - commons-modeler - commons-modeler - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - org.ow2.bundles - ow2-util-substitution - ${ow2-bundles.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - depmonitor - - - org.ow2.jonas - jonas-deployable-monitor-core - ${project.version} - 3 - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java deleted file mode 100644 index dc9d7beec8..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitor.java +++ /dev/null @@ -1,921 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.concurrent.ConcurrentHashMap; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.UnknownDeployable; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.api.report.IDeploymentReport; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; - -/** - * This monitor will search all the deployable from a list of directories.
    - * In development mode, this monitor will detect changes on the deployables and - * then restart or undeploy them if they have been changed or removed. - * @author Florent BENOIT - */ -public class DeployableMonitor extends Thread { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(DeployableMonitor.class); - - /** - * List of directories to analyze. - */ - private List directories = null; - - /** - * Development mode or not ? - */ - private boolean developmentMode = false; - - /** - * Monitor interval between each directory scan. - */ - private int monitorInterval; - - /** - * Stop order received ? - */ - private boolean stopped = false; - - /** - * Map between a File (monitored) and the last updated file. - */ - private Map modifiedFiles = null; - - /** - * List of deployed files (by this monitor). - */ - private Map> deployed = null; - - /** - * Map between a File and its last length known. - */ - private Map fileLengths = null; - - /** - * List of File that have a failed deployment (by this monitor). - */ - private List failed = null; - - /** - * List of File that are not known deployable. - */ - private List unknown = null; - - /** - * Deployer Manager. (that allow us to deploy Deployable). - */ - private IDeployerManager deployerManager = null; - - /** - * First launch of this monitor. - */ - private boolean firstCheck = true; - - /** - * Exclusion filter. - */ - private ExclusionFilenameFilter filter = null; - - /** - * Allow to inform the Service that the firstCheck ended. - */ - private DeployableMonitorService myService = null; - - /** - * Comparator used to sort the deployables. - */ - private Comparator sortDeployablesComparator = null; - - /** - * The Bundle context - */ - private BundleContext bundleContext = null; - - /** - * Constructor of this monitor. - * @param service the {@link DeployableMonitorService} instance - * @param bundleContext the bundle context - */ - public DeployableMonitor(final DeployableMonitorService service, final BundleContext bundleContext) { - this.directories = new LinkedList(); - this.modifiedFiles = new WeakHashMap(); - this.deployed = new ConcurrentHashMap>(); - this.fileLengths = new HashMap(); - this.failed = new ArrayList(); - this.unknown = new ArrayList(); - this.filter = new ExclusionFilenameFilter(); - this.myService = service; - this.sortDeployablesComparator = new SortableFileDeployableComparator(); - this.bundleContext = bundleContext; - } - - /** - * reset the state of all deployables. - */ - public void reset() { - if (firstCheck) { - return; - } - - this.modifiedFiles.clear(); - this.deployed.clear(); - this.fileLengths.clear(); - - for (File deployDirectory : directories) { - File[] files = deployDirectory.listFiles(filter); - - if (files == null) { - continue; - } - - for (File file : files) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - continue; - } - IDeployable deployable = this.myService.getDeployableHelper().getDeployable(archive); - if (deployerManager.isDeployed(deployable)) { - - deployed.put(file, deployable); - fileLengths.put(file, getFileSize(file)); - // hasBeenUpdated will update the modifiedFiles - hasBeenUpdated(file); - } - } catch (Throwable t) { - logger.warn("Cannot reset file {0}", file, t); - } - } - } - } - - /** - * Start the thread of this class.
    - * It will search and deploy files to deploy.
    - * In development mode, it will check the changes. - */ - @Override - public void run() { - for (;;) { - if (stopped) { - // Stop the thread - return; - } - - if (developmentMode || firstCheck) { - // Save file lengths in order to avoid deploying file for which copy is in process - saveFileLengths(); - - // 20% of the monitor interval is spent to wait in order to guarantee the file integrity - // If the file is being copied, the file size increases in the time - try { - Thread.sleep((long) (monitorInterval * 0.2)); - } catch (InterruptedException e) { - throw new RuntimeException("Thread fail to sleep"); - } - - // Undeploy/ReDeploy archives for deployed modules - updateArchives(); - - // Check new archives/containers to start - checkNewArchives(); - - if (firstCheck) { - final String failStartOnError = System.getProperty("jonas.start.nofail"); - if (!this.developmentMode && failStartOnError != null && Boolean.parseBoolean(failStartOnError)) { - //check if there is at least one deployable with a fail deployment - if (!this.failed.isEmpty()) { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("The deployment of " + this.failed.size() + " deployable"); - if (this.failed.size() > 1) { - stringBuilder.append("s"); - } - stringBuilder.append(" has failed. The server is going to shut down."); - logger.error(stringBuilder.toString()); - - //stop the server - Bundle bundle = this.bundleContext.getBundle(0); - try { - bundle.stop(); - } catch (BundleException e) { - logger.error("Cannot stop bundle " + bundle.getLocation(), e); - } - } - } - myService.firstCheckEnded(); - } - - // Next step, we will be in a checking step. - firstCheck = false; - } - - try { - Thread.sleep((long) (monitorInterval * 0.8)); - } catch (InterruptedException e) { - throw new RuntimeException("Thread fail to sleep"); - } - } - } - - /** - * Save file lengths in scanned directories. - */ - private void saveFileLengths() { - // Clear Map - fileLengths.clear(); - - for (File deployDirectory : directories) { - // Get files - File[] files = deployDirectory.listFiles(filter); - - // Next directory if there are no files to scan. - if (files == null) { - continue; - } - - for (File file : files) { - try { - fileLengths.put(file, getFileSize(file)); - } catch (Exception e) { - // File cannot be read - // or a sub file is not completed (in case of a directory) - } - } - } - } - - /** - * The windows related method test if the file is complete (any write - * operations on the given file are finished). - * @param file tested file (regular file only) - * @throws IOException if the given file is not completed (only thrown - * under windows when file is not completed) - */ - private static void checkFileCompleteness(final File file) throws IOException { - if (file.isFile()) { - // Try to open an input stream on the file - // This should throw an exception if the file copy is not finished (Windows only) - FileInputStream fis = new FileInputStream(file); - fis.close(); - } - } - - /** - * Return the file or directory size. - * @param file a file or directory - * @return the total file size (files in folders included) - * @throws Exception if one of the analyzed files was not completed - */ - private static long getFileSize(final File file) throws Exception { - if (file.isFile()) { - checkFileCompleteness(file); - return file.length(); - } - - // Directory case - long size = 0; - File[] childs = file.listFiles(); - for (File child : childs) { - // Add the size of the child - size += getFileSize(child); - } - - return size; - - } - - /** - * Check new archives/containers. - */ - private void checkNewArchives() { - try { - detectNewArchives(); - } catch (Exception e) { // Catch all exception - logger.error("Problem when trying to find and deploy new archives", e); - } catch (Error e) { - logger.error("Error when trying to find and deploy new archives", e); - } - } - - /** - * Undeploy/ReDeploy archives for deployed modules. - */ - private void updateArchives() { - try { - checkModifiedDeployables(); - } catch (Exception e) { // Catch all exception - logger.error("Problem when checking current deployables", e); - } catch (Error e) { - logger.error("Error when checking current deployables", e); - } - } - - /** - * Scan all files present in the deploy directory and deploy them. (if not - * deployed). - */ - private void detectNewArchives() { - - for (File deployDirectory : directories) { - // get files - File[] files = deployDirectory.listFiles(filter); - - // next directory if there are no files to scan. - if (files == null) { - continue; - } - - // Sort the files by names - Arrays.sort(files, new LexicographicallyFileComparator()); - - // Sort the file by type (first check only) - if (firstCheck) { - // Build a list of deployable - List deployables = new LinkedList(); - - // for each file - for (File f : files) { - // Get deployable - IArchive archive = ArchiveManager.getInstance().getArchive(f); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", f); - continue; - } - - IDeployable deployable; - try { - deployable = this.myService.getDeployableHelper().getDeployable(archive); - } catch (DeployableHelperException e) { - // Deployment of this deployable has failed - failed.add(f); - logger.error("Cannot get a deployable for the archive ''{0}''", archive, e); - continue; - } - - deployables.add(new SortableFileDeployable(f, deployable)); - } - - // Sort the deployables by using the given comparator - Collections.sort(deployables, sortDeployablesComparator); - - - // Add files sorted from the comparator - List filesToDeploy = new ArrayList(); - for (SortableFileDeployable sortableFileDeployable : deployables) { - filesToDeploy.add(sortableFileDeployable.getFile()); - } - - if (filesToDeploy.size() > 0) { - logger.info("Deployables to deploy at startup: [{0}]", deployables); - } - - // Update the array - files = filesToDeploy.toArray(new File[filesToDeploy.size()]); - - } - - //list of deployables to deploy - Map> deployablesToDeploy = new LinkedHashMap>(); - - // analyze each file to detect new modules that are not yet deployed. - for (File file : files) { - // Already deployed ? - if (deployed.containsKey(file)) { - // yes, then check other files - continue; - } - - // File length has changed: file copy is not finished ? - if (fileLengthHasChanged(file)) { - continue; - } - - // This module has failed previously ? - if (failed.contains(file)) { - // If the module hasn't been updated, no need to deploy it again as it will fails again - if (!hasBeenUpdated(file)) { - continue; - } - // Cleanup the previous failure and try again the deployment - failed.remove(file); - } - - // Else, get the deployable - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", file); - continue; - } - IDeployable deployable; - try { - deployable = this.myService.getDeployableHelper().getDeployable(archive); - } catch (DeployableHelperException e) { - // Deployment of this deployable has failed - failed.add(file); - logger.error("Cannot get a deployable for the archive ''{0}''", archive, e); - continue; - } - - // Unkown deployable, do not deploy it for now - if (UnknownDeployable.class.isInstance(deployable)) { - if (!unknown.contains(file)) { - unknown.add(file); - logger.error("The archive ''{0}'' is flagged as unkwnown deployable. Do not deploy it", archive); - } - continue; - } - - - // File is not an unknown deployable anymore, remove it - if (unknown.contains(file)) { - unknown.remove(file); - logger.info("The archive ''{0}'' is not anymore an unknown deployable, deploy it now as ''{1}''", archive, - deployable); - } - - // Already deployed ? (don't check DeploymentPlanDeployable) - try { - if (deployerManager.isDeployed(deployable) && !DeploymentPlanDeployable.class.isInstance(deployable)) { - deployed.put(file, deployable); - continue; - } - } catch (Exception e) { - // Deployable not supported. - } - - - if (stopped) { - // Don't deploy new archives after the reception of a stop order - return; - } - - deployablesToDeploy.put(file, deployable); - logger.debug("Detect a new Deployable ''{0}'' and deploying it.", deployable); - } - - //Now deploy files - try { - List deploymentReports = this.deployerManager.deploy(new ArrayList>( - deployablesToDeploy.values())); - - for (Map.Entry> entry: deployablesToDeploy.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - - if (deploymentReport == null || deploymentReport.isDeploymentOk()) { - // Store the new deployable - this.deployed.put(file, deployable); - } else { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - this.failed.add(file); - logger.error("DeployerException : Cannot deploy the deployable ''{0}''", deployable, - deploymentReport.getException()); - } else { - // Deployment of this deployable is not supported. - // We will try to deploy this file in the next detection cycle. - } - } - } - - // Perform a garbage collector to avoid file lock - System.gc(); - } catch (RuntimeException e) { - // Runtime exception but deployment has failed - this.failed.addAll(deployablesToDeploy.keySet()); - for (IDeployable deployable: deployablesToDeploy.values()) { - logger.error("RuntimeException : Cannot deploy the deployable ''{0}''", deployable, e); - } - } catch (Error e) { - // Error but deployment has failed - this.failed.addAll(deployablesToDeploy.keySet()); - for (IDeployable deployable: deployablesToDeploy.values()) { - logger.error("Error : Cannot deploy the deployable ''{0}''", deployable, e); - } - } - } - } - - /** - * - * @param deployable The {@link IDeployable} - * @param deploymentReports The list of {@link IDeploymentReport} - * @return the {@link IDeploymentReport} associated to the given deployable - */ - private IDeploymentReport getDeploymentReport(final IDeployable deployable, final List deploymentReports) { - for (IDeploymentReport deploymentReport: deploymentReports) { - if (deploymentReport.getDeployable().equals(deployable)) { - return deploymentReport; - } - } - return null; - } - - /** - * Gets the last modified attribute of a given archive.
    If it is a - * directory, returns the last modified file of the archive. - * @param archive the archive to monitor. - * @return the last modified version of the given archive. - */ - protected long getLastModified(final File archive) { - if (archive.isFile()) { - return archive.lastModified(); - } - // else - File[] files = archive.listFiles(); - long last = 0; - if (files != null) { - for (File f : files) { - last = Math.max(last, getLastModified(f)); - } - } - return last; - } - - /** - * Check if the given file has been updated since the last check. - * @param file the file to test - * @return true if the archive has been updated - */ - protected boolean hasBeenUpdated(final File file) { - // File length has changed: file copy is not finished ? - if (fileLengthHasChanged(file)) { - return false; - } - - // get lastmodified for this URL - long previousLastModified = 0; - Long l = modifiedFiles.get(file); - if (l != null) { - previousLastModified = l.longValue(); - } - - long updatedModified = getLastModified(file); - - // first check. nothing to do - if (previousLastModified == 0) { - // Store initial time - modifiedFiles.put(file, Long.valueOf(updatedModified)); - return false; - } - // URL has been updated since the last time - if (updatedModified > previousLastModified) { - modifiedFiles.put(file, Long.valueOf(updatedModified)); - return true; - } - - return false; - } - - /** - * Check if the current deployables that are deployed have been updated. - * If it is the case, undeploy them and then deploy it again (except for EJB3 Deployable where there is a stop/start). - */ - private void checkModifiedDeployables() { - // Get list of files that are failed - Iterator fileIterator = failed.iterator(); - - // For each failed module, check if the module has been removed - while (fileIterator.hasNext()) { - File f = fileIterator.next(); - // File has been removed - if (!f.exists()) { - fileIterator.remove(); - } - } - - // Get list of files that are undeployed - Set files = deployed.keySet(); - for (File f : files) { - IDeployable deployable = deployed.get(f); - try { - if (!deployerManager.isDeployed(deployable)) { - deployed.remove(f); - } - } catch (Exception e) { - deployed.remove(f); - } - } - - // Nothing to do if no modules are deployed. - if (files == null) { - return; - } - - //list of deployables to undeploy - Map> deployablesToUnDeploy = new LinkedHashMap>(); - - //list of deployables to update - Map> deployablesToUpdate = new LinkedHashMap>(); - - // For each deployed module that is not an EJB3, check if the module has been updated - for (File f : files) { - IDeployable deployable = deployed.get(f); - - // Not yet deployed ? - if (deployable == null) { - continue; - } - - // File has been removed - if (!f.exists()) { - // undeploy - logger.info("Deployable ''{0}'' has been removed on the filesystem, undeploy it", deployable); - deployablesToUnDeploy.put(f, deployable); - continue; - } - - // Update has been detected, need to undeploy and then to deploy again - if (hasBeenUpdated(f)) { - logger.info("Deployable ''{0}'' has been updated, reloading it", deployable); - deployablesToUpdate.put(f, deployable); - } - } - - //Undeploy files which have been removed - try { - List deploymentReports = this.deployerManager.undeploy(new ArrayList>( - deployablesToUnDeploy.values())); - - for (Map.Entry> entry: deployablesToUnDeploy.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport != null && !deploymentReport.isDeploymentOk()) { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - logger.error("Undeploy of the deployable '" + deployable + "' has failed", - deploymentReport.getException()); - this.failed.add(file); - } else { - // Undeployment of this deployable is not supported. - // We will try to undeploy this file in the next detection cycle. - } - } - } - - // Perform a garbage collector to avoid file lock during redeployment - System.gc(); - } catch (RuntimeException e) { - for (Map.Entry> entry: deployablesToUnDeploy.entrySet()) { - logger.error("Undeploy of the deployable '" + entry.getValue() + "' has failed", e); - this.failed.add(entry.getKey()); - } - } finally { - for (File file: deployablesToUnDeploy.keySet()) { - // even in error case, the file should have been removed - this.deployed.remove(file); - } - } - - - //update deployables - boolean undeploymentIsOk = true; - List deploymentReports = this.deployerManager.undeploy(new ArrayList>( - deployablesToUpdate.values())); - for (Map.Entry> entry: deployablesToUpdate.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport != null && !deploymentReport.isDeploymentOk()) { - if (!(deploymentReport.getException() instanceof UnsupportedDeployerException)) { - logger.error("Undeploy of the deployable '" + deployable + "' has failed", - deploymentReport.getException()); - // Deployment has failed, it is now undeployed - this.failed.add(file); - } else { - // Undeployment of this deployable is not supported. - // We will try to undeploy this file in the next detection cycle. - undeploymentIsOk = false; - } - } - if (undeploymentIsOk) { - this.deployed.remove(file); - } - } - // Perform a garbage collector to avoid file lock during redeployment - System.gc(); - - - if (undeploymentIsOk) { - - // Get a new deployables - Map> newDeployables = new LinkedHashMap>(); - for (File file: deployablesToUpdate.keySet()) { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", file); - } else { - try { - newDeployables.put(file, this.myService.getDeployableHelper().getDeployable(archive)); - } catch (DeployableHelperException e) { - logger.error("Cannot get a deployable for the archive '" + archive + "'", e); - } - } - } - - //deploy new deployables - deploymentReports = this.deployerManager.deploy(new ArrayList>( - newDeployables.values())); - for (Map.Entry> entry: newDeployables.entrySet()) { - File file = entry.getKey(); - IDeployable deployable = entry.getValue(); - IDeploymentReport deploymentReport = getDeploymentReport(deployable, deploymentReports); - if (deploymentReport == null || deploymentReport.isDeploymentOk()) { - // Store the new deployable - this.deployed.put(file, deployable); - } else { - if (deploymentReport.getException() instanceof UnsupportedDeployerException) { - // Deployment of this deployable is not supported. - // We will try to deploy this file in the next detection cycle. - } else { - // Deployment of this deployable has failed - this.failed.add(file); - logger.error("Error : Cannot redeploy the deployable ''{0}''", deployable, - deploymentReport.getException()); - } - } - } - // Perform a garbage collector to avoid file lock - System.gc(); - } - } - - /** - * Check if the file length has changed. - * @param file The given file - * @return True if the file length has changed - */ - private boolean fileLengthHasChanged(final File file) { - // File length not known - if (!fileLengths.containsKey(file)) { - return true; - } - - long storedFileLength = fileLengths.get(file); - long currentFileLength = 0; - try { - currentFileLength = getFileSize(file); - } catch (Exception e) { - // File cannot be checked, probably the file is being written. - return true; - } - if (storedFileLength != currentFileLength) { - // File length has changed - return true; - } - - // No change in file length - return false; - } - - /** - * @return the list of directories that this monitor is monitoring. - */ - public List getDirectories() { - return directories; - } - - /** - * Sets the list of directories to monitor. - * @param directories the list of directories to use. - */ - public void setDirectories(final List directories) { - this.directories = directories; - } - - /** - * Add a directory to the list of directories to monitor. - * @param directory the directory to add - */ - public void addDirectory(final File directory) { - directories.add(directory); - } - - /** - * Remove a directory to the list of directories to monitor. - * @param directory the directory to remove - */ - public void removeDirectory(final File directory) { - directories.remove(directory); - } - - /** - * @return true if the development is enabled, else false (production mode). - */ - public boolean isDevelopmentMode() { - return developmentMode; - } - - /** - * Enable or disable the development mode. - * @param developmentMode true if it has to be enabled. - */ - public void setDevelopmentMode(final boolean developmentMode) { - this.developmentMode = developmentMode; - } - - /** - * Set the monitor interval between each directory scan. - * @param monitorInterval value to set - */ - public void setMonitorInterval(final int monitorInterval) { - this.monitorInterval = monitorInterval; - } - - /** - * Receives a stop order. - */ - public void stopOrder() { - this.stopped = true; - } - - /** - * @return the instance of the deployer manager. - */ - public IDeployerManager getDeployerManager() { - return deployerManager; - } - - /** - * Sets the deployer manager for deployers. - * @param deployerManager the instance of the deployer manager. - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * @param patterns List of exclusion patterns. - */ - public void setExclusionPatterns(final List patterns) { - filter.setExclusionList(patterns); - } - - /** - * @return the sort comparator for deployables - */ - public Comparator getSortDeployablesComparator() { - return sortDeployablesComparator; - } - - /** - * Defines the comparator used for deployables. - * @param sortDeployablesComparator the given comparator - */ - public void setSortDeployablesComparator(final Comparator sortDeployablesComparator) { - this.sortDeployablesComparator = sortDeployablesComparator; - } -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java deleted file mode 100644 index 8669b639b0..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorException.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -/** - * Component exception if the component has some errors. - * @author Florent Benoit - */ -public class DeployableMonitorException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = 191216840656391462L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public DeployableMonitorException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public DeployableMonitorException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public DeployableMonitorException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new exception with the specified cause and a detail message - * of (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This - * constructor is useful for exceptions that are little more than wrappers - * for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public DeployableMonitorException(final Throwable cause) { - super(cause); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java deleted file mode 100644 index ba841aad78..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/DeployableMonitorService.java +++ /dev/null @@ -1,488 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import org.osgi.framework.BundleContext; -import org.ow2.jonas.depmonitor.MonitoringService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.substitution.engine.DefaultSubstitutionEngine; -import org.ow2.util.substitution.resolver.PropertiesResolver; - -/** - * Service that will launch the Deployable Monitor. - * @author Florent BENOIT - */ -public class DeployableMonitorService extends AbsServiceImpl implements MonitoringService { - - /** - * Property for the development mode. - */ - public static final String DEVELOPMENT_MODE_PROPERTY = "development"; - - /** - * Property for the list of extra directories to analyze. - */ - public static final String DIRECTORIES_LIST_PROPERTY = "directories"; - - /** - * The name of the JONAS_BASE directory. - */ - protected static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * Name as used to label configuration properties. - */ - public static final String SERVICE_NAME = "depmonitor"; - - static final String MONITOR_INTERVAL = "jonas.service.depmonitor.monitorInterval"; - - static final String DEVELOPMENT = "jonas.service.depmonitor.development"; - /** - * Logger. - */ - private Log logger = LogFactory.getLog(DeployableMonitorService.class); - - /** - * Development mode or not ? Default is true. - */ - private boolean developmentMode = true; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * List of directories. - */ - private List directories = null; - - /** - * Link to the deployable monitor. - */ - private DeployableMonitor deployableMonitor = null; - - /** - * Reference to the J2EEServer service. - */ - private J2EEServerService j2eeServer = null; - - /** - * Monitor interval between each directory scan. - */ - private int monitorInterval; - - /** - * Ordered deployables. - */ - private String orderedDeployables = null; - - /** - * DeployableHelper - */ - private IDeployableHelper deployableHelper = null; - - /** - * The bundle context - */ - private BundleContext bundleContext = null; - - /** - * Default constructor. - * @param bundleContext The bundle context - */ - public DeployableMonitorService(final BundleContext bundleContext) { - this.directories = new LinkedList(); - this.bundleContext = bundleContext; - this.deployableMonitor = new DeployableMonitor(this, this.bundleContext); - } - - /** - * Start the Deployable Monitor service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - logger.info("Use the deploy directories ''{0}'', development mode is ''{1}''", directories, developmentMode); - - // Add the default directory - File defaultDirectory = new File(j2eeServer.getUploadDirectory()); - if (!defaultDirectory.exists()) { - logger.info("Creating default deploy directory ''{0}''", defaultDirectory); - defaultDirectory.mkdirs(); - } - directories.add(defaultDirectory); - - // Load the Descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // And register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.deployableMonitorService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for Deployable Monitor service", e); - } catch (Throwable t) { - t.printStackTrace(); - } - } - - /** - * Starts the {@link DeployableMonitor} instance. - */ - public void startMonitoring() { - if (!getDeployableMonitor().isAlive()) { - logger.debug("Start DeployableMonitor"); - deployableMonitor.start(); - } - } - - /** - * Stop the Deployable Monitor service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Unregister MBean - if (jmxService != null) { - try { - jmxService.unregisterModelMBean(JonasObjectName.deployableMonitorService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot unregister MBean for Deployable Monitor service", e); - } - } - // Stop deploy monitor - deployableMonitor.stopOrder(); - /** - * Don't keep the resources. - */ - deployableMonitor = null; - - logger.info("DeployableMonitor stopped successfully"); - - } - - /** - * @param dirs List of deployment directories to observe. - */ - public void setDirectories(final String dirs) { - List additionalDirectories = convertToList(dirs); - boolean addDirectory = true; - for (String dir : additionalDirectories) { - updateDirectories(dir, addDirectory); - } - - getDeployableMonitor().setDirectories(directories); - } - - /** - * Update the directories datastructure. - * @param dir directory to add - * @param addOp if true, add new directory, if false, remove directory - * @return true if update occured - */ - private boolean updateDirectories(final String dir, final boolean addOp) { - - DefaultSubstitutionEngine engine = new DefaultSubstitutionEngine(); - engine.setResolver(new PropertiesResolver(System.getProperties())); - - String substitutedDir = engine.substitute(dir); - File tmpFile = new File(substitutedDir); - - // Not an absolute file, should be relative to JONAS_BASE. - if (!tmpFile.isAbsolute()) { - tmpFile = new File(JONAS_BASE + File.separator + substitutedDir); - } - - // Directory exists ? - if (!tmpFile.exists()) { - logger.warn("The given directory ''{0}'' is neither present on the filesystem or in JONAS_BASE ''{1}''", - tmpFile, JONAS_BASE); - return false; - } - if (addOp) { - // Add the directory - return directories.add(tmpFile); - } else { - return directories.remove(tmpFile); - } - } - - /** - * @param exclusionList The list of exclusion patterns. - */ - public void setExclusions(final String exclusionList) { - List exclusions = convertToList(exclusionList); - getDeployableMonitor().setExclusionPatterns(exclusions); - } - - /** - * @param deployerManager the {@link IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - // update the monitor object - getDeployableMonitor().setDeployerManager(deployerManager); - } - - /** - * Sets the deployer helper - * @param deployableHelper The instance of the deployer helper - */ - public void setDeployableHelperComponent(final IDeployableHelper deployableHelper) { - this.deployableHelper = deployableHelper; - } - - /** - * - * @return The instance of the deployer helper - */ - public IDeployableHelper getDeployableHelper() { - return deployableHelper; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param j2eeServer the j2eeServer to set - */ - public void setJ2EEServer(final J2EEServerService j2eeServer) { - this.j2eeServer = j2eeServer; - } - - /** - * Called when the DeploymentMonitor has finished its first round of - * deployment (all that was under deploy/ at startup time). - */ - public void firstCheckEnded() { - j2eeServer.setRunning(); - } - - /** - * Set developmentMode value to true (enable), or to false (disable). Component (IPOJO) initializer. - * "inherit" case: correspondence between the service and the server - * development mode - * @param mode value to set - */ - public void setDevelopmentMode(final String mode) { - if (mode.equals("inherit")) { - developmentMode = getServerProperties().isDevelopment(); - } else { - developmentMode = Boolean.parseBoolean(mode); - } - - setDevelopmentMode(developmentMode); - } - - /** - * Set developmentMode value to true (enable), or to false (disable). - * @param mode value to set - */ - public void setDevelopmentMode(final boolean mode) { - developmentMode = mode; - - // if development mode has been enabled on the fly, - // make sure the deployables' status are reset - if (developmentMode && j2eeServer.isRunning()) { - getDeployableMonitor().reset(); - } - - // update the monitor object - getDeployableMonitor().setDevelopmentMode(developmentMode); - } - - /** - * Set the monitor interval between each directory scan. Component (IPOJO) initializer. - * @param monitorInterval value to set - */ - public void setMonitorInterval(final int monitorInterval) { - this.monitorInterval = monitorInterval; - - // update the monitor object - getDeployableMonitor().setMonitorInterval(monitorInterval); - } - - /** - * Get the deployable monitor. - * @return the deployable monitor - */ - private DeployableMonitor getDeployableMonitor() { - // Create a new instance if necessary. - if (deployableMonitor == null) { - deployableMonitor = new DeployableMonitor(this, this.bundleContext); - } - return deployableMonitor; - } - - // Management operations - // --------------------- - - /** - * @return true if the development mode set to true. - */ - public boolean isDevelopment() { - return developmentMode; - } - - /** - * Set developmentMode value to true (enable), or to false (disable). Management operation. - * "inherit" case: correspondence between the service and the server - * development mode - * @param mode value to set - */ - public void setDevelopment(final boolean mode) { - String developmentMode = (new Boolean(mode)).toString(); - setDevelopmentMode(developmentMode); - - // Send a notification containing the new value of this property to the - // listener MBean - String propName = DEVELOPMENT; - String propValue = developmentMode; - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * Sets the list of deployables to use. - * @param deployables the given deployables to use - */ - public void setOrderedDeployables(final String deployables) { - // Convert list - List ordering = convertToList(deployables); - - // sets the new comparator - SortableFileDeployableComparator sortableFileDeployableComparator = new SortableFileDeployableComparator(); - sortableFileDeployableComparator.setOrderedDeployables(ordering); - this.deployableMonitor.setSortDeployablesComparator(sortableFileDeployableComparator); - } - - /** - * Returns the monitor interval between each directory scan. - */ - public int getMonitorPeriod() { - return this.monitorInterval; - } - - /** - * Set the monitor interval between each directory scan. Management method. - * @param monitorInterval value to set - */ - public void setMonitorPeriod(final int monitorInterval) { - setMonitorInterval(monitorInterval); - // Send a notification containing the new value of this property to the - // listener MBean - String propName = MONITOR_INTERVAL; - String propValue = new Integer(monitorInterval).toString(); - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * The list of the directory names. - * @return The list of the directory names. - */ - public String[] getDirectoryNames() { - ArrayList result = new ArrayList(); - Iterator it = directories.iterator(); - while (it.hasNext()) { - File directory = it.next(); - result.add(directory.getName()); - } - String[] dirNames = new String[result.size()]; - int i = 0; - for (String dir : result) { - dirNames[i++] = dir; - } - return dirNames; - } - - /** - * Add a new deployment directory (management operation). - * @param directory the directory name. - */ - public void addDirectory(final String directory) { - if (updateDirectories(directory, true)) { - getDeployableMonitor().setDirectories(directories); - } - } - - /** - * Add a new deployment directory (management operation). - * @param directory the directory name. - */ - public void removeDirectory(final String directory) { - if (updateDirectories(directory, false)) { - getDeployableMonitor().setDirectories(directories); - } - } - - /** - * Checks if a given directory is a deployment directory monitored by this service. - * @param dir the directory name - * @return true if the directory is a deployment directory - */ - public boolean isDepmonitorDir(final String dir) { - Iterator it = directories.iterator(); - while (it.hasNext()) { - File directory = it.next(); - try { - if (directory.getCanonicalPath().equals(dir)) { - return true; - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return false; - } - - /** - * Save updated configuration. - */ - public void saveConfig() { - // Send save reconfig notification - sendSaveNotification(getSequenceNumber(), SERVICE_NAME); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java deleted file mode 100644 index 7945ed260f..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/ExclusionFilenameFilter.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.io.FilenameFilter; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -/** - * Exclude monitored filenames based on patterns. - * By default, system files are excluded too (starting with '.') - * @author Guillaume Sauthier - */ -public class ExclusionFilenameFilter implements FilenameFilter { - - /** - * Exclusion patterns. - */ - private List patterns = new ArrayList(); - - /** - * Tests if a specified file should be included in a file list. - * @param dir the directory in which the file was found. - * @param name the name of the file. - * @return true if and only if the name should be - * included in the file list; false otherwise. - */ - public boolean accept(final File dir, final String name) { - // Exclude system files, backup files or file matching the patterns. - if(name.startsWith(".") || name.endsWith("~") || match(name)) { - return false; - } - return true; - } - - /** - * @param name filename to be matched. - * @return true if the file name matches one the patterns. - */ - private boolean match(final String name) { - for (String pattern : patterns) { - if (Pattern.matches(pattern, name)) { - return true; - } - } - return false; - } - - /** - * @param patterns list of filename patterns to be excluded. - */ - public void setExclusionList(final List patterns) { - this.patterns = patterns; - } - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java deleted file mode 100644 index 9046093407..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/LexicographicallyFileComparator.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; -import java.util.Comparator; - -/** - * Sort a list of files by using an lexicographically order. - * @author Florent BENOIT - * - */ -public class LexicographicallyFileComparator implements Comparator { - - /** - * Compare two files. - * @param file1 the first file to compare - * @param file2 the second file to compare. - * @return compare mode between - */ - public int compare(final File file1, final File file2) { - return file1.getName().compareToIgnoreCase(file2.getName()); - } - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java deleted file mode 100644 index a6278602a6..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployable.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.io.File; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Class that stores a file and the associated deployable and that can be - * sorted. - * @author Florent Benoit - */ -public class SortableFileDeployable { - - /** - * File that represents the associated deployabled. - */ - private File file = null; - - /** - * Deployable object linked to the given file. - */ - private IDeployable deployable = null; - - /** - * Defines the file and its deployable. - * @param file the given file - * @param deployable the given deployable - */ - public SortableFileDeployable(final File file, final IDeployable deployable) { - this.file = file; - this.deployable = deployable; - } - - /** - * @return the file - */ - public File getFile() { - return file; - } - - /** - * @return the deployable - */ - public IDeployable getDeployable() { - return deployable; - } - - /** - * @return string representation of this sorted deployable. - */ - @Override - public String toString() { - String deployableClassName = deployable.getClass().getSimpleName(); - String DEP = "DeployableImpl"; - if (deployableClassName.endsWith(DEP)) { - deployableClassName = deployableClassName.substring(0, deployableClassName.length() - DEP.length()); - } - - return "[".concat(deployableClassName).concat(":").concat(file.getPath()).concat("]"); - } - - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java deleted file mode 100644 index b9b91b7f5a..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/SortableFileDeployableComparator.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.deployablemonitor; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -/** - * Comparator used to sort the deployables in the wanted order. - * @author Florent Benoit - */ -public class SortableFileDeployableComparator implements Comparator { - - /** - * Ordered deployables. - */ - private List orderedDeployables = null; - - /** - * Default constructor. - */ - public SortableFileDeployableComparator() { - this.orderedDeployables = new ArrayList(); - } - - /** - * Sets the given list of ordered deployables that we should use to select our order. - * @param orderedDeployables the given list - */ - public void setOrderedDeployables(final List orderedDeployables) { - this.orderedDeployables = orderedDeployables; - } - - /** - * @param sortableFileDeployable the deployable from which we will get the index - * @return the index value from the ordered list - */ - private int index(final SortableFileDeployable sortableFileDeployable) { - // Unknown, return the max value so that it will be ordered at the end - if (sortableFileDeployable == null) { - return Integer.MAX_VALUE; - } - - String deployableClassName = sortableFileDeployable.getDeployable().getClass().getName(); - - // Search with the full name - int index = this.orderedDeployables.indexOf(deployableClassName); - if (index == -1) { - // search with fragment - int i = 0; - boolean found = false; - while (i < orderedDeployables.size() && !found) { - String name = orderedDeployables.get(i); - if (deployableClassName.toLowerCase().contains(name.toLowerCase())) { - // found it - found = true; - break; - } - i++; - } - if (!found) { - index = Integer.MAX_VALUE; - } else { - index = i; - } - } - return index; - } - - /** - * Compare two deployables and return a value to sort them. - * @param sortableFileDeployable1 first archive to compare - * @param sortableFileDeployable2 the other archive to compare - * @return a compare value that allows to sort the given deployables - */ - @Override - public int compare(final SortableFileDeployable sortableFileDeployable1, - final SortableFileDeployable sortableFileDeployable2) { - - // Get index of the two deployables - int index1 = index(sortableFileDeployable1); - int index2 = index(sortableFileDeployable2); - - // Return order - if (index1 > index2) { - return 1; - } else if (index1 == index2) { - // use of lexicographic order when the deployable are with the same kind of deployable - return sortableFileDeployable1.getFile().getName().compareTo(sortableFileDeployable2.getFile().getName()); - } else { - return -1; - } - - } - -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java b/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java deleted file mode 100644 index 933ec00d1b..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/java/org/ow2/jonas/deployablemonitor/mbean/DeployableMonitorServiceMBean.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.deployablemonitor.mbean; - -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -import org.ow2.jonas.lib.management.services.JOnASServiceModelMBean; - -/** - * Provides Model MBean for the depmonitor service. - * @author danesa - */ -public class DeployableMonitorServiceMBean extends JOnASServiceModelMBean { - - public DeployableMonitorServiceMBean() throws MBeanException, RuntimeOperationsException { - super(); - } -} diff --git a/jonas/modules/services/deployable-monitor/core/src/main/resources/META-INF/jonas-deployable-monitor-core.bnd b/jonas/modules/services/deployable-monitor/core/src/main/resources/META-INF/jonas-deployable-monitor-core.bnd deleted file mode 100644 index 6ca2bcd2b0..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/resources/META-INF/jonas-deployable-monitor-core.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.deployablemonitor.* - diff --git a/jonas/modules/services/deployable-monitor/core/src/main/resources/metadata.xml b/jonas/modules/services/deployable-monitor/core/src/main/resources/metadata.xml deleted file mode 100644 index cf9096d662..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml b/jonas/modules/services/deployable-monitor/core/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml deleted file mode 100644 index 683a5a909a..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/resources/org/ow2/jonas/deployablemonitor/mbeans-descriptors.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/deployable-monitor/core/src/main/templates/jonas-depmonitor.properties.template b/jonas/modules/services/deployable-monitor/core/src/main/templates/jonas-depmonitor.properties.template deleted file mode 100644 index 82ea65f1eb..0000000000 --- a/jonas/modules/services/deployable-monitor/core/src/main/templates/jonas-depmonitor.properties.template +++ /dev/null @@ -1,36 +0,0 @@ -# -###################### JOnAS Deployment Monitor -# -jonas.services depmonitor -# Set the name of the implementation class of the depmonitor service -# -jonas.service.depmonitor.class org.ow2.jonas.deployablemonitor.DeployableMonitorService - -# Set the execution mode (three possible values): -# - inherit: inherit of the value of the "jonas.development" key -# - true : development mode -# - false : production mode -jonas.service.depmonitor.development inherit - -jonas.service.depmonitor.directories -# List (comma separated) of exclusion patterns (based on names, not directories) -jonas.service.depmonitor.exclusions README - -# Monitor interval in milliseconds -jonas.service.depmonitor.monitorInterval 5000 - -# Ordering used by the depmonitor service when deploying new deployables. -# Note: Tweaking this ordering may lead to deployable missing some stuff -# (for example if repository deployables are deployed at the end, -# this will lead to errors for deployable referencing these repositories -jonas.service.depmonitor.ordering Repository, \ - OSGi, \ - RAR, \ - Datasource, \ - ConfigAdmin, \ - DeploymentPlan, \ - EJB2, \ - EJB3, \ - EAR, \ - WAR - diff --git a/jonas/modules/services/deployable-monitor/pom.xml b/jonas/modules/services/deployable-monitor/pom.xml deleted file mode 100644 index af3f8cd797..0000000000 --- a/jonas/modules/services/deployable-monitor/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-deployable-monitor - pom - JOnAS :: Services :: Deployable Monitor - - Analyze directories/file and send them to the deployer manager - - - core - core-for-addons - - diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/pom.xml b/jonas/modules/services/ejb/ejb-2.1/ant/pom.xml deleted file mode 100644 index 999a09ec42..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - jonas-ejb-2.1 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb-2.1-ant - bundle - JOnAS :: Services :: EJB :: EJB 2.1 :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/DescriptorHandler.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/DescriptorHandler.java deleted file mode 100644 index a2f882bb87..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/DescriptorHandler.java +++ /dev/null @@ -1,452 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.antmodular.ejb2; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Hashtable; - -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * Inner class used by EjbJar to facilitate the parsing of deployment - * descriptors and the capture of appropriate information. Extends - * HandlerBase so it only implements the methods needed. During parsing - * creates a hashtable consisting of entries mapping the name it should be - * inserted into an EJB jar as to a File representing the file on disk. This - * list can then be accessed through the getFiles() method. - */ -public class DescriptorHandler extends org.xml.sax.helpers.DefaultHandler { - private static final int STATE_LOOKING_EJBJAR = 1; - private static final int STATE_IN_EJBJAR = 2; - private static final int STATE_IN_BEANS = 3; - private static final int STATE_IN_SESSION = 4; - private static final int STATE_IN_ENTITY = 5; - private static final int STATE_IN_MESSAGE = 6; - - private static final int STATE_IN_SERVICE_REF = 7; - private static final int STATE_IN_PORT_COMPONENT_REF = 8; - private static final int STATE_IN_HANDLER = 9; - - - private Task owningTask; - - private String publicId = null; - - /** - * Bunch of constants used for storing entries in a hashtable, and for - * constructing the filenames of various parts of the ejb jar. - */ - private static final String EJB_REF = "ejb-ref"; - private static final String EJB_LOCAL_REF = "ejb-local-ref"; - private static final String HOME_INTERFACE = "home"; - private static final String REMOTE_INTERFACE = "remote"; - private static final String LOCAL_HOME_INTERFACE = "local-home"; - private static final String LOCAL_INTERFACE = "local"; - private static final String ENDPOINT_INTERFACE = "service-endpoint"; - private static final String BEAN_CLASS = "ejb-class"; - private static final String PK_CLASS = "prim-key-class"; - private static final String EJB_NAME = "ejb-name"; - private static final String EJB_JAR = "ejb-jar"; - private static final String ENTERPRISE_BEANS = "enterprise-beans"; - private static final String ENTITY_BEAN = "entity"; - private static final String SESSION_BEAN = "session"; - private static final String MESSAGE_BEAN = "message-driven"; - - /** - * Add support for service-ref elements - */ - private static final String SERVICE_REF = "service-ref"; - private static final String SERVICE_INTERFACE = "service-interface"; - private static final String WSDL_FILE = "wsdl-file"; - private static final String JAXRPC_MAPPING_FILE = "jaxrpc-mapping-file"; - private static final String PORT_COMPONENT_REF = "port-component-ref"; - private static final String SERVICE_ENDPOINT_INTERFACE = "service-endpoint-interface"; - private static final String HANDLER = "handler"; - private static final String HANDLER_CLASS = "handler-class"; - - /** - * The state of the parsing - */ - private int parseState = STATE_LOOKING_EJBJAR; - - /** - * The old state of the parsing (used only for service-ref) - */ - private int oldParseState; - - /** - * Instance variable used to store the name of the current element being - * processed by the SAX parser. Accessed by the SAX parser call-back methods - * startElement() and endElement(). - */ - protected String currentElement = null; - - /** - * The text of the current element - */ - protected String currentText = null; - - /** - * Instance variable that stores the names of the files as they will be - * put into the jar file, mapped to File objects Accessed by the SAX - * parser call-back method characters(). - */ - protected Hashtable ejbFiles = null; - - /** - * Instance variable that stores the value found in the <ejb-name> element - */ - protected String ejbName = null; - - private Hashtable fileDTDs = new Hashtable(); - - private Hashtable resourceDTDs = new Hashtable(); - - private boolean inEJBRef = false; - - private Hashtable urlDTDs = new Hashtable(); - - /** - * The directory containing the bean classes and interfaces. This is - * used for performing dependency file lookups. - */ - private File srcDir; - - public DescriptorHandler(Task task, File srcDir) { - this.owningTask = task; - this.srcDir = srcDir; - } - - public void registerDTD(String publicId, String location) { - if (location == null) { - return; - } - - File fileDTD = new File(location); - if (!fileDTD.exists()) { - // resolve relative to project basedir - fileDTD = owningTask.getProject().resolveFile(location); - } - - if (fileDTD.exists()) { - if (publicId != null) { - fileDTDs.put(publicId, fileDTD); - owningTask.log("Mapped publicId " + publicId + " to file " - + fileDTD, Project.MSG_VERBOSE); - } - return; - } - - if (getClass().getResource(location) != null) { - if (publicId != null) { - resourceDTDs.put(publicId, location); - owningTask.log("Mapped publicId " + publicId + " to resource " - + location, Project.MSG_VERBOSE); - } - } - - try { - if (publicId != null) { - URL urldtd = new URL(location); - urlDTDs.put(publicId, urldtd); - } - } catch (java.net.MalformedURLException e) { - //ignored - } - - } - - public InputSource resolveEntity(String publicId, String systemId) - throws SAXException { - this.publicId = publicId; - - File dtdFile = (File) fileDTDs.get(publicId); - if (dtdFile != null) { - try { - owningTask.log("Resolved " + publicId + " to local file " - + dtdFile, Project.MSG_VERBOSE); - return new InputSource(new FileInputStream(dtdFile)); - } catch (FileNotFoundException ex) { - // ignore - } - } - - String dtdResourceName = (String) resourceDTDs.get(publicId); - if (dtdResourceName != null) { - InputStream is = this.getClass().getResourceAsStream(dtdResourceName); - if (is != null) { - owningTask.log("Resolved " + publicId + " to local resource " - + dtdResourceName, Project.MSG_VERBOSE); - return new InputSource(is); - } - } - - URL dtdUrl = (URL) urlDTDs.get(publicId); - if (dtdUrl != null) { - try { - InputStream is = dtdUrl.openStream(); - owningTask.log("Resolved " + publicId + " to url " - + dtdUrl, Project.MSG_VERBOSE); - return new InputSource(is); - } catch (IOException ioe) { - //ignore - } - } - - owningTask.log("Could not resolve ( publicId: " + publicId - + ", systemId: " + systemId + ") to a local entity", Project.MSG_INFO); - - return null; - } - - /** - * Getter method that returns the set of files to include in the EJB jar. - */ - public Hashtable getFiles() { - return (ejbFiles == null) ? new Hashtable() : ejbFiles; - } - - /** - * Get the publicId of the DTD - */ - public String getPublicId() { - return publicId; - } - - /** - * Getter method that returns the value of the <ejb-name> element. - */ - public String getEjbName() { - return ejbName; - } - - /** - * SAX parser call-back method that is used to initialize the values of some - * instance variables to ensure safe operation. - */ - public void startDocument() throws SAXException { - this.ejbFiles = new Hashtable(10, 1); - this.currentElement = null; - inEJBRef = false; - } - - - /** - * SAX parser call-back method that is invoked when a new element is entered - * into. Used to store the context (attribute name) in the currentAttribute - * instance variable. - * @param uri The namespace of the element being entered. - * @param localname The name of the element being entered. - * @param qname The qname of the element being entered. - * @param attrs Attributes associated to the element. - */ - public void startElement(String uri, String localname, String qname, Attributes attrs) - throws SAXException { - - String name = qname; - - this.currentElement = name; - currentText = ""; - if (name.equals(EJB_REF) || name.equals(EJB_LOCAL_REF)) { - inEJBRef = true; - } else if (parseState == STATE_LOOKING_EJBJAR && name.equals(EJB_JAR)) { - parseState = STATE_IN_EJBJAR; - } else if (parseState == STATE_IN_EJBJAR && name.equals(ENTERPRISE_BEANS)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_BEANS && name.equals(SESSION_BEAN)) { - parseState = STATE_IN_SESSION; - } else if (parseState == STATE_IN_BEANS && name.equals(ENTITY_BEAN)) { - parseState = STATE_IN_ENTITY; - } else if (parseState == STATE_IN_BEANS && name.equals(MESSAGE_BEAN)) { - parseState = STATE_IN_MESSAGE; - } else if ( ((parseState == STATE_IN_SESSION) - || (parseState == STATE_IN_ENTITY) - || (parseState == STATE_IN_MESSAGE)) - && (name.equals(SERVICE_REF))) { - oldParseState = parseState; - parseState = STATE_IN_SERVICE_REF; - } else if ((parseState == STATE_IN_SERVICE_REF) - && (name.equals(PORT_COMPONENT_REF))) { - parseState = STATE_IN_PORT_COMPONENT_REF; - } else if ((parseState == STATE_IN_SERVICE_REF) - && (name.equals(HANDLER))) { - parseState = STATE_IN_HANDLER; - } - } - - - /** - * SAX parser call-back method that is invoked when an element is exited. - * Used to blank out (set to the empty string, not nullify) the name of - * the currentAttribute. A better method would be to use a stack as an - * instance variable, however since we are only interested in leaf-node - * data this is a simpler and workable solution. - * @param name The name of the attribute being exited. Ignored - * in this implementation. - */ - public void endElement(String uri, String localname, String qname) throws SAXException { - String name = qname; - - processElement(); - currentText = ""; - this.currentElement = ""; - if (name.equals(EJB_REF) || name.equals(EJB_LOCAL_REF)) { - inEJBRef = false; - } else if (parseState == STATE_IN_HANDLER && name.equals(HANDLER)) { - parseState = STATE_IN_SERVICE_REF; - } else if (parseState == STATE_IN_PORT_COMPONENT_REF && name.equals(PORT_COMPONENT_REF)) { - parseState = STATE_IN_SERVICE_REF; - } else if (parseState == STATE_IN_SERVICE_REF && name.equals(SERVICE_REF)) { - parseState = oldParseState; - } else if (parseState == STATE_IN_ENTITY && name.equals(ENTITY_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_SESSION && name.equals(SESSION_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_MESSAGE && name.equals(MESSAGE_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_BEANS && name.equals(ENTERPRISE_BEANS)) { - parseState = STATE_IN_EJBJAR; - } else if (parseState == STATE_IN_EJBJAR && name.equals(EJB_JAR)) { - parseState = STATE_LOOKING_EJBJAR; - } - } - - /** - * SAX parser call-back method invoked whenever characters are located within - * an element. currentAttribute (modified by startElement and endElement) - * tells us whether we are in an interesting element (one of the up to four - * classes of an EJB). If so then converts the classname from the format - * org.apache.tools.ant.Parser to the convention for storing such a class, - * org/apache/tools/ant/Parser.class. This is then resolved into a file - * object under the srcdir which is stored in a Hashtable. - * @param ch A character array containing all the characters in - * the element, and maybe others that should be ignored. - * @param start An integer marking the position in the char - * array to start reading from. - * @param length An integer representing an offset into the - * char array where the current data terminates. - */ - public void characters(char[] ch, int start, int length) - throws SAXException { - - currentText += new String(ch, start, length); - } - - - protected void processElement() { - if (inEJBRef - || (parseState != STATE_IN_ENTITY - && parseState != STATE_IN_SESSION - && parseState != STATE_IN_MESSAGE - && parseState != STATE_IN_SERVICE_REF - && parseState != STATE_IN_PORT_COMPONENT_REF - && parseState != STATE_IN_HANDLER)) { - return; - } - - if (currentElement.equals(HOME_INTERFACE) - || currentElement.equals(REMOTE_INTERFACE) - || currentElement.equals(LOCAL_INTERFACE) - || currentElement.equals(ENDPOINT_INTERFACE) - || currentElement.equals(LOCAL_HOME_INTERFACE) - || currentElement.equals(BEAN_CLASS) - || currentElement.equals(PK_CLASS) - || currentElement.equals(SERVICE_INTERFACE) - || currentElement.equals(SERVICE_ENDPOINT_INTERFACE) - || currentElement.equals(HANDLER_CLASS)) { - - // Get the filename into a String object - File classFile = null; - String className = currentText.trim(); - - // If it's a primitive wrapper then we shouldn't try and put - // it into the jar, so ignore it. - if (!className.startsWith("java.") - && !className.startsWith("javax.")) { - // Translate periods into path separators, add .class to the - // name, create the File object and add it to the Hashtable. - className = className.replace('.', File.separatorChar); - className += ".class"; - classFile = new File(srcDir, className); - ejbFiles.put(className, classFile); - } - } - - // service-ref support for simple file - if (currentElement.equals(WSDL_FILE) - || currentElement.equals(JAXRPC_MAPPING_FILE)) { - //owningTask.log("***** element name : " + currentElement, Project.MSG_VERBOSE); - String filename = currentText.trim(); - File file = new File(srcDir, filename); - ejbFiles.put(filename, file); - } - - // Get the value of the tag. Only the first occurrence. - if (currentElement.equals(EJB_NAME)) { - if (ejbName == null) { - ejbName = currentText.trim(); - } - } - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EJBDeploymentTool.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EJBDeploymentTool.java deleted file mode 100644 index 6190f65c61..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EJBDeploymentTool.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.antmodular.ejb2; - - - -import javax.xml.parsers.SAXParser; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; - - -public interface EJBDeploymentTool { - /** - * Process a deployment descriptor, generating the necessary vendor specific - * deployment files. - * - * @param descriptorFilename the name of the deployment descriptor - * @param saxParser a SAX parser which can be used to parse the deployment descriptor. - */ - void processDescriptor(String descriptorFilename, SAXParser saxParser) - throws BuildException; - - /** - * Called to validate that the tool parameters have been configured. - * - */ - void validateConfigured() throws BuildException; - - /** - * Set the task which owns this tool - */ - void setTask(Task task); - - /** - * Configure this tool for use in the ejbjar task. - */ - void configure(EjbJar.Config config); -} diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EjbJar.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EjbJar.java deleted file mode 100644 index a2fabdd668..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/EjbJar.java +++ /dev/null @@ -1,587 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.antmodular.ejb2; - -// Standard java imports -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.EnumeratedAttribute; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; -import org.xml.sax.SAXException; - -/** - * Provides automated EJB JAR file creation. - *

    - * Extends the - * MatchingTask class provided in the default ant distribution to provide a - * directory scanning EJB jarfile generator. - *

    - * - *

    - * The task works by taking the deployment descriptors one at a time and - * parsing them to locate the names of the classes which should be placed in - * the jar. The classnames are translated to java.io.Files by replacing - * periods with File.separatorChar and resolving the generated filename as a - * relative path under the srcDir attribute. All necessary files are then - * assembled into a jarfile. One jarfile is constructed for each deployment - * descriptor found. - *

    - * - * @author Tim Fennell - * @author Conor MacNeill - * @author Rob van Oostrum - * */ -public class EjbJar extends MatchingTask { - - /** - * Inner class used to record information about the location of a local DTD - */ - public static class DTDLocation - extends org.apache.tools.ant.types.DTDLocation { - } - - /** - * A class which contains the configuration state of the ejbjar task. - * This state is passed to the deployment tools for configuration - */ - static class Config { - /** - * Stores a handle to the directory under which to search for class - * files - */ - public File srcDir; - - /** - * Stores a handle to the directory under which to search for - * deployment descriptors - */ - public File descriptorDir; - - /** Instance variable that marks the end of the 'basename' */ - public String baseNameTerminator = "-"; - - /** Stores a handle to the destination EJB Jar file */ - public String baseJarName; - - /** - * Instance variable that determines whether to use a package structure - * of a flat directory as the destination for the jar files. - */ - public boolean flatDestDir = false; - - /** - * The classpath to use when loading classes - */ - public Path classpath; - - /** - * A Fileset of support classes - */ - public List supportFileSets = new ArrayList(); - - /** - * The list of configured DTD locations - */ - public ArrayList dtdLocations = new ArrayList(); - - /** - * The naming scheme used to determine the generated jar name - * from the descriptor information - */ - public NamingScheme namingScheme; - - /** - * The Manifest file - */ - public File manifest; - - /** - * The dependency analyzer to use to add additional classes to the jar - */ - public String analyzer; - } - - /** - * An EnumeratedAttribute class for handling different EJB jar naming - * schemes - */ - public static class NamingScheme extends EnumeratedAttribute { - /** - * Naming scheme where generated jar is determined from the ejb-name in - * the deployment descripor - */ - public static final String EJB_NAME = "ejb-name"; - - /** - * Naming scheme where the generated jar name is based on the - * name of the directory containing the deployment descriptor - */ - public static final String DIRECTORY = "directory"; - - /** - * Naming scheme where the generated jar name is based on the name of - * the deployment descriptor file - */ - public static final String DESCRIPTOR = "descriptor"; - - /** - * Naming scheme where the generated jar is named by the basejarname - * attribute - */ - public static final String BASEJARNAME = "basejarname"; - - /** - * Gets the values of the NamingScheme - * - * @return an array of the values of this attribute class. - */ - public String[] getValues() { - return new String[] {EJB_NAME, DIRECTORY, DESCRIPTOR, BASEJARNAME}; - } - } - - /** - * CMP versions supported - * valid CMP versions are 1.0 and 2.0 - * @since ant 1.6 - */ - public static class CMPVersion extends EnumeratedAttribute { - public static final String CMP1_0 = "1.0"; - public static final String CMP2_0 = "2.0"; - public String[] getValues() { - return new String[]{ - CMP1_0, - CMP2_0, - }; - } - } - /** - * The config which is built by this task and used by the various deployment - * tools to access the configuration of the ejbjar task - */ - private Config config = new Config(); - - - /** - * Stores a handle to the directory to put the Jar files in. This is - * only used by the generic deployment descriptor tool which is created - * if no other deployment descriptor tools are provided. Normally each - * deployment tool will specify the desitination dir itself. - */ - private File destDir; - - /** Instance variable that stores the suffix for the generated jarfile. */ - private String genericJarSuffix = "-generic.jar"; - - /** Instance variable that stores the CMP version for the jboss jarfile. */ - private String cmpVersion = CMPVersion.CMP1_0; - - /** The list of deployment tools we are going to run. */ - private ArrayList deploymentTools = new ArrayList(); - - /** - * Add a deployment tool to the list of deployment tools that will be - * processed - * - * @param deploymentTool a deployment tool instance to which descriptors - * will be passed for processing. - */ - protected void addDeploymentTool(EJBDeploymentTool deploymentTool) { - deploymentTool.setTask(this); - deploymentTools.add(deploymentTool); - } - - /** - * Adds a deployment tool for JOnAS server. - * - * @return the deployment tool instance to be configured. - */ - public JonasDeploymentTool createJonas() { - log("JOnAS deployment tools", Project.MSG_VERBOSE); - - JonasDeploymentTool tool = new JonasDeploymentTool(); - addDeploymentTool(tool); - return tool; - } - - /** - * Adds to the classpath used to locate the super classes and - * interfaces of the classes that will make up the EJB JAR. - * - * @return the path to be configured. - */ - public Path createClasspath() { - if (config.classpath == null) { - config.classpath = new Path(getProject()); - } - return config.classpath.createPath(); - } - - /** - * Create a DTD location record. This stores the location of a DTD. The - * DTD is identified by its public Id. The location may either be a file - * location or a resource location. - * - * @return the DTD location object to be configured by Ant - */ - public DTDLocation createDTD() { - DTDLocation dtdLocation = new DTDLocation(); - config.dtdLocations.add(dtdLocation); - - return dtdLocation; - } - - /** - * Adds a fileset for support elements. - * - * @return a fileset which can be populated with support files. - */ - public FileSet createSupport() { - FileSet supportFileSet = new FileSet(); - config.supportFileSets.add(supportFileSet); - return supportFileSet; - } - - - /** - * Set the Manifest file to use when jarring. As of EJB 1.1, manifest - * files are no longer used to configure the EJB. However, they still - * have a vital importance if the EJB is intended to be packaged in an - * EAR file. By adding "Class-Path" settings to a Manifest file, the EJB - * can look for classes inside the EAR file itself, allowing for easier - * deployment. This is outlined in the J2EE specification, and all J2EE - * components are meant to support it. - * - * @param manifest the manifest to be used in the EJB jar - */ - public void setManifest(File manifest) { - config.manifest = manifest; - } - - /** - * Sets the source directory, which is the directory that - * contains the classes that will be added to the EJB jar. Typically - * this will include the home and remote interfaces and the bean class. - * - * @param inDir the source directory. - */ - public void setSrcdir(File inDir) { - config.srcDir = inDir; - } - - /** - * Set the descriptor directory. The descriptor directory contains the - * EJB deployment descriptors. These are XML files that declare the - * properties of a bean in a particular deployment scenario. Such - * properties include, for example, the transactional nature of the bean - * and the security access control to the bean's methods. - * - * @param inDir the directory containing the deployment descriptors. - */ - public void setDescriptordir(File inDir) { - config.descriptorDir = inDir; - } - - /** - * Set the analyzer to use when adding in dependencies to the JAR. - * - * @param analyzer the name of the dependency analyzer or a class. - */ - public void setDependency(String analyzer) { - config.analyzer = analyzer; - } - - /** - * Set the base name of the EJB JAR that is to be created if it is not - * to be determined from the name of the deployment descriptor files. - * - * @param inValue the basename that will be used when writing the jar - * file containing the EJB - */ - public void setBasejarname(String inValue) { - config.baseJarName = inValue; - if (config.namingScheme == null) { - config.namingScheme = new NamingScheme(); - config.namingScheme.setValue(NamingScheme.BASEJARNAME); - } else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) { - throw new BuildException("The basejarname attribute is not " - + "compatible with the " - + config.namingScheme.getValue() + " naming scheme"); - } - } - - /** - * Set the naming scheme used to determine the name of the generated jars - * from the deployment descriptor - * - * @param namingScheme the naming scheme to be used - */ - public void setNaming(NamingScheme namingScheme) { - config.namingScheme = namingScheme; - if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) - && config.baseJarName != null) { - throw new BuildException("The basejarname attribute is not " - + "compatible with the " - + config.namingScheme.getValue() + " naming scheme"); - } - } - - /** - * Gets the destination directory. - * - * @return destination directory - * @since ant 1.6 - */ - public File getDestdir() { - return this.destDir; - } - - /** - * Set the destination directory. The EJB jar files will be written into - * this directory. The jar files that exist in this directory are also - * used when determining if the contents of the jar file have changed. - * Note that this parameter is only used if no deployment tools are - * specified. Typically each deployment tool will specify its own - * destination directory. - * - * @param inDir the destination directory in which to generate jars - */ - public void setDestdir(File inDir) { - this.destDir = inDir; - } - - /** - * Gets the CMP version. - * - * @return CMP version - * @since ant 1.6 - */ - public String getCmpversion() { - return this.cmpVersion; - } - - /** - * Sets the CMP version. - * - * @param version CMP version. - * Must be either 1.0 or 2.0.
    - * Default is 1.0.
    - * Initially, only the JBoss implementation does something specific for CMP 2.0.
    - * @since ant 1.6 - */ - public void setCmpversion(CMPVersion version) { - this.cmpVersion = version.getValue(); - } - - /** - * Set the classpath to use when resolving classes for inclusion in the jar. - * - * @param classpath the classpath to use. - */ - public void setClasspath(Path classpath) { - config.classpath = classpath; - } - - /** - * Controls whether the - * destination JARs are written out in the destination directory with - * the same hierarchical structure from which the deployment descriptors - * have been read. If this is set to true the generated EJB jars are - * written into the root of the destination directory, otherwise they - * are written out in the same relative position as the deployment - * descriptors in the descriptor directory. - * - * @param inValue the new value of the flatdestdir flag. - */ - public void setFlatdestdir(boolean inValue) { - config.flatDestDir = inValue; - } - - /** - * Set the suffix for the generated jar file. When generic jars are - * generated, they have a suffix which is appended to the the bean name - * to create the name of the jar file. Note that this suffix includes - * the extension fo te jar file and should therefore end with an - * appropriate extension such as .jar or .ear - * - * @param inString the string to use as the suffix. - */ - public void setGenericjarsuffix(String inString) { - this.genericJarSuffix = inString; - } - - /** - * The string which terminates the bean name. - * The convention used by this task is - * that bean descriptors are named as the BeanName with some suffix. The - * baseNameTerminator string separates the bean name and the suffix and - * is used to determine the bean name. - * - * @param inValue a string which marks the end of the basename. - */ - public void setBasenameterminator(String inValue) { - config.baseNameTerminator = inValue; - } - - /** - * Validate the config that has been configured from the build file - * - * @throws BuildException if the config is not valid - */ - private void validateConfig() throws BuildException { - if (config.srcDir == null) { - throw new BuildException("The srcDir attribute must be specified"); - } - - if (config.descriptorDir == null) { - config.descriptorDir = config.srcDir; - } - - if (config.namingScheme == null) { - config.namingScheme = new NamingScheme(); - config.namingScheme.setValue(NamingScheme.DESCRIPTOR); - } else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) - && config.baseJarName == null) { - throw new BuildException("The basejarname attribute must " - + "be specified with the basejarname naming scheme"); - } - } - - /** - * Invoked by Ant after the task is prepared, when it is ready to execute - * this task. - * - * This will configure all of the nested deployment tools to allow them to - * process the jar. If no deployment tools have been configured a generic - * tool is created to handle the jar. - * - * A parser is configured and then each descriptor found is passed to all - * the deployment tool elements for processing. - * - * @exception BuildException thrown whenever a problem is - * encountered that cannot be recovered from, to signal to ant - * that a major problem occurred within this task. - */ - public void execute() throws BuildException { - validateConfig(); - - if (deploymentTools.size() == 0) { - GenericDeploymentTool genericTool = new GenericDeploymentTool(); - genericTool.setTask(this); - genericTool.setDestdir(destDir); - genericTool.setGenericJarSuffix(genericJarSuffix); - deploymentTools.add(genericTool); - } - - for (Iterator i = deploymentTools.iterator(); i.hasNext();) { - EJBDeploymentTool tool = (EJBDeploymentTool) i.next(); - tool.configure(config); - tool.validateConfigured(); - } - - try { - // Create the parser using whatever parser the system dictates - SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); - saxParserFactory.setValidating(true); - saxParserFactory.setNamespaceAware(true); - SAXParser saxParser = saxParserFactory.newSAXParser(); - - - DirectoryScanner ds = getDirectoryScanner(config.descriptorDir); - ds.scan(); - String[] files = ds.getIncludedFiles(); - - log(files.length + " deployment descriptors located.", - Project.MSG_VERBOSE); - - // Loop through the files. Each file represents one deployment - // descriptor, and hence one bean in our model. - for (int index = 0; index < files.length; ++index) { - // process the deployment descriptor in each tool - for (Iterator i = deploymentTools.iterator(); i.hasNext();) { - EJBDeploymentTool tool = (EJBDeploymentTool) i.next(); - tool.processDescriptor(files[index], saxParser); - } - } - } catch (SAXException se) { - String msg = "SAXException while creating parser." - + " Details: " - + se.getMessage(); - throw new BuildException(msg, se); - } catch (ParserConfigurationException pce) { - String msg = "ParserConfigurationException while creating parser. " - + "Details: " + pce.getMessage(); - throw new BuildException(msg, pce); - } - } // end of execute() - -} - - - - - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenICTask.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenICTask.java deleted file mode 100644 index 4b2a42c36f..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenICTask.java +++ /dev/null @@ -1,330 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ -package org.ow2.jonas.antmodular.ejb2; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.antmodular.bootstrap.BootstrapTask; - -/** - * GenIC Task. That's basically an Ant Task wrapper around GenIC. - * - * @author Guillaume Sauthier - */ -public class GenICTask extends BootstrapTask { - - /** GenIC class name. */ - private static final String GENIC_CLASS = "org.ow2.jonas.generators.genic.GenIC"; - - /** validation of XML files ? */ - private boolean validation = true; - - /** name of javac command. */ - private String javac = null; - - /** list of javac options. */ - private String javacOpts = null; - - /** will GenIC keep already generated files ? */ - private boolean keepGen = false; - - /** - * specifies which RMIC compiler to user: the built-in one or the external - * one. - */ - private boolean noFastRMIC = false; - - /** protocol list. */ - private String protocols = null; - - /** nocompil. */ - private boolean nocompil = false; - - /** Invoke Javac with tools.jar. */ - private boolean invokeCmd = false; - - /** Options for rmic compiler. */ - private String rmicOpts = null; - - /** extra arguments to be passed to GenIC. */ - private String additionalArgs = null; - - /** verbose mode. */ - private boolean verbose = false; - - /** additionnal classpath for libs. */ - private Path libraryClasspath = null; - - /** inner FileSet list. */ - private List filesets = new ArrayList(); - - /** debug field. */ - private boolean debug = false; - - /** - * @return Returns an empty Path for inner element classpath - */ - @Override - public Path createClasspath() { - libraryClasspath = new Path(getProject()); - return libraryClasspath; - } - - /** - * @return Returns an empty FileSet - */ - public FileSet createFileSet() { - FileSet set = new FileSet(); - set.setProject(getProject()); - filesets.add(set); - return set; - } - - /** - * Set additional arguments for GenIC command line. - * @param added additional args - */ - public void setAdditionalargs(final String added) { - additionalArgs = added; - } - - /** - * Set verbose mode on/off. - * @param v boolean - */ - public void setVerbose(final boolean v) { - verbose = v; - } - - /** - * Set debug mode on/off. Used only by developers that wants to Debug GenIC - * @param d boolean - */ - public void setJvmdebug(final boolean d) { - debug = d; - } - - /** - * Use InvokeCmd option on/off. - * @param inv boolean - */ - public void setInvokecmd(final boolean inv) { - invokeCmd = inv; - } - - /** - * Do not compile generated java files. - * @param noc on/off - */ - public void setNocompil(final boolean noc) { - nocompil = noc; - } - - /** - * Set the optios to be passed to the RMI compiler. - * @param opts list of options - */ - public void setRmicopts(final String opts) { - rmicOpts = opts; - } - - /** - * Validate XML descriptors. - * @param v on/off - */ - public void setValidation(final boolean v) { - validation = v; - } - - /** - * Set the javac command line to be used. - * @param j path to javac executable - */ - public void setJavac(final String j) { - javac = j; - } - - /** - * Set the options to be given to javac. - * @param opts options - */ - public void setJavacopts(final String opts) { - javacOpts = opts; - } - - /** - * Keep already generated files. - * @param k on/off - */ - public void setKeepgenerated(final boolean k) { - keepGen = k; - } - - /** - * Specifies which RMIC compiler to use: the built-in fast one or the - * slower external one. - * @param value if true, use the external RMIC compiler - */ - public void setNoFastRMIC(final boolean value) { - noFastRMIC = value; - } - - /** - * Set the set of protocols for the generation. - * @param p protocol list (comma separated) - */ - public void setProtocols(final String p) { - protocols = p; - } - - /** - * Execute the WsGen Ant Task. - * @throws BuildException if something goes wrong - */ - @Override - public void execute() throws BuildException { - - // avoid a -n jonas in the GenIC command line - setServerName(null); - - for (Iterator fsIterator = filesets.iterator(); fsIterator.hasNext();) { - FileSet set = fsIterator.next(); - DirectoryScanner ds = set.getDirectoryScanner(getProject()); - ds.scan(); - String[] files = ds.getIncludedFiles(); - File srcDirectory = set.getDir(getProject()); - for (int i = 0; i < files.length; i++) { - - Java genic = getBootstraptask(GENIC_CLASS); - - configureGenIC(genic, srcDirectory + File.separator + files[i]); - - // calling GenIC task - log("Calling GenIC task for '" + srcDirectory + File.separator + files[i] + "'.", Project.MSG_VERBOSE); - - if (genic.executeJava() != 0) { - throw new BuildException("GenIC reported an error."); - } - } - } - - } - - /** - * @param genicJavaTask GenIC Task to be configured for GenIC - * @param filename name of the file to pass into GenIC - * @return a configured Java Task - * @throws BuildException if something goes wrong - */ - private Java configureGenIC(final Java genicJavaTask, final String filename) throws BuildException { - - // keepgenerated - if (keepGen) { - genicJavaTask.createArg().setValue("-keepgenerated"); - } - - if (noFastRMIC) { - genicJavaTask.createArg().setValue("-nofastrmic"); - } - - // novalidation - if (!validation) { - genicJavaTask.createArg().setValue("-novalidation"); - } - - // classpath - if (libraryClasspath != null) { - genicJavaTask.createArg().setValue("-classpath"); - genicJavaTask.createArg().setPath(libraryClasspath); - } - - // nocompil - if (nocompil) { - genicJavaTask.createArg().setValue("-nocompil"); - } - - // invokecmd - if (invokeCmd) { - genicJavaTask.createArg().setValue("-invokecmd"); - } - - // javac - if (javac != null) { - genicJavaTask.createArg().setValue("-javac"); - genicJavaTask.createArg().setLine(javac); - } - - // javacopts - if (javacOpts != null && !javacOpts.equals("")) { - genicJavaTask.createArg().setValue("-javacopts"); - genicJavaTask.createArg().setLine(javacOpts); - } - - // rmicopts - if (rmicOpts != null && !rmicOpts.equals("")) { - genicJavaTask.createArg().setValue("-rmicopts"); - genicJavaTask.createArg().setValue(rmicOpts); - } - - // verbose - if (verbose) { - genicJavaTask.createArg().setValue("-verbose"); - } - - // debug - if (debug) { - this.log("Launching in debug mode on port 12345, waiting for connection ...", Project.MSG_INFO); - genicJavaTask.createJvmarg().setLine("-Xdebug -Xnoagent -Xrunjdwp:transport=" - + "dt_socket,server=y,address=12345,suspend=y"); - } - - // additionalargs - if (additionalArgs != null) { - genicJavaTask.createArg().setLine(additionalArgs); - } - - // protocols - if (protocols != null) { - genicJavaTask.createArg().setValue("-protocols"); - genicJavaTask.createArg().setValue(protocols); - } - - // input file to process by GenIC - genicJavaTask.createArg().setValue(filename); - - return genicJavaTask; - - } - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenericDeploymentTool.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenericDeploymentTool.java deleted file mode 100644 index 6c0107635b..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/GenericDeploymentTool.java +++ /dev/null @@ -1,930 +0,0 @@ -/** - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.ow2.jonas.antmodular.ejb2; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; -import javax.xml.parsers.SAXParser; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Location; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; -import org.apache.tools.ant.util.depend.DependencyAnalyzer; -import org.ow2.jonas.antmodular.bootstrap.InnerClassFilenameFilter; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - - -/** - * A deployment tool which creates generic EJB jars. Generic jars contains - * only those classes and META-INF entries specified in the EJB 1.1 standard - * - * This class is also used as a framework for the creation of vendor specific - * deployment tools. A number of template methods are provided through which the - * vendor specific tool can hook into the EJB creation process. - * - */ - - -/** - * @WARNING : - * Method writeJar is modified. It allows to include or not inner classes for some classes). - * protected void writeJar(String baseName, File jarfile, Hashtable files, - * String publicId, boolean includeInnerClasses) throws BuildException { -*/ - -public class GenericDeploymentTool implements EJBDeploymentTool { - /** The standard META-INF directory in jar files */ - protected static final String META_DIR = "META-INF/"; - - /** The standard MANIFEST file */ - protected static final String MANIFEST = META_DIR + "MANIFEST.MF"; - - /** Name for EJB Deployment descriptor within EJB jars */ - protected static final String EJB_DD = "ejb-jar.xml"; - - /** A dependency analyzer name to find ancestor classes */ - public static final String ANALYZER_SUPER = "super"; - /** A dependency analyzer name to find all related classes */ - public static final String ANALYZER_FULL = "full"; - /** A dependency analyzer name for no analyzer */ - public static final String ANALYZER_NONE = "none"; - - /** The default analyzer */ - public static final String DEFAULT_ANALYZER = ANALYZER_SUPER; - - /** The analyzer class for the super analyzer */ - public static final String ANALYZER_CLASS_SUPER - = "org.apache.tools.ant.util.depend.bcel.AncestorAnalyzer"; - /** The analyzer class for the super analyzer */ - public static final String ANALYZER_CLASS_FULL - = "org.apache.tools.ant.util.depend.bcel.FullAnalyzer"; - - /** - * The configuration from the containing task. This config combined - * with the settings of the individual attributes here constitues the - * complete config for this deployment tool. - */ - private EjbJar.Config config; - - /** Stores a handle to the directory to put the Jar files in */ - private File destDir; - - /** The classpath to use with this deployment tool. This is appended to - any paths from the ejbjar task itself.*/ - private Path classpath; - - /** Instance variable that stores the suffix for the generated jarfile. */ - private String genericJarSuffix = "-generic.jar"; - - /** - * The task to which this tool belongs. This is used to access services - * provided by the ant core, such as logging. - */ - private Task task; - - /** - * The classloader generated from the given classpath to load - * the super classes and super interfaces. - */ - private ClassLoader classpathLoader = null; - - /** - * List of files have been loaded into the EJB jar - */ - private List addedfiles; - - /** - * Handler used to parse the EJB XML descriptor - */ - private DescriptorHandler handler; - - /** - * Dependency analyzer used to collect class dependencies - */ - private DependencyAnalyzer dependencyAnalyzer; - - public GenericDeploymentTool() { - } - - - /** - * Set the destination directory; required. - * @param inDir the destination directory. - */ - public void setDestdir(File inDir) { - this.destDir = inDir; - } - - /** - * Get the destination directory. - * - * @return the destination directory into which EJB jars are to be written - */ - protected File getDestDir() { - return destDir; - } - - - /** - * Set the task which owns this tool - * - * @param task the Task to which this deployment tool is associated. - */ - public void setTask(Task task) { - this.task = task; - } - - /** - * Get the task for this tool. - * - * @return the Task instance this tool is associated with. - */ - protected Task getTask() { - return task; - } - - /** - * Get the basename terminator. - * - * @return an ejbjar task configuration - */ - protected EjbJar.Config getConfig() { - return config; - } - - /** - * Indicate if this build is using the base jar name. - * - * @return true if the name of the generated jar is coming from the - * basejarname attribute - */ - protected boolean usingBaseJarName() { - return config.baseJarName != null; - } - - /** - * Set the suffix for the generated jar file. - * @param inString the string to use as the suffix. - */ - public void setGenericJarSuffix(String inString) { - this.genericJarSuffix = inString; - } - - /** - * Add the classpath for the user classes - * - * @return a Path instance to be configured by Ant. - */ - public Path createClasspath() { - if (classpath == null) { - classpath = new Path(task.getProject()); - } - return classpath.createPath(); - } - - /** - * Set the classpath to be used for this compilation. - * - * @param classpath the classpath to be used for this build. - */ - public void setClasspath(Path classpath) { - this.classpath = classpath; - } - - /** - * Get the classpath by combining the one from the surrounding task, if any - * and the one from this tool. - * - * @return the combined classpath - */ - protected Path getCombinedClasspath() { - Path combinedPath = classpath; - if (config.classpath != null) { - if (combinedPath == null) { - combinedPath = config.classpath; - } else { - combinedPath.append(config.classpath); - } - } - - return combinedPath; - } - - /** - * Log a message to the Ant output. - * - * @param message the message to be logged. - * @param level the severity of this message. - */ - protected void log(String message, int level) { - getTask().log(message, level); - } - - /** - * Get the build file location associated with this element's task. - * - * @return the task's location instance. - */ - protected Location getLocation() { - return getTask().getLocation(); - } - - private void createAnalyzer() { - String analyzer = config.analyzer; - if (analyzer == null) { - analyzer = DEFAULT_ANALYZER; - } - - if (analyzer.equals(ANALYZER_NONE)) { - return; - } - - String analyzerClassName = null; - if (analyzer.equals(ANALYZER_SUPER)) { - analyzerClassName = ANALYZER_CLASS_SUPER; - } else if (analyzer.equals(ANALYZER_FULL)) { - analyzerClassName = ANALYZER_CLASS_FULL; - } else { - analyzerClassName = analyzer; - } - - try { - Class analyzerClass = Class.forName(analyzerClassName); - dependencyAnalyzer - = (DependencyAnalyzer) analyzerClass.newInstance(); - dependencyAnalyzer.addClassPath(new Path(task.getProject(), - config.srcDir.getPath())); - dependencyAnalyzer.addClassPath(config.classpath); - } catch (NoClassDefFoundError e) { - dependencyAnalyzer = null; - task.log("Unable to load dependency analyzer: " + analyzerClassName - + " - dependent class not found: " + e.getMessage(), - Project.MSG_WARN); - } catch (Exception e) { - dependencyAnalyzer = null; - task.log("Unable to load dependency analyzer: " + analyzerClassName - + " - exception: " + e.getMessage(), - Project.MSG_WARN); - } - } - - - /** - * Configure this tool for use in the ejbjar task. - * - * @param config the configuration from the surrounding ejbjar task. - */ - public void configure(EjbJar.Config config) { - this.config = config; - - createAnalyzer(); - classpathLoader = null; - } - - /** - * Utility method that encapsulates the logic of adding a file entry to - * a .jar file. Used by execute() to add entries to the jar file as it is - * constructed. - * @param jStream A JarOutputStream into which to write the - * jar entry. - * @param inputFile A File from which to read the - * contents the file being added. - * @param logicalFilename A String representing the name, including - * all relevant path information, that should be stored for the entry - * being added. - */ - protected void addFileToJar(JarOutputStream jStream, - File inputFile, - String logicalFilename) - throws BuildException { - FileInputStream iStream = null; - try { - if (!addedfiles.contains(logicalFilename)) { - iStream = new FileInputStream(inputFile); - // Create the zip entry and add it to the jar file - ZipEntry zipEntry = new ZipEntry(logicalFilename.replace('\\', '/')); - jStream.putNextEntry(zipEntry); - - // Create the file input stream, and buffer everything over - // to the jar output stream - byte[] byteBuffer = new byte[2 * 1024]; - int count = 0; - do { - jStream.write(byteBuffer, 0, count); - count = iStream.read(byteBuffer, 0, byteBuffer.length); - } while (count != -1); - - //add it to list of files in jar - addedfiles.add(logicalFilename); - } - } catch (IOException ioe) { - log("WARNING: IOException while adding entry " - + logicalFilename + " to jarfile from " - + inputFile.getPath() + " " + ioe.getClass().getName() - + "-" + ioe.getMessage(), Project.MSG_WARN); - } finally { - // Close up the file input stream for the class file - if (iStream != null) { - try { - iStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - } - - protected DescriptorHandler getDescriptorHandler(File srcDir) { - DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir); - - registerKnownDTDs(handler); - - // register any DTDs supplied by the user - for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) { - EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next(); - handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation()); - } - return handler; - } - - /** - * Register the locations of all known DTDs. - * - * vendor-specific subclasses should override this method to define - * the vendor-specific locations of the EJB DTDs - */ - protected void registerKnownDTDs(DescriptorHandler handler) { - // none to register for generic - } - - public void processDescriptor(String descriptorFileName, SAXParser saxParser) { - - checkConfiguration(descriptorFileName, saxParser); - - try { - handler = getDescriptorHandler(config.srcDir); - - // Retrive the files to be added to JAR from EJB descriptor - Hashtable ejbFiles = parseEjbFiles(descriptorFileName, saxParser); - - // Add any support classes specified in the build file - addSupportClasses(ejbFiles); - - // Determine the JAR filename (without filename extension) - String baseName = getJarBaseName(descriptorFileName); - - String ddPrefix = getVendorDDPrefix(baseName, descriptorFileName); - - File manifestFile = getManifestFile(ddPrefix); - if (manifestFile != null) { - ejbFiles.put(MANIFEST, manifestFile); - } - - - - // First the regular deployment descriptor - ejbFiles.put(META_DIR + EJB_DD, - new File(config.descriptorDir, descriptorFileName)); - - // now the vendor specific files, if any - addVendorFiles(ejbFiles, ddPrefix); - - // add any dependent files - checkAndAddDependants(ejbFiles); - - // Lastly create File object for the Jar files. If we are using - // a flat destination dir, then we need to redefine baseName! - if (config.flatDestDir && baseName.length() != 0) { - int startName = baseName.lastIndexOf(File.separator); - if (startName == -1) { - startName = 0; - } - - int endName = baseName.length(); - baseName = baseName.substring(startName, endName); - } - - File jarFile = getVendorOutputJarFile(baseName); - - - // Check to see if we need a build and start doing the work! - if (needToRebuild(ejbFiles, jarFile)) { - // Log that we are going to build... - log("building " - + jarFile.getName() - + " with " - + String.valueOf(ejbFiles.size()) - + " files", - Project.MSG_INFO); - - // Use helper method to write the jarfile - String publicId = getPublicId(); - writeJar(baseName, jarFile, ejbFiles, publicId, true); - - } else { - // Log that the file is up to date... - log(jarFile.toString() + " is up to date.", - Project.MSG_VERBOSE); - } - - } catch (SAXException se) { - String msg = "SAXException while parsing '" - + descriptorFileName.toString() - + "'. This probably indicates badly-formed XML." - + " Details: " - + se.getMessage(); - throw new BuildException(msg, se); - } catch (IOException ioe) { - String msg = "IOException while parsing'" - + descriptorFileName.toString() - + "'. This probably indicates that the descriptor" - + " doesn't exist. Details: " - + ioe.getMessage(); - throw new BuildException(msg, ioe); - } - } - - /** - * This method is called as the first step in the processDescriptor method - * to allow vendor-specific subclasses to validate the task configuration - * prior to processing the descriptor. If the configuration is invalid, - * a BuildException should be thrown. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @exception BuildException Thrown if the configuration is invalid - */ - protected void checkConfiguration(String descriptorFileName, - SAXParser saxParser) throws BuildException { - - /* - * For the GenericDeploymentTool, do nothing. Vendor specific - * subclasses should throw a BuildException if the configuration is - * invalid for their server. - */ - } - - /** - * This method returns a list of EJB files found when the specified EJB - * descriptor is parsed and processed. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @return Hashtable of EJB class (and other) files to be - * added to the completed JAR file - * @throws SAXException Any SAX exception, possibly wrapping another - * exception - * @throws IOException An IOException from the parser, possibly from a - * the byte stream or character stream - */ - protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser) - throws IOException, SAXException { - FileInputStream descriptorStream = null; - Hashtable ejbFiles = null; - - try { - - /* Parse the ejb deployment descriptor. While it may not - * look like much, we use a SAXParser and an inner class to - * get hold of all the classfile names for the descriptor. - */ - descriptorStream - = new FileInputStream(new File(config.descriptorDir, descriptorFileName)); - saxParser.parse(new InputSource(descriptorStream), handler); - - ejbFiles = handler.getFiles(); - - } finally { - if (descriptorStream != null) { - try { - descriptorStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - - return ejbFiles; - } - - /** - * Adds any classes the user specifies using support nested elements - * to the ejbFiles Hashtable. - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - */ - protected void addSupportClasses(Hashtable ejbFiles) { - // add in support classes if any - Project project = task.getProject(); - for (Iterator i = config.supportFileSets.iterator(); i.hasNext();) { - FileSet supportFileSet = (FileSet) i.next(); - File supportBaseDir = supportFileSet.getDir(project); - DirectoryScanner supportScanner = supportFileSet.getDirectoryScanner(project); - supportScanner.scan(); - String[] supportFiles = supportScanner.getIncludedFiles(); - for (int j = 0; j < supportFiles.length; ++j) { - ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j])); - } - } - } - - - /** - * Using the EJB descriptor file name passed from the ejbjar - * task, this method returns the "basename" which will be used to name the - * completed JAR file. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @return The "basename" which will be used to name the - * completed JAR file - */ - protected String getJarBaseName(String descriptorFileName) { - - String baseName = ""; - - // Work out what the base name is - if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME)) { - String canonicalDescriptor = descriptorFileName.replace('\\', '/'); - int index = canonicalDescriptor.lastIndexOf('/'); - if (index != -1) { - baseName = descriptorFileName.substring(0, index + 1); - } - baseName += config.baseJarName; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator); - int endBaseName = -1; - if (lastSeparatorIndex != -1) { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, - lastSeparatorIndex); - } else { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator); - } - - if (endBaseName != -1) { - baseName = descriptorFileName.substring(0, endBaseName); - } else { - throw new BuildException("Unable to determine jar name " - + "from descriptor \"" + descriptorFileName + "\""); - } - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) { - File descriptorFile = new File(config.descriptorDir, descriptorFileName); - String path = descriptorFile.getAbsolutePath(); - int lastSeparatorIndex - = path.lastIndexOf(File.separator); - if (lastSeparatorIndex == -1) { - throw new BuildException("Unable to determine directory name holding descriptor"); - } - String dirName = path.substring(0, lastSeparatorIndex); - int dirSeparatorIndex = dirName.lastIndexOf(File.separator); - if (dirSeparatorIndex != -1) { - dirName = dirName.substring(dirSeparatorIndex + 1); - } - - baseName = dirName; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME)) { - baseName = handler.getEjbName(); - } - return baseName; - } - - /** - * Get the prefix for vendor deployment descriptors. - * - * This will contain the path and the start of the descriptor name, - * depending on the naming scheme - */ - public String getVendorDDPrefix(String baseName, String descriptorFileName) { - String ddPrefix = null; - - if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - ddPrefix = baseName + config.baseNameTerminator; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME) - || config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME) - || config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) { - String canonicalDescriptor = descriptorFileName.replace('\\', '/'); - int index = canonicalDescriptor.lastIndexOf('/'); - if (index == -1) { - ddPrefix = ""; - } else { - ddPrefix = descriptorFileName.substring(0, index + 1); - } - } - return ddPrefix; - } - - /** - * Add any vendor specific files which should be included in the - * EJB Jar. - */ - protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { - // nothing to add for generic tool. - } - - - /** - * Get the vendor specific name of the Jar that will be output. The modification date - * of this jar will be checked against the dependent bean classes. - */ - File getVendorOutputJarFile(String baseName) { - return new File(destDir, baseName + genericJarSuffix); - } - - /** - * This method checks the timestamp on each file listed in the - * ejbFiles and compares them to the timestamp on the jarFile - * . If the jarFile's timestamp is more recent than - * each EJB file, true is returned. Otherwise, false - * is returned. - * TODO: find a way to check the manifest-file, that is found by naming convention - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - * @param jarFile JAR file which will contain all of the EJB classes (and - * other) files - * @return boolean indicating whether or not the jarFile - * is up to date - */ - protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) { - if (jarFile.exists()) { - long lastBuild = jarFile.lastModified(); - - Iterator fileIter = ejbFiles.values().iterator(); - - // Loop through the files seeing if any has been touched - // more recently than the destination jar. - while (fileIter.hasNext()) { - File currentFile = (File) fileIter.next(); - if (lastBuild < currentFile.lastModified()) { - log("Build needed because " + currentFile.getPath() + " is out of date", - Project.MSG_VERBOSE); - return true; - } - } - return false; - } - - return true; - } - - /** - * Returns the Public ID of the DTD specified in the EJB descriptor. Not - * every vendor-specific DeploymentTool will need to reference - * this value or may want to determine this value in a vendor-specific way. - * - * @return Public ID of the DTD specified in the EJB descriptor. - */ - protected String getPublicId() { - return handler.getPublicId(); - } - - /** - * Get the manifets file to use for building the generic jar. - * - * If the file does not exist the global manifest from the config is used - * otherwise the default Ant manifest will be used. - * - * @param prefix the prefix where to llook for the manifest file based on - * the naming convention. - * - * @return the manifest file or null if the manifest file does not exist - */ - protected File getManifestFile(String prefix) { - File manifestFile - = new File(getConfig().descriptorDir, prefix + "manifest.mf"); - if (manifestFile.exists()) { - return manifestFile; - } - - if (config.manifest != null) { - return config.manifest; - } - return null; - } - - /** - * Method used to encapsulate the writing of the JAR file. Iterates over the - * filenames/java.io.Files in the Hashtable stored on the instance variable - * ejbFiles. - * @param includeInnerClasses if true, include inner classes - */ - protected void writeJar(String baseName, File jarfile, Hashtable files, - String publicId, boolean includeInnerClasses) throws BuildException { - - JarOutputStream jarStream = null; - try { - // clean the addedfiles Vector - addedfiles = new ArrayList(); - - /* If the jarfile already exists then whack it and recreate it. - * Should probably think of a more elegant way to handle this - * so that in case of errors we don't leave people worse off - * than when we started =) - */ - if (jarfile.exists()) { - jarfile.delete(); - } - jarfile.getParentFile().mkdirs(); - jarfile.createNewFile(); - - InputStream in = null; - Manifest manifest = null; - try { - File manifestFile = (File) files.get(MANIFEST); - if (manifestFile != null && manifestFile.exists()) { - in = new FileInputStream(manifestFile); - } else { - String defaultManifest = "/org/apache/tools/ant/defaultManifest.mf"; - in = this.getClass().getResourceAsStream(defaultManifest); - if (in == null) { - throw new BuildException("Could not find " - + "default manifest: " + defaultManifest); - } - } - - manifest = new Manifest(in); - } catch (IOException e) { - throw new BuildException ("Unable to read manifest", e, getLocation()); - } finally { - if (in != null) { - in.close(); - } - } - - // Create the streams necessary to write the jarfile - - jarStream = new JarOutputStream(new FileOutputStream(jarfile), manifest); - jarStream.setMethod(JarOutputStream.DEFLATED); - - // Loop through all the class files found and add them to the jar - for (Iterator entryIterator = files.keySet().iterator(); entryIterator.hasNext();) { - String entryName = (String) entryIterator.next(); - if (entryName.equals(MANIFEST)) { - continue; - } - - File entryFile = (File) files.get(entryName); - - log("adding file '" + entryName + "'", - Project.MSG_VERBOSE); - - addFileToJar(jarStream, entryFile, entryName); - - // See if there are any inner classes for this class and add them in if there are - InnerClassFilenameFilter flt = new InnerClassFilenameFilter(entryFile.getName()); - File entryDir = entryFile.getParentFile(); - String[] innerfiles = entryDir.list(flt); - if (innerfiles != null && includeInnerClasses) { - for (int i = 0, n = innerfiles.length; i < n; i++) { - - //get and clean up innerclass name - int entryIndex = entryName.lastIndexOf(entryFile.getName()) - 1; - if (entryIndex < 0) { - entryName = innerfiles[i]; - } else { - entryName = entryName.substring(0, entryIndex) - + File.separatorChar + innerfiles[i]; - } - // link the file - entryFile = new File(config.srcDir, entryName); - - log("adding innerclass file '" + entryName + "'", - Project.MSG_VERBOSE); - - addFileToJar(jarStream, entryFile, entryName); - - } - } - } - } catch (IOException ioe) { - String msg = "IOException while processing ejb-jar file '" - + jarfile.toString() - + "'. Details: " - + ioe.getMessage(); - throw new BuildException(msg, ioe); - } finally { - if (jarStream != null) { - try { - jarStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - } // end of writeJar - - - /** - * Add all available classes, that depend on Remote, Home, Bean, PK - * @param checkEntries files, that are extracted from the deployment descriptor - */ - protected void checkAndAddDependants(Hashtable checkEntries) - throws BuildException { - - if (dependencyAnalyzer == null) { - return; - } - - dependencyAnalyzer.reset(); - - Iterator i = checkEntries.keySet().iterator(); - while (i.hasNext()) { - String entryName = (String) i.next(); - if (entryName.endsWith(".class")) { - String className = entryName.substring(0, - entryName.length() - ".class".length()); - className = className.replace(File.separatorChar, '/'); - className = className.replace('/', '.'); - - dependencyAnalyzer.addRootClass(className); - } - } - - Enumeration e = dependencyAnalyzer.getClassDependencies(); - - while (e.hasMoreElements()) { - String classname = (String) e.nextElement(); - String location - = classname.replace('.', File.separatorChar) + ".class"; - File classFile = new File(config.srcDir, location); - if (classFile.exists()) { - checkEntries.put(location, classFile); - log("dependent class: " + classname + " - " + classFile, - Project.MSG_VERBOSE); - } - } - } - - - /** - * Returns a Classloader object which parses the passed in generic EjbJar classpath. - * The loader is used to dynamically load classes from javax.ejb.* and the classes - * being added to the jar. - * - */ - protected ClassLoader getClassLoaderForBuild() { - if (classpathLoader != null) { - return classpathLoader; - } - - Path combinedClasspath = getCombinedClasspath(); - - // only generate a new ClassLoader if we have a classpath - if (combinedClasspath == null) { - classpathLoader = getClass().getClassLoader(); - } else { - classpathLoader - = getTask().getProject().createClassLoader(combinedClasspath); - } - - return classpathLoader; - } - - /** - * Called to validate that the tool parameters have been configured. - * - * @throws BuildException If the Deployment Tool's configuration isn't - * valid - */ - public void validateConfigured() throws BuildException { - if ((destDir == null) || (!destDir.isDirectory())) { - String msg = "A valid destination directory must be specified " - + "using the \"destdir\" attribute."; - throw new BuildException(msg, getLocation()); - } - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/JonasDeploymentTool.java b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/JonasDeploymentTool.java deleted file mode 100644 index 93f394167d..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/java/org/ow2/jonas/antmodular/ejb2/JonasDeploymentTool.java +++ /dev/null @@ -1,915 +0,0 @@ -/** - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Ant", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -package org.ow2.jonas.antmodular.ejb2; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -import javax.xml.parsers.SAXParser; - -import org.apache.tools.ant.AntClassLoader; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.apache.tools.ant.types.Reference; -import org.ow2.jonas.antmodular.bootstrap.JOnASAntTool; - -/** - * The deployment tool to add the jonas specific deployment descriptors to the - * ejb JAR file. JONAS only requires one additional file jonas-ejb-jar.xml. - * @author Cyrille Morvan , Ingenosya France , - * Contributor(s): Mathieu - * Peltier Adriana Danes: change configuration directory name from - * "config" to "conf" - * @version 1.0 - * @see EjbJar#createJonas - */ -public class JonasDeploymentTool extends GenericDeploymentTool { - - /** Public Id of the standard deployment descriptor DTD. */ - protected static final String EJB_JAR_1_1_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"; - protected static final String EJB_JAR_2_0_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"; - - /** Public Id of the JOnAS-specific deployment descriptor DTD. */ - protected static final String JONAS_EJB_JAR_2_4_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 2.4//EN"; - protected static final String JONAS_EJB_JAR_2_5_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 2.5//EN"; - protected static final String JONAS_EJB_JAR_3_0_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.0//EN"; - protected static final String JONAS_EJB_JAR_3_2_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.2//EN"; - protected static final String JONAS_EJB_JAR_3_3_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.3//EN"; - protected static final String JONAS_EJB_JAR_3_3_2_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.3.2//EN"; - - /** - * Name of the standard deployment descriptor DTD (these files are stored in - * the ${JONAS_ROOT}/xml directory). - */ - protected static final String EJB_JAR_1_1_DTD = "/org/ow2/jonas/deployment/ejb/ejb-jar_1_1.dtd"; - protected static final String EJB_JAR_2_0_DTD = "/org/ow2/jonas/deployment/ejb/ejb-jar_2_0.dtd"; - - /** - * Name of the JOnAS-specific deployment descriptor DTD (these files are - * stored in the ${JONAS_ROOT}/xml directory). - */ - protected static final String JONAS_EJB_JAR_2_4_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_4.dtd"; - protected static final String JONAS_EJB_JAR_2_5_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_5.dtd"; - protected static final String JONAS_EJB_JAR_3_0_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_0.dtd"; - protected static final String JONAS_EJB_JAR_3_2_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_2.dtd"; - protected static final String JONAS_EJB_JAR_3_3_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3.dtd"; - protected static final String JONAS_EJB_JAR_3_3_2_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3_2.dtd"; - - /** Default JOnAS deployment descriptor name. */ - protected static final String JONAS_DD = "jonas-ejb-jar.xml"; - - /** Bootstrap class name. */ - protected static final String BOOTSTRAP_CLASS = "org.ow2.jonas.client.boot.Bootstrap"; - - /** GenIC class name. */ - protected static final String GENIC_CLASS = "org.ow2.jonas.generators.genic.GenIC"; - - /** - * Filename of the standard EJB descriptor (which is passed to this class - * from the parent "ejbjar" task). This file is relative to the directory - * specified by the "srcdir" attribute in the ejbjar task. - */ - private String descriptorName; - - /** - * Filename of the JOnAS-specific EJB descriptor (which is passed to this - * class from the parent "ejbjar" task). This file is relative to the - * directory specified by the "srcdir" attribute in the ejbjar task. - */ - private String jonasDescriptorName; - - /* ------------- */ - /* GenIC options */ - /* ------------- */ - - /** - * Temporary output directory used by GenIC. - */ - private File outputdir; - - /** - * true if the intermediate Java source files generated by - * GenIC must be deleted or not. The default is false - */ - private boolean keepgenerated = false; - - - /** - * If true, the JDK-provided RMIC compiler is used. If false, the built-in - * rmic compiler is used. - */ - private boolean nofastrmic = false; - - /** - * true if the generated source files must not be compiled - * via the java and rmi compilers. The default is false. - */ - private boolean nocompil = false; - - /** - * Equivalent to the -invokecmd GenIC option. The default is - * false. - */ - private boolean invokeCmd = false; - - /** - * true if the XML deployment descriptors must be parsed - * without validation. The default is false. - */ - private boolean novalidation = false; - - /** - * Java compiler to use. The default is the value of - * build.compiler property. - */ - private String javac; - - /** Options to pass to the java compiler. */ - private String javacopts; - - /** Options to pass to the rmi compiler. */ - private String rmicopts; - - /** - * true if the GenIC call must be verbose. The default is - * false. - */ - private boolean verbose = false; - - /** Additional args to send to GenIC. */ - private String additionalargs; - - /** Additional args to pass to the GenIC JVM. */ - private String jvmopts = null; - - /** List of protocols (used for Carol) */ - private String protocols = null; - - /* ------------- */ - /* other options */ - /* ------------- */ - - /** JOnAS root directory. */ - private File jonasroot; - - /** JOnAS base directory. */ - private File jonasbase; - - /** - * true if the generic JAR file used as input to GenIC must - * be retained. The default is false. - */ - private boolean keepgeneric = false; - - /** Stores the suffix for the JOnAS JAR file. The default is '.jar'. */ - private String suffix = ".jar"; - - /** - * true if GenIC must not be run on the EJB JAR. The default - * is false. - */ - private boolean nogenic = false; - - /* -------------------- */ - /* GenIC options setter */ - /* -------------------- */ - - /** - * Set the {@link #keepgenerated}flag. - * @param aBoolean true if the flag must be set. - */ - public void setKeepgenerated(boolean aBoolean) { - keepgenerated = aBoolean; - } - - public void setNoFastRMIC(boolean value) { - nofastrmic = value; - } - - /** - * Do nothing because the mappernames attribute is deprecated - * @param aString list of mapper names separed by , - */ - public void setMappernames(String aString) { - log("'mappernames' attribute ignored (deprecated)", Project.MSG_WARN); - } - - /** - * Set the protocols list - * @param aString list of the protocol names separed by , - */ - public void setProtocols(String aString) { - protocols = aString; - } - - /** - * Set the classpath as a Reference on another path - * @param r Referenced Classpath - */ - public void setClasspathref(Reference r) { - createClasspath().setRefid(r); - } - /** - * Set the {@link #additionalargs}. - * @param aString additional args. - */ - public void setAdditionalargs(String aString) { - additionalargs = aString; - } - - /** - * Set the {@link #nocompil}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNocompil(boolean aBoolean) { - nocompil = aBoolean; - } - - /** - * Set the {@link #invokecmd}flag. - * @param aBoolean true if the flag must be set. - */ - public void setInvokecmd(boolean aBoolean) { - invokeCmd = aBoolean; - } - - /** - * Set the {@link #novalidation}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNovalidation(boolean aBoolean) { - novalidation = aBoolean; - } - - /** - * Set the java compiler {@link #javac}to use. - * @param aString the java compiler. - */ - public void setJavac(String aString) { - javac = aString; - } - - /** - * Set the options to pass to the java compiler. - * @param aString the options. - */ - public void setJavacopts(String aString) { - javacopts = aString; - } - - /** - * Set the options to pass to the rmi compiler. - * @param aString the options. - */ - public void setRmicopts(String aString) { - rmicopts = aString; - } - - /** - * Set the {@link #verbose}flag. - * @param aBoolean true if the flag must be set. - */ - public void setVerbose(boolean aBoolean) { - verbose = aBoolean; - } - - /* -------------------- */ - /* other options setter */ - /* -------------------- */ - - /** - * Set the JOnAS root directory. - * @param aFile the JOnAS root directory. - */ - public void setJonasroot(File aFile) { - jonasroot = aFile; - } - - /** - * Set the JOnAS base directory. - * @param aFile the JOnAS base directory. - */ - public void setJonasbase(File aFile) { - jonasbase = aFile; - } - - /** - * Set the {@link #keepgeneric}flag. - * @param aBoolean true if the flag must be set. - */ - public void setKeepgeneric(boolean aBoolean) { - keepgeneric = aBoolean; - } - - /** - * Set the {@link #jarsuffix}. - * @param aString the string to use as the suffix. - */ - public void setJarsuffix(String aString) { - suffix = aString; - } - - /** - * Set the {@link #nogenic}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNogenic(boolean aBoolean) { - nogenic = aBoolean; - } - - /** - * Set the additional args to pass to the GenIC JVM. - * @param aString the options. - */ - public void setJvmopts(String aString) { - jvmopts = aString; - } - - /* ------------- */ - /* other methods */ - /* ------------- */ - - public void processDescriptor(String aDescriptorName, SAXParser saxParser) { - - descriptorName = aDescriptorName; - - log("JOnAS Deployment Tool processing for JOnAS: " + descriptorName, Project.MSG_VERBOSE); - - super.processDescriptor(descriptorName, saxParser); - - if (outputdir != null) { - // the method deleteOnExit() do not work because the directory is - // not empty - log("Deleting temp output directory '" + outputdir + "'.", Project.MSG_VERBOSE); - JOnASAntTool.deleteAllFiles(outputdir); - } - } - - protected void writeJar(String baseName, File jarfile, Hashtable ejbFiles, String publicId, - boolean includeInnerClasses) throws BuildException { - - // create the generic jar first - File genericJarFile = super.getVendorOutputJarFile(baseName); - - super.writeJar(baseName, genericJarFile, ejbFiles, publicId, true); - - - // GenIC call on generic jar - addGenICGeneratedFiles(genericJarFile, ejbFiles); - - // merge Manifest give by user if exist with this generated by Genic - if (this.getConfig() != null && this.getConfig().manifest != null - && this.getConfig().manifest.exists()) { - File filePathGenicManifest = (File) ejbFiles.get("META-INF/MANIFEST.MF"); - if (filePathGenicManifest != null) - mergeManifest(this.getConfig().manifest, filePathGenicManifest); - else - ejbFiles.put("META-INF/MANIFEST.MF", this.getConfig().manifest); - } - - // create the real jar - super.writeJar(baseName, getVendorOutputJarFile(baseName), ejbFiles, publicId, false); - - //log("genericJarFile: " + genericJarFile, Project.MSG_VERBOSE); - //log("getVendorOutputJarFile(baseName): " + - //getVendorOutputJarFile(baseName), Project.MSG_VERBOSE); - //log("baseName: " + baseName, Project.MSG_VERBOSE); - - if (!keepgeneric) { - log("Deleting generic JAR " + genericJarFile.toString(), Project.MSG_VERBOSE); - genericJarFile.delete(); - } - } - - /** - * Merge Manifest file - * @param manifestUserFile : input file - * @param manifestGenicFile : output file - */ - protected void mergeManifest(File manifestUserFile, File manifestGenicFile) { - try { - InputStream userStream = new FileInputStream(manifestUserFile); - InputStream genICStream = new FileInputStream(manifestGenicFile); - - Manifest userManifest = new Manifest(userStream); - Manifest genICManifest = new Manifest(genICStream); - - // close streams - userStream.close(); - genICStream.close(); - - // Merge main attributes - Attributes userMainAttributes = userManifest.getMainAttributes(); - Attributes genICMainAttributes = genICManifest.getMainAttributes(); - Iterator itUserMainAttributes = userMainAttributes.keySet().iterator(); - while (itUserMainAttributes.hasNext()) { - Object name = itUserMainAttributes.next(); - Object value = userMainAttributes.get(name); - genICMainAttributes.put(name, value); - } - - - // Merge specific entries - Map userEntries = userManifest.getEntries(); - Set keys = userEntries.keySet(); - Iterator itKeys = keys.iterator(); - - // Get keys of user manifest - while (itKeys.hasNext()) { - String key = (String) itKeys.next(); - Attributes attributes = userManifest.getAttributes(key); - // key is present in final manifest ? - Attributes genICAttributes = genICManifest.getAttributes(key); - if (genICAttributes == null) { - genICAttributes = new Attributes(); - genICManifest.getEntries().put(key, genICAttributes); - } - - // write attributes of user manifest into genic manifest - Set atKeys = attributes.keySet(); - Iterator itAt = atKeys.iterator(); - while (itAt.hasNext()) { - Object name = itAt.next(); - Object value = attributes.get(name); - genICAttributes.put(name, value); - } - } - FileOutputStream fos = new FileOutputStream(manifestGenicFile); - genICManifest.write(fos); - fos.close(); - - - - } catch (IOException e) { - log("Unable to update Manifest with user manifest :" + e.getMessage(), Project.MSG_WARN); - } - } - - protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { - - // JOnAS-specific descriptor deployment - jonasDescriptorName = getJonasDescriptorName(); - File jonasDD = new File(getConfig().descriptorDir, jonasDescriptorName); - - if (jonasDD.exists()) { - ejbFiles.put(META_DIR + JONAS_DD, jonasDD); - } else { - log("Unable to locate the JOnAS deployment descriptor. It was expected to be in: " + jonasDD.getPath() - + ".", Project.MSG_WARN); - } - } - - protected File getVendorOutputJarFile(String baseName) { - return new File(getDestDir(), baseName + suffix); - } - - /** - * Determines the name of the JOnAS-specific EJB descriptor using the - * specified standard EJB descriptor name. In general, the standard - * descriptor will be named "[basename]-ejb-jar.xml", and this method will - * return "[basename]-jonas-ejb-jar.xml" or "jonas-[basename].xml" - * @return The name of the JOnAS-specific EJB descriptor file. - */ - private String getJonasDescriptorName() { - - // descriptorName = - // examples = /org/objectweb/fooAppli/foo/Foo-ejb-jar.xml - // examples = /org/objectweb/fooAppli/foo/Foo.xml (JOnAS convention) - - String jonasDescriptorName; // JOnAS-specific DD - boolean jonasConvention = false; // true if the JOnAS convention is used - // for the DD - String path; // Directory path of the EJB descriptor - String fileName; // EJB descriptor file name - String baseName; // Filename appearing before name terminator - String remainder; // Filename appearing after the name terminator - - int startOfFileName = descriptorName.lastIndexOf(File.separatorChar); - if (startOfFileName != -1) { - // extract path info - path = descriptorName.substring(0, startOfFileName + 1); - fileName = descriptorName.substring(startOfFileName + 1); - } else { - // descriptorName is just a file without path - path = ""; - fileName = descriptorName; - } - - if (fileName.startsWith(EJB_DD)) { - return path + JONAS_DD; - } - - int endOfBaseName = descriptorName.indexOf(getConfig().baseNameTerminator, startOfFileName); - - /* - * Check for the odd case where the terminator and/or filename extension - * aren't found. These will ensure "jonas-" appears at the end of the - * name and before the '.' (if present). - */ - if (endOfBaseName < 0) { - // baseNameTerminator not found: the descriptor use the - // JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and - // not [Foo-ejb-jar.xml, - // Foo-jonas-ejb-jar.xml]. - endOfBaseName = descriptorName.lastIndexOf('.') - 1; - if (endOfBaseName < 0) { - // no . found - endOfBaseName = descriptorName.length() - 1; - } - - jonasConvention = true; - } - - baseName = descriptorName.substring(startOfFileName + 1, endOfBaseName + 1); - remainder = descriptorName.substring(endOfBaseName + 1); - - if (jonasConvention) { - jonasDescriptorName = path + "jonas-" + baseName + ".xml"; - } else { - jonasDescriptorName = path + baseName + "jonas-" + remainder; - } - - log("Standard EJB descriptor name: " + descriptorName, Project.MSG_VERBOSE); - log("JOnAS-specific descriptor name: " + jonasDescriptorName, Project.MSG_VERBOSE); - - return jonasDescriptorName; - } - - protected String getJarBaseName(String descriptorFileName) { - - String baseName = null; - - if (getConfig().namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - - // try to find JOnAS specific convention name - if (descriptorFileName.indexOf(getConfig().baseNameTerminator) == -1) { - - // baseNameTerminator not found: the descriptor use the - // JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and - // not [Foo-ejb-jar.xml, - // Foo-jonas-ejb-jar.xml]. - - String aCanonicalDescriptor = descriptorFileName.replace('\\', '/'); - int lastSeparatorIndex = aCanonicalDescriptor.lastIndexOf('/'); - int endOfBaseName; - - if (lastSeparatorIndex != -1) { - endOfBaseName = descriptorFileName.indexOf(".xml", lastSeparatorIndex); - } else { - endOfBaseName = descriptorFileName.indexOf(".xml"); - } - - if (endOfBaseName != -1) { - baseName = descriptorFileName.substring(0, endOfBaseName); - } - } - } - - if (baseName == null) { - // else get standard baseName - baseName = super.getJarBaseName(descriptorFileName); - } - - log("JAR base name: " + baseName, Project.MSG_VERBOSE); - - return baseName; - } - - protected void registerKnownDTDs(DescriptorHandler handler) { - - handler.registerDTD(EJB_JAR_1_1_PUBLIC_ID, EJB_JAR_1_1_DTD); - handler.registerDTD(EJB_JAR_2_0_PUBLIC_ID, EJB_JAR_2_0_DTD); - - handler.registerDTD(JONAS_EJB_JAR_2_4_PUBLIC_ID, JONAS_EJB_JAR_2_4_DTD); - handler.registerDTD(JONAS_EJB_JAR_2_5_PUBLIC_ID, JONAS_EJB_JAR_2_5_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_0_PUBLIC_ID, JONAS_EJB_JAR_3_0_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_2_PUBLIC_ID, JONAS_EJB_JAR_3_2_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_3_PUBLIC_ID, JONAS_EJB_JAR_3_3_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_3_2_PUBLIC_ID, JONAS_EJB_JAR_3_3_2_DTD); - } - - /** - * Add to the given hashtable all the file generated by GenIC. - * @param genericJarFile jar file. - * @param ejbFiles the hashtable. - */ - private void addGenICGeneratedFiles(File genericJarFile, Hashtable ejbFiles) { - - Java genicTask = null; // GenIC task - - if (nogenic) { - return; - } - - genicTask = (Java) getTask().getProject().createTask("java"); - genicTask.setTaskName("genic"); - genicTask.setFork(true); - - // jonas root - genicTask.createJvmarg().setValue("-Djonas.root=" + jonasroot); - - // jonas base - genicTask.createJvmarg().setValue("-Djonas.base=" + jonasbase); - - // Endorsed directory - File endorsedDir = new File(new File(jonasroot, "lib"), "endorsed"); - genicTask.createJvmarg().setValue("-Djava.endorsed.dirs=" + endorsedDir); - - // java policy file - String jonasConfigDir = jonasroot + File.separator + "conf"; - File javaPolicyFile = new File(jonasConfigDir, "java.policy"); - if (javaPolicyFile.exists()) { - genicTask.createJvmarg().setValue("-Djava.security.policy=" + javaPolicyFile.toString()); - } - - // The bootstrap class must launch the GenIC class - genicTask.createArg().setValue(JonasDeploymentTool.GENIC_CLASS); - - // outputdir - try { - outputdir = createTempDir(); - } catch (IOException aIOException) { - throw new BuildException("Cannot create temp dir", aIOException); - } - log("Using temporary output directory: " + outputdir, Project.MSG_VERBOSE); - - genicTask.createArg().setValue("-d"); - genicTask.createArg().setFile(outputdir); - - // classpath - Path classpath = getCombinedClasspath(); - if (classpath == null) { - classpath = new Path(getTask().getProject()); - } - // add client-bootstrap.jar - String bootJar = jonasroot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "client-bootstrap.jar"; - String clientJar = jonasroot + File.separator + "lib" + File.separator + "client.jar"; - Path bootstrap = new Path(getTask().getProject(), bootJar); - Path clientPath = new Path(getTask().getProject(), clientJar); - bootstrap.append(clientPath); - //classpath.append(new Path(classpath.getProject(), bootJar)); - - classpath.append(new Path(classpath.getProject(), outputdir.toString())); - - log("Using classpath: " + bootstrap.toString(), Project.MSG_VERBOSE); - genicTask.setClasspath(bootstrap); - - if (!checkBootstrapClassName(bootstrap)) { - log("Cannot find bootstrap class in classpath.", Project.MSG_ERR); - throw new BuildException("Bootstrap class not found, please check the classpath."); - } else { - genicTask.setClassname(JonasDeploymentTool.BOOTSTRAP_CLASS); - } - - // classpath - genicTask.createArg().setValue("-classpath"); - genicTask.createArg().setPath(classpath); - - // keepgenerated - if (keepgenerated) { - genicTask.createArg().setValue("-keepgenerated"); - } - - if (nofastrmic) { - genicTask.createArg().setValue("-nofastrmic"); - } - - // nocompil - if (nocompil) { - genicTask.createArg().setValue("-nocompil"); - } - - // invokecmd - if (invokeCmd) { - genicTask.createArg().setValue("-invokecmd"); - } - - // novalidation - if (novalidation) { - genicTask.createArg().setValue("-novalidation"); - } - - // javac - if (javac != null) { - genicTask.createArg().setValue("-javac"); - genicTask.createArg().setLine(javac); - } - - // javacopts - if (javacopts != null && !javacopts.equals("")) { - genicTask.createArg().setValue("-javacopts"); - genicTask.createArg().setValue(javacopts); - } - - // rmicopts - if (rmicopts != null && !rmicopts.equals("")) { - genicTask.createArg().setValue("-rmicopts"); - genicTask.createArg().setValue(rmicopts); - } - - // verbose - if (verbose) { - genicTask.createArg().setValue("-verbose"); - } - - // additionalargs - if (additionalargs != null) { - genicTask.createArg().setLine(additionalargs); - } - - // protocols - if (protocols != null) { - genicTask.createArg().setValue("-protocols"); - genicTask.createArg().setValue(protocols); - } - - // the generated classes must not be added in the generic JAR! - genicTask.createArg().setValue("-noaddinjar"); - - // jvmopts - if (jvmopts != null && !jvmopts.equals("")) { - genicTask.createJvmarg().setLine(jvmopts); - } - - // input file to process by GenIC - genicTask.createArg().setValue(genericJarFile.getPath()); - - // calling GenIC task - log("Calling GenIC task for " + getConfig().descriptorDir + File.separator + descriptorName + ".", - Project.MSG_VERBOSE); - - if (genicTask.executeJava() != 0) { - // Don't delete the temp output directory in case of error: - - //log("Deleting temp output directory '" + outputdir + "'.", - // Project.MSG_VERBOSE); - // the method deleteOnExit() do not work because the directory is - // not empty - //JOnASAntTool.deleteAllFiles(outputdir); - - if (!keepgeneric) { - log("Deleting generic JAR " + genericJarFile.toString(), Project.MSG_VERBOSE); - genericJarFile.delete(); - } - - throw new BuildException("GenIC reported an error."); - } - - // add the generated files to the ejbFiles - addAllFiles(outputdir, "", ejbFiles); - } - - /** - * Check the bootstrap class name to use in the given classpath. - * @param classpath classpath where the boostrap class must be searched. - * @return true if the bootstrap is available in the classpath - */ - private boolean checkBootstrapClassName(Path classpath) { - log("Looking for bootstrap class in classpath: " + classpath.toString(), Project.MSG_VERBOSE); - AntClassLoader cl = new AntClassLoader(classpath.getProject(), classpath); - try { - cl.loadClass(JonasDeploymentTool.BOOTSTRAP_CLASS); - log("Found Bootstrap class '" + JonasDeploymentTool.BOOTSTRAP_CLASS + "' in classpath.", - Project.MSG_VERBOSE); - } catch (ClassNotFoundException cnf1) { - log("Bootstrap class '" + JonasDeploymentTool.BOOTSTRAP_CLASS + "' not found in classpath.", - Project.MSG_VERBOSE); - return false; - } - return true; - } - - protected void checkConfiguration(String descriptorFileName, SAXParser saxParser) throws BuildException { - // jonasroot - if (jonasroot == null) { - throw new BuildException("The jonasroot attribute is not set."); - } else if (!jonasroot.isDirectory()) { - throw new BuildException("The jonasroot attribute '" + jonasroot + "' is not a valid directory."); - } - // jonasbase default value is jonasroot - if (jonasbase == null) { - jonasbase = jonasroot; - } - - // additionalargs - if (additionalargs != null && additionalargs.equals("")) { - throw new BuildException("Empty additionalargs attribute."); - } - - // javac - if (javac != null && javac.equals("")) { - throw new BuildException("Empty javac attribute."); - } - } - - /* ----------------------------------------------------------------------------------- */ - /* utilitary methods */ - /* ----------------------------------------------------------------------------------- */ - - /** - * Create a temporary directory for GenIC output. - * @return the temp directory. - * @throws BuildException if a temp directory cannot be created. - */ - private File createTempDir() throws IOException { - File tmpDir = File.createTempFile("genic", null, null); - tmpDir.delete(); - if (!tmpDir.mkdir()) { - throw new IOException("Cannot create the temporary directory '" + tmpDir + "'."); - } - return tmpDir; - } - - /** - * Add a file to the a given hashtable. If the file is a directory, add - * recursivly all the files inside to the hashtable. - * @param file the file to add. - * @param rootDir the current sub-directory to scan. - * @param hashtable the hashtable where to add the files. - */ - private void addAllFiles(File file, String rootDir, Hashtable hashtable) { - - if (!file.exists()) { - throw new IllegalArgumentException(); - } - - String newRootDir; - if (file.isDirectory()) { - File[] files = file.listFiles(); - for (int i = 0; i < files.length; i++) { - if (rootDir.length() > 0) { - newRootDir = rootDir + File.separator + files[i].getName(); - } else { - newRootDir = files[i].getName(); - } - addAllFiles(files[i], newRootDir, hashtable); - } - } else { - hashtable.put(rootDir.replace(File.separatorChar , '/'), file); // for a window platform replace \ by / is necessary - } - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/META-INF/jonas-ejb-2.1-ant.bnd b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/META-INF/jonas-ejb-2.1-ant.bnd deleted file mode 100644 index f3eda49303..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/META-INF/jonas-ejb-2.1-ant.bnd +++ /dev/null @@ -1,38 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.antmodular.ejb2.*, \ - org.ow2.jonas.deployment.ejb, \ - org.ow2.util.xml, \ - org.ow2.jonas.lib.util, \ - -# I added o.o.j.deployment.ejb as private package because I want the -# DTDs to be copied in this jar file -# Notice that it will copy other classes from the same package (depl API) -# but it shouldn't do any harm as the ant task classloader is not used -# as the parent for GenIC task - -# Import/Export nothing -Import-Package !* -Export-Package !* diff --git a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/antlib-ejbjar.xml b/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/antlib-ejbjar.xml deleted file mode 100644 index b1b2b7adbe..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/ant/src/main/resources/antlib-ejbjar.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/core/pom.xml b/jonas/modules/services/ejb/ejb-2.1/core/pom.xml deleted file mode 100644 index 7982a1f427..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/pom.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - jonas-ejb-2.1 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-ejb-2.1-core - bundle - JOnAS :: Services :: EJB :: EJB 2.1 :: Core - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-ejb-container - ${project.version} - - - org.ow2.jonas - jonas-genic - ${project.version} - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - geronimo-spec - geronimo-spec-j2ee-connector - 1.5-rc4 - provided - - - javax.mail - mail - 1.4 - - - org.ow2.carol - carol - provided - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/EJB21Deployer.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/EJB21Deployer.java deleted file mode 100644 index 6aa6df3b5f..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/EJB21Deployer.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal; - -import org.ow2.jonas.ejb2.EJBService; -import org.ow2.util.ee.deploy.api.deployable.EJB21Deployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Deployer of the EJB 2.1 deployable. - * @author Florent BENOIT - */ -public class EJB21Deployer extends AbsDeployer { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(EJB21Deployer.class); - - /** - * EJb 2.1 service used by this deployer. - */ - private EJBService ejb21Service = null; - - /** - * Undeploy the given EJB-JAR. - * @param deployable the deployable to remove. - * @throws DeployerException if the EJB-JAR is not undeployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - logger.info("Undeploying {0}", deployable.getShortName()); - - // Undeploy the EJB 2.1 file - try { - ejb21Service.removeContainer(getFile(deployable).getAbsolutePath()); - } catch (Exception e) { - throw new DeployerException("Cannot deploy the EJB 2.1 deployable '" + deployable + "'.", e); - } - } - - /** - * Deploy the given EJB-JAR. - * @param deployable the deployable to add. - * @throws DeployerException if the EJB-JAR is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - logger.info("Deploying {0}", deployable.getShortName()); - - // Deploy - try { - ejb21Service.createContainer(getFile(deployable).getAbsolutePath()); - } catch (Exception e) { - throw new DeployerException("Cannot deploy the EJB 2.1 deployable '" + deployable + "'.", e); - } - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return EJB21Deployable.class.isInstance(deployable); - } - - /** - * Sets the EJB 2.1 service. - * @param ejb21Service the EJB 2.1 service. - */ - public void setEjb21Service(final EJBService ejb21Service) { - this.ejb21Service = ejb21Service; - } - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBService.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBService.java deleted file mode 100644 index 485c9ff3b6..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBService.java +++ /dev/null @@ -1,2403 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.Serializable; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - -import javax.ejb.NoSuchObjectLocalException; -import javax.ejb.Timer; -import javax.management.Attribute; -import javax.management.AttributeNotFoundException; -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.resource.spi.work.WorkManager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.Version; -import org.ow2.jonas.cmi.CmiService; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.DeploymentDesc; -import org.ow2.jonas.deployment.ejb.EntityBmpDesc; -import org.ow2.jonas.deployment.ejb.EntityCmpDesc; -import org.ow2.jonas.deployment.ejb.MessageDrivenDesc; -import org.ow2.jonas.deployment.ejb.SessionDesc; -import org.ow2.jonas.deployment.ejb.SessionStatefulDesc; -import org.ow2.jonas.deployment.ejb.SessionStatelessDesc; -import org.ow2.jonas.deployment.ejb.lib.EjbDeploymentDescManager; -import org.ow2.jonas.ejb2.EJBService; -import org.ow2.jonas.ejb2.JTimerHandleInfo; -import org.ow2.jonas.ejb2.internal.mbean.EJBModule; -import org.ow2.jonas.ejb2.internal.mbean.EntityBean; -import org.ow2.jonas.ejb2.internal.mbean.MessageDrivenBean; -import org.ow2.jonas.ejb2.internal.mbean.StatefulSessionBean; -import org.ow2.jonas.ejb2.internal.mbean.StatelessSessionBean; -import org.ow2.jonas.generators.genic.wrapper.GenicServiceWrapper; -import org.ow2.jonas.ha.HaService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.ejb21.BeanFactory; -import org.ow2.jonas.lib.ejb21.Container; -import org.ow2.jonas.lib.ejb21.JContainer; -import org.ow2.jonas.lib.ejb21.JEntityFactory; -import org.ow2.jonas.lib.ejb21.JEntitySwitch; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.ejb21.JSessionFactory; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.ejb21.JTimerService; -import org.ow2.jonas.lib.ejb21.PermissionManager; -import org.ow2.jonas.lib.ejb21.Protocols; -import org.ow2.jonas.lib.ejb21.TraceEjb; -import org.ow2.jonas.lib.loader.EjbJarClassLoader; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.timer.TraceTimer; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.ModuleNamingUtils; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.naming.JComponentContextFactory; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.resource.ResourceService; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.jonas.workmanager.WorkManagerService; -import org.ow2.jonas.ws.jaxrpc.IJAXRPCService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.event.api.IEventDispatcher; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.event.impl.EventDispatcher; -import org.ow2.util.file.FileUtils; -import org.ow2.util.url.URLUtils; - -/** - * Implementation of the EJB Container Service for jonas. This class works only with jonas_ejb classes. - * @author Philippe Coq - * @author Jeff Mesnil (Security) - * @author Markus Karg (Novell port) - * @author Christophe Ney (for making easier Enhydra integration) - * @author Adriana Danes (complete management methods) - * @author Florent Benoit & Ludovic Bert (Ear service, deployJars, undeployJars) - * @author Benjamin Bonnet (max thread pool size) - * @author Michel-Ange Anton (JSR77 MBean : EJBModule) - * @author Adriana Danes (JSR77) - * @author S. Ali Tokmen (versioning) - * @author S. Ali Tokmen, Malek Chahine: EJB statistics - */ -public class JOnASEJBService extends AbsServiceImpl implements EJBService, JOnASEJBServiceMBean { - - /** - * server logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_EJB_PREFIX); - - /** - * loader logger. - */ - private static Logger loaderlog = Log.getLogger(Log.JONAS_LOADER_PREFIX); - - /** - * Minimum timer duration. - */ - private static final int MINIMUM_TIMER_DURATION = 100; - - /** - * Transaction manager reference. - */ - private TransactionManager tm = null; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * Security service reference. - */ - private SecurityService securityService = null; - - /** - * JAX-RPC service reference. - */ - private IJAXRPCService jaxrpcService = null; - - /** - * Registry service used to discover active protocols (auto GenIC). - */ - private RegistryService registryService = null; - - /** - * List of the ejb names to load when starting the EJB Container Service. - */ - private List ejbNames = new Vector(); - - /** - * We have a Container by ejb-jar file. - */ - private Vector containers = new Vector(); - - /** - * The WorkManager instance. - */ - private WorkManager workManager; - - /** - * Will EJB monitoring enabled for EJBs deployed in the future? - */ - private boolean monitoringEnabled = false; - - /** - * Number of milliseconds after which methods of EJBs deployed in the future will start warning. - */ - private int warningThreshold = 0; - - /** - * BeanManaged Management properties. - */ - public static final String BMP = "Bean-Managed"; - - /** - * ContainerManaged Management properties. - */ - public static final String CMP = "Container-Managed"; - - /** - * External classloader. - */ - private ClassLoader extClassLoader = null; - - /** - * Reference to the {@link DeployerLog} which is the class that manage the accesses to the log file (to remove the jar). - */ - private DeployerLog deployerLog = null; - - /** - * Auto-GenIC has been enabled or not ? - */ - private boolean autoGenIC = true; - - /** - * List of arguments for the autoGenIC. - */ - private List autoGenICArgsList = new ArrayList(); - - /** - * Singleton object. - */ - private JComponentContextFactory componentContextFactory = null; - - /** - * TransactionService. - */ - private TransactionService transactionService; - - /** - * WorkManager Service. - */ - private WorkManagerService workManagerService; - - /** - * NamingManager for EJB binding. - */ - private JNamingManager naming; - - /** - * Link to the EJB 2.1 Deployer. - */ - private EJB21Deployer ejb21Deployer = null; - - /** - * CMI service reference (can be null). - */ - private CmiService cmiService = null; - - /** - * HA service reference (can be null). - */ - private HaService haService = null; - - /** - * Resource service reference (can be null). - */ - private ResourceService resService = null; - - /** - * DeployerManager service. - */ - private IDeployerManager deployerManager; - - /** - * Working directory for EJB2. - */ - private File workEjbjarsFile; - - /** - * Versioning service. - */ - private VersioningService versioningService; - - /** - * Event service. - */ - private IEventService eventService; - - /** - * Dispatcher name for EJB2 monitoring events. - */ - private static final String MONITORING_DISPATCHER_NAME = "/jonas/service/ejb2/monitoring"; - - /** - * Dispatcher name for EJB2 monitoring events. - */ - private static final String CONTAINER_LIFECYCLE_DISPATCHER_NAME = "/beans/lifecycle/events"; - - /** - * Monitoring dispatcher. - */ - private IEventDispatcher monitoringDispatcher; - - /** - * Monitoring dispatcher. - */ - private IEventDispatcher containerLifecycleDispatcher; - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - - /** - * Statistics for beans, updated at each undeploy. - */ - private class BeanMonitoringStatistics { - /** - * Number of calls. - */ - private long numberOfCalls; - - /** - * Total processing time. - */ - private long totalProcessingTime; - - /** - * Total business processing time. - */ - private long totalBusinessProcessingTime; - - /** - * Constructor. - * @param numberOfCalls number of calls. - * @param totalProcessingTime total processing time. - * @param totalBusinessProcessingTime total business processing time. - */ - public BeanMonitoringStatistics(final long numberOfCalls, final long totalProcessingTime, - final long totalBusinessProcessingTime) { - this.numberOfCalls = numberOfCalls; - this.totalProcessingTime = totalProcessingTime; - this.totalBusinessProcessingTime = totalBusinessProcessingTime; - } - - /** - * @return number of calls. - */ - public long getNumberOfCalls() { - return numberOfCalls; - } - - /** - * @return total processing time. - */ - public long getTotalProcessingTime() { - return totalProcessingTime; - } - - /** - * @return total business processing time. - */ - public long getTotalBusinessProcessingTime() { - return totalBusinessProcessingTime; - } - } - - /** - * Undeployed beans' monitoring statistics. - */ - private Map beanMonitoringStatistics = new HashMap(); - - /** - * Default constructor. - */ - public JOnASEJBService() { - this.ejb21Deployer = new EJB21Deployer(); - } - - /** - * @param autoGenIC Engage Auto GenIC ? - */ - public void setAutoGenic(final boolean autoGenIC) { - this.autoGenIC = autoGenIC; - if (!autoGenIC) { - logger.log(BasicLevel.INFO, "Auto GenIC has been disabled"); - } - } - - /** - * @param validate Use a validating parser ? - */ - public void setParsingwithvalidation(final boolean validate) { - EjbDeploymentDescManager.setParsingWithValidation(validate); - if (!validate) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "XML parsing without validation"); - } - } - } - - /** - * @param args List of arguments to the Auto-GenIC process. - */ - public void setAutoGenicArgs(final String args) { - autoGenICArgsList = convertToList(args); - if (!autoGenICArgsList.isEmpty()) { - logger.log(BasicLevel.DEBUG, "Auto GenIC args are set to '" + autoGenICArgsList + "'."); - } - } - - /** - * Start the Service Initialization of the service is already done. {@inheritDoc} - */ - @Override - public void doStart() throws ServiceException { - initWorkingDirectory(); - - // Get some objects from services - tm = transactionService.getTransactionManager(); - workManager = workManagerService.getWorkManager(); - - // Init the loggers: Timer & Ejb - TraceTimer.configure(Log.getLoggerFactory()); - TraceEjb.configure(Log.getLoggerFactory()); - - // Init the deployer - ejb21Deployer.setEjb21Service(this); - - // Register the deployer - deployerManager.register(ejb21Deployer); - - // Create dispatcher - try { - monitoringDispatcher = new EventDispatcher(); - monitoringDispatcher.start(); - eventService.registerDispatcher(MONITORING_DISPATCHER_NAME, monitoringDispatcher); - } catch (Exception e) { - throw new ServiceException("Cannot create the EJB monitoring dispatcher", e); - } - - /** - * d Create life cycle dispatcher. - */ - if (containerLifecycleDispatcher == null) { - try { - containerLifecycleDispatcher = new EventDispatcher(); - containerLifecycleDispatcher.start(); - eventService.registerDispatcher(CONTAINER_LIFECYCLE_DISPATCHER_NAME, containerLifecycleDispatcher); - } catch (Exception e) { - throw new ServiceException("Cannot create the EJB Container lifecycle dispatcher", e); - } - } - try { - LoaderManager lm = LoaderManager.getInstance(); - extClassLoader = lm.getExternalLoader(); - } catch (Throwable e) { - logger.log(BasicLevel.ERROR, "Cannot get the Applications ClassLoader from EJB Container Service"); - throw new ServiceException("Cannot get the Applications ClassLoader from EJB Container Service", e); - } - - // Load the Model MBeans - // TODO, When ejb service will become a bundle, we could use - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Creates all predefined containers - // 1 container per ejbjar file. - String fileName = null; - Context contctx = null; - for (int i = 0; i < ejbNames.size(); i++) { - fileName = ejbNames.get(i); - try { - contctx = new ComponentContext(fileName); - contctx.rebind("filename", fileName); - } catch (NamingException e) { - logger.log(BasicLevel.WARN, "Cannot bind filename '" + fileName + "' in component context", e); - } - - try { - createContainer(contctx); - } catch (Throwable e) { - logger.log(BasicLevel.WARN, "Cannot create container for " + fileName, e); - // Close naming context - try { - contctx.close(); - } catch (NamingException nne) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Cannot close deploy context for " + fileName, nne); - } - } - } - } - - // Register EJBService MBean - registerEjbServiceMBean(this, getDomainName()); - - logger.log(BasicLevel.INFO, "EJB 2.1 Service started"); - } - - /** - * Stop the service. - *
      - *
    • Remove all JOnAS EJB Containers.
    • - *
    • Unbinds all the EJB(Local)Home names from JNDI.
    • - *
    - */ - @Override - public void doStop() { - // Undeploy EJBs 2.1 - ejb21Deployer.stop(); - - if (deployerManager != null) { - // Unregister the deployer - deployerManager.unregister(ejb21Deployer); - } - - // Destroy dispatcher - try { - eventService.unregisterDispatcher(MONITORING_DISPATCHER_NAME); - monitoringDispatcher.stop(); - monitoringDispatcher = null; - } catch (Exception e) { - throw new ServiceException("Cannot unregister the EJB monitoring dispatcher", e); - } - - // Destroy dispatcher - if (cmiService != null) { - try { - eventService.unregisterDispatcher(CONTAINER_LIFECYCLE_DISPATCHER_NAME); - containerLifecycleDispatcher.stop(); - containerLifecycleDispatcher = null; - } catch (Exception e) { - throw new ServiceException("Cannot unregister the EJB container lifecycle dispatcher", e); - } - } - - // Unregister EJBService MBean - unregisterEjbServiceMBean(getDomainName()); - - logger.log(BasicLevel.INFO, "EJB 2.1 Service stopped"); - } - - /** - * Create working directory for EJB2. - */ - protected void initWorkingDirectory() { - if (workEjbjarsFile == null) { - // Create $JONAS_BASE/work/ejbjars directory file - workEjbjarsFile = new File(getWorkDirectory() + File.separator + getServerProperties().getServerName()); - workEjbjarsFile.mkdirs(); - } - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - protected void setWorkCleanerService(final WorkCleanerService workCleanerService) { - initWorkingDirectory(); - File fileLog = new File(workEjbjarsFile.getPath() + File.separator + getServerProperties().getServerName() + ".log"); - - if (!fileLog.exists()) { - try { - // Create log file - fileLog.createNewFile(); - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "Cannot create the log file " + fileLog, e); - } - } - - try { - // Create the logger - deployerLog = new DeployerLog(fileLog); - CleanTask cleanTask = new JarCleanTask(this, deployerLog); - - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } catch (DeployerLogException e) { - logger.log(BasicLevel.ERROR, "Cannot register the clean task", e); - } - - } - - // ------------------------------------------------------------------- - // EJBService Implementation - // ------------------------------------------------------------------- - - /** - * Create a JOnAS Container for all the beans that are described in a .xml file, or belong to .jar file. - * @param ctx Deployment context holding all needed values for an EjbJar deployment. - * @return The ObjectName of the MBean associated to the container (i.e. to the deployed module) - * @throws Exception if an error occur during the creation of the container. - */ - public String createContainer(final Context ctx) throws Exception { - // Get the file name - String originalFileName = (String) ctx.lookup("filename"); - File originalFile = new File(originalFileName); - - boolean isEjbJar = originalFileName.toLowerCase().endsWith(".jar"); - boolean isEjbJarXml = originalFileName.toLowerCase().endsWith(".xml") && originalFile.isFile(); - - // Force fileName with slash to avoid conflict under Windows (slash and back-slash) - try { - originalFileName = originalFile.toURL().getPath(); - } catch (MalformedURLException e) { - logger.log(BasicLevel.ERROR, "Invalid ejb-jar file name '" + originalFileName + "'", e); - } - - if (originalFile.isFile()) { - if (!isEjbJar && !isEjbJarXml) { - throw new ServiceException("The ejbjar to deploy is not a jar file nor an xml file"); - } - } - - // Check if container already exists - if (getContainer(originalFileName) != null) { - logger.log(BasicLevel.ERROR, "createContainer: " + originalFileName + " already exists"); - throw new Exception("Container already exists"); - } - - // In order to avoid lock problem after undeploy - // the jar file is copied under the working directory before its loading - // ! only if the ejbjars isn't included in an ear - boolean isInEar = true; - try { - ctx.lookup("earClassLoader"); - } catch (NamingException ne) { - isInEar = false; - } - - String workFileName = originalFileName; - - // if need, call Genic. Only in single ejb-jar mode. - // In ear case, this has been checked by ear service. - if (!isInEar && isEjbJar) { - // Build working file name containing the last modification date - workFileName = FileUtils.lastModifiedFileName(originalFile); - - // Concat working directory path to the working file name - workFileName = getWorkDirectory() + File.separator + getServerProperties().getServerName() + File.separator - + workFileName; - File workDirectory = new File(workFileName); - workDirectory.mkdirs(); - if (!workDirectory.isDirectory()) { - throw new FileNotFoundException("Cannot create work folder : " + workFileName); - } - workFileName += File.separator + originalFile.getName(); - - if (!new File(workFileName).exists()) { - // Create working file - FileUtils.copyFile(originalFileName, workFileName); - } - - checkGenIC(workFileName, null); - - String resultFilename = applyWSGenIfNeeded(workFileName); - - // Check if a new archive has been created - if (resultFilename.endsWith(".ear")) { - // Remove generated file - FileUtils.delete(workDirectory); - - // Case not supported - throw new DeployerException( - "WSGen has changed archive type from EJB-JAR to EAR. WSGen tool needs to be launched on your EJB-JAR '" - + workFileName + "' before deploying it on JOnAS."); - } - - // add an entry in the log file - try { - if (deployerLog != null) { - deployerLog.addEntry(originalFile, workDirectory); - } - } catch (DeployerLogException e) { - String err = "Error while adding the " + originalFileName + " entry in the log file"; - logger.log(BasicLevel.ERROR, err + " : " + e.getMessage()); - throw new Exception(err, e); - } - } - - // Classloader - URL[] url = new URL[1]; - url[0] = URLUtils.fileToURL(new File(workFileName)); - - // Get the classloaders - ClassLoader ejbClassLoader = null; - URLClassLoader earClassLoader = null; - try { - earClassLoader = (URLClassLoader) ctx.lookup("earClassLoader"); - ejbClassLoader = (URLClassLoader) ctx.lookup("ejbClassLoader"); - if (loaderlog.isLoggable(BasicLevel.DEBUG)) { - loaderlog.log(BasicLevel.DEBUG, "earClassLoader=" + earClassLoader); - } - // Filtering the access to the parent classloader - // TODO If this is always transparent, maybe we could simply remove it ? - FilteringClassLoader filtering = new FilteringClassLoader(ejbClassLoader); - filtering.setTransparent(true); - filtering.start(); - ejbClassLoader = filtering; - - } catch (NamingException ne) { - // no ear classloader => ejb application case (not ear case). - if (isEjbJar) { - - // Create the filtering ClassLoader at the EjbJar level - FilteringClassLoader filteringClassLoader = createFilteringClassLoader(originalFile); - - ejbClassLoader = new EjbJarClassLoader(url, filteringClassLoader); - } else { - ejbClassLoader = extClassLoader; - } - if (loaderlog.isLoggable(BasicLevel.DEBUG)) { - loaderlog.log(BasicLevel.DEBUG, "parent Loader=" + extClassLoader); - } - } - if (loaderlog.isLoggable(BasicLevel.DEBUG)) { - loaderlog.log(BasicLevel.DEBUG, "ejbClassLoader=" + ejbClassLoader); - } - - // Get the deployment descriptor from file - DeploymentDesc dd = null; - try { - // ejb-jar file - EjbDeploymentDescManager mgr = EjbDeploymentDescManager.getInstance(); - dd = mgr.getDeploymentDesc(url[0], ejbClassLoader, earClassLoader); - } catch (DeploymentDescException e) { - String err = "Cannot read the deployment descriptors '" + originalFileName + "'"; - logger.log(BasicLevel.ERROR, err); - logger.log(BasicLevel.ERROR, "DeploymentDescException:" + e); - throw new ServiceException(err, e); - } - - // container name - String cname = ModuleNamingUtils.fromFileName(originalFileName); - if (cname == null) { - // use displayName - cname = "EJB container "; - if (dd.getDisplayName() != null) { - cname += dd.getDisplayName(); - } - } - - // Create the Container Object - JContainer cont = new JContainer(cname, originalFileName, workFileName, ejbClassLoader, dd, cmiService, haService, - jaxrpcService, jmxService.getJmxServer(), resService, this.getServerProperties().getWorkDirectory()); - cont.setContainerNaming(naming); - if (componentContextFactory == null) { - logger.log(BasicLevel.ERROR, "componentContextFactory has not been set"); - } - cont.setComponentContextFactory(componentContextFactory); - cont.setTransactionManager(tm); - cont.setPrincipalFactory(new PrincipalFactoryImpl()); - - // Set the name of the ear application containing this container - // in the case of an ear application. - URL earUrl; - String earRoot; - String earFileName; - File earFile; - try { - earUrl = (URL) ctx.lookup("earURL"); - earRoot = (String) ctx.lookup("earRoot"); - earFileName = URLUtils.urlToFile(earUrl).getPath(); - cont.setEarFileName(earFileName); - earFile = new File(earRoot); - } catch (NamingException ne) { - earUrl = null; - earRoot = null; - earFile = null; - earFileName = null; - } - - IDeployable originalDeployable; - if (earFile != null) { - IArchive archive = ArchiveManager.getInstance().getArchive(earFile); - originalDeployable = DeployableHelper.getDeployable(archive); - } else { - IArchive archive = ArchiveManager.getInstance().getArchive(originalFile); - originalDeployable = DeployableHelper.getDeployable(archive); - } - - String prefix = null; - if (isVersioningEnabled()) { - prefix = versioningService.getPrefix(originalDeployable); - } - - String javaEEApplicationName = null; - try { - javaEEApplicationName = (String) ctx.lookup("j2eeApplicationName"); - } catch (NamingException ne) { - javaEEApplicationName = null; - } - cont.setJavaEEApplicationName(javaEEApplicationName); - - // unset the security if no security service - if (securityService == null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "EJB Container Service: working without Security Service"); - } - cont.setSecurity(false); - } else { - PermissionManager permissionManager = null; - try { - permissionManager = new PermissionManager(dd, cont.getContextId()); - permissionManager.translateEjbDeploymentDescriptor(); - // if not in ear case, commit the policy configuration, else it - // is done - // by EAR service after linking all policy configuration objects - if (!isInEar) { - permissionManager.commit(); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't build permission manager object for the ejbjar '" + originalFileName + "'", - e); - } - cont.setPermissionManager(permissionManager); - } - - // Give access to the WorkManager - cont.setWorkManager(workManager); - - // Process each bean from the DD - BeanDesc[] beans = dd.getBeanDesc(); - ArrayList bflist = new ArrayList(); - // Keep factories in order to do admin stuff later - Map factoryMap = new HashMap(); - // Keep bean descriptors in order to do admin stuff later - Map beanDescMap = new HashMap(); - for (BeanDesc beanDesc : beans) { - String beanName = null; - try { - beanName = beanDesc.getEjbName(); - if (prefix != null) { - beanName = prefix + beanName; - beanDesc.setJndiName(prefix + beanDesc.getJndiName()); - beanDesc.setJndiLocalName(prefix + beanDesc.getJndiLocalName()); - } - /** - * Set life cycle dispatcher for this bean. - */ - cont.setLifeCycleDispatcher(containerLifecycleDispatcher); - /** - * Add the bean to the container. - */ - BeanFactory bf = cont.addBean(beanDesc); - - // Sets the resource checker manager - bf.setResourceCheckerManager(resourceCheckerManager); - - if (beanDesc instanceof SessionDesc) { - JSessionFactory jsf = (JSessionFactory) bf; - jsf.setDispatcher(monitoringDispatcher); - eventService.registerListener(jsf, JOnASEJBService.MONITORING_DISPATCHER_NAME); - - // if Monitoring Settings are not defined in DD, it will - // take the default value - if (!jsf.getMonitoringSettingsDefinedInDD()) { - jsf.setMonitoringEnabled(monitoringEnabled); - jsf.setWarningThreshold(warningThreshold); - } - BeanMonitoringStatistics bms = beanMonitoringStatistics.get(jsf.getEJBName()); - if (bms != null) { - jsf.setNumberOfCalls(bms.getNumberOfCalls()); - jsf.setTotalProcessingTime(bms.getTotalProcessingTime()); - jsf.setTotalBusinessProcessingTime(bms.getTotalBusinessProcessingTime()); - } - } - - bflist.add(bf); - factoryMap.put(beanName, bf); - beanDescMap.put(beanName, beanDesc); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Can't deploy bean '" + beanName + "'", e); - } - - } - // Init now pools of instances, in case min-pool-size have been defined. - // This must be done once all beans have been deployed. - for (BeanFactory bf : bflist) { - bf.initInstancePool(); - } - - // Deployment was successful, add the bean as deployed - containers.addElement(cont); - - // Restart Timers. Must be done when containers has been updated. - for (BeanFactory bf : bflist) { - bf.restartTimers(); - } - - logger.log(BasicLevel.DEBUG, "created container for " + originalFileName); - - // Do administrative stuff - String domainName = getDomainName(); - String serverName = getJonasServerName(); - String ejbModuleON = registerCompMBeans(domainName, serverName, javaEEApplicationName, cname, cont, originalFileName, - earUrl, dd, factoryMap, beanDescMap); - if (prefix != null) { - if (earRoot != null) { - versioningService.createJNDIBindingMBeans(originalDeployable); - } else { - versioningService.createJNDIBindingMBeans(originalDeployable); - } - } - - // return Model MBean OBJECT_NAME - return ejbModuleON; - } - - /** - * Creates a {@code FilteringClassLoader} for this EjbJar. - * @param ejbjarFile the EjbJar File - * @return a Filtering ClassLoader configured from {@code META-INF/classloader-filtering.xml} (if any). - */ - private FilteringClassLoader createFilteringClassLoader(final File ejbjarFile) { - - // This one is sitting between the common applications loader and this ejbjar loader - FilteringClassLoader filteringClassLoader = new FilteringClassLoader(extClassLoader); - // Configure the loader with the provided filter definition file (if there is one) - IArchive ejbjar = ArchiveManager.getInstance().getArchive(ejbjarFile); - try { - String name = "META-INF/" + FilteringClassLoader.CLASSLOADER_FILTERING_FILE; - URL filteringDefinitionUrl = ejbjar.getResource(name); - if (filteringDefinitionUrl != null) { - filteringClassLoader.setDefinitionUrl(filteringDefinitionUrl); - } - } catch (ArchiveException ae) { - // Ignored - if (logger.isLoggable(BasicLevel.DEBUG)) { - String message = "Cannot get classloader-filtering.xml file from the archive " + ejbjar; - logger.log(BasicLevel.DEBUG, message, ae); - } - } finally { - ejbjar.close(); - } - // Finally start the loader - filteringClassLoader.start(); - return filteringClassLoader; - } - - /** - * Apply WSGen on the given file if needed. - * @param path the path to use - * @return the modified file or the original file if WSGen has not been launched. - * @throws DeployerException if WSGen cannot be applied. - */ - private String applyWSGenIfNeeded(final String path) throws DeployerException { - // JAX-RPC service started ? - if (jaxrpcService == null) { - logger.log(BasicLevel.DEBUG, "The JAX-RPC service is not present, no need to call WSGen"); - return path; - } - - // Auto WsGen enabled ? - if (!jaxrpcService.isAutoWsGenEngaged()) { - logger.log(BasicLevel.DEBUG, "Automatic WsGen is not enabled, no need to call WSGen"); - return path; - } - - // Check version in manifest - String jonasVersionWsGen = getAttributeInManifest(path, "WsGen-JOnAS-Version"); - if (Version.getNumber().equals(jonasVersionWsGen)) { - // no changes, just continue the normal deployment process - logger.log(BasicLevel.DEBUG, "No change: no need to call WSGen"); - return path; - } - - try { - IArchive archive = ArchiveManager.getInstance().getArchive(new File(path)); - IDeployable deployable = DeployableHelper.getDeployable(archive); - return jaxrpcService.applyWSGen(deployable); - } catch (Exception e) { - throw new DeployerException(e); - } - } - - /** - * Get the Container by its file name (.xml or .jar). - * @param fileName given file name on which - * @return Container - */ - public Container getContainer(final String fileName) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, fileName); - } - - File f = null; - String pathFile = ""; - try { - f = new File(fileName); - // Force pathFile with slash to avoid conflict under Windows (slash - // and back-slash) - pathFile = f.toURL().getPath(); - } catch (Exception e) { - String err = "Error while trying to get canonical file '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err); - return null; - } - - // for each container loaded - for (Container cont : containers) { - String contName = cont.getExternalFileName(); - - // first, search abs path - if (contName.equals(pathFile)) { - return cont; - } - } - - // not found - return null; - } - - /** - * Remove a JOnAS container. - * @param cont EJB 2.1 Container to be removed - */ - public void removeContainer(final Container cont) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, cont.getName()); - } - // Admin code - String domainName = getDomainName(); - String serverName = getJonasServerName(); - String javaEEApplicationName = cont.getJavaEEApplicationName(); - String moduleName = cont.getName(); - - String[] beans = cont.listBeanNames(); - for (int i = 0; i < beans.length; i++) { - String bean = beans[i]; - BeanFactory bf = cont.getBeanFactory(bean); - if (bf instanceof JSessionFactory) { - JSessionFactory jsf = (JSessionFactory) bf; - BeanMonitoringStatistics bms = new BeanMonitoringStatistics(jsf.getNumberOfCalls(), jsf - .getTotalProcessingTime(), jsf.getTotalBusinessProcessingTime()); - beanMonitoringStatistics.put(jsf.getEJBName(), bms); - monitoringDispatcher.removeListener(jsf); - } - } - - unregisterCompMBeans(domainName, serverName, javaEEApplicationName, moduleName); - // Remove container - cont.remove(); - containers.removeElement(cont); - if (versioningService != null && versioningService.isVersioningEnabled()) { - versioningService.garbageCollectJNDIBindingMBeans(); - } - - // Run the garbage collector - Runtime.getRuntime().gc(); - } - - /** - * @return JOnAS containers created by the EJB Service. - */ - public Container[] listContainers() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "size= " + containers.size()); - } - - Container[] ret = new Container[containers.size()]; - containers.copyInto(ret); - return ret; - } - - /** - * Synchronized all entity bean containers. - * @param passivate passivate instances after synchronization. - */ - public void syncAllEntities(final boolean passivate) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - for (Container cont : containers) { - cont.syncAll(true, passivate); - } - } - - /** ******* MBean methods ******** */ - - /** - * MBean method. - * @return Integer Total Number of Container currently in JOnAS - */ - public Integer getCurrentNumberOfContainer() { - return new Integer(containers.size()); - } - - /** - * MBean method. - * @return Integer Total Number of Bean Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfBeanType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getBeanNb(); - } - return new Integer(count); - } - - /** - * MBean method. - * @return Integer Total Number of Bmp Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfBMPType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getEntityBMPNb(); - } - return new Integer(count); - } - - /** - * MBean method. - * @return Integer Total Number of Cmp Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfCMPType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getEntityCMPNb(); - } - return new Integer(count); - } - - /** - * MBean method. - * @return Integer Total Number of Sbf Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfSBFType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getStatefulSessionNb(); - } - return new Integer(count); - } - - /** - * MBean method. - * @return Integer Total Number of Sbl Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfSBLType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getStatelessSessionNb(); - } - return new Integer(count); - } - - /** - * MBean method. - * @return Integer Total Number of Mdb Type currently in JOnAS - */ - public Integer getTotalCurrentNumberOfMDBType() { - int count = 0; - for (JContainer cont : containers) { - count += cont.getMessageDrivenNb(); - } - return new Integer(count); - } - - /** - * Return the list of all loaded EJB container. - * @return The list of deployed EJB container - */ - public List getDeployedJars() { - List al = new ArrayList(); - for (Container oContainer : containers) { - try { - al.add((new File(oContainer.getExternalFileName())).toURL().getPath()); - } catch (Exception e) { - // none - } - } - return al; - } - - /** - * Remove EJB container corresponding to a .JAR file. This method is called by the J2EEServer MBean's undeployJar(fileName) - * @param fileName name of the file containing the JAR module - * @throws Exception when there is no such container to undeploy or when the service was unable to undeploy the container. - */ - public void removeContainer(final String fileName) throws Exception { - Container cont = null; - try { - cont = getContainer(fileName); - } catch (Exception e) { - String err = "Error while trying to find file '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err); - throw new Exception(err, e); - } - - if (cont != null) { - removeContainer(cont, false); - } else { - String err = "Cannot remove the non-existant container '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err); - throw new Exception(err); - } - } - - /** - * Create an ejb container for the EJBs contained in a .jar (or .xml) file. - * @param fileName Name of the file to be deployed - * @return The ObjectName of the MBean associated to the container (to the deployed module) - */ - public String createContainer(final String fileName) throws Exception { - String ejbModuleObjectName = null; - try { - Context contctx = new ComponentContext(fileName); - contctx.rebind("filename", fileName); - ejbModuleObjectName = createContainer(contctx); - } catch (Exception e) { - throw new Exception("Cannot create Container", e); - } - return ejbModuleObjectName; - } - - /** - * Test if the specified file is already deployed (if a container is created for this jar). - * @param fileName the name of the jar file - * @return true if the jar was deployed, false otherwise - */ - public Boolean isJarDeployed(final String fileName) { - return new Boolean(isJarLoaded(fileName)); - } - - /** - * Test if the specified jar identified with its work name is already deployed (if a container is created for this jar). - * @param workFileName the internal name of the jar file (working copy) - * @return true if the jar was deployed, false otherwise - */ - public boolean isJarDeployedByWorkName(final String workFileName) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, workFileName); - } - - // for each container loaded - for (Container cont : containers) { - // get name of the container (basename) - // cont.getFileName return the internal name (working copy) - String contName = new File(cont.getFileName()).getName(); - if (contName.equals(workFileName)) { - return true; - } - } - - // not found - return false; - } - - // Kind of resources: - /** DataSource Resource Type. */ - static final int DATASOURCE = 1; - - /** JMS Destination Resource. Type */ - static final int JMS_DESTINATION = 2; - - /** JMS Factory Resource Type. */ - static final int JMS_FACTORY = 3; - - /** Mail Factory Resource Type. */ - static final int MAIL_FACTORY = 4; - - /** - * This method is used by the getXXXDependence MBean methods. It gathers the ObjectNames of the EJBs using a given resource. - * @param name the resource name - * @param type the resource type - * @return the ObjectNames of all the ejb using this resource - */ - Set getDependence(final String name, final int type) { - Set resultObjectName = new HashSet(); // to be - // returned - // by - // this - // method - Set resultProperties = new HashSet(); // constructed - // by - // the - // JContainer - try { - Context ctx = new InitialContext(); - ctx.lookup(name); - ctx.close(); - // this resource is rebind - for (JContainer cont : containers) { - Set depProps = null; // Dependences described as - // a set of - // Properties objects - switch (type) { - case DATASOURCE: - depProps = cont.getDataSourceDependence(name); - break; - - case JMS_DESTINATION: - depProps = cont.getJmsDestinationDependence(name); - break; - - case JMS_FACTORY: - depProps = cont.getJmsConnectionFactoryDependence(name); - break; - - case MAIL_FACTORY: - depProps = cont.getMailFactoryDependence(name); - break; - - default: - throw new IllegalArgumentException("Unknown type : " + type); - } - resultProperties.addAll(depProps); - // change string to ObjectName - try { - resultObjectName = convertToObjectNames(resultProperties); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "EjbServiceImpl: Object Name Error", e); - } - } - } catch (NamingException ne) { - // unexisting ds - resultObjectName = new HashSet(); - } - return resultObjectName; - } - - /** - * Converts a Set of properties to ObjectNames. - * @param resultProperties properties to be converted - * @return Returns a Set of ObjectNames - */ - private Set convertToObjectNames(final Set resultProperties) { - Set resultObjectName = new HashSet(); - String domainName = getDomainName(); - String serverName = getJonasServerName(); - String ejbType = null; - String ejbName = null; - String earFileName = null; - String moduleName = null; - String j2eeAppName = null; - for (Properties item : resultProperties) { - ObjectName ejbObjectName = null; - // See JContainer.beansDependence() method for info about the - // Properties object containt - ejbType = item.getProperty("type"); - ejbName = item.getProperty("name"); - earFileName = item.getProperty("earFileName"); - // moduleName = buildEJBModuleName(fileName); - moduleName = item.getProperty("cname"); - if (earFileName != null) { - j2eeAppName = ModuleNamingUtils.fromFileName(earFileName); - } - - if (ejbType.equals("ejbbmp") || ejbType.equals("ejbcmp")) { - ejbObjectName = J2eeObjectName.getEntityBean(domainName, moduleName, serverName, j2eeAppName, ejbName); - } else if (ejbType.equals("ejbsbf")) { - ejbObjectName = J2eeObjectName.getStatefulSessionBean(domainName, moduleName, serverName, j2eeAppName, ejbName); - } else if (ejbType.equals("ejbsbl")) { - ejbObjectName = J2eeObjectName - .getStatelessSessionBean(domainName, moduleName, serverName, j2eeAppName, ejbName); - } else if (ejbType.equals("ejbmdb")) { - ejbObjectName = J2eeObjectName.getMessageDrivenBean(domainName, moduleName, serverName, j2eeAppName, ejbName); - } - if (ejbObjectName != null) { - resultObjectName.add(ejbObjectName); - } - } - return resultObjectName; - } - - /** - * MBean method. - * @return the ObjectName of all the ejbs using this datasource. - */ - public Set getDataSourceDependence(final String dsName) { - return getDependence(dsName, DATASOURCE); - } - - /** - * MBean method. - * @return the ObjectName of all the ejb using this destination. - */ - public Set getJmsDestinationDependence(final String destName) { - return getDependence(destName, JMS_DESTINATION); - } - - /** - * MBean method. - * @return the ObjectName of all the ejb using this Connection Factory. - */ - public Set getJmsConnectionFactoryDependence(final String cfName) { - return getDependence(cfName, JMS_FACTORY); - } - - /** - * MBean method. - * @return the ObjectName of all the ejb using a given Mail Factory. - */ - public Set getMailFactoryDependence(final String mfName) { - return getDependence(mfName, MAIL_FACTORY); - } - - /** - * Deploy the given ejb-jars of an ear file with the specified parent classloader (ear classloader). (This method is only - * used for the ear applications, not for the ejb-jar applications). - * @param ctx the context containing the configuration to deploy the ejbjars.
    - * This context contains the following parameters :
    - * - earRootUrl the root of the ear application.
    - * - earURL filename of the EAR.
    - * - earClassLoader the ear classLoader of the ear application.
    - * - ejbClassLoader the ejb classLoader for the ejbjars.
    - * - jarURLs the list of the urls of the ejb-jars to deploy.
    - * - roleNames the role names of the security-role.
    - * @throws ServiceException if an error occurs during the deployment. - */ - public void deployJars(final Context ctx) throws ServiceException { - - // Get the 6 parameters from the context - // - earRootUrl the root of the ear application. - // - earClassLoader the ear classLoader of the ear application. - // - ejbClassLoader the ejb classLoader for the ejbjars. - // - jarURLs the list of the urls of the ejb-jars to deploy. - // - roleNames the role names of the security-role - // - j2eeApplicationName the J2EE Application Name - - URL earRootUrl = null; - URL earUrl = null; - ClassLoader earClassLoader = null; - ClassLoader ejbClassLoader = null; - URL[] jarURLs = null; - String[] roleNames = null; - String j2eeApplicationName = null; - try { - earRootUrl = (URL) ctx.lookup("earRootUrl"); - earUrl = (URL) ctx.lookup("earUrl"); - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - ejbClassLoader = (ClassLoader) ctx.lookup("ejbClassLoader"); - jarURLs = (URL[]) ctx.lookup("jarURLs"); - j2eeApplicationName = (String) ctx.lookup("j2eeApplicationName"); - roleNames = (String[]) ctx.lookup("roleNames"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param :" + e.getMessage(); - logger.log(BasicLevel.ERROR, err); - throw new ServiceException(err, e); - } - - // Deploy all the ejb-jars of the ear application. - for (int i = 0; i < jarURLs.length; i++) { - - // Get the name of an ejb-jar to deploy. - String fileName = URLUtils.urlToFile(jarURLs[i]).getPath(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Deploy '" + fileName + "' for the ear service."); - } - - // The context to give for the creation of the container - // associated to the ejb-jar. - Context contctx = null; - try { - contctx = new ComponentContext(fileName); - contctx.rebind("filename", fileName); - contctx.rebind("earClassLoader", earClassLoader); - contctx.rebind("ejbClassLoader", ejbClassLoader); - contctx.rebind("earRoot", URLUtils.urlToFile(earRootUrl).getPath()); - // contctx.rebind("earFileName", - // URLUtils.urlToFile(earUrl).getPath()); - contctx.rebind("earURL", earUrl); - contctx.rebind("j2eeApplicationName", j2eeApplicationName); - contctx.rebind("roleNames", roleNames); - createContainer(contctx); - } catch (Exception e) { - // An ejb-jar is corrupted so undeploy all the deployed jar - // of the ear application. - logger.log(BasicLevel.ERROR, "Error when deploying '" + fileName + "'", e); - logger.log(BasicLevel.ERROR, "Undeploy ejb-jar of the ear application"); - - for (int j = 0; j <= i; j++) { - Container cont = getContainer(URLUtils.urlToFile(jarURLs[j]).getPath()); - if (cont != null) { - removeContainer(cont, true); - } else { - logger.log(BasicLevel.ERROR, "Cannot remove the non-existant container '" + fileName + "'"); - } - } - throw new ServiceException("Error during the deployment", e); - } - } - // return ejbClassLoader; - } - - /** - * Undeploy the given ejb-jars of an ear file. (This method is only used for the ear applications, not for the ejb-jar - * applications). - * @param urls the list of the urls of the ejb-jars to undeploy. - */ - public void unDeployJars(final URL[] urls) { - for (int i = 0; i < urls.length; i++) { - String fileName = URLUtils.urlToFile(urls[i]).getPath(); - Container cont = getContainer(fileName); - if (cont != null) { - removeContainer(cont, true); - } else { - logger.log(BasicLevel.ERROR, "Cannot remove the non-existant container '" + fileName + "'"); - } - } - } - - /** - * Remove the specified container. - * @param cont the container to remove. - * @param isEarCase true if only if the removeContainer method is called in the ear case, false otherwise. - */ - public void removeContainer(final Container cont, final boolean isEarCase) { - if (isEarCase == (cont.getEarFileName() != null)) { - removeContainer(cont); - } else { - String err = "Cannot remove container '" + cont.getName() - + "' it is in an ear application. You must undeploy the ear associated."; - logger.log(BasicLevel.ERROR, err); - } - } - - /** - * Make a cleanup of the cache of deployment descriptor. This method must be invoked after the ear deployment by the EAR - * service. the deployment of an ear by . - * @param earClassLoader the ClassLoader of the ear application to remove from the cache. - */ - public void removeCache(final ClassLoader earClassLoader) { - EjbDeploymentDescManager mgr = EjbDeploymentDescManager.getInstance(); - mgr.removeCache(earClassLoader); - } - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the jar file. - * @return true if the jar is deployed, else false. - */ - public boolean isJarLoaded(final String fileName) { - return (getContainer(fileName) != null); - } - - /** - * Check if current carol protocol choose is include into those choose during generation. - * @param listProtocolGenerated (string with comma separator) - * @param listCurrentProtocol (string with comma separator) - * @return true if we have find at least one current protocol not in those generated - */ - private static boolean checkCurrentProtocolIncludeIntoGenerated(final String listProtocolGenerated, - final String listCurrentProtocol) { - Protocols generated = new Protocols(listProtocolGenerated); - Protocols current = new Protocols(listCurrentProtocol); - return generated.isSupported(current); - } - - /** - * Get the attibut value in manifest file. - * @param fileName : the file/directory containing the manifest - * @param attributName : the attribut name - * @return the value corresponding to the attributName if it's exist null otherwise - */ - private static String getAttributeInManifest(final String fileName, final String attributName) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(new File(fileName)); - return archive.getMetadata().get(attributName); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot read Manifest: " + e); - return null; - } - } - - /** - * Check that GenIC have been applied on the given ejb-jar file If it was not done, it run GenIC against the file. - * @param fileName given EJB-JAR file. - * @param urls Array of URLs used as CLASSPATH during EJB compilation - */ - public void checkGenIC(final String fileName, final URL[] urls) { - // Detect if auto genIC is disabled or not in jonas.properties file. - if (!autoGenIC) { - return; - } - - // get Carol configuration to intialize Genic Arguments - List protocols = registryService.getActiveProtocolNames(); - - // Extra args are stored in autoGenICArgsList - - String[] genicArgsString = null; - - int argIndex = 0; - // append classpath - if (urls != null && urls.length > 0) { - // we have a CP to use - genicArgsString = new String[4 + autoGenICArgsList.size()]; - - StringBuffer classpath = new StringBuffer(); - for (int i = 0; i < urls.length; i++) { - // Ensure path is correct (no %20 for spaces) - String path = URLUtils.urlToFile(urls[i]).getPath(); - classpath.append(path); - if (i != (urls.length - 1)) { - classpath.append(File.pathSeparator); - } - } - - genicArgsString[argIndex++] = "-classpath"; - genicArgsString[argIndex++] = classpath.toString(); - } else { - // no CP - genicArgsString = new String[2 + autoGenICArgsList.size()]; - } - - genicArgsString[argIndex++] = "-protocols"; - String listProtocols = ""; - for (Iterator i = protocols.iterator(); i.hasNext();) { - String protocol = i.next(); - listProtocols = listProtocols + protocol; - if (i.hasNext()) { - listProtocols = listProtocols + ","; - } - } - genicArgsString[argIndex++] = listProtocols; - - // Add the extra args - for (String argument : autoGenICArgsList) { - genicArgsString[argIndex++] = argument; - } - - String jonasVersionGenic = getAttributeInManifest(fileName, "Genic-Jonas-Version"); - String listProtocolGenerated = getAttributeInManifest(fileName, "Genic-Jonas-protocols"); - - boolean isCurrentProtocolIncludeIntoGenerated = checkCurrentProtocolIncludeIntoGenerated(listProtocolGenerated, - listProtocols); - - if ((jonasVersionGenic == null) || !jonasVersionGenic.equals(Version.getNumber()) - || !isCurrentProtocolIncludeIntoGenerated) { - // Print a little explanation before calling GenIC - if (jonasVersionGenic == null) { - logger.log(BasicLevel.INFO, "JOnAS version was not found in the '" + fileName - + "' manifest file. Auto-generating container classes..."); - } else if (!jonasVersionGenic.equals(Version.getNumber())) { - logger.log(BasicLevel.INFO, "JOnAS version found in the '" + fileName + "' manifest file :" + jonasVersionGenic - + " is different of the current JOnAS version : " + Version.getNumber() - + ". Auto-generating container classes..."); - } else if (!isCurrentProtocolIncludeIntoGenerated) { - logger.log(BasicLevel.INFO, "Current Carol protocol is not included in the protocols found in the '" + fileName - + "' manifest file. Auto-generating container classes..."); - } - try { - callGenic(fileName, genicArgsString); - } catch (ServiceException e) { - logger.log(BasicLevel.ERROR, "Cannot apply GenIC on the file '" + fileName + "' with the args '" - + Arrays.asList(genicArgsString) + "'.", e); - } - } - } - - /** - * {@inheritDoc} - */ - public String getContainerContextID(final String containerFileName) { - return getContainer(containerFileName).getContextId(); - } - - // ===================================================== - // TimerHandle delegation methods - // ===================================================== - - /** - * {@inheritDoc} - */ - public Timer getTimer(final JTimerHandleInfo info) { - - // get the Bean TimerService - JTimerService timerservice = getJTimerService(info); - - // Get the Timer from the list. - Timer ret = timerservice.getTimerByTime(info.getDuration(), info.getPeriod(), info.getInfo()); - if (ret == null) { - // The Timer should have been canceled. - throw new NoSuchObjectLocalException("The Timer should have been canceled"); - } - return ret; - } - - /** - * {@inheritDoc} - */ - public Timer restartTimer(final JTimerHandleInfo info) { - - // get the Bean TimerService - JTimerService timerservice = getJTimerService(info); - - // Recreate a Timer with recomputed initial duration. - long newDuration = info.getDuration() + info.getStartTime() - System.currentTimeMillis(); - if (newDuration < MINIMUM_TIMER_DURATION) { - newDuration = MINIMUM_TIMER_DURATION; - } - // assign new value. - info.setDuration(newDuration); - Timer timer = timerservice.createTimer(info.getDuration(), info.getPeriod(), info.getInfo()); - if (timer.getTimeRemaining() > 0) { - TraceTimer.logger.log(BasicLevel.DEBUG, "timer restarted"); - } else { - TraceTimer.logger.log(BasicLevel.DEBUG, "timer terminated"); - timer.cancel(); - } - return timer; - } - - /** - * @param info TimerHandle info for TimerService retrieving. - * @return Returns the associated JTimerService instance. - */ - private JTimerService getJTimerService(final JTimerHandleInfo info) { - - // First get the Container - JContainer cont = (JContainer) getContainer(info.getContainerId()); - if (cont == null) { - TraceTimer.logger.log(BasicLevel.ERROR, "Cannot get container =" + info.getContainerId()); - throw new IllegalStateException("Cannot get container"); - } - - // The the BeanFactory - JFactory bf = (JFactory) cont.getBeanFactory(info.getBeanId()); - - // Finally get the associated TimerService - JTimerService timerservice = null; - if (bf instanceof JEntityFactory) { - - // entity bean - Serializable pk = info.getPk(); - JEntityFactory ef = (JEntityFactory) bf; - Serializable pks = ef.decodePK(pk); - if (TraceTimer.isDebug()) { - TraceTimer.logger.log(BasicLevel.DEBUG, "encoded PK=" + pk); - TraceTimer.logger.log(BasicLevel.DEBUG, "decoded PK=" + pks); - } - JEntitySwitch es = ef.getEJB(pks); - if (es == null) { - TraceTimer.logger.log(BasicLevel.DEBUG, "No entity for this pk"); - throw new NoSuchObjectLocalException("No entity for this pk"); - } - timerservice = (JTimerService) es.getEntityTimerService(); - } else { - - // stateless session or message driven bean - timerservice = (JTimerService) bf.getTimerService(); - } - if (timerservice == null) { - TraceTimer.logger.log(BasicLevel.DEBUG, "Cannot retrieve TimerService"); - throw new IllegalStateException("Cannot retrieve TimerService"); - } - return timerservice; - } - - // Admin code (JMX based) - // --------------------- - /** - * Register EJB Container Service MBean. - * @param service ejb container service to manage - * @param domainName domain name - */ - private void registerEjbServiceMBean(final Object service, final String domainName) { - ObjectName on = JonasObjectName.ejbService(domainName); - jmxService.registerMBean(service, on); - } - - /** - * Unregister EJB Container Service MBean. - * @param domainName domain name - */ - private void unregisterEjbServiceMBean(final String domainName) { - if (jmxService != null) { - ObjectName on = JonasObjectName.ejbService(domainName); - jmxService.unregisterMBean(on); - } - } - - /** - * Register an EJBModule MBean. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param container the container object corresponding to the module - * @param fileName the module's file name - * @param earUrl if the module is inside a ear, this is the url of the that ear - * @return the {@link EJBModule} instance. - */ - private EJBModule registerEJBModuleMBean(final String domainName, final String serverName, final String j2eeappName, - final String moduleName, final JContainer container, final String fileName, final URL earUrl) { - - ObjectName ejbModuleOn = J2eeObjectName.getEJBModule(domainName, serverName, j2eeappName, moduleName); - EJBModule ejbModuleMBean = new EJBModule(jmxService.getJmxServer(), ejbModuleOn, container, fileName, moduleName, - j2eeappName, earUrl); - ejbModuleMBean.setServer(J2eeObjectName.J2EEServerName(domainName, serverName)); - try { - jmxService.registerModelMBean(ejbModuleMBean, ejbModuleOn); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register EJBModule MBean", e); - } - return ejbModuleMBean; - } - - /** - * Registers an EntityBean JSR77 compliant MBean. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param beanName the EJB name - * @param jef {@link JEntityFactory} - * @param persist persistency type (CMP/BMP) - * @return the EntityBean JSR77 {@link ObjectName} - */ - private String registerEntityBeanMBean(final String domainName, final String serverName, final String j2eeappName, - final String moduleName, final String beanName, final JEntityFactory jef, final String persist) { - - String entityBeanON = J2eeObjectName.getEntityBeanName(domainName, moduleName, serverName, j2eeappName, beanName); - EntityBean entityBeanMBean = new EntityBean(entityBeanON, jef, persist, jmxService); - try { - jmxService.registerModelMBean(entityBeanMBean, entityBeanON); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register EntityBean MBean", e); - return null; - } - return entityBeanON; - } - - /** - * Registers a JSR 77 compliant MBean for a Stateful EJB. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param beanName the EJB name - * @param jsf {@link JSessionFactory} - * @return the Stateful JSR 77 MBean {@link ObjectName} - */ - private String registerStatefulSessionBeanMBean(final String domainName, final String serverName, final String j2eeappName, - final String moduleName, final String beanName, final JSessionFactory jsf) { - - String ssBeanON = J2eeObjectName.getStatefulSessionBeanName(domainName, moduleName, serverName, j2eeappName, beanName); - StatefulSessionBean ssBeanMBean = new StatefulSessionBean(ssBeanON, jsf, jmxService); - try { - jmxService.registerModelMBean(ssBeanMBean, ssBeanON); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register StatefulSessionBean MBean for " + beanName, e); - return null; - } - return ssBeanON; - } - - /** - * Registers a JSR 77 compliant MBean for a Stateless EJB. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param beanName the EJB name - * @param jsf {@link JStatelessFactory} - * @return the Stateful JSR 77 MBean {@link ObjectName} - */ - private String registerStatelessSessionBeanMBean(final String domainName, final String serverName, - final String j2eeappName, final String moduleName, final String beanName, final JStatelessFactory jsf) { - - String ssBeanON = J2eeObjectName.getStatelessSessionBeanName(domainName, moduleName, serverName, j2eeappName, beanName); - StatelessSessionBean ssBeanMBean = new StatelessSessionBean(ssBeanON, jsf, jmxService); - try { - jmxService.registerModelMBean(ssBeanMBean, ssBeanON); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register StatelessSessionBean MBean" + beanName, e); - return null; - } - return ssBeanON; - } - - /** - * Registers a JSR 77 compliant MBean for an MDB. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param beanName the EJB name - * @param jsf {@link JFactory} - * @return the MDB JSR 77 MBean {@link ObjectName} - */ - private String registerMdbBeanMBean(final String domainName, final String serverName, final String j2eeappName, - final String moduleName, final String beanName, final JFactory jsf) { - - String mdbBeanON = J2eeObjectName.getMessageDrivenBeanName(domainName, moduleName, serverName, j2eeappName, beanName); - MessageDrivenBean mdbBeanMBean = new MessageDrivenBean(mdbBeanON, jsf, jmxService); - try { - jmxService.registerModelMBean(mdbBeanMBean, mdbBeanON); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register MessageDrivenBean MBean" + beanName, e); - return null; - } - return mdbBeanON; - } - - /** - * Create and register MBeans for the module and for each EJB in the module. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - * @param container the container object corresponding to the module - * @param fileName the module's file name - * @param earUrl if the module is inside a ear, this is the url of the that ear - * @param dd the module's deployment descriptor - * @param factoryMap a map containing for each bean name the {@link JFactory} object necessary to construct an EJB MBean - * @param beanDescMap a Map containing, for each bean name its {@link BeanDesc} - * @return the module MBean's OBJECT_NAME - */ - private String registerCompMBeans(final String domainName, final String serverName, final String j2eeappName, - final String moduleName, final JContainer container, final String fileName, final URL earUrl, - final DeploymentDesc dd, final Map factoryMap, final Map beanDescMap) { - - // Create and register EJBModule MBean - EJBModule ejbModuleMBean = registerEJBModuleMBean(domainName, serverName, j2eeappName, moduleName, container, fileName, - earUrl); - String ejbModuleON = J2eeObjectName.getEJBModuleName(domainName, serverName, j2eeappName, moduleName); - ejbModuleMBean.setDeploymentDescriptor(dd.getXmlContent()); - ejbModuleMBean.setJonasDeploymentDescriptor(dd.getJOnASXmlContent()); - - // Create and register the different Bean MBeans types - // The keys if factoryMap give the bean Names - for (String beanName : factoryMap.keySet()) { - String beanON = null; - BeanFactory bf = factoryMap.get(beanName); - BeanDesc beanDesc = beanDescMap.get(beanName); - if (beanDesc instanceof EntityBmpDesc) { - beanON = registerEntityBeanMBean(domainName, serverName, j2eeappName, moduleName, beanName, - (JEntityFactory) bf, BMP); - } else if (beanDesc instanceof EntityCmpDesc) { - beanON = registerEntityBeanMBean(domainName, serverName, j2eeappName, moduleName, beanName, - (JEntityFactory) bf, CMP); - } else if (beanDesc instanceof SessionStatefulDesc) { - beanON = registerStatefulSessionBeanMBean(domainName, serverName, j2eeappName, moduleName, beanName, - (JSessionFactory) bf); - } else if (beanDesc instanceof SessionStatelessDesc) { - beanON = registerStatelessSessionBeanMBean(domainName, serverName, j2eeappName, moduleName, beanName, - (JStatelessFactory) bf); - } else if (beanDesc instanceof MessageDrivenDesc) { - beanON = registerMdbBeanMBean(domainName, serverName, j2eeappName, moduleName, beanName, (JFactory) bf); - } - ejbModuleMBean.addEjb(beanON); - } - return ejbModuleON; - } - - /** - * Unregister MBeans for the module and for each EJB in the module. - * @param domainName the domain name - * @param serverName the server name - * @param j2eeappName the J2EE Application to which the module belongs or null if the module is not inside an application - * @param moduleName the module name - */ - private void unregisterCompMBeans(final String domainName, final String serverName, final String j2eeappName, - final String moduleName) { - if (jmxService != null) { - ObjectName onEjbModule = J2eeObjectName.getEJBModule(domainName, serverName, j2eeappName, moduleName); - MBeanServer mbeanServer = jmxService.getJmxServer(); - // try to remove MBeans corresponding to the EJBs in the module - ObjectName onEjb = null; - try { - String[] onEjbs = (String[]) mbeanServer.getAttribute(onEjbModule, "ejbs"); - for (int i = 0; i < onEjbs.length; i++) { - onEjb = new ObjectName(onEjbs[i]); - jmxService.unregisterModelMBean(onEjb); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Could not unregister MBean " + onEjb.toString(), e); - } - - // Unregister EJBModule MBean - jmxService.unregisterModelMBean(onEjbModule); - } - } - - /** - * Call GenIC by using a wrapper. - * @param jarPath path of the jar file - * @param genicArgs arguments for GenIC - */ - private void callGenic(final String jarPath, final String[] genicArgs) { - String[] args; - if (genicArgs != null) { - args = new String[genicArgs.length + 1]; - for (int i = 0; i < genicArgs.length; i++) { - args[i] = genicArgs[i]; - } - args[genicArgs.length] = jarPath; - } else { - args = new String[1]; - args[0] = jarPath; - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Calling GenIC with arguments :" + Arrays.asList(args)); - } - GenicServiceWrapper.callGenic(args); - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param securityService the securityService to set - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - } - - /** - * @param transactionService the transactionService to set - */ - public void setTransactionService(final TransactionService transactionService) { - this.transactionService = transactionService; - } - - /** - * @param workManagerService the workManagerService to set - */ - public void setWorkManagerService(final WorkManagerService workManagerService) { - this.workManagerService = workManagerService; - } - - /** - * @param jaxrpcService the jaxrpcService to set - */ - public void setWebServicesService(final IJAXRPCService jaxrpcService) { - this.jaxrpcService = jaxrpcService; - } - - /** - * @param naming the naming to set - */ - public void setNaming(final JNamingManager naming) { - this.naming = naming; - } - - /** - * @param componentContextFactory the componentContextFactory to set - */ - public void setComponentContextFactory(final JComponentContextFactory componentContextFactory) { - this.componentContextFactory = componentContextFactory; - } - - /** - * @param registry the registry to set - */ - public void setRegistry(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Set the reference on HA service. - * @param haService the reference on HA service - */ - public void setHaService(final HaService haService) { - this.haService = haService; - } - - /** - * Set the reference on resource service. - * @param resService the reference on Resource service - */ - public void setResourceService(final ResourceService resService) { - this.resService = resService; - } - - /** - * @return the reference on CMI service - */ - public CmiService getCmiService() { - return cmiService; - } - - /** - * Set the reference on CMI service. - * @param cmiService the reference on CMI service - */ - public void setCmiService(final CmiService cmiService) { - this.cmiService = cmiService; - } - - /** - * @param deployerManager the {@link IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - this.versioningService = versioningService; - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - this.versioningService = null; - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return this.versioningService; - } - - /** - * @return Whether versioning is enabled. - */ - public boolean isVersioningEnabled() { - return (versioningService != null && versioningService.isVersioningEnabled()); - } - - /** - * @return Will EJB monitoring enabled for EJBs deployed in the future? - */ - public boolean getMonitoringEnabled() { - return this.monitoringEnabled; - } - - /** - * @param monitoringEnabled Whether EJB monitoring will enabled for EJBs deployed in the future. - */ - public void setMonitoringEnabled(final boolean monitoringEnabled) { - this.monitoringEnabled = monitoringEnabled; - } - - /** - * @return Number of milliseconds after which methods of EJBs deployed in the future will start warning. - */ - public int getWarningThreshold() { - return this.warningThreshold; - } - - /** - * @param warningThreshold Number of milliseconds after which methods of EJBs deployed in the future will start warning. - */ - public void setWarningThreshold(final int warningThreshold) { - if (warningThreshold < 0) { - throw new IllegalArgumentException("warningThreshold must be positive or 0"); - } - this.warningThreshold = warningThreshold; - } - - /** - * get the total number of calls on all beans of this ejb container - * @return the total number of calls on all beans of this ejb container - */ - @SuppressWarnings("unchecked") - public long getNumberOfCalls() { - long numberOfCalls = 0; - try { - Iterator statefulBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatefulSessionBean,*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - try { - numberOfCalls += ((Long) jmxService.getJmxServer().getAttribute(on, "numberOfCalls")).longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - Iterator statelessBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatelessSessionBean,*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - try { - numberOfCalls += ((Long) jmxService.getJmxServer().getAttribute(on, "numberOfCalls")).longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'numberOfCalls'", e); - } - return numberOfCalls; - } - - /** - * get the total time spent in container + business execution for all beans of this ejb container - * @return the total time spent in container + business execution for all beans of this ejb container - */ - @SuppressWarnings("unchecked") - public long getTotalProcessingTime() { - long totalProcessingTime = 0; - try { - Iterator statefulBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatefulSessionBean,*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - try { - totalProcessingTime += ((Long) jmxService.getJmxServer().getAttribute(on, "totalProcessingTime")) - .longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - Iterator statelessBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatelessSessionBean,*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - try { - totalProcessingTime += ((Long) jmxService.getJmxServer().getAttribute(on, "totalProcessingTime")) - .longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - } catch (Exception e) { - - logger.log(BasicLevel.INFO, "Failed getting attribute 'totalProcessingTime'", e); - } - return totalProcessingTime; - } - - /** - * get the total time spent in business execution for all beans of this ejb container - * @return the total time spent in business execution for all beans of this ejb container - */ - @SuppressWarnings("unchecked") - public long getTotalBusinessProcessingTime() { - long totalBusinessProcessingTime = 0; - try { - - Iterator statefulBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatefulSessionBean,*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - try { - totalBusinessProcessingTime += ((Long) jmxService.getJmxServer().getAttribute(on, - "totalBusinessProcessingTime")).longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - Iterator statelessBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatelessSessionBean,*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - try { - totalBusinessProcessingTime += ((Long) jmxService.getJmxServer().getAttribute(on, - "totalBusinessProcessingTime")).longValue(); - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'totalBusinessProcessingTime'", e); - } - return totalBusinessProcessingTime; - } - - /** - * get the average time spent in container + business execution for all beans of this ejb container per request - * @return the average time spent in container + business execution for all beans of this ejb container per request - */ - public long getAverageProcessingTime() { - if (getNumberOfCalls() > 0) { - return getTotalProcessingTime() / getNumberOfCalls(); - } else { - return 0; - } - } - - /** - * get the average time spent in business execution for all beans of this ejb container per request - * @return the average time spent in business execution for all beans of this ejb container per request - */ - public long getAverageBusinessProcessingTime() { - if (getNumberOfCalls() > 0) { - return getTotalBusinessProcessingTime() / getNumberOfCalls(); - } else { - return 0; - } - } - - /** - * Applies the current monitoring settings to deployed EJBs. - */ - @SuppressWarnings("unchecked") - public void applyMonitorSettings(final String scope) { - Attribute monitoringEnabled = new Attribute("monitoringEnabled", new Boolean(this.monitoringEnabled)); - Attribute warningThreshold = new Attribute("warningThreshold", new Integer(this.warningThreshold)); - try { - if ("all".equals(scope)) { - Iterator statefulBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatefulSessionBean,*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - jmxService.getJmxServer().setAttribute(on, monitoringEnabled); - jmxService.getJmxServer().setAttribute(on, warningThreshold); - } - Iterator statelessBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatelessSessionBean,*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - jmxService.getJmxServer().setAttribute(on, monitoringEnabled); - jmxService.getJmxServer().setAttribute(on, warningThreshold); - } - } else if ("nonDD".equals(scope)) { - Iterator statefulBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatefulSessionBean,*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - try { - if (!((Boolean) jmxService.getJmxServer().getAttribute(on, "monitoringSettingsDefinedInDD"))) { - jmxService.getJmxServer().setAttribute(on, monitoringEnabled); - jmxService.getJmxServer().setAttribute(on, warningThreshold); - } - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - Iterator statelessBeans = jmxService.getJmxServer().queryNames( - new ObjectName(this.getDomainName() + ":j2eeType=StatelessSessionBean,*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - try { - if (!((Boolean) jmxService.getJmxServer().getAttribute(on, "monitoringSettingsDefinedInDD"))) { - jmxService.getJmxServer().setAttribute(on, monitoringEnabled); - jmxService.getJmxServer().setAttribute(on, warningThreshold); - } - } catch (AttributeNotFoundException ignored) { - // Ignored, since TODO: EJB3 statistics - } - } - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Cannot apply monitor settings: " + e.getMessage(), e); - } - } - - /** - * @param eventService IEventService to set. - */ - public void setEventService(final IEventService eventService) { - this.eventService = eventService; - } - - /** - * @return IEventService in use. - */ - public IEventService getEventService() { - return this.eventService; - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Unset the resource checker manager. - */ - public void unsetResourceCheckerManager() { - this.resourceCheckerManager = null; - } - - /** - * @return work directory for ejb2s. - */ - protected String getWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "ejb2s"; - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBServiceMBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBServiceMBean.java deleted file mode 100644 index 21803c2232..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JOnASEJBServiceMBean.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Michel Bruno and Guillaume Riviere - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal; - -import java.util.List; -import java.util.Set; - -import javax.management.ObjectName; - -/** - * MBean Interface for EJB Service Management. - * MBean type: Standard - * MBean model: Inheritance (EJBServiceImpl) - */ -public interface JOnASEJBServiceMBean { - - /** - * @return Integer Total Number of Container actually in JOnAS - */ - Integer getCurrentNumberOfContainer(); - - /** - * @return Integer Total Number of Bean Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfBeanType(); - - /** - * @return Integer Total Number of Bmp Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfBMPType(); - - /** - * @return Integer Total Number of Cmp Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfCMPType(); - - /** - * @return Integer Total Number of Sbf Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfSBFType(); - - /** - * @return Integer Total Number of Sbl Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfSBLType(); - - /** - * @return Integer Total Number of Mdb Type actually in JOnAS - */ - Integer getTotalCurrentNumberOfMDBType(); - - /** - * @return the ObjectName of all the ejbs using this datasource - */ - Set getDataSourceDependence(String dsName); - - /** - * @return the ObjectName of all the ejb using this destination. - */ - Set getJmsDestinationDependence(String dsName); - - /** - * @return the ObjectName of all the ejb using this Connection Factory. - */ - Set getJmsConnectionFactoryDependence(String cfName); - - /** - * @return the ObjectName of all the ejb using a given Mail Factory. - */ - Set getMailFactoryDependence(String mfName); - - /** - * Return the list of all loaded EJB container. - * @return The list of deployed EJB container - */ - List getDeployedJars(); - - /** - * Synchronized all entity bean containers. - * @param passivate passivate instances after synchronization. - */ - void syncAllEntities(boolean passivate); - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the jar file. - * @return true if the jar is deployed, else false. - */ - boolean isJarLoaded(String fileName); - - - /** - * @return Will EJB monitoring enabled for EJBs deployed in the future? - */ - public boolean getMonitoringEnabled(); - - /** - * @param monitoringEnabled Whether EJB monitoring will enabled for EJBs - * deployed in the future. - */ - public void setMonitoringEnabled(final boolean monitoringEnabled); - - /** - * @return Number of milliseconds after which methods of EJBs deployed in - * the future will start warning. - */ - public int getWarningThreshold(); - - /** - * @param warningThreshold Number of milliseconds after which methods of - * EJBs deployed in the future will start - * warning. - */ - public void setWarningThreshold(final int warningThreshold); - - /** - * get the total number of calls on all beans of this ejb container - * @return the total number of calls on all beans of this ejb container - */ - public long getNumberOfCalls(); - - /** - * get the total time spent in container + business execution for all beans - * of this ejb container - * @return the total time spent in container + business execution for all - * beans of this ejb container - */ - public long getTotalProcessingTime(); - - /** - * get the total time spent in business execution for all beans of this - * ejb container - * @return the total time spent in business execution for all beans of this - * ejb container - */ - public long getTotalBusinessProcessingTime(); - - /** - * get the average time spent in container + business execution for all beans - * of this ejb container per request - * @return the average time spent in container + business execution for all - * beans of this ejb container per request - */ - public long getAverageProcessingTime(); - - /** - * get the average time spent in business execution for all beans of this - * ejb container per request - * @return the average time spent in business execution for all beans of this - * ejb container per request - */ - public long getAverageBusinessProcessingTime(); - - /** - * Applies the current monitoring settings to deployed EJBs. - */ - public void applyMonitorSettings(String scope); - - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JarCleanTask.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JarCleanTask.java deleted file mode 100644 index 643540e89b..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/JarCleanTask.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal; - -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS JAR unused directory clean task class. This class provides a way for removing directories which are inconsistent - * directories for jar files. - * @author Florent BENOIT - * @author Benoit PELLETIER - */ -public class JarCleanTask extends AbsCleanTask { - - /** - * {@link IDeployerLog} of the task. - */ - private IDeployerLog deployerLog = null; - - /** - * {@link JOnASEJBService} reference. - */ - private JOnASEJBService ejbService; - - /** - * Construct a new EAR clean task. - * @param ejbService EJBService reference - * @param deployerLog DeployerLog of the task - */ - public JarCleanTask(final JOnASEJBService ejbService, final IDeployerLog deployerLog) { - this.ejbService = ejbService; - this.deployerLog = deployerLog; - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException if it fails - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - // Check if the JAR file is deployed - return ejbService.isJarDeployedByWorkName(logEntry.getCopy().getName()); - } - - /** - * {@inheritDoc} - * @see org.ow2.jonas.lib.work.AbsCleanTask#getDeployerLog() - */ - @Override - public IDeployerLog getDeployerLog() { - return deployerLog; - } - - public void setEjbService(final JOnASEJBService ejbService) { - this.ejbService = ejbService; - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/PrincipalFactoryImpl.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/PrincipalFactoryImpl.java deleted file mode 100644 index 28b830d5b7..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/PrincipalFactoryImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Christophe Ney - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal; - - -import java.security.Principal; - -import org.ow2.jonas.lib.ejb21.PrincipalFactory; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -/** - * Defines an implementation of PrincipalFactory returning a Principal object - */ -public class PrincipalFactoryImpl implements PrincipalFactory { - - /** - * @param inRunAs request comes from a runAs component ? - * @return a Principal object - */ - public Principal getCallerPrincipal(boolean inRunAs) { - SecurityCurrent current = SecurityCurrent.getCurrent(); - SecurityContext ctx = current.getSecurityContext(); - if (ctx == null) { - return null; - } - return ctx.getCallerPrincipal(inRunAs); - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/HandleDelegateCCFDelegate.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/HandleDelegateCCFDelegate.java deleted file mode 100644 index 6f77f5fa27..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/HandleDelegateCCFDelegate.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.delegate; - -import org.ow2.jonas.lib.ejb21.JHandleDelegate; -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; - -import javax.ejb.spi.HandleDelegate; -import javax.naming.Context; -import javax.naming.NamingException; - - -/** - * Store the {@link javax.ejb.spi.HandleDelegate} shared instance in the java:comp/ Context. - * @author Guillaume Sauthier - */ -public class HandleDelegateCCFDelegate implements JComponentContextFactoryDelegate { - - /** - * bound name. - */ - private static final String HANDLE_DELEGATE = "HandleDelegate"; - - /** - * HandleDelegate implementation is shared by all component contexts. - */ - private HandleDelegate handleDelegate = null; - - /** - * {@inheritDoc} - */ - public void modify(final Context componentContext) throws NamingException { - // Bind java:comp/HandleDelegate - componentContext.rebind(HANDLE_DELEGATE, getHandleDelegate()); - } - - /** - * @return The HandleDelegate implementation for this server - */ - private HandleDelegate getHandleDelegate() { - if (handleDelegate == null) { - handleDelegate = new JHandleDelegate(); - } - return handleDelegate; - } - - /** - * Undo the changes done by this delegate on the given java:comp context. - * @param componentContext java:comp/ component context to be modified. - * @throws NamingException thrown if something goes wrong - * during the {@link javax.naming.Context} update. - */ - public void undo(final Context componentContext) throws NamingException { - componentContext.unbind(HANDLE_DELEGATE); - } - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/JTimerHandleDelegate.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/JTimerHandleDelegate.java deleted file mode 100644 index 9677d8c13f..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/delegate/JTimerHandleDelegate.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.delegate; - -import javax.ejb.Timer; -import javax.naming.Context; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.ejb2.EJBService; -import org.ow2.jonas.ejb2.JTimerHandleInfo; -import org.ow2.jonas.ejb2.TimerHandleDelegate; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; - -/** - * Implementation for TimerHandleDelegate - * Must be added to JComponentContextFactory by addDelegate(). - * @author durieuxp - */ -public class JTimerHandleDelegate implements TimerHandleDelegate, JComponentContextFactoryDelegate { - - /** - * Logger used for traces. - */ - private static Logger logger = Log.getLogger(Log.JONAS_NAMING_PREFIX); - - /** - * JNDI Binding name. - */ - private static final String JNDI_NAME = "TimerHandleDelegate"; - - /** - * A transient (non serialized) reference to the {@link EJBService}. - */ - private transient EJBService ejbService = null; - - /** - * @param ejbserv the {@link EJBService} to use. - */ - public void setEJBService(final EJBService ejbserv) { - this.ejbService = ejbserv; - } - - /** - * Retrieve the {@link Timer} in the {@link EJBService}. - * @param info Timer informations - * @return the Timer - * @see org.ow2.jonas.ejb2.TimerHandleDelegate#getTimer(org.ow2.jonas.ejb2.JTimerHandleInfo) - */ - public Timer getTimer(final JTimerHandleInfo info) { - if (ejbService == null) { - logger.log(BasicLevel.ERROR, "EJBService not set"); - return null; - } - return ejbService.getTimer(info); - } - - /** - * Retrieve the {@link Timer} in the {@link EJBService} and restart it. - * @param info Timer informations - * @return the Timer - * @see org.ow2.jonas.ejb2.TimerHandleDelegate#restartTimer(org.ow2.jonas.ejb2.JTimerHandleInfo) - */ - public Timer restartTimer(final JTimerHandleInfo info) { - if (ejbService == null) { - logger.log(BasicLevel.ERROR, "EJBService not set"); - return null; - } - return ejbService.restartTimer(info); - } - - /** - * Add the {@link TimerHandleDelegate} into the ENC {@link Context}. - * @param componentContext the ENC {@link Context}. - * @throws NamingException if unable to bind java:comp/TimerHandleDelegate - * @see org.ow2.jonas.naming.JComponentContextFactoryDelegate#modify(javax.naming.Context) - */ - public void modify(final Context componentContext) throws NamingException { - try { - // Bind me as java:comp/TimerHandleDalegate - componentContext.rebind(JNDI_NAME, this); - } catch (NamingException ne) { - // Just log the error, then rethrow the original Exception - String err = "Cannot bind java:comp/TimerHandleDelegate object : " + ne.getMessage(); - logger.log(BasicLevel.ERROR, err); - throw ne; - } - } - - /** - * Remove the {@link TimerHandleDelegate} from the ENC {@link Context}. - * @param componentContext the ENC {@link Context}. - * @throws NamingException if unable to unbind java:comp/TimerHandleDelegate - * @see org.ow2.jonas.naming.JComponentContextFactoryDelegate#undo(javax.naming.Context) - */ - public void undo(final Context componentContext) throws NamingException { - componentContext.unbind(JNDI_NAME); - } - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJB.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJB.java deleted file mode 100644 index 9d86ab2189..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJB.java +++ /dev/null @@ -1,446 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Properties; -import java.util.Set; - -import javax.mail.Session; -import javax.mail.internet.MimePartDataSource; -import javax.management.BadAttributeValueExpException; -import javax.management.BadBinaryOpValueExpException; -import javax.management.BadStringOperationException; -import javax.management.InvalidApplicationException; -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.management.Query; -import javax.management.QueryEval; -import javax.management.QueryExp; - -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.ejb.BeanDesc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp1Desc; -import org.ow2.jonas.deployment.ejb.EntityJdbcCmp2Desc; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.JFactory; -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; - - - -/** - * This class implements the EJB type specified in JSR77. - * @author Adriana Danes - */ -public class EJB extends J2EEManagedObject { - - /** - * The Bean to manage. - */ - protected JFactory ejbToManage = null; - - /** - * Bean Deployment Descriptor. - */ - protected BeanDesc desc = null; - - /** - * Bean ejbjar filename. - */ - protected String fileName = null; - - /** - * mbeanServer where mbeans are registered - */ - MBeanServer mbeanServer = null; - - /** - * Constructs an EJB MBean object. - * @param objectName EJB {@link ObjectName} - * @param ejbToManage This bean's {@link JFactory} - */ - public EJB(String objectName, JFactory ejbToManage, JmxService jmx) { - super(objectName); - this.ejbToManage = ejbToManage; - this.fileName = ejbToManage.getContainer().getExternalFileName(); - this.desc = ejbToManage.getDeploymentDescriptor(); - mbeanServer = jmx.getJmxServer(); - } - - - /** - * @return String The Name of this JFactory - */ - public String getName() { - return desc.getEjbName(); - } - - /** - * @return Ejb File Name - */ - public String getFileName() { - return fileName; - } - - /** - * Construct Hashtable containing for each ResourceRef jndi name - * its corresponding the ResourceAdapter MBean OBJECT_NAME. - * @return Hashtable table - */ - public Hashtable getAllJdbcResourceAdapterName() { - Hashtable result = new Hashtable(); - ArrayList jdbcResourceRefJndiNames = getAllJdbcResourceRefJndiNames(); - if (jdbcResourceRefJndiNames.isEmpty()) { - // return empty result - return result; - } - - for (int i = 0; i < jdbcResourceRefJndiNames.size(); i++) { - String jndiName = (String) jdbcResourceRefJndiNames.get(i); - QueryExp match = Query.match(Query.attr("jndiName"), Query.value(jndiName)); - QueryExp query = Query.and(match, new DataSourcePropertiesQueryExp()); - Set objectNames = mbeanServer.queryNames(J2eeObjectName.getResourceAdapters(J2eeObjectName.ALL, null), query); - - // If the set is not empty, return the first value - if (!objectNames.isEmpty()) { - result.put(jndiName, objectNames.iterator().next()); - } - - } - return result; - } - /** - * Construct Hashtable containing for each ResourceRef jndi name - * its corresponding the datasource name or empty String if no - * corresponding datasource was found. - * @return Hashtable table - */ - public Hashtable getAllDataSourceName() { - Hashtable result = new Hashtable(); - ArrayList jdbcResourceRefJndiNames = getAllJdbcResourceRefJndiNames(); - if (jdbcResourceRefJndiNames.isEmpty()) { - // return empty result - return result; - } - - for (Iterator it = jdbcResourceRefJndiNames.iterator(); it.hasNext();) { - String jndiName = (String) it.next(); - QueryExp match = Query.match(Query.attr("jndiName"), - Query.value(jndiName)); - Set objectNames = mbeanServer.queryNames(J2eeObjectName.getJDBCDataSources(J2eeObjectName.ALL, null), - match); - - // If the set is not empty, return the first value - if (!objectNames.isEmpty()) { - ObjectName on = (ObjectName) objectNames.iterator().next(); - result.put(jndiName, on.getKeyProperty("name")); - } - } - return result; - } - - /** - * @return Returns an {@link ArrayList} of JDBC resource-ref JNDI Names. - */ - private ArrayList getAllJdbcResourceRefJndiNames() { - ArrayList jndiNames = new ArrayList(); - String jndiName = null; - // find the resource refs - IResourceRefDesc[] rrDesc = desc.getResourceRefDesc(); - for (int i = 0; i < rrDesc.length; i++) { - if (rrDesc[i].isJdbc()) { - // get the DD provided JNDI name - jndiName = rrDesc[i].getJndiName(); - jndiNames.add(jndiName); - } - } - - // if the EJB is an entity with CMP, we have to find jndi name in the jdbc_mapping - if (desc instanceof EntityJdbcCmp1Desc) { - // in case of CMP1 : - EntityJdbcCmp1Desc jdbcCmp1Desc = (EntityJdbcCmp1Desc) desc; - jndiName = jdbcCmp1Desc.getDatasourceJndiName(); - jndiNames.add(jndiName); - } else if (desc instanceof EntityJdbcCmp2Desc) { - // in case of CMP2 : - EntityJdbcCmp2Desc jdbcCmp2Desc = (EntityJdbcCmp2Desc) desc; - jndiName = jdbcCmp2Desc.getDatasourceJndiName(); - jndiNames.add(jndiName); - } - return jndiNames; - } - - /** - * @return Set The Name set of the Connection Factories - */ - public Set getAllJMSConnectionFactoryName(){ - Set result= new HashSet(); - IResourceRefDesc[] rrDesc = desc.getResourceRefDesc(); - for (int i = 0; i < rrDesc.length; i ++) { - if ("javax.jms.TopicConnectionFactory".equals(rrDesc[i].getTypeName()) - || "javax.jms.QueueConnectionFactory".equals(rrDesc[i].getTypeName()) - || "javax.jms.ConnectionFactory".equals(rrDesc[i].getTypeName())) { - result.add(rrDesc[i].getJndiName()); - } - } - return result; - } - - /** - * @return Hashtable which maps the JNDI names provided by the DD to the Session Mail factyory resources - * known by the Mail Service - */ - public Hashtable getAllMailFactorySName() { - return getAllMailFactoryName(Session.class.getName()); - } - - /** - * @return Hashtable which maps the JNDI names provided by the DD to the MimePartDataSource Mail factory resources - * known by the Mail Service - */ - public Hashtable getAllMailFactoryMName() { - return getAllMailFactoryName(MimePartDataSource.class.getName()); - } - - /** - * @param type the resource type (fully qualified class name)? - * @return Returns a {@link Hashtable} (jndiName to factoryName) for all - * mail resource-refs of the given type. - */ - private Hashtable getAllMailFactoryName(final String type){ - Hashtable result = new Hashtable(); - - IResourceRefDesc[] rrDesc = desc.getResourceRefDesc(); - for (int i = 0; i < rrDesc.length; i ++) { - // Only handle the resource of the given factory Type - if (type.equals(rrDesc[i].getTypeName())) { - - // get the DD provided JNDI name - String jndiName = rrDesc[i].getJndiName(); - - // Create the query matching the name attribute which is the factory JNDI name - QueryExp match = Query.match(Query.attr("Name"), - Query.value(jndiName)); - Set objectNames = mbeanServer.queryNames(J2eeObjectName.JavaMailResources(J2eeObjectName.ALL, null, type), - match); - - if (!objectNames.isEmpty()) { - // found an mbean - ObjectName on = (ObjectName) objectNames.iterator().next(); - String factoryName = null; - try { - factoryName = (String) mbeanServer.getAttribute(on, "FactoryName"); - } catch (Exception e) { - factoryName = ""; - } - result.put(jndiName, factoryName); - } else { - // no mbean found - result.put(jndiName, ""); - } - } - } - return result; - } - - /** - * @return Set The Name set of the JMS Destinations - */ - public Set getAllJMSDestinationName(){ - Set result= new HashSet(); - IResourceEnvRefDesc[] rrDesc = desc.getResourceEnvRefDesc(); - for (int i = 0; i < rrDesc.length; i ++) { - if ((rrDesc[i].getType() == javax.jms.Topic.class ) - ||(rrDesc[i].getType() == javax.jms.Queue.class )) { - result.add(rrDesc[i].getJndiName()); - } - } - return result; - } - - /** - * @return Set The URL resources used by the bean - */ - public Set getAllURLs() { - Set result= new HashSet(); - IResourceRefDesc[] rrDesc = desc.getResourceRefDesc(); - for (int i = 0; i < rrDesc.length; i ++) { - if ("java.net.URL".equals(rrDesc[i].getTypeName())) { - result.add(rrDesc[i].getJndiName()); - } - } - return result; - } - - /** - * @return The current instance pool size - */ - public int getPoolSize(){ - return ejbToManage.getPoolSize(); - } - - /** - * @return min-pool-size value - */ - public int getMinPoolSize() { - return ejbToManage.getMinPoolSize(); - } - - /** - * @return max-cache-size value - */ - public int getMaxCacheSize() { - return ejbToManage.getMaxCacheSize(); - } - - /** - * @return nb of instances (current cache size) - */ - public int getCacheSize() { - return ejbToManage.getCacheSize(); - } - /** - * Reduce number of instances - */ - public void reduceCacheSize() { - ejbToManage.reduceCache(); - } - /** - * @return String the JFactory Class - */ - public String getEjbClass(){ - return desc.getEjbClass().getName(); - } - - /** - * @return String the displayName of the bean, or bean name if not defined. - */ - public String getDisplayName() { - if (desc.getDisplayName() != null) { - return desc.getDisplayName(); - } else { - return desc.getEjbName(); - } - } - - /** - * @return String the JNDI Name of the bean. - */ - public String getJndiName() { - return desc.getJndiName(); - } - - /** - * @return String the HomeClass of the bean. - */ - public String getHomeClass() { - if (desc.getHomeClass() != null) { - return desc.getHomeClass().getName(); - } else { - return null; - } - } - - /** - * @return String the RemoteClass of the bean. - */ - public String getRemoteClass() { - if (desc.getRemoteClass() != null) { - return desc.getRemoteClass().getName(); - } else { - return null; - } - } - - /** - * @return String the LocalHomeClass of the bean. - */ - public String getLocalHomeClass() { - if (desc.getLocalHomeClass() != null) { - return desc.getLocalHomeClass().getName(); - } else { - return null; - } - } - - /** - * @return String the LocalClass of the bean. - */ - public String getLocalClass() { - if (desc.getLocalClass() != null) { - return desc.getLocalClass().getName(); - } else { - return null; - } - } - - - /** - * Define a JMX {@link QueryExp} that browse the ResourceAdapter ObjectInstance - * properties attribute and find if it's a valid DataSource - * resource by checking the opresence of "dsClass" and "URL" properties. - * - * @author Guillaume Sauthier - */ - private class DataSourcePropertiesQueryExp extends QueryEval implements QueryExp { - - /** - * serialVersionUID. - */ - private static final long serialVersionUID = 4843312566830083622L; - - public boolean apply(ObjectName name) throws BadStringOperationException, BadBinaryOpValueExpException, - BadAttributeValueExpException, InvalidApplicationException { - - Properties properties = null; - try { - properties = (Properties) getMBeanServer().getAttribute(name, "properties"); - } catch (Exception e) { - // if something goes wrong, the matching cannot be performed - return false; - } - - // Check that the associated properties are DataSource properties - String dsClassValue = properties.getProperty("dsClass"); - String urlValue = properties.getProperty("URL"); - if (dsClassValue != null - && dsClassValue.length() != 0 - && urlValue != null - && urlValue.length() != 0) { - // This is a well configured JDBC ResourceAdapter - return true; - } - - return false; - } - - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJBModule.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJBModule.java deleted file mode 100644 index 9d3fc52c76..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EJBModule.java +++ /dev/null @@ -1,425 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -// JOnAS Management -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.management.Attribute; -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.ow2.jonas.lib.ejb21.JContainer; -import org.ow2.jonas.lib.management.javaee.J2EEModule; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.Log; - - -/** - * MBean class for EJBModule management - * - * @author Adriana Danes JSR 77 (J2EE Management Standard) - * @author S. Ali Tokmen, Malek Chahine: EJB statistics - */ -public class EJBModule extends J2EEModule { - - protected JContainer cont; - - // JSR 77 - private ArrayList ejbs = new ArrayList(); - - /** server logger. */ - private static Logger logger = Log.getLogger(Log.JONAS_EJB_PREFIX); - - // private attributes - String containerName = null; - String fileName = null; - /** - * J2EEApplication MBean OBJECT_NAME in ear case - */ - private String earON = null; - /** - * URL of the ear - */ - private URL earURL = null; - - /** - * We are in ear case or not ? - */ - private boolean inEarCase = false; - - /** - * MBean server. - */ - private MBeanServer mBeanServer; - - /** - * Object name. - */ - private ObjectName objectName; - - public EJBModule(final MBeanServer mBeanServer, final ObjectName objectName, final JContainer cont, final String fileName, final String containerName, final String j2eeAppName, final URL earUrl) { - - super(objectName.toString()); - //logger = Log.getLogger(Log.JONAS_SERVER_PREFIX); - this.mBeanServer = mBeanServer; - this.objectName = objectName; - this.cont = cont; - this.fileName = fileName; - this.containerName = containerName; - if (j2eeAppName != null && earUrl != null) { - ObjectName j2eeAppOn = J2eeObjectName.J2EEApplication(objectName.getDomain(), objectName - .getKeyProperty("J2EEServer"), j2eeAppName); - earON = j2eeAppOn.toString(); - this.earURL = earUrl; - inEarCase = true; - } - } - - public String[] getEjbs() { - return ((String[]) ejbs.toArray(new String[ejbs.size()])); - } - - public void addEjb(final String ejbObjectName) { - ejbs.add(ejbObjectName); - } - - public int getCurrentNumberOfEJB() { - return ejbs.size(); - } - - public int getCurrentNumberOfBMP() { - return cont.getEntityBMPNb(); - } - - public int getCurrentNumberOfCMP() { - return cont.getEntityCMPNb(); - } - - public int getCurrentNumberOfSBF() { - return cont.getStatefulSessionNb(); - } - - public int getCurrentNumberOfSBL() { - return cont.getStatelessSessionNb(); - } - - public int getCurrentNumberOfMDB() { - return cont.getMessageDrivenNb(); - } - - public String getContainerName() { - return containerName; - } - - public String getFileName() { - return fileName; - } - - public URL getUrl() { - //TODO: URL should be given instead of fileName in the constructor. - try { - return new File(fileName).toURI().toURL(); - } catch (MalformedURLException e) { - throw new RuntimeException("Cannot get URL for fileName '" + fileName + "'.", e); - } - } - - - public String getEarON() { - return earON; - } - - public URL getEarURL() { - return earURL; - } - - public boolean isInEarCase() { - return inEarCase; - } - /** - * get the total number of calls on all beans of this ejb container - * - * @return the total number of calls on all beans of this ejb container - */ - @SuppressWarnings("unchecked") - public long getNumberOfCalls() { - long numberOfCalls = 0; - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - numberOfCalls += ((Long) mBeanServer.getAttribute(on, "numberOfCalls")).intValue(); - } - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - numberOfCalls += ((Long) mBeanServer.getAttribute(on, "numberOfCalls")).intValue(); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'numberOfCalls'", e); - } - return numberOfCalls; - } - - /** - * get the total time spent in container + business execution for all beans - * of this ejb container - * - * @return the total time spent in container + business execution for all - * beans of this ejb container - */ - @SuppressWarnings("unchecked") - public long getTotalProcessingTime() { - long totalProcessingTime = 0; - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - totalProcessingTime += ((Long) mBeanServer.getAttribute(on, "totalProcessingTime")).longValue(); - } - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - totalProcessingTime += ((Long) mBeanServer.getAttribute(on, "totalProcessingTime")).longValue(); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'totalProcessingTime'", e); - } - return totalProcessingTime; - } - - /** - * get the total time spent in business execution for all beans of this ejb - * container - * - * @return the total time spent in business execution for all beans of this - * ejb container - */ - @SuppressWarnings("unchecked") - public long getTotalBusinessProcessingTime() { - long totalBusinessProcessingTime = 0; - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - totalBusinessProcessingTime += ((Long) mBeanServer.getAttribute(on, "totalBusinessProcessingTime")) - .longValue(); - } - - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - totalBusinessProcessingTime += ((Long) mBeanServer.getAttribute(on, "totalBusinessProcessingTime")) - .longValue(); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'totalBusinessProcessingTime'", e); - } - return totalBusinessProcessingTime; - } - - /** - * get the average time spent in container + business execution for all - * beans of this ejb container per request - * - * @return the average time spent in container + business execution for all - * beans of this ejb container per request - */ - public long getAverageProcessingTime() { - if (getNumberOfCalls() > 0) { - return getTotalProcessingTime() / getNumberOfCalls(); - } else { - return 0; - } - } - - /** - * get the average time spent in business execution for all beans of this - * ejb container per request - * - * @return the average time spent in business execution for all beans of - * this ejb container per request - */ - public long getAverageBusinessProcessingTime() { - if (getNumberOfCalls() > 0) { - return getTotalBusinessProcessingTime() / getNumberOfCalls(); - } else { - return 0; - } - } - - /** - * @return Will EJB monitoring enabled for EJBs deployed in the future? - */ - @SuppressWarnings("unchecked") - public boolean getMonitoringEnabled() { - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - if (!((Boolean) mBeanServer.getAttribute(on, "monitoringEnabled")).booleanValue()) { - return false; - } - - } - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - if (!((Boolean) mBeanServer.getAttribute(on, "monitoringEnabled")).booleanValue()) { - return false; - } - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'monitoringEnabled'", e); - } - return true; - } - - /** - * @param monitoringEnabled - * Whether EJB monitoring will enabled for EJBs deployed in the - * future. - */ - @SuppressWarnings("unchecked") - public void setMonitoringEnabled(final boolean monitoringEnabled) { - - Attribute monitoringEnabledAttribute = new Attribute("monitoringEnabled", new Boolean(monitoringEnabled)); - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - mBeanServer.setAttribute(on, monitoringEnabledAttribute); - } - - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - mBeanServer.setAttribute(on, monitoringEnabledAttribute); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed setting attribute 'monitoringEnabled'", e); - } - } - - /** - * @return Number of milliseconds after which methods of EJBs deployed in - * the future will start warning. - */ - @SuppressWarnings("unchecked") - public int getWarningThreshold() { - // -1 means "inconsistent values" - int warningThreshold = -1; - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - int currentWarningThreshold = ((Integer) mBeanServer.getAttribute(on, "warningThreshold")).intValue(); - if (warningThreshold == -1) { - warningThreshold = currentWarningThreshold; - } else if (warningThreshold != currentWarningThreshold) { - return -1; - } - } - - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - int currentWarningThreshold = ((Integer) mBeanServer.getAttribute(on, "warningThreshold")).intValue(); - if (warningThreshold == -1) { - warningThreshold = currentWarningThreshold; - } else if (warningThreshold != currentWarningThreshold) { - return -1; - } - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed getting attribute 'warningThreshold'", e); - } - return warningThreshold; - } - - /** - * @param warningThreshold - * Number of milliseconds after which methods of EJBs deployed in - * the future will start warning. - */ - @SuppressWarnings("unchecked") - public void setWarningThreshold(final int warningThreshold) { - - Attribute warningThresholdAttribute = new Attribute("warningThreshold", new Integer(warningThreshold)); - try { - Iterator statefulBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatefulSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statefulBeans.hasNext()) { - ObjectName on = statefulBeans.next(); - mBeanServer.setAttribute(on, warningThresholdAttribute); - } - - Iterator statelessBeans = mBeanServer.queryNames( - new ObjectName(this.objectName.getDomain() + ":j2eeType=StatelessSessionBean,EJBModule=" - + containerName + ",*"), null).iterator(); - while (statelessBeans.hasNext()) { - ObjectName on = statelessBeans.next(); - mBeanServer.setAttribute(on, warningThresholdAttribute); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Failed setting attribute 'warningThreshold'", e); - } - } - -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EntityBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EntityBean.java deleted file mode 100644 index 5f9fc3d935..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/EntityBean.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import org.ow2.jonas.deployment.ejb.EntityDesc; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.EntityCounters; -import org.ow2.jonas.lib.ejb21.JEntityFactory; - - -/** - * This class implements the EntityBean type specified in JSR77 - * @author Adriana Danes - * - */ -public class EntityBean extends EJB { - - private String persistency; - - public EntityBean(String objectName, JEntityFactory factoryToManage, String persistency, JmxService jmx) { - super(objectName, factoryToManage, jmx); - this.persistency = persistency; - } - - /** - * get persistency type - */ - public String getPersistency() { - return persistency; - } - - /** - * get passivation time out - * @return passivation timeout in seconds - */ - public int getPassivationTimeOut() { - return ((JEntityFactory) ejbToManage).getPassivationTimeout(); - } - - /** - * set passivation time out - * @param timeOut passivation timeout in seconds - */ - public void setPassivationTimeOut(int timeOut) { - ((JEntityFactory) ejbToManage).setPassivationTimeout(timeOut); - } - - /** - * get inactivity time out - * @return inactivity timeout in seconds - */ - public int getInactivityTimeOut() { - return ((JEntityFactory) ejbToManage).getInactivityTimeout(); - } - - /** - * get deadlock time out - * @return deadlock timeout in seconds - */ - public int getDeadlockTimeOut() { - return ((JEntityFactory) ejbToManage).getDeadlockTimeout(); - } - - /** - * get read time out - * @return read timeout in seconds - */ - public int getReadTimeOut() { - return ((JEntityFactory) ejbToManage).getReadTimeout(); - } - - /** - * @return true if bean is shared - */ - public boolean getShared() { - return ((JEntityFactory) ejbToManage).isShared(); - } - - /** - * @return true if bean has hard limit - */ - public boolean getHardLimit() { - return ((JEntityFactory) ejbToManage).isHardLimit(); - } - - /** - * @return min-pool-size value - */ - public int getMinPoolSize() { - return ((JEntityFactory) ejbToManage).getMinPoolSize(); - } - - /** - * @return max-cache-size value - */ - public int getMaxCacheSize() { - return ((JEntityFactory) ejbToManage).getMaxCacheSize(); - } - - /** - * @return pool-size value - */ - public int getPoolSize() { - return ((JEntityFactory) ejbToManage).getPoolSize(); - } - - /** - * @return current number of waiters for a bean instance - */ - public int getCurrentWaiters() { - return ((JEntityFactory) ejbToManage).getCurrentWaiters(); - } - - /** - * @return EJB Container lock policy - */ - public String getLockPolicy() { - int lockPolicy = ((JEntityFactory) ejbToManage).getLockPolicy(); - String sLockPolicy = null; - switch (lockPolicy) { - case EntityDesc.LOCK_CONTAINER_READ_UNCOMMITTED: - sLockPolicy = "container-read-uncommitted"; - break; - case EntityDesc.LOCK_CONTAINER_SERIALIZED: - sLockPolicy = "container-serialized"; - break; - case EntityDesc.LOCK_CONTAINER_SERIALIZED_TRANSACTED: - sLockPolicy = "container-serialized-transacted"; - break; - case EntityDesc.LOCK_CONTAINER_READ_COMMITTED: - sLockPolicy = "container-read-committed"; - break; - case EntityDesc.LOCK_DATABASE: - sLockPolicy = "database"; - break; - case EntityDesc.LOCK_READ_ONLY: - sLockPolicy = "read-only"; - break; - case EntityDesc.LOCK_CONTAINER_READ_WRITE: - sLockPolicy = "container-read-write"; - break; - } - return sLockPolicy; - } - - public boolean getPrefetch() { - return ((JEntityFactory) ejbToManage).isPrefetch(); - } - /** - * @return Cache Size value - */ - public int getCacheSize() { - return ((JEntityFactory) ejbToManage).getCacheSize(); - } - - /** - * Instance Counters (inTx, outTx, idle, passive, removed) - * @return table of int values for Entity counters - */ - public Integer[] getEntityCounters() { - EntityCounters ec = ((JEntityFactory) ejbToManage).getEntityCounters(); - Integer[] result = new Integer[6]; - result[0] = new Integer(ec.inTx); - result[1] = new Integer(ec.outTx); - result[2] = new Integer(ec.idle); - result[3] = new Integer(ec.passive); - result[4] = new Integer(ec.removed); - result[5] = new Integer(ec.pk); - return result; - } - - /** - * Synchronize bean state for all its instances outside transactions - */ - public void synchronize() { - ((JEntityFactory) ejbToManage).syncDirty(true); - } - - /** - * Reduce number of instances in memory - */ - public void reduceCache() { - ((JEntityFactory) ejbToManage).reduceCache(); - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/MessageDrivenBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/MessageDrivenBean.java deleted file mode 100644 index 8c4ab2ade4..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/MessageDrivenBean.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import java.util.Set; - -import org.ow2.jonas.deployment.ejb.MessageDrivenDesc; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.JFactory; - - -/** - * This class implements the MessageDrivenBean type specified in JSR77 - * @author Adriana Danes - * - */ -public class MessageDrivenBean extends EJB { - - /** - * @param objectName JMX object name - * @param factoryToManage JFactory factory to manage - */ - public MessageDrivenBean(String objectName, JFactory factoryToManage, JmxService jmx) { - super(objectName, factoryToManage, jmx); - } - - /** - * @return the name of the associate destination - */ - public String getMdbJMSAssociateDestinationName() { - return ((MessageDrivenDesc)ejbToManage.getDeploymentDescriptor()).getDestinationJndiName(); - } - - /** - * return all the destination used by this ejb, including his associate destination - * @return String set with the name of the Ejb Destinations - */ - public Set getAllJMSDestinationName() { - // call the super method - Set result = super.getAllJMSDestinationName(); - result.add(getMdbJMSAssociateDestinationName()); - return result; - } - - /** - * Reduce number of instances in memory - */ - public void reduceCache() { - ((JFactory) ejbToManage).reduceCache(); - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/SessionBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/SessionBean.java deleted file mode 100644 index 0ef52386c9..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/SessionBean.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.JSessionFactory; - -/** - * This class implements the SessionBean type specified in JSR77 - * @author Adriana Danes - * - */ -public class SessionBean extends EJB { - - /** - * @param objectName JMX object name - * @param factoryToManage JSessionFactory factory to manage - */ - public SessionBean(final String objectName, final JSessionFactory factoryToManage, final JmxService jmx) { - super(objectName, factoryToManage, jmx); - } - - /** - * get the session time out for this session ejb - * @return integer session time out - */ - public int getSessionTimeOut() { - return ((JSessionFactory) ejbToManage).getTimeout(); - } - - /** - * set the session time out for this session bean - * @param timeOut new session time out - */ - public void setSessionTimeOut(final int timeOut) { - ((JSessionFactory) ejbToManage).setTimeout(timeOut); - } - /** - * @return true if EJB monitoring settings have been defined in the - * deployment descriptor - */ - public boolean getMonitoringSettingsDefinedInDD() { - return ((JSessionFactory) ejbToManage).getMonitoringSettingsDefinedInDD(); - } - - /** - * @return true if ejb monitoring active - */ - public boolean getMonitoringEnabled() { - return ((JSessionFactory) ejbToManage).getMonitoringEnabled(); - } - - /** - * @param monitoringEnabled whether ejb monitoring will be active - */ - public void setMonitoringEnabled(final boolean monitoringEnabled) { - ((JSessionFactory) ejbToManage).setMonitoringEnabled(monitoringEnabled); - } - - /** - * @return the method time threshold (in ms) - */ - public int getWarningThreshold() { - return ((JSessionFactory) ejbToManage).getWarningThreshold(); - } - - /** - * @param warningThreshold new method time threshold (in ms) - */ - public void setWarningThreshold(final int warningThreshold) { - ((JSessionFactory) ejbToManage).setWarningThreshold(warningThreshold); - } - - /** - * @return the total number of calls on this ejb - */ - public long getNumberOfCalls() { - return ((JSessionFactory) ejbToManage).getNumberOfCalls(); - } - - /** - * @return the total time spent in business execution - */ - public long getTotalBusinessProcessingTime() { - return ((JSessionFactory) ejbToManage).getTotalBusinessProcessingTime(); - } - - /** - * @return the total time spent in container + business execution - */ - public long getTotalProcessingTime() { - return ((JSessionFactory) ejbToManage).getTotalProcessingTime(); - } - - /** - * @return the average time per request spent in business execution - */ - public long getAverageBusinessProcessingTime() { - long numberOfCalls = getNumberOfCalls(); - if (numberOfCalls > 0) { - return getTotalBusinessProcessingTime() / numberOfCalls; - } else { - return 0; - } - } - - /** - * @return the average total time per request spent in container + business - * execution - */ - public long getAverageProcessingTime() { - long numberOfCalls = getNumberOfCalls(); - if (numberOfCalls > 0) { - return getTotalProcessingTime() / numberOfCalls; - } else { - return 0; - } - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatefulSessionBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatefulSessionBean.java deleted file mode 100644 index 402ef1075d..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatefulSessionBean.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.JSessionFactory; - -/** - * This class implements the StatefulSessionBean type specified in JSR77 - * @author Adriana Danes - * - */ -public class StatefulSessionBean extends SessionBean { - - /** - * @param objectName JMX object name - * @param factoryToManage JSessionFactory factory to manage - */ - public StatefulSessionBean(String objectName, JSessionFactory factoryToManage, JmxService jmx) { - super(objectName, factoryToManage, jmx); - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatelessSessionBean.java b/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatelessSessionBean.java deleted file mode 100644 index f98f91695a..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/java/org/ow2/jonas/ejb2/internal/mbean/StatelessSessionBean.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb2.internal.mbean; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; - -/** - * This class implements the StatelessSessionBean type specified in JSR77 - * @author Adriana Danes - * - */ -public class StatelessSessionBean extends SessionBean { - /** - * @param objectName JMX object name - * @param factoryToManage JStatelessFactory factory to manage - */ - public StatelessSessionBean(String objectName, JStatelessFactory factoryToManage, JmxService jmx) { - super(objectName, factoryToManage, jmx); - } - - /** - * Reduce number of instances in memory - */ - public void reduceCache() { - ((JStatelessFactory) ejbToManage).reduceCache(); - } -} diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen b/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen deleted file mode 100644 index c9bc686a35..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" - -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/jonas-generators-clientstubs.jar$SPS$JONAS_ROOT/lib/client.jar - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.genclientstub.ClientStubGen "$@" diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen.bat b/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen.bat deleted file mode 100755 index 30e27fb92f..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/ClientStubGen.bat +++ /dev/null @@ -1,50 +0,0 @@ -@ECHO OFF -REM --------------------------------------------------------------------------- -REM JOnAS: Java(TM) Open Application Server -REM Copyright (C) 1999-2008 Bull S.A.S. -REM Contact: jonas-team@ow2.org -REM -REM This library is free software; you can redistribute it and/or -REM modify it under the terms of the GNU Lesser General Public -REM License as published by the Free Software Foundation; either -REM version 2.1 of the License, or any later version. -REM -REM This library is distributed in the hope that it will be useful, -REM but WITHOUT ANY WARRANTY; without even the implied warranty of -REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -REM Lesser General Public License for more details. -REM -REM You should have received a copy of the GNU Lesser General Public -REM License along with this library; if not, write to the Free Software -REM Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -REM USA -REM -REM Initial developer(s): Guillaume Sauthier -REM -REM --------------------------------------------------------------------------- -REM $Id$ -REM --------------------------------------------------------------------------- - -SET JONAS_LIB=%JONAS_ROOT%\lib - -if ["%JONAS_ROOT%"]==[""] Goto RootIsNotSetError - -CALL "%JONAS_ROOT%\bin\setenv.bat" -ECHO JONAS_BASE is set to %JONAS_BASE% - -SET JONAS_OPTS=-Djonas.root="%JONAS_ROOT%" -SET JONAS_OPTS=%JONAS_OPTS% -Djonas.base="%JONAS_BASE%" -SET JONAS_OPTS=%JONAS_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -SET JONAS_OPTS=%JONAS_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -REM add ow_jonas_bootstrap.jar to the classpath for the bootstrap class -SET JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_ROOT%\lib\jonas-generators-clientstubs.jar;%JONAS_ROOT%\lib\client.jar - -%JAVA% -cp "%JONAS_CLASSPATH%" %JONAS_OPTS% org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.genclientstub.ClientStubGen %* -GOTO End - -:RootIsNotSetError -ECHO "JONAS_ROOT must be set" -GOTO End - -:End diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC b/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC deleted file mode 100644 index 7facbef5bb..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" - -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/client.jar - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.genic.GenIC "$@" diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC.bat b/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC.bat deleted file mode 100755 index dca4926345..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/jonas-resources/bin/GenIC.bat +++ /dev/null @@ -1,51 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -call "%JONAS_ROOT%\bin\setenv.bat" -echo JONAS_BASE is set to %JONAS_BASE% - -rem Check environment variables: -if ["%JONAS_ROOT%"]==[""] goto setRoot - -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_ROOT%\lib\client.jar - -:set_opts -set JONAS_OPTS=-Djonas.root="%JONAS_ROOT%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.base="%JONAS_BASE%" -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -set JONAS_OPTS=%JONAS_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -%JAVA% -cp "%JONAS_CLASSPATH%" %JONAS_OPTS% org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.genic.GenIC %* -goto end - -:setRoot -@echo "JONAS_ROOT must be set" -goto end - -:end - diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/META-INF/jonas-ejb-2.1-core.bnd b/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/META-INF/jonas-ejb-2.1-core.bnd deleted file mode 100644 index 3baa0a0ed7..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/META-INF/jonas-ejb-2.1-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.ejb2.internal.* - -DynamicImport-Package org.ow2.util.ee.event.types - -Require-JOnAS-Services wm diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/metadata.xml b/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/metadata.xml deleted file mode 100644 index ab68f50182..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/org/ow2/jonas/ejb2/internal/mbeans-descriptors.xml b/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/org/ow2/jonas/ejb2/internal/mbeans-descriptors.xml deleted file mode 100644 index e70568d1ad..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/resources/org/ow2/jonas/ejb2/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb-2.1/core/src/main/templates/jonas-ejb2.properties.template b/jonas/modules/services/ejb/ejb-2.1/core/src/main/templates/jonas-ejb2.properties.template deleted file mode 100644 index 863dfaa072..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/core/src/main/templates/jonas-ejb2.properties.template +++ /dev/null @@ -1,30 +0,0 @@ -# -###################### JOnAS EJB 2 Container service configuration -# -jonas.services ejb2 -# Set the name of the implementation class of the ejb2 service -jonas.service.ejb2.class org.ow2.jonas.ejb2.internal.JOnASEJBService - -# Set the XML deployment descriptors parsing mode (with or without validation) -jonas.service.ejb2.parsingwithvalidation true - -# If enabled, the GenIC tool will be called if : -# - JOnAS version of the ejb-jar is not the same version than the running JOnAS instance -# - Stubs/Skels stored in the ejb-jar are not the same than the JOnAS current protocols. -# By default, this is enabled -jonas.service.ejb2.auto-genic true - -# Arguments for the auto GenIC (-invokecmd, -verbose, etc.) -jonas.service.ejb2.auto-genic.args -invokecmd - - -# Note: these two settings can be overriden by the EJB descriptor. -# -# If EJB monitoring is enabled, statistics about method call times will be -# collected. This is a very lightweight measurement and should not have much -# impact on performance. -jonas.service.ejb2.monitoringEnabled true -# If EJB monitoring is enabled, this value indicates after how many -# milliseconds spent executing an EJB method a warning message should be -# displayed. If 0, no warning will ever be displayed. -jonas.service.ejb2.warningThreshold 20000 diff --git a/jonas/modules/services/ejb/ejb-2.1/pom.xml b/jonas/modules/services/ejb/ejb-2.1/pom.xml deleted file mode 100644 index 2bffb46610..0000000000 --- a/jonas/modules/services/ejb/ejb-2.1/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-ejb - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ejb-2.1 - pom - JOnAS :: Services :: EJB :: EJB 2.1 - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/base/pom.xml b/jonas/modules/services/ejb/ejb3/ant/base/pom.xml deleted file mode 100644 index 9bb66c14f7..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/base/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-base-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: Base - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/ejb3/Ejb3.java b/jonas/modules/services/ejb/ejb3/ant/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/ejb3/Ejb3.java deleted file mode 100644 index 1ec7b37a83..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/ejb3/Ejb3.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.ejb3; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -import java.io.File; - -/** - * Allow to configure EJB3 service - * @author Jeremy Cazaux - */ -public class Ejb3 extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - protected static final String INFO = "[EJB3] "; - - /** - * EJB3 JPA provider property. - */ - private static final String EJB3_JPA_PROVIDER_PROPERTY = "jonas.service.ejb3.jpa.provider"; - - /** - * EJB3 JPA provider. - */ - private String ejb3JpaProvider; - - /** - * Sets the EJB3 JPA provider. - * @param ejb3JpaProvider the JPA provider - */ - public void setEjb3JpaProvider(final String ejb3JpaProvider) { - this.ejb3JpaProvider = ejb3JpaProvider; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - super.execute(); - - // Path to JONAS_BASE - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - log("jBaseConf:"+jBaseConf); - JTask jtask = new JTask(); - jtask.setDestDir(destDir); - - /*if (this.services != null && (!this.services.startsWith("${") && !this.services.endsWith("}"))) { - jtask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - SERVICES_PROPERTY, services, false); - }*/ - - jtask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - EJB3_JPA_PROVIDER_PROPERTY, ejb3JpaProvider, false); - - tasks.add(jtask); - executeAllTask(); - } -} - diff --git a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/antlib-ejb3.xml b/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/antlib-ejb3.xml deleted file mode 100644 index 71a1d7c9ca..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/antlib-ejb3.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.properties.template b/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.properties.template deleted file mode 100644 index 358281a0a9..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.properties.template +++ /dev/null @@ -1,3 +0,0 @@ -#EJB3 -ejb3.implementation.default=easybeans -%ejb3.jpa.provider.default% \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.xml b/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.xml deleted file mode 100644 index 4e1714caf5..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/base/src/main/resources/build-ejb3.xml +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/pom.xml b/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/pom.xml deleted file mode 100644 index e77324a778..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-eclipselink-1.1-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: EclipseLink1.1 - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/src/main/resources/build-ejb3-provider-eclipselink1.1.properties b/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/src/main/resources/build-ejb3-provider-eclipselink1.1.properties deleted file mode 100644 index b25d53385d..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-1.1/src/main/resources/build-ejb3-provider-eclipselink1.1.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=eclipselink1.1 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/pom.xml b/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/pom.xml deleted file mode 100644 index 80fd7b4dcb..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-eclipselink-2.2-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: EclipseLink2.2 - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/src/main/resources/build-ejb3-provider-eclipselink2.2.properties b/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/src/main/resources/build-ejb3-provider-eclipselink2.2.properties deleted file mode 100644 index ec50c28347..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.2/src/main/resources/build-ejb3-provider-eclipselink2.2.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=eclipselink2.2 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/pom.xml b/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/pom.xml deleted file mode 100644 index 6cf02ec39a..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/pom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-eclipselink-2.3-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: EclipseLink2.3 - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/src/main/resources/build-ejb3-provider-eclipselink2.3.properties b/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/src/main/resources/build-ejb3-provider-eclipselink2.3.properties deleted file mode 100644 index 2292c2df1e..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/eclipselink-2.3/src/main/resources/build-ejb3-provider-eclipselink2.3.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=eclipselink2.3 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/pom.xml b/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/pom.xml deleted file mode 100644 index c60b29cde8..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-hibernate-3.6-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: Hibernate3.6 - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/src/main/resources/build-ejb3-provider-hibernate3.6.properties b/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/src/main/resources/build-ejb3-provider-hibernate3.6.properties deleted file mode 100644 index eaf2e29947..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/hibernate-3.6/src/main/resources/build-ejb3-provider-hibernate3.6.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=hibernate3.6 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/pom.xml b/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/pom.xml deleted file mode 100644 index 96306072cf..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-hibernate-4.1-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: Hibernate4.1 - - diff --git a/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/src/main/resources/build-ejb3-provider-hibernate4.1.properties b/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/src/main/resources/build-ejb3-provider-hibernate4.1.properties deleted file mode 100644 index ce04f17eaa..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/hibernate-4.1/src/main/resources/build-ejb3-provider-hibernate4.1.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=hibernate4.1 diff --git a/jonas/modules/services/ejb/ejb3/ant/openjpa/pom.xml b/jonas/modules/services/ejb/ejb3/ant/openjpa/pom.xml deleted file mode 100644 index 14dd77d3ff..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/openjpa/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-openjpa-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: Openjpa - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/openjpa/src/main/resources/build-ejb3-provider-openjpa.properties b/jonas/modules/services/ejb/ejb3/ant/openjpa/src/main/resources/build-ejb3-provider-openjpa.properties deleted file mode 100644 index b0dba88010..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/openjpa/src/main/resources/build-ejb3-provider-openjpa.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default==openjpa \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/openjpa2/pom.xml b/jonas/modules/services/ejb/ejb3/ant/openjpa2/pom.xml deleted file mode 100644 index 70e20f31f5..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/openjpa2/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - jonas-ejb3-ant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-provider-openjpa2-ant - JOnAS :: Services :: EJB :: EJB3 :: Ant :: Openjpa2 - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/openjpa2/src/main/resources/build-ejb3-provider-openjpa2.properties b/jonas/modules/services/ejb/ejb3/ant/openjpa2/src/main/resources/build-ejb3-provider-openjpa2.properties deleted file mode 100644 index 8f93c06bef..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/openjpa2/src/main/resources/build-ejb3-provider-openjpa2.properties +++ /dev/null @@ -1 +0,0 @@ -ejb3.jpa.provider.default=openjpa2 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/ant/pom.xml b/jonas/modules/services/ejb/ejb3/ant/pom.xml deleted file mode 100644 index ad13c4b06e..0000000000 --- a/jonas/modules/services/ejb/ejb3/ant/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - jonas-ejb3 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb3-ant - pom - JOnAS :: Services :: EJB :: EJB3 :: Ant - - hibernate-3.6 - hibernate-4.1 - eclipselink-1.1 - eclipselink-2.2 - eclipselink-2.3 - openjpa2 - openjpa - base - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/addon/pom.xml b/jonas/modules/services/ejb/ejb3/easybeans/addon/pom.xml deleted file mode 100644 index 746d6f6541..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/addon/pom.xml +++ /dev/null @@ -1,207 +0,0 @@ - - - - jonas-ejb-easybeans - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - pom - JOnAS :: Services :: EJB :: EJB3 :: EasyBeans :: Addon - jonas-ejb-easybeans-addon - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - ejb3-addon-deployment-plan - - - org.apache.felix - org.apache.felix.dependencymanager - ${felix.dependencymanager.version} - - - org.ow2.bundles - ow2-util-marshalling - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-jmx-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-stream - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-pool-impl - ${ow2-bundles.version} - - - org.ow2.easybeans.osgi - easybeans-component-quartz - ${easybeans.version} - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - - - org.ow2.jonas - jonas-ejb-easybeans-core - ${project.version} - - - - - org.ow2.easybeans.persistence - easybeans-persistence-eclipselink-2.3.x - ${easybeans-persistence-eclipselink23.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - addon-deployment-plan - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-ejb-easybeans-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - ../core/src/main/jonas-resources/conf/ - true - - easybeans-jonas.xml - - - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/ejb3-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/assembly/assembly.xml b/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/assembly/assembly.xml deleted file mode 100644 index 61af2b2828..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - ejb3-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/configuration-resources/addon-deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - - target/extra-resources - conf/ - - easybeans-jonas.xml - - 774 - - - - \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 1ef2097b75..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - ejb3 - - - EJB Service for EasyBeans Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.ejb3 - - - - - - org.ow2.jonas.ejb.easybeans.EasyBeansService - - false - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/pom.xml b/jonas/modules/services/ejb/ejb3/easybeans/core/pom.xml deleted file mode 100644 index bf593788e8..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/pom.xml +++ /dev/null @@ -1,204 +0,0 @@ - - - - - jonas-ejb-easybeans - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-ejb-easybeans-core - bundle - JOnAS :: Services :: EJB :: EJB3 :: EasyBeans :: Core - EJB Service for EasyBeans - - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - - - - org.ow2.jonas - jonas-naming - ${project.version} - - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - - - - org.ow2.jonas - jonas-security-propagation - ${project.version} - - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - ejb3-deployment-plan - - - org.ow2.easybeans.osgi - easybeans-component-quartz - ${easybeans.version} - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - - - org.ow2.jonas - jonas-ejb-easybeans-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - easybeans-config - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EJB3CleanTask.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EJB3CleanTask.java deleted file mode 100644 index da3cb6a5f4..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EJB3CleanTask.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS EB3 unused directory clean task class. This class provides a way for - * removing directories which are inconsistent directories for jar files. - * @author Francois Fornaciari - */ -public class EJB3CleanTask extends AbsCleanTask { - - /** - * {@link IDeployerLog} of the task. - */ - private IDeployerLog deployerLog = null; - - /** - * {@link IEasyBeansService} reference. - */ - private IEasyBeansService easyBeansService; - - /** - * Construct a new EAR clean task. - * @param easyBeansService IEasyBeansService reference - * @param deployerLog DeployerLog of the task - */ - public EJB3CleanTask(final IEasyBeansService easyBeansService, final IDeployerLog deployerLog) { - this.easyBeansService = easyBeansService; - this.deployerLog = deployerLog; - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException If the method fails - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - // Check if the EJB3 file is deployed - return easyBeansService.isEJB3DeployedByWorkName(logEntry.getCopy().getName()); - } - - /** - * {@inheritDoc} - * @see org.ow2.jonas.lib.work.AbsCleanTask#getDeployerLog() - */ - @Override - public IDeployerLog getDeployerLog() { - return deployerLog; - } -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansDeployer.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansDeployer.java deleted file mode 100644 index 311579ab96..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansDeployer.java +++ /dev/null @@ -1,404 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.EZBContainerException; -import org.ow2.easybeans.api.naming.EZBNamingStrategy; -import org.ow2.easybeans.deployment.EasyBeansDeployableInfo; -import org.ow2.easybeans.deployment.api.EZBDeployableInfo; -import org.ow2.easybeans.loader.EasyBeansClassLoader; -import org.ow2.easybeans.resolver.api.EZBApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBContainerJNDIResolver; -import org.ow2.easybeans.server.Embedded; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.ee.deploy.api.deployable.EJB3Deployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * This deployer will deploy EJB3 on EasyBeans. - * @author Florent BENOIT Contributors: S. Ali Tokmen (versioning) - */ -public class EasyBeansDeployer extends AbsDeployer { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(EasyBeansDeployer.class); - - /** - * Link to the Embedded instance of EasyBeans. - */ - private Embedded easybeansServer = null; - - /** - * Application Classloader. - */ - private ClassLoader appsClassLoader; - - /** - * List of deployed ejb3. - */ - private Map ejb3s = null; - - /** - * Server properties. - */ - private ServerProperties serverProperties = null; - - /** - * Versioning service. - */ - private VersioningService versioningService; - - /** - * Reference to the {@link DeployerLog} of the EAR service. - */ - private DeployerLog deployerLog; - - /** - * EJB3 work directory. - */ - private String workDirectory = null; - - /** - * Build a new instance of the EasyBeans deployer. - */ - public EasyBeansDeployer() { - this.ejb3s = new HashMap(); - } - - - - /** - * Deploy the given deployable. - * @param deployable the EJB3 deployable. - * @throws DeployerException if the EJB3 is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - EJB3Deployable unpackedDeployable = null; - - URL initialURL = null; - File initialFile = null; - - - EZBDeployableInfo deployableInfo = (EZBDeployableInfo) deployable.getExtension(EasyBeansDeployableInfo.class); - boolean unpack = true; - ClassLoader ejb3ClassLoader = null; - - EZBApplicationJNDIResolver applicationJNDIResolver = null; - if (deployableInfo != null) { - if (deployableInfo.hasToBeUnpacked() != null) { - unpack = deployableInfo.hasToBeUnpacked().booleanValue(); - } - ejb3ClassLoader = deployableInfo.getClassLoader(); - applicationJNDIResolver = deployableInfo.getApplicationJNDIResolver(); - } - - // Unpack or not ? - if (unpack) { - // Unpack EJB3 Deployable before deploying it to avoid file lock (specially on Windows platform) - File folder = new File(workDirectory, getServerProperties().getServerName()); - - folder.mkdirs(); - try { - initialURL = deployable.getArchive().getURL(); - initialFile = URLUtils.urlToFile(initialURL); - unpackedDeployable = UnpackDeployableHelper.unpack(EJB3Deployable.class.cast(deployable), - folder, - FileUtils.lastModifiedFileName(initialFile)); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get archive while deploying EJB3Deployable", e); - } catch (FileUtilsException e) { - throw new DeployerException("Cannot get file last modified date while deploying EJB3Deployable", e); - } - - try { - // The file is unpacked, so log it - if (deployerLog != null) { - File unpackedFile = URLUtils.urlToFile(unpackedDeployable.getArchive().getURL()); - deployerLog.addEntry(initialFile, unpackedFile); - } - } catch (Exception e) { - throw new DeployerException("Cannot get the url of the initial deployable for the EJB3 Module '" + deployable - + "'.", e); - } - } else { - unpackedDeployable = (EJB3Deployable) deployable; - } - - logger.info("Deploying ''{0}''...", deployable.getShortName()); - EZBContainer container = easybeansServer.createContainer(unpackedDeployable); - - String prefix = null; - if (versioningService != null && versioningService.isVersioningEnabled()) { - prefix = versioningService.getPrefix(deployable); - } - - if (prefix != null) { - // Search naming strategies - List namingStrategies = container.getConfiguration().getNamingStrategies(); - logger.info("Naming Strategies = ''{0}''", namingStrategies); - - // Wrap all Naming strategies - List newNamingStrategies = new ArrayList(); - for (EZBNamingStrategy oldNamingStrategy : namingStrategies) { - newNamingStrategies.add(new PrefixedNamingStrategy(prefix, oldNamingStrategy)); - } - container.getConfiguration().setNamingStrategies(newNamingStrategies); - } - URL[] arrayURLs = {getURL(unpackedDeployable)}; - - if (ejb3ClassLoader == null) { - - // Filtering classloader - FilteringClassLoader filteringClassLoader = createFilteringClassLoader(deployable); - - // Child of the appClassLoader - ejb3ClassLoader = new EasyBeansClassLoader(arrayURLs, filteringClassLoader); - } - - // Set the classloader that needs to be used - container.setClassLoader(ejb3ClassLoader); - - if (applicationJNDIResolver != null) { - EZBContainerJNDIResolver containerJNDIResolver = container.getConfiguration().getContainerJNDIResolver(); - containerJNDIResolver.setApplicationJNDIResolver(applicationJNDIResolver); - // Add child on application JNDI Resolver - applicationJNDIResolver.addContainerJNDIResolver(containerJNDIResolver); - } - - - try { - container.start(); - } catch (EZBContainerException e) { - easybeansServer.removeContainer(container); - throw new DeployerException("Cannot deploy the given EJB '" + deployable + "'.", e); - } - - // Keep the link original deployable -> unpacked deployable for undeployment - ejb3s.put(initialURL, unpackedDeployable); - - if (prefix != null) { - versioningService.createJNDIBindingMBeans(deployable); - } - - logger.info("''{0}'' EJB3 Deployable is now deployed", deployable.getShortName()); - } - - /** - * Creates a {@code FilteringClassLoader} for this EjbJar. - * @param deployable the EjbJar {@code Deployable} File - * @return a Filtering ClassLoader configured from {@code META-INF/classloader-filtering.xml} (if any). - */ - private FilteringClassLoader createFilteringClassLoader(final IDeployable deployable) { - FilteringClassLoader filteringClassLoader = new FilteringClassLoader(appsClassLoader); - // Add any module filtering definition we may find - IArchive archive = deployable.getArchive(); - try { - String name = "META-INF/" + FilteringClassLoader.CLASSLOADER_FILTERING_FILE; - URL resource = archive.getResource(name); - if (resource != null) { - filteringClassLoader.setDefinitionUrl(resource); - } - } catch (ArchiveException ae) { - // Can be safely ignored - logger.debug("Cannot get classloader-filtering.xml file from the EJB3 archive {0}.", archive, ae); - } finally { - archive.close(); - } - - filteringClassLoader.start(); - return filteringClassLoader; - } - - /** - * Undeploy the given EJB3. - * @param deployable the deployable to remove. - * @throws DeployerException if the EJB3 is not deployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - // Get initialURL EJB3 URL - URL initialURL = null; - try { - initialURL = deployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL of the EJB3 deployable '" + deployable + "'.", e); - } - - IArchive archive = null; - - // Try to retrieve the unpacked deployable - if (ejb3s.containsKey(initialURL)) { - // No unpacked deployable found, look for in the map of deployed EJB3 - archive = ejb3s.get(initialURL).getArchive(); - } else { - throw new DeployerException("Cannot get the URL of the unpacked EJB3 deployable '" + deployable + "'."); - } - - logger.info("Undeploying ''{0}''...", deployable.getShortName()); - Map containers = easybeansServer.getContainers(); - EZBContainer foundContainer = null; - - // Search a matching archive - for (EZBContainer container : containers.values()) { - IArchive containerArchive = container.getArchive(); - if (archive.equals(containerArchive)) { - foundContainer = container; - break; - } - } - - // Not found - if (foundContainer == null) { - throw new DeployerException("Cannot undeploy the deployable '" + deployable + "' as this container is not deployed"); - } else { - ejb3s.remove(initialURL); - logger.debug("Found a matching container ''{0}'' for the archive ''{1}''", foundContainer, deployable.getArchive()); - } - - // Stop the container - try { - foundContainer.stop(); - easybeansServer.removeContainer(foundContainer); - } catch (Exception e) { - throw new DeployerException("Cannot undeploy the deployable '" + deployable + "'", e); - } - if (versioningService != null && versioningService.isVersioningEnabled()) { - versioningService.garbageCollectJNDIBindingMBeans(); - } - logger.info("''{0}'' EJB3 Deployable is now undeployed", deployable.getShortName()); - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return EJB3Deployable.class.isInstance(deployable); - } - - /** - * Returns a Map containing all deployed EJB3s. - * @return a Map containing all deployed EJB3s. - */ - public Map getEJB3s() { - return ejb3s; - } - - /** - * Sets the EasyBeans embedded instance. - * @param easybeansServer the EasyBeans instance. - */ - public void setEmbedded(final Embedded easybeansServer) { - this.easybeansServer = easybeansServer; - } - - /** - * Returns the server properties. - * @return the server properties - */ - public ServerProperties getServerProperties() { - return serverProperties; - } - - /** - * Set the server properties. - * @param serverProperties the given server properties - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - this.versioningService = versioningService; - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - this.versioningService = null; - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return this.versioningService; - } - - /** - * Set the DeployerLog of the EasyBeansDeployer. - * @param deployerLog the DeployerLog to use - */ - public void setDeployerLog(final DeployerLog deployerLog) { - this.deployerLog = deployerLog; - } - - /** - * Sets the classloader to use for all deployed applications. - * @param appsClassLoader the given classloader. - */ - public void setAppsClassLoader(final ClassLoader appsClassLoader) { - this.appsClassLoader = appsClassLoader; - } - - /** - * Sets the working directory for EJB3s. - * @param workDirectory the given directory - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansService.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansService.java deleted file mode 100644 index 1e0a3d886c..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/EasyBeansService.java +++ /dev/null @@ -1,1039 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.persistence.spi.PersistenceProvider; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.easybeans.api.EZBConfigurationExtension; -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.EZBContainerException; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.easybeans.api.naming.EZBNamingStrategy; -import org.ow2.easybeans.component.api.EZBComponent; -import org.ow2.easybeans.component.itf.ICmiComponent; -import org.ow2.easybeans.container.ManagementPool; -import org.ow2.easybeans.container.mdb.helper.MDBResourceAdapterHelper; -import org.ow2.easybeans.deployment.EasyBeansDeployableInfo; -import org.ow2.easybeans.deployment.InjectionHolder; -import org.ow2.easybeans.deployment.api.EZBDeployableInfo; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.easybeans.ejbinwar.EasyBeansEJBWarBuilder; -import org.ow2.easybeans.jmx.MBeansHelper; -import org.ow2.easybeans.loader.EasyBeansClassLoader; -import org.ow2.easybeans.naming.interceptors.ENCManager; -import org.ow2.easybeans.osgi.archive.BundleArchiveFactory; -import org.ow2.easybeans.osgi.extension.EasyBeansOSGiExtension; -import org.ow2.easybeans.osgi.extension.OSGiBindingFactory; -import org.ow2.easybeans.persistence.PersistenceUnitManager; -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.easybeans.persistence.api.PersistenceXmlFileAnalyzerException; -import org.ow2.easybeans.persistence.xml.JPersistenceUnitInfo; -import org.ow2.easybeans.persistence.xml.JPersistenceUnitInfoHelper; -import org.ow2.easybeans.persistence.xml.PersistenceXmlFileAnalyzer; -import org.ow2.easybeans.proxy.binding.BindingManager; -import org.ow2.easybeans.resolver.ApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBContainerJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBJNDIResolver; -import org.ow2.easybeans.security.propagation.context.SecurityCurrent; -import org.ow2.easybeans.server.Embedded; -import org.ow2.easybeans.server.EmbeddedConfigurator; -import org.ow2.easybeans.server.EmbeddedException; -import org.ow2.jonas.cmi.CmiService; -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.service.AbsConfigServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.resource.ResourceService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.jonas.workmanager.WorkManagerService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJB3Deployable; -import org.ow2.util.ee.deploy.api.deployable.LibDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.jmx.api.ICommonsModelerExtService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.pool.impl.enhanced.ReusableThreadPoolFactory; -import org.ow2.util.url.URLUtils; - -/** - * Implementation of the service that runs the EasyBeans EJB3 container. - * @author Florent Benoit - * Contributors: - * S. Ali Tokmen (versioning) - */ -public class EasyBeansService extends AbsConfigServiceImpl implements IEasyBeansService { - - /** - * Name of the configuration file of EasyBeans for JOnAS. - */ - public static final String EASYBEANS_CONFIG_FILE = "easybeans-jonas.xml"; - - /** - * Name of the configuration file of EasyBeans for JOnAS with a support of clustering. - */ - public static final String EASYBEANS_CLUSTER_CONFIG_FILE = "easybeans-cluster-jonas.xml"; - - /** - * Limit for management pool using work manager. - */ - private static final int MANAGEMENTPOOL_WORKMANAGER_LIMIT = 30; - - /** - * The name of the JONAS_BASE directory. - */ - protected static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(EasyBeansService.class); - - /** - * URL of the configuration file. - */ - private URL xmlConfigurationURL = null; - - /** - * URL of the extra configuration file for clustering. - */ - private URL cmiXMLConfigurationURL = null; - - /** - * Embedded instance. - */ - private Embedded embedded = null; - - /** - * Reference to the deployer. - */ - private EasyBeansDeployer easyBeansDeployer = null; - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * Working directory for EJB3. - */ - private File workEjb3sFile; - - /** - * Reference to the MBeans library. This one register J2EEServer. It's only - * here because we need to be started after. - */ - private J2EEServerService j2eeServer = null; - - /** - * Reference to the resource service (used by MDB only). - * This is then an optional service. - */ - private ResourceService resourceService = null; - - /** - * External Classloader. - */ - private ClassLoader extClassLoader; - - /** - * DeployerManager service. - */ - private IDeployerManager deployerManager; - - /** - * DeployableHelper - */ - private IDeployableHelper deployableHelper = null; - - /** - * Reference to the {@link DeployerLog} which is the class that manage the - * accesses to the log file (to remove the jar). - */ - private DeployerLog deployerLog = null; - - /** - * Reference to the CMI service. - */ - private CmiService cmiService = null; - - /** - * OSGi Bundle context. - */ - private BundleContext bundleContext = null; - - /** - * Reference to the Naming Manager of JOnAS. - */ - private static JNamingManager namingManager = null; - - /** - * OSGi Service Registration. - */ - private ServiceRegistration embeddedServiceRegistration = null; - - /** - * OSGi bundle factory. - */ - private BundleArchiveFactory bundleArchiveFactory = null; - - /** - * OSGi BindingFactory (used to register beans as services). - */ - private OSGiBindingFactory bindingFactory = null; - - /** - * The EventService. - */ - private IEventService eventService = null; - - /** - * The CommonsModelerExtService. - */ - private ICommonsModelerExtService commonsModelerExtService = null; - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * true if cmi is configured. - */ - private boolean cmiConfigured = false; - - /** - * Work Manager. - */ - private WorkManagerService workManagerService = null; - - - /** - * Persistence Providers. - */ - private List persistenceProviders = null; - - /** - * Constructor in OSGi mode. It provides the bundle context. - * @param bundleContext the given bundle context. - */ - public EasyBeansService(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - this.persistenceProviders = new ArrayList(); - - // Create the EasyBeans deployer - easyBeansDeployer = new EasyBeansDeployer(); - // Create the EasyBeans Embedded - embedded = new Embedded(); - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - @Override - protected void doStart() throws ServiceException { - initWorkingDirectory(); - - // EasyBeans should use the JOnAS domain name and server name - MBeansHelper.setDomainName(jmxService.getDomainName()); - MBeansHelper.setServerName(jmxService.getJonasServerName()); - - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.ejb3Service(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for EJB3 service", e); - } - - File configurationFile; - if (this.addonConfig != null) { - configurationFile = this.addonConfig.getConfigurationFile(EASYBEANS_CONFIG_FILE); - } else { - configurationFile = new File(JONAS_BASE + File.separator + "conf" + File.separator + EASYBEANS_CONFIG_FILE); - } - - if (!configurationFile.exists()) { - throw new ServiceException("The configuration file '" + configurationFile + "' was not found in the classloader"); - } - - // Get URL - xmlConfigurationURL = URLUtils.fileToURL(configurationFile); - - // Clustering requires an extra configuration - if (cmiService != null && cmiService.isStarted() && !cmiConfigured) { - // Get URL - cmiXMLConfigurationURL = bundleContext.getBundle().getResource(EASYBEANS_CLUSTER_CONFIG_FILE); - if (cmiXMLConfigurationURL == null) { - throw new ServiceException("The configuration file '" + EASYBEANS_CLUSTER_CONFIG_FILE - + "' was not found in the classloader"); - } - cmiConfigured = true; - } - - // get apps ClassLoader - try { - LoaderManager lm = LoaderManager.getInstance(); - extClassLoader = lm.getExternalLoader(); - } catch (Exception e) { - //logger.error("Cannot get the Applications ClassLoader from EAR Container Service: " + e); - throw new ServiceException("Cannot get the Applications ClassLoader from EAR Container Service", e); - } - - // Create Finder for Resource Adapter - JOnASResourceAdapterFinder resourceAdapterFinder = new JOnASResourceAdapterFinder(); - resourceAdapterFinder.setEasyBeansService(this); - - try { - // Set value - MDBResourceAdapterHelper.setResourceAdapterFinder(resourceAdapterFinder); - - // Init EasyBeans ENC Manager - // TODO : Get the InterceptorClass if it has already be set - ENCManager.setInterceptorClass(JOnASENCInterceptor.class); - } catch (IllegalStateException e) { - // Do nothing - logger.debug("Interceptor class may have already be initialized before", e); - } - - // Sets the JOnAS 5 Security wrapper. - try { - SecurityCurrent.setSecurityCurrent(new JOnASSecurityCurrent()); - } catch (IllegalStateException e) { - logger.debug("SecurityCurrent may have already be initialized before", e); - } - - // Configure some dialects. - configureExtraDialects(); - - - // Sets the Management Pool - ManagementPool managementPool = new ManagementPool(ReusableThreadPoolFactory.createWorkManagerThreadPool(workManagerService.getWorkManager(), MANAGEMENTPOOL_WORKMANAGER_LIMIT)); - embedded.setManagementThreadPool(managementPool); - - - // Provides a Map of instances to be injected - final Map context = new HashMap(); - context.put("event-service", this.eventService); - context.put("modeler-service", this.commonsModelerExtService); - - // Start the EasyBeans server in an execution block - IExecution startExec = new IExecution() { - public Void execute() throws EmbeddedException { - List configurations = new ArrayList(); - - // Load core components ... - URL coreComponentsURL = Embedded.class.getResource("easybeans-core.xml"); - configurations.add(coreComponentsURL); - // ... and the JOnAS XML configuration - configurations.add(xmlConfigurationURL); - - if (cmiXMLConfigurationURL != null) { - // Add the cmi component to the given embedded instance - configurations.add(cmiXMLConfigurationURL); - } - - // Initialize the instance with the set of configuration files - EmbeddedConfigurator.init(embedded, configurations, context); - - // Do not load the easybeans' core components during startup (already added) - embedded.getServerConfig().setAddEmbeddedComponents(false); - - // Start it - embedded.start(); - return null; - } - }; - - // Execute - ExecutionResult startExecResult = RunnableHelper.execute(getClass().getClassLoader(), startExec); - - // Throw an ServiceException if needed - if (startExecResult.hasException()) { - logger.error("Cannot start the EasyBeans server", startExecResult.getException()); - throw new ServiceException("Cannot start the EasyBeans Server", startExecResult.getException()); - } - - /** - * Enable OSGi extension of EasyBeans if there is a bundlecontext - */ - if (bundleContext != null) { - IExecution addOSGiExtension = new IExecution() { - public Void execute() throws EmbeddedException { - // Add extension factory - EasyBeansOSGiExtension extension = new EasyBeansOSGiExtension(); - extension.setBundleContext(bundleContext); - embedded.getServerConfig().addExtensionFactory(extension); - - ArchiveManager am = ArchiveManager.getInstance(); - bundleArchiveFactory = new BundleArchiveFactory(); - am.addFactory(bundleArchiveFactory); - - // Add OSGi BF - // The EjbJars will now be exposed as OSGi services - bindingFactory = new OSGiBindingFactory(); - BindingManager.getInstance().registerFactory(bindingFactory); - - return null; - } - }; - - // Execute - ExecutionResult addOSGiExtensionResult = RunnableHelper - .execute(getClass().getClassLoader(), addOSGiExtension); - // Throw an ServiceException if needed - if (addOSGiExtensionResult.hasException()) { - logger.error("Cannot start the EasyBeans server", startExecResult.getException()); - throw new ServiceException("Cannot start the EasyBeans Server", startExecResult.getException()); - } - } - - // Register the OSGi service if the server is RUNNING - if (j2eeServer.isRunning()) { - registerEmbeddedService(); - } - - // Set the deployer - easyBeansDeployer.setEmbedded(embedded); - easyBeansDeployer.setServerProperties(getServerProperties()); - easyBeansDeployer.setAppsClassLoader(extClassLoader); - easyBeansDeployer.setWorkDirectory(getWorkDirectory()); - - // Register the deployer - deployerManager.register(easyBeansDeployer); - - } - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - // Unregister MBean - try { - jmxService.unregisterModelMBean(JonasObjectName.ejb3Service(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for EJB3 service", e); - } - - // Undeploy EJB3s - easyBeansDeployer.stop(); - - if (deployerManager != null) { - // Unregister the deployer - deployerManager.unregister(easyBeansDeployer); - } - - // Remove OSGi extension - if (bundleContext != null) { - IExecution removeOSGiExtension = new IExecution() { - public Void execute() throws EmbeddedException { - if (bundleArchiveFactory != null) { - ArchiveManager am = ArchiveManager.getInstance(); - am.removeFactory(bundleArchiveFactory); - bundleArchiveFactory = null; - } - - // Unregister service - if (embeddedServiceRegistration != null) { - embeddedServiceRegistration.unregister(); - embeddedServiceRegistration = null; - } - - // Do not forget to unregister the OSGi BF - BindingManager.getInstance().unregisterFactory(bindingFactory); - - return null; - } - }; - - // Execute - ExecutionResult removeOSGiExtensionResult = RunnableHelper.execute(getClass().getClassLoader(), - removeOSGiExtension); - // Throw an ServiceException if needed - if (removeOSGiExtensionResult.hasException()) { - throw new ServiceException("Cannot stop EasyBeans", removeOSGiExtensionResult.getException()); - } - - } - - // Stop the EasyBeans server - if (embedded.isStarted()) { - try { - // Stop the EasyBeans server in an execution block - IExecution stopExec = new IExecution() { - public Void execute() throws EmbeddedException { - embedded.stop(); - return null; - } - }; - - // Execute - ExecutionResult stopExecResult = RunnableHelper.execute(getClass().getClassLoader(), stopExec); - - // Throw an ServiceException if needed - if (stopExecResult.hasException()) { - throw new EmbeddedException(stopExecResult.getException()); - } - - } catch (EmbeddedException e) { - throw new ServiceException("Cannot stop the EasyBeans component", e); - } - } - } - - /** - * Configure some dialects that may be used with some databases used by JOnAS. - */ - @SuppressWarnings("unchecked") - protected void configureExtraDialects() { - // Add Hibernate dialect - try { - Class hibernateDialectClass = Embedded.class.getClassLoader().loadClass("org.hibernate.dialect.DialectFactory"); - Field mapper = hibernateDialectClass.getDeclaredField("MAPPERS"); - mapper.setAccessible(true); - Map map = null; - map = (Map) mapper.get(null); - Class versionInsensitiveMapperClass = Embedded.class.getClassLoader().loadClass( - "org.hibernate.dialect.DialectFactory$VersionInsensitiveMapper"); - Constructor c = versionInsensitiveMapperClass.getConstructor(String.class); - Object dialect = c.newInstance("org.hibernate.dialect.Oracle9iDialect"); - map.put("Oracle9i Enterprise Edition", dialect); - mapper.setAccessible(false); - } catch (Exception e) { - logger.debug("Cannot configure some dialects used by Hibernate", e); - } - } - - /** - * {@inheritDoc} - */ - public EZBServer getEasyBeansServer() { - return embedded; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param deployerManager the deployerManagerService to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Returns the NamingManger. - * @return the NamingManger - */ - public static JNamingManager getNamingManager() { - return namingManager; - } - - /** - * Sets the NamingManger. - * @param naming the NamingManger to set - */ - public void setNamingManager(final JNamingManager naming) { - namingManager = naming; - } - - /** - * @param resourceService the resourceService to set - */ - public void setResourceService(final ResourceService resourceService) { - this.resourceService = resourceService; - } - - /** - * @return the resourceService - */ - public ResourceService getResourceService() { - return resourceService; - } - - /** - * Set a reference to the CMI service. - * @param cmiService a reference to the CMI service - */ - public void setCmiService(final CmiService cmiService) { - if (!cmiConfigured) { - cmiXMLConfigurationURL = bundleContext.getBundle().getResource(EASYBEANS_CLUSTER_CONFIG_FILE); - if (cmiXMLConfigurationURL == null) { - throw new ServiceException("The configuration file '" + EASYBEANS_CLUSTER_CONFIG_FILE - + "' was not found in the classloader"); - } - // Start the EasyBeans server in an execution block - IExecution startExec = new IExecution() { - public Void execute() throws Exception { - List configurations = new ArrayList();; - configurations.add(cmiXMLConfigurationURL); - // Provides a Map of instances to be injected - final Map context = new HashMap(); - context.put("event-service", eventService); - context.put("config", embedded.getServerConfig()); - // Initialize the instance with the set of configuration files - EmbeddedConfigurator.configure(embedded, configurations, context); - /** - * Start cmi component. - */ - EZBComponent cmiComponent = embedded.getComponent(ICmiComponent.class); - cmiComponent.init(); - cmiComponent.start(); - return null; - } - }; - // Execute - ExecutionResult startExecResult = RunnableHelper.execute(getClass().getClassLoader(), startExec); - - // Throw a ServiceException if needed - if (startExecResult.hasException()) { - logger.error("Cannot reconfigure the EasyBeans server", startExecResult.getException()); - throw new ServiceException("Cannot reconfigure the EasyBeans Server", startExecResult.getException()); - } - cmiConfigured = true; - } - this.cmiService = cmiService; - } - - /** - * Return a reference to the CMI service. - * @return a reference to the CMI service - */ - public CmiService getCmiService() { - return cmiService; - } - - /** - * Adds the given container. - * @param ejbContainer the EJB3 bundle container to add - */ - public void addContainer(final EZBContainer ejbContainer) { - embedded.addContainer(ejbContainer); - } - - /** - * Remove the given container. - * @param ejbContainer the given container - */ - public void removeContainer(final EZBContainer ejbContainer) { - embedded.removeContainer(ejbContainer); - } - - /** - * Create working directory for EJB3. - */ - protected void initWorkingDirectory() { - if (workEjb3sFile == null) { - // Create $JONAS_BASE/work/ejb3s directory file - workEjb3sFile = new File(getWorkDirectory() + File.separator + getServerProperties().getServerName()); - workEjb3sFile.mkdirs(); - } - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - protected void setWorkCleanerService(final WorkCleanerService workCleanerService) { - initWorkingDirectory(); - File fileLog = new File(workEjb3sFile.getPath() + File.separator + getServerProperties().getServerName() + ".log"); - - if (!fileLog.exists()) { - try { - // Create log file - fileLog.createNewFile(); - } catch (IOException e) { - logger.error("Cannot create the log file " + fileLog); - } - } - - try { - // Create the logger - deployerLog = new DeployerLog(fileLog); - easyBeansDeployer.setDeployerLog(deployerLog); - CleanTask cleanTask = new EJB3CleanTask(this, deployerLog); - - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } catch (DeployerLogException e) { - logger.error("Cannot register the clean task", e); - } - } - - /** - * Test if the specified unpack name is already deployed or not. This method - * is defined in the {@link IEasyBeansService} interface. - * @param unpackName the name of the EJB3 file. - * @return true if the EJB3 is deployed, else false. - */ - public boolean isEJB3DeployedByWorkName(final String unpackName) { - Map ejb3s = easyBeansDeployer.getEJB3s(); - for (EJB3Deployable ejb3Deployable : ejb3s.values()) { - try { - File unpackedFile = URLUtils.urlToFile(ejb3Deployable.getArchive().getURL()); - if (unpackName.equals(unpackedFile.getName())) { - return true; - } - } catch (ArchiveException e) { - logger.debug("Cannot retrieve the name of the unpacked ear {0}", unpackName); - } - - } - return false; - } - - /** - * Register Embedded as an OSGi service. - */ - public void registerEmbeddedService() { - if (embeddedServiceRegistration == null) { - embeddedServiceRegistration = bundleContext.registerService(Embedded.class.getName(), embedded, null); - } - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - easyBeansDeployer.setVersioningService(versioningService); - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - easyBeansDeployer.unsetVersioningService(); - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return easyBeansDeployer.getVersioningService(); - } - - /** - * @param j2eeServer the j2eeServer to set - */ - public void setJ2EEServer(final J2EEServerService j2eeServer) { - this.j2eeServer = j2eeServer; - } - - /** - * Add a new extension to Embedded, that will be used for the next EZBContainer creation. - * @param extension Configuration extension to be added - */ - public void addConfigurationExtension(final EZBConfigurationExtension extension) { - embedded.getServerConfig().addExtensionFactory(extension); - } - - /** - * Disengage the given extension - * @param extension - */ - public void removeConfigurationExtension(final EZBConfigurationExtension extension) { - // TODO add a removeExtensionFactory method - //embedded.getServerConfig().removeExtensionFactory(extension); - } - - /** - * @param eventService the EventService to set - */ - public void setEventService(final IEventService eventService) { - this.eventService = eventService; - } - - /** - * @param commonsModelerExtService the CommonsModelerExtService to set - */ - public void setCommonsModelerExtService(final ICommonsModelerExtService commonsModelerExtService) { - this.commonsModelerExtService = commonsModelerExtService; - } - - /** - * Allow to build a classloader that provide JPA classtransformers and bytecode modifications. - * @param urls the array of URLs to use - * @param parentClassLoader the parent classloader - * @return a classloader. - */ - public ClassLoader buildByteCodeEnhancementClassLoader(final URL[] urls, final ClassLoader parentClassLoader) { - return new EasyBeansClassLoader(urls, parentClassLoader); - } - - /** - * @param persistenceUnitManager the Persistence Unit Manager (if any) - * @param jndiResolver the JNDI resolver (if any) - * @return a new Injection holder. - */ - public EZBInjectionHolder buildInjectionHolder(final EZBPersistenceUnitManager persistenceUnitManager, final EZBJNDIResolver jndiResolver) { - InjectionHolder injectionHolder = new InjectionHolder(); - injectionHolder.setPersistenceUnitManager(persistenceUnitManager); - injectionHolder.setJNDIResolver(jndiResolver); - return injectionHolder; - } - - /** - * @return a new JNDI application resolver. - */ - public EZBApplicationJNDIResolver buildApplicationJNDIResolver() { - return new ApplicationJNDIResolver(); - } - - /** - * Gets the persistence unit manager for the given EAR and classloader. - * - * @param earDeployable the ear deployable - * @param appClassLoader the classloader used as deployable - * @return the given persistence unit manager - */ - public EZBPersistenceUnitManager getPersistenceUnitManager(final EARDeployable earDeployable, - final ClassLoader appClassLoader) throws PersistenceXmlFileAnalyzerException { - // Analyze libraries to detect persistence archive (only once for now - // and for all libraries) - // Get libraries of this EAR - List libs = earDeployable.getLibDeployables(); - PersistenceUnitManager persistenceUnitManager = null; - for (LibDeployable lib : libs) { - PersistenceUnitManager builtPersistenceUnitManager = null; - try { - JPersistenceUnitInfo[] persistenceUnitInfos = - PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(lib.getArchive()); - if (persistenceUnitInfos != null) { - builtPersistenceUnitManager = - PersistenceXmlFileAnalyzer.loadPersistenceProvider(persistenceUnitInfos, appClassLoader); - } - } catch (PersistenceXmlFileAnalyzerException e) { - throw new IllegalStateException("Failure when analyzing the persistence.xml file", e); - } - - // Existing manager and new manager found - if (persistenceUnitManager != null) { - if (builtPersistenceUnitManager != null) { - // Add the persistence unit infos to the existing - // persistence unit manager - persistenceUnitManager.addExtraPersistenceUnitInfos(builtPersistenceUnitManager.getPersistenceUnitInfos()); - } - } else { - // New persistence manager use the built manager - persistenceUnitManager = builtPersistenceUnitManager; - } - } - return persistenceUnitManager; - } - - /** - * Gets the persistence unit manager for the given archive and classloader. - * @param archive the archive - * @param classLoader the classloader used to analyze persistence - * @return the given persistence unit manager - */ - public EZBPersistenceUnitManager getPersistenceUnitManager(final IArchive archive, - final ClassLoader classLoader) throws PersistenceXmlFileAnalyzerException { - PersistenceUnitManager persistenceUnitManager = null; - JPersistenceUnitInfo[] persistenceUnitInfos = PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(archive); - if (persistenceUnitInfos != null) { - persistenceUnitManager = PersistenceXmlFileAnalyzer.loadPersistenceProvider(persistenceUnitInfos, classLoader); - } - return persistenceUnitManager; - - } - - /** - * Build a new Strategy for the given prefix and the old strategy. - * @param prefix the given prefix - * @param oldNamingStrategy the strategy - * @return the new strategy - */ - public EZBNamingStrategy getNamingStrategy(final String prefix, final EZBNamingStrategy oldNamingStrategy) { - return new PrefixedNamingStrategy(prefix, oldNamingStrategy); - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Unset the resource checker manager. - */ - public void unsetResourceCheckerManager() { - this.resourceCheckerManager = null; - } - - /** - * Sets the work manager service instance. - * @param workManagerService the given instance - */ - public void setWorkManagerService(final WorkManagerService workManagerService) { - this.workManagerService = workManagerService; - } - - - /** - * Remove the given persistence provider. - * @param persistenceProvider the persistence provider - */ - public synchronized void removePersistenceProvider(final PersistenceProvider persistenceProvider) { - this.persistenceProviders.remove(persistenceProvider); - notifyDefaultPersistenceProvider(); - } - - /** - * Adds the given persistence provider. - * @param persistenceProvider the persistence provider - */ - public synchronized void addPersistenceProvider(final PersistenceProvider persistenceProvider) { - this.persistenceProviders.add(persistenceProvider); - notifyDefaultPersistenceProvider(); - } - - - - /** - * Notify EasyBeans with the new default Persistence Provider. - */ - private void notifyDefaultPersistenceProvider() { - JPersistenceUnitInfo defaultPersistenceunitInfo = new JPersistenceUnitInfo(); - // Update the default persistence provider if there is one - if (persistenceProviders.size() > 0) { - defaultPersistenceunitInfo.setPersistenceProviderClassName(persistenceProviders.get(0).getClass().getName()); - defaultPersistenceunitInfo.setPersistenceProvider(persistenceProviders.get(0)); - } - JPersistenceUnitInfoHelper.setDefaultPersistenceunitInfo(defaultPersistenceunitInfo); - } - - /** - * @return work directory for ejb3s. - */ - protected String getWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "ejb3s"; - } - - /** - * Return a container if there are EJBs inside the webApp. - * @param warDeployable - * @param properties - * @return EJB3 container if found - */ - public EZBContainer getEJBContainerFromWar(WARDeployable warDeployable, Map properties) { - EZBContainer container = null; - EasyBeansEJBWarBuilder builder = new EasyBeansEJBWarBuilder(); - builder.setDeployableHelper(deployableHelper); - EJB3Deployable ejb3Deployable = builder.getEJBFromWarDeployable(warDeployable, properties); - if (ejb3Deployable != null) { - container = getEasyBeansServer().createContainer(ejb3Deployable); - - EZBDeployableInfo deployableInfo = (EZBDeployableInfo) ejb3Deployable.getExtension(EasyBeansDeployableInfo.class); - ClassLoader ejb3ClassLoader = null; - - EZBApplicationJNDIResolver applicationJNDIResolver = null; - if (deployableInfo != null) { - ejb3ClassLoader = deployableInfo.getClassLoader(); - applicationJNDIResolver = deployableInfo.getApplicationJNDIResolver(); - if (ejb3ClassLoader != null) { - container.setClassLoader(ejb3ClassLoader); - } - if (applicationJNDIResolver != null) { - EZBContainerJNDIResolver containerJNDIResolver = container.getConfiguration().getContainerJNDIResolver(); - containerJNDIResolver.setApplicationJNDIResolver(applicationJNDIResolver); - // Add child on application JNDI Resolver - applicationJNDIResolver.addContainerJNDIResolver(containerJNDIResolver); - } - - } - - } - return container; - } - - /** - * @param deployableHelper the deployable helper - */ - public void setDeployableHelper(final IDeployableHelper deployableHelper) { - this.deployableHelper = deployableHelper; - } - - /** - * Unbind the {@link IDeployableHelper}. - */ - public void unsetDeployableHelper() { - this.deployableHelper = null; - } - -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASENCInterceptor.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASENCInterceptor.java deleted file mode 100644 index e77a4b8573..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASENCInterceptor.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import javax.naming.Context; -import org.ow2.easybeans.api.EasyBeansInvocationContext; -import org.ow2.easybeans.api.naming.NamingInterceptor; -import org.ow2.easybeans.naming.interceptors.AbsENCInterceptor; -import org.ow2.jonas.naming.JNamingManager; - -/** - * Interceptor used when EasyBeans is integrated in JOnAS.
    - * As the java: namespace is managed by JOnAS, EasyBeans needs to call JOnAS - * objects to set java: context. - * @author Florent Benoit - */ -public class JOnASENCInterceptor extends AbsENCInterceptor implements NamingInterceptor { - - /** - * Naming Manager of JOnAS. - */ - private JNamingManager namingManager = null; - - /** - * Default constructor.
    - * Gets a reference on the JOnAS naming manager . - */ - public JOnASENCInterceptor() { - if (namingManager == null) { - namingManager = EasyBeansService.getNamingManager(); - } - } - - /** - * Sets JOnAS ENC context. - * @param invocationContext context with useful attributes on the current - * invocation. - * @return result of the next invocation (to chain interceptors). - * @throws Exception needs for signature of interceptor. - */ - @Override - public Object intercept(final EasyBeansInvocationContext invocationContext) throws Exception { - Context oldContext = (Context) namingManager.setComponentContext(invocationContext.getFactory().getJavaContext()); - try { - return invocationContext.proceed(); - } finally { - namingManager.resetComponentContext(oldContext); - } - } -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASResourceAdapterFinder.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASResourceAdapterFinder.java deleted file mode 100644 index 56b05e3e7f..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASResourceAdapterFinder.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import javax.resource.ResourceException; -import javax.resource.spi.ResourceAdapter; - -import org.ow2.easybeans.container.mdb.helper.IResourceAdapterFinder; -import org.ow2.jonas.resource.Rar; -import org.ow2.jonas.resource.ResourceService; - -/** - * Allow to find the Resource Adapter object for a given JNDI name. - * @author Florent BENOIT - */ -public class JOnASResourceAdapterFinder implements IResourceAdapterFinder { - - /** - * Easybeans service. - */ - private EasyBeansService easyBeansService; - - /** - * Sets the easybeans service. - * @param easyBeansService the given service to set. - */ - public void setEasyBeansService(final EasyBeansService easyBeansService) { - this.easyBeansService = easyBeansService; - } - - /** - * Gets the resource adapter object for the given jndi name (activation - * spec) and the given embedded object. - * @param jndiName the name of the activation spec bound in the registry - * @return an instance of the resource adapter that provides the MDB - * activation spec. - * @throws ResourceException if an error occurs while trying to get the - * resource adapter. - */ - public ResourceAdapter getResourceAdapter(final String jndiName) throws ResourceException { - ResourceService resourceService = easyBeansService.getResourceService(); - if (resourceService == null) { - throw new ResourceException( - "No Resource Service running in JOnAS, unable to get the resource adapter with JNDI Name '" - + jndiName + "'."); - } - - // Get RAR object - Rar rar = resourceService.getRar(jndiName); - - // Check found an object - if (rar == null) { - throw new ResourceException( - "Unable to find the Resource Adapter object in the resource service with the JNDI Name '" - + jndiName + "'."); - } - - // return the resource adapter - return rar.getResourceAdapter(); - - } - -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityContextWrapper.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityContextWrapper.java deleted file mode 100644 index 8cdf97ebc9..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityContextWrapper.java +++ /dev/null @@ -1,143 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import java.security.Principal; -import java.security.acl.Group; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -import javax.security.auth.Subject; - -import org.ow2.easybeans.security.api.EZBSecurityContext; -import org.ow2.easybeans.security.struct.JPrincipal; -import org.ow2.jonas.lib.security.context.SecurityContext; - -/** - * Wrapper class for the JOnAS security.
    - * It will propagate and read JOnAS security context. - * @author Florent Benoit - */ -public class JOnASSecurityContextWrapper implements EZBSecurityContext { - - /** - * Wrapped security context of JOnAS. - */ - private SecurityContext jonasSecurityContext = null; - - /** - * Builds a security context around JOnAS security context. - * @param jonasSecurityContext the JOnAS context - */ - public JOnASSecurityContextWrapper(final SecurityContext jonasSecurityContext) { - // Needs to build an empty security context if there is no security context on the current thread. - if (jonasSecurityContext == null) { - this.jonasSecurityContext = new SecurityContext(); - org.ow2.jonas.lib.security.context.SecurityCurrent.getCurrent().setSecurityContext(this.jonasSecurityContext); - } else { - this.jonasSecurityContext = jonasSecurityContext; - } - } - - /** - * Gets the caller's principal. - * @param runAsBean if true, the bean is a run-as bean. - * @return principal of the caller. - */ - public Principal getCallerPrincipal(final boolean runAsBean) { - return jonasSecurityContext.getCallerPrincipal(runAsBean); - } - - /** - * Gets the caller's roles. - * @param runAsBean if true, the bean is a run-as bean. - * @return array of roles of the caller. - */ - public Principal[] getCallerRoles(final boolean runAsBean) { - String[] roles = jonasSecurityContext.getCallerPrincipalRoles(runAsBean); - - if (roles == null) { - throw new IllegalStateException("No roles found on the JOnAS security context"); - } - - Principal[] principals = new Principal[roles.length]; - int i = 0; - for (String role : roles) { - principals[i++] = new JPrincipal(role); - } - return principals; - } - - /** - * Enters in run-as mode with the given subject.
    - * The previous subject is stored and will be restored when run-as mode will - * be ended. - * @param runAsSubject the subject to used in run-as mode. - * @return the previous subject. - */ - public Subject enterRunAs(final Subject runAsSubject) { - - // Get principal name from subject - String principalName = null; - for (Principal principal : runAsSubject.getPrincipals(Principal.class)) { - if (!(principal instanceof Group)) { - principalName = principal.getName(); - break; - } - } - - // Get roles from subject - List roleList = new ArrayList(); - for (Principal principal : runAsSubject.getPrincipals(Principal.class)) { - if (principal instanceof Group) { - Enumeration members = ((Group) principal).members(); - while (members.hasMoreElements()) { - String role = members.nextElement().getName(); - roleList.add(role); - } - } - } - - String[] roles = new String[roleList.size()]; - roles = roleList.toArray(roles); - - // Push the RunAs Role - jonasSecurityContext.pushRunAs(roles[0], principalName, roles); - - // Not used with JOnAS security context - return null; - - } - - /** - * Ends the run-as mode and then restore the context stored by container. - * @param oldSubject subject kept by container and restored. - */ - public void endsRunAs(final Subject oldSubject) { - jonasSecurityContext.popRunAs(); - } - -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityCurrent.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityCurrent.java deleted file mode 100644 index 2fb729c2df..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/JOnASSecurityCurrent.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import org.ow2.easybeans.security.api.EZBSecurityContext; -import org.ow2.easybeans.security.api.EZBSecurityCurrent; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -/** - * Wrapper for the Security of JOnAS. - * @author Florent BENOIT - */ -public class JOnASSecurityCurrent implements EZBSecurityCurrent { - - - /** - * Gets the current context. - * @return SecurityContext return the Security context associated to the - * current thread or the JVM - */ - public EZBSecurityContext getSecurityContext() { - // wrap it - return new JOnASSecurityContextWrapper(SecurityCurrent.getCurrent().getSecurityContext()); - - } - - /** - * Associates the given security context to the current thread. - * @param securityContext Security context to associate to the current thread. - */ - public void setSecurityContext(final EZBSecurityContext securityContext) { - // Do nothing, JOnAS interceptor will call JOnAS method. - } - - /** - * Associates the given security context to all threads (JVM). - * @param securityContext Security context to associate to the JVM - */ - public void setGlobalSecurityContext(final EZBSecurityContext securityContext) { - // Do nothing, JOnAS interceptor will call JOnAS method. - } - -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/PrefixedNamingStrategy.java b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/PrefixedNamingStrategy.java deleted file mode 100644 index 0ea06e4632..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/java/org/ow2/jonas/ejb/easybeans/PrefixedNamingStrategy.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb.easybeans; - -import org.ow2.easybeans.api.bean.info.EZBBeanNamingInfo; -import org.ow2.easybeans.api.naming.EZBJNDINamingInfo; -import org.ow2.easybeans.api.naming.EZBNamingStrategy; -import org.ow2.easybeans.naming.BeanNamingInfo; -import org.ow2.easybeans.naming.strategy.EasyBeansV1NamingStrategy; -import org.ow2.easybeans.naming.strategy.JNDINamingInfo; -import org.ow2.easybeans.naming.strategy.JavaEE6NamingStrategy; - -/** - * JNDI naming strategy with prefixes. In this strategy, the JNDI name is - * rewritten by adding a prefix in front of it. - * - * @author S. Ali Tokmen - */ -public class PrefixedNamingStrategy implements EZBNamingStrategy { - /** - * JNDI prefix. - */ - private String prefix; - - /** - * Old naming strategy. - */ - private EZBNamingStrategy oldNamingStrategy; - - /** - * Saves the arguments. - * - * @param prefix JNDI prefix. - * @param oldNamingStrategy Old naming strategy. - */ - public PrefixedNamingStrategy(final String prefix, final EZBNamingStrategy oldNamingStrategy) { - this.prefix = prefix; - this.oldNamingStrategy = oldNamingStrategy; - } - - /** - * Gets the prefixed JNDI information for a given bean. - * @param beanInfo Bean information. - * @return JNDI name for this beanInfo. - */ - public EZBJNDINamingInfo getJNDINaming(final EZBBeanNamingInfo beanInfo) { - - // Update app name - if (oldNamingStrategy instanceof EasyBeansV1NamingStrategy) { - EZBJNDINamingInfo info = oldNamingStrategy.getJNDINaming(beanInfo); - JNDINamingInfo newInfo = new JNDINamingInfo(prefix - + info.jndiName()); - newInfo.setAliases(info.aliases()); - return newInfo; - } - // Update app name - ((BeanNamingInfo) beanInfo).setJavaEEApplicationName(prefix - + "javaEEApplicationName"); - return oldNamingStrategy.getJNDINaming(beanInfo); - } -} diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/jonas-resources/conf/easybeans-jonas.xml b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/jonas-resources/conf/easybeans-jonas.xml deleted file mode 100644 index 210a44f5d0..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/jonas-resources/conf/easybeans-jonas.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink1.1.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink1.1.properties deleted file mode 100644 index b58a7dbd32..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink1.1.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider eclipselink1.1 diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.2.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.2.properties deleted file mode 100644 index 5f2b19f00e..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.2.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider eclipselink2.2 diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.3.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.3.properties deleted file mode 100644 index 7b6f9fdbd3..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-eclipselink2.3.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider eclipselink2.3 diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate3.6.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate3.6.properties deleted file mode 100644 index 61ff789317..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate3.6.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider hibernate3.6 diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate4.1.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate4.1.properties deleted file mode 100644 index 89daacb63e..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-hibernate4.1.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider hibernate4.1 diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa.properties deleted file mode 100644 index f02ea185a7..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider openjpa \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa2.properties b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa2.properties deleted file mode 100644 index 278216c99b..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/properties/jonas-ejb3-openjpa2.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.ejb3.jpa.provider openjpa2 \ No newline at end of file diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/META-INF/jonas-ejb-easybeans-core.bnd b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/META-INF/jonas-ejb-easybeans-core.bnd deleted file mode 100644 index 05c6e2451f..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/META-INF/jonas-ejb-easybeans-core.bnd +++ /dev/null @@ -1,39 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.ejb.easybeans - -DynamicImport-Package org.ow2.easybeans.*,\ - org.ow2.cmi.jndi.context,\ - org.ow2.util.event.*,\ - org.ow2.util.jmx.*,\ - org.ow2.jonas.addon.deploy.api.config - -# Explicit the dependency on the quartz package -Import-Package org.ow2.easybeans.component.quartz,\ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - javax.persistence.*;version="[1.0.0,2.0.0]",\ - * - -Require-JOnAS-Services jtm,wm diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/easybeans-cluster-jonas.xml b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/easybeans-cluster-jonas.xml deleted file mode 100644 index 3cec526115..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/easybeans-cluster-jonas.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/metadata.xml b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/metadata.xml deleted file mode 100644 index fae9537d1a..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/org/ow2/jonas/ejb/easybeans/mbeans-descriptors.xml b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/org/ow2/jonas/ejb/easybeans/mbeans-descriptors.xml deleted file mode 100644 index 20f9acd91a..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/resources/org/ow2/jonas/ejb/easybeans/mbeans-descriptors.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - diff --git a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/templates/jonas-ejb3.properties.template b/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/templates/jonas-ejb3.properties.template deleted file mode 100644 index 8c4be02035..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/core/src/main/templates/jonas-ejb3.properties.template +++ /dev/null @@ -1,16 +0,0 @@ -# -###################### JOnAS EJB 3 container service configuration -# -jonas.services ejb3 -# Set the name of the implementation class of the EJB 3 service. -jonas.service.ejb3.class org.ow2.jonas.ejb.easybeans.EasyBeansService - -# Set the JPA provider among the following list -# For Hibernate : hibernate3.6, hibernate4.1 -# For EclipseLink : eclipselink1.1, eclipselink2.2, eclipselink2.3 -# -# Note that some JPA providers are not embedded in the JOnAS package, -# and, if needed, are automatically downloaded from a maven repository. -# So, if you change this default value, and if you use a proxy, -# do not forget to set the 'http_proxy' environment variable. -%jonas.service.ejb3.jpa.provider% diff --git a/jonas/modules/services/ejb/ejb3/easybeans/pom.xml b/jonas/modules/services/ejb/ejb3/easybeans/pom.xml deleted file mode 100644 index 800813e723..0000000000 --- a/jonas/modules/services/ejb/ejb3/easybeans/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-ejb3 - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ejb-easybeans - pom - JOnAS :: Services :: EJB :: EJB3 :: EasyBeans - EJB Service for EasyBeans - - core - addon - - diff --git a/jonas/modules/services/ejb/ejb3/pom.xml b/jonas/modules/services/ejb/ejb3/pom.xml deleted file mode 100644 index 617a114c8f..0000000000 --- a/jonas/modules/services/ejb/ejb3/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - jonas-ejb - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-ejb3 - pom - JOnAS :: Services :: EJB :: EJB3 - - - easybeans - ant - - diff --git a/jonas/modules/services/ejb/pom.xml b/jonas/modules/services/ejb/pom.xml deleted file mode 100644 index 6b75e5ed84..0000000000 --- a/jonas/modules/services/ejb/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ejb - pom - JOnAS :: Services :: EJB - EJB Service - - - ejb-2.1 - ejb3 - - - - - \ No newline at end of file diff --git a/jonas/modules/services/event-provider/api/pom.xml b/jonas/modules/services/event-provider/api/pom.xml deleted file mode 100644 index c04a42e23f..0000000000 --- a/jonas/modules/services/event-provider/api/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - event-provider - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - event-provider-api - bundle - JOnAS :: Services :: Event Provider :: Api - - \ No newline at end of file diff --git a/jonas/modules/services/event-provider/api/src/main/META-INF/event-provider-api.bnd b/jonas/modules/services/event-provider/api/src/main/META-INF/event-provider-api.bnd deleted file mode 100644 index 280d9def9a..0000000000 --- a/jonas/modules/services/event-provider/api/src/main/META-INF/event-provider-api.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package org.ow2.jonas.event.provider.api - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/Event.java b/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/Event.java deleted file mode 100644 index f7dbcb80e2..0000000000 --- a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/Event.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.event.provider.api; - -import java.math.BigInteger; - -/** - * Created by IntelliJ IDEA. - * User: cazauxj - * Date: 4/16/12 - * Time: 1:03 PM - * To change this template use File | Settings | File Templates. - */ -public class Event { - - protected String value; - - protected String type; - - protected BigInteger timestamp; - - protected String source; - - /** - * Gets the value of the value property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the type property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getType() { - return type; - } - - /** - * Sets the value of the type property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setType(String value) { - this.type = value; - } - - /** - * Gets the value of the timestamp property. - * - * @return - * possible object is - * {@link BigInteger } - * - */ - public BigInteger getTimestamp() { - return timestamp; - } - - /** - * Sets the value of the timestamp property. - * - * @param value - * allowed object is - * {@link BigInteger } - * - */ - public void setTimestamp(BigInteger value) { - this.timestamp = value; - } - - /** - * Gets the value of the source property. - * - * @return - * possible object is - * {@link String } - * - */ - public String getSource() { - return source; - } - - /** - * Sets the value of the source property. - * - * @param value - * allowed object is - * {@link String } - * - */ - public void setSource(String value) { - this.source = value; - } -} diff --git a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/EventLevel.java b/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/EventLevel.java deleted file mode 100644 index 633a04d4bf..0000000000 --- a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/EventLevel.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.event.provider.api; - -/** - * Event Level - */ -public enum EventLevel { - INFO, FINEST, FINER, FINE, SEVERE, WARNING, EXCEPTION, ALL; -} diff --git a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/IEventProvider.java b/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/IEventProvider.java deleted file mode 100644 index 544925bb4c..0000000000 --- a/jonas/modules/services/event-provider/api/src/main/java/org/ow2/jonas/event/provider/api/IEventProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.event.provider.api; - -import java.util.List; - -/** - * Represents an Event provider - * @author Jeremy Cazaux - */ -public interface IEventProvider { - - /** - * @return the list of {@link Event} - */ - List getEvents(final List eventLevels); - - /** - * @param event An {@link Event} to add - */ - void addEvent(final Event event); -} diff --git a/jonas/modules/services/event-provider/core/pom.xml b/jonas/modules/services/event-provider/core/pom.xml deleted file mode 100644 index 4bf48fd574..0000000000 --- a/jonas/modules/services/event-provider/core/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - event-provider - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - event-provider-core - bundle - JOnAS :: Services :: Event Provider :: Core - - - - org.ow2.jonas - log-provider-core - ${project.version} - - - org.ow2.jonas - event-provider-api - ${project.version} - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/event-provider/core/src/main/java/org/ow2/jonas/event/provider/internal/EventProviderComponent.java b/jonas/modules/services/event-provider/core/src/main/java/org/ow2/jonas/event/provider/internal/EventProviderComponent.java deleted file mode 100644 index 3e96b1dc5f..0000000000 --- a/jonas/modules/services/event-provider/core/src/main/java/org/ow2/jonas/event/provider/internal/EventProviderComponent.java +++ /dev/null @@ -1,309 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.event.provider.internal; - -import org.ow2.jonas.event.provider.api.Event; -import org.ow2.jonas.event.provider.api.EventLevel; -import org.ow2.jonas.event.provider.api.IEventProvider; -import org.ow2.jonas.log.provider.api.ILogProvider; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.logging.Level; - -/** - * {@inheritDoc} - */ -public class EventProviderComponent implements IEventProvider { - - /** - * Path to the JONAS_BASE - */ - public static final String JONAS_BASE = System.getProperty("jonas.base"); - - /** - * Conf directory - */ - public static final String CONF_DIR = "conf"; - - /** - * The event provider properties file - */ - public static final String EVENT_PROVIDER_FILE = "event-provider.properties"; - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(EventProviderComponent.class); - - /** - * INFO Event window token - */ - public static final String INFO_EVENT_WINDOW_TOKEN = "jonas.service.event.info.window"; - - /** - * FINE event window token - */ - public static final String FINE_EVENT_WINDOW_TOKEN = "jonas.service.event.fine.window"; - - /** - * FINEST Event window token - */ - public static final String FINEST_EVENT_WINDOW_TOKEN = "jonas.service.event.finest.window"; - - /** - * FINER Event window token - */ - public static final String FINER_EVENT_WINDOW_TOKEN = "jonas.service.event.finer.window"; - - /** - * WARNING Event window token - */ - public static final String WARNING_EVENT_WINDOW_TOKEN = "jonas.service.event.warning.window"; - - /** - * SEVERE Event window token - */ - public static final String SEVERE_EVENT_WINDOW_TOKEN = "jonas.service.event.severe.window"; - - /* - * EXCEPTION Event window token - */ - public static final String EXCEPTION_EVENT_WINDOW_TOKEN = "jonas.service.event.exception.window"; - - /** - * Default window value of events to keep in memory - */ - public static final int DEFAULT_WINDOW_VALUE = 25; - - /** - * The {@link ILogProvider} - */ - private ILogProvider logProvider; - - /** - * Event provider properties - */ - private Properties eventProviderProperties; - - /* - * List of info events - */ - private List infoEvents; - - /** - * List of finest events - */ - private List finestEvents; - - /** - * List of fine events - */ - private List fineEvents; - - /** - * List of finer events - */ - private List finerEvents; - - /** - * List of warning events - */ - private List warningEvents; - - /** - * List of sever events - */ - private List severEvents; - - /** - * List of exception events - */ - private List exceptionEvents; - - /** - * Default constructor - */ - public EventProviderComponent() { - this.infoEvents = new ArrayList(); - this.exceptionEvents = new ArrayList(); - this.warningEvents = new ArrayList(); - this.finerEvents = new ArrayList(); - this.finestEvents = new ArrayList(); - this.fineEvents = new ArrayList(); - this.severEvents = new ArrayList(); - } - - /** - * Validate method - */ - public void start() { - File eventProviderFile = new File(new File(JONAS_BASE, CONF_DIR), EVENT_PROVIDER_FILE); - this.eventProviderProperties = new Properties(); - try { - this.eventProviderProperties.load(new FileInputStream(eventProviderFile)); - } catch (IOException e) { - logger.error("Cannot load properties of file " + eventProviderFile.getAbsolutePath(), e); - } - } - - /** - * @param eventLevels the list of {@link EventLevel} associated to events to retrieve - * @return the list of {@link Event} - */ - public List getEvents(final List eventLevels) { - List events = new ArrayList(); - - if (eventLevels.contains(EventLevel.ALL)) { - events.addAll(this.exceptionEvents); - events.addAll(this.infoEvents); - events.addAll(this.severEvents); - events.addAll(this.warningEvents); - events.addAll(this.fineEvents); - events.addAll(this.finerEvents); - events.addAll(this.finestEvents); - } else { - for (EventLevel eventLevel: eventLevels) { - switch (eventLevel) { - case EXCEPTION: - events.addAll(this.exceptionEvents); - break; - case INFO: - events.addAll(this.infoEvents); - break; - case SEVERE: - events.addAll(this.severEvents); - break; - case WARNING: - events.addAll(this.warningEvents); - break; - case FINE: - events.addAll(this.fineEvents); - break; - case FINER: - events.addAll(this.finerEvents); - break; - case FINEST: - events.addAll(this.finestEvents); - break; - } - } - } - - return events; - } - - /** - * @param eventLevel The {@link EventLevel} - * @return its associated {@link Level} - */ - public Level getLevel(final EventLevel eventLevel) { - if (Level.INFO.toString().equals(eventLevel.toString())) { - return Level.INFO; - } else if (Level.FINEST.toString().equals(eventLevel.toString())) { - return Level.FINEST; - } else if (Level.FINER.toString().equals(eventLevel.toString())) { - return Level.FINER; - } else if (Level.FINE.toString().equals(eventLevel.toString())) { - return Level.FINE; - } else if (Level.SEVERE.toString().equals(eventLevel.toString())) { - return Level.SEVERE; - } else if (Level.WARNING.toString().equals(eventLevel.toString())) { - return Level.WARNING; - } else { - return null; - } - } - - /** - * @param event An {@link Event} to add - */ - public void addEvent(final Event event) { - if (event != null) { - if (EventLevel.INFO.toString().equals(event.getType())) { - this.infoEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(INFO_EVENT_WINDOW_TOKEN), this.infoEvents); - } else if (EventLevel.EXCEPTION.toString().equals(event.getType())) { - this.exceptionEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(EXCEPTION_EVENT_WINDOW_TOKEN), this.exceptionEvents); - } else if (EventLevel.SEVERE.toString().equals(event.getType())) { - this.severEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(SEVERE_EVENT_WINDOW_TOKEN), this.severEvents); - } else if (EventLevel.FINE.toString().equals(event.getType())) { - this.fineEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(FINE_EVENT_WINDOW_TOKEN), this.fineEvents); - } else if (EventLevel.FINER.toString().equals(event.getType())) { - this.finerEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(FINER_EVENT_WINDOW_TOKEN), this.finerEvents); - } else if (EventLevel.FINEST.toString().equals(event.getType())) { - this.finestEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(FINEST_EVENT_WINDOW_TOKEN), this.finestEvents); - } else if (EventLevel.WARNING.toString().equals(event.getType())) { - this.warningEvents.add(event); - checkWindowValidity(this.eventProviderProperties.getProperty(WARNING_EVENT_WINDOW_TOKEN), this.warningEvents); - } - } - } - - /** - * Check window validity of an event - * @param value Window value - * @param events List of events of the same type - */ - private void checkWindowValidity(final String value, final List events) { - Integer window = null; - if (value != null) { - window = Integer.valueOf(value); - } - if (window == null) { - window = DEFAULT_WINDOW_VALUE; - } - int diff = events.size() - window; - if (diff > 0) { - for (int i = 0;i < diff; i++) { - events.remove(0); - } - } - } - - /** - * @param logProvider The {@link ILogProvider} to bind - */ - public void bindLogProvider(final ILogProvider logProvider) { - this.logProvider = logProvider; - } - - /** - * @param logProvider The {@link ILogProvider} to unbind - */ - public void unbindLogProvider(final ILogProvider logProvider) { - this.logProvider = null; - } -} diff --git a/jonas/modules/services/event-provider/core/src/main/jonas-resources/conf/event-provider.properties b/jonas/modules/services/event-provider/core/src/main/jonas-resources/conf/event-provider.properties deleted file mode 100644 index dd106ec5a2..0000000000 --- a/jonas/modules/services/event-provider/core/src/main/jonas-resources/conf/event-provider.properties +++ /dev/null @@ -1,8 +0,0 @@ -# set the max number of events to keep in memory (for the JOnAS report) -jonas.service.event.info.window 25 -jonas.service.event.finest.window 25 -jonas.service.event.finer.window 25 -jonas.service.event.fine.window 25 -jonas.service.event.warning.window 25 -jonas.service.event.severe.window 50 -jonas.service.event.exception.window 50 \ No newline at end of file diff --git a/jonas/modules/services/event-provider/core/src/main/resources/META-INF/event-provider-core.bnd b/jonas/modules/services/event-provider/core/src/main/resources/META-INF/event-provider-core.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/event-provider/core/src/main/resources/META-INF/event-provider-core.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/event-provider/core/src/main/resources/metadata.xml b/jonas/modules/services/event-provider/core/src/main/resources/metadata.xml deleted file mode 100644 index 9cf305c176..0000000000 --- a/jonas/modules/services/event-provider/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/event-provider/pom.xml b/jonas/modules/services/event-provider/pom.xml deleted file mode 100644 index 48354c0cad..0000000000 --- a/jonas/modules/services/event-provider/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - org.ow2.jonas - event-provider - 4.0.0 - pom - JOnAS :: Services :: Event Provider - - core - api - - \ No newline at end of file diff --git a/jonas/modules/services/ipojo-handler/pom.xml b/jonas/modules/services/ipojo-handler/pom.xml deleted file mode 100644 index 73fc56428d..0000000000 --- a/jonas/modules/services/ipojo-handler/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - ipojo-interceptor - bundle - JOnAS :: Services :: iPOJO handler - - - - org.apache.felix - org.apache.felix.ipojo - - - org.ow2.bundles - ow2-util-i18n - - - org.ow2.bundles - ow2-util-log - - - \ No newline at end of file diff --git a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/ComponentInstanceState.java b/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/ComponentInstanceState.java deleted file mode 100644 index 17a3d340e5..0000000000 --- a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/ComponentInstanceState.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ipojo.interceptor; - -import org.apache.felix.ipojo.ComponentInstance; - -/** - * iPOJO instance states as an enumeration. - */ -public enum ComponentInstanceState { - DISPOSED(ComponentInstance.DISPOSED), - STOPPED(ComponentInstance.STOPPED), - VALID(ComponentInstance.VALID), - INVALID(ComponentInstance.INVALID); - - private int state; - - ComponentInstanceState(int state) { - this.state = state; - } - - public int getState() { - return state; - } -} diff --git a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/IInstanceProvider.java b/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/IInstanceProvider.java deleted file mode 100644 index 467c3a24e1..0000000000 --- a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/IInstanceProvider.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ipojo.interceptor; - -import java.util.Date; -import java.util.Map; - -import org.apache.felix.ipojo.architecture.InstanceDescription; - -/** - * Represents a iPOJO service provider - * @author Jeremy Cazaux - */ -public interface IInstanceProvider { - - /** - * @return the name of the iPOJO component - */ - String getName(); - - /** - * @return the state of the iPOJO service - */ - ComponentInstanceState getStateComponent(); - - /** - * @return the deployable associate to the iPOJO service - */ - String getDeployable(); - - /** - * @return the start time of the service - */ - Date getStartTime(); - - /** - * @return the uptime of the service - */ - Long getUpTime(); - - /** - * @return the endtime of the service - */ - Date getShutdownTime(); - - /** - * @return the list of {@link Throwable} - */ - Map getThrowables(); - - /** - * @return the 'id' of the instance - */ - String getSource(); - - /** - * @return the {@link InstanceDescription} of the iPOJO instance managed - */ - InstanceDescription getInstanceDescription(); -} diff --git a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/Interceptor.java b/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/Interceptor.java deleted file mode 100644 index fde211fc8e..0000000000 --- a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/Interceptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ipojo.interceptor; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Created by IntelliJ IDEA. - * User: cazauxj - * Date: 3/28/12 - * Time: 9:39 AM - * To change this template use File | Settings | File Templates. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Interceptor { -} diff --git a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/internal/handler/iPOJOInterceptor.java b/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/internal/handler/iPOJOInterceptor.java deleted file mode 100644 index d29693843d..0000000000 --- a/jonas/modules/services/ipojo-handler/src/main/java/org/ow2/jonas/ipojo/interceptor/internal/handler/iPOJOInterceptor.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ipojo.interceptor.internal.handler; - -import java.lang.reflect.Member; -import java.util.Date; -import java.util.Dictionary; -import java.util.LinkedHashMap; -import java.util.Map; - -import org.apache.felix.ipojo.ComponentInstance; -import org.apache.felix.ipojo.ConfigurationException; -import org.apache.felix.ipojo.InstanceManager; -import org.apache.felix.ipojo.PrimitiveHandler; -import org.apache.felix.ipojo.architecture.InstanceDescription; -import org.apache.felix.ipojo.metadata.Element; -import org.apache.felix.ipojo.parser.MethodMetadata; -import org.ow2.jonas.ipojo.interceptor.ComponentInstanceState; -import org.ow2.jonas.ipojo.interceptor.IInstanceProvider; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * iPOJO Interceptor handler - * - * @author Jeremy Cazaux - */ -public class iPOJOInterceptor extends PrimitiveHandler implements IInstanceProvider { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(iPOJOInterceptor.class); - - /** - * Callback element - */ - private static final String CALLBACK_ELEMENT = "callback"; - - /** - * Method attribute of a callback element - */ - private static final String METHOD_ATTRIBUTE = "method"; - - /** - * The path to the deployable associate to the service - */ - private String deployable; - - /** - * The start time of the service - */ - private Date startTime; - - /** - * The shutdown time of the service - */ - private Date shutdownTime; - - /** - * Map between a {@link Throwable} and its timestamp - */ - private Map throwables = new LinkedHashMap(); - - /** - * The prefix source of an ipojo instance - */ - public static final String PREFIX_SOURCE = "ipojo/instance/"; - - /** - * {@inheritDoc} - */ - @Override - public void configure(final Element element, final Dictionary dictionary) throws ConfigurationException { - InstanceManager instanceManager = getInstanceManager(); - - // Traverse component's description looking for callback methods - // For each callback method, register an interceptor - Element[] callbacks = element.getElements(CALLBACK_ELEMENT); - if (callbacks != null) { - for (Element callback : callbacks) { - - // Find the method - String name = callback.getAttribute(METHOD_ATTRIBUTE); - MethodMetadata method = getPojoMetadata().getMethod(name); - - // Register an interceptor for the given method - instanceManager.register(method, this); - } - } - - } - - /** - * {@inheritDoc} - */ - @Override - public void onError(Object pojo, Member method, Throwable throwable) { - throwables.put(throwable, System.currentTimeMillis()); - } - - /** - * {@inheritDoc} - */ - @Override - public void stateChanged(int state) { - switch (adapt(state)) { - case DISPOSED: - case INVALID: - case STOPPED: - // Instance has been invalidated - shutdownTime = new Date(); - break; - case VALID: - // instance is now valid - startTime = new Date(); - shutdownTime = null; - } - } - - /** - * {@inheritDoc} - */ - @Override - public void stop() { - logger.debug("iPOJO interceptor of " + getInstanceManager().getInstanceName() + " has been stopped."); - } - - /** - * {@inheritDoc} - */ - @Override - public void start() { - logger.debug("iPOJO interceptor start on pojo " + getInstanceManager().getInstanceName()); - } - - public String getName() { - return getInstanceManager().getInstanceName(); - } - - public ComponentInstanceState getStateComponent() { - return adapt(getInstanceManager().getState()); - } - - private static ComponentInstanceState adapt(int state) { - switch (state) { - case ComponentInstance.DISPOSED: - return ComponentInstanceState.DISPOSED; - case ComponentInstance.INVALID: - return ComponentInstanceState.INVALID; - case ComponentInstance.VALID: - return ComponentInstanceState.VALID; - case ComponentInstance.STOPPED: - return ComponentInstanceState.STOPPED; - default: - throw new IllegalArgumentException("Invalid ComponentInstance state: " + state); - } - } - - public String getDeployable() { - return null; - } - - public Date getStartTime() { - return startTime; - } - - public Long getUpTime() { - Date lastTime; - if (this.shutdownTime == null) { - // now - lastTime = new Date(); - } else { - lastTime = this.shutdownTime; - } - return lastTime.getTime() - this.startTime.getTime(); - } - - public Date getShutdownTime() { - return shutdownTime; - } - - public Map getThrowables() { - return throwables; - } - - public String getSource() { - return PREFIX_SOURCE + getName(); - } - - /** - * {@inheritDoc} - */ - public InstanceDescription getInstanceDescription() { - return getInstanceManager().getInstanceDescription(); - } -} diff --git a/jonas/modules/services/ipojo-handler/src/main/resources/metadata.xml b/jonas/modules/services/ipojo-handler/src/main/resources/metadata.xml deleted file mode 100644 index c7c31a556b..0000000000 --- a/jonas/modules/services/ipojo-handler/src/main/resources/metadata.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - diff --git a/jonas/modules/services/jaxrs-jersey/core/pom.xml b/jonas/modules/services/jaxrs-jersey/core/pom.xml deleted file mode 100644 index 24778d6372..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/pom.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - - jaxrs-jersey - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - jaxrs-jersey-core - bundle - JOnAS :: Services :: JAX-RS Jersey :: Core - - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - - - org.ow2.spec.ee - ow2-jaxrs-1.1-spec - provided - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - - com.sun.jersey - jersey-server - ${jersey.version} - provided - - - com.sun.jersey - jersey-core - ${jersey.version} - provided - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - - - - - - oss.java-net - Sonatype OSS : Java.net - http://oss.sonatype.org/content/repositories/java.net2 - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisher.java b/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisher.java deleted file mode 100644 index 9a5a7610b8..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisher.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jaxrs.jersey.internal; - -import com.sun.jersey.spi.container.servlet.ServletContainer; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.servlet.ServletException; -import javax.ws.rs.core.Application; -import javax.ws.rs.ext.RuntimeDelegate; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - *

    The {@code JerseyApplicationPublisher} is responsible of publishing - * JAX-RS {@code Application} registered in the OSGi service registry - * onto the {@code HttpService}.

    - * - *

    Without any configuration (and any dependency on a JAX-RS implementation), - * a client can easily expose his {@code Application} with the following code:

    - *
    - *     bundleContext.registerService(Application.class, new MyApplication(), null);
    - * 
    - * - *

    This RESTful application will be available under the following path: - * {@literal /{bundle-symbolic-name}/{bundle-version}}.

    - * - *

    Name collision could happen if the same {@code Bundle} provides more than - * 1 {@code Application}.

    - * - *

    To avoid collisions, the client should provide a unique value into the - * {@code jonas.jaxrs.context-path} service property when registering his services.

    - * - *
    - *     Properties sp = new Properties();
    - *     sp.setProperty("jonas.jaxrs.context-path", "/my-app");
    - *     bundleContext.registerService(Application.class, new MyApplication(), sp);
    - * 
    O - * - *

    Notice that {@code @ApplicationPath} (if provided) will be respected - * (appended to the context path).

    - * - * @author Loic Albertin - */ -public class JerseyApplicationPublisher { - - private static final Log LOGGER = LogFactory.getLog(JerseyApplicationPublisher.class); - - /** - * Optional service property that defines the web context name of the REST application. - */ - public static final String CONTEXT_PROPERTY = "jonas.jaxrs.context-path"; - - /** - * HttpService used to register the Jersey Servlet(s). - */ - private HttpService httpService; - - /** - * Bind ServiceReference to the registered context alias. - */ - private Map aliases = new HashMap(); - - /** - * Dependency on the JAX-RS RuntimeDelegate to ensure that the - * JAX-RS container is up and running. - */ - private RuntimeDelegate delegate; - - /** - * Bind the required OSGi HTTP Service. - * @param httpService required service - */ - public void setHttpService(final HttpService httpService) { - this.httpService = httpService; - } - - /** - * Stop the publisher, un-registering all managed REST applications. - */ - public void stop() { - // Un-register all managed Application(s) - // Need to copy the content first to avoid ConcurrentModificationException - Set references = new HashSet(aliases.keySet()); - for (ServiceReference reference : references) { - unregisterServletContainer(reference); - } - } - - /** - * Manage a newly registered {@code Application} service. - * @param application REST application - * @param reference the associated {@code ServiceReference}. - */ - public void bindApplication(final Application application, - final ServiceReference reference) { - - // Compute the Web context path - String context = PathUtils.getContextPath(application, reference); - try { - // Try to register the Servlet - httpService.registerServlet(context, new ServletContainer(application), null, null); - aliases.put(reference, context); - LOGGER.debug("REST Application {0} published under context ''{1}''", - application.getClass().getName(), - context); - } catch (ServletException e) { - LOGGER.error("REST Application {0} in error", - application.getClass().getName(), - e); - } catch (NamespaceException e) { - LOGGER.error("REST Application {0} is using an already bound web context name ''{}''", - application.getClass().getName(), - context, - e); - } - } - - /** - * Un-manage the given Application. - * @param reference reference of the Application service. - */ - public void unbindApplication(final ServiceReference reference) { - unregisterServletContainer(reference); - } - - /** - * Un-register the alias associated to the given {@code ServiceReference}. - * @param reference associated to a web context alias - */ - private void unregisterServletContainer(final ServiceReference reference) { - String context = aliases.remove(reference); - httpService.unregister(context); - LOGGER.debug("Un-registered REST Application ''{0}''", context); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyService.java b/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyService.java deleted file mode 100644 index 62d2a68b6d..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyService.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jaxrs.jersey.internal; - -import javax.servlet.ServletContainerInitializer; -import javax.ws.rs.ext.RuntimeDelegate; - -import com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer; -import com.sun.jersey.server.impl.provider.RuntimeDelegateImpl; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; - -/** - * A {@code JerseyComponent} is ... - * - * @author Guillaume Sauthier - */ -public class JerseyService extends AbsServiceImpl { - - private BundleContext bundleContext; - private ServiceRegistration registration; - private ServiceRegistration registration2; - - public JerseyService(BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - @Override - protected void doStart() throws ServiceException { - - // Register the ServletContainerInitializer to activate Tomcat7 integration - registration = bundleContext.registerService( - ServletContainerInitializer.class.getName(), - new JerseyServletContainerInitializer(), - null); - - // Register the RuntimeDelegate service for the API - registration2 = bundleContext.registerService( - RuntimeDelegate.class.getName(), - new RuntimeDelegateImpl(), - null - ); - } - - @Override - protected void doStop() throws ServiceException { - - // Do not forget to un-register services - registration.unregister(); - registration2.unregister(); - } -} diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtils.java b/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtils.java deleted file mode 100644 index a5fead4e77..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtils.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jaxrs.jersey.internal; - -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.UriBuilder; - -import org.osgi.framework.ServiceReference; - -/** - * A {@code PathUtils} is responsible to compute web context path information. - * - * @author Guillaume Sauthier - */ -public class PathUtils { - - /** - * Build the context path of the given Application - * @param application REST application - * @param reference OSGi ServiceReference associated to the Application - * @return a valid context path - */ - public static String getContextPath(final Application application, - final ServiceReference reference) { - - StringBuilder sb = new StringBuilder(); - String path = (String) reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY); - if (path != null) { - // Use provided path value - path = cleanupPath(path); - sb.append(path); - } else { - // Compute path value from ServiceReference - // Notice that if 1 Bundle registers 2 (or more) Applications without - // specifying a context path, there will be a context name collision. - sb.append('/') - .append(reference.getBundle().getSymbolicName()) - .append('/') - .append(reference.getBundle().getVersion()); - } - - // Respect @ApplicationPath if present - Class appClass = application.getClass(); - if (appClass.isAnnotationPresent(ApplicationPath.class)) { - String applicationPath = appClass.getAnnotation(ApplicationPath.class).value(); - if (applicationPath != null) { - applicationPath = cleanupPath(applicationPath); - sb.append(applicationPath); - } - } - - // Clean the path using an UriBuilder (for encoding support) - return UriBuilder.fromPath(sb.toString()) - .build() - .toASCIIString(); - } - - private static String cleanupPath(final String path) { - String cleaned = path; - if (path.charAt(0) != '/') { - // Add a leading '/' - cleaned = "/" + path; - } - - if (path.endsWith("/") && (!"/".equals(path))) { - // Remove trailing '/' - cleaned = cleaned.substring(0, cleaned.length() - 1); - } - - return cleaned; - } -} diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/jaxrs-jersey-core.bnd b/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/jaxrs-jersey-core.bnd deleted file mode 100644 index 092257a376..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/jaxrs-jersey-core.bnd +++ /dev/null @@ -1,44 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Embed-Dependency jersey-core;scope=provided;inline=true, \ - jersey-server;scope=provided;inline=true - -Import-Package !com.sun.grizzly.*,\ - !com.sun.net.httpserver,\ - !org.apache.tools.ant.*,\ - javax.ws.rs.*;version=1.1,\ - javax.ejb.*;resolution:=optional,\ - javax.enterprise.*;resolution:=optional,\ - javax.inject.*;resolution:=optional,\ - javax.mail.*;resolution:=optional,\ - javax.interceptor.*;resolution:=optional,\ - javax.persistence.*;resolution:=optional,\ - org.objectweb.asm;resolution:=optional,\ - javax.xml.bind.*;version=2.1,\ - * - --exportcontents javax.ws.rs.*;version=1.1 - -BundleActivator com.sun.jersey.core.osgi.Activator - diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter b/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter deleted file mode 100644 index 64f2f090c1..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/META-INF/services/javax.ws.rs.ext.MessageBodyWriter +++ /dev/null @@ -1,51 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# From jersey-core -# ------------------------------------------------ -com.sun.jersey.core.impl.provider.entity.StringProvider -com.sun.jersey.core.impl.provider.entity.ByteArrayProvider -com.sun.jersey.core.impl.provider.entity.FileProvider -com.sun.jersey.core.impl.provider.entity.InputStreamProvider -com.sun.jersey.core.impl.provider.entity.DataSourceProvider -com.sun.jersey.core.impl.provider.entity.RenderedImageProvider -com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider -com.sun.jersey.core.impl.provider.entity.FormProvider -com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider -com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App -com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text -com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General -com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App -com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text -com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General -com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App -com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text -com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General -com.sun.jersey.core.impl.provider.entity.ReaderProvider -com.sun.jersey.core.impl.provider.entity.DocumentProvider -com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider -com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter - -# From jersey-server -# ------------------------------------------------ -com.sun.jersey.server.impl.template.ViewableMessageBodyWriter diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/metadata.xml b/jonas/modules/services/jaxrs-jersey/core/src/main/resources/metadata.xml deleted file mode 100644 index 62c652e09b..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jaxrs-jersey/core/src/main/templates/jonas-jax-rs.properties.template b/jonas/modules/services/jaxrs-jersey/core/src/main/templates/jonas-jax-rs.properties.template deleted file mode 100644 index 71b1102081..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/main/templates/jonas-jax-rs.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS JAX-RS service configuration -# -jonas.services jaxrs -# Set the name of the implementation class of the jaxrs service -jonas.service.jaxrs.class org.ow2.jonas.jaxrs.jersey.internal.JerseyService diff --git a/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisherTestCase.java b/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisherTestCase.java deleted file mode 100644 index 93d73d9b84..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/JerseyApplicationPublisherTestCase.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jaxrs.jersey.internal; - -import javax.ws.rs.core.Application; - -import org.mockito.Mock; -import org.osgi.framework.Bundle; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpService; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -/** - * A {@code JerseyApplicationPublisherTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class JerseyApplicationPublisherTestCase { - - @Mock - private HttpService httpService; - - @Mock - private ServiceReference reference1; - @Mock - private ServiceReference reference2; - @Mock - private ServiceReference reference3; - - @Mock - private Bundle bundle; - - - private JerseyApplicationPublisher publisher; - - @BeforeMethod - public void setUp() throws Exception { - initMocks(this); - - publisher = new JerseyApplicationPublisher(); - publisher.setHttpService(httpService); - } - - @Test - public void testApplicationDisappearance() throws Exception { - - when(reference1.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app"); - - publisher.bindApplication(new Application(), reference1); - publisher.unbindApplication(reference1); - - verify(httpService).unregister("/app"); - - } - - @Test - public void testShutdown() throws Exception { - - when(reference1.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app1"); - when(reference2.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app2"); - when(reference3.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app3"); - - publisher.bindApplication(new Application(), reference1); - publisher.bindApplication(new Application(), reference2); - publisher.bindApplication(new Application(), reference3); - - publisher.stop(); - - verify(httpService).unregister("/app1"); - verify(httpService).unregister("/app2"); - verify(httpService).unregister("/app3"); - - - } - -} diff --git a/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtilsTestCase.java b/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtilsTestCase.java deleted file mode 100644 index c9e16f7561..0000000000 --- a/jonas/modules/services/jaxrs-jersey/core/src/test/java/org/ow2/jonas/jaxrs/jersey/internal/PathUtilsTestCase.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jaxrs.jersey.internal; - -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.core.Application; - -import org.mockito.Mock; -import org.osgi.framework.Bundle; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.Version; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; -import static org.testng.Assert.assertEquals; - -/** - * A {@code PathUtilsTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class PathUtilsTestCase { - - @Mock - private ServiceReference reference; - - @Mock - private Bundle bundle; - - @BeforeMethod - public void setUp() throws Exception { - initMocks(this); - } - - @Test - public void testApplicationWithoutContextPathAndNoApplicationPath() throws Exception { - - when(reference.getBundle()).thenReturn(bundle); - when(bundle.getSymbolicName()).thenReturn("symbolic-name"); - when(bundle.getVersion()).thenReturn(new Version(1, 0, 0)); - - assertEquals(PathUtils.getContextPath(new Application(), reference), "/symbolic-name/1.0.0"); - - } - - @Test - public void testApplicationWithoutContextPathAndApplicationPath() throws Exception { - - when(reference.getBundle()).thenReturn(bundle); - when(bundle.getSymbolicName()).thenReturn("symbolic-name"); - when(bundle.getVersion()).thenReturn(new Version(1, 0, 0)); - - assertEquals(PathUtils.getContextPath(new ApplicationWithPath(), reference), "/symbolic-name/1.0.0/system"); - - } - - @Test - public void testApplicationWithContextPathAndNoApplicationPath() throws Exception { - - when(reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app"); - - assertEquals(PathUtils.getContextPath(new Application(), reference), "/app"); - - } - - @Test - public void testApplicationWithContextPathAndApplicationPath() throws Exception { - - when(reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app"); - - assertEquals(PathUtils.getContextPath(new ApplicationWithPath(), reference), "/app/system"); - } - - @Test - public void testCleaningPathWithNoLeadingSlash() throws Exception { - - when(reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app"); - - assertEquals(PathUtils.getContextPath(new Application(), reference), "/app"); - - } - - @Test - public void testCleaningPathWithTrailingSlash() throws Exception { - - when(reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("app/"); - - assertEquals(PathUtils.getContextPath(new Application(), reference), "/app"); - - } - - @Test - public void testCleaningPathWithLeadingSlash() throws Exception { - - when(reference.getProperty(JerseyApplicationPublisher.CONTEXT_PROPERTY)) - .thenReturn("/app"); - - assertEquals(PathUtils.getContextPath(new Application(), reference), "/app"); - - } - - - @ApplicationPath("system") - private static class ApplicationWithPath extends Application {} - -} diff --git a/jonas/modules/services/jaxrs-jersey/pom.xml b/jonas/modules/services/jaxrs-jersey/pom.xml deleted file mode 100644 index 597deeadc5..0000000000 --- a/jonas/modules/services/jaxrs-jersey/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - - jaxrs-jersey - pom - JOnAS :: Services :: JAX-RS Jersey - - core - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/addon/pom.xml b/jonas/modules/services/jms-joram/addon/pom.xml deleted file mode 100644 index 92bd5bd979..0000000000 --- a/jonas/modules/services/jms-joram/addon/pom.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - jms-joram - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: JMS-JORAM :: Addon - jms-joram-addon - pom - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - jms-joram-addon-plan.xml - - - - ../core/src/main/jonas-resources/bin - - - ../core/src/main/jonas-resources/conf - - - ../core/src/main/jonas-resources/deploy-addon - true - - joramAdminConfigForAddons.xml - - - - - - - - - - maven-antrun-plugin - - - - process-resources - - - - - - - run - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/addon/src/main/assembly/assembly.xml b/jonas/modules/services/jms-joram/addon/src/main/assembly/assembly.xml deleted file mode 100644 index a22e86a86a..0000000000 --- a/jonas/modules/services/jms-joram/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - jms-joram-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - target/extra-resources - repository/org/ow2/jonas/jms-joram-config-admin/${project.version}/ - - jms-joram-config-admin-${project.version}.xml - - 774 - - - - - target/extra-resources - deploy/ - - jms-joram-addon-plan.xml - - 774 - - - - - target/extra-resources - conf/ - - a3servers.xml - a3debug.cfg - - 774 - - - - - target/extra-resources - bin/ - - JmsServer - JmsServer.bat - joram_raconfig - joram_raconfig.bat - - 774 - - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jms-joram-addon-plan.xml b/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jms-joram-addon-plan.xml deleted file mode 100644 index dd30f8c486..0000000000 --- a/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jms-joram-addon-plan.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - org.ow2.jonas - jms-joram-config-admin - ${project.version} - xml - - - - org.ow2.jonas - jms-joram-server-plan - ${project.version} - xml - - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - xml - - - diff --git a/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 59296e6a43..0000000000 --- a/jonas/modules/services/jms-joram/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - jms-addon - - - JMS JORAM Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - - - diff --git a/jonas/modules/services/jms-joram/ant/pom.xml b/jonas/modules/services/jms-joram/ant/pom.xml deleted file mode 100644 index 95d51b0e68..0000000000 --- a/jonas/modules/services/jms-joram/ant/pom.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - jms-joram - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jms-joram-ant - bundle - JOnAS :: Services :: JMS-JORAM :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - deployment-plan - - - org.ow2.jonas - jms-joram-server-plan - ${project.version} - deployment-plan - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - generate-repository - - provision-directory - - generate-resources - - ${project.build.directory}/generated-resources/templates/jms/joram/deploy/mandatory - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - unpack-jonas-configuration - - unpack - - generate-resources - - - - org.ow2.jonas - jms-joram-core - deploy - ${project.version} - - - ${project.build.directory}/generated-resources/templates/jms/joram/deploy/mandatory - META-INF/** - - - - - - - - src/main/resources - - - ${project.build.directory}/generated-resources - - - - diff --git a/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/Jms.java b/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/Jms.java deleted file mode 100644 index 284dcb6f89..0000000000 --- a/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/Jms.java +++ /dev/null @@ -1,277 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.jms; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.w3c.dom.Document; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.awt.*; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; - - -/** - * Allow to configure the JMS service. - * @author Florent Benoit - */ -public class Jms extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[JMS] "; - - /** - * Default host name. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "16010"; - - /** - * Name of Joram configuration file. - */ - public static final String JORAM_CONF_FILE = "a3servers.xml"; - - /** - * Name of Joram Admin configuration file. - */ - public static final String JORAM_ADMIN_CONF_FILE = "joramAdmin.xml"; - - /** - * JORAM Admin deployable file - */ - public static final String JORAM_ADMIN_DEPLOYABLE_FILE = "joramAdminConfig.xml"; - - /** - * EOL - */ - public static final String EOL = "\n"; - - /** - * Package of mandatory deployables - */ - public static final String MANDATORY_DEPLOYABLE_PACKAGE = "templates/jms/joram/deploy/mandatory"; - - /** - * List of topics - */ - private List topics; - - /** - * List of queues - */ - private List queues; - - /** - * Default constructor. - */ - public Jms() { - super(); - this.topics = new ArrayList(); - this.queues = new ArrayList(); - } - - /** - * Set the host name for Joram. - * @param host host name for Joram - */ - public void setHost(final String host) { - - // For JMS - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JORAM_CONF_FILE); - propertyReplace.setToken(DEFAULT_HOST); - propertyReplace.setValue(host); - propertyReplace.setLogInfo(INFO + "Setting Joram host name to : " + host + " in " - + JORAM_CONF_FILE + " file."); - addTask(propertyReplace); - - // For correct binding of JCF, JQCF and JTCF in JNDI - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(DEFAULT_HOST); - propertyReplace.setValue(host); - propertyReplace.setLogInfo(INFO + "Setting Joram host name to : " + host + " in " - + JORAM_ADMIN_CONF_FILE + " file."); - addTask(propertyReplace); - - // for RAR file - propertyReplace = new JReplace(); - propertyReplace.setDeployableFile(JORAM_ADMIN_DEPLOYABLE_FILE); - propertyReplace.setToken(DEFAULT_HOST); - propertyReplace.setValue(host); - propertyReplace.setLogInfo(INFO + "Setting Joram host name to : " + host + " in " - + JORAM_ADMIN_DEPLOYABLE_FILE + " file."); - addTask(propertyReplace); - - // Patch the RAR file - JmsRa jmsRa = new JmsRa(); - jmsRa.setServerHost(host); - addTask(jmsRa); - - } - - /** - * Set the port number for Joram. - * @param portNumber the port for Joram - */ - public void setPort(final String portNumber) { - - // For JMS - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JORAM_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Joram port number to : " + portNumber + " in " - + JORAM_CONF_FILE + " file."); - addTask(propertyReplace); - - // For correct binding of JCF, JQCF and JTCF in JNDI - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Joram port number to : " + portNumber + " in " - + JORAM_ADMIN_CONF_FILE + " file."); - addTask(propertyReplace); - - // for RAR file - propertyReplace = new JReplace(); - propertyReplace.setDeployableFile(JORAM_ADMIN_DEPLOYABLE_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Joram port number to : " + portNumber + " in " - + JORAM_ADMIN_DEPLOYABLE_FILE + " file."); - addTask(propertyReplace); - - // Patch the RAR file - JmsRa jmsRa = new JmsRa(); - jmsRa.setServerPort(portNumber); - addTask(jmsRa); - - } - - /** - * Set the initial topics when JOnAS start. - * @param initialTopics comma separated list of topics - */ - public void setInitialTopics(final String initialTopics) { - StringTokenizer st = new StringTokenizer(initialTopics, ","); - while (st.hasMoreTokens()) { - this.topics.add(st.nextToken()); - } - } - - /** - * Set the initial queues when JOnAS start. - * @param initialQueues comma separated list of topics - */ - public void setInitialQueues(final String initialQueues) { - StringTokenizer st = new StringTokenizer(initialQueues, ","); - while (st.hasMoreTokens()) { - this.queues.add(st.nextToken()); - } - } - - /** - * Execute all task - */ - public void execute() { - //copy mandatory template deployables - copyTemplateDeployables(MANDATORY_DEPLOYABLE_PACKAGE); - super.execute(); - super.executeAllTask(); - - File joramConfig = new File(new File(getJOnASBase(), "deploy"), "joramAdminUserConfig.xml"); - FileOutputStream outputStream = null; - - try { - try { - outputStream = new FileOutputStream(joramConfig); - } catch (FileNotFoundException e) { - log("Cannot create file " + joramConfig.getAbsolutePath() + ": " + e, Project.MSG_ERR); - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(""); - stringBuilder.append(EOL + ""); - - List names = new ArrayList(); - names.addAll(this.topics); - names.addAll(this.queues); - for (String name: names) { - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + " ra"); - stringBuilder.append(EOL + " 0"); - stringBuilder.append(EOL + " " + name + ""); - - String classname; - if (this.topics.contains(name)) { - classname = "org.objectweb.joram.mom.dest.Topic"; - } else { - classname = "org.objectweb.joram.mom.dest.Queue"; - } - - stringBuilder.append(EOL + " " + classname + ""); - stringBuilder.append(EOL + " true"); - stringBuilder.append(EOL + " true"); - stringBuilder.append(EOL + " " + name + ""); - stringBuilder.append(EOL + " "); - } - - stringBuilder.append(EOL + ""); - - try { - outputStream.write(stringBuilder.toString().getBytes()); - } catch (IOException e) { - log("Cannot write " + stringBuilder.toString() + " into the output file " + joramConfig.getAbsolutePath() - + " :" + e, Project.MSG_ERR); - } - - } finally { - try { - outputStream.close(); - } catch (IOException e) { - log("Cannot close the FileOutputStream resource " + e, Project.MSG_ERR); - } - } - } -} diff --git a/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/JmsRa.java b/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/JmsRa.java deleted file mode 100644 index 0a93b25056..0000000000 --- a/jonas/modules/services/jms-joram/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jms/JmsRa.java +++ /dev/null @@ -1,243 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.jms; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Date; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.taskdefs.Expand; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.antmodular.bootstrap.JOnASAntTool; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.BaseTaskItf; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.Replace; - -/** - * Allow to create/adapt the JMS resource adaptor. - * @author Benoit Pelletier - */ -public class JmsRa extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JmsRa] "; - - /** - * Name of the rar. - */ - private static final String JORAM_RA_FOR_JONAS = "joram-jca-jonas"; - - /** - * RAConfig classname. - */ - private static final String RACONFIG_CLASS = "org.ow2.jonas.generators.raconfig.RAConfig"; - - /** - * Default host name. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Host name of the server. - */ - private String serverHost = DEFAULT_HOST; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "16010"; - - /** - * Port number of the server. - */ - private String serverPort = DEFAULT_PORT; - - /** - * Set the host name. - * @param serverHost the host name - */ - public void setServerHost(final String serverHost) { - this.serverHost = serverHost; - } - - /** - * Set the port number. - * @param serverPort the port nb - */ - public void setServerPort(final String serverPort) { - this.serverPort = serverPort; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - - // Build new temp file for making a resource adaptor - File tmpFile = new File(System.getProperty("java.io.tmpdir"), String.valueOf(new Date().getTime())); - - // Copy the RAR file from JONAS_ROOT to JONAS_BASE - - - String rarFileName = JORAM_RA_FOR_JONAS + "-" + getJoramVersion() + ".rar"; - String rarDir = getMaven2Repository() + File.separator + "org" + File.separator + "ow2" + File.separator - + "joram" + File.separator + JORAM_RA_FOR_JONAS + File.separator + getJoramVersion(); - String srcRarPathName = getJonasRoot().getPath() + File.separator + rarDir + File.separator + rarFileName; - String dstRarPathName = getDestDir().getPath() + File.separator + rarDir + File.separator + rarFileName; - - Copy copy = new Copy(); - JOnASAntTool.configure(this, copy); - copy.setTofile(new File(dstRarPathName)); - copy.setFile(new File(srcRarPathName)); - copy.setOverwrite(true); - try { - copy.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot copy " + JORAM_RA_FOR_JONAS + " file : ", rae); - } - - // Extract the jonas-ra.xml - Expand jarTask = new Expand(); - JOnASAntTool.configure(this, jarTask); - jarTask.setDest(tmpFile); - jarTask.setSrc(new File(dstRarPathName)); - try { - jarTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot extract jonas-ra.xml with jar command : ", rae); - } - - // update the jonas-ra.xml - Replace replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String token = "\r"; - String value = ""; - replaceTask.setToken(token); - replaceTask.setValue(value); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace port number in the jonas-ra.xml file : ", rae); - } - - - replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String portToken = "ServerPort" - + "\n" - + " "; - String portValue = "ServerPort" - + "\n" - + " " + serverPort + ""; - - replaceTask.setToken(portToken); - replaceTask.setValue(portValue); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace port number in the jonas-ra.xml file : ", rae); - } - - replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String hostToken = "HostName" - + "\n" - + " "; - String hostValue = "HostName" - + "\n" - + " " + serverHost + ""; - - replaceTask.setToken(hostToken); - replaceTask.setValue(hostValue); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace host name in the jonas-ra.xml file : ", rae); - } - - // update the archive - Java raConfigTask = getBootstraptask("", false); - - // Add the ra-config Jar in the Java classpath path - String clientJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "client.jar"; - String raConfigJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "jonas-generators-raconfig.jar"; - Path classpath = new Path(raConfigTask.getProject(), clientJar); - classpath.append(new Path(raConfigTask.getProject(), raConfigJar)); - raConfigTask.setClasspath(classpath); - - JOnASAntTool.configure(this, raConfigTask); - raConfigTask.clearArgs(); - raConfigTask.createArg().setValue(RACONFIG_CLASS); - raConfigTask.createArg().setValue("-u"); - raConfigTask.createArg().setValue(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml"); - raConfigTask.createArg().setValue(dstRarPathName); - - try { - raConfigTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - throw new BuildException(INFO + "Cannot make a resource adaptor on RAConfig: ", rae); - } finally { - JOnASAntTool.deleteAllFiles(tmpFile); - } - - log(INFO + "Setting host name to " + serverHost + ", port number to " + serverPort + " in the rar '" + - dstRarPathName + "'."); - } - - private String getJoramVersion() { - Properties versions = new Properties(); - try { - versions.load(new FileInputStream(new File(getJonasRoot(), "versions.properties"))); - } catch (Exception e) { - throw new BuildException(INFO + "Cannot read versions.properties file: ", e); - } - return versions.getProperty("org.ow2.joram_joram-jca-jonas"); - } -} diff --git a/jonas/modules/services/jms-joram/ant/src/main/resources/antlib-jms.xml b/jonas/modules/services/jms-joram/ant/src/main/resources/antlib-jms.xml deleted file mode 100644 index 1513e610e3..0000000000 --- a/jonas/modules/services/jms-joram/ant/src/main/resources/antlib-jms.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.properties.template b/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.properties.template deleted file mode 100644 index 5d72b97cd1..0000000000 --- a/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.properties.template +++ /dev/null @@ -1,4 +0,0 @@ -#Jms -jms.port=16010 -jms.topics=InvoiceTopic -jms.queues=OrderApprovalQueue,OrdersQueue,MailCompletedOrderQueue,SupPurchaseOrderQueue,MailOrderApprovalQueue,MailQueue diff --git a/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.xml b/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.xml deleted file mode 100644 index e498043888..0000000000 --- a/jonas/modules/services/jms-joram/ant/src/main/resources/build-jms.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/core/pom.xml b/jonas/modules/services/jms-joram/core/pom.xml deleted file mode 100644 index c9cafdee95..0000000000 --- a/jonas/modules/services/jms-joram/core/pom.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - jms-joram - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jms-joram-core - pom - JOnAS :: Services :: JMS-JORAM :: Core - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-binaries - - - - src/main/jonas-resources/bin - true - - * - - - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - ${project.build.directory}/extra-binaries - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-deploy - compile - - jar - - - src/main/jonas-resources/deploy - ${project.build.directory} - deploy - - **/.svn/** - - - - - attach-deploy-example - compile - - jar - - - src/main/jonas-resources/deploy-example - ${project.build.directory} - deploy-example - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer deleted file mode 100644 index cc4a4e3a89..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer +++ /dev/null @@ -1,54 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ - -DTransaction=fr.dyade.aaa.util.NullTransaction \ - -Dfr.dyade.aaa.agent.A3CONF_DIR=$JONAS_BASE/conf \ -" -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap fr.dyade.aaa.agent.AgentServer 0 ./s0 "$@" - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer.bat b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer.bat deleted file mode 100755 index 544fdf565f..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/JmsServer.bat +++ /dev/null @@ -1,48 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Check environment variables: -if not ["%JONAS_ROOT%"]==[""] Goto Run -@echo "JONAS_ROOT must be set" -Goto End - -:Run -call "%JONAS_ROOT%\bin\setenv.bat" - -set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -set JAVA_OPTS=%JAVA_OPTS% -Djonas.base="%JONAS_BASE%" -set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -set JAVA_OPTS=%JAVA_OPTS% -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" -set JAVA_OPTS=%JAVA_OPTS% -DTransaction=fr.dyade.aaa.util.NullTransaction -set JAVA_OPTS=%JAVA_OPTS% -Dfr.dyade.aaa.agent.A3CONF_DIR="%JONAS_BASE%\conf" - -%JAVA% %JAVA_OPTS% -cp "%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar" org.ow2.jonas.client.boot.Bootstrap fr.dyade.aaa.agent.AgentServer 0 .\s0 %1 %2 %3 %4 %5 %6 %7 %8 %9 - -:End diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig deleted file mode 100644 index 63f7f14fc7..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig +++ /dev/null @@ -1,117 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -# Locate the JORAM ResourceAdapter to configure -RA_LOCATION=repositories/maven2-internal/org/objectweb/joram/joram-jca-jonas/${joram.version}/joram-jca-jonas-${joram.version}.rar -if [ -f $JONAS_BASE/$RA_LOCATION ]; then - RARJORAM=$JONAS_BASE/$RA_LOCATION; -else - if [ -f $JONAS_BASE/joram_ra_for_jonas.rar ]; then - RARJORAM=$JONAS_BASE/joram_ra_for_jonas.rar; - fi -fi - -if ([ "$RARJORAM" = "" ] || [ ! -f $RARJORAM ]); then - echo "[ERROR] Cannot find a JORAM Resource Adapter file to process."; - echo "Expected locations:"; - echo " * $JONAS_BASE/$RA_LOCATION (newjb generated base)"; - echo " * $JONAS_BASE/joram_ra_for_jonas.rar"; - echo "Notice that the JORAM RA is automatically placed at the right location by 'newjb' when generating a new JONAS_BASE"; - exit 1 ; -fi - -PRM="false"; -PORT=16010; -HOST=localhost; -SERVER=0; -export PRM PORT HOST SERVER - -while [ "$#" -gt 0 ] -do - case "$1" in - -p) - shift - PORT=$1; - PRM="true"; - ;; - -h) - shift - HOST=$1; - PRM="true"; - ;; - -s) - shift - SERVER=$1; - PRM="true"; - ;; - -v) - shift - export VERBOSE=$1; - ;; - *) - shift - ;; - esac -done - -if [ "$PRM" = "false" ] -then - echo "Usage : $0 -p -h -s "; - exit 1; -fi - -echo "Target JORAM Resource Adapter: $RARJORAM" - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/jonas-generators-raconfig.jar$SPS$JONAS_ROOT/lib/client.jar - -$JAVA -cp $JONAS_CLASSPATH \ - $JAVA_OPTS \ - org.ow2.jonas.client.boot.Bootstrap org.objectweb.joram.client.connector.utils.RAConfig \ - -rar $RARJORAM \ - -uhp $HOST $PORT $SERVER \ - -conf $JONAS_BASE/conf \ - $VERBOSE - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig.bat b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig.bat deleted file mode 100755 index d3058ba9be..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/bin/joram_raconfig.bat +++ /dev/null @@ -1,134 +0,0 @@ -@Echo Off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Nicolas Tachker -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -Rem --------------------------------------------- -Rem set environment -Rem --------------------------------------------- -if ["%JONAS_ROOT%"]==[""] goto setroot -call "%JONAS_ROOT%\bin\setenv.bat" - -REM Locate the JORAM ResourceAdapter to configure -set RA_LOCATION=repositories/maven2-internal/org/objectweb/joram/joram-jca-jonas/${joram.version}/joram-jca-jonas-${joram.version}.rar -if not exist "%JONAS_BASE%\%RA_LOCATION%" goto compatibility_rar -Set RARJORAM=%JONAS_BASE%\%RA_LOCATION% - -Rem Marker that help to come back at the beggining of the script when we tryed to use the compatibility rar -:joram_rar_available - -set HOST=localhost -set PORT=16010 -set SERVER=0 - -Rem --------------------------------------------- -Rem Get args -Rem --------------------------------------------- -if [%1]==[] goto no_arg - -:loop_on_args -Set VALUE=%~1 -if [%1]==[-p] goto port_arg -if [%1]==[-h] goto host_arg -if [%1]==[-s] goto sid_arg -if [%1]==[-v] goto verbose -set ARGS=%ARGS% %1 -goto next_arg - -:port_arg -shift -if [%1]==[] goto usage -set PORT=%1 -goto next_arg - -:host_arg -shift -if [%1]==[] goto usage -set HOST=%1 -goto next_arg - -:sid_arg -shift -if [%1]==[] goto usage -set HOST=%1 -goto next_arg - -:verbose -shift -set VERBOSE=-v -goto next_arg - -:next_arg -shift -if not [%1]==[] goto loop_on_args - -Rem --------------------------------------------- -Rem set JAVA_OPTS -Rem --------------------------------------------- -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.base="%JONAS_BASE%" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Rem Update classpath -Set JONAS_CLASSPATH=%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_ROOT%\lib\jonas-generators-raconfig.jar;%JONAS_ROOT%\lib\client.jar;%JONAS_CLASSPATH% - -Rem --------------------------------------------- -Rem start Joram RAConfig -Rem --------------------------------------------- -echo "Target JORAM Resource Adapter: %RARJORAM%" -%JAVA% %JAVA_OPTS% -cp "%JONAS_CLASSPATH%" org.ow2.jonas.client.boot.Bootstrap org.objectweb.joram.client.connector.utils.RAConfig -rar "%RARJORAM%" -uhp %HOST% %PORT% %SERVER% -conf "%JONAS_BASE%\conf" %VERBOSE% -goto :EOF - -:setjava -echo JAVA_HOME not set. -goto :EOF - -:no_arg -echo No arguments specified. -goto usage - -:usage -echo "Usage : joram_raconfig.bat -p -h -s " -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF - -:setrar -echo "[ERROR] Cannot find a JORAM Resource Adapter file to process."; -echo "Expected locations:"; -echo " * %JONAS_BASE%\%RA_LOCATION% (newjb generated base)"; -echo " * %JONAS_BASE%\joram_ra_for_jonas.rar"; -echo "Notice that the JORAM RA is automatically placed at the right location by 'newjb' when generating a new JONAS_BASE"; -goto :EOF - -:compatibility_rar -if not exist "%JONAS_BASE%\joram_ra_for_jonas.rar" goto setrar -Set RARJORAM=%JONAS_BASE%\joram_ra_for_jonas.rar -goto joram_rar_available diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3debug.cfg b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3debug.cfg deleted file mode 100644 index b58643fade..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3debug.cfg +++ /dev/null @@ -1,33 +0,0 @@ -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -handler.tty.pattern %d : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logf : rolling file handler -# ----------------------------------------------------------------------- -#handler.logf.type RollingFile -#handler.logf.output jonas.log -#handler.logf.pattern %d : %l : %h : %O{1}.%M : %m%n -#handler.logf.fileNumber 2 -#handler.logf.maxSize 10000 - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty -#logger.root.handler.1 logf - -logger.root.level ERROR - ------- -# JORAM -#------- -logger.fr.dyade.aaa.level ERROR - -#logger.org.objectweb.joram.client.jms.Client.level DEBUG -logger.org.objectweb.joram.client.Adapter.level DEBUG diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3servers.xml b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3servers.xml deleted file mode 100644 index b4b744f581..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/a3servers.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/joramAdmin.xml b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/joramAdmin.xml deleted file mode 100644 index 69c30c599e..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/conf/joramAdmin.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-addon/joramAdminConfigForAddons.xml b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-addon/joramAdminConfigForAddons.xml deleted file mode 100644 index 681e6e85df..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-addon/joramAdminConfigForAddons.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - 0 - ${jonas.workdirectory}/s0 - ${jonas.base}/conf/addons/jms-addon/ - - - fr.dyade.aaa.util.NTransaction - false - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JCF - - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JQCF - - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JTCF - - - - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-example/joramAdminConfigExample.xml b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-example/joramAdminConfigExample.xml deleted file mode 100644 index 6e234df144..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy-example/joramAdminConfigExample.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - ra - 0 - sampleQueue - org.objectweb.joram.mom.dest.Queue - - true - true - sampleQueue - - - - ra - 0 - simpaReplyQ - org.objectweb.joram.mom.dest.Queue - - true - true - simpaReplyQ - - - - ra - 0 - sampleTopic - org.objectweb.joram.mom.dest.Topic - - true - true - sampleTopic - - - - ra - 0 - anonymous - anonymous - - - - diff --git a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy/joramAdminConfig.xml b/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy/joramAdminConfig.xml deleted file mode 100644 index 5732ca68d0..0000000000 --- a/jonas/modules/services/jms-joram/core/src/main/jonas-resources/deploy/joramAdminConfig.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - 0 - ${jonas.workdirectory}/s0 - ${jonas.base}/conf - - - fr.dyade.aaa.util.NTransaction - false - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JCF - - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JQCF - - - - - org.objectweb.joram.client.jms.tcp.TcpConnectionFactory - localhost - 16010 - JTCF - - - - - diff --git a/jonas/modules/services/jms-joram/plans/client/pom.xml b/jonas/modules/services/jms-joram/plans/client/pom.xml deleted file mode 100644 index d322e9d120..0000000000 --- a/jonas/modules/services/jms-joram/plans/client/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - jms-joram-plans - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jms-joram-client-plan - deployment-plan - JOnAS :: Services :: JMS-JORAM :: Plans :: Client - - - - org.ow2.jonas - jms-joram-server-plan - ${project.version} - deployment-plan - - - - org.ow2.joram - jndi-client - ${joram.version} - - - org.ow2.joram - joram-client-jms - ${joram.version} - - - org.ow2.joram - joram-client-jca - ${joram.version} - - - org.ow2.joram - joram-jca-jonas - ${joram.version} - rar - - - org.ow2.jonas - jonas-audit-jms - ${project.version} - - - org.ow2.jonas - joram-admin - ${project.version} - jar - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/plans/pom.xml b/jonas/modules/services/jms-joram/plans/pom.xml deleted file mode 100644 index cbdde0a80d..0000000000 --- a/jonas/modules/services/jms-joram/plans/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - jms-joram - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jms-joram-plans - pom - JOnAS :: Services :: JMS-JORAM :: Plans - - server - client - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/plans/server/pom.xml b/jonas/modules/services/jms-joram/plans/server/pom.xml deleted file mode 100644 index 705c165db2..0000000000 --- a/jonas/modules/services/jms-joram/plans/server/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - jms-joram-plans - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jms-joram-server-plan - deployment-plan - JOnAS :: Services :: JMS-JORAM :: Plans :: Server - - - - org.ow2.joram - a3-common - ${joram.version} - - - org.ow2.joram - a3-rt - ${joram.version} - - - org.objectweb.joram - jcup - ${joram.jcup.version} - - - org.ow2.joram - jndi-shared - ${joram.version} - - - org.ow2.joram - jndi-server - ${joram.version} - - - org.ow2.joram - joram-shared - ${joram.version} - - - org.ow2.joram - joram-mom-core - ${joram.version} - - - org.ow2.joram - a3-services - ${joram.version} - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/pom.xml b/jonas/modules/services/jms-joram/pom.xml deleted file mode 100644 index 02b1be3773..0000000000 --- a/jonas/modules/services/jms-joram/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jms-joram - pom - JOnAS :: Services :: JMS-JORAM - - - core - ant - addon - plans - provisionning - - diff --git a/jonas/modules/services/jms-joram/provisionning/directory-provisionning/pom.xml b/jonas/modules/services/jms-joram/provisionning/directory-provisionning/pom.xml deleted file mode 100644 index a641e03cf9..0000000000 --- a/jonas/modules/services/jms-joram/provisionning/directory-provisionning/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - provisionning - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - directory-provisionning - - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - deployment-plan - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - generate-repository - - provision-directory - - generate-resources - - target/repository2 - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/provisionning/legacy-provisionning/pom.xml b/jonas/modules/services/jms-joram/provisionning/legacy-provisionning/pom.xml deleted file mode 100644 index 0944339e78..0000000000 --- a/jonas/modules/services/jms-joram/provisionning/legacy-provisionning/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - provisionning - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - legacy-provisionning - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - generate-repository - - legacy-provision-repository - - generate-resources - - ${project.build.directory}/repository2 - false - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/provisionning/new-provisionning/pom.xml b/jonas/modules/services/jms-joram/provisionning/new-provisionning/pom.xml deleted file mode 100644 index d6ee92abd0..0000000000 --- a/jonas/modules/services/jms-joram/provisionning/new-provisionning/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - provisionning - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - new-provisionning - - - - org.ow2.jonas - jms-joram-client-plan - ${project.version} - deployment-plan - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - - generate-repository - - provision-repository - - generate-resources - - target/repository2 - false - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jms-joram/provisionning/pom.xml b/jonas/modules/services/jms-joram/provisionning/pom.xml deleted file mode 100644 index 52d28dd936..0000000000 --- a/jonas/modules/services/jms-joram/provisionning/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - jms-joram - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - provisionning - pom - - legacy-provisionning - new-provisionning - directory-provisionning - - \ No newline at end of file diff --git a/jonas/modules/services/jndi-interceptors/core/pom.xml b/jonas/modules/services/jndi-interceptors/core/pom.xml deleted file mode 100644 index ebc66b4227..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/pom.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - - - jndi-interceptors - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jndi-interceptors-core - bundle - JOnAS :: Services :: JNDI Interceptors :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.easybeans.osgi - easybeans-api - - - org.ow2.carol - carol - provided - - - org.ow2.bundles - ow2-util-xmlconfig - ${ow2-bundles.version} - provided - - - commons-modeler - commons-modeler - provided - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - provided - - - org.ow2.bundles - ow2-audit-report - ${ow2-bundles.version} - provided - - - org.ow2.bundles - ow2-util-event-impl - ${ow2-bundles.version} - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/config - jndi-interceptors-config - ${project.build.directory} - config - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/config/jndi-interceptors.xml b/jonas/modules/services/jndi-interceptors/core/src/main/config/jndi-interceptors.xml deleted file mode 100644 index 0d2c4816fc..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/config/jndi-interceptors.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/checker/impl/ResourceCheckerManager.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/checker/impl/ResourceCheckerManager.java deleted file mode 100644 index 42a230fb12..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/checker/impl/ResourceCheckerManager.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.checker.impl; - -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; - -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; - -/** - * Manager of all the resources that need to be checked. - * This kind of interceptors are called - */ -public class ResourceCheckerManager implements IResourceCheckerManager { - - /** - * Build a new Resource checker manager by using a thread local providing a list of enlisted resources. - */ - private static ThreadLocal>> resourcesThread = new ThreadLocal>>() { - protected Stack> initialValue() { - Stack> stack = new Stack>(); - List list = new ArrayList(); - stack.push(list); - return stack; - } - }; - - /** - * Push a new list on the stack. - */ - public void push() { - resourcesThread.get().push(new ArrayList()); - } - - /** - * Pop the list on the stacK. - */ - public void pop() { - resourcesThread.get().pop(); - } - - /** - * Enlist a new resource. - * @param resource the given resource that can be checked. - */ - public void enlistResource(final IResourceChecker resource) { - if (!getResourcesInternal().contains(resource)) { - getResourcesInternal().add(resource); - } - } - - /** - * Delist a resource. - * @param resource the given resource. - */ - public void delistResource(final IResourceChecker resource) { - getResourcesInternal().remove(resource); - } - - /** - * Delist all resources that are enlisted. - */ - public void delistAll() { - getResourcesInternal().clear(); - } - - /** - * Call detect method on each enlisted resource. - * @param resourceCheckerInfo some data for the resource checker - */ - public void detect(final IResourceCheckerInfo resourceCheckerInfo) { - List resourceCheckers = getResources(); - for (IResourceChecker resourceChecker : resourceCheckers) { - resourceChecker.detect(resourceCheckerInfo); - } - } - - /** - * This method has to be used only when the real list reference is required. - * @return list of resources enlisted on the current thread. - */ - private List getResourcesInternal() { - return resourcesThread.get().peek(); - } - - /** - * This method returns a copy of the internal resources list. - * @return list of resources enlisted on the current thread. - */ - public List getResources() { - return new ArrayList(getResourcesInternal()); - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/AbsContextInterceptor.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/AbsContextInterceptor.java deleted file mode 100644 index d01c071ecd..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/AbsContextInterceptor.java +++ /dev/null @@ -1,136 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl; - -import java.lang.reflect.Method; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.management.ObjectName; - -import org.ow2.carol.jndi.intercept.ContextInterceptor; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; - -/** - * Abstract class for some JOnAS context interceptors. - * @author Florent Benoit - */ -public abstract class AbsContextInterceptor implements ContextInterceptor { - - /** - * Resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - - - /** - * Regexp for the jndi name. - */ - private String jndiRegexp = ".*"; - - /** - * Regexp for the method name. - */ - private String methodsRegexp = "lookup.*"; - - /** - * Allows to filter JNDI Name in order to enable interceptor. - * @param jndiName the JNDI name used for the filter - * @return true if interceptor may be applied - */ - protected boolean filterOnJndiName(final String jndiName) { - Pattern pattern = Pattern.compile(jndiRegexp); - Matcher matcher = pattern.matcher(jndiName); - return matcher.matches(); - } - - /** - * For a given method, check if the interceptor is applied or not. - * @param method the method to check - * @return true if interceptor may be applied, else false - */ - protected boolean filterOnMethodName(final Method method) { - Pattern pattern = Pattern.compile(methodsRegexp); - Matcher matcher = pattern.matcher(method.getName()); - return matcher.matches(); - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - - /** - * @return the JNDI regexp. - */ - public String getJndiRegexp() { - return jndiRegexp; - } - - /** - * Sets the JNDI regexp. - * @param jndiRegexp the given value - */ - public void setJndiRegexp(final String jndiRegexp) { - this.jndiRegexp = jndiRegexp; - } - - /** - * @return the Method regexp. - */ - public String getMethodsRegexp() { - return methodsRegexp; - } - - /** - * Sets the Method regexp. - * @param methodsRegexp the given value - */ - public void setMethodsRegexp(final String methodsRegexp) { - this.methodsRegexp = methodsRegexp; - } - - - /** - * @param domain the domain name of the JMX Server. - * @return a different objectname for this object. - */ - public ObjectName getObjectName(final String domain) { - return null; - } - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/Interceptors.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/Interceptors.java deleted file mode 100644 index 40bbb2c38a..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/Interceptors.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.ow2.carol.jndi.intercept.ContextInterceptor; - -/** - * Defines the object that is containing all the interceptors. - * @author Florent Benoit - */ -public class Interceptors { - - /** - * List of interceptors. - */ - private List interceptors = null; - - /** - * Default constructor. - */ - public Interceptors() { - this.interceptors = new ArrayList(); - } - - /** - * Gets the list of interceptors. - * @return the list of interceptors. - */ - public List getContextInterceptors() { - return interceptors; - } - - /** - * Sets the list of interceptors. - * @param interceptors the list of interceptors. - */ - public void setContextInterceptors(final List interceptors) { - this.interceptors = interceptors; - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponent.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponent.java deleted file mode 100644 index 04437c54f2..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponent.java +++ /dev/null @@ -1,376 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2012 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl; - -import java.io.File; -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.management.ObjectName; -import javax.transaction.TransactionManager; - -import org.ow2.carol.jndi.intercept.ContextInterceptor; -import org.ow2.carol.jndi.intercept.InterceptorManager; -import org.ow2.carol.jndi.intercept.manager.SingletonInterceptorManager; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.interceptors.impl.easybeans.ResourceCheckerConfigurationExtension; -import org.ow2.jonas.jndi.interceptors.impl.easybeans.ResourceCheckerInterceptor; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; -import org.ow2.util.xmlconfig.XMLConfiguration; -import org.ow2.util.xmlconfig.XMLConfigurationException; -import org.ow2.util.xmlconfig.properties.SystemPropertyResolver; - -/** - * Component that will create and register JNDI interceptors. - * @author Florent Benoit - */ -public class JNDIInterceptorsComponent { - - /** - * Name of the XML file. - */ - public static final String XML_FILE = "jndi-interceptors.xml"; - - /** - * The name of the JONAS_BASE directory. - */ - protected static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JNDIInterceptorsComponent.class); - - /** - * Object containing the list of interceptors that have been defined. - */ - private Interceptors interceptors = null; - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Link to the interceptor manager. - */ - private InterceptorManager interceptorManager = null; - - /** - * Optional easybeans service. - */ - private IEasyBeansService easybeansService = null; - - /** - * Transaction service. - */ - private TransactionManager transactionManager = null; - - /** - * The event service used to register listeners. - */ - private IEventService eventService = null; - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * Default constructor. - */ - public JNDIInterceptorsComponent() { - this.interceptors = new Interceptors(); - - } - - /** - * Analyze the JNDI interceptors and register them. - * @throws JNDIInterceptorsComponentException if start fails. - */ - public void start() throws JNDIInterceptorsComponentException { - loadXML(); - - // Register the MBeans - jmxService.loadDescriptors(JNDIInterceptorsComponent.class.getPackage().getName(), getClass().getClassLoader()); - try { - jmxService.registerModelMBean(this, JonasObjectName.jndiInterceptors(jmxService.getDomainName())); - } catch (Exception e) { - // Continue the execution ... - logger.warn("Cannot register service MBean", e); - } - - // Register all interceptors - List contextInterceptors = interceptors.getContextInterceptors(); - for (ContextInterceptor contextInterceptor : contextInterceptors) { - registerContextInterceptor(contextInterceptor); - } - - logger.info("JNDI Interceptors component started"); - } - - - /** - * Load the XML configuration of the interceptor component. - * @throws JNDIInterceptorsComponentException if the XML file cannot be analyzed - */ - protected void loadXML() throws JNDIInterceptorsComponentException { - - // Get XML - File xmlConfigFile = new File(JONAS_BASE + File.separator + "conf" + File.separator + XML_FILE); - URL xmlconfigFileURL = URLUtils.fileToURL(xmlConfigFile); - - // Parse with XML config - XMLConfiguration xmlConfiguration = new XMLConfiguration("jndi-interceptors-mapping.xml"); - - // Set the source configurations - xmlConfiguration.addConfigurationFile(xmlconfigFileURL); - - // Resolve properties as system properties - xmlConfiguration.setPropertyResolver(new SystemPropertyResolver()); - - // Use a map for some properties - Map contextualInstances = new HashMap(); - - // Add the Resource Checker Manager as new property - contextualInstances.put("RCManager", resourceCheckerManager); - - // Add the JMXService as new property - contextualInstances.put("jmxService", jmxService); - - // Add the EventService as new property - contextualInstances.put("eventService", eventService); - - // Add the TransactionManager as new property - contextualInstances.put("transactionManager", transactionManager); - - - // Sets the contextual instances - xmlConfiguration.setContextualInstances(contextualInstances); - - // Start configuration of this object - try { - xmlConfiguration.configure(this); - } catch (XMLConfigurationException e) { - throw new JNDIInterceptorsComponentException("Cannot configure the Interceptor component", e); - } - - } - - /** - * Register the given context interceptor. - * @param contextInterceptor the interceptor - */ - protected void registerContextInterceptor(final ContextInterceptor contextInterceptor) { - logger.debug("Registering the context interceptor ''{0}''", contextInterceptor); - - // TODO: change to instance of interceptor manager but the injected - // interceptor manager in the InterceptorInitialContextFactory should be - // the same value - SingletonInterceptorManager.getInterceptorManager().registerContextInterceptor(contextInterceptor); - - try { - jmxService.registerModelMBean(contextInterceptor, getObjectName(contextInterceptor)); - } catch (Exception e) { - // Continue the execution, MBean are optional ... - logger.debug("Cannot register context interceptor MBean", e); - } - } - - /** - * Unregister the given context interceptor. - * @param contextInterceptor the interceptor - */ - protected void unregisterContextInterceptor(final ContextInterceptor contextInterceptor) { - logger.debug("Unregistering the context interceptor ''{0}''", contextInterceptor); - - SingletonInterceptorManager.getInterceptorManager().unregisterContextInterceptor(contextInterceptor); - - try { - jmxService.unregisterModelMBean(getObjectName(contextInterceptor)); - } catch (Exception e) { - // Continue the execution, MBean are optional ... - logger.debug("Cannot unregister context interceptor MBean", e); - } - - } - - /** - * @param contextInterceptor the interceptor instance - * @return the objectname built for the given interceptor - */ - protected ObjectName getObjectName(final ContextInterceptor contextInterceptor) { - ObjectName oName = JonasObjectName.jndiContextInterceptor(jmxService.getDomainName(), contextInterceptor.getClass() - .getName()); - if (contextInterceptor instanceof AbsContextInterceptor) { - ObjectName tmpName = ((AbsContextInterceptor) contextInterceptor).getObjectName(jmxService.getDomainName()); - if (tmpName != null) { - oName = tmpName; - } - } - return oName; - } - - /** - * Stop the JNDI interceptors. - * @throws JNDIInterceptorsComponentException if component cannot be stopped - */ - public void stop() throws JNDIInterceptorsComponentException { - - // Unregister the Service MBean - jmxService.unregisterModelMBean(JonasObjectName.jndiInterceptors(jmxService.getDomainName())); - - // Unregister all interceptors - List contextInterceptors = interceptors.getContextInterceptors(); - for (ContextInterceptor contextInterceptor : contextInterceptors) { - unregisterContextInterceptor(contextInterceptor); - } - - logger.info("JNDI Interceptors component stopped"); - } - - /** - * @return interceptors object that is managing the context interceptors. - */ - public Interceptors getInterceptors() { - return interceptors; - } - - /** - * Sets the interceptors manager object. - * @param interceptors the interceptors object - */ - public void setInterceptors(final Interceptors interceptors) { - this.interceptors = interceptors; - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Unset the resource checker manager. - */ - public void unsetResourceCheckerManager() { - this.resourceCheckerManager = null; - } - - /** - * Sets the interceptor manager. - * @param interceptorManager the given instance - */ - public void setInterceptorManager(final InterceptorManager interceptorManager) { - this.interceptorManager = interceptorManager; - } - - /** - * Unset the interceptor manager. - */ - public void unsetInterceptorManager() { - this.interceptorManager = null; - } - - - /** - * Sets the easybeans service. - * @param easybeansService the given instance - */ - public void setEasyBeansService(final IEasyBeansService easybeansService) { - this.easybeansService = easybeansService; - - // Get server - EZBServer server = easybeansService.getEasyBeansServer(); - - // Add global interceptor - server.getGlobalInterceptorsClasses().add(ResourceCheckerInterceptor.class); - - // register extension - ResourceCheckerConfigurationExtension extension = new ResourceCheckerConfigurationExtension(resourceCheckerManager); - server.getServerConfig().addExtensionFactory(extension); - } - - /** - * Unset the easybeans service. - */ - public void unsetEasyBeansService() { - this.easybeansService = null; - } - - - /** - * Callback invoked when an EventService becomes available. - * @param eventService the event service - */ - public void bindEventService(final IEventService eventService) { - this.eventService = eventService; - } - - /** - * Callback invoked when the used EventService becomes unavalable. - * @param eventService disposed service - */ - public void unbindEventService(final IEventService eventService) { - this.eventService = null; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param eventService the eventService to set - */ - public void setEventService(final IEventService eventService){ - this.eventService=eventService; - } - - public void setTransactionManager(final TransactionManager transactionManager) { - this.transactionManager = transactionManager; - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponentException.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponentException.java deleted file mode 100644 index 1ea312ba83..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/JNDIInterceptorsComponentException.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl; - -/** - * Exception thrown by the JNDI Interceptor Component. - * @author Florent Benoit - */ -public class JNDIInterceptorsComponentException extends Exception { - - /** - * Constructs a new exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by - * a call to {@link #initCause}. - * - * @param message the detail message. The detail message is saved for - * later retrieval by the {@link #getMessage()} method. - */ - public JNDIInterceptorsComponentException(String message) { - super(message); - } - - /** - * Constructs a new exception with the specified detail message and - * cause.

    Note that the detail message associated with - * cause is not automatically incorporated in - * this exception's detail message. - * - * @param message the detail message (which is saved for later retrieval - * by the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public JNDIInterceptorsComponentException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptor.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptor.java deleted file mode 100644 index 96967df9d4..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptor.java +++ /dev/null @@ -1,226 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.audit; - -import java.lang.management.GarbageCollectorMXBean; -import java.lang.management.ManagementFactory; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.Notification; -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBeanNotificationBroadcaster; - -import org.ow2.carol.jndi.intercept.ContextInterceptor; -import org.ow2.carol.jndi.intercept.InterceptionContext; -import org.ow2.jonas.jndi.interceptors.impl.AbsContextInterceptor; -import org.ow2.util.auditreport.api.AuditorJMXObjectNames; -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.auditreport.impl.JNDIAuditReport; -import org.ow2.util.auditreport.impl.event.Event; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.event.impl.EventDispatcher; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Context interceptor for JNDI calls. - * @author Mathieu ANCELIN - */ -public class AuditSystemContextInterceptor extends AbsContextInterceptor implements ContextInterceptor { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(AuditSystemContextInterceptor.class); - - /** - * Notification sender. - */ - private ModelMBeanNotificationBroadcaster broadcaster = null; - - /** - * The number of the notification. - */ - private long seqNumber = 0; - - /** - * The EventService - */ - private IEventService eventService; - /** - * Default constructor. - */ - public AuditSystemContextInterceptor() { - super(); - setMethodsRegexp(".*"); - } - - /** - * Intercept every JNDI call. - * @param context the interception context with data - * @return the wrapped result of the call. - * @throws Exception if interception fails - */ - public Object intercept(final InterceptionContext context) throws Exception { - long requestStart = System.nanoTime(); - // Invoke the call in order to get the result - Object obj = null; - ICurrentInvocationID currentInvocationID = CurrentInvocationID.getInstance(); - IAuditID oldID = currentInvocationID.newInvocation(); - try { - obj = context.proceed(); - } finally { - long requestStop = System.nanoTime(); - - // Do some stuff if we're interested in a given method - Method method = context.getMethod(); - - // React on all methods - if (filterOnMethodName(method)) { - - Object[] parameters = context.getParameters(); - String param = ""; - String[] params = null; - if (parameters != null && parameters.length > 0) { - param = parameters[0].toString(); - int i = 0; - params = new String[parameters.length]; - for (Object parameter : parameters) { - params[i++] = parameter.toString(); - } - } - - long totalGarbageCollections = 0; - long garbageCollectionTime = 0; - for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { - long count = gc.getCollectionCount(); - if (count >= 0) { - totalGarbageCollections += count; - } - long time = gc.getCollectionTime(); - if (time >= 0) { - garbageCollectionTime += time; - } - } - - JNDIAuditReport report = new JNDIAuditReport(System.currentTimeMillis(), context.getMethod().getName(), param, - params, Thread.currentThread(), requestStart, requestStop); - report.setMethodStackTrace(cleanupStackTrace(Thread.currentThread().getStackTrace())); - - // Sets the current ID - report.setKeyID(currentInvocationID.getAuditID().getID()); - - // reset - currentInvocationID.setAuditID(oldID); - - report.setSweepMarkTime(totalGarbageCollections); - report.setScavengeTime(garbageCollectionTime); - if(eventService == null) - { - logger.error("No eventService available for JNDI Audit interceptor"); - } - else if (report != null) { - Event event = new Event(report); - if(eventService.getDispatcher("JNDI")==null){ - EventDispatcher dispatcherJNDI = new EventDispatcher(); - dispatcherJNDI.setNbWorkers(2); - dispatcherJNDI.start(); - eventService.registerDispatcher("JNDI",dispatcherJNDI); - } - eventService.getDispatcher("JNDI").dispatch(event); - } - } - - } - // Let the Object unchanged - return obj; - } - - /** - * Cleanup the stack trace elements to ave the right stack. - * @param stackTrace the given stack - * @return the cleanup stack - */ - protected static StackTraceElement[] cleanupStackTrace(final StackTraceElement[] stackTrace) { - List cleanList = new ArrayList(); - boolean initialContextFound = false; - for (StackTraceElement stackElement : stackTrace) { - String className = stackElement.getClassName(); - if (className != null) { - // remove all the lines before the call to the initialContext class - if (className.startsWith("javax.naming.InitialContext")) { - initialContextFound = true; - } - if (initialContextFound) { - cleanList.add(stackElement); - } - } - } - return cleanList.toArray(new StackTraceElement[cleanList.size()]); - } - /** - * @param domain the domain name of the JMX Server. - * @return a different objectname for this object. - */ - @Override - public ObjectName getObjectName(final String domain) { - try { - return new ObjectName(domain + AuditorJMXObjectNames.JNDIAUDITOR_TYPE_COMPONENT + ",name=JOnAS"); - } catch (MalformedObjectNameException e) { - throw new IllegalStateException("Error while creating JNDI Audit ObjectName", e); - } catch (NullPointerException e) { - throw new IllegalStateException("Error while creating JNDI Audit ObjectName", e); - - } - } - - /** - * Sets the given broadcaster in order to send notification. - * @param broadcaster the given object - */ - public void setBroadcaster(final ModelMBeanNotificationBroadcaster broadcaster) { - this.broadcaster = broadcaster; - } - - /** - * @return the next sequence number. - */ - protected long getNextSeqNumber() { - return seqNumber++; - } - - /** - * Sets the given eventService in order to send events. - * @param eventService the given object - */ - public void setEventService(IEventService eventService){ - this.eventService=eventService; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptorAdapter.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptorAdapter.java deleted file mode 100644 index 220fb9248f..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/audit/AuditSystemContextInterceptorAdapter.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.audit; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; -import javax.management.modelmbean.InvalidTargetObjectTypeException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * Commons modeler adapter. - * @author Florent Benoit - */ -public class AuditSystemContextInterceptorAdapter extends BaseModelMBean { - - /** - * Create the mbean. - * @throws MBeanException if the super constructor fails. - */ - public AuditSystemContextInterceptorAdapter() throws MBeanException { - super(); - } - - /** - * @return the wrapped resource (managed object) - */ - protected AuditSystemContextInterceptor getManagedComponent() { - try { - return (AuditSystemContextInterceptor) getManagedResource(); - } catch (InstanceNotFoundException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (RuntimeOperationsException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (MBeanException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (InvalidTargetObjectTypeException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } - } - - /** - * Calls some operation on the wrapped object. - * @param registrationDone if registration has been done or not - */ - @Override - public void postRegister(final Boolean registrationDone) { - getManagedComponent().setBroadcaster(this); - } - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/ConnectionProxy.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/ConnectionProxy.java deleted file mode 100644 index f2b7f40073..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/ConnectionProxy.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Invocation handler that will monitor the calls to the stop() method. - * @author Florent Benoit - */ -public abstract class ConnectionProxy implements InvocationHandler { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(ConnectionProxy.class); - - /** - * Close method. - */ - private static final Method CLOSE_METHOD = ConnectionClassUtils.getCloseMethod(); - - /** - * Link to the wrapped connection. - */ - private Connection delegate = null; - - private boolean forceClose = false; - - /** - * Filtered caller stack trace. - */ - private List callerStackTrace; - - /** - * Constructor of the handler of the proxy. - * @param delegate the wrapped connection - */ - public ConnectionProxy(final Connection delegate) { - this.delegate = delegate; - initCallerStackTrace(); - } - - public void setForceClose(boolean forceClose) { - this.forceClose = forceClose; - } - - public boolean isForceClose() { - return forceClose; - } - - protected Connection delegate() { - return delegate; - } - - private void initCallerStackTrace() { - - // Get the current stack trace - StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); - - // Remove some elements of the stack trace (like - // java.lang.Thread.dumpThreads(Native Method), - // java.lang.Thread.getStackTrace(Thread.java:1383), etc) - callerStackTrace = new ArrayList(); - boolean wrapperFound = false; - for (StackTraceElement stackTraceElement : stackTraceElements) { - // Not yet found, don't add - if (wrapperFound) { - callerStackTrace.add(stackTraceElement); - } - // Matching item, add the next stack elements - if (DatasourceWrapper.class.getName().equals(stackTraceElement.getClassName()) - && "getConnection".equals(stackTraceElement.getMethodName())) { - wrapperFound = true; - } - } - } - - /** - * Intercept methods called on the connection object. - * @param proxy the proxy instance that the method was invoked on - * @param method the Method instance corresponding to the - * interface method invoked on the proxy instance. - * @param args an array of objects containing the values of the arguments - * passed in the method invocation on the proxy instance, or - * null if interface method takes no arguments. - * @return the value to return from the method invocation on the proxy - * instance. - * @throws Throwable the exception to throw from the method invocation on - * the proxy instance. - */ - public Object invoke(final Object proxy, final Method method, final Object[] args) throws SQLException, Throwable { - - // A close method is called, can remove this connection as an opened - // connection - if (CLOSE_METHOD.equals(method)) { - unregisterConnection(); - } - - // finally call the method on the object - try { - return method.invoke(delegate, args); - } catch (InvocationTargetException e) { - throw e.getTargetException(); - } - } - - protected abstract void unregisterConnection(); - - public abstract void registerConnection(); - - protected void autoCloseOrWarn(IResourceCheckerInfo resourceCheckerInfo) { - - // Print that the connection will be automatically closed - if (isForceClose()) { - logger.warn("JDBC connection not closed by the caller, close has been forced by the server. " + - "Stack trace of the getConnection() call is ''{0}''. Additional info ''{1}''", - callerStackTrace.toString().replace(",", "\n"), - resourceCheckerInfo.getCallerInfo()); - try { - delegate().close(); - } catch (SQLException e) { - logger.error("Unable to force the close of the JDBC connection", e); - } - } else { - // Connection leak but not closed automatically - logger.warn("JDBC connection not closed by the caller. " + - "Stack trace of the getConnection() call is ''{0}''. " + - "Additional info ''{1}''", - callerStackTrace.toString().replace(",", "\n"), - resourceCheckerInfo.getCallerInfo()); - } - } -} - -/** - * Helper class in order to cache close() method. - */ -final class ConnectionClassUtils { - - /** - * Utility class. - */ - private ConnectionClassUtils() { - - } - - /** - * @return the close() method - */ - public static Method getCloseMethod() { - try { - return Connection.class.getMethod("close"); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Cannot get close method on connection", e); - } - } - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptor.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptor.java deleted file mode 100644 index 951e5aaae2..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptor.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.Method; - -import javax.sql.DataSource; -import javax.transaction.TransactionManager; - -import org.ow2.carol.jndi.intercept.ContextInterceptor; -import org.ow2.carol.jndi.intercept.InterceptionContext; -import org.ow2.jonas.jndi.interceptors.impl.AbsContextInterceptor; - -/** - * Context interceptor for Datasources. - * @author Florent Benoit - */ -public class DataSourceLeakDetectorContextInterceptor extends AbsContextInterceptor implements ContextInterceptor { - - /** - * JTA Transaction Manager. - */ - private TransactionManager transactionManager; - - /** - * Defines if the connections are automatically closed or not. - */ - private boolean forceClose = true; - - /** - * Intercept the lookup on the Datasources. - * @param context the interception context with data - * @return the wrapped datasource if intercepted, else it provides the original datasource - * @throws Exception if interception fails - */ - public Object intercept(final InterceptionContext context) throws Exception { - - // Invoke the call in order to get the result - Object obj = context.proceed(); - - // Do some stuff if we're interested in a give method - Method method = context.getMethod(); - - // Only react on lookup/lookupLink methods - if (filterOnMethodName(method)) { - - // And if this is a managed JNDI name - if (filterOnJndiName(context.getParameters()[0].toString())) { - if (DataSource.class.isAssignableFrom(obj.getClass())) { - - // Cast the DS - DataSource ds = (DataSource) obj; - - // Wrap datasource - DatasourceWrapper detector = new DatasourceWrapper(ds, getResourceCheckerManager(), transactionManager); - // automatically close the connections ? - detector.setForceClose(forceClose); - - // Return our detector DataSource - return detector; - } - } - } - - // Let the Object unchanged - return obj; - } - - /** - * @return true if the connection will be automatically closed if algorithm detects that the connection is still open. - */ - public boolean isForceClose() { - return forceClose; - } - - /** - * Sets the flag for automatically closing or not the connection. - * @param forceClose the given boolean value - */ - public void setForceClose(final boolean forceClose) { - this.forceClose = forceClose; - } - - public void setTransactionManager(TransactionManager transactionManager) { - this.transactionManager = transactionManager; - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapper.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapper.java deleted file mode 100644 index 735765d57d..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapper.java +++ /dev/null @@ -1,317 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.sql.DataSource; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; - -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Wrapper of existing datasources. Each call to getConnection(*) is kept in - * order to check if close have been done when detect method is called. - * @author Florent Benoit - */ -public class DatasourceWrapper implements DataSource { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(DatasourceWrapper.class); - - /** - * Close on check ? - */ - private boolean forceClose = true; - - /** - * Wrapped datasource. - */ - private DataSource delegate = null; - - /** - * Resource Checker Manager. - */ - private IResourceCheckerManager manager; - - /** - * JTA Transaction Manager. - */ - private TransactionManager transactionManager; - - /** - * Wrap a given datasource. - * @param delegate the given datasource - * @param manager checker manager - */ - public DatasourceWrapper(DataSource delegate, - IResourceCheckerManager manager, - TransactionManager transactionManager) { - this.delegate = delegate; - this.manager = manager; - this.transactionManager = transactionManager; - } - - /** - *

    - * Attempts to establish a connection with the data source that this - * DataSource object represents. - * @return a connection to the data source - * @exception java.sql.SQLException if a database access error occurs - */ - public Connection getConnection() throws SQLException { - - // Wrap the connection - return wrapConnection(delegate.getConnection()); - } - - /** - *

    - * Attempts to establish a connection with the data source that this - * DataSource object represents. - * @param username the database user on whose behalf the connection is being - * made - * @param password the user's password - * @return a connection to the data source - * @exception SQLException if a database access error occurs - */ - public Connection getConnection(final String username, final String password) throws SQLException { - - // And then call the wrapped datasource - return wrapConnection(delegate.getConnection(username, password)); - } - - /** - * Wrap the given connection and return it to the client. - * @param connection the connection to wrap - * @return the wrapped connection - */ - protected synchronized Connection wrapConnection(final Connection connection) { - - // Wrap connection - ConnectionProxy connectionProxy = null; - if (isTransactional()) { - connectionProxy = new TransactionalConnectionProxy(connection, getTransaction()); - } else { - connectionProxy = new NonTransactionalConnectionProxy(connection, manager); - } - - connectionProxy.setForceClose(forceClose); - - // Register the proxy - connectionProxy.registerConnection(); - - // return the proxy - return (Connection) Proxy.newProxyInstance(delegate.getClass().getClassLoader(), - new Class[] {Connection.class}, connectionProxy); - } - - private boolean isTransactional() { - return getTransaction() != null; - } - - private Transaction getTransaction() { - try { - return transactionManager.getTransaction(); - } catch (SystemException e) { - throw new IllegalStateException("Cannot get current Transaction", e); - } - } - - /** - *

    - * Retrieves the log writer for this DataSource object. - *

    - * The log writer is a character output stream to which all logging and - * tracing messages for this data source will be printed. This includes - * messages printed by the methods of this object, messages printed by - * methods of other objects manufactured by this object, and so on. Messages - * printed to a data source specific log writer are not printed to the log - * writer associated with the java.sql.Drivermanager class. - * When a DataSource object is created, the log writer is - * initially null; in other words, the default is for logging to be - * disabled. - * @return the log writer for this data source or null if logging is disabled - * @exception SQLException if a database access error occurs - * @see #setLogWriter - */ - public java.io.PrintWriter getLogWriter() throws SQLException { - return delegate.getLogWriter(); - } - - /** - *

    - * Sets the log writer for this DataSource object to the given - * java.io.PrintWriter object. - *

    - * The log writer is a character output stream to which all logging and - * tracing messages for this data source will be printed. This includes - * messages printed by the methods of this object, messages printed by - * methods of other objects manufactured by this object, and so on. Messages - * printed to a data source- specific log writer are not printed to the log - * writer associated with the java.sql.Drivermanager class. - * When a DataSource object is created the log writer is - * initially null; in other words, the default is for logging to be - * disabled. - * @param out the new log writer; to disable logging, set to null - * @exception SQLException if a database access error occurs - * @see #getLogWriter - */ - public void setLogWriter(final java.io.PrintWriter out) throws SQLException { - delegate.setLogWriter(out); - } - - /** - *

    - * Sets the maximum time in seconds that this data source will wait while - * attempting to connect to a database. A value of zero specifies that the - * timeout is the default system timeout if there is one; otherwise, it - * specifies that there is no timeout. When a DataSource object - * is created, the login timeout is initially zero. - * @param seconds the data source login time limit - * @exception SQLException if a database access error occurs. - * @see #getLoginTimeout - */ - public void setLoginTimeout(final int seconds) throws SQLException { - delegate.setLoginTimeout(seconds); - } - - /** - * Gets the maximum time in seconds that this data source can wait while - * attempting to connect to a database. A value of zero means that the - * timeout is the default system timeout if there is one; otherwise, it - * means that there is no timeout. When a DataSource object is - * created, the login timeout is initially zero. - * @return the data source login time limit - * @exception SQLException if a database access error occurs. - * @see #setLoginTimeout - */ - public int getLoginTimeout() throws SQLException { - return delegate.getLoginTimeout(); - } - - /** - * Method implemented by some datasources. - * @return the optional mapper name - */ - public String getMapperName() { - Method getMapperNameMethod = null; - try { - getMapperNameMethod = delegate.getClass().getMethod("getMapperName"); - } catch (NoSuchMethodException e) { - return null; - } - try { - return (String) getMapperNameMethod.invoke(delegate); - } catch (IllegalAccessException e) { - return null; - } catch (InvocationTargetException e) { - return null; - } - - } - - /** - * Sets the flag for automatically closing or not the connection. - * @param forceClose the given boolean value - */ - public void setForceClose(final boolean forceClose) { - this.forceClose = forceClose; - } - - - - /** - * Change equals method to use the equals on the underlying wrapped object. - * For example jorm is comparing the datasource objects and if they're different, some merge is not occuring. - * @param other the other object to compare - * @return true if objects are equals. - */ - @Override - public boolean equals(final Object other) { - if (this == delegate) { - return true; - } - if ((other == null) || (other.getClass() != this.getClass())) { - return false; - } - DatasourceWrapper otherDatasource = (DatasourceWrapper) other; - return delegate.equals(otherDatasource.delegate); - } - - /** - * @return the hashCode of the wrapped object. - */ - @Override - public int hashCode() { - return delegate.hashCode(); - } - - /** - * Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. - * Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result - * of recursively calling isWrapperFor on the wrapped object. If this does not implement the interface and is not a wrapper, - * return false. This method should be implemented as a low-cost operation compared to unwrap so that callers can use this method - * to avoid expensive unwrap calls that may fail. If this method returns true then calling unwrap with the same argument should succeed. - * @param iface a Class defining an interface. - * @returns true if this implements the interface or directly or indirectly wraps an object that does. - * @throws SQLException if an error occurs while determining whether this is a wrapper for an object with the given interface. - */ - public boolean isWrapperFor(Class iface) throws SQLException { - return delegate.isWrapperFor(iface); - } - - /** - * Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. - * If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper - * and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. - * Otherwise return the the result of calling unwrap recursively on the wrapped object or a proxy for that result. - * If the receiver is not a wrapper and does not implement the interface, then an SQLException is thrown. - * @param iface A Class defining an interface that the result must implement. - * @returns an object that implements the interface. May be a proxy for the actual implementing object. - * @throws SQLException If no object found that implements the interface - */ - public T unwrap(Class iface) throws SQLException { - return delegate.unwrap(iface); - } - - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxy.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxy.java deleted file mode 100644 index 696026639d..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxy.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Arrays; - -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * A {@code NonTransactionalConnectionProxy} is ... - * - * @author Guillaume Sauthier - */ -public class NonTransactionalConnectionProxy extends ConnectionProxy implements IResourceChecker { - - /** - * Resource checker manager. - */ - private IResourceCheckerManager manager; - - /** - * Constructor of the handler of the proxy. - * - * @param delegate the wrapped connection - * @param manager resource manager - */ - public NonTransactionalConnectionProxy(final Connection delegate, final IResourceCheckerManager manager) { - super(delegate); - this.manager = manager; - } - - @Override - protected void unregisterConnection() { - // Delist this checker from available resources - manager.delistResource(this); - } - - public void detect(IResourceCheckerInfo resourceCheckerInfo) { - autoCloseOrWarn(resourceCheckerInfo); - unregisterConnection(); - } - - @Override - public void registerConnection() { - // Enlist a ResourceChecker just for this Connection - manager.enlistResource(this); - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxy.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxy.java deleted file mode 100644 index 518596b035..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxy.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.sql.Connection; - -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.Synchronization; -import javax.transaction.SystemException; -import javax.transaction.Transaction; - -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.checker.api.ResourceCheckpoints; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * A {@code TransactionalConnectionProxy} is ... - * - * @author Guillaume Sauthier - */ -public class TransactionalConnectionProxy extends ConnectionProxy implements Synchronization { - - /** - * Associated transaction at the time of opening. - */ - private Transaction transaction; - - private boolean isClosed = false; - - /** - * Constructor of the handler of the proxy. - * - * @param delegate the wrapped connection - * @param transaction associated transaction - */ - public TransactionalConnectionProxy(final Connection delegate, final Transaction transaction) { - super(delegate); - this.transaction = transaction; - } - - @Override - protected void unregisterConnection() { - this.isClosed = true; - } - - @Override - public void registerConnection() { - try { - transaction.registerSynchronization(this); - } catch (RollbackException e) { - // Ignored - } catch (SystemException e) { - // Ignored - } - } - - public void beforeCompletion() { } - - public void afterCompletion(int status) { - - if (!isClosed) { - - IResourceCheckerInfo info = null; - switch (status) { - case Status.STATUS_COMMITTED: - info = new TransactionalCheckerInfo(ResourceCheckpoints.TRANSACTION_COMMITTED, transaction); - break; - case Status.STATUS_ROLLEDBACK: - info = new TransactionalCheckerInfo(ResourceCheckpoints.TRANSACTION_ROLLEDBACK, transaction); - break; - } - - // info may be null for all other status - if (info != null) { - autoCloseOrWarn(info); - } - - } // else the connection was closed by caller, no check to do - } - - /** - * Store information bound to a given transactional context. - */ - private class TransactionalCheckerInfo implements IResourceCheckerInfo { - - private ResourceCheckpoints checkpoint; - private Transaction transaction; - - public TransactionalCheckerInfo(ResourceCheckpoints checkpoint, Transaction transaction) { - this.checkpoint = checkpoint; - this.transaction = transaction; - } - - public ResourceCheckpoints getCheckPoint() { - return checkpoint; - } - - public String getCallerInfo() { - return transaction.toString(); - } - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerConfigurationExtension.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerConfigurationExtension.java deleted file mode 100644 index 37ec48bdf5..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerConfigurationExtension.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.easybeans; - -import org.ow2.easybeans.api.EZBContainerConfig; -import org.ow2.easybeans.api.EZBContainerLifeCycleCallback; -import org.ow2.easybeans.api.LifeCycleCallbackException; -import org.ow2.easybeans.api.EZBContainerCallbackInfo; -import org.ow2.easybeans.api.binding.EZBRef; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; - -/** - * Allows to register some extensions - * @author Florent Benoit - */ -public class ResourceCheckerConfigurationExtension implements org.ow2.easybeans.api.EZBConfigurationExtension, EZBContainerLifeCycleCallback { - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - - /** - * Build an extension for the given checker manager. - * @param resourceCheckerManager the given manager - */ - public ResourceCheckerConfigurationExtension(IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Adapt the given configuration. - * @param containerConfig JContainerConfig instance. - */ - public void configure(EZBContainerConfig containerConfig) { - containerConfig.addCallback(this); - - } - - /** - * Called when container is starting. - * @param info some information on the container which is starting. - * @throws LifeCycleCallbackException if the invocation of the callback failed - */ - public void start(EZBContainerCallbackInfo info) throws LifeCycleCallbackException { - info.getContainer().addExtension(IResourceCheckerManager.class, resourceCheckerManager); - } - - /** - * Called when container is stopping. - * @param info some information on the container which is stopping. - * @throws LifeCycleCallbackException if the invocation of the callback failed - */ - public void stop(EZBContainerCallbackInfo info) throws LifeCycleCallbackException { - - } - - /** - * Called before binding a reference into the registry. - * @param info some information on the container which is running. - * @param reference a reference on the bean that will be bound - * @throws LifeCycleCallbackException if the invocation of the callback failed - */ - public void beforeBind(EZBContainerCallbackInfo info, EZBRef reference) throws LifeCycleCallbackException { - - } - - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerInterceptor.java b/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerInterceptor.java deleted file mode 100644 index 3a8e81960b..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/java/org/ow2/jonas/jndi/interceptors/impl/easybeans/ResourceCheckerInterceptor.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jndi.interceptors.impl.easybeans; - -import java.util.List; -import java.util.ArrayList; - -import javax.interceptor.InvocationContext; - -import org.ow2.easybeans.api.EasyBeansInterceptor; -import org.ow2.easybeans.api.EasyBeansInvocationContext; -import org.ow2.easybeans.api.bean.EasyBeansSFSB; -import org.ow2.easybeans.api.Factory; -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.checker.api.ResourceCheckpoints; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; - -/** - * Interceptors that will check if all resources have been closed. - * @author Florent Benoit - */ -public class ResourceCheckerInterceptor implements EasyBeansInterceptor { - - - /** - * Keep a list of resources for stateful beans. - */ - private List resources = null; - - - /** - * Keep a list of resources for stateful beans. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Default constructor. - */ - public ResourceCheckerInterceptor() { - this.resources = new ArrayList(); - } - - /** - * Defines the interceptor schema of EasyBeans interceptors. - * @param invocationContext context with useful attributes on the current - * invocation - * @return result of the next invocation (to chain interceptors) - * @throws Exception if interceptor fails - */ - public Object intercept(EasyBeansInvocationContext invocationContext) throws Exception { - // Get target - Object target = invocationContext.getTarget(); - Factory factory = invocationContext.getFactory(); - - // Needs to get the resource checker manager - if (resourceCheckerManager == null) { - resourceCheckerManager = factory.getContainer().getExtension(IResourceCheckerManager.class); - } - - // Push a new list - if (resourceCheckerManager != null) { - resourceCheckerManager.push(); - } - - // Stateful ? - EasyBeansSFSB statefulBean = null; - if (target instanceof EasyBeansSFSB) { - statefulBean = (EasyBeansSFSB) target; - } - - // restore resources for stateful - if (resourceCheckerManager != null) { - if (statefulBean != null) { - for (IResourceChecker resource : resources) { - resourceCheckerManager.getResources().add(resource); - } - } - } - - // Call the next operation - try { - return invocationContext.proceed(); - } finally { - // Stateful ? keep resources - if (statefulBean != null) { - if (resourceCheckerManager != null) { - List managerResources = resourceCheckerManager.getResources(); - for (IResourceChecker managerResource : managerResources) { - if (!this.resources.contains(managerResource)) { - this.resources.add(managerResource); - } - } - } - - // instance removed ? perform the check - if (statefulBean.getEasyBeansRemoved()) { - for (IResourceChecker resource : resources) { - resource.detect(new EJBResourceCheckerInfo(factory, ResourceCheckpoints.EJB_PRE_DESTROY)); - } - } - - } else { - if (resourceCheckerManager != null) { - resourceCheckerManager.detect(new EJBResourceCheckerInfo(factory, ResourceCheckpoints.EJB_POST_INVOKE)); - } - } - // pop resources - if (resourceCheckerManager != null) { - resourceCheckerManager.pop(); - } - } - } - -} - - -/** - * Checker info for EJB. - * @author Florent Benoit - */ -class EJBResourceCheckerInfo implements IResourceCheckerInfo { - - /** - * Caller info. - */ - private String callerInfo = null; - - /** - * Check point. - */ - private ResourceCheckpoints checkPoint = null; - - /** - * Build a checker info object based on the given request. - * @param factory the given invocation context factory - * @param checkPoint the given resource check point - */ - public EJBResourceCheckerInfo(final Factory factory, final ResourceCheckpoints checkPoint) { - this.callerInfo = factory.getContainer().getArchive() + ", Bean = " + factory.getBeanInfo().getName(); - this.checkPoint = checkPoint; - } - - /** - * Build a checker info object based on the given request. - * @param checkPoint the given resource check point - */ - public EJBResourceCheckerInfo(final ResourceCheckpoints checkPoint) { - this.callerInfo = "None"; - this.checkPoint = checkPoint; - } - - /** - * @return checkpoint of the caller. - */ - public ResourceCheckpoints getCheckPoint() { - return checkPoint; - } - - /** - * @return data for identifying the current caller (EJB Name, Servlet Name, etc) - */ - public String getCallerInfo() { - return callerInfo; - } - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/resources/META-INF/jndi-interceptors-core.bnd b/jonas/modules/services/jndi-interceptors/core/src/main/resources/META-INF/jndi-interceptors-core.bnd deleted file mode 100644 index ff623cf141..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/resources/META-INF/jndi-interceptors-core.bnd +++ /dev/null @@ -1,44 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2009 France Telecom R&D -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.jndi.checker.impl, \ - org.ow2.jonas.jndi.interceptors.impl - -# o.o.j.j.i.i.mapping package does not exist, but it is required to export it -Export-Package org.ow2.jonas.jndi.interceptors.impl.mapping, \ - org.ow2.jonas.jndi.interceptors.impl.datasource, \ - org.ow2.jonas.jndi.interceptors.impl.easybeans, \ - org.ow2.jonas.jndi.interceptors.impl.audit - -Import-Package org.ow2.easybeans.persistence.api,\ - org.ow2.util.archive.api,\ - javax.naming,\ - org.ow2.easybeans.api.naming,\ - org.ow2.easybeans.resolver.api,\ - org.ow2.util.ee.deploy.api.deployable,\ - org.ow2.util.auditreport.impl.*,\ - * - -DynamicImport-Package * - diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/resources/metadata.xml b/jonas/modules/services/jndi-interceptors/core/src/main/resources/metadata.xml deleted file mode 100644 index e595f85c4d..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mapping/jndi-interceptors-mapping.xml b/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mapping/jndi-interceptors-mapping.xml deleted file mode 100644 index 53cde315e9..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mapping/jndi-interceptors-mapping.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mbeans-descriptors.xml b/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mbeans-descriptors.xml deleted file mode 100644 index 43495abb83..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/main/resources/org/ow2/jonas/jndi/interceptors/impl/mbeans-descriptors.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptorTestCase.java b/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptorTestCase.java deleted file mode 100644 index 4c7c96e9b2..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DataSourceLeakDetectorContextInterceptorTestCase.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.Method; - -import javax.naming.Context; -import javax.sql.DataSource; - -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.ow2.carol.jndi.intercept.InterceptionContext; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; - -/** - * A {@code DataSourceLeakDetectorContextInterceptorTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class DataSourceLeakDetectorContextInterceptorTestCase { - - @Mock - private IResourceCheckerManager manager; - - @Mock - private InterceptionContext context; - - @Mock - private DataSource dataSource; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testDataSourceWrapping() throws Exception { - - when(context.proceed()).thenReturn(dataSource); - when(context.getMethod()).thenReturn(method(Context.class, "lookup", String.class)); - when(context.getParameters()).thenReturn(new Object[] {"unused-jndi-name"}); - - DataSourceLeakDetectorContextInterceptor interceptor = new DataSourceLeakDetectorContextInterceptor(); - interceptor.setResourceCheckerManager(manager); - - Object o = interceptor.intercept(context); - assertEquals(o.getClass(), DatasourceWrapper.class); - } - - private static Method method(Class type, String method, Class... types) { - try { - return type.getMethod(method, types); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Cannot get method on type", e); - } - } - -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapperTestCase.java b/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapperTestCase.java deleted file mode 100644 index 6da1edda21..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/DatasourceWrapperTestCase.java +++ /dev/null @@ -1,266 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.io.PrintWriter; -import java.sql.Connection; -import java.sql.SQLException; - -import javax.sql.DataSource; -import javax.transaction.TransactionManager; - -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; - -/** - * A {@code DatasourceWrapperTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class DatasourceWrapperTestCase { - - @Mock - private DataSource delegate; - - @Mock - private IResourceCheckerManager manager; - - @Mock - private TransactionManager transactionManager; - - @Mock - private Connection connection; - - @Mock - private IResourceCheckerInfo info; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testGetConnectionEnlistsTheResourceAndReturnsAProxiedConnection() throws Exception { - when(delegate.getConnection()).thenReturn(connection); - - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - - Connection proxy = wrapper.getConnection(); - - verify(manager).enlistResource(any(IResourceChecker.class)); - - proxy.commit(); - verify(connection).commit(); - - } - - @Test - public void testGetConnectionWithUsernamePasswordEnlistsTheResourceAndReturnsAProxiedConnection() throws Exception { - when(delegate.getConnection("john", "doe")).thenReturn(connection); - - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - - Connection proxy = wrapper.getConnection("john", "doe"); - - verify(manager).enlistResource(any(IResourceChecker.class)); - - proxy.commit(); - verify(connection).commit(); - - } - - @Test - public void testThatResourceCheckerActuallyClosesTheConnectionWhenForced() throws Exception { - when(delegate.getConnection()).thenReturn(connection); - - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.setForceClose(true); - - wrapper.getConnection(); - - ArgumentCaptor captor = ArgumentCaptor.forClass(IResourceChecker.class); - verify(manager).enlistResource(captor.capture()); - - captor.getValue().detect(info); - verify(connection).close(); - verify(manager).delistResource(captor.getValue()); - - } - - @Test - public void testThatResourceCheckerDoesNotClosesTheConnectionWhenNotForcedTo() throws Exception { - when(delegate.getConnection()).thenReturn(connection); - - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.setForceClose(false); - - wrapper.getConnection(); - - ArgumentCaptor captor = ArgumentCaptor.forClass(IResourceChecker.class); - verify(manager).enlistResource(captor.capture()); - - captor.getValue().detect(info); - verifyZeroInteractions(connection); - verify(manager).delistResource(captor.getValue()); - - } - - @Test - public void testGetLogWriterIsDelegated() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.getLogWriter(); - verify(delegate).getLogWriter(); - } - - @Test - public void testSetLogWriter() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.setLogWriter(null); - verify(delegate).setLogWriter(null); - } - - @Test - public void testSetLoginTimeout() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.setLoginTimeout(10); - verify(delegate).setLoginTimeout(10); - } - - @Test - public void testGetLoginTimeout() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.getLoginTimeout(); - verify(delegate).getLoginTimeout(); - } - - @Test - public void testGetMapperName() throws Exception { - MockDataSource ds = newDelegate(); - DatasourceWrapper wrapper = new DatasourceWrapper(ds, manager, transactionManager); - assertEquals(wrapper.getMapperName(), "UnderTest"); - } - - private MockDataSource newDelegate() { - return new MockDataSource(); - } - - @Test - public void testEqualsSameObject() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - assertTrue(wrapper.equals(wrapper)); - } - - @Test - public void testEqualsSameUnderlyingObject() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - DatasourceWrapper wrapper2 = new DatasourceWrapper(delegate, manager, transactionManager); - assertTrue(wrapper.equals(wrapper2)); - } - - @Test - public void testEqualsDifferentUnderlyingObjects() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - DatasourceWrapper wrapper2 = new DatasourceWrapper(mock(DataSource.class), manager, transactionManager); - assertFalse(wrapper.equals(wrapper2)); - } - - @Test - public void testHashCode() throws Exception { - - } - - @Test - public void testIsWrapperFor() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.isWrapperFor(Integer.class); - verify(delegate).isWrapperFor(Integer.class); - } - - @Test - public void testUnwrap() throws Exception { - DatasourceWrapper wrapper = new DatasourceWrapper(delegate, manager, transactionManager); - wrapper.unwrap(Integer.class); - verify(delegate).unwrap(Integer.class); - - } - - private class MockDataSource implements DataSource { - - boolean getMapperNameCalled = false; - - public String getMapperName() { - getMapperNameCalled = true; - return "UnderTest"; - } - - public Connection getConnection() throws SQLException { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public Connection getConnection(String s, String s1) throws SQLException { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public PrintWriter getLogWriter() throws SQLException { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public void setLogWriter(PrintWriter printWriter) throws SQLException { - //To change body of implemented methods use File | Settings | File Templates. - } - - public void setLoginTimeout(int i) throws SQLException { - //To change body of implemented methods use File | Settings | File Templates. - } - - public int getLoginTimeout() throws SQLException { - return 0; //To change body of implemented methods use File | Settings | File Templates. - } - - public T unwrap(Class tClass) throws SQLException { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public boolean isWrapperFor(Class aClass) throws SQLException { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxyTestCase.java b/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxyTestCase.java deleted file mode 100644 index e8d7e1808d..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/NonTransactionalConnectionProxyTestCase.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.Method; -import java.sql.Connection; - -import javax.transaction.Status; -import javax.transaction.Synchronization; - -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.checker.api.ResourceCheckpoints; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; - -/** - * A {@code NonTransactionalConnectionProxyTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class NonTransactionalConnectionProxyTestCase { - - @Mock - private Connection delegate; - - @Mock - private IResourceCheckerManager manager; - - @Mock - private IResourceChecker checker; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testCloseDelistTheResource() throws Throwable { - NonTransactionalConnectionProxy proxy = new NonTransactionalConnectionProxy(delegate, manager); - proxy.registerConnection(); - - verify(manager).enlistResource(proxy); - - proxy.invoke(null, ConnectionClassUtils.getCloseMethod(), null); - - verify(manager).delistResource(proxy); - verify(delegate).close(); - } - - @Test - public void testThatNotClosedProxiedConnectionWillBeClosedWhenDetectionIsPerformed() throws Throwable { - NonTransactionalConnectionProxy proxy = new NonTransactionalConnectionProxy(delegate, manager); - proxy.setForceClose(true); - proxy.registerConnection(); - - verify(manager).enlistResource(proxy); - - proxy.detect(new EmptyCheckerInfo()); - - verify(delegate).close(); - } - - - private static class EmptyCheckerInfo implements IResourceCheckerInfo { - public ResourceCheckpoints getCheckPoint() { - return ResourceCheckpoints.EJB_POST_INVOKE; - } - - public String getCallerInfo() { - return "test"; - } - } -} diff --git a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxyTestCase.java b/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxyTestCase.java deleted file mode 100644 index 5109d2c390..0000000000 --- a/jonas/modules/services/jndi-interceptors/core/src/test/java/org/ow2/jonas/jndi/interceptors/impl/datasource/TransactionalConnectionProxyTestCase.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.jndi.interceptors.impl.datasource; - -import java.lang.reflect.Method; -import java.sql.Connection; -import java.util.concurrent.SynchronousQueue; - -import javax.net.ssl.SSLEngineResult; -import javax.transaction.Status; -import javax.transaction.Synchronization; -import javax.transaction.Transaction; - -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.ow2.jonas.jndi.checker.api.IResourceChecker; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.verifyZeroInteractions; - -/** - * A {@code NonTransactionalConnectionProxyTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class TransactionalConnectionProxyTestCase { - - @Mock - private Connection delegate; - - @Mock - private Transaction transaction; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testCloseDelistTheResource() throws Throwable { - TransactionalConnectionProxy proxy = new TransactionalConnectionProxy(delegate, transaction); - proxy.setForceClose(true); - proxy.registerConnection(); - - ArgumentCaptor captor = ArgumentCaptor.forClass(Synchronization.class); - verify(transaction).registerSynchronization(captor.capture()); - - // Closing the Connection by hand ... - proxy.invoke(null, ConnectionClassUtils.getCloseMethod(), null); - // ... will close the delegate connection - verify(delegate).close(); - - // When the transaction terminate, Synchronization is called - captor.getValue().afterCompletion(Status.STATUS_COMMITTED); - verifyNoMoreInteractions(delegate); - } - - @Test - public void testThatNotClosedProxiedConnectionWillBeClosedWhenTransactionIsCommitted() throws Throwable { - TransactionalConnectionProxy proxy = new TransactionalConnectionProxy(delegate, transaction); - proxy.setForceClose(true); - proxy.registerConnection(); - - ArgumentCaptor captor = ArgumentCaptor.forClass(Synchronization.class); - verify(transaction).registerSynchronization(captor.capture()); - - // When the transaction terminate, Synchronization is called - captor.getValue().afterCompletion(Status.STATUS_COMMITTED); - verify(delegate).close(); - } - -} diff --git a/jonas/modules/services/jndi-interceptors/pom.xml b/jonas/modules/services/jndi-interceptors/pom.xml deleted file mode 100644 index aa6c6afaaa..0000000000 --- a/jonas/modules/services/jndi-interceptors/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jndi-interceptors - pom - JOnAS :: Services :: JNDI Interceptors - - core - - diff --git a/jonas/modules/services/jonas-addon/core/pom.xml b/jonas/modules/services/jonas-addon/core/pom.xml deleted file mode 100644 index c397fc4a57..0000000000 --- a/jonas/modules/services/jonas-addon/core/pom.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - jonas-addon - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - org.ow2.jonas - jonas-addon-core - JOnAS :: Services :: JOnAS Addon :: Core - bundle - - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.bundles - ow2-util-ee-deploy-api - provided - - - org.ow2.jonas - jonas-version - ${project.version} - provided - - - org.ow2.jonas - bootstrap-core-for-addons - ${project.version} - provided - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - jonas-addon-xsd-v1-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb/jonas-addon/1.0 - src/main/resources/META-INF - - jonas-addon-1.0.xsd - - org.ow2.jonas.addon.deploy.jonasaddon.v1.generated - true - true - true - true - - - -npa - - - - - - - - - diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/cleaner/AddonCleanTask.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/cleaner/AddonCleanTask.java deleted file mode 100644 index 82f3d6816f..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/cleaner/AddonCleanTask.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.cleaner; - -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployer; -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS Addon clean task class. - * @author Jeremy Cazaux - */ -public class AddonCleanTask extends AbsCleanTask { - - /** - * The addon deployer - */ - private IAddonDeployer addonDeployer; - - /** - * The deployer log - */ - private IDeployerLog deployerLog; - - /** - * Default constructor - * @param addonDeployer The addon deployer - * @param deployerLog The deployer log - */ - public AddonCleanTask(final IAddonDeployer addonDeployer, final IDeployerLog deployerLog) { - this.addonDeployer = addonDeployer; - this.deployerLog = deployerLog; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - return this.addonDeployer.isAddonDeployedByWorkName(logEntry.getCopy().getName()); - } - - /** - * {@inheritDoc} - */ - @Override - public IDeployerLog getDeployerLog() { - return this.deployerLog; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/config/AddonConfigImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/config/AddonConfigImpl.java deleted file mode 100644 index aee9ea2d79..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/config/AddonConfigImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.config; - -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; - -import java.io.File; - -/** - * Allow to retrieve configuration files of an Addon - * @author Jeremy Cazaux - */ -public class AddonConfigImpl implements IAddonConfig { - - /** - * Represents the configuration directory of an addon - */ - private File confDirectory; - - /** - * Default constructor - * @param configurationDirectory The path to the configuration directory - * @throws Exception - */ - public AddonConfigImpl(final String configurationDirectory) throws Exception { - File file = new File(configurationDirectory); - if (!(file.exists() && file.isDirectory())) { - throw new Exception("Error. Directory " + configurationDirectory + " doesn't exist"); - } - this.confDirectory = file; - } - - /** - * {@inheritDoc} - */ - public File getConfigurationFile(final String fileName) { - File confFile = new File(this.confDirectory, fileName); - if (confFile != null && confFile.exists()) { - return confFile; - } else { - return null; - } - } - - /** - * {@inheritDoc} - */ - public File getConfigurationDirectory() { - return this.confDirectory; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/AddonDeployableImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/AddonDeployableImpl.java deleted file mode 100644 index 2bb06b2fa0..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/AddonDeployableImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployable; - -import org.ow2.jonas.addon.deploy.api.deployable.IAddonDeployable; -import org.ow2.jonas.addon.deploy.api.deployable.ISortableDeployable; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.ee.deploy.impl.deployable.AbsDeployable; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents an Addon Deployable - * @author Jeremy Cazaux - */ -public class AddonDeployableImpl extends AbsDeployable implements IAddonDeployable { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonDeployableImpl.class); - - /** - * List of deployables - */ - private List deployables = null; - - /** - * Defines and create a deployable for the given archive. - * @param archive the given archive. - */ - public AddonDeployableImpl(final IArchive archive) { - super(archive); - this.deployables = new ArrayList(); - } - - /** - * @return the list of deployables of this deployable addon - */ - public List getDeployables() { - return deployables; - } - - /** - * @param sortableDeployable Sortable deployable to add to the persistent sortable deployable list - */ - public void addDeployable(final ISortableDeployable sortableDeployable) { - this.deployables.add(sortableDeployable); - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployable.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployable.java deleted file mode 100644 index 24c5297206..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployable.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployable; - -import org.ow2.jonas.addon.deploy.api.deployable.ISortableDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; - -/** - * Class that stores a file and the associated deployable and that can be - * sorted - */ -public class SortableDeployable implements ISortableDeployable { - - /** - * A deployable - */ - private IDeployable deployable; - - /** - * Priority - */ - private Integer priority; - - /** - * Default constructor - * @param deployable The deployable - * @param priority The priority to affect to the deployable (for deployment and undeployment) - */ - public SortableDeployable(final IDeployable deployable, final Integer priority) { - this.deployable = deployable; - this.priority = priority; - } - - /** - * @return the priority of the deployable - */ - public Integer getPriority() { - return priority; - } - - /** - * @return the deployable - */ - public IDeployable getDeployable() { - return deployable; - } - - /** - * @param deployable The deployable to set - */ - public void setDeployable(final IDeployable deployable) { - this.deployable = deployable; - } - - /** - * @param priority The priority of the deployable - */ - public void setPriority(final Integer priority) { - this.priority = priority; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployableComparator.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployableComparator.java deleted file mode 100644 index b5d8fa72d3..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployable/SortableDeployableComparator.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployable; - -import org.ow2.jonas.addon.deploy.api.deployable.ISortableDeployable; -import org.ow2.jonas.addon.deploy.impl.util.AddonUtil; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; - -import java.io.Serializable; -import java.util.Comparator; -import java.util.regex.Pattern; - -/** - * This class represents a comparator for ResourceOrderPreference Class - * @author Jeremy Cazaux - */ -public class SortableDeployableComparator implements Serializable, Comparator { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(SortableDeployableComparator.class); - - /** - * @param sortableDeployable1 The first deployable to compare - * @param sortableDeployable2 The second deployable to compare - * @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater - * than the second. - */ - public int compare(final ISortableDeployable sortableDeployable1, final ISortableDeployable sortableDeployable2) { - - if (sortableDeployable1.getPriority() > sortableDeployable2.getPriority()) { - return 1; - } else if (sortableDeployable1.getPriority() < sortableDeployable2.getPriority()) { - return -1; - } else { - - IDeployable deployable1 = sortableDeployable1.getDeployable(); - IDeployable deployable2 = sortableDeployable2.getDeployable(); - - //if deployable 1 & 2 are instance of DeploymentPlanDeployable, we check the type of deployment plan - //Abstract deployment plan have the higthest priority - if (deployable1 instanceof DeploymentPlanDeployable && - deployable2 instanceof DeploymentPlanDeployable) { - - //Pattern for abstract deployment plan - Pattern pattern = Pattern.compile(".*" + AddonUtil.DASH + AddonUtil.ABSTRACT_DEPLOYMENT_PLAN_KEY + - AddonUtil.XML_EXTENSION); - - Boolean isAbstractDeploymentPlan1 = pattern.matcher(deployable1.getShortName()).matches(); - Boolean isAbstractDeploymentPlan2 = pattern.matcher(deployable2.getShortName()).matches(); - - if (isAbstractDeploymentPlan1 && !isAbstractDeploymentPlan2) - return -1; - else if (!isAbstractDeploymentPlan1 && isAbstractDeploymentPlan2) { - return 1; - } else { - return 0; - } - } else { - return 0; - } - } - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonDeployerImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonDeployerImpl.java deleted file mode 100644 index 8107a96e5a..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonDeployerImpl.java +++ /dev/null @@ -1,1044 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployer; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.Version; -import org.ow2.jonas.addon.deploy.api.deployable.IAddonDeployable; -import org.ow2.jonas.addon.deploy.api.deployable.ISortableDeployable; -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployer; -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployerLog; -import org.ow2.jonas.addon.deploy.api.util.IAddonLogEntry; -import org.ow2.jonas.addon.deploy.api.util.IAddonStructure; -import org.ow2.jonas.addon.deploy.impl.deployable.AddonDeployableImpl; -import org.ow2.jonas.addon.deploy.impl.util.AddonUtil; -import org.ow2.jonas.lib.work.LogEntryImpl; -import org.ow2.jonas.management.ServiceManager; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.properties.ServiceProperties; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.OSGiDeployable; -import org.ow2.util.ee.deploy.api.deployable.UnknownDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.ee.deploy.api.report.IDeploymentReport; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.exceptions.InvalidRepositoryException; -import org.ow2.util.plan.bindings.repository.Repository; -import org.ow2.util.plan.bindings.repository.RepositoryKind; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; -import org.ow2.util.plan.repository.api.IRepositoryManager; -import org.ow2.util.plan.repository.api.RepositoryIdCollisionException; -import org.ow2.util.url.URLUtils; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -/** - * Represents an Addon Deployer - * @author Jeremy Cazaux - */ -public class AddonDeployerImpl extends AbsDeployer implements IAddonDeployer { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonDeployerImpl.class); - - /** - * Server properties - */ - private ServerProperties serverProperties; - - /** - * The DeployableHelper which analyze an archive and build the associated Deployable object - */ - private IDeployableHelper deployableHelper; - - /** - * List of deployed addons. - */ - private Map addons = null; - - /** - * Addons log - */ - private IAddonDeployerLog deployerLog; - - /** - * Log for the work cleaner service - */ - private IDeployerLog workCleanerLog; - - /** - * The deployer manager - */ - private IDeployerManager deployerManager; - - /* - * The list of deployed addon names - */ - private List deployedAddonNames; - - /** - * OSGi bundle context - */ - private BundleContext bundleContext; - - /** - * Configuration deployer - */ - private ConfDeployerImpl confDeployer; - - /** - * The service manager. - * Use to start / stop JOnAS services - */ - private ServiceManager serviceManager; - - /** - * True if the adon deployer is initialized - */ - private boolean isInitialized; - - /** - * List of OSGi service registration of ServiceProperties instance - */ - private List serviceRegistrations; - - /** - * Multitenant service - */ - private MultitenantService multitenantService; - - /** - * Repository manager - */ - private IRepositoryManager repositoryManager; - - /** - * List of repositories of each addons - */ - private Map repositories; - - /** - * The property name to register a new ServiceProperties component as an OSGi service - */ - public final String SERVICE_REGISTRATION_SERVICE_PROPERTY = "service"; - - /** - * The XSD for the addon metadata file - */ - public static final String XSD_RESOURCE = "/META-INF/jonas-addon-1.0.xsd"; - - /** - * Default constructor - * @param serverProperties Server properties - */ - public AddonDeployerImpl(final ServerProperties serverProperties, final IDeployableHelper deployableHelper, - final IAddonDeployerLog deployerLog, final IDeployerManager deployerManager, - final BundleContext bundleContext, final ServiceManager serviceManager, - final IDeployerLog workCleanerLog, final IRepositoryManager repositoryManager) { - this.serverProperties = serverProperties; - this.deployableHelper = deployableHelper; - this.deployerLog = deployerLog; - this.workCleanerLog = workCleanerLog; - this.deployerManager = deployerManager; - this.addons = new HashMap(); - this.deployedAddonNames = new ArrayList(); - this.bundleContext = bundleContext; - this.serviceManager = serviceManager; - this.confDeployer = new ConfDeployerImpl(this.bundleContext); - this.repositoryManager = repositoryManager; - this.repositories = new HashMap(); - this.isInitialized = false; - serviceRegistrations = new ArrayList(); - - //If some addons are removed from the deploy directories, the JOnAS configuration is retrieved - try { - checkLogs(); - } catch (DeployerException e) { - logger.error("Checked log has failed", e); - } - } - - /** - * If some addons have been removed from the deploy directories, the JOnAS configuration is - * retrieved - */ - private void checkLogs() throws DeployerException { - - //Map between the name of the addon to undeploy and the path to the deployable of the addon to undeploy - Map addonsToUndeploy = new HashMap(); - - //get log entries - Vector logEntries = this.deployerLog.getEntries(); - Vector logEntriesToRemove = new Vector(); - - for (IAddonLogEntry logEntry: logEntries) { - - File orginalFile = logEntry.getOriginal(); - File unpackedFile = logEntry.getCopy(); - - if (orginalFile == null || !orginalFile.exists()) { - //an Addon has been removed from deploy directory when the server was not running - //we need to retrieve JOnAS Configuration (for configurations files, binaries, deployable, ANT tasks, etc...) - addonsToUndeploy.put(logEntry.getName(), unpackedFile.getAbsolutePath()); - logEntriesToRemove.add(logEntry); - - } - } - - //retrieve JOnAS configuration - retrieveJOnASConfiguration(addonsToUndeploy); - - //remove log entries for each addon to undeploy - for (IAddonLogEntry logEntry: logEntriesToRemove) { - try { - this.deployerLog.removeEntry(logEntry); - this.logger.info("''{0}'' Addon Deployable is now undeployed", logEntry.getOriginal().getAbsolutePath()); - } catch (DeployerLogException e) { - this.logger.error("Cannot remove log entry " + logEntry.getName() + "." , e); - } - } - } - - /** - * Deploy the given deployable. - * @param deployable the Addon deployable. - * @throws DeployerException if the Addon is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - - File originalFile = null; - try { - originalFile = URLUtils.urlToFile(deployable.getArchive().getURL()); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the deployable " + deployable.getShortName(), e); - } - - IAddonLogEntry logEntry = this.deployerLog.getEntry(originalFile); - boolean isAlreadyDeployed = (originalFile.exists() && logEntry != null); - - IAddonDeployable unpackedDeployable = null; - String lastModifiedOriginalFileName = null; - try { - lastModifiedOriginalFileName = FileUtils.lastModifiedFileName(originalFile); - } catch (FileUtilsException e) { - throw new DeployerException("Cannot get the last modified file name of " + originalFile.getAbsolutePath(), e); - } - if (logEntry != null) { - String unpackedFileName = logEntry.getCopy().getName(); - - //if it's a cold update, the addon need to be redeployed - if (!lastModifiedOriginalFileName.equals(unpackedFileName)) { - logger.info("Deployable ''{0}'' has been updated.", deployable); - - // Get the unpacked deployable - IArchive archive = ArchiveManager.getInstance().getArchive(this.deployerLog.getEntry(originalFile).getCopy()); - try { - unpackedDeployable = IAddonDeployable.class.cast(this.deployableHelper.getDeployable(archive)); - } catch (DeployableHelperException e) { - throw new DeployerException("Cannot get the deployable " + originalFile, e); - } - - //get JOnAS Addon metadata - AddonMetaData addonMetaData = null; - try { - addonMetaData = AddonUtil.getAddonMetadata(AddonUtil.getAddonMetadataFile(unpackedDeployable.getArchive()), - logEntry.getCopy().getAbsolutePath()); - } catch (Exception e) { - //do nothing...the addon need to be undeployed - logger.warn("Addon metadata are incorrect"); - } - - //remove the logEntry - try { - this.deployerLog.removeEntry(this.deployerLog.getEntry(originalFile)); - } catch (DeployerLogException e) { - logger.error("Cannot remove log entry of the file " + originalFile.getAbsolutePath()); - } - - //undeploy the addon - undeploy(unpackedDeployable, addonMetaData); - isAlreadyDeployed = false; - } - } - - //if it's already deployed, don't unpack it! - if (isAlreadyDeployed) { - File unpackedFile = logEntry.getCopy(); - - //an unpacked deployable has been removed from the work directory. We need to unpack it again - if (unpackedFile == null|| !unpackedFile.exists()) { - //unpacked the addon - File folder = new File(AddonUtil.getAddonsWorkDirectory(this.serverProperties)); - try { - unpackedDeployable = UnpackDeployableHelper.unpack( - IAddonDeployable.class.cast(deployable), folder, lastModifiedOriginalFileName, false, - this.deployableHelper); - } catch (Exception e) { - throw new DeployerException("Cannot unpacked archive for '" + deployable.getArchive() + "'", e); - } - } else { - // Get the unpacked deployable - IArchive archive = ArchiveManager.getInstance().getArchive(this.deployerLog.getEntry(originalFile).getCopy()); - try { - unpackedDeployable = IAddonDeployable.class.cast(this.deployableHelper.getDeployable(archive)); - } catch (DeployableHelperException e) { - throw new DeployerException("Cannot get the deployable " + originalFile, e); - } - } - // display as a debug - logger.debug("Deploying ''{0}''", unpackedDeployable); - - } else { - //unpacking the addon - unpackedDeployable = null; - File folder = new File(AddonUtil.getAddonsWorkDirectory(this.serverProperties)); - try { - originalFile = URLUtils.urlToFile(deployable.getArchive().getURL()); - String archiveName = FileUtils.lastModifiedFileName(originalFile); - unpackedDeployable = UnpackDeployableHelper.unpack(IAddonDeployable.class.cast(deployable), folder, - archiveName, false, this.deployableHelper); - } catch (Exception e) { - throw new DeployerException("Cannot deploy archive for '" + deployable.getArchive() + "'", e); - } - - // display this line when Addon has been unpacked - logger.info("Deploying ''{0}''", unpackedDeployable); - } - - // Archive - IArchive addonArchive = unpackedDeployable.getArchive(); - - //get the unpackedFile - File unpackedFile; - try { - unpackedFile = URLUtils.urlToFile(addonArchive.getURL()); - } catch (Exception e) { - throw new DeployerException("Cannot get URL from archive '" + addonArchive + "'", e); - } - - //get the metadata of the addon - File addonMetadataFile; - if (isAlreadyDeployed) { - //get metadata from $JB/conf/addons/{addon.name} directory - addonMetadataFile = new File(AddonUtil.getAddonDirectoryPath(logEntry.getName()), IAddonStructure.METADATA_FILENAME); - } else { - //get metadata from the unpacked deployable - addonMetadataFile = AddonUtil.getAddonMetadataFile(addonArchive); - } - - //check the validity of the metadata file - validate(addonMetadataFile); - - AddonMetaData addonMetaData; - try { - addonMetaData = AddonUtil.getAddonMetadata(addonMetadataFile, unpackedFile.getAbsolutePath()); - } catch (Exception e) { - throw new DeployerException("Addon metadata are incorrect", e); - } - - URL originalURL; - try { - originalURL = deployable.getArchive().getURL(); - } catch (Exception e) { - throw new DeployerException( - "Cannot get the url of the initial deployable for the Addon Module '" + deployable + "'.", e); - } - - //Check that everythings is OK - checkAddonMetadata(addonMetaData); - - // Register repository dir if exists - String repositoryDir = AddonUtil.getAddonRepositoryWorkDirectory(AddonUtil.getAddonWorkDirectory(unpackedDeployable)); - File repositoryFile = new File(repositoryDir); - if (repositoryFile.exists() && repositoryFile.isDirectory()) { - Repository repository = new Repository(); - repository.setId(unpackedDeployable.toString()); - repository.setType(RepositoryKind.MAVEN_2); - repository.setUrl("file:" + repositoryFile.getPath()); - - try { - this.repositoryManager.addRepository(repository); - repositories.put(unpackedDeployable, repository); - logger.debug("The repository '" + repository + "' was added"); - } catch (RepositoryIdCollisionException e) { - throw new DeployerException("Repository '" + repository + "' already added"); - } catch (InvalidRepositoryException e) { - throw new DeployerException("'" + repository + "' is an invalid repository"); - } - } - - //Update the list of deployable (OSGi deployable, EJB3 deployable, EAR Deployable, etc...) of the unpacked deployable - updateDeployables(unpackedFile.getAbsolutePath(), unpackedDeployable, addonMetaData); - - // keep the link original deployable -> unpacked deployable for undeployment - this.addons.put(originalURL, unpackedDeployable); - - //if the addon is log - if (this.deployerLog.getEntry(URLUtils.urlToFile(originalURL)) != null) { - - deploy(unpackedDeployable, addonMetaData, true); - - logger.debug("''{0}'' addon is already deployed", deployable.getShortName()); - - } else { - - //deploy the addon - deploy(unpackedDeployable, addonMetaData, false); - - // Log the addon - if (this.deployerLog != null) { - try { - this.deployerLog.addEntry(addonMetaData.getName(), originalFile, unpackedFile); - } catch (DeployerLogException e) { - logger.info("Cannot added a log entry to the addon logger"); - } - } - - //add the name of the addon to the list of deployed addon names - this.deployedAddonNames.add(addonMetaData.getName()); - - logger.info("''{0}'' addon is now deployed", deployable.getShortName()); - } - - //log the addon into the workcleaner log file - try { - this.workCleanerLog.addEntry(new LogEntryImpl(originalFile, unpackedFile)); - } catch (DeployerLogException e) { - logger.info("Cannot added a log entry to the addon work cleaner logger"); - } - - } - - /** - * Undeploy the given Addon. - * @param deployable the deployable to remove. - * @throws DeployerException if the Addon is not deployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - - logger.info("Undeploying {0}", deployable.getShortName()); - - // get Addon URL - URL addonURL; - try { - addonURL = deployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL on the Addon deployable '" + deployable + "'.", e); - } - - // Check if this archive has been unpacked ? - IAddonDeployable unpackedDeployable = null; - if (addons.containsKey(addonURL)) { - unpackedDeployable = addons.get(addonURL); - } else { - throw new DeployerException("Cannot get the URL of the unpacked Addon deployable '" + deployable + "'."); - } - - File unpackedDeployableFile = null; - try { - unpackedDeployableFile = URLUtils.urlToFile( unpackedDeployable.getArchive().getURL()); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL on the unpacked deployable '" + unpackedDeployable + "'.", e); - } - - //get JOnAS Addon metadata - AddonMetaData addonMetaData = null; - try { - addonMetaData = AddonUtil.getAddonMetadata(AddonUtil.getAddonMetadataFile(unpackedDeployable.getArchive()), - unpackedDeployableFile.getAbsolutePath()); - } catch (Exception e) { - logger.warn("Addon metadata are incorrect", e); - } - - //remove the logEntry - File originalFile = URLUtils.urlToFile(addonURL); - IAddonLogEntry logEntry = deployerLog.getEntry(originalFile); - if (logEntry != null) { - try { - deployerLog.removeEntry(logEntry); - } catch (DeployerLogException e) { - logger.error("Cannot remove the LogEntry"); - } - } - - // remove the repository - Repository repository = repositories.get(unpackedDeployable); - if (repository != null) { - this.repositoryManager.removeRepository(repository); - logger.debug("The repository '" + repository + "' was removed"); - } - - //undeploy the addon - undeploy(unpackedDeployable, addonMetaData); - - //remove the name of the addon to the list of deployed addon name - this.deployedAddonNames.remove(addonMetaData.getName()); - - // remove link original deployable -> unpacked deployable - this.addons.remove(addonURL); - - logger.info("''{0}'' addon is now undeployed", deployable.getShortName()); - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return AddonDeployableImpl.class.isInstance(deployable); - } - - /** - * Check that metadata file is OK - * @param addonMetaData The metadata of the addon to deploy - * @throws DeployerException - */ - private void checkAddonMetadata(final AddonMetaData addonMetaData) throws DeployerException { - - //check the name of the addon. If an addon with the same name have been previously deployed, throw a DeployerException - if (this.deployedAddonNames.contains(addonMetaData.getName())) { - throw new DeployerException("Cannot deploy " + addonMetaData.getName() + " addon. An Addon with the same " + - "name is already deployed."); - } - - // if JOnASVersion doesn't match, throw a DeployerException - String JOnASVersion = Version.getNumber(); - if (!addonMetaData.isJOnASVersionSupported(JOnASVersion)){ - throw new DeployerException("Cannot deploy " + addonMetaData.getName() + " addon. JOnAS version " + - JOnASVersion + " doesn't match "); - } - - //check if the jvm version match. - String jvmVersion = System.getProperty("java.version"); - if (!addonMetaData.isJvmVersionSupported(jvmVersion)) { - throw new DeployerException("Cannot deploy " + addonMetaData.getName() + " addon. JVM version " + - jvmVersion + " doesn't match "); - } - } - - /** - * Deploy the addon - * @param unpackedDeployable The unpacked addon to deploy - * @param addonMetaData Metadata of the addon to unpacked - * @param isAlreadyDeployed True if the deployable is already deployed. Otherwise, false. - */ - private void deploy(final IAddonDeployable unpackedDeployable, final AddonMetaData addonMetaData, - final boolean isAlreadyDeployed) throws DeployerException { - - if (!isAlreadyDeployed) { - //deploy the configuration of the Addon - this.confDeployer.deploy(unpackedDeployable, addonMetaData); - - //TODO: BinDeployerImpl deploy - - //TODO: AntDeployer deploy - } - - //sort the list of all deployables (persistent and unpersistent) - List allDeployables = new ArrayList(); - allDeployables.addAll(unpackedDeployable.getDeployables()); - - //deploy only deployables which are not deployed yet - if (!allDeployables.isEmpty()) { - Object oldTenantContext = null; - if (isMultitenantEnabled()) { - oldTenantContext = multitenantService.getTenantContext(); - } - try { - if (isMultitenantEnabled()) { - multitenantService.setTenantIdAndInstanceNameInContext(addonMetaData.getTenantId(), addonMetaData.getInstance()); - } - //list of deployables which cannot be deployed - List> failed = deploySortableDeployables(allDeployables); - if (!failed.isEmpty()) { - throw new DeployerException("The addon " + addonMetaData.getName() + " cannot be deployed"); - } - } finally { - if (isMultitenantEnabled()) { - multitenantService.setTenantContext(oldTenantContext); - } - } - } - - //start JOnAS services - String service = addonMetaData.getService(); - if (service != null && addonMetaData.getAutostart()) { - //if it's a JOnAS service, register the ServiceProperties component - Dictionary dictionary = new Hashtable(); - dictionary.put(SERVICE_REGISTRATION_SERVICE_PROPERTY, service); - this.serviceRegistrations.add(this.bundleContext.registerService(ServiceProperties.class.getName(), - addonMetaData.getServiceProperties(), dictionary)); - - //Create the service configuration for the given service. It'll start the service - try { - this.serviceManager.startService(service, false); - } catch (Exception e) { - throw new DeployerException("Cannot create the configuration for the service " + service, e); - } - } - } - - /** - * Undeploy the addon - * @param unpackedDeployable The unpacked addon to deploy - * @param addonMetaData Metadata of the addon to unpacked - */ - private void undeploy(final IAddonDeployable unpackedDeployable, final AddonMetaData addonMetaData) - throws DeployerException { - - //undeploy the configuration of the Addon - this.confDeployer.undeploy(unpackedDeployable.getArchive(), addonMetaData, this.deployerLog); - - String service = addonMetaData.getService(); - - if (service != null && addonMetaData.getAutostart()) { - - //Delete the service configuration for the given service. - try { - this.serviceManager.stopService(service); - } catch (Exception e) { - throw new DeployerException("Cannot delete the configuration for the service " + service, e); - } - - //unregister the ServiceProperties - ServiceRegistration serviceRegistration = AddonUtil.getServiceRegistration(this.serviceRegistrations, - SERVICE_REGISTRATION_SERVICE_PROPERTY, addonMetaData.getService()); - if (serviceRegistration != null) { - serviceRegistration.unregister(); - this.serviceRegistrations.remove(serviceRegistration); - } - } - - //sort the list (in the reverse order) of all deployables (persistent and unpersistent) - List allDeployables = new ArrayList(); - allDeployables.addAll(unpackedDeployable.getDeployables()); - - //undeploy deployables - if (!allDeployables.isEmpty()) { - Object oldTenantContext = null; - List> failed; - - if (isMultitenantEnabled()) { - oldTenantContext = multitenantService.getTenantContext(); - } - try { - if (isMultitenantEnabled()) { - multitenantService.setTenantIdAndInstanceNameInContext(addonMetaData.getTenantId(), addonMetaData.getInstance()); - } - failed = undeploySortableDeployables(allDeployables); - } finally { - multitenantService.setTenantContext(oldTenantContext); - } - - if (!failed.isEmpty()) { - throw new DeployerException("The addon " + addonMetaData.getName() + " cannot be undeployed"); - } - } - - //TODO: BinDeployerImpl undeploy - - //TODO: AntDeployer undeploy - } - - /** - * Retrieve JOnAS configuration when the server is starting - * @param addonsToUndeploy List of name of addon to undeploy - */ - private void retrieveJOnASConfiguration(final Map addonsToUndeploy) { - - //retrieve JOnAS configuration for configuration files - this.confDeployer.retrieveJOnASConfiguration(this.deployerLog, addonsToUndeploy, true); - - //TODO: retrieve JOnAS configuration for binaries - - //TODO: retrieve JOnAS configuration for ANT tasks - - //uninstall bundles of undeployed addon - for (Map.Entry entry : addonsToUndeploy.entrySet()) { - - //get persistent deployables - String unpackedDeployablePath = entry.getValue(); - IAddonDeployable unpackedDeployable = (IAddonDeployable) AddonUtil.getDeployable(this.deployableHelper, - new File(unpackedDeployablePath)); - updateDeployables(unpackedDeployablePath, unpackedDeployable); - List sortableDeployables = unpackedDeployable.getDeployables(); - - //undeploy persistent deployables (OSGi deployable, DeploymentPlan deployable) - if (sortableDeployables != null) { - - List persistentSortableDeployable = new ArrayList(); - - for (ISortableDeployable sortableDeployable: sortableDeployables) { - IDeployable deployable = sortableDeployable.getDeployable(); - if (deployable instanceof OSGiDeployable /*|| deployable instanceof DeploymentPlanDeployable*/) { - persistentSortableDeployable.add(sortableDeployable); - } - } - - //undeploy persistent deployable - List> failed = undeploySortableDeployables(persistentSortableDeployable); - if (!failed.isEmpty()) { - logger.error("The addon " + entry.getKey() + " cannot be undeployed"); - } - } - } - } - - /** - * Update the list of deployables (OSGi deployable, EJB3 deployable, EAR Deployable, etc...) - * of the unpacked deployable & copy JOnAS deployment plan to $JONAS_BASE/repositories/url-internal - * @param unpackedDeployablePath The path to the unpacked deployable - * @param unpackedDeployable The unpacked deployable - * @param addonMetaData Metadata of the addon - */ - public void updateDeployables(final String unpackedDeployablePath, final IAddonDeployable unpackedDeployable, - final AddonMetaData addonMetaData) { - - final File addonDeployWorkDirectory = new File(AddonUtil.getAddonDeployWorkDirectory(unpackedDeployablePath)); - - if (addonDeployWorkDirectory.isDirectory()) { - - for (File file: addonDeployWorkDirectory.listFiles()) { - - //get the deployable from the file - IDeployable deployable = AddonUtil.getDeployable(this.deployableHelper, file); - //get the sortable deployable from the deployable - ISortableDeployable sortableDeployable = AddonUtil.getSortableDeployable(deployable); - - if (deployable instanceof DeploymentPlanDeployable) { - - //2 cases: - // - persistent deployment plan (if it's a JOnAS deployment plan) - // - unpersistent deployment plan (if it's an user deployment plan - String service = addonMetaData.getService(); - - //case 1: persistent deployment plan (if it's a JOnAS deployment plan) - if (service != null) { - - //get the JOnAS url-internal directory - File urlInternalDirectory = new File(AddonUtil.JONAS_ROOT_URL_INTERNAL_DIRECTORY); - if (!urlInternalDirectory.exists()) { - urlInternalDirectory.getParentFile().mkdirs(); - } - - String implementation = addonMetaData.getImplementation(); - if (implementation == null) { - //it's a default deployment plan - //we need to copy this default deployment plan in $JONAS_BASE/repositories/url-internal - final String defaultDeploymentPlanName = AddonUtil.getDefaultDeploymentPlan(service); - File defaultDeploymentPlan = new File(addonDeployWorkDirectory.getAbsolutePath(), - defaultDeploymentPlanName); - - if (defaultDeploymentPlan.exists()) { - AddonUtil.copyFile(defaultDeploymentPlan, new File(urlInternalDirectory.getAbsolutePath(), - defaultDeploymentPlanName)); - } - - } else { - //it's a deployment plan for an implementation of an abstract service - //we need to copy the abstract deployment plan and it's implementation in $JONAS_BASE/repositories/url-internal - final String jonasAbstractDeploymentPlanName = AddonUtil.getAbstractDeploymentPlan(service); - final String jonasDeploymentPlanImplName = AddonUtil.getImplDeploymentPlan(service, implementation); - File jonasAbstractDeploymentPlan = new File(addonDeployWorkDirectory.getAbsolutePath(), - jonasAbstractDeploymentPlanName); - - if (jonasAbstractDeploymentPlan.exists()) { - AddonUtil.copyFile(jonasAbstractDeploymentPlan, new File(urlInternalDirectory.getAbsolutePath(), - jonasAbstractDeploymentPlanName)); - } - - File jonasDeploymentPlanImpl = new File(addonDeployWorkDirectory.getAbsolutePath(), - jonasDeploymentPlanImplName); - if (jonasDeploymentPlanImpl.exists()) { - AddonUtil.copyFile(jonasDeploymentPlanImpl, new File(urlInternalDirectory.getAbsolutePath(), - jonasDeploymentPlanImplName)); - } - } - } - - unpackedDeployable.addDeployable(sortableDeployable); - - } else if (!(deployable instanceof UnknownDeployable)) { - //cases: OSGi deployables, EARDeployable,EJB3Deployable, EJB21Deployable, WARDeployable, RARDeployable, FileDeployable - unpackedDeployable.addDeployable(sortableDeployable); - } - } - } - } - - - /** - * Simply Update the list of deployables (OSGi deployable, EJB3 deployable, EAR Deployable, etc...) - * of the unpacked deployable - * @param unpackedDeployablePath The path to the unpacked deployable - * @param unpackedDeployable The unpacked deployable - */ - public void updateDeployables(final String unpackedDeployablePath, final IAddonDeployable unpackedDeployable) { - - final File addonDeployWorkDirectory = new File(AddonUtil.getAddonDeployWorkDirectory(unpackedDeployablePath)); - - if (addonDeployWorkDirectory.isDirectory()) { - - for (File file: addonDeployWorkDirectory.listFiles()) { - - //get the deployable from the file - IDeployable deployable = AddonUtil.getDeployable(this.deployableHelper, file); - //get the sortable deployable from the deployable - ISortableDeployable sortableDeployable = AddonUtil.getSortableDeployable(deployable); - - if (!(deployable instanceof UnknownDeployable)) { - //cases: EARDeployable,EJB3Deployable, EJB21Deployable, WARDeployable, RARDeployable, FileDeployable - unpackedDeployable.addDeployable(sortableDeployable); - } - } - } - } - - /** - * Sort a multi type list of sortables deployables and deploy each element which is not yet deployed - * @param sortableDeployables The list of sortable deployables to deploy - * @return the list of deployable which have a failed deployment - */ - private List> deploySortableDeployables(final List sortableDeployables) { - - //sort deployables - AddonUtil.sortSortableDeployable(sortableDeployables); - - //get deployables which are not yet deployed - List> deployables = new ArrayList>(); - for (ISortableDeployable sortableDeployable: sortableDeployables) { - IDeployable deployable = sortableDeployable.getDeployable(); - try { - if (!this.deployerManager.isDeployed(deployable)) { - deployables.add(sortableDeployable.getDeployable()); - } - } catch (DeployerException e) { - this.logger.error("Could not find if the deployable " + deployable.getShortName() + " is already deployed", e); - } catch (UnsupportedDeployerException e) { - this.logger.error("Could not find if the deployable " + deployable.getShortName() + " is already deployed", e); - } - } - - //deploy all deployables - return getFailedDeployables(this.deployerManager.deploy(deployables)); - } - - /** - * Sort a multi type list of sortables deployables in the reverse order and undeploy each element - * @param sortableDeployables The list of sortable deployables to undeploy - * @return the list of deployable which have a failed undeployment - */ - private List> undeploySortableDeployables(final List sortableDeployables) { - - //sort deployables in the reverse order - AddonUtil.sortSortableDeployable(sortableDeployables); - Collections.reverse(sortableDeployables); - - //get deployables - List> deployables = new ArrayList>(); - for (ISortableDeployable sortableDeployable: sortableDeployables) { - deployables.add(sortableDeployable.getDeployable()); - } - - //undeploy all deployables - return getFailedDeployables(this.deployerManager.undeploy(deployables)); - } - - /** - * @param deploymentReports The list of {@link IDeploymentReport} - * @return the list of deployables with a failed deployment operation - */ - private List> getFailedDeployables(final List deploymentReports) { - List> failedDeployables = new ArrayList>(); - for (IDeploymentReport deploymentReport: deploymentReports) { - if (!deploymentReport.isDeploymentOk()) { - failedDeployables.add(deploymentReport.getDeployable()); - } - } - return failedDeployables; - } - - /** - * {@inheritDoc} - */ - public boolean isAddonDeployedByWorkName(final String unpackName) { - - //if the addon deployer isn't initialize yet, we shouldn't use the addon clean task - if (!isInitialized()) { - return true; - } - - for (IAddonDeployable addonDeployable : this.addons.values()) { - try { - File unpackedFile = URLUtils.urlToFile(addonDeployable.getArchive().getURL()); - if (unpackName.equals(unpackedFile.getName())) { - return true; - } - } catch (ArchiveException e) { - logger.debug("Cannot retrieve the name of the unpacked addon {0}", unpackName); - } - } - return false; - } - - /** - * @return True is the addon deployer is initialized - */ - private boolean isInitialized() { - - if (this.isInitialized == false) { - int deployerLogSize = this.deployerLog.getEntries().size(); - this.isInitialized = (deployerLogSize == 0 || deployerLogSize == this.addons.size()); - } - - return this.isInitialized; - } - - /** - * Allow to validate an addon Metadata file - * @param addonMetadataFile The addon metadata file to validate - * @throws DeployerException {@link DeployerException} - * @return true if the node has been valide. Otherwise, false. - */ - private void validate(File addonMetadataFile) throws DeployerException { - //First create a Validator from the XSD file - InputStream xsdInputStream = getClass().getResourceAsStream(XSD_RESOURCE); - - if (xsdInputStream != null) { - SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = null; - try { - schema = factory.newSchema(new StreamSource(xsdInputStream)); - } catch (SAXException e) { - throw new DeployerException("Cannot create a new Schema from the resource " + XSD_RESOURCE, e); - } - Validator validator = schema.newValidator(); - - //then get the XML resource - DocumentBuilderFactory xmlFactory = DocumentBuilderFactory.newInstance(); - xmlFactory.setNamespaceAware(true); - DocumentBuilder builder = null; - try { - builder = xmlFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new DeployerException("Cannot create a new DocumentBuilder", e); - } - Document document = null; - try { - document = builder.parse(addonMetadataFile); - } catch (SAXException e) { - throw new DeployerException("Cannot parse the file " + addonMetadataFile.getAbsolutePath(), e); - } catch (IOException e) { - throw new DeployerException("Cannot parse the file " + addonMetadataFile.getAbsolutePath(), e); - } - - //finally try to validate the XML file - try { - validator.validate(new DOMSource(document)); - } catch (SAXException e) { - throw new DeployerException("Cannot validate the file " + addonMetadataFile.getAbsolutePath() + " from the XSD " + - "resource " + XSD_RESOURCE, e); - } catch (IOException e) { - throw new DeployerException("Cannot validate the Node " + addonMetadataFile.getAbsolutePath() + " from the XSD " + - "resource " + XSD_RESOURCE, e); - } - - } else { - throw new DeployerException("Cannot get the inputstream of the resource " + XSD_RESOURCE); - } - - } - - /** - * Whether Multitenant service is enabled - * @return - */ - protected boolean isMultitenantEnabled() { - return (multitenantService != null); - } - - /** - * Set Multitenant service impl - * @param multitenantService - */ - public void setMultitenantService(MultitenantService multitenantService) { - this.multitenantService = multitenantService; - } - - /** - * Unset Multitenant service impl - */ - public void unsetMultitenantService() { - multitenantService = null; - } - - //TODO overidde the doDeploy method with a list of IDeployable as parameters, in order to fix errors dependencies between addons - //TODO check if there is some troubles in work directories - //TODO some troubles when the user remove the work directory (or files of the work directory) when the server is running -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonMetaData.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonMetaData.java deleted file mode 100644 index 472cccb354..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/AddonMetaData.java +++ /dev/null @@ -1,337 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployer; - -import org.ow2.jonas.addon.deploy.impl.util.Range; -import org.ow2.jonas.addon.properties.ServicePropertiesImpl; -import org.ow2.jonas.properties.ServiceProperties; -import java.io.File; -import java.util.Properties; - -/** - * Represents metadata of an Addon - */ -public class AddonMetaData { - - /** - * The name of this addon - */ - private String name; - - /** - * The description of this addon - */ - private String description; - - /** - * The tenant id of this addon - */ - private String tenantId; - - /** - * The instance of this addon - */ - private String instance; - - /** - * The author of this addon - */ - private String author; - - /** - * The licence of this addon - */ - private String licence; - - /** - * Indicates a version of JOnAS that this addon can run in. - */ - private Range jonasVersions; - - /** - * The autostart property - */ - private Boolean autostart; - - /** - * Indicates a list of version of the jvm that this plugin can run in. - */ - private Range jvmVersions; - - /** - * Provides property for the resolver - */ - private String provides; - - /** - * Requirements property for the resolver - */ - private String requirements; - - /** - * Properties of the service (if the addon represents a JOnAS service) - */ - private ServiceProperties serviceProperties; - - /** - * The metadata file - */ - private File addonMetaDataFile; - - /** - * The name of the JOnAS service associated to the addon. Null if the addon is not a JOnAS service - */ - private String service; - - /** - * The name of the implementation of the JOnAS service - */ - private String implementation; - - /** - * Default constructor - */ - public AddonMetaData() { - this.autostart = false; - } - - /** - * @return the name - */ - public String getName() { - return name; - } - - /** - * @return the description - */ - public String getDescription() { - return description; - } - - /** - * @return the tenant-id - */ - public String getTenantId() { - return tenantId; - } - - /** - * @return the instance - */ - public String getInstance() { - return instance; - } - - /** - * @return the author - */ - public String getAuthor() { - return author; - } - - /** - * @return the licence - */ - public String getLicence() { - return licence; - } - - /** - * Check if the given jonas version is support - * @param jonasVersion The jonas version to check - */ - public boolean isJOnASVersionSupported(final String jonasVersion) { - return this.jonasVersions != null && this.jonasVersions.isSupported(jonasVersion); - } - - /** - * @return the autostart property - */ - public Boolean getAutostart() { - return autostart; - } - - /** - * Check if the given jvm version is support - * @param jvmVersion The jvm version to check - */ - public boolean isJvmVersionSupported(final String jvmVersion) { - return this.jvmVersions != null && this.jvmVersions.isSupported(jvmVersion); - } - - /** - * @return provides properties for the resolver - */ - public String getProvides() { - return provides; - } - - /** - * @return requirements properties - */ - public String getRequirements() { - return requirements; - } - - /** - * @param name The name of this addon to set - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @param description the description to set - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * @param tenantId the tenant-id to set - */ - public void setTenantId(final String tenantId) { - this.tenantId = tenantId; - } - - /** - * @param instance the instance to set - */ - public void setInstance(final String instance) { - this.instance = instance; - } - - /** - * @param author The author to set - */ - public void setAuthor(final String author) { - this.author = author; - } - - /** - * @param licence The licence to set - */ - public void setLicence(final String licence) { - this.licence = licence; - } - - /** - * @param jonasVersions List of jonas versions compatible with this addon to set - */ - public void setJonasVersions(final Range jonasVersions) { - this.jonasVersions = jonasVersions; - } - - /* - * @param autostart Autostart properties to set - */ - public void setAutostart(final Boolean autostart) { - this.autostart = autostart; - } - - /** - * @param jvmVersions A list of Jvm version to set - */ - public void setJvmVersions(final Range jvmVersions) { - this.jvmVersions = jvmVersions; - } - - /** - * @param provides Provides properties to set - */ - public void setProvides(final String provides) { - this.provides = provides; - } - - /** - * @param requirements Requirements properties to set - */ - public void setRequirements(final String requirements) { - this.requirements = requirements; - } - - /* - * @param properties Properties of the addon to set - */ - public void setServiceProperties(final Properties properties) { - this.serviceProperties = new ServicePropertiesImpl(properties, this.service); - } - - /** - * @return properties of the addon - */ - public ServiceProperties getServiceProperties() { - return this.serviceProperties; - } - - /** - * @return the metadata file - */ - public File getAddonMetaDataFile() { - return this.addonMetaDataFile; - } - - /** - * @param addonMetaDataFile The metadata file to set - */ - public void setAddonMetaDataFile(final File addonMetaDataFile) { - this.addonMetaDataFile = addonMetaDataFile; - } - - /** - * @return the name of the JOnAS service associated to the addon. Null if the addon is not a JOnAS service - */ - public String getService() { - return service; - } - - /** - * @param service the name of the JOnAS service associated to the addon to set - */ - public void setService(final String service) { - this.service = service; - } - - /** - * @return the name of the implementation of the JOnAS service - */ - public String getImplementation() { - return implementation; - } - - /** - * @param implementation the name of the implementation of the JOnAS service to set - */ - public void setImplementation(final String implementation) { - this.implementation = implementation; - } - - /** - * @return true if the addon represents a JOnAS service - */ - public boolean isJOnASService() { - return this.service != null; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/BinDeployerImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/BinDeployerImpl.java deleted file mode 100644 index 3907cd6a87..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/BinDeployerImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployer; - -/** - * Represents a bin deployer - */ -public class BinDeployerImpl { -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/ConfDeployerImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/ConfDeployerImpl.java deleted file mode 100644 index 62f90138f9..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/ConfDeployerImpl.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployer; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.addon.deploy.api.deployable.IAddonDeployable; -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployerLog; -import org.ow2.jonas.addon.deploy.api.util.IAddonLogEntry; -import org.ow2.jonas.addon.deploy.api.util.IAddonStructure; -import org.ow2.jonas.addon.deploy.impl.config.AddonConfigImpl; -import org.ow2.jonas.addon.deploy.impl.util.AddonUtil; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; -import java.util.Dictionary; -import java.util.Hashtable; - -/** - * Represents a conf deployer - */ -public class ConfDeployerImpl { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(ConfDeployerImpl.class); - - /** - * The property name to register a new IAddonConfig component as an OSGi service - */ - public final String SERVICE_REGISTRATION_ADDON_PROPERTY = "addon"; - - /** - * OSGi bundle context - */ - private BundleContext bundleContext; - - /** - * List of service registration for IAddonConfig components - */ - private List serviceRegistrations; - - /** - * Default constructor - * @param bundleContext OSGi bundle context - */ - public ConfDeployerImpl(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - this.serviceRegistrations = new ArrayList(); - } - - /** - * deploy the configuration of an Addon - * @param unpackedDeployable The unpacked addon to deploy - * @param addonMetaData Metadata of the addon to unpacked - */ - public void deploy(final IAddonDeployable unpackedDeployable, final AddonMetaData addonMetaData) { - - //get configuration files - String addonConfigurationPath = null; - String addonDirectory = null; - try { - //get addon directory - addonDirectory = unpackedDeployable.getArchive().getURL().getPath(); - addonConfigurationPath = addonDirectory + IAddonStructure.CONF_DIRECTORY; - } catch (ArchiveException e) { - logger.error("Cant get URL archive", e); - } - - final String addonName = addonMetaData.getName(); - final String JOnASAddonDirectoryPath = AddonUtil.getAddonDirectoryPath(addonName); - - //create addons directory in $JONAS_BASE/conf if not exist - File JOnASAddonDirectory = new File(JOnASAddonDirectoryPath); - if (!JOnASAddonDirectory.exists()) { - JOnASAddonDirectory.mkdirs(); - } - - //copy addon metadata - File addonMetaDataFile = addonMetaData.getAddonMetaDataFile(); - try { - FileUtils.copyFile(addonMetaDataFile.getAbsolutePath(), JOnASAddonDirectory + File.separator + addonMetaDataFile.getName()); - } catch (FileUtilsException e) { - logger.error("Cannot copy file " + addonMetaDataFile.getAbsolutePath() + ".", e); - } - - //copy others configuration files - AddonUtil.copyFiles(addonConfigurationPath, JOnASAddonDirectoryPath); - - //register a new IAddonConfig component as an OSGi service - try { - register(JOnASAddonDirectoryPath, addonName); - } catch (Exception e) { - logger.error("Cannot register a new IAddonConfig component with " + JOnASAddonDirectoryPath + " directory", e); - } - } - - /** - * Undeploy the configuration of an Addon - * Retrieve the old JOnAS configuration - * @param unpackedArchive The unpacked archive of the addon to deploy - * @param addonMetaData Metadata of the addon to unpacked - * @param addonDeployerLog The deployer log - */ - public void undeploy(final IArchive unpackedArchive, final AddonMetaData addonMetaData, - final IAddonDeployerLog addonDeployerLog) { - - //get the path to the unpacked deployable - String unpackedDeployablePath = null; - try { - unpackedDeployablePath = unpackedArchive.getURL().getPath(); - } catch (ArchiveException e) { - logger.error("Cannot get the URL of the Archive to undeploy", e); - } - - //the name of the addon to undeployed - String addonName = addonMetaData.getName(); - - //Map between the name of the addon to undeploy and the path to the deployable of the addon to undeploy - Map addonsToUndeploy = new HashMap(); - addonsToUndeploy.put(addonName, unpackedDeployablePath); - - //unregister the IAddonConfig component with the given addon name - unregister(addonName); - - //Retrieve JOnAS configuration - retrieveJOnASConfiguration(addonDeployerLog, addonsToUndeploy, false); - } - - /** - * Retrieve JOnAS configuration - * @param addonDeployerLog The Addon deployer log - * @param addonsToUndeploy List of name of addon to undeploy - * @param isJOnASStarting True if the server is starting. Otherwise, false. - */ - public void retrieveJOnASConfiguration(final IAddonDeployerLog addonDeployerLog, - final Map addonsToUndeploy, final boolean isJOnASStarting) { - //for each addon to undeploy, retrieve JOnAS configuration - Iterator it = addonsToUndeploy.keySet().iterator(); - while (it.hasNext()) { - String addonName = it.next(); - - //deletion of addon directory in $JONAS_BASE/conf - String JOnASAddonDirectoryPath = AddonUtil.getAddonDirectoryPath(addonName); - deleteFile(JOnASAddonDirectoryPath); - } - - //if the server is starting, register an IAddonConfig service for each deployed addon - if (isJOnASStarting) { - Vector logEntries = addonDeployerLog.getEntries(); - for (IAddonLogEntry logEntry: logEntries) { - - //register an IAddonConfig service for each deployed addon - String addonName = logEntry.getName(); - if (!addonsToUndeploy.containsKey(addonName)) { - String addonConfDirectory = AddonUtil.getAddonDirectoryPath(addonName); - try { - register(addonConfDirectory, addonName); - } catch (Exception e) { - logger.error("Cannot register a new IAddonConfig component with " + addonConfDirectory + " directory", e); - } - } - } - } - } - - /** - * Deletes a directory - * @param directoryPath The directory to delete - * @return true if all deletions were successful. Otherwise, false - */ - public boolean deleteFile(final String directoryPath) { - File file = new File(directoryPath); - if (file.exists()) { - return FileUtils.delete(directoryPath); - } else { - return false; - } - } - - /** - * Register a new IAddonConfig component - * @param configurationDirectory The configuration directory of the addon - * @param addonName The name of the addon - */ - private void register(final String configurationDirectory, final String addonName) throws Exception { - IAddonConfig addonConfig = new AddonConfigImpl(configurationDirectory); - - Dictionary dictionary = new Hashtable(); - dictionary.put(SERVICE_REGISTRATION_ADDON_PROPERTY, addonName); - this.serviceRegistrations.add(this.bundleContext.registerService(IAddonConfig.class.getName(), addonConfig, dictionary)); - } - - /** - * Unregister an IAddonConfig component associated to the given addon name - * @param addonName The name of an addon - */ - private void unregister(final String addonName) { - ServiceRegistration serviceRegistration = AddonUtil.getServiceRegistration(this.serviceRegistrations, - SERVICE_REGISTRATION_ADDON_PROPERTY, addonName); - if (serviceRegistration != null) { - serviceRegistration.unregister(); - this.serviceRegistrations.remove(serviceRegistration); - } - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/service/AddonDeployerComponent.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/service/AddonDeployerComponent.java deleted file mode 100644 index baacfb2952..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/deployer/service/AddonDeployerComponent.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.deployer.service; - -import org.osgi.framework.BundleContext; -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployer; -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployerLog; -import org.ow2.jonas.addon.deploy.impl.cleaner.AddonCleanTask; -import org.ow2.jonas.addon.deploy.impl.deployer.AddonDeployerImpl; -import org.ow2.jonas.addon.deploy.impl.util.AddonDeployerLog; -import org.ow2.jonas.addon.deploy.impl.util.AddonUtil; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.management.ServiceManager; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.repository.api.IRepositoryManager; - -import java.io.File; -import java.io.IOException; - -/** - * Service that will register an AddonDeployerImpl - * @author Jeremy Cazaux - */ -public class AddonDeployerComponent extends AbsServiceImpl { - - /** - * Deployer Manager. (that allow us to deploy Deployable). - */ - private IDeployerManager deployerManager; - - /** - * The Addon Deployer - */ - private IAddonDeployer addonDeployer; - - /** - * The DeployableHelper which analyze an archive and build the associated Deployable object - */ - private IDeployableHelper deployableHelper; - - /** - * Server properties - */ - private ServerProperties serverProperties; - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonDeployerComponent.class); - - /** - * The context of the component - */ - private BundleContext bundleContext; - - /** - * The service manager - */ - private ServiceManager serviceManager; - - /** - * The addon deployer log - */ - private IAddonDeployerLog deployerLog; - - /** - * Logs for the workcleaner service - */ - private IDeployerLog workCleanerLog; - - /** - * Multitenant service - */ - private MultitenantService multitenantService; - - /** - * Repository manager - */ - private IRepositoryManager repositoryManager; - - /** - * Default constructor - * @param bundleContext The context - */ - public AddonDeployerComponent(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * Start the service - * @throws org.ow2.jonas.service.ServiceException - */ - @Override - protected void doStart() throws ServiceException { - - //ceate parent directory of the addons log file, if !exist - File logFile = new File(AddonUtil.getAddonLogFile(this.serverProperties)); - if (!logFile.getParentFile().exists()) { - logFile.getParentFile().mkdirs(); - } - - //create the addons log file - try { - logFile.createNewFile(); - } catch (IOException e) { - logger.error("Cannot create the log file for addon deployer"); - } - - //create parent directory of the workcleaner log file if !exist - File workCleanerLogFile = new File(AddonUtil.getWorkCleanerLogFile(this.serverProperties)); - if (!workCleanerLogFile.exists()) { - workCleanerLogFile.getParentFile().mkdirs(); - try { - workCleanerLogFile.createNewFile(); - } catch (IOException e) { - logger.error("Cannot create the cleaner log file for addon deployer"); - } - } - - try { - this.deployerLog = new AddonDeployerLog(logFile); - } catch (DeployerLogException e) { - logger.error("Cannot create an addons log"); - } - - try { - this.workCleanerLog = new DeployerLog(workCleanerLogFile); - } catch (DeployerLogException e) { - logger.error("Cannot create a workcleaner log for the addons"); - } - - //Create a new AddonDeployer - this.addonDeployer = new AddonDeployerImpl(this.serverProperties, this.deployableHelper, this.deployerLog, - this.deployerManager, this.bundleContext, this.serviceManager, - this.workCleanerLog, this.repositoryManager); - - //register the addon deployer - this.deployerManager.register(this.addonDeployer); - } - - /** - * Stop the service - * @throws org.ow2.jonas.service.ServiceException - */ - @Override - protected void doStop() throws ServiceException { - this.deployerManager.unregister(this.addonDeployer); - } - - /** - * @param deployerManager the {@link org.ow2.util.ee.deploy.api.deployer.IDeployerManager} to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * @param serverProperties ServerProperties to set - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * @param deployableHelper The DeployableHelper which analyze an archive and build the associated Deployable object - */ - public void setDeployableHelper(final IDeployableHelper deployableHelper) { - this.deployableHelper = deployableHelper; - } - - /** - * @param serviceManager The service manager to registered - */ - public void registerServiceManager(final ServiceManager serviceManager) { - this.serviceManager = serviceManager; - } - - /** - * Unregistered the service manager - */ - public void unregisterServiceManager() { - this.serviceManager = null; - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - protected void setWorkCleanerService(final WorkCleanerService workCleanerService) { - CleanTask cleanTask = new AddonCleanTask(this.addonDeployer, this.workCleanerLog); - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } - - /** - * Set Multitenant service impl - * @param multitenantService - */ - protected void setMultitenantService(MultitenantService multitenantService) { - this.addonDeployer.setMultitenantService(multitenantService); - } - - /** - * Unset Multitenant service impl - */ - protected void unsetMultitenantService() { - this.addonDeployer.unsetMultitenantService(); - } - - /** - * Set repository manager impl - * @param repositoryManager - */ - protected void setRepositoryManager(IRepositoryManager repositoryManager) { - this.repositoryManager = repositoryManager; - } - - /** - * Unset repository manager impl - */ - protected void unsetRepositoryManager() { - this.repositoryManager = null; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/helper/service/AddonDeployableAnalyserComponent.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/helper/service/AddonDeployableAnalyserComponent.java deleted file mode 100644 index 9e311f738a..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/helper/service/AddonDeployableAnalyserComponent.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.helper.service; - -import org.ow2.jonas.addon.deploy.api.util.IAddonStructure; -import org.ow2.jonas.addon.deploy.impl.deployable.AddonDeployableImpl; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.helper.IDeployableAnalyser; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Analyze the URL and create a deployable object. - * @author Jeremy Cazaux - */ -public class AddonDeployableAnalyserComponent extends AbsServiceImpl implements IDeployableAnalyser { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonDeployableAnalyserComponent.class); - - /** - * Analyze the URL and create a deployable object. - * @param archive The given archive - * return the deployable object - */ - public IDeployable analyze(final IArchive archive) { - AddonDeployableImpl addonDeployable = null; - if (isSupport(archive)) { - addonDeployable = new AddonDeployableImpl(archive); - } - return addonDeployable; - } - - /** - * @param archive The given archive - * @return true if the archive is an addon deployable. Otherwise, false. - */ - protected boolean isSupport(final IArchive archive) { - - if (!(archive instanceof IFileArchive)) { - - try { - return (archive.getResource(IAddonStructure.JONAS_ADDON_METADATA_ZIP_ENTRY) != null); - } catch (ArchiveException e) { - logger.error("Cannot get the following resource of the archive: " + IAddonStructure.JONAS_ADDON_METADATA_ZIP_ENTRY, e); - } - } - - return false; - } - - /** - * Method for service starting - * @throws ServiceException - */ - @Override - protected void doStart() throws ServiceException { - } - - /** - * Method for service stopping - * @throws ServiceException - */ - @Override - protected void doStop() throws ServiceException { - } - - /** - * Default constructor - */ - public AddonDeployableAnalyserComponent() { - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonDeployerLog.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonDeployerLog.java deleted file mode 100644 index 60d7aa6907..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonDeployerLog.java +++ /dev/null @@ -1,238 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.util; - -import org.ow2.jonas.addon.deploy.api.deployer.IAddonDeployerLog; -import org.ow2.jonas.addon.deploy.api.util.IAddonLogEntry; -import org.ow2.jonas.lib.work.AbsDeployerLog; -import org.ow2.jonas.workcleaner.DeployerLogException; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Enumeration; -import java.util.StringTokenizer; -import java.util.Vector; - -/** - * Class which permits to store or load the association between the name of an Addon, the name of a package and the - * timestamped work copy associated. - */ -public class AddonDeployerLog extends AbsDeployerLog implements IAddonDeployerLog { - - /** - * Constructor for the deployerLog. - * @param logFile the file which is used for read/write entries - * @throws DeployerLogException if the loadentries failed. - */ - public AddonDeployerLog(final File logFile) throws DeployerLogException { - super(logFile); - } - - /** - * load the entries of the log file. - * @throws DeployerLogException if the load failed. - */ - @Override - protected synchronized void loadEntries() throws DeployerLogException { - - BufferedReader br = null; - try { - br = new BufferedReader(new FileReader(logFile)); - } catch (FileNotFoundException e) { - throw new DeployerLogException("Can not read the " + logFile + " file"); - } - String line = null; - - String field = null; - String name = null; - File originalField = null; - File copyField = null; - StringTokenizer st = null; - - try { - //Read the text file - while ((line = br.readLine()) != null) { - - //parse the String - st = new StringTokenizer(line, SEPARATOR_ENTRY); - name = st.nextToken(); - if (name == null) { - throw new DeployerLogException("Inconsistent line in the file " + logFile); - } - - field = st.nextToken(); - if (field == null) { - throw new DeployerLogException("Inconsistent line in the file " + logFile); - } - - originalField = new File(field); - - field = st.nextToken(); - if (field == null) { - throw new DeployerLogException("Inconsistent line in the file " + logFile); - } - - copyField = new File(field); - - logger.debug("Entry[originalField=" + originalField + ",copyField=" + copyField + "]"); - - IAddonLogEntry addonLogEntry = new AddonLogEntry(name, originalField, copyField); - this.logEntries.add(addonLogEntry); - - } - // Close the input stream - br.close(); - } catch (IOException ioe) { - throw new DeployerLogException("Error while reading the log file " + logFile + " :" + ioe.getMessage()); - } - } - - /** - * Dump(save) the entries to the log file. - * @throws DeployerLogException if the save failed. - */ - @Override - protected synchronized void saveEntries() throws DeployerLogException { - - PrintWriter pw = null; - try { - pw = new PrintWriter(new BufferedWriter(new FileWriter(logFile))); - } catch (IOException e) { - throw new DeployerLogException("Problem while trying to get an output stream for the " + logFile + " file"); - } - - IAddonLogEntry logEntry = null; - String name = null; - String original = null; - String copy = null; - String line = null; - for (Enumeration e = logEntries.elements(); e.hasMoreElements();) { - logEntry = e.nextElement(); - - //get the infos - try { - name = logEntry.getName(); - original = logEntry.getOriginal().getCanonicalPath(); - copy = logEntry.getCopy().getCanonicalPath(); - } catch (IOException ioe) { - throw new DeployerLogException("Problem while trying to get files names "); - } - - //create the line - line = name + SEPARATOR_ENTRY + original + SEPARATOR_ENTRY + copy; - - //dump the line - pw.println(line); - } - // Close the stream - pw.close(); - } - - /** - * Add the entry and return the new entries. - * @param logEntry the entry to add - * @throws DeployerLogException if the add can't be done - */ - @Override - public Vector addEntry(final IAddonLogEntry logEntry) throws DeployerLogException { - if (logEntries == null) { - throw new DeployerLogException("Can not add an entry, the vector is null"); - } - - //add only if it's not already present - String name = null; - File originalEntry = null; - File copyEntry = null; - - boolean found = false; - Enumeration e = logEntries.elements(); - - //add only if the entry is not found - while (e.hasMoreElements() && !found) { - IAddonLogEntry entry = e.nextElement(); - name = entry.getName(); - originalEntry = entry.getOriginal(); - copyEntry = entry.getCopy(); - - if (originalEntry.getPath().equals(logEntry.getOriginal().getPath()) - && copyEntry.getPath().equals(logEntry.getCopy().getPath()) - && name.equals(logEntry.getName())) { - found = true; - } - } - if (found) { - return logEntries; - } - - //add can be done - logEntries.add(logEntry); - - //write to the file. - saveEntries(); - - //return the new vector - return logEntries; - } - - /** - * Add the entry and return the new entries. - * @param original the name of the file - * @param copy the copy of the file - * @return the new vector of IAddonLogEntry item. - * @throws DeployerLogException if the add can't be done - */ - public synchronized Vector addEntry(final String name, final File original, final File copy) - throws DeployerLogException { - - if (logEntries == null) { - throw new DeployerLogException("Can not add an entry, the vector is null"); - } - - //add only if it's not already present - return addEntry(new AddonLogEntry(name, original, copy)); - } - - /** - * @param original Original File - * @return the entry which match with the orginal file - */ - @Override - public IAddonLogEntry getEntry(final File original) { - - for (IAddonLogEntry logEntry: this.logEntries) { - - if (logEntry.getOriginal().equals(original)) { - return logEntry; - } - } - - return null; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonLogEntry.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonLogEntry.java deleted file mode 100644 index 145f666017..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonLogEntry.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.util; - -import org.ow2.jonas.addon.deploy.api.util.IAddonLogEntry; -import org.ow2.jonas.lib.work.LogEntryImpl; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; - -/** - * Class wich represent an entry in an addon log file - */ -public class AddonLogEntry extends LogEntryImpl implements IAddonLogEntry { - - /** - * The name of the addon - */ - private String name; - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonLogEntry.class); - - /** - * Constructor of a log entry. - * @param name the name of the addon - * @param original the file to copy - * @param copy name of the copy - */ - public AddonLogEntry(final String name, final File original, final File copy) { - super(original, copy); - this.name = name; - } - - /** - * @return the name of the addon - */ - public String getName() { - return name; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonUtil.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonUtil.java deleted file mode 100644 index c49ed6151b..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/AddonUtil.java +++ /dev/null @@ -1,668 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.util; - -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.addon.deploy.api.deployable.IAddonDeployable; -import org.ow2.jonas.addon.deploy.api.deployable.ISortableDeployable; -import org.ow2.jonas.addon.deploy.api.util.IAddonStructure; -import org.ow2.jonas.addon.deploy.impl.deployable.SortableDeployable; -import org.ow2.jonas.addon.deploy.impl.deployable.SortableDeployableComparator; -import org.ow2.jonas.addon.deploy.impl.deployer.AddonMetaData; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJB21Deployable; -import org.ow2.util.ee.deploy.api.deployable.EJB3Deployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.OSGiDeployable; -import org.ow2.util.ee.deploy.api.deployable.RARDeployable; -import org.ow2.util.ee.deploy.api.deployable.UnknownDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; -import org.ow2.util.plan.deploy.deployable.api.FileDeployable; -import org.ow2.util.url.URLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.StringTokenizer; -import java.util.regex.Pattern; - -/** - * Defined some method for Addons - */ -public class AddonUtil { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(AddonUtil.class); - - /** - * End of line - */ - public static final String EOL = "\n"; - - /** - * A property separator (between a property name and a property value) - */ - public static final String PROPERTY_SEPARATOR = " "; - - /** - * The name of the JONAS_ROOT directory - */ - public static final String JONAS_ROOT = JProp.getJonasRoot(); - - /** - * The name of the JONAS_BASE directory. - */ - public static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * JOnAS configuration directory - */ - public static final String JONAS_CONF_DIRECTORY = JONAS_BASE + File.separator + ConfigurationConstants.DEFAULT_CONFIG_DIR; - - /** - * JONAS_ROOT repository directory - */ - public static final String JONAS_ROOT_REPOSITORY = JProp.getRepositoriesRootDir(); - - /** - * JONAS_BASE repository directory - */ - public static final String JONAS_BASE_REPOSITORY = JProp.getRepositoriesBaseDir(); - - /** - * url-internal directory name - */ - public static final String URL_INTERNAL_DIRECTORY_NAME = "url-internal"; - - /** - * JONAS_ROOT Url internal directory - */ - public static final String JONAS_ROOT_URL_INTERNAL_DIRECTORY = JONAS_ROOT_REPOSITORY + File.separator + URL_INTERNAL_DIRECTORY_NAME; - - /** - * JONAS_BASE Url internal directory - */ - public static final String JONAS_BASE_URL_INTERNAL_DIRECTORY = JONAS_BASE_REPOSITORY + File.separator + URL_INTERNAL_DIRECTORY_NAME; - - /** - * JOnAS Addons directory - */ - public static final String JONAS_ADDONS_DIRECTORY = JONAS_CONF_DIRECTORY + File.separator + "addons"; - - /** - * Addons log file - */ - public static final String ADDONS_LOG_FILE = "addons.log"; - - /** - * The log for the work cleaner service - */ - public static final String WORK_CLEANER_LOG_FILE = "workCleaner.log"; - - /** - * jonas.service string - */ - public static final String JONAS_SERVICE = "jonas.service."; - - /** - * jonas.service.*.class pattern - */ - public static final Pattern JONAS_SERVICE_CLASS_PROPERTY_PATTERN = Pattern.compile("jonas.service.*.class"); - - /** - * Dot - */ - public static final String DOT = "."; - - /** - * Dash - */ - public static final String DASH = "-"; - - /** - * The xml extension - */ - public static final String XML_EXTENSION = DOT + "xml"; - - /** - * The class extension - */ - public static final String CLASS_EXTENSION = DOT + "class"; - - /** - * Key which allow us to retrieve abstract deployment plan - */ - public static final String ABSTRACT_DEPLOYMENT_PLAN_KEY = "base"; - - /** - * OSGi deployable priority - */ - public static final int OSGI_DEPLOYABLE_PRIORITY = 1; - - /** - * RAR deployable priority - */ - public static final int RAR_DEPLOYABLE_PRIORITY = OSGI_DEPLOYABLE_PRIORITY + 1; - - /** - * Datasource deployable priority - */ - public static final int DATASOURCE_DEPLOYABLE_PRIORITY = RAR_DEPLOYABLE_PRIORITY + 1; - - /** - * Deployment plan deployable priority - */ - public static final int DEPLOYMENT_PLAN_DEPLOYABLE_PRIORITY = DATASOURCE_DEPLOYABLE_PRIORITY + 1; - - /** - * Config Admin deployable priority - */ - public static final int CONFIG_ADMIN_DEPLOYABLE_PRIORITY = DEPLOYMENT_PLAN_DEPLOYABLE_PRIORITY + 1; - - /** - * EJB2 deployable priority - */ - public static final int EJB2_DEPLOYABLE_PRIORITY = CONFIG_ADMIN_DEPLOYABLE_PRIORITY + 1; - - /** - * EJB3 deployable priority - */ - public static final int EJB3_DEPLOYABLE_PRIORITY = EJB2_DEPLOYABLE_PRIORITY + 1; - - /** - * EAR deployable priority - */ - public static final int EAR_DEPLOYABLE_PRIORITY = EJB3_DEPLOYABLE_PRIORITY + 1; - - /** - * WAR deployable priority - */ - public static final int WAR_DEPLOYABLE_PRIORITY = EAR_DEPLOYABLE_PRIORITY + 1; - - /* - * The default priority - */ - public static final int DEFAULT_DEPLOYMENT_PLAN_PRIORITY = WAR_DEPLOYABLE_PRIORITY + 1; - - /** - * Set AddonMetadata object from a jonas-addon-metadata.xml file - * @param addonMetadataFile JOnAS addon metadata file - * @param unpackedDeployablePath The path to the unpack deployable - * @throws Exception if there is no JOnAS deployment plan associated to a JOnAS service (if the addon represents a - * JOnAS service) - */ - public static AddonMetaData getAddonMetadata(final File addonMetadataFile, final String unpackedDeployablePath) - throws Exception { - InputStream addonInputStream = null; - try { - addonInputStream = new FileInputStream(addonMetadataFile); - } catch (FileNotFoundException e) { - logger.info("Cannot create inputstream. AdddonMetaData file not found .", e); - } - - AddonMetaData addonMetaData = new AddonMetaData(); - addonMetaData.setAddonMetaDataFile(addonMetadataFile); - - //metadata to set - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = null; - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - logger.error("." + e); - } - - Document dom = null; - try { - dom = db.parse(addonInputStream); - } catch (SAXException e) { - logger.error("." + e); - } catch (IOException e) { - logger.error("." + e); - } - - Element rootElement = dom.getDocumentElement(); - - //set metadata - for (Node child = rootElement.getFirstChild(); child != null; child = child.getNextSibling()) { - - if (child.getNodeType() == child.ELEMENT_NODE) { - - Node firstChild = child.getFirstChild(); - String value = ""; - if (firstChild != null) { - value = child.getFirstChild().getNodeValue(); - } - - if (child.getNodeName().equals("name")) { - addonMetaData.setName(value); - } else if (child.getNodeName().equals("description")) { - addonMetaData.setDescription(value); - } else if (child.getNodeName().equals("tenant-id")) { - addonMetaData.setTenantId(value); - } else if (child.getNodeName().equals("instance")) { - addonMetaData.setInstance(value); - } else if (child.getNodeName().equals("author")) { - addonMetaData.setAuthor(value); - } else if (child.getNodeName().equals("licence")) { - addonMetaData.setLicence(value); - } else if (child.getNodeName().equals("jonas-version")) { - try { - addonMetaData.setJonasVersions(getRange(value)); - } catch (Exception e) { - logger.error("Cannot get the range of compatible JOnAS versions", e); - } - } else if (child.getNodeName().equals("autostart")) { - addonMetaData.setAutostart(Boolean.parseBoolean(value)); - } else if (child.getNodeName().equals("jvm-version")) { - try { - addonMetaData.setJvmVersions(getRange(value)); - } catch (Exception e) { - logger.error("Cannot get the range of compatible Jvm versions", e); - } - } else if (child.getNodeName().equals("provides")) { - addonMetaData.setProvides(value); - } else if (child.getNodeName().equals("requirements")) { - addonMetaData.setRequirements(value); - } else if (child.getNodeName().equals("properties")) { - - Properties properties = new Properties(); - - for (Node node = ((Element) child).getFirstChild(); node != null; node = node.getNextSibling()) { - - if (node.getNodeType() == node.ELEMENT_NODE) { - - Node valueNode = node.getFirstChild(); - - if (valueNode != null) { - - String key = node.getNodeName(); - String val = valueNode.getNodeValue(); - properties.put(key, val); - - //generate a jonas.services property for the addon if autostart property is true - if (JONAS_SERVICE_CLASS_PROPERTY_PATTERN.matcher(key).matches()) { - - String service = key.substring(key.indexOf(JONAS_SERVICE) + JONAS_SERVICE.length(), - key.indexOf(CLASS_EXTENSION)); - - addonMetaData.setService(service); - - final String defaultDeploymentPlan = AddonUtil.getDefaultDeploymentPlan(service); - final String abstractDeploymentPlan = AddonUtil.getAbstractDeploymentPlan(service); - - final String addonDeployWorkDirectory = AddonUtil.getAddonDeployWorkDirectory(unpackedDeployablePath); - List files = Arrays.asList(new File(addonDeployWorkDirectory).listFiles()); - - //searching for a default deployment plan (${service}.xml) or a abstract deployment - //plan (${service}-base.xml) - int i = 0; - while (i < files.size() && !files.get(i).getName().equals(abstractDeploymentPlan)) { - i++; - } - if (i < files.size() && files.get(i).getName().equals(abstractDeploymentPlan)) { - - //searching implementation name - //implementation name is the (countTokens -1) token - StringTokenizer stringTokenizer = new StringTokenizer(val, DOT); - String implementation = null; - int countTokens = stringTokenizer.countTokens(); - for (int y = 1; y < countTokens; y++) { - implementation = stringTokenizer.nextElement().toString(); - } - - File implDeploymentPlan = new File(addonDeployWorkDirectory, - AddonUtil.getImplDeploymentPlan(service, implementation)); - if (!implDeploymentPlan.exists()) { - throw new Exception ("Could not find the deployment plan " + implDeploymentPlan.getAbsolutePath()); - } else { - //if an abstract & implementation deployment plan is found, it's a JOnAS service - addonMetaData.setImplementation(implementation); - } - } else { - //Do nothing... JOnAS plans shouldn't be mandatory (we could have JOnAS bundles instead of JOnAS plans) - } - } - } - } - } - - addonMetaData.setServiceProperties(properties); - - } - } - } - - return addonMetaData; - } - - /** - * Set AddonMetadata object from a jonas-addon.xml file - * @param addonArchive The Archive - */ - public static File getAddonMetadataFile(final IArchive addonArchive) { - Iterator urls = null; - - try { - urls = addonArchive.getResources(); - } catch (ArchiveException e) { - logger.info("Cannot get resources from the archive .", e); - } - - if (urls !=null) { - while (urls.hasNext()) { - URL url = urls.next(); - if (url.getFile().endsWith(IAddonStructure.JONAS_ADDON_METADATA)) { - return URLUtils.urlToFile(url); - } - } - } - return null; - } - - /** - * @param serverProperties ServerProperties - * @return the work directory for Addon - */ - public static String getAddonsWorkDirectory(final ServerProperties serverProperties) { - return serverProperties.getWorkDirectory() + File.separator + "addons"; - } - - /** - * @param addonWorkDirectory The directory were the addon is unpacked - * @return the conf directory of an unpacked Addon - */ - public static String getAddonConfWorkDirectory(final String addonWorkDirectory) { - return addonWorkDirectory + File.separator + IAddonStructure.CONF_DIRECTORY; - } - - /** - * @param addonWorkDirectory The directory were the addon is unpacked - * @return the deploy directory of an unpacked Addon - */ - public static String getAddonDeployWorkDirectory(final String addonWorkDirectory) { - return addonWorkDirectory + File.separator + IAddonStructure.DEPLOY_DIRECTORY; - } - - /** - * @param addonWorkDirectory The directory were the addon is unpacked - * @return the repository directory of an unpacked Addon - */ - public static String getAddonRepositoryWorkDirectory(final String addonWorkDirectory) { - if (addonWorkDirectory.substring(addonWorkDirectory.length() - 1).equals("/")) { - return addonWorkDirectory + IAddonStructure.REPOSITORY_DIRECTORY; - } else { - return addonWorkDirectory + File.separator + IAddonStructure.REPOSITORY_DIRECTORY; - } - } - - /** - * @param addonWorkDirectory The directory were the addon is unpacked - * @return the ANT directory of an unpacked Addon - */ - public static String getAddonAntWorkDirectory(final String addonWorkDirectory) { - return addonWorkDirectory + File.separator + IAddonStructure.ANT_DIRECTORY; - } - - /** - * @param addonWorkDirectory The directory were the addon is unpacked - * @return the bin directory of an unpacked Addon - */ - public static String getAddonBinWorkDirectory(final String addonWorkDirectory) { - return addonWorkDirectory + File.separator + IAddonStructure.BIN_DIRECTORY; - } - - /** - * @param serverProperties ServerProperties - * @return The path to the addon log file - */ - public static String getAddonLogFile(final ServerProperties serverProperties) { - return getAddonsWorkDirectory(serverProperties) + File.separator + ADDONS_LOG_FILE; - } - - /** - * @param serverProperties ServerProperties - * @return The path to the addon work cleaner log file - */ - public static String getWorkCleanerLogFile(final ServerProperties serverProperties) { - return getAddonsWorkDirectory(serverProperties) + File.separator + WORK_CLEANER_LOG_FILE; - } - - /** - * @param unpackedDeployable The unpacked deployable - * @return the path to the unpacked deployable - */ - public static String getAddonWorkDirectory(final IAddonDeployable unpackedDeployable) { - try { - return unpackedDeployable.getArchive().getURL().getPath(); - } catch (ArchiveException e) { - logger.error("Cant get the unpacked URL", e); - return null; - } - } - - /** - * @param addonName The name of the addon - * @return the addon directory path (in JONAS_BASE/conf/...) - */ - public static String getAddonDirectoryPath(final String addonName) { - return AddonUtil.JONAS_ADDONS_DIRECTORY + File.separator + addonName; - } - - /** - * @param file A file - * @return the deployable assoaciated to the file - */ - public static IDeployable getDeployable(final IDeployableHelper deployableHelper, final File file) { - - IArchive archive = ArchiveManager.getInstance().getArchive(file); - if (archive == null) { - logger.warn("Ignoring invalid file ''{0}''", file); - } - - try { - return deployableHelper.getDeployable(archive); - } catch (DeployableHelperException e) { - logger.error("Cannot get a deployable for the archive ''{0}''", archive, e); - return null; - } - } - - /** - * @param service The name of the JOnAS service - * @return the name of the JOnAS default deployment plan - */ - public static String getDefaultDeploymentPlan(final String service) { - return service + XML_EXTENSION; - } - - /** - * @param service The name of the JOnAS service - * @return the name of the JOnAS abstract deployment plan - */ - public static String getAbstractDeploymentPlan(final String service) { - return service + DASH + ABSTRACT_DEPLOYMENT_PLAN_KEY + XML_EXTENSION; - } - - /** - * @param service The name of the JOnAS service - * @param implementation The name of the implementation service - * @return the name of the JOnAS implementation deployment plan - */ - public static String getImplDeploymentPlan(final String service, final String implementation) { - return service + DASH + implementation + XML_EXTENSION; - } - - /** - * @param sourceFile The source file - * @param destFile The destination file - */ - public static void copyFile(final File sourceFile, final File destFile) { - try { - FileUtils.copyFile(sourceFile.getAbsolutePath(), destFile.getAbsolutePath()); - } catch (FileUtilsException e) { - logger.error("Cannot copy file " + sourceFile.getAbsolutePath() + " to " + - destFile.getAbsolutePath() + ".", e); - } - } - - /** - * Sort SortableDeployable list by priority - * @param sortableDeployables the list of SortableDeployable - */ - public static void sortSortableDeployable(final List sortableDeployables){ - Collections.sort(sortableDeployables, new SortableDeployableComparator()); - } - - /** - * @param deployable The deployable - * @return a SortableDeployable object associate tho the given deployable - */ - public static ISortableDeployable getSortableDeployable(final IDeployable deployable) { - Integer priority = null; - if (deployable instanceof OSGiDeployable) { - priority = AddonUtil.OSGI_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof DeploymentPlanDeployable) { - priority = AddonUtil.DEPLOYMENT_PLAN_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof EARDeployable) { - priority = AddonUtil.EAR_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof EJB3Deployable) { - priority = AddonUtil.EJB3_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof EJB21Deployable) { - priority = AddonUtil.EJB2_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof WARDeployable) { - priority = AddonUtil.WAR_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof RARDeployable) { - priority = AddonUtil.RAR_DEPLOYABLE_PRIORITY; - } else if (deployable instanceof FileDeployable) { - priority = AddonUtil.CONFIG_ADMIN_DEPLOYABLE_PRIORITY; - } else if (!(deployable instanceof UnknownDeployable)) { - priority = AddonUtil.DEFAULT_DEPLOYMENT_PLAN_PRIORITY; - } - return new SortableDeployable(deployable, priority); - } - - /** - * @param rangeProperty A range property - * @return a range - */ - private static Range getRange(final String rangeProperty) throws Exception { - Range range = null; - - //jonas version format: {versionMin,versionMax] - //with '{' for incluion and '[' for exclusion. - if ((rangeProperty.startsWith(Range.EXCLUSION_OPEN_TAG) || rangeProperty.startsWith(Range.INCLUSION_OPEN_TAG)) && - (rangeProperty.endsWith(Range.EXCLUSION_CLOSE_TAG) || rangeProperty.endsWith(Range.INCLUSION_CLOSE_TAG))) { - - final boolean isInclusionOpenTag = rangeProperty.startsWith(Range.INCLUSION_OPEN_TAG); - final boolean isInclusionCloseTag = rangeProperty.endsWith(Range.INCLUSION_CLOSE_TAG); - - //it's a well formed range metadata - StringTokenizer stringTokenizer = new StringTokenizer(rangeProperty.substring(1, rangeProperty.length() - 1), ","); - int countTockens = stringTokenizer.countTokens(); - - if ((countTockens == 1 && (isInclusionOpenTag != isInclusionCloseTag)) || (countTockens > 2) || (countTockens < 0)) { - throw new Exception("Cannot find a valid range for property " + rangeProperty); - } - - range = new Range(isInclusionOpenTag, isInclusionCloseTag, stringTokenizer.nextToken()); - if (countTockens == 2) { - range.setMaxRange((String) stringTokenizer.nextToken()); - } - } - - return range; - } - - /** - * Copy all files of a directory into an other directory - * @param originalDirectoryPath The path to the original directory - * @param targetDirectoryPath The path to the target directory - */ - public static void copyFiles(final String originalDirectoryPath, final String targetDirectoryPath) { - File configurationDirectory = new File(originalDirectoryPath); - - if (configurationDirectory.exists()) { - - //copy others configuration files - for (File configurationFile: configurationDirectory.listFiles()) { - String filename = configurationFile.getName(); - String confFile = targetDirectoryPath + File.separator + filename; - - try { - FileUtils.copyFile(configurationFile.getAbsolutePath(), confFile); - } catch (FileUtilsException e) { - logger.error("Cannot copy file " + filename + ".", e); - } - } - } - } - - /** - * - * @param serviceRegistrations The list of ServiceRegistration - * @param propertyKey The key - * @param propertyValue The value - * @return the service registration which property value of the key parameter equals to the property value parameter - */ - public static ServiceRegistration getServiceRegistration(final List serviceRegistrations, - final String propertyKey, final String propertyValue) { - for (ServiceRegistration serviceRegistration: serviceRegistrations) { - if (serviceRegistration.getReference().getProperty(propertyKey).equals(propertyValue)) { - return serviceRegistration; - } - } - return null; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/Range.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/Range.java deleted file mode 100644 index 329a14c613..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/util/Range.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.deploy.impl.util; - -/** - * Represents a range of values - * @author Jeremy Cazaux - */ -public class Range { - - /** - * The min range value - */ - private String minRange; - - /** - * The max range value - */ - private String maxRange; - - /** - * The open range tag - */ - private String rangeOpenTag; - - /** - * The close range tag - */ - private String rangeCloseTag; - - /** - * Exclusion open tag for range of version - */ - public static final String EXCLUSION_OPEN_TAG = "("; - - /** - * Exclusion end tag for range of version - */ - public static final String EXCLUSION_CLOSE_TAG = ")"; - - /** - * Inclusion open tag for range of version - */ - public static final String INCLUSION_OPEN_TAG = "["; - - /** - * Inclusion end tag for range of version - */ - public static final String INCLUSION_CLOSE_TAG = "]"; - - /** - * Default constructor - * @param isInclusionOpenTag True if it's an inclusion open tag - * @param isInclusionCloseTag True if it's an inclusion close tag - * @param minRange The min range value to set - */ - public Range(final Boolean isInclusionOpenTag, final Boolean isInclusionCloseTag, final String minRange) { - this.minRange = minRange; - - if (isInclusionOpenTag) { - this.rangeOpenTag = INCLUSION_OPEN_TAG; - } else { - this.rangeOpenTag = EXCLUSION_OPEN_TAG; - } - - if (isInclusionCloseTag) { - this.rangeCloseTag = INCLUSION_CLOSE_TAG; - } else { - this.rangeCloseTag = EXCLUSION_CLOSE_TAG; - } - } - - /** - * @param maxRange The max range value to set - */ - public void setMaxRange(final String maxRange) { - this.maxRange = maxRange; - } - - /** - * Check if the given value is support - * @param value The value to check - */ - public boolean isSupported(final String value) { - - //minRange == value - if (this.minRange.equals(value)) { - return true; - - //minRange < value - } else if (this.minRange.compareTo(value) < 0 && this.maxRange != null) { - - //maxRange == value - if (this.maxRange.equals(value)) { - return true; - - //maxRange > value - } else if (this.maxRange.compareTo(value) > 0) { - return true; - } else { - return false; - } - - } else { - return false; - } - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonDesc.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonDesc.java deleted file mode 100644 index d51303dfec..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonDesc.java +++ /dev/null @@ -1,395 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.addon.deploy.impl.xml; - -import org.ow2.jonas.addon.deploy.jonasaddon.v1.generated.JonasAddonType; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import javax.xml.bind.JAXBElement; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Pattern; -import java.util.zip.ZipOutputStream; - -/** - * Describe jonas-addon - * @author Mohammed Boukada - */ -public class JonasAddonDesc { - - /** - * The logger - */ - protected static Log logger = LogFactory.getLog(JonasAddonDesc.class); - - /** - * Jonas Addon - */ - protected Object jonasAddon; - - /** - * Version of jonas-addon - */ - protected JonasAddonVersion jonasAddonVersion; - - /** - * Properties file path - */ - private static final String JONAS_ADDON_PROPERTIES_NAME = "properties/jonas-addon.properties"; - - /** - * Default jonas-addon version - */ - private static final JonasAddonVersion DEFAULT_JONAS_ADDON_VERSION = JonasAddonVersion.JONAS_ADDON_1; - - /** - * XSD URL - */ - protected List xsdUrls; - - /** - * Namespaces of the XML document - */ - protected Map namespaces; - - /** - * XMLNS pattern - */ - public static final Pattern XMLNS_PATTERN = Pattern.compile("xmlns.*"); - - /** - * Default constructor - */ - public JonasAddonDesc() throws Exception { - init(); - } - - /** - * Constructor with xml url - * @param urlJonasAddon - * @throws Exception - */ - public JonasAddonDesc(URL urlJonasAddon) throws Exception { - init(); - loadCloudApplication(urlJonasAddon); - } - - /** - * Constructor with xml content - * @param jonasAddon - * @throws Exception - */ - public JonasAddonDesc(String jonasAddon) throws Exception { - init(); - loadCloudApplication(jonasAddon); - } - - /** - * Set XSD URLs - * @throws Exception - */ - private void setXsdUrls() throws Exception { - setXsdUrls(jonasAddonVersion); - } - - private void setXsdUrls(JonasAddonVersion jonasAddonVersion) throws Exception { - // Get xsd paths - String xsdJonasAddon = JonasAddonPropertiesManager.getXsdCloudApplicationPath(jonasAddonVersion); - - // Store paths with there corresponding class (classloader) - Map> resources = new LinkedHashMap>(); - // Start by adding imported xsd - resources.put(xsdJonasAddon, JonasAddonVersion.class); // Must be the last added to the map - - xsdUrls = getXsdURL(resources); - } - - /** - * Initialisation - * @throws Exception - */ - private void init() throws Exception { - this.xsdUrls = new LinkedList(); - this.namespaces = new LinkedHashMap(); - JonasAddonPropertiesManager.setProperties(loadProperties(JONAS_ADDON_PROPERTIES_NAME, getClass().getClassLoader())); - } - - /** - * Load the jonas-addon from the url urlJonasAddon using the schema from - * schemaUrl. - * - * @param urlJonasAddon Url of the jonas-addon on xml format - * @throws Exception - */ - public void loadCloudApplication(final URL urlJonasAddon) throws Exception { - initJonasAddonVersion(urlJonasAddon); - setXsdUrls(); - JonasAddonXmlLoader jonasAddonXmlLoader = new JonasAddonXmlLoader(urlJonasAddon, this.jonasAddonVersion, this.xsdUrls); - this.jonasAddon = jonasAddonXmlLoader.getJonasAddon(); - } - - /** - * Load the jonas-addon from the xml string jonasAddon using the schema from - * schemaUrl. - * - * @param jonasAddon Url of the jonas-addon on xml format - * @throws Exception - */ - public void loadCloudApplication(final String jonasAddon) throws Exception { - initJonasAddonVersion(jonasAddon); - setXsdUrls(); - JonasAddonXmlLoader jonasAddonXmlLoader = new JonasAddonXmlLoader(jonasAddon, this.jonasAddonVersion, this.xsdUrls); - this.jonasAddon = jonasAddonXmlLoader.getJonasAddon(); - } - - /** - * Generate jonas-addon xml - * @param jonasAddon - * @return xml content - * @throws Exception - */ - public String generateJonasAddon(JAXBElement jonasAddon) throws Exception { - JonasAddonXmlLoader jonasAddonXmlLoader = new JonasAddonXmlLoader(); - setXsdUrls(DEFAULT_JONAS_ADDON_VERSION); - return jonasAddonXmlLoader.toXml(jonasAddon, this.xsdUrls, DEFAULT_JONAS_ADDON_VERSION); - } - - /** - * Generate jonas-addon xml - * @param jonasAddon - * @param zipOutputStream - * @throws Exception - */ - public void generateJonasAddon(JAXBElement jonasAddon, ZipOutputStream zipOutputStream) throws Exception { - JonasAddonXmlLoader jonasAddonXmlLoader = new JonasAddonXmlLoader(); - setXsdUrls(DEFAULT_JONAS_ADDON_VERSION); - jonasAddonXmlLoader.toXml(jonasAddon, this.xsdUrls, DEFAULT_JONAS_ADDON_VERSION, zipOutputStream); - } - - /** - * Initialize the jonas-addon version which is matching the given xml file - * @param urlJonasAddon The jonas-addon URL - */ - private void initJonasAddonVersion(final URL urlJonasAddon) { - initJonasAddonVersion(getFile(urlJonasAddon)); - } - - /** - * Initialize the jonas-addon version which is matching the given xml file - * @param jonasAddonFile The jonas-addon file - */ - private void initJonasAddonVersion(final File jonasAddonFile) { - initJonasAddonVersion(getDocument(jonasAddonFile)); - } - - /** - * Initialize the jonas-addon version which is matching the given xml file - * @param jonasAddon The content of the jonas-addon - */ - private void initJonasAddonVersion(final String jonasAddon) { - initJonasAddonVersion(getDocument(jonasAddon)); - } - - /** - * Initialize the jonas-addon version which is matching the given xml file - * @param document The {@link org.w3c.dom.Document} associated to the jonas-addon - */ - private void initJonasAddonVersion(final Document document) { - if (document != null) { - getNamespace(document); - } - this.jonasAddonVersion = JonasAddonPropertiesManager.getJonasAddonVersion(new LinkedList(this.namespaces.keySet())); - } - - /** - * Load properties file - * @return properties - * @throws Exception - */ - protected Properties loadProperties(String location, ClassLoader classLoader) throws Exception { - Properties properties = new Properties(); - InputStream input = classLoader.getResourceAsStream(location); - try { - properties.load(input); - } catch (Exception e) { - throw new Exception("Cannot load " + location + " properties file", e); - } finally { - input.close(); - } - return properties; - } - - /** - * Get all namespaces of the document - * @param node The node to check - */ - protected void getNamespace(final Node node) { - NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node child = nodeList.item(i); - if (child.getNodeType() == Node.ELEMENT_NODE) { - Element element = (Element) child; - NamedNodeMap namedNodeMap = element.getAttributes(); - for (int y = 0; y < namedNodeMap.getLength(); y++) { - Attr attribute = Attr.class.cast(namedNodeMap.item(y)); - if (XMLNS_PATTERN.matcher(attribute.getName()).matches()) { - String namespace = attribute.getValue(); - if (namespace != null && !namespace.isEmpty()) { - this.namespaces.put(namespace, child); - } - getNamespace(child); - } - } - } - } - } - - /** - * @param resources List of resources - * @return the list of Source associate to the given resources list - */ - protected List getXsdURL(final Map> resources) throws Exception { - List urls = new LinkedList(); - for (Map.Entry> resource : resources.entrySet()) { - URL url = getXsdURL(resource); - if (url != null) { - urls.add(url); - } - } - return urls; - } - - /** - * @param resource Resource - * @return the URL of the given resource - * @throws Exception - */ - protected URL getXsdURL(Map.Entry> resource) throws Exception { - String resourceName = resource.getKey(); - Class clazz = resource.getValue(); - return getXsdURL(resourceName, clazz); - } - - /** - * @param resource The resource to retrieve - * @param clazz A {@link Class} associated to the given resource (they should share the same classloader) - * @return the URL of the given resource - * @throws Exception - */ - protected URL getXsdURL(final String resource, final Class clazz) throws Exception { - URL url = clazz.getClassLoader().getResource(resource); - if (url == null) { - url = clazz.getResource(resource); - if (url == null) { - throw new Exception("Cannot get the URL of the resource " + resource + "\n"); - } - } - return url; - } - - /** - * @param url The xml URL - * @return the associated file - */ - protected File getFile(final URL url) { - try { - return new File(url.toURI()); - } catch (URISyntaxException e) { - logger.error("Cannot get the URI of the URL " + url.getFile(), e); - } - return null; - } - - /** - * @param file The file - * @return the associated document - */ - protected Document getDocument(final File file) { - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = null; - Document document = null; - try { - documentBuilder = documentBuilderFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - logger.error("Cannot get the instance of the DocumentBuilder", e); - } - if (documentBuilder != null) { - try { - document = documentBuilder.parse(file); - } catch (SAXException e) { - logger.error("Cannot parse XML file " + file.getAbsolutePath(), e); - } catch (IOException e) { - logger.error("Cannot parse XML file " + file.getAbsolutePath(), e); - } - } - return document; - } - - /** - * @param content - * @return the associated document - */ - protected Document getDocument(final String content) { - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = null; - Document document = null; - try { - documentBuilder = documentBuilderFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - logger.error("Cannot get the instance of the DocumentBuilder", e); - } - if (documentBuilder != null) { - try { - document = documentBuilder.parse(new InputSource(new StringReader(content.trim()))); - } catch (SAXException e) { - logger.error("Cannot parse XML content of " + content, e); - } catch (IOException e) { - logger.error("Cannot parse XML content of " + content, e); - } - } - return document; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonPropertiesManager.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonPropertiesManager.java deleted file mode 100644 index ed275692c1..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonPropertiesManager.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.addon.deploy.impl.xml; - -import java.util.List; -import java.util.Properties; - -/** - * Reads and manages the properties files - * @author Mohammed Boukada - */ -public class JonasAddonPropertiesManager { - - /** - * Jonas-addon properties - */ - private static Properties properties; - - /** - * Key for the jonas-addon 1.0 XSD path in the properties file - */ - private static String JONAS_ADDON_1_KEY_XSD = "xsdJonasAddonV1"; - - /** - * Key for the jonas-addon 1.0's XML namespace in the properties file - */ - private static String JONAS_ADDON_1_KEY_XMLNS = "xmlnsJonasAddonV1"; - - /** - * Key for the jonas-addon XML namespace in the properties file - */ - private static String JONAS_ADDON_1_KEY_SCHEMA_LOCATION = "schemaLocationJonasAddonV1"; - - /** - * Return the jonas-addon schema path - * @param jonasAddonVersion {@link JonasAddonVersion} - * @return the jonas-addon schema path - */ - public static String getXsdCloudApplicationPath(final JonasAddonVersion jonasAddonVersion) { - if (JonasAddonVersion.JONAS_ADDON_1.equals(jonasAddonVersion)) { - return properties.getProperty(JonasAddonPropertiesManager.JONAS_ADDON_1_KEY_XSD); - } - return null; - } - - /** - * Return the jonas-addon XML namespace - * @param jonasAddonVersion {@link JonasAddonVersion} - * @return the jonas-addon XML namespace - */ - public static String getCloudApplicationXMLNS(final JonasAddonVersion jonasAddonVersion) { - if (JonasAddonVersion.JONAS_ADDON_1.equals(jonasAddonVersion)) { - return properties.getProperty(JonasAddonPropertiesManager.JONAS_ADDON_1_KEY_XMLNS); - } - return null; - } - - /** - * Return the jonas-addon schema location - * @param jonasAddonVersion {@link JonasAddonVersion} - * @return the jonas-addon schema location - */ - public static String getCloudApplicationSchemaLocation(final JonasAddonVersion jonasAddonVersion) { - if (JonasAddonVersion.JONAS_ADDON_1.equals(jonasAddonVersion)) { - return properties.getProperty(JonasAddonPropertiesManager.JONAS_ADDON_1_KEY_SCHEMA_LOCATION); - } - return null; - } - - /** - * @param namespace A XML namesapce - * @return the correct jonas-addon version according to the given namespace - */ - public static JonasAddonVersion getJonasAddonVersion(final String namespace) { - if (properties.getProperty(JonasAddonPropertiesManager.JONAS_ADDON_1_KEY_XMLNS).equals(namespace)) { - return JonasAddonVersion.JONAS_ADDON_1; - } - return null; - } - - /** - * @param namespaces A list of namespaces - * @return the correct jonas-addon version according to the given list of namespaces - */ - public static JonasAddonVersion getJonasAddonVersion(final List namespaces) { - JonasAddonVersion jonasAddonVersion = null; - for (String namespace: namespaces) { - jonasAddonVersion = getJonasAddonVersion(namespace); - if (jonasAddonVersion != null) { - return jonasAddonVersion; - } - } - return null; - } - - /** - * Set properties - * @param props - */ - public static void setProperties(Properties props) { - properties = props; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonVersion.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonVersion.java deleted file mode 100644 index 99d3b26444..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonVersion.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.addon.deploy.impl.xml; - -/** - * jonas-addon versions - * @author Mohammed Boulada - */ -public enum JonasAddonVersion { - JONAS_ADDON_1 -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonXmlLoader.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonXmlLoader.java deleted file mode 100644 index 8079eab815..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/deploy/impl/xml/JonasAddonXmlLoader.java +++ /dev/null @@ -1,298 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.addon.deploy.impl.xml; - -import org.ow2.jonas.addon.deploy.jonasaddon.v1.generated.JonasAddonType; - -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringWriter; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.ZipOutputStream; - -/** - * Load the Xml jonas-addon - * @author Mohammed Boukada - */ -public class JonasAddonXmlLoader { - - Object jonasAddon; - - /** - * Default constructor - */ - public JonasAddonXmlLoader() {} - - /** - * Constructor. Loads the jonas-addon - * - * @param cloudApplicationURL path to the xml jonas-addon file - * @param jonasAddonVersion {@link JonasAddonVersion} - * @param xsdURLs URLs of XSD schemas - * @throws Exception - */ - public JonasAddonXmlLoader(final URL cloudApplicationURL, final JonasAddonVersion jonasAddonVersion, - final List xsdURLs) - throws Exception { - this.jonasAddon = loadSchemaAndFile(xsdURLs, - JonasAddonPropertiesManager.getCloudApplicationXMLNS(jonasAddonVersion), - JonasAddonPropertiesManager.getCloudApplicationSchemaLocation(jonasAddonVersion), "jonas-addon", - getRootClass(jonasAddonVersion), cloudApplicationURL); - } - - /** - * Constructor. Loads the jonas-addon - * - * @param xml XML to load. - * @param jonasAddonVersion {@link JonasAddonVersion} - * @param xsdURLs URLs of XSD schemas - * @throws Exception - */ - public JonasAddonXmlLoader(final String xml, final JonasAddonVersion jonasAddonVersion, - final List xsdURLs) - throws Exception { - this.jonasAddon = loadSchemaAndFile(xsdURLs, - JonasAddonPropertiesManager.getCloudApplicationXMLNS(jonasAddonVersion), - JonasAddonPropertiesManager.getCloudApplicationSchemaLocation(jonasAddonVersion), "jonas-addon", - getRootClass(jonasAddonVersion), xml); - } - - /** - * @param jonasAddonVersion {@link JonasAddonVersion} - * @return the correct root class according to the jonas-addon version - */ - private Class getRootClass(final JonasAddonVersion jonasAddonVersion) { - if (JonasAddonVersion.JONAS_ADDON_1.equals(jonasAddonVersion)) { - return JonasAddonType.class; - } - return null; - } - - /** - * Return the loaded jonas-addon - * - * @return the jonas-addon - */ - public Object getJonasAddon() { - return jonasAddon; - } - - /** - * Verifies an XML file against an XSD and instantiates it using a given - * class. - * - * @param xsdPaths XSDs files path. - * @param xmlns XML namespace, will be added if non found in the XML - * @param schemaLocation XML schema location, will be added if non found in - * the XML - * @param xmlRoot Root element of the XML (for completing the XML if XSD - * xmlns is missing) - * @param rootClass Root class used for instantiating JAXB. - * @param urlXML XML to load. - * @return XML loaded using JAXB and the rootClass. - * @throws Exception - */ - public T loadSchemaAndFile(final List xsdPaths, final String xmlns, final String schemaLocation, - final String xmlRoot, final Class rootClass, final URL urlXML) - throws Exception { - String xml = readURL(urlXML); - return loadSchemaAndFile(xsdPaths, xmlns, schemaLocation, xmlRoot, rootClass, xml); - } - - /** - * Verifies an XML file against an XSD and instantiates it using a given - * class. - * - * @param xsdPaths XSDs files path. - * @param xmlns XML namespace, will be added if non found in the XML - * @param schemaLocation XML schema location, will be added if non found in - * the XML - * @param xmlRoot Root element of the XML (for completing the XML if XSD - * xmlns is missing) - * @param rootClass Root class used for instantiating JAXB. - * @param xml XML to load. - * @return XML loaded using JAXB and the rootClass. - * @throws Exception - */ - public T loadSchemaAndFile(final List xsdPaths, final String xmlns, final String schemaLocation, - final String xmlRoot, final Class rootClass, String xml) - throws Exception { - - JAXBContext jc = JAXBContext.newInstance(rootClass); - Unmarshaller unMarshaller = jc.createUnmarshaller(); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - List xsdSources = getSources(xsdPaths); - Schema schema = schemaFactory.newSchema(xsdSources.toArray(new Source[xsdSources.size()])); - unMarshaller.setSchema(schema); - - final int xmlRootStart = xml.indexOf("<" + xmlRoot); - if (xmlRootStart != -1) { - final int xmlRootEnd = xml.indexOf(">", xmlRootStart); - - if (xmlRootEnd != -1) { - final int xmlnsIndex = xml.indexOf("xmlns", xmlRootStart); - - if (xmlnsIndex == -1) { - xml = xml.substring(0, xmlRootStart) + "<" + xmlRoot + " xmlns=\"" + xmlns - + "\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"" + xmlns + " " - + schemaLocation + "\"" + xml.substring(xmlRootStart + xmlRoot.length() + 1); - } - } - } - InputStream xmlInputStream = new ByteArrayInputStream(xml.getBytes()); - - T value; - JAXBElement root = unMarshaller.unmarshal(new StreamSource(xmlInputStream), rootClass); - value = root.getValue(); - - return value; - } - - /** - * Generate xml content - * @param jaxbElement root element - * @param jonasAddonVersion jonas-addon version - * @return xml content - * @throws javax.xml.bind.JAXBException - */ - public String toXml(JAXBElement jaxbElement, final List xsdURLs, JonasAddonVersion jonasAddonVersion) throws Exception { - JAXBContext jc = JAXBContext.newInstance(getRootClass(jonasAddonVersion)); - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - - // Load schemas - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - List xsdSources = getSources(xsdURLs); - Schema schema = schemaFactory.newSchema(xsdSources.toArray(new Source[xsdSources.size()])); - marshaller.setSchema(schema); - StringWriter sw = new StringWriter(); - marshaller.marshal(jaxbElement, sw); - return sw.toString(); - } - - /** - * Generate xml content - * @param jaxbElement root element - * @param jonasAddonVersion jonas-addon version - * @param zipOutputStream - * @throws javax.xml.bind.JAXBException - */ - public void toXml(JAXBElement jaxbElement, final List xsdURLs, JonasAddonVersion jonasAddonVersion, - ZipOutputStream zipOutputStream) throws Exception { - JAXBContext jc = JAXBContext.newInstance(getRootClass(jonasAddonVersion)); - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - - // Load schemas - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - List xsdSources = getSources(xsdURLs); - Schema schema = schemaFactory.newSchema(xsdSources.toArray(new Source[xsdSources.size()])); - marshaller.setSchema(schema); - marshaller.marshal(jaxbElement, zipOutputStream); - } - - /** - * Read url content - * @param url - * @return content - * @throws java.io.IOException - */ - private static String readURL(final URL url) throws IOException { - URLConnection connection = url.openConnection(); - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - try { - StringBuilder sb = new StringBuilder(); - String inputLine; - while ((inputLine = in.readLine()) != null) { - if (sb.length() > 0) { - sb.append('\n'); - } - sb.append(inputLine); - } - - return sb.toString(); - } finally { - in.close(); - } - } - - /** - * Get sources list corresponding to URLs - * @param urls List of URL - * @return the list of {@link javax.xml.transform.Source} associated to the list of url - */ - protected List getSources(final List urls) throws Exception { - List sources = new ArrayList(); - for (URL url: urls) { - Source source = getSource(url); - if (source != null) { - sources.add(source); - } - } - return sources; - } - - /** - * Get the source corresponding to URL - * @param url The {@link java.net.URL} - * @return the {@link javax.xml.transform.Source} associated to the given URL - * @throws Exception - */ - protected Source getSource(final URL url) throws Exception { - if (url != null) { - InputStream inputStream = null; - try { - inputStream = url.openStream(); - } catch (IOException e) { - throw new Exception("Cannot get the inpustream of the URL " + url.getPath() + "\n"); - } - - try { - return new StreamSource(inputStream); - } catch (Exception e) { - throw new Exception("Cannot create a new StreamSource for the URL : " + url.getPath() - + "\n", e); - } - } else { - return null; - } - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/properties/ServicePropertiesImpl.java b/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/properties/ServicePropertiesImpl.java deleted file mode 100644 index 44cb4ee0e5..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/java/org/ow2/jonas/addon/properties/ServicePropertiesImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.addon.properties; - -import org.ow2.jonas.properties.ServiceProperties; - -import java.util.Properties; - -/** - * {@inheritDoc} - */ -public class ServicePropertiesImpl implements ServiceProperties { - - /** - * Properties of the file - */ - private Properties properties; - - /** - * Name of the service - */ - private String service; - - /** - * Private constructor which reads a resource.properties file. - * @param properties Properties of the service - */ - public ServicePropertiesImpl(final Properties properties, final String service) { - this.properties = properties; - this.service = service; - } - - /** - * {@inheritDoc} - */ - public String getValue(final String key) { - return this.properties.getProperty(key); - } - - /** - * {@inheritDoc} - */ - public String getService() { - return this.service; - } - - /** - * {@inheritDoc} - */ - public Properties getProperties() { - return this.properties; - } -} diff --git a/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-1.0.xsd b/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-1.0.xsd deleted file mode 100644 index 3133927b8f..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-1.0.xsd +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - - - - - - - - - The <jonas-addon> describe the metadata of an Addon. - - - - - - - - - The <name> is the name the Addon. - - Example: - <name>tomcat6</name> - - - - - - - - - The <description> is the description of the Addon. - - Example: - <description>Tomcat6 Addon</description> - - - - - - - - - The <tenant-id> is the tenant-id of the addon. - - Example: - <tenant-id>T14</tenant-id> - - - - - - - - - The <instance> is the instance of the addon. - - Example: - <instance>MyInstance4</instance> - - - - - - - - - The <author> is the author of the addon. - - Example: - <author>The JOnAS Team</author> - - - - - - - - - The <licence> is the licence of the addon. - - Example: - <licence>LGPL</licence> - - - - - - - - - The <jonas-version> defines required JOnAS version range - - Example: - <jonas-version>[5.3.0-M6-SNAPSHOT]</jonas-version> - - - - - - - - - The <autostart> The autostart property. If set to false, the addon'll be only installed. - - Example: - <autostart>true</autostart> - - - - - - - - - The <jvm-version> defines required JVM version range - - Example: - <jvm-version>[1.0,2.0]</jvm-version> - - - - - - - - - The <repositories> The list of repositories used by the resolver. - - Example: - <repositories> - <repository>my.repository.com<repository> - </repositories> - - - - - - - - - The <provides> provides properties for the resolver. - - Example: - <provides>jonas.service.tomcat6</provides> - - - - - - - - - The <requirements> requirements properties for the resolver. - - Example: - <requirements/> - - - - - - - - - The <properties> The list of properties (for a JOnAS service). - - Example: - <properties> - <jonas.service.web.class>org.ow2.jonas.web.tomcat6.Tomcat6Service<jonas.service.web.class> - <jonas.service.web.parsingwithvalidation>true<jonas.service.web.parsingwithvalidation> - <jonas.service.web.ondemand.enabled>true<jonas.service.web.ondemand.enabled> - <jonas.service.web.ondemand.redirectPort>0<jonas.service.web.ondemand.redirectPort> - </properties> - - - - - - - - - - - The <repositories> type contains a list of repositories use by the resolver. - - - - - - - The <repository> contains a URL to a repository which can be used by the resolver. - Example: - <repository>my.repository.com</repository> - - - - - - - - - - List of properties for a JOnAS service - - - - - - - A property. - - - - - - - - - - - Example: - <jonas-addon xmlns="http://jonas.ow2.org/ns/jonas-addon/1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <!-- ... --> - </jonas-addon> - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-core.bnd b/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-core.bnd deleted file mode 100644 index bf1760e505..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/resources/META-INF/jonas-addon-core.bnd +++ /dev/null @@ -1,39 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.addon.deploy.impl.xml,\ - org.ow2.jonas.addon.deploy.jonasaddon.v1.generated,\ - !* - -Private-Package org.ow2.jonas.addon.deploy.impl.deployable.*,\ - org.ow2.jonas.addon.deploy.impl.deployer.*,\ - org.ow2.jonas.addon.deploy.impl.helper.*, \ - org.ow2.jonas.addon.deploy.impl.util.*, \ - org.ow2.jonas.addon.deploy.impl.config.*,\ - org.ow2.jonas.addon.deploy.impl.cleaner.*,\ - org.ow2.jonas.addon.properties.*,\ - -Import-Package org.ow2.jonas.lib.service.*,\ - * - - diff --git a/jonas/modules/services/jonas-addon/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-addon/core/src/main/resources/metadata.xml deleted file mode 100644 index 2b82f8cff2..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-addon/core/src/main/resources/properties/jonas-addon.properties b/jonas/modules/services/jonas-addon/core/src/main/resources/properties/jonas-addon.properties deleted file mode 100644 index 5cb1bb37bc..0000000000 --- a/jonas/modules/services/jonas-addon/core/src/main/resources/properties/jonas-addon.properties +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Internal reference to the jonas-addon-1.0 XSD -xsdJonasAddonV1 = META-INF/jonas-addon-1.0.xsd - -# These will be auto-added if the xmlns is missing in the jonas-addon -xmlnsJonasAddonV1 = http://jonas.ow2.org/ns/jonas-addon/1.0 -schemaLocationJonasAddonV1 = http://jonas.ow2.org/ns/xsds/jonas-addon-1.0.xsd \ No newline at end of file diff --git a/jonas/modules/services/jonas-addon/pom.xml b/jonas/modules/services/jonas-addon/pom.xml deleted file mode 100644 index e482c88540..0000000000 --- a/jonas/modules/services/jonas-addon/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.ow2.jonas - jonas-addon - pom - JOnAS :: Services :: JOnAS Addon - - core - - diff --git a/jonas/modules/services/jonas-audit/core/pom.xml b/jonas/modules/services/jonas-audit/core/pom.xml deleted file mode 100644 index c1a5085443..0000000000 --- a/jonas/modules/services/jonas-audit/core/pom.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - jonas-audit - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-audit-core - JOnAS :: Services :: Audit :: Core - bundle - - - - org.ow2.bundles - ow2-audit-report - ${ow2-bundles.version} - - - org.ow2.jonas - jndi-interceptors-core - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - commons-modeler - commons-modeler - provided - - - org.ow2.jonas - jonas-security-core - ${project.version} - provided - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - org.hamcrest - hamcrest-all - test - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - audit - - - org.ow2.jonas - jonas-audit-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/JOnASAuditServiceImpl.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/JOnASAuditServiceImpl.java deleted file mode 100644 index 57d24d0224..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/JOnASAuditServiceImpl.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.servlet.Filter; - -import org.ow2.jonas.audit.AuditService; -import org.ow2.jonas.audit.internal.logger.AuditLogService; -import org.ow2.jonas.audit.internal.logger.AuditLogServiceException; -import org.ow2.jonas.audit.internal.webauditor.filters.HttpAuditFilter; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.auditreport.api.AuditorJMXObjectNames; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * JOnAS Audit service. - * @author Florent Benoit - */ -public class JOnASAuditServiceImpl extends AbsServiceImpl implements AuditService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JOnASAuditServiceImpl.class); - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * Audit Log component. - */ - private AuditLogService auditLogService = null; - - - /** - * HTTP filter used to intercept http calls. - */ - private Filter httpFilter = null; - - /** - * ObjectName of the http filter. - */ - private ObjectName httpFilterObjectName = null; - - /** - * eventService to send events - */ - private IEventService eventService = null; - - /** - * Start the Service. Only need to create a RMI connector - * - * @exception ServiceException - * the service could not be started - */ - @Override - public void doStart() throws ServiceException { - - this.auditLogService = new AuditLogService(); - auditLogService.setJmxService(jmxService); - - try { - auditLogService.start(); - } catch (AuditLogServiceException e) { - throw new ServiceException("Cannot init audit log component", e); - } - - // Create the filter - httpFilter = new HttpAuditFilter(jmxService.getJmxServer(), eventService); - - // Load commons modeler - jmxService.loadDescriptors(HttpAuditFilter.class.getPackage().getName(),HttpAuditFilter.class.getClassLoader()); - - // Register MBean - try { - httpFilterObjectName = new ObjectName(jmxService.getDomainName() + AuditorJMXObjectNames.WEBAUDITOR_TYPE_COMPONENT + ",name=JOnAS"); - } catch (MalformedObjectNameException e) { - throw new ServiceException("Cannot build objectname", e); - } catch (NullPointerException e) { - throw new ServiceException("Cannot build objectname", e); - } - - try { - jmxService.registerModelMBean(httpFilter, httpFilterObjectName); - } catch (Exception e) { - throw new ServiceException("Cannot register MBean", e); - } - - logger.info("Audit service started."); - } - - /** - * @return an HTTP filter that can be used for the audit system. - */ - public Filter getWebAuditFilter() { - return httpFilter; - } - - /** - * Stop this service. - */ - @Override - public void doStop() { - - try { - jmxService.unregisterModelMBean(httpFilterObjectName); - } catch (Exception e) { - logger.error("Cannot unregister Http filter MBean", e); - } - - try { - auditLogService.stop(); - } catch (AuditLogServiceException e) { - logger.error("Cannot stop the audit log component", e); - } - logger.info("Audit service stopped."); - } - - /** - * @param jmxService - * the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param eventService - * the eventService to set - */ - public void setEventService(final IEventService eventService) { - this.eventService = eventService; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditComponentListener.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditComponentListener.java deleted file mode 100644 index f9b593c52e..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditComponentListener.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -import java.util.LinkedList; -import java.util.List; - -import javax.management.ListenerNotFoundException; -import javax.management.MBeanServer; -import javax.management.Notification; -import javax.management.NotificationListener; -import javax.management.ObjectName; - -import org.ow2.jonas.audit.internal.logger.api.IAuditComponentListener; -import org.ow2.jonas.audit.internal.logger.api.IAuditLogListener; -import org.ow2.util.auditreport.impl.jmx.ListeningChecker; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * Manage the connection with the audit component. - * Receive notification from the audit component and - * dispatch the event to the listeners. - * @author Vincent Michaud - */ -public class AuditComponentListener implements IAuditComponentListener, NotificationListener { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(AuditComponentListener.class); - - /** - * The JMX server. - */ - private MBeanServer jmxServer = null; - - /** - * JMX Name. - */ - private ObjectName jmxName; - - /** - * Number of invocations detected. - */ - private int invocations = 0; - - /** - * Listeners of the notification from audit component. - */ - private List listeners = new LinkedList(); - - /** - * Constructor. - * @param jmxServer the JMX Server - */ - public AuditComponentListener(final MBeanServer jmxServer) { - this.jmxServer = jmxServer; - } - - - /** - * This method add a listener on a MBean if this MBean is present in the JMX server. - * @param jmxName the objectname on which we needs to be registered - * @throws AuditLogServiceException A communication problem occurred when talking to - * the MBean server. - */ - public final void register(final ObjectName jmxName) throws AuditLogServiceException { - this.jmxName = jmxName; - try { - if (jmxServer.isRegistered(jmxName)) { - this.unregister(); - ListeningChecker checker = new ListeningChecker(jmxName, this); - checker.start(); - jmxServer.addNotificationListener(jmxName, this, null, null); - } else { - logger.warn("The MBean '" + jmxName + "' is not registered"); - } - } catch (Exception ex) { - throw new AuditLogServiceException(ex); - } - } - - /** - * Unregister the JMX listener. - * @return True if JMX listener was unregistred, false otherwise. - * @throws AuditLogServiceException A communication problem occurred when - * talking to the MBean server. - */ - public final boolean unregister() throws AuditLogServiceException { - if (jmxName == null) { - return true; - } - try { - if (jmxServer.isRegistered(jmxName)) { - jmxServer.removeNotificationListener(jmxName, this); - } - } catch (ListenerNotFoundException e) { - logger.debug("Listener not found when unregistering", e); - return true; - } catch (Exception e) { - logger.error("Listener not found when unregistering", e); - return false; - } - return true; - } - - /** - * Add a listener. - * @param listener The listener - */ - public void addLogListener(final IAuditLogListener listener) { - listeners.add(listener); - } - - /** - * Remove a listener. - * @param listener The listener - */ - public void removeLogListener(final IAuditLogListener listener) { - boolean ok = true; - while (ok) { - ok = listeners.remove(listener); - } - } - - /** - * This method handle a JMX notification. - * @param notification The notification. - * @param handback The handback. - */ - public void handleNotification(final Notification notification, final Object handback) { - String report = notification.getMessage(); - String type = notification.getType(); - for (IAuditLogListener listener : this.listeners) { - listener.onAuditReceived(type, report); - } - invocations++; - } - - /** - * @return number of invocations. - */ - public final int getNbInvocations() { - return invocations; - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogComponentMBean.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogComponentMBean.java deleted file mode 100644 index 783b6dea78..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogComponentMBean.java +++ /dev/null @@ -1,194 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -/** - * MBean of the logging component. - * @author Vincent Michaud - */ -public interface AuditLogComponentMBean { - - /** - * Remove a specific log file. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log file - */ - void cleanLogFile(final int year, final int month, final int day); - - /** - * Clean the log pool. - */ - void cleanLogPool(); - - /** - * Clean the log pool by removing old files. - * @param nbFiles Number of files to remove - */ - void cleanOldLogFiles(final int nbFiles); - - /** - * Clean all log files created before a date. - * If a log file with the specified date exists, - * the log file is not removed. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - */ - void cleanOldLogFiles(final int year, final int month, final int day); - - /** - * Clean the log pool by removing recent files. - * @param nbFiles Number of files to remove - */ - void cleanRecentLogFiles(final int nbFiles); - - /** - * Clean all log files created after a date. - * If a log file with the specified date exists, - * the log file is not removed. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - */ - void cleanRecentLogFiles(final int year, final int month, final int day); - - /** - * Count the number of log files in the pool. - * @return The number of log files in the pool - */ - int countLogFiles(); - - /** - * Disable the EJB logger. - * @throws AuditLogServiceException If connection with audit component can not be etablished - */ - void disableEJBLogger() throws AuditLogServiceException; - - /** - * Disable the Web logger. - * @throws AuditLogServiceException If connection with audit component can not be etablished - */ - void disableWebLogger() throws AuditLogServiceException; - - /** - * Enable the EJB logger. - * @throws AuditLogServiceException If connection with audit component can not be etablished - */ - void enableEJBLogger() throws AuditLogServiceException; - - /** - * Enable the Web logger. - * @throws AuditLogServiceException If connection with audit component can not be etablished - */ - void enableWebLogger() throws AuditLogServiceException; - - /** - * Get all audit reports for a specific date. - * Audit reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array - * can contains 'null' if the class of the audit - * report is not found in the classpath. - * Return null if there is not any audit report found - */ - String[] getAuditReports(final int year, final int month, final int day); - - /** - * Get the last stored audit reports. - * Audit reports can be decode with the ObjectEncoder. - * @param number The number of audit reports - * @return An array of encoded audit reports with size less or equal - * to 'number'. The array can contains 'null' if the class of - * the audit report is not found in the classpath. Return null - * if the specified number of audit report is not positive. - * Return null if there is not any audit report found - */ - String[] getLastAuditReports(final int number); - - /** - * Get all audit reports before a specific date. If an audit report - * has been created at the specified date, it is not included - * in the result. Audit reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array can contains 'null' if the - * class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - String[] getOldAuditReports(final int year, final int month, final int day); - - /** - * Get all audit reports before a specific hour. If an audit - * report has been created at the specified hour, it is not included - * in the result. Audit reports can be decode with the ObjectEncoder. - * @param timestamp The hour - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - String[] getOldAuditReports(final long timestamp); - - /** - * Get all audit reports after a specific date. If an audit report - * has been created at the specified date, it is not included - * in the result. Audit reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array can contains 'null' if the - * class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - String[] getRecentAuditReports(final int year, final int month, final int day); - - /** - * Get all audit reports after a specific hour. If an audit - * report has been created at the specified hour, it is not included - * in the result. Audit reports can be decode with the ObjectEncoder. - * @param timestamp The hour - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - String[] getRecentAuditReports(final long timestamp); - - /** - * Start the component. - * @throws AuditLogServiceException If connection with audit component can not be etablished - */ - void start() throws AuditLogServiceException; - - /** - * Stop the component. - * @throws AuditLogServiceException If connection with audit component can not be stopped - */ - void stop() throws AuditLogServiceException; - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogService.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogService.java deleted file mode 100644 index ef9d343e16..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogService.java +++ /dev/null @@ -1,1149 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.audit.internal.logger.api.IAuditComponentListener; -import org.ow2.jonas.audit.internal.logger.api.IAuditLogListener; -import org.ow2.jonas.audit.internal.logger.pool.DatedFileLogPool; -import org.ow2.jonas.audit.internal.logger.util.AuditLogReportHelper; -import org.ow2.jonas.audit.internal.logger.util.AuditLogReportHelper.EncodeResult; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.util.auditreport.api.AuditorJMXObjectNames; -import org.ow2.util.auditreport.impl.GenericAuditReport; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The audit log component. - * @author Vincent Michaud - */ -public class AuditLogService implements IAuditLogListener { - - /** - * Determine if the component receive audits from the EJB audit component. - */ - private boolean useEjbAuditComponent = true; - - /** - * Determine if the component receive audits from the Web audit component. - */ - private boolean useWebAuditComponent = true; - - /** - * Determine if the component receive audits from the JNDI audit component. - */ - private boolean useJNDIAuditComponent = true; - - /** - * Determine if the component receive audits from the Jaxws audit component. - */ - private boolean useJaxwsAuditComponent = true; - - /** - * Determine if a console logger is used. - */ - private boolean consoleLogger = false; - - /** - * Determine if a file logger is used. - */ - private boolean fileLogger = true; - - /** - * The path of the logs directory. - */ - private String logDirectoryPath = DEFAULT_LOG_PATH; - - /** - * The pattern for the name of log file. - */ - private String logFilenamePattern = DEFAULT_LOG_FILENAME_PATTERN; - - /** - * The index where the date is inserted in the name of log files. - */ - private int insertDateIndex = DEFAULT_INSERT_DATE_INDEX; - - /** - * Determine the maximum number of log files in the pool. - */ - private int maxLogFiles = DatedFileLogPool.UNLIMITED; - - /** - * The JMX name of the audit EJB component. - */ - private ObjectName jmxEjbComponentPatternName = null; - - /** - * The JMX name of the audit Web component. - */ - private ObjectName jmxWebComponentPatternName = null; - - /** - * The JMX name of the audit JNDI component. - */ - private ObjectName jmxJNDIComponentPatternName = null; - - /** - * The JMX name of the audit Jaxws Endpoint component. - */ - private ObjectName jmxJaxwsEndpointComponentPatternName = null; - - /** - * Listener for the EJB audit component. - */ - private AuditComponentListener auditEjbListener = null; - - /** - * Listener for the Web audit component. - */ - private AuditComponentListener auditWebListener = null; - - /** - * Listener for the JNDI audit component. - */ - private AuditComponentListener auditJNDIListener = null; - - /** - * Listener for the Jaxws Endpoint audit component. - */ - private AuditComponentListener auditJaxwsEndpointListener = null; - - /** - * The pool of dated log files. - */ - private DatedFileLogPool logPool = null; - - /** - * The default path where are stored logs. - */ - private static final String DEFAULT_LOG_PATH = JProp.getJonasBase() + File.separator + "logs" + File.separator - + "audit-logs"; - - /** - * The default pattern for the name of log file. - */ - private static final String DEFAULT_LOG_FILENAME_PATTERN = "jonas-.log"; - - /** - * The default index where the date is inserted in the name of log files. - */ - private static final int DEFAULT_INSERT_DATE_INDEX = 6; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * ObjectName. - */ - private ObjectName objectName = null; - - /** - * Waiter. - */ - private AuditLogJMXWaiter waiter = null; - - - /** - * List of reports. - */ - private LinkedList nodeReports = new LinkedList(); - - - /** - * Default maximum nodes in memory. - */ - private static final long DEFAULT_MAX_NODE_MEMORY = 1000L; - - /** - * Nodes that can be kept in memory (these are the root nodes). - */ - private long maxNodesInMemory = DEFAULT_MAX_NODE_MEMORY; - - /** - * Init the component. - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - public void start() throws AuditLogServiceException { - if (this.maxLogFiles < 0) { - this.maxLogFiles = DatedFileLogPool.UNLIMITED; - } - - if (this.insertDateIndex < 0 || this.insertDateIndex >= this.logFilenamePattern.length()) { - this.insertDateIndex = 0; - } - - try { - this.logPool = new DatedFileLogPool(this.logDirectoryPath, AuditLogService.class.getName(), - this.logFilenamePattern, this.insertDateIndex, "%m%n", this.maxLogFiles, this.fileLogger, - this.consoleLogger); - } catch (IOException e) { - throw new AuditLogServiceException("Cannot create log file", e); - } - - try { - jmxEjbComponentPatternName = new ObjectName(jmxService.getDomainName() - + AuditorJMXObjectNames.EJBAUDITOR_TYPE_COMPONENT + ",*"); - } catch (Exception e) { - throw new AuditLogServiceException("Cannot build ObjectName", e); - } - - try { - jmxWebComponentPatternName = new ObjectName(jmxService.getDomainName() - + AuditorJMXObjectNames.WEBAUDITOR_TYPE_COMPONENT + ",*"); - } catch (Exception e) { - throw new AuditLogServiceException("Cannot build ObjectName", e); - } - - try { - jmxJNDIComponentPatternName = new ObjectName(jmxService.getDomainName() - + AuditorJMXObjectNames.JNDIAUDITOR_TYPE_COMPONENT + ",*"); - } catch (Exception e) { - throw new AuditLogServiceException("Cannot build ObjectName", e); - } - - try { - jmxJaxwsEndpointComponentPatternName = new ObjectName(jmxService.getDomainName() - + AuditorJMXObjectNames.BASE_AUDIT_COMPONENT + ",auditorType=wsendpoint,*"); - } catch (Exception e) { - throw new AuditLogServiceException("Cannot build ObjectName", e); - } - - this.auditEjbListener = new AuditComponentListener(this.jmxService.getJmxServer()); - this.auditEjbListener.addLogListener(this); - - this.auditWebListener = new AuditComponentListener(this.jmxService.getJmxServer()); - this.auditWebListener.addLogListener(this); - - this.auditJNDIListener = new AuditComponentListener(this.jmxService.getJmxServer()); - this.auditJNDIListener.addLogListener(this); - - this.auditJaxwsEndpointListener = new AuditComponentListener(this.jmxService.getJmxServer()); - this.auditJaxwsEndpointListener.addLogListener(this); - - // ObjectName - try { - this.objectName = new ObjectName(jmxService.getDomainName() + AuditorJMXObjectNames.LOGGERAUDITOR_TYPE_COMPONENT - + ",name=JOnAS"); - } catch (MalformedObjectNameException e) { - throw new AuditLogServiceException("Cannot build the objectname", e); - } catch (NullPointerException e) { - throw new AuditLogServiceException("Cannot build the objectname", e); - } - - // Load descriptors - jmxService.loadDescriptors(AuditLogService.class.getPackage().getName(), AuditLogService.class.getClassLoader()); - - // Register Mbean - try { - jmxService.registerModelMBean(this, objectName); - } catch (Exception e) { - throw new AuditLogServiceException("Cannot register MBean", e); - } - - // Wait the availability of the JNDI names before starting the audit - waiter = new AuditLogJMXWaiter(jmxService.getJmxServer()); - waiter.addPatternEntry(new PatternEntry(auditEjbListener, jmxEjbComponentPatternName)); - waiter.addPatternEntry(new PatternEntry(auditWebListener, jmxWebComponentPatternName)); - waiter.addPatternEntry(new PatternEntry(auditJNDIListener, jmxJNDIComponentPatternName)); - waiter.addPatternEntry(new PatternEntry(auditJaxwsEndpointListener, jmxJaxwsEndpointComponentPatternName)); - - new Thread(waiter).start(); - - } - - /** - * Enable or disable the EJB logger. - * @param enable True for enable the logger, false otherwise - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - private void manageEJBLogger(final boolean enable) throws AuditLogServiceException { - if (this.useEjbAuditComponent) { - if (!enable) { - this.auditEjbListener.unregister(); - } - } - } - - /** - * Enable or disable the JNDI logger. - * @param enable True for enable the logger, false otherwise - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - private void manageJNDILogger(final boolean enable) throws AuditLogServiceException { - if (this.useJNDIAuditComponent) { - if (!enable) { - this.auditJNDIListener.unregister(); - } - } - } - - /** - * Enable or disable the Web logger. - * @param enable True for enable the logger, false otherwise - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - private void manageWebLogger(final boolean enable) throws AuditLogServiceException { - if (this.useWebAuditComponent) { - if (!enable) { - this.auditWebListener.unregister(); - } - } - } - - /** - * Enable or disable the Jaxws logger. - * @param enable True for enable the logger, false otherwise - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - private void manageJaxwsLogger(final boolean enable) throws AuditLogServiceException { - if (this.useJaxwsAuditComponent) { - if (!enable) { - this.auditJaxwsEndpointListener.unregister(); - } - } - } - - /** - * Stop the component. - * @throws AuditLogServiceException If connection with audit component can - * not be stopped - */ - public void stop() throws AuditLogServiceException { - waiter.end(); - jmxService.unregisterModelMBean(objectName); - - manageEJBLogger(false); - manageWebLogger(false); - manageJNDILogger(false); - manageJaxwsLogger(false); - } - - /** - * Enable the EJB logger. - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - public void enableEJBLogger() throws AuditLogServiceException { - this.useEjbAuditComponent = true; - manageEJBLogger(true); - } - - /** - * Disable the EJB logger. - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - public void disableEJBLogger() throws AuditLogServiceException { - manageEJBLogger(false); - this.useEjbAuditComponent = false; - } - - /** - * Enable the Web logger. - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - public void enableWebLogger() throws AuditLogServiceException { - this.useWebAuditComponent = true; - manageWebLogger(true); - } - - /** - * Disable the Web logger. - * @throws AuditLogServiceException If connection with audit component can - * not be etablished - */ - public void disableWebLogger() throws AuditLogServiceException { - manageWebLogger(false); - this.useWebAuditComponent = false; - } - - /** - * Determine the action performed when the audit report is received. - * @param typeAudit Type of the log - * @param encodedAuditReport The encoded audit report - */ - public synchronized void onAuditReceived(final String typeAudit, final String encodedAuditReport) { - // Do nothiing for Attribute change notifications, etc. - if (typeAudit != null && typeAudit.startsWith("jmx.attribute")) { - return; - } - - // Get report - GenericAuditReport report = AuditLogReportHelper.decodeAuditReport(typeAudit, encodedAuditReport); - - // Get Formatted message - String formatedMessage = AuditLogReportHelper.getLogdecodeAuditReport(typeAudit, encodedAuditReport); - - // Get key ID - String keyID = report.getKeyID(); - - // Handle key (if present) - if (keyID != null) { - - // Cleanup if required - if (nodeReports.size() > maxNodesInMemory) { - nodeReports.removeFirst(); - } - - // Get parent and child part - String[] keyIDParts = keyID.split(":"); - String parentID = keyIDParts[0]; - String localID = keyIDParts[1]; - - // Parent is here ? - String parentIDHash = null; - Integer parentIDCount = null; - if (parentID != null && parentID.length() > 0) { - String[] parentIDParts = parentID.split("/"); - parentIDHash = parentIDParts[0]; - parentIDCount = Integer.valueOf(parentIDParts[1]); - } - - // Local Hash and local count - String[] localIDParts = localID.split("/"); - String localIDHash = localIDParts[0]; - Integer localIDCount = Integer.valueOf(localIDParts[1]); - - // Parent ? - NodeReport reportNode = null; - if (parentIDHash != null) { - - // There is a parent, needs to search the parent hash in the - // tree - NodeReport parentNode = search(parentIDHash, true); - - // The parent is not yet here - if (parentNode == null) { - // Create this parent node at root level but flag it as - // a missing parent - parentNode = new NodeReport(parentIDHash, false); - parentNode.setMissingParent(true); - nodeReports.add(parentNode); - } - - // The child hash is present or not? - TreeMap treeMap = parentNode.getTreeMap(); - reportNode = treeMap.get(parentIDCount); - // N/A so create a node which is not a leaf - if (reportNode == null) { - - // add this node - reportNode = new NodeReport(localIDHash, false); - treeMap.put(parentIDCount, reportNode); - - // Try to see if this node is also present at the root level - // (A node created before the right parent) - NodeReport existingRootLevelNode = search(localIDHash, false); - // Node is present and its parent was missing ? - if (existingRootLevelNode != null && existingRootLevelNode.isMissingParent()) { - // Needs to delete the node at the root level and to - // move existing elements to the current tree node - TreeMap map = existingRootLevelNode.getTreeMap(); - Iterator> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - reportNode.getTreeMap().put(entry.getKey(), entry.getValue()); - } - nodeReports.remove(existingRootLevelNode); - } - - } - } else { - // No parent, search the local hash - reportNode = searchOrBuild(localIDHash); - } - - // localID count == 0 means that this is the description - if (localIDCount == 0) { - // The node is now there, remove the flag if present - if (reportNode.isMissingParent()) { - reportNode.setMissingParent(false); - } - reportNode.setReport(report); - reportNode.setDetails(formatedMessage); - } else { - // Now, add the node with its localID - NodeReport nodeChild = new NodeReport(report.getKeyID(), true); - reportNode.getTreeMap().put(localIDCount, nodeChild); - } - } - - - Logger logger = this.logPool.getLogger(); - if (logger != null) { - logger.log(BasicLevel.INFO, formatedMessage); - } - - } - - /** - * Search or build a node for the given name. - * @param name the node name - * @return the built node - */ - private NodeReport searchOrBuild(final String name) { - NodeReport foundNode = search(name, true); - if (foundNode == null) { - foundNode = new NodeReport(name, false); - nodeReports.add(foundNode); - } - - return foundNode; - - } - - /** - * Search or build a node for the given name. - * @param id the node's id - * @param inDepth search in depth or limit the search at the first level - * @return the built node - */ - protected NodeReport search(final String id, final boolean inDepth) { - Iterator itNode = nodeReports.iterator(); - NodeReport foundNode = null; - while (itNode.hasNext() && foundNode == null) { - if (inDepth) { - foundNode = searchNode(id, itNode.next()); - } else { - NodeReport tmpNode = itNode.next(); - if (id.equals(tmpNode.getID())) { - foundNode = tmpNode; - } - } - } - return foundNode; - - } - - /** - * Search a node with the given name starting from the given root node. - * @param id the id of the node to search - * @param rootNode the starting root node for the search - * @return the corresponding node - */ - protected NodeReport searchNode(final String id, final NodeReport rootNode) { - if (rootNode == null) { - return null; - } - - // Matching node - if (id.equals(rootNode.getID())) { - return rootNode; - } - - - // else search on each subnode - TreeMap map = rootNode.getTreeMap(); - NodeReport matchingNode = null; - Set> entries = map.entrySet(); - Iterator> iterator = entries.iterator(); - while (matchingNode == null && iterator.hasNext()) { - Map.Entry entry = iterator.next(); - matchingNode = searchNode(id, entry.getValue()); - } - - return matchingNode; - } - - - /** - * Count the number of log files in the pool. - * @return The number of log files in the pool - */ - public int countLogFiles() { - return this.logPool.countLogFiles(); - } - - /** - * Get all audit reports for a specific date. Audit reports can be decode - * with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - public String[] getAuditReports(final int year, final int month, final int day) { - File file = this.logPool.findFile(year, month, day); - if (file != null) { - EncodeResult result = AuditLogReportHelper.encodeLogMessages(file, 0); - if (result != null) { - return result.getEncodedAuditReports(); - } - } - return null; - } - - /** - * Get the last stored audit reports. Audit reports can be decode with the - * ObjectEncoder. - * @param number The number of audit reports - * @return An array of encoded audit reports with size less or equal to - * 'number'. The array can contains 'null' if the class of the audit - * report is not found in the classpath. Return null if the - * specified number of audit report is not positive. Return null if - * there is not any audit report found - */ - public String[] getLastAuditReports(final int number) { - if (number > 0) { - File[] files = this.logPool.listLogFiles(); - if (files != null) { - LinkedList listEncodedReports = new LinkedList(); - EncodeResult encodeResult; - String[] encodedReports; - int i, totalReports = 0; - - for (i = files.length - 1; i >= 0 && totalReports < number; i--) { - encodeResult = AuditLogReportHelper.encodeLogMessages(files[i], number - totalReports); - if (encodeResult != null) { - encodedReports = encodeResult.getEncodedAuditReports(); - totalReports += encodedReports.length; - listEncodedReports.addFirst(encodedReports); - } - } - return collectAuditReports(listEncodedReports, totalReports); - } - } - return null; - } - - /** - * Create an array of encoded audits report with a list of audits reports. - * Audit reports can be decode with the ObjectEncoder. - * @param listEncodedReports The list of audits reports - * @param totalReports The total number of audit reports contained in the - * list - * @return An array of encoded audit reports with size equal to - * 'totalReports'. The array can contains 'null' if the class of the - * audit report is not found in the classpath - */ - private String[] collectAuditReports(final LinkedList listEncodedReports, final int totalReports) { - String[] encodedReports = new String[totalReports]; - int i = 0; - for (String[] auditReports : listEncodedReports) { - for (String auditReport : auditReports) { - encodedReports[i++] = auditReport; - } - } - return encodedReports; - } - - /** - * Get all audit reports before or after a specific date. If an audit report - * has been created at the specified date, it is not included in the result. - * Audit reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @param old If true, audit reports older than the specified date are - * listed otherwise, audit reports more recent than the specified - * filename are listed - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - private String[] getAuditReports(final int year, final int month, final int day, final boolean old) { - File[] files = this.logPool.listLogFiles(year, month, day, old, false); - if (files != null) { - LinkedList listEncodedReports = new LinkedList(); - EncodeResult encodeResult; - String[] encodedReports; - int totalReports = 0; - - for (File file : files) { - encodeResult = AuditLogReportHelper.encodeLogMessages(file, 0); - if (encodeResult != null) { - encodedReports = encodeResult.getEncodedAuditReports(); - totalReports += encodedReports.length; - listEncodedReports.add(encodedReports); - } - } - return collectAuditReports(listEncodedReports, totalReports); - } - return null; - } - - /** - * Get all audit reports before a specific date. If an audit report has been - * created at the specified date, it is not included in the result. Audit - * reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - public String[] getOldAuditReports(final int year, final int month, final int day) { - return getAuditReports(year, month, day, true); - } - - /** - * Get all audit reports after a specific date. If an audit report has been - * created at the specified date, it is not included in the result. Audit - * reports can be decode with the ObjectEncoder. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - public String[] getRecentAuditReports(final int year, final int month, final int day) { - return getAuditReports(year, month, day, false); - } - - /** - * Get all audit reports before or after a specific hour. If an audit report - * has been created at the specified hour, it is not included in the result. - * Audit reports can be decode with the ObjectEncoder. - * @param timestamp The hour - * @param old If true, audit reports older than the specified date are - * listed otherwise, audit reports more recent than the specified - * filename are listed - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - private String[] getAuditReports(final long timestamp, final boolean old) { - Calendar cal = new GregorianCalendar(); - cal.setTimeInMillis(timestamp); - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - File tsFile = this.logPool.findFile(year, month, day); - if (tsFile == null) { - return getAuditReports(year, month, day, old); - } - - EncodeResult encodeResult; - String[] encodedReports, tsEncodedReports; - LinkedList listEncodedReports = new LinkedList(); - long[] timestamps; - int i, totalReports = 0; - - File[] files = this.logPool.listLogFiles(year, month, day, old, false); - if (files != null) { - for (File file : files) { - encodeResult = AuditLogReportHelper.encodeLogMessages(file, 0); - if (encodeResult != null) { - encodedReports = encodeResult.getEncodedAuditReports(); - totalReports += encodedReports.length; - listEncodedReports.add(encodedReports); - } - } - } - - encodeResult = AuditLogReportHelper.encodeLogMessages(tsFile, 0); - if (encodeResult != null) { - encodedReports = encodeResult.getEncodedAuditReports(); - timestamps = encodeResult.getAuditReportsTimestamp(); - int index = -1, length = timestamps.length; - - for (i = 0; i < length; i++) { - if (timestamp < timestamps[i]) { - index = i; - break; - } - } - if (index != -1) { - if (old) { - if (index > 0) { - tsEncodedReports = new String[index]; - totalReports += index; - for (i = 0; i < index; i++) { - tsEncodedReports[i] = encodedReports[i]; - } - listEncodedReports.add(tsEncodedReports); - } - } else { - length -= index; - if (length > 0) { - tsEncodedReports = new String[length]; - totalReports += length; - for (i = 0; i < length; i++) { - tsEncodedReports[i] = encodedReports[i + index]; - } - listEncodedReports.addFirst(tsEncodedReports); - } - } - } - } - return collectAuditReports(listEncodedReports, totalReports); - } - - /** - * Get all audit reports after a specific hour. If an audit report has been - * created at the specified hour, it is not included in the result. Audit - * reports can be decode with the ObjectEncoder. - * @param timestamp The hour - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - public String[] getRecentAuditReports(final long timestamp) { - return getAuditReports(timestamp, false); - } - - /** - * Get all audit reports before a specific hour. If an audit report has been - * created at the specified hour, it is not included in the result. Audit - * reports can be decode with the ObjectEncoder. - * @param timestamp The hour - * @return An array of encoded audit reports. The array can contains 'null' - * if the class of the audit report is not found in the classpath. - * Return null if there is not any audit report found - */ - public String[] getOldAuditReports(final long timestamp) { - return getAuditReports(timestamp, true); - } - - /** - * Clean the log pool. - */ - public void cleanLogPool() { - this.logPool.cleanLogPool(); - } - - /** - * Remove a specific log file. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log file - */ - public void cleanLogFile(final int year, final int month, final int day) { - this.logPool.removeLogFile(year, month, day); - } - - /** - * Clean the log pool by removing old files. - * @param nbFiles Number of files to remove - */ - public void cleanOldLogFiles(final int nbFiles) { - this.logPool.cleanLogPool(nbFiles, true); - } - - /** - * Clean the log pool by removing recent files. - * @param nbFiles Number of files to remove - */ - public void cleanRecentLogFiles(final int nbFiles) { - this.logPool.cleanLogPool(nbFiles, false); - } - - /** - * Clean all log files created before a date. If a log file with the - * specified date exists, the log file is not removed. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - */ - public void cleanOldLogFiles(final int year, final int month, final int day) { - this.logPool.cleanLogPool(year, month, day, true); - } - - /** - * Clean all log files created after a date. If a log file with the - * specified date exists, the log file is not removed. - * @param year The year of the date - * @param month The month of the date - * @param day The day of the date - */ - public void cleanRecentLogFiles(final int year, final int month, final int day) { - this.logPool.cleanLogPool(year, month, day, false); - } - - /************************************************/ - /* Setters */ - /************************************************/ - /** - * Determine if a console logger is used. - * @param consoleLogger Boolean - */ - public void setConsoleLogger(final boolean consoleLogger) { - this.consoleLogger = consoleLogger; - } - - /** - * Determine if a file logger is used. - * @param fileLogger Boolean - */ - public void setFileLogger(final boolean fileLogger) { - this.fileLogger = fileLogger; - } - - /** - * Determine the index where the date is inserted in the name of log files. - * @param insertDateIndex The index - */ - public void setInsertDateIndex(final int insertDateIndex) { - this.insertDateIndex = insertDateIndex; - } - - /** - * Determine the path of the logs directory. - * @param logDirectoryPath The path - */ - public void setLogDirectoryPath(final String logDirectoryPath) { - this.logDirectoryPath = logDirectoryPath; - } - - /** - * Set the pattern for the name of log file. - * @param logFilenamePattern The pattern - */ - public void setLogFilenamePattern(final String logFilenamePattern) { - this.logFilenamePattern = logFilenamePattern; - } - - /** - * Determine the maximum number of log files in the pool. - * @param maxLogFiles The number - */ - public void setMaxLogFiles(final int maxLogFiles) { - this.maxLogFiles = maxLogFiles; - } - - /** - * Determine if the component receive audits from the EJB audit component. - * @param useEjbAuditComponent Boolean - */ - public void setUseEjbAuditComponent(final boolean useEjbAuditComponent) { - this.useEjbAuditComponent = useEjbAuditComponent; - } - - /** - * Determine if the component receive audits from the Web audit component. - * @param useWebAuditComponent Boolean - */ - public void setUseWebAuditComponent(final boolean useWebAuditComponent) { - this.useWebAuditComponent = useWebAuditComponent; - } - - /** - * Determine if the component receive audits from the JNDI audit component. - * @param useJNDIAuditComponent Boolean - */ - public void setUseJndiAuditComponent(final boolean useJNDIAuditComponent) { - this.useJNDIAuditComponent = useJNDIAuditComponent; - } - - /** - * Determine if the component receive audits from the Jaxws audit component. - * @param useJaxwsAuditComponent Boolean - */ - public void setUseJaxwsAuditComponent(final boolean useJaxwsAuditComponent) { - this.useJaxwsAuditComponent = useJaxwsAuditComponent; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - public LinkedList getNodeReports() { - return nodeReports; - } -} - -/** - * Search for a given pattern and once one ObjectName for this pattern has been - * found, register a listener with the given objectname. - * @author Florent Benoit - */ -class AuditLogJMXWaiter implements Runnable { - - /** - * Sleeping time. - */ - private static final long SLEEP_TIME = 2000L; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(AuditLogJMXWaiter.class); - - /** - * Needs to wait. - */ - private boolean wait = true; - - /** - * List of pattern entries to check. - */ - private List patternEntries = null; - - /** - * MBean server used to do queries. - */ - private MBeanServer jmxServer = null; - - /** - * Default constructor. - * @param jmxServer the MBean server - */ - public AuditLogJMXWaiter(final MBeanServer jmxServer) { - this.jmxServer = jmxServer; - this.patternEntries = new ArrayList(); - } - - /** - * Add an entry to the given list. - * @param patternEntry the given listener/pattern mapping - */ - public void addPatternEntry(final PatternEntry patternEntry) { - synchronized (patternEntries) { - patternEntries.add(patternEntry); - } - } - - /** - * Starts to perform MBeans requests on the given patterns. - */ - @SuppressWarnings("unchecked") - public void run() { - while (wait) { - - // Check if the entry is available in JMX ? - synchronized (patternEntries) { - Iterator itPatternEntry = patternEntries.iterator(); - while (itPatternEntry.hasNext()) { - PatternEntry patternEntry = itPatternEntry.next(); - Set objectNames = jmxServer.queryNames(patternEntry.getObjectNamePattern(), null); - - // item found - if (objectNames.size() > 0) { - - // Get first objectName found - ObjectName objectName = objectNames.iterator().next(); - - // Remove entry if one item found - itPatternEntry.remove(); - - // Set the correct Name in the listener - try { - patternEntry.getListener().register(objectName); - logger.info("Add Notifications from ''{0}''", objectName); - } catch (AuditLogServiceException e) { - logger.error("Unable to register the listener with objectName ''{0}''.", objectName); - } - } - } - } - - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - logger.debug("Unable to wait", e); - } - } - - } - - /** - * Ends the infinite loop that is waiting MBeans. - */ - public void end() { - this.wait = false; - } - -} - -/** - * Defines a mapping between a listener and the objectname pattern. - * @author Florent Benoit - */ -class PatternEntry { - - /** - * Listener. - */ - private IAuditComponentListener listener = null; - - /** - * ObjectName. - */ - private ObjectName objectNamePattern = null; - - /** - * @return the listener. - */ - public IAuditComponentListener getListener() { - return listener; - } - - /** - * @return the objectname pattern to search ! - */ - public ObjectName getObjectNamePattern() { - return objectNamePattern; - } - - /** - * Default constructor. - * @param listener the given listener - * @param objectNamePattern the pattern - */ - public PatternEntry(final IAuditComponentListener listener, final ObjectName objectNamePattern) { - this.listener = listener; - this.objectNamePattern = objectNamePattern; - } - - - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceAdapter.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceAdapter.java deleted file mode 100644 index c126be9614..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceAdapter.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; -import javax.management.modelmbean.InvalidTargetObjectTypeException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * MBean commons modeler adapter for the Audit Log service. - * @author Florent Benoit - */ -public class AuditLogServiceAdapter extends BaseModelMBean { - - /** - * Create the mbean. - * @throws MBeanException if the super constructor fails. - */ - public AuditLogServiceAdapter() throws MBeanException { - super(); - } - - /** - * @return the wrapped resource (managed object) - */ - protected AuditLogService getManagedComponent() { - try { - return (AuditLogService) getManagedResource(); - } catch (InstanceNotFoundException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (RuntimeOperationsException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (MBeanException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (InvalidTargetObjectTypeException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } - } - - /** - * Calls some operation on the wrapped object. - * @param registrationDone if registration has been done or not - */ - @Override - public void postRegister(final Boolean registrationDone) { - // - } - - /** - * @return the IDs of the nodes that are at the root level. - */ - public String[] getRootNodesID() { - List ids = new ArrayList(); - LinkedList list = getManagedComponent().getNodeReports(); - - if (list != null) { - // Add in the reverse order (first element will be the last result) - ListIterator listIterator = list.listIterator(list.size()); - while (listIterator.hasPrevious()) { - NodeReport node = listIterator.previous(); - if (!node.isMissingParent()) { - ids.add(node.getID()); - } - - } - } - return ids.toArray(new String[ids.size()]); - } - - /** - * @param id the given node ID - * @return the description for the given node - */ - public Map getDescriptionNodeId(final String id) { - Map description = new HashMap(); - - NodeReport node = getManagedComponent().search(id, true); - - // N/A, return null - if (node == null) { - return null; - } - - // date - description.put("date", node.getDate()); - - // name - description.put("name", node.getName()); - - // name - description.put("application", node.getApplication()); - - // desc - description.put("desc", node.getDesc()); - - // type - description.put("type", node.getType().toString()); - - // execTime - description.put("execTime", node.getExecTime()); - - // children ids in the correct order - TreeMap map = node.getTreeMap(); - Set> entries = map.entrySet(); - List children = new ArrayList(); - for (Map.Entry nodeEntry : entries) { - children.add(nodeEntry.getValue().getID()); - } - description.put("children", children.toArray(new String[children.size()])); - - // depth - description.put("depth", getDepth(node)); - - - return description; - } - - /** - * Depth of a node. - * @param node the node to compute - * @return the depth of the given node - */ - protected int getDepth(final NodeReport node) { - int count = 1; - TreeMap map = node.getTreeMap(); - Set> entries = map.entrySet(); - int max = 0; - for (Map.Entry nodeEntry : entries) { - int tmp = getDepth(nodeEntry.getValue()); - if (tmp > max) { - max = tmp; - } - } - // add the maximum depth of each child - count += max; - return count; - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceException.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceException.java deleted file mode 100644 index 1c93128c60..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/AuditLogServiceException.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - - -/** - * Exeption for component. - * @author Vincent Michaud - */ -public class AuditLogServiceException extends Exception { - - /** - * - */ - private static final long serialVersionUID = -1063843459511091097L; - - /** - * Creates a new instance of AuditLogServiceException without detail message. - */ - public AuditLogServiceException() { - } - - /** - * Constructs an instance of AuditLogServiceException with the specified detail message. - * @param msg the detail message. - */ - public AuditLogServiceException(final String msg) { - super(msg); - } - - /** - * Constructs an instance of AuditLogServiceException with the specified detail message. - * @param msg the detail message. - * @param e the given exception - */ - public AuditLogServiceException(final String msg, final Exception e) { - super(msg, e); - } - - /** - * Constructor for the given exception. - * @param ex the exception - */ - AuditLogServiceException(final Exception ex) { - super(ex); - } -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReport.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReport.java deleted file mode 100644 index b08bf81635..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReport.java +++ /dev/null @@ -1,348 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.Date; -import java.util.TreeMap; - -import javax.xml.namespace.QName; - -import org.ow2.util.auditreport.impl.GenericAuditReport; -import org.ow2.util.auditreport.impl.InvocationAuditReport; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.JNDIAuditReport; -import org.ow2.util.auditreport.impl.WebInvocationAuditReport; - -/** - * Report Node used to represent the graph of the request call. - * @author Florent Benoit - */ -public class NodeReport implements Serializable { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -4591802637765669254L; - - /** - * Third parameter. - */ - private static final int THIRD = 3; - - /** - * Node's ID. - */ - private String id; - - /** - * Node's description. - */ - private String desc; - - /** - * Node is a leaf ? - */ - private boolean leaf = true; - - /** - * Node is missing its parent. - */ - private boolean missingParent = false; - - /** - * Date. - */ - private Date date = null; - - /** - * Type. - */ - private NodeReportType type = NodeReportType.UNKNOWN; - - /** - * Name. - */ - private String name = null; - - /** - * Application. - */ - private String application = null; - - /** - * Details. - */ - private String details = null; - - /** - * Execution time. - */ - private double execTime = 0L; - - /** - * Tree that represents every childs. - */ - private TreeMap treeMap = null; - - /** - * Constructor with the given id. - * @param id the id of this node - * @param leaf true if the node is a leaf, else false - */ - public NodeReport(final String id, final boolean leaf) { - this.id = id; - this.leaf = leaf; - this.treeMap = new TreeMap(); - - } - - /** - * @return the childs. - */ - public TreeMap getTreeMap() { - return treeMap; - } - - /** - * @return true if the given node is a leaf - */ - public boolean isLeaf() { - return leaf; - } - - - /** - * @return node's name - */ - public String getID() { - return id; - } - - /** - * @return true if the parent node is missing and then this node was added at the root level. - */ - public boolean isMissingParent() { - return missingParent; - } - - /** - * Sets the flag for this node. - * @param missingParent true/false - */ - public void setMissingParent(final boolean missingParent) { - this.missingParent = missingParent; - } - - /** - * @return description for this node - */ - public String getDesc() { - return desc; - } - - /** - * @return type for this node. - */ - public NodeReportType getType() { - return type; - } - - /** - * Sets the type for this node. - * @param type the given type - */ - public void setType(final NodeReportType type) { - this.type = type; - } - - /** - * Sets the given report. - * @param report the report on which data will be extracted - */ - public void setReport(final GenericAuditReport report) { - - // Store date of the report - this.date = new Date(report.getRequestTimeStamp()); - String txt = ""; - // build text depending of the type of the report - if (report instanceof InvocationAuditReport) { - InvocationAuditReport invocationAuditReport = (InvocationAuditReport) report; - String target = invocationAuditReport.getTarget(); - - if (target.startsWith("/easybeans/")) { - target = target.substring("/easybeans/".length()); - } - // Keep Bean Name and method name - String[] parts = target.split("/"); - if (parts.length >= THIRD) { - this.name = parts[2] + "::" + parts[THIRD]; - this.application = parts[0] + "::" + parts[1]; - txt = parts[2] + "::" + parts[THIRD] + "\n" + parts[0] + "::" + parts[1] + "\n" + txt; - } - this.execTime = invocationAuditReport.getRequestDuration(); - if (invocationAuditReport.getBusinessMethod().contains("@Local")) { - setType(NodeReportType.EJB_LOCAL); - } else if (invocationAuditReport.getBusinessMethod().contains("@Remote")) { - setType(NodeReportType.EJB_REMOTE); - } else { - setType(NodeReportType.EJB); - } - } else if (report instanceof WebInvocationAuditReport) { - - // HTTP report - WebInvocationAuditReport webInvocationAuditReport = (WebInvocationAuditReport) report; - String target = webInvocationAuditReport.getTarget(); - if (target.startsWith("/webcontainer/")) { - target = target.substring("/webcontainer/".length()); - } - - String[] parts = target.split("/"); - if (parts.length >= THIRD) { - this.name = report.getBeanName(); - if ("root".equals(parts[1])) { - this.application = "standalone::" + parts[0]; - } else { - this.application = parts[0] + "::" + parts[1]; - } - txt = parts[0] + "::" + parts[1] + "\n" + txt; - } - - txt = report.getBeanName() + "\n" + txt; - setType(NodeReportType.HTTP_GET); - this.execTime = webInvocationAuditReport.getRequestDuration(); - } else if (report instanceof JNDIAuditReport) { - // JNDI Report - JNDIAuditReport jndiAuditReport = (JNDIAuditReport) report; - txt = jndiAuditReport.getBusinessMethod(); - if (jndiAuditReport.getContextParameters() == null) { - txt += "()"; - } else { - txt += "(" + Arrays.asList(jndiAuditReport.getContextParameters()) + ")"; - } - this.name = txt; - this.execTime = jndiAuditReport.getRequestDuration(); - setType(NodeReportType.JNDI); - - } else if (report instanceof JaxwsAuditReport) { - - // --------------------------------------- - // Jaxws Report - // --------------------------------------- - - JaxwsAuditReport auditReport = (JaxwsAuditReport) report; - QName service = QName.valueOf(auditReport.getServiceQName()); - QName port = QName.valueOf(auditReport.getPortQName()); - QName operation = QName.valueOf(auditReport.getOperationQName()); - - StringBuilder sb = new StringBuilder(); - sb.append("Service QName: "); - sb.append(service); - sb.append('\n'); - sb.append("Port QName: "); - sb.append(port); - sb.append('\n'); - sb.append("Operation QName: "); - sb.append(operation); - - txt = sb.toString(); - this.name = service.getLocalPart() + "/" - + port.getLocalPart() + ":" - + operation.getLocalPart(); - - this.execTime = auditReport.getEndProcessingTimestamp() - auditReport.getStartProcessingTimestamp(); - - setType(NodeReportType.JAXWS_ENDPOINT); - } else { - txt = report.getBeanName(); - } - - this.desc = txt; - - } - - /** - * @return execution time - */ - public double getExecTime() { - return execTime; - } - - /** - * Sets the details. - * @param details the given details - */ - public void setDetails(final String details) { - this.details = details; - } - - /** - * @return details of this node - */ - public String getDetails() { - return details; - } - - /** - * @return name of this node - */ - public String getName() { - return name; - } - - /** - * @return application name - */ - public String getApplication() { - return application; - } - - /** - * @return date of this node - */ - public Date getDate() { - return date; - } - - /** - * @return string representation - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder("["); - sb.append(id); - if (treeMap != null && treeMap.size() > 0) { - sb.append(treeMap.toString()); - } - if (desc != null) { - sb.append(", desc="); - sb.append(desc); - } - sb.append("]"); - return sb.toString(); - } -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReportType.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReportType.java deleted file mode 100644 index 78ed939cb9..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/NodeReportType.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger; - -/** - * Type of the nodes. - * @author Florent Benoit - */ -public enum NodeReportType { - - /** - * Unknown type. - */ - UNKNOWN, - - /** - * JNDI type. - */ - JNDI, - - /** - * EJB type. - */ - EJB, - - /** - * EJB Local type. - */ - EJB_LOCAL, - - /** - * EJB Remote type. - */ - EJB_REMOTE, - - /** - * HTTP_GET type. - */ - HTTP_GET, - - /** - * HTTP_POST type. - */ - HTTP_POST, - - /** - * JAXWS_ENDPOINT type. - */ - JAXWS_ENDPOINT -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditComponentListener.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditComponentListener.java deleted file mode 100644 index 1ae3a784cd..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditComponentListener.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.api; - -import javax.management.ObjectName; - -import org.ow2.jonas.audit.internal.logger.AuditLogServiceException; - -/** - * Defines the interface of all listeners. - * @author Florent Benoit - */ -public interface IAuditComponentListener { - - /** - * This method add a listener on a MBean if this MBean is present in the JMX server. - * @param jmxName the objectname on which we needs to be registered - * @throws AuditLogServiceException A communication problem occurred when talking to - * the MBean server. - */ - void register(final ObjectName jmxName) throws AuditLogServiceException; - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditLogListener.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditLogListener.java deleted file mode 100644 index 885c611617..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/api/IAuditLogListener.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.api; - -/** - * Log the audit component. - * @author Vincent Michaud - */ -public interface IAuditLogListener { - - /** - * Determine the action performed when the audit is received. - * @param typeAudit Type of the log - * @param msgAudit Message of the audit - */ - void onAuditReceived(final String typeAudit, final String msgAudit); -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/DatedFileLogPool.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/DatedFileLogPool.java deleted file mode 100644 index 79700643a0..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/DatedFileLogPool.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.pool; - -import java.io.File; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; - -/** - * This class manage a pool of dated files. - * @author Vincent Michaud - */ -public class DatedFileLogPool extends FileLogPool { - - /** - * Regular expression identifying a date. - */ - private static final String DATE_PATTERN = "[0-9]{4}-[0-1][0-9]-[0-3][0-9]"; - - /** - * The date format. - */ - private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); - - /** - * The calendar. - */ - private Calendar calendar; - - /** - * Date of the next day. - */ - private long nextDay; - - /** - * Constructor. - * @param dirPath The directory of the pool - * @param className Name of the class representative to the log files pool - * @param positionVariablePattern Index where the variable pattern is - * inserted - * @param fixedPattern A fixed pattern, without the variable pattern - * @param msgPattern The pattern of the log message (standards are defined - * in Monolog documentation) - * @param maxFiles Determine the maximum number of log files in the pool - * @param fileLogger Determine if a file logger is used - * @param consoleLogger Determine if a console logger is used - * @throws IOException If the path of the pool is corresponding of a file - * path - */ - public DatedFileLogPool(final String dirPath, final String className, final String fixedPattern, - final int positionVariablePattern, final String msgPattern, final int maxFiles, final boolean fileLogger, - final boolean consoleLogger) throws IOException { - super(dirPath, className, fixedPattern, DATE_PATTERN, positionVariablePattern, msgPattern, maxFiles, fileLogger, - consoleLogger); - } - - /** - * Determine the first pattern of the log file name. - * @return The default pattern - * @throws IOException If the initial pattern is invalid - */ - @Override - protected String initLogFilenamePattern() throws IOException { - this.calendar = new GregorianCalendar(); - this.calendar.set(Calendar.HOUR, 0); - this.calendar.set(Calendar.MINUTE, 0); - this.calendar.set(Calendar.SECOND, 0); - this.calendar.set(Calendar.MILLISECOND, 0); - this.calendar.add(Calendar.DAY_OF_MONTH, 1); - this.nextDay = this.calendar.getTimeInMillis(); - return DATE_FORMAT.format(new Date()); - } - - /** - * Determine the missing pattern of the log file name. - * @return The pattern of the log file name. If the return is null, the old - * pattern is kept. - */ - @Override - protected String getLogFilenamePattern() { - if (System.currentTimeMillis() >= this.nextDay) { - String res = DATE_FORMAT.format(this.calendar.getTime()); - this.calendar.add(Calendar.DAY_OF_MONTH, 1); - this.nextDay = this.calendar.getTimeInMillis(); - return res; - } - return null; - } - - /** - * Compare two filename. - * @param filename1 The first filename - * @param filename2 The second filename - * @return The value 0 if the second filename is equal to the first; a value - * less than 0 if the first filename is less than second; and a - * value greater than 0 if first pattern is greater than the second - * filename - */ - @Override - protected int compareFilename(final String filename1, final String filename2) { - return filename1.compareTo(filename2); - } - - /** - * Find a log file with the specified date. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log v - * @return The file found, or null if nothing is found - */ - public File findFile(final int year, final int month, final int day) { - Calendar c = new GregorianCalendar(year, month - 1, day); - return findFile(DATE_FORMAT.format(c.getTime())); - } - - /** - * Find the name of the log file with the specified motif. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log file - * @return The name of the file - */ - public String findFileName(final int year, final int month, final int day) { - Calendar c = new GregorianCalendar(year, month - 1, day); - return findFileName(DATE_FORMAT.format(c.getTime())); - } - - /** - * Clean the log pool all files which are before or after a specific log. - * The specific log is also removed. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log file - * @param old If true, old files are removed, otherwise, recent files are - * removed - */ - public void cleanLogPool(final int year, final int month, final int day, final boolean old) { - String name = findFileName(year, month, day); - cleanLogPool(name, old); - } - - /** - * List all filenames which are older or more recent than the specified log - * file. - * @param year The year of the log file - * @param month The month of the log file - * @param day The day of the log file - * @param action The action executed on log files - * @param old If true, files older than the specified log file are listed - * otherwise, files more recent than the specified log file are - * listed - * @param inclusive Determine if the specified log file is included in the - * result - */ - public void listLogFiles(final int year, final int month, final int day, final LogFileAction action, final boolean old, - final boolean inclusive) { - String name = findFileName(year, month, day); - listLogFiles(name, action, old, inclusive); - } - - /** - * Remove a specific log file. - * @param filename The name of the file - */ - public void removeLogFile(final int year, final int month, final int day) { - String name = findFileName(year, month, day); - removeLogFile(name); - } - - /** - * List all filenames which are older or more recent than the specified - * filename. - * @param filename The filename which others are compared - * @param old If true, files older than the specified filename are listed - * otherwise, files more recent than the specified filename are - * listed - * @param inclusive Determine if the specified filename is included in the - * result - * @return The list of file sorted by file name, or null if not any files - * are found in the log pool - */ - public File[] listLogFiles(final int year, final int month, final int day, final boolean old, final boolean inclusive) { - String name = findFileName(year, month, day); - return listLogFiles(name, old, inclusive); - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/FileLogPool.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/FileLogPool.java deleted file mode 100644 index 62c8c3584b..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/pool/FileLogPool.java +++ /dev/null @@ -1,642 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.pool; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.audit.internal.logger.util.LogConfigurator; - - -/** - * This class manage a pool of files. - * Files are created by a Monolog logger. - * Names of created files respect a pattern defined by the user. - * @author Vincent Michaud - */ -public abstract class FileLogPool { - - /** - * The directory of the pool. - */ - private File mainDir; - - /** - * The path of the pool directory. - */ - private String mainPath; - - /** - * The filename filter. - */ - private FilenameFilter filter; - - /** - * The pattern for detect files of the pool. - */ - private Pattern pattern; - - /** - * The begining text of fixed pattern. - */ - private String beginFP; - - /** - * The ending text of fixed pattern. - */ - private String endFP; - - /** - * The current log file name. - */ - private String logFilename = null; - - /** - * The current pattern of log file. - */ - private String logFilenamePattern = null; - - /** - * A log configurator. - */ - private LogConfigurator lc = null; - - /** - * The logger. - */ - private Logger logger = null; - - /** - * Determine if a file logger is used. - */ - private boolean fileLogger; - - /** - * The number of files in the pool. - */ - private int numberFiles = 0; - - /** - * The max number of files in the pool. - */ - private int maxFiles = UNLIMITED; - - /** - * The default name of the file handler. - */ - private static final String FILE_HANDLER_NAME = "fileLogPoolHandler"; - - /** - * The default name of the file handler. - */ - private static final String CONSOLE_HANDLER_NAME = "consoleLogPoolHandler"; - - /** - * The default level of the logger. - */ - private static final String LOGGER_LEVEL = "INFO"; - - /** - * An unlimited number of files in the pool. - */ - public static final int UNLIMITED = -1; - - /** - * The group which identify the variable pattern. - */ - private static final int PATTERN_GROUP = 1; - - /** - * An interface to define an action on log files. - */ - public interface LogFileAction { - - /** - * Execute the action. - * @param filename The name of the log file. - */ - void execute(final String filename); - } - - /** - * Constructor. - * @param dirPath The directory of the pool - * @param className Name of the class representative to the log files pool - * @param positionVariablePattern Index where the variable pattern is inserted - * @param fixedPattern A fixed pattern, without the variable pattern - * @param variablePattern A regular expression representing the variable pattern - * @param msgPattern The pattern of the log message (standards are defined in Monolog documentation) - * @param maxFiles Determine the maximum number of log files in the pool - * @param fileLogger Determine if a file logger is used - * @param consoleLogger Determine if a console logger is used - * @throws IOException If the path of the pool is corresponding of a file path - */ - public FileLogPool(final String dirPath, final String className, final String fixedPattern, - final String variablePattern, final int positionVariablePattern, - final String msgPattern, final int maxFiles, final boolean fileLogger, - final boolean consoleLogger) throws IOException { - - this.mainDir = new File(dirPath); - if (this.mainDir.isFile()) { - throw new IOException("Path of the file pool is not valid."); - } else if (!mainDir.exists()) { - mainDir.mkdirs(); - } - this.fileLogger = fileLogger; - this.beginFP = fixedPattern.substring(0, positionVariablePattern); - this.endFP = fixedPattern.substring(positionVariablePattern); - StringBuilder builder = new StringBuilder(this.beginFP); - builder.append('('); - builder.append(variablePattern); - builder.append(')'); - builder.append(this.endFP); - this.pattern = Pattern.compile(builder.toString()); - - this.filter = new FilenameFilter() { - public boolean accept(final File dir, final String name) { - Matcher m = pattern.matcher(name); - return m.matches(); - } - }; - - this.mainPath = this.mainDir.getCanonicalPath() + File.separator; - this.logFilenamePattern = initLogFilenamePattern(); - builder = new StringBuilder(this.beginFP); - builder.append(this.logFilenamePattern); - builder.append(this.endFP); - this.logFilename = builder.toString(); - this.setMaxFiles(maxFiles); - - if (consoleLogger || fileLogger) { - this.lc = new LogConfigurator(className, getLoggerLevel(), false); - if (fileLogger) { - this.lc.setSimpleFileHandler(getFileHandlerName(), this.mainPath + this.logFilename, - msgPattern, null, true); - } - if (consoleLogger) { - this.lc.setConsoleHandler(getConsoleHandlerName(), LogConfigurator.SYSTEM_OUT, msgPattern, null); - } - this.logger = this.lc.apply(); - } - } - - /** - * Define the maximum number of files int the pool. - * @param maxFiles The maximum number, or FileLogPool.UNLIMITED - */ - public void setMaxFiles(final int maxFiles) { - this.maxFiles = maxFiles; - listLogFilenames(); - } - - /** - * Update the variable 'numberFiles'. - * @param logFiles The list of log files in the pool - */ - private void updateFileNumber(final Object[] logFiles) { - this.numberFiles = logFiles.length; - if (this.maxFiles > 0 && this.maxFiles < this.numberFiles) { - int totalDeleted = this.numberFiles - this.maxFiles; - this.numberFiles = this.maxFiles; - if (logFiles instanceof String[]) { - for (int i = 0; totalDeleted > 0; i++) { - deleteFile((String) logFiles[i]); - } - } else if (logFiles instanceof File[]) { - for (int i = 0; totalDeleted > 0; i++) { - if (((File) logFiles[i]).delete()) { - this.numberFiles--; - } - } - } - } - } - - /** - * Delete a log file. - * @param filename The name of the file - */ - private void deleteFile(final String filename) { - File file = new File(this.mainDir, filename); - if (file.delete()) { - this.numberFiles--; - } - } - - /** - * Find a file with the specified motif. - * @param motif The motif - * @return The file found, or null if nothing is found - */ - public File findFile(final String motif) { - StringBuilder builder = new StringBuilder(this.beginFP); - builder.append(motif); - builder.append(this.endFP); - - File file = new File(this.mainDir, builder.toString()); - if (file.exists()) { - return file; - } - return null; - } - - /** - * Get the main directory. - * @return The main directory - */ - public File getMainDirectory() { - return this.mainDir; - } - - /** - * Find the name of the file with the specified motif. - * @param motif The motif - * @return The name of the file - */ - public String findFileName(final String motif) { - StringBuilder builder = new StringBuilder(this.beginFP); - builder.append(motif); - builder.append(this.endFP); - return builder.toString(); - } - - /** - * Count the number of log files in the pool. - * @return The number of log files in the pool - */ - public int countLogFiles() { - String[] children = this.mainDir.list(this.filter); - if (children != null) { - return children.length; - } - return 0; - } - - /** - * List all valid files of the pool. - * @return Sorted list of filenames, or null if not - * any files are found in the log pool - */ - public String[] listLogFilenames() { - String[] children = this.mainDir.list(this.filter); - updateFileNumber(children); - int i, length = children.length; - String str; - if (length > 0) { - for (int j = 1; j < length; j++) { - i = j - 1; - if (compareFilename(children[i], children[j]) > 0) { - str = children[j]; - do { - children[i + 1] = children[i]; - i--; - } while (i > -1 && compareFilename(children[i], str) > 0); - children[i + 1] = str; - } - } - return children; - } - return null; - } - - /** - * List all valid files of the pool. - * @return The list of file, sorted by file name or null - * if not any files are found in the log pool - */ - public File[] listLogFiles() { - File[] array = this.mainDir.listFiles(this.filter); - updateFileNumber(array); - int i, length = array.length; - String filename; - File file; - - if (length > 0) { - for (int j = 1; j < length; j++) { - i = j - 1; - file = array[j]; - filename = file.getName(); - if (compareFilename(array[i].getName(), filename) > 0) { - do { - array[i + 1] = array[i]; - i--; - } while (i > -1 && compareFilename(array[i].getName(), filename) > 0); - array[i + 1] = file; - } - } - return array; - } - return null; - } - - /** - * List all filenames which are older or more recent than the specified filename. - * @param filename The filename which others are compared - * @param action The action executed on log files - * @param old If true, files older than the specified filename are listed - * otherwise, files more recent than the specified filename are listed - * @param inclusive Determine if the specified filename is included in the result - */ - protected void listLogFiles(final String filename, final LogFileAction action, - final boolean old, final boolean inclusive) { - String[] children = listLogFilenames(); - if (children != null) { - int i, index = -1, compareResult = 1; - if (old ^ inclusive) { - compareResult = 0; - } - - for (i = 0; i < children.length; i++) { - if (compareFilename(children[i], filename) >= compareResult) { - index = i; - break; - } - } - - if (index != -1) { - if (old) { - for (i = 0; i < index; i++) { - action.execute(children[i]); - } - } else { - int length = children.length - index; - for (i = 0; i < length; i++) { - action.execute(children[i + index]); - } - } - } - } - } - - /** - * List all filenames which are older or more recent than the specified filename. - * @param filename The filename which others are compared - * @param action The action executed on log files - * @param old If true, files older than the specified filename are listed - * otherwise, files more recent than the specified filename are listed - * @param inclusive Determine if the specified filename is included in the result - * @return The list of file, sorted by file name, or null if not any files are - * found in the log pool - */ - protected File[] listLogFiles(final String filename, final boolean old, final boolean inclusive) { - String[] children = listLogFilenames(); - if (children != null) { - File[] result = null; - int i, index = -1, compareResult = 1; - if (old ^ inclusive) { - compareResult = 0; - } - - for (i = 0; i < children.length; i++) { - if (compareFilename(children[i], filename) >= compareResult) { - index = i; - break; - } - } - - if (index != -1) { - if (old) { - if (index > 0) { - result = new File[index]; - for (i = 0; i < index; i++) { - result[i] = new File(this.mainDir, children[i]); - } - } - } else { - int length = children.length - index; - if (length > 0) { - result = new File[length]; - for (i = 0; i < length; i++) { - result[i] = new File(this.mainDir, children[i + index]); - } - } - } - return result; - } - } - return null; - } - - /** - * Clean all files in the log pool. - */ - public void cleanLogPool() { - String[] children = this.mainDir.list(this.filter); - for (String child : children) { - deleteFile(child); - } - } - - - - /** - * Clean the log pool by removing files. - * @param nbFiles Number of files to remove - * @param old If true, old files are removed, - * otherwise, recent files are removed - */ - public void cleanLogPool(final int nbFiles, final boolean old) { - if (nbFiles > 0) { - String[] children = listLogFilenames(); - if (children != null) { - int number = nbFiles; - if (number > children.length) { - number = children.length; - } - if (old) { - for (int i = 0; i < number; i++) { - deleteFile(children[i]); - } - } else { - int end = children.length - number; - for (int i = children.length - 1; i >= end; i--) { - deleteFile(children[i]); - } - } - } - } - } - - /** - * Clean the log pool all files which are before - * or after a specific log. The specific log is - * not removed. - * @param filename The name of the specific file - * @param old If true, old files are removed, - * otherwise, recent files are removed - */ - protected void cleanLogPool(final String filename, final boolean old) { - if (filename != null) { - String[] children = listLogFilenames(); - if (children != null) { - if (old) { - for (int i = 0; i < children.length && compareFilename(children[i], filename) < 0; i++) { - deleteFile(children[i]); - } - } else { - for (int i = children.length - 1; i >= 0 && compareFilename(children[i], filename) > 0; i--) { - deleteFile(children[i]); - } - } - } - } - } - - /** - * Remove a specific log file. - * @param filename The name of the file - */ - protected void removeLogFile(final String filename) { - if (this.filter.accept(this.mainDir, filename)) { - deleteFile(filename); - } - } - - /** - * Get the logger. The logger has a file handler. - * If the pattern of the file has not changed, the logger is the - * same. Otherwise, a new logger is created. - * @return The logger - */ - public Logger getLogger() { - - String newPattern = this.getLogFilenamePattern(); - if (this.fileLogger && newPattern != null && !newPattern.equals(this.logFilenamePattern)) { - StringBuilder builder = new StringBuilder(this.beginFP); - builder.append(newPattern); - builder.append(this.endFP); - this.logFilenamePattern = newPattern; - this.logFilename = builder.toString(); - this.lc.changeHandlerOutput(getFileHandlerName(), this.mainPath + this.logFilename); - this.logger = this.lc.apply(); - - if (this.numberFiles >= this.maxFiles) { - String[] children = listLogFilenames(); - new File(this.mainDir, children[0]).delete(); - } else { - this.numberFiles++; - } - } - return this.logger; - } - - /** - * Get the variable pattern of a file name. - * @param filename The file name - * @return The pattern if t is found, null otherwise - */ - public String getPattern(final String filename) { - Matcher m = this.pattern.matcher(filename); - if (m.find()) { - return m.group(PATTERN_GROUP); - } - return null; - } - - /** - * Determine the missing pattern of the log file name. - * @return The pattern of the log file name. If the return is null, - * the old pattern is kept. - */ - protected abstract String getLogFilenamePattern(); - - /** - * Compare two filename. - * @param filename1 The first filename - * @param filename2 The second filename - * @return The value 0 if the second filename is equal to the first; - * a value less than 0 if the first filename is less than second; - * and a value greater than 0 if first pattern is greater than the - * second filename - */ - protected abstract int compareFilename(final String filename1, final String filename2); - - - /** - * Determine the first pattern of the log file name. - * @return The default pattern - * @throws IOException If the initial pattern is invalid - */ - protected String initLogFilenamePattern() throws IOException { - String initPattern = getLogFilenamePattern(); - if (initPattern == null || initPattern.length() == 0) { - throw new IOException("Initial pattern of the log file name is invalid."); - } - return initPattern; - } - - /** - * Get the log configurator. - * @return The log configurator - */ - protected LogConfigurator getLogConfigurator() { - return this.lc; - } - - /** - * Get the logger level. - * @return The logger level - */ - protected String getLoggerLevel() { - return LOGGER_LEVEL; - } - - /** - * Get the file handler name. - * @return The file handler name - */ - protected String getFileHandlerName() { - return FILE_HANDLER_NAME; - } - - /** - * Get the console handler name. - * @return The console handler name - */ - protected String getConsoleHandlerName() { - return CONSOLE_HANDLER_NAME; - } - - /** - * Get the filter accepting files in the pool. - * @return The filter - */ - protected FilenameFilter getFilenameFilter() { - return this.filter; - } - - /** - * Get the pattern of accepted files in the pool. - * @return The pattern - */ - protected Pattern getPoolFilePattern() { - return this.pattern; - } -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/AuditLogReportHelper.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/AuditLogReportHelper.java deleted file mode 100644 index 0615f5251f..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/AuditLogReportHelper.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.util; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.text.DateFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.ow2.util.auditreport.impl.GenericAuditReport; -import org.ow2.util.auditreport.impl.InvocationAuditReport; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.JNDIAuditReport; -import org.ow2.util.auditreport.impl.WebInvocationAuditReport; -import org.ow2.util.auditreport.impl.util.ObjectEncoder; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This class is a helper to deal with AuditReports. - * Try to not use complex type for a good restitution through JMX. - * @author Vincent Michaud - */ -public final class AuditLogReportHelper { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(AuditLogReportHelper.class); - - /** - * The size of the buffer. - */ - private static final int BUFFER_SIZE = 4096; - - /** - * A string for indent values of fields. - */ - public static final String INDENT1 = " "; - - /** - * A string for indent values of fields. - */ - public static final String INDENT2 = " "; - - - private static final String BEFORE_DATE = "["; - private static final String AFTER_DATE = "] "; - private static final String BEFORE_TYPE = " : "; - - private static final String NEW_LINE = "\r\n"; - - /** - * The date format. - */ - private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yy/MM/dd HH:mm:ss"); - - /** - * The date pattern. - */ - private static final String DATE_PATTERN = "[0-9]{2}/[0-1][0-9]/[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]"; - - /** - * The header pattern. - */ - private static final String HEADER_PATTERN = "\\[(" + DATE_PATTERN + ")\\] ([a-zA-Z0-9.]+) : (.*)\r\n"; - - /** - * The log message pattern. - */ - private static final Pattern MSG_PATTERN = Pattern.compile(HEADER_PATTERN + "((.+\r\n)*)(\r\n)+"); - - /** - * Fields pattern. - */ - private static final Pattern FIELDS_PATTERN = Pattern.compile("[ ]*(([\\w]+) = )?(.*)\r\n(\r\n$)?"); - - /** - * The calendar used for calculate the date of the timestamp. - */ - private static final Calendar CALENDAR = new GregorianCalendar(); - - /** - * An interface for get the result of encodeLogMessages(). - */ - public interface EncodeResult { - - /** - * Get encoded audit reports. - * @return An array of encoded string. A value of the array can be null if the class - * of the message is not found in the classpath - */ - String[] getEncodedAuditReports(); - - /** - * Get timestamp of audit reports. - * @return An array of timestamp - */ - long[] getAuditReportsTimestamp(); - } - - /** - * The private constructor for utility class. - */ - private AuditLogReportHelper() { - } - - /** - * Decode an audit report to an formatted and displayable message. - * @param encodedAuditReport The encoded audit report - * @param typeMessage Type of the audit report - * @return A formatted message - */ - public static synchronized GenericAuditReport decodeAuditReport(final String typeMessage, final String encodedAuditReport) { - - List paramNames = new LinkedList(); - List paramValues = new LinkedList(); - String className = ObjectEncoder.getClassName(encodedAuditReport); - - - GenericAuditReport report = null; - if ((InvocationAuditReport.class.getName()).equals(typeMessage)) { - InvocationAuditReport reportTmp = ObjectEncoder.decodeToDisplayable(encodedAuditReport, InvocationAuditReport.class, - paramNames, paramValues); - report = reportTmp; - } else if (WebInvocationAuditReport.class.getName().equals(typeMessage)) { - WebInvocationAuditReport reportTmp = ObjectEncoder.decodeToDisplayable(encodedAuditReport, WebInvocationAuditReport.class, - paramNames, paramValues); - report = reportTmp; - } else if ("JNDI".equals(typeMessage)) { - JNDIAuditReport reportTmp = ObjectEncoder.decodeToDisplayable(encodedAuditReport, JNDIAuditReport.class, - paramNames, paramValues); - report = reportTmp; - } else if (JaxwsAuditReport.class.getName().equals(typeMessage)) { - report = ObjectEncoder.decodeToDisplayable(encodedAuditReport, - JaxwsAuditReport.class, - paramNames, - paramValues); - } else { - report = ObjectEncoder.decodeToDisplayable(encodedAuditReport, GenericAuditReport.class, - paramNames, paramValues); - } - return report; - - } - - - - /** - * Decode an audit report to an formatted and displayable message. - * @param encodedAuditReport The encoded audit report - * @param typeMessage Type of the audit report - * @return A formatted message - */ - public static synchronized String getLogdecodeAuditReport(final String typeMessage, final String encodedAuditReport) { - - List paramNames = new LinkedList(); - List paramValues = new LinkedList(); - String className = ObjectEncoder.getClassName(encodedAuditReport); - - - GenericAuditReport report = null; - if ((InvocationAuditReport.class.getName()).equals(typeMessage)) { - InvocationAuditReport reportTmp = ObjectEncoder.decodeToDisplayable(encodedAuditReport, InvocationAuditReport.class, - paramNames, paramValues); - report = reportTmp; - } else if ("JNDI".equals(typeMessage)) { - JNDIAuditReport reportTmp = ObjectEncoder.decodeToDisplayable(encodedAuditReport, JNDIAuditReport.class, - paramNames, paramValues); - report = reportTmp; - } else if (JaxwsAuditReport.class.getName().equals(typeMessage)) { - report = ObjectEncoder.decodeToDisplayable(encodedAuditReport, - JaxwsAuditReport.class, - paramNames, - paramValues); - } else { - report = ObjectEncoder.decodeToDisplayable(encodedAuditReport, GenericAuditReport.class, - paramNames, paramValues); - } - - - CALENDAR.setTimeInMillis(report.getRequestTimeStamp()); - String date = DATE_FORMAT.format(CALENDAR.getTime()); - StringBuilder builder = new StringBuilder(BEFORE_DATE); - builder.append(date); - builder.append(AFTER_DATE); - builder.append(className); - builder.append(BEFORE_TYPE); - builder.append(typeMessage); - builder.append(NEW_LINE); - - Iterator itName = paramNames.iterator(); - Iterator itValue = paramValues.iterator(); - String name; - Object value; - - if (paramNames.size() == paramValues.size()) { - while (itName.hasNext()) { - name = itName.next(); - value = itValue.next(); - builder.append(INDENT1); - builder.append(name); - builder.append(" = "); - - if (value instanceof List) { - builder.append(NEW_LINE); - for (String str : (List) value) { - builder.append(INDENT2); - builder.append(str); - builder.append(NEW_LINE); - } - } else { - builder.append(value); - builder.append(NEW_LINE); - } - } - } - - builder.append('\r'); // Not appended "\r\n" cause of a strange bug... - return builder.toString(); - } - - /** - * Get audits reports from a string. - * @param logMessages The string - * @return A list of audit reports - */ - private static LinkedList getAuditReports(final String logMessages) { - LinkedList auditReports = new LinkedList(); - Matcher m = MSG_PATTERN.matcher(logMessages); - AuditReport auditReport; - - while (m.find()) { - auditReport = new AuditReport(m.group(1), m.group(2), m.group(3), m.group(4)); - auditReports.add(auditReport); - } - return auditReports; - } - - /** - * Get audits reports from a log file. - * @param logFile The log file - * @return A list of audit reports - */ - private static LinkedList getAuditReports(final File logFile) { - StringBuilder builder = new StringBuilder(); - try { - char[] buffer = new char[BUFFER_SIZE]; - BufferedReader reader = new BufferedReader(new FileReader(logFile)); - - try { - int length = reader.read(buffer); - while (length > 0) { - builder.append(buffer, 0, length); - length = reader.read(buffer); - } - } finally { - reader.close(); - } - - } catch (Exception ex) { - return null; - } - return getAuditReports(builder.toString()); - } - - /** - * Extract fields information from an audit report. - * @param report The audit report - * @param fieldNames Names of fields extracted - * @param fieldValues Values of fields extracted. Values can be - * a string or a list of string (in case of array, - * or complex objects) - */ - private static void extractDisplayable(final AuditReport report, final List fieldNames, - final List fieldValues) { - Matcher m = FIELDS_PATTERN.matcher(report.message); - String fieldName, fieldValue, lastFieldName, lastFieldValue; - List values = null; - - if (m.find()) { - lastFieldName = m.group(2); - lastFieldValue = m.group(3); - - while (m.find()) { - fieldName = m.group(2); - fieldValue = m.group(3); - - if (fieldName != null) { - fieldNames.add(lastFieldName); - if (values == null) { - fieldValues.add(lastFieldValue); - } else { - fieldValues.add(values); - values = null; - } - lastFieldName = fieldName; - lastFieldValue = fieldValue; - } else { - if (values == null) { - values = new LinkedList(); - if (lastFieldValue.length() != 0) { - values.add(lastFieldValue); - } - } - if (fieldValue.length() != 0) { - values.add(fieldValue); - } - } - } - - fieldNames.add(lastFieldName); - if (values == null) { - fieldValues.add(lastFieldValue); - } else { - fieldValues.add(values); - } - } - } - - /** - * Encode audit reports contained in the specified log file. - * @param logFile The log file - * @param maxLogMessages The maximum number of encoded messages (0 for unlimited) - * @return Two arrays: one of encoded strings and the other of timestamps. - * A value of the encoded strings array can be null if the class - * of the message is not found in the classpath - */ - public static EncodeResult encodeLogMessages(final File logFile, final int maxLogMessages) { - LinkedList auditReports = getAuditReports(logFile); - if (auditReports != null) { - AuditReport report; - int nbAudits = auditReports.size(), size = nbAudits; - ListIterator it = auditReports.listIterator(nbAudits); - - if (maxLogMessages > 0 && maxLogMessages < nbAudits) { - size = maxLogMessages; - } - - String[] result = new String[size]; - long[] timestamps = new long[size]; - LinkedList fieldNames; - LinkedList fieldValues; - Class classReport; - - for (int i = size - 1; i >= 0; i--) { - try { - fieldNames = new LinkedList(); - fieldValues = new LinkedList(); - report = it.previous(); - extractDisplayable(report, fieldNames, fieldValues); - classReport = Class.forName(report.className); - result[i] = ObjectEncoder.encodeFromDisplayable(classReport, fieldNames, fieldValues); - timestamps[i] = report.getTimestamp(); - } catch (ClassNotFoundException ex) { - result[i] = null; - timestamps[i] = 0L; - ex.printStackTrace(); - } - } - return new CodingResult(result, timestamps); - } - return null; - } - - - /** - * A class representing an audit report. - */ - static class AuditReport { - - /** - * The date of the audit report. - */ - private String date; - - /** - * The class name of the audit report. - */ - private String className; - - /** - * The type of the audit report. - */ - private String type; - - /** - * The message of the audit report. - */ - private String message; - - /** - * Constructor. - * @param date The date of the audit report - * @param className The class name of the audit report - * @param type The type of the audit report - * @param message The message of the audit report - */ - public AuditReport(final String date, final String className, final String type, final String message) { - this.date = date; - this.className = className; - this.type = type; - this.message = message; - } - - /** - * Get the timestamp of the audit report. - * @return The timestamp - */ - public long getTimestamp() { - long result; - try { - Date d = DATE_FORMAT.parse(this.date); - result = d.getTime(); - } catch (ParseException ex) { - return -1; - } - return result; - } - } - - - /** - * A class for get the result of encodeLogMessages(). - */ - static class CodingResult implements EncodeResult { - - /** - * Encoded audit reports. - */ - private String[] auditReports; - - /** - * Timestamps. - */ - private long[] timestamps; - - /** - * Constructor. - * @param auditReports Encoded audit reports - * @param timestamps Timestamps - */ - public CodingResult(final String[] auditReports, final long[] timestamps) { - this.auditReports = auditReports; - this.timestamps = timestamps; - } - - /** - * Get encoded audit reports. - * @return An array of encoded string. A value of the array can be null if the class - * of the message is not found in the classpath - */ - public String[] getEncodedAuditReports() { - return this.auditReports; - } - - /** - * Get timestamp of audit reports. - * @return An array of timestamp - */ - public long[] getAuditReportsTimestamp() { - return this.timestamps; - } - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/LogConfigurator.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/LogConfigurator.java deleted file mode 100644 index 1615741976..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/logger/util/LogConfigurator.java +++ /dev/null @@ -1,481 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.logger.util; - -import java.util.Properties; -import java.util.Set; -import java.util.Map.Entry; - -import org.objectweb.util.monolog.Monolog; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.MonologFactory; - - -/** - * A class for manage Monolog loggers. - * To format log messages, it is possible to specify a pattern on the handlers. - * A pattern can be composed of elements. This element is prefixed by the % character. - * Here is the list of the possible items: - * l: The level of the message, - * t: The topic of the logger, - * m: The message, - * d: The date of the message, - * h: The thread name where the message has been logged, - * n: A new line, - * O: The class name of the object which invokes the log method (expensive), - * M: The method name which invoked the log method (expensive), - * L: The line number in the source code where the log method was invoked (expensive). - * - * Example : %l - %O{1}.%M: %m%n = INFO - MyClass.myMethod(): my message - * - * @author Vincent Michaud - */ -public class LogConfigurator { - - /** - * All recorded properties. - */ - private Properties properties = new Properties(); - - /** - * The name of the class. - */ - private String className; - - /** - * The name of the class prefixed by "logger". - */ - private String loggerClassName; - - /** - * Numbers of handlers. - */ - private int nbHandlers = 0; - - /** - * Number of topics. - */ - private int nbTopics = 0; - - /** - * The Monolog factory. - */ - private MonologFactory factory = null; - - /** - * Value use for console handler. - */ - public static final int SYSTEM_OUT = 0; - - /** - * Value use for console handler. - */ - public static final int SYSTEM_ERR = 1; - - /** - * Value determining the type of the file handler. - */ - public static final int SIMPLE_FILE = 0; - - /** - * Value determining the type of the file handler. - */ - public static final int ROLLING_FILE = 1; - - /** - * Define an unlimited size of the file. - */ - public static final long UNLIMITED_SIZE = 0; - - /** - * Name of the root logger. - */ - public static final String ROOT_LOGGER = "root"; - - - /** - * The Log4j wrapper. - */ - public static final int WRAPPER_LOG4J = 0; - - /** - * The JDK wrapper. - */ - public static final int WRAPPER_JDK = 1; - - /** - * The Log4jMini wrapper. - */ - public static final int WRAPPER_LOG4J_MINI = 2; - - /** - * The PrintWriter wrapper. - */ - public static final int WRAPPER_PRINTWRITER = 3; - - /** - * Implementation of wrappers. - */ - private static final String[] WRAPPERS = { - Monolog.LOG4J_WRAPPER_CLASS_NAME, - Monolog.JDK_WRAPPER_CLASS_NAME, - Monolog.LOG4JMini_WRAPPER_CLASS_NAME, - "org.objectweb.util.monolog.wrapper.printwriter.LoggerImpl" - }; - - - /** - * Create a logger factory for root logger. - */ - public LogConfigurator() { - this.className = ROOT_LOGGER; - this.loggerClassName = "logger." + ROOT_LOGGER; - } - - /** - * Create a logger factory for logger specified. - * @param className Name of the logger - */ - public LogConfigurator(final String className) { - this.className = className; - this.loggerClassName = "logger." + className; - } - - /** - * Create a logger factory for logger specified. - * @param className Name of the logger - * @param level The level of the logger - * @param inheritance If the logger inherits others parent loggers - */ - public LogConfigurator(final String className, final String level, final boolean inheritance) { - this.className = className; - this.loggerClassName = "logger." + className; - setLoggerInheritance(inheritance); - setLoggerLevel(level); - } - - /** - * Apply configuration specified before and return the corresponding logger. - * @return The logger - */ - public Logger apply() { - if (this.factory == null) { - this.factory = Monolog.getMonologFactory(this.properties); - } - return this.factory.getLogger(this.className); - } - - /** - * Apply configuration specified in the configuration file. - * @param classname Name of the logger - * @param filename Name of the Monolog configuration file - * @return The logger - */ - public static Logger apply(final String classname, final String filename) { - return Monolog.getMonologFactory(filename).getLogger(classname); - } - - /** - * Create a new level for the logger. - * @param levelName The name of the level - * @param level The level - */ - public void createLevel(final String levelName, final String level) { - putProperty("level." + levelName, level); - } - - /** - * Set the level of the logger. - * The level must be created before. - * @param level The level - */ - public void setLoggerLevel(final String level) { - putProperty(this.loggerClassName + ".level", level); - } - - /** - * Set the inheritance of the logger. - * @param inheritance The inheritance - */ - public void setLoggerInheritance(final boolean inheritance) { - if (!inheritance) { - putProperty(this.loggerClassName + ".additivity", "false"); - } else if (this.properties.remove(this.loggerClassName + ".additivity") != null) { - this.factory = null; - } - } - - /** - * Define the wrapper used. - * @param wrapper The wrapper. Value can be LogConfigurator.WRAPPER_LOG4J, - * LogConfigurator.WRAPPER_LOG4J_MINI or LogConfigurator.WRAPPER_JDK - */ - public void setLoggerWrapper(final int wrapper) { - switch (wrapper) { - case WRAPPER_LOG4J: case WRAPPER_JDK: case WRAPPER_LOG4J_MINI: - putProperty(Monolog.MONOLOG_CLASS_NAME, WRAPPERS[wrapper]); - break; - default: - putProperty(Monolog.MONOLOG_CLASS_NAME, WRAPPERS[WRAPPER_PRINTWRITER]); - break; - } - } - - /** - * Add a new name for the logger. - * @param name The name added - */ - public void addLoggerTopic(final String name) { - putProperty(this.loggerClassName + ".topic." + String.valueOf(this.nbTopics), name); - this.nbTopics++; - } - - - /** - * Set a basic handler for the logger. - * @param type Type of the handler : Console or jmx - * @param handlerName The name of the handler - * @param output Type of output (LogConfigurator.SYSTEM_OUT / LogConfigurator.SYSTEM_ERR) - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - */ - private void setBasicHandler(final String type, final String handlerName, final int output, - final String pattern, final String level) { - - String handlerClassName = "handler." + handlerName; - putProperty(handlerClassName + ".type", type); - putProperty(handlerClassName + ".pattern", pattern); - - if (output == SYSTEM_OUT) { - putProperty(handlerClassName + ".output", "System.out"); - } else { - putProperty(handlerClassName + ".output", "System.err"); - } - if (level != null) { - putProperty(handlerClassName + ".level", level); - } - - putProperty(this.loggerClassName + ".handler." + String.valueOf(this.nbHandlers), handlerName); - this.nbHandlers++; - } - - /** - * Set a console handler for the logger. - * @param handlerName The name of the handler - * @param output Type of output (LogConfigurator.SYSTEM_OUT / LogConfigurator.SYSTEM_ERR) - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - */ - public void setConsoleHandler(final String handlerName, final int output, - final String pattern, final String level) { - - setBasicHandler("Console", handlerName, output, pattern, level); - } - - /** - * Set a jmx handler for the logger. - * @param handlerName The name of the handler - * @param output Type of output (LogConfigurator.SYSTEM_OUT / LogConfigurator.SYSTEM_ERR) - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - */ - public void setJMXHandler(final String handlerName, final int output, - final String pattern, final String level) { - - setBasicHandler("jmx", handlerName, output, pattern, level); - } - - /** - * Set a file handler for the logger. - * @param type Type of the file handler (LogConfigurator.SIMPLE_FILE / LogConfigurator.ROLLING_FILE) - * @param handlerName The name of the handler - * @param output Path of the output file - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - * @param appendMode Indicates if the logs must be added at the end of the file or not - * @param fileNumber The number of file to use - * @param maxSize The maximal size of the file, or LogConfigurator.UNLIMITED_SIZE - */ - public void setFileHandler(final int type, final String handlerName, final String output, - final String pattern, final String level, final boolean appendMode, - final int fileNumber, final long maxSize) { - - String handlerClassName = "handler." + handlerName; - putProperty(handlerClassName + ".pattern", pattern); - putProperty(handlerClassName + ".output", output); - - if (type == SIMPLE_FILE) { - putProperty(handlerClassName + ".type", "File"); - } else { - putProperty(handlerClassName + ".type", "Rollingfile"); - } - if (level != null) { - putProperty(handlerClassName + ".level", level); - } - if (appendMode) { - putProperty(handlerClassName + ".appendMode", ""); - } else if (this.properties.remove(handlerClassName + ".appendMode") != null) { - this.factory = null; - } - if (fileNumber > 1) { - putProperty(handlerClassName + ".fileNumber", String.valueOf(fileNumber)); - } - if (maxSize > 0) { - putProperty(handlerClassName + ".maxSize", String.valueOf(maxSize)); - } - - putProperty(this.loggerClassName + ".handler." + String.valueOf(this.nbHandlers), handlerName); - this.nbHandlers++; - } - - - /** - * Set a simple file handler for the logger. - * @param handlerName The name of the handler - * @param output Path of the output file - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - * @param appendMode Indicates if the logs must be added at the end of the file or not - */ - public void setSimpleFileHandler(final String handlerName, final String output, final String pattern, - final String level, final boolean appendMode) { - setFileHandler(SIMPLE_FILE, handlerName, output, pattern, level, appendMode, 1, 0); - } - - - /** - * Set a rolling file handler for the logger. - * @param handlerName The name of the handler - * @param output Path of the output file - * @param pattern The pattern of the output message - * @param level The level of the handler. Can be null. - * @param appendMode Indicates if the logs must be added at the end of the file or not - * @param fileNumber The number of file to use - * @param maxSize The maximal size of the file - */ - public void setRollingFileHandler(final String handlerName, final String output, - final String pattern, final String level, final boolean appendMode, - final int fileNumber, final long maxSize) { - setFileHandler(ROLLING_FILE, handlerName, output, pattern, level, appendMode, fileNumber, maxSize); - } - - /** - * Change the output of the specified handler. If the handler has - * not been created before, this function has no effect. - * @param handlerName The name of the handler - * @param output Path of the output file - */ - public void changeHandlerOutput(final String handlerName, final String output) { - putProperty("handler." + handlerName + ".output", output); - } - - /** - * Change the level of the specified handler. If the handler has - * not been created before, this function has no effect. - * @param handlerName The name of the handler - * @param level The level of the handler. Can be null. - */ - public void changeHandlerLevel(final String handlerName, final String level) { - putProperty("handler." + handlerName + ".level", level); - } - - /** - * Change the pattern of the specified handler. If the handler has - * not been created before, this function has no effect. - * @param handlerName The name of the handler - * @param pattern The pattern of the output message - */ - public void changeHandlerPattern(final String handlerName, final String pattern) { - putProperty("handler." + handlerName + ".pattern", pattern); - } - - /** - * Change the appendMode of the specified handler. If the handler has - * not been created before or is not a file handler, this function has no effect. - * @param handlerName The name of the handler - * @param appendMode Indicates if the logs must be added at the end of the file or not - */ - public void changeHandlerAppendMode(final String handlerName, final boolean appendMode) { - if (appendMode) { - putProperty("handler." + handlerName + ".appendMode", ""); - } else if (this.properties.remove("handler." + handlerName + ".appendMode") != null) { - this.factory = null; - } - } - - /** - * Change the number of files of the specified handler. If the handler has - * not been created before or is not a file handler, this function has no effect. - * @param handlerName The name of the handler - * @param fileNumber The number of file to use - */ - public void changeHandlerFileNumber(final String handlerName, final int fileNumber) { - putProperty("handler." + handlerName + ".fileNumber", String.valueOf(fileNumber)); - } - - /** - * Change the max size of the file of the specified handler. If the handler has - * not been created before or is not a file handler, this function has no effect. - * @param handlerName The name of the handler - * @param maxSize The maximal size of the file - */ - public void changeHandlerFileMaxSize(final String handlerName, final long maxSize) { - putProperty("handler." + handlerName + ".maxSize", String.valueOf(maxSize)); - } - - /** - * Put a property in the properties map. - * If properties map has changed, the logger will be recreated. - * @param key The key of the property - * @param value The value of the property - */ - private void putProperty(final String key, final String value) { - Object last = this.properties.put(key, value); - if (last == null || !value.equals(last)) { - this.factory = null; - } - } - - /** - * Get a string representation of the object. - * @return A string - */ - @Override - public String toString() { - Set> setEnt = properties.entrySet(); - StringBuffer buffer = new StringBuffer(); - buffer.append("[\n"); - for (Entry entry : setEnt) { - buffer.append(" "); - buffer.append(entry.getKey().toString()); - buffer.append(" : "); - buffer.append(entry.getValue().toString()); - buffer.append("\n"); - } - buffer.append("]\n"); - return buffer.toString(); - } -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilter.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilter.java deleted file mode 100644 index a8f3fe00db..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilter.java +++ /dev/null @@ -1,348 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.audit.internal.webauditor.filters; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.modelmbean.ModelMBeanNotificationBroadcaster; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.audit.internal.webauditor.report.WebInvocationAuditReportFactory; -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.AuditIDImpl; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.auditreport.impl.GenericAuditReport; -import org.ow2.util.auditreport.impl.InvocationAuditReport; -import org.ow2.util.auditreport.impl.JNDIAuditReport; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.WebInvocationAuditReport; -import org.ow2.util.auditreport.impl.event.Event; -import org.ow2.util.event.api.IEvent; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.event.impl.EventDispatcher; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The default filter for web container. - * - * @author Mathieu ANCELIN - */ -public class HttpAuditFilter implements Filter { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(HttpAuditFilter.class); - public static final String HEADER_INVOCATION_ID = "Invocation-ID"; - - /** - * Config of the filter. - */ - private FilterConfig filterConfig = null; - - /** - * Number of the sequence. - */ - private long seqNumber = 0; - - /** - * Filter names for exclusion list. - */ - private List filters = new ArrayList(); - - /** - * Factory for reports. - */ - private WebInvocationAuditReportFactory webInvocationAuditReportFactory = null; - - /** - * eventService to send event report - */ - private IEventService eventService = null; - - /** - * Notification sender. - */ - private ModelMBeanNotificationBroadcaster broadcaster = null; - - /** - * The constructor with build of the exclusion list. - * - * @param jmxServer - * the JMX Server - */ - public HttpAuditFilter(final MBeanServer jmxServer) { - this(jmxServer, null); - } - - /** - * The constructor with build of the exclusion list. - * - * @param jmxServer - * the JMX Server - * @param eventService - * the EventService - */ - public HttpAuditFilter(MBeanServer jmxServer, IEventService eventService) { - this.eventService = eventService; - this.webInvocationAuditReportFactory = new WebInvocationAuditReportFactory(jmxServer); - filters.add("graniteamf"); - filters.add(".png"); - filters.add(".jpeg"); - filters.add(".jpg"); - filters.add(".gif"); - filters.add(".css"); - filters.add(".bmp"); - filters.add(".ico"); - } - - /** - * Filter uri with exclusion list. - * @param uri - * uri to filter. - * @return filter or not. - */ - private boolean uriFilter(final String uri) { - boolean ret = false; - for (String elem : filters) { - if (uri.contains(elem)) { - ret = true; - } - } - return ret; - } - - /** - * Do the before process. - * @param request the request. - * @param response the response. - * @throws IOException exceptions for the before process. - * @throws ServletException exceptions for the before process. - * @return a report - */ - private WebInvocationAuditReport doBeforeProcessing(final ServletRequest request,final ServletResponse response) throws IOException, ServletException { - HttpServletRequest hreq = (HttpServletRequest) request; - - ICurrentInvocationID current = CurrentInvocationID.getInstance(); - String invocationId = hreq.getHeader(HEADER_INVOCATION_ID); - - if (invocationId != null) { - - // Creates an ID from the read parameter and install it in the ThreadLocal - IAuditID id = new AuditIDImpl(invocationId); - current.setAuditID(id); - } else { - // Generate a new ID for this call (no parent ID as this is the first call) - current.init(null); - } - - seqNumber++; - return webInvocationAuditReportFactory.prepareAuditReport(seqNumber,System.currentTimeMillis(), System.nanoTime(), Thread.currentThread(), "web", hreq); - } - - /** - * Do the after process. - * @param request the request. - * @param response the response. - * @param report the report to complete - * @throws IOException exceptions for the after process. - * @throws ServletException exceptions for the after process. - */ - private void doAfterProcessing(final ServletRequest request,final HttpServletResponse response, final WebInvocationAuditReport report) throws IOException, ServletException { - - // reset - CurrentInvocationID.getInstance().setAuditID(null); - try { - int status = -1; - Method m = response.getClass().getMethod("getStatus"); - if (m != null) { - Integer i = (Integer) m.invoke(response); - if (i != null) { - status = i.intValue(); - } - } - if(eventService.getDispatcher("WEB")==null) { - EventDispatcher d = new EventDispatcher(); - d.setNbWorkers(2); - d.start(); - eventService.registerDispatcher("WEB", d); - } - if (report != null) { - webInvocationAuditReportFactory.completeAuditReport(report, System.nanoTime(), response.getContentType()); - report.setStatus(status); - Event e = new Event(report); - sendEvent(e); - } - - } catch (Exception e) { - logger.error("Unable to make a report", e); - } - } - - /** - * Do the filter process. - * @param request The servlet request we are processing - * @param response The servlet response we are creating - * @param chain The filter chain we are processing - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { - // do nothing - if (uriFilter(((HttpServletRequest) request).getRequestURI())) { - chain.doFilter(request, response); - return; - } - - HttpServletResponse httpServletResponse = (HttpServletResponse) response; - - WebInvocationAuditReport report = doBeforeProcessing(request, httpServletResponse); - try { - chain.doFilter(request, httpServletResponse); - } finally { - doAfterProcessing(request, httpServletResponse, report); - } - } - - /** - * Return the filter configuration object for this filter. - * - * @return the filter config. - */ - public FilterConfig getFilterConfig() { - return (this.filterConfig); - } - - /** - * Set the filter configuration object for this filter. - * @param filterConfig The filter configuration object - */ - public void setFilterConfig(final FilterConfig filterConfig) { - this.filterConfig = filterConfig; - } - - /** - * Destroy method for this filter. - */ - public void destroy() { - } - - /** - * Init method for this filter. - * @param filterConfig the filter config to init. - */ - public void init(final FilterConfig filterConfig) { - this.filterConfig = filterConfig; - } - - /** - * @return string representation of this object - */ - @Override - public String toString() { - if (filterConfig == null) { - return ("SimpleFilter()"); - } - StringBuffer sb = new StringBuffer("SimpleFilter("); - sb.append(filterConfig); - sb.append(")"); - return (sb.toString()); - } - - /** - * Method that get stacktrace. - * @param t the concerned throwable. - * @return the current stacktrace in displayable format. - */ - public static String getStackTrace(final Throwable t) { - String stackTrace = null; - try { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - t.printStackTrace(pw); - pw.close(); - sw.close(); - stackTrace = sw.getBuffer().toString(); - } catch (Exception ex) { - System.out.println(ex); - } - return stackTrace; - } - - /** - * Log method. - * @param msg the log message. - */ - public void log(final String msg) { - filterConfig.getServletContext().log(msg); - } - - /** - * To send event to an approriate dispatcher following different type of Event - * JNDI,WEB,JAXWS,EJB.. - * - * @param e - * The event to send - */ - public void sendEvent(IEvent e) { - GenericAuditReport report = ((Event) e).getReport(); - if (report instanceof WebInvocationAuditReport) { - eventService.getDispatcher("WEB").dispatch(e); - } else if (report instanceof InvocationAuditReport) { - eventService.getDispatcher("EJB").dispatch(e); - } else if (report instanceof JNDIAuditReport) { - eventService.getDispatcher("JNDI").dispatch(e); - } else if (report instanceof JaxwsAuditReport) { - eventService.getDispatcher("JAXWS").dispatch(e); - } else { - logger.error("Not be able to dispatch event correctly on dispatchers.The event is unknown therefore don't dispatch"); - } - - } - - /** - * Sets the given broadcaster in order to send notification. - * @param broadcaster the given object - */ - public void setBroadcaster(final ModelMBeanNotificationBroadcaster broadcaster) { - this.broadcaster = broadcaster; - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterAdapter.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterAdapter.java deleted file mode 100644 index 97fd58e634..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterAdapter.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.webauditor.filters; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; -import javax.management.modelmbean.InvalidTargetObjectTypeException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * Commons modeler adapter. - * @author Florent Benoit - */ -public class HttpAuditFilterAdapter extends BaseModelMBean { - - /** - * Create the mbean. - * @throws MBeanException if the super constructor fails. - */ - public HttpAuditFilterAdapter() throws MBeanException { - super(); - } - - /** - * @return the wrapped resource (managed object) - */ - protected HttpAuditFilter getManagedComponent() { - try { - return (HttpAuditFilter) getManagedResource(); - } catch (InstanceNotFoundException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (RuntimeOperationsException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (MBeanException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (InvalidTargetObjectTypeException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } - } - - /** - * Calls some operation on the wrapped object. - * @param registrationDone if registration has been done or not - */ - @Override - public void postRegister(final Boolean registrationDone) { - getManagedComponent().setBroadcaster(this); - } - -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/report/WebInvocationAuditReportFactory.java b/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/report/WebInvocationAuditReportFactory.java deleted file mode 100644 index b28ba93d43..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/java/org/ow2/jonas/audit/internal/webauditor/report/WebInvocationAuditReportFactory.java +++ /dev/null @@ -1,236 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.audit.internal.webauditor.report; - -import java.lang.management.GarbageCollectorMXBean; -import java.lang.management.ManagementFactory; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Set; - -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectInstance; -import javax.management.ObjectName; -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.auditreport.impl.WebInvocationAuditReport; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This class build report based on invocations events. - * @author Mathieu ANCELIN - */ -public class WebInvocationAuditReportFactory { - - /** - * The value for call level at start. - */ - private static final int START_LEVEL = -1; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebInvocationAuditReportFactory.class); - - /** - * The creating trigger. - */ - private boolean creatingReports = true; - - /** - * JMX server. - */ - private MBeanServer jmxServer = null; - - /** - * The constructor of the factory. - * @param jmxServer the JMX Server used to perform JMX requests - */ - public WebInvocationAuditReportFactory(final MBeanServer jmxServer) { - this.jmxServer = jmxServer; - } - - /** - * This method create a minimal report with start informations and put it in - * a map, waiting for ending informations. - * @param invocationNumber the invocation number. - * @param timestamp the start timestamp. - * @param start the time (in ns) the invocation starts. - * @param current the current thread. - * @param role the role used for the invocation. - * @param req the http request. - * @return a report - */ - public WebInvocationAuditReport prepareAuditReport(final long invocationNumber, final long timestamp, final long start, final Thread current, - final String role, final HttpServletRequest req) { - if (!this.creatingReports) { - return null; - } - int freeMemoryBefore = (int) (Runtime.getRuntime().freeMemory()); - int totalMemoryBefore = (int) (Runtime.getRuntime().totalMemory()); - try { - String prefix = "/webcontainer/root"; - String post = ""; - if (req.getRequestURI().equals("/") && req.getContextPath().equals("")) { - post += "root"; - } - WebInvocationAuditReport reporttmp = new WebInvocationAuditReport(req); - - // Sets the ID in the report - reporttmp.setKeyID(CurrentInvocationID.getInstance().getAuditID().getID()); - - reporttmp.setFreeMemoryBefore(freeMemoryBefore); - int paramSize = req.getParameterMap().values().size(); - Object[] params = new String[paramSize]; - int i = 0; - Enumeration e = req.getParameterNames(); - while (e.hasMoreElements()) { - String name = e.nextElement(); - String value = req.getParameter(name); - params[i] = name + ":" + value; - i++; - } - reporttmp.setMethodParameters(params); - reporttmp.setMethodStackTrace(current.getStackTrace()); - reporttmp.setRequestStart(start); - reporttmp.setRequestTimeStamp(timestamp); - SecurityContext securityContext = SecurityCurrent.getCurrent().getSecurityContext(); - String roles = ""; - String username = ""; - // Not yet authenticated - if (securityContext == null) { - securityContext = new SecurityContext(); - } - String[] rolesArray = securityContext.getRoles(); - if (rolesArray != null) { - roles = Arrays.asList(rolesArray).toString(); - } - username = securityContext.getPrincipalName(); - reporttmp.setRoles(roles); - reporttmp.setUser(username); - reporttmp.setTarget(prefix + req.getRequestURI() + post); - String packagePath = getPackagePath(req.getContextPath()); - if (packagePath.charAt(0) == '/') { - reporttmp.setTarget(reporttmp.getTarget().replace("/webcontainer/", "/webcontainer" + packagePath)); - } else { - reporttmp.setTarget(reporttmp.getTarget().replace("/webcontainer/", "/webcontainer/" + packagePath)); - } - reporttmp.setTotalMemoryBefore(totalMemoryBefore); - - return reporttmp; - } catch (Exception ex) { - logger.error("Unable to prepare the audit report", ex); - return null; - } - } - - /** - * Get the package name of a servlet through JMX. - * @param servletMapping the mapped servlet path. - * @return the package name. - */ - public String getPackagePath(final String servletMapping) { - String[] warPath = {}; - String war = ""; - String[] earPath = {}; - String ear = ""; - Set objs = new HashSet(); - try { - objs = jmxServer.queryMBeans(new ObjectName(":j2eeType=WebModule,name=//localhost" + servletMapping - + ",*"), null); - } catch (MalformedObjectNameException e) { - logger.error("Unable to get package from servlet mapping " + servletMapping, e); - } catch (NullPointerException e) { - logger.error("Unable to get package from servlet mapping " + servletMapping, e); - } - for (ObjectInstance obj : objs) { - try { - if (jmxServer.getAttribute(obj.getObjectName(), "warURL") != null) { - warPath = ((java.net.URL) jmxServer.getAttribute(obj.getObjectName(), "warURL")).toString().split("/"); - war = warPath[warPath.length - 1]; - } else { - war = ""; - } - if (jmxServer.getAttribute(obj.getObjectName(), "earURL") != null) { - earPath = ((java.net.URL) jmxServer.getAttribute(obj.getObjectName(), "earURL")).toString().split("/"); - ear = earPath[earPath.length - 1]; - ear = ear.substring(0, ear.lastIndexOf("_")) + ".ear"; - } else { - ear = ""; - } - } catch (Exception e) { - logger.error("Unable to get package from servlet mapping " + servletMapping, e); - } - } - return ear + "/" + war + "/"; - } - - /** - * Return a new report well endded. - * @param report the report to complete - * @param stop the time the event occured. - * @param returnedObject the returned object. - */ - public void completeAuditReport(final WebInvocationAuditReport report, final long stop, final Object returnedObject) { - if (!this.creatingReports) { - return; - } - long totalGarbageCollections = 0; - long garbageCollectionTime = 0; - for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { - long count = gc.getCollectionCount(); - if (count >= 0) { - totalGarbageCollections += count; - } - long time = gc.getCollectionTime(); - if (time >= 0) { - garbageCollectionTime += time; - } - } - int freeMemoryAfter = (int) (Runtime.getRuntime().freeMemory()); - int totalMemoryAfter = (int) (Runtime.getRuntime().totalMemory()); - report.setFreeMemoryAfter(freeMemoryAfter); - report.setTotalMemoryAfter(totalMemoryAfter); - report.setMethodReturn(returnedObject); - report.setRequestStop(stop); - report.setSweepMarkTime(totalGarbageCollections); - report.setScavengeTime(garbageCollectionTime); - } - - /** - * Setter on creatingreports. - * @param creatingReportsParam the new value. - */ - public void setCreatingReports(final boolean creatingReportsParam) { - this.creatingReports = creatingReportsParam; - } -} diff --git a/jonas/modules/services/jonas-audit/core/src/main/resources/META-INF/jonas-audit-core.bnd b/jonas/modules/services/jonas-audit/core/src/main/resources/META-INF/jonas-audit-core.bnd deleted file mode 100644 index 3ab70ed2f4..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/resources/META-INF/jonas-audit-core.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: $ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.audit.internal.* - -Import-Package javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * diff --git a/jonas/modules/services/jonas-audit/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-audit/core/src/main/resources/metadata.xml deleted file mode 100644 index e53504089a..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/logger/mbeans-descriptors.xml b/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/logger/mbeans-descriptors.xml deleted file mode 100644 index 6a3fa40ab8..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/logger/mbeans-descriptors.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/webauditor/filters/mbeans-descriptors.xml b/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/webauditor/filters/mbeans-descriptors.xml deleted file mode 100644 index 950a663068..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/resources/org/ow2/jonas/audit/internal/webauditor/filters/mbeans-descriptors.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-audit/core/src/main/templates/jonas-audit.properties.template b/jonas/modules/services/jonas-audit/core/src/main/templates/jonas-audit.properties.template deleted file mode 100644 index f2920e30a7..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/main/templates/jonas-audit.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS Audit service configuration -# -jonas.services audit -# Set the name of the implementation class of the audit service. -jonas.service.audit.class org.ow2.jonas.audit.internal.JOnASAuditServiceImpl diff --git a/jonas/modules/services/jonas-audit/core/src/test/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterTestCase.java b/jonas/modules/services/jonas-audit/core/src/test/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterTestCase.java deleted file mode 100644 index ccdc9c93c5..0000000000 --- a/jonas/modules/services/jonas-audit/core/src/test/java/org/ow2/jonas/audit/internal/webauditor/filters/HttpAuditFilterTestCase.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.audit.internal.webauditor.filters; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; - -import javax.management.MBeanServer; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.AuditIDImpl; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.CoreMatchers.nullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * A {@code HttpAuditFilterTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class HttpAuditFilterTestCase { - - private ICurrentInvocationID current; - - @BeforeTest - public void setUp() throws Exception { - current = CurrentInvocationID.getInstance(); - } - - @BeforeMethod - public void eraseAuditIdInThreadLocal() throws Exception { - // Erase any audit ID in place - current.setAuditID(null); - } - - @Test - public void testNewInvocationIdIsCreated() throws Exception { - MBeanServer mbeanServer = mock(MBeanServer.class); - HttpServletRequest request = mock(HttpServletRequest.class); - HttpServletResponse response = mock(HttpServletResponse.class); - - StringBuffer sb = new StringBuffer("a/static/resource.html"); - - when(request.getRequestURI()).thenReturn(sb.toString()); - when(request.getRequestURL()).thenReturn(sb); - when(request.getParameterMap()).thenReturn(new HashMap()); - when(request.getParameterNames()).thenReturn(Collections.enumeration(Collections.emptyList())); - - HttpAuditFilter filter = new HttpAuditFilter(mbeanServer); - - filter.doFilter(request, response, new FilterChain() { - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { - IAuditID audit = current.getAuditID(); - assertThat(audit, notNullValue()); - } - }); - - // after, check that it has been cleared - assertThat(current.getAuditID(), nullValue()); - } - - @Test - public void testNewInvocationIdIsCreatedEvenIfOneIsAlreadyInstalled() throws Exception { - MBeanServer mbeanServer = mock(MBeanServer.class); - HttpServletRequest request = mock(HttpServletRequest.class); - HttpServletResponse response = mock(HttpServletResponse.class); - - StringBuffer sb = new StringBuffer("a/static/resource.html"); - - when(request.getRequestURI()).thenReturn(sb.toString()); - when(request.getRequestURL()).thenReturn(sb); - when(request.getParameterMap()).thenReturn(new HashMap()); - when(request.getParameterNames()).thenReturn(Collections.enumeration(Collections.emptyList())); - - HttpAuditFilter filter = new HttpAuditFilter(mbeanServer); - - // Install an ID the the ThreadLocal - final IAuditID existing = new AuditIDImpl(); - existing.generate(); - current.setAuditID(existing); - - // Filter the request - filter.doFilter(request, response, new FilterChain() { - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { - IAuditID audit = current.getAuditID(); - assertThat(audit, notNullValue()); - assertThat(audit, is( not( equalTo(existing) ) )); - } - }); - - // after, check that it has been cleared - assertThat( current.getAuditID(), nullValue() ); - - } - - @Test - public void testInvocationIdIsReadFromHeaders() throws Exception { - MBeanServer mbeanServer = mock(MBeanServer.class); - HttpServletRequest request = mock(HttpServletRequest.class); - HttpServletResponse response = mock(HttpServletResponse.class); - - StringBuffer sb = new StringBuffer("a/static/resource.html"); - - when(request.getRequestURI()).thenReturn(sb.toString()); - when(request.getRequestURL()).thenReturn(sb); - when(request.getParameterMap()).thenReturn(new HashMap()); - when(request.getParameterNames()).thenReturn(Collections.enumeration(Collections.emptyList())); - when(request.getHeader(HttpAuditFilter.HEADER_INVOCATION_ID)).thenReturn("parent/n:local/0"); - - HttpAuditFilter filter = new HttpAuditFilter(mbeanServer); - - filter.doFilter(request, response, new FilterChain() { - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { - IAuditID audit = current.getAuditID(); - assertThat(audit, notNullValue()); - - // Check that parent ID is the one transferred on the wire - assertThat(audit.getParentID(), is( equalTo("parent/n") )); - } - }); - - // after, check that it has been cleared - assertThat(current.getAuditID(), nullValue()); - } - -} diff --git a/jonas/modules/services/jonas-audit/pom.xml b/jonas/modules/services/jonas-audit/pom.xml deleted file mode 100644 index 9bbf8f9f53..0000000000 --- a/jonas/modules/services/jonas-audit/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-audit - JOnAS :: Services :: Audit - pom - - core - - diff --git a/jonas/modules/services/jonas-carol-registry/ant/pom.xml b/jonas/modules/services/jonas-carol-registry/ant/pom.xml deleted file mode 100644 index d097296b74..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - jonas-carol-registry - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-carol-registry-ant - bundle - JOnAS :: Services :: Carol Registry :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - provided - - - - diff --git a/jonas/modules/services/jonas-carol-registry/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/carol/Carol.java b/jonas/modules/services/jonas-carol-registry/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/carol/Carol.java deleted file mode 100644 index 8d456c2669..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/carol/Carol.java +++ /dev/null @@ -1,357 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.carol; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -import java.io.File; - - -/** - * Allow to configure the properties in carol.properties file. - * - * carol.protocols - * rmi.local.registry - * rmi.local.call - * carol.start.cmi - * cmi.server.provider.urls - * @author Florent Benoit - * @author coqp - * - */ -public class Carol extends AbstractJOnASBaseAntTask { - - - /** - * Info for the logger. - */ - private static final String INFO = "[Carol] "; - - /** - * Property separators (4 spaces). - */ - public static final String SEPARATOR = "="; - - /** - * Name of Carol configuration file. - */ - public static final String CAROL_CONF_FILE = "carol.properties"; - - /** - * Default Host. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Default protocol header. - */ - private static final String PROTOCOL_HEADER = "://"; - - /** - * Default jrmp port number. - */ - private static final String DEFAULT_JRMP_PORT = "1099"; - - /** - * Default iiop port number. - */ - private static final String DEFAULT_IIOP_PORT = "2001"; - - /** - * Default irmi port number. - */ - private static final String DEFAULT_IRMI_PORT = "1098"; - - /** - * Protocols property. - */ - private static final String PROTOCOLS_PROPERTY = "carol.protocols"; - - /** - * Carol JRMP property. - */ - private static final String JRMP_PROPERTY = "carol.jrmp.url"; - - /** - * Carol IIOP property. - */ - private static final String IIOP_PROPERTY = "carol.iiop.url"; - - /** - * Carol IRMI property. - */ - private static final String IRMI_PROPERTY = "carol.irmi.url"; - - /** - * Optimization. - */ - private static final String OPTIMIZATION_PROPERTY = "carol.jvm.rmi.local.call"; - - - - /** - * Local Registry. - */ - private static final String LOCALREGISTRY_PROPERTY = "carol.jvm.rmi.local.registry"; - - /** - * Start CMI. - */ - public static final String START_CMI_PROPERTY = "carol.start.cmi"; - - - /** - * Sequence of associations between a protocol and a list of provider URLs. - */ - public static final String SEQ_PROTOCOLS_TO_PROVIDER_URLS = "cmi.server.provider.urls"; - - - /** - * List of provider URLs. - */ - private String serverproviderurls = null; - - /** - * connection url for jrmp. - */ - private String jrmpconnectionurl = "rmi"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_JRMP_PORT; - - /** - * connection url for iiop. - */ - private String iiopconnectionurl = "iiop"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_IIOP_PORT; - - /** - * connection url for irmi. - */ - private String irmiconnectionurl = "rmi"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_IRMI_PORT; - - /** - * for starting cmi automatically. - */ - private Boolean startcmi = false; - - - /** - * local call with jrmp optimisation. - */ - private Boolean rmilocalcall = false; - - - /** - * local registry optimisation. - */ - private Boolean rmilocalregistry = true; - - /** - * jonas rmi activation (iiop, irmi, jrmp). - */ - private String carolprotocols = null; - - /** - * host. - */ - private String host = DEFAULT_HOST; - - /** - * Default constructor. - */ - public Carol() { - super(); - } - - - - /** - * Set the connection url for JRMP. - * - * @param portNumber - * port for JRMP - */ - public void setJrmpPort(final String portNumber) { - jrmpconnectionurl = "rmi" + PROTOCOL_HEADER + host + ":" + portNumber; - - } - - - - /** - * Set the connection url for IIOP. - * - * @param portNumber - * port for IIOP - */ - public void setIiopPort(final String portNumber) { - iiopconnectionurl = "iiop" + PROTOCOL_HEADER + host + ":" + portNumber; - - } - - /** - * Set the connection url for IRMI. - * - * @param portNumber - * port for IRMI - */ - public void setIrmiPort(final String portNumber) { - irmiconnectionurl = "rmi" + PROTOCOL_HEADER + host + ":" + portNumber; - } - - /** - * Set the port for all protocols. - * - * @param portNumber - * port for all protocols - */ - public void setDefaultPort(final String portNumber) { - setJrmpPort(portNumber); - setIiopPort(portNumber); - setIrmiPort(portNumber); - } - - /** - * Set the initial protocols when JOnAS start. - * - * @param protocols - * comma separated list of protocols - */ - public void setProtocols(final String protocols) { - this.carolprotocols = protocols; - } - - /** - * Set the host. - * - * @param host hostname - * - */ - public void setHost(final String host) { - this.host = host; - } - - /** - * Enable or disable optimization. - * - * @param enabled - * (true or false) - * the default value is currently false in carol.properties - */ - public void setJrmpOptimization(final boolean enabled) { - this.rmilocalcall = enabled; - } - - /** - * Enable or disable local registry. - * - * @param enabled - * (true or false) - * the default value is currently true in carol.properties - */ - public void setLocalRegistry(final boolean enabled) { - this.rmilocalregistry = enabled; - } - - /** - * Enable or disable the use of CMI. - * @param enabled (true or false) - * the default value is currently false in carol.properties - */ - public void setCmiStarted(final boolean enabled) { - this.startcmi = enabled; - } - - /** - * Set the sequence of protocols and provider urls. - * @param seqProtocol2ProviderURLs a sequence of protocols and provider urls - */ - public void setClusterViewProviderUrls(final String seqProtocol2ProviderURLs) { - this.serverproviderurls = seqProtocol2ProviderURLs; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - super.execute(); - - // Path to JONAS_BASE - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - JTask jtask = new JTask(); - jtask.setDestDir(this.destDir); - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - PROTOCOLS_PROPERTY, - carolprotocols, - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - OPTIMIZATION_PROPERTY, - rmilocalcall.toString(), - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - LOCALREGISTRY_PROPERTY, - rmilocalregistry.toString(), - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - START_CMI_PROPERTY, - startcmi.toString(), - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - JRMP_PROPERTY , - jrmpconnectionurl , - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - IIOP_PROPERTY , - iiopconnectionurl , - SEPARATOR, - false); // replace - jtask.changeValueForKey(INFO, - jBaseConf, - CAROL_CONF_FILE, - IRMI_PROPERTY , - irmiconnectionurl , - SEPARATOR, - false); // replace - tasks.add(jtask); - executeAllTask(); - } -} diff --git a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/META-INF/jonas-carol-registry-ant.bnd b/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/META-INF/jonas-carol-registry-ant.bnd deleted file mode 100644 index 96fae3bd84..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/META-INF/jonas-carol-registry-ant.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.antmodular.jonasbase.carol.* - -# Import/Export nothing -Import-Package !* -Export-Package !* \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/antlib-carol.xml b/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/antlib-carol.xml deleted file mode 100644 index 7f9ece8a1c..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/antlib-carol.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.properties.template b/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.properties.template deleted file mode 100644 index 3f7e2ddaa4..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -#Carol -carol.allport=1099 -carol.defaultprotocol=jrmp -carol.jrmpopt=false -carol.localregistry=true \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.xml b/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.xml deleted file mode 100644 index eceff9c9b6..0000000000 --- a/jonas/modules/services/jonas-carol-registry/ant/src/main/resources/build-carol.xml +++ /dev/null @@ -1,14 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/core/pom.xml b/jonas/modules/services/jonas-carol-registry/core/pom.xml deleted file mode 100644 index 8a08f67336..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/pom.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - jonas-carol-registry - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-carol-registry-core - bundle - JOnAS :: Services :: Carol Registry :: Core - - - - org.osgi - org.osgi.compendium - - - org.ow2.carol - carol - provided - - - org.ow2.carol - carol-interceptors - provided - - - org.ow2.carol - carol-iiop-delegate - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-sec-interceptors-iiop - ${project.version} - - - org.ow2.jonas - jonas-trans-interceptors-iiop - ${project.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - irmi - - - org.ow2.carol.irmi - irmi - ${irmi.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - url-internal - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - generate-resources - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDIContextFactory.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDIContextFactory.java deleted file mode 100644 index d873828fa2..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDIContextFactory.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// Use the org.ow2.carol.jndi.spi instead of an org.ow2.jonas.* package in -// order to make the transition between MultiOrbInitialContextFactory and -// VirtualJNDIContextFactory transparent for CAROL bundle inclusions. -package org.ow2.carol.jndi.spi; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.naming.spi.InitialContextFactory; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Context factory that uses {@link VirtualJNDILookup} for JNDI lookups. - * - * @author S. Ali Tokmen - */ -public class VirtualJNDIContextFactory implements InitialContextFactory { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(VirtualJNDIContextFactory.class); - - /** - * Parent InitialContextFactory environment variable. - */ - public static final String PARENT_INITIAL_CONTEXT_FACTORY = VirtualJNDIContextFactory.class.getName() + "_PARENT_" - + Context.INITIAL_CONTEXT_FACTORY; - - /** - * Creates a context using the parent context factory and maps it with a - * new {@link VirtualJNDILookup} instance. - * - * @param env The possibly null environment specifying information - * to be used in the creation of the initial context. - * - * @return A non-null initial context object that implements the Context - * interface. - * - * @throws NamingException If cannot create an initial context. - */ - @SuppressWarnings("unchecked") - public Context getInitialContext(final Hashtable env) throws NamingException { - String parent = System.getProperty(VirtualJNDIContextFactory.PARENT_INITIAL_CONTEXT_FACTORY); - if (parent == null) { - throw new IllegalStateException("The parent InitialContextFactory is null!"); - } else { - // If a Context implementation for the desired protocol is not in - // the context factory stack, the parent will always call the - // default factory. Since the default (VirtualJNDIContextFactory) - // will call back the parent, this might end up in an infinite - // loop. Check for self in the stack to ensure we never enter that - // case. - boolean selfAlreadyInStack = false; - for (StackTraceElement ste : Thread.currentThread().getStackTrace()) { - if (this.getClass().getName().equals(ste.getClassName())) { - selfAlreadyInStack = true; - break; - } - } - Hashtable environment = new Hashtable(); - if (env != null) { - environment.putAll(env); - } - if (selfAlreadyInStack || environment.get(Context.INITIAL_CONTEXT_FACTORY) == null) { - environment.put(Context.INITIAL_CONTEXT_FACTORY, parent); - } - - InitialContextFactory parentFactory; - try { - Class parentClass = Thread.currentThread().getContextClassLoader().loadClass(parent); - parentFactory = (InitialContextFactory) parentClass.newInstance(); - } catch (Exception e) { - throw new NamingException("Cannot load parent initial context (" + parent + "): " + e); - } - logger.debug("Getting initial context with parent factory " + parentFactory); - return new VirtualJNDILookup(parentFactory.getInitialContext(environment)); - } - } -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDILookup.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDILookup.java deleted file mode 100644 index 3f7d51f882..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/carol/jndi/spi/VirtualJNDILookup.java +++ /dev/null @@ -1,417 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// Use the org.ow2.carol.jndi.spi instead of an org.ow2.jonas.* package in -// order to make the transition between MultiContext and VirtualJNDILookup -// transparent for CAROL bundle inclusions. -package org.ow2.carol.jndi.spi; - -import java.util.Hashtable; - -import javax.naming.Binding; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.NameClassPair; -import javax.naming.NameParser; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; - -import org.ow2.jonas.versioning.VersioningService; - -/** - * Handles virtual JNDI lookup. - * @author S. Ali Tokmen - */ -public class VirtualJNDILookup implements Context { - - /** - * Parent context. - */ - private Context parent; - - /** - * Versioning service. - */ - private static VersioningService versioningService; - - /** - * Saves the parent context. - * @param parent Parent context. - */ - public VirtualJNDILookup(final Context parent) { - this.parent = parent; - } - - /** - * Retrieves the named object using the prefixed naming strategy: - *
      - *
    • First, the name prefix + name is looked up. - *
    • If not found, name alone is looked up. - *
    • If still not found, name without the prefix is looked up. - *
    - * Note that name is looked up directly if no prefix exists. - * @param name Name of the object to look up - * @return The object bound to name - * @throws NamingException If a naming exception is encountered - */ - public Object lookup(final String name) throws NamingException { - String prefix = getPrefix(); - if (prefix != null) { - try { - // First, look for prefix + name - return parent.lookup(prefix + name); - } catch (NamingException ignored) { - try { - // prefix + name not found, try name - return parent.lookup(name); - } catch (NamingException ne) { - // name alone not found, try name - prefix - if (name.startsWith(prefix)) { - // This is the last trial, don't catch the - // NamingException - return parent.lookup(name.substring(prefix.length())); - } else { - // name doesn't start with prefix and a lookup trial - // on name has already been done: throw back the - // NamingException - throw ne; - } - } - } - } - - // No prefix present, call parent as usual - return parent.lookup(name); - } - - /** - * @see VirtualJNDILookup#lookup(String) - * @param name Name of the object to look up - * @return The object bound to name - * @throws NamingException If a naming exception is encountered - */ - public Object lookup(final Name name) throws NamingException { - return lookup(name.toString()); - } - - /** - * Retrieves the named object using the prefixed naming strategy: - *
      - *
    • First, the name prefix + name is looked up. - *
    • If not found, name alone is looked up. - *
    • If still not found, name without the prefix is looked up. - *
    - * Note that name is looked up directly if no prefix exists. - * @param name Name of the object to look up - * @return The object bound to name, not following the terminal - * link (if any) - * @throws NamingException if a naming exception is encountered - */ - public Object lookupLink(final String name) throws NamingException { - String prefix = getPrefix(); - if (prefix != null) { - try { - // First, look for prefix + name - return parent.lookupLink(prefix + name); - } catch (NamingException ignored) { - try { - // prefix + name not found, try name - return parent.lookupLink(name); - } catch (NamingException ne) { - // name alone not found, try name - prefix - if (name.startsWith(prefix)) { - // This is the last trial, don't catch the - // NamingException - return parent.lookupLink(name.substring(prefix.length())); - } else { - // name doesn't start with prefix and a lookup trial - // on name has already been done: throw back the - // NamingException - throw ne; - } - } - } - } - - // No prefix present, call parent as usual - return parent.lookupLink(name); - } - - /** - * @see VirtualJNDILookup#lookupLink(String) - * @param name Name of the object to look up - * @return The object bound to name, not following the terminal - * link (if any) - * @throws NamingException if a naming exception is encountered - */ - public Object lookupLink(final Name name) throws NamingException { - return lookupLink(name.toString()); - } - - /** - * Gets the JNDI naming prefix. This can be set using the EAR or the via the - * InitialContext properties. - * @return JNDI naming prefix to use, null if none found. - */ - protected String getPrefix() { - String prefix; - try { - prefix = (String) parent.lookup("java:comp/env/JNDILookupPrefix"); - } catch (NamingException e) { - prefix = null; - } - - if (prefix != null) { - return prefix; - } else { - // TODO: get prefix from environment - return null; - } - } - - /** - * @param versioningService The versioning service to set. - */ - public static void setVersioningService(final VersioningService versioningService) { - VirtualJNDILookup.versioningService = versioningService; - } - - /** - * Sets the versioning service to null. - */ - public static void unsetVersioningService() { - VirtualJNDILookup.versioningService = null; - } - - /** - * @return The versioning service. - */ - public static VersioningService getVersioningService() { - return VirtualJNDILookup.versioningService; - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Object addToEnvironment(final String propName, final Object propVal) throws NamingException { - return parent.addToEnvironment(propName, propVal); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void bind(final Name name, final Object obj) throws NamingException { - parent.bind(name, obj); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void bind(final String name, final Object obj) throws NamingException { - parent.bind(name, obj); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void close() throws NamingException { - parent.close(); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Name composeName(final Name name, final Name prefix) throws NamingException { - return parent.composeName(name, prefix); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public String composeName(final String name, final String prefix) throws NamingException { - return parent.composeName(name, prefix); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Context createSubcontext(final Name name) throws NamingException { - return parent.createSubcontext(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Context createSubcontext(final String name) throws NamingException { - return parent.createSubcontext(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void destroySubcontext(final Name name) throws NamingException { - parent.destroySubcontext(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void destroySubcontext(final String name) throws NamingException { - parent.destroySubcontext(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Hashtable getEnvironment() throws NamingException { - return parent.getEnvironment(); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public String getNameInNamespace() throws NamingException { - return parent.getNameInNamespace(); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NameParser getNameParser(final Name name) throws NamingException { - return parent.getNameParser(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NameParser getNameParser(final String name) throws NamingException { - return parent.getNameParser(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NamingEnumeration list(final Name name) throws NamingException { - return parent.list(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NamingEnumeration list(final String name) throws NamingException { - return parent.list(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NamingEnumeration listBindings(final Name name) throws NamingException { - return parent.listBindings(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public NamingEnumeration listBindings(final String name) throws NamingException { - return parent.listBindings(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void rebind(final Name name, final Object obj) throws NamingException { - parent.rebind(name, obj); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void rebind(final String name, final Object obj) throws NamingException { - parent.rebind(name, obj); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public Object removeFromEnvironment(final String propName) throws NamingException { - return parent.removeFromEnvironment(propName); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void rename(final Name oldName, final Name newName) throws NamingException { - parent.rename(oldName, newName); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void rename(final String oldName, final String newName) throws NamingException { - parent.rename(oldName, newName); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void unbind(final Name name) throws NamingException { - parent.unbind(name); - } - - /** - * Calls the parent. - * {@inheritDoc} - */ - public void unbind(final String name) throws NamingException { - parent.unbind(name); - } -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/CarolRegistryService.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/CarolRegistryService.java deleted file mode 100644 index 325c22f95a..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/CarolRegistryService.java +++ /dev/null @@ -1,517 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.registry.carol; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.jndi.ns.NameServiceManager; -import org.ow2.carol.jndi.spi.VirtualJNDIContextFactory; -import org.ow2.carol.jndi.spi.VirtualJNDILookup; -import org.ow2.carol.util.configuration.CarolDefaultValues; -import org.ow2.carol.util.configuration.ConfigurationException; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.carol.util.configuration.ProtocolConfiguration; -import org.ow2.jonas.configuration.DeploymentPlanDeployer; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.loader.OSGiClassLoader; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JComponentContextFactory; -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.registry.carol.delegate.ORBCCFDelegate; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; - -/** - * Implementation of the {@link RegistryService} interface. - * @author Helene Joanin Contributor(s): Julien Lehembre (Libelis) - */ -public class CarolRegistryService extends AbsServiceImpl implements RegistryService { - - /** - * Management loggers. - */ - private static Logger logger = Log.getLogger(Log.JONAS_REGISTRY_PREFIX); - - /** - * Automatic mode. - */ - public static final String DEFAULT_MODE = "automatic"; - - /** - * Collocated mode. - */ - public static final String COLLOCATED = "collocated"; - - /** - * Remote mode. - */ - public static final String REMOTE = "remote"; - - /** - * Should the local registry be started ? - */ - private boolean bStartRegistry = true; - - /** - * Should this service ignore registry startup errors ? - */ - private boolean bIgnoreError = true; - - /** - * The ORB Delegate. - */ - private JComponentContextFactoryDelegate delegate = null; - - /** - * {@link ComponentContextFactory} factory. - */ - private JComponentContextFactory factory = null; - - /** - * Carol Configuration file. - */ - private URL configurationURL; - - /** - * {@link MBeanServer}. - */ - private MBeanServer mbeanServer = null; - - /** - * {@link DeploymentPlanDeployer} service reference. - */ - private DeploymentPlanDeployer deploymentPlanDeployer = null; - - /** - * Initial Context. - */ - private InitialContext ictx = null; - - /** - * Is IIOP protocol enabled? - */ - private boolean iiopEnabled = false; - - /** - * Property for the security propagation. - */ - private static final String SECURITY_PROPAGATION = "jonas.security.propagation"; - - /** - * Property for the Csiv2 propagation. - */ - private static final String CSIV2_PROPAGATION = "jonas.csiv2.propagation"; - - /** - * Property for the transaction propagation. - */ - private static final String TRANSACTION_PROPAGATION = "jonas.transaction.propagation"; - - /** - * @param mode Registry mode (default, collocated or remote). - */ - public void setMode(final String mode) { - if (DEFAULT_MODE.equalsIgnoreCase(mode)) { - setStartRegistry(true); - setIgnoreError(true); - } else if (COLLOCATED.equalsIgnoreCase(mode)) { - setStartRegistry(true); - setIgnoreError(false); - } else if (REMOTE.equalsIgnoreCase(mode)) { - setStartRegistry(false); - setIgnoreError(false); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void doStart() throws ServiceException { - logger.log(BasicLevel.DEBUG, "Starting Carol Registry Service"); - - - String oldValue = System.getProperty(Context.INITIAL_CONTEXT_FACTORY); - - // Configure Carol in an execution block - IExecution exec = new IExecution() { - public Void execute() throws Exception { - // Set carol mode in server mode (will use fixed port if set) - System.setProperty(CarolDefaultValues.SERVER_MODE, "true"); - // Configure Carol - try { - ConfigurationRepository.init(configurationURL, getDomainName(), getJonasServerName(), getMBeanServerId()); - } catch (ConfigurationException e) { - throw new ServiceException("Cannot init Carol", e); - } - // Deploy the IRMI bundle if needed - if (getProtocolConfiguration("irmi") != null) { - deploymentPlanDeployer.deploy("irmi"); - } - // Force static initialization of PRODelegate - try { - // we do not care the result of this action (exception or not) - // we only need the delegation reference in PortableRemoteObject to be initialized - PortableRemoteObject.narrow(null, null); - } catch (Exception e) { - // exception is not a problem - logger.log(BasicLevel.DEBUG, "PortableRemoteObject initialized"); - } - return null; - } - }; - - // Execute - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), exec); - - // Throw an ServiceException if needed - if (result.hasException()) { - throw new ServiceException(result.getException().getMessage(), result.getException()); - } - - // Set the previous value due to start JNDI flag of carol - System.setProperty(Context.INITIAL_CONTEXT_FACTORY, oldValue); - - try { - initInterceptors(); - } catch (ConfigurationException e) { - throw new ServiceException("Cannot init Carol interceptors", e); - } - - // Start Carol in an execution block - exec = new IExecution() { - public Void execute() throws Exception { - if (bStartRegistry) { - NameServiceManager nameServiceManager = NameServiceManager.getNameServiceManager(); - try { - if (bIgnoreError) { - // start the carol name service manager - nameServiceManager.startNonStartedNS(); - } else { - nameServiceManager.startNS(); - } - } catch (Exception e) { - throw new ServiceException("Cannot start the registry", e); - } - } - return null; - } - }; - - // Execute - result = RunnableHelper.execute(new OSGiClassLoader(), exec); - - // Throw an ServiceException if needed - if (result.hasException()) { - throw new ServiceException(result.getException().getMessage(), result.getException()); - } - - if (iiopEnabled) { - // Add delegate - try { - // Should be done by the container - setDelegate(new ORBCCFDelegate()); - factory.addDelegate(delegate); - } catch (NamingException e) { - throw new ServiceException("Cannot add the delegate", e); - } - } - - // Use VirtualJNDIContextFactory as the InitialContext factory - // Must be done AFTER carol init because carol sets this property internally. - String initialContextFactory = System.getProperty(Context.INITIAL_CONTEXT_FACTORY); - System.setProperty(VirtualJNDIContextFactory.PARENT_INITIAL_CONTEXT_FACTORY, initialContextFactory); - System.setProperty(Context.INITIAL_CONTEXT_FACTORY, VirtualJNDIContextFactory.class.getName()); - - logger.log(BasicLevel.INFO, "Carol Registry Service started"); - } - - /** - * Initialize interceptors. - * Deploy some IIOP bundles if needed. - * @throws ConfigurationException if interceptors cannot be inserted into Carol. - */ - private void initInterceptors() throws ConfigurationException { - boolean security = Boolean.parseBoolean(getServerProperties().getValue(SECURITY_PROPAGATION)); - boolean transaction = Boolean.parseBoolean(getServerProperties().getValue(TRANSACTION_PROPAGATION)); - boolean csiv2 = Boolean.parseBoolean(getServerProperties().getValue(CSIV2_PROPAGATION)); - - iiopEnabled = ConfigurationRepository.getConfiguration("iiop") != null; - - boolean deploySecurityInterceptors = false; - - if (security) { - if (iiopEnabled) { - deploySecurityInterceptors = true; - // iiop interceptors flag - ConfigurationRepository.addInterceptors("iiop", "org.ow2.jonas.security.interceptors.iiop.SecurityInitializer"); - } - } - - if (iiopEnabled && csiv2) { - deploySecurityInterceptors = true; - ConfigurationRepository.addInterceptors("iiop", "org.ow2.jonas.security.iiop.Csiv2Initializer"); - } - - // Deploy before the IIOP transaction interceptors - if (deploySecurityInterceptors) { - try { - deploymentPlanDeployer.deploy("sec-interceptors-iiop"); - } catch (DeployerException e) { - throw new ConfigurationException(e); - } - } - - if (transaction) { - // iiop interceptors flag - if (iiopEnabled) { - // Deploy before the IIOP security interceptors - try { - deploymentPlanDeployer.deploy("trans-interceptors-iiop"); - } catch (DeployerException e) { - throw new ConfigurationException(e); - } - ConfigurationRepository.addInterceptors("iiop", "org.ow2.jonas.tm.jotm.ots.OTSORBInitializer"); - } - } - } - - /** - * {@inheritDoc} - */ - @Override - public void doStop() throws ServiceException { - logger.log(BasicLevel.DEBUG, "Stopping Carol Registry Service"); - - try { - // Stop the carol name service manager - NameServiceManager.getNameServiceManager().stopNS(); - } catch (Exception e) { - throw new ServiceException("Problem when stopping registry service", e); - } - - logger.log(BasicLevel.INFO, "Carol Registry Service stopped"); - } - - /** - * {@inheritDoc} - */ - public List getActiveProtocolNames() { - List protocols = new ArrayList(); - - ProtocolConfiguration[] configs = ConfigurationRepository.getConfigurations(); - for (int i = 0; i < configs.length; i++) { - protocols.add(configs[i].getName()); - } - return protocols; - } - - /** - * {@inheritDoc} - */ - public String getDefaultProtocolName() { - return ConfigurationRepository.getDefaultConfiguration().getName(); - } - - /** - * {@inheritDoc} - */ - public int getExportedObjectPort(final String protocolName) { - ProtocolConfiguration config = getProtocolConfiguration(protocolName); - String key = CarolDefaultValues.CAROL_PREFIX + "." + protocolName + ".server.port"; - String port = config.getProperties().getProperty(key, "0"); - return Integer.valueOf(port); - } - - /** - * {@inheritDoc} - */ - public String getInitialContextFactoryName(final String protocolName) { - ProtocolConfiguration config = getProtocolConfiguration(protocolName); - return config.getProtocol().getInitialContextFactoryClassName(); - } - - /** - * {@inheritDoc} - */ - public URI getProviderURL(final String protocolName) { - ProtocolConfiguration config = getProtocolConfiguration(protocolName); - return URI.create(config.getProviderURL()); - } - - /** - * {@inheritDoc} - */ - public void setDefaultProtocol(final String protocolName) { - ProtocolConfiguration config = getProtocolConfiguration(protocolName); - ConfigurationRepository.setCurrentConfiguration(config); - } - - /** - * @param protocolName protocol name. - * @return Returns the {@link ProtocolConfiguration} with the given name. - */ - private ProtocolConfiguration getProtocolConfiguration(final String protocolName) { - return ConfigurationRepository.getConfiguration(protocolName); - } - - /** - * Bind the {@link JComponentContextFactory} to use. - * @param factory selected factory - */ - public void setComponentContextFactory(final JComponentContextFactory factory) { - this.factory = factory; - } - - /** - * Bind the {@link JComponentContextFactoryDelegate} to use. - * @param delegate selected delegate - */ - // TODO Remove it in full OSGi mode - public void setDelegate(final JComponentContextFactoryDelegate delegate) { - this.delegate = delegate; - } - - /** - * @param startRegistry the bStartRegistry to set - */ - public void setStartRegistry(final boolean startRegistry) { - bStartRegistry = startRegistry; - } - - /** - * @param ignoreError the bIgnoreError to set - */ - public void setIgnoreError(final boolean ignoreError) { - bIgnoreError = ignoreError; - } - - /** - * @param configurationURL the configurationURL to set - */ - public void setConfigurationURL(final URL configurationURL) { - this.configurationURL = configurationURL; - } - - /** - * @param configurationURL the configurationURL to set - * @throws MalformedURLException throws if the URL is not valid - */ - public void setConfiguration(final String configurationURL) throws MalformedURLException { - setConfigurationURL(new URL(configurationURL)); - } - - /** - * Get the initialContext used in this jonas server. - * @return InitialContext the initial context. - * @throws NamingException - */ - public InitialContext getRegistryContext() { - if (ictx == null) { - // Get InitialContext with the correct class loader - // We need to access the carol classes here. - IExecution ie = new IExecution() { - public InitialContext execute() throws Exception { - return new InitialContext(); - } - }; - ExecutionResult result = null; - result = RunnableHelper.execute(getClass().getClassLoader(), ie); - if (result.hasException()) { - logger.log(BasicLevel.ERROR, result.getException()); - } - ictx = result.getResult(); - } - return ictx; - } - - /** - * Returns the MBean server agent identity. - * @return The agent identity. - * @throws ServiceException If the MBeanServerId cannot be retrieved - */ - private String getMBeanServerId() throws ServiceException { - try { - ObjectName on = ObjectName.getInstance("JMImplementation:type=MBeanServerDelegate"); - return (String) mbeanServer.getAttribute(on, "MBeanServerId"); - } catch (Exception e) { - throw new ServiceException("MBeanServerId cannot be retrieved", e); - } - } - - /** - * @param mbeanServer the mbeanServer to set - */ - public void setMbeanServer(final MBeanServer mbeanServer) { - this.mbeanServer = mbeanServer; - } - - /** - * @param deploymentPlanDeployer the deploymentPlanDeployer to set - */ - public void setDeploymentPlanDeployer(final DeploymentPlanDeployer deploymentPlanDeployer) { - this.deploymentPlanDeployer = deploymentPlanDeployer; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - VirtualJNDILookup.setVersioningService(versioningService); - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - VirtualJNDILookup.unsetVersioningService(); - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return VirtualJNDILookup.getVersioningService(); - } -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/JacORBPRODelegate.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/JacORBPRODelegate.java deleted file mode 100644 index 4501a59c92..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/JacORBPRODelegate.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.registry.carol.delegate; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -import javax.rmi.CORBA.Tie; -import javax.rmi.CORBA.Util; - -import org.jacorb.poa.RequestProcessor; -import org.ow2.carol.jndi.ns.JacORBCosNaming; -import org.omg.PortableServer.Servant; -import org.ow2.jonas.lib.ejb21.JHome; -import org.ow2.jonas.lib.ejb21.JRemote; - -/** - * Use EJB context classloader when possible - * @author Florent Benoit - */ -public class JacORBPRODelegate extends org.ow2.carol.rmi.multi.JacORBPRODelegate { - - - /** - * Makes a server object ready to receive remote calls. Note that subclasses - * of PortableRemoteObject do not need to call this method, as it is called - * by the constructor. - * @param obj the server object to export. - * @exception RemoteException if export fails. - */ - public void exportObject(Remote obj) throws RemoteException { - - // For JacORB, we need first to unexport object as it is not associated - // to an ORB - try { - unexportObject(obj); - } catch (Exception eee) { - // Nothing - } - - /* Now export it */ - try { - super.exportObject(obj); - } catch (Exception ee) { - // Nothing - } - - boolean ejb2 = false; - try { - if (obj instanceof JHome || obj instanceof JRemote) { - ejb2 = true; - } - } catch (NoClassDefFoundError ignored) { - // ejb2 service not active - } - - // Connect all EJB2 Home and Remote interfaces, and objectweb components (JOTM, JORAM, ...) - if (ejb2 || obj.getClass().getName().indexOf("org.objectweb") != -1 || - obj.getClass().getName().equals("javax.management.remote.rmi.RMIConnectionImpl")) { - - Tie theTie = Util.getTie(obj); - - // Then connect it to the ORB - if (theTie != null) { - theTie.orb(JacORBCosNaming.getOrb()); - } - } - } - - /** - * Checks to ensure that an object of a remote or abstract interface type - * can be cast to a desired type. - * @param narrowFrom the object to check. - * @param narrowTo the desired type. - * @return an object which can be cast to the desired type. - * @throws ClassCastException if narrowFrom cannot be cast to narrowTo. - */ - public Object narrow(Object narrowFrom, Class narrowTo) throws ClassCastException { - // Save old classloader - ClassLoader old = Thread.currentThread().getContextClassLoader(); - - try { - // Try to get EJB classloader - Thread currentThread = Thread.currentThread(); - if (currentThread != null && (currentThread instanceof RequestProcessor)) { - RequestProcessor rp = (RequestProcessor) currentThread; - if (rp != null) { - Servant servant = rp.getServant(); - if (servant != null) { - Tie tie = null; - if (servant instanceof Tie) { - tie = (Tie) servant; - Remote target = tie.getTarget(); - if (target instanceof JHome) { - JHome jHome = (JHome) target; - ClassLoader cll = jHome.getBf().myClassLoader(); - Thread.currentThread().setContextClassLoader(cll); - } else if (target instanceof JRemote) { - JRemote jRemote = (JRemote) target; - ClassLoader cll = jRemote.getBf().myClassLoader(); - Thread.currentThread().setContextClassLoader(cll); - } - } - } - } - } - } catch (Exception e) { - // nothing - } catch (Error e) { - // nothing - } - - // Call super method with right classloader - Object narrowResult = null; - try { - narrowResult = super.narrow(narrowFrom, narrowTo); - } finally { - // reset to old classloader - Thread.currentThread().setContextClassLoader(old); - } - - return narrowResult; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/ORBCCFDelegate.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/ORBCCFDelegate.java deleted file mode 100644 index e1b2e06359..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/delegate/ORBCCFDelegate.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:ORBCCFDelegate.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.registry.carol.delegate; - -import javax.naming.Context; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.omg.CORBA.ORB; -import org.ow2.carol.jndi.ns.JacORBCosNaming; -import org.ow2.carol.rmi.exception.NamingExceptionHelper; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; - -/** - * Store the {@link org.omg.CORBA.ORB} CORBA ORB under the java:comp/ORB name. - * @author Guillaume Sauthier - */ -public class ORBCCFDelegate implements JComponentContextFactoryDelegate { - - /** - * ORB JNDI Binding name. - */ - private static final String ORB = "ORB"; - - /** - * Logger used for traces. - */ - private static Logger logger = Log.getLogger(Log.JONAS_NAMING_PREFIX); - - /** - * {@inheritDoc} - */ - public void modify(final Context componentContext) throws NamingException { - // Get the ORB. - final ORB orb = JacORBCosNaming.getOrb(); - - // Get JOnAS ORB instance (that will load IIOP interceptors and then needs the correct classloader) - IExecution initORB = new IExecution() { - public Void execute() throws Exception { - if (orb != null) { - try { - // Bind the java:comp/ORB object instance - componentContext.rebind(ORB, orb); - } catch (NamingException ne) { - // Just log the error, then rethrow the original Exception - String err = "Cannot bind java:comp/ORB object : " + ne.getMessage(); - logger.log(BasicLevel.ERROR, err); - throw ne; - } - } - return (Void) null; - } - }; - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), initORB); - - // Throw a NamingException if needed - if (result.hasException()) { - logger.log(BasicLevel.ERROR, "Cannot init the ORB", result.getException()); - throw NamingExceptionHelper.create("Cannot init the ORB", result.getException()); - } - - - } - - /** - * Undo the changes done by this delegate on the given java:comp context. - * @param componentContext java:comp/ component context to be modified. - * @throws NamingException thrown if something goes wrong - * during the {@link javax.naming.Context} update. - */ - public void undo(final Context componentContext) throws NamingException { - // Get the JOnAS instance ORB. - if (JacORBCosNaming.getOrb() != null) { - componentContext.unbind(ORB); - } - } - -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/CarolRegistryConfigurationPlugin.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/CarolRegistryConfigurationPlugin.java deleted file mode 100644 index 44af7c18cc..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/CarolRegistryConfigurationPlugin.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.registry.carol.osgi; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Dictionary; - -import org.osgi.framework.ServiceReference; -import org.osgi.service.cm.ConfigurationPlugin; -import org.ow2.jonas.lib.bootstrap.JProp; - -/** - * JOnAS CarolRegistryConfigurationPlugin component. - * @author Francois Fornaciari - */ -public class CarolRegistryConfigurationPlugin implements ConfigurationPlugin { - - /** - * Carol configuration URL. - */ - private static final String CONFIGURATION_URL = "configuration.url"; - - /** - * {@inheritDoc} - */ - public void modifyConfiguration(ServiceReference serviceReference, Dictionary props) { - // Find the carol.properties URL - File conf = new File(JProp.getJonasBase(), "conf"); - try { - URL carolConfig = new File(conf, "carol.properties").toURL(); - props.put(CONFIGURATION_URL, carolConfig.toString()); - } catch (MalformedURLException e) { - System.out.println("The carol.properties cannot be found."); - } - } - -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/ConfigurationActivator.java b/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/ConfigurationActivator.java deleted file mode 100644 index 0410f4dcda..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/java/org/ow2/jonas/registry/carol/osgi/ConfigurationActivator.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.registry.carol.osgi; - -import java.util.Dictionary; -import java.util.Hashtable; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.service.cm.ConfigurationPlugin; -import org.ow2.jonas.registry.carol.CarolRegistryService; - -/** - * JOnAS Configuration Activator. It registers the ConfigurationPlugin service. - * @author Francois Fornaciari - */ -public class ConfigurationActivator implements BundleActivator { - - /** - * {@inheritDoc} - */ - public void start(final BundleContext bc) throws Exception { - Dictionary dictionary = new Hashtable(); - dictionary.put(ConfigurationPlugin.CM_TARGET, CarolRegistryService.class.getName()); - - // Register the service - bc.registerService(ConfigurationPlugin.class.getName(), new CarolRegistryConfigurationPlugin(), dictionary); - } - - /** - * {@inheritDoc} - */ - public void stop(final BundleContext bc) throws Exception { - } - -} diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry b/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry deleted file mode 100644 index 00f733e37f..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# This command is deprecated. -# Use "jonas start -standby" instead. -jonas start -standby diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry.bat b/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry.bat deleted file mode 100755 index a5580e19ea..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/bin/registry.bat +++ /dev/null @@ -1,31 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem This command is deprecated. -Rem Use jonas start -standby instead. -jonas start -standby diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/carol.properties b/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/carol.properties deleted file mode 100644 index 7f757f4caf..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/carol.properties +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (C) 2002-2007 ObjectWeb -# -# CAROL: Common Architecture for RMI ObjectWeb Layer -# -# This library is developed inside the ObjectWeb Consortium, -# http://www.ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -------------------------------------------------------------------------- -# $Id$ -# -------------------------------------------------------------------------- - -# jonas rmi activation (iiop, irmi, jrmp, lmi) -carol.protocols=jrmp - -# RMI IRMI URL -carol.irmi.url=rmi://localhost:1098 - -# RMI JRMP URL -carol.jrmp.url=rmi://localhost:1099 - -# RMI IIOP URL -carol.iiop.url=iiop://localhost:2001 - -# RMI LMI URL (no listening port) -carol.lmi.url=rmi://localhost:0 - - -###################################################################### -# Advanced Configuration for IRMI -###################################################################### -# Exported objects will listen on this port for remote method -# invocations. -#A value of 0 will cause a random port to be selected. -# This is the default value. -# Warning : if the port is set (not 0) with the value 'n', be aware that -# the port 'n + 1' will be used by the JMX server. -# So, for the firewall configuration, you have to open the port numbers 'n' -# and 'n+1'. -carol.irmi.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.irmi.url property) -# Use all interfaces available [default configuration = false] -carol.irmi.interfaces.bind.single=false - -###################################################################### -# Advanced Configuration for JRMP -###################################################################### -# If true, local call with jrmp are optimized. If you get "ClassCastException -# with 2 beans in different jars, you should set it at "false". -carol.jvm.rmi.local.call=false - -# If true a local Naming context is used (to be used only with a collocated registry) -carol.jvm.rmi.local.registry=true - -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.jrmp.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.jrmp.url property) -# Use all interfaces available [default configuration = false] -carol.jrmp.interfaces.bind.single=false - - -###################################################################### -# Advanced Configuration for IIOP -###################################################################### -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.iiop.server.port=0 - -# The value of this port is used to set the SSL port of the objects listener. -# Note that this port musn't not be set to 0 as it is used for CsiV2. -# but this port is used only if SSL mode is enable. -# So by default, there is no listener on this port -# [default configuration = not used] -carol.iiop.server.sslport=2003 - -# Delegate used by JOnAS for rmi-iiop protocol -carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.registry.carol.delegate.JacORBPRODelegate - -###################################################################### -# Advanced JNDI Configuration -###################################################################### -carol.jndi.java.naming.factory.url.pkgs=org.ow2.jonas.lib.naming diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/jacorb.properties b/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/jacorb.properties deleted file mode 100644 index e3e2f9d1e5..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/jonas-resources/conf/jacorb.properties +++ /dev/null @@ -1,799 +0,0 @@ -## -## JacORB configuration options -## - -######################################## -# # -# Initial references configuration # -# # -######################################## - -# -# URLs where IORs are stored (used in orb.resolve_initial_service()) -# DO EDIT these! (Only those that you are planning to use, -# of course ;-). -# -# The ORBInitRef references are created on ORB startup time. In the -# cases of the services themselves, this may lead to exceptions being -# displayed (because the services aren't up yet). These exceptions -# are handled properly and cause no harm! - -#ORBInitRef.NameService=corbaloc::160.45.110.41:38693/StandardNS/NameServer-POA/_root -#ORBInitRef.NameService=file:/c:/NS_Ref -#ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref -#ORBInitRef.TradingService=http://www.x.y.z/~user/TraderRef -#ORBInitRef.InterfaceRepository=file:/c:/IR_Ref - -######################################## -# # -# Export of corbaloc IORs # -# # -######################################## - -# allow for more readable corbaloc URLs by mapping the -# actual object key to an arbitrary string. The mapping -# below would permit clients of a name service to -# access it using corbaloc::ipaddress:portnum/NameService -# Note: it is NOT necessary to define this property for -# the name service here because this is done already in the -# code of the ns implementation. -# This mapping can be altered programatically by the proprietary -# function ORB::addObjectKey(NameService, file:/home/rnc/NameSingleton.ior) -# -# The property also accepts the following mappings: -# IOR, resource, jndi, URL (e.g. file, http) -# examples: -# jacorb.orb.objectKeyMap.NameService=StandardNS/NameServer-POA/_root -# jacorb.orb.objectKeyMap.NameService=file:/home/rnc/NameSingleton.ior - -################################## -# # -# ORB version number output # -# # -################################## - -# if on, the ORB's version number and a copyright statement is printed -# any time the ORB is initialized -jacorb.orb.print_version=on - -########################### -# # -# Logging Configuration # -# # -########################### - -# JacORB writes logging information through SLF4J, which passes it to an -# arbitrary logging backend system, by default JDK logging. JacORB does -# not attempt to configure the backend system, that is left to the user. -# The two properties below are only retained to ease upgrading from -# previous JacORB versions. If any of these properties is defined, and -# JDK logging is in use, then JDK logging is configured by JacORB according -# to these properties. For a real configuration, see the file -# logging_properties.template. - -# log levels: -# -# 0 = no logging (OFF) -# 1 = errors (SEVERE) -# 2 = warnings (WARNING) -# 3 = informational messages (INFO) -# 4 = debug-level output (FINE) -jacorb.log.default.verbosity=1 - -# where does output go? Terminal is default -#jacorb.logfile=LOGFILEPATH - -# append to existing logfile? This property is only used if -# jacorb.logfile is defined. -#jacorb.logfile.append=false - -# hexdump outgoing messages -jacorb.debug.dump_outgoing_messages=off - -# hexdump incoming messages -jacorb.debug.dump_incoming_messages=off - -################################################## -# # -# WARNING: The following properties should # -# only be edited by the expert user. They # -# can be left untouched in most cases! # -# # -################################################## - - - -################################ -# # -# Basic ORB Configuration # -# # -################################ - -# the GIOP minor version number to use for newly created IORs -jacorb.giop_minor_version=2 - -# number of retries if connection cannot directly be established -jacorb.retries=1 - -# how many msecs. do we wait between retries -jacorb.retry_interval=500 - -# log2 of maximum buffer size managed by the internal -# buffer manager. -# -# This is NOT the maximum buffer size that -# can be used, but just the largest size of buffers that -# will be kept and managed. This value will be added to -# an internal constant of 5, so the real value in bytes -# is 2**(5+maxManagedBufSize-1). You only need to increase this -# value if you are dealing with LOTS of LARGE data structures. -# You may decrease it to make the buffer manager release large -# buffers immediately rather than keeping them for later -# reuse. -jacorb.maxManagedBufSize=18 - -# If this value is 0 an extra unlimited size buffer cache is created -# for the CDROutputStreams. If this value is > 0 then the cache will -# be purged every x msecs. If this value is -1 no caching of these -# buffers will take place. This will reduce memory footprint at the -# cost of decreased performance handling large data structures. -# This value defaults to 0 if not set. -#jacorb.bufferManagerMaxFlush=-1 - -# Normally, a jacorb server will close the TCP/IP connection right -# after sending a CloseConnection message. However, it may -# occasionally happen that the client sends a message into the closed -# connection because it hasn't handled the CloseConnection yet. To -# avoid this situation, closing of the TCP/IP connection can be delayed. -#jacorb.connection.delay_close=on -#jacorb.connection.timeout_after_closeconnection=20000 - -# Initial timeout for establishing a connection. -jacorb.connection.client.connect_timeout=90000 - -# Wait the specified number of msecs for a reply to a request. If -# exceeded, a org.omg.CORBA.TIMEOUT exception will be thrown -#jacorb.connection.client.pending_reply_timeout=0 - -# client-side connection idle timeout, set to a non-zero value to close the -# connection after so many msecs. Only connections that don't have pending -# messages are closed, unless -# jacorb.connection.client.timeout_ignores_pending_messages is turned on. -#jacorb.connection.client.idle_timeout=0 - -# shall the orb ignore pending messages when a connection idle timeout is -# detected? If "on", the connection is closed regardless of any pending -# messages, and all pending messages are cancelled (resulting in a -# COMM_FAILURE, unless jacorb.connection.client.retry_on_failure is turned -# on). Default is "off" -#jacorb.connection.client.timeout_ignores_pending_messages=off - -# whenever a network failure is detected, the orb can either -# (infinitely) retry all pending requests, or propagate a COMM_FAILURE -# back into the client code. Default is "off", i.e. throw a -# COMM_FAILURE. Note that this should only be used with idempotent operations -# because the client side orb has no way of knowing the processing state of -# the lost request on the server. -#jacorb.connection.client.retry_on_failure=off - -# max time (msecs) a server keeps a connection open if nothing happens -#jacorb.connection.server.timeout=10000 - -# because JacORB uses blocking network IO, it assigns a thread to each -# connection to listen and read messages. Threads are taken from a thread pool -# that can be configured with these following properties. max_receptor_threads -# is equal to the number of connections that can be serviced -# simultaneously. When all threads are in use, new connections can still be -# opened or accepted, but will not be listened on. -#jacorb.connection.client.max_idle_receptor_threads=5 -#jacorb.connection.client.max_receptor_threads=1000 -#jacorb.connection.server.max_idle_receptor_threads=5 -#jacorb.connection.server.max_receptor_threads=1000 - -# Max no of accepted connections on the server. Only effective in conjunction -# with the next four properties. Please see section 15.2 "Connection -# Management" in the ProgrammingGuide -#jacorb.connection.max_server_connections= - -# The class name of the SelectionStrategy class -#jacorb.connection.selection_strategy_class= - -# The class name of the StatisticsProvider class -#jacorb.connection.statistics_provider_class= - -# The number of msecs that are waited until the next attempt to find -# an idle connection is made (i.e. do not continuously spin) -#jacorb.connection.wait_for_idle_interval=500 - -# Sets keep-alive on server sockets. If the OS keepalive detects a TCP/IP -# connection to be broken, the effect is the same as if the TCP/IP connection -# has been closed gracefully. -#jacorb.connection.server.keepalive=off - -# Sets keep-alive on client sockets. If the OS keepalive detects a TCP/IP -# connection to be broken, the effect is the same as if the TCP/IP connection -# has been closed gracefully. All pending replies will receive a -# COMM_FAILURE. -#jacorb.connection.client.keepalive=off - -#jacorb.reference_caching=off - -# Sets a timeout on the (SSL) server socket. This is a workaround for JDK 1.3 -# on linux where a thread blocked on accept() isn't notified when closing that -# socket. See Java bug #4344135. NOTE: This is only useful in conjunction with -# the SI&C SSL socket factories. -#jacorb.listener.server_socket_timeout=0 - -# -# The following property specifies the class which is used for -# reference caching. WeakHashtable uses WeakReferences, so entries -# get gc'ed if only the Hashtable has a reference to them. This -# is useful if you have many references to short-living non-persistent -# CORBA objects. It is only available for java 1.2 and above. -# -# On the other hand the standard Hashtable keeps the references until -# they are explicitely deleted by calling _release(). This is useful -# for persistent and long-living CORBA objects. -# -#jacorb.hashtable_class=org.jacorb.util.WeakHashtable -# -jacorb.hashtable_class=java.util.Hashtable - -# use GIOP 1.2 byte order markers (since CORBA 2.4-5) -jacorb.use_bom=off - -# add additional IIOP 1.0 profiles even if we are using IIOP 1.2 -jacorb.giop.add_1_0_profiles=off - -# Use DNS names in IORs -jacorb.dns.enable=off - -# Compact Typecodes (off/on) -jacorb.compactTypecodes=off - -# Cache typecode on read -jacorb.cacheTypecodes=off - -# Cache poa names -jacorb.cachePoaNames=off - -# Control if errors caused by an ORBInitializer (thrown exceptions or failure -# to build class) will make ORB.init() fail or not. On failure, a -# org.omg.CORBA.INITIALIZE exception will be thrown. -#jacorb.orb_initializer.fail_on_error=off - -# A listener to receive a callback when the acceptor thread caught an -# exception. The default JacORB implementation will shutdown the ORB on all -# Errors and SSLExceptions (e.g. but not on IOExceptions) -jacorb.acceptor_exception_listener=org.jacorb.orb.listener.DefaultAcceptorExceptionListener - -# If set to on this results in extra information being added to the -# thread name i.e. connection endpoints and date/time thread started -# processing - Server_TCP_IP_Transport only. -jacorb.enhanced_thread_name=off - -# If this is set to a class implementing org.jacorb.orb.IORMutator -# then this will be used to mutate incoming/outgoing Objects -#jacorb.iormutator= - -# If true enable codesets. If false, this will ignore all codesetComponentInfo profiles -# within an IOR and also disable explicit marshalling with codesets (re Strings). -# jacorb.codeset=off - -# Overrides the detection from the local environment for the codeset used to -# transmit characters. Note that this property is only effective once per JVM. -# jacorb.native_char_codeset=ISO8859_1 - -# Overrides the detection from the local environment for the codeset used to -# transmit wide characters. ote that this property is only effective once per JVM. -# jacorb.native_wchar_codeset=UTF16 - - -########################################### -# # -# Interoperability # -# # -########################################### - -# Turn off indirection encoding for repeated typecodes. This fixes -# interoperability with certain broken ORB's eg. Orbix2000 -jacorb.interop.indirection_encoding_disable=off - -# Iona Comet CORBA/COM bridge can incorrectly encode buffer lengths. -# Enabling this property adds additional length checking and adjustment -# for interoperability with Comet. -jacorb.interop.comet=off - -# Some ORBs (e.g. VisiBroker, ORBacus) do not set a byte value of 1 -# as a CDR encoded boolean true value. Enabling this property interprets -# any non zero CDR encoded boolean value as true. -jacorb.interop.lax_boolean_encoding=off - -# Control whether the method create_abstract_interface_tc performs -# a validity check on the name parameter or not. Turning this check -# off circumvents a bug in Sun's implementation of javax.rmi.CORBA.ValueHander, -# which occasionally passes an invalid name (an empty string) to -# ORBSingleton.create_abstract_interface_tc. If you are using RMI valuetypes, -# you should turn this property off. -jacorb.interop.strict_check_on_tc_creation=off - -# Custom-marshalled RMI valuetypes should be encoded as chunks, but some -# ORBs are not able to decode chunked values. Disable this property for -# interoperability with the ORB in Sun's JDK 1.4.2. -jacorb.interop.chunk_custom_rmi_valuetypes=off - -# RMI/IIOP data encoded as chunks should contain the length -# of the chunk. the sun orb does not send the length -# always. -# enable this property for interoperability with the Sun ORB. -# http://lists.spline.inf.fu-berlin.de/mailman/htdig/jacorb-developer/2006-May/008251.html -jacorb.interop.sun=on - -########################################### -# # -# Socket Factories # -# # -########################################### - -# A factory design pattern is used for the creation of sockets and server -# sockets. -# The jacorb.net.socket_factory property can be used to configure -# a socket factory that must implement the operations defined in the -# interface org.jacorb.orb.factory.SocketFactory. -# The jacorb.net.server_socket_factory property can be used to configure a -# server socket factory that must implement the operations defined in the -# interface org.jacorb.orb.factory.ServerSocketFactory. -# -#jacorb.net.socket_factory=org.jacorb.orb.factory.DefaultSocketFactory -#jacorb.net.server_socket_factory=org.jacorb.orb.factory.DefaultServerSocketFactory -#jacorb.net.socket_factory=org.jacorb.orb.factory.PortRangeSocketFactory -#jacorb.net.server_socket_factory=org.jacorb.orb.factory.PortRangeServerSocketFactory -# -# Additional socket factores are supported that allow for the configuration -# of maximum and minimum port numbers that can be used. This can be used to -# enable firewall traversal via a fixed port range. To use these socket factories -# configure one or both of the following property pairs. The first property pair -# configures the client socket factory and the second pair the server socket -# factory. -# -#jacorb.net.socket_factory.port.min -#jacorb.net.socket_factory.port.max -#jacorb.net.server_socket_factory.port.min -#jacorb.net.server_socket_factory.port.max - -# Listeners -# The TCP listener listens for TCP socket connections and should be implemented -# as defined by org.jacorb.orb.listener.TCPConnectionListener -jacorb.net.tcp_listener= - -########################################### -# # -# BiDirectional GIOP # -# # -########################################### - -# uncomment this initializer if you want to use BiDirectional GIOP - -#org.omg.PortableInterceptor.ORBInitializerClass.bidir_init=org.jacorb.orb.giop.BiDirConnectionInitializer - - -########################################### -# # -# Proxy address in IOR # -# # -########################################### - -# -# Some times it is necessary to present an endpoint alias in an IOR -# to allow clients outside a firewall to get a connection to a server -# that is behind a NAT'ing firewall. -# -# WARNING: this is just "dumb" replacing, so you -# have to take care of your configuration! -# - -# The general form of this address is ://
    -# The protocol key in the address must match the protocol(s) used by -# the server. See the section on configuring Transport Factories for -# information on loading specific protocols. -#jacorb.ior_proxy_address=iiop://1.2.3.4:4711 - -# Deprecated IIOP-specific form: -# with these two properties it is possible to -# tell the ORB what IP/port IORs should contain, -# if the ServerSockets IP/port can't be used -# (e.g. for traffic through a firewall). -# -# WARNING: this is just "dumb" replacing, so you -# have to take care of your configuration! -# - -#jacorb.ior_proxy_host=1.2.3.4 -#jacorb.ior_proxy_port=4711 - -########################################### -# # -# The Object Adapter Internet Address # -# # -########################################### - -# IP address on multi-homed host (this gets encoded in -# object references). NOTE: Adresses like 127.0.0.X -# will only be accessible from the same machine! -#OAIAddr=1.2.3.4 -#OAPort=4711 - -# A new protocol-independent configuration is available -# for use to configure an explicit endpoint using IIOP or -# other protocols. -#OAAddress=iiop://1.2.3.4:4711 - -# The following option allows you to add further alternate -# addresses to your IORs using TAG_ALTERNATE_IIOP_ADDRESS. -# The value is either a comma-separated list of host:port addresses, -# or the keyword "auto", which means that JacORB should add -# the addresses of all known network interfaces on this machine. -#jacorb.iiop.alternate_addresses = 1.2.3.4:12,1.2.3.5:12 - -############################ -# # -# Default Interceptors # -# Please leave them in! # -# # -############################ -org.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer - - - -############################################### -# # -# Implementation Repository Configuration # -# # -############################################### -# Switch off to avoid contacting the ImR on every server start-up -jacorb.use_imr=off - -# Switch off if you don't want to write the ImR address into server IORs -# (ignored if jacorb.use_imr=off) -jacorb.use_imr_endpoint=on - -# if set to "on", servers that don't already have an entry on their -# first call to the imr, will get automatically registered. Otherwise, -# an UnknownServer exception is thrown. -jacorb.imr.allow_auto_register=off - -# if set to "on", the imr will try to "ping" every object reference, -# that it is going to return. If the reference is not alive, TRANSIENT -# is thrown. -jacorb.imr.check_object_liveness=off - -ORBInitRef.ImplementationRepository=http://www.x.y.z/~user/ImR_Ref - -jacorb.imr.table_file=Z:\table.dat -jacorb.imr.backup_file=z:\backup.dat -jacorb.imr.ior_file=/home/bwana/brose/public_html/ImR_Ref -# Time (msecs) that the implementation will wait for a started server to register. -jacorb.imr.timeout= - -# Host for ImR endpoint -jacorb.imr.endpoint_host= -# Port number for IMR endpoint -jacorb.imr.endpoint_port_number= - -# how many millisecs should the imr wait, until a connection from an -# application client is terminated. Default is 2000. -jacorb.imr.connection_timeout=2000 - -# the implementation name, should be set to a different -# name in the code of persistent servers -# jacorb.implname=StandardImplName - -# -# This is supposed to be a generic startup string for everything -# that calls Runtime.exec(). Might be replaced by jaco[.bat]. -# -jacorb.java_exec=java -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton - -# with these two properties it is possible to -# tell the ORB what IP / hostname and port the IMR IOR and IMRified server IORs should -# contain, if the ServerSockets IP/port can't be used -# (e.g. for traffic through a firewall). -# -# WARNING: this is just "dumb" replacement, so you -# have to take care of your configuration! -# -#jacorb.imr.ior_proxy_host=1.2.3.4 -#jacorb.imr.ior_proxy_port=4711 - -# protocol-independent form for assigning imr proxy endpoint -#jacorb.imr.ior_proxy_address=iiop://1.2.3.4:4711 - -######################### -# # -# SSL Configuration # -# # -######################### - -# -# The port number used by SSL, will be dynmically assigned -# by default -# - -#OASSLPort=4711 - -# This interceptor must be set if programs need access to -# certificates using the CORBA Security API, SSL works also -# without this interceptor - -#org.omg.PortableInterceptor.ORBInitializerClass.ForwardInit=org.jacorb.security.ssl.SecurityServiceInitializer - -# qualified classname of access decision object -jacorb.security.access_decision=org.jacorb.security.level2.AccessDecisionImpl - -# list of qualified classnames of principal authenticator objects, -# separated by commas (no whitespaces!). The first entry (that can -# be successfully created) will be available through the -# principal_authenticator property. -jacorb.security.principal_authenticator=org.jacorb.security.level2.PrincipalAuthenticatorImpl - -# the qualified classname of the ssl socket factory class -jacorb.ssl.socket_factory=org.jacorb.security.ssl.sun_jsse.SSLSocketFactory - -# the qualified classname of the ssl server socket factory class -jacorb.ssl.server_socket_factory=org.jacorb.security.ssl.sun_jsse.SSLServerSocketFactory - -# IIOP/SSL parameters (numbers are hex values, without the leading "0x"): -# NoProtection = 1 -# EstablishTrustInClient = 40 -# EstablishTrustInTarget = 20 -# mutual authentication = 60 -# please see the programming guide for more explanation - -jacorb.security.support_ssl=off - -jacorb.security.ssl.client.supported_options=60 -jacorb.security.ssl.client.required_options=0 - -jacorb.security.ssl.server.supported_options=60 -jacorb.security.ssl.server.required_options=0 - -# -# If set, the following two values will be placed in the IOR, if -# "corbaloc:ssliop" ssliop. -# -# If not set, only EstablishTrustInTarget is used for both supported -# and required options. EstablishTrustInClient is not set, and the -# rest of the Association Options aren't currently used anyway. -#jacorb.security.ssl.corbaloc_ssliop.supported_options=0 -#jacorb.security.ssl.corbaloc_ssliop.required_options=0 - -# The name and location of the keystore. This may be absolute or -# relative to the home directory, or a file retrievable through the -# classloader. -# -# NOTE (for Sun JSSE users): The "javax.net.ssl.trustStore[Password]" -# properties don't seem to take effect, so you may want to add trusted -# certificates to "normal" keystores. In this case, please set the -# property "jacorb.security.jsse.trustees_from_ks"is to "on", so trusted -# certificates are taken from the keystore instead of a dedicated -# truststore. -jacorb.security.keystore= -jacorb.security.keystore_password= - -# -# Sun JSSE specific settings -# -# Use the keystore to take trusted certs from. -jacorb.security.jsse.trustees_from_ks=on - -# A comma-separated (no whitespaces!) list of cipher suite names. See -# the JSSE docs on how to obtain the correct cipher suite strings -jacorb.security.ssl.server.cipher_suites= -jacorb.security.ssl.client.cipher_suites= - -# A comma seperated list of the names of the protocols to be set enabled on -# the SSL socket. See the JSSE documentation for -# javax.net.ssl.SSLSocket#setEnabledProtocols() -# NOTE: Does only apply to jdk1.4 and above -#jacorb.security.ssl.client.protocols= -#jacorb.security.ssl.server.protocols= - -# A user defined javax.net.ssl.TrustManager implemementation class name. -# Will be used to intialise the SSLContext. See JSSE docs for javax.net.ssl.SSLContext#init(). -# Must be capable of instantiation via a no arg constructor. -#jacorb.security.ssl.client.trust_manager=my.trust.Manager -#jacorb.security.ssl.server.trust_manager=my.trust.Manager - -# Class name for a class that implements JacORB JSRandom interface. This -# will be used to get a SecureRandom. -jacorb.security.randomClassPlugin= - -# Listeners -# The SSL listener listens for SSL sessions and should be implemented as defined -# by org.jacorb.orb.listener.SSLSessionListener -jacorb.security.ssl.ssl_listener= - -######################### -# # -# POA Configuration # -# # -######################### - -# displays a GUI monitoring tool for servers -jacorb.poa.monitoring=off - -# POA log levels: -# 0 = fatal errors only = "almost off" (FATAL ERRORS) -# 1 = non-fatal errors and exceptions (ERROR) -# 2 = important messages (WARN) -# 3 = informational messages and exceptions (INFO) -# 4 = debug-level output (DEBUG) (may confuse the unaware user :-) -jacorb.poa.log.verbosity=3 - -# thread pool configuration for request processing -jacorb.poa.thread_pool_max=20 -jacorb.poa.thread_pool_min=5 - -# If set then use shared thread pool amongst all the POAs. Only used with -# ORB_CTRL_MODEL. -# jacorb.poa.thread_pool_shared = off - -# if set, request processing threads in thePOA -# will run at this priority. If not set or invalid, -# MAX_PRIORITY will be used. -#jacorb.poa.thread_priority= - -# Properties controlling the POA's request queue. If queue_wait is off, -# then if there are more than queue_max requests in the queue, the -# client gets TRANSIENT exceptions for any requests. If queue_wait is on, -# then the call blocks at the server side until no more than queue_min -# requests are left in the queue. The new request is then delivered as usual. -jacorb.poa.queue_wait=off -jacorb.poa.queue_max=100 -jacorb.poa.queue_min=10 - -# Set this to on for server-side checking of expired ReplyEndTimePolicy. -# (This also applies to RelativeRoundtripTimeoutPolicy.) When this is on, -# the clocks of the server and client machine need to be synchronized. -#jacorb.poa.check_reply_end_time=off - - -################################### -# # -# Transport Layer Configuration # -# # -################################### - -# Names of the factories classes for all installed transport plug-ins -# (comma-separated list). - -#jacorb.transport.factories=org.jacorb.orb.iiop.IIOPFactories - -# ProfileId tags of all installed transports that should actually -# listen on the server side. This is a comma-separated list of numbers, -# each number must correspond to one ProfileId tag from a factory in -# jacorb.transport.factories. In IORs produced by the server, the transport -# profiles will appear in the order indicated by this list. - -#jacorb.transport.server.listeners=0 - -# Name of a class that selects the transport profile to use on the -# client side. - -#jacorb.transport.client.selector=org.jacorb.orb.DefaultProfileSelector - - -################################## -# # -# Name Service Configuration # -# # -################################## - -# log levels: -# 0 = fatal errors only = "almost off" (FATAL ERRORS) -# 1 = non-fatal errors and exceptions (ERROR) -# 2 = important messages (WARN) -# 3 = informational messages and exceptions (INFO) -# 4 = debug-level output (DEBUG) (may confuse the unaware user :-) - -jacorb.naming.log.verbosity=3 - -# -# name of the logger factory. Implement your own subclass of -# org.jacorb.util.LoggerFactory and enter class name here to -# customize logging behavior. Built-in default is org.jacorb.util.LogKitLoggerFactory -#jacorb.log.loggerFactory= - -# Whether non active references are purged from name service -# when list operation is invoked. - -jacorb.naming.purge=on - -# Whether resolve should return references without trying to -# ping them to see if they're still alive first. - -jacorb.naming.noping=on - -# The file where the name server drops its IOR -#jacorb.naming.ior_filename=c:/NS_Ref - - -######################################################## -# # -# Notification Service configuration, please see # -# the JacORB ProgrammingGuide for a explanation # -# # -######################################################## - -jacorb.notification.filter.thread_pool_size = 2 - -jacorb.notification.proxyconsumer.thread_pool_size = 2 - -jacorb.notification.proxysupplier.thread_pool_size = 4 - -jacorb.notification.supplier.poll_intervall = 1000 - -jacorb.notification.max_batch_size = 1 - -jacorb.notification.max_events_per_consumer = 100 - -jacorb.notification.order_policy = PriorityOrder - -jacorb.notification.discard_policy = PriorityOrder - -jacorb.notification.consumer.backout_interval = 5000 - -jacorb.notification.consumer.error_threshold = 3 - -# valid values: ThreadPool, ThreadPerProxy -jacorb.notification.proxysupplier.threadpolicy = ThreadPool - -jacorb.notification.default_filter_factory = builtin - -# jacorb.notification.supplier.max_number = 10 - -# jacorb.notification.start_time_supported = 10 - -jacorb.notification.stop_time_supported = on - -jacorb.notification.proxy.destroy_causes_disconnect = on - -# Notification Service log levels: -org.jacorb.notification.log.verbosity = 3 - -######################################## -# # -# SAS configuration # -# # -######################################## - -jacorb.SAS.log.verbosity=INFO -jacorb.SAS.CSS.log.verbosity=INFO -jacorb.SAS.TSS.log.verbosity=INFO - -# This option defines the specific SAS context generator/validator -# Currently supported contexts include: -# NullContext - Sends a NULL SAS Context -# GssUpContext - Uses GSSUP security -# KerberosContext - uses Kerberos security -# At least one context must be selected for SAS support -#jacorb.security.sas.contextClass=org.jacorb.security.sas.NullContext -#jacorb.security.sas.contextClass=org.jacorb.security.sas.GssUpContext -#jacorb.security.sas.contextClass=org.jacorb.security.sas.KerberosContext - -# This initializer installs the SAS interceptors -# Comment out this line if you do not want SAS support -#org.omg.PortableInterceptor.ORBInitializerClass.SAS=org.jacorb.security.sas.SASInitializer - -# This option is used for GSSUP security and sets up the GSS Provider -# Comment out this line if you are not using GSS UP authentication -#org.omg.PortableInterceptor.ORBInitializerClass.GSSUPProvider=org.jacorb.security.sas.GSSUPProviderInitializer - -######################################## -# # -# Custom configuration # -# # -######################################## - - -# any other custom properties can be added here. diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/resources/META-INF/jonas-carol-registry-core.bnd b/jonas/modules/services/jonas-carol-registry/core/src/main/resources/META-INF/jonas-carol-registry-core.bnd deleted file mode 100644 index e1faf1af98..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/resources/META-INF/jonas-carol-registry-core.bnd +++ /dev/null @@ -1,87 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export the Carol packages --exportcontents org.ow2.carol.rmi.exception,\ - org.ow2.carol.util.configuration,\ - org.ow2.carol.util.csiv2,\ - org.ow2.carol.util.csiv2.struct,\ - org.ow2.carol.util.csiv2.gss,\ - org.ow2.carol.jndi.ns,\ - org.ow2.carol.jndi.intercept.*,\ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.wrapping,\ - org.ow2.carol.rmi.jrmp.server,\ - org.ow2.carol.rmi.multi,\ - org.ow2.carol.rmi.util,\ - org.objectweb.carol.* - -# Rest of Carol classes are private -Private-Package org.ow2.jonas.registry.carol;-split-package:=merge-first,\ - org.ow2.jonas.registry.carol.osgi - -Bundle-Activator org.ow2.jonas.registry.carol.osgi.ConfigurationActivator - -# must import jotm for the stubs that must be registered in jndi. -DynamicImport-Package javax.ejb,\ - javax.ejb.spi,\ - javax.management.j2ee,\ - org.objectweb.jotm,\ - org.objectweb.jotm.jta.rmi,\ - org.ow2.cmi.admin,\ - org.ow2.cmi.config,\ - org.ow2.cmi.controller.common,\ - org.ow2.cmi.controller.client,\ - org.ow2.cmi.controller.factory,\ - org.ow2.cmi.controller.factory.client,\ - org.ow2.cmi.controller.factory.server,\ - org.ow2.cmi.jndi.context,\ - org.ow2.cmi.*,\ - org.ow2.jonas.dbm.internal.cm.naming,\ - org.ow2.easybeans.proxy.factory,\ - org.ow2.easybeans.rpc.rmi.server,\ - org.ow2.jonas.lib.ejb21,\ - org.ow2.jonas.lib.ejb21.ha.interceptors.jrmp,\ - org.ow2.jonas.lib.security.auth,\ - org.ow2.jonas.lib.security.context,\ - org.ow2.jonas.mail.internal.factory,\ - org.ow2.jonas.resource.internal.naming,\ - org.ow2.jonas.security.*,\ - org.ow2.jonas.tm.jotm,\ - org.objectweb.joram.client.jms.admin,\ - org.ow2.util.ee.deploy.api.deployable, \ - org.ow2.carol.irmi, \ - org.ow2.easybeans.component.jdbcpool, \ - org.ow2.util.auditreport.impl,\ - org.ow2.easybeans.component.audit.rmi.interceptor.jrmp, \ - org.ow2.easybeans.component.remotejndiresolver - - -Export-Package org.ow2.jonas.registry.carol.delegate,\ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi - -# Directly include the carol jars 'as is' -Embed-Dependency carol;inline=true, \ - carol-iiop-delegate;inline=true - diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-carol-registry/core/src/main/resources/metadata.xml deleted file mode 100644 index 0cf9543ad4..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/core/src/main/templates/jonas-registry.properties.template b/jonas/modules/services/jonas-carol-registry/core/src/main/templates/jonas-registry.properties.template deleted file mode 100644 index f200df545d..0000000000 --- a/jonas/modules/services/jonas-carol-registry/core/src/main/templates/jonas-registry.properties.template +++ /dev/null @@ -1,13 +0,0 @@ -# -###################### JOnAS Registry service configuration -# -jonas.services registry -# Set the name of the implementation class of the Registry service -jonas.service.registry.class org.ow2.jonas.registry.carol.CarolRegistryService - -# Set the Registry launching mode -# If set to 'automatic', the registry is launched in the same JVM as Application Server, -# if it's not already started. -# If set to 'collocated', the registry is launched in the same JVM as Application Server -# If set to 'remote', the registry has to be launched before in a separate JVM -jonas.service.registry.mode collocated \ No newline at end of file diff --git a/jonas/modules/services/jonas-carol-registry/pom.xml b/jonas/modules/services/jonas-carol-registry/pom.xml deleted file mode 100644 index f7dc0256ed..0000000000 --- a/jonas/modules/services/jonas-carol-registry/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-carol-registry - pom - JOnAS :: Services :: Carol Registry - - core - ant - - diff --git a/jonas/modules/services/jonas-configadmin/core/pom.xml b/jonas/modules/services/jonas-configadmin/core/pom.xml deleted file mode 100644 index 55a29e421a..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/pom.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - jonas-configadmin - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - - jonas-configadmin-core - bundle - JOnAS :: Services :: ConfigAdmin Deployer :: Core - - - - org.ow2.bundles - util-plan-deployer - - - org.ow2.bundles - ow2-util-log - - - org.ow2.bundles - ow2-util-file - - - org.ow2.bundles - ow2-util-xml - - - org.osgi - org.osgi.compendium - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - org.hamcrest - hamcrest-all - test - - - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - generate-jaxb-configadmin - - generate - - generate-sources - - src/main/resources/META-INF - org.ow2.jonas.configadmin.internal.model - true - - - - - - - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/AdapterException.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/AdapterException.java deleted file mode 100644 index e140d09b53..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/AdapterException.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin; - -/** - * A {@code AdapterException} is ... - * - * @author Guillaume Sauthier - */ -public class AdapterException extends Exception { - public AdapterException(String message) { - super(message); - } - - public AdapterException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/ConfigurationInfo.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/ConfigurationInfo.java deleted file mode 100644 index 19333ee403..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/ConfigurationInfo.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin; - -import java.util.HashMap; -import java.util.Map; - -/** - * A {@code DefaultConfigurationInfo} is ... - * - * @author Guillaume Sauthier - */ -public class ConfigurationInfo { - - private String pid; - private boolean factory; - private Map properties; - - public ConfigurationInfo(String pid) { - this(pid, false); - } - - public ConfigurationInfo(String pid, boolean factory) { - this.pid = pid; - this.factory = factory; - this.properties = new HashMap(); - } - - public String getPid() { - return pid; - } - - public boolean isFactory() { - return factory; - } - - public Map getProperties() { - return properties; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("ConfigurationInfo"); - sb.append("[pid='").append(pid).append('\''); - sb.append(", factory=").append(factory); - sb.append(", properties=").append(properties); - sb.append(']'); - return sb.toString(); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapter.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapter.java deleted file mode 100644 index 91fa308ad2..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapter.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin; - -import java.util.Set; - -import org.w3c.dom.Element; - -/** - * A {@code XmlConfigurationAdapter} is responsible to convert a - * DOM Element into one or multiple ConfigurationInfo (equivalent to the - * ConfigAdmin Configuration object). - * - * @author Guillaume Sauthier - */ -public interface XmlConfigurationAdapter { - - /** - * Convert the given Node into one or more ConfigurationInfo instance(s). - * @param node DOM Element to be converted - * @return Adapted ConfigurationInfo(s) - * @throws AdapterException if the Element cannot be converted into ConfigurationInfo(s) - */ - Set convert(Element node) throws AdapterException; -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapterRegistry.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapterRegistry.java deleted file mode 100644 index 98b2f187a4..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/XmlConfigurationAdapterRegistry.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin; - -/** - * A {@code XmlConfigurationAdapterRegistry} is responsible to provide - * adapters for a given namespace URI. - * - * @author Guillaume Sauthier - */ -public interface XmlConfigurationAdapterRegistry { - - /** - * Returns the adapter handling the given Xml Element local-name. - * @param name Xml Element local-name (not prefixed) - * @return the associated adapter or {@literal null} if none found - */ - XmlConfigurationAdapter getAdapter(String name); -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryEvent.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryEvent.java deleted file mode 100644 index 23f282559a..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryEvent.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; - -/** - * An {@code AdapterRegistryEvent} is fired when a {@code XmlConfigurationAdapterRegistry} - * is being registered or unregistered. - * - * @author Guillaume Sauthier - */ -public class AdapterRegistryEvent { - - /** - * Registry being registered/unregistered. - */ - private XmlConfigurationAdapterRegistry source; - - /** - * Associated namespace URI. - */ - private String namespace; - - public AdapterRegistryEvent(XmlConfigurationAdapterRegistry source, String namespace) { - this.source = source; - this.namespace = namespace; - } - - public XmlConfigurationAdapterRegistry getSource() { - return source; - } - - public String getNamespace() { - return namespace; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryListener.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryListener.java deleted file mode 100644 index c54862aba4..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/AdapterRegistryListener.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -/** - * An {@code AdapterRegistryListener} is reacting when an - * {@code XmlConfigurationAdapterRegistry} is being registered or unregistered. - * - * @author Guillaume Sauthier - */ -public interface AdapterRegistryListener { - - /** - * Called when a {@code XmlConfigurationAdapterRegistry} has been registered. - * @param event contains relevant references - */ - void onAdapterRegistryArrival(AdapterRegistryEvent event); - - /** - * Called when a {@code XmlConfigurationAdapterRegistry} has been unregistered. - * @param event contains relevant references - */ - void onAdapterRegistryRemoval(AdapterRegistryEvent event); -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployable.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployable.java deleted file mode 100644 index a1798274ae..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployable.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configadmin.internal; - -import java.util.List; - -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.ee.deploy.impl.deployable.AbsDeployable; -import org.ow2.util.plan.deploy.deployable.api.FileDeployable; - -/** - * A {@code ConfigAdminDeployable} represents an XML files containing ConfigAdmin Configurations. - * The root DOM Element has the {@literal 'http://jonas.ow2.org/ns/configadmin/1.0'} namespace URI. - *
    - * Example: - *
    - * {@code 
    - *
    - *    
    - *      woooot
    - *      john
    - *      9999
    - *    
    - *
    - *  }
    - * - * @author Guillaume Sauthier - */ -public class ConfigAdminDeployable extends AbsDeployable - implements FileDeployable> { - - /** - * Namespace for config-admin. - */ - public static final String NAMESPACE = "http://jonas.ow2.org/ns/configadmin/1.0"; - - /** - * Items contained in this file (one for each child of the root element). - */ - private List data; - - - /** - * Defines and create a deployable for the given archive. - * - * @param archive the given archive. - */ - public ConfigAdminDeployable(IFileArchive archive) { - super(archive); - } - - - public List getAttachedData() { - return data; - } - - public void setAttachedData(List attachedData) { - this.data = attachedData; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployer.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployer.java deleted file mode 100644 index 505b563586..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployer.java +++ /dev/null @@ -1,450 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configadmin.internal; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.osgi.framework.ServiceReference; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployerList; -import org.ow2.util.file.FileUtils; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.xml.DocumentParser; -import org.ow2.util.xml.DocumentParserException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * A {@code ConfigAdminDeployer} knows how to deploy {@code ConfigAdminDeployable} objects. - * - * @author Guillaume Sauthier - */ -public class ConfigAdminDeployer extends AbsDeployerList implements ConfigurationAssociationListener { - - private static final String CONFIG_ADMIN_DEPLOYABLE = "jonas.configadmin.deployable"; - - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(ConfigAdminDeployer.class); - - /** - * Configuration Admin service - */ - private ConfigurationAdmin configAdmin; - - /** - * Associate a namespace with available registries. - * Multiple registries can support the same namespace. - */ - private Map> registries; - - /** - * List of instances interested in registry bind/unbind. - */ - private List listeners; - - /** - * Currently deployed URLs. - */ - private Map> deployed; - - public void validate() throws Exception { - registries = new Hashtable>(); - listeners = new ArrayList(); - deployed = new HashMap>(); - - Configuration[] configurations = configAdmin.listConfigurations("(" + CONFIG_ADMIN_DEPLOYABLE + "=true)"); - if (configurations != null) { - for (Configuration configuration : configurations) { - configuration.delete(); - } - } - } - - public void invalidate() throws Exception { - List> deployables = new ArrayList>(deployed.values()); - for (IDeployable deployable : deployables) { - undeploy(deployable); - } - } - - /** - * Bind method for the DeployerManager. - * - * @param deployerManager the deployer manager. - */ - public void registerDeployerManager(final IDeployerManager deployerManager) { - deployerManager.register(this); - } - - /** - * Unbind method for the DeployerManager. - * - * @param deployerManager the deployer manager. - */ - public void unregisterDeployerManager(final IDeployerManager deployerManager) { - deployerManager.unregister(this); - } - - /** - * Bind the reference to the ConfigurationAdmin service - * - * @param admin CA service - */ - public void bindConfigurationAdmin(ConfigurationAdmin admin) { - this.configAdmin = admin; - } - - /** - * Bind a reference to a new {@code XmlConfigurationAdapterRegistry}. - * - * @param registry the new registry - * @param reference used to get the {@literal namespace} service attribute - */ - public void bindXmlConfigurationAdapterRegistry(XmlConfigurationAdapterRegistry registry, - ServiceReference reference) { - // Get namespace - String namespace = (String) reference.getProperty("namespace"); - - // Store the registry handle - Map scoped = this.registries.get(namespace); - if (scoped == null) { - scoped = new Hashtable(); - this.registries.put(namespace, scoped); - } - scoped.put(reference, registry); - - firesAdapterRegistryArrival(namespace, registry); - } - - /** - * Unbind a reference to an existing {@code XmlConfigurationAdapterRegistry}. - * - * @param reference reference to the registry service (its key) - */ - public void unbindXmlConfigurationAdapterRegistry(ServiceReference reference) { - - // Get namespace - String namespace = (String) reference.getProperty("namespace"); - - // Remove the registry handle - Map scoped = this.registries.get(namespace); - if (scoped != null) { - XmlConfigurationAdapterRegistry registry = scoped.remove(reference); - firesAdapterRegistryRemoval(namespace, registry); - } - - } - - /** - * Fires an {@code AdapterRegistryEvent} for a new registry arrival. - * - * @param namespace Namespace URI supported by the given registry - * @param registry arrived registry - */ - private void firesAdapterRegistryArrival(String namespace, XmlConfigurationAdapterRegistry registry) { - AdapterRegistryEvent event = new AdapterRegistryEvent(registry, namespace); - for (AdapterRegistryListener listener : listeners) { - listener.onAdapterRegistryArrival(event); - } - } - - /** - * Fires an {@code AdapterRegistryEvent} for a registry removal. - * - * @param namespace Namespace URI supported by the given registry - * @param registry removed registry - */ - private void firesAdapterRegistryRemoval(String namespace, XmlConfigurationAdapterRegistry registry) { - AdapterRegistryEvent event = new AdapterRegistryEvent(registry, namespace); - for (AdapterRegistryListener listener : listeners) { - listener.onAdapterRegistryRemoval(event); - } - } - - public void deploy(IDeployable untyped) throws DeployerException, UnsupportedDeployerException { - ConfigAdminDeployable deployable = ConfigAdminDeployable.class.cast(untyped); - URL url = getUrl(deployable); - - List items = new ArrayList(); - - InputStream is = null; - try { - is = url.openStream(); - - Document doc = null; - try { - doc = DocumentParser.getDocument(is, false, null); - } catch (DocumentParserException e) { - throw new DeployerException("Cannot parse XML " + url, e); - } - - Element rootElement = doc.getDocumentElement(); - - // Iterates on all child nodes - NodeList children = rootElement.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - Node node = children.item(i); - - // Select only Element(s) - if (Node.ELEMENT_NODE == node.getNodeType()) { - items.add(new ConfigurationItem((Element) node)); - } - } - - } catch (IOException e) { - throw new DeployerException("Cannot open " + deployable, e); - } finally { - FileUtils.close(is); - } - - deployable.setAttachedData(items); - int bound = 0; - int failed = 0; - // Process each new ConfigurationItem - for (ConfigurationItem item : items) { - processNewConfigurationItem(item); - - // This Configuration has been adapted - if (item.getConfigurations() != null) { - bound++; - } - - // This Configuration has not been adapted - if (item.isFailed()) { - failed++; - } - } - - logger.info("Deployed {0} Configuration(s) [{1} bound, {2} unbound, {3} failed] for ''{4}''", - items.size(), - bound, - items.size() - bound, - failed, - deployable.getShortName()); - - deployed.put(url.toExternalForm(), untyped); - - } - - private URL getUrl(IDeployable deployable) throws DeployerException { - URL url; - try { - url = deployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get URL of " + deployable, e); - } - return url; - } - - public void undeploy(IDeployable deployable) throws DeployerException { - - URL url = getUrl(deployable); - - logger.info("Undeploying Configurations for ''{0}''", deployable.getShortName()); - - ConfigAdminDeployable cad = ConfigAdminDeployable.class.cast(deployable); - if (cad.getAttachedData() == null) { - // This may happen when using jonas-agent and JMX so lets use the cached one. - cad = ConfigAdminDeployable.class.cast(deployed.get(url.toExternalForm())); - } - if (cad != null && cad.getAttachedData() != null) { - for (ConfigurationItem item : cad.getAttachedData()) { - listeners.remove(item); - item.close(); - } - } - - deployed.remove(url.toExternalForm()); - } - - public boolean isDeployed(IDeployable deployable) throws DeployerException { - String url = getUrl(deployable).toExternalForm(); - return deployed.containsKey(url); - } - - public boolean supports(IDeployable deployable) { - return ConfigAdminDeployable.class.isAssignableFrom(deployable.getClass()); - } - - private void processNewConfigurationItem(ConfigurationItem item) { - - // Hook-up with the item - item.addAssociationListener(this); - this.listeners.add(item); - - // Test inject all registered adapters - for (Map.Entry> entry : registries.entrySet()) { - String namespace = entry.getKey(); - - for (XmlConfigurationAdapterRegistry registry : entry.getValue().values()) { - firesAdapterRegistryArrival(namespace, registry); - } - } - } - - public void onAssociation(ConfigurationAssociationEvent event) { - - // Create & push appropriate Configurations - Set configurations = new HashSet(); - Set info = event.getInfo(); - for (ConfigurationInfo ci : info) { - if (ci.isFactory()) { - configurations.add(createFactoryConfiguration(ci)); - } else { - configurations.add(createConfiguration(ci)); - } - } - // Stores the configurations back into the item - event.getSource().getConfigurations().addAll(configurations); - } - - public void onDissociation(ConfigurationAssociationEvent event) { - ConfigurationItem item = event.getSource(); - for (Configuration configuration : item.getConfigurations()) { - try { - configuration.delete(); - } catch (IOException e) { - // Ignored - // TODO log trace - } - } - item.getConfigurations().clear(); - - // Tries to re-associate the item with remaining Registries - for (Map.Entry> entry : registries.entrySet()) { - String namespace = entry.getKey(); - - for (XmlConfigurationAdapterRegistry registry : entry.getValue().values()) { - AdapterRegistryEvent are = new AdapterRegistryEvent(registry, namespace); - item.onAdapterRegistryArrival(are); - } - } - - } - - /** - * Creates a CA Factory Configuration rom an adapted ConfigurationInfo - * - * @param configuration adapted configuration - * - * @return a CA Factory Configuration - */ - private Configuration createFactoryConfiguration(final ConfigurationInfo configuration) { - - try { - String servicePid = configuration.getPid(); - - logger.debug("Create FactoryConfiguration for {0}", servicePid); - - // Create the factory configuration - Configuration c = configAdmin.createFactoryConfiguration(servicePid, null); - - Dictionary properties = new Hashtable(); - for (Map.Entry entry : configuration.getProperties().entrySet()) { - properties.put(entry.getKey(), entry.getValue()); - } - properties.put(CONFIG_ADMIN_DEPLOYABLE, "true"); - - c.update(properties); - - logger.debug("Updated Factory {0}", c); - - return c; - - } catch (IOException e) { - logger.warn("Cannot push Factory Configuration {0}", configuration.getPid(), e); - } - - return null; - } - - /** - * Creates a CA Configuration rom an adapted ConfigurationInfo - * - * @param configuration adapted configuration - * - * @return a CA Configuration - */ - private Configuration createConfiguration(final ConfigurationInfo configuration) { - - try { - String servicePid = configuration.getPid(); - - logger.debug("Create Configuration for {0}", servicePid); - - // Create the Configuration - Configuration c = configAdmin.getConfiguration(servicePid, null); - - Dictionary properties = c.getProperties(); - if (properties == null) { - properties = new Hashtable(); - } - - for (Map.Entry entry : configuration.getProperties().entrySet()) { - properties.put(entry.getKey(), entry.getValue()); - } - properties.put(CONFIG_ADMIN_DEPLOYABLE, "true"); - - if (c.getBundleLocation() != null) { - c.setBundleLocation(null); - } - - c.update(properties); - - logger.debug("Updated {0}", c); - - return c; - - } catch (IOException e) { - logger.warn("Cannot push Configuration {0}", configuration.getPid(), e); - } - - return null; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationEvent.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationEvent.java deleted file mode 100644 index ddc86102d1..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationEvent.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -import java.util.Set; - -import org.ow2.jonas.configadmin.ConfigurationInfo; - -/** - * A {@code ConfigurationAssociationEvent} is fired when a {@code ConfigurationItem} - * is associated or dissociated to/from a {@code XmlConfigurationAdapterRegistry}. - * - * @author Guillaume Sauthier - */ -public class ConfigurationAssociationEvent { - - /** - * Item being associated / dissociated. - */ - private ConfigurationItem source; - - /** - * Adapted configuration (may be null). - */ - private Set info; - - public ConfigurationAssociationEvent(ConfigurationItem source, Set info) { - this.source = source; - this.info = info; - } - - public ConfigurationItem getSource() { - return source; - } - - public Set getInfo() { - return info; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - ConfigurationAssociationEvent that = (ConfigurationAssociationEvent) o; - - if (info != null ? !info.equals(that.info) : that.info != null) { - return false; - } - return source.equals(that.source); - } - - @Override - public int hashCode() { - int result = source.hashCode(); - result = 31 * result + (info != null ? info.hashCode() : 0); - return result; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationListener.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationListener.java deleted file mode 100644 index 04ac179b74..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationAssociationListener.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -/** - * A {@code ConfigurationAssociationListener} is called when a - * {@code ConfigurationAssociationEvent} is fired. - * - * @author Guillaume Sauthier - */ -public interface ConfigurationAssociationListener { - - /** - * Called when a {@code ConfigurationItem} is associated with a - * {@code XmlConfigurationAdapterRegistry}. - * @param event contains relevant references - */ - void onAssociation(ConfigurationAssociationEvent event); - - /** - * Called when a {@code ConfigurationItem} is dissociated from a - * {@code XmlConfigurationAdapterRegistry}. - * @param event contains relevant references (ConfigurationInfo is null) - */ - void onDissociation(ConfigurationAssociationEvent event); -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationItem.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationItem.java deleted file mode 100644 index 82b542e290..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/ConfigurationItem.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.osgi.service.cm.Configuration; -import org.ow2.jonas.configadmin.AdapterException; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Element; - -/** - * A {@code ConfigurationItem} contains the XML DOM Element representing - * the not adapted configurations and the actual CA Configuration instance (if associated). - * - * @author Guillaume Sauthier - */ -public class ConfigurationItem implements AdapterRegistryListener { - - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(ConfigurationItem.class); - - /** - * DOM Element read from the input deployed XML file. - * This field is never null. - */ - private Element element; - - /** - * CA Configuration. May be null if not associated. - */ - private Set configurations; - - /** - * Used registry (when associated), null otherwise. - */ - private XmlConfigurationAdapterRegistry registry; - - /** - * Listeners interested in association/dissociation events. - */ - private List listeners; - - /** - * State of this item. - */ - private boolean failed = false; - - /** - * Construct an item around the given DOM Element. - * @param element DOM Element - */ - public ConfigurationItem(Element element) { - this.listeners = new ArrayList(); - this.configurations = new HashSet(); - this.element = element; - } - - public Set getConfigurations() { - return configurations; - } - - public boolean isFailed() { - return failed; - } - - public void addAssociationListener(ConfigurationAssociationListener listener) { - listeners.add(listener); - } - - public void removeAssociationListener(ConfigurationAssociationListener listener) { - listeners.remove(listener); - } - - public void onAdapterRegistryArrival(AdapterRegistryEvent event) { - if (registry == null) { - // Still not associated - // Consider the current event and use it if it's OK - - // Filter on the namespace required by this element - if (event.getNamespace().equals(element.getNamespaceURI())) { - - // Try to find an appropriate adapter - XmlConfigurationAdapterRegistry registry = event.getSource(); - XmlConfigurationAdapter adapter = registry.getAdapter(element.getLocalName()); - if (adapter != null) { - try { - firesAssociationEvent(adapter.convert(element)); - this.registry = registry; - this.failed = false; - } catch (AdapterException e) { - // Ignored - logger.error("Cannot convert <{0}:{1} ...> using {2}", - element.getPrefix(), - element.getLocalName(), - adapter.getClass(), - e); - failed = true; - } catch (RuntimeException re) { - // Any other error that may be thrown during eventing - logger.error("Error when handling <{0}:{1} ...>", - element.getPrefix(), - element.getLocalName(), - re); - failed = true; - } - } - } - } - } - - private void firesAssociationEvent(Set info) { - ConfigurationAssociationEvent event = new ConfigurationAssociationEvent(this, info); - for (ConfigurationAssociationListener listener : listeners) { - listener.onAssociation(event); - } - } - - public void onAdapterRegistryRemoval(AdapterRegistryEvent event) { - if (registry != null) { - // We've been associated with something - - // If the registry source of the event is the one we've used - // Intentionally used the == to test if it is the same object - if (registry == event.getSource()) { - registry = null; - firesDissociationEvent(); - } - - } - } - - private void firesDissociationEvent() { - ConfigurationAssociationEvent event = new ConfigurationAssociationEvent(this, null); - for (ConfigurationAssociationListener listener : listeners) { - listener.onDissociation(event); - } - } - - public void close() { - // Only do something when associated - if (registry != null) { - firesDissociationEvent(); - } - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("ConfigurationItem"); - sb.append("{element=").append(element); - sb.append(", configurations=").append(configurations); - sb.append('}'); - return sb.toString(); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/Initializer.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/Initializer.java deleted file mode 100644 index c0b36a7fc1..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/Initializer.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configadmin.internal; - -import org.ow2.util.plan.deploy.deployable.api.factory.XmlFileDeployableFactory; - -/** - * Created by IntelliJ IDEA. - * User: guillaume - * Date: 11/05/11 - * Time: 17:51 - * To change this template use File | Settings | File Templates. - */ -public class Initializer { - /** - * Bind method to register the deployable class. - * @param factory the XML deployable factory to deploy to. - */ - public void registerXmlFileDeployableFactory(final XmlFileDeployableFactory factory) { - factory.registerFileDeployable(ConfigAdminDeployable.class, ConfigAdminDeployable.NAMESPACE); - } - - /** - * Unbind method to unregister the deployable class. - * @param factory the XML deployable factory to undeploy from. - */ - public void unregisterXmlFileDeployableFactory(final XmlFileDeployableFactory factory) { - factory.unregisterFileDeployable(ConfigAdminDeployable.NAMESPACE); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapter.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapter.java deleted file mode 100644 index 7c6a95b8ed..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; - -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.configadmin.internal.model.ObjectFactory; - -/** - * A {@code AbstractConfigurationAdapter} is ... - * - * @author Guillaume Sauthier - */ -public abstract class AbstractConfigurationAdapter implements XmlConfigurationAdapter { - - protected JAXBContext context; - - public AbstractConfigurationAdapter() throws JAXBException { - context = JAXBContext.newInstance(ObjectFactory.class); - } - -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapter.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapter.java deleted file mode 100644 index 66ed971826..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapter.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -import org.ow2.jonas.configadmin.AdapterException; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.internal.model.ConfigurationType; -import org.ow2.jonas.configadmin.internal.model.PropertyType; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Element; - -/** - * A {@code DefaultConfigurationAdapter} is ... - * - * @author Guillaume Sauthier - */ -public class DefaultConfigurationAdapter extends AbstractConfigurationAdapter { - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(DefaultConfigurationAdapter.class); - - public DefaultConfigurationAdapter() throws JAXBException { - super(); - } - - public Set convert(Element node) throws AdapterException { - - try { - - Unmarshaller unmarshaller = context.createUnmarshaller(); - JAXBElement element = unmarshaller.unmarshal(node, ConfigurationType.class); - ConfigurationType factoryConfiguration = element.getValue(); - - String servicePid = factoryConfiguration.getPid(); - - // Create a Factory Configuration - ConfigurationInfo info = new ConfigurationInfo(servicePid); - - logger.debug("Creating Configuration for pid {{0}}", servicePid); - - Map properties = info.getProperties(); - for (PropertyType property : factoryConfiguration.getProperties()) { - properties.put(property.getName(), property.getValue()); - } - - logger.debug("Resulting Configuration: {{0}}", info); - - return Collections.singleton(info); - - } catch (JAXBException e) { - logger.warn("Cannot unmarshall node {{0}}.", node, e); - } - - return null; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapterRegistry.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapterRegistry.java deleted file mode 100644 index bd5e174ec3..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultConfigurationAdapterRegistry.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.util.HashMap; -import java.util.Map; - -import javax.xml.bind.JAXBException; - -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; - -/** - * A {@code DefaultConfigurationAdapterRegistry} is ... - * - * @author Guillaume Sauthier - */ -public class DefaultConfigurationAdapterRegistry implements XmlConfigurationAdapterRegistry { - - private Map adapters; - - public DefaultConfigurationAdapterRegistry() throws JAXBException { - adapters = new HashMap(); - adapters.put("factory-configuration", new DefaultFactoryConfigurationAdapter()); - adapters.put("configuration", new DefaultConfigurationAdapter()); - } - - public XmlConfigurationAdapter getAdapter(String name) { - return adapters.get(name); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultFactoryConfigurationAdapter.java b/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultFactoryConfigurationAdapter.java deleted file mode 100644 index c8fa8f2be6..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/java/org/ow2/jonas/configadmin/internal/generic/DefaultFactoryConfigurationAdapter.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - -import org.ow2.jonas.configadmin.AdapterException; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.internal.model.ConfigurationType; -import org.ow2.jonas.configadmin.internal.model.PropertyType; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Element; - -/** - * A {@code DefaultFactoryConfigurationAdapter} is ... - * - * @author Guillaume Sauthier - */ -public class DefaultFactoryConfigurationAdapter extends AbstractConfigurationAdapter { - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(DefaultFactoryConfigurationAdapter.class); - - public DefaultFactoryConfigurationAdapter() throws JAXBException { - super(); - } - - public Set convert(Element node) throws AdapterException { - - try { - - Unmarshaller unmarshaller = context.createUnmarshaller(); - JAXBElement element = unmarshaller.unmarshal(node, ConfigurationType.class); - ConfigurationType factoryConfiguration = element.getValue(); - - String servicePid = factoryConfiguration.getPid(); - - // Create a Factory Configuration - ConfigurationInfo info = new ConfigurationInfo(servicePid, true); - - logger.debug("Creating FactoryConfiguration for pid {{0}}", servicePid); - - Map properties = info.getProperties(); - for (PropertyType property : factoryConfiguration.getProperties()) { - properties.put(property.getName(), property.getValue()); - } - - logger.debug("Resulting Configuration: {{0}}", info); - - return Collections.singleton(info); - - } catch (JAXBException e) { - logger.warn("Cannot unmarshall node {{0}}.", node, e); - } - - return null; - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/resources/META-INF/configadmin-1.0.xsd b/jonas/modules/services/jonas-configadmin/core/src/main/resources/META-INF/configadmin-1.0.xsd deleted file mode 100644 index 8e1cc4848c..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/resources/META-INF/configadmin-1.0.xsd +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - @(#)configadmin-1.0.xsd 05/2011 - - - - - - - - - - - - - - - - - - - - - - The <property> type holds a key/value pair that will be - inserted into the Configuration instance. - - Example: - <property name="property-name">value</property> - - - - - - - - - - - - - - - The <configuration> type describes the content (as properties - sub elements) of a Configuration instance. - The @pid attribute is required and describe either the 'service.pid' - of the target service to be configured or the 'service.pid' of a - target ManagedServiceFactory. - - Example: - <configuration pid="my-target-service-pid"> - <property name="property-name">value</property> - </configuration> - - - - - - - - - - - - - The <configadmin> type contains a list of configurations - (either factory or normal configurations). - - Example: - <configadmin xmlns="http://jonas.ow2.org/ns/configadmin/1.0"> - <configuration pid="service-pid"> - <property name="property-name">value</property> - </configuration> - <factory-configuration pid="managed-service-factory-pid"> - <property name="property-name">value</property> - </factory-configuration> - </configadmin> - - - - - - - - - This is the extension point of this schema. - - - - - - - - - - - The <configadmin> element is the root element of the deployment file. - - Example: - <configadmin xmlns="http://jonas.ow2.org/ns/configadmin/1.0"> - <!-- ... --> - </configadmin> - - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-configadmin/core/src/main/resources/metadata.xml deleted file mode 100644 index 592551408c..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployerTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployerTestCase.java deleted file mode 100644 index a41635c967..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigAdminDeployerTestCase.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:RegistryServiceImpl.java 10372 2007-05-14 13:58:42Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.configadmin.internal; - -import java.io.ByteArrayInputStream; -import java.net.URL; -import java.util.Collections; -import java.util.Dictionary; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.osgi.framework.ServiceReference; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.internal.generic.DefaultConfigurationAdapterRegistry; -import org.ow2.util.archive.api.IFileArchive; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.ErrorHandler; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNotNull; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; -import static org.testng.Assert.assertTrue; - -public class ConfigAdminDeployerTestCase { - - private ConfigAdminDeployer deployer; - - @Mock - private ConfigurationAdmin ca; - - @Mock - private Configuration configuration; - - @Mock - private Configuration factoryConfiguration; - - @Mock - private ServiceReference ref; - - - @BeforeMethod - public void setUp() throws Exception { - - MockitoAnnotations.initMocks(this); - - deployer = new ConfigAdminDeployer(); - deployer.bindConfigurationAdmin(ca); - deployer.validate(); - - // Register the registry - when(ref.getProperty(eq("namespace"))).thenReturn(ConfigAdminDeployable.NAMESPACE); - DefaultConfigurationAdapterRegistry registry = new DefaultConfigurationAdapterRegistry(); - deployer.bindXmlConfigurationAdapterRegistry(registry, ref); - } - - @Test - public void testParsingInvalidSchemaLocation() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/invalid-schema-location.xml"); - - when(ca.getConfiguration(anyString(), anyString())).thenReturn(configuration); - - deployer.deploy(deployable); - - verify(configuration).update(any(Dictionary.class)); - } - - @Test - public void testParsingNoSchemaLocation() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/no-schema-location.xml"); - - when(ca.getConfiguration(anyString(), anyString())).thenReturn(configuration); - - deployer.deploy(deployable); - - verify(configuration).update(any(Dictionary.class)); - } - - @Test - public void testOneFactoryConfiguration() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/one-factory-configuration.xml"); - - when(ca.createFactoryConfiguration(anyString(), anyString())).thenReturn(factoryConfiguration); - - deployer.deploy(deployable); - - verify(factoryConfiguration).update(any(Dictionary.class)); - } - - @Test - public void testParsingUnsupportedType() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/unsupported-element.xml"); - - when(ca.listConfigurations(anyString())).thenReturn(null); - - deployer.deploy(deployable); - - verify(ca).listConfigurations(anyString()); - - verifyNoMoreInteractions(ca); - } - - @Test - public void testUndeployRemoveConfigurations() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/deploy-undeploy-configurations.xml"); - - // Behaviors - when(ca.getConfiguration(anyString(), anyString())).thenReturn(configuration); - when(ca.createFactoryConfiguration(anyString(), anyString())).thenReturn(factoryConfiguration); - - // Execution - deployer.deploy(deployable); - - // Assertions (Configurations has been pushed) - verify(configuration).update(any(Dictionary.class)); - verify(factoryConfiguration).update(any(Dictionary.class)); - - deployer.undeploy(deployable); - - // Assertions (Configurations has been deleted) - verify(configuration).delete(); - verify(factoryConfiguration).delete(); - - } - - @Test - public void testDeployedConfigurationsAreRemovedWhenTheAssociatedRegistryDisappear() throws Exception { - - ConfigAdminDeployable deployable = mockDeployable("/deploy-undeploy-configurations.xml"); - - // Behaviors - when(ca.getConfiguration(anyString(), anyString())).thenReturn(configuration); - when(ca.createFactoryConfiguration(anyString(), anyString())).thenReturn(factoryConfiguration); - - // Execution - deployer.deploy(deployable); - - // Assertions (Configurations has been pushed) - verify(configuration).update(any(Dictionary.class)); - verify(factoryConfiguration).update(any(Dictionary.class)); - - deployer.unbindXmlConfigurationAdapterRegistry(ref); - - // Assertions (Configurations has been deleted) - verify(configuration).delete(); - verify(factoryConfiguration).delete(); - - DefaultConfigurationAdapterRegistry registry = new DefaultConfigurationAdapterRegistry(); - deployer.bindXmlConfigurationAdapterRegistry(registry, ref); - - verify(configuration,times(2)).update(any(Dictionary.class)); - verify(factoryConfiguration,times(2)).update(any(Dictionary.class)); - - } - - @Test - public void testConfigurationAssociation() throws Exception { - ConfigurationInfo info = new ConfigurationInfo("JoramTopic", false); - Element e = getElement(""); - - when(ca.getConfiguration(anyString(), anyString())).thenReturn(configuration); - - ConfigurationItem item = new ConfigurationItem(e); - item = spy(item); - - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - deployer.onAssociation(cae); - - verify(item).getConfigurations(); - } - - @Test - public void testFactoryConfigurationAssociation() throws Exception { - ConfigurationInfo info = new ConfigurationInfo("JoramTopic", true); - Element e = getElement(""); - - when(ca.createFactoryConfiguration(anyString(), anyString())).thenReturn(factoryConfiguration); - - ConfigurationItem item = new ConfigurationItem(e); - item = spy(item); - - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - deployer.onAssociation(cae); - - verify(item).getConfigurations(); - } - - @Test - public void testDissociation() throws Exception { - Element e = getElement(""); - ConfigurationItem item = new ConfigurationItem(e); - item.getConfigurations().add(configuration); - item = spy(item); - - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, null); - deployer.onDissociation(cae); - - verify(configuration).delete(); - - assertTrue(item.getConfigurations().isEmpty()); - // Check that the deployer tries to associate the item with remaining registries - verify(item).onAdapterRegistryArrival(any(AdapterRegistryEvent.class)); - } - - private ConfigAdminDeployable mockDeployable(String filename) throws Exception { - IFileArchive archive = mock(IFileArchive.class); - - ConfigAdminDeployable deployable = new ConfigAdminDeployable(archive); - deployable = spy(deployable); - - when(deployable.getArchive()).thenReturn(archive); - when(archive.getURL()).thenReturn(getUrl(filename)); - - return deployable; - } - - private URL getUrl(String name) { - return getClass().getResource(name); - } - - private Element getElement(String xml) throws Exception { - - // Transform in InputStream - ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes()); - - // Parse the DOM - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setValidating(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(mock(ErrorHandler.class)); - Document doc = builder.parse(is); - - return doc.getDocumentElement(); - } - -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigurationItemTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigurationItemTestCase.java deleted file mode 100644 index c227360c91..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/ConfigurationItemTestCase.java +++ /dev/null @@ -1,237 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal; - -import java.io.ByteArrayInputStream; -import java.util.Collections; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.ErrorHandler; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyZeroInteractions; -import static org.mockito.Mockito.when; - -/** - * A {@code ConfigurationItemTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class ConfigurationItemTestCase { - - @Mock - private ConfigurationAssociationListener associationListener; - - @Mock - private XmlConfigurationAdapterRegistry registry; - - @Mock - private XmlConfigurationAdapter adapter; - - private ConfigurationInfo info; - private ConfigurationItem item; - - @BeforeMethod - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - - info = new ConfigurationInfo("JoramTopic", true); - - when(registry.getAdapter(eq("topic"))).thenReturn(adapter); - when(adapter.convert(any(Element.class))).thenReturn(Collections.singleton(info)); - - Element e = getElement(""); - - item = new ConfigurationItem(e); - item.addAssociationListener(associationListener); - - } - - @Test - public void testAssociationWithRightNamespace() throws Exception { - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - - item.onAdapterRegistryArrival(eventA); - - verify(associationListener).onAssociation(eq(cae)); - } - - @Test - public void testSecondMatchingRegistryIsNotUsed() throws Exception { - - XmlConfigurationAdapterRegistry second = mock(XmlConfigurationAdapterRegistry.class); - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - AdapterRegistryEvent eventB = new AdapterRegistryEvent(second, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - - item.onAdapterRegistryArrival(eventA); - item.onAdapterRegistryArrival(eventB); - - verify(associationListener).onAssociation(eq(cae)); - verifyZeroInteractions(second); - } - - @Test - public void testItemCanBeReAssociatedWithSecondRegistry() throws Exception { - - XmlConfigurationAdapterRegistry second = mock(XmlConfigurationAdapterRegistry.class); - when(second.getAdapter(eq("topic"))).thenReturn(adapter); - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - AdapterRegistryEvent eventB = new AdapterRegistryEvent(second, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - ConfigurationAssociationEvent cae2 = new ConfigurationAssociationEvent(item, null); - - item.onAdapterRegistryArrival(eventA); - item.onAdapterRegistryRemoval(eventA); - item.onAdapterRegistryArrival(eventB); - - verify(associationListener, times(2)).onAssociation(eq(cae)); - verify(associationListener).onDissociation(eq(cae2)); - } - - @Test - public void testNoAssociationWithWrongNamespace() throws Exception { - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns/unbound"); - - item.onAdapterRegistryArrival(eventA); - - verifyZeroInteractions(registry); - verifyZeroInteractions(associationListener); - } - - @Test - public void testItemCloseWhenAssociated() throws Exception { - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - - item.onAdapterRegistryArrival(eventA); - item.close(); - - verify(associationListener).onAssociation(eq(cae)); - verify(associationListener).onDissociation(any(ConfigurationAssociationEvent.class)); - } - - @Test - public void testNoItemCloseWhenNotAssociated() throws Exception { - - item.close(); - verifyZeroInteractions(associationListener); - } - - @Test - public void testRemovalOfUnusedRegistryDoNotImpactItem() throws Exception { - - XmlConfigurationAdapterRegistry second = mock(XmlConfigurationAdapterRegistry.class); - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - AdapterRegistryEvent eventB = new AdapterRegistryEvent(second, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - - item.onAdapterRegistryArrival(eventA); - item.onAdapterRegistryRemoval(eventB); - - verify(associationListener).onAssociation(eq(cae)); - verifyZeroInteractions(second); - } - - @Test - public void testAssociationListenerThrowingRuntimeException() throws Exception { - - AdapterRegistryEvent event = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - ConfigurationAssociationEvent cae = new ConfigurationAssociationEvent(item, Collections.singleton(info)); - - // First time, throw an Exception - // Second call: do nothing - doThrow(new RuntimeException()) - .doNothing() - .when(associationListener).onAssociation(eq(cae)); - - item.onAdapterRegistryArrival(event); - assertThat(item.isFailed(), is( true )); - - // re-play the arrival to simulate another registry - item.onAdapterRegistryArrival(event); - assertThat(item.isFailed(), is( false )); - } - - @Test - public void testXmlAdapterThrowingRuntimeException() throws Exception { - - AdapterRegistryEvent eventA = new AdapterRegistryEvent(registry, "http://joram.ow2.org/xmlns"); - - when(adapter.convert(any(Element.class))).thenThrow(new RuntimeException()); - - item.onAdapterRegistryArrival(eventA); - - // The adapter thrown an Exception but the execution flow should continue - // Nevertheless, the Collection of Configurations in the item should be 0 - assertThat(item.getConfigurations().isEmpty(), is( true )); - assertThat(item.isFailed(), is( true )); - - } - - private Element getElement(String xml) throws Exception { - - // Transform in InputStream - ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes()); - - // Parse the DOM - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setValidating(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(mock(ErrorHandler.class)); - Document doc = builder.parse(is); - - return doc.getDocumentElement(); - } - -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapterTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapterTestCase.java deleted file mode 100644 index 40dd4c5cb6..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/AbstractConfigurationAdapterTestCase.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.net.URL; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * A {@code AbstractConfigurationAdapterTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class AbstractConfigurationAdapterTestCase { - protected Element findFirstElementNamed(Document doc, String name) { - Element root = doc.getDocumentElement(); - return (Element) root.getElementsByTagName(name).item(0); - } - - protected URL getUrl(String name) { - return getClass().getResource(name); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterRegistryTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterRegistryTestCase.java deleted file mode 100644 index b9369cc583..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterRegistryTestCase.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import org.testng.annotations.Test; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -/** - * A {@code DefaultConfigurationAdapterRegistryTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class ConfigurationAdapterRegistryTestCase { - @Test - public void testRegistrySupportsDefaultElements() throws Exception { - DefaultConfigurationAdapterRegistry registry = new DefaultConfigurationAdapterRegistry(); - - assertThat(registry.getAdapter("configuration"), is( notNullValue() )); - assertThat(registry.getAdapter("factory-configuration"), is( notNullValue() )); - } -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterTestCase.java deleted file mode 100644 index 8fc1ae2d6d..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/ConfigurationAdapterTestCase.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.util.Set; - -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.util.xml.DocumentParser; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -/** - * A {@code DefaultConfigurationAdapterTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class ConfigurationAdapterTestCase extends AbstractConfigurationAdapterTestCase { - @Test - public void testConvert() throws Exception { - Document doc = DocumentParser.getDocument(getUrl("/one-configuration.xml"), false, null); - Element node = findFirstElementNamed(doc, "configuration"); - - DefaultConfigurationAdapter adapter = new DefaultConfigurationAdapter(); - Set info = adapter.convert(node); - - assertThat(info, is( notNullValue() )); - assertThat(info.size(), is( equalTo( 1 ) )); - - ConfigurationInfo ci = info.iterator().next(); - assertThat(ci.getPid(), is( equalTo( "org.ow2.jonas.db.h2.H2DBServiceImpl" ) )); - assertThat(ci.isFactory(), is( equalTo( false ) )); - } - -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/FactoryConfigurationAdapterTestCase.java b/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/FactoryConfigurationAdapterTestCase.java deleted file mode 100644 index 822e503ec8..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/java/org/ow2/jonas/configadmin/internal/generic/FactoryConfigurationAdapterTestCase.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.configadmin.internal.generic; - -import java.util.Set; - -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.util.xml.DocumentParser; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; - -/** - * A {@code DefaultFactoryConfigurationAdapterTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class FactoryConfigurationAdapterTestCase extends AbstractConfigurationAdapterTestCase { - @Test - public void testConvert() throws Exception { - Document doc = DocumentParser.getDocument(getUrl("/one-factory-configuration.xml"), false, null); - Element node = findFirstElementNamed(doc, "factory-configuration"); - - DefaultFactoryConfigurationAdapter adapter = new DefaultFactoryConfigurationAdapter(); - Set info = adapter.convert(node); - - assertThat(info, is( notNullValue() )); - assertThat(info.size(), is( equalTo( 1 ) )); - - ConfigurationInfo ci = info.iterator().next(); - assertThat(ci.getPid(), is( equalTo( "org.ow2.jonas.db.h2.H2DBServiceImpl" ) )); - assertThat(ci.isFactory(), is( equalTo( true ) )); - } - -} diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/deploy-undeploy-configurations.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/deploy-undeploy-configurations.xml deleted file mode 100644 index ebb7bb93ec..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/deploy-undeploy-configurations.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Guillaume - Developer - - - - John - Developer - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/invalid-schema-location.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/invalid-schema-location.xml deleted file mode 100644 index 0e4ca90277..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/invalid-schema-location.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - woooot - john - 9999 - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/no-schema-location.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/no-schema-location.xml deleted file mode 100644 index b2ea5611d7..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/no-schema-location.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - woooot - john - 9999 - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-configuration.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-configuration.xml deleted file mode 100644 index b2ea5611d7..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-configuration.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - woooot - john - 9999 - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-factory-configuration.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-factory-configuration.xml deleted file mode 100644 index 1e86991a38..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/one-factory-configuration.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - woooot - john - 9999 - - - diff --git a/jonas/modules/services/jonas-configadmin/core/src/test/resources/unsupported-element.xml b/jonas/modules/services/jonas-configadmin/core/src/test/resources/unsupported-element.xml deleted file mode 100644 index 3b912753a5..0000000000 --- a/jonas/modules/services/jonas-configadmin/core/src/test/resources/unsupported-element.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - blah - - - diff --git a/jonas/modules/services/jonas-configadmin/pom.xml b/jonas/modules/services/jonas-configadmin/pom.xml deleted file mode 100644 index e76e87c646..0000000000 --- a/jonas/modules/services/jonas-configadmin/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-configadmin - pom - JOnAS :: Services :: ConfigAdmin Deployer - - - core - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-datasources/core/pom.xml b/jonas/modules/services/jonas-datasources/core/pom.xml deleted file mode 100644 index 0fd628214b..0000000000 --- a/jonas/modules/services/jonas-datasources/core/pom.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - jonas-services-datasource - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-services-datasource-core - JOnAS :: Services :: Datasource :: Deployer :: Core - bundle - - - - org.ow2.bundles - util-plan-deployer - - - org.ow2.bundles - util-plan-deploy-impl - - - org.ow2.bundles - ow2-util-archive-api - - - org.ow2.bundles - ow2-util-archive-impl - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - util-plan-fetcher-impl-maven2 - - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-dbm-core - ${project.version} - - - - org.ow2.jonas - jonas-generators-raconfig - ${project.version} - - - - org.apache.felix - org.apache.felix.ipojo.annotations - - - - - - org.testng - testng - test - - - org.ow2.jonas - jonas-jca-jdbc-dm - ${project.version} - rar - test - - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - 0.8.0 - - - schemas - - generate - - - - **/jonas-datasources-1.1.xsd - - true - org.ow2.jonas.datasource.deployer.binding - true - - - - - - maven-dependency-plugin - - - copy rar - - copy - - generate-test-resources - - - - org.ow2.jonas - jonas-jca-jdbc-dm - rar - true - jonas-jca-jdbc-dm.rar - - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - once - classes - 10 - - - rar.path - target/dependency/jonas-jca-jdbc-dm.rar - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployable.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployable.java deleted file mode 100644 index 6801829877..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployable.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import org.ow2.jonas.datasource.deployer.binding.Datasources; -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.ee.deploy.impl.deployable.AbsDeployable; -import org.ow2.util.plan.deploy.deployable.api.FileDeployable; - -/** - * @author Djamel eddine ZABCHI - */ -public class DatasourceDeployable extends AbsDeployable - implements FileDeployable { - - /** - * Namespace for datasources 1.0. - */ - public static final String NAMESPACE_10 = "http://jonas.ow2.org/ns/datasource/1.0"; - /** - * Namespace for datasources. - */ - public static final String NAMESPACE = "http://jonas.ow2.org/ns/datasource/1.1"; - /** - * The attached DatasourceType object. - */ - private Datasources attachedDatasources = null; - - /** - * Defines and create a deployable for the given archive. - * @param archive the given archive. - */ - public DatasourceDeployable(final IFileArchive archive) { - super(archive); - } - - public Datasources getAttachedData() { - return this.attachedDatasources; - } - - public void setAttachedData(final Datasources attachedData) { - this.attachedDatasources = attachedData; - - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableRegistration.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableRegistration.java deleted file mode 100644 index f30b1009d6..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableRegistration.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import org.ow2.util.plan.deploy.deployable.api.factory.XmlFileDeployableFactory; - -/** - * Class to register the deployable type to the XML deployable factory. - * @author mleduque - */ -public class DatasourceDeployableRegistration { - - /** - * Bind method to register the deployable class. - * @param factory the XML deployable factory to deploy to. - */ - public void registerToXmlFileDeployableFactory(final XmlFileDeployableFactory factory) { - if (factory != null) { - factory.registerFileDeployable(DatasourceDeployable.class, DatasourceDeployable.NAMESPACE_10); - factory.registerFileDeployable(DatasourceDeployable.class, DatasourceDeployable.NAMESPACE); - } - } - - /** - * Unbind method to unregister the deployable class. - * @param factory the XML deployable factory to undeploy from. - */ - public void unregisterFromXmlFileDeployableFactory(final XmlFileDeployableFactory factory) { - if (factory != null) { - factory.unregisterFileDeployable(DatasourceDeployable.NAMESPACE_10); - factory.unregisterFileDeployable(DatasourceDeployable.NAMESPACE); - } - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployer.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployer.java deleted file mode 100644 index 811b53ac9c..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/DatasourceDeployer.java +++ /dev/null @@ -1,471 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import org.ow2.jonas.Version; -import org.ow2.jonas.datasource.deployer.binding.DatasourceType; -import org.ow2.jonas.datasource.deployer.binding.Datasources; -import org.ow2.jonas.datasource.deployer.reader.DatasourceXmlReader; -import org.ow2.jonas.generators.raconfig.RAConfig; -import org.ow2.jonas.generators.raconfig.RAConfigException; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployerList; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.deploymentplan.maven2.Maven2Deployment; -import org.ow2.util.plan.bindings.exceptions.InvalidDeploymentException; -import org.ow2.util.plan.fetcher.api.IResourceFetcher; -import org.ow2.util.plan.fetcher.api.IResourceFetcherFactoryManager; -import org.ow2.util.plan.fetcher.api.exceptions.FetcherException; -import org.ow2.util.plan.fetcher.api.exceptions.FetcherFactoryException; -import org.ow2.util.plan.fetcher.api.exceptions.ResourceFetcherNotResolvedException; -import org.ow2.util.plan.fetcher.api.exceptions.ResourceNotFoundException; -import org.ow2.util.plan.repository.api.IRepositoryManager; -import org.ow2.util.url.URLUtils; - -/** - * This deployer will deploy Datasource module. Generating .RAR files and deploy - * them. - * @author Alexis RENOUX - */ -public class DatasourceDeployer extends AbsDeployerList { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(DatasourceDeployer.class); - - /** - * The Deployer Manager that will be used to deploy RAR files. - */ - private IDeployerManager deployerManager = null; - - /** - * The datasourceReader that will be used to read the datasource XML file. - */ - private DatasourceXmlReader datasourceReader; - - /** - * The default RAR creation path. - */ - private static final String DEFAULT_ARCHIVE_PATH = "deployer" + File.separator +"datasources"; - - /** - * Working directory - */ - protected File archiveFile = null; - - /** - * The datasources that were deployed, and the generated RARs. - */ - private Map>> datasourceDeployables = new HashMap>>(); - - /** - * Server Properties. - */ - protected ServerProperties serverProps; - - /** - * Reference to the {@link org.ow2.jonas.lib.work.DeployerLog} which is the class that manage the - * accesses to the log file (to remove the jar). - */ - protected DeployerLog deployerLog = null; - - /** - * Internal JDBC RAR used to build datasource RAR - */ - private String dmRar; - - /** - * Resource fetcher factory - */ - protected IResourceFetcherFactoryManager resourceFetcherFactoryManager; - - /** - * Repository manager - */ - protected IRepositoryManager repositoryManager; - - /** - * Creates a new DatasourceDeployer. - */ - public DatasourceDeployer() throws IOException { - - } - - /** - * Resource service used by this deployer. - */ - // private ResourceService resourceService = null; - /** - * Undeploy the given Datasource. (Not implemented yet) - * @param datasourceDeployable the deployable to remove. - * @throws org.ow2.util.ee.deploy.api.deployer.DeployerException if the Datasource is not undeployed. - */ - protected void undeployDatasource(final DatasourceDeployable datasourceDeployable) throws DeployerException { - logger.info("Undeploying {0}", datasourceDeployable); - - URI uri = getUri(datasourceDeployable); - for (IDeployable rar : datasourceDeployables.get(uri)) { - // Undeploy the RAR file - try { - this.deployerManager.undeploy(rar); - } catch (DeployerException e) { - throw new DeployerException("Exception while undeploying deployable " + rar, e); - } catch (UnsupportedDeployerException e) { - throw new DeployerException("No deployer found for deployable " + rar, e); - } - } - - // Remove the entry deployment was succesfull. - this.datasourceDeployables.remove(uri); - - } - - /** - * Deploy the given Datasource. - * @param deployable the deployable to add. - * @throws org.ow2.util.ee.deploy.api.deployer.DeployerException if the Datasource is not deployed. - */ - protected void deployDatasource(final IDeployable deployable) throws DeployerException { - logger.debug("Request to deploy {0} received", deployable); - - if (deployable == null) { - throw new DeployerException("Null deployable"); - } - - if (!(DatasourceDeployable.class.isAssignableFrom(deployable.getClass()))) { - throw new DeployerException("Bad deployable type " + deployable.getClass()); - } - - logger.info("Deploying datasource {0}", deployable); - - DatasourceDeployable datasourceDeployable = DatasourceDeployable.class.cast(deployable); - - datasourceReader = new DatasourceXmlReader(); - if (datasourceReader == null) { - throw new DeployerException("Deployment aborted - The DatasourceReader is null"); - } - - File xmlfile = this.getFile(datasourceDeployable); - Datasources datasources = null; - - // Create java objects from XML file - try { - datasources = datasourceReader.extractDataSources(xmlfile); - } catch (Exception e) { - throw new DeployerException("Error while parsing file " + xmlfile + " - Deployment aborted", e); - } - - if (datasources == null) { - throw new DeployerException("The deployable " + deployable + " resolved in null datasource - Deployment aborted"); - } - - datasourceDeployable.setAttachedData(datasources); - List> generatedResourceAdapters = new ArrayList>(); - - for (DatasourceType ds : datasources.getDatasources()) { - DatasourceType dsInitialized = datasourceReader.initDataSource(ds); - // Get the Properties java object from datasourceType - Properties properties = datasourceReader.getProperties(dsInitialized); - String fileIn = null; - String fileOut = null; - String fileName = ""; - try { - fileName = "ds-" + dsInitialized.getDatasourceConfiguration().getName().replace('/', '_') + "-"; - fileOut = File.createTempFile(fileName, ".rar", archiveFile).getAbsolutePath(); - } catch (IOException e1) { - String msg = "Error while creating temp file <" + fileName + ".rar> in directory <" + archiveFile.getPath() + ">"; - throw new DeployerException(msg, e1); - } - - // Generate .rar (only DM are supported) - if (dmRar == null) { - if (resourceFetcherFactoryManager != null) { - Maven2Deployment deployment = new Maven2Deployment(); - deployment.setGroupId("org.ow2.jonas"); - deployment.setArtifactId("jonas-jca-jdbc-dm"); - deployment.setVersion(Version.getNumber()); - deployment.setType("rar"); - - try { - IResourceFetcher fetcher = this.resourceFetcherFactoryManager.getResourceFetcher(deployment); - fetcher.setRepositoryManager(repositoryManager); - fetcher.setDeployment(deployment); - fetcher.resolve(); - setDmRar(fetcher.getResource().getPath()); - } catch (FetcherException e) { - e.printStackTrace(); - } catch (ResourceNotFoundException e) { - e.printStackTrace(); - } catch (InvalidDeploymentException e) { - e.printStackTrace(); - } catch (FetcherFactoryException e) { - e.printStackTrace(); - } catch (ResourceFetcherNotResolvedException e) { - e.printStackTrace(); - } - } else { - throw new DeployerException("Resource fetcher factory service was not found. Cannot resolve " + - "the artifact org.ow2.jonas:jonas-jca-jdbc-dm:" + Version.getNumber() + ":rar"); - } - } - - fileIn = dmRar; - - logger.info("Generate RAR {0} -> {1}", fileIn, fileOut); - - try { - RAConfig.generateRars(properties, "JOnASJDBC_DM", fileIn, fileOut); - } catch (RAConfigException e) { - logger.error("Failure to deploy datasource {0}", ds); - throw new DeployerException(e); - } - - /* - * Deploy .rar 1- Create IArchive 2- Create Deployable 3- Deploy - */ - - // Create an IArchive - File generatedFile = new File(fileOut); - - if (!generatedFile.exists()) { - logger.error("RAR was not generated with RAConfig- {0}", fileOut); - throw new DeployerException("RAR was not generated <" + fileOut + ">"); - } - - IArchive archiveRar = ArchiveManager.getInstance().getArchive(generatedFile); - if (archiveRar == null) { - throw new DeployerException("Null archive for file " + fileOut); - } - - // Create a Deployable - IDeployable rardeployable = null; - try { - rardeployable = DeployableHelper.getDeployable(archiveRar); - } catch (DeployableHelperException e) { - throw new DeployerException(e); - } - if (rardeployable == null) { - throw new DeployerException("Null deployable for archive " + archiveRar); - } - - // Deploy - try { - this.deployerManager.deploy(rardeployable); - } catch (DeployerException e) { - throw new DeployerException("Exception while deploying deployable " + rardeployable, e); - } catch (UnsupportedDeployerException e) { - throw new DeployerException("No deployer found for deployable " + rardeployable, e); - } - - // Here deployment was successful. - generatedResourceAdapters.add(rardeployable); - - try { - // The file is unpacked, so log it - if (deployerLog != null) { - File unpackedFile = URLUtils.urlToFile(datasourceDeployable.getArchive().getURL()); - deployerLog.addEntry(xmlfile, new File(fileOut)); - } - } catch (Exception e) { - throw new DeployerException("Cannot get the url of the initial deployable for the datasource Module '" + deployable - + "'.", e); - } - } - - this.datasourceDeployables.put(xmlfile.toURI(), generatedResourceAdapters); - - } - - /** - * Allows to get a File from the given DataSource Deployable. - * @param datasourceDeployable the given DataSource deployable. - * @return a File object of this deployable - * @throws org.ow2.util.ee.deploy.api.deployer.DeployerException if the File can't be obtained. - */ - protected File getFile(final DatasourceDeployable datasourceDeployable) throws DeployerException { - // Get URL - URL datasourceURL = null; - try { - datasourceURL = datasourceDeployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get URL from Datasource deployable '" + datasourceDeployable + "'.", e); - } - - // Get File - return URLUtils.urlToFile(datasourceURL); - } - - /** - * {@inheritDoc} - */ - public void deploy(final IDeployable deployable) throws DeployerException { - check(deployable); - - // Deploy the Datasource Deployable - - if (DatasourceDeployable.class.isAssignableFrom(deployable.getClass())) { - deployDatasource(deployable); - } - } - - /** - * {@inheritDoc} - */ - public boolean isDeployed(final IDeployable deployable) throws DeployerException { - if (this.supports(deployable)) { - return (this.datasourceDeployables.get(getUri(deployable)) != null); - } else { - return false; - } - - } - - /** - * Extract the URI of the given Deployable - * @param deployable the given DataSource deployable. - * @return the URI identifying this deployable - * @throws DeployerException if the URI can't be obtained. - */ - protected URI getUri(final IDeployable deployable) { - // Get URI - try { - return deployable.getArchive().getURL().toURI(); - } catch (Exception e) { - // Should never happen - throw new RuntimeException("Cannot get URI from Datasource deployable '" + deployable + "'.", e); - } - } - - /** - * check if the RAR is currently deployed - */ - public boolean isDeployed(final String rarFileName) { - - return datasourceDeployables.containsValue(rarFileName); - - } - - /** - * {@inheritDoc} - */ - public boolean supports(final IDeployable deployable) { - return (DatasourceDeployable.class.isAssignableFrom(deployable.getClass())); - } - - /** - * {@inheritDoc} - */ - public void undeploy(final IDeployable deployable) throws DeployerException { - if (!this.supports(deployable)) { - throw new DeployerException("Cannot undeploy non-datasource deployable " + deployable + "."); - } - if (!this.isDeployed(deployable)) { - throw new DeployerException("Cannot undeploy datasource deployable " + deployable + " - it is not deployed."); - } - undeployDatasource(DatasourceDeployable.class.cast(deployable)); - } - - /** - * Check if the given deployable is deployable or not. - * @param deployable the deployable to check. - * @throws org.ow2.util.ee.deploy.api.deployer.DeployerException if the deployable is not supported. - */ - private void check(final IDeployable deployable) throws DeployerException { - if (!supports(deployable)) { - throw new DeployerException("The deployment of the deployable'" + deployable - + "' is not supported by this deployer."); - } - } - - /** - * {@inheritDoc} - */ - public IDeployerManager getDeployerManager() { - return deployerManager; - } - - /** - * {@inheritDoc} - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Set the Server Properties. - * @param props {@link org.ow2.jonas.properties.ServerProperties} instance - */ - public void setServerProperties(final ServerProperties props) { - this.serverProps = props; - } - - /** - * Create working directory for the deployer. - */ - protected void initWorkingDirectory() { - if (archiveFile == null) { - archiveFile = new File(serverProps.getWorkDirectory() + File.separator + DEFAULT_ARCHIVE_PATH + File.separator + serverProps.getServerName()); - archiveFile.mkdirs(); - } - } - - /** - * @return Get path to the DM rar - */ - public String getDmRar() { - return dmRar; - } - - /** - * set the DM RAR path - * @param dmRar path to rar file - */ - public void setDmRar(final String dmRar) { - this.dmRar = dmRar; - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceCleanTask.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceCleanTask.java deleted file mode 100644 index 7e5e5da76e..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceCleanTask.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS datasource unused directory clean task class. This class provides a way for - * removing files which are inconsistent files. - * @author Benoit Pelletier - */ -public class JonasDatasourceCleanTask extends AbsCleanTask { - - /** - * {@link IDeployerLog} of the task. - */ - private IDeployerLog deployerLog = null; - - /** - * {@link JonasDatasourceDeployer} reference. - */ - private JonasDatasourceDeployer dsDeployerService; - - /** - * Construct a new EAR clean task. - * @param dsDeployerService JonasDatasourceDeployer reference - * @param deployerLog DeployerLog of the task - */ - public JonasDatasourceCleanTask(final JonasDatasourceDeployer dsDeployerService, final IDeployerLog deployerLog) { - this.dsDeployerService = dsDeployerService; - this.deployerLog = deployerLog; - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException If the method fails - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - // Check if the EJB3 file is deployed - return dsDeployerService.isDsDeployedByWorkName(logEntry.getCopy().getPath()); - } - - /** - * {@inheritDoc} - * @see org.ow2.jonas.lib.work.AbsCleanTask#getDeployerLog() - */ - @Override - public IDeployerLog getDeployerLog() { - return deployerLog; - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceDeployer.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceDeployer.java deleted file mode 100644 index 6baa2cbaf0..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/JonasDatasourceDeployer.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import java.io.File; -import java.io.IOException; - -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.fetcher.api.IResourceFetcherFactoryManager; -import org.ow2.util.plan.repository.api.IRepositoryManager; - -/** - * DatasourceDeployer with bind and unbind methods. - * @author mleduque - */ -public class JonasDatasourceDeployer extends DatasourceDeployer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JonasDatasourceDeployer.class); - - /** - * Constructor to handle Exception throwing. - * @throws IOException if seed rar creation failed. - */ - public JonasDatasourceDeployer() throws IOException { - } - - /** - * Set the Server Properties. - * @param props {@link ServerProperties} instance - */ - @Override - public void setServerProperties(final ServerProperties props) { - this.serverProps = props; - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - protected void setWorkCleanerService(final WorkCleanerService workCleanerService) { - initWorkingDirectory(); - File fileLog = new File(archiveFile.getPath() + File.separator + serverProps.getServerName() + ".log"); - - if (!fileLog.exists()) { - try { - // Create log file - fileLog.createNewFile(); - } catch (IOException e) { - logger.error("Cannot create the log file " + fileLog); - } - } - - try { - // Create the logger - deployerLog = new DeployerLog(fileLog); - CleanTask cleanTask = new JonasDatasourceCleanTask(this, deployerLog); - - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } catch (DeployerLogException e) { - logger.error("Cannot register the clean task", e); - } - } - - public void setResourceFetcherFactoryManager(IResourceFetcherFactoryManager resourceFetcherFactoryManager) { - this.resourceFetcherFactoryManager = resourceFetcherFactoryManager; - } - - public void setRepositoryManager(IRepositoryManager repositoryManager) { - this.repositoryManager = repositoryManager; - } - - /** - * Bind method for the DeployerManager. - * @param deployerManager the deployer manager. - */ - public void registerToDeployerManager(final IDeployerManager deployerManager) { - deployerManager.register(this); - this.setDeployerManager(deployerManager); - } - - /** - * Unbind method for the DeployerManager. - * @param deployerManager the deployer manager. - */ - public void unregisterfromDeployerManager(final IDeployerManager deployerManager) { - deployerManager.unregister(this); - - } - - /** - * Test if the specified unpack name is already deployed or not. - * @param name the name of the DS file. - * @return true if the EJB3 is deployed, else false. - */ - public boolean isDsDeployedByWorkName(final String name) { - return this.isDeployed(name); - - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidator.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidator.java deleted file mode 100644 index 9fe87911e0..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidator.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer.reader; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; - -import javax.xml.XMLConstants; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; - -import org.xml.sax.SAXException; - -/** - * Class that does validation on a datasource. - * @author Tarik Ihadjadene - */ -public class DatasourceValidator { - - /** - * Private no-args constructor. - */ - @SuppressWarnings("unused") - private DatasourceValidator() { - } - - /** - * XML Schema for DataSources. - */ - private static final String DATASOURCE_10_XSD = "jonas-datasources-1.0.xsd"; - private static final String DATASOURCE_XSD = "jonas-datasources-1.1.xsd"; - - /** - * Gets the XML file and tries to validate it. - * @param xmlFile the file to validate. - * @throws org.xml.sax.SAXException if a SAX exception is triggered. - * @throws javax.xml.parsers.ParserConfigurationException if the parser couldn't be - * configured. - * @throws java.io.IOException if the file couldn't be read. - */ - public DatasourceValidator(final File xmlFile) throws SAXException, ParserConfigurationException, IOException { - - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(new Source[] {getStreamSource(DATASOURCE_10_XSD), - getStreamSource(DATASOURCE_XSD)}); - Validator validator = schema.newValidator(); - - Source xmlSource = new StreamSource(xmlFile); - validator.validate(xmlSource); - } - - private Source getStreamSource(final String resource) { - InputStream is = getClass().getResourceAsStream(resource); - if (is == null) { - throw new IllegalStateException("Unable to find the XSD '" + resource + "'"); - } - return new StreamSource(is); - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceXmlReader.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceXmlReader.java deleted file mode 100644 index acc1821414..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/DatasourceXmlReader.java +++ /dev/null @@ -1,268 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer.reader; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.math.BigInteger; -import java.util.Properties; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.sax.SAXSource; - -import org.ow2.jonas.datasource.deployer.binding.ConnectionManagerConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceType; -import org.ow2.jonas.datasource.deployer.binding.Datasources; -import org.ow2.jonas.datasource.deployer.binding.ObjectFactory; -import org.ow2.jonas.datasource.deployer.DatasourceDeployable; -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -/** - * This class is used to transform an XML file to java objects and then to - * generate Properties objects from java objects. - * @author Rodrigue SOUBEIGA - * @author Mickael LEDUQUE - */ -public class DatasourceXmlReader { - - /** - * Cache policy parameter name. - */ - private static final String PSTMT_CACHE_POLICY = "jdbc.pstmtcachepolicy"; - - /** - * Cache policy default value. - */ - private static final String DEF_PSTMT_CACHE_POLICY = "List"; - - - /** - * {@inheritDoc} - */ - public boolean isXmlValid(final File xmlFile) { - try { - new DatasourceValidator(xmlFile); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - - return true; - } - - /** - * {@inheritDoc} - * @throws java.io.FileNotFoundException - */ - @SuppressWarnings("unchecked") - public Datasources extractDataSources(final File xmlFile) throws JAXBException { - - if (!isXmlValid(xmlFile)) { - throw new JAXBException("XML file is not valid."); - } - - JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class); - Unmarshaller unmarshaller = jc.createUnmarshaller(); - - // Create an XMLReader to use with our filter - XMLReader reader; - try { - reader = XMLReaderFactory.createXMLReader(); - } catch (SAXException e) { - throw new JAXBException("Unable to create XML Reader", e); - } - - // Create the filter (to add namespace) and set the xmlReader as its parent. - NamespaceFilter inFilter = new NamespaceFilter(DatasourceDeployable.NAMESPACE); - inFilter.setParent(reader); - - // Prepare the input - InputSource is; - try { - is = new InputSource(new FileInputStream(xmlFile)); - } catch (FileNotFoundException e) { - throw new JAXBException("Unable to analyze file '" + xmlFile + "'.", e); - } - - // Create a SAXSource specifying the filter - SAXSource source = new SAXSource(inFilter, is); - - // Do unmarshalling - Datasources theDatasources = (Datasources) unmarshaller.unmarshal(source); - - return theDatasources; - } - - /** - * {@inheritDoc} - */ - public DatasourceType initDataSource(final DatasourceType dataSource) { - - this.initConnectionManagerConfiguration(dataSource.getConnectionManagerConfiguration()); - this.initDatasourceConfiguration(dataSource.getDatasourceConfiguration()); - - return dataSource; - } - - /** - * {@inheritDoc} - */ - public Properties getProperties(final DatasourceType dataSource) { - // TODO use constants? (Mickael) - // Yes, they are even defined in DBMConstants AFAIK - Properties props = new Properties(); - DatasourceConfigurationType dsConfig = dataSource.getDatasourceConfiguration(); - ConnectionManagerConfigurationType cmConfig = dataSource.getConnectionManagerConfiguration(); - - props.setProperty(DBMConstants.NAME, dsConfig.getName()); - props.setProperty(DBMConstants.URL, dsConfig.getUrl()); - props.setProperty(DBMConstants.CLASSNAME, dsConfig.getClassname()); - props.setProperty(DBMConstants.USERNAME, dsConfig.getUsername()); - props.setProperty(DBMConstants.PASSWORD, dsConfig.getPassword()); - props.setProperty(DBMConstants.MAPPERNAME, dsConfig.getMapper()); - props.setProperty(DBMConstants.DESCRIPTION, dsConfig.getDescription()); - props.setProperty(DBMConstants.ISOLATIONLEVEL, dsConfig.getIsolationlevel()); - - props.setProperty(DBMConstants.CONNCHECKLEVEL, String.valueOf(cmConfig.getConnchecklevel())); - props.setProperty(DBMConstants.CONNMAXAGE, String.valueOf(cmConfig.getConnmaxage())); - props.setProperty(DBMConstants.MAXOPENTIME, String.valueOf(cmConfig.getMaxopentime())); - props.setProperty(DBMConstants.CONNTESTSTMT, cmConfig.getConnteststmt()); - props.setProperty(DBMConstants.INITCONPOOL, String.valueOf(cmConfig.getInitconpool())); - props.setProperty(DBMConstants.MINCONPOOL, String.valueOf(cmConfig.getMinconpool())); - props.setProperty(DBMConstants.MAXCONPOOL, String.valueOf(cmConfig.getMaxconpool())); - props.setProperty(DBMConstants.SAMPLINGPERIOD, String.valueOf(cmConfig.getSamplingperiod())); - props.setProperty(DBMConstants.MAXWAITTIME, String.valueOf(cmConfig.getMaxwaittime())); - props.setProperty(DBMConstants.MAXWAITERS, String.valueOf(cmConfig.getMaxwaiters())); - props.setProperty(DBMConstants.PSTMTMAX, String.valueOf(cmConfig.getPstmtmax())); - props.setProperty(PSTMT_CACHE_POLICY, cmConfig.getPstmtcachepolicy()); - - return props; - } - - /** - * This method is used to initialize the fields of a - * ConnectionmanagerConfigurationType. - * @param cmConfig the object which fields must be initialized. - */ - private void initConnectionManagerConfiguration(final ConnectionManagerConfigurationType cmConfig) { - String buffer; - - cmConfig.setConnchecklevel(Integer.valueOf(initParam(DBMConstants.DEF_CONNCHECKLEVEL, cmConfig.getConnchecklevel()))); - - buffer = initParam(DBMConstants.DEF_CONNMAXAGE, cmConfig.getConnmaxage()); - cmConfig.setConnmaxage(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_MAXOPENTIME, cmConfig.getMaxopentime()); - cmConfig.setMaxopentime(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_CONNTESTSTMT, cmConfig.getConnteststmt()); - cmConfig.setConnteststmt(buffer); - - buffer = initParam(DBMConstants.DEF_PSTMTMAX, cmConfig.getPstmtmax()); - cmConfig.setPstmtmax(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DEF_PSTMT_CACHE_POLICY, cmConfig.getPstmtcachepolicy()); - cmConfig.setPstmtcachepolicy(buffer); - - buffer = initParam(DBMConstants.DEF_INITCONPOOL, cmConfig.getInitconpool()); - cmConfig.setInitconpool(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_MINCONPOOL, cmConfig.getMinconpool()); - cmConfig.setMinconpool(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_MAXCONPOOL, cmConfig.getMaxconpool()); - cmConfig.setMaxconpool(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_MAXWAITTIME, cmConfig.getMaxwaittime()); - cmConfig.setMaxwaittime(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_MAXWAITERS, cmConfig.getMaxwaiters()); - cmConfig.setMaxwaiters(BigInteger.valueOf(Long.valueOf(buffer))); - - buffer = initParam(DBMConstants.DEF_SAMPLINGPERIOD, cmConfig.getSamplingperiod()); - cmConfig.setSamplingperiod(BigInteger.valueOf(Long.valueOf(buffer))); - } - - /** - * This method is used to initialize the fields of a - * DatasourceConfigurationType. - * @param dsConfig the object which fields must be initialized. - */ - private void initDatasourceConfiguration(final DatasourceConfigurationType dsConfig) { - String buffer; - - buffer = initParam(DBMConstants.NAME, dsConfig.getName()); - dsConfig.setName(buffer); - - buffer = initParam(DBMConstants.DEF_CLASSNAME, dsConfig.getClassname()); - dsConfig.setClassname(buffer); - - buffer = initParam(DBMConstants.DEF_URL, dsConfig.getUrl()); - dsConfig.setUrl(buffer); - - buffer = initParam(DBMConstants.DEF_DESCRIPTION, dsConfig.getDescription()); - dsConfig.setDescription(buffer); - - buffer = initParam(DBMConstants.DEF_USERNAME, dsConfig.getUsername()); - dsConfig.setUsername(buffer); - - buffer = initParam(DBMConstants.DEF_PASSWORD, dsConfig.getPassword()); - dsConfig.setPassword(buffer); - - buffer = initParam(DBMConstants.DEF_ISOLATIONLEVEL, dsConfig.getIsolationlevel()); - dsConfig.setIsolationlevel(buffer); - - buffer = initParam(DBMConstants.DEF_MAPPERNAME, dsConfig.getMapper()); - dsConfig.setMapper(buffer); - - } - - /** - * Returns the value of the parameter if it is not null or a default - * constant if not. - * @param paramDefaut represents the default constant value of the - * parameter. - * @param paramUser represents the old value of the parameter. - * @return a string which is the value of the parameter. - */ - private String initParam(final String paramDefaut, final Object paramUser) { - - if (paramUser == null) { - return paramDefaut; - } else { - return String.valueOf(paramUser); - } - - } -} - diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/NamespaceFilter.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/NamespaceFilter.java deleted file mode 100644 index 69a54a118b..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/deployer/reader/NamespaceFilter.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer.reader; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.XMLFilterImpl; - -/** - * Allows to filter a given namespace - * @author benoitf - */ -public class NamespaceFilter extends XMLFilterImpl { - - private String usedNamespaceUri; - - // State variable - private boolean addedNamespace = false; - - public NamespaceFilter(final String namespaceUri) { - super(); - this.usedNamespaceUri = namespaceUri; - } - - @Override - public void startDocument() throws SAXException { - super.startDocument(); - startControlledPrefixMapping(); - } - - @Override - public void startElement(final String arg0, final String arg1, final String arg2, final Attributes arg3) - throws SAXException { - super.startElement(this.usedNamespaceUri, arg1, arg2, arg3); - } - - @Override - public void endElement(final String arg0, final String arg1, final String arg2) throws SAXException { - super.endElement(this.usedNamespaceUri, arg1, arg2); - } - - @Override - public void startPrefixMapping(final String prefix, final String url) throws SAXException { - this.startControlledPrefixMapping(); - } - - private void startControlledPrefixMapping() throws SAXException { - - if (!this.addedNamespace) { - // We should add namespace since it is set and has not yet been - // done. - super.startPrefixMapping("", this.usedNamespaceUri); - - // Make sure we dont do it twice - this.addedNamespace = true; - } - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DSDefinitionExtensionListener.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DSDefinitionExtensionListener.java deleted file mode 100644 index 74e0816e78..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DSDefinitionExtensionListener.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.internal; - -import java.util.HashMap; -import java.util.Map; - -import javax.naming.Context; -import javax.naming.LinkRef; - -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.easybeans.api.event.naming.EZBJavaContextNamingEvent; -import org.ow2.jonas.datasource.DataSourceService; -import org.ow2.util.ee.metadata.common.api.struct.IJAnnotationSqlDataSourceDefinition; -import org.ow2.util.event.api.EventPriority; -import org.ow2.util.event.api.IEvent; -import org.ow2.util.event.api.IEventListener; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * @author Loic Albertin - */ -public class DSDefinitionExtensionListener implements IEventListener { - - private static Log logger = LogFactory.getLog(DSDefinitionExtensionListener.class); - - private DataSourceService dataSourceService; - - public DSDefinitionExtensionListener(DataSourceService dataSourceService) { - this.dataSourceService = dataSourceService; - } - - public void handle(IEvent event) { - EZBJavaContextNamingEvent javaContextNamingEvent = (EZBJavaContextNamingEvent) event; - IBeanInfo beanInfo = javaContextNamingEvent.getFactory().getBeanInfo(); - Context context = javaContextNamingEvent.getJavaContext(); - - - for (IJAnnotationSqlDataSourceDefinition dataSourceDefinition : beanInfo.getDataSourceDefinitions()) { - String normalizedDataSourceName = dataSourceDefinition.getName(); - if (normalizedDataSourceName.startsWith("java:")) { - normalizedDataSourceName = normalizedDataSourceName.replaceFirst("java:", ""); - } else { - normalizedDataSourceName = "comp/env/" + normalizedDataSourceName; - } - try { - - Map properties = new HashMap(); - for (int i = 0; i < dataSourceDefinition.getProperties().length; i++) { - String prop = dataSourceDefinition.getProperties()[i]; - String[] property = prop.split("="); - if (property.length == 2) { - properties.put(property[0], property[1]); - } - } - final String globalJndiName = dataSourceService - .deployDataSource(dataSourceDefinition.getClassName(), dataSourceDefinition.getDescription(), - dataSourceDefinition.getUrl(), dataSourceDefinition.getUser(), dataSourceDefinition.getPassword(), - dataSourceDefinition.getDatabaseName(), dataSourceDefinition.getPortNumber(), - dataSourceDefinition.getServerName(), dataSourceDefinition.getIsolationLevel(), - dataSourceDefinition.isTransactional(), dataSourceDefinition.getInitialPoolSize(), - dataSourceDefinition.getMaxPoolSize(), dataSourceDefinition.getMinPoolSize(), - dataSourceDefinition.getMaxIdleTime(), dataSourceDefinition.getMaxStatements(), - dataSourceDefinition.getLoginTimeout(), properties); - - - context.rebind(normalizedDataSourceName, new LinkRef(globalJndiName)); - } catch (Exception e) { - logger.error("Unable to define data source {0}", dataSourceDefinition.getName(), e); - } - } - - } - - public boolean accept(IEvent event) { - if (event instanceof EZBJavaContextNamingEvent) { - EZBJavaContextNamingEvent javaContextNamingEvent = (EZBJavaContextNamingEvent) event; - - // source/event-provider-id attribute is used to filter the destination - if ("java:".equals(javaContextNamingEvent.getEventProviderId())) { - return true; - } - } - return false; - } - - public EventPriority getPriority() { - return EventPriority.SYNC_NORM; - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DataSourceServiceImpl.java b/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DataSourceServiceImpl.java deleted file mode 100644 index fea8d326f7..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/java/org/ow2/jonas/datasource/internal/DataSourceServiceImpl.java +++ /dev/null @@ -1,492 +0,0 @@ -/* - * Copyright (C) 2012 Bull S. A. S. - * Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois - * This library is free software; you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Foundation - * version 2.1 of the License. - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * You should have received a copy of the GNU Lesser General Public License along with this - * program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth - * Floor, Boston, MA 02110-1301, USA. - */ - -package org.ow2.jonas.datasource.internal; - -import java.io.File; -import java.io.IOException; -import java.sql.Connection; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.ConnectionPoolDataSource; -import javax.sql.DataSource; -import javax.sql.XADataSource; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Instantiate; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Provides; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.jonas.Version; -import org.ow2.jonas.datasource.DataSourceService; -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.ow2.jonas.generators.raconfig.RAConfig; -import org.ow2.jonas.generators.raconfig.RAConfigException; -import org.ow2.jonas.lib.loader.OSGiClassLoader; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.deployer.UnsupportedDeployerException; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.event.api.IEventListener; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.execution.ExecutionResult; -import org.ow2.util.execution.IExecution; -import org.ow2.util.execution.helper.RunnableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.deploymentplan.maven2.Maven2Deployment; -import org.ow2.util.plan.bindings.exceptions.InvalidDeploymentException; -import org.ow2.util.plan.fetcher.api.IResourceFetcher; -import org.ow2.util.plan.fetcher.api.IResourceFetcherFactory; -import org.ow2.util.plan.fetcher.api.IResourceFetcherFactoryManager; -import org.ow2.util.plan.fetcher.api.exceptions.FetcherException; -import org.ow2.util.plan.fetcher.api.exceptions.FetcherFactoryException; -import org.ow2.util.plan.fetcher.api.exceptions.ResourceFetcherNotResolvedException; -import org.ow2.util.plan.fetcher.api.exceptions.ResourceNotFoundException; -import org.ow2.util.plan.repository.api.IRepositoryManager; - -/** - * @author Loic Albertin - */ -@Component(immediate = true) -@Instantiate -@Provides -public class DataSourceServiceImpl implements DataSourceService { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(DataSourceServiceImpl.class); - - /** - * Resource fetcher factory - */ - @Requires - protected IResourceFetcherFactoryManager resourceFetcherFactoryManager; - - /** - * The default RAR creation path. - */ - private static final String DEFAULT_ARCHIVE_PATH = "datasources-service" + File.separator + "datasources"; - - /** - * Repository manager - */ - @Requires - protected IRepositoryManager repositoryManager; - - /** - * The Deployer Manager that will be used to deploy RAR files. - */ - @Requires - private IDeployerManager deployerManager = null; - - /** - * Registry Service. - */ - @Requires - private RegistryService registryService; - - private InitialContext initialContext; - - /** - * Working directory - */ - protected File archiveFile = null; - - - /** - * The EventService. - */ - @Requires - private IEventService eventService = null; - - - private IEventListener eventListener = null; - - private List deployedDSJNDINames = new ArrayList(); - - /** - * Server Properties. - */ - @Requires - protected ServerProperties serverrarProperties; - - private String jdbcDMRarPath = null; - private String jdbcDSRarPath = null; - private String jdbcXARarPath = null; - - private String resolvePath(final Maven2Deployment deployment) { - try { - IResourceFetcher fetcher = this.resourceFetcherFactoryManager.getResourceFetcher(deployment); - fetcher.setRepositoryManager(repositoryManager); - fetcher.setDeployment(deployment); - fetcher.resolve(); - return fetcher.getResource().getPath(); - } catch (FetcherException e) { - e.printStackTrace(); - } catch (ResourceNotFoundException e) { - e.printStackTrace(); - } catch (InvalidDeploymentException e) { - e.printStackTrace(); - } catch (FetcherFactoryException e) { - e.printStackTrace(); - } catch (ResourceFetcherNotResolvedException e) { - e.printStackTrace(); - } - return null; - } - - @Validate - private void startup() { - logger.debug("DataSource Service starting"); - - /** - * Create working directory for the deployer. - */ - if (archiveFile == null) { - archiveFile = new File( - serverrarProperties.getWorkDirectory() + File.separator + DEFAULT_ARCHIVE_PATH + File.separator + - serverrarProperties.getServerName()); - archiveFile.mkdirs(); - } - - // Get the InitialContext in an execution block - IExecution - ictxGetter = new IExecution() { - public InitialContext execute() throws Exception { - return registryService.getRegistryContext(); - } - }; - - // Execute - ExecutionResult ictxResult = - new RunnableHelper().execute(getClass().getClassLoader(), ictxGetter); - // Throw an ServiceException if needed - if (ictxResult.hasException()) { - logger.error("Cannot create initial context when Resource service initializing"); - throw new ServiceException( - "Cannot create initial context when Resource service initializing", - ictxResult.getException()); - } - // Store the ref - initialContext = ictxResult.getResult(); - - if (eventService != null) { - eventListener = new DSDefinitionExtensionListener(this); - eventService.registerListener(eventListener, EZBServer.NAMING_EXTENSION_POINT); - } - - } - - @Invalidate - private void shutdown() { - if (eventService != null && eventListener != null) { - eventService.unregisterListener(eventListener); - } - - for (String deployedDSJNDIName : deployedDSJNDINames) { - try { - initialContext.unbind(deployedDSJNDIName); - } catch (NamingException e) { - logger.error("Unable to unbind data source " + deployedDSJNDIName + " from JNDI global context", e); - } - } - deployedDSJNDINames.clear(); - - } - - private void resolveJDBCRars() { - Maven2Deployment deployment; - if (jdbcDMRarPath == null) { - deployment = new Maven2Deployment(); - deployment.setGroupId("org.ow2.jonas"); - deployment.setArtifactId("jonas-jca-jdbc-dm"); - deployment.setVersion(Version.getNumber()); - deployment.setType("rar"); - - jdbcDMRarPath = resolvePath(deployment); - } - - if (jdbcDSRarPath == null) { - deployment = new Maven2Deployment(); - deployment.setGroupId("org.ow2.jonas"); - deployment.setArtifactId("jonas-jca-jdbc-ds"); - deployment.setVersion(Version.getNumber()); - deployment.setType("rar"); - - jdbcDSRarPath = resolvePath(deployment); - } - - if (jdbcXARarPath == null) { - deployment = new Maven2Deployment(); - deployment.setGroupId("org.ow2.jonas"); - deployment.setArtifactId("jonas-jca-jdbc-xa"); - deployment.setVersion(Version.getNumber()); - deployment.setType("rar"); - - jdbcXARarPath = resolvePath(deployment); - } - - } - - public String deployDataSource(final String className, final String description, - final String url, final String user, final String password, final String databaseName, final int portNumber, - final String serverName, final int isolationLevel, final boolean transactional, final int initialPoolSize, - final int maxPoolSize, final int minPoolSize, final int maxIdleTime, final int maxStatements, - final int loginTimeout, final Map properties) { - - //Generate rarProperties - final Properties rarProperties = generateRarProperties(className, description, url, - user, password, databaseName, portNumber, - serverName, isolationLevel, transactional, initialPoolSize, - maxPoolSize, minPoolSize, maxIdleTime, maxStatements, - loginTimeout, properties); - - final String jndiDataSourceName = generateDataSourceName(rarProperties); - - - try { - if (initialContext.lookup(jndiDataSourceName) != null) { - //A corresponding data source already exists. - return jndiDataSourceName; - } - } catch (NamingException e) { - logger.debug("Unable to lookup {0} into initial context trying to deploy a RAR for this datasource", - jndiDataSourceName); - } - - - rarProperties.setProperty(DBMConstants.NAME, jndiDataSourceName); - String fileOut = null; - String fileName = ""; - try { - fileName = "ds-" + jndiDataSourceName.replace('/', '_') + "-"; - fileName = fileName.replace(":", "-"); - fileOut = File.createTempFile(fileName, ".rar", archiveFile).getAbsolutePath(); - } catch (IOException e1) { - String msg = - "Error while creating temp file <" + fileName + ".rar> in directory <" + archiveFile.getPath() + ">"; - throw new ServiceException(msg, e1); - } - - this.resolveJDBCRars(); - try { - String fileIn = jdbcDMRarPath; - String rarLinkExtension = "DM"; - - IExecution> loadClassExecution = new IExecution>() { - public Class execute() throws Exception { - OSGiClassLoader osgiClassLoader = new OSGiClassLoader(); - return osgiClassLoader.loadClass(className); - } - }; - ExecutionResult> executionResult = - new RunnableHelper>() - .execute(OSGiClassLoader.class.getClassLoader(), loadClassExecution); - if (executionResult.hasException()) { - logger.fatal("Can't load JDBC driver", executionResult.getException()); - throw new ServiceException("Can't load JDBC driver", executionResult.getException()); - } - final Class clazz = executionResult.getResult(); - if (DataSource.class.isAssignableFrom(clazz)) { - fileIn = jdbcDSRarPath; - rarLinkExtension = "DS"; - } else if (XADataSource.class.isAssignableFrom(clazz)) { - fileIn = jdbcXARarPath; - rarLinkExtension = "XA"; - } else if (ConnectionPoolDataSource.class.isAssignableFrom(clazz)) { - fileIn = jdbcXARarPath; - rarLinkExtension = "XA"; - } - - logger.info("Generate RAR {0} -> {1}", fileIn, fileOut); - - - RAConfig.generateRars(rarProperties, "JOnASJDBC_" + rarLinkExtension, fileIn, fileOut); - } catch (RAConfigException e) { - logger.error("Failure to deploy datasource {0}", jndiDataSourceName); - throw new ServiceException("Failure to deploy datasource " + jndiDataSourceName, e); - } - - /* - * Deploy .rar 1- Create IArchive 2- Create Deployable 3- Deploy - */ - - // Create an IArchive - File generatedFile = new File(fileOut); - - if (!generatedFile.exists()) { - logger.error("RAR was not generated with RAConfig- {0}", fileOut); - throw new ServiceException("RAR was not generated with RAConfig- {0} " + fileOut); - } - - IArchive archiveRar = ArchiveManager.getInstance().getArchive(generatedFile); - if (archiveRar == null) { - throw new ServiceException("Null archive for file " + fileOut); - } - - // Create a Deployable - IDeployable rarDeployable = null; - try { - rarDeployable = DeployableHelper.getDeployable(archiveRar); - } catch (DeployableHelperException e) { - throw new ServiceException("Unable to deploy generated RAR ", e); - } - if (rarDeployable == null) { - throw new ServiceException("Null deployable for archive " + archiveRar); - } - - // Deploy - try { - this.deployerManager.deploy(rarDeployable); - } catch (DeployerException e) { - throw new ServiceException("Exception while deploying deployable " + rarDeployable, e); - } catch (UnsupportedDeployerException e) { - throw new ServiceException("No deployer found for deployable " + rarDeployable, e); - } - - // Here deployment succeeded. - - return jndiDataSourceName; - } - - private String generateDataSourceName(Properties rarProperties) { - //TODO implement a smartest and configurable caching algorithm - final StringBuilder sb = new StringBuilder("DS_"); - sb.append(rarProperties.getProperty(DBMConstants.CLASSNAME, "")); - sb.append(rarProperties.getProperty("datasource.databaseName", "")); - sb.append(rarProperties.getProperty("datasource.serverName", "")); - sb.append(rarProperties.getProperty("datasource.portNumber", "")); - sb.append(rarProperties.getProperty(DBMConstants.USERNAME, "")); - sb.append(rarProperties.getProperty(DBMConstants.PASSWORD, "")); - sb.append(rarProperties.getProperty(DBMConstants.ISOLATIONLEVEL, "")); - sb.append(rarProperties.getProperty(DBMConstants.INITCONPOOL, "")); - sb.append(rarProperties.getProperty(DBMConstants.MINCONPOOL, "")); - sb.append(rarProperties.getProperty(DBMConstants.MAXCONPOOL, "")); - sb.append(rarProperties.getProperty(DBMConstants.PSTMTMAX, "")); - sb.append(rarProperties.getProperty(DBMConstants.MAXOPENTIME, "")); - sb.append(rarProperties.getProperty("datasource.loginTimeout", "")); - return sb.toString(); - } - - private Properties generateRarProperties(String className, String description, String url, String user, - String password, String databaseName, int portNumber, String serverName, int isolationLevel, - boolean transactional, int initialPoolSize, int maxPoolSize, int minPoolSize, int maxIdleTime, - int maxStatements, int loginTimeout, Map properties) { - final Properties rarProperties = new Properties(); - //Use URL parameter only if no other more specific parameters exists - if (url != null && !url.equals("")) { - rarProperties.setProperty(DBMConstants.URL, url); - - //Extract parameters from url - // pattern items in parenthesis are optionals: ...://(user(:password)@)serverName(:portNumber)/databaseName - - final Matcher matcher = Pattern.compile(".+://([^/]+)/(.+)$").matcher(url); - if (matcher.matches() && matcher.groupCount() == 2) { - String dbConnection = matcher.group(1); - rarProperties.setProperty("datasource.databaseName", matcher.group(2)); - final int atIndex = dbConnection.indexOf("@"); - if (atIndex != -1) { - dbConnection = dbConnection.substring(atIndex + 1); - if (atIndex > 0) { - String userAndPass = dbConnection.substring(0, atIndex - 1); - final int colonIndex = userAndPass.indexOf(":"); - if (colonIndex != -1) { - rarProperties.setProperty(DBMConstants.PASSWORD, userAndPass.substring(colonIndex + 1)); - if (colonIndex > 0) { - userAndPass = userAndPass.substring(0, colonIndex - 1); - } - } - rarProperties.setProperty(DBMConstants.USERNAME, userAndPass); - } - } - final int colonIndex = dbConnection.indexOf(":"); - if (colonIndex != -1) { - rarProperties.setProperty("datasource.portNumber", dbConnection.substring(colonIndex + 1)); - if (colonIndex > 0) { - dbConnection = dbConnection.substring(0, colonIndex - 1); - } - } - rarProperties.setProperty("datasource.serverName", dbConnection); - } - } - if (user != null && !user.equals("")) { - rarProperties.setProperty(DBMConstants.USERNAME, user); - } - if (password != null && !password.equals("")) { - rarProperties.setProperty(DBMConstants.PASSWORD, password); - } - if (databaseName != null && !databaseName.equals("")) { - rarProperties.setProperty("datasource.databaseName", databaseName); - } - if (portNumber != -1) { - rarProperties.setProperty("datasource.portNumber", String.valueOf(portNumber)); - } - if (serverName != null && !serverName.equals("")) { - rarProperties.setProperty("datasource.serverName", serverName); - } - - rarProperties.setProperty(DBMConstants.CLASSNAME, className); - - if (description != null) { - rarProperties.setProperty(DBMConstants.DESCRIPTION, description); - } - if (isolationLevel == Connection.TRANSACTION_READ_COMMITTED) { - rarProperties.setProperty(DBMConstants.ISOLATIONLEVEL, "read_committed"); - } else if (isolationLevel == Connection.TRANSACTION_READ_UNCOMMITTED) { - rarProperties.setProperty(DBMConstants.ISOLATIONLEVEL, "read_uncommitted"); - } else if (isolationLevel == Connection.TRANSACTION_SERIALIZABLE) { - rarProperties.setProperty(DBMConstants.ISOLATIONLEVEL, "serializable"); - } else if (isolationLevel == Connection.TRANSACTION_REPEATABLE_READ) { - rarProperties.setProperty(DBMConstants.ISOLATIONLEVEL, "repeatable_read"); - } else { - rarProperties.setProperty(DBMConstants.ISOLATIONLEVEL, "none"); - } - - rarProperties.setProperty(DBMConstants.INITCONPOOL, String.valueOf(initialPoolSize)); - rarProperties.setProperty(DBMConstants.MINCONPOOL, String.valueOf(minPoolSize)); - rarProperties.setProperty(DBMConstants.MAXCONPOOL, String.valueOf(maxPoolSize)); - rarProperties.setProperty(DBMConstants.PSTMTMAX, String.valueOf(maxStatements)); - rarProperties.setProperty(DBMConstants.MAXOPENTIME, String.valueOf(maxIdleTime)); - - rarProperties.setProperty("datasource.loginTimeout", String.valueOf(loginTimeout)); - - //Add additional properties - if (properties != null) { - for (Map.Entry entry : properties.entrySet()) { - rarProperties.setProperty(entry.getKey(), entry.getValue()); - } - } - - return rarProperties; - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/main/resources/META-INF/jonas-services-datasource-core.bnd b/jonas/modules/services/jonas-datasources/core/src/main/resources/META-INF/jonas-services-datasource-core.bnd deleted file mode 100644 index 76d25427d4..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/resources/META-INF/jonas-services-datasource-core.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: $ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.datasource.deployer.*,org.ow2.jonas.datasource.internal.* - -Export-Package org.ow2.jonas.datasource,!* - -DynamicImport-Package com.sun.xml.* diff --git a/jonas/modules/services/jonas-datasources/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-datasources/core/src/main/resources/metadata.xml deleted file mode 100644 index cee05d1a40..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.0.xsd b/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.0.xsd deleted file mode 100644 index 3bfcc9b6f8..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.0.xsd +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - @(#)jonas-datasources-1.0.xsd 09/2010 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.1.xsd b/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.1.xsd deleted file mode 100644 index b42cbba8a2..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/main/resources/org/ow2/jonas/datasource/deployer/reader/jonas-datasources-1.1.xsd +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - @(#)jonas-datasources-1.1.xsd 04/2011 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableTest.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableTest.java deleted file mode 100644 index 3db2c06acb..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/DatasourceDeployableTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.datasource.deployer; - -import org.ow2.jonas.datasource.deployer.DatasourceDeployable; -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.plan.deploy.deployable.internal.xmlhelper.XmlHelper; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.testng.Assert; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; - -import java.io.File; - -public class DatasourceDeployableTest { - - /** - * Path to the test example for datasource. - */ - private static final String DATASOURCE_XML_PATH = - "src/test/resources/exemple-datasource.xml"; - - /** - * Datasource namespace. - */ - private static final String DATASOURCE_NS = - "http://jonas.ow2.org/ns/datasource/1.1"; - - /** - * Archive made from the datasource. - */ - private IFileArchive datasourceArchive = null; - - - /** - * xmlHelper - */ - private XmlHelper xmlHelper = null; - - /** - * DatasourceDeployable - */ - DatasourceDeployable dsDeployable = null; - - - - /** - * Prepares test data. - * @throws Exception - */ - @BeforeClass - public void init() throws Exception { - - datasourceArchive = (IFileArchive) ArchiveManager.getInstance() - .getArchive(new File(DATASOURCE_XML_PATH)); - Assert.assertNotNull(datasourceArchive); - xmlHelper = new XmlHelper(); - - } - - @Test - public void testDatasourceConstructor() throws Exception { - dsDeployable = new DatasourceDeployable(datasourceArchive); - Assert.assertNotNull(dsDeployable); - } - - @Test - public void testRootElementNameSpace() throws Exception { - Assert.assertEquals(xmlHelper.getRootElementNameSpace( - datasourceArchive.getFile()), DATASOURCE_NS); - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/FileDeployableFactoryTest.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/FileDeployableFactoryTest.java deleted file mode 100644 index c1f7dabc30..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/FileDeployableFactoryTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer; - -import java.io.File; - -import org.ow2.jonas.datasource.deployer.DatasourceDeployable; -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.plan.deploy.deployable.api.FileDeployable; -import org.ow2.util.plan.deploy.deployable.api.factory.IFileDeployableFactoryManager; -import org.ow2.util.plan.deploy.deployable.api.factory.XmlFileDeployableFactory; -import org.ow2.util.plan.deploy.deployable.impl.factory.DefaultFileDeployableFactoryManager; -import org.ow2.util.plan.deploy.deployable.impl.factory.XmlFileDeployableFactoryImpl; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * Test class for the deployable factories. - * @author Alexis RENOUX - */ -public class FileDeployableFactoryTest { - - /** - * Path to the test example for datasource. - */ - private static final String DATASOURCE_XML_PATH = - "src/test/resources/exemple-datasource.xml"; - - /** - * Datasource namespace. - */ - private static final String DATASOURCE_NS = - "http://jonas.ow2.org/ns/datasource/1.1"; - - /** - * Archive made from the datasource. - */ - private IFileArchive datasourceArchive = null; - - /** - * The xml deployable factory. - */ - private XmlFileDeployableFactory factory = null; - - /** - * The deployable factory manager. - */ - private IFileDeployableFactoryManager manager = null; - - /** - * Prepares test data. - * @throws Exception - */ - @BeforeClass - public void init() throws Exception { - // ClassCastException - datasourceArchive = (IFileArchive) ArchiveManager.getInstance() - .getArchive(new File(DATASOURCE_XML_PATH)); - Assert.assertNotNull(datasourceArchive); - - factory = new XmlFileDeployableFactoryImpl(); - factory.registerFileDeployable( - DatasourceDeployable.class, - DATASOURCE_NS); - - manager = new DefaultFileDeployableFactoryManager(); - manager.addFileDeployableFactory(factory); - } - - /** - * Test datasource conversion with the factory. - * @throws Exception - */ - @Test - public void convertDatasourceArchiveToDeployable() throws Exception { - FileDeployable fileDeployable = factory.getFileDeployable(datasourceArchive); - Assert.assertEquals(fileDeployable.getClass(),DatasourceDeployable.class); - } - - /** - * Test datasource conversion with the manager. - * @throws Exception - */ - @Test - public void convertDatasourceArchiveWithManager() throws Exception { - FileDeployable fileDeployable = manager.getFileDeployable(datasourceArchive); - Assert.assertEquals(fileDeployable.getClass(),DatasourceDeployable.class); - } - - - /** - * Test deployment plan conversion with the DeployableHelper+factory. - * @throws Exception - */ - @Test - public void convertWithDeployableHelper() throws Exception { - DeployableHelper.setFileDeployableFactory(factory); - IDeployable deployable = DeployableHelper.getDeployable(datasourceArchive); - Assert.assertEquals(deployable.getClass(), DatasourceDeployable.class); - } - - /** - * Test deployment plan conversion with the DeployableHelper+manager. - * @throws Exception - */ - @Test - public void convertWithDeployableHelperAndManager() throws Exception { - DeployableHelper.setFileDeployableFactory(manager); - IDeployable deployable = DeployableHelper.getDeployable(datasourceArchive); - Assert.assertEquals(deployable.getClass(), DatasourceDeployable.class); - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestDatasourceDeployer.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestDatasourceDeployer.java deleted file mode 100644 index 86bf5d5ec1..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestDatasourceDeployer.java +++ /dev/null @@ -1,173 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.datasource.deployer; - -import java.io.File; - -import org.ow2.jonas.Version; -import org.ow2.util.archive.api.IFileArchive; -import org.ow2.util.archive.impl.FileArchiveImpl; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.DeployerManager; -import org.testng.Assert; -import org.testng.FileAssert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.ow2.jonas.properties.ServerProperties; -import java.util.Properties; - - -/** - * Test class for the DatasourceDeployer. - * What needs to be tested : - * - Given a Datasource XML file, the deployer accepts to deploy it - * - a RAR file is generated - * - The jonas-rar.xml is inside and contains the required data - * - undeployment works - * @author Alexis Renoux. - * @author Mickaël LEDUQUE. - */ -public class TestDatasourceDeployer { - - /** - * The XML File. - */ - private File xmlfile = null; - - /** - * The archive. - */ - private IFileArchive archive = null; - - /** - * The deployable. - */ - private DatasourceDeployable deployable = null; - - /** - * The datasource deployer. - */ - private DatasourceDeployer datasourceDeployer; - - /** - * The directory to resources. - */ - private static final String TEST_XML_DIR = "src" + File.separator + "test" + File.separator + "resources"; - - /** - * The path to the datasource test file. - */ - private static final String TEST_XML_PATH = TEST_XML_DIR + File.separator + "datasources.xml"; - - /** - * The fake rar deployer. - */ - private TestRarDeployer rarDeployer; - - @BeforeClass - public void init() throws Exception { - xmlfile = new File(TEST_XML_PATH); - archive = new FileArchiveImpl(xmlfile); - datasourceDeployer = new DatasourceDeployer(); - datasourceDeployer.setServerProperties(new MyProperties()); - datasourceDeployer.setDmRar(System.getProperty("rar.path")); - deployable = new DatasourceDeployable(archive); - DeployerManager deployerManager = new DeployerManager(); - rarDeployer = new TestRarDeployer(); - deployerManager.register(rarDeployer); - datasourceDeployer.setDeployerManager(deployerManager); - - } - - @Test() - public void deployerSupportsDeployable() { - Assert.assertTrue(datasourceDeployer.supports(deployable)); - } - - @Test(dependsOnMethods = {"deployerSupportsDeployable"}) - public void tryDeploy() throws Exception { - datasourceDeployer.deploy(deployable); - } - - @Test(dependsOnMethods = {"tryDeploy"}) - public void rarDeployed() throws DeployerException { - Assert.assertTrue(this.datasourceDeployer.isDeployed(deployable)); - Assert.assertEquals(this.rarDeployer.getDeployed().size(), 2); - } - - private class MyProperties implements ServerProperties { - - - public String getValue(String key) { - return System.getenv("JONAS_ROOT"); - } - - public String getValue(String key, String defaultVal) { - return defaultVal; - } - - public boolean getValueAsBoolean(String key, boolean def) { - return def; - } - - public String[] getValueAsArray(String key) { - String [] str = new String[5]; - return str; - } - - public String getDomainName() { - return "domain"; - } - - public String getServerName() { - return "server"; - } - - public String getPropFileName() { - return "file"; - } - - public Properties getConfigFileEnv() { - return new Properties(); - } - - public String getVersionsFile() { - return "file"; - } - - public boolean isMaster() { - return false; - } - - public boolean isDevelopment() { - return false; - } - - public String getWorkDirectory() { - return System.getProperty("java.io.tmpdir") ; - - } - - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestRarDeployer.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestRarDeployer.java deleted file mode 100644 index 5e735e91cf..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/TestRarDeployer.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.datasource.deployer; - -import java.util.ArrayList; -import java.util.List; - -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.RARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployer; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployerList; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Fake RAR deployer for the tests. - * @author mleduque - * - */ -public class TestRarDeployer extends AbsDeployerList implements IDeployer { - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(TestRarDeployer.class); - - /** - * The deployed deployables. - */ - private List> deployed = new ArrayList>(); - - /** - * {@inheritDoc} - */ - public void deploy(final IDeployable deployable) throws DeployerException { - logger.info("Deploying deployable {0}", deployable); - if (deployable != null && supports(deployable)) { - logger.info("Deployable {0} supported by this deployer.", deployable); - this.deployed.add(deployable); - } - } - - /** - * {@inheritDoc} - */ - public boolean isDeployed(final IDeployable deployable) throws DeployerException { - logger.info("Deployed objects : {0}", this.deployed); - return (this.deployed.contains(deployable)); - } - - /** - * {@inheritDoc} - */ - public boolean supports(final IDeployable deployable) { - return (RARDeployable.class.isAssignableFrom(deployable.getClass())); - } - - /** - * {@inheritDoc} - */ - public void undeploy(final IDeployable deployable) throws DeployerException { - if (deployable != null && supports(deployable)) { - if (!isDeployed(deployable)) { - throw new DeployerException("Deplyable is not deployed."); - } - this.deployed.remove(deployable); - } else { - throw new DeployerException("Invalid deployable"); - } - } - - /** - * Returns the list of deployed objects. - * @return the list of deployed objects. - */ - public List> getDeployed() { - return this.deployed; - } - -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceReaderTest.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceReaderTest.java deleted file mode 100644 index 56a138b2b6..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceReaderTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer.reader; - -import java.io.File; -import java.util.List; - -import org.ow2.jonas.datasource.deployer.binding.DatasourceType; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * This is the class test of the XmlTransform class. - * @author Rodrigue SOUBEIGA - */ - -public class DatasourceReaderTest { - - /** - * Path to the valid xml file for datasource. - */ - private static final String DATASOURCE_VALID_XML_PATH = "src/test/resources/exemple-datasource-good.xml"; - - /** - * The list of DatasourceType provide by the xml file. - */ - private List datasourceList = null; - - /** - * The instance of XmlTransfor class it is used in order to test the - * differents method of the XmlTransform class. - */ - private DatasourceXmlReader classtransform; - - /** - * The file object created from the xmlFile. - */ - private File datasourceFile; - - /** - * The method used to initialise the different objects needed to execute - * tests methods. - */ - @BeforeClass - public void init() { - this.datasourceFile = new File(DATASOURCE_VALID_XML_PATH); - - this.classtransform = new DatasourceXmlReader(); - - } - - /** - * We test if the xml file exists. - */ - @Test - public void fileExist() { - Assert.assertTrue(datasourceFile.exists()); - } - - /** - * Test of the extraction of the datasourceType list from the xml file. - * @throws Exception - */ - - @Test - public void extractDataSourcesTest() throws Exception { - - datasourceList = classtransform.extractDataSources(datasourceFile).getDatasources(); - Assert.assertNotNull(datasourceList, "Datasources unmarshalling failed"); - - } - - /** - * Test of the DatasourceType initialisation. - */ - @Test(dependsOnMethods = {"datasoureConfigurationContentsTest"}) - public void initdataSourceTest() { - for (DatasourceType ds : datasourceList) { - ds.getConnectionManagerConfiguration().setConnteststmt(null); - ds = classtransform.initDataSource(ds); - String response = ds.getConnectionManagerConfiguration().getConnteststmt(); - Assert.assertNotNull(response, "Initialisation failure : connteststmt."); - - ds.getDatasourceConfiguration().setUsername(null); - ds = classtransform.initDataSource(ds); - response = ds.getDatasourceConfiguration().getUsername(); - Assert.assertNotNull(response, "Initialisation failure : username."); - - } - } - - /** - * Test of the DatasourceConfiguration initialisation with a specific xml - * file. - */ - @Test(dependsOnMethods = {"extractDataSourcesTest"}) - public void datasoureConfigurationContentsTest() { - // Check the first datasource - DatasourceType ds1 = datasourceList.get(0); - Assert.assertEquals(ds1.getDatasourceConfiguration().getName(), "jdbc_1"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getUrl(), "jdbc:oracle:thin://localhost:1521/db_oracle"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getClassname(), "oracle.jdbc.driver.OracleDriver"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getUsername(), "jonasoracle"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getPassword(), "jonaspassoracle"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getMapper(), "rdb.oracle"); - Assert.assertEquals(ds1.getDatasourceConfiguration().getDescription(), null); - Assert.assertEquals(ds1.getDatasourceConfiguration().getIsolationlevel(), null); - - // Check the second datasource - DatasourceType ds2 = datasourceList.get(1); - Assert.assertEquals(ds2.getDatasourceConfiguration().getName(), "jdbc_1"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getUrl(), "jdbc:hsqldb:hsql://localhost:9001/db_jonas"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getClassname(), "org.hsqldb.jdbcDriver"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getUsername(), "jonas"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getPassword(), "jonas"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getMapper(), "rdb.hsql"); - Assert.assertEquals(ds2.getDatasourceConfiguration().getDescription(), null); - Assert.assertEquals(ds2.getDatasourceConfiguration().getIsolationlevel(), null); - - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidatorTest.java b/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidatorTest.java deleted file mode 100644 index f242467710..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/java/org/ow2/jonas/datasource/deployer/reader/DatasourceValidatorTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.datasource.deployer.reader; - -import java.io.File; -import java.io.IOException; - -import javax.xml.parsers.ParserConfigurationException; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.ExpectedExceptions; -import org.testng.annotations.Test; -import org.testng.Assert; - -import org.xml.sax.SAXException; - -public class DatasourceValidatorTest { - - /** - * Path to the valid xml file for datasource. - */ - private static final String DATASOURCE_VALID_XML_PATH = - "src/test/resources/exemple-datasource-good.xml"; - - /** - * Path to the invalide xml file for datasource. - */ - private static final String DATASOURCE_INVALID_XML_PATH = - "src/test/resources/exemple-datasource-bad.xml"; - - /** - * Valid XML File - */ - private File goodXML; - - - /** - * Invalid XML File - */ - private File badXML; - - @BeforeClass - public void init(){ - goodXML = new File(DATASOURCE_VALID_XML_PATH); - Assert.assertNotNull(goodXML); - - badXML = new File(DATASOURCE_INVALID_XML_PATH); - Assert.assertNotNull(badXML); - } - - @Test - public void testValidXmlFile() throws Exception { - DatasourceValidator xmlTest = null; - xmlTest = new DatasourceValidator(goodXML); - Assert.assertFalse(xmlTest == null); - } - - - @Test(expectedExceptions = {SAXException.class}) - public void testInvalidXmlFile() throws SAXException, ParserConfigurationException, IOException { - DatasourceValidator xmlTest = new DatasourceValidator(badXML); - - } -} diff --git a/jonas/modules/services/jonas-datasources/core/src/test/resources/datasources.xml b/jonas/modules/services/jonas-datasources/core/src/test/resources/datasources.xml deleted file mode 100644 index 25ecb18ddc..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/resources/datasources.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - jdbc_1 - jdbc:oracle:thin://localhost:1521/db_oracle - oracle.jdbc.driver.OracleDriver - jonasoracle - jonaspassoracle - rdb.oracle - - - 0 - 600 - select 1 - 5 - 100 - 100 - 50 - List - - - - - - jdbc_2 - jdbc:hsqldb:hsql://localhost:9001/db_jonas - org.hsqldb.jdbcDriver - jonas - jonas - rdb.hsql - - - 0 - 1448 - 60 - string - 1 - 10 - 100 - 30 - 5 - 100 - - - diff --git a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-bad.xml b/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-bad.xml deleted file mode 100644 index 8eb7db0488..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-bad.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - incorrect - - diff --git a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-good.xml b/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-good.xml deleted file mode 100644 index fa7ffc556a..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource-good.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - jdbc_1 - jdbc:oracle:thin://localhost:1521/db_oracle - oracle.jdbc.driver.OracleDriver - jonasoracle - jonaspassoracle - rdb.oracle - - - 0 - 4167260737 - string - 5 - 10 - 100 - 899460641 - 394024595 - 150826366 - Map - - - - - - jdbc_1 - jdbc:hsqldb:hsql://localhost:9001/db_jonas - org.hsqldb.jdbcDriver - jonas - jonas - rdb.hsql - - - 0 - 1448 - 60 - string - 15 - 100 - 577956569 - 5 - 100 - - - diff --git a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource.xml b/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource.xml deleted file mode 100644 index 02a6d627c0..0000000000 --- a/jonas/modules/services/jonas-datasources/core/src/test/resources/exemple-datasource.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - jdbc_1 - jdbc:oacle:thin://localhost:1521/db_oracle - oracle.jdbc.driver.OracleDriver - jonasoracle - jonaspassoracle - rdb.oracle - - - 0 - 4167260737 - string - 5 - 10 - 100 - 899460641 - 394024595 - 150826366 - Map - - - - - - jdbc_1 - jdbc:hsqldb:hsql://localhost:9001/db_jonas - org.hsqldb.jdbcDriver - jonas - jonas - rdb.hsql - - - 0 - 1448 - 60 - string - 15 - 100 - 577956569 - 5 - 100 - - - diff --git a/jonas/modules/services/jonas-datasources/pom.xml b/jonas/modules/services/jonas-datasources/pom.xml deleted file mode 100644 index c174a1cd75..0000000000 --- a/jonas/modules/services/jonas-datasources/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-services-datasource - pom - JOnAS :: Services :: Datasource :: Deployer - Deployer for datasource data - bundle version - - core - - diff --git a/jonas/modules/services/jonas-db/base/ant/pom.xml b/jonas/modules/services/jonas-db/base/ant/pom.xml deleted file mode 100644 index 31ce295934..0000000000 --- a/jonas/modules/services/jonas-db/base/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-db-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-db-base-ant - jar - JOnAS :: Services :: DB :: Base :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-db/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/base/Db.java b/jonas/modules/services/jonas-db/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/base/Db.java deleted file mode 100644 index 78f43bc2e2..0000000000 --- a/jonas/modules/services/jonas-db/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/base/Db.java +++ /dev/null @@ -1,225 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.db.base; - -import java.io.File; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -/** - * Allow to configure the DB service. - * @author Florent Benoit - */ -public abstract class Db extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - protected static final String INFO = "[DB] "; - - /** - * Name of the property for changing the port. - */ - private static final String PORT_PROPERTY = "jonas.service.db.port"; - - /** - * Name of the property for changing the database name - */ - private static final String DB_NAME = "jonas.service.db.dbname"; - - /** - * Name of the property for changing login and password - */ - private static final String USERS = "jonas.service.db.users"; - - /** - * Name of the property for changing the db class - */ - protected final static String DB_CLASS_PROPERTY = "jonas.service.db.class"; - - /** - * Default database name - */ - protected final static String DEFAULT_DATABASE = "db_jonas"; - - /** - * Default user - */ - public final static String DEFAULT_USER = "jonas"; - - /** - * Default password - */ - public final static String DEFAULT_PASSWORD = "jonas"; - - /** - * Default host - */ - protected final static String DEFAULT_HOST = "localhost"; - - /** - * Default port number - */ - protected final static String DEFAULT_PORT = "9001"; - - /** - * Port number. - */ - protected String portNumber = null; - - /** - * Name of the database - */ - protected String dbName = null; - - /** - * Login and password of users - */ - protected String users = null; - - /** - * Default constructor. - */ - public Db() { - super(); - } - - /** - * Set the port number for the Db service. - * @param portNumber the port for the Db service - */ - public void setPort(final String portNumber) { - this.portNumber = portNumber; - } - - /*** - * Set the name of the Database - * @param dbName name of the database - */ - public void setDbName(String dbName) { - this.dbName = dbName; - } - - /** - * Set all login and password of all users - * @param users login:password of all users - */ - public void setUsers(String users) { - this.users = users; - } - - /** - * @return db users - */ - public String getUsers() { - return this.users; - } - - /** - * @return the pair of username,password of the first user - */ - public AbstractMap.SimpleEntry getFirstUsernameAndPassword() { - //search of the first user - StringTokenizer stringTokenizer = new StringTokenizer(this.users.trim(), ","); - String firstUser = null; - if (stringTokenizer.hasMoreElements()) { - firstUser = stringTokenizer.nextElement().toString(); - } - stringTokenizer = new StringTokenizer(firstUser.trim(), ":"); - //addition of the login - if (stringTokenizer.hasMoreElements()) { - String login = stringTokenizer.nextElement().toString(); - //addition of the password - if (stringTokenizer.hasMoreElements()) { - String password = stringTokenizer.nextElement().toString(); - return new AbstractMap.SimpleEntry(login, password); - } - } - - return new AbstractMap.SimpleEntry(DEFAULT_USER, DEFAULT_PASSWORD); - } - - /** - * Check the properties. - */ - private void checkProperties() { - if (portNumber == null) { - throw new BuildException(INFO + "Property 'portNumber' is missing."); - } - } - - /** - * @param host Hostname - * @return the url of the database - */ - public abstract String getUrl(final String host); - - /** - * @return classname of the database - */ - public abstract String getClassname(); - - /** - * @return the mapper of the database - */ - public abstract String getMapper(); - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - - JTask jTask = new JTask(); - jTask.setDestDir(this.destDir); - jTask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - PORT_PROPERTY, portNumber, false); - - if (this.dbName != null) { - jTask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - DB_NAME, this.dbName, false); - } - if (this.users != null) { - jTask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - USERS, this.users, false); - } - - addTask(jTask); - - } -} diff --git a/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.properties.template b/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.properties.template deleted file mode 100644 index 81533479f1..0000000000 --- a/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -#Db -db.port=9001 -%db.defaultname% -db.dbName=db_jonas -db.users=jonas:jonas \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.xml b/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.xml deleted file mode 100644 index b2ec55aa24..0000000000 --- a/jonas/modules/services/jonas-db/base/ant/src/main/resources/build-db.xml +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/base/core/pom.xml b/jonas/modules/services/jonas-db/base/core/pom.xml deleted file mode 100644 index 9fe8800220..0000000000 --- a/jonas/modules/services/jonas-db/base/core/pom.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - jonas-db-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-db-base-core - JOnAS :: Services :: DB :: Base :: Core - bundle - - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImpl.java b/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImpl.java deleted file mode 100644 index 1c0503c8da..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImpl.java +++ /dev/null @@ -1,258 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.db.base; - -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectName; - -/** - * Abstract database service to be implemented by implementation of Java - * databases. - * @author Florent Benoit - */ -public abstract class AbsDBServiceImpl extends AbsServiceImpl { - - /** - * Property for the default database name. - */ - private static final String DEFAULT_DATABASE_NAME = "db_jonas"; - - /** - * Logger used by this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DB_PREFIX); - - /** - * Users' List. - */ - private List users; - - /** - * DB port (null means default). - */ - private String port = null; - - /** - * Database name. - */ - private String dbName = DEFAULT_DATABASE_NAME; - - /** - * The{@link JmxService} - */ - protected JmxService jmxService; - - /** - * The {@link ObjectName} associate to the database MBean - */ - protected ObjectName objectName; - - /** - * port number used. - */ - protected String portNumber = null; - - /** - * Constructor initialization. - */ - public AbsDBServiceImpl() { - // Init user list - this.users = new ArrayList(); - } - - /** - * Transform the pair user:pass into User instances. - * @param users String of user/password (separated by a ":") - */ - public void setUsers(final String users) { - List configuredUsers = convertToList(users); - - // Convert String user to real User. - for (String user : configuredUsers) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding user/password '" + user + "'."); - } - - StringTokenizer st = new StringTokenizer(user, ":"); - String name = st.nextToken(); - String pass = ""; - if (st.hasMoreTokens()) { - pass = st.nextToken(); - } - this.users.add(new User(name, pass)); - } - - } - - /** - * @param port Database port - */ - public void setPort(final String port) { - this.port = port; - } - - /** - * @param db Database name - */ - public void setDbname(final String db) { - this.dbName = db; - } - - /** - * Create a database with the specified arguments. Need to be implemented by - * classes extending this one. - * @param users user/password (separated by a ":") - * @param databaseName name of the database - * @param portNumber port number of the database - */ - protected abstract void initServer(List users, String databaseName, String portNumber) throws ServiceException; - - /** - * Start the service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - // Start the DB server - initServer(users, dbName, port); - - //init the DB ObjectName - initObjectName(); - - //register the MBean - registerMBean(); - } - - /** - * Stop the service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - } - - /** - * @return the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - this.jmxService = null; - } - - /** - * Init DB ObjectName - */ - private void initObjectName() { - final String pattern = this.jmxService.getDomainName() + ":type=service,name=db"; - try { - this.objectName = new ObjectName(pattern); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.ERROR, "Cannot instanciate ObjectName with pattern '" + pattern, e); - } - } - - /** - * Register DB MBean - */ - protected void registerMBean() { - if (this.objectName != null) { - try { - this.jmxService.getJmxServer().registerMBean(this, objectName); - } catch (InstanceAlreadyExistsException e) { - logger.log(BasicLevel.ERROR, "Cannot register MBean with ObjectName " + objectName, e); - } catch (MBeanRegistrationException e) { - logger.log(BasicLevel.ERROR, "Cannot register MBean with ObjectName " + objectName, e); - } catch (NotCompliantMBeanException e) { - logger.log(BasicLevel.ERROR, "Cannot register MBean with ObjectName " + objectName, e); - } - } - } - - /** - * {@inheritDoc} - */ - public String getPortNumber() { - return this.portNumber; - } - - /** - * @return the name of the db - */ - public String getDbName() { - return this.dbName; - } - - /** - * @return the list of pair of - */ - public String getDbUsers() { - StringBuilder stringBuilder = new StringBuilder(); - for (User user: this.users) { - stringBuilder.append(user.getUserName() + ":" + user.getPassword() + ","); - } - String users = stringBuilder.toString(); - if (users.length() > 0) { - return users.substring(0, users.length() - 1); - } else { - return null; - } - } -} diff --git a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImplMBean.java b/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImplMBean.java deleted file mode 100644 index 65c7d3e81f..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/AbsDBServiceImplMBean.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2012 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.base; - -/** - * MBean interface for the Database service - * @author Florent Benoit - */ -public interface AbsDBServiceImplMBean { - - /** - * @return the BD port - */ - String getPortNumber(); - - /** - * @return the name of the db - */ - String getDbName(); - - /** - * @return the list of pair of - */ - String getDbUsers(); -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/DbEndpointBuilder.java b/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/DbEndpointBuilder.java deleted file mode 100644 index 94809cabc3..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/DbEndpointBuilder.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.base; - -import org.ow2.jonas.endpoint.collector.Endpoint; -import org.ow2.jonas.endpoint.collector.IEndpoint; -import org.ow2.jonas.endpoint.collector.IEndpointBuilder; -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.jmx.JmxService; - -import javax.management.ObjectName; -import java.util.regex.Pattern; - -/** - * DB {@code IEndpointBuilder} implementation - */ -public class DbEndpointBuilder implements IEndpointBuilder{ - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * {@inheritDoc} - */ - public boolean isSupport(final ObjectName objectName) { - String token = this.jmxService.getDomainName() + ":type=service,name=db"; - Pattern pattern = Pattern.compile(token); - return pattern.matcher(objectName.toString()).matches(); - } - - /** - * {@inheritDoc} - */ - public IEndpoint buildEndpoint(final ObjectName objectName) { - IEndpoint endpoint = new Endpoint(); - Object value = Util.getMBeanAttributeValue(objectName, "PortNumber", this.jmxService.getJmxServer()); - if (value != null) { - endpoint.setPort(String.valueOf(value)); - } - endpoint.setHost("localhost"); - - final String protocol = "db"; - endpoint.setProtocol(protocol); - endpoint.setSource(IEndpoint.SOURCE_PREFIX + protocol); - return endpoint; - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - this.jmxService = null; - } -} diff --git a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/User.java b/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/User.java deleted file mode 100644 index db838761a8..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/java/org/ow2/jonas/db/base/User.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.db.base; - -/** - * Class for the representation of a user with username and password. - * @author Florent Benoit - */ -public class User { - - /** - * Username. - */ - private String userName = null; - - /** - * Password. - */ - private String password = null; - - /** - * Constructor with a specific username and password. - * @param userName the user name - * @param password the password for the user - */ - public User(final String userName, final String password) { - this.userName = userName; - this.password = password; - } - - /** - * @return the password. - */ - public String getPassword() { - return password; - } - - /** - * @return the userName. - */ - public String getUserName() { - return userName; - } -} diff --git a/jonas/modules/services/jonas-db/base/core/src/main/resources/META-INF/jonas-db-base-core.bnd b/jonas/modules/services/jonas-db/base/core/src/main/resources/META-INF/jonas-db-base-core.bnd deleted file mode 100644 index 9b07d92cb7..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/resources/META-INF/jonas-db-base-core.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.db.base diff --git a/jonas/modules/services/jonas-db/base/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-db/base/core/src/main/resources/metadata.xml deleted file mode 100644 index 7d9d9eda07..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-db/base/core/src/main/templates/jonas-db.properties.template b/jonas/modules/services/jonas-db/base/core/src/main/templates/jonas-db.properties.template deleted file mode 100644 index f28bf1ad6b..0000000000 --- a/jonas/modules/services/jonas-db/base/core/src/main/templates/jonas-db.properties.template +++ /dev/null @@ -1,11 +0,0 @@ -# -###################### JOnAS DB service configuration -# -jonas.services db -# Set the name of the implementation class of the db service (h2 or hsqldb for example) -%jonas.service.db.class% -jonas.service.db.port 9001 -jonas.service.db.dbname db_jonas -jonas.service.db.users jonas:jonas -# Multiple users -#jonas.service.db.users jonas:jonas,login:password \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/base/pom.xml b/jonas/modules/services/jonas-db/base/pom.xml deleted file mode 100644 index 3c0ebea82e..0000000000 --- a/jonas/modules/services/jonas-db/base/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - org.ow2.jonas - jonas-db - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-db-base - JOnAS :: Services :: DB :: Base - - core - ant - - pom - - diff --git a/jonas/modules/services/jonas-db/h2/addon/pom.xml b/jonas/modules/services/jonas-db/h2/addon/pom.xml deleted file mode 100644 index c1894c716a..0000000000 --- a/jonas/modules/services/jonas-db/h2/addon/pom.xml +++ /dev/null @@ -1,181 +0,0 @@ - - - - - jonas-db-h2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: DB :: H2 :: Addon - jonas-db-h2-addon - pom - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - h2-addon-deployment-plan - - - org.ow2.jonas - jonas-db-base-core - ${project.version} - - - org.ow2.jonas - jonas-db-h2-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - addon-deployment-plan - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-db-h2-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/h2-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/addon/src/main/assembly/assembly.xml b/jonas/modules/services/jonas-db/h2/addon/src/main/assembly/assembly.xml deleted file mode 100644 index 970e36ae7c..0000000000 --- a/jonas/modules/services/jonas-db/h2/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - db-h2-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/configuration-resources/addon-deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/jonas-db/h2/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 9c2cbd5b4f..0000000000 --- a/jonas/modules/services/jonas-db/h2/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - db-h2 - - - JOnAS DB H2 Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.db - - - - - org.ow2.jonas.db.h2.H2DBServiceImpl - 9001 - db_jonas - jonas:jonas - - - - diff --git a/jonas/modules/services/jonas-db/h2/ant/pom.xml b/jonas/modules/services/jonas-db/h2/ant/pom.xml deleted file mode 100644 index d8dc752bd4..0000000000 --- a/jonas/modules/services/jonas-db/h2/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-db-h2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-db-h2-ant - bundle - JOnAS :: Services :: DB :: H2 :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-db-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-db/h2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/h2/DbH2.java b/jonas/modules/services/jonas-db/h2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/h2/DbH2.java deleted file mode 100644 index 5cdfac4a6d..0000000000 --- a/jonas/modules/services/jonas-db/h2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/h2/DbH2.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.db.h2; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.db.base.Db; - -import java.io.File; - -/** - * Allow to configure the DB H2 service. - * @author Jeremy Cazaux - */ -public class DbH2 extends Db { - - /** - * Name of the implementation class of the db service - */ - private final static String DB_CLASS = "org.ow2.jonas.db.h2.H2DBServiceImpl"; - - /** - * Name of the implementation class of H2 - */ - public final static String H2_CLASS_NAME = "org.h2.Driver"; - - /** - * H2 mapper - */ - public final static String H2_MAPPER = "rdb.hsql"; - - /** - * {@inheritDoc} - */ - @Override - public String getUrl(final String host) { - String hostname = host; - if (hostname == null) { - hostname = DEFAULT_HOST; - } - String port = this.portNumber; - if (port == null) { - port = DEFAULT_PORT; - } - String database = this.dbName; - if (database == null) { - database = DEFAULT_DATABASE; - } - return "jdbc:h2:tcp://" + hostname + ":" + port + "/" + database; - } - - /** - * {@inheritDoc} - */ - @Override - public String getClassname() { - return H2_CLASS_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public String getMapper() { - return H2_MAPPER; - } - - /** - * Execute all tasks - */ - public void execute() { - super.execute(); - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - JTask jTask = new JTask(); - jTask.setDestDir(this.destDir); - jTask.changeValueForKey(this.INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - this.DB_CLASS_PROPERTY, this.DB_CLASS, false); - addTask(jTask); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/antlib-db-h2.xml b/jonas/modules/services/jonas-db/h2/ant/src/main/resources/antlib-db-h2.xml deleted file mode 100644 index 2ea1960e2a..0000000000 --- a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/antlib-db-h2.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.properties b/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.properties deleted file mode 100644 index 18945f3fec..0000000000 --- a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.properties +++ /dev/null @@ -1 +0,0 @@ -db.defaultname=h2 \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.xml b/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.xml deleted file mode 100644 index 3e1a5ab5fd..0000000000 --- a/jonas/modules/services/jonas-db/h2/ant/src/main/resources/build-db-h2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/core/pom.xml b/jonas/modules/services/jonas-db/h2/core/pom.xml deleted file mode 100644 index a0aa12415d..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/pom.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - jonas-db-h2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-db-h2-core - bundle - JOnAS :: Services :: DB :: H2 :: Core - - - - org.ow2.jonas - jonas-db-base-core - ${project.version} - - - com.h2database - h2 - ${h2.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - h2-deployment-plan - - - org.ow2.jonas - jonas-db-h2-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImpl.java b/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImpl.java deleted file mode 100644 index b9cc189003..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImpl.java +++ /dev/null @@ -1,209 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.h2; - -import java.io.File; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.h2.engine.Constants; -import org.h2.tools.Server; -import org.ow2.jonas.db.DBService; -import org.ow2.jonas.db.base.AbsDBServiceImpl; -import org.ow2.jonas.db.base.AbsDBServiceImplMBean; -import org.ow2.jonas.db.base.User; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectName; - -/** - * Embeds the H2 database in JOnAS. - * @author Florent Benoit - */ -public class H2DBServiceImpl extends AbsDBServiceImpl implements DBService, H2DBServiceImplMBean { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(H2DBServiceImpl.class); - - /** - * List of users. - */ - private List users = null; - - /** - * Name of database. - */ - private String databaseName = null; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "9001"; - - /** - * H2 server. - */ - private Server server = null; - - /** - * Extra args list. - */ - private List extraArgs = null; - - /** - * Create a database with the specified arguments. - * @param users user/password (separated by a ":") - * @param databaseName name of the database - * @param portNumber port number of the database - */ - - @Override - protected void initServer(final List users, final String databaseName, final String portNumber) { - this.users = users; - if (portNumber != null) { - this.portNumber = portNumber; - } else { - this.portNumber = DEFAULT_PORT; - } - this.databaseName = databaseName; - - String baseDir = getServerProperties().getWorkDirectory() + File.separator + "h2" + File.separator + databaseName; - - // Build list of arguments - List argList = new ArrayList(); - - // Specify TCP port - argList.add("-tcpPort"); - argList.add(this.portNumber); - - // Specify base directory - argList.add("-baseDir"); - argList.add(baseDir); - - // extra args - if (extraArgs != null && extraArgs.size() > 0) { - argList.addAll(extraArgs); - } - - // Convert args into array - String[] args = argList.toArray(new String[argList.size()]); - - // Create server instance - try { - server = Server.createTcpServer(args); - } catch (SQLException e) { - throw new ServiceException("Unable to init the server", e); - } - - } - - /** - * Start the service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - super.doStart(); - logger.info("Starting H2 Server ''{0}'' on port ''{1}''", Constants.getVersion(), portNumber); - - try { - server.start(); - } catch (SQLException e) { - throw new ServiceException("Unable to start the H2 server", e); - } - - Connection conn = null; - Statement st = null; - try { - Class.forName("org.h2.Driver"); - conn = DriverManager.getConnection("jdbc:h2:tcp://localhost:" + portNumber + "/" + databaseName, "sa", - ""); - st = conn.createStatement(); - } catch (Exception e) { - throw new ServiceException("Cannot access to H2", e); - } - - // Drop users before recreating it - User user = null; - String userName = null; - String password = null; - for (Iterator it = users.iterator(); it.hasNext();) { - user = it.next(); - try { - password = user.getPassword(); - userName = user.getUserName(); - logger.info("Dropping and adding user ''{0}'' with password ''{1}''.", userName, password); - try { - st.execute("DROP USER " + userName); - } catch (Exception e) { - logger.debug("User ''{0}'' doesn't exists", userName, e); - } - st.execute("Create USER " + userName + " PASSWORD '" + password + "' ADMIN"); - } catch (Exception e) { - logger.error("Error while creating/adding user", e); - } - } - - try { - st.close(); - } catch (Exception e) { - logger.debug("Error while closing statement object", e); - } - } - - /** - * Define extra arguments that can be set on the server initialization. - * @param extraArgs the list of arguments to use - */ - public void setExtraArgs(final String extraArgs) { - this.extraArgs = convertToList(extraArgs); - } - - /** - * Stop the service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - super.doStop(); - - server.stop(); - logger.info("H2 Server ''{0}'' stopped.", Constants.getVersion()); - - } -} diff --git a/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImplMBean.java b/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImplMBean.java deleted file mode 100644 index 978235442c..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/src/main/java/org/ow2/jonas/db/h2/H2DBServiceImplMBean.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2012 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.h2; - -import org.ow2.jonas.db.base.AbsDBServiceImplMBean; - -/** - * H2 MBean - */ -public interface H2DBServiceImplMBean extends AbsDBServiceImplMBean { -} diff --git a/jonas/modules/services/jonas-db/h2/core/src/main/properties/jonas-db-h2.properties b/jonas/modules/services/jonas-db/h2/core/src/main/properties/jonas-db-h2.properties deleted file mode 100644 index 238254f724..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/src/main/properties/jonas-db-h2.properties +++ /dev/null @@ -1,5 +0,0 @@ -jonas.service.db.class org.ow2.jonas.db.h2.H2DBServiceImpl - -# Extra args when configuring the server (comma separated list) -# jonas.service.db.h2.extra-args -tcpAllowOthers -jonas.service.db.h2.extra-args \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/h2/core/src/main/resources/META-INF/jonas-db-h2-core.bnd b/jonas/modules/services/jonas-db/h2/core/src/main/resources/META-INF/jonas-db-h2-core.bnd deleted file mode 100644 index 65e28bcd05..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/src/main/resources/META-INF/jonas-db-h2-core.bnd +++ /dev/null @@ -1,38 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -# org.h2 contains the JDBC driver --exportcontents org.h2;version=${h2.version},\ - org.h2.jdbc;version=${h2.version},\ - org.h2.jdbcx;version=${h2.version} - -Private-Package org.ow2.jonas.db.h2 - -Import-Package org.apache.lucene.*;resolution:=optional,\ - org.slf4j.*;resolution:=optional,\ - javax.servlet.*;version="[2.5.0, 3.0.0]",\ - * - -Embed-Dependency h2;inline=true diff --git a/jonas/modules/services/jonas-db/h2/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-db/h2/core/src/main/resources/metadata.xml deleted file mode 100644 index 8207ac4270..0000000000 --- a/jonas/modules/services/jonas-db/h2/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-db/h2/pom.xml b/jonas/modules/services/jonas-db/h2/pom.xml deleted file mode 100644 index ee87da7f60..0000000000 --- a/jonas/modules/services/jonas-db/h2/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - org.ow2.jonas - jonas-db - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-db-h2 - JOnAS :: Services :: DB :: H2 - - core - ant - addon - - pom - diff --git a/jonas/modules/services/jonas-db/hsql/ant/pom.xml b/jonas/modules/services/jonas-db/hsql/ant/pom.xml deleted file mode 100644 index d41b61e8bc..0000000000 --- a/jonas/modules/services/jonas-db/hsql/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-db-hsql - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-db-hsql-ant - bundle - JOnAS :: Services :: DB :: HSQL :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-db-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-db/hsql/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/hsql/DbHsql.java b/jonas/modules/services/jonas-db/hsql/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/hsql/DbHsql.java deleted file mode 100644 index 1c4dafaad2..0000000000 --- a/jonas/modules/services/jonas-db/hsql/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/db/hsql/DbHsql.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.db.hsql; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; -import org.ow2.jonas.antmodular.jonasbase.db.base.Db; - -import java.io.File; - -/** - * Allow to configure the DB HSQL service. - * @author Jeremy Cazaux - */ -public class DbHsql extends Db { - - /** - * Name of the HSQL implementation class - */ - private final static String DB_CLASS = "org.ow2.jonas.db.hsqldb.HsqlDBServiceImpl"; - - - /** - * Name of the implementation class of H2 - */ - public final static String HSQL_CLASS_NAME = "org.hsqldb.jdbcDriver"; - - /** - * H2 mapper - */ - public final static String HSQL_MAPPER = "rdb.hsql"; - - /** - * {@inheritDoc} - */ - @Override - public String getUrl(final String host) { - String hostname = host; - if (hostname == null) { - hostname = DEFAULT_HOST; - } - String port = this.portNumber; - if (port == null) { - port = DEFAULT_PORT; - } - String database = this.dbName; - if (database == null) { - database = DEFAULT_DATABASE; - } - return "jdbc:hsqldb:hsql://" + hostname + ":" + port + "/" + database; - } - - /** - * {@inheritDoc} - */ - @Override - public String getClassname() { - return HSQL_CLASS_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public String getMapper() { - return HSQL_MAPPER; - } - - /** - * Execute all tasks - */ - public void execute() { - super.execute(); - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - JTask jTask = new JTask(); - jTask.setDestDir(this.destDir); - jTask.changeValueForKey(this.INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - this.DB_CLASS_PROPERTY, this.DB_CLASS, false); - addTask(jTask); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/antlib-db-hsql.xml b/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/antlib-db-hsql.xml deleted file mode 100644 index 674d222f29..0000000000 --- a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/antlib-db-hsql.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.properties b/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.properties deleted file mode 100644 index c72790dafa..0000000000 --- a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.properties +++ /dev/null @@ -1 +0,0 @@ -db.defaultname=hsql \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.xml b/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.xml deleted file mode 100644 index 50bdcbe091..0000000000 --- a/jonas/modules/services/jonas-db/hsql/ant/src/main/resources/build-db-hsql.xml +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/hsql/core/pom.xml b/jonas/modules/services/jonas-db/hsql/core/pom.xml deleted file mode 100644 index b86a2ea14a..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/pom.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - jonas-db-hsql - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-db-hsql-core - bundle - JOnAS :: Services :: DB :: HSQL :: Core - - - - org.ow2.jonas - jonas-db-base-core - ${project.version} - - - hsqldb - hsqldb - 1.8.0.7 - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImpl.java b/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImpl.java deleted file mode 100644 index 79b4a36c98..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImpl.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.hsqldb; - -import java.io.File; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.Iterator; -import java.util.List; - -import org.hsqldb.Server; -import org.hsqldb.ServerConstants; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.db.DBService; -import org.ow2.jonas.db.base.AbsDBServiceImpl; -import org.ow2.jonas.db.base.AbsDBServiceImplMBean; -import org.ow2.jonas.db.base.User; -import org.ow2.jonas.service.ServiceException; - -/** - * Embeds the HSQL database in JOnAS. - * @author Florent Benoit - */ -public class HsqlDBServiceImpl extends AbsDBServiceImpl implements DBService, HsqlDBServiceImplMBean { - - /** - * List of users. - */ - private List users = null; - - /** - * Name of database. - */ - private String databaseName = null; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "9001"; - - /** - * Sleep value. - */ - private static final int SLEEP_VALUE = 100; - - /** - * Max retry number. - */ - private static final int MAX_RETRY_NB = 20; - - /** - * HsqlDB server. - */ - private Server server = null; - - /** - * Create a database with the specified arguments. - * @param users user/password (separated by a ":") - * @param databaseName name of the database - * @param portNumber port number of the database - */ - - @Override - protected void initServer(final List users, final String databaseName, final String portNumber) throws ServiceException { - this.users = users; - if (portNumber != null) { - this.portNumber = portNumber; - } else { - this.portNumber = DEFAULT_PORT; - } - this.databaseName = databaseName; - - server = new Server(); - // Remove all traces if level != DEBUG - if (!getLogger().isLoggable(BasicLevel.DEBUG)) { - server.setLogWriter(null); - server.setErrWriter(null); - server.setSilent(true); - server.setTrace(false); - server.setLogWriter(null); - } else { - // Enable all traces : verbose mode (as user needs DEBUG) - server.setSilent(false); - server.setTrace(true); - } - - String baseDir = getServerProperties().getWorkDirectory() + File.separator + "hsqldb" + File.separator + databaseName; - String pString = ""; - if (portNumber != null) { - pString = ";port=" + portNumber; - } - String serverProps = "database.0=" + baseDir + ";dbname.0=" + databaseName + pString; - server.putPropertiesFromString(serverProps); - - } - - /** - * Start the service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - super.doStart(); - if (getLogger().isLoggable(BasicLevel.INFO)) { - getLogger().log(BasicLevel.INFO, "Starting " + server.getProductName() + " " - + server.getProductVersion() + " on port " + portNumber); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "serverState=" + server.getState()); - } - server.start(); - - // Wait the start - int retryNb = 0; - while (server.getState() != ServerConstants.SERVER_STATE_ONLINE) { - try { - Thread.sleep(SLEEP_VALUE); - } catch (InterruptedException ie) { - getLogger().log(BasicLevel.ERROR, "Can't wait that the service is online", ie); - } - // Error if server state is "SHUTDOWN" during a long period - // Maybe strange but 'SHUTDOWN' state seems to be an intermediate state during startup - retryNb++; - if (server.getState() == ServerConstants.SERVER_STATE_SHUTDOWN && retryNb >= MAX_RETRY_NB) { - Throwable t = server.getServerError(); - throw new ServiceException("The server was shutdown :", t); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "retry=" + retryNb + ", serverState=" + server.getState()); - } - } - - getLogger().log(BasicLevel.INFO, server.getProductName() + " started."); - Connection conn = null; - Statement st = null; - try { - - Class.forName("org.hsqldb.jdbcDriver"); - conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:" + portNumber + "/" + databaseName, "sa", - ""); - st = conn.createStatement(); - } catch (Exception e) { - throw new ServiceException("Cannot access to HSQL", e); - } - - // Drop users before recreating it - User user = null; - String userName = null; - String password = null; - ResultSet rs = null; - for (Iterator it = users.iterator(); it.hasNext();) { - user = it.next(); - try { - password = user.getPassword(); - userName = user.getUserName(); - getLogger().log(BasicLevel.INFO, - "Dropping and adding user '" + userName - + "' with password '" + password + "'."); - try { - rs = st.executeQuery("DROP USER " + userName); - } catch (Exception ee) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "User '" + userName + "' doesn't exists", ee); - } - } - rs = st.executeQuery("Create USER " + userName + " PASSWORD " + password + " ADMIN"); - rs.close(); - } catch (Exception e) { - getLogger().log(BasicLevel.ERROR, "Error while creating/adding user", e); - } - - } - - try { - st.close(); - } catch (Exception e) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Error while closing statement object", e); - } - } - - } - - /** - * Stop the service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - super.doStop(); - - server.shutdown(); - getLogger().log(BasicLevel.INFO, server.getProductName() + " stopped."); - - } -} diff --git a/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImplMBean.java b/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImplMBean.java deleted file mode 100644 index 218cf3e0cd..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/src/main/java/org/ow2/jonas/db/hsqldb/HsqlDBServiceImplMBean.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2012 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.db.hsqldb; - -import org.ow2.jonas.db.base.AbsDBServiceImplMBean; - -/** - * HSQL MBean interface - */ -public interface HsqlDBServiceImplMBean extends AbsDBServiceImplMBean { -} diff --git a/jonas/modules/services/jonas-db/hsql/core/src/main/properties/jonas-db-hsql.properties b/jonas/modules/services/jonas-db/hsql/core/src/main/properties/jonas-db-hsql.properties deleted file mode 100644 index c7bef92728..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/src/main/properties/jonas-db-hsql.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.db.class org.ow2.jonas.db.hsqldb.HsqlDBServiceImpl \ No newline at end of file diff --git a/jonas/modules/services/jonas-db/hsql/core/src/main/resources/META-INF/jonas-db-hsql-core.bnd b/jonas/modules/services/jonas-db/hsql/core/src/main/resources/META-INF/jonas-db-hsql-core.bnd deleted file mode 100644 index 5b11b5c6e1..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/src/main/resources/META-INF/jonas-db-hsql-core.bnd +++ /dev/null @@ -1,37 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - --exportcontents org.hsqldb,\ - org.hsqldb.jdbc - -Private-Package org.ow2.jonas.db.hsqldb - -# Exclude dot package from imports -Import-Package !.,\ - !sun.security.action,\ - javax.servlet.*;version="[2.5.0, 3.0.0]",\ - * - -Embed-Dependency hsqldb;inline=true diff --git a/jonas/modules/services/jonas-db/hsql/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-db/hsql/core/src/main/resources/metadata.xml deleted file mode 100644 index d7a1b97685..0000000000 --- a/jonas/modules/services/jonas-db/hsql/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-db/hsql/pom.xml b/jonas/modules/services/jonas-db/hsql/pom.xml deleted file mode 100644 index 0f7fb0add7..0000000000 --- a/jonas/modules/services/jonas-db/hsql/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - org.ow2.jonas - jonas-db - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-db-hsql - JOnAS :: Services :: DB :: HSQL - - core - ant - - pom - - diff --git a/jonas/modules/services/jonas-db/pom.xml b/jonas/modules/services/jonas-db/pom.xml deleted file mode 100644 index ed6be5640b..0000000000 --- a/jonas/modules/services/jonas-db/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-db - pom - JOnAS :: Services :: DB - - - - base - hsql - h2 - - diff --git a/jonas/modules/services/jonas-dbm/ant/pom.xml b/jonas/modules/services/jonas-dbm/ant/pom.xml deleted file mode 100644 index 86cd0d9336..0000000000 --- a/jonas/modules/services/jonas-dbm/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-dbm - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-dbm-ant - bundle - JOnAS :: Services :: DataBase Manager :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-dbm/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/dbm/Dbm.java b/jonas/modules/services/jonas-dbm/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/dbm/Dbm.java deleted file mode 100644 index 7c2011b0c2..0000000000 --- a/jonas/modules/services/jonas-dbm/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/dbm/Dbm.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.dbm; - -import java.io.File; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -/** - * Allow to configure the DBM service. - * @author Philippe Coq - */ -public class Dbm extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[DBM] "; - - /** - * Name of the property for changing datasource. - */ - private static final String DATASOURCES_PROPERTY = "jonas.service.dbm.datasources"; - - /** - * dataSource. - */ - private String dataSources = null; - - /** - * Default constructor. - */ - public Dbm() { - super(); - } - - /** - * Set the dataSources for the Dbm service. - * @param dataSources the dataSources for the Dbm service - */ - public void setdataSources(final String dataSources) { - final String none = "none"; - if (dataSources.equals(none)) { - this.dataSources = ""; - } else { - this.dataSources = dataSources; - } - } - - - /** - * Check the properties. - */ - private void checkProperties() { - if (dataSources == null) { - throw new BuildException(INFO + "Property 'dataSource ' is missing."); - } - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = destDir.getPath() + File.separator + "conf"; - JTask jtask = new JTask(); - jtask.setDestDir(destDir); - jtask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - DATASOURCES_PROPERTY, dataSources, false); - tasks.add(jtask); - executeAllTask(); - } -} diff --git a/jonas/modules/services/jonas-dbm/ant/src/main/resources/antlib-dbm.xml b/jonas/modules/services/jonas-dbm/ant/src/main/resources/antlib-dbm.xml deleted file mode 100644 index c595356ad4..0000000000 --- a/jonas/modules/services/jonas-dbm/ant/src/main/resources/antlib-dbm.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.properties.template b/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.properties.template deleted file mode 100644 index 4ee59c58cc..0000000000 --- a/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.properties.template +++ /dev/null @@ -1,2 +0,0 @@ -#Dbm -dbm.datasource.default=none \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.xml b/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.xml deleted file mode 100644 index 36cd099850..0000000000 --- a/jonas/modules/services/jonas-dbm/ant/src/main/resources/build-dbm.xml +++ /dev/null @@ -1,11 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/core/pom.xml b/jonas/modules/services/jonas-dbm/core/pom.xml deleted file mode 100644 index 91d824b813..0000000000 --- a/jonas/modules/services/jonas-dbm/core/pom.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - jonas-dbm - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-dbm-core - bundle - JOnAS :: Services :: DataBase Manager :: Core - - - - org.ow2.spec.osgi - ow2-jdbc-service-1.0-spec - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - org.ow2.spec.ee - ow2-jta-1.1-spec - - - commons-modeler - commons-modeler - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/DBMConstants.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/DBMConstants.java deleted file mode 100644 index 7a7f571943..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/DBMConstants.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal; - -/** - * Holds all the constants used in the 'dbm' service. - * @author Guillaume Sauthier - */ -public interface DBMConstants { - - // The Datasource configuration parameters - public static final String NAME = "datasource.name"; // JNDI name of the datasource - - public static final String CLASSNAME = "datasource.classname"; - - public static final String DEF_CLASSNAME = "no class name"; - - public static final String URL = "datasource.url"; - - public static final String DEF_URL = "no url"; - - public static final String DESCRIPTION = "datasource.description"; - - public static final String DEF_DESCRIPTION = "no desc"; - - public static final String USERNAME = "datasource.username"; - - public static final String DEF_USERNAME = ""; - - public static final String PASSWORD = "datasource.password"; - - public static final String DEF_PASSWORD = ""; - - public static final String ISOLATIONLEVEL = "datasource.isolationlevel"; - - public static final String DEF_ISOLATIONLEVEL = ""; - - public static final String MAPPERNAME = "datasource.mapper"; - - public static final String DEF_MAPPERNAME = "rdb"; - - // The ConnectionManager configuration parameters - public static final String CONNCHECKLEVEL = "jdbc.connchecklevel"; - - public static final String DEF_CONNCHECKLEVEL = "1"; - - public static final String CONNMAXAGE = "jdbc.connmaxage"; - - public static final String DEF_CONNMAXAGE = "1440"; - - public static final String MAXOPENTIME = "jdbc.maxopentime"; - - public static final String DEF_MAXOPENTIME = "1440"; - - public static final String CONNTESTSTMT = "jdbc.connteststmt"; - - public static final String DEF_CONNTESTSTMT = "SELECT 1"; - - public static final String PSTMTMAX = "jdbc.pstmtmax"; - - public static final String DEF_PSTMTMAX = "12"; - - public static final String INITCONPOOL = "jdbc.initconpool"; - - public static final String DEF_INITCONPOOL = "0"; - - public static final String MINCONPOOL = "jdbc.minconpool"; - - public static final String DEF_MINCONPOOL = "0"; - - public static final String MAXCONPOOL = "jdbc.maxconpool"; - - public static final String DEF_MAXCONPOOL = "-1"; - - public static final String MAXWAITTIME = "jdbc.maxwaittime"; - - public static final String DEF_MAXWAITTIME = "10"; - - public static final String MAXWAITERS = "jdbc.maxwaiters"; - - public static final String DEF_MAXWAITERS = "1000"; - - public static final String SAMPLINGPERIOD = "jdbc.samplingperiod"; - - public static final String DEF_SAMPLINGPERIOD = "30"; - - public static final String ADJUSTPERIOD = "jdbc.adjustperiod"; - - public static final String DEF_ADJUSTPERIOD = "30"; - -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerService.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerService.java deleted file mode 100644 index 0fbcaa636d..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerService.java +++ /dev/null @@ -1,778 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal; - -import java.io.FileNotFoundException; -import java.util.Collection; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Vector; - -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.util.tracker.BundleTracker; -import org.ow2.jonas.dbm.DataBaseService; -import org.ow2.jonas.dbm.internal.cm.ConnectionManager; -import org.ow2.jonas.dbm.internal.mbean.JDBCDataSource; -import org.ow2.jonas.dbm.internal.mbean.JDBCDriver; -import org.ow2.jonas.dbm.internal.mbean.JDBCResource; -import org.ow2.jonas.dbm.internal.osgi.JDBCDriverBundleTrackerCustomizer; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JModule; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionService; - -/** - * DatabaseService acts as a factory for the DataSource objects. - * Its goal is to create such objects and to register them in JNDI - * - * @author Philippe Durieux - * - * Contributor(s): - * - * 00/18/04 Jun Inamori (j-office@osa.att.ne.jp) - * New implementation of unbindDataSources for closing correctly - * all connections at server shutdown.

    - * 03/01/14 Adriana Danes

    - * Highlight Configuration properties - * Change createDataSource() signature : take additional argument, the datasource name - * Manage bound datasources (mapping of jndi name to datasource name) - * Use datasource name for naming MBeans (instead of jndi name) - * Modify MBean methods to take into account the previous points.

    - * 03/05/25 Introduce pool size configuration - * 04/09/20 Create JSR77 MBeans JDBCResource, JDBCDataSource JDBCDriver - */ -public class JOnASDataBaseManagerService extends AbsServiceImpl - implements DataBaseService, - JOnASDataBaseManagerServiceMBean, - DBMConstants { - - /** - * logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DBM_PREFIX); - - /** - * List of DataSource in use. - */ - private List cmList = new Vector(); // ConnectionManager - - /** - * Bound Datasources (jndi name -> datasource name). - */ - private Map boundDatasources = new Hashtable(); - - /** - * DataSource names to create when starting the DataBase service. - */ - private List dataSourceNames = new Vector(); - - /** - * JMX Service reference. - */ - private JmxService jmxService = null; - - /** - * Transaction service reference. - */ - private TransactionService txService = null; - - /** - * Initial Context for Naming. - */ - private Context ictx = null; - - /** - * RegistryService. - */ - private RegistryService registryService; - - // Admin code - // ---------- - /** - * Our naming convention for JDBCResource ObjectName (value of the 'name' key property). - */ - public static final String JDBC_RESOURCE_NAME = "JDBCResource"; - - /** - * Reference of the JDBCResource MBean. - */ - private JDBCResource jdbcResourceMBean = null; - - /** - * OSGi bundle context. - */ - private BundleContext bundleContext = null; - - /** - * OSGi Bundle tracker for SQL Driver. - */ - private BundleTracker osgiBundlesTracker= null; - - /** - * Defaut constructor with the given bundle context. - * @param bundleContext the OSGi bundle context - */ - public JOnASDataBaseManagerService(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * @param datasources datasources to deploy at startup. - */ - public void setDatasources(final String datasources) { - dataSourceNames = convertToList(datasources); - } - - /** - * Starting DataBase service Initialization of the service is already done. - * @throws ServiceException exception - */ - @Override - public void doStart() throws ServiceException { - logger.log(BasicLevel.DEBUG, "Starting DataBase service"); - - // Get the InitialContext in an execution block - IExecution ictxGetter = new IExecution() { - public InitialContext execute() throws Exception { - return getRegistryService().getRegistryContext(); - } - }; - - // Execute - ExecutionResult ictxResult = RunnableHelper.execute(getClass().getClassLoader(), ictxGetter); - // Throw an ServiceException if needed - if (ictxResult.hasException()) { - logger.log(BasicLevel.ERROR, "Cannot create initial context when DataBase service initializing"); - throw new ServiceException("Cannot create initial context when DataBase service initializing", ictxResult - .getException()); - } - // Store the ref - ictx = ictxResult.getResult(); - - // TODO, When mail service will become a bundle, we could use - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - /** - * DataBase service administration - */ - registerDbmServiceMBean(this, getDomainName()); - /** - * JDBCResource MBean has to be created before the creation of the connection manager objects - * beacuse the creation of cms implies the creation of JDBCDataSource MBeans to - * be attached to the JDBCResource MBeans - */ - jdbcResourceMBean = registerJdbcResourceMBean(getDomainName(), getJonasServerName(), JDBC_RESOURCE_NAME); - - // Creates connection managers for each datasource - String dsName = null; - for (int i = 0; i < dataSourceNames.size(); i++) { - dsName = dataSourceNames.get(i); - try { - JProp prop = JProp.getInstance(dsName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Creating Datasource " + dsName); - } - createDataSource(dsName, prop.getConfigFileEnv()); - } catch (Exception e) { - JProp.removeInstance(dsName); - logger.log(BasicLevel.ERROR, "JOnAS: Cannot create datasource: '" + dsName + "'", e); - logger.log(BasicLevel.ERROR, "Please check if " + dsName + ".properties is available"); - } - } - - // Start the OSGi JDBC Driver tracker - osgiBundlesTracker = new BundleTracker(bundleContext, Bundle.ACTIVE, new JDBCDriverBundleTrackerCustomizer(bundleContext, txService)); - osgiBundlesTracker.open(); - - logger.log(BasicLevel.INFO, "DBM Service started"); - } - - /** - * Stopping DataBase service. - * Unbind Datasource - * @throws ServiceException exception - */ - @Override - public void doStop() throws ServiceException { - - // Stop tracking - if (osgiBundlesTracker != null) { - osgiBundlesTracker.close(); - } - - // Stop OSGi datasource factories - - - - try { - unbindDataSources(); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot unbind datasources"); - throw new ServiceException("Cannot unbind datasources ", e); - } - - if (jmxService != null) { - unregisterDbmServiceMBean(getDomainName()); - unregisterJdbcResourceMBean(getDomainName(), getJonasServerName(), JDBC_RESOURCE_NAME); - } - - // TODO We should remove the Model MBeans loaded by the JMX Service - - logger.log(BasicLevel.INFO, "DBM Service stopped"); - } - - // ------------------------------------------------------------------- - // DataBaseService Implementation - // ------------------------------------------------------------------- - - /** - * Creates a ConnectionManager (implementation of {@link DataSource}). - * @param datasourceName datasource name - * @param dsd a set of properties that describes a dataSource and the ConnectionPool - */ - public void createDataSource(final String datasourceName, final Properties dsd) throws Exception { - // Get properties common to all DataSource types - String dsName = dsd.getProperty(NAME); // JDNI name of the datasource - if (dsName != null) { - dsName = dsName.trim(); - } else { - logger.log(BasicLevel.ERROR, ""); - throw new ServiceException("Cannot create datasource as JNDI name not provided"); - } - String className = dsd.getProperty(CLASSNAME, DEF_CLASSNAME).trim(); - String url = dsd.getProperty(URL, DEF_URL).trim(); - String description = dsd.getProperty(DESCRIPTION, DEF_DESCRIPTION).trim(); - String user = dsd.getProperty(USERNAME, DEF_USERNAME).trim(); - String password = dsd.getProperty(PASSWORD, DEF_PASSWORD).trim(); - String connCheckLevel = dsd.getProperty(CONNCHECKLEVEL, DEF_CONNCHECKLEVEL).trim(); - String connMaxAge = dsd.getProperty(CONNMAXAGE, DEF_CONNMAXAGE).trim(); - String maxOpenTime = dsd.getProperty(MAXOPENTIME, DEF_MAXOPENTIME).trim(); - String minconpool = dsd.getProperty(MINCONPOOL, DEF_MINCONPOOL).trim(); - String maxconpool = dsd.getProperty(MAXCONPOOL, DEF_MAXCONPOOL).trim(); - String maxwaittime = dsd.getProperty(MAXWAITTIME, DEF_MAXWAITTIME).trim(); - String maxwaiters = dsd.getProperty(MAXWAITERS, DEF_MAXWAITERS).trim(); - String samplingperiod = dsd.getProperty(SAMPLINGPERIOD, DEF_SAMPLINGPERIOD).trim(); - String adjustperiod = dsd.getProperty(ADJUSTPERIOD, DEF_ADJUSTPERIOD).trim(); - String defaultStatement = dsd.getProperty(CONNTESTSTMT, DEF_CONNTESTSTMT).trim(); - String pstmtmax = dsd.getProperty(PSTMTMAX, DEF_PSTMTMAX).trim(); - - // Create ConnectionManager (JOnAS DataSource) - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "create JOnAS ConnectionManager corresponding to data source " - + datasourceName + " with JNDI name " + dsName); - } - ConnectionManager ds = new ConnectionManager(txService); - - // Initialize ConnectionManager - ds.setDatasourceName(datasourceName); // set datasource name - ds.setDSName(dsName); // set jndi name - ds.setUrl(url); - ds.setClassName(className); - ds.setUserName(user); - ds.setPassword(password); - ds.setTransactionIsolation(dsd.getProperty(ISOLATIONLEVEL, DEF_ISOLATIONLEVEL).trim()); - ds.setMapperName(dsd.getProperty(MAPPERNAME, DEF_MAPPERNAME).trim()); - ds.setDataSourceDescription(description); - ds.poolConfigure(connCheckLevel, - connMaxAge, - maxOpenTime, - defaultStatement, - pstmtmax, - minconpool, - maxconpool, - maxwaittime, - maxwaiters, - samplingperiod, - adjustperiod); - - // Register ConnectionManager in JNDI and in internal data structures - cmList.add(ds); - ictx.rebind(dsName, ds); - // allows for getting the data source name from the jndi name - boundDatasources.put(dsName, datasourceName); - logger.log(BasicLevel.INFO, "Mapping ConnectionManager " + url + " on " + dsName); - - // Admin code - // Create and register JSR77 MBeans: JDBCDataSource and JDBCDriver - String jdbcDataSourceName = datasourceName; - String jdbcDriverName = "aJDBCDriver-" + jdbcDataSourceName; // TO BE IMPROVED - String jdbcDriverClassName = className; - String jdbcDataSourceON = registerJdbcDataSourceAndDriverMBean(getDomainName(), - getJonasServerName(), - jdbcDataSourceName, - jdbcDriverName, - jdbcDriverClassName, - ds); - // Updtae JDBCResource MBean - jdbcResourceMBean.addJdbcDataSource(jdbcDataSourceON); - } - - /** - * Unbind dataSource names from the registry, unregister MBeans. - */ - public void unbindDataSources() throws NamingException { - - logger.log(BasicLevel.DEBUG, ""); - - try { - if (cmList.size() > 0) { - String dsn = null; - for (ConnectionManager cm : cmList) { - cm.closeAllConnection(); - dsn = cm.getDSName(); - ictx.unbind(dsn); - boundDatasources.remove(dsn); - } - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "cannot unbind DataSources", e); - throw e; - } - - if (jmxService != null) { - unregisterAllDataSourceAndDriverMBeans(); - } - } - - /** - * get ConnectionManager for the datasource having this JNDI name. - */ - public ConnectionManager getConnectionManager(final String dsname) { - if (cmList.size() > 0) { - for (ConnectionManager cm : cmList) { - if (cm.getDSName().equals(dsname)) { - return cm; - } - } - } - return null; - } - - /** - * return the list of the datasources. - * @return - */ - public Collection getDSList() { - return cmList; - } - - //------------------------------------------------------------------------------------------ - - /** - * MBean method. - * @return the list of properties files describing datasources found in JONAS_BASE/conf - */ - public List getDataSourcePropertiesFiles() throws Exception { - return JModule.getDatasourcePropsInDir(); - } - - /** - * MBean method. - * @return Integer Total Number of Datasource available in JOnAS - */ - public Integer getCurrentNumberOfDataSource() { - return new Integer(cmList.size()); - } - - /** - * MBean method. - * @return Integer Total Number of JDBC connection open - */ - public Integer getTotalCurrentNumberOfJDBCConnectionOpen() { - int result = 0; - if (cmList.size() > 0) { - for (ConnectionManager cm : cmList) { - result += cm.getPool().getCurrentOpened(); - } - } - return new Integer(result); - } - - /** - * MBean method. - * @return true if the datasource having thid jndi name is loadd - */ - public boolean isLoadedDataSource(final String dsName) { - boolean result = false; - if (cmList.size() > 0) { - for (ConnectionManager cm : cmList) { - if (cm.getDatasourceName().equals(dsName)) { - return true; - } - } - } - return result; - } - - /** - * MBean method. Allows undeploy datasource. - * @param name of the data source to unload - */ - public void unloadDataSource(final String name) { - logger.log(BasicLevel.DEBUG, ""); - try { - if (cmList.size() > 0) { - for (ConnectionManager cm : cmList) { - String dsName = cm.getDatasourceName(); - String jndiName = cm.getDSName(); - if (dsName.equals(name)) { - // unbind data source - cm.closeAllConnection(); - ictx.unbind(jndiName); - // remove datasource - cmList.remove(cm); - // remove JProp instance corresponding to this datasource in order to - // allow re-create in case its re-loaded - JProp.removeInstance(dsName); - // Admin code - String jdbcDataSourceOn = unregisterJdbcDataSourceAndDriverMBean(getDomainName(), - getJonasServerName(), - dsName); - // Update the list of dataSources in the JDBCResource MBean - jdbcResourceMBean.removeJdbcDataSource(jdbcDataSourceOn); - } - return; - } - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot unload DataSources", e); - } - } - - /** - * MBean method. Return a datasource properties from a local file. - * @param dsFile file name - * @return datasource properties - * @throws Exception could not read properties file - */ - public Properties getDataSourcePropertiesFile(final String dsFile) throws Exception { - try { - return JProp.getInstance(dsFile).getConfigFileEnv(); - - } catch (Exception e) { - if (e instanceof FileNotFoundException) { - logger.log(BasicLevel.ERROR, "Please check if '" + dsFile - + ".properties' is available in JONAS_BASE/conf/ directory"); - } else { - logger.log(BasicLevel.ERROR, "Error occured when reading file " + dsFile); - } - throw e; - } - } - - /** - * MBean method. - * load a new datasource - * @param name datasource name - * @param prop datasource properties - * @param loadFromFile if false the datasource creation was dynamicaly invoked by a management - * operation providing the properties in the prop object. - * @throws ServiceException datasource could not be created - */ - public void loadDataSource(final String name, - final Properties prop, - final Boolean loadFromFile) throws ServiceException { - boolean fromFile = loadFromFile.booleanValue(); - - if (fromFile) { - logger.log(BasicLevel.DEBUG, "Load data source named " + name + " from file"); - } else { - logger.log(BasicLevel.DEBUG, "Load data source named " + name + " from form"); - if (isLoadedDataSource(name)) { - logger.log(BasicLevel.DEBUG, "This data source, " + name + " is already loaded ; Unload it !"); - unloadDataSource(name); - } - try { - logger.log(BasicLevel.DEBUG, "Call getInstance on JProp in order to create the properties file"); - JProp.getInstance(name, prop); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot create datasource " + name + " as cannot create properties file"); - throw new ServiceException("DatabaseService: Cannot create datasource '" + name + "'", e); - } - } - - try { - logger.log(BasicLevel.DEBUG, "Call method to create a data source"); - createDataSource(name, prop); - logger.log(BasicLevel.DEBUG, "New data source created"); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot create datasource '" + name + "'."); - if (fromFile) { - JProp.removeInstance(name); - } else { - JProp.deleteInstance(name); - } - throw new ServiceException("DatabaseService: Cannot create datasource: " + name + "'", e); - } - } - - /** - * MBean method allowing to determine the datasource name from its jndi name. - * @param jndiName The jndi name of a datasource - * @return The datasource name - */ - public String getDatasourceName(final String jndiName) { - return boundDatasources.get(jndiName); - } - - // Admin code (JMX based) - /** - * Register DataBaseService MBean. - * @param service dbm service to manage - * @param domainName domain name - */ - private void registerDbmServiceMBean(final Object service, - final String domainName) { - ObjectName on = JonasObjectName.databaseService(domainName); - jmxService.registerMBean(service, on); - } - - /** - * Unregister DataBaseService MBean. - * @param domainName domain name - */ - private void unregisterDbmServiceMBean(final String domainName) { - ObjectName on = JonasObjectName.databaseService(domainName); - jmxService.unregisterMBean(on); - } - - /** - * Create and register JSR77 JDBCResource MBean. - * @param domainName domain name - * @param serverName server name - * @param resourceName name of the JDBC Resource - * @return The created MBean - */ - private JDBCResource registerJdbcResourceMBean(final String domainName, - final String serverName, - final String resourceName) { - JDBCResource jdbcResourceMBean = null; - try { - String jdbcResourceON = J2eeObjectName.JDBCResourceName(domainName, - serverName, - resourceName); - jdbcResourceMBean = new JDBCResource(jdbcResourceON); - jmxService.registerModelMBean(jdbcResourceMBean, jdbcResourceON); - } catch (Exception e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot register JDBCResource MBean", e); - } - return jdbcResourceMBean; - } - - /** - * Create and register the JSR77 JDBCDataSource and JDBCDriver MBeans. - * @param domainName domain name - * @param serverName server name - * @param jdbcDataSourceName name of the JDBC DataSource - * @param jdbcDriverName name of the JDBC Driver - * @param jdbcDriverClassName name of the JDBC Driver class - * @param ds ConnectionManager object, the DataSource implementation in JOnAS - * @return The OBJECT_NAME of the created MBean - */ - private String registerJdbcDataSourceAndDriverMBean(final String domainName, - final String serverName, - final String jdbcDataSourceName, - final String jdbcDriverName, - final String jdbcDriverClassName, - final ConnectionManager ds) { - JDBCDataSource jdbcDataSourceMBean = null; - String jdbcDataSourceON = null; - try { - jdbcDataSourceON = J2eeObjectName.getJDBCDataSourceName(domainName, - serverName, - jdbcDataSourceName); - jdbcDataSourceMBean = new JDBCDataSource(jdbcDataSourceON, ds); - jmxService.registerModelMBean(jdbcDataSourceMBean, jdbcDataSourceON); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "JDBCDataSource MBean created"); - } - } catch (Exception e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot register JDBCDataSource MBean", e); - } - JDBCDriver jdbcDriverMBean = null; - String jdbcDriverON = null; - try { - jdbcDriverON = J2eeObjectName.getJDBCDriverName(domainName, - serverName, - jdbcDriverName); - jdbcDriverMBean = new JDBCDriver(jdbcDriverON); - jdbcDriverMBean.setDriverClassName(jdbcDriverClassName); - jmxService.registerModelMBean(jdbcDriverMBean, jdbcDriverON); - } catch (Exception e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot register JDBCDriver MBean", e); - } - // Update the JDBC DataSource with the JDBC Driver - jdbcDataSourceMBean.setJdbcDriver(jdbcDriverON); - - return jdbcDataSourceON; - } - - /** - * Unregister the JSR77 JDBCDataSource and JDBCDriver MBeans. - * @param domainName domain name - * @param serverName server name - * @param jdbcDataSourceName name of the JDBC DataSource - * @return OBJECT_NAME of the unregistered JDBCDataSource MBean - */ - private String unregisterJdbcDataSourceAndDriverMBean(final String domainName, - final String serverName, - final String jdbcDataSourceName) { - String jdbcDataSourceON = J2eeObjectName.getJDBCDataSourceName(domainName, - serverName, - jdbcDataSourceName); - ObjectName onJDBCDataSource = null; - String jdbcDriverName = null; - ObjectName onJDBCDriver = null; - MBeanServer mbeanServer = jmxService.getJmxServer(); - try { - onJDBCDataSource = ObjectName.getInstance(jdbcDataSourceON); - jdbcDriverName = (String) mbeanServer.getAttribute(onJDBCDataSource, "jdbcDriver"); - onJDBCDriver = ObjectName.getInstance(jdbcDriverName); - } catch (Exception e) { - logger.log(BasicLevel.INFO, - "DataBaseService: Cannot unregister MBean for datasource " - + jdbcDataSourceName, e); - } - // Unregister JDBCDataSource MBean - jmxService.unregisterModelMBean(onJDBCDataSource); - // Unregister JDBCDriver MBean - jmxService.unregisterModelMBean(onJDBCDriver); - return jdbcDataSourceON; - } - - /** - * Remove all JDBCDataSource and JDBCDriver MBeans contained in the JDBCResource. - * - */ - private void unregisterAllDataSourceAndDriverMBeans() { - // Get JDBCDataSource OBJECT_NAMEs - String[] ons = jdbcResourceMBean.getJdbcDataSources(); - ObjectName onJDBCDataSource = null; - ObjectName onJDBCDriver = null; - String dataSourceName = null; - for (int i = 0; i < ons.length; i++) { - try { - onJDBCDataSource = ObjectName.getInstance(ons[i]); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot unegister JDBCDataSource MBean", e); - continue; - } - dataSourceName = onJDBCDataSource.getKeyProperty("name"); - MBeanServer mbeanServer = jmxService.getJmxServer(); - String jdbcDriverName = null; - try { - jdbcDriverName = (String) mbeanServer.getAttribute(onJDBCDataSource, "jdbcDriver"); - } catch (Exception e) { - logger.log(BasicLevel.INFO, - "DataBaseService: Cannot unegister JDBCDriver MBean for datasource " - + dataSourceName, e); - continue; - } - try { - onJDBCDriver = new ObjectName(jdbcDriverName); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot unegister JDBCDriver MBean" + dataSourceName, e); - continue; - } - // Unregister JDBCDataSource MBean - jmxService.unregisterModelMBean(onJDBCDataSource); - // Unregister JDBCDriver MBean - jmxService.unregisterModelMBean(onJDBCDriver); - // Update the list of dataSources in the JDBCResource MBean - jdbcResourceMBean.removeJdbcDataSource(onJDBCDataSource.toString()); - } - } - /** - * Unregister JSR77 JDBCResource MBean. - * @param domainName domain name - * @param serverName server name - * @param resourceName name of the JDBC Resource - */ - private void unregisterJdbcResourceMBean(final String domainName, - final String serverName, - final String resourceName) { - try { - ObjectName jdbcResourceOn = - J2eeObjectName.JDBCResource(domainName, serverName, resourceName); - jmxService.unregisterModelMBean(jdbcResourceOn); - } catch (Exception e) { - logger.log(BasicLevel.INFO, "DataBaseService: Cannot unegister JDBCResource MBean", e); - } - } - - /** - * @param txService the TransactionService to set - */ - public void setTransactionService(final TransactionService txService) { - this.txService = txService; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param registry the registry servic to set - */ - public void setRegistryService(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Returns the registry service. - * @return The registry service - */ - private RegistryService getRegistryService() { - return registryService; - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerServiceMBean.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerServiceMBean.java deleted file mode 100644 index 28534a81ee..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/JOnASDataBaseManagerServiceMBean.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal; - -import java.util.List; -import java.util.Properties; - -import org.ow2.jonas.service.ServiceException; - - -/** - * MBean Interface for DataBase Service Management - * MBean type: Standard - * MBean model: Inheritance (JOnASDataBaseManagerService) - * - * @author Michel Bruno - * @author Guillaume Riviere - * - * Contributor(s): - * - * 03/01/14 Adriana Danes - * Change loadDataSource() signature : take additional argument, the datasource name - * Additionnal MBean method : getDatasourceName() - */ -public interface JOnASDataBaseManagerServiceMBean { - - /** - * @return the list of properties files describing datasources found in JONAS_BASE/conf - */ - public List getDataSourcePropertiesFiles() throws Exception; - - /** - * @return Integer Total Number of Datasource available in JOnAS - */ - public Integer getCurrentNumberOfDataSource(); - - /** - * @return Integer Total Number of JDBC connection open - */ - public Integer getTotalCurrentNumberOfJDBCConnectionOpen(); - - /** - * @return datasource properties from a local file - */ - public Properties getDataSourcePropertiesFile(String dsFile) throws Exception ; - - /** - * Load new datasource - * @param name datasource name - * @param prop datasource properties - * @param loadFromFile true if the datasource is loaded from a .properties file - */ - public void loadDataSource(String name, Properties prop, Boolean loadFromFile) throws ServiceException ; - - /** - * Determine if a datasource with a given name is already loaded in the dbm service - * @param dsName the name of the datasource to be checked if loaded - */ - public boolean isLoadedDataSource(String dsName); - - /** - * unload existing datasource - */ - public void unloadDataSource(String dsName); - - /** - * @param jndiName The jndi name of a datasource - * @return The datasource name - */ - public String getDatasourceName(String jndiName); -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/ConnectionManager.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/ConnectionManager.java deleted file mode 100644 index fee175acea..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/ConnectionManager.java +++ /dev/null @@ -1,2126 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.dbm.internal.cm; - -import java.io.PrintWriter; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.TreeSet; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.Referenceable; -import javax.naming.StringRefAddr; -import javax.sql.ConnectionEvent; -import javax.sql.ConnectionEventListener; -import javax.sql.ConnectionPoolDataSource; -import javax.sql.DataSource; -import javax.sql.PooledConnection; -import javax.sql.XAConnection; -import javax.sql.XADataSource; -import javax.transaction.RollbackException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.xa.XAResource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.ow2.jonas.dbm.internal.cm.naming.DataSourceFactory; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TransactionService; - -/** - * DataSource implementation. Manage a pool of connections. - * @author durieuxp - */ -public class ConnectionManager implements DataSource, XADataSource, ConnectionPoolDataSource, Referenceable, Pool, ConnectionEventListener { - - private Logger logger = null; - - /** - * List of all datasources - */ - private static HashMap cmList = new HashMap(); - - private TransactionManager tm = null; - private TransactionService ts = null; - - - /** - * List of JManagedConnection not currently used. - * This avoids closing and reopening physical connections. - * We try to keep a minimum of minConPool elements here. - */ - private TreeSet freeList = new TreeSet(); - - /** - * Total list of JManagedConnection physically opened. - */ - private LinkedList mcList = new LinkedList(); - - /** - * This HashMap gives the JManagedConnection from its transaction - * Requests with same tx get always the same connection - */ - private Map tx2mc = new HashMap(); - - /** - * This is to keep a reference on the Driver Class. - */ - private Class driverClass = null; - - private int loginTimeout = 60; - private PrintWriter log = null; - - private PoolMonitor poolKeeper; - - private boolean isClient = false; - - /** - * Pool closed indicator - */ - private boolean poolClosed = false; - - /** - * Is this DataSource observable ? - */ - private boolean observable = false; - - // ----------------------------------------------------------------- - // Constructors - // ----------------------------------------------------------------- - - /** - * Constructor for Factory - * @deprecated - */ - @Deprecated - public ConnectionManager() throws Exception { - /* - ServiceManager sm = ServiceManager.getInstance(); - ts = (TransactionService) sm.getTransactionService(); - tm = ts.getTransactionManager(); - */ - } - - /** - * Always called with true - */ - public ConnectionManager(final boolean isClient) throws Exception { - this.isClient = isClient; - } - - public ConnectionManager(final TransactionService txs) throws Exception { - ts = txs; - tm = ts.getTransactionManager(); - } - - /** - * This manager is in the client case or not ? - * @return boolean true if this is the client case - * TODO : must be removed. A client can lookup a datasource - */ - public boolean isClientCase() { - return isClient; - } - - /** - * @return The pool associated to this datasource - */ - public Pool getPool() { - return this; - } - - /** - * get the ConnectionManager matching the DataSource name - */ - public static ConnectionManager getConnectionManager(final String dsname) { - ConnectionManager cm = cmList.get(dsname); - return cm; - } - - // ----------------------------------------------------------------- - // Properties - // ----------------------------------------------------------------- - - /** - * @serial for JNDI - */ - private String dSName = null; - - /** - * @return Jndi name of the datasource - */ - public String getDSName() { - return dSName; - } - - /** - * @param s Jndi name for the datasource - */ - public void setDSName(final String s) { - dSName = s; - logger = Log.getLogger(Log.JONAS_DBM_PREFIX + "." + dSName); - // Start a thread to manage the pool of connections - poolKeeper = new PoolMonitor(this, logger); - poolKeeper.start(); - // Add it to the list - cmList.put(s, this); - } - - /** - * @serial datasource name - */ - private String dataSourceName; - - public String getDatasourceName() { - return dataSourceName; - } - - public void setDatasourceName(final String s) { - dataSourceName = s; - } - - /** - * @serial url for database - */ - private String url = null; - - public String getUrl() { - return url; - } - - public void setUrl(final String s) { - url = s; - } - - /** - * @serial JDBC driver Class - */ - private String className = null; - - public String getClassName() { - return className; - } - public void setClassName(final String s) throws ClassNotFoundException { - className = s; - - // Loads standard JDBC driver and keeps it loaded (via driverClass) - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Load JDBC driver " + s); - } - try { - driverClass = Class.forName(className); - } catch (java.lang.ClassNotFoundException e) { - logger.log(BasicLevel.ERROR, "Cannot load JDBC driver : " + e); - throw e; - } - } - - /** - * Specified the driver class. - * @param driverClass the class of the driver - */ - public void setDriverClass(final Class driverClass) { - this.className = driverClass.getName(); - this.driverClass = driverClass; - } - - /** - * @serial default user - */ - private String userName = null; - - public String getUserName() { - return userName; - } - - public void setUserName(final String s) { - userName = s; - } - - /** - * @serial default passwd - */ - private String password = null; - - public String getPassword() { - return password; - } - - public void setPassword(final String s) { - password = s; - } - - /** - * @serial - */ - private int isolationLevel = -1; - private String isolationStr = null; - - - public void setTransactionIsolation(final String level) { - logger.log(BasicLevel.DEBUG, level); - if (level.equals("serializable")) { - isolationLevel = Connection.TRANSACTION_SERIALIZABLE; - } else if (level.equals("none")) { - isolationLevel = Connection.TRANSACTION_NONE; - } else if (level.equals("read_committed")) { - isolationLevel = Connection.TRANSACTION_READ_COMMITTED; - } else if (level.equals("read_uncommitted")) { - isolationLevel = Connection.TRANSACTION_READ_UNCOMMITTED; - } else if (level.equals("repeatable_read")) { - isolationLevel = Connection.TRANSACTION_REPEATABLE_READ; - } else { - isolationStr = "default"; - return; - } - isolationStr = level; - } - - public String getTransactionIsolation() { - return isolationStr; - } - - /** - * @serial - */ - private String currentMapperName = null; - - public void setMapperName(final String mappername) { - currentMapperName = mappername; - } - - public String getMapperName() { - return currentMapperName; - } - - /** - * @serial - */ - private String dsDescription = null; - - /** - * @return the desrciption of this datasource - */ - public String getDataSourceDescription() { - return dsDescription; - } - - /** - * @param dsDesc the desrciption of this datasource - */ - public void setDataSourceDescription(final String dsDesc) { - dsDescription = dsDesc; - } - - // ---------------------------------------------------------------- - // Pool Configuration - // Each attibute have setter and getter, plus a default value. - // ---------------------------------------------------------------- - - /** - * count max waiters during current period. - */ - private int waiterCount = 0; - - /** - * count max waiting time during current period. - */ - private long waitingTime = 0; - - /** - * count max busy connection during current period. - */ - private int busyMax = 0; - - /** - * count min busy connection during current period. - */ - private int busyMin = 0; - - /** - * High Value for no limit for the connection pool - */ - private static final int NO_LIMIT = 99999; - - /** - * Nb of milliseconds in a day - */ - private static final long ONE_DAY = 1440L * 60L * 1000L; - - /** - * max number of remove at once in the freelist - * We avoid removing too much mcs at once for perf reasons. - */ - private static final int MAX_REMOVE_FREELIST = 10; - - /** - * minimum size of the connection pool - */ - private int poolMin = 0; - - /** - * @return min pool size - */ - public int getPoolMin() { - return poolMin; - } - - /** - * @param min minimum connection pool size to be set. - */ - public void setPoolMin(final int min) { - boolean doadjust = false; - synchronized(this) { - if (poolMin != min) { - poolMin = min; - doadjust = true; - } - } - if (doadjust) { - adjust(); - } - } - - /** - * maximum size of the connection pool. - * default value is "NO LIMIT". - */ - private int poolMax = NO_LIMIT; - - /** - * @return actual max pool size - */ - public int getPoolMax() { - return poolMax; - } - - /** - * @param max max pool size. -1 means "no limit". - */ - public void setPoolMax(final int max) { - boolean doadjust = false; - synchronized(this) { - if (poolMax != max) { - if (max < 0 || max > NO_LIMIT) { - if (currentWaiters > 0) { - notify(); - } - poolMax = NO_LIMIT; - } else { - if (currentWaiters > 0 && poolMax < max) { - notify(); - } - poolMax = max; - doadjust = true; - } - } - } - if (doadjust) { - adjust(); - } - } - - /** - * Max age of a Connection in milliseconds. - * When the time is elapsed, the connection will be closed. - * This avoids keeping connections open too long for nothing. - */ - private long maxAge = ONE_DAY; - - /** - * Same value in mns - */ - private int maxAgeMn; - - /** - * @return max age for connections (in mm) - */ - public int getMaxAge() { - return maxAgeMn; - } - - /** - * @return max age for connections (in millisec) - */ - public long getMaxAgeMilli() { - return maxAge; - } - - /** - * @param mn max age of connection in minutes - */ - public synchronized void setMaxAge(final int mn) { - maxAgeMn = mn; - // set times in milliseconds - maxAge = mn * 60L * 1000L; - } - - /** - * max open time for a connection, in millisec - */ - private long maxOpenTime = ONE_DAY; - - /** - * Same value in mn - */ - private int maxOpenTimeMn; - - /** - * @return max age for connections (in mns) - */ - public int getMaxOpenTime() { - return maxOpenTimeMn; - } - - /** - * @return max age for connections (in millisecs) - */ - public long getMaxOpenTimeMilli() { - return maxOpenTime; - } - - /** - * @param mn max time of open connection in minutes - */ - public void setMaxOpenTime(final int mn) { - maxOpenTimeMn = mn; - // set times in milliseconds - maxOpenTime = mn * 60L * 1000L; - } - - /** - * max nb of milliseconds to wait for a connection when pool is empty - */ - private long waiterTimeout = 10000; - - /** - * @return waiter timeout in seconds - */ - public int getMaxWaitTime() { - return (int) (waiterTimeout / 1000L); - } - - /** - * @param sec max time to wait for a connection, in seconds - */ - public synchronized void setMaxWaitTime(final int sec) { - waiterTimeout = sec * 1000L; - } - - /** - * max nb of waiters allowed to wait for a Connection - */ - private int maxWaiters = 1000; - - /** - * @return max nb of waiters - */ - public int getMaxWaiters() { - return maxWaiters; - } - - /** - * @param nb max nb of waiters - */ - public synchronized void setMaxWaiters(final int nb) { - maxWaiters = nb; - } - - /** - * sampling period in sec. - */ - private int samplingPeriod = 60; //default sampling period - - /** - * @return sampling period in sec. - */ - public int getSamplingPeriod() { - return samplingPeriod; - } - - /** - * @param sec sampling period in sec. - */ - public void setSamplingPeriod(final int sec) { - if (sec > 0) { - samplingPeriod = sec; - poolKeeper.setSamplingPeriod(sec); - } - } - - /** - * adjust period in sec. - */ - private int adjustPeriod = 30; //default adjust period - - /** - * @return adjust period in sec. - */ - public int getAdjustPeriod() { - return adjustPeriod; - } - - /** - * @param sec adjust period in sec. - */ - public void setAdjustPeriod(final int sec) { - if (sec > 0) { - adjustPeriod = sec; - poolKeeper.setAdjustPeriod(sec); - } - } - - /** - * Level of checking on connections when got from the pool. - * this avoids reusing bad connections because too old, for example - * when database was restarted... - * 0 = no checking - * 1 = check that still physically opened. - * 2 = try a null statement. - */ - private int checkLevel = 0; // default = 0 - - /** - * @return connection checking level - */ - public int getCheckLevel() { - return checkLevel; - } - - /** - * @param level jdbc connection checking level (0, 1, or 2) - */ - public void setCheckLevel(final int level) { - checkLevel = level; - } - - /** - * PreparedStatement pool size per managed connection - */ - private int pstmtMax = 12; - - /** - * @return PreparedStatement cache size - */ - public int getPstmtMax() { - return pstmtMax; - } - - /** - * @param nb PreparedStatement cache size - */ - public synchronized void setPstmtMax(final int nb) { - pstmtMax = nb; - // Set the value in each connection. - for (Iterator i = mcList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - mc.setPstmtMax(pstmtMax); - } - } - - /** - * test statement used when checkLevel = 2. - */ - private String testStatement; - - /** - * @return test statement used when checkLevel = 2. - */ - public String getTestStatement() { - return testStatement; - } - - /** - * @param s test statement - */ - public void setTestStatement(final String s) { - testStatement = s; - } - - /** - * @return the observable - */ - public boolean isObservable() { - return observable; - } - - /** - * @param observable the observable to set - */ - public void setObservable(final boolean observable) { - this.observable = observable; - } - - /** - * Configure the Connection pool. Called by the Container at init. - * Configuration can be set in datasource.properties files. - * @param connchecklevel JDBC connection checking level - * @param connmaxage JDBC connection maximum age - * @param maxopentime JDBC connection maximum open time - * @param connteststmt SQL query for test statement - * @param pstmtmax prepare statement pool size per managed connection - * @param minconpool Min size for the connection pool - * @param maxconpool Max size for the connection pool - * @param maxwaittime Max time to wait for a connection (in seconds) - * @param maxwaiters Max nb of waiters for a connection - * @param samplingperiod sampling period in sec. - * @param adjustperiod pool adjust period in sec. - * @throw ServiceException if could not create the initial items in the pool - */ - public void poolConfigure(final String connchecklevel, - final String connmaxage, - final String maxopentime, - final String connteststmt, - final String pstmtmax, - final String minconpool, - final String maxconpool, - final String maxwaittime, - final String maxwaiters, - final String samplingperiod, - final String adjustperiod) { - - // Configure pool - setCheckLevel((new Integer(connchecklevel)).intValue()); - // set con max age BEFORE min/max pool size. - setMaxAge((new Integer(connmaxage)).intValue()); - setMaxOpenTime((new Integer(maxopentime)).intValue()); - setTestStatement(connteststmt); - setPstmtMax((new Integer(pstmtmax)).intValue()); - setPoolMin((new Integer(minconpool)).intValue()); - setPoolMax((new Integer(maxconpool)).intValue()); - setMaxWaitTime((new Integer(maxwaittime)).intValue()); - setMaxWaiters((new Integer(maxwaiters)).intValue()); - setSamplingPeriod((new Integer(samplingperiod)).intValue()); - setAdjustPeriod((new Integer(adjustperiod)).intValue()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "ConnectionManager configured with:"); - logger.log(BasicLevel.DEBUG, " jdbcConnCheckLevel = " + connchecklevel); - logger.log(BasicLevel.DEBUG, " jdbcConnMaxAge = " + connmaxage); - logger.log(BasicLevel.DEBUG, " jdbcMaxOpenTime = " + maxopentime); - logger.log(BasicLevel.DEBUG, " jdbcTestStmt = " + connteststmt); - logger.log(BasicLevel.DEBUG, " jdbcPstmtMax = " + pstmtmax); - logger.log(BasicLevel.DEBUG, " minConPool = " + getPoolMin()); - logger.log(BasicLevel.DEBUG, " maxConPool = " + getPoolMax()); - logger.log(BasicLevel.DEBUG, " maxWaitTime = " + getMaxWaitTime()); - logger.log(BasicLevel.DEBUG, " maxWaiters = " + getMaxWaiters()); - logger.log(BasicLevel.DEBUG, " samplingPeriod = " + getSamplingPeriod()); - logger.log(BasicLevel.DEBUG, " adjustPeriod = " + getAdjustPeriod()); - } - } - - // ---------------------------------------------------------------- - // Monitoring Attributes - // Each attribute should have a get accessor. - // ---------------------------------------------------------------- - - /** - * maximum nb of busy connections in last sampling period - */ - private int busyMaxRecent = 0; - - /** - * @return maximum nb of busy connections in last sampling period - */ - public int getBusyMaxRecent() { - return busyMaxRecent; - } - - /** - * minimum nb of busy connections in last sampling period - */ - private int busyMinRecent = 0; - - /** - * @return minimum nb of busy connections in last sampling period - */ - public int getBusyMinRecent() { - return busyMinRecent; - } - - /** - * nb of threads waiting for a Connection - */ - private int currentWaiters = 0; - - /** - * @return current number of connection waiters - */ - public int getCurrentWaiters() { - return currentWaiters; - } - - /** - * total number of opened physical connections since the datasource creation. - */ - private int openedCount = 0; - - /** - * @return int number of physical jdbc connection opened - */ - public int getOpenedCount() { - return openedCount; - } - - /** - * total nb of physical connection failures - */ - private int connectionFailures = 0; - - /** - * @return int number of xa connection failures on open - */ - public int getConnectionFailures() { - return connectionFailures; - } - - /** - * total nb of connection leaks. - * A connection leak occurs when the caller never issues a close method - * on the connection. - */ - private int connectionLeaks = 0; - - /** - * @return int number of connection leaks - */ - public int getConnectionLeaks() { - return connectionLeaks; - } - - /** - * total number of opened connections since the datasource creation. - */ - private int servedOpen = 0; - - /** - * @return int number of xa connection served - */ - public int getServedOpen() { - return servedOpen; - } - - /** - * total nb of open connection failures because waiter overflow - */ - private int rejectedFull = 0; - - /** - * @return int number of open calls that were rejected due to waiter overflow - */ - public int getRejectedFull() { - return rejectedFull; - } - - /** - * total nb of open connection failures because timeout - */ - private int rejectedTimeout = 0; - - /** - * @return int number of open calls that were rejected by timeout - */ - public int getRejectedTimeout() { - return rejectedTimeout; - } - - /** - * total nb of open connection failures for any other reason. - */ - private int rejectedOther = 0; - - /** - * @return int number of open calls that were rejected - */ - public int getRejectedOther() { - return rejectedOther; - } - - /** - * @return int number of open calls that were rejected - */ - public int getRejectedOpen() { - return rejectedFull + rejectedTimeout + rejectedOther; - } - - /** - * maximum nb of waiters since datasource creation - */ - private int waitersHigh = 0; - - /** - * @return maximum nb of waiters since the datasource creation - */ - public int getWaitersHigh() { - return waitersHigh; - } - - /** - * maximum nb of waiters in last sampling period - */ - private int waitersHighRecent = 0; - - /** - * @return maximum nb of waiters in last sampling period - */ - public int getWaitersHighRecent() { - return waitersHighRecent; - } - - /** - * total nb of waiters since datasource creation - */ - private int totalWaiterCount = 0; - - /** - * @return total nb of waiters since the datasource creation - */ - public int getWaiterCount() { - return totalWaiterCount; - } - - /** - * total waiting time in milliseconds - */ - private long totalWaitingTime = 0; - - /** - * @return total waiting time since the datasource creation - */ - public long getWaitingTime() { - return totalWaitingTime; - } - - /** - * max waiting time in milliseconds - */ - private long waitingHigh = 0; - - /** - * @return max waiting time since the datasource creation - */ - public long getWaitingHigh() { - return waitingHigh; - } - - /** - * max waiting time in milliseconds in last sampling period - */ - private long waitingHighRecent = 0; - - /** - * @return max waiting time in last sampling period - */ - public long getWaitingHighRecent() { - return waitingHighRecent; - } - - // ----------------------------------------------------------------- - // DataSource + XADataSource Implementation - // ----------------------------------------------------------------- - - public int getLoginTimeout() throws SQLException { - return loginTimeout; - } - - public void setLoginTimeout(final int seconds) throws SQLException { - loginTimeout = seconds; - } - - public PrintWriter getLogWriter() throws SQLException { - return log; - } - - public void setLogWriter(final PrintWriter out) throws SQLException { - log = out; - } - - /** - * Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. - * Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result - * of recursively calling isWrapperFor on the wrapped object. If this does not implement the interface and is not a wrapper, - * return false. This method should be implemented as a low-cost operation compared to unwrap so that callers can use this method - * to avoid expensive unwrap calls that may fail. If this method returns true then calling unwrap with the same argument should succeed. - * @param iface a Class defining an interface. - * @returns true if this implements the interface or directly or indirectly wraps an object that does. - * @throws SQLException if an error occurs while determining whether this is a wrapper for an object with the given interface. - */ - public boolean isWrapperFor(final Class iface) throws SQLException { - return false; - } - - /** - * Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. - * If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper - * and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. - * Otherwise return the the result of calling unwrap recursively on the wrapped object or a proxy for that result. - * If the receiver is not a wrapper and does not implement the interface, then an SQLException is thrown. - * @param iface A Class defining an interface that the result must implement. - * @returns an object that implements the interface. May be a proxy for the actual implementing object. - * @throws SQLException If no object found that implements the interface - */ - public T unwrap(final Class iface) throws SQLException { - return null; - } - - public Connection getConnection() throws SQLException { - return getConnection(userName, password); - } - - - /** - * Attempts to establish a connection with the data source that this DataSource object represents. - * - comes from the javax.sql.DataSource interface - * @param username - the database user on whose behalf the connection is being made - * @param password - the user's password - * @return a connection to the data source - * @throws SQLException - if a database access error occurs - */ - public Connection getConnection(final String username, final String password) throws SQLException { - JManagedConnection mc = getPooledXAConnection(username, password); - return mc.getConnection(); - } - - - /** - * Attempts to establish a connection with the data source that this DataSource object represents. - * - comes from the javax.sql.DataSource interface - * @param username - the database user on whose behalf the connection is being made - * @param password - the user's password - * @return a connection to the data source - * @throws SQLException - if a database access error occurs - */ - public JManagedConnection getPooledXAConnection(final String username, final String password) throws SQLException { - JManagedConnection mc = null; - - // Get the current Transaction - Transaction tx = null; - try { - tx = tm.getTransaction(); - } catch (NullPointerException n) { - // current is null: we are not in a JOnAS Server. - logger.log(BasicLevel.ERROR, "ConnectionManager: should not be used outside a JOnAS Server"); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "ConnectionManager: getTransaction failed", e); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Tx = " + tx); - } - - // Get a JManagedConnection in the pool for this user - mc = openConnection(username, tx); - Connection ret = mc.getConnection(); - - // Enlist XAResource if we are actually in a transaction - if (tx != null) { - if (mc.getOpenCount() == 1) { // Only if first/only thread - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "enlist XAResource on " + tx); - } - tx.enlistResource(mc.getXAResource()); - } catch (RollbackException e) { - // Although tx has been marked to be rolled back, - // XAResource has been correctly enlisted. - logger.log(BasicLevel.WARN, "XAResource enlisted, but tx is marked rollback", e); - } catch (IllegalStateException e) { - // In case tx is committed, no need to register resource! - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot enlist XAResource", e); - logger.log(BasicLevel.ERROR, "Connection will not be enlisted in a transaction"); - // should return connection in the pool XXX - throw new SQLException("Cannot enlist XAResource"); - } - } - } - // We are not in a transaction yet: we just make a pre-registration. - // We are in a stateful bean, put it in the list too. - // TODO: Sometimes, we could avoid this (if no stateful and no tx) - if (!mc.isRME()) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "register this connection to the TM."); - } - mc.setRME(true); - tm.notifyConnectionOpen(mc); - } - // return a Connection object - return mc; - } - - /** - * @return a new XA Connection with the username/password of the datasource - */ - public XAConnection getXAConnection() throws SQLException { - return getXAConnection(userName, password); - } - - /** - * @return a new XA Connection with the username/password of the datasource - */ - public XAConnection getXAConnection(final String user, final String passwd) throws SQLException { - return getPooledXAConnection(user, password); - } - - /** - * Attempts to establish a physical database connection, using the given user name and password. - * The connection that is returned is one that can be used in a distributed transaction - * - comes from the javax.sql.XADataSource interface - * @throws SQLException - if a database access error occurs - */ - public XAConnection getInternalXAConnection() throws SQLException { - return getInternalXAConnection(userName, password); - } - - /** - * Attempts to establish a physical database connection, using the given user name and password. - * The connection that is returned is one that can be used in a distributed transaction - * - comes from the javax.sql.XADataSource interface - * @param user - the database user on whose behalf the connection is being made - * @param passwd - the user's password - * @return an XAConnection object, which represents a physical connection to a data source, - * that can be used in a distributed transaction - * @throws SQLException - if a database access error occurs - */ - public XAConnection getInternalXAConnection(final String user, final String passwd) throws SQLException { - // Create the actual connection in the std driver - Connection conn = null; - try { - if (user.length() == 0) { - conn = DriverManager.getConnection(url); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " * New Connection on " + url); - } - } else { - // Accept password of zero length. - conn = DriverManager.getConnection(url, user, passwd); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " * New Connection on " + url + " for " + user); - } - } - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Could not get Connection on " + url + ":", e); - throw new SQLException("Could not get Connection on url : " + url - + " for user : " + user + " inner exception" + e.getMessage()); - } - if (conn == null) { - logger.log(BasicLevel.ERROR, "DriverManager returned a null Connection"); - throw new SQLException("Could not get Connection on url : " + url - + " for user : " + user); - } - - // Attempt to set the transaction isolation level - // Depending on the underlying database, this may not succeed. - if (isolationLevel != -1) { - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "set transaction isolation to " + isolationLevel); - } - conn.setTransactionIsolation(isolationLevel); - } catch (SQLException e) { - String ilstr = "?"; - switch (isolationLevel) { - case Connection.TRANSACTION_SERIALIZABLE: - ilstr = "SERIALIZABLE"; - break; - case Connection.TRANSACTION_NONE: - ilstr = "NONE"; - break; - case Connection.TRANSACTION_READ_COMMITTED: - ilstr = "READ_COMMITTED"; - break; - case Connection.TRANSACTION_READ_UNCOMMITTED: - ilstr = "READ_UNCOMMITTED"; - break; - case Connection.TRANSACTION_REPEATABLE_READ: - ilstr = "REPEATABLE_READ"; - break; - } - logger.log(BasicLevel.ERROR, "Cannot set transaction isolation to " + ilstr + " for this DataSource:" + e); - logger.log(BasicLevel.ERROR, url); - isolationLevel = -1; - } - } - - // Create the JManagedConnection object - JManagedConnection mc = new JManagedConnection(conn, this); - - // return the XAConnection - return mc; - } - - // ----------------------------------------------------------------- - // Referenceable Implementation - // ----------------------------------------------------------------- - - /** - * Retrieves the Reference of this object. Used at binding time by JNDI - * to build a reference on this object. - * - * @return The non-null Reference of this object. - * @exception NamingException If a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - Reference ref = new Reference (this.getClass().getName(), - DataSourceFactory.class.getName(), - null); - // These values are used by ObjectFactory (see DataSourceFactory.java) - ref.add(new StringRefAddr(DBMConstants.NAME, getDSName())); - ref.add(new StringRefAddr(DBMConstants.URL, getUrl())); - ref.add(new StringRefAddr(DBMConstants.CLASSNAME, getClassName())); - ref.add(new StringRefAddr(DBMConstants.USERNAME, getUserName())); - ref.add(new StringRefAddr(DBMConstants.PASSWORD, getPassword())); - ref.add(new StringRefAddr(DBMConstants.ISOLATIONLEVEL, getTransactionIsolation())); - ref.add(new StringRefAddr(DBMConstants.MAPPERNAME, getMapperName())); - Integer checklevel = new Integer(getCheckLevel()); - ref.add(new StringRefAddr("connchecklevel", checklevel.toString())); - Integer maxage = new Integer(getMaxAge()); - ref.add(new StringRefAddr("connmaxage", maxage.toString())); - Integer maxopentime = new Integer(getMaxOpenTime()); - ref.add(new StringRefAddr("maxopentime", maxopentime.toString())); - ref.add(new StringRefAddr("connteststmt", getTestStatement())); - Integer pstmtmax = new Integer(getPstmtMax()); - ref.add(new StringRefAddr("pstmtmax", pstmtmax.toString())); - Integer minpool = new Integer(getPoolMin()); - ref.add(new StringRefAddr("minconpool", minpool.toString())); - Integer maxpool = new Integer(getPoolMax()); - ref.add(new StringRefAddr("maxconpool", maxpool.toString())); - Integer maxwaittime = new Integer(getMaxWaitTime()); - ref.add(new StringRefAddr("maxwaittime", maxwaittime.toString())); - Integer maxwaiters = new Integer(getMaxWaiters()); - ref.add(new StringRefAddr("maxwaiters", maxwaiters.toString())); - Integer samplingperiod = new Integer(getSamplingPeriod()); - ref.add(new StringRefAddr("samplingperiod", samplingperiod.toString())); - Integer adjustperiod = new Integer(getAdjustPeriod()); - ref.add(new StringRefAddr("adjustperiod", adjustperiod.toString())); - return ref; - } - - public int[] getOpenedConnections(final int usedTimeSec) { - List connections = new ArrayList(); - long usedTimeMs = usedTimeSec * 1000; - - // Iterate over the managed connections - for (Iterator i = mcList.iterator(); i.hasNext();) { - JManagedConnection mc = i.next(); - - // Check if the connection is still used - long duration = System.currentTimeMillis() - mc.getOpeningTime(); - if (mc.isOpen() && (duration >= usedTimeMs)) { - connections.add(new Integer(mc.getIdent())); - } - } - - // Create the array of connection Ids - int[] ids = new int[connections.size()]; - int idx = 0; - for (Iterator i = connections.iterator(); i.hasNext();) { - Integer id = i.next(); - ids[idx++] = id.intValue(); - } - - return ids; - } - - public void forceCloseConnection(final int connectionId) { - logger.log(BasicLevel.DEBUG, " connectionId=" + connectionId); - - // Iterate over the managed connections to find the right connection - JManagedConnection found = null; - synchronized(this) { - for (Iterator i = mcList.iterator(); i.hasNext();) { - JManagedConnection mc = i.next(); - - // Find the right connection - if (mc.getIdent() == connectionId) { - i.remove(); - found = mc; - break; - } - } - } - - // destroy outside the lock - if (found != null) { - found.remove(); - } - - } - - public int[] getOpenedConnections() { - return getOpenedConnections(5); - } - - public Map getConnectionDetails(final int connectionId) { - // Iterate over the managed connections - for (Iterator i = mcList.iterator(); i.hasNext();) { - JManagedConnection mc = i.next(); - - // Find the right connection - if (mc.getIdent() == connectionId) { - // Also check if (during the meantime) the connection has been closed - if (!mc.isClosed()) { - return getConnectionDetails(mc); - } - } - } - - // in some case, we may return null - return null; - } - - private Map getConnectionDetails(final JManagedConnection connection) { - Map details = new HashMap(); - - // 0: connection-id : Integer - details.put("id", new Integer(connection.getIdent())); - - // 1: open-count : Integer - details.put("open-count", new Integer(connection.getOpenCount())); - - // 2: status : Boolean - details.put("inactive", Boolean.valueOf(connection.inactive())); - - // 3: duration (ms) : Long - long duration = 0; - if (connection.getOpeningTime() != -1) { - duration = System.currentTimeMillis() - connection.getOpeningTime(); - } else { - // not computed - duration = -1; - } - details.put("duration", new Long(duration)); - - // 4: transaction-id (if any) : String - Transaction tx = connection.getTx(); - String xid = "null"; - if (tx != null) { - xid = tx.toString(); - } - details.put("transaction-id", xid); - - // 5: connection-age (ms) - long age = System.currentTimeMillis() - connection.getCreationTime(); - details.put("age", new Long(age)); - - // 6: Openers Thread infos : List> - details.put("openers", connection.getOpenerThreadInfos()); - - // 7: Closers Thread infos : List> - details.put("closers", connection.getCloserThreadInfos()); - - return details; - } - - // ----------------------------------------------------------------- - // ConnectionEventListener Implementation - // ----------------------------------------------------------------- - - public void connectionClosed(final ConnectionEvent event) { - logger.log(BasicLevel.DEBUG, ""); - - JManagedConnection mc = (JManagedConnection) event.getSource(); - - // remove it from the list of open connections for this thread - // only if it was opened outside a tx. - if (closeConnection(mc, XAResource.TMSUCCESS) && mc.isRME()) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "unregister this connection to the TM."); - } - mc.setRME(false); - tm.notifyConnectionClose(mc); - } - } - - public void connectionErrorOccurred(final ConnectionEvent event) { - - JManagedConnection mc = (JManagedConnection) event.getSource(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "mc=" + mc.getIdent()); - } - - // remove it from the list of open connections for this thread - // only if it was opened outside a tx. - if (closeConnection(mc, XAResource.TMFAIL) && mc.isRME()) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "unregister this connection to the TM."); - } - mc.setRME(false); - tm.notifyConnectionError(mc); - } - - } - - // ----------------------------------------------------------------- - // Pool Monitoring - // ----------------------------------------------------------------- - - /** - * Dump Free List (DEBUG) - */ - private synchronized void dumpFreeList() { - for (Iterator i = freeList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - System.out.println("Id="+mc.getIdent()+" Hit="+mc.psNumber()); - } - JManagedConnection f = (JManagedConnection) freeList.first(); - JManagedConnection l = (JManagedConnection) freeList.last(); - System.out.println("First="+f.getIdent()+" Last="+l.getIdent()); - } - - /** - * @return int number of xa connection - */ - public synchronized int getCurrentOpened() { - return mcList.size(); - } - - /** - * @return int number of busy xa connection - */ - public synchronized int getCurrentBusy() { - return mcList.size() - freeList.size(); - } - - /** - * compute current min/max busyConnections - */ - public synchronized void recomputeBusy() { - int busy = getCurrentBusy(); - if (busyMax < busy) { - busyMax = busy; - } - if (busyMin > busy) { - busyMin = busy; - } - } - - /** - * @return int number of xa connection reserved for tx - */ - public synchronized int getCurrentInTx() { - return tx2mc.size(); - } - - /** - * make samples with some monitoring values - */ - public synchronized void sampling() { - if (poolClosed) { - return; - } - waitingHighRecent = waitingTime; - if (waitingHigh < waitingTime) { - waitingHigh = waitingTime; - } - waitingTime = 0; - - waitersHighRecent = waiterCount; - if (waitersHigh < waiterCount) { - waitersHigh = waiterCount; - } - waiterCount = 0; - - busyMaxRecent = busyMax; - busyMax = getCurrentBusy(); - busyMinRecent = busyMin; - busyMin = getCurrentBusy(); - } - - /** - * Adjust the pool size, according to poolMax and poolMin values. - * Also remove old connections in the freeList. - */ - public void adjust() { - if (poolClosed) { - return; - } - logger.log(BasicLevel.DEBUG, dSName); - - // Remove max aged elements in freelist - // - Not more than MAX_REMOVE_FREELIST - // - Don't reduce pool size less than poolMin - LinkedList removeList = new LinkedList(); - synchronized(this) { - int count = mcList.size() - poolMin; - // In case count is null, a new connection will be - // recreated just after - if (count >= 0) { - if (count > MAX_REMOVE_FREELIST) { - count = MAX_REMOVE_FREELIST; - } - for (Iterator i = freeList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - if (mc.isAged()) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "remove a timed out connection"); - } - i.remove(); - mcList.remove(mc); - removeList.add(mc); - count--; - if (count <= 0) { - break; - } - } - } - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator i = removeList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - i.remove(); - mc.remove(); - } - recomputeBusy(); - - // Close (physically) connections lost (opened for too long time) - // removeList should be empty here - synchronized(this) { - for (Iterator i = mcList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - if (mc.inactive()) { - logger.log(BasicLevel.WARN, "close a timed out open connection:" + mc.getIdent()); - i.remove(); - removeList.add(mc); - } - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator i = removeList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - i.remove(); - // destroy mc. We want to be sure that the Connection will not be used - // later, so we close physically this connection. - mc.remove(); - connectionLeaks++; - // Notify 1 thread waiting for a Connection. - if (currentWaiters > 0) { - logger.log(BasicLevel.DEBUG, "Notify Connection waiters"); - notify(); - } - } - recomputeBusy(); - - // Shrink the pool in case of max pool size - // This occurs when max pool size has been reduced by jonas admin. - if (poolMax != NO_LIMIT) { - synchronized(this) { - while (freeList.size() > poolMin && mcList.size() > poolMax) { - JManagedConnection mc = (JManagedConnection) freeList.first(); - freeList.remove(mc); - mcList.remove(mc); - removeList.add(mc); - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator i = removeList.iterator(); i.hasNext();) { - JManagedConnection mc = (JManagedConnection) i.next(); - i.remove(); - mc.remove(); - } - } - recomputeBusy(); - - // Recreate more Connections while poolMin is not reached - synchronized(this) { - while (mcList.size() < poolMin) { - JManagedConnection mc = null; - try { - mc = (JManagedConnection) getInternalXAConnection(); - openedCount++; - } catch (SQLException e) { - throw new ServiceException("Could not create " + poolMin + " mcs in the pool : ", e); - } - // tx = null. Assumes maxage already configured. - freeList.add(mc); - // Notify 1 thread waiting for a Connection. - if (currentWaiters > 0) { - logger.log(BasicLevel.DEBUG, "Notify Connection waiters"); - notify(); - } - mcList.add(mc); - mc.addConnectionEventListener(this); - } - } - } - - /** - * lookup connection in the pool for this user/tx - * @param user user name - * @param tx Transaction the connection is involved - * @return a free JManagedConnection (never null) - * @throws SQLException Cannot open a connection because the pool's max size is reached - */ - public JManagedConnection openConnection(final String user, final Transaction tx) throws SQLException { - JManagedConnection mc = null; - - // If a Connection exists already for this tx, just return it. - // If no transaction, never reuse a connection already used. - if (tx != null) { - synchronized(this) { - mc = (JManagedConnection) tx2mc.get(tx); - if (mc != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Reuse a Connection for same tx"); - } - mc.hold(); - servedOpen++; - return mc; - } - } - } - - // Loop until a valid mc is found - long timetowait = waiterTimeout; - long starttime = 0; - while (mc == null) { - // If an element exists in the freelist, try to use it. - synchronized(this) { - if (!freeList.isEmpty()) { - mc = (JManagedConnection) freeList.last(); - freeList.remove(mc); - } - } - if (mc != null) { - // Check the connection before reusing it - if (checkLevel > 0) { - try { - IConnection conn = (IConnection) mc.getConnection(); - if (conn == null || conn.isPhysicallyClosed()) { - logger.log(BasicLevel.WARN, "The JDBC connection has been closed!"); - synchronized(this) { - mcList.remove(mc); - } - mc.remove(); - starttime = 0; - mc = null; - continue; - } - if (checkLevel > 1) { - conn.setCheckClose(false); - java.sql.Statement stmt = conn.createStatement(); - stmt.execute(testStatement); - stmt.close(); - conn.setCheckClose(true); - } - } catch (Exception e) { - logger.log(BasicLevel.WARN, "DataSource " + getDatasourceName() - + " error: removing invalid mc", e); - synchronized(this) { - mcList.remove(mc); - } - mc.remove(); - starttime = 0; - mc = null; - continue; - } - } - // We have found a valid mc in the freelist. - break; - } - // No mc available: look if we can create a new one. - // In case we have reached the maximum limit of the pool, - // we must wait until a connection is released. - synchronized(this) { - if (mcList.size() >= poolMax) { - boolean stoplooping = true; - // If a timeout has been specified, wait, unless maxWaiters is reached. - if (timetowait > 0) { - if (currentWaiters < maxWaiters) { - currentWaiters++; - // Store the maximum concurrent waiters - if (waiterCount < currentWaiters) { - waiterCount = currentWaiters; - } - if (starttime == 0) { - starttime = System.currentTimeMillis(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Wait for a free Connection" + mcList.size()); - } - } - try { - wait(timetowait); - } catch (InterruptedException ign) { - logger.log(BasicLevel.WARN, "Interrupted"); - } finally { - currentWaiters--; - } - long stoptime = System.currentTimeMillis(); - long stillwaited = stoptime - starttime; - timetowait = waiterTimeout - stillwaited; - stoplooping = (timetowait <= 0); - if (stoplooping) { - // We have been waked up by the timeout. - totalWaiterCount++; - totalWaitingTime += stillwaited; - if (waitingTime < stillwaited) { - waitingTime = stillwaited; - } - } else { - if (!freeList.isEmpty() || mcList.size() < poolMax) { - // We have been notified by a connection released. - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Notified after " + stillwaited); - } - totalWaiterCount++; - totalWaitingTime += stillwaited; - if (waitingTime < stillwaited) { - waitingTime = stillwaited; - } - } - // loop to find a mc. - continue; - } - } - } - if (stoplooping && freeList.isEmpty() && mcList.size() >= poolMax) { - // Cannot get a mc: throw an exception. - if (starttime > 0) { - rejectedTimeout++; - logger.log(BasicLevel.WARN, "Cannot create a Connection - timeout"); - } else { - rejectedFull++; - logger.log(BasicLevel.WARN, "Cannot create a Connection"); - } - throw new SQLException("No more connections in " + getDatasourceName()); - } - // loop to find a mc. - continue; - } - } // end of synchronized - - // We can create a new mc. - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "empty free list: Create a new Connection"); - } - try { - // create a new XA Connection - mc = (JManagedConnection) getInternalXAConnection(); - } catch (SQLException e) { - connectionFailures++; - rejectedOther++; - logger.log(BasicLevel.WARN, "Cannot create new Connection for tx"); - throw e; - } - synchronized(this) { - // Register the connection manager as a ConnectionEventListener - openedCount++; - mc.addConnectionEventListener(this); - mcList.add(mc); - } - } - // mc found. - recomputeBusy(); - mc.setTx(tx); - if (tx == null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Got a Connection - no TX: "); - } - } else { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Got a Connection for TX: "); - } - // register synchronization - try { - synchronized(this) { - tx.registerSynchronization(mc); - tx2mc.put(tx, mc); // only if registerSynchronization was OK. - } - } catch (javax.transaction.RollbackException e) { - /// optimization is probably possible at this point - if (logger.isLoggable(BasicLevel.WARN)) { - logger.log(BasicLevel.WARN, "DataSource " + getDatasourceName() - + " error: Pool mc registered, but tx is rollback only", e); - } - } catch (javax.transaction.SystemException e) { - if (logger.isLoggable(BasicLevel.ERROR)) { - logger.log(BasicLevel.ERROR, "DataSource " + getDatasourceName() - + " error in pool: system exception from transaction manager ", e); - } - } catch (IllegalStateException e) { - // In case transaction has already committed, do as if no tx. - if (logger.isLoggable(BasicLevel.WARN)) { - logger.log(BasicLevel.WARN, "Got a Connection - committed TX: ", e); - } - mc.setTx(null); - } - } - mc.hold(); - servedOpen++; - return mc; - } - - /** - * The transaction has committed (or rolled back). We can return its - * connections to the pool of available connections. - * @param tx the non null transaction - */ - public void freeConnections(final Transaction tx) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "free connection for Tx = " + tx); - } - synchronized(this) { - JManagedConnection mc = (JManagedConnection) tx2mc.remove(tx); - if (mc == null) { - logger.log(BasicLevel.ERROR, "pool: no connection found to free for Tx = " + tx); - return; - } - mc.setTx(null); - if (mc.isOpen()) { - // Connection may be not closed in case of stateful session bean that - // keeps connection to be reused in another method of the bean. - logger.log(BasicLevel.WARN, "WARNING: Connection not closed by caller"); - return; - } - freeItem(mc); - } - } - - /** - * Close all connections in the pool, when server is shut down. - */ - public void closeAllConnection() { - logger.log(BasicLevel.DEBUG, ""); - - // Stop the pool keeper, since all connections will be closed. - poolKeeper.stopit(); - - // Close physically all connections - synchronized(this) { - Iterator it = mcList.iterator(); - try { - while (it.hasNext()) { - JManagedConnection mc = (JManagedConnection) it.next(); - mc.close(); - } - } catch (java.sql.SQLException e) { - logger.log(BasicLevel.ERROR, "Error while closing a Connection:", e); - } - } - poolClosed = true; - } - - // ----------------------------------------------------------------------- - // private methods - // ----------------------------------------------------------------------- - - /** - * Mark a specific Connection in the pool as closed. - * If it is no longer associated to a Tx, we can free it. - * @param mc XAConnection being closed - * @param flag TMSUCCESS (normal close) or TMFAIL (error) - * or null if error. - */ - private boolean closeConnection(final JManagedConnection mc, final int flag) { - // The connection will be available only if not associated - // to a transaction. Else, it will be reusable only for the - // same transaction. - if (!mc.release()) { - return false; - } - if (mc.getTx() != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "keep connection for same tx"); - } - } else { - freeItem(mc); - } - - // delist Resource if in transaction - Transaction tx = null; - try { - tx = tm.getTransaction(); - } catch (NullPointerException n) { - // current is null: we are not in JOnAS Server. - logger.log(BasicLevel.ERROR, "Pool: should not be used outside a JOnAS Server", n); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Pool: getTransaction failed:", e); - } - if (tx != null && mc.isClosed()) { - try { - tx.delistResource(mc.getXAResource(), flag); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Pool: Exception while delisting resource:", e); - } - } - return true; - } - - /** - * Free item and return it in the free list. - * @param item The item to be freed - */ - private synchronized void freeItem(final JManagedConnection item) { - // Add it to the free list - // Even if maxage is reached, because we avoids going under min pool size. - // PoolKeeper will manage aged connections. - freeList.add(item); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "item added to freeList: " + item.getIdent()); - } - // Notify 1 thread waiting for a Connection. - if (currentWaiters > 0) { - notify(); - } - recomputeBusy(); - } - - /** - * Check on a connection the test statement - * @param testStatement the statement to use for test - * @return the test statement if the test succeeded, an error message otherwise - * @throws SQLException If an error occured when trying to test (not due to the test itself, - * but to other preliminary or post operation). - */ - public String checkConnection(final String testStatement) throws SQLException { - String noError = testStatement; - JManagedConnection mc = null; - boolean jmcCreated = false; - if (!freeList.isEmpty()) { - // find a connection to test in the freeList - Iterator it = freeList.iterator(); - while (it.hasNext()) { - mc = (JManagedConnection) it.next(); - try { - JConnection conn = (JConnection) mc.getConnection(); - if (!conn.isPhysicallyClosed()) { - // ok, we found a connection we can use to test - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Use a free JManagedConnection to test with " + testStatement); - } - break; - } else { - mc = null; - } - } catch (SQLException e) { - // Can't use this connection to test - mc = null; - } - } - } - if (mc == null) { - // Try to create mc Connection - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Create a JManagedConnection to test with " + testStatement); - } - Connection conn = null; - try { - conn = DriverManager.getConnection(url, userName, password); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Could not get Connection on " + url + ":", e); - } - if (conn == null) { - return new String("Could not get a new Connection"); - } - mc = new JManagedConnection(conn, this); - jmcCreated = true; - } - if (mc != null) { - // Do the test on the free connection or the created connection - IConnection conn = (IConnection) mc.getConnection(); - // Don't check here the Connection is close, because it is closed - // indeed when picked from the pool! - conn.setCheckClose(jmcCreated); - java.sql.Statement stmt = conn.createStatement(); - try { - stmt.execute(testStatement); - } catch (SQLException e) { - // The test fails - return e.getMessage(); - } - stmt.close(); - if (jmcCreated) { - mc.close(); - } else { - conn.setCheckClose(true); - } - } - return noError; - } - - class PoolMonitor extends Thread { - - /** - * Pool object to monitor - */ - private ConnectionManager pool; - - /** - * Logger object to log events - */ - private Logger logger = null; - - /** - * adjustment period - */ - private long adjustperiod = 5000L; // milliseconds - - /** - * Default sampling period - */ - private long samplingperiod = 60000L; // milliseconds - - /** - * time to wait on error - */ - private final long errorperiod = 120000L; // milliseconds - - private boolean stopped = false; - - /** - * Constructor - * @param pool Pool to monitor - */ - public PoolMonitor(final ConnectionManager ds, final Logger log) { - super("PoolMonitor"); - setDaemon(true); - this.pool = ds; - logger = log; - } - - /** - * Set the sampling period. - * This cannot be done in the PoolKeeper constructor, because the - * sampling period has not been set already in the Pool. - * Moreover, this can be reconfigured later. - * @param sec sampling period in sec. - */ - public void setSamplingPeriod(final int sec) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " to " + sec); - } - samplingperiod = sec * 1000L; - } - - /** - * Set the adjust period. - * This cannot be done in the PoolKeeper constructor, because the - * sampling period has not been set already in the Pool. - * Moreover, this can be reconfigured later. - * @param sec adjust period in sec. - */ - public void setAdjustPeriod(final int sec) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " to " + sec); - } - adjustperiod = sec * 1000L; - } - - /** - * Stop this thread. - */ - public void stopit() { - stopped = true; - } - - /** - * Start the pool keeper thread - */ - @Override - public void run() { - long timeout; - long adjusttime = adjustperiod; - long samplingtime = samplingperiod; - while (! stopped) { - timeout = adjusttime; - if (samplingtime < timeout) { - timeout = samplingtime; - } - try { - sleep(timeout); - adjusttime -= timeout; - samplingtime -= timeout; - if (adjusttime <= 0) { - pool.adjust(); - adjusttime = adjustperiod; - } - if (samplingtime <= 0) { - pool.sampling(); - samplingtime = samplingperiod; - } - } catch (NullPointerException e) { - logger.log(BasicLevel.ERROR, "poolkeeper NPE", e); - e.printStackTrace(); - adjusttime = errorperiod; - samplingtime = errorperiod; - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "poolkeeper error", e); - e.printStackTrace(); - adjusttime = errorperiod; - samplingtime = errorperiod; - } - } - } - } - - /** - * Attempts to establish a physical database connection that can - * be used as a pooled connection. - * - * @return a PooledConnection object that is a physical - * connection to the database that this - * ConnectionPoolDataSource object represents - * @exception SQLException if a database access error occurs - */ - @Override - public PooledConnection getPooledConnection() throws SQLException { - return getXAConnection(); - } - - /** - * Attempts to establish a physical database connection that can - * be used as a pooled connection. - * - * @param user the database user on whose behalf the connection is being made - * @param password the user's password - * @return a PooledConnection object that is a physical - * connection to the database that this - * ConnectionPoolDataSource object represents - * @exception SQLException if a database access error occurs - */ - @Override - public PooledConnection getPooledConnection(final String user, final String password) throws SQLException { - return getXAConnection(user, password); - } - -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/IConnection.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/IConnection.java deleted file mode 100644 index 3e40f30864..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/IConnection.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.cm; - -import java.sql.Connection; -import java.sql.SQLException; - - -/** - * Extends the SQL Connection interface with a method to get the physical SQL connection. - * @author Florent BENOIT - */ -public interface IConnection extends Connection { - - /** - * Gets the physical connection to the database. - * @return physical connection to the database - */ - Connection getConnection(); - - /** - * @return true if the connection to the database is closed or not. - * @throws SQLException if a database access error occurs - */ - boolean isPhysicallyClosed() throws SQLException; - - - void setCheckClose(boolean cc); -} - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JConnection.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JConnection.java deleted file mode 100644 index 80a3f60433..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JConnection.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.cm; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.sql.Connection; -import java.sql.SQLException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; - -/** - * This is a wrapper on the logical Connection. - * Only close and setAutoCommit have a special treatment. - * @author durieuxp - */ -public class JConnection implements InvocationHandler { - - static private Logger logger = Log.getLogger(Log.JONAS_DBM_PREFIX + ".con"); - - - /** - * JDBC connection provided by the DriverManager. - */ - private Connection physicalConnection = null; - - /** - * XA connection which receive events. - */ - private JManagedConnection xaConnection = null; - - - protected boolean checkclose = true; - - /** - * Buils a Connection (viewed by the user) which rely on a Managed - * connection and a physical connection. - * @param xaConnection the XA connection. - * @param physicalConnection the connection to the database. - */ - public JConnection(final JManagedConnection xaConnection, final Connection physicalConnection) { - this.xaConnection = xaConnection; - this.physicalConnection = physicalConnection; - } - - /** - * Gets the physical connection to the database. - * @return physical connection to the database - */ - public Connection getConnection() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - return physicalConnection; - } - - /** - * @return true if the connection to the database is closed or not. - * @throws SQLException if a database access error occurs - */ - public boolean isPhysicallyClosed() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return physicalConnection.isClosed(); - } - - /** - * Processes a method invocation on a proxy instance and returns the result. - * This method will be invoked on an invocation handler when a method is - * invoked on a proxy instance that it is associated with. - * @param proxy the proxy instance that the method was invoked on - * @param method the Method instance corresponding to the - * interface method invoked on the proxy instance. - * @param args an array of objects containing the values of the arguments - * passed in the method invocation on the proxy instance, or - * null if interface method takes no arguments. - * @return the value to return from the method invocation on the proxy - * instance. - * @throws Throwable the exception to throw from the method invocation on - * the proxy instance. The exception's type must be assignable - * either to any of the exception types declared in the - * throws clause of the interface method or to the - * unchecked exception types java.lang.RuntimeException - * or java.lang.Error. If a checked exception is - * thrown by this method that is not assignable to any of the - * exception types declared in the throws clause of - * the interface method, then an UndeclaredThrowableException - * containing the exception that was thrown by this method will be - * thrown by the method invocation on the proxy instance. - */ - public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { - - // Methods on the Object.class are not send on the connection impl - if (method.getDeclaringClass().getName().equals("java.lang.Object")) { - return handleObjectMethods(method, args); - } - - // Methods that are part of the IConnection interface - if ("getConnection".equals(method.getName())) { - return getConnection(); - } else if ("isClosed".equals(method.getName())) { - return isClosed(); - } else if ("isPhysicallyClosed".equals(method.getName())) { - return Boolean.valueOf(isPhysicallyClosed()); - } else if ("setCheckClose".equals(method.getName())) { - setCheckClose((Boolean) args[0]); - return null; - } else if ("close".equals(method.getName())) { - xaConnection.notifyClose(); - return null; - } else if ("prepareStatement".equals(method.getName()) && method.getParameterTypes().length == 1) { - // Use the xaConnection Object (which allow to have the preparedstatement pool) but only for method with SQL - try { - return xaConnection.prepareStatement((String) args[0]); - } catch (SQLException e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Exception while calling method '" + method + "' on object '" - + xaConnection + "'.", e); - } - xaConnection.notifyError(e); - throw e; - } - } else { - - if (!(method.getName().startsWith("get") || method.getName().startsWith("set"))) { - if (checkclose && isClosed()) { - logger.log(BasicLevel.ERROR, "Cannot work with a closed Connection"); - throw new SQLException("Cannot work with a closed Connection"); - } - } - // Else delegate to the physicalConnection object - try { - Class physicalConnectionClass = physicalConnection.getClass(); - Class methodClass = method.getDeclaringClass(); - if (methodClass.isAssignableFrom(physicalConnectionClass)) { - return method.invoke(physicalConnection, args); - } else { - throw new IllegalArgumentException("Proxy error: the physical connection (class: " - + physicalConnectionClass.getName() + ") cannot be cast to a " + methodClass.getName()); - } - } catch (InvocationTargetException e) { - // Check if it is an SQLException - Throwable targetException = e.getTargetException(); - if (targetException instanceof SQLException) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Exception while calling method '" + method + "' on object '" - + physicalConnection + "'."); - } - xaConnection.notifyError((SQLException) targetException); - } - // Rethrow Exception - throw targetException; - } - - } - } - - - /** - * Manages all methods of java.lang.Object class. - * @param method the Method instance corresponding to the - * interface method invoked on the proxy instance. The declaring - * class of the Method object will be the interface - * that the method was declared in, which may be a superinterface of - * the proxy interface that the proxy class inherits the method - * through. - * @param args an array of objects containing the values of the arguments - * passed in the method invocation on the proxy instance - * @return the value of the called method. - */ - protected Object handleObjectMethods(final Method method, final Object[] args) { - String methodName = method.getName(); - - if (methodName.equals("equals")) { - // equals with a proxy - if (Proxy.isProxyClass(args[0].getClass())) { - return this.equals(Proxy.getInvocationHandler(args[0])); - } - return Boolean.valueOf(this.equals(args[0])); - } else if (methodName.equals("toString")) { - return this.toString(); - } else if (methodName.equals("hashCode")) { - return Integer.valueOf(this.hashCode()); - } else { - throw new IllegalStateException("Method '" + methodName + "' is not present on Object.class."); - } - } - - public void setCheckClose(final boolean cc) { - checkclose = cc; - } - - public boolean isClosed() throws SQLException { - return xaConnection.isClosed(); - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JManagedConnection.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JManagedConnection.java deleted file mode 100644 index be2f52a3b9..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JManagedConnection.java +++ /dev/null @@ -1,983 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.dbm.internal.cm; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.lang.reflect.Proxy; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.sql.ConnectionEvent; -import javax.sql.ConnectionEventListener; -import javax.sql.StatementEventListener; -import javax.sql.XAConnection; -import javax.transaction.Synchronization; -import javax.transaction.Transaction; -import javax.transaction.xa.XAException; -import javax.transaction.xa.XAResource; -import javax.transaction.xa.Xid; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.tm.Enlistable; - -/** - * This class represents the physical connection, managed by the pool. - * It implements the PooledConnection interface, in fact via the derived - * XAConnection interface. - * @author durieuxp - */ -public class JManagedConnection implements Comparable, XAConnection, XAResource, Synchronization, Enlistable { - - static private Logger logger = Log.getLogger(Log.JONAS_DBM_PREFIX); - static private Logger loggerxa = Log.getLogger(Log.JONAS_DBM_PREFIX + ".xa"); - static private Logger loggerps = Log.getLogger(Log.JONAS_DBM_PREFIX + ".ps"); - - /** - * The JConnection object (= wrapper on the logical Connection) - */ - IConnection implConn = null; - - /** - * The physical Connection behind. - */ - Connection actConn = null; - - /** - * The ConnectionManager managing this Connection. - */ - ConnectionManager ds; - - // Most of the time, only 1 element, but must keep a Vector here. - private Vector eventListeners = new Vector(); - - // Listener for statements (No generics so that it will work on JDK5 as StatementEventListener is not available on this JDK) - private Vector statementEventListeners = new Vector(); - - // Not really used. - private int timeout; - - /** - * datasource name - */ - private String rmid = null; - - /** - * Use count. A positive value means that the connection has been opened - * by someone. - */ - private int open; - - /** - * transaction the connection is involved with - */ - private Transaction tx; - - /** - * current transaction in case of late enlistment - * Not really used, just a hint. - */ - private Transaction enlistedInTx; - - /** - * true if registered as Enlistable - */ - private boolean rme = false; - - /** - * When it is expected to die (for closed connections) - */ - private long deathTime; - - /** - * When it is expected to be closed (for opened connections) - */ - private long closeTime; - - /** - * List of Thread infos of clients that opened this connection. - */ - private List openerThreadInfos = new ArrayList(); - - /** - * When the connection has been created. - */ - private long creationTime; - - private static final long DEFAULT_OPENING_TIME = -1; - /** - * When that connection was used for an application (with open == 0). - */ - private long openingTime = DEFAULT_OPENING_TIME; - - - - /** - * Used internally for the PrepareStatement cache. - */ - private static int objcount = 10; // to have a minimum of prepare statements. - private int ident; - private int hitCount = 0; - - /** - * Size of the PrepareStement cache for this Connection. - * Notice that not all Connections have the same limit. - * (optimization of the ps cache) - */ - private int pstmtmax; - - /** - * List of PreparedStatement in the pool. - * This list is synchronized. - */ - private Map psList = null; - - /** - * List of Thread infos of clients that released this connection. - */ - private List closerThreadInfos = new ArrayList(); - - // ----------------------------------------------------------------- - // Constructors - // ----------------------------------------------------------------- - - public JManagedConnection(final Connection conn, final ConnectionManager ds) { - - logger.log(BasicLevel.DEBUG, "constructor"); - - this.actConn = conn; - this.ds = ds; - - // An XAConnection holds 2 objects: 1 Connection + 1 XAResource - this.implConn = (IConnection) Proxy.newProxyInstance(IConnection.class.getClassLoader(), new Class[] {IConnection.class}, - new JConnection(this, conn)); - - - this.rmid = ds.getDatasourceName(); - - open = 0; - creationTime = System.currentTimeMillis(); - deathTime = creationTime + ds.getMaxAgeMilli(); - - // getPstmtMax() = 0 -> no pool for PreparedStatement's - // Not all connections have the same number of prepare statement. - ident = objcount++; - if (ds.getPstmtMax() > 0) { - int pstmtmin = 1 + ds.getPstmtMax() / 4; - pstmtmax = ident % ds.getPstmtMax(); - if (pstmtmax < pstmtmin) { - pstmtmax = pstmtmin; - } - psList = Collections.synchronizedMap(new HashMap(pstmtmax)); - } - } - - /** - * @return The ident of this JManagedConnection - */ - public int getIdent() { - return ident; - } - - /** - * Dynamically change the prepared statement pool size - */ - public void setPstmtMax(final int max) { - pstmtmax = max; - if (psList == null) { - psList = Collections.synchronizedMap(new HashMap(pstmtmax)); - } - } - - // ----------------------------------------------------------------- - // XAResource implementation - // Important Notice: This is a pseudo XA driver. Not full XA is - // supported. For example, prepare returns always OK. - // To use a real XA driver, you should use the RA-jdbc instead of DBM. - // ----------------------------------------------------------------- - - /** - * Commit the global transaction specified by xid. - * @param xid transaction xid - * @param onePhase true if one phase commit - * @throws XAException XA protocol error - */ - public void commit(final Xid xid, final boolean onePhase) throws XAException { - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-COMMIT for " + xid); - } - - // Avoids a NPE. - // This should not occur because a close could not be called - // on a connection implied inside a transaction. - if (actConn == null) { - loggerxa.log(BasicLevel.ERROR, "commit on a closed connection"); - return; - } - - // Make sure that we are not in AutoCommit mode - try { - if (implConn.getAutoCommit() == true) { - loggerxa.log(BasicLevel.ERROR, "Commit called on XAResource with AutoCommit set"); - throw (new XAException(XAException.XA_HEURCOM)); - } - } catch (SQLException e) { - loggerxa.log(BasicLevel.ERROR, "Cannot getAutoCommit:" + e); - notifyError(e); - throw(new XAException("Error on getAutoCommit")); - } - - // Commit the transaction - SQLException commitException = null; - try { - actConn.commit(); - } catch (SQLException e) { - // Only store the exception at this point since the - // connection cannot be removed until the auto-commit - // mode has been reset - commitException = e; - throw(new XAException("Error on commit")); - } finally { - // Reset the auto-commit flag - try { - implConn.setAutoCommit(true); - } catch (Exception exc) { - loggerxa.log(BasicLevel.DEBUG, "Unable to set autoCommit to true:", exc); - } - if (commitException != null) { - loggerxa.log(BasicLevel.ERROR, "Cannot commit transaction:" + commitException); - // Notify the listeners of the error - notifyError(commitException); - } - } - } - - /** - * Ends the work performed on behalf of a transaction branch. - * @param xid transaction xid - * @param flags currently unused - * @throws XAException XA protocol error - */ - public void end(final Xid xid, final int flags) throws XAException { - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-END for " + xid); - } - } - - /** - * Tell the resource manager to forget about a heuristically - * completed transaction branch. - * @param xid transaction xid - * @throws XAException XA protocol error - */ - public void forget(final Xid xid) throws XAException { - // not implemented. - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-FORGET for " + xid); - } - } - - /** - * Obtain the current transaction timeout value set for this - * XAResource instance. - * @return the current transaction timeout in seconds - * @throws XAException XA protocol error - */ - public int getTransactionTimeout() throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "getTransactionTimeout for " + this); - } - return timeout; - } - - /** Determine if the resource manager instance represented by the - * target object is the same as the resource manager instance - * represented by the parameter xares - * @param xares An XAResource object - * @return True if same RM instance, otherwise false. - * @throws XAException XA protocol error - */ - public boolean isSameRM(final XAResource xares) throws XAException { - - - // In this pseudo-driver, we must return true only if - // both objects refer to the same XAResource, and not - // the same Resource Manager, because actually, we must - // send commit/rollback on each XAResource involved in - // the transaction. - if (xares.equals(this)) { - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "isSameRM = true " + this); - } - return true; - } - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "isSameRM = false " + this); - } - return false; - } - - - /** - * Ask the resource manager to prepare for a transaction commit - * of the transaction specified in xid. - * @param xid transaction xid - * @throws XAException XA protocol error - */ - public int prepare(final Xid xid) throws XAException { - - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-PREPARE for " + xid); - } - // No 2PC on standard JDBC drivers - return XA_OK; - } - - /** - * Obtain a list of prepared transaction branches from a resource - * manager. - * @return an array of transaction Xids - * @throws XAException XA protocol error - */ - public Xid[] recover(final int flag) throws XAException { - - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-RECOVER for " + this); - } - // Not implemented - return null; - } - - /** - * Inform the resource manager to roll back work done on behalf - * of a transaction branch - * @param xid transaction xid - * @throws XAException XA protocol error - */ - public void rollback(final Xid xid) throws XAException { - - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-ROLLBACK for " + xid); - } - - // Avoids a NPE. - // This should not occur because a close could not be called - // on a connection implied inside a transaction. - if (actConn == null) { - loggerxa.log(BasicLevel.ERROR, "rollback on a closed connection"); - return; - } - - // Make sure that we are not in AutoCommit mode - try { - if (implConn.getAutoCommit() == true) { - loggerxa.log(BasicLevel.ERROR, "Rollback called on XAResource with AutoCommit set"); - throw (new XAException(XAException.XA_HEURCOM)); - } - } catch (SQLException e) { - loggerxa.log(BasicLevel.ERROR, "Cannot getAutoCommit:" + e); - notifyError(e); - throw(new XAException("Error on getAutoCommit")); - } - - // Rollback the transaction - SQLException rbException = null; - try { - actConn.rollback(); - } catch (SQLException e) { - // Only store the exception at this point since the - // connection cannot be removed until the auto-commit - // mode has been reset - rbException = e; - throw(new XAException("Error on rollback")); - } finally { - // Reset the auto-commit flag - try { - implConn.setAutoCommit(true); - } catch (Exception exc) { - loggerxa.log(BasicLevel.DEBUG, "Unable to set autoCommit to true:", exc); - } - if (rbException != null) { - loggerxa.log(BasicLevel.ERROR, "Cannot rollback transaction:" + rbException); - // Notify the listeners of the error - notifyError(rbException); - } - } - } - - /** - * Set the current transaction timeout value for this XAResource - * instance. - * @param seconds timeout value, in seconds. - * @return always true - * @throws XAException XA protocol error - */ - public boolean setTransactionTimeout(final int seconds) throws XAException { - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "setTransactionTimeout " + this); - } - timeout = seconds; - return true; - } - - /** - * Start work on behalf of a transaction branch specified in xid - * @param xid transaction xid - * @throws XAException XA protocol error - */ - public void start(final Xid xid, final int flags) throws XAException { - - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "XA-START for " + xid); - } - // Unset AutoCommit mode on Connection - try { - implConn.setAutoCommit(false); - } catch (Exception ex) { - loggerxa.log(BasicLevel.ERROR, "Unable to set autoCommit to false:" + ex.getMessage()); - throw new XAException("XAResourceImpl.start : Cannot unset autoCommit"); - } - } - - // ----------------------------------------------------------------- - // XAConnection implementation - // ----------------------------------------------------------------- - - /** - * Return an XA resource to the caller. - * @return The XAResource - * @exception SQLException - if a database-access error occurs - */ - public XAResource getXAResource() throws SQLException { - return this; - } - - // ----------------------------------------------------------------- - // Comparable implementation - // ----------------------------------------------------------------- - - /** - * Compare is based on the number of PrepareStatement cached in this Connection. - */ - public int compareTo(final Object o) { - JManagedConnection other = (JManagedConnection) o; - int diff = psNumber() - other.psNumber(); - if (diff == 0) { - return getIdent() - other.getIdent(); - } else { - return diff; - } - } - - public int psNumber() { - return hitCount; - } - - // ----------------------------------------------------------------- - // PooledConnection implementation - // ----------------------------------------------------------------- - - /** - * Create an object handle for a database connection. - * @exception SQLException - if a database-access error occurs - */ - public Connection getConnection() throws SQLException { - // Just return the already created object. - return implConn; - } - - /** - * Close the database connection. - * This will physically close the Connection. - * @exception SQLException - if a database-access error occurs - */ - public void close() throws SQLException { - logger.log(BasicLevel.DEBUG, "Close Physical Connection"); - - // Close the actual Connection here. - if (actConn != null) { - actConn.close(); - } else { - logger.log(BasicLevel.INFO, "Connection already closed"); - } - actConn = null; - implConn = null; - } - - /** - * Add an event listener. - * - * @param listener event listener - */ - public void addConnectionEventListener(final ConnectionEventListener listener) { - logger.log(BasicLevel.DEBUG, ""); - eventListeners.addElement(listener); - } - - /** - * Remove an event listener. - * - * @param listener event listener - */ - public void removeConnectionEventListener(final ConnectionEventListener listener) { - logger.log(BasicLevel.DEBUG, ""); - eventListeners.removeElement(listener); - } - - /** - * Enlist Connection in the Transaction - */ - public void enlistConnection(final Transaction transaction) throws javax.transaction.SystemException { - try { - if (rme) { - if (implConn == null) { - loggerxa.log(BasicLevel.WARN, "Cannot enlist a closed connection"); - return; - } - // the tx value of the pool item does not match with the enlisted value !? - enlistedInTx = transaction; - // enlist the resource - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "enlist XAResource on " + transaction); - } - transaction.enlistResource(getXAResource()); - } - } catch (javax.transaction.RollbackException e) { - javax.transaction.SystemException se = new javax.transaction.SystemException("Unexpected RollbackException exception"); - se.initCause(e); - throw se; - } catch (java.sql.SQLException e) { - javax.transaction.SystemException se = new javax.transaction.SystemException("Unexpected SQL exception"); - se.initCause(e); - throw se; - } - } - - /** - * delistConnection: used for Stateful beans at postInvoke. - */ - public void delistConnection(final Transaction transaction) { - try { - if (rme) { - if (loggerxa.isLoggable(BasicLevel.DEBUG)) { - loggerxa.log(BasicLevel.DEBUG, "delist XAResource on " + transaction); - } - transaction.delistResource(getXAResource(), XAResource.TMSUCCESS); - enlistedInTx = null; - } - } catch (Exception e) { - loggerxa.log(BasicLevel.WARN, "Cannot delist Resource:" + e); - } - } - - /** - * synchronization implementation - */ - public void beforeCompletion() { - // nothing to do - } - - /** - * synchronization implementation - */ - public void afterCompletion(final int status) { - if (tx == null ) { - loggerxa.log(BasicLevel.ERROR, "NO TX!"); - } - ds.freeConnections(tx != null ? tx : enlistedInTx); - } - - /** - * @return true if connection max age has expired - */ - public boolean isAged() { - return (deathTime < System.currentTimeMillis()); - } - - /** - * @return true if connection is still open - */ - public boolean isOpen() { - return (open > 0); - } - - /** - * @return open count - */ - public int getOpenCount() { - return open; - } - - /** - * Check if the connection has been unused for too long time. - * This occurs usually when the caller forgot to call close(). - * @return true if open time has been reached, and not involved in a tx. - */ - public boolean inactive() { - return (open > 0 && tx == null && enlistedInTx == null && closeTime < System.currentTimeMillis()); - } - - /** - * @return true if connection is closed - */ - public boolean isClosed() { - return (open <= 0); - } - - /** - * @return the time when that connection was used for the first time in a sequence. - */ - public long getOpeningTime() { - return this.openingTime; - } - - /** - * @return the time when that connection was created (new instance). - */ - public long getCreationTime() { - return this.creationTime; - } - - /** - * @return the list of stack traces of clients that have opened this connection. - */ - public List getOpenerThreadInfos() { - return this.openerThreadInfos; - } - - /** - * @return the list of stack traces of clients that have closed this connection. - */ - public List getCloserThreadInfos() { - return this.closerThreadInfos; - } - - /** - * Notify as opened - */ - public void hold() { - if (ds.isObservable()) { - // Store the first opening time (if connection is shared) - if (open == 0) { - this.openingTime = System.currentTimeMillis(); - } - // Store the opener's stack - openerThreadInfos.add(getThreadInfos()); - } - open++; - closeTime = System.currentTimeMillis() + ds.getMaxOpenTimeMilli(); - } - - /** - * notify as closed - * @return true if normal close. - */ - public boolean release() { - open--; - if (ds.isObservable()) { - if (open == 0) { - // Reset the openingTime counter - this.openingTime = DEFAULT_OPENING_TIME; - // Reset the thread infos - this.openerThreadInfos.clear(); - this.closerThreadInfos.clear(); - } else { - // Store the closer's stack - closerThreadInfos.add(getThreadInfos()); - } - } - if (open < 0) { - logger.log(BasicLevel.INFO, "connection was already closed"); - open = 0; - return false; - } - if (tx == null && open > 0) { - logger.log(BasicLevel.ERROR, "connection-open counter overflow"); - open = 0; - } - - // Close all PreparedStatement not already closed - // When a Connection has been closed, no PreparedStatement should - // remain open. This can avoids lack of cursor on some databases. - if (open == 0 && pstmtmax > 0) { - synchronized(psList) { - JStatement jst = null; - Iterator i = psList.values().iterator(); - while (i.hasNext()) { - jst = (JStatement) i.next(); - jst.forceClose(); - } - } - } - - return true; - } - - /** - * Compute Thread related informations. - * @return a list containing: thread name, time of the action - * and a stack trace (as a string). - */ - private Map getThreadInfos() { - Map infos = new HashMap(); - // Name - infos.put("thread.name", Thread.currentThread().getName()); - // Now - infos.put("thread.time", new Long(System.currentTimeMillis())); - // Stack trace (JDK 1.4 compatible) - StringWriter str = new StringWriter(); - PrintWriter writer = new PrintWriter(str); - new Throwable().printStackTrace(writer); - infos.put("thread.stack", str.getBuffer().toString()); - - return infos; - } - - /** - * Set the associated transaction - * @param tx Transaction - */ - public void setTx(final Transaction tx) { - this.tx = tx; - } - - /** - * @return the Transaction - */ - public Transaction getTx() { - return tx; - } - - /** - * @return true if registered as RME - */ - public boolean isRME() { - return rme; - } - - /** - * set/unset as RME - */ - public void setRME(final boolean rme) { - this.rme = rme; - } - - /** - * remove this item, ignoring exception on close. - */ - public void remove() { - // Make sure that the Connection is logically closed - // Release only if it is being used - if (open > 0) { - release(); - } - - // Close the physical connection - try { - close(); - } catch (java.sql.SQLException ign) { - logger.log(BasicLevel.ERROR, "Could not close Connection: ", ign); - } - - // remove all references (for GC) - tx = null; - enlistedInTx = null; - } - - // ----------------------------------------------------------------- - // Other methods - // ----------------------------------------------------------------- - - /** - * Try to find a PreparedStatement in the pool - */ - public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency) - throws SQLException { - - if (actConn == null) { - loggerps.log(BasicLevel.WARN, "A close has been forced on this Connection."); - SQLException sqle = new SQLException("A close has been forced on this Connection."); - sqle.printStackTrace(); - throw sqle; - } - - loggerps.log(BasicLevel.DEBUG, sql); - if (pstmtmax == 0) { - return actConn.prepareStatement(sql, resultSetType, resultSetConcurrency); - } - JStatement ps = null; - synchronized (psList) { - ps = (JStatement) psList.get(sql); - if (ps != null) { - if (! ps.isClosed()) { - // Dont reuse it if already in use. (issue JONAS-109) - // Do not use the cache in that case. - return actConn.prepareStatement(sql, resultSetType, resultSetConcurrency); - } - ps.reuse(); - hitCount++; - } else { - // Not found in cache. Create a new one. - PreparedStatement aps = actConn.prepareStatement(sql, resultSetType, resultSetConcurrency); - ps = new JStatement(aps, this, sql); - psList.put(sql, ps); - } - } - return ps; - } - - /** - * Try to find a PreparedStatement in the pool - */ - public PreparedStatement prepareStatement(final String sql) throws SQLException { - return prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); - } - - /** - * A PreparedStatement has been logically closed. - * @return - */ - public void notifyPsClose(final JStatement ps) { - loggerps.log(BasicLevel.DEBUG, ps.getSql()); - - // Notify event to listeners - /* - for (Object listener : statementEventListeners) { - ((StatementEventListener) listener).statementClosed(new StatementEvent(this, ps)); - }*/ - - if (pstmtmax == 0) { - return; - } - synchronized (psList) { - if (psList.size() >= pstmtmax) { - // Choose a closed element to remove. - // TODO: Should be the LRU. - JStatement lru = null; - Iterator i = psList.values().iterator(); - while (i.hasNext()) { - lru = (JStatement) i.next(); - if (lru.isClosed()) { - // actually, remove the first closed element. - i.remove(); - lru.forget(); - break; - } - } - } - } - } - - /* - * get the RMID - * @return the rmid. - */ - public String getRMID() { - return rmid; - } - - - /* - * Notify a Close error statement - */ - public synchronized void notifyStatementError(final PreparedStatement statement, final SQLException e) { - logger.log(BasicLevel.DEBUG, ""); - - // Notify event to listeners - /* - for (Object listener : statementEventListeners) { - ((StatementEventListener) listener).statementErrorOccurred(new StatementEvent(this, statement, e)); - } - */ - } - - /* - * Notify a Close event on Connection - */ - public void notifyClose() { - logger.log(BasicLevel.DEBUG, ""); - - // Notify event to listeners - logger.log(BasicLevel.DEBUG, ""); - for (int i = 0; i < eventListeners.size(); i++) { - ConnectionEventListener l = (ConnectionEventListener) eventListeners.elementAt(i); - l.connectionClosed(new ConnectionEvent(this)); - } - } - - /* - * Notify an Error event on Connection - */ - public void notifyError(final SQLException ex) { - logger.log(BasicLevel.DEBUG, ""); - - // Notify event to listeners - for (int i = 0; i < eventListeners.size(); i++) { - ConnectionEventListener l = (ConnectionEventListener) eventListeners.elementAt(i); - l.connectionErrorOccurred(new ConnectionEvent(this, ex)); - } - } - - /** - * Registers a StatementEventListener with this PooledConnection object. Components that wish to be - * notified when PreparedStatements created by the connection are closed or are detected to be invalid may use - * this method to register a StatementEventListener with this PooledConnection object. - *

    - * @param listener an component which implements the StatementEventListener interface that is to be registered - * with this PooledConnection object - *

    - * @since 1.6 - */ - public void addStatementEventListener(final StatementEventListener listener) { - statementEventListeners.add(listener); - } - - /** - * Removes the specified StatementEventListener from the list of components that will be notified when the driver - * detects that a PreparedStatement has been closed or is invalid. - *

    - * @param listener the component which implements the StatementEventListener interface that was previously - * registered with this PooledConnection object - *

    - * @since 1.6 - */ - public void removeStatementEventListener(final StatementEventListener listener) { - statementEventListeners.remove(listener); - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JStatement.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JStatement.java deleted file mode 100644 index 44bbffcb5f..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/JStatement.java +++ /dev/null @@ -1,988 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.dbm.internal.cm; - -import java.io.InputStream; -import java.io.Reader; -import java.sql.NClob; -import java.sql.RowId; -import java.sql.SQLException; -import java.sql.SQLFeatureNotSupportedException; -import java.sql.SQLXML; -import java.sql.Types; -import java.io.InputStream; -import java.io.Reader; -import java.math.BigDecimal; -import java.net.URL; -import java.sql.Array; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.Connection; -import java.sql.Date; -import java.sql.ParameterMetaData; -import java.sql.PreparedStatement; -import java.sql.Ref; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.SQLWarning; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.Calendar; - -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Wrapper on a PreparedStatement. This wrapper is used to track close method - * in order to avoid closing the statement, and putting it instead in a pool. - * @author durieuxp - */ -public class JStatement implements PreparedStatement { - - private boolean changed = false; - private boolean opened; - private boolean closing = false; - - /** - * Physical PreparedStatement object on which the wrapper is. - */ - private PreparedStatement ps; - - /** - * Managed Connection the Statement belongs to - */ - private JManagedConnection mc; - - private int hashCode; - private String sql; - private Logger logger = Log.getLogger(Log.JONAS_DBM_PREFIX + ".ps"); - - public JStatement(PreparedStatement ps, JManagedConnection mc, String sql) { - logger.log(BasicLevel.DEBUG, "constructor"); - this.ps = ps; - this.mc = mc; - this.sql = sql; - hashCode = sql.hashCode(); - opened = true; - } - - public String getSql() { - return sql; - } - - /** - * @return hashcode of the object - */ - public int hashCode() { - return hashCode; - } - - /** - * @param stmt given statement for comparing it - * @return true if given object is equals to this current object - */ - public boolean equals(Object stmt) { - if (stmt == null) { - return false; - } - // different hashcode, cannot be equals - if (this.hashCode != stmt.hashCode()) { - return false; - } - - // if got same hashcode, try to see if cast is ok. - if (!(stmt instanceof JStatement)) { - logger.log(BasicLevel.WARN, "Bad class:" + stmt); - return false; - } - JStatement psw = (JStatement) stmt; - if (sql == null && psw.getSql() != null) { - return false; - } - if (sql != null && !sql.equals(psw.getSql())) { - return false; - } - try { - if (psw.getResultSetType() != getResultSetType()) { - return false; - } - if (psw.getResultSetConcurrency() != getResultSetConcurrency()) { - return false; - } - } catch (SQLException e) { - logger.log(BasicLevel.WARN, "Cannot compare statements:" + e); - return false; - } - logger.log(BasicLevel.DEBUG, "Found"); - return true; - } - - /** - * Force a close on the Prepare Statement. - * Usually, it's the caller that did not close it explicitly - * @return true if it was open - */ - public boolean forceClose() { - if (opened) { - logger.log(BasicLevel.WARN, "Statements should be closed explicitly."); - opened = false; - return true; - } else { - return false; - } - } - - public void reuse() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.clearParameters(); - ps.clearWarnings(); - opened = true; - if (changed) { - logger.log(BasicLevel.DEBUG, "changed"); - ps.clearBatch(); - ps.setFetchDirection(ResultSet.FETCH_FORWARD); - ps.setMaxFieldSize(0); - ps.setMaxRows(0); - ps.setQueryTimeout(0); - changed = false; - } - } - - /** - * Retrieves whether this Statement object has been closed. A Statement is closed if the method - * close has been called on it, or if it is automatically closed. - * @return true if this Statement object is closed; false if it is still open - * @throws SQLException if a database access error occurs - * @since 1.6 - */ - public boolean isClosed() { - return ! opened && ! closing; - } - - /** - * Physically close this Statement - * @throws SQLException - */ - public void forget() { - logger.log(BasicLevel.DEBUG, ""); - try { - ps.close(); - } catch (SQLException e) { - mc.notifyStatementError(this, e); - logger.log(BasicLevel.ERROR, "Cannot close the PreparedStatement:" + e); - } - - } - - // ------------------------------------------------------------------ - // PreparedStatement implementation. - // Most of the methods are just redirected on the PreparedStatement. - // ------------------------------------------------------------------ - - public int executeUpdate() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.executeUpdate(); - } - - public void addBatch() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.addBatch(); - } - - public void clearParameters() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.clearParameters(); - } - - public boolean execute() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.execute(); - } - - public void setByte(int parameterIndex, byte x) throws SQLException { - ps.setByte(parameterIndex, x); - } - - public void setDouble(int parameterIndex, double x) throws SQLException { - ps.setDouble(parameterIndex, x); - } - - public void setFloat(int parameterIndex, float x) throws SQLException { - ps.setFloat(parameterIndex, x); - } - - public void setInt(int parameterIndex, int x) throws SQLException { - ps.setInt(parameterIndex, x); - } - - public void setNull(int parameterIndex, int sqlType) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setNull(parameterIndex, sqlType); - } - - public void setLong(int parameterIndex, long x) throws SQLException { - ps.setLong(parameterIndex, x); - } - - public void setShort(int parameterIndex, short x) throws SQLException { - ps.setShort(parameterIndex, x); - } - - public void setBoolean(int parameterIndex, boolean x) throws SQLException { - ps.setBoolean(parameterIndex, x); - } - - public void setBytes(int parameterIndex, byte[] x) throws SQLException { - ps.setBytes(parameterIndex, x); - } - - public void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setAsciiStream(parameterIndex, x, length); - } - - public void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setBinaryStream(parameterIndex, x, length); - } - - public void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setUnicodeStream(parameterIndex, x, length); - } - - public void setCharacterStream(int parameterIndex, Reader reader, int length) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setCharacterStream(parameterIndex, reader, length); - } - - public void setObject(int parameterIndex, Object x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setObject(parameterIndex, x); - } - - public void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setObject(parameterIndex, x, targetSqlType); - } - - public void setObject(int parameterIndex, Object x, int targetSqlType, int scale) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setObject(parameterIndex, x, targetSqlType, scale); - } - - public void setNull(int paramIndex, int sqlType, String typeName) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setNull(paramIndex, sqlType, typeName); - } - - public void setString(int parameterIndex, String x) throws SQLException { - ps.setString(parameterIndex, x); - } - - public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setBigDecimal(parameterIndex, x); - } - - public void setURL(int parameterIndex, URL x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setURL(parameterIndex, x); - } - - public void setArray(int i, Array x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setArray(i, x); - } - - public void setBlob(int i, Blob x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setBlob(i, x); - } - - public void setClob(int i, Clob x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setClob(i, x); - } - - public void setDate(int parameterIndex, Date x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setDate(parameterIndex, x); - } - - public ParameterMetaData getParameterMetaData() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.getParameterMetaData(); - } - - public void setRef(int i, Ref x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setRef(i, x); - } - - public ResultSet executeQuery() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.executeQuery(); - } - - public ResultSetMetaData getMetaData() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.getMetaData(); - } - - public void setTime(int parameterIndex, Time x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setTime(parameterIndex, x); - } - - public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setTimestamp(parameterIndex, x); - } - - public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setDate(parameterIndex, x, cal); - } - - public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setTime(parameterIndex, x, cal); - } - - public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setTimestamp(parameterIndex, x, cal); - } - - public int getFetchDirection() throws SQLException { - return ps.getFetchDirection(); - } - - public int getFetchSize() throws SQLException { - return ps.getFetchSize(); - } - - public int getMaxFieldSize() throws SQLException { - return ps.getMaxFieldSize(); - } - - public int getMaxRows() throws SQLException { - return ps.getMaxRows(); - } - - public int getQueryTimeout() throws SQLException { - return ps.getQueryTimeout(); - } - - public int getResultSetConcurrency() throws SQLException { - return ps.getResultSetConcurrency(); - } - - public int getResultSetHoldability() throws SQLException { - return ps.getResultSetHoldability(); - } - - public int getResultSetType() throws SQLException { - return ps.getResultSetType(); - } - - public int getUpdateCount() throws SQLException { - return ps.getUpdateCount(); - } - - public void cancel() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.cancel(); - } - - public void clearBatch() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.clearBatch(); - } - - public void clearWarnings() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.clearWarnings(); - } - - public void close() throws SQLException { - if (! opened) { - logger.log(BasicLevel.DEBUG, "Statement already closed"); - return; - } - logger.log(BasicLevel.DEBUG, ""); - opened = false; - closing = true; - mc.notifyPsClose(this); - closing = false; - } - - public boolean getMoreResults() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.getMoreResults(); - } - - public int[] executeBatch() throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - return ps.executeBatch(); - } - - public void setFetchDirection(int direction) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.setFetchDirection(direction); - } - - public void setFetchSize(int rows) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.setFetchSize(rows); - } - - public void setMaxFieldSize(int max) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.setMaxFieldSize(max); - } - - public void setMaxRows(int max) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.setMaxRows(max); - } - - public void setQueryTimeout(int seconds) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - changed = true; - ps.setQueryTimeout(seconds); - } - - public boolean getMoreResults(int current) throws SQLException { - return ps.getMoreResults(current); - } - - public void setEscapeProcessing(boolean enable) throws SQLException { - logger.log(BasicLevel.DEBUG, ""); - ps.setEscapeProcessing(enable); - } - - public int executeUpdate(String sql) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - return ps.executeUpdate(sql); - } - - public void addBatch(String sql) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - ps.addBatch(sql); - } - - public void setCursorName(String name) throws SQLException { - logger.log(BasicLevel.DEBUG, name); - ps.setCursorName(name); - } - - public boolean execute(String sql) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - return ps.execute(sql); - } - - public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - return ps.executeUpdate(sql, autoGeneratedKeys); - } - - public boolean execute(String sql, int autoGeneratedKeys) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - return ps.execute(sql, autoGeneratedKeys); - } - - public int executeUpdate(String sql, int[] columnIndexes) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - return ps.executeUpdate(sql, columnIndexes); - } - - public boolean execute(String sql, int[] columnIndexes) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - changed = true; - return ps.execute(sql, columnIndexes); - } - - public Connection getConnection() throws SQLException { - return ps.getConnection(); - } - - public ResultSet getGeneratedKeys() throws SQLException { - return ps.getGeneratedKeys(); - } - - public ResultSet getResultSet() throws SQLException { - return ps.getResultSet(); - } - - public SQLWarning getWarnings() throws SQLException { - return ps.getWarnings(); - } - - public int executeUpdate(String sql, String[] columnNames) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - return ps.executeUpdate(sql, columnNames); - } - - public boolean execute(String sql, String[] columnNames) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - return ps.execute(sql, columnNames); - } - - public ResultSet executeQuery(String sql) throws SQLException { - logger.log(BasicLevel.DEBUG, sql); - return ps.executeQuery(sql); - } - - /** - * Sets the designated parameter to the given java.sql.RowId object. The driver converts this to a SQL - * ROWID value when it sends it to the database - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setRowId(int parameterIndex, RowId x) throws SQLException { - ps.setRowId(parameterIndex, x); - } - - /** - * Sets the designated paramter to the given String object. The driver converts this to a SQL NCHAR - * or NVARCHAR or LONGNVARCHAR value (depending on the argument's size relative to the driver's - * limits on NVARCHAR values) when it sends it to the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNString(int parameterIndex, String value) throws SQLException { - ps.setNString(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. The Reader reads the data till end-of-file is - * reached. The driver does the necessary conversion from Java character format to the national character set in the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException { - ps.setNCharacterStream(parameterIndex, value, length); - } - - /** - * Sets the designated parameter to a java.sql.NClob object. The driver converts this to a SQL NCLOB - * value when it sends it to the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(int parameterIndex, NClob value) throws SQLException { - ps.setNClob(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. The reader must contain the number of characters specified - * by length otherwise a SQLException will be generated when the PreparedStatement is executed. This - * method differs from the setCharacterStream (int, Reader, int) method because it informs the driver that the - * parameter value should be sent to the server as a CLOB. When the setCharacterStream method is - * used, the driver may have to do extra work to determine whether the parameter data should be sent to the server as a - * LONGVARCHAR or a CLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or if the length specified is less than - * zero. - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setClob(int parameterIndex, Reader reader, long length) throws SQLException { - ps.setClob(parameterIndex, reader, length); - } - - /** - * Sets the designated parameter to a InputStream object. The inputstream must contain the number of characters - * specified by length otherwise a SQLException will be generated when the PreparedStatement is - * executed. This method differs from the setBinaryStream (int, InputStream, int) method because it informs the - * driver that the parameter value should be sent to the server as a BLOB. When the setBinaryStream - * method is used, the driver may have to do extra work to determine whether the parameter data should be sent to the server - * as a LONGVARBINARY or a BLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param inputStream An object that contains the data to set the parameter value to. - * @param length the number of bytes in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement; if the length specified is less than zero - * or if the number of bytes in the inputstream does not match the specfied length. - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException { - ps.setBlob(parameterIndex, inputStream, length); - } - - /** - * Sets the designated parameter to a Reader object. The reader must contain the number of characters specified - * by length otherwise a SQLException will be generated when the PreparedStatement is executed. This - * method differs from the setCharacterStream (int, Reader, int) method because it informs the driver that the - * parameter value should be sent to the server as a NCLOB. When the setCharacterStream method is - * used, the driver may have to do extra work to determine whether the parameter data should be sent to the server as a - * LONGNVARCHAR or a NCLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the length - * specified is less than zero; if the driver does not support national character sets; if the driver can detect that a data - * conversion error could occur; if a database access error occurs or this method is called on a closed - * PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException { - ps.setNClob(parameterIndex, reader, length); - } - - /** - * Sets the designated parameter to the given java.sql.SQLXML object. The driver converts this to an SQL - * XML value when it sends it to the database. - *

    - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param xmlObject a SQLXML object that maps an SQL XML value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or the - * java.xml.transform.Result, Writer or OutputStream has not been closed for the - * SQLXML object - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException { - ps.setSQLXML(parameterIndex, xmlObject); - } - - - - /** - * Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large - * ASCII value is input to a LONGVARCHAR parameter, it may be more practical to send it via a - * java.io.InputStream. Data will be read from the stream as needed until end-of-file is reached. The JDBC driver - * will do any necessary conversion from ASCII to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the Java input stream that contains the ASCII parameter value - * @param length the number of bytes in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setAsciiStream(int parameterIndex, java.io.InputStream x, long length) throws SQLException { - ps.setAsciiStream(parameterIndex, x, length); - } - - - /** - * Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large - * binary value is input to a LONGVARBINARY parameter, it may be more practical to send it via a - * java.io.InputStream object. The data will be read from the stream as needed until end-of-file is reached. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java input stream which contains the binary parameter value - * @param length the number of bytes in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setBinaryStream(int parameterIndex, java.io.InputStream x, long length) throws SQLException { - ps.setBinaryStream(parameterIndex, x, length); - } - - /** - * Sets the designated parameter to the given Reader object, which is the given number of characters long. When a - * very large UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to send it via a - * java.io.Reader object. The data will be read from the stream as needed until end-of-file is reached. The JDBC - * driver will do any necessary conversion from UNICODE to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param reader the java.io.Reader object that contains the Unicode data - * @param length the number of characters in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setCharacterStream(int parameterIndex, java.io.Reader reader, long length) throws SQLException { - ps.setCharacterStream(parameterIndex, reader, length); - } - - // ----- - /** - * Sets the designated parameter to the given input stream. When a very large ASCII value is input to a - * LONGVARCHAR parameter, it may be more practical to send it via a java.io.InputStream. Data will - * be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from ASCII - * to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setAsciiStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the Java input stream that contains the ASCII parameter value - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setAsciiStream(int parameterIndex, java.io.InputStream x) throws SQLException { - ps.setAsciiStream(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given input stream. When a very large binary value is input to a - * LONGVARBINARY parameter, it may be more practical to send it via a java.io.InputStream object. - * The data will be read from the stream as needed until end-of-file is reached. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setBinaryStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java input stream which contains the binary parameter value - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBinaryStream(int parameterIndex, java.io.InputStream x) throws SQLException { - ps.setBinaryStream(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Reader object. When a very large UNICODE value is input to a - * LONGVARCHAR parameter, it may be more practical to send it via a java.io.Reader object. The data - * will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from - * UNICODE to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setCharacterStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param reader the java.io.Reader object that contains the Unicode data - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setCharacterStream(int parameterIndex, java.io.Reader reader) throws SQLException { - ps.setCharacterStream(parameterIndex, reader); - } - - /** - * Sets the designated parameter to a Reader object. The Reader reads the data till end-of-file is - * reached. The driver does the necessary conversion from Java character format to the national character set in the database. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setNCharacterStream which takes a length parameter. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException { - ps.setNCharacterStream(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. This method differs from the - * setCharacterStream (int, Reader) method because it informs the driver that the parameter value should be sent - * to the server as a CLOB. When the setCharacterStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGVARCHAR or a - * CLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setClob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatementor if parameterIndex does not correspond to a - * parameter marker in the SQL statement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setClob(int parameterIndex, Reader reader) throws SQLException { - ps.setClob(parameterIndex, reader); - } - - /** - * Sets the designated parameter to a InputStream object. This method differs from the - * setBinaryStream (int, InputStream) method because it informs the driver that the parameter value should be - * sent to the server as a BLOB. When the setBinaryStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGVARBINARY or a - * BLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setBlob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param inputStream An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or if parameterIndex does not correspond to - * a parameter marker in the SQL statement, - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException { - ps.setBlob(parameterIndex, inputStream); - } - - /** - * Sets the designated parameter to a Reader object. This method differs from the - * setCharacterStream (int, Reader) method because it informs the driver that the parameter value should be sent - * to the server as a NCLOB. When the setCharacterStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGNVARCHAR or a - * NCLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setNClob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(int parameterIndex, Reader reader) throws SQLException { - ps.setNClob(parameterIndex, reader); - } - - - /** - * Requests that a Statement be pooled or not pooled. The value specified is a hint to the statement pool - * implementation indicating whether the applicaiton wants the statement to be pooled. It is up to the statement pool manager - * as to whether the hint is used. - *

    - * The poolable value of a statement is applicable to both internal statement caches implemented by the driver and external - * statement caches implemented by application servers and other applications. - *

    - * By default, a Statement is not poolable when created, and a PreparedStatement and - * CallableStatement are poolable when created. - *

    - * @param poolable requests that the statement be pooled if true and that the statement not be pooled if false - *

    - * @throws SQLException if this method is called on a closed Statement - *

    - * @since 1.6 - */ - public void setPoolable(boolean poolable) throws SQLException { - ps.setPoolable(poolable); - - } - - /** - * Returns a value indicating whether the Statement is poolable or not. - *

    - * @return true if the Statement is poolable; false otherwise - *

    - * @throws SQLException if this method is called on a closed Statement - *

    - * @since 1.6 - *

    - * @see java.sql.Statement#setPoolable(boolean) setPoolable(boolean) - */ - public boolean isPoolable() throws SQLException { - return ps.isPoolable(); - } - - /** - * Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. - * Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result - * of recursively calling isWrapperFor on the wrapped object. If this does not implement the interface and is not a wrapper, - * return false. This method should be implemented as a low-cost operation compared to unwrap so that callers can use this method - * to avoid expensive unwrap calls that may fail. If this method returns true then calling unwrap with the same argument should succeed. - * @param iface a Class defining an interface. - * @returns true if this implements the interface or directly or indirectly wraps an object that does. - * @throws SQLException if an error occurs while determining whether this is a wrapper for an object with the given interface. - */ - public boolean isWrapperFor(Class iface) throws SQLException { - return ps.isWrapperFor(iface); - } - - /** - * Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. - * If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper - * and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. - * Otherwise return the the result of calling unwrap recursively on the wrapped object or a proxy for that result. - * If the receiver is not a wrapper and does not implement the interface, then an SQLException is thrown. - * @param iface A Class defining an interface that the result must implement. - * @returns an object that implements the interface. May be a proxy for the actual implementing object. - * @throws SQLException If no object found that implements the interface - */ - public T unwrap(Class iface) throws SQLException { - return ps.unwrap(iface); - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/Pool.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/Pool.java deleted file mode 100644 index 67fa8bfdff..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/Pool.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.dbm.internal.cm; - -import java.sql.SQLException; - -public interface Pool { - - public int getPoolMin(); - public void setPoolMin(int min); - public int getPoolMax(); - public void setPoolMax(int max); - public int getMaxAge(); - public long getMaxAgeMilli(); - public void setMaxAge(int mn); - public int getMaxOpenTime(); - public long getMaxOpenTimeMilli(); - public void setMaxOpenTime(int mn); - public int getMaxWaitTime(); - public void setMaxWaitTime(int sec); - public int getMaxWaiters(); - public void setMaxWaiters(int nb); - public int getSamplingPeriod(); - public void setSamplingPeriod(int sec); - public int getAdjustPeriod(); - public void setAdjustPeriod(int sec); - public int getCheckLevel(); - public void setCheckLevel(int level); - public String getTestStatement(); - public void setTestStatement(String s); - public String checkConnection(String s) throws SQLException; - public int getBusyMaxRecent(); - public int getBusyMinRecent(); - public int getCurrentWaiters(); - public int getOpenedCount(); - public int getConnectionFailures(); - public int getConnectionLeaks(); - public int getServedOpen() ; - public int getRejectedFull(); - public int getRejectedTimeout(); - public int getRejectedOther(); - public int getRejectedOpen(); - public int getWaitersHigh(); - public int getWaitersHighRecent(); - public int getWaiterCount() ; - public long getWaitingTime(); - public long getWaitingHigh(); - public long getWaitingHighRecent(); - public int getCurrentOpened(); - public int getCurrentBusy(); - public int getCurrentInTx(); -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/naming/DataSourceFactory.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/naming/DataSourceFactory.java deleted file mode 100644 index 2139f89c05..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/cm/naming/DataSourceFactory.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.dbm.internal.cm.naming; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; -import javax.sql.DataSource; - -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.ow2.jonas.dbm.internal.cm.ConnectionManager; -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Philippe Durieux - * Contributor(s): - *

    - * 03/05/23 Adriana Danes - Introduce connection pool size configuration - */ -public class DataSourceFactory implements ObjectFactory { - - /** - * Factory logger. - */ - private static Logger logger = null; - - /** - * Returns a {@link DataSource} from the given {@link Reference}. - * @see javax.naming.spi.ObjectFactory#getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable) - */ - public Object getObjectInstance(Object refObj, Name name, Context nameCtx, Hashtable env) throws Exception { - - Reference ref = (Reference) refObj; - String clname = ref.getClassName(); - if (logger == null) { - logger = Log.getLogger(Log.JONAS_DBM_PREFIX); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - // Old fashioned Connection Manager - if (clname.equals(ConnectionManager.class.getName())) { - String dsname = (String) ref.get(DBMConstants.NAME).getContent(); - ConnectionManager ds = ConnectionManager.getConnectionManager(dsname); - if (ds == null) { - // The DataSource was not in this JOnAS Server: Create it. - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Creating a new Connection Manager for " + dsname); - } - try { - String jBase = System.getProperty("jonas.base"); - if (jBase == null) { - //TODO : must be removed. A client can lookup a datasource without modifications - // pure client case - ds = new ConnectionManager(true); - ds.setDSName(dsname); - ds.setUrl((String) ref.get(DBMConstants.URL).getContent()); - ds.setClassName((String) ref.get(DBMConstants.CLASSNAME).getContent()); - ds.setUserName((String) ref.get(DBMConstants.USERNAME).getContent()); - ds.setPassword((String) ref.get(DBMConstants.PASSWORD).getContent()); - return ds; - } - //build a new datasource for another server - // TODO must pass the TransactionService - ds = new ConnectionManager(null); - ds.setDSName(dsname); - ds.setUrl((String) ref.get(DBMConstants.URL).getContent()); - ds.setClassName((String) ref.get(DBMConstants.CLASSNAME).getContent()); - ds.setUserName((String) ref.get(DBMConstants.USERNAME).getContent()); - ds.setPassword((String) ref.get(DBMConstants.PASSWORD).getContent()); - ds.setTransactionIsolation((String) ref.get(DBMConstants.ISOLATIONLEVEL).getContent()); - ds.setMapperName((String) ref.get(DBMConstants.MAPPERNAME).getContent()); - ds.poolConfigure((String) ref.get("connchecklevel").getContent(), - (String) ref.get("connmaxage").getContent(), - (String) ref.get("maxopentime").getContent(), - (String) ref.get("connteststmt").getContent(), - (String) ref.get("pstmtmax").getContent(), - (String) ref.get("minconpool").getContent(), - (String) ref.get("maxconpool").getContent(), - (String) ref.get("maxwaittime").getContent(), - (String) ref.get("maxwaiters").getContent(), - (String) ref.get("samplingperiod").getContent(), - (String) ref.get("adjustperiod").getContent()); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "DataSourceFactory error", e); - } - } else { - // The DataSource is already in this JOnAS Server: Just return it. - } - return ds; - } - - logger.log(BasicLevel.ERROR, "no object found for " + clname); - return null; - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSource.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSource.java deleted file mode 100644 index 237d1e92c9..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSource.java +++ /dev/null @@ -1,527 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.mbean; - -// JOnAS imports -import java.sql.SQLException; -import java.util.Map; - -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.ow2.jonas.dbm.internal.cm.ConnectionManager; -import org.ow2.jonas.dbm.internal.cm.Pool; -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; - - -/** - * MBean class for JDBCDataSource Management. - * This MBean manages a connection manager and its associated pool. This couple - * represents the JOnAS data source implementation - * - * @author Eric Hardesty JSR 77 (J2EE Management Standard) - * @author Adriana Danes add support for persistent reconfiguration - */ -public class JDBCDataSource extends J2EEManagedObject { - - /** - * OBJECT_NAME of the associated JDBCDriver MBean - */ - private String jdbcDriver = null; - - /** - * Associated connection manager - */ - private ConnectionManager cm = null; - - /** - * Pool associated to the connection manager - */ - private Pool pool = null; - - /** - * The current data source name - */ - private String datasourceName = null; - - /** - * Value used as sequence number by reconfiguration notifications - */ - private long sequenceNumber = 0; - - /** - * @param objectName This MBean's OBJECT_NAME - * @param cm Associated ConnectionManager reference - */ - public JDBCDataSource(final String objectName, final ConnectionManager cm) { - super(objectName); - this.cm = cm; - this.pool = cm.getPool(); - this.datasourceName = cm.getDatasourceName(); - } - - // JDBC DataSource Configuration - - /** - * @return The OBJECT_NAME of the associated JDBCDriver MBean - */ - public String getJdbcDriver() { - return jdbcDriver; - } - - /** - * @param jdbcDriverObjectName OBJECT_NAME of the associated JDBCDriver MBean - */ - public void setJdbcDriver(final String jdbcDriverObjectName) { - jdbcDriver = jdbcDriverObjectName; - } - - /** - * Return the current data source name. Returns the local attribute value (optimize - * call) - this value can't be changed, moreover, its used by private methods. - * @return The current data source name - */ - public String getName() { - return datasourceName; - } - - /** - * @return The JNDI name - */ - public String getJndiName() { - return cm.getDSName(); - } - - /** - * @return Description of this data source - */ - public String getDescription() { - return cm.getDataSourceDescription(); - } - - /** - * @return The JDBC URL for the database - */ - public String getUrl() { - return cm.getUrl(); - } - - /** - * @return The user name for connection to the database - */ - public String getUserName() { - return cm.getUserName(); - } - - /** - * @return The password for connection to the database - */ - public String getUserPassword() { - return cm.getPassword(); - } - - /** - * @return The mapper JORM for the database - */ - public String getMapperName() { - return cm.getMapperName(); - } - - // JDBC Connection Pool Configuration - - /** - * @return JDBC connection checking level - */ - public Integer getJdbcConnCheckLevel() { - return new Integer(pool.getCheckLevel()); - } - /** - * Sets the JDBC connection checking level - * @param level connection level - */ - public void setJdbcConnCheckLevel(final Integer level) { - pool.setCheckLevel(level.intValue()); - String propName = DBMConstants.CONNCHECKLEVEL; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, level.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return JDBC connections maximum age - */ - public Integer getJdbcConnMaxAge() { - return new Integer(pool.getMaxAge()); - } - /** - * @param mn JDBC connections maximum age - */ - public void setJdbcConnMaxAge(final Integer mn) { - pool.setMaxAge(mn.intValue()); - String propName = DBMConstants.CONNMAXAGE; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, mn.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return max maximum size of JDBC connection pool - */ - public Integer getJdbcMaxConnPool() { - return new Integer(pool.getPoolMax()); - } - /** - * @param max maximum size of JDBC connection pool - */ - public void setJdbcMaxConnPool(final Integer max) { - pool.setPoolMax(max.intValue()); - // Update the configuration file - String propName = DBMConstants.MAXCONPOOL; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, max.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return maximum opening time of JDBC connections - */ - public Integer getJdbcMaxOpenTime() { - return new Integer(pool.getMaxOpenTime()); - } - /** - * @param mn maximum opening time in minutes for JDBC connections - */ - public void setJdbcMaxOpenTime(final Integer mn) { - pool.setMaxOpenTime(mn.intValue()); - String propName = DBMConstants.MAXOPENTIME; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, mn.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return maximum nb of waiters allowed - */ - public Integer getJdbcMaxWaiters() { - return new Integer(pool.getMaxWaiters()); - } - /** - * @param max maximum nb of waiters allowed - */ - public void setJdbcMaxWaiters(final Integer max) { - pool.setMaxWaiters(max.intValue()); - // Update the configuration file - String propName = DBMConstants.MAXWAITERS; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, max.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return maximum time to wait for a connection, in seconds - */ - public Integer getJdbcMaxWaitTime() { - return new Integer(pool.getMaxWaitTime()); - } - - /** - * @param max maximum time to wait for a connection, in seconds - */ - public void setJdbcMaxWaitTime(final Integer max) { - pool.setMaxWaitTime(max.intValue()); - // Update the configuration file - String propName = DBMConstants.MAXWAITTIME; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, max.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return PreparedStatement cache size - */ - public Integer getJdbcPstmtMax() { - return new Integer(cm.getPstmtMax()); - } - - /** - * @param max PreparedStatement cache size - */ - public void setJdbcPstmtMax(final Integer max) { - cm.setPstmtMax(max.intValue()); - // Update the configuration file - String propName = DBMConstants.PSTMTMAX; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, max.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return minimum size of connection pool - */ - public Integer getJdbcMinConnPool() { - return new Integer(pool.getPoolMin()); - } - /** - * MBean method allowing to set the minimum size of connection pool - * @param min minimum size of connection pool - */ - public void setJdbcMinConnPool(final Integer min) { - pool.setPoolMin(min.intValue()); - // Update the configuration file - String propName = DBMConstants.MINCONPOOL; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, min.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return sampling period for refresching pool statistics - */ - public Integer getJdbcSamplingPeriod() { - return new Integer(pool.getSamplingPeriod()); - } - - /** - * @param i sampling period for refresching pool statistics - */ - public void setJdbcSamplingPeriod(final Integer i) { - pool.setSamplingPeriod(i.intValue()); - // Update the configuration file - String propName = DBMConstants.ADJUSTPERIOD; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, i.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return adjust period for pool limit recomputing (in sec.) - */ - public Integer getJdbcAdjustPeriod() { - return new Integer(pool.getAdjustPeriod()); - } - - /** - * @param i adjust period for pool limit recomputing (in sec.) - */ - public void setJdbcAdjustPeriod(final Integer i) { - pool.setAdjustPeriod(i.intValue()); - // Update the configuration file - String propName = DBMConstants.ADJUSTPERIOD; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, i.toString()); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - } - - /** - * @return SQL query for JDBC connections test - */ - public String getJdbcTestStatement() { - return pool.getTestStatement(); - } - /** - * @param test SQL query for JDBC connection test - * @return the test statement if the test succeeded, an error message otherwise - */ - public String setJdbcTestStatement(final String test) { - String result; - try { - result = pool.checkConnection(test); - if (result.equals(test)) { - // Test succeeded - pool.setTestStatement(test); - result = test; - } - } catch (SQLException e) { - result = e.toString(); - } - String propName = DBMConstants.CONNTESTSTMT; - PropertiesConfigurationData prop = new PropertiesConfigurationData(propName, test); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), datasourceName, prop); - return result; - } - - // JDBC Connection Pool Statistics - - /** - * @return number of connection failures - */ - public Integer getConnectionFailures() { - return new Integer(pool.getConnectionFailures()); - } - /** - * @return number of connection leaks - */ - public Integer getConnectionLeaks() { - return new Integer(pool.getConnectionLeaks()); - } - /** - * @return number of busy connections - */ - public Integer getCurrentBusy() { - return new Integer(pool.getCurrentBusy()); - } - /** - * @return number of busy connections - */ - public Integer getBusyMax() { - return new Integer(pool.getBusyMaxRecent()); - } - /** - * @return number of busy connections - */ - public Integer getBusyMin() { - return new Integer(pool.getBusyMinRecent()); - } - /** - * @return number of connections used in transactions - */ - public Integer getCurrentInTx() { - return new Integer(pool.getCurrentInTx()); - } - /** - * @return number of opened connections - */ - public Integer getCurrentOpened() { - return new Integer(pool.getCurrentOpened()); - } - /** - * @return current number of connection waiters - */ - public Integer getCurrentWaiters() { - return new Integer(pool.getCurrentWaiters()); - } - /** - * @return number of opened physical JDBC connections - */ - public Integer getOpenedCount() { - return new Integer(pool.getOpenedCount()); - } - /** - * @return number of open calls that were rejected because too many waiters - */ - public Integer getRejectedFull() { - return new Integer(pool.getRejectedFull()); - } - /** - * @return total number of open calls that were rejected - */ - public Integer getRejectedOpen() { - return new Integer(pool.getRejectedOpen()); - } - /** - * @return number of open calls that were rejected by an unknown reason - */ - public Integer getRejectedOther() { - return new Integer(pool.getRejectedOther()); - } - /** - * @return number of open calls that were rejected by timeout - */ - public Integer getRejectedTimeout() { - return new Integer(pool.getRejectedTimeout()); - } - /** - * @return number of xa connection served - */ - public Integer getServedOpen() { - return new Integer(pool.getServedOpen()); - } - /** - * @return total number of waiters since datasource creation. - */ - public Integer getWaiterCount() { - return new Integer(pool.getWaiterCount()); - } - /** - * @return Maximum number of waiters since datasource creation. - */ - public Integer getWaitersHigh() { - return new Integer(pool.getWaitersHigh()); - } - /** - * @return Maximum nb of waiters in last sampling period - */ - public Integer getWaitersHighRecent() { - return new Integer(pool.getWaitersHighRecent()); - } - /** - * @return Maximum waiting time (millisec) since datasource creation. - */ - public Long getWaitingHigh() { - return new Long(pool.getWaitingHigh()); - } - /** - * @return Maximum waiting time (millisec) in last sampling period - */ - public Long getWaitingHighRecent() { - return new Long(pool.getWaitingHighRecent()); - } - /** - * @return Total waiting time (millisec) since datasource creation. - */ - public Long getWaitingTime() { - return new Long(pool.getWaitingTime()); - } - - public int[] getOpenedConnections(final int seconds) { - return cm.getOpenedConnections(seconds); - } - - public int[] getOpenedConnections() { - return cm.getOpenedConnections(); - } - - public Map getConnectionDetails(final int connectionId) { - return cm.getConnectionDetails(connectionId); - } - - public void forceCloseConnection(final int connectionId) { - cm.forceCloseConnection(connectionId); - } - - public void setObservable(final boolean observable) { - cm.setObservable(observable); - } - - public boolean isObservable() { - return cm.isObservable(); - } - - /** - * Gets the sequence number for reconfiguration opeartions - * @return the sequence number for reconfiguration operations - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } - - /** - * save updated configuration - */ - public void saveConfig() { - sendSaveNotification(getSequenceNumber(), datasourceName); - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSourceMBean.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSourceMBean.java deleted file mode 100644 index a0c7572dfc..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDataSourceMBean.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.mbean; - -import javax.management.MBeanException; -import javax.management.NotificationEmitter; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * Allow creation of a model MBean instance to registered in the MBean server. - * This class is necessary to support persistent reconfiguration - * based on JMX notifications. - * @author Adriana Danes - */ -public class JDBCDataSourceMBean extends BaseModelMBean { - - /** - * Default constructor - * @throws MBeanException if super constructor fails - */ - public JDBCDataSourceMBean() throws MBeanException { - super(); - } - - /** - * Delegates the notification support to the wrapped resource. - * @param pListner Listener to notify - * @param pFilter Notification filter - * @param pHandback ?? - * @throws java.lang.IllegalArgumentException if notification is not done - */ - public void addNotificationListener(NotificationListener pListner, NotificationFilter pFilter, - java.lang.Object pHandback) throws java.lang.IllegalArgumentException { - ((NotificationEmitter) (this.resource)).addNotificationListener(pListner, pFilter, pHandback); - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDriver.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDriver.java deleted file mode 100644 index a60c4d49bf..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCDriver.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.mbean; - -// JOnAS imports -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; - -/** - * MBean class for JDBCDriver Management - * - * @author Eric Hardesty JSR 77 (J2EE Management Standard) - * - */ -public class JDBCDriver extends J2EEManagedObject { - - /** - * Driver class name - */ - private String driverClassName = null; - - public JDBCDriver(String objectName) { - super(objectName); - } - /** - * @return Returns the className. - */ - public String getDriverClassName() { - return driverClassName; - } - /** - * @param className The className to set. - */ - public void setDriverClassName(String className) { - this.driverClassName = className; - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCResource.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCResource.java deleted file mode 100644 index 3ab353e7a0..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/mbean/JDBCResource.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.mbean; - -// Java imports -import java.util.ArrayList; - -import org.ow2.jonas.lib.management.javaee.J2EEResource; - - -/** - * MBean class for JDBCResource Management - * - * @author Eric Hardesty JSR 77 (J2EE Management Standard) - * @author Adriana Danes improve JDBCDataSource management - */ -public class JDBCResource extends J2EEResource { - /** - * List of available JDBC data sources given by the list of - * OBJECT_NAMEs of the JDBCDataSource MBeans. - */ - private ArrayList jdbcDataSources = new ArrayList(); - - /** - * Create q JDBCResource MBean. - * @param objectName This MBean's OBJECT_NAME - */ - public JDBCResource(String objectName) { - super(objectName); - } - - /** - * @return The OBJECT_NAMEs of the JDBCDataSource MBeans. - */ - public String[] getJdbcDataSources() { - return ((String[]) jdbcDataSources.toArray(new String[jdbcDataSources.size()])); - } - - /** - * @param jdbcDataSourceName Add an OBJECT_NAME to the list of OBJECT_NAMEs - * associated to the JDBCResource MBean (means new JDBCDataSource created). - */ - public void addJdbcDataSource(String jdbcDataSourceName) { - jdbcDataSources.add(jdbcDataSourceName); - } - - /** - * @param jdbcDataSourceName Remove an OBJECT_NAME from the list of OBJECT_NAMEs - * associated to the JDBCResource MBean (means JDBCDataSource removed). - */ - public void removeJdbcDataSource(String jdbcDataSourceName) { - jdbcDataSources.remove(jdbcDataSourceName); - } -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JDBCDriverBundleTrackerCustomizer.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JDBCDriverBundleTrackerCustomizer.java deleted file mode 100644 index ecf42c1221..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JDBCDriverBundleTrackerCustomizer.java +++ /dev/null @@ -1,313 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.osgi; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.sql.Driver; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.List; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.framework.Filter; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.jdbc.DataSourceFactory; -import org.osgi.util.tracker.BundleTrackerCustomizer; -import org.osgi.util.tracker.ServiceTracker; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This bundle tracker will track new started bundles on the gateway and check - * if the META-INF/services/java.sql.Driver entry is available.
    - * It it is available, it will create JDBC DataSourceFactory for this driver if - * there is no previous factory registered for this driver.
    - * This is part of the JDBC Service specification of OSGi platform r4.2 - * @author Florent Benoit - */ -public class JDBCDriverBundleTrackerCustomizer implements BundleTrackerCustomizer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JDBCDriverBundleTrackerCustomizer.class); - - /** - * Driver Entry. - */ - private static final String SQL_DRIVER_ENTRY = "/META-INF/services/java.sql.Driver"; - - - private BundleContext bundleContext = null; - private TransactionService txService = null; - - public JDBCDriverBundleTrackerCustomizer(final BundleContext bundleContext, final TransactionService txService) { - this.bundleContext = bundleContext; - this.txService = txService; - } - - /** - * A bundle is being added to the BundleTracker. This method is called - * before a bundle which matched the search parameters of the BundleTracker - * is added to the BundleTracker. This method should return the object to be - * tracked for the specified Bundle. The returned object is stored in the - * BundleTracker and is available from the getObject method. - * @param bundle The Bundle being added to the BundleTracker. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the - * call to this method. - * @return The object to be tracked for the specified Bundle object or null - * if the specified Bundle object should not be tracked. - */ - @Override - public Object addingBundle(final Bundle bundle, final BundleEvent event) { - return register(bundle, null); - } - - /** - * A bundle tracked by the BundleTracker has been modified. This method is - * called when a bundle being tracked by the BundleTracker has had its state - * modified. - * @param bundle The Bundle whose state has been modified. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the - * call to this method. - * @param object The tracked object for the specified bundle. - */ - @Override - @SuppressWarnings("unchecked") - public void modifiedBundle(final Bundle bundle, final BundleEvent event, final Object object) { - logger.debug("modifiedBundle Bundle ''{0}'' with event ''{1}''", bundle, event); - if (bundle.getState() == Bundle.STOPPING || bundle.getState() == Bundle.ACTIVE) { - unregister(bundle, (List) object); - } - if (bundle.getState() == Bundle.ACTIVE) { - register(bundle, (List) object); - } - - } - - /** - * A bundle tracked by the BundleTracker has been removed. This method is - * called after a bundle is no longer being tracked by the BundleTracker. - * @param bundle The Bundle that has been removed. - * @param event The bundle event which caused this customizer method to be - * called or null if there is no bundle event associated with the - * call to this method. - * @param object The tracked object for the specified bundle. - */ - @SuppressWarnings("unchecked") - @Override - public void removedBundle(final Bundle bundle, final BundleEvent event, final Object object) { - unregister(bundle, (List) object); - } - - /** - * Register the new services for the given bundle if the bundle is providing drivers. - * @param bundle the bundle to analyze - * @param existingServiceRegistrations the list of the existing or previous registrations - * @return the updated list of service registrations - */ - public List register(final Bundle bundle, final List existingServiceRegistrations) { - // Search entry - URL urlSqlDriver = bundle.getEntry(SQL_DRIVER_ENTRY); - if (urlSqlDriver == null) { - // Not found, return null; - return null; - } - - // Entry has been found - // Now, read the value of the SQL drivers by analyzing the URL - URLConnection urlConnection; - try { - urlConnection = urlSqlDriver.openConnection(); - } catch (IOException e) { - logger.error("Unable to analyze the entry ''{0}'' in bundle ''{1}'' ''{2}''", SQL_DRIVER_ENTRY, bundle - .getBundleId(), bundle.getSymbolicName(), e); - return null; - } - // disable cache - urlConnection.setDefaultUseCaches(false); - InputStream inputStream; - try { - inputStream = urlConnection.getInputStream(); - } catch (IOException e) { - logger.error("Unable to analyze the entry ''{0}'' in bundle ''{1}'' ''{2}''", SQL_DRIVER_ENTRY, bundle - .getBundleId(), bundle.getSymbolicName(), e); - return null; - } - - BufferedReader reader = null; - List driverClassNames = new ArrayList(); - // For each line of the file, add the driver class name to the list - try { - reader = new BufferedReader(new InputStreamReader(inputStream)); - String driverClassName = null; - while ((driverClassName = reader.readLine()) != null) { - driverClassNames.add(driverClassName); - logger.debug("Found driver classname ''{0}'' in bundle ID ''{1}'' with symbolic name ''{2}''.", driverClassName, - bundle.getBundleId(), bundle.getSymbolicName()); - } - } catch (IOException e) { - logger.error("Unable to analyze the entry ''{0}'' in bundle ''{1}'' ''{2}''", SQL_DRIVER_ENTRY, bundle - .getBundleId(), bundle.getSymbolicName(), e); - return null; - } finally { - // close opened resources - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - logger.debug("Unable to close resource", e); - } - reader = null; - } - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - logger.debug("Unable to close stream", e); - } - inputStream = null; - } - } - - // if we don't have drivers, abort - if (driverClassNames.size() == 0) { - return null; - } - - // DataSource Factories to create because there are not yet registered - List driverFactoriesToCreate = new ArrayList(); - - // Now check for each driver if there is an existing DataSourceFactory - for (String driverClassName : driverClassNames) { - Filter filter = null; - try { - filter = bundleContext.createFilter("(&(objectClass=" + DataSourceFactory.class.getName() + ")(" - + DataSourceFactory.class.getCanonicalName() + "=" + driverClassName + "))"); - } catch (InvalidSyntaxException e) { - logger.error("Unable to create a filter for the driver classname ''{0}'', skipping registration", - driverClassName, e); - continue; - } - ServiceTracker tracker = new ServiceTracker(bundleContext, filter, null); - tracker.open(); - - // If there is at least one service registered we don't need to - // create a factory for this driver - DataSourceFactory datasourceFactory = (DataSourceFactory) tracker.getService(); - // If a service is already existing, cancel registration and go to - // the next one - if (datasourceFactory != null) { - continue; - } else { - // need to create a factory for this driver - driverFactoriesToCreate.add(driverClassName); - } - } - - // registrations that are made - List serviceRegistrations = null; - if (existingServiceRegistrations == null) { - serviceRegistrations = new ArrayList(); - } else { - serviceRegistrations = existingServiceRegistrations; - } - - // For each driver, create a factory and register it - for (String driverClassName : driverFactoriesToCreate) { - - // Load the class of the driver - Class driverClass = null; - try { - driverClass = bundle.loadClass(driverClassName); - } catch (ClassNotFoundException e) { - logger.error("No JDBC DS Factory as driver class ''{0}'' can't be loaded from ''{1}'' ''{2}''", - driverClassName, bundle.getBundleId(), bundle.getSymbolicName()); - return null; - } - - Driver driver; - try { - driver = (Driver) driverClass.newInstance(); - } catch (InstantiationException e) { - logger.error("Aborting JDBC DataSource Factory registration as driver class ''{0}'' can't be loaded.", - driverClass); - return null; - } catch (IllegalAccessException e) { - logger.error("Aborting JDBC DataSource Factory registration as driver class ''{0}'' can't be loaded.", - driverClass); - return null; - } - int majorVersion = driver.getMajorVersion(); - int minorVersion = driver.getMinorVersion(); - - DataSourceFactory dataSourceFactory = new JOnASDataSourceFactory(driverClass, txService); - - // Add properties for the registration - Dictionary dictionary = new Hashtable(); - dictionary.put(DataSourceFactory.OSGI_JDBC_DRIVER_CLASS, driverClassName); - dictionary.put(DataSourceFactory.OSGI_JDBC_DRIVER_NAME, driverClassName); - dictionary.put(DataSourceFactory.OSGI_JDBC_DRIVER_VERSION, majorVersion + "." + minorVersion); - - ServiceRegistration serviceRegistration = bundleContext.registerService(new String[] {DataSourceFactory.class - .getName()}, dataSourceFactory, dictionary); - serviceRegistrations.add(serviceRegistration); - logger.info("Registering OSGi DataSource Factory for the driver ''{0}'' v{1}.{2}", driverClass.getName(), - majorVersion, minorVersion); - } - - // return the list of the registrations that have been made - return serviceRegistrations; - } - - /** - * Unregister the given service registrations for the given bundle. - * @param bundle the bundle that is stopping - * @param serviceRegistrations the list of services to unregister - */ - public void unregister(final Bundle bundle, final List serviceRegistrations) { - // remove all the registrations - if (serviceRegistrations != null) { - for (ServiceRegistration serviceRegistration : serviceRegistrations) { - serviceRegistration.unregister(); - } - } - - } - -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JOnASDataSourceFactory.java b/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JOnASDataSourceFactory.java deleted file mode 100644 index a59407c348..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/java/org/ow2/jonas/dbm/internal/osgi/JOnASDataSourceFactory.java +++ /dev/null @@ -1,249 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.dbm.internal.osgi; - -import java.sql.Driver; -import java.sql.SQLException; -import java.util.Properties; - -import javax.sql.ConnectionPoolDataSource; -import javax.sql.DataSource; -import javax.sql.XADataSource; - -import org.osgi.service.jdbc.DataSourceFactory; -import org.ow2.jonas.dbm.internal.DBMConstants; -import org.ow2.jonas.dbm.internal.cm.ConnectionManager; -import org.ow2.jonas.tm.TransactionService; - -/** - * Implementation of the OSGi DataSourceFactory interface. - * @author Florent Benoit - */ -public class JOnASDataSourceFactory implements DataSourceFactory { - - /** - * Instance of the driver class which allows to build new driver instance. - */ - private Class driverClass = null; - - - private TransactionService txService = null; - - private String name = null; - - public JOnASDataSourceFactory(final Class driverClass, final TransactionService txService) { - this.driverClass = driverClass; - this.txService = txService; - } - - /** - * Create a new {@link ConnectionPoolDataSource} using the given properties. - * @param props The properties used to configure the - * {@link ConnectionPoolDataSource}. {@literal null} indicates no - * properties. If the property cannot be set on the - * {@link ConnectionPoolDataSource} being created then a SQLException - * must be thrown. - * @return A configured {@link ConnectionPoolDataSource}. - * @throws SQLException If the {@link ConnectionPoolDataSource} cannot be - * created. - */ - @Override - public ConnectionPoolDataSource createConnectionPoolDataSource(final Properties props) throws SQLException { - return getConnectionManager(props); - } - - /** - * Create a new {@link DataSource} using the given properties. - * @param props The properties used to configure the {@link DataSource}. - * {@literal null} indicates no properties. If the property cannot be - * set on the {@link DataSource} being created then a SQLException - * must be thrown. - * @return A configured {@link DataSource}. - * @throws SQLException If the {@link DataSource} cannot be created. - */ - @Override - public DataSource createDataSource(final Properties props) throws SQLException { - return getConnectionManager(props); - } - - /** - * Create a new {@link XADataSource} using the given properties. - * @param props The properties used to configure the {@link XADataSource}. - * {@literal null} indicates no properties. If the property cannot be - * set on the {@link XADataSource} being created then a SQLException - * must be thrown. - * @return A configured {@link XADataSource}. - * @throws SQLException If the {@link XADataSource} cannot be created. - */ - @Override - public XADataSource createXADataSource(final Properties props) throws SQLException { - return getConnectionManager(props); - } - - protected String getProperty(final Properties props, final String key, final boolean mandatory) throws SQLException { - return getProperty(props, key, mandatory, null); - } - - protected String getProperty(final Properties props, final String key, final String defaultValue) throws SQLException { - return getProperty(props, key, false, defaultValue); - } - - protected String getProperty(final Properties props, final String key, final boolean mandatory, final String defaultValue) throws SQLException { - Object val = props.get(key); - - // Check for non null string - if (val != null && !(val instanceof String)) { - throw new SQLException("Property value for the '" + key + "' is not a String. Found '" + val + "'."); - } - String value = (String) val; - - if (value == null) { - // mandatory, raise exception - if (mandatory) { - throw new SQLException("Property value for the '" + key + "' is missing and it is mandatory."); - } - - // assign defaultValue - value = defaultValue; - } - - - return value; - - - } - - /** - * Build a datasource object for the given properties. - * @param props the given properties - * @return an instance of the datasource - * @throws SQLException if datasource can't be built - */ - protected ConnectionManager getConnectionManager(final Properties props) throws SQLException { - - // Name - String name = "OSGi/" + driverClass.getName(); - - ConnectionManager datasource; - try { - datasource = new ConnectionManager(txService); - } catch (Exception e) { - throw new SQLException("Unable to create datasource", e); - } - - // Mandatory properties specified in OSGi interface - String url = getProperty(props, DataSourceFactory.JDBC_URL, true); - String user = getProperty(props, DataSourceFactory.JDBC_USER, true); - String password = getProperty(props, DataSourceFactory.JDBC_PASSWORD, true); - - // Optional specified in OSGi interface - name = getProperty(props, DataSourceFactory.JDBC_PASSWORD, true); - String description = getProperty(props, DataSourceFactory.JDBC_DESCRIPTION, ""); - String dataSourceName = getProperty(props, DataSourceFactory.JDBC_DATASOURCE_NAME, name); - String databaseName = getProperty(props, DataSourceFactory.JDBC_DATABASE_NAME, name); - - String maxPoolSize = getProperty(props, DataSourceFactory.JDBC_MAX_POOL_SIZE, DBMConstants.DEF_MAXCONPOOL); - String initPoolSize = getProperty(props, DataSourceFactory.JDBC_INITIAL_POOL_SIZE, DBMConstants.DEF_MINCONPOOL); - String minPoolSize = getProperty(props, DataSourceFactory.JDBC_MIN_POOL_SIZE, initPoolSize); - String maxIdletime = getProperty(props, DataSourceFactory.JDBC_MAX_IDLE_TIME, DBMConstants.DEF_MAXWAITTIME); - String maxStatements = getProperty(props, DataSourceFactory.JDBC_MAX_STATEMENTS, DBMConstants.DEF_PSTMTMAX); - - // not read : - // DataSourceFactory.JDBC_NETWORK_PROTOCOL - // DataSourceFactory.JDBC_PROPERTY_CYCLE - // DataSourceFactory.JDBC_PORT_NUMBER - - - // Specific JOnAS features - String connCheckLevel = getProperty(props, DBMConstants.CONNCHECKLEVEL, DBMConstants.DEF_CONNCHECKLEVEL); - String connMaxAge = getProperty(props, DBMConstants.CONNMAXAGE, DBMConstants.DEF_CONNMAXAGE); - - String maxOpenTime = getProperty(props, DBMConstants.MAXOPENTIME, DBMConstants.DEF_MAXOPENTIME); - String maxwaiters = getProperty(props, DBMConstants.MAXWAITERS, DBMConstants.DEF_MAXWAITERS); - String samplingperiod = getProperty(props, DBMConstants.SAMPLINGPERIOD, DBMConstants.DEF_SAMPLINGPERIOD); - String adjustperiod = getProperty(props, DBMConstants.ADJUSTPERIOD, DBMConstants.DEF_ADJUSTPERIOD); - String defaultStatement = getProperty(props, DBMConstants.CONNTESTSTMT, DBMConstants.DEF_CONNTESTSTMT); - - - - // Initialize ConnectionManager - datasource.setDatasourceName(dataSourceName); - datasource.setDSName(databaseName); - datasource.setUrl(url); - datasource.setDriverClass(driverClass); - datasource.setUserName(user); - datasource.setPassword(password); - datasource.setDataSourceDescription(description); - - // Not configured - // datasource.setTransactionIsolation(); - // datasource.setMapperName(dsd.getProperty(MAPPERNAME, DEF_MAPPERNAME).trim()); - datasource.poolConfigure(connCheckLevel, - connMaxAge, - maxOpenTime, - defaultStatement, - maxStatements, - minPoolSize, - maxPoolSize, - maxIdletime, - maxwaiters, - samplingperiod, - adjustperiod); - - - return datasource; - } - - - /** - * Create a new {@link Driver} using the given properties. - * @param props The properties used to configure the {@link Driver}. - * {@literal null} indicates no properties. If the property cannot be - * set on the {@link Driver} being created then a SQLException must - * be thrown. - * @return A configured {@link Driver}. - * @throws SQLException If the {@link Driver} cannot be created. - */ - @Override - public Driver createDriver(final Properties props) throws SQLException { - Driver driver; - try { - driver = (Driver) driverClass.newInstance(); - } catch (InstantiationException e) { - throw new SQLException("Unable to build a driver instance", e); - } catch (IllegalAccessException e) { - throw new SQLException("Unable to build a driver instance", e); - } - - //TODO: Apply the properties - - - return driver; - } - - - -} diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/FirebirdSQL.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/FirebirdSQL.properties deleted file mode 100644 index 22cf3608f8..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/FirebirdSQL.properties +++ /dev/null @@ -1,62 +0,0 @@ -###################### FireBird DataSource configuration example -# - - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:firebirdsql:/// - -datasource.classname org.firebirdsql.jdbc.FBDriver -datasource.username -datasource.password -datasource.isolationlevel read_committed -datasource.mapper rdb.firebird - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select * from rdb$types - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/H2.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/H2.properties deleted file mode 100644 index 4cdd68e89a..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/H2.properties +++ /dev/null @@ -1,61 +0,0 @@ -###################### HSQLDB DataSource configuration example -# - - -##### -# DataSource configuration -# Replace db_jonas and jonas by appropriate values. -# -datasource.name jdbc_1 -datasource.url jdbc:h2:tcp://localhost:9001/db_jonas -#datasource.classname org.h2.jdbcx.JdbcDataSource -datasource.classname org.h2.Driver -datasource.username jonas -datasource.password jonas -datasource.mapper rdb.h2 - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select count(1) from information_schema.tables - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 100 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/HSQL1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/HSQL1.properties deleted file mode 100644 index 1b523d4a81..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/HSQL1.properties +++ /dev/null @@ -1,59 +0,0 @@ -###################### HSQLDB DataSource configuration example -# - - -##### -# DataSource configuration -# Replace db_jonas and jonas by appropriate values. -# -datasource.name jdbc_1 -datasource.url jdbc:hsqldb:hsql://localhost:9001/db_jonas -datasource.classname org.hsqldb.jdbcDriver -datasource.username jonas -datasource.password jonas -datasource.mapper rdb.hsql - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select count(1) from information_schema.system_tables - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 100 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InstantDB1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InstantDB1.properties deleted file mode 100644 index 4859bd11bd..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InstantDB1.properties +++ /dev/null @@ -1,57 +0,0 @@ -####################### InstantDB DataSource configuration example -# - - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:idb=db1.prp -datasource.classname org.enhydra.instantdb.jdbc.idbDriver - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt set date format "yyyy/mm/dd" - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 20 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InterBase1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InterBase1.properties deleted file mode 100644 index 2555494992..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/InterBase1.properties +++ /dev/null @@ -1,63 +0,0 @@ -###################### InterBase DataSource configuration example -# - - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:interbase:/// -#datasource.url jdbc:interbase://localhost//dbs/orders.gdb -#datasource.url jdbc:interbase://localhost/C:/dbs/orders.gdb -datasource.classname interbase.interclient.Driver -datasource.username -datasource.password -datasource.isolationlevel read_committed -datasource.mapper rdb.interbase - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select * from rdb$types - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 5 -jdbc.maxconpool 15 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - - diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/McKoi1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/McKoi1.properties deleted file mode 100644 index bf42203035..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/McKoi1.properties +++ /dev/null @@ -1,61 +0,0 @@ -###################### McKoi DataSource configuration example -# - - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:mckoi:// -datasource.classname com.mckoi.JDBCDriver -datasource.username -datasource.password -datasource.mapper rdb.mckoi - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select 1 - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - - -# Maximum number of Prepare Statements cached in a Connection -jdbc.pstmtmax 120 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/MySQL.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/MySQL.properties deleted file mode 100644 index 91af6ffb5a..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/MySQL.properties +++ /dev/null @@ -1,58 +0,0 @@ -###################### MySQL DataSource configuration example -# - -datasource.name jdbc_1 -datasource.url jdbc:mysql://localhost/db_jonas -datasource.classname org.gjt.mm.mysql.Driver -datasource.username -datasource.password -datasource.mapper rdb.mysql - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -# By default mySQL has a timeout every 8 hours, use a value of 7h -jdbc.connmaxage 420 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select 1 - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - -# Maximum number of Prepare Statements cached in a Connection -jdbc.pstmtmax 120 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Oracle1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Oracle1.properties deleted file mode 100644 index 709ef9ee4d..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Oracle1.properties +++ /dev/null @@ -1,61 +0,0 @@ -###################### Oracle DataSource configuration example -# - - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:oracle:thin:@:1521: -datasource.classname oracle.jdbc.driver.OracleDriver -datasource.username -datasource.password -datasource.mapper rdb.oracle - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select * from dual - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - -# Maximum number of Prepare Statements cached in a Connection -jdbc.pstmtmax 120 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/PostgreSQL1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/PostgreSQL1.properties deleted file mode 100644 index ccd54e257f..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/PostgreSQL1.properties +++ /dev/null @@ -1,63 +0,0 @@ -###################### PostgreSQL DataSource configuration example -# - - -##### -# DataSource configuration -# Replace db_jonas and jonas by appropriate values. -# -datasource.name jdbc_1 -datasource.url jdbc:postgresql://localhost:5432/db_jonas -datasource.classname org.postgresql.Driver -datasource.username jonas -datasource.password jonas -datasource.mapper rdb.postgres - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement -jdbc.connteststmt select 1 - -# JDBC Connection Pool size. -# Postgres accepts up to 30 connections. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 2 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 5 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 - -# Maximum number of Prepare Statements cached in a Connection -jdbc.pstmtmax 120 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Sybase1.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Sybase1.properties deleted file mode 100644 index 3e22afd259..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/Sybase1.properties +++ /dev/null @@ -1,40 +0,0 @@ -###################### Sybase DataSource configuration example -# - - -##### -# DataSource configuration -# Replace jonas and pwdjonas by appropriate values. -# -datasource.name jdbc_1 -datasource.url jdbc:sybase:Tds:machineName:5000/jonas -datasource.classname com.sybase.jdbc2.jdbc.SybDriver -datasource.username jonas -datasource.password pwdjonas - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 1 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 30 - -# Test statement -jdbc.connteststmt select 5 x, 2 y, "the product is", 5*2 Result - -# Maximum number of Prepare Statements cached in a Connection -jdbc.pstmtmax 120 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/db2.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/db2.properties deleted file mode 100644 index 6eabf944dc..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/db2.properties +++ /dev/null @@ -1,57 +0,0 @@ -###################### DB2 DataSource configuration example -# - -##### -# DataSource configuration -# -datasource.name jdbc_1 -datasource.url jdbc:db2://your.db.server:51000/db9 -datasource.classname COM.ibm.db2.jdbc.net.DB2Driver -datasource.username user -datasource.password pass -datasource.mapper rdb.db2 - - -##### -# ConnectionManager configuration -# - -# JDBC connection checking level. -# 0 = no special checking -# 1 = check physical connection is still open before reusing it -# 2 = try every connection before reusing it -jdbc.connchecklevel 0 - -# Max age for jdbc connections -# nb of minutes a connection can be kept in the pool -jdbc.connmaxage 1440 - -# Maximum time (in mn) a connection can be left busy outside of a transaction. -# If the caller has not issued a close() during this time, the connection -# will be closed automatically. In transaction, this parameter is useless. -# This parameter is deprecated as the JDBC Connection Leak detector which is -# enabled by default is already fixing these connection leaks without delay. -jdbc.maxopentime 60 - -# Test statement - not sure this is correct ? -jdbc.connteststmt select 1 - -# JDBC Connection Pool size. -# Limiting the max pool size avoids errors from database. -jdbc.minconpool 10 -jdbc.maxconpool 30 - -# Sampling period for JDBC monitoring : -# nb of seconds between 2 measures. -jdbc.samplingperiod 30 - -# nb of seconds between 2 pool adjustement -jdbc.adjustperiod 60 - -# Maximum time (in seconds) to wait for a connection in case of shortage. -# This may occur only when maxconpool is reached. -jdbc.maxwaittime 8 - -# Maximum of concurrent waiters for a JDBC Connection -# This may occur only when maxconpool is reached. -jdbc.maxwaiters 100 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/spy.properties b/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/spy.properties deleted file mode 100644 index 5815fb873c..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/jonas-resources/conf/spy.properties +++ /dev/null @@ -1,251 +0,0 @@ -################################################################# -# P6Spy Options File # -# See documentation for detailed instructions # -################################################################# - -################################################################# -# MODULES # -# # -# Modules provide the P6Spy functionality. If a module, such # -# as module_log is commented out, that functionality will not # -# be available. If it is not commented out (if it is active), # -# the functionality will be active. # -# # -# Values set in Modules cannot be reloaded using the # -# reloadproperties variable. Once they are loaded, they remain # -# in memory until the application is restarted. # -# # -################################################################# - -module.log=com.p6spy.engine.logging.P6LogFactory -#module.outage=com.p6spy.engine.outage.P6OutageFactory - -################################################################# -# REALDRIVER(s) # -# # -# In your application server configuration file you replace the # -# "real driver" name with com.p6spy.engine.spy.P6SpyDriver. # -# This is where you put the name of your real driver P6Spy can # -# find and register your real driver to do the database work. # -# # -# If your application uses several drivers specify them in # -# realdriver2, realdriver3. See the documentation for more # -# details. # -# # -# Values set in REALDRIVER(s) cannot be reloaded using the # -# reloadproperties variable. Once they are loaded, they remain # -# in memory until the application is restarted. # -# # -################################################################# - -# oracle driver -# realdriver=oracle.jdbc.driver.OracleDriver - -# mysql Connector/J driver -# realdriver=com.mysql.jdbc.Driver - -# informix driver -# realdriver=com.informix.jdbc.IfxDriver - -# ibm db2 driver -# realdriver=COM.ibm.db2.jdbc.net.DB2Driver - -# the mysql open source driver -#realdriver=org.gjt.mm.mysql.Driver - -# the posgresql driver -realdriver=org.postgresql.Driver - -#specifies another driver to use -realdriver2= -#specifies a third driver to use -realdriver3= - - -#the DriverManager class sequentially tries every driver that is -#registered to find the right driver. In some instances, it's possible to -#load up the realdriver before the p6spy driver, in which case your connections -#will not get wrapped as the realdriver will "steal" the connection before -#p6spy sees it. Set the following property to "true" to cause p6spy to -#explicitily deregister the realdrivers -deregisterdrivers=false - -################################################################ -# P6LOG SPECIFIC PROPERTIES # -################################################################ -# no properties currently available - -################################################################ -# EXECUTION THRESHOLD PROPERTIES # -################################################################ -# This feature applies to the standard logging of P6Spy. # -# While the standard logging logs out every statement # -# regardless of its execution time, this feature puts a time # -# condition on that logging. Only statements that have taken # -# longer than the time specified (in milliseconds) will be # -# logged. This way it is possible to see only statements that # -# have exceeded some high water mark. # -# This time is reloadable. # -# -# executionthreshold=integer time (milliseconds) -# -executionthreshold= - -################################################################ -# P6OUTAGE SPECIFIC PROPERTIES # -################################################################ -# Outage Detection -# -# This feature detects long-running statements that may be indicative of -# a database outage problem. If this feature is turned on, it will log any -# statement that surpasses the configurable time boundary during its execution. -# When this feature is enabled, no other statements are logged except the long -# running statements. The interval property is the boundary time set in seconds. -# For example, if this is set to 2, then any statement requiring at least 2 -# seconds will be logged. Note that the same statement will continue to be logged -# for as long as it executes. So if the interval is set to 2, and the query takes -# 11 seconds, it will be logged 5 times (at the 2, 4, 6, 8, 10 second intervals). -# -# outagedetection=true|false -# outagedetectioninterval=integer time (seconds) -# -outagedetection=false -outagedetectioninterval= - -################################################################ -# COMMON PROPERTIES # -################################################################ - -# filter what is logged -filter=false - -# comma separated list of tables to include when filtering -include = -# comma separated list of tables to exclude when filtering -exclude = - -# sql expression to evaluate if using regex filtering -sqlexpression = - - -# turn on tracing -autoflush = true - -# sets the date format using Java's SimpleDateFormat routine -dateformat= - -#list of categories to explicitly include -includecategories= - -#list of categories to exclude: error, info, batch, debug, statement, -#commit, rollback and result are valid values -excludecategories=info,debug,result,batch - - -#allows you to use a regex engine or your own matching engine to determine -#which statements to log -# -#stringmatcher=com.p6spy.engine.common.GnuRegexMatcher -#stringmatcher=com.p6spy.engine.common.JakartaRegexMatcher -stringmatcher= - -# prints a stack trace for every statement logged -stacktrace=false -# if stacktrace=true, specifies the stack trace to print -stacktraceclass= - -# determines if property file should be reloaded -reloadproperties=false -# determines how often should be reloaded in seconds -reloadpropertiesinterval=60 - -#if=true then url must be prefixed with p6spy: -useprefix=false - -#specifies the appender to use for logging -#appender=com.p6spy.engine.logging.appender.Log4jLogger -#appender=com.p6spy.engine.logging.appender.StdoutLogger -#appender=com.p6spy.engine.logging.appender.FileLogger -# JOnAS change -appender=org.objectweb.util.monolog.wrapper.p6spy.P6SpyLogger - -# name of logfile to use, note Windows users should make sure to use forward slashes in their pathname (e:/test/spy.log) (used for file logger only) -logfile = spy.log - -# append to the p6spy log file. if this is set to false the -# log file is truncated every time. (file logger only) -append=true - -#The following are for log4j logging only -log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender -log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout -log4j.appender.STDOUT.layout.ConversionPattern=p6spy - %m%n - -#log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender -#log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost -#log4j.appender.CHAINSAW_CLIENT.Port=4445 -#log4j.appender.CHAINSAW_CLIENT.LocationInfo=true - -log4j.logger.p6spy=INFO,STDOUT - - -################################################################# -# DataSource replacement # -# # -# Replace the real DataSource class in your application server # -# configuration with the name com.p6spy.engine.spy.P6DataSource,# -# then add the JNDI name and class name of the real # -# DataSource here # -# # -# Values set in this item cannot be reloaded using the # -# reloadproperties variable. Once it is loaded, it remains # -# in memory until the application is restarted. # -# # -################################################################# -#realdatasource=/RealMySqlDS -#realdatasourceclass=com.mysql.jdbc.jdbc2.optional.MysqlDataSource - -################################################################# -# DataSource properties # -# # -# If you are using the DataSource support to intercept calls # -# to a DataSource that requires properties for proper setup, # -# define those properties here. Use name value pairs, separate # -# the name and value with a semicolon, and separate the # -# pairs with commas. # -# # -# The example shown here is for mysql # -# # -################################################################# -#realdatasourceproperties=port;3306,serverName;ibmhost,databaseName;mydb - - -################################################################# -# JNDI DataSource lookup # -# # -# If you are using the DataSource support outside of an app # -# server, you will probably need to define the JNDI Context # -# environment. # -# # -# If the P6Spy code will be executing inside an app server then # -# do not use these properties, and the DataSource lookup will # -# use the naming context defined by the app server. # -# # -# The two standard elements of the naming environment are # -# jndicontextfactory and jndicontextproviderurl. If you need # -# additional elements, use the jndicontextcustom property. # -# You can define multiple properties in jndicontextcustom, # -# in name value pairs. Separate the name and value with a # -# semicolon, and separate the pairs with commas. # -# # -# The example shown here is for a standalone program running on # -# a machine that is also running JBoss, so the JDNI context # -# is configured for JBoss (3.0.4). # -# # -################################################################# -#jndicontextfactory=org.jnp.interfaces.NamingContextFactory -#jndicontextproviderurl=localhost:1099 -#jndicontextcustom=java.naming.factory.url.pkgs;org.jboss.nameing:org.jnp.interfaces - -#jndicontextfactory=com.ibm.websphere.naming.WsnInitialContextFactory -#jndicontextproviderurl=iiop://localhost:900 diff --git a/jonas/modules/services/jonas-dbm/core/src/main/resources/META-INF/jonas-dbm-core.bnd b/jonas/modules/services/jonas-dbm/core/src/main/resources/META-INF/jonas-dbm-core.bnd deleted file mode 100644 index a4065520c5..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/resources/META-INF/jonas-dbm-core.bnd +++ /dev/null @@ -1,32 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: $ -# --------------------------------------------------------------------------- - -# Export-nothing -Export-Package org.ow2.jonas.dbm.internal.cm.* - -Private-Package org.ow2.jonas.dbm.internal,\ - org.ow2.jonas.dbm.internal.mbean, \ - org.ow2.jonas.dbm.internal.osgi - -# Need to find JDBC drivers everywhere -DynamicImport-Package * diff --git a/jonas/modules/services/jonas-dbm/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-dbm/core/src/main/resources/metadata.xml deleted file mode 100644 index bd53b512f0..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/core/src/main/resources/org/ow2/jonas/dbm/internal/mbeans-descriptors.xml b/jonas/modules/services/jonas-dbm/core/src/main/resources/org/ow2/jonas/dbm/internal/mbeans-descriptors.xml deleted file mode 100644 index 78f1cc9118..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/resources/org/ow2/jonas/dbm/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-dbm/core/src/main/templates/jonas-dbm.properties.template b/jonas/modules/services/jonas-dbm/core/src/main/templates/jonas-dbm.properties.template deleted file mode 100644 index 733409d49d..0000000000 --- a/jonas/modules/services/jonas-dbm/core/src/main/templates/jonas-dbm.properties.template +++ /dev/null @@ -1,15 +0,0 @@ -# -###################### JOnAS DBM Database service configuration -# -jonas.services dbm -# Set the name of the implementation class of the dbm service -jonas.service.dbm.class org.ow2.jonas.dbm.internal.JOnASDataBaseManagerService - -# Set the jonas DataSources. This enables the JOnAS server to load -# the data dources, to load related jdbc drivers, and to register the data -# sources into JNDI. -# This key is set with a coma-separated list of Datasource properties -# file names (without the '.properties' suffix). -# Ex: Oracle1,HSQL1 (while the Datasources properties file names are -# Oracle1.properties and HSQL1.properties) -jonas.service.dbm.datasources diff --git a/jonas/modules/services/jonas-dbm/pom.xml b/jonas/modules/services/jonas-dbm/pom.xml deleted file mode 100644 index 27e947a4a5..0000000000 --- a/jonas/modules/services/jonas-dbm/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-dbm - pom - JOnAS :: Services :: DataBase Manager - - - core - ant - - - diff --git a/jonas/modules/services/jonas-discovery/base/ant/pom.xml b/jonas/modules/services/jonas-discovery/base/ant/pom.xml deleted file mode 100644 index 2ed3b3bab7..0000000000 --- a/jonas/modules/services/jonas-discovery/base/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-discovery-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-base-ant - jar - JOnAS :: Services :: Discovery :: Base :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-discovery/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/base/Discovery.java b/jonas/modules/services/jonas-discovery/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/base/Discovery.java deleted file mode 100644 index 0433dffc72..0000000000 --- a/jonas/modules/services/jonas-discovery/base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/base/Discovery.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.discovery.base; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -/** - * - * Defines properties for Discovery service. - * @author Florent Benoit - */ -public class Discovery extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - protected static final String INFO = "[Discovery] "; - - /** - * Name of the property for changing the discovery class - */ - protected final static String DISCOVERY_CLASS_PROPERTY = "jonas.service.discovery.class"; - - /** - * Default constructor. - */ - public Discovery() { - super(); - } - - /** - * Create a JReplace Task for changing service classname in jonas.properties. - * - * @param serviceName service classname to use. - * @return Returns a JReplace Task. - */ - protected JTask createServiceNameReplace(final String serviceName, final String info, final String confDir) { - return super.createServiceNameReplace(serviceName, info, confDir, this.DISCOVERY_CLASS_PROPERTY); - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - super.executeAllTask(); - } - -} diff --git a/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.properties.template b/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.properties.template deleted file mode 100644 index bf32932eaf..0000000000 --- a/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.properties.template +++ /dev/null @@ -1,2 +0,0 @@ -#Discovery -%discovery.implementation.default% \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.xml b/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.xml deleted file mode 100644 index 5603a6daad..0000000000 --- a/jonas/modules/services/jonas-discovery/base/ant/src/main/resources/build-discovery.xml +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/core/pom.xml b/jonas/modules/services/jonas-discovery/base/core/pom.xml deleted file mode 100644 index 7f2c9175fc..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - jonas-discovery-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-base-core - bundle - JOnAS :: Services :: Discovery :: Base :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/BaseDiscovery.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/BaseDiscovery.java deleted file mode 100644 index 93fe449fce..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/BaseDiscovery.java +++ /dev/null @@ -1,171 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:BaseDiscovery.java 10967 2007-07-12 07:50:01Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base; - -import java.util.ArrayList; - -import org.ow2.jonas.discovery.DiscoveryService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; - -/** - * This class is inherited by all discovery Implementations It provides common discovery operations. - * @author eyindanga - */ - -public abstract class BaseDiscovery extends AbsServiceImpl implements DiscoveryService , DiscoveryServiceImplMBean { - - /** - * The time period in miliseconds to listen for greeting responses. - * @uml.property name="greetingAckTimeOut" - */ - private int greetingAckTimeOut; - - /** - * Default Time-To-Live (unit ? sec/ms ?). - */ - private static final int DISCOVERY_TTL_DEFAULT = 1; - - /** - * Time-To-Live. - * @uml.property name="ttl" - */ - private int ttl = DISCOVERY_TTL_DEFAULT; - - /** - * This attribute is injected. - * set to true if enroller and discoveryClient started. - * @uml.property name="isDiscoveryMaster" - */ - private boolean isDiscoveryMaster = false; - - /** - * The {@link JmxService} instance. - */ - private JmxService jmxService = null; - - /** - * Array list of urls retrived from jmxService. - */ - protected ArrayList urlsList; - - /** - * @return the greetingAckTimeOut - * @uml.property name="greetingAckTimeOut" - */ - public int getGreetingTimeout() { - return greetingAckTimeOut; - } - - /** - * Set a new timeout. - * @param greetingAckTimeOut new greeting timeout - */ - public void setGreetingTimeout(final int greetingAckTimeOut) { - this.greetingAckTimeOut = greetingAckTimeOut; - } - - /** - * @return the isDiscoveryMaster - * @uml.property name="isDiscoveryMaster" - */ - public boolean getIsDiscoveryMaster() { - return isDiscoveryMaster; - } - - /** - * @param discoveryMaster the isDiscoveryMaster - * @uml.property name="isDiscoveryMaster" - */ - public void setMaster(final boolean discoveryMaster) { - isDiscoveryMaster = discoveryMaster; - } - - /** - * @return the listeningIp - * @uml.property name="listeningIp" - */ - public abstract String getListeningIp(); - - /** - * @param listeningIp the listeningIp to set - * @uml.property name="listeningIp" - */ - public abstract void setListeningIp(final String listeningIp); - - /** - * @return the listeningPort - * @uml.property name="listeningPort" - */ - public abstract int getListeningPort(); - - /** - * @param listeningPort the listeningPort to set - * @uml.property name="listeningPort" - */ - public abstract void setListeningPort(final int listeningPort); - - /** - * @return the ttl - * @uml.property name="ttl" - */ - public int getTtl() { - return ttl; - } - - /** - * @param ttl the ttl to set - * @uml.property name="ttl" - */ - public void setTtl(final int ttl) { - this.ttl = ttl; - } - - /** - * @return the jmxService - */ - public JmxService getJmxService() { - return jmxService; - } - - /** - * Sets the jmxService. - * @param jmxService the jmxService to set. Used by the injector - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @return the urlsList - */ - public abstract ArrayList getUrlsList(); - - /** - * @param urlsList the urlsList to set - */ - public abstract void setUrlsList(final ArrayList urlsList); - -} diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscHelper.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscHelper.java deleted file mode 100644 index 837435b1ef..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscHelper.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.base.comm.DiscMessage; - -/** - * Discovery Helper. Convert objects to bytes and vice versa. - * @author eyindanga - * - */ -public class DiscHelper { - /** - * Constant for DiscMessage objects type. - */ - private static int DISC_MESSAGE = 0; - /** - * Constant for DiscEvent objects type. - */ - private static int DISC_EVENT = 1; - - /** - * Constant for DiscGreeting objects type. - */ - private static int DISC_GREETING = 2; - - /** - * Construct a byte[] containing type info about a DiscMessage object to be sent, - * plus the content of this message. - * @param obj Object to be send. Only supported DiscMessage objects. - * @return Null if the object is not an instance of DiscMessage or one of its subclasses. - * @throws IOException Could not create an ObjectOutputStream to write into the - * underlying ByteArrayOutputStream. - */ - public static byte[] objectToBytes(final Object obj) throws IOException { - byte[] resultBytes = null; - if (!(obj instanceof DiscMessage)) { - return null; - } - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - ObjectOutputStream stream = new ObjectOutputStream(byteStream); - try { - if (obj instanceof DiscEvent) { - stream.writeInt(DISC_EVENT); - } else if (obj instanceof DiscGreeting) { - stream.writeInt(DISC_GREETING); - } else { - stream.writeInt(DISC_MESSAGE); - } - stream.writeObject(obj); - resultBytes = byteStream.toByteArray(); - byteStream.close(); - stream.close(); - } catch (IOException e) { - throw e; - } finally { - byteStream.close(); - stream.close(); - } - return resultBytes; - } - - /** - * Gets DiscEvenet, DiscMessage, or DiscGreeting from bytes array. - * @param bytes byte[] containing a received message - * @return Null if the object in the received message is not of one of the known types, or the object which - * have been sent. - * @throws IOException Could not create an ObjectInputStream to read in it - * @throws ClassNotFoundException Class of a serialized object cannot be found - */ - public static Object bytesToObject(final byte[] bytes) throws IOException, ClassNotFoundException { - Object resultObject = null; - ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes); - ObjectInputStream stream = null; - try { - stream = new ObjectInputStream(byteStream); - int type = stream.readInt(); - if (type == DISC_MESSAGE) { - resultObject = (DiscMessage) stream.readObject(); - } else if (type == DISC_EVENT) { - resultObject = (DiscEvent) stream.readObject(); - } else if (type == DISC_GREETING) { - resultObject = (DiscGreeting) stream.readObject(); - } - } catch (IOException e) { - throw e; - } catch (ClassNotFoundException e) { - throw e; - } finally { - byteStream.close(); - stream.close(); - } - return resultObject; - } -} diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscoveryServiceImplMBean.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscoveryServiceImplMBean.java deleted file mode 100644 index bb73a7a28d..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DiscoveryServiceImplMBean.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:MulticastDiscoveryServiceImplMBean.java 10967 2007-07-12 07:50:01Z eyindanga $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base; - -import java.util.ArrayList; - -import javax.management.JMException; -import javax.management.ObjectName; - -import org.ow2.jonas.service.ServiceException; - -/** - * Management interface for the discovery service. - * @author Adriana Danes - * @author eyindanga - * - */ -public interface DiscoveryServiceImplMBean { - /** - * @return the time-to-live of the discovery multicast - */ - String getDiscoveryTtl(); - /** - * Make this server a discovery master. - * @throws JMException a JMX exception occured when trying to make current server a discovery master - */ - void startDiscoveryMaster() throws JMException; - /** - * @return the ttl - * @uml.property name="ttl" - */ - int getTtl(); - /** - * @param ttl the ttl to set - * @uml.property name="ttl" - */ - void setTtl(final int ttl); - /** - * @return the urlsList - */ - ArrayList getUrlsList(); - /** - * @param urlsList the urlsList to set - */ - void setUrlsList(final ArrayList urlsList); - /** - * @param isDiscoveryMaster : true if discovery is master. - */ - void setMaster(final boolean isDiscoveryMaster); - - /** - * @return the discovery protocol version number - */ - String getDiscoveryProtocolVersion(); - - /** - * @throws ServiceException If discovery service cannot be started. - */ - void start() throws ServiceException; - - /** - * Stops discovery. - */ - void stop(); - /** - * @return the greetingAckTimeOut - */ - int getGreetingTimeout(); - /** - * @param greetingAckTimeOut the greetingAckTimeOut to set - */ - void setGreetingTimeout(int greetingAckTimeOut); - /** - * @return the listeningIp - */ - String getListeningIp(); - /** - * @param listeningIp the listeningIp to set - */ - void setListeningIp(String listeningIp); - /** - * @return the listeningPort - */ - int getListeningPort(); - /** - * @param listeningPort the listeningPort to set - */ - void setListeningPort(int listeningPort); - /** - * @return the domainName - */ - String getDomainName(); - /** - * @param domainName the domainName to set - */ - void setDomainName(String domainName); - /** - * @return true if discovery is master - */ - boolean getIsDiscoveryMaster(); - /** - * @return the jonasName - */ - String getJonasName(); - /** - * @param jonasName the jonasName to set - */ - void setJonasName(String jonasName); - /** - * @return the myOn - */ - ObjectName getMyOn(); - /** - * @param myOn the myOn to set - */ - void setMyOn(ObjectName myOn); - /** - * @return the serverId - */ - String getServerId(); - /** - * @param serverId the serverId to set - */ - void setServerId(String serverId); - /** - * @return the urls - */ - String[] getUrls(); - /** - * @param urls the urls to set - */ - void setUrls(String[] urls); - /** - * @return the multicast group IP address used by the discovery service - */ - String getMulticastAddress(); - /** - * @return the multicast group port number used by the discovery service - */ - String getMulticastPort(); -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DuplicateServerNameException.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DuplicateServerNameException.java deleted file mode 100644 index d7af4e1a04..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/DuplicateServerNameException.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.discovery.base; - -import org.ow2.jonas.service.ServiceException; - -/** - * This exception is thrown when a pre-existing server with the same server name is detected. - * @author: Vivek Lakshmanan - */ -public class DuplicateServerNameException extends ServiceException { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * Default constructor. - */ - public DuplicateServerNameException() { - super("A server with the given name already exists in the domain."); - } - - /** - * Default constructor. - */ - public DuplicateServerNameException( String serverId, String srvName, String domainName) { - super("A server with name: "+serverId+"the Id: "+srvName+"is already started in domain: "+domainName); - } -} diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/ClusterdDiscoveryEvent.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/ClusterdDiscoveryEvent.java deleted file mode 100644 index 47719b1261..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/ClusterdDiscoveryEvent.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.discovery.base.comm; - -/** - * Discovery Event sent by a cluster daemon. It's necessary to separate server comunication and cluster daemon communication - * Since actions that will be performed by a master discovery when receiving this kind of message - * are different from the ones performed when receiving DiscEvent - * @author eyindanga - * - */ -public class ClusterdDiscoveryEvent extends DiscEvent { - - /**Constructor. - * @param sourceAddress Discovery IP. - * @param sourcePort Discovery port - * @param serverId Server ID - */ - public ClusterdDiscoveryEvent(final String sourceAddress, final int sourcePort, - final String serverId) { - super(sourceAddress, sourcePort, serverId); - // TODO Auto-generated constructor stub - } - - /** - * @param discIp Discovery IP. - * @param discPort Discovery port - * @param hostName Host name - * @param domainName Domain name - * @param serverId Server ID - * @param urls Connector urls of discovery host. - */ - public ClusterdDiscoveryEvent(final String discIp, final Integer discPort, - final String hostName, final String domainName, final String serverId, final String[] urls) { - super(discIp, discPort, hostName, domainName, serverId, urls); - // TODO Auto-generated constructor stub - } - - /** - *Serial version ID. - */ - private static final long serialVersionUID = 1L; - -} diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscEvent.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscEvent.java deleted file mode 100644 index e4c19c15f4..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscEvent.java +++ /dev/null @@ -1,277 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base.comm; - -import org.ow2.jonas.discovery.DiscoveryEvent; - - -/** - * @author Takoua Abdellatif - * @author Adriana Danes - * @version 1.0 - */ -public class DiscEvent extends DiscMessage implements DiscoveryEvent { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * @uml.property name="serverName" - */ - private String serverName = null; - - /** - * @uml.property name="domainName" - */ - private String domainName = null; - - /** - * @uml.property name="state" - */ - private String state = null; - - /** - * @uml.property name="serverId" - */ - private String serverId = null; - - - /** - *Connector urls. - */ - private String[] urls = null; - - - /** - * True if discovery is master. - */ - private boolean isDiscoveryMaster = false; - - /**Constructor. - * @param sourceAddress Discovery address. - * @param sourcePort Discovery port. - * @param serverId The serverId for this server. - */ - public DiscEvent(final String sourceAddress, final int sourcePort, final String serverId) { - super(sourceAddress, sourcePort); - } - - /** - * Constructor for a Discovery Event. - * @param sourceAddress - * the host address to use to receive a response. - * @param sourcePort - * is the port used in the case of a point to point response. - * @param serverName - * is Jonas server name. - * @param domainName - * is Jonas domain name. - * @param serverId TODO - * @param connectorURLs - * contains the list of all connector urls registered in the mbean - * server. - */ - public DiscEvent(final String sourceAddress, final int sourcePort, final String serverName, - final String domainName, final String serverId, final String[] connectorURLs) { - super(sourceAddress, sourcePort); - this.serverName = serverName; - this.domainName = domainName; - this.serverId = serverId; - this.urls = connectorURLs; - } - - - - /** - * Constructor for a Discovery Event. - * @param sourceAddress - * the host address to use to receive a response. - * @param sourcePort - * is the port used in the case of a point to point response. - * @param serverName - * is Jonas server name. - * @param domainName - * is Jonas domain name. - * @param serverId TODO - * @param connectorURLs - * contains the list of all connector urls registered in the mbean - * server. - *@param isMaster - * True id the discovery is master - */ - public DiscEvent(final String sourceAddress, final int sourcePort, final String serverName, - final String domainName, final String serverId, final String[] connectorURLs, final boolean isMaster) { - super(sourceAddress, sourcePort); - this.serverName = serverName; - this.domainName = domainName; - this.serverId = serverId; - this.urls = connectorURLs; - this.isDiscoveryMaster = isMaster; - } - - /** - * returns server name. - * @return serverName - * @uml.property name="serverName" - */ - public String getServerName() { - return serverName; - } - - /** - * returns domain name. - * @return domain name. - * @uml.property name="domainName" - */ - public String getDomainName() { - return domainName; - } - - /** - * sets the domain name. - * @param domainName the management domain name - * @uml.property name="domainName" - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * sets the serverName. - * @param serverName the name of the server sending the discovery event - * @uml.property name="serverName" - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * @return the connector URLs of the server sending the discovery event - */ - public String[] getConnectorURL() { - return urls; - } - - /** - * @param connectorURLs the connector URLs of the server sending the discovery event - */ - public void setConnectorURL(final String[] connectorURLs) { - this.urls = connectorURLs; - } - - /** - * @return server state. - * @uml.property name="state" - */ - public String getState() { - return state; - } - - /** - * sets the server state : RUNNING or STOPPING. - * @param state state of the server sending the discovery event - * @uml.property name="state" - */ - public void setState(final String state) { - this.state = state; - } - - /** - * The string version of the message. - * @return the message - */ - public String toString() { - String str = super.toString() - + " State=" + state - + " DomainName=" + domainName - + " ServerName= " + serverName - + " Serverid = " + serverId; - if (urls != null) { - str = str + " URLs= "; - for (int i = 0; i < urls.length; i++) { - str = str + urls[i] + " "; - } - } - return str; - - } - - /**Gets the server ID. - * @return Server ID. - * @uml.property name="serverId" - */ - public String getServerId() { - return serverId; - } - - /** - * Sets the server ID. - * @param serverId Id of discovery Host. - * @uml.property name="serverId" - */ - public void setServerId(final String serverId) { - this.serverId = serverId; - } - - /** - * @return the urls - */ - public String[] getUrls() { - return urls; - } - - /**Sets connector urls of discovery host. - * @param urls the urls to set - */ - public void setUrls(final String[] urls) { - this.urls = urls; - } - - /**Checks if discovery is master. - * @return True if discovery is master. - */ - public boolean isDiscoveryMaster() { - return new Boolean(isDiscoveryMaster); - } - - /** - * Discovery becomes master. - * @param isDiscoveryMaster the isDiscoveryMaster to set - */ - public void setDiscoveryMaster(final boolean isDiscoveryMaster) { - this.isDiscoveryMaster = isDiscoveryMaster; - } - - /** - * @return True if discovery is master. - */ - public boolean isMaster() { - // TODO Auto-generated method stub - return new Boolean(isDiscoveryMaster); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscGreeting.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscGreeting.java deleted file mode 100644 index c375150108..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscGreeting.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base.comm; - -import org.ow2.jonas.discovery.DiscoveryState; - -/** - * This class represents a special greeting message which has two uses: 1) - * To act as a broadcast to the domain that a new server with a given server name has started. - * It also includes a port that the server will listen to objections at, the domain name and state set to STARTUP. 2) - * To inform the newly started server that server name is already in use by another server. - * @author Vivek Lakshmanan - * @version 1.0 - */ -public class DiscGreeting extends DiscMessage { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * @uml.property name="state" - */ - private String state = null; - - /** - * @uml.property name="serverName" - */ - private String serverName = null; - - /** - * @uml.property name="domainName" - */ - private String domainName = null; - - /** - * @uml.property name="serverId" - */ - private String serverId = null; - - /**Constructor. - * @param sourceAddress Discovery address - * @param sourcePort Discovery source port - */ - public DiscGreeting(final String sourceAddress, final int sourcePort) { - super(sourceAddress, sourcePort); - } - - /** - * Constructor for a Discovery Greeting. - * @param sourceAddress - * the host address to use to receive a response. - * @param sourcePort - * is the port used in the case of a point to point response. - * @param serverName - * is Jonas server name. - * @param domainName - * is Jonas domain name. - * @param startingUp - * is this server starting up or is it reporting back with a - * notification stating that it owns this server name? - * @param serverId TODO - */ - public DiscGreeting(final String sourceAddress, final int sourcePort, - final String serverName, final String domainName, final boolean startingUp, - final String serverId) { - super(sourceAddress, sourcePort); - this.serverName = serverName; - this.domainName = domainName; - this.serverId = serverId; - - if (startingUp) { - this.state = DiscoveryState.STARTUP; - } else { - this.state = DiscoveryState.DUPLICATE_NAME; - } - - } - - /** - * returns server name. - * @return serverName - * @uml.property name="serverName" - */ - public String getServerName() { - return serverName; - } - - /** - * Gets domain name. - * @return domain name. - * @uml.property name="domainName" - */ - public String getDomainName() { - return domainName; - } - - /** - * Sets the domain name. - * @param domainName the management domain name - * @uml.property name="domainName" - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * Sets the serverName. - * @param serverName the name of the server sending the discovery greeting - * @uml.property name="serverName" - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /**Gets host state. - * @return server state. - * @uml.property name="state" - */ - public String getState() { - return state; - } - - /** - * Sets the server state : STARTINGUP or DUPLICATE_NAME. - * @param state state of the server sending the discovery greeting, one of DiscGreeting. - * STARTUP or DiscGreeting.DUPLICATE_NAME - * @uml.property name="state" - */ - public void setState(final String state) { - this.state = state; - } - - /** - * The string version of the message. - * @return the message - */ - public String toString() { - String str = super.toString() + " State=" - + state + " DomainName=" + domainName + " ServerName= " + serverName + " serverId= " + serverId; - return str; - - } - /** - * @return serverId - * @uml.property name="serverId" - */ - public String getServerId() { - return serverId; - } - - /** - * Sets the serverId. - * @param serverId value of the serverId to set - * @uml.property name="serverId" - */ - public void setServerId(final String serverId) { - this.serverId = serverId; - } -} diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscMessage.java b/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscMessage.java deleted file mode 100644 index 93494fe7ff..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/java/org/ow2/jonas/discovery/base/comm/DiscMessage.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.base.comm; - -import java.io.Serializable; - -/** - * @author Takoua Abdellatif - * @author Adriana Danes - * @version 1.1 - */ -public class DiscMessage implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - /** - * The protocol version for the Discovery messages. - */ - public static final String DISCOVERY_PROTOCOL_VERSION = "1.1"; - - /** - * The version for this message. - * @uml.property name="version" - */ - private String version; - - /** - * @uml.property name="sourceAddress" - */ - private String sourceAddress; - - /** - * @uml.property name="sourcePort" - */ - private int sourcePort; - - /** - * Creates a new DiscoveryRequest. - * @param sourceAddress - * source address to use to send discovery responses. - * @param sourcePort - * source port to use to send disovery responses. - * - */ - public DiscMessage(final String sourceAddress, final int sourcePort) { - this.sourceAddress = sourceAddress; - this.sourcePort = sourcePort; - this.version = DISCOVERY_PROTOCOL_VERSION; - } - - /** - * Returns the destinationAddress value in String type. - * @return Returns the destinationAddress. - * @uml.property name="sourceAddress" - */ - public String getSourceAddress() { - return sourceAddress; - } - - /** - * Returns the sourcePort value. - * @return Returns the sourcePort. - * @uml.property name="sourcePort" - */ - public int getSourcePort() { - return sourcePort; - } - - /** - * Sets the source address. - * @param sourceAddress Discovery source address. - * @uml.property name="sourceAddress" - */ - public void setSourceAddress(final String sourceAddress) { - this.sourceAddress = sourceAddress; - } - - /** - * Sets the source port. - * @param sourcePort Discovery source port - * @uml.property name="sourcePort" - */ - public void setSourcePort(final int sourcePort) { - this.sourcePort = sourcePort; - } - - /** - * @return the object trandformed into a String - */ - public String toString() { - String messageString = null; - messageString = "SourceAddress= " + sourceAddress + " SourcePort= " + sourcePort; - return messageString; - } - - /** - * @return discovery protocol version - * @uml.property name="version" - */ - public String getVersion() { - return version; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/resources/META-INF/jonas-discovery-base-core.bnd b/jonas/modules/services/jonas-discovery/base/core/src/main/resources/META-INF/jonas-discovery-base-core.bnd deleted file mode 100644 index 7363424fc2..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/resources/META-INF/jonas-discovery-base-core.bnd +++ /dev/null @@ -1,24 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.discovery.base.* diff --git a/jonas/modules/services/jonas-discovery/base/core/src/main/templates/jonas-discovery.properties.template b/jonas/modules/services/jonas-discovery/base/core/src/main/templates/jonas-discovery.properties.template deleted file mode 100644 index 771ae9ce76..0000000000 --- a/jonas/modules/services/jonas-discovery/base/core/src/main/templates/jonas-discovery.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -# -###################### JOnAS Discovery service -# -jonas.services discovery -%jonas.service.discovery.class% \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/base/pom.xml b/jonas/modules/services/jonas-discovery/base/pom.xml deleted file mode 100644 index dd167e275a..0000000000 --- a/jonas/modules/services/jonas-discovery/base/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-discovery - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-discovery-base - pom - JOnAS :: Services :: Discovery :: Base - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/jgroups/ant/pom.xml b/jonas/modules/services/jonas-discovery/jgroups/ant/pom.xml deleted file mode 100644 index 79a7a32a23..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-discovery-jgroups - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-jgroups-ant - jar - JOnAS :: Services :: Discovery :: JGroups :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-discovery-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/jgroups/DiscoveryJGroups.java b/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/jgroups/DiscoveryJGroups.java deleted file mode 100644 index 987581852a..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/jgroups/DiscoveryJGroups.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.discovery.jgroups; - -import org.ow2.jonas.antmodular.jonasbase.discovery.base.Discovery; - -/** - * Defines properties for discovery-jgroups service - * @Jeremy Cazaux - */ -public class DiscoveryJGroups extends Discovery { - - /** - * Name of the implementation class for JGroups. - */ - private static final String JGROUPS_SERVICE = "org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImpl"; - - /** - * Execute all tasks - */ - public DiscoveryJGroups() { - super(); - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - super.createServiceNameReplace(this.JGROUPS_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/antlib-discovery-jgroups.xml b/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/antlib-discovery-jgroups.xml deleted file mode 100644 index 9d2b808e8f..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/antlib-discovery-jgroups.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.properties b/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.properties deleted file mode 100644 index 625e8a49d9..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.properties +++ /dev/null @@ -1 +0,0 @@ -discovery.implementation.default=jgroups \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.xml b/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.xml deleted file mode 100644 index 6fb8ba07db..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/ant/src/main/resources/build-discovery-jgroups.xml +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/pom.xml b/jonas/modules/services/jonas-discovery/jgroups/core/pom.xml deleted file mode 100644 index dff8f5af30..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - jonas-discovery-jgroups - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-jgroups-core - bundle - JOnAS :: Services :: Discovery :: JGroups :: Core - - - - org.ow2.jonas - jonas-discovery-base-core - ${project.version} - - - org.ow2.bundles - ow2-bundles-externals-jgroups - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.bundles - ow2-util-log - - - org.ow2.jonas - jonas-domain - ${project.version} - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/DiscRunnable.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/DiscRunnable.java deleted file mode 100644 index 5c1bfa9d0b..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/DiscRunnable.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.ow2.jonas.discovery.jgroups; - -import org.ow2.jonas.discovery.jgroups.comm.exception.StopDiscException; - -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * @author eyindanga - */ - - -public interface DiscRunnable extends Runnable { - /* (non-Javadoc) - * @see java.lang.Runnable#run() - */ - void run(); - /** - * Stop it. - * - */ - void stop(); - /** - * Start it. - * @throws StopDiscException Discovery must stop. - */ - void start() throws StopDiscException; -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImpl.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImpl.java deleted file mode 100644 index ff8f5d63c9..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImpl.java +++ /dev/null @@ -1,477 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups; - -import java.util.ArrayList; -import java.util.HashMap; - -import javax.management.JMException; -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.management.remote.JMXServiceURL; - -import org.jgroups.ChannelException; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.base.BaseDiscovery; -import org.ow2.jonas.discovery.jgroups.comm.exception.StopDiscException; -import org.ow2.jonas.discovery.jgroups.manager.DiscoveryManager; -import org.ow2.jonas.discovery.jgroups.utils.JGroupsDiscoveryUtils; -import org.ow2.jonas.ha.HaService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; -/** - * This is a JGroups based JOnAS discovery implementation. - * @author eyindanga - */ -public class JgroupsDiscoveryServiceImpl extends BaseDiscovery implements JgroupsDiscoveryServiceImplMBean { - - /** - * Default reconnection timeout. - */ - private static final String DEFAULT_RECONNECTION_TIMEOUT = "5000"; - /** - * Logger for this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - /** - * Reconnection timeout for JGroups Channel. This property is injected. - */ - private long reconnectionTimeout; - - /** - * This property is injected. - */ - private String groupName; - - /** - * This property is injected. - */ - private String conf; - - /** - * The discovery Manager. - */ - private DiscoveryManager dm = null; - - /** - * The multicast address. - */ - private String multicastAddress = null; - - /** - * The multicast port. - */ - private String multicastPort = null; - - /** - * The ha service. - */ - private HaService haService; - - - /* (non-Javadoc) - * @see org.ow2.jonas.lib.service.AbsServiceImpl#doStart() - */ - @SuppressWarnings("unchecked") - @Override - public void doStart() throws ServiceException { - String discoveryType = JGroupsDiscoveryUtils.DISCOVERY_IS_SLAVE; - // Why copying the value instead of using it from ServerProperties ? - setMaster(getServerProperties().isMaster()); - if (getIsDiscoveryMaster()) { - discoveryType = JGroupsDiscoveryUtils.DISCOVERY_IS_MASTER; - } - - JmxService jmx = getJmxService(); - - logger.log(BasicLevel.DEBUG, - "Starting discovery " + discoveryType + " on " + jmx.getDomainName() - + "for " + jmx.getJonasServerName() + " server."); - logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - String domainName = jmx.getDomainName(); - JMXServiceURL[] connectorServerURLs = jmx.getConnectorServerURLs(); - urlsList = new ArrayList(); - for (int i = 0; i < connectorServerURLs.length; i++) { - // The connectorServerURLs may contain null - // if the list of protocols in Carol contain - // other protocols than the standard ones (JRMP, IIOP, CMI) - if (connectorServerURLs[i] != null) { - urlsList.add(connectorServerURLs[i].toString()); - } - } - String[] urls = new String[urlsList.size()]; - for (int i = 0; i < urls.length; i++) { - urls[i] = (String) urlsList.get(i); - } - try { - //init configuration - JGroupsDiscoveryUtils.init(jmx.getJonasServerName(), - jmx.getDomainName(), - discoveryType, - conf, - groupName, - jmx.getJmxServer(), - urls, - reconnectionTimeout); - JGroupsDiscoveryUtils.connectChannel(); - - } catch (Throwable e) { - throw new ServiceException(e.getMessage(), e); - } - startDomainMonitor(discoveryType); - /** - * multicast settings. - */ - try { - multicastAddress = JGroupsDiscoveryUtils.getMulticastAddress(); - multicastPort = JGroupsDiscoveryUtils.getMulticastPort(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, "Cannot retrieve multicast address. Communication protocol is not multicast \n"); - } - - // Create and register the service MBean - try { - jmx.registerMBean(this, JonasObjectName.discoveryService(domainName)); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to register discovery MBean: ", e); - } - logger.log(BasicLevel.INFO, "JGroups based Discovery service started from "+conf+" Stack file \n"); - - } - - - /** - * Initializes and starts domain monitor. - * @param discoveryType MASTER, SLAVE or CLUSTERD - * @throws ServiceException if the service cannot be started. - */ - private void startDomainMonitor(final String discoveryType) throws ServiceException { - setTtl(JGroupsDiscoveryUtils.getInstance().getTtl()); - dm = new DiscoveryManager(discoveryType); - // Start discovery manager - try { - dm.start(); - } catch (StopDiscException e) { - // Server with the same name already exists in domain. - logger.log(BasicLevel.DEBUG, - "Discovery manager failed to start due to a pre-existing" - + " server in the domain with the same name.", e); - // Discovery service had a problem. - throw new ServiceException( - "Problem when starting the Discovery Service: ", e); - } - } - - /** - * Starts JGroups discovery with a given environment and a mbean server. - * @param env Contains discovery properties - * @param mbeanSrv Contains discovery properties - * @param discoveryType MBean server of discovery host. - * @throws Exception Any - */ - @SuppressWarnings("unchecked") - public void start(final HashMap env, final MBeanServer mbeanSrv, final String discoveryType) throws Exception{ - if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD)) { - // false is already the initial value, so this just enforce that. - setMaster(false); - groupName =(String) env.get("group.name"); - conf = (String) env.get("jgroups.conf"); - String hostName = (String) env.get("host.name"); - String domainName = (String) env.get("domain.name"); - String reconnectionTimeoutStr = (String) env.get("reconnection.timeout"); - - if (reconnectionTimeoutStr == null) { - reconnectionTimeoutStr = DEFAULT_RECONNECTION_TIMEOUT; - logger.log(BasicLevel.DEBUG, " Reconnection timeout is set to default value\n"); - } - long reconnectionTimeout = new Long(reconnectionTimeoutStr); - logger.log(BasicLevel.DEBUG, - " Cluster daemon named " + hostName + " is starting discovery on domain " - + domainName + ".\n"); - String[] urls = null; - if (this.urlsList == null) { - this.urlsList = new ArrayList(); - try { - urls =(String[]) env.get("connector.urls"); - for (int i = 0; i < urls.length; i++) { - urlsList.add(urls[i]); - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, - " Exception occurred while getting connector urls for host named " - + hostName + " in JGroups discovery \n"); - throw new Exception("Exception occurred while getting connector urls for host named " - + hostName + " in JGrpups discovery", e); - } - - } - - try { - JGroupsDiscoveryUtils.init(hostName, - domainName, - JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD, - conf, - groupName, - mbeanSrv, - urls, - reconnectionTimeout); - JGroupsDiscoveryUtils.connectChannel(); - } catch (Throwable e) { - throw new ServiceException(e.getMessage(), e); - } - startDomainMonitor(discoveryType); - - }else { - logger.log(BasicLevel.DEBUG, " JOnAS instance should not use this method"); - } - } - - /* (non-Javadoc) - * @see org.ow2.jonas.lib.service.AbsServiceImpl#doStop() - */ - @Override - public void doStop() throws ServiceException { - //TODO Stop Clusterd discovery. - dm.stop(); - try { - JGroupsDiscoveryUtils.disconnectChannel(); - } catch (ChannelException e) { - throw new ServiceException(e.getMessage()); - } - JmxService jmxService = getJmxService(); - if (jmxService != null) { - jmxService.unregisterMBean(JonasObjectName.discoveryService(getDomainName())); - } - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#getDiscoveryProtocolVersion() - */ - public String getDiscoveryProtocolVersion() { - return JGroupsDiscoveryUtils.DISCOVERY_PROTOCOL_VERSION; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#getDiscoveryTtl() - */ - public String getDiscoveryTtl() { - return String.valueOf(getTtl()); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#startDiscoveryMaster() - */ - public void startDiscoveryMaster() throws JMException { - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#getJonasName() - */ - public String getJonasName() { - return JGroupsDiscoveryUtils.getInstance().getJonasName(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#getMyOn() - */ - public ObjectName getMyOn() { - return JonasObjectName.discoveryService(JGroupsDiscoveryUtils.getInstance().getDomainName()); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#getServerId() - */ - public String getServerId() { - return JGroupsDiscoveryUtils.getInstance().getServerId(); - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#getUrls() - */ - public String[] getUrls() { - return (String[])this.urlsList.toArray(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setDomainName(java.lang.String) - */ - public void setDomainName(final String domainName) { - JGroupsDiscoveryUtils.getInstance().setDomainName(domainName); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setJonasName(java.lang.String) - */ - public void setJonasName(final String jonasName) { - JGroupsDiscoveryUtils.getInstance().setJonasName(jonasName); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setMyOn(javax.management.ObjectName) - */ - public void setMyOn(final ObjectName myOn) { - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setServerId(java.lang.String) - */ - public void setServerId(final String serverId) { - JGroupsDiscoveryUtils.getInstance().setServerId(serverId); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setUrls(java.lang.String[]) - */ - public void setUrls(final String[] urls) { - this.urlsList = toArrayList(urls); - - } - /** - * Build and Arraylist from String[] containing jmx urls. - * @param urls - * @return - * @throws NullPointerException - */ - @SuppressWarnings("unchecked") - private ArrayList toArrayList(final String[] urls) throws NullPointerException { - ArrayList ret = new ArrayList(); - try { - for (int i = 0; i < urls.length; i++) { - ret.add(urls[i]); - } - } catch (NullPointerException e) { - // TODO What's that ugly thing ??? - throw new NullPointerException("NullPointerException occurred in JgroupsDiscoveryServiceImpl. Urls list must not be null in toArrayList method \n"+e); - } - return ret; - } - - /** - * @param groupName the groupName to set. Used by the injector - */ - public void setGroupName(final String groupName) { - this.groupName = groupName; - } - - /** - * @param conf The JGroups configuration file name to set. Used by the injector - */ - public void setJgroupsConf(final String conf) { - this.conf = conf; - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getListeningIp() - */ - @Override - public String getListeningIp() { - return JGroupsDiscoveryUtils.getInstance().getLocalAddress().getIpAddress().toString(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getListeningPort() - */ - @Override - public int getListeningPort() { - return JGroupsDiscoveryUtils.getInstance().getDiscPort(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getUrlsList() - */ - @SuppressWarnings("unchecked") - @Override - public ArrayList getUrlsList() { - return urlsList; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setListeningIp(java.lang.String) - */ - @Override - public void setListeningIp(final String listeningIp) { - //TODO Implement this. - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setListeningPort(int) - */ - @Override - public void setListeningPort(final int listeningPort) { - //TODO Implement this. - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setUrlsList(java.util.ArrayList) - */ - @SuppressWarnings("unchecked") - @Override - public void setUrlsList(final ArrayList urlsList) { - logger.log(BasicLevel.DEBUG, "Setting urls \n"); - this.urlsList = urlsList; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#getGreetingListeningPort() - */ - public int getGreetingListeningPort() { - logger.log(BasicLevel.DEBUG, "Getting listening port \n"); - return JGroupsDiscoveryUtils.getInstance().getDiscPort(); - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImplMBean#setTimeToLive(int) - */ - public void setTimeToLive(final int ttl) { - logger.log(BasicLevel.DEBUG, "Setting ttl: not yet implemented \n"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#getMulticastAddress() - */ - public String getMulticastAddress() { - return multicastAddress; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#getMulticastPort() - */ - public String getMulticastPort() { - return multicastPort; - } - - public void setReconnectionTimeout(final long reconnectionTimeout) { - this.reconnectionTimeout = reconnectionTimeout; - } - - - public void setHaService(final HaService haService) { - this.haService = haService; - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImplMBean.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImplMBean.java deleted file mode 100644 index ce9bac2d65..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/JgroupsDiscoveryServiceImplMBean.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups; - -import org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean; - -/** - * @author eyindanga - */ -public interface JgroupsDiscoveryServiceImplMBean extends DiscoveryServiceImplMBean{ - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/CommDiscoveryInfo.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/CommDiscoveryInfo.java deleted file mode 100644 index b9c8511f88..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/CommDiscoveryInfo.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.ow2.jonas.discovery.jgroups.comm; -/** - * JOnAS: Java(TM) Open Application Server Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General License as published by the Free Software Foundation; - * either version 2.1 of the License, or any later version. - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General License for more details. - * You should have received a copy of the GNU Lesser General License along with this library; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * -------------------------------------------------------------------------- $Id$ -------------------------------------------------------------------------- - */ - - /** - * @author eyindanga - * - */ -interface CommDiscoveryInfo { - /** - * @return - * @uml.property name="greetingListeningPort" - */ - int getGreetingListeningPort(); - - /**Gets Greeting port. - * @param greetingListeningPort Greeting port. - * @uml.property name="greetingListeningPort" - */ - void setGreetingListeningPort(final int greetingListeningPort); - - /**Gets discovery port. - * @return Discovery port. - * @uml.property name="listeningPort" - */ - int getListeningPort(); - - /**Sets discovery port. - * @param listeningPort Discovery port. - * @uml.property name="listeningPort" - */ - void setListeningPort(final int listeningPort); - - /**Gets discovery IP. - * @return Discovery IP. - * @uml.property name="listeningIp" - */ - String getListeningIp(); - /** - * Sets discovery IP. - * @param listeningIp Discovry IP. - * @uml.property name="listeningIp" - */ - void setListeningIp(final String listeningIp); - /**Sets ttl. - * @param ttl - * @uml.property name="timeToLive" - */ - void setTimeToLive(final int ttl); - /** - * @return - * @uml.property name="timeToLive" - */ - int getTimeToLive(); - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/DiscCommManager.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/DiscCommManager.java deleted file mode 100644 index ec3df759c1..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/DiscCommManager.java +++ /dev/null @@ -1,226 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.comm; -import org.jgroups.Address; -import org.jgroups.ExtendedReceiver; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.DiscoveryState; -import org.ow2.jonas.discovery.base.DuplicateServerNameException; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscMessage; -import org.ow2.jonas.discovery.jgroups.comm.api.DiscComm; -import org.ow2.jonas.discovery.jgroups.comm.exception.StopDiscException; -import org.ow2.jonas.discovery.jgroups.comm.handler.DiscCommGreetingHandler; -import org.ow2.jonas.discovery.jgroups.comm.handler.DiscCommHandlerImpl; -import org.ow2.jonas.discovery.jgroups.utils.JGroupsDiscoveryUtils; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.cluster.jgroups.IChannel; - -/** - * Assumes general communication in Master instances of JGroups discovery. - * @author eyindanga - */ -public class DiscCommManager implements DiscComm { - - /** - * Default sleep value - */ - private IChannel comChannel = null; - /** - * Current logger. - */ - private Logger logger; - /** - * To check if greeting timeout has exceeded. - */ - boolean greetingTimeOutExceeded = false; - /** - * Listening Ip. - */ - private Address sourceAddr = null; - /** - * Time when we start listening to greeting ack. - */ - private long startTime; - /** - * Listening Ip. - */ - private ExtendedReceiver discMesssageEventHandler = null; - /** - * Host type. - */ - private String discoveryType = null; - - /** - * The constructor. - * @param discoveryType - */ - public DiscCommManager(final String discoveryType) { - this.discoveryType = discoveryType; - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.comm.api.DiscComm#run() - */ - public void run() { - - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.comm.api.DiscComm#stop() - */ - public void stop() { - // send a notification message of type STOPPING - DiscEvent msg = null; - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " My name is " + JGroupsDiscoveryUtils.getInstance().getJonasName() + " Sending a STOPPING DiscEvent."); - } - msg = JGroupsDiscoveryUtils.createNotifMessage(DiscoveryState.STOPPING); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, e); - } - if (msg != null) { - try { - sendNotif(null, msg); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to stop discovery \n"); - } - } - logger.log(BasicLevel.DEBUG, " STOPPING DiscEvent successfully sent.\n"); - freeMem(); - //Thread.interrupted(); - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.comm.api.DiscComm#start() - */ - @SuppressWarnings("static-access") - public void start() throws StopDiscException { - logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - //creating the Channel from the stack file. - comChannel = JGroupsDiscoveryUtils.getInstance().getComChannel(); - if (comChannel == null) { - logger.log(BasicLevel.ERROR, "Bad initialization of JGroupsDiscoveryUtils"); - throw new StopDiscException("Bad initialization of JGroupsDiscoveryUtils"); - } - sourceAddr = comChannel.getLocalAddress(); - ExtendedReceiver greetingReceiver = new DiscCommGreetingHandler(sourceAddr); - comChannel.setReceiver(greetingReceiver); - try { - JGroupsDiscoveryUtils.send(null, - JGroupsDiscoveryUtils.objectToBytes(JGroupsDiscoveryUtils.createDiscGreeting(true))); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Unable to send message " + e); - } - try { - receiveGreetingMessage(); - } catch (DuplicateServerNameException e) { - freeMem(); - throw new StopDiscException(e.getMessage()); - } - //send discovery Event - // Create notification message containing a discovery event with state RUNNING - DiscEvent discEventMsg = null; - try { - if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD)) { - //Discovery is started by clusterd. - discEventMsg = JGroupsDiscoveryUtils.createNotifMessageForClusterd(DiscoveryState.STARTUP); - }else { - discEventMsg = JGroupsDiscoveryUtils.createNotifMessage(DiscoveryState.STARTUP); - } - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, - "DiscoveryComm: Unable to create a notification message \n", e); - } - if (discEventMsg != null) { - // Multicast the message - sendNotif(null, discEventMsg); - } - discMesssageEventHandler = new DiscCommHandlerImpl(sourceAddr, discoveryType); - //handle all the messages - comChannel.setReceiver(discMesssageEventHandler); - } - - /** Checks if time out (for receiving a greeting response) exceeded. - * @return true if time out exceeded. - */ - private boolean timeOutExceeded() { - return System.currentTimeMillis() - startTime > JGroupsDiscoveryUtils.getInstance().getGreetingAckTimeOut(); - } - - - /** - * Waits until a duplicate server name is notified by the channel listener, - * or time out exceeds. - * @throws DuplicateServerNameException Server is duplicated. - */ - @SuppressWarnings("static-access") - public void receiveGreetingMessage() throws DuplicateServerNameException { - startTime = System.currentTimeMillis(); - while (!timeOutExceeded() && !JGroupsDiscoveryUtils.duplicateExceptionName ) { - try { - Thread.currentThread().sleep(2000); - } catch (InterruptedException e) { - logger.log(BasicLevel.ERROR, "InterruptedException when handling greeting message \n"+e); - } - } - if(JGroupsDiscoveryUtils.duplicateExceptionName){ - - logger.log(BasicLevel.DEBUG, "Duplicate server name exception occurred \n"); - throw new DuplicateServerNameException(JGroupsDiscoveryUtils.getInstance().getServerId(), JGroupsDiscoveryUtils.getInstance().getJonasName(), JGroupsDiscoveryUtils.getInstance().getDomainName()); - } - //timeOutExceeded without DuplicateNameException - logger.log(BasicLevel.DEBUG, "Time out exceeded: no DuplicateNameException \n GO on starting discovery service"); - - } - /** - * Sets high cost memory fields to null - */ - private void freeMem() { - logger.log(BasicLevel.DEBUG, " Closing channel.\n"); - if ((comChannel!= null)&&(comChannel.isOpen())) { - comChannel.close(); - } - logger.log(BasicLevel.DEBUG, " Channel successfully closed.\n"); - comChannel = null; - logger = null; - sourceAddr = null; - } - - /** - * sends (multicasts) a Discovery Message to the group. - * @param msg The message to send. - */ - public void sendNotif(final Address dest, final DiscMessage msg) { - logger.log(BasicLevel.DEBUG, "Attempting to multicast a starting discovery notification\n"); - try { - JGroupsDiscoveryUtils.send(dest, JGroupsDiscoveryUtils.objectToBytes(msg)); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, e); - } - logger.log(BasicLevel.DEBUG, " Discovery notification successfully sent\n"); - } - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscComm.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscComm.java deleted file mode 100644 index 69a079fe2c..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscComm.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.discovery.jgroups.comm.api; - -import org.ow2.jonas.discovery.jgroups.DiscRunnable; - -/** - * Common interface for assuming communication in JGroups discovery. - * @author eyindanga - * - */ -public interface DiscComm extends DiscRunnable { - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscCommReceiver.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscCommReceiver.java deleted file mode 100644 index d476c784d7..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/api/DiscCommReceiver.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.comm.api; - -import org.jgroups.ExtendedReceiver; - -/** - * Communication receiver fro JGroups discovery. - * @author eyindanga - * - */ -public interface DiscCommReceiver extends ExtendedReceiver { - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/exception/StopDiscException.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/exception/StopDiscException.java deleted file mode 100644 index a16568d6bb..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/exception/StopDiscException.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.discovery.jgroups.comm.exception; - -/** - * @author eyindanga - * - */ -public class StopDiscException extends Throwable { - /** - * The serial version. - */ - private static final long serialVersionUID = 1L; - /** - * The message of the exception. - */ - private String message = null; - /** - * Constructor. - * @param message The message of the exception - */ - public StopDiscException(final String message) { - // TODO Auto-generated constructor stub - this.message = message; - } - /* (non-Javadoc) - * @see java.lang.Throwable#toString() - */ - @Override - public String toString() { - return message; - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommGreetingHandler.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommGreetingHandler.java deleted file mode 100644 index 206d30eb22..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommGreetingHandler.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -/** - * Handles DiscGreeting in Master instances of JGroups discovery. - * @author eyindanga - */ -package org.ow2.jonas.discovery.jgroups.comm.handler; - -import java.io.IOException; - -import org.jgroups.Address; -import org.jgroups.Message; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.discovery.DiscoveryState; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.jgroups.utils.Data; -import org.ow2.jonas.discovery.jgroups.utils.JGroupsDiscoveryUtils; -import org.ow2.jonas.lib.util.Log; - -/** - * @author eyindanga - * Handles discovery greetings for given Host. - * if greeting state is STARTING_UP - * that means another server has sent a greeting message with its identification (domainName, serveName, serveId) - * if greeting state is DUPLICATE_NAME - * that means another server has already started in the domain, with the same configuration. - */ -public class DiscCommGreetingHandler extends DiscCommHandlerImpl { - - - /**Constructor. - * @param hostAddress discovery address. - */ - public DiscCommGreetingHandler(final Address hostAddress) { - super(hostAddress); - // TODO Auto-generated constructor stub - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.comm.DiscCommReceiverImpl#receive(org.jgroups.Message) - */ - @Override - public void receive(final Message msg) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - } - Object objReceived = null; - Data data = null; - logger.log(BasicLevel.DEBUG, " Hi all on " +multicastAddress+ ". My name is "+ hostName+". I've received greeting message from "+msg.getSrc()); - Address senderAddress = msg.getSrc(); - - //Ignore messages received from this host. - data = (Data) msg.getObject(); - try { - objReceived = JGroupsDiscoveryUtils.bytesToObject(data); - }catch (IOException e) { - logger.log(BasicLevel.DEBUG, " IOException occured in DiscCommGreetingHandler. Unable to cast data received on network into Object. Received packet content must not be the expected one \n"+e); - }catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Following Exception occurred in DiscCommGreetingHandler. Unable to cast data received on network into Object. Received packet content must not be the expected one \n"+e); - } - if (objReceived != null) { - if (objReceived instanceof DiscGreeting) { - //received a discovery Greeting Message - DiscGreeting message = (DiscGreeting) objReceived; - try { - handleGreeting(message, senderAddress); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Exception occurend while handling Greeting: "+e); - } - - } - } - } - - /** - * Executed when Discovery greeting is received. - * @param message the message to handle. - * @param add2Reply the host to reply. - * @throws Exception any - */ - private void handleGreeting(final DiscGreeting message, final Address add2Reply) throws Exception{ - logger.log(BasicLevel.DEBUG, " My name is"+ hostName +". Handling greeting message received from "+ message.getSourceAddress()); - /** - * Server is identified by its Id. - */ - if (message.getState().equals(DiscoveryState.STARTUP)) { - if (message.getDomainName().equals(JGroupsDiscoveryUtils.getInstance().getServerId())&& message.getServerName().equals(JGroupsDiscoveryUtils.getInstance().getServerId())) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ". I will send DuplicateServerNameException to " + message.getSourceAddress() + " \n"); - DiscGreeting duplicateNameNotif = JGroupsDiscoveryUtils.createDiscGreeting(false); - JGroupsDiscoveryUtils.send(add2Reply, JGroupsDiscoveryUtils.objectToBytes(duplicateNameNotif)); - } - }else if(message.getState().equals(DiscoveryState.DUPLICATE_NAME)) { - JGroupsDiscoveryUtils.duplicateExceptionName = true; - logger.log(BasicLevel.INFO, " My name is "+ hostName +". Cannot go on starting. A server named "+message.getServerName()+" hosted on "+message.getSourceAddress()+" As already started with my configuration on domain: "+message.getDomainName()+"\n"); - logger.log(BasicLevel.INFO, " You may change my 'name' or my 'domain name' to resolve this problem.\n"); - //die - Thread.interrupted(); - } - - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommHandlerImpl.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommHandlerImpl.java deleted file mode 100644 index 38636eff60..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/comm/handler/DiscCommHandlerImpl.java +++ /dev/null @@ -1,471 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:DiscCommHandlerImpl.java 12003 2007-11-16 17:27:24Z eyindanga $ - * -------------------------------------------------------------------------- - */ -/** - * Handles all discovery communication but Discovery greetings in JGroups discovery. - * @author eyindanga - */ -package org.ow2.jonas.discovery.jgroups.comm.handler; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.UnknownHostException; - -import org.jgroups.Address; -import org.jgroups.ChannelClosedException; -import org.jgroups.Message; -import org.jgroups.View; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.DiscoveryState; -import org.ow2.jonas.discovery.base.comm.ClusterdDiscoveryEvent; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.base.comm.DiscMessage; -import org.ow2.jonas.discovery.jgroups.comm.api.DiscCommReceiver; -import org.ow2.jonas.discovery.jgroups.utils.Data; -import org.ow2.jonas.discovery.jgroups.utils.JGroupsDiscoveryUtils; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.util.Log; - -/** - * @author eyindanga - */ -public class DiscCommHandlerImpl implements DiscCommReceiver { - /** - *The logger. - */ - protected Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * The domain monitor. It will handle DiscEvent for discovery - * master. - */ - private DomainMonitor domainMonitor = null; - - /** - * Discovery address(host address). - */ - private Address hostAddress = null; - - /** - * A discovery message. - */ - private DiscMessage discMsg = null; - - /** - * Host type: MASTER, SLAVE, CLUSTERD. - */ - public String discoveryType = JGroupsDiscoveryUtils.DISCOVERY_IS_SLAVE; - - /** - * The host name. - */ - protected String hostName = null; - - /** - * The host name. - */ - protected String multicastAddress = null; - - /** - * Contructor. - * @param hostAddress IP address of discovery. - * @param discoveryType Host type. - */ - public DiscCommHandlerImpl(final Address hostAddress, final String discoveryType) { - this.hostAddress = hostAddress; - domainMonitor = DomainMonitor.getInstance(); - this.discoveryType = discoveryType; - multicastAddress = null; - hostName = JGroupsDiscoveryUtils.getInstance().getJonasName(); - try { - multicastAddress = JGroupsDiscoveryUtils.getMulticastAddress().toString(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, "My name is " + hostName + ". Unable to get multicast address because \n" + e1); - } - } - - /** - * @param hostAddress Discovery IP. - */ - public DiscCommHandlerImpl(final Address hostAddress) { - this.hostAddress = hostAddress; - multicastAddress = null; - hostName = JGroupsDiscoveryUtils.getInstance().getJonasName(); - try { - multicastAddress = JGroupsDiscoveryUtils.getMulticastAddress().toString(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, "My name is " + hostName + ". Unable to get multicast address because \n" + e1); - } - } - - /* - * (non-Javadoc) - * @see org.jgroups.MessageListener#getState() - */ - public byte[] getState() { - return null; - } - - /* - * (non-Javadoc) - * @see org.jgroups.MessageListener#receive(org.jgroups.Message) - */ - public void receive(final Message msg) { - Object objReceived = null; - Data data = null; - - Address senderAddress = null; - try { - senderAddress = msg.getSrc(); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Exception occured in DiscCommHandlerImpl. Unable to get sender for received message." - + e); - } - try { - data = (Data) msg.getObject(); - objReceived = JGroupsDiscoveryUtils.bytesToObject(data); - if (objReceived != null) { - if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_MASTER)) { - // discovery is started by master host - if (objReceived instanceof ClusterdDiscoveryEvent) { - ClusterdDiscoveryEvent event = (ClusterdDiscoveryEvent) objReceived; - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ".I'm MASTER. A cluster daemon named " - + event.getServerName() + " hosted on " + msg.getSrc() + " is telling me its state is: " - + event.getState()); - logger.log(BasicLevel.DEBUG, " Notifying the domain monitor. \n"); - domainMonitor.discoveryNotificationForClusterd(event); - } else if (objReceived instanceof DiscEvent) { - DiscEvent event = (DiscEvent) objReceived; - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ".I'm MASTER. A server named " - + event.getServerName() + " hosted on " + msg.getSrc() + " is telling me its state is: " - + event.getState()); - logger.log(BasicLevel.DEBUG, " Notifying the domain monitor. \n"); - domainMonitor.discoveryNotification(event); - - } else if (objReceived instanceof DiscGreeting) { - // received a message from a master - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm MASTER. Handling a discovery greeting from " + msg.getSrc() + " \n"); - handleGreeting((DiscGreeting) objReceived, senderAddress); - } else if (objReceived instanceof DiscMessage) { - DiscMessage mess = (DiscMessage) objReceived; - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm MASTER. Handling a discovery message from " + msg.getSrc() + " \n"); - try { - JGroupsDiscoveryUtils.send(senderAddress, JGroupsDiscoveryUtils.objectToBytes(mess)); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to send message\n"); - } - - } else { - // received unknown message - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm MASTER. Received an unknown message from " + msg.getSrc() + " \n"); - } - - } else if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_SLAVE)) { - // discovery is started by slave host - if (objReceived instanceof DiscEvent) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ".I'm a SLAVE. \n"); - handleEvent((DiscEvent) objReceived, senderAddress); - - } else if (objReceived instanceof DiscGreeting) { - // received a message from a master - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm SLAVE. Handling a discovery greeting from " + msg.getSrc() + " \n"); - handleGreeting((DiscGreeting) objReceived, senderAddress); - } else if (objReceived instanceof DiscMessage) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm SLAVE. Handling a discovery message from " + msg.getSrc() + " \n"); - try { - JGroupsDiscoveryUtils.send(senderAddress, (DiscMessage) objReceived); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to send message\n"); - } - } else { - // received unknown message - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm SLAVE. Received an unknown message from " + msg.getSrc() + " \n"); - } - } else if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD)) { - // discovery is started by clusterd - if (objReceived instanceof DiscEvent) { - DiscEvent event = (DiscEvent) objReceived; - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ".I'm CLUSTER DAEMON. A server named " - + event.getServerName() + " hosted on " + msg.getSrc() + " is telling me its state is: " - + event.getState()); - handleEvent((DiscEvent) objReceived, senderAddress); - } else if (objReceived instanceof DiscGreeting) { - // received a message from a master - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm CLUSTER DAEMON. Handling a disovery greeting from " + msg.getSrc() + " \n"); - handleGreeting((DiscGreeting) objReceived, senderAddress); - } else if (objReceived instanceof DiscMessage) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName - + ". I'm CLUSTER DAEMON. Handling a disovery message from " + msg.getSrc() + " \n"); - try { - JGroupsDiscoveryUtils.send(senderAddress, (DiscMessage) objReceived); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to send message\n"); - } - - } else { - // received unknown message - logger.log(BasicLevel.DEBUG, JGroupsDiscoveryUtils.DISCOVERY_IS_SLAVE + " " + this.hostAddress - + " Received unknown message type from host " + msg.getSrc()); - } - - } else { - logger.log(BasicLevel.DEBUG, "Unknown discovery type " + this.hostAddress + " Received message from host " - + msg.getSrc()); - } - } else { - logger.log(BasicLevel.DEBUG, "Object received from" + msg.getSrc() + " Must not be null"); - } - } catch (IOException e) { - logger - .log( - BasicLevel.DEBUG, - " IOException occured in DiscCommReceiver. Unable to cast data received on network into Object. Received packet content must not be the expected one\n" - + e); - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.DEBUG, - " ClassNotFoundException occured in DiscCommReceiver. Unable to cast data received on network into Object.\n" - + e); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Following exception occurred \n" + e); - } - - } - - /** - * Handles DiscEvent for non master hosts. - * @param discEvent - */ - private void handleEvent(final DiscEvent discEvent, final Address add2Reply) { - if (discEvent.getState().equalsIgnoreCase(DiscoveryState.STARTUP) && discEvent.isDiscoveryMaster()) { - logger.log(BasicLevel.DEBUG, " Handling discovery event received from starting master hosted on " - + discEvent.getSourceAddress() + " on port " + discEvent.getSourcePort() + "\n"); - // send discovery Event - // Create notification message containing a discovery event with - // state RUNNING - DiscEvent discEventMsg = null; - try { - if (discoveryType.equals(JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD)) { - // Discovery is started by clusterd. - discEventMsg = JGroupsDiscoveryUtils.createNotifMessageForClusterd(DiscoveryState.RUNNING); - } else { - discEventMsg = JGroupsDiscoveryUtils.createNotifMessage(DiscoveryState.RUNNING); - } - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "DiscoveryComm: Unable to create a notification message \n", e); - } - if (discEventMsg != null) { - // Multicast the message - sendNotif(add2Reply, discEventMsg); - } - - } - - } - - /** - * Sends a Discovery Message to the group. - * @param dest - * @param msg - */ - public void sendNotif(final Address dest, final DiscMessage msg) { - try { - JGroupsDiscoveryUtils.send(dest, JGroupsDiscoveryUtils.objectToBytes(msg)); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, e); - } - // TODO Auto-generated method stub - } - - /* - * (non-Javadoc) - * @see org.jgroups.MessageListener#setState(byte[]) - */ - public void setState(final byte[] arg0) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.MembershipListener#block() - */ - public void block() { - // TODO Auto-generated method stub - - } - - /** - * Defines actions to perform when a group member is suspected. - * @param arg0 - */ - public void suspect(final Address arg0) { - if (discMsg == null) { - discMsg = new DiscMessage(JGroupsDiscoveryUtils.getInstance().getDiscIp(), JGroupsDiscoveryUtils.getInstance() - .getDiscPort()); - } - try { - logger.log(BasicLevel.DEBUG, " Sending 'are-you-alive' message to suspect member " + arg0); - JGroupsDiscoveryUtils.send(arg0, JGroupsDiscoveryUtils.objectToBytes(discMsg)); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable To send 'are-you-alive' message to " + arg0, e); - } - } - - /* - * (non-Javadoc) - * @see org.jgroups.MembershipListener#viewAccepted(org.jgroups.View) - */ - public void viewAccepted(final View arg0) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#getState(java.lang.String) - */ - public byte[] getState(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#getState(java.io.OutputStream) - */ - public void getState(final OutputStream arg0) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#getState(java.lang.String, - * java.io.OutputStream) - */ - public void getState(final String arg0, final OutputStream arg1) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#setState(java.io.InputStream) - */ - public void setState(final InputStream arg0) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#setState(java.lang.String, - * byte[]) - */ - public void setState(final String arg0, final byte[] arg1) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMessageListener#setState(java.lang.String, - * java.io.InputStream) - */ - public void setState(final String arg0, final InputStream arg1) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * @see org.jgroups.ExtendedMembershipListener#unblock() - */ - public void unblock() { - // TODO Auto-generated method stub - - } - - /** - * @return the hostAddress - */ - public Address getHostAddress() { - return hostAddress; - } - - /** - * @param hostAddress the hostAddress to set - */ - public void setHostAddress(final Address hostAddress) { - this.hostAddress = hostAddress; - } - - /** - * Executed when Discovery greeting is received - * @param message - * @param add2Reply the host to reply - */ - private void handleGreeting(final DiscGreeting message, final Address add2Reply) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ". I'm " + JGroupsDiscoveryUtils.getInstance().getDiscType() - + ". Handling discovery greeting from a server named " + message.getServerName() + " hosted on " - + message.getSourceAddress() + "\n"); - try { - if (message.getState().equals(DiscoveryState.STARTUP)) { - if (message.getDomainName().equals(JGroupsDiscoveryUtils.getInstance().getDomainName()) - && message.getServerName().equals(JGroupsDiscoveryUtils.getInstance().getJonasName())) { - logger.log(BasicLevel.DEBUG, " My name is " + hostName + ". I will send DuplicateServerNameException to " - + message.getSourceAddress() + " \n"); - DiscGreeting duplicateNameNotif = JGroupsDiscoveryUtils.createDiscGreeting(false); - JGroupsDiscoveryUtils.send(add2Reply, JGroupsDiscoveryUtils.objectToBytes(duplicateNameNotif)); - } - } else if (message.getState().equals(DiscoveryState.DUPLICATE_NAME)) { - logger.log(BasicLevel.DEBUG, " Received duplicate name notification from " + message.getSourceAddress() - + " Named: " + message.getServerName() + " on domain:" + message.getDomainName() + " with serverId: " - + message.getServerId() + "\n"); - logger.log(BasicLevel.DEBUG, " But Time out for (receiving)greeting messages has already expired \n"); - } - } catch (ChannelClosedException e) { - logger.log(BasicLevel.DEBUG, " Unable to send Greeting response to host " + message.getSourceAddress() - + ". JGroups Channel is closed\n" + e); - } catch (UnknownHostException e) { - logger.log(BasicLevel.DEBUG, " Unable to send Greeting response to host " + message.getSourceAddress() - + ". Host is unknown \n" + e); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to send Greeting response to host " + message.getSourceAddress() - + ". Following exception occurred \n" + e); - } - - } - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/manager/DiscoveryManager.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/manager/DiscoveryManager.java deleted file mode 100644 index 94c1c9f659..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/manager/DiscoveryManager.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.manager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.jgroups.comm.DiscCommManager; -import org.ow2.jonas.discovery.jgroups.comm.api.DiscComm; -import org.ow2.jonas.discovery.jgroups.comm.exception.StopDiscException; -import org.ow2.jonas.lib.util.Log; - - - -/** - * @author eyindanga - */ -public class DiscoveryManager { - /** - * Current logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * Communication manager. - */ - private DiscComm discoveryComm; - /** - * Current discovery type. - */ - private String discoverType = null; - /** - * Constructor. - * @param discoveryType Host type. - */ - public DiscoveryManager(final String discoveryType) { - this.discoverType = discoveryType; - } - /** - * Free the memory. - */ - private void freeMem(){ - discoveryComm = null; - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.jgroups.DiscRunnable#stop() - */ - public void stop() { - logger.log(BasicLevel.DEBUG, "Stopping discovery manager"); - if (discoveryComm != null) { - discoveryComm.stop(); - freeMem(); - } - logger.log(BasicLevel.DEBUG, "Discovery manager stopped successfully"); - } - - /** - * Starts discovery communication. - * @throws StopDiscException Discovery will stop. - */ - public void start() throws StopDiscException { - logger.log(BasicLevel.DEBUG, "Starting discovery manager"); - //discoverType would be: MASTER,SLAVE or CLUSTERD - discoveryComm = new DiscCommManager(discoverType); - try { - discoveryComm.start(); - }catch (StopDiscException e) { - freeMem(); - throw e; - } - logger.log(BasicLevel.DEBUG, "Discovery manager started successfully"); - - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/Data.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/Data.java deleted file mode 100644 index 54b8864dee..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/Data.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.discovery.jgroups.utils; - -import java.io.Serializable; - -/** - * @author eyindanga - * - */ -public class Data implements Serializable { - /** - * Constant for DiscMessage objects type. - */ - public static int DISC_MESSAGE = 0; - /** - * Constant for DiscEvent objects type. - */ - public static int DISC_EVENT = 1; - /** - * Constant for DiscGreeting objects type. - */ - public static int DISC_GREETING = 2; - private static final long serialVersionUID = 9193522684840201133L; - - int type = 0; - Serializable payload = null; - - - public Data(int type, Serializable payload) { - this.type = type; - this.payload = payload; - } - - - /** - * @return the payload - */ - public Serializable getPayload() { - return payload; - } - - - /** - * @param payload the payload to set - */ - public void setPayload(Serializable payload) { - this.payload = payload; - } - - - /** - * @return the type - */ - public int getType() { - return type; - } - - - /** - * @param type the type to set - */ - public void setType(int type) { - this.type = type; - } - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/DiscoveryUtils.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/DiscoveryUtils.java deleted file mode 100644 index bf5371397c..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/DiscoveryUtils.java +++ /dev/null @@ -1,303 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.utils; - -import java.util.Map; - -import org.jgroups.Address; -import org.jgroups.Event; -import org.jgroups.conf.ProtocolStackConfigurator; -import org.jgroups.stack.IpAddress; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.cluster.jgroups.IChannel; - -public class DiscoveryUtils { - private static final Object UDP_PROTOCOL = "UDP"; - /** - * Current discovery type. - */ - private String discType = JGroupsDiscoveryUtils.DISCOVERY_IS_SLAVE; - /** - * JGroups stack configuration. - */ - private ProtocolStackConfigurator stackConfigurator = null; - /** - * @uml.property name="jonasName" - */ - private String jonasName = JGroupsDiscoveryUtils.DEFAULT_JONAS_NAME; - /** - * @uml.property name="domainName" - */ - private String domainName = JGroupsDiscoveryUtils.DEFAULT_DOMAIN_NAME; - /** - * @uml.property name="serverId" - */ - private String serverId = JGroupsDiscoveryUtils.DEFAULT_SERVER_ID; - /** - * Current logger. - */ - private Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - /** - * Current greeting timeout. - */ - private Integer greetingAckTimeOut = new Integer(JGroupsDiscoveryUtils.DISCOVERY_GREETING_TIMEOUT_DEFAULT); - - /** - * Current discovery channel. - */ - private IChannel comChannel = null; - /** - * Current name of stack communication protocol. - */ - public String commProtoName = null; - /** - * Current configuration for communication protocol. - */ - private Map commProtoProperties = null; - /** - * Current jmx urls of discovery host. - */ - private String[] urls = null; - /** - * Current Ip ttl. - */ - private Integer ttl = new Integer(JGroupsDiscoveryUtils.DISCOVERY_GREETING_TIMEOUT_DEFAULT); - /** - * True if communication protol is "multicast". - */ - private boolean isMulticastDiscovery; - /** - * The JGroups stack configuration file. - */ - public String configurationFile = JGroupsDiscoveryUtils.DEFAULT_STACK_FILENAME; - /** - * @uml.property name="groupName" - */ - public String groupName = JGroupsDiscoveryUtils.DEF_GROUP_NAME; - /** - * @return the discType - */ - public String getDiscType() { - return discType; - } - /** - * @param discType the discType to set - */ - public void setDiscType(final String discType) { - this.discType = discType; - } - /** - * @return the stack configurator. - */ - public ProtocolStackConfigurator getStackConfigurator() { - return stackConfigurator; - } - /** - * @param stackconfigurator the stackconfigurator to set - */ - public void setStackConfigurator(final ProtocolStackConfigurator stackconfigurator) { - this.stackConfigurator = stackconfigurator; - } - /** - * @return the jonasName - */ - public String getJonasName() { - return jonasName; - } - /** - * @param jonasName the jonasName to set - */ - public void setJonasName(final String jonasName) { - this.jonasName = jonasName; - } - /** - * @return the domainName - */ - public String getDomainName() { - return domainName; - } - /** - * @param domainName the domainName to set - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - /** - * @return the serverId - */ - public String getServerId() { - return serverId; - } - /** - * @param serverId the serverId to set - */ - public void setServerId(final String serverId) { - this.serverId = serverId; - } - /** - * @return the discPort - */ - synchronized - public Integer getDiscPort() { - return getLocalAddress().getPort(); - } - /** - * @return the logger - */ - public Logger getLogger() { - return logger; - } - /** - * @param logger the logger to set - */ - public void setLogger(final Logger logger) { - this.logger = logger; - } - /** - * @return the greetingAckTimeOut - */ - public Integer getGreetingAckTimeOut() { - return greetingAckTimeOut; - } - /** - * @param greetingAckTimeOut the greetingAckTimeOut to set - */ - public void setGreetingAckTimeOut(final Integer greetingAckTimeOut) { - this.greetingAckTimeOut = greetingAckTimeOut; - } - /** - * @return the comChannel - */ - public IChannel getComChannel() { - return comChannel; - } - /** - * @param comChannel the comChannel to set - */ - public void setComChannel(final IChannel comChannel) { - this.comChannel = comChannel; - } - /** - * @return the commProtoName - */ - public String getCommProtoName() { - return commProtoName; - } - /** - * @param commProtoName the commProtoName to set - */ - public void setCommProtoName(final String commProtoName) { - this.commProtoName = commProtoName; - } - /** - * @return the commProtoParams - */ - public Map getCommProtoProperties() { - return commProtoProperties; - } - /** - * @param commProtoProperties the commProtoParams to set - */ - public void setCommProtoProperties(final Map commProtoProperties) { - this.commProtoProperties = commProtoProperties; - } - /** - * @return the urls - */ - public String[] getUrls() { - return urls; - } - /** - * @param urls the urls to set - */ - public void setUrls(final String[] urls) { - this.urls = urls; - } - /** - * @return the localAddress - */ - public synchronized IpAddress getLocalAddress() { - Address address = comChannel.getLocalAddress(); - if (address != null) { - address = (Address) comChannel.downcall(new Event(Event.GET_PHYSICAL_ADDRESS, address)); - } - return (IpAddress) address; - } - /** - * @return the ttl - */ - public Integer getTtl() { - return ttl; - } - /** - * @param ttl the ttl to set - */ - public void setTtl(final Integer ttl) { - this.ttl = ttl; - } - public boolean isMulticast() { - // TODO Auto-generated method stub - return isMulticastDiscovery; - } - /**Checks if discovery is multicast. - * @return the isMulticastDiscovery - */ - public boolean isMulticastDiscovery() { - return this.commProtoName.equals(UDP_PROTOCOL); - } - /** - * Gets IP address of discovery. - * @return Discovery IP - */ - public String getDiscIp() { - return ((IpAddress)comChannel.getLocalAddress()).getIpAddress().toString(); - } - /** - * @return the conFile. - */ - public String getConfigurationFile() { - return configurationFile; - } - /** - * @param conFile the conFile to set. - */ - public void setConfigurationFile(final String conFile) { - this.configurationFile = conFile; - } - /** - * @return the groupName. - */ - public String getGroupName() { - return groupName; - } - /** - * @param groupName the groupName to set. - */ - public void setGroupName(final String groupName) { - this.groupName = groupName; - } - -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/IDiscoveryChannel.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/IDiscoveryChannel.java deleted file mode 100644 index b1c3dbfde5..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/IDiscoveryChannel.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.utils; - -import java.io.Serializable; - -import org.jgroups.Address; -import org.jgroups.ChannelClosedException; -import org.jgroups.ChannelNotConnectedException; -import org.jgroups.JChannel; -import org.jgroups.Message; - -public interface IDiscoveryChannel { - /** - * Sends a message through the protocol stack. - * Implements the Transport interface. - * - * @param msg the message to be sent through the protocol stack, - * the destination of the message is specified inside the message itself - * @exception ChannelNotConnectedException - * @exception ChannelClosedException - */ - public void send(Message msg) throws ChannelNotConnectedException, ChannelClosedException; - - - /** - * creates a new message with the destination address, and the source address - * and the object as the message value - * @param dst - the destination address of the message, null for all members - * @param src - the source address of the message - * @param obj - the value of the message - * @exception ChannelNotConnectedException - * @exception ChannelClosedException - * @see JChannel#send - */ - public void send(Address dst, Address src, Serializable obj) throws ChannelNotConnectedException, ChannelClosedException; -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/JGroupsDiscoveryUtils.java b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/JGroupsDiscoveryUtils.java deleted file mode 100644 index 876bc29e97..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/java/org/ow2/jonas/discovery/jgroups/utils/JGroupsDiscoveryUtils.java +++ /dev/null @@ -1,572 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007,2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.jgroups.utils; - -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Proxy; -import java.net.URL; -import java.net.UnknownHostException; -import java.util.List; -import java.util.Map; - -import javax.management.MBeanServer; - -import org.jgroups.Address; -import org.jgroups.Channel; -import org.jgroups.ChannelClosedException; -import org.jgroups.ChannelException; -import org.jgroups.conf.ConfiguratorFactory; -import org.jgroups.conf.ProtocolConfiguration; -import org.jgroups.conf.ProtocolStackConfigurator; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.DiscoveryState; -import org.ow2.jonas.discovery.base.DiscHelper; -import org.ow2.jonas.discovery.base.comm.ClusterdDiscoveryEvent; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.Log; -import org.ow2.util.cluster.jgroups.ConnectionManager; -import org.ow2.util.cluster.jgroups.IChannel; -import org.ow2.util.cluster.jgroups.JChannelWrapper; - - -public class JGroupsDiscoveryUtils extends DiscHelper { - - /** - * Current logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - /** - * Used by greeting receiver and communication manager. - * to handle duplicate server name exception - */ - public static boolean duplicateExceptionName = false; - - /** - * Group name property. - */ - @SuppressWarnings("unused") - private static final String DEFAULT_GROUP_NAME_KEY = "jonas.discovery.jgroups.group.name"; - /** - * default discovery group name. - */ - private static final String DAFAULT_GROUP_NAME = "jgroups-discovery"; - /** - * default Jgroups discovery configuration file property name. - */ - @SuppressWarnings("unused") - public static final String JGROUPS_CONFIG_PROPERTY = "jonas.service.discovery.jgroups.conf"; - /** - * Default file name for the stack. - */ - public static final String DEFAULT_STACK_FILENAME = "jgroups-discovery.xml"; - /** - * The jonas name. - */ - public static final String DEFAULT_JONAS_NAME = "jonas"; - /** - * The default domain name. - */ - public static final String DEFAULT_DOMAIN_NAME = "jonas"; - /** - * The default server Id. - */ - public static final String DEFAULT_SERVER_ID = "jonas"; - /** - * The default greeting port name. - */ - public static final String DISCOVERY_GREETING_PORT_DEFAULT = "9080"; - /** - * The default greeting Ip. - */ - public static final String DISCOVERY_GREETING_IP = "localhost"; - /** - * The JGroups discovery version. - */ - public static final String DISCOVERY_PROTOCOL_VERSION = "1.3"; - /** - * The default JGroups discovery timeout. - */ - public static final String DISCOVERY_GREETING_TIMEOUT_DEFAULT = "5000"; - /** - * The default key for discovery master started by JOnAS server. - */ - public static final String DISCOVERY_IS_MASTER = "MASTER"; - /** - * The default key for discovery slave started by JOnAS server. - */ - public static final String DISCOVERY_IS_SLAVE = "SLAVE"; - /** - * The default key for discovery master started by clusterd. - */ - public static final String DISCOVERY_IS_CLUSTERD = "CLUSTERD"; - /** - * The default key for failure detection protocol of JGroups stack. - */ - private static final String FD_PROTOCOL = "FD"; - /** - * The default key for failure detection timeout of JGroups stack. - */ - private static final String FD_TIMEOUT = "timeout"; - /** - * The default key for Ip ttl of JGroups stack. - */ - private static final String COMM_TTL = "ip_ttl"; - /** - * The default key for multicast address of JGroups stack. - */ - private static final String COMM_MCAST_ADDRESS = "mcast_addr"; - /** - * The default key for multicast port of JGroups stack. - */ - private static final String COMM_MCAST_PORT = "mcast_port"; - /** - * Default group name for discovery channel. - */ - public static final String DEF_GROUP_NAME = "JGroupsDiscovery"; - - /** - * Channel wrapper. - */ - private IChannel channel = null; - /** - * Unique instance of discovery utils. - */ - private static DiscoveryUtils unique = null; - /** - * Gets the channel - * @return the channel. - */ - public IChannel getChannel() { - return channel; - } - - /** - * Sets the channel - * @param channel the channel to set - */ - public void setChannel(final IChannel channel) { - this.channel = channel; - } - /** - * Private connstructor. - */ - private JGroupsDiscoveryUtils() { - } - - - /** - * Initializes properties of the discovery(groupname, stackfile, channel...). - * @param srvName The host name of discovery. - * @param domain The domain name of discovery's host. - * @param discoveryType The discovery type. - * @param confFileName The file name of JGroups stack. - * @param discoveryGroup The group of JGroups discovery (channel connection) - * @param beanServer The Mbean server of discovery's host. - * @param connUrls Connectors urls of discovery hosts. - */ - public static void init(final String srvName, final String domain, final String discoveryType, final String confFileName, final String discoveryGroup, final MBeanServer beanServer, final String[] connUrls, final long reconnectionTimeout) throws Throwable { - try { - unique = (unique == null) ? new DiscoveryUtils() : unique; - unique.setGroupName(discoveryGroup); - unique = new DiscoveryUtils(); - unique.setUrls(connUrls); - unique.setJonasName(srvName); - unique.setDomainName(domain); - /** - * url is the best Id. - */ - unique.setServerId(connUrls.toString()); - unique.setDiscType(discoveryType); - URL confile = null; - //create the JChannel - try { - //get the communication protocol config - File conf = new File(JProp.getJonasBase(), "conf"); - confile = new File(conf, confFileName).toURL(); - if (confile == null) { - logger.log(BasicLevel.DEBUG, " Unable to get JGroups stack file named: " + confFileName + " from JONAS_BASE "+ JProp.getJonasBase()+" using JProp "); - confile = ClassLoader.getSystemClassLoader().getResource(confFileName); - if (confile == null) { - logger.log(BasicLevel.DEBUG, "Unable to get JGroups stack file named: " + confFileName + " from class loader: " + ClassLoader.getSystemClassLoader().getClass()); - confile = Thread.currentThread().getContextClassLoader().getResource(confFileName); - if (confile == null) { - logger.log(BasicLevel.DEBUG, " Unable to get JGroups stack file named: " + confFileName + " from class loader: " + Thread.currentThread().getContextClassLoader().getClass()); - logger.log(BasicLevel.DEBUG, " Load default stack file : " + DEFAULT_STACK_FILENAME + " with class loader " + JGroupsDiscoveryUtils.class.getClassLoader().getClass().getName()); - confile = JGroupsDiscoveryUtils.class.getResource(unique.getConfigurationFile()); - logger.log(BasicLevel.INFO, "Default JGroups stack file retrieved successfully"); - }else { - logger.log(BasicLevel.DEBUG, " JGroups stack file named: " + confFileName + " successfully retrieved from class loader: "+Thread.currentThread().getContextClassLoader().getClass()); - } - }else { - logger.log(BasicLevel.DEBUG, " JGroups stack file named: " + confFileName + " successfully retrieved from class loader: "+ClassLoader.getSystemClassLoader().getClass()); - } - - }else { - logger.log(BasicLevel.DEBUG, "JGroups stack file named: " + confFileName + " successfully retrieved from JONAS_BASE "+ JProp.getJonasBase()+" using JProp "); - } - unique.setConfigurationFile(confile.getFile()); - } catch (Throwable e1) { - e1.printStackTrace(); - logger.log(BasicLevel.ERROR, "Unable to get communication protocol configuration: ", e1); - throw e1; - } - try { - unique.setStackConfigurator(ConfiguratorFactory.getStackConfigurator(unique.getConfigurationFile())); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, " Unable to get JGroups stack configuration: \n", e); - throw e; - } - - try { - IChannel channel = new JChannelWrapper(unique.getStackConfigurator().getProtocolStackString()); - // Avoid our own messages - channel.setOpt(Channel.LOCAL, false); - // Set the auto-reconnect option for enabling a node to leave and re-join the cluster - channel.setOpt(Channel.AUTO_RECONNECT, true); - - InvocationHandler invocationHandler = - new ConnectionManager(reconnectionTimeout, channel, IDiscoveryChannel.class); - channel.addChannelListener((ConnectionManager)invocationHandler); - IChannel chan = (IChannel)Proxy.newProxyInstance( - IChannel.class.getClassLoader(), new Class[] {IChannel.class}, invocationHandler); - unique.setComChannel(chan); - logger.log(BasicLevel.DEBUG, " JGroups channel created from file " + confFileName + " successfully connected: \n"); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, " Unable to connect JGroups channel: \n", e); - throw e; - } - - - try { - getCommProtocolConf(unique.getStackConfigurator()); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, " Unable to get communication protocol \n", e); - throw e; - } - try { - //gets greeting ack timeout - unique.setGreetingAckTimeOut(new Integer((String)getParamValueForProtoParam(getProtocolParam(unique.getStackConfigurator(), FD_PROTOCOL), FD_TIMEOUT))); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to get greeting ack timeout from JGroups configuration file \n"); - logger.log(BasicLevel.INFO, " Greeting ack timeout is set to default value :" + DISCOVERY_GREETING_TIMEOUT_DEFAULT); - } - try { - unique.setTtl(new Integer((getParamValueForCommParam(COMM_TTL)))); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, " Unable to get IP ttl from stack configuration \n"); - logger.log(BasicLevel.INFO, " IP ttl is set to " + unique.getTtl()); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, " Cannot get file named " + DEFAULT_STACK_FILENAME + " in current environment"); - return; - } - } - /** - * Connect the channel. - * @throws ChannelException - */ - public static void connectChannel() throws ChannelException { - unique.getComChannel().connect(unique.getGroupName()); - } - - /** - * dDsconnect the channel. - * @throws ChannelException - */ - public static void disconnectChannel() throws ChannelException { - unique.getComChannel().close(); - } - /** - * Create a discovery greeting message. - * @param startup - - * true: means that is a greeting message at the point of start - * up of the discovery service. false: means this is a reply to - * a previous greeting message. - * @return a Discovery Greeting message. - * @throws UnknownHostException If host is unknown - */ - public static DiscGreeting createDiscGreeting(final boolean startup) throws UnknownHostException { - return new DiscGreeting(unique.getComChannel().getLocalAddress().toString(), unique.getDiscPort(), - unique.getJonasName(), unique.getDomainName(), startup, unique.getServerId()); - } - - /** - * Gets configuration for communication protocol(UDP || TCP). - * @param stackconfigurator The stack configuration. - * @throws Exception Any. - */ - private static void getCommProtocolConf(final ProtocolStackConfigurator stackconfigurator) throws Exception { - List proto = stackconfigurator.getProtocolStack(); - try { - boolean stop = false; - int i = 0; - while (!stop && i < proto.size()) { - String protoName = proto.get(i).getProtocolName(); - if (protoName.equals("UDP") || protoName.equals("TCP")) { - stop = true; - unique.setCommProtoName(protoName); - // hashMap containing configuration for communication proto - unique.setCommProtoProperties(proto.get(i).getProperties()); - } else { - i++; - } - } - - } catch (Exception e) { - throw new Exception("Unable to get value for parameter. Current stack is: " + stackconfigurator - + " Following exceptions occurred " + e); - } - } - /** - * Gets parameters for given stack protocol. - * @param stackconfigurator The JGroups stack configuration - * @param protocolName The name of the protocol to get. - * @return Given protol parameters. - * @throws Exception Any. - */ - private static Map getProtocolParam(final ProtocolStackConfigurator stackconfigurator, final String protocolName) throws Exception { - List proto = stackconfigurator.getProtocolStack(); - Map protoConf = null; - try { - boolean stop = false; - int i = 0; - while(!stop && i < proto.size()){ - String protoName = proto.get(i).getProtocolName(); - if (protoName.equals(protocolName)) { - stop = true; - //hashMap containing configuration for communication proto - protoConf = proto.get(i).getProperties(); - }else { - i++; - } - } - if (!stop) { - throw new Exception("The " + protocolName + " protocol is not defined in jgroups stack. Current stack configuration is: "+stackconfigurator); - } - - } catch (Exception e) { - throw new Exception("Unable to get configuration for " + protocolName + " protocol. Current stack is " + stackconfigurator + ". Following exception occurred "+e); - } - return protoConf; - } - - /** - * Gets the value of given communication protocol parameter. Communication protol is more often used than the others. - * That makes this method very usefull. - * @param paramName The key of communication parameter. - * @return The value for given parameter. - * @throws Exception Any. - */ - private static String getParamValueForCommParam(final String paramName) throws Exception { - String ret = unique.getCommProtoProperties().get(paramName); - if (ret == null) { - logger.log(BasicLevel.DEBUG, "Cannot get value for communication parameter " + paramName); - throw new Exception("Cannot get value for communication parameter " + paramName); - } - return ret; - } - - /** - * Gets Value for a given parameter of JGroups stack protocol. - * @param protoConf Configuration of the given protocol - * @param paramName Get the value for this parameter. - * @throws Exception An exception, if the parameter is not found in given configuration. - */ - private static Object getParamValueForProtoParam(final Map protoConf, final String paramName ) throws Exception { - String ret = protoConf.get(paramName); - if ( ret == null) { - logger.log(BasicLevel.DEBUG, " Can't get value for communication parameter " + paramName); - throw new Exception(" Can't get value for parameter " + paramName); - } - return ret; - } - - /** - * Convert network datas into a discovey communication object. - * @param data - * @return DiscGreeting || DiscMessage || DiscEvent - * @throws IOException - * @throws ClassNotFoundException - */ - public static Object bytesToObject(final Data data) throws IOException, ClassNotFoundException { - if (data.getType() == Data.DISC_GREETING) { - return data.getPayload(); - } else if (data.getType() == Data.DISC_EVENT) { - return data.getPayload(); - - } else if (data.getType() == Data.DISC_MESSAGE) { - return data.getPayload(); - } else{ - logger.log(BasicLevel.DEBUG, "Undefined type of message received by JGroups discovery \n"); - logger.log(BasicLevel.DEBUG, "Expected type are\n " - +Data.DISC_GREETING+": DISC_GREETING\n" - +Data.DISC_EVENT+": DISC_EVENT\n" - +Data.DISC_MESSAGE+": DISC_MESSAGE\n But received: "+data.getType()); - } - return null; - } - - /** - * Construct a byte[] containing type info about a DiscMessage object to be sent, - * plus the content of this message. - * @param obj Object to be send. Only supported DiscMessage objects. - * @return Null if the object is not an instance of DiscMessage or one of its subclasses. - * @throws IOException Could not create an ObjectOutputStream to write into the - * underlying ByteArrayOutputStream. - */ - public static Data objectToBytes(final Serializable obj) throws IOException { - if (obj instanceof DiscEvent) { - return new Data(Data.DISC_EVENT, obj); - } - if (obj instanceof DiscGreeting) { - return new Data(Data.DISC_GREETING, obj); - } - return new Data(Data.DISC_MESSAGE, obj); - } - - /** - * Create a discovery event to notify about a state change of the - * event sender - * @param state - * - RUNNING if the sender notifies that it gets running - * - STOPPING if the sender notifies that it stops running - * @return a Discovery event (notification) - * @throws Exception - * is thrown if the jmx service is not reached. - */ - public static DiscEvent createNotifMessage(final String state ) throws Exception { - logger.log(BasicLevel.DEBUG, "Creating a discovery notification with state:" + state + " \n"); - if (!state.equals(DiscoveryState.RUNNING)&& !state.equals(DiscoveryState.STARTUP)) { - unique.setUrls(null); - } - // In the case of a notification, the field port is not important since the - // notifier is not waiting for an acknowledfement. - DiscEvent resp = new DiscEvent(unique.getLocalAddress().getIpAddress().toString(), unique.getDiscPort(), unique.getJonasName(), unique.getDomainName(), unique.getServerId(), unique.getUrls(), unique.getDiscType().equals(DISCOVERY_IS_MASTER)); - resp.setState(state); - logger.log(BasicLevel.DEBUG, " Discovery notification successfully created. \n"); - return resp; - } - - - - - - /** - * Create a discovery event to notify about a state change of the - * event sender - * @param state - * - RUNNING if the sender notifies that it gets running - * - STOPPING if the sender notifies that it stops running - * @return a Discovery event (notification) - * @throws Exception - * is thrown if the jmx service is not reached. - */ - public static DiscEvent createNotifMessageForClusterd(final String state ) throws Exception { - logger.log(BasicLevel.DEBUG, "Cluster daemon is creating a discovery notification on startup \n"); - if (!state.equals(DiscoveryState.RUNNING) && !state.equals(DiscoveryState.STARTUP)) { - unique.setUrls(null); - } - // In the case of a notification, the field port is not important since the - // notifier is not waiting for an acknowledfement. - ClusterdDiscoveryEvent resp = new ClusterdDiscoveryEvent(unique.getLocalAddress().getIpAddress().toString(), unique.getDiscPort(), unique.getJonasName(), unique.getDomainName(), unique.getServerId(), unique.getUrls()); - resp.setState(state); - resp.setDiscoveryMaster(unique.getDiscType().equals(DISCOVERY_IS_MASTER)); - logger.log(BasicLevel.DEBUG, "Cluster daemon has successfully created a discovery notification on startup \n"); - return resp; - } - - - /** - * Sends a given message to the given dest. - * @param dest The message destination. - * @param msg The message to send. - * @throws Exception Any. - */ - - public synchronized static void send(final Address dest, final Serializable msg) throws Exception { - String destString = null; - try { - if (dest == null) { - destString = " All members "; - }else { - destString = dest.toString(); - } - //send it on the given address - //after transforming the object to a datagram - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " My name is " + unique.getJonasName() + " Sending a message to " + destString); - } - - //send a discovery event - unique.getComChannel().send(dest, unique.getLocalAddress(), msg); - } catch (ChannelClosedException e) { - logger.log(BasicLevel.DEBUG, " Channel closed report when sending a message to " + destString + "\n", e); - throw new Exception(" Channel closed report when sending a message to " + destString + "\n" + e); - } - } - /** - * Close JGroups channel. - */ - public static void closeChannel() { - if(unique.getComChannel() != null && unique.getComChannel().isOpen()) { - //destroy all channel resources (threads, etc..) - unique.getComChannel().close(); - } - } - - /** - * Gets Multicast address. - * @return Multicast address - * @throws Exception - */ - public static String getMulticastAddress() throws Exception { - return getParamValueForCommParam(COMM_MCAST_ADDRESS); - - } - - /** - * Gets Multicast port. - * @return Multicast address - * @throws Exception - */ - public static String getMulticastPort() throws Exception { - return getParamValueForCommParam(COMM_MCAST_PORT); - - } - - /** - * Gets Discovery utils instance. - * @return - */ - public static DiscoveryUtils getInstance() { - return unique; - } -} diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/jonas-resources/conf/jgroups-discovery.xml b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/jonas-resources/conf/jgroups-discovery.xml deleted file mode 100644 index 769d08141e..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/jonas-resources/conf/jgroups-discovery.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/properties/jonas-jgroups.properties b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/properties/jonas-jgroups.properties deleted file mode 100644 index eb47398f24..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/properties/jonas-jgroups.properties +++ /dev/null @@ -1,6 +0,0 @@ -##################### properties for JGroups impl. -jonas.service.discovery.class org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImpl -jonas.service.discovery.jgroups.conf= jgroups-discovery.xml -jonas.service.discovery.group.name = JGroupsDiscovery -#Reconnection timeout for JGroups Channel, if it's closed on request. -jonas.service.discovery.reconnection.timeout = 5000 diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/META-INF/jonas-discovery-jgroups-core.bnd b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/META-INF/jonas-discovery-jgroups-core.bnd deleted file mode 100644 index 6e6558909b..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/META-INF/jonas-discovery-jgroups-core.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Private-Package !* -Export-Package org.ow2.jonas.discovery.jgroups.* -Import-Package * -DynamicImport-Package javax.naming,\ - javax.ejb - diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/metadata.xml deleted file mode 100644 index 9007ab3f7c..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/org/ow2/jonas/discovery/jgroups/utils/jgroups-discovery.xml b/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/org/ow2/jonas/discovery/jgroups/utils/jgroups-discovery.xml deleted file mode 100644 index e829c9b9b0..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/core/src/main/resources/org/ow2/jonas/discovery/jgroups/utils/jgroups-discovery.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-discovery/jgroups/pom.xml b/jonas/modules/services/jonas-discovery/jgroups/pom.xml deleted file mode 100644 index 1e5f85240f..0000000000 --- a/jonas/modules/services/jonas-discovery/jgroups/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-discovery - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-discovery-jgroups - pom - JOnAS :: Services :: Discovery :: JGroups - - core - ant - - diff --git a/jonas/modules/services/jonas-discovery/multicast/ant/pom.xml b/jonas/modules/services/jonas-discovery/multicast/ant/pom.xml deleted file mode 100644 index 6473789296..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-discovery-multicast - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-multicast-ant - jar - JOnAS :: Services :: Discovery :: Multicast :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-discovery-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/multicast/DiscoveryMulticast.java b/jonas/modules/services/jonas-discovery/multicast/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/multicast/DiscoveryMulticast.java deleted file mode 100644 index 21eab7d3f5..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/discovery/multicast/DiscoveryMulticast.java +++ /dev/null @@ -1,514 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.discovery.multicast; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.XMLSerializerTask; -import org.ow2.jonas.antmodular.jonasbase.discovery.base.Discovery; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.File; -import java.io.IOException; - -/** - * Defines properties for discovery-multicast service. - * @author Jeremy Cazaux - */ -public class DiscoveryMulticast extends Discovery { - - /** - * Default mcast addr. - */ - private static final String DEFAULT_DISCOVERY_MCASTADDR = "224.224.224.224"; - - /** - * Default mcast port. - */ - private static final String DEFAULT_DISCOVERY_MCASTPORT = "9080"; - - /** - * Default greeting port. - */ - private static final String DEFAULT_DISCOVERY_GREETING_PORT = "9899"; - - /** - * Default source port. - */ - private static final String DEFAULT_DISCOVERY_SOURCE_PORT = "9888"; - - /** - * Default ttl. - */ - private static final String DEFAULT_DISCOVERY_TTL = "1"; - - /** - * Discovery greeting port property. - */ - private static final String DISCOVERY_GREETING_PORT_PROPERTY = "jonas.service.discovery.greeting.port"; - - /** - * Discovery greeting timeout property. - */ - private static final String DISCOVERY_GREETING_TIMEOUT_PROPERTY = "jonas.service.discovery.greeting.timeout"; - - /** - * Discovery source port property. - */ - private static final String DISCOVERY_SOURCE_PORT_PROPERTY = "jonas.service.discovery.source.port"; - - /** - * Discovery ttl property. - */ - private static final String DISCOVERY_TTL_PROPERTY = "jonas.service.discovery.ttl"; - - /** - * Discovery mcast addr property. - */ - private static final String DISCOVERY_MCASTADDR_PROPERTY = "jonas.service.discovery.multicast.address"; - - /** - * Discovery mcast port property. - */ - private static final String DISCOVERY_MCASTPORT_PROPERTY = "jonas.service.discovery.multicast.port"; - - /** - * Discovery master property. - */ - private static final String DISCOVERY_MASTER_PROPERTY = "jonas.service.discovery.master"; - - /** - * domain management configuration file. - */ - private static final String DOMAIN_MNGT_CONF_FILE = "domain.xml"; - - /** - * Domain.xml structure. - */ - private Document domainDoc = null; - - /** - * Flag indicating if the domain document has been loaded. - */ - private boolean domainDocLoaded = false; - - /** - * Name of the implementation class for Multicast. - */ - private static final String MULTICAST_SERVICE = "org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImpl"; - - /** - * Enable greeting part of discovery service. - */ - private void enableMaster() { - // 1st Token to replace - String token1 = "#" + DISCOVERY_MASTER_PROPERTY; - String value1 = DISCOVERY_MASTER_PROPERTY; - JReplace propertyReplace1 = new JReplace(); - propertyReplace1.setLogInfo(INFO + "Enable master node for discovery"); - propertyReplace1.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace1.setToken(token1); - propertyReplace1.setValue(value1); - addTask(propertyReplace1); - - // 2nd Token to replace - String token2 = "#" + DISCOVERY_SOURCE_PORT_PROPERTY; - String value2 = DISCOVERY_SOURCE_PORT_PROPERTY; - JReplace propertyReplace2 = new JReplace(); - propertyReplace2.setLogInfo(INFO + "Enable greeting timeout for discovery"); - propertyReplace2.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace2.setToken(token2); - propertyReplace2.setValue(value2); - addTask(propertyReplace2); - } - - /** - * Enable greeting part of discovery service. - */ - private void enableGreeting() { - // 1st Token to replace - String token1 = "#" + DISCOVERY_GREETING_PORT_PROPERTY; - String value1 = DISCOVERY_GREETING_PORT_PROPERTY; - JReplace propertyReplace1 = new JReplace(); - propertyReplace1.setLogInfo(INFO + "Enable greeting port for discovery"); - propertyReplace1.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace1.setToken(token1); - propertyReplace1.setValue(value1); - addTask(propertyReplace1); - - // 2nd Token to replace - String token2 = "#" + DISCOVERY_GREETING_TIMEOUT_PROPERTY; - String value2 = DISCOVERY_GREETING_TIMEOUT_PROPERTY; - JReplace propertyReplace2 = new JReplace(); - propertyReplace2.setLogInfo(INFO + "Enable greeting timeout for discovery"); - propertyReplace2.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace2.setToken(token2); - propertyReplace2.setValue(value2); - addTask(propertyReplace2); - } - - /** - * Set the source port for the discovery service. - * @param portNumber port number (-1 means to disable to master node) - */ - public void setSourcePort(final String portNumber) { - - int pn = new Integer(portNumber).intValue(); - if (pn != -1) { - enableMaster(); - - // Token to replace - String token = DISCOVERY_SOURCE_PORT_PROPERTY + "=" + DEFAULT_DISCOVERY_SOURCE_PORT; - String value = DISCOVERY_SOURCE_PORT_PROPERTY + "=" + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting source port for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - } - } - - /** - * Set the port for the discovery service. - * @param portNumber port number - */ - public void setGreetingPort(final String portNumber) { - enableGreeting(); - // Token to replace - String token = DISCOVERY_GREETING_PORT_PROPERTY + "=" + DEFAULT_DISCOVERY_GREETING_PORT; - String value = DISCOVERY_GREETING_PORT_PROPERTY + "=" + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting greeting port for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - } - - /** - * Set mcastAddr. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace - String token = DISCOVERY_MCASTADDR_PROPERTY + "=" + DEFAULT_DISCOVERY_MCASTADDR; - String value = DISCOVERY_MCASTADDR_PROPERTY + "=" + mcastAddr; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting mcastaddr for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - - } - - /** - * Set mcastPort. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace - String token = DISCOVERY_MCASTPORT_PROPERTY + "=" + DEFAULT_DISCOVERY_MCASTPORT; - String value = DISCOVERY_MCASTPORT_PROPERTY + "=" + mcastPort; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting mcastport for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - - } - - /** - * Set ttl. - * @param ttl paquet time to live - */ - public void setTtl(final String ttl) { - - // Token to replace - String token = DISCOVERY_TTL_PROPERTY + "=" + DEFAULT_DISCOVERY_TTL; - String value = DISCOVERY_TTL_PROPERTY + "=" + ttl; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting ttl for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - } - - - /** - * load the domain.xml file in a DOM structure. - */ - private void loadDomainXmlDoc() { - - if (!domainDocLoaded) { - - // Load the orignal configuration file - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = null; - try { - factory.setNamespaceAware(true); - docBuilder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new BuildException(INFO + "Exception during loadDomainXmlDoc", e); - } - try { - domainDoc = docBuilder.parse(this.jonasRoot + File.separator + "templates" + File.separator + "conf" + File.separator + "conf" - + File.separator + DOMAIN_MNGT_CONF_FILE); - } catch (SAXException e) { - throw new BuildException(INFO + "Error during parsing of the file " + DOMAIN_MNGT_CONF_FILE, e); - } catch (IOException e) { - throw new BuildException(INFO + "Error during parsing of the file " + DOMAIN_MNGT_CONF_FILE, e); - } - - Element root = domainDoc.getDocumentElement(); - - // Remove the default servers list - NodeList serverNodeL = root.getElementsByTagName("server"); - for (int i = 0; i < serverNodeL.getLength(); i++) { - Node n = serverNodeL.item(i); - root.removeChild(n); - } - - // Prepare the serialization - XMLSerializerTask xmlSerTask = new XMLSerializerTask(); - xmlSerTask.setXmlDoc(domainDoc); - xmlSerTask.setXmlFileName(DOMAIN_MNGT_CONF_FILE); - - addTask(xmlSerTask); - - domainDocLoaded = true; - } - - } - - /** - * Set the domain description. - * @param domainDesc domain description - */ - public void setDomainDesc(final String domainDesc) { - - // Load the orignal configuration file - loadDomainXmlDoc(); - - Element root = domainDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("description"); - nameNodeL.item(0).getFirstChild().setNodeValue(domainDesc); - - } - - /** - * Add a cluster in the domain. - * @param clusterName cluster name - * @param clusterDesc cluster desc - * @param nodesName prefix of the nodes names within the cluster - * @param nodesNb number of nodes within the cluster - * @param protocol protocol - * @param portRange protocol port range - * @param cdName Cluster daemon's name - * @param cdUrl Cluster daemon's URL - */ - public void setDomainCluster(final String clusterName, final String clusterDesc, final String nodesName, final int nodesNb, - final String protocol, final String[] portRange, final String cdName, final String cdUrl) { - - // Load the orignal configuration file - loadDomainXmlDoc(); - - Element root = domainDoc.getDocumentElement(); - - Text c = domainDoc.createTextNode("\n\t"); - root.appendChild(c); - - // creation of the cluster-daemon node - Node dnc = domainDoc.createElement("cluster-daemon"); - root.appendChild(dnc); - - Text c1 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c1); - - // Element name - Node dncn = domainDoc.createElement("name"); - dnc.appendChild(dncn); - - Text dtncn = domainDoc.createTextNode(cdName); - dncn.appendChild(dtncn); - - Text c2 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c2); - - // Element description - Node dncd = domainDoc.createElement("description"); - dnc.appendChild(dncd); - - Text dtncd = domainDoc.createTextNode(""); - dncd.appendChild(dtncd); - - Text c3 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c3); - - // Element location - Node dncl = domainDoc.createElement("location"); - dnc.appendChild(dncl); - - Text c4 = domainDoc.createTextNode("\n\t\t "); - dncl.appendChild(c4); - - // Element url - Node dncu = domainDoc.createElement("url"); - dncl.appendChild(dncu); - - Text dtncu = domainDoc.createTextNode(cdUrl); - dncu.appendChild(dtncu); - - Text c5 = domainDoc.createTextNode("\n\t"); - root.appendChild(c5); - - // creation of the cluster node - Node cnc = domainDoc.createElement("cluster"); - root.appendChild(cnc); - - Text c6 = domainDoc.createTextNode("\n\t "); - cnc.appendChild(c6); - - Node cncn = domainDoc.createElement("name"); - cnc.appendChild(cncn); - - Text ctncn = domainDoc.createTextNode(clusterName); - cncn.appendChild(ctncn); - - Text c7 = domainDoc.createTextNode("\n\t "); - cnc.appendChild(c7); - - Node cncd = domainDoc.createElement("description"); - cnc.appendChild(cncd); - - Text ctncd = domainDoc.createTextNode(clusterDesc); - cncd.appendChild(ctncd); - - for (int i = 1; i <= nodesNb; i++) { - - Text c8 = domainDoc.createTextNode("\n\t\t"); - cnc.appendChild(c8); - - // Element server - Node cncs = domainDoc.createElement("server"); - cnc.appendChild(cncs); - - Text c9 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c9); - - // Element name - Node cncsn = domainDoc.createElement("name"); - cncs.appendChild(cncsn); - - Text ctncsn = domainDoc.createTextNode(nodesName + i); - cncsn.appendChild(ctncsn); - - Text c10 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c10); - - // Element location - Node cncsl = domainDoc.createElement("location"); - cncs.appendChild(cncsl); - - Text c11 = domainDoc.createTextNode("\n\t\t\t"); - cncsl.appendChild(c11); - - // Element url - Node cncsu = domainDoc.createElement("url"); - cncsl.appendChild(cncsu); - - String scheme; - if (protocol.equals("jrmp") || protocol.equals("irmi")) { - scheme = "rmi"; - } else if (protocol.equals("iiop")) { - scheme = "iiop"; - } else { - throw new BuildException(INFO + "Unknown protocol '" + protocol + "' for node '" + i + "'."); - } - String url = "service:jmx:" + scheme + "://localhost/jndi/" + scheme + "://localhost:" + portRange[i - 1] + "/" - + protocol + "connector_node" + i; - - Text ctncsu = domainDoc.createTextNode(url); - cncsu.appendChild(ctncsu); - - Text c20 = domainDoc.createTextNode("\n\t\t "); - cncsl.appendChild(c20); - - Text c12 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c12); - - // Element cluster-daemon - Node cncscd = domainDoc.createElement("cluster-daemon"); - cncs.appendChild(cncscd); - - Text ctncscd = domainDoc.createTextNode(cdName); - cncscd.appendChild(ctncscd); - - Text c28 = domainDoc.createTextNode("\n\t\t"); - cncs.appendChild(c28); - - } - - Text c21 = domainDoc.createTextNode("\n\t"); - cnc.appendChild(c21); - - Text c14 = domainDoc.createTextNode("\n\t\t"); - dncl.appendChild(c14); - - Text c13 = domainDoc.createTextNode("\n\t"); - dnc.appendChild(c13); - - Text c18 = domainDoc.createTextNode("\n"); - root.appendChild(c18); - - Text cf = domainDoc.createTextNode("\n"); - root.appendChild(cf); - - } - - /** - * Execute all tasks - */ - public void execute() { - super.execute(); - super.createServiceNameReplace(this.MULTICAST_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/antlib-discovery-multicast.xml b/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/antlib-discovery-multicast.xml deleted file mode 100644 index 61d6a7746b..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/antlib-discovery-multicast.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.properties b/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.properties deleted file mode 100644 index be195def0a..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.properties +++ /dev/null @@ -1,7 +0,0 @@ -discovery.implementation.default=multicast -#Discovery-multicast -discovery.sourceport=9888 -discovery.greetingport=9899 -discovery.mcastaddr=224.224.224.224 -discovery.mcastport=9080 -discovery.ttl=1 diff --git a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.xml b/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.xml deleted file mode 100644 index a093e3ee26..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/ant/src/main/resources/build-discovery-multicast.xml +++ /dev/null @@ -1,15 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/pom.xml b/jonas/modules/services/jonas-discovery/multicast/core/pom.xml deleted file mode 100644 index 938da630a8..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - jonas-discovery-multicast - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-discovery-multicast-core - bundle - JOnAS :: Services :: Discovery :: Multicast :: Core - - - - org.ow2.jonas - jonas-discovery-base-core - ${project.version} - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImpl.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImpl.java deleted file mode 100644 index d824893513..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImpl.java +++ /dev/null @@ -1,528 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast; - -import java.util.ArrayList; - -import javax.management.JMException; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.remote.JMXServiceURL; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.base.BaseDiscovery; -import org.ow2.jonas.discovery.base.DuplicateServerNameException; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscMessage; -import org.ow2.jonas.discovery.multicast.client.DiscoveryClient; -import org.ow2.jonas.discovery.multicast.client.DiscoveryClientMBean; -import org.ow2.jonas.discovery.multicast.enroller.Enroller; -import org.ow2.jonas.discovery.multicast.enroller.EnrollerMBean; -import org.ow2.jonas.discovery.multicast.manager.DiscoveryManager; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; - - -/** - * The discovery service creates and starts at least a {@link DiscoveryManager} - * which is a MBean that multi-casts discovery information to all - * the servers who joined the discovery multicast group. - *

    - * The discovery service may also create a {@link Enroller} and a - * {@link DiscoveryClient}, and in this case the current server becomes - * a discovery server. - *

    - *

    - * Discovery information contains information allowing to - * remotely manage a server in the group. - *

    - *

    - * Discovery multicast group is a group of servers which can - * be managed remotely by a discovery server. - *

    - *

    - * Discovery server is the server in the group who detains - * the discovery information concerning all the servers in the group. - *

    - * @author Adriana Danes - */ -public class MulticastDiscoveryServiceImpl extends BaseDiscovery implements MulticastDiscoveryServiceImplMBean { - - /** - * This attribute is injected - * String form of the IP Address where multicast messages are sent. - * @uml.property name="listeningIp" - */ - private String listeningIp = null; - - /** - * This attribute is injected - * The port to listen to for multicast messages. - * @uml.property name="listeningPort" - */ - private int listeningPort; - - /** - * This attribute is injected - * The port to listen to for responses to greeting message. - * @uml.property name="greetingListeningPort" - */ - private int greetingListeningPort; - - /** - * This attribute is injected - * The port where discovery events are sent. - * @uml.property name="sourcePort" - */ - private int sourcePort; - - /** - * The discovery manager. - */ - private DiscoveryManager dm = null; - - /** - * Handles {@link DiscEvent} for master discovery. - */ - private Enroller enroller = null; - - /** - * handles {@link DiscMessage} for master or slave discovery. - */ - private DiscoveryClient dc; - - /** - * Logger for this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * @return the multicast group IP address used by the discovery service - */ - public String getDiscoveryAddress() { - return listeningIp; - } - - /** - * @return the multicast group port number used by the discovery service - */ - public String getDiscoveryPort() { - return String.valueOf(listeningPort); - } - - /** - * @param address the multicast group IP address used by the discovery service.Used on injection - */ - public void setMulticastAddress(final String address) { - listeningIp = address; - } - - /** - * @param port multi-cast group port number. Used on injection - */ - public void setMulticastPort(final int port) { - this.listeningPort = port; - } - - /** - * Management operation allowing to make the current server become a - * master if its not already. - * @throws JMException a JMX exception occurred when trying to make current server a discovery master - */ - public void startDiscoveryMaster() throws JMException { - if (!getIsDiscoveryMaster()) { - createEnroller(getDomainName()); - createDiscClient(getDomainName()); - setMaster(true); - } - } - - /** - * Create the {@link EnrollerMBean} MBean. - * @param domainName the domain name - * @throws JMException - */ - private void createEnroller(final String domainName) throws JMException { - enroller = new Enroller(listeningPort, listeningIp); - enroller.setTimeToLive(getTtl()); - getJmxService().registerMBean(enroller, - JonasObjectName.discoveryEnroller(domainName)); - } - - /** - * Create the {@link DiscoveryClientMBean} MBean. - * @param domainName the domain name - * @throws JMException - */ - private void createDiscClient(final String domainName) throws JMException { - dc = new DiscoveryClient(listeningPort, listeningIp, sourcePort); - dc.setTimeToLive(getTtl()); - getJmxService().registerMBean(dc, JonasObjectName.discoveryClient(domainName)); - } - /** - * Start the discovery service. - * - * @throws ServiceException - * An error occurred when starting the service - */ - @Override - protected void doStart() throws ServiceException { - - JmxService jmx = getJmxService(); - - // Create discovery manager - setMaster(getServerProperties().isMaster()); - dm = new DiscoveryManager(getJonasServerName(), - listeningPort, - listeningIp, - greetingListeningPort, - getGreetingTimeout()); - String domainName = getDomainName(); - dm.setDomainName(domainName); - dm.setJonasName(getJonasServerName()); - dm.setTimeToLive(getTtl()); - JMXServiceURL[] connectorServerURLs = jmx.getConnectorServerURLs(); - urlsList = new ArrayList(); - for (int i = 0; i < connectorServerURLs.length; i++) { - // The connectorServerURLs may contain null - // if the list of protocols in Carol contain - // other protocols than the standard ones (JRMP, IIOP, CMI) - if (connectorServerURLs[i] != null) { - urlsList.add(connectorServerURLs[i].toString()); - } - } - String[] urls = new String[urlsList.size()]; - for (int i = 0; i < urls.length; i++) { - urls[i] = (String) urlsList.get(i); - } - dm.setUrls(urls); - - // Register DiscoveryManager MBean - try { - jmx.registerMBean(dm, - JonasObjectName.discoveryManager(domainName)); - } catch (MalformedObjectNameException e1) { - e1.printStackTrace(); - throw new ServiceException("Problem when starting the Discovery Service:", - e1); - } - - // Start discovery manager - try { - dm.start(); - } catch (DuplicateServerNameException e) { - // Server with the same name already exists in domain. - logger.log(BasicLevel.ERROR, - "Discovery manager failed to start due to a pre-existing" - + " server in the domain with the same name.", e); - try { - jmx.unregisterMBean(JonasObjectName.discoveryManager(domainName)); - } catch (MalformedObjectNameException e1) { - e1.printStackTrace(); - throw new ServiceException( - "Problem when starting the Discovery Service:", e1); - } - // Discovery service had a problem. - throw new ServiceException( - "Problem when starting the Discovery Service:", e); - } - - if (getIsDiscoveryMaster()) { - // Create enroller - try { - createEnroller(domainName); - } catch (JMException e) { - throw new ServiceException( - "Problem when starting the Discovery Service: ", e); - } - - // Create the discovery client - try { - createDiscClient(domainName); - } catch (JMException e) { - throw new ServiceException( - "Problem when starting the Discovery Service: ", e); - } - } - // Create and register the service MBean - jmx.registerMBean(this, JonasObjectName.discoveryService(domainName)); - logger.log(BasicLevel.INFO, "Multicast discovery started successfully"); - - } - - /** - * Stop the discovery service. - */ - @Override - protected void doStop() throws ServiceException { - // Unregister the service MBean - JmxService jmxService = getJmxService(); - if (jmxService != null) { - jmxService.unregisterMBean(JonasObjectName.discoveryService(getDomainName())); - } - logger.log(BasicLevel.INFO, "Multicast discovery stopped successfully"); - } - - /** - * Create a 'fake' DiscEvent object containing info to establish a JMX connection with a new server - * in the domain. - * @param serverName the OBJECT_NAME of the server MBean corresponding to the server to connect - * @param domainName the JOnAS server's domain name - * @param connectorURLs the urls of the connector server of the server to connect - * @param state the state of the server (RUNNING in case the DiscEvent is used to add a server; could be STOPPING - * if the DiscEvent is used to remove a server) - * @return a new DiscEvent object - */ - public DiscEvent getDiscEvent(final String serverName, - final String domainName, - final String[] connectorURLs, - final String state) { - String sourceAddress = null; - int sourcePort = 0; - String serverId = null; - DiscEvent fakeMessage = new DiscEvent(sourceAddress, - sourcePort, - serverName, - domainName, - serverId, - connectorURLs); - fakeMessage.setState(state); - return fakeMessage; - } - /** - * @return the discovery protocol version number - */ - public String getDiscoveryProtocolVersion() { - return DiscMessage.DISCOVERY_PROTOCOL_VERSION; - } - - /** - * @return Returns the discovery Time to live - * @see MulticastDiscoveryServiceImplMBean#getDiscoveryTtl() - */ - public String getDiscoveryTtl() { - return String.valueOf(getTtl()); - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getDiscoveryClient() - */ - public ObjectName getDiscoveryClient() { - return null; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getDiscoveryManager() - */ - public ObjectName getDiscoveryManager() throws MalformedObjectNameException { - return JonasObjectName.discoveryManager(getDomainName()); - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getEnroller() - */ - public ObjectName getEnroller() throws MalformedObjectNameException { - return JonasObjectName.discoveryEnroller(getJmxService().getDomainName()); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getListeningIp() - */ - @Override - public String getListeningIp() { - return listeningIp; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getListeningPort() - */ - @Override - public int getListeningPort() { - return listeningPort; - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getSourcePort() - */ - public int getSourcePort() { - return sourcePort; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setListeningIp(java.lang.String) - */ - @Override - public void setListeningIp(final String listeningIp) { - this.listeningIp = listeningIp; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setListeningPort(int) - */ - @Override - public void setListeningPort(final int listeningPort) { - this.listeningPort = listeningPort; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean#setSourcePort(int) - */ - public void setSourcePort(final int sourcePort) { - logger.log(BasicLevel.DEBUG, "Setting source port \n"); - this.sourcePort = sourcePort; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#setUrlsList(java.util.ArrayList) - */ - @Override - public void setUrlsList(final ArrayList urlsList) { - logger.log(BasicLevel.DEBUG, "Setting urls \n"); - this.urlsList = urlsList; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getGreetingPort() - */ - public int getGreetingPort() { - logger.log(BasicLevel.DEBUG, "Getting greeting listening port \n"); - return greetingListeningPort; - } - - /** - * @param port greeting port. - */ - public void setGreetingPort(final int port) { - logger.log(BasicLevel.DEBUG, "Setting greeting port \n"); - this.greetingListeningPort = port; - } - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.base.BaseDiscovery#getUrlsList() - */ - @Override - public ArrayList getUrlsList() { - logger.log(BasicLevel.DEBUG, "Setting urls \n"); - return urlsList; - } - - public String getJonasName() { - logger.log(BasicLevel.DEBUG, "Getting name \n"); - return dm.getJonasName(); - } - - public MBeanServer getMbeanServer() { - logger.log(BasicLevel.DEBUG, "Getting MBean server \n"); - return getJmxService().getJmxServer(); - } - - public ObjectName getMyOn() { - logger.log(BasicLevel.DEBUG, "Getting ObjectName \n"); - return JonasObjectName.discoveryService(getJmxService().getDomainName()); - } - - public String getServerId() { - logger.log(BasicLevel.DEBUG, "Getting server ID \n"); - return getJmxService().getJonasServerName(); - } - - public String[] getUrls() { - logger.log(BasicLevel.DEBUG, "Getting urls \n"); - return (String[]) urlsList.toArray(); - } - - public void setDomainName(final String domainName) { - logger.log(BasicLevel.DEBUG, "Setting domain name \n"); - dm.setDomainName(domainName); - - } - - public void setJonasName(final String jonasName) { - logger.log(BasicLevel.DEBUG, "Setting name \n"); - dm.setJonasName(jonasName); - - } - - public void setMbeanServer(final MBeanServer mbeanServer) { - // TODO implement this - logger.log(BasicLevel.DEBUG, "Setting MBean server: not yet implemented \n"); - - } - - public void setMyOn(final ObjectName myOn) { - // TODO implement this - logger.log(BasicLevel.DEBUG, "Setting ObjectName: not yet implemented \n"); - } - - public void setServerId(final String serverId) { - logger.log(BasicLevel.DEBUG, "Setting server ID: not yet implemented \n"); - } - - public void setUrls(final String[] urls) { - logger.log(BasicLevel.DEBUG, "Setting server urls \n"); - urlsList = toArrayList(urls); - } - - /** - * Build and Arraylist from String[] containing jmx urls. - * @param urls - * @return - * @throws NullPointerException - */ - @SuppressWarnings("unchecked") - private ArrayList toArrayList(final String[] urls) throws NullPointerException { - ArrayList ret = new ArrayList(); - try { - for (int i = 0; i < urls.length; i++) { - ret.add(urls[i]); - } - } catch (NullPointerException e) { - throw new NullPointerException("NullPointerException thrown in JgroupsDiscoveryServiceImpl. Urls list must not be null in toArrayList method \n"+e); - } - return ret; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getMulticastAddress() - */ - public String getMulticastAddress() { - return getListeningIp(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImplMBean#getMulticastPort() - */ - public String getMulticastPort() { - return new Integer(listeningPort).toString(); - } - -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImplMBean.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImplMBean.java deleted file mode 100644 index 17f60c8cd3..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/MulticastDiscoveryServiceImplMBean.java +++ /dev/null @@ -1,89 +0,0 @@ -/** -* JOnAS: Java(TM) Open Application Server -* Copyright (C) 2004 Bull S.A. -* Contact: jonas-team@ow2.org -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -* USA -* -* -------------------------------------------------------------------------- -* $Id:MulticastDiscoveryServiceImplMBean.java 10967 2007-07-12 07:50:01Z eyindanga $ -* -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.discovery.multicast; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.ow2.jonas.discovery.base.DiscoveryServiceImplMBean; - -/** - * Management interface for the discovery service. - * @author Adriana Danes - * @author eyindanga - * - */ -public interface MulticastDiscoveryServiceImplMBean extends DiscoveryServiceImplMBean { - - /** - * Gets the MBean of disovery client. - * @return - */ - public ObjectName getDiscoveryClient(); - - /** - * Gets the MBean of disovery manager. - * @return - * @throws MalformedObjectNameException - */ - public ObjectName getDiscoveryManager() throws MalformedObjectNameException; - - /** - * Gets the MBean of the enroller. - * @return - * @throws MalformedObjectNameException - */ - public ObjectName getEnroller() throws MalformedObjectNameException; - - /** - * Gets the greeting listening port. - * @return the greetingListeningPort - * @uml.property name="greetingListeningPort" - */ - public int getGreetingPort(); - - /** - * sets the greeting listening port. - * @param greetingListeningPort the greetingListeningPort to set - * @uml.property name="greetingListeningPort" - */ - public void setGreetingPort( final int greetingListeningPort); - - /** - * Gets the discovery source port. - * @return the sourcePort - * @uml.property name="sourcePort" - */ - public int getSourcePort(); - - /** - * sets discovery source port. - * @param sourcePort the sourcePort to set - * @uml.property name="sourcePort" - */ - public void setSourcePort(final int sourcePort); - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClient.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClient.java deleted file mode 100644 index 72a43dbbe3..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClient.java +++ /dev/null @@ -1,236 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.client; - -import java.net.UnknownHostException; - -import javax.management.MBeanRegistration; -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.NetUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * The DiscoveryClient is in charge of sending discovery messages on the LAN to - * discover resources. It waits during a Timeout period of time for the - * discovery answers (discovery messages containing a response). - * - * @author Takoua Abdellatif - * @version 1.0 - */ -public class DiscoveryClient implements DiscoveryClientMBean, MBeanRegistration { - - /** - * Source port of the sent discovery message. - */ - private int sourcePort; - - /** - * Source IP of the sent discovery message (address of the local host) - */ - private String sourceIp; - - /** - * My ObjectName - */ - private ObjectName myOn; - - /** - * Runnable object that sends a discovery message and than listens for - * response of servers in the management domain. - */ - private DiscoveryClientListener dcl = null; - - /** - * Thread associated to dcl - */ - private Thread discoveryClientListener = null; - private int ttl = 1; - - /** - * Time to wait for a response - */ - private int timeout = 1000; - private int listeningPort; - private String listeningIp; - - /** - * Discovery logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * Creates a new Discovery client. - * @param listeningPort - * @param listeningIP - * @param sourcePort - */ - public DiscoveryClient(int listeningPort, String listeningIP, int sourcePort) { - this.listeningIp = listeningIP; - this.listeningPort = listeningPort; - this.sourcePort = sourcePort; - } - - /** - */ - public int getTimeout() { - return timeout; - } - - /** - */ - public void setTimeout(int timeout) { - this.timeout = timeout; - } - - /** - */ - public int getListeningPort() { - return listeningPort; - } - - /** - */ - public void setListeningPort(int listeningPort) { - this.listeningPort = listeningPort; - - } - - /** - */ - public String getListeningIp() { - return listeningIp; - } - - /** - */ - public void setListeningIp(String ipAddress) { - this.listeningIp = ipAddress; - - } - - /** - */ - public int getSourcePort() { - return sourcePort; - } - - /** - */ - public void setSourcePort(int sourcePort) { - this.sourcePort = sourcePort; - - } - - /** - */ - public String getSourceIp(){ - return sourceIp; - } - - /** - */ - public int getTimeToLive() { - return ttl; - } - - /** - */ - public void setSourceIp(String sourceIp) { - this.sourceIp = sourceIp; - - } - - /** - * - */ - public void setTimeToLive(int ttl) { - this.ttl = ttl; - - } - - /** - */ - public void start() { - // create the thread in charge of sending the discovery message and waiting - // for the responses - // creates an instance of the DiscoveryClientListener class - try { - this.setSourceIp(NetUtils.getLocalAddress()); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, "Unable to create a localhost.", e); - } - dcl = new DiscoveryClientListener(this); - - if (discoveryClientListener == null) { - discoveryClientListener = new Thread(dcl, "discoveryClientListener"); - } - discoveryClientListener.start(); - - } - - public void stop() { - - } - - /** - * - * @see javax.management.MBeanRegistration#preRegister(javax.management.MBeanServer, - * javax.management.ObjectName) - */ - public ObjectName preRegister(MBeanServer mbeanServer, ObjectName on) { - this.myOn = on; - return myOn; - } - - /** - * - * @see javax.management.MBeanRegistration#postRegister(java.lang.Boolean) - */ - public void postRegister(Boolean arg0) { - start(); - } - - /** - * - * @see javax.management.MBeanRegistration#preDeregister() - */ - public void preDeregister() throws Exception { - dcl.stop(); - - } - - /** - * - * @see javax.management.MBeanRegistration#postDeregister() - */ - public void postDeregister() { - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientListener.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientListener.java deleted file mode 100644 index a285030516..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientListener.java +++ /dev/null @@ -1,229 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.client; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.MulticastSocket; -import java.net.SocketException; -import java.net.UnknownHostException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscMessage; -import org.ow2.jonas.discovery.multicast.utils.DiscoveryHelper; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; - -/** - * @author Takoua Abdellatif - * @author Adriana Danes - * @version 1.0 - */ -public class DiscoveryClientListener implements Runnable { - - /** - * Management notification type for discovery events - */ - public static final String DISCOVERY_TYPE = "jonas.management.discovery"; - - private static int RECEIVE_BUFFER_SIZE = 1024; - - /** - * Used to multicast a discovery message on run() execution - */ - private MulticastSocket multicastSocket; - - /** - * Port associated to the multicast socket - */ - private int port; - - /** - * IP address for the multicast socket - */ - private InetAddress groupAddress; - - /** - * Time to live for multicatst packets - */ - private int ttl; - - /** - * Uset to receive a discovery event as response to the sent discovey message - */ - private DatagramSocket unicastSocket; - - /** - * Ip address which identify the sender of the discovery message - */ - private String sourceIp; - - /** - * Port which identify by the sender of the discovery message - */ - private int sourcePort; - - /** - * State information - */ - private boolean notStopped = true; - - /** - * Time to wait for a response - */ - private long timeout = 1000; - - /** - * Logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * Constructs a DiscoveryClientListener associated with a DiscoveryClient - * @param discoveryClient DiscoveryClient to which this thread is associated - */ - public DiscoveryClientListener(final DiscoveryClient discoveryClient) { - this.port = discoveryClient.getListeningPort(); - try { - this.groupAddress = InetAddress.getByName(discoveryClient.getListeningIp()); - this.ttl = discoveryClient.getTimeToLive(); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, "Invalid host", e); - } - this.timeout = discoveryClient.getTimeout(); - this.sourcePort = discoveryClient.getSourcePort(); - this.sourceIp = discoveryClient.getSourceIp(); - - // Create a unicast socket to receive responses - // Do this in constructor so the exception can be caught - // and acted on before a new thread is created. - try { - unicastSocket = new DatagramSocket(sourcePort); - } catch (SocketException e2) { - logger.log(BasicLevel.ERROR, "DiscoveryClient : Unable to create a Datagram socket", e2); - // Could not create datagram socket, so throw a ServiceException. - throw new ServiceException( - "Could not create socket to listen for discovery " - + "messages at port: " + sourcePort - + ". The port might be in use."); - } - } - - /** - * Sends a discovery message to the server group. - */ - public void sendDiscoveryMessage(final DiscMessage msg) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "DiscoveryClient : The message to send is " + msg); - } - // send the message on the multicast socket - // after packing it into a datagram - byte[] messageBytes = null; - try { - messageBytes = DiscoveryHelper.objectToBytes(msg); - if (messageBytes != null) { - multicastSocket.send(new DatagramPacket(messageBytes, - messageBytes.length, groupAddress, port)); - } - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "DiscoveryClient : Error to send discovery message", e); - } - } - - /** - * @see java.lang.Runnable#run() - */ - public void run() { - // Create a multicast socket - try { - multicastSocket = new MulticastSocket(port); - multicastSocket.setTimeToLive(ttl); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - // Prepare a discovery message - DiscMessage msg = new DiscMessage(sourceIp, sourcePort); - // First send a discovery message - sendDiscoveryMessage(msg); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " DiscoveryClient: Sent Message is" + msg); - } - - // wait for responses during a Timeout period on the unicast socket. - long lastTime = timeout + System.currentTimeMillis(); - DiscEvent event = null; - try { - while ((notStopped) && System.currentTimeMillis() <= lastTime) { - DatagramPacket datagram = null; - Object objReceived = null; - try { - datagram = getDatagram(RECEIVE_BUFFER_SIZE); - unicastSocket.receive(datagram); - objReceived = DiscoveryHelper.bytesToObject(datagram.getData()); - } catch (RuntimeException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - }catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - if (objReceived != null) { - if (objReceived instanceof DiscEvent) { - event = (DiscEvent) objReceived; - // Trust the datagram packet instead of the encoded URL - event.setSourceAddress(datagram.getAddress().getHostAddress()); - DomainMonitor dm = DomainMonitor.getInstance(); - if (dm == null) { - logger.log(BasicLevel.WARN, "No DomainMonitor"); - } else { - dm.discoveryNotification(event); - } - } - } - datagram = null; - } - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.ERROR, "DiscoveryClient ClassNotFoundException ", e); - } - } - protected DatagramPacket getDatagram(final int length) { - return new DatagramPacket(new byte[length], length); - } - - /** - * Stops the current thread - */ - public void stop() { - notStopped = false; - Thread.interrupted(); - } -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientMBean.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientMBean.java deleted file mode 100644 index f7cf2645c1..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/client/DiscoveryClientMBean.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - */ -package org.ow2.jonas.discovery.multicast.client; - -import org.ow2.jonas.discovery.multicast.enroller.EnrollerMBean; - -/** - * - * @author Takoua Abdellatif - * @version 1.0 - */ -public interface DiscoveryClientMBean extends EnrollerMBean { - /** - * gets the duration time the DiscoveryClient has to wait for discovery answers. - * @return timeout value. - */ - int getTimeout(); - /** - * Sets the timeout value the DiscoveryClient for receiving discovery answers. - * @param timeout - */ - void setTimeout(int timeout); - /** - * Gets the source port that the discovery response has to use. - * @return source port - */ - int getSourcePort(); - /** - * Sets the source port - * @param sourcePort - */ - void setSourcePort(int sourcePort); - /** - * Gets the source port - * @return the source port - */ - String getSourceIp(); - /** - * Sets the source Ip - * @param sourceIp - */ - void setSourceIp(String sourceIp); -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryComm.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryComm.java deleted file mode 100644 index e17f787cb4..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryComm.java +++ /dev/null @@ -1,339 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.comm; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.MulticastSocket; -import java.net.SocketException; -import java.net.UnknownHostException; - -import org.ow2.jonas.discovery.DiscoveryState; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.base.comm.DiscMessage; -import org.ow2.jonas.discovery.multicast.manager.DiscoveryManager; -import org.ow2.jonas.discovery.multicast.utils.DiscoveryHelper; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.NetUtils; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Takoua Abdellatif - * @version 1.0 - */ -public class DiscoveryComm implements Runnable { - /** - * Size of buffer to read incoming packets into. - */ - public static final int RECEIVE_BUFFER_SIZE = 1024; - /** - * Used to multicast a discovery event on run() execution - */ - protected MulticastSocket multicastSocket; - /** - * Uset to send a discovery event as response to a discovey message - */ - protected DatagramSocket unicastSocket; - - /** - * My manager's listening port - */ - private int port; - /** - * My manager's multicast IP address - */ - private InetAddress destAddress; - /** - * Set to false if the thread is stopped - */ - protected boolean notStopped = true; - /** - * Time to live for multicatst packets - */ - private int ttl = 1; // why 1 ?? - - /** - * Name for this jonas instance. - */ - protected String jonasName = null; - /** - * Domain name that this instance belongs to. - */ - protected String domainName = null; - - /** - * The server ID of the jonas instance. - */ - protected String serverId = null; - - - /** - * MBean server connection URLs for this server. - */ - protected String[] urls = null; - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - /** - * Constructs a DiscoveryComm associated to the DiscoveryManager - * @param dm DiscoveryManager to which this thread is associated - */ - public DiscoveryComm(DiscoveryManager dm) { - this.port = dm.getListeningPort(); - try { - this.destAddress = InetAddress.getByName(dm.getListeningIp()); - this.ttl = dm.getTimeToLive(); - this.jonasName = dm.getJonasName(); - this.domainName = dm.getDomainName(); - this.urls = dm.getUrls(); - this.serverId = dm.getServerId(); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, "Unknown Host", e); - } - } - - /** - * Creates a MulticastSocket and joins the group of multicas host - * identified by the InetAddress destAddress - * - */ - protected void join() { - try { - multicastSocket = new MulticastSocket(port); - multicastSocket.setTimeToLive(ttl); - multicastSocket.joinGroup(destAddress); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "multicast ip address is " - + destAddress); - logger.log(BasicLevel.DEBUG, "multicast port is " + port); - } - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "io problem", e); - } - } - - /** - * sends (multicasts) a Discovery Message to the group. - * @param msg The message to send. - */ - public void sendNotif(DiscMessage msg) { - try { - //send it on the multicast address - //after transforming the object to a datagram - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, msg); - } - byte[] messageBytes = DiscoveryHelper.objectToBytes(msg); - multicastSocket.send(new DatagramPacket(messageBytes, - messageBytes.length, destAddress, port)); - } catch (IOException e1) { - logger.log(BasicLevel.ERROR, "DiscoveryComm: Error to send notification", e1); - } - - } - /** - * Send response to a DiscoveryMessage - * @param msg Containes a DiscoveryMessage allowing to inform about the responder - * (name, state, URLs) - * @param destAddress the destination address picked up from the request - * @param port the destination port picked up from the request - */ - protected void sendResponse(DiscMessage msg, InetAddress destAddress, int port) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "DiscoveryComm : The message to send is " - + msg + "Sending it to: " + destAddress + " and port is: " + port); - } - try { - byte[] messageBytes = DiscoveryHelper.objectToBytes(msg); - if (messageBytes != null) { - // send the unicast response to the discovery client - unicastSocket.send(new DatagramPacket(messageBytes, - messageBytes.length, destAddress, port)); - } - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "DiscoveryComm: Error to send response to discovery message", e); - } - } - - /** - * Create a discovery event to notify about a state change of the - * event sender - * @param state - * - RUNNING if the sender notifies that it gets running - * - STOPPING if the sender notifies that it stops running - * @return a Discovery event (notification) - * @throws Exception - * is thrown if the jmx service is not reached. - */ - public DiscEvent createNotifMessage(String state) throws Exception { - String theHostAddress; - try { - theHostAddress = NetUtils.getLocalAddress(); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, "Unknown host", e); - return null; - } - - if (!state.equals(DiscoveryState.RUNNING)) { - urls = null; - } - // In the case of a notification, the field port is not important since the - // notifier is not waiting for an acknowledfement. - DiscEvent resp = new DiscEvent(theHostAddress, port, jonasName, domainName, serverId, urls); - resp.setState(state); - return resp; - } - /** - * Construct a new datagram. - * @param length packets length to be received - * @return the created datagram - */ - protected DatagramPacket getDatagram(int length) { - return new DatagramPacket(new byte[length], length); - } - - /** - * - * @see java.lang.Runnable#run() - */ - public void run() { - // Join the group in order to receive multicast messages - join(); - // Create notification message containing a discovery event with state RUNNING - DiscEvent discEventMsg = null; - try { - discEventMsg = createNotifMessage(DiscoveryState.RUNNING); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, - "DiscoveryComm: Unable to create a notification message", e); - } - if (discEventMsg != null) { - // Multicast the message - sendNotif(discEventMsg); - } - // Create the socket to be used for responding - try { - unicastSocket = new DatagramSocket(); - } catch (SocketException e3) { - logger.log(BasicLevel.ERROR, " Socket exception", e3); - return; - } - try { - while (notStopped) { - DatagramPacket datagram = null; - Object objReceived = null; - try { - datagram = getDatagram(RECEIVE_BUFFER_SIZE); - multicastSocket.receive(datagram); - objReceived = DiscoveryHelper.bytesToObject(datagram.getData()); - } catch (RuntimeException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - }catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - if (objReceived != null) { - // The DiscEvents are ignored - if ((objReceived instanceof DiscEvent) || (objReceived instanceof DiscGreeting) ) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "This discovery event/greeting is ignored " + objReceived); - } - } else { - DiscMessage request = (DiscMessage) objReceived; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "A discovery message is received " - + objReceived); - } - if (discEventMsg != null) { - // Use the address in the datagram packet instead of trusting the message. - InetAddress destAddress = datagram.getAddress(); - int destPort = request.getSourcePort(); - sendResponse(discEventMsg, destAddress, destPort); - } - } - } - datagram = null; - } - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.ERROR, e); - } - } - /** - * sends a notification message to notify that the server is stopping. - * - */ - public void stop() { - // send a notification message of type STOPPING - DiscEvent msg = null; - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Sending a STOPPING DiscEvent."); - } - msg = createNotifMessage(DiscoveryState.STOPPING); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, e); - } - if (msg != null) { - sendNotif(msg); - } - Thread.interrupted(); - } - - /** - * @param jonasName The jonasName to set. - */ - protected void setJonasName(String jonasName) { - this.jonasName = jonasName; - } - /** - * @param domainName The domainName to set. - */ - protected void setDomainName(String domainName) { - this.domainName = domainName; - } - /** - * @param urls The urls to set. - */ - protected void setUrls(String[] urls) { - this.urls = urls; - } - - public String getServerId() { - return serverId; - } - - public void setServerId(String serverId) { - this.serverId = serverId; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingListener.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingListener.java deleted file mode 100644 index b5449417a2..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingListener.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.comm; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.SocketException; - -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.multicast.manager.DiscoveryManager; -import org.ow2.jonas.discovery.multicast.utils.DiscoveryHelper; -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class is the first thing started by the discovery manager when - * starting the discovery service. It listens to the multicast group for - * greeting messages from new servers and if the message received contains - * the same server ID as that of this instance more than once (one message from - * the same instance at first) this class sends a response to inform the new server - * that it violates uniqueness of the server ID. - * @author Vivek Lakshmanan - * @version 1.0 - */ -public class DiscoveryGreetingListener extends DiscoveryGreetingResponder { - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - - /** - * The number of times a message with the same server ID has been received - * in the current run. - */ - private int mesgsSameServerIDCount; - - /** - * Constructs a DiscoveryGreetingListener associated to the DiscoveryManager - * - * @param dm - * DiscoveryManager to which this thread is associated - */ - public DiscoveryGreetingListener(DiscoveryManager dm) { - - super(dm); - - mesgsSameServerIDCount = 0; - - } - - /** - * @see java.lang.Runnable#run() - */ - public void run() { - // Set this to 0 so number of messages with the same server ID can be counted, - // must not receive more than 1 such message in a run. - mesgsSameServerIDCount = 0; - - // Join the group in order to receive multicast messages - join(); - - // Create the socket to be used for responding - try { - unicastSocket = new DatagramSocket(); - } catch (SocketException e3) { - logger.log(BasicLevel.ERROR, "Socket exception", e3); - return; - } - try { - while (notStopped) { - DatagramPacket datagram = null; - Object objReceived = null; - try { - datagram = getDatagram(RECEIVE_BUFFER_SIZE); - multicastSocket.receive(datagram); - objReceived = DiscoveryHelper.bytesToObject(datagram.getData()); - } catch (RuntimeException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - }catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - if (objReceived != null) { - // If received object is of type DiscGreeting - if (objReceived instanceof DiscGreeting) { - DiscGreeting request = (DiscGreeting) objReceived; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "DiscGreeting received on multicast:\n" - + request); - } - // If server ID in the message is the same as - // that of this instance and domain is the same, make - // sure that only 1 such message is encountered by - // the system: one from itself. - if (request != null - && request.getServerId().equals(this.serverId) - && request.getDomainName().equals( - this.domainName)) { - // Got a message with the same server ID and the same - // domain so up the count. - mesgsSameServerIDCount++; - if (mesgsSameServerIDCount > 1) { - // Trust the datagram packet itself for the - // source address. - InetAddress destAddress = datagram.getAddress(); - int destPort = request.getSourcePort(); - DiscGreeting msg = createDiscGreeting(false); - sendResponse(msg, destAddress, destPort); - } - - } - } - } - datagram = null; - } - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.ERROR, e); - } - } - /** - * Stop - */ - public void stop() { - Thread.interrupted(); - - } - -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingResponder.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingResponder.java deleted file mode 100644 index 7967f7d626..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/comm/DiscoveryGreetingResponder.java +++ /dev/null @@ -1,253 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.comm; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.SocketException; -import java.net.SocketTimeoutException; -import java.net.UnknownHostException; - -import org.ow2.jonas.discovery.base.DuplicateServerNameException; -import org.ow2.jonas.discovery.base.comm.DiscGreeting; -import org.ow2.jonas.discovery.multicast.manager.DiscoveryManager; -import org.ow2.jonas.discovery.multicast.utils.DiscoveryHelper; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.NetUtils; -import org.ow2.jonas.service.ServiceException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class sends a multicast message stating the servername and - * the port at which it will listen for messages. It listens at the - * unicast port for a pre-determined time (greetingTimeOut) and if - * it receives a message indicating that a server with the same ID - * already exists in the domain then it terminates the discovery service. - * - * @author Vivek Lakshmanan - * @version 1.0 - */ -public class DiscoveryGreetingResponder extends DiscoveryComm { - /** - * Used to recieve responses to the initial greeting message sent out on the multicast port. - */ - protected DatagramSocket recvUnicastSocket; - - /** - * Port to listen to for greeting responses. - */ - protected int greetingPort; - - /** - * Time out period to listen to greetingPort for replies. - */ - protected int greetingTimeOut; - - /** - * The greeting to be sent out identifying the server. - */ - private DiscGreeting greeting = null; - - /** - * logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * Constructs a DiscoveryGreetingResponder associated to the DiscoveryManager - * - * @param dm - * DiscoveryManager to which this instance is associated - */ - public DiscoveryGreetingResponder(DiscoveryManager dm) { - super(dm); - this.greetingPort = dm.getGreetingListeningPort(); - this.greetingTimeOut = dm.getGreetingAckTimeOut(); - } - - - /** - * Create a discovery greeting message - * - * @param startup - - * true: means that is a greeting message at the point of start - * up of the discovery service. false: means this is a reply to - * a previous greeting message. - * @return a Discovery Greeting message. - */ - protected DiscGreeting createDiscGreeting(boolean startup) { - String theHostAddress; - try { - theHostAddress = NetUtils.getLocalAddress(); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, "Unknown host", e); - return null; - } - - return new DiscGreeting(theHostAddress, this.greetingPort, - this.jonasName, this.domainName, startup, this.serverId); - } - - /** - * Handle the case where the received DiscGreeting indicates that a server - * with the same name already exists in the domain. - * - * @param msg - * a discovery greeting received. - * - * @throws DuplicateServerNameException - */ - private void handleReceivedMessage(DiscGreeting msg) - throws DuplicateServerNameException { - - if (logger.isLoggable(BasicLevel.ERROR)) { - logger.log(BasicLevel.ERROR, "A server with the given name already" - + " exists in the domain, received a rejection message: " - + msg); - } - stop(); - - } - - - /* (non-Javadoc) - * @see java.lang.Runnable#run() - */ - public void run() { - if(logger.isLoggable(BasicLevel.DEBUG)){ - logger.log(BasicLevel.DEBUG, "Sending the greeting."); - } - // Send the greeting out. - if (greeting != null) { - sendNotif(greeting); - } - } - - - /** - * - * Creates a new thread to send the greeting message and listens for - * rejection messages in response. - * @throws DuplicateServerNameException - If a server with the same ID - * is found in the domain. - */ - public void handleGreeting() throws DuplicateServerNameException { - // Join the group in order to receive multicast messages - join(); - // Create the greeting representing a start up. - greeting = createDiscGreeting(true); - - // Create a unicast socket to receive responses - try { - recvUnicastSocket = new DatagramSocket(greetingPort); - } catch (SocketException e2) { - logger.log(BasicLevel.ERROR, - "DiscComm : Unable to create a Datagram socket", e2); - // If the port is used throw a service exception. - throw new ServiceException("Unable to create a datagram socket on port " + greetingPort + - " to listen for rejections. Port is still in use."); - } - - try { - // Set timeout for reading from the socket. If responses take longer - // than the timeout set, they will now be ignored. - recvUnicastSocket.setSoTimeout(greetingTimeOut); - - // Dont wait for messages beyond a pre-defined period of lapsed time. - long lastTime = greetingTimeOut + System.currentTimeMillis(); - - // Create thread which will send the greeting message out. - Thread sender = new Thread(this, "greeting sender"); - - boolean msgSent = false; - - // Listen for a specified amount of time to see if there - // is a server already present with the ID used. - while ((notStopped) && System.currentTimeMillis() <= lastTime) { - // Send the discovery message out in a seperate thread - // if it has not been sent. - if(!msgSent){ - sender.start(); - msgSent = true; - } - // TODO: Should ideally be listening in a seperate thread and sending - // the discovery message shortly afterwards. - DatagramPacket datagram = null; - Object objReceived = null; - try { - datagram = getDatagram(RECEIVE_BUFFER_SIZE); - recvUnicastSocket.receive(datagram); - objReceived = DiscoveryHelper.bytesToObject(datagram.getData()); - } catch (IOException e) { - if (e instanceof SocketTimeoutException) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "No rejections received within the set timeout period: " - + greetingTimeOut - + " ms. Assuming the server ID used is unique in the domain." - + " The timeout period can be changed under jonas.properties:" - + " jonas.service.discovery.greeting.timeout"); - } - } else { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - - }catch (RuntimeException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - if (objReceived != null) { - if (objReceived instanceof DiscGreeting) { - DiscGreeting greet = (DiscGreeting) objReceived; - // Trust the datagram packet instead of the message for address. - greet.setSourceAddress(datagram.getAddress().getHostAddress()); - handleReceivedMessage(greet); - } - } - datagram = null; - } - - } catch (SocketException e) { - logger.log(BasicLevel.ERROR, - "DiscoveryGreetingResponder : Socket closed", e); - notStopped = false; - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.ERROR, - "DiscoveryGreetingResponder ClassNotFoundException ", e); - } - - } - /** - * Throw the run time exception to state that a server with the same - * name already exists. - */ - public void stop() { - throw new DuplicateServerNameException(); - } - -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/DiscoveryListener.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/DiscoveryListener.java deleted file mode 100644 index 8f1634884d..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/DiscoveryListener.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.enroller; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.InetAddress; -import java.net.MulticastSocket; -import java.net.UnknownHostException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.discovery.base.comm.DiscEvent; -import org.ow2.jonas.discovery.multicast.utils.DiscoveryHelper; -import org.ow2.jonas.lib.management.domain.DomainMonitor; -import org.ow2.jonas.lib.util.Log; - -/** - * @author Takoua Abdellatif - * @version 1.0 - */ -public class DiscoveryListener implements Runnable { - /** - * Management notification type for discovery events - */ - public static final String DISCOVERY_TYPE = "jonas.management.discovery"; - - private static int RECEIVE_BUFFER_SIZE = 1024; - /** - * My enroller's listening port - */ - private int port; - /** - * My enroller's multicast IP address - */ - private InetAddress groupAddress; - /** - * Time-to-live for multicatst packets - */ - private int ttl = 1; // why 1 ?? - /** - * Used to receive multicasted discovery events - */ - private MulticastSocket multicastSocket; - /** - * Socket state - */ - private boolean notStopped = true; - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * Constructs a DiscoveryListener associated to the Enroller - * @param enroller Enroller to which this thread is associated - */ - public DiscoveryListener(Enroller enroller) { - this.port = enroller.getListeningPort(); - try { - this.groupAddress = InetAddress.getByName(enroller.getListeningIp()); - this.ttl = enroller.getTimeToLive(); - } catch (UnknownHostException e) { - logger.log(BasicLevel.ERROR, e); - } - } - - /** - * Creates a MulticastSocket and joins the group of multicas host - * identified by the InetAddress groupAddress - */ - private void join() { - try { - multicastSocket = new MulticastSocket(port); - multicastSocket.setTimeToLive(ttl); - multicastSocket.joinGroup(groupAddress); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "multicast ip address is " - + groupAddress); - logger.log(BasicLevel.DEBUG, "multicast port is " + port); - } - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "io problem"); - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private DatagramPacket getDatagram(int length) { - return new DatagramPacket(new byte[length], length); - } - - public void run() { - // Join the group in order to receive multicast messages - join(); - try { - while (notStopped) { - DatagramPacket datagram = null; - Object objReceived = null; - try { - datagram = getDatagram(RECEIVE_BUFFER_SIZE); - multicastSocket.receive(datagram); - objReceived = DiscoveryHelper.bytesToObject(datagram.getData()); - } catch (RuntimeException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - }catch (IOException e) { - logger.log(BasicLevel.DEBUG, "Host received other packet than DataGramSocket packet. That caused following Exception: \n"+e); - objReceived = null; - } - if (objReceived != null) { - if (objReceived instanceof DiscEvent) { - // Treat DiscEvents - DiscEvent event = (DiscEvent) objReceived; - // Trust the datagram packet for source address instead of the message. - event.setSourceAddress(datagram.getAddress().getHostAddress()); - DomainMonitor dm = DomainMonitor.getInstance(); - if (dm == null) { - logger.log(BasicLevel.WARN, "No DomainMonitor"); - } else { - dm.discoveryNotification(event); - } - } - } - datagram = null; - } - } catch (ClassNotFoundException e) { - logger.log(BasicLevel.DEBUG, "Following exception ocuured in DiscoveryListener: "+e); - } - } - - - public void stopListener() { - notStopped = false; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/Enroller.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/Enroller.java deleted file mode 100644 index 19d6c86b10..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/Enroller.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - */ - -package org.ow2.jonas.discovery.multicast.enroller; - -import javax.management.MBeanRegistration; -import javax.management.MBeanServer; -import javax.management.ObjectName; - -/** - * In charge of waiting for starting or stopping notifications and notifies the - * appropriate listeners. - * - * @author Takoua Abdellatif - * @version 1.0 - */ -public class Enroller implements MBeanRegistration, EnrollerMBean { - - /** - * listeningPort for multicast socket creation - */ - private int listeningPort; - /** - * listeningIp for multicast socket creation - */ - private String listeningIp = null; - private ObjectName myOn; - /** - * Thread associated to dl - */ - private Thread discoveryListener = null; - /** - * Runnable object that listens on multicast address notifications sent - * by the servers in the management domain - */ - private DiscoveryListener dl = null; - private int ttl =1; - - public Enroller (int listeningPort, String listeningIp) { - this.listeningIp = listeningIp; - this.listeningPort = listeningPort; - } - - /** - * @see javax.management.MBeanRegistration#preRegister(javax.management.MBeanServer, - * javax.management.ObjectName) - */ - public ObjectName preRegister(MBeanServer mbeanServer, ObjectName on) - throws Exception { - this.myOn = on; - return myOn; - } - - /** - * @see javax.management.MBeanRegistration#postRegister(java.lang.Boolean) - */ - public void postRegister(Boolean arg0) { - start(); - } - - /** - * - * @see javax.management.MBeanRegistration#preDeregister() - */ - public void preDeregister() throws Exception { - // stop the listening thread - dl.stopListener(); - discoveryListener.interrupt(); - discoveryListener= null; - } - - /** - * - * @see javax.management.MBeanRegistration#postDeregister() - */ - public void postDeregister() { - - } - - /** - */ - public int getListeningPort() { - return listeningPort; - } - - /** - */ - public void setListeningPort(int listeningPort) { - this.listeningPort = listeningPort; - - } - - /** - */ - public String getListeningIp() { - return listeningIp; - } - - /** - */ - public void setListeningIp(String listeningIp) { - this.listeningIp = listeningIp; - - } - - /** - */ - public void setTimeToLive(int ttl) { - this.ttl = ttl; - - } - - /** - */ - public int getTimeToLive() { - return ttl; - } - - /** - */ - public void start() { - // creates an instance of the Discovery communication class - dl = new DiscoveryListener(this); - - if (discoveryListener == null) - discoveryListener = new Thread(dl, "discoveryListener"); - discoveryListener.start(); - - } - - /** - */ - public void stop() { - dl.stopListener(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/EnrollerMBean.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/EnrollerMBean.java deleted file mode 100644 index 0c0597ff94..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/enroller/EnrollerMBean.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - */ -package org.ow2.jonas.discovery.multicast.enroller; - -/** - * - * @author Takoua Abdellatif - * @version 1.0 - */ -public interface EnrollerMBean { - /** - * gets the port on which the Enroller is listening for a discovery - * request. - * - * @return notification port. - */ - int getListeningPort(); - - /** - * sets the port on which the Enroller is listening. - * @param listeningPort port on which the Enroller is listening. - */ - void setListeningPort(int listeningPort); - - /** - * @return IP address the Enroller uses. - */ - String getListeningIp(); - - /** - * sets the IP address the listening manager uses. - * @param listeningIP address on which the Enroller is listening. - */ - void setListeningIp(String listeningIp); - - /** - * sets the time to live value to ttl. Defines the number of hops the - * multicast socket does. - * - * @param ttl time to live - */ - void setTimeToLive(int ttl); - - /** - * gets the time to live of the multicast socket. - * - * @return ttl value. - */ - int getTimeToLive(); - - /** - * starts the listening task on the listeningPort and listening Ip defined - * with the parameters. - */ - void start(); - - /** - * stops the listening task - */ - void stop(); -} diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManager.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManager.java deleted file mode 100644 index c5f9c50c6d..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManager.java +++ /dev/null @@ -1,371 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.manager; - -/** - * @author Takoua Abdellatif - */ -import javax.management.JMException; -import javax.management.MBeanRegistration; -import javax.management.MBeanServer; -import javax.management.MBeanServerNotification; -import javax.management.Notification; -import javax.management.NotificationListener; -import javax.management.ObjectName; - -import org.ow2.jonas.discovery.base.DuplicateServerNameException; -import org.ow2.jonas.discovery.multicast.comm.DiscoveryComm; -import org.ow2.jonas.discovery.multicast.comm.DiscoveryGreetingListener; -import org.ow2.jonas.discovery.multicast.comm.DiscoveryGreetingResponder; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * DiscoveryManager goal is to listen to a well known and reconfigurable - * IpAddress and to give appropriate JMXURL to manage remotely Jonas server. - * - * @author Takoua Abdellatif - * @author Vivek Lakshmanan - * @version 1.0 - * - */ -public class DiscoveryManager implements DiscoveryManagerMBean, - MBeanRegistration, NotificationListener { - - private static Logger logger = Log.getLogger(Log.JONAS_DISCOVERY_PREFIX); - - /** - * greetingListeningPort unicast port to listen to for - * responses to greeting message - */ - private int greetingListeningPort; - - /** - * listeningPort for multicast socket creation - */ - private int listeningPort; - - /** - * listeningIp for multicast socket creation - */ - private String listeningIp; - - /** - * Runnable object that implements multicast communication with the servers - * in the management domain - */ - private DiscoveryComm dc; - - private DiscoveryGreetingResponder dgr; - - private DiscoveryGreetingListener dgl; - - /** - * Thread associated to DiscoveryManager - */ - private Thread commDaemon; - - /** - * Thread associated with DiscoveryGreetingListener. This will continue - * listening on the multicast port throughout the life of the server for - * greeting messages from new servers. - */ - private Thread discoveryGreetingListenerThread; - - /** - * Current MBean Server - */ - private MBeanServer mbeanServer; - - private ObjectName myOn; - - private int ttl = 1; - - private int greetingAckTimeOut; - - private String jonasName = null; - - private String domainName = null; - - private String serverId = null; - - private String[] urls = null; - - /** - * @param serverId TODO - * @param listeningPort - * Port to listen to for multicast messages. - * @param listeningIp - * IP where the multicast group will listen. - * @param greetingListeningPort - * Port to listen to greeting replies on. A message on this port - * signifies that a server already in the group has the same - * server name as used by this instance. - * @param greetingAckTimeOut - * The amount of time the server will listen to - * greetingListeningPort for replies. - */ - public DiscoveryManager(String serverId, int listeningPort, - String listeningIp, int greetingListeningPort, int greetingAckTimeOut) { - this.serverId = serverId; - this.listeningIp = listeningIp; - this.listeningPort = listeningPort; - this.greetingListeningPort = greetingListeningPort; - this.greetingAckTimeOut = greetingAckTimeOut; - } - - /* - */ - public void start() { - - dgl = new DiscoveryGreetingListener(this); - dgr = new DiscoveryGreetingResponder(this); - - // Start greeting listener and greeting responder in this order. - if (discoveryGreetingListenerThread == null) { - discoveryGreetingListenerThread = new Thread(dgl, "GreetingListener"); - } - discoveryGreetingListenerThread.start(); - - try { - // We dont need this to happen inside a thread since it is a - // serial operation, this will only listen for greetingAckTimeOut - // and listen for rejection messages. - dgr.handleGreeting(); - } catch (DuplicateServerNameException e) { - // A server with the same servername already exists. - logger.log(BasicLevel.ERROR, - "Discovery manager failed to start due to a pre-existing" - + " server in the domain with the same ID.", e); - throw e; - } - - // creates an instance of the Discovery communication class - dc = new DiscoveryComm(this); - if (commDaemon == null) { - commDaemon = new Thread(dc, "commDaemon"); - } - commDaemon.start(); - } - - /** - */ - public int getGreetingAckTimeOut() { - return greetingAckTimeOut; - - } - - /** - */ - public void setGreetingAckTimeOut(int greetingAckTimeOut) { - this.greetingAckTimeOut = greetingAckTimeOut; - - } - - /** - */ - public int getGreetingListeningPort() { - return greetingListeningPort; - - } - - /** - */ - public void setGreetingListeningPort(int greetingListeningPort) { - this.greetingListeningPort = greetingListeningPort; - - } - - /** - */ - public int getListeningPort() { - return listeningPort; - } - - /** - */ - public void setListeningPort(int listeningPort) { - this.listeningPort = listeningPort; - - } - - /** - */ - public String getListeningIp() { - return listeningIp; - } - - /** - */ - public void setListeningIp(String listeningIp) { - this.listeningIp = listeningIp; - - } - - /** - */ - public void setTimeToLive(int ttl) { - this.ttl = ttl; - } - - /** - */ - public int getTimeToLive() { - return this.ttl; - } - - /** - * @see javax.management.MBeanRegistration#preRegister(javax.management.MBeanServer, - * javax.management.ObjectName) - */ - public ObjectName preRegister(MBeanServer mbeanServer, ObjectName on) - throws Exception { - // set mbeanServer - this.mbeanServer = mbeanServer; - this.myOn = on; - - return myOn; - } - - /** - * @see javax.management.MBeanRegistration#postRegister(java.lang.Boolean) - */ - public void postRegister(Boolean arg0) { - // Add discovery manager as a listener of the delegate object to receive - // unregistration notification of the j2EEServer. - ObjectName delegate; - try { - delegate = new ObjectName("JMImplementation:type=MBeanServerDelegate"); - mbeanServer.addNotificationListener(delegate, this, null, null); - } catch (JMException e) { - e.printStackTrace(); - } - } - - /** - * @see javax.management.MBeanRegistration#preDeregister() - */ - public void preDeregister() throws Exception { - // stop the Discovery Manager - stop(); - } - - /** - * @see javax.management.MBeanRegistration#postDeregister() - */ - public void postDeregister() { - - } - - /** - * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, - * java.lang.Object) - */ - public void handleNotification(Notification notification, Object handback) { - if (notification.getType().equals( - MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) { - ObjectName notificationSender = ((MBeanServerNotification) notification) - .getMBeanName(); - ObjectName j2eeServerName = J2eeObjectName.J2EEServer(domainName, - jonasName); - if (notificationSender.equals(j2eeServerName)) { - // If DiscoveryComm has been created then stop it. - // If the discovery greeting checks passed then dc != null. - if(dc != null) { - dc.stop(); - } - - } - } - } - - /** - * @return jonasName The jonasName. - */ - public String getJonasName() { - return jonasName; - } - - /** - * @param jonasName - * The jonasName to set. - */ - public void setJonasName(String jonasName) { - this.jonasName = jonasName; - } - - /** - * @return jonasName The domain name. - */ - public String getDomainName() { - return domainName; - } - - /** - * @param domainNamle - * The domainName to set. - */ - public void setDomainName(String domainNamle) { - this.domainName = domainNamle; - } - - /** - * @param urls - * The urls. - */ - public String[] getUrls() { - return urls; - } - - /** - * @param urls - * The urls to set. - */ - public void setUrls(String[] urls) { - this.urls = urls; - } - - /** - * Stop - */ - public void stop() { - // dc is null if a DuplicateServerNameException is thrown - // at start up time, so do not send a notification. - if (dc != null) { - dc.stop(); - } - dgl.stop(); - } - - public String getServerId() { - return serverId; - } - - public void setServerId(String serverId) { - this.serverId = serverId; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManagerMBean.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManagerMBean.java deleted file mode 100644 index 85ad0fc022..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/manager/DiscoveryManagerMBean.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * - */ - -package org.ow2.jonas.discovery.multicast.manager; - -/** - * @author Takoua Abdellatif - * @version 1.0 - */ -public interface DiscoveryManagerMBean { - - /** - * gets the time out period within which the host will listen for acknowledgement messages after sending a greeting. - * - * @return time out period within which the host will listen for acknowledgement messages after sending a greeting. - */ - public int getGreetingAckTimeOut(); - - /** - * sets the time out period within which the host will listen for acknowledgement messages after sending a greeting. - */ - public void setGreetingAckTimeOut(int listeningPort); - - /** - * gets the port on which the DiscoveryManager is listening for a discovery greeting response. - * - * @return port to listen to for greeting responses. - */ - public int getGreetingListeningPort(); - - /** - * sets the port on which the DiscoveryManager is listening for a discovery greeting response. - */ - public void setGreetingListeningPort(int listeningPort); - - - /** - * gets the port on which the DiscoveryManager is listening for a discovery - * request. - * - * @return notification port. - */ - public int getListeningPort(); - - /** - * sets the port on which the DiscoveryManager is listening. - */ - public void setListeningPort(int listeningPort); - - /** - * @return IP address the DiscoveryManager uses. - */ - public String getListeningIp(); - - /** - * sets the IP address the listening manager uses. - */ - public void setListeningIp(String listeningIp); - - /** - * sets the time to live value to ttl. Defines the number of hops the - * multicast socket does. - * - * @param ttl - */ - public void setTimeToLive(int ttl); - - /** - * gets the time to live of the multicast socket. - * - * @return ttl value. - */ - public int getTimeToLive(); - - /** - * starts the listening task on the listeningPort and listening Ip defined - * with the parameters. - */ - void start(); - - void stop(); -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/utils/DiscoveryHelper.java b/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/utils/DiscoveryHelper.java deleted file mode 100644 index 8d54de4c5d..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/java/org/ow2/jonas/discovery/multicast/utils/DiscoveryHelper.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation; either version 2.1 of the License, or any later - * version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.discovery.multicast.utils; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; - -import org.ow2.jonas.discovery.base.DiscHelper; -import org.ow2.jonas.discovery.base.comm.DiscMessage; - -/** - * This class helps creating a byte[] to be sent in a datagram when sending a DiscMessage, and helps - * reading the sent DiscMessage on receiving an object when this object is actually a DiscMessage. - * @author Adriana Danes - */ -public class DiscoveryHelper extends DiscHelper{ - @SuppressWarnings("unused") - private static int DISC_GREETING = 2; - /** - * - */ - private static int RECEIVE_BUFFER_SIZE = 1024; - - /** - * Send a discovery message to a destination via a datagram socket (UDP). - * The message is instance of DiscMessage class or one of its subclasses - * (DiscEvent, DiscGreeting). - * The socket may be simple or multicast. - * @param msg object to be sent - * @param socket sending point - * @param destAddress destination address (maybe a multicast address) - * @param destPort destination port number - * @throws IOException if an I/O error occurs during sending, - * or if can't create an ObjectOutputStream to write into it the message to send - */ - @SuppressWarnings("unused") - private void sendDiscoveryMessage(DiscMessage msg, DatagramSocket socket - , InetAddress destAddress, int destPort) throws IOException { - - byte[] messageBytes = objectToBytes(msg); - // Create datagram packet for sending - DatagramPacket packet = new DatagramPacket(messageBytes, messageBytes.length - , destAddress, destPort); - sendPacket(socket, packet); - } - - /** - * Receive a discovery message via a datagram socket (UDP). - * The message is instance of DiscMessage class or one of its subclasses - * (DiscEvent, DiscGreeting). - * The socket may be simple or multicast which were joind by the caller. - * @param socket receiving point - * @return received object - * @throws IOException if an I/O error occurs during receiving, - * or if can't create an ObjectInputStream to read the object into it. - * @throws ClassNotFoundException Class of a serialized object cannot be found - */ - @SuppressWarnings("unused") - private DiscMessage receiveDiscoveryMessage(DatagramSocket socket) throws IOException, ClassNotFoundException, RuntimeException { - // Create datagram for receiving - DatagramPacket packet = new DatagramPacket(new byte[RECEIVE_BUFFER_SIZE], RECEIVE_BUFFER_SIZE); - receivePacket(socket, packet); - Object ret = null; - try { - ret = bytesToObject(packet.getData()); - }catch (RuntimeException e) { - throw new RuntimeException("The host has received other packet than DatagramSocket packet. That caused following exception: "+e); - }catch (IOException e) { - throw new IOException(" The host has received other packet than DatagramSocket packet. That caused following exception: "+e); - } - return (DiscMessage) ret; - } - /** - * - * @param socket May be a unicast DatagramSocket or a MulticastSocket - * @param packet datagram packet to send - * @throws IOException if an I/O error occurs during sending - */ - private void sendPacket(DatagramSocket socket, DatagramPacket packet) throws IOException { - socket.send(packet); - } - /** - * - * @param socket May be a unicast DatagramSocket or a MulticastSocket which the caller joind - * @param packet datagram packet to send - * @throws IOException if an I/O error occurs during receiving - */ - private void receivePacket(DatagramSocket socket, DatagramPacket packet) throws IOException { - socket.receive(packet); - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/properties/jonas-multicast.properties b/jonas/modules/services/jonas-discovery/multicast/core/src/main/properties/jonas-multicast.properties deleted file mode 100644 index 84bd894ea1..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/properties/jonas-multicast.properties +++ /dev/null @@ -1,18 +0,0 @@ -# -##################### Properties for multicast impl. -# -jonas.service.discovery.class org.ow2.jonas.discovery.multicast.MulticastDiscoveryServiceImpl -# For a master server, configure the client source port with this property -jonas.service.discovery.source.port=9888 -jonas.service.discovery.ttl=1 -jonas.service.discovery.multicast.address=224.224.224.224 -jonas.service.discovery.multicast.port=9080 - -# A multicast greeting message is sent out when discovery service is started. -# The starting server listens at the port jonas.service.discovery.greeting.port -# (default 9899) for a response for jonas.service.discovery.greeting.timeout miliseconds -# (default 1000 ms). If a pre-existing server has the same server name as this one, -# this server's discovery service will be terminated. -# Uncomment these two lines for multicast discovery -jonas.service.discovery.greeting.port=9899 -jonas.service.discovery.greeting.timeout=1000 diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/META-INF/jonas-discovery-multicast-core.bnd b/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/META-INF/jonas-discovery-multicast-core.bnd deleted file mode 100644 index 58a3a96d3c..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/META-INF/jonas-discovery-multicast-core.bnd +++ /dev/null @@ -1,26 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.discovery.multicast.* diff --git a/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/metadata.xml deleted file mode 100644 index f854969641..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-discovery/multicast/pom.xml b/jonas/modules/services/jonas-discovery/multicast/pom.xml deleted file mode 100644 index dc3e5e6fe7..0000000000 --- a/jonas/modules/services/jonas-discovery/multicast/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-discovery - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-discovery-multicast - pom - JOnAS :: Services :: Discovery :: Multicast - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-discovery/pom.xml b/jonas/modules/services/jonas-discovery/pom.xml deleted file mode 100644 index baf7f352ff..0000000000 --- a/jonas/modules/services/jonas-discovery/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-discovery - JOnAS :: Services :: Discovery - pom - - base - multicast - jgroups - - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-domain - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - diff --git a/jonas/modules/services/jonas-ear/addon/pom.xml b/jonas/modules/services/jonas-ear/addon/pom.xml deleted file mode 100644 index 1cf9e69b12..0000000000 --- a/jonas/modules/services/jonas-ear/addon/pom.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - jonas-ear - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: EAR :: Addon - jonas-ear-addon - pom - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - ear-addon-deployment-plan - - - org.ow2.jonas - jonas-generators-base - ${project.version} - - - org.ow2.jonas - jonas-generators-clientstubs - ${project.version} - - - org.ow2.jonas - jonas-ear-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - addon-deployment-plan - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-ear-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/ear-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/addon/src/main/assembly/assembly.xml b/jonas/modules/services/jonas-ear/addon/src/main/assembly/assembly.xml deleted file mode 100644 index 9289386cb1..0000000000 --- a/jonas/modules/services/jonas-ear/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - ear-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/configuration-resources/addon-deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/jonas-ear/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index ca8f4bd6cb..0000000000 --- a/jonas/modules/services/jonas-ear/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - ear - - - JOnAS EAR Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.ear - - - - - - org.ow2.jonas.ear.internal.JOnASEARService - - true - - false - - false - - diff --git a/jonas/modules/services/jonas-ear/core/pom.xml b/jonas/modules/services/jonas-ear/core/pom.xml deleted file mode 100644 index 037f47365c..0000000000 --- a/jonas/modules/services/jonas-ear/core/pom.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - jonas-ear - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ear-core - bundle - JOnAS :: Services :: EAR :: Core - - - - org.ow2.bundles - ow2-util-url - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-security-propagation - ${project.version} - - - org.ow2.jonas - jonas-generators-clientstubs - ${project.version} - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - ear-deployment-plan - - - org.ow2.jonas - jonas-ear-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/AppClientModuleInfo.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/AppClientModuleInfo.java deleted file mode 100644 index 12abcffb84..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/AppClientModuleInfo.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -public class AppClientModuleInfo { - private String moduleName = null; - private String fileName = null; - private String deploymentDesc = null; - private String jonasDeploymentDesc = null; - - public AppClientModuleInfo(final String moduleName, final String fileName, final String deploymentDesc, final String jonasDeploymentDesc) { - this.moduleName = moduleName; - this.fileName = fileName; - this.deploymentDesc = deploymentDesc; - this.jonasDeploymentDesc = jonasDeploymentDesc; - } - - public String getDeploymentDesc() { - return deploymentDesc; - } - - public String getFileName() { - return fileName; - } - - public String getJonasDeploymentDesc() { - return jonasDeploymentDesc; - } - - public String getModuleName() { - return moduleName; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EARModule.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EARModule.java deleted file mode 100644 index 15b898c90e..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EARModule.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; - -/** - * Class representing an Ear structure which is composed of modules inside this - * archive and about the current URL or unpacked folder, deployment descriptor. - * @author Florent Benoit - */ -public class EARModule { - - /** - * EAR deployable. - */ - private EARDeployable earDeployable = null; - - /** - * Deployment descriptor. - */ - private String deploymentDescriptor = null; - - /** - * ClassLoader. - */ - private ClassLoader classLoader = null; - - /** - * FilteringClassLoader. - */ - private FilteringClassLoader filteringClassLoader = null; - - - /** - * Construct an Ear structure with the specified files. - * @param earDeployable name of the working copy of the ear - * @param deploymentDescriptor the deployment descriptor of the file - */ - public EARModule(final EARDeployable earDeployable, final String deploymentDescriptor) { - this.earDeployable = earDeployable; - if (deploymentDescriptor == null) { - this.deploymentDescriptor = ""; - } else { - this.deploymentDescriptor = deploymentDescriptor; - } - } - - /** - * Return the deployable of this Ear. - * @return the deployable of this Ear - */ - public EARDeployable getEARDeployable() { - return earDeployable; - } - - /** - * @return the deployment descriptor of this EAR. - */ - public String getDeploymentDescriptor() { - return deploymentDescriptor; - } - - /** - * Return the classloader of this Ear. - * @return the classloader of this Ear - */ - public ClassLoader getClassLoader() { - return classLoader; - } - - /** - * Sets the classloader - */ - public void setClassLoader(final ClassLoader classLoader) { - this.classLoader = classLoader; - } - - /** - * Return the FilteringClassLoader of this Ear. - * @return the FilteringClassLoader of this Ear - */ - public FilteringClassLoader getFilteringClassLoader() { - return filteringClassLoader; - } - - /** - * Sets the FilteringClassLoader - */ - public void setFilteringClassLoader(final FilteringClassLoader filteringClassLoader) { - this.filteringClassLoader = filteringClassLoader; - } - -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarCleanTask.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarCleanTask.java deleted file mode 100644 index a72cd3a199..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarCleanTask.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -import org.ow2.jonas.ear.EarService; -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS EAR unused directory clean task class. This class provides a way for removing directories which are inconsistent - * directories for ear files. - * @author Florent BENOIT - * @author Benoit PELLETIER - */ -public class EarCleanTask extends AbsCleanTask { - - /** - * {@link IDeployerLog} of the task. - */ - private IDeployerLog deployerLog = null; - - /** - * {@link EarService} reference. - */ - private EarService earService; - - /** - * Construct a new EAR clean task. - * @param earService EarService reference - * @param deployerLog DeployerLog of the task - */ - public EarCleanTask(final EarService earService, final IDeployerLog deployerLog) { - this.earService = earService; - this.deployerLog = deployerLog; - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException if it fails - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - // Check if the EAR file is deployed - return earService.isEarDeployedByWorkName(logEntry.getCopy().getName()); - } - - /** - * {@inheritDoc} - * @see org.ow2.jonas.lib.work.AbsCleanTask#getDeployerLog() - */ - @Override - public IDeployerLog getDeployerLog() { - return deployerLog; - } -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarDeployer.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarDeployer.java deleted file mode 100644 index 0d371c8919..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/EarDeployer.java +++ /dev/null @@ -1,1953 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.security.Policy; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.security.jacc.PolicyConfiguration; -import javax.security.jacc.PolicyConfigurationFactory; -import javax.security.jacc.PolicyContextException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.EZBContainerException; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.easybeans.api.naming.EZBNamingStrategy; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.easybeans.resolver.api.EZBApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBContainerJNDIResolver; -import org.ow2.jonas.Version; -import org.ow2.jonas.deployment.client.wrapper.ClientManagerWrapper; -import org.ow2.jonas.deployment.ear.EarDeploymentDesc; -import org.ow2.jonas.deployment.ear.EarDeploymentDescException; -import org.ow2.jonas.deployment.ear.wrapper.EarManagerWrapper; -import org.ow2.jonas.deployment.ejb.wrapper.EjbManagerWrapper; -import org.ow2.jonas.deployment.web.wrapper.WebManagerWrapper; -import org.ow2.jonas.ear.EarServiceException; -import org.ow2.jonas.ejb2.EJBService; -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.genclientstub.ClientStubGen; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.security.mapping.JPolicyUserRoleMapping; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.management.ServiceManager; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.jonas.resource.ResourceService; -import org.ow2.jonas.resource.ResourceServiceException; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.ws.jaxrpc.IJAXRPCService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.CARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.EJB21Deployable; -import org.ow2.util.ee.deploy.api.deployable.EJB3Deployable; -import org.ow2.util.ee.deploy.api.deployable.EJBDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.LibDeployable; -import org.ow2.util.ee.deploy.api.deployable.RARDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.file.FileUtils; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * This deployer will deploy EAR by using the other services. - * @author Florent BENOIT Contributors: S. Ali Tokmen (fixes for EARs with spaces on Windows, versioning) - * @author Mohammed Boukada (multitenant) - */ -public class EarDeployer extends AbsDeployer { - - /** - * Folder to create in tmp folder. - */ - public static final String DEFAULT_FOLDER = "JOnAS-Deployer"; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(EarDeployer.class); - - /** - * Reference to the JAX-RPC service. - */ - private IJAXRPCService jaxrpcService = null; - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * Reference to the Resource service. - */ - private ResourceService resourceService = null; - - /** - * Reference to the EJB 2.1 service. - */ - private EJBService ejb21Service = null; - - /** - * Reference to the EJB 3.0 service (optional). - */ - private IEasyBeansService ejb3Service = null; - - /** - * Reference to the Web Container Service. - */ - private JWebContainerService webContainerService = null; - - /** - * Application Classloader that needs to be used for all EARs. - */ - private ClassLoader appsClassLoader; - - /** - * List of deployed ear. - */ - private Map ears = null; - - /** - * Server properties. - */ - private ServerProperties serverProperties = null; - - /** - * Versioning service. - */ - private VersioningService versioningService; - - /** - * Versioning service. - */ - private MultitenantService multitenantService; - - /** - * Service manager. - */ - private ServiceManager serviceManager; - - /** - * EAR Work directory. - */ - private String appsWorkDirectory = null; - - /** - * EAR WebApps Work directory. - */ - private String webappsWorkDirectory = null; - - /** - * The name of the property used in work directory for EAR webapps (in ear case). - */ - protected static final String INEAR_WORK_WEBAPPS_DIR_SUFFIX = "ear"; - - /** - * Embedded server linked to this deployer. - */ - private EZBServer embedded = null; - - /** - * Reference to the {@link DeployerLog} of the EAR service. - */ - private DeployerLog deployerLog; - - /** - * WSDL files are located in META-INF/wsdl directory . - */ - private static final String WSDL_DIRECTORY = "META-INF/wsdl/"; - - /** - * Enable call to GenClientStub. - */ - private boolean genClientStubEnabled = false; - - /** - * Use a child classLoader for EJB3. - */ - private boolean useEJB3ChildClassloader = false; - - /** - * Build a new instance of the EAR deployer. - */ - public EarDeployer() { - this.ears = new HashMap(); - } - - /** - * @return the embedded instance used by this server. - */ - public EZBServer getEmbedded() { - return embedded; - } - - /** - * Receive Embedded instance for this deployer. - * @param embedded the given instance of the embedded server. - */ - public void setEmbedded(final EZBServer embedded) { - this.embedded = embedded; - } - - /** - * Enable GenClientStub. - */ - public void enableGenClientStub() { - this.genClientStubEnabled = true; - } - - /** - * Enable the use of a child classloader for EJB3s. - */ - public void useEJB3ChildClassloader() { - this.useEJB3ChildClassloader = true; - } - - /** - * Apply GenClientStub of the given archive. - * @param deployable the deployable to use - * @return the modified deployable or the original deployable if WSGen has not been launched. - * @throws DeployerException if WSGen cannot be applied. - */ - protected EARDeployable applyGenClientStubIfNeeded(final EARDeployable deployable) throws DeployerException { - - // Do nothing if not enabled - if (!genClientStubEnabled) { - return deployable; - } - - // Ugly but who knows?... - try { - Thread.sleep(150); - } catch (InterruptedException e1) { - logger.error("Cannot sleep in GenClientStub"); - } - // Execute GenClientStub in an execution block - IExecution exec = new IExecution() { - public EARDeployable execute() throws Exception { - EARDeployable earDeployable = deployable; - - ClientStubGen stubGen = new ClientStubGen(); - Config config = new Config(); - // Ensure path is correct (no %20 for spaces) - String inputName = URLUtils.urlToFile(deployable.getArchive().getURL()).getPath(); - config.setInputname(inputName); - config.setOut(new File(getServerProperties().getWorkDirectory(), "genclientstub")); - - try { - String path = stubGen.execute(config, deployable); - // Check if a new archive has been created - if (stubGen.isInputModified()) { - IArchive archive = ArchiveManager.getInstance().getArchive(new File(path)); - // Build a new deployable with the new archive - EARDeployable newDeployable = EARDeployable.class.cast(DeployableHelper.getDeployable(archive)); - File folder = new File(appsWorkDirectory, getServerProperties().getServerName()); - String archiveName = URLUtils.urlToFile(deployable.getArchive().getURL()).getName(); - earDeployable = UnpackDeployableHelper.unpack(newDeployable, folder, archiveName, false); - earDeployable.setOriginalDeployable(deployable.getOriginalDeployable()); - } - } catch (Throwable e) { - logger.error("Cannot execute GenClientStub on archive '" + deployable.getArchive() + "'", e); - } finally { - FileUtils.delete(config.getOut()); - } - try { - Thread.sleep(150); - } catch (InterruptedException e1) { - logger.error("Cannot sleep in GenClientStub"); - } - return earDeployable; - } - }; - - // Execute - ExecutionResult result = null; - try { - result = RunnableHelper.execute(LoaderManager.getInstance().getExternalLoader(), exec); - } catch (Exception e) { - throw new DeployerException("Cannot get the 'external' ClassLoader", e); - } - - // Throw a DeployerException if needed - if (result.hasException()) { - throw new DeployerException(result.getException().getMessage(), result.getException()); - } - - return result.getResult(); - - } - - /** - * Apply WSGen of the given archive. - * @param deployable the deployable to use - * @throws DeployerException if WSGen cannot be applied. - */ - private void applyWSGenIfNeeded(final EARDeployable deployable) throws DeployerException { - // JAX-RPC service started ? - if (jaxrpcService == null) { - logger.debug("The JAX-RPC service is not present, no need to call WSGen"); - return; - } - - // Auto WsGen enabled ? - if (!jaxrpcService.isAutoWsGenEngaged()) { - logger.debug("Automatic WsGen is not enabled, no need to call WSGen"); - return; - } - - // Check version in manifest - String jonasVersionWsGen = deployable.getArchive().getMetadata().get("WsGen-JOnAS-Version"); - if (Version.getNumber().equals(jonasVersionWsGen)) { - // no changes, just continue the normal deployment process - logger.debug(BasicLevel.DEBUG, "Manifest version up-to-date, no need to call WSGen"); - return; - } - - try { - jaxrpcService.applyWSGen(deployable); - } catch (Exception e) { - throw new DeployerException(e); - } - } - - /** - * Deploy the given deployable. - * @param deployable the EAR deployable. - * @throws DeployerException if the EAR is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - - long startTime = System.currentTimeMillis(); - - // Warning: all URLs in this method are unescaped (meaning the there may be some '%20' inside them) - // Convenience File variables are provided (originalFile, unpackedFile) that are unescaped (with real ' ') - // Avoid (unless you know what you're doing) to call File.getURL() as it is buggy, prefer using - // URLUtils to convert between File and URL when necessary. - - EARDeployable unpackedDeployable = null; - File originalFile = null; - - // Deploy the EAR Deployable. Needs to unpack it before deploying it - try { - File folder = new File(appsWorkDirectory, getServerProperties().getServerName()); - originalFile = URLUtils.urlToFile(deployable.getArchive().getURL()); - String archiveName = FileUtils.lastModifiedFileName(originalFile); - - // Needs to know if files needs to be updated or not - boolean keepArchives = false; - // Override files if file to deploy is newer than the unpacked directory (and if already exists) - File unpackedFolder = new File(folder, archiveName); - if (unpackedFolder.exists()) { - if (originalFile.lastModified() <= unpackedFolder.lastModified()) { - // Need to keep the data - keepArchives = true; - } - } - unpackedDeployable = UnpackDeployableHelper.unpack(EARDeployable.class.cast(deployable), folder, archiveName, keepArchives); - - } catch (Exception e) { - throw new DeployerException("Cannot deploy archive for '" + deployable.getArchive() + "'", e); - } - - // display this line when EAR has been unpacked so that details about the EAR are available. - logger.info("Deploying ''{0}''", unpackedDeployable); - - // Registers the required deployers by starting their associated services - serviceManager.startRequiredServices(unpackedDeployable); - - // Archive - IArchive earArchive = unpackedDeployable.getArchive(); - - // Apply WsGen if needed - applyWSGenIfNeeded(unpackedDeployable); - - // Apply GenClientStub if needed - unpackedDeployable = applyGenClientStubIfNeeded(unpackedDeployable); - - // Get URL of this Deployable - URL unpackedURL; - File unpackedFile; - try { - unpackedURL = earArchive.getURL(); - unpackedFile = URLUtils.urlToFile(unpackedURL); - } catch (Exception e) { - throw new DeployerException("Cannot get URL from archive '" + earArchive + "'", e); - } - - // Get URL of the initial deployable for the EAR Module - URL originalURL; - try { - originalURL = deployable.getArchive().getURL(); - // The file is unpacked, so log it - if (deployerLog != null) { - deployerLog.addEntry(originalFile, unpackedFile); - } - } catch (Exception e) { - throw new DeployerException( - "Cannot get the url of the initial deployable for the EAR Module '" + deployable + "'.", e); - } - - // Create classLoader for loading the Deployment descriptor - // parent classloader is the current classloader - URLClassLoader loaderCls = new URLClassLoader(new URL[] {unpackedURL}, appsClassLoader); - - // Deployment descriptor - EarDeploymentDesc earDD = null; - - // Entry application.xml ? - URL applicationXML = null; - try { - applicationXML = earArchive.getResource("META-INF/application.xml"); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get resource META-INF/application.xml", e); - } - - // Entry application.xml ? - URL jonasApplicationXML = null; - try { - jonasApplicationXML = earArchive.getResource("META-INF/jonas-application.xml"); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get resource META-INF/jonas-application.xml", e); - } - - if (applicationXML != null || jonasApplicationXML != null) { - // yes, then parse the Deployment Descriptor - - try { - earDD = EarManagerWrapper.getDeploymentDesc(unpackedDeployable, loaderCls); - } catch (EarDeploymentDescException e) { - String err = "Error in the Deployment descriptor '" + deployable + "': " + e; - logger.error(err); - throw new EarServiceException(err, e); - } - } - - // security roles - String[] securityRoles = new String[0]; - if (earDD != null) { - securityRoles = earDD.getSecurityRolesNames(); - } - - // bind of tenantId - String tenantId = null; - if (isMultitenantEnabled()){ - tenantId = multitenantService.getTenantIdFromContext(); - if (tenantId == null || (tenantId != null && tenantId.equals(""))){ - // it's not an addon, try to retrieve tenant-id id from jonas-application.xml - tenantId = earDD.getTenantId(); - if (tenantId == null || (tenantId != null && tenantId.equals(""))){ - // If the tenantId is not set in jonas-wep-app - // use the default tenant id (=0) - tenantId = multitenantService.getDefaultTenantID(); - } - } - if (tenantId != null){ - multitenantService.addTenantIdDeployableInfo(unpackedDeployable, tenantId); - }else{ - logger.debug("Fail to bind object tenantId ''{0}''", tenantId); - } - } - - // TODO: Classpath manager - - // Create the filtering ClassLoader at the EAR level - FilteringClassLoader filteringClassLoader = createFilteringClassLoader(earArchive); - - /* - * We have the urls to load at our level We can now create our classLoader - */ - logger.debug("Creating the EAR classLoader"); - JClassLoader earClassLoader = new JClassLoader(unpackedURL.toExternalForm(), new URL[0], filteringClassLoader); - - // Extract roles name from the securityRole array - String[] roleNames = new String[securityRoles.length]; - String affRoleNames = ""; - for (int i = 0; i < securityRoles.length; i++) { - roleNames[i] = securityRoles[i]; - affRoleNames += roleNames[i] + ";"; - } - - logger.debug("role names = ''{0}''", affRoleNames); - - /** - * Now this is the deployment step with sending + rars to the rar service + jars to the ejb service + wars to the web - * container service + jars and wars to web services service - */ - - // Get the URLs of EJB, WEB and Clients - List urlsEJB = new LinkedList(); - List urlsAltDDEJB = new LinkedList(); - for (EJBDeployable ejb : unpackedDeployable.getEJBDeployables()) { - try { - URL ejbURL = ejb.getArchive().getURL(); - urlsEJB.add(ejbURL); - urlsAltDDEJB.add(unpackedDeployable.getAltDDURL(ejb)); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the archive '" + ejb.getArchive() + "'", e); - } - } - List urlsWAR = new LinkedList(); - List urlslAtDDWAR = new LinkedList(); - for (WARDeployable war : unpackedDeployable.getWARDeployables()) { - try { - URL warURL = war.getArchive().getURL(); - urlsWAR.add(warURL); - urlslAtDDWAR.add(unpackedDeployable.getAltDDURL(war)); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the archive '" + war.getArchive() + "'", e); - } - } - - // Add a log entry corresponding to the directory where the wars of this ear are unpacked in order to delete it when the - // ear is undeployed - if (urlsWAR.size() > 0) { - if (deployerLog != null && getServerProperties().isDevelopment()) { - try { - File unpackedWarFile = new File(new File(new File(webappsWorkDirectory, getServerProperties().getServerName()), - INEAR_WORK_WEBAPPS_DIR_SUFFIX), - unpackedFile.getName()); - deployerLog.addEntry(originalFile, unpackedWarFile); - } catch (Exception e) { - logger.warn("Error when adding the log entry for unpacked wars directory."); - } - } - } - - // TODO This block is never used, normal ? - // ------------------------------------------------------ - List urlsRAR = new LinkedList(); - List urlsAtDDRAR = new LinkedList(); - for (RARDeployable rar : unpackedDeployable.getRARDeployables()) { - try { - URL rarURL = rar.getArchive().getURL(); - urlsRAR.add(rarURL); - urlsAtDDRAR.add(unpackedDeployable.getAltDDURL(rar)); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the archive '" + rar.getArchive() + "'", e); - } - } - // ------------------------------------------------------ - - List urlsClient = new LinkedList(); - List urlsAtDDClient = new LinkedList(); - for (CARDeployable car : unpackedDeployable.getCARDeployables()) { - try { - URL carURL = car.getArchive().getURL(); - urlsClient.add(carURL); - urlsAtDDClient.add(unpackedDeployable.getAltDDURL(car)); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the archive '" + car.getArchive() + "'", e); - } - } - - /** - * Ejb ClassLoader is needed for WebServices deployment so We create it in advance ... - */ - // Set the list of the ejb-jar, war and clients that can do an ejb-link - // in this - // ear application. This array can be empty. - // The alternate urls are given - // TODO: use ALT-DD !! - EjbManagerWrapper.setAvailableEjbJarsAndAltDDs(earClassLoader, - urlsEJB.toArray(new URL[urlsEJB.size()]), - urlsAltDDEJB.toArray(new URL[urlsAltDDEJB.size()])); - - WebManagerWrapper.setAltDD(earClassLoader, - urlsWAR.toArray(new URL[urlsWAR.size()]), - urlslAtDDWAR.toArray(new URL[urlslAtDDWAR.size()])); - - ClientManagerWrapper.setAltDD(earClassLoader, - urlsClient.toArray(new URL[urlsClient.size()]), - urlsAtDDClient.toArray(new URL[urlsAtDDClient.size()])); - - // Deploy the RAR files of the EAR (if any) - deployRARs(unpackedDeployable, unpackedURL, earClassLoader); - - // deploy EJB3s - // Get EJBs of this EAR - List ejb3s = unpackedDeployable.getEJB3Deployables(); - List> ejbs = unpackedDeployable.getEJBDeployables(); - - // Get libraries of this EAR - List libs = unpackedDeployable.getLibDeployables(); - - // Create array of URLs with EJBs + Libraries - List urls = new LinkedList(); - for (EJBDeployable ejb : ejbs) { - try { - urls.add(ejb.getArchive().getURL()); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the Archive '" + ejb.getArchive() + "'.", e); - } - } - for (LibDeployable lib : libs) { - try { - urls.add(lib.getArchive().getURL()); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the Archive '" + lib.getArchive() + "'.", e); - - } - } - - // Create classloader with these URLs - URL[] arrayURLs = urls.toArray(new URL[urls.size()]); - - // Child of the EAR classloader with RARs - ClassLoader ejbClassLoader = null; - - // Filtering ClassLoader for all the EjbJars + Libraries - // TODO If this is always transparent, maybe we could simply remove it ? - FilteringClassLoader filteringClassLoaderEAR = new FilteringClassLoader(earClassLoader); - filteringClassLoaderEAR.setTransparent(true); // the loader for EJBs is transparent - filteringClassLoaderEAR.start(); - - if (ejb3Service != null) { - ejbClassLoader = ejb3Service.buildByteCodeEnhancementClassLoader(arrayURLs, filteringClassLoaderEAR); - } else { - ejbClassLoader = new URLClassLoader(arrayURLs, filteringClassLoaderEAR); - } - - // Get classpath of the EJBs - URL[] compilationURLs = null; - - // content of the ear loader (application wide resources) - URL[] myApplicationJars = earClassLoader.getURLs(); - - // content of the apps loader (system wide resources) - URL[] appsJars = ((URLClassLoader) earClassLoader.getParent()).getURLs(); - - // merge the 3 Set of URLs - compilationURLs = new URL[myApplicationJars.length + appsJars.length + urls.size()]; - System.arraycopy(urls.toArray(new URL[urls.size()]), 0, compilationURLs, 0, urls.size()); - System.arraycopy(appsJars, 0, compilationURLs, urls.size(), appsJars.length); - System.arraycopy(myApplicationJars, 0, compilationURLs, urls.size() + appsJars.length, myApplicationJars.length); - - // Call automatic GenIC on the URLs of the EJB 2.1 - // Check GenIC : - if (ejb21Service != null) { - for (EJB21Deployable ejb : unpackedDeployable.getEJB21Deployables()) { - URL ejbURL = null; - try { - ejbURL = ejb.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL on the deployable '" + ejb + "'", e); - } - - if (ejb21Service == null) { - logger.warn("Unable to call checkGenIC on the EJB ''{0}'' because the EJB 2.1 service is not available", - ejbURL); - return; - } else { - logger.debug("Calling GenIC on the EJB ''{0}'' with compilation URL ''{1}''.", - ejbURL, - Arrays.asList(compilationURLs)); - ejb21Service.checkGenIC(URLUtils.urlToFile(ejbURL).getPath(), compilationURLs); - } - - } - } - - EZBInjectionHolder ejbInjectionHolder = null; - if (getEmbedded() == null) { - if (!ejb3s.isEmpty()) { - logger.warn("There are EJB 3 files in the EAR ''{0}'' but the EJB 3 service is not available", deployable); - } - } else { - - // Get Extra libraries - List libArchives = getLibArchives(unpackedDeployable); - - // Analyze libraries to detect persistence archive - EZBPersistenceUnitManager persistenceUnitManager = null; - try { - persistenceUnitManager = ejb3Service.getPersistenceUnitManager(unpackedDeployable, ejbClassLoader); - } catch (org.ow2.easybeans.persistence.api.PersistenceXmlFileAnalyzerException e) { - throw new DeployerException("Unable to get Persistence unit Manager on '" + unpackedDeployable.getArchive() - + "'.", e); - } - - // Add eclipselink properties to enable multitenant - if (isMultitenantEnabled() && multitenantService.isMultitenant(unpackedDeployable)){ - if (persistenceUnitManager != null){ - multitenantService.updatePersistenceUnitManager(persistenceUnitManager, tenantId); - } else { - logger.debug("Persistence unit manager is null !"); - } - } - - // Reset context ID of EJBs - addEjbContextIdToList(unpackedDeployable, new LinkedList(), true); - - // Create containers for each EJB3 deployable - String prefix = null; - if (versioningService != null && versioningService.isVersioningEnabled()) { - prefix = versioningService.getPrefix(unpackedDeployable); - } - - if (isMultitenantEnabled() && multitenantService.isMultitenant(unpackedDeployable)) { - if (prefix == null){ - prefix = tenantId + "/"; - } else { - prefix.concat(tenantId + "/"); - } - } - - String javaEEApplicationName = unpackedDeployable.getModuleName(); - List containers = new LinkedList(); - for (EJB3Deployable ejb : ejb3s) { - if (getEmbedded() == null) { - throw new DeployerException("No EJB3 service, but there are EJB3s in the given EAR archive '" + deployable - + "'."); - } - - // Create a container for the given archive - EZBContainer container = getEmbedded().createContainer(ejb); - - if (prefix != null) { - // Search naming strategies - List namingStrategies = container.getConfiguration().getNamingStrategies(); - - // Wrap all Naming strategies - List newNamingStrategies = new ArrayList(); - - for (EZBNamingStrategy oldNamingStrategy : namingStrategies) { - newNamingStrategies.add(ejb3Service.getNamingStrategy(prefix, oldNamingStrategy)); - } - container.getConfiguration().setNamingStrategies(newNamingStrategies); - } - container.getConfiguration().setApplicationName(javaEEApplicationName); - - // Add the metadata - container.setExtraArchives(libArchives); - - // Add the container - containers.add(container); - } - - // Create Resolver for EAR - EZBApplicationJNDIResolver applicationJNDIResolver = ejb3Service.buildApplicationJNDIResolver(); - - // Configure containers - for (EZBContainer container : containers) { - // Assign classloader for EJB3 - ClassLoader ejb3ClassLoader = ejbClassLoader; - - // We create a child classloader that will be used for the bytecode enhancement - if (useEJB3ChildClassloader) { - ejb3ClassLoader = ejb3Service.buildByteCodeEnhancementClassLoader(new URL[0], ejbClassLoader); - } - - // Set the classloader that needs to be used - container.setClassLoader(ejb3ClassLoader); - - // Add persistence context found - container.setPersistenceUnitManager(persistenceUnitManager); - - // set parent JNDI Resolver - EZBContainerJNDIResolver containerJNDIResolver = container.getConfiguration().getContainerJNDIResolver(); - containerJNDIResolver.setApplicationJNDIResolver(applicationJNDIResolver); - - // Add child on application JNDI Resolver - applicationJNDIResolver.addContainerJNDIResolver(containerJNDIResolver); - - // Resolve container - try { - container.resolve(); - } catch (EZBContainerException e) { - throw new DeployerException("Cannot resolve the container '" + container.getArchive() + "'.", e); - } - } - - // Create EasyBeans injection Holder - ejbInjectionHolder = ejb3Service.buildInjectionHolder(persistenceUnitManager, applicationJNDIResolver); - - // Start containers - for (EZBContainer container : containers) { - Object oldTenantContext = null; - if (isMultitenantEnabled()) { - oldTenantContext = multitenantService.getTenantContext(); - } - try { - if (isMultitenantEnabled()) { - multitenantService.setTenantIdInContext(tenantId); - } - container.start(); - } catch (Exception e) { - logger.error("Cannot start container {0}", container.getName(), e); - // stop it - try { - container.stop(); - getEmbedded().removeContainer(container); - } catch (Exception se) { - logger.error("Cannot stop failing container {0}", container.getName(), se); - } - // rethrow it - throw new DeployerException("Container '" + container.getName() + "' has failed", e); - } finally { - if (isMultitenantEnabled()) { - multitenantService.setTenantContext(oldTenantContext); - } - } - - // add eclipselink properties to enable multitenant - if (isMultitenantEnabled() && multitenantService.isMultitenant(unpackedDeployable)){ - if (container.getPersistenceUnitManager() != null){ - multitenantService.updatePersistenceUnitManager(container.getPersistenceUnitManager(), tenantId); - } else { - logger.debug("Persistence unit manager is null !"); - } - } - } - - if (isMultitenantEnabled() && multitenantService.isMultitenant(unpackedDeployable) - && tenantId != null && containers.size() > 0) { - Object oldTenantContext = multitenantService.getTenantContext(); - try { - multitenantService.setTenantIdInContext(tenantId); - multitenantService.createJNDIBindingMBeans(unpackedDeployable, prefix); - } finally { - multitenantService.setTenantContext(oldTenantContext); - } - } - - if (versioningService !=null && versioningService.isVersioningEnabled() - && prefix != null && containers.size() > 0) { - versioningService.createJNDIBindingMBeans(unpackedDeployable); - } - - } - - // Deploy Web Services - deployWebServices(unpackedDeployable, unpackedURL, earClassLoader, ejbClassLoader, urlsEJB, urlsWAR); - - // Deploy EJB 2.1 - deployEJB21s(unpackedDeployable, unpackedURL, earClassLoader, ejbClassLoader, roleNames); - - // Link policy context of EJBs and Webs components - linkPolicyObjects(unpackedDeployable, earDD); - - // Commit EJB Policy objects - commitEJBPolicyObjects(unpackedDeployable); - - // Deploy Web App - // ejbInjectionHolder is null is the ejb3 service is not started - deployWARs(unpackedDeployable, unpackedURL, earClassLoader, ejbClassLoader, ejbInjectionHolder); - - // Commit Web policy objects - commitWebBPolicyObjects(unpackedDeployable); - - // Complete deployment of Web Services - completeWebServicesDeployment(unpackedURL, unpackedDeployable, earClassLoader); - - // Create EAR object - String xmlDD = null; - if (earDD != null) { - xmlDD = earDD.getXmlContent(); - } - EARModule earModule = new EARModule(unpackedDeployable, xmlDD); - earModule.setClassLoader(earClassLoader); - earModule.setFilteringClassLoader(filteringClassLoader); - - // Register MBean - Object oldTenantContext = null; - if (isMultitenantEnabled()) { - oldTenantContext = multitenantService.getTenantContext(); - } - try { - if (isMultitenantEnabled()) { - multitenantService.setTenantIdInContext(tenantId); - } - jmxService.registerMBean(earModule); - } catch (Exception e) { - throw new DeployerException("Cannot register the MBean for the EAR Module of EARDeployable '" + deployable + "'.", - e); - } finally { - if (isMultitenantEnabled()) { - multitenantService.setTenantContext(oldTenantContext); - } - } - - // Remove the Deployment descriptors - if (ejb21Service != null) { - ejb21Service.removeCache(earClassLoader); - } - - if (webContainerService != null) { - webContainerService.removeCache(earClassLoader); - } - - if (jaxrpcService != null) { - jaxrpcService.removeCache(earClassLoader); - } - - // keep the link original deployable -> unpacked deployable for undeployment - ears.put(originalURL, unpackedDeployable); - - logger.info("''{0}'' EAR Deployable has been deployed ({1} ms)", deployable.getShortName(), System.currentTimeMillis() - - startTime); - - } - - /** - * Creates a {@code FilteringClassLoader} for this EAR. - * @param earArchive the EAR archive - * @return a Filtering ClassLoader configured from {@code META-INF/classloader-filtering.xml} (if any). - */ - private FilteringClassLoader createFilteringClassLoader(final IArchive earArchive) { - // This one is sitting between the common applications loader and this application loader - // It will typically filter resources visible to resource adapters (*.rar) declared in this EAR - // But it will also filter resources for all child ClassLoaders (EjbJars + lib and then WebApps) - FilteringClassLoader filteringClassLoader = new FilteringClassLoader(appsClassLoader); - // Configure the loader with the provided filter definition file (if there is one) - try { - String name = "META-INF/" + FilteringClassLoader.CLASSLOADER_FILTERING_FILE; - URL filteringDefinitionUrl = earArchive.getResource(name); - if (filteringDefinitionUrl != null) { - filteringClassLoader.setDefinitionUrl(filteringDefinitionUrl); - } - } catch (ArchiveException ae) { - // Ignored - logger.debug("Cannot get classloader-filtering.xml file from the EAR archive {0}.", earArchive, ae); - } - // Finally start the loader - filteringClassLoader.start(); - return filteringClassLoader; - } - - /** - * Undeploy the given EAR. - * @param deployable the deployable to remove. - * @throws DeployerException if the EAR is not undeployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - logger.info("Undeploying {0}", deployable.getShortName()); - - // get EAR URL - URL earURL; - try { - earURL = deployable.getArchive().getURL(); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL on the EAR deployable '" + deployable + "'.", e); - } - - // Check if this archive has been unpacked ? - EARDeployable unpackedDeployable = null; - if (ears.containsKey(earURL)) { - unpackedDeployable = ears.get(earURL); - } else { - throw new DeployerException("Cannot get the URL of the unpacked EAR deployable '" + deployable + "'."); - } - - // Undeploy wars (by sending URL of these wars) - List warDeployables = unpackedDeployable.getWARDeployables(); - if (warDeployables != null && webContainerService != null) { - List urls = new LinkedList(); - for (WARDeployable warDeployable : warDeployables) { - try { - // Archive URLs are alreay escaped - // The WebContainer expects escaped URL - urls.add(warDeployable.getArchive().getURL()); - } catch (Exception e) { - logger.error("Cannot get the URL from the Deployable ''{0}''", warDeployable, e); - } - } - - URL[] warURLs = urls.toArray(new URL[urls.size()]); - webContainerService.unDeployWars(warURLs); - } - - // Undeploy EJB 2.1 jars (by sending URL of these jars) - List ejb21Deployables = unpackedDeployable.getEJB21Deployables(); - if (ejb21Deployables != null && ejb21Service != null) { - List urls = new LinkedList(); - for (EJB21Deployable ejbDeployable : ejb21Deployables) { - try { - // Archive URLs are alreay escaped - // The EJBContainer expects escaped URL - urls.add(ejbDeployable.getArchive().getURL()); - } catch (Exception e) { - logger.error("Cannot get the URL from the Deployable ''{0}''", ejbDeployable, e); - } - } - - // Call undeploy by using the array of URLs - URL[] ejbJarURLs = urls.toArray(new URL[urls.size()]); - ejb21Service.unDeployJars(ejbJarURLs); - } - - // Undeploy EJB3s - undeployEJB3FromEAR(unpackedDeployable); - - // Undeploy Resource Adapters (by sending URL of these jars) - List rarDeployables = unpackedDeployable.getRARDeployables(); - if (rarDeployables != null && resourceService != null) { - List urls = new LinkedList(); - for (RARDeployable rarDeployable : rarDeployables) { - try { - // Archive URLs are alreay escaped - // The EJBContainer expects escaped URL - urls.add(rarDeployable.getArchive().getURL()); - } catch (Exception e) { - logger.error("Cannot get the URL from the Deployable ''{0}''", rarDeployable, e); - } - } - - // Call undeploy by using the array of URLs - URL[] rarURLs = urls.toArray(new URL[urls.size()]); - resourceService.unDeployRars(rarURLs, earURL); - - } - - EARModule earModule = new EARModule(unpackedDeployable, ""); - - // Unregister MBean - try { - jmxService.unregisterMBean(earModule); - if (versioningService != null && versioningService.isVersioningEnabled()) { - versioningService.garbageCollectJNDIBindingMBeans(); - } - if (isMultitenantEnabled() && multitenantService.isMultitenant(unpackedDeployable)){ - multitenantService.garbageCollectJNDIBindingMBeans(); - } - } catch (Exception e) { - throw new DeployerException( - "Cannot unregister the MBean for the EAR Module of EARDeployable '" + deployable + "'.", e); - } - - // remove link original deployable -> unpacked deployable - ears.remove(earURL); - - logger.info("''{0}'' EAR Deployable is now undeployed", deployable.getShortName()); - - } - - /** - * Undeploy EJB3s of an EAR (called by the undeploy method). - * @param earDeployable a given EAR deployable - * @throws DeployerException if the deployment is not done. - */ - protected void undeployEJB3FromEAR(final EARDeployable earDeployable) throws DeployerException { - // From which deployable get the containers deployed - EARDeployable workingDeployable = earDeployable; - - // Check if this archive has been unpacked ? - EARDeployable unpackedDeployable = earDeployable.getUnpackedDeployable(); - if (unpackedDeployable != null) { - workingDeployable = unpackedDeployable; - } - - // Get Containers of this deployable - List containers = new LinkedList(); - for (EJB3Deployable ejb3 : workingDeployable.getEJB3Deployables()) { - if (getEmbedded() == null) { - logger.warn("No EJB3 service, but there are EJB3s in the given EAR archive '" - + earDeployable.getOriginalDeployable() + "'."); - return; - } - EZBContainer container = getEmbedded().findContainer(ejb3.getArchive()); - // not found - if (container == null) { - logger.warn("No container found for the archive ''{0}'', creation has maybe failed", ejb3.getArchive()); - continue; - } - // found, add it - containers.add(container); - } - - // Remove all these containers - for (EZBContainer container : containers) { - // stop it - Object oldContext = null; - if (isMultitenantEnabled()) { - oldContext = multitenantService.getTenantContext(); - } - try { - if (isMultitenantEnabled()) { - multitenantService.setTenantIdInContext(multitenantService.getTenantIdDeployableInfo(workingDeployable)); - } - container.stop(); - } finally { - if (isMultitenantEnabled()) { - multitenantService.setTenantContext(oldContext); - } - } - // remove it - getEmbedded().removeContainer(container); - } - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return EARDeployable.class.isAssignableFrom(deployable.getClass()); - } - - /** - * Deploy the WAR files present in the given EAR. - * @param earDeployable the EAR containing the WARs - * @param earURL the EAR URL - * @param earClassLoader the EAR classloader - * @param parentClassLoader the parent classloader (EJB) to use - * @param ejbInjectionHolder the given ejb injection holder (including persistence unit manager, etc). - * @throws DeployerException if the wars are not deployed. - */ - protected void deployWARs(final EARDeployable earDeployable, - final URL earURL, - final ClassLoader earClassLoader, - final ClassLoader parentClassLoader, - final EZBInjectionHolder ejbInjectionHolder) throws DeployerException { - - // First, try to see if there are .war in this EAR - List wars = earDeployable.getWARDeployables(); - - - - if (wars.size() > 0) { - if (webContainerService == null) { - logger.warn("There are WAR files in the EAR ''{0}'' but the 'web' service is not available", earDeployable); - return; - } - - // Build context for sending parameters - Context ctx = new ComponentContext(earURL.toExternalForm()); - try { - ctx.rebind("earDeployable", earDeployable); - } catch (NamingException e) { - throw new DeployerException("Cannot add the EAR deployable parameter '" + earDeployable + "'", e); - } - try { - ctx.rebind("earURL", earURL); - } catch (NamingException e) { - throw new DeployerException("Cannot add the EAR URL parameter '" + earURL + "'", e); - } - - // Get URLS of the wars and context-root - List urls = new LinkedList(); - List ctxRoots = new LinkedList(); - for (WARDeployable warDeployable : wars) { - // URL - try { - // Store escaped URLs - urls.add(warDeployable.getArchive().getURL()); - } catch (Exception e) { - throw new DeployerException("Cannot get the URL for the archive '" + warDeployable.getArchive() + "'", e); - } - - // Context-root - ctxRoots.add(warDeployable.getContextRoot()); - - // TenantId info - if (isMultitenantEnabled()) { - multitenantService.addTenantIdDeployableInfo(warDeployable, multitenantService.getTenantIdDeployableInfo(earDeployable)); - } - } - - try { - ctx.rebind("warDeployables", wars); - } catch (NamingException e) { - throw new DeployerException("Cannot add the WAR deployables '" + wars + "'", e); - } - - try { - ctx.rebind("urls", urls.toArray(new URL[urls.size()])); - } catch (NamingException e) { - throw new DeployerException("Cannot add the urls parameter '" + urls + "'", e); - } - - // Bind the parent classloader of the web application - try { - ctx.rebind("parentClassLoader", parentClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the parentClassLoader parameter '" + parentClassLoader + "'", e); - } - - // Bind the earClassLoader of the web application - try { - ctx.rebind("earClassLoader", earClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the earClassLoader parameter '" + earClassLoader + "'", e); - } - - // No alt-dd yet, give an empty array - try { - ctx.rebind("altDDs", new URL[urls.size()]); - } catch (NamingException e) { - throw new DeployerException("Cannot add the altDDs parameter.'", e); - } - - // Build context roots - try { - ctx.rebind("contextRoots", ctxRoots.toArray(new String[ctxRoots.size()])); - } catch (NamingException e) { - throw new DeployerException("Cannot add the contextRoots parameter '" + urls + "'", e); - } - - // Bind EJB Injection holder - try { - if (ejbInjectionHolder != null) { - ctx.rebind(EZBInjectionHolder.class.getName(), ejbInjectionHolder); - } - } catch (NamingException e) { - throw new DeployerException("Cannot add the ejb injection holder parameter '" + ejbInjectionHolder + "'", e); - } - - try { - webContainerService.deployWars(ctx); - } catch (JWebContainerServiceException e) { - throw new DeployerException("Cannot deploy the WARs.'", e); - } - } - - } - - /** - * Deploy the EJB 2.1 of the given EAR. - * @param earDeployable the EAR that contains the EJB files - * @param earURL the URL of the EAR - * @param earClassLoader the classloader of the EAR - * @param ejbClassLoader the given EJB ClassLoader - * @param roleNames the name of the roles to use for security - * @throws DeployerException if the EJB 2.1 filse can't be deployed - */ - protected void deployEJB21s(final EARDeployable earDeployable, - final URL earURL, - final URLClassLoader earClassLoader, - final ClassLoader ejbClassLoader, - final String[] roleNames) throws DeployerException { - - // First, try to see if there are EJB 2.1 in this EAR - List ejbs = earDeployable.getEJB21Deployables(); - if (ejbs.size() > 0) { - if (ejb21Service == null) { - logger.warn("There are EJB 2.1 files in the EAR ''{0}'' but the EJB 2.1 service is not available", - earDeployable); - return; - } - // Build list of EJB URLs - List urls = new LinkedList(); - for (EJB21Deployable ejb21Deployable : ejbs) { - try { - urls.add(ejb21Deployable.getArchive().getURL()); - - // If the directory META-INF/wsdl is present in the jar archive, - // add it to the list of URLs of the Classloader - URL wsdlDirectory = ejb21Deployable.getArchive().getResource(WSDL_DIRECTORY); - if (wsdlDirectory != null) { - - // Search addURL method - Method addURLMethod = null; - Class classToSearch = ejbClassLoader.getClass(); - while (addURLMethod == null && classToSearch != null) { - try { - addURLMethod = classToSearch.getDeclaredMethod("addURL", URL.class); - } catch (NoSuchMethodException e) { - logger.debug("Method addURL not found on class ''{0}''.", classToSearch.getName()); - } - classToSearch = classToSearch.getSuperclass(); - } - if (addURLMethod == null) { - logger.warn("Unable to find addURL method on the classloaders"); - } else { - boolean accessible = addURLMethod.isAccessible(); - try { - addURLMethod.setAccessible(true); - addURLMethod.invoke(ejbClassLoader, wsdlDirectory); - } catch (Exception e) { - logger.warn("Cannot add URL for META-INF/wsdl directory to the Classloader", e); - } finally { - addURLMethod.setAccessible(accessible); - } - } - } - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL for the archive '" + ejb21Deployable.getArchive() + "'", e); - } - } - - // Deploy EJB 2.1 on JOnAS service - Context ctx = new ComponentContext(earURL.toExternalForm()); - try { - URL earRootUrl = earURL; - EARDeployable originalEarDeployable = earDeployable; - while (originalEarDeployable != null) { - earRootUrl = originalEarDeployable.getArchive().getURL(); - originalEarDeployable = originalEarDeployable.getOriginalDeployable(); - } - ctx.rebind("earUrl", earURL); - ctx.rebind("earRootUrl", earRootUrl); - ctx.rebind("j2eeApplicationName", earDeployable.getModuleName()); - } catch (Exception e) { - throw new DeployerException("Cannot add the EAR URL parameter '" + earURL + "'", e); - } - - try { - ctx.rebind("jarURLs", urls.toArray(new URL[urls.size()])); - } catch (NamingException e) { - throw new DeployerException("Cannot add the urls parameter '" + urls + "'", e); - } - try { - ctx.rebind("earClassLoader", earClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the earClassLoader parameter '" + earClassLoader + "'", e); - } - - // Bind the EJB classloader - try { - ctx.rebind("ejbClassLoader", ejbClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the ejbClassLoader parameter '" + ejbClassLoader + "'", e); - } - - // Role names - try { - ctx.rebind("roleNames", roleNames); - } catch (NamingException e) { - throw new DeployerException("Cannot add the roleNames parameter.", e); - } - - // Deploy - try { - ejb21Service.deployJars(ctx); - } catch (ServiceException e) { - throw new DeployerException("Cannot deploy the EJB 2.1.", e); - } - } - - } - - /** - * Deploy the RARs of the given EAR. - * @param earDeployable the EAR that contains the war files - * @param earURL the URL of the EAR - * @param earClassLoader the classloader of the EAR - * @throws DeployerException if the RARs file can't be deployed - */ - protected void deployRARs(final EARDeployable earDeployable, final URL earURL, final ClassLoader earClassLoader) - throws DeployerException { - // First, try to see if there are .rar in this EAR - List rars = earDeployable.getRARDeployables(); - if (rars.size() > 0) { - if (resourceService == null) { - logger.warn("There are RAR files in the EAR ''{0}'' but the resource service is not available", earDeployable); - return; - } - - Context ctx = new ComponentContext(earURL.toExternalForm()); - try { - ctx.rebind("earUrl", earURL); - } catch (NamingException e) { - throw new DeployerException("Cannot add the EAR URL parameter '" + earURL + "'", e); - } - List urls = new LinkedList(); - for (RARDeployable rarDeployable : rars) { - try { - urls.add(rarDeployable.getArchive().getURL()); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get the URL for the archive '" + rarDeployable.getArchive() + "'", e); - } - } - try { - ctx.rebind("urls", urls.toArray(new URL[urls.size()])); - } catch (NamingException e) { - throw new DeployerException("Cannot add the urls parameter '" + urls + "'", e); - } - try { - ctx.rebind("earClassLoader", earClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the earClassLoader parameter '" + earClassLoader + "'", e); - } - try { - ctx.rebind("altDDs", new URL[urls.size()]); - } catch (NamingException e) { - throw new DeployerException("Cannot add the altDDs parameter.'", e); - } - - try { - resourceService.deployRars(ctx); - } catch (ResourceServiceException e) { - throw new DeployerException("Cannot deploy the RARs.'", e); - } - } - - } - - /** - * Deploy the Web Services of the given EAR. - * @param earDeployable the EAR that contains the Web Services - * @param earURL the URL of the EAR - * @param earClassLoader the classloader of the EAR - * @param ejbClassLoader the classloader of the EJBs - * @param urlsEJB List of the EJBs of the EAR - * @param urlsWAR List of the WARs of the EAR - * @throws DeployerException if the Web Services can't be deployed - */ - protected void deployWebServices(final EARDeployable earDeployable, - final URL earURL, - final ClassLoader earClassLoader, - final ClassLoader ejbClassLoader, - final List urlsEJB, - final List urlsWAR) throws DeployerException { - - if (jaxrpcService == null) { - return; - } - - // Build context for sending parameters - Context ctx = new ComponentContext(earURL.toExternalForm()); - - try { - File earFile = URLUtils.urlToFile(earURL); - ctx.rebind(IJAXRPCService.UNPACK_DIRECTORY_CTX_PARAM, earFile); - } catch (NamingException e) { - throw new DeployerException("Cannot add the 'unpackDir' parameter '", e); - } - - try { - ctx.rebind("jarUrls", urlsEJB.toArray(new URL[urlsEJB.size()])); - } catch (NamingException e) { - throw new DeployerException("Cannot add the 'jarUrls' parameter '", e); - } - - URL[] warURLs = urlsWAR.toArray(new URL[urlsWAR.size()]); - - try { - ctx.rebind("warUrls", warURLs); - } catch (NamingException e) { - throw new DeployerException("Cannot add the 'warUrls' parameter '", e); - } - - try { - Hashtable ctxRoots = new Hashtable(); - List wars = earDeployable.getWARDeployables(); - for (WARDeployable deployable : wars) { - ctxRoots.put(deployable.getArchive().getURL(), deployable.getContextRoot()); - } - - ctx.rebind("warCtxRootMapping", ctxRoots); - } catch (Exception e) { - throw new DeployerException("Cannot add the 'warCtxRootMapping' parameter '", e); - } - - try { - ctx.rebind("earURL", earURL); - } catch (NamingException e) { - throw new DeployerException("Cannot add the 'earURL' parameter '" + earURL + "'", e); - } - - try { - ctx.rebind("earDeployable", earDeployable); - } catch (NamingException e) { - throw new DeployerException("Cannot add the 'earDeployable' parameter '" + earDeployable + "'", e); - } - - // Bind the parent classloader of the web application - try { - ctx.rebind("ejbClassLoader", ejbClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the ejbClassLoader parameter '" + ejbClassLoader + "'", e); - } - - // Bind the earClassLoader of the web application - try { - ctx.rebind("earClassLoader", earClassLoader); - } catch (NamingException e) { - throw new DeployerException("Cannot add the earClassLoader parameter '" + earClassLoader + "'", e); - } - - try { - jaxrpcService.deployWebServices(ctx); - } catch (JWebContainerServiceException e) { - throw new DeployerException("Cannot deploy the Web Services.", e); - } - - } - - /** - * Complete the Deployment of the WebServices. - * @param earURL The URL of the EAR - * @param earDeployable the deployable of the EAR - * @param earClassLoader The classloader of the EAR - * @throws DeployerException Thrown if the Web Services can't be deployed - */ - protected void completeWebServicesDeployment(final URL earURL, final EARDeployable earDeployable, - final ClassLoader earClassLoader) throws DeployerException { - // Only if the JAX-RPC Service is started - if (jaxrpcService != null) { - try { - ComponentContext contctx = null; - try { - contctx = new ComponentContext(earURL.toExternalForm()); - contctx.rebind(IJAXRPCService.CLASSLOADER_CTX_PARAM, earClassLoader); - - String javaEEApplicationName = earDeployable.getModuleName(); - - ObjectName name = J2eeObjectName.J2EEApplication(getServerProperties().getDomainName(), - getServerProperties().getServerName(), javaEEApplicationName); - contctx.rebind(IJAXRPCService.PARENT_OBJECTNAME_CTX_PARAM, name); - contctx.rebind(IJAXRPCService.ISINEAR_CTX_PARAM, Boolean.TRUE); - - } catch (NamingException e) { - String err = "Can not bind params for the WebServices service, " - + "can't complete deployment of Web Services Endpoints"; - throw new JWebContainerServiceException(err, e); - } - jaxrpcService.completeWSDeployment(contctx); - } catch (Exception e) { - throw new DeployerException("Cannot complete Web Services deployment.", e); - } - } - } - - /** - * Link policy configuration objects of EJB and Web Component. - * @param earDeployable The EAR that contains the EJB files - * @param earDD The EAR deployment descriptor - * @throws DeployerException If the policy objects can't be linked - */ - private void linkPolicyObjects(final EARDeployable earDeployable, final EarDeploymentDesc earDD) throws DeployerException { - - // Add context ID of EJB and Web components - List ctxIDs = new LinkedList(); - // Get contextID of EJB - addEjbContextIdToList(earDeployable, ctxIDs, false); - - // Now for WebApp - addWebBContextIdToList(earDeployable, ctxIDs, true); - - try { - // Now link the policy configuration objects - for (Iterator itCtxId = ctxIDs.iterator(); itCtxId.hasNext();) { - String toBeLinkedCtxId = itCtxId.next(); - PolicyConfiguration toBeLinkedPC = getPolicyConfigurationFactory().getPolicyConfiguration(toBeLinkedCtxId, - false); - for (Iterator linkCId = ctxIDs.iterator(); linkCId.hasNext();) { - String linkedCtxId = linkCId.next(); - if (!toBeLinkedCtxId.equals(linkedCtxId)) { - PolicyConfiguration linkedPC = getPolicyConfigurationFactory().getPolicyConfiguration(linkedCtxId, - false); - toBeLinkedPC.linkConfiguration(linkedPC); - } - } - } - } catch (PolicyContextException pce) { - throw new DeployerException("Cannot retrieve a policy configuration", pce); - } - - // Do user-to-role mapping - if (earDD != null) { - Map userToRoleMapping = earDD.getUserToRoleMapping(); - if (userToRoleMapping != null) { - for (Iterator itCtxId = ctxIDs.iterator(); itCtxId.hasNext();) { - String contextId = (String) itCtxId.next(); - for (Iterator itMapping = userToRoleMapping.keySet().iterator(); itMapping.hasNext();) { - String principalName = (String) itMapping.next(); - List roles = (List) userToRoleMapping.get(principalName); - String[] roleNames = (String[]) roles.toArray(new String[roles.size()]); - JPolicyUserRoleMapping.addUserToRoleMapping(contextId, principalName, roleNames); - } - } - } - - } - - } - - /** - * Add context-id for given jar urls to a given List. - * @param earDeployable the EAR deployable to analyze - * @param contextIDs the list of context-id. - * @param resetPolicyConfiguration reset or not the associated policy configuration. - * @throws DeployerException if the EAR can't be analyzed - */ - private void addEjbContextIdToList(final EARDeployable earDeployable, final List contextIDs, - final boolean resetPolicyConfiguration) throws DeployerException { - // Extract URLs of EJB from the EAR - List> ejbDeployables = earDeployable.getEJBDeployables(); - List urls = new LinkedList(); - if (ejbDeployables != null) { - for (EJBDeployable ejbDeployable : ejbDeployables) { - try { - urls.add(ejbDeployable.getArchive().getURL()); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get URL on the deployable '" + ejbDeployable + "'.", e); - } - } - } - - URL[] jarUrls = urls.toArray(new URL[urls.size()]); - - // Get contextID of EJB - for (int u = 0; u < jarUrls.length; u++) { - String ctxId = jarUrls[u].getPath(); - // reset the policy configuration associated to this context ID. - if (resetPolicyConfiguration) { - try { - getPolicyConfigurationFactory().getPolicyConfiguration(ctxId, true); - } catch (PolicyContextException pce) { - throw new DeployerException("Cannot retrieve a policy configuration", pce); - } - } - contextIDs.add(ctxId); - } - } - - /** - * Add context-id for given web urls to a given List. Also, reset the context-id associated to it. * - * @param earDeployable the EAR deployable to analyze - * @param contextIDs the list of context-id. - * @param resetPolicyConfiguration reset or not the associated policy configuration. - * @throws DeployerException if policy context cannot be get. - */ - private void addWebBContextIdToList(final EARDeployable earDeployable, final List contextIDs, - final boolean resetPolicyConfiguration) throws DeployerException { - - // Extract URLs of Web from the EAR - List warDeployables = earDeployable.getWARDeployables(); - if (warDeployables != null) { - for (WARDeployable warDeployable : warDeployables) { - URL warURL = null; - try { - warURL = warDeployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new DeployerException("Cannot get URL on the deployable '" + warDeployable + "'.", e); - } - - // build context ID of war - String contextRoot = warDeployable.getContextRoot(); - if (versioningService != null && versioningService.isVersioningEnabled()) { - String versionID = versioningService.getVersionID(earDeployable); - - if (versionID != null && !contextRoot.contains(versionID)) { - contextRoot += versionID; - } - } - - if (isMultitenantEnabled() && multitenantService.isMultitenant(earDeployable)) { - String tenantId = multitenantService.getTenantIdDeployableInfo(earDeployable); - - if (tenantId != null && !contextRoot.contains(tenantId)) { - contextRoot = tenantId + '/' + contextRoot; - } - } - - String ctxId = warURL.getFile() + contextRoot; - // reset the policy configuration associated to this context ID. - if (resetPolicyConfiguration) { - try { - getPolicyConfigurationFactory().getPolicyConfiguration(ctxId, true); - } catch (PolicyContextException pce) { - throw new DeployerException("Cannot retrieve a policy configuration", pce); - } - } - contextIDs.add(ctxId); - } - } - } - - /** - * Commit policy configuration objects of EJB Component. - * @param earDeployable the EAR to analyze - * @throws DeployerException if the policy objects can't be committed - */ - private void commitEJBPolicyObjects(final EARDeployable earDeployable) throws DeployerException { - List ctxIDs = new LinkedList(); - addEjbContextIdToList(earDeployable, ctxIDs, false); - commitPolicyObjects(ctxIDs); - } - - /** - * Commit policy configuration objects of Web Component. - * @param earDeployable the EAR to analyze - * @throws DeployerException if the policy objects can't be committed - */ - private void commitWebBPolicyObjects(final EARDeployable earDeployable) throws DeployerException { - List ctxIDs = new LinkedList(); - addWebBContextIdToList(earDeployable, ctxIDs, false); - commitPolicyObjects(ctxIDs); - } - - /** - * @return policy configuration factory - * @throws DeployerException if the policy configuration factory cannot be obtain - */ - private PolicyConfigurationFactory getPolicyConfigurationFactory() throws DeployerException { - PolicyConfigurationFactory pcFactory = null; - try { - pcFactory = PolicyConfigurationFactory.getPolicyConfigurationFactory(); - } catch (Exception cnfe) { - throw new DeployerException("Cannot retrieve current policy configuration factory", cnfe); - } - return pcFactory; - } - - /** - * Commit policy context IDs of the given list. - * @param ctxIDs list of context ID to commit. - * @throws DeployerException if the policy objects cannot be committed. - */ - private void commitPolicyObjects(final List ctxIDs) throws DeployerException { - String ctxId = null; - try { - // commit the policy configuration objects - for (Iterator itCtxId = ctxIDs.iterator(); itCtxId.hasNext();) { - ctxId = itCtxId.next(); - PolicyConfiguration pc = getPolicyConfigurationFactory().getPolicyConfiguration(ctxId, false); - pc.commit(); - } - } catch (PolicyContextException pce) { - throw new DeployerException("Cannot commit policy configuration with Id '" + ctxId + "'", pce); - } - - // refresh policy - Policy.getPolicy().refresh(); - } - - /** - * Sets the JAX-RPC service. - * @param jaxrpcService JAX-RPC service - */ - public void setJAXRPCService(final IJAXRPCService jaxrpcService) { - this.jaxrpcService = jaxrpcService; - } - - /** - * Sets the RAR service. - * @param resourceService RAR service. - */ - public void setResourceService(final ResourceService resourceService) { - this.resourceService = resourceService; - } - - /** - * Sets the EJB 2.1 service. - * @param ejb21Service the EJB 2.1 service. - */ - public void setEjb21Service(final EJBService ejb21Service) { - this.ejb21Service = ejb21Service; - } - - /** - * Sets the JMX service. - * @param jmxService the JMX service. - */ - public void setJMXService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * Sets the WEB container service. - * @param webContainerService the web container service. - */ - public void setWebContainerService(final JWebContainerService webContainerService) { - this.webContainerService = webContainerService; - } - - /** - * Sets the classloader to use for all deployed applications. - * @param appsClassLoader the given classloader. - */ - public void setAppsClassLoader(final ClassLoader appsClassLoader) { - this.appsClassLoader = appsClassLoader; - } - - /** - * Gets Archives of the libraries of this EAR. - * @param earDeployable the given EAR deployable. - * @return list of archives - */ - protected List getLibArchives(final EARDeployable earDeployable) { - - // Build list - List libArchives = new LinkedList(); - - // Get data of all libraries - for (LibDeployable lib : earDeployable.getLibDeployables()) { - libArchives.add(lib.getArchive()); - } - - return libArchives; - } - - /** - * Returns the server properties. - * @return the server properties - */ - public ServerProperties getServerProperties() { - return serverProperties; - } - - /** - * Sets the server properties. - * @param serverProperties the given server properties - */ - public void setServerProperties(final ServerProperties serverProperties) { - this.serverProperties = serverProperties; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - this.versioningService = versioningService; - } - - /** - * @param service the EJB3 Service to be injected. - */ - public void setEasyBeansService(final IEasyBeansService service) { - this.ejb3Service = service; - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - this.versioningService = null; - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return this.versioningService; - } - - /** - * @param multitenantService The multitenant service to set. - */ - public void setMultitenantService(final MultitenantService multitenantService) { - this.multitenantService = multitenantService; - } - - /** - * Sets the multitenant service to null. - */ - public void unsetMultitenantService() { - this.multitenantService = null; - } - - /** - * @return The multitenant service. - */ - public MultitenantService getMultitenantService() { - return this.multitenantService; - } - - /** - * @return Whether multitenant is enabled. - */ - public boolean isMultitenantEnabled() { - return (multitenantService != null); - } - - /** - * Sets the service manager to null. - */ - public void unsetServiceManager() { - this.serviceManager = null; - } - - /** - * Sets the service manager. - */ - public void setServiceManager(final ServiceManager serviceManager) { - this.serviceManager = serviceManager; - } - - /** - * Set the DeployerLog of the EarDeployer. - * @param deployerLog the DeployerLog to use - */ - public void setDeployerLog(final DeployerLog deployerLog) { - this.deployerLog = deployerLog; - } - - /** - * Returns a Map containing all deployed EARs. - * @return a Map containing all deployed EARs. - */ - public Map getEars() { - return ears; - } - - /** - * Sets the working directory for Apps. - * @param appsWorkDirectory the given directory - */ - public void setAppsWorkDirectory(final String appsWorkDirectory) { - this.appsWorkDirectory = appsWorkDirectory; - } - - /** - * Sets the working directory for webapps. - * @param webappsWorkDirectory the given directory - */ - public void setWebappsWorkDirectory(final String webappsWorkDirectory) { - this.webappsWorkDirectory = webappsWorkDirectory; - } -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARService.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARService.java deleted file mode 100644 index 18d0b97cd4..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARService.java +++ /dev/null @@ -1,532 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.management.ObjectName; - -import org.ow2.jonas.deployment.ear.wrapper.EarManagerWrapper; -import org.ow2.jonas.ear.EarService; -import org.ow2.jonas.ejb2.EJBService; -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.management.ServiceManager; -import org.ow2.jonas.resource.ResourceService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.jonas.ws.jaxrpc.IJAXRPCService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * JOnAS EAR Service Implementation class. This class provides an implementation - * of the ear service. - * @author Florent Benoit - * @author Ludovic Bert - * @author Francois Fornaciari - * Contributor(s): - * Adriana Danes: highlight configuration properties - * Eric Hardesty: added ability to include rar files in an ear - * Michel-Ange Anton : new JSR77 MBean - * S. Ali Tokmen (versioning) - */ -public class JOnASEARService extends AbsServiceImpl implements EarService, JOnASEARServiceMBean { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JOnASEARService.class); - - /** - * Reference to the JMX Service. - */ - private JmxService jmxService = null; - - /** - * EasyBeans service. - */ - private IEasyBeansService easyBeansService = null; - - /** - * External Classloader. - */ - private ClassLoader extClassLoader; - - /** - * Link to the Ear Deployer. - */ - private EarDeployer earDeployer = null; - - /** - * DeployerManager Service. - */ - private IDeployerManager deployerManager; - - /** - * Working directory for applications. - */ - private File workAppsFile = null; - - /** - * Enable call to GenClientStub. (disabled by default) - */ - private boolean genStub = false; - - /** - * Use a child classLoader for EJB3. - */ - private boolean useEJB3ChildClassloader = false; - - - /** - * Initialize some Maps at instantiation time. - */ - public JOnASEARService() { - // Create the EAR deployer - earDeployer = new EarDeployer(); - } - - /** - * @param validate Use a validating parser ? - */ - public void setParsingwithvalidation(final boolean validate) { - EarManagerWrapper.setParsingWithValidation(validate); - if (!validate) { - logger.debug("EAR XML parsing without validation"); - } else { - logger.debug("EAR XML parsing with validation"); - } - } - - /** - * @param isEnabled if generation of stubs need to be enabled ? - */ - public void setGenstub(final boolean isEnabled) { - this.genStub = isEnabled; - } - - /** - * Enable the use of a child classloader for EJB3s. - * @param isEnabled if EJB3 neeeds a child class loader - */ - public void useEJB3ChildClassloader(final boolean isEnabled) { - this.useEJB3ChildClassloader = isEnabled; - } - - - /** - * Stop the EAR service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Undeploy EARs - earDeployer.stop(); - - if (deployerManager != null) { - // Unregister deployer - deployerManager.unregister(earDeployer); - } - - // Admin code - if (jmxService != null) { - unregisterEarServiceMBean(getDomainName()); - } - - // The service is stopped - logger.info("EAR Service stopped"); - } - - /** - * Start the EAR service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - initWorkingDirectory(); - - // Reset embedded server linked to the ear deployer for the JOnAS/Traditional case. - // In fact, this has been done previously during the service injection but with an EZB Service not started. - if (easyBeansService != null) { - earDeployer.setEmbedded(easyBeansService.getEasyBeansServer()); - } - - // get apps ClassLoader - try { - LoaderManager lm = LoaderManager.getInstance(); - extClassLoader = lm.getExternalLoader(); - } catch (Exception e) { - logger.error("Cannot get the Applications ClassLoader from EAR Container Service: " + e); - throw new ServiceException("Cannot get the Applications ClassLoader from EAR Container Service", e); - } - - // TODO, When ear service will become a bundle, we could use - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // set properties - earDeployer.setAppsClassLoader(extClassLoader); - earDeployer.setJMXService(jmxService); - earDeployer.setServerProperties(getServerProperties()); - earDeployer.setAppsWorkDirectory(getAppsWorkDirectory()); - earDeployer.setWebappsWorkDirectory(getWebappsWorkDirectory()); - - if (genStub) { - earDeployer.enableGenClientStub(); - } - if (useEJB3ChildClassloader) { - earDeployer.useEJB3ChildClassloader(); - } - - // Register it - deployerManager.register(earDeployer); - - // Admin code - registerEarServiceMBean(this, getDomainName()); - - logger.info("EAR Service started"); - } - - /** - * Create working directory for applications. - */ - protected void initWorkingDirectory() { - if (workAppsFile == null) { - // Create $JONAS_BASE/work/apps directory file - workAppsFile = new File(getAppsWorkDirectory() + File.separator + getServerProperties().getServerName()); - workAppsFile.mkdirs(); - } - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - protected void setWorkCleanerService(final WorkCleanerService workCleanerService) { - initWorkingDirectory(); - - File fileLog = new File(workAppsFile.getPath() + File.separator + getServerProperties().getServerName() + ".log"); - if (!fileLog.exists()) { - try { - // Create dirs - fileLog.getParentFile().mkdirs(); - fileLog.createNewFile(); - } catch (IOException e) { - logger.error("cannot create the log file" + fileLog, e); - } - } - - // Create the logger - try { - DeployerLog deployerLog = new DeployerLog(fileLog); - earDeployer.setDeployerLog(deployerLog); - - CleanTask cleanTask = new EarCleanTask(this, deployerLog); - - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } catch (DeployerLogException e) { - logger.error("Cannot register the clean task", e); - } - } - - /** - * Return the list of all deployed applications. - * @return The list of deployed applications - */ - public List getDeployedEars() { - List names = new ArrayList(); - Map ears = earDeployer.getEars(); - for (URL earURL : ears.keySet()) { - names.add(earURL.getFile()); - } - return names; - } - - /** - * @return current number of ears deployed in the JOnAS server - */ - public Integer getDeployedEARsNumber() { - return new Integer(earDeployer.getEars().size()); - } - - /** - * Test if the specified filename is already deployed or not. This method - * is a management method provided by the EarServerice MBean. - * @param fileName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - public boolean isEarLoaded(final String fileName) { - - URL url = null; - boolean isLoaded = false; - try { - // Absolute filename - try { - url = new File(fileName).getCanonicalFile().toURL(); - // Check if the ear is already deployed or not - if (earDeployer.getEars().get(url) != null) { - isLoaded = true; - } - } catch (Exception e) { - url = null; - } - } catch (Exception e) { - logger.error("Can not found if the ear is deployed or not"); - return false; - } - - return isLoaded; - } - - /** - * Test if the specified unpack name is already deployed or not. This method is defined in the EarService interface. - * @param unpackName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - public boolean isEarDeployedByWorkName(final String unpackName) { - Map ears = earDeployer.getEars(); - for (EARDeployable earDeployable : ears.values()) { - try { - File unpackedFile= URLUtils.urlToFile(earDeployable.getArchive().getURL()); - if (unpackName.equals(unpackedFile.getName())) { - return true; - } - } catch (ArchiveException e) { - logger.debug("Cannot retrieve the name of the unpacked ear {0}", unpackName); - } - - } - return false; - } - - // Admin code implementation (JMX based) - // ------------------------------------- - /** - * Register EAR Service MBean. - * @param service ear container service to manage - * @param domainName domain name - */ - private void registerEarServiceMBean(final Object service, final String domainName) { - ObjectName on = JonasObjectName.earService(domainName); - jmxService.registerMBean(service, on); - } - - /** - * Unregister EAR Container Service MBean. - * @param domainName domain name - */ - private void unregisterEarServiceMBean(final String domainName) { - ObjectName on = JonasObjectName.earService(domainName); - jmxService.unregisterMBean(on); - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param ejbService the ejbService to set - */ - public void setEjbService(final EJBService ejbService) { - earDeployer.setEjb21Service(ejbService); - } - - /** - * Unbind the {@link EJBService}. - */ - public void unsetEjbService() { - earDeployer.setEjb21Service(null); - } - - /** - * @param webContainerService the webContainerService to set - */ - public void setWebContainerService(final JWebContainerService webContainerService) { - earDeployer.setWebContainerService(webContainerService); - } - - /** - * Unbind the {@link JWebContainerService}. - */ - public void unsetWebContainerService() { - earDeployer.setWebContainerService(null); - } - - /** - * @param jaxrpcService the jaxrpcService to set - */ - public void setJAXRPCService(final IJAXRPCService jaxrpcService) { - earDeployer.setJAXRPCService(jaxrpcService); - } - - /** - * Unbind the {@link IJAXRPCService}. - */ - public void unsetJAXRPCService() { - earDeployer.setJAXRPCService(null); - } - - /** - * @param resourceService the resourceService to set - */ - public void setResourceService(final ResourceService resourceService) { - earDeployer.setResourceService(resourceService); - } - - /** - * Unbind the {@link ResourceService}. - */ - public void unsetResourceService() { - earDeployer.setResourceService(null); - } - - /** - * @param service the EJB3 Service to be injected. - */ - public void setEasyBeansService(final IEasyBeansService service) { - this.easyBeansService = service; - earDeployer.setEasyBeansService(easyBeansService); - earDeployer.setEmbedded(easyBeansService.getEasyBeansServer()); - } - - /** - * Unbind the {@link IEasyBeansService}. - */ - public void unsetEasyBeansService() { - this.easyBeansService = null; - earDeployer.setEasyBeansService(null); - earDeployer.setEmbedded(null); - } - - /** - * @param deployerManager the deployerManager to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Unbind the {@link IDeployerManager}. - */ - public void unsetDeployerManager() { - this.deployerManager = null; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - earDeployer.setVersioningService(versioningService); - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - earDeployer.unsetVersioningService(); - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return earDeployer.getVersioningService(); - } - - /** - * @param multitenantService The multitenant service to set. - */ - public void setMultitenantService(final MultitenantService multitenantService) { - earDeployer.setMultitenantService(multitenantService); - } - - /** - * Sets the multitenant service to null. - */ - public void unsetMultitenantService() { - earDeployer.unsetMultitenantService(); - } - - /** - * @return The multitenant service. - */ - public MultitenantService getMultitenantService() { - return earDeployer.getMultitenantService(); - } - - /** - * Sets the service manager. - * @param serviceManager the service manager - */ - public void setServiceManager(final ServiceManager serviceManager) { - earDeployer.setServiceManager(serviceManager); - } - - /** - * Sets the service manager to null. - */ - public void unsetServiceManager() { - earDeployer.unsetServiceManager(); - } - - /** - * @return work directory for apps. - */ - protected String getAppsWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "apps"; - } - - /** - * @return work directory for webapps. - */ - protected String getWebappsWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "webapps"; - } - -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARServiceMBean.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARServiceMBean.java deleted file mode 100644 index 5fd70ec609..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/JOnASEARServiceMBean.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal; - -import java.util.List; - -/** - * JOnAS EAR Service MBean interface. This interface provides a description for the EAR service management. - * @author Florent Benoit - * @author Ludovic Bert - */ - -public interface JOnASEARServiceMBean { - - /** - * Returns the number of EARs deployed in the JOnAS server. - * @return The number of EARs deployed in the JOnAS server - */ - Integer getDeployedEARsNumber(); - - /** - * Return the list of all loaded Applications. - * @return The list of deployed Applications - */ - List getDeployedEars(); - - /** - * Test if the specified filename is already deployed or not - * @param fileName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - boolean isEarLoaded(String fileName); -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/AppClientModule.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/AppClientModule.java deleted file mode 100644 index 4137a14ccf..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/AppClientModule.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal.mbean; - -import org.ow2.jonas.lib.management.javaee.J2EEModule; - -/** - * MBean class for AppClientModule management - * @author Adriana Danes JSR 77 (J2EE Management Standard) - */ -public class AppClientModule extends J2EEModule { - - /** - * FileName of the client jar - */ - private String fileName = null; - - /** - * Constructor - * @param objectName name of the MBean - * @param fileName name of the client jar - * @param deploymentDescriptor the XML standard DD - * @param jonasDeploymentDescriptor the XML specific DD - */ - public AppClientModule(String objectName, String fileName, String deploymentDescriptor, String jonasDeploymentDescriptor) { - super(objectName); - this.fileName = fileName; - setDeploymentDescriptor(deploymentDescriptor); - setJonasDeploymentDescriptor(jonasDeploymentDescriptor); - } - - /** - * @return the filename - */ - public String getFileName() { - return fileName; - } - -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleIdentifier.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleIdentifier.java deleted file mode 100644 index 59ebd512aa..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleIdentifier.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal.mbean; - -import org.ow2.jonas.ear.internal.EARModule; -import org.ow2.jonas.lib.management.javaee.JSR77ManagementIdentifier; - -/** - * Object for managing the ObjectName of the J2EE Application MBean. - * @author Florent BENOIT - */ -public class EARModuleIdentifier extends JSR77ManagementIdentifier { - - /** - * JMX MBean Type. - */ - private static final String TYPE = "J2EEApplication"; - - /** - * @param instance Managed instance from which the additionnal properties - * will be extracted. - * @return Returns a comma separated(,) list of properties (name=value) - */ - public String getAdditionnalProperties(final EARModule instance) { - StringBuilder sb = new StringBuilder(); - // J2EEServer=? - sb.append(getJ2EEServerString()); - return sb.toString(); - } - - /** - * @param instance Managed instance from which the name will be extracted. - * @return Returns the ObjectName 'name' property value. - */ - public String getNamePropertyValue(final EARModule instance) { - return instance.getEARDeployable().getModuleName(); - } - - /** - * This method has to be implemented by each {@link JSR77ManagementIdentifier}. - * @return Returns the type value. (example : J2EEServer) - */ - public String getTypeValue() { - return TYPE; - } - -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleMBean.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleMBean.java deleted file mode 100644 index 4383d0b35f..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/EARModuleMBean.java +++ /dev/null @@ -1,349 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal.mbean; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.RuntimeOperationsException; -import javax.management.modelmbean.InvalidTargetObjectTypeException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.ow2.jonas.ear.internal.EARModule; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.management.javaee.J2EEDeployedObjectMBean; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.util.url.URLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - -/** - * This class is managing the object for JSR77 J2EEApplication. - * @author Florent BENOIT - */ -public class EARModuleMBean extends J2EEDeployedObjectMBean { - - /** - * Modules of this application. - */ - private String[] modules = null; - - /** - * Public default constructor. - * @throws MBeanException if this Object can't be created - */ - public EARModuleMBean() throws MBeanException { - super(); - } - - /** - * @return Returns the XML Deployment Descriptors of the J2EEApplication Module. - */ - @Override - public String getDeploymentDescriptor() { - String dd = null; - try { - dd = ((EARModule) getManagedResource()).getDeploymentDescriptor(); - } catch (InstanceNotFoundException e) { - throw new IllegalStateException("Cannot get the managed resource of the EARModuleMBean", e); - } catch (RuntimeOperationsException e) { - throw new IllegalStateException("Cannot get the managed resource of the EARModuleMBean", e); - } catch (MBeanException e) { - throw new IllegalStateException("Cannot get the managed resource of the EARModuleMBean", e); - } catch (InvalidTargetObjectTypeException e) { - throw new IllegalStateException("Cannot get the managed resource of the EARModuleMBean", e); - } - return dd; - } - - /** - * Build the Modules of this EAR. - */ - private void initModules() { - // List of ObjectNames corresponding to J2EEModules - List modulesList = new ArrayList(); - - // Get EAR ObjectName - ObjectName objectName = null; - try { - objectName = ObjectName.getInstance(getObjectName()); - } catch (MalformedObjectNameException e) { - throw new IllegalStateException("Cannot get ObjectName on '" + getObjectName() + "'", e); - } catch (NullPointerException e) { - throw new IllegalStateException("Cannot get ObjectName on '" + getObjectName() + "'", e); - } - - // Parse Name - String domain = objectName.getDomain(); - String serverName = objectName.getKeyProperty(J2EESERVER_KEY); - - String appName = objectName.getKeyProperty("name"); - ObjectName modulesOn = null; - - // Add EJBModules - modulesOn = J2eeObjectName.getEJBModules(domain, serverName, appName); - addModuleObjectNames(modulesList, modulesOn); - - // Add WebModules - modulesOn = J2eeObjectName.getWebModules(domain, serverName, appName); - addModuleObjectNames(modulesList, modulesOn); - - // Add ResourceAdapterModules - modulesOn = J2eeObjectName.getResourceAdapterModules(domain, serverName, appName); - addModuleObjectNames(modulesList, modulesOn); - - // Add AppClientModules - modulesOn = J2eeObjectName.getAppClientModules(domain, serverName, appName); - addModuleObjectNames(modulesList, modulesOn); - - // set modules - this.modules = modulesList.toArray(new String[modulesList.size()]); - } - - /** - * Add to a destination list ObjectNames corresponding to J2EEModules - * ObjectName patterns found in the local MBeanServer. - * @param modulesList destination list - * @param objectName J2EEModules ObjectName patterns - */ - @SuppressWarnings("unchecked") - private void addModuleObjectNames(final List modulesList, final ObjectName objectName) { - Iterator itNames = getRegistry().getMBeanServer().queryNames(objectName, null).iterator(); - while (itNames.hasNext()) { - modulesList.add(itNames.next().toString()); - } - } - - /** - * @return the Application Name. - */ - public String getName() { - return getManagedComponent().getEARDeployable().getModuleName(); - } - - /** - * @return the URL of this Application - */ - public URL getEarUrl() { - try { - URL earURL = getManagedComponent().getEARDeployable().getOriginalDeployable().getArchive().getURL(); - if ("file".equals(earURL.getProtocol())) { - // If file, make sure it is escaped correctly - File file = URLUtils.urlToFile(earURL); - earURL = file.toURL(); - } - return earURL; - } catch (Exception e) { - throw new IllegalArgumentException("Cannot get URL from deployable '" + getManagedComponent().getEARDeployable() - + "'.", e); - } - } - - /** - * Return the J2EEModules used by this J2EEApplication (jar, war, rar). - * @return A array of OBJECT_NAMEs corresponding to these modules. - */ - public String[] getModules() { - if (modules == null) { - initModules(); - } - return modules; - } - - - /** - * Gets data about loading a given class. - * @param className the class name - * @return a string description for the given class that needs to be loaded - */ - public String loadClass(final String className) throws javax.management.modelmbean.InvalidTargetObjectTypeException, javax.management.InstanceNotFoundException, javax.management.MBeanException { - - // Get ClassLoader - ClassLoader systemClassLoader = null; - try { - systemClassLoader = LoaderManager.getInstance().getExternalLoader(); - } catch (Exception e) { - throw new IllegalStateException("Unable to get LoaderManager", e); - } - - - // Create XML document... - - // Create builder with factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = null; - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new IllegalStateException("Cannot build document builder", e); - } - - // Create Document - Document document = builder.newDocument(); - - // Append root element - Element classElement = document.createElement("class"); - document.appendChild(classElement); - - // name - classElement.setAttribute("name", className); - - - boolean classNotFound = false; - String error = null; - ClassLoader earClassLoader = ((EARModule) getManagedResource()).getClassLoader(); - Class clazz = null; - try { - clazz = earClassLoader.loadClass(className); - } catch (ClassNotFoundException e) { - error = e.toString(); - classNotFound = true; - } catch (Error e) { - classNotFound = true; - error = e.toString(); - } - - // class not found ? (add error content if NotFound) - classElement.setAttribute("classNotFound", Boolean.toString(classNotFound)); - if (classNotFound) { - Element errorElement = document.createElement("error"); - classElement.appendChild(errorElement); - Text errorText = document.createTextNode(error); - errorElement.appendChild(errorText); - } else { - // Class found ! Add details (if any) - - // Search if the classes was loaded from the module, from the application or from the system - String type = "Application"; - ClassLoader classClassLoader = clazz.getClassLoader(); - ClassLoader cl = earClassLoader; - boolean found = false; - while (cl != null && !found) { - - // ClassLoader is equals to the classloader that has loaded the class - if (cl.equals(classClassLoader)) { - found = true; - } - - if (systemClassLoader.equals(cl)) { - type = "System"; - } - - - cl = cl.getParent(); - } - - // Add where the class has been found - classElement.setAttribute("where", type); - - - // ClassLoader info (if any) - if (classClassLoader != null) { - Element classLoaderElement = document.createElement("class-loader"); - classElement.appendChild(classLoaderElement); - classLoaderElement.setAttribute("name", classClassLoader.getClass().getName()); - Text classLoaderText = document.createTextNode(classClassLoader.toString()); - classLoaderElement.appendChild(classLoaderText); - } - } - - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer; - try { - transformer = transformerFactory.newTransformer(); - } catch (TransformerConfigurationException e) { - throw new IllegalStateException("Unable to get a new transformer", e); - } - - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - - // transform OUTPUT - try { - transformer.transform(new DOMSource(document), streamResult); - } catch (TransformerException e) { - throw new IllegalStateException("Unable to transform the document", e); - } - - return stringWriter.toString(); - } - - /** - * Gets the filters of classloader. - * @return the filters for the war classloader - */ - public String[] getClassLoaderFilters() throws javax.management.modelmbean.InvalidTargetObjectTypeException, javax.management.InstanceNotFoundException, javax.management.MBeanException { - List filters = ((EARModule) getManagedResource()).getFilteringClassLoader().getFilters(); - return filters.toArray(new String[filters.size()]); - } - - /** - * Gets all the URL to the given resource. - * @param resourceName the name of the resource - * @return the list of url, if any - */ - public URL[] getResources(final String resourceName) throws javax.management.modelmbean.InvalidTargetObjectTypeException, javax.management.InstanceNotFoundException, javax.management.MBeanException { - ClassLoader classLoader = ((EARModule) getManagedResource()).getClassLoader(); - - Enumeration urls = null; - try { - urls = classLoader.getResources(resourceName); - } catch (IOException e) { - throw new IllegalStateException("Unable to get the resource '" + resourceName + "'.", e); - } - - List urlsList = new ArrayList(); - while (urls.hasMoreElements()) { - urlsList.add(urls.nextElement()); - } - - return urlsList.toArray(new URL[urlsList.size()]); - } - - -} diff --git a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/Ear.java b/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/Ear.java deleted file mode 100644 index e249e4a053..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/java/org/ow2/jonas/ear/internal/mbean/Ear.java +++ /dev/null @@ -1,259 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ear.internal.mbean; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.management.javaee.J2EEDeployedObject; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; - - -/** - * Class representing an Ear structure which is composed of : - *
      - *
    • array of URL of ejb-jar files
    • - *
    • array of URL of war files
    • - *
    • array of URL of rar files
    • - *
    - * @author Florent Benoit - * @author Michel-Ange Anton (JSR77: J2EEApplication) - * @author Adriana Danes - */ -public class Ear extends J2EEDeployedObject { - - /** - * URLs of ejb-jars files - */ - private URL[] ejbJars = null; - - - /** - * Urls of wars files - */ - private URL[] wars = null; - - /** - * Urls of rars files - */ - private URL[] rars = null; - - /** - * Url of this EAR - */ - private URL earUrl = null; - - /** - * The name of this EAR (J2EEApplication name). - */ - private String name = null; - - /** - * The unpack work copy of this EAR. - */ - private String unpackName = null; - - /** - * The modules OBJECT_NAMEs - */ - private String[] modules = null; - - /** - * The web modules OBJECT_NAMEs - */ - private String[] webModules = null; - - private MBeanServer localMBeanServer = null; - - /** - * Construct an Ear structure with the specified files - * @param objectName The object name of the deployed object - * @param pName name of the application - * @param pUnpackName name of the working copy of the ear - * @param earUrl the url of this ear - * @param deploymentDescriptor the deployment descriptor of the file - * @param ejbJars the URLs of ejb-jar files - * @param wars the URLs of the war files - * @param rars the URLs of the rar files - */ - public Ear(String objectName, String pName, String pUnpackName, URL earUrl, String deploymentDescriptor, URL[] ejbJars, URL[] wars, - URL[] rars, JmxService jmx) { - super(objectName); - this.earUrl = earUrl; - this.name = pName; - this.unpackName = pUnpackName; - setDeploymentDescriptor(deploymentDescriptor); - this.ejbJars = ejbJars; - this.wars = wars; - this.rars = rars; - localMBeanServer = jmx.getJmxServer(); - if (localMBeanServer == null) { - throw new RuntimeException("could not get a reference on the MBean Server"); - } - setModules(); - setWebModules(); - } - - /** - * Return the url of this Ear - * @return the url of this Ear - */ - public URL getEarUrl() { - return earUrl; - } - - /** - * Return the ejb-jar files - * @return the ejb-jar files - */ - public URL[] getEjbJars() { - return ejbJars; - } - - /** - * Return the war files - * @return the war files - */ - public URL[] getWars() { - return wars; - } - - /** - * Return the rar files - * @return the rar files - */ - public URL[] getRars() { - return rars; - } - - /** - * The application name. - * @return application name - */ - public String getName() { - return name; - } - - /** - * The name of the working copy of the ear - * @return work name - */ - public String getUnpackName() { - return unpackName; - } - - /** - * Determine the J2EEModules used by this J2EEApplication (jar, war, rar). - */ - private void setModules() { - // List of ObjectNames corresponding to J2EEModules - ArrayList al = new ArrayList(); - try { - // ear ObjectName - ObjectName on = ObjectName.getInstance(getObjectName()); - String domain = on.getDomain(); - String serverName = on.getKeyProperty(J2EE_TYPE_SERVER); - String appName = on.getKeyProperty(NAME); - ObjectName modulesOn = null; - // Add EJBModules - modulesOn = J2eeObjectName.getEJBModules(domain, serverName, appName); - addModuleObjectNames(al, modulesOn); - // Add WebModules - modulesOn = J2eeObjectName.getWebModules(domain, serverName, appName); - addModuleObjectNames(al, modulesOn); - // Add ResourceAdapterModules - modulesOn = J2eeObjectName.getResourceAdapterModules(domain, serverName, appName); - addModuleObjectNames(al, modulesOn); - // Add AppClientModules - modulesOn = J2eeObjectName.getAppClientModules(domain, serverName, appName); - addModuleObjectNames(al, modulesOn); - } catch (Exception e) { - // none action - throw new RuntimeException("Error while using an objectname", e); - } - //modules = ((String[]) al.toArray(new String[al.size()])); - modules = new String[al.size()]; - for (int i = 0; i < modules.length; i++) { - modules[i] = al.get(i).toString(); - } - } - - /** - * Return the J2EEModules used by this J2EEApplication (jar, war, rar). - * @return A array of OBJECT_NAMEs corresponding to these modules. - */ - public String[] getModules() { - return modules; - } - /** - * @return Returns the webModules. - */ - public String[] getWebModules() { - return webModules; - } - /** - * Determine the web modules contained in this J2EEApplication - */ - public void setWebModules() { - ArrayList al = new ArrayList(); - try { - // ear ObjectName - ObjectName on = ObjectName.getInstance(getObjectName()); - String domain = on.getDomain(); - String serverName = on.getKeyProperty(J2EE_TYPE_SERVER); - String appName = on.getKeyProperty(NAME); - // Add WebModules - ObjectName modulesOn = J2eeObjectName.getWebModules(domain, serverName, appName); - addModuleObjectNames(al, modulesOn); - } catch (Exception e) { - // none action - throw new RuntimeException("Error while using an objectname", e); - } - //webModules = ((String[]) al.toArray(new String[al.size()])); - webModules = new String[al.size()]; - for (int i = 0; i < webModules.length; i++) { - webModules[i] = al.get(i).toString(); - } - } - /** - * Add to a destination list ObjectNames corresponding to J2EEModules ObjectName patterns found - * in the local MBeanServer - * @param al destination list - * @param modulesOn J2EEModules ObjectName patterns - */ - private void addModuleObjectNames (ArrayList al, ObjectName modulesOn) { - Iterator itNames = localMBeanServer.queryNames(modulesOn, null).iterator(); - while (itNames.hasNext()) { - al.add(itNames.next()); - } - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-ear/core/src/main/resources/META-INF/jonas-ear-core.bnd b/jonas/modules/services/jonas-ear/core/src/main/resources/META-INF/jonas-ear-core.bnd deleted file mode 100644 index 2bef6996d0..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/resources/META-INF/jonas-ear-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.ear.internal.* - -# FIXME: Why does this have a DynamicImport * ? -DynamicImport-Package org.ow2.jonas.deployment.api,\ - * diff --git a/jonas/modules/services/jonas-ear/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-ear/core/src/main/resources/metadata.xml deleted file mode 100644 index 6dbc656af2..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-ear/core/src/main/resources/org/ow2/jonas/ear/internal/mbeans-descriptors.xml b/jonas/modules/services/jonas-ear/core/src/main/resources/org/ow2/jonas/ear/internal/mbeans-descriptors.xml deleted file mode 100644 index aa01fad1fb..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/resources/org/ow2/jonas/ear/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-ear/core/src/main/templates/jonas-ear.properties.template b/jonas/modules/services/jonas-ear/core/src/main/templates/jonas-ear.properties.template deleted file mode 100644 index 98fdbcea28..0000000000 --- a/jonas/modules/services/jonas-ear/core/src/main/templates/jonas-ear.properties.template +++ /dev/null @@ -1,17 +0,0 @@ -# -###################### JOnAS EAR service configuration -# -jonas.services ear -# Set the name of the implementation class of the ear service. -jonas.service.ear.class org.ow2.jonas.ear.internal.JOnASEARService - -# Set the XML deployment descriptors parsing mode for the EAR service -# (with or without validation). -jonas.service.ear.parsingwithvalidation true - -# Generate stubs for all EJBs that may be accessed from the application -# In almost all cases, this is not required to be enabled as stubs can be found. -jonas.service.ear.genstub false - -# Create a child classloader when deploying EJB3 of the EAR -jonas.service.ear.useEJB3ChildClassloader false diff --git a/jonas/modules/services/jonas-ear/pom.xml b/jonas/modules/services/jonas-ear/pom.xml deleted file mode 100644 index 2f60dd7019..0000000000 --- a/jonas/modules/services/jonas-ear/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ear - pom - JOnAS :: Services :: EAR - - core - addon - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ejb-ha/ant/pom.xml b/jonas/modules/services/jonas-ejb-ha/ant/pom.xml deleted file mode 100644 index 9a82e092f1..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/ant/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - jonas-ejb-ha - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb-ha-ant - bundle - JOnAS :: Services :: EJB 2.1 :: HA :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ejb-ha/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/ha/Ha.java b/jonas/modules/services/jonas-ejb-ha/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/ha/Ha.java deleted file mode 100644 index 99805343dd..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/ha/Ha.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.ha; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; - -/** - * Defines properties for ha service. - * @author Benoit Pelletier - */ -public class Ha extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[Ha] "; - - /** - * CMI mcast addr attribut. - */ - private static final String MCASTADDR_ATTR = "mcast_addr"; - - /** - * CMI mcast port attribut. - */ - private static final String MCASTPORT_ATTR = "mcast_port"; - - /** - * Default cmi mcast addr. - */ - private static final String DEFAULT_MCASTADDR = "224.0.0.36"; - - /** - * Default cmi mcast port. - */ - private static final String DEFAULT_MCASTPORT = "35468"; - - /** - * Name of JGroups HA configuration file. - */ - public static final String JGROUPS_HA_CONF_FILE = "jgroups-ha.xml"; - - - /** - * Default constructor. - */ - public Ha() { - super(); - } - - /** - * Set mcastAddr. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace the multicast addr - String token = MCASTADDR_ATTR + "=" + "\"" + DEFAULT_MCASTADDR + "\""; - String value = MCASTADDR_ATTR + "=" + "\"" + mcastAddr + "\""; - JReplace mcastAddrReplace = new JReplace(); - mcastAddrReplace.setLogInfo(INFO + "Setting mcastaddr"); - mcastAddrReplace.setConfigurationFile(JGROUPS_HA_CONF_FILE); - mcastAddrReplace.setToken(token); - mcastAddrReplace.setValue(value); - addTask(mcastAddrReplace); - } - - /** - * Set mcastPort. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace the multicast port - String token = MCASTPORT_ATTR + "=" + "\"" + DEFAULT_MCASTPORT + "\""; - String value = MCASTPORT_ATTR + "=" + "\"" + mcastPort + "\""; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace.setLogInfo(INFO + "Setting mcastport"); - mcastPortReplace.setConfigurationFile(JGROUPS_HA_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - super.executeAllTask(); - } - -} diff --git a/jonas/modules/services/jonas-ejb-ha/core/pom.xml b/jonas/modules/services/jonas-ejb-ha/core/pom.xml deleted file mode 100644 index 1f12a5be75..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - jonas-ejb-ha - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-ejb-ha-core - bundle - JOnAS :: Services :: EJB 2.1 :: HA :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-ejb2.1-ha - ${project.version} - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - ${ow2.spec.version} - - - org.ow2.carol - carol - ${carol.version} - - - org.ow2.cmi - cmi-ha - ${cmi.version} - - - org.ow2.bundles - ow2-util-url - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-ejb-ha/core/src/main/java/org/ow2/jonas/ha/internal/HaServiceImpl.java b/jonas/modules/services/jonas-ejb-ha/core/src/main/java/org/ow2/jonas/ha/internal/HaServiceImpl.java deleted file mode 100644 index 9b7594936b..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/src/main/java/org/ow2/jonas/ha/internal/HaServiceImpl.java +++ /dev/null @@ -1,216 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * Copyright (C) 2006 Distributed Systems Lab. - * Universidad Politecnica de Madrid (Spain) - * Contact: http://lsd.ls.fi.upm.es/lsd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ha.internal; - -import java.util.Stack; - -import javax.ejb.EntityContext; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.util.configuration.ConfigurationException; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.cmi.ha.ReplicationManager; -import org.ow2.cmi.ha.ReplicationManagerImpl; -import org.ow2.cmi.ha.RequestId; -import org.ow2.cmi.ha.interceptor.HACurrent; -import org.ow2.cmi.ha.interceptor.jrmp.HAInterceptorInitializer; -import org.ow2.jonas.cmi.CmiService; -import org.ow2.jonas.ha.HaService; -import org.ow2.jonas.lib.ejb21.ha.JRepUtil; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; - -/** - * This class binds the HA service to JOnAS and initializes the HA architecture. - * - * @author Francisco Perez-Sorrosal (fpsorrosal@no-spam@fi.upm.es) - * @author Alberto Paz-Jimenez (apaz@no-spam@fi.upm.es) - * @author benoit pelletier - */ -public class HaServiceImpl extends AbsServiceImpl implements HaService { - - /** - * Logger. - */ - private static final Logger logger = Log.getLogger("org.ow2.jonas.ha"); - - /** - * CMI HA replication manager. - */ - private ReplicationManager replicationMgr; - - private HACurrent haCurrent; - - /** - * CMI Service reference. - */ - private CmiService cmiService; - - /** - * Backup info timeout. - */ - private int gcPeriod; - - /** - * Tx table datasource. - */ - private String datasource; - - /** - * JGroups configuration file property name. - */ - private String jgroupsConf; - - /** - * JGroups channel property name. - */ - private String jgroupsGroupname; - - /** - * Reconnection timeout for JGroups Channel. This property is injected. - */ - private long reconnectionTimeout; - - /** - * Set a reference for the CMI service - * @param cmiService a CMI service reference - */ - public void setCmiService(final CmiService cmiService) { - this.cmiService = cmiService; - } - - public void setGcPeriod(final int gcPeriod) { - this.gcPeriod = gcPeriod; - } - - public void setDatasource(final String datasource){ - this.datasource = datasource; - } - - public void setJgroupsConf(final String jgroupsConf) { - this.jgroupsConf = jgroupsConf; - } - - public void setJgroupsGroupname(final String jgroupsGroupname) { - this.jgroupsGroupname = jgroupsGroupname; - } - - public void setReconnectionTimeout(final long reconnectionTimeout) { - this.reconnectionTimeout = reconnectionTimeout; - } - - @Override - public void doStart() throws ServiceException { - logger.log(BasicLevel.INFO, "Starting replication service..."); - - try { - replicationMgr = new ReplicationManagerImpl( - gcPeriod, datasource, jgroupsConf, jgroupsGroupname, reconnectionTimeout); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Error during HA Service startup", e); - throw new ServiceException("Error during HA Service startup", e); - } - // Init the HA current class - haCurrent = HACurrent.getHACurrent(); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "replicationMgr=" + replicationMgr); - logger.log(BasicLevel.DEBUG, "haCurrent=" + haCurrent); - } - - JRepUtil.setRepMgr(replicationMgr); - - try { - ConfigurationRepository.addInterceptors("jrmp", HAInterceptorInitializer.class); - } catch (ConfigurationException e) { - logger.log(BasicLevel.ERROR, "Cannot register the HA interceptors", e); - throw new ServiceException("Cannot register the HA interceptors", e); - } - - // COMPLETE: Allow to start and shutdown service dynamically - logger.log(BasicLevel.INFO, "Replication service started"); - } - - @Override - public void doStop() throws ServiceException { - try { - ConfigurationRepository.removeInterceptors("jrmp", HAInterceptorInitializer.class); - } catch (ConfigurationException e) { - logger.log(BasicLevel.ERROR, "Cannot unregister the HA interceptors", e); - throw new ServiceException("Cannot unregister the HA interceptors", e); - } - // COMPLETE: Allow to start and shutdown service dynamically - replicationMgr.clear(); // Turn off the GCL - logger.log(BasicLevel.INFO, "Replication service stopped"); - } - - /** - * Send commit/abort message. - * @param committed true if the transaction has committed - */ - public void replicateCommit(final boolean committed) { - Stack requests = haCurrent.getRequests(); - if ((requests != null) - && (requests.size() == 1)) { - RequestId reqId = requests.peek(); - if (reqId != null) { - try { - replicationMgr.replicateCommit(reqId, committed); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Unable to replicate commit/abort", e); - } - } - } - } - - public void replicate() { - Stack requests = haCurrent.getRequests(); - if ((requests != null) - && (requests.size() == 1)) { - RequestId reqId = requests.peek(); - try { - replicationMgr.replicate(reqId); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Unable to replicate", e); - } - } - } - - public void addEntityBean(final EntityContext jec) { - Stack requests = haCurrent.getRequests(); - if ((requests != null) && !requests.isEmpty()) { - RequestId rootId = requests.firstElement(); - JRepUtil.addEntityBean(jec, rootId); - } - } - - -} diff --git a/jonas/modules/services/jonas-ejb-ha/core/src/main/jonas-resources/conf/jgroups-ha.xml b/jonas/modules/services/jonas-ejb-ha/core/src/main/jonas-resources/conf/jgroups-ha.xml deleted file mode 100644 index 769d08141e..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/src/main/jonas-resources/conf/jgroups-ha.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/META-INF/jonas-ejb-ha-core.bnd b/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/META-INF/jonas-ejb-ha-core.bnd deleted file mode 100644 index e41ec98b36..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/META-INF/jonas-ejb-ha-core.bnd +++ /dev/null @@ -1,31 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export-nothing -Export-Package !* - -Private-Package org.ow2.jonas.ha.internal.* - -DynamicImport-Package org.ow2.cmi.ha,\ - org.ow2.cmi.ha.interceptor, \ - org.ow2.cmi.ha.interceptor.jrmp diff --git a/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/metadata.xml deleted file mode 100644 index a79caee5e1..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-ejb-ha/core/src/main/templates/jonas-ha.properties.template b/jonas/modules/services/jonas-ejb-ha/core/src/main/templates/jonas-ha.properties.template deleted file mode 100644 index a225cdb8c8..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/core/src/main/templates/jonas-ha.properties.template +++ /dev/null @@ -1,21 +0,0 @@ -# -###################### JOnAS HA service configuration -# -jonas.services ha -# Set the name of the implementation class of the HA service. -jonas.service.ha.class org.ow2.jonas.ha.internal.HaServiceImpl - -# Set the JGroups configuration file name -jonas.service.ha.jgroups.conf jgroups-ha.xml - -# Set the JGroups group name -jonas.service.ha.jgroups.groupname jonas-rep - -# Set the SFSB backup info timeout. The info stored in the backup node is removed when the timer expires. -jonas.service.ha.gc.period 600 - -# Set the datasource for the tx table -jonas.service.ha.datasource jdbc_1 - -# Reconnection timeout for JGroups Channel, if it's closed on request. -jonas.service.ha.reconnection.timeout 5000 diff --git a/jonas/modules/services/jonas-ejb-ha/pom.xml b/jonas/modules/services/jonas-ejb-ha/pom.xml deleted file mode 100644 index 2ff72ea9e0..0000000000 --- a/jonas/modules/services/jonas-ejb-ha/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ejb-ha - pom - JOnAS :: Services :: EJB 2.1 :: HA - - core - ant - - diff --git a/jonas/modules/services/jonas-endpoint-collector/core/pom.xml b/jonas/modules/services/jonas-endpoint-collector/core/pom.xml deleted file mode 100644 index 8330656f10..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - jonas-endpoint-collector - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-endpoint-collector-core - bundle - JOnAS :: Services :: JOnAS Endpoint Collector :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/Endpoint.java b/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/Endpoint.java deleted file mode 100644 index 8797212835..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/Endpoint.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.endpoint.collector; - -/** - * Created by IntelliJ IDEA. - * User: cazauxj - * Date: 3/30/12 - * Time: 10:26 AM - * To change this template use File | Settings | File Templates. - */ -public class Endpoint implements IEndpoint { - - private String source; - - private String protocol; - - private String port; - - private String host; - - private String url; - - public String getSource() { - return source; - } - - public String getHost() { - return host; - } - - public String getPort() { - return port; - } - - public String getProtocol() { - return protocol; - } - - public String getUrl() { - return url; - } - - public void setSource(String source) { - this.source = source; - } - - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - public void setPort(String port) { - this.port = port; - } - - public void setHost(String host) { - this.host = host; - } - - public void setUrl(String url) { - this.url = url; - } -} diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpoint.java b/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpoint.java deleted file mode 100644 index d433814b29..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpoint.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.endpoint.collector; - -/** - * Represents an endpoint - * @author Jeremy Cazaux - */ -public interface IEndpoint { - - /** - * Prefix of the source id - */ - static final String SOURCE_PREFIX = "endpoint/"; - - /** - * @return the source - */ - String getSource(); - - /** - * @return the port - */ - String getPort(); - - /** - * @return the host - */ - String getHost(); - - /** - * @return the protocol - */ - String getProtocol(); - - /** - * @return the URL (if exist) - */ - String getUrl(); - - /** - * @param source The source to set - */ - void setSource(String source); - - /** - * @param protocol The protocol to set - */ - void setProtocol(String protocol); - - /** - * @param port The port to set - */ - void setPort(String port); - - /** - * @param host The host to set - */ - void setHost(String host); - - /** - * @param url The url to set - */ - void setUrl(String url); -} diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpointBuilder.java b/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpointBuilder.java deleted file mode 100644 index 48b5908712..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/IEndpointBuilder.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.endpoint.collector; - -import javax.management.ObjectName; - -/** - * Represents an {@link IEndpoint} builder - * @author Jeremy Cazaux - */ -public interface IEndpointBuilder { - - /** - * @param objectName The {@link ObjectName} - * @return true if the endpoint builder support the given {@link ObjectName} - */ - boolean isSupport(ObjectName objectName); - - /** - * @param objectName The {@link ObjectName} - * @return the associated {@link IEndpoint} - */ - IEndpoint buildEndpoint(ObjectName objectName); -} diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/internal/EndpointCollector.java b/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/internal/EndpointCollector.java deleted file mode 100644 index 553749d27b..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/internal/EndpointCollector.java +++ /dev/null @@ -1,274 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.endpoint.collector.internal; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.endpoint.collector.Endpoint; -import org.ow2.jonas.endpoint.collector.IEndpoint; -import org.ow2.jonas.endpoint.collector.IEndpointBuilder; -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.management.InstanceNotFoundException; -import javax.management.ListenerNotFoundException; -import javax.management.MBeanServer; -import javax.management.MBeanServerDelegate; -import javax.management.MBeanServerNotification; -import javax.management.Notification; -import javax.management.NotificationListener; -import javax.management.ObjectName; -import javax.management.relation.MBeanServerNotificationFilter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Pattern; - -/** - * Represents an {@link IEndpoint} collector - * @author Jeremy Cazaux - */ -public class EndpointCollector extends AbsServiceImpl implements NotificationListener { - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(EndpointCollector.class); - - /** - * Map between an {@link ObjectName} and its assocated {@link ServiceReference} - */ - private Map> endpointMap; - - /** - * The {@link BundleContext} - */ - private BundleContext bundleContext; - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * The {@link MBeanServer} - */ - private MBeanServer mBeanServer; - - /** - * The list of {@link IEndpointBuilder} - */ - private List endpointBuilders; - - /** - * Default constructor - */ - public EndpointCollector(final BundleContext bundleContext) { - this.endpointMap = new HashMap>(); - this.bundleContext = bundleContext; - this.endpointBuilders = new ArrayList(); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doStart() throws ServiceException { - MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter(); - filter.enableAllObjectNames(); - - //add a notification listener on JMX connectors - String jmxProtocolPattern = "connectors:protocol=rmi,name=*"; - ObjectName objectName = Util.getObjectName(jmxProtocolPattern); - if (objectName != null) { - Set objectNameSet = this.mBeanServer.queryNames(objectName, null); - for (ObjectName on: objectNameSet) { - handleEndpoint(on); - } - } - - //add a notification listener on RMI connectors - String rmiProtocolPattern = this.jmxService.getDomainName() + ":j2eeType=JNDIResource,name=*,J2EEServer=" + - this.jmxService.getJonasServerName(); - objectName = Util.getObjectName(rmiProtocolPattern); - if (objectName != null) { - Set objectNameSet = this.mBeanServer.queryNames(objectName, null); - for (ObjectName on: objectNameSet) { - handleEndpoint(on); - } - } - - //add a notification listener on the MBeanServerDelegate - try { - this.mBeanServer.addNotificationListener(MBeanServerDelegate.DELEGATE_NAME, this, filter, null); - } catch (InstanceNotFoundException e) { - logger.info("Cannot add notification listener on " + MBeanServerDelegate.DELEGATE_NAME, e); - } - - logger.info("Endpoint Collector started."); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doStop() throws ServiceException { - try { - this.mBeanServer.removeNotificationListener(MBeanServerDelegate.DELEGATE_NAME, this); - } catch (InstanceNotFoundException e) { - logger.error("Cannot remove notification listener on " + MBeanServerDelegate.DELEGATE_NAME, e); - } catch (ListenerNotFoundException e) { - logger.error("Cannot remove notification listener on " + MBeanServerDelegate.DELEGATE_NAME, e); - } - logger.info("Endpoint Collector stopped."); - } - - /** - * @param jmxService The {@link org.ow2.jonas.jmx.JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - this.mBeanServer = jmxService.getJmxServer(); - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - //this.mBeanServer = null; - } - - /** - * {@inheritDoc} - */ - public void handleNotification(final Notification notification, final Object handback) { - if (notification != null) { - if (MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(notification.getType())) { - MBeanServerNotification mBeanServerNotification = (MBeanServerNotification) notification; - ObjectName objectName = mBeanServerNotification.getMBeanName(); - handleEndpoint(objectName); - } else if (MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(notification.getType())) { - MBeanServerNotification mBeanServerNotification = (MBeanServerNotification) notification; - ObjectName objectName = mBeanServerNotification.getMBeanName(); - - //unregister its associated endpoint - ServiceRegistration serviceRegistration = this.endpointMap.get(objectName); - if (serviceRegistration != null) { - serviceRegistration.unregister(); - } - } - } - } - - /** - * Register new Endpoint associated to the given {@link ObjectName} in the OSGi registry - * @param objectName An {@link ObjectName} - */ - private void handleEndpoint(final ObjectName objectName) { - if (objectName != null) { - IEndpoint endpoint = null; - Pattern jmxPattern = Pattern.compile("connectors:protocol=rmi,name=.*"); - Pattern rmiPattern = Pattern.compile(".*:j2eeType=JNDIResource,name=.*,J2EEServer=.*"); - if (jmxPattern.matcher(objectName.toString()).matches()) { - //handle JMX Endpoint - endpoint = new Endpoint(); - Object value = getMBeanAttributeValue(objectName, "Address"); - if (value != null) { - endpoint.setUrl(String.valueOf(value)); - } - final String protocol = "jmx"; - endpoint.setProtocol(protocol); - endpoint.setSource(IEndpoint.SOURCE_PREFIX + protocol); - } else if (rmiPattern.matcher(objectName.toString()).matches()) { - //handle RMI Endpoint - endpoint = new Endpoint(); - Object value = getMBeanAttributeValue(objectName, "Name"); - if (value != null) { - String protocol = String.valueOf(value); - endpoint.setProtocol(protocol); - endpoint.setSource(IEndpoint.SOURCE_PREFIX + protocol); - } - value = getMBeanAttributeValue(objectName, "ProviderURL"); - if (value != null) { - endpoint.setUrl(String.valueOf(value)); - } - } else { - //handle other Endpoints - IEndpointBuilder endpointBuilder = getEndpointBuilder(objectName); - if (endpointBuilder != null) { - endpoint = endpointBuilder.buildEndpoint(objectName); - } - } - - if (endpoint != null) { - //register the endpoint as an OSGi service - this.endpointMap.put(objectName, (ServiceRegistration) - this.bundleContext.registerService(IEndpoint.class.getName(), endpoint, null)); - } - } - } - - /** - * @param objectName The {@link ObjectName} - * @param attribute An attribute of the associated MBean to retrieve - * @return the value of the given attribute - */ - public Object getMBeanAttributeValue(final ObjectName objectName, final String attribute) { - return Util.getMBeanAttributeValue(objectName, attribute, this.mBeanServer); - } - - /** - * @param objectName The {@link ObjectName} - * @return the first {@link IEndpointBuilder} which support the given {@link ObjectName} - */ - private IEndpointBuilder getEndpointBuilder(final ObjectName objectName) { - for (IEndpointBuilder endpointBuilder: this.endpointBuilders) { - if (endpointBuilder.isSupport(objectName)) { - return endpointBuilder; - } - } - return null; - } - - /** - * @param endpointBuilder The {@link IEndpointBuilder} to bind - */ - public void bindEndpointBuilder(final IEndpointBuilder endpointBuilder) { - this.endpointBuilders.add(endpointBuilder); - } - - /** - * @param endpointBuilder The {@link IEndpointBuilder} to unbind - */ - public void unbindEndpointBuilder(final IEndpointBuilder endpointBuilder) { - //this.endpointBuilders.remove(endpointBuilder); - } -} diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/util/Util.java b/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/util/Util.java deleted file mode 100644 index 07718571ef..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/java/org/ow2/jonas/endpoint/collector/util/Util.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.endpoint.collector.util; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; - -/** - * Utility MBean class - */ -public class Util { - - /** - * The logger - */ - private static final Log logger = LogFactory.getLog(Util.class); - - /** - * @param objectName The {@link javax.management.ObjectName} - * @param attribute An attribute of the associated MBean to retrieve - * @return the value of the given attribute - */ - public static Object getMBeanAttributeValue(final ObjectName objectName, final String attribute, final MBeanServer mBeanServer) { - try { - return mBeanServer.getAttribute(objectName, attribute); - } catch (MBeanException e) { - logger.error("Cannot get Attribute Address of ObjectName " + objectName, e); - } catch (AttributeNotFoundException e) { - logger.error("Cannot get Attribute Address of ObjectName " + objectName, e); - } catch (InstanceNotFoundException e) { - logger.error("Cannot get Attribute Address of ObjectName " + objectName, e); - } catch (ReflectionException e) { - logger.error("Cannot get Attribute Address of ObjectName " + objectName, e); - } - return null; - } - - /** - * @param pattern The pattern - * @return an instance of the associated {@link ObjectName} - */ - public static ObjectName getObjectName(final String pattern) { - ObjectName objectName = null; - try { - objectName = new ObjectName(pattern); - } catch (MalformedObjectNameException e) { - logger.error("Cannot instanciate ObjectName with pattern " + pattern, e); - } - return objectName; - } -} diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/META-INF/jonas-endpoint-collector.bnd b/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/META-INF/jonas-endpoint-collector.bnd deleted file mode 100644 index 90481f6c69..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/META-INF/jonas-endpoint-collector.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package org.ow2.jonas.endpoint.collector, \ - org.ow2.jonas.endpoint.collector.util - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/metadata.xml deleted file mode 100644 index 317593f68e..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-endpoint-collector/pom.xml b/jonas/modules/services/jonas-endpoint-collector/pom.xml deleted file mode 100644 index e27927dc36..0000000000 --- a/jonas/modules/services/jonas-endpoint-collector/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-endpoint-collector - JOnAS :: Services :: JOnAS Endpoint Collector - pom - - core - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-extension-loader/core/pom.xml b/jonas/modules/services/jonas-extension-loader/core/pom.xml deleted file mode 100644 index ffa1ae2f73..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - jonas-extension-loader - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-extension-loader-core - bundle - JOnAS :: Services :: Extension Loader :: Core - - - - biz.aQute - bndlib - 1.15.0 - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.bundles - ow2-util-url - ${ow2-bundles.version} - provided - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - provided - - - - - - aQute-releases - aQute Maven Repository (for Bnd) - http://www.aqute.biz/repo - true - false - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bnd.java b/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bnd.java deleted file mode 100644 index 45fa673a49..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bnd.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.extension.loader; - -import aQute.lib.osgi.Analyzer; -import aQute.lib.osgi.Builder; -import aQute.lib.osgi.Jar; -import aQute.lib.osgi.Verifier; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Perform the wrap operation of the bnd tool, force the - * DynamicImport-Package header to '*'. - * @author Guillaume Sauthier - */ -public class Bnd { - - /** - * List of error messages that can be reported to the user. - */ - private List errors; - - /** - * Wrap (using bnd) a jar file into an OSGi bundle - * @param source original jar file - * @param output target bundle created by this operation - * @return the numbers of errors encountered during this bundle creation - * @throws Exception if some file handling errors occurs. - */ - public boolean wrap(final File source, final File output) throws Exception { - // Init the properties - Properties properties = new Properties(); - properties.setProperty(Analyzer.DYNAMICIMPORT_PACKAGE, "*"); - - errors = new ArrayList(); - - Analyzer analyzer = new Analyzer(); - try { - analyzer.setJar(source); - Jar dot = analyzer.getJar(); - - if (properties != null) { - analyzer.setProperties(properties); - } - - if (analyzer.getProperty(Analyzer.IMPORT_PACKAGE) == null) - analyzer.setProperty(Analyzer.IMPORT_PACKAGE, - "*;resolution:=optional"); - - if (analyzer.getProperty(Analyzer.BUNDLE_SYMBOLICNAME) == null) { - Pattern p = Pattern.compile("(" - + Verifier.SYMBOLICNAME.pattern() - + ")(-[0-9])?.*\\.jar"); - String base = source.getName(); - Matcher m = p.matcher(base); - base = "Untitled"; - if (m.matches()) { - base = m.group(1); - } else { - throw new IOException("Can not calculate symbolic name of bundle, " + - "rename jar to respect pattern (-).jar" + source); - } - analyzer.setProperty(Analyzer.BUNDLE_SYMBOLICNAME, base); - } - - if (analyzer.getProperty(Analyzer.EXPORT_PACKAGE) == null) { - String export = analyzer.calculateExportsFromContents(dot); - analyzer.setProperty(Analyzer.EXPORT_PACKAGE, export); - } - - analyzer.mergeManifest(dot.getManifest()); - - // - // Cleanup the version .. - // - String version = analyzer.getProperty(Analyzer.BUNDLE_VERSION); - if (version != null) { - version = Builder.cleanupVersion(version); - analyzer.setProperty(Analyzer.BUNDLE_VERSION, version); - } - - analyzer.calcManifest(); - Jar jar = analyzer.getJar(); - jar.write(output); - jar.close(); - - errors.addAll(analyzer.getErrors()); - return analyzer.getErrors().size() == 0; - } finally { - analyzer.close(); - } - - } - - public List getErrors() { - return errors; - } -} diff --git a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bundlizable.java b/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bundlizable.java deleted file mode 100644 index e97b80f8db..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/Bundlizable.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.extension.loader; - -import java.io.File; - -/** - * Represents a jar file in lib/ext that will be converted in bundle. - * @author Guillaume Sauthier - */ -public class Bundlizable { - - /** - * The jar in lib/ext. - */ - private File source; - - /** - * The generated bundle file. - */ - private File target; - - /** - * Set the source jar file. - * @param source the source jar file - */ - public void setSource(final File source) { - this.source = source; - } - - /** - * Set the target bundle file. - * @param target generated bundle file - */ - public void setTarget(final File target) { - this.target = target; - } - - /** - * @return the source file (may be null). - */ - public File getSource() { - return this.source; - } - - /** - * @return the target bundle file (may be null). - */ - public File getTarget() { - return this.target; - } - - /** - * @return true if the target bundle is outdated compared to the source file. - */ - public boolean isTargetOutdated() { - - // no target, so it's outdated - if (!target.exists()) { - return true; - } - - // target older than source - if (target.lastModified() > source.lastModified()) { - return true; - } - - return false; - } - - /** - * @return true is there is no source associated to the target bundle. - */ - public boolean isSourceSuppressed() { - return source == null; - } - - /** - * @return true if there is no target bundle. - */ - public boolean isFirstUsage() { - return target == null; - } - -} diff --git a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/ExtensionLoaderComponent.java b/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/ExtensionLoaderComponent.java deleted file mode 100644 index 484f3fc96e..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/src/main/java/org/ow2/jonas/extension/loader/ExtensionLoaderComponent.java +++ /dev/null @@ -1,347 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.extension.loader; - -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.jar.JarFile; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.service.packageadmin.PackageAdmin; -import org.ow2.jonas.properties.ServerProperties; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -import aQute.lib.osgi.Analyzer; - -/** - * This service will load all the jar file from lib/ext and convert them into bundles. - * If the transformation has already been done for a given jar, it's not re-done. - * @author Guillaume Sauthier - */ -public class ExtensionLoaderComponent { - - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(ExtensionLoaderComponent.class); - - /** - * The bundle's context. - */ - private BundleContext context; - - /** - * Server Properties. - */ - private ServerProperties serverProps; - - /** - * Installed bundles. - */ - private List bundles; - - /** - * All the bundlizables. - */ - private Map bundlizables; - - /** - * Used to pre-resolve installed bundles. - */ - private PackageAdmin packageAdmin; - - /** - * Construct a new Extension Loader. - * @param context this module's Context - */ - public ExtensionLoaderComponent(final BundleContext context) { - this.context = context; - bundles = new ArrayList(); - bundlizables = new HashMap(); - } - - /** - * At startup, convert all jar files from lib/ext into bundles. - */ - public void start() { - - bundles.clear(); - bundlizables.clear(); - - // Find resources in lib/ext - File jonasRoot = new File(System.getProperty("jonas.root")); - File jonasBase = new File(System.getProperty("jonas.base")); - - - File rootLibExt = new File(new File(jonasRoot, "lib"), "ext"); - File baseLibExt = new File(new File(jonasBase, "lib"), "ext"); - final File bundleWork = new File(serverProps.getWorkDirectory(), "ext-bundles"); - - if (!bundleWork.exists()) { - bundleWork.mkdirs(); - } - - FileFilter selectJar = new FileFilter() { - public boolean accept(final File child) { - // Do not manage non .jar files - return (child.getName().endsWith(".jar") && child.isFile()); - } - }; - - // Iterates on the 'sources' directory take #1 - if (rootLibExt.isDirectory()) { - for (File child : rootLibExt.listFiles(selectJar)) { - String name = child.getName(); - Bundlizable bnd = bundlizables.get(name); - if (bnd == null) { - bnd = new Bundlizable(); - bnd.setSource(child); - bundlizables.put(child.getName(), bnd); - } - } - } - if (baseLibExt.isDirectory() && !rootLibExt.equals(baseLibExt)) { - // ... and on the 'sources' directory take #2 - for (File child : baseLibExt.listFiles(selectJar)) { - String name = child.getName(); - Bundlizable bnd = bundlizables.get(name); - if (bnd == null) { - bnd = new Bundlizable(); - bnd.setSource(child); - bundlizables.put(child.getName(), bnd); - } - } - } - - // Now, list the 'target' directory - for (File child : bundleWork.listFiles(selectJar)) { - String name = child.getName(); - Bundlizable bnd = bundlizables.get(name); - if (bnd == null) { - bnd = new Bundlizable(); - bnd.setTarget(child); - bundlizables.put(child.getName(), bnd); - } - } - - - for (Iterator> i = bundlizables.entrySet().iterator(); i.hasNext();) { - Map.Entry entry = i.next(); - Bundlizable bnd = entry.getValue(); - - if (bnd.isSourceSuppressed()) { - // Now, we will remove the bundles that have no more a source file: - // i.e it was suppressed from lib/ext, seems logical to not install the bundles anymore - // We also need to uninstall the bundle if it was previously installed - File target = bnd.getTarget(); - uninstall(target); - target.delete(); - i.remove(); - } else if (bnd.isFirstUsage()) { - // Initial bundle creation - File target = new File(bundleWork, bnd.getSource().getName()); - bnd.setTarget(target); - applyBndWrap(bnd.getSource(), target); - } else if (bnd.isTargetOutdated()) { - // Needs to update the bundle - bnd.getTarget().delete(); - applyBndWrap(bnd.getSource(), bnd.getTarget()); - } // else nothing to do - } - - - if (bundlizables.size() != 0) { - StringBuilder sb = new StringBuilder(); - sb.append("Some jars have been found in ["); - sb.append(rootLibExt); - if (!rootLibExt.equals(baseLibExt)) { - sb.append(", "); - sb.append(baseLibExt); - } - sb.append("]."); - sb.append(" They have been transformed into bundles (see "); - sb.append(bundleWork); - sb.append(" directory)."); - - sb.append("This is NOT the preferred way to extend JOnAS libraries, "); - sb.append("prefer to use carefully created and tested bundles, "); - sb.append("and place them in your deploy/ directory."); - - logger.info(sb.toString()); - } - for (Iterator> i = bundlizables.entrySet().iterator(); i.hasNext();) { - Map.Entry entry = i.next(); - Bundlizable bnd = entry.getValue(); - - // Try to install the bundle - String url = URLUtils.fileToURL(bnd.getTarget()).toExternalForm(); - try { - Bundle installed = context.installBundle(url); - logger.info("{0} installed as a bundle.", url); - bundles.add(installed); - } catch (BundleException e) { - logger.warn("Unable to install '{0}': {1}", url, e.getMessage()); - } - } - - // Resolve installed bundles - Bundle[] resolvables = bundles.toArray(new Bundle[bundles.size()]); - if (resolvables != null) { - boolean resolved = packageAdmin.resolveBundles(resolvables); - if (!resolved) { - logger.debug("Some lib/ext bundles could not be resolved"); - } - } - } - - /** - * Uninstall this bundle from the gateway. - * @param target the given file to uninstall - */ - protected void uninstall(final File target) { - // Do nothing if file is not here - if (target == null || !target.exists()) { - return; - } - - // Load symbolic-name of the target - String symbolicName = null; - JarFile jar = null; - try { - jar = new JarFile(target); - symbolicName = jar.getManifest().getMainAttributes().getValue(Analyzer.BUNDLE_SYMBOLICNAME); - } catch (IOException e) { - logger.error("Unable to find symbolic name from the bundle ''{0}''", target); - return; - } finally { - if (jar != null) { - try { - jar.close(); - } catch (IOException e) { - logger.debug("Unable to close the bundle file ''{0}''", target); - } - } - } - - // Unable to find it, skip - if (symbolicName == null) { - logger.error("Unable to find symbolic name from the bundle ''{0}''", target); - return; - } - - - // Now, search the bundle - boolean bundleFound = false; - int i = 0; - Bundle[] bundles = context.getBundles(); - Bundle bundle = null; - if (bundles != null) { - while (!bundleFound && i < bundles.length) { - bundle = bundles[i]; - if (symbolicName.equals(bundle.getSymbolicName())) { - // found - bundleFound = true; - break; - } - i++; - } - } - // Uninstall the bundle if it has been found - if (bundleFound) { - try { - logger.info("Uninstalling the bundle ''{0}'' as the origin file has been removed from lib/ext", target); - bundle.uninstall(); - } catch (BundleException e) { - logger.warn("Unable to uninstall ''{0}''", target, e); - } - } - - } - - - private void applyBndWrap(final File source, final File output) { - Bnd myBnd = new Bnd(); - boolean errors = false; - try { - // default wrapping (Export all content) - errors = myBnd.wrap(source, output); - } catch (Exception e) { - logger.warn("Unable to bundlize '{0}'", source, e); - } - - // Only prints errors in debug mode - if (errors && logger.isDebugEnabled()) { - List messages = myBnd.getErrors(); - if (messages != null) { - for (String message : messages) { - logger.debug("[Bnd] {0}: {1}", source.getName(), message); - } - } - } - } - - /** - * After stop, all installed bundles must be uninstalled. - */ - public void stop() { - for (Bundle bundle : bundles) { - try { - bundle.uninstall(); - } catch (BundleException e) { - logger.debug("Unable to uninstall bundle '{0}[{1}]': {2}", - bundle.getSymbolicName(), - bundle.getBundleId(), - e.getMessage()); - } - } - } - - /** - * Inject PackageAdmin - * @param packageAdmin admin interface. - */ - public void setPackageAdmin(final PackageAdmin packageAdmin) { - this.packageAdmin = packageAdmin; - } - - /** - * Set the Server Properties. - * @param props {@link ServerProperties} instance - */ - public void setServerProperties(final ServerProperties props) { - this.serverProps = props; - } -} - diff --git a/jonas/modules/services/jonas-extension-loader/core/src/main/resources/META-INF/jonas-extension-loader-core.bnd b/jonas/modules/services/jonas-extension-loader/core/src/main/resources/META-INF/jonas-extension-loader-core.bnd deleted file mode 100644 index f34f9b6fab..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/src/main/resources/META-INF/jonas-extension-loader-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.extension.loader.* ,\ - aQute.* - -Import-Package !org.eclipse.*, \ - !org.apache.tools.ant.*, \ - * - diff --git a/jonas/modules/services/jonas-extension-loader/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-extension-loader/core/src/main/resources/metadata.xml deleted file mode 100644 index 8bf4f2c941..0000000000 --- a/jonas/modules/services/jonas-extension-loader/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-extension-loader/pom.xml b/jonas/modules/services/jonas-extension-loader/pom.xml deleted file mode 100644 index ef87e8eb85..0000000000 --- a/jonas/modules/services/jonas-extension-loader/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - jonas-extension-loader - pom - JOnAS :: Services :: Extension Loader - - core - - diff --git a/jonas/modules/services/jonas-jmx/core/pom.xml b/jonas/modules/services/jonas-jmx/core/pom.xml deleted file mode 100644 index d158b465b0..0000000000 --- a/jonas/modules/services/jonas-jmx/core/pom.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - jonas-jmx - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jmx-core - bundle - JOnAS :: Services :: JMX :: Core - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.bundles - ow2-util-log - - - org.ow2.bundles - ow2-util-i18n - - - commons-modeler - commons-modeler - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/BaseJMXService.java b/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/BaseJMXService.java deleted file mode 100644 index e5de8cbad5..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/BaseJMXService.java +++ /dev/null @@ -1,522 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx.internal; - -import java.lang.management.ManagementFactory; -import java.lang.reflect.Proxy; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerFactory; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectName; -import javax.management.modelmbean.ModelMBean; - -import org.apache.commons.modeler.ManagedBean; -import org.apache.commons.modeler.Registry; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.jmx.Interceptor; -import org.ow2.jonas.jmx.JManagementIdentifier; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jmx.internal.interceptor.InvocationHandlerImpl; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.LogFactory; - -/** - * JMX Service implementation. This singleton class must exist in each jonas - * server that is to be administered via JMX. Its main role is to initialize the - * service (the singleton object). - * @author Guillaume Riviere - * @author Michel Bruno - * @author Adriana Danes - * @author Mohammed Boukada (Proxy MBeanServer) - */ -public abstract class BaseJMXService extends AbsServiceImpl implements JmxService { - - /** - * Trace logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_JMX_PREFIX); - - /** - * Logger OW2. - */ - private static org.ow2.util.log.Log log = LogFactory.getLog(BaseJMXService.class); - - - /** - * The Identifier in charge of creating the right ObjectName for a given - * instance. - */ - private Map, JManagementIdentifier> identifiers = null; - - /** - * @return Logger logger object - */ - protected static Logger getLogger() { - return logger; - } - - /** - * JMX server (MBean server) instance. - */ - private MBeanServer jmxServer = null; - - /** - * Jakarta commons modeler registry. - */ - private Registry modelerRegistry = null; - - /** - * default MBeanServer ID. - */ - private String mbeanServerID = null; - - /** - * List of registered MBeans object names. - */ - private List registeredMBeansObjectNames = null; - - /** - * List of registered ModelMBeans object names. - */ - private List registeredModelMBeansObjectNames = null; - - /** - * Handle invocation to MBeanServer - */ - private InvocationHandlerImpl invocationHandler = null; - - /** - * Static description of all the packages that contain mbeans-descriptors.xml. - */ - private static final String[] PACKAGE_DESCRIPTORS = { - "org.ow2.jonas.web.tomcat6", - "org.ow2.jonas.server"}; - - /** - * Set the mbean server id. - * @param serverId mbean server ID - */ - public void setMBeanServerID(final String serverId) { - this.mbeanServerID = serverId; - } - - public void setMBeanServer(final MBeanServer mbs) { - jmxServer = mbs; - MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); - if (Proxy.isProxyClass(mbeanServer.getClass())) { - invocationHandler = (InvocationHandlerImpl) Proxy.getInvocationHandler(mbeanServer); - } - } - - /** - * Start the Service Initialization of the service is already done. - * @throws ServiceException the service could not be started - */ - @Override - public void doStart() throws ServiceException { - //super.initLogger(Log.getLogger(Log.JONAS_MANAGEMENT_PREFIX)); - identifiers = new Hashtable, JManagementIdentifier>(); - - // Store registered MBeans - registeredMBeansObjectNames = new ArrayList(); - registeredModelMBeansObjectNames = new ArrayList(); - - if (jmxServer == null) { - // Backward compatibility - List mbeanServers = MBeanServerFactory.findMBeanServer(mbeanServerID); - if (mbeanServers.size() == 0) { - throw new ServiceException("No MBean server found for id '" + mbeanServerID + "'."); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Use first MBean server ID found"); - } - jmxServer = (MBeanServer) mbeanServers.get(0); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "JMX Service initialized"); - } - } - - modelerRegistry = getModelRegistry(); - } - - /** - * Stop this service. - * @throws ServiceException the service could not be stopped - */ - @Override - public void doStop() throws ServiceException { - if (jmxServer != null) { - // Unregister all non already unregistered MBeans and ModelMBeans - for (int i = registeredMBeansObjectNames.size() - 1; i >= 0; i--) { - unregisterMBean(registeredMBeansObjectNames.get(i)); - } - for (int i = registeredModelMBeansObjectNames.size() - 1; i >= 0; i--) { - unregisterMBean(registeredModelMBeansObjectNames.get(i)); - } - } - } - - /** - * @return The local reference of the MBean server - */ - public MBeanServer getJmxServer() { - return this.jmxServer; - } - - /** - * @return The Connection interface to the MBean server - */ - public MBeanServerConnection getJmxServerConnection() { - return this.jmxServer; - } - - /** - * Register an MBean in the JOnAS MBeanServer. - * @param mbean MBean object to register - * @param objectName the String representation of the MBean's ObjectName - */ - public void registerMBean(final Object mbean, final String objectName) { - try { - ObjectName on = ObjectName.getInstance(objectName); - registerMBean(mbean, on); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.ERROR, objectName + ":" + e); - } - } - - /** - * Register an MBean in the JOnAS MBeanServer. - * @param mbean MBean object to register - * @param objectName the MBean's ObjectName - */ - public void registerMBean(final Object mbean, final ObjectName objectName) { - if (jmxServer == null) { - logger.log(BasicLevel.ERROR, "JMX Server not yet initialized"); - return; - } - try { - jmxServer.registerMBean(mbean, objectName); - registeredMBeansObjectNames.add(objectName); - } catch (InstanceAlreadyExistsException e) { - logger.log(BasicLevel.WARN, objectName + ":" + e); - } catch (MBeanRegistrationException e) { - logger.log(BasicLevel.ERROR, objectName + ":" + e); - } catch (NotCompliantMBeanException e) { - logger.log(BasicLevel.ERROR, objectName + ":" + e); - } - } - - /** - * Unregister an MBean from the JOnAS MBeanServer. - * @param objectName the MBean's ObjectName - */ - public void unregisterMBean(final ObjectName objectName) { - if (jmxServer == null) { - logger.log(BasicLevel.ERROR, "JMX Server not yet initialized"); - return; - } - try { - jmxServer.unregisterMBean(objectName); - registeredMBeansObjectNames.remove(objectName); - } catch (InstanceNotFoundException e) { - logger.log(BasicLevel.ERROR, objectName + ":" + e); - } catch (MBeanRegistrationException e) { - logger.log(BasicLevel.ERROR, objectName + ":" + e); - } - } - - public ManagedBean findManagedBean(final String name) { - return modelerRegistry.findManagedBean(name); - } - - /** - * Register a Model MBean in the JOnAS MBeanServer. - * @param mbean MBean object to register - * @param objectName the Mbean ObjectName - * @throws Exception throwed when registering a modeler MBean - */ - public ModelMBean registerModelMBean(final Object mbean, final ObjectName objectName, final ManagedBean managedBean) throws Exception { - if (modelerRegistry == null) { - logger.log(BasicLevel.ERROR, "Commons Modeler MBeans Registry not yet created"); - return null; - } - // Wrap call to modelerRegistry.registerComponent() into an IExecution module - // in order to use the mbean's class loader - ClassLoader cl = mbean.getClass().getClassLoader(); - IExecution exec = new IExecution() { - - public ModelMBean execute() throws Exception { - ModelMBean modelMBean = managedBean.createMBean(mbean); - jmxServer.registerMBean(modelMBean, objectName); - registeredModelMBeansObjectNames.add(objectName); - return modelMBean; - } - - }; - ExecutionResult res = RunnableHelper.execute(cl, exec); - if (res.hasException()) { - throw res.getException(); - } - return res.getResult(); - } - /** - * Register a Model MBean in the JOnAS MBeanServer. - * @param mbean MBean object to register - * @param objectName the Mbean ObjectName - * @throws Exception throwed when registering a modeler MBean - */ - public void registerModelMBean(final Object mbean, final ObjectName objectName) throws Exception { - if (modelerRegistry == null) { - logger.log(BasicLevel.ERROR, "Commons Modeler MBeans Registry not yet created"); - return; - } - - // Wrap call to modelerRegistry.registerComponent() into an IExecution module - // in order to use the mbean's class loader - ClassLoader cl = mbean.getClass().getClassLoader(); - IExecution exec = new IExecution() { - - public Void execute() throws Exception { - modelerRegistry.registerComponent(mbean, objectName, null); - registeredModelMBeansObjectNames.add(objectName); - return null; - } - - }; - ExecutionResult res = RunnableHelper.execute(cl, exec); - if (res.hasException()) { - throw res.getException(); - } - } - - /** - * Register a Model MBean in the JOnAS MBeanServer. - * @param mbean MBean object to register - * @param objectName the Mbean stringified ObjectName - * @throws Exception throwed when registering a modeler MBean - */ - public void registerModelMBean(final Object mbean, final String objectName) throws Exception { - registerModelMBean(mbean, ObjectName.getInstance(objectName)); - } - - /** - * Unegister a Model MBean from the JOnAS MBeanServer. - * @param objectName the Mbean ObjectName - */ - public void unregisterModelMBean(final ObjectName objectName) { - if (modelerRegistry == null) { - logger.log(BasicLevel.ERROR, "Modeler MBeans Registry not yet created"); - return; - } - modelerRegistry.unregisterComponent(objectName); - registeredModelMBeansObjectNames.remove(objectName); - } - - /** - * Create Registry for model MBeans and load known descriptors. - * @return the created commens modeler registry - */ - private Registry getModelRegistry() { - // Load registry - Registry registry = Registry.getRegistry(null, null); - ClassLoader cl = BaseJMXService.class.getClassLoader(); - - // Load descriptors - for (int i = 0; i < PACKAGE_DESCRIPTORS.length; i++) { - registry.loadDescriptors(PACKAGE_DESCRIPTORS[i], cl); - } - - // Log loaded descriptors - if (logger.isLoggable(BasicLevel.DEBUG)) { - String s; - String[] as = registry.findManagedBeans(); - logger.log(BasicLevel.DEBUG, ">>> List of all MBeans descriptors"); - for (int i = 0; i < as.length; i++) { - s = ">>> " + i + ") " + as[i]; - logger.log(BasicLevel.DEBUG, s); - } - logger.log(BasicLevel.DEBUG, "<<< List of all MBeans descriptors"); - } - return registry; - } - - /** - * Load additional mbean descriptors. - * @param packageName name of the package containing the descriptors file - * @param cl class loader containing the resource - */ - public void loadDescriptors(final String packageName, ClassLoader cl) { - if (cl == null) { - cl = BaseJMXService.class.getClassLoader(); - } - modelerRegistry.loadDescriptors(packageName, cl); - } - - /** - * Register the instance as a ModelMBean using the delegate. - * @param instance Type - * @param instance Object instance to be managed - * @return the MBean's OBJECT_NAME - * @throws Exception if registration fails. - */ - public String registerMBean(final T instance) throws Exception { - String on = getObjectName(instance); - registerModelMBean(instance, on); - return on; - } - - /** - * Unregister the given Object. - * @param instance Type - * @param instance Instance to be deregistered. - * @throws Exception if unregistration fails. - */ - public void unregisterMBean(final T instance) throws Exception { - String on = getObjectName(instance); - unregisterModelMBean(new ObjectName(on)); - } - - /** - * @param instance Type - * @param instance Object instance to be managed - * @return Returns the instance ObjectName. - * @throws ServiceException if registration fails. - */ - public String getObjectName(final T instance) throws ServiceException { - - JManagementIdentifier identifier = getIdentifier(instance); - - // gather the ObjectName - if (identifier != null) { - // override domain name value - identifier.setDomain(getDomainName()); - identifier.setServerName(getJonasServerName()); - - // Build ObjectName - StringBuilder sb = new StringBuilder(); - sb.append(identifier.getDomain()); - sb.append(":"); - sb.append(identifier.getTypeProperty()); - String additionnal = identifier.getAdditionnalProperties(instance); - if (additionnal != null && (!"".equals(additionnal))) { - sb.append(","); - sb.append(additionnal); - } - sb.append(","); - sb.append("name="); - sb.append(identifier.getNamePropertyValue(instance)); - return sb.toString(); - } - - return null; - - } - - /** - * @param instance type - * @param instance instance to be managed. - * @return Returns an {@link JManagementIdentifier} for the given Resource type. - * @throws ServiceException if the Identifier cannot be returned. - */ - @SuppressWarnings("unchecked") - private JManagementIdentifier getIdentifier(final T instance) throws ServiceException { - - // try to use the cached identifier - Class clz = instance.getClass(); - if (identifiers.containsKey(clz)) { - return identifiers.get(clz); - } - - // the identifier was not cached - String mbeanClassname = instance.getClass().getName(); - String mbeanPackage = mbeanClassname.substring(0, mbeanClassname - .lastIndexOf(".") + 1); - - // looking for a class named : - // .mbean.Identifier - // ex : org.ow2.jonas.ear.internal.mbean.EARModuleIdentifier - String identifierClassname = mbeanPackage + "mbean." + clz.getSimpleName() + "Identifier"; - - // Instantiate it by using classloader of the given instance - try { - Class cls = instance.getClass().getClassLoader().loadClass( - identifierClassname).asSubclass(JManagementIdentifier.class); - JManagementIdentifier id = cls.newInstance(); - - // cache the identifier - identifiers.put(clz, id); - - return id; - } catch (ClassNotFoundException e) { - throw new ServiceException("Identifier Class not found", e); - } catch (InstantiationException e) { - throw new ServiceException("Identifier Class not instantiated", e); - } catch (IllegalAccessException e) { - throw new ServiceException("Identifier Class not instantiated", e); - } - } - - /** - * Add an interceptor to invocationHandler - * @param interceptor - */ - public void addInterceptor (Interceptor interceptor) { - if (invocationHandler == null) { - logger.log(BasicLevel.WARN, "'"+ interceptor+"' interceptor cannot be added: not a MBeanServer proxy."); - } else { - this.invocationHandler.addInterceptor(interceptor); - logger.log(BasicLevel.INFO, "'"+ interceptor+"' interceptor was added to MBeanServer proxy."); - } - } - - /** - * Remove an interceptor from invocation handler - * @param interceptor - */ - public void removeInterceptor (Interceptor interceptor) { - if (invocationHandler != null) { - this.invocationHandler.removeInterceptor(interceptor); - logger.log(BasicLevel.INFO, "'"+ interceptor+"' interceptor was removed from MBeanServer proxy."); - } - } -} diff --git a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/JOnASJMXService.java b/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/JOnASJMXService.java deleted file mode 100644 index 689c3ecc5d..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/JOnASJMXService.java +++ /dev/null @@ -1,551 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JmxServiceImpl.java 10348 2007-05-10 08:32:03Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx.internal; - -import java.lang.reflect.Method; -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.management.ObjectName; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXConnectorServerFactory; -import javax.management.remote.JMXServiceURL; -import javax.management.remote.MBeanServerForwarder; -import javax.naming.Context; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.security.auth.spi.RoleBasedAuthorizationModule; -import org.ow2.jonas.service.JonasAlreadyStartedException; -import org.ow2.jonas.service.ServiceException; - -/** - * JMX Service implementation. Provides specific doStart() and doStop() - * methods to start /stop JOnAS JMX Service. - * - * @author Adriana Danes - * @author S. Ali Tokmen - */ -public class JOnASJMXService extends BaseJMXService { - - /** - * Management loggers. - */ - private static Logger logger = Log.getLogger(Log.JONAS_JMX_PREFIX); - - /** - * MX4J CommonsLogger fully qualified Classname. - */ - private static final String MX4J_COMMONS_LOGGER_CLASSNAME = "mx4j.log.CommonsLogger"; - - /** - * MX4J Log class. - */ - private static final String MX4J_LOG_CLASSNAME = "mx4j.log.Log"; - - /** - * MX4J Logger class. - */ - private static final String MX4J_LOGGER_CLASS = "mx4j.log.Logger"; - - - /** - * Connector servers attached to the MBean server. We may have several - * connector servers only if several communication protocols are used, as - * defined by the carol configuration. - */ - private JMXConnectorServer[] connectorServers = null; - - /** - * The JMXServiceURLs the connector servers are actually listening on. - */ - private JMXServiceURL[] connectorServerURLs = null; - - /** - * JOnAS Registry Service. - */ - private RegistryService registryService = null; - - /** - * List of Connector ObjectName (1 / protocol). - */ - private List connectorObjectNames = null; - - /** - * Naming Manager. - */ - private JNamingManager namingManager = null; - - /** - * Whether the JMX server is secured. - */ - private boolean jmxSecured = false; - - /** - * Authentication method used when JMX server secured. - */ - private String authenticationMethod = null; - - /** - * Authentication method's parameter used when JMX server secured. - */ - private String authenticationParameter = null; - - /** - * Authorization method used when JMX server secured. - */ - private String authorizationMethod = null; - - /** - * Authorization method's parameter used when JMX server secured. - */ - private String authorizationParameter = null; - - /** - * Test if MX4J CommonsLoggger class is present. - * In this case, redirect MX4J logging to Jakarta Commons Logging. - */ - private void initializeMX4JLoggingSystem() { - - Class mx4jCommonsLoggerClass = null; - try { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - mx4jCommonsLoggerClass = loader.loadClass(MX4J_COMMONS_LOGGER_CLASSNAME); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Class " + MX4J_COMMONS_LOGGER_CLASSNAME + " founded"); - } - Object o = mx4jCommonsLoggerClass.newInstance(); - - // Load Log a Logger class - Class clazz = loader.loadClass(MX4J_LOG_CLASSNAME); - Class mx4jLoggerClass = loader.loadClass(MX4J_LOGGER_CLASS); - - // Then get method redirectTo - Method m = clazz.getMethod("redirectTo", new Class[] {mx4jLoggerClass}); - m.invoke(clazz, new Object[] {o}); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "MX4J logging redirected to the Jakarta commons logger"); - } - } catch (ClassNotFoundException cnfe) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Class " + MX4J_COMMONS_LOGGER_CLASSNAME + " not found: " + cnfe); - } - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.WARN)) { - logger.log(BasicLevel.WARN, "Problem with " + MX4J_COMMONS_LOGGER_CLASSNAME + " instance creation " - + e); - } - } - } - - /** - * Start the Service. Only need to create a RMI connector - * @exception ServiceException the service could not be started - */ - @Override - public void doStart() throws ServiceException { - logger.log(BasicLevel.DEBUG, "Starting JMX Service"); - - // Init MX4J - initializeMX4JLoggingSystem(); - - // Don't forget to call super class - super.doStart(); - - // Server name - String serverName = getJonasServerName(); - if (serverName == null) { - throw new ServiceException("Cannot start JMX service. No serverName."); - } - - // Store the default protocol name - String defaultProtocolName = registryService.getDefaultProtocolName(); - - try { - - // Create one or more connector servers - // (cf. JSR 160, JMX Remote 1.0) - // Create a JMXServiceURL and a JMXConnectorServer per protocol - // As some protocols does not have associated connectors, the - // 2 arrays below may have null values - // ------------------------------------ - List protocols = registryService.getActiveProtocolNames(); - int nbProtocols = protocols.size(); - connectorServerURLs = new JMXServiceURL[nbProtocols]; - connectorServers = new JMXConnectorServer[nbProtocols]; - connectorObjectNames = new ArrayList(); - - int index = 0; - for (String name : protocols) { - - // Connector JNDI name - String connectorName = null; - - // Use this protocol as the new default - registryService.setDefaultProtocol(name); - - // Only IIOP do not use the rmi protocol in the URL - String protocol = "rmi"; - - URI carolURL = registryService.getProviderURL(name); - String scheme = carolURL.getScheme(); - String host = carolURL.getHost(); - int port = registryService.getExportedObjectPort(name); - - String ictxFactory = registryService.getInitialContextFactoryName(name); - - Properties props = new Properties(); - - // - Set the "jmx.remote.jndi.rebind" to ask the JMX impl to do - // a rebind() rather than a bind() in the registry - props.put("jmx.remote.jndi.rebind", "true"); - props.put(Context.INITIAL_CONTEXT_FACTORY, ictxFactory); - props.put(Context.PROVIDER_URL, carolURL.toString()); - - JMXServiceURL serviceURL = null; - - if (name.equals("jrmp")) { - connectorName = "jrmpconnector_" + serverName; - } else if (name.equals("irmi")) { - connectorName = "irmiconnector_" + serverName; - - // Add 1 to this port for IRMI as the JMX object will - // not use IRMI to bind but JRMP methods. - if (port != 0) { - port++; - } - } else if (name.equals("iiop")) { - connectorName = "iiopconnector_" + serverName; - protocol = "iiop"; - - Object orb = null; - - IExecution exec = new IExecution() { - public Object execute() throws Exception { - return getNamingManager().getInitialContext().lookup("java:comp/ORB"); - } - }; - - ExecutionResult res = RunnableHelper.execute(getClass().getClassLoader(), exec); - if (res.hasException()) { - throw res.getException(); - } - orb = res.getResult(); - - props.put("java.naming.corba.orb", orb); - } else { - // ignore that unsupported protocol - continue; - } - - // Set JMX authentication and authorization options - // We'll test later if JMX has really been secured - MBeanServerForwarder forwarder = null; - if(jmxSecured) { - String fileSeparator = System.getProperty("file.separator"); - - // Authentication, avoid NullPointerExceptions - if(authenticationMethod != null && authenticationParameter != null) { - if ("jmx.remote.x.password.file".equals(authenticationMethod)) { - // Make sure files get read using JONAS_BASE - props.put(authenticationMethod, JProp.getJonasBase() + fileSeparator + authenticationParameter); - } else { - props.put(authenticationMethod, authenticationParameter); - } - } - - // Authorization, avoid NullPointerExceptions - if(authorizationMethod != null && authorizationParameter != null) { - if (authorizationMethod.startsWith("jmx.remote.x.access.rolebased")) { - final long timeout = System.currentTimeMillis() + 10000; - Throwable lastCause = null; - while (System.currentTimeMillis() < timeout) { - try { - forwarder = RoleBasedAuthorizationModule.newProxyInstance( - authorizationMethod.substring("jmx.remote.x.access.rolebased".length() + 1), - authorizationParameter); - break; - } catch (NoClassDefFoundError e) { - // The JOnAS security service will always - // start after JMX, since JMX is in the - // jonas-autodeploy-bundles list. - // - // Wait for security service to start. - // - // See: http://jira.ow2.org/browse/JONAS-224 - lastCause = e; - Thread.sleep(1000); - } - } - if (forwarder == null) { - throw new ServiceException("Role-based JMX security authorization cannot be initialized. " - + "Please make sure the JOnAS security service is enabled.", lastCause); - } - } else if ("jmx.remote.x.access.file".equals(authorizationMethod)) { - // Make sure files get read using JONAS_BASE - props.put(authorizationMethod, JProp.getJonasBase() + fileSeparator + authorizationParameter); - } else { - props.put(authorizationMethod, authorizationParameter); - } - } - } - - serviceURL = new JMXServiceURL(protocol, host, port, "/jndi/" + carolURL.toString() + "/" + connectorName); - JMXConnectorServer connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serviceURL, - (Map) props, - null); - if (forwarder != null) { - connectorServer.setMBeanServerForwarder(forwarder); - - try { - if (forwarder.getMBeanServer() == null) { - // MBeanServerForwarder.getMBeanServer() will throw - // an IllegalStateException if the MBeanServer is - // null on a Sun JVM. This throw clause is to make - // sure that exception is always thrown. - throw new IllegalStateException(); - } - } catch (IllegalStateException e) { - logger.log(BasicLevel.DEBUG, "Setting the forwarder's MBeanServer to " + this.getJmxServer()); - forwarder.setMBeanServer(this.getJmxServer()); - } - } - connectorServers[index] = connectorServer; - // Create the MBean associated to the connector - String connectorObjectName = "connector_" + name; - ObjectName connectorServerName = JonasObjectName.jmxConnectorServer(scheme, connectorObjectName); - connectorObjectNames.add(connectorServerName); - - // Unregister MBean is already registered - if (getJmxServer().isRegistered(connectorServerName)) { - getJmxServer().unregisterMBean(connectorServerName); - } - getJmxServer().registerMBean(connectorServer, connectorServerName); - // Start the JMXConnectorServer - - final int idx = index; - final JMXConnectorServer server = connectorServer; - IExecution exec = new IExecution() { - - public Void execute() throws Exception { - server.start(); - connectorServerURLs[idx] = server.getAddress(); - if(jmxSecured) { - // Test security: try to connect without credentials - try { - JMXConnectorFactory.connect(connectorServerURLs[idx]).close(); - logger.log(BasicLevel.WARN, "JMX security is enabled but anonymous logins are still accepted! " - + "Please check your JMX security configuration."); - } catch(SecurityException e) { - // It's working: connection was refused - logger.log(BasicLevel.INFO, "JMX security is enabled and active"); - } - } else { - logger.log(BasicLevel.INFO, "JMX security is disabled"); - } - return null; - } - - }; - - // Export the connector for only this protocol - // So disable the MultiPRODelegate provided by Carol - System.setProperty("carol.multipro.protocol", name); - ExecutionResult res = RunnableHelper.execute(JOnASJMXService.class.getClassLoader(), exec); - System.setProperty("carol.multipro.protocol", "any"); - - if (res.hasException()) { - throw res.getException(); - } - - /* - * try { connectorServer.start(); connectorServerURLs[index] = connectorServer.getAddress(); } catch - * (IllegalArgumentException e) { throw e; } - */ - - // increment - index++; - - } - } catch (javax.naming.NameAlreadyBoundException ne) { - logger.log(BasicLevel.DEBUG, "Cannot start JMX service " + ne); - throw new JonasAlreadyStartedException(); - } catch (Exception e) { - throw new ServiceException("Cannot start JMX service", e); - } finally { - // Switch back to the old default - registryService.setDefaultProtocol(defaultProtocolName); - } - - String jmxConnectors = null; - if (connectorServerURLs != null && connectorServerURLs.length == 1 && connectorServerURLs[0] == null) { - jmxConnectors = ". No JMX Connector."; - } else { - jmxConnectors = " using connector(s)" + Arrays.asList(connectorServerURLs); - } - - - logger.log(BasicLevel.INFO, "JMX Service started" + jmxConnectors); - - } - - /** - * Stop this service. - */ - @Override - public void doStop() { - // Don't forget to call super class - super.doStop(); - - logger.log(BasicLevel.DEBUG, "Stopping JMX Service"); - - if (connectorObjectNames != null) { - // Unregister Connector MBeans - for (final ObjectName name : connectorObjectNames) { - try { - // Unregister mbean in an execution block - IExecution exec = new IExecution() { - public Void execute() throws Exception { - getJmxServer().unregisterMBean(name); - return null; - } - }; - // Unexport the connector for only this protocol - // So disable the MultiPRODelegate provided by Carol - String protocol = name.getKeyProperty("protocol"); - System.setProperty("carol.multipro.protocol", protocol); - // Execute - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), exec); - System.setProperty("carol.multipro.protocol", "any"); - // Throw an Exception if needed - if (result.hasException()) { - throw result.getException(); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot unregister Connector MBean for '" + name + "'", e); - } - } - - } - - if (connectorServers != null) { - // Desactivates the connector server, that is, stops listening for - // client connections. - // Calling this method will also close all client connections that - // were made by this server. - for (int i = 0; i < connectorServers.length; i++) { - try { - connectorServers[i].stop(); - } catch (Exception e) { - logger.log(BasicLevel.INFO, "Cannot Stop JMX Connector", e); - } - } - - } - - logger.log(BasicLevel.INFO, "JMX Service stopped"); - } - - /** - * @return The actual adresses on which listen the created connector servers - */ - public JMXServiceURL[] getConnectorServerURLs() { - return this.connectorServerURLs; - } - - /** - * @param registryService the registryService to set - */ - public void setRegistryService(final RegistryService registryService) { - this.registryService = registryService; - } - - /** - * @return the naming manager reference - */ - public JNamingManager getNamingManager() { - return namingManager; - } - - /** - * @param namingManager the namingManager to set - */ - public void setNamingManager(final JNamingManager namingManager) { - this.namingManager = namingManager; - } - - /** - * @param jmxSecured Whether the JMX server is secured. - */ - public void setJmxSecured(final boolean jmxSecured) { - this.jmxSecured = jmxSecured; - } - - /** - * @param authenticationMethod Authentication method used when JMX server - * secured. - */ - public void setAuthenticationMethod(final String authenticationMethod) { - this.authenticationMethod = authenticationMethod; - } - - /** - * @param authenticationParameter Authentication method's parameter used - * when JMX server secured. - */ - public void setAuthenticationParameter(final String authenticationParameter) { - this.authenticationParameter = authenticationParameter; - } - - /** - * @param authorizationMethod Authorization method used when JMX server - * secured. - */ - public void setAuthorizationMethod(final String authorizationMethod) { - this.authorizationMethod = authorizationMethod; - } - - /** - * @param authorizationParameter Authorization method's parameter used - * when JMX server secured. - */ - public void setAuthorizationParameter(final String authorizationParameter) { - this.authorizationParameter = authorizationParameter; - } -} diff --git a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationContextImpl.java b/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationContextImpl.java deleted file mode 100644 index 61419e3487..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationContextImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx.internal.interceptor; - -import org.ow2.jonas.jmx.Interceptor; - -import javax.interceptor.InvocationContext; -import javax.management.MBeanServer; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; - -/** - * Manage the sequential performance of interceptors - * @author Mohammed Boukada - */ -public class InvocationContextImpl implements InvocationContext { - - /** - * List of interceptors - */ - private List interceptors; - - /** - * Intercepted method. - */ - private Method method; - - /** - * Parameters of the method invocation. - */ - private Object[] parameters; - - /** - * Index of the invokers. It is increased after each call on the proceed - * method. - */ - private int index; - - /** - * Target MBeanServer - */ - private MBeanServer target; - - /** - * Construct an InvocationContext - * @param method - * @param parameters - * @param interceptors - */ - public InvocationContextImpl(Method method, Object[] parameters, List interceptors, MBeanServer target) { - this.method = method; - this.parameters = parameters; - this.interceptors = interceptors; - this.target = target; - this.index = interceptors.size() - 1; - } - - /** - * Return the target MBeanServer - * @return - */ - public Object getTarget() { - return this.target; - } - - /** - * returns the called method - * @return - */ - public Method getMethod() { - return this.method; - } - - /** - * Returns parameters of the called method - * @return - */ - public Object[] getParameters() { - return this.parameters; - } - - /** - * Sets parameters for the called method - * @param objects - */ - public void setParameters(Object[] objects) { - this.parameters = objects; - } - - public Map getContextData() { - return null; - } - - /** - * Calls interceptors - * @return - * @throws Exception - */ - public Object proceed() throws Exception { - try { - return this.interceptors.get(index--).invoke(this); - } finally { - index++; - } - } -} diff --git a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationHandlerImpl.java b/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationHandlerImpl.java deleted file mode 100644 index cb73cd32fc..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/InvocationHandlerImpl.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx.internal.interceptor; - -import org.ow2.jonas.jmx.Interceptor; - -import javax.management.MBeanServer; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -/** - * Call invocation which will dynamically implement the instance using interceptors - * @author Mohammed Boukada - */ -public class InvocationHandlerImpl implements InvocationHandler { - - /** - * List of interceptors - */ - private List interceptors; - - /** - * Invocation handler delegate - */ - private InvocationHandlerImpl delegate; - - /** - * Target MBeanServer - */ - private MBeanServer target; - - - /** - * Construct an InvocationHandler - */ - public InvocationHandlerImpl() { - interceptors = new ArrayList(); - } - - /** - * Construct an InvocationHandler with target MBeanServer - */ - public InvocationHandlerImpl(MBeanServer target) { - interceptors = new ArrayList(); - this.target = target; - } - - /** - * Invoke method - * @param proxy - * @param method - * @param args - * @return invocation result - * @throws Throwable - */ - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - if (interceptors.size() > 0) { - // If there is at least one interceptor it is a call - // on principal MBeanServer - InvocationContextImpl invocationContextImpl = new InvocationContextImpl(method, args, interceptors, target); - return invocationContextImpl.proceed(); - } else { - // In this case, it is a call on outer MBeanServer - // See org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder - if (delegate == null) { - throw new Exception("Invocation handler delegate not set"); - } - return delegate.invoke(proxy, method, args); - } - } - - /** - * Add an interceptor - * @param interceptor - */ - public void addInterceptor (Interceptor interceptor) { - this.interceptors.add(interceptor); - } - - /** - * Remove an interceptor - * @param interceptor - */ - public void removeInterceptor (Interceptor interceptor) { - this.interceptors.remove(interceptor); - } - - /** - * Get invocation handler delegate - * @return invocation handler delegate - */ - public InvocationHandlerImpl getDelegate() { - return delegate; - } - - /** - * Set invocation handler delegate - * @param delegate invocation handler delegate - */ - public void setDelegate(InvocationHandlerImpl delegate) { - this.delegate = delegate; - } -} diff --git a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/MBeanServerDelegateInterceptor.java b/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/MBeanServerDelegateInterceptor.java deleted file mode 100644 index ff6d395c9c..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/java/org/ow2/jonas/jmx/internal/interceptor/MBeanServerDelegateInterceptor.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jmx.internal.interceptor; - -import org.ow2.jonas.jmx.Interceptor; - -import javax.interceptor.InvocationContext; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -/** - * Final interceptor which will call MBeanServer method - * @author Mohammed Boukada - */ -public class MBeanServerDelegateInterceptor implements Interceptor { - - /** - * MBeanServer - */ - private Object mbs; - - /** - * Construct interceptor - * @param mbs MBeanServer - */ - public MBeanServerDelegateInterceptor(Object mbs) { - this.mbs = mbs; - } - - /** - * Invoke the method with the invocation context as parameter - * @param invocationContext use to apply the interceptors sequence - * @return the result of the invocation - * @throws Exception if invocation fails - */ - public Object invoke(InvocationContext invocationContext) throws Exception { - try { - Method method = invocationContext.getMethod(); - Object[] parameters = invocationContext.getParameters(); - if (parameters == null || parameters.length == 0){ - return method.invoke(mbs); - } - return method.invoke(mbs, parameters); - } catch (InvocationTargetException e) { - Throwable t = e.getTargetException(); - if (t instanceof Exception) { - throw (Exception) t; - } - throw e; - } - } -} diff --git a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/domain.xml b/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/domain.xml deleted file mode 100644 index b32ce082e9..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/domain.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - A domain named jonas - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.access b/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.access deleted file mode 100644 index aa60c8681e..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.access +++ /dev/null @@ -1,35 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id: jonas.properties 17416 2009-05-19 13:49:51Z durieuxp $ -# --------------------------------------------------------------------------- - -# When JMX security is enabled and jonas.service.jmx.authorization.method is -# set to jmx.remote.x.access.file, this file contains the access rights of each -# user. -# -# We define two levels of access: -# - readonly can access all getter methods -# - readwrite can access all methods - -monitor readonly -jonas readwrite diff --git a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.passwords b/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.passwords deleted file mode 100644 index 3945814104..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.passwords +++ /dev/null @@ -1,37 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id: jonas.properties 17416 2009-05-19 13:49:51Z durieuxp $ -# --------------------------------------------------------------------------- - -# When JMX security is enabled and jonas.service.jmx.authentication.method is -# set to jmx.remote.x.password.file, this file contains the user names and -# passwords. -# -# Each line contains the user name, one or more blanks and the password. -# -# No encryption is supported, if you need encryption please use -# jonas.service.jmx.authentication.method with jmx.remote.x.login.config. -# This way, you can encode the password using any method supported by JAAS. - -monitor jonas -jonas jonas diff --git a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.rolebased.access b/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.rolebased.access deleted file mode 100644 index 67c0cc8131..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/jonas-resources/conf/jmx.rolebased.access +++ /dev/null @@ -1,47 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id: jonas.properties 17416 2009-05-19 13:49:51Z durieuxp $ -# --------------------------------------------------------------------------- - -# When JMX security is enabled and jonas.service.jmx.authorization.method is -# set to jmx.remote.x.access.rolebased.file, this file contains the access -# rights of each role (as defined in the JAAS realm). -# -# We define two levels of access: -# - readonly can access all getter methods -# - readwrite can access all methods -# -# If one user has multiple roles, then the role with the highest level of -# access rights will be used. - -# jonas-admin role can do everything (access right: readwrite) -jonas-admin readwrite - -# jonas-monitor role can only read data (access right: readonly) -jonas-monitor readonly - -# The * role means "everyone" (including users that already have roles) -# -# This role is optional, if not set then all users with no role that appears -# in this file will have no access rights at all. -# * readonly diff --git a/jonas/modules/services/jonas-jmx/core/src/main/resources/META-INF/jonas-jmx-core.bnd b/jonas/modules/services/jonas-jmx/core/src/main/resources/META-INF/jonas-jmx-core.bnd deleted file mode 100644 index bd3afbd283..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/resources/META-INF/jonas-jmx-core.bnd +++ /dev/null @@ -1,38 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.jmx.internal.interceptor - -Private-Package org.ow2.jonas.jmx.internal.* - -DynamicImport-Package org.jacorb.orb.rmi,\ - org.ow2.jonas.lib.naming,\ - org.ow2.jonas.lib.naming.java,\ - org.ow2.jonas.registry.carol.delegate,\ - org.ow2.cmi.jndi.context,\ - org.ow2.jonas.security.auth.spi,\ - org.ow2.jonas.lib.tenant.loginmodule - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * diff --git a/jonas/modules/services/jonas-jmx/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-jmx/core/src/main/resources/metadata.xml deleted file mode 100644 index 67374282ae..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jmx/core/src/main/templates/jonas-jmx.properties.template b/jonas/modules/services/jonas-jmx/core/src/main/templates/jonas-jmx.properties.template deleted file mode 100644 index b81c83dba9..0000000000 --- a/jonas/modules/services/jonas-jmx/core/src/main/templates/jonas-jmx.properties.template +++ /dev/null @@ -1,42 +0,0 @@ -# -###################### JOnAS JMX service configuration -# -jonas.services jmx -# Set the name of the implementation class of the JMX service -jonas.service.jmx.class org.ow2.jonas.jmx.internal.JOnASJMXService - -# Set to true if the JMXRemote interface should require the client to provide -# authentication information. That information is provided when establishing -# the JMX connection, using the JMXConnector.CREDENTIALS key. -# -# Note that if you enable JMX security for a server, all clients (including -# any administration tool such as the domain master) connecting to this -# instance via JMX must provide a valid user name and password. -jonas.service.jmx.secured false - -# If jonas.service.jmx.secured is set to true, defines the authentication -# method and the method's parameter. For example, to use file-based -# authentication using the conf/jmx.passwords file, define: -#jonas.service.jmx.authentication.method jmx.remote.x.password.file -#jonas.service.jmx.authentication.parameter conf/jmx.passwords -# You are free to use the authentication provider you wish. -jonas.service.jmx.authentication.method jmx.remote.x.password.file -jonas.service.jmx.authentication.parameter conf/jmx.passwords -# You may for example choose to use JAAS LoginModule for authentication. -# In this case define the used configuration in the JAAS configuration file -# using the jonas.service.jmx.authentication.parameter: -#jonas.service.jmx.authentication.method jmx.remote.x.login.config -#jonas.service.jmx.authentication.parameter jaas-jmx - -# If jonas.service.jmx.secured is set to true, defines the authorization -# method and the method's parameter. For example, to use file-based -# authorization using the conf/jmx.access file, define: -#jonas.service.jmx.authorization.method jmx.remote.x.access.file -#jonas.service.jmx.authorization.parameter conf/jmx.access -# You are free to use the authorization provider you wish. -jonas.service.jmx.authorization.method jmx.remote.x.access.file -jonas.service.jmx.authorization.parameter conf/jmx.access -# You may for example choose to use role-based authorization manager -# configured using conf/jmx.rolebased.access file. In this case, define: -#jonas.service.jmx.authorization.method jmx.remote.x.access.rolebased.file -#jonas.service.jmx.authorization.parameter conf/jmx.rolebased.access diff --git a/jonas/modules/services/jonas-jmx/pom.xml b/jonas/modules/services/jonas-jmx/pom.xml deleted file mode 100644 index b987258ac0..0000000000 --- a/jonas/modules/services/jonas-jmx/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jmx - JOnAS :: Services :: JMX - - core - - pom - diff --git a/jonas/modules/services/jonas-jndi/core/pom.xml b/jonas/modules/services/jonas-jndi/core/pom.xml deleted file mode 100644 index 9e13d903d3..0000000000 --- a/jonas/modules/services/jonas-jndi/core/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - jonas-jndi - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - - 4.0.0 - jonas-jndi-core - bundle - JOnAS :: Services :: JNDI service :: Core - - - - org.ow2.jonas - jonas-configadmin-core - ${project.version} - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - - - - - maven-jar-plugin - - - attach-deploy - compile - - jar - - - src/main/jonas-resources/deploy-example - ${project.build.directory} - deploy-example - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/JndiService.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/JndiService.java deleted file mode 100644 index 309268cbfb..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/JndiService.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi; - -import org.ow2.jonas.jndi.internal.Policy; - -/** - * Interface for the JNDI service - * @author Jeremy Cazaux - */ -public interface JndiService { - - /** - * @return the default policy - */ - Policy getDefaultPolicy(); - -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapter.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapter.java deleted file mode 100644 index 317942ff3f..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapter.java +++ /dev/null @@ -1,219 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -import org.ow2.jonas.configadmin.AdapterException; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.jndi.JndiService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; - -import javax.xml.XMLConstants; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -/** - * JNDI Adaptater - * @author Jeremy Cazaux - */ -public class JndiAdapter implements XmlConfigurationAdapter { - - /** - * PID of the JNDI service - */ - public static final String JNDI_SERVICE_PID = JndiEntriesService.class.getName(); - - /** - * Entry - */ - public static final String ENTRY = "entry"; - - /** - * Entry name - */ - public static final String ENTRY_NAME = "name"; - - /** - * Entry type - */ - public static final String ENTRY_TYPE = "type"; - - /** - * Entry value - */ - public static final String ENTRY_VALUE = "value"; - - /** - * Policy of JNDI entries - */ - public static final String POLICY = "policy"; - - /** - * The XSD resource - */ - public static final String XSD_RESOURCE = "/META-INF/configadmin-jndi-1.0.xsd"; - - /** - * The jndi service - */ - private JndiService jndiService; - - /** - * Logger - */ - private static final Log logger = LogFactory.getLog(JndiAdapter.class); - - - /** - * Default constructor - * @param jndiService The JNDI service - */ - public JndiAdapter(final JndiService jndiService) { - this.jndiService = jndiService; - } - - /** - * {@inheritDoc} - */ - @Override - public Set convert(final Element node) throws AdapterException { - - try{ - //validate the node - if (validate(node) == false) { - throw new AdapterException("Cannot validate the XML Node " + node.getNodeName()); - } - } catch (AdapterException e) { - throw new AdapterException("Cannot validate the XML Node " + node.getNodeName(), e); - } - - // Create an empty configuration that will store the info from Xml - // Hard-code the target PID - ConfigurationInfo info = new ConfigurationInfo(JNDI_SERVICE_PID, true); - - // Transfer from Xml format into internal format - Map props = info.getProperties(); - - Vector names = new Vector(); - Vector values = new Vector(); - Vector types = new Vector(); - - for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) { - - if (child.getNodeType() == Node.ELEMENT_NODE) { - - if (POLICY.equals(child.getNodeName())) { - props.put(POLICY, child.getFirstChild().getNodeValue()); - } else if (ENTRY.equals(child.getNodeName())) { - - for (Node n = child.getFirstChild(); n != null; n = n.getNextSibling()) { - - if (n.getNodeType() == Node.ELEMENT_NODE) { - - Node valueNode = n.getFirstChild(); - String key = n.getNodeName(); - - String val = new String(); - if (valueNode != null) { - val = valueNode.getNodeValue(); - } - - if (ENTRY_NAME.equals(key)) { - names.add(val); - } else if (ENTRY_TYPE.equals(key)) { - types.add(val); - } else if (ENTRY_VALUE.equals(key)) { - values.add(val); - } - } - } - } - } - } - - if (props.get(POLICY) == null) { - props.put(POLICY, this.jndiService.getDefaultPolicy()); - } - - props.put(ENTRY_NAME, names); - props.put(ENTRY_VALUE, values); - props.put(ENTRY_TYPE, types); - - return Collections.singleton(info); - } - - /** - * Allow to validate a Node from an XSD resource - * @param node The node to validate - * @throws AdapterException {@link AdapterException} - * @return true if the node has been valide. Otherwise, false. - */ - private boolean validate(Node node) throws AdapterException { - //First create a Validator from the XSD file - InputStream xsdInputStream = getClass().getResourceAsStream(XSD_RESOURCE); - - if (xsdInputStream != null) { - SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = null; - try { - schema = factory.newSchema(new StreamSource(xsdInputStream)); - } catch (SAXException e) { - throw new AdapterException("Cannot create a new Schema from the resource " + XSD_RESOURCE, e); - } - Validator validator = schema.newValidator(); - - //then try to validate the node - try { - validator.validate(new DOMSource(node)); - return true; - } catch (SAXException e) { - logger.error("Cannot validate the Node " + node.getNodeName() + " from the XSD " + - "resource " + XSD_RESOURCE, e); - return false; - } catch (IOException e) { - logger.error("Cannot validate the Node " + node.getNodeName() + " from the XSD " + - "resource " + XSD_RESOURCE, e); - return false; - } - - } else { - throw new AdapterException("Cannot get the inputstream of the resource configadmin-jndi-1.0.xsd"); - } - - } -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapterRegistry.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapterRegistry.java deleted file mode 100644 index 083941e19d..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiAdapterRegistry.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -import org.ow2.jonas.configadmin.XmlConfigurationAdapter; -import org.ow2.jonas.configadmin.XmlConfigurationAdapterRegistry; -import org.ow2.jonas.jndi.JndiService; - -/** - * Component that will be registered as an OSGi service with a 'namespace' service property - * @author Jeremy Cazaux - */ -public class JndiAdapterRegistry implements XmlConfigurationAdapterRegistry { - - /** - * The {@link XmlConfigurationAdapter} for the JNDI service - */ - private XmlConfigurationAdapter jndiAdapter; - - /** - * The jndi service - */ - private JndiService jndiService; - - /** - * Default constructor - */ - public JndiAdapterRegistry() { - } - - /** - * Call when the component is registered - */ - public void start() { - this.jndiAdapter = new JndiAdapter(this.jndiService); - } - - /** - * Call when the component is unregistered - */ - public void stop() { - } - - /** - * {@inheritDoc} - */ - @Override - public XmlConfigurationAdapter getAdapter(final String name) { - return this.jndiAdapter; - } - - /** - * @param jndiService The JNDI service to bind - */ - public void bindJndiService(final JndiService jndiService) { - this.jndiService = jndiService; - } - - /** - * @param jndiService The JNDI service to unbind - */ - public void unbindJndiService(final JndiService jndiService) { - this.jndiService = null; - } -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesException.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesException.java deleted file mode 100644 index f562468aa2..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesException.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -/** - * JNDI entries exception - * @author Jeremy - */ -public class JndiEntriesException extends Exception { - - /** - * {@inheritDoc} - */ - public JndiEntriesException(final String message) { - super(message); - } - - /** - * {@inheritDoc} - */ - public JndiEntriesException(final String message, final Throwable cause) { - super(message, cause); - } -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesService.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesService.java deleted file mode 100644 index db834fb0d9..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiEntriesService.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import java.util.List; - -/** - * JNDI entries service - * @author Jeremy Cazaux - */ -public class JndiEntriesService { - - /** - * The list of JNDI entry name - */ - private List names; - - /** - * The list of JNDI entry values - */ - private List values; - - /** - * The list of JNDI entry tyoe - */ - private List types; - - /** - * Logger - */ - private static final Log logger = LogFactory.getLog(JndiEntriesService.class); - - /** - * Strict consistency policy - */ - public static final String STRICT_CONSISTENCY = "strict-consistency"; - - /** - * Last update policy - */ - public static final String LAST_UPDATE = "last-update"; - - /** - * The policy of JNDI injection - */ - private Policy policy; - - /** - * The Context - */ - private Context context; - - /** - * Default constructor - */ - public JndiEntriesService() { - } - - /** - * Inject all JNDI entries according to the JNDI policy - * @throws JndiEntriesException {@link JndiEntriesException} - */ - public void start() throws JndiEntriesException { - - if ((this.names.size() != this.values.size()) || (this.values.size() != this.types.size())) { - throw new JndiEntriesException("Each key should be associated to a value and a type"); - } - - if (this.context == null) { - setContext(getContext()); - } - - int nbEntries = this.names.size(); - for (int i = 0; i < nbEntries; i++) { - String jndiContext = this.names.get(i); - String valueAsString = this.values.get(i); - String type = this.types.get(i); - - Object value; - if (Boolean.class.getName().equals(type)) { - value = Boolean.valueOf(valueAsString); - } else if (Byte.class.getName().equals(type)) { - value = Byte.valueOf(valueAsString); - } else if (Character.class.getName().equals(type)) { - if (valueAsString.length() != 1) { - throw new JndiEntriesException("The type of the value " + valueAsString + " cannot be java.lang.Character."); - } - value = Character.valueOf(valueAsString.charAt(0)); - } else if (Double.class.getName().equals(type)) { - value = Double.valueOf(valueAsString); - } else if (Float.class.getName().equals(type)) { - value = Float.valueOf(valueAsString); - } else if (Integer.class.getName().equals(type)) { - value = Integer.valueOf(valueAsString); - } else if (Long.class.getName().equals(type)) { - value = Long.valueOf(valueAsString); - } else if (Short.class.getName().equals(type)) { - value = Short.valueOf(valueAsString); - } else if (String.class.getName().equals(type)) { - value = valueAsString; - } else { - throw new JndiEntriesException("Type " + type + " unknown. It should be a basic Java type (java.lang.*)"); - } - - //lookup the JNDI context - Object val = null; - try { - val = this.context.lookup(jndiContext); - } catch (NamingException e) { - //do nothing. This entry is not already injected into the JNDI context - } - - //the entry doesn't exist - if (val == null) { - //inject the jndi entry... - try { - this.context.bind(jndiContext, value); - } catch (NamingException ex) { - throw new JndiEntriesException("Cannot inject value " + valueAsString + " into the JNDI context " + jndiContext, ex); - } - } else { - if (Policy.STRICT_CONSISTENCY.equals(this.policy)) { - //the key is already inject. If the JNDI policy a strict consistency policy, throw an exception - throw new JndiEntriesException("The entry " + jndiContext + " is already injected in the JNDI context"); - } else if (Policy.LAST_UPDATE.equals(this.policy)) { - //else we update the value of the associated key - try { - this.context.rebind(jndiContext, value); - } catch (NamingException e) { - throw new JndiEntriesException("Cannot update the value " + valueAsString + " of the entry " + jndiContext, e); - } - } - } - } - } - - /** - * If the JNDI policy is a strict-consistency policy, all JNDI entry'll be removed from the JNDI context - * @throws JndiEntriesException {@link JndiEntriesException} - */ - public void stop() throws JndiEntriesException { - - //if it's a strict-consistency policy, we remove jndi entries from the JNDI context - if (Policy.STRICT_CONSISTENCY.equals(this.policy)) { - int nbEntries = this.names.size(); - for (int i = 0; i < nbEntries; i++) { - try { - this.context.unbind(this.names.get(i)); - } catch (NamingException e) { - logger.error("Cannot remove the entry " + this.names.get(i) + " from the JNDI context.", e); - } - } - } - } - - /** - * @param names List of entry name as a String. The space character is the delimiter of each name - */ - public void setNames(final List names) { - this.names = names; - } - - /* - * @param types List of entry type as a String. The pace character is the delimiter of each type - */ - public void setTypes(final List types) { - this.types = types; - } - - /** - * @param values List of entry values as a String. The space character is the delimiter of each value - */ - public void setValues(final List values) { - this.values = values; - } - - /** - * @param policy The JNDI policy to set - */ - public void setPolicy(final String policy) throws JndiEntriesException { - this.policy = getPolicyAsEnum(policy); - } - - /** - * @param context The {@link Context} to set - */ - public void setContext(final Context context) { - this.context = context; - } - /* - * @return a new InitialContext - */ - private Context getContext() { - ClassLoader old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(JndiEntriesService.class.getClassLoader()); - - Context context = null; - try { - context = new InitialContext(); - } catch (NamingException e) { - logger.error("Cannot create a new InitialContext", e); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - return context; - } - - /** - * @param policy The policy of a JNDI injection as a String - * @return The {@link Policy} - */ - public static Policy getPolicyAsEnum(final String policy) throws JndiEntriesException { - if (LAST_UPDATE.equals(policy)) { - return Policy.LAST_UPDATE; - } else if (STRICT_CONSISTENCY.equals(policy)) { - return Policy.STRICT_CONSISTENCY; - } else { - throw new JndiEntriesException("Policy is incorrect. Correct values are " + Policy.STRICT_CONSISTENCY + - " and " + Policy.LAST_UPDATE); - } - } -} - - diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiServiceImpl.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiServiceImpl.java deleted file mode 100644 index e4a6b6e114..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/JndiServiceImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -import org.ow2.jonas.jndi.JndiService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * JOnAS JNDI service - * @author Jeremy Cazaux - */ -public class JndiServiceImpl extends AbsServiceImpl implements JndiService { - - /** - * The default JNDI policy - */ - private Policy defaultPolicy; - - /** - * Logger - */ - private static final Log logger = LogFactory.getLog(JndiServiceImpl.class); - - - /** - * @throws ServiceException {@link ServiceException} - */ - @Override - protected void doStart() throws ServiceException { - } - - /** - * @throws ServiceException {@link ServiceException} - */ - @Override - protected void doStop() throws ServiceException { - } - - /** - * @param defaultPolicy The default policy to set - */ - public void setDefaultPolicy(final String defaultPolicy) throws JndiEntriesException { - this.defaultPolicy = JndiEntriesService.getPolicyAsEnum(defaultPolicy); - } - - /** - * @param defaultPolicy The {@link Policy} to set - */ - public void setDefaultPolicy(final Policy defaultPolicy) { - this.defaultPolicy = defaultPolicy; - } - - /** - * {@inheritDoc} - */ - @Override - public Policy getDefaultPolicy() { - return this.defaultPolicy; - } -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/Policy.java b/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/Policy.java deleted file mode 100644 index 2f6f8bc5b7..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/java/org/ow2/jonas/jndi/internal/Policy.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.internal; - -/** - * The policy of a JNDI injection - */ -public enum Policy { - LAST_UPDATE, STRICT_CONSISTENCY -} diff --git a/jonas/modules/services/jonas-jndi/core/src/main/jonas-resources/deploy-example/configadmin-jndi-example.xml b/jonas/modules/services/jonas-jndi/core/src/main/jonas-resources/deploy-example/configadmin-jndi-example.xml deleted file mode 100644 index e58ea7e918..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/jonas-resources/deploy-example/configadmin-jndi-example.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - strict-consistency - - java:global/jndi/developper - My description - java.lang.String - The JOnAS Team - - - java:global/jndi/arch - My description - java.lang.Integer - 64 - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/configadmin-jndi-1.0.xsd b/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/configadmin-jndi-1.0.xsd deleted file mode 100644 index 619570afad..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/configadmin-jndi-1.0.xsd +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - - - The <entry> describe an entry to inject in the JNDI context. - - Example: - <entry"> - <name>java:global/developper</name> - <description>this is my entry</description> - <type>java.lang.String</type> - <value>The JOnAS Team</value> - </entry> - - - - - - - - - The <name> is the name of an entry to inject in the JNDI context. - - Example: - <name>java:global/jndi/developper</name> - - - - - - - - - The <description> is the description of an entry to inject in the JNDI context. - - Example: - <description>This is the description of my JNDI entry</description> - - - - - - - - - The <type> is the type of the value of an entry to inject in - the JNDI context. The type should be a type available in the Java - plateform (java.lang.String, java.lang.Integer,java.lang.Float, - ...) - - Example: - <type">java.lang.String</type> - - - - - - - - - The <value> is the value of an entry to inject in - the JNDI context. - - Example: - <value>The JOnAS Team</value> - - - - - - - - - - - The <jndiEntries> type contains an optional policy and a list of entries - to inject in the JNDI context. - - Example: - <jndi-entries xmlns="http://jonas.ow2.org/ns/jndientries/1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <policy>strict-consistency</policy> - <entry> - <name>java:global/jndi/developper</name> - <description>Developper name</description> - <type>java.lang.String</type> - <value>JOnAS Team</value> - </entry> - </jndi-entries> - - - - - - - - The <policy> describe the JNDI injection policy of each entries of the XML file. - Possible values are 'strict-consistency' (default value) and 'last-update'. - - - strict-consistency: requires an exact match between entries of the XML file and the - directory content. if an entry of the XML file isn't already bound in the JNDI - context, it'll be injected. Otherwise, the deployment of the whole file will fail. - When the deployable is undeployed, each entries will be removed from the JNDI context. - - - last-update: the directory contains the latest value injected. If an entry of the XML - file isn't already bound in the JNDI context, it'll be injected. Otherwise the entry - will be updated with the new value. - - Example: - <policy>strict-consistency</policy> - - - - - - - - - - - - - - - - - Example: - <jndi-entries xmlns="http://jonas.ow2.org/ns/jndientries/1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <!-- ... --> - </jndi-entries> - - - - - - - - diff --git a/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/jonas-jndi-core.bnd b/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/jonas-jndi-core.bnd deleted file mode 100644 index 1cbabea863..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/resources/META-INF/jonas-jndi-core.bnd +++ /dev/null @@ -1,33 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.jndi - -Private-Package org.ow2.jonas.jndi.internal - -DynamicImport-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi - -Import-Package * - - diff --git a/jonas/modules/services/jonas-jndi/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-jndi/core/src/main/resources/metadata.xml deleted file mode 100644 index 668723bf75..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-jndi/core/src/main/templates/jonas-jndi.properties.template b/jonas/modules/services/jonas-jndi/core/src/main/templates/jonas-jndi.properties.template deleted file mode 100644 index 55764d6c5c..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/main/templates/jonas-jndi.properties.template +++ /dev/null @@ -1,9 +0,0 @@ -# -###################### JOnAS JNDI service configuration -# -jonas.services jndi -# Set the name of the implementation class of the JNDI service -jonas.service.jndi.class org.ow2.jonas.jndi.internal.JndiServiceImpl - -#Possible values of JNDI policy are: strict-consistency and last-update -jonas.service.jndi.defaultPolicy strict-consistency \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/java/org/ow2/jonas/jndi/test/JndiTest.java b/jonas/modules/services/jonas-jndi/core/src/test/java/org/ow2/jonas/jndi/test/JndiTest.java deleted file mode 100644 index 38e9c0d1df..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/java/org/ow2/jonas/jndi/test/JndiTest.java +++ /dev/null @@ -1,386 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.jndi.test; - -import junit.framework.Assert; -import org.mockito.MockitoAnnotations; -import org.ow2.jonas.configadmin.AdapterException; -import org.ow2.jonas.configadmin.ConfigurationInfo; -import org.ow2.jonas.jndi.internal.JndiAdapter; -import org.ow2.jonas.jndi.internal.JndiEntriesService; -import org.ow2.jonas.jndi.internal.JndiServiceImpl; -import org.ow2.jonas.jndi.internal.Policy; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.xml.sax.SAXException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.Matchers.any; - -/** - * Test case in order to validate the structure of the XML file and the JndiAdapter class - * @author Jeremy Cazaux - */ -public class JndiTest { - - /** - * The sample example. It should be valid - */ - public static String SAMPLE_EXAMPLE = "/ca-jndi-sample-example.xml"; - - /** - * Unicity example. It should be invalid - */ - public static String UNICITY_EXAMPLE = "/ca-jndi-unicity-test.xml"; - - /** - * Example with a wrong content. It should be invalid - */ - public static String WRONG_CONTENT_EXAMPLE = "/ca-jndi-wrong-content.xml"; - - /** - * Example with a wrong policy. It should be invalid - */ - public static String WRONG_POLICY_EXAMPLE = "/ca-jndi-wrong-policy.xml"; - - /** - * Example with a wrong tag order. It should be invalid - */ - public static String WRONG_TAG_ORDER_EXAMPLE = "/ca-jndi-wrong-tag-order.xml"; - - /** - * Example with a NULL value. It should be invalid - */ - public static String NULL_VALUE_EXAMPLE = "/ca-jndi-null-value-test.xml"; - - /** - * Example with an empty value. It should be valid - */ - public static String EMPTY_VALUE_EXAMPLE = "/ca-jndi-empty-value-test.xml"; - - /** - * JNDI entries XML tag - */ - public static String JNDI_ENTRIES = "jndi-entries"; - - /** - * Key of first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_KEY_1 = "java:global/jndi/developer"; - - /** - * Value of the first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_VALUE_1 = "The JOnAS Team"; - - /** - * Type of the first entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_TYPE_1 ="java.lang.String"; - - /** - * Key of second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_KEY_2 = "java:global/jndi/arch"; - - /** - * Value of the second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_VALUE_2 = "64"; - - /** - * Type of the second entry of the sample example - */ - public final static String SAMPLE_EXAMPLE_JNDI_TYPE_2 = "java.lang.Integer"; - - /** - * Key of the entry of the empty value example - */ - public final static String EMPTY_VALUE_EXAMPLE_JNDI_KEY = "java:global/test/empty"; - - /** - * Value of the entry of the empty value example - */ - public final static String EMPTY_VALUE_EXAMPLE_JNDI_VALUE = ""; - - /** - * Type of the entry of empty value example - */ - public final static String EMPTY_VALUE_EXAMPLE_JNDI_TYPE = "java.lang.String"; - - /** - * The JNDI service - */ - private JndiServiceImpl jndiService; - - /** - * The JNDI Adapter - */ - private JndiAdapter jndiAdapter; - - /** - * Logger - */ - private static final Log logger = LogFactory.getLog(JndiTest.class); - - /** - * Initialization - */ - @BeforeClass - public void init() { - this.jndiService = new JndiServiceImpl(); - this.jndiService.setDefaultPolicy(Policy.STRICT_CONSISTENCY); - this.jndiAdapter = new JndiAdapter(this.jndiService); - } - - /** - * Sample test with a correct XML file - */ - @Test - public void sampleValidTest() throws Exception { - Vector keysExpected = new Vector(); - Vector valuesExpected = new Vector(); - Vector typesExpected = new Vector(); - - keysExpected.add(SAMPLE_EXAMPLE_JNDI_KEY_1); - keysExpected.add(SAMPLE_EXAMPLE_JNDI_KEY_2); - valuesExpected.add(SAMPLE_EXAMPLE_JNDI_VALUE_1); - valuesExpected.add(SAMPLE_EXAMPLE_JNDI_VALUE_2); - typesExpected.add(SAMPLE_EXAMPLE_JNDI_TYPE_1); - typesExpected.add(SAMPLE_EXAMPLE_JNDI_TYPE_2); - - checkConfigurationInfo(getConfigurationInfoSet(SAMPLE_EXAMPLE), keysExpected, valuesExpected, typesExpected, - Policy.STRICT_CONSISTENCY); - - - //mock tests - List valuesAsString = new ArrayList(); - for (Object value: valuesExpected) { - valuesAsString.add(String.class.cast(value)); - } - - JndiEntriesService jndiEntriesService = new JndiEntriesService(); - Context context = mock(InitialContext.class); - when(context.lookup(keysExpected.get(0))).thenThrow(new NamingException()); - when(context.lookup(keysExpected.get(1))).thenThrow(new NamingException()); - - jndiEntriesService.setNames(Collections.list(keysExpected.elements())); - jndiEntriesService.setValues(valuesAsString); - jndiEntriesService.setTypes(Collections.list(typesExpected.elements())); - jndiEntriesService.setPolicy("strict-consistency"); - jndiEntriesService.setContext(context); - jndiEntriesService.start(); - - verify(context,times(2)).lookup(any(String.class)); - verify(context,times(1)).lookup(keysExpected.get(0)); - verify(context,times(1)).lookup(keysExpected.get(1)); - verify(context, times(1)).bind(keysExpected.get(0), valuesExpected.get(0)); - verify(context, times(1)).bind(keysExpected.get(1), Integer.valueOf(valuesAsString.get(1))); - - jndiEntriesService.stop(); - verify(context, times(1)).unbind(keysExpected.get(0)); - verify(context, times(1)).unbind(keysExpected.get(1)); - } - - /** - * Unicity test - */ - @Test(expectedExceptions = AdapterException.class) - public void testThatADocumentWithTwoIdenticallyKeyIsInvalid() throws AdapterException { - getConfigurationInfoSet(UNICITY_EXAMPLE); - } - - /** - * Wrong content test - */ - @Test(expectedExceptions = AdapterException.class) - public void testThatAWrongContentIsInvalid() throws AdapterException { - getConfigurationInfoSet(WRONG_CONTENT_EXAMPLE); - } - - /** - * Wrong tag order test - */ - @Test(expectedExceptions = AdapterException.class) - public void testThatAWrongTagOrderIsInvalid() throws AdapterException { - getConfigurationInfoSet(WRONG_TAG_ORDER_EXAMPLE); - } - - /** - * Wrong policy test - */ - @Test(expectedExceptions = AdapterException.class) - public void testThatAWrongPolicyIsInvalid() throws AdapterException { - getConfigurationInfoSet(WRONG_POLICY_EXAMPLE); - } - - /** - * Null value test - */ - @Test(expectedExceptions = AdapterException.class) - public void testThatANullValueIsInvalid() throws AdapterException { - getConfigurationInfoSet(NULL_VALUE_EXAMPLE); - } - - /** - * Empty value test - */ - @Test - public void testThatAEmptyValueIsValid() throws Exception { - Vector keysExpected = new Vector(); - Vector valuesExpected = new Vector(); - Vector typesExpected = new Vector(); - - keysExpected.add(EMPTY_VALUE_EXAMPLE_JNDI_KEY); - valuesExpected.add(EMPTY_VALUE_EXAMPLE_JNDI_VALUE); - typesExpected.add(EMPTY_VALUE_EXAMPLE_JNDI_TYPE); - - checkConfigurationInfo(getConfigurationInfoSet(EMPTY_VALUE_EXAMPLE), keysExpected, valuesExpected, typesExpected, - Policy.LAST_UPDATE); - } - - /** - * - * @param resource The resource available in the classpath - * @return the set of {@ConfigurationInfo} of the resource - * @throws AdapterException {@link AdapterException} - */ - private Set getConfigurationInfoSet(final String resource) throws AdapterException { - return this.jndiAdapter.convert(getJndiNode(resource)); - } - - /** - * @param resource The resource - * @return its JNDI Element if found. Otherwise, null. - */ - private Element getJndiNode(final String resource) { - InputStream xmlInputStream = getClass().getResourceAsStream(resource); - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - //provide support for XML namespaces - dbf.setNamespaceAware(true); - DocumentBuilder db = null; - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - logger.error("Can't instantiate a new DocumentBuilder" + e); - return null; - } - - Document dom = null; - if (db != null) { - - try { - dom = db.parse(xmlInputStream); - } catch (SAXException e) { - logger.error("Can't parse the resource " + resource, e); - return null; - } catch (IOException e) { - logger.error("Can't parse the resource " + resource, e); - return null; - } - - Element root = dom.getDocumentElement(); - - Element jndiElement = (Element) root.getElementsByTagName(JNDI_ENTRIES).item(0); - if (jndiElement == null) { - logger.error("Can't get the JNDI node of the XML resource " + resource); - Assert.fail(); - } - return jndiElement; - } - return null; - } - - /** - * - * @param configurationInfoSet The {@link ConfigurationInfo} to check - * @param keysExpected The array of keys expected - * @param valuesExpected The array of values expected - * @param typesExpected The array of types expected - */ - public void checkConfigurationInfo(final Set configurationInfoSet, final Vector keysExpected, - final Vector valuesExpected, final Vector typesExpected, - final Policy policyExpected) throws Exception { - - Assert.assertEquals(keysExpected.size(), valuesExpected.size()); - Assert.assertEquals(valuesExpected.size(), typesExpected.size()); - Assert.assertTrue(configurationInfoSet.size() == 1); - - Iterator iterator = configurationInfoSet.iterator(); - if (iterator.hasNext()) { - ConfigurationInfo configurationInfo = iterator.next(); - Map props = configurationInfo.getProperties(); - - Vector keys = (Vector) props.get(JndiAdapter.ENTRY_NAME); - Vector types = (Vector) props.get(JndiAdapter.ENTRY_TYPE); - Vector values = (Vector) props.get(JndiAdapter.ENTRY_VALUE); - - Assert.assertEquals(keys.size(), keysExpected.size()); - Assert.assertEquals(values.size(), valuesExpected.size()); - Assert.assertEquals(types.size(), typesExpected.size()); - - Policy policy = JndiEntriesService.getPolicyAsEnum(String.class.cast(props.get(JndiAdapter.POLICY))); - - Assert.assertEquals(policy, policyExpected); - int size = keysExpected.size(); - for (int i = 0; i < size; i++) { - Assert.assertEquals(keys.get(i), keysExpected.get(i)); - } - for (int i = 0; i < size; i++) { - Assert.assertEquals(values.get(i), valuesExpected.get(i)); - } - for (int i = 0; i < size; i++) { - Assert.assertEquals(types.get(i), typesExpected.get(i)); - } - } - - } - -} diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-empty-value-test.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-empty-value-test.xml deleted file mode 100644 index 16dc260df4..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-empty-value-test.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - last-update - - java:global/test/empty - The description of my first entry - java.lang.String - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-null-value-test.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-null-value-test.xml deleted file mode 100644 index 4925e268a0..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-null-value-test.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - strict-consistency - - java:global/test/null - The description of my first entry - java.lang.String - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-sample-example.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-sample-example.xml deleted file mode 100644 index 92aed7af80..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-sample-example.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - strict-consistency - - java:global/jndi/developer - My description - java.lang.String - The JOnAS Team - - - java:global/jndi/arch - My description - java.lang.Integer - 64 - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-unicity-test.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-unicity-test.xml deleted file mode 100644 index 979cb518ad..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-unicity-test.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - strict-consistency - - java:global/myentry - The description of my first entry - java.lang.String - The JOnAS Team - - - java:global/myentry - The description of my second entry - java.lang.Float - 64.0 - - - diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-content.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-content.xml deleted file mode 100644 index 90c2bda441..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-content.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - strict-consistency - - java:global/test/content - The description of my first entry - java.lang.String - The JOnAS Team - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-policy.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-policy.xml deleted file mode 100644 index fa773349b4..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-policy.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - my-policy - - java:global/test/policy - The description of my first entry - java.lang.String - The JOnAS Team - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-tag-order.xml b/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-tag-order.xml deleted file mode 100644 index 9f41795224..0000000000 --- a/jonas/modules/services/jonas-jndi/core/src/test/resources/ca-jndi-wrong-tag-order.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - strict-consistency - - java.lang.String - java:global/test/tag - The JOnAS Team - The description of my first entry - - - diff --git a/jonas/modules/services/jonas-jndi/pom.xml b/jonas/modules/services/jonas-jndi/pom.xml deleted file mode 100644 index 4055cfd49d..0000000000 --- a/jonas/modules/services/jonas-jndi/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jndi - pom - JOnAS :: Services :: JNDI service - - core - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/ant/pom.xml b/jonas/modules/services/jonas-mail/ant/pom.xml deleted file mode 100644 index 6caf71743a..0000000000 --- a/jonas/modules/services/jonas-mail/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-mail - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-mail-ant - bundle - JOnAS :: Services :: Mail :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/DeployableTask.java b/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/DeployableTask.java deleted file mode 100644 index b2684c7d49..0000000000 --- a/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/DeployableTask.java +++ /dev/null @@ -1,273 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.mail; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.types.FileSet; -import org.ow2.jonas.antmodular.bootstrap.JOnASAntTool; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.BaseTaskItf; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.DeployableSelector; - -/** - * Allow to create mail factory. - * @author Florent Benoit - */ -public class DeployableTask extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[Deployable] "; - - /** - * Deployables separator. - */ - private static final String DEPSEPARATOR_PROPERTY = ","; - - /** - * Exclude deployables. - */ - private static final String TARGET_EXCLUDE_PROPERTY = "exclude"; - - /** - * Copy deployables. - */ - private static final String TARGET_COPY_PROPERTY = "copy"; - /** - * Source directory. - */ - File f_srcDir; - - /** - * Destination directory. - */ - File f_dstDir; - /** - * Type of factory (Session or MimePartDataSource) - */ - private String extension = null; - - /** - * Name of the factory - */ - private String values = null; - - /** - * Directory to copy from. - */ - private String srcDir = null; - - /** - * Destination. - */ - private String dstDir = null; - - /** - * Target to execute. Possible values are : copy, exclude - */ - private String target = null; - - - public String getSrcDir() { - return srcDir; - } - - - - public void setSrcDir(final String sourceDir) { - this.srcDir = sourceDir; - } - - public String getExtension() { - return extension; - } - - public String getValues() { - return values; - } - - /** - * Sets the recipient (MimePartDataSource) - * @param mailTo recipient. - */ - public void setValues(final String values) { - this.values = values; - } - - - - /** - * Sets the extension - * @param extension of the deployables - */ - public void setExtension(final String extension) { - this.extension = extension; - } - /** - * Check the properties. - */ - private void checkParameters() { - try { - // Get dest. dir. - f_dstDir = new File(getDestDir().getPath(), this.dstDir); - if (extension == null || values == null || target == null) { - throw new BuildException(INFO + "Property 'extension' or 'values' is incorrect."); - } - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - // Get source dir. - f_srcDir = new File(this.srcDir); - if ( !f_srcDir.exists()) { - throw new BuildException(INFO + "Property 'sourceDir'is incorrect."); - } - }else if(!TARGET_EXCLUDE_PROPERTY.equalsIgnoreCase(target)){ - throw new BuildException(INFO + "Unsupported target '" + target - + "'. Possible values are :'" + TARGET_COPY_PROPERTY + ", " + TARGET_EXCLUDE_PROPERTY + "'"); - } - if ( !f_dstDir.exists()) { - throw new BuildException(INFO + "Property 'destDir'is incorrect."); - } - } catch (Exception e) { - throw new BuildException(INFO + "Properties are incorrect."); - } - } - /** - * Get the destination directory. - * @return destination directory. - */ - public String getDstDir() { - return dstDir; - } - - - /** - * Set the destination directory. - * @param destDir destination directory. - */ - public void setDstDir(final String destDir) { - this.dstDir = destDir; - } - - /** - * Get the target to be executed. - * @return the target - */ - public String getTarget() { - return target; - } - - - /** - * Set the target to be executed. - * @param target the target to be executed. - */ - public void setTarget(final String target) { - this.target = target; - } - - - - /** - * Execute this task. - */ - @Override - public void execute() { - - checkParameters(); - List deployables = new ArrayList(); - parseDeployableValues(values, deployables); - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - log(INFO + "Copying Type: " + extension + " values :" + deployables + " from " + f_srcDir.getAbsolutePath() - + " to " + f_dstDir.getAbsolutePath()); - Copy copyTask = new Copy(); - JOnASAntTool.configure(this, copyTask); - copyTask.setFailOnError(true); - copyTask.setTodir(f_dstDir); - FileSet fset = new FileSet(); - fset.setDir(f_srcDir); - DeployableSelector selector = new DeployableSelector(deployables); - fset.add(selector); - copyTask.addFileset(fset); - copyTask.execute(); - - }else { - log(INFO + "Excluding Type: " + extension - + " values :" + values + " from " + f_dstDir.getAbsolutePath() - + " deployables: " + deployables); - File toDelete = null; - for(String fileName : deployables) { - toDelete = new File(f_dstDir, fileName); - if (toDelete.exists()) { - //Delete The file... - log(INFO + "Deleting " + toDelete.getAbsolutePath()); - toDelete.delete(); - } - } - } - - - - } - - - /** - * get deployables from comma separated list. - * @param values2Parse the values to parse. - * @param deplList The list of deployables. - * */ - private void parseDeployableValues(final String values2Parse, final List deplList) { - if (values2Parse != null) { - int ind = values2Parse.indexOf(DEPSEPARATOR_PROPERTY); - String dep = null; - File depF = null; - if (ind != -1) { - dep = values2Parse.substring(0, ind) + "." + extension; - depF = new File(f_srcDir.getAbsolutePath(), dep); - if (depF.exists()) { - deplList.add(dep); - } - parseDeployableValues(values2Parse.substring(ind + 1, values2Parse.length()), deplList); - }else { - dep = values2Parse + "." + extension; - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - depF = new File(f_srcDir.getAbsolutePath(), dep); - }else { - depF = new File(f_dstDir.getAbsolutePath(), dep); - } - if (depF.exists()) { - deplList.add(dep); - } - } - - } - } - -} diff --git a/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/Mail.java b/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/Mail.java deleted file mode 100644 index e8331bb21d..0000000000 --- a/jonas/modules/services/jonas-mail/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/mail/Mail.java +++ /dev/null @@ -1,204 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.mail; - -import java.io.File; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -/** - * Allow to create mail factory. - * @author Florent Benoit - */ -public class Mail extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[Mail] "; - - /** - * Property for Mail factories. - */ - private static final String MAILFACTORY_PROPERTY = "jonas.service.mail.factories"; - - /** - * Session factory. - */ - private static final String SESSION_FACTORY = "Session"; - - /** - * MimePartDataSource factory. - */ - private static final String MIMEPARTDATASOURCE_FACTORY = "MimePartDataSource"; - - /** - * Session factory class. - */ - private static final String SESSION_FACTORY_CLASS = "javax.mail.Session"; - - /** - * MimePartDataSource factory class. - */ - private static final String MIMEPARTDATASOURCE_FACTORY_CLASS = "javax.mail.internet.MimePartDataSource"; - - /** - * Type of factory (Session or MimePartDataSource). - */ - private String type = null; - - /** - * Name of the factory. - */ - private String name = null; - - /** - * Recipient (TO) of MimePartDataSource factory. - */ - private String mailTo = null; - - /** - * Subject of MimePartDataSource factory. - */ - private String subject = null; - - /** - * Host of the mail server. - */ - private String host = null; - - /** - * Sets the recipient (MimePartDataSource). - * @param mailTo recipient. - */ - public void setMailTo(final String mailTo) { - this.mailTo = mailTo; - } - - /** - * Sets the name. - * @param name name of the factory - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Sets the subject (MimePartDataSource). - * @param subject of the mail - */ - public void setSubject(final String subject) { - this.subject = subject; - } - - /** - * Sets the type of factory. - * @param type of factory - */ - public void setType(final String type) { - this.type = type; - } - - /** - * Sets the host of mail server. - * @param host host of mail server - */ - public void setHost(final String host) { - this.host = host; - } - /** - * Check the properties. - */ - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (type == null) { - throw new BuildException(INFO + "Property 'type' is missing."); - } - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - - checkProperties(); - Properties props = new Properties(); - props.put("mail.factory.name", name); - String className = null; - - String infoTxt = "Generating a MailFactory with type '" + type + "' and name '" + name + "'"; - if(host != null) { - props.put("mail.host", host); - } - if (type.equalsIgnoreCase(SESSION_FACTORY)) { - className = SESSION_FACTORY_CLASS; - } else if (type.equalsIgnoreCase(MIMEPARTDATASOURCE_FACTORY)) { - className = MIMEPARTDATASOURCE_FACTORY_CLASS; - // Set mailTo - if (mailTo != null) { - props.put("mail.to", mailTo); - infoTxt += ", mailTo field '" + mailTo + "'"; - } - // Subject - if (subject != null) { - props.put("mail.subject", subject); - infoTxt += ", subject '" + subject + "'"; - } - - } else { - throw new BuildException(INFO + "Invalid type '" + type + "'."); - } - - // Display info - log(INFO + infoTxt + "..."); - - // Set type - props.put("mail.factory.type", className); - - // Build new mail factory - String jBaseConf = destDir.getPath() + File.separator + "conf"; - - String propsFileName = jBaseConf + File.separator + name + ".properties"; - File tmpFile = new File(propsFileName); - - JTask jtask = new JTask(); - jtask.setDestDir(destDir); - jtask.writePropsToFile(INFO, props, tmpFile); - - // Now add name to the existing list for the property - jtask.changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, MAILFACTORY_PROPERTY, name, true); - addTask(jtask); - - super.executeAllTask(); - } - -} diff --git a/jonas/modules/services/jonas-mail/ant/src/main/resources/antlib-mail.xml b/jonas/modules/services/jonas-mail/ant/src/main/resources/antlib-mail.xml deleted file mode 100644 index 7933a0bdbc..0000000000 --- a/jonas/modules/services/jonas-mail/ant/src/main/resources/antlib-mail.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.properties.template b/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.properties.template deleted file mode 100644 index ff68753a54..0000000000 --- a/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -#Mail -mail.session.name=mailSession_1 -mail.mimepartds.name=mailMimePartDS_1 -mail.to=jean.dupont@ow2.org -mail.subject=test mail -mail.host=localhost \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.xml b/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.xml deleted file mode 100644 index 207ced9109..0000000000 --- a/jonas/modules/services/jonas-mail/ant/src/main/resources/build-mail.xml +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/core/pom.xml b/jonas/modules/services/jonas-mail/core/pom.xml deleted file mode 100644 index 30e88f6c63..0000000000 --- a/jonas/modules/services/jonas-mail/core/pom.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - jonas-mail - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-mail-core - bundle - JOnAS :: Services :: Mail :: Core - - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - javax.mail - mail - 1.4 - - - org.ow2.bundles - ow2-util-log - provided - - - org.apache.felix - org.apache.felix.ipojo.annotations - ${ipojo.version} - provided - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-deploy - compile - - jar - - - src/main/jonas-resources/deploy-example - ${project.build.directory} - deploy-example - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/JOnASMailService.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/JOnASMailService.java deleted file mode 100644 index ad5ef768e5..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/JOnASMailService.java +++ /dev/null @@ -1,650 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal; - - -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Vector; - -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JModule; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.mail.MailServiceException; -import org.ow2.jonas.mail.factory.JavaMail; -import org.ow2.jonas.mail.internal.factory.JavaMailMimePartDS; -import org.ow2.jonas.mail.internal.factory.JavaMailSession; -import org.ow2.jonas.mail.internal.factory.mbean.JavaMailMimePartDSResource; -import org.ow2.jonas.mail.internal.factory.mbean.JavaMailSessionResource; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.service.ServiceException; - -/** - * This class provides an implementation of the javaMail service. - * @author Florent Benoit - * @author Ludovic Bert - * Contributor(s): - * Adriana Danes : - * - Make possible to change configuration of a JOnAS mail factory object. - * - Make possible to change the JNDI name of a JOnAS mail factory object. - */ -public class JOnASMailService extends AbsServiceImpl implements MailService { - - /** - * Logger for this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_MAIL_PREFIX); - - /** - * Reference to the JmXService. - */ - private JmxService jmxService = null; - - /** - * Initial Context for Naming. - */ - private Context ictx = null; - - /** - * Registry Service. - */ - private RegistryService registryService; - - /** - * List of the factories names to load when starting the MailService. - */ - private List factoryNames = new Vector(); - - /** - * List of the javax.mail.Session factories currently loaded. - */ - private Map jMailSessionFactories = new Hashtable(); - - /** - * List of the javax.mail.internet.MimePartDataSource factories currently loaded. - */ - private Map jMailMimePartDSFactories = new Hashtable(); - - /** - * List of the bound factories (jndi name -> factory name). - * This is needed by EJB components in order to find out the factory name - * based upon their jndi name - */ - private Map boundFactories = new Hashtable(); - - /** - * Session Factory. - */ - private static final int JAVAX_MAIL_SESSION_FACTORY = 1; - - /** - * MimepartDatasource Factory. - */ - private static final int JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE = 2; - - /** - * Mail service configuration parameters (factories). - */ - public static final String FACTORIES = "jonas.service.mail.factories"; - - /** - * Mail service configuration parameters (class). - */ - public static final String CLASS = "jonas.service.mail.class"; - - /** - * @param factories initial (comma separated list) of mail factories. - */ - public void setFactories(final String factories) { - factoryNames = convertToList(factories); - } - - /** - * Start the Mail Service. - * @throws ServiceException if the initialization failed. - */ - @Override - protected void doStart() throws ServiceException { - - // the logger for reconfig management - //super.initLogger(Log.getLogger(Log.JONAS_MANAGEMENT_PREFIX)); - // Get the InitialContext in an execution block - IExecution ictxGetter = new IExecution() { - public InitialContext execute() throws Exception { - return getRegistryService().getRegistryContext(); - } - }; - - // Execute - ExecutionResult ictxResult = RunnableHelper.execute(getClass().getClassLoader(), ictxGetter); - // Throw an ServiceException if needed - if (ictxResult.hasException()) { - logger.log(BasicLevel.ERROR, "Cannot create initial context when Mail service initializing"); - throw new ServiceException("Cannot create initial context when Mail service initializing", - ictxResult.getException()); - } - // Store the ref - ictx = ictxResult.getResult(); - - // Load mbeans-descriptor.xml into the modeler registry - // Needs to be done before creating Mail Factories. - // TODO, When mail service will become a bundle, we could use - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // creates each factory - String factoryName = null; - for (int i = 0; i < factoryNames.size(); i++) { - factoryName = factoryNames.get(i); - try { - JProp prop = JProp.getInstance(factoryName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Creating mail factory " + factoryName); - } - createMailFactory(factoryName, prop.getConfigFileEnv()); - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.ERROR)) { - logger.log(BasicLevel.ERROR, "JOnAS: Cannot create mail factory " + factoryName + " : " + e); - logger.log(BasicLevel.ERROR, "Please check the " + factoryName + ".properties file"); - } - } - } - - // Register MailService MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.mailService(getDomainName())); - } catch (Exception e) { - // Continue the execution ... - logger.log(BasicLevel.INFO, "Cannot register 'mail' service MBean", e); - } - logger.log(BasicLevel.INFO, "Mail Service started"); - } - - /** - * Stop the Mail service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - - try { - unbindMailFactories(); - } catch (MailServiceException e) { - logger.log(BasicLevel.ERROR, "Cannot unbind mail factories " + e); - throw new ServiceException("Cannot unbind mail factories ", e); - } - - // Unregister the Service MBean - if (jmxService != null) { - jmxService.unregisterModelMBean(JonasObjectName.mailService(getDomainName())); - // TODO We should remove the Model MBeans loaded by the JMX Service - } - logger.log(BasicLevel.INFO, "mail service stopped"); - } - - /** - * This method is used when a Mail Factory configuration is modified via jonasAdmin. - * In this case, the updated JavaMail object (JavaMailSession or JavaMailMimePartDS object) - * must be rebound in JNDI - * @param factory the factory - * @throws MailServiceException if the recreation of - * the factory failed. - */ - public void recreateJavaMailFactory(final JavaMail factory) throws MailServiceException { - String jndiName = factory.getName(); - // Rebind the factory object in the naming context - try { - ictx.rebind(jndiName, factory); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot bind mail factory '" + jndiName + "' :" + e.getMessage()); - throw new MailServiceException("Cannot bind mail factory " + jndiName + ".", e); - } - } - - /** - * This method is used when a particular Mail Factory configuration operation is done via jonasAdmin : - * when the JNDI name of this resource is modified. - * In this case, the initial JavaMail object (JavaMailSession or JavaMailMimePartDS object) must be unbound - * and the updated JavaMail object must be reloaded. - * Also, the Mail Service private data structures must be updated. - * @param oldName old name of the factory - * @param factory the new factory - * @throws MailServiceException if the rename of the - * the factory failed. - */ - public void renameJavaMailFactory(final String oldName, final JavaMail factory) throws MailServiceException { - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "In renameMailFactory, old name = " + oldName); - } - try { - ictx.unbind(oldName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, oldName + " unbound"); - } - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Warning: cannot unbind mail factory object named " + oldName); - } - } - String jndiName = factory.getName(); - // Rebind the factory object in the naming context - try { - ictx.rebind(jndiName, factory); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "factory rebound under the name " + jndiName); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot bind mail factory '" + jndiName + "' :" + e.getMessage()); - throw new MailServiceException("Cannot bind mail factory " + jndiName + ".", e); - } - boundFactories.put(jndiName, factory.getFactoryName()); - boundFactories.remove(oldName); - } - - /** - * Create a mail factory with the specified properties and register it - * into the registry. - * @param factoryName name of the factory to create - * @param props the properties used to configure the mail factory. - * @throws MailServiceException if the creation or the registration of - * the factory failed. - */ - public void createMailFactory(final String factoryName, final Properties props) - throws MailServiceException { - - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the properties from which the MailService picks to construct Mail Factories", - props, - logger, - BasicLevel.DEBUG); - } - - Object factory = null; - - //Factory type/jndi name must be non null - String factoryType = props.getProperty(PROPERTY_TYPE); - String jndiName = props.getProperty(PROPERTY_NAME); - - if (jndiName == null) { - logger.log(BasicLevel.ERROR, "The property 'mail.factory.name' is a required property."); - throw new MailServiceException("The property 'mail.factory.name' is a required property for this factory."); - } - - if (factoryType == null) { - logger.log(BasicLevel.ERROR, "The property 'mail.factory.type' is a required property."); - throw new MailServiceException("The property 'mail.factory.type' is a required property for this factory."); - } - - // Verify that jndi name not already used - if (boundFactories.containsKey(jndiName)) { - logger.log(BasicLevel.ERROR, "There is already a factory bound with the name " + jndiName); - throw new MailServiceException("There is already a factory bound with the name '" - + jndiName + "', please correct the provided configuration properties"); - } - - //Define the type of our factory - int typeOfFactory; - if (factoryType.equalsIgnoreCase("javax.mail.Session")) { - typeOfFactory = JAVAX_MAIL_SESSION_FACTORY; - } else if (factoryType.equalsIgnoreCase("javax.mail.internet.MimePartDataSource")) { - typeOfFactory = JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE; - } else { - typeOfFactory = 0; - } - - // Create the factory object and register it in the internal data structure - switch (typeOfFactory) { - - case JAVAX_MAIL_SESSION_FACTORY : - JavaMailSession sessionFactory = new JavaMailSession(factoryName, jndiName, props, this); - jMailSessionFactories.put(factoryName, sessionFactory); - factory = sessionFactory; - break; - - case JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE : - JavaMailMimePartDS mimeFactory = new JavaMailMimePartDS(factoryName, jndiName, props, this); - jMailMimePartDSFactories.put(factoryName, mimeFactory); - factory = mimeFactory; - break; - - default : - throw new MailServiceException("Can not create a factory of the type '" + factoryType + "'. This type is incorrect."); - } - - // Bind the factory object in the naming context - try { - ictx.rebind(jndiName, factory); - boundFactories.put(jndiName, factoryName); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot bind mail factory '" + jndiName + "' :" + e.getMessage()); - throw new MailServiceException("Cannot bind mail factory " + jndiName + ".", e); - } - - logger.log(BasicLevel.INFO, "Mapping Mail Factory " + factoryType + " on " + jndiName); - - // Register the factory object as an MBean with the jmx server - try { - ObjectName on = null; - switch (typeOfFactory) { - case JAVAX_MAIL_SESSION_FACTORY : - // J2EEManagement - - on = J2eeObjectName.JavaMailResource(getDomainName(), - factoryName, - getJonasServerName(), - SESSION_PROPERTY_TYPE); - JavaMailSessionResource javaMailSessionResource = null; - javaMailSessionResource = new JavaMailSessionResource(on.toString(), - false, - false, - false, - (JavaMailSession) factory); - // JSR77 - jmxService.registerModelMBean(javaMailSessionResource, on); - //mbeanServer.registerMBean(s_mbean, on); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Register session mail factory with name " + factoryName); - } - break; - case JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE : - // J2EEManagement - on = J2eeObjectName.JavaMailResource(getDomainName(), - factoryName, - getJonasServerName(), - MIMEPART_PROPERTY_TYPE); - JavaMailMimePartDSResource javaMailMimePartDSResource = null; - javaMailMimePartDSResource = new JavaMailMimePartDSResource(on.toString(), - false, - false, - false, - (JavaMailMimePartDS) factory); - // JSR77 - jmxService.registerModelMBean(javaMailMimePartDSResource, on); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Register mime mail factory with name " + factoryName); - } - } - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register JavaMailResource MBean"); - } - - - } - - /** - * Create a mail factory with the specified properties and register it - * into the registry. - * @param name the mail factory name - * @param props the properties used to configure the mail factory. - * @param loadFromFile true if the mail factory is loaded from a .properties file - * @throws MailServiceException if the creation or the registration of - * the factory failed. - * @throws MailServiceException - */ - public void createMailFactoryMBean(final String name, final Properties props, final Boolean loadFromFile) - throws MailServiceException { - - boolean fromFile = loadFromFile.booleanValue(); - if (!fromFile) { - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Call getInstance on JProp in order to create the properties file"); - } - JProp.getInstance(name, props); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, - "Cannot create mail factory " + name + " as cannot create properties file : " + e.toString()); - throw new ServiceException("MailService: Cannot create mail factory " + name + ",\n" + e.toString()); - } - } - //call the internal proc - try { - createMailFactory(name, props); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot create mail factory: " + name); - throw new ServiceException("MailService: Cannot create mail factory: " + name + ",\n" + e.toString()); - } - } - - /** - * Unregister all the binding factories on the server and in JMX Server. - * @throws MailServiceException if the unregistration of the factories - * failed. - */ - public void unbindMailFactories() throws MailServiceException { - //Unbind all factories - // Need to store the keys, because we will change the Maps in unbindMailFactoryMBean - // This would throw a ConcurrentModificationException if we were directly iterating the Map - String[] factories = new String[jMailSessionFactories.size()]; - factories = jMailSessionFactories.keySet().toArray(factories); - - for (int i = 0; i < factories.length; i++) { - String factoryName = factories[i]; - unbindMailFactoryMBean(factoryName); - } - - factories = new String[jMailMimePartDSFactories.size()]; - factories = jMailMimePartDSFactories.keySet().toArray(factories); - for (int i = 0; i < factories.length; i++) { - String factoryName = factories[i]; - unbindMailFactoryMBean(factoryName); - } - } - - /** - * Unregister the factory with the given name. - * @param factoryName the name of the factory to unbind. - * @throws MailServiceException if the unregistration of the factory - * failed. - */ - public void unbindMailFactory(final String factoryName) - throws MailServiceException { - unbindMailFactoryMBean(factoryName); - } - - /** - * Unregister the factory with the given name. - * @param factoryName the name of the factory to unbind. - * @throws MailServiceException if the unregistration of the factory - * failed. - */ - public void unbindMailFactoryMBean(final String factoryName) - throws MailServiceException { - - // determine the type of the factory and the jndi name - String name = null; - int typeOfFactory; - JavaMailSession jmailSession = jMailSessionFactories.get(factoryName); - JavaMailMimePartDS jMailMimePartDS = jMailMimePartDSFactories.get(factoryName); - if (jmailSession != null) { - name = jmailSession.getName(); - typeOfFactory = JAVAX_MAIL_SESSION_FACTORY; - } else if (jMailMimePartDS != null) { - name = jMailMimePartDS.getName(); - typeOfFactory = JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE; - } else { - throw new MailServiceException("Can not unload the mail factory '" - + factoryName + "' (this is not a known factory name)"); - } - - // unbind the factory - try { - ictx.unbind(name); - boundFactories.remove(name); - } catch (NamingException e) { - throw new MailServiceException("Can not unbind the factory '" + name + "'.", e); - } - - // remove JProp instance corresponding to this datasource in order to - // allow re-create in case its re-loaded - JProp.removeInstance(name); - - // De-register the factory object from the jmx server and remove the factory from the internal data structure - if (jmxService != null) { - ObjectName on = null; - switch (typeOfFactory) { - case JAVAX_MAIL_SESSION_FACTORY : - // J2EEManagement - on = J2eeObjectName.JavaMailResource(getDomainName(), - factoryName, - getJonasServerName(), - SESSION_PROPERTY_TYPE); - jmxService.unregisterModelMBean(on); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Unregister session mail factory with name " + factoryName); - } - jMailSessionFactories.remove(factoryName); - break; - case JAVAX_MAIL_INTERNET_MIMEPARTDATASOURCE : - // J2EEManagement - on = J2eeObjectName.JavaMailResource(getDomainName(), - factoryName, - getJonasServerName(), - MIMEPART_PROPERTY_TYPE); - jmxService.unregisterModelMBean(on); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Unregister mime mail factory with name " + factoryName); - } - jMailMimePartDSFactories.remove(factoryName); - } - } - - } - - /** - * Gets the factory name given the jndi name. Null is returned if the given name is not bound. - * @param jndiName the jndi name - * @return the factory name given the jndi name. Null is returned if the given name is not bound. - */ - public String getFactoryName(final String jndiName) { - return boundFactories.get(jndiName); - } - - /** - * Gets the total number of mail factories available in JOnAS. - * @return Integer Total number of mail factories available in JOnAS - */ - public Integer getCurrentNumberOfMailFactories() { - return Integer.valueOf(jMailSessionFactories.size() + jMailMimePartDSFactories.size()); - } - - /** - * Gets the number of Session mail factories available in JOnAS. - * @return Integer Number of Session mail factories available in JOnAS - */ - public Integer getCurrentNumberOfSessionMailFactories() { - return Integer.valueOf(jMailSessionFactories.size()); - } - - /** - * Gets the integer Number of internet. - * @return Integer Number of internet.MimePartDataSource mail factories available in JOnAS - */ - public Integer getCurrentNumberOfMimeMailFactories() { - return Integer.valueOf(jMailMimePartDSFactories.size()); - } - - /** - * Gets the mail factory configuration properties from a local file. - * @param configFile configuration to use - * @return mail factory configuration properties from a local file - * @throws Exception if it fails - */ - public Properties getMailFactoryPropertiesFile(final String configFile) throws Exception { - try { - return JProp.getInstance(configFile).getConfigFileEnv(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Error occured when reading file " + configFile); - throw e; - } - } - - /** - * MBean method. - * @return the list of properties files describing mail factories found in JONAS_BASE/conf - */ - public List getMailFactoryPropertiesFiles() throws Exception { - return JModule.getMailFactoryPropsInDir(); - } - - /** - * MBean method. - * @return the list of properties files describing mail factories found in JONAS_BASE/conf - */ - public List getMimePartMailFactoryPropertiesFiles() throws Exception { - return JModule.getMailFactoryPropsInDir(MIMEPART_PROPERTY_TYPE); - } - - /** - * MBean method. - * @return the list of properties files describing mail factories found in JONAS_BASE/conf - */ - public List getSessionMailFactoryPropertiesFiles() throws Exception { - return JModule.getMailFactoryPropsInDir(SESSION_PROPERTY_TYPE); - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param registry the registry service to set - */ - public void setRegistryService(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Returns the registry service. - * @return The registry service - */ - private RegistryService getRegistryService() { - return registryService; - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/AbstractJavaMail.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/AbstractJavaMail.java deleted file mode 100644 index 896b2261ef..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/AbstractJavaMail.java +++ /dev/null @@ -1,249 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory; - -//import java -import java.util.Properties; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.MailService; -import org.ow2.jonas.mail.factory.JavaMail; - -/** - * This class implements JOnAS mail factory objects. It gets the properties from mail factory properties file - * and build a properties object for the Session. - * @author Florent Benoit - * @author Ludovic Bert - * Contributor(s): - * Adriana Danes : - * Refactor code: rename the management methods (use straightforward - * names, as they are to be used in a Management Console) - * - * Markus Karg : Change the JOnAS mail factory initialisation strategy in order - * to allow any initialisation parameters for a javax.mail.Session object (not - * only a known set pf initialisation parameters as before). - * - * Adriana Danes : - * 03/11/20 : J2EEManagement conformance - replaces old JMail class - */ -public abstract class AbstractJavaMail implements JavaMail { - - /** - * The logger used in JOnAS. - */ - private static Logger logger = null; - - /** - * The name of the factory. - */ - private String factoryName = null; - - /** - * The jndi name of this object. - */ - private String name = null; - - /** - * TODO - doc - */ - private MailService mailService = null; - /** - * Properties for the javax.mail.Session object. - * Keep only the values used for configuring the javax.mail.Session object. - */ - private Properties mailSessionProperties = null; - - /** - * Properties for the authentication. - */ - private Properties authenticationProperties = null; - - /** - * JOnAS-specific property that authenticates the user name. - */ - private static final String PROPERTY_AUTHENTICATION_USERNAME = "mail.authentication.username"; - - /** - * JOnAS-specific property that authenticates the user password. - */ - private static final String PROPERTY_AUTHENTICATION_PASSWORD = "mail.authentication.password"; - - /** - * Constructor of a JavaMail Object with the given name and properties. - * @param factoryName the name of the factory. - * @param name the jndi name. - * @param mailProperties properties for configuring and manageing this object. - */ - public AbstractJavaMail(final String factoryName, final String name, final Properties mailProperties, final MailService mailService) { - //Get the logger - if (logger == null) { - logger = Log.getLogger(Log.JONAS_MAIL_PREFIX); - } - this.factoryName = factoryName; - this.name = name; - this.mailService = mailService; - - this.mailSessionProperties = (Properties) mailProperties.clone(); - - // Retrieve JOnAS specific properties 'type' and 'name' from props - mailSessionProperties.remove(MailService.PROPERTY_NAME); - mailSessionProperties.remove(MailService.PROPERTY_TYPE); - - // Construct authentication properties from well-known JOnAS properties only - this.authenticationProperties = new Properties(); - String propValue = null; - propValue = (String) mailSessionProperties.remove(PROPERTY_AUTHENTICATION_USERNAME); - if (propValue != null) { - authenticationProperties.setProperty(PROPERTY_AUTHENTICATION_USERNAME, propValue); - } - propValue = (String) mailSessionProperties.remove(PROPERTY_AUTHENTICATION_PASSWORD); - if (propValue != null) { - authenticationProperties.setProperty(PROPERTY_AUTHENTICATION_PASSWORD, propValue); - } - } - - - /* (non-Javadoc) - * @see org.ow2.jonas.mail.internal.factory.JavaMail#getName() - */ - public String getName() { - return name; - } - - /** - * Set the jndi name of this object. - * @param name the jndi name - */ - public void setName(String name) { - String oldName = this.name; - this.name = new String(name); - try { - //((MailService) ServiceManager.getInstance().getMailService()).renameJavaMailFactory(oldName, this); - mailService.renameJavaMailFactory(oldName, this); - } catch (Exception e) { - // should never occurs at this time - } - } - - /* (non-Javadoc) - * @see org.ow2.jonas.mail.internal.factory.JavaMail#getFactoryName() - */ - public String getFactoryName() { - return factoryName; - } - - /** - * Retrieves the session properties of this object. - * @return the session properties of this object. - */ - public Properties getSessionProperties() { - return mailSessionProperties; - } - - /** - * Set the session properties. - * @param props the session properties. - */ - public void setSessionProperties(Properties props) { - this.mailSessionProperties = props; - // rebind the mail factory in JNDI - try { - //((MailService) ServiceManager.getInstance().getMailService()).recreateJavaMailFactory(this); - mailService.recreateJavaMailFactory(this); - } catch (Exception e) { - // should never occurs - } - //notifyReconfiguration(props); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the udated session properties", this.mailSessionProperties, logger, BasicLevel.DEBUG); - } - } - - /** - * Retrieves the authentication properties of this object. - * @return the authentication properties of this object. - */ - public Properties getAuthenticationProperties() { - return authenticationProperties; - } - - /** - * Set the authentication properties. - * @param props the authentication properties. - */ - public void setAuthenticationProperties(Properties props) { - this.authenticationProperties = props; - // rebind the mail factory in JNDI - try { - //((MailService) ServiceManager.getInstance().getMailService()).recreateJavaMailFactory(this); - mailService.recreateJavaMailFactory(this); - } catch (Exception e) { - // should never occurs - } - //notifyReconfiguration(props); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the udated auth properties", - this.authenticationProperties, logger, BasicLevel.DEBUG); - } - } - - /** - * @return Returns the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @param logger The logger to set. - */ - public static void setLogger(final Logger logger) { - AbstractJavaMail.logger = logger; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.mail.internal.factory.JavaMail#getMailSessionProperties() - */ - public Properties getMailSessionProperties() { - return mailSessionProperties; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.mail.internal.factory.JavaMail#setMailSessionProperties(java.util.Properties) - */ - public void setMailSessionProperties(Properties mailSessionProperties) { - this.mailSessionProperties = mailSessionProperties; - } - - - public MailService getMailService() { - return mailService; - } -} - diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDS.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDS.java deleted file mode 100644 index ff40740d1e..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDS.java +++ /dev/null @@ -1,196 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory; - -//import java -import java.util.Properties; - -import javax.naming.BinaryRefAddr; -import javax.naming.NamingException; -import javax.naming.Reference; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.MailService; - -/** - * This class provides a way for referencing mail session. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JavaMailMimePartDS extends AbstractJavaMail { - - /** - * Type of the factory. - */ - private static final String FACTORY_TYPE = "javax.mail.internet.MimePartDataSource"; - - /** - * Properties for the javax.mail.MimeMessage object. - */ - private Properties messageProperties = null; - - /** - * JOnAS-specific property for Mime Messages configuration (mail.to). - */ - protected static final String MIMEMESSAGE_TO = "mail.to"; - - /** - * JOnAS-specific property for Mime Messages configuration (mail.cc). - */ - - protected static final String MIMEMESSAGE_CC = "mail.cc"; - - /** - * JOnAS-specific property for Mime Messages configuration (mail.bcc). - */ - protected static final String MIMEMESSAGE_BCC = "mail.bcc"; - - /** - * JOnAS-specific property for Mime Messages configuration (mail.subject). - */ - protected static final String MIMEMESSAGE_SUBJECT = "mail.subject"; - - /** - * Value used as sequence number by reconfiguration notifications - */ - //protected long sequenceNumber = 0; - - /** - * Return the type of the factory. - * @return the type of the mail factory - */ - public String getType() { - return FACTORY_TYPE; - } - - - /** - * Constructor of a JavaMailMimePartDS Object. - * @param factoryName the name of the factory. - * @param name the name of this object. - * @param mailProperties properties for configuring this object. - */ - public JavaMailMimePartDS(final String factoryName, final String name, final Properties mailProperties, final MailService mailService) { - super(factoryName, name, mailProperties, mailService); - - PropDump.print("Received props:", mailProperties, getLogger(), BasicLevel.DEBUG); - - //Get the message properties - messageProperties = new Properties(); - String propValue = null; - propValue = (String) getMailSessionProperties().remove(MIMEMESSAGE_TO); - if (propValue != null) { - messageProperties.setProperty(MIMEMESSAGE_TO, propValue); - } - propValue = (String) getMailSessionProperties().remove(MIMEMESSAGE_CC); - if (propValue != null) { - messageProperties.setProperty(MIMEMESSAGE_CC, propValue); - } - propValue = (String) getMailSessionProperties().remove(MIMEMESSAGE_BCC); - if (propValue != null) { - messageProperties.setProperty(MIMEMESSAGE_BCC, propValue); - } - propValue = (String) getMailSessionProperties().remove(MIMEMESSAGE_SUBJECT); - if (propValue != null) { - messageProperties.setProperty(MIMEMESSAGE_SUBJECT, propValue); - } - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - PropDump.print("Message props:", messageProperties, getLogger(), BasicLevel.DEBUG); - } - } - - - /** - * Retrieves the mimeMessage properties of this object. - * @return the mimeMessage properties of this object. - */ - public Properties getMimeMessageProperties() { - return messageProperties; - } - - /** - * Set the mimeMessage properties of this object. - * @param props the mimeMessage properties - */ - public void setMimeMessageProperties(Properties props) { - this.messageProperties = props; - try { - //((MailService) ServiceManager.getInstance().getMailService()).recreateJavaMailFactory(this); - getMailService().recreateJavaMailFactory(this); - } catch (Exception e) { - // should never occurs - } - //notifyReconfiguration(props); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the udated message props", - this.messageProperties, getLogger(), BasicLevel.DEBUG); - } - } - - - /** - * Retrieves the Reference of the javax.mail.MimePartDataSource object. - * The Reference contains the factory used to create this object - * (that is the JavaMimePartDSFactory) and the optional parameters used to - * configure the factory. - * @return the non-null Reference of the javax.mail.MimePartDataSource - * object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - //Build the reference to the factory JMailSessionFactory - Reference reference = new Reference(FACTORY_TYPE, - JavaMailMimePartDSFactory.class.getName(), - null); - byte[] bytes = null; - - //Give the session properties - bytes = JNDIUtils.getBytesFromObject(getMailSessionProperties()); - if (bytes != null) { - reference.add(new BinaryRefAddr("javaxmailSession.properties", bytes)); - } - - //Give the mime message properties - bytes = JNDIUtils.getBytesFromObject(messageProperties); - if (bytes != null) { - reference.add(new BinaryRefAddr("javaxInternetMimeMessage.properties", bytes)); - } - - //Give the authentication properties - bytes = JNDIUtils.getBytesFromObject(getAuthenticationProperties()); - if (bytes != null) { - reference.add(new BinaryRefAddr("authentication.properties", bytes)); - } - - return reference; - - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDSFactory.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDSFactory.java deleted file mode 100644 index 5c6629b088..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailMimePartDSFactory.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory; - - -//import java -import java.util.Hashtable; -import java.util.Properties; -import java.util.StringTokenizer; - -import javax.mail.Message; -import javax.mail.Session; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimePart; -import javax.mail.internet.MimePartDataSource; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; - -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.internal.factory.lib.JAuthenticator; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class provides an implementation of a mime part data source factory - * for sending mail. - * @author Ludovic Bert - * @author Florent Benoit - */ -public class JavaMailMimePartDSFactory implements ObjectFactory { - - /** - * The Java type for which this factory knows how to create objects. - */ - protected static final String FACTORY_TYPE = "javax.mail.internet.MimePartDataSource"; - - /** - * The logger used in JOnAS. - */ - private static Logger logger = null; - - /** - * Creates a javax.mail.MimePartDataSource object using the location or - * reference information specified. - * @param obj the possibly null object containing location or reference - * information that can be used in creating an object. - * @param name the name of this object relative to nameCtx, or null if no - * name is specified. - * @param nameCtx the context relative to which the name parameter is - * specified, or null if name is relative to the default initial context. - * @param environment the possibly null environment that is used in - * creating the object. - * @return a newly created javax.mail.internet.MimePartDataSource object with the - * specific configuration; null if an object cannot be created. - * @throws Exception if this object factory encountered an exception - * while attempting to create an object, and no other object factories are - * to be tried. - */ - public Object getObjectInstance(Object obj, Name name, Context nameCtx, - Hashtable environment) throws Exception { - - //Get the logger - if (logger == null) { - logger = Log.getLogger(Log.JONAS_MAIL_PREFIX); - } - - //Get the reference - Reference ref = (Reference) obj; - - //Get the class name - String clname = ref.getClassName(); - - //Check the class name - if (!ref.getClassName().equals(FACTORY_TYPE)) { - logger.log(BasicLevel.ERROR, "Cannot create object : required type is '" + FACTORY_TYPE + "', but found type is '" + clname + "'."); - return (null); - } - - Properties sessionProps = new Properties(); - Properties mimeMessageProps = new Properties(); - Properties authenticationProps = new Properties(); - RefAddr refAddr = null; - - refAddr = ref.get("javaxmailSession.properties"); - if (refAddr != null) { - sessionProps = (Properties) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the properties used to obtain a new Session object", sessionProps, logger, BasicLevel.DEBUG); - } - } - - refAddr = ref.get("javaxInternetMimeMessage.properties"); - if (refAddr != null) { - mimeMessageProps = (Properties) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the properties specific to Internet mail", - mimeMessageProps, logger, BasicLevel.DEBUG); - } - } - - refAddr = ref.get("authentication.properties"); - if (refAddr != null) { - authenticationProps = (Properties) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the authentication properties", - authenticationProps, logger, BasicLevel.DEBUG); - } - } - - //username (Authentication) - String mailAuthenticationUsername = authenticationProps.getProperty("mail.authentication.username"); - - //Password (Authentication) - String mailAuthenticationPassword = authenticationProps.getProperty("mail.authentication.password"); - - //Field 'to' - String mailTo = mimeMessageProps.getProperty("mail.to"); - InternetAddress[] toRecipients = null; - if (mailTo != null) { - toRecipients = getInternetAddressFromString(mailTo); - } - - //Field 'cc' - String mailCc = mimeMessageProps.getProperty("mail.cc"); - InternetAddress[] ccRecipients = null; - if (mailCc != null) { - ccRecipients = getInternetAddressFromString(mailCc); - } - - //Field 'bcc' - String mailBcc = mimeMessageProps.getProperty("mail.bcc"); - InternetAddress[] bccRecipients = null; - if (mailBcc != null) { - bccRecipients = getInternetAddressFromString(mailBcc); - } - - //Field 'subject' - String mailSubject = mimeMessageProps.getProperty("mail.subject"); - - - JAuthenticator jAuthenticator = null; - if ((mailAuthenticationUsername != null) && (mailAuthenticationPassword != null)) { - jAuthenticator = new JAuthenticator(mailAuthenticationUsername, mailAuthenticationPassword); - } - - //Build the message from the Session. - MimeMessage mimeMessage = new MimeMessage(Session.getInstance(sessionProps, jAuthenticator)); - - //And set the properties if there are not null - - //Field 'to' - if (toRecipients != null) { - mimeMessage.setRecipients(Message.RecipientType.TO, toRecipients); - } - - //Field 'cc' - if (ccRecipients != null) { - mimeMessage.setRecipients(Message.RecipientType.CC, ccRecipients); - } - - //Field 'bcc' - if (bccRecipients != null) { - mimeMessage.setRecipients(Message.RecipientType.BCC, bccRecipients); - } - - //Field 'subject' - if (mailSubject != null) { - mimeMessage.setSubject(mailSubject); - } - - MimePartDataSource mimePartDS = new MimePartDataSource((MimePart) mimeMessage); - return mimePartDS; - } - - /** - * Convert a comma separated list into an array of InternetAddress. - * @param txt acomma separated string - * @return an array of InternetAddress - */ - - private static InternetAddress[] getInternetAddressFromString(String txt) { - if (txt == null) { - return null; - } - StringTokenizer st = new StringTokenizer(txt, ","); - InternetAddress[] addresses = new InternetAddress[st.countTokens()]; - int i = 0; - try { - while (st.hasMoreTokens()) { - addresses[i] = new InternetAddress((String) st.nextToken()); - i++; - } - } catch (Exception e) { - return null; - } - return addresses; - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSession.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSession.java deleted file mode 100644 index f849b37710..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSession.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory; - -//import java -import java.util.Properties; - -//import javax -import javax.naming.BinaryRefAddr; -import javax.naming.NamingException; -import javax.naming.Reference; - -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.MailService; - -//import objectweb.util -import org.objectweb.util.monolog.api.BasicLevel; - -//import jonas - -/** - * This class provides a way for referencing mail session. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JavaMailSession extends AbstractJavaMail { - - /** - * Type of the factory. - */ - private static final String FACTORY_TYPE = "javax.mail.Session"; - - - /** - * Constructor of a JMailSession Object. - * @param factoryName the name of the factory. - * @param name the jndi name - * @param mailProperties properties for configuring this object. - */ - public JavaMailSession(String factoryName, String name, Properties mailProperties, final MailService mailService) { - super(factoryName, name, mailProperties, mailService); - } - - /** - * Return the type of the factory. - * @return the type of the mail factory - */ - public String getType() { - return FACTORY_TYPE; - } - - /** - * Retrieves the Reference of the javax.mail.Session object. - * The Reference contains the factory used to create this object - * (that is the JavaMailSessionFactory) and the optional parameters used to - * configure the factory. - * @return the non-null Reference of the javax.mail.Session object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - //Build the reference to the factory JMailSessionFactory - Reference reference = new Reference(FACTORY_TYPE, - JavaMailSessionFactory.class.getName(), - null); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - PropDump.print("Here are these properties:", getMailSessionProperties(), getLogger(), BasicLevel.DEBUG); - } - - //Give the session properties - byte[] bytes = JNDIUtils.getBytesFromObject(getMailSessionProperties()); - if (bytes != null) { - reference.add(new BinaryRefAddr("javaxmailSession.properties", bytes)); - } - - //Give the authentication properties - bytes = JNDIUtils.getBytesFromObject(getAuthenticationProperties()); - if (bytes != null) { - reference.add(new BinaryRefAddr("authentication.properties", bytes)); - } - - return reference; - - } - - -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSessionFactory.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSessionFactory.java deleted file mode 100644 index 0d92004799..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/JavaMailSessionFactory.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory; - -//import java -import java.util.Hashtable; -import java.util.Properties; - -import javax.mail.Session; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; - -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.PropDump; -import org.ow2.jonas.mail.internal.factory.lib.JAuthenticator; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class provides an implementation of a mail session factory for - * sending mail. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JavaMailSessionFactory implements ObjectFactory { - - /** - * The Java type for which this factory knows how to create objects. - */ - protected static final String FACTORY_TYPE = "javax.mail.Session"; - - /** - * The logger used in JOnAS. - */ - private static Logger logger = null; - - - /** - * Creates a javax.mail.Session object using the location or reference - * information specified. - * @param obj the possibly null object containing location or reference - * information that can be used in creating an object. - * @param name the name of this object relative to nameCtx, or null if no - * name is specified. - * @param nameCtx the context relative to which the name parameter is - * specified, or null if name is relative to the default initial context. - * @param environment the possibly null environment that is used in - * creating the object. - * @return a newly created javax.mail.Session object with the specific - * configuration; null if an object cannot be created. - * @throws Exception if this object factory encountered an exception - * while attempting to create an object, and no other object factories - * are to be tried. - */ - public Object getObjectInstance(final Object obj, final Name name, final Context nameCtx, - Hashtable environment) throws Exception { - - //Get the logger - if (logger == null) { - logger = Log.getLogger(Log.JONAS_MAIL_PREFIX); - } - - //Get the reference - Reference ref = (Reference) obj; - - //Get the class name - String clname = ref.getClassName(); - - //Check the class name - if (!ref.getClassName().equals(FACTORY_TYPE)) { - logger.log(BasicLevel.ERROR, "Cannot create object : required type is '" + FACTORY_TYPE + "', but found type is '" + clname + "'."); - return (null); - } - - Properties props = new Properties(); - Properties authenticationProps = new Properties(); - RefAddr refAddr = null; - - refAddr = ref.get("javaxmailSession.properties"); - if (refAddr != null) { - props = (Properties) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the properties attached to the Reference object used to construct a Session", - props, logger, BasicLevel.DEBUG); - } - } - - refAddr = ref.get("authentication.properties"); - if (refAddr != null) { - authenticationProps = (Properties) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - if (logger.isLoggable(BasicLevel.DEBUG)) { - PropDump.print("These are the authentication properties used to construct a Authenticator", - authenticationProps, logger, BasicLevel.DEBUG); - } - } - - //username (Authentication) - String mailAuthenticationUsername = authenticationProps.getProperty("mail.authentication.username"); - - //Password (Authentication) - String mailAuthenticationPassword = authenticationProps.getProperty("mail.authentication.password"); - - JAuthenticator jAuthenticator = null; - if ((mailAuthenticationUsername != null) && (mailAuthenticationPassword != null)) { - jAuthenticator = new JAuthenticator(mailAuthenticationUsername, mailAuthenticationPassword); - } - - // Create and return a new Session object - Session session = Session.getInstance(props, jAuthenticator); - - return (session); - } - -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/lib/JAuthenticator.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/lib/JAuthenticator.java deleted file mode 100644 index 70e61cc74c..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/lib/JAuthenticator.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory.lib; - -//import javax -import javax.mail.Authenticator; -import javax.mail.PasswordAuthentication; - -/** - * This class specifies the {@link Authenticator} to use in - * Sesssion.getInstance() method. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class JAuthenticator extends Authenticator { - - /** - * Username. - */ - private String username = null; - - /** - * Password. - */ - private String password = null; - - /** - * Constructor for build a new {@link Authenticator}. - * @param username the name of the user - * @param password the password of the user - */ - public JAuthenticator(final String username, final String password) { - this.username = username; - this.password = password; - } - - /** - * Called when password authentication is needed. - * @return a password authentication - */ - public PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailMimePartDSResource.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailMimePartDSResource.java deleted file mode 100644 index 58911a475d..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailMimePartDSResource.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory.mbean; - -import java.util.Properties; - -import org.ow2.jonas.mail.internal.factory.JavaMailMimePartDS; - - -/** - * JSR 77 Implementation of the Java Mail MimePart DS Resource. - * @author Adriana Danes - */ -public class JavaMailMimePartDSResource extends JavaMailResource { - - /** - * Value used as sequence number by reconfiguration notifications - */ - protected long sequenceNumber = 0; - - public JavaMailMimePartDSResource(String objectName, boolean stateManageable, boolean statisticsProvider, boolean eventProvider, JavaMailMimePartDS mailFactory) { - super(objectName, stateManageable, statisticsProvider, eventProvider, mailFactory); - } - - /** - * Get the mimePartDatasource properties. - * @return the mimePartDatasource properties - */ - public Properties getMimeMessageProperties() { - return ((JavaMailMimePartDS) mailFactory).getMimeMessageProperties(); - } - - /** - * Set the mimePartDatasource properties. - * @param props the mimePartDatasource properties - */ - public void setMimeMessageProperties(Properties props) { - ((JavaMailMimePartDS) mailFactory).setMimeMessageProperties(props); - notifyReconfiguration(props); - } - - /** - * Gets the sequence number for MBeans operations. - * @return the sequence number for MBeans operations - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResource.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResource.java deleted file mode 100644 index 266d00e958..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResource.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory.mbean; - -import java.util.Properties; - -import org.ow2.jonas.lib.management.javaee.J2EEResource; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.mail.factory.JavaMail; - - -/** - * JSR77 JavaMail Resource base implementation. - * @author Adriana Danes - */ -public abstract class JavaMailResource extends J2EEResource { - - /** - * Wrapped managed Java mail factory. - */ - protected JavaMail mailFactory = null; - /** - * JavaMail resource constructor. - * @param objectName MBean ObjectName - * @param stateManageable - * @param statisticsProvider - * @param eventProvider - * @param mailFactory - */ - public JavaMailResource(final String objectName, final boolean stateManageable, final boolean statisticsProvider, final boolean eventProvider, final JavaMail mailFactory) { - super(objectName, stateManageable, statisticsProvider, eventProvider); - this.mailFactory = mailFactory; - } - - /** - * Get the name of the factory. - * @return the name of the mail factory (the resource name as defined in jonas.properties) - */ - public String getFactoryName() { - return mailFactory.getFactoryName(); - } - - /** - * Get the name of the factory. - * @return name of the mail factory. - */ - public String getName() { - return mailFactory.getName(); - } - - /** - * Set the name of the factory. - * @param name name of the mail factory. - */ - public void setName(final String name) { - mailFactory.setName(name); - } - - /** - * Get the type of the factory. - * @return type of the mail factory. - */ - public String getFactoryType() { - return mailFactory.getType(); - } - - /** - * Get the authentication properties. - * @return properties of the authentication. - */ - public Properties getAuthenticationProperties() { - return mailFactory.getAuthenticationProperties(); - } - - /** - * Set the authentication properties. - * @param props the authentication properties. - */ - public void setAuthenticationProperties(final Properties props) { - mailFactory.setAuthenticationProperties(props); - notifyReconfiguration(props); - } - - /** - * Get the session properties. - * @return the properties of Session. - */ - public Properties getSessionProperties() { - return mailFactory.getSessionProperties(); - } - - /** - * Set the session properties. - * @param props the Session properties. - */ - public void setSessionProperties(final Properties props) { - mailFactory.setSessionProperties(props); - notifyReconfiguration(props); - } - - /** - * Gets the sequence number for MBeans operations - * @return the sequence number for MBeans operations - */ - protected abstract long getSequenceNumber(); - - /** - * Save updated configuration - */ - public void saveConfig() { - sendSaveNotification(getSequenceNumber(), getFactoryName()); - } - - protected void notifyReconfiguration(final Properties props) { - // Here we do not reconfigure a sole property, but a group of properties in props - PropertiesConfigurationData data = new PropertiesConfigurationData("", null); - data.setProps(props); - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), getFactoryName(), data); - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResourceMBean.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResourceMBean.java deleted file mode 100644 index 5fb41192d3..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailResourceMBean.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JavaMailResourceMBean.java 10421 2007-05-21 16:47:41Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory.mbean; - -//import java -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * This interface defines all the management methods provided by the JavaMailResource objects. - * @author Florent Benoit - * @author Ludovic Bert - * @author Adriana Danes: - * - Refactor code: rename the management methods (use straightforward names, as they are to be used in a Management Console) - * - J2EEManagement conformance - * - Use jakarta-commons modeler - */ -public class JavaMailResourceMBean extends BaseModelMBean { - - /** - * Default ModelMBean Constructor. - * @throws MBeanException rethrown from {@link BaseModelMBean} constructor. - * @throws RuntimeOperationsException rethrown from {@link BaseModelMBean} constructor. - */ - public JavaMailResourceMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - -} - diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailSessionResource.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailSessionResource.java deleted file mode 100644 index 8730be9286..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/factory/mbean/JavaMailSessionResource.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.mail.internal.factory.mbean; - -import org.ow2.jonas.mail.internal.factory.JavaMailSession; - -/** - * This class implements specific management methods provided by the JavaMailSession resources. - */ -public class JavaMailSessionResource extends JavaMailResource { - - /** - * Value used as sequence number by reconfiguration notifications. - */ - private long sequenceNumber = 0; - - public JavaMailSessionResource(final String objectName, - final boolean stateManageable, - final boolean statisticsProvider, - final boolean eventProvider, - final JavaMailSession mailFactory) { - super(objectName, stateManageable, statisticsProvider, eventProvider, mailFactory); - } - - /** - * Gets the sequence number for saveConfig opeartions. - * @return the sequence number for saveConfig operations - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailMimePartDSFactory.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailMimePartDSFactory.java deleted file mode 100644 index 1edabac7ba..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailMimePartDSFactory.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.mail.internal.osgi.configadmin; - -import java.util.Collections; -import java.util.Dictionary; -import java.util.List; -import java.util.Properties; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Updated; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.jonas.mail.MailService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="MailMimePartDSFactory",propagation=true) -public class MailMimePartDSFactory { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(MailMimePartDSFactory.class); - - /** - * Parameter : name - */ - @Property(name="name", mandatory=true) - private String name; - - /** - * List of properties - */ - Properties props; - - /** - * Service delegation - */ - @Requires - private MailService mailService; - - @SuppressWarnings("unchecked") - @Updated - public void updated(final Dictionary conf) { - // The instance was reconfigured, conf is the new configuration. - props = new Properties(); - logger.debug("{0} properties were injected",conf.size()); - - List keys = Collections.list(conf.keys()); - for (String key:keys) { - - String value = conf.get(key).toString(); - - logger.debug("{0}={1}", key, value); - - // name is already retrieved as a mandatory property - if (!key.equals("name")) { - props.setProperty(key, value); - } - - } - - } - - @Validate - public void start() { - try { - // add the mandatory properties - props.setProperty(MailService.PROPERTY_TYPE, MailService.MIMEPART_PROPERTY_TYPE); - props.setProperty(MailService.PROPERTY_NAME, name); - - mailService.createMailFactory(name, props); - - logger.debug("Mail Mime Part DS Factory created {0}", name); - - } catch (Exception e) { - logger.error("Error when creating the mail mime part ds factory {0} - exception={1}", name, e); - } - } - - @Invalidate - public void stop() { - - try { - - mailService.unbindMailFactory(name); - - logger.debug("Mail Mime Part DS Factory unbound {0}", name); - - } catch (Exception e) { - logger.error("Error when removing the mail mime part ds factory {0} - exception={1}", name, e); - - } - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailSessionFactory.java b/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailSessionFactory.java deleted file mode 100644 index 44cf77d9b8..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/java/org/ow2/jonas/mail/internal/osgi/configadmin/MailSessionFactory.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.mail.internal.osgi.configadmin; - -import java.util.Collections; -import java.util.Dictionary; -import java.util.List; -import java.util.Properties; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Updated; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.jonas.mail.MailService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="MailSessionFactory",propagation=true) -public class MailSessionFactory { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(MailSessionFactory.class); - - /** - * Parameter : name - */ - @Property(name="name", mandatory=true) - private String name; - - /** - * List of properties - */ - Properties props; - - /** - * Service delegation - */ - @Requires - private MailService mailService; - - @SuppressWarnings("unchecked") - @Updated - public void updated(final Dictionary conf) { - // The instance was reconfigured, conf is the new configuration. - props = new Properties(); - logger.debug("{0} properties were injected",conf.size()); - - List keys = Collections.list(conf.keys()); - for (String key:keys) { - - String value = conf.get(key).toString(); - - logger.debug("{0}={1}", key, value); - - // name is already retrieved as a mandatory property - if (!key.equals("name")) { - props.setProperty(key, value); - } - - } - - } - - @Validate - public void start() { - try { - // add the mandatory properties - props.setProperty(MailService.PROPERTY_TYPE, MailService.SESSION_PROPERTY_TYPE); - props.setProperty(MailService.PROPERTY_NAME, name); - - mailService.createMailFactory(name, props); - - logger.debug("Mail Session Factory created {0}", name); - - } catch (Exception e) { - logger.error("Error when creating the mail session factory {0} - exception={1}", name, e); - } - } - - @Invalidate - public void stop() { - - try { - - mailService.unbindMailFactory(name); - - logger.debug("Mail Session Factory unbound {0}", name); - - } catch (Exception e) { - logger.error("Error when removing the mail session factory {0} - exception={1}", name, e); - - } - } -} diff --git a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailMimePartDS1.properties b/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailMimePartDS1.properties deleted file mode 100644 index b2385576f4..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailMimePartDS1.properties +++ /dev/null @@ -1,38 +0,0 @@ -####################### -## Required properties -####################### - -#Factory Name/Type -mail.factory.name mailMimePartDS_1 -mail.factory.type javax.mail.internet.MimePartDataSource - -######################## -## Optional properties -## Each line can be removed -####################### - -### Authentication -#mail.authentication.username -#mail.authentication.password - -### Session properties -#mail.debug -#mail.from -#mail.mime.address.strict -#mail.host -#mail.store.protocol -#mail.transport.protocol -#mail.user - -### For each protocol: imap, pop3, smtp,... -### Ovveride default values defined aboved -#mail..class -#mail..host -#mail..port -#mail..user - -#### MimePartDataSource properties -#mail.to -#mail.cc -#mail.bcc -#mail.subject diff --git a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailSession1.properties b/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailSession1.properties deleted file mode 100644 index d3d1a24ac1..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/conf/MailSession1.properties +++ /dev/null @@ -1,32 +0,0 @@ -####################### -## Required properties -####################### - -#Factory Name/Type -mail.factory.name mailSession_1 -mail.factory.type javax.mail.Session - -######################## -## Optional properties -## Each line can be removed -####################### - -### Authentication -#mail.authentication.username -#mail.authentication.password - -### Session properties -#mail.debug -#mail.from -#mail.mime.address.strict -#mail.host -#mail.store.protocol -#mail.transport.protocol -#mail.user - -### For each protocol: imap, pop3, smtp,... -### Ovveride default values defined aboved -#mail..class -#mail..host -#mail..port -#mail..user diff --git a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/deploy-example/mail-factories.xml b/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/deploy-example/mail-factories.xml deleted file mode 100755 index 5a0a567996..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/jonas-resources/deploy-example/mail-factories.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - MyMailSessionFactory - - - - - - me - pwd - - - true - me@my.provider.fr - true - true - pop3 - smtp - me - - - - myimapclass - imaphost - imapport - imapuser - - - - MyMailMimePartDSFactory - - - - - - me - pwd - - - true - me@my.provider.fr - true - true - pop3 - smtp - me - - - - myimapclass - imaphost - imapport - imapuser - - - me@provider.com,me@company.com - me@provider.com,me@company.com - me@provider.com,me@company.com - mysubject - - - - - diff --git a/jonas/modules/services/jonas-mail/core/src/main/resources/META-INF/jonas-mail-core.bnd b/jonas/modules/services/jonas-mail/core/src/main/resources/META-INF/jonas-mail-core.bnd deleted file mode 100644 index aa2008059c..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/resources/META-INF/jonas-mail-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export factories for JavaMailSession and JavaMailMimePartDS -Export-Package org.ow2.jonas.mail.internal.factory - -# Exclude exported packages from the private packages -Private-Package !org.ow2.jonas.mail.internal.factory,\ - org.ow2.jonas.mail.internal.* - diff --git a/jonas/modules/services/jonas-mail/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-mail/core/src/main/resources/metadata.xml deleted file mode 100644 index 0fe57f2123..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/core/src/main/resources/org/ow2/jonas/mail/internal/mbeans-descriptors.xml b/jonas/modules/services/jonas-mail/core/src/main/resources/org/ow2/jonas/mail/internal/mbeans-descriptors.xml deleted file mode 100644 index 26b7f03689..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/resources/org/ow2/jonas/mail/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/core/src/main/templates/jonas-mail.properties.template b/jonas/modules/services/jonas-mail/core/src/main/templates/jonas-mail.properties.template deleted file mode 100644 index 9a488f0ccd..0000000000 --- a/jonas/modules/services/jonas-mail/core/src/main/templates/jonas-mail.properties.template +++ /dev/null @@ -1,13 +0,0 @@ -# -###################### JOnAS Mail service configuration -# -jonas.services mail -# Set the name of the implementation class of the mail service -jonas.service.mail.class org.ow2.jonas.mail.internal.JOnASMailService - -# Set the jonas mail factories. -# This key is set with a coma-separated list of MailFactory properties -# file names (without the '.properties' suffix). -# Ex: MailSession1,MailMimePartDS1 (while the properties file names are -# MailSession1.properties and MailMimePartDS1.properties) -jonas.service.mail.factories \ No newline at end of file diff --git a/jonas/modules/services/jonas-mail/pom.xml b/jonas/modules/services/jonas-mail/pom.xml deleted file mode 100644 index 92635dcb01..0000000000 --- a/jonas/modules/services/jonas-mail/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-mail - pom - JOnAS :: Services :: Mail - - core - ant - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/api/pom.xml b/jonas/modules/services/jonas-report/api/pom.xml deleted file mode 100644 index a6b48cc4d5..0000000000 --- a/jonas/modules/services/jonas-report/api/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - jonas-report - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-api - bundle - JOnAS :: Services :: JOnAS report :: Api - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.generated - true - true - true - false - true - true - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReport.java b/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReport.java deleted file mode 100644 index b8ccf213b9..0000000000 --- a/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReport.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.api; - -import org.ow2.jonas.service.Service; - -/** - * JOnAS report interface - * @author Jeremy Cazaux - */ -public interface IReport extends Service { - - /** - * The namespace - */ - static final String NAMESPACE = "http://jonas.ow2.org/report/1.0"; - - /** - * Path to the XSD - */ - static final String XSD_PATH = "xsd/jonas-report.xsd"; - - /** - * Directory name of the reports directory - */ - static final String REPORTS_DIRNAME = "reports"; - - /** - * Generate a JOnAS report - * @return the path to the JOnAS report - */ - String generateReport(); -} diff --git a/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReportExtension.java b/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReportExtension.java deleted file mode 100644 index 17943eff2c..0000000000 --- a/jonas/modules/services/jonas-report/api/src/main/java/org/ow2/jonas/report/api/IReportExtension.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.api; - -import javax.xml.transform.Source; - -/** - * Represents a report extension - * @author Jeremy Cazaux - */ -public interface IReportExtension { - - /** - * @return an {@link Object} which represents a report extension - */ - Object generateReport(); - - /** - * @return the XSD of the extension - */ - Source getXsd(); - - /** - * @return the JAXB Root class of the extension - */ - Class getRootClass(); -} diff --git a/jonas/modules/services/jonas-report/api/src/main/resources/META-INF/jonas-report-api.bnd b/jonas/modules/services/jonas-report/api/src/main/resources/META-INF/jonas-report-api.bnd deleted file mode 100644 index 13fd92a11e..0000000000 --- a/jonas/modules/services/jonas-report/api/src/main/resources/META-INF/jonas-report-api.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package org.ow2.jonas.report.api, \ - org.ow2.jonas.report.generated - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/api/src/main/resources/xsd/jonas-report.xsd b/jonas/modules/services/jonas-report/api/src/main/resources/xsd/jonas-report.xsd deleted file mode 100644 index cda0bf0e32..0000000000 --- a/jonas/modules/services/jonas-report/api/src/main/resources/xsd/jonas-report.xsd +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - The <report element is the root element. - - Example: - <report xmlns="http://jonas.ow2.org/agent-1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://jonas.ow2.org/agent-1.0"> - ... - </report> - - - - - - - - - - - - - - The <events type defines events of the server. - - Example: - <event type="info" timestamp="2012-04-06-164855"> - J2EEServer.__info : JOnAS AS v5.3.0-M7-SNAPSHOT named 'jonas' RUNNING - <event> - <event type="exception" timestamp="2012-04-06-164859 - javax.management.MBeanRegistrationException: Exception thrown in preDeregister method - at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.preDeregisterInvoke(DefaultMBeanServerInterceptor.java:1058) - at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:421) - at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:403) - at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:506) - at org.ow2.jonas.services.bootstrap.PlatformMBeanServerDelegate.__unregisterMBean(PlatformMBeanServerDelegate.java:110) - at org.ow2.jonas.services.bootstrap.PlatformMBeanServerDelegate.unregisterMBean(PlatformMBeanServerDelegate.java) - at org.ow2.jonas.jmx.internal.JOnASJMXService$3.execute(JOnASJMXService.java:445) - at org.ow2.jonas.jmx.internal.JOnASJMXService$3.execute(JOnASJMXService.java:443) - at org.ow2.jonas.lib.execution.RunnableHelper.execute(RunnableHelper.java:60) - at org.ow2.jonas.jmx.internal.JOnASJMXService.__doStop(JOnASJMXService.java:454) - at org.ow2.jonas.jmx.internal.JOnASJMXService.doStop(JOnASJMXService.java) - <event> - - - - - - - - - - - - - The <event type defines an event of the server. - - Example: - <event type="error" timestamp="2012-04-06-164333"> - J2EEServer.__info : JOnAS AS v5.3.0-M7-SNAPSHOT named 'jonas' STARTING - <event> - - - - - - - - - - - - - - - - - - - - - - - - - - - The <info type defines JOnAS informations - - - - - - - - - - - - Is composed of a datetime its timestamp. - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/core/pom.xml b/jonas/modules/services/jonas-report/core/pom.xml deleted file mode 100644 index 99c8a54bea..0000000000 --- a/jonas/modules/services/jonas-report/core/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - jonas-report - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-core - bundle - JOnAS :: Services :: JOnAS report :: Core - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - log-provider-core - ${project.version} - - - commons-modeler - commons-modeler - 2.0.1 - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - org.ow2.bundles - ow2-util-ee-deploy-api - provided - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - org.ow2.jonas - event-provider-api - ${project.version} - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/Report.java b/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/Report.java deleted file mode 100644 index 1603efb186..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/Report.java +++ /dev/null @@ -1,328 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.service.report.internal; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.event.provider.api.Event; -import org.ow2.jonas.event.provider.api.EventLevel; -import org.ow2.jonas.event.provider.api.IEventProvider; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.report.api.IReport; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.generated.DateTimeType; -import org.ow2.jonas.report.generated.EventType; -import org.ow2.jonas.report.generated.EventsType; -import org.ow2.jonas.report.generated.InfoType; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.service.report.util.Utility; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.xml.sax.SAXException; - -import javax.management.ObjectName; -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.PropertyException; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.File; -import java.io.InputStream; -import java.math.BigInteger; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Represents a JOnAS report - * @author Jeremy Cazaux - */ -public class Report extends AbsServiceImpl implements IReport, ReportMBean { - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * {@link ObjectName} of the JOnAS report service - */ - private ObjectName objectName; - - /** - * The {@link IEventProvider} - */ - private IEventProvider eventProvider; - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(Report.class); - - /** - * JOnAS Base directory - */ - public static final File JONAS_BASE_DIR = new File(System.getProperty("jonas.base")); - - /** - * JOnAS report directory - */ - public static final File JONAS_REPORTS_DIR = new File(JONAS_BASE_DIR, REPORTS_DIRNAME); - - /** - * Dash - */ - public static final String DASH = "-"; - - /** - * Map between a {@link IReportExtension} and its associated namespace - */ - private Map reportExtensions; - - /** - * Default constructor - */ - public Report(final BundleContext bundleContext) { - this.reportExtensions = new HashMap(); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doStart() throws ServiceException { - - // Load the Descriptors - this.jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - //create a new ObjectName associate to the Model MBean - this.objectName = Util.getObjectName(this.jmxService.getDomainName() + ":type=service,name=report"); - - //register the MBean - if (this.objectName != null) { - try { - this.jmxService.registerModelMBean(this, this.objectName); - } catch (Exception e) { - logger.error("Could not register JOnAS report model MBean.", e); - } - } - } - - /** - * {@inheritDoc} - */ - @Override - protected void doStop() throws ServiceException { - //generate report & unregister the Model MBean - generateReport(); - - if (this.jmxService != null) { - //unregister Model MBeans - this.jmxService.unregisterModelMBean(this.objectName); - } - } - - /** - * {@inheritDoc} - */ - public String generateReport() { - //create reports directory if !exist - if (!JONAS_REPORTS_DIR.exists()) { - JONAS_REPORTS_DIR.mkdirs(); - } - - //create the report with a timestamp - Date date = new Date(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss.SSSZ"); - String timestamp = simpleDateFormat.format(date); - File logFile = new File(JONAS_REPORTS_DIR, "report" + DASH + timestamp + ".log"); - - EventsType eventsType = new EventsType(); - List eventTypeList = eventsType.getEvent(); - - //generate the report - if (this.eventProvider != null) { - List eventLevels = new ArrayList(); - eventLevels.add(EventLevel.INFO); - eventLevels.add(EventLevel.EXCEPTION); - eventLevels.add(EventLevel.SEVERE); - eventLevels.add(EventLevel.WARNING); - List events = this.eventProvider.getEvents(eventLevels); - if (events != null) { - for (Event event: events) { - EventType eventType = new EventType(); - eventType.setType(event.getType()); - eventType.setValue(event.getValue()); - eventType.setTimestamp(event.getTimestamp()); - eventType.setSource(event.getSource()); - eventTypeList.add(eventType); - } - } - } - - InfoType info = new InfoType(); - - //set the current time - DateTimeType currentTime = new DateTimeType(); - currentTime.setDateTime(Utility.date2XMLGregorianCalendar(date)); - currentTime.setTimestamp(BigInteger.valueOf(date.getTime())); - info.setCurrentTime(currentTime); - - //list of java classes to be recognized by the new {@link JAXBContext}. - List classes = new ArrayList(); - classes.add(org.ow2.jonas.report.generated.Report.class); - - //set reports extensions - for (IReportExtension reportExtension: this.reportExtensions.keySet()) { - Object report = reportExtension.generateReport(); - if (report != null) { - info.getAny().add(report); - Class clazz = reportExtension.getRootClass(); - if (clazz != null) { - classes.add(clazz); - } - } - } - - org.ow2.jonas.report.generated.Report report = new org.ow2.jonas.report.generated.Report(); - report.setInfo(info); - report.setEvents(eventsType); - - String rootClass = org.ow2.jonas.report.generated.Report.class.getPackage().getName(); - - // marshall report - JAXBContext jaxbContext = null; - try { - jaxbContext = JAXBContext.newInstance(classes.toArray(new Class[classes.size()])); - } catch (JAXBException e) { - logger.error("Cannot create a new instance of JAXBContext object with rootClass " + rootClass, e); - } - - if (jaxbContext != null) { - Marshaller marshaller = null; - try { - marshaller = jaxbContext.createMarshaller(); - } catch (JAXBException e) { - logger.error("Cannot create instanciate Marshaller from the JAXBContext " + jaxbContext, e); - } - - if (marshaller != null) { - List sources = new ArrayList(); - InputStream xsd = org.ow2.jonas.report.generated.Report.class.getClassLoader().getResourceAsStream(XSD_PATH); - Source streamSource = null; - if (xsd != null) { - streamSource = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - sources.add(streamSource); - for (IReportExtension reportExtension: this.reportExtensions.keySet()) { - Source source = reportExtension.getXsd(); - if (source != null) { - sources.add(source); - } else { - logger.error("Cannot get XSD source of extension " + reportExtension.getClass().getName()); - } - } - - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = null; - if (streamSource != null) { - try { - schema = schemaFactory.newSchema(sources.toArray(new Source[sources.size()])); - } catch (SAXException e) { - logger.error("Cannot create a new instance of Schema object with the given XSD " + XSD_PATH, e); - } - marshaller.setSchema(schema); - } - - try { - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); - } catch (PropertyException e) { - logger.error("Cannot set property " + Marshaller.JAXB_FORMATTED_OUTPUT + " to " + Boolean.TRUE, e); - } - - try { - marshaller.marshal(report, logFile); - } catch (JAXBException e) { - logger.error("Cannot marshall the JOnAS report", e); - } - } - } - - return logFile.getAbsolutePath(); - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - //this.jmxService = null; - } - - /** - * @param eventProvider The {@link IEventProvider} to bind - */ - public void bindEventProvider(final IEventProvider eventProvider) { - this.eventProvider = eventProvider; - } - - /** - * @param reportExtension The {@link IReportExtension} to bind - * @param serviceReference The associated {@link ServiceReference} - */ - public void bindReportExtension(final IReportExtension reportExtension, final ServiceReference serviceReference) { - if (reportExtension != null) { - String namespace = null; - Object object = serviceReference.getProperty("namespace"); - if (object != null) { - namespace = String.valueOf(object); - } - this.reportExtensions.put(reportExtension, namespace); - } - } - - /** - * @param reportExtension The {@link IReportExtension to unbind} - */ - public void unbindReportExtension(final IReportExtension reportExtension) { - this.reportExtensions.remove(reportExtension); - } -} diff --git a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/ReportMBean.java b/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/ReportMBean.java deleted file mode 100644 index a7057d501e..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/internal/ReportMBean.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.service.report.internal; - -/** - * Report MBean interface - * @author Jeremy Cazaux - */ -public interface ReportMBean { - - /** - * Generate a JOnAS report - * @return the path to the JOnAS report - */ - String generateReport(); - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/util/Utility.java b/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/util/Utility.java deleted file mode 100644 index 2f6f511c15..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/java/org/ow2/jonas/service/report/util/Utility.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.service.report.util; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.Date; -import java.util.GregorianCalendar; - -/** - * Utility class - */ -public class Utility { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(Utility.class); - - /** - * @param date A {@link java.util.Date} - * @return the associated {@link java.util.GregorianCalendar} - */ - public static XMLGregorianCalendar date2XMLGregorianCalendar(final Date date) { - DatatypeFactory dateTypeFactory = null; - try { - dateTypeFactory = DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException e) { - logger.error("Cannot get a new instance of DatatypeFactory", e); - } - - if (date != null) { - GregorianCalendar gregorianCalendar = new GregorianCalendar(); - gregorianCalendar.setTime(date); - return dateTypeFactory.newXMLGregorianCalendar(gregorianCalendar); - } else { - return null; - } - } -} diff --git a/jonas/modules/services/jonas-report/core/src/main/resources/META-INF/jonas-report-core.bnd b/jonas/modules/services/jonas-report/core/src/main/resources/META-INF/jonas-report-core.bnd deleted file mode 100644 index 87412c3217..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/resources/META-INF/jonas-report-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package org.ow2.jonas.service.report.util - -Private-Package org.ow2.jonas.service.report.internal - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/core/src/main/resources/metadata.xml deleted file mode 100644 index 66076d9c5f..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/core/src/main/resources/org/ow2/jonas/service/report/internal/mbeans-descriptors.xml b/jonas/modules/services/jonas-report/core/src/main/resources/org/ow2/jonas/service/report/internal/mbeans-descriptors.xml deleted file mode 100644 index ce253db1fc..0000000000 --- a/jonas/modules/services/jonas-report/core/src/main/resources/org/ow2/jonas/service/report/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/bundles/pom.xml b/jonas/modules/services/jonas-report/extensions/bundles/pom.xml deleted file mode 100644 index caccc4a99a..0000000000 --- a/jonas/modules/services/jonas-report/extensions/bundles/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-bundles - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: Bundles - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.apache.felix - org.apache.felix.ipojo - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.bundles.generated - true - true - true - false - true - true - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/bundles/src/main/java/org/ow2/jonas/report/extensions/bundles/internal/BundlesReportExtension.java b/jonas/modules/services/jonas-report/extensions/bundles/src/main/java/org/ow2/jonas/report/extensions/bundles/internal/BundlesReportExtension.java deleted file mode 100644 index 3c6446e45b..0000000000 --- a/jonas/modules/services/jonas-report/extensions/bundles/src/main/java/org/ow2/jonas/report/extensions/bundles/internal/BundlesReportExtension.java +++ /dev/null @@ -1,230 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.bundles.internal; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleEvent; -import org.osgi.framework.BundleListener; -import org.osgi.framework.FrameworkEvent; -import org.osgi.framework.FrameworkListener; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.bundles.generated.BundleType; -import org.ow2.jonas.report.extensions.bundles.generated.Bundles; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents a bundles report extension - * @author Jeremy Cazaux - */ -public class BundlesReportExtension implements IReportExtension, FrameworkListener, BundleListener { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(BundlesReportExtension.class); - - /** - * EOL * - */ - public static final String EOL = "\n"; - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/bundles-report.xsd"; - - /** - * List of {@link BundleType} - */ - private List bundles; - - /** - * The {@link BundleContext} - */ - private BundleContext bundleContext; - - /** - * Default constructor - */ - public BundlesReportExtension(final BundleContext bundleContext) { - this.bundles = new ArrayList(); - this.bundleContext = bundleContext; - } - - /** - * Validate callback - */ - public void start() { - this.bundleContext.addBundleListener(this); - this.bundleContext.addFrameworkListener(this); - } - - /** - * Invalidate callback - */ - public void stop() { - this.bundleContext.removeBundleListener(this); - this.bundleContext.removeFrameworkListener(this); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - Bundles bundles = new Bundles(); - List bundleTypeList = bundles.getBundle(); - bundleTypeList.addAll(this.bundles); - return bundles; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return Bundles.class; - } - - /** - * {@inheritDoc} - */ - public void frameworkEvent(final FrameworkEvent frameworkEvent) { - //get the stack trace of the throwable - Throwable throwable = frameworkEvent.getThrowable(); - if (throwable != null) { - StringBuilder stackTrace = new StringBuilder(); - getStackTrace(stackTrace, throwable, true); - BundleType bundleType = getBundle(frameworkEvent.getBundle().getBundleId()); - if (bundleType != null) { - bundleType.getError().add(stackTrace.toString()); - } - } - } - - /** - * {@inheritDoc} - */ - public void bundleChanged(final BundleEvent bundleEvent) { - if (bundleEvent != null) { - Bundle bundle = bundleEvent.getBundle(); - if (bundle != null) { - long bundleId = bundle.getBundleId(); - BundleType bundleType = getBundle(bundleId); - if (bundleType == null) { - bundleType = new BundleType(); - bundleType.setId(bundleId); - bundleType.setSymbolicName(bundle.getSymbolicName()); - bundleType.setVersion(bundle.getVersion().toString()); - bundleType.setLocation(bundle.getLocation()); - this.bundles.add(bundleType); - } - - int state = bundle.getState(); - switch (state) { - case Bundle.UNINSTALLED: - bundleType.setState("Uninstalled"); - break; - case Bundle.INSTALLED: - bundleType.setState("Installed"); - break; - case Bundle.RESOLVED: - bundleType.setState("Resolved"); - break; - case Bundle.STARTING: - bundleType.setState("Starting"); - break; - case Bundle.STOPPING: - bundleType.setState("Stopping"); - break; - case Bundle.ACTIVE: - bundleType.setState("Active"); - break; - } - } - } - } - - /** - * @param id The id of a bundle to retrieve - * @return the {@link BundleType} - */ - private BundleType getBundle(long id) { - for (BundleType bundle: this.bundles) { - if (bundle.getId() == id) { - return bundle; - } - } - return null; - } - - /** - * - * @param stringBuilder The {@link StringBuilder} to store the stacktrace - * @param throwable The {@link Throwable} - * @param isRootThrowable True if this is the root throwable - */ - private void getStackTrace(final StringBuilder stringBuilder, final Throwable throwable, - final boolean isRootThrowable) { - if (throwable != null) { - if (isRootThrowable) { - stringBuilder.append(throwable.getClass().getName()); - } else { - stringBuilder.append("Caused by : " + throwable.getClass().getName()); - } - String message = throwable.getMessage(); - if (message != null) { - stringBuilder.append(" : " + throwable.getMessage()); - } - stringBuilder.append(EOL); - for (StackTraceElement stackTraceElement: throwable.getStackTrace()) { - stringBuilder.append(" at " + stackTraceElement + EOL); - } - Throwable cause = throwable.getCause(); - if (cause != null) { - getStackTrace(stringBuilder, throwable.getCause(), false); - } - } - } -} diff --git a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/META-INF/jonas-report-extension-bundles.bnd b/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/META-INF/jonas-report-extension-bundles.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/META-INF/jonas-report-extension-bundles.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/metadata.xml deleted file mode 100644 index 8949a22deb..0000000000 --- a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/metadata.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/xsd/bundles-report.xsd b/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/xsd/bundles-report.xsd deleted file mode 100644 index 1c24499176..0000000000 --- a/jonas/modules/services/jonas-report/extensions/bundles/src/main/resources/xsd/bundles-report.xsd +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - The <bundles element is the root element. - - - - - - - - - - - - - The <bundle defines an bundle... - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployables/pom.xml b/jonas/modules/services/jonas-report/extensions/deployables/pom.xml deleted file mode 100644 index f8b245b098..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployables/pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-deployables - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: Deployables - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.deployable.generated - true - true - true - false - true - true - - -Xannotate - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.6.0 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 0.6.0 - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployables/src/main/java/org/ow2/jonas/report/extensions/deployables/internal/DeployablesReportExtension.java b/jonas/modules/services/jonas-report/extensions/deployables/src/main/java/org/ow2/jonas/report/extensions/deployables/internal/DeployablesReportExtension.java deleted file mode 100644 index a4c7ca0ffb..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployables/src/main/java/org/ow2/jonas/report/extensions/deployables/internal/DeployablesReportExtension.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.deployables.internal; - -import org.osgi.service.event.Event; -import org.ow2.jonas.management.DeployableState; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.deployable.generated.DeployableType; -import org.ow2.jonas.report.extensions.deployable.generated.Deployables; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Represents a Deployable report extension - * @author Jeremy Cazaux - */ -public class DeployablesReportExtension implements IReportExtension { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(DeployablesReportExtension.class); - - /** - * Deployable topic - */ - public static final String DEPLOYABLE_TOPIC = "deployablePublisherTopic"; - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/deployable-report.xsd"; - - /** - * List of {@link DeployableType} - */ - private List deployableTypeList; - - /** - * Map between a deployable and a time (used to get the start time and end time of deployment and undeployment operation) - */ - private Map deployableMap; - - /** - * Default constructor - */ - public DeployablesReportExtension() { - this.deployableTypeList = new ArrayList(); - this.deployableMap = new HashMap(); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - Deployables deployablesType = new Deployables(); - deployablesType.getDeployable().addAll(this.deployableTypeList); - return deployablesType; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return Deployables.class; - } - - /** - * Handle deployables notification - */ - public void handleDeployable(final Event event) { - boolean postDeployedOperation = false; - boolean postUndeployedOperation = false; - - if (DEPLOYABLE_TOPIC.equals(event.getTopic())) { - String name = String.class.cast(event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_NAME_KEY)); - DeployableType deployableType = getDeployable(name); - if (deployableType == null) { - //create a new deployable item - deployableType = new DeployableType(); - - Object object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_NAME_KEY); - if (object != null) { - deployableType.setName(String.class.cast(object)); - } - object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_PATH_KEY); - if (object != null) { - deployableType.setPath(String.class.cast(object)); - } - object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_STATE_KEY); - if (object != null) { - DeployableState deployableState = DeployableState.class.cast(object); - deployableType.setState(deployableState.toString()); - } - object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_SOURCE_KEY); - if (object != null) { - deployableType.setSource(String.valueOf(object)); - } - - this.deployableTypeList.add(deployableType); - } else { - //update the state of the deployable - Object object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_STATE_KEY); - if (object != null) { - DeployableState deployableState = DeployableState.class.cast(object); - String curentState = deployableState.toString(); - String state = deployableType.getState(); - - if (!curentState.equals(state)) { - - //notification has been sent from a post deploy callback - if (DeployableState.DEPLOYED.toString().equals(curentState)) { - postDeployedOperation = true; - } else { - //notification has been sent from a post undeploy callback - postUndeployedOperation = true; - } - } - - deployableType.setState(deployableState.toString()); - } - } - - Object object = event.getProperty(J2EEServerService.EVENT_DEPLOYABLE_CURRENT_TIME); - if (object != null) { - Long currentTime = Long.class.cast(object); - Long time = this.deployableMap.get(deployableType); - if (time != null) { - if (postDeployedOperation) { - Long startTime = currentTime - time; - deployableType.setStartTime(startTime); - postDeployedOperation = false; - } else if (postUndeployedOperation) { - Long shutdownTime = currentTime - time; - deployableType.setShutdownTime(shutdownTime); - postUndeployedOperation = false; - } - } - this.deployableMap.put(deployableType, currentTime); - } - } - } - - /** - * @param name The name of a deployable to retrieve - * @return the associated {@link DeployableType} if found. Otherwise, return null. - */ - private DeployableType getDeployable(final String name) { - for (DeployableType deployableType: this.deployableTypeList) { - String deployableName = deployableType.getName(); - if (deployableName != null && deployableName.equals(name)) { - return deployableType; - } - } - return null; - } -} diff --git a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/META-INF/jonas-report-extension-deployables.bnd b/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/META-INF/jonas-report-extension-deployables.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/META-INF/jonas-report-extension-deployables.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/metadata.xml deleted file mode 100644 index 17632a1e00..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/metadata.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/xsd/deployable-report.xsd b/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/xsd/deployable-report.xsd deleted file mode 100644 index 14edff6fd0..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployables/src/main/resources/xsd/deployable-report.xsd +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - The <deployables element is the root element. - - - - - - - - - - - - - - - The <deployable type defines a deployable. - - Example: - <deployable name="smartclient.xml" - state="deployed"/> - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployers/pom.xml b/jonas/modules/services/jonas-report/extensions/deployers/pom.xml deleted file mode 100644 index 3bb36b2bbd..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployers/pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-deployers - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: Deployers - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.deployers.generated - true - true - true - false - true - true - - -Xannotate - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.6.0 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 0.6.0 - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployers/src/main/java/org/ow2/jonas/report/extensions/deployers/internal/DeployersReportExtension.java b/jonas/modules/services/jonas-report/extensions/deployers/src/main/java/org/ow2/jonas/report/extensions/deployers/internal/DeployersReportExtension.java deleted file mode 100644 index ce79916b65..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployers/src/main/java/org/ow2/jonas/report/extensions/deployers/internal/DeployersReportExtension.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.deployers.internal; - -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.deployers.generated.Deployers; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.List; - -/** - * Represents a deployer report extension - * @author Jeremy Cazaux - */ -public class DeployersReportExtension implements IReportExtension { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(DeployersReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/deployers-report.xsd"; - - /** - * The {@link org.ow2.util.ee.deploy.api.deployer.IDeployerManager} - */ - private IDeployerManager deployerManager; - - /** - * {@inheritDoc} - */ - public Object generateReport() { - Deployers deployers = new Deployers(); - List deployersList = deployers.getDeployer(); - for (String className: this.deployerManager.getDeployerClasses()) { - deployersList.add(className); - } - return deployers; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return Deployers.class; - } - - /** - * @param deployerManager The {@link IDeployerManager} to bind - */ - public void bindDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * @param deployerManager The {@link IDeployerManager} to unbind - */ - public void unbindDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = null; - } -} diff --git a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/META-INF/jonas-report-extension-deployers.bnd b/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/META-INF/jonas-report-extension-deployers.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/META-INF/jonas-report-extension-deployers.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/metadata.xml deleted file mode 100644 index fb1b7da8bc..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/metadata.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/xsd/deployers-report.xsd b/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/xsd/deployers-report.xsd deleted file mode 100644 index ef1ee1ce85..0000000000 --- a/jonas/modules/services/jonas-report/extensions/deployers/src/main/resources/xsd/deployers-report.xsd +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - The <deployer element is the root element. - - Example: - <deployers> - <deployer>AddonDeployerImpl.java<deployer> - <deployers> - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/endpoints/pom.xml b/jonas/modules/services/jonas-report/extensions/endpoints/pom.xml deleted file mode 100644 index a0ac720df8..0000000000 --- a/jonas/modules/services/jonas-report/extensions/endpoints/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-endpoints - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: Endpoints - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.endpoints.generated - true - true - true - false - true - true - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/java/org/ow2/jonas/report/extensions/endpoints/internal/EndpointsReportExtension.java b/jonas/modules/services/jonas-report/extensions/endpoints/src/main/java/org/ow2/jonas/report/extensions/endpoints/internal/EndpointsReportExtension.java deleted file mode 100644 index 3c498c98fe..0000000000 --- a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/java/org/ow2/jonas/report/extensions/endpoints/internal/EndpointsReportExtension.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.endpoints.internal; - -import org.ow2.jonas.endpoint.collector.IEndpoint; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.endpoints.generated.EndpointType; -import org.ow2.jonas.report.extensions.endpoints.generated.Endpoints; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents an Endpoint report extension - * @author Jeremy Cazaux - */ -public class EndpointsReportExtension implements IReportExtension { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(EndpointsReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/endpoints-report.xsd"; - - /** - * List of {@link IEndpoint} - */ - private List endpoints; - - /** - * Default constructor - */ - public EndpointsReportExtension() { - this.endpoints = new ArrayList(); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - Endpoints endpoints = new Endpoints(); - List endpointTypeList = endpoints.getEndpoint(); - - for (IEndpoint endpoint: this.endpoints) { - EndpointType endpointType = new EndpointType(); - endpointType.setHost(endpoint.getHost()); - endpointType.setProtocol(endpoint.getProtocol()); - endpointType.setUrl(endpoint.getUrl()); - endpointType.setSource(endpoint.getSource()); - endpointType.setPort(endpoint.getPort()); - endpointTypeList.add(endpointType); - } - - return endpoints; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return Endpoints.class; - } - - /** - * @param endpoint The {@link IEndpoint} to bind - */ - public void bindEndpoint(final IEndpoint endpoint) { - if (!this.endpoints.contains(endpoint)) { - this.endpoints.add(endpoint); - } - } - - /** - * @param endpoint The {@link IEndpoint to bind} - */ - public void unbindEndpoint(final IEndpoint endpoint) { - //this.endpoints.remove(endpoint); - } -} diff --git a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/META-INF/jonas-report-extension-endpoints.bnd b/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/META-INF/jonas-report-extension-endpoints.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/META-INF/jonas-report-extension-endpoints.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/metadata.xml deleted file mode 100644 index f05800d360..0000000000 --- a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/metadata.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/xsd/endpoints-report.xsd b/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/xsd/endpoints-report.xsd deleted file mode 100644 index 9e3ae8de20..0000000000 --- a/jonas/modules/services/jonas-report/extensions/endpoints/src/main/resources/xsd/endpoints-report.xsd +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - The <endpoint element is the root element. - - - - - - The <endpoints type defines endpoints. - - - - - - - - - - - The <endpoint type defines an endpoint. - - Example: - <endpoint protocol="jrmp" - host="localhost" - port="2099" - url="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jrmpconnector_jonas"/> - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-factories/pom.xml b/jonas/modules/services/jonas-report/extensions/ipojo-factories/pom.xml deleted file mode 100644 index 9fc7c215e9..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-factories/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-ipojo-factories - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: iPOJO factories - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.apache.felix - org.apache.felix.ipojo - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.ipojo.factories.generated - true - true - true - false - true - true - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/java/org/ow2/jonas/report/extensions/ipojo/factories/internal/IpojoFactoriesReportExtension.java b/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/java/org/ow2/jonas/report/extensions/ipojo/factories/internal/IpojoFactoriesReportExtension.java deleted file mode 100644 index f3ee59d066..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/java/org/ow2/jonas/report/extensions/ipojo/factories/internal/IpojoFactoriesReportExtension.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.ipojo.factories.internal; - -import org.apache.felix.ipojo.Factory; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.ipojo.factories.generated.IpojoFactories; -import org.ow2.jonas.report.extensions.ipojo.factories.generated.IpojoFactoryType; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents an iPOJO factories extension - * @author Jeremy Cazaux - */ -public class IpojoFactoriesReportExtension implements IReportExtension { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(IpojoFactoriesReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/ipojo-factories-report.xsd"; - - /** - * List of {@link Factory} - */ - private List factories; - - /** - * Default constructor - */ - public IpojoFactoriesReportExtension() { - this.factories = new ArrayList(); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - IpojoFactories ipojoFactories = new IpojoFactories(); - List factoryTypeList = ipojoFactories.getIpojoFactory(); - for (Factory factory: this.factories) { - IpojoFactoryType factoryType = new IpojoFactoryType(); - factoryType.setName(factory.getName()); - factoryType.setBundleId(factory.getBundleContext().getBundle().getBundleId()); - int state = factory.getState(); - if (Factory.VALID == state) { - factoryType.setState("VALID"); - } else { - factoryType.setState("INVALID"); - factoryType.setArch(factory.getDescription().toString()); - } - factoryTypeList.add(factoryType); - } - return ipojoFactories; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return IpojoFactories.class; - } - - /** - * @param factory The {@link Factory} to bind - */ - public void bindFactory(final Factory factory) { - this.factories.add(factory); - } - - /** - * @param factory The {@link Factory} to bind - */ - public void unbindFactory(final Factory factory) { - this.factories.remove(factory); - } -} diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/META-INF/jonas-report-extension-ipojo-factories.bnd b/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/META-INF/jonas-report-extension-ipojo-factories.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/META-INF/jonas-report-extension-ipojo-factories.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/metadata.xml deleted file mode 100644 index af8e0bd549..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/metadata.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/xsd/ipojo-factories-report.xsd b/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/xsd/ipojo-factories-report.xsd deleted file mode 100644 index 1af08f74d9..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-factories/src/main/resources/xsd/ipojo-factories-report.xsd +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - The <ipojo-factories element is the root element. - - - - - - The <ipojo-factories type defines iPOJO factories. - - - - - - - - - - - The <ipojo-factory defines an iPOJO factory. - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/pom.xml b/jonas/modules/services/jonas-report/extensions/ipojo-handlers/pom.xml deleted file mode 100644 index 0d00117482..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-ipojo-handlers - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: iPOJO handlers - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.apache.felix - org.apache.felix.ipojo - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.ipojo.handlers.generated - true - true - true - false - true - true - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/java/org/ow2/jonas/report/extensions/ipojo/handlers/internal/IpojoHandlersReportExtension.java b/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/java/org/ow2/jonas/report/extensions/ipojo/handlers/internal/IpojoHandlersReportExtension.java deleted file mode 100644 index c234600dfe..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/java/org/ow2/jonas/report/extensions/ipojo/handlers/internal/IpojoHandlersReportExtension.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.ipojo.handlers.internal; - -import org.apache.felix.ipojo.Factory; -import org.apache.felix.ipojo.HandlerFactory; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.ipojo.handlers.generated.IpojoHandlerType; -import org.ow2.jonas.report.extensions.ipojo.handlers.generated.IpojoHandlers; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Represents an iPOJO handlers report extension - * @author Jeremy Cazaux - */ -public class IpojoHandlersReportExtension implements IReportExtension { - - /** - * The logger - */ - private Log logger = LogFactory.getLog(IpojoHandlersReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/ipojo-handlers-report.xsd"; - - /** - * List of {@link HandlerFactory} - */ - private List handlerFactories; - - /** - * Handler valide state token - */ - public static final String VALID_STATE = "VALID"; - - /** - * Handler invalid state token - */ - public static final String INVALID_STATE = "INVALID"; - - /** - * Default constructor - */ - public IpojoHandlersReportExtension() { - this.handlerFactories = new ArrayList(); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - IpojoHandlers ipojoHandlers = new IpojoHandlers(); - List handlers = ipojoHandlers.getIpojoHandler(); - for (HandlerFactory handlerFactory: this.handlerFactories) { - IpojoHandlerType handler = new IpojoHandlerType(); - handler.setName(handlerFactory.getName()); - handler.setBundleId(handlerFactory.getBundleContext().getBundle().getBundleId()); - - int state = handlerFactory.getState(); - if (Factory.VALID == state) { - handler.setState(VALID_STATE); - } else { - handler.setState(INVALID_STATE); - } - - handlers.add(handler); - } - return ipojoHandlers; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return IpojoHandlers.class; - } - - /** - * @param handlerFactory The {@link HandlerFactory} to bind - */ - public void bindHandlerFactory(final HandlerFactory handlerFactory) { - this.handlerFactories.add(handlerFactory); - } - - /** - * @param handlerFactory The {@link HandlerFactory} to unbind - */ - public void unbindHandlerFactory(final HandlerFactory handlerFactory) { - this.handlerFactories.remove(handlerFactory); - } -} diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/META-INF/jonas-report-extension-ipojo-handlers.bnd b/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/META-INF/jonas-report-extension-ipojo-handlers.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/META-INF/jonas-report-extension-ipojo-handlers.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/metadata.xml deleted file mode 100644 index 1fc1fedeb8..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/metadata.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/xsd/ipojo-handlers-report.xsd b/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/xsd/ipojo-handlers-report.xsd deleted file mode 100644 index 1e726e763c..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-handlers/src/main/resources/xsd/ipojo-handlers-report.xsd +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - The <ipojo-handlers element is the root element. - - - - - - The <ipojo-handlers type defines iPOJO handlers. - - - - - - - - - - - The <ipojo-handler defines an iPOJO handler. - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-instances/pom.xml b/jonas/modules/services/jonas-report/extensions/ipojo-instances/pom.xml deleted file mode 100644 index 692a9b0611..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-instances/pom.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-ipojo-instances - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: iPOJO instances - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.ow2.jonas - ipojo-interceptor - ${project.version} - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.ipojo.instances.generated - true - true - true - false - true - true - - -Xannotate - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.6.0 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 0.6.0 - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/java/org/ow2/jonas/report/extensions/ipojo/instances/internal/IpojoInstancesReportExtension.java b/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/java/org/ow2/jonas/report/extensions/ipojo/instances/internal/IpojoInstancesReportExtension.java deleted file mode 100644 index 74dd372a88..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/java/org/ow2/jonas/report/extensions/ipojo/instances/internal/IpojoInstancesReportExtension.java +++ /dev/null @@ -1,292 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.ipojo.instances.internal; - -import org.apache.felix.ipojo.architecture.HandlerDescription; -import org.apache.felix.ipojo.architecture.InstanceDescription; -import org.apache.felix.ipojo.metadata.Attribute; -import org.apache.felix.ipojo.metadata.Element; -import org.ow2.jonas.ipojo.interceptor.IInstanceProvider; -import org.ow2.jonas.ipojo.interceptor.ComponentInstanceState; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.DateTimeType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.IpojoInstanceType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.IpojoInstances; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.PropertyType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.ProvideType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.ProvidesType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.RequirementType; -import org.ow2.jonas.report.extensions.ipojo.instances.generated.RequirementsType; -import org.ow2.jonas.service.report.util.Utility; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -/** - * Represents an iPOJO instances report extension - * @author Jeremy Cazaux - */ -public class IpojoInstancesReportExtension implements IReportExtension { - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(IpojoInstancesReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/ipojo-instances-report.xsd"; - - /** - * Required handler name - */ - public static final String REQUIRED_HANDLER_NAME = "org.apache.felix.ipojo:requires"; - - /** - * Provides handler name - */ - public static final String PROVIDES_HANDLER_NAME = "org.apache.felix.ipojo:provides"; - - /** - * EOL - */ - public static final String EOL = "\n"; - - /** - * List of {@link org.ow2.jonas.ipojo.interceptor.IInstanceProvider} - */ - private List instanceProviders; - - /** - * Default constructor - */ - public IpojoInstancesReportExtension() { - this.instanceProviders = new ArrayList(); - } - - /** - * {@inheritDoc} - */ - public Object generateReport() { - IpojoInstances ipojoInstances = new IpojoInstances(); - List ipojoServiceTypeList = ipojoInstances.getIpojoInstance(); - for (IInstanceProvider instanceProvider : this.instanceProviders) { - IpojoInstanceType ipojoServiceType = new IpojoInstanceType(); - ipojoServiceType.setName(instanceProvider.getName()); - ipojoServiceType.setState(instanceProvider.getStateComponent().toString()); - - Date date = instanceProvider.getStartTime(); - if (date != null) { - DateTimeType startTime = new DateTimeType(); - startTime.setTimestamp(BigInteger.valueOf(date.getTime())); - startTime.setDateTime(Utility.date2XMLGregorianCalendar(date)); - ipojoServiceType.setStartTime(startTime); - } - - Long upTimeLong = instanceProvider.getUpTime(); - if (upTimeLong != null) { - date = new Date(upTimeLong); - if (date != null) { - DateTimeType upTime = new DateTimeType(); - upTime.setDateTime(Utility.date2XMLGregorianCalendar(date)); - upTime.setTimestamp(BigInteger.valueOf(date.getTime())); - ipojoServiceType.setUpTime(upTime); - } - } - - date = instanceProvider.getShutdownTime(); - if (date != null) { - DateTimeType shutdownTime = new DateTimeType(); - shutdownTime.setDateTime(Utility.date2XMLGregorianCalendar(date)); - shutdownTime.setTimestamp(BigInteger.valueOf(date.getTime())); - ipojoServiceType.setShutdownTime(shutdownTime); - } - - String source = instanceProvider.getSource(); - if (source != null) { - ipojoServiceType.setSource(source); - } - - ProvidesType providesType = new ProvidesType(); - List provides = providesType.getProvide(); - RequirementsType requirementsType = new RequirementsType(); - List requirements = requirementsType.getRequirement(); - - //update requirements and provides properties - boolean isInstanceValid = ComponentInstanceState.VALID.toString().equals(ipojoServiceType.getState()); - InstanceDescription instanceDescription = instanceProvider.getInstanceDescription(); - for (HandlerDescription handlerDescription: instanceDescription.getHandlers()) { - String handlerName = handlerDescription.getHandlerName(); - - if (!isInstanceValid && REQUIRED_HANDLER_NAME.equals(handlerName)) { - - RequirementType requirement = new RequirementType(); - - Element element = handlerDescription.getHandlerInfo(); - if (element != null) { - Element elements[] = element.getElements("requires"); - if (elements != null) { - Element requireElt = elements[0]; - Attribute[] attributes = requireElt.getAttributes(); - for (Attribute attribute: attributes) { - String name = attribute.getName(); - String value = attribute.getValue(); - - if ("id".equals(name)) { - requirement.setId(value); - } else if ("".equals(name)) { - requirement.setAggregate(value); - } else if ("instance.name".equals(name)) { - requirement.setInstanceName(value); - } else if ("optional".equals(name)) { - requirement.setOptional(value); - } else if ("specification".equals(name)) { - requirement.setSpecification(value); - } else if ("optional".equals(name)) { - requirement.setOptional(value); - } else if ("state".equals(name)) { - requirement.setState(value); - } else if ("nullable".equals(name)) { - requirement.setNullable(value); - } else if ("binding-policy".equals(name)) { - requirement.setBindingPolicy(value); - } else if ("proxy".equals(name)) { - requirement.setProxy(value); - } - } - - } - } - - requirements.add(requirement); - } else if (isInstanceValid && PROVIDES_HANDLER_NAME.equals(handlerName)) { - ProvideType provide = new ProvideType(); - - Element element = handlerDescription.getHandlerInfo(); - if (element != null) { - - Element elements[] = element.getElements("provides"); - if (elements != null) { - Element provideElt = elements[0]; - Attribute[] attributes = provideElt.getAttributes(); - for (Attribute attribute: attributes) { - String name = attribute.getName(); - String value = attribute.getValue(); - - if ("specifications".equals(name)) { - provide.setSpecifications(value); - } else if ("state".equals(name)) { - provide.setState(value); - } - } - - List properties = provide.getProperty(); - for (Element child: provideElt.getElements()) { - - if ("property".equals(child.getName())) { - PropertyType property = new PropertyType(); - property.setName(child.getAttribute("name")); - property.setValue(child.getAttribute("value")); - properties.add(property); - } - } - } - } - - provides.add(provide); - } - } - - //set the bundle id associated to the iPOJO instance - ipojoServiceType.setBundleId(instanceDescription.getBundleId()); - - //set the name of the iPOJO object - Element element = instanceDescription.getDescription(); - if (element != null) { - Element[] elements = element.getElements("object"); - if (elements != null && elements.length > 0) { - String objectName = elements[0].getAttribute("name"); - if (objectName != null) { - ipojoServiceType.setObjectName(objectName); - } - } - } - - //set provides properties if the instance is valid. Otherwise set requirements - if (isInstanceValid) { - ipojoServiceType.setProvides(providesType); - } else { - ipojoServiceType.setRequirements(requirementsType); - ipojoServiceType.setArch(EOL + instanceDescription.getDescription().toString() + EOL); - } - - ipojoServiceTypeList.add(ipojoServiceType); - } - - return ipojoInstances; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return IpojoInstances.class; - } - - /** - * @param instanceProvider The {@link org.ow2.jonas.ipojo.interceptor.IInstanceProvider} to bind - */ - public void bindServiceProvider(final IInstanceProvider instanceProvider) { - this.instanceProviders.add(instanceProvider); - } - - /** - * @param instanceProvider The {@link org.ow2.jonas.ipojo.interceptor.IInstanceProvider} to unbind - */ - public void unbindServiceProvider(final IInstanceProvider instanceProvider) { - this.instanceProviders.remove(instanceProvider); - } -} diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/META-INF/jonas-report-extension-ipojo-instances.bnd b/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/META-INF/jonas-report-extension-ipojo-instances.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/META-INF/jonas-report-extension-ipojo-instances.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/metadata.xml deleted file mode 100644 index 76b6444f2b..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/metadata.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/xsd/ipojo-instances-report.xsd b/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/xsd/ipojo-instances-report.xsd deleted file mode 100644 index 1588dc6daa..0000000000 --- a/jonas/modules/services/jonas-report/extensions/ipojo-instances/src/main/resources/xsd/ipojo-instances-report.xsd +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - The <report element is the root element. - - - - - - The <ipojo-instances type defines iPOJO instances. - - - - - - - - - - - The <ipojo-instance defines an iPOJO instance. - - Example: - <ipojo-instance state="VALID"<> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Is composed of a datetime its timestamp. - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/jvm/pom.xml b/jonas/modules/services/jonas-report/extensions/jvm/pom.xml deleted file mode 100644 index 1c1f9abef3..0000000000 --- a/jonas/modules/services/jonas-report/extensions/jvm/pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-jvm - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: JVM properties - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.jvm.generated - true - true - true - false - true - true - - -Xannotate - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.6.0 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 0.6.0 - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/jvm/src/main/java/org/ow2/jonas/report/extensions/jvm/internal/JvmReportExtension.java b/jonas/modules/services/jonas-report/extensions/jvm/src/main/java/org/ow2/jonas/report/extensions/jvm/internal/JvmReportExtension.java deleted file mode 100644 index e943519dbc..0000000000 --- a/jonas/modules/services/jonas-report/extensions/jvm/src/main/java/org/ow2/jonas/report/extensions/jvm/internal/JvmReportExtension.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.jvm.internal; - -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.jvm.generated.Jvm; -import org.ow2.jonas.report.extensions.jvm.generated.PropertyType; -import org.ow2.jonas.report.extensions.jvm.generated.SystemPropertiesType; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.util.List; -import java.util.Map; - -/** - * Represents a JVM report extension - * @author Jeremy Cazaux - */ -public class JvmReportExtension implements IReportExtension { - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/jvm-report.xsd"; - - /** - * The logger - */ - public static Log logger = LogFactory.getLog(JvmReportExtension.class); - - /** - * {@inheritDoc} - */ - public Object generateReport() { - SystemPropertiesType systemPropertiesType = new SystemPropertiesType(); - List properties = systemPropertiesType.getProperty(); - for (Map.Entry property: System.getProperties().entrySet()) { - PropertyType propertyType = new PropertyType(); - propertyType.setName(String.class.cast(property.getKey())); - propertyType.setValue(String.class.cast(property.getValue())); - properties.add(propertyType); - } - Jvm jvm = new Jvm(); - jvm.setSystemProperties(systemPropertiesType); - return jvm; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return Jvm.class; - } -} diff --git a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/META-INF/jonas-report-extension-jvm.bnd b/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/META-INF/jonas-report-extension-jvm.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/META-INF/jonas-report-extension-jvm.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/metadata.xml deleted file mode 100644 index fcc22a5949..0000000000 --- a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/metadata.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/xsd/jvm-report.xsd b/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/xsd/jvm-report.xsd deleted file mode 100644 index 5b55c7c894..0000000000 --- a/jonas/modules/services/jonas-report/extensions/jvm/src/main/resources/xsd/jvm-report.xsd +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - The <jvm element is the root element. - - - - - - The <jvm type defines JVM properties. - - - - - - - - - - - The <system-properties defines system properties. - - Example: - <system-properties> - ... - </system-properties> - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/pom.xml b/jonas/modules/services/jonas-report/extensions/pom.xml deleted file mode 100644 index 1363de51fb..0000000000 --- a/jonas/modules/services/jonas-report/extensions/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-report - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extensions - pom - JOnAS :: Services :: JOnAS report :: Extensions - - deployables - endpoints - deployers - ipojo-instances - server-info - jvm - ipojo-handlers - ipojo-factories - bundles - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/server-info/pom.xml b/jonas/modules/services/jonas-report/extensions/server-info/pom.xml deleted file mode 100644 index 6b155d2c20..0000000000 --- a/jonas/modules/services/jonas-report/extensions/server-info/pom.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - jonas-report-extensions - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report-extension-server-info - bundle - JOnAS :: Services :: JOnAS report :: Extensions :: Server info - - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - - - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - - - xsd-unmarshalling - - generate - - - ${project.build.directory}/generated-sources/jaxb - src/main/resources/xsd - org.ow2.jonas.report.extensions.server.info.generated - true - true - true - false - true - true - - -Xannotate - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.6.0 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 0.6.0 - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/server-info/src/main/java/org/ow2/jonas/report/extensions/server/info/internal/ServerInfoReportExtension.java b/jonas/modules/services/jonas-report/extensions/server-info/src/main/java/org/ow2/jonas/report/extensions/server/info/internal/ServerInfoReportExtension.java deleted file mode 100644 index cdbddcfa6e..0000000000 --- a/jonas/modules/services/jonas-report/extensions/server-info/src/main/java/org/ow2/jonas/report/extensions/server/info/internal/ServerInfoReportExtension.java +++ /dev/null @@ -1,169 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.report.extensions.server.info.internal; - -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.report.api.IReportExtension; -import org.ow2.jonas.report.extensions.server.info.generated.DateTimeType; -import org.ow2.jonas.report.extensions.server.info.generated.ServerInfo; -import org.ow2.jonas.service.report.util.Utility; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import java.io.InputStream; -import java.math.BigInteger; -import java.util.Date; - -/** - * Represents a Server info report extension - * @author Jeremy Cazaux - */ -public class ServerInfoReportExtension implements IReportExtension { - - /** - * JOnAS Root path - */ - private static final String JONAS_ROOT = System.getProperty("jonas.root"); - - /** - * JOnAS Base path - */ - private static final String JONAS_BASE = System.getProperty("jonas.base"); - - /** - * The logger - */ - public static final Log logger = LogFactory.getLog(ServerInfoReportExtension.class); - - /** - * Path to the XSD - */ - public static final String XSD_PATH = "xsd/server-report.xsd"; - - /** - * The {@link J2EEServerService} - */ - private J2EEServerService j2EEServerService; - - /** - * The {@link org.ow2.jonas.jmx.JmxService} - */ - private JmxService jmxService; - - /** - * {@inheritDoc} - */ - public Object generateReport() { - ServerInfo serverInfo = new ServerInfo(); - if (this.j2EEServerService != null) { - ObjectName objectName = Util.getObjectName(this.jmxService.getDomainName() + - ":j2eeType=J2EEServer,name=" + this.jmxService.getJonasServerName()); - MBeanServer mBeanServer = this.jmxService.getJmxServer(); - String state = String.valueOf(Util.getMBeanAttributeValue(objectName, "state", mBeanServer)); - String version = String.valueOf(Util.getMBeanAttributeValue(objectName, "serverVersion", mBeanServer)); - - Date startTime = new Date(Long.valueOf(String.valueOf(Util.getMBeanAttributeValue(objectName, - "startTime", mBeanServer)))); - String upTime = String.valueOf(Util.getMBeanAttributeValue(objectName, "uptime", mBeanServer)); - - //TODO endTime of the server? - - if (startTime != null) { - DateTimeType dateTime = new DateTimeType(); - dateTime.setDateTime(Utility.date2XMLGregorianCalendar(startTime)); - dateTime.setTimestamp(BigInteger.valueOf(startTime.getTime())); - serverInfo.setStartTime(dateTime); - } - - if (upTime != null) { - Long upTimLong = Long.valueOf(upTime); - DateTimeType dateTime = new DateTimeType(); - dateTime.setDateTime(Utility.date2XMLGregorianCalendar(new Date(upTimLong))); - dateTime.setTimestamp(BigInteger.valueOf(upTimLong)); - serverInfo.setUpTime(dateTime); - } - - serverInfo.setState(state); - serverInfo.setJonasRoot(JONAS_ROOT); - serverInfo.setJonasBase(JONAS_BASE); - serverInfo.setVersion(version); - } - return serverInfo; - } - - /** - * {@inheritDoc} - */ - public Source getXsd() { - InputStream xsd = getRootClass().getClassLoader().getResourceAsStream(XSD_PATH); - Source source = null; - if (xsd != null) { - source = new StreamSource(xsd); - } else { - logger.error("Cannot find XSD " + XSD_PATH); - } - return source; - } - - /** - * {@inheritDoc} - */ - public Class getRootClass() { - return ServerInfo.class; - } - - /** - * @param j2EEServerService The {@link org.ow2.jonas.management.J2EEServerService} to bind - */ - public void bindJ2EEService(final J2EEServerService j2EEServerService) { - this.j2EEServerService = j2EEServerService; - } - - /** - * @param j2EEServerService The {@link J2EEServerService} to unbind - */ - public void unbindJ2EEService(final J2EEServerService j2EEServerService) { - //this.j2EEServerService = null; - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - //this.jmxService = null; - } -} diff --git a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/META-INF/jonas-report-extension-server-info.bnd b/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/META-INF/jonas-report-extension-server-info.bnd deleted file mode 100644 index 82143193a4..0000000000 --- a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/META-INF/jonas-report-extension-server-info.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package !* - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/metadata.xml b/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/metadata.xml deleted file mode 100644 index 9dc3e65ba6..0000000000 --- a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/metadata.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/xsd/server-report.xsd b/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/xsd/server-report.xsd deleted file mode 100644 index 57b7dcd62a..0000000000 --- a/jonas/modules/services/jonas-report/extensions/server-info/src/main/resources/xsd/server-report.xsd +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - The <server-info element is the root element. - The <server-info type defines server information. - - Example: - <server-info state="RUNNING" - version="5.3.0"> - <jonas-root> - /home/cazauxj/projects/jonas/assemblies/profiles/legacy/minimal/target/micro-jonas-5.3.0-M7-SNAPSHOT-bin.dir/micro-jonas-5.3.0-M7-SNAPSHOT - <jonas-root> - <jonas-base> - /home/cazauxj/projects/jonas/assemblies/profiles/legacy/minimal/target/micro-jonas-5.3.0-M7-SNAPSHOT-bin.dir/jonas-base - <jonas-base> - <start-time dateTime="2012-04-02 04:30:12" - timestamp="5612000" - <> - <up-time dateTime="00:00:12" - timestamp="5612233" - <> - <server-info> - - - - - - - - - - - - - - - - - - - Is composed of a datetime its timestamp. - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-report/pom.xml b/jonas/modules/services/jonas-report/pom.xml deleted file mode 100644 index dd3adf71c8..0000000000 --- a/jonas/modules/services/jonas-report/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-report - pom - JOnAS :: Services :: JOnAS report - - api - core - extensions - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource-monitor/core/pom.xml b/jonas/modules/services/jonas-resource-monitor/core/pom.xml deleted file mode 100644 index 2b7328ba47..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/pom.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - jonas-resource-monitor - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-resource-monitor-core - bundle - JOnAS :: Services :: Resource-Monitor :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.bundles - util-plan-monitor - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deploy-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deployer - ${ow2-bundles.version} - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorService.java b/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorService.java deleted file mode 100644 index 59cd3b7b81..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorService.java +++ /dev/null @@ -1,282 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull SAS - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resourcemonitor.internal; - -import java.util.List; - -import javax.management.ObjectName; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.resourcemonitor.ResourceMonitorService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.deploy.deployable.api.DeploymentPlanDeployable; -import org.ow2.util.plan.deployer.api.FragmentUndeploymentException; -import org.ow2.util.plan.deployer.api.IDeploymentPlanDeployer; -import org.ow2.util.plan.fetcher.api.IResourceFetcher; -import org.ow2.util.plan.monitor.api.IResourceMonitor; - -/** - * Implementation for the ResourceMonitor interface. - * @author Mickaël LEDUQUE - * - */ -public class JOnASResourceMonitorService extends AbsServiceImpl implements ResourceMonitorService, - JOnASResourceMonitorServiceMBean { - - /** - * Default value for the monitorInterval property. - */ - private final static long DEFAULT_MONITOR_TIME_INTERVAL = 60000; - - /** - * The logger. - */ - private Log logger = LogFactory.getLog(JOnASResourceMonitorService.class); - - /** - * The resource monitor. - */ - private IResourceMonitor resourceMonitor = null; - - /** - * The monitoring interval in milliseconds. - */ - private Long monitorInterval = null; - - /** - * The JMX service. - */ - private JmxService jmxService = null; - - /** - * The deployment plan deployer. - */ - private IDeploymentPlanDeployer deploymentPlanDeployer = null; - - /** - * The monitoring thread. - */ - private MonitoringThread monitoringThread = new MonitoringThread(); - - /** - * {@inheritDoc} - */ - @Override - protected void doStart() throws ServiceException { - // register the service as Mbean - try { - ObjectName objectName = JonasObjectName.resourceMonitor(this.getDomainName()); - jmxService.registerMBean(this, objectName); - } catch (Exception e) { - logger.error("JMX registration error, {0}", e); - throw new ServiceException("JMX registration error", e); - } - - if (this.monitorInterval == null) { - this.monitorInterval = DEFAULT_MONITOR_TIME_INTERVAL; - } - - // start the monitoring. - monitoringThread.start(); - - logger.info("Resource Monitor Service Started"); - } - - /** - * {@inheritDoc} - */ - @Override - protected void doStop() throws ServiceException { - // Ask the monitoring thread to stop. - this.monitoringThread.isStopping = true; - - if (this.jmxService != null) { - try { - ObjectName objectName = JonasObjectName.resourceMonitor(this.getDomainName()); - jmxService.unregisterMBean(objectName); - } catch (Exception e) { - logger.error("JMX registration error, {0}", e); - throw new ServiceException("JMX registration error", e); - } - } - logger.info("Resource Monitor Service Stopped"); - } - - /** - * {@inheritDoc} - */ - public Integer getMonitoredResourcesCount() { - return this.resourceMonitor.getMonitoredResourcesCount(); - } - - /** - * {@inheritDoc} - */ - public List getMonitoredResourcesDescriptions() { - return this.resourceMonitor.getMonitoredResourcesDescriptions(); - } - - /** - * {@inheritDoc} - */ - public Long getMonitoringInterval() { - return this.monitorInterval; - } - - /** - * {@inheritDoc} - */ - public void setMonitoringInterval(final Long interval) { - logger.debug("Monitoring interval set to {0}", interval); - this.monitorInterval = interval; - } - - /** - * Sets the resource monitor. - * @param resourceMonitor the new resource monitor. - */ - public void setResourceMonitor(final IResourceMonitor resourceMonitor) { - this.resourceMonitor = resourceMonitor; - } - - /** - * Returns the resource monitor. - * @return the resource monitor. - */ - public IResourceMonitor getResourceMonitor() { - return this.resourceMonitor; - } - - /** - * Returns the JMX service. - * @return the JMX service. - */ - public JmxService getJmxService() { - return this.jmxService; - } - - /** - * Sets the JMX service. - * @param jmxService the new JMX service. - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * Sets the deployment plan deployer service. - * @param deploymentPlanDeployer the new deployment plan deployer service. - */ - public void setDeploymentPlanDeployer(final IDeploymentPlanDeployer deploymentPlanDeployer) { - this.deploymentPlanDeployer = deploymentPlanDeployer; - } - - /** - * Returns the deployment plan deployer service. - * @return the deployment plan deployer service. - */ - public IDeploymentPlanDeployer getDeploymentPlanDeployer() { - return this.deploymentPlanDeployer; - } - - /** - * Thread that take care of resource monitoring. - * @author Mickaël LEDUQUE - */ - private class MonitoringThread extends Thread { - /** - * Whether the service is stopping. - */ - boolean isStopping = false; - - /** - * {@inheritDoc} - */ - // TODO what if the interval is changed during sleep? - @Override - public void run() { - for (;;) { - // sleep - try { - Thread.sleep(monitorInterval); - } catch (InterruptedException e) { - logger.warn("Sleep interrupted"); - } - // Check if it should stop - if (isStopping) { - return; - } - // Check the resources - // TODO : should synchronized(resourceMonitor) ?? -- Potentially - // too long! but we could be redeploying undeployed resources... - for (IResourceFetcher resourceFetcher : resourceMonitor.getChangedResources()) { - processResource(resourceFetcher); - // Before processing the next resource, check if we should stop. - if (isStopping) { - return; - } - } - } - } - - private void processResource(final IResourceFetcher resourceFetcher) { - try { - deploymentPlanDeployer.undeployDeployment(resourceFetcher.getDeployment()); - } catch (FragmentUndeploymentException e) { - logger.error( - "Exception while trying to redeploy deployment {0} (during undeployment) - trying to go on.", - resourceFetcher.getDeployment()); - } - try { - deploymentPlanDeployer.deployDeployment(resourceFetcher.getDeployment()); - logger.debug("Resource {0} changed and was redeployed", resourceFetcher.getDeployment()); - } catch (Exception e) { - logger.error( - "Exception while trying to redeploy deployment {0} (during deployment) - aborting", - resourceFetcher.getDeployment()); - // Check if the deployment was in an atomic deployment plan. - // If so, undeploy the plan. - DeploymentPlanDeployable deploymentPlanDeployable = deploymentPlanDeployer - .getOwnerDeploymentPlanDeployable(resourceFetcher.getDeployment()); - if (deploymentPlanDeployable == null) { - logger.error("Could not find which deployment plan owns the deployment {0} - stopping undeployment", - resourceFetcher.getDeployment()); - } else { - try { - deploymentPlanDeployer.undeploy(deploymentPlanDeployable); - } catch (DeployerException deployerException) { - logger.error("Could not undeploy deployment plan {0}", deploymentPlanDeployable); - } - } - } - } - } -} diff --git a/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorServiceMBean.java b/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorServiceMBean.java deleted file mode 100644 index fb5393d29e..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/src/main/java/org/ow2/jonas/resourcemonitor/internal/JOnASResourceMonitorServiceMBean.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull SAS - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.resourcemonitor.internal; - -import java.util.List; - -/** - * Management interface for the Resource Monitor Service. - * @author Mickaël LEDUQUE - * - */ -public interface JOnASResourceMonitorServiceMBean { - /** - * Returns the number of monitored resources. - * @return the number of monitored resources. - */ - Integer getMonitoredResourcesCount(); - - /** - * Returns a list of descriptions for the monitored resources. - * @return - */ - List getMonitoredResourcesDescriptions(); - - /** - * Sets the approximate time interval between two resource - * checks. - * @param interval the new interval in milliseconds. - */ - void setMonitoringInterval(Long interval); - - /** - * Returns the approximate time interval between two resource - * checks. - * @return interval the interval in milliseconds. - */ - Long getMonitoringInterval(); -} diff --git a/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/META-INF/jonas-resource-monitor-core.bnd b/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/META-INF/jonas-resource-monitor-core.bnd deleted file mode 100644 index 7a84498174..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/META-INF/jonas-resource-monitor-core.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.resourcemonitor.internal - diff --git a/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/metadata.xml deleted file mode 100644 index 3a075de25d..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-resource-monitor/core/src/main/templates/jonas-resourcemonitor.properties.template b/jonas/modules/services/jonas-resource-monitor/core/src/main/templates/jonas-resourcemonitor.properties.template deleted file mode 100644 index ebe67a73a0..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/core/src/main/templates/jonas-resourcemonitor.properties.template +++ /dev/null @@ -1,9 +0,0 @@ -# -###################### JOnAS Resource Monitor -# -jonas.services resourcemonitor -# Set the name of the implementation class of the resource monitor service -# -jonas.service.resourcemonitor.class org.ow2.jonas.resourcemonitor.internal.JOnASResourceMonitorService -# duration in milliseconds -jonas.service.resourcemonitor.monitorInterval 30000 diff --git a/jonas/modules/services/jonas-resource-monitor/pom.xml b/jonas/modules/services/jonas-resource-monitor/pom.xml deleted file mode 100644 index d74f66ab39..0000000000 --- a/jonas/modules/services/jonas-resource-monitor/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-resource-monitor - pom - JOnAS :: Services :: Resource-Monitor - - core - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/addon/pom.xml b/jonas/modules/services/jonas-resource/addon/pom.xml deleted file mode 100644 index 6f1005c129..0000000000 --- a/jonas/modules/services/jonas-resource/addon/pom.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - - jonas-resource - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: JCA Resource :: Addon - jonas-resource-addon - pom - - - - org.ow2.jonas - jonas-jca-jdbc-cp - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-ds - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-dm - ${project.version} - rar - - - org.ow2.jonas - jonas-jca-jdbc-xa - ${project.version} - rar - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-resource-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - ../core/src/main/jonas-resources/ - true - - bin/* - deploy/* - - - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/resource-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/addon/src/main/assembly/assembly.xml b/jonas/modules/services/jonas-resource/addon/src/main/assembly/assembly.xml deleted file mode 100644 index 56af8dec66..0000000000 --- a/jonas/modules/services/jonas-resource/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - resource-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/deployment-plan - deploy/ - - * - - - - - - target/extra-resources/bin - bin/ - - RAConfig - RAConfig.bat - - 774 - - - - - ${project.build.directory}/repository - repository/ - - - - - - - repository/org/ow2/jonas/jonas-jca-jdbc-cp/${project.version}/ - true - - org.ow2.jonas:jonas-jca-jdbc-cp:rar - - - - - repository/org/ow2/jonas/jonas-jca-jdbc-ds/${project.version}/ - true - - org.ow2.jonas:jonas-jca-jdbc-ds:rar - - - - - repository/org/ow2/jonas/jonas-jca-jdbc-dm/${project.version}/ - true - - org.ow2.jonas:jonas-jca-jdbc-dm:rar - - - - - repository/org/ow2/jonas/jonas-jca-jdbc-xa/${project.version}/ - true - - org.ow2.jonas:jonas-jca-jdbc-xa:rar - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/jonas-resource/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 5d937e4fdf..0000000000 --- a/jonas/modules/services/jonas-resource/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - resource - - - JOnAS JCA Resource Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.resource - - - - - - org.ow2.jonas.resource.internal.JOnASResourceService - - diff --git a/jonas/modules/services/jonas-resource/ant/pom.xml b/jonas/modules/services/jonas-resource/ant/pom.xml deleted file mode 100644 index 3d3c9edf8f..0000000000 --- a/jonas/modules/services/jonas-resource/ant/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - jonas-resource - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-resource-ant - bundle - JOnAS :: Services :: JCA Resource :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - provided - - - org.ow2.jonas - jonas-services-datasource-core - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcRa.java b/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcRa.java deleted file mode 100644 index 6c9583d70c..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcRa.java +++ /dev/null @@ -1,416 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.resource; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Date; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; - - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - - -/** - * Allow to create JDBC resource adaptors. - * @author Florent Benoit - */ -public class JdbcRa extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[JdbcRa] "; - - /** - * Name of the rar for JDBC_DM. - */ - private static final String JONAS_JDBCDM = "jonas-jca-jdbc-dm"; - - /** - * RAConfig classname. - */ - private static final String RACONFIG_CLASS = "org.ow2.jonas.generators.raconfig.RAConfig"; - - /** - * P6Spy driver class name. - */ - private static final String P6SPY_DRIVER = "com.p6spy.engine.spy.P6SpyDriver"; - - /** - * Name of the property of the real driver when using P6Spy tool. - */ - private static final String REALDRIVER_PROPERTY = "realdriver"; - - /** - * Name of P6Spy configuration file. - */ - public static final String P6SPY_CONF_FILE = "spy.properties"; - - /** - * Name of this JDBC Resource Adaptor. - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor. - */ - private String mapperName = null; - - /** - * username of this JDBC Resource Adaptor. - */ - private String user = null; - - /** - * Password of this JDBC Resource Adaptor. - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor. - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name). - */ - private String driverName = null; - - /** - * Driver Name of this JDBC Resource Adaptor. - */ - private String realDriverName = null; - - /** - * Max Pool Size. - */ - private String maxPoolSize = "100"; - - /** - * Max Prepared Statements Size - */ - private String maxPreparedStatementsSize = "10"; - - /** - * Max Wait Time jdbc - */ - private String maxWaitTime = "10"; - - /** - * Max Waiters jdbc - */ - private String maxWaiters = "0"; - - /** - * connexion max age jdbc - */ - private String connMaxAge = "0"; - - /** - * Max open time jdbc - */ - private String maxOpenTime = "0"; - - /** - * JNDI Name of this JDBC Resource Adaptor - */ - /** - * JNDI Name of this JDBC Resource Adaptor. - */ - private String jndiName = null; - - /** - * Using of the P6Spy tool or not. - */ - private boolean p6spy = false; - - /** - * Set the name of this JDBC Resource Adaptor. - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor. - * @param mapperName the mappername of this JDBC Resource Adaptor - */ - public void setMapperName(final String mapperName) { - this.mapperName = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor. - * @param user the user of this JDBC Resource Adaptor - */ - public void setUser(final String user) { - this.user = user; - } - - /** - * Set the password of this JDBC Resource Adaptor. - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the url of this JDBC Resource Adaptor. - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool. - * @param maxPoolSize max pool size of connection - */ - public void setMaxPoolSize(final String maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - - /** - * Set the max prepared Statements size of this JDBC Resource Adaptor Connection Pool. - * @param maxPreparedStatementsSize of connection - */ - public void setMaxPreparedStatementsSize(final String maxPreparedStatementSize) { - this.maxPreparedStatementsSize = maxPreparedStatementSize; - } - - /** - * Set the max wait time of this JDBC Resource Adaptor Connection Pool. - * @param maxWaitTime of the connection - */ - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - /** - * Set the max waiters of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxWaiters(final String maxWaiters) { - this.maxWaiters = maxWaiters; - } - - /** - * Set the connexion max age of this JDBC Resource Adaptor Connection Pool. - * @param maxConnMAxAge of connection - */ - public void setConnMaxAge(final String connMaxAge) { - this.connMaxAge = connMaxAge; - } - - /** - * Set the open time max of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxOpenTime(final String maxOpenTime) { - this.maxOpenTime = maxOpenTime; - } - - /** - * Set the name of the driver of this JDBC Resource Adaptor. - * @param driverName the name of the driver of this JDBC Resource Adaptor - */ - public void setDriverName(final String driverName) { - this.driverName = driverName; - this.realDriverName = driverName; - } - - /** - * Set the jndiName of this JDBC Resource Adaptor. - * @param jndiName the jndiName of this JDBC Resource Adaptor - */ - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - /** - * Check the properties. - */ - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (mapperName == null) { - throw new BuildException(INFO + "Property 'mapperName' is missing."); - } else if (user == null) { - throw new BuildException(INFO + "Property 'user' is missing."); - } else if (password == null) { - throw new BuildException(INFO + "Property 'password' is missing."); - } else if (url == null) { - throw new BuildException(INFO + "Property 'url' is missing."); - } else if (driverName == null) { - throw new BuildException(INFO + "Property 'driverName' is missing."); - } else if (jndiName == null) { - throw new BuildException(INFO + "Property 'jndiName' is missing."); - } - } - - /** - * Gets a Properties object for JDBC. - * @return configured properties - */ - private Properties getProperties() { - // Check properties - checkProperties(); - - Properties props = new Properties(); - props.put("datasource.name", jndiName); - props.put("datasource.url", url); - if (p6spy) { - driverName = P6SPY_DRIVER; - } - props.put("datasource.classname", driverName); - props.put("datasource.username", user); - props.put("datasource.password", password); - props.put("datasource.mapper", mapperName); - props.put("jdbc.maxconpool", maxPoolSize); - props.put("jdbc.pstmtmax", maxPreparedStatementsSize); - props.put("jdbc.maxwaittime", maxWaitTime); - props.put("jdbc.maxwaiters", maxWaiters); - props.put("jdbc.connmaxage", connMaxAge); - props.put("jdbc.maxopentime", maxOpenTime); - return props; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - super.execute(); - JTask jtask = new JTask(); - jtask.setDestDir(destDir); - - // Build new temp file for making a resource adaptor - File tmpFile = new File(System.getProperty("java.io.tmpdir"), String.valueOf(new Date().getTime())); - - // Write properties to a file - Properties props = getProperties(); - jtask.writePropsToFile(INFO, props, tmpFile); - - // Build resource adapter for this configuration - - // args - String jBaseDeployDir = this.destDir.getPath() + File.separator + "deploy"; - - String jdbcDM = this.jonasRoot.getPath() + File.separator + jtask.getMaven2Repository() + File.separator + "org" - + File.separator + "ow2" + File.separator + "jonas" + File.separator + JONAS_JDBCDM + File.separator - + getJOnASVersion() + File.separator + JONAS_JDBCDM + "-" + getJOnASVersion() + ".rar"; - String destRarFile = jBaseDeployDir + File.separator + name + ".rar"; - - log("jonasRoot.getAbsolutePath()"+jonasRoot.getAbsolutePath()); - getProject().setProperty("jonas.root",jonasRoot.getAbsolutePath()); - jtask.setJonasRoot(this.jonasRoot); - log("jtask.getJonasRoot():"+jtask.getJonasRoot()); - Java raConfigTask = jtask.getBootstraptask("", false, getProject()); - - // Add the ra-config Jar in the Java classpath path - String clientJar = this.jonasRoot.getPath() + File.separator + "lib" + File.separator + "client.jar"; - String raConfigJar = this.jonasRoot.getPath() + File.separator + "lib" + File.separator + "jonas-generators-raconfig.jar"; - Path classpath = new Path(raConfigTask.getProject(), clientJar); - classpath.append(new Path(raConfigTask.getProject(), raConfigJar)); - raConfigTask.setClasspath(classpath); - - raConfigTask.clearArgs(); - raConfigTask.createArg().setValue(RACONFIG_CLASS); - raConfigTask.createArg().setValue("-dm"); - raConfigTask.createArg().setValue("-p"); - raConfigTask.createArg().setValue(tmpFile.getPath()); - raConfigTask.createArg().setValue(jdbcDM); - raConfigTask.createArg().setValue(destRarFile); - - log(INFO + "Generating a rar file with name '" + name + "', mapperName '" + mapperName + "', user '" + user - + "', password '" + password + "', URL '" + url + "', driverName '" + driverName + "' and jndiName '" - + jndiName + "'..."); - - try { - raConfigTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - throw new BuildException(INFO + "Cannot make a resource adaptor on RAConfig: ", rae); - } finally { - tmpFile.delete(); - } - log(INFO + "Rar generated : '" + destRarFile + "'."); - - // P6Spy tool Configuration - if (p6spy) { - // Set the realdriver property of the JONAS_BASE/conf/spy.properties P6Spy configuration file - String jBaseConf = this.jonasRoot.getPath() + File.separator + "conf"; - jtask.changeValueForKey(INFO, jBaseConf, P6SPY_CONF_FILE, - REALDRIVER_PROPERTY, realDriverName, "=", false); - addTask(jtask); - } - - super.executeAllTask(); - } - - /** - * Copy rar to autoload or only in rars/ ? - * @param autoload true of false - * @deprecated - */ - @Deprecated - public void setAutoload(final boolean autoload) { - } - - /** - * Configure the using of the P6Spy tool or not ? - * @return the p6spy - */ - public boolean isP6spy() { - return p6spy; - } - - /** - * Configure the using of the P6Spy tool or not ? - * @param p6spy true or false - */ - public void setP6spy(final boolean p6spy) { - this.p6spy = p6spy; - } - - private String getJOnASVersion() { - Properties versions = new Properties(); - try { - versions.load(new FileInputStream(new File(this.jonasRoot, "versions.properties"))); - } catch (Exception e) { - throw new BuildException(INFO + "Cannot read versions.properties file: ", e); - } - return versions.getProperty("org.ow2.jonas"); - } -} diff --git a/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcXml.java b/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcXml.java deleted file mode 100644 index dea8efd48c..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/resource/JdbcXml.java +++ /dev/null @@ -1,431 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.resource; - -import java.io.File; -import java.io.FileOutputStream; -import java.math.BigInteger; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.datasource.deployer.binding.ConnectionManagerConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceType; -import org.ow2.jonas.datasource.deployer.binding.Datasources; -import org.ow2.jonas.datasource.deployer.binding.ObjectFactory; -import org.ow2.jonas.datasource.deployer.reader.DatasourceXmlReader; - - -/** - * Allow to create JDBC datasources. - * @author Benoit Pelletier - */ -public class JdbcXml extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[JdbcXml] "; - - /** - * Name of datasources configuration file - */ - public static final String JDBC_DS_CONF_FILE = "jdbc-ds.xml"; - - /** - * New file or add into existing one - */ - private boolean newFile = false; - - /** - * Name of this JDBC Resource Adaptor. - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor. - */ - private String mapper = null; - - /** - * username of this JDBC Resource Adaptor. - */ - private String userName = null; - - /** - * Password of this JDBC Resource Adaptor. - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor. - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name). - */ - private String className = null; - - /** - * Init Pool Size. - */ - private String initConPool = "1"; - - /** - * Min Pool Size. - */ - private String minConPool = "10"; - - /** - * Max Pool Size. - */ - private String maxConPool = "100"; - - /** - * Max Prepared Statements Size - */ - private String pstmtMax = "10"; - - /** - * Pstmt cache policy - */ - private String pstmtCachePolicy = "List"; - - - /** - * Max Wait Time jdbc - */ - private String maxWaitTime = "10"; - - /** - * Max Waiters jdbc - */ - private String maxWaiters = "100"; - - /** - * connexion max age jdbc - */ - private String connMaxAge = "1440"; - - /** - * Max open time jdbc - */ - private String maxOpenTime = "60"; - - /** - * Connection check level - */ - private String conCheckLevel = "0"; - - /** - * Connection check level - */ - private String conTestStmt = ""; - - /** - * Sampling period - */ - private String samplingPeriod = "30"; - - - /** - * Set the name of the driver of this JDBC Resource Adaptor. - * @param className the name of the driver of this JDBC Resource Adaptor - */ - public void setClassName(final String className) { - this.className = className; - } - - /** - * Set the init pool size of this JDBC Resource Adaptor Connection Pool. - * @param initConPool init pool size of connection - */ - public void setInitConPool(final String initConPool) { - this.initConPool = initConPool; - } - - /** - * Set the min pool size of this JDBC Resource Adaptor Connection Pool. - * @param minConPool min pool size of connection - */ - public void setMinConPool(final String minConPool) { - this.minConPool = minConPool; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool. - * @param maxConPool max pool size of connection - */ - public void setMaxConPool(final String maxConPool) { - this.maxConPool = maxConPool; - } - - /** - * Set the prepared statement pool size of this JDBC Resource Adaptor Connection Pool. - * @param pstmtMax pool size of connection - */ - public void setPstmtMax(final String pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * Set the prepared statement cache policy of this JDBC Resource Adaptor Connection Pool. - * @param pstmtCachePolicy cache policy - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - /** - * Set the connection check level. - * @param conCheckLevel level - */ - public void setConCheckLevel(final String conCheckLevel) { - this.conCheckLevel = conCheckLevel; - } - - /** - * Set the statement for the connection check level. - * @param conTestStmt request - */ - public void setConTestStmt(final String conTestStmt) { - this.conTestStmt = conTestStmt; - } - - /** - * Set the name of this JDBC Resource Adaptor. - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor. - * @param mapper the mappername of this JDBC Resource Adaptor - */ - public void setMapper(final String mapperName) { - this.mapper = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor. - * @param user the user of this JDBC Resource Adaptor - */ - public void setUserName(final String user) { - this.userName = user; - } - - /** - * Set the password of this JDBC Resource Adaptor. - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the samplingPeriod of the JDBC Resource Adaptor. - * @param samplingPeriod the sampling period - */ - public void setSamplingPeriod(final String samplingPeriod) { - this.samplingPeriod = samplingPeriod; - } - - /** - * Set the url of this JDBC Resource Adaptor. - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max wait time of this JDBC Resource Adaptor Connection Pool. - * @param maxWaitTime of the connection - */ - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - /** - * Set the max waiters of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxWaiters(final String maxWaiters) { - this.maxWaiters = maxWaiters; - } - - /** - * Set the connexion max age of this JDBC Resource Adaptor Connection Pool. - * @param maxConnMAxAge of connection - */ - public void setConnMaxAge(final String connMaxAge) { - this.connMaxAge = connMaxAge; - } - - /** - * Set the open time max of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxOpenTime(final String maxOpenTime) { - this.maxOpenTime = maxOpenTime; - } - - /** - * - * @return true if a new file is requested - */ - public boolean isNewFile() { - return newFile; - } - - /** - * Set is a new file has to be created - * @param newFile - */ - public void setNewFile(final String newFile) { - this.newFile = Boolean.valueOf(newFile); - } - - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (mapper == null) { - throw new BuildException(INFO + "Property 'mapper' is missing."); - } else if (userName == null) { - throw new BuildException(INFO + "Property 'userName' is missing."); - } else if (password == null) { - throw new BuildException(INFO + "Property 'password' is missing."); - } else if (url == null) { - throw new BuildException(INFO + "Property 'url' is missing."); - } else if (className == null) { - throw new BuildException(INFO + "Property 'className' is missing."); - } - } - - - - /** - * Execute this task. - */ - @Override - public void execute() { - super.execute(); - - final ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - try { - // Look for the JAXB2 JARs since the JDBC XML tasks require JAXB2, - // not included in the Java 5 runtime. Please remove this piece of - // code when JOnAS completely switches to Java 6. - final String javaVersion = System.getProperty("java.version"); - if (javaVersion.startsWith("1.5")) { - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - } - - // Check properties - checkProperties(); - - DatasourceXmlReader datasourceReader = new DatasourceXmlReader(); - if (datasourceReader == null) { - throw new BuildException("DatasourceReader is null"); - } - Datasources datasources = null; - - File dsXmlFile = new File(this.destDir.getPath() + File.separator + JOnASBaseTask.DEPLOY_DIR_NAME + File.separator + JDBC_DS_CONF_FILE); -// if (!dsXmlFile.exists()) { -// throw new BuildException("jdbc-ds.xml file doesn't exist"); -// } - - // if needed, load the current XML file - if (!isNewFile()) { - datasources = datasourceReader.extractDataSources(dsXmlFile); - } else { - datasources = new Datasources(); - } - - // add the datasource - DatasourceType ds = new DatasourceType(); - - DatasourceConfigurationType dsConf = new DatasourceConfigurationType(); - dsConf.setName(name); - dsConf.setUsername(userName); - dsConf.setPassword(password); - dsConf.setUrl(url); - dsConf.setMapper(mapper); - dsConf.setClassname(className); - dsConf.setDescription(name); - ds.setDatasourceConfiguration(dsConf); - - ConnectionManagerConfigurationType cmConf = new ConnectionManagerConfigurationType(); - cmConf.setConnchecklevel(Integer.valueOf(this.conCheckLevel)); - cmConf.setConnteststmt(this.conTestStmt); - cmConf.setConnmaxage(BigInteger.valueOf(Long.valueOf(connMaxAge))); - cmConf.setInitconpool(BigInteger.valueOf(Long.valueOf(this.initConPool))); - cmConf.setMinconpool(BigInteger.valueOf(Long.valueOf(this.minConPool))); - cmConf.setMaxconpool(BigInteger.valueOf(Long.valueOf(this.maxConPool))); - cmConf.setMaxopentime(BigInteger.valueOf(Long.valueOf(this.maxOpenTime))); - cmConf.setMaxwaiters(BigInteger.valueOf(Long.valueOf(this.maxWaiters))); - cmConf.setMaxwaittime(BigInteger.valueOf(Long.valueOf(this.maxWaitTime))); - cmConf.setPstmtmax(BigInteger.valueOf(Long.valueOf(this.pstmtMax))); - cmConf.setPstmtcachepolicy(this.pstmtCachePolicy); - cmConf.setSamplingperiod(BigInteger.valueOf(Long.valueOf(this.samplingPeriod))); - ds.setConnectionManagerConfiguration(cmConf); - - datasources.getDatasources().add(ds); - - // flush the file - if (dsXmlFile.exists()) { - dsXmlFile.delete(); - } - dsXmlFile.createNewFile(); - - JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class); - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); - FileOutputStream fileOut = new FileOutputStream(dsXmlFile); - try { - marshaller.marshal(datasources, fileOut); - } finally { - fileOut.close(); - } - - log(INFO + "JDBC XML generated : '" + dsXmlFile.getAbsolutePath() + "'."); - } catch (BuildException e) { - throw e; - } catch (Throwable t) { - throw new BuildException("Failed building JDBC XML: " + t, t); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/jonas-resource/ant/src/main/resources/META-INF/jonas-resource-ant.bnd b/jonas/modules/services/jonas-resource/ant/src/main/resources/META-INF/jonas-resource-ant.bnd deleted file mode 100644 index d782be66b9..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/resources/META-INF/jonas-resource-ant.bnd +++ /dev/null @@ -1,37 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.antmodular.jonasbase.resource.* - -# I added o.o.j.deployment.ejb as private package because I want the -# DTDs to be copied in this jar file -# Notice that it will copy other classes from the same package (depl API) -# but it shouldn't do any harm as the ant task classloader is not used -# as the parent for GenIC task - -Embed-Dependency jonas-services-datasource-core;inline=true - -# Import/Export nothing -Import-Package !* -Export-Package !* diff --git a/jonas/modules/services/jonas-resource/ant/src/main/resources/antlib-jonas-resource.xml b/jonas/modules/services/jonas-resource/ant/src/main/resources/antlib-jonas-resource.xml deleted file mode 100644 index bfb06f861e..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/resources/antlib-jonas-resource.xml +++ /dev/null @@ -1,7 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.properties.template b/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.properties.template deleted file mode 100644 index ca204d32c1..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.properties.template +++ /dev/null @@ -1,79 +0,0 @@ -rajdbc.hsql.user=jonas -rajdbc.hsql.password=jonas -rajdbc.hsql.url=jdbc:hsqldb:hsql://localhost:9001/db_jonas -rajdbc.hsql.drivername=org.hsqldb.jdbcDriver -rajdbc.hsql.jndiname=jdbc_1 -rajdbc.hsql.jdbcdriverjarfile=none -rajdbc.hsql.mappername=rdb.hsql - -rajdbc.postgresql.user=jonas -rajdbc.postgresql.password=jonas -rajdbc.postgresql.url=jdbc:postgresql://localhost:5433/db_jonas -rajdbc.postgresql.drivername=org.postgresql.Driver -rajdbc.postgresql.jndiname=jdbc_1 -rajdbc.postgresql.jdbcdriverjarfile=postgresql.jar -rajdbc.postgresql.mappername=rdb.postgresql - -rajdbc.oracle.user=jonas -rajdbc.oracle.password=jonas -rajdbc.oracle.url=jdbc:oracle:thin:@localhost:1521:db_jonas -rajdbc.oracle.drivername=oracle.jdbc.driver.OracleDriver -rajdbc.oracle.jndiname=jdbc_1 -rajdbc.oracle.jdbcdriverjarfile=ojdbc5.jar -rajdbc.oracle.mappername=rdb.oracle - -rajdbc.mysql.user=root -rajdbc.mysql.password= -rajdbc.mysql.url=jdbc:mysql:http://localhost:3306/db_jonas -rajdbc.mysql.drivername=org.gjt.mm.mysql.Driver -rajdbc.mysql.jndiname=jdbc_1 -rajdbc.mysql.jdbcdriverjarfile=mysql-connector-java.jar -rajdbc.mysql.mappername=rdb.mysql - -rajdbc.h2.user=jonas -rajdbc.h2.password=jonas -rajdbc.h2.url=jdbc:h2:tcp://localhost:9001/db_jonas -rajdbc.h2.drivername=org.h2.Driver -rajdbc.h2.jndiname=jdbc_1 -rajdbc.h2.jdbcdriverjarfile=none -# H2 use the same mapper than HSQL -rajdbc.h2.mappername=rdb.hsql - - -xmljdbc.hsql.name=jdbc_1 -xmljdbc.hsql.username=jonas -xmljdbc.hsql.password=jonas -xmljdbc.hsql.url=jdbc:hsqldb:hsql://localhost:9001/db_jonas -xmljdbc.hsql.mapper=rdb.hsql -xmljdbc.hsql.classname=org.hsqldb.jdbcDriver -xmljdbc.hsql.conteststmt=select count(1) from information_schema.system_tables -xmljdbc.hsql.connmaxage=1440 -xmljdbc.hsql.conchecklevel=2 -xmljdbc.hsql.initconpool=10 -xmljdbc.hsql.minconpool=10 -xmljdbc.hsql.maxconpool=100 -xmljdbc.hsql.maxopentime=60 -xmljdbc.hsql.maxwaiters=100 -xmljdbc.hsql.maxwaitingtime=5 -xmljdbc.hsql.pstmtmax=100 -xmljdbc.hsql.pstmtcachepolicy=Map -xmljdbc.hsql.samplingperiod=100 - -xmljdbc.h2.name=jdbc_1 -xmljdbc.h2.username=jonas -xmljdbc.h2.password=jonas -xmljdbc.h2.url=jdbc:h2:tcp://localhost:9001/db_jonas -xmljdbc.h2.mapper=rdb.hsql -xmljdbc.h2.classname=org.h2.Driver -xmljdbc.h2.conteststmt=select count(1) from information_schema.tables -xmljdbc.h2.connmaxage=1440 -xmljdbc.h2.conchecklevel=2 -xmljdbc.h2.initconpool=10 -xmljdbc.h2.minconpool=10 -xmljdbc.h2.maxconpool=100 -xmljdbc.h2.maxopentime=60 -xmljdbc.h2.maxwaiters=100 -xmljdbc.h2.maxwaitingtime=5 -xmljdbc.h2.pstmtmax=100 -xmljdbc.h2.pstmtcachepolicy=Map -xmljdbc.h2.samplingperiod=100 \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.xml b/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.xml deleted file mode 100644 index 9c3f59ef80..0000000000 --- a/jonas/modules/services/jonas-resource/ant/src/main/resources/build-jonas-resource.xml +++ /dev/null @@ -1,145 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/pom.xml b/jonas/modules/services/jonas-resource/core/pom.xml deleted file mode 100644 index 66f00d7aea..0000000000 --- a/jonas/modules/services/jonas-resource/core/pom.xml +++ /dev/null @@ -1,222 +0,0 @@ - - - - - jonas-resource - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-resource-core - bundle - JOnAS :: Services :: JCA Resource :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-deployment-api - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.objectweb.monolog - monolog-core - ${monolog.version} - - - commons-modeler - commons-modeler - - - org.ow2.bundles - ow2-util-file - - - org.ow2.bundles - ow2-util-log - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-xml - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - org.ow2.spec.ee - ow2-jta-1.1-spec - - - geronimo-spec - geronimo-spec-j2ee-connector - 1.5-rc4 - provided - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - resource-deployment-plan - - - org.ow2.jonas - jonas-resource-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-deploy - compile - - jar - - - src/main/jonas-resources/deploy - ${project.build.directory} - deploy - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/IJDBCConnection.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/IJDBCConnection.java deleted file mode 100644 index 307c0b35ce..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/IJDBCConnection.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.sql.Connection; -import java.sql.SQLException; - -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; - - -/** - * A JOnAS Specific JDBC SQL {@link Connection}. - * @author Guillaume Sauthier - */ -public interface IJDBCConnection extends Connection { - - /** - * @return true if the connection is physically closed. - * @throws SQLException - */ - boolean isPhysicallyClosed() throws SQLException; - - /** - * Give JOnAS specific data to the connection. - * @param info {@link ManagedConnectionInfo} - * @param manager the connection manager - */ - void setJonasInfo(ManagedConnectionInfo info, SQLManager manager); - - /** - * Use the username provided in meta-data. - */ - void setUser(); - - long getKey(); -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceService.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceService.java deleted file mode 100644 index 2c1499d16c..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceService.java +++ /dev/null @@ -1,1119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.resource.spi.work.WorkManager; -import javax.transaction.xa.XAException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.configuration.DeploymentPlanDeployer; -import org.ow2.jonas.deployment.rar.ConnectorDesc; -import org.ow2.jonas.deployment.rar.JonasConnectorDesc; -import org.ow2.jonas.deployment.rar.wrapper.RarManagerWrapper; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.resource.ResourceService; -import org.ow2.jonas.resource.ResourceServiceException; -import org.ow2.jonas.resource.internal.mbean.ArchiveConfigMBean; -import org.ow2.jonas.resource.internal.mbean.RarConfigMBean; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.workmanager.WorkManagerService; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.url.URLUtils; - -/** - * JCA resource service implementation. - * - * @author Philippe Coq Contributor(s): JOnAS 2.4 Sebastien Chassande-Barrioz - * (sebastien.chassande@inrialpes.fr) JOnAS 3.0 Eric Hardesty - * (Eric.Hardesty@bull.com) JOnAS 4.0 Adriana Danes (JSR 77 + use of - * Jakarta Modeler Component : - * http://jakarta.apache.org/commons/modeler) Eric Hardesty (J2CA 1.5) - */ -public class JOnASResourceService extends AbsServiceImpl implements - ResourceService, JOnASResourceServiceMBean { - - /** - * Main logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".process"); - - /** - * Management logger. - */ - private static Logger manageLogger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".management"); - - /** - * RAR deployer. - */ - private RARDeployer rarDeployer = null; - - /** - * List of RAR files that cannot be deployed now because - * another RAR must be deployed first. - */ - private List delayedRAs = new ArrayList(); - - /** - * The transaction service for this server. - */ - private TransactionService transactionService = null; - - /** - * The transaction manager for this server. - */ - private TransactionManager tm = null; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * List of resource names. - */ - private List resourceNames = null; - - /** - * Associate a Rar with its jndi name. - */ - private static Hashtable jndiName2RA = new Hashtable(); - - /** - * Associate a filename to an RAR object. - */ - private static Hashtable fileName2RA = new Hashtable(); - - // J2EE CA 1.5 objects - /** - * Work Manager for the Resource service. - */ - private WorkManager workMgr = null; - - /** - * BootstrapContext for the Resource service. - */ - private ResourceBootstrapContext bootCtx = null; - - /** - * External class loader. - */ - private ClassLoader extClassLoader; - - /** - * Need a WorkManager. - */ - private WorkManagerService workManagerService; - - /** - * DeployerManager service. - */ - private IDeployerManager deployerManager = null; - - /** - * Registry Service. - */ - private RegistryService registryService; - - /** - * The JOnAS deployment plan deployer service. - */ - private DeploymentPlanDeployer deploymentPlanDeployer = null; - - /** - * Initial Context for Naming. - */ - private Context ictx = null; - - /** - * Default constructor for ResourceService. - */ - public JOnASResourceService() { - resourceNames = new ArrayList(); - - // create RAR deployer - this.rarDeployer = new RARDeployer(); - } - - /** - * @param validate Use a validating XML parser ? - */ - public void setParsingwithvalidation(final boolean validate) { - RarManagerWrapper.setParsingWithValidation(validate); - } - - /** - * Start the Resource service. - * - * @throws ServiceException if the startup failed. - */ - @Override - public void doStart() throws ServiceException { - // Get the InitialContext in an execution block - IExecution ictxGetter = new IExecution() { - public InitialContext execute() throws Exception { - return getRegistryService().getRegistryContext(); - } - }; - - // Execute - ExecutionResult ictxResult = RunnableHelper.execute( - getClass().getClassLoader(), ictxGetter); - // Throw an ServiceException if needed - if (ictxResult.hasException()) { - logger.log(BasicLevel.ERROR, - "Cannot create initial context when Resource service initializing"); - throw new ServiceException( - "Cannot create initial context when Resource service initializing", - ictxResult.getException()); - } - // Store the ref - ictx = ictxResult.getResult(); - - // Get Loader Manager - try { - // FIXME This will not be usable as is in OSGi, as JONAS_ROOT maybe - // not set, and at least, it's no more the task of the LoaderManager - // to set-up the Class hierarchy - LoaderManager lm = LoaderManager.getInstance(); - extClassLoader = lm.getExternalLoader(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, - "Cannot get the Applications ClassLoader from RAR Container Service: " - + e); - throw new ServiceException( - "Cannot get the Applications ClassLoader from RAR Container Service", - e); - } - - // Settings on the deployer - rarDeployer.setResourceService(this); - - // Register it - deployerManager.register(rarDeployer); - - // finish initialization - tm = transactionService.getTransactionManager(); - workMgr = workManagerService.getWorkManager(); - try { - bootCtx = new ResourceBootstrapContext(workMgr, transactionService - .getXATerminator()); - } catch (XAException e) { - logger.log(BasicLevel.ERROR, - "Unable to get an XATerminator from the TransactionService"); - throw new ServiceException( - "Unable to get an XATerminator from the TransactionService", - e); - } - - // creates each resource - String rarFileName = null; - ComponentContext ctx = null; - for (int i = 0; i < resourceNames.size(); i++) { - rarFileName = resourceNames.get(i); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "rarFileName=" + rarFileName); - } - try { - ctx = new ComponentContext(rarFileName); - ctx.rebind("rarFileName", rarFileName); - ctx.rebind("isInEar", Boolean.valueOf(false)); - ctx.rebind("classloader", extClassLoader); - createResourceAdapter(ctx); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "JOnAS: Cannot create resource: " - + rarFileName + " exception: " + e); - e.printStackTrace(); - } - } - - jmxService.loadDescriptors(getClass().getPackage().getName(), - getClass().getClassLoader()); - - // Create and register the Resource Service MBean - String domainName = getDomainName(); - jmxService.registerMBean(this, JonasObjectName - .resourceService(domainName)); - // Create and register the archive configuration MBeans - try { - jmxService.registerModelMBean(new ArchiveConfigMBean(), - JonasObjectName.ArchiveConfig(domainName)); - jmxService.registerModelMBean(new RarConfigMBean(), JonasObjectName - .RarConfig(domainName)); - } catch (Exception e) { - e.printStackTrace(); - logger.log(BasicLevel.WARN, - "ResourceService: Can't register MBeans for archive configuration" - + e); - return; - } - - try { - deploymentPlanDeployer.deploy("jdbc-resource-adapters"); - } catch (DeployerException e) { - logger.log(BasicLevel.ERROR, "Cannot deploy JDBC resource adapters"); - } - - logger.log(BasicLevel.INFO, "Resource Service started"); - } - - /** - * Stop the Resource service. - * - * @throws ServiceException if the stop failed. - */ - @Override - public void doStop() throws ServiceException { - // Undeploy RARs - rarDeployer.stop(); - - if (deployerManager != null) { - // Unregister deployer - deployerManager.unregister(rarDeployer); - } - - if (jmxService != null) { - // unregister resource MBeans - // unregister Archive Config MBeans - String domainName = getDomainName(); - jmxService.unregisterModelMBean(JonasObjectName.ArchiveConfig(domainName)); - jmxService.unregisterModelMBean(JonasObjectName.RarConfig(domainName)); - jmxService.unregisterMBean(JonasObjectName.resourceService(domainName)); - } - - logger.log(BasicLevel.INFO, "Resource Service stopped"); - } - - // IMPLEMENTATION OF 'ResourceService' INTERFACE // - - /** - * Create a new resource adapter. - * This Resource Adapter is configured via xml files in the rar file. - * - * @param ctx Context to use for deploying an RAR - * @return Sting resource objectName - * @throws MalformedURLException - */ - public synchronized String createResourceAdapter(final Context ctx) - throws ResourceServiceException, NamingException, MalformedURLException { - String ron = createRA(ctx); - if (ron == null) { - if (!delayedRAs.contains(ctx)) { - delayedRAs.add(ctx); - } - return null; - } - - int count = 1; - while (count > 0 && delayedRAs.size() > 0) { - ArrayList processedRAs = new ArrayList(); - count = 0; - try { - for (Context cc : delayedRAs) { - String on = createRA(cc); - if (on != null) { - count++; - if (!processedRAs.contains(cc)) { - processedRAs.add(cc); - } - } - } - } catch (Exception e) { - logger.log(BasicLevel.WARN, "delayed creation of RA failed:" + e); - e.printStackTrace(); - } - // Remove processed RAs from the list - for (Context cc : processedRAs) { - int index = delayedRAs.indexOf(cc); - if (index > -1) { - delayedRAs.remove(index); - } - } - } - - return ron; - } - - /** - * Create a new resource adapter. This Resource Adapter is configured via - * xml files in the rar file - * - * @param ctx Context to use for deploying an RAR - * @return Sting resource objectName or null if could not be deployed. - * @throws MalformedURLException - */ - private String createRA(final Context ctx) throws ResourceServiceException, - NamingException, MalformedURLException { - - // Parameters : - // rarFileName, isInEar, class loader and possible AltDD and earUrl - String rarFileName; - ClassLoader loader; - try { - loader = (ClassLoader) ctx.lookup("classloader"); - rarFileName = (String) ctx.lookup("rarFileName"); - ctx.rebind("deployed", Boolean.valueOf(false)); - } catch (Exception ex) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, rarFileName); - } - if (!rarFileName.endsWith(".rar")) { - rarFileName += ".rar"; - ctx.rebind("rarFileName", rarFileName); - } - - // Determine if the RAR file exists - File f = new File(rarFileName); - if (!f.exists()) { - logger.log(BasicLevel.ERROR, "createResourceAdapter: " + rarFileName + " not found"); - throw new NamingException(rarFileName + " not found"); - } - - URL rarUrl = f.toURL(); - - final Rar rar = new Rar(ctx, getDomainName(), getJonasServerName(), - bootCtx, this.tm, this.jmxService); - - rar.setInitialContext(ictx); - - try { - final JOnASResourceService resourceService = this; - // Process the resource adapter in an execution block - IExecution exec = new IExecution() { - public Context execute() throws Exception { - return rar.processRar(getDomainName(), resourceService); - } - }; - - // Execute - ExecutionResult execResult = RunnableHelper.execute( - loader, exec); - // Throw an ServiceException if needed - if (execResult.hasException()) { - logger.log(BasicLevel.ERROR, "execResult failed:" - + execResult.getException()); - throw execResult.getException(); - } - // Store the ref - Context ctxRar = execResult.getResult(); - } catch (NullPointerException n) { - logger.log(BasicLevel.ERROR, "NPE while processing RAR"); - n.printStackTrace(); - throw new ResourceServiceException("NPE while processing RAR", n); - } catch (Exception ex) { - // Exception error in processing unregister - String err = "Error processing Rar: " + ex.getMessage(); - try { - rar.unRegister(getDomainName()); - } catch (Exception exc) { - err = err + " Unregister also failed with " + exc.getMessage(); - } - if (ex.getMessage() != null - && ex.getMessage().indexOf("no jonas-ra.xml") > 0) { - throw new ResourceServiceException("", ex); - } - logger.log(BasicLevel.ERROR, err); - throw new ResourceServiceException(err, ex); - } - - boolean isDeployed = false; - try { - isDeployed = ((Boolean) ctx.lookup("deployed")).booleanValue(); - } catch (Exception ex) { - String err = "Error while getting parameter(isDeployed) from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - if (!isDeployed) { - // Not deployed. Add it to the list. - logger.log(BasicLevel.DEBUG, "Still not deployed:" + ctx); - return null; - } - - Vector jNames = rar.getJndinames(); - if (jNames != null) { - for (int i = 0; i < jNames.size(); i++) { - jndiName2RA.put((String) jNames.get(i), rar); - } - } - - // Processed and deployed rar, so add it to our lists - fileName2RA.put(rarUrl.getPath(), rar); - - String onRar = null; - try { - onRar = (String) ctx.lookup("onRar"); - } catch (Exception ex) { - String err = "Error while getting parameter(onRar) from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - return onRar; - } - - /** - * Deploy the given rars of an ear file with the specified parent - * classloader (ear classloader). (This method is only used for for ear - * applications). - * - * @param ctx the context containing the configuration to deploy the rars.
    - * This context contains the following parameters :
    - urls - * the list of the urls of the rars to deploy.
    - earRootURL - * the URL of the ear application file.
    - earClassLoader the - * ear classLoader of the j2ee app.
    - altDDs the optional - * URI of deployment descriptor.
    - * @throws ResourceServiceException if an error occurs during the deployment. - */ - public void deployRars(final Context ctx) throws ResourceServiceException { - - // Gets the parameters from the context : - // - urls the list of the urls of the rars to deploy. - // - earRootURL the URL of the ear application file. - // - earClassLoader the ear classLoader of the j2ee app. - // - altDDs the optional URI of deployment descriptor. - URL[] urls = null; - URL earUrl = null; - ClassLoader earClassLoader = null; - URL[] altDDs = null; - try { - urls = (URL[]) ctx.lookup("urls"); - earUrl = (URL) ctx.lookup("earUrl"); - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - altDDs = (URL[]) ctx.lookup("altDDs"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new ResourceServiceException(err, e); - } - - // Deploy all the rars of the ear application. - for (int i = 0; i < urls.length; i++) { - // Get the name of a rar to deploy. - String fileName = URLUtils.urlToFile(urls[i]).getPath(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Deploy rar '" + fileName - + "' for the ear service"); - } - - // The context to give for the creation of the container - // associated to the ejb-jar. - Context contctx = null; - try { - contctx = new ComponentContext(fileName); - contctx.rebind("rarFileName", fileName); - contctx.rebind("isInEar", Boolean.valueOf(true)); - contctx.rebind("earUrl", earUrl); - if (altDDs[i] != null) { - contctx.rebind("altDD", altDDs[i]); - } - contctx.rebind("classloader", earClassLoader); - createResourceAdapter(contctx); - } catch (Exception e) { - // A rar is corrupted so undeploy all the deployed rar - // of the ear application. - logger.log(BasicLevel.ERROR, "Error when deploying '" - + fileName + "'"); - logger.log(BasicLevel.ERROR, e.getMessage()); - logger.log(BasicLevel.ERROR, - "Undeploy rar of the ear application"); - - for (int j = 0; j < i; j++) { - String rarFileName = urls[j].getFile(); - try { - // Try to undeploy a rar of the ear application. - ComponentContext compctx = new ComponentContext( - rarFileName); - compctx.rebind("rarFileName", rarFileName); - compctx.rebind("isInEar", new Boolean(true)); - contctx.rebind("earUrl", earUrl); - unRegisterRar(compctx); - } catch (Exception ex) { - // Cannot undeploy a rar of the ear application - // So there is an error message. - logger.log(BasicLevel.ERROR, "Error when undeploying '" - + rarFileName + "'"); - logger.log(BasicLevel.ERROR, ex.getMessage()); - logger.log(BasicLevel.ERROR, - "Cannot undeploy rar of the ear application"); - } - - } - throw new ResourceServiceException( - "Error during the deployment", e); - } - } - } - - /** - * Undeploy the given rars of an ear file. (This method is only used for the - * ear applications). - * - * @param urls the list of the urls of the rars to undeploy. - * @param earUrl the URL of the associated EAR file - */ - public void unDeployRars(final URL[] urls, final URL earUrl) { - for (int i = 0; i < urls.length; i++) { - String fileName = urls[i].getFile(); - if (fileName2RA.containsKey(fileName)) { - try { - // Try to undeploy a rar of the ear application. - ComponentContext compctx = new ComponentContext(fileName); - compctx.rebind("rarFileName", fileName); - compctx.rebind("isInEar", Boolean.valueOf(true)); - compctx.rebind("earUrl", earUrl); - unRegisterRar(compctx); - } catch (Exception ex) { - logger.log(BasicLevel.ERROR, "Cannot undeploy resource: " - + fileName + " " + ex); - } - } else { - logger.log(BasicLevel.ERROR, - "Cannot remove the non-existant rar '" - + fileName + "'"); - } - } - } - - /** - * Unregister the resource adapter. - * - * @param ctx Context to use for unregistering an RAR - * @throws Exception error encountered - */ - public void unRegisterRar(final Context ctx) throws Exception { - String rarFileName; - try { - rarFileName = (String) ctx.lookup("rarFileName"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new ResourceServiceException(err, e); - } catch (Exception ex) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, - "TEST Unregister MBeans for RAR in file: " + rarFileName); - } - - String rarPath = (new File(rarFileName)).toURL().getPath(); - Rar rar = fileName2RA.get(rarPath); - // rar.unregister clear the Rar JNDI names Vector, so we have to clone it - // Otherwise, we won't remove any JNDI names from the jndiName2RA Map - // Leading to strange behavior during start/stop/start sequence - Vector jNames = (Vector) rar.getJndinames().clone(); - rar.unRegister(getDomainName()); - - // Remove rars from hashtables - for (int i = 0; i < jNames.size(); i++) { - jndiName2RA.remove(jNames.get(i)); - } - fileName2RA.remove(rarPath); - resourceNames.remove(normalizePath(rarFileName)); - - logger.log(BasicLevel.DEBUG, "Unregistering RAR: " - + rarFileName); - } - - /** - * Return the JDBC ResourceAdapter MBean ObjectNames deployed in the current - * server. The JDBC ResourceAdapters have a 'properties' attribute containing - * the following properties set (not null and not empty): 'dsClass', 'URL'. - * - * @return The found MBean ObjectNames or null if no JDBC ResourceAdapter - * MBean registered for the current server in the current domain. - * @throws Exception The ResourceAdapter MBeans checking failed. - */ - public ObjectName[] getJDBCResourceAdapaters() throws Exception { - ObjectName[] result = null; - ObjectName raOns = J2eeObjectName.getResourceAdapters(getDomainName(), - getJonasServerName()); - MBeanServer mbeanServer = jmxService.getJmxServer(); - Set ons = mbeanServer.queryNames(raOns, null); - if (ons.isEmpty()) { - return null; - } - // Got ResourceAdapters for this server - ArrayList al = new ArrayList(); - - for (Iterator it = ons.iterator(); it.hasNext();) { - ObjectName aRaOn = it.next(); - Properties props = (Properties) mbeanServer.getAttribute(aRaOn, - "properties"); - String dsClassValue = props.getProperty("dsClass"); - String urlValue = props.getProperty("URL"); - if (dsClassValue != null && dsClassValue.length() != 0 - && urlValue != null && urlValue.length() != 0) { - // This is a well configured JDBC ResourceAdapter - al.add(aRaOn); - } - } - int nbJDBCResourceAdapaters = al.size(); - if (nbJDBCResourceAdapaters == 0) { - return null; - } else { - result = new ObjectName[nbJDBCResourceAdapaters]; - for (int i = 0; i < nbJDBCResourceAdapaters; i++) { - result[i] = al.get(i); - } - } - return result; - } - - /** - * Return the JDBC ResourceAdapter MBean OBJECT_NAME deployed in the current - * server having the 'jndiName' attribute value equal to the given jndiName. - * - * @param jndiName A DataSource JNDI name we are looking for. - * @return The found MBean OBJECT_NAME or null if none of the JDBC - * ResourceAdapter MBean have the given JNDI name. - * @throws Exception The ResourceAdapter MBeans checking failed. - */ - public String getJDBCResourceAdapater(final String jndiName) - throws Exception { - String result = null; - ObjectName[] raOns = getJDBCResourceAdapaters(); - ObjectName raOn = null; - String raJndiName = null; - MBeanServer mbeanServer = jmxService.getJmxServer(); - if (raOns != null) { - for (int i = 0; i < raOns.length; i++) { - raOn = raOns[i]; - raJndiName = (String) mbeanServer.getAttribute(raOn, "jndiName"); - if (jndiName.equals(raJndiName)) { - // found the JDBC RA MBean having the given jndi name - return raOn.toString(); - } - } - } - return result; - } - - // -------------------------------------------------------------- - // MBean Methods - // -------------------------------------------------------------- - - /** - * @return Integer Total Number of Resources available in JOnAS - */ - public Integer getCurrentNumberOfResource() { - return getCurrentNumberOfRars(); - } - - /** - * @return Integer Total Number of Rars available in JOnAS - */ - public Integer getCurrentNumberOfRars() { - return Integer.valueOf(fileName2RA.size()); - } - - /** - * @return the list of RAR files deployed - */ - public List getDeployedRars() { - ArrayList al = new ArrayList(); - String rarFileName = null; - Enumeration keys = fileName2RA.keys(); - while (keys.hasMoreElements()) { - rarFileName = keys.nextElement(); - try { - al.add((new File(rarFileName)).toURL().getPath()); - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Unable to add rarfile " - + rarFileName + " to arraylist"); - } - } - } - return al; - } - - /** - * Deploy the resource adapter - * - * @param fileName the name of the rar file. - * @return String ObjectName of the deployed rar - * @throws Exception if unable to deploy the rar - */ - public String deployRar(final String fileName) - throws ResourceServiceException { - Context ctx = null; - String onRar = null; - try { - ctx = new ComponentContext(fileName); - ctx.rebind("rarFileName", fileName); - ctx.rebind("isInEar", Boolean.valueOf(false)); - ctx.rebind("classloader", extClassLoader); - onRar = createResourceAdapter(ctx); - } catch (Exception e) { - String err = "Error when deploying the rar file: " + fileName; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - e.printStackTrace(); - throw new ResourceServiceException(err, e); - } - return onRar; - } - - /** - * Test if the specified filename is already deployed or not. - * - * @param fileName the name of the rar file. - * @return true if the rar is deployed, else false. - */ - public Boolean isRarDeployed(final String fileName) { - return Boolean.valueOf(isRarLoaded(fileName)); - } - - /** - * Test if the specified unpack name is already deployed or not. This method - * is defined in the ResourceService interface. - * - * @param unpackName the name of the RAR file. - * @return true if the RAR is deployed, else false. - */ - public boolean isRarDeployedByUnpackName(final String unpackName) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "entering for unpackName= " - + unpackName); - } - /* - * // for each rar loaded Enumeration lc = ears.elements(); while - * (lc.hasMoreElements()) { Ear ear = (Ear) lc.nextElement(); // get - * unpack name of the ear String deployedUnpackName = new - * File(ear.getUnpackName()).getName() ; logger.log(BasicLevel.DEBUG, - * "deployedUnpackName=" + deployedUnpackName); - * - * if (deployedUnpackName.equals(unpackName)) { return true; } // else, - * go to the next loop } // not found - */ - return false; - } - - /** - * Undeploy the resource adapter. - * - * @param fileName the name of the rar file. - * @throws Exception if not able to undeploy the rar - */ - public void unDeployRar(final String filename) throws Exception { - String fileName = filename; - /* - * We have only the name of the file, not its associated path, so we - * look in the current directory and in the rar applications directory - */ - - boolean found = true; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Trying to undeploy: " + fileName - + " with the following deployed:" + fileName2RA); - } - - try { - // Determine if the RAR is in list - File f = new File(fileName); - if (!fileName2RA.containsKey(f.toURL().getPath())) { - found = false; - } - - if (!found) { - String err = "Cannot undeploy the rar '" + fileName - + "', it is not deployed."; - logger.log(BasicLevel.ERROR, err); - throw new ResourceServiceException(err); - } - } catch (Exception ex) { - String err = "Error trying to undeployRarMBean " + fileName; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - // We've got the file, now we bind the params - ComponentContext compctx = null; - try { - compctx = new ComponentContext(fileName); - compctx.rebind("rarFileName", fileName); - compctx.rebind("isInEar", Boolean.valueOf(false)); - // Call the function - unRegisterRar(compctx); - } catch (NamingException e) { - String err = "Error when binding parameters"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new ResourceServiceException(err, e); - } catch (Exception ex) { - String err = "Error when unRegistering rar " + fileName; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - ex.printStackTrace(); - throw new ResourceServiceException(err, ex); - } - - } - - /** - * Test if the specified filename is already deployed or not. - * - * @param fileName the name of the rar file. - * @return true if the rar is deployed, else false. - */ - public boolean isRarLoaded(final String fileName) { - - String updateName = null; - boolean isLoaded = false; - try { - if (fileName2RA.containsKey(fileName)) { - isLoaded = true; - } - } catch (Exception e) { - String err = "Cannot determine if the rar is deployed or not"; - logger.log(BasicLevel.ERROR, err); - return false; - } - - return isLoaded; - } - - // -------------------------------------------------------------- - // Private Methods - // -------------------------------------------------------------- - - /** - * Normalize the path for the platform. - * - * @param path the path to normalize - * @return String normalized path - */ - private String normalizePath(final String path) { - String ret = null; - if (File.separatorChar == '/') { - ret = path.replace('\\', File.separatorChar); - } else { - ret = path.replace('/', File.separatorChar); - } - return ret; - } - - /** - * @param transactionService the transactionService to set - */ - public void setTransactionService( - final TransactionService transactionService) { - this.transactionService = transactionService; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param workManagerService the workManagerService to set - */ - public void setWorkManagerService( - final WorkManagerService workManagerService) { - this.workManagerService = workManagerService; - } - - /** - * @param deployerManager the deployerManager to set - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Sets the JOnAS deployment plan deployer service. - * - * @param deploymentPlanDeployer the JOnAS deployment plan deployer service. - */ - public void setDeploymentPlanDeployer(final DeploymentPlanDeployer deploymentPlanDeployer) { - this.deploymentPlanDeployer = deploymentPlanDeployer; - } - - /** - * @param registry the registry service to set - */ - public void setRegistryService(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Returns the registry service. - * - * @return The registry service - */ - private RegistryService getRegistryService() { - return registryService; - } - - /** - * get the Rar matching the jndiNname will be used in EJB container to - * deploy an MDB - * - * @param jndiName jndi name to lookup - * @return Rar Rar object for the specified jndi name - */ - public org.ow2.jonas.resource.Rar getRar(final String jndiName) { - synchronized (jndiName2RA) { - Rar ra = jndiName2RA.get(jndiName); - return ra; - } - } - - /** - * get the RAR ConnectorDesc object matching the JNDI name. - * - * @param jndiName the JNDI name to lookup - * @return ConnectorDesc matching ConnectorDesc - */ - public ConnectorDesc getConnectorDesc(final String jndiName) { - synchronized (jndiName2RA) { - Rar rar = jndiName2RA.get(jndiName); - if (rar != null) { - return (rar.getConnectorDesc()); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Can't find " + jndiName + " in " - + jndiName2RA); - } - return null; - } - } - - /** - * get the RAR JonasConnectorDesc object matching the JNDI name. - * - * @param jndiName the JNDI name to lookup - * @return JonasConnectorDesc matching JonasConnectorDesc - */ - public JonasConnectorDesc getJonasConnectorDesc(final String jndiName) { - synchronized (jndiName2RA) { - Rar rar = jndiName2RA.get(jndiName); - if (rar != null) { - return (rar.getJonasConnectorDesc()); - } - return null; - } - } - - /** - * get the ResourceAdapter matching the jndiName will be used in - * ResourceObjectJNDIHandler class at lookup time. - * - * @param jndiName to lookup ResourceObject - * @return Object resourceObject corresponding to jndiName - */ - public static Object getResourceObject(final String jndiName) { - Rar ra = null; - synchronized (jndiName2RA) { - ra = jndiName2RA.get(jndiName); - } - if (ra != null) { - return (ra.getFactory(jndiName)); - } - return null; - } - - /** - * get the ResourceAdapter Connector object matching the jndiName. - * - * @param jndiName String of jNDI name - * @return String for the jndiName - */ - public String getXmlContent(final String jndiName) { - synchronized (jndiName2RA) { - Rar rar = jndiName2RA.get(jndiName); - if (rar != null) { - return (rar.getXmlContent()); - } - return null; - } - } - - /** - * get the ConfigObj object matching the jndiName. - * - * @param jndiName String of JNDI name - * @return Object for the jndiName - */ - public Object getConfigObject(final String jndiName) { - Rar ra = null; - synchronized (jndiName2RA) { - ra = jndiName2RA.get(jndiName); - } - if (ra != null) { - return (ra.getConfigObj(jndiName)); - } - return null; - } - - /** - * @return work directory for rars. - */ - protected String getRarsWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "rars"; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceServiceMBean.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceServiceMBean.java deleted file mode 100644 index 1bbf9b100d..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/JOnASResourceServiceMBean.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): Michel Bruno and Guillaume Riviere - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.util.List; - - -/** - * MBean Interface for Resource Service Management. - * MBean type: Standard - * MBean model: Inheritance (ResourceServiceImpl) - */ -public interface JOnASResourceServiceMBean { - - /** - * @return current number of rars deployed in the JOnAS server - */ - Integer getCurrentNumberOfRars(); - - /** - * @return the list of RAR files deployed - * @throws Exception if error retrieving the list - */ - List getDeployedRars() throws Exception; -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/RARDeployer.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/RARDeployer.java deleted file mode 100644 index 010351ec12..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/RARDeployer.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import org.ow2.jonas.resource.ResourceService; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.RARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This deployer will deploy RAR module. - * @author Florent BENOIT - */ -public class RARDeployer extends AbsDeployer { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(RARDeployer.class); - - /** - * Resource service used by this deployer. - */ - private ResourceService resourceService = null; - - /** - * Undeploy the given RAR. - * @param deployable the deployable to remove. - * @throws DeployerException if the RAR is not undeployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - logger.info("Undeploying {0}", deployable.getShortName()); - - // Undeploy the RAR file - try { - resourceService.unDeployRar(getFile(deployable).getAbsolutePath()); - } catch (Exception e) { - throw new DeployerException("Cannot deploy the RAR deployable '" + deployable + "'.", e); - } - } - - /** - * Deploy the given RAR. - * @param deployable the deployable to add. - * @throws DeployerException if the RAR is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - logger.info("Deploying {0}", deployable.getShortName()); - - // Deploy the RAR file - try { - resourceService.deployRar(getFile(deployable).getPath()); - } catch (Exception e) { - throw new DeployerException("Cannot deploy the RAR deployable '" + deployable + "'.", e); - } - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return RARDeployable.class.isInstance(deployable); - } - - /** - * Sets the RAR service. - * @param resourceService RAR service. - */ - public void setResourceService(final ResourceService resourceService) { - this.resourceService = resourceService; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/Rar.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/Rar.java deleted file mode 100644 index f8e020b18d..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/Rar.java +++ /dev/null @@ -1,1621 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Vector; -import java.util.jar.JarEntry; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.NamingException; -import javax.resource.Referenceable; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.ResourceAdapterAssociation; -import javax.resource.spi.ResourceAllocationException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.ejb.ActivationConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.AdminobjectDesc; -import org.ow2.jonas.deployment.rar.AuthenticationMechanismDesc; -import org.ow2.jonas.deployment.rar.ConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.ConnectionDefinitionDesc; -import org.ow2.jonas.deployment.rar.ConnectorDesc; -import org.ow2.jonas.deployment.rar.InboundResourceadapterDesc; -import org.ow2.jonas.deployment.rar.JonasActivationspecDesc; -import org.ow2.jonas.deployment.rar.JonasAdminobjectDesc; -import org.ow2.jonas.deployment.rar.JonasConnectionDefinitionDesc; -import org.ow2.jonas.deployment.rar.JonasConnectorDesc; -import org.ow2.jonas.deployment.rar.MessageadapterDesc; -import org.ow2.jonas.deployment.rar.MessagelistenerDesc; -import org.ow2.jonas.deployment.rar.OutboundResourceadapterDesc; -import org.ow2.jonas.deployment.rar.RarDeploymentDesc; -import org.ow2.jonas.deployment.rar.RequiredConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.ResourceadapterDesc; -import org.ow2.jonas.deployment.rar.TmConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.lib.RarDeploymentDescManager; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.bootstrap.loader.JClassLoader; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.JJarFile; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.ModuleNamingUtils; -import org.ow2.jonas.resource.ResourceServiceException; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerImpl; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerPoolParams; -import org.ow2.jonas.resource.internal.mbean.JCAActivationSpec; -import org.ow2.jonas.resource.internal.mbean.JCAAdminObject; -import org.ow2.jonas.resource.internal.mbean.JCAResource; -import org.ow2.jonas.resource.internal.mbean.ResourceAdapterModule; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.util.url.URLUtils; - -/** - * Rar object. - * @author Eric Hardesty - */ -public class Rar implements org.ow2.jonas.resource.Rar { - - /** - * Main logger - */ - private static Logger logger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".process"); - - /** - * Pool infomation logger - */ - private static Logger poolLogger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".pool"); - - /** - * Config property setter logger - */ - private static Logger setterLogger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".setters"); - - /** - * Management logger - */ - private static Logger manageLogger = Log.getLogger(Log.JONAS_JCA_PREFIX + ".management"); - - String rarFileName = null; - ClassLoader curLoader = null; - boolean isInEar; - URL earUrl = null; - Context rCtx = null; - String jDomain = null; - String jServer = null; - Vector jndinames = new Vector(); - - String lnkJndiName = ""; - String lnkRarFilename = ""; - - JCAResource jcaResourceMBean = null; - String JCAResourceName = null; - - // J2EE CA 1.5 objects - private ResourceBootstrapContext bootCtx = null; - - // Properties for inits - - // JCA resource service configuration parameters - public static final String CLASS = "jonas.service.resource.class"; - public static final String JNDI_NAME = "jndiname"; - public static final String RAR_FILENAME = "rarfilename"; - public static final String LNK_JNDI_NAME = "lnkjndiname"; - public static final String LNK_RAR_FILENAME = "lnkrarfilename"; - public static final String OBJ_TYPE = "objtype"; - public static final String RESOURCE_LIST = "jonas.service.resource.resources"; - - public static final int DEF_WRK_THREADS = 5; - public static final int DEF_EXEC_TIME = 0; - - public static final String JCD = "JCD"; - public static final String JAS = "JAS"; - public static final String JAO = "JAO"; - - public String objectName = null; - public String pathName = null; - public ResourceAdapter resAdp = null; - public ConnectorDesc raConn = null; - public JonasConnectorDesc lnkJonasConn = null; - public JonasConnectorDesc jonasConn = null; - - public String xmlContent = null; - public String jonasXmlContent = null; - - - private class ConfigObj { - public String type; - public int offset; - public String jndiName; - public String rarFilename; - public String lnkJndiName; - public String lnkRarFilename; - public String interfaceStr; - public String classStr; - public Object factory; - public ConnectionManager cm; - public boolean basicPass; - public boolean defaultAS; - public List reqConfigProps; - public ConfigObj(final String fType, final int off, final String jndi, final String fName, - final String intStr, final String clsStr, final Object fact) { - type = fType; - offset = off; - jndiName = jndi; - rarFilename = fName; - interfaceStr = intStr; - classStr = clsStr; - factory = fact; - cm = null; - reqConfigProps = null; - lnkJndiName = ""; - lnkRarFilename = ""; - defaultAS = false; - } - } - - /** - * Hold list of default ActivationSpecs - */ - private static Vector defaultAS = new Vector(); - - private Hashtable cfgObjs = new Hashtable(); - - /** - * The transaction manager in the server - */ - private TransactionManager tm = null; - - /** JMX Service */ - private JmxService jmx = null; - - /** - * JNDI Context - */ - private Context ictx = null; - - /** - * Resource Utility factory - */ - private ResourceUtility ru = null; - - /** - * JOnAS Generic RA - */ - private boolean jonasGeneric = false; - - /** - * - Get the loggers - * - Get the global jndi context - * - Get the list of the resource adapters. The list is reachable in the - * - context parameter under the name RESOURCE_LIST. - * - Get the transaction manager into the jndi - * - Set the XML validation property - */ - public Rar() { - curLoader = Thread.currentThread().getContextClassLoader(); - - ru = new ResourceUtility(null, logger, setterLogger, manageLogger); - } - - /** - * - Get the loggers - * - Get the global jndi context - * - Get the list of the resource adapters. The list is reachable in the - * - context parameter under the name RESOURCE_LIST. - * - Get the transaction manager into the jndi - * - Set the XML validation property - */ - public Rar(final Context ctx, - final String jDom, - final String jServ, - final ResourceBootstrapContext btCtx, - final TransactionManager txManager, - final JmxService jmxService) { - - try { - rarFileName = (String) ctx.lookup("rarFileName"); - isInEar = ((Boolean) ctx.lookup("isInEar")).booleanValue(); - if (isInEar) { - earUrl = (URL) ctx.lookup("earUrl"); - } - curLoader = (ClassLoader) ctx.lookup("classloader"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new ResourceServiceException(err, e); - } catch (Exception ex) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - - bootCtx = btCtx; - rCtx = ctx; - jDomain = jDom; - jServer = jServ; - - tm = txManager; - jmx = jmxService; - - ru = new ResourceUtility(jmx, logger, setterLogger, manageLogger); - } - - /** - * @param tm the {@link TransactionManager} to set - */ - public void setTransactionManager(final TransactionManager tm) { - this.tm = tm; - } - - /** - * @param jmx the {@link JmxService} to set - */ - public void setJMXService(final JmxService jmx) { - this.jmx = jmx; - } - - /** - * @param context the initial {@link Context} to set - */ - public void setInitialContext(final Context context) { - this.ictx = context; - } - - /** - * Process the resource adapter. This Resource Adapter is configured via - * xml files in the rar file - */ - public Context processRar(final String domainName, final JOnASResourceService rserv) throws Exception { - - String onRar = null; - // Get the ra.xml and jonas-ra.xml descriptions - RarDeploymentDesc radesc = RarDeploymentDescManager.getInstance(rCtx); - ConnectorDesc conn = radesc.getConnectorDesc(); - JonasConnectorDesc jConn = radesc.getJonasConnectorDesc(); - xmlContent = radesc.getXmlContent(); - jonasXmlContent = radesc.getJOnASXmlContent(); - ConnectionManager cm = null; - ManagedConnectionFactory mcf = null; - - if (conn == null && jConn == null) { - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") must be a valid RAR file."); - throw new Exception("resource input file incorrect"); - } - logger.log(BasicLevel.DEBUG, "Process Resource " + rarFileName); - - // Figure out if this Rar is a generic jonas rar - // maybe we should do more checking ? - if (rarFileName.indexOf("JOnAS_jdbc") > 0) { - jonasGeneric = true; - logger.log(BasicLevel.INFO, rarFileName + " is generic"); - } - - // Check if rarlink is specified. - String rarVal = jConn.getRarlink(); - if (rarVal != null && rarVal.length() > 0) { - // rarlink is specified. - // If it has been processed, then get the correct - // Connector object and continue. - // if it has not been processed, then add this rar to the - // deferred list and it will be processed at end of the rar files. - lnkJndiName = rarVal; - conn = rserv.getConnectorDesc(lnkJndiName); - if (conn == null) { - return rCtx; - } - ConfigObj co = (ConfigObj) rserv.getConfigObject(lnkJndiName); - if (co == null) { - logger.log(BasicLevel.ERROR, "ConfigObject " + lnkJndiName + " not found."); - throw new Exception("ConfigObject not found"); - } - lnkRarFilename = co.rarFilename; - xmlContent = rserv.getXmlContent(lnkJndiName); - // Get the config parameters - lnkJonasConn = rserv.getJonasConnectorDesc(lnkJndiName); - } else if (conn == null) { - // No rarlink specified. - // make sure that the connector object is valid. - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") is not valid."); - throw new Exception("resource input file incorrect: no ra.xml file"); - } - bldSecurityTable(lnkJonasConn, jConn); - raConn = conn; - jonasConn = jConn; - - // Setup the global pool parameters - ConnectionManagerPoolParams cmpp = - ru.configurePoolParams(jConn.getPoolParamsDesc(), - jConn.getJdbcConnParamsDesc(), - null); - - // Process the RAR file adding each of the jar files into the classloader and if the - // native-lib is defined then place all other files into that directory. - - extractJars(rarFileName, jConn, rserv.getRarsWorkDirectory()); - - // Process the config values - ResourceadapterDesc ra = conn.getResourceadapterDesc(); - - // Check Authentication Mechanisms, must if some exist then BasicPassword - // must be present - boolean basicPass = true; - List authList = ra.getAuthenticationMechanismList(); - if (authList != null && authList.size() > 0) { - basicPass = false; - for (Iterator i = authList.iterator(); i.hasNext();) { - AuthenticationMechanismDesc am = (AuthenticationMechanismDesc) i.next(); - if (am.getAuthenticationMechanismType().equalsIgnoreCase("BasicPassword")) { - basicPass = true; - break; - } - } - if (!basicPass) { - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName + ") doesn't contain an AuthenticationMechanismType that is supported by JOnAS(BasicPassword)."); - throw new Exception("No AuthenticationMechanismType that is supported by JOnAS(BasicPassword)."); - } - } - - ConfigPropertyDesc [] cfgRaJonas = null; - - String logEnabled = null; - if (jConn.getLogEnabled() != null) { - logEnabled = jConn.getLogEnabled().trim(); - } - String logTopic = null; - if (jConn.getLogTopic() != null) { - logTopic = jConn.getLogTopic().trim(); - } - - Referenceable cf = null; - String jndiName = null; - String mcfc = null; - ConfigObj cObj = null; - - if (lnkJonasConn != null) { - cfgRaJonas = ru.buildConfigProperty(ra.getConfigPropertyList(), - jConn.getJonasConfigPropertyList(), - lnkJonasConn.getJonasConfigPropertyList()); - } else { - cfgRaJonas = ru.buildConfigProperty(ra.getConfigPropertyList(), - jConn.getJonasConfigPropertyList(), - null); - } - - Properties tmProp = new Properties(); - if (jConn.getTmParamsDesc() != null) { - List tmParams = jConn.getTmParamsDesc().getTmConfigPropertyList(); - if (tmParams != null) { - for (Iterator i = tmParams.iterator(); i.hasNext();) { - TmConfigPropertyDesc tpd = (TmConfigPropertyDesc) i.next(); - String tpdVal = tpd.getTmConfigPropertyValue(); - if (tpdVal == null) { - tpdVal = ""; - } - tmProp.setProperty(tpd.getTmConfigPropertyName(), tpdVal); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "TM Properties: " + tmProp); - } - } - } - - String specVersion = conn.getSpecVersion(); - if (specVersion.equals("1.0")) { - if (!jConn.isSetup()) { - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") must be a valid RAR file, there must be jonas-ra.xml file."); - throw new Exception("resource input file incorrect: no jonas-ra.xml file"); - } - jndiName = jConn.getJndiName().trim(); - logger.log(BasicLevel.DEBUG, jndiName); - onRar = registerRarMBean(cfgRaJonas, specVersion, jndiName, domainName, null, rarVal); - cm = ru.createConnectionManager(ra.getTransactionSupport(), tm, - logger, poolLogger, jndiName, jonasGeneric); - // Only need to build an MCF for a 1.0 resource adapter - mcfc = ra.getManagedconnectionfactoryClass(); - mcf = (ManagedConnectionFactory) ru.processMCF(cmpp, curLoader, rarFileName, - mcfc, - jndiName, logEnabled, logTopic, - cfgRaJonas, resAdp); - ((ConnectionManagerImpl) cm).setResourceAdapter(mcf, cmpp); - - cf = (Referenceable) mcf.createConnectionFactory(cm); - - // Add entry to list of configured objects - cObj = new ConfigObj(JCD, 0, jndiName, rarFileName, null, mcfc, cf); - cObj.cm = cm; - cObj.basicPass = basicPass; - - cfgObjs.put(jndiName, cObj); - - jndinames.add(jndiName); - - ru.registerMBean(cf, jndiName, onRar, rarFileName, conn, jonasConn, JCD, 0, - jcaResourceMBean, JCAResourceName, jDomain, jServer, ictx, - buildProp(cfgRaJonas), "", (ConnectionManagerImpl)cm); - ((ConnectionManagerImpl) cm).setXAName(ru.getJcaMcfName(jndiName)); - ((ConnectionManagerImpl) cm).registerXAResource(tmProp); - - } else if (conn.getSpecVersion().equals("1.5")) { - String raStr = conn.getResourceadapterDesc().getResourceadapterClass().trim(); - boolean isResAdapt = false; - logger.log(BasicLevel.DEBUG, "Starting deployment of " + rarFileName); - if (raStr != null && raStr.length() > 0) { - isResAdapt = true; - - // Create an instance of the RA and start it - // -------------------------------------------------- - - final String adapterClassname = raStr; - final ConfigPropertyDesc[] configuration = cfgRaJonas; - - IExecution exec = new IExecution() { - public ResourceAdapter execute() throws Exception { - - // Instantiate the resource adapter class - Class adapterClass = curLoader.loadClass(adapterClassname) - .asSubclass(ResourceAdapter.class); - ResourceAdapter adapter = adapterClass.newInstance(); - - // Inject values - ru.processSetters(adapterClass, adapter, rarFileName, configuration); - - // Call ResourceAdapter start method - adapter.start(bootCtx); - - return adapter; - } - }; - - // Execute within the specified ClassLoader - ExecutionResult execResult = RunnableHelper.execute(curLoader, exec); - - // Manage possible errors - if (execResult.hasException()) { - logger.log(BasicLevel.ERROR, "Rar: Error from resource (" + rarFileName + ") start method."); - throw new Exception("Error from start method. ", execResult.getException()); - } - - // Store managed RA instance - resAdp = execResult.getResult(); - - } - - onRar = registerRarMBean(cfgRaJonas, specVersion, null, domainName, conn.getResourceadapter().getResourceadapterClass(), rarVal); - - // Loop thru ConnectionDefinition(outbound) factories - OutboundResourceadapterDesc outRa = ra.getOutboundResourceadapterDesc(); - List cdList = null; - if (outRa != null) { - cdList = outRa.getConnectionDefinitionList(); - } - ConnectionDefinitionDesc conDef = null; - JonasConnectionDefinitionDesc jConDef = null; - String id = null; - int idOffset = -1; - if (cdList != null) { - if (cdList.size() > 0 && !jConn.isSetup()) { - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") must be a valid RAR file, there must be jonas-ra.xml file."); - throw new Exception("resource input file incorrect: no jonas-ra.xml file"); - } - for (int cd = 0; cd < cdList.size(); cd++) { - conDef = (ConnectionDefinitionDesc) cdList.get(cd); - id = conDef.getId(); - idOffset++; - jConDef = (JonasConnectionDefinitionDesc) - ru.getJonasXML(jConn, id, idOffset, JCD); - - - if (jConDef.getLogEnabled() != null) { - logEnabled = jConDef.getLogEnabled().trim(); - } - if (jConDef.getLogTopic() != null) { - logTopic = jConDef.getLogTopic().trim(); - } - ConfigPropertyDesc [] cfgCdDesc = - ru.buildConfigProperty(conDef.getConfigPropertyList(), - jConDef.getJonasConfigPropertyList(), - null); - ConnectionManagerPoolParams pool = - ru.configurePoolParams(jConDef.getPoolParamsDesc(), - jConDef.getJdbcConnParamsDesc(), - cmpp); - jndiName = jConDef.getJndiName().trim(); - cm = ru.createConnectionManager(outRa.getTransactionSupport(), tm, - logger, poolLogger, jndiName, false); - - mcfc = conDef.getManagedconnectionfactoryClass(); - mcf = (ManagedConnectionFactory) - ru.processMCF(pool, curLoader, rarFileName, - mcfc, jndiName, logEnabled, logTopic, - cfgCdDesc, resAdp); - ((ConnectionManagerImpl) cm).setResourceAdapter(mcf, pool); - - cf = (Referenceable) mcf.createConnectionFactory(cm); - - // Add entry to list of configured objects - cObj = new ConfigObj(JCD, idOffset, jndiName, rarFileName, null, mcfc, cf); - cObj.cm = cm; - cObj.basicPass = basicPass; - - cfgObjs.put(jndiName, cObj); - - jndinames.add(jndiName); - - String desc = ""; - List descList = jConDef.getDescriptionList(); - if (descList != null) { - for (int i = 0; i < descList.size(); i++) { - String tmp = (String) descList.get(i); - desc = desc + tmp; - } - } - ru.registerMBean(cf, jndiName, onRar, rarFileName, conn, jonasConn, JCD, idOffset, - jcaResourceMBean, JCAResourceName, jDomain, jServer, ictx, - buildProp(cfgCdDesc), desc, (ConnectionManagerImpl)cm); - - ((ConnectionManagerImpl) cm).setXAName(ru.getJcaMcfName(jndiName)); - ((ConnectionManagerImpl) cm).registerXAResource(tmProp); - } - } - - // We only want to do anything with Inbound or Adminobjects if the Resourceadapter - // class was specified, otherwise it is a 1.0 RAR with a 1.5 ra.xml - if (isResAdapt) { - // Loop thru Messagelisteners (inbound) factories - InboundResourceadapterDesc inAdapt = ra.getInboundResourceadapterDesc(); - MessageadapterDesc msgAdapt = null; - List mlList = null; - if (inAdapt != null) { - msgAdapt = inAdapt.getMessageadapterDesc(); - mlList = null; - if (msgAdapt != null) { - mlList = msgAdapt.getMessagelistenerList(); - } - } - MessagelistenerDesc msgList = null; - JonasActivationspecDesc jAct = null; - id = null; - idOffset = -1; - if (mlList != null) { - if (mlList.size() > 0 && !jConn.isSetup()) { - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") must be a valid RAR file, there must be jonas-ra.xml file."); - throw new Exception("resource input file incorrect: no jonas-ra.xml file"); - } - for (int ml = 0; ml < mlList.size(); ml++) { - msgList = (MessagelistenerDesc) mlList.get(ml); - id = msgList.getId(); - idOffset++; - jAct = (JonasActivationspecDesc) - ru.getJonasXML(jConn, id, idOffset, JAS); - - processJAS(rarFileName, msgList, jAct, idOffset); - } - } - - // Loop thru Adminobjects - List aoList = ra.getAdminobjectList(); - AdminobjectDesc admObj = null; - JonasAdminobjectDesc jAObj = null; - id = null; - idOffset = -1; - if (aoList != null) { - if (aoList.size() > 0 && !jConn.isSetup()) { - logger.log(BasicLevel.ERROR, "aoList = " + aoList); - logger.log(BasicLevel.ERROR, "Rar.processRar: Resource (" + rarFileName - + ") must be a valid RAR file, there must be jonas-ra.xml file."); - throw new Exception("resource input file incorrect: no jonas-ra.xml file"); - } - for (int ao = 0; ao < aoList.size(); ao++) { - admObj = (AdminobjectDesc) aoList.get(ao); - id = admObj.getId(); - idOffset++; - jAObj = (JonasAdminobjectDesc) - ru.getJonasXML(jConn, id, idOffset, JAO); - - ConfigPropertyDesc [] cfgCdDesc = - ru.buildConfigProperty(admObj.getConfigPropertyList(), - jAObj.getJonasConfigPropertyList(), - null); - - processJAO(rarFileName, admObj, jAObj, cfgCdDesc, idOffset); - } - } - } - } else { - logger.log(BasicLevel.ERROR, "ResourceService.createRA: Resource (" - + rarFileName - + ") must be specify a valid specification of 1.0 or 1.5."); - throw new Exception("resource input file incorrect: invalid specification support(only 1.0 & 1.5 are valid)"); - } - - logger.log(BasicLevel.INFO, new File(rarFileName).getName() + " available"); - try { - rCtx.rebind("onRar", onRar); - rCtx.rebind("deployed", new Boolean(true)); - } catch (Exception ex) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + ex.getMessage()); - throw new ResourceServiceException(err, ex); - } - return rCtx; - } - - - - /** - * Register the Rar. - * @param cfgRaJonas ConfigPropertyDesc [] - * @param specVersion String - * @param resourceAdapterClassname ra classname (only for 1.5 connectors) - * @return String jndiName of the Rar - * @throws Exception thrown - */ - private String registerRarMBean(final ConfigPropertyDesc [] cfgRaJonas, final String specVersion - , final String jndiName, final String domainName - , final String resourceAdapterClassname, final String rarLink) throws Exception { - - // -------------------------- - // Register MBeans cf. JSR 77 - // -------------------------- - - // The current server name. - // Maybe it should be received as a method parameter (similar to domainName). - String serverName = jServer; - - String raName = null; // ResourceAdapter name - Properties props = buildProp(cfgRaJonas); - - // MBean resources registering - URL rarURL = (new File(rarFileName)).toURL(); - String jmxRaName = rarURL.getFile().replace(':', '|'); - - // ResourceAdapterModule MBean - // --------------------------- - String appName = null; - if (isInEar) { - appName = ModuleNamingUtils.fromURL(earUrl); - } - - // ResourceAdapter Module name - String resourceAdapterModuleName = buildModuleName(jmxRaName, appName); - - ObjectName onResourceAdapterModule = - J2eeObjectName.getResourceAdapterModule(jDomain, - jServer, - appName, - resourceAdapterModuleName); - - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "ObjectName created for ResourceAdapterModule: " + onResourceAdapterModule.toString()); - } - - ResourceAdapterModule raModuleMBean = new ResourceAdapterModule(onResourceAdapterModule, - isInEar, earUrl); - raModuleMBean.setFileName(jmxRaName); - raModuleMBean.setRarURL(rarURL); - raModuleMBean.setDeploymentDescriptor(xmlContent); - raModuleMBean.setJonasDeploymentDescriptor(jonasXmlContent); - raModuleMBean.setServer(J2eeObjectName.J2EEServerName(domainName, serverName)); - jmx.registerModelMBean(raModuleMBean, onResourceAdapterModule); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "ResourceAdapterModule MBean created"); - } - - // ResourceAdapter MBean - // --------------------- - raName = resourceAdapterModuleName; - ObjectName onResourceAdapter = J2eeObjectName.getResourceAdapter(jDomain, - resourceAdapterModuleName, - appName, - jServer, - raName); - org.ow2.jonas.resource.internal.mbean.ResourceAdapter raMBean = - new org.ow2.jonas.resource.internal.mbean.ResourceAdapter(onResourceAdapter.toString(), - props, - jndiName, - jmxRaName, - isInEar, - earUrl, - specVersion, - rarLink); - raMBean.setResourceAdapterClassname(resourceAdapterClassname); - jmx.registerModelMBean(raMBean, onResourceAdapter); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "ResourceAdapter ManagedBean created"); - } - - // Update the ResourceAdapterModule MBean with the ResourceAdapter MBean's OBJECT_NAME - raModuleMBean.setResourceAdapter(onResourceAdapter.toString()); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "ResourceAdapterModule ManagedBean updated"); - } - - // JCA Resource implemented by this ResourceAdapter - // ------------------------------------------------ - JCAResourceName = raName; // TO BE IMPLEMENTED - ObjectName onJCAResource = - J2eeObjectName.getJCAResource(jDomain, - jServer, - raName, - JCAResourceName); - jcaResourceMBean = new JCAResource(onJCAResource.toString()); - jmx.registerModelMBean(jcaResourceMBean, onJCAResource); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAResource J2EEResource created"); - } - - // Update the ResourceAdapter MBean with the JCAResource MBean's OBJECT_NAME - raMBean.setJcaResource(onJCAResource.toString()); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAResource J2EEResource updated"); - } - - return onResourceAdapterModule.toString(); - } - - - /** - * Unregister the resource adapter. - * - * @throws Exception thrown - */ - public void unRegister(final String domainName) throws Exception { - - for (int i = 0; i < jndinames.size(); i++) { - String jName = (String) jndinames.get(i); - ConfigObj co = (ConfigObj) cfgObjs.get(jName); - try { - // Unbind from jndi - ictx.unbind(jName); - } catch (NamingException ex) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "ResourceService: cannot unbind jndiname of " - + jName + " for ResourceAdapter " - + rarFileName, ex); - } - throw new ServiceException("Cannot unregister", ex); - } - - if (co.defaultAS) { - removeDefaultAS(jName); - } - if (co != null) { // Add for now, take out for final - if (co.cm != null) { - // The connection manger must stop managing the RA - ((ConnectionManagerImpl) co.cm).cleanResourceAdapter(); - } - } - - } - cfgObjs.clear(); - jndinames.clear(); - - // -------------------------- - // unregister MBeans cf. JSR 77 - // -------------------------- - // MBean resourcesource registering - String jmxRaName = (new File(rarFileName)).toURL().getFile().replace(':', '|'); - - // Construct ResourceAdapterModule MBean name - // ------------------------------------------ - String appName = null; - if (isInEar) { - appName = ModuleNamingUtils.fromURL(earUrl); - } - // ResourceAdapter Module name - String resourceAdapaterModuleName = buildModuleName(jmxRaName, appName); - ObjectName onResourceAdapterModule = - J2eeObjectName.getResourceAdapterModule(jDomain, - jServer, - appName, - resourceAdapaterModuleName); - MBeanServer mbeanServer = jmx.getJmxServer(); - try { - String[] resourceAdapterNames = (String[]) mbeanServer.getAttribute(onResourceAdapterModule, "resourceAdapters"); - - // Unregister ResourceAdapterModule MBean - jmx.unregisterModelMBean(onResourceAdapterModule); - - // Unregister ResourceAdapters - for (int i = 0; i < resourceAdapterNames.length; i++) { - String resourceAdapterName = resourceAdapterNames[i]; - ObjectName onResourceAdapater = new ObjectName(resourceAdapterName); - // Determine this ResourceAdapter's JCAResource - String jcaResourceName = (String) mbeanServer.getAttribute(onResourceAdapater, "jcaResource"); - // Update the list of resources in the J2EEServer MBean with the JCAResource MBean's OBJECT_NAME - jmx.unregisterModelMBean(onResourceAdapater); - ObjectName onJCAResource = new ObjectName(jcaResourceName); - String [] connectionFactoriesNames = (String []) mbeanServer.getAttribute(onJCAResource, "connectionFactories"); - // Unregister the JCA ConnectionFactories of this JCAResource - for (int j = 0; j < connectionFactoriesNames.length; j++) { - String connectionFactoryName = connectionFactoriesNames[j]; - ObjectName onJCAConnectionFactory = new ObjectName(connectionFactoryName); - String managedConnectionFactoryName = (String) mbeanServer.getAttribute(onJCAConnectionFactory, "managedConnectionFactory"); - jmx.unregisterModelMBean(onJCAConnectionFactory); - jmx.unregisterModelMBean(new ObjectName(managedConnectionFactoryName)); - } - String [] adminObjectNames = (String []) mbeanServer.getAttribute(onJCAResource, "adminObjects"); - // Unregister the JCA AdminObjects of this JCAResource - for (int j = 0; j < adminObjectNames.length; j++) { - String adminObjectName = adminObjectNames[j]; - ObjectName onJCAAdminObject = new ObjectName(adminObjectName); - jmx.unregisterModelMBean(onJCAAdminObject); - } - String [] activationSpecNames = (String []) mbeanServer.getAttribute(onJCAResource, "activationSpecs"); - // Unregister the JCA ActivationSpecs of this JCAResource - for (int j = 0; j < activationSpecNames.length; j++) { - String activationSpecName = activationSpecNames[j]; - ObjectName onJCAActivationSpec = new ObjectName(activationSpecName); - jmx.unregisterModelMBean(onJCAActivationSpec); - } - jmx.unregisterModelMBean(onJCAResource); - } - } catch (MalformedObjectNameException ma) { - logger.log(BasicLevel.ERROR, "Cannot cleanly unregister RAR: ", ma); - } catch (MBeanRegistrationException mr) { - logger.log(BasicLevel.ERROR, "Cannot cleanly unregister RAR: ", mr); - } catch (InstanceNotFoundException infe) { - logger.log(BasicLevel.ERROR, "Cannot cleanly unregister RAR: ", infe); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot cleanly unregister RAR: ", e); - } - - // Call Resourceadapter stop - if (resAdp != null) { - // Stops the ResourceAdapter in an execution block - IExecution exec = new IExecution() { - public Void execute() throws Exception, Error { - resAdp.stop(); - return null; - } - }; - - // Execute - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), exec); - - // Throw an ServiceException if needed - if (result.hasException()) { - throw result.getException(); - } - } - - } - - //-------------------------------------------------------------- - // Other Method - //-------------------------------------------------------------- - - /** - * get the ConfigObj matching the jndiname specified - * - * @param jndiName String of jndi name - * @return Object ConfigObj associated with the jndi name - */ - public Object getConfigObj(final String jndiName) { - synchronized (cfgObjs) { - ConfigObj co = (ConfigObj) cfgObjs.get(jndiName); - return co; - } - } - - /** - * get the ResourceAdapter Connector object for this Rar - * - * @return ConnectorDesc associated resource adapter connector object - */ - public ConnectorDesc getConnectorDesc() { - return raConn; - } - - /** - * set the ResourceAdapter Connector object for this Rar - * - * @param cd ConnectorDesc to associate with - */ - public void setConnectorDesc(final ConnectorDesc cd) { - raConn = cd; - } - - /** - * get the Xml Content for this Rar - * - * @return String Xml content of this RAR - */ - public String getXmlContent() { - return xmlContent; - } - - /** - * get the JonasConnector object for this Rar - * - * @return JonasConnectorDesc associated JonasConnector - */ - public JonasConnectorDesc getJonasConnectorDesc() { - return jonasConn; - } - - /** - * set the JonasConnector object for this Rar - * - * @param jcd JonasConnectorDesc to associate with - */ - public void setJonasConnectorDesc(final JonasConnectorDesc jcd) { - jonasConn = jcd; - } - - public Object getFactory(final String jndiname) { - ConfigObj co = (ConfigObj) cfgObjs.get(jndiname); - return (co == null ? null : co.factory ); - } - - public String getInterface(final String jndiname) { - ConfigObj co = (ConfigObj) cfgObjs.get(jndiname); - return (co == null ? null : co.interfaceStr ); - } - - public Vector getJndinames() { - return jndinames; - } - - public ResourceAdapter getResourceAdapter() { - return resAdp; - } - - public void configureAS(final ActivationSpec as, final List acp, final List jacp, final String jndiname, - final String ejbName) throws Exception { - ConfigPropertyDesc [] asCp = ru.buildConfigProperty(null, acp, jacp); - - // set resource adapter if not already done - if (((ResourceAdapterAssociation) as).getResourceAdapter() == null) { - ((ResourceAdapterAssociation) as).setResourceAdapter(resAdp); - } - ru.processSetters(as.getClass(), as, ejbName, asCp); - validateAS(as, jndiname, acp, jacp); - } - - //-------------------------------------------------------------- - // Private Methods - //-------------------------------------------------------------- - - private void validateAS(final ActivationSpec as, final String jndiname, - final List acp, final List jacp) throws Exception { - boolean found = false; - String reqName = null; - RequiredConfigPropertyDesc rcProp = null; - ActivationConfigPropertyDesc acProp = null; - // Check that the req properties have been satisfied - ConfigObj co = (ConfigObj) cfgObjs.get(jndiname); - for (Iterator r = co.reqConfigProps.iterator(); r.hasNext();) { - rcProp = (RequiredConfigPropertyDesc) r.next(); - found = false; - reqName = rcProp.getConfigPropertyName(); - if (acp != null) { - for (Iterator i = acp.iterator(); i.hasNext();) { - acProp = (ActivationConfigPropertyDesc) i.next(); - if (reqName.equals(acProp.getActivationConfigPropertyName())) { - found = true; - break; - } - } - } - if (!found && jacp != null) { - for (Iterator i = jacp.iterator(); i.hasNext();) { - acProp = (ActivationConfigPropertyDesc) i.next(); - if (reqName.equals(acProp.getActivationConfigPropertyName())) { - found = true; - break; - } - } - } - if (!found) { - logger.log(BasicLevel.ERROR, "Required property " + reqName + " not specified "); - throw new ResourceAllocationException("Required property " + reqName + " not specified "); - } - } - - // Call validate - try { - as.validate(); - } catch (UnsupportedOperationException uoe) { - // treat this as no error from validate - } catch (Exception ex) { - logger.log(BasicLevel.ERROR, "Error from ActivationSpec.validate(). " + ex); - throw new ResourceAllocationException("Error from ActivationSpec.validate(). ", ex); - } - - } - - /** - * Build Security Table - */ - private void bldSecurityTable(final JonasConnectorDesc lnkJCon, final JonasConnectorDesc jCon) { - // TODO - } - - /** - * - * @param rarFileName String of rar file - * @param appName the name of the application - * @return String of module name - */ - public static String buildModuleName(final String rarFileName, final String appName) { - String sName = null; - try { - sName = new File(rarFileName).getName(); - int iPos = sName.lastIndexOf('.'); - if (iPos > -1) { - sName = sName.substring(0, iPos); - } - } catch (NullPointerException e) { - // none action - } - if (appName != null) { - StringBuffer sbName = new StringBuffer(appName); - sbName.append("."); - sbName.append(sName); - sName = sbName.toString(); - } - - return sName; - } - - /** - * Create the factory specified. - * - * @param jndiName name to bind the factory - * @param rarObjectName unique name to match rar - * @param factoryOffset factory offset in the to create - * @param factoryType factory type to create - * @param conn ConnectionDesc object to use for creation - * @param jConn JonasConnectionDesc object to use for creation - * @return Object factory created - * @throws Exception if an error occurs - */ - public Object createFactory(final String jndiName, - final String rarObjectName, - final int factoryOffset, - final String factoryType, - final ConnectorDesc conn, - final JonasConnectorDesc jConn) - throws Exception { - - ResourceUtility ru = new ResourceUtility(null, logger, setterLogger, manageLogger); - Object factory = null; - ManagedConnectionFactory mcf = null; - ResourceadapterDesc ra = conn.getResourceadapterDesc(); - /** - * Can currently assume Basic Password support since the RAR must have already been - * deployed correctly - */ - - /** - * Needed if a 1.5 rar and ResourceAdapterAssociation is implemented - */ - ResourceAdapter resAdp = null; - - String logEnabled = null; - if (jConn.getLogEnabled() != null) { - logEnabled = jConn.getLogEnabled().trim(); - } - String logTopic = null; - if (jConn.getLogTopic() != null) { - logTopic = jConn.getLogTopic().trim(); - } - String specVersion = conn.getSpecVersion(); - - ConnectionManager cm = null; - String jBase = null; - try { - jBase = System.getProperty("jonas.base"); - if (tm != null) { - // We're inside a JOnAS instance (Server) - cm = ru.createConnectionManager(ra.getTransactionSupport(), - tm, - logger, - poolLogger, jndiName, false); - } - // cm is null in Client case (no TM) - } catch (Exception ex) { - logger.log(BasicLevel.ERROR, "Use default ConnectionManager: " + rarObjectName); - } - - // Build the global config and pool values - ConfigPropertyDesc [] cfgRaJonas = - ru.buildConfigProperty(ra.getConfigPropertyList(), - jConn.getJonasConfigPropertyList(), - null); - ConnectionManagerPoolParams cmpp = ru.configurePoolParams(jConn.getPoolParamsDesc(), - jConn.getJdbcConnParamsDesc(), - null); - Properties tmProp = new Properties(); - if (jConn.getTmParamsDesc() != null) { - List tmParams = jConn.getTmParamsDesc().getTmConfigPropertyList(); - if (tmParams != null) { - for (Iterator i = tmParams.iterator(); i.hasNext();) { - TmConfigPropertyDesc tpd = (TmConfigPropertyDesc) i.next(); - String tpdVal = tpd.getTmConfigPropertyValue(); - if (tpdVal == null) { - tpdVal = ""; - } - tmProp.setProperty(tpd.getTmConfigPropertyName(), tpdVal); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "TM Properties: " + tmProp); - } - } - } - - if (specVersion.equals("1.0")) { - // Only need to build an MCF for a 1.0 resource adapter - mcf = (ManagedConnectionFactory) ru.processMCF(cmpp, curLoader, rarObjectName, - ra.getManagedconnectionfactoryClass(), - jndiName, logEnabled, logTopic, - cfgRaJonas, resAdp); - if (cm != null) { - // Server - ((ConnectionManagerImpl) cm).setResourceAdapter(mcf, cmpp); - factory = mcf.createConnectionFactory(cm); - } else { - // Client - factory = mcf.createConnectionFactory(); - } - - } else if (specVersion.equals("1.5")) { - // Need to figure out how to call RA.start() under some circumstances - boolean callStart = false; - - String raStr = conn.getResourceadapterDesc().getResourceadapterClass().trim(); - if (raStr != null && raStr.length() > 0) { - - // Instantiate the resource adapter class - Class raClass = curLoader.loadClass(raStr); - resAdp = (ResourceAdapter) raClass.newInstance(); - - ru.processSetters(raClass, resAdp, rarObjectName, cfgRaJonas); - - // Call Resourceadapter start method - try { - if (callStart) { - resAdp.start(bootCtx); - } - } catch (Exception ex) { - logger.log(BasicLevel.ERROR, "Rar: Error from resource (" + rarObjectName - + ") start method."); - throw new Exception("Error from start method. " + ex); - } catch (Throwable th) { - logger.log(BasicLevel.ERROR, "Rar: Error from resource (" + rarObjectName - + ") start method."); - throw new Exception("Error from start method. ", th); - } - } - - // Determine type - if (factoryType.equals(ResourceUtility.JCD)) { - OutboundResourceadapterDesc outRa = ra.getOutboundResourceadapterDesc(); - List cdList = null; - if (outRa != null) { - cdList = outRa.getConnectionDefinitionList(); - } - ConnectionDefinitionDesc conDef = null; - JonasConnectionDefinitionDesc jConDef = null; - String id = null; - if (cdList != null) { - conDef = (ConnectionDefinitionDesc) cdList.get(factoryOffset); - id = conDef.getId(); - jConDef = (JonasConnectionDefinitionDesc) - ru.getJonasXML(jConn, id, factoryOffset, ResourceUtility.JCD); - - if (jConDef.getLogEnabled() != null) { - logEnabled = jConDef.getLogEnabled().trim(); - } - if (jConDef.getLogTopic() != null) { - logTopic = jConDef.getLogTopic().trim(); - } - - // Create Config Property List - ConfigPropertyDesc [] cfgCdDesc = - ru.buildConfigProperty(conDef.getConfigPropertyList(), - jConDef.getJonasConfigPropertyList(), - null); - - // Only need to build an MCF for a 1.0 resource adapter - mcf = (ManagedConnectionFactory) ru.processMCF(cmpp, curLoader, rarObjectName, - conDef.getManagedconnectionfactoryClass(), - jndiName, logEnabled, logTopic, - cfgCdDesc, resAdp); - if (cm != null) { - // Server - ConnectionManagerPoolParams pool = - ru.configurePoolParams(jConDef.getPoolParamsDesc(), - jConDef.getJdbcConnParamsDesc(), - cmpp); - ((ConnectionManagerImpl) cm).setResourceAdapter(mcf, pool); - factory = mcf.createConnectionFactory(cm); - } else { - // Client - factory = mcf.createConnectionFactory(); - } - - } - } else if (factoryType.equals(ResourceUtility.JAO)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Cannot lookup remote admin object of " + jndiName); - } - return null; - } else if (factoryType.equals(ResourceUtility.JAS)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Cannot lookup remote activationspec of " + jndiName); - } - return null; - } - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "cf = " + factory); - } - // Need to register the RM with JOTM - if (factoryType.equals(ResourceUtility.JCD) && cm != null) { - // Call CM to register with JOTM - ((ConnectionManagerImpl) cm).setXAName(ru.getJcaMcfName(jndiName)); - ((ConnectionManagerImpl) cm).registerXAResource(tmProp); - } - return factory; - } - - /** - * add a default AS to the list, the first one deployed is the default - * if others are added then they will become default if this one is undeployed - * @param jndiName jndi name to add - */ - public static void addDefaultAS(final String jndiName) { - defaultAS.add(jndiName); - } - - /** - * return the current default ActivationSpec - * @return String default ActivationSpec name - */ - public static String getDefaultAS() { - String ret = null; - try { - ret = (String) defaultAS.firstElement(); - } catch (Exception ex) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "No default activationspec"); - } - } - return ret; - } - - /** - * remove the specified jndiName from the default AS list - * @param jndiName jndi name to remove - */ - public static void removeDefaultAS(final String jndiName) { - try { - defaultAS.remove(jndiName); - } catch (Exception ex) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Unable to remove default activationspec"); - } - } - } - - // -------------------------------------------------------------- - // Private Methods - // -------------------------------------------------------------- - - /** - * Build Properties from the RA configuration - */ - private Properties buildProp(final ConfigPropertyDesc[] cfgRaJonas) { - Properties ret = new Properties(); - if (cfgRaJonas != null) { - for (int i = 0; i < cfgRaJonas.length; i++) { - String val = cfgRaJonas[i].getConfigPropertyValue() != null ? cfgRaJonas[i].getConfigPropertyValue() - : ""; - ret.setProperty(cfgRaJonas[i].getConfigPropertyName(), val); - } - } - return ret; - } - - /** - * Process the specified rar, extracting all the jars files to be included - * in the classloader and all the native files needed by the rar. - * @param resFileName rar file to process - * @param jonasConn the jonas-ra.xml properties - * @param rarsWorkDirectory the rars working directory - * @throws ResourceServiceException if an error occurs during - * the extracting. - */ - private void extractJars(final String resFileName, - final JonasConnectorDesc jonasConn, - final String rarsWorkDirectory) - throws ResourceServiceException { - - String jarPath = rarsWorkDirectory + File.separator + "jonas" + File.separator; - String binPath = null; - if (jonasConn.getNativeLib() != null && jonasConn.getNativeLib().trim().length() > 0) { - binPath = jonasConn.getNativeLib().trim() + File.separator; - if (!(binPath.startsWith("/") || binPath.startsWith("\\") || binPath.charAt(1) == ':')) { - binPath = JProp.getJonasBase() + File.separator + binPath; - } - } - - // Get RAR name (seems to be the RA short name) - String rarName = resFileName; - if (rarName.endsWith(".rar")) { - rarName = resFileName.substring(0, resFileName.lastIndexOf('.')); - } - - int off = rarName.lastIndexOf(File.separator); - rarName = rarName.substring(++off); - if (File.separatorChar == '\\') { - off = rarName.lastIndexOf("/"); - rarName = rarName.substring(++off); - } - - // Place the rar URL itself in first position (relative to the jars - // included in the rar) in the ClassLoader - // Note: this brutal casting works in all case (it was at least working before my change :) ) - JClassLoader loader = (JClassLoader) curLoader; - loader.addURL(URLUtils.fileToURL(new File(resFileName))); - - JJarFile jjar = null; - try { - jjar = new JJarFile(resFileName); - List entries = Collections.list(jjar.entries()); - for (JarEntry je : entries) { - - if (!je.isDirectory() && je.getName().endsWith(".jar")) { - - // This is a jar file - // Unpack it in a dedicated work directory - String fileName = constructFilename(jarPath, rarName, je); - jjar.extract(je, fileName); - - // Add the jar library to the ClassLoader - loader.addURL(URLUtils.fileToURL(new File(fileName))); - - } else if (!je.isDirectory() && !je.getName().startsWith("META-INF") && (binPath != null)) { - - // This is a native library, unpack it in a known location (known before hand by the JVM) - String fileName = constructFilename(binPath, null, je); - jjar.extract(je, fileName); - } - } - } catch (Exception ex) { - String err = "Error while extracting the files from " + resFileName; - logger.log(BasicLevel.ERROR, err, ex); - throw new ResourceServiceException(err, ex); - } finally { - if (jjar != null) { - try { - jjar.close(); - } catch (IOException e) { - // Ignored - } - } - } - - } - - private String constructFilename(final String path, - final String rarName, - final JarEntry je) throws Exception { - - File filename = new File(path, je.getName()); - - // Create directory structure up to filename - File parent = filename.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - // Construct temp name for jar files from the rar - if (rarName != null) { - String name = "_" + rarName + "_" + filename.getName(); - filename = new File(parent, name); - } - return filename.getAbsolutePath(); - } - - private void processJAO(final String rarFilename, final AdminobjectDesc aObj, final JonasAdminobjectDesc jao, - final ConfigPropertyDesc [] cfgRaJonas, final int idOff) throws Exception { - - ConfigObj cObj = null; - String jndiName = jao.getJndiName(); - String aoDesc = ""; - for (Iterator r = jao.getDescriptionList().iterator(); r.hasNext();) { - String desc = (String) r.next(); - aoDesc += desc + " "; - } - if (jndiName == null || jndiName.length() == 0) { - logger.log(BasicLevel.ERROR, - "Rar: jndi-name not set in jonas-ra.xml for Adminobject: " + idOff); - throw new Exception("configuration file incorrect"); - } - - // Instantiate into the currect loader - String admObj = aObj.getAdminobjectClass(); - Class aoClass = curLoader.loadClass(admObj); - Object ao = aoClass.newInstance(); - - ru.processSetters(aoClass, ao, rarFileName, cfgRaJonas); - - jndinames.add(jndiName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "jndiName=" + jndiName); - } - - // Add entry to list of configured objects - cObj = new ConfigObj(JAO, idOff, jndiName, rarFileName, aObj.getAdminobjectInterface(), admObj, ao); - - cfgObjs.put(jndiName, cObj); - // - // Register into Jndi - try { - ictx.rebind(jndiName, ao); - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Rar: Cannot register ResourceAdapter with the name " - + jndiName); - logger.log(BasicLevel.ERROR, "Rar: Exception caught : " + e); - throw new Exception("Error binding jndiName: " + jndiName, e.getCause()); - } - - // -------------------------- - // Register MBeans cf. JSR 77 - // -------------------------- - - // Available Adminobjects - // ------------------------------------------------------------ - // Adminobject MBean - // ----------------------- - String jcaAdminobjectName = jndiName; - Properties p = buildProp(cfgRaJonas); - ObjectName onJCAAdminobject = - J2eeObjectName.getJCAAdminObject(jDomain, - JCAResourceName, - jServer, - jcaAdminobjectName); - JCAAdminObject jcaAdminobjectMBean = new JCAAdminObject(onJCAAdminobject.toString(), jndiName, aoDesc, p); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAAdminObject created"); - } - jmx.registerModelMBean(jcaAdminobjectMBean, onJCAAdminobject); - - // Update the list of connection factories in the JCAResource MBean with the JCAConnectionFactory - // MBean's OBJECT_NAME - jcaResourceMBean.setAdminObjects(onJCAAdminobject.toString()); - - - } - - private void processJAS(final String rarFilename, final MessagelistenerDesc mlst, final JonasActivationspecDesc jas, - final int idOff) throws Exception { - - ConfigObj cObj = null; - String jndiName = jas.getJndiName(); - String asDesc = ""; - for (Iterator r = jas.getDescriptionList().iterator(); r.hasNext();) { - String desc = (String) r.next(); - asDesc += desc + " "; - } - if (jndiName == null || jndiName.length() == 0) { - logger.log(BasicLevel.ERROR, - "Rar: jndi-name not set in jonas-ra.xml for Activationspec: " + idOff); - throw new Exception("configuration file incorrect"); - } - - // Instantiate into the currect loader - String mlIntf = mlst.getMessagelistenerType(); - String actSpec = mlst.getActivationspecDesc().getActivationspecClass(); - Class asClass = curLoader.loadClass(actSpec); - ActivationSpec as = - (ActivationSpec) asClass.newInstance(); - - jndinames.add(jndiName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "jndiName=" + jndiName); - } - - // Add entry to list of configured objects - cObj = new ConfigObj(JAS, idOff, jndiName, rarFilename, mlIntf, actSpec, as); - cObj.reqConfigProps = mlst.getActivationspecDesc().getRequiredConfigPropertyList(); - if (jas.getDefaultAS() != null && jas.getDefaultAS().equals("true")) { - cObj.defaultAS = true; - addDefaultAS(jndiName); - } - - cfgObjs.put(jndiName, cObj); - // - // Register into Jndi - try { - ictx.rebind(jndiName, as); - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Rar.processJAS: Cannot register ResourceAdapter with the name " + jndiName); - logger.log(BasicLevel.ERROR, "Rar.processJAS: Exception caught : " + e); - throw new Exception("Error binding jndiName: " + jndiName, e.getCause()); - } - - // -------------------------- - // Register MBeans cf. JSR 77 - // -------------------------- - - // Available ActivationSpecs - // ------------------------------------------------------------ - // ActivationSpec MBean - // ----------------------- - String jcaActivationSpecName = jndiName; - ObjectName onJCAActivationSpec = - J2eeObjectName.getJCAActivationSpec(jDomain, - JCAResourceName, - jServer, - jcaActivationSpecName); - JCAActivationSpec jcaActivationSpecMBean = new JCAActivationSpec(onJCAActivationSpec.toString(), jndiName, asDesc, cObj.reqConfigProps); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAActivationSpec created"); - } - jmx.registerModelMBean(jcaActivationSpecMBean, onJCAActivationSpec); - - // Update the list of connection factories in the JCAResource MBean with the JCAConnectionFactory - // MBean's OBJECT_NAME - jcaResourceMBean.setActivationSpecs(onJCAActivationSpec.toString()); - - } - -} - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceBootstrapContext.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceBootstrapContext.java deleted file mode 100644 index db10a2b235..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceBootstrapContext.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Eric Hardesty - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal; - -import java.util.Timer; - -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.UnavailableException; -import javax.resource.spi.work.WorkManager; -import javax.resource.spi.XATerminator; - -/** - * This class implements the BootstrapContext interface of the Connector Architecture - * 1.5 specification. - */ -public class ResourceBootstrapContext implements BootstrapContext { - - /** - * Work Manager - */ - private WorkManager wrkMgr = null; - /** - * XATerminator object - */ - private XATerminator xaTerm = null; - - /** - * Constructor - * @param wm WorkManager - * @param xa XATerminator - */ - public ResourceBootstrapContext(WorkManager wm, XATerminator xa) { - wrkMgr = wm; - xaTerm = xa; - } - - - /** - * Create a timer for use by the Resource Adapter - * @return Timer object - * @throws UnavailableException if a Timer instance is unavailable - */ - public Timer createTimer() throws UnavailableException { - return new Timer(true); - } - - /** - * Return the associated WorkManager - * @return WorkManger object - */ - public WorkManager getWorkManager() { - return wrkMgr; - } - - /** - * Return an XATerminator - * @return XATerminator object - */ - public XATerminator getXATerminator() { - return xaTerm; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceServiceConstants.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceServiceConstants.java deleted file mode 100644 index 80998c9d33..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceServiceConstants.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import javax.naming.Reference; - -import org.ow2.jonas.resource.ResourceService; - - -/** - * {@link ResourceService} constants holder interface. - * Used for {@link Reference} filling. - * @author Guillaume Sauthier - */ -public interface ResourceServiceConstants { - - /** - * Jndiname property name - */ - public static final String JNDI_NAME = "jndiname"; - - /** - * Rar object property name - */ - public static final String RAR_OBJNAME = "rarobjname"; - - /** - * Factory offset property name - */ - public static final String FACTORY_OFFSET = "factoryoffset"; - - /** - * Factory type property name - */ - public static final String FACTORY_TYPE = "factorytype"; - - /** - * Rar filename property name - */ - public static final String RAR_FILENAME = "rarfilename"; - - /** - * Jndiname link property name - */ - public static final String LNK_JNDI_NAME = "lnkjndiname"; - - /** - * Link Rar filename property name - */ - public static final String LNK_RAR_FILENAME = "lnkrarfilename"; - - /** - * Jonas ra.xml property name - */ - public static final String JONAS_RA_XML = "jonasraxml"; - - /** - * ra.xml property name - */ - public static final String RA_XML = "raxml"; - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceUtility.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceUtility.java deleted file mode 100644 index 0c3fa2437e..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/ResourceUtility.java +++ /dev/null @@ -1,815 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.io.PrintWriter; -import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Vector; - -import javax.management.ObjectName; -import javax.naming.BinaryRefAddr; -import javax.naming.Context; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.resource.Referenceable; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.ResourceAdapter; -import javax.resource.spi.ResourceAdapterAssociation; - -import org.apache.commons.modeler.Registry; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.ejb.ActivationConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.ConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.ConnectorDesc; -import org.ow2.jonas.deployment.rar.JdbcConnParamsDesc; -import org.ow2.jonas.deployment.rar.JonasConfigPropertyDesc; -import org.ow2.jonas.deployment.rar.JonasConnectorDesc; -import org.ow2.jonas.deployment.rar.PoolParamsDesc; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerImpl; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerPoolParams; -import org.ow2.jonas.resource.internal.mbean.JCAConnectionFactory; -import org.ow2.jonas.resource.internal.mbean.JCAManagedConnectionFactory; -import org.ow2.jonas.resource.internal.mbean.JCAResource; -import org.ow2.jonas.resource.internal.naming.ResourceObjectFactory; -import org.ow2.jonas.tm.TransactionManager; - -/** - * ResourceUtility class - * @author Eric Hardesty - * Contributor(s): - * - */ - -public class ResourceUtility { - - /** - * Main logger - */ - private static Logger logger = null; - /** - * Config property setter logger - */ - private static Logger setterLogger = null; - /** - * Management logger - */ - private static Logger manageLogger = null; - - /** - * Reference to a Registry object - */ - private Registry oRegistry = null; - - /** - * Reference to the jmx service - */ - private JmxService jmx = null; - - // Properties for inits - - /** - * JOnAS Connection Definition - */ - public static final String JCD = "JCD"; - /** - * JOnAS Activationspec - */ - public static final String JAS = "JAS"; - /** - * JOnAS Administrated Object - */ - public static final String JAO = "JAO"; - - /** - * Default constructor - * - */ - public ResourceUtility() { - } - - /** - * Constructor - * - * @param log Logger main logger - * @param sLog Logger setter logger - * @param mLog Logger management logger - */ - public ResourceUtility(final JmxService jmx, - final Logger log, final Logger sLog, final Logger mLog) { - this.jmx = jmx; - logger = log; - setterLogger = sLog; - manageLogger = mLog; - } - - /** - * - * @param raCfg List - * @param jRaCfg1 List - * @param jRaCfg2 List - * @return ConfigPropertyDesc array - */ - public ConfigPropertyDesc [] buildConfigProperty(final List raCfg, - final List jRaCfg1, - final List jRaCfg2) { - Vector cfVec = null; - ConfigPropertyDesc[] configs = null; - - // Global config parameters for the Resource adapter - if (raCfg != null) { - for (Iterator i = raCfg.iterator(); i.hasNext();) { - if (cfVec == null) { - cfVec = new Vector(); - } - ConfigPropertyDesc cpd = (ConfigPropertyDesc) i.next(); - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - String name = cpd.getConfigPropertyName(); - String val = cpd.getConfigPropertyValue(); - setterLogger.log(BasicLevel.DEBUG, "Standard config: " + name + "=" + val); - } - cfVec.add(new ConfigPropertyDesc(cpd)); - } - } else { //Special case for configuring ActivationSpecs - ActivationConfigPropertyDesc acp = null; - ConfigPropertyDesc cp = null; - if (jRaCfg1 != null) { - for (Iterator i = jRaCfg1.iterator(); i.hasNext();) { - if (cfVec == null) { - cfVec = new Vector(); - } - acp = (ActivationConfigPropertyDesc) i.next(); - cp = new ConfigPropertyDesc(); - cp.setConfigPropertyName(acp.getActivationConfigPropertyName()); - cp.setConfigPropertyValue(acp.getActivationConfigPropertyValue()); - cfVec.add(cp); - } - } - - if (cfVec == null) { - if (jRaCfg2 != null) { - for (Iterator i = jRaCfg2.iterator(); i.hasNext();) { - if (cfVec == null) { - cfVec = new Vector(); - } - acp = (ActivationConfigPropertyDesc) i.next(); - cp = new ConfigPropertyDesc(); - cp.setConfigPropertyName(acp.getActivationConfigPropertyName()); - cp.setConfigPropertyValue(acp.getActivationConfigPropertyValue()); - cfVec.add(cp); - } - if (cfVec != null) { - configs = new ConfigPropertyDesc[cfVec.size()]; - cfVec.copyInto(configs); - } - } - } else { - if (jRaCfg2 != null) { - boolean found = false; - for (Iterator i = jRaCfg2.iterator(); i.hasNext();) { - found = false; - acp = (ActivationConfigPropertyDesc) i.next(); - String name = acp.getActivationConfigPropertyName(); - String val = acp.getActivationConfigPropertyValue(); - if (val != null && val.length() > 0) { - for (int j = 0; j < cfVec.size(); j++) { - cp = (ConfigPropertyDesc) cfVec.get(j); - if (name.equalsIgnoreCase(cp.getConfigPropertyName())) { - cp.setConfigPropertyValue(val); - cfVec.set(j, cp); - found = true; - break; - } - } - // This is the case where a new activation-config property is in - // the jonas specific dd - if (!found) { - cp = new ConfigPropertyDesc(); - cp.setConfigPropertyName(name); - cp.setConfigPropertyValue(val); - cfVec.add(cp); - } - } - } - } - configs = new ConfigPropertyDesc[cfVec.size()]; - cfVec.copyInto(configs); - } - - if (cfVec == null) { - return null; - } - return configs; - } - - if (cfVec == null) { - return null; - } - - configs = new ConfigPropertyDesc[cfVec.size()]; - cfVec.copyInto(configs); - - JonasConfigPropertyDesc jcpNext = null; - if (jRaCfg2 != null) { - for (Iterator i = jRaCfg2.iterator(); i.hasNext();) { - jcpNext = (JonasConfigPropertyDesc) i.next(); - String name = jcpNext.getJonasConfigPropertyName(); - String val = jcpNext.getJonasConfigPropertyValue(); - if (val != null && val.length() > 0) { - for (int j = 0; j < configs.length; j++) { - if (name.equalsIgnoreCase(configs[j].getConfigPropertyName())) { - configs[j].setConfigPropertyValue(val); - break; - } - } - } - } - } - - if (jRaCfg1 != null) { - for (Iterator i = jRaCfg1.iterator(); i.hasNext();) { - jcpNext = (JonasConfigPropertyDesc) i.next(); - String name = jcpNext.getJonasConfigPropertyName(); - String val = jcpNext.getJonasConfigPropertyValue(); - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - setterLogger.log(BasicLevel.DEBUG, "Jonas config: " + name + "=" + val); - } - if (val != null && val.length() > 0) { - for (int j = 0; j < configs.length; j++) { - if (name.equalsIgnoreCase(configs[j].getConfigPropertyName())) { - configs[j].setConfigPropertyValue(val); - break; - } - } - } - } - } - return configs; - } - - /** - * - * @param inp String - * @return boolean - */ - private boolean checkLogEnabled(final String inp) { - if (inp.equals("1") || inp.equalsIgnoreCase("on") - || inp.equalsIgnoreCase("t") || inp.equalsIgnoreCase("true") - || inp.equalsIgnoreCase("y") || inp.equalsIgnoreCase("yes")) { - return true; - } - return false; - } - - /** - * - * @param trans String - * @param tm TransactionManager - * @param logger Logger - * @param poolLogger Logger - * @param jndiName String - * @param generic true if this RA is a generic (=abstract) RA - * @return ConnectionManager - * @throws Exception any exception - */ - public ConnectionManager createConnectionManager(final String trans, - final TransactionManager tm, - final Logger logger, - final Logger poolLogger, - final String jndiName, - final boolean generic) - throws Exception { - - ConnectionManagerImpl cm = new ConnectionManagerImpl(trans); - - Context c = new ComponentContext(""); - c.rebind(ConnectionManagerImpl.TRANSACTION_MANAGER, tm); - - // Set the MonologFactory into context of initialisation - c.rebind(ConnectionManagerImpl.LOGGER, logger); - c.rebind(ConnectionManagerImpl.POOL_LOGGER, poolLogger); - c.rebind(ConnectionManagerImpl.JNDINAME, jndiName); - - // Initialize the ConnectionManager with the configured Context - cm.init(c, generic); - return cm; - } - - /** - * Process the ManagedConnectionFactory object - * @param cmpp ConnectionManagerPoolParams - * @param curLoader ClassLoader - * @param rarName String - * @param mcfc String - * @param jndiName String - * @param logEnabled String - * @param logTopic String - * @param cfgRaJonas ConfigPropertyDesc array - * @param resAdp ResourceAdapter - * @return Object - * @throws Exception any exception - */ - public Object processMCF(final ConnectionManagerPoolParams cmpp, - final ClassLoader curLoader, - final String rarName, - final String mcfc, - final String jndiName, - final String logEnabled, - final String logTopic, - final ConfigPropertyDesc [] cfgRaJonas, - final ResourceAdapter resAdp) throws Exception { - - if (mcfc == null) { - logger.log(BasicLevel.ERROR, "ResourceService.createRA:" - + " managedconnectionfactoryclass property not found"); - throw new Exception("configuration file incorrect"); - } - - if (jndiName == null || jndiName.length() == 0) { - logger.log(BasicLevel.ERROR, "ResourceService.createRA: jndi-name not set in jonas-ra.xml"); - throw new Exception("configuration file incorrect"); - } - - // Instantiate into the current loader - Class mcfClass = curLoader.loadClass(mcfc); - ManagedConnectionFactory mcf = - (ManagedConnectionFactory) mcfClass.newInstance(); - - if (resAdp != null) { - try { - ((ResourceAdapterAssociation) mcf).setResourceAdapter(resAdp); - } catch (ClassCastException ce) { - // Not able to associate ResourceAdapter to MCF - } catch (Exception ex) { - logger.log(BasicLevel.ERROR, "ResourceService: Error setting ResourceAdapter class to ManagedConnectionFactory (" - + mcfc + ") for " + jndiName); - throw ex; - } - } - - // Check if logging desired and the value of the desired topic - if (logEnabled != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "log-enabled=" + logEnabled); - } - if (checkLogEnabled(logEnabled)) { - if (logTopic != null && logTopic.length() > 0) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "log-topic=" + logTopic); - } - mcf.setLogWriter(Log.getLogWriter(logTopic)); - } else { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "default log-topic=" + Log.JONAS_JCA_PREFIX); - } - mcf.setLogWriter(Log.getLogWriter(Log.JONAS_JCA_PREFIX)); - } - } - } - - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - setterLogger.log(BasicLevel.DEBUG, jndiName + ": set config params"); - } - processSetters(mcfClass, mcf, rarName, cfgRaJonas); - - // Process jdbc params found in cmpp if set - // Works only with our jdbc RA, since method names are hardcoded here. - if (cmpp.isJdbcConnSetUp()) { - Object[] param = new Object[1]; - // JdbcConnLevel - param[0] = cmpp.getJdbcConnLevel(); - try { - Method method = mcfClass.getMethod("setJdbcConnLevel", new Class[] {Integer.TYPE}); - method.invoke(mcf, param); - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - setterLogger.log(BasicLevel.DEBUG, jndiName + ": setJdbcConnLevel called"); - } - } catch (Exception e) { - setterLogger.log(BasicLevel.ERROR, "Could not invoke setJdbcConnLevel:" + e); - } - // JdbcConnTestStmt - param[0] = cmpp.getJdbcConnTestStmt(); - try { - Method method = mcfClass.getMethod("setJdbcConnTestStmt", new Class[] {String.class}); - method.invoke(mcf, param); - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - setterLogger.log(BasicLevel.DEBUG, jndiName + ": setJdbcConnTestStmt called"); - } - } catch (Exception e) { - setterLogger.log(BasicLevel.ERROR, "Could not invoke setJdbcConnTestStmt:" + e); - } - } - - PrintWriter pw = mcf.getLogWriter(); - if (pw != null) { - //Create a date format - SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z"); - String date = sdf.format(new Date()); - pw.println("MCF: output starting at " + date); - pw.flush(); - } - - // Set hashCode for ManagedConnectionFactory - try { - mcf.hashCode(); - } catch (Exception ex) { - String err = "Exception in ManagedConnectionFactory.hashCode(): "; - logger.log(BasicLevel.ERROR, err+ex); - } - - - return mcf; - } - - - /** - * - * @param cf Referenceable - * @param jndiName String - * @param rarName String - * @param conn ConnectorDesc - * @param jonasConn JonasConnectorDesc - * @param factType String factory type - * @param factOffset int factory offset - * @param jcaResourceMBean JCAResource - * @param jcaResourceName String - * @param jDomain String of JOnAS domain name - * @param jServer String of JOnAS server name - * @param ictx Context - * @param prop Properties - * @throws Exception any Exception - */ - public void registerMBean(final Referenceable cf, final String jndiName, final String rarName, final String rarFileName, - final ConnectorDesc conn, final JonasConnectorDesc jonasConn, - final String factType, final int factOffset, - final JCAResource jcaResourceMBean, final String jcaResourceName, - final String jDomain, final String jServer, final Context ictx, final Properties prop, - final String description, final ConnectionManagerImpl cm) throws Exception { - - try { - Reference ref = - new Reference(cf.getClass().getName(), - ResourceObjectFactory.class.getName(), - null); - - ref.add(new StringRefAddr(ResourceServiceConstants.JNDI_NAME, jndiName)); - ref.add(new StringRefAddr(ResourceServiceConstants.RAR_OBJNAME, rarName)); - ref.add(new StringRefAddr(ResourceServiceConstants.FACTORY_TYPE, factType)); - ref.add(new StringRefAddr(ResourceServiceConstants.FACTORY_OFFSET, "" + factOffset)); - //Put the connector objects - byte[] bytes = JNDIUtils.getBytesFromObject(conn); - if (bytes != null) { - ref.add(new BinaryRefAddr(ResourceServiceConstants.RA_XML, bytes)); - } - - bytes = JNDIUtils.getBytesFromObject(jonasConn); - if (bytes != null) { - ref.add(new BinaryRefAddr(ResourceServiceConstants.JONAS_RA_XML, bytes)); - } - - cf.setReference(ref); - ictx.rebind(jndiName, cf); - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "ResourceService: Cannot register ResourceAdapter in naming with the name " + jndiName); - logger.log(BasicLevel.ERROR, "ResourceService: Exception caught : " + e); - } - - // check if jmx service reference is initialized before continuing - if (jmx == null) { - return; - } - // -------------------------- - // Register MBeans cf. JSR 77 - // -------------------------- - // Available ConnectionFactories and ManagedConnectionFactories - // ------------------------------------------------------------ - // ConnectionFactory MBean - // ----------------------- - String jcaConnectionFactoryName = jndiName; - ObjectName onJCAConnectionFactory = - J2eeObjectName.getJCAConnectionFactory(jDomain, - jcaResourceName, - jServer, - jcaConnectionFactoryName); - JCAConnectionFactory jcaConnectionFactoryMBean = - new JCAConnectionFactory(onJCAConnectionFactory.toString(), jndiName, rarFileName, prop, description, cm); - jmx.registerModelMBean(jcaConnectionFactoryMBean, onJCAConnectionFactory); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAConnectionFactory created"); - } - - // Update the list of connection factories in the JCAResource MBean with the JCAConnectionFactory - // MBean's OBJECT_NAME - jcaResourceMBean.setConnectionFactory(onJCAConnectionFactory.toString()); - - // ManagedConnectionFactory MBean - // ------------------------------ - String jcaManagedConnectionFactoryName = getJcaMcfName(jcaConnectionFactoryName); - ObjectName onJCAManagedConnectionFactory = - J2eeObjectName.getJCAManagedConnectionFactory(jDomain, - jServer, - jcaManagedConnectionFactoryName); - JCAManagedConnectionFactory jcaManagedConnectionFactoryMBean = - new JCAManagedConnectionFactory(onJCAManagedConnectionFactory.toString()); - jmx.registerModelMBean(jcaManagedConnectionFactoryMBean, onJCAManagedConnectionFactory); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAManagedConnectionFactory created"); - } - - // Update the JCA ConnectionFactory with the JCA ManagedConnectionFactory - jcaConnectionFactoryMBean.setManagedConnectionFactory(onJCAManagedConnectionFactory.toString()); - if (manageLogger.isLoggable(BasicLevel.DEBUG)) { - manageLogger.log(BasicLevel.DEBUG, "JCAConnectionFactory updated"); - } - } - - - /** - * Process setters on all config properties found - * @param clsClass Class of the instance - * @param clsObj instance where to apply the setters - * @param fileName Name of the file being processed - * @param cProp ConfigPropertyDesc array - * @throws Exception any exception - */ - public void processSetters(final Class clsClass, - final Object clsObj, - final String fileName, - final ConfigPropertyDesc [] cProp) throws Exception { - - // If no props, nothing to set. - if (cProp == null) { - return; - } - - // For each Config Property - for (int curParam = 0; curParam < cProp.length; curParam++) { - ConfigPropertyDesc cpdesc = cProp[curParam]; - - // Build method name and find type - String fieldName = cpdesc.getConfigPropertyName(); - String methodName = "set" + fieldName.substring(0, 1).toUpperCase() - + fieldName.substring(1); - String fieldType = cpdesc.getConfigPropertyType(); - - // Find matching method in mcf class - Method method = null; - Method[] m = clsClass.getMethods(); - for (int i = 0; i < m.length; i++) { - if (m[i].getName().equals(methodName) && - m[i].getParameterTypes().length == 1 && - (fieldType == null || (m[i].getParameterTypes())[0].getName().equals(fieldType))) { - method = m[i]; - break; - } - } - if (method == null) { - logger.log(BasicLevel.ERROR, "Method not found in class '" + clsClass + "': " + methodName); - throw new Exception("method name '" + methodName + "' not found in class '" + clsClass + "'"); - } - - - Class [] paramtype = method.getParameterTypes(); - Object[] param = new Object[1]; - - String curValue = cpdesc.getConfigPropertyValue(); - if (setterLogger.isLoggable(BasicLevel.DEBUG)) { - setterLogger.log(BasicLevel.DEBUG, "Processing Field Name: " + fieldName - + " Type: " + fieldType + " Value: " + curValue); - } - - if (paramtype[0].equals(java.lang.Integer.TYPE) - || paramtype[0].equals(java.lang.Integer.class)) { - param[0] = new Integer(curValue); - - } else if (paramtype[0].equals(java.lang.Boolean.TYPE) - || paramtype[0].equals(java.lang.Boolean.class)) { - param[0] = new Boolean(curValue); - - } else if (paramtype[0].equals(java.lang.Double.TYPE) - || paramtype[0].equals(java.lang.Double.class)) { - param[0] = new Double(curValue); - - } else if (paramtype[0].equals(java.lang.Byte.TYPE) - || paramtype[0].equals(java.lang.Byte.class)) { - param[0] = new Byte(curValue); - - } else if (paramtype[0].equals(java.lang.Short.TYPE) - || paramtype[0].equals(java.lang.Short.class)) { - param[0] = new Short(curValue); - - } else if (paramtype[0].equals(java.lang.Long.TYPE) - || paramtype[0].equals(java.lang.Long.class)) { - param[0] = new Long(curValue); - - } else if (paramtype[0].equals(java.lang.Float.TYPE) - || paramtype[0].equals(java.lang.Float.class)) { - param[0] = new Float(curValue); - - } else if (paramtype[0].equals(java.lang.Character.TYPE) - || paramtype[0].equals(java.lang.Character.class)) { - param[0] = new Character(curValue.charAt(0)); - - } else if (paramtype[0].equals(java.lang.String.class)) { - param[0] = curValue; - } else { - logger.log(BasicLevel.ERROR, "Type unsupported for setter method:" + methodName); - throw new Exception("incorrect type for setter method "); - } - - // invocation of the corresponding setter method on - // class object instance - try { - method.invoke(clsObj, param); - } catch (Exception e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "method " - + methodName - + " not found for " + fileName + "check its configuration "); - } - } - } - } - - /** - * Set the PoolParams and the JdbcConnParams, if set. - * @param pParams PoolParamsDesc - * @param jConnParams JdbcConnParamsDesc - * @param pool ConnectionManagerPoolParams - * @return ConnectionManagerPoolParams - * @throws Exception any exception - */ - public ConnectionManagerPoolParams configurePoolParams (final PoolParamsDesc pParams, - final JdbcConnParamsDesc jConnParams, - final ConnectionManagerPoolParams pool) - throws Exception { - - ConnectionManagerPoolParams cmpp = null; - if (pool == null) { - cmpp = new ConnectionManagerPoolParams(); - } else { - cmpp = new ConnectionManagerPoolParams(pool); - } - String tmpPool = null; - try { - if (pParams != null) { - if (pParams.getPoolInit() != null) { - tmpPool = pParams.getPoolInit(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolInit(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMin() != null) { - tmpPool = pParams.getPoolMin(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMin(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMax() != null) { - tmpPool = pParams.getPoolMax(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMax(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMaxAge() != null) { - tmpPool = pParams.getPoolMaxAge(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMaxAge(Long.parseLong(tmpPool)); - } - } - if (pParams.getPoolMaxAgeMinutes() != null) { - tmpPool = pParams.getPoolMaxAgeMinutes(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMaxAgeMinutes(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMaxOpentime() != null) { - tmpPool = pParams.getPoolMaxOpentime(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMaxOpentime(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMaxWaiters() != null) { - tmpPool = pParams.getPoolMaxWaiters(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMaxWaiters(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolMaxWaittime() != null) { - tmpPool = pParams.getPoolMaxWaittime(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolMaxWaittime(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPoolSamplingPeriod() != null) { - tmpPool = pParams.getPoolSamplingPeriod(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPoolSamplingPeriod(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPstmtMax() != null) { - tmpPool = pParams.getPstmtMax(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPstmtMax(Integer.parseInt(tmpPool)); - } - } - if (pParams.getPstmtCachePolicy() != null) { - tmpPool = pParams.getPstmtCachePolicy(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setPstmtCachePolicy(tmpPool); - } - } - } - if (jConnParams != null) { - if (jConnParams.isJdbcConnSetUp()) { - cmpp.setJdbcConnSetUp(true); - if (jConnParams.getJdbcCheckLevel() != null) { - tmpPool = jConnParams.getJdbcCheckLevel(); - if (tmpPool != null && tmpPool.length() > 0) { - cmpp.setJdbcConnLevel(Integer.parseInt(tmpPool)); - } - } - if (jConnParams.getJdbcTestStatement() != null) { - cmpp.setJdbcConnTestStmt(jConnParams.getJdbcTestStatement()); - } - } - } - } catch (Exception ex) { - ex.printStackTrace(); - logger.log(BasicLevel.ERROR, "Invalid Pool parameter from jonas-ra.xml: Ensure that numeric values are used. " + tmpPool); - throw new Exception("incorrect pool parameter "); - } - return cmpp; - } - - /** - * Return the parsed XML object relative to the section - * - * @param jonasConn JonasConnectorDesc object - * @param id String id of the section - * @param idOffset int offset within the section - * @param oType String type of section - * @return Object of parsed XML object - * @throws Exception if the element is out of bound - */ - public Object getJonasXML(final JonasConnectorDesc jonasConn, - final String id, final int idOffset, final String oType) throws Exception { - try { - Object obj = null; - if (JCD.equals(oType)) { - obj = jonasConn.getJonasConnectionDefinitionList().get(idOffset); - } else if (JAS.equals(oType)) { - obj = jonasConn.getJonasActivationspecList().get(idOffset); - } else if (JAO.equals(oType)) { - obj = jonasConn.getJonasAdminobjectList().get(idOffset); - } - return obj; - } catch (IndexOutOfBoundsException e) { - throw new Exception("Element " + oType + ", " + idOffset + " is not found in the jonas-ra.xml", e); - } - } - - /** - * Return the JCA Managed Connection Factory name - * @param jndiName String of jndi name - * @return String of JCA Managed Connection Factory name - */ - public String getJcaMcfName(final String jndiName) { - return jndiName; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/SQLManager.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/SQLManager.java deleted file mode 100644 index b735e2f745..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/SQLManager.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; - - -/** - * SQL Manager to be used with {@link PreparedStatement} - * @author ehardesty - */ -public interface SQLManager { - - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql) - throws SQLException; - - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @param resultSetType int - * @param resultSetConcurrency int - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql, - int resultSetType, - int resultSetConcurrency) - throws SQLException; - - -// JDK 1.4 - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @param autoGeneratedKeys key - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql, - int autoGeneratedKeys) - throws SQLException; - - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @param columnIndexes int [] - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql, - int[] columnIndexes) - throws SQLException; - - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @param resultSetType int - * @param resultSetConcurrency int - * @param resultSetHoldability int - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql, - int resultSetType, - int resultSetConcurrency, - int resultSetHoldability) - throws SQLException; - - /** - * Get the specified PreparedStatement - * @param mcinfo ManagedConnectionInfo - * @param conn Object connection - * @param user String - * @param sql String - * @param columnNames String [] - * @return PreparedStatment - * @throws SQLException if an Exception occurs - */ - PreparedStatement getPStatement(ManagedConnectionInfo mcinfo, - Object conn, - String user, - String sql, - String[] columnNames) - throws SQLException; - - /** - * @return Returns the maxPstmtPoolSize - */ - int getMaxPstmtPoolSize(); - } - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerImpl.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerImpl.java deleted file mode 100644 index c62d45aee6..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerImpl.java +++ /dev/null @@ -1,1832 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.resource.internal.cm; - -import java.io.PrintWriter; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.Vector; - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionEvent; -import javax.resource.spi.ConnectionEventListener; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.ValidatingManagedConnectionFactory; -import javax.security.auth.Subject; -import javax.transaction.RollbackException; -import javax.transaction.Status; -import javax.transaction.Transaction; -import javax.transaction.xa.XAResource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.LoggerFactory; -import org.objectweb.util.monolog.wrapper.printwriter.LoggerImpl; -import org.ow2.jonas.resource.internal.IJDBCConnection; -import org.ow2.jonas.resource.internal.SQLManager; -import org.ow2.jonas.resource.internal.cm.jta.JResourceManagerEvent; -import org.ow2.jonas.resource.internal.cm.jta.JSynchronization; -import org.ow2.jonas.resource.internal.cm.jta.LocalXAResource; -import org.ow2.jonas.resource.internal.cm.sql.PreparedStatementWrapper; -import org.ow2.jonas.resource.internal.cm.sql.SQLConnectionInvocationHandler; -import org.ow2.jonas.resource.internal.cm.sql.cache.CacheException; -import org.ow2.jonas.resource.internal.cm.sql.cache.PreparedStatementCacheStatistics; -import org.ow2.jonas.resource.internal.pool.Pool; -import org.ow2.jonas.resource.internal.pool.PoolMatchFactory; -import org.ow2.jonas.resource.internal.pool.lib.HArrayPool; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TxResourceManager; - -/** - * Description of the ConnectionManagerImpl - * - *@author chassand - *created 15 novembre 2001 - */ -public class ConnectionManagerImpl implements ConnectionEventListener, ConnectionManager, - PoolMatchFactory, SQLManager, - TxResourceManager { - - /** - * Main logger - */ - public static Logger trace = null; - /** - * Pool infomation logger - */ - public static Logger poolTrace = null; - - /** - * True if the ConnectionManager pool is dummy. - */ - protected boolean dummyPool = false; - - /** - * The transaction manager in server - */ - protected TransactionManager tm; - - /** - * This hashtable allows to find the list of connection handle associated to a - * ManagedConnection - */ - protected Hashtable mc2mci = null; - - /** - * The jndiname of the associated factory - */ - protected String jndiname = null; - - /** - * The max pool size of ManagedConnection. The default value is -1. - */ - private int mcMaxPoolSize = -1; - - /** - * The min pool size of ManagedConnection. The default value is 0 - */ - private int mcMinPoolSize = 0; - - /** - * The ManagedConnectionFactory instance which represents the resource - * adapter. - */ - private ManagedConnectionFactory mcf; - - /** - * The ValidatingManagedConnectionFactory instance which represents the resource - * adapter. - */ - private ValidatingManagedConnectionFactory vmcf = null; - - /** - * The pool of ManagedConnections associated to a ManagedConnectionFactory - * There's one instance of pool by instance for one instance of this class (ConnectionManagerImpl). - * The synchronization of the methods of this are ensured through synchronized - * blocks on the poolMCs instance. Thus, the lock are shared between the two objects and that - * avoids deadlock issues when the poolMCs.getResource() is waiting for a connection releasing - * (max nb of instances is reached in the pool). - */ - private Pool poolMCs = null; - - /** - * The list of used ManagedConnections key = transaction reference value = - * ManagedConnectionInfo - */ - private Map usedMCs = null; - - /** - * The default max pool size of pstmts per ManagedConnection. - */ - static final int MAX_PSTMT_SIZE = 20; - - /** - * The default pstmt cache policy. - */ - static final String PSTMT_CACHE_POLICY = "List"; - - - /** - * PrepareStatement cache max pool size - */ - private int maxPstmtPoolSize = MAX_PSTMT_SIZE; - - /** - * PrepareStatement cache policy - */ - private String pstmtCachePolicy = PSTMT_CACHE_POLICY; - - /** - * JDBC connection level value - */ - private int jdbcConnLevel = 0; - /** - * JDBC connection level value - */ - private String jdbcConnTestStmt = ""; - - /** - * True if there is a JDBC connection to manage - */ - private boolean jdbcConnSetUp; - - /** - * The list of managedConnection used without transaction - */ - private List mcs = new Vector(); - - /** - * The list of Synchronization instances managed in this ConnectionManager - */ - private List synchros = new Vector(); - - /** - * This is a cache to the last instance of ConnectionResourceHint used by the - * ConnectionManager. Indeed this instance is always the same. - */ - private ConnectionResourceHint connectionResourceHint = null; - - /** - * The holds the transaction support level for the associated RAR file - */ - private String transSupport = null; - - /** - * This constant is used in the by the init method - */ - public final static String RESOURCE_BUNDLE_NAME = "resourceBundleName"; - - /** - * This constant is used in the by the init method - */ - public final static String LOGGER = "org.objectweb.util.monolog.logger"; - - /** - * This constant is used in the by the init method - */ - public final static String POOL_LOGGER = "org.objectweb.util.monolog.logger_pool"; - - /** - * This constant is used by the init method - */ - public final static String JNDINAME = "jndiname"; - - /** - * This constant is used in the by the init method - */ - public final static String LOGGER_FACTORY = "org.objectweb.util.monolog.loggerFactory"; - - /** - * This constant is used in the by the init method - */ - public final static String TRANSACTION_MANAGER = "transactionManager"; - - /** - * This constant is used in the by the init method - */ - public final static String RESOURCE_ADAPTER = "resourceAdapter"; - - /** - * This constant is used in the by the init method - */ - public final static String PRINT_WRITER = "printWriter"; - - /* - * These constants define the different transaction support values - */ - /** - * Rar doesn't support transactions - */ - public final static String NO_TRANS_SUPPORT = "NoTransaction"; - /** - * Rar supports local transactions - */ - public final static String LOCAL_TRANS_SUPPORT = "LocalTransaction"; - /** - * Rar supports XA transactions - */ - public final static String XA_TRANS_SUPPORT = "XATransaction"; - - /** - * Constants to determine which PreparedStatement types to call - * - */ - public final static int PSWRAP_1 = 1; - public final static int PSWRAP_2 = 2; - public final static int PSWRAP_3 = 3; - public final static int PSWRAP_4 = 4; - public final static int PSWRAP_5 = 5; - - /** - * Constants for use with JDBC connection level - */ - public final static int JDBC_NO_TEST = 0; - public final static int JDBC_CHECK_CONNECTION = 1; - public final static int JDBC_SEND_STATEMENT = 2; - public final static int JDBC_KEEP_ALIVE = 3; - - // JOTM variables - /** - * ManagedConnection used with JOTM recovery - */ - private ManagedConnection jotmMc = null; - /** - * XAResource used with JOTM recovery - */ - private XAResource jotmXar = null; - /** - * XA Name used with JOTM recovery - */ - private String xaName = null; - - /** - * Debug is enabled ? - */ - private boolean isEnabledDebug = false; - - /** - * Is this DataSource observable ? - */ - private boolean observable = false; - - /** - * Global statistic about the preparedStatementCache - */ - PreparedStatementCacheStatistics pstmtStats = new PreparedStatementCacheStatistics(); - - /** - * Key for pstmt statistic retrieving - */ - private static String GLOBAL_STATISTIC_PSTMT_CACHE_KEY = "global"; - - /** - * ConnectionManagerImpl constructor - * @param transSupport String defining level of support needed - */ - public ConnectionManagerImpl(final String transSupport) { - if (transSupport.length() == 0) { - this.transSupport = NO_TRANS_SUPPORT; - } else { - this.transSupport = transSupport; - } - - pstmtStats = new PreparedStatementCacheStatistics(); - } - - /** - * Setters method to initialize the ConnectionManager The logger instance - * where events are logged - * - *@param l The new Logger value - */ - public void setLogger(final Logger l) { - trace = l; - isEnabledDebug = trace.isLoggable(BasicLevel.DEBUG); - } - - /** - * Setters method to initialize the ConnectionManager A logger factory to - * obtain a logger - * - *@param lf The new LoggerFactory value - */ - public void setLoggerFactory(final LoggerFactory lf) { - trace = lf.getLogger("org.objectweb.resource.server"); - isEnabledDebug = trace.isLoggable(BasicLevel.DEBUG); - } - - /** - * Setters method to initialize the ConnectionManager The printwriter where - * event are logged - * - *@param pw The new PrintWriter value - */ - public void setPrintWriter(final PrintWriter pw) { - trace = new LoggerImpl(pw); - } - - /** - * Setters method to initialize the ConnectionManager The Transaction manager - * linked to this resource managed - * - *@param tm TransactionManager value - */ - public void setTransactionManager(final TransactionManager tm) { - this.tm = tm; - } - - /** - * Setters method to initialize the ConnectionManager The - * managedConnectionFactory instance of the resource which must be managed by - * this connectionManager - * - *@param tmcf The new ResourceAdapter value - *@exception Exception Description of Exception - */ - public void setResourceAdapter(final ManagedConnectionFactory tmcf) - throws Exception { - setResourceAdapter(tmcf, new ConnectionManagerPoolParams()); - } - - /** - * Setters method to initialize the ConnectionManager The - * managedConnectionFactory instance of the resource which must be maneged by - * this connectionManager - * - *@param tmcf The ManagedConnectionFactory object - *@param cmpp The pool parameters - *@exception Exception Description of Exception - */ - public void setResourceAdapter(final ManagedConnectionFactory tmcf, - final ConnectionManagerPoolParams cmpp) - throws Exception { - - // set the max/min pool values - if (cmpp.getPoolMax() != 0) { - mcMaxPoolSize = cmpp.getPoolMax(); - } - if (cmpp.getPoolMin() > 0) { - mcMinPoolSize = cmpp.getPoolMin(); - } - - // set the jdbc connection info - // TODO should not be here (must be jdbc independant) - jdbcConnLevel = cmpp.getJdbcConnLevel(); - jdbcConnTestStmt = cmpp.getJdbcConnTestStmt(); - jdbcConnSetUp = cmpp.isJdbcConnSetUp(); - - mcf = tmcf; - if (mcf instanceof ValidatingManagedConnectionFactory) { - vmcf = (ValidatingManagedConnectionFactory) mcf; - } - - poolMCs = new HArrayPool(poolTrace, jndiname); - poolMCs.setMatchFactory(this); - - if (! dummyPool) { - if (cmpp.getPoolMaxAge() > 0) { - int min = (int) (cmpp.getPoolMaxAge() / 60); - poolMCs.setMaxAge(min); - } else { - poolMCs.setMaxAge(cmpp.getPoolMaxAgeMinutes()); - } - - if (cmpp.getPoolMaxOpentime() > 0) { - poolMCs.setMaxOpentime(cmpp.getPoolMaxOpentime()); - } - poolMCs.setMaxWaiters(cmpp.getPoolMaxWaiters()); - if (cmpp.getPoolMaxWaittime() > 0) { - poolMCs.setMaxWaitTime(cmpp.getPoolMaxWaittime()); - } - - poolMCs.setMaxSize(mcMaxPoolSize); - poolMCs.setInitSize(cmpp.getPoolInit()); - poolMCs.setMinSize(mcMinPoolSize); - poolMCs.setJdbcConnLevel(jdbcConnLevel); - poolMCs.setJdbcTestStatement(jdbcConnTestStmt); - poolMCs.startMonitor(); - poolMCs.setSamplingPeriod(cmpp.getPoolSamplingPeriod()); - } - - maxPstmtPoolSize = cmpp.getPstmtMax(); - pstmtCachePolicy = cmpp.getPstmtCachePolicy(); - - usedMCs = new Hashtable(); - connectionResourceHint = new ConnectionResourceHint(null, null); - - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, ""); - } - } - - - /** - * Called by ResourceUtility.createConnectionManager - * to initialize the ConnectionManager with the following parameters: - * RESOURCE_BUNDLE_NAME: Name of the resource bundle to internationalize the logging - * LOGGER: The logger instance where events are logged - * LOGGER_FACTORY: A logger factory to obtain a logger - * PRINT_WRITER: The printwriter where event are logged - * TRANSACTION_MANAGER: The Transaction manager linked to this resource manager - * RESOURCE_MANAGER_EVENT_LISTENER: for later connection enlistement. - * RESOURCE_ADAPTER: The managedConnectionFactory instance of the resource to be managed - * JNDINAME: JndiName from the factory associated with this ConnectionManager - * @param ctx Description of Parameter - * @param generic RA is generic: No actual pool of Connections - * @exception Exception Description of Exception - */ - public void init(final Context ctx, final boolean generic) throws Exception { - mc2mci = new Hashtable(); - - // Get the resource bundle name to internationalise the log - // Optional - String resourceBundleName = null; - try { - resourceBundleName = (String) ctx.lookup(RESOURCE_BUNDLE_NAME); - } catch (NamingException e) { - } - - // Get the logger or the logger factory or the printwriter - try { - // logger should be: Log.JONAS_JCA_PREFIX+".process" - trace = (Logger) ctx.lookup(LOGGER); - poolTrace = (Logger) ctx.lookup(POOL_LOGGER); - } catch (NamingException e) { - } - - if (trace == null) { - try { - setLoggerFactory((LoggerFactory) ctx.lookup(LOGGER_FACTORY)); - } catch (NamingException e2) { - } - } - if (trace == null) { - PrintWriter pw = null; - try { - pw = (PrintWriter) ctx.lookup(PRINT_WRITER); - } catch (NamingException e3) { - } - setPrintWriter(pw); - } - if (trace != null) { - isEnabledDebug = trace.isLoggable(BasicLevel.DEBUG); - } - - if (!transSupport.equalsIgnoreCase(NO_TRANS_SUPPORT)) { - // Get the transaction manager - tm = (TransactionManager) ctx.lookup(TRANSACTION_MANAGER); - } - - // A generic RA has no actual pool of Connections - dummyPool = generic; - - // Get the managedConnectionFactory instance which represents the resource - // adapter - try { - setResourceAdapter( - (ManagedConnectionFactory) ctx.lookup(RESOURCE_ADAPTER)); - } catch (NamingException ne) { - } - - // Get the jndiname - try { - jndiname = (String) ctx.lookup(JNDINAME); - } catch (NamingException ne) { - } - - } - - - /** - * Description of the Method - * - *@exception ResourceException Description of Exception - */ - public void cleanResourceAdapter() throws ResourceException { - - synchronized (poolMCs) { - - while (mcs != null && mcs.size() > 0) { - ManagedConnectionInfo mci = (ManagedConnectionInfo) mcs.remove(0); - mci.usedCs.clear(); - if (mci.isCacheEnabled()) { - mci.pStmts.destroy(); // remove the pstmt cache content - } - - try { - mc2mci.remove(mci.mc); - } catch (Exception ex) { - } - } - if (usedMCs != null) { - for (Iterator i = usedMCs.keySet().iterator(); i.hasNext();) { - Transaction tx = (Transaction) i.next(); - ManagedConnectionInfo mci = (ManagedConnectionInfo) usedMCs.get(tx); - if (mci == null) { - continue; - } - if (mci.rmeCalled) { - mci.rme.setValid(false); - tm.notifyConnectionClose(mci.rme); - mci.rmeCalled = false; - } - mci.usedCs.clear(); - if (mci.isCacheEnabled()) { - mci.pStmts.destroy(); // remove the pstmt cache content - } - - try { - mc2mci.remove(mci.mc); - } catch (Exception ex) { - } - } - } - while (synchros != null && synchros.size() > 0) { - ManagedConnectionInfo mci = (ManagedConnectionInfo) synchros.remove(0); - mci.usedCs.clear(); - if (mci.isCacheEnabled()) { - mci.pStmts.destroy(); // remove the pstmt cache content - } - - try { - mc2mci.remove(mci.mc); - } catch (Exception ex) { - } - } - } - if (! dummyPool) { - poolMCs.closeAllConnections(); - } - } - - - /** - * - * The method allocateConnection gets called by the resource adapter's - * connection factory instance. - * - * @see javax.resource.cci.ConnectionManager - */ - public Object allocateConnection(final ManagedConnectionFactory pMcf, final ConnectionRequestInfo cxRequestInfo) - throws ResourceException { - - - ManagedConnectionInfo mci = null; - Transaction currentTx = null; - Object connection = null; - int retries = 0; - Subject subject = null; - - trace.log(BasicLevel.DEBUG, ""); - while (connection == null && retries < 20) { - synchronized (poolMCs) { - if (mcf != pMcf && !pMcf.equals(mcf)) { - throw new ResourceException( - "This ConnectionManager doesn't manage this RA:" + mcf); - } - - currentTx = null; - try { - if (tm != null) { - currentTx = tm.getTransaction(); - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, - "Impossible to get the current transaction", e, - "ConnectionManagerImpl", "allocateConnection"); - } - - //if there is a transaction check if a MC is already associated - mci = (currentTx == null ? null : (ManagedConnectionInfo) usedMCs.get(currentTx)); - if (mci != null) { - if (mci.mc != null) { - // There are connections, try to match with the - // ManagedConnectionFactory - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "MC (" + mci.mc + ") associated to the current Tx (" + currentTx + ") found"); - } - Set s = new HashSet(); - s.add(mci.mc); - if (mci.mc != mcf.matchManagedConnections(s, null, cxRequestInfo)) { - throw new ResourceException( - "ConnectionManagerImpl.allocateConnection: illegal state : no mc is matched by mcf"); - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "XA Resource " + mci.getXAResource() - + " is already enlisted in Tx:" + mci.getGlobalTx()); - } - } else { - // This connection occurred an error before - trace.log(BasicLevel.INFO, "remnant of an old failed connection"); - mci.setGlobalTx(null); - mci = null; - usedMCs.remove(currentTx); - } - } - - if (mci == null) { - // No managed connection found => get a free ManagedConnection - // from the right pool - - //ri.rs.subject = null; // Never set => already at null - connectionResourceHint.cxRequestInfo = cxRequestInfo; - if (subject == null && cxRequestInfo != null) { - // Create a subject to pass on - } - try { - ManagedConnection mc = (ManagedConnection) poolMCs.getResource(connectionResourceHint); - if (mc == null) { - throw new ResourceException("ConnectionManagerImpl.allocateConnection: cannot allocate a ManagedConnection"); - } - mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - mci = new ManagedConnectionInfo(mc, getMaxPstmtPoolSize(), getPstmtCachePolicy(), pstmtStats, trace); - mc2mci.put(mc, mci); - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "get a MC from the ra pool, mc=" + mci.mc); - } - if (transSupport.equalsIgnoreCase(LOCAL_TRANS_SUPPORT)) { - if (mci.lw == null) { - mci.lw = new LocalXAResource(mci.mc.getLocalTransaction(), trace); - } - } else if (mci.lw != null) { - mci.lw = null; - } - if (!mci.connectionEventListener) { - mci.mc.addConnectionEventListener(this); - mci.connectionEventListener = true; - } - mci.synchro = null; - // If a global transaction is already started then enlist the - // ManagedConnection instance - if (currentTx != null) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Enlist the XA Resource " - + mci.getXAResource() + " in Tx:" - + currentTx); - } - try { - currentTx.enlistResource(mci.getXAResource()); - } catch (Exception e) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Could not enlist the XA Resource " - + mci.getXAResource() + " in Tx:" - + currentTx, e); - } - // Not able to enlist this connection, so delete it as it may have been closed by the remote side. - retries++; - connectionErrorOccurred(new ConnectionEvent(mci.mc, - ConnectionEvent.CONNECTION_ERROR_OCCURRED)); - continue; - } - usedMCs.put(currentTx, mci); - mci.setGlobalTx(currentTx); - } else { - // There are not Transaction at the moment but the user can - // start a transaction after the getConnection call. - mci.setGlobalTx(null); - // must be clean - mcs.add(mci); - // NoTransaction is specified, so don't register the MC - if (!transSupport.equalsIgnoreCase(NO_TRANS_SUPPORT)) { - mci.rme = new JResourceManagerEvent(mci, trace); - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Register the managed connection (no tx)"); - } - // Always put in list, fix bug on connection late enlistment - if (!mci.rmeCalled) { - mci.rme.setValid(true); - tm.notifyConnectionOpen(mci.rme); - mci.rmeCalled = true; - } - } - } - } catch (ResourceException re) { - trace.log(BasicLevel.ERROR, re.getMessage(), re); - throw re; - } catch (Exception e) { - String err = "Error related allocation of ManagedConnection"; - trace.log(BasicLevel.ERROR, err, e); - throw new ResourceException(err, e); - } - - } - - //Fetch a free Connection from the ManagedConnection - connection = mci.mc.getConnection(null, cxRequestInfo); - // Want to add the non-wrapped Connection object - mci.usedCs.add(connection); - } - - if (connection instanceof java.sql.Connection) { - try { - if (connection instanceof IJDBCConnection) { - IJDBCConnection jdbcConnection = (IJDBCConnection) connection; - jdbcConnection.setJonasInfo(mci, this); - // This used to be done in the ConnectionImpl constructor, but a synchronized block - // is needed and we don't want any DB I/O within the block - jdbcConnection.setUser(); - } else { - // Need a wrapper for non JOnAS jdbc ConnectionImpl - connection = SQLConnectionInvocationHandler.createSQLWrapper(connection, mci, this, trace); - } - // Check the connection before reusing it - if (jdbcConnLevel > JDBC_NO_TEST) { - try { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Check the JDBC connection"); - } - boolean isClosed = true; - // Used for logical testing of connection - if (connection instanceof IJDBCConnection) { - isClosed = ((IJDBCConnection) connection).isPhysicallyClosed(); - } else { - isClosed = ((Connection) connection).isClosed(); - } - if (isClosed) { - connectionErrorOccurred(new ConnectionEvent(mci.mc, - ConnectionEvent.CONNECTION_ERROR_OCCURRED)); - try { - mci.usedCs.remove(connection); - } catch (Exception ex) { - } - connection = null; - retries++; - continue; - } - if (jdbcConnLevel > JDBC_CHECK_CONNECTION && jdbcConnTestStmt != null - && jdbcConnTestStmt.length() > 0) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "retrying connection: " + jdbcConnTestStmt); - } - // JONAS-409 : use a prepared statement rather than a statement thus if cache is enabled - if ( this.getMaxPstmtPoolSize()>=0 ) { - java.sql.PreparedStatement stmt = ((Connection) connection).prepareStatement(jdbcConnTestStmt); - stmt.execute(); - stmt.close(); - - } else { - java.sql.Statement stmt = ((Connection) connection).createStatement(); - stmt.execute(jdbcConnTestStmt); - stmt.close(); - - } - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Error on connection: removing invalid managed connection " + mci.mc + ": ", e); - connectionErrorOccurred(new ConnectionEvent(mci.mc, - ConnectionEvent.CONNECTION_ERROR_OCCURRED)); - try { - mci.usedCs.remove(connection); - } catch (Exception ex) { - } - connection = null; - retries++; - continue; - } - } - } catch (Exception ex) { - trace.log(BasicLevel.ERROR, ex.getMessage(), ex); - throw new ResourceException(ex); - } - } - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "get a logical connection on MC:" + connection); - } - - if (connection == null) { - if (retries > 0) { - throw new ResourceAllocationException( - "Unable to obtain a connection object. Check the validity of the jdbc-test-statement"); - } else { - throw new ResourceAllocationException("Unable to obtain a connection object"); - } - } - - return connection; - } - - - /** - * All method of the pool match to the right type of ManagedConnection because - * there is one pool by ManagedConnectionFactory. - * - * @see org.objectweb.util.pool.api.PoolMatchFactory - */ - public boolean matchResource(final Object res, final Object hints) { - return true; - } - - /** - * All method of the pool match to the right type of ManagedConnection because - * there is one pool by ManagedConnectionFactory. - * - * @see org.objectweb.util.pool.api.PoolMatchFactory - */ - public Object matchResource(final Set res, final Object hints) throws Exception { - ConnectionResourceHint spec = (hints != null) ? (ConnectionResourceHint) hints : new ConnectionResourceHint(null, null); - // If not supported, then just return null so another one will be created - Object con = null; - try { - con = mcf.matchManagedConnections(res, null, spec.cxRequestInfo); - } catch (NotSupportedException nse) { - } - return con; - } - - - /** - * Call the ManagedConnectionFactory in order to create a new instance. of - * ManagedConnection. The Object is a ManagedConnection instance. The hints is a - * local structure: ConnectionResourceHint - * - * @see org.objectweb.util.pool.api.PoolMatchFactory - */ - public Object createResource(final Object hints) throws Exception { - ConnectionResourceHint spec = (hints != null) ? (ConnectionResourceHint) hints : new ConnectionResourceHint(null, null); - ManagedConnection mc = mcf.createManagedConnection(spec.subject, - spec.cxRequestInfo); - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Created MC: " + mc); - } - return mc; - } - - /** - * @return the ValidatingManagedConnectionFactory if the RA implements it - */ - public ValidatingManagedConnectionFactory getValidatingMCFactory() { - return vmcf; - } - - // --------------------------------------------------------- - // IMPLEMENTATION OF INTERFACE SQLManager - // --------------------------------------------------------- - - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, final Object conn, final String user, final String sql) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, ResultSet.TYPE_FORWARD_ONLY, - ResultSet.CONCUR_READ_ONLY, -1, -1, null, null, PSWRAP_1); - - } - - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, final Object conn, final String user, final String sql, - final int resultSetType, final int resultSetConcurrency) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, resultSetType, resultSetConcurrency, - -1, -1, null, null, PSWRAP_1); - } - - // JDBC 3.0 - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, - final Object conn, - final String user, final String sql, - final int resultSetType, - final int resultSetConcurrency, - final int resultSetHoldability) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, resultSetType, resultSetConcurrency, - resultSetHoldability, -1, null, null, PSWRAP_2); - } - - // JDBC 3.0 - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, - final Object conn, - final String user, final String sql, - final int autoGeneratedKeys) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, -1, -1, -1, - autoGeneratedKeys, null, null, PSWRAP_3); - } - - // JDBC 3.0 - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, - final Object conn, - final String user, final String sql, - final int[] columnIndexes) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, -1, -1, -1, -1, - columnIndexes, null, PSWRAP_4); - } - - // JDBC 3.0 - public PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, - final Object conn, - final String user, final String sql, - final String[] columnNames) - throws SQLException { - return getPStatement(mcinfo, conn, user, sql, -1, -1, -1, -1, - null, columnNames, PSWRAP_5); - } - - - private PreparedStatement getPStatement(final ManagedConnectionInfo mcinfo, - final Object conn, - final String user, - final String sql, - final int resultSetType, - final int resultSetConcurrency, - final int resultSetHoldability, - final int autoGeneratedKeys, - final int [] columnIndexes, - final String [] columnNames, - final int pswrapType) - throws SQLException { - - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Sql: " + sql + " User: " + user); - } - // Use for the equals test - PreparedStatementWrapper psw = null; - switch (pswrapType) { - case PSWRAP_1: - psw = new PreparedStatementWrapper(user, sql, - resultSetType, - resultSetConcurrency, - trace, - isEnabledDebug); - break; - case PSWRAP_2: - psw = new PreparedStatementWrapper(user, sql, - resultSetType, - resultSetConcurrency, - resultSetHoldability, - trace, - isEnabledDebug); - break; - case PSWRAP_3: - psw = new PreparedStatementWrapper(user, sql, - autoGeneratedKeys, - trace, - isEnabledDebug); - break; - case PSWRAP_4: - psw = new PreparedStatementWrapper(user, sql, - columnIndexes, - trace, - isEnabledDebug); - break; - case PSWRAP_5: - psw = new PreparedStatementWrapper(user, sql, - columnNames, - trace, - isEnabledDebug); - break; - default: - break; - } - - if (isEnabledDebug) { - if (mcinfo.isCacheEnabled()) { - trace.log(BasicLevel.DEBUG, "MC pStmts: " + mcinfo.pStmts); - } - } - - // get element from cache if not disabled - if (mcinfo.isCacheEnabled()) { - PreparedStatementWrapper pswFromCache = mcinfo.pStmts.get(psw); - if (pswFromCache != null) { - return pswFromCache; - } - - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "No statement in cache (or not closed), need to build a new one"); - } - } - - //If not found, call con.prepareStatement, wrap the returned one - // and add it to the cache - PreparedStatement ps = null; - switch (pswrapType) { - case PSWRAP_1: - ps = ((java.sql.Connection) conn). - prepareStatement(sql, resultSetType, resultSetConcurrency); - break; - case PSWRAP_2: - ps = ((java.sql.Connection) conn). - prepareStatement(sql, resultSetType, resultSetConcurrency, - resultSetHoldability); - break; - case PSWRAP_3: - ps = ((java.sql.Connection) conn). - prepareStatement(sql, autoGeneratedKeys); - break; - case PSWRAP_4: - ps = ((java.sql.Connection) conn). - prepareStatement(sql, columnIndexes); - break; - case PSWRAP_5: - ps = ((java.sql.Connection) conn). - prepareStatement(sql, columnNames); - break; - default: - break; - } - - if (!mcinfo.isCacheEnabled()) { - // No prepared statement cache - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "cache is disabled, return the physical ps"); - } - return ps; - } else { - // Add the ps in cache - try { - psw.setPreparedStatement(ps); - mcinfo.pStmts.put(psw); - return psw; - - } catch (CacheException e) { - // no room in cache, return the physical ps - trace.log(BasicLevel.WARN, "No more space in cache, return the physical ps"); - return ps; - } - } - } - - - /** - * Release the ManagedConnection object resource - * @param rMc Object to release - * @throws Exception if an Exception occurs - */ - public void releaseResource(final Object rMc) throws Exception { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "MC: " + rMc); - } - if (rMc instanceof ManagedConnection) { - synchronized (poolMCs) { - ManagedConnection mc = (ManagedConnection) rMc; - ManagedConnectionInfo mcinfo = (ManagedConnectionInfo) mc2mci.remove(mc); - if (mcinfo != null) { - destroyPStmts(mcinfo); - } - } - } - } - - /** - * Destroying of the PreparedStatement objects of the Pool - * @param mcinfo ManagedConnection information - * @throws Exception Exception - */ - public void destroyPStmts(final ManagedConnectionInfo mcinfo) throws Exception { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "ManagedConnectionInfo: " + mcinfo); - } - if (mcinfo.isCacheEnabled()) { - mcinfo.pStmts.reallyClose(); - } - } - - /** - * Closing of the PreparedStatement objects of the Pool - * @param mcinfo ManagedConnection information - * @throws Exception Exception - */ - public void closePStmts(final ManagedConnectionInfo mcinfo) throws Exception { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "ManagedConnectionInfo: " + mcinfo); - } - if (mcinfo.isCacheEnabled()) { - mcinfo.pStmts.close(); - } - - } - - - /** - * IMPLEMENTATION OF INTERFACE ConnectionEventListener * - * - * A ManagedConnection instance calls the connectionClosed method to notify - * its registered set of listeners when an application component closes a - * connection handle. The application server uses this connection close event - * to make a decision on whether or not to put the ManagedConnection instance - * back into the connection pool. - * - * @see javax.resource.spi.ConnectionEventListener - */ - public void connectionClosed(final ConnectionEvent event) { - - synchronized (poolMCs) { - - ManagedConnection mc = (ManagedConnection) event.getSource(); - if (mc == null) { - trace.log(BasicLevel.ERROR, "no mc found in Event!"); - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found!"); - return; - } - - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "enter\n" + getState("\t")); - } - - mci.usedCs.remove(event.getConnectionHandle()); - - if (mci.usedCs.isEmpty()) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Last Connection has just been removed"); - } - - try { - Transaction currentTx = null; - if (tm != null) { - currentTx = tm.getTransaction(); - } - - if (mci.localTransaction && currentTx == null) { - trace.log(BasicLevel.ERROR, "The managed connection is being closed while a localtransaction is not finished"); - } - - if (currentTx != null) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "currentTx=" + currentTx); - } - - Transaction oldtx = (Transaction) mci.getGlobalTx(); - if (oldtx != null && oldtx != currentTx) { - trace.log(BasicLevel.DEBUG, "This connection was used by another tx"); - trace.log(BasicLevel.DEBUG, "old tx = " + oldtx); - trace.log(BasicLevel.DEBUG, "cur tx = " + currentTx); - usedMCs.remove(oldtx); - } - mci.setGlobalTx(currentTx); - - if (mci.synchro == null) { - try { - // Register synchro object only if not already committed - if (currentTx.getStatus() != Status.STATUS_COMMITTED) { - currentTx.registerSynchronization( - new JSynchronization(this, mci)); - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "registerSynchro mc=" + mci.mc); - } - } - } catch (RollbackException e) { - // The transaction has been marked as rollbackOnly - // but the synchronization is registered. - trace.log(BasicLevel.INFO, "registerSynchronization on transaction marked as Rollback only, mc=" + mci.mc); - } - } else { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "synchro mc=" + mci.mc); - } - } - } else if (mci.localTransaction) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "MC isn't released because local transaction is not finished"); - } - - } else { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "no currentTx"); - } - - mcs.remove(mci); - - if (mci.getGlobalTx() != null) { - usedMCs.remove(mci.getGlobalTx()); - mci.setGlobalTx(null); - } - - // force close pstmt - closePStmts(mci); - - mci.mc.cleanup(); - - // Release the MC from its pool - poolMCs.releaseResource(mci.mc, false); - - } - if (mci.rmeCalled) { - // Signal to the RessourceManagerEventListener mc is released - mci.rme.setValid(false); - tm.notifyConnectionClose(mci.rme); - mci.rmeCalled = false; - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, - "an error during delisting of ManagedConection: ", e); - } - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "exit\n" + getState("\t")); - } - } - } - } - - - /** - * The connectionErrorOccurred method indicates that the associated - * ManagedConnection instance is now invalid and unusable. The application - * server handles the connection error event notification by initiating - * application server-specific cleanup (for example, removing - * ManagedConnection instance from the connection pool) and then calling - * ManagedConnection.destroy method to destroy the physical connection.. - * - * @see javax.resource.spi.ConnectionEventListener - */ - public void connectionErrorOccurred(final ConnectionEvent event) { - - synchronized (poolMCs) { - - ManagedConnection mc = (ManagedConnection) event.getSource(); - if (mc == null) { - trace.log(BasicLevel.ERROR, "no mc found in Event!"); - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found!"); - return; - } - - if (poolTrace.isLoggable(BasicLevel.DEBUG)) { - poolTrace.log(BasicLevel.DEBUG, "enter\n" + getState("\t")); - } - - mci.usedCs.clear(); - - try { - if (mci.rmeCalled) { - //Signal to the RessourceManagerEventListener mc is released - mci.rme.setValid(false); - tm.notifyConnectionError(mci.rme); - mci.rmeCalled = false; - } - // Detach the connectionManager from the mc - mc.removeConnectionEventListener(this); - // Remove the association (transaction ctx / mc) - if (mci.getGlobalTx() != null) { - usedMCs.remove(mci.getGlobalTx()); - mci.setGlobalTx(null); - } else { - // TODO why not always ? - mcs.remove(mci); - } - - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Destroying managed connection (" + mc + ")"); - } - // Destroy the PreparedStatements - destroyPStmts(mci); - - poolMCs.releaseResource(mc, true); - if (poolTrace.isLoggable(BasicLevel.DEBUG)) { - poolTrace.log(BasicLevel.DEBUG, "enter\n" + getState("\t")); - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Error when destroying connection: " + e); - } finally { - mc2mci.remove(mc); - } - } - } - - - /** - * Notifies that a Resource Manager Local Transaction was committed on the - * ManagedConnection instance. - * - * @see javax.resource.spi.ConnectionEventListener - */ - public void localTransactionCommitted(final ConnectionEvent event) { - - synchronized (poolMCs) { - - ManagedConnection mc = (ManagedConnection) event.getSource(); - if (mc == null) { - trace.log(BasicLevel.ERROR, "no mc found in Event!"); - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found!"); - return; - } - mci.localTransaction = false; - - if (mci.usedCs.isEmpty()) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Close the managed connection"); - } - - if (mci.rmeCalled) { - //Signal to the RessourceManagerEventListener mc is released - mci.rme.setValid(false); - tm.notifyConnectionClose(mci.rme); - mci.rmeCalled = false; - } - - if (mci.synchro == null) { - mcs.remove(mci); - if (mci.getGlobalTx() != null) { - usedMCs.remove(mci.getGlobalTx()); - mci.setGlobalTx(null); - } - - try { - - // force close pstmt - closePStmts(mci); - - mci.mc.cleanup(); - - // Release the MC from its pool - poolMCs.releaseResource(mci.mc, false); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, - "an error related ManagedConection release", - e, "ConnectionManagerImpl", "localTransactionCommitted"); - } - } - } - } - - } - - - /** - * Notifies that a Resource Manager Local Transaction was rolled back on the - * ManagedConnection instance. - * - * @see javax.resource.spi.ConnectionEventListener - */ - public void localTransactionRolledback(final ConnectionEvent event) { - - synchronized (poolMCs) { - - ManagedConnection mc = (ManagedConnection) event.getSource(); - if (mc == null) { - trace.log(BasicLevel.ERROR, "no mc found in Event!"); - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found!"); - return; - } - mci.localTransaction = false; - - if (mci.usedCs.isEmpty()) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Close the managed connection"); - } - - if (mci.rmeCalled) { - mci.rme.setValid(false); - tm.notifyConnectionClose(mci.rme); - mci.rmeCalled = false; - } - - if (mci.synchro == null) { - mcs.remove(mci); - if (mci.getGlobalTx() != null) { - usedMCs.remove(mci.getGlobalTx()); - mci.setGlobalTx(null); - } - - try { - // force close pstmt - closePStmts(mci); - - mci.mc.cleanup(); - - // Release the MC from its pool - poolMCs.releaseResource(mci.mc, false); - } catch (Exception e) { - trace.log(BasicLevel.ERROR, - "an error related during ManagedConection release:", - e, "ConnectionManagerImpl", "localTransactionRolledback"); - } - } - } - } - } - - - /** - * Notifies that a Resource Manager Local Transaction was started on the - * ManagedConnection instance. - * - * @see javax.resource.spi.ConnectionEventListener - */ - public void localTransactionStarted(final ConnectionEvent event) { - - synchronized (poolMCs) { - - ManagedConnection mc = (ManagedConnection) event.getSource(); - if (mc == null) { - trace.log(BasicLevel.ERROR, "no mc found in Event!"); - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found!"); - return; - } - mci.localTransaction = true; - - } - } - - - /** - * Description of the Method - * - *@return Description of the Returned Value - */ - @Override - public String toString() { - String m = super.toString(); - // remove package name - int c1 = 0; - int current = m.indexOf("."); - while (current != -1) { - c1 = current; - current = m.indexOf(".", current + 1); - } - return m.substring(c1 + 1, m.length()); - } - - - /** - * Gets the State attribute of the ConnectionManagerImpl object - * - *@param prefix Description of Parameter - *@return The State value - */ - public String getState(final String prefix) { - String res = null; - synchronized(poolMCs) { - res = prefix + "mcf=" + mcf + "\n"; - res += prefix + "ConnectionResourceHint=" + connectionResourceHint.toString() + "\n"; - res += prefix + "size of MC pool:" + poolMCs.getSize() + "\n"; - res += prefix + "size of usedMCs:" + usedMCs.size() + "\n"; - res += prefix + "mcs attached to a tx:\n"; - for (Iterator i = usedMCs.keySet().iterator(); i.hasNext();) { - Object tx = i.next(); - ManagedConnectionInfo mci = (ManagedConnectionInfo) usedMCs.get(tx); - res += prefix + "MCI : tx=" + tx + "\n"; - res += mci.getState(prefix + "\t"); - } - res += prefix + "mcs not attached to a tx:\n"; - for (Iterator i = mcs.iterator(); i.hasNext();) { - ManagedConnectionInfo mci = (ManagedConnectionInfo) i.next(); - res += mci.getState(prefix + "\t"); - } - res += prefix + "mcs waiting for tx commit or rollback:\n"; - for (Iterator i = synchros.iterator(); i.hasNext();) { - ManagedConnectionInfo mci = (ManagedConnectionInfo) i.next(); - res += mci.getState(prefix + "\t"); - } - } - return res; - } - - /** - * Set the XAName to use - * @param xanm String of XA Name - */ - public void setXAName(final String xanm) { - xaName = xanm; - } - - /** - * Get the XAName to use - * @return String of XA Name - */ - public String getXAName() { - return (xaName); - } - - /** - * Register an XAResource with JOTM for recovery - */ - public void registerXAResource(final Properties tmProp) { - - // If no RM or the RAR doesn't support XA, then just return - if (tm == null) { - trace.log(BasicLevel.DEBUG, "No tm"); - return; - } - if (!transSupport.equalsIgnoreCase(XA_TRANS_SUPPORT)) { - trace.log(BasicLevel.DEBUG, "No XA Support"); - return; - } - // If no recovery enabled, just return - if (! tm.isRecoveryEnabled()) { - trace.log(BasicLevel.DEBUG, "No transaction recovery enabled"); - return; - } - - synchronized (poolMCs) { - - // Find an entry in free pool - // If none, then create one - ManagedConnectionInfo mci = null; - XAResource xar = null; - try { - ManagedConnection mc = (ManagedConnection) poolMCs.getResource(connectionResourceHint); - if (mc == null) { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Cannot allocate a ManagedConnection for registerXAResource"); - } - return; - } - - mci = (ManagedConnectionInfo) mc2mci.get(mc); - if (mci == null) { - mci = new ManagedConnectionInfo(mc,getMaxPstmtPoolSize(),getPstmtCachePolicy(), pstmtStats, trace); - mc2mci.put(mc, mci); - } - - xar = mc.getXAResource(); - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "got a MC from the ra pool, mc=" + mci.mc - + " xar=" + xar); - } - - if (!mci.connectionEventListener) { - mci.mc.addConnectionEventListener(this); - mci.connectionEventListener = true; - } - - mci.synchro = null; - - } catch (ResourceException re) { - return; - } catch (Exception e) { - trace.log(BasicLevel.ERROR, e.getMessage(), e); - return; - } - - // Setup globals so it can be returned to the pool - jotmMc = mci.mc; - jotmXar = xar; - - // Call to register it - try { - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Registering name = " + xaName + " xar = " + jotmXar); - } - tm.registerResourceManager(xaName, jotmXar, "", tmProp, this); - } catch (Exception ex) { - trace.log(BasicLevel.ERROR, ex.getMessage(), ex); - freeXAResource(jotmXar); - } - } - } - - /** - * Called from JOTM to free the XAResource and associated Managed Connection - * when recovery is complete - * - * @param rmName The Resource Manager to be unregistered. - * @param rmXares XAResource to be returned - */ - public void freeXAResource(final XAResource rmXares) { - - synchronized (poolMCs) { - // Get the associated MC - // Clean it up and return it to the free pool - if (isEnabledDebug) { - trace.log(BasicLevel.DEBUG, "Removing name = " + xaName + " xar = " + jotmXar); - } - if (jotmXar == null) { - return; - } - if (!rmXares.equals(jotmXar)) { - trace.log(BasicLevel.ERROR, "XAResource of " + rmXares + " and " - + jotmXar + " not equal!"); - return; - } - - ManagedConnectionInfo mci = (ManagedConnectionInfo) mc2mci.get(jotmMc); - if (mci == null) { - trace.log(BasicLevel.ERROR, "no mci found for " + jotmMc); - return; - } - - try { - // force close pstmt - closePStmts(mci); - - mci.mc.cleanup(); - - // Release the MC from its pool - poolMCs.releaseResource(mci.mc, false); - } catch (Exception ex) { - trace.log(BasicLevel.ERROR, ex.getMessage(), ex); - } - - jotmMc = null; - jotmXar = null; - } - } - - // JSR 77 (JCAConnectionFactory methods) - - public Pool getPool() { - return poolMCs; - } - - public boolean isJdbcConnSetUp() { - return jdbcConnSetUp; - } - - public int getCheckLevel() { - return jdbcConnLevel; - } - - public void setCheckLevel(final int level) { - jdbcConnLevel = level; - } - - public String getTestStatement() { - return jdbcConnTestStmt; - } - - public void setTestStatement(final String stmt) { - jdbcConnTestStmt = stmt; - } - - /** - * @return the observable - */ - public boolean isObservable() { - return observable; - } - - /** - * @param observable the observable to set - */ - public void setObservable(final boolean observable) { - this.observable = observable; - // must propagate to the pool - if (poolMCs != null) { - poolMCs.setObservable(observable); - } - } - - public int getCurrentInTx() { - return usedMCs.size(); - } - - /** - * @return Returns the maxPstmtPoolSize. - */ - public int getMaxPstmtPoolSize() { - return maxPstmtPoolSize; - } - - /** - * @param maxPstmtPoolSize The maxPstmtPoolSize to set. - */ - public void setMaxPstmtPoolSize(final int maxPstmtPoolSize) { - this.maxPstmtPoolSize = maxPstmtPoolSize; - } - - /** - * @return Returns the pstmt cache policy. - */ - public String getPstmtCachePolicy() { - return pstmtCachePolicy; - } - - /** - * @param pstmtCachePolicy The pstmtCachePolicy to set. - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - - /** - * return a list of idents that represent the connections - * opened for a given nb of seconds - * @param usedTimeSec nb of seconds the Connection has been opened - * @return array of idents representing the Connections - */ - public int[] getOpenedConnections(final int usedTimeSec) { - long millis = usedTimeSec * 1000L; - return poolMCs.getOpenedConnections(millis); - } - - /** - * return a list of idents that represent the connections - * opened for a given nb of seconds - * @return array of idents representing the Connections - */ - public int[] getOpenedConnections() { - return poolMCs.getOpenedConnections(5000L); // 5 sec. - } - - /** - * force the close of the Connection identified by ots Id - * @param connectionId int that represent the Connection - */ - public void forceCloseConnection(final int connectionId) { - poolMCs.forceCloseConnection(connectionId); - } - - /** - * Return a Map with details about a Connection - * @param connectionId Ident that represent the connection - * @return map given the details about this connection. - */ - public Map getConnectionDetails(final int connectionId) { - ManagedConnection mc = poolMCs.getConnectionById(connectionId); - // Look if used in a transaction - Transaction mytx = null; - if (usedMCs != null) { - Set entrySet = usedMCs.entrySet(); - Iterator it = entrySet.iterator(); - while (it.hasNext()) { - Transaction tx = (Transaction) it.next().getKey(); - ManagedConnectionInfo mci = (ManagedConnectionInfo) usedMCs.get(tx); - if (mci != null && mci.mc.equals(mc)) { - mytx = tx; - break; - } - } - } - return poolMCs.getConnectionDetails(mc, mytx); - } - - /** - * @return the synchros - */ - public List getSynchros() { - return synchros; - } - - /** - * @return the used (within Transaction) MC ({@link Transaction}) - */ - public Map getUsedManagedConnections() { - return usedMCs; - } - - /** - * @return the mcs - */ - public List getManagedConnectionsWithoutTransaction() { - return mcs; - } - - /** - * @return Get the global statistic object about pstmt cache - */ - public PreparedStatementCacheStatistics getPstmtStats() { - return pstmtStats; - } - - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerPoolParams.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerPoolParams.java deleted file mode 100644 index 831280d3b2..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionManagerPoolParams.java +++ /dev/null @@ -1,384 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm; - - -/** - * - * @author Eric Hardesty - * Contributor(s): - * - */ -public class ConnectionManagerPoolParams { - - /** - * The number of seconds per minute - */ - static final int SECS_PER_MIN = 60; - /** - * The default pstmts per ManagedConnection. - */ - static final int INIT_PSTMT_SIZE = 10; - /** - * The default sampling time of the pool - */ - static final int INIT_SAMPLING_TIME = 30; - - /** - * The default cache policy for pstmt - */ - static final String INIT_CACHE_POLICY = "List"; - - /** - * Initial pool size - */ - private int poolInit = 0; - /** - * Minimum pool size - */ - private int poolMin = 0; - /** - * Maximum pool size, -1 unlimited - */ - private int poolMax = -1; - /** - * Maximium pool age in seconds of a connection, 0 unlimited - */ - private long poolMaxAge = 0L; - /** - * Maximium pool age in minutes of a connection, 0 unlimited - */ - private int poolMaxAgeMinutes = 0; - /** - * Maximium open time in minutes of a connection, 0 unlimited - */ - private int poolMaxOpentime = 0; - /** - * Maximum number of threads waiting for connection - */ - private int poolMaxWaiters = 0; - /** - * Maximum time to wait for a connection - */ - private int poolMaxWaittime = 0; - /** - * Pool statistics sampling period in seconds - */ - private int poolSamplingPeriod = INIT_SAMPLING_TIME; - - /** - * Maximum size of the PreparedStatement cache, -1 to disable - */ - private int pstmtMax = INIT_PSTMT_SIZE; - - /** - * Policy of the PreparedStatement cache - */ - private String pstmtCachePolicy = INIT_CACHE_POLICY; - - - /** - * Jdbc connection level - */ - private int jdbcConnLevel = 0; - /** - * Jdbc sql string to send to a connection if level requires it - */ - private String jdbcConnTestStmt = ""; - - /** - * True if there is a JDBC connection to manage - */ - private boolean jdbcConnSetUp = false; - - /** - * Default Constructor - * - */ - public ConnectionManagerPoolParams() { - } - - /** - * Constructor to build new object based on another set of pool params - * @param cmpp ConnectionManagerPoolParams to initialize this object with - */ - public ConnectionManagerPoolParams(final ConnectionManagerPoolParams cmpp) { - poolInit = cmpp.getPoolInit(); - poolMin = cmpp.getPoolMin(); - poolMax = cmpp.getPoolMax(); - poolMaxAge = cmpp.getPoolMaxAge(); - poolMaxAgeMinutes = cmpp.getPoolMaxAgeMinutes(); - poolMaxOpentime = cmpp.getPoolMaxOpentime(); - poolMaxWaiters = cmpp.getPoolMaxWaiters(); - poolMaxWaittime = cmpp.getPoolMaxWaittime(); - poolSamplingPeriod = cmpp.getPoolSamplingPeriod(); - pstmtMax = cmpp.getPstmtMax(); - jdbcConnLevel = cmpp.getJdbcConnLevel(); - jdbcConnTestStmt = cmpp.getJdbcConnTestStmt(); - jdbcConnSetUp = cmpp.isJdbcConnSetUp(); - } - /** - * Return the pool init size - * @return int initial size of the pool - */ - public int getPoolInit() { - return poolInit; - } - /** - * Set the pool init size - * @param val pool initial size - */ - public void setPoolInit(final int val) { - poolInit = val; - } - - /** - * Return the pool min size - * @return int minimum size of the pool - */ - public int getPoolMin() { - return poolMin; - } - /** - * Set the pool minimum size - * @param val pool minimum size - */ - public void setPoolMin(final int val) { - poolMin = val; - } - - /** - * Return the pool maximum size - * @return int maximum size of the pool - */ - public int getPoolMax() { - return poolMax; - } - /** - * Set the pool maximum size - * @param val pool maximum size - */ - public void setPoolMax(final int val) { - poolMax = val; - } - - /** - * Return the pool maximum age in seconds - * @return long maximum age of a connection in the pool - */ - public long getPoolMaxAge() { - return poolMaxAge; - } - /** - * Set the pool maximum age value - * @param val pool maximum age value - */ - public void setPoolMaxAge(final long val) { - poolMaxAge = val; - } - - /** - * Return the pool maximum age in minutes - * @return int maximum age of a connection in the pool - */ - public int getPoolMaxAgeMinutes() { - return poolMaxAgeMinutes; - } - /** - * Set the pool maximum age value - * @param val pool maximum age value - */ - public void setPoolMaxAgeMinutes(final int val) { - poolMaxAgeMinutes = val; - } - - /** - * Return the pool maximum open time in minutes - * @return int maximum open time of a connection in the pool - */ - public int getPoolMaxOpentime() { - return poolMaxOpentime; - } - /** - * Set the pool maximum open time value - * @param val pool maximum open time value - */ - public void setPoolMaxOpentime(final int val) { - poolMaxOpentime = val; - } - - /** - * Return the pool maximum waiters size - * @return int maximum waiters of the pool - */ - public int getPoolMaxWaiters() { - return poolMaxWaiters; - } - /** - * Set the pool maximum waiters size - * @param val pool maximum waiters size - */ - public void setPoolMaxWaiters(final int val) { - poolMaxWaiters = val; - } - - /** - * Return the pool maximum waiter time - * @return int maximum waiter time of the pool - */ - public int getPoolMaxWaittime() { - return poolMaxWaittime; - } - /** - * Set the pool maximum waiter time - * @param val pool maximum waiters time - */ - public void setPoolMaxWaittime(final int val) { - poolMaxWaittime = val; - } - - /** - * Return the pool sampling period - * @return int pool sampling period - */ - public int getPoolSamplingPeriod() { - return poolSamplingPeriod; - } - /** - * Set the pool sampling period - * @param val pool sampling period - */ - public void setPoolSamplingPeriod(final int val) { - poolSamplingPeriod = val; - } - - /** - * Return the maximum PreparedStatement cache - * @return int maximum PreparedStatement cache - */ - public int getPstmtMax() { - return pstmtMax; - } - /** - * Set the maximum PreparedStatement cache - * @param val maximum PreparedStatement cache - */ - public void setPstmtMax(final int val) { - pstmtMax = val; - } - - /** - * Return the cache policy of PreparedStatement cache - * @return String PreparedStatement cache policy - */ - public String getPstmtCachePolicy() { - return pstmtCachePolicy; - } - /** - * Set the PreparedStatement cache policy - * @param val PreparedStatement cache policy - */ - public void setPstmtCachePolicy(final String val) { - pstmtCachePolicy = val; - } - - /** - * Return the JDBC connection level - * @return int JDBC connection level - */ - public int getJdbcConnLevel() { - return jdbcConnLevel; - } - /** - * Set the JDBC connection level - * @param val JDBC connection level - */ - public void setJdbcConnLevel(final int val) { - jdbcConnLevel = val; - } - - /** - * Return the JDBC connection test SQL string - * @return String JDBC connection test SQL string - */ - public String getJdbcConnTestStmt() { - return jdbcConnTestStmt; - } - /** - * Set the JDBC connection test SQL string - * @param val JDBC connection test SQL string - */ - public void setJdbcConnTestStmt(final String val) { - jdbcConnTestStmt = val; - } - - /** - * @return true if there is a JDBC connection to manage - */ - public boolean isJdbcConnSetUp() { - return jdbcConnSetUp; - } - - public void setJdbcConnSetUp(final boolean val) { - jdbcConnSetUp = val; - } - - /** - * Output pool information - * @return String representing the pool - */ - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("poolInit="); - sb.append(poolInit); - sb.append("\npoolMin="); - sb.append(poolMin); - sb.append("\npoolMax="); - sb.append(poolMax); - sb.append("\npoolMaxAge="); - sb.append(poolMaxAge); - sb.append("\npoolMaxAgeMinutes="); - sb.append(poolMaxAgeMinutes); - sb.append("\npoolMaxOpentime="); - sb.append(poolMaxOpentime); - sb.append("\npoolMaxWaiters="); - sb.append(poolMaxWaiters); - sb.append("\npoolMaxWaittime="); - sb.append(poolMaxWaittime); - sb.append("\npoolSamplingPeriod="); - sb.append(poolSamplingPeriod); - sb.append("\njdbcConnSetUp="); - sb.append(jdbcConnSetUp); - sb.append("\npstmtMax="); - sb.append(pstmtMax); - sb.append("\njdbcConnLevel="); - sb.append(jdbcConnLevel); - sb.append("\njdbcConnTestStmt="); - sb.append(jdbcConnTestStmt); - sb.append("\n"); - return sb.toString(); - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionResourceHint.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionResourceHint.java deleted file mode 100644 index 6fe6124822..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ConnectionResourceHint.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm; - -import javax.resource.spi.ConnectionRequestInfo; -import javax.security.auth.Subject; - -/** - * This class describes the context of a getConnection call: - the mcf to - * request a ManagedConnection - the security subject - the - * ConnectionRequestInfo transmitted with the request - * - *@author sebastien.chassande@inrialpes.fr - */ -public class ConnectionResourceHint { - /** - * Subject object - */ - protected Subject subject; - /** - * ConnectionRequestInfo object - */ - protected ConnectionRequestInfo cxRequestInfo; - - /** - * Constructor for the ConnectionResourceHint object - * @param s Subject to associate - * @param cri ConnectionRequestInfo - */ - public ConnectionResourceHint(Subject s, ConnectionRequestInfo cri) { - subject = s; - cxRequestInfo = cri; - } - - /** - * Clear the current contents - */ - public void clear() { - subject = null; - cxRequestInfo = null; - } - - /** - * - * @return String value of object - */ - public String toString() { - return "subject=" + subject + " / cri=" + cxRequestInfo; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ManagedConnectionInfo.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ManagedConnectionInfo.java deleted file mode 100644 index 0b7ed597fa..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/ManagedConnectionInfo.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm; - -import java.util.Vector; - -import javax.resource.ResourceException; -import javax.resource.spi.ManagedConnection; -import javax.transaction.Synchronization; -import javax.transaction.xa.XAResource; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.resource.internal.cm.jta.JResourceManagerEvent; -import org.ow2.jonas.resource.internal.cm.jta.LocalXAResource; -import org.ow2.jonas.resource.internal.cm.sql.cache.PreparedStatementCache; -import org.ow2.jonas.resource.internal.cm.sql.cache.PreparedStatementCacheStatistics; -import org.ow2.jonas.resource.internal.cm.sql.cache.PreparedStatementListCacheImpl; -import org.ow2.jonas.resource.internal.cm.sql.cache.PreparedStatementMapCacheImpl; - -/** - * A ManagedConnection and its Information - * - * @author sebastien.chassande@inrialpes.fr - * @author Eric.Hardesty@bull.com - */ -public class ManagedConnectionInfo { - /** - * The managedConnection - */ - public ManagedConnection mc; - - /** - * The list of used Connections - */ - public Vector usedCs = null; - - /** - * The event used for the later enlisting into transaction - */ - public JResourceManagerEvent rme = null; - - /** - * Has the ResourceManagerEvent Listener been called - */ - public boolean rmeCalled = false; - - /** - * Is the the managedConnection is inside a local transaction - */ - public boolean localTransaction = false; - - /** - * If local transaction is used, then here is the LocalXAWrapper to use - * instead of an XA object - */ - public LocalXAResource lw = null; - - /** - * The Global Transaction linked to the managedConnection instance - * There are three state possible - * global transaction : globaltx= the reference to the transaction instance - * local transaction: globaltx=null / localTransaction = true - * no transaction: globaltx = null; - */ - private Object globaltx; - - /** - * The current Synchronisation object used for the later enlisting into - * the global transaction - */ - public Synchronization synchro = null; - - /** - * Prepared statement cache for this - * ManagedConnection. - */ - public PreparedStatementCache pStmts = null; - - /** - * Pstmt cache enabled ? - */ - private boolean cacheEnabled = false; - - protected static Logger myLogger = null; - - /** - * Has the ConnectionEventListener been set - */ - public boolean connectionEventListener = false; - - /** - * Constructor for the ManagedConnectionInfo object - * @param mc ManagedConnection to associate with - */ - public ManagedConnectionInfo(final ManagedConnection mc, final int maxCacheSize, final String pstmtCachePolicy, final PreparedStatementCacheStatistics pstmtStats, final Logger logger) { - this.mc = mc; - localTransaction = false; - usedCs = new Vector(); - if (maxCacheSize >= 0) { - cacheEnabled = true; - } - myLogger = logger; - - // select cache policy - String cachePolicy = pstmtCachePolicy; - - if (cachePolicy == null || cachePolicy.equals("")) { - cachePolicy = System.getProperty("org.ow2.jonas.resource.pstmt.cache.policy"); - } - - if (cachePolicy == null || cachePolicy.equals("")) { - myLogger.log(BasicLevel.DEBUG, "Cache policy not set - take the default one : list"); - pStmts = new PreparedStatementListCacheImpl(maxCacheSize, pstmtStats, logger); - } else if (cachePolicy.equalsIgnoreCase(PreparedStatementCache.CACHE_POLICY_LIST)) { - myLogger.log(BasicLevel.DEBUG, "Cache policy set to list"); - pStmts = new PreparedStatementListCacheImpl(maxCacheSize, pstmtStats, logger); - } else if (cachePolicy.equalsIgnoreCase(PreparedStatementCache.CACHE_POLICY_MAP)) { - myLogger.log(BasicLevel.DEBUG, "Cache policy set to map"); - pStmts = new PreparedStatementMapCacheImpl(maxCacheSize, pstmtStats, logger); - } - } - - public void setGlobalTx(final Object tx) { - //logger.log(BasicLevel.DEBUG, "tx=" + tx); - globaltx = tx; - } - - public Object getGlobalTx() { - return globaltx; - } - - /** - * Gets the State attribute of the ManagedConnectionInfo object - * - * @param prefix String to print out - * @return The State value - */ - public String getState(final String prefix) { - String res = prefix + "* mc=" + mc + "\n"; - res += prefix + "Context=" + globaltx + "\n"; - res += prefix + "size of usedCs:" + usedCs.size() + "\n"; - for (int i = 0; i < usedCs.size(); i++) { - res += prefix + "\t" + usedCs.elementAt(i).toString() + "\n"; - } - res += pStmts.getState(prefix); - return res; - } - - /** - * Gets the State attribute of the ManagedConnectionInfo object - * @return String current state - */ - public String getState() { - return getState(""); - } - - /** - * Fowards the detroy call on the ManagedConnection - * @throws Exception if an Exception occurs - */ - public void destroy() throws Exception { - mc.destroy(); - } - - /** - * Gets the associated XAResource - * @return XAResource associated with this object - * @throws ResourceException if an Exception occurs - */ - public XAResource getXAResource() throws ResourceException { - if (lw != null) { - return lw; - } else { - return mc.getXAResource(); - } - } - - /** - * @return the rme - */ - public JResourceManagerEvent getResourceManagementEvent() { - return rme; - } - - /** - * @return true if Prepared statement cache is enabled - */ - public boolean isCacheEnabled() { - return cacheEnabled; - } - -} - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JResourceManagerEvent.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JResourceManagerEvent.java deleted file mode 100644 index 9f8e087aa0..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JResourceManagerEvent.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm.jta; - -import javax.resource.ResourceException; -import javax.resource.spi.ManagedConnection; -import javax.transaction.RollbackException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.xa.XAResource; - -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; -import org.ow2.jonas.tm.Enlistable; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class implements {@link Enlistable}. An instance of this object is - * also an event transmited by the Resource adapter manager to the user - * transaction. This event is linked to a {@link ManagedConnection}, more exatcly this - * implementation is linked to {@link ManagedConnectionInfo} instance. - * - *@author sebastien.chassande@inrialpes.fr - */ -public class JResourceManagerEvent implements Enlistable { - - /** - * The ManagedConnectionInfo instance which represents the physical connection - */ - private ManagedConnectionInfo mci = null; - - /** - * The Logger instance where messages are written. - */ - private Logger trace = null; - - /** - * Set if the RME is valid to call enlist Resource - * Issue with JOTM and one thread calling ConnectionOpened, but a - * different thread calling Closed or Error and not enough information - * in JOTM to keep information straight. - */ - private boolean isValid = false; - - /** - * This constructor permits to specify the MCInfp corresponding to the - * ManagedConnection (the physical connection). - * - * @param mci ManagedConnectionInfo - * @param trace Logger - */ - public JResourceManagerEvent(ManagedConnectionInfo mci, Logger trace) { - this.mci = mci; - this.trace = trace; - } - - - /** - * Check if equals - * @param o Object to test equality - * @return boolean if JResourceManagerEvent objets are equal - */ - public boolean equals(Object o) { - return (o instanceof JResourceManagerEvent) && mci.equals(((JResourceManagerEvent) o).mci); - } - - - /** - * This method is in charge of the enlisting of the managedConnection linked - * to this instance, in the transaction specified in parameter. - * @param tx TransactionConnection - * @throws SystemException if an Exception occurs - */ - public void enlistConnection(Transaction tx) throws SystemException { - try { - if (isValid) { - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Enlist the XA Resource " + mci.getXAResource() - + " in Tx:" + tx); - } - tx.enlistResource(mci.getXAResource()); - } - } catch (RollbackException rbe) { - throw new SystemException(rbe.getMessage()); - } catch (ResourceException re) { - throw new SystemException(re.getMessage()); - } - } - - /** - * Used when going out of a Stateful beans - */ - public void delistConnection(Transaction tx) throws SystemException { - try { - if (isValid) { - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "Delist the XA Resource " + mci.getXAResource() - + " from Tx:" + tx); - } - tx.delistResource(mci.getXAResource(), XAResource.TMSUCCESS); - } - } catch (Exception e) { - trace.log(BasicLevel.ERROR, "Cannot delist Resource:" + e); - } - } - - /** - * @return the isValid - */ - public boolean isValid() { - return isValid; - } - - - /** - * @param isValid the isValid to set - */ - public void setValid(boolean isValid) { - this.isValid = isValid; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JSynchronization.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JSynchronization.java deleted file mode 100644 index d0c74be817..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/JSynchronization.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm.jta; - -import java.util.Iterator; -import java.util.Map; - -import javax.resource.spi.ManagedConnection; -import javax.transaction.Synchronization; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerImpl; -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; - -/** - * This class is an implementation of the {@link Synchronization} interface, used by a - * {@link ConnectionManagerImpl} instance. The aim of this class is to close a - * {@link ManagedConnection} when a transaction finishes. This class is necessary when - * the commit or the rollback action is after a connection close. - * - *@author sebastien.chassande@inrialpes.fr - *@author Eric.Hardesty@bull.com - */ -public class JSynchronization implements Synchronization { - - /** - * The descriptor linked to this Synchronization - * implementation - */ - private ManagedConnectionInfo mci = null; - - /** - * The instance which manages this synchronization - */ - private ConnectionManagerImpl cm = null; - - - /** - * Constructor for the MySynchro object - * - *@param pCm ConnectionManager object - *@param pMci ManagedConnection information object - * - */ - public JSynchronization(final ConnectionManagerImpl pCm, final ManagedConnectionInfo pMci) { - mci = pMci; - cm = pCm; - mci.synchro = this; - cm.getSynchros().add(mci); - } - - - /** - * This method is called by the transaction manager after the transaction is - * committed or rolled back. Release the mci from the pool - * - *@param status The transaction flag - */ - public void afterCompletion(final int status) { - if (mci == null) { - return; - } - synchronized (cm.getPool()) { - mci.synchro = null; - cm.getSynchros().remove(mci); - if (!mci.usedCs.isEmpty()) { - // The transaction is finished but the connection isn't closed - // then just to dissociate the tx to the mci - cm.getUsedManagedConnections().remove(mci.getGlobalTx()); - mci.setGlobalTx(null); - if (cm.poolTrace.isLoggable(BasicLevel.DEBUG)) { - cm.poolTrace.log(BasicLevel.DEBUG, "state:\n" + cm.getState("\t")); - } - } else { - // The transaction is finished and the logical connections have - // previously closed. Then release the mci - try { - cm.getManagedConnectionsWithoutTransaction().remove(mci); - if (mci.getGlobalTx() != null) { - cm.getUsedManagedConnections().remove(mci.getGlobalTx()); - } else { - Iterator it = cm.getUsedManagedConnections().entrySet().iterator(); - while (it.hasNext()) { - Map.Entry me = (Map.Entry) it.next(); - if (mci.equals(me.getValue())) { - it.remove(); - } - } - } - - mci.setGlobalTx(null); - - // force close pstmt - cm.closePStmts(mci); - - mci.mc.cleanup(); - - cm.getPool().releaseResource(mci.mc, false); - if (ConnectionManagerImpl.trace.isLoggable(BasicLevel.DEBUG)) { - ConnectionManagerImpl.trace.log(BasicLevel.DEBUG, "Later releasing of MC=" + mci.mc); - } - mci = null; - if (ConnectionManagerImpl.poolTrace.isLoggable(BasicLevel.DEBUG)) { - ConnectionManagerImpl.poolTrace.log(BasicLevel.DEBUG, "state\n" + cm.getState("\t")); - } - } catch (Exception e) { - ConnectionManagerImpl.trace.log(BasicLevel.ERROR, - "an error related during releasing of ManagedConnection", - e, "MySynchro", "afterCompletion"); - } - } - mci = null; - cm = null; - } - } - - - /** - * This method is called by the transaction manager prior to the start of the - * transaction completion process. - */ - public void beforeCompletion() { - } -} - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/LocalXAResource.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/LocalXAResource.java deleted file mode 100644 index 64abae31f1..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/jta/LocalXAResource.java +++ /dev/null @@ -1,268 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm.jta; - -import javax.resource.ResourceException; -import javax.resource.spi.LocalTransaction; - -import javax.transaction.xa.XAResource; -import javax.transaction.xa.XAException; -import javax.transaction.xa.Xid; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * A LocalXAWrapper that intercepts the XA calls for an RAR that only - * supports LocalTransactions and translates them to the appropriate - * Local Transaction methods. - * - * @author Eric.Hardesty@bull.com - */ -public final class LocalXAResource - implements XAResource { - - /** - * The Logger instance where messages are written. - */ - private static Logger logger = null; - - /** - * The boolean to determine if in a current transaction - */ - protected boolean isInTransaction; - - /** - * The LocalTransaction object to make the begin(), commit(), - * and rollback() calls. - */ - protected LocalTransaction localTrans = null; - - public LocalXAResource(LocalTransaction _localTrans, Logger _logger) { - isInTransaction = false; - localTrans = _localTrans; - logger = _logger; - } - - /** - * Commit the localTransaction, the params aren't used for a - * local transaction. - * - *@param xid transaction xid - *@param flag for interface compliance - *@exception XAException Exception trying to commit local transaction - */ - public void commit(Xid xid, boolean flag) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Xid =" + xid + "flag=" + flag); - } - - - if (isInTransaction) { - // Unbalance start/end. Probably a close is missing. - // We decide to unset isInTransaction here to avoid a further error - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "XA START without XA END"); - } - isInTransaction = false; - } - - try { - localTrans.commit(); - } catch (ResourceException res) { - XAException xaE = new XAException(res.getMessage()); - xaE.initCause(res); - throw xaE; - } - } - - /** - * No method to map for a local transaction. - *@param xid transaction xid - */ - public void end(Xid xid, int i) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Xid =" + xid + "i=" + i); - } - if (!isInTransaction) { - logger.log(BasicLevel.ERROR, "END without START"); - XAException ex = new XAException(XAException.XA_RBPROTO); - throw(ex); - } - isInTransaction = false; - - } - - /** - * No method to map for a local transaction. - *@param xid transaction xid - */ - public void forget(Xid xid) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - } - - /** - * No method to map for a local transaction, just - * return no timeout. - */ - public int getTransactionTimeout() - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - return -1; - } - - /** - * Determine if the wrapper instance is the same as the - * wrapper instance being passed in - * @param xaresource An XAResource object - * @return True if same RM instance, otherwise false. - * @throws XAException no throw in this implementation - */ - - public boolean isSameRM(XAResource xaresource) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - - if (xaresource.equals(this)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "isSameRM = true " + this); - } - return true; - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "isSameRM = false " + this); - } - return false; - } - - /** - * No method to map for a local transaction, just return XA_OK. - *@param xid transaction xid - */ - public int prepare(Xid xid) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - return XAResource.XA_OK; - } - - /** - * No method to map for a local transaction. - */ - public Xid[] recover(int i) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - return null; - } - - /** - * Rollback the localTransaction, the param isn't used for a - * local transaction. - *@param xid transaction xid - * - *@exception XAException Exception trying to rollback local transaction - */ - public void rollback(Xid xid) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Xid =" + xid); - } - - if (isInTransaction) { - // Unbalance start/end. Probably a close is missing. - // We decide to unset isInTransaction here to avoid a further error, but - // I'm not sure it's a good idea. - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "XA START without XA END"); - } - isInTransaction = false; - } - - try { - localTrans.rollback(); - } catch (ResourceException res) { - XAException xaE = new XAException("Rollback failed"); - xaE.initCause(res); - throw xaE; - } - } - - /** - * No method to map for a local transaction, just - * return no timeout. - */ - public boolean setTransactionTimeout(int i) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - return false; - } - - /** - * Only start a local transaction if a new transaction is being - * attempted, just return if joining or resuming. - * - *@param xid transaction xid - *@exception XAException Transaction already started or error - * starting a new local transaction - */ - public void start(Xid xid, int i) - throws XAException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Xid =" + xid + "i=" + i); - } - try { - if (i != XAResource.TMJOIN && i != XAResource.TMRESUME) { - if (isInTransaction) { - throw new XAException("LocalXAWrapper.start: Local transaction already started"); - } - localTrans.begin(); - isInTransaction = true; - } - } catch (ResourceException res) { - XAException xaE = new XAException("LocalTransaction.begin failed"); - xaE.initCause(res); - throw xaE; - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "OK"); - } - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/PreparedStatementWrapper.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/PreparedStatementWrapper.java deleted file mode 100644 index 48ef920852..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/PreparedStatementWrapper.java +++ /dev/null @@ -1,2530 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - * - */ - -package org.ow2.jonas.resource.internal.cm.sql; - -import java.io.InputStream; -import java.io.Reader; -import java.math.BigDecimal; -import java.net.URL; -import java.sql.Array; -import java.sql.BatchUpdateException; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.Connection; -import java.sql.Date; -import java.sql.NClob; -import java.sql.ParameterMetaData; -import java.sql.PreparedStatement; -import java.sql.Ref; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.RowId; -import java.sql.SQLException; -import java.sql.SQLFeatureNotSupportedException; -import java.sql.SQLWarning; -import java.sql.SQLXML; -import java.sql.Time; -import java.sql.Timestamp; -import java.sql.Types; -import java.util.Arrays; -import java.util.Calendar; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class PreparedStatementWrapper wrap an SQL {@link PreparedStatement} - * @author Eric HARDESTY - */ -public class PreparedStatementWrapper implements PreparedStatement { - - /** - * Prime numbers - */ - private static final int[] PRIME_NUMBERS = new int[] {11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47}; - - /** - * Wrapped preparedstatement object - */ - private PreparedStatement pstmt = null; - - /** - * User used for the preparedstatement - */ - private String user = null; - - /** - * SQL statement - */ - private String sql = null; - - /** - * This object has been marked invalid ? - */ - private boolean invalid = false; - - /** - * This object is now closed ? - */ - private boolean closed = false; - - /** - * Hashcode of this object - */ - private int hashCode; - - /** - * Type of result set. one of ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - */ - private int resultSetType = -1; - - /** - * Concurrency type for result set; one of - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - */ - private int resultSetConcurrency = -1; - - /** - * Holdability, One of the value : - * ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - */ - private int resultSetHoldability = -1; - - /** - * A flag indicating whether auto-generated keys should be returned; one of - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - */ - private int autoGeneratedKeys = -1; - - /** - * An array of column indexes indicating the columns that should be returned - * from the inserted row or rows - */ - private int[] columnIndexes = null; - - /** - * An array of column names indicating the columns that should be returned - * from the inserted row or rows - */ - private String[] columnNames = null; - - /** - * Logger used for traces - */ - private final Logger trace; - - /** - * Direction was Changed ? need to reset or not - */ - private boolean setFetchDirectionCalled = false; - - /** - * Escape processing was changed ? need to reset or not - */ - private boolean setEscapeProcessingCalled = false; - - /** - * Max field size ? need to reset or not - */ - private boolean setMaxFieldSizeCalled = false; - - /** - * Debug logging enabled ? - */ - private final boolean isDebugLogging; - - /** - * Creates a PreparedStatementWrapper object. - * This constructor is private and is used by other constructors. - * It contains all constructors elements. - * @param user the user used for accessing the connection - * @param sql a String object that is the SQL statement to be - * sent to the database; may contain one or more ? IN parameters - * @param resultSetType a result set type; one of - * ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - * @param resultSetConcurrency a concurrency type; one of - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - * @param resultSetHoldability one of the following ResultSet - * constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - * @param autoGeneratedKeys a flag indicating whether auto-generated keys - * should be returned; one of - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - * @param columnIndexes an array of column indexes indicating the columns - * that should be returned from the inserted row or rows - * @param columnNames an array of column names indicating the columns that - * should be returned from the inserted row or rows - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - */ - private PreparedStatementWrapper(final String user, final String sql, final int resultSetType, - final int resultSetConcurrency, final int resultSetHoldability, final int autoGeneratedKeys, - final int[] columnIndexes, final String[] columnNames, final Logger trace, final boolean isDebugLogging) { - - this.user = user; - this.sql = sql; - this.resultSetType = resultSetType; - this.resultSetConcurrency = resultSetConcurrency; - this.resultSetHoldability = resultSetHoldability; - this.autoGeneratedKeys = autoGeneratedKeys; - this.columnIndexes = columnIndexes; - this.columnNames = columnNames; - this.trace = trace; - - int i = 0; - // hashcode computing - if (sql != null) { - hashCode = sql.hashCode(); - } else { - hashCode = PRIME_NUMBERS[i++]; - } - if (user != null) { - hashCode ^= user.hashCode(); - } else { - hashCode ^= PRIME_NUMBERS[i++]; - } - hashCode ^= (resultSetType * PRIME_NUMBERS[i++]); - hashCode ^= (resultSetConcurrency * PRIME_NUMBERS[i++]); - hashCode ^= (resultSetHoldability * PRIME_NUMBERS[i++]); - hashCode ^= (autoGeneratedKeys * PRIME_NUMBERS[i++]); - if (columnIndexes != null) { - hashCode ^= columnIndexes.hashCode(); - } else { - hashCode ^= PRIME_NUMBERS[i++]; - } - if (columnNames != null) { - hashCode ^= columnNames.hashCode(); - } else { - hashCode ^= PRIME_NUMBERS[i++]; - } - this.isDebugLogging = isDebugLogging; - } - - - - /** - * Creates a PreparedStatementWrapper object that will - * generate ResultSet objects with the given type and - * concurrency. This method is the same as the prepareStatement - * method above, but it allows the default result set type and concurrency - * to be overridden. - * @param user the user used for accessing the connection - * @param sql a String object that is the SQL statement to be - * sent to the database; may contain one or more ? IN parameters - * @param resultSetType a result set type; one of - * ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - * @param resultSetConcurrency a concurrency type; one of - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - * @since JDK 1.2 - */ - public PreparedStatementWrapper(final String user, final String sql, final int resultSetType, - final int resultSetConcurrency, final Logger trace, final boolean isDebugLogging) { - this(user, sql, resultSetType, resultSetConcurrency, -1, -1, null, null, trace, isDebugLogging); - } - - /** - * Creates a PreparedStatementWrapper object that will - * generate ResultSet objects with the given type, - * concurrency, and holdability. - *

    - * This method is the same as the prepareStatement method - * above, but it allows the default result set type, concurrency, and - * holdability to be overridden. - * @param user the user used for accessing the connection - * @param sql a String object that is the SQL statement to be - * sent to the database; may contain one or more ? IN parameters - * @param resultSetType one of the following ResultSet - * constants: ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - * @param resultSetConcurrency one of the following ResultSet - * constants: ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - * @param resultSetHoldability one of the following ResultSet - * constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - * @since JDK 1.4 - */ - public PreparedStatementWrapper(final String user, final String sql, final int resultSetType, - final int resultSetConcurrency, final int resultSetHoldability, final Logger trace, final boolean isDebugLogging) { - this(user, sql, resultSetType, resultSetConcurrency, resultSetHoldability, -1, null, null, trace, isDebugLogging); - } - - /** - * Creates a default PreparedStatementWrapper object that has - * the capability to retrieve auto-generated keys. The given constant tells - * the driver whether it should make auto-generated keys available for - * retrieval. This parameter is ignored if the SQL statement is not an - * INSERT statement. - * @param user the user used for accessing the connection - * @param sql an SQL statement that may contain one or more '?' IN parameter - * placeholders - * @param autoGeneratedKeys a flag indicating whether auto-generated keys - * should be returned; one of - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - * @since JDK 1.4 - */ - public PreparedStatementWrapper(final String user, final String sql, final int autoGeneratedKeys, final Logger trace, final boolean isDebugLogging) { - this(user, sql, -1, -1, -1, autoGeneratedKeys, null, null, trace, isDebugLogging); - } - - /** - * Creates a default PreparedStatementWrapper object capable - * of returning the auto-generated keys designated by the given array. This - * array contains the indexes of the columns in the target table that - * contain the auto-generated keys that should be made available. This array - * is ignored if the SQL statement is not an INSERT - * statement. - *

    - * An SQL statement with or without IN parameters can be pre-compiled and - * stored in a PreparedStatement object. This object can then - * be used to efficiently execute this statement multiple times. - * @param user the user used for accessing the connection - * @param sql an SQL statement that may contain one or more '?' IN parameter - * placeholders - * @param columnIndexes an array of column indexes indicating the columns - * that should be returned from the inserted row or rows - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - * @since JDK 1.4 - */ - public PreparedStatementWrapper(final String user, final String sql, final int[] columnIndexes, final Logger trace, final boolean isDebugLogging) { - this(user, sql, -1, -1, -1, -1, columnIndexes, null, trace, isDebugLogging); - } - - /** - * Creates a default PreparedStatementWrapper object capable - * of returning the auto-generated keys designated by the given array. This - * array contains the names of the columns in the target table that contain - * the auto-generated keys that should be returned. This array is ignored if - * the SQL statement is not an INSERT statement. - *

    - * An SQL statement with or without IN parameters can be pre-compiled and - * stored in a PreparedStatement object. This object can then - * be used to efficiently execute this statement multiple times. - * @param user the user used for accessing the connection - * @param sql an SQL statement that may contain one or more '?' IN parameter - * placeholders - * @param columnNames an array of column names indicating the columns that - * should be returned from the inserted row or rows - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - * @since JDK 1.4 - */ - public PreparedStatementWrapper(final String user, final String sql, final String[] columnNames, final Logger trace, final boolean isDebugLogging) { - this(user, sql, -1, -1, -1, -1, null, columnNames, trace, isDebugLogging); - } - - /** - * Checks that this object is not in invalid state - * @throws SQLException if object is in invalid mode - */ - public void checkIfValid() throws SQLException { - if (invalid) { - SQLException se = new SQLException("PreparedStatement(" + this + ") is invalid."); - trace.log(BasicLevel.ERROR, se); - throw se; - } - - } - - /** - * Clears the values stored in the preparement. This is required as this - * preparedstatement is reused - */ - public void clearPstmtValues() { - closed = false; - try { - pstmt.clearParameters(); - pstmt.clearBatch(); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot clear parameters", ex); - } - } - if (setEscapeProcessingCalled) { - try { - pstmt.setEscapeProcessing(true); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot reset escape processing to true", ex); - } - } - } - if (setFetchDirectionCalled) { - try { - pstmt.setFetchDirection(ResultSet.FETCH_FORWARD); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot set fetch direction to ResultSet.FETCH_FORWARD", ex); - } - } - } - if (setMaxFieldSizeCalled) { - try { - pstmt.setMaxFieldSize(0); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot set max field size to 0", ex); - } - } - } - try { - pstmt.setMaxRows(0); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot set max rows to 0", ex); - } - } - try { - pstmt.setQueryTimeout(0); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot set query timeout to 0", ex); - } - } - try { - pstmt.clearWarnings(); - } catch (Throwable ex) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Cannot clear warnings", ex); - } - } - } - - /** - * Close this object - * @throws SQLException if object cannot be closed - */ - public void closePstmt() throws SQLException { - closed = true; - pstmt.close(); - } - - /** - * Destroy this preparestatement object, then it becomes closed and invalid - * @throws SQLException if it cannot be closed - */ - public void destroy() throws SQLException { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "" + this); - } - try { - pstmt.close(); - } finally { - invalid = true; - closed = true; - } - } - - /** - * @param stmt given statement for comparing it - * @return true if given object is equals to this current object - */ - @Override - public boolean equals(final Object stmt) { - if (stmt == null) { - return false; - } - // different hashcode, cannot be equals - if (this.hashCode != stmt.hashCode()) { - return false; - } - - // if got same hashcode, try to see if cast is ok. - if (!(stmt instanceof PreparedStatementWrapper)) { - return false; - } - PreparedStatementWrapper psw = (PreparedStatementWrapper) stmt; - - if (invalid) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Prepared Statement is invalid"); - } - return false; - } - if (sql == null && psw.sql != null) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt sql: " + psw.sql + " not equal to " + sql); - } - return false; - } - if (sql != null && !sql.equals(psw.sql)) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt sql: " + psw.sql + " not equal to " + sql); - } - return false; - } - if (user == null && psw.user != null) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt user: " + psw.user + " not equal to " + user); - } - return false; - } - if (user != null && !user.equals(psw.user)) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt user: " + psw.user + " not equal to " + user); - } - return false; - } - if (resultSetType != psw.resultSetType) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt resultSetType: " + psw.resultSetType + " not equal to " - + resultSetType); - } - return false; - } - if (resultSetConcurrency != psw.resultSetConcurrency) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt resultSetConcurrency: " + psw.resultSetConcurrency + " not equal to " - + resultSetConcurrency); - } - return false; - } - if (resultSetHoldability != psw.resultSetHoldability) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt resultSetHoldability: " + psw.resultSetHoldability + " not equal to " - + resultSetHoldability); - } - return false; - } - if (autoGeneratedKeys != psw.autoGeneratedKeys) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt autoGeneratedKeys: " + psw.autoGeneratedKeys + " not equal to " - + autoGeneratedKeys); - } - return false; - } - if (!Arrays.equals(columnIndexes, psw.columnIndexes)) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt columnIndexes: " + psw.columnIndexes + " not equal to " - + columnIndexes); - } - return false; - } - if (!Arrays.equals(columnNames, psw.columnNames)) { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt columnNames: " + psw.columnNames + " not equal to " + columnNames); - } - return false; - } - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "Stmt found at " + this); - } - return true; - } - - /** - * Close this object - * @param val true/false - */ - public void setClosed(final boolean val) { - closed = val; - } - - /** - * Sets the real prepared statement object on which we wrap calls - * @param pstmt sql preparedstatement - */ - public void setPreparedStatement(final PreparedStatement pstmt) { - this.pstmt = pstmt; - } - - /*************************************************************************** - * Prepared Statment calls - */ - - /** - * Adds a set of parameters to this PreparedStatement - * object's batch of commands. - * @exception SQLException if a database access error occurs - * @see Statement#addBatch - * @since 1.2 - */ - public void addBatch() throws SQLException { - checkIfValid(); - pstmt.addBatch(); - } - - /** - * Clears the current parameter values immediately. - *

    - * In general, parameter values remain in force for repeated use of a - * statement. Setting a parameter value automatically clears its previous - * value. However, in some cases it is useful to immediately release the - * resources used by the current parameter values; this can be done by - * calling the method clearParameters. - * @exception SQLException if a database access error occurs - */ - public void clearParameters() throws SQLException { - checkIfValid(); - pstmt.clearParameters(); - } - - /** - * Executes the SQL statement in this PreparedStatement - * object, which may be any kind of SQL statement. Some prepared statements - * return multiple results; the execute method handles these - * complex statements as well as the simpler form of statements handled by - * the methods executeQuery and executeUpdate. - *

    - * The execute method returns a boolean to - * indicate the form of the first result. You must call either the method - * getResultSet or getUpdateCount to retrieve - * the result; you must call getMoreResults to move to any - * subsequent result(s). - * @return true if the first result is a - * ResultSet object; false if the - * first result is an update count or there is no result - * @exception SQLException if a database access error occurs or an argument - * is supplied to this method - * @see Statement#execute - * @see Statement#getResultSet - * @see Statement#getUpdateCount - * @see Statement#getMoreResults - */ - public boolean execute() throws SQLException { - checkIfValid(); - return pstmt.execute(); - } - - // JDK1.4 - /** - * Executes the given SQL statement, which may return multiple results, and - * signals the driver that any auto-generated keys should be made available - * for retrieval. The driver will ignore this signal if the SQL statement is - * not an INSERT statement. - *

    - * In some (uncommon) situations, a single SQL statement may return multiple - * result sets and/or update counts. Normally you can ignore this unless you - * are (1) executing a stored procedure that you know may return multiple - * results or (2) you are dynamically executing an unknown SQL string. - *

    - * The execute method executes an SQL statement and indicates - * the form of the first result. You must then use the methods - * getResultSet or getUpdateCount to retrieve - * the result, and getMoreResults to move to any subsequent - * result(s). - * @param sql any SQL statement - * @param autoGeneratedKeys a constant indicating whether auto-generated - * keys should be made available for retrieval using the method - * getGeneratedKeys; one of the following constants: - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - * @return true if the first result is a - * ResultSet object; false if it is an - * update count or there are no results - * @exception SQLException if a database access error occurs or the second - * parameter supplied to this method is not - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS. - * @see #getResultSet - * @see #getUpdateCount - * @see #getMoreResults - * @see #getGeneratedKeys - * @since 1.4 - */ - public boolean execute(final String sql, final int autoGeneratedKeys) throws SQLException { - checkIfValid(); - return pstmt.execute(sql, autoGeneratedKeys); - } - - // JDK1.4 - /** - * Executes the given SQL statement, which may return multiple results, and - * signals the driver that the auto-generated keys indicated in the given - * array should be made available for retrieval. This array contains the - * indexes of the columns in the target table that contain the - * auto-generated keys that should be made available. The driver will ignore - * the array if the given SQL statement is not an INSERT - * statement. - *

    - * Under some (uncommon) situations, a single SQL statement may return - * multiple result sets and/or update counts. Normally you can ignore this - * unless you are (1) executing a stored procedure that you know may return - * multiple results or (2) you are dynamically executing an unknown SQL - * string. - *

    - * The execute method executes an SQL statement and indicates - * the form of the first result. You must then use the methods - * getResultSet or getUpdateCount to retrieve - * the result, and getMoreResults to move to any subsequent - * result(s). - * @param sql any SQL statement - * @param columnIndexes an array of the indexes of the columns in the - * inserted row that should be made available for retrieval by a call - * to the method getGeneratedKeys - * @return true if the first result is a - * ResultSet object; false if it is an - * update count or there are no results - * @exception SQLException if a database access error occurs or the elements - * in the int array passed to this method are not - * valid column indexes - * @see #getResultSet - * @see #getUpdateCount - * @see #getMoreResults - * @since 1.4 - */ - public boolean execute(final String sql, final int[] columnIndexes) throws SQLException { - checkIfValid(); - return pstmt.execute(sql, columnIndexes); - } - - // JDK1.4 - /** - * Executes the given SQL statement, which may return multiple results, and - * signals the driver that the auto-generated keys indicated in the given - * array should be made available for retrieval. This array contains the - * names of the columns in the target table that contain the auto-generated - * keys that should be made available. The driver will ignore the array if - * the given SQL statement is not an INSERT statement. - *

    - * In some (uncommon) situations, a single SQL statement may return multiple - * result sets and/or update counts. Normally you can ignore this unless you - * are (1) executing a stored procedure that you know may return multiple - * results or (2) you are dynamically executing an unknown SQL string. - *

    - * The execute method executes an SQL statement and indicates - * the form of the first result. You must then use the methods - * getResultSet or getUpdateCount to retrieve - * the result, and getMoreResults to move to any subsequent - * result(s). - * @param sql any SQL statement - * @param columnNames an array of the names of the columns in the inserted - * row that should be made available for retrieval by a call to the - * method getGeneratedKeys - * @return true if the next result is a - * ResultSet object; false if it is an - * update count or there are no more results - * @exception SQLException if a database access error occurs or the elements - * of the String array passed to this method are - * not valid column names - * @see #getResultSet - * @see #getUpdateCount - * @see #getMoreResults - * @see #getGeneratedKeys - * @since 1.4 - */ - public boolean execute(final String sql, final String[] columnNames) throws SQLException { - checkIfValid(); - return pstmt.execute(sql, columnNames); - } - - /** - * Executes the SQL query in this PreparedStatement object - * and returns the ResultSet object generated by the query. - * @return a ResultSet object that contains the data produced - * by the query; never null - * @exception SQLException if a database access error occurs or the SQL - * statement does not return a ResultSet object - */ - public ResultSet executeQuery() throws SQLException { - checkIfValid(); - return pstmt.executeQuery(); - } - - /** - * Executes the SQL statement in this PreparedStatement - * object, which must be an SQL INSERT, UPDATE - * or DELETE statement; or an SQL statement that returns - * nothing, such as a DDL statement. - * @return either (1) the row count for INSERT, - * UPDATE, or DELETE statements or - * (2) 0 for SQL statements that return nothing - * @exception SQLException if a database access error occurs or the SQL - * statement returns a ResultSet object - */ - public int executeUpdate() throws SQLException { - checkIfValid(); - return pstmt.executeUpdate(); - } - - // JDK1.4 - /** - * Executes the given SQL statement and signals the driver with the given - * flag about whether the auto-generated keys produced by this - * Statement object should be made available for retrieval. - * @param sql must be an SQL INSERT, UPDATE - * or DELETE statement or an SQL statement that - * returns nothing - * @param autoGeneratedKeys a flag indicating whether auto-generated keys - * should be made available for retrieval; one of the following - * constants: Statement.RETURN_GENERATED_KEYS - * Statement.NO_GENERATED_KEYS - * @return either the row count for INSERT, - * UPDATE or DELETE statements, or - * 0 for SQL statements that return nothing - * @exception SQLException if a database access error occurs, the given SQL - * statement returns a ResultSet object, or the - * given constant is not one of those allowed - * @since 1.4 - */ - public int executeUpdate(final String sql, final int autoGeneratedKeys) throws SQLException { - checkIfValid(); - return pstmt.executeUpdate(sql, autoGeneratedKeys); - } - - // JDK1.4 - /** - * Executes the given SQL statement and signals the driver that the - * auto-generated keys indicated in the given array should be made available - * for retrieval. The driver will ignore the array if the SQL statement is - * not an INSERT statement. - * @param sql an SQL INSERT, UPDATE or - * DELETE statement or an SQL statement that returns - * nothing, such as an SQL DDL statement - * @param columnIndexes an array of column indexes indicating the columns - * that should be returned from the inserted row - * @return either the row count for INSERT, - * UPDATE, or DELETE statements, or 0 - * for SQL statements that return nothing - * @exception SQLException if a database access error occurs, the SQL - * statement returns a ResultSet object, or the - * second argument supplied to this method is not an - * int array whose elements are valid column - * indexes - * @since 1.4 - */ - public int executeUpdate(final String sql, final int[] columnIndexes) throws SQLException { - checkIfValid(); - return pstmt.executeUpdate(sql, columnIndexes); - } - - // JDK1.4 - /** - * Executes the given SQL statement and signals the driver that the - * auto-generated keys indicated in the given array should be made available - * for retrieval. The driver will ignore the array if the SQL statement is - * not an INSERT statement. - * @param sql an SQL INSERT, UPDATE or - * DELETE statement or an SQL statement that returns - * nothing - * @param columnNames an array of the names of the columns that should be - * returned from the inserted row - * @return either the row count for INSERT, - * UPDATE, or DELETE statements, or 0 - * for SQL statements that return nothing - * @exception SQLException if a database access error occurs, the SQL - * statement returns a ResultSet object, or the - * second argument supplied to this method is not a - * String array whose elements are valid column - * names - * @since 1.4 - */ - public int executeUpdate(final String sql, final String[] columnNames) throws SQLException { - checkIfValid(); - return pstmt.executeUpdate(sql, columnNames); - } - - // JDK1.4 - /** - * Retrieves any auto-generated keys created as a result of executing this - * Statement object. If this Statement object - * did not generate any keys, an empty ResultSet object is - * returned. - * @return a ResultSet object containing the auto-generated - * key(s) generated by the execution of this Statement - * object - * @exception SQLException if a database access error occurs - * @since 1.4 - */ - public ResultSet getGeneratedKeys() throws SQLException { - checkIfValid(); - return pstmt.getGeneratedKeys(); - } - - /** - * Retrieves a ResultSetMetaData object that contains - * information about the columns of the ResultSet object that - * will be returned when this PreparedStatement object is - * executed. - *

    - * Because a PreparedStatement object is precompiled, it is - * possible to know about the ResultSet object that it will - * return without having to execute it. Consequently, it is possible to - * invoke the method getMetaData on a - * PreparedStatement object rather than waiting to execute it - * and then invoking the ResultSet.getMetaData method on the - * ResultSet object that is returned. - *

    - * NOTE: Using this method may be expensive for some drivers due to - * the lack of underlying DBMS support. - * @return the description of a ResultSet object's columns or - * null if the driver cannot return a - * ResultSetMetaData object - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public ResultSetMetaData getMetaData() throws SQLException { - checkIfValid(); - return pstmt.getMetaData(); - } - - // JDK1.4 - /** - * Moves to this Statement object's next result, deals with - * any current ResultSet object(s) according to the - * instructions specified by the given flag, and returns true - * if the next result is a ResultSet object. - *

    - * There are no more results when the following is true: - * - *

     // stmt is a Statement object ((stmt.getMoreResults() == false) &&
    -     * (stmt.getUpdateCount() == -1))
    -     *
    -     * 
    - * - * @param current one of the following Statement constants - * indicating what should happen to current ResultSet - * objects obtained using the method getResultSet: - * Statement.CLOSE_CURRENT_RESULT, - * Statement.KEEP_CURRENT_RESULT, or - * Statement.CLOSE_ALL_RESULTS - * @return true if the next result is a - * ResultSet object; false if it is an - * update count or there are no more results - * @exception SQLException if a database access error occurs or the argument - * supplied is not one of the following: - * Statement.CLOSE_CURRENT_RESULT, - * Statement.KEEP_CURRENT_RESULT, or - * Statement.CLOSE_ALL_RESULTS - * @since 1.4 - * @see #execute - */ - public boolean getMoreResults(final int current) throws SQLException { - checkIfValid(); - return pstmt.getMoreResults(current); - - } - - // JDK1.4 - /** - * Retrieves the number, types and properties of this - * PreparedStatement object's parameters. - * @return a ParameterMetaData object that contains - * information about the number, types and properties of this - * PreparedStatement object's parameters - * @exception SQLException if a database access error occurs - * @see ParameterMetaData - * @since 1.4 - */ - public ParameterMetaData getParameterMetaData() throws SQLException { - checkIfValid(); - return pstmt.getParameterMetaData(); - - } - - // JDK1.4 - /** - * Retrieves the result set holdability for ResultSet objects - * generated by this Statement object. - * @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - * @exception SQLException if a database access error occurs - * @since 1.4 - */ - public int getResultSetHoldability() throws SQLException { - checkIfValid(); - return pstmt.getResultSetHoldability(); - } - - /** - * Sets the designated parameter to the given Array object. - * The driver converts this to an SQL ARRAY value when it - * sends it to the database. - * @param i the first parameter is 1, the second is 2, ... - * @param x an Array object that maps an SQL - * ARRAY value - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setArray(final int i, final Array x) throws SQLException { - checkIfValid(); - pstmt.setArray(i, x); - } - - /** - * Sets the designated parameter to the given input stream, which will have - * the specified number of bytes. When a very large ASCII value is input to - * a LONGVARCHAR parameter, it may be more practical to send - * it via a java.io.InputStream. Data will be read from the - * stream as needed until end-of-file is reached. The JDBC driver will do - * any necessary conversion from ASCII to the database char format. - *

    - * Note: This stream object can either be a standard Java stream - * object or your own subclass that implements the standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the Java input stream that contains the ASCII parameter value - * @param length the number of bytes in the stream - * @exception SQLException if a database access error occurs - */ - public void setAsciiStream(final int parameterIndex, final InputStream x, final int length) throws SQLException { - checkIfValid(); - pstmt.setAsciiStream(parameterIndex, x, length); - - } - - /** - * Sets the designated parameter to the given - * java.math.BigDecimal value. The driver converts this to an - * SQL NUMERIC value when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setBigDecimal(final int parameterIndex, final BigDecimal x) throws SQLException { - checkIfValid(); - pstmt.setBigDecimal(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given input stream, which will have - * the specified number of bytes. When a very large binary value is input to - * a LONGVARBINARY parameter, it may be more practical to - * send it via a java.io.InputStream object. The data will be - * read from the stream as needed until end-of-file is reached. - *

    - * Note: This stream object can either be a standard Java stream - * object or your own subclass that implements the standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java input stream which contains the binary parameter value - * @param length the number of bytes in the stream - * @exception SQLException if a database access error occurs - */ - public void setBinaryStream(final int parameterIndex, final InputStream x, final int length) throws SQLException { - checkIfValid(); - pstmt.setBinaryStream(parameterIndex, x, length); - } - - /** - * Sets the designated parameter to the given Blob object. - * The driver converts this to an SQL BLOB value when it - * sends it to the database. - * @param i the first parameter is 1, the second is 2, ... - * @param x a Blob object that maps an SQL BLOB - * value - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setBlob(final int i, final Blob x) throws SQLException { - checkIfValid(); - pstmt.setBlob(i, x); - } - - /** - * Sets the designated parameter to the given Java boolean - * value. The driver converts this to an SQL BIT value when - * it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setBoolean(final int parameterIndex, final boolean x) throws SQLException { - checkIfValid(); - pstmt.setBoolean(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java byte - * value. The driver converts this to an SQL TINYINT value - * when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setByte(final int parameterIndex, final byte x) throws SQLException { - checkIfValid(); - pstmt.setByte(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java array of bytes. The - * driver converts this to an SQL VARBINARY or - * LONGVARBINARY (depending on the argument's size relative - * to the driver's limits on VARBINARY values) when it sends - * it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setBytes(final int parameterIndex, final byte[] x) throws SQLException { - checkIfValid(); - pstmt.setBytes(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Reader object, - * which is the given number of characters long. When a very large UNICODE - * value is input to a LONGVARCHAR parameter, it may be more - * practical to send it via a java.io.Reader object. The data - * will be read from the stream as needed until end-of-file is reached. The - * JDBC driver will do any necessary conversion from UNICODE to the database - * char format. - *

    - * Note: This stream object can either be a standard Java stream - * object or your own subclass that implements the standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param reader the java.io.Reader object that contains the - * Unicode data - * @param length the number of characters in the stream - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setCharacterStream(final int parameterIndex, final Reader reader, final int length) throws SQLException { - checkIfValid(); - pstmt.setCharacterStream(parameterIndex, reader, length); - } - - /** - * Sets the designated parameter to the given Clob object. - * The driver converts this to an SQL CLOB value when it - * sends it to the database. - * @param i the first parameter is 1, the second is 2, ... - * @param x a Clob object that maps an SQL CLOB - * value - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setClob(final int i, final Clob x) throws SQLException { - checkIfValid(); - pstmt.setClob(i, x); - } - - /** - * Sets the designated parameter to the given java.sql.Date - * value. The driver converts this to an SQL DATE value when - * it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setDate(final int parameterIndex, final Date x) throws SQLException { - checkIfValid(); - pstmt.setDate(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given java.sql.Date - * value, using the given Calendar object. The driver uses - * the Calendar object to construct an SQL DATE - * value, which the driver then sends to the database. With a - * Calendar object, the driver can calculate the date taking - * into account a custom timezone. If no Calendar object is - * specified, the driver uses the default timezone, which is that of the - * virtual machine running the application. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @param cal the Calendar object the driver will use to - * construct the date - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setDate(final int parameterIndex, final Date x, final Calendar cal) throws SQLException { - checkIfValid(); - pstmt.setDate(parameterIndex, x, cal); - } - - /** - * Sets the designated parameter to the given Java double - * value. The driver converts this to an SQL DOUBLE value - * when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setDouble(final int parameterIndex, final double x) throws SQLException { - checkIfValid(); - pstmt.setDouble(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java float - * value. The driver converts this to an SQL FLOAT value when - * it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setFloat(final int parameterIndex, final float x) throws SQLException { - checkIfValid(); - pstmt.setFloat(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java int value. - * The driver converts this to an SQL INTEGER value when it - * sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setInt(final int parameterIndex, final int x) throws SQLException { - checkIfValid(); - pstmt.setInt(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java long - * value. The driver converts this to an SQL BIGINT value - * when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setLong(final int parameterIndex, final long x) throws SQLException { - checkIfValid(); - pstmt.setLong(parameterIndex, x); - } - - /** - * Sets the designated parameter to SQL NULL. - *

    - * Note: You must specify the parameter's SQL type. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param sqlType the SQL type code defined in java.sql.Types - * @exception SQLException if a database access error occurs - */ - public void setNull(final int parameterIndex, final int sqlType) throws SQLException { - checkIfValid(); - pstmt.setNull(parameterIndex, sqlType); - } - - /** - * Sets the designated parameter to SQL NULL. This version - * of the method setNull should be used for user-defined - * types and REF type parameters. Examples of user-defined types include: - * STRUCT, DISTINCT, JAVA_OBJECT, and named array types. - *

    - * Note: To be portable, applications must give the SQL type code - * and the fully-qualified SQL type name when specifying a NULL user-defined - * or REF parameter. In the case of a user-defined type the name is the type - * name of the parameter itself. For a REF parameter, the name is the type - * name of the referenced type. If a JDBC driver does not need the type code - * or type name information, it may ignore it. Although it is intended for - * user-defined and Ref parameters, this method may be used to set a null - * parameter of any JDBC type. If the parameter does not have a user-defined - * or REF type, the given typeName is ignored. - * @param paramIndex the first parameter is 1, the second is 2, ... - * @param sqlType a value from java.sql.Types - * @param typeName the fully-qualified name of an SQL user-defined type; - * ignored if the parameter is not a user-defined type or REF - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setNull(final int paramIndex, final int sqlType, final String typeName) throws SQLException { - checkIfValid(); - pstmt.setNull(paramIndex, sqlType, typeName); - } - - /** - *

    - * Sets the value of the designated parameter using the given object. The - * second parameter must be of type Object; therefore, the - * java.lang equivalent objects should be used for built-in - * types. - *

    - * The JDBC specification specifies a standard mapping from Java - * Object types to SQL types. The given argument will be - * converted to the corresponding SQL type before being sent to the - * database. - *

    - * Note that this method may be used to pass datatabase- specific abstract - * data types, by using a driver-specific Java type. If the object is of a - * class implementing the interface SQLData, the JDBC driver - * should call the method SQLData.writeSQL to write it to the - * SQL data stream. If, on the other hand, the object is of a class - * implementing Ref, Blob, Clob, - * Struct, or Array, the driver should pass - * it to the database as a value of the corresponding SQL type. - *

    - * This method throws an exception if there is an ambiguity, for example, if - * the object is of a class implementing more than one of the interfaces - * named above. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the object containing the input parameter value - * @exception SQLException if a database access error occurs or the type of - * the given object is ambiguous - */ - public void setObject(final int parameterIndex, final Object x) throws SQLException { - checkIfValid(); - pstmt.setObject(parameterIndex, x); - } - - /** - * Sets the value of the designated parameter with the given object. This - * method is like the method setObject above, except that it - * assumes a scale of zero. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the object containing the input parameter value - * @param targetSqlType the SQL type (as defined in java.sql.Types) to be - * sent to the database - * @exception SQLException if a database access error occurs - */ - public void setObject(final int parameterIndex, final Object x, final int targetSqlType) throws SQLException { - checkIfValid(); - pstmt.setObject(parameterIndex, x, targetSqlType); - } - - /** - *

    - * Sets the value of the designated parameter with the given object. The - * second argument must be an object type; for integral values, the - * java.lang equivalent objects should be used. - *

    - * The given Java object will be converted to the given targetSqlType before - * being sent to the database. If the object has a custom mapping (is of a - * class implementing the interface SQLData), the JDBC - * driver should call the method SQLData.writeSQL to write it - * to the SQL data stream. If, on the other hand, the object is of a class - * implementing Ref, Blob, Clob, - * Struct, or Array, the driver should pass - * it to the database as a value of the corresponding SQL type. - *

    - * Note that this method may be used to pass database-specific abstract data - * types. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the object containing the input parameter value - * @param targetSqlType the SQL type (as defined in java.sql.Types) to be - * sent to the database. The scale argument may further qualify this - * type. - * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types, - * this is the number of digits after the decimal point. For all - * other types, this value will be ignored. - * @exception SQLException if a database access error occurs - * @see Types - */ - public void setObject(final int parameterIndex, final Object x, final int targetSqlType, final int scale) throws SQLException { - checkIfValid(); - pstmt.setObject(parameterIndex, x, targetSqlType, scale); - } - - /** - * Sets the designated parameter to the given - * REF(<structured-type>) value. The driver converts - * this to an SQL REF value when it sends it to the database. - * @param i the first parameter is 1, the second is 2, ... - * @param x an SQL REF value - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setRef(final int i, final Ref x) throws SQLException { - checkIfValid(); - pstmt.setRef(i, x); - } - - /** - * Sets the designated parameter to the given Java short - * value. The driver converts this to an SQL SMALLINT value - * when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setShort(final int parameterIndex, final short x) throws SQLException { - checkIfValid(); - pstmt.setShort(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Java String - * value. The driver converts this to an SQL VARCHAR or - * LONGVARCHAR value (depending on the argument's size - * relative to the driver's limits on VARCHAR values) when it - * sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setString(final int parameterIndex, final String x) throws SQLException { - checkIfValid(); - pstmt.setString(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given java.sql.Time - * value. The driver converts this to an SQL TIME value when - * it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setTime(final int parameterIndex, final Time x) throws SQLException { - checkIfValid(); - pstmt.setTime(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given java.sql.Time - * value, using the given Calendar object. The driver uses - * the Calendar object to construct an SQL TIME - * value, which the driver then sends to the database. With a - * Calendar object, the driver can calculate the time taking - * into account a custom timezone. If no Calendar object is - * specified, the driver uses the default timezone, which is that of the - * virtual machine running the application. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @param cal the Calendar object the driver will use to - * construct the time - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setTime(final int parameterIndex, final Time x, final Calendar cal) throws SQLException { - checkIfValid(); - pstmt.setTime(parameterIndex, x, cal); - } - - /** - * Sets the designated parameter to the given - * java.sql.Timestamp value. The driver converts this to an - * SQL TIMESTAMP value when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @exception SQLException if a database access error occurs - */ - public void setTimestamp(final int parameterIndex, final Timestamp x) throws SQLException { - checkIfValid(); - pstmt.setTimestamp(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given - * java.sql.Timestamp value, using the given - * Calendar object. The driver uses the Calendar - * object to construct an SQL TIMESTAMP value, which the - * driver then sends to the database. With a Calendar object, - * the driver can calculate the timestamp taking into account a custom - * timezone. If no Calendar object is specified, the driver - * uses the default timezone, which is that of the virtual machine running - * the application. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @param cal the Calendar object the driver will use to - * construct the timestamp - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public void setTimestamp(final int parameterIndex, final Timestamp x, final Calendar cal) throws SQLException { - checkIfValid(); - pstmt.setTimestamp(parameterIndex, x, cal); - } - - /** - * Sets the designated parameter to the given input stream, which will have - * the specified number of bytes. A Unicode character has two bytes, with - * the first byte being the high byte, and the second being the low byte. - * When a very large Unicode value is input to a LONGVARCHAR - * parameter, it may be more practical to send it via a - * java.io.InputStream object. The data will be read from the - * stream as needed until end-of-file is reached. The JDBC driver will do - * any necessary conversion from Unicode to the database char format. - *

    - * Note: This stream object can either be a standard Java stream - * object or your own subclass that implements the standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x a java.io.InputStream object that contains the - * Unicode parameter value as two-byte Unicode characters - * @param length the number of bytes in the stream - * @exception SQLException if a database access error occurs - * @deprecated - */ - @Deprecated - public void setUnicodeStream(final int parameterIndex, final InputStream x, final int length) throws SQLException { - checkIfValid(); - pstmt.setUnicodeStream(parameterIndex, x, length); - } - - // Statement interface - - /** - * Adds the given SQL command to the current list of commmands for this - * Statement object. The commands in this list can be - * executed as a batch by calling the method executeBatch. - *

    - * NOTE: This method is optional. - * @param s typically this is a static SQL INSERT or - * UPDATE statement - * @exception SQLException if a database access error occurs, or the driver - * does not support batch updates - * @see #executeBatch - * @since 1.2 - */ - public void addBatch(final String s) throws SQLException { - checkIfValid(); - pstmt.addBatch(s); - } - - /** - * Cancels this Statement object if both the DBMS and driver - * support aborting an SQL statement. This method can be used by one thread - * to cancel a statement that is being executed by another thread. - * @exception SQLException if a database access error occurs - */ - public void cancel() throws SQLException { - checkIfValid(); - pstmt.cancel(); - } - - /** - * Empties this Statement object's current list of SQL - * commands. - *

    - * NOTE: This method is optional. - * @exception SQLException if a database access error occurs or the driver - * does not support batch updates - * @see #addBatch - * @since 1.2 - */ - public void clearBatch() throws SQLException { - checkIfValid(); - pstmt.clearBatch(); - } - - /** - * Clears all the warnings reported on this Statement object. - * After a call to this method, the method getWarnings will - * return null until a new warning is reported for this - * Statement object. - * @exception SQLException if a database access error occurs - */ - public void clearWarnings() throws SQLException { - checkIfValid(); - pstmt.clearWarnings(); - } - - /** - * Releases this Statement object's database and JDBC - * resources immediately instead of waiting for this to happen when it is - * automatically closed. It is generally good practice to release resources - * as soon as you are finished with them to avoid tying up database - * resources. - *

    - * Calling the method close on a Statement - * object that is already closed has no effect. - *

    - * Note: A Statement object is automatically closed - * when it is garbage collected. When a Statement object is - * closed, its current ResultSet object, if one exists, is - * also closed. - * @exception SQLException if a database access error occurs - */ - public void close() throws SQLException { - if (isDebugLogging) { - trace.log(BasicLevel.DEBUG, "" + this); - } - closed = true; - } - - /** - * Executes the given SQL statement, which may return multiple results. In - * some (uncommon) situations, a single SQL statement may return multiple - * result sets and/or update counts. Normally you can ignore this unless you - * are (1) executing a stored procedure that you know may return multiple - * results or (2) you are dynamically executing an unknown SQL string. - *

    - * The execute method executes an SQL statement and indicates - * the form of the first result. You must then use the methods - * getResultSet or getUpdateCount to retrieve - * the result, and getMoreResults to move to any subsequent - * result(s). - * @param s any SQL statement - * @return true if the first result is a - * ResultSet object; false if it is an - * update count or there are no results - * @exception SQLException if a database access error occurs - * @see #getResultSet - * @see #getUpdateCount - * @see #getMoreResults - */ - public boolean execute(final String s) throws SQLException { - checkIfValid(); - return pstmt.execute(s); - } - - /** - * Submits a batch of commands to the database for execution and if all - * commands execute successfully, returns an array of update counts. The - * int elements of the array that is returned are ordered to - * correspond to the commands in the batch, which are ordered according to - * the order in which they were added to the batch. The elements in the - * array returned by the method executeBatch may be one of - * the following: - *

      - *
    1. A number greater than or equal to zero -- indicates that the command - * was processed successfully and is an update count giving the number of - * rows in the database that were affected by the command's execution - *
    2. A value of SUCCESS_NO_INFO -- indicates that the - * command was processed successfully but that the number of rows affected - * is unknown - *

      - * If one of the commands in a batch update fails to execute properly, this - * method throws a BatchUpdateException, and a JDBC driver - * may or may not continue to process the remaining commands in the batch. - * However, the driver's behavior must be consistent with a particular DBMS, - * either always continuing to process commands or never continuing to - * process commands. If the driver continues processing after a failure, the - * array returned by the method - * BatchUpdateException.getUpdateCounts will contain as many - * elements as there are commands in the batch, and at least one of the - * elements will be the following: - *

      - *

    3. A value of EXECUTE_FAILED -- indicates that the - * command failed to execute successfully and occurs only if a driver - * continues to process commands after a command fails - *
    - *

    - * A driver is not required to implement this method. The possible - * implementations and return values have been modified in the Java 2 SDK, - * Standard Edition, version 1.3 to accommodate the option of continuing to - * proccess commands in a batch update after a - * BatchUpdateException obejct has been thrown. - * @return an array of update counts containing one element for each command - * in the batch. The elements of the array are ordered according to - * the order in which commands were added to the batch. - * @exception SQLException if a database access error occurs or the driver - * does not support batch statements. Throws - * {@link BatchUpdateException} (a subclass of - * SQLException) if one of the commands sent to - * the database fails to execute properly or attempts to return a - * result set. - * @since 1.3 - */ - public int[] executeBatch() throws SQLException { - checkIfValid(); - return pstmt.executeBatch(); - } - - /** - * Executes the given SQL statement, which returns a single - * ResultSet object. - * @param s an SQL statement to be sent to the database, typically a static - * SQL SELECT statement - * @return a ResultSet object that contains the data produced - * by the given query; never null - * @exception SQLException if a database access error occurs or the given - * SQL statement produces anything other than a single - * ResultSet object - */ - public ResultSet executeQuery(final String s) throws SQLException { - checkIfValid(); - return pstmt.executeQuery(s); - } - - /** - * Executes the given SQL statement, which may be an INSERT, - * UPDATE, or DELETE statement or an SQL - * statement that returns nothing, such as an SQL DDL statement. - * @param s an SQL INSERT, UPDATE or - * DELETE statement or an SQL statement that returns - * nothing - * @return either the row count for INSERT, - * UPDATE or DELETE statements, or - * 0 for SQL statements that return nothing - * @exception SQLException if a database access error occurs or the given - * SQL statement produces a ResultSet object - */ - public int executeUpdate(final String s) throws SQLException { - checkIfValid(); - return pstmt.executeUpdate(s); - } - - /** - * Retrieves the Connection object that produced this - * Statement object. - * @return the connection that produced this statement - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public Connection getConnection() throws SQLException { - checkIfValid(); - return pstmt.getConnection(); - } - - /** - * Retrieves the direction for fetching rows from database tables that is - * the default for result sets generated from this Statement - * object. If this Statement object has not set a fetch - * direction by calling the method setFetchDirection, the - * return value is implementation-specific. - * @return the default fetch direction for result sets generated from this - * Statement object - * @exception SQLException if a database access error occurs - * @since 1.2 - * @see #setFetchDirection - */ - public int getFetchDirection() throws SQLException { - checkIfValid(); - return pstmt.getFetchDirection(); - } - - /** - * Retrieves the number of result set rows that is the default fetch size - * for ResultSet objects generated from this - * Statement object. If this Statement object - * has not set a fetch size by calling the method setFetchSize, - * the return value is implementation-specific. - * @return the default fetch size for result sets generated from this - * Statement object - * @exception SQLException if a database access error occurs - * @since 1.2 - * @see #setFetchSize - */ - public int getFetchSize() throws SQLException { - checkIfValid(); - return pstmt.getFetchSize(); - } - - /** - * Retrieves the maximum number of bytes that can be returned for character - * and binary column values in a ResultSet object produced by - * this Statement object. This limit applies only to - * BINARY, VARBINARY, - * LONGVARBINARY, CHAR, VARCHAR, - * and LONGVARCHAR columns. If the limit is exceeded, the - * excess data is silently discarded. - * @return the current column size limit for columns storing character and - * binary values; zero means there is no limit - * @exception SQLException if a database access error occurs - * @see #setMaxFieldSize - */ - public int getMaxFieldSize() throws SQLException { - checkIfValid(); - return pstmt.getMaxFieldSize(); - } - - /** - * Retrieves the maximum number of rows that a ResultSet - * object produced by this Statement object can contain. If - * this limit is exceeded, the excess rows are silently dropped. - * @return the current maximum number of rows for a ResultSet - * object produced by this Statement object; zero - * means there is no limit - * @exception SQLException if a database access error occurs - * @see #setMaxRows - */ - public int getMaxRows() throws SQLException { - checkIfValid(); - return pstmt.getMaxRows(); - } - - /** - * Moves to this Statement object's next result, returns - * true if it is a ResultSet object, and - * implicitly closes any current ResultSet object(s) obtained - * with the method getResultSet. - *

    - * There are no more results when the following is true: - * - *

     // stmt is a Statement object ((stmt.getMoreResults() == false) &&
    -     * (stmt.getUpdateCount() == -1))
    -     *
    -     * 
    - * - * @return true if the next result is a - * ResultSet object; false if it is an - * update count or there are no more results - * @exception SQLException if a database access error occurs - * @see #execute - */ - public boolean getMoreResults() throws SQLException { - checkIfValid(); - return pstmt.getMoreResults(); - } - - /** - * Retrieves the number of seconds the driver will wait for a - * Statement object to execute. If the limit is exceeded, a - * SQLException is thrown. - * @return the current query timeout limit in seconds; zero means there is - * no limit - * @exception SQLException if a database access error occurs - * @see #setQueryTimeout - */ - public int getQueryTimeout() throws SQLException { - checkIfValid(); - return pstmt.getQueryTimeout(); - } - - /** - * Retrieves the current result as a ResultSet object. This - * method should be called only once per result. - * @return the current result as a ResultSet object or - * null if the result is an update count or there are - * no more results - * @exception SQLException if a database access error occurs - * @see #execute - */ - public ResultSet getResultSet() throws SQLException { - checkIfValid(); - return pstmt.getResultSet(); - } - - /** - * Retrieves the result set concurrency for ResultSet objects - * generated by this Statement object. - * @return either ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public int getResultSetConcurrency() throws SQLException { - checkIfValid(); - return pstmt.getResultSetConcurrency(); - } - - /** - * Retrieves the result set type for ResultSet objects - * generated by this Statement object. - * @return one of ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - * @exception SQLException if a database access error occurs - * @since 1.2 - */ - public int getResultSetType() throws SQLException { - checkIfValid(); - return pstmt.getResultSetType(); - } - - /** - * Retrieves the current result as an update count; if the result is a - * ResultSet object or there are no more results, -1 is - * returned. This method should be called only once per result. - * @return the current result as an update count; -1 if the current result - * is a ResultSet object or there are no more results - * @exception SQLException if a database access error occurs - * @see #execute - */ - public int getUpdateCount() throws SQLException { - checkIfValid(); - return pstmt.getUpdateCount(); - } - - /** - * Retrieves the first warning reported by calls on this - * Statement object. Subsequent Statement - * object warnings will be chained to this SQLWarning object. - *

    - * The warning chain is automatically cleared each time a statement is - * (re)executed. This method may not be called on a closed - * Statement object; doing so will cause an - * SQLException to be thrown. - *

    - * Note: If you are processing a ResultSet object, - * any warnings associated with reads on that ResultSet - * object will be chained on it rather than on the Statement - * object that produced it. - * @return the first SQLWarning object or null - * if there are no warnings - * @exception SQLException if a database access error occurs or this method - * is called on a closed statement - */ - public SQLWarning getWarnings() throws SQLException { - checkIfValid(); - return pstmt.getWarnings(); - } - - /** - * Sets the SQL cursor name to the given String, which will - * be used by subsequent Statement object - * execute methods. This name can then be used in SQL - * positioned update or delete statements to identify the current row in the - * ResultSet object generated by this statement. If the - * database does not support positioned update/delete, this method is a - * noop. To insure that a cursor has the proper isolation level to support - * updates, the cursor's SELECT statement should have the - * form SELECT FOR UPDATE. If FOR UPDATE is - * not present, positioned updates may fail. - *

    - * Note: By definition, the execution of positioned updates and - * deletes must be done by a different Statement object than - * the one that generated the ResultSet object being used for - * positioning. Also, cursor names must be unique within a connection. - * @param name the new cursor name, which must be unique within a connection - * @exception SQLException if a database access error occurs - */ - public void setCursorName(final String name) throws SQLException { - checkIfValid(); - pstmt.setCursorName(name); - } - - /** - * Sets escape processing on or off. If escape scanning is on (the default), - * the driver will do escape substitution before sending the SQL statement - * to the database. Note: Since prepared statements have usually been parsed - * prior to making this call, disabling escape processing for - * PreparedStatements objects will have no effect. - * @param enable true to enable escape processing; - * false to disable it - * @exception SQLException if a database access error occurs - */ - public void setEscapeProcessing(final boolean enable) throws SQLException { - checkIfValid(); - // mark this method as called (even if it doesn't succeed) - setEscapeProcessingCalled = true; - pstmt.setEscapeProcessing(enable); - } - - /** - * Gives the driver a hint as to the direction in which rows will be - * processed in ResultSet objects created using this - * Statement object. The default value is - * ResultSet.FETCH_FORWARD. - *

    - * Note that this method sets the default fetch direction for result sets - * generated by this Statement object. Each result set has - * its own methods for getting and setting its own fetch direction. - * @param direction the initial direction for processing rows - * @exception SQLException if a database access error occurs or the given - * direction is not one of ResultSet.FETCH_FORWARD, - * ResultSet.FETCH_REVERSE, or - * ResultSet.FETCH_UNKNOWN - * @since 1.2 - * @see #getFetchDirection - */ - public void setFetchDirection(final int direction) throws SQLException { - checkIfValid(); - // mark this method as called (even if it doesn't succeed) - setFetchDirectionCalled = true; - pstmt.setFetchDirection(direction); - } - - /** - * Gives the JDBC driver a hint as to the number of rows that should be - * fetched from the database when more rows are needed. The number of rows - * specified affects only result sets created using this statement. If the - * value specified is zero, then the hint is ignored. The default value is - * zero. - * @param rows the number of rows to fetch - * @exception SQLException if a database access error occurs, or the - * condition 0 <= rows <= - * this.getMaxRows() is not satisfied. - * @since 1.2 - * @see #getFetchSize - */ - public void setFetchSize(final int rows) throws SQLException { - checkIfValid(); - pstmt.setFetchSize(rows); - } - - /** - * Sets the limit for the maximum number of bytes in a - * ResultSet column storing character or binary values to the - * given number of bytes. This limit applies only to BINARY, - * VARBINARY, LONGVARBINARY, - * CHAR, VARCHAR, and - * LONGVARCHAR fields. If the limit is exceeded, the excess - * data is silently discarded. For maximum portability, use values greater - * than 256. - * @param max the new column size limit in bytes; zero means there is no - * limit - * @exception SQLException if a database access error occurs or the - * condition max >= 0 is not satisfied - * @see #getMaxFieldSize - */ - public void setMaxFieldSize(final int max) throws SQLException { - checkIfValid(); - // mark this method as called (even if it doesn't succeed) - setMaxFieldSizeCalled = true; - pstmt.setMaxFieldSize(max); - } - - /** - * Sets the limit for the maximum number of rows that any - * ResultSet object can contain to the given number. If the - * limit is exceeded, the excess rows are silently dropped. - * @param max the new max rows limit; zero means there is no limit - * @exception SQLException if a database access error occurs or the - * condition max >= 0 is not satisfied - * @see #getMaxRows - */ - public void setMaxRows(final int max) throws SQLException { - checkIfValid(); - pstmt.setMaxRows(max); - } - - /** - * Sets the number of seconds the driver will wait for a - * Statement object to execute to the given number of - * seconds. If the limit is exceeded, an SQLException is - * thrown. - * @param seconds the new query timeout limit in seconds; zero means there - * is no limit - * @exception SQLException if a database access error occurs or the - * condition seconds >= 0 is not satisfied - * @see #getQueryTimeout - */ - public void setQueryTimeout(final int seconds) throws SQLException { - checkIfValid(); - pstmt.setQueryTimeout(seconds); - } - - // JDK1.4 - /** - * Sets the designated parameter to the given java.net.URL - * value. The driver converts this to an SQL DATALINK value - * when it sends it to the database. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java.net.URL object to be set - * @exception SQLException if a database access error occurs - * @since 1.4 - */ - public void setURL(final int parameterIndex, final URL x) throws SQLException { - checkIfValid(); - pstmt.setURL(parameterIndex, x); - } - - /** - * @return hashcode of the object - */ - @Override - public int hashCode() { - return hashCode; - } - - /** - * @return true if statement has been closed - */ - public boolean isClosed() { - return closed; - } - - - - /** - * Sets the designated parameter to the given java.sql.RowId object. The driver converts this to a SQL - * ROWID value when it sends it to the database - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setRowId(final int parameterIndex, final RowId x) throws SQLException { - checkIfValid(); - pstmt.setRowId(parameterIndex, x); - } - - /** - * Sets the designated paramter to the given String object. The driver converts this to a SQL NCHAR - * or NVARCHAR or LONGNVARCHAR value (depending on the argument's size relative to the driver's - * limits on NVARCHAR values) when it sends it to the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNString(final int parameterIndex, final String value) throws SQLException { - checkIfValid(); - pstmt.setNString(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. The Reader reads the data till end-of-file is - * reached. The driver does the necessary conversion from Java character format to the national character set in the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNCharacterStream(final int parameterIndex, final Reader value, final long length) throws SQLException { - checkIfValid(); - pstmt.setNCharacterStream(parameterIndex, value, length); - } - - /** - * Sets the designated parameter to a java.sql.NClob object. The driver converts this to a SQL NCLOB - * value when it sends it to the database. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(final int parameterIndex, final NClob value) throws SQLException { - checkIfValid(); - pstmt.setNClob(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. The reader must contain the number of characters specified - * by length otherwise a SQLException will be generated when the PreparedStatement is executed. This - * method differs from the setCharacterStream (int, Reader, int) method because it informs the driver that the - * parameter value should be sent to the server as a CLOB. When the setCharacterStream method is - * used, the driver may have to do extra work to determine whether the parameter data should be sent to the server as a - * LONGVARCHAR or a CLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or if the length specified is less than - * zero. - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setClob(final int parameterIndex, final Reader reader, final long length) throws SQLException { - checkIfValid(); - pstmt.setClob(parameterIndex, reader, length); - } - - /** - * Sets the designated parameter to a InputStream object. The inputstream must contain the number of characters - * specified by length otherwise a SQLException will be generated when the PreparedStatement is - * executed. This method differs from the setBinaryStream (int, InputStream, int) method because it informs the - * driver that the parameter value should be sent to the server as a BLOB. When the setBinaryStream - * method is used, the driver may have to do extra work to determine whether the parameter data should be sent to the server - * as a LONGVARBINARY or a BLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param inputStream An object that contains the data to set the parameter value to. - * @param length the number of bytes in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement; if the length specified is less than zero - * or if the number of bytes in the inputstream does not match the specfied length. - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBlob(final int parameterIndex, final InputStream inputStream, final long length) throws SQLException { - checkIfValid(); - pstmt.setBlob(parameterIndex, inputStream, length); - } - - /** - * Sets the designated parameter to a Reader object. The reader must contain the number of characters specified - * by length otherwise a SQLException will be generated when the PreparedStatement is executed. This - * method differs from the setCharacterStream (int, Reader, int) method because it informs the driver that the - * parameter value should be sent to the server as a NCLOB. When the setCharacterStream method is - * used, the driver may have to do extra work to determine whether the parameter data should be sent to the server as a - * LONGNVARCHAR or a NCLOB - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @param length the number of characters in the parameter data. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the length - * specified is less than zero; if the driver does not support national character sets; if the driver can detect that a data - * conversion error could occur; if a database access error occurs or this method is called on a closed - * PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(final int parameterIndex, final Reader reader, final long length) throws SQLException { - checkIfValid(); - pstmt.setNClob(parameterIndex, reader, length); - } - - /** - * Sets the designated parameter to the given java.sql.SQLXML object. The driver converts this to an SQL - * XML value when it sends it to the database. - *

    - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param xmlObject a SQLXML object that maps an SQL XML value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or the - * java.xml.transform.Result, Writer or OutputStream has not been closed for the - * SQLXML object - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setSQLXML(final int parameterIndex, final SQLXML xmlObject) throws SQLException { - checkIfValid(); - pstmt.setSQLXML(parameterIndex, xmlObject); - } - - - - /** - * Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large - * ASCII value is input to a LONGVARCHAR parameter, it may be more practical to send it via a - * java.io.InputStream. Data will be read from the stream as needed until end-of-file is reached. The JDBC driver - * will do any necessary conversion from ASCII to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the Java input stream that contains the ASCII parameter value - * @param length the number of bytes in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setAsciiStream(final int parameterIndex, final java.io.InputStream x, final long length) throws SQLException { - checkIfValid(); - pstmt.setAsciiStream(parameterIndex, x, length); - } - - - /** - * Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large - * binary value is input to a LONGVARBINARY parameter, it may be more practical to send it via a - * java.io.InputStream object. The data will be read from the stream as needed until end-of-file is reached. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java input stream which contains the binary parameter value - * @param length the number of bytes in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setBinaryStream(final int parameterIndex, final java.io.InputStream x, final long length) throws SQLException { - checkIfValid(); - pstmt.setBinaryStream(parameterIndex, x, length); - } - - /** - * Sets the designated parameter to the given Reader object, which is the given number of characters long. When a - * very large UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to send it via a - * java.io.Reader object. The data will be read from the stream as needed until end-of-file is reached. The JDBC - * driver will do any necessary conversion from UNICODE to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param reader the java.io.Reader object that contains the Unicode data - * @param length the number of characters in the stream - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @since 1.6 - */ - public void setCharacterStream(final int parameterIndex, final java.io.Reader reader, final long length) throws SQLException { - checkIfValid(); - pstmt.setCharacterStream(parameterIndex, reader, length); - } - - // ----- - /** - * Sets the designated parameter to the given input stream. When a very large ASCII value is input to a - * LONGVARCHAR parameter, it may be more practical to send it via a java.io.InputStream. Data will - * be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from ASCII - * to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setAsciiStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the Java input stream that contains the ASCII parameter value - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setAsciiStream(final int parameterIndex, final java.io.InputStream x) throws SQLException { - checkIfValid(); - pstmt.setAsciiStream(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given input stream. When a very large binary value is input to a - * LONGVARBINARY parameter, it may be more practical to send it via a java.io.InputStream object. - * The data will be read from the stream as needed until end-of-file is reached. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setBinaryStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param x the java input stream which contains the binary parameter value - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBinaryStream(final int parameterIndex, final java.io.InputStream x) throws SQLException { - checkIfValid(); - pstmt.setBinaryStream(parameterIndex, x); - } - - /** - * Sets the designated parameter to the given Reader object. When a very large UNICODE value is input to a - * LONGVARCHAR parameter, it may be more practical to send it via a java.io.Reader object. The data - * will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from - * UNICODE to the database char format. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setCharacterStream which takes a length parameter. - * @param parameterIndex the first parameter is 1, the second is 2, ... - * @param reader the java.io.Reader object that contains the Unicode data - * @exception SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setCharacterStream(final int parameterIndex, final java.io.Reader reader) throws SQLException { - checkIfValid(); - pstmt.setCharacterStream(parameterIndex, reader); - } - - /** - * Sets the designated parameter to a Reader object. The Reader reads the data till end-of-file is - * reached. The driver does the necessary conversion from Java character format to the national character set in the database. - *

    - * Note: This stream object can either be a standard Java stream object or your own subclass that implements the - * standard interface. - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setNCharacterStream which takes a length parameter. - * @param parameterIndex of the first parameter is 1, the second is 2, ... - * @param value the parameter value - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs; or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNCharacterStream(final int parameterIndex, final Reader value) throws SQLException { - checkIfValid(); - pstmt.setNCharacterStream(parameterIndex, value); - } - - /** - * Sets the designated parameter to a Reader object. This method differs from the - * setCharacterStream (int, Reader) method because it informs the driver that the parameter value should be sent - * to the server as a CLOB. When the setCharacterStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGVARCHAR or a - * CLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setClob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatementor if parameterIndex does not correspond to a - * parameter marker in the SQL statement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setClob(final int parameterIndex, final Reader reader) throws SQLException { - checkIfValid(); - pstmt.setClob(parameterIndex, reader); - } - - /** - * Sets the designated parameter to a InputStream object. This method differs from the - * setBinaryStream (int, InputStream) method because it informs the driver that the parameter value should be - * sent to the server as a BLOB. When the setBinaryStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGVARBINARY or a - * BLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setBlob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param inputStream An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access - * error occurs; this method is called on a closed PreparedStatement or if parameterIndex does not correspond to - * a parameter marker in the SQL statement, - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setBlob(final int parameterIndex, final InputStream inputStream) throws SQLException { - checkIfValid(); - pstmt.setBlob(parameterIndex, inputStream); - } - - /** - * Sets the designated parameter to a Reader object. This method differs from the - * setCharacterStream (int, Reader) method because it informs the driver that the parameter value should be sent - * to the server as a NCLOB. When the setCharacterStream method is used, the driver may have to do - * extra work to determine whether the parameter data should be sent to the server as a LONGNVARCHAR or a - * NCLOB - *

    - * Note: Consult your JDBC driver documentation to determine if it might be more efficient to use a version of - * setNClob which takes a length parameter. - * @param parameterIndex index of the first parameter is 1, the second is 2, ... - * @param reader An object that contains the data to set the parameter value to. - * @throws SQLException if parameterIndex does not correspond to a parameter marker in the SQL statement; if the driver does - * not support national character sets; if the driver can detect that a data conversion error could occur; if a database - * access error occurs or this method is called on a closed PreparedStatement - * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method - * @since 1.6 - */ - public void setNClob(final int parameterIndex, final Reader reader) throws SQLException { - checkIfValid(); - pstmt.setNClob(parameterIndex, reader); - } - - - - /** - * Requests that a Statement be pooled or not pooled. The value specified is a hint to the statement pool - * implementation indicating whether the applicaiton wants the statement to be pooled. It is up to the statement pool manager - * as to whether the hint is used. - *

    - * The poolable value of a statement is applicable to both internal statement caches implemented by the driver and external - * statement caches implemented by application servers and other applications. - *

    - * By default, a Statement is not poolable when created, and a PreparedStatement and - * CallableStatement are poolable when created. - *

    - * @param poolable requests that the statement be pooled if true and that the statement not be pooled if false - *

    - * @throws SQLException if this method is called on a closed Statement - *

    - * @since 1.6 - */ - public void setPoolable(final boolean poolable) throws SQLException { - checkIfValid(); - pstmt.setPoolable(poolable); - } - - /** - * Returns a value indicating whether the Statement is poolable or not. - *

    - * @return true if the Statement is poolable; false otherwise - *

    - * @throws SQLException if this method is called on a closed Statement - *

    - * @since 1.6 - *

    - * @see java.sql.Statement#setPoolable(boolean) setPoolable(boolean) - */ - public boolean isPoolable() throws SQLException { - checkIfValid(); - return pstmt.isPoolable(); - } - - /** - * Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. - * Returns false otherwise. If this implements the interface then return true, else if this is a wrapper then return the result - * of recursively calling isWrapperFor on the wrapped object. If this does not implement the interface and is not a wrapper, - * return false. This method should be implemented as a low-cost operation compared to unwrap so that callers can use this method - * to avoid expensive unwrap calls that may fail. If this method returns true then calling unwrap with the same argument should succeed. - * @param iface a Class defining an interface. - * @returns true if this implements the interface or directly or indirectly wraps an object that does. - * @throws SQLException if an error occurs while determining whether this is a wrapper for an object with the given interface. - */ - public boolean isWrapperFor(final Class iface) throws SQLException { - checkIfValid(); - return pstmt.isWrapperFor(iface); - } - - /** - * Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. - * If the receiver implements the interface then the result is the receiver or a proxy for the receiver. If the receiver is a wrapper - * and the wrapped object implements the interface then the result is the wrapped object or a proxy for the wrapped object. - * Otherwise return the the result of calling unwrap recursively on the wrapped object or a proxy for that result. - * If the receiver is not a wrapper and does not implement the interface, then an SQLException is thrown. - * @param iface A Class defining an interface that the result must implement. - * @returns an object that implements the interface. May be a proxy for the actual implementing object. - * @throws SQLException If no object found that implements the interface - */ - public T unwrap(final Class iface) throws SQLException { - checkIfValid(); - return pstmt.unwrap(iface); - } - - - /** - * @return the wrapped sql request - */ - public String getSql() { - return sql; - } - - /** - * @return the wrapped sql request - */ - public String getUser() { - return user; - } - - /** - * @return the autogenerated keys - */ - public int getAutoGeneratedKeys() { - return autoGeneratedKeys; - } - - /** - * @return the array of column indexes - */ - public int[] getColumnIndexes() { - return columnIndexes; - } - - /** - * @return the array of column names - */ - public String[] getColumnNames() { - return columnNames; - } - - /** - * @return original resultSetType - */ - public int getOriginalResultSetType() { - return resultSetType; - } - - /** - * @return original resultSetConcurrency - */ - public int getOriginalResultSetConcurrency() { - return resultSetConcurrency; - } - - /** - * @return original resultSetHoldability - */ - public int getOriginalResultSetHoldability() { - return resultSetHoldability; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/SQLConnectionInvocationHandler.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/SQLConnectionInvocationHandler.java deleted file mode 100644 index 7b0324754a..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/SQLConnectionInvocationHandler.java +++ /dev/null @@ -1,248 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.cm.sql; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.resource.internal.SQLManager; -import org.ow2.jonas.resource.internal.cm.ManagedConnectionInfo; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * SQL Connection Wrapper - * - * @author Eric Hardesty - * Contributor(s): - */ -public class SQLConnectionInvocationHandler implements InvocationHandler { - - /** - * Number of fixed arguments - */ - private static final int PROXY_FIXED_ARGS = 3; - /** - * Real connection object - */ - private Object connection = null; - /** - * Connection manager holding the PreparedStatement cache - */ - private SQLManager conman = null; - /** - * ManagedConnectionInfo for the connection - */ - private ManagedConnectionInfo mci = null; - /** - * Userid of the connection - */ - private String user = null; - /** - * Logger object - */ - private Logger trace = null; - - /** - * Determine if statement is still valid - */ - private boolean invalid = false; - /** - * Determine if statement cache is in use - */ - private boolean supportsPreparedCache = true; - - /** - * PreparedStatement wrapper - * @param pConn JDBC connection object - * @param pMci ManagedConnectionInfo object associated with the connection - * @param pConman SQLManager object holding PreparedStatement cache - * @param pTrace Logger object to use - * @throws Exception if an error occurs - */ - public SQLConnectionInvocationHandler(Object pConn, ManagedConnectionInfo pMci, SQLManager pConman, Logger pTrace) - throws Exception { - connection = pConn; - mci = pMci; - conman = pConman; - trace = pTrace; - user = mci.mc.getMetaData().getUserName(); - } - - /** - * Returns a proxy for the sql Connection - * - * @param pConn JDBC connection object - * @param pMci ManagedConnectionInfo object associated with the connection - * @param pConman SQLManager object holding PreparedStatement cache - * @param pTrace Logger object to use - * @return Object of the preparedStatement proxy - * @throws Exception if an error occurs - */ - public static Object createSQLWrapper(Object pConn, ManagedConnectionInfo pMci, - SQLManager pConman, Logger pTrace) - throws Exception { - Class class1 = pConn.getClass(); - Class [] aclass = buildInterfaces(class1); - return Proxy.newProxyInstance(class1.getClassLoader(), aclass, - new SQLConnectionInvocationHandler(pConn, pMci, pConman, pTrace)); - } - - /** - * Invoke call on the proxy - * - * @param obj the proxy instance that the method was invoked on - * @param method the Method instance - * @param aobj an array of objects containing the values of the arguments - * @throws Throwable if an error occurs - * @return Object the returned from the method invocation on the proxy instance - */ - public Object invoke(Object obj, Method method, Object [] aobj) - throws Throwable { - - Object retObj = null; - if (method.getName().compareTo("prepareStatement") == 0) { - retObj = prepareStatement(method.getParameterTypes(), aobj); - if (retObj == null) { - retObj = method.invoke(connection, aobj); - } - } else { - if (method.getName().compareTo("close") == 0) { - invalid = true; - } else if (method.getName().compareTo("toString") == 0) { - return connection.toString(); - } else if (method.getName().compareTo("commit") == 0) { - if (trace.isLoggable(BasicLevel.DEBUG)) { - trace.log(BasicLevel.DEBUG, "" + this); - } - } else { - checkIfValid(); - } - retObj = method.invoke(connection, aobj); - } - return retObj; - } - - /** - * Invoke correct preparedStatement - * @param pTypes Class [] of parameter types - * @param pValues Class [] of parameter values - * @return Object the result of invoking the preparedStatement - * @throws Exception if any Exception occurs - */ - public Object prepareStatement(Class [] pTypes, Object [] pValues) - throws Exception { - - checkIfValid(); - - if (supportsPreparedCache) { - try { - Class [] mTypes = new Class[PROXY_FIXED_ARGS + pTypes.length]; - Object [] mValues = new Object[PROXY_FIXED_ARGS + pValues.length]; - - mTypes[0] = ManagedConnectionInfo.class; - mTypes[1] = Object.class; - mTypes[2] = String.class; - - mValues[0] = mci; - mValues[1] = connection; - mValues[2] = user; - - // Loop should be faster than System.arraycopy for small - // number of parameters - for (int i = 0; i < pTypes.length; i++) { - mTypes[PROXY_FIXED_ARGS + i] = pTypes[i]; - mValues[PROXY_FIXED_ARGS + i] = pValues[i]; - } - - Method meth1 = conman.getClass().getMethod("getPStatement", mTypes); - return meth1.invoke(conman, mValues); - } catch (Exception ex) { - ex.printStackTrace(); - return null; - } - } else { - return null; - } - - } - - /** - * Return a string describing this object - * @return String representing this object - */ - public String toString() { - return connection.toString(); - } - - /** - * Check if the wrapper is valid - * @throws SQLException if the wrapper is invalid - */ - private void checkIfValid() throws SQLException { - if (invalid) { - throw new SQLException("Connection is closed"); - } - } - - /* Utility methods to build interfaces*/ - /** - * Build the class interfaces from the class object - * @param class1 Class to retrieve the interfaces - * @return Class [] all interfaces - */ - private static Class[] buildInterfaces(Class class1) { - ArrayList arlist = new ArrayList(); - addToList(class1, arlist); - Class [] aclass = new Class[arlist.size()]; - return (Class []) arlist.toArray(aclass); - } - - /** - * Add each of the interfaces - * @param cls Class to determine what interfaces are implemented - * @param lst List of interfaces - */ - private static void addToList(Class cls, List lst) { - Class [] aclass = cls.getInterfaces(); - for (int i = 0; i < aclass.length; i++) { - if (!lst.contains(aclass[i])) { - lst.add(aclass[i]); - } - addToList(aclass[i], lst); - } - - Class class2 = cls.getSuperclass(); - if (class2 != null) { - addToList(class2, lst); - } - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/AbstractPreparedStatementCacheImpl.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/AbstractPreparedStatementCacheImpl.java deleted file mode 100644 index 4309dcc105..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/AbstractPreparedStatementCacheImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.sql.SQLException; - -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.resource.internal.cm.sql.PreparedStatementWrapper; - -/** - * Abstract class for the prepared statement cache implementation - * @author pelletib - * - */ -public abstract class AbstractPreparedStatementCacheImpl implements PreparedStatementCache { - - /** - * Logger - */ - protected static Logger cacheLogger = null; - - /** - * max cache size - */ - protected int maxPstmtCacheSize = 0; - - /** - * current cache size - */ - protected int pstmtCacheSize = 0; - - /** - * Statistics - */ - protected PreparedStatementCacheStatistics stats; - - /** - * Local statistic key - */ - public static String LOCAL_STATISTIC_KEY = "local"; - - /** - * Constructor - * @param maxCacheSize : max cache size - * @param logger : logger - */ - public AbstractPreparedStatementCacheImpl(final int maxCacheSize, final PreparedStatementCacheStatistics pstmtStats, final Logger logger) { - maxPstmtCacheSize = maxCacheSize; - cacheLogger = logger; - stats = pstmtStats; - } - - @Override - abstract public PreparedStatementWrapper get(final PreparedStatementWrapper psw); - - @Override - abstract public void put(final PreparedStatementWrapper psw) throws CacheException, SQLException; - - /** - * Set the max pstmt cache size - */ - final public void setMaxPstmtCacheSize(final int maxSize) { - maxPstmtCacheSize = maxSize; - } - - /** - * Get the max pstmt cache size - */ - public int getMaxPstmtCacheSize() { - return maxPstmtCacheSize; - } - - /** - * Get the current pstmt cache size - */ - @Override - public int getPstmtCacheSize() { - return pstmtCacheSize; - } - - /** - * Dump the pstmt cache state - */ - @Override - public abstract String getState(String prefix); - - /** - * Destroy the cache entries - */ - @Override - public abstract void destroy(); - - - /** - * Close really the cache entries - */ - @Override - public abstract void reallyClose(); - - /** - * Close logically the cache entries - */ - @Override - public abstract void close(); - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/CacheException.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/CacheException.java deleted file mode 100644 index f13db919c5..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/CacheException.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -public class CacheException extends Exception { - - /** - * Serialization id - */ - private static final long serialVersionUID = -9045811357430336979L; - - public CacheException(final String msg) { - super(msg); - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCache.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCache.java deleted file mode 100644 index b8fbb8f01a..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCache.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.sql.SQLException; - -import org.ow2.jonas.resource.internal.cm.sql.PreparedStatementWrapper; - -/** - * Prepared Statement Cache Interface - * @author pelletib - * - */ -public interface PreparedStatementCache { - - /** - * Policy : list - */ - public final String CACHE_POLICY_LIST="list"; - - /** - * Policy : map - */ - public final String CACHE_POLICY_MAP="map"; - - /** - * Add an entry in the cache - * @param psw : wrapped prepared statement to add - * @throws CacheException no more space in cache - * @throws SQLException - */ - public void put(PreparedStatementWrapper psw) throws CacheException, SQLException; - - /** - * Retrieve an entry in the cache - * @param psw : parameters of the prepared statement to retrieve - * @return wrapped prepared statement or null if not found - */ - public PreparedStatementWrapper get(PreparedStatementWrapper psw); - - /** - * @return Get the current cache size. - */ - public int getPstmtCacheSize(); - - /** - * @return Get the max cache size. - */ - public int getMaxPstmtCacheSize(); - - /** - * Set the max cache size - * @param maxSize The max size to set. - */ - public void setMaxPstmtCacheSize(final int maxSize); - - /** - * @param prefix indentation - * @return a string with a cache state (dump) - */ - public String getState(String prefix); - - /** - * Destroy the cache entries - */ - public void destroy(); - - /** - * Close logically the cache entries - */ - public void close(); - - /** - * Close really the cache entries - */ - public void reallyClose(); - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCacheStatistics.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCacheStatistics.java deleted file mode 100644 index d1cc1f0f45..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementCacheStatistics.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.util.concurrent.atomic.AtomicLong; - -/** - * Statistics about the prepared statement caches - * There's one instance of this class per datasource - * @author pelletib - * - */ -public class PreparedStatementCacheStatistics { - - /** - * Count of the number of times that the statement cache was accessed. - */ - private AtomicLong prepStmtCacheAccessCount = new AtomicLong(); - - /** - * Count of the number of statements added to the statement cache. - */ - private AtomicLong prepStmtCacheAddCount = new AtomicLong(); - - /** - * Number of prepared statements currently cached in the statement cache. - */ - private AtomicLong prepStmtCacheCurrentSize = new AtomicLong(); - - /** - * Cumulative count of statements discarded from the cache. - */ - private AtomicLong prepStmtCacheDeleteCount = new AtomicLong(); - - /** - * Cumulative count of the number of times that statements from the cache were used. - */ - private AtomicLong prepStmtCacheHitCount = new AtomicLong(); - - /** - * Number of times that a statement request could not be satisfied with a statement from the cache. - */ - private AtomicLong prepStmtCacheMissCount = new AtomicLong(); - - // increment methods (atomic) - public void incrementPrepStmtCacheAccessCount() { - prepStmtCacheAccessCount.incrementAndGet(); - } - - public void incrementPrepStmtCacheAddCount() { - prepStmtCacheAddCount.incrementAndGet(); - } - - public void incrementPrepStmtCacheCurrentSize() { - prepStmtCacheCurrentSize.incrementAndGet(); - } - - public void decrementPrepStmtCacheCurrentSize() { - prepStmtCacheCurrentSize.decrementAndGet(); - } - - public void incrementPrepStmtCacheDeleteCount() { - prepStmtCacheDeleteCount.incrementAndGet(); - } - - public void incrementPrepStmtCacheHitCount() { - prepStmtCacheHitCount.incrementAndGet(); - } - - public void incrementPrepStmtCacheMissCount() { - prepStmtCacheMissCount.incrementAndGet(); - } - - // getters / setters - public long getPrepStmtCacheAccessCount() { - return prepStmtCacheAccessCount.get(); - } - - public void setPrepStmtCacheAccessCount(final long prepStmtCacheAccessCount) { - this.prepStmtCacheAccessCount.set(prepStmtCacheAccessCount); - } - - public long getPrepStmtCacheAddCount() { - return prepStmtCacheAddCount.get(); - } - - public void setPrepStmtCacheAddCount(final long prepStmtCacheAddCount) { - this.prepStmtCacheAddCount.set(prepStmtCacheAddCount); - } - - public long getPrepStmtCacheCurrentSize() { - return prepStmtCacheCurrentSize.get(); - } - - public void setPrepStmtCacheCurrentSize(final long prepStmtCacheCurrentSize) { - this.prepStmtCacheCurrentSize.set(prepStmtCacheCurrentSize); - } - - public long getPrepStmtCacheDeleteCount() { - return prepStmtCacheDeleteCount.get(); - } - - public void setPrepStmtCacheDeleteCount(final long prepStmtCacheDeleteCount) { - this.prepStmtCacheDeleteCount.set(prepStmtCacheDeleteCount); - } - - public long getPrepStmtCacheHitCount() { - return prepStmtCacheHitCount.get(); - } - - public void setPrepStmtCacheHitCount(final long prepStmtCacheHitCount) { - this.prepStmtCacheHitCount.set(prepStmtCacheHitCount); - } - - public long getPrepStmtCacheMissCount() { - return prepStmtCacheMissCount.get(); - } - - public void setPrepStmtCacheMissCount(final long prepStmtCacheMissCount) { - this.prepStmtCacheMissCount.set(prepStmtCacheMissCount); - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementListCacheImpl.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementListCacheImpl.java deleted file mode 100644 index 9ae43d3d54..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementListCacheImpl.java +++ /dev/null @@ -1,306 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.resource.internal.cm.sql.PreparedStatementWrapper; - -/** - * Array cache implementation - * most recently used element are kept at the end of the list - * LRU policy for freeing element - * @author pelletib - */ -public class PreparedStatementListCacheImpl extends AbstractPreparedStatementCacheImpl implements PreparedStatementCache { - - /** - * Cache - */ - public List pStmts = null; - - /** - * Constructor - * @param maxCacheSize max cache size - * @param logger trace logger - */ - public PreparedStatementListCacheImpl(final int maxCacheSize, final PreparedStatementCacheStatistics pstmtStats, final Logger logger) { - super(maxCacheSize,pstmtStats,logger); - pStmts = new ArrayList(); - } - - @Override - public synchronized PreparedStatementWrapper get(final PreparedStatementWrapper psw) { - - int jumpNb = 0; - - PreparedStatementWrapper outputPsw = null; - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "MC pStmts: " + pStmts); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - - // Check if statement matches ManagedConnection list & valid - // use lastIndexOf as when a statement is found, it is put at the end. - int indexPstmt = pStmts.lastIndexOf(psw); - - while (indexPstmt != -1) { - - outputPsw = pStmts.get(indexPstmt); - - if (outputPsw.isClosed()) { // entry found - - outputPsw = pStmts.remove(indexPstmt); - outputPsw.clearPstmtValues(); // clear value and mark it as open - // before return out of the cache - pStmts.add(outputPsw); // add last - - break; - - } else { - outputPsw = null; // reset - jumpNb++; - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Statement in cache but already used, search another one"); - cacheLogger.log(BasicLevel.DEBUG, "sql=" + psw.getSql() + ", count=" + jumpNb); - } - // next element - indexPstmt = pStmts.subList(0, indexPstmt).lastIndexOf(psw); - } - } - - if (indexPstmt != -1) { // found - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Statement found in cache " + outputPsw); - } - - // update statistics - stats.incrementPrepStmtCacheHitCount(); - - - } else { // not found - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "No statement in cache (or not closed)"); - } - // update statistics - stats.incrementPrepStmtCacheMissCount(); - } - - return outputPsw; - } - - - - /** - * Put a pstmt in the cache. If the cache is full, an entry is removed first according to the LRU algorithm - * @param psw prepared statement to add - */ - @Override - public synchronized void put(final PreparedStatementWrapper psw) throws CacheException, SQLException { - - // error if cache is disabled - if (maxPstmtCacheSize < 0) { - throw new CacheException("Cache disabled"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - // if cache is satured, try to free an entry - if (pstmtCacheSize >= maxPstmtCacheSize && maxPstmtCacheSize != 0) { - int offset = findFreeStmt(); - if (offset >= 0) { - // Remove that entry from the current pool and add it at the - // end of the list - PreparedStatementWrapper toRemovePsw = pStmts.remove(offset); - toRemovePsw.destroy(); - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Cache is full : removing an entry PStmt: " + toRemovePsw); - } - - // update statistics - pstmtCacheSize--; - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - - - } else { - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "No more space in cache"); - } - - throw new CacheException("No more space in cache"); - } - } - - // add the entry in the cache - pStmts.add(psw); - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Adding PStmt: " + psw); - } - - pstmtCacheSize++; - - // update statistics - stats.incrementPrepStmtCacheAddCount(); - stats.incrementPrepStmtCacheCurrentSize(); - - } - - /** - * @param prefix indentation - * @return a string with a cache state (dump) - */ - @Override - public String getState(final String prefix) { - - String res = ""; - - synchronized(this) { - res += prefix + "size of pStmts:" + pstmtCacheSize + "\n"; - for (Iterator it = pStmts.iterator(); it.hasNext();) { - res += prefix + "\t" + it.next() + "\n"; - } - } - - return res; - } - - /** - * Destroy all the cache entries - */ - @Override - public synchronized void destroy() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Destroy the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - while (pStmts != null && pStmts.size() > 0) { - pw = pStmts.remove(0); - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - try { - pw.destroy(); - } catch (Exception ex) { - } - } - pstmtCacheSize=0; - } - - /** - * Close all the cache entries - */ - @Override - public synchronized void reallyClose() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Close physically the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - while (pStmts != null && pStmts.size() > 0) { - pw = pStmts.remove(0); - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - try { - pw.closePstmt(); - } catch (Exception ex) { - } - } - pstmtCacheSize = 0; - - } - - /** - * Close all the cache entries - */ - @Override - public synchronized void close() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Close the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - int stmtSize = pStmts.size(); - try { - for (int i = 0; i < stmtSize; i++) { - pw = pStmts.get(i); - pw.close(); - } - } catch (Exception ex) { - } - } - - /** - * Determine if there is a pStmt to remove - * The method calling this code should use synchronized block - * @return int offset of the first free entry - */ - private int findFreeStmt() { - int offset = -1; - int size = pStmts.size(); - PreparedStatementWrapper psw = null; - if (pStmts != null) { - for (int i = 0; i < size; i++) { - psw = pStmts.get(i); - if (psw.isClosed()) { - offset = i; - break; - } - } - } - return offset; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheImpl.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheImpl.java deleted file mode 100644 index 02d544067c..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheImpl.java +++ /dev/null @@ -1,378 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.resource.internal.cm.sql.PreparedStatementWrapper; - -/** - * Map cache implementation - * A Pstmt key is used to index the entries - * A LinkedHashMap is used to implement the LRU algorithm when entries must be freed (no more space) - * @author pelletib - */ -public class PreparedStatementMapCacheImpl extends AbstractPreparedStatementCacheImpl implements PreparedStatementCache { - - /** - * Cache - */ - public Map> pStmts = null; - - /** - * Constructor - * @param maxCacheSize max cache size - * @param logger trace logger - */ - public PreparedStatementMapCacheImpl(final int maxCacheSize, final PreparedStatementCacheStatistics pstmtStats, final Logger logger) { - super(maxCacheSize,pstmtStats,logger); - - if (maxCacheSize > 0) { - pStmts = Collections.synchronizedMap(new LinkedHashMap>(maxCacheSize) { - // (an anonymous inner class) - private static final long serialVersionUID = 1; - - @Override protected boolean removeEldestEntry (final Map.Entry> eldest) { - // always return false in our case to inhibit automatic deleting in map - return false; - }}); - } else { - pStmts = Collections.synchronizedMap(new LinkedHashMap>() { - // (an anonymous inner class) - private static final long serialVersionUID = 1; - - @Override protected boolean removeEldestEntry (final Map.Entry> eldest) { - // always return false in our case to inhibit automatic deleting in map - return false; - }}); - } - - } - - @Override - public synchronized PreparedStatementWrapper get(final PreparedStatementWrapper psw) { - - int jumpNb = 0; // number of jumper to find or not - int found = 0; // number of entry found in cache - - PreparedStatementWrapper outputPsw = null; - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "MC pStmts: " + pStmts); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - // extract key - PreparedStatementMapCacheKey key = getPstmtKey(psw); - - List listPsw = pStmts.get(key); - - // if there're some element for this entry - if (listPsw != null) { - // goes across the list to find a not closed element - Iterator i = listPsw.iterator(); - while (i.hasNext()) { - outputPsw = i.next(); - if (outputPsw.isClosed()) { - outputPsw.clearPstmtValues(); - found++; - break; - } else { - outputPsw = null; - jumpNb++; - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Statement in cache but already used, search another one"); - cacheLogger.log(BasicLevel.DEBUG, "sql=" + psw.getSql() + ", count=" + jumpNb); - } - } - } - } - - if (found > 0) { // found - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Statement found in cache " + outputPsw); - } - // update statistics - stats.incrementPrepStmtCacheHitCount(); - - } else { // not found - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "No statement in cache (or not closed)"); - } - // update statistics - stats.incrementPrepStmtCacheMissCount(); - } - - return outputPsw; - } - - /** - * Put a pstmt in the cache. If the cache is full, an entry is removed first according to the LRU algorithm - * @param psw prepared statement to add - */ - @Override - public synchronized void put(final PreparedStatementWrapper psw) throws CacheException, SQLException { - - // error if cache is disabled - if (maxPstmtCacheSize < 0) { - throw new CacheException("Cache disabled"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - // if cache is satured, no entries was freed by the linkedlist (probably all are open) - if (pstmtCacheSize >= maxPstmtCacheSize && maxPstmtCacheSize != 0) { - - // try to free a pstmt in the cache - if (!findFree()) { - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "No more space in cache"); - } - throw new CacheException("No more space in cache"); - } - } - - // extract key - PreparedStatementMapCacheKey key = getPstmtKey(psw); - - List listPsw = pStmts.get(key); - - // if no element for this entry, create the list - if (listPsw == null) { - listPsw = new ArrayList(); - pStmts.put(key,listPsw); - } - pstmtCacheSize++; - - // add the element in the list at the end - listPsw.add(psw); - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Adding PStmt: " + psw); - } - - // update statistics - stats.incrementPrepStmtCacheAddCount(); - stats.incrementPrepStmtCacheCurrentSize(); - - } - - /** - * @param prefix indentation - * @return a string with a cache state (dump) - */ - @Override - public String getState(final String prefix) { - - String res = ""; - - synchronized(this) { - res += prefix + "size of pStmts:" + pstmtCacheSize + "\n"; - Iterator> iter = pStmts.values().iterator(); - while (iter.hasNext()) { - List list = iter.next(); - int size = list.size(); - for (int i = 0; i < size; i++) { - res += prefix + "\t" + list.get(i) + "\n"; - } - } - } - - return res; - } - - /** - * Destroy all the cache entries - */ - @Override - public synchronized void destroy() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Destroy the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - Iterator> iter = pStmts.values().iterator(); - while (iter.hasNext()) { - List list = iter.next(); - int size = list.size(); - for (int i = 0; i < size; i++) { - pw = list.get(i); - try { - pw.destroy(); - } catch (Exception ex) { - } - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - - } - list.clear(); - } - pStmts.clear(); - pstmtCacheSize = 0; - } - - /** - * Close all the cache entries - */ - @Override - public synchronized void reallyClose() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Close physically the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - Iterator> iter = pStmts.values().iterator(); - while (iter.hasNext()) { - List list = iter.next(); - int size = list.size(); - for (int i = 0; i < size; i++) { - pw = list.get(i); - try { - pw.closePstmt(); - } catch (Exception ex) { - } - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - } - list.clear(); - } - pStmts.clear(); - - pstmtCacheSize = 0; - } - - /** - * Close all the cache entries - */ - @Override - public synchronized void close() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Close the cache entries"); - } - - // update statistics - stats.incrementPrepStmtCacheAccessCount(); - - PreparedStatementWrapper pw = null; - - // Remove the PreparedStatements on the MC - Iterator> iter = pStmts.values().iterator(); - while (iter.hasNext()) { - List list = iter.next(); - int size = list.size(); - for (int i = 0; i < size; i++) { - pw = list.get(i); - try { - pw.close(); - } catch (Exception ex) { - } - } - } - } - - /** - * Close the first entry - */ - private boolean findFree() { - - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "Close the first entry"); - } - - PreparedStatementWrapper pw = null; - - // the linked hashmap ensures to read the entries from the least recently accessed - // to the most-recently accessed - Iterator> iter = pStmts.values().iterator(); - while (iter.hasNext()) { - List list = iter.next(); - int size = list.size(); - // in the list (duplicate element for an entry), search the first closed element - for (int i = 0; i < size; i++) { - pw = list.get(i); - if (pw.isClosed()) { - if (cacheLogger.isLoggable(BasicLevel.DEBUG)) { - cacheLogger.log(BasicLevel.DEBUG, "removes " + pw); - } - list.remove(i); - - pstmtCacheSize--; - // update statistic - stats.incrementPrepStmtCacheDeleteCount(); - stats.decrementPrepStmtCacheCurrentSize(); - - return true; - } - } - } - return false; - } - - /** - * Build cache key from prepared statement wrapper - */ - private PreparedStatementMapCacheKey getPstmtKey(final PreparedStatementWrapper psw) { - PreparedStatementMapCacheKey key = null; - // extract key - key = new PreparedStatementMapCacheKey( - psw.getUser(), - psw.getSql(), - psw.getOriginalResultSetType(), - psw.getOriginalResultSetConcurrency(), - psw.getOriginalResultSetHoldability(), - psw.getAutoGeneratedKeys(), - psw.getColumnIndexes(), - psw.getColumnNames(), - psw.hashCode(), - cacheLogger); - return key; - - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheKey.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheKey.java deleted file mode 100644 index 5ee99ffefe..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/cm/sql/cache/PreparedStatementMapCacheKey.java +++ /dev/null @@ -1,241 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - * - */ - -package org.ow2.jonas.resource.internal.cm.sql.cache; - -import java.util.Arrays; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Cache Key for the 'map' policy - * @author pelletib - */ -public class PreparedStatementMapCacheKey { - - - /** - * User - */ - private String user = null; - - /** - * SQL statement - */ - private String sql = null; - - /** - * Hashcode of this object - */ - private int hashCode; - - /** - * Type of result set. one of ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - */ - private int resultSetType = -1; - - /** - * Concurrency type for result set; one of - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - */ - private int resultSetConcurrency = -1; - - /** - * Holdability, One of the value : - * ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - */ - private int resultSetHoldability = -1; - - /** - * A flag indicating whether auto-generated keys should be returned; one of - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - */ - private int autoGeneratedKeys = -1; - - /** - * An array of column indexes indicating the columns that should be returned - * from the inserted row or rows - */ - private int[] columnIndexes = null; - - /** - * An array of column names indicating the columns that should be returned - * from the inserted row or rows - */ - private String[] columnNames = null; - - /** - * Logger used for traces - */ - private final Logger logger; - - - /** - * Creates a key object. - * @param user the user used for accessing the connection - * @param sql a String object that is the SQL statement to be - * sent to the database; may contain one or more ? IN parameters - * @param resultSetType a result set type; one of - * ResultSet.TYPE_FORWARD_ONLY, - * ResultSet.TYPE_SCROLL_INSENSITIVE, or - * ResultSet.TYPE_SCROLL_SENSITIVE - * @param resultSetConcurrency a concurrency type; one of - * ResultSet.CONCUR_READ_ONLY or - * ResultSet.CONCUR_UPDATABLE - * @param resultSetHoldability one of the following ResultSet - * constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or - * ResultSet.CLOSE_CURSORS_AT_COMMIT - * @param autoGeneratedKeys a flag indicating whether auto-generated keys - * should be returned; one of - * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS - * @param columnIndexes an array of column indexes indicating the columns - * that should be returned from the inserted row or rows - * @param columnNames an array of column names indicating the columns that - * should be returned from the inserted row or rows - * @param trace the logger to use for logging purpose - * @param isDebugLogging if true, log the debug event in the logger - */ - public PreparedStatementMapCacheKey(final String user, final String sql, final int resultSetType, - final int resultSetConcurrency, final int resultSetHoldability, final int autoGeneratedKeys, - final int[] columnIndexes, final String[] columnNames, final int hashcode, final Logger logger) { - - this.user = user; - this.sql = sql; - this.resultSetType = resultSetType; - this.resultSetConcurrency = resultSetConcurrency; - this.resultSetHoldability = resultSetHoldability; - this.autoGeneratedKeys = autoGeneratedKeys; - this.columnIndexes = columnIndexes; - this.columnNames = columnNames; - this.hashCode = hashcode; - this.logger = logger; - - } - - /** - * @param stmt given statement for comparing it - * @return true if given object is equals to this current object - */ - @Override - public boolean equals(final Object key) { - if (key == null) { - return false; - } - // different hashcode, cannot be equals - if (this.hashCode != key.hashCode()) { - return false; - } - - // if got same hashcode, try to see if cast is ok. - if (!(key instanceof PreparedStatementMapCacheKey)) { - return false; - } - PreparedStatementMapCacheKey pstmtKey = (PreparedStatementMapCacheKey) key; - - if (sql == null && pstmtKey.sql != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt sql: " + pstmtKey.sql + " not equal to " + sql); - } - return false; - } - if (sql != null && !sql.equals(pstmtKey.sql)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt sql: " + pstmtKey.sql + " not equal to " + sql); - } - return false; - } - if (user == null && pstmtKey.user != null) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt user: " + pstmtKey.user + " not equal to " + user); - } - return false; - } - if (user != null && !user.equals(pstmtKey.user)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt user: " + pstmtKey.user + " not equal to " + user); - } - return false; - } - if (resultSetType != pstmtKey.resultSetType) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt resultSetType: " + pstmtKey.resultSetType + " not equal to " - + resultSetType); - } - return false; - } - if (resultSetConcurrency != pstmtKey.resultSetConcurrency) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt resultSetConcurrency: " + pstmtKey.resultSetConcurrency + " not equal to " - + resultSetConcurrency); - } - return false; - } - if (resultSetHoldability != pstmtKey.resultSetHoldability) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt resultSetHoldability: " + pstmtKey.resultSetHoldability + " not equal to " - + resultSetHoldability); - } - return false; - } - if (autoGeneratedKeys != pstmtKey.autoGeneratedKeys) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt autoGeneratedKeys: " + pstmtKey.autoGeneratedKeys + " not equal to " - + autoGeneratedKeys); - } - return false; - } - if (!Arrays.equals(columnIndexes, pstmtKey.columnIndexes)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt columnIndexes: " + pstmtKey.columnIndexes + " not equal to " - + columnIndexes); - } - return false; - } - if (!Arrays.equals(columnNames, pstmtKey.columnNames)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt columnNames: " + pstmtKey.columnNames + " not equal to " + columnNames); - } - return false; - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Stmt found at " + this); - } - return true; - } - - @Override - public int hashCode() { - return this.hashCode; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ArchiveConfigMBean.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ArchiveConfigMBean.java deleted file mode 100644 index 328f0b3b4a..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ArchiveConfigMBean.java +++ /dev/null @@ -1,499 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -import java.util.zip.ZipEntry; - -import javax.management.MBeanException; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.dom.DOMSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; - -import org.apache.commons.modeler.BaseModelMBean; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import org.ow2.jonas.deployment.common.lib.JLSResourceResolver; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.XMLSerializer; -import org.w3c.dom.Document; -import org.xml.sax.EntityResolver; -import org.xml.sax.SAXException; - -/** - * A generic archive configuration MBean class which provides - * the ability to extract an XML configuration file from an archive - * (jar/war/ear/rar) as either a Document or as a String of XML. As - * well as storing an updated configuration file. - * - * @author Patrick Smith - * @author Greg Lapouchnian - */ -public class ArchiveConfigMBean extends BaseModelMBean { - - /** - * Default constructor, constructs a BaseModelMBean. - * @throws MBeanException from the super class. - */ - public ArchiveConfigMBean() throws MBeanException { - super(); - } - - /** - * Takes an org.w3c.dom.Document object - * and returns a String representation of the - * XML Documnt. - * @param doc the Document representation of the XML. - * @return a String representation of the XML. - */ - private static String serializeDocument(final Document doc) { - XMLSerializer ser = new XMLSerializer(doc); - - OutputStream out = new java.io.ByteArrayOutputStream(); - try { - ser.serialize(out); - } catch (IOException e) { - e.printStackTrace(); - } - return out.toString(); - } - - public void createArchiveWithXmlFile(final String archiveName, final String xmlFilePath, final String doc) - throws IOException { - JarEntry newEntry; - File tempJarFile; - JarOutputStream tempJar; - - try { - newEntry = new JarEntry(xmlFilePath); - tempJarFile = new File(archiveName); - - if(tempJarFile.exists()) { - throw new Exception("File already exists."); - } - - tempJar = new JarOutputStream(new FileOutputStream(tempJarFile)); - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } - - try { - - byte[] bytes = doc.getBytes(); - tempJar.putNextEntry(newEntry); - tempJar.write(bytes, 0, bytes.length); - - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } finally { - tempJar.close(); - } - } - - public void addXML(final String archiveName, final String xmlFilePath, final String docString) - throws IOException { - File jarFile; - JarFile rarFile; - JarEntry newEntry; - File tempJarFile; - JarOutputStream tempJar; - boolean updated = false; - - try { - jarFile = new File(archiveName); - rarFile = new JarFile(jarFile); - newEntry = new JarEntry(xmlFilePath); - tempJarFile = new File(archiveName + ".tmp"); - - tempJar = new JarOutputStream(new FileOutputStream(tempJarFile)); - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } - - try { - - // Allocate a buffer for reading entry data. - byte[] buffer = new byte[1024]; - int bytesRead; - - byte[] bytes = docString.getBytes(); - tempJar.putNextEntry(newEntry); - tempJar.write(bytes, 0, bytes.length); - - for (Enumeration entries = rarFile.entries(); entries - .hasMoreElements();) { - // Get the next entry. - JarEntry entry = (JarEntry) entries.nextElement(); - - // If the entry has not been added already, add it. - if (!entry.getName().equals(xmlFilePath)) { - // Get an input stream for the entry. - InputStream entryStream = rarFile.getInputStream(entry); - - // Read the entry and write it to the temp jar. - tempJar.putNextEntry(entry); - - while ((bytesRead = entryStream.read(buffer)) != -1) { - tempJar.write(buffer, 0, bytesRead); - } - } - } - updated = true; - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } finally { - rarFile.close(); - tempJar.close(); - - if (updated) { - jarFile.delete(); - tempJarFile.renameTo(jarFile); - } - } - - } - - /** - * Saves the given org.w3c.dom.Document back into an archive - * of the name given by archiveName. - * - * The Java Jar/Archive classes apparently do not provide support for - * simply updating a file in place in an archive, so a temporary archive - * must be created and have the contents of the existing archive copied over - * (with the exception of the updated Document file) then remove the existing - * archive and rename the temporary one. - * - * @param archiveName The name (and path) of the archive to updated. - * @param xmlFilePath The path within the archive to the XML file being updated. - * @param doc The Document representation of the XML file being updated. - * @throws IOException If the updating fails. - */ - public void saveXML(final String archiveName, final String xmlFilePath, final Document doc) - throws IOException { - File jarFile; - JarFile rarFile; - JarEntry newEntry; - File tempJarFile; - JarOutputStream tempJar; - boolean updated = false; - - try { - jarFile = new File(archiveName); - rarFile = new JarFile(jarFile); - newEntry = new JarEntry(xmlFilePath); - tempJarFile = new File(archiveName + ".tmp"); - - tempJar = new JarOutputStream(new FileOutputStream(tempJarFile)); - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } - - try { - - // Allocate a buffer for reading entry data. - byte[] buffer = new byte[1024]; - int bytesRead; - - String docString = serializeDocument(doc); - byte[] bytes = docString.getBytes(); - tempJar.putNextEntry(newEntry); - tempJar.write(bytes, 0, bytes.length); - - for (Enumeration entries = rarFile.entries(); entries - .hasMoreElements();) { - // Get the next entry. - JarEntry entry = (JarEntry) entries.nextElement(); - - // If the entry has not been added already, add it. - if (!entry.getName().equals(xmlFilePath)) { - // Get an input stream for the entry. - InputStream entryStream = rarFile.getInputStream(entry); - - // Read the entry and write it to the temp jar. - tempJar.putNextEntry(entry); - - while ((bytesRead = entryStream.read(buffer)) != -1) { - tempJar.write(buffer, 0, bytesRead); - } - } - } - updated = true; - } catch (Exception e) { - throw new IOException("Unable to update archive: " + archiveName - + "\n" + e.getMessage()); - } finally { - rarFile.close(); - tempJar.close(); - - if (updated) { - jarFile.delete(); - tempJarFile.renameTo(jarFile); - } - } - - } - - /** - * Verifies that the Document is correct with respect to the schemas - * associated with the XML. If no exception is thrown then the XML is - * either valid or no schemas were available for this XML. In which case - * the Document can be considered verified. - * @param doc The Document to validate. - * @throws SAXException If the document fails validation. - * @throws IOException If there is an error opening a schema. - */ - public void verifyDocument(final Document doc) throws SAXException, IOException { - SchemaFactory factory = SchemaFactory - .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - - // use a custom ResourceResolver in order to load Schemas and DTDs - // locally when validating - factory - .setResourceResolver(new JLSResourceResolver( - getEntityResolver())); - - String schemaPath = getSchema(doc); - - if (schemaPath != null) { - java.net.URL url = new java.net.URL(schemaPath); - - Schema schema = factory.newSchema(url); - // Create a Validator object, which can be used to validate - // an instance document. - Validator validator = schema.newValidator(); - // Validate the DOM tree. - validator.validate(new DOMSource(doc)); - } else { - // No schemas were provided for verification. - // The generic "ArchiveConfigMBean" will not validate, this is - // left for MBean extension classes to do. - // This is not an abstract method/class because we may want - // to use this as a generic, non-validating editor. - } - } - - /** - * Return an EntityResolver for this MBean. - * @return an EntityResolver for this MBean. - */ - protected EntityResolver getEntityResolver() { - // For the generic MBean (for now) return null - // because we don't know which schemas/dtds to add to the resolver. - return null; - } - - /** - * Extracts a Document representation of the XML file provided by - * xmlFilePath within the archive archiveName. - * @param archiveName The archive from which to extract the XML. - * @param xmlFilePath The path within the archive to the XML file. - * @return A document representation of the XML file. - * @throws Exception if the document cannot be extracted. - */ - public Document extractDocument(final String archiveName, final String xmlFilePath) - throws Exception { - Document result = null; - // Input Stream - InputStream raInputStream = null; - // ZipEntry - ZipEntry raZipEntry = null; - // Rar file - JarFile rarFile = null; - try { - rarFile = new JarFile(archiveName); - //Check the ra entry - raZipEntry = rarFile.getEntry(xmlFilePath); - if (raZipEntry != null) { - //Get the stream - raInputStream = rarFile.getInputStream(raZipEntry); - result = newDocument(raInputStream, xmlFilePath); - } else { - throw new FileNotFoundException("Could not find " + xmlFilePath - + " in " + archiveName); - } - } catch (Exception e) { - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - logger.log(BasicLevel.WARN, "Could not load XML file '" - + xmlFilePath + "' from '" + archiveName + "': " - + e.getMessage()); - throw e; - } finally { - if (raInputStream != null) { - raInputStream.close(); - } - if (rarFile != null) { - rarFile.close(); - } - } - - return result; - } - - /** - * Extracts a String representation of the XML file provided by - * xmlFilePath within the archive archiveName. - * @param archiveName The archive from which to extract the XML. - * @param xmlFilePath The path within the archive to the XML file. - * @return A String representation of the XML file. - * @throws Exception if the XML cannot be extracted. - */ - public String extractXML(final String archiveName, final String xmlFilePath) - throws Exception { - - String result = null; - InputStream inputStream = null; - ZipEntry zipEntry = null; - - try { - JarFile rarFile = new JarFile(archiveName); - - zipEntry = rarFile.getEntry(xmlFilePath); - if (zipEntry != null) { - //Get the stream - inputStream = rarFile.getInputStream(zipEntry); - - // read from the stream and create the string representing the xml - InputStreamReader reader = new InputStreamReader(inputStream); - BufferedReader br = new BufferedReader(reader); - StringBuffer sb = new StringBuffer(); - String line = null; - - while ((line = br.readLine()) != null) { - sb.append(line + "\n"); - } - result = sb.toString(); - - } else { - throw new FileNotFoundException("Could not find " + xmlFilePath - + " in " + archiveName); - } - } catch (Exception e) { - Logger logger = Log.getLogger(Log.JONAS_ADMIN_PREFIX); - logger.log(BasicLevel.WARN, "Could not load XML file '" - + xmlFilePath + "' from '" + archiveName + "': " - + e.getMessage()); - throw e; - } - - return result; - } - - /** - * Returns a new Document representation of the XML within the - * InputStream with the name name. - * @param is The InputStream containing the XMl. - * @param name The name of the XML file. - * @return A new Document representation of the XML. - * @throws ParserConfigurationException if the parser configuration is incorrect. - * @throws SAXException if the parsing fails. - * @throws IOException if the files cannot be opened. - */ - private Document newDocument(final InputStream is, final String name) - throws ParserConfigurationException, SAXException, IOException { - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - DocumentBuilder builder = factory.newDocumentBuilder(); - - // get the entity resolved if one was provided by the subclass - if (getEntityResolver() != null) { - builder.setEntityResolver(getEntityResolver()); - } - Document doc = builder.parse(is); - - // close InputStream when finished parsing - is.close(); - - return doc; - } - - /** - * Returns the path for the schema based on the xsi:schemalocation property - * @param doc The Document to get schemas for. - * @return The schema for the specified document. - */ - private String getSchema(final Document doc) { - String schemaPath = null; - if (doc.getDocumentElement().getAttribute("xsi:schemaLocation") != null) { - String[] parts = doc.getDocumentElement().getAttribute( - "xsi:schemaLocation").trim().split(" "); - String schemaURL = parts[parts.length - 1]; - - // get the name of the schema file referenced - String schemaName = schemaURL - .substring(schemaURL.lastIndexOf('/') + 1); - - if (getSchemaList() != null) { - // find the schema that ends in the same file name as the one - // specified in the document - Iterator i = getSchemaList().iterator(); - while (i.hasNext()) { - String schema = (String) i.next(); - String file = schema.substring(schema.lastIndexOf('/') + 1); - - // we've found the right schema, we will return its URL - if (file.equals(schemaName)) { - schemaPath = schema; - } - } - } - } - return schemaPath; - } - - /** - * Get a list of possible schema locations to validate against. - * @return a list of schemas that are available for this type of deployment - * descriptor. - */ - protected List getSchemaList() { - return null; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAActivationSpec.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAActivationSpec.java deleted file mode 100644 index fa237de08e..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAActivationSpec.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -// JOnAS Imports -import java.util.List; - -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; - - -/** - * MBean class for JCA ActivationSpec Management - * - * @author Eric Hardesty - * - */ -public class JCAActivationSpec extends J2EEManagedObject { - - // JOnAS Specific - /** - * Description - */ - private String description = null; - /** - * Jndi name - */ - private String jndiname = null; - /** - * Properties list associated with the ActivationSpec - */ - private List prop = null; - - /** - * MBean constructor - * @param oName object name of the managed object - * @param jndiname String of ActivationSpec jndi name - * @param description String of ActivationSpec description - * @param prop Properties of the ActivationSpec required properties - */ - public JCAActivationSpec(String oName, String jndiname, String description, List prop) { - super(oName); - this.jndiname = jndiname; - this.description = description; - this.prop = prop; - } - - /** - * return the description - * @return String description - */ - public String getDescription() { - return description; - } - - /** - * return the jndi name - * @return String jndi name - */ - public String getJndiName() { - return jndiname; - } - - /** - * return the ActivationSpec required property list - * @return List ActivationSpec properties - */ - public List getPropertiesList() { - return prop; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAAdminObject.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAAdminObject.java deleted file mode 100644 index 9d06257b44..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAAdminObject.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -// JOnAS Imports -import java.util.Properties; - -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; - - -/** - * MBean class for JCA AdminObject Management - * - * @author Eric Hardesty - * - */ -public class JCAAdminObject extends J2EEManagedObject { - - // JOnAS Specific - /** - * Description - */ - private String description = null; - /** - * Jndi name - */ - private String jndiname = null; - /** - * Properties associated with the AdminObject - */ - private Properties prop = null; - - /** - * MBean constructor - * @param oName object name of the managed object - * @param jndiname String of AdminObject - * @param description String of AdminObject description - * @param prop Properties of the AdminObject - */ - public JCAAdminObject(String oName, String jndiname, String description, Properties prop) { - super(oName); - this.jndiname = jndiname; - this.description = description; - this.prop = prop; - } - - /** - * return the description - * @return String description - */ - public String getDescription() { - return description; - } - - /** - * return the jndi name - * @return String jndi name - */ - public String getJndiName() { - return jndiname; - } - - /** - * return the AdminObject Properties - * @return Properties AdminObject properties - */ - public Properties getProperties() { - return prop; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactory.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactory.java deleted file mode 100644 index e06c1418c6..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactory.java +++ /dev/null @@ -1,529 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2011 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -// JOnAS imports -import java.util.Map; -import java.util.Properties; - -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerImpl; -import org.ow2.jonas.resource.internal.pool.Pool; - - -/** - * MBean class for JCA Connection Factory Management - * - * @author Adriana Danes JSR 77 (J2EE Management Standard) - * - */ -public class JCAConnectionFactory extends J2EEManagedObject { - - // JSR 77 - /** - * Associated ManagedConnectionFactory - */ - private String managedConnectionFactory = null; - - // JOnAS Specific - /** - * Description - */ - private String description = null; - /** - * Jndi name - */ - private String jndiname = null; - /** - * Properties associated with the ConnectionFactory - */ - private Properties prop = null; - - /** - * Associated connection manager - */ - private ConnectionManagerImpl cm = null; - - /** - * Pool associated to the connection manager - */ - private Pool pool = null; - - private String fileName = null; - /** - * Value used as sequence number by reconfiguration notifications - */ - private long sequenceNumber = 0; - - /** - * Constructor - * @param objectName String of object name - * @param jndiname String of ConnectionFactory - * @param prop Properties of the ConnectionFactory - * @param description String of ConnectionFactory description - */ - public JCAConnectionFactory(final String objectName, final String jndiname, final String fileName, final Properties prop, - final String description, final ConnectionManagerImpl cm) { - super(objectName); - this.jndiname = jndiname; - this.prop = prop; - this.description = description; - this.cm = cm; - this.pool = cm.getPool(); - this.fileName = fileName; - } - - /** - * return the description - * @return String description - */ - public String getDescription() { - return description; - } - - /** - * return the jndi name - * @return String jndi name - */ - public String getJndiName() { - return jndiname; - } - - /** - * Return the ManagedConnectionFactory object name - * @return String of ManagedConnectionFactory name - */ - public String getManagedConnectionFactory() { - return managedConnectionFactory; - } - - /** - * return the ConnectionFactory Properties - * @return Properties ConnectionFactory properties - */ - public Properties getProperties() { - return prop; - } - - /** - * Set the ManagedConnectionFactory object name - * - * @param managedConnectionFactoryObjectName String to set - */ - public void setManagedConnectionFactory(final String managedConnectionFactoryObjectName) { - managedConnectionFactory = managedConnectionFactoryObjectName; - } - - // JDBC Connection Pool Configuration - // ----------------------------------- - /** - * @return true if there is a JDBC connection to manage - */ - public boolean isJdbcConnSetUp() { - return cm.isJdbcConnSetUp(); - } - - /** - * @return JDBC connection checking level - */ - public Integer getJdbcConnCheckLevel() { - return new Integer(cm.getCheckLevel()); - } - /** - * Sets the JDBC connection checking level - * @param level connection level - */ - public void setJdbcConnCheckLevel(final Integer level) { - cm.setCheckLevel(level.intValue()); - } - - /** - * @return SQL query for JDBC connections test - */ - public String getJdbcTestStatement() { - return cm.getTestStatement(); - } - /** - * @param test SQL query for JDBC connections test - */ - public void setJdbcTestStatement(final String test) { - cm.setTestStatement(test); - } - - /** - * @return Returns the PrepareStatement cache max size - */ - public Integer getPstmtMax() { - return new Integer(cm.getMaxPstmtPoolSize()); - } - - /** - * - * @param size the PrepareStatement cache max size - */ - public void setPstmtMax(final Integer size) { - cm.setMaxPstmtPoolSize(size.intValue()); - } - - /** - * @return Returns the PrepareStatement cache policy - */ - public String getPstmtCachePolicy() { - return cm.getPstmtCachePolicy(); - } - - /** - * - * @param size the PrepareStatement cache max size - */ - public void setPstmtCachePolicy(final String value) { - cm.setPstmtCachePolicy(value); - } - // ----------------------------------- - /** - * @return Connections maximum age - */ - public Integer getConnMaxAge() { - return new Integer(pool.getMaxAge()); - } - /** - * @param mn Connections maximum age - */ - public void setConnMaxAge(final Integer mn) { - pool.setMaxAge(mn.intValue()); - } - - /** - * @return max maximum size of connection pool - */ - public Integer getMaxSize() { - return new Integer(pool.getMaxSize()); - } - /** - * @param max maximum size of connection pool - */ - public void setMaxSize(final Integer max) { - try { - pool.setMaxSize(max.intValue()); - } catch(Exception ex) { } - } - - /** - * @return maximum opening time of connections - */ - public Integer getMaxOpentime() { - return new Integer(pool.getMaxOpentime()); - } - /** - * @param mn maximum opening time in minutes for connections - */ - public void setMaxOpentime(final Integer mn) { - pool.setMaxOpentime(mn.intValue()); - } - - /** - * @return maximum nb of waiters allowed - */ - public Integer getMaxWaiters() { - return new Integer(pool.getMaxWaiters()); - } - /** - * @param max maximum nb of waiters allowed - */ - public void setMaxWaiters(final Integer max) { - pool.setMaxWaiters(max.intValue()); - } - - /** - * @return maximum time to wait for a connection, in seconds - */ - public Integer getMaxWaitTime() { - return new Integer(pool.getMaxWaitTime()); - } - - /** - * @param max maximum time to wait for a connection, in seconds - */ - public void setMaxWaitTime(final Integer max) { - pool.setMaxWaitTime(max.intValue()); - } - - /** - * @return minimum size of connection pool - */ - public Integer getMinSize() { - return new Integer(pool.getMinSize()); - } - - /** - * @return initial size of connection pool - */ - public Integer getInitSize() { - return new Integer(pool.getInitSize()); - } - /** - * MBean method allowing to set the minimum size of connection pool - * @param min minimum size of connection pool - */ - public void setMinSize(final Integer min) { - try { - pool.setMinSize(min.intValue()); - } catch (Exception ex) { } - } - - /** - * @return sampling period for refresching pool statistics - */ - public Integer getSamplingPeriod() { - return new Integer(pool.getSamplingPeriod()); - } - - /** - * @param i sampling period for refresching pool statistics - */ - public void setSamplingPeriod(final Integer i) { - pool.setSamplingPeriod(i.intValue()); - } - - // JDBC Connection Pool Statistics - - /** - * @return number of connection failures - */ - public Integer getConnectionFailures() { - return new Integer(pool.getConnectionFailures()); - } - /** - * @return number of connection leaks - */ - public Integer getConnectionLeaks() { - return new Integer(pool.getConnectionLeaks()); - } - /** - * @return number of busy connections - */ - public Integer getCurrentBusy() { - return new Integer(pool.getCurrentBusy()); - } - /** - * @return number of busy connections - */ - public Integer getBusyMax() { - return new Integer(pool.getBusyMaxRecent()); - } - /** - * @return number of busy connections - */ - public Integer getBusyMin() { - return new Integer(pool.getBusyMinRecent()); - } - /** - * @return number of connections used in transactions - */ - public Integer getCurrentInTx() { - return new Integer(cm.getCurrentInTx()); - } - /** - * @return number of opened connections - */ - public Integer getCurrentOpened() { - return new Integer(pool.getCurrentOpened()); - } - /** - * @return current number of connection waiters - */ - public Integer getCurrentWaiters() { - return new Integer(pool.getCurrentWaiters()); - } - /** - * @return number of opened physical JDBC connections - */ - public Integer getOpenedCount() { - return new Integer(pool.getOpenedCount()); - } - /** - * @return number of open calls that were rejected because too many waiters - */ - public Integer getRejectedFull() { - return new Integer(pool.getRejectedFull()); - } - /** - * @return total number of open calls that were rejected - */ - public Integer getRejectedOpen() { - return new Integer(pool.getRejectedOpen()); - } - /** - * @return number of open calls that were rejected by an unknown reason - */ - public Integer getRejectedOther() { - return new Integer(pool.getRejectedOther()); - } - /** - * @return number of open calls that were rejected by timeout - */ - public Integer getRejectedTimeout() { - return new Integer(pool.getRejectedTimeout()); - } - /** - * @return number of xa connection served - */ - public Integer getServedOpen() { - return new Integer(pool.getServedOpen()); - } - /** - * @return total number of waiters since datasource creation. - */ - public Integer getWaiterCount() { - return new Integer(pool.getWaiterCount()); - } - /** - * @return Maximum number of waiters since datasource creation. - */ - public Integer getWaitersHigh() { - return new Integer(pool.getWaitersHigh()); - } - /** - * @return Maximum nb of waiters in last sampling period - */ - public Integer getWaitersHighRecent() { - return new Integer(pool.getWaitersHighRecent()); - } - /** - * @return Maximum waiting time (millisec) since datasource creation. - */ - public Long getWaitingHigh() { - return new Long(pool.getWaitingHigh()); - } - /** - * @return Maximum waiting time (millisec) in last sampling period - */ - public Long getWaitingHighRecent() { - return new Long(pool.getWaitingHighRecent()); - } - /** - * @return Total waiting time (millisec) since datasource creation. - */ - public Long getWaitingTime() { - return new Long(pool.getWaitingTime()); - } - - public int[] getOpenedConnections(final int seconds) { - return cm.getOpenedConnections(seconds); - } - - public int[] getOpenedConnections() { - return cm.getOpenedConnections(); - } - - public Map getConnectionDetails(final int connectionId) { - return cm.getConnectionDetails(connectionId); - } - - public void forceCloseConnection(final int connectionId) { - cm.forceCloseConnection(connectionId); - } - - public void setObservable(final boolean observable) { - cm.setObservable(observable); - } - - public boolean isObservable() { - return cm.isObservable(); - } - - /** - * Gets the sequence number for reconfiguration opeartions - * @return the sequence number for reconfiguration operations - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } - - /** - * @return Returns the fileName. - */ - public String getFileName() { - return fileName; - } - - /** - * @return Cache policy used to manage the prepared statement in memory. - * - */ - public String getPrepStmtCachePolicy() { - return cm.getPstmtCachePolicy(); - } - - /** - * @return Count of the number of times that the statement cache was accessed. - * - */ - public long getPrepStmtCacheAccessCount() { - return cm.getPstmtStats().getPrepStmtCacheAccessCount(); - } - - /** - * @return Count of the number of statements added to the statement cache. - * - */ - public long getPrepStmtCacheAddCount() { - return cm.getPstmtStats().getPrepStmtCacheAddCount(); - } - - - /** - * @return Number of prepared statements currently cached in the statement cache. - * - */ - public long getPrepStmtCacheCurrentSize() { - return cm.getPstmtStats().getPrepStmtCacheCurrentSize(); - } - - /** - * @return Cumulative count of statements discarded from the cache. - * - */ - public long getPrepStmtCacheDeleteCount() { - return cm.getPstmtStats().getPrepStmtCacheDeleteCount(); - } - - /** - * @return Cumulative count of the number of times that statements from the cache were used. - * - */ - public long getPrepStmtCacheHitCount() { - return cm.getPstmtStats().getPrepStmtCacheHitCount(); - } - - /** - * @return Number of times that a statement request could not be satisfied with a statement from the cache. - * - */ - public long getPrepStmtCacheMissCount() { - return cm.getPstmtStats().getPrepStmtCacheMissCount(); - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactoryMBean.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactoryMBean.java deleted file mode 100644 index d6e866c81c..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAConnectionFactoryMBean.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -import javax.management.MBeanException; -import javax.management.NotificationEmitter; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * Allow creation of a model MBean instance to registered in the MBean server. - * This class is necessary to support persistent reconfiguration - * based on JMX notifications. - * @author Eric Hardesty - */ -public class JCAConnectionFactoryMBean extends BaseModelMBean { - /** - * Default constructor - * @throws MBeanException if super constructor fails - */ - public JCAConnectionFactoryMBean() throws MBeanException { - super(); - } - - /** - * Overloaded method - * @param pListner Listener to notify - * @param pFilter Notification filter - * @param pHandback ?? - * @throws java.lang.IllegalArgumentException if notification is not done - */ - public void addNotificationListener(NotificationListener pListner, NotificationFilter pFilter, - java.lang.Object pHandback) throws java.lang.IllegalArgumentException { - ((NotificationEmitter) (this.resource)).addNotificationListener(pListner, pFilter, pHandback); - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAManagedConnectionFactory.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAManagedConnectionFactory.java deleted file mode 100644 index 1c8a3f3667..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAManagedConnectionFactory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -// JOnAS imports -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; - -/** - * MBean class for JCA ManagedConnection Factory Management - * - * @author Adriana Danes JSR 77 (J2EE Management Standard) - * - */ -public class JCAManagedConnectionFactory extends J2EEManagedObject { - - /** - * Constructor - * @param objectName String of J2EE ManagedObject name - */ - public JCAManagedConnectionFactory(String objectName) { - super(objectName); - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAResource.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAResource.java deleted file mode 100644 index 9114abe4d6..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/JCAResource.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -// Java imports -import java.util.ArrayList; - -import org.ow2.jonas.lib.management.javaee.J2EEResource; - - -/** - * MBean class for JCA Resource Management - * - * @author Adriana Danes JSR 77 (J2EE Management Standard) - * - */ -public class JCAResource extends J2EEResource { - - // JSR 77 - /** - * Array list of Connection Factories - */ - private ArrayList connectionFactories = new ArrayList(); - /** - * Array list of Admin Objects - */ - private ArrayList adminObjects = new ArrayList(); - /** - * Array list of ActivationSpecs - */ - private ArrayList activationSpecs = new ArrayList(); - - /** - * Constructor - * @param objectName String of object name - */ - public JCAResource(String objectName) { - super(objectName); - } - - /** - * Get the Activationspec names - * @return String [] list of Activationspec names - */ - public String [] getActivationSpecs() { -// return activationSpecs; - return ((String[]) activationSpecs.toArray(new String[activationSpecs.size()])); - } - - /** - * Get the AdminObject names - * @return String [] list of AdminObject names - */ - public String [] getAdminObjects() { -// return adminObjects; - return ((String[]) adminObjects.toArray(new String[adminObjects.size()])); - } - - /** - * get the ConnectionFactory names - * @return String [] list of ConnectionFactory names - */ - public String [] getConnectionFactories() { -// return connectionFactories; - return ((String[]) connectionFactories.toArray(new String[connectionFactories.size()])); - } - - /** - * set the AdminObject name - * @param adminObjectName String of AdminObject name - */ - public void setAdminObjects(String adminObjectName) { - adminObjects.add(adminObjectName); - } - - /** - * set the ActivationSpec name - * @param activationSpecsObjectName String of activationSpecs name - */ - public void setActivationSpecs(String activationSpecsObjectName) { - activationSpecs.add(activationSpecsObjectName); - } - /** - * set the ConnectionFactory name - * @param connectionFactoryObjectName String of ConnectionFactory name - */ - public void setConnectionFactory(String connectionFactoryObjectName) { - connectionFactories.add(connectionFactoryObjectName); - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/README b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/README deleted file mode 100644 index 61fa4ce0e6..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/README +++ /dev/null @@ -1,87 +0,0 @@ - - |-----------------------------------------| - |Implementation of JSR77 MBeans related to| - | Resource Adapters and JCA Resources | - ------------------------------------------- - - Adriana Danes - Last update the 23/01/2004 - - -This document describes the current implementation based on my -understanding of the JSR77 specification. - -It is intended to the developpers od the JOnAS resource service -and to the providers of JCA ResourceAdapters for JOnAS, which -are aimed to modify the current implementation in order to -make it conformant to the concrete management functions needed -by the components they implement. - - -MBeans description and implementation --------------------------------------- -JSR 77 defines 5 Managed Object types related to JCA resources. -In the following list we have the JSR77 type name + the class -implementing it in JOnAS: -- ResourceAdapterModule + org.objectweb.jonas.resource.internal.ResourceAdapterModule -- ResourceAdapter + org.objectweb.jonas.resource.internal.ResourceAdapter -- JCAResource + org.objectweb.jonas.resource.internal.JCAResource -- JCAConnectionFactory + org.objectweb.jonas.resource.internal.JCAConnectionFactory -- JCAManagedConnectionFactory + org.objectweb.jonas.resource.internal.JCAManagedConnectionFactory -These MBeans replace the 'old' JmxResourceAdapter MBean, which is aimed to -be removed finally. - -Note that these MBeans are no more in the cathegory of 'standard MBean' as before, -but 'model MBeans', i.e. dynamic, configurable MBeans (see JMX specification). - -As Tomcat, we decided to use a software module in Jakarta Commons, called Modeler, -that makes easier the implementation of 'model MBeans'. -See http://jakarta.apache.org/commons/modeler/docs/api/index.html - -The description of the MBeans is given by the mbeans-descriptors.xml file. -Currently very few management attributes are defined: the ones imposed by -the JSR77 specification (as 'resourceAdapters' attribute for the -ResourceAdapterModule MBean) + some attributes that were defined by -the JmxResourceAdapterMBean interface (as 'properties' in ResourceAdapter MBean). - -MBeans creation and registration --------------------------------- -The JMX ObjectNames is conforming to the JSR77.3.1.1.1 section. -They can be generated using the org.objectweb.jonas.jmx.J2eeObjectName class. -The 'name' key property should be redefined ! - -The creation and registration of all the MBean types is currently done -in the createResourceAdapter() method within ResourceServiceImpl class. -The MBeans creation is completed by updates which implement the navigability -relations between the managed objects, as required by the specification. - -The MBeans unregistration is currently done in the unregisterRAR() -method within ResourceServiceImpl class. It uses the relations -between the different managed objects types. - -The stop() method needs to be updated in order to unregister all the -MBeans as described in the comment lines! - -Testing the current code ------------------------- -At JOnAS start up the MBeans associated to the 4 RARs installed in -JONAS_ROOT/rars/autoload are created and registered in JMX. -They can be seen in the JOnAS management console (jonasAdmin application) -in the following sub-tree : Mbeans / J2EE Mbeans / 'domain name' -(note that the default domain name is given by the JonAS server name). -Also, you can look to the MBean corresponding to the J2EEServer managed object -in / J2EE Mbeans / 'domain name' / J2EEServer sub-tree. -You can check that the 'deployedObjects' and 'resources' attributes values -contain OBJECT_NAMES of the MBeans associated to the deployed RAR modules, -and associated JCA Resources. - - -To test the unregister of MBeans the ResourceServiceImpl class needs be -modified: change the undeploy boolean private variable to 'true'. -This allows, normally, to unregister the MBeans associated to the first -deployed RAR (corresponding to JDBC_XA). But, strangelly, not only these ones -are unregistered, but also the MBeans associated to the second RAR ???? - - - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/RarConfigMBean.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/RarConfigMBean.java deleted file mode 100644 index f9e19e3f92..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/RarConfigMBean.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.mbean; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import javax.management.MBeanException; - - -import org.ow2.jonas.deployment.common.lib.JEntityResolver; -import org.ow2.jonas.deployment.rar.ConnectorDTDs; -import org.ow2.jonas.deployment.rar.ConnectorSchemas; -import org.ow2.jonas.deployment.rar.JonasConnectorDTDs; -import org.ow2.jonas.deployment.rar.JonasConnectorSchemas; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.EntityResolver; - -/** - * A RAR specific MBean which provides the schemas and EntityResolver - * needed to validate a jonas-ra.xml file or an ra.xml file. - * @author Patrick Smith - * @author Greg Lapouchnian - */ -public class RarConfigMBean extends ArchiveConfigMBean { - - /** - * A default constructor which calls the parent constructor. - * @throws MBeanException from the super class. - */ - public RarConfigMBean() throws MBeanException { - super(); - } - - /** - * Returns an EntityResolver for the schemas and dtds of - * ra.xml and jonas-ra.xml. - * @return an EntityResolver for the schemas and dtds - * for ra.xml and jonas-ra.xml. - */ - public EntityResolver getEntityResolver() { - JEntityResolver jer = new JEntityResolver(); - - // add both the generic and Jonas-specific schemas - jer.addSchemas(new ConnectorSchemas()); - jer.addSchemas(new JonasConnectorSchemas()); - - // add the connector DTDs - jer.addDtds(new ConnectorDTDs()); - jer.addDtds(new JonasConnectorDTDs()); - - return jer; - } - - /** - * Get a list of schemas available for RARs. - * @return a list of schemas for RAR validation. - */ - protected List getSchemaList() { - // check if this schemas is part of connector schemas - List schemas = new ArrayList(); - schemas.addAll(new ConnectorSchemas().getlocalSchemas()); - schemas.addAll(new JonasConnectorSchemas().getlocalSchemas()); - return schemas; - } - - public void updateXML(String archiveName, Map map) throws Exception { - String xmlFilePath = "META-INF/jonas-ra.xml"; - Document doc = extractDocument(archiveName, xmlFilePath); - - Node poolParams = getPoolParams(doc); - TreeMap poolNames = getPoolTagMap(); - if (poolParams != null) { - NodeList poolChildren = poolParams.getChildNodes(); - for (int i = 0; i < poolChildren.getLength(); i++) { - String name = poolChildren.item(i).getNodeName(); - if (poolNames.containsKey(name)) { - if (poolChildren.item(i).getFirstChild() != null - && poolChildren.item(i).getFirstChild() - .getNodeType() == Node.TEXT_NODE) { - poolChildren.item(i).getFirstChild().setNodeValue( - (String) map.get(poolNames.get(name))); - } else { - poolChildren.item(i).appendChild( - doc.createTextNode((String) map.get(poolNames - .get(name)))); - } - } - } - } - - Node jdbcParams = getJDBCParams(doc); - TreeMap jdbcNames = getJDBCTagMap(); - if (jdbcParams != null) { - NodeList jdbcChildren = jdbcParams.getChildNodes(); - for (int j = 0; j < jdbcChildren.getLength(); j++) { - String jdbcName = jdbcChildren.item(j).getNodeName(); - if (jdbcNames.containsKey(jdbcName)) { - if (jdbcChildren.item(j).getFirstChild() != null - && jdbcChildren.item(j).getFirstChild() - .getNodeType() == Node.TEXT_NODE) { - jdbcChildren.item(j).getFirstChild().setNodeValue( - (String) map.get(jdbcNames.get(jdbcName))); - } else { - jdbcChildren.item(j).appendChild( - doc.createTextNode((String) map.get(jdbcNames - .get(jdbcName)))); - } - } - } - } - - verifyDocument(doc); - saveXML(archiveName, xmlFilePath, doc); - } - - protected TreeMap getJDBCTagMap() { - TreeMap names = new TreeMap(); - names.put("jdbc-check-level", "jdbcConnCheckLevel"); - names.put("jdbc-test-statement", "jdbcTestStatement"); - return names; - } - - protected TreeMap getPoolTagMap() { - TreeMap names = new TreeMap(); - names.put("pool-max-age", "connMaxAge"); - names.put("pool-max-opentime", "maxOpentime"); - names.put("pool-max", "maxSize"); - names.put("pool-min", "minSize"); - names.put("pool-max-waittime", "maxWaitTime"); - names.put("pool-max-waiters", "maxWaiters"); - names.put("pool-sampling-period", "samplingPeriod"); - return names; - } - - protected Node getPoolParams(Document doc) { - if (doc.getElementsByTagName("pool-params").getLength() == 0) { - return null; - } else { - return doc.getElementsByTagName("pool-params").item(0); - } - } - - protected Node getJDBCParams(Document doc) { - if (doc.getElementsByTagName("jdbc-conn-params").getLength() == 0) { - return null; - } else { - return doc.getElementsByTagName("jdbc-conn-params").item(0); - } - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapter.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapter.java deleted file mode 100644 index a0348e6874..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapter.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -import java.io.File; -import java.net.URL; -import java.util.Properties; - -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; - - -/** - * MBean class for ResourceAdapter management - * - * @author Michel Bruno and Guillaume Riviere
    - * @contributor Michel-Ange Anton (add 'filename', 'inEarCase', 'earURL' properties)
    - * @contributor Adriana Danes JSR 77 (J2EE Management Standard) - */ -public class ResourceAdapter extends J2EEManagedObject { - - // JSR 77 - /** - * JCA Resource Object Name - */ - private String jcaResourceObjectName = null; - - /** - * Properties associated with the RAR - */ - private Properties prop = null; - - /** - * Jndi name - */ - private String jndiName = null; - - /** - * Filename of the RAR - */ - private String filename = null; - - /** - * Boolean if the RAR is in an EAR file - */ - private boolean inEarCase = false; - - /** - * URL of the EAR if used - */ - private URL earURL = null; - - /** - * Spec version - */ - private String specVersion = null; - - /** - * The JNDI name of the linked rar resource if any, null otherwise. - */ - private String rarLink = null; - - /** - * RA Classname (only for 1.5 connectors) - */ - private String resourceAdapterClassname = null; - - /** - * Constructor - * @param objectName String of J2EE Managed Object - * @param prop Properties of RAR - * @param jndiName String of RAR - * @param filename String of RAR filename - * @param inEarCase boolean if in an EAR file - * @param earURL URL of EAR file - * @param specVersion String of spec version - */ - public ResourceAdapter(final String objectName, final Properties prop, final String jndiName, final String filename, - final boolean inEarCase, final URL earURL, final String specVersion, final String rarLink) { - super(objectName); - this.prop = prop; - this.jndiName = jndiName; - // To avoid trouble between OS (Unix <-> Windows) - try { - this.filename = (new File(filename)).toURL().getPath(); - } catch (Exception e) { - this.filename = filename; - } - this.inEarCase = inEarCase; - this.earURL = earURL; - this.specVersion = specVersion; - this.rarLink = rarLink; - } - - /** - * return the Adaptor Properties - * @return Properties adaptor properties - */ - public Properties getProperties() { - return prop; - } - - /** - * return the jndi name - * @return String jndi name - */ - public String getJndiName() { - return jndiName; - } - - /** - * Accessor the filename of the resource adapter. - * @return The filename - */ - public String getFileName() { - return filename; - } - - /** - * Accessor the flag indicating if the resource adapter is in Ear. - * @return Flag if this resource adapter is in Ear - */ - public boolean getInEarCase() { - return inEarCase; - } - - /** - * Accessor the URL of the Ear if the resource adapter is in Ear. - * @return The URL of the Ear or null - */ - public URL getEarURL() { - return earURL; - } - - /** - * return the jcaResourceObjectName - * @return String jcaResourceObjectName - */ - public String getJcaResource() { - return jcaResourceObjectName; - } - - /** - * return the specVersion - * @return String specVersion - */ - public String getSpecVersion() { - return specVersion; - } - - /** - * @return The JNDI name of the linked rar resource if any, null otherwise. - */ - public String getRarLink() { - return rarLink; - } - - /** - * set the jcaResourceObjectName - * @param jcaResourceObjectName to set - */ - public void setJcaResource(final String jcaResourceObjectName) { - this.jcaResourceObjectName = jcaResourceObjectName; - } - - /** - * @return Returns the RA classname. - */ - public String getResourceAdapterClassname() { - return resourceAdapterClassname; - } - - /** - * @param resourceAdapterClassname the ra classname. - */ - public void setResourceAdapterClassname(final String resourceAdapterClassname) { - this.resourceAdapterClassname = resourceAdapterClassname; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapterModule.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapterModule.java deleted file mode 100644 index 686f6753d5..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/mbean/ResourceAdapterModule.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.mbean; - -import java.net.URL; -import java.util.ArrayList; - -import javax.management.ObjectName; - -import org.ow2.jonas.lib.management.javaee.J2EEModule; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; - - -/** - * MBean class for ResourceAdapterModule management - * - * @author Adriana Danes JSR 77 (J2EE Management Standard) - */ -public class ResourceAdapterModule extends J2EEModule /*J2EEManagedObject*/ { - - // JSR 77 - private ArrayList resourceAdapters = new ArrayList(); - - private boolean inEarCase = false; - private URL earURL = null; - private String fileName = null; - private URL rarURL = null; - - /** - * J2EEApplication MBean OBJECT_NAME in ear case - */ - private String earON = null; - - public ResourceAdapterModule(final ObjectName objectName, final boolean inEarCase, final URL earURL) { - super(objectName.toString()); - this.inEarCase = inEarCase; - this.earURL = earURL; - ObjectName earOn = null; - if (inEarCase) { - String domainName = objectName.getDomain(); - String serverName = objectName.getKeyProperty("J2EEServer"); - String appName = objectName.getKeyProperty("J2EEApplication"); - earOn = J2eeObjectName.J2EEApplication(domainName, serverName, appName); - } - if (earOn != null) { - earON = earOn.toString(); - } - } - - /** - * Accessor the flag indicating if the resource adapter is in Ear. - * @return Flag if this resource adapter is in Ear - */ - public boolean getInEarCase() { - return inEarCase; - } - - /** - * Accessor the URL of the Ear if the resource adapter is in Ear. - * @return The URL of the Ear or null - */ - public URL getEarURL() { - return earURL; - } - - public String[] getResourceAdapters() { - return ((String[]) resourceAdapters.toArray(new String[resourceAdapters.size()])); - } - - public void setResourceAdapter(final String resourceAdapterObjectName) { - resourceAdapters.add(resourceAdapterObjectName); - } - /** - * @return Returns the fileName. - */ - public String getFileName() { - return fileName; - } - /** - * @param fileName The fileName to set. - */ - public void setFileName(final String fileName) { - this.fileName = fileName; - } - /** - * - * @return The J2EEApplication MBean OBJECT_NAME in ear case - */ - public String getEarON() { - return earON; - } - - public URL getRarURL() { - return rarURL; - } - - public void setRarURL(final URL rarURL) { - this.rarURL = rarURL; - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/naming/ResourceObjectFactory.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/naming/ResourceObjectFactory.java deleted file mode 100644 index f8cd91ff5b..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/naming/ResourceObjectFactory.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.resource.internal.naming; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; -import javax.resource.cci.ConnectionFactory; - -import org.ow2.jonas.deployment.rar.ConnectorDesc; -import org.ow2.jonas.deployment.rar.JonasConnectorDesc; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.resource.internal.JOnASResourceService; -import org.ow2.jonas.resource.internal.Rar; -import org.ow2.jonas.resource.internal.ResourceServiceConstants; - - -/** - * Resource Service {@link ObjectFactory} for {@link ConnectionFactory}. - * @author Eric Hardesty - */ -public class ResourceObjectFactory implements ObjectFactory { - - /** - * Create an object using the information provided - * @param refObj the possibly null object containing reference information to create the object. - * @param name the name of this object relative to nameCtx, or null if no name is specified. - * @param nameCtx the context relative to which the name parameter is specified, or null if name - * is relative to the default initial context. - * @param env the possibly null environment that is used in creating the object. - * @return Object created or null if unable to create - * @throws Exception if an exception happened while trying to create the object - */ - public Object getObjectInstance(final Object refObj, - final Name name, - final Context nameCtx, - final Hashtable env) throws Exception { - - Reference ref = (Reference) refObj; - - if (ref == null) { - System.out.println("No reference found"); - return null; - } - - String raname = (String) ref.get(ResourceServiceConstants.JNDI_NAME).getContent(); - - // Try to get a local reference - Object obj = null; - try { - obj = JOnASResourceService.getResourceObject(raname); - if (obj != null) { - return obj; - } - } catch (Throwable ex) { - } - // If we did not return previously, we're in the ClientContainer - - // Need to load the factory in the client environment - String rarObjectName = (String) ref.get(ResourceServiceConstants.RAR_OBJNAME).getContent(); - String factoryType = (String) ref.get(ResourceServiceConstants.FACTORY_TYPE).getContent(); - String factoryOff = (String) ref.get(ResourceServiceConstants.FACTORY_OFFSET).getContent(); - int factoryOffset = Integer.parseInt(factoryOff); - - RefAddr refAddr = null; - - // Create a ConnectorDesc (ra.xml) - ConnectorDesc conn = null; - refAddr = ref.get(ResourceServiceConstants.RA_XML); - if (refAddr != null) { - conn = (ConnectorDesc) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - } - - // Create a JonasConnectorDesc (jonas-ra.xml) - JonasConnectorDesc jConn = null; - refAddr = ref.get(ResourceServiceConstants.JONAS_RA_XML); - if (refAddr != null) { - jConn = (JonasConnectorDesc) JNDIUtils.getObjectFromBytes((byte[]) refAddr.getContent()); - } - - // This will either get the other server's implementation or a client version - Rar ra = new Rar(); - obj = ra.createFactory(raname, - rarObjectName, - factoryOffset, - factoryType, - conn, - jConn); - - return obj; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/Pool.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/Pool.java deleted file mode 100644 index ac49dc2b83..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/Pool.java +++ /dev/null @@ -1,449 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * ObjectWeb Connector: an implementation of JCA Sun specification along - * with some extensions of this specification. - * Copyright (C) 2001-2002 France Telecom R&D - INRIA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Release: 1.0 - * - * Author: E. Hardesty - * - * Based on Pool api in ObjectWeb common - * - */ - -/** - * Package definition. - */ -package org.ow2.jonas.resource.internal.pool; - -import javax.resource.spi.ManagedConnection; -import javax.transaction.Transaction; -import java.util.Map; - - -/** - * The interface Pool defines an object that pools resources of any - * kind. Resources must be requested (getResource) and released - * (releaseResource) on demand. A Pool object can be parameterized along - * different dimensions. All these dimensions are represented by accessor - * methods (getters and setters) assigned to each of them: - *

      - *
    • - * A Timeout can be assigned to a Pool. It is used when no more - * resources are available and when the Pool has reached its maximum size. - * This is the timeout to wait for a free resource until exiting with an - * exception. It defaults to 0, which means waiting forever until a - * resource is freed. Its value should be greater or equal to 0 ; negative - * values are ignored (setTimeOut(-1) => NOP). - *
    • - *
    • - * A MinSize can be assigned to a Pool. Its value should be greater or - * equal to 0, and smaller or equal to MaxSize. Values that do not match these - * conditions are ignored (e.g., setMinSize(-1) => NOP). - * This size means that there is always MinSize PoolResource allocated in this - * Pool. If PoolResource needs to be allocated when setting this size, - * "getPoolMatchFactory().createResource(null)" is called. Its default value - * is 0. - *
    • - *
    • - * A MatchFactory (i.e., a PoolMatchFactory object) must be assigned to - * a Pool. It defines the way new PoolResource are created and the way a - * PoolResource of a Pool matches some "hints" properties when requested. It is - * mandatory for the Pool to be fully functional. - *
    • - *
    • - * A MaxSize can be assigned to a Pool. Its value should be greater or - * equal to 0, and greater or equal to MinSize. Values that do not match these - * conditions are ignored (e.g., setMaxSize(-1) => NOP). Its default value - * is 0, thus it is mandatory to set this value for making the Poll functional. - *
    • - *
    - */ -public interface Pool { - /** - * adjust checks the age of the entries and removes them if - * they are too old - * - * @throws Exception if an error occurs - */ - void adjust() throws Exception; - - /** - * Close all connections in the pool when server is shutting down. - */ - void closeAllConnections(); - - /** - * getJdbcConnLevel gets the jdbc connection level - * - * @return int jdbc connection level specified - */ - public int getJdbcConnLevel(); - - /** - * getJdbcTestStatement gets the JDBC test statement for this pool - * - * @return String JDBC test statement - */ - public String getJdbcTestStatement(); - - /** - * getMatchFactory retrieves the PoolMatchFactory assigned to this - * Pool. - * @return The PoolMatchFactory currently assigned to this Pool. - */ - PoolMatchFactory getMatchFactory(); - - /** - * getMaxAge gets the max age for a pool entry - * - * @return int max number of minutes to keep a connection - * in the pool. - */ - int getMaxAge(); - - /** - * getMaxOpentime gets the max age for a pool entry - * - * @return int max number of minutes to keep a connection - * in the pool. - */ - int getMaxOpentime(); - - /** - * getMaxSize retrieves the maximum size assigned to this Pool. - * @return The maximum size currently assigned to this Pool. - */ - int getMaxSize(); - - /** - * getMaxWaiters gets the maximum number of waiters for a connection - * in this Pool. - * - * @return int maximum number of waiters - */ - int getMaxWaiters(); - - /** - * getMaxWaitTime gets the maximum number of seconds to wait for a - * connection in this Pool. - * - * @return int maximum number of seconds to wait - */ - int getMaxWaitTime(); - - /** - * getMinSize retrieves the minimum size assigned to this Pool. - * @return The minimum size currently assigned to this Pool. - */ - int getMinSize(); - - /** - * getResource is used to allocate a Object from the Pool. - * Some hints are passed in order to specialise the matching or creation - * of Object. - * @param hints Some properties to specialise the matching or the creation - * of Object. - * @return The Object allocated from the Pool. - * @throws Exception if an error occurs - */ - Object getResource(Object hints) throws Exception; - - /** - * getSamplingPeriod gets the number of seconds between statistics - * sampling for this Pool. - * - * @return int number of seconds between samplings - */ - int getSamplingPeriod(); - - /** - * getTimeout retrieves the timeout assigned to this Pool. - * @return The timeout currently assigned to this Pool. - */ - long getTimeout(); - - /** - * getSize retrieves the current size of this Pool. - * @return The current size of this Pool. - */ - int getSize(); - - /** - * @return init The pool init size. - */ - int getInitSize(); - - /** - * releaseResource releases a Object in order to allow the - * Pool to recycle this Object. - * @param resource The Object to be released. - * @param destroy boolean to remove the object from the pool and - * destroy it - * @throws Exception if an error occurs - */ - void releaseResource(Object resource, boolean destroy) throws Exception; - - /** - * sampling updates the interval pool information - * - * @throws Exception if an error occurs - */ - void sampling() throws Exception; - - /** - * setInitSize creates initsize resoures to this Pool. - * - * @param initsize The init size to be created. - * @throws Exception if an error occurs - */ - void setInitSize(int initsize) throws Exception; - - /** - * setJdbcConnLevel sets the JDBC connection level for this pool - * - * @param jdbcConnLevel int JDBC connection level - */ - public void setJdbcConnLevel(int jdbcConnLevel); - - /** - * setJdbcTestStatement sets the JDBC test statement for this pool - * - * @param jdbcTestStatement String JDBC test statement - */ - public void setJdbcTestStatement(String jdbcTestStatement); - - /** - * setMatchFactory assigns a PoolMatchFactory to this Pool. - * - * @param pmf The PoolMatchFactory to be assigned. - */ - void setMatchFactory(PoolMatchFactory pmf); - - /** - * setMaxAge sets the max age for a pool entry - * - * @param maxAge int max number of minutes to keep a connection - * in the pool. - */ - void setMaxAge(int maxAge); - - /** - * setMaxOpentime sets the max age for an entry to be opened - * - * @param maxOpentime int max number of minutes to keep a connection - * opened. - */ - void setMaxOpentime(int maxOpentime); - - /** - * setMaxSize assigns a maximum size to this Pool. - * - * @param maxsize int maximum size to be assigned. - * @throws Exception if an error occurs - */ - void setMaxSize(int maxsize) throws Exception; - - /** - * setMaxWaiters sets the maximum number of waiters for a connection - * in this Pool. - * - * @param maxWaiters int maximum number of waiters - */ - void setMaxWaiters(int maxWaiters); - - /** - * setMaxWaitTime sets the maximum number of seconds to wait for a - * connection in this Pool. - * - * @param maxWaitTime int maximum number of seconds to wait - */ - void setMaxWaitTime(int maxWaitTime); - - /** - * setMinSize assigns a minimum size to this Pool. - * - * @param minsize int minimum size to be assigned. - * @throws Exception if an error occurs - */ - void setMinSize(int minsize) throws Exception; - - /** - * setSamplingPeriod sets the number of seconds between statistics - * sampling for this Pool. - * - * @param samplingPeriod int number of seconds between samplings - */ - void setSamplingPeriod(int samplingPeriod); - - /** - * setTimeout assigns a timeout to this Pool. - * - * @param crto long timeout to be assigned. - */ - void setTimeout(long crto); - - /** - * startMonitor starts the pool monitor for this Pool. - * - */ - void startMonitor(); - - /** - * validateMCs validates ManagedConnections in Pool every 10 minutes - * - * @throws Exception if an error occurs - */ - void validateMCs() throws Exception; - - /* Statistics area */ - /** - * @return int number of busy connections - */ - public int getCurrentBusy(); - - /** - * @return int number of opened connections - */ - public int getCurrentOpened(); - - /** - * @return maximum nb of busy connections in last sampling period - */ - int getBusyMaxRecent(); - - /** - * @return minimum nb of busy connections in last sampling period - */ - int getBusyMinRecent(); - - /** - * @return current number of connection waiters - */ - int getCurrentWaiters(); - - /** - * @return int number of physical jdbc connection opened - */ - int getOpenedCount(); - - /** - * @return int number of connection failures on open - */ - int getConnectionFailures(); - - /** - * @return int number of connection leaks - */ - int getConnectionLeaks(); - - /** - * @return int number of connection served - */ - int getServedOpen(); - - /** - * @return int number of open calls that were rejected due to waiter overflow - */ - int getRejectedFull(); - - /** - * @return int number of open calls that were rejected by timeout - */ - int getRejectedTimeout(); - - /** - * @return int number of open calls that were rejected - */ - int getRejectedOther(); - - /** - * @return int number of open calls that were rejected - */ - int getRejectedOpen(); - - /** - * @return maximum nb of waiters since the datasource creation - */ - int getWaitersHigh(); - - /** - * @return maximum nb of waiters in last sampling period - */ - int getWaitersHighRecent(); - - /** - * @return total nb of waiters since the datasource creation - */ - int getWaiterCount(); - - /** - * @return total waiting time since the datasource creation - */ - long getWaitingTime(); - - /** - * @return max waiting time since the datasource creation - */ - long getWaitingHigh(); - - /** - * @return max waiting time in last sampling period - */ - long getWaitingHighRecent(); - - /** - * force the close of the Connection identified by ots Id - * @param connectionId int that represent the Connection - */ - public void forceCloseConnection(final int connectionId); - - /** - * return a list of idents that represent the connections - * opened for a given nb of seconds - * @param usedTimeMs nb of milliseconds the Connection has been opened - * @return array of idents representing the Connections - */ - public int[] getOpenedConnections(final long usedTimeMs); - - /** - * Return the ManagedConnection identified by this Id - * @param connectionId Ident that represent the connection - * @return the Managed Connection - */ - public ManagedConnection getConnectionById(int connectionId); - - /** - * Return a Map with details about a Connection - * @param mc the connection - * @param tx Transaction associated to this Connection, or null. - * @return map given the details about this connection. - */ - public Map getConnectionDetails(ManagedConnection mc, Transaction tx); - - /** - * Set the pool observable - * @param obs = true if keep stack traces at open - */ - public void setObservable(boolean obs); -} - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolItemStats.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolItemStats.java deleted file mode 100644 index 7b01cb8a33..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolItemStats.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Release: 1.0 - * - * Author: Eric HARDESTY - * -------------------------------------------------------------------------- - * $Id:PoolItemStats.java - * -------------------------------------------------------------------------- - * - */ -package org.ow2.jonas.resource.internal.pool; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/**

    This class holds information about each pool entry. - * - * @author Eric Hardesty -**/ -public class PoolItemStats { - - /** - * Each Item is given an Ident used for Admin - */ - private static int objcount = 1; - private int ident; - - /** - * Max age timeout of the pool item - */ - private long maxAgeTimeout = 0L; - /** - * Max open timeout of the pool item - */ - private long maxOpenTimeout = 0L; - /** - * Start time of the pool item - */ - private long startTime = 0L; - - /** - * Creation time - */ - private long creationTime; - - /** - * Total connection time of the pool item - */ - private long totalConnectionTime = 0L; - - /** - * number of uses - */ - private int uses = 0; - - /** - * List of Thread infos of clients that opened this connection. - */ - private List> openerThreadInfos = new ArrayList>(); - - /** - * List of Thread infos of clients that released this connection. - */ - private List> closerThreadInfos = new ArrayList>(); - - /** - * Default Constructor - */ - public PoolItemStats() { - creationTime = System.currentTimeMillis(); - ident = objcount++; - } - - /** - * Get an Ident to be used for Administration - * @return Ident - */ - public int getIdent() { - return ident; - } - - /** - * Get the max age timeout - * @return long max age timeout - */ - public long getMaxAgeTimeout() { - return maxAgeTimeout; - } - - /** - * Set the max age timeout - * @param pTime long max age timeout - */ - public void setMaxAgeTimeout(final long pTime) { - maxAgeTimeout = pTime; - } - - /** - * Get the max open timeout - * @return long max open timeout - */ - public long getMaxOpenTimeout() { - return maxOpenTimeout; - } - - /** - * Set the max open timeout - * @param pTime long max open timeout - */ - public void setMaxOpenTimeout(final long pTime) { - maxOpenTimeout = pTime; - } - - /** - * Get the creation time - * @return creation time - */ - public long getCreationTime() { - return creationTime; - } - - /** - * Get the start time - * @return long start time - */ - public long getStartTime() { - return startTime; - } - - /** - * Set the start time - * @param pTime long start time - */ - public void setStartTime(final long pTime) { - startTime = pTime; - } - - /** - * Get the total connection time - * @return long total connection time - */ - public long getTotalConnectionTime() { - return totalConnectionTime; - } - - /** - * Set the total connection time - * @param pTime long total connection time - */ - public void setTotalConnectionTime(final long pTime) { - totalConnectionTime += pTime; - } - - /** - * Get the number of uses - * @return int number of uses - */ - public int getUses() { - return uses; - } - - /** - * Increment the number of uses - */ - public void incrementUses() { - uses++; - } - - /** - * @return the list of stack traces of clients that have opened this connection. - */ - public List> getOpenerThreadInfos() { - return openerThreadInfos; - } - - /** - * @return the list of stack traces of clients that have closed this connection. - */ - public List> getCloserThreadInfos() { - return closerThreadInfos; - } - - /** - * Keep thread stack trace of opener - */ - public void addOpenerThreadInfos() { - openerThreadInfos.add(getThreadInfos()); - } - - /** - * Keep thread stack trace of closer - */ - public void addCloserThreadInfos() { - closerThreadInfos.add(getThreadInfos()); - } - - /** - * Compute Thread related informations. - * @return a list containing: thread name, time of the action - * and a stack trace (as a string). - */ - private Map getThreadInfos() { - Map infos = new HashMap(); - // Name - infos.put("thread.name", Thread.currentThread().getName()); - // Now - infos.put("thread.time", new Long(System.currentTimeMillis())); - // Stack trace (JDK 1.4 compatible) - StringWriter str = new StringWriter(); - PrintWriter writer = new PrintWriter(str); - new Throwable().printStackTrace(writer); - infos.put("thread.stack", str.getBuffer().toString()); - - return infos; - } - - /** - * String representing this object - * @return String representing the object - */ - @Override - public String toString() { - String out = "MaxAgeTimeout = " + maxAgeTimeout - + "\nMaxOpenTimeout = " + maxOpenTimeout - + "\nStartTime = " + startTime - + "\nTotalConnectionTime = " + totalConnectionTime - + "\nUses = " + uses; - return out; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolMatchFactory.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolMatchFactory.java deleted file mode 100644 index 37ee7bf079..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolMatchFactory.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * ObjectWeb Connector: an implementation of JCA Sun specification along - * with some extensions of this specification. - * Copyright (C) 2001-2002 France Telecom R&D - INRIA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Based on PoolMatchFactory in ObjectWeb common - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - * - */ - -/** - * Package definition. - * - * Author: E. Hardesty - */ -package org.ow2.jonas.resource.internal.pool; - -import java.util.Set; -import javax.resource.spi.ValidatingManagedConnectionFactory; - -/** - * The interface PoolMatchFactory defines the object used by a Pool to - * test if a given resource of a Pool matches with the hints passed with the - * Pool getResource method. It also allows such a Pool to allocate a - * Object as needed, conforming to the passed hints. - */ -public interface PoolMatchFactory { - /** - * createResource creates a new Object. - * @param hints The "properties" that the created Object should - * conform to. - * @return The created Object. - * @throws Exception if an error occurs - */ - Object createResource(Object hints) throws Exception; - - /** - * matchResource tests if a given resource of a Pool matches with - * the hints passed with the Pool getResource method. - * @param pr The Object to test its matching with some - * "properties" specified by hints. - * @param hints The "properties" that the Object specified by pr - * should match. - * @return true if the pr Object matches the hints - * "properties". - */ - boolean matchResource(Object pr, Object hints); - - /** - * matchResource tests if a given resource of a Pool matches with - * the hints passed with the Pool getResource method. - * @param res A set of Objects to test if matching with some - * "properties" specified by hints. - * @param hints The "properties" that the Object specified by pr - * should match. - * @return Object that matches the hints "properties". - * or null if no match. - * @exception Exception Description of Exception - */ - Object matchResource(Set res, Object hints) throws Exception; - /** - * releaseResource make sure that any cleanup needed for this entry is done - * @param pr The Object to release - * @exception Exception Description of Exception - */ - void releaseResource(Object pr) throws Exception; - - /** - * @return the ValidatingManagedConnectionFactory if the RA implements it - */ - public ValidatingManagedConnectionFactory getValidatingMCFactory(); -} - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolProvider.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolProvider.java deleted file mode 100644 index 3a36319594..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * ObjectWeb Connector: an implementation of JCA Sun specification along - * with some extensions of this specification. - * Copyright (C) 2001-2002 France Telecom R&D - INRIA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Release: 0.1 - * - * Contact: jorm@objectweb.org - * - * Author: S. Chassande-Barrioz, P. Dechamboux - * - */ -package org.ow2.jonas.resource.internal.pool; - -/** - * The interface PoolProvider defines the minimal behaviour of a - * Pool Provider. - */ -public interface PoolProvider { - - /** - * Return the Pool - * @return Pool associated with this provider - */ - Pool getPool(); -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolResource.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolResource.java deleted file mode 100644 index 32f2114892..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/PoolResource.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * ObjectWeb Connector: an implementation of JCA Sun specification along - * with some extensions of this specification. - * Copyright (C) 2001-2002 France Telecom R&D - INRIA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Release: 0.1 - * - * Contact: jorm@objectweb.org - * - * Author: S. Chassande-Barrioz, P. Dechamboux - * - */ - -/** - * Package definition. - */ -package org.ow2.jonas.resource.internal.pool; - -/** - * Import clauses: one for each external Java definition used. Do not use - * clauses in the form "import package.*". - */ - - -/** - * The interface PoolResource defines the minimal behaviour of a - * resource managed by a Pool. - */ -public interface PoolResource { - /** - * destroy is called when this resource is removed from a Pool. - * - * @throws Exception if an error occurs - */ - void destroy() throws Exception; -} - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPool.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPool.java deleted file mode 100644 index 0f12aaf339..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPool.java +++ /dev/null @@ -1,1382 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * ObjectWeb Connector: an implementation of JCA Sun specification along - * with some extensions of this specification. - * Copyright (C) 2001-2002 France Telecom R&D - INRIA - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Based on LArrayPool in ObjectWeb common - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.pool.lib; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ValidatingManagedConnectionFactory; -import javax.resource.ResourceException; -import javax.transaction.Transaction; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.resource.internal.cm.ConnectionManagerImpl; -import org.ow2.jonas.resource.internal.pool.Pool; -import org.ow2.jonas.resource.internal.pool.PoolItemStats; -import org.ow2.jonas.resource.internal.pool.PoolMatchFactory; - -/** - * The class HArrayPool implements a Pool as a HashSet of ManagedConnections, - * managing free/active resources. - * - * Updated to use an LRU list of free resources - * - * Author: Eric HARDESTY - */ -public class HArrayPool implements Pool { - - /** - * The Logger instance where messages are written. - */ - private Logger logger = null; - private Logger conLogger = null; - - /** - * timeout value. not used today. - */ - private long timeout = 0; - /** - * Pool match factory for this pool - */ - private PoolMatchFactory matchFactory = null; - /** - * Free list of ManagedConnections - */ - private LinkedHashSet freeList = null; - /** - * Active list of ManagedConnections - */ - private HashSet activeList = null; - /** - * PoolItem information list - */ - private Hashtable infoList = null; - - /** - * No Pooling is desired. Objects are just wrappers until any - * transactional states have been updated as needed - */ - private static final int NO_POOLING = -2; - - /** - * High Value for no limit for the connection pool - */ - private static final int NO_LIMIT = -1; - - /** - * Nb of milliseconds in a day - */ - private static final long ONE_DAY = 1440L * 60L * 1000L; - - /** - * max number of remove at once in the freelist - * We avoid removing too many items at once for perf reasons. - */ - private static final int MAX_REMOVE_FREELIST = 10; - - /** - * count min busy connection during current period. - */ - private int busyMin = 0; - - /** - * count max busy connection during current period. - */ - private int busyMax = 0; - - /** - * initial size of the pool - */ - private int initSize = -1; - - /** - * jdbcConnLevel of the pool - */ - private int jdbcConnLevel = 0; - - /** - * initial jdbcTestStatement - */ - private String jdbcTestStatement = ""; - - /** - * max age a connection will be available for use - */ - private int maxAge = 0; - - /** - * max open time for a connection, in minutes - */ - private int maxOpentime = 0; - - /** - * max size of the pool. Default = no limit. - */ - private int maxSize = NO_LIMIT; - - /** - * max nb of waiters allowed to wait for a Connection - */ - private int maxWaiters = 1000; - - /** - * max nb of milliseconds to wait for a connection when pool is full - */ - private long maxWaitTimeout = 10000; - - /** - * minimum size of the pool - */ - private int minSize = 0; - - /** - * pool monitor - */ - private HArrayPoolMonitor poolMonitor = null; - - /** - * sampling period in sec. - */ - private int samplingPeriod = 60; // defaultSamplingPeriod; - - /** - * count max waiters during current period. - */ - private int waiterCount = 0; - - /** - * count max waiting time during current period. - */ - private long waitingTime = 0; - - /** - * The jndiname - */ - private String jndiName = null; - - /** - * Pool closed indicator - */ - private boolean poolClosed = false; - - /** - * Pool may be observable (default = not observable) - */ - private boolean observable = false; - - /** - * HArrayPool constructor - * @param logger Logger for the pool to use - * @param jndiname jndi name of the RA - */ - public HArrayPool(final Logger logger, final String jndiname) { - this.logger = logger; - if (conLogger == null) { - conLogger = Log.getLogger(Log.JONAS_JCA_PREFIX+".connection"); - } - freeList = new LinkedHashSet(); - activeList = new HashSet(); - infoList = new Hashtable(); - jndiName = jndiname; - } - - // ---------------------------------------------------------------- - // Config properties (Getters & Setters) - // ---------------------------------------------------------------- - - /** - * Set the pool observable - * @param obs = true if keep stack traces at open - */ - public void setObservable(final boolean obs) { - observable = obs; - } - - /** - * @return int number of busy connections - */ - public synchronized int getCurrentBusy() { - return activeList.size(); - } - - /** - * @return int number of physically opened connections - */ - public int getCurrentOpened() { - return getSize(); - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getInitSize - */ - public int getInitSize() { - return initSize; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setInitSize - */ - public synchronized void setInitSize(final int v) throws Exception { - if (initSize >= 0) { - logger.log(BasicLevel.WARN, "Already set"); - return; - } - initSize = v; - if (initSize == 0 || maxSize == NO_POOLING) { - return; - } - // Check coherence of values - if (maxSize > 0 && initSize > maxSize) { - logger.log(BasicLevel.ERROR, "initSize="+initSize+" should be less than maxSize="+maxSize); - initSize = maxSize; - } - // Create initial set of resources - ManagedConnection res; - for (int i = 0; i < initSize; i++) { - res = createResource(null); - synchronized (this) { - freeList.add(res); - infoList.put(res, new PoolItemStats()); - } - setItemStats(res); - } - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getJdbcConnLevel - */ - public int getJdbcConnLevel() { - return jdbcConnLevel; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setJdbcConnLevel - */ - public void setJdbcConnLevel(final int jdbcConnLevel) { - this.jdbcConnLevel = jdbcConnLevel; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getJdbcTestStatement - */ - public String getJdbcTestStatement() { - return jdbcTestStatement; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setJdbcTestStatement - */ - public void setJdbcTestStatement(final String jdbcTestStatement) { - this.jdbcTestStatement = jdbcTestStatement; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getMaxAge - */ - public int getMaxAge() { - return maxAge; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setMaxAge - */ - public void setMaxAge(final int maxAge) { - this.maxAge = maxAge; - } - - /** - * @return max age for connections (in mns) - */ - public int getMaxOpentime() { - return maxOpentime; - } - - /** - * @param mx max time of open connection in minutes - */ - public void setMaxOpentime(final int mx) { - maxOpentime = mx; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getMaxSize - */ - public int getMaxSize() { - return maxSize; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setMaxSize - */ - public void setMaxSize(final int val) throws Exception { - if (val == maxSize) { - return; - } - if (val < minSize) { - logger.log(BasicLevel.WARN, "Bad arg maxsize:" + val); - return; - } - // Make adjustement only if too many Connections - boolean shrink = (val < getSize()); - maxSize = val; - if (shrink) { - shrinkPool(); - } - } - - /** - * @return max nb of waiters - */ - public int getMaxWaiters() { - return maxWaiters; - } - - /** - * @param nb max nb of waiters - */ - public void setMaxWaiters(final int nb) { - maxWaiters = nb; - } - - /** - * @return waiter timeout in seconds - */ - public int getMaxWaitTime() { - return (int) (maxWaitTimeout / 1000L); - } - - /** - * @param sec max time to wait for a connection, in seconds - */ - public void setMaxWaitTime(final int sec) { - maxWaitTimeout = sec * 1000L; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getMinSize - */ - public int getMinSize() { - return minSize; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setMinSize - */ - public void setMinSize(final int val) throws Exception { - if (val == minSize) { - return; - } - if ((val < 0) || ((val > maxSize) && (maxSize > 0))) { - logger.log(BasicLevel.WARN, "Bad arg minsize:" + val); - return; - } - // make adjustment only if not enough connections in freeList - boolean feed = (val > freeList.size()); - minSize = val; - if (feed) { - feedFreeList(); - } - } - - /** - * @return sampling period in sec. - */ - public int getSamplingPeriod() { - return samplingPeriod; - } - - /** - * @param sec sampling period in sec. - */ - public void setSamplingPeriod(final int sec) { - if (sec > 0) { - samplingPeriod = sec; - poolMonitor.setSamplingPeriod(sec); - } - } - - /** - * Get the size of the pool - * @return int size of the pool - */ - public synchronized int getSize() { - return (activeList.size() + freeList.size()); - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getTimeout - */ - public long getTimeout() { - return timeout; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setTimeout - * not used - */ - public void setTimeout(final long crto) { - } - - - // ---------------------------------------------------------------- - // Monitoring Attributes - // Each attribute should have a get accessor. - // ---------------------------------------------------------------- - - /** - * maximum nb of busy connections in last sampling period - */ - private int busyMaxRecent = 0; - - /** - * @return maximum nb of busy connections in last sampling period - */ - public int getBusyMaxRecent() { - return busyMaxRecent; - } - - /** - * minimum nb of busy connections in last sampling period - */ - private int busyMinRecent = 0; - - /** - * @return minimum nb of busy connections in last sampling period - */ - public int getBusyMinRecent() { - return busyMinRecent; - } - - /** - * nb of threads waiting for a Connection - */ - private int currentWaiters = 0; - - /** - * @return current number of connection waiters - */ - public int getCurrentWaiters() { - return currentWaiters; - } - - /** - * total number of opened physical connections since the datasource creation. - */ - private int openedCount = 0; - - /** - * @return int number of physical jdbc connection opened - */ - public int getOpenedCount() { - return openedCount; - } - - /** - * total nb of physical connection failures - */ - private int connectionFailures = 0; - - /** - * @return int number of connection failures on open - */ - public int getConnectionFailures() { - return connectionFailures; - } - - /** - * total nb of connection leaks. - * A connection leak occurs when the caller never issues a close method - * on the connection. - */ - private int connectionLeaks = 0; - - /** - * @return int number of connection leaks - */ - public int getConnectionLeaks() { - return connectionLeaks; - } - - /** - * total number of opened connections since the datasource creation. - */ - private int servedOpen = 0; - - /** - * @return int number of connection served - */ - public int getServedOpen() { - return servedOpen; - } - - /** - * total nb of open connection failures because waiter overflow - */ - private int rejectedFull = 0; - - /** - * @return int number of open calls that were rejected due to waiter overflow - */ - public int getRejectedFull() { - return rejectedFull; - } - - /** - * total nb of open connection failures because timeout - */ - private int rejectedTimeout = 0; - - /** - * @return int number of open calls that were rejected by timeout - */ - public int getRejectedTimeout() { - return rejectedTimeout; - } - - /** - * total nb of open connection failures for any other reason. - */ - private int rejectedOther = 0; - - /** - * @return int number of open calls that were rejected - */ - public int getRejectedOther() { - return rejectedOther; - } - - /** - * @return int number of open calls that were rejected - */ - public int getRejectedOpen() { - return rejectedFull + rejectedTimeout + rejectedOther; - } - - /** - * maximum nb of waiters since datasource creation - */ - private int waitersHigh = 0; - - /** - * @return maximum nb of waiters since the datasource creation - */ - public int getWaitersHigh() { - return waitersHigh; - } - - /** - * maximum nb of waiters in last sampling period - */ - private int waitersHighRecent = 0; - - /** - * @return maximum nb of waiters in last sampling period - */ - public int getWaitersHighRecent() { - return waitersHighRecent; - } - - /** - * total nb of waiters since datasource creation - */ - private int totalWaiterCount = 0; - - /** - * @return total nb of waiters since the datasource creation - */ - public int getWaiterCount() { - return totalWaiterCount; - } - - /** - * total waiting time in milliseconds - */ - private long totalWaitingTime = 0; - - /** - * @return total waiting time since the datasource creation - */ - public long getWaitingTime() { - return totalWaitingTime; - } - - /** - * max waiting time in milliseconds - */ - private long waitingHigh = 0; - - /** - * @return max waiting time since the datasource creation - */ - public long getWaitingHigh() { - return waitingHigh; - } - - /** - * max waiting time in milliseconds in last sampling period - */ - private long waitingHighRecent = 0; - - /** - * @return max waiting time in last sampling period - */ - public long getWaitingHighRecent() { - return waitingHighRecent; - } - - // IMPLEMENTATION OF METHODS FROM THE Pool INTERFACE - - /** - * Get a Resource from the freelist, matching hints. - * the matchFactory is used to check the hints. - * If freelist is empty, create a new resource - * @param hints - * @see org.ow2.jonas.resource.internal.pool.Pool#getResource - * @return the matching resource - * @throws Exception cannot get a Resource - */ - public Object getResource(final Object hints) - throws Exception { - if (matchFactory == null) { - throw new Exception("The matchFactory is mandatory!!"); - } - ManagedConnection res = null; - long timetowait = maxWaitTimeout; - long starttime = 0; - synchronized(this) { - while (res == null) { - if (!freeList.isEmpty()) { - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Free entries available"); - } - res = (ManagedConnection) matchFactory.matchResource(freeList, hints); - if (res != null) { - freeList.remove(res); - activeList.add(res); - break; - } - } catch (Exception ex) { - logger.log(BasicLevel.WARN, "Error from matchResource", ex); - } - } - - int curSize = activeList.size() + freeList.size(); - if (maxSize < 0 || curSize < maxSize) { - // we can create more resources - res = createResource(hints); - activeList.add(res); - } else if (freeList.size() > 0) { - // remove one from freelist and recreate a good one instead - res = (ManagedConnection) freeList.iterator().next(); - matchFactory.releaseResource(res); - res.destroy(); - freeList.remove(res); - infoList.remove(res); - // Create a new one and return it - res = createResource(hints); - activeList.add(res); - } else { - boolean stoplooping = true; - // Determine if waiting is an option - if (timetowait > 0) { - if (currentWaiters < maxWaiters) { - currentWaiters++; - // Store the maximum concurrent waiters - if (waiterCount < currentWaiters) { - waiterCount = currentWaiters; - } - if (starttime == 0) { - starttime = System.currentTimeMillis(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Wait for a free Connection"); - } - } - try { - wait(timetowait); - } catch (InterruptedException ign) { - logger.log(BasicLevel.WARN, "Interrupted"); - } finally { - currentWaiters--; - } - long stoptime = System.currentTimeMillis(); - long stillwaited = stoptime - starttime; - timetowait = maxWaitTimeout - stillwaited; - stoplooping = (timetowait <= 0); - if (stoplooping) { - // We have been woken up by the timeout. - totalWaiterCount++; - totalWaitingTime += stillwaited; - if (waitingTime < stillwaited) { - waitingTime = stillwaited; - } - } else { - if (!freeList.isEmpty()) { - // We have been notified by a connection release. - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Notified after " + stillwaited); - } - totalWaiterCount++; - totalWaitingTime += stillwaited; - if (waitingTime < stillwaited) { - waitingTime = stillwaited; - } - } - continue; - } - } - } - if (stoplooping && freeList.isEmpty()) { - if (starttime > 0) { - rejectedTimeout++; - logger.log(BasicLevel.WARN, "Cannot create a Connection - timeout"); - } else { - rejectedFull++; - logger.log(BasicLevel.WARN, "Cannot create a Connection"); - } - throw new Exception("No more connections"); - } - } - } - if (infoList.get(res) == null) { - infoList.put(res, new PoolItemStats()); - } - printLists(); - } - setItemStats(res); - recomputeBusy(); - if (conLogger.isLoggable(BasicLevel.DEBUG)) { - conLogger.log(BasicLevel.DEBUG, "Returned Resource: " + res); - } - return res; - } - - /** - * Create a resource - * @param hints Object to pass to the matchFactory - * @return ManagedConnection object returned from the matchFactory - * @throws Exception if an exception occured - */ - private ManagedConnection createResource(final Object hints) throws Exception { - if (matchFactory == null) { - throw new Exception("The matchFactory is mandatory!!"); - } - ManagedConnection res = null; - try { - res = (ManagedConnection) matchFactory.createResource(hints); - if (res == null) { - Exception exc = new Exception("A null ManagedConnection was returned."); - throw exc; - } - openedCount++; - } catch (Exception ex) { - connectionFailures++; - rejectedOther++; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Cannot create new Connection", ex); - } - throw ex; - } - if (conLogger.isLoggable(BasicLevel.DEBUG)) { - conLogger.log(BasicLevel.DEBUG, "Created Resource: " + res); - } - return res; - } - - /** - * Remove Resource from activeList - * @param resource ManagedConnection to be released - * @param destroy true if do not keep it in freeList - * @see org.ow2.jonas.resource.internal.pool.Pool#releaseResource - */ - public void releaseResource(final Object resource, final boolean destroy) - throws Exception { - - ManagedConnection res = (ManagedConnection) resource; - synchronized(this) { - if (!activeList.contains(res)) { - conLogger.log(BasicLevel.WARN, "Attempt to release inactive resource"); - return; - } - activeList.remove(res); - if (maxSize == NO_POOLING || destroy) { - try { - // Destroy underlying physical Connection - res.destroy(); - if (conLogger.isLoggable(BasicLevel.DEBUG)) { - conLogger.log(BasicLevel.DEBUG, "Destroyed Resource: " + res); - } - infoList.remove(res); - } catch (IllegalStateException e) { - // cannot destroy resource being used. - activeList.add(res); - conLogger.log(BasicLevel.WARN, "Attempt to release resource being used:" + e); - throw e; - } catch (ResourceException e) { - activeList.add(res); - conLogger.log(BasicLevel.WARN, "Could not release resource:" + e); - throw e; - } - } else { - // Keep the Connection in the freeList - freeList.add(res); - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (pis != null) { - // update total connection time - pis.setTotalConnectionTime(System.currentTimeMillis() - pis.getStartTime()); - } - } - // Notify threads waiting for a Connection. - if (currentWaiters > 0) { - notifyAll(); - } - } - shrinkPool(); - recomputeBusy(); - } - - /** - * Close all connections in the pool when server is shutting down. - */ - public synchronized void closeAllConnections() { - logger.log(BasicLevel.DEBUG, ""); - - // Stop the pool keeper, since all connections will be closed. - poolMonitor.stopit(); - - // Close physically all connections from freeList - Iterator it = freeList.iterator(); - while (it.hasNext()) { - ManagedConnection res = (ManagedConnection) it.next(); - try { - res.destroy(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Error while closing a Connection:", e); - } - } - freeList.clear(); - - // Close physically all connections from activeList - it = activeList.iterator(); - while (it.hasNext()) { - ManagedConnection res = (ManagedConnection) it.next(); - try { - res.destroy(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Error while closing a Connection:", e); - } - } - activeList.clear(); - - poolClosed = true; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#getMatchFactory - */ - public PoolMatchFactory getMatchFactory() { - return matchFactory; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#setMatchFactory - */ - public synchronized void setMatchFactory(final PoolMatchFactory pmf) { - matchFactory = pmf; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#startMonitor - */ - public void startMonitor() { - logger.log(BasicLevel.DEBUG, jndiName); - poolMonitor = new HArrayPoolMonitor(this, jndiName); - poolMonitor.start(); - } - - /** - * return a list of idents that represent the connections - * opened for a given nb of seconds - * @param usedTimeMs nb of milliseconds the Connection has been opened - * @return array of idents representing the Connections - */ - public synchronized int[] getOpenedConnections(final long usedTimeMs) { - List connections = new ArrayList(); - for (Iterator it = activeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (pis != null) { - long duration = System.currentTimeMillis() - pis.getStartTime(); - if ((pis.getUses() > 0) && (duration >= usedTimeMs)) { - connections.add(new Integer(pis.getIdent())); - } - } - } - - // Create the array of connection Ids - int[] ids = new int[connections.size()]; - int idx = 0; - for (Iterator i = connections.iterator(); i.hasNext();) { - Integer id = (Integer) i.next(); - ids[idx++] = id.intValue(); - } - - return ids; - } - - /** - * force the close of the Connection identified by ots Id - * @param connectionId int that represent the Connection - */ - public synchronized void forceCloseConnection(final int connectionId) { - ManagedConnection res = null; - for (Iterator it = activeList.iterator(); it.hasNext();) { - ManagedConnection res1 = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(res1); - if (pis != null && pis.getIdent() == connectionId) { - res = res1; - break; - } - } - if (res != null) { - try { - releaseResource(res, true); - logger.log(BasicLevel.WARN, "Force close of active connection"); - logger.log(BasicLevel.WARN, "MC = " + res); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not close of active connection: " + e); - logger.log(BasicLevel.WARN, "MC = " + res); - } - } else { - logger.log(BasicLevel.WARN, "Could not find this Connection " + connectionId); - } - } - - public synchronized ManagedConnection getConnectionById(final int connectionId) { - for (Iterator it = activeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (pis != null && pis.getIdent() == connectionId) { - return res; - } - } - return null; - } - - public Map getConnectionDetails(final ManagedConnection res, final Transaction tx) { - PoolItemStats pis = (PoolItemStats) infoList.get(res); - Map details = new HashMap(); - long curTime = System.currentTimeMillis(); - - // 0: connection-id : Integer - details.put("id", new Integer(pis.getIdent())); - - // 1: open-count : Integer - details.put("open-count", new Integer(pis.getUses())); - - // 2: status : Boolean - boolean inactive = false; - if (pis.getMaxOpenTimeout() > 0 && curTime > pis.getMaxOpenTimeout()) { - inactive = true; - } - details.put("inactive", Boolean.valueOf(inactive)); - - // 3: duration (ms) : Long - long duration = curTime - pis.getStartTime(); - details.put("duration", new Long(duration)); - - // 4: transaction-id (if any) : String - String xid = "null"; - if (tx != null) { - xid = tx.toString(); - } - details.put("transaction-id", xid); - - // 5: connection-age (ms) - long age = curTime - pis.getCreationTime(); - details.put("age", new Long(age)); - - // 6: Openers Thread infos : List> - details.put("openers", pis.getOpenerThreadInfos()); - - // 7: Closers Thread infos : List> - details.put("closers", pis.getCloserThreadInfos()); - - return details; - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#validateMCs - */ - public void validateMCs() throws Exception { - if (poolClosed) { - return; - } - if (matchFactory == null) { - throw new Exception("The matchFactory is mandatory!!"); - } - ValidatingManagedConnectionFactory vmcf = matchFactory.getValidatingMCFactory(); - if (vmcf == null) { - return; - } - conLogger.log(BasicLevel.DEBUG, ""); - - // Get MC out of the freeList - int count = 0; - HashSet checkList = new HashSet(); - synchronized(this) { - for (Iterator it = freeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - it.remove(); - checkList.add(res); - count++; - if (count >= MAX_REMOVE_FREELIST) { - break; - } - } - } - // Check these Managed Connections (outside the lock) - Set invMcs = vmcf.getInvalidConnections(checkList); - for (Iterator it = invMcs.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - // remove from the list, and forget the connection - checkList.remove(res); - synchronized(this) { - infoList.remove(res); - } - res.destroy(); // physical close - matchFactory.releaseResource(res); - } - // Put back good Connections in freeList - synchronized(this) { - for (Iterator it = checkList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - freeList.add(res); - } - } - - feedFreeList(); - } - - /** - * Remove max aged elements in freelist - * - Not more than MAX_REMOVE_FREELIST - * @return true if something has been done - */ - private boolean pruneMaxAged() throws Exception { - if (poolClosed) { - return false; - } - if (matchFactory == null) { - throw new Exception("The matchFactory is mandatory!!"); - } - boolean ret = false; - long curTime = System.currentTimeMillis(); - // count is used to remove not more than MAX_REMOVE_FREELIST - int count = 0; - LinkedList removeList = new LinkedList(); - synchronized(this) { - for (Iterator it = freeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (maxAge > 0 && pis != null && pis.getMaxAgeTimeout() > 0 - && curTime > pis.getMaxAgeTimeout()) { - if (conLogger.isLoggable(BasicLevel.DEBUG)) { - conLogger.log(BasicLevel.DEBUG, "remove a timed out connection "+res); - } - it.remove(); - infoList.remove(res); - removeList.add(res); - count++; - if (count >= MAX_REMOVE_FREELIST) { - break; - } - } - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator it = removeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - try { - ret = true; - matchFactory.releaseResource(res); - res.destroy(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - return ret; - } - - /** - * Close (physically) connections lost (opened for too long time) - * @return true if something has been done - */ - private boolean pruneLostConnections() throws Exception { - if (poolClosed) { - return false; - } - if (matchFactory == null) { - throw new Exception("The matchFactory is mandatory!!"); - } - - boolean ret = false; - long curTime = System.currentTimeMillis(); - LinkedList removeList = new LinkedList(); - synchronized(this) { - for (Iterator it = activeList.iterator(); it.hasNext();) { - ManagedConnection res = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (maxOpentime > 0 && pis != null && pis.getMaxOpenTimeout() > 0 - && curTime > pis.getMaxOpenTimeout()) { - removeList.add(res); - } - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator it = removeList.iterator(); it.hasNext();) { - ManagedConnection item = (ManagedConnection) it.next(); - try { - releaseResource(item, true); - matchFactory.releaseResource(item); - logger.log(BasicLevel.WARN, "close a timed out active connection"); - logger.log(BasicLevel.WARN, "MC = " + item); - connectionLeaks++; - ret = true; - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Cannot destroy resource being used:" +e); - logger.log(BasicLevel.WARN, "MC = " + item); - } - } - return ret; - } - - /** - * Shrink the pool in case of max pool size - * This occurs when max pool size has been reduced by jonas admin. - * @return true if something has been done - */ - private boolean shrinkPool() throws Exception { - int curSize = getSize(); - boolean ret = false; - if ((maxSize > 0 && maxSize < curSize) || (maxSize == NO_POOLING)) { - // Removes as many free entries as possible - int nbRemove = curSize; - if (maxSize > 0) { - nbRemove -= maxSize; - } - if (freeList != null) { - LinkedList removeList = new LinkedList(); - synchronized(this) { - while (!freeList.isEmpty() && nbRemove > 0) { - ManagedConnection res = (ManagedConnection) freeList.iterator().next(); - freeList.remove(res); - removeList.add(res); - nbRemove--; - curSize--; - } - } - // Physically close these connections, outside the lock, - // because in some cases, closing may be very long or even block. - for (Iterator i = removeList.iterator(); i.hasNext();) { - ManagedConnection res = (ManagedConnection) i.next(); - i.remove(); - matchFactory.releaseResource(res); - res.destroy(); - infoList.remove(res); - ret = true; - } - } - } - return ret; - } - - /** - * Recreate more Connections while minSize is not reached - * @return true if something has been done - */ - private boolean feedFreeList() throws Exception { - boolean ret = false; - if (maxSize != NO_POOLING) { - synchronized(this) { - while (minSize > getSize()) { - ManagedConnection res = createResource(null); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "recreate connection "+res); - } - freeList.add(res); - infoList.put(res, new PoolItemStats()); - setItemStats(res); - ret = true; - } - } - } - return ret; - } - - /** - * Adjust the pool size, according to poolMax and minSize values. - * Also remove old connections in the freeList. - * do not synchronize this method: the lock should not be kept too long - * especially during the connection close that could block. - * @throws Exception if an exception occurs - */ - public void adjust() throws Exception { - if (conLogger.isLoggable(BasicLevel.DEBUG)) { - conLogger.log(BasicLevel.DEBUG, jndiName + " active= "+activeList.size() +" min= "+minSize); - this.printLists(); - } - boolean pma = pruneMaxAged(); - boolean plc = pruneLostConnections(); - shrinkPool(); - if (pma || plc) { - feedFreeList(); - } - recomputeBusy(); - } - - /** - * compute current min/max busyConnections - */ - public synchronized void recomputeBusy() { - int busy = getCurrentBusy(); - if (busyMax < busy) { - busyMax = busy; - } - if (busyMin > busy) { - busyMin = busy; - } - } - - /** - * @see org.ow2.jonas.resource.internal.pool.Pool#sampling - */ - public synchronized void sampling() throws Exception { - - if (poolClosed) { - return; - } - - waitingHighRecent = waitingTime; - if (waitingHigh < waitingTime) { - waitingHigh = waitingTime; - } - waitingTime = 0; - - waitersHighRecent = waiterCount; - if (waitersHigh < waiterCount) { - waitersHigh = waiterCount; - } - waiterCount = 0; - - // Keep old values and init new ones with current busy - busyMaxRecent = busyMax; - busyMax = getCurrentBusy(); - busyMinRecent = busyMin; - busyMin = getCurrentBusy(); - } - - /** - * Set the item statistics - * @param res Object of the resource - */ - private void setItemStats(final Object res) { - PoolItemStats pis = (PoolItemStats) infoList.get(res); - if (pis != null) { - pis.incrementUses(); - long sTime = System.currentTimeMillis(); - pis.setStartTime(sTime); - if (maxAge > 0 && pis.getMaxAgeTimeout() == 0) { - pis.setMaxAgeTimeout(sTime + (maxAge * 60L * 1000)); - } - if (maxOpentime > 0) { - pis.setMaxOpenTimeout(sTime + (maxOpentime * 60L * 1000)); - } - if (observable) { - // Store the Stack trace - pis.addOpenerThreadInfos(); - } - } - servedOpen++; - } - - /** - * Print information about the pool - * - */ - void printLists() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - int count = 0; - logger.log(BasicLevel.DEBUG, "minSize=" + minSize + ", maxSize=" + maxSize - + ", freeSize=" + freeList.size()); - logger.log(BasicLevel.DEBUG, "activeList:"); - if (activeList == null) { - logger.log(BasicLevel.DEBUG, " null"); - } else { - Iterator it = activeList.iterator(); - while (it.hasNext() && ++count < 40) { - ManagedConnection mc = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(mc); - logger.log(BasicLevel.DEBUG, " " + mc); - logger.log(BasicLevel.DEBUG, " " + pis.toString()); - } - } - logger.log(BasicLevel.DEBUG, "freeList:"); - if (freeList == null) { - logger.log(BasicLevel.DEBUG, " null"); - } else { - count = 0; - Iterator it = freeList.iterator(); - while (it.hasNext() && ++count < 40) { - ManagedConnection mc = (ManagedConnection) it.next(); - PoolItemStats pis = (PoolItemStats) infoList.get(mc); - logger.log(BasicLevel.DEBUG, " " + mc); - logger.log(BasicLevel.DEBUG, " " + pis.toString()); - } - } - } - } - -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPoolMonitor.java b/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPoolMonitor.java deleted file mode 100644 index f9bd1fa541..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/java/org/ow2/jonas/resource/internal/pool/lib/HArrayPoolMonitor.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.resource.internal.pool.lib; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.resource.internal.pool.Pool; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Keeps pool as small as possible (after conn's has reached MaxAge) - * @author Eric Hardesty - * Contributor(s): - */ -public class HArrayPoolMonitor extends Thread { - - /** - * Pool that is being monitored - */ - private Pool pool; - /** - * Main logger - */ - private Logger logger = null; - - /** - * Default adjust period of 30 sec - */ - private long adjustPeriod = 30 * 1000L; // default = 30s in ms - /** - * Default sampling period of 60 sec - */ - private long samplingPeriod = 60 * 1000L; // default = 60s in ms - /** - * Default validation period of 10 min - */ - private long validationPeriod = 10 * 60 * 1000L; //default = 10 min in ms - - /** - * Adjust period - */ - private long adjustTime = 0; - /** - * Sampling time - */ - private long samplingTime = 0; - /** - * Validation time - */ - private long validationTime = 0; - - private boolean stopped = false; - /** - * Pool monitor constructor - * @param pool Pool to monitor - */ - public HArrayPoolMonitor(Pool pool, String jndiName) { - super("HArrayPoolMonitor-"+jndiName); - setDaemon(true); - this.pool = pool; - logger = Log.getLogger(Log.JONAS_JCA_PREFIX); - } - - /** - * Set the adjust period. - * Moreover, this can be reconfigured later. - * @param sec adjust period in sec. - */ - public void setAdjustPeriod(int sec) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " to " + sec); - } - adjustPeriod = sec * 1000L; - } - - /** - * Set the sampling period. - * Moreover, this can be reconfigured later. - * @param sec sampling period in sec. - */ - public void setSamplingPeriod(int sec) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " to " + sec); - } - samplingPeriod = sec * 1000L; - } - - /** - * Set the validation period. - * Moreover, this can be reconfigured later. - * @param sec validation period in sec. - */ - public void setValidationPeriod(int sec) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, " to " + sec); - } - validationPeriod = sec * 1000L; - } - - /** - * Stop this thread. - */ - public void stopit() { - stopped = true; - } - - /** - * Run the array pool monitor - */ - public void run() { - long timeout; - resetTimes(); - while (!stopped) { - timeout = adjustTime; - if (samplingTime < timeout) { - timeout = samplingTime; - } - if (validationTime < timeout) { - timeout = validationTime; - } - try { - sleep(timeout); - adjustTime -= timeout; - samplingTime -= timeout; - validationTime -= timeout; - if (adjustTime <= 0) { - pool.adjust(); - adjustTime = adjustPeriod; - } - if (samplingTime <= 0) { - pool.sampling(); - samplingTime = samplingPeriod; - } - if (validationTime <= 0) { - pool.validateMCs(); - validationTime = validationPeriod; - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Exception in HArrayPoolMonitor", e); - resetTimes(); - } - } - } - - private void resetTimes() { - adjustTime = adjustPeriod; - samplingTime = samplingPeriod; - validationTime = validationPeriod; - } -} diff --git a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig b/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig deleted file mode 100644 index ed2a72ea0a..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" - -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/jonas-generators-raconfig.jar$SPS$JONAS_ROOT/lib/client.jar - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.raconfig.RAConfig "$@" diff --git a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig.bat b/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig.bat deleted file mode 100755 index 5b39668146..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/bin/RAConfig.bat +++ /dev/null @@ -1,54 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Benoit Pelletier -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -Rem Check environment variables: -if ["%JONAS_ROOT%"]==[""] Goto SetRoot -call "%JONAS_ROOT%\bin\setenv.bat" - -Rem --------------------------------------------------------------------------- -Rem Set JAVA_OPTS -Rem --------------------------------------------------------------------------- -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.base="%JONAS_BASE%" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Set JONAS_CLASSPATH=%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_CLASSPATH% -Set JONAS_CLASSPATH=%JONAS_ROOT%\lib\jonas-generators-raconfig.jar;%JONAS_CLASSPATH% -Set JONAS_CLASSPATH=%JONAS_ROOT%\lib\client.jar;%JONAS_CLASSPATH% - -%JAVA% -cp "%JONAS_CLASSPATH%" %JAVA_OPTS% org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.raconfig.RAConfig %1 %2 %3 %4 %5 %6 %7 %8 %9 -Goto End - -:SetRoot -@echo "JONAS_ROOT must be set" -Goto End - -:End diff --git a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/deploy/jdbc-ds.xml b/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/deploy/jdbc-ds.xml deleted file mode 100644 index 28742252f2..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/jonas-resources/deploy/jdbc-ds.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - jdbc_1 - jdbc:h2:tcp://localhost:9001/db_jonas - org.h2.Driver - jonas - jonas - - rdb.hsql - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - select count(1) from information_schema.tables - 1440 - 60 - 10 - 10 - 100 - 100 - Map - 5 - 100 - 30 - - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/resources/META-INF/jonas-resource-core.bnd b/jonas/modules/services/jonas-resource/core/src/main/resources/META-INF/jonas-resource-core.bnd deleted file mode 100644 index 7ba81cb568..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/resources/META-INF/jonas-resource-core.bnd +++ /dev/null @@ -1,41 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export ObjectFactory package (for JNDI only) -# and internal (EJB Container still directly use Rar object). -Export-Package org.ow2.jonas.resource.internal.naming,\ - org.ow2.jonas.resource.internal,\ - org.ow2.jonas.resource.internal.cm,\ - org.ow2.jonas.resource.internal.cm.* - -Private-Package org.ow2.jonas.resource.internal.*;-split-package:=merge-first - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * - -# import all because jdbc drivers may not be included inside the jar, and -# we don't know their package name. -DynamicImport-Package * - -Require-JOnAS-Services wm diff --git a/jonas/modules/services/jonas-resource/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-resource/core/src/main/resources/metadata.xml deleted file mode 100644 index d98b337e82..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-resource/core/src/main/resources/org/ow2/jonas/resource/internal/mbeans-descriptors.xml b/jonas/modules/services/jonas-resource/core/src/main/resources/org/ow2/jonas/resource/internal/mbeans-descriptors.xml deleted file mode 100644 index e6b4a19d00..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/resources/org/ow2/jonas/resource/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,857 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-resource/core/src/main/templates/jonas-j2ca-resource.properties.template b/jonas/modules/services/jonas-resource/core/src/main/templates/jonas-j2ca-resource.properties.template deleted file mode 100644 index 2c237a5926..0000000000 --- a/jonas/modules/services/jonas-resource/core/src/main/templates/jonas-j2ca-resource.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS J2CA resource service configuration -# -jonas.services resource -# Set the name of the implementation class of the J2CA resource service -jonas.service.resource.class org.ow2.jonas.resource.internal.JOnASResourceService diff --git a/jonas/modules/services/jonas-resource/pom.xml b/jonas/modules/services/jonas-resource/pom.xml deleted file mode 100644 index 34b82337b0..0000000000 --- a/jonas/modules/services/jonas-resource/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-resource - pom - JOnAS :: Services :: JCA Resource - - core - ant - addon - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/ant/pom.xml b/jonas/modules/services/jonas-security/ant/pom.xml deleted file mode 100644 index cbed6878b6..0000000000 --- a/jonas/modules/services/jonas-security/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-security - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-security-ant - bundle - JOnAS :: Services :: Security :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/EmptyEntityResolver.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/EmptyEntityResolver.java deleted file mode 100644 index c9276fb0ba..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/EmptyEntityResolver.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.security; - -import java.io.IOException; -import java.io.StringReader; - -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - - -/** - * Dummy empty resolver (we don't need to validate the schema) - * @author Florent Benoit - */ -public class EmptyEntityResolver implements EntityResolver { - - - /** - * The Parser will call this method before opening any external entity - * except the top-level document entity. - * @param publicId The public identifier of the external entity being - * referenced, or null if none was supplied. - * @param systemId The system identifier of the external entity being - * referenced. - * @return An InputSource object describing the new input source, or null to - * request that the parser open a regular URI connection to the - * system identifier. - * @throws SAXException Any SAX exception, possibly wrapping another - * exception. - * @throws IOException A Java-specific IO exception, possibly the result of - * creating a new InputStream or Reader for the InputSource. - */ - public InputSource resolveEntity(final String publicId, final String systemId) throws IOException, SAXException { - // Return empty resolver - return new InputSource(new StringReader("")); - } - -} diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JResourceLoginModule.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JResourceLoginModule.java deleted file mode 100644 index 664562d1c8..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JResourceLoginModule.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.security; - -/** - * @author Julien Legrand - */ -public class JResourceLoginModule extends LoginModule { - - /** - * Default Resource name - */ - private static final String DEFAULT_RESOURCENAME = "memrlm_1"; - - /** - * Resource name - */ - private String resourceName = DEFAULT_RESOURCENAME; - - /** - * Server (JOnAS instance) name - */ - private String serverName = ""; - - /** - * Certificate callback needed - */ - private boolean certCallback = false; - - /** - * Case conversion needed - */ - private boolean useUpperCaseUsername = false; - - /** - * Constructor - */ - public JResourceLoginModule(){ - super(); - } - - /** - * @return Returns the resource name. - */ - public String getResourceName() { - return resourceName; - } - - /** - * @param resourceName the resource name to set. - */ - public void setResourceName(final String resourceName){ - this.resourceName = resourceName; - } - - /** - * @return Returns the server name. - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName the server name to set. - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * @return Returns true if a callback certificate is needed. False otherwise. - */ - public boolean isCertCallback() { - return certCallback; - } - - /** - * @param certCallback - */ - public void setCertCallback(final boolean certCallback) { - this.certCallback = certCallback; - } - - /** - * @return Returns true if the username needs to be converted in upper case. False otherwise. - */ - public boolean isUseUpperCaseUsername() { - return useUpperCaseUsername; - } - - /** - * @param useUpperCaseUsername - */ - public void setUseUpperCaseUsername(final boolean useUpperCaseUsername) { - this.useUpperCaseUsername = useUpperCaseUsername; - } -} diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/Jaas.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/Jaas.java deleted file mode 100644 index fc502f559c..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/Jaas.java +++ /dev/null @@ -1,506 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.security; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Allow to configure JAAS - * @author Julien Legrand - * @author Jeremy Cazaux (support to and element - */ -public class Jaas extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[JAAS] "; - - /** - * Token for the begin of the jaas.config configuration file. - */ - private static final String TOKEN_BEGIN_CONF_FILE = "jaasclient {"; - - /** - * Name of JAAS configuration file. - */ - public static final String JAAS_CONF_FILE = "jaas.config"; - - /** - * Class name of the JResourceLoginModule - */ - public static final String DEFAULT_LOGIN_MODULE_NAME = "org.ow2.jonas.security.auth.spi.JResourceLoginModule"; - - /** - * Token for the JMX authentification method - */ - public static final String JMX_AUTHENTIFICATION_METHOD_TOKEN = "jonas.service.jmx.authentication.method"; - - /** - * Value for the JMX authentification method - */ - public static final String JMX_AUTHENTIFICATION_METHOD_VALUE = "jmx.remote.x.login.config"; - - /** - * Token for the JMX authentification parameter - */ - public static final String JMX_AUTHENTIFICATION_PARAMETER_TOKEN = "jonas.service.jmx.authentication.parameter"; - - /** - * Value for the JMX authentification parameter - */ - public static final String JMX_AUTHENTIFICATION_PARAMETER_VALUE = "jaas-jmx"; - - /** - * Token for the JMX security activation - */ - public static final String JMX_IS_SECURED_TOKEN = "jonas.service.jmx.secured"; - - /** - * Value for the JMX security activation - */ - public static final String JMX_IS_SECURED_VALUE = "true"; - - /** - * JOnAS Admin username token - */ - public static final String JONAS_ADMIN_USERNAME_TOKEN = "jonas.adminClient.username"; - - /** - * JOnAS Admin password token - */ - public static final String JONAS_ADMIN_PASSWORD_TOKEN = "jonas.adminClient.password"; - - /** - * Name of the realm conf file - */ - public static final String JONAS_REALM_CONF_FILE = "jonas-realm.xml"; - - /** - * List of {@link User} to configure - */ - private List users; - - /** - * List of {@link User} to configure - */ - private List admins; - - /** - * List of users which are defined in the tempalte file - */ - private List templateUsers; - - /** - * List of roles which are defined in the template file - */ - private Map templateRoles; - - /** - * Whether JMX security should be enabled - */ - private boolean secureJmx = false; - - /** - * EOL - */ - public static String EOL = "\n"; - - /** - * Separator use in the realme file - */ - public static String REALME_SEPARATOR = " "; - - /** - * Realm's Users token - */ - public static String USERS_TOKEN = ""; - - /** - * Realm's role token - */ - public static String ROLES_TOKEN = ""; - - /** - * Constructor - */ - public Jaas(){ - super(); - this.users = new ArrayList(); - this.admins = new ArrayList(); - this.templateUsers = new ArrayList(); - this.templateRoles = new HashMap(); - } - - /** - * Configure a JAAS entry - * @param entry the entry to configure. - */ - public void addConfiguredJaasEntry(final JaasEntry entry){ - - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JAAS_CONF_FILE); - propertyReplace.setToken(TOKEN_BEGIN_CONF_FILE); - StringBuffer value = new StringBuffer(); - - value.append(entry.getName() + "{" + "\n"); - for(LoginModule lm : entry.getLoginModules()){ - - if(lm instanceof JResourceLoginModule){ - - JResourceLoginModule rlm = (JResourceLoginModule) lm; - - value.append(" " + DEFAULT_LOGIN_MODULE_NAME + " " + lm.getFlag() + "\n"); - value.append(" " + "resourceName=\"" + rlm.getResourceName() + "\"" + "\n"); - - if(rlm.getServerName() != null && !"".equals(rlm.getServerName())){ - value.append(" " + "serverName=\"" + rlm.getServerName() + "\"" + "\n"); - } - if(rlm.isUseUpperCaseUsername()){ - value.append(" " + "useUpperCaseUsername=\"" + rlm.isUseUpperCaseUsername() + "\"" + "\n"); - } - if(rlm.isCertCallback()){ - value.append(" " + "certCallback=\"" + rlm.isCertCallback() + "\"" + "\n"); - } - } - - value.append("\n"); - } - - value.append(" " + ";" + "\n"); - value.append("};" + "\n"); - value.append("\n"); - value.append(TOKEN_BEGIN_CONF_FILE); - - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Add the JAAS entry : " + entry.getName()); - addTask(propertyReplace); - } - - /** - * @param admin The admin to configure - */ - public void addConfiguredAdmin(final User admin) { - if (admin.getName() == null) { - throw new BuildException("Admin username is not set."); - } - if (admin.getPassword() == null) { - throw new BuildException("Admin password is not set"); - } - - this.admins.add(admin); - } - - /** - * @param user The user to configure - */ - public void addConfiguredUser(final User user) { - if (user.getName() == null) { - throw new BuildException("Username is not set."); - } - if (user.getPassword() == null) { - throw new BuildException("User's password is not set"); - } - - this.users.add(user); - } - - /** - * Enable or disable JMX security. - * - * @param enabled - * (true or false) - * the default value is currently false in jonas.properties - */ - public void setSecureJmx(final boolean enabled) { - this.secureJmx = enabled; - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - - final String confDirPath = getJOnASBase() + CONF_DIR; - - if (secureJmx) { - if (this.admins.isEmpty()) { - throw new BuildException("JMX security is enabled, but with no admin user defined. " + - "Please correct your configuration and run again."); - } - - //configure JMX security - super.createServiceNameReplace(JMX_IS_SECURED_VALUE, INFO, confDirPath, JMX_IS_SECURED_TOKEN); - - super.createServiceNameReplace(JMX_AUTHENTIFICATION_METHOD_VALUE, INFO, confDirPath, - JMX_AUTHENTIFICATION_METHOD_TOKEN); - - super.createServiceNameReplace(JMX_AUTHENTIFICATION_PARAMETER_VALUE, INFO, confDirPath, - JMX_AUTHENTIFICATION_PARAMETER_TOKEN); - } - - if (this.admins.size() > 0) { - //update jonasAdmin template - super.createServiceNameReplace(this.admins.get(0).getName(), INFO, confDirPath, JONAS_ADMIN_USERNAME_TOKEN); - super.createServiceNameReplace(this.admins.get(0).getPassword(), INFO, confDirPath, JONAS_ADMIN_PASSWORD_TOKEN); - } - - initUsers(new File(confDirPath, JONAS_REALM_CONF_FILE)); - - //update jonas-realm with the list of users - for (User user: this.users) { - String username = user.getName(); - String password = user.getPassword(); - String roles = user.getRoles(); - String description = user.getDescription(); - - User templateUser = isUserAlreadyDefined(user); - if (templateUser != null) { - - String templateUserName = templateUser.getName(); - String templateUserPassword = templateUser.getPassword(); - String templateUserRoles = templateUser.getRoles(); - String templateUserGroups = templateUser.getGroups(); - - //if the user's name is already set and if the password has changed, update of the password - if (!templateUserPassword.equals(user.getPassword())) { - - //if the user to update is an admin (already defined), throw an exception - if ((templateUserGroups != null && templateUserGroups.contains("jonas")) || - (templateUserRoles != null && templateUserRoles.contains("jonas-admin"))) { - throw new BuildException("Cannot update the password and/or role of the username '" + - templateUserName + "'. An admin is already defined with this name."); - } - - //update of the user - String userToken = ""; - String userValue = ""; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(userToken); - propertyReplace.setValue(userValue); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Setting password of '" + username + "' to '" + password + "'"); - propertyReplace.execute(); - } - } else { - //create a new user - String userValue = " " + EOL + REALME_SEPARATOR + USERS_TOKEN; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(USERS_TOKEN); - propertyReplace.setValue(userValue); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Creating a new user with name equals to '" + username + - "' ,password equals to '" + password + "' and role equals to '" + roles + "'"); - propertyReplace.execute(); - } - - //check if the role is already defined - if (!this.templateRoles.containsKey(roles)) { - //create a new role - StringBuilder roleValue = new StringBuilder(); - roleValue.append(" " + EOL + REALME_SEPARATOR + ROLES_TOKEN); - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(ROLES_TOKEN); - propertyReplace.setValue(roleValue.toString()); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Creating a new role with name equals to '" + roles + "' and " + - "description equals to '" + description + "'"); - propertyReplace.execute(); - } else { - //update the role if the description has been updated - String templateDescription = this.templateRoles.get(roles); - if (description != null && !templateDescription.equals(description)) { - String roleToken = ""; - StringBuilder roleValue = new StringBuilder(); - roleValue.append(""); - - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(roleToken); - propertyReplace.setValue(roleValue.toString()); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Setting the description of role " + roles + " to : " + description); - propertyReplace.execute(); - } - } - - } - - //update jonas-realm with the list of admins - for (User admin: this.admins) { - String username = admin.getName(); - String password = admin.getPassword(); - - User userAdmin = new User(); - userAdmin.setName(username); - userAdmin.setPassword(password); - User templateAdmin = isUserAlreadyDefined(userAdmin); - - if (templateAdmin != null) { - if (!templateAdmin.getPassword().equals(userAdmin.getPassword())) { - //if the user's name is already set and if the password has changed, update of the password - String userToken = null; - if (templateAdmin.getRoles() != null) { - userToken = ""; - } else if (templateAdmin.getGroups() != null) { - userToken = ""; - } else { - throw new BuildException(JONAS_REALM_CONF_FILE + " template configuration file is incorrect. " + - "No 'groups' or 'roles' attribute for the user " + templateAdmin.getName()); - } - - String userValue = ""; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(userToken); - propertyReplace.setValue(userValue); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Setting password of '" + username + "' to '" + password + "'"); - propertyReplace.execute(); - } - } else { - //create the admin - String userValue = " " - + EOL + REALME_SEPARATOR + USERS_TOKEN; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JONAS_REALM_CONF_FILE); - propertyReplace.setToken(USERS_TOKEN); - propertyReplace.setValue(userValue); - propertyReplace.setDestDir(this.destDir); - propertyReplace.setLogInfo(INFO + "Creating a new admin user with name equals to '" + username + - "' and password equals to '" + password + "'"); - propertyReplace.execute(); - } - } - - executeAllTask(); - } - - /** - * - * @param realmConfFile The realm configuration file - */ - private void initUsers(final File realmConfFile) { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db; - Document document = null; - - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new BuildException("Cannot instanciate a new DocumentBuilder", e); - } - - // Dummy entity resolvers - db.setEntityResolver(new EmptyEntityResolver()); - - try { - document = db.parse(realmConfFile); - } catch (SAXException e) { - throw new BuildException("Cannot parse the resource " + realmConfFile, e); - } catch (IOException e) { - throw new BuildException("Cannot parse the resource " + realmConfFile, e); - } - - //get the list of defaults (or template) users - NodeList nodeList = document.getElementsByTagName("user"); - for (int i = 0; i < nodeList.getLength(); i++) { - Element elt = (Element) nodeList.item(i); - User user = new User(); - String name = elt.getAttribute("name"); - if (name != null && !"".equals(name)) { - user.setName(name); - } - String password = elt.getAttribute("password"); - if (password != null && !"".equals(password)) { - user.setPassword(password); - } - String roles = elt.getAttribute("roles"); - if (roles != null && !"".equals(roles)) { - user.setRoles(roles); - } - String groups = elt.getAttribute("groups"); - if (groups != null && !"".equals(groups)) { - user.setGroups(groups); - } - this.templateUsers.add(user); - } - - //get the list of default (or template) roles - nodeList = document.getElementsByTagName("role"); - for (int i = 0; i < nodeList.getLength(); i++) { - Element elt = (Element) nodeList.item(i); - this.templateRoles.put(elt.getAttribute("name"), elt.getAttribute("description")); - } - } - - /** - * @param user A User - * @return the template user if the user is already defined. Otherwise, null. - */ - private User isUserAlreadyDefined(final User user) { - for(User templateUser: this.templateUsers) { - if (templateUser.getName().equals(user.getName())) { - return templateUser; - } - } - return null; - } - -} diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JaasEntry.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JaasEntry.java deleted file mode 100644 index f259142aef..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/JaasEntry.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.security; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.Tasks; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Julien Legrand - */ -public class JaasEntry extends Tasks { - - /** - * Name of the JAAS entry - */ - private String name; - - /** - * List of login modules for the JAAS entry - */ - private List loginModules; - - /** - * Constructor - */ - public JaasEntry(){ - super(); - loginModules = new ArrayList(); - } - - /** - * Configure the resource login module - * @param lm JResourceLoginModule - */ - public void addConfiguredJResourceLoginModule(final JResourceLoginModule lm){ - loginModules.add(lm); - } - - /** - * @return Returns the list of login modules. - */ - public List getLoginModules(){ - return loginModules; - } - - /** - * @return Returns the name of JAAS entry - */ - public String getName() { - return name; - } - - /** - * @param name the name of the JAAS entry to set. - */ - public void setName(final String name){ - this.name = name; - } -} - diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/LoginModule.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/LoginModule.java deleted file mode 100644 index ad8a8a17fc..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/LoginModule.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.security; - -/** - * @author Julien Legrand - */ -public abstract class LoginModule { - - /** - * Default behaviour flag - */ - protected static final String DEFAUT_FLAG = "required"; - - /** - * Flag for the behaviour of the login module. - */ - protected String flag = DEFAUT_FLAG; - - /** - * @return Returns the flag of the login module - */ - public String getFlag() { - return flag; - } - - /** - * @param flag the flag to set. - */ - public void setFlag(String flag) { - this.flag = flag; - } -} diff --git a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/User.java b/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/User.java deleted file mode 100644 index 379a031768..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/security/User.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.security; - -/** - * Represents an User - * @author Jeremy Cazaux - */ -public class User { - - /** - * User's name - */ - private String name; - - /** - * User's password - */ - private String password; - - /** - * User's roles - */ - private String roles; - - /** - * Role's description - */ - private String description; - - /** - * Group description - */ - private String groups; - - /** - * Default constructor - */ - public User() { - super(); - } - - /** - * @return the name of the user - */ - public String getName() { - return name; - } - - /** - * @return the password of the user - */ - public String getPassword() { - return password; - } - - /** - * @param name User's name to set - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @param password User's password to set - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * @return the user's roles - */ - public String getRoles() { - return roles; - } - - /** - * @param roles The user's roles to set - */ - public void setRoles(final String roles) { - this.roles = roles; - } - - /** - * @return the description of the role - */ - public String getDescription() { - return description; - } - - /** - * @param description The description of the role to set - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * @return the group of the user if exist - */ - public String getGroups() { - return groups; - } - - /** - * @param groups The group of the user to set - */ - public void setGroups(String groups) { - this.groups = groups; - } -} diff --git a/jonas/modules/services/jonas-security/ant/src/main/resources/antlib-security.xml b/jonas/modules/services/jonas-security/ant/src/main/resources/antlib-security.xml deleted file mode 100644 index 210f377ae6..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/resources/antlib-security.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/ant/src/main/resources/build-security.xml b/jonas/modules/services/jonas-security/ant/src/main/resources/build-security.xml deleted file mode 100644 index d3213d9cb7..0000000000 --- a/jonas/modules/services/jonas-security/ant/src/main/resources/build-security.xml +++ /dev/null @@ -1,17 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/pom.xml b/jonas/modules/services/jonas-security/core/pom.xml deleted file mode 100644 index 12b3d09049..0000000000 --- a/jonas/modules/services/jonas-security/core/pom.xml +++ /dev/null @@ -1,180 +0,0 @@ - - - - - jonas-security - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-security-core - bundle - JOnAS :: Services :: Security :: Core - - - - - org.ow2.util - util-maven-plugin-antrmic - - - rmic-jrmp-jresource-remote - - rmic - - - false - 1.2 - - org.ow2.jonas.security.internal.realm.factory.JResourceRemoteImpl - - - - - rmic-iiop-jresource-remote - - rmic - - - true - -always - - org.ow2.jonas.security.internal.realm.factory.JResourceRemoteImpl - - -poa - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - - - org.ow2.carol - carol-interceptors - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-security-jacc - ${project.version} - - - org.ow2.jonas - jonas-security-jacc-handlers - ${project.version} - - - org.ow2.jonas - jonas-security-propagation - ${project.version} - - - org.ow2.jonas - jonas-security-auth - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - commons-digester - commons-digester - - - commons-modeler - commons-modeler - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - provided - - - org.ow2.jonas - jonas-sec-interceptors-jrmp - ${project.version} - - - - diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/CertificateCallback.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/CertificateCallback.java deleted file mode 100644 index 61d5174c6d..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/CertificateCallback.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Alexandre Thaveau & Marc-Antoine Bourgeot - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.auth.callback; - -import java.io.Serializable; -import java.security.cert.Certificate; - -import javax.security.auth.callback.Callback; - -/** - * Defines a callback which is use to store a certificate. - * @author Alexandre Thaveau (initial developer) - * @author Marc-Antoine Bourgeot (initial developer) - */ -public class CertificateCallback implements Callback, Serializable { - - /** - * Certificate to use. - */ - private Certificate userCertificate = null; - - /** - * Gets the user certificate. - * @return the user certificate - */ - public Certificate getUserCertificate() { - return userCertificate; - } - - /** - * Set the certificate. - * @param certificate certificate to set - */ - public void setUserCertificate(final Certificate certificate) { - userCertificate = certificate; - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/DialogCallbackHandler.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/DialogCallbackHandler.java deleted file mode 100644 index 5c430079ce..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/DialogCallbackHandler.java +++ /dev/null @@ -1,331 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Jeremie Laurent, Yann Petiot, Frederic Rinaldi - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.callback; - -import java.awt.GridLayout; -import java.io.IOException; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.swing.BoxLayout; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPasswordField; -import javax.swing.JTextField; - -/** - * Uses a Swing dialog window to query the user for answers to authentication - * questions. This can be used by a JAAS application to instantiate a - * CallbackHandler - * @author Jeremie Laurent, Yann Petiot, Frederic Rinaldi - * @author Florent Benoit. Integration in the JOnAS 3.1.2 tree - */ -public class DialogCallbackHandler implements CallbackHandler { - - /** - * The text field where the user will put its login. - */ - private JTextField loginField = null; - - /** - * The password field where the user will put its password. - */ - private JTextField passwordField = null; - - /** - * If the button cancel is clicked, the user won't be prompted no more. - */ - private boolean cancelled = false; - - /** - * The title of the dialog box. - */ - private String title = "Login Dialog"; - - /** - * The label for the username label. - */ - private String username = "Username "; - - /** - * The label for the password label. - */ - private String password = "Password "; - - /** - * The label for the login button. - */ - private String loginButton = "Login !"; - - /** - * The label for the cancel button. - */ - private String cancelButton = "Cancel"; - - /** - * Maximum length for fields. - */ - private static final int MAX_FIELD_LENGTH = 20; - - /** - * the length of the password textfield. - */ - private int passwordLength = MAX_FIELD_LENGTH; - - /** - * the length for the username textfield. - */ - private int usernameLength = MAX_FIELD_LENGTH; - - /** - * the character which will be displayed in the password textfield if - * echoCharOn is true. - */ - private char echoChar = '*'; - - /** - * whether the echo is on or not : display the echoChar in the password - * textfield. - */ - private boolean echoCharOn = false; - - /** - * an array of String where are described the label of the buttons. - */ - private String[] connectOptionNames; - - /** - * The constructor to create a callback dialog with the default parent - * window. - */ - public DialogCallbackHandler() { - int i = 0; - connectOptionNames = new String[2]; - connectOptionNames[i] = loginButton; - connectOptionNames[++i] = cancelButton; - } - - /** - * The constructor to create a callback dialog with the default parent - * window. - * @param title the title of the dialog box - */ - public DialogCallbackHandler(final String title) { - this(); - this.title = title; - } - - /** - * The constructor to create a callback dialog with the default parent - * window. - * @param title the title of the dialog box - * @param username the label of the username label - * @param password the label of the password label - */ - public DialogCallbackHandler(final String title, - final String username, - final String password) { - this(); - this.title = title; - this.username = username; - this.password = password; - } - - /** - * The constructor to create a callback dialog with the default parent - * window. - * @param title the title of the dialog box - * @param username the label of the username label - * @param password the label of the password label - * @param loginButton the label of the login button - * @param cancelButton the label of the cancel button - * @param usernameLength the length of the username field - * @param passwordLength the length of the password field - * @param echoChar the character to display when entering the password - * implies that echoCharOn = true - */ - public DialogCallbackHandler(final String title, - final String username, - final String password, - final String loginButton, - final String cancelButton, - final int usernameLength, - final int passwordLength, - final char echoChar) { - this(title, username, password); - this.echoCharOn = true; - this.echoChar = echoChar; - this.loginButton = loginButton; - this.cancelButton = cancelButton; - this.passwordLength = passwordLength; - this.usernameLength = usernameLength; - this.echoChar = echoChar; - } - - /** - * /** This method allows to create a new instance of JDialog initialised - * with the parameters. - * @param isEchoOn the value of passwordCallback.isEchoOn() called in handle - */ - private void dialogInit(final boolean isEchoOn) { - - // to determine whether the echo char must be displayed or not - // we use a "OR" between the isEchoOn=passwordCallback.isEchoOn() and - // the echoCharOn=the value of the variable echoCharOn set in the - // OptionPaneCallbackHandler constructor. - echoCharOn = (isEchoOn || echoCharOn); - dialogInit(); - } - - /** - * This method allows to create a new instance of JDialog initialised with - * the parameters. - */ - private void dialogInit() { - - // for the login - JLabel userNameLabel = new JLabel(username, JLabel.RIGHT); - loginField = new JTextField(""); - - // for the password - JLabel passwordLabel = new JLabel(password, JLabel.RIGHT); - - // because of the bug of Java (in SDK 1.3) it isn't possible to display - // password without an echo character in a password field, we have to - // create a JTextField or a JPasswordField depending on echoCharOn. - if (!echoCharOn) { // password needs to be hidden - passwordField = new JPasswordField(passwordLength); - ((JPasswordField) passwordField).setEchoChar(echoChar); - } else { - passwordField = new JTextField(passwordLength); - } - - // creation of a JPanel to put the other panels on - JPanel connectionPanel = new JPanel(false); - connectionPanel.setLayout(new BoxLayout(connectionPanel, BoxLayout.X_AXIS)); - - // to this panel we add the labels - JPanel namePanel = new JPanel(false); - namePanel.setLayout(new GridLayout(0, 1)); - namePanel.add(userNameLabel); - namePanel.add(passwordLabel); - - // to this panel we add the fields - JPanel fieldPanel = new JPanel(false); - fieldPanel.setLayout(new GridLayout(0, 1)); - fieldPanel.add(loginField); - fieldPanel.add(passwordField); - - // we add the 2 panels created in the first one - connectionPanel.add(namePanel); - connectionPanel.add(fieldPanel); - - // Connect or quit - //System.out.println("Displaying dialog..."); - int choice = JOptionPane.showOptionDialog(null, // the default frame - connectionPanel, // the object to display - title, // the title string - JOptionPane.OK_CANCEL_OPTION, // the options available - JOptionPane.INFORMATION_MESSAGE, // the kind of message - null, // the icon to display - connectOptionNames, // the possible choices - loginField); // the default selection - - if (choice == JOptionPane.OK_OPTION) { - cancelled = false; - } else if (choice == JOptionPane.CANCEL_OPTION) { - // why is this value never got ? - // JOptionPane.CANCEL_OPTION=2 but choice=1 - cancelled = true; - } else if (choice == JOptionPane.CLOSED_OPTION) { - cancelled = true; - } else { - cancelled = true; // another bug of Java - } - - if (cancelled) { - loginField.setText("Invalid"); - passwordField.setText("Invalid"); - } - } - - /** - * Invoke an array of Callbacks.

    - * @param callbacks an array of Callback objects which - * contain the information requested by an underlying security - * service to be retrieved or displayed. - * @exception java.io.IOException if an input or output error occurs.

    - * @exception UnsupportedCallbackException if the implementation of this - * method does not support one or more of the Callbacks specified - * in the callbacks parameter. - */ - public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException { - - // if the user clicked on the cancel button the the system won't - // prompt him its informations - if (cancelled) { - return; - } - - // recreate a new JDialog with the property to display or not - // the password echo - int i = 0; - boolean found = false; - while ((i < callbacks.length) && !found) { - if (callbacks[i] instanceof PasswordCallback) { - found = true; - dialogInit(((PasswordCallback) callbacks[i]).isEchoOn()); - } - // maybe we'll have to create a ObjectCallback object see later. - i++; - } - // if there's no instance of PasswordCallback in the parameter - // callbacks then there's a problem here ! - // TO DO : a new dialogInit to integrate an ObjectCallback for example - // (for pki...) - // while waiting... - if (!found) { - dialogInit(); - } - - // get the informations of the user - for (i = 0; i < callbacks.length; i++) { - - if (callbacks[i] instanceof NameCallback) { - ((NameCallback) callbacks[i]).setName(loginField.getText()); - } else if (callbacks[i] instanceof PasswordCallback) { - ((PasswordCallback) callbacks[i]).setPassword((passwordField.getText()).toCharArray()); - } else { - throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback"); - } - } - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/LoginCallbackHandler.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/LoginCallbackHandler.java deleted file mode 100644 index c438ae52a3..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/LoginCallbackHandler.java +++ /dev/null @@ -1,168 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved. - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.callback; - -import java.io.IOException; -import java.io.PushbackInputStream; -import java.io.InputStream; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.Arrays; - -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.TextOutputCallback; -import javax.security.auth.callback.UnsupportedCallbackException; - -/** - * Come from the JAAS authentication tutorial The application implements the - * CallbackHandler.

    This application is text-based. Therefore it displays - * information to the user using the OutputStreams System.out and System.err, - * and gathers input from the user using the InputStream System.in. - * @author Sun Tutorial - */ -public class LoginCallbackHandler implements CallbackHandler { - - /** - * Size of the buffer. - */ - private static final int BUFFER_SIZE = 128; - - /** - * Invoke an array of Callbacks. - * @param callbacks an array of Callback objects which - * contain the information requested by an underlying security - * service to be retrieved or displayed. - * @throws IOException if an input or output error occurs.

    - * @throws UnsupportedCallbackException if the implementation of this method - * does not support one or more of the Callbacks specified in the - * callbacks parameter. - */ - public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException { - - for (int i = 0; i < callbacks.length; i++) { - if (callbacks[i] instanceof TextOutputCallback) { - - // display the message according to the specified type - TextOutputCallback toc = (TextOutputCallback) callbacks[i]; - switch (toc.getMessageType()) { - case TextOutputCallback.INFORMATION: - System.out.println(toc.getMessage()); - break; - case TextOutputCallback.ERROR: - System.out.println("ERROR: " + toc.getMessage()); - break; - case TextOutputCallback.WARNING: - System.out.println("WARNING: " + toc.getMessage()); - break; - default: - throw new IOException("Unsupported message type: " + toc.getMessageType()); - } - - } else if (callbacks[i] instanceof NameCallback) { - - // prompt the user for a username - NameCallback nc = (NameCallback) callbacks[i]; - - System.err.print(nc.getPrompt()); - System.err.flush(); - nc.setName((new BufferedReader(new InputStreamReader(System.in))).readLine()); - - } else if (callbacks[i] instanceof PasswordCallback) { - - // prompt the user for sensitive information - PasswordCallback pc = (PasswordCallback) callbacks[i]; - System.err.print(pc.getPrompt()); - System.err.flush(); - pc.setPassword(readPassword(System.in)); - } else { - throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback"); - } - } - } - - /** - * Reads user password from given input stream. - * @param in given input stream - * @return the password - * @throws IOException if it fails - */ - private char[] readPassword(InputStream in) throws IOException { - - char[] lineBuffer; - char[] buf; - int i; - - lineBuffer = new char[BUFFER_SIZE]; - buf = lineBuffer; - - int room = buf.length; - int offset = 0; - int c; - - loop: while (true) { - switch (c = in.read()) { - case -1: - case '\n': - break loop; - - case '\r': - int c2 = in.read(); - if ((c2 != '\n') && (c2 != -1)) { - if (!(in instanceof PushbackInputStream)) { - in = new PushbackInputStream(in); - } - ((PushbackInputStream) in).unread(c2); - } else { - break loop; - } - default: - if (--room < 0) { - buf = new char[offset + BUFFER_SIZE]; - room = buf.length - offset - 1; - System.arraycopy(lineBuffer, 0, buf, 0, offset); - Arrays.fill(lineBuffer, ' '); - lineBuffer = buf; - } - buf[offset++] = (char) c; - break; - } - } - - if (offset == 0) { - return null; - } - - char[] ret = new char[offset]; - System.arraycopy(buf, 0, ret, 0, offset); - Arrays.fill(buf, ' '); - - return ret; - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/NoInputCallbackHandler.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/NoInputCallbackHandler.java deleted file mode 100644 index a62f386d41..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/callback/NoInputCallbackHandler.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.callback; - -import java.io.IOException; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.callback.Callback; -import java.security.cert.Certificate; - -/** - * The username and password are given by the constructor No JNDI, datasource or - * file checks. - * @author Florent Benoit (initial developer) - * @author Alexandre Thaveau (add the use of certificates) - * @author Marc-Antoine Bourgeot (add the use of certificates) - */ -public class NoInputCallbackHandler implements CallbackHandler { - - /** - * Username to use. - */ - private String username = null; - - /** - * Password to use. - */ - private String password = null; - - /** - * Certificate to use, optional. - */ - private Certificate cert = null; - - /** - * No default Constructor : must use the one with username and password. - * @throws Exception if someone try to use it - */ - public NoInputCallbackHandler() throws Exception { - throw new Exception( - "This class could only be used with the constructor NoInputCallbackHandler(String username, String password)"); - } - - /** - * Constructor. - * @param username username to store for the authentication - * @param password password to store for the authentication - */ - public NoInputCallbackHandler(final String username, final String password) { - this.username = username; - this.password = password; - } - - /** - * Constructor. - * @param username username to store for the authentication - * @param password password to store for the authentication - * @param cert the certificate for the authentication - */ - public NoInputCallbackHandler(final String username, - final String password, - final Certificate cert) { - this(username, password); - this.cert = cert; - } - - /** - * Invoke an array of Callbacks. - * @param callbacks an array of Callback objects which - * contain the information requested by an underlying security - * service to be retrieved or displayed. - * @throws IOException if an input or output error occurs.

    - * @throws UnsupportedCallbackException if the implementation of this method - * does not support one or more of the Callbacks specified in the - * callbacks parameter. - */ - public void handle(final Callback[] callbacks) throws IOException, UnsupportedCallbackException { - - for (int i = 0; i < callbacks.length; i++) { - if (callbacks[i] instanceof NameCallback) { - // set the username to the username given in the constructor - NameCallback nc = (NameCallback) callbacks[i]; - nc.setName(username); - } else if (callbacks[i] instanceof PasswordCallback) { - // set the password to the password given in the constructor - PasswordCallback pc = (PasswordCallback) callbacks[i]; - pc.setPassword(password.toCharArray()); - } else if (callbacks[i] instanceof CertificateCallback) { - CertificateCallback cc = (CertificateCallback) callbacks[i]; - cc.setUserCertificate(cert); - } else { - throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback"); - } - } - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/CRLLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/CRLLoginModule.java deleted file mode 100644 index 259f063db9..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/CRLLoginModule.java +++ /dev/null @@ -1,293 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Alexandre Thaveau & Marc-Antoine Bourgeot - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.io.File; -import java.io.FileInputStream; -import java.security.cert.CertStore; -import java.security.cert.CertStoreParameters; -import java.security.cert.CertificateFactory; -import java.security.cert.CollectionCertStoreParameters; -import java.security.cert.LDAPCertStoreParameters; -import java.security.cert.X509CRL; -import java.security.cert.X509CRLSelector; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Map; - -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.lib.security.auth.JPrincipal; -import org.ow2.jonas.security.auth.callback.CertificateCallback; - - -/** - * Defines a login module for the authentication by using certificates - * @author Alexandre Thaveau (initial developer) - * @author Marc-Antoine Bourgeot (initial developer) - */ -public class CRLLoginModule implements LoginModule { - - /** - * Subject used - */ - private Subject subject = null; - - /** - * The callbackhandler user for identification - */ - private CallbackHandler callbackHandler = null; - - /** - * Shared state with all login modules - */ - private Map sharedState = null; - - /** - * Options for this login module - */ - private Map options = null; - - /** - * Name of the principal - */ - private String principalName = null; - - /** - * Password f the principal - */ - private String password = null; - - /** - * Roles of the principal - */ - private ArrayList principalRoles = null; - - /** - * Certificate of the user - */ - private X509Certificate cert = null; - - /** - * Initialize this LoginModule. This method is called by the LoginContext - * after this LoginModule has been instantiated. The purpose of this method - * is to initialize this LoginModule with the relevant information. If this - * LoginModule does not understand any of the data stored in sharedState or - * options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end - * user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this - * particular LoginModule. - */ - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { - this.subject = subject; - this.callbackHandler = callbackHandler; - this.sharedState = sharedState; - this.options = options; - } - - /** - * Method to authenticate a Subject (phase 1). The implementation of this - * method authenticates a Subject. For example, it may prompt for Subject - * information such as a username and password and then attempt to verify - * the password. This method saves the result of the authentication attempt - * as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this - * LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - - // No handler - if (callbackHandler == null) { - throw new LoginException("No handler has been defined."); - } - String crlsResourceName = (String) options.get("CRLsResourceName"); - String certStoreAccessName = null; - NameCallback nameCallback = null; - CertificateCallback certificateCallback = null; - try { - // Handle callbacks, here just the certificate and name, name and - // password are already checked - nameCallback = new NameCallback("User :"); - certificateCallback = new CertificateCallback(); - Callback[] callbacks = new Callback[] {nameCallback, certificateCallback}; - callbackHandler.handle(callbacks); - } catch (Exception e) { - throw new LoginException("Problem while getting informations in the callbackhandler: " + e.getMessage()); - } - - try { - this.cert = (X509Certificate) certificateCallback.getUserCertificate(); - if (nameCallback.getName().startsWith("##DN##")) { - if ((this.cert == null)) { - throw new LoginException("Client certificate not present, it can be verified with CRL"); - } - } else { - //if client to be authenticated doesn't require a certificate - // based access -> ok - return true; - } - - //store the parameters of the CertStore - CertStoreParameters certStoreParameters = null; - //two choices : directory, LDAP - //initialization of an Directory certstore - if (crlsResourceName.equalsIgnoreCase("Directory")) { - certStoreAccessName = "Collection"; - // Directory where are stocked the CRLs - String crlsDirectoryName = (String) options.get("CRLsDirectoryName"); - // No resource is specified -> fail - if (crlsDirectoryName == null) { - throw new LoginException( - "You have to give an argument to this login module. The \"CRLsDirectoryName\" parameter is required."); - } - File crlsDirectory = new File(crlsDirectoryName); - if (!crlsDirectory.isDirectory()) { - throw new LoginException(crlsDirectoryName + " is not a directory"); - } - //list files located in the directory - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - FileInputStream fis = null; - //file name array for all CRLs - String[] crlFileName = crlsDirectory.list(); - //collection to stock X509CRL objects - ArrayList crls = new ArrayList(crlFileName.length); - X509CRL crl = null; - - for (int i = 0; i < crlFileName.length; i++) { - //extension of the file must be .crl - if (crlFileName[i].matches(".+\\.crl")) { - fis = new FileInputStream(crlsDirectory.getAbsolutePath() + File.separatorChar + crlFileName[i]); - crl = (X509CRL) cf.generateCRL(fis); - crls.add(crl); - fis.close(); - fis = null; - crl = null; - } - } - //initialize the certstore - certStoreParameters = new CollectionCertStoreParameters(crls); - } else if (crlsResourceName.equalsIgnoreCase("LDAP")) { - //initialization of an LDAP certstore - certStoreAccessName = "LDAP"; - //get the address and the port of the server - String address = (String) options.get("address"); - int port = Integer.parseInt((String) options.get("port")); - if (address == null) { - throw new LoginException( - "You have to give an argument to this login module. The \"address\" and \"port\" parameter are required."); - } - //initialize the certstore - certStoreParameters = new LDAPCertStoreParameters(address, port); - } else { - throw new LoginException( - "You have to give an argument to this login module. The \"CRLsResourceName\" is not valid. Must be set to \"Directory\" or \"LDAP\""); - } - - //check if the client certificate has not been revoked - CertStore crlsStore = CertStore.getInstance(certStoreAccessName, certStoreParameters); - X509CRLSelector x509CRLSelector = new X509CRLSelector(); - //add a selection criterion to check the right CRLs, here issuer - // name - //of CRL and certificate must be the same - x509CRLSelector.addIssuerName(this.cert.getIssuerX500Principal().getEncoded()); - Iterator crlIterator = crlsStore.getCRLs(x509CRLSelector).iterator(); - while (crlIterator.hasNext()) { - if (((X509CRL) crlIterator.next()).isRevoked(this.cert)) { - throw new LoginException("Client certificate has been revoked"); - } - } - } catch (Exception e) { - throw new LoginException("Error during the login phase : " + e.getMessage()); - } - - return true; - } - - /** - * Method to commit the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication succeeded (the - * relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules - * succeeded). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method associates relevant Principals and Credentials with the - * Subject located in the LoginModule. If this LoginModule's own - * authentication attempted failed, then this method removes/destroys any - * state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - return true; - } - - /** - * Method to abort the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication failed. (the relevant - * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not - * succeed). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - - // Reset temp values - principalName = null; - principalRoles = null; - - return true; - } - - /** - * Method which logs out a Subject. An implementation of this method might - * remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - - // Remove principal name - subject.getPrincipals().remove(new JPrincipal(principalName)); - - return true; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/ClientLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/ClientLoginModule.java deleted file mode 100644 index e7a8e48060..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/ClientLoginModule.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.security.Principal; -import java.security.acl.Group; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import javax.security.auth.Subject; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.lib.security.auth.JSigned; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - - - -/** - * This class is used to propagate the Principal and roles to the server - * It doesn't make any authentication - * @author Florent Benoit - */ -public class ClientLoginModule implements LoginModule { - - /** - * Subject used - */ - private Subject subject = null; - - /** - * Options for this login module - */ - private Map options = null; - - /** - * Name of the principal - */ - private String principalName = null; - - /** - * Roles of the principal - */ - private ArrayList principalRoles = null; - - /** - * Set SecurityContext for all the JVM ? - */ - private boolean globalContext = false; - - /** - * Initialize this LoginModule. - * This method is called by the LoginContext after this LoginModule has been instantiated. The purpose of this method is to initialize this LoginModule with the relevant information. If this LoginModule does not understand any of the data stored in sharedState or options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this particular LoginModule. - */ - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { - this.subject = subject; - this.options = options; - principalRoles = new ArrayList(); - } - - - /** - * Method to authenticate a Subject (phase 1). - * The implementation of this method authenticates a Subject. For example, it may prompt for Subject information such as a username and password and then attempt to verify the password. This method saves the result of the authentication attempt as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - // set context for all the JVM or not ? - String useGlobalCtx = (String) options.get("globalCtx"); - if ((useGlobalCtx != null) && (Boolean.valueOf(useGlobalCtx).booleanValue())) { - globalContext = true; - } - return true; - } - - - /** - * Method to commit the authentication process (phase 2). - * This method is called if the LoginContext's overall authentication succeeded (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules succeeded). - * If this LoginModule's own authentication attempt succeeded (checked by retrieving the private state saved by the login method), then this method associates relevant Principals and Credentials with the Subject located in the LoginModule. If this LoginModule's own authentication attempted failed, then this method removes/destroys any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - - // Retrieve only principal name (without groups) - Set principals = subject.getPrincipals(Principal.class); - Iterator iterator = principals.iterator(); - while (iterator.hasNext()) { - Principal principal = (Principal) iterator.next(); - if (!(principal instanceof Group)) { - principalName = principal.getName(); - } - } - - // No name --> error - if (principalName == null) { - throw new LoginException("There was no previous login module. This login module can only be used in addition to another module which perform the authentication."); - } - - // Retrieve all roles of the user (Roles are members of the Group.class) - principals = subject.getPrincipals(Group.class); - iterator = principals.iterator(); - JSigned jSigned = null; - while (iterator.hasNext()) { - Group group = (Group) iterator.next(); - - // Signed group (empty group that contains a signature)? - if (group instanceof JSigned) { - jSigned = (JSigned) group; - continue; - } - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = (Principal) e.nextElement(); - principalRoles.add(p.getName()); - } - } - - // Propagate username and roles - SecurityContext ctx = new SecurityContext(principalName, principalRoles); - // Signed ? - if (jSigned != null) { - ctx.setSignature(jSigned.getSignature()); - } - SecurityCurrent current = SecurityCurrent.getCurrent(); - if (globalContext) { - current.setGlobalSecurityContext(ctx); - } else { - current.setSecurityContext(ctx); - } - - return true; - } - - - /** - * Method to abort the authentication process (phase 2). - * This method is called if the LoginContext's overall authentication failed. (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not succeed). - * If this LoginModule's own authentication attempt succeeded (checked by retrieving the private state saved by the login method), then this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - - // Do nothing (as all is done in the commit() phase) - return true; - } - - /** - * Method which logs out a Subject. - * An implementation of this method might remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - - // Unset the principal name - SecurityContext ctx = new SecurityContext(); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - return true; - - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JDirectResourceLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JDirectResourceLoginModule.java deleted file mode 100644 index 37fb796dba..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JDirectResourceLoginModule.java +++ /dev/null @@ -1,307 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.util.ArrayList; -import java.util.Map; - -import javax.naming.InitialContext; -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.lib.security.auth.JGroup; -import org.ow2.jonas.lib.security.auth.JPrincipal; -import org.ow2.jonas.lib.security.auth.JRole; -import org.ow2.jonas.security.auth.callback.CertificateCallback; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; - - -/** - * Define a login module for the authentication by using one of the JOnAS - * resource Datasource, LDAP or file - * @author Florent Benoit (initial developer) - * @author Alexandre Thaveau (add callback for certificates) - * @author Marc-Antoine Bourgeot (add callback for certificates) - */ -public class JDirectResourceLoginModule implements LoginModule { - - /** - * Subject used - */ - private Subject subject = null; - - /** - * The callbackhandler user for identification - */ - private CallbackHandler callbackHandler = null; - - /** - * Options for this login module - */ - private Map options = null; - - /** - * Name of the principal - */ - private String principalName = null; - - /** - * Password of the principal - */ - private String password = null; - - /** - * Roles of the principal - */ - private ArrayList principalRoles = null; - - /** - * Indicates if the login was successfull or not - */ - private boolean loginWasDoneWithSuccess = false; - - /** - * Initialize this LoginModule. This method is called by the LoginContext - * after this LoginModule has been instantiated. The purpose of this method - * is to initialize this LoginModule with the relevant information. If this - * LoginModule does not understand any of the data stored in sharedState or - * options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end - * user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this - * particular LoginModule. - */ - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { - this.subject = subject; - this.callbackHandler = callbackHandler; - this.options = options; - } - - /** - * Method to authenticate a Subject (phase 1). The implementation of this - * method authenticates a Subject. For example, it may prompt for Subject - * information such as a username and password and then attempt to verify - * the password. This method saves the result of the authentication attempt - * as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this - * LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - - // No handler - if (callbackHandler == null) { - throw new LoginException("No handler has been defined."); - } - - // Resource to be used (jndi name) - String resourceName = (String) options.get("resourceName"); - - // Use certificate callback - String certCallback = (String) options.get("certCallback"); - - // No resource is specified -> fail - if (resourceName == null) { - throw new LoginException( - "You have to give an argument to this login module. The 'resourceName' parameter is required."); - } - - // Get the resource and perform authentication - try { - InitialContext ictx = new InitialContext(); - JResource jResource = null; - try { - jResource = (JResource) ictx.lookup(resourceName); - } catch (Exception e) { - throw createChainedLoginException("Cannot retrieve the resource '" + resourceName - + "'. Check that this resource is bound in the registry", e); - } - - // Handle callbacks - NameCallback nameCallback = new NameCallback("User :"); - // False to hide password when it is entered - PasswordCallback passwordCallback = new PasswordCallback("Password :", false); - CertificateCallback certificateCallback = new CertificateCallback(); - Callback[] callbacks = null; - - if ((certCallback != null) && (Boolean.valueOf(certCallback).booleanValue())) { - callbacks = new Callback[] {nameCallback, passwordCallback, certificateCallback}; - } else { - callbacks = new Callback[] {nameCallback, passwordCallback}; - } - callbackHandler.handle(callbacks); - - // Get values - principalName = nameCallback.getName(); - if (principalName == null) { - throw new LoginException("A null username is not a valid username"); - } - if (principalName.startsWith("##DN##") && (certificateCallback.getUserCertificate() == null)) { - throw new LoginException("Name must have a certificate to access this certificate based access login"); - } - char[] arrayPass = passwordCallback.getPassword(); - if (arrayPass == null) { - throw new LoginException("A null password is not a valid password"); - } - - // Authentication - step 1 (user) - JUser user = null; - try { - user = jResource.findUser(principalName); - } catch (Exception jre) { - // could not retrieve user - throw createChainedLoginException("Can not find the user", jre); - } - // User was not found - if (user == null) { - throw new LoginException("User '" + principalName + "' not found."); - } - - // Authentication - step 2 (password) - boolean validated = jResource.isValidUser(user, new String(arrayPass)); - if (!validated) { - throw new LoginException("The password for the user '" + principalName + "' is not valid"); - } - - // user password - if (user.getPassword() != null) { - this.password = user.getPassword(); - } else { - this.password = new String(arrayPass); - } - - // Authentication - step 3 (roles) - try { - principalRoles = jResource.getArrayListCombinedRoles(user); - } catch (JResourceException jre) { - throw createChainedLoginException(jre.getMessage(), jre); - } - - } catch (Exception e) { - throw createChainedLoginException("Error during the login phase : " + e.getMessage(), e); - } - loginWasDoneWithSuccess = true; - return true; - } - - /** - * Create a LoginException with the given message and set the cause to the given Exception - * @param msg Exception message - * @param e Root cause - * @return LoginException the chained LoginException - */ - private static LoginException createChainedLoginException(String msg, Exception e) { - LoginException le = new LoginException(msg); - le.initCause(e); - return le; - } - - /** - * Method to commit the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication succeeded (the - * relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules - * succeeded). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method associates relevant Principals and Credentials with the - * Subject located in the LoginModule. If this LoginModule's own - * authentication attempted failed, then this method removes/destroys any - * state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess) { - // Add principal to the current subject - subject.getPrincipals().add(new JPrincipal(principalName)); - subject.getPrivateCredentials().add(password); - JGroup group = new JGroup("Roles"); - - // Convert list into array - String[] roles = new String[principalRoles.size()]; - roles = (String[]) principalRoles.toArray(roles); - int size = principalRoles.size(); - for (int i = 0; i < size; i++) { - group.addMember(new JRole(roles[i])); - } - - // Add group - subject.getPrincipals().add(group); - } - return loginWasDoneWithSuccess; - } - - /** - * Method to abort the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication failed. (the relevant - * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not - * succeed). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - //overall authentication succeeded - if (loginWasDoneWithSuccess) { - // Reset temp values - principalName = null; - principalRoles = null; - } - return loginWasDoneWithSuccess; - } - - /** - * Method which logs out a Subject. An implementation of this method might - * remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess) { - // Remove principal name - subject.getPrincipals().remove(new JPrincipal(principalName)); - } - - return loginWasDoneWithSuccess; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JResourceLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JResourceLoginModule.java deleted file mode 100644 index d17dcc20ff..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/JResourceLoginModule.java +++ /dev/null @@ -1,309 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.util.Map; - -import javax.naming.InitialContext; -import javax.naming.NameNotFoundException; -import javax.rmi.PortableRemoteObject; -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.lib.security.auth.JSubject; -import org.ow2.jonas.security.auth.callback.CertificateCallback; -import org.ow2.jonas.security.internal.JonasSecurityServiceImpl; -import org.ow2.jonas.security.internal.realm.factory.JResourceRemote; - - -/** - * Define a login module for the authentication by using one of the JOnAS - * resource Datasource, LDAP or file. - * This LoginModule delegates to the Server the authentication. - * @author Florent Benoit - * @author S. Ali Tokmen - */ -public class JResourceLoginModule implements LoginModule { - - /** - * Default JOnAS server name. - */ - private static final String DEFAULT_SERVER_NAME = "jonas"; - - /** - * Subject used. - */ - private Subject subject = null; - - /** - * Remote subject returned for authentication. - */ - private Subject remoteSubject = null; - - /** - * The callbackhandler user for identification. - */ - private CallbackHandler callbackHandler = null; - - /** - * Options for this login module. - */ - private Map options = null; - - /** - * Password of the principal. - */ - private String password = null; - - /** - * Indicates if the login was successfull or not. - */ - private boolean loginWasDoneWithSuccess = false; - - /** - * Convert the username into uppercase for the authentication. - */ - private boolean useUpperCaseUsername = false; - - /** - * Initialize this LoginModule. This method is called by the LoginContext - * after this LoginModule has been instantiated. The purpose of this method - * is to initialize this LoginModule with the relevant information. If this - * LoginModule does not understand any of the data stored in sharedState or - * options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end - * user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this - * particular LoginModule. - */ - public void initialize(final Subject subject, - final CallbackHandler callbackHandler, - final Map sharedState, - final Map options) { - this.subject = subject; - this.callbackHandler = callbackHandler; - this.options = options; - } - - /** - * Method to authenticate a Subject (phase 1). The implementation of this - * method authenticates a Subject. For example, it may prompt for Subject - * information such as a username and password and then attempt to verify - * the password. This method saves the result of the authentication attempt - * as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this - * LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - - // No handler - if (callbackHandler == null) { - throw new LoginException("No handler has been defined."); - } - - // Resource to be used (jndi name) - String resourceName = (String) options.get("resourceName"); - - // Name of the server for retrieving the security service - String serverName = (String) options.get("serverName"); - if (serverName == null) { - serverName = DEFAULT_SERVER_NAME; - } - - // use uppercase for authentication - String useUpperCaseUsernameTxt = (String) options.get("useUpperCaseUsername"); - if ((useUpperCaseUsernameTxt != null) && (Boolean.valueOf(useUpperCaseUsernameTxt).booleanValue())) { - useUpperCaseUsername = true; - } - - // Use certificate callback - String certCallback = (String) options.get("certCallback"); - - // No resource is specified -> fail - if (resourceName == null) { - throw new LoginException( - "You have to give an argument to this login module. The 'resourceName' parameter is required."); - } - - // Add the security name to servername to find the JNDI object - String remoteResourceName = serverName + JonasSecurityServiceImpl.REMOTE_RESOUCE; - - - // Get the resource and perform authentication - try { - InitialContext ictx = new InitialContext(); - JResourceRemote jResourceRemote = null; - try { - Object o; - try { - o = ictx.lookup(remoteResourceName); - } catch(NameNotFoundException e) { - // Are we too early? Wait two second and retry - Thread.sleep(2000); - o = ictx.lookup(remoteResourceName); - } - jResourceRemote = (JResourceRemote) PortableRemoteObject.narrow(o, JResourceRemote.class); - } catch (Exception e) { - throw createChainedLoginException("Cannot retrieve the resource '" + remoteResourceName - + "'. Check that this resource is bound in the registry and that the server name is correct", e); - } - - // Handle callbacks - NameCallback nameCallback = new NameCallback("User :"); - // False to hide password when it is entered - PasswordCallback passwordCallback = new PasswordCallback("Password :", false); - CertificateCallback certificateCallback = new CertificateCallback(); - Callback[] callbacks = null; - - if ((certCallback != null) && (Boolean.valueOf(certCallback).booleanValue())) { - callbacks = new Callback[] {nameCallback, passwordCallback, certificateCallback}; - } else { - callbacks = new Callback[] {nameCallback, passwordCallback}; - } - callbackHandler.handle(callbacks); - - // Get values - String principalName = nameCallback.getName(); - if (principalName == null) { - throw new LoginException("A null username is not a valid username"); - } - if (principalName.startsWith("##DN##") && (certificateCallback.getUserCertificate() == null)) { - throw new LoginException("Name must have a certificate to access this certificate based access login"); - } - char[] arrayPass = passwordCallback.getPassword(); - if (arrayPass == null) { - throw new LoginException("A null password is not a valid password"); - } - - // Convert into uppercase ? - if (useUpperCaseUsername) { - principalName = principalName.toUpperCase(); - } - - password = new String(arrayPass); - JSubject jSubject = null; - try { - jSubject = jResourceRemote.authenticate(principalName, arrayPass, resourceName); - } catch (Exception e) { - throw createChainedLoginException("Cannot authenticate with principal name = '" - + principalName + "' : " + e.getMessage(), e); - } - remoteSubject = new Subject(); - remoteSubject.getPrivateCredentials().add(password); - remoteSubject.getPrincipals().add(jSubject.getName()); - remoteSubject.getPrincipals().add(jSubject.getGroup()); - - } catch (Exception e) { - throw createChainedLoginException("Error during the login phase : " + e.getMessage(), e); - } - loginWasDoneWithSuccess = true; - return true; - } - - /** - * Create a LoginException with the given message and set the cause to the given Exception. - * @param msg Exception message - * @param e Root cause - * @return LoginException the chained LoginException - */ - private static LoginException createChainedLoginException(final String msg, final Exception e) { - LoginException le = new LoginException(msg); - le.initCause(e); - return le; - } - - /** - * Method to commit the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication succeeded (the - * relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules - * succeeded). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method associates relevant Principals and Credentials with the - * Subject located in the LoginModule. If this LoginModule's own - * authentication attempted failed, then this method removes/destroys any - * state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Add principal to the current subject - subject.getPrincipals().addAll(remoteSubject.getPrincipals()); - subject.getPrivateCredentials().add(password); - } - return loginWasDoneWithSuccess; - } - - /** - * Method to abort the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication failed. (the relevant - * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not - * succeed). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Reset temp values - remoteSubject = null; - } - return loginWasDoneWithSuccess; - } - - /** - * Method which logs out a Subject. An implementation of this method might - * remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Remove principal name - subject.getPrincipals().remove(remoteSubject.getPrincipals()); - } - - return loginWasDoneWithSuccess; - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RemoteLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RemoteLoginModule.java deleted file mode 100644 index 5ea5e62e37..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RemoteLoginModule.java +++ /dev/null @@ -1,400 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.security.auth.Subject; -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.NameCallback; -import javax.security.auth.callback.PasswordCallback; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.security.internal.JonasSecurityServiceImpl; -import org.ow2.jonas.security.internal.realm.factory.JResourceRemote; - - -/** - * This Remote login module is used to run a JAAS authentication on the remote - * side. This allows users to provide a simple LoginModule which run on the - * server side and to share this login module from the client side (in this case - * it use remotely the user login module) - * @author Florent Benoit - */ -public class RemoteLoginModule implements LoginModule { - - /** - * Default JOnAS server name (when asking remote server). - */ - private static final String DEFAULT_SERVER_NAME = "jonas"; - - /** - * Subject used. - */ - private Subject subject = null; - - /** - * Remote subject returned for authentication. - */ - private Subject remoteSubject = null; - - /** - * The callbackhandler user for identification. - */ - private CallbackHandler callbackHandler = null; - - /** - * Options for this login module. - */ - private Map options = null; - - /** - * Password of the principal. - */ - private String password = null; - - /** - * Indicates if the login was successfull or not. - */ - private boolean loginWasDoneWithSuccess = false; - - /** - * Initialize this LoginModule. This method is called by the LoginContext - * after this LoginModule has been instantiated. The purpose of this method - * is to initialize this LoginModule with the relevant information. If this - * LoginModule does not understand any of the data stored in sharedState or - * options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end - * user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this - * particular LoginModule. - */ - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { - this.subject = subject; - this.callbackHandler = callbackHandler; - this.options = options; - } - - /** - * Method to authenticate a Subject (phase 1). The implementation of this - * method authenticates a Subject. For example, it may prompt for Subject - * information such as a username and password and then attempt to verify - * the password. This method saves the result of the authentication attempt - * as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this - * LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - - // No handler - if (callbackHandler == null) { - throw new LoginException("No handler has been defined."); - } - - // Name of the jaas entry to use on the server side - String entryName = (String) options.get("entryName"); - - // Get PROVIDER_URL property used to access to remote servers. - // This property can be a comma separated list - // If this is null, it will use the default setting - String providerURLsProp = (String) options.get("providerURLs"); - List providerURLs = null; - if (providerURLsProp != null) { - String[] providerURLsArray = providerURLsProp.split(","); - providerURLs = Arrays.asList(providerURLsArray); - } - - - // Name of the servers for retrieving the security service - String serverNameProp = (String) options.get("serverName"); - String serverNamesProp = (String) options.get("serverNames"); - List serverNames = new ArrayList(); - - // Build list of the servers - if (serverNameProp == null && serverNamesProp == null) { - serverNames.add(DEFAULT_SERVER_NAME); - } else { - // Append servers found - if (serverNameProp != null) { - serverNames.add(serverNameProp); - } - if (serverNamesProp != null) { - String[] servNames = serverNamesProp.split(","); - for (int i = 0; i < servNames.length; i++) { - serverNames.add(servNames[i]); - } - } - } - - // No entry has been is specified -> fails - if (entryName == null) { - throw new LoginException( - "The 'entryName' argument is a required argument of this login module."); - } - - - // Build a list of resources object to be searched in the available registry - List resourceNames = new ArrayList(); - Iterator it = serverNames.iterator(); - while (it.hasNext()) { - String sName= it.next(); - // Remove extra spaces - sName = sName.trim(); - // add a suffix to each server name - resourceNames.add(sName + JonasSecurityServiceImpl.REMOTE_RESOUCE); - } - - // Get the resource and perform authentication - try { - - JResourceRemote jResourceRemote = findRemoteResource(resourceNames, providerURLs); - - // Handle callbacks - NameCallback nameCallback = new NameCallback("User :"); - // False to hide password when it is entered - PasswordCallback passwordCallback = new PasswordCallback("Password :", false); - Callback[] callbacks = new Callback[] {nameCallback, passwordCallback}; - callbackHandler.handle(callbacks); - - // Get values - String principalName = nameCallback.getName(); - if (principalName == null) { - throw new LoginException("A null username is not a valid username"); - } - - char[] arrayPass = passwordCallback.getPassword(); - if (arrayPass == null) { - throw new LoginException("A null password is not a valid password"); - } - - password = new String(arrayPass); - try { - remoteSubject = jResourceRemote.authenticateJAAS(principalName, arrayPass, entryName); - } catch (Exception e) { - throw new LoginException("Cannot authenticate with principal name = '" + principalName + "' : " + e.getMessage()); - } - } catch (Exception e) { - throw new LoginException("Error during the login phase : " + e.getMessage()); - } - loginWasDoneWithSuccess = true; - return true; - } - - - /** - * Gets a remote resource in order to ask a remote authentication. - * @param resourceNames the names of the resources that should be in the registry. - * @param userProviderURLs the list of PROVIDER_URL to use (empty/null = default) - * @return the first resource found, else throw an exception - * @throws LoginException if no resources are available. - */ - protected JResourceRemote findRemoteResource(final List resourceNames, final List userProviderURLs) - throws LoginException { - - // Search on each initial context, the given set of resources - // If no resources are available, throw an exception. - - // Add a null providerURL if it is empty - List providerURLs = null; - if (userProviderURLs == null || userProviderURLs.size() == 0) { - providerURLs = new ArrayList(); - providerURLs.add(null); - } else { - providerURLs = userProviderURLs; - } - - //Get strategy from configuration file - String strategy = (String) this.options.get("strategy"); - List myproviderURLs = new ArrayList(providerURLs); - int index = 0; - - // Iterate on each context - for (int i = 0; i < providerURLs.size(); i++) { - //if strategy="random" is set, select a providerURL randomly - if (strategy != null && strategy.equals("random")) { - index = (int) (System.currentTimeMillis() % myproviderURLs.size()); - } - String providerURL = myproviderURLs.get(index); - myproviderURLs.remove(index); - // Remove extra spaces. - providerURL = providerURL.trim(); - - // First, get a context - Context ictx; - try { - ictx = getInitialContext(providerURL); - } catch (NamingException e) { - // try the next one - continue; - } - - // Loop on the given resource set. - Iterator itResourceNames = resourceNames.iterator(); - while (itResourceNames.hasNext()) { - String remoteResourceName = itResourceNames.next(); - - // Then search the given resources in this context - JResourceRemote jResourceRemote = null; - try { - Object o = ictx.lookup(remoteResourceName); - jResourceRemote = (JResourceRemote) PortableRemoteObject.narrow(o, JResourceRemote.class); - } catch (NamingException ne) { - // name is not found, this may be ok. - } - - // found a resource, return it - if (jResourceRemote != null) { - return jResourceRemote; - } - } - } - - // If we go here, it means that no resources have been found - // --> it means error ! - StringBuffer sb = new StringBuffer(); - sb.append("The resources named '"); - Iterator itResourceNames = resourceNames.iterator(); - while (itResourceNames.hasNext()) { - sb.append(itResourceNames.next()); - if (itResourceNames.hasNext()) { - sb.append(","); - } - } - sb.append("' have not been found in the "); - if (userProviderURLs == null) { - sb.append("default InitialContext"); - } else { - Iterator itProv = userProviderURLs.iterator(); - sb.append("Inital Context with PROVIDER_URL = '"); - // Iterate on each context - while (itProv.hasNext()) { - sb.append(itProv.next()); - if (itProv.hasNext()) { - sb.append(","); - } - } - sb.append("'"); - } - sb.append(". Check that the server names are correct and that resources are bound."); - throw new LoginException(sb.toString()); - } - - - - /** - * Builds an Initial Context for the given providerURL. - * @param providerURL the given URL to use. If null, use the default setting - * @return an instance of Initial Context - * @throws NamingException if no context can be built - */ - protected Context getInitialContext(final String providerURL) throws NamingException { - if (providerURL == null) { - return new InitialContext(); - } - // else use the given URL - Hashtable env = new Hashtable(); - env.put(Context.PROVIDER_URL, providerURL); - return new InitialContext(env); - } - - /** - * Method to commit the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication succeeded (the - * relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules - * succeeded). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method associates relevant Principals and Credentials with the - * Subject located in the LoginModule. If this LoginModule's own - * authentication attempted failed, then this method removes/destroys any - * state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Add principal to the current subject - subject.getPrincipals().addAll(remoteSubject.getPrincipals()); - subject.getPrivateCredentials().add(password); - } - return loginWasDoneWithSuccess; - } - - /** - * Method to abort the authentication process (phase 2). This method is - * called if the LoginContext's overall authentication failed. (the relevant - * REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not - * succeed). If this LoginModule's own authentication attempt succeeded - * (checked by retrieving the private state saved by the login method), then - * this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Reset temp values - remoteSubject = null; - } - return loginWasDoneWithSuccess; - } - - /** - * Method which logs out a Subject. An implementation of this method might - * remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule - * should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - - //overall authentication succeeded - if (loginWasDoneWithSuccess && remoteSubject != null) { - // Remove principal name - subject.getPrincipals().remove(remoteSubject.getPrincipals()); - } - - return loginWasDoneWithSuccess; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RoleBasedAuthorizationModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RoleBasedAuthorizationModule.java deleted file mode 100644 index b47e5fc94a..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/RoleBasedAuthorizationModule.java +++ /dev/null @@ -1,267 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.io.FileInputStream; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.security.AccessController; -import java.security.Principal; -import java.security.acl.Group; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; -import java.util.Set; - -import javax.management.MBeanServer; -import javax.management.remote.MBeanServerForwarder; -import javax.security.auth.Subject; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.bootstrap.JProp; - -/** - * Authorizes a certain user to access a certain resource based on the role(s) - * of that user and that user's group(s). - * - * @author S. Ali Tokmen - */ -public class RoleBasedAuthorizationModule implements InvocationHandler { - /** - * Returns a usable MBeanServerForwarder instance. - * - * @param type MBeanServerForwarder type. - * @param param MBeanServerForwarder parameter, for example the access - * list file for the type "file". - * - * @return A usable MBeanServerForwarder instance. - */ - public static MBeanServerForwarder newProxyInstance(final String type, final String param) { - try { - if ("file".equals(type)) { - // Make sure files get read using JONAS_BASE - String filename = JProp.getJonasBase() + System.getProperty("file.separator") + param; - FileInputStream input = new FileInputStream(filename); - Properties props = new Properties(); - props.load(input); - input.close(); - return (MBeanServerForwarder) Proxy.newProxyInstance( - MBeanServerForwarder.class.getClassLoader(), - new Class[] {MBeanServerForwarder.class}, - new RoleBasedAuthorizationModule((Map) props)); - } else { - throw new IllegalArgumentException("Unknown MBeanServerForwarder type: " + type); - } - } catch (Exception e) { - throw new IllegalArgumentException("Failed creating the MBeanServerForwarder: " + e.getLocalizedMessage()); - } - } - - /** - * Gets a local reference to the MBeanServer and initializes the - * authorization manager. - * - * This constructor must not be called, use the - * {@link RoleBasedAuthorizationModule#newProxyInstance(String, String)} - * static method instead. - * - * @param access Access rights used by the module. - */ - private RoleBasedAuthorizationModule(final Map access) { - for (Iterator i = access.keySet().iterator(); i.hasNext();) { - MethodType type; - String key = i.next(); - String value = access.get(key); - if ("readonly".equals(value)) { - type = MethodType.GETTER; - } else if ("readwrite".equals(value)) { - type = MethodType.SETTER; - } else { - throw new IllegalArgumentException("Unknown access right: " + value - + ". Valid values are \"readonly\" and \"readwrite\"."); - } - accessRights.put(key, type); - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - mBeanServer = jmxService.getJmxServer(); - } - - /** - * Verifies that the invoker has the right of invoking a certain method - * and invokes it on the MBeanServer. - * - * @param proxy The proxy instance that the method was invoked on. - * @param method Method to invoke. - * @param args Arguments to give to the method. - * - * @return Result of the invocation. - * - * @throws IllegalAccessException If the current user is not allowed to - * invoke the given method. - * @throws Throwable If the target throws an exception. - */ - public Object invoke(final Object proxy, final Method method, final Object[] args) - throws IllegalAccessException, Throwable { - // Check arguments - if (method == null) { - throw new IllegalArgumentException("Method is null"); - } - String methodName = method.getName(); - if (methodName == null) { - throw new IllegalArgumentException("MethodName is null"); - } - - // Get the caller's identification information - Subject subject = Subject.getSubject(AccessController.getContext()); - - // setMBeanServer is a special operation, only allowed when - // no subject present (=local operation) - if (subject == null) { - if ("setMBeanServer".equals(methodName)) { - mBeanServer = (MBeanServer) args[0]; - return null; - } - } - - // Check MBeanServer - if (mBeanServer == null) { - throw new IllegalStateException("MBeanServer is null"); - } - - // Local operations (=no subject present) are called directly - if (subject == null) { - return method.invoke(mBeanServer, args); - } - - // Get method type - MethodType type; - if (methodName.startsWith("get") || methodName.startsWith("query") - || methodName.startsWith("is") || methodName.startsWith("to") - || "equals".equals(methodName) || "hashCode".equals(methodName)) { - type = MethodType.GETTER; - } else { - // In all other cases assume setter - type = MethodType.SETTER; - } - - // Verify and invoke - if (canAccess(type, getRoles(subject))) { - try { - return method.invoke(mBeanServer, args); - } catch (InvocationTargetException e) { - throw e.getTargetException(); - } - } else { - throw new IllegalAccessException("Access denied for method " + methodName); - } - } - - /** - * Gets the roles of a given subject. - * - * @param subject Subject to inspect. - * - * @return Set of roles. - */ - private Set getRoles(final Subject subject) { - Set roles = new HashSet(); - // Retrieve all roles of the user - // Roles are members of the Group.class - for (Iterator i = subject.getPrincipals(Group.class).iterator(); i.hasNext();) { - Group group = i.next(); - - // Add all roles - for (Enumeration e = group.members(); e.hasMoreElements();) { - Principal p = (Principal) e.nextElement(); - roles.add(p.getName()); - } - } - return roles; - } - - /** - * Checks whether a set of roles are sufficient to access a given type of - * method. - * - * @param type Method type. - * @param roles Set of roles. - * - * @return true if roles can access that type of method, false otherwise. - */ - private boolean canAccess(final MethodType type, final Set roles) { - if (type != MethodType.GETTER && type != MethodType.SETTER) { - throw new IllegalArgumentException("Unknown method type: " + type); - } - - // Get the largest set of authorization for those roles - MethodType accessRight = accessRights.get("*"); - for (Iterator iterator = roles.iterator(); iterator.hasNext() && accessRight != MethodType.SETTER;) { - String role = iterator.next(); - MethodType currentAccessRight = accessRights.get(role); - if ((currentAccessRight == MethodType.GETTER && accessRight == null) - || currentAccessRight == MethodType.SETTER) { - accessRight = currentAccessRight; - } - } - - return (accessRight == type || accessRight == MethodType.SETTER); - } - - /** - * Local reference to the MBeanServer. - */ - private MBeanServer mBeanServer = null; - - /** - * Access rights. - */ - private Map accessRights = new HashMap(); - - /** - * Method types. - */ - private static enum MethodType { - /** - * A getter method. - */ - GETTER, - - /** - * A setter method. - */ - SETTER - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/SignLoginModule.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/SignLoginModule.java deleted file mode 100644 index e1a694b6a3..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/auth/spi/SignLoginModule.java +++ /dev/null @@ -1,286 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.auth.spi; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.Principal; -import java.security.PrivateKey; -import java.security.Signature; -import java.security.SignatureException; -import java.security.UnrecoverableKeyException; -import java.security.acl.Group; -import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.security.auth.Subject; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.login.LoginException; -import javax.security.auth.spi.LoginModule; - -import org.ow2.jonas.lib.security.auth.JSigned; - - - -/** - * This class is used to sign the current subject. - * @author Florent Benoit - */ -public class SignLoginModule implements LoginModule { - - /** - * Subject used. - */ - private Subject subject = null; - - /** - * Options for this login module. - */ - private Map options = null; - - /** - * Private key. - */ - private static PrivateKey privateKey = null; - - /** - * Initialize this LoginModule. - * This method is called by the LoginContext after this LoginModule has been instantiated. The purpose of this method is to initialize this LoginModule with the relevant information. If this LoginModule does not understand any of the data stored in sharedState or options parameters, they can be ignored. - * @param subject the Subject to be authenticated. - * @param callbackHandler a CallbackHandler for communicating with the end user (prompting for usernames and passwords, for example). - * @param sharedState state shared with other configured LoginModules. - * @param options options specified in the login Configuration for this particular LoginModule. - */ - public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { - this.subject = subject; - this.options = options; - - } - - - /** - * Method to authenticate a Subject (phase 1). - * The implementation of this method authenticates a Subject. For example, it may prompt for Subject information such as a username and password and then attempt to verify the password. This method saves the result of the authentication attempt as private state within the LoginModule. - * @return true if the authentication succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the authentication fails - */ - public boolean login() throws LoginException { - - // Load once the private key - if (privateKey == null) { - // Keystore file - String keystoreFile = (String) options.get("keystoreFile"); - if (keystoreFile == null) { - throw new LoginException("The 'keystoreFile' attribute was not found but this attribute is mandatory"); - } - - // Keystore pass - String keystorePass = (String) options.get("keystorePass"); - if (keystorePass == null) { - throw new LoginException("The 'keystorePass' attribute was not found but this attribute is mandatory"); - } - - // keyPass (for the private key) - String keyPass = (String) options.get("keyPass"); - if (keyPass == null) { - throw new LoginException("The 'keyPass' attribute was not found but this attribute is mandatory"); - } - - // Alias - String alias = (String) options.get("alias"); - if (alias == null) { - throw new LoginException("The 'alias' attribute was not found but this attribute is mandatory"); - } - - - // Check that the file exists - File f = new File(keystoreFile); - if (!f.exists()) { - throw new LoginException("The keystore file named '" + f + "' was not found."); - } - - // Gets the keystore instance - KeyStore keyStore = null; - try { - keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - } catch (KeyStoreException e) { - throw new LoginException("Error while getting a keystore '" + e.getMessage()); - } - - // Load the keystore file - try { - keyStore.load(new BufferedInputStream(new FileInputStream(f)), keystorePass.toCharArray()); - } catch (NoSuchAlgorithmException e) { - throw new LoginException("Error while loading the keystore file '" + f + "'." + e.getMessage()); - } catch (CertificateException e) { - throw new LoginException("Error while loading the keystore file '" + f + "'." + e.getMessage()); - } catch (FileNotFoundException e) { - throw new LoginException("Error while loading the keystore file '" + f + "'." + e.getMessage()); - } catch (IOException e) { - throw new LoginException("Error while loading the keystore file '" + f + "'." + e.getMessage()); - } - - // Get the private key - try { - privateKey = (PrivateKey) keyStore.getKey(alias, keyPass.toCharArray()); - } catch (KeyStoreException e) { - throw new LoginException("Error while getting alias named '" + alias + "' in the keystore file '" + f + "'." + e.getMessage()); - } catch (NoSuchAlgorithmException e) { - throw new LoginException("Error while getting alias named '" + alias + "' in the keystore file '" + f + "'." + e.getMessage()); - } catch (UnrecoverableKeyException e) { - throw new LoginException("Error while getting alias named '" + alias + "' in the keystore file '" + f + "'." + e.getMessage()); - } - } - - return true; - } - - - /** - * Method to commit the authentication process (phase 2). - * This method is called if the LoginContext's overall authentication succeeded (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules succeeded). - * If this LoginModule's own authentication attempt succeeded (checked by retrieving the private state saved by the login method), then this method associates relevant Principals and Credentials with the Subject located in the LoginModule. If this LoginModule's own authentication attempted failed, then this method removes/destroys any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the commit fails - */ - public boolean commit() throws LoginException { - - - // Get Principal Name - String principalName = null; - - // Retrieve only principal name (without groups) - Set principals = subject.getPrincipals(Principal.class); - Iterator iterator = principals.iterator(); - while (iterator.hasNext()) { - Principal principal = (Principal) iterator.next(); - if (!(principal instanceof Group)) { - principalName = principal.getName(); - } - } - - // No name --> error - if (principalName == null) { - throw new LoginException("There was no previous login module. This login module can only be used in addition to another module which perform the authentication."); - } - - // Retrieve all roles of the user (Roles are members of the Group.class) - List principalRoles = new ArrayList(); - principals = subject.getPrincipals(Group.class); - iterator = principals.iterator(); - while (iterator.hasNext()) { - Group group = (Group) iterator.next(); - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = (Principal) e.nextElement(); - principalRoles.add(p.getName()); - } - } - - - // Build signature - Signature signature = null; - try { - signature = Signature.getInstance("SHA1withDSA"); - } catch (NoSuchAlgorithmException e) { - throw new LoginException("The algorithm 'SHA1withDSA' was not found:" + e.getMessage()); - } - try { - signature.initSign(privateKey); - } catch (InvalidKeyException e) { - throw new LoginException("Invalid private key when initializing signature:" + e.getMessage()); - } - - // Add principal name - try { - signature.update(principalName.getBytes()); - } catch (SignatureException e) { - throw new LoginException("Cannot add the bytes of the principal name:" + e.getMessage()); - } - - // Add each role - Iterator itRole = principalRoles.iterator(); - while (itRole.hasNext()) { - try { - signature.update(((String) itRole.next()).getBytes()); - } catch (SignatureException e) { - throw new LoginException("Cannot add the bytes of one role:" + e.getMessage()); - } - } - - // Get bytes of this signature - byte[] signedData = null; - try { - signedData = signature.sign(); - } catch (SignatureException e) { - throw new LoginException("Cannot sign the data:" + e.getMessage()); - } - - // Store the signature - JSigned signed = new JSigned(signedData); - subject.getPrincipals().add(signed); - - return true; - } - - - /** - * Method to abort the authentication process (phase 2). - * This method is called if the LoginContext's overall authentication failed. (the relevant REQUIRED, REQUISITE, SUFFICIENT and OPTIONAL LoginModules did not succeed). - * If this LoginModule's own authentication attempt succeeded (checked by retrieving the private state saved by the login method), then this method cleans up any state that was originally saved. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the abort fails - */ - public boolean abort() throws LoginException { - // Do nothing (as all is done in the commit() phase) - return true; - } - - /** - * Method which logs out a Subject. - * An implementation of this method might remove/destroy a Subject's Principals and Credentials. - * @return true if this method succeeded, or false if this LoginModule should be ignored. - * @throws LoginException if the logout fails - */ - public boolean logout() throws LoginException { - // Nothing - return true; - - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/AbsSecurityContextHelper.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/AbsSecurityContextHelper.java deleted file mode 100644 index 87890e4fea..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/AbsSecurityContextHelper.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal; - -import java.util.ArrayList; - -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This class allows to authenticate users. - * It's a singleton to allow inherence and "static" methods. - * @author Florent Benoit : Initial Developper - * @author Helene Joanin : Refactoring - */ -public abstract class AbsSecurityContextHelper { - - /** - * JResource - */ - private static JResource jResource = null; - - /** - * ref on the SecurityService - */ - protected SecurityService securityService = null; - - /** - * @return return the associated logger - */ - abstract protected Logger getLogger(); - - /** - * @return return the Realm Key - */ - abstract protected String getRealmKey(); - - /** - * @return return the default realm value - */ - abstract protected String getRealmDefault(); - - /** - * Set the SecurityService. Avoids to use the ServiceManager here. - * @param sec SecurityService - */ - public void setSecurityService(SecurityService sec) { - securityService = sec; - } - - /** - * Login with given principal and given credential - * @param principalName the login - * @param credential the password - */ - public void login(String principalName, String credential) { - - // No authentication can be made with a null username - if (principalName == null) { - getLogger().log(BasicLevel.ERROR, "No username so no authentication"); - return; - } - - // Does a user with this username exist? - JUser user = null; - try { - user = getJResource().findUser(principalName); - } catch (Exception jre) { - // could not retrieve user - getLogger().log(BasicLevel.ERROR, "Can not find the user : " + jre.getMessage()); - return; - } - - // User was not found - if (user == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "User " + principalName + " not found."); - } - return; - } - - boolean validated = getJResource().isValidUser(user, credential); - if (!validated) { - getLogger().log(BasicLevel.ERROR, "The password for the user " + principalName + " is not valid"); - return; - } - - ArrayList combinedRoles = null; - try { - combinedRoles = getJResource().getArrayListCombinedRoles(user); - } catch (JResourceException jre) { - getLogger().log(BasicLevel.ERROR, jre.getMessage()); - return; - } - - SecurityContext ctx = new SecurityContext(principalName, combinedRoles); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Login of principalName '" + principalName + "' succeeded."); - } - - } - - /** - * @return the Resource for the authentication (Realm based) - */ - private JResource getJResource() { - - if (jResource != null) { - return jResource; - } - - String resName = null; - try { - resName = JProp.getInstance().getValue(getRealmKey()); - } catch (Exception e) { - getLogger().log(BasicLevel.ERROR, "Cannot read properties in jonas.properties file."); - } - if (resName == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Cannot read property '" + getRealmKey() + "' in jonas.properties file. Use default value = '" + getRealmDefault() + "'."); - } - resName = getRealmDefault(); - } - - // Get the resource from the security service - jResource = securityService.getJResource(resName); - if (jResource == null) { - throw new IllegalStateException("Can't retrieve resource '" + resName + "' from the security service"); - } - return jResource; - } - - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JResources.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JResources.java deleted file mode 100644 index d3bc791828..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JResources.java +++ /dev/null @@ -1,238 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal; - -import java.util.Enumeration; -import java.util.Hashtable; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.internal.realm.factory.JResourceDS; -import org.ow2.jonas.security.internal.realm.factory.JResourceLDAP; -import org.ow2.jonas.security.internal.realm.factory.JResourceMemory; -import org.ow2.jonas.security.realm.factory.JResource; - - - -/** - * - * - * @author Guillaume Sauthier - */ -public class JResources { - - /** - * List of Resource. - * TODO Change this to have a Map ? - */ - private Hashtable jResources = null; - - /** - * SecurityService. - */ - private SecurityService service = null; - - /** - * Reference to the jmx service. - */ - private JmxService jmxService = null; - - /** - * name of the management domain. - */ - private String domainName = null; - - /** - * XML Header. - */ - public static final String HEADER_XML = - "\n" - + "\n"; - - /** - * Create a JResoures list attached to a given SecurityService. - * @param s the parent SecurityService - */ - public JResources() { - jResources = new Hashtable(); - } - - /** - * Add the Resource (memory, ldap, datasource,...). - * @param jResource an instance of JResource or subclasses (JResourceMemory, JResourceDS,...) - * @throws Exception if the resource name already exists - */ - public void addJResource(final JResource jResource) throws Exception { - if (jResources.get(jResource.getName()) != null) { - throw new Exception("The resource name " + jResource.getName() + " already exists !"); - } - - jResources.put(jResource.getName(), jResource); - jResource.setJmxService(jmxService); - jResource.setDomainName(domainName); - jResource.setSecurityService(service); - - service.bindResource(jResource.getName(), jResource); - } - - /** - * Removes the named JResource from the JResource list. - * @param resourceName JResource name to be removed - * @return the removed JResource - * @throws Exception when JResource is not found with given name. - */ - public JResource remove(final String resourceName) throws Exception { - JResource jResource = jResources.get(resourceName); - if (jResource == null) { - throw new Exception("The resource name " + resourceName + " doesn't exist !"); - } - jResources.remove(resourceName); - return jResource; - } - - /** - * @param name the name of the JResource to get. - * @return Returns the named JResource - */ - public JResource getJResource(final String name) { - return jResources.get(name); - } - - /** - * @return Returns the JResources Enumeration - */ - public Enumeration getResources() { - return jResources.elements(); - } - - /** - * String representation of the JOnAS realm. - * @return the xml representation of the JOnAS realm - */ - public String toXML() { - - // Required values - - StringBuffer xml = new StringBuffer(HEADER_XML); - xml.append("\n"); - - xml.append("\n"); - - // Memory realms - xml.append(" \n"); - xml.append(" \n"); - for (Enumeration e = jResources.elements(); e.hasMoreElements();) { - JResource o = e.nextElement(); - if (o instanceof JResourceMemory) { - xml.append(o.toString()); - xml.append("\n"); - } - } - xml.append(" \n"); - - - // Datasource realms - xml.append(" \n"); - xml.append(" \n"); - for (Enumeration e = jResources.elements(); e.hasMoreElements();) { - JResource o = e.nextElement(); - if (o instanceof JResourceDS) { - xml.append(o.toString()); - xml.append("\n"); - } - } - xml.append(" \n"); - - // Ldap realms - xml.append(" \n"); - xml.append(" \n"); - for (Enumeration e = jResources.elements(); e.hasMoreElements();) { - JResource o = e.nextElement(); - if (o instanceof JResourceLDAP) { - xml.append(o.toString()); - xml.append("\n"); - } - } - xml.append(" \n"); - - - - xml.append("\n"); - - - return xml.toString(); - } - - /** - * Set the security service reference - * @param sec security service reference - */ - public void setSecurityService(final SecurityService service) { - this.service = service; - } - - /** - * Set the domain name - * @param domain the domain name - */ - public void setDomainName(final String domain) { - domainName = domain; - } - - /** - * Set the jmx service reference - * @param jmxService the jmx service reference - */ - public void setJmxService(final JmxService jmx) { - jmxService = jmx; - } - - /** - * Allows to chek if the jmx service reference is set. - * @return true if the jmx service reference set, false otherwise false. - */ - public boolean hasJmxService() { - if (jmxService != null) { - return true; - } else { - return false; - } - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImpl.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImpl.java deleted file mode 100644 index e6c6fb305e..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImpl.java +++ /dev/null @@ -1,732 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.Reader; -import java.io.StringReader; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.naming.Context; -import javax.naming.NamingException; -import javax.security.jacc.PolicyContext; -import javax.security.jacc.PolicyContextException; -import javax.security.jacc.PolicyContextHandler; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.rmi.interceptor.spi.JInitializer; -import org.ow2.carol.util.configuration.ConfigurationException; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.security.jacc.handlers.JPolicyContextHandler; -import org.ow2.jonas.lib.service.AbsConfigServiceImpl; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.interceptors.jrmp.SecurityInitializer; -import org.ow2.jonas.security.interceptors.jrmp.ctxcheck.Initializer; -import org.ow2.jonas.security.internal.realm.factory.JResourceDS; -import org.ow2.jonas.security.internal.realm.factory.JResourceLDAP; -import org.ow2.jonas.security.internal.realm.factory.JResourceMemory; -import org.ow2.jonas.security.internal.realm.factory.JResourceRemoteImpl; -import org.ow2.jonas.security.internal.realm.lib.HashHelper; -import org.ow2.jonas.security.internal.realm.principal.Group; -import org.ow2.jonas.security.internal.realm.principal.Role; -import org.ow2.jonas.security.lib.JResourceManager; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.principal.JUser; -import org.ow2.jonas.service.ServiceException; - -/** - * Security Service implementation? - * @author Jeff Mesnil,Philippe Coq, John Ellis, Joe Gittings for old security - * service - * @author Florent Benoit - JOnAS 3.x (Add JResources) - JOnAS 4.x (remove - * MethodGuard, RoleGuard no more used with JACC) - */ -public class JonasSecurityServiceImpl extends AbsConfigServiceImpl implements SecurityService, JonasSecurityServiceImplMBean { - - /** - * Logger which is used. - */ - private static Logger logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX); - - /** - * Name of resource. - */ - public static final String REMOTE_RESOUCE = "_remoteres"; - - /** - * Name of the realm configuration file - */ - protected static final String REALM_CONFIG_FILENAME = "jonas-realm.xml"; - - /** - * Relative path of the realm configuration file. - * TODO to be removed when JOnAS'll be assembled with addons - */ - protected static final String CONFIG_FILE = "conf" + File.separator + REALM_CONFIG_FILENAME; - - /** - * Property for the security propagation. - */ - private static final String SECURITY_PROPAGATION = "jonas.security.propagation"; - - /** - * Reference to the jmx service. - */ - private JmxService jmxService = null; - - /** - * Registry Service. - */ - private RegistryService registryService; - - /** - * JResources list. - */ - private JResources jResources; - - /** - * Initial Context for Naming. - */ - private Context ictx = null; - - /** - * Bind resource in JNDI. - */ - private boolean bindResourcesIntoJndi = false; - - /** - * List of registered JRMP interceptors. - */ - private List> jrmpInterceptors = null; - - /** - * Property for the security context check. - */ - private boolean contextCheckEnable; - - /** - * @param register Bind a resource for security in JNDI ? - */ - public void setRealmJndiRegistration(final boolean register) { - this.bindResourcesIntoJndi = register; - } - - /** - * @param contextCheckEnable True if the security context check on Remote Login Module is enable - */ - public void setContextCheck(final boolean contextCheckEnable) { - this.contextCheckEnable = contextCheckEnable; - } - - /** - * Remove the Resource (memory, ldap, datasource,...). - * @param resourceName name of the resource - * @throws Exception if the resource name does not exist - */ - public void removeJResource(final String resourceName) throws Exception { - - // remove the given resource of the list - JResource jResource = jResources.remove(resourceName); - - // remove the resource into the jndi - if (bindResourcesIntoJndi) { - try { - ictx.unbind(resourceName); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "jResource " + resourceName + " remove from the registry."); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot unbind the resource '" + resourceName + "' into JNDI", e); - } - } - - try { - // Remove mbeans of the resources - jResource.removeMBeans(); - - // register security factory mbean - if (jResource instanceof JResourceMemory) { - jmxService.unregisterModelMBean(JonasObjectName.securityMemoryFactory(getDomainName(), resourceName)); - } else if (jResource instanceof JResourceDS) { - jmxService.unregisterModelMBean(JonasObjectName.securityDatasourceFactory(getDomainName(), resourceName)); - } else if (jResource instanceof JResourceLDAP) { - jmxService.unregisterModelMBean(JonasObjectName.securityLdapFactory(getDomainName(), resourceName)); - } - } catch (ServiceException se) { - logger.log(BasicLevel.ERROR, "JMX service not available", se); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can not unregister the MBean for the resource " + resourceName + " : " - + e.getMessage()); - throw new ServiceException("Can not unregister the MBean for the resource " + resourceName + " : " - + e.getMessage()); - } - - } - - /** - * @param registry the registry service to set - */ - public void setRegistryService(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Returns the registry service. - * @return The registry service - */ - private RegistryService getRegistryService() { - return registryService; - } - - /** - * Initialize the context handlers (JACC). - * @throws PolicyContextException if handlers can't be registered - */ - private void initJACCPolicyContextHandlers() throws PolicyContextException { - logger.log(BasicLevel.DEBUG, ""); - PolicyContextHandler policyContextHandler = new JPolicyContextHandler(); - String[] keys = policyContextHandler.getKeys(); - for (int k = 0; k < keys.length; k++) { - logger.log(BasicLevel.DEBUG, "key " + keys[k]); - PolicyContext.registerHandler(keys[k], policyContextHandler, true); - } - } - - /** - * Start the Service Initialization of the service is already done. - * @throws ServiceException if the stop failed. - */ - @Override - public void doStart() throws ServiceException { - jrmpInterceptors = new ArrayList>(); - - try { - boolean security = Boolean.parseBoolean(getServerProperties().getValue(SECURITY_PROPAGATION)); - if (security) { - jrmpInterceptors.add(SecurityInitializer.class); - // Assert security context ? - if (this.contextCheckEnable) { - jrmpInterceptors.add(Initializer.class); - } - } - - for (Class interceptor : jrmpInterceptors) { - ConfigurationRepository.addInterceptors("jrmp", interceptor); - } - - } catch (ConfigurationException e) { - throw new ServiceException("Cannot init security interceptors for Carol", e); - } - - - // In OSGi, this is the security service and not the Server class - // That is initializing the Policy Stuff - // Set the security policy if defined. - PolicyProvider.init(); - try { - initJACCPolicyContextHandlers(); - } catch (PolicyContextException e1) { - logger.log(BasicLevel.ERROR, "Cannot init JACCPolicyContextHandlers"); - throw new ServiceException("Cannot init JACCPolicyContextHandlers :" + e1); - } - - try { - final SecurityService ss = this; - jResources = new JResources(); - jResources.setSecurityService(ss); - - // Get the InitialContext - try { - JResourceRemoteImpl jrri = new JResourceRemoteImpl(ss); - - ictx = getRegistryService().getRegistryContext(); - // Register security remote object (name based on JOnAS - // server name). - ictx.rebind(getJonasServerName() + REMOTE_RESOUCE, jrri); - } catch (Exception e) { - // Throw an ServiceException if needed - logger.log(BasicLevel.ERROR, "Cannot create initial context when Security service initializing"); - throw new ServiceException("Cannot create initial context when Security service initializing", e); - } - - // register security service mbean - jmxService.registerMBean(this, JonasObjectName.securityService(getDomainName())); - } catch (ServiceException se) { - logger.log(BasicLevel.ERROR, "JMX service not available", se); - } catch (Throwable e) { - logger.log(BasicLevel.ERROR, "SecurityService: Cannot start the Security service:\n" + e); - - e.printStackTrace(); - throw new ServiceException("SecurityService: Cannot start the Security service", e); - } - createRealm(); - try { - registerResourcesMBeans(); - } catch (MalformedObjectNameException e) { - throw new ServiceException("SecurityService: Cannot register mbeans", e); - } - logger.log(BasicLevel.INFO, "Security Service started"); - } - - - /** - * Look for JResourceMemory resources as they are the only security - * resources (for the moment) which have associated MBeans. - * @throws MalformedObjectNameException ObjectName could not be created - */ - private void registerResourcesMBeans() throws MalformedObjectNameException { - Enumeration resourcesEnum = jResources.getResources(); - String domainName = getDomainName(); - while (resourcesEnum.hasMoreElements()) { - JResource aResource = resourcesEnum.nextElement(); - if (aResource instanceof JResourceMemory) { - String resourceName = aResource.getName(); - JResourceMemory aResourceMemory = (JResourceMemory) aResource; - - // needed for later jonasadmin actions - aResourceMemory.setJmxService(jmxService); - aResourceMemory.setDomainName(domainName); - aResourceMemory.setSecurityService(this); - - // get users - Hashtable usersTable = aResourceMemory.getUsers(); - Enumeration userNames = usersTable.keys(); - while (userNames.hasMoreElements()) { - String userName = userNames.nextElement(); - JUser user = usersTable.get(userName); - - // Replace ,= character if it's a DN - userName = userName.replace("=", "#"); - userName = userName.replace(",", "#"); - jmxService.registerMBean(user, JonasObjectName.user(domainName, resourceName, userName)); - } - // get groups - Hashtable groupsTable = aResourceMemory.getGroups(); - Enumeration groupNames = groupsTable.keys(); - while (groupNames.hasMoreElements()) { - String groupName = groupNames.nextElement(); - Group group = groupsTable.get(groupName); - jmxService.registerMBean(group, JonasObjectName.group(domainName, resourceName, groupName)); - } - // get roles - Hashtable rolesTable = aResourceMemory.getRoles(); - Enumeration roleNames = rolesTable.keys(); - while (roleNames.hasMoreElements()) { - String roleName = roleNames.nextElement(); - Role role = rolesTable.get(roleName); - jmxService.registerMBean(role, JonasObjectName.role(domainName, resourceName, roleName)); - } - } - } - } - - /** - * Stop the Service. - */ - @Override - public void doStop() { - // jmxService may be null if the component deactivation is due to the unregistering of the jmxService - if (jmxService != null) { - // Remove JResources - try { - removeJResources(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot remove JResources", e); - } - - // Unregister MBean - jmxService.unregisterMBean(JonasObjectName.securityService(getDomainName())); - } - - // Unregister the security remote object (name is based on JOnAS server - // name). - try { - ictx.unbind(getJonasServerName() + REMOTE_RESOUCE); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot unbind remote resource for security access", e); - throw new ServiceException("Cannot unbind remote resource for security access", e); - } - - try { - for (Class interceptor : jrmpInterceptors) { - ConfigurationRepository.removeInterceptors("jrmp", interceptor); - } - jrmpInterceptors.clear(); - } catch (ConfigurationException e) { - throw new ServiceException("Cannot remove security interceptors for Carol", e); - } - logger.log(BasicLevel.INFO, "Security Service stopped"); - } - - /** - * Unregister all previously registered Resources MBeans. - * @throws Exception if error occurs - */ - private void removeJResources() throws Exception { - Enumeration resourcesEnum = jResources.getResources(); - while (resourcesEnum.hasMoreElements()) { - JResource aResource = resourcesEnum.nextElement(); - removeJResource(aResource.getName()); - } - } - - /** - * Return a resource by giving its name. - * @param name the wanted Resource - * @return a JResouce - */ - public JResource getJResource(final String name) { - return jResources.getJResource(name); - } - - /** - * Parse the xml file and create all the JResource. - * @throws ServiceException if a JResource can't be created - */ - private void createRealm() throws ServiceException { - - // Execute the digester for the parsing of the jonas-realm.xml file. - File configFile = null; - Reader reader = null; - try { - configFile = getConfigFile(); - reader = new FileReader(configFile); - } catch (FileNotFoundException e) { - logger.log(BasicLevel.ERROR, "Cannot find config file " + configFile); - throw new ServiceException(e.getMessage(), e); - } - - try { - JResourceManager resourceManager = JResourceManager.getInstance(); - resourceManager.addResources(jResources, reader, configFile.getPath()); - - } catch (Throwable e) { - String err = "Cannot add security resource from '" + configFile + "'"; - logger.log(BasicLevel.ERROR, err); - throw new ServiceException(err, e); - } - } - - /** - * Return a File object representing the jonas-realm.xml configuration file. - * @return a File object representing the jonas-realm.xml configuration file. - * @throws FileNotFoundException if the configuration file is not found. - */ - protected File getConfigFile() throws FileNotFoundException { - - if (this.addonConfig != null) { - return this.addonConfig.getConfigurationFile(REALM_CONFIG_FILENAME); - } - - String fileName = System.getProperty("jonas.base"); - fileName = fileName + File.separator + CONFIG_FILE; - File file = new File(fileName); - if (!file.exists()) { - String err = "Can't find configuration file : " + fileName; - throw new FileNotFoundException(err); - } - return (file); - } - - /** - * String representation of the JOnAS realm. - * @return the xml representation of the JOnAS realm - */ - public String toXML() { - return jResources.toXML(); - } - - /** - * Encrypt a string with an algorithm. - * @param string the string to encode - * @param algo algorithm to apply on the given string - * @return the encoded string - * @throws NoSuchAlgorithmException One reason could be a bad algorithm - */ - public String encryptPassword(final String string, final String algo) throws NoSuchAlgorithmException { - String encrypt = HashHelper.hashPassword(string, algo); - // Prefix with algorithm - return "{" + algo.toUpperCase() + "}" + encrypt; - } - - /** - * Check if the given algorithm is a valid algorithm. - * @param algo algorithm to apply on the given string - * @return true if it is a valid algorithm - */ - public boolean isValidAlgorithm(final String algo) { - boolean b = true; - try { - encryptPassword("test", algo); - } catch (NoSuchAlgorithmException nsae) { - b = false; - } - return b; - } - - /** - * Add JResources with a given xml configuration. - * @param xml xml representation of the resources to add - * @throws Exception if the resources can't be added - */ - public void addResources(final String xml) throws Exception { - try { - // No need to use the wrapper, because class loader hierarchy has been - // removed by OSGi. - JResourceManager resourceManager = JResourceManager.getInstance(); - if (!resourceManager.hasJmxService()) { - resourceManager.setJmxService(jmxService); - resourceManager.setDomainName(getDomainName()); - } - resourceManager.addResources(jResources, new StringReader(xml), ""); - } catch (Exception e1) { - String err = "Cannot add security resource from xml '" + xml + "'"; - logger.log(BasicLevel.ERROR, err); - throw new ServiceException(err, e1); - } - } - - /** - * Add a Memory resource. - * @param name the name of the JResourceMemory to create - * @throws Exception if the resource can't be added - */ - public void addJResourceMemory(final String name) throws Exception { - - // Build a new JResourceMemory - JResourceMemory jResourceMemory = new JResourceMemory(); - jResourceMemory.setSecurityService(this); - jResourceMemory.setJmxService(jmxService); - jResourceMemory.setDomainName(getDomainName()); - - jResourceMemory.setName(name); - - // Build xml - StringBuffer xml = new StringBuffer(JResources.HEADER_XML); - xml.append(""); - xml.append(""); - xml.append(jResourceMemory.toXML()); - xml.append(""); - xml.append(""); - - // Add the resource - addResources(xml.toString()); - - } - - /** - * Add a DS resource. - * @param name the name of the JResourceDS to create - * @param dsName Name of the datasource resource to use. - * @param userTable Name of table which have the username/password - * @param userTableUsernameCol Column of the username of the user table - * @param userTablePasswordCol Column of the password of the user table - * @param roleTable Name of table which have the username/role - * @param roleTableUsernameCol Column of the username of the role table - * @param roleTableRolenameCol Column of the role of the role table - * @param algorithm Default algorithm. If specified, the default is not - * 'clear' password - * @throws Exception if the resource can't be added - */ - public void addJResourceDS(final String name, final String dsName, final String userTable, - final String userTableUsernameCol, final String userTablePasswordCol, final String roleTable, - final String roleTableUsernameCol, final String roleTableRolenameCol, final String algorithm) throws Exception { - - // Build a new JResourceDS - JResourceDS jResourceDS = new JResourceDS(); - jResourceDS.setSecurityService(this); - jResourceDS.setJmxService(jmxService); - jResourceDS.setDomainName(getDomainName()); - - jResourceDS.setName(name); - jResourceDS.setDsName(dsName); - jResourceDS.setUserTable(userTable); - jResourceDS.setUserTableUsernameCol(userTableUsernameCol); - jResourceDS.setUserTablePasswordCol(userTablePasswordCol); - jResourceDS.setRoleTable(roleTable); - jResourceDS.setRoleTableUsernameCol(roleTableUsernameCol); - jResourceDS.setRoleTableRolenameCol(roleTableRolenameCol); - jResourceDS.setAlgorithm(algorithm); - - // Build xml - StringBuffer xml = new StringBuffer(JResources.HEADER_XML); - xml.append(""); - xml.append(""); - xml.append(jResourceDS.toXML()); - xml.append(""); - xml.append(""); - - // Add the resource - addResources(xml.toString()); - - } - - /** - * Add a LDAP resource. - * @param name the name of the JResourceLDAP to create - * @param initialContextFactory Initial context factory for the LDAp server - * @param providerUrl Url of the ldap server - * @param securityAuthentication Type of the authentication used during the - * authentication to the LDAP server - * @param securityPrincipal DN of the Principal(username). He can retrieve - * the information from the user - * @param securityCredentials Credential(password) of the principal - * @param securityProtocol Constant that holds the name of the environment - * property for specifying the security protocol to use. - * @param language Constant that holds the name of the environment property - * for specifying the preferred language to use with the service. - * @param referral Constant that holds the name of the environment property - * for specifying how referrals encountered by the service provider - * are to be processed. - * @param stateFactories Constant that holds the name of the environment - * property for specifying the list of state factories to use. - * @param authenticationMode Mode for validate the authentication - * (BIND_AUTHENTICATION_MODE or COMPARE_AUTHENTICATION_MODE) - * @param userPasswordAttribute Attribute in order to get the password from - * the ldap server - * @param userRolesAttribute Attribute in order to get the user role from - * the ldap server - * @param roleNameAttribute Attribute for the role name when performing a - * lookup on a role - * @param baseDN DN used for the lookup - * @param userDN DN used when searching the user DN. Override the baseDN if - * it is defined - * @param userSearchFilter Filter used when searching the user - * @param roleDN DN used when searching the role DN. Override the baseDN if - * it is defined - * @param roleSearchFilter Filter used when searching the role - * @param algorithm Default algorithm. If specified, the default is not - * 'clear' password - * @throws Exception if the resource can't be added - */ - public void addJResourceLDAP(final String name, final String initialContextFactory, final String providerUrl, - final String securityAuthentication, final String securityPrincipal, final String securityCredentials, - final String securityProtocol, final String language, final String referral, final String stateFactories, - final String authenticationMode, final String userPasswordAttribute, final String userRolesAttribute, - final String roleNameAttribute, final String baseDN, final String userDN, final String userSearchFilter, - final String roleDN, final String roleSearchFilter, final String algorithm) throws Exception { - - // Build a new JResourceLDAP - JResourceLDAP jResourceLDAP = new JResourceLDAP(); - jResourceLDAP.setSecurityService(this); - jResourceLDAP.setJmxService(jmxService); - jResourceLDAP.setDomainName(getDomainName()); - - jResourceLDAP.setName(name); - jResourceLDAP.setInitialContextFactory(initialContextFactory); - jResourceLDAP.setProviderUrl(providerUrl); - jResourceLDAP.setSecurityAuthentication(securityAuthentication); - jResourceLDAP.setSecurityPrincipal(securityPrincipal); - jResourceLDAP.setSecurityCredentials(securityCredentials); - jResourceLDAP.setSecurityProtocol(securityProtocol); - jResourceLDAP.setLanguage(language); - jResourceLDAP.setReferral(referral); - jResourceLDAP.setStateFactories(stateFactories); - jResourceLDAP.setAuthenticationMode(authenticationMode); - jResourceLDAP.setUserPasswordAttribute(userPasswordAttribute); - jResourceLDAP.setUserRolesAttribute(userRolesAttribute); - jResourceLDAP.setRoleNameAttribute(roleNameAttribute); - jResourceLDAP.setBaseDN(baseDN); - jResourceLDAP.setUserDN(userDN); - jResourceLDAP.setUserSearchFilter(userSearchFilter); - jResourceLDAP.setRoleDN(roleDN); - jResourceLDAP.setRoleSearchFilter(roleSearchFilter); - jResourceLDAP.setAlgorithm(algorithm); - - // Build xml - StringBuffer xml = new StringBuffer(JResources.HEADER_XML); - xml.append(""); - xml.append(""); - xml.append(jResourceLDAP.toXML()); - xml.append(""); - xml.append(""); - - // Add the resource - addResources(xml.toString()); - - } - - /** - * Bind the given resource with the given name and register with a new - * MBean. - * @param name resource name - * @param jResource resource - */ - public void bindResource(final String name, final JResource jResource) { - // bind the resource into the jndi - if (bindResourcesIntoJndi) { - try { - ictx.rebind(jResource.getName(), jResource); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "jResource " + jResource.getName() + " bound into the registry."); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot bind the resource '" + jResource.getName() + "' into JNDI", e); - } - } - - try { - // register security factory mbean - if (jResource instanceof JResourceMemory) { - jmxService - .registerModelMBean(jResource, JonasObjectName.securityMemoryFactory(getDomainName(), jResource.getName())); - } else if (jResource instanceof JResourceDS) { - jmxService.registerModelMBean(jResource, JonasObjectName.securityDatasourceFactory(getDomainName(), jResource - .getName())); - } else if (jResource instanceof JResourceLDAP) { - jmxService.registerModelMBean(jResource, JonasObjectName.securityLdapFactory(getDomainName(), jResource.getName())); - } - } catch (ServiceException se) { - logger.log(BasicLevel.ERROR, "JMX service not available", se); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can not register the MBean for the resource " + jResource.getName() + " : " - + e.getMessage()); - throw new ServiceException("Can not register the MBean for the resource " + jResource.getName() + " : " - + e.getMessage()); - } - - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImplMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImplMBean.java deleted file mode 100644 index 147e6a5528..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/JonasSecurityServiceImplMBean.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Bruno Michel, Guillaume Riviere - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal; - -import java.security.NoSuchAlgorithmException; - -/** - * MBean interface for Security Service Management - * MBean type: Standard - * MBean model: Inheritance (JonasSecurityServiceImpl) - * @author Bruno Michel, Guillaume Riviere - * @author Florent Benoit : add MBean methods - */ -public interface JonasSecurityServiceImplMBean { - - /** - * Encrypt a string with an algorithm - * @param string the string to encode - * @param algo algorithm to apply on the given string - * @return the encoded string - * @throws NoSuchAlgorithmException One reason could be a bad algorithm - */ - String encryptPassword(String string, String algo) throws NoSuchAlgorithmException; - - - /** - * Add JResources with a given xml configuration - * @param xml xml representation of the resources to add - * @throws Exception if the resources can't be added - */ - void addResources(String xml) throws Exception; - - /** - * Remove the Resource (memory, ldap, datasource,...) - * @param resourceName name of the resource - * @throws Exception if the resource name does not exist - */ - void removeJResource(String resourceName) throws Exception; - - /** - * Check if the given algorithm is a valid algorithm - * @param algo algorithm to apply on the given string - * @return true if it is a valid algorithm - */ - boolean isValidAlgorithm(String algo); - - /** - * Add a Memory resource - * @param name the name of the JResourceMemory to create - * @throws Exception if the resource can't be added - */ - void addJResourceMemory(String name) throws Exception; - - /** - * Add a DS resource - * @param name the name of the JResourceDS to create - * @param dsName Name of the datasource resource to use. - * @param userTable Name of table which have the username/password - * @param userTableUsernameCol Column of the username of the user table - * @param userTablePasswordCol Column of the password of the user table - * @param roleTable Name of table which have the username/role - * @param roleTableUsernameCol Column of the username of the role table - * @param roleTableRolenameCol Column of the role of the role table - * @param algorithm Default algorithm. If specified, the default is not 'clear' password - * @throws Exception if the resource can't be added - */ - void addJResourceDS(String name, - String dsName, - String userTable, - String userTableUsernameCol, - String userTablePasswordCol, - String roleTable, - String roleTableUsernameCol, - String roleTableRolenameCol, - String algorithm) throws Exception; - - - /** - * Add a LDAP resource - * @param name the name of the JResourceLDAP to create - * @param initialContextFactory Initial context factory for the LDAp server - * @param providerUrl Url of the ldap server - * @param securityAuthentication Type of the authentication used during the authentication to the LDAP server - * @param securityPrincipal DN of the Principal(username). He can retrieve the information from the user - * @param securityCredentials Credential(password) of the principal - * @param securityProtocol Constant that holds the name of the environment property for specifying the security protocol to use. - * @param language Constant that holds the name of the environment property for specifying the preferred language to use with the service. - * @param referral Constant that holds the name of the environment property for specifying how referrals encountered by the service provider are to be processed. - * @param stateFactories Constant that holds the name of the environment property for specifying the list of state factories to use. - * @param authenticationMode Mode for validate the authentication (BIND_AUTHENTICATION_MODE or COMPARE_AUTHENTICATION_MODE) - * @param userPasswordAttribute Attribute in order to get the password from the ldap server - * @param userRolesAttribute Attribute in order to get the user role from the ldap server - * @param roleNameAttribute Attribute for the role name when performing a lookup on a role - * @param baseDN DN used for the lookup - * @param userDN DN used when searching the user DN. Override the baseDN if it is defined - * @param userSearchFilter Filter used when searching the user - * @param roleDN DN used when searching the role DN. Override the baseDN if it is defined - * @param roleSearchFilter Filter used when searching the role - * @param algorithm Default algorithm. If specified, the default is not 'clear' password - * @throws Exception if the resource can't be added - */ - void addJResourceLDAP(String name, - String initialContextFactory, - String providerUrl, - String securityAuthentication, - String securityPrincipal, - String securityCredentials, - String securityProtocol, - String language, - String referral, - String stateFactories, - String authenticationMode, - String userPasswordAttribute, - String userRolesAttribute, - String roleNameAttribute, - String baseDN, - String userDN, - String userSearchFilter, - String roleDN, - String roleSearchFilter, - String algorithm) throws Exception; - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/PolicyProvider.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/PolicyProvider.java deleted file mode 100644 index a97cb6443c..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/PolicyProvider.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal; - -import javax.security.jacc.PolicyConfigurationFactory; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.security.jacc.JPolicy; -import org.ow2.jonas.lib.util.Log; - - -/** - * Helper class for initializing the JACC provider - * @author Florent Benoit - */ -public class PolicyProvider { - - /** - * Only internal constructor, as it is an utility class - */ - private PolicyProvider() { - - } - - /** - * Logger which is used - */ - private static Logger logger = null; - - /** - * Init the JACC configuration - * Defines in JACC Section 2 - * @throws SecurityException if JACC policy provider can not be set - */ - public static void init() throws SecurityException { - - if (logger == null) { - logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX); - } - - // Check if we have to use an existing policy provider - // Section 2.7 - - String javaPolicy = System.getProperty("javax.security.jacc.policy.provider"); - - LoaderManager lm = LoaderManager.getInstance(); - ClassLoader externalLoader = null; - try { - externalLoader = lm.getExternalLoader(); - } catch (Exception e) { - throw new SecurityException("cannot get Commonsloader: " + e); - } - - if (javaPolicy != null) { - try { - java.security.Policy policy = (java.security.Policy) externalLoader.loadClass(javaPolicy).newInstance(); - java.security.Policy.setPolicy(policy); - } catch (ClassNotFoundException cnfe) { - // problem with property value of classpath - throw new SecurityException(cnfe.getMessage()); - } catch (IllegalAccessException iae) { - // problem with policy class definition - throw new SecurityException(iae.getMessage()); - } catch (InstantiationException ie) { - // problem with policy instantiation - throw new SecurityException(ie.getMessage()); - } catch (ClassCastException cce) { - // Not instance of java.security.policy - throw new SecurityException(cce.getMessage()); - } catch (Exception e) { - // cannot load policy - throw new SecurityException("cannot load security policy: " + e); - } - logger.log(BasicLevel.INFO, "Using policy provider '" + javaPolicy + "'"); - } - - // Defines the JOnAS JACC provider if no provider is already defined - // Section 2.3 - String jaccFactoryProvider = System.getProperty("javax.security.jacc.PolicyConfigurationFactory.provider"); - if (jaccFactoryProvider == null) { - logger.log(BasicLevel.INFO, "Using JOnAS PolicyConfigurationFactory provider and JOnAS Policy provider"); - System.setProperty("javax.security.jacc.PolicyConfigurationFactory.provider", - "org.ow2.jonas.lib.security.jacc.PolicyConfigurationFactoryWrapper"); - // Add the JOnAS delegating policy provider - java.security.Policy.setPolicy(JPolicy.getInstance()); - } else { - logger.log(BasicLevel.INFO, "Using factory '" + jaccFactoryProvider - + "' as PolicyConfigurationFactory provider"); - } - - // Init JACC - // ------------------------------------------- - - - IExecution exec = new IExecution() { - public Void execute() throws Exception { - PolicyConfigurationFactory.getPolicyConfigurationFactory(); - return null; - } - }; - - // Execute - - ExecutionResult result = RunnableHelper.execute(externalLoader, exec); - - // Throw a SecurityException if something was wrong - if (result.hasException()) { - Exception e = result.getException(); - throw new SecurityException("Error when trying to get the PolicyConfigurationFactory object : '" - + e.getMessage() + "'.", e); - - } - - // TODO : Register Context Handler - - - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/SecurityServiceException.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/SecurityServiceException.java deleted file mode 100644 index d83b822d8f..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/SecurityServiceException.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal; - - -/** - * SecurityService Exception - * - * @author Guillaume Sauthier - */ -public class SecurityServiceException extends Exception { - - /** - * @param message Exception message - */ - public SecurityServiceException(String message) { - super(message); - } - - /** - * @param cause cause of the Exception - */ - public SecurityServiceException(Throwable cause) { - super(cause); - } - - /** - * @param message Exception message - * @param cause cause of the Exception - */ - public SecurityServiceException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/AbstractJResource.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/AbstractJResource.java deleted file mode 100644 index 0667ed46e3..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/AbstractJResource.java +++ /dev/null @@ -1,276 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import java.io.Serializable; -import java.util.Hashtable; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.naming.Referenceable; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.management.javaee.ManagedObject; -import org.ow2.jonas.lib.management.reconfig.XMLConfigurationData; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.internal.realm.principal.Group; -import org.ow2.jonas.security.internal.realm.principal.Role; -import org.ow2.jonas.security.internal.realm.principal.User; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.principal.JUser; - -/** - * This class implements JOnAS realm factory objects. It is build from an xml - * file by the security service of JOnAS. - * @author Florent Benoit - */ -public abstract class AbstractJResource extends ManagedObject implements Serializable, Referenceable, JResource { - - /** - * Name of this resource (realm name). - */ - private String name = null; - - /** - * The logger used in JOnAS. - */ - private static Logger logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX); - - /** - * Hashtable used to cache the users (speed up search). - */ - private Hashtable users = null; - - /** - * Value used as sequence number by reconfiguration notifications. - */ - private long sequenceNumber; - - /** - * Reference to the security service. - */ - private SecurityService securityService = null; - - /** - * Reference to the jmx service. - */ - private JmxService jmxService = null; - - /** - * name of the management domain. - */ - private String domainName = null; - - /** - * Constructor. - * @throws Exception if a service can't be retrieved - */ - public AbstractJResource() throws Exception { - users = new Hashtable(); - sequenceNumber = 0; - } - - public void setDomainName(final String domain) { - domainName = domain; - } - - public void setJmxService(final JmxService jmx) { - jmxService = jmx; - } - - public void setSecurityService(final SecurityService sec) { - securityService = sec; - } - - /** - * @param name the resource (realm) name - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return the resource (realm) name - */ - public String getName() { - return name; - } - - /** - * @return the users table - */ - public Hashtable getUsers() { - return users; - } - - /** - * Return a sequence number and increase this number. - * @return a sequence number - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } - - - /** - * Save the resource configuration. - */ - public void saveConfig() { - - if (securityService != null) { - // Retrieve the xml value by the Security service - String xml = securityService.toXML(); - XMLConfigurationData data = new XMLConfigurationData(xml); - - // Send a reconfiguration notification to the listener MBean - sendReconfigNotification(getSequenceNumber(), name, data); - sendSaveNotification(getSequenceNumber(), name); - - // rebind this resource into the jndi - try { - Context ictx = new InitialContext(); - ictx.rebind(getName(), this); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "jResource " + getName() + " is rebind into the registry."); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot rebind factory to the jndi : '" + e.getMessage() + "'"); - } - - } - } - - /** - * @return Returns the logger. - */ - public static Logger getLogger() { - return logger; - } - - /** - * @param logger The logger to set. - */ - public static void setLogger(final Logger logger) { - AbstractJResource.logger = logger; - } - - /** - * @param users the users table - */ - public void setUsers(final Hashtable users) { - this.users = users; - } - - /** - * - */ - public void clearCache() { - setUsers(new Hashtable()); - } - - /** - * Create and register an MBean for the user. - * @param user the user to be managed - * @throws MalformedObjectNameException if we could not construct ObjectName for the user - */ - protected void registerUserMBean(final User user) throws MalformedObjectNameException { - if (jmxService != null) { - String userName = user.getName(); - ObjectName on = JonasObjectName.user(domainName, getName(), userName); - jmxService.registerMBean(user, on); - } - } - - /** - * Unregister MBean associated to a user. - * @param resourceName - * @param userName - * @throws MalformedObjectNameException if MBean is not unregistered - */ - protected void unregisterUserMBean(final String resourceName, final String userName) throws MalformedObjectNameException { - if (jmxService != null) { - jmxService.unregisterMBean(JonasObjectName.user(domainName, resourceName, userName)); - } - } - - /** - * Create and register an MBean for the group. - * @param group the group to be managed - * @throws MalformedObjectNameException if MBean is not created - */ - protected void registerGroupMBean(final Group group) throws MalformedObjectNameException { - if (jmxService != null) { - String groupName = group.getName(); - ObjectName on = JonasObjectName.group(domainName, getName(), groupName); - jmxService.registerMBean(group, on); - } - } - - /** - * Unregister MBean associated to a group. - * @param resourceName - * @param groupName - * @throws MalformedObjectNameException could not construct ObjectName for the user - */ - protected void unregisterGroupMBean(final String resourceName, final String groupName) throws MalformedObjectNameException { - if (jmxService != null) { - jmxService.unregisterMBean(JonasObjectName.group(domainName, resourceName, groupName)); - } - } - - /** - * Create and register an MBean for this role. - * @param role the role to be managed - * @throws MalformedObjectNameException not construct ObjectName for this role - */ - protected void registerRoleMBean(final Role role) throws MalformedObjectNameException { - if (jmxService != null) { - String roleName = role.getName(); - ObjectName on = JonasObjectName.role(domainName, getName(), roleName); - jmxService.registerMBean(role, on); - } - } - - /** - * - * @param resourceName - * @param roleName - * @throws MalformedObjectNameException could not construct ObjectName for this role - */ - protected void unregisterRoleMBean(final String resourceName, final String roleName) throws MalformedObjectNameException { - if (jmxService != null) { - jmxService.unregisterMBean(JonasObjectName.role(domainName, resourceName, roleName)); - } - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDS.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDS.java deleted file mode 100644 index 75cd883731..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDS.java +++ /dev/null @@ -1,720 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import java.security.NoSuchAlgorithmException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.sql.DataSource; - -import org.ow2.jonas.security.internal.realm.lib.HashHelper; -import org.ow2.jonas.security.internal.realm.principal.User; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This class extends the JResource class for the Datasource implementation. - * @author Florent Benoit - */ -public class JResourceDS extends AbstractJResource { - - /** - * Type of the factory - */ - private static final String FACTORY_TYPE = "org.ow2.jonas.security.realm.factory.JResourceDS"; - - /** - * Name of the factory - */ - private static final String FACTORY_NAME = "org.ow2.jonas.security.realm.factory.JResourceDSFactory"; - - /** - * Name of the datasource resource to use. - */ - private String dsName = null; - - /** - * Name of table which have the username/password - */ - private String userTable = null; - - /** - * Column of the username of the user table - */ - private String userTableUsernameCol = null; - - /** - * Column of the password of the user table - */ - private String userTablePasswordCol = null; - - /** - * Name of table which have the username/role - */ - private String roleTable = null; - - /** - * Column of the username of the role table - */ - private String roleTableUsernameCol = null; - - /** - * Column of the role of the role table - */ - private String roleTableRolenameCol = null; - - /** - * Default algorithm. If specified, the default is not 'clear' password - */ - private String algorithm = null; - - /** - * Datasource to use - */ - private DataSource dataSource = null; - - /** - * User defined query for retrieving principals - */ - private String userPrincipalsQuery = null; - - /** - * User defined query for retrieving roles - */ - private String userRolesQuery = null; - - /** - * Constructor. Use the super constructor - * @throws Exception if super constructor fail - */ - public JResourceDS() throws Exception { - super(); - - } - - /** - * Set the name of the resource to use - * @param dsName name of the resource - */ - public void setDsName(String dsName) { - this.dsName = dsName; - } - - /** - * Set the name of the table which have the username/password - * @param userTable name of the table which have the username/password - */ - public void setUserTable(String userTable) { - this.userTable = userTable; - } - - /** - * Set the name of the column of the username of the user table - * @param userTableUsernameCol name of the column of the username of the - * user table - */ - public void setUserTableUsernameCol(String userTableUsernameCol) { - this.userTableUsernameCol = userTableUsernameCol; - } - - /** - * Set the name of column of the password of the user table - * @param userTablePasswordCol name of column of the password of the user - * table - */ - public void setUserTablePasswordCol(String userTablePasswordCol) { - this.userTablePasswordCol = userTablePasswordCol; - } - - /** - * Set the name of table which have the username/role - * @param roleTable name of table which have the username/role - */ - public void setRoleTable(String roleTable) { - this.roleTable = roleTable; - } - - /** - * Set the name of the column of the username of the role table - * @param roleTableUsernameCol name of the column of the username of the - * role table - */ - public void setRoleTableUsernameCol(String roleTableUsernameCol) { - this.roleTableUsernameCol = roleTableUsernameCol; - } - - /** - * Set the name of the column of the role of the role table - * @param roleTableRolenameCol name of the column of the role of the role - * table - */ - public void setRoleTableRolenameCol(String roleTableRolenameCol) { - this.roleTableRolenameCol = roleTableRolenameCol; - } - - /** - * Set the default algorithm to use - * @param algorithm algorithm to be used - */ - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - /** - * Set the user defined query for retrieving principals - * @param userPrincipalsQuery the user defined query for retrieving - * principals - */ - public void setUserPrincipalsQuery(String userPrincipalsQuery) { - this.userPrincipalsQuery = userPrincipalsQuery; - } - - /** - * Set the user defined query for retrieving roles - * @param userRolesQuery the user defined query for retrieving roles - */ - public void setUserRolesQuery(String userRolesQuery) { - this.userRolesQuery = userRolesQuery; - } - - /** - * Get the name of the resource to use - * @return name of the resource - */ - public String getDsName() { - return dsName; - } - - /** - * Get the name of the table which have the username/password - * @return name of the table which have the username/password - */ - public String getUserTable() { - return userTable; - } - - /** - * Get the name of the column of the username of the user table - * @return name of the column of the username of the user table - */ - public String getUserTableUsernameCol() { - return userTableUsernameCol; - } - - /** - * Get the name of column of the password of the user table - * @return name of column of the password of the user table - */ - public String getUserTablePasswordCol() { - return userTablePasswordCol; - } - - /** - * Get the name of table which have the username/role - * @return name of table which have the username/role - */ - public String getRoleTable() { - return roleTable; - } - - /** - * Get the name of the column of the username of the role table - * @return name of the column of the username of the role table - */ - public String getRoleTableUsernameCol() { - return roleTableUsernameCol; - } - - /** - * Get the name of the column of the role of the role table - * @return name of the column of the role of the role table - */ - public String getRoleTableRolenameCol() { - return roleTableRolenameCol; - } - - /** - * Get the default algorithm - * @return the default algorithm - */ - public String getAlgorithm() { - return algorithm; - } - - /** - * Gets the user defined query for retrieving principals - * @return the user defined query for retrieving principals - */ - public String setUserPrincipalsQuery() { - return userPrincipalsQuery; - } - - /** - * Gets the user defined query for retrieving roles - * @return the user defined query for retrieving roles - */ - public String setUserRolesQuery() { - return userRolesQuery; - } - - /** - * Check if a user is found and return it - * @param username the wanted user name - * @return the user found or null - * @throws JResourceException if there is a SQLException - */ - public JUser findUser(String username) throws JResourceException { - - if (username == null) { - return null; - } - - // Build new user - User user = new User(); - - Connection connection = getConnection(); - - user.setName(username); - - // Get the password of the user - ResultSet rs = null; - String password = null; - try { - PreparedStatement usrStmt = userStatement(connection, username); - rs = usrStmt.executeQuery(); - if (rs == null || !rs.next()) { - if (rs != null) { - rs.close(); - } - usrStmt.close(); - closeConnection(connection); - throw new JResourceException("No user found with username '" + username + "'."); - } - - int records = rs.getRow(); - if (records > 1) { - getLogger().log(BasicLevel.ERROR, "There are more than one user with the name" + username); - } - password = rs.getString(1).trim(); - rs.close(); - usrStmt.close(); - } catch (SQLException sqle) { - closeConnection(connection); - throw new JResourceException(sqle.getMessage(), sqle); - } - - if (password == null) { - closeConnection(connection); - return null; - } - user.setPassword(password); - - // Get the roles of the user - try { - PreparedStatement rlStmt = roleStatement(connection, username); - rs = rlStmt.executeQuery(); - - while (rs.next()) { - String role = rs.getString(1).trim(); - user.addRole(role); - } - rs.close(); - rlStmt.close(); - } catch (SQLException sqle) { - closeConnection(connection); - throw new JResourceException(sqle.getMessage(), sqle); - } - - // Commit the connection if it is not automatic - try { - if (!connection.getAutoCommit()) { - connection.commit(); - } - } catch (SQLException sqle) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Cannot commit on the current connection : : '" - + sqle.getMessage() + "'"); - } - } - closeConnection(connection); - return user; - } - - /** - * Check if the given credential is the right credential for the given user - * @param user user to check its credentials - * @param credentials the given credentials - * @return true if the credential is valid for this user - */ - public boolean isValidUser(JUser user, String credentials) { - - boolean validated = false; - - //Get algorithm and hashpassword - String pass = user.getHashPassword().getPassword(); - String algo = user.getHashPassword().getAlgorithm(); - - // Crypt password ? - if (algo != null) { - try { - validated = HashHelper.hashPassword(credentials, algo) - .equalsIgnoreCase(pass); - } catch (NoSuchAlgorithmException nsae) { - getLogger().log( - BasicLevel.ERROR, - "Can't make a password with the algorithm " + algo - + ". " + nsae.getMessage()); - } - } else if ((algorithm != null) && (!algorithm.equals(""))) { - // Encode password with the specified algorithm (no clear) - try { - validated = HashHelper.hashPassword(credentials, algorithm) - .equalsIgnoreCase(pass); - } catch (NoSuchAlgorithmException nsae) { - getLogger().log( - BasicLevel.ERROR, - "Can't make a password with the algorithm " + algorithm - + ". " + nsae.getMessage()); - } - } else { - // clear password - validated = credentials.equals(pass); - } - return validated; - } - - /** - * Get all the roles (from the roles and from the groups) of the given user - * @param user the given user - * @return the array list of all the roles for a given user - * @throws JResourceException if it fails - */ - public ArrayList getArrayListCombinedRoles(JUser user) - throws JResourceException { - - ArrayList allCombinedRoles = new ArrayList(); - - // Return empty array if user null - if (user == null) { - return allCombinedRoles; - } - // Add all user roles - String[] userRoles = user.getArrayRoles(); - for (int r = 0; r < userRoles.length; r++) { - String roleName = userRoles[r]; - if (!allCombinedRoles.contains(roleName)) { - allCombinedRoles.add(roleName); - } - } - user.setCombinedRoles(allCombinedRoles); - - return allCombinedRoles; - } - - /** - * String representation of the MemoryRealm - * @return the xml representation of the MemoryRealm - */ - public String toXML() { - StringBuffer xml = new StringBuffer(" "); - return xml.toString(); - } - - /** - * The string representation of this realm is the XML - * @return XML representation - */ - public String toString() { - return this.toXML(); - } - - /** - * Retrieves the Reference of the object. The Reference contains the factory - * used to create this object and the optional parameters used to configure - * the factory. - * @return the non-null Reference of the object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - // Build the reference to the factory FACTORY_TYPE - Reference reference = new Reference(FACTORY_TYPE, FACTORY_NAME, null); - - // Add ref addr - reference.add(new StringRefAddr("name", getName())); - reference.add(new StringRefAddr("dsName", dsName)); - reference.add(new StringRefAddr("userTable", userTable)); - reference.add(new StringRefAddr("userTableUsernameCol", - userTableUsernameCol)); - reference.add(new StringRefAddr("userTablePasswordCol", - userTablePasswordCol)); - reference.add(new StringRefAddr("roleTable", roleTable)); - reference.add(new StringRefAddr("roleTableUsernameCol", - roleTableUsernameCol)); - reference.add(new StringRefAddr("roleTableRolenameCol", - roleTableRolenameCol)); - reference.add(new StringRefAddr("userPrincipalsQuery", - userPrincipalsQuery)); - reference.add(new StringRefAddr("userRolesQuery", userRolesQuery)); - reference.add(new StringRefAddr("algorithm", algorithm)); - - return reference; - } - - /** - * Try to close the given connection - * @param c the connection to close - */ - private void closeConnection(Connection c) { - if (c == null) { - return; - } - try { - c.close(); - } catch (Exception e) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Can not close the connection"); - } - } - - } - - /** - * Get a connection from the dataSource - * @return the connection from the dataSource - * @throws JResourceException if an SQLException is thrown by - * dataSource.getConnection() - */ - private Connection getConnection() throws JResourceException { - - // If no dataSource, get an instance - if (dataSource == null) { - // Finds DataSource from JNDI - Context initialContext = null; - try { - initialContext = new InitialContext(); - dataSource = (DataSource) initialContext.lookup(dsName); - } catch (Exception e) { - String err = "Cannot find resource " + dsName - + " in the registry " + e.getMessage(); - getLogger().log(BasicLevel.ERROR, err); - throw new JResourceException(err, e); - } - } - - // Retrieve connection from the datasource - Connection c = null; - try { - c = dataSource.getConnection(); - } catch (SQLException sqle) { - getLogger().log(BasicLevel.ERROR, sqle.getMessage()); - throw new JResourceException(sqle.getMessage(), sqle); - } - - return c; - } - - /** - * Return the user query. It select the password for a specific user - * @return the user query - */ - private String userQuery() { - - if (userPrincipalsQuery != null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log( - BasicLevel.DEBUG, - "Return user defined SQL query for user" - + userPrincipalsQuery); - } - return userPrincipalsQuery; - } else { - - /* - * SELECT userTablePasswordCol FROM userTable WHERE - * userTableUsernameCol = ? - */ - StringBuffer stringBuffer = new StringBuffer("SELECT "); - stringBuffer.append(userTablePasswordCol); - stringBuffer.append(" FROM "); - stringBuffer.append(userTable); - stringBuffer.append(" WHERE "); - stringBuffer.append(userTableUsernameCol); - stringBuffer.append(" = ?"); - return (stringBuffer.toString()); - } - } - - /** - * Return the roles query. It select the roles for a specific user - * @return the roles query - */ - private String rolesOfUserQuery() { - - if (userRolesQuery != null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log( - BasicLevel.DEBUG, - "Return user defined SQL query for roles" - + userRolesQuery); - } - return userRolesQuery; - } else { - - /* - * SELECT r.roleTableRolenameCol FROM userTable u, roleTable r WHERE - * u.userTableUsernameCol = r.roleTableUsernameCol AND - * u.userTableUsernameCol = ? - */ - - StringBuffer stringBuffer = new StringBuffer("SELECT r."); - stringBuffer.append(roleTableRolenameCol); - stringBuffer.append(" FROM "); - stringBuffer.append(userTable); - stringBuffer.append(" u, "); - stringBuffer.append(roleTable); - stringBuffer.append(" r WHERE u."); - stringBuffer.append(userTableUsernameCol); - stringBuffer.append(" = r."); - stringBuffer.append(roleTableUsernameCol); - stringBuffer.append(" AND u."); - stringBuffer.append(userTableUsernameCol); - stringBuffer.append(" = ?"); - return stringBuffer.toString(); - } - } - - /** - * Return a statement for the given username by using the userQuery query - * @param connection connection to use - * @param username the given user - * @return a statement for the given user - * @throws SQLException if the SQL statement fails - */ - private PreparedStatement userStatement(Connection connection, - String username) throws SQLException { - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Creating user statement for the user '" + username + "'"); - } - - PreparedStatement userStatement = connection.prepareStatement(userQuery()); - - userStatement.setString(1, username); - return userStatement; - } - - /** - * Return a statement for the given username by using the rolesOfUserQuery - * query - * @param connection connection to use - * @param username the given user - * @return a roles of user statement for the given user - * @throws SQLException if the SQL statement fails - */ - private PreparedStatement roleStatement(Connection connection, - String username) throws SQLException { - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Creating role statement for the user " + username + "'"); - } - PreparedStatement roleStatement = connection.prepareStatement(rolesOfUserQuery()); - - roleStatement.setString(1, username); - - return roleStatement; - } - - /** - * Remove all the Mbeans used by this resource - * @throws JResourceException if the MBeans can not be removed - */ - public void removeMBeans() throws JResourceException { - //no MBeans - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDSMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDSMBean.java deleted file mode 100644 index 5bbd5dbd00..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceDSMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -/** - * Define the methods for the MBean - * @author Florent Benoit - */ -public class JResourceDSMBean extends JResourceMBean { - - public JResourceDSMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAP.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAP.java deleted file mode 100644 index 68901e1c91..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAP.java +++ /dev/null @@ -1,1198 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import java.security.NoSuchAlgorithmException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Vector; - -import javax.naming.AuthenticationException; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.NameParser; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.InitialDirContext; -import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; - -import org.ow2.jonas.security.internal.realm.lib.HashHelper; -import org.ow2.jonas.security.internal.realm.principal.LDAPUser; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This class extends the JResource class for the LDAP implementation. - * @author Florent Benoit - * @author Emmanuel Rias (12/03 some improvements) - */ -public class JResourceLDAP extends AbstractJResource { - - /** - * Type of the factory - */ - private static final String FACTORY_TYPE = "org.ow2.jonas.security.realm.factory.JResourceLDAP"; - - /** - * Name of the factory - */ - private static final String FACTORY_NAME = "org.ow2.jonas.security.realm.factory.JResourceLDAPFactory"; - - /** - * Bind authentication mode. Bind to the ldap server with the l/p given by - * the user by the servlet - */ - private static final String BIND_AUTHENTICATION_MODE = "bind"; - - /** - * Compare authentication mode. Retrieve password from the ldap server with - * the given login and compare the password retrived with the password given - * by the user - */ - private static final String COMPARE_AUTHENTICATION_MODE = "compare"; - - /** - * Initial context factory for the LDAp server - */ - private String initialContextFactory = null; - - /** - * Url of the ldap server - */ - private String providerUrl = null; - - /** - * Type of the authentication used during the authentication to the LDAP - * server - */ - private String securityAuthentication = null; - - /** - * DN of the Principal(username). He can retrieve the information from the - * user - */ - private String securityPrincipal = null; - - /** - * Credential(password) of the principal - */ - private String securityCredentials = null; - - /** - * Constant that holds the name of the environment property for specifying - * the security protocol to use. - */ - private String securityProtocol = null; - - /** - * Constant that holds the name of the environment property for specifying - * the preferred language to use with the service. - */ - private String language = null; - - /** - * Constant that holds the name of the environment property for specifying - * how referrals encountered by the service provider are to be processed. - */ - private String referral = null; - - /** - * Constant that holds the name of the environment property for specifying - * the list of state factories to use. - */ - private String stateFactories = null; - - /** - * Mode for validate the authentication (BIND_AUTHENTICATION_MODE or - * COMPARE_AUTHENTICATION_MODE) - */ - private String authenticationMode = null; - - /** - * Attribute in order to get the password from the ldap server - */ - private String userPasswordAttribute = null; - - /** - * Attribute in order to get the user role from the ldap server - */ - private String userRolesAttribute = null; - - /** - * Attribute for the role name when performing a lookup on a role - */ - private String roleNameAttribute = null; - - /** - * DN used for the lookup - */ - private String baseDN = null; - - /** - * DN used when searching the user DN. Override the baseDN if it is defined - */ - private String userDN = null; - - /** - * Filter used when searching the user - */ - private String userSearchFilter = null; - - /** - * DN used when searching the role DN. Override the baseDN if it is defined - */ - private String roleDN = null; - - /** - * Filter used when searching the role - */ - private String roleSearchFilter = null; - - /** - * Leave role DN empty ? - */ - private static final String ROLEDN_EMPTY = "EMPTY"; - - /** - * Default algorithm. If specified, the default is not 'clear' password - */ - private String algorithm = null; - - /** - * Constructor : use the super constructor - * @throws Exception if the super constructor fail - */ - public JResourceLDAP() throws Exception { - super(); - } - - /** - * Check if a user is found and return it - * @param username the wanted user name - * @return the user found or null - * @throws JResourceException if there is a NamingException - */ - public JUser findUser(String username) throws JResourceException { - - // No username. failed - if (username == null) { - return null; - } - - // User to return - LDAPUser user = new LDAPUser(); - user.setName(username); - try { - - // Attributes for performing the search - DirContext dirContext = getDirContext(); - SearchControls sctls = new SearchControls(); - - String[] attributes = null; - if (authenticationMode.equals(COMPARE_AUTHENTICATION_MODE)) { - attributes = new String[] {userPasswordAttribute, userRolesAttribute}; - } else { - attributes = new String[0]; - } - sctls.setReturningAttributes(attributes); - sctls.setSearchScope(SearchControls.SUBTREE_SCOPE); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "userDN = '" + userDN + "'"); - getLogger().log(BasicLevel.DEBUG, "baseDN = '" + baseDN + "'"); - } - - String lookupUserDN = null; - // DN of the user. If no specific user DN, use the baseDN - if (userDN != null && !userDN.equals("")) { - lookupUserDN = userDN.concat(",").concat(baseDN); - } else { - lookupUserDN = baseDN; - } - Object[] arguments = {username}; - lookupUserDN = MessageFormat.format(lookupUserDN, arguments); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "lookupUserDN = '" + lookupUserDN + "'"); - } - - // Search the DN with the user filter with the specific argument and - // specific search controls - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "search : lookupUserDN = '" + lookupUserDN + "', searchFilter = '" - + userSearchFilter + "', username = '" + username + "'"); - } - NamingEnumeration answer = dirContext - .search(lookupUserDN, userSearchFilter, new Object[] {username}, sctls); - // No answer - if (answer == null || !answer.hasMore()) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - if (answer == null) { - getLogger().log(BasicLevel.DEBUG, "answer is null"); - } else { - getLogger().log(BasicLevel.DEBUG, "no anwser"); - } - } - return null; - } - - // Get first answer - SearchResult firstAnswer = (SearchResult) answer.next(); - // More than one answer. Not so good. - if (answer.hasMore()) { - return null; - } - - // Build full User DN - NameParser nameParser = dirContext.getNameParser(""); - Name contextName = nameParser.parse(dirContext.getNameInNamespace()); - - // Add the lookupUserDN to the context name -> baseDN - Name baseDNName = contextName.addAll(nameParser.parse(lookupUserDN)); - - // Add the uid retrieve from the search to the baseDN --> user DN - Name userFullDN = baseDNName.addAll(nameParser.parse(firstAnswer.getName())); - user.setDN(userFullDN.toString()); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "DN found : '" + userFullDN + "'"); - } - - // Get the user attributes - Attributes userAttributes = firstAnswer.getAttributes(); - if (userAttributes == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "No user attributes found"); - } - return null; - } - - String password = null; - // Retrieve password if in compare mode - if (authenticationMode.equals(COMPARE_AUTHENTICATION_MODE)) { - password = readValueFromAttribute(userPasswordAttribute, userAttributes); - if (password != null) { - user.setPassword(password); - } - } - - // Add the roles which are found from the user - String roles = readValuesFromAttribute(userRolesAttribute, userAttributes); - user.setRoles(roles); - - } catch (javax.naming.NamingException ne) { - throw new JResourceException("Could not find user :" + ne.getMessage()); - } - return user; - } - - /** - * Check if the given user with the given credential is a valid user - * @param user the given user - * @param credentials credential of the user - * @return true if the user is valid - */ - public boolean isValidUser(JUser user, String credentials) { - - // null password ... can't authenticate - if (credentials == null || user == null) { - return false; - } - - // Choose the right method - if (authenticationMode.equals(COMPARE_AUTHENTICATION_MODE)) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Compare mode"); - } - return isValidUserCompare(user, credentials); - } else if (authenticationMode.equals(BIND_AUTHENTICATION_MODE)) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Bind mode"); - } - return isValidUserBind(user, credentials); - } else { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "No authentication mode found, return false"); - } - return false; - } - - } - - /** - * Check if the given user with the given credential is a valid user. Check - * is done by binding to the LDAP server with the specific - * principal/credential. - * @param user the given user - * @param credentials credential of the user - * @return true if the user is valid - */ - public boolean isValidUserBind(JUser user, String credentials) { - - // Get the DN of the ldap user - if (!(user instanceof LDAPUser)) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Not instance of LDAPUser"); - } - return false; - } - - String dn = ((LDAPUser) user).getDN(); - if (dn == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "No DN found in User"); - } - return false; - } - - //Make our env - Hashtable env = getEnvInitialDirContext(); - env.put(Context.SECURITY_PRINCIPAL, dn); - env.put(Context.SECURITY_CREDENTIALS, credentials); - - boolean validated = false; - try { - DirContext dirContext = new InitialDirContext(env); - validated = true; - dirContext.close(); - } catch (AuthenticationException e) { - // not validated - getLogger().log(BasicLevel.ERROR, "Can't make an initial dir context : " + e.getMessage()); - } catch (NamingException ne) { - // not validated - getLogger().log(BasicLevel.ERROR, "Naming exception " + ne.getMessage()); - } - return validated; - } - - /** - * Check if the given user with the given credential is a valid user. Check - * is done by comparing the given credential with the credential which is - * retrieved from the LDAP server. - * @param user the given user - * @param credentials credential of the user - * @return true if the user is valid - */ - public boolean isValidUserCompare(JUser user, String credentials) { - - boolean validated = false; - - if (user != null && user.getHashPassword() == null) { - // Don't use stringbuffer, error case - String errMsg = "No password for the user so it cannot perform a check."; - errMsg += " Check that you are using the correct mode ('compare' or 'bind')."; - errMsg += " By using compare mode, the anonymous user cannot retrieved password in many cases."; - getLogger().log(BasicLevel.ERROR, errMsg); - return validated; - } - - //Get algorithm and hashpassword - String pass = user.getHashPassword().getPassword(); - String algo = user.getHashPassword().getAlgorithm(); - - // Crypt password ? - if (algo != null && pass != null) { - try { - validated = HashHelper.hashPassword(credentials, algo).equalsIgnoreCase(pass); - } catch (NoSuchAlgorithmException nsae) { - getLogger().log(BasicLevel.ERROR, "Can't make a password with the algorithm " + algo + ". " - + nsae.getMessage()); - } - } else if ((algorithm != null) && (!algorithm.equals(""))) { - // Encode password with the specified algorithm (no clear) - try { - validated = HashHelper.hashPassword(credentials, algorithm).equalsIgnoreCase(pass); - } catch (NoSuchAlgorithmException nsae) { - getLogger().log(BasicLevel.ERROR, "Can't make a password with the algorithm " + algorithm + ". " - + nsae.getMessage()); - } - } else { - // clear - validated = credentials.equals(pass); - } - return validated; - } - - /** - * Get all the roles (from the roles and from the groups) of the given user - * @param user the given user - * @return the array list of all the roles for a given user - * @throws JResourceException if there is a naming exception - */ - public ArrayList getArrayListCombinedRoles(JUser user) throws JResourceException { - - ArrayList allCombinedRoles = new ArrayList(); - // Return empty array if user null - if (user == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "User is empty, return empty array of roles"); - } - return allCombinedRoles; - } - - // Add all user roles found with the user ldap entry - String[] userRoles = user.getArrayRoles(); - for (int r = 0; r < userRoles.length; r++) { - String roleName = userRoles[r]; - if (!allCombinedRoles.contains(roleName)) { - allCombinedRoles.add(roleName); - } - } - - // Add roles found in ldap - if (!(user instanceof LDAPUser)) { - return allCombinedRoles; - } - String dn = ((LDAPUser) user).getDN(); - - // No valid info - if (dn == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "DN of user is empty, return empty array of roles"); - } - return allCombinedRoles; - } - - try { - // Attributes for performing the search - DirContext dirContext = getDirContext(); - SearchControls sctls = new SearchControls(); - - String[] attributes = new String[] {roleNameAttribute}; - sctls.setReturningAttributes(attributes); - sctls.setSearchScope(SearchControls.SUBTREE_SCOPE); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "roleDN = '" + roleDN + "'"); - getLogger().log(BasicLevel.DEBUG, "baseDN = '" + baseDN + "'"); - } - - // DN of the role. If no specific role DN, use the baseDN - String lookupRoleDN = null; - if ((roleDN != null) && (!roleDN.equals(""))) { - if (ROLEDN_EMPTY.equals(roleDN)) { - // No role DN for this case - lookupRoleDN = ""; - } else { - lookupRoleDN = roleDN.concat(",").concat(baseDN); - } - } else { - lookupRoleDN = baseDN; - } - - // Search the DN with the role filter with the specific argument and - // specific search controls - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "search with lookupRoleDN = '" + lookupRoleDN + "', rolesearchFilter = '" - + roleSearchFilter + "', dn = '" + dn + "'"); - } - - NamingEnumeration answers = dirContext.search(lookupRoleDN, roleSearchFilter, new Object[] {dn}, sctls); - - if (answers == null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "answer is null"); - } - return allCombinedRoles; - } - - Vector vRoles = new Vector(); - while (answers.hasMore()) { - SearchResult answer = (SearchResult) answers.next(); - Attributes roleAttributes = answer.getAttributes(); - if (roleAttributes == null) { - continue; - } - addValueFromAttributeToVector(roleNameAttribute, roleAttributes, vRoles); - } - - for (Enumeration e = vRoles.elements(); e.hasMoreElements();) { - String roleName = (String) e.nextElement(); - if (!allCombinedRoles.contains(roleName)) { - allCombinedRoles.add(roleName); - } - } - } catch (javax.naming.NamingException ne) { - throw new JResourceException("Could not find roles from the user :" + ne.getMessage()); - } - user.setCombinedRoles(allCombinedRoles); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - StringBuffer rolesStr = new StringBuffer(); - for (Iterator it = allCombinedRoles.iterator(); it.hasNext();) { - rolesStr.append((String) it.next()); - rolesStr.append(","); - } - getLogger().log(BasicLevel.DEBUG, "Roles are : " + rolesStr + " for user '" + user.getName() + "'"); - } - - return allCombinedRoles; - } - - /** - * String representation of the LDAP realm - * @return the xml representation of the LDAP realm - */ - public String toXML() { - - // Required values - - StringBuffer xml = new StringBuffer(" "); - - return xml.toString(); - } - - /** - * The string representation of this object is an XML value - * @return the xml representation of this object - */ - public String toString() { - return this.toXML(); - } - - /** - * Retrieves the Reference of the object. The Reference contains the factory - * used to create this object and the optional parameters used to configure - * the factory. - * @return the non-null Reference of the object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - // Build the reference to the factory FACTORY_TYPE - Reference reference = new Reference(FACTORY_TYPE, FACTORY_NAME, null); - - // Add ref addr - reference.add(new StringRefAddr("name", getName())); - reference.add(new StringRefAddr("initialContextFactory", getInitialContextFactory())); - reference.add(new StringRefAddr("providerUrl", getProviderUrl())); - reference.add(new StringRefAddr("securityAuthentication", getSecurityAuthentication())); - reference.add(new StringRefAddr("securityPrincipal", getSecurityPrincipal())); - reference.add(new StringRefAddr("securityCredentials", getSecurityCredentials())); - reference.add(new StringRefAddr("securityProtocol", getSecurityProtocol())); - reference.add(new StringRefAddr("language", getLanguage())); - reference.add(new StringRefAddr("referral", getReferral())); - reference.add(new StringRefAddr("stateFactories", getStateFactories())); - reference.add(new StringRefAddr("authenticationMode", getAuthenticationMode())); - reference.add(new StringRefAddr("userPasswordAttribute", getUserPasswordAttribute())); - reference.add(new StringRefAddr("userRolesAttribute", getUserRolesAttribute())); - reference.add(new StringRefAddr("roleNameAttribute", getRoleNameAttribute())); - reference.add(new StringRefAddr("baseDN", getBaseDN())); - reference.add(new StringRefAddr("userDN", getUserDN())); - reference.add(new StringRefAddr("userSearchFilter", getUserSearchFilter())); - reference.add(new StringRefAddr("roleDN", getRoleDN())); - reference.add(new StringRefAddr("roleSearchFilter", getRoleSearchFilter())); - reference.add(new StringRefAddr("algorithm", algorithm)); - - return reference; - } - - - /** - * Set the initial context factory of this LDAP realm - * @param initialContextFactory the initial context factory - */ - public void setInitialContextFactory(String initialContextFactory) { - this.initialContextFactory = initialContextFactory; - } - - /** - * Set the Url of the ldap server of this LDAP realm - * @param providerUrl Url of the ldap server - */ - public void setProviderUrl(String providerUrl) { - this.providerUrl = providerUrl; - } - - /** - * Set the authentication used during the authentication to the LDAP server - * of this LDAP realm - * @param securityAuthentication authentication used during the - * authentication to the LDAP server - */ - public void setSecurityAuthentication(String securityAuthentication) { - this.securityAuthentication = securityAuthentication; - } - - /** - * Set the DN of the Principal(username) of this LDAP realm - * @param securityPrincipal DN of the Principal(username) - */ - public void setSecurityPrincipal(String securityPrincipal) { - this.securityPrincipal = securityPrincipal; - } - - /** - * Set the Credential(password) of the principal of this LDAP realm - * @param securityCredentials Credential(password) of the principal - */ - public void setSecurityCredentials(String securityCredentials) { - this.securityCredentials = securityCredentials; - } - - /** - * Set the security protocol to use of this LDAP realm - * @param securityProtocol security protocol to use - */ - public void setSecurityProtocol(String securityProtocol) { - this.securityProtocol = securityProtocol; - } - - /** - * Set the preferred language to use with the service of this LDAP realm - * @param language preferred language to use with the service - */ - public void setLanguage(String language) { - this.language = language; - } - - /** - * Set how referrals encountered by the service provider are to be processed - * @param referral how referrals encountered by the service provider are to - * be processed - */ - public void setReferral(String referral) { - this.referral = referral; - } - - /** - * Set the the list of state factories of this LDAP realm - * @param stateFactories list of state factories - */ - public void setStateFactories(String stateFactories) { - this.stateFactories = stateFactories; - } - - /** - * Set the mode for validate the authentication of this LDAP realm - * @param authenticationMode BIND_AUTHENTICATION_MODE or - * COMPARE_AUTHENTICATION_MODE - */ - public void setAuthenticationMode(String authenticationMode) { - this.authenticationMode = authenticationMode; - } - - /** - * Set the attribute in order to get the password of this LDAP realm - * @param userPasswordAttribute attribute in order to get the password of - * this LDAP realm - */ - public void setUserPasswordAttribute(String userPasswordAttribute) { - this.userPasswordAttribute = userPasswordAttribute; - } - - /** - * Set the attribute in order to get the user role from the ldap server - * @param userRolesAttribute attribute in order to get the user role from - * the ldap server - */ - public void setUserRolesAttribute(String userRolesAttribute) { - this.userRolesAttribute = userRolesAttribute; - } - - /** - * Set the role name when performing a lookup on a role - * @param roleNameAttribute role name when performing a lookup on a role - */ - public void setRoleNameAttribute(String roleNameAttribute) { - this.roleNameAttribute = roleNameAttribute; - } - - /** - * Set the DN used for the lookup of this LDAP realm - * @param baseDN DN used for the lookup - */ - public void setBaseDN(String baseDN) { - // empty value can't be set - if ((baseDN != null) && (!baseDN.equals(""))) { - this.baseDN = baseDN; - } - } - - /** - * Set the DN used when searching the user DN. Override the baseDN if it is - * defined - * @param userDN DN used when searching the user DN - */ - public void setUserDN(String userDN) { - if ((userDN != null) && (!userDN.equals(""))) { - this.userDN = userDN; - } - } - - /** - * Set the filter used when searching the user - * @param userSearchFilter filter used when searching the user - */ - public void setUserSearchFilter(String userSearchFilter) { - this.userSearchFilter = userSearchFilter; - } - - /** - * Set the DN used when searching the role DN. Override the baseDN if it is - * defined - * @param roleDN DN used when searching the role DN. Override the baseDN if - * it is defined - */ - public void setRoleDN(String roleDN) { - this.roleDN = roleDN; - } - - /** - * Set the filter used when searching the role - * @param roleSearchFilter filter used when searching the role - */ - public void setRoleSearchFilter(String roleSearchFilter) { - this.roleSearchFilter = roleSearchFilter; - } - - /** - * Set the default algorithm to use - * @param algorithm algorithm to be used - */ - public void setAlgorithm(String algorithm) { - this.algorithm = algorithm; - } - - /** - * Return the initial context factory of this LDAP realm - * @return the initial context factory - */ - public String getInitialContextFactory() { - return initialContextFactory; - } - - /** - * Get the Url of the ldap server of this LDAP realm - * @return Url of the ldap server - */ - public String getProviderUrl() { - return providerUrl; - } - - /** - * Get the authentication used during the authentication to the LDAP server - * of this LDAP realm - * @return authentication used during the authentication to the LDAP server - */ - public String getSecurityAuthentication() { - return securityAuthentication; - } - - /** - * Get the DN of the Principal(username) of this LDAP realm - * @return DN of the Principal(username) - */ - public String getSecurityPrincipal() { - return securityPrincipal; - } - - /** - * Get the Credential(password) of the principal of this LDAP realm - * @return Credential(password) of the principal - */ - public String getSecurityCredentials() { - return securityCredentials; - } - - /** - * Get the security protocol to use of this LDAP realm - * @return security protocol to use - */ - public String getSecurityProtocol() { - return securityProtocol; - } - - /** - * Get the preferred language to use with the service of this LDAP realm - * @return language preferred language to use with the service - */ - public String getLanguage() { - return language; - } - - /** - * Get how referrals encountered by the service provider are to be processed - * @return how referrals encountered by the service provider are to be - * processed - */ - public String getReferral() { - return referral; - } - - /** - * Get the the list of state factories of this LDAP realm - * @return list of state factories - */ - public String getStateFactories() { - return stateFactories; - } - - /** - * Get the mode for validate the authentication of this LDAP realm - * @return BIND_AUTHENTICATION_MODE or COMPARE_AUTHENTICATION_MODE - */ - public String getAuthenticationMode() { - return authenticationMode; - } - - /** - * Get the attribute in order to get the password of this LDAP realm - * @return attribute in order to get the password of this LDAP realm - */ - public String getUserPasswordAttribute() { - return userPasswordAttribute; - } - - /** - * Get the attribute in order to get the user role from the ldap server - * @return attribute in order to get the user role from the ldap server - */ - public String getUserRolesAttribute() { - return userRolesAttribute; - } - - /** - * Get the role name when performing a lookup on a role - * @return role name when performing a lookup on a role - */ - public String getRoleNameAttribute() { - return roleNameAttribute; - } - - /** - * Get the DN used for the lookup of this LDAP realm - * @return baseDN DN used for the lookup - */ - public String getBaseDN() { - return baseDN; - } - - /** - * Get the DN used when searching the user DN. Override the baseDN if it is - * defined - * @return userDN DN used when searching the user DN - */ - public String getUserDN() { - return userDN; - } - - /** - * Get the filter used when searching the user - * @return userSearchFilter filter used when searching the user - */ - public String getUserSearchFilter() { - return userSearchFilter; - } - - /** - * Get the DN used when searching the role DN. Override the baseDN if it is - * defined - * @return roleDN DN used when searching the role DN. Override the baseDN if - * it is defined - */ - public String getRoleDN() { - return roleDN; - } - - /** - * Get the filter used when searching the role - * @return roleSearchFilter filter used when searching the role - */ - public String getRoleSearchFilter() { - return roleSearchFilter; - } - - /** - * Get the default algorithm - * @return the default algorithm - */ - public String getAlgorithm() { - return algorithm; - } - - /** - * Return a dircontext for this LDAP server - * @return a dircontext for this LDAP server - * @throws NamingException if we can't retrieve a DirContext - */ - protected DirContext getDirContext() throws NamingException { - DirContext dirContext = null; - // Get the InitialDirContext with our env - dirContext = new InitialDirContext(getEnvInitialDirContext()); - - return dirContext; - } - - /** - * Return the environment used to build a DirContext - * @return the environment used to build a DirContext - */ - private Hashtable getEnvInitialDirContext() { - - // The environment is a hashtable - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory); - env.put(Context.PROVIDER_URL, providerUrl); - env.put(Context.SECURITY_AUTHENTICATION, securityAuthentication); - if ((securityPrincipal != null) && (!securityPrincipal.equals(""))) { - env.put(Context.SECURITY_PRINCIPAL, securityPrincipal); - } - if ((securityCredentials != null) && (!securityCredentials.equals(""))) { - env.put(Context.SECURITY_CREDENTIALS, securityCredentials); - } - if ((language != null) && (!language.equals(""))) { - env.put(Context.LANGUAGE, language); - } - if ((referral != null) && (!referral.equals(""))) { - env.put(Context.REFERRAL, referral); - } - if ((securityProtocol != null) && (!securityProtocol.equals(""))) { - env.put(Context.SECURITY_PROTOCOL, securityProtocol); - } - if ((stateFactories != null) && (!stateFactories.equals(""))) { - env.put(Context.STATE_FACTORIES, stateFactories); - } - return env; - } - - /** - * Return the string value read into the attributes attributes with the key - * attrID - * @param attrID the key that we are looking for - * @param attributes all the attributes - * @return the string value read into the attributes attributes with the key - * attrID - * @throws NamingException if the attrID can't be read from the attributes - */ - private String readValueFromAttribute(String attrID, Attributes attributes) throws NamingException { - - // No attributes or the attrID is null (must be a non null attribute) - if (attributes == null || attrID == null) { - return null; - } - - Attribute attribute = attributes.get(attrID); - - // Attribute not found - if (attribute == null) { - return null; - } - - Object o = attribute.get(); - String value = null; - - if (o instanceof byte[]) { - value = new String((byte[]) o); - } else { - value = o.toString(); - } - - return value; - } - - /** - * Return a comma separated string with the values read into the attributes - * attributes with the key attrID - * @param attrID the key that we are looking for - * @param attributes all the attributes - * @return comma separated string with the values read into the attributes - * attributes with the key attrID - * @throws NamingException if the attrID can't be read from the attributes - */ - private String readValuesFromAttribute(String attrID, Attributes attributes) throws NamingException { - - // No attributes or the attrID is null (must be a non null attribute) - if (attributes == null || attrID == null) { - return null; - } - - Attribute attribute = attributes.get(attrID); - - // Attribute not found - if (attribute == null) { - return null; - } - - String value = null; - NamingEnumeration e = attribute.getAll(); - while (e.hasMore()) { - String s = (String) e.next(); - if (value == null) { - value = s; - } else { - value = value + "," + s; - } - } - return value; - } - - /** - * Add to a vector the values retrieved from the attributes with the - * keyattrID - * @param attrID the key that we are looking for - * @param attributes all the attributes - * @param v the vector on which the data are added - * @throws NamingException if the attrID can't be read from the attributes - */ - private void addValueFromAttributeToVector(String attrID, Attributes attributes, Vector v) throws NamingException { - - // No attributes or the attrID is null (must be a non null attribute) - if (attributes == null || attrID == null) { - return; - } - - Attribute attribute = attributes.get(attrID); - - // Attribute not found - if (attribute == null) { - return; - } - - NamingEnumeration e = attribute.getAll(); - while (e.hasMore()) { - v.add(e.next()); - } - - } - - /** - * Remove all the Mbeans used by this resource - * @throws JResourceException if the MBeans can not be removed - */ - public void removeMBeans() throws JResourceException { - //no MBeans - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAPMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAPMBean.java deleted file mode 100644 index ba97188956..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceLDAPMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -/** - * Define the methods for the MBean - * @author Florent Benoit - */ -public class JResourceLDAPMBean extends JResourceMBean { - - public JResourceLDAPMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMBean.java deleted file mode 100644 index 2fbdf10916..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMBean.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import javax.management.MBeanException; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.RuntimeOperationsException; - -import org.apache.commons.modeler.BaseModelMBean; -/** - * - */ -public class JResourceMBean extends BaseModelMBean { - - public JResourceMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - - /** - * This method is 'called' by the ReconfigManager in order to receive the reconfiguration and the save notifications. - * @param arg0 The notification Listener - * @param arg1 The notification Filter - * @param arg2 Handback object - */ - @Override - public void addNotificationListener(final NotificationListener arg0 - , final NotificationFilter arg1, final Object arg2) { - super.addNotificationListener(arg0, arg1, arg2); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemory.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemory.java deleted file mode 100644 index 4e7342192a..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemory.java +++ /dev/null @@ -1,531 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; - -import javax.management.MalformedObjectNameException; -import javax.naming.BinaryRefAddr; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.security.internal.realm.lib.HashHelper; -import org.ow2.jonas.security.internal.realm.lib.XML; -import org.ow2.jonas.security.internal.realm.principal.Group; -import org.ow2.jonas.security.internal.realm.principal.Role; -import org.ow2.jonas.security.internal.realm.principal.User; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; - -/** - * This class extends the JResource class for the Memory implementation. - * @author Florent Benoit - */ -public class JResourceMemory extends AbstractJResource { - - /** - * Default serrialVersionUID - */ - private static final long serialVersionUID = 1L; - - /** - * Groups. - */ - private Hashtable groups = new Hashtable(); - - /** - * Roles. - */ - private Hashtable roles = new Hashtable(); - - /** - * Type of the factory. - */ - private static final String FACTORY_TYPE = "org.ow2.jonas.security.internal.realm.factory.JResourceMemory"; - - /** - * Name of the factory. - */ - private static final String FACTORY_NAME = "org.ow2.jonas.security.internal.realm.factory.JResourceMemoryFactory"; - - /** - * Constructor . Use the super constructor - * @throws Exception if super constructor fail - */ - public JResourceMemory() throws Exception { - super(); - } - - /** - * Add a user to this resource. - * @param user the user which need to be added. - * @throws Exception if the user already exists - */ - public void addUser(final User user) throws Exception { - - if (getUsers().get(user.getName()) != null) { - throw new Exception("User " + user.getName() + " already exists."); - } - - // Add group if the group was not present - String[] userGroups = user.getArrayGroups(); - String groupName = null; - for (int g = 0; g < userGroups.length; g++) { - groupName = userGroups[g]; - if (!groups.containsKey(groupName)) { - addGroup(new Group(groupName)); - } - } - - // Add role if the role was not present - String[] userRoles = user.getArrayRoles(); - String roleName = null; - for (int g = 0; g < userRoles.length; g++) { - roleName = userRoles[g]; - if (!roles.containsKey(roleName)) { - addRole(new Role(roleName)); - } - } - - // Add user - getUsers().put(user.getName(), user); - - registerUserMBean(user); - } - - /** - * Add a group to this resource. - * @param group the group which need to be added. - * @throws Exception if the group already exists - */ - public void addGroup(final Group group) throws Exception { - - if (groups.get(group.getName()) != null) { - throw new Exception("Group " + group.getName() + " already exists."); - } - - // Add role if the role was not present - String[] groupRoles = group.getArrayRoles(); - String roleName = null; - for (int g = 0; g < groupRoles.length; g++) { - roleName = groupRoles[g]; - if (!roles.containsKey(roleName)) { - addRole(new Role(roleName)); - } - } - - // Add group - groups.put(group.getName(), group); - - registerGroupMBean(group); - } - - /** - * Add a role to this resource. - * @param role the role which need to be added. - * @throws Exception if the role already exists - */ - public void addRole(final Role role) throws Exception { - - if (roles.get(role.getName()) != null) { - throw new Exception("Role " + role.getName() + " already exists."); - } - - // Add role - roles.put(role.getName(), role); - - registerRoleMBean(role); - } - - /** - * Check if a user is found and return it. - * @param name the wanted user name - * @return the user found or null - * @throws JResourceException if there is an error during the search - */ - public JUser findUser(final String name) throws JResourceException { - if (name == null) { - return null; - } - return ((User) getUsers().get(name)); - } - - /** - * Check if the given credential is the right credential for the given user. - * @param user user to check its credentials - * @param credentials the given credentials - * @return true if the credential is valid for this user - */ - public boolean isValidUser(final JUser user, final String credentials) { - - boolean validated = false; - - //Get algorithm and hashpassword - String pass = user.getHashPassword().getPassword(); - String algo = user.getHashPassword().getAlgorithm(); - - // Crypt password ? - if (algo != null) { - try { - validated = HashHelper.hashPassword(credentials, algo).equalsIgnoreCase(pass); - } catch (NoSuchAlgorithmException nsae) { - getLogger().log(BasicLevel.ERROR, "Can't make a password with the algorithm " + algo + ". " - + nsae.getMessage()); - } - } else { - // clear - validated = credentials.equals(pass); - } - return validated; - } - - /** - * Return all the groups. - * @return the groups - */ - public Hashtable getGroups() { - return groups; - } - - /** - * Return all the roles. - * @return the roles - */ - public Hashtable getRoles() { - return roles; - } - - /** - * Get all the roles (from the roles and from the groups) of the given user. - * @param user the given user - * @return the array list of all the roles for a given user - * @throws JResourceException if it fails - */ - public ArrayList getArrayListCombinedRoles(final JUser user) throws JResourceException { - ArrayList allCombinedRoles = new ArrayList(); - - // Return empty array if user null - if (user == null) { - return allCombinedRoles; - } - - // Add all user roles - String[] userRoles = user.getArrayRoles(); - for (int r = 0; r < userRoles.length; r++) { - String roleName = userRoles[r]; - if (!allCombinedRoles.contains(roleName)) { - allCombinedRoles.add(roleName); - } - } - - // Add roles of each group - String[] userGroups = user.getArrayGroups(); - for (int g = 0; g < userGroups.length; g++) { - String groupName = userGroups[g]; - - // For each roles of the given group - Group group = groups.get(groupName); - if (group == null) { - continue; - } - - String[] groupRoles = group.getArrayRoles(); - for (int gr = 0; gr < groupRoles.length; gr++) { - String roleName = groupRoles[gr]; - if (!allCombinedRoles.contains(roleName)) { - allCombinedRoles.add(roleName); - } - } - } - - return allCombinedRoles; - } - - /** - * Set the groups. - * @param groups the groups of this resource - */ - public void setGroups(final Hashtable groups) { - this.groups = groups; - } - - /** - * Set the roles. - * @param roles the roles of this resource - */ - public void setRoles(final Hashtable roles) { - this.roles = roles; - } - - /** - * Add a user with a given principal and credential. - * @param username the name of the user - * @param password password of the user - * @throws Exception if the user already exists - */ - public void addUser(final String username, final String password) throws Exception { - addUser(new User(username, password)); - } - - /** - * Add a group with a given name? - * @param groupname the name of the group - * @throws Exception if the group already exists - */ - public void addGroup(final String groupname) throws Exception { - addGroup(new Group(groupname)); - } - - /** - * Add a role with a given name? - * @param rolename the name of the role - * @throws Exception if the role already exists - */ - public void addRole(final String rolename) throws Exception { - addRole(new Role(rolename)); - } - - /** - * Remove a user with a given principal? - * @param username the name of the user - * @throws Exception if the user was not found - */ - public void removeUser(final String username) throws Exception { - if (getUsers().get(username) == null) { - throw new Exception("Can not remove user " + username + ". This user doesn't exist"); - } - getUsers().remove(username); - - // Remove associated MBean - unregisterUserMBean(getName(), username); - } - - /** - * Remove a group with a given name? - * @param groupname the name of the group - * @throws Exception if the group was not found - */ - public void removeGroup(final String groupname) throws Exception { - if (groups.get(groupname) == null) { - throw new Exception("Can not remove group " + groupname + ". This group doesn't exist"); - } - - Enumeration users = getUsers().elements(); - while (users.hasMoreElements()) { - User user = (User) users.nextElement(); - user.removeGroup(groupname); - } - - groups.remove(groupname); - // Remove associated MBean - unregisterGroupMBean(getName(), groupname); - } - - /** - * Remove a role with a given name. - * @param rolename the name of the role - * @throws Exception if the role was not found - */ - public void removeRole(final String rolename) throws Exception { - if (roles.get(rolename) == null) { - throw new Exception("Can not remove role " + rolename + ". This role doesn't exist"); - } - - Enumeration groups = getGroups().elements(); - while (groups.hasMoreElements()) { - Group group = groups.nextElement(); - group.removeRole(rolename); - } - - Enumeration users = getUsers().elements(); - while (users.hasMoreElements()) { - User user = (User) users.nextElement(); - user.removeRole(rolename); - } - - roles.remove(rolename); - - // Remove Mbean - unregisterRoleMBean(getName(), rolename); - } - - /** - * String representation of the MemoryRealm. - * @return the xml representation of the MemoryRealm - */ - public String toXML() { - StringBuffer xml = new StringBuffer(" \n"); - - // Roles - xml.append(" \n"); - XML.xmlHashtable(xml, getRoles(), " "); - xml.append(" \n"); - - // Groups - xml.append(" \n"); - XML.xmlHashtable(xml, getGroups(), " "); - xml.append(" \n"); - - // Users - xml.append(" \n"); - XML.xmlHashtable(xml, getUsers(), " "); - xml.append(" \n"); - - xml.append(" "); - return xml.toString(); - } - - /** - * The string representation of this realm is the XML. - * @return XML representation - */ - @Override - public String toString() { - return this.toXML(); - } - - /** - * Retrieves the Reference of the object. The Reference contains the factory - * used to create this object and the optional parameters used to configure - * the factory. - * @return the non-null Reference of the object. - * @throws NamingException if a naming exception was encountered while - * retrieving the reference. - */ - public Reference getReference() throws NamingException { - - // Build the reference to the factory FACTORY_TYPE - Reference reference = new Reference(FACTORY_TYPE, FACTORY_NAME, null); - - // Add name - reference.add(new StringRefAddr("name", getName())); - - // Add users - byte[] bytes = JNDIUtils.getBytesFromObject(getUsers(), getLogger()); - if (bytes != null) { - reference.add(new BinaryRefAddr("users", bytes)); - } - - // Add groups - bytes = JNDIUtils.getBytesFromObject(groups, getLogger()); - if (bytes != null) { - reference.add(new BinaryRefAddr("groups", bytes)); - } - - // Add roles - bytes = JNDIUtils.getBytesFromObject(roles, getLogger()); - if (bytes != null) { - reference.add(new BinaryRefAddr("roles", bytes)); - } - - return reference; - - } - - /** - * Get the roles. - * @return the array of the roles - */ - public String[] listRoles() { - String[] s = new String[roles.size()]; - int i = 0; - for (Enumeration e = roles.keys(); e.hasMoreElements(); i++) { - s[i] = e.nextElement(); - } - return s; - } - - /** - * Get the groups. - * @return the array of the groups - */ - public String[] listGroups() { - String[] s = new String[groups.size()]; - int i = 0; - for (Enumeration e = groups.keys(); e.hasMoreElements(); i++) { - s[i] = e.nextElement(); - } - return s; - } - - /** - * Remove all the MBeans used by this resource. - * @throws JResourceException if the MBeans can not be removed - */ - public void removeMBeans() throws JResourceException { - - boolean error = false; - // Remove user MBeans - for (Enumeration e = getUsers().elements(); e.hasMoreElements();) { - User u = (User) e.nextElement(); - try { - unregisterUserMBean(getName(), u.getName()); - } catch (MalformedObjectNameException e1) { - e1.printStackTrace(); - error = true; - } - } - - // Remove role MBeans - for (Enumeration e = roles.elements(); e.hasMoreElements();) { - Role r = e.nextElement(); - try { - unregisterRoleMBean(getName(), r.getName()); - } catch (MalformedObjectNameException e1) { - e1.printStackTrace(); - error = true; - } - } - - // Remove group MBeans - for (Enumeration e = groups.elements(); e.hasMoreElements();) { - Group g = e.nextElement(); - try { - unregisterGroupMBean(getName(), g.getName()); - } catch (MalformedObjectNameException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - error = true; - } - } - - if (error) { - throw new JResourceException( - "There were errors during the remove of the MBeans resource " + getName()); - } - - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemoryMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemoryMBean.java deleted file mode 100644 index 70bf94c45f..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceMemoryMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.factory; - -import javax.management.MBeanException; -import javax.management.RuntimeOperationsException; - -/** - * Define the methods for the MBean - * @author Florent Benoit - */ -public class JResourceMemoryMBean extends JResourceMBean { - - public JResourceMemoryMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemote.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemote.java deleted file mode 100644 index 3589c8d86b..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemote.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal.realm.factory; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -import javax.security.auth.Subject; - -import org.ow2.jonas.lib.security.auth.JSubject; - - -/** - * This interface defines a method to allow authentication on server side even for Client container or remote applications - * @author Florent Benoit - */ -public interface JResourceRemote extends Remote { - - /** - * Authenticate a given user - * @param principalName name of the user - * @param arrayPass password of the user - * @param resourceName type of resource to use to register ( memory, jdbc, ldap) - * @throws RemoteException if the authentication failed - * @return an authenticated subject if it succeed - */ - JSubject authenticate(String principalName, char[] arrayPass, String resourceName) throws RemoteException; - - - /** - * Authenticate a given user - * @param principalName name of the user - * @param arrayPass password of the user - * @param entryName the name of the JAAS entry to search in jaas configuration file - * @throws RemoteException if the authentication failed - * @return an authenticated subject if it succeed - */ - Subject authenticateJAAS(String principalName, char[] arrayPass, String entryName) throws RemoteException; - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemoteImpl.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemoteImpl.java deleted file mode 100644 index 03a2a40854..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/factory/JResourceRemoteImpl.java +++ /dev/null @@ -1,195 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.internal.realm.factory; - -import java.rmi.AccessException; -import java.rmi.RemoteException; -import java.util.ArrayList; - -import javax.rmi.PortableRemoteObject; -import javax.security.auth.Subject; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.ow2.jonas.lib.security.auth.JGroup; -import org.ow2.jonas.lib.security.auth.JPrincipal; -import org.ow2.jonas.lib.security.auth.JRole; -import org.ow2.jonas.lib.security.auth.JSubject; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; - - -/** - * This class allow to make authentication on server side even for Client - * container or remote applications - * @author Florent Benoit - */ -public class JResourceRemoteImpl extends PortableRemoteObject implements JResourceRemote { - - /** - * Security service - */ - private static SecurityService securityService = null; - - /** - * Default constructor - * @throws RemoteException if super class cannot export object - */ - public JResourceRemoteImpl(SecurityService ss) throws RemoteException { - super(); - securityService = ss; - } - - /** - * Authenticate a given user - * @param principalName name of the user - * @param arrayPass password of the user - * @param resourceName type of resource to use to register ( memory, jdbc, - * ldap) - * @throws RemoteException if the authentication failed - * @return an authenticated subject if it succeed - */ - public JSubject authenticate(String principalName, char[] arrayPass, String resourceName) throws RemoteException { - // Get security service - if (securityService == null) { - // Should not go here. - throw new RemoteException("Cannot retrieve security service"); - } - - if (resourceName == null) { - throw new AccessException("The 'resourceName' parameter is required and cannot be null."); - } - - // Get resource - JResource jResource = null; - try { - jResource = securityService.getJResource(resourceName); - } catch (Exception e) { - throw createChainedAccessException("The resource '" + resourceName + "' is not available.", e); - } - - if (jResource == null) { - throw new AccessException("The resource '" + resourceName + "' is not available."); - } - - // Authentication - step 1 (user) - JUser user = null; - try { - user = jResource.findUser(principalName); - } catch (Exception jre) { - // could not retrieve user - throw createChainedAccessException("Can not find the user", jre); - } - // User was not found - if (user == null) { - throw new AccessException("User '" + principalName + "' not found."); - } - - // Authentication - step 2 (password) - boolean validated = jResource.isValidUser(user, new String(arrayPass)); - if (!validated) { - throw new AccessException("The password for the user '" + principalName + "' is not valid"); - } - - // Authentication - step 3 (roles) - ArrayList principalRoles = null; - try { - principalRoles = jResource.getArrayListCombinedRoles(user); - } catch (JResourceException jre) { - throw createChainedAccessException(jre.getMessage(), jre); - } - - JGroup group = new JGroup("Roles"); - - // Convert list into array - String[] roles = new String[principalRoles.size()]; - roles = (String[]) principalRoles.toArray(roles); - int size = principalRoles.size(); - for (int i = 0; i < size; i++) { - group.addMember(new JRole(roles[i])); - } - - // build object with name and group - return new JSubject(new JPrincipal(principalName), group); - - } - - - /** - * Authenticate a given user - * @param principalName name of the user - * @param arrayPass password of the user - * @param entryName the name of the JAAS entry to search in jaas configuration file - * @throws RemoteException if the authentication failed - * @return an authenticated subject if it succeed - */ - public Subject authenticateJAAS(String principalName, char[] arrayPass, String entryName) throws RemoteException { - // entry arg ? - if (entryName == null) { - throw new AccessException("The 'entryName' parameter is required and cannot be null."); - } - - // Create a Login context - LoginContext loginContext = null; - try { - loginContext = new LoginContext(entryName, new NoInputCallbackHandler(principalName, new String(arrayPass))); - } catch (LoginException e) { - throw new AccessException("Login Exception for user '" + principalName + "' : " + e.getMessage()); - } - - // Negotiate a login via this LoginContext - try { - loginContext.login(); - } catch (LoginException e) { - throw new AccessException("Login Exception for user '" + principalName + "' : " + e.getMessage()); - } - return loginContext.getSubject(); - } - - - /** - * Create a AccessException with the given message and set the cause to the - * given Exception - * @param msg Exception message - * @param t Root cause - * @return AccessException the chained exception - */ - private static AccessException createChainedAccessException(String msg, Throwable t) { - if (t instanceof Exception) { - // If this is an Exception subclass, we can directly chain the cause. - return new AccessException(msg, (Exception) t); - } else { - // In the other case, no chaining is possible - // We simply put the cause's message in brackets and append - // it to the new AccessException - String causeMessage = "[inner cause message: " + t.getMessage() + "]"; - return new AccessException(msg + causeMessage); - } - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/HashHelper.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/HashHelper.java deleted file mode 100644 index 38831ac461..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/HashHelper.java +++ /dev/null @@ -1,221 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright Andy Armstrong, andy@tagish.com - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Andy Armstrong, andy@tagish.com - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.lib; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -import org.ow2.jonas.lib.util.Base64; -import org.ow2.jonas.security.realm.lib.HashPassword; - - -/** - * Methods to hash Strings. All the methods in here are static so HashHelper - * should never be instantiated. - * @author Andy Armstrong, andy@tagish.com - * @author Yann Petiot for the modifications - * @author Florent Benoit modifications for integration in JOnAS - */ -public class HashHelper { - - /** - * Constant for conversion of hex to string - */ - private static final int HEX_CONSTANT = 0xFF; - - /** - * Because of java 1.3, there are only 3 types of algorithms SHA == SHA-1 - */ - private static final String[] ALGORITHM = {"MD5", "MD2", "SHA-1", "SHA"}; - - /** - * Algorithm are recognized as this - */ - private static final String[] SEPARATOR_ALGORITHM = {"MD5:", "MD2:", "SHA-1:", "SHA:"}; - - /** - * Algorithm are recognized as this too - */ - private static final String[] SEPARATOR_ALGORITHM_BIS = {"{MD5}", "{MD2}", "{SHA-1}", "{SHA}"}; - - /** - * The default algorithm - */ - public static final String DEFAULT_ALGO = "MD5"; - - /** - * Can't make this: all the methods are static - */ - private HashHelper() { - } - - /** - * In order to use a specified algorithm, it is necessary to check if it is - * in ALGORITHM[] - * @param algo the String to check if it's a valid algorithm - * @return boolean

    • true if it's valid
    • false if it isn't - *
    - */ - private static boolean isAValidAlgorithm(String algo) { - for (int i = 0; i < ALGORITHM.length; i++) { - if (algo.equalsIgnoreCase(ALGORITHM[i])) { - return true; - } - } - return false; - } - - /** - * Return the haspassword object from a string. It extracts algorithm and - * password from the string - * @param password contain password and algorithm - * @return the haspassword object - */ - public static HashPassword getHashPassword(String password) { - String pass = null; - String algo = null; - //Check with the format ALGO: - for (int i = 0; i < ALGORITHM.length; i++) { - if (password.toUpperCase().startsWith(SEPARATOR_ALGORITHM[i])) { - pass = password.substring(SEPARATOR_ALGORITHM[i].length()); - algo = password.substring(0, SEPARATOR_ALGORITHM[i].length() - 1); - return new HashPassword(pass, algo); - } - if (password.toUpperCase().startsWith(SEPARATOR_ALGORITHM_BIS[i])) { - pass = password.substring(SEPARATOR_ALGORITHM_BIS[i].length()); - algo = password.substring(1, SEPARATOR_ALGORITHM_BIS[i].length() - 1); - return new HashPassword(pass, algo); - } - } - - //Return a haspassword without algorithm (clear password) - return new HashPassword(password, null); - } - - /** - * Turn a byte array into a char array containing a printable hex - * representation of the bytes. Each byte in the source array contributes a - * pair of hex digits to the output array. - * @param src the source array - * @return a char array containing a printable version of the source data - */ - public static char[] hexDump(byte[] src) { - char[] buf = new char[src.length * 2]; - - for (int b = 0; b < src.length; b++) { - String byt = Integer.toHexString(src[b] & HEX_CONSTANT); - - if (byt.length() < 2) { - buf[b * 2 + 0] = '0'; - buf[b * 2 + 1] = byt.charAt(0); - } else { - buf[b * 2 + 0] = byt.charAt(0); - buf[b * 2 + 1] = byt.charAt(1); - } - } - return buf; - } - - /** - * Zero the contents of the specified array. Typically used to erase - * temporary storage that has held plaintext passwords so that we don't - * leave them lying around in memory. - * @param pwd the array to zero - */ - public static void smudge(char[] pwd) { - if (pwd != null) { - for (int b = 0; b < pwd.length; b++) { - pwd[b] = 0; - } - } - } - - /** - * Zero the contents of the specified array. - * @param pwd the array to zero - */ - public static void smudge(byte[] pwd) { - if (pwd != null) { - for (int b = 0; b < pwd.length; b++) { - pwd[b] = 0; - } - } - } - - /** - * Performs the default algorithm hashing on the supplied password and - * return a char array containing the password as a printable string. The - * hash is computed on the low 8 bits of each character. - * @param pwd The password to hash - * @return a string representation of the hash password - * @throws NoSuchAlgorithmException if this is not a valid algorithm - */ - public static String hashPassword(char[] pwd) throws NoSuchAlgorithmException { - return hashPassword(pwd, DEFAULT_ALGO); - } - - /** - * Performs an algorithm specified by the user hashing on the supplied - * password and return a char array containing the encrypted password as a - * printable string. The hash is computed on the low 8 bits of each - * character. - * @param pwd The password to hash - * @param algo The type of Message Digest Algorithms - * @return a string representation of the hash password - * @throws NoSuchAlgorithmException if the algorithm can not be found - */ - public static String hashPassword(char[] pwd, String algo) throws NoSuchAlgorithmException { - - if (!isAValidAlgorithm(algo)) { - throw new NoSuchAlgorithmException("Your algorithm isn't valid or not yet supported."); - } - MessageDigest md = MessageDigest.getInstance(algo); - md.reset(); - - byte[] pwdb = new byte[pwd.length]; - byte[] crypt = null; - for (int b = 0; b < pwd.length; b++) { - pwdb[b] = (byte) pwd[b]; - } - crypt = md.digest(pwdb); - smudge(pwdb); - return new String(Base64.encode(crypt)); - } - - /** - * Performs an algorithm specified by the user hashing on the supplied - * password and return a char array containing the encrypted password as a - * printable string. The hash is computed on the low 8 bits of each - * character. - * @param string The password to hash - * @param algo The type of Message Digest Algorithms - * @return a string representation of the hash password - * @throws NoSuchAlgorithmException if the algorithm can not be found - */ - public static String hashPassword(String string, String algo) throws NoSuchAlgorithmException { - return hashPassword(string.toCharArray(), algo); - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/XML.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/XML.java deleted file mode 100644 index ea8f87e2a3..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/lib/XML.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.lib; - -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -/** - * Useful class. Make xml representation for some objects used for the security - * @author Florent Benoit - */ -public class XML { - - /** - * Default constructor (Utility class, private constructor) - */ - private XML() { - - } - - /** - * Append to the given buffer the hashtable elements with comma separated - * list - * @param name name of the element - * @param buffer the buffer on which append the Hashtable - * @param vector the vector where are the elements - */ - public static void appendVectorToBuffer(String name, StringBuffer buffer, Vector vector) { - if (vector.size() > 0) { - buffer.append(" " + name + "\""); - int nb = 0; - for (Enumeration e = vector.elements(); e.hasMoreElements();) { - if (nb > 0) { - buffer.append(","); - } - String s = (String) e.nextElement(); - buffer.append(s); - nb++; - } - buffer.append("\""); - } - } - - /** - * Append to the given buffer the hashtable elements. - * @param buffer the buffer on which append the Hashtable - * @param vector the vector where are the elements - */ - public static void xmlVector(StringBuffer buffer, Vector vector) { - if (vector.size() > 0) { - for (Enumeration e = vector.elements(); e.hasMoreElements();) { - Object o = e.nextElement(); - buffer.append(o.toString()); - buffer.append("\n"); - } - } - } - - /** - * Append to the given buffer the hashtable elements. - * @param buffer the buffer on which append the Hashtable - * @param hashtable the hashtable where are the elements - */ - public static void xmlHashtable(StringBuffer buffer, Hashtable hashtable) { - xmlHashtable(buffer, hashtable, ""); - } - - /** - * Append to the given buffer the hashtable elements. - * @param buffer the buffer on which append the Hashtable - * @param hashtable the hashtable where are the elements - * @param indent the indent to put before the lines - */ - public static void xmlHashtable(StringBuffer buffer, Hashtable hashtable, String indent) { - if (hashtable.size() > 0) { - for (Enumeration e = hashtable.elements(); e.hasMoreElements();) { - Object o = e.nextElement(); - buffer.append(indent + o.toString()); - buffer.append("\n"); - } - } - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Group.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Group.java deleted file mode 100644 index c9aa300b93..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Group.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - -import java.io.Serializable; -import java.util.Enumeration; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.ow2.jonas.security.internal.realm.lib.XML; - - -/** - * This class define the Group class which represent a group with its associated - * roles - * @author Florent Benoit - */ - -public class Group implements Serializable, GroupMBean { - - /** - * Separator of the roles - */ - protected static final String SEPARATOR = ","; - - /** - * Name of the user - */ - private String name = null; - - /** - * Roles - */ - private Vector roles = new Vector(); - - /** - * Description of the role - */ - private String description = null; - - /** - * Default Constructor - */ - public Group() { - - } - - /** - * Constructor with a given name - * @param name the name of this group - */ - public Group(String name) { - setName(name); - } - - /** - * Set the name of this user - * @param name Name of the user - */ - public void setName(String name) { - this.name = name; - } - - /** - * Get the name of this user - * @return the name of this user - */ - public String getName() { - return name; - } - - /** - * Set the description of this group - * @param description description of the group - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Get the description of this group - * @return the description of this group - */ - public String getDescription() { - return description; - } - - /** - * Set the roles of the group - * @param roles the list of the roles of the group - */ - public void setRoles(String roles) { - StringTokenizer st = new StringTokenizer(roles, SEPARATOR); - String role = null; - while (st.hasMoreTokens()) { - role = st.nextToken().trim(); - addRole(role); - } - } - - /** - * Add a role to this group - * @param role the given role - */ - public void addRole(String role) { - if (!roles.contains(role)) { - this.roles.addElement(role); - } - } - - /** - * Remove a role from this group - * @param role the given role - */ - public void removeRole(String role) { - if (roles.contains(role)) { - this.roles.removeElement(role); - } - } - - /** - * Get the roles - * @return the array of the roles - */ - public String getRoles() { - String rolesList = ""; - Enumeration r = roles.elements(); - int nb = 0; - String role = null; - - while (r.hasMoreElements()) { - if (nb > 0) { - rolesList += ", "; - } - role = (String) r.nextElement(); - rolesList += role; - } - return rolesList; - } - - /** - * Get the roles - * @return the array of the roles - */ - public String[] getArrayRoles() { - return ((String[]) roles.toArray(new String[roles.size()])); - } - - /** - * String representation of the group - * @return the xml representation of the group - */ - public String toXML() { - StringBuffer xml = new StringBuffer(""); - return xml.toString(); - } - - /** - * Use the XML representation of this object - * @return the XML representation of this object - */ - public String toString() { - return this.toXML(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/GroupMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/GroupMBean.java deleted file mode 100644 index 720ccb1504..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/GroupMBean.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - - -/** - * This interface define the MBeans methods - * @author Florent Benoit - */ -public interface GroupMBean { - - /** - * Get the name of this user - * @return the name of this user - */ - String getName(); - - /** - * Set the description of this group - * @param description description of the group - */ - void setDescription(String description); - - /** - * Get the description of this group - * @return the description of this group - */ - String getDescription(); - - /** - * Add a role to this user - * @param role the given role - */ - void addRole(String role); - - /** - * Remove a role from this user - * @param role the given role - */ - void removeRole(String role); - - /** - * Get the roles - * @return the array of the roles - */ - String[] getArrayRoles(); - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/LDAPUser.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/LDAPUser.java deleted file mode 100644 index f7679facd1..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/LDAPUser.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - -/** - * This class define the LDAPUser class which represent a ldap user. The dn - * entry is added - * @author Florent Benoit - */ -public class LDAPUser extends User { - - /** - * The distinguished name of this user - */ - private String dn = null; - - /** - * Set the DN of this user - * @param dn DN of the user - */ - public void setDN(String dn) { - this.dn = dn; - } - - /** - * Get the DN of this user - * @return the DN of this user - */ - public String getDN() { - return dn; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Role.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Role.java deleted file mode 100644 index ee9a8d50cd..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/Role.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - -import java.io.Serializable; - -/** - * This class define the Role class which define a role with its name and - * description. - * @author Florent Benoit - */ -public class Role implements Serializable, RoleMBean { - - /** - * Name of the role - */ - private String name = null; - - /** - * Description of the role - */ - private String description = null; - - /** - * Constructor - */ - public Role() { - - } - - /** - * Constructor with a specific role name - * @param name the role name to use - */ - public Role(String name) { - setName(name); - } - - /** - * Set the name of this role - * @param name Name of the role - */ - public void setName(String name) { - this.name = name; - } - - /** - * Get the name of this role - * @return the name of this role - */ - public String getName() { - return name; - } - - /** - * Set the description of this role - * @param description description of the role - */ - public void setDescription(String description) { - this.description = description; - } - - /** - * Get the description of this role - * @return the description of this role - */ - public String getDescription() { - return description; - } - - /** - * String representation of the role - * @return the xml representation of the role - */ - public String toXML() { - StringBuffer xml = new StringBuffer(""); - return xml.toString(); - } - - /** - * Use the XML representation of this object - * @return the XML representation of this object - */ - public String toString() { - return this.toXML(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/RoleMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/RoleMBean.java deleted file mode 100644 index 8b16b43a79..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/RoleMBean.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - -/** - * This interface define the MBeans methods - * @author Florent Benoit - */ -public interface RoleMBean { - - /** - * Get the name of this role - * @return the name of this role - */ - String getName(); - - /** - * Set the description of this role - * @param description description of the role - */ - void setDescription(String description); - - /** - * Get the description of this role - * @return the description of this role - */ - String getDescription(); - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/User.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/User.java deleted file mode 100644 index 8d07d84e94..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/User.java +++ /dev/null @@ -1,287 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - -import java.io.Serializable; -import java.security.Principal; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.StringTokenizer; -import java.util.Vector; - -import org.ow2.jonas.security.internal.realm.lib.HashHelper; -import org.ow2.jonas.security.internal.realm.lib.XML; -import org.ow2.jonas.security.realm.lib.HashPassword; -import org.ow2.jonas.security.realm.principal.JUser; - - -/** - * This class define the User class which represent a user by its name, - * password, etc. - * @author Florent Benoit (initial developer) - * @author Alexandre Thaveau (add DN for the certificates in method setName) - * @author Marc-Antoine Bourgeot (add DN for the certificates in method setName) - */ -public class User implements Principal, Serializable, UserMBean, JUser { - - /** - * Separator of the groups/roles - */ - protected static final String SEPARATOR = ","; - - /** - * Name of the user - */ - private String name = null; - - /** - * Password of the user - */ - private String password = null; - - /** - * Hash password of the user - */ - private HashPassword hashPassword = null; - - /** - * Groups - */ - private Vector groups = new Vector(); - - /** - * Roles - */ - private Vector roles = new Vector(); - - /** - * Combined roles - */ - private ArrayList combinedRoles = new ArrayList(); - - /** - * Constructor - */ - public User() { - } - - /** - * Constructor with a given login / password - * @param name the given name - * @param password the given password - */ - public User(String name, String password) { - setName(name); - setPassword(password); - } - - /* - */ - public void setName(String name) { - if (name.startsWith("##DN##")) { - //replace problematic caracters(for mbeans) by special caracters - this.name = name.replace('=', '#').replace(',', '%').replace(' ', '$'); - } else { - this.name = name; - } - } - - /* - */ - public String getName() { - return name; - } - - /* - */ - public String getPassword() { - return password; - } - - /* - */ - public void setPassword(String password) { - this.password = password; - setHashPassword(HashHelper.getHashPassword(password)); - } - - /** - * Set the hashed password of this user - * @param hashPassword hashed password of this user - */ - protected void setHashPassword(HashPassword hashPassword) { - this.hashPassword = hashPassword; - } - - /* - */ - public HashPassword getHashPassword() { - return hashPassword; - } - - /* - */ - public void setGroups(String groups) { - StringTokenizer st = new StringTokenizer(groups, SEPARATOR); - String group = null; - while (st.hasMoreTokens()) { - group = st.nextToken().trim(); - addGroup(group); - } - } - - /* - */ - public String getGroups() { - String groupsList = ""; - Enumeration g = groups.elements(); - int nb = 0; - String group = null; - - while (g.hasMoreElements()) { - if (nb > 0) { - groupsList += ", "; - } - group = (String) g.nextElement(); - groupsList += group; - } - return groupsList; - - } - - /* - */ - public String[] getArrayGroups() { - return ((String[]) groups.toArray(new String[groups.size()])); - } - - /* - */ - public void setRoles(String roles) { - if (roles != null) { - StringTokenizer st = new StringTokenizer(roles, SEPARATOR); - String role = null; - while (st.hasMoreTokens()) { - role = st.nextToken().trim(); - addRole(role); - } - } - } - - /* - */ - public void addGroup(String group) { - if (!groups.contains(group)) { - this.groups.addElement(group); - } - } - - /* - */ - public void addRole(String role) { - if (!roles.contains(role)) { - this.roles.addElement(role); - } - } - - /* - */ - public void removeGroup(String group) { - if (groups.contains(group)) { - this.groups.removeElement(group); - } - } - - /* - */ - public void removeRole(String role) { - if (roles.contains(role)) { - this.roles.removeElement(role); - } - } - - /* - */ - public String getRoles() { - String rolesList = ""; - Enumeration r = roles.elements(); - int nb = 0; - String role = null; - - while (r.hasMoreElements()) { - if (nb > 0) { - rolesList += ", "; - } - role = (String) r.nextElement(); - rolesList += role; - } - return rolesList; - } - - /* - */ - public void setCombinedRoles(ArrayList combinedRoles) { - this.combinedRoles = combinedRoles; - } - - /* - */ - public ArrayList getCombinedRoles() { - return combinedRoles; - } - - /* - */ - public String[] getArrayRoles() { - return ((String[]) roles.toArray(new String[roles.size()])); - } - - /* - */ - public String toXML() { - StringBuffer xml = new StringBuffer(""); - return xml.toString(); - } - - /** - * Use the XML representation of this object - * @return the XML representation of this object - */ - public String toString() { - return this.toXML(); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/UserMBean.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/UserMBean.java deleted file mode 100644 index 7b4e85e1d4..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/internal/realm/principal/UserMBean.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.internal.realm.principal; - - -/** - * This interface defines the MBean method for the User - * @author Florent Benoit - */ -public interface UserMBean { - - /** - * Get the roles - * @return the array of the roles - */ - String[] getArrayRoles(); - - /** - * Get the groups - * @return the array of the groups - */ - String[] getArrayGroups(); - - /** - * Get the name of this user - * @return the name of this user - */ - String getName(); - - /** - * Get the password of this user - * @return the password of this user - */ - String getPassword(); - - /** - * Set the password of this user - * @param password password of the user - */ - void setPassword(String password); - - /** - * Add the specified group to this user - * @param group the group to add - */ - void addGroup(String group); - - /** - * Add a role to this user - * @param role the given role - */ - void addRole(String role); - - /** - * Remove a group from this user - * @param group the given group - */ - void removeGroup(String group); - - /** - * Remove a role from this user - * @param role the given role - */ - void removeRole(String role); - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JErrorHandler.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JErrorHandler.java deleted file mode 100644 index 6d5c39d5f8..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JErrorHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.lib; - -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -/** - * Define an error handler which throw an exception - * as Digester not (only print stack trace). - * Security service use this handler for throwing/catching in - * a convenient way the xml parsing error of jonas-realm.xml file. - */ -public class JErrorHandler implements ErrorHandler { - - /** - * Receive notification of a warning. - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void warning(SAXParseException exception) throws SAXException { - - } - - /** - * Receive notification of a recoverable error. - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void error(SAXParseException exception) throws SAXException { - throw exception; - } - - /** - * Receive notification of a non-recoverable error. - * @param exception exception to throw - * @throws SAXException if an error is thrown - */ - public void fatalError(SAXParseException exception) throws SAXException { - throw exception; - } -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JResourceManager.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JResourceManager.java deleted file mode 100644 index bd86a23a91..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/lib/JResourceManager.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.lib; - -import java.io.Reader; -import java.net.URL; - -import org.apache.commons.digester.Digester; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.security.internal.JResources; -import org.ow2.jonas.security.internal.SecurityServiceException; -import org.ow2.jonas.security.rules.JDSRuleSet; -import org.ow2.jonas.security.rules.JLDAPRuleSet; -import org.ow2.jonas.security.rules.JMemoryRuleSet; - - -/** - * Parse config file - * @author Guillaume Sauthier - */ -public class JResourceManager { - - /** - * Logger which is used. - */ - private static Logger logger = Log.getLogger(Log.JONAS_SECURITY_PREFIX); - - /** - * DTD of the realm configuration file. - */ - protected static final String CONFIG_FILE_DTD = "jonas-realm_1_0.dtd"; - - /** - * Resource for the DTD. - */ - protected static final String DTD_RESOURCE = "org/ow2/jonas/security/realm/dtd/jonas-realm_1_0.dtd"; - - /** - * Unique JresourceManager instance. - */ - private static JResourceManager instance = null; - - /** - * Reference to the jmx service. - */ - private JmxService jmxService = null; - - /** - * name of the management domain. - */ - private String domainName = null; - - /** - * Private Constructor for Singleton. - */ - private JResourceManager() { - - } - - /** - * @return returns the unique JResourceManager instance - */ - public static JResourceManager getInstance() { - if (instance == null) { - instance = new JResourceManager(); - } - return instance; - } - - /** - * Create and configure the Digester that will be used for the xml - * parsing of the JOnAS realm file. - * @return Digester the digester containing the rules for the xml parsing - * of the JOnAS realm file (jonas-realm.xml) - */ - protected Digester createRealmDigester() { - - boolean validating = true; - URL dtdUrl = getClass().getResource("/" + DTD_RESOURCE); - - if (dtdUrl == null) { - // Can't locate URL for DTD, no validation - logger.log(BasicLevel.INFO, "Unable to find the '" + DTD_RESOURCE + "' resource. no validation will be done."); - validating = false; - } - - // Initialize the digester - Digester digester = null; - try { - digester = new Digester(); - } catch (Throwable e) { - System.out.println("new Digester: " + e); - throw new RuntimeException("Cannot create Digester" + e); - } - - if (validating) { - digester.register("-//ObjectWeb//DTD JOnAS realm 1.0//EN", dtdUrl.toExternalForm()); - } - - digester.setValidating(validating); - digester.setErrorHandler(new JErrorHandler()); - digester.addRuleSet(new JMemoryRuleSet("jonas-realm/jonas-memoryrealm/")); - digester.addRuleSet(new JDSRuleSet("jonas-realm/jonas-dsrealm/")); - digester.addRuleSet(new JLDAPRuleSet("jonas-realm/jonas-ldaprealm/")); - - return (digester); - } - - /** - * Add JResource(s) created from parsing of the reader contents inside the JResources given instance. - * - * @param res JResources element where JResource will be addded. - * @param reader XML Content Reader - * @param xml filename / xml : used in Error messages - * - * @throws SecurityServiceException When parsing fails - */ - public void addResources(final JResources res, final Reader reader, final String xml) throws SecurityServiceException { - if (!res.hasJmxService()) { - res.setJmxService(jmxService); - res.setDomainName(domainName); - } - try { - // Create the digester for the parsing of the jonas-realm.xml file. - Digester realmDigester = createRealmDigester(); - realmDigester.setClassLoader(getClass().getClassLoader()); - realmDigester.push(res); - realmDigester.parse(reader); - reader.close(); - } catch (org.xml.sax.SAXException saxe) { - throw new SecurityServiceException("Error when parsing the XML of the file " + xml, saxe); - } catch (Exception e) { - throw new SecurityServiceException("Error when reading config file from the xml file " + xml, e); - } - - } - - /** - * Set the domain name - * @param domain the domain name - */ - public void setDomainName(final String domain) { - domainName = domain; - } - - /** - * Set the jmx service reference - * @param jmxService the jmx service reference - */ - public void setJmxService(final JmxService jmx) { - jmxService = jmx; - } - - public boolean hasJmxService() { - if (jmxService != null) { - return true; - } else { - return false; - } - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JDSRuleSet.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JDSRuleSet.java deleted file mode 100644 index 77468d0b2f..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JDSRuleSet.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.rules; - -import org.apache.commons.digester.Digester; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.security.internal.realm.factory.JResourceDS; -import org.ow2.jonas.security.realm.factory.JResource; - - - -/** - * Add the rules for the datasource in the jonas-realm.xml file - * - * @author Guillaume Sauthier - */ -public class JDSRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JDSRuleSet(final String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - @Override - public void addRuleInstances(final Digester digester) { - - // Configure the actions we will be using - digester.addObjectCreate(prefix + "dsrealm", - JResourceDS.class.getName()); - - digester.addSetProperties(prefix + "dsrealm"); - digester.addSetNext(prefix + "dsrealm", - "addJResource", - JResource.class.getName()); - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JLDAPRuleSet.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JLDAPRuleSet.java deleted file mode 100644 index 62e982da8d..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JLDAPRuleSet.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.rules; - -import org.apache.commons.digester.Digester; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.security.internal.realm.factory.JResourceLDAP; -import org.ow2.jonas.security.realm.factory.JResource; - - - -/** - * Add the rules for the ldap in the jonas-realm.xml file - * - * @author Guillaume Sauthier - */ -public class JLDAPRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JLDAPRuleSet(final String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - @Override - public void addRuleInstances(final Digester digester) { - - // Configure the actions we will be using - digester.addObjectCreate(prefix + "ldaprealm", - JResourceLDAP.class.getName()); - - digester.addSetProperties(prefix + "ldaprealm"); - digester.addSetNext(prefix + "ldaprealm", - "addJResource", - JResource.class.getName()); - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JMemoryRuleSet.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JMemoryRuleSet.java deleted file mode 100644 index e8c5ee25f7..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/rules/JMemoryRuleSet.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.rules; - -import org.apache.commons.digester.Digester; -import org.ow2.jonas.deployment.common.rules.JRuleSetBase; -import org.ow2.jonas.security.internal.realm.factory.JResourceMemory; -import org.ow2.jonas.security.internal.realm.principal.Group; -import org.ow2.jonas.security.internal.realm.principal.Role; -import org.ow2.jonas.security.internal.realm.principal.User; -import org.ow2.jonas.security.realm.factory.JResource; - - - -/** - * Add the rules for the memory in the jonas-realm.xml file - * - * @author Guillaume Sauthier - */ -public class JMemoryRuleSet extends JRuleSetBase { - - /** - * Construct an object with a specific prefix - * @param prefix prefix to use during the parsing - */ - public JMemoryRuleSet(final String prefix) { - super(prefix); - } - /** - * Add a set of rules to the digester object - * @param digester Digester instance - */ - @Override - public void addRuleInstances(final Digester digester) { - // Configure the actions we will be using - digester.addObjectCreate(prefix + "memoryrealm", - JResourceMemory.class.getName()); - - digester.addSetProperties(prefix + "memoryrealm"); - digester.addSetNext(prefix + "memoryrealm", - "addJResource", - JResource.class.getName()); - - digester.addObjectCreate(prefix + "memoryrealm/roles/role", - Role.class.getName()); - digester.addSetProperties(prefix + "memoryrealm/roles/role"); - digester.addSetNext("memoryrealm/roles/role", - "addRole", - Role.class.getName()); - - digester.addObjectCreate(prefix + "memoryrealm/groups/group", - Group.class.getName()); - digester.addSetProperties(prefix + "memoryrealm/groups/group"); - digester.addSetNext(prefix + "memoryrealm/groups/group", - "addGroup", - Group.class.getName()); - - digester.addObjectCreate(prefix + "memoryrealm/users/user", - User.class.getName()); - digester.addSetProperties(prefix + "memoryrealm/users/user"); - digester.addSetNext(prefix + "memoryrealm/users/user", - "addUser", - User.class.getName()); - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/SecurityContextHelper.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/SecurityContextHelper.java deleted file mode 100644 index 96a0ba021a..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/SecurityContextHelper.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.security.ws; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.security.internal.AbsSecurityContextHelper; - -import org.objectweb.util.monolog.api.Logger; - -/** - * This class is used by the JOnAS EJB provider Web Service. - * It allows to authenticate users. - * @author Florent Benoit : Initial developper - * @author Helene Joanin : Refactoring - */ -public class SecurityContextHelper extends AbsSecurityContextHelper { - - /** - * The singleton instance. - */ - private static SecurityContextHelper instance = null; - - /** - * WS Realm key. - */ - private static final String WS_REALM_KEY = "jonas.service.security.ws.realm"; - - /** - * Default ws resource name. - */ - private static final String DEFAULT_WS_REALM = "memrlm_1"; - - /** - * Logger. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WS_SECURITY_PREFIX); - - /** - * Private constructor because of singleton. - */ - private SecurityContextHelper() { - } - - /** - * @return return the singleton instance. - */ - public static SecurityContextHelper getInstance() { - if (instance == null) { - instance = new SecurityContextHelper(); - } - return instance; - } - - /** - * @return the associated logger. - */ - protected Logger getLogger() { - return logger; - } - - /** - * @return return the WS Realm key. - */ - protected String getRealmKey() { - return WS_REALM_KEY; - } - - /** - * @return return the WS default Realm. - */ - protected String getRealmDefault() { - return DEFAULT_WS_REALM; - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializer.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializer.java deleted file mode 100644 index 5a51f192d6..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializer.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.ws.initializer; - -import org.ow2.jonas.security.SecurityService; - -/** - * Initializes ws/iiop security context helpers. - * @author eyindanga - * - */ -public class SecurityContextInitializer { - /** - * The security service. - */ - private SecurityService securityService = null; - /** - * Bind the security service. - * @param securityService the security service to bind. - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - org.ow2.jonas.security.ws.SecurityContextHelper.getInstance().setSecurityService(securityService); - } - - /** - * Remove the security service. - */ - public void removeSecurityService() { - org.ow2.jonas.security.ws.SecurityContextHelper.getInstance().setSecurityService(null); - this.securityService = null; - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializerException.java b/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializerException.java deleted file mode 100644 index 9a0ed93cb9..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/java/org/ow2/jonas/security/ws/initializer/SecurityContextInitializerException.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.security.ws.initializer; - -public class SecurityContextInitializerException extends Exception { - - /** - * Default constructor. - * Serial UID. - */ - private static final long serialVersionUID = 1L; - public SecurityContextInitializerException() { - super(); - } - - /** - *Constructor using message. - * @param message The message of the excetion. - */ - public SecurityContextInitializerException(final String message) { - super(message); - - } - -} diff --git a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jaas.config b/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jaas.config deleted file mode 100644 index 1cb3468e12..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jaas.config +++ /dev/null @@ -1,123 +0,0 @@ -jaasclient { - // Login Module to use for the example jaasclient. - - //First, use a LoginModule for the authentication - // Use the resource memrlm_1 - - //By default it uses the server named 'jonas' to authenticate - // to specify a different server name, use attribute 'serverName="myJonas"' - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // The previous JResourceLoginModule was renamed to JDirectResourceLoginModule - // You need to activate the registration of resources in jonas.properties file - - - // Use the login module to propagate security to the JOnAS server - // globalCtx is set to true in order to set the security context - // for all the threads of the client container instead of only - // on the current thread. - // Useful with multithread applications (like Swing Clients) - org.ow2.jonas.security.auth.spi.ClientLoginModule required - globalCtx="true" - ; -}; - -jaas-jmx { - // Use LoginModule for JMX authentication - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // Use the login module to add tenantId in TenantContext - // org.ow2.jonas.lib.tenant.loginmodule.TenantIdLoginModule required; -}; - -jetty { - // Login Module to use for the web container Jetty - - - // Uncomment this if you want to check that the certificates - // were not revocated by the Certification Authority - //org.ow2.jonas.security.auth.spi.CRLLoginModule required - //CRLsResourceName="Directory" - //CRLsDirectoryName="/home/jonas/CRLs" - //; - - - //LoginModule for the authentication - //add parameter certCallback="true" if you want use certificate callback - // Use the resource memrlm_1 - //By default it uses the server named 'jonas' to authenticate - // to specify a different server name, use attribute 'serverName="myJonas"' - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; -}; - -tomcat { - // Login Module to use for the web container Tomcat - - - // Uncomment this if you want to check that the certificates - // were not revocated by the Certification Authority - //org.ow2.jonas.security.auth.spi.CRLLoginModule required - //CRLsResourceName="Directory" - //CRLsDirectoryName="/home/jonas/CRLs" - //; - - - //LoginModule for the authentication - //add parameter certCallback="true" if you want use certificate callback - // Use the resource memrlm_1 - //By default it uses the server named 'jonas' to authenticate - // to specify a different server name, use attribute 'serverName="myJonas"' - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; -}; - -test { - // Login Module to use for the a client without setting for all threads the identity - - //LoginModule for the authentication - //add parameter certCallback="true" if you want use certificate callback - // Use the resource memrlm_1 - //By default it uses the server named 'jonas' to authenticate - // to specify a different server name, use attribute 'serverName="myJonas"' - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - //Security propagation - org.ow2.jonas.security.auth.spi.ClientLoginModule required; -}; - -ask_remote { - // Ask the remote side - org.ow2.jonas.security.auth.spi.RemoteLoginModule required - entryName="remote" providerURLs="rmi://localhost:1099, rmi://localhost:1979" serverName="jonas" serverNames="jonas,j1,j2,j3" - ; - -}; - - -remote { - // Do authentication and sign the Subject. - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // Specify the keystore to use with the alias and the associated password used to get the private key. - org.ow2.jonas.security.auth.spi.SignLoginModule required - keystoreFile="/tmp/keystore" keystorePass="keystorepass" keyPass="keypass" alias="OW" - ; - -}; - -shelbie { - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; -}; diff --git a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/java.policy b/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/java.policy deleted file mode 100644 index 6789deb5d6..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/java.policy +++ /dev/null @@ -1,10 +0,0 @@ -//##################### Security Policy -// -// The default security policy for the JOnAS server. -// Currently, this is set to allow all permissions. -// - -grant { - // Allow everything for now - permission java.security.AllPermission; -}; diff --git a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jonas-realm.xml b/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jonas-realm.xml deleted file mode 100644 index 8255c023b1..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/jonas-resources/conf/jonas-realm.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-security/core/src/main/resources/META-INF/jonas-security-core.bnd b/jonas/modules/services/jonas-security/core/src/main/resources/META-INF/jonas-security-core.bnd deleted file mode 100644 index 03d1ab49ba..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/resources/META-INF/jonas-security-core.bnd +++ /dev/null @@ -1,47 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -#Note : Internal is exported as it contains abstract classes -# Abstract classes should be moved to another package - -Export-Package org.ow2.jonas.security.internal.realm.factory,\ - org.ow2.jonas.security.auth.callback,\ - org.ow2.jonas.security.auth.spi,\ - org.ow2.jonas.security.ws,\ - org.ow2.jonas.security.internal - -Private-Package org.ow2.jonas.security.internal.realm.lib,\ - org.ow2.jonas.security.internal.realm.principal,\ - org.ow2.jonas.security.rules.*,\ - org.ow2.jonas.security.lib.*,\ - org.ow2.jonas.security.ws.initializer - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * - -DynamicImport-Package org.ow2.jonas.security.interceptors.jrmp, \ - org.ow2.jonas.tm.jotm.jta.rmi, \ - org.ow2.jonas.lib.security.jacc, \ - org.ow2.jonas.addon.deploy.api.config - diff --git a/jonas/modules/services/jonas-security/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-security/core/src/main/resources/metadata.xml deleted file mode 100644 index ac9438abaa..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/internal/realm/factory/mbeans-descriptors.xml b/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/internal/realm/factory/mbeans-descriptors.xml deleted file mode 100644 index 44353e720a..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/internal/realm/factory/mbeans-descriptors.xml +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/realm/dtd/jonas-realm_1_0.dtd b/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/realm/dtd/jonas-realm_1_0.dtd deleted file mode 100644 index db0ebf6cd5..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/resources/org/ow2/jonas/security/realm/dtd/jonas-realm_1_0.dtd +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/core/src/main/templates/jonas-security.properties.template b/jonas/modules/services/jonas-security/core/src/main/templates/jonas-security.properties.template deleted file mode 100644 index 0cf535c01e..0000000000 --- a/jonas/modules/services/jonas-security/core/src/main/templates/jonas-security.properties.template +++ /dev/null @@ -1,28 +0,0 @@ -# -###################### JOnAS SECURITY service configuration -# -jonas.services security -# Set the name of the implementation class of the security service -jonas.service.security.class org.ow2.jonas.security.internal.JonasSecurityServiceImpl - -# Realm used for CsiV2 authentication -jonas.service.security.csiv2.realm memrlm_1 - -# Realm used for Web Service authentication -jonas.service.security.ws.realm memrlm_1 - -# Registration of realm resources into JNDI -# Disable by default so configuration is not available with clients -jonas.service.security.realm.jndi.registration false - -# Enable security context check on Remote Login Module -jonas.service.security.context.check false - -# Path to the keystore file -jonas.service.security.context.check.keystoreFile /tmp/keystore - -# Pass used for the keystore file -jonas.service.security.context.check.keystorePass keystorepass - -# Alias (stored in the keystore) -jonas.service.security.context.check.alias FB \ No newline at end of file diff --git a/jonas/modules/services/jonas-security/pom.xml b/jonas/modules/services/jonas-security/pom.xml deleted file mode 100644 index beb28ac75b..0000000000 --- a/jonas/modules/services/jonas-security/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-security - pom - JOnAS :: Services :: Security - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/addon/pom.xml b/jonas/modules/services/jonas-tm-jotm/addon/pom.xml deleted file mode 100644 index d4c5f9c8e1..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/addon/pom.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - - - jonas-tm-jotm - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: JOTM Transaction :: Addon - jonas-tm-jotm-addon - pom - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-tm-jotm-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/jotm-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/addon/src/main/assembly/assembly.xml b/jonas/modules/services/jonas-tm-jotm/addon/src/main/assembly/assembly.xml deleted file mode 100644 index d4640b7a49..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - jtm-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/jonas-tm-jotm/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index d93237abde..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - tm-jotm - - - JOnAS JOTM Transaction Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.jtm - - - - - - org.ow2.jonas.tm.jotm.JOTMTransactionService - - false - - 60 - - diff --git a/jonas/modules/services/jonas-tm-jotm/core/pom.xml b/jonas/modules/services/jonas-tm-jotm/core/pom.xml deleted file mode 100644 index ddf78354b4..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/pom.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - - - jonas-tm-jotm - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-tm-jotm-core - bundle - JOnAS :: Services :: JOTM Transaction :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - org.ow2.spec.ee - ow2-connector-1.5-spec - provided - - - org.ow2.jotm - jotm-core - provided - - - org.ow2.jotm - jotm-interceptor-jrmp - provided - - - org.ow2.carol - carol - - - org.ow2.carol - carol-interceptors - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - jotm-deployment-plan - - - org.ow2.jotm - jotm-core - ${jotm.version} - - - org.ow2.jotm - jotm-interceptor-jrmp - ${jotm.version} - - - org.ow2.jonas - jonas-tm-jotm-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionManager.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionManager.java deleted file mode 100644 index 09c3e9580f..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionManager.java +++ /dev/null @@ -1,257 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm; - -import java.util.EmptyStackException; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Stack; -import java.util.Vector; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.xa.XAException; -import javax.transaction.xa.XAResource; - - -import org.objectweb.jotm.Current; -import org.objectweb.jotm.TransactionContext; -import org.objectweb.jotm.TransactionFactory; -import org.objectweb.jotm.TransactionRecovery; -import org.objectweb.jotm.TransactionResourceManager; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.tm.Enlistable; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TxResourceManager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Wrapper on the JOTM TransactionManager (Current) - * This is necessary to track the begin() calls and implement - * the additional methods defined in org.ow2.jonas.tm.TransactionManager. - * @author durieuxp - */ -public class JOTMTransactionManager extends Current implements TransactionManager { - - private static Logger logger = Log.getLogger(Log.JONAS_SERVER_PREFIX); - - // Must be init at null, for clients that do not get UserTransaction - private transient static JOTMTransactionManager unique = null; - - private transient ThreadLocal connectionListStack = new ThreadLocal(); - - public JOTMTransactionManager(TransactionFactory tmfact) { - super(tmfact); - unique = this; - } - - /** - * Constructor for clients (See UserTramsactionFactory) - */ - public JOTMTransactionManager() { - super(); - unique = this; - } - - public static JOTMTransactionManager getUnique() { - return unique; - } - - /** - * We want to use our UserTransactionFactory here, that will - * instanciate a JOTMTransactionManager. - */ - public Reference getReference() throws NamingException { - logger.log(BasicLevel.DEBUG, ""); - - // create the reference - Reference ref = new Reference(this.getClass().getName(), UserTransactionFactory.class.getName(), null); - - // Should be: getTransactionTimeout() - int i = getDefaultTimeout(); - ref.add(new StringRefAddr("jotm.timeout", new String("" + i))); - - return ref; - } - - /** - * Creates a new transaction and associate it with the current thread. - * - * @exception NotSupportedException Thrown if the thread is already - * associated with a transaction. (nested transaction are not - * supported) - * - * @exception SystemException Thrown if the transaction manager - * encounters an unexpected error condition - */ - public void begin() throws NotSupportedException, SystemException { - super.begin(); - - Stack curStack = (Stack) connectionListStack.get(); - if (curStack != null) { - try { - List list = (List) curStack.peek(); - - if (list != null) { - List templist = new Vector(list); // avoid using an iterator on global list - for (Iterator it = templist.iterator(); it.hasNext();) { - Enlistable mce = (Enlistable) it.next(); - mce.enlistConnection(getTransaction()); - } - } else { - logger.log(BasicLevel.DEBUG, "Current.begin called with null list"); - } - } catch (EmptyStackException e) { - logger.log(BasicLevel.DEBUG, "Current.begin called with empty stack"); - } - } - } - - /** - * A Connection has been opened. Must keep it in a list in - * case a transaction is started, in order to enlist it in the transaction. - * This is done here. to avoid depending on a specific TM implementation. - * @param mce The Connection to be enlisted - */ - public void notifyConnectionOpen(Enlistable mce) { - logger.log(BasicLevel.DEBUG, ""); - - Stack curStack = (Stack) connectionListStack.get(); - if (curStack == null) { - // no stack yet : create one - connectionListStack.set(curStack = new Stack()); - } - - List list = null; - try { - list = (List) curStack.pop(); - } catch (EmptyStackException e) { - // ignore: might happen if thread used by session bean - } - if (list == null) { - // no list yet: create one - list = new Vector(1); - } - - // add connection to list - list.add(mce); - - // push list into stack - curStack.push(list); - } - - /** - * A Connection has been closed. - * @param mce The Connection to be enlisted - */ - public void notifyConnectionClose(Enlistable mce) { - logger.log(BasicLevel.DEBUG, ""); - removeFromCurrentStack(mce); - } - - /** - * A Connection has been in error. - * @param mce The Connection to be enlisted - */ - public void notifyConnectionError(Enlistable mce) { - logger.log(BasicLevel.DEBUG, ""); - removeFromCurrentStack(mce); - } - - private void removeFromCurrentStack(Enlistable mce) { - - Stack curStack = (Stack) connectionListStack.get(); - if (curStack == null) { - // if no transaction currently executing (no begin), no curStack - // has been put on the eventListStack so just return - return; - } - - try { - List list = (List) curStack.peek(); - if (list != null) { - list.remove(mce); - } - } catch (EmptyStackException e) { - // no list of RM Events are known, just return - } - } - - public void pushConnectionList(List cl) { - logger.log(BasicLevel.DEBUG, ""); - Stack curStack = (Stack) connectionListStack.get(); - if (curStack == null) { - // no stack yet : create one - connectionListStack.set(curStack = new Stack()); - } - curStack.push(cl); - } - - public List popConnectionList() { - logger.log(BasicLevel.DEBUG, ""); - Stack curStack = (Stack) connectionListStack.get(); - return (List) curStack.pop(); - } - - public boolean nonJotmTransactionContext() { - TransactionContext transContext = getPropagationContext(false); - if (transContext == null) { - return false; - } - return ! transContext.isJotmCtx(); - } - - public boolean isRecoveryEnabled() { - TransactionRecovery tr = getTransactionRecovery(); - if (tr == null || !getDefaultRecovery()) { - return false; - } - return true; - } - - public void registerResourceManager(String rmName, XAResource xares, - String info, Properties p, TxResourceManager trm) throws XAException { - - TransactionRecovery tr = getTransactionRecovery(); - - TransactionResourceManager mytrm = null; - if (trm != null) { - mytrm = new JOTMTransactionResourceManager(trm); - } - if (p != null) { - tr.registerResourceManager(rmName, xares, info, p, mytrm); - } else { - tr.registerResourceManager(rmName, xares, info, mytrm); - } - } -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionResourceManager.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionResourceManager.java deleted file mode 100644 index 70c7bb2c29..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionResourceManager.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm; - -import javax.transaction.xa.XAResource; - -import org.ow2.jonas.tm.TxResourceManager; - -import org.objectweb.jotm.TransactionResourceManager; - -/** - * Wrapper on a TxResourceManager. Called by the TransactionManager to free - * the XAResource after recovery. - * @author durieuxp - * - */ -public class JOTMTransactionResourceManager implements TransactionResourceManager { - - TxResourceManager trm = null; - - public JOTMTransactionResourceManager(TxResourceManager trm) { - this.trm = trm; - } - - public void returnXAResource(String name, XAResource xares) { - trm.freeXAResource(xares); - } - -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionService.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionService.java deleted file mode 100644 index 5f7a9882e6..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/JOTMTransactionService.java +++ /dev/null @@ -1,667 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JOTMTransactionService.java 10445 2007-05-23 16:34:28Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm; - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.List; - -import javax.management.ObjectName; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.resource.spi.XATerminator; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; -import javax.transaction.xa.XAException; -import javax.transaction.xa.Xid; - -import org.objectweb.jotm.Current; -import org.objectweb.jotm.TransactionFactory; -import org.objectweb.jotm.TransactionFactoryImpl; -import org.objectweb.jotm.TransactionSynchronizationRegistryImpl; -import org.objectweb.jotm.jta.rmi.JTAInterceptorInitializer; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.carol.rmi.interceptor.spi.JInitializer; -import org.ow2.carol.util.configuration.ConfigurationException; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionManager; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.tm.jotm.mbean.JTAResource; - -/** - * Transaction Service implementation. - * This singleton class must exist in each jonas server. - * This class manages a unique Current object that implements both - * TransactionManager and UserTransaction interfaces. - * @author Philippe Durieux - * Contributor(s): Adriana Danes - */ -public class JOTMTransactionService extends AbsServiceImpl implements TransactionService { - - /** - * JOTM Service Logger. - */ - private static Logger logger = Log.getLogger(JOTMTransactionService.class.getName()); - - /** - * Default Transaction timeout. - */ - private static final int DEFAULT_TIMEOUT = 60; - - /** - * Time to wait if the remote TM is not available. - */ - private static final int TM_LOOKUP_WAIT_TIME = 2000; - - /** - * Property for the transaction propagation. - */ - private static final String TRANSACTION_PROPAGATION = "jonas.transaction.propagation"; - - /** - * TM factory may be local or remote. - * The TM factory is used by the JTA implementation when transactions - * are distributed among several JVM (JOnAS Server or applet client) - */ - private TransactionFactory tmFactory = null; - - /** - * Unique Current object implementing the standard - * {@link javax.transaction.TransactionManager} - * set to null while service is not started. - */ - private JOTMTransactionManager current = null; - - // Configuration information used to start the Transaction service - /** - * TX timeout. - */ - private int timeout = DEFAULT_TIMEOUT; - - /** - * Is TM local ? - */ - private boolean jtmlocal; - - /** - * JNDI Context. - */ - private InitialContext ictx; - - /** - * jmx service reference. - */ - private JmxService jmxService = null; - - /** - * Registry Service. - */ - private RegistryService registryService; - - /** - * JTAResource ObjectName. - */ - private ObjectName onJTAResource = null; - - /** - * List of registered JRMP interceptors. - */ - private List> jrmpInterceptors = null; - - /** - * TransactionSynchronizationRegistry object, to be shared by all components. - */ - protected TransactionSynchronizationRegistry tsr = null; - - /** - * Bundle Context. - */ - private BundleContext bundleContext = null; - - /** - * UserTransaction OSGi Service. - */ - private ServiceRegistration osgiUserTransactionService; - - /** - * TransactionManager OSGi Service. - */ - private ServiceRegistration osgiTransactionManagerService; - - /** - * TransactionSynchronization OSGi Service. - */ - private ServiceRegistration osgiTransactionSynchronizationService; - - - - - public JOTMTransactionService(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * @param remote Use a remote TransactionManager ? - */ - public void setRemote(final boolean remote) { - jtmlocal = !remote; - } - - /** - * Start the Service - * Initialization of the service is already done. - * @throws ServiceException if service start fails - */ - @Override - public void doStart() throws ServiceException { - logger.log(BasicLevel.DEBUG, "Starting JOTMTransaction Service"); - - jrmpInterceptors = new ArrayList>(); - - try { - boolean transaction = Boolean.parseBoolean(getServerProperties().getValue(TRANSACTION_PROPAGATION)); - if (transaction) { - jrmpInterceptors.add(JTAInterceptorInitializer.class); - } - - for (Class interceptor : jrmpInterceptors) { - ConfigurationRepository.addInterceptors("jrmp", interceptor); - } - } catch (ConfigurationException e) { - throw new ServiceException("Cannot init JTA interceptor for Carol", e); - } - - // init management logger - //super.initLogger(Log.getLogger(Log.JONAS_MANAGEMENT_PREFIX)); - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Get the InitialContext - ictx = getRegistryService().getRegistryContext(); - - // Gets the Distributed Transaction Manager (JTM) - if (jtmlocal) { - // Creates a JTM locally in this server - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "working with a colocated Transaction Manager "); - } - - // TODO Recovery of the JTM - - // Creates the ControlFactory and register it in JNDI. - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Create and register TM factory"); - } - - // Create the TransactionFactory - tmFactory = new TransactionFactoryImpl(); - - ictx.rebind("TMFactory", tmFactory); - } catch (RemoteException e) { - logger.log(BasicLevel.ERROR, "TransactionService: Cannot create TransactionFactory:\n" + e); - throw new ServiceException("TransactionService: Cannot create TransactionFactory", e); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "TransactionService: Cannot rebind TM:\n" + e); - throw new ServiceException("TransactionService: Cannot rebind TM", e); - } - } else { - // JTM is remote, finds it by JNDI - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "working with a remote Transaction Manager "); - } - final int maxloops = 5; - for (int i = 0; i <= maxloops; i++) { - try { - // Create the TransactionFactory in an execution block - IExecution tmFactoryBuilder = new IExecution() { - public TransactionFactory execute() throws Exception { - return (TransactionFactory) ictx.lookup("TMFactory"); - } - }; - - // Execute - ExecutionResult tmFactoryResult = RunnableHelper.execute(getClass() - .getClassLoader(), tmFactoryBuilder); - - // Throw an ServiceException if needed - if (tmFactoryResult.hasException()) { - throw new NamingException("TransactionService: Cannot get TM factory"); - } - // Store the ref - tmFactory = tmFactoryResult.getResult(); - break; - } catch (NamingException e) { - if (i < maxloops) { - logger.log(BasicLevel.WARN, "Cannot get TM factory - retrying..."); - try { - Thread.sleep(TM_LOOKUP_WAIT_TIME * (i + 1)); - } catch (InterruptedException e2) { - throw new ServiceException("Cannot get TM factory", e2); - } - } else { - logger.log(BasicLevel.ERROR, "TransactionService: Cannot get TM factory:\n" + e); - throw new ServiceException("TransactionService: Cannot get TM factory", e); - } - } - } - } - // Get TM factory configuration parameters - int portNumber = 0; - String hostName = null; - try { - portNumber = tmFactory.getPortNumber(); - hostName = tmFactory.getHostName(); - } catch (RemoteException e) { - logger.log(BasicLevel.ERROR, "TransactionService: Cannot access TransactionFactory" - + "when trying to get configuration parameters:\n" + e); - throw new ServiceException("TransactionService: Cannot access TransactionFactory", - e); - } - // Create and init the unique Current object. - // Current is the local TransactionManager. It must be present in every - // jonas server and implements the JTA TransactionManager interface. - // - // In case of a JTM standalone: - // We must create the current only to export it via JNDI for clients - // that want to get UserTransaction. - current = new JOTMTransactionManager(tmFactory); - setTimeout(timeout); - - // Admin code - // --------- - // Register TransactionService MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.transactionService(getDomainName())); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot register TransactionService MBean", e); - } - - // Register JTAResource implemented by this Service - String sJTAResourceName = "JTAResource"; - onJTAResource = J2eeObjectName.JTAResource(getDomainName(), - getJonasServerName(), - sJTAResourceName); - JTAResource jtaResourceMBean = new JTAResource(onJTAResource.toString(), - this, - new Integer(timeout), - new Boolean(jtmlocal), - new Integer(portNumber), - hostName); - try { - jmxService.registerModelMBean(jtaResourceMBean, onJTAResource); - } catch (Exception e) { - e.printStackTrace(); - logger.log(BasicLevel.ERROR, "Cannot register JTAResource MBean", e); - } - - // Register JTA Enterprise OSGi services - osgiUserTransactionService = bundleContext.registerService(UserTransaction.class.getName(), - getUserTransaction(), - null); - osgiTransactionManagerService = bundleContext.registerService(new String[] {TransactionManager.class.getName(), - javax.transaction.TransactionManager.class.getName()}, - getTransactionManager(), - null); - osgiTransactionSynchronizationService = bundleContext.registerService(TransactionSynchronizationRegistry.class.getName(), - getTransactionSynchronizationRegistry(), - null); - - logger.log(BasicLevel.INFO, "TransactionService started, default timeout= " + timeout); - - } - - /** - * Stop the transaction service. - * Not already implemented - * @throws ServiceException if the service stop fails - */ - @Override - public void doStop() throws ServiceException { - // TODO Find a way to unload mbeans-descriptors - if (jmxService != null) { - jmxService.unregisterModelMBean(onJTAResource); - jmxService.unregisterModelMBean(JonasObjectName.transactionService(getDomainName())); - } - - try { - for (Class interceptor : jrmpInterceptors) { - ConfigurationRepository.removeInterceptors("jrmp", interceptor); - } - jrmpInterceptors.clear(); - } catch (ConfigurationException e) { - throw new ServiceException("Cannot remove security interceptors for Carol", e); - } - - - // Unregister JTA Enterprise OSGi services - if (osgiUserTransactionService != null) { - osgiUserTransactionService.unregister(); - } - if (osgiTransactionManagerService != null) { - osgiTransactionManagerService.unregister(); - } - if (osgiTransactionSynchronizationService != null) { - osgiTransactionSynchronizationService.unregister(); - } - - logger.log(BasicLevel.INFO, "TransactionService stopped"); - } - - // ------------------------------------------------------------------- - // TransactionService Implementation - // ------------------------------------------------------------------- - - /** - * Gets the TransactionManager object instance. - * @return the transaction manager - */ - public TransactionManager getTransactionManager() { - return current; - } - - /** - * Gets the inflow transaction object that represents the transaction context of - * the calling thread. If the calling thread is - * not associated with an inflow transaction, a null object reference - * is returned. - * @return a XATerminator handle - * @throws XAException - */ - public XATerminator getXATerminator() throws XAException { - return current.getXATerminator(); - } - - /** - * Gets the UserTransaction object instance. - * @return the user transaction object - */ - public UserTransaction getUserTransaction() { - return current; - } - - /** - * Gets the TransactionSynchronizationRegistry object instance. - * @return the transaction synchronization registry object - */ - public TransactionSynchronizationRegistry getTransactionSynchronizationRegistry() { - if (tsr == null) { - // Get TransactionSynchronizationRegistry instance - try { - tsr = (TransactionSynchronizationRegistry) ictx.lookup("javax.transaction.TransactionSynchronizationRegistry"); - } catch (NamingException ne) { - logger.log(BasicLevel.WARN, "Cannot lookup TransactionSynchronizationRegistry"); - } - } - logger.log(BasicLevel.DEBUG, "return TSR: " + tsr); - return tsr; - } - - /** - * Start Resource Manager Recovery. - */ - public void startResourceManagerRecovery() throws XAException { - Current.getTransactionRecovery().startResourceManagerRecovery(); - } - - public int getTimeout() { - return current.getDefaultTimeout(); - } - - /** - * Sets the default transaction timeout and register Current in JNDI. - * @param t new value for time-out - */ - public void setTimeout(final int t) { - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "" + t); - } - - timeout = t; - - // During the configuration step (injection), the current is null - if (current != null) { - current.setDefaultTimeout(t); - - if (jtmlocal) { - // Register a UserTransactionFactory in JNDI. - // Only if we are inside the JTM - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Register UserTransactionFactory"); - } - ictx.rebind("javax.transaction.UserTransaction", current); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot rebind UserTransaction:" + e); - } - // Register TransactionSynchronizationRegistry in JNDI - // Only if we are inside the JTM - tsr = TransactionSynchronizationRegistryImpl.getInstance(); - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Register TSR in JNDI:" + tsr); - } - ictx.rebind("javax.transaction.TransactionSynchronizationRegistry", tsr); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot rebind TransactionSynchronizationRegistry:" + e); - } - } - } - - } - - /** - * Get begun transactions number. - * @return total number of begun transactions - */ - public int getTotalBegunTransactions() { - int ret = current.getTotalBegunTransactions(); - if (ret < 0) { - logger.log(BasicLevel.ERROR, "Negative value for TotalBegunTransactions:" + ret); - } - return ret; - } - - /** - * Get committed transactions number. - * @return total number of committed transactions - */ - public int getTotalCommittedTransactions() { - int ret = current.getTotalCommittedTransactions(); - if (ret < 0) { - logger.log(BasicLevel.ERROR, "Negative value for TotalCommittedTransactions:" + ret); - } - return ret; - } - - /** - * Get current transactions number. - * @return total number of current transactions - */ - public int getTotalCurrentTransactions() { - int ret = current.getTotalCurrentTransactions(); - if (ret < 0) { - logger.log(BasicLevel.ERROR, "Negative value for TotalCurrentTransactions:" + ret); - } - return ret; - } - - /** - * Get expired transactions number. - * @return total number of expired transactions - */ - public int getTotalExpiredTransactions() { - int ret = current.getTotalExpiredTransactions(); - if (ret < 0) { - logger.log(BasicLevel.ERROR, "Negative value for TotalExpiredTransactions:" + ret); - } - return ret; - } - - /** - * Get rolled back transactions number. - * @return total number of rolled back transactions - */ - public int getTotalRolledbackTransactions() { - int ret = current.getTotalRolledbackTransactions(); - if (ret < 0) { - logger.log(BasicLevel.ERROR, "Negative value for TotalRolledbackTransactions:" + ret); - } - return ret; - } - - /** - * Reset all transaction counters. - */ - public void resetAllTxTotalCounters() { - current.resetAllTxTotalCounters(); - } - - /** - * Get all currently executing Xids. - * @return total number of executing Xids - */ - public Xid [] getAllActiveXids() { - return (current.getAllXid()); - } - - /** - * Get all currently executing transactions. - * @return total number of executing transaction - */ - public String [] getAllActiveTx() { - String [] mysArray; - - mysArray = current.getAllTx(); - return mysArray; - } - - /** - * Get all transactions that require administrator recovery action. - * @return Transactions that require administrator recovery action - */ - public String [] getAllRecoveryTx() { - String [] mysArray; - - mysArray = current.getAllRcTx(); - return mysArray; - } - - /** - * Get all XAResoures of a transaction that require administrator recovery action. - * @return XAResources that require administrator recovery action - */ - public String [] getAllXAResource(final String xtx) { - String [] mysArray; - - mysArray = current.getAllXaTx(xtx); - return mysArray; - } - - /** - * administrator recovery action: Commit. - * @return int error, or 0 if OK. - */ - public int commitXAResource(final String xatx) { - int commiterror; - commiterror = current.actionXAResource("commit", xatx); - return commiterror; - } - - /** - * administrator recovery action: rollback - * @return int error, or 0 if OK. - */ - public int rollbackXAResource(final String xatx) { - int rollbackerror; - rollbackerror = current.actionXAResource("rollback", xatx); - return rollbackerror; - } - - /** - * administrator recovery action: forget - * @return int error, or 0 if OK. - */ - public int forgetXAResource(final String xatx) { - int forgeterror; - forgeterror = current.actionXAResource("forget", xatx); - return forgeterror; - } - - /** - * {@inheritDoc} - */ - public void attachTransaction(final Xid xid, final long timeout) throws NotSupportedException, SystemException { - current.begin(xid, timeout); - } - - /** - * {@inheritDoc} - */ - public void detachTransaction() { - current.clearThreadTx(); - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param registry the registry service to set - */ - public void setRegistryService(final RegistryService registry) { - this.registryService = registry; - } - - /** - * Returns the registry service. - * @return The registry service - */ - private RegistryService getRegistryService() { - return registryService; - } - -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/UserTransactionFactory.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/UserTransactionFactory.java deleted file mode 100644 index 92cfb6f8d9..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/UserTransactionFactory.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm; - -import java.util.Hashtable; -import javax.naming.Context; -import javax.naming.Name; -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; - -public class UserTransactionFactory implements ObjectFactory { - - public Object getObjectInstance(Object objref, Name name, Context ctx, Hashtable env) throws Exception { - - Reference ref = (Reference) objref; - JOTMTransactionManager ut = null; - - if (ref.getClassName().equals("javax.transaction.UserTransaction") - || ref.getClassName().equals("org.ow2.jonas.tm.jotm.JOTMTransactionManager")) { - // create the UserTransaction object - // No need to init a TMFactory in the client! - ut = JOTMTransactionManager.getUnique(); - - if (ut == null) { - ut = new JOTMTransactionManager(); - - // Get the timeout default value that was configured in the server - String timeoutStr = (String) ref.get("jotm.timeout").getContent(); - Integer i = new Integer(timeoutStr); - int timeout = i.intValue(); - ut.setDefaultTimeout(timeout); - } - } - return ut; - } -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/ServerTransactionCCFDelegate.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/ServerTransactionCCFDelegate.java deleted file mode 100644 index 2ee2a10bf7..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/ServerTransactionCCFDelegate.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm.delegate; - -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; -import org.ow2.jonas.tm.TransactionService; - -/** - * Implements the TransactionCCFDelegate abstract class for server usage. - * @author Francois Fornaciari - */ -// TODO remove interface -public class ServerTransactionCCFDelegate extends TransactionCCFDelegate implements JComponentContextFactoryDelegate { - - /** - * Transaction Service reference. - */ - private TransactionService transactionService; - - /** - * {@inheritDoc} - */ - @Override - protected void init() { - userTransaction = transactionService.getUserTransaction(); - tsr = transactionService.getTransactionSynchronizationRegistry(); - } - - /** - * @param transactionService Transaction Service reference. - */ - public void setTransactionService(final TransactionService transactionService) { - this.transactionService = transactionService; - } - -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/TransactionCCFDelegate.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/TransactionCCFDelegate.java deleted file mode 100644 index e3bd02d998..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/TransactionCCFDelegate.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm.delegate; - -import org.ow2.jonas.naming.JComponentContextFactoryDelegate; - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; - -/** - * Store the {@link javax.transaction.UserTransaction} object - * under the java:comp/UserTransaction name. - * @author Francois Fornaciari - */ -public abstract class TransactionCCFDelegate implements JComponentContextFactoryDelegate { - - /** - * UT Context Name (in java:comp/). - */ - private static final String USER_TRANSACTION = "UserTransaction"; - private static final String TR_SYNC_REGISTRY = "TransactionSynchronizationRegistry"; - - /** - * UserTransaction object, to be shared by all components. - */ - protected UserTransaction userTransaction = null; - - /** - * TransactionSynchronizationRegistry object, to be shared by all components. - */ - protected TransactionSynchronizationRegistry tsr = null; - - /** - * Initialize the Context. - * @throws NamingException if unable to create the InitialContext. - */ - protected void init() throws NamingException {} - - /** - * {@inheritDoc} - */ - public void modify(final Context componentContext) throws NamingException { - // init if needed - if (userTransaction == null) { - init(); - } - - // Bind objects to java:comp/ - if (userTransaction != null) { - componentContext.rebind(USER_TRANSACTION, userTransaction); - } - if (tsr != null) { - componentContext.rebind(TR_SYNC_REGISTRY, tsr); - } - } - - /** - * Undo the changes done by this delegate on the given java:comp context. - * @param componentContext java:comp/ component context to be modified. - * @throws NamingException thrown if something goes wrong - * during the {@link javax.naming.Context} update. - */ - public void undo(final Context componentContext) throws NamingException { - if (userTransaction != null) { - componentContext.unbind(USER_TRANSACTION); - } - if (tsr != null) { - componentContext.unbind(TR_SYNC_REGISTRY); - } - } - -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/UserTransactionCCFDelegate.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/UserTransactionCCFDelegate.java deleted file mode 100644 index fd28b21065..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/delegate/UserTransactionCCFDelegate.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm.delegate; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.transaction.TransactionSynchronizationRegistry; -import javax.transaction.UserTransaction; - -/** - * Implements the TransactionCCFDelegate abstract class for client usage. - * @author Guillaume Sauthier - */ -public class UserTransactionCCFDelegate extends TransactionCCFDelegate { - - /** - * JNDI Global name for the UserTransaction. - */ - private static final String USER_TRANSACTION_JNDI_NAME = "javax.transaction.UserTransaction"; - - /** - * JNDI Global name for the TransactionSynchronizationRegistry. - */ - private static final String TR_SYNC_REGISTRY_JNDI_NAME = "javax.transaction.TransactionSynchronizationRegistry"; - - /** - * Logger used for traces. - */ - private static Logger logger = Log.getLogger(Log.JONAS_NAMING_PREFIX); - - /** - * Base InitialContext. - */ - private InitialContext ictx; - - /** - * {@inheritDoc} - */ - protected void init() throws NamingException { - // Initial Context - ictx = new InitialContext(); - - // Get userTransaction instance - try { - userTransaction = (UserTransaction) ictx.lookup(USER_TRANSACTION_JNDI_NAME); - } catch (NamingException ne) { - logger.log(BasicLevel.WARN, "Cannot lookup " + USER_TRANSACTION_JNDI_NAME); - } - - // Get TransactionSynchronizationRegistry instance - try { - tsr = (TransactionSynchronizationRegistry) ictx.lookup(TR_SYNC_REGISTRY_JNDI_NAME); - } catch (NamingException ne) { - logger.log(BasicLevel.WARN, "Cannot lookup " + TR_SYNC_REGISTRY_JNDI_NAME); - } - } - -} diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResource.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResource.java deleted file mode 100644 index df13f78fd2..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResource.java +++ /dev/null @@ -1,255 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:JTAResource.java 10430 2007-05-22 11:44:51Z sauthieg $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tm.jotm.mbean; - -// JOnAS imports -import javax.transaction.xa.Xid; - -import org.ow2.jonas.lib.management.javaee.J2EEResource; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.tm.jotm.JOTMTransactionService; - - -/** - * MBean class for JTAResource Management - * @author Eric Hardesty JSR 77 (J2EE Management Standard) - */ -public class JTAResource extends J2EEResource { - - /** - * Service name as used to label configuration properties - */ - public static final String SERVICE_NAME = "jtm"; - - // Transaction Service configuration properties - /** - * name of the 'timeout' configuration parameter - */ - static final String TIMEOUT = "jonas.service.jtm.timeout"; - - /** - * Value used as sequence number by reconfiguration notifications - */ - private long sequenceNumber = 0; - - /** - * Transactions time-out - */ - private Integer timeOut; - - /** - * JTM port number - */ - private Integer portNumber; - - /** - * JTM host name - */ - private String hostName; - - /** - * true if JTM is local, false if remote - */ - private Boolean localJtm; - - /** - * Managed JTM - */ - private JOTMTransactionService jtm; - - /** - * JTA Resource constructor - * @param objectName String conformant to a JTAResource OBJECT_NAME in JSR77 - * @param jtm Managed JTM - * @param timeOut transactions time-out - * @param localJtm true if JTM is local, false if remote - * @param portNumber JTM port number - * @param hostName JTM host name - */ - public JTAResource(final String objectName, final JOTMTransactionService jtm, final Integer timeOut, final Boolean localJtm, - final Integer portNumber, final String hostName) { - super(objectName); - this.jtm = jtm; - this.timeOut = timeOut; - this.localJtm = localJtm; - this.portNumber = portNumber; - this.hostName = hostName; - } - - /** - * @return Returns the timeOut. - */ - public Integer getTimeOut() { - return timeOut; - } - - /** - * @param timeOut The timeOut to set. - */ - public void setTimeOut(final Integer timeOut) { - this.timeOut = timeOut; - jtm.setTimeout(timeOut.intValue()); - // Send a notification containing the new value of this property to the - // listner MBean - sendReconfigNotification(++sequenceNumber, SERVICE_NAME, new PropertiesConfigurationData(TIMEOUT, timeOut.toString())); - } - - /** - * @return true if JTM is local, false if remote - */ - public Boolean isLocalJtm() { - return localJtm; - } - - /** - * @return JTM port number - */ - public Integer getPortNumber() { - return portNumber; - } - - /** - * @return JTM host name - */ - public String getHostName() { - return hostName; - } - - /** - * Save updated configuration - */ - public void saveConfig() { - sendSaveNotification(++sequenceNumber, SERVICE_NAME); - } - - /** - * @return Returns the totalBegunTransactions. - */ - public Integer getTotalBegunTransactions() { - return new Integer(jtm.getTotalBegunTransactions()); - } - - /** - * @return Returns the totalCommittedTransactions. - */ - public Integer getTotalCommittedTransactions() { - return new Integer(jtm.getTotalCommittedTransactions()); - } - - /** - * @return Returns the totalCurrentTransactions. - */ - public Integer getTotalCurrentTransactions() { - return new Integer(jtm.getTotalCurrentTransactions()); - } - - /** - * @return Returns the totalExpiredTransactions. - */ - public Integer getTotalExpiredTransactions() { - - return new Integer(jtm.getTotalExpiredTransactions()); - } - /** - * @return Returns the totalRolledbackTransactions. - */ - public Integer getTotalRolledbackTransactions() { - return new Integer(jtm.getTotalRolledbackTransactions()); - } - - /** - * Reset all transaction counters - */ - public void resetAllCounters() { - jtm.resetAllTxTotalCounters(); - } - - /** - * @return Returns all active Xids. - */ - public Xid[] getAllActiveXids() { - return jtm.getAllActiveXids(); - } - - /** - * @return Returns all active Transactions. - */ - public String [] getAllActiveTx() { - String [] mysArray; - - mysArray = jtm.getAllActiveTx(); - return mysArray; - } - - /** - * @return Returns all Transactions that require administrator recovery action. - */ - public String [] getAllRecoveryTx() { - String [] mysArray; - - mysArray = jtm.getAllRecoveryTx(); - return mysArray; - } - - /** - * @return Returns all XAResources that require administrator recovery action. - */ - public String [] getAllXAResource(final String xatx) { - String [] mysArray; - mysArray = jtm.getAllXAResource(xatx); - return mysArray; - } - - /** - * administrator recovery action: Commit. - * @return int error, or 0 if OK. - */ - public int commitXAResource(final String xatx) { - int commiterror; - commiterror = jtm.commitXAResource(xatx); - return commiterror; - } - - /** - * administrator recovery action: rollback - * @return int error, or 0 if OK. - */ - public int rollbackXAResource(final String xatx) { - int rollbackerror; - rollbackerror = jtm.rollbackXAResource(xatx); - return rollbackerror; - } - - /** - * administrator recovery action: forget - * @return int error, or 0 if OK. - */ - public int forgetXAResource(final String xatx) { - int forgeterror; - forgeterror = jtm.forgetXAResource(xatx); - return forgeterror; - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResourceMBean.java b/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResourceMBean.java deleted file mode 100644 index c3ad09ea37..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/java/org/ow2/jonas/tm/jotm/mbean/JTAResourceMBean.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tm.jotm.mbean; - -import javax.management.MBeanException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * MBean class for JTA resource management. - * @author Adriana Danes - */ - -public class JTAResourceMBean extends BaseModelMBean { - - // ----------------------------- Contructors - - public JTAResourceMBean() throws MBeanException { - super(); - } -} \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/jonas-resources/conf/jotm.properties b/jonas/modules/services/jonas-tm-jotm/core/src/main/jonas-resources/conf/jotm.properties deleted file mode 100644 index f1a5bce24c..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/jonas-resources/conf/jotm.properties +++ /dev/null @@ -1,15 +0,0 @@ -# ------------------------------------------ -# Jotm properties -# -# see: org.objectweb.howl for description of -# howl properties. -# ------------------------------------------ -jotm.recovery.Enabled false -howl.log.ListConfiguration false -howl.log.BufferSize 4 -howl.log.MinimumBuffers 16 -howl.log.MaximumBuffers 16 -howl.log.MaximumBlocksPerFile 200 -howl.log.FileDirectory c:/logs -howl.log.FileName howl -howl.log.MaximumFiles 2 diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/META-INF/jonas-tm-jotm-core.bnd b/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/META-INF/jonas-tm-jotm-core.bnd deleted file mode 100644 index c7a2c156e5..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/META-INF/jonas-tm-jotm-core.bnd +++ /dev/null @@ -1,35 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.tm.jotm.delegate,\ - org.ow2.jonas.tm.jotm.mbean - -Import-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * - -DynamicImport-Package org.ow2.jonas.lib.security.context,\ - org.ow2.jonas.security.interceptors.jrmp,\ - org.omg.* - -Export-Package org.ow2.jonas.tm.jotm diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/metadata.xml deleted file mode 100644 index 87971136aa..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/org/ow2/jonas/tm/jotm/mbeans-descriptors.xml b/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/org/ow2/jonas/tm/jotm/mbeans-descriptors.xml deleted file mode 100644 index 5f73aec21c..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/resources/org/ow2/jonas/tm/jotm/mbeans-descriptors.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-tm-jotm/core/src/main/templates/jonas-jtm.properties.template b/jonas/modules/services/jonas-tm-jotm/core/src/main/templates/jonas-jtm.properties.template deleted file mode 100644 index d2aa4912df..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/core/src/main/templates/jonas-jtm.properties.template +++ /dev/null @@ -1,16 +0,0 @@ -# -###################### JOnAS JTM Transaction service configuration -# -jonas.services jtm - -# Set the name of the implementation class of the jtm service -jonas.service.jtm.class org.ow2.jonas.tm.jotm.JOTMTransactionService - -# Set the Transaction Manager launching mode. -# If set to 'true', TM is remote: TM must be already launched in an other JVM. -# If set to 'false', TM is local: TM is going to run into the same JVM -# than the jonas Server. -jonas.service.jtm.remote false - -# Set the default transaction timeout, in seconds. -jonas.service.jtm.timeout 60 diff --git a/jonas/modules/services/jonas-tm-jotm/pom.xml b/jonas/modules/services/jonas-tm-jotm/pom.xml deleted file mode 100644 index 3ae1a21f1c..0000000000 --- a/jonas/modules/services/jonas-tm-jotm/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-tm-jotm - pom - JOnAS :: Services :: JOTM Transaction - - core - addon - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-workcleaner/core/pom.xml b/jonas/modules/services/jonas-workcleaner/core/pom.xml deleted file mode 100644 index fd103d1b4c..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/pom.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - jonas-workcleaner - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-workcleaner-core - bundle - JOnAS :: Services :: WorkCleaner :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - commons-modeler - commons-modeler - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - wc - - - org.ow2.jonas - jonas-workcleaner-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerService.java b/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerService.java deleted file mode 100644 index df48bd7f09..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerService.java +++ /dev/null @@ -1,274 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner.internal; - -import java.util.LinkedList; -import java.util.List; - -import javax.management.ObjectName; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.WorkCleanerException; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The JOnAS WorkCleaner is returned by this service. - * @author Francois Fornaciari - */ -public class JOnASWorkCleanerService extends AbsServiceImpl implements WorkCleanerService { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JOnASWorkCleanerService.class); - - /** - * Default clean period the thread of the cleaner (in seconds). - */ - private static final int DEFAULT_CLEAN_PERIOD = 300; - - /** - * Clean period (in seconds). - */ - private int period = DEFAULT_CLEAN_PERIOD; - - /** - * JMX Services for MBeans registration. - */ - private JmxService jmxService; - - /** - * The list of tasks to execute at each period. - */ - private List taskList = null; - - /** - * Name as used to label configuration properties. - */ - public static final String SERVICE_NAME = "workcleaner"; - - /** - * Associated timer executes tasks periodically. - */ - private WorkCleanerTimer workCleanerTimer = null; - - /** - * name of the 'period configuration parameter - */ - static final String PERIOD = "jonas.service.wc.period"; - - /** - * Implement readable management attribute. - * @return - */ - public int getExecutePeriod() { - return getPeriod(); - } - - /** - * Implement writable management attribute - * @param period set period used by the WorkCleaner - */ - public void setExecutePeriod(final int period) { - setPeriod(period); - // Send a notification containing the new value of this property to the - // listener MBean - String propName = PERIOD; - String propValue = new Integer(period).toString(); - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * Create a JOnASWorkCleanerService. - */ - public JOnASWorkCleanerService() { - taskList = new LinkedList(); - workCleanerTimer = new WorkCleanerTimer(); - } - - /** - * Returns the WorkCleaner clean period. - * @return The WorkCleaner clean period - */ - public int getPeriod() { - return period; - } - - /** - * @param period Clean period used by the WorkCleaner - */ - public void setPeriod(final int period) { - this.period = period; - workCleanerTimer.setPeriod(period); - } - - /** - * Start a new WorkCleaner service. - * {@inheritDoc} - */ - @Override - protected void doStart() throws ServiceException { - // Create a new instance if necessary. - if (workCleanerTimer == null) { - workCleanerTimer = new WorkCleanerTimer(); - } - - workCleanerTimer.setWorkCleanerService(this); - workCleanerTimer.setPriority(Thread.MIN_PRIORITY); - workCleanerTimer.start(); - - // Register the MBean - registerWorkCleanerMBean(this, getDomainName()); - - logger.info("WorkCleaner Service started."); - } - - /** - * Stop the WorkCleaner. - * {@inheritDoc} - */ - @Override - protected void doStop() throws ServiceException { - workCleanerTimer.setStarted(false); - /** - * Don't keep the resources. - */ - workCleanerTimer = null; - - if (jmxService != null) { - // unregister the MBean - unregisterWorkCleanerMBean(getDomainName()); - } - - logger.info("WorkCleaner Service stopped."); - } - - /** - * Register a new clean task. - * @param cleanTask the task to add - * @throws WorkCleanerException if the task cannot be registred - */ - public synchronized void registerTask(final CleanTask cleanTask) throws WorkCleanerException { - logger.debug("Register task {0}", cleanTask); - // checks - if (taskList == null) { - throw new WorkCleanerException("Can not add an entry, the vector is null"); - } - if (cleanTask == null) { - throw new WorkCleanerException("Can not add a null entry"); - } - // Add if don't already exist - if (!taskList.contains(cleanTask)) { - taskList.add(cleanTask); - } - } - - /** - * Unregister a clean task. - * @param cleanTask The task to unregister - * @throws WorkCleanerException If the task cannot be unregistered - */ - public synchronized void unregisterTask(final CleanTask cleanTask) throws WorkCleanerException { - logger.debug("Unregister task {0}", cleanTask); - // checks - if (taskList == null) { - throw new WorkCleanerException("Can not unregister an entry, the vector is null"); - } - if (cleanTask == null) { - throw new WorkCleanerException("Can not add a null entry"); - } - // Add exists - if (taskList.contains(cleanTask)) { - taskList.remove(cleanTask); - } - } - - /** - * Execute the registered tasks. - */ - public synchronized void executeTasks() { - logger.debug("Execute tasks"); - - for (CleanTask cleanTask : taskList) { - try { - cleanTask.execute(); - } catch (WorkCleanerException e) { - e.printStackTrace(); - } - } - } - - /** - * Create an MBean for the JOnAS WorkCleaner. - * @param service WorkCleaner service to manage - * @param domainName domain name - */ - private void registerWorkCleanerMBean(final Object service, final String domainName) { - // Create and register the MBean for this WorkCleaner - ObjectName on = JonasObjectName.workCleaner(domainName); - try { - jmxService.registerModelMBean(service, on); - } catch (Exception e) { - logger.warn("Could not register WorkCleaner MBean", e); - } - } - - /** - * Unregister the WorkCleaner MBean. - * @param domainName WorkCleaner ObjectName. - */ - private void unregisterWorkCleanerMBean(final String domainName) { - ObjectName on = JonasObjectName.workCleaner(domainName); - try { - jmxService.unregisterModelMBean(on); - } catch (Exception e) { - logger.warn("Could not unregister WorkCleaner MBean", e); - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * Save updated configuration. - */ - public void saveConfig() { - // Send save reconfig notification - sendSaveNotification(getSequenceNumber(), SERVICE_NAME); - } - -} diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerServiceMBean.java b/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerServiceMBean.java deleted file mode 100644 index 415e50683a..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/JOnASWorkCleanerServiceMBean.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.workcleaner.internal; - -import javax.management.MBeanException; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.RuntimeOperationsException; - -import org.ow2.jonas.lib.management.services.JOnASServiceModelMBean; -//import org.apache.commons.modeler.BaseModelMBean; - -/** - * Model MBean class for WorkCleaner component management. - * @author danesa - */ -public class JOnASWorkCleanerServiceMBean extends JOnASServiceModelMBean { - - public JOnASWorkCleanerServiceMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - -} diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/WorkCleanerTimer.java b/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/WorkCleanerTimer.java deleted file mode 100644 index 6500576450..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/java/org/ow2/jonas/workcleaner/internal/WorkCleanerTimer.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workcleaner.internal; - -import org.ow2.jonas.workcleaner.WorkCleanerService; - -/** - * The WorkCleanerTimer executes tasks periodically. - * @author Francois Fornaciari - */ -public class WorkCleanerTimer extends Thread { - - /** - * 1 second duration (in ms). - */ - private static final int ONE_SECOND = 1000; - - /** - * Reference to the WorkCleaner service. - */ - private WorkCleanerService workCleanerService = null; - - /** - * Clean period (in seconds). - */ - private int period; - - /** - * True until the time must be canceled. - */ - private boolean isStarted = true; - - /** - * Start the thread of this class It will clean all the work entries. - */ - @Override - public void run() { - while (isStarted) { - workCleanerService.executeTasks(); - try { - // Convert seconds in milliseconds - Thread.sleep(period * ONE_SECOND); - } catch (InterruptedException e) { - throw new RuntimeException("Thread fail to sleep"); - } - } - } - - /** - * Set the WorkCleaner service. - * @param workCleanerService The WorkCleaner service to set - */ - public void setWorkCleanerService(final WorkCleanerService workCleanerService) { - this.workCleanerService = workCleanerService; - } - - /** - * Set the clean period. - * @param period The clean period - */ - public void setPeriod(final int period) { - this.period = period; - } - - /** - * Set the timer started value. - * @param isStarted The timer started value - */ - public void setStarted(final boolean isStarted) { - this.isStarted = isStarted; - } -} diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/resources/META-INF/jonas-workcleaner-core.bnd b/jonas/modules/services/jonas-workcleaner/core/src/main/resources/META-INF/jonas-workcleaner-core.bnd deleted file mode 100644 index a19ebccd01..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/resources/META-INF/jonas-workcleaner-core.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package - -Private-Package org.ow2.jonas.workcleaner.internal.* - diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-workcleaner/core/src/main/resources/metadata.xml deleted file mode 100644 index 46634ad8f0..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jonas-workcleaner/core/src/main/templates/jonas-workcleaner.properties.template b/jonas/modules/services/jonas-workcleaner/core/src/main/templates/jonas-workcleaner.properties.template deleted file mode 100644 index 75653cb99e..0000000000 --- a/jonas/modules/services/jonas-workcleaner/core/src/main/templates/jonas-workcleaner.properties.template +++ /dev/null @@ -1,9 +0,0 @@ -# -###################### JOnAS WorkCleaner service configuration -# -jonas.services wc -# Set the name of the implementation class of the wc service -jonas.service.wc.class org.ow2.jonas.workcleaner.internal.JOnASWorkCleanerService - -# Set the clean period in seconds -jonas.service.wc.period 300 diff --git a/jonas/modules/services/jonas-workcleaner/pom.xml b/jonas/modules/services/jonas-workcleaner/pom.xml deleted file mode 100644 index 706f2e87bf..0000000000 --- a/jonas/modules/services/jonas-workcleaner/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-workcleaner - pom - JOnAS :: Services :: WorkCleaner - - core - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-workmanager/core/pom.xml b/jonas/modules/services/jonas-workmanager/core/pom.xml deleted file mode 100644 index a1aa0d88e4..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/pom.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - jonas-workmanager - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-workmanager-core - bundle - JOnAS :: Services :: J2CA WorkManager :: Core - - - - geronimo-spec - geronimo-spec-j2ee-connector - 1.5-rc4 - provided - - - javax.transaction - jta - 1.0.1B - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JOnASWorkManagerService.java b/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JOnASWorkManagerService.java deleted file mode 100644 index 110ce57a55..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JOnASWorkManagerService.java +++ /dev/null @@ -1,235 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workmanager.internal; - -import javax.management.ObjectName; -import javax.resource.spi.work.WorkManager; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.workmanager.WorkManagerService; - -/** - * The JOnAS {@link WorkManager} is returned by this service. - * @author Guillaume Sauthier - */ -public class JOnASWorkManagerService extends AbsServiceImpl implements WorkManagerService { - - /** - * Logger for this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WORK_MGR_PREFIX); - - // ------------------------------------------------------------ - // WorkManager thread pool parameters default values - // ------------------------------------------------------------ - - /** Min Work Thread default value. */ - private static final int MIN_WORK_THREADS_DEFAULT = 3; - - /** Max Work Thread default value. */ - private static final int MAX_WORK_THREADS_DEFAULT = 80; - - /** Thread Wait Timeout default value. */ - private static final int THREAD_WAIT_TIMEOUT_DEFAULT = 60; - - /** - * The JOnAS {@link WorkManager} implementation. - */ - private JWorkManager workManager = null; - - // Configuration properties ----------------------- - - /** - * Minimum pool size. - */ - private int minPoolSize = MIN_WORK_THREADS_DEFAULT; - - /** - * Maximum pool size. - */ - private int maxPoolSize = MAX_WORK_THREADS_DEFAULT; - - /** - * Thread wait timeout. - */ - private long threadWaitingTime = THREAD_WAIT_TIMEOUT_DEFAULT; - - // Service dependencies ------------------------- - - /** - * JMX Services for MBeans registration. - */ - private JmxService jmxService; - - /** - * Bundle Context. - */ - private BundleContext bundleContext = null; - - /** - * WorkManager OSGi Service. - */ - private ServiceRegistration osgiWorkManagerService; - - /** - * {@link TransactionService} service. - */ - private TransactionService transactionService; - - - /** - * Inject the bundle context. - * @param bundleContext the iPOJO's component bundle context - */ - public JOnASWorkManagerService(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * @param waitingTime Thread wait timeout. - */ - public void setThreadwaittimeout(final long waitingTime) { - this.threadWaitingTime = waitingTime; - } - - /** - * @param minPoolSize Minimum pool size. - */ - public void setMinworkthreads(final int minPoolSize) { - this.minPoolSize = minPoolSize; - } - - /** - * @param maxPoolSize Maximum pool size. - */ - public void setMaxworkthreads(final int maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - - /** - * Start a new {@link WorkManager}. - * {@inheritDoc} - */ - @Override - protected void doStart() throws ServiceException { - // Instanciate the WorkManager - workManager = new JWorkManager(minPoolSize, - maxPoolSize, - transactionService, - threadWaitingTime); - - // register the MBean - registerWorkManagerMBean(getDomainName(), workManager); - - // Register OSGi Service - //FIXME: when iPOJO will be able to inject a bundleContext with generics, remove .getName() - osgiWorkManagerService = (ServiceRegistration) bundleContext.registerService(WorkManager.class.getName(), workManager, null); - - logger.log(BasicLevel.INFO, "WorkManager Service started."); - } - - /** - * Stop the {@link WorkManager}. - * {@inheritDoc} - */ - @Override - protected void doStop() throws ServiceException { - // stop WorkManager threads - workManager.stopThreads(); - - if (osgiWorkManagerService != null) { - osgiWorkManagerService.unregister(); - } - - workManager = null; - - if (jmxService != null) { - // unregister the MBean - unregisterWorkManagerMBean(getDomainName()); - } - - logger.log(BasicLevel.INFO, "WorkManager Service stopped."); - } - - /** - * {@inheritDoc} - */ - public WorkManager getWorkManager() { - return workManager; - } - - /** - * Create an MBean for the JOnAS WorkManager. - * @param domainName domain name - * @param workManager JOnAS WorkManager to be managed - */ - private void registerWorkManagerMBean(final String domainName, - final JWorkManager workManager) { - // Create and register the MBean for this WorkManager - ObjectName on = JonasObjectName.workManager(domainName); - try { - jmxService.registerModelMBean(workManager, on); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not register WorkManager MBean", e); - } - } - - /** - * Unregister the WorkManager MBean. - * @param domainName WorkManager ObjectName. - */ - private void unregisterWorkManagerMBean(final String domainName) { - ObjectName on = JonasObjectName.workManager(domainName); - try { - jmxService.unregisterModelMBean(on); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Could not unregister WorkManager MBean", e); - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param transactionService the transactionService to set - */ - public void setTransactionService(final TransactionService transactionService) { - this.transactionService = transactionService; - } -} diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManager.java b/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManager.java deleted file mode 100644 index 1b2e1e680e..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManager.java +++ /dev/null @@ -1,602 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.workmanager.internal; - -import java.util.LinkedList; -import java.util.List; - -import javax.resource.spi.work.ExecutionContext; -import javax.resource.spi.work.Work; -import javax.resource.spi.work.WorkCompletedException; -import javax.resource.spi.work.WorkEvent; -import javax.resource.spi.work.WorkException; -import javax.resource.spi.work.WorkListener; -import javax.resource.spi.work.WorkManager; -import javax.resource.spi.work.WorkRejectedException; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.xa.Xid; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.management.javaee.ManagedObject; -import org.ow2.jonas.lib.management.reconfig.PropertiesConfigurationData; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.tm.TransactionService; - - - -/** - * Jonas Implementation of the Resource Work Manager - * @author durieuxp - */ -public class JWorkManager extends ManagedObject implements WorkManager { - - /** - * Name as used to label configuration properties. - */ - public static final String SERVICE_NAME = "workmanager"; - - // The service configuration properties - /** - * name of the 'minworkthreads' configuration parameter - */ - static final String MINPOOLSIZE = "jonas.service.wm.minworkthreads"; - /** - * name of the 'maxworkthreads' configuration parameter - */ - static final String MAXPOOLSIZE = "jonas.service.wm.maxworkthreads"; - - protected List workList = new LinkedList(); - - protected static int poolnumber = 0; - protected static int threadnumber = 0; - - protected int maxpoolsz; - protected int minpoolsz; - protected int poolsz; // current size of thread pool - protected int freeThreads; // free threads ready to work - protected long waitingTime; // in millisec - - protected boolean valid = true; // set to false when WorkManager is removed. - - protected static final long FEW_MORE_SECONDS = 3000; - - private static Logger logger = null; - - private TransactionService transactionService; - - /** - * Value used as sequence number by reconfiguration notifications. - */ - private long sequenceNumber; - - /** - * Constructor - * @param threadwait max time in seconds a thread will wait - */ - public JWorkManager(final int minsz, final int maxsz, final TransactionService transactionService, final long threadwait) { - minpoolsz = minsz; - maxpoolsz = maxsz; - waitingTime = threadwait * 1000L; - this.transactionService = transactionService; - poolnumber++; - logger = Log.getLogger(Log.JONAS_WORK_MGR_PREFIX); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "thread pool #" + poolnumber); - logger.log(BasicLevel.DEBUG, "minpoolsz = " + minsz + " maxpoolsz = " + maxsz); - } - for (poolsz = 0; poolsz < minsz; poolsz++) { - WorkThread st = new WorkThread(this, threadnumber++, poolnumber); - st.start(); - } - sequenceNumber = 0; - } - - // -------------------------------------------------------------------------- - // Management - // -------------------------------------------------------------------------- - - /** - * @return current pool size - */ - public int getCurrentPoolSize() { - return poolsz; - } - - /** - * @return min pool size - */ - public int getMinPoolSize() { - return minpoolsz; - } - - /** - * @return max pool size - */ - public int getMaxPoolSize() { - return maxpoolsz; - } - - /** - * Set the min pool size - * @param minsz - */ - public void setMinPoolSize(final int minsz) { - minpoolsz = minsz; - // Send a notification containing the new value of this property to the - // listener MBean - String propName = MINPOOLSIZE; - String propValue = new Integer(minsz).toString(); - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * Set the max pool size - * @param maxsz - */ - public void setMaxPoolSize(final int maxsz) { - maxpoolsz = maxsz; - // Send a notification containing the new value of this property to the - // listener MBean - String propName = MAXPOOLSIZE; - String propValue = new Integer(maxsz).toString(); - sendReconfigNotification(getSequenceNumber(), SERVICE_NAME, new PropertiesConfigurationData(propName, propValue)); - } - - /** - * Save updated configuration. - */ - public void saveConfig() { - // Send save reconfig notification - sendSaveNotification(getSequenceNumber(), SERVICE_NAME); - } - - /** - * Return a sequence number and increase this number. - * @return a sequence number - */ - protected long getSequenceNumber() { - return ++sequenceNumber; - } - // -------------------------------------------------------------------------- - // WorkManager implementation - // -------------------------------------------------------------------------- - - /** - * Accepts a Work instance for processing. - * This call blocks until the Work instance completes execution. - * There is no guarantee on when the accepted Work instance would start execution ie., - * there is no time constraint to start execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @throws WorkRejectedException a Work instance has been rejected from further processing. - * @throws WorkCompletedException a Work instance has completed execution with an exception. - * @throws WorkException - */ - public void doWork(final Work work) throws WorkException { - doMyWork(work, INDEFINITE, null, null, 0); - } - - /** - * Accepts a Work instance for processing. This call blocks until the Work - * instance completes execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @param timeout a time duration (in milliseconds) within which the - * execution of the Work instance must start. Otherwise, the Work - * instance is rejected with a WorkRejectedException set to an - * appropriate error code (WorkRejectedException.TIMED_OUT). - * @param ectx an object containing the execution context with which the - * submitted Work instance must be executed. - * @param listener an object which would be notified when the various Work - * processing events (work accepted, work rejected, work started, - * work completed) occur. - * @throws WorkRejectedException a Work instance has been rejected from - * further processing. - * @throws WorkCompletedException a Work instance has completed execution - * with an exception. - * @throws WorkException - */ - public void doWork(final Work work, final long timeout, final ExecutionContext ectx, final WorkListener listener) throws WorkException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - if (listener != null) { - listener.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, work, null)); - } - doMyWork(work, timeout, ectx, listener, System.currentTimeMillis()); - } - - /** - * Accepts a Work instance for processing. This call blocks until the Work - * instance starts execution but not until its completion. There is no - * guarantee on when the accepted Work instance would start execution ie., - * there is no time constraint to start execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @return the time elapsed (in milliseconds) from Work acceptance until - * start of execution. Note, this does not offer real-time - * guarantees. It is valid to return -1, if the actual start delay - * duration is unknown. - * @throws WorkRejectedException a Work instance has been rejected from - * further processing. - * @throws WorkException - */ - public long startWork(final Work work) throws WorkException { - return startWork(work, INDEFINITE, null, null); - } - - /** - * Accepts a Work instance for processing. This call blocks until the Work - * instance starts execution but not until its completion. There is no - * guarantee on when the accepted Work instance would start execution ie., - * there is no time constraint to start execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @param timeout a time duration (in milliseconds) within which the - * execution of the Work instance must start. Otherwise, the Work - * instance is rejected with a WorkRejectedException set to an - * appropriate error code (WorkRejectedException.TIMED_OUT). - * @param ectx an object containing the execution context with which the - * submitted Work instance must be executed. - * @param listener an object which would be notified when the various Work - * processing events (work accepted, work rejected, work started, - * work completed) occur. - * @return the time elapsed (in milliseconds) from Work acceptance until - * start of execution. Note, this does not offer real-time - * guarantees. It is valid to return -1, if the actual start delay - * duration is unknown. - * @throws WorkRejectedException a Work instance has been rejected from - * further processing. - * @throws WorkException - */ - public long startWork(final Work work, final long timeout, final ExecutionContext ectx, final WorkListener listener) throws WorkException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - JWork mywork = new JWork(work, timeout, ectx, listener); - if (listener != null) { - listener.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, work, null)); - } - long starttime = System.currentTimeMillis(); - long duration = 0; - synchronized (workList) { - workList.add(mywork); - if (poolsz < maxpoolsz && workList.size() > freeThreads) { - // We need one more thread. - poolsz++; - WorkThread st = new WorkThread(this, threadnumber++, poolnumber); - st.start(); - } else { - workList.notify(); - } - } - // Wait until my work is started. - boolean started = false; - synchronized (mywork) { - if (!mywork.isStarted()) { - try { - // No need to wait after timeout is elapsed - long waittime = waitingTime; - if (timeout < waittime) { - waittime = timeout + FEW_MORE_SECONDS; - } - mywork.wait(waittime); - } catch (InterruptedException e) { - throw new WorkRejectedException("Interrupted"); - } - } - started = mywork.isStarted(); - } - duration = System.currentTimeMillis() - starttime; - if (!started) { - synchronized (workList) { - // Remove the work in the list - if (! workList.remove(mywork)) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "cannot remove work"); - } - } - throw new WorkRejectedException(WorkException.START_TIMED_OUT); - } - } - return duration; - } - - /** - * Accepts a Work instance for processing. This call does not block and - * returns immediately once a Work instance has been accepted for - * processing. There is no guarantee on when the submitted Work instance - * would start execution ie., there is no time constraint to start - * execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @param timeout a time duration (in milliseconds) within which the - * execution of the Work instance must start. Otherwise, the Work - * instance is rejected with a WorkRejectedException set to an - * appropriate error code (WorkRejectedException.TIMED_OUT). - * @param ectx an object containing the execution context with which the - * submitted Work instance must be executed. - * @param listener an object which would be notified when the various Work - * processing events (work accepted, work rejected, work started, - * work completed) occur. - * @throws WorkRejectedException a Work instance has been rejected from - * further processing. - * @throws WorkException - */ - public void scheduleWork(final Work work) throws WorkException { - scheduleWork(work, INDEFINITE, null, null); - } - - /** - * Accepts a Work instance for processing. This call does not block and - * returns immediately once a Work instance has been accepted for - * processing. There is no guarantee on when the submitted Work instance - * would start execution ie., there is no time constraint to start - * execution. - * @param work The unit of work to be done. Could be long or short-lived. - * @param timeout a time duration (in milliseconds) within which the - * execution of the Work instance must start. Otherwise, the Work - * instance is rejected with a WorkRejectedException set to an - * appropriate error code (WorkRejectedException.TIMED_OUT). - * @param ectx an object containing the execution context with which the - * submitted Work instance must be executed. - * @param listener an object which would be notified when the various Work - * processing events (work accepted, work rejected, work started, - * work completed) occur. - * @throws WorkRejectedException a Work instance has been rejected from - * further processing. - * @throws WorkException - */ - public void scheduleWork(final Work work, final long timeout, final ExecutionContext ectx, final WorkListener listener) throws WorkException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - JWork mywork = new JWork(work, timeout, ectx, listener); - if (listener != null) { - listener.workAccepted(new WorkEvent(this, WorkEvent.WORK_ACCEPTED, work, null)); - } - synchronized (workList) { - workList.add(mywork); - if (poolsz < maxpoolsz && workList.size() > freeThreads) { - // We need one more thread. - poolsz++; - WorkThread st = new WorkThread(this, threadnumber++, poolnumber); - st.start(); - } else { - // Just wake up a thread waiting for work. - workList.notify(); - } - } - } - - /** - * Internal method doing the work. - */ - private void doMyWork(final Work work, final long timeout, final ExecutionContext ectx, final WorkListener listener, final long creationTime) throws WorkException { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "timeout=" + timeout); - } - // Notify the listener that the work is started or rejected by timeout. - if (listener != null) { - long duration = System.currentTimeMillis() - creationTime; - if (duration > timeout) { - // This can occur only in case of scheduleWork - logger.log(BasicLevel.WARN, "REJECTED: duration=" + duration); - listener.workRejected(new WorkEvent(this, WorkEvent.WORK_REJECTED, work, null)); - return; - } - listener.workStarted(new WorkEvent(this, WorkEvent.WORK_STARTED, work, null)); - } - - // Setup ExecutionContext - // TODO: Check this if doWork (same thread) - Xid xid = null; - if (ectx != null) { - xid = ectx.getXid(); - if (xid != null) { - long txtimeout = ectx.getTransactionTimeout(); - try { - transactionService.attachTransaction(xid, txtimeout); - } catch (NotSupportedException e) { - throw new WorkException("Error starting a new transaction", e); - } catch (SystemException e) { - throw new WorkException("Error starting a new transaction", e); - } - } - } - - ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(work.getClass().getClassLoader()); - work.run(); - // Notify the listener that the work is completed. - if (listener != null) { - listener.workCompleted(new WorkEvent(this, WorkEvent.WORK_COMPLETED, work, null)); - } - } catch (Exception e) { - if (listener != null) { - listener.workCompleted(new WorkEvent(this, WorkEvent.WORK_COMPLETED, work, null)); - } - throw new WorkCompletedException(e); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - if (xid != null) { - transactionService.detachTransaction(); - } - } - } - - /** - * Get the next JWork object to be run. - * @return next JWork object to be run, or null if thread must end. - */ - public void nextWork() throws WorkException, InterruptedException { - JWork run = null; - boolean haswait = false; - synchronized (workList) { - while (workList.isEmpty()) { - if ((haswait && freeThreads > minpoolsz) || !valid) { - poolsz--; - throw new InterruptedException("Thread ending"); - } - try { - freeThreads++; - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "waiting"); - } - workList.wait(waitingTime); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "notified"); - } - freeThreads--; - haswait = true; - } catch (InterruptedException e) { - freeThreads--; - poolsz--; - throw e; - } - } - run = (JWork) workList.remove(0); - // In case startWork() was called - synchronized(run) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "start new work"); - } - run.setStarted(); - run.notify(); - } - } - doMyWork(run.getWork(), - run.getTimeout(), - run.getExecutionContext(), - run.getWorkListener(), - run.getCreationTime()); - } - - /** - * Remove this WorkManager : Stop all threads - */ - public synchronized void stopThreads() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - valid = false; - notifyAll(); - poolnumber--; - } - - class JWork { - private Work work; - private long timeout; - private ExecutionContext ectx; - private WorkListener listener; - private long creationTime; - private boolean started = false; - - public JWork(final Work work, final long timeout, final ExecutionContext ectx, final WorkListener listener) { - this.work = work; - this.timeout = timeout; - this.ectx = ectx; - this.listener = listener; - creationTime = System.currentTimeMillis(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "timeout=" + timeout); - } - } - - public Work getWork() { - return work; - } - - public long getTimeout() { - return timeout; - } - - public ExecutionContext getExecutionContext() { - return ectx; - } - - public WorkListener getWorkListener() { - return listener; - } - - public long getCreationTime() { - return creationTime; - } - - public boolean isStarted() { - return started; - } - - public void setStarted() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, ""); - } - started = true; - } - } - - /** - * Thread executing works for the work manager. - */ - class WorkThread extends Thread { - - private JWorkManager mgr; - private int number; - - /** - * Constructor - * @param m The WorkManager - * @param num thread number - * @param wm workManager number - */ - WorkThread(final JWorkManager m, final int num, final int wm) { - super("WorkThread-" + wm + "/" + num); - mgr = m; - number = num; - } - - @Override - public void run() { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "running"); - } - while (true) { - try { - mgr.nextWork(); - } catch (InterruptedException e) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Exiting: ", e); - } - return; - } catch (WorkException e) { - logger.log(BasicLevel.ERROR, "Exception during work run: ", e); - } - } - } - - } - -} - diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManagerMBean.java b/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManagerMBean.java deleted file mode 100644 index ea45b78b19..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/java/org/ow2/jonas/workmanager/internal/JWorkManagerMBean.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.workmanager.internal; - -import javax.management.MBeanException; -import javax.management.NotificationFilter; -import javax.management.NotificationListener; -import javax.management.RuntimeOperationsException; - -import org.apache.commons.modeler.BaseModelMBean; - -/** - * Implements MBeans for the JOnAS Work Manager. - * @author danesa - * - */ -public class JWorkManagerMBean extends BaseModelMBean { - - public JWorkManagerMBean() throws MBeanException, RuntimeOperationsException { - super(); - } - - /** - * This method is 'called' by the ReconfigManager in order to receive the reconfiguration and the save notifications. - * @param arg0 The notification Listener - * @param arg1 The notification Filter - * @param arg2 Handback object - */ - @Override - public void addNotificationListener(final NotificationListener arg0 - , final NotificationFilter arg1, final Object arg2) { - super.addNotificationListener(arg0, arg1, arg2); - } -} diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/resources/META-INF/jonas-workmanager-core.bnd b/jonas/modules/services/jonas-workmanager/core/src/main/resources/META-INF/jonas-workmanager-core.bnd deleted file mode 100644 index a8a199e4b5..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/resources/META-INF/jonas-workmanager-core.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export nothing -Export-Package !* - -Private-Package org.ow2.jonas.workmanager.internal.* - -Require-JOnAS-Services jtm diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/resources/metadata.xml b/jonas/modules/services/jonas-workmanager/core/src/main/resources/metadata.xml deleted file mode 100644 index 4b7c0e14d2..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jonas-workmanager/core/src/main/templates/jonas-workmanager.properties.template b/jonas/modules/services/jonas-workmanager/core/src/main/templates/jonas-workmanager.properties.template deleted file mode 100644 index b1d9ebfc04..0000000000 --- a/jonas/modules/services/jonas-workmanager/core/src/main/templates/jonas-workmanager.properties.template +++ /dev/null @@ -1,16 +0,0 @@ -# -###################### JOnAS WorkManager service configuration -# -jonas.services wm -# Set the name of the implementation class of the wm service -jonas.service.wm.class org.ow2.jonas.workmanager.internal.JOnASWorkManagerService - -# Set the size of the worker thread pool -jonas.service.wm.minworkthreads 3 - -# Set the maximun size of the worker thread pool -jonas.service.wm.maxworkthreads 80 - -# Set the max # of seconds that a thread will wait for work -# This is used to shrink the worker thread pool back to minimum -jonas.service.wm.threadwaittimeout 60 diff --git a/jonas/modules/services/jonas-workmanager/pom.xml b/jonas/modules/services/jonas-workmanager/pom.xml deleted file mode 100644 index a6b0363ccc..0000000000 --- a/jonas/modules/services/jonas-workmanager/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-workmanager - pom - JOnAS :: Services :: J2CA WorkManager - - core - - diff --git a/jonas/modules/services/joram-admin/pom.xml b/jonas/modules/services/joram-admin/pom.xml deleted file mode 100644 index 856c27e57f..0000000000 --- a/jonas/modules/services/joram-admin/pom.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - joram-admin - - JOnAS :: Services :: JoramAdmin Deployer - - bundle - - - - org.osgi - org.osgi.core - provided - - - org.apache.felix - org.apache.felix.ipojo.annotations - ${ipojo.version} - provided - - - org.apache.felix - org.apache.felix.ipojo - provided - - - org.ow2.bundles - ow2-util-log - provided - - - org.ow2.joram - joram-client-jca - ${joram.version} - provided - - - org.testng - testng - test - - - - - - - org.apache.felix - maven-bundle-plugin - true - - - - org.ow2.carol.* - - - - - - diff --git a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueue.java b/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueue.java deleted file mode 100644 index 844f50a44e..0000000000 --- a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueue.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.joram.admin; - -import org.apache.felix.ipojo.annotations.Bind; -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Unbind; -import org.apache.felix.ipojo.annotations.Validate; -import org.objectweb.joram.client.connector.JoramAdapterMBean; -import org.objectweb.joram.client.jms.QueueMBean; -import org.osgi.framework.ServiceReference; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="JoramQueue",immediate=false) -public class JoramQueue { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(JoramQueue.class); - - /** - * Queue parameter : jndi name - */ - @Property(name="jndi.name", mandatory=true) - private String jndiName; - - /** - * Service delegation to joram - */ - @Requires - private JoramAdapterMBean service; - - /** - * QueueMBean service - */ - private QueueMBean queue; - - @Validate - public void start() { - ClassLoader old = null; - try { - // set the classloader to the bundle one, otherwise the object is not bound in the registry - ClassLoader ext = this.getClass().getClassLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - String res = service.createQueue(jndiName); - logger.info("Create the queue '" + jndiName + "' : " + res); - - } catch (Exception e) { - logger.error("Error when creating the queue '" + jndiName + "'", e); - - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - @Invalidate - public void stop() { - - try { - if (queue != null) { - queue.delete(); - logger.info("Remove the queue '" + jndiName + "'"); - } else { - logger.warn("Unable to remove the queue service '" + jndiName + "'. Service unavailable"); - } - } catch (Exception e) { - logger.error("Error when removing the queue '" + jndiName + "'", e); - - } - } - - @Bind(optional = true, aggregate = true) - public void bindQueueService(final QueueMBean service, final ServiceReference ref) { - - String serviceName = (String) ref.getProperty("name"); - if (serviceName.startsWith(jndiName + "[#")) { - queue = service; - logger.debug("Bind QueueService - " + serviceName); - } - } - - @Unbind - public void unbindQueueService(final ServiceReference ref) { - String name = (String) ref.getProperty("name"); - if (name.startsWith(jndiName + "[#")) { - queue = null; - logger.debug("Unbind Service - " + name); - } - - } - -} diff --git a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueueConnectionFactory.java b/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueueConnectionFactory.java deleted file mode 100644 index 972da6a535..0000000000 --- a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramQueueConnectionFactory.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.joram.admin; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.objectweb.joram.client.connector.JoramAdapterMBean; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="JoramQueueConnectionFactory",immediate=false) -public class JoramQueueConnectionFactory { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(JoramQueueConnectionFactory.class); - - /** - * Topic parameter : jndi name - */ - @Property(name="jndi.name", mandatory=true) - private String jndiName; - - /** - * Service delegation to joram - */ - @Requires - private JoramAdapterMBean service; - - @Validate - public void start() { - - ClassLoader old = null; - try { - // set the classloader to the bundle one, otherwise the object is not bound in the registry - ClassLoader ext = this.getClass().getClassLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - service.createQueueCF(jndiName); - logger.info("Joram Queue Connection Factory ''{0}'' created", jndiName); - } catch (Exception e) { - logger.error("Error when creating the queue CF ''{0}''", jndiName, e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - @Invalidate - public void stop() { - Context ctx; - ClassLoader ext = this.getClass().getClassLoader(); - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(ext); - ctx = new InitialContext(); - } catch (NamingException e) { - logger.error("Unable to get InitialContext", e); - return; - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - try { - ctx.unbind(jndiName); - logger.info("Joram Queue Connection Factory ''{0}'' removed", jndiName); - } catch (NamingException e) { - logger.error("Unable to unbind Queue Connection Factory ''{0}''", jndiName, e); - } - } - -} diff --git a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopic.java b/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopic.java deleted file mode 100644 index 7e5f794f9a..0000000000 --- a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopic.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.joram.admin; - -import org.apache.felix.ipojo.annotations.Bind; -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Unbind; -import org.apache.felix.ipojo.annotations.Validate; -import org.objectweb.joram.client.connector.JoramAdapterMBean; -import org.objectweb.joram.client.jms.TopicMBean; -import org.osgi.framework.ServiceReference; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="JoramTopic",immediate=false) -public class JoramTopic { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(JoramTopic.class); - - /** - * Topic parameter : jndi name - */ - @Property(name="jndi.name", mandatory=true) - private String jndiName; - - /** - * Service delegation to joram - */ - @Requires - private JoramAdapterMBean service; - - /** - * TopicMBean service - */ - private TopicMBean topic; - - @Validate - public void start() { - - ClassLoader old = null; - try { - // set the classloader to the bundle one, otherwise the object is not bound in the registry - ClassLoader ext = this.getClass().getClassLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - String res = service.createTopic(jndiName); - logger.info("Create the topic '" + jndiName + "' : " + res); - - } catch (Exception e) { - logger.error("Error when creating the topic '" + jndiName + "'", e); - - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - @Invalidate - public void stop() { - - try { - if (topic != null) { - topic.delete(); - logger.info("Remove the topic '" + jndiName + "'"); - } else { - logger.warn("Unable to remove the topic service '" + jndiName + "'. Service unavailable"); - } - } catch (Exception e) { - logger.error("Error when removing the topic '" + jndiName + "'", e); - - } - } - - @Bind(optional = true, aggregate = true) - public void bindTopicService(final TopicMBean service, final ServiceReference ref) { - - String serviceName = (String) ref.getProperty("name"); - if (serviceName.startsWith(jndiName + "[#")) { - topic = service; - logger.debug("Bind TopicService - " + serviceName); - } - } - - @Unbind - public void unbindTopicService(final ServiceReference ref) { - String name = (String) ref.getProperty("name"); - if (name.startsWith(jndiName + "[#")) { - topic = null; - logger.debug("Unbind Service - " + name); - } - - } - -} diff --git a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopicConnectionFactory.java b/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopicConnectionFactory.java deleted file mode 100644 index c502547357..0000000000 --- a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramTopicConnectionFactory.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.joram.admin; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.objectweb.joram.client.connector.JoramAdapterMBean; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="JoramTopicConnectionFactory",immediate=false) -public class JoramTopicConnectionFactory { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(JoramTopicConnectionFactory.class); - - /** - * Topic parameter : jndi name - */ - @Property(name="jndi.name", mandatory=true) - private String jndiName; - - /** - * Service delegation to joram - */ - @Requires - private JoramAdapterMBean service; - - @Validate - public void start() { - ClassLoader old = null; - try { - // set the classloader to the bundle one, otherwise the object is not bound in the registry - ClassLoader ext = this.getClass().getClassLoader(); - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(ext); - - service.createTopicCF(jndiName); - logger.info("Joram Topic Connection Factory ''{0}'' created", jndiName); - } catch (Exception e) { - logger.error("Error when creating the topic CF '" + jndiName + "'", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - @Invalidate - public void stop() { - Context ctx; - ClassLoader ext = this.getClass().getClassLoader(); - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(ext); - ctx = new InitialContext(); - } catch (NamingException e) { - logger.error("Unable to get InitialContext", e); - return; - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - try { - ctx.unbind(jndiName); - logger.info("Joram Topic Connection Factory ''{0}'' removed", jndiName); - } catch (NamingException e) { - logger.error("Unable to unbind Topic Connection Factory ''{0}''", jndiName, e); - } - } -} diff --git a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramUser.java b/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramUser.java deleted file mode 100644 index 130153b05d..0000000000 --- a/jonas/modules/services/joram-admin/src/main/java/org/ow2/jonas/joram/admin/JoramUser.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.joram.admin; - -import org.apache.felix.ipojo.annotations.Bind; -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Unbind; -import org.apache.felix.ipojo.annotations.Validate; -import org.objectweb.joram.client.connector.JoramAdapterMBean; -import org.objectweb.joram.client.jms.admin.UserMBean; -import org.osgi.framework.ServiceReference; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name="JoramUser",immediate=false) -public class JoramUser { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(JoramUser.class); - - /** - * User parameter : name - */ - @Property(name="name", mandatory=true) - private String name; - - /** - * User parameter : password - */ - @Property(name="password", mandatory=true) - private String password; - - - /** - * Service delegation to joram - */ - @Requires - private JoramAdapterMBean service; - - /** - * UserMBean service - */ - private UserMBean user; - - @Validate - public void start() { - try { - String res = service.createUser(name, password); - logger.info("Create the User '" + name + "' : " + res); - - } catch (Exception e) { - logger.error("Error when creating the User '" + name + "'", e); - - } - } - - @Invalidate - public void stop() { - - try { - if (user != null) { - user.delete(); - logger.info("Remove the user '" + name + "'"); - } else { - logger.warn("Unable to remove the user service '" + name + "'. Service unavailable"); - } - } catch (Exception e) { - logger.error("Error when removing the user '" + name + "'", e); - - } - } - - @Bind(optional = true, aggregate = true) - public void bindUserService(final UserMBean service, final ServiceReference ref) { - - String serviceName = (String) ref.getProperty("name"); - if (serviceName.startsWith(name + "[#")) { - user = service; - logger.debug("Bind UserService - " + serviceName); - } - } - - @Unbind - public void unbindUserService(final ServiceReference ref) { - String name = (String) ref.getProperty("name"); - if (name.startsWith(name + "[#")) { - user = null; - logger.debug("Unbind Service - " + name); - } - - } - -} diff --git a/jonas/modules/services/jsf/jsf-base/ant/pom.xml b/jonas/modules/services/jsf/jsf-base/ant/pom.xml deleted file mode 100644 index eda445a565..0000000000 --- a/jonas/modules/services/jsf/jsf-base/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jsf-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-base-ant - bundle - JOnAS :: Services :: JSF :: Base :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/jsf/jsf-base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/Jsf.java b/jonas/modules/services/jsf/jsf-base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/Jsf.java deleted file mode 100644 index c716bb3a9e..0000000000 --- a/jonas/modules/services/jsf/jsf-base/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/Jsf.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.jsf; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -/** - * Defines properties for JSF service. - * - * @author Jeremy Cazaux - */ -public abstract class Jsf extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - protected static final String INFO = "[JSF] "; - - /** - * Name of the property for changing the JSF class - */ - protected final static String JSF_CLASS_PROPERTY = "jonas.service.jsf.class"; - - /** - * Execute all tasks - */ - public void execute() { - super.execute(); - } - - /** - * Create a JReplace Task for changing service classname in jonas.properties. - * - * @param serviceName service classname to use. - * @return Returns a JReplace Task. - */ - protected JTask createServiceNameReplace(final String serviceName, final String info, final String confDir) { - return super.createServiceNameReplace(serviceName, info, confDir, this.JSF_CLASS_PROPERTY); - } -} diff --git a/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.properties.template b/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.properties.template deleted file mode 100644 index 1dc956aa82..0000000000 --- a/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.properties.template +++ /dev/null @@ -1,2 +0,0 @@ -#JSF -%jsf.implementation.default% \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.xml b/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.xml deleted file mode 100644 index 6b6e95e6e7..0000000000 --- a/jonas/modules/services/jsf/jsf-base/ant/src/main/resources/build-jsf-base.xml +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-base/core/pom.xml b/jonas/modules/services/jsf/jsf-base/core/pom.xml deleted file mode 100644 index bc0e3487cd..0000000000 --- a/jonas/modules/services/jsf/jsf-base/core/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - jsf-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jsf-base-core - pom - JOnAS :: Services :: JSF :: Base :: Core - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-base/core/src/main/templates/jonas-jsf.properties.template b/jonas/modules/services/jsf/jsf-base/core/src/main/templates/jonas-jsf.properties.template deleted file mode 100644 index 2e9a60e80e..0000000000 --- a/jonas/modules/services/jsf/jsf-base/core/src/main/templates/jonas-jsf.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS JSF service configuration -# -jonas.services jsf -# Set the name of the implementation class of the jsf service. -%jonas.service.jsf.class% diff --git a/jonas/modules/services/jsf/jsf-base/pom.xml b/jonas/modules/services/jsf/jsf-base/pom.xml deleted file mode 100644 index d2a9a30eeb..0000000000 --- a/jonas/modules/services/jsf/jsf-base/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - jonas-jsf - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jsf-base - pom - JOnAS :: Services :: JSF :: Base - - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/pom.xml deleted file mode 100644 index 2515d490de..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-jsf-mojarra-1.2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-mojarra-1.2-ant - jar - JOnAS :: Services :: JSF :: Mojarra 1.2 :: Ant - - - - org.ow2.jonas - jonas-jsf-base-ant - ${project.version} - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - - diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra12/JsfMojarra12.java b/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra12/JsfMojarra12.java deleted file mode 100644 index 9236f7c32d..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra12/JsfMojarra12.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.jsf.mojarra12; - -import org.ow2.jonas.antmodular.jonasbase.jsf.Jsf; - -/** - * Defines properties for JSF Mojarra1.2 service. - * - * @author Jeremy Cazaux - */ -public class JsfMojarra12 extends Jsf { - - /** - * Name of the implementation class for Mojarra1.2 - */ - private static final String MOJARRA12_SERVICE = "org.ow2.jonas.jsf.mojarra12.Mojarra12ServiceImpl"; - - /** - * Execute all tasks - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.MOJARRA12_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/antlib-jsf-mojarra-1.2.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/antlib-jsf-mojarra-1.2.xml deleted file mode 100644 index 540e8a5d04..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/antlib-jsf-mojarra-1.2.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.properties b/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.properties deleted file mode 100644 index 8f6c3ef7e9..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.properties +++ /dev/null @@ -1 +0,0 @@ -jsf.implementation.default=mojarra12 \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.xml deleted file mode 100644 index e077566008..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/ant/src/main/resources/build-jsf-mojarra-1.2.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/core/pom.xml deleted file mode 100644 index ca5bf6bea1..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/pom.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - jonas-jsf-mojarra-1.2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-mojarra-1.2-core - bundle - JOnAS :: Services :: JSF :: Mojarra 1.2 :: Core - - - - javax.faces - jsf-impl - ${jsf.version} - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - javax.faces - jsf-api - provided - - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/java/org/ow2/jonas/jsf/mojarra12/Mojarra12ServiceImpl.java b/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/java/org/ow2/jonas/jsf/mojarra12/Mojarra12ServiceImpl.java deleted file mode 100644 index 63870485ba..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/java/org/ow2/jonas/jsf/mojarra12/Mojarra12ServiceImpl.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jsf.mojarra12; - -import java.net.URL; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; - -import org.osgi.framework.BundleContext; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jsf.JSFService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Implementation of the service that is providing JSF 1.2 implementation. - * @author Florent Benoit - */ -public class Mojarra12ServiceImpl extends AbsServiceImpl implements JSFService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(Mojarra12ServiceImpl.class); - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * OSGi Bundle context. - */ - private BundleContext bundleContext = null; - - - /** - * Constructor in OSGi mode. It provides the bundle context. - * @param bundleContext the given bundle context. - */ - public Mojarra12ServiceImpl(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - @SuppressWarnings("unchecked") - @Override - protected void doStart() throws ServiceException { - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for validation service", e); - } - - // Register the TLD URLs - Enumeration e = bundleContext.getBundle().findEntries("META-INF", "*.tld", true); - if (e != null) { - while (e.hasMoreElements()) { - URL url = e.nextElement(); - Dictionary dictionary = new Hashtable(); - dictionary.put("name", bundleContext.getBundle().getSymbolicName()); - dictionary.put("urltype", "tld"); - dictionary.put("value", url.toString()); - - // for each url - bundleContext.registerService(URL.class.getName(), url, dictionary); - } - } - } - - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - // Unregister MBean - try { - jmxService.unregisterModelMBean(JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for validation service", e); - } - - - - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - -} diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/properties/jonas-jsf-mojarra12.properties b/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/properties/jonas-jsf-mojarra12.properties deleted file mode 100644 index eed5fc6923..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/properties/jonas-jsf-mojarra12.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.jsf.class org.ow2.jonas.jsf.mojarra12.Mojarra12ServiceImpl \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/META-INF/jonas-jsf-mojarra-1.2-core.bnd b/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/META-INF/jonas-jsf-mojarra-1.2-core.bnd deleted file mode 100644 index 20176edb74..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/META-INF/jonas-jsf-mojarra-1.2-core.bnd +++ /dev/null @@ -1,39 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id:$ -# --------------------------------------------------------------------------- - -Export-Package com.sun.faces.*;version=1.2;-split-package:=merge-first -Import-Package !com.sun.enterprise.*,\ - !com.sun.faces.config.beans.*,\ - !org.mortbay.jetty.*,\ - groovy.*;resolution:=optional,\ - javax.faces.*;version="[1.2.0,2.0.0]",\ - javax.servlet.jsp.jstl.*;version="[1.2.0,2.2.0]",\ - javax.portlet;resolution:=optional,\ - javax.servlet.annotation;resolution:=optional,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * -DynamicImport-Package org.apache -Include-Resource {maven-resources}, \ - @jsf-impl-${jsf.version}.jar!/META-INF/html_basic.tld, \ - @jsf-impl-${jsf.version}.jar!/META-INF/jsf_core.tld diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/metadata.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/metadata.xml deleted file mode 100644 index f50e4753ff..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jsf/jsf-mojarra-1.2/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-1.2/pom.xml deleted file mode 100644 index 7bfff38f2e..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-1.2/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-jsf - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jsf-mojarra-1.2 - pom - JOnAS :: Services :: JSF :: Mojarra 1.2 - JSF implementation providing JSF 1.2 implementation - - core - ant - - diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/pom.xml deleted file mode 100644 index dafd22c7d7..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-jsf-mojarra-2.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-mojarra-2.0-ant - jar - JOnAS :: Services :: JSF :: Mojarra 2.0 :: Ant - - - - org.ow2.jonas - jonas-jsf-base-ant - ${project.version} - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - - diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra20/JsfMojarra20.java b/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra20/JsfMojarra20.java deleted file mode 100644 index 0811f8eb27..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/mojarra20/JsfMojarra20.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.jsf.mojarra20; - -import org.ow2.jonas.antmodular.jonasbase.jsf.Jsf; - -/** - * Defines properties for JSF Mojarra2.0 service. - * - * @author Jeremy Cazaux - */ -public class JsfMojarra20 extends Jsf { - - /** - * Name of the implementation class for Mojarra1.2 - */ - private static final String MOJARRA20_SERVICE = "org.ow2.jonas.jsf.mojarra20.Mojarra20ServiceImpl"; - - /** - * Execute all tasks - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.MOJARRA20_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/antlib-jsf-mojarra-2.0.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/antlib-jsf-mojarra-2.0.xml deleted file mode 100644 index cd770ee530..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/antlib-jsf-mojarra-2.0.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.properties b/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.properties deleted file mode 100644 index c6a5982d5f..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.properties +++ /dev/null @@ -1 +0,0 @@ -jsf.implementation.default=mojarra20 \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.xml deleted file mode 100644 index d68b277085..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/ant/src/main/resources/build-jsf-mojarra-2.0.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/pom.xml deleted file mode 100644 index 3fecc7c7ae..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - jonas-jsf-mojarra-2.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-mojarra-2.0-core - bundle - JOnAS :: Services :: JSF :: Mojarra 2.0 :: Core - - - - com.sun.faces - jsf-impl - ${jsf2-impl.version} - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - org.ow2.spec.ee - ow2-jsf-2.0-spec - ${ow2.spec.version} - provided - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java deleted file mode 100644 index 76e7d24812..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/com/sun/faces/application/resource/ZipDirectoryEntryScanner.java +++ /dev/null @@ -1,131 +0,0 @@ -//Fix for issue : http://java.net/jira/browse/JAVASERVERFACES-2052 -// Remove this file when the issue will be fixed in a release -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ - -package com.sun.faces.application.resource; - -import com.sun.faces.util.FacesLogger; -import java.io.IOException; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; - - - -class ZipDirectoryEntryScanner { - - private static final Logger LOGGER = FacesLogger.RESOURCE.getLogger(); - private static final String prefix = "META-INF/resources"; - private static final int prefixLen = prefix.length(); - Map resourceLibraries; - - - ZipDirectoryEntryScanner() { - ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext(); - Set webInfLibJars = extContext.getResourcePaths("/WEB-INF/lib"); - resourceLibraries = new ConcurrentHashMap(); - ZipInputStream zis = null; - ZipEntry ze = null; - String entryName = null; - if (webInfLibJars != null) { - for (String cur : webInfLibJars) { - zis = new ZipInputStream(extContext.getResourceAsStream(cur)); - try { - while (null != (ze = zis.getNextEntry())) { - entryName = ze.getName(); - if (entryName.startsWith(prefix)) { - if (prefixLen < entryName.length()) { - entryName = entryName.substring(prefixLen + 1); - if (!entryName.endsWith("/")) { - // Assume this code is only reached if the zip entry - // is NOT a 'directory' entry. - int i = entryName.lastIndexOf("/"); - if (-1 != i) { - entryName = entryName.substring(0, i); - if (!resourceLibraries.containsKey(entryName)) { - resourceLibraries.put(entryName, Boolean.TRUE); - } - } - } - - } - } - } - - } catch (IOException ioe) { - if (LOGGER.isLoggable(Level.SEVERE)) { - LOGGER.log(Level.SEVERE, "Unable to inspect resource library " + cur, ioe); - } - } - } - } - - // remove the optional local prefix entries - Iterator iter = resourceLibraries.keySet().iterator(); - String cur; - while (iter.hasNext()) { - cur = iter.next(); - if (cur.contains("/")) { - iter.remove(); - } - } - } - - boolean libraryExists(String libraryName, String localePrefix) { - boolean result = false; - if (null != localePrefix) { - result = resourceLibraries.containsKey(localePrefix + "/" + libraryName); - } else { - result = resourceLibraries.containsKey(libraryName); - } - return result; - } - - - -} diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/Mojarra20ServiceImpl.java b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/Mojarra20ServiceImpl.java deleted file mode 100644 index 597b9dfa34..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/Mojarra20ServiceImpl.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jsf.mojarra20; - -import java.net.URL; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; - -import org.osgi.framework.BundleContext; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jsf.JSFService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Implementation of the service that is providing JSF 2.0 implementation. - * @author Florent Benoit - */ -public class Mojarra20ServiceImpl extends AbsServiceImpl implements JSFService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(Mojarra20ServiceImpl.class); - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * OSGi Bundle context. - */ - private BundleContext bundleContext = null; - - - /** - * Constructor in OSGi mode. It provides the bundle context. - * @param bundleContext the given bundle context. - */ - public Mojarra20ServiceImpl(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - @SuppressWarnings("unchecked") - @Override - protected void doStart() throws ServiceException { - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for validation service", e); - } - - // Register the TLD URLs - Enumeration e = bundleContext.getBundle().findEntries("META-INF", "*.tld", true); - if (e != null) { - while (e.hasMoreElements()) { - URL url = e.nextElement(); - Dictionary dictionary = new Hashtable(); - dictionary.put("name", bundleContext.getBundle().getSymbolicName()); - dictionary.put("urltype", "tld"); - dictionary.put("value", url.toString()); - - // for each url - bundleContext.registerService(URL.class.getName(), url, dictionary); - } - } - } - - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - // Unregister MBean - try { - jmxService.unregisterModelMBean(JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for validation service", e); - } - - - - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - -} diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/vendor/Tomcat7InjectionProvider.java b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/vendor/Tomcat7InjectionProvider.java deleted file mode 100644 index 2969d02e24..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/java/org/ow2/jonas/jsf/mojarra20/vendor/Tomcat7InjectionProvider.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jsf.mojarra20.vendor; - -import com.sun.faces.spi.DiscoverableInjectionProvider; -import com.sun.faces.spi.InjectionProviderException; - -import javax.servlet.ServletContext; -import java.lang.reflect.Method; - - -/** - * Manages Injection for Tomcat7. - * @author Florent Benoit - */ -public class Tomcat7InjectionProvider extends DiscoverableInjectionProvider { - - private ServletContext servletContext; - - /** - * Instance Manager. - */ - private Object instanceManager = null; - - - /** - * newInstance method. - */ - private Method newInstanceMethod = null; - - /** - * destroyInstance method. - */ - private Method destroyInstanceMethod = null; - - - public Tomcat7InjectionProvider(ServletContext servletContext) { - this.servletContext = servletContext; - - this.instanceManager = servletContext.getAttribute("org.apache.tomcat.InstanceManager"); - - // try to init the method object - if (instanceManager != null) { - try { - this.newInstanceMethod = instanceManager.getClass().getMethod("newInstance", Object.class); - } catch (Exception e) { - throw new IllegalStateException("Unable to get method", e); - } - try { - this.destroyInstanceMethod = instanceManager.getClass().getMethod("destroyInstance", Object.class); - } catch (Exception e) { - throw new IllegalStateException("Unable to get method", e); - } - } - } - - - /** - *

    The implementation of this method must perform the following - * steps: - *

      - *
    • Inject the supported resources per the Servlet 2.5 - * specification into the provided object
    • - *
    - *

    - *

    This method must not invoke any methods - * annotated with @PostConstruct - * - * @param managedBean the target managed bean - * @throws com.sun.faces.spi.InjectionProviderException - * if an error occurs during - * resource injection - */ - public void inject(Object managedBean) throws InjectionProviderException { - if (newInstanceMethod == null) { - throw new InjectionProviderException(new Exception("The newInstance method has not been initialized. Check that you're using Tomcat7")); - } - try { - newInstanceMethod.invoke(instanceManager, managedBean); - } catch (Exception e) { - throw new InjectionProviderException(e); - } - } - - /** - *

    The implemenation of this method must invoke any - * method marked with the @PreDestroy annotation - * (per the Common Annotations Specification). - * - * @param managedBean the target managed bean - * @throws com.sun.faces.spi.InjectionProviderException - * if an error occurs when invoking - * the method annotated by the @PreDestroy annotation - */ - public void invokePreDestroy(Object managedBean) throws InjectionProviderException { - if (destroyInstanceMethod == null) { - throw new InjectionProviderException(new Exception("The destroyInstance method has not been initialized. Check that you're using Tomcat7")); - } - try { - destroyInstanceMethod.invoke(instanceManager, managedBean); - } catch (Exception e) { - throw new InjectionProviderException(e); - } - - } - - /** - *

    The implemenation of this method must invoke any - * method marked with the @PostConstruct annotation - * (per the Common Annotations Specification). - * - * @param managedBean the target managed bean - * @throws com.sun.faces.spi.InjectionProviderException - * if an error occurs when invoking - * the method annotated by the @PostConstruct annotation - */ - public void invokePostConstruct(Object managedBean) throws InjectionProviderException { - // Already done by inject/newInstance method - } - -} - diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/properties/jonas-jsf-mojarra20.properties b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/properties/jonas-jsf-mojarra20.properties deleted file mode 100644 index aa5b63e6e2..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/properties/jonas-jsf-mojarra20.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.jsf.class org.ow2.jonas.jsf.mojarra20.Mojarra20ServiceImpl \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/META-INF/jonas-jsf-mojarra-2.0-core.bnd b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/META-INF/jonas-jsf-mojarra-2.0-core.bnd deleted file mode 100644 index 7ff05b10c1..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/META-INF/jonas-jsf-mojarra-2.0-core.bnd +++ /dev/null @@ -1,51 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id:$ -# --------------------------------------------------------------------------- - -Export-Package com.sun.faces.*;version=2.0;-split-package:=merge-first,\ - org.ow2.jonas.jsf.mojarra20.vendor - -Import-Package !com.sun.enterprise.*,\ - !com.sun.faces.config.beans.*,\ - !org.mortbay.jetty.*,\ - groovy.*;resolution:=optional,\ - javax.portlet;resolution:=optional,\ - javax.faces.*;version="2.0.0",\ - javax.servlet.jsp.jstl.*;version="[1.2.0,2.2.0]",\ - javax.servlet.annotation;resolution:=optional,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * - -DynamicImport-Package org.apache - -Include-Resource {maven-resources}, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/mojarra_ext.tld, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/html_basic.tld, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/jsf_core.tld, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/resources/javax.faces/jsf-uncompressed.js, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/resources/javax.faces/jsf.js, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/facelet-dev-debug.xml, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/facelet-dev-error.xml, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/mojarra_ext.taglib.xml, \ - @jsf-impl-${jsf2-impl.version}.jar!/META-INF/error-include.xhtml - diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/metadata.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/metadata.xml deleted file mode 100644 index d0663d51d9..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jsf/jsf-mojarra-2.0/pom.xml b/jonas/modules/services/jsf/jsf-mojarra-2.0/pom.xml deleted file mode 100644 index ec049eec81..0000000000 --- a/jonas/modules/services/jsf/jsf-mojarra-2.0/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-jsf - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jsf-mojarra-2.0 - pom - JOnAS :: Services :: JSF :: Mojarra 2.0 - JSF implementation providing JSF 2.0 implementation - - core - ant - - diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/pom.xml b/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/pom.xml deleted file mode 100644 index cedba63eb5..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-jsf-myfaces-2.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-myfaces-2.0-ant - jar - JOnAS :: Services :: JSF :: MyFaces 2.0 :: Ant - - - - org.ow2.jonas - jonas-jsf-base-ant - ${project.version} - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - - diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/myfaces20/JsfMyFaces20.java b/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/myfaces20/JsfMyFaces20.java deleted file mode 100644 index b1f89d92eb..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/jsf/myfaces20/JsfMyFaces20.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.jsf.myfaces20; - -import org.ow2.jonas.antmodular.jonasbase.jsf.Jsf; - -/** - * Defines properties for JSF MyFaces 2.0 service. - * - * @author Jeremy Cazaux - */ -public class JsfMyFaces20 extends Jsf { - - /** - * Name of the implementation class for MyFaces 2.0 - */ - private static final String MY_FACES_SERVICE = "org.ow2.jonas.jsf.myfaces20.MyFaces20ServiceImpl"; - - /** - * Execute all tasks - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.MY_FACES_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/antlib-jsf-myfaces-2.0.xml b/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/antlib-jsf-myfaces-2.0.xml deleted file mode 100644 index 09ebdea029..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/antlib-jsf-myfaces-2.0.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.properties b/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.properties deleted file mode 100644 index e44c9ab8ec..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.properties +++ /dev/null @@ -1 +0,0 @@ -jsf.implementation.default=myFaces20 \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.xml b/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.xml deleted file mode 100644 index 5544bfe3a7..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/ant/src/main/resources/build-jsf-myfaces-2.0.xml +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/pom.xml b/jonas/modules/services/jsf/jsf-myfaces-2.0/core/pom.xml deleted file mode 100644 index b1351143e1..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/pom.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - jonas-jsf-myfaces-2.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-jsf-myfaces-2.0-core - bundle - JOnAS :: Services :: JSF :: MyFaces 2.0 :: Core - - - - org.apache.myfaces.core - myfaces-impl - ${myfaces-impl.version} - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - org.ow2.spec.ee - ow2-jsf-2.0-spec - ${ow2.spec.version} - provided - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - ${ow2.spec.version} - provided - - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/java/org/ow2/jonas/jsf/myfaces20/MyFaces20ServiceImpl.java b/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/java/org/ow2/jonas/jsf/myfaces20/MyFaces20ServiceImpl.java deleted file mode 100644 index 6ba3a78cba..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/java/org/ow2/jonas/jsf/myfaces20/MyFaces20ServiceImpl.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.jsf.myfaces20; - -import java.net.URL; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Hashtable; - -import javax.servlet.ServletContainerInitializer; - -import org.apache.myfaces.ee6.MyFacesContainerInitializer; -import org.osgi.framework.BundleContext; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jsf.JSFService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Implementation of the service that is providing JSF 2.0 implementation. - * @author Florent Benoit - */ -public class MyFaces20ServiceImpl extends AbsServiceImpl implements JSFService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(MyFaces20ServiceImpl.class); - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * OSGi Bundle context. - */ - private BundleContext bundleContext = null; - - - /** - * Constructor in OSGi mode. It provides the bundle context. - * @param bundleContext the given bundle context. - */ - public MyFaces20ServiceImpl(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - @SuppressWarnings("unchecked") - @Override - protected void doStart() throws ServiceException { - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for validation service", e); - } - - // Register the TLD URLs - Enumeration e = bundleContext.getBundle().findEntries("META-INF", "*.tld", true); - if (e != null) { - while (e.hasMoreElements()) { - URL url = e.nextElement(); - Dictionary dictionary = new Hashtable(); - dictionary.put("name", bundleContext.getBundle().getSymbolicName()); - dictionary.put("urltype", "tld"); - dictionary.put("value", url.toString()); - - // for each url - bundleContext.registerService(URL.class.getName(), url, dictionary); - } - } - - // Register the servlet initializer - bundleContext.registerService( - ServletContainerInitializer.class.getName(), - new MyFacesContainerInitializer(), - null); - - } - - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - // Unregister MBean - try { - jmxService.unregisterModelMBean(JonasObjectName.jsfService(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for validation service", e); - } - - - - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - -} diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/properties/jonas-jsf-myfaces20.properties b/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/properties/jonas-jsf-myfaces20.properties deleted file mode 100644 index 1b64380196..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/properties/jonas-jsf-myfaces20.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.jsf.class org.ow2.jonas.jsf.myfaces20.MyFaces20ServiceImpl \ No newline at end of file diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/jonas-jsf-myfaces-2.0-core.bnd b/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/jonas-jsf-myfaces-2.0-core.bnd deleted file mode 100644 index 9acbf2929c..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/jonas-jsf-myfaces-2.0-core.bnd +++ /dev/null @@ -1,52 +0,0 @@ - -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id:$ -# --------------------------------------------------------------------------- - -Export-Package org.apache.myfaces.*;version=${myfaces-impl.version};-split-package:=merge-first - -Import-Package org.apache.tomcat;resolution:=optional,\ - com.google.inject;resolution:=optional,\ - javax.faces.*;version=2.0.0,\ - javax.persistence.*;version="[1.0.0,2.0.0]",\ - javax.servlet.jsp.jstl.*;version="[1.2.0,2.2.0]",\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * - -Private-Package org.apache.commons.beanutils.*, \ - org.apache.commons.codec.*, \ - org.ow2.jonas.jsf.myfaces20 - -DynamicImport-Package org.apache,org.apache.tomcat,javax.servlet.jsp.* - -Include-Resource {maven-resources}, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/myfaces_core.tld, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/myfaces_html.tld, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/myfaces-metadata.xml, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/standard-faces-config.xml, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/rsc/myfaces-dev-error-include.xhtml, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/rsc/myfaces-dev-debug.xml, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/rsc/myfaces-dev-error.xml, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/resources/org.apache.myfaces/oamSubmit.js, \ - @myfaces-impl-${myfaces-impl.version}.jar!/META-INF/internal-resources/org.apache.myfaces/oamSubmit-uncompressed.js - diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/resources/javax.faces/jsf-uncompressed.js b/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/resources/javax.faces/jsf-uncompressed.js deleted file mode 100644 index 5ac3f22265..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/core/src/main/resources/META-INF/resources/javax.faces/jsf-uncompressed.js +++ /dev/null @@ -1,2441 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - * - * - * This file incorporates work covered by the following copyright and - * permission notices: - * - * Copyright 2004 The Apache Software Foundation - * Copyright 2004-2008 Emmanouil Batsis, mailto: mbatsis at users full stop sourceforge full stop net - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - @project JSF JavaScript Library - @version 2.0 - @description This is the standard implementation of the JSF JavaScript Library. - */ - -/** - * Register with OpenAjax - */ -if (typeof OpenAjax !== "undefined" && - typeof OpenAjax.hub.registerLibrary !== "undefined") { - OpenAjax.hub.registerLibrary("jsf", "www.sun.com", "2.0", null); -} - -// Detect if this is already loaded, and if loaded, if it's a higher version -if (!((jsf && jsf.specversion && jsf.specversion > 20000 ) && - (jsf.implversion && jsf.implversion > 2))) { - - /** - * The top level global namespace for JavaServer Faces functionality. - * @name jsf - * @namespace - */ - var jsf = {}; - - /** - * The namespace for Ajax functionality. - * @name jsf.ajax - * @namespace - * @exec - */ - jsf.ajax = function() { - - var eventListeners = []; - var errorListeners = []; - - /** - * Determine if the current browser is part of Microsoft's failed attempt at - * standards modification. - * @ignore - */ - var isIE = function isIE() { - if (typeof isIECache !== "undefined") { - return isIECache; - } - isIECache = - document.all && window.ActiveXObject && - navigator.userAgent.toLowerCase().indexOf("msie") > -1 && - navigator.userAgent.toLowerCase().indexOf("opera") == -1; - return isIECache; - }; - var isIECache; - - /** - * Determine if loading scripts into the page executes the script. - * This is instead of doing a complicated browser detection algorithm. Some do, some don't. - * @returns {boolean} does including a script in the dom execute it? - * @ignore - */ - var isAutoExecCache; - var isAutoExec = function isAutoExec() { - try { - if (typeof isAutoExecCache !== "undefined") { - return isAutoExecCache; - } - var autoExecTestString = ""; - var tempElement = document.createElement('span'); - tempElement.innerHTML = autoExecTestString; - var body = document.getElementsByTagName('body')[0]; - var tempNode = body.appendChild(tempElement); - if (mojarra && mojarra.autoExecTest) { - isAutoExecCache = true; - delete mojarra.autoExecTest; - } else { - isAutoExecCache = false; - } - deleteNode(tempNode); - return isAutoExecCache; - } catch (ex) { - // OK, that didn't work, we'll have to make an assumption - if (typeof isAutoExecCache === "undefined") { - isAutoExecCache = false; - } - return isAutoExecCache; - } - }; - - /** - * @ignore - */ - var getTransport = function getTransport() { - var methods = [ - function() { - return new XMLHttpRequest(); - }, - function() { - return new ActiveXObject('Msxml2.XMLHTTP'); - }, - function() { - return new ActiveXObject('Microsoft.XMLHTTP'); - } - ]; - - var returnVal; - for (var i = 0, len = methods.length; i < len; i++) { - try { - returnVal = methods[i](); - } catch(e) { - continue; - } - return returnVal; - } - throw new Error('Could not create an XHR object.'); - }; - - /** - * Find instance of passed String via getElementById - * @ignore - */ - var $ = function $() { - var results = [], element; - for (var i = 0; i < arguments.length; i++) { - element = arguments[i]; - if (typeof element == 'string') { - element = document.getElementById(element); - } - results.push(element); - } - return results.length > 1 ? results : results[0]; - }; - - /** - * Get the form element which encloses the supplied element. - * @param element - element to act against in search - * @returns form element representing enclosing form, or first form if none found. - * @ignore - */ - var getForm = function getForm(element) { - if (element) { - var form = $(element); - while (form) { - - if (form.nodeName && (form.nodeName.toLowerCase() == 'form')) { - return form; - } - if (form.form) { - return form.form; - } - if (form.parentNode) { - form = form.parentNode; - } else { - form = null; - } - } - return document.forms[0]; - } - return null; - }; - - /** - * Check if a value exists in an array - * @ignore - */ - var isInArray = function isInArray(array, value) { - for (var i = 0; i < array.length; i++) { - if (array[i] === value) { - return true; - } - } - return false; - }; - - - /** - * Evaluate JavaScript code in a global context. - * @param src JavaScript code to evaluate - * @ignore - */ - var globalEval = function globalEval(src) { - if (window.execScript) { - window.execScript(src); - return; - } - // We have to wrap the call in an anon function because of a firefox bug, where this is incorrectly set - // We need to explicitly call window.eval because of a Chrome peculiarity - var fn = function() { - window.eval.call(window,src); - }; - fn(); - }; - - /** - * Get all scripts from supplied string, return them as an array for later processing. - * @param str - * @returns {array} of script text - * @ignore - */ - var stripScripts = function stripScripts(str) { - // Regex to find all scripts in a string - var findscripts = /]*>([\S\s]*?)<\/script>/igm; - // Regex to find one script, to isolate it's content [2] and attributes [1] - var findscript = /]*)>([\S\s]*?)<\/script>/im; - // Regex to remove leading cruft - var stripStart = /^\s*( - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/jsf/jsf-myfaces-2.0/pom.xml b/jonas/modules/services/jsf/jsf-myfaces-2.0/pom.xml deleted file mode 100644 index 28def4fe71..0000000000 --- a/jonas/modules/services/jsf/jsf-myfaces-2.0/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-jsf - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jsf-myfaces-2.0 - pom - JOnAS :: Services :: JSF :: MyFaces 2.0 - JSF implementation providing JSF 2.0 implementation - - core - ant - - diff --git a/jonas/modules/services/jsf/pom.xml b/jonas/modules/services/jsf/pom.xml deleted file mode 100644 index 6d173d6fe8..0000000000 --- a/jonas/modules/services/jsf/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-jsf - pom - JOnAS :: Services :: JSF - JSF Service - - - jsf-base - jsf-mojarra-1.2 - jsf-mojarra-2.0 - jsf-myfaces-2.0 - - - - - diff --git a/jonas/modules/services/log-provider/core/pom.xml b/jonas/modules/services/log-provider/core/pom.xml deleted file mode 100644 index f0f4326fb2..0000000000 --- a/jonas/modules/services/log-provider/core/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - log-provider - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - log-provider-core - bundle - JOnAS :: Services :: Log provider :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - event-provider-api - ${project.version} - - - - \ No newline at end of file diff --git a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/api/ILogProvider.java b/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/api/ILogProvider.java deleted file mode 100644 index ccfb7d3d83..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/api/ILogProvider.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.log.provider.api; - -/** - * Represents a Log provider - * @author Jeremy Cazaux - */ -public interface ILogProvider { - -} diff --git a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/BundleCurrent.java b/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/BundleCurrent.java deleted file mode 100644 index 8843b9a273..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/BundleCurrent.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ow2.jonas.log.provider.internal; - -/** - * Created by IntelliJ IDEA. - * User: cazauxj - * Date: 4/10/12 - * Time: 3:04 PM - * To change this template use File | Settings | File Templates. - */ -public class BundleCurrent { - - /** - * The {@link InheritableThreadLocal} - */ - private static InheritableThreadLocal threadLocal; - - /** - * The bundle id - */ - private static String bundleId = null; - - /** - * Unique instance - */ - private static BundleCurrent current = new BundleCurrent(); - - /** - * Init the thread - */ - static { - threadLocal = new InheritableThreadLocal(); - threadLocal.set(bundleId); - } - - /** - * {@inheritDoc} - */ - public static void setBundleId(final String bundleId) { - BundleCurrent.bundleId = bundleId; - } - - /** - * @return the bundle id - */ - public static String getBundleId() { - if (bundleId != null) { - return bundleId; - } else { - return String.valueOf(threadLocal.get()); - } - } - - /** - * @return the instance - */ - public static BundleCurrent getCurrent() { - return current; - } -} diff --git a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProvider.java b/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProvider.java deleted file mode 100644 index fd57d4b83f..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProvider.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.log.provider.internal; - -import org.ow2.jonas.event.provider.api.Event; -import org.ow2.jonas.event.provider.api.IEventProvider; -import org.ow2.jonas.log.provider.api.ILogProvider; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.LogRecord; - -/** - * JOnAS log handler - * @author Jeremy Cazaux - */ -public class LogProvider extends Handler implements ILogProvider { - - /** - * The {@link IEventProvider} - */ - private IEventProvider eventProvider; - - /** - * Default constructor - */ - public LogProvider(final IEventProvider eventProvider) { - this.eventProvider = eventProvider; - } - - /** - * {@inheritDoc} - */ - @Override - public synchronized void publish(final LogRecord record) { - if (record != null) { - Event event = new Event(); - event.setTimestamp(BigInteger.valueOf(record.getMillis())); - event.setValue(record.getMessage()); - event.setType(record.getLevel().toString()); - this.eventProvider.addEvent(event); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void flush() { - } - - /** - * {@inheritDoc} - */ - @Override - public void close() throws SecurityException { - } -} diff --git a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProviderComponent.java b/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProviderComponent.java deleted file mode 100644 index 7bd4cbf6a8..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/java/org/ow2/jonas/log/provider/internal/LogProviderComponent.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.log.provider.internal; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.event.provider.api.IEventProvider; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.log.provider.api.ILogProvider; -import org.ow2.jonas.service.ServiceException; - -import java.util.logging.Logger; - -/** - * Log provider component - * @author Jeremy Cazaux - */ -public class LogProviderComponent extends AbsServiceImpl { - - /** - * The logger - */ - private Logger logger; - - /** - * The {@link LogProvider} - */ - private LogProvider logProvider; - - /** - * The bundle context - */ - private BundleContext bundleContext; - - /** - * The {@link ServiceRegistration} - */ - private ServiceRegistration serviceRegistration; - - /** - * The {@link IEventProvider} - */ - private IEventProvider eventProvider; - - /** - * Default constructor - * - * @param bundleContext The {@link BundleContext} - */ - public LogProviderComponent(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - - @Override - protected void doStart() throws ServiceException { - //addition of logger handler - this.logger = Logger.getLogger(getClass().getName()).getParent(); - this.logProvider = new LogProvider(this.eventProvider); - this.logger.addHandler(this.logProvider); - this.serviceRegistration = this.bundleContext.registerService(ILogProvider.class.getName(), this.logProvider, null); - - } - - @Override - protected void doStop() throws ServiceException { - this.logger.removeHandler(this.logProvider); - this.serviceRegistration.unregister(); - } - - /** - * @param eventProvider The {@link IEventProvider} to bind - */ - public void bindEventProvider(final IEventProvider eventProvider) { - this.eventProvider = eventProvider; - } - - /** - * Unbind event provider - */ - public void unbindEventProvider() { - this.eventProvider = null; - } -} diff --git a/jonas/modules/services/log-provider/core/src/main/resources/META-INF/log-provider-core.bnd b/jonas/modules/services/log-provider/core/src/main/resources/META-INF/log-provider-core.bnd deleted file mode 100644 index f4ca01fb20..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/resources/META-INF/log-provider-core.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package * - -Export-Package org.ow2.jonas.log.provider.api - -DynamicImport-Package * \ No newline at end of file diff --git a/jonas/modules/services/log-provider/core/src/main/resources/metadata.xml b/jonas/modules/services/log-provider/core/src/main/resources/metadata.xml deleted file mode 100644 index 3c1371d337..0000000000 --- a/jonas/modules/services/log-provider/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/log-provider/pom.xml b/jonas/modules/services/log-provider/pom.xml deleted file mode 100644 index d8e370a107..0000000000 --- a/jonas/modules/services/log-provider/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - log-provider - pom - JOnAS :: Services :: Log provider - - core - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/addon/pom.xml b/jonas/modules/services/multitenant/addon/pom.xml deleted file mode 100644 index 69a9e4a13d..0000000000 --- a/jonas/modules/services/multitenant/addon/pom.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - - - jonas-multitenant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-multitenant-addon - pom - JOnAS :: Services :: Multitenant :: Addon - - - - org.ow2.jonas - jonas-multitenant-core - deployment-plan - ${project.version} - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-multitenant-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/multitenant-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/addon/src/main/assembly/assembly.xml b/jonas/modules/services/multitenant/addon/src/main/assembly/assembly.xml deleted file mode 100644 index 6f4568d4c9..0000000000 --- a/jonas/modules/services/multitenant/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - Multitenant-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/multitenant/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 140cb75b00..0000000000 --- a/jonas/modules/services/multitenant/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - multitenant - - - Multitenant Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.multitenant - - - - - - org.ow2.jonas.multitenant.internal.MultitenantServiceImpl - - diff --git a/jonas/modules/services/multitenant/core/pom.xml b/jonas/modules/services/multitenant/core/pom.xml deleted file mode 100644 index f01517fd5d..0000000000 --- a/jonas/modules/services/multitenant/core/pom.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - - - jonas-multitenant - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-multitenant-core - bundle - JOnAS :: Services :: Multitenant :: Core - - - - org.ow2.bundles - ow2-util-log - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-libraries-tenant - ${project.version} - - - org.ow2.monolog - monolog-api - 2.2.1-SNAPSHOT - - - org.ow2.carol - carol - provided - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - multitenant-deployment-plan - - - org.ow2.jonas - jonas-libraries-tenant - ${project.version} - - - org.ow2.jonas - jonas-multitenant-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantServiceImpl.java b/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantServiceImpl.java deleted file mode 100644 index d9ebdcdd6e..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantServiceImpl.java +++ /dev/null @@ -1,427 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.multitenant.internal; - -import javax.servlet.Filter; - -import org.objectweb.util.monolog.api.LogInfo; -import org.ow2.carol.jndi.intercept.manager.SingletonInterceptorManager; -import org.ow2.easybeans.api.EZBServer; -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.tenant.TenantIdInfo; -import org.ow2.jonas.lib.tenant.context.TenantCurrent; -import org.ow2.jonas.lib.tenant.filter.HttpTenantIdFilter; -import org.ow2.jonas.lib.tenant.context.TenantContext; -import org.ow2.jonas.lib.tenant.interceptor.jmx.JMXTenantIdInterceptor; -import org.ow2.jonas.lib.tenant.interceptor.jndi.JNDITenantIdInterceptor; -import org.ow2.jonas.lib.tenant.listener.TenantEventListener; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployableInfo; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.lang.reflect.InvocationTargetException; -import java.util.Map; - - -/** - * Implements the multitenant service. - * @see org.ow2.jonas.multitenant.MultitenantService - * - * @author Mohammed Boukada - */ -public class MultitenantServiceImpl extends AbsServiceImpl implements MultitenantService, LogInfo { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(MultitenantServiceImpl.class); - - /** - * The JMX server. - */ - private static JmxService jmxService = null; - - /** - * Registry service. - */ - private static RegistryService registryService = null; - - /** - * Default deployment policy to use when deploying a new version of a - * versioned application, can be changed via JMX. - */ - private String defaultPolicy = "Reserved"; - - /** - * Monolog pattern - */ - private char pattern = 'T'; - - /** - * Tenant Id interceptor for MBeans - */ - private JMXTenantIdInterceptor jmxTenantIdInterceptor = null; - - /** - * Tenant Id attribute name (for MBeans) - */ - private String tenantIdAttributeName = "tenant-id"; - - /** - * Whether tenants have access to platform MBeans - */ - private boolean allowToAccessPlatformMBeans = true; - - /** - * Tenant Id interceptor for JNDI names - */ - private JNDITenantIdInterceptor jndiTenantIdInterceptor = null; - - /** - * Separator between tenant-id prefix and JNDI name - */ - private final String JNDI_SEPARATOR = "/"; - - /** - * The EventService. - */ - private IEventService eventService = null; - - /** - * Event Listener - */ - private TenantEventListener eventListener = null; - - /** - * @return Default policy, as set via JMX. - */ - public String getDefaultDeploymentPolicy() { - return defaultPolicy; - } - - /** - * @param jmxService JMX service to set. - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param registryService Registry service to set. - */ - public void setRegistryService(final RegistryService registryService) { - this.registryService = registryService; - } - - /** - * @param eventService the EventService to set - */ - public void setEventService(final IEventService eventService) { - this.eventService = eventService; - } - - @Override - protected void doStart() throws ServiceException { - MultitenantVirtualJNDIBinding.initialize(jmxService, registryService, this); - - // Load mbeans-descriptor.xml into the modeler registry - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - try { - jmxService.registerModelMBean(this, JonasObjectName.multitenant(getDomainName())); - } catch (Exception e) { - throw new ServiceException("Cannot register 'multitenant' service MBean", e); - } - logger.info("Multitenant service management bean has been registered successfully"); - - // Add tenantId Event Listener - eventListener = new TenantEventListener(JNDI_SEPARATOR); - eventService.registerListener(eventListener, EZBServer.NAMING_EXTENSION_POINT); - eventService.registerListener(eventListener, "/easybeans/.*"); - - // Add tenantId JMX interceptor - jmxTenantIdInterceptor = new JMXTenantIdInterceptor(tenantIdAttributeName, allowToAccessPlatformMBeans); - jmxService.addInterceptor(jmxTenantIdInterceptor); - - // Add tenantId JNDI interceptor - jndiTenantIdInterceptor = new JNDITenantIdInterceptor(JNDI_SEPARATOR); - SingletonInterceptorManager.getInterceptorManager().registerContextInterceptor(jndiTenantIdInterceptor); - } - - @Override - protected void doStop() throws ServiceException { - jmxService.removeInterceptor(jmxTenantIdInterceptor); - SingletonInterceptorManager.getInterceptorManager().unregisterContextInterceptor(jndiTenantIdInterceptor); - eventService.unregisterListener(eventListener); - jmxService.unregisterMBean(JonasObjectName.multitenant(getDomainName())); - logger.info("Multitenant service management bean has been unregistered successfully"); - } - - /** - * Creates an instance of a TenantId HTTP Filter - * @param tenantId the tenant identifier - * @return an instance of a TenantId HTTP Filter - */ - public Filter getTenantIdFilter(String tenantId){ - return new HttpTenantIdFilter(tenantId); - } - - /** - * Returns the default tenantId value - * @return the default tenantId value - */ - public String getDefaultTenantID(){ - return TenantContext.DEFAULT_TENANT_ID; - } - - /** - * Creates JNDI binding management beans for a given tenant identifier. - * @param deployable JAR, WAR or EAR object. - * @param tenantId tenant identifier of the application which will prefix JNDI names. - */ - public void createJNDIBindingMBeans(final IDeployable deployable, final String tenantId) { - - if (getDefaultTenantID().equals(tenantId)) { - logger.warn("This application has not a specific tenant identifier. Default tenant identifier is used"); - } - - if (tenantId != null) { - String applicationName = getOriginalDeployable(deployable).getModuleName(); - String prefix = tenantId; - MultitenantVirtualJNDIBinding.createJNDIBindingMBeans(applicationName, prefix); - } - } - - /** - * @param deployable Deployable to get the original deployable from - * (recursive). - * @return Original deployable. - */ - private IDeployable getOriginalDeployable(final IDeployable deployable) { - IDeployable originalDeployable = deployable; - while (originalDeployable.getOriginalDeployable() != null) { - originalDeployable = originalDeployable.getOriginalDeployable(); - } - return originalDeployable; - } - - /** - * Removes JNDI binding management beans that are not in the JNDI directory - * anymore. - */ - public void garbageCollectJNDIBindingMBeans() { - MultitenantVirtualJNDIBinding.garbageCollectJNDIBindingMBeans(); - } - - /** - * Add eclipselink properties - * @param persistenceUnitManager persistence unit manager - * @param tenantId tenant identifier - */ - public void updatePersistenceUnitManager(EZBPersistenceUnitManager persistenceUnitManager, String tenantId){ - // This property will configure entities as multitenant - // It is the equivalent of @Multitenant - String sessionCustomizerProperty = "eclipselink.session.customizer"; - String sessionCustomizerClass = "org.ow2.easybeans.persistence.eclipselink.MultitenantEntitiesSessionCustomizer"; - persistenceUnitManager.setProperty(sessionCustomizerProperty, sessionCustomizerClass); - - // If eclipselink was enabled to drop and create tables - // change this property to only create tables - String createTablesProperty = "eclipselink.ddl-generation"; - String dropAndCreateTablesValue = "drop-and-create-tables"; - String createTablesValue = "create-tables"; - Map properties = persistenceUnitManager.getProperty(createTablesProperty); - for (Map.Entry property : properties.entrySet()){ - if (property.getValue().equals(dropAndCreateTablesValue)) { - logger.warn("This tenant was enabled to drop and create tables. Eclipselink property is changed to only create tables"); - persistenceUnitManager.setProperty(createTablesProperty, createTablesValue, property.getKey()); - } - } - - // This property will propagate the tenantId to eclipselink - // This value will be added to entities tables - String tenantIdProperty = "eclipselink.tenant-id"; - String tenantIdValue = tenantId; - persistenceUnitManager.setProperty(tenantIdProperty, tenantIdValue); - - logger.debug("Tenant id ''{0}'' was propagate to eclipselink", tenantId); - } - - /** - * Add tenantId as extension to the earDeployable - * @param deployable application deployable - * @param tenantId tenant identifier to add - */ - public void addTenantIdDeployableInfo(IDeployable deployable, String tenantId) { - TenantIdInfo tenantIdInfo = new TenantIdInfo(); - tenantIdInfo.setTenantIdInfo(tenantId); - deployable.addExtension(tenantIdInfo); - } - - /** - * Gets tenantIdInfo stored in the deployable - * @param deployable application deployable - * @return tenantIdInfo - */ - public String getTenantIdDeployableInfo(IDeployable deployable) { - if (deployable == null ) { - logger.debug("Deployable is null"); - return null; - } - - IDeployableInfo tenantIdInfo = deployable.getExtension(TenantIdInfo.class); - String tenantId = null; - try { - if (tenantIdInfo != null){ - tenantId = (String) tenantIdInfo.getClass().getDeclaredMethod("getTenantIdInfo").invoke(tenantIdInfo); - } else { - logger.debug("TenantIdInfo was not found in ''{0}''", deployable); - } - } catch (NoSuchMethodException e) { - throw new ServiceException("Method was not found", e); - } catch (InvocationTargetException e) { - throw new ServiceException("Invocation method fail ",e); - } catch (IllegalAccessException e) { - throw new ServiceException("Method access fail", e); - } - return tenantId; - } - - /** - * Tell if an application is multitenant - * @param deployable application deployable - * @return is multitenant, or not. - */ - public boolean isMultitenant (IDeployable deployable) { - String tenantId = this.getTenantIdDeployableInfo(deployable); - // if tenantId is null or equal to defaultTenantId, then application - // is not multitenant. - return !(tenantId == null || tenantId.equals(this.getDefaultTenantID())); - } - - /** - * Gets tenantContext from TenantCurrent - * @return tenantContext - */ - public Object getTenantContext() { - return TenantCurrent.getCurrent().getTenantContext(); - } - - /** - * Gets tenant id from TenantContext - * @return tenant id - */ - public String getTenantIdFromContext() { - if (TenantCurrent.getCurrent().getTenantContext() != null){ - return TenantCurrent.getCurrent().getTenantContext().getTenantId(); - } - return null; - } - - /** - * Set tenant id in the TenantContext - * @param tenantId to add in TenantContext - */ - public void setTenantIdInContext (String tenantId) { - TenantContext tmp = new TenantContext(tenantId); - this.setTenantContext(tmp); - } - - /** - * Set TenantContext in the Thread - * @param ctx - */ - public void setTenantContext(Object ctx) { - TenantCurrent.getCurrent().setTenantContext((TenantContext) ctx); - } - - /** - * Set application instance name in TenantContext - * @param instanceName - */ - public void setInstanceNameInContext(String instanceName) { - String tenantId = null; - String jmxSessionTenantId = null; - // if tenantId and JMX Session tenantId are set, set them - // in the new TenantContext to be propagate - if (TenantCurrent.getCurrent().getTenantContext() != null) { - tenantId = TenantCurrent.getCurrent().getTenantContext().getTenantId(); - jmxSessionTenantId = TenantCurrent.getCurrent().getTenantContext().getJmxSessionTenantId(); - } - TenantContext tmp = new TenantContext(tenantId, jmxSessionTenantId, instanceName); - this.setTenantContext(tmp); - } - - /** - * Get application instance name from TenantContext - * @return - */ - public String getInstanceNameFromContext() { - if (TenantCurrent.getCurrent().getTenantContext() != null) { - return TenantCurrent.getCurrent().getTenantContext().getInstanceName(); - } - return null; - } - - /** - * Set TenantId and Instance Name in TenantContext - * @param tenantId - * @param instanceName - */ - public void setTenantIdAndInstanceNameInContext(String tenantId, String instanceName) { - TenantContext tmp = new TenantContext(tenantId, null, instanceName); - this.setTenantContext(tmp); - } - - /******************************************************************** - * LogInfo impl - ********************************************************************/ - - /** - * Gets log info value - * @return log info value - */ - public String getValue() { - String tenantId = null; - - if (TenantCurrent.getCurrent().getTenantContext() != null) { - tenantId = TenantCurrent.getCurrent().getTenantContext().getTenantId(); - } - - if (tenantId == null) { - return ""; - } - return tenantId; - } -} diff --git a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBinding.java b/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBinding.java deleted file mode 100644 index 3456f6ee70..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBinding.java +++ /dev/null @@ -1,405 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.multitenant.internal; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.NameClassPair; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.multitenant.MultitenantService; - -/** - * Handles multitenant virtual JNDI binding management. - * @author Mohammed Boukada - */ -public class MultitenantVirtualJNDIBinding implements MultitenantVirtualJNDIBindingMBean{ - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(MultitenantVirtualJNDIBinding.class); - - /** - * The JMX server. - */ - private static JmxService jmxService = null; - - /** - * Registry service. - */ - private static RegistryService registryService = null; - - /** - * Multitenant service. - */ - private static MultitenantService multitenantService = null; - - /** - * All JNDI bindings. - */ - private static List bindings = new ArrayList(); - - /** - * Application name. - */ - private String applicationName = null; - - /** - * Management bean name for this virtual JNDI binding. - */ - private String mBeanName; - - /** - * Map of prefixes and associated policy. - */ - private Map policies = new HashMap(); - - /** - * Map of prefixes and associated list of beans. Note that the bean names - * don't include prefixes. - */ - private Map> beans = new HashMap>(); - - /** - * Saves static server information. - * - * @param jmx JMX service. - * @param registry Registry service. - * @param multitenant Multitenant service. - */ - public static void initialize(final JmxService jmx, final RegistryService registry, final MultitenantService multitenant) { - jmxService = jmx; - registryService = registry; - multitenantService = multitenant; - } - - /** - * Creates or adds into an existing binding a prefix. - * @param appName J2EE application name. - * @param prefix Prefix to add. - */ - public static void createJNDIBindingMBeans(final String appName, final String prefix) { - if (jmxService == null || multitenantService == null || registryService == null) { - throw new IllegalStateException("Services not set: call VirtualJNDIBinding.initialize"); - } - - for (MultitenantVirtualJNDIBinding binding : bindings) { - if (binding.applicationName.equals(appName)) { - binding.addContext(prefix, multitenantService.getDefaultDeploymentPolicy()); - return; - } - } - - new MultitenantVirtualJNDIBinding(appName, prefix); - } - - /** - * Creates and registers a multitenant virtual JNDI binding. - * @param appName J2EE application name. - * @param prefix The first context prefix, will be mapped as default. - */ - protected MultitenantVirtualJNDIBinding(String appName, final String prefix) { - if (appName == null) { - appName = "none"; - } - this.applicationName = appName; - // J2EEApplication=none since this virtual JNDI binding manager - // is shared between multiple J2EE applications - mBeanName = jmxService.getDomainName() + ":j2eeType=EJBModule,J2EEServer=" + jmxService.getJonasServerName() - + ",J2EEApplication=none,name=MultitenantVirtualContainer-" + appName + ",virtualContext=true"; - logger.debug("New MultitenantVirtualJNDIBinding: registering MBean with name : " + mBeanName); - jmxService.registerMBean(this,mBeanName); - addContext(prefix, MultitenantService.DEFAULT); - bindings.add(this); - } - - /** - * Adds a JNDI prefix to this multitenant virtual JNDI naming manager using a policy. - * @param prefix Prefix instance to add. - * @param policy Prefix' policy. - * @throws IllegalArgumentException Policy is invalid. - */ - public void addContext(final String prefix, final String policy) throws IllegalArgumentException { - if (!MultitenantService.DEFAULT.equals(policy) && !MultitenantService.DISABLED.equals(policy) - && !MultitenantService.RESERVED.equals(policy) && !MultitenantService.PRIVATE.equals(policy)) { - throw new IllegalArgumentException("Invalid policy : " + policy); - } - - if (hasContext(prefix)) { - throw new IllegalArgumentException("JNDI prefix " + prefix + " already bound!"); - } - - List beans = new ArrayList(); - try { - Context jndi = MultitenantVirtualJNDIBinding.registryService.getRegistryContext(); - NamingEnumeration elements = jndi.list(""); - while (elements.hasMoreElements()) { - NameClassPair current = elements.nextElement(); - String name; - try { - name = current.getNameInNamespace(); - } catch (Exception e) { - name = current.getName(); - } - if (prefix.length() > 0 && name.contains(prefix)) { - name = name.replace(prefix, ""); - beans.add(name); - } - } - } catch (NamingException e) { - throw new IllegalStateException("Failed creating JNDI binding MBeans", e); - } - - this.beans.put(prefix, beans); - rebindContext(prefix, policy); - } - - /** - * Checks whether a given prefix has been registered. - * @param prefix Prefix to check. - * @return true if found, false otherwise. - */ - public boolean hasContext(final String prefix) { - return (this.policies.containsKey(prefix) && this.beans.containsKey(prefix)); - } - - /** - * Rebinds a prefix. - * @param prefix Prefix to rebind. - * @param policy New policy. - * @return true if succeeded, false otherwise. - * @throws IllegalArgumentException Policy is invalid. - */ - public boolean rebindContext(final String prefix, final String policy) throws IllegalArgumentException { - if (!MultitenantService.DEFAULT.equals(policy) && !MultitenantService.DISABLED.equals(policy) - && !MultitenantService.RESERVED.equals(policy) && !MultitenantService.PRIVATE.equals(policy)) { - throw new IllegalArgumentException("Invalid policy : " + policy); - } - - List beanNames = this.beans.get(prefix); - if (beanNames == null) { - return false; - } - - // If the prefix' old policy was DEFAULT or the new policy to apply is - // DEFAULT, we need to unbind the old DEFAULT - String oldDefault = null; - String oldPolicy = this.policies.get(prefix); - if (MultitenantService.DEFAULT.equals(oldPolicy)) { - oldDefault = prefix; - } else if (MultitenantService.DEFAULT.equals(policy)) { - for (Map.Entry entry : this.policies.entrySet()) { - if (entry.getValue().equals(MultitenantService.DEFAULT)) { - oldDefault = entry.getKey(); - break; - } - } - } - if (oldDefault != null) { - for (String beanName : this.beans.get(oldDefault)) { - try { - Context jndi = MultitenantVirtualJNDIBinding.registryService.getRegistryContext(); - jndi.unbind(beanName); - } catch (NamingException ignored) { - // Ignore - } - } - this.policies.put(oldDefault, MultitenantService.DISABLED); - } - - this.policies.put(prefix, policy); - checkJNDIBindings(); - - return true; - } - - /** - * Checks that the default JNDI binding is still present. - */ - public void checkJNDIBindings() { - if (jmxService == null || multitenantService == null || registryService == null) { - throw new IllegalStateException("Services not set: call MultitenantVirtualJNDIBinding.initialize"); - } - - try { - for (Map.Entry entry : this.policies.entrySet()) { - if (entry.getValue().equals(MultitenantService.DEFAULT)) { - Context jndi = MultitenantVirtualJNDIBinding.registryService.getRegistryContext(); - String newBeanName = null; - for (String beanName : this.beans.get(entry.getKey())) { - // If we bind an alias, CAROL lookups fail. As a - // result, we lookup for the link (this way, the - // JNDI link is not "executed" -for example, - // stateful beans don't get instanciated) and bind - // it as the non-versioned name. - jndi.rebind(beanName, jndi.lookupLink(entry.getKey() + beanName)); - } - return; - } - } - logger.warn("No " + MultitenantService.DEFAULT + " JNDI binding present for application '" - + this.applicationName + "'. You need to set a version as default or expect lookup and unbind failures."); - } catch (NamingException e) { - throw new IllegalStateException("Failed checking default JNDI bindings", e); - } - } - - /** - * Removes JNDI binding management beans that are not in the JNDI directory - * anymore. - */ - public static void garbageCollectJNDIBindingMBeans() { - if (jmxService == null || multitenantService == null || registryService == null) { - throw new IllegalStateException("Services not set: call MultitenantVirtualJNDIBinding.initialize"); - } - - List beansOnJNDI = new ArrayList(); - try { - Context jndi = MultitenantVirtualJNDIBinding.registryService.getRegistryContext(); - NamingEnumeration elements = jndi.list(""); - while (elements.hasMoreElements()) { - NameClassPair current = elements.nextElement(); - beansOnJNDI.add(current.getName()); - } - } catch (NamingException e) { - throw new IllegalStateException("Failed garbage collecting JNDI binding MBeans", e); - } - - for (MultitenantVirtualJNDIBinding binding : bindings.toArray(new MultitenantVirtualJNDIBinding[bindings.size()])) { - gcJNDIBinding(binding, beansOnJNDI); - } - } - - /** - * Garbage-collects (if necessary) a virtual JNDI binding management bean. - * @param binding Virtual binding to check. - * @param beansOnJNDI List of JNDI beans to check against. - */ - private static void gcJNDIBinding(final MultitenantVirtualJNDIBinding binding, final List beansOnJNDI) { - for (Map.Entry> beanList : binding.beans.entrySet()) { - for (String beanName : beanList.getValue()) { - if (!beansOnJNDI.contains(beanList.getKey() + beanName)) { - binding.removePrefix(beanList.getKey()); - binding.checkJNDIBindings(); - return; - } - } - } - } - - /** - * Removes a prefix, including all bindings for this prefix. - * If no more JNDI prefixes left, will also remove - * the JNDI binding management bean. - * @param prefix Prefix to remove. - * @return true if succeeded, false otherwise. - */ - public boolean removePrefix(final String prefix) { - rebindContext(prefix, MultitenantService.DISABLED); - this.policies.remove(prefix); - this.beans.remove(prefix); - if (this.beans.size() == 0 || this.policies.size() == 0) { - return removeVirtualContext(); - } - return true; - } - - /** - * Removes this virtual JNDI binding. - * @return true if succeeded, false otherwise. - */ - public boolean removeVirtualContext() { - List> prefixes = new ArrayList>(getContexts().entrySet()); - for (Map.Entry prefix : prefixes) { - rebindContext(prefix.getKey(), MultitenantService.DISABLED); - this.policies.remove(prefix); - this.beans.remove(prefix); - } - try { - jmxService.unregisterMBean(ObjectName.getInstance(mBeanName)); - } catch (MalformedObjectNameException e) { - logger.error("Error unbinding Virtual JNDI Binding Manager " + mBeanName, e); - return false; - } - bindings.remove(this); - return true; - } - - /** - * @return All prefixes with their policies for this virtual JNDI binding. - */ - public Map getContexts() { - Map result = new HashMap(this.policies.size()); - result.putAll(this.policies); - return result; - } - - /** - * @return All JNDI names managed by this virtual JNDI binding grouped by - * prefix. - */ - public Map> getNames() { - Map> result = new HashMap>(this.beans.size()); - for (Map.Entry> bean : this.beans.entrySet()) { - List beanNames = new ArrayList(bean.getValue().size()); - for (String beanName : bean.getValue()) { - beanNames.add(beanName); - } - result.put(bean.getKey(), beanNames); - } - return result; - } - - /** - * @return Unique URL for this application. - */ - public URL geturl() { - try { - return new URL("file:///dev/null/MultitenantVirtualEJBContainer-" + applicationName); - } catch (MalformedURLException e) { - throw new IllegalStateException("Cannot create URL", e); - } - } - - /** - * @return new String[0]. - */ - public String[] getejbs() { - return new String[0]; - } -} \ No newline at end of file diff --git a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBindingMBean.java b/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBindingMBean.java deleted file mode 100644 index b9c893a3a9..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/java/org/ow2/jonas/multitenant/internal/MultitenantVirtualJNDIBindingMBean.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.multitenant.internal; - - -import java.net.URL; -import java.util.List; -import java.util.Map; - -/** - * Defines JMX methods for multitenantvirtual JNDI binding management for one application. - * This interface also includes all methods called by the JOnAS administration - * Web panel when listing EJB modules. - * @author Mohammed Boukada - */ -public interface MultitenantVirtualJNDIBindingMBean { - /** - * @return All JNDI names managed by this virtual JNDI binding grouped by - * prefix. - */ - Map> getNames(); - - /** - * @return Unique URL for this application. - */ - URL geturl(); - - /** - * @return new String[0]. - */ - String[] getejbs(); -} diff --git a/jonas/modules/services/multitenant/core/src/main/resources/META-INF/jonas-multitenant-core.bnd b/jonas/modules/services/multitenant/core/src/main/resources/META-INF/jonas-multitenant-core.bnd deleted file mode 100644 index 5f3c874256..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/resources/META-INF/jonas-multitenant-core.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.multitenant - -Import-Package org.ow2.jonas.lib.tenant.*,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * diff --git a/jonas/modules/services/multitenant/core/src/main/resources/metadata.xml b/jonas/modules/services/multitenant/core/src/main/resources/metadata.xml deleted file mode 100644 index 44bf26698b..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/core/src/main/resources/org/ow2/jonas/multitenant/internal/mbeans-descriptors.xml b/jonas/modules/services/multitenant/core/src/main/resources/org/ow2/jonas/multitenant/internal/mbeans-descriptors.xml deleted file mode 100644 index 9288a604a8..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/resources/org/ow2/jonas/multitenant/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/multitenant/core/src/main/templates/jonas-multitenant.properties.template b/jonas/modules/services/multitenant/core/src/main/templates/jonas-multitenant.properties.template deleted file mode 100644 index 1e2370dfa9..0000000000 --- a/jonas/modules/services/multitenant/core/src/main/templates/jonas-multitenant.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS Multitenant service configuration -# -jonas.services multitenant -# Set the name of the implementation class of the multitenant service. -jonas.service.multitenant.class org.ow2.jonas.multitenant.internal.MultitenantServiceImpl \ No newline at end of file diff --git a/jonas/modules/services/multitenant/pom.xml b/jonas/modules/services/multitenant/pom.xml deleted file mode 100644 index c566dfefe0..0000000000 --- a/jonas/modules/services/multitenant/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-multitenant - JOnAS :: Services :: Multitenant - pom - - - core - addon - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/addon/pom.xml b/jonas/modules/services/packaging/addon/pom.xml deleted file mode 100644 index 7e5bbeac68..0000000000 --- a/jonas/modules/services/packaging/addon/pom.xml +++ /dev/null @@ -1,238 +0,0 @@ - - - - - jonas-packaging - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - pom - JOnAS :: Services :: Packaging :: Addon - jonas-packaging-addon - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - packaging-addon-deployment-plan - - - org.ow2.jonas.jpaas.util.cloud-desc - common - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-node-template-external-db - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-node-template-jk - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-node-template-jonas - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-topology-connector - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-topology-datasource - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-core - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - cloud-application-deployable-artefact - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - cloud-application-deployable-xml - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - cloud-application-core - ${jpaas-util.version} - - - org.ow2.jonas.jpaas.util.cloud-desc - deployment-core - ${jpaas-util.version} - - - org.ow2.jonas - jonas-packaging-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - generate-sources - - addon-deployment-plan - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - ../core/src/main/jonas-resources/ - true - - bin/* - - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-packaging-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/packaging-deployment-plan.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/addon/src/main/assembly/assembly.xml b/jonas/modules/services/packaging/addon/src/main/assembly/assembly.xml deleted file mode 100644 index d8861f8605..0000000000 --- a/jonas/modules/services/packaging/addon/src/main/assembly/assembly.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - packaging-bin - - zip - - false - - - - - target/extra-resources - META-INF/ - - jonas-addon.xml - - 774 - - - - - ${project.build.directory}/configuration-resources/addon-deployment-plan - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - - - target/extra-resources/bin - bin/ - - * - - 774 - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/addon/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/packaging/addon/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 88ed421a97..0000000000 --- a/jonas/modules/services/packaging/addon/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - packaging - - - Packaging Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - - - jonas.service.pkg - - - - - - org.ow2.jonas.packaging.internal.PackagingManager - - diff --git a/jonas/modules/services/packaging/core/pom.xml b/jonas/modules/services/packaging/core/pom.xml deleted file mode 100644 index a3aeb00b6e..0000000000 --- a/jonas/modules/services/packaging/core/pom.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - - - jonas-packaging - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: Packaging :: Core - jonas-packaging-core - bundle - - - - org.ow2.jonas.jpaas.util.cloud-desc - cloud-application-core - 1.0-SNAPSHOT - - - org.ow2.jonas.jpaas.util.cloud-desc - deployment-core - 1.0-SNAPSHOT - - - org.ow2.jonas.jpaas.util.cloud-desc - environment-template-core - 1.0-SNAPSHOT - - - org.ow2.util - util-plan-schemas - ${ow2-util-plugin.version} - - - org.ow2.jonas - jonas-addon-core - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.jgrapht - jgrapht-jdk1.5 - 0.7.3 - - - graphlayout - graphlayout - 1.2.1 - - - org.objectweb.fractal.fractalexplorer.jgraph - jgraph - fractal - - - org.testng - testng - test - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - packaging-deployment-plan - - - org.ow2.jonas - jonas-packaging-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/core/src/main/java/org/ow2/jonas/packaging/internal/PackagingManager.java b/jonas/modules/services/packaging/core/src/main/java/org/ow2/jonas/packaging/internal/PackagingManager.java deleted file mode 100644 index 0714c7a696..0000000000 --- a/jonas/modules/services/packaging/core/src/main/java/org/ow2/jonas/packaging/internal/PackagingManager.java +++ /dev/null @@ -1,816 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.packaging.internal; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; - -import org.jgrapht.UndirectedGraph; -import org.jgrapht.alg.ConnectivityInspector; -import org.jgrapht.graph.DefaultEdge; -import org.jgrapht.graph.SimpleGraph; -import org.ow2.easybeans.component.util.Property; -import org.ow2.jonas.Version; -import org.ow2.jonas.addon.deploy.api.util.IAddonStructure; -import org.ow2.jonas.addon.deploy.impl.xml.JonasAddonDesc; -import org.ow2.jonas.addon.deploy.jonasaddon.v1.generated.JonasAddonType; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.CloudApplicationDesc; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.artefact.v1.generated.ArtefactDeployableType; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.artefact.v1.generated.RequirementsType; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.v1.generated.CloudApplicationType; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.v1.generated.DeployablesType; -import org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.xml.v1.generated.XmlDeployableType; -import org.ow2.jonas.jpaas.util.clouddescriptors.deployment.DeploymentDesc; -import org.ow2.jonas.jpaas.util.clouddescriptors.deployment.v1.generated.DeploymentType; -import org.ow2.jonas.jpaas.util.clouddescriptors.environmenttemplate.EnvironmentTemplateDesc; -import org.ow2.jonas.jpaas.util.clouddescriptors.environmenttemplate.v1.generated.EnvironmentTemplateType; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.packaging.IPackagingManager; -import org.ow2.jonas.packaging.IPackagingStructure; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.plan.bindings.deploymentplan.Deployment; -import org.ow2.util.plan.bindings.deploymentplan.ExtendedDeploymentPlan; -import org.ow2.util.plan.bindings.deploymentplan.maven2.Maven2Deployment; - -/** - * Implements the packaging service. - * @see org.ow2.jonas.packaging.IPackagingManager - * - * @author Mohammed Boukada - */ -public class PackagingManager extends AbsServiceImpl implements IPackagingManager, IPackagingStructure { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(PackagingManager.class); - - /** - * The JMX server. - */ - private static JmxService jmxService = null; - - /** - * Basename pattern - */ - private static final Pattern BASENAME_PATTERN = Pattern.compile(".*?([^/]*)$"); - - /** - * Property pattern - */ - private static final Pattern PROPERTY_PATTERN = Pattern.compile("\\(.*=.*\\)"); - - /** - * Collocated map - */ - private Map> collocated = new LinkedHashMap>(); - - /** - * Not collocated map - */ - private Map> notCollocated = new LinkedHashMap>(); - - /** - * Deployables - */ - private Map deployables = new LinkedHashMap(); - - /** - * Collocated to property name - */ - private static final String COLLOCATED_TO_PROPERTY_NAME = "collocated-to"; - - /** - * Not collocated to property name - */ - private static final String NOT_COLLOCATED_TO_PROPERTY_NAME = "not-collocated-to"; - - /** - * Resources groupId - */ - private static final String GROUP_ID = "org.ow2.jonas.jpaas"; - - /** - * Deployables graph - */ - UndirectedGraph graph = new SimpleGraph(DefaultEdge.class); - - /** - * JOnAS Base - */ - private static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * @param jmxService JMX service to set. - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - @Override - protected void doStart() throws ServiceException { - // Load mbeans-descriptor.xml into the modeler registry - // the meta-data located in META-INF/mbeans-descriptors.xml - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - try { - jmxService.registerModelMBean(this, JonasObjectName.packaging(getDomainName())); - } catch (Exception e) { - throw new ServiceException("Cannot register 'packaging' service MBean", e); - } - logger.info("Packaging service management bean has been registered successfully"); - } - - @Override - protected void doStop() throws ServiceException { - - } - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - */ - public List generateAddon(URL urlCloudApplication, String tenantId) throws Exception { - return generateAddon(readURL(urlCloudApplication), tenantId, "", "", ""); - } - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param outputDir - */ - public List generateAddon(URL urlCloudApplication, String tenantId, String outputDir) throws Exception { - return generateAddon(readURL(urlCloudApplication), tenantId, "", "", outputDir); - } - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param urlEnvironmentTemplate URL of environment-template.xml - * @param urlMappingTopology URL of deployment.xml - */ - public List generateAddon(URL urlCloudApplication, String tenantId, URL urlEnvironmentTemplate, URL urlMappingTopology) throws Exception { - return generateAddon(readURL(urlCloudApplication), tenantId, readURL(urlEnvironmentTemplate), readURL(urlMappingTopology), ""); - } - - /** - * Generate an addon - * @param urlCloudApplication URL of cloud-application.xml - * @param tenantId tenant identifier of the application - * @param urlEnvironmentTemplate URL of environment-template.xml - * @param urlMappingTopology URL of deployment.xml - * @param outputDir - */ - public List generateAddon(URL urlCloudApplication, String tenantId, URL urlEnvironmentTemplate, URL urlMappingTopology, String outputDir) throws Exception { - return generateAddon(readURL(urlCloudApplication), tenantId, readURL(urlEnvironmentTemplate), readURL(urlMappingTopology), outputDir); - } - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - */ - public List generateAddon(String xmlCloudApplication, String tenantId) throws Exception { - return generateAddon(xmlCloudApplication, tenantId, "", "", ""); - } - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param outputDir - */ - public List generateAddon(String xmlCloudApplication, String tenantId, String outputDir) throws Exception { - return generateAddon(xmlCloudApplication, tenantId, "", "", outputDir); - } - - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param xmlEnvironmentTemplate environment-template.xml content - * @param xmlMappingTopology deployment.xml content - * @return List of zips locations - */ - public List generateAddon(String xmlCloudApplication, String tenantId, String xmlEnvironmentTemplate, - String xmlMappingTopology) throws Exception { - return generateAddon(xmlCloudApplication, tenantId, xmlEnvironmentTemplate, xmlMappingTopology, ""); - } - - /** - * Generate an addon - * @param xmlCloudApplication cloud-application.xml content - * @param tenantId tenant identifier of the application - * @param xmlEnvironmentTemplate environment-template.xml content - * @param xmlMappingTopology deployment.xml content - * @param outputDir - * @return List of zips locations - */ - public List generateAddon(String xmlCloudApplication, String tenantId, String xmlEnvironmentTemplate, - String xmlMappingTopology, String outputDir) throws Exception { - if (tenantId == null || "".equals(tenantId)) { - logger.warn("The tenant identifier of this application is null !"); - } - - CloudApplicationDesc cloudApplicationDesc = new CloudApplicationDesc(xmlCloudApplication); - CloudApplicationType cloudApplication = (CloudApplicationType) cloudApplicationDesc.getCloudApplication(); - - EnvironmentTemplateDesc environmentTemplateDesc = null; - EnvironmentTemplateType environmentTemplate = null; - - DeploymentDesc deploymentDesc = null; - DeploymentType deploymentType = null; - - if (!"".equals(xmlEnvironmentTemplate)) { - environmentTemplateDesc = new EnvironmentTemplateDesc(xmlEnvironmentTemplate); - environmentTemplate = (EnvironmentTemplateType) environmentTemplateDesc.getEnvironmentTemplate(); - } - if (!"".equals(xmlMappingTopology)) { - deploymentDesc = new DeploymentDesc(xmlMappingTopology); - deploymentType = (DeploymentType) deploymentDesc.getDeployment(); - } - - // Retrieve deployables - DeployablesType deployables = cloudApplication.getDeployables(); - List listDeployables = deployables.getDeployables(); - - for (Object deployable : listDeployables) { - String id = null; - List listRequirements = null; - if (deployable instanceof ArtefactDeployableType) { - ArtefactDeployableType artefactDeployable = (ArtefactDeployableType) deployable; - id = artefactDeployable.getId(); - RequirementsType requirements = artefactDeployable.getRequirements(); - listRequirements = requirements.getRequirement(); - } else if (deployable instanceof XmlDeployableType) { - XmlDeployableType xmlDeployable = (XmlDeployableType) deployable; - id = xmlDeployable.getId(); - org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.xml.v1.generated.RequirementsType requirements = - xmlDeployable.getRequirements(); - listRequirements = requirements.getRequirement(); - } - - if (id != null && listRequirements != null) { - this.deployables.put(id, deployable); - this.collocated.put(id, getListOf(COLLOCATED_TO_PROPERTY_NAME, listRequirements)); - this.notCollocated.put(id, getListOf(NOT_COLLOCATED_TO_PROPERTY_NAME, listRequirements)); - } - } - - // Compute number of zips to generate - List> packages = makeZipPackages(); - System.gc(); - - // Construct zip packages - int i = 1; - String zipNamePrefix = cloudApplication.getName() + "_"; - if (tenantId != null && !"".equals(tenantId)) { - zipNamePrefix += tenantId + "_"; - } - - Map> zips = new LinkedHashMap>(); - for (Set zipPackage : packages) { - List zipDeployables = new LinkedList(); - zips.put(zipNamePrefix + i, zipDeployables); - i++; - - // Get deployble object - for (String deployable : zipPackage) { - zipDeployables.add(this.deployables.get(deployable)); - } - } - - List zipsLocations = new LinkedList(); - - // Define OutPutDirectory - String zipsDir; - if ("".equals(outputDir)) { - createWorkAddonsDir(); - zipsDir = JONAS_BASE + File.separator + ADDONS_DIR; - } else { - if (!(new File(outputDir).exists())) { - logger.error("No such file or directory for the URL ''" + outputDir + "''"); - } - zipsDir = outputDir; - } - - for (Map.Entry> zip : zips.entrySet()) { - - String zipName = zipsDir + File.separator + zip.getKey() + ZIP_EXTENSION; - ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipName)); - - // Create deployment plan - ExtendedDeploymentPlan deploymentPlan = new ExtendedDeploymentPlan(); - List deployments = deploymentPlan.getDeployments(); - - // Create a buffer for reading the files - byte[] buf = new byte[1024]; - - try { - // Retrieve deployables for this zip file - for (Object deployable : zip.getValue()) { - String zipEntryName = REPOSITORY_DIR + File.separator + groupIdPath(GROUP_ID) + File.separator; - String artifact = null; - String type = null; - byte[] content = null; - - if (deployable instanceof ArtefactDeployableType) { - // Read artefact deployable bytes - String path = ((ArtefactDeployableType) deployable).getLocation(); - File file = new File(path); - if (!file.exists()) { - throw new Exception("File '" + file.getPath() + "' was not found."); - } - byte[] b = new byte[(int) file.length()]; - FileInputStream in = new FileInputStream(file.getPath()); - in.read(b); - content = b; - - artifact = updateArtefactDeployableName(((ArtefactDeployableType) deployable).getName(), tenantId); - - type = getExtension(file.getPath()); - - } else if (deployable instanceof XmlDeployableType) { - // Read Xml deployable bytes - content = ((XmlDeployableType) deployable).getXmlContent().getBytes(); - - artifact = ((XmlDeployableType) deployable).getName(); - - type = "xml"; - } - - if (artifact != null && type != null && content != null) { - // Set zip entry name - zipEntryName += artifact + File.separator + cloudApplication.getVersion() + File.separator + - updateDeployableZipEntryName(artifact, cloudApplication.getVersion(), type); - - // Add zip entry - out.putNextEntry(new ZipEntry(zipEntryName)); - - // Transfer bytes from the string to the ZIP file - out.write(content, 0, content.length); - - // Complete the entry - out.closeEntry(); - - // Add it to the deployment plan - Maven2Deployment maven2Deployment = new Maven2Deployment(); - maven2Deployment.setGroupId(GROUP_ID); - maven2Deployment.setArtifactId(artifact); - maven2Deployment.setVersion(cloudApplication.getVersion()); - maven2Deployment.setType(type); - maven2Deployment.setIdAttr(basename(zipEntryName)); - deployments.add(maven2Deployment); - } else { - throw new Exception("Cannot create zip entry '" + zipEntryName + "'."); - } - } - - // Write deployment plan - org.ow2.util.plan.bindings.deploymentplan.ObjectFactory depPlanObjectFactory = - new org.ow2.util.plan.bindings.deploymentplan.ObjectFactory(); - String deploymentPlanFileName = DEPLOY_DIRECTORY + File.separator + DEPLOYMENT_PLAN_PREFIX; - if (tenantId != null && !"".equals(tenantId)) { - deploymentPlanFileName += tenantId; - } - deploymentPlanFileName += XML_EXTENSION; - - out.putNextEntry(new ZipEntry(deploymentPlanFileName)); - generateXml(depPlanObjectFactory.createDeploymentPlan(deploymentPlan), out, ExtendedDeploymentPlan.class); - out.closeEntry(); - - // Generate jonas-addon.xml file - makeJonasAddon(cloudApplication, tenantId, out); - - // Add cloud descriptors - // Start by cloud-application.xml ... - String cloudApplicationFileName = DEPLOY_DIRECTORY + File.separator + CLOUD_APPLICATION; - if (tenantId != null && !"".equals(tenantId)) { - cloudApplicationFileName += "_" + tenantId; - } - cloudApplicationFileName += XML_EXTENSION; - out.putNextEntry(new ZipEntry(cloudApplicationFileName)); - out.write(xmlCloudApplication.getBytes()); - out.closeEntry(); - - // then environment-template.xml ... - if (!"".equals(xmlEnvironmentTemplate)) { - String environmentTemplateFileName = DEPLOY_DIRECTORY + File.separator + ENVRIONMENT_TEMPLATE; - if (tenantId != null && !"".equals(tenantId)) { - environmentTemplateFileName += "_" + tenantId; - } - environmentTemplateFileName += XML_EXTENSION; - out.putNextEntry(new ZipEntry(environmentTemplateFileName)); - out.write(xmlEnvironmentTemplate.getBytes()); - out.closeEntry(); - } - - // And finally, add deployment.xml - if (!"".equals(xmlMappingTopology)) { - String deploymentFileName = DEPLOY_DIRECTORY + File.separator + DEPLOYMENT; - if (tenantId != null && !"".equals(tenantId)) { - deploymentFileName += "_" + tenantId; - } - deploymentFileName += XML_EXTENSION; - out.putNextEntry(new ZipEntry(deploymentFileName)); - out.write(xmlMappingTopology.getBytes()); - out.closeEntry(); - } - - logger.info("Addon generated '" + zipName + "'."); - } finally { - out.close(); - } - zipsLocations.add(zipName); - } - return zipsLocations; - } - - /** - * Get list of collocated or not collocated deployable - * @param p name of property (collocated-to or not-collocated-to) - * @param requirements list of requirements - * @return - */ - private List getListOf(String p, List requirements) { - List list = new LinkedList(); - for (String requirement : requirements) { - if (isProperty(requirement)) { - Property property = getProperty(requirement); - if (p.equals(property.getName())) { - list.add(property.getValue()); - } - } - } - return list; - } - - /** - * Whether the requirement match LDAP query syntax - * @param requirement - * @return - */ - private boolean isProperty(String requirement) { - return PROPERTY_PATTERN.matcher(requirement).matches(); - } - - /** - * Get the property - * @param requirement - * @return - */ - private Property getProperty(String requirement) { - Property property = new Property(); - String name = requirement.substring(requirement.indexOf('(') + 1, requirement.indexOf('=')); - String value = requirement.substring(requirement.indexOf('=') + 1, requirement.indexOf(')')); - property.setName(name); - property.setValue(value); - return property; - } - - /** - * Compute zip packages content - * @return list of packages - * @throws Exception - */ - private List> makeZipPackages() throws Exception { - - // Construct a graph of deployables - for (Map.Entry> entry : collocated.entrySet()) { - addVertex(entry.getKey(), entry.getValue()); - } - - // Get connected components - List> connectedComponents = new ConnectivityInspector(graph).connectedSets(); - - // check collocation compatibility - for (Set connectedComponent : connectedComponents) { - checkConstraintsCompatibility(connectedComponent); - } - - // Try to merge connected components - connectedComponentsGarbageCollector(); - - // Gets the new connected components after removing not collocated deployables - return new ConnectivityInspector(graph).connectedSets(); - } - - /** - * Add a vertex and its edges to the graph - * @param vertex - * @param edges - */ - private void addVertex(String vertex, List edges) throws Exception { - // add vertices if not exists - if (!graph.containsVertex(vertex)) { - graph.addVertex(vertex); - } - for (String edgeVertex : edges) { - if (deployables.get(vertex) == null) { - throw new Exception("Deployable with the name '" + vertex + "' was not found."); - } - if (!graph.containsVertex(edgeVertex)){ - graph.addVertex(edgeVertex); - } - } - - // add edges - for (String edge : edges) { - graph.addEdge(vertex, edge); - } - } - - /** - * Check if collocated and not-collocated constraints are compatibles - * @param connectedComponent - * @throws Exception - */ - private void checkConstraintsCompatibility(Set connectedComponent) throws Exception { - ConnectivityInspector connectivityInspector = new ConnectivityInspector(graph); - for (String vertex : connectedComponent) { - if (deployables.get(vertex) == null) { - throw new Exception("Deployable with the name '" + vertex + "' was not found."); - } - List notCollocatedDeployables = notCollocated.get(vertex); - for (String notCollocatedDeployable : notCollocatedDeployables) { - if (connectivityInspector.pathExists(vertex, notCollocatedDeployable)) { - throw new Exception("Wrong constraint. '" + vertex + "' and '" + notCollocatedDeployable + "' cannot " + - "be collocated"); - } - } - } - } - - /** - * Try to merge connected components to reduce their number - * @throws Exception - */ - private void connectedComponentsGarbageCollector() throws Exception { - ConnectivityInspector connectivityInspector = new ConnectivityInspector(graph); - List> connectedComponents = connectivityInspector.connectedSets(); - if (connectedComponents.size() > 1) { - boolean merge = false; - int i = 0; - while (!merge && i < connectedComponents.size()) { - int j = i + 1; - List toCollocate = new LinkedList(connectedComponents.get(i)); - while (!merge && j < connectedComponents.size()) { - List toTest = new LinkedList(connectedComponents.get(j)); - if (canCollocate(toCollocate, toTest)) { - merge = true; - addVertex(toCollocate.get(0), toTest); - } - j++; - } - i++; - } - - if (merge) { - connectedComponentsGarbageCollector(); - } - } - } - - /** - * Test if two connected component can collocate - * @param listToCollocate - * @param listToTest - * @return - */ - private boolean canCollocate(List listToCollocate, List listToTest) { - for (String elementOnListToCollocate : listToCollocate) { - List elementNotCollocated = this.notCollocated.get(elementOnListToCollocate); - for (String elementOnListToTest : listToTest) { - if (elementNotCollocated.contains(elementOnListToTest)) { - return false; - } - List elementTestNotCollocated = this.notCollocated.get(elementOnListToTest); - if (elementTestNotCollocated.contains(elementOnListToCollocate)) { - return false; - } - } - } - return true; - } - - /** - * Make jonas-addon.xml file - * @param cloudApplication - * @param tenantId - * @param out - * @throws Exception - */ - private void makeJonasAddon(CloudApplicationType cloudApplication, String tenantId, ZipOutputStream out) throws Exception { - JonasAddonDesc jonasAddonDesc = new JonasAddonDesc(); - JonasAddonType jonasAddon = new JonasAddonType(); - if (tenantId != null && !"".equals(tenantId)) { - jonasAddon.setName(cloudApplication.getName() + "_" + tenantId); - jonasAddon.setTenantId(tenantId); - } else { - jonasAddon.setName(cloudApplication.getName()); - } - if (cloudApplication.getInstance() != null && !"".equals(cloudApplication.getInstance())) { - jonasAddon.setInstance(cloudApplication.getInstance()); - } - if (cloudApplication.getDescription() != null && !"".equals(cloudApplication.getDescription())) { - jonasAddon.setDescription(cloudApplication.getDescription()); - } - jonasAddon.setAuthor(AUTHOR); - jonasAddon.setLicence(LICENCE); - jonasAddon.setJonasVersion("[" + Version.getNumber() + "]"); - jonasAddon.setJvmVersion(JVM_VERSIONS); - if (cloudApplication.getCapabilities().getService() != null && !"".equals(cloudApplication.getCapabilities().getService())) { - jonasAddon.setProvides(cloudApplication.getCapabilities().getService()); - } else { - jonasAddon.setProvides(""); - } - jonasAddon.setRequirements(""); - - // Add jonas-addon as zip entry to output stream - String jonasAddonFileName = IAddonStructure.JONAS_ADDON_METADATA_ZIP_ENTRY; - - out.putNextEntry(new ZipEntry(jonasAddonFileName)); - - // Transfer xml content to the ZIP file - org.ow2.jonas.addon.deploy.jonasaddon.v1.generated.ObjectFactory objectFactory = - new org.ow2.jonas.addon.deploy.jonasaddon.v1.generated.ObjectFactory(); - jonasAddonDesc.generateJonasAddon(objectFactory.createJonasAddon(jonasAddon), out); - - // Complete the entry - out.closeEntry(); - } - - /** - * Generate xml - * @param jaxbElement root element - * @param out output file - * @throws IOException - * @throws JAXBException - */ - private static void generateXml(JAXBElement jaxbElement, ZipOutputStream out, Class clazz) throws IOException, JAXBException { - JAXBContext jc = JAXBContext.newInstance(clazz); - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - marshaller.marshal(jaxbElement, out); - } - - /** - * Read url content - * @param url - * @return content - * @throws java.io.IOException - */ - private static String readURL(final URL url) throws IOException { - URLConnection connection = url.openConnection(); - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - } catch (FileNotFoundException e) { - logger.error("No such file or directory for the URL ''" + url +"''"); - } - - try { - StringBuilder sb = new StringBuilder(); - String inputLine; - while ((inputLine = in.readLine()) != null) { - if (sb.length() > 0) { - sb.append('\n'); - } - sb.append(inputLine); - } - - return sb.toString(); - } finally { - in.close(); - } - } - - /** - * Get basename from url - * @param url - * @return - */ - private static String basename(String url) { - Matcher matcher = BASENAME_PATTERN.matcher(url); - if (matcher.matches()) { - return matcher.group(1); - } else { - throw new IllegalArgumentException("Can't parse " + url); - } - } - - /** - * @param groupId - * @return groupId path - */ - private static String groupIdPath(String groupId) { - return groupId.replace(".", File.separator); - } - - /** - * Customize Artefact deployable name by adding tenantId - * @param name - * @param tenantId - * @return - */ - private String updateArtefactDeployableName(String name, String tenantId) { - if (tenantId != null && !"".equals(tenantId)) { - return name + "_" + tenantId; - } - return name; - } - - /** - * Update deployable name - * @param artifact - * @param version - * @param extension - * @return - */ - private String updateDeployableZipEntryName(String artifact, String version, String extension) { - return artifact + "-" + version + "." + extension; - } - - /** - * Gets file extension - * @param filename - * @return - */ - private static String getExtension(String filename) { - return filename.substring(filename.lastIndexOf('.') + 1); - } - - /** - * Create addons directory ($JONAS_BASE/work/addons/) - * @throws Exception - */ - private void createWorkAddonsDir() throws Exception { - // create work dir - File work = new File(JONAS_BASE + File.separator + WORK_DIRECTORY); - if (!work.exists()) { - if (!work.mkdir()) { - throw new Exception("Fail when creating '" + WORK_DIRECTORY +"' directory"); - } - } - - // create addons dir - File addons = new File(JONAS_BASE + File.separator + ADDONS_DIR); - if (!addons.exists()) { - if (!addons.mkdir()) { - throw new Exception("Fail when creating '" + ADDONS_DIR +"' directory"); - } - } - } -} diff --git a/jonas/modules/services/packaging/core/src/main/jonas-resources/bin/gen-addon b/jonas/modules/services/packaging/core/src/main/jonas-resources/bin/gen-addon deleted file mode 100644 index 04e484d2f9..0000000000 --- a/jonas/modules/services/packaging/core/src/main/jonas-resources/bin/gen-addon +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Mohammed Boukada -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# --------------------------------------------- -# Generate an addon of an application using -# PackagingManager JOnAS service -# --------------------------------------------- - -echo "[INFO] ------------------------------------------------------------------------" -echo "[INFO] Application addon generation ... " -echo "[INFO] ------------------------------------------------------------------------" - -# --------------------------------------------- -# Packaging maven plugin artifact -# --------------------------------------------- -groupId=org.ow2.jonas.tools.maven; -artifactId=maven-packaging-plugin; -version=5.3.0-M7-SNAPSHOT; -goal=generate-application-addon; - -# --------------------------------------------- -# Command usage message -# --------------------------------------------- -USAGE="\n[INFO] Usage: $0 -app urlCloudApplication -out urlOutputDir" -USAGE=$USAGE"\n""[INFO] Options:" -USAGE=$USAGE"\n""[INFO] -tid \t tenant identifier value" -USAGE=$USAGE"\n""[INFO] -env \t url of environment-template.xml" -USAGE=$USAGE"\n""[INFO] -map \t url of deployment.xml (mapping topology)\n" - -# --------------------------------------------- -# Check argument -# --------------------------------------------- -checkArg() { -startChar=`echo $2 | cut -c1` -if [ -z $2 ] || [ $startChar = "-" ] -then - echo "[ERROR] Bad argument '$2' for '$1'" - echo $USAGE - exit 1 -fi -} - -# --------------------------------------------- -# Get arguments -# --------------------------------------------- -URL_CLOUD_APP= -URL_ENV_TEMP= -URL_MAP_TOP= -TENANT_ID= -OUTPUT_DIR= -while [ "$#" -gt 0 ] - do case "$1" in - -app) - PARAMS="$PARAMS $1" - shift - URL_CLOUD_APP=$1 - checkArg '-app' $1 - shift - ;; - -env) - PARAMS="$PARAMS $1" - shift - URL_ENV_TEMP=$1 - checkArg '-env' $1 - shift - ;; - -map) - PARAMS="$PARAMS $1" - shift - URL_MAP_TOP=$1 - checkArg '-map' $1 - shift - ;; - -tid) - PARAMS="$PARAMS $1" - shift - TENANT_ID=$1 - checkArg '-tid' $1 - echo "[INFO] Tenant id : $TENANT_ID" - shift - ;; - -out) - PARAMS="$PARAMS $1" - shift - OUTPUT_DIR=$1 - checkArg '-out' $1 - shift - ;; - *) - echo "[ERROR] Unrecognized command : '$*'" - echo $USAGE - exit 1 - ;; - esac -done - - - -# --------------------------------------------- -# Check script args -# --------------------------------------------- -if [ -z $URL_CLOUD_APP ] -then - echo "[ERROR] Missing argument '-app urlCloudApplication'" - echo $USAGE - exit 1 -else - echo "[INFO] Cloud application url : $URL_CLOUD_APP" -fi - -if [ -z $OUTPUT_DIR ] -then - echo "[ERROR] Missing argument '-out urlOutputDirectory'" - echo $USAGE - exit 1 -else - echo "[INFO] Output directory : $OUTPUT_DIR" -fi - -if [ ! -z $URL_ENV_TEMP ] && [ -z $URL_MAP_TOP ] -then - echo "[WARNING] -env and -map arguments must be set together" - echo "[WARNING] '-env' argument is ignored" - echo $USAGE - unset $URL_ENV_TEMP -elif [ -z $URL_ENV_TEMP ] && [ ! -z $URL_MAP_TOP ] -then - echo "[WARNING] -env and -map arguments must be set together" - echo "[WARNING] '-map' argument is ignored" - echo $USAGE - unset $URL_MAP_TOP -elif [ ! -z $URL_ENV_TEMP ] && [ ! -z $URL_MAP_TOP ] -then - echo "[INFO] Environment template url : $URL_ENV_TEMP" - echo "[INFO] Mapping topology url : $URL_MAP_TOP" -fi - -# --------------------------------------------- -# Run maven plugin -# --------------------------------------------- -mvn $groupId:$artifactId:$version:$goal -DurlCloudApplication=$URL_CLOUD_APP -DoutPutDirectory=$OUTPUT_DIR -Dtenant-id=$TENANT_ID -DurlEnvironmentTemplate=$URL_ENV_TEMP -DurlMappingTopology=$URL_MAP_TOP; \ No newline at end of file diff --git a/jonas/modules/services/packaging/core/src/main/resources/META-INF/jonas-packaging-core.bnd b/jonas/modules/services/packaging/core/src/main/resources/META-INF/jonas-packaging-core.bnd deleted file mode 100644 index 6ab83dc8ae..0000000000 --- a/jonas/modules/services/packaging/core/src/main/resources/META-INF/jonas-packaging-core.bnd +++ /dev/null @@ -1,32 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Embed-Dependency jgraph;inline=true,graphlayout;inline=true;jgrapht-jdk1.5;inline=true - -Export-Package org.ow2.jonas.multitenant.packaging - -Import-Package org.ow2.jonas.addon.deploy.impl.xml,\ - org.ow2.jonas.addon.deploy.jonasaddon.v1.generated,\ - org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication,\ - org.ow2.jonas.jpaas.util.clouddescriptors.cloudapplication.v1.generated,\ - * diff --git a/jonas/modules/services/packaging/core/src/main/resources/metadata.xml b/jonas/modules/services/packaging/core/src/main/resources/metadata.xml deleted file mode 100644 index d0588c53f4..0000000000 --- a/jonas/modules/services/packaging/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/core/src/main/resources/org/ow2/jonas/packaging/internal/mbeans-descriptors.xml b/jonas/modules/services/packaging/core/src/main/resources/org/ow2/jonas/packaging/internal/mbeans-descriptors.xml deleted file mode 100644 index 51f455d426..0000000000 --- a/jonas/modules/services/packaging/core/src/main/resources/org/ow2/jonas/packaging/internal/mbeans-descriptors.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/packaging/core/src/main/templates/jonas-packaging.properties.template b/jonas/modules/services/packaging/core/src/main/templates/jonas-packaging.properties.template deleted file mode 100644 index 826456e8b0..0000000000 --- a/jonas/modules/services/packaging/core/src/main/templates/jonas-packaging.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS Packaging service configuration -# -jonas.services pkg -# Set the name of the implementation class of the packaging service. -jonas.service.pkg.class org.ow2.jonas.packaging.internal.PackagingManager \ No newline at end of file diff --git a/jonas/modules/services/packaging/pom.xml b/jonas/modules/services/packaging/pom.xml deleted file mode 100644 index 1645fc55de..0000000000 --- a/jonas/modules/services/packaging/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - JOnAS :: Services :: Packaging - jonas-packaging - pom - - - core - addon - - - \ No newline at end of file diff --git a/jonas/modules/services/pom.xml b/jonas/modules/services/pom.xml deleted file mode 100644 index 8c433d89ba..0000000000 --- a/jonas/modules/services/pom.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-services - pom - JOnAS :: Services - - - bootstrap - cdi-weld - cmi - deployable-monitor - ejb - jsf - jndi-interceptors - jonas-audit - jonas-addon - jonas-carol-registry - jonas-db - jonas-dbm - jonas-discovery - jonas-datasources - jonas-ear - jonas-ejb-ha - jonas-extension-loader - jonas-jmx - jonas-mail - jonas-resource - jonas-resource-monitor - jonas-security - jonas-tm-jotm - jonas-workcleaner - jonas-workmanager - smartclient - validation - versioning - web-container - webservices - jaxrs-jersey - jonas-configadmin - jms-joram - wrapper - joram-admin - jonas-jndi - multitenant - ssh - jonas-report - ipojo-handler - log-provider - event-provider - jonas-endpoint-collector - packaging - - - - - - org.osgi - org.osgi.core - provided - - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - - diff --git a/jonas/modules/services/smartclient/ant/pom.xml b/jonas/modules/services/smartclient/ant/pom.xml deleted file mode 100644 index cc6c5d17d2..0000000000 --- a/jonas/modules/services/smartclient/ant/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - org.ow2.jonas - jonas-smartclient - 5.3.0-M7-SNAPSHOT - ../pom.xml - - jonas-smartclient-ant - 5.3.0-M7-SNAPSHOT - 4.0.0 - bundle - JOnAS :: Services :: Smartclient :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - provided - - - diff --git a/jonas/modules/services/smartclient/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/smartclient/SmartClient.java b/jonas/modules/services/smartclient/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/smartclient/SmartClient.java deleted file mode 100644 index 36a460773a..0000000000 --- a/jonas/modules/services/smartclient/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/smartclient/SmartClient.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.smartclient; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -import java.io.File; - -/** - * Allow to configure properties of the smartclient - * @author Jeremy Cazaux - */ -public class SmartClient extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[Smartclient] "; - - /** - * Name of JOnAS properties file. - */ - public static final String CONF_FILE = "jonas.properties"; - - /** - * The port property - */ - private static final String PORT_PROPERTY = "jonas.service.smartclient.port"; - - /** - * The smartclient port number - */ - private String smartclientPort; - - /** - * Default constructor. - */ - public SmartClient() { - super(); - } - - /** - * Set the smartclient port number - * - * @param portNumber port for the smartclient - */ - public void setPort(final String portNumber) { - this.smartclientPort = portNumber; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - super.execute(); - - // Path to JONAS_BASE - String jBaseConf = this.destDir.getPath() + File.separator + "conf"; - - JTask jTask = new JTask(); - jTask.setDestDir(this.destDir); - if (this.smartclientPort != null) { - jTask.changeValueForKey(INFO, jBaseConf, CONF_FILE, - PORT_PROPERTY, this.smartclientPort, false); - } - - addTask(jTask); - - } -} diff --git a/jonas/modules/services/smartclient/ant/src/main/resources/META-INF/jonas-smartclient-ant.bnd b/jonas/modules/services/smartclient/ant/src/main/resources/META-INF/jonas-smartclient-ant.bnd deleted file mode 100644 index f1f2ac53e4..0000000000 --- a/jonas/modules/services/smartclient/ant/src/main/resources/META-INF/jonas-smartclient-ant.bnd +++ /dev/null @@ -1,31 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.ow2.jonas.antmodular.jonasbase.smartclient.* - -# Import/Export nothing -Import-Package !* -Export-Package !* - - diff --git a/jonas/modules/services/smartclient/ant/src/main/resources/antlib-smartclient.xml b/jonas/modules/services/smartclient/ant/src/main/resources/antlib-smartclient.xml deleted file mode 100644 index 5308c76f2b..0000000000 --- a/jonas/modules/services/smartclient/ant/src/main/resources/antlib-smartclient.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.properties.template b/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.properties.template deleted file mode 100644 index fd50b1a08d..0000000000 --- a/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.properties.template +++ /dev/null @@ -1,2 +0,0 @@ -#Smartclient -smartclient.port=2503 \ No newline at end of file diff --git a/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.xml b/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.xml deleted file mode 100644 index d075bf2875..0000000000 --- a/jonas/modules/services/smartclient/ant/src/main/resources/build-smartclient.xml +++ /dev/null @@ -1,7 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/smartclient/core/pom.xml b/jonas/modules/services/smartclient/core/pom.xml deleted file mode 100644 index e9f0a32326..0000000000 --- a/jonas/modules/services/smartclient/core/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - jonas-smartclient - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-smartclient-core - bundle - JOnAS :: Services :: Smartclient :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.bundles - ow2-util-log - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - org.ow2.carol - carol - provided - - - org.ow2.easybeans - easybeans-api - - - org.ow2.easybeans - easybeans-component-smartclient-server - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientEndpointBuilder.java b/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientEndpointBuilder.java deleted file mode 100644 index 3526c35832..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientEndpointBuilder.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.smartclient.internal; - -import org.ow2.jonas.endpoint.collector.Endpoint; -import org.ow2.jonas.endpoint.collector.IEndpoint; -import org.ow2.jonas.endpoint.collector.IEndpointBuilder; -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.jmx.JmxService; -import javax.management.ObjectName; -import java.lang.String; -import java.util.regex.Pattern; - -/** - * Smartclient {@code IEndpointBuilder} implementation - */ -public class SmartclientEndpointBuilder implements IEndpointBuilder { - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * The protocol - */ - public static final String PROTOCOL = "smartclient"; - - /** - * {@inheritDoc} - */ - public boolean isSupport(ObjectName objectName) { - String token = this.jmxService.getDomainName() + ":type=service,name=smartclient"; - Pattern pattern = Pattern.compile(token); - return pattern.matcher(objectName.toString()).matches(); - } - - /** - * {@inheritDoc} - */ - public IEndpoint buildEndpoint(ObjectName objectName) { - IEndpoint endpoint = new Endpoint(); - - Object value = Util.getMBeanAttributeValue(objectName, "Port", this.jmxService.getJmxServer()); - if (value != null) { - endpoint.setPort(String.valueOf(value)); - } - endpoint.setProtocol(PROTOCOL); - endpoint.setHost("localhost"); - endpoint.setSource(IEndpoint.SOURCE_PREFIX + PROTOCOL); - return endpoint; - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - this.jmxService = null; - } -} diff --git a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImpl.java b/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImpl.java deleted file mode 100644 index c3cafe12fb..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImpl.java +++ /dev/null @@ -1,166 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.smartclient.internal; - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; - -import javax.management.ObjectName; - -import org.ow2.easybeans.component.itf.RegistryComponent; -import org.ow2.easybeans.component.smartclient.server.SmartClientEndPointComponent; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.smartclient.SmartclientService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * Implements the smartclient service. - * @see org.ow2.jonas.smartclient.SmartclientService - * - * @author S. Ali Tokmen - */ -public class SmartclientServiceImpl extends AbsServiceImpl implements SmartclientService, SmartclientServiceImplMBean { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(SmartclientService.class); - - /** - * Reference to an MBean server. - */ - private JmxService jmxService = null; - - /** - * Port number to listen on. - */ - private int port = 0; - - /** - * Smartclient endpoint component. - */ - private SmartClientEndPointComponent smartclient = null; - - /** - * @param jmxService JMX service to set. - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param port Port number to set. - */ - public void setPort(final int port) { - this.port = port; - } - - /** - * @param domainName Server's domain name. - * @return JMX name of the smartclient service management bean. - */ - public static ObjectName getObjectName(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=smartclient"); - } catch (Exception e) { - throw new IllegalStateException("Cannot get smartclient service", e); - } - } - - /** - * Starts the EasyBeans smartclient service and registers the management - * bean with JMX. - * - * @throws ServiceException If starting the EasyBeans Smartclient fails. - */ - @Override - protected void doStart() throws ServiceException { - try { - this.smartclient = new SmartClientEndPointComponent(); - this.smartclient.setPortNumber(this.port); - - RegistryComponent registry = new SmartclientServiceRegistryComponent(); - this.smartclient.setRegistryComponent(registry); - - File clientJar = new File(System.getProperty("jonas.root"), "lib/client.jar"); - URL[] clientJarURL = new URL[] { URLUtils.fileToURL(clientJar) }; - URLClassLoader clientJarClassLoader = new URLClassLoader(clientJarURL); - this.smartclient.setClassLoader(clientJarClassLoader); - - this.smartclient.init(); - this.smartclient.start(); - } catch (Exception e) { - throw new ServiceException("Cannot start the EasyBeans Smartclient", e); - } - - this.jmxService.registerMBean(this, getObjectName(getDomainName())); - logger.info("Smartclient listening on port " + getPort()); - } - - /** - * Stops the EasyBeans smartclient service and unregisters the management - * bean from JMX. - * - * @throws ServiceException If stopping the EasyBeans Smartclient fails. - */ - @Override - protected void doStop() throws ServiceException { - try { - this.smartclient.stop(); - this.smartclient = null; - } catch (Exception e) { - throw new ServiceException("Cannot stop the EasyBeans Smartclient", e); - } - - this.jmxService.unregisterMBean(getObjectName(getDomainName())); - logger.info("Smartclient service stopped and management bean unregistered"); - } - - /** - * {@inheritDoc}, returns -1 if the EasyBeans Smartclient has not been - * started yet. - */ - public int getPort() { - if (this.smartclient == null) { - return -1; - } else { - return this.smartclient.getPortNumber(); - } - } - - /** - * {@inheritDoc} - */ - public boolean isActive() { - return (this.smartclient != null); - } - -} diff --git a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImplMBean.java b/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImplMBean.java deleted file mode 100644 index e3aff74cf1..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceImplMBean.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.smartclient.internal; - -import org.ow2.jonas.smartclient.SmartclientServiceBase; - -/** - * Management bean interface for the Smartclient service. This interface - * inherits from the smartclient service's base interface and doesn't add any - * method to it, its name guarantees that the JMX server will automatically - * deploy it with the good bindings. - * - * @author S. Ali Tokmen - */ -public interface SmartclientServiceImplMBean extends SmartclientServiceBase { - // This interface should be empty. -} diff --git a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceRegistryComponent.java b/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceRegistryComponent.java deleted file mode 100644 index 738ab7cbe4..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/java/org/ow2/jonas/smartclient/internal/SmartclientServiceRegistryComponent.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.smartclient.internal; - -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.easybeans.component.itf.RegistryComponent; - -/** - * Registry component for the Smartclient service. - * @see org.ow2.jonas.smartclient.SmartclientService - * - * @author S. Ali Tokmen - */ -public class SmartclientServiceRegistryComponent implements RegistryComponent { - - /** - * Gets the default Provider URL. - * @return the provider URL that is used by default. - */ - public String getProviderURL() { - return ConfigurationRepository.getCurrentConfiguration().getProviderURL(); - } - - /** - * Doesn't do anything. - */ - public void init() { - // Nothing to do - } - - /** - * Doesn't do anything. - */ - public void start() { - // Nothing to do - } - - /** - * Doesn't do anything. - */ - public void stop() { - // Nothing to do - } -} diff --git a/jonas/modules/services/smartclient/core/src/main/resources/META-INF/jonas-smartclient-core.bnd b/jonas/modules/services/smartclient/core/src/main/resources/META-INF/jonas-smartclient-core.bnd deleted file mode 100644 index c677f54f6f..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/resources/META-INF/jonas-smartclient-core.bnd +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.smartclient - -Private-Package org.ow2.jonas.smartclient.internal, \ - org.ow2.easybeans.component.smartclient.* - diff --git a/jonas/modules/services/smartclient/core/src/main/resources/metadata.xml b/jonas/modules/services/smartclient/core/src/main/resources/metadata.xml deleted file mode 100644 index 6719483c8f..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/smartclient/core/src/main/templates/jonas-smartclient.properties.template b/jonas/modules/services/smartclient/core/src/main/templates/jonas-smartclient.properties.template deleted file mode 100644 index fbc02c42ca..0000000000 --- a/jonas/modules/services/smartclient/core/src/main/templates/jonas-smartclient.properties.template +++ /dev/null @@ -1,8 +0,0 @@ -# -###################### JOnAS/EasyBeans Smartclient service configuration -# -jonas.services smartclient -# Set the name of the implementation class of the smartclient service. -jonas.service.smartclient.class org.ow2.jonas.smartclient.internal.SmartclientServiceImpl -# port number the Smartclient service listens on -jonas.service.smartclient.port 2503 diff --git a/jonas/modules/services/smartclient/pom.xml b/jonas/modules/services/smartclient/pom.xml deleted file mode 100644 index 1a4cb8aec9..0000000000 --- a/jonas/modules/services/smartclient/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-smartclient - JOnAS :: Services :: Smartclient - - core - ant - - pom - diff --git a/jonas/modules/services/ssh/core/pom.xml b/jonas/modules/services/ssh/core/pom.xml deleted file mode 100644 index 782fdca806..0000000000 --- a/jonas/modules/services/ssh/core/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - org.ow2.jonas - jonas-ssh - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ssh-core - bundle - JOnAS :: Services :: SSH :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.shelbie - shelbie-ssh-server - ${shelbie.version} - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/SshService.java b/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/SshService.java deleted file mode 100644 index 1cbe3837bb..0000000000 --- a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/SshService.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ow2.jonas.ssh; - -/** - * @author Loris Bouzonnet - */ -public interface SshService { -} diff --git a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImpl.java b/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImpl.java deleted file mode 100644 index e0716c76b5..0000000000 --- a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImpl.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ssh.internal; - -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.ssh.SshService; -import org.ow2.shelbie.commands.ssh.server.Constants; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectName; -import java.io.IOException; -import java.util.Properties; - -/** - * @author Loris Bouzonnet - */ -public class SshServiceImpl extends AbsServiceImpl implements SshService, SshServiceImplMBean { - - private int port; - - private String passphrase; - - private ConfigurationAdmin configurationAdmin; - - private Configuration configuration; - - /** - * The {@link ObjectName} associated to this MBean - */ - private ObjectName objectName; - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * The logger - */ - private static Log logger = LogFactory.getLog(SshServiceImpl.class); - - /** - * {@inheritDoc} - */ - protected void doStart() throws ServiceException { - try { - configuration = configurationAdmin.createFactoryConfiguration( - Constants.SSHD_COMPONENT_NAME, null); - } catch (IOException e) { - throw new ServiceException("Unable to create a new configuration for the SSH server", e); - } - Properties properties = new Properties(); - properties.setProperty(Constants.SSHD_PORT, String.valueOf(port)); - if (passphrase != null) { - properties.setProperty(Constants.SSHD_PASSPHRASE, passphrase); - } - try { - configuration.update(properties); - } catch (IOException e) { - throw new ServiceException("Unable to update the configuration of the SSH server", e); - } - - //build the ObjectName and register the MBean - final String pattern = this.jmxService.getDomainName() + ":type=service,name=ssh"; - try { - this.objectName = new ObjectName(pattern); - } catch (MalformedObjectNameException e) { - logger.error("Cannot instantiate ObjectName with pattern equals to '" + pattern + "'", e); - } - try { - this.jmxService.getJmxServer().registerMBean(this, this.objectName); - } catch (InstanceAlreadyExistsException e) { - logger.error("Cannot register MBean with ObjectName " + objectName, e); - } catch (MBeanRegistrationException e) { - logger.error("Cannot register MBean with ObjectName " + objectName, e); - } catch (NotCompliantMBeanException e) { - logger.error("Cannot register MBean with ObjectName " + objectName, e); - } - - } - - /** - * {@inheritDoc} - */ - protected void doStop() throws ServiceException { - if (configuration != null) { - try { - configuration.delete(); - } catch (IOException e) { - throw new ServiceException("Unable to delete the configuration of the SSH server", e); - } - } - - //unregister the MBean - this.jmxService.unregisterMBean(this.objectName); - } - - public ConfigurationAdmin getConfigurationAdmin() { - return configurationAdmin; - } - - public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) { - this.configurationAdmin = configurationAdmin; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getPassphrase() { - return passphrase; - } - - public void setPassphrase(String passphrase) { - this.passphrase = passphrase; - } - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - this.jmxService = null; - } -} diff --git a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImplMBean.java b/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImplMBean.java deleted file mode 100644 index 56367aff51..0000000000 --- a/jonas/modules/services/ssh/core/src/main/java/org/ow2/jonas/ssh/internal/SshServiceImplMBean.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ssh.internal; - -/** - * SSH MBean interface - */ -public interface SshServiceImplMBean { - - /** - * @return the Ssh port - */ - int getPort(); -} diff --git a/jonas/modules/services/ssh/core/src/main/resources/metadata.xml b/jonas/modules/services/ssh/core/src/main/resources/metadata.xml deleted file mode 100644 index 04a3bf9712..0000000000 --- a/jonas/modules/services/ssh/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/ssh/core/src/main/templates/ssh.properties.template b/jonas/modules/services/ssh/core/src/main/templates/ssh.properties.template deleted file mode 100644 index 6ea4a43d13..0000000000 --- a/jonas/modules/services/ssh/core/src/main/templates/ssh.properties.template +++ /dev/null @@ -1,11 +0,0 @@ -# -###################### JOnAS SSH Service -# -jonas.services ssh -# Set the name of the implementation class of the ssh service -# -jonas.service.ssh.class org.ow2.jonas.ssh.internal.SshServiceImpl - -# Set the ssh server port: -jonas.service.ssh.port 10022 -#jonas.service.ssh.passphrase diff --git a/jonas/modules/services/ssh/pom.xml b/jonas/modules/services/ssh/pom.xml deleted file mode 100644 index e276e943f4..0000000000 --- a/jonas/modules/services/ssh/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ssh - pom - JOnAS :: Services :: SSH - - - core - - - diff --git a/jonas/modules/services/validation/hibernate-validation/core/pom.xml b/jonas/modules/services/validation/hibernate-validation/core/pom.xml deleted file mode 100644 index cb20960de7..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/core/pom.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - jonas-validation-hibernate - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-validation-hibernate-core - bundle - JOnAS :: Services :: Validation :: Hibernate :: Core - - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - - org.ow2.spec.ee - ow2-validation-1.0-spec - provided - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - validation - - - org.ow2.bundles - ow2-bundles-externals-slf4j-jcl - ${ow2-bundles.version} - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - org.ow2.jonas - jonas-validation-hibernate-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/validation/hibernate-validation/core/src/main/java/org/ow2/jonas/validation/hibernate/JOnASHibernateValidationServiceImpl.java b/jonas/modules/services/validation/hibernate-validation/core/src/main/java/org/ow2/jonas/validation/hibernate/JOnASHibernateValidationServiceImpl.java deleted file mode 100644 index 5ccf9b2e26..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/core/src/main/java/org/ow2/jonas/validation/hibernate/JOnASHibernateValidationServiceImpl.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.validation.hibernate; - -import javax.validation.spi.ValidationProvider; - -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.management.J2EEServerService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Implementation of the service that is providing Validation provider. - * @author Florent Benoit - */ -public class JOnASHibernateValidationServiceImpl extends AbsServiceImpl { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JOnASHibernateValidationServiceImpl.class); - - /** - * Reference to the JMX service. - */ - private JmxService jmxService = null; - - /** - * OSGi Bundle context. - */ - private BundleContext bundleContext = null; - - /** - * Reference to the MBeans library. This one register J2EEServer. It's only - * here because we need to be started after. - */ - private J2EEServerService j2eeServer = null; - - /** - * Constructor in OSGi mode. It provides the bundle context. - * @param bundleContext the given bundle context. - */ - public JOnASHibernateValidationServiceImpl(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws ServiceException service start-up failed - */ - @Override - protected void doStart() throws ServiceException { - - // register mbeans-descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // Register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.validationService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for validation service", e); - } - - } - - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - // Unregister MBean - try { - jmxService.unregisterModelMBean(JonasObjectName.validationService(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for validation service", e); - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param j2eeServer the j2eeServer to set - */ - public void setJ2EEServer(final J2EEServerService j2eeServer) { - this.j2eeServer = j2eeServer; - } - -} diff --git a/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/META-INF/jonas-validation-hibernate-core.bnd b/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/META-INF/jonas-validation-hibernate-core.bnd deleted file mode 100644 index cc3b9bae85..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/META-INF/jonas-validation-hibernate-core.bnd +++ /dev/null @@ -1,25 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id:$ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.validation.hibernate - diff --git a/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/metadata.xml b/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/metadata.xml deleted file mode 100644 index 8f47f2d68a..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/validation/hibernate-validation/core/src/main/templates/jonas-validation.properties.template b/jonas/modules/services/validation/hibernate-validation/core/src/main/templates/jonas-validation.properties.template deleted file mode 100644 index 0866d4bf54..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/core/src/main/templates/jonas-validation.properties.template +++ /dev/null @@ -1,6 +0,0 @@ -# -###################### JOnAS Validation service configuration -# -jonas.services validation -# Set the name of the implementation class of the validation service. -jonas.service.validation.class org.ow2.jonas.validation.hibernate.JOnASHibernateValidationServiceImpl diff --git a/jonas/modules/services/validation/hibernate-validation/pom.xml b/jonas/modules/services/validation/hibernate-validation/pom.xml deleted file mode 100644 index ce2190a2a3..0000000000 --- a/jonas/modules/services/validation/hibernate-validation/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-validation - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-validation-hibernate - pom - JOnAS :: Services :: Validation :: Hibernate - Validator Service using Hibernate - - core - - diff --git a/jonas/modules/services/validation/pom.xml b/jonas/modules/services/validation/pom.xml deleted file mode 100644 index c00c3b3bbd..0000000000 --- a/jonas/modules/services/validation/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-validation - pom - JOnAS :: Services :: Validation (JSR 303) - Valadation Service - - - hibernate-validation - - - - - diff --git a/jonas/modules/services/versioning/core/pom.xml b/jonas/modules/services/versioning/core/pom.xml deleted file mode 100644 index a9052d88a4..0000000000 --- a/jonas/modules/services/versioning/core/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - jonas-versioning - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-versioning-core - bundle - JOnAS :: Services :: Versioning :: Core - - - - org.ow2.bundles - ow2-util-log - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-ee-deploy-impl - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBinding.java b/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBinding.java deleted file mode 100644 index 9a3b641ec1..0000000000 --- a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBinding.java +++ /dev/null @@ -1,410 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning.contexts; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.NameClassPair; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Handles virtual JNDI binding management. - * @author S. Ali Tokmen - */ -public class VirtualJNDIBinding implements VirtualJNDIBindingMBean { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(VirtualJNDIBinding.class); - - /** - * The JMX server. - */ - private static JmxService jmxService = null; - - /** - * Registry service. - */ - private static RegistryService registryService = null; - - /** - * Versioning service. - */ - private static VersioningService versioningService = null; - - /** - * All JNDI bindings. - */ - private static List bindings = new ArrayList(); - - /** - * Application name. - */ - private String applicationName = null; - - /** - * Management bean name for this virtual JNDI binding. - */ - private String mBeanName; - - /** - * Map of prefixes and associated policy. - */ - private Map policies = new HashMap(); - - /** - * Map of prefixes and associated list of beans. Note that the bean names - * don't include prefixes. - */ - private Map> beans = new HashMap>(); - - /** - * Saves static server information. - * - * @param jmx JMX service. - * @param registry Registry service. - * @param versioning Versioning service. - */ - public static void initialize(final JmxService jmx, final RegistryService registry, final VersioningService versioning) { - jmxService = jmx; - registryService = registry; - versioningService = versioning; - } - - /** - * Creates and registers a virtual JNDI binding. - * @param appName J2EE application name. - * @param prefix The first context prefix, will be mapped as default. - */ - protected VirtualJNDIBinding(String appName, final String prefix) { - if (appName == null) { - appName = "none"; - } - this.applicationName = appName; - // J2EEApplication=none since this virtual JNDI binding manager - // is shared between multiple J2EE applications - mBeanName = jmxService.getDomainName() + ":j2eeType=EJBModule,J2EEServer=" + jmxService.getJonasServerName() - + ",J2EEApplication=none,name=VirtualContainer-" + appName + ",virtualContext=true"; - logger.debug("New VirtualJNDIBinding: registering MBean with name : " + mBeanName); - jmxService.registerMBean(this, mBeanName); - addContext(prefix, VersioningServiceBase.DEFAULT); - bindings.add(this); - } - - /** - * Adds a JNDI prefix to this virtual JNDI naming manager using a policy. - * @param prefix Prefix instance to add. - * @param policy Prefix' policy. - * @throws IllegalArgumentException Policy is invalid. - */ - public void addContext(final String prefix, final String policy) throws IllegalArgumentException { - if (!VersioningServiceBase.DEFAULT.equals(policy) && !VersioningServiceBase.DISABLED.equals(policy) - && !VersioningServiceBase.RESERVED.equals(policy) && !VersioningServiceBase.PRIVATE.equals(policy)) { - throw new IllegalArgumentException("Invalid policy : " + policy); - } - - if (hasContext(prefix)) { - throw new IllegalArgumentException("JNDI prefix " + prefix + " already bound!"); - } - - List beans = new ArrayList(); - - try { - Context jndi = VirtualJNDIBinding.registryService.getRegistryContext(); - NamingEnumeration elements = jndi.list(""); - while (elements.hasMoreElements()) { - NameClassPair current = elements.nextElement(); - String name; - try { - name = current.getNameInNamespace(); - } catch (Exception e) { - name = current.getName(); - } - if (prefix.length() > 0 && name.contains(prefix)) { - name = name.replace(prefix, ""); - beans.add(name); - } - } - } catch (NamingException e) { - throw new IllegalStateException("Failed creating JNDI binding MBeans", e); - } - - this.beans.put(prefix, beans); - rebindContext(prefix, policy); - } - - /** - * Rebinds a prefix. - * @param prefix Prefix to rebind. - * @param policy New policy. - * @return true if succeeded, false otherwise. - * @throws IllegalArgumentException Policy is invalid. - */ - public boolean rebindContext(final String prefix, final String policy) throws IllegalArgumentException { - if (!VersioningServiceBase.DEFAULT.equals(policy) && !VersioningServiceBase.DISABLED.equals(policy) - && !VersioningServiceBase.RESERVED.equals(policy) && !VersioningServiceBase.PRIVATE.equals(policy)) { - throw new IllegalArgumentException("Invalid policy : " + policy); - } - - List beanNames = this.beans.get(prefix); - if (beanNames == null) { - return false; - } - - // If the prefix' old policy was DEFAULT or the new policy to apply is - // DEFAULT, we need to unbind the old DEFAULT - String oldDefault = null; - String oldPolicy = this.policies.get(prefix); - if (VersioningServiceBase.DEFAULT.equals(oldPolicy)) { - oldDefault = prefix; - } else if (VersioningServiceBase.DEFAULT.equals(policy)) { - for (Map.Entry entry : this.policies.entrySet()) { - if (entry.getValue().equals(VersioningServiceBase.DEFAULT)) { - oldDefault = entry.getKey(); - break; - } - } - } - if (oldDefault != null) { - for (String beanName : this.beans.get(oldDefault)) { - try { - Context jndi = VirtualJNDIBinding.registryService.getRegistryContext(); - jndi.unbind(beanName); - } catch (NamingException ignored) { - // Ignore - } - } - this.policies.put(oldDefault, VersioningServiceBase.DISABLED); - } - - this.policies.put(prefix, policy); - checkJNDIBindings(); - - return true; - } - - /** - * Checks whether a given prefix has been registered. - * @param prefix Prefix to check. - * @return true if found, false otherwise. - */ - public boolean hasContext(final String prefix) { - return (this.policies.containsKey(prefix) && this.beans.containsKey(prefix)); - } - - /** - * Removes a prefix, including all {@link VirtualJNDIBindingMBean#DEFAULT} - * bindings for this prefix. If no more JNDI prefixes left, will also remove - * the JNDI binding management bean. - * @param prefix Prefix to remove. - * @return true if succeeded, false otherwise. - */ - public boolean removePrefix(final String prefix) { - rebindContext(prefix, VersioningServiceBase.DISABLED); - this.policies.remove(prefix); - this.beans.remove(prefix); - if (this.beans.size() == 0 || this.policies.size() == 0) { - return removeVirtualContext(); - } - return true; - } - - /** - * Removes this virtual JNDI binding. - * @return true if succeeded, false otherwise. - */ - public boolean removeVirtualContext() { - List> prefixes = new ArrayList>(getContexts().entrySet()); - for (Map.Entry prefix : prefixes) { - rebindContext(prefix.getKey(), VersioningServiceBase.DISABLED); - this.policies.remove(prefix); - this.beans.remove(prefix); - } - try { - jmxService.unregisterMBean(ObjectName.getInstance(mBeanName)); - } catch (MalformedObjectNameException e) { - logger.error("Error unbinding Virtual JNDI Binding Manager " + mBeanName, e); - return false; - } - bindings.remove(this); - return true; - } - - /** - * Creates or adds into an existing binding a prefix. - * @param appName J2EE application name. - * @param prefix Prefix to add. - */ - public static void createJNDIBindingMBeans(final String appName, final String prefix) { - if (jmxService == null || versioningService == null || registryService == null) { - throw new IllegalStateException("Services not set: call VirtualJNDIBinding.initialize"); - } - - for (VirtualJNDIBinding binding : bindings) { - if (binding.applicationName.equals(appName)) { - binding.addContext(prefix, versioningService.getDefaultDeploymentPolicy()); - return; - } - } - new VirtualJNDIBinding(appName, prefix); - } - - /** - * Removes JNDI binding management beans that are not in the JNDI directory - * anymore. - */ - public static void garbageCollectJNDIBindingMBeans() { - if (jmxService == null || versioningService == null || registryService == null) { - throw new IllegalStateException("Services not set: call VirtualJNDIBinding.initialize"); - } - - List beansOnJNDI = new ArrayList(); - try { - Context jndi = VirtualJNDIBinding.registryService.getRegistryContext(); - NamingEnumeration elements = jndi.list(""); - while (elements.hasMoreElements()) { - NameClassPair current = elements.nextElement(); - beansOnJNDI.add(current.getName()); - } - } catch (NamingException e) { - throw new IllegalStateException("Failed garbage collecting JNDI binding MBeans", e); - } - - for (VirtualJNDIBinding binding : bindings.toArray(new VirtualJNDIBinding[bindings.size()])) { - gcJNDIBinding(binding, beansOnJNDI); - } - } - - /** - * Garbage-collects (if necessary) a virtual JNDI binding management bean. - * @param binding Virtual binding to check. - * @param beansOnJNDI List of JNDI beans to check against. - */ - private static void gcJNDIBinding(final VirtualJNDIBinding binding, final List beansOnJNDI) { - for (Map.Entry> beanList : binding.beans.entrySet()) { - for (String beanName : beanList.getValue()) { - if (!beansOnJNDI.contains(beanList.getKey() + beanName)) { - binding.removePrefix(beanList.getKey()); - binding.checkJNDIBindings(); - return; - } - } - } - } - - /** - * Checks that the default JNDI binding is still present. - */ - public void checkJNDIBindings() { - if (jmxService == null || versioningService == null || registryService == null) { - throw new IllegalStateException("Services not set: call VirtualJNDIBinding.initialize"); - } - - try { - for (Map.Entry entry : this.policies.entrySet()) { - if (entry.getValue().equals(VersioningServiceBase.DEFAULT)) { - Context jndi = VirtualJNDIBinding.registryService.getRegistryContext(); - for (String beanName : this.beans.get(entry.getKey())) { - // If we bind an alias, CAROL lookups fail. As a - // result, we lookup for the link (this way, the - // JNDI link is not "executed" -for example, - // stateful beans don't get instanciated) and bind - // it as the non-versioned name. - jndi.rebind(beanName, jndi.lookupLink(entry.getKey() + beanName)); - } - - return; - } - } - logger.warn("No " + VersioningServiceBase.DEFAULT + " JNDI binding present for application '" - + this.applicationName + "'. You need to set a version as default or expect lookup and unbind failures."); - } catch (NamingException e) { - throw new IllegalStateException("Failed checking default JNDI bindings", e); - } - } - - /** - * @return All prefixes with their policies for this virtual JNDI binding. - */ - public Map getContexts() { - Map result = new HashMap(this.policies.size()); - result.putAll(this.policies); - return result; - } - - /** - * @return All JNDI names managed by this virtual JNDI binding grouped by - * prefix. - */ - public Map> getNames() { - Map> result = new HashMap>(this.beans.size()); - for (Map.Entry> bean : this.beans.entrySet()) { - List beanNames = new ArrayList(bean.getValue().size()); - for (String beanName : bean.getValue()) { - beanNames.add(beanName); - } - result.put(bean.getKey(), beanNames); - } - return result; - } - - /** - * @return Unique URL for this application. - */ - public URL geturl() { - try { - return new URL("file:///dev/null/VirtualEJBContainer-" + applicationName); - } catch (MalformedURLException e) { - throw new IllegalStateException("Cannot create URL", e); - } - } - - /** - * @return new String[0]. - */ - public String[] getejbs() { - return new String[0]; - } -} diff --git a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBindingMBean.java b/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBindingMBean.java deleted file mode 100644 index d24a9ef112..0000000000 --- a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/contexts/VirtualJNDIBindingMBean.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning.contexts; - -import java.net.URL; -import java.util.List; -import java.util.Map; - -import org.ow2.jonas.versioning.VirtualContextJMXInterface; - -/** - * Defines JMX methods for virtual JNDI binding management for one application. - * This interface also includes all methods called by the JOnAS administration - * Web panel when listing EJB modules. - * @author S. Ali Tokmen - */ -public interface VirtualJNDIBindingMBean extends VirtualContextJMXInterface { - /** - * @return All JNDI names managed by this virtual JNDI binding grouped by - * prefix. - */ - Map> getNames(); - - /** - * @return Unique URL for this application. - */ - URL geturl(); - - /** - * @return new String[0]. - */ - String[] getejbs(); -} diff --git a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImpl.java b/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImpl.java deleted file mode 100644 index e5d5531e42..0000000000 --- a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImpl.java +++ /dev/null @@ -1,446 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning.internal; - -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; -import java.util.jar.Attributes; - -import javax.management.ObjectName; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.registry.RegistryService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.versioning.VersioningServiceBase; -import org.ow2.jonas.versioning.contexts.VirtualJNDIBinding; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * Implements the versioning service. - * @see org.ow2.jonas.versioning.VersioningService - * - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VersioningServiceImpl extends AbsServiceImpl implements VersioningService, VersioningServiceImplMBean { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(VersioningServiceImpl.class); - - /** - * Whether versioning is enabled. - */ - private boolean versioningEnabled = true; - - /** - * Default deployment policy to use when deploying a new version of a - * versioned application, can be changed via JMX. - */ - private String defaultPolicy = "Reserved"; - - /** - * The filtered content types, each type is another element of the - * returned array. - */ - private String[] filteredContentTypes = new String[0]; - - /** - * Registry service. - */ - private RegistryService registryService = null; - - /** - * @param registryService Registry service to set. - */ - public void setRegistryService(final RegistryService registryService) { - this.registryService = registryService; - } - - /** - * Reference to an MBean server. - */ - private JmxService jmxService = null; - - /** - * @param jmxService JMX service to set. - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param domainName Server's domain name. - * @return JMX name of the versioning service management bean. - */ - public static ObjectName getObjectName(final String domainName) { - try { - return ObjectName.getInstance(domainName + ":type=service,name=versioning"); - } catch (Exception e) { - throw new IllegalStateException("Cannot get versioning service", e); - } - } - - /** - * Registers the management bean with JMX. - */ - @Override - protected void doStart() { - VirtualJNDIBinding.initialize(jmxService, registryService, this); - jmxService.registerMBean(this, getObjectName(getDomainName())); - logger.info("Versioning service management bean has been registered successfully"); - } - - /** - * Unregisters the management bean from JMX. - */ - @Override - protected void doStop() { - jmxService.unregisterMBean(getObjectName(getDomainName())); - logger.info("Versioning service management bean has been unregistered successfully"); - } - - /** - * @return Possible policies. - */ - public String[] getPolicies() { - return VersioningServiceBase.POLICIES; - } - - /** - * @return Whether versioning is started and enabled. - */ - public boolean isVersioningEnabled() { - return isStarted() && versioningEnabled; - } - - /** - * @param versioningEnabled Whether versioning is enabled. - */ - public void setVersioningEnabled(final boolean versioningEnabled) { - this.versioningEnabled = versioningEnabled; - } - - /** - * @return Default policy, as set via JMX. - */ - public String getDefaultDeploymentPolicy() { - return defaultPolicy; - } - - /** - * @param defaultPolicy Default deployment policy to set. - */ - public void setDefaultDeploymentPolicy(final String defaultPolicy) { - if (!VersioningServiceBase.DEFAULT.equals(defaultPolicy) && !VersioningServiceBase.DISABLED.equals(defaultPolicy) - && !VersioningServiceBase.RESERVED.equals(defaultPolicy) - && !VersioningServiceBase.PRIVATE.equals(defaultPolicy)) { - throw new IllegalArgumentException("Invalid policy : " + defaultPolicy); - } - - this.defaultPolicy = defaultPolicy; - } - - /** - * @return The filtered content types. Each type is separated with a comma. - */ - public String getFilteredContentTypes() { - if (filteredContentTypes == null || filteredContentTypes.length == 0) { - return ""; - } else { - StringBuilder sb = new StringBuilder(filteredContentTypes[0]); - for (int i = 1; i < filteredContentTypes.length; i++) { - sb.append(','); - sb.append(filteredContentTypes[i]); - } - return sb.toString(); - } - } - - /** - * @param filteredContentTypes The filtered content types to set. Each type - * must be separated with a comma, any spacing character between - * each type is omitted. - */ - public void setFilteredContentTypes(final String filteredContentTypes) { - if (filteredContentTypes == null || filteredContentTypes.length() == 0) { - this.filteredContentTypes = new String[0]; - } else { - List filteredContentTypesList = new ArrayList(); - StringTokenizer tokenizer = new StringTokenizer(filteredContentTypes, ","); - while (tokenizer.hasMoreTokens()) { - String filteredContentType = tokenizer.nextToken(); - filteredContentType = filteredContentType.trim(); - filteredContentTypesList.add(filteredContentType); - } - String[] filteredContentTypesArray = new String[filteredContentTypesList.size()]; - filteredContentTypesArray = filteredContentTypesList.toArray(filteredContentTypesArray); - this.filteredContentTypes = filteredContentTypesArray; - } - } - - /** - * @return The filtered content types, each type is another element of the - * returned array. DO NOT MODIFY THE RETURNED ARRAY !! - */ - public String[] getFilteredContentTypesArray() { - return filteredContentTypes; - } - - /** - * @param file JAR, WAR or EAR file to read the version number from. - * @return Version number of file, null if none found. - */ - public String getVersionNumber(final File file) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - IDeployable deployable = DeployableHelper.getDeployable(archive); - return getVersionNumber(deployable); - } catch (DeployableHelperException e) { - logger.info("Failed creating deployable for file ''{0}''", file, e); - return null; - } - } - - /** - * @param url JAR, WAR or EAR file to read the version number from. - * @return Version number of url, null if none found. - */ - public String getVersionNumber(final URL url) { - return getVersionNumber(URLUtils.urlToFile(url)); - } - - /** - * @param deployable JAR, WAR or EAR object to read the version number from. - * @return Version number of deployable, null if none found. - */ - public String getVersionNumber(final IDeployable deployable) { - IDeployable originalDeployable = getOriginalDeployable(deployable); - String versionNumber = originalDeployable.getArchive().getMetadata().get(Attributes.Name.IMPLEMENTATION_VERSION.toString()); - return versionNumber; - } - - /** - * @param file JAR, WAR or EAR file to read the version ID from. - * @return Version ID of file, null if none found. - */ - public String getVersionID(final File file) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - IDeployable deployable = DeployableHelper.getDeployable(archive); - return getVersionID(deployable); - } catch (DeployableHelperException e) { - logger.info("Failed creating deployable for file ''{0}''", file, e); - return null; - } - } - - /** - * @param url JAR, WAR or EAR file to read the version ID from. - * @return Version ID of url, null if none found. - */ - public String getVersionID(final URL url) { - return getVersionID(URLUtils.urlToFile(url)); - } - - /** - * @param deployable JAR, WAR or EAR object to read the version ID from. - * @return Version ID of deployable, null if none found. - */ - public String getVersionID(final IDeployable deployable) { - IDeployable originalDeployable = getOriginalDeployable(deployable); - String versionID = getVersionNumber(originalDeployable); - if (versionID != null) { - // Do it like Maven2: artifact-version.extension - versionID = "-" + filterIdentifier(versionID, "version ID", originalDeployable.getArchive().getName()); - } - return versionID; - } - - /** - * @param file JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for file, null if none found. - */ - public String getPrefix(final File file) { - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - IDeployable deployable = DeployableHelper.getDeployable(archive); - return getPrefix(deployable); - } catch (DeployableHelperException e) { - logger.info("Failed creating deployable for file ''{0}''", file, e); - return null; - } - } - - /** - * @param url JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for url, null if none found. - */ - public String getPrefix(final URL url) { - return getPrefix(URLUtils.urlToFile(url)); - } - - /** - * @param deployable JAR or EAR object to create a JNDI prefix from. - * @return JNDI prefix for deployable, null if none found. - */ - public String getPrefix(final IDeployable deployable) { - IDeployable originalDeployable = getOriginalDeployable(deployable); - - String version = originalDeployable.getArchive().getMetadata().get(Attributes.Name.IMPLEMENTATION_VERSION.toString()); - String versionID = getVersionID(originalDeployable); - if (version == null || versionID == null) { - return null; - } - - String applicationName = originalDeployable.getModuleName(); - String prefix = applicationName; - if (applicationName.endsWith(versionID)) { - // Nothing to do in this case - } else if (applicationName.endsWith("-" + version)) { - // Prefix contains the version with a "-", but not the version ID; replace - prefix = prefix.replace("-" + version, versionID); - } else if (applicationName.endsWith(version)) { - // Prefix contains the version, but not the version ID; replace - prefix = prefix.replace(version, versionID); - } else { - // Prefix doesn't contain any version info - prefix += versionID; - } - - return filterIdentifier(prefix, "JNDI prefix", applicationName) + '/'; - } - - /** - * @param deployable Deployable to get the original deployable from - * (recursive). - * @return Original deployable. - */ - private IDeployable getOriginalDeployable(final IDeployable deployable) { - IDeployable originalDeployable = deployable; - while (originalDeployable.getOriginalDeployable() != null) { - originalDeployable = originalDeployable.getOriginalDeployable(); - } - return originalDeployable; - } - - /** - * @param identifier Identifier to filter. - * @param type Type of identifier, will be used when warning. - * @param file File name of archive. - * @return Filtered identifier, for the list of filtered characters see - * {@link VersioningService#ALLOWED_SPECIAL_CHARS}. - */ - private String filterIdentifier(final String identifier, final String type, final String file) { - boolean identifierFiltered = false; - StringBuffer identifierFilter = new StringBuffer(); - for (char c : identifier.toCharArray()) { - if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') - || VersioningService.ALLOWED_SPECIAL_CHARS.indexOf(c) >= 0) { - identifierFilter.append(c); - } else { - identifierFiltered = true; - identifierFilter.append('-'); - } - } - if (identifierFiltered) { - String filteredIdentifier = identifierFilter.toString(); - logger.debug("Invalid characters detected in {0} for archive {1}, setting {0} to {2}", - type, file, filteredIdentifier); - return filteredIdentifier; - } else { - return identifier; - } - } - - /** - * Creates JNDI binding management beans for a given archive. - * @param deployable JAR, WAR or EAR object to read the JNDI prefix from. - */ - public void createJNDIBindingMBeans(final IDeployable deployable) { - IDeployable originalDeployable = getOriginalDeployable(deployable); - - String versionID = getVersionID(originalDeployable); - if (versionID == null) { - logger.warn("IDeployable {0} is not versioned! Ignoring call to createJNDIBindingMBeans", - deployable.toString()); - return; - } - - String applicationName = originalDeployable.getModuleName(); - if (applicationName.endsWith(versionID)) { - applicationName = applicationName.replace(versionID, ""); - } - String prefix = getPrefix(originalDeployable); - - VirtualJNDIBinding.createJNDIBindingMBeans(applicationName, prefix); - } - - /** - * Removes JNDI binding management beans that are not in the JNDI directory - * anymore. - */ - public void garbageCollectJNDIBindingMBeans() { - VirtualJNDIBinding.garbageCollectJNDIBindingMBeans(); - } - - /** - * @param url JAR, WAR or EAR object to get the base name for. The base name - * is used when creating the JNDI naming prefix. - * @return Base name for URL, null if none found. - */ - public String getBaseName(final URL url) { - File file = URLUtils.urlToFile(url); - try { - IArchive archive = ArchiveManager.getInstance().getArchive(file); - IDeployable originalDeployable = getOriginalDeployable(DeployableHelper.getDeployable(archive)); - String moduleName = originalDeployable.getModuleName(); - String versionID = getVersionID(originalDeployable); - if (versionID != null) { - moduleName = moduleName.replace(versionID, ""); - } - return moduleName; - } catch (DeployableHelperException e) { - logger.info("Failed creating deployable for file {0}", file, e); - return null; - } - } -} diff --git a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImplMBean.java b/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImplMBean.java deleted file mode 100644 index f3c6f92c42..0000000000 --- a/jonas/modules/services/versioning/core/src/main/java/org/ow2/jonas/versioning/internal/VersioningServiceImplMBean.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.versioning.internal; - -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Management bean interface for the versioning service. This interface - * inherits from the versioning service's JMX interface and doesn't add any - * method to it, its name guarantees that the JMX server will automatically - * deploy it with the good bindings. - * - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VersioningServiceImplMBean extends VersioningServiceBase { - // This interface should be empty. -} diff --git a/jonas/modules/services/versioning/core/src/main/resources/META-INF/jonas-versioning-core.bnd b/jonas/modules/services/versioning/core/src/main/resources/META-INF/jonas-versioning-core.bnd deleted file mode 100644 index 813179c35c..0000000000 --- a/jonas/modules/services/versioning/core/src/main/resources/META-INF/jonas-versioning-core.bnd +++ /dev/null @@ -1,27 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.versioning - -Private-Package org.ow2.jonas.versioning.internal, \ - org.ow2.jonas.versioning.contexts diff --git a/jonas/modules/services/versioning/core/src/main/resources/metadata.xml b/jonas/modules/services/versioning/core/src/main/resources/metadata.xml deleted file mode 100644 index 308dbdee5b..0000000000 --- a/jonas/modules/services/versioning/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/versioning/core/src/main/templates/jonas-versioning.properties.template b/jonas/modules/services/versioning/core/src/main/templates/jonas-versioning.properties.template deleted file mode 100644 index e3ce9a9fba..0000000000 --- a/jonas/modules/services/versioning/core/src/main/templates/jonas-versioning.properties.template +++ /dev/null @@ -1,15 +0,0 @@ -# -###################### JOnAS Versioning service configuration -# -jonas.services versioning -# Set the name of the implementation class of the versioning service. -jonas.service.versioning.class org.ow2.jonas.versioning.internal.VersioningServiceImpl - -# Content types to filter. Set this list to empty for the versioning -# service not to filter any content in Web responses. -jonas.service.versioning.filteredContentTypes text/html, \ - application/javascript, \ - text/javascript, \ - text/css, \ - text/xml - diff --git a/jonas/modules/services/versioning/pom.xml b/jonas/modules/services/versioning/pom.xml deleted file mode 100644 index 8962f7a23b..0000000000 --- a/jonas/modules/services/versioning/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-versioning - JOnAS :: Services :: Versioning - - core - - pom - diff --git a/jonas/modules/services/web-container/base/ant/pom.xml b/jonas/modules/services/web-container/base/ant/pom.xml deleted file mode 100644 index c6f312e396..0000000000 --- a/jonas/modules/services/web-container/base/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-web-container-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-base-ant - bundle - JOnAS :: Services :: Web Container :: Base :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Ajp.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Ajp.java deleted file mode 100644 index 87c2660082..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Ajp.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Support for AJP Connector Configuration. Tomcat only. - * - * - * @author Guillaume Sauthier - */ -public class Ajp { - - /** - * Default AJP Port. - */ - private static final String DEFAULT_AJP_PORT = "8009"; - - /** - * user specified port value. - */ - private String port = DEFAULT_AJP_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } - -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Cluster.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Cluster.java deleted file mode 100644 index ee79a778d8..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Cluster.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Support for HTTP Session Clustering. Tomcat only. - * - * @author Guillaume Sauthier - */ -@Deprecated -public class Cluster extends SessionReplication { - - -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Connectors.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Connectors.java deleted file mode 100644 index b9ca12bfd9..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Connectors.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.Tasks; - -/** - * Configure a Connectors - * @author Jeremy Cazaux - */ -public abstract class Connectors extends AbstractJOnASBaseAntTask { - - protected void addConfiguredHttp(final Http http, final String confFile, final String info) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(Http.DEFAULT_PORT); - propertyReplace.setValue(http.getPort()); - propertyReplace.setLogInfo(info + "Setting HTTP port number to : " + http.getPort()); - addTask(propertyReplace); - } - - // public abstract void addConfiguredHttp(final Http http); -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Director.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Director.java deleted file mode 100644 index cac1266c20..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Director.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Support for Director Connector Configuration. Tomcat only. - * - * @author Guillaume Sauthier - */ -public class Director { - - /** - * Default Director Port. - */ - private static final String DEFAULT_DIRECTOR_PORT = "9999"; - - /** - * user specified port value. - */ - private String port = DEFAULT_DIRECTOR_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } - -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Http.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Http.java deleted file mode 100644 index fc821ebb95..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Http.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Configure an HTTP Connector for Tomcat/Jetty. - * - * - * @author Guillaume Sauthier - */ -public class Http { - - /** - * Default HTTP Port. - */ - public static final String DEFAULT_PORT = "9000"; - - /** - * user specified port value. - */ - protected String port = DEFAULT_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Https.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Https.java deleted file mode 100644 index 9980a8794e..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/Https.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Configure an HTTPS Connector for Tomcat/Jetty. - * - * @author Guillaume Sauthier - */ -public class Https { - - /** - * Default HTTPS Port. - */ - public static final String DEFAULT_PORT = "9043"; - - /** - * user specified port value. - */ - private String port = DEFAULT_PORT; - - /** - * keystore filename. - */ - private String keystoreFile = null; - - /** - * keystore password. - */ - private String keystorePass = null; - - /** - * @return Returns the keystore. - */ - public String getKeystoreFile() { - return keystoreFile; - } - - /** - * @param keystore The keystore to set. - */ - public void setKeystoreFile(final String keystore) { - this.keystoreFile = keystore; - } - - /** - * @return Returns the password. - */ - public String getKeystorePass() { - return keystorePass; - } - - /** - * @param password The password to set. - */ - public void setKeystorePass(final String password) { - this.keystorePass = password; - } - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplication.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplication.java deleted file mode 100644 index d3098e8f3c..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplication.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Support for HTTP Session Clustering. Tomcat only. - * - * @author Guillaume Sauthier - */ -public class SessionReplication { - - /** - * Default MultiCast Host for HTTP Session Clustering. - */ - public static final String DEFAULT_MCAST_ADDR = "228.0.0.4"; - - /** - * Default MultiCast Port for HTTP Session Clustering. - */ - public static final String DEFAULT_MCAST_PORT = "45564"; - - /** - * Default listening port for HTTP Session Clustering. - */ - public static final String DEFAULT_LISTEN_PORT = "4001"; - - /** - * Default cluster name. - */ - public static final String DEFAULT_CLUSTER_NAME = "myTomcatCluster"; - - /** - * User specified Cluster listening port. - */ - private String listenPort = DEFAULT_LISTEN_PORT; - - /** - * User specified MultiCast port. - */ - private String mcastPort = DEFAULT_MCAST_PORT; - - /** - * User specified MultiCast address. - */ - private String mcastAddr = DEFAULT_MCAST_ADDR; - - /** - * Cluster name. - */ - private String name = DEFAULT_CLUSTER_NAME; - - /** - * Clustering algo (delta or backup) - */ - private SessionReplicationAlgorithm algorithm; - - /** - * Default constructor - */ - public SessionReplication() { - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The cluster name. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @param algorithm The algorithm of the session replication - */ - public void setAlgorithm(final String algorithm) { - if ("backup".equals(algorithm)) { - this.algorithm = SessionReplicationAlgorithm.BACKUP_MANAGER; - } else if ("delta".equals(algorithm)) { - this.algorithm = SessionReplicationAlgorithm.DELTA_MANAGER; - } - } - - /** - * @return {@link SessionReplicationAlgorithm} - */ - public SessionReplicationAlgorithm getAlgorithm() { - if (this.algorithm == null) { - return SessionReplicationAlgorithm.DELTA_MANAGER; - } else { - return this.algorithm; - } - } - - /** - * @return Returns the listenPort. - */ - public String getListenPort() { - return listenPort; - } - - /** - * @param listenPort The listenPort to set. - */ - public void setListenPort(final String listenPort) { - this.listenPort = listenPort; - } - - /** - * @return Returns the mcastAddr. - */ - public String getMcastAddr() { - return mcastAddr; - } - - /** - * @param mcastAddr The mcastAddr to set. - */ - public void setMcastAddr(final String mcastAddr) { - this.mcastAddr = mcastAddr; - } - - /** - * @return Returns the mcastPort. - */ - public String getMcastPort() { - return mcastPort; - } - - /** - * @param mcastPort The mcastPort to set. - */ - public void setMcastPort(final String mcastPort) { - this.mcastPort = mcastPort; - } -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplicationAlgorithm.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplicationAlgorithm.java deleted file mode 100644 index 7b5518a3b5..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/SessionReplicationAlgorithm.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -/** - * Session manager of a http replication - */ -public enum SessionReplicationAlgorithm { - DELTA_MANAGER, BACKUP_MANAGER -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/WebContainer.java b/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/WebContainer.java deleted file mode 100644 index 28493af1d4..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/java/org/ow2/jonas/antmodular/web/base/WebContainer.java +++ /dev/null @@ -1,190 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.web.base; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - - -/** - * Allow to configure the WebContainer service. - * - * @author Florent Benoit - */ -public abstract class WebContainer extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[WebContainer] "; - - /** - * Default HTTP Port. - */ - public static final String DEFAULT_PORT = "9000"; - - /** - * ondemand.enabled property. - */ - private static final String ONDEMANDENABLED = "jonas.service.web.ondemand.enabled"; - - /** - * ondemand.enabled property token default value. - */ - private static final String ONDEMANDENABLEDTOKEN = "jonas.service.web.ondemand.enabled true"; - - /** - * ejbinwar property. - */ - private static final String EJB_IN_WAR_PROPERTY = "jonas.service.web.ejbinwar"; - - /** - * ejbinwar property token default value. - */ - private static final String EJB_IN_WAR_TOKEN = EJB_IN_WAR_PROPERTY.concat(" true"); - - /** - * ondemand.redirectPort property. - */ - private static final String ONDEMANDREDIRECTPORT = "jonas.service.web.ondemand.redirectPort"; - - /** - * ondemand.redirectPort property token default value - */ - private static final String ONDEMANDREDIRECTPORTTOKEN = "jonas.service.web.ondemand.redirectPort 0"; - - /** - * Name of the implementation class property - */ - private static final String CLASS_PROPERTY = "jonas.service.web.class"; - - /** - * Default constructor. - */ - public WebContainer() { - super(); - } - - /** - * Set the value of the jonas.service.web.ondemand.enabled property in jonas.properties. - * - * @param ondemandenabled ondemand.enabled property - */ - public void setOndemandenabled(final String ondemandenabled) { - // Ondemandenabled Token to replace - String token = ONDEMANDENABLEDTOKEN; - String value = ONDEMANDENABLED + " " + ondemandenabled; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - propertyReplace.setLogInfo(INFO + "Setting "+ ONDEMANDENABLED+" to "+ondemandenabled); - - addTask(propertyReplace); - } - - /** - * Set the value of the jonas.service.web.ejbinwar property in jonas.properties. - * - * @param ejbInWar ejbInWar property - */ - public void setEjbInWar(final String ejbInWar) { - // Ondemandenabled Token to replace - String token = EJB_IN_WAR_TOKEN; - String value = EJB_IN_WAR_PROPERTY.concat(" ").concat(ejbInWar); - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - propertyReplace.setLogInfo(INFO + "Setting " + EJB_IN_WAR_PROPERTY + " to " + ejbInWar); - - addTask(propertyReplace); - } - - /** - * Set the value of the jonas.service.web.ondemand.redirectPort property in jonas.properties. - * - * @param portNumber ondemand redirect port - */ - public void setOndemandredirectPort(final String portNumber) { - // OndemanderedirectPort Token to replace - String token = ONDEMANDREDIRECTPORTTOKEN; - String value = ONDEMANDREDIRECTPORT+ " " + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - propertyReplace.setLogInfo(this.INFO + "Setting "+ ONDEMANDREDIRECTPORT +" to "+portNumber); - - addTask(propertyReplace); - } - - - /** - * Create a JReplace Task for changing service classname in jonas.properties. - * - * @param serviceName service classname to use. - * @return Returns a JReplace Task. - */ - protected JTask createServiceNameReplace(final String serviceName, final String info, final String confDir) { - return super.createServiceNameReplace(serviceName, info, confDir, CLASS_PROPERTY); - } - - /** - * Set the port number for the WebContainer. - * Optionnal, if missing, we look at the inner element <jetty>/<http> or <tomcat>/<http>. - * It overrides both <jetty>/<http> or <tomcat>/<http> values if set. - * - * @param portNumber the port for the HTTP web Container - * @param confFile the name of the configuration file of the web container - * @param name the name of the web container - */ - @Deprecated - protected void setPort(String portNumber, String confFile, String name) { - //To change body of implemented methods use File | Settings | File Templates. - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting " + name + " port number to : " + portNumber); - addTask(propertyReplace); - } - - /** - * Set the port number for the WebContainer - * @param portNumber the port number - */ - public abstract void setPort(String portNumber); - - /** - * Execute the task - */ - public void execute() { - super.execute(); - executeAllTask(); - } -} diff --git a/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.properties.template b/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.properties.template deleted file mode 100644 index fe891dfb32..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.properties.template +++ /dev/null @@ -1,7 +0,0 @@ -#Web -http.port=9000 -https.port=9013 -ajp.port=9009 -%webcontainer.service.defaultname% -webcontainer.ondemandenabled=true -webcontainer.ondemanderedirectport=0 \ No newline at end of file diff --git a/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.xml b/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.xml deleted file mode 100644 index 1646a6578d..0000000000 --- a/jonas/modules/services/web-container/base/ant/src/main/resources/build-webcontainer.xml +++ /dev/null @@ -1,12 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/base/core/pom.xml b/jonas/modules/services/web-container/base/core/pom.xml deleted file mode 100644 index 1f10f4c437..0000000000 --- a/jonas/modules/services/web-container/base/core/pom.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - jonas-web-container-base - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-base-core - bundle - JOnAS :: Services :: Web Container :: Base :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - provided - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - provided - - - org.ow2.jonas - jonas-security-propagation - ${project.version} - - - org.ow2.jonas - jonas-security-auth - ${project.version} - - - org.ow2.jonas - jonas-security-jacc-handlers - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - ${project.version} - - - org.apache.tomcat - servlet-api - - - org.ow2.bundles - ow2-util-url - - - org.ow2.bundles - ow2-util-ee-deploy-api - - - - org.ow2.easybeans - easybeans-api - ${easybeans.version} - - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - web-base - - - org.osgi - org.osgi.compendium - ${osgi.compendium.version} - - - org.ow2.jonas - jonas-web-container-base-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerService.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerService.java deleted file mode 100644 index 147b7e4d89..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerService.java +++ /dev/null @@ -1,3054 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.ServerSocket; -import java.net.URL; -import java.net.URLClassLoader; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Vector; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.LinkRef; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.PersistenceContextType; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.http.HttpService; -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.EZBContainerException; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.easybeans.persistence.api.EZBPersistenceUnitManager; -import org.ow2.easybeans.resolver.api.EZBApplicationJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBJNDIResolver; -import org.ow2.easybeans.resolver.api.EZBJNDIResolverException; -import org.ow2.jonas.Version; -import org.ow2.jonas.audit.AuditService; -import org.ow2.jonas.datasource.DataSourceService; -import org.ow2.jonas.deployment.api.IEJBLocalRefDesc; -import org.ow2.jonas.deployment.api.IEJBRefDesc; -import org.ow2.jonas.deployment.api.IEnvEntryDesc; -import org.ow2.jonas.deployment.api.IMessageDestinationRefDesc; -import org.ow2.jonas.deployment.api.IResourceEnvRefDesc; -import org.ow2.jonas.deployment.api.IResourceRefDesc; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.deployment.web.lib.WarDeployableMetadataFactoryHolder; -import org.ow2.jonas.deployment.web.lib.WebDeploymentDescManager; -import org.ow2.jonas.ejb3.IEasyBeansService; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.jsf.JSFService; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.loader.SimpleWebappClassLoader; -import org.ow2.jonas.lib.loader.WebappClassLoader; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.security.PermissionManagerException; -import org.ow2.jonas.lib.service.AbsConfigServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.work.DeployerLog; -import org.ow2.jonas.multitenant.MultitenantService; -import org.ow2.jonas.naming.JComponentContextFactory; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory; -import org.ow2.jonas.web.base.osgi.httpservice.JOnASHttpService; -import org.ow2.jonas.web.base.proxy.HttpOnDemandProxy; -import org.ow2.jonas.web.base.proxy.HttpOnDemandProxyException; -import org.ow2.jonas.workcleaner.CleanTask; -import org.ow2.jonas.workcleaner.DeployerLogException; -import org.ow2.jonas.workcleaner.WorkCleanerService; -import org.ow2.jonas.ws.jaxrpc.IJAXRPCService; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.api.deployer.IDeployerManager; -import org.ow2.util.ee.deploy.api.helper.DeployableHelperException; -import org.ow2.util.ee.deploy.api.helper.IDeployableHelper; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.ee.metadata.common.api.enc.IENCBinding; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -import org.ow2.util.ee.metadata.common.api.struct.IJAnnotationResource; -import org.ow2.util.ee.metadata.common.api.struct.IJAnnotationSqlDataSourceDefinition; -import org.ow2.util.ee.metadata.common.api.struct.IJEjbEJB; -import org.ow2.util.ee.metadata.common.api.struct.IJavaxPersistenceContext; -import org.ow2.util.ee.metadata.common.api.struct.IJavaxPersistenceUnit; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.war.api.IWarDeployableMetadataFactory; -import org.ow2.util.file.FileUtils; -import org.ow2.util.file.FileUtilsException; -import org.ow2.util.url.URLUtils; - -import static org.ow2.jonas.ws.jaxws.IJAXWSService.KEY_WEB_SERVICES_METADATAS; - -/** - * This abstract class provides an implementation for a dynamic - * JWebContainerService service. - * @author Florent Benoit - * @author Ludovic Bert (J2EE 1.3) - * @author Nicolas Van Caneghem (exploded ear) - * @author Michel-Ange Anton (contributor) - * @author S. Ali Tokmen (versioning) - * @author Mohammed Boukada (multitenant) - */ -public abstract class BaseWebContainerService extends AbsConfigServiceImpl implements JWebContainerService, - BaseWebContainerServiceMBean { - - /** - * The name of the JONAS_BASE directory. - */ - protected static final String JONAS_BASE = JProp.getJonasBase(); - - /** - * The name of the property used in work directory for single webapps (not - * ear case). - */ - protected static final String SINGLE_WORK_WEBAPPS_DIR_SUFFIX = "single"; - - /** - * The name of the property used in work directory for EAR webapps (in ear - * case). - */ - protected static final String INEAR_WORK_WEBAPPS_DIR_SUFFIX = "ear"; - - /** - * Length of the extension .war. - */ - private static final int WAR_EXTENSION_LENGTH = ".war".length(); - - /** - * Logger for this service. - */ - private static Logger logger = Log.getLogger(Log.JONAS_WEB_PREFIX); - - /** - * Reference on the NamingManager. - */ - private JNamingManager naming; - - /** - * War deployer. - */ - private WARDeployer warDeployer = null; - - /** - * Reference on the ComponentContextFactory. - */ - private JComponentContextFactory contextFactory; - - /** - * Associates an URL of an unpacked WAR file to its classloader. - */ - private Hashtable warLoaders = new Hashtable(); - - /** - * Associates an URL of a deployed WAR file to its classloader. - */ - private Hashtable warBindings = new Hashtable(); - - /** - * JMX Service. - */ - protected JmxService jmxService = null; - - /** - * Data Source Service. - */ - private DataSourceService dataSourceService = null; - - /** - * JSF Service. - */ - protected JSFService jsfService = null; - - /** - * List of the war deployed by the Web container Service. - */ - private List warDeployed = new Vector(); - - /** - * Map of the unpacked WARs. - */ - private Map unpackedWARs = new HashMap(); - - /** - * Name of the server (Tomcat, Jetty, ...). - */ - private String serverName = null; - - /** - * Version of the web container. - */ - private String serverVersion = null; - - /** - * Reference to the JAX-RPC service. - */ - private IJAXRPCService jaxrpcService = null; - - /** - * External Classloader. - */ - private ClassLoader extClassLoader; - - /** - * DeployerManager service. - */ - private IDeployerManager deployerManager; - - /** - * Versioning service. - */ - private VersioningService versioningService; - - /** - * Multitenant service. - */ - private MultitenantService multitenantService; - - /** - * Working directory for applications. - */ - private File workSingleWebAppsFile = null; - - /** - * Reference to the {@link DeployerLog} of the Web Container service. - */ - private DeployerLog deployerLog; - - /** - * Reference to the JAXWS Service. - */ - private IJAXWSService jaxwsService; - - /** - * EasyBeans service. - */ - private IEasyBeansService ejb3Service = null; - - /** - * Audit service. - */ - private AuditService auditService; - - /** - * On demand feature enabled ? - */ - private boolean onDemandFeatureEnabled = false; - - /** - * Link to the OnDemandProxy. - */ - private HttpOnDemandProxy onDemandProxy = null; - - /** - * Given port used for redirecting the requests (OnDemand proxy). This port - * will be used to launch the internal web container (tomcat, jetty, etc) - */ - private int onDemandRedirectPort = 0; - - /** - * If true, enable EJB in WAR feature. - */ - private boolean ejbinwar = true; - - /** - * Service BundleContext. - */ - private BundleContext bundleContext; - - /** - * {@link HttpService} factory registration key. - */ - private ServiceRegistration osgiHttpService; - - /** - * TLD resources that may be added later. - */ - private List tldResources = null; - - /** - * DeployableHelper - */ - private IDeployableHelper deployableHelper = null; - - /** - * Default constructor. - * @param bundleContext the OSGi bundle context - */ - public BaseWebContainerService(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - this.warDeployer = new WARDeployer(); - this.onDemandProxy = new HttpOnDemandProxy(); - this.tldResources = new ArrayList(); - } - - /** - * @param validate must we parse web.xml files with validation ? - */ - public void setParsingwithvalidation(final boolean validate) { - WebDeploymentDescManager.setParsingWithValidation(validate); - if (logger.isLoggable(BasicLevel.DEBUG)) { - if (!validate) { - logger.log(BasicLevel.DEBUG, "Web XML parsing without validation"); - } else { - logger.log(BasicLevel.DEBUG, "Web XML parsing with validation"); - } - } - } - - /** - * Start the service. - * @throws ServiceException if the startup failed. - */ - @Override - protected void doStart() throws ServiceException { - initWorkingDirectory(); - - // get apps ClassLoader - try { - LoaderManager lm = LoaderManager.getInstance(); - extClassLoader = lm.getExternalLoader(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot get the Applications ClassLoader from Web Container Service: ", e); - throw new ServiceException("Cannot get the Applications ClassLoader from Web Container Service", e); - } - - if (onDemandFeatureEnabled && !getServerProperties().isDevelopment()) { - logger.log(BasicLevel.INFO, "The OnDemand feature is disabled in production mode"); - onDemandFeatureEnabled = false; - } - - String httpPort = getDefaultHttpPort(); - // Callback - if (httpPort != null) { - setDefaultHttpPort(Integer.parseInt(httpPort)); - } - - // Register the OSGi HttpService - Dictionary httpServiceDictionary = new Hashtable(); - httpServiceDictionary.put(Constants.SERVICE_PID, JOnASHttpService.class.getName()); - if (httpPort != null) { - httpServiceDictionary.put("org.osgi.service.http.port", httpPort); - } - HttpServiceFactory httpServiceFactory = createHttpServiceFactory(); - - // If there is a factory, register it as the OSGi http service - if (httpServiceFactory != null) { - httpServiceFactory.setWorkDirectory(getServerProperties().getWorkDirectory()); - osgiHttpService = bundleContext.registerService(HttpService.class.getName(), httpServiceFactory, - httpServiceDictionary); - } - - // Init the deployer - warDeployer.setWebContainerService(this); - - // Register the deployer - deployerManager.register(warDeployer); - - // Register the MBean - registerWebServiceMBean(this, getDomainName()); - } - - /** - * Creates an instance of the http service factory. - * @return an instance of the httpservice factory - */ - protected abstract HttpServiceFactory createHttpServiceFactory(); - - /** - * Stop the service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - - // Undeploy standalone WARs - warDeployer.stop(); - - if (deployerManager != null) { - // Unregister the deployer - deployerManager.unregister(warDeployer); - } - - if (onDemandProxy != null) { - try { - onDemandProxy.disable(); - } catch (HttpOnDemandProxyException e) { - logger.log(BasicLevel.WARN, "Cannot stop the OnDemand proxy", e); - } - } - - // Unregister the HttpService - if (osgiHttpService != null) { - osgiHttpService.unregister(); - } - - unregisterWebServiceMBean(getDomainName()); - - logger.log(BasicLevel.DEBUG, "WebContainerService stopped"); - } - - /** - * Create the environment and delegate the operation to the implementation - * of the web container. - * @param ctx the context which contains the configuration in order to - * deploy a WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - protected abstract void doRegisterWar(Context ctx) throws JWebContainerServiceException; - - /** - * Delegate the unregistration to the implementation of the web container. - * @param ctx the context which contains the configuration in order to - * undeploy a WAR. - * @throws JWebContainerServiceException if the unregistration failed. - */ - protected abstract void doUnRegisterWar(Context ctx) throws JWebContainerServiceException; - - /** - * Starts the specific code for the web container implementation. This - * allows to start the internal container on demand (if there is an access - * on the http proxy port for example) - * @throws JWebContainerServiceException if container is not started - */ - public abstract void startInternalWebContainer() throws JWebContainerServiceException; - - /** - * Checks if the internal web container has been started. - * @return true if it is already started - */ - public abstract boolean isInternalContainerStarted(); - - /** - * Return the URL where warURL has been unpacked. - * @param warURL the URL of the war - * @param earDeployable the EAR deployable (could be null) - * @return the URL where warURL has been unpacked. - * @throws JWebContainerServiceException when it is impossible to retrieve - * the unpacked URL. - */ - protected URL getUnpackedURL(final URL warURL, final EARDeployable earDeployable) throws JWebContainerServiceException { - - String folder = getWebappsWorkDirectory() + File.separator + getJonasServerName() + File.separator; - - // Two cases : - // war is alone --> unpack it in : - // WEBAPPS_DIR/servername/single/war_filename_timestamp/ - // war come from an ear --> unpack it in : - // WEBAPPS_DIR/servername/ear/ear_filename_timestamp/war_filename__timestamp/ - - File warFile = URLUtils.urlToFile(warURL); - - // Do not unpack the already "expanded" war file - if (warFile.isDirectory()) { - return warURL; - } - - // Build destination folder name - if (earDeployable != null) { - // The destination directory is built from the filename of the - // unpacked ear, - // that is to say, the parent folder of the original war URL. - String earFileName = warFile.getParentFile().getName(); - if (!getServerProperties().isDevelopment()) { - try { - earFileName = URLUtils.urlToFile(earDeployable.getOriginalDeployable().getArchive().getURL()).getName(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot retrieve the original deployable"); - } - } - folder += INEAR_WORK_WEBAPPS_DIR_SUFFIX + File.separator + earFileName; - } else { - folder += SINGLE_WORK_WEBAPPS_DIR_SUFFIX + File.separator; - } - - // Build destination archive name - String archiveName = warFile.getName(); - if (getServerProperties().isDevelopment() && earDeployable == null) { - try { - archiveName = FileUtils.lastModifiedFileName(warFile); - } catch (FileUtilsException e) { - throw new JWebContainerServiceException("Failed creating the destination name", e); - } - } - - try { - IArchive archive = ArchiveManager.getInstance().getArchive(warFile); - WARDeployable warDeployable = WARDeployable.class.cast(deployableHelper.getDeployable(archive)); - // Needs to know if files needs to be updated or not - boolean keepArchives = false; - - // Override files if file to deploy is newer than the unpacked - // directory (and if already exists) - File unpackedFolder = new File(folder, archiveName); - if (unpackedFolder.exists()) { - if (warFile.lastModified() <= unpackedFolder.lastModified()) { - // Need to keep the data - keepArchives = true; - } - } - UnpackDeployableHelper.unpack(warDeployable, new File(folder), archiveName, keepArchives); - - // The file is unpacked, so log it - if (deployerLog != null && earDeployable == null && getServerProperties().isDevelopment()) { - try { - deployerLog.addEntry(warFile, URLUtils.urlToFile(warDeployable.getUnpackedDeployable().getArchive() - .getURL())); - } catch (Exception e) { - String err = "Error while adding the " + warFile + " entry in the log file"; - logger.log(BasicLevel.ERROR, err + " : " + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - } - - return warDeployable.getUnpackedDeployable().getArchive().getURL(); - } catch (Exception e) { - throw new JWebContainerServiceException("Failed unpacking the war file " + warFile, e); - } - } - - /** - * Return the class loader of the given warURL. Unpack the associated war - * and build the loader if it's not in the cache. - * @param warURL the url of the war we want to get the loader - * @param earDeployable If the WAR is in an EAR application - * @param parentLoader the ejb class loader of the ear. May be null in non - * ear case. - * @return the class loader of the given warURL. - * @throws JWebContainerServiceException if the process failed. - */ - public WebappClassLoader getClassLoader(final URL warURL, final EARDeployable earDeployable, final ClassLoader parentLoader) - throws JWebContainerServiceException { - - WebappClassLoader loaderForCls = null; - try { - WebLoaderHolder holder = (WebLoaderHolder) warLoaders.get(warURL); - if (holder != null) { - loaderForCls = holder.getJonasWebLoader(); - } - } catch (Exception e) { - throw new JWebContainerServiceException("Error when getting '" + warURL + "' in cache", e); - } - - if (loaderForCls == null) { - // the war is not already used - - // Use the unpacked directory - URL unpackedWarURL = getUnpackedURL(warURL, earDeployable); - try { - if (parentLoader != null) { - // ear case. - loaderForCls = new WebappClassLoader(unpackedWarURL, parentLoader); - } else { - // Case of non-ear application : only a single war - loaderForCls = new WebappClassLoader(unpackedWarURL, extClassLoader); - } - } catch (IOException ioe) { - throw new JWebContainerServiceException("Cannot create WebAppClassLoader from '" + unpackedWarURL + "'", ioe); - } - - // add the class loader in cache. - try { - WebLoaderHolder holder = new WebLoaderHolder(loaderForCls, null); - warLoaders.put(warURL, holder); - } catch (Exception e) { - throw new JWebContainerServiceException("Error when adding '" + warURL + "' in cache", e); - } - } - - return loaderForCls; - } - - /** - * @param warURL the URL of the webapp - * @return Returns the ClassLoader used to link a JNDI environnment to a - * webapp - */ - public ClassLoader getContextLinkedClassLoader(final URL warURL) { - WebLoaderHolder holder = (WebLoaderHolder) warLoaders.get(warURL); - if (holder != null) { - return holder.getEnvWebLoader(); - } - return null; - } - - /** - * Create the environment and delegate the operation to the implementation - * of the web container. - * @param ctx the context which contains the configuration in order to - * deploy a WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - protected void registerWar(final Context ctx) throws JWebContainerServiceException { - // There are 6 possible parameters : - // - warURL is the URL of the war to deploy (required param). - // - parentClassLoader is the parent classloader of - // the web classloader (optional param). - // - earClassLoader is the ear classloader (optional param). - // - earURL is the URL of the ear (optional parameter : - // if earURL is set it means that we are in the ear case, else it - // means that we are in the non ear case). - // - earDeployable the EARDeployable of the ear application file. - // (optional parameter, same comment as earURL). - // - altDD is the optional deployment descriptor (optional param). - // - contextRoot is the context root for the Web application - // (optional param). - - // Get the URL of the ear application file in the case of an - // ear application, null otherwise. - URL earURL = null; - EARDeployable earDeployable = null; - String contextRoot = null; - String earAppName = null; - String userURI = null; - - // Injection holder - EZBInjectionHolder ezbInjectionHolder = null; - - try { - earURL = (URL) ctx.lookup("earURL"); - earDeployable = (EARDeployable) ctx.lookup("earDeployable"); - contextRoot = (String) ctx.lookup("contextRoot"); - } catch (NamingException e) { - if (earURL != null || earDeployable != null || contextRoot != null) { - String err = "Error while getting parameter from context param :" + e.getMessage(); - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, e); - } // else nothing to do : non-ear case. - } - - // Get EAR application name - if (earDeployable != null) { - earAppName = earDeployable.getModuleName(); - } - - // Get the URL of the war to deploy ... - URL warURL = null; - try { - warURL = (URL) ctx.lookup("warURL"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param :" + e.getMessage(); - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, e); - } - - // WARDeployable is required for standalone webapp with CDI - WARDeployable deployable = null; - try { - deployable = (WARDeployable) ctx.lookup("deployable"); - } catch (NamingException e) { - // Ignore Ear case (for now) - deployable = null; - } - - // Get injection holder - try { - ezbInjectionHolder = (EZBInjectionHolder) ctx.lookup(EZBInjectionHolder.class.getName()); - } catch (NamingException e) { - logger.log(BasicLevel.DEBUG, "No injection holder"); - // Create a new one if not yet existing - if (ejb3Service != null) { - ezbInjectionHolder = ejb3Service.buildInjectionHolder(null, null); - } - } - - // ... and check if the war to deploy exists. - File warFile = URLUtils.urlToFile(warURL); - if (!warFile.exists()) { - String err = "registerWar: '" + warFile.getPath() + "' not found"; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err); - } - - // Check if the war to deploy is not already deployed. - War war = getWar(warURL); - if (war != null) { - // The war is already deployed. - String err = "Cannot deploy war '" + warURL.getFile() + "' is already deployed." - + " You must undeploy the war before a new deployment."; - throw new JWebContainerServiceException(err); - } - - URLClassLoader parentLoader = null; - URLClassLoader earClassLoader = null; - boolean isInEar = true; - try { - parentLoader = (URLClassLoader) ctx.lookup("parentClassLoader"); - earClassLoader = (URLClassLoader) ctx.lookup("earClassLoader"); - } catch (NamingException ne) { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Not an ear case"); - } - isInEar = false; - // exception occurs when the earClassLoader is not found. - } - - // Check WsGen for webapp outside of an Ear - if (!isInEar) { - try { - applyWSGenIfNeeded(warFile.getCanonicalPath()); - } catch (Exception e) { - throw new JWebContainerServiceException("Cannot apply WsGen on the file : " + warFile, e); - } - } - - // Get the war class loader. - WebappClassLoader loaderForCls = getClassLoader(warURL, earDeployable, parentLoader); - - // Get the URL of the unpacked WAR - URL unpackedWarURL = loaderForCls.getBaseURL(); - - ClassLoader ejb3ClassLoader = null; - if (ejb3Service != null) { - if (parentLoader != null) { - ejb3ClassLoader = ejb3Service.buildByteCodeEnhancementClassLoader(new URL[] {unpackedWarURL}, parentLoader); - } else { - ejb3ClassLoader = ejb3Service.buildByteCodeEnhancementClassLoader(new URL[] {unpackedWarURL}, extClassLoader); - } - parentLoader = (URLClassLoader) ejb3ClassLoader; - - } - - // warName - String warName = unpackedWarURL.getFile(); - - // Persistence unit entry present ? - IArchive archive = ArchiveManager.getInstance().getArchive(URLUtils.urlToFile(unpackedWarURL)); - // Well our archive should be a WarDeployable - WARDeployable warDeployable; - try { - warDeployable = WARDeployable.class.cast(deployableHelper.getDeployable(archive)); - } catch (DeployableHelperException e) { - throw new JWebContainerServiceException("Cannot get deployable", e); - } - - String moduleName = warDeployable.getModuleName(); - String applicationName = moduleName; - if (earAppName != null) { - applicationName = earAppName; - } - - // java: contexts - // TODO: retrieve this context from parent for EAR case. - Context appContext = null; - Context moduleContext = null; - Context javaContext = null; - Context encContext = null; - try { - // Create appContext if not part of an EAR - if (appContext == null) { - appContext = contextFactory.createComponentContext("module:".concat(warName)); - - // Bind App Name - appContext.bind("AppName", applicationName); - - } - // Create Module context - moduleContext = contextFactory.createComponentContext("module:".concat(warName)); - - // Bind Module Name - moduleContext.bind("ModuleName", moduleName); - - javaContext = contextFactory.createComponentContext("java:".concat(warName), moduleContext, appContext); - - encContext = javaContext.createSubcontext("comp/env"); - } catch (NamingException e) { - String err = "Error while populating environment of the war file " + warName; - logger.log(BasicLevel.ERROR, err + " :" + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Only if the JAX-RPC Service is started - // And in non EAR case - if (jaxrpcService != null && earClassLoader == null) { - try { - ComponentContext contctx = null; - try { - contctx = new ComponentContext(unpackedWarURL.getFile()); - File unpackedWarFile = URLUtils.urlToFile(unpackedWarURL); - contctx.rebind(IJAXRPCService.UNPACK_DIRECTORY_CTX_PARAM, unpackedWarFile); - contctx.rebind("jarUrls", new URL[0]); - contctx.rebind("warUrls", new URL[] {warURL}); - if (parentLoader != null) { - contctx.rebind("ejbClassLoader", parentLoader); - } - } catch (NamingException e) { - String err = "Can not bind params for the WebServices service, " + "Can't deploy Web Services Endpoint"; - throw new JWebContainerServiceException(err, e); - } - jaxrpcService.deployWebServices(contctx); - } catch (ServiceException se) { - String err = "Error during the deployment of the WebServices of the War file '" + warURL + "'"; - logger.log(BasicLevel.ERROR, err + " : " + se.getMessage()); - throw new JWebContainerServiceException(err, se); - } - } - - // Populate the java:comp/env (ENC) environment. - ClassLoader webClassLoader = null; - FilteringClassLoader filteringClassLoader = null; - try { - filteringClassLoader = createFilteringClassLoader(deployable, parentLoader, unpackedWarURL); - webClassLoader = new SimpleWebappClassLoader(unpackedWarURL, filteringClassLoader); - - } catch (Exception e) { - throw new JWebContainerServiceException("Unable to create classloader", e); - } - - List persistenceArchives = new ArrayList(); - List urlsToAddToClassLoader = new ArrayList(); - // Add WEB-INF/classes for the classloader if there are persistence - // classes - URL urlWebInfClasses = webClassLoader.getResource("WEB-INF/classes/"); - if (urlWebInfClasses != null) { - urlsToAddToClassLoader.add(urlWebInfClasses); - } - - // Check entry in the war - URL persistenceXmlEntryInWarFile = webClassLoader.getResource("WEB-INF/classes/META-INF/persistence.xml"); - if (persistenceXmlEntryInWarFile != null) { - // There is an entry, add the archive to be analyzed - persistenceArchives.add(archive); - - } - - // Check entries in each library - try { - Iterator itURLEntries = archive.getResources(); - while (itURLEntries.hasNext()) { - URL urlWarEntry = itURLEntries.next(); - // There are jar files - if (urlWarEntry.toExternalForm().contains("/WEB-INF/lib/") && urlWarEntry.toExternalForm().endsWith(".jar")) { - IArchive archiveLib = ArchiveManager.getInstance().getArchive(URLUtils.urlToFile(urlWarEntry)); - URL persistenceXmlInLib = archiveLib.getResource("META-INF/persistence.xml"); - if (persistenceXmlInLib != null) { - persistenceArchives.add(archiveLib); - } - urlsToAddToClassLoader.add(urlWarEntry); - } - } - } catch (ArchiveException e) { - throw new JWebContainerServiceException("Cannot check for persistence", e); - } - - // Use EJB3 service if here - EZBContainer ejb3InWarContainer = null; - if (ejb3Service != null) { - - // Add URLs to the classLoader - for (URL urlToAdd : urlsToAddToClassLoader) { - Method addURLMethod; - try { - addURLMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); - addURLMethod.setAccessible(true); - addURLMethod.invoke(ejb3ClassLoader, urlToAdd); - } catch (SecurityException e) { - throw new JWebContainerServiceException("Unable to add URLs", e); - } catch (NoSuchMethodException e) { - throw new JWebContainerServiceException("Unable to add URLs", e); - } catch (IllegalArgumentException e) { - throw new JWebContainerServiceException("Unable to add URLs", e); - } catch (IllegalAccessException e) { - throw new JWebContainerServiceException("Unable to add URLs", e); - } catch (InvocationTargetException e) { - throw new JWebContainerServiceException("Unable to add URLs", e); - } - - } - - // Well, needs a JNDI resolver if not yet set - if (ezbInjectionHolder.getJNDIResolver() == null) { - ezbInjectionHolder = ejb3Service.buildInjectionHolder(ezbInjectionHolder.getPersistenceUnitManager(), - ejb3Service.buildApplicationJNDIResolver()); - } - - - - // there are archives to analyze - if (persistenceArchives.size() > 0) { - - // Analyze each persistence archive - for (IArchive persistenceArchive : persistenceArchives) { - EZBPersistenceUnitManager persistenceUnitManager = null; - final ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - persistenceUnitManager = ejb3Service.getPersistenceUnitManager(persistenceArchive, ejb3ClassLoader); - } catch (org.ow2.easybeans.persistence.api.PersistenceXmlFileAnalyzerException e) { - throw new JWebContainerServiceException("Unable to analyze persistence.xml file", e); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - - EZBPersistenceUnitManager existingPersistenceUnitManager = ezbInjectionHolder.getPersistenceUnitManager(); - if (existingPersistenceUnitManager == null) { - ezbInjectionHolder = ejb3Service.buildInjectionHolder(persistenceUnitManager, ezbInjectionHolder - .getJNDIResolver()); - } else { - // add unit infos - existingPersistenceUnitManager.merge(persistenceUnitManager); - } - - // If warDeployable is not include in an ear - if (isMultitenantEnabled() && multitenantService.isMultitenant(deployable)) { - multitenantService.updatePersistenceUnitManager(persistenceUnitManager, getTenantId(deployable)); - } - } - } - - if (isEjbinwarEnabled()) { - Map properties = new HashMap(); - properties.put(ClassLoader.class, ejb3ClassLoader); - properties.put("application.name", earAppName); - properties.put("module.name", moduleName); - properties.put("application.context", appContext); - properties.put("env.context", encContext); - properties.put("module.context", moduleContext); - - properties.put(EZBApplicationJNDIResolver.class, ezbInjectionHolder.getJNDIResolver()); - - // Check if there are EJBs inside the war - ejb3InWarContainer = ejb3Service.getEJBContainerFromWar(warDeployable, properties); - - // We've found an EJB3 deployable, enhance it - if (ejb3InWarContainer != null) { - try { - ejb3InWarContainer.resolve(); - ejb3InWarContainer.setPersistenceUnitManager(ezbInjectionHolder.getPersistenceUnitManager()); - ejb3InWarContainer.enhance(true); - } catch (EZBContainerException e) { - throw new JWebContainerServiceException("Cannot deploy deployable", e); - } - } - } - - } - - // Get the deployment descriptor from file - WebContainerDeploymentDesc webDD = null; - try { - WebDeploymentDescManager manager = WebDeploymentDescManager.getInstance(); - if (ezbInjectionHolder != null) { - webDD = manager.getDeploymentDesc(unpackedWarURL, warURL, loaderForCls, earClassLoader, ezbInjectionHolder - .getJNDIResolver()); - } else { - webDD = manager.getDeploymentDesc(unpackedWarURL, warURL, loaderForCls, earClassLoader, null); - } - } catch (DeploymentDescException e) { - String err = "Cannot read the deployment descriptors '" + warURL.getFile() + "'"; - logger.log(BasicLevel.ERROR, err + ": " + e); - e.printStackTrace(System.err); - throw new JWebContainerServiceException(err, e); - } - - if (deployable == null && isMultitenantEnabled()) { - if (multitenantService.getTenantIdFromContext() != null) { - // Set war application deployable - deployable = warDeployable; - war.setWarDeployable(deployable); - } - } - - if (isMultitenantEnabled() && earDeployable == null && deployable != null) { - // Set tenantId in deployable for standalone war application - multitenantService.addTenantIdDeployableInfo(deployable, webDD.getTenantId()); - } - - - try { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Populating environment of the file " + warURL.getFile()); - } - Context ctxParam = new ComponentContext(unpackedWarURL.getFile()); - ctxParam.rebind("DeploymentDesc", webDD); - ctxParam.rebind("warName", unpackedWarURL.getFile()); - - if (earDeployable != null) { - ctxParam.rebind("earDeployable", earDeployable); - } - ctxParam.rebind("parentCL", webClassLoader); - ctxParam.rebind("javaContext", javaContext); - if (deployable != null){ - ctxParam.rebind("warDeployable", deployable); - } - - // Do the populating of the java:comp/env (ENC) environment. - setWebEnvironment(ctxParam, ezbInjectionHolder, webClassLoader); - } catch (Exception e) { - // populating environment failed. - String err = "Error when populating "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Start the embedded container now - if (ejb3InWarContainer != null) { - try { - ejb3InWarContainer.start(); - } catch (EZBContainerException e) { - String err = "Unable to start EJB3 embedded in war"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - } - - - // TODO maybe to be removed ? - WebLoaderHolder holder = (WebLoaderHolder) warLoaders.get(warURL); - holder.setEnvWebLoader(webClassLoader); - - contextRoot = getContextRoot(contextRoot, earClassLoader, warURL, webDD); - if (isMultitenantEnabled() && multitenantService.isMultitenant(deployable)){ - contextRoot = updateContextRoot(contextRoot, deployable); - } - - String versionID = null; - if (isVersioningEnabled()) { - if (earURL != null) { - versionID = versioningService.getVersionID(earDeployable); - } else { - versionID = versioningService.getVersionID(warURL); - } - // TODO: prefix for deploying MBeans inside this WAR (filters, ...) - } - - if (versionID == null) { - userURI = contextRoot; - } else { - if (!contextRoot.contains(versionID)) { - userURI = contextRoot; - contextRoot += versionID; - } else { - userURI = contextRoot.replace(versionID, ""); - } - - if (userURI.equals("/") && contextRoot.charAt(0) == '/') { - // ensure context-root is valid (remove starting /) - contextRoot = contextRoot.substring(1); - } - } - - // Set the name of the host where to deploy the war if it is - // specified in the jonas-web.xml. - String hostName = webDD.getHost(); - - // Check if the context to deploy is not already deployed. - List deployedWars = getWar(contextRoot); - for (War deployedWar : deployedWars) { - String hostDeployed = deployedWar.getHostName(); - if ((hostDeployed == null && hostName == null) || (hostDeployed != null && hostDeployed.equals(hostName))) { - // The war is already deployed. - String err = "Cannot deploy war '" + warURL.getFile() + "' is already deployed with the context '" - + contextRoot + "'." + " You must undeploy the war before a new deployment."; - throw new JWebContainerServiceException(err); - } - } - - // Context classloader must follow the java2 delegation model ? - boolean java2DelegationModel = webDD.getJava2DelegationModel(); - - if (!java2DelegationModel) { - logger - .log( - BasicLevel.INFO, - "The application " - + warURL.getFile() - + " has its java2-delegation-model parameter set " - + "to false. JOnAS 5 offers a new possibility called the filtering class loader that can replace this parameter " - + "and doesn't suffer from the many unexpected behaviours caused by class loader inversion. Please see to JOnAS " - + "configuration guide for details."); - } - - // Create War - war = new War(warURL, earURL, hostName, contextRoot, java2DelegationModel, webDD.getXmlContent(), webDD - .getJOnASXmlContent(), webDD.getServletsName(), deployable); - - if (ejb3InWarContainer != null) { - war.setEjb3ContainerId(ejb3InWarContainer.getId()); - } - - // Configure JACC - PermissionManager permissionManager = null; - try { - boolean removePContext = true; - // Policy context is already existing (created by ear service), no - // need to remove it - if (earClassLoader != null) { - removePContext = false; - } - permissionManager = new PermissionManager(webDD, war.getContextId(), removePContext); - permissionManager.translateServletDeploymentDescriptor(); - // if not in ear case, commit the policy configuration, else it is - // done - // by EAR service after linking all policy configuration objects - if (earClassLoader == null) { - permissionManager.commit(); - } - } catch (Exception e) { - e.printStackTrace(); - String err = "Cannot build permission manager object for the webapp '" + unpackedWarURL + "'"; - logger.log(BasicLevel.ERROR, err + ": " + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Configure the context to give to doRegisterWar ... - Context ctxParam = null; - try { - ctxParam = new ComponentContext(unpackedWarURL.getFile()); - - // Place the War object that provides a set of values - // It will be filled with additional parameters - ctxParam.rebind("war", war); - - // Required parameters - // ---------------------------------- - ctxParam.rebind("unpackedWarURL", unpackedWarURL); - ctxParam.rebind("parentCL", webClassLoader); - ctxParam.rebind(FilteringClassLoader.class.getName(), filteringClassLoader); - ctxParam.rebind("webDD", webDD); - ctxParam.rebind("userURI", userURI); - // Transmit the @WebServices classes too - ctxParam.rebind(KEY_WEB_SERVICES_METADATAS, webDD.getWebServices()); - - // Optional parameters - // ---------------------------------- - if (earAppName != null) { - ctxParam.rebind("earAppName", earAppName); - } - if (deployable != null) { - ctxParam.rebind(WARDeployable.class.getName(), deployable); - } - // Injection holder - if (ezbInjectionHolder != null) { - ctxParam.rebind(EZBInjectionHolder.class.getName(), ezbInjectionHolder); - } - - } catch (NamingException e) { - String err = "Error when deploying the war '" + unpackedWarURL.getFile() + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - war.setPermissionManager(permissionManager); - - // register classloaders (ejb + ear) - if (parentLoader != null) { - try { - ctxParam.bind("ejbClassLoader", parentLoader); - } catch (NamingException e) { - throw new JWebContainerServiceException("Unable to bind a parameter", e); - } - } - if (earClassLoader != null) { - try { - ctxParam.bind("earClassLoader", earClassLoader); - } catch (NamingException e) { - throw new JWebContainerServiceException("Unable to bind a parameter", e); - } - } - - // ... and delegate the registration of the war to the wrapper. - doRegisterWar(ctxParam); - - // Finaly indicates that the war is deployed. - warDeployed.add(war); - warBindings.put(warURL, webClassLoader); - unpackedWARs.put(warURL, unpackedWarURL); - - // Admin code - if (isMultitenantEnabled()) { - Object oldTenantContext = multitenantService.getTenantContext(); - try { - multitenantService.setTenantIdInContext(getTenantId(deployable)); - registerWarMBean(war, getDomainName(), warURL.getFile()); - } finally { - multitenantService.setTenantContext(oldTenantContext); - } - } else { - registerWarMBean(war, getDomainName(), warURL.getFile()); - } - - // Complete the Deployment of the WebServices - // Only if the JAX-RPC Service is started - // And in non EAR case - if (jaxrpcService != null && earClassLoader == null) { - try { - ComponentContext contctx = null; - try { - contctx = new ComponentContext(unpackedWarURL.getFile()); - contctx.rebind(IJAXRPCService.CLASSLOADER_CTX_PARAM, loaderForCls); - contctx.rebind(IJAXRPCService.PARENT_OBJECTNAME_CTX_PARAM, ctxParam.lookup("WebModule")); - contctx.rebind(IJAXRPCService.ISINEAR_CTX_PARAM, Boolean.FALSE); - } catch (NamingException e) { - String err = "Can not bind params for the WebServices service, " - + "can't complete deployment of Web Services Endpoints"; - throw new JWebContainerServiceException(err, e); - } - jaxrpcService.completeWSDeployment(contctx); - } catch (ServiceException se) { - String err = "Error during the deployment of the WebServices of the War file '" + warURL + "'"; - logger.log(BasicLevel.ERROR, err + " : " + se.getMessage()); - throw new JWebContainerServiceException(err, se); - } - } - - StringBuffer txtInfo = new StringBuffer("War " + URLUtils.urlToFile(warURL).getName() + " available at the context "); - if (!contextRoot.startsWith("/")) { - txtInfo.append("/"); - } - txtInfo.append(contextRoot); - - if (hostName != null) { - txtInfo.append(" on the host "); - txtInfo.append(hostName); - } - txtInfo.append("."); - logger.log(BasicLevel.INFO, txtInfo.toString()); - - // Remove the DD cache (WebServices) - if (jaxrpcService != null && earClassLoader == null) { - jaxrpcService.removeCache(loaderForCls); - } - } - - /** - * Creates a {@code FilteringClassLoader} for this WebApp. - * @param deployable the WebApp {@code Deployable} File (may be null in EAR - * case) - * @param parentLoader the Ear parent's ClassLoader (may be null) - * @param unpackedWarURL The Url of the unpacked webapp (only used in - * non-EAR case, never null) - * @return a Filtering ClassLoader configured from {@code - * WEB-INF/classloader-filtering.xml} (if any). - */ - private FilteringClassLoader createFilteringClassLoader(final WARDeployable deployable, final URLClassLoader parentLoader, - final URL unpackedWarURL) { - - // Find the parent loader - ClassLoader parent; - if (parentLoader == null) { - // Standalone case, simply be a child of the common classloader - parent = extClassLoader; - } else { - // In Ear case, the filter sits between the EjbJars + Libraries - // loader - // and the Web Application ClassLoader (to be created as child of - // this loader). - parent = parentLoader; - } - - // Create the child filtering loader from the parent - FilteringClassLoader filteringClassLoader = new FilteringClassLoader(parent); - - // Find the web archive - IArchive archive = null; - if (deployable != null) { - // Standalone mode - // Just get the archive from the War deployable - archive = deployable.getArchive(); - } else { - // In EAR mode - // Construct the archive from the Url - archive = ArchiveManager.getInstance().getArchive(unpackedWarURL); - } - - // Seek the XML definition file in the archive (if any) - try { - String name = "WEB-INF/" + FilteringClassLoader.CLASSLOADER_FILTERING_FILE; - URL definition = archive.getResource(name); - if (definition != null) { - filteringClassLoader.setDefinitionUrl(definition); - } - } catch (ArchiveException ae) { - // Ignored - if (logger.isLoggable(BasicLevel.DEBUG)) { - String message = "Cannot get classloader-filtering.xml file from the archive " + archive; - logger.log(BasicLevel.DEBUG, message, ae); - } - } finally { - archive.close(); - } - - filteringClassLoader.start(); - return filteringClassLoader; - } - - /** - * Apply WSGen on the given file if needed. - * @param path the path to use - * @return the modified file or the original file if WSGen has not been - * launched. - * @throws DeployerException if WSGen cannot be applied. - */ - private void applyWSGenIfNeeded(final String path) throws DeployerException { - // JAX-RPC service started ? - if (jaxrpcService == null) { - logger.log(BasicLevel.DEBUG, "The JAX-RPC service is not present, no need to call WSGen"); - return; - } - - // Auto WsGen enabled ? - if (!jaxrpcService.isAutoWsGenEngaged()) { - logger.log(BasicLevel.DEBUG, "Automatic WsGen is not enabled, no need to call WSGen"); - return; - } - - IArchive archive = ArchiveManager.getInstance().getArchive(new File(path)); - - // Check version in manifest - String jonasVersionWsGen = archive.getMetadata().get("WsGen-JOnAS-Version"); - if (Version.getNumber().equals(jonasVersionWsGen)) { - // no changes, just continue the normal deployment process - logger.log(BasicLevel.DEBUG, "No change: no need to call WSGen"); - return; - } - - try { - IDeployable deployable = deployableHelper.getDeployable(archive); - jaxrpcService.applyWSGen(deployable); - } catch (Exception e) { - throw new DeployerException(e); - } - } - - /** - * Gets the context root for a WAR. - * @param contextRoot Current context root, null if none. - * @param earClassLoader EAR classloader for the WAR, null if none. - * @param warURL War file's URL. - * @param webDD Deployment descriptor of the WAR file. - * @return Context root, checked (always begin with one slash). - */ - protected String getContextRoot(String contextRoot, final URLClassLoader earClassLoader, final URL warURL, - final WebContainerDeploymentDesc webDD) { - // Set the right context root for the web application, the priority is - // the following : - // 1 - context-root of application.xml - // 2 - context-root of jonas-web.xml - // 3 - context-root is the name of the WAR file without extension. - if (earClassLoader == null && contextRoot == null) { - String cRoot = webDD.getContextRoot(); - if (cRoot == null) { - String file = new File(warURL.getFile()).getName(); - if (file.toLowerCase().endsWith(".war")) { - contextRoot = file.substring(0, file.length() - WAR_EXTENSION_LENGTH); - } else { - // It's a directory which is deployed - contextRoot = file.substring(0, file.length()); - } - } else { - contextRoot = cRoot; - } - } - - // ensure context-root is valid (remove starting /) - if (contextRoot.startsWith("/") && !contextRoot.equals("/")) { - logger.log(BasicLevel.WARN, "Context-Root '" + contextRoot - + "' contains invalid starting / in the name. Fixing it."); - int c = 0; - while (contextRoot.charAt(c) == '/') { - c++; - } - contextRoot = contextRoot.substring(c); - } - return contextRoot; - } - - /** - * Gets tenantId for an application - * @param deployable - * @return tenantId - */ - protected String getTenantId(IDeployable deployable) { - String tenantId = null; - if (isMultitenantEnabled()) { - if (multitenantService.getTenantContext() != null) { - tenantId = multitenantService.getTenantIdFromContext(); - } - if (tenantId == null) { - tenantId = multitenantService.getTenantIdDeployableInfo(deployable); - } - } - if (tenantId != null) { - return tenantId; - } - return null; - } - - /** - * Gets application instance name - * @return instance name - */ - protected String getInstanceName() { - if (isMultitenantEnabled()) { - if (multitenantService.getTenantContext() != null) { - return multitenantService.getInstanceNameFromContext(); - } - } - return null; - } - - /** - * Update context root by adding tenantId and - * application instance name - * @param contextRoot Current context root - * @param deployable - * @return updated context root - */ - protected String updateContextRoot(String contextRoot, IDeployable deployable) { - String tenantId = getTenantId(deployable); - String instanceName = getInstanceName(); - - if (instanceName != null) { - contextRoot = instanceName + "/" + contextRoot; - } - - if (tenantId != null) { - contextRoot = tenantId + "/" + contextRoot; - } - return contextRoot; - } - - /** - * Register a WAR by delegating the operation to the registerWar() method. - * This is used for JMX management. - * @param fileName the name of the war to deploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the registration failed. - */ - public void registerWar(final String fileName) throws RemoteException, JWebContainerServiceException { - // convert the file name to the appropriate url and check if the file - // exists. - URL warURL = checkWarFile(fileName); - - // create the context to call the registerWar method. - Context ctx = null; - try { - ctx = new ComponentContext(fileName); - ctx.rebind("warURL", warURL); - } catch (NamingException e) { - String err = "Error when deploying the war '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // call the registerWar method. - registerWar(ctx); - } - - /** - * Register a WAR by delegating the operation to the registerWar(Context) - * method. - * @param deployable the webapp to be deployed - * @throws org.ow2.jonas.web.JWebContainerServiceException if the - * registration failed. - */ - public void registerWar(final WARDeployable deployable) throws JWebContainerServiceException { - // create the context to call the registerWar method. - Context ctx = null; - try { - ctx = new ComponentContext(deployable.getModuleName()); - ctx.rebind("warURL", deployable.getArchive().getURL()); - ctx.rebind("deployable", deployable); - } catch (Exception e) { - String err = "Error when deploying the war '" + deployable.getModuleName() + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // call the registerWar method. - registerWar(ctx); - } - - /** - * Set the environment of the web container inside the given context. - * @param ctxParam the java:comp/env/ environment where is stored the values - * of the web container environment. - * @param ezbInjectionHolder the easybeans injection handler. - * @param webAppClassLoader the classloader of the web application. - * @throws JWebContainerServiceException if the populating of the - * environment failed. - */ - protected void setWebEnvironment(final Context ctxParam, final EZBInjectionHolder ezbInjectionHolder, - final ClassLoader webAppClassLoader) throws JWebContainerServiceException { - - WebContainerDeploymentDesc dd = null; - String warName = null; - ClassLoader parentClassLoader = null; - EARDeployable earDeployable = null; - WARDeployable warDeployable = null; - Context javaCtx = null; - - /* - * get the parameters - Deployment desc of xml - Name of the war - - * Parent Class loader - */ - try { - dd = (WebContainerDeploymentDesc) ctxParam.lookup("DeploymentDesc"); - warName = (String) ctxParam.lookup("warName"); - earDeployable = (EARDeployable) ctxParam.lookup("earDeployable"); - warDeployable = (WARDeployable) ctxParam.lookup("warDeployable"); - } catch (NamingException e) { - // Ignore if earDeployable not found, it's optional - if (earDeployable != null) { - String err = "Error while getting parameter from context param "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - } - - // Get the parentCL - try { - parentClassLoader = (ClassLoader) ctxParam.lookup("parentCL"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Get the Java Context - try { - javaCtx = (Context) ctxParam.lookup("javaContext"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Create the java:comp/env entry and bind the entries - try { - // Create a JNDI context for this war java:comp/env - naming.setComponentContext(javaCtx, parentClassLoader); - - Context envCtx = (Context) javaCtx.lookup("comp/env"); - - // bind of tenantId - if(isMultitenantEnabled()){ - String tenantId = getTenantId(warDeployable); - - if (tenantId != null){ - javaCtx.rebind("comp/tenantId", tenantId); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Binding object tenantId -> " + tenantId); - } - } else { - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Fail to bind object tenantId -> " + tenantId); - } - } - } - - // War Environment entries - IEnvEntryDesc[] envt = dd.getEnvEntryDesc(); - for (int i = 0; i < envt.length; i++) { - // get information in descriptor - String name = envt[i].getName(); - Object obj = envt[i].getValue(); - String lookupName = envt[i].getLookupName(); - - - // register object in JNDI - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Binding object " + name + " -> " + obj); - } - - // lookup name ? - if (lookupName != null) { - envCtx.rebind(name, new LinkRef(lookupName)); - continue; - } - - - if (obj != null) { - envCtx.rebind(name, obj); - } - } - - // Resource References - IResourceRefDesc[] resref = dd.getResourceRefDesc(); - for (int i = 0; i < resref.length; i++) { - // get information in descriptor - String name = resref[i].getName(); - String type = resref[i].getTypeName(); - String resname = resref[i].getJndiName(); - // register object in JNDI - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Linking resource " + name + " -> " + resname); - } - - if (type.equalsIgnoreCase("java.net.URL")) { - // Specify the factory to use with the right URL - Reference ref = new Reference("java.net.URL", "org.ow2.jonas.lib.naming.URLFactory", null); - StringRefAddr refAddr = new StringRefAddr("url", resname); - ref.add(refAddr); - envCtx.rebind(name, ref); - } else { - // build the LinkRef that will be registered: - // FactoryClassName = null, size = 1, refAddr = resname. - LinkRef lref = new LinkRef(resname); - envCtx.rebind(name, lref); - } - } - - // Resource Environment References - IResourceEnvRefDesc[] resEnvref = dd.getResourceEnvRefDesc(); - for (int i = 0; i < resEnvref.length; i++) { - // get information in descriptor - String name = resEnvref[i].getName(); - String resname = resEnvref[i].getJndiName(); - LinkRef lref = new LinkRef(resname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Linking resource environment " + name + " -> " + resname); - } - envCtx.rebind(name, lref); - } - - // EJB References - IEJBRefDesc[] ejbref = dd.getEjbRefDesc(); - for (int i = 0; i < ejbref.length; i++) { - // get information in descriptor - String name = ejbref[i].getEjbRefName(); - String ejbname = null; - ejbname = ejbref[i].getJndiName(); - - LinkRef lref = new LinkRef(ejbname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Linking ejb " + name + " -> " + ejbname); - } - envCtx.rebind(name, lref); - } - - // EJB Local Refs - // We use here ejb-link tag. This should be used also for - // ejb-ref when we are able to manage references to - // another jar file. - IEJBLocalRefDesc[] ejblocalref = dd.getEjbLocalRefDesc(); - for (int i = 0; i < ejblocalref.length; i++) { - String name = ejblocalref[i].getEjbRefName(); - String ejbname = ejblocalref[i].getJndiLocalName(); - LinkRef lref = new LinkRef(ejbname); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Linking ejb " + name + " -> " + ejbname); - } - envCtx.rebind(name, lref); - } - - // Message Destination References - IMessageDestinationRefDesc[] mdref = dd.getMessageDestinationRefDesc(); - for (int i = 0; i < mdref.length; i++) { - // get information in descriptor - String name = mdref[i].getMessageDestinationRefName(); - String mdname = null; - mdname = mdref[i].getJndiName(); - - LinkRef lref = new LinkRef(mdname); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, warName + ": Linking message-destination " + name + " -> " + mdname); - } - envCtx.rebind(name, lref); - } - - // Service Ref - // We bind a Reference when full configuration is provided - // Otherwise we bind only a LinkRef in JNDI - // Only done when the JAX-RPC Service is active - if (jaxrpcService != null) { - IServiceRefDesc[] serviceRefs = dd.getServiceRefDesc(); - for (int i = 0; i < serviceRefs.length; i++) { - - // Create the Service from the ServiceRef description - String name = serviceRefs[i].getServiceRefName(); - // create a full Reference - Reference ref = jaxrpcService.buildServiceRef(serviceRefs[i], parentClassLoader); - envCtx.rebind(name, ref); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding service-ref 'java:comp/env/" + name + "'"); - } - } - } - - // Gets the bindings - IENCBindingHolder encBindingHolder = dd.getENCBindingHolder(); - - // DataSourceDefinitions - if (this.getDataSourceService() != null) { - for (IENCBinding dataSourceDefinitionIENCBinding : - encBindingHolder.getDataSourceBindings()) { - IJAnnotationSqlDataSourceDefinition dataSourceDefinition = dataSourceDefinitionIENCBinding.getValue(); - String normalizedDataSourceName = dataSourceDefinition.getName(); - if (normalizedDataSourceName.startsWith("java:")) { - normalizedDataSourceName = normalizedDataSourceName.replaceFirst("java:", ""); - } else { - normalizedDataSourceName = "comp/env/" + normalizedDataSourceName; - } - - // There is likely a bug in metadata parsing as some DS already registered through EJBs are also present in war metadata - try { - if (javaCtx.lookup(normalizedDataSourceName) != null) { - // Already registered continue with another data-source - continue; - } - } catch (NamingException e) { - // This is the normal case - logger.log(BasicLevel.DEBUG, "Registering data-source " + dataSourceDefinition.getName()); - } - - Map dsProperties = new HashMap(); - for (String propertyString : dataSourceDefinition.getProperties()) { - String[] property = propertyString.split("="); - if (property.length == 2) { - dsProperties.put(property[0], property[1]); - } - } - String globalDSJndiName = this.getDataSourceService().deployDataSource( - dataSourceDefinition.getClassName(), dataSourceDefinition.getDescription(), - dataSourceDefinition.getUrl(), dataSourceDefinition.getUser(), dataSourceDefinition.getPassword(), - dataSourceDefinition.getDatabaseName(), dataSourceDefinition.getPortNumber(), - dataSourceDefinition.getServerName(), dataSourceDefinition.getIsolationLevel(), - dataSourceDefinition.isTransactional(), dataSourceDefinition.getInitialPoolSize(), - dataSourceDefinition.getMaxPoolSize(), dataSourceDefinition.getMinPoolSize(), - dataSourceDefinition.getMaxIdleTime(), dataSourceDefinition.getMaxStatements(), - dataSourceDefinition.getLoginTimeout(), dsProperties); - - - javaCtx.rebind(normalizedDataSourceName, new LinkRef(globalDSJndiName)); - } - } - - // Persistence context - if (ezbInjectionHolder != null) { - EZBPersistenceUnitManager persistenceUnitManager = ezbInjectionHolder.getPersistenceUnitManager(); - if (persistenceUnitManager != null) { - for (IENCBinding binding : encBindingHolder.getPersistenceContextBindings()) { - String encName = binding.getName(); - String unitName = binding.getValue().getUnitName(); - PersistenceContextType type = binding.getValue().getType(); - EntityManager em = persistenceUnitManager.getEntityManager(unitName, type); - - envCtx.rebind(encName, em); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding persistence-context 'java:comp/env/" + encName + "'"); - } - } - } - - // Persistence unit - for (IENCBinding binding : encBindingHolder.getPersistenceUnitBindings()) { - if (persistenceUnitManager != null) { - String encName = binding.getName(); - String unitName = binding.getValue().getUnitName(); - EntityManagerFactory emf = persistenceUnitManager.getEntityManagerFactory(unitName); - - envCtx.rebind(encName, emf); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding persistence-unit 'java:comp/env/" + encName + "'"); - } - } - } - - // Resources - for (IENCBinding binding : encBindingHolder.getResourceBindings()) { - String encName = binding.getName(); - IJAnnotationResource jAnnotationResource = binding.getValue(); - if (jAnnotationResource.getLookup() != null) { - envCtx.rebind(encName, new LinkRef(jAnnotationResource.getLookup())); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding @Resource 'java:comp/env/" + encName + "'"); - } - - } - - } - - // EJBs - EZBJNDIResolver jndiResolver = ezbInjectionHolder.getJNDIResolver(); - if (jndiResolver != null) { - for (IENCBinding binding : encBindingHolder.getEJBBindings()) { - String encName = binding.getName(); - IJEjbEJB jEjbEJB = binding.getValue(); - String interfaceName = jEjbEJB.getBeanInterface(); - String beanName = jEjbEJB.getBeanName(); - String lookup = jEjbEJB.getLookup(); - - String jndiName; - try { - // Use lookup name if specified - if (lookup != null) { - jndiName = lookup; - } else { - jndiName = jndiResolver.getEJBJNDIUniqueName(interfaceName, beanName); - } - - // Bind a link to this JNDI name - envCtx.rebind(encName, new LinkRef(jndiName)); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding ejb 'java:comp/env/" + encName + "' from JNDIName '" - + jndiName + "'."); - } - - } catch (EZBJNDIResolverException e) { - logger.log(BasicLevel.ERROR, "Cannot get JNDI name for enc name '" + encName + "'", e); - - } - - } - } - } - - // If JAXWS Service is present - if (jaxwsService != null) { - for (IENCBinding binding : encBindingHolder.getWebServicesBindings()) { - - // Ask the service for Reference creation - String name = binding.getName(); - Reference ref = jaxwsService.createNamingReference(binding.getValue()); - - // Bind the reference into the JNDI Context - envCtx.rebind(name, ref); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding WebServiceRef 'java:comp/env/" + name + "'."); - } - } - } - - // JNDI lookup prefix - if (earDeployable != null && isVersioningEnabled()) { - String jndiPrefix = versioningService.getPrefix(earDeployable); - if (jndiPrefix != null) { - envCtx.rebind("JNDILookupPrefix", jndiPrefix); - } - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Adding JNDI-lookup-prefix 'java:comp/env/JNDILookupPrefix'"); - } - } - } catch (NamingException e) { - String err = "Error while populating environment of the war file " + warName; - logger.log(BasicLevel.ERROR, err + " :" + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - } - - /** - * Delegate the un-registration to the implementation of the web container - * and delete the environment associated to the WAR file. - * @param ctx the context which contains the configuration in order to - * un-deploy a WAR. - * @throws JWebContainerServiceException if the un-registration failed. - */ - protected void unRegisterWar(final Context ctx) throws JWebContainerServiceException { - - // Gets the 2 parameters : - // warURL, isEarCase, hostName and contextRoot. - URL warURL = null; - boolean isEarCase = true; - try { - warURL = (URL) ctx.lookup("warURL"); - isEarCase = ((Boolean) ctx.lookup("isEarCase")).booleanValue(); - } catch (NamingException e) { - String err = "Error while getting parameter from context param."; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Load the WARDeployable instance (if any) - WARDeployable deployable = null; - try { - deployable = (WARDeployable) ctx.lookup("deployable"); - } catch (NamingException e) { - // As I'm targeting standalone web app for now, it's not an - // issue if the Deployable is not present (ear case) - deployable = null; - } - - // get the file name for displaying message. - String fileName = warURL.getFile(); - - // Check if the war is deployed. - War war = null; - war = getWar(warURL); - if (war == null) { - String err = "Cannot undeploy war: '" + fileName + "' is not deployed."; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err); - } - - // Check if the war can be undeployed (2 case authorized) : - // - case EAR and war is in an EAR. - // - case non EAR and war isn't in an EAR. - if (isEarCase != war.isInEarCase()) { - String err = "Cannot undeploy war: '" + fileName - + "' it is in an ear application. You must undeploy the ear associated."; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err); - } - - // Call the specific method of the implementation of the web container. - try { - String hostName = war.getHostName(); - if (hostName != null) { - ctx.rebind("hostName", war.getHostName()); - } - ctx.rebind("contextRoot", war.getContextRoot()); - ctx.rebind("webClassLoader", warBindings.get(warURL)); - } catch (NamingException e) { - String err = "Error when undeploying the war '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Remove permission manager - PermissionManager permissionManager = war.getPermissionManager(); - try { - permissionManager.delete(); - permissionManager = null; - } catch (PermissionManagerException pme) { - logger.log(BasicLevel.ERROR, "Cannot remove permission manager for file '" + fileName + "'.", pme); - } - - if (isMultitenantEnabled()) { - Object oldTenantContext = multitenantService.getTenantContext(); - try { - String tenantId = getTenantId(war.getWarDeployable()); - multitenantService.setTenantIdInContext(tenantId); - doUnRegisterWar(ctx); - } finally { - multitenantService.setTenantContext(oldTenantContext); - } - } else { - doUnRegisterWar(ctx); - } - - if (war.getEjb3ContainerId() != null) { - EZBContainer ejb3container = ejb3Service.getEasyBeansServer().getContainer(war.getEjb3ContainerId()); - if (ejb3container != null) { - // An EJB3 container was started - ejb3container.stop(); - ejb3Service.getEasyBeansServer().removeContainer(ejb3container); - } - - } - - // undeploy webservices - if (jaxrpcService != null) { - jaxrpcService.undeployWebServices(ctx); - } - - // Remove the context. - URLClassLoader loader = (URLClassLoader) warBindings.remove(warURL); - naming.unSetComponentContext(loader); - - // Remove classloader - warLoaders.remove(warURL); - - // Indicates that the war is not in the deployed war. - // (here we are sure that the war is not null and isn't in an ear). - warDeployed.remove(war); - unpackedWARs.remove(warURL); - - // Admin code - if (isMultitenantEnabled()) { - Object oldTenantContext = multitenantService.getTenantContext(); - try { - String tenantId = getTenantId(war.getWarDeployable()); - multitenantService.setTenantIdInContext(tenantId); - unregisterWarMBean(getDomainName(), fileName); - } finally { - multitenantService.setTenantContext(oldTenantContext); - } - } else { - unregisterWarMBean(getDomainName(), fileName); - } - - logger.log(BasicLevel.INFO, "War " + URLUtils.urlToFile(warURL).getName() + " no longer available"); - } - - /** - * Unregister a WAR by delegating the operation to the unRegisterWar() - * method. This is used for JMX management. - * @param fileName the name of the war to undeploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the unregistration failed. - */ - public void unRegisterWar(final String fileName) throws RemoteException, JWebContainerServiceException { - - // Convert the given file name to an url and check if the war is - // deployed ... - URL warURL = checkWarDeployed(fileName); - - // ... and do the undeployment. - Context ctx = null; - try { - ctx = new ComponentContext(fileName); - ctx.rebind("warURL", warURL); - ctx.rebind("isEarCase", new Boolean(false)); - } catch (NamingException e) { - String err = "Error when undeploying the war file '" + fileName + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - unRegisterWar(ctx); - } - - /** - * Un-register a WAR by delegating the operation to the - * unRegisterWar(Context) method. - * @param deployable the webapp to be un-deployed. - * @throws JWebContainerServiceException if the un-registration failed. - */ - public void unRegisterWar(final WARDeployable deployable) throws JWebContainerServiceException { - - // Prepare the Context ... - Context ctx = null; - try { - ctx = new ComponentContext(deployable.getModuleName()); - ctx.rebind("warURL", deployable.getArchive().getURL()); - ctx.rebind("isEarCase", Boolean.FALSE); - ctx.rebind("deployable", deployable); - } catch (Exception e) { - String err = "Error when undeploying the war file '" + deployable.getModuleName() + "'"; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // ... and perform un-deployment - unRegisterWar(ctx); - } - - /** - * Deploy the given wars of an ear file with the specified parent - * classloader (ejb classloader or ear classloader). (This method is only - * used for the ear applications, not for the web applications). - * @param ctx the context containing the configuration to deploy the wars.
    - * This context contains the following parameters :
    - * - urls the list of the urls of the wars to deploy.
    - * - earURL the URL of the ear application file.
    - * - parentClassLoader the parent classLoader of the wars.
    - * - earClassLoader the ear classLoader of the j2ee app.
    - * - altDDs the optional URI of deployment descriptor.
    - * - contextRoots the optional context root of the wars.
    - * @throws JWebContainerServiceException if an error occurs during the - * deployment. - */ - public void deployWars(final Context ctx) throws JWebContainerServiceException { - // Gets the parameters from the context : - // - urls the list of the urls of the wars to deploy. - // - earURL the URL of the ear application file. - // - earDeployable the EARDeployable of the ear application file. - // - parentClassLoader the parent classLoader of the wars. - // - earClassLoader the ear classLoader of the j2ee app. - // - altDDs the optional URI of deployment descriptor. - // - contextRoots the optional context root of the wars. - URL[] urls = null; - URL earURL = null; - EARDeployable earDeployable = null; - List wars = null; - ClassLoader parentClassLoader = null; - ClassLoader earClassLoader = null; - URL[] altDDs = null; - String[] contextRoots = null; - EZBInjectionHolder ejbInjectionHolder = null; - try { - urls = (URL[]) ctx.lookup("urls"); - earURL = (URL) ctx.lookup("earURL"); - earDeployable = (EARDeployable) ctx.lookup("earDeployable"); - wars = (List) ctx.lookup("warDeployables"); - parentClassLoader = (ClassLoader) ctx.lookup("parentClassLoader"); - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - altDDs = (URL[]) ctx.lookup("altDDs"); - contextRoots = (String[]) ctx.lookup("contextRoots"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // Get Injection holder - try { - ejbInjectionHolder = (EZBInjectionHolder) ctx.lookup(EZBInjectionHolder.class.getName()); - } catch (NamingException e) { - logger.log(BasicLevel.DEBUG, "No persistence unit manager"); - } - - // webDDManager.setAltDD(earClassLoader, urls, altDDs); - - // Deploy all the wars of the ear application. - for (int i = 0; i < urls.length; i++) { - // Get the name of a war to deploy. - String fileName = URLUtils.urlToFile(urls[i]).getPath(); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Deploy war '" + fileName + "' for the ear service"); - } - - // The context to give for the creation of the container - // associated to the ejb-jar. - Context contctx = null; - try { - contctx = new ComponentContext(fileName); - contctx.rebind("warURL", urls[i]); - contctx.rebind("parentClassLoader", parentClassLoader); - contctx.rebind("earClassLoader", earClassLoader); - contctx.rebind("earDeployable", earDeployable); - contctx.rebind("deployable", wars.get(i)); - contctx.rebind("earURL", earURL); - if (altDDs[i] != null) { - contctx.rebind("altDD", altDDs[i]); - } - if (contextRoots[i] != null) { - contctx.rebind("contextRoot", contextRoots[i]); - } - // Injection holder - if (ejbInjectionHolder != null) { - contctx.rebind(EZBInjectionHolder.class.getName(), ejbInjectionHolder); - } - registerWar(contctx); - } catch (Exception e) { - // A war is corrupted so undeploy all the deployed war - // of the ear application. - logger.log(BasicLevel.ERROR, "Error when deploying '" + fileName + "'"); - logger.log(BasicLevel.ERROR, e.getMessage()); - logger.log(BasicLevel.ERROR, "Undeploy war of the ear application"); - - for (int j = 0; j < i; j++) { - String warFileName = urls[j].getFile(); - try { - // Try to undeploy a war of the ear application. - ComponentContext context = new ComponentContext(warFileName); - context.rebind("warURL", urls[j]); - context.rebind("isEarCase", new Boolean(true)); - unRegisterWar(context); - } catch (Exception ex) { - // Cannot undeploy a war of the ear application - // So there is an error message. - logger.log(BasicLevel.ERROR, "Error when undeploying '" + warFileName + "'"); - logger.log(BasicLevel.ERROR, ex.getMessage()); - logger.log(BasicLevel.ERROR, "Cannot undeploy war of the ear application"); - } - - } - throw new JWebContainerServiceException("Error during the deployment", e); - } - } - } - - /** - * Undeploy the given wars of an ear file with the specified parent - * classloader (ejb classloader or ear classloader). (This method is only - * used for the ear applications, not for the war applications). - * @param urls the list of the urls of the wars to undeploy. - */ - public void unDeployWars(final URL[] urls) { - for (int i = 0; i < urls.length; i++) { - String warFileName = urls[i].getFile(); - try { - // Try to undeploy a war of the ear application. - ComponentContext context = new ComponentContext(warFileName); - context.rebind("warURL", urls[i]); - context.rebind("isEarCase", new Boolean(true)); - unRegisterWar(context); - } catch (Exception ex) { - // Cannot undeploy a war of the ear application - // So there is an error message. - String message = "Error when undeploying '" + warFileName + "' from the Ear"; - logger.log(BasicLevel.ERROR, message, ex); - } - } - } - - /** - * Get the war identified by its URL (.war). - * @param url the URL of the war to get. - * @return the war indentified by its URL, or null if the war is not found. - */ - public War getWar(final URL url) { - for (War war : warDeployed) { - if (war.getWarURL().equals(url)) { - return war; - } - } - return null; - } - - /** - * Get a list of wars identified by their Context. - * @param pContext the context of the war to get. - * @return the list of wars indentified by their Context, or an empty list - * if no wars are found. - */ - protected List getWar(final String pContext) { - List checkDeployed = new ArrayList(); - for (War war : warDeployed) { - if (war.getContextRoot().equals(pContext)) { - checkDeployed.add(war); - } - } - return checkDeployed; - } - - /** - * Make a cleanup of the cache of deployment descriptor. This method must be - * invoked after the ear deployment by the EAR service. - * @param earClassLoader the ClassLoader of the ear application to remove - * from the cache. - */ - public void removeCache(final ClassLoader earClassLoader) { - WebDeploymentDescManager.getInstance().removeCache(earClassLoader); - } - - /** - * Check if the specified file name correspond to a file which is located - * relatively to where the JOnAS server is launched or in the - * $JONAS_BASE/web-apps. - * @param fileName the file to check if it exists. - * @return the URL of the file found (either relatively to the JOnAS server - * or to the $JONAS_BASE/web-apps). - * @throws JWebContainerServiceException if the specified file does't - * exists. - */ - protected URL checkWarFile(final String fileName) throws JWebContainerServiceException { - - File f = null; - try { - f = new File(fileName).getCanonicalFile(); - if (!f.exists()) { - boolean found = false; - } - } catch (IOException e) { - String err = "Invalid war file name '" + fileName; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, e); - } - - return URLUtils.fileToURL(f); - } - - /** - * Check if the specified file is already deployed in the JOnAS server and - * return the URL of this deployed war file. - * @param fileName the name of the WAR file to check. - * @return the URL of the deployed war file. - * @throws JWebContainerServiceException if the file name doesn't correspond - * to a deployed war. - */ - protected URL checkWarDeployed(final String fileName) throws JWebContainerServiceException { - - URL url = null; - try { - for (War war : warDeployed) { - url = URLUtils.fileToURL(new File(fileName).getCanonicalFile()); - URL deployedWarURL = war.getWarURL(); - String deployedWarPath = deployedWarURL.toString(); - // Delete the char '/' at the end of the URL if present - // FIXME: very strange to use File.separator on an URL as it - // should be always / ! ?? - if (deployedWarPath.endsWith(File.separator)) { - deployedWarPath = deployedWarPath.substring(0, deployedWarPath.length() - 1); - } - - // For unpacked directory on Linux, the URL has a trailing / so - // check it also - if (deployedWarPath.equals(url.toString()) || (deployedWarPath + "/").equals(url.toString())) { - return deployedWarURL; - } - } - - String err = "Cannot undeploy war: '" + fileName + "' is not deployed."; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err); - - } catch (MalformedURLException e) { - String err = "Invalid war file name '" + fileName + "'."; - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } catch (IOException e) { - String err = "Invalid war file name '" + fileName; - logger.log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, e); - } - } - - /** - * @return current number of wars deployed in the JOnAS server - */ - public Integer getCurrentNumberOfWars() { - return new Integer(warDeployed.size()); - } - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the war file. - * @return true if the war is deployed, else false. - */ - public boolean isWarLoaded(final String fileName) { - - URL url = null; - boolean isLoaded = false; - try { - // Absolute filename - try { - url = URLUtils.fileToURL(new File(fileName).getCanonicalFile()); - // Check if the war is already deployed or not - if (getWar(url) != null) { - isLoaded = true; - } else { - // Not found force to test in relative Webapps directory - url = null; - } - } catch (Exception e) { - url = null; - } - } catch (Exception e) { - String err = "Can not found if the war is deployed or not"; - logger.log(BasicLevel.ERROR, err); - return false; - } - - return isLoaded; - } - - /** - * Return the list of all loaded web applications. - * @return The list of deployed web applications - */ - public List getDeployedWars() { - List al = new ArrayList(); - for (War war : warDeployed) { - URL warURL = war.getWarURL(); - al.add(warURL.getFile()); - } - return al; - } - - /** - * Gets the name of the server which is the web container. - * @return the name of the server which is the web container - */ - public String getServerName() { - if (serverName == null) { - updateServerInfos(); - } - return serverName; - } - - /** - * Gets the version of the server which is the web container. - * @return the version of the server which is the web container - */ - public String getServerVersion() { - if (serverVersion == null) { - updateServerInfos(); - } - return serverVersion; - } - - /** - * Test if the specified unpack name is already deployed or not. This method - * is defined in the {@link JWebContainerService} interface. - * @param unpackName the name of the ear file. - * @return true if the ear is deployed, else false. - */ - public boolean isWarDeployedByWorkName(final String unpackName) { - for (URL unpackedURL : unpackedWARs.values()) { - if (URLUtils.urlToFile(unpackedURL).getName().equals(unpackName)) { - return true; - } - } - return false; - } - - /** - * Update info of the serverName and serverVersion. - */ - protected abstract void updateServerInfos(); - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when it is impossible to get the - * Default Host. - */ - public abstract String getDefaultHost() throws JWebContainerServiceException; - - /** - * Return the Default HTTP port number of the web container (can be null if - * multiple HTTP connector has been set). - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when it is impossible to get the - * Default Http port. - */ - public abstract String getDefaultHttpPort() throws JWebContainerServiceException; - - /** - * Return the Default HTTPS port number of the web container (can be null if - * multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when it is impossible to get the - * Default Https port. - */ - public abstract String getDefaultHttpsPort() throws JWebContainerServiceException; - - /** - * @return Returns the logger. - */ - protected static Logger getLogger() { - return logger; - } - - /** - * @return Returns the naming. - */ - protected JNamingManager getNaming() { - return naming; - } - - /** - * @param serverName The serverName to set. - */ - protected void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * @param serverVersion The serverVersion to set. - */ - protected void setServerVersion(final String serverVersion) { - this.serverVersion = serverVersion; - } - - /** - * Holds the ClassLoader used to retrieve the WebApp JNDI Context and the - * JOnAS Webapp ClasLoader. - * @author Guillaume Sauthier - */ - public class WebLoaderHolder { - - /** - * Web ClassLoader used by JOnAS. - */ - private WebappClassLoader jonasWebLoader; - - /** - * Web ClassLoader used to retrieve the JNDI Context of the webapp. - */ - private ClassLoader envWebLoader; - - /** - * Constructs a WebLoaderHolder with jonas Loader and en Loader. - * @param jonas JOnAS Webapp Loader - * @param env Environnement ClassLoader - */ - public WebLoaderHolder(final WebappClassLoader jonas, final ClassLoader env) { - jonasWebLoader = jonas; - envWebLoader = env; - } - - /** - * @return Returns the jonasWebLoader. - */ - public WebappClassLoader getJonasWebLoader() { - return jonasWebLoader; - } - - /** - * @return Returns the envWebLoader. - */ - public ClassLoader getEnvWebLoader() { - return envWebLoader; - } - - /** - * @param envWebLoader The envWebLoader to set. - */ - public void setEnvWebLoader(final ClassLoader envWebLoader) { - this.envWebLoader = envWebLoader; - } - - /** - * @param jonasWebLoader The jonasWebLoader to set. - */ - public void setJonasWebLoader(final WebappClassLoader jonasWebLoader) { - this.jonasWebLoader = jonasWebLoader; - } - } - - /** - * @return the {@link JComponentContextFactory}. - */ - protected JComponentContextFactory getContextFactory() { - return contextFactory; - } - - // Admin code (JMX based) - // --------------------- - /** - * Register WEB Container Service MBean. - * @param service web container service to manage - * @param domainName domain name - */ - protected void registerWebServiceMBean(final Object service, final String domainName) { - ObjectName on = JonasObjectName.webContainerService(domainName); - jmxService.registerMBean(service, on); - } - - /** - * Unregister WEB Container Service MBean. - * @param domainName domain name - */ - protected void unregisterWebServiceMBean(final String domainName) { - ObjectName on = JonasObjectName.webContainerService(domainName); - jmxService.unregisterMBean(on); - } - - /** - * Register War MBean. - * @param war War instance to manage - * @param domainName domain name - * @param fileName the war file name - */ - protected void registerWarMBean(final War war, final String domainName, final String fileName) { - // ObjectName on = null; - try { - ObjectName on = JonasObjectName.war(domainName, fileName); - jmxService.registerMBean(war, on); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.WARN, "Could not register War MBean", e); - } - } - - /** - * Unegister War MBean. - * @param domainName domain name - * @param fileName the war file name - */ - protected void unregisterWarMBean(final String domainName, final String fileName) { - // ObjectName on = null; - try { - ObjectName on = JonasObjectName.war(domainName, fileName); - jmxService.unregisterMBean(on); - } catch (MalformedObjectNameException e) { - logger.log(BasicLevel.WARN, "Could not unregister War MBean", e); - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jsfService the JSFService to set - */ - public void setJSFService(final JSFService jsfService) { - this.jsfService = jsfService; - } - - /** - * @return the jmxService - */ - public JmxService getJmxService() { - return jmxService; - } - - /** - * @param jaxrpcService the jaxrpcService to set - */ - public void setJAXRPCService(final IJAXRPCService jaxrpcService) { - this.jaxrpcService = jaxrpcService; - } - - /** - * @param naming the naming to set - */ - public void setNaming(final JNamingManager naming) { - this.naming = naming; - } - - /** - * @param contextFactory the contextFactory to set - */ - public void setContextFactory(final JComponentContextFactory contextFactory) { - this.contextFactory = contextFactory; - } - - /** - * @param deployerManager the {@link IDeployerManager} to use. - */ - public void setDeployerManager(final IDeployerManager deployerManager) { - this.deployerManager = deployerManager; - } - - /** - * Create working directory for applications. - */ - protected void initWorkingDirectory() { - if (workSingleWebAppsFile == null) { - // Create $JONAS_BASE/work/webapps/single directory file - workSingleWebAppsFile = new File(getWebappsWorkDirectory() + File.separator + getServerProperties().getServerName() - + File.separator + SINGLE_WORK_WEBAPPS_DIR_SUFFIX); - workSingleWebAppsFile.mkdirs(); - } - } - - /** - * Method called when the workCleanerService is bound to the component. - * @param workCleanerService the workCleanerService reference - */ - public void setWorkCleanerService(final WorkCleanerService workCleanerService) { - initWorkingDirectory(); - - File fileLog = new File(workSingleWebAppsFile.getPath() + File.separator + getServerProperties().getServerName() - + ".log"); - if (!fileLog.exists()) { - try { - // Create dirs - fileLog.getParentFile().mkdirs(); - fileLog.createNewFile(); - } catch (IOException e) { - logger.log(BasicLevel.ERROR, "cannot create the log file" + fileLog, e); - } - } - - // Create the logger - try { - deployerLog = new DeployerLog(fileLog); - CleanTask cleanTask = new WarCleanTask(this, deployerLog); - - workCleanerService.registerTask(cleanTask); - workCleanerService.executeTasks(); - } catch (DeployerLogException e) { - logger.log(BasicLevel.ERROR, "Cannot register the clean task", e); - } - } - - /** - * @return Associates an URL of an unpacked WAR file to its classloader. - */ - protected Hashtable getWarLoaders() { - return warLoaders; - } - - /** - * @return Associates an URL of a deployed WAR file to its classloader. - */ - protected Hashtable getWarBindings() { - return warBindings; - } - - /** - * @return List of the war deployed by the Web container Service. - */ - protected List getWarDeployed() { - return warDeployed; - } - - /** - * @return Reference to the JAX-RPC service. - */ - protected IJAXRPCService getJAXRPCService() { - return jaxrpcService; - } - - /** - * @return Application Classloader. - */ - protected ClassLoader getAppsClassLoader() { - return extClassLoader; - } - - /** - * @param versioningService The versioning service to set. - */ - public void setVersioningService(final VersioningService versioningService) { - this.versioningService = versioningService; - } - - /** - * Sets the versioning service to null. - */ - public void unsetVersioningService() { - this.versioningService = null; - } - - /** - * @return The versioning service. - */ - public VersioningService getVersioningService() { - return this.versioningService; - } - - /** - * @return Whether versioning is enabled. - */ - public boolean isVersioningEnabled() { - return (versioningService != null && versioningService.isVersioningEnabled()); - } - - /** - * @param multitenantService The multitenant service to set. - */ - public void setMultitenantService(final MultitenantService multitenantService) { - this.multitenantService = multitenantService; - } - - /** - * Sets the multitenant service to null. - */ - public void unsetMultitenantService() { - this.multitenantService = null; - } - - /** - * @return The multitenant service. - */ - public MultitenantService getMultitenantService() { - return this.multitenantService; - } - - /** - * @return Whether multitenant is enabled. - */ - public boolean isMultitenantEnabled() { - return (multitenantService != null); - } - - /** - * @param auditService The audit service to set. - */ - public void setAuditService(final AuditService auditService) { - this.auditService = auditService; - } - - /** - * Sets the audit service to null. - */ - public void unsetAuditService() { - this.auditService = null; - } - - /** - * @return The audit service. - */ - public AuditService getAuditService() { - return this.auditService; - } - - /** - * @param warDeployableMetadataFactory the deployable metadata factory - * service - */ - public void setWarDeployableMetadataFactory(final IWarDeployableMetadataFactory warDeployableMetadataFactory) { - WarDeployableMetadataFactoryHolder.setWarDeployableMetadataFactory(warDeployableMetadataFactory); - } - - /** - * Store the reference to the JAX-WS Service. - * @param jaxwsService jaxws Service - */ - public void bindJaxwsService(final IJAXWSService jaxwsService) { - this.jaxwsService = jaxwsService; - } - - /** - * @return the jaxws service - */ - protected IJAXWSService getJAXWSService() { - return this.jaxwsService; - } - - /** - * Release the reference to the JAWS Service. - * @param jaxwsService jaxws Service - */ - public void unbindJaxwsService(final IJAXWSService jaxwsService) { - this.jaxwsService = null; - } - - /** - * @param service the EJB3 Service to be injected. - */ - public void setEjb3Service(final IEasyBeansService service) { - this.ejb3Service = service; - } - - /** - * Unbind the {@link IEasyBeansService}. - */ - public void unsetEjb3Service() { - this.ejb3Service = null; - } - - /** - * @param deployableHelper the deployable helper - */ - public void setDeployableHelper(final IDeployableHelper deployableHelper) { - this.deployableHelper = deployableHelper; - } - - /** - * Unbind the {@link IDeployableHelper}. - */ - public void unsetDeployableHelper() { - this.deployableHelper = null; - } - - /** - * Enable or not the on demand feature. - * @param onDemandFeatureEnabled boolean true/false - */ - public void setOnDemandFeature(final boolean onDemandFeatureEnabled) { - this.onDemandFeatureEnabled = onDemandFeatureEnabled; - } - - /** - * Sets the redirect port number. - * @param onDemandRedirectPort the given port used for OnDemand proxy - */ - public void setOnDemandRedirectPort(final int onDemandRedirectPort) { - this.onDemandRedirectPort = onDemandRedirectPort; - } - - /** - * @return true if the on demand feature is enabled and in development mode. - */ - public boolean isOnDemandFeatureEnabled() { - return onDemandFeatureEnabled && getServerProperties().isDevelopment(); - } - - /** - * @return the on demande Http port. - */ - public int getOnDemandRedirectPort() { - return onDemandRedirectPort; - } - - /** - * @return a random and available port for the ondemand. - */ - public int getRandomPort() { - - Random random = new Random(); - random.setSeed(System.currentTimeMillis()); - - int portNumber = 0; - int retry = 0; - - while (portNumber == 0 && retry < 50) { - - // try to use by starting at 8950 branch - int randomPort = 8950 + random.nextInt(50); - - ServerSocket serverSocket = null; - try { - serverSocket = new ServerSocket(randomPort); - portNumber = randomPort; - } catch (IOException e) { - // invalid port number, try a new one - logger.log(BasicLevel.DEBUG, "unable to listen on the server socket", e); - } finally { - if (serverSocket != null) { - try { - serverSocket.close(); - } catch (IOException e) { - logger.log(BasicLevel.DEBUG, "unable to close server socket", e); - } - } - } - - // new try - retry++; - } - - if (retry == 50) { - throw new IllegalStateException("Unable to choose a random free port"); - } - - return portNumber; - - } - - /** - * Callback when a http port is defined - * @param portNumber the given port number - */ - protected void setDefaultHttpPort(int portNumber) { - // Update HTTP port - Dictionary httpServiceDictionary = new Hashtable(); - httpServiceDictionary.put("org.osgi.service.http.port", Integer.toString(portNumber)); - if (osgiHttpService != null) { - osgiHttpService.setProperties(httpServiceDictionary); - } - - // Start the proxy if with mode onDemand ? - if (onDemandFeatureEnabled) { - - // Register proxy on the deployer - warDeployer.setOnDemandProxy(onDemandProxy); - - // Register ourself on the proxy - onDemandProxy.setWebContainerService(this); - onDemandProxy.setHttpPortNumber(portNumber); - // If 0, needs to send a random port - if (onDemandRedirectPort == 0) { - this.onDemandRedirectPort = getRandomPort(); - } - onDemandProxy.setRedirectPortNumber(onDemandRedirectPort); - - // Start the proxy port - try { - onDemandProxy.enable(); - } catch (HttpOnDemandProxyException e) { - logger.log(BasicLevel.ERROR, "Cannot start the OnDemand proxy for web container: ", e); - throw new ServiceException("Cannot start the OnDemand proxy for web container", e); - } - - logger.log(BasicLevel.INFO, "OnDemand Feature enabled: Listening on '" + onDemandProxy.getHttpPortNumber() - + "' port (internal:" + onDemandProxy.getRedirectPortNumber() + ")."); - - } - - } - - /** - * Callback when a https port is defined - * @param portNumber the given port number - */ - protected void setDefaultHttpsPort(int portNumber) { - Dictionary httpServiceDictionary = new Hashtable(); - httpServiceDictionary.put("org.osgi.service.http.port.secure", Integer.toString(portNumber)); - if (osgiHttpService != null) { - osgiHttpService.setProperties(httpServiceDictionary); - } - } - - /** - * @return the bundle context of this service. - */ - protected BundleContext getBundleContext() { - return bundleContext; - } - - /** - * @return work directory for webapps. - */ - protected String getWebappsWorkDirectory() { - return getServerProperties().getWorkDirectory() + File.separator + "webapps"; - } - - /** - * Add the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - public void addTldResource(final URL tldResource) { - this.tldResources.add(tldResource); - } - - /** - * Remove the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - public void removeTldResource(final URL tldResource) { - this.tldResources.remove(tldResource); - } - - /** - * @return the TLD resources. - */ - public List getTLDResources() { - return tldResources; - } - - /** - * @return WAR deployer - */ - protected WARDeployer getWarDeployer() { - return warDeployer; - } - - /** - * @return true if EJB in War feature is enabled. - */ - public boolean isEjbinwarEnabled() { - return ejbinwar; - } - - /** - * Defines EJB in WAR feature. - * @param ejbinwar true if enabled, false to disable - */ - public void setEjbinwar(boolean ejbinwar) { - this.ejbinwar = ejbinwar; - } - - public DataSourceService getDataSourceService() { - return dataSourceService; - } - - public void setDataSourceService(DataSourceService dataSourceService) { - this.dataSourceService = dataSourceService; - } -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerServiceMBean.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerServiceMBean.java deleted file mode 100644 index 9f0e6b487f..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/BaseWebContainerServiceMBean.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import java.util.List; - -/** - * This interface provides a description for the web container management. - * @author Ludovic Bert - * @author Florent Benoit - * @author Michel-Ange Anton (Contributor) - */ -public interface BaseWebContainerServiceMBean { - - /** - * @return current number of wars deployed in the JOnAS server - */ - Integer getCurrentNumberOfWars(); - - /** - * Return the list of all loaded web applications. - * @return The list of deployed web applications - */ - List getDeployedWars(); - - /** - * Test if the specified filename is already deployed or not. - * @param fileName the name of the war file. - * @return true if the war is deployed, else false. - */ - boolean isWarLoaded(String fileName); - - /** - * Gets the name of the server which is the web container. - * @return the name of the server which is the web container - */ - String getServerName(); - - /** - * Gets the version of the server which is the web container. - * @return the version of the server which is the web container - */ - String getServerVersion(); -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WARDeployer.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WARDeployer.java deleted file mode 100644 index fb67e87688..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WARDeployer.java +++ /dev/null @@ -1,145 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.base.proxy.HttpOnDemandProxy; -import org.ow2.jonas.web.base.proxy.HttpOnDemandProxyException; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.deployer.AbsDeployer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Deployer of the WAR deployable. - * @author Florent BENOIT - */ -public class WARDeployer extends AbsDeployer { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(WARDeployer.class); - - /** - * Web container service used by this deployer. - */ - private JWebContainerService webContainerService = null; - - /** - * OnDemand proxy. - */ - private HttpOnDemandProxy onDemandProxy = null; - - /** - * Deploy the given WAR. - * @param deployable the deployable to add. - * @throws DeployerException if the WAR is not deployed. - */ - @Override - public void doDeploy(final IDeployable deployable) throws DeployerException { - logger.info("Deploying {0}", deployable.getShortName()); - - // OnDemand Proxy is here, keep the deployable for later - if (onDemandProxy != null) { - try { - onDemandProxy.addWar(WARDeployable.class.cast(deployable)); - } catch (HttpOnDemandProxyException e) { - throw new DeployerException("Cannot deploy the War deployable '" + deployable + "'.", e); - } - } else { - - // Deploy the WAR file - try { - webContainerService.registerWar(WARDeployable.class.cast(deployable)); - } catch (Exception e) { - throw new DeployerException("Cannot deploy the War deployable '" + deployable + "'.", e); - } - } - } - - /** - * Undeploy the given WAR. - * @param deployable the deployable to remove. - * @throws DeployerException if the WAR is not undeployed. - */ - @Override - public void doUndeploy(final IDeployable deployable) throws DeployerException { - logger.info("Undeploying {0}", deployable.getShortName()); - - // OnDemand Proxy is here, so delegate the removal - if (onDemandProxy != null) { - try { - onDemandProxy.removeWar(WARDeployable.class.cast(deployable)); - } catch (HttpOnDemandProxyException e) { - throw new DeployerException("Cannot undeploy the War '" + deployable + "'.", e); - } - } else { - // Undeploy the WAR file - try { - webContainerService.unRegisterWar(WARDeployable.class.cast(deployable)); - } catch (Exception e) { - throw new DeployerException("Cannot undeploy the War '" + deployable + "'.", e); - } - } - } - - /** - * Checks if the given deployable is supported by the Deployer. - * @param deployable the deployable to be checked - * @return true if it is supported, else false. - */ - @Override - public boolean supports(final IDeployable deployable) { - return WARDeployable.class.isInstance(deployable); - } - - /** - * Sets the WEB container service. - * @param webContainerService the web container service. - */ - public void setWebContainerService(final JWebContainerService webContainerService) { - this.webContainerService = webContainerService; - } - - - /** - * @return the OnDemand proxy. - */ - public HttpOnDemandProxy getOnDemandProxy() { - return onDemandProxy; - } - - /** - * Sets the OnDemand proxy to use. - * @param onDemandProxy the proxy to use - */ - public void setOnDemandProxy(final HttpOnDemandProxy onDemandProxy) { - this.onDemandProxy = onDemandProxy; - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/War.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/War.java deleted file mode 100644 index 9439170fd8..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/War.java +++ /dev/null @@ -1,321 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import java.net.URL; - -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - - -/** - * This class is representing a War (a web application) structure which is - * composed of : - * - the URL of the war file. - * - the URL of the ear containing this war. - * - the name of the host on which this war is deployed. - * - the context root of this war. - * - compliance to the java 2 delegation model. - * - Content of the web.xml file - * - Content of the jonas-web.xml file - * - List of the servlets name - * - A permission manager - * @author Florent Benoit - */ -public class War implements WarMBean { - - /** - * The URL of the war file. - */ - private URL warURL = null; - - /** - * The URL of the ear containing this war. - */ - private URL earURL = null; - - /** - * The name of the host on which this war is deployed. - */ - private String hostName = null; - - /** - * The context root where this war is deployed. - */ - private String contextRoot = null; - - /** - * Compliance to the java 2 delegation model. - */ - private boolean java2DelegationModel = true; - - /** - * Content of the web.xml file. - */ - private String xmlContent = null; - - /** - * Content of the jonas-web.xml file. - */ - private String jonasXmlContent = null; - - /** - * Names of the servlet. - */ - private String[] servletsName = null; - - /** - * Permission Manager used. - */ - private PermissionManager permissionManager = null; - - /** - * This WebApp ClassLoader. - */ - private ClassLoader classLoader = null; - - /** - * War deployable - */ - private WARDeployable warDeployable = null; - - /** - * Id of the ejb3 container in case of this war contains EJB3 - */ - private String ejb3ContainerId = null; - - /** - * Construct a War with the specified name, of the specified - * ear. (Used in the case of an ear application). - * @param warURL the URL of the war. - * @param earURL the URL of the ear containing this war. - * @param hostName the name of the host on which this war is deployed. - * @param contextRoot the context root of this war. - * @param java2DelegationModel the java2 delegation model compliance - * @param xmlContent content of the web.xml file - * @param jonasXmlContent content of the jonas-web.xml file - * @param servletsName name of the servlets - */ - public War(final URL warURL, final URL earURL, - final String hostName, final String contextRoot, - final boolean java2DelegationModel, - final String xmlContent, - final String jonasXmlContent, - final String[] servletsName, - final WARDeployable warDeployable) { - this.warURL = warURL; - this.earURL = earURL; - this.hostName = hostName; - this.contextRoot = contextRoot; - this.java2DelegationModel = java2DelegationModel; - this.xmlContent = xmlContent; - this.jonasXmlContent = jonasXmlContent; - this.servletsName = servletsName; - this.warDeployable = warDeployable; - } - - /** - * Return true if only if this war is in an ear file. - * @return true if only if this war is in an ear file. - */ - public boolean isInEarCase() { - return earURL != null; - } - - /** - * Get the URL of the war file. - * @return the URL of the war file. - */ - public URL getWarURL() { - return warURL; - } - - /** - * Get the URL of the ear containing this war. - * @return the URL of the war file. - */ - public URL getEarURL() { - return earURL; - } - - /** - * Get the name of the host on which this war is deployed. - * @return the name of the host on which this war is deployed. - */ - public String getHostName() { - return hostName; - } - - /** - * Get the context root of this war. - * @return the context root of this war. - */ - public String getContextRoot() { - return contextRoot; - } - - /** - * Context classloader must follow the java2 delegation model ? - * @return true if the context's classloader must follow the java 2 delegation model. - */ - public boolean getJava2DelegationModel() { - return java2DelegationModel; - } - - /** - * Return the standard xml file. - * @return the standard xml file - */ - public String getXmlContent() { - return xmlContent; - } - - /** - * Return the jonas-specific xml file. - * @return the jonas-specific xml file - */ - public String getJOnASXmlContent() { - return jonasXmlContent; - } - - /** - * Return a list of all servlets available. - * @return a list of all servlets available - */ - public String[] getServletsName() { - return servletsName; - } - - /** - * Set the permission manager. - * @param permissionManager permission manager to set - */ - public void setPermissionManager(final PermissionManager permissionManager) { - this.permissionManager = permissionManager; - } - - /** - * Gets the permission manager. - * @return permission manager - */ - public PermissionManager getPermissionManager() { - return permissionManager; - } - - - /** - * Gets a contextId for this module. - * @return contextId - */ - public String getContextId() { - return getWarURL().getFile() + contextRoot; - } - - /** - * Get the Real Web ClassLoader - * @return web application ClassLoader - */ - public ClassLoader getClassLoader() { - return classLoader; - } - - /** - * Set the Container created web app ClassLoader - * @param classLoader web app classloader - */ - public void setClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - /** - * Get the war deployable - * @return - */ - public WARDeployable getWarDeployable() { - return this.warDeployable; - } - - /** - * Set the war deployable - * @param warDeployable - */ - public void setWarDeployable(WARDeployable warDeployable) { - this.warDeployable = warDeployable; - } - - /** - * - * @return The Id of the ejb3 container if this war contains EJB3, null otherwise. - */ - public String getEjb3ContainerId() { - return ejb3ContainerId; - } - - /** - * - * @param ejb3ContainerId The Id of the ejb3 container - */ - public void setEjb3ContainerId(String ejb3ContainerId) { - this.ejb3ContainerId = ejb3ContainerId; - } - - /** - * Return true if only if the specified war is equal to this war. - * @param war the war to compare for the equality. - * @return true if only if the specified war is equal to this war. - */ - public boolean equals(final War war) { - return war.getWarURL().equals(warURL) - && war.getEarURL().equals(earURL) - && war.getHostName().equals(hostName) - && war.getContextRoot().equals(contextRoot) - && (war.getJava2DelegationModel() == java2DelegationModel); - } - - /** - * @return an hashcode for this object - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return warURL.hashCode(); - } - - /** - * Return a string representation of the war. Used for debug. - * @return a string representation of the war. - */ - public String toString() { - StringBuffer ret = new StringBuffer(); - ret.append("WAR=\n"); - ret.append("\twarURL=" + getWarURL() + "\n"); - ret.append("\tearURL=" + getEarURL() + "\n"); - ret.append("\thostName=" + getHostName() + "\n"); - ret.append("\tcontextRoot=" + getContextRoot()); - ret.append("\tjava2DelegationModel=" + getJava2DelegationModel()); - return ret.toString(); - } -} - diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarCleanTask.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarCleanTask.java deleted file mode 100644 index 79653b8109..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarCleanTask.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import org.ow2.jonas.lib.work.AbsCleanTask; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.workcleaner.IDeployerLog; -import org.ow2.jonas.workcleaner.LogEntry; -import org.ow2.jonas.workcleaner.WorkCleanerException; - -/** - * JOnAS WAR unused directory clean task class. This class provides a way for removing directories which are inconsistent - * directories for war files (more precisely for single wars). - * @author Francois Fornaciari - */ -public class WarCleanTask extends AbsCleanTask { - - /** - * {@link IDeployerLog} of the task. - */ - private IDeployerLog deployerLog = null; - - /** - * {@link JWebContainerService}} reference. - */ - private JWebContainerService webService; - - /** - * Construct a new WAR clean task. - * @param webService Web Container Service reference - * @param deployerLog DeployerLog of the task - */ - public WarCleanTask(final JWebContainerService webService, final IDeployerLog deployerLog) { - this.webService = webService; - this.deployerLog = deployerLog; - } - - /** - * Check if the package pointed by the log entry is currently deploy. - * @param logEntry entry in a deploy log - * @return true if the package pointed by the log entry is currently deployed - * @throws WorkCleanerException if it fails - */ - @Override - protected boolean isDeployedLogEntry(final LogEntry logEntry) throws WorkCleanerException { - // Check if the single WAR file is deployed - return webService.isWarDeployedByWorkName(logEntry.getCopy().getName()); - } - - /** - * {@inheritDoc} - * @see org.ow2.jonas.lib.work.AbsCleanTask#getDeployerLog() - */ - @Override - public IDeployerLog getDeployerLog() { - return deployerLog; - } -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarMBean.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarMBean.java deleted file mode 100644 index 1b74edeaf8..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/WarMBean.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2007 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base; - -import java.net.URL; - -/** - * This interface defines the MBean methods which can be done on a war file. - * @author Florent Benoit - */ -public interface WarMBean { - - /** - * Return true if only if this war is in an ear file. - * @return true if only if this war is in an ear file. - */ - boolean isInEarCase(); - - /** - * Get the URL of the war file. - * @return the URL of the war file. - */ - URL getWarURL(); - - /** - * Get the URL of the ear containing this war. - * @return the URL of the war file. - */ - URL getEarURL(); - - /** - * Get the name of the host on which this war is deployed. - * @return the name of the host on which this war is deployed. - */ - String getHostName(); - - /** - * Get the context root of this war. - * @return the context root of this war. - */ - String getContextRoot(); - - /** - * Context classloader must follow the java2 delegation model ? - * @return true if the context's classloader must follow the java 2 - * delegation model. - */ - boolean getJava2DelegationModel(); - - /** - * Return the standard xml file. - * @return the standard xml file - */ - String getXmlContent(); - - /** - * Return the jonas-specific xml file. - * @return the jonas-specific xml file - */ - String getJOnASXmlContent(); - - /** - * Return a list of all servlets available. - * @return a list of all servlets available - */ - String[] getServletsName(); - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/endpoint/WebEndpointBuilder.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/endpoint/WebEndpointBuilder.java deleted file mode 100644 index 095f1bf687..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/endpoint/WebEndpointBuilder.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.base.endpoint; - -import org.ow2.jonas.endpoint.collector.Endpoint; -import org.ow2.jonas.endpoint.collector.IEndpoint; -import org.ow2.jonas.endpoint.collector.IEndpointBuilder; -import org.ow2.jonas.endpoint.collector.util.Util; -import org.ow2.jonas.jmx.JmxService; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import java.util.regex.Pattern; - -/** - * The Web {@link IEndpointBuilder} implementation - */ -public class WebEndpointBuilder implements IEndpointBuilder { - - /** - * The {@link JmxService} - */ - private JmxService jmxService; - - /** - * @param jmxService The {@link JmxService} to bind - */ - public void bindJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param jmxService The {@link JmxService} to unbind - */ - public void unbindJmxService(final JmxService jmxService) { - this.jmxService = null; - } - - /** - * {@inheritDoc} - */ - public boolean isSupport(final ObjectName objectName) { - String token = this.jmxService.getDomainName() + ":type=Connector,port=.*"; - Pattern pattern = Pattern.compile(token); - return pattern.matcher(objectName.toString()).matches(); - } - - /** - * {@inheritDoc} - */ - public IEndpoint buildEndpoint(final ObjectName objectName) { - MBeanServer mBeanServer = this.jmxService.getJmxServer(); - IEndpoint endpoint = new Endpoint(); - Object value = Util.getMBeanAttributeValue(objectName, "address", mBeanServer); - if (value != null) { - endpoint.setHost(String.valueOf(value)); - } else { - endpoint.setHost("localhost"); - } - value = Util.getMBeanAttributeValue(objectName, "scheme", mBeanServer); - if (value != null) { - endpoint.setProtocol(String.valueOf(value)); - } - value = Util.getMBeanAttributeValue(objectName, "port", mBeanServer); - if (value != null) { - endpoint.setPort(String.valueOf(value)); - } - - if (endpoint.getProtocol() != null && endpoint.getHost() != null && endpoint.getPort() != null) { - endpoint.setUrl(endpoint.getProtocol() + "://" + endpoint.getHost() + ":" + endpoint.getPort()); - } - - endpoint.setSource(IEndpoint.SOURCE_PREFIX + endpoint.getProtocol()); - - return endpoint; - } -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/lib/PermissionManager.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/lib/PermissionManager.java deleted file mode 100644 index 2f7d0d6b58..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/lib/PermissionManager.java +++ /dev/null @@ -1,460 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.lib; - -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.security.CodeSource; -import java.security.Permission; -import java.security.PermissionCollection; -import java.security.Principal; -import java.security.ProtectionDomain; -import java.security.cert.Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.security.jacc.PolicyContext; -import javax.security.jacc.PolicyContextException; -import javax.security.jacc.WebResourcePermission; -import javax.security.jacc.WebRoleRefPermission; -import javax.security.jacc.WebUserDataPermission; -import javax.servlet.http.HttpServletRequest; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.common.SecurityRoleRefDesc; -import org.ow2.jonas.deployment.web.SecurityConstraintListDesc; -import org.ow2.jonas.deployment.web.SecurityRoleDesc; -import org.ow2.jonas.deployment.web.ServletDesc; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.security.AbsPermissionManager; -import org.ow2.jonas.lib.security.PermissionManagerException; -import org.ow2.jonas.lib.security.auth.JPrincipal; -import org.ow2.jonas.lib.security.jacc.handlers.JPolicyContextHandlerCurrent; -import org.ow2.jonas.lib.security.jacc.handlers.JPolicyContextHandlerData; -import org.ow2.jonas.lib.security.mapping.JPolicyUserRoleMapping; -import org.ow2.jonas.lib.util.Log; - -/** - * Defines a PermissionManager class which will manage JACC permissions for a - * web-app. - * @author Florent Benoit - * @author S. Ali Tokmen - */ -public class PermissionManager extends AbsPermissionManager { - - /** - * Logger used. - */ - private static Logger logger = null; - - /** - * Deployment desc of the module. - */ - private WebContainerDeploymentDesc webContainerDeploymentDesc = null; - - /** - * Default Constructor. - * @param webContainerDeploymentDesc EJB deployment Descriptor - * @param contextId context ID used for PolicyContext - * @param remove - remove the policy context when creating a new one. - * @throws PermissionManagerException if permissions can't be set - */ - public PermissionManager(final WebContainerDeploymentDesc webContainerDeploymentDesc, - final String contextId, - final boolean remove) - throws PermissionManagerException { - super(contextId, remove); - this.webContainerDeploymentDesc = webContainerDeploymentDesc; - logger = Log.getLogger(Log.JONAS_WEB_PREFIX); - } - - /** - * 3.1.3.Translating Servlet Deployment Descriptors A reference to a - * PolicyConfiguration object must be obtained by calling the - * getPolicyConfiguration method on the PolicyConfigurationFactory - * implementation class of the provider configured into the container. The - * policy context identifier used in the call to the getPolicyConfiguration - * method must be a String composed as described in Section 3.1.2, Servlet - * Policy Context Identifiers, on page 19. The value true must be passed as - * the second parameter in the call to getPolicyConfiguration to ensure that - * any and all policy statements are removed from the policy context - * associated with the returned PolicyConfiguration. The security-constraint - * and securityrole-ref elements in the deployment descriptor must be - * translated into permissions and added to the PolicyConfiguration object - * as defined in the following sections. - * @throws PermissionManagerException if permissions can't be set - */ - public void translateServletDeploymentDescriptor() throws PermissionManagerException { - translateSecurityConstraintElements(); - translateServletSecurityRoleRef(); - } - - /** - * 3.1.3.1 Translating security-constraint elements The paragraphs of this - * section describe the translation of security-constraints into - * WebResourcePermission and WebUserDataPermission objects constructed using - * qualified URL pattern names. In the exceptional case, as defined in - * Qualified URL Pattern Names, where a pattern is made irrelevant by a - * qualifying pattern, the permission instantiations that would result from - * the translation of the pattern, as described below, must not be - * performed. Otherwise, the translation of URL patterns in security - * constraints must yield an equivalent translation to the translation that - * would result from following the instructions in the remainder of this - * section. [...] - * @throws PermissionManagerException if permissions can't be set - */ - protected void translateSecurityConstraintElements() throws PermissionManagerException { - if (webContainerDeploymentDesc == null || getPolicyConfiguration() == null) { - throw new PermissionManagerException("PolicyConfiguration or webContainerbDeploymentDesc is null"); - } - - SecurityConstraintListDesc securityConstraintListDesc = webContainerDeploymentDesc - .getSecurityConstraintListDesc(); - PermissionCollection excludedPermissions = securityConstraintListDesc.getExcludedPermissions(); - PermissionCollection uncheckedPermissions = securityConstraintListDesc.getUncheckedPermissions(); - PermissionCollection rolePermissions = null; - String roleName = null; - Map roleMapPermissions = securityConstraintListDesc.getPermissionsByRole(); - - try { - getPolicyConfiguration().addToExcludedPolicy(excludedPermissions); - getPolicyConfiguration().addToUncheckedPolicy(uncheckedPermissions); - - for (Iterator rolesIt = roleMapPermissions.keySet().iterator(); rolesIt.hasNext();) { - roleName = (String) rolesIt.next(); - rolePermissions = (PermissionCollection) roleMapPermissions.get(roleName); - getPolicyConfiguration().addToRole(roleName, rolePermissions); - } - } catch (PolicyContextException pce) { - throw new PermissionManagerException("Can not add add permissions to policy", pce); - } - } - - /** - * 3.1.3.2 Translating Servlet security-role-ref Elements For each - * security-role-ref appearing in the deployment descriptor a corresponding - * WebRoleRefPermission must be added to the corresponding role. The name of - * the WebRoleRefPermission must be the servlet-name in whose context the - * security-role-ref is defined. The actions of the WebRoleRefPermission - * must be the value of the role-name (that is the reference), appearing in - * the security-role-ref. The deployment tools must call the addToRole - * method on the PolicyConfiguration object to add the WebRoleRefPermission - * object resulting from the translation to the role identified in the - * role-link appearing in the security-role-ref. Additional - * WebRoleRefPermission objects must be added to the PolicyConfiguration as - * follows. For each servlet element in the deployment descriptor a - * WebRoleRefPermission must be added to each security-role whose name does - * not appear as the role-name in a security-role-ref within the servlet - * element. The name of each such WebRoleRefPermission must be the - * servlet-name of the corresponding servlet element. The actions (that is, - * reference) of each such WebRoleRefPermission must be the corresponding - * (non-appearing) role-name. The resulting permissions must be added to the - * corresponding roles by calling the addToRole method on the - * PolicyConfiguration object. - * @throws PermissionManagerException if permissions can't be set - */ - protected void translateServletSecurityRoleRef() throws PermissionManagerException { - if (webContainerDeploymentDesc == null || getPolicyConfiguration() == null) { - throw new PermissionManagerException("PolicyConfiguration or webContainerbDeploymentDesc is null"); - } - - Collection servlets = webContainerDeploymentDesc.getServletDescList(); - - // List of roles which appear as role-name in a security-role-ref - List rolesAppearedInSecurityRoleRef = new ArrayList(); - - /* - * For each security-role-ref appearing in the deployment descriptor a - * corresponding WebRoleRefPermission must be added to the corresponding - * role. The name of the WebRoleRefPermission must be the servlet-name - * in whose context the security-role-ref is defined. The actions of the - * WebRoleRefPermission must be the value of the role-name (that is the - * reference), appearing in the security-role-ref - */ - ServletDesc servletDesc = null; - String servletName = null; - List roleRefs = null; - SecurityRoleRefDesc securityRoleRefDesc = null; - for (Iterator itServlet = servlets.iterator(); itServlet.hasNext();) { - servletDesc = (ServletDesc) itServlet.next(); - roleRefs = servletDesc.getSecurityRoleRefList(); - servletName = servletDesc.getServletName(); - for (Iterator itRoleRef = roleRefs.iterator(); itRoleRef.hasNext();) { - securityRoleRefDesc = (SecurityRoleRefDesc) itRoleRef.next(); - /* - * The deployment tools must call the addToRole method on the - * PolicyConfiguration object to add the WebRoleRefPermission - * object resulting from the translation to the role identified - * in the role-link appearing in the security-role-ref. - */ - Permission webRoleRefPermission = securityRoleRefDesc.getWebRoleRefPermission(); - - // Role has appear - rolesAppearedInSecurityRoleRef.add(securityRoleRefDesc.getRoleName()); - - try { - getPolicyConfiguration().addToRole(securityRoleRefDesc.getRoleLink(), webRoleRefPermission); - } catch (PolicyContextException pce) { - throw new PermissionManagerException("Can not add add permission '" + webRoleRefPermission - + "' to policy", pce); - } - } - } - - /* - * Additional WebRoleRefPermission objects must be added to the - * PolicyConfiguration as follows. For each servlet element in the - * deployment descriptor a WebRoleRefPermission must be added to each - * security-role whose name does not appear as the role-name in a - * security-role-ref within the servlet element. - */ - List securityRoles = webContainerDeploymentDesc.getSecurityRoleList(); - SecurityRoleDesc securityRoleDesc = null; - String securityRoleName = null; - - for (Iterator itServlet = servlets.iterator(); itServlet.hasNext();) { - servletDesc = (ServletDesc) itServlet.next(); - servletName = servletDesc.getServletName(); - - for (Iterator itSecurityRoles = securityRoles.iterator(); itSecurityRoles.hasNext();) { - securityRoleDesc = (SecurityRoleDesc) itSecurityRoles.next(); - securityRoleName = securityRoleDesc.getRoleName(); - // if role does not appear as the role-name in a - // security-role-ref - // need to create permission - if (!rolesAppearedInSecurityRoleRef.contains(securityRoleName)) { - - /* - * The name of each such WebRoleRefPermission must be the - * servlet-name of the corresponding servlet element. The - * actions (that is, reference) of each such - * WebRoleRefPermission must be the corresponding - * (non-appearing) role-name. The resulting permissions must - * be added to the corresponding roles by calling the - * addToRole method on the PolicyConfiguration object. - */ - Permission webRoleRefPermission = new WebRoleRefPermission(servletName, securityRoleName); - try { - getPolicyConfiguration().addToRole(securityRoleName, webRoleRefPermission); - } catch (PolicyContextException pce) { - throw new PermissionManagerException("Can not add add permission '" + webRoleRefPermission - + "' to policy", pce); - } - } - } - } - - /** - * For resolution B19 added for maintenance review, WebRoleRefPermission - * must be added with empty strings for every security role - */ - securityRoles = webContainerDeploymentDesc.getSecurityRoleList(); - for (Iterator itSecurityRoles = securityRoles.iterator(); itSecurityRoles.hasNext();) { - securityRoleDesc = (SecurityRoleDesc) itSecurityRoles.next(); - securityRoleName = securityRoleDesc.getRoleName(); - /** - * Add permission with empty name - * B19 resolution - */ - Permission webRoleRefPermission = new WebRoleRefPermission("", securityRoleName); - try { - getPolicyConfiguration().addToRole(securityRoleName, webRoleRefPermission); - } catch (PolicyContextException pce) { - throw new PermissionManagerException("Can not add add permission '" + webRoleRefPermission - + "' to policy", pce); - } - } - } - - /** - * Check the security for a given HttpServletRequest. - * @param request the http servlet request - * @param principalName name of the principal - * @param roles array of roles for this permission - * @return true if the permission is granted, else false - */ - public boolean checkWebUserDataPermission(final HttpServletRequest request, - final String principalName, - final String[] roles) { - - try { - ProtectionDomain protectionDomain = initPolicyContext(request, principalName, roles); - - //TODO : cache request to avoid creation of a new - // WebUserDatapermission each time - // See JACC 4.12 - WebUserDataPermission webUserDataPermission = new WebUserDataPermission(request); - boolean accessOK = getPolicy().implies(protectionDomain, webUserDataPermission); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Policy.implies result = " + accessOK); - } - return accessOK; - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't check web user data permission", e); - return false; - } - - } - - /** - * Check the security for a given HttpServletRequest. - * @param request the http servlet request - * @param principalName name of the principal - * @param roles array of roles for this permission - * @return true if the permission is granted, else false - */ - public boolean checkWebResourcePermission(final HttpServletRequest request, - final String principalName, - final String[] roles) { - try { - ProtectionDomain protectionDomain = initPolicyContext(request, principalName, roles); - - //TODO : cache request to avoid creation of a new - // WebResourcePermission each time - // See JACC 4.12 - WebResourcePermission webResourcePermission = new WebResourcePermission(request); - boolean accessOK = getPolicy().implies(protectionDomain, webResourcePermission); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Policy.implies result = " + accessOK); - } - return accessOK; - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't check web resource permission :" + e.getMessage()); - return false; - } - - } - - /** - * Check the security for a given HttpServletRequest. - * @param request the http servlet request - * @param servletName Name of the servlet - * @param principalName name of the principal - * @param roles array of roles for this permission - * @param roleName name of the role - * @return true if the permission is granted, else false - */ - public boolean checkWebRoleRefPermission(final HttpServletRequest request, - final String servletName, - final String principalName, - final String[] roles, - final String roleName) { - try { - - ProtectionDomain protectionDomain = initPolicyContext(request, principalName, roles); - - //TODO : cache request to avoid creation of a new - // WebRoleRefPermission each time - // See JACC 4.12 - WebRoleRefPermission webRoleRefPermission = new WebRoleRefPermission(servletName, roleName); - boolean accessOK = getPolicy().implies(protectionDomain, webRoleRefPermission); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Policy.implies result = " + accessOK); - } - return accessOK; - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't check web role ref permission :" + e.getMessage()); - return false; - } - - } - - /** - * Init the PolicyContext and return a protectionDomain. - * @param request the http servlet request - * @param principalName name of the principal - * @param roles array of roles for this permission - * @return the protection domain built with given arguments - * @throws URISyntaxException if the URI can't be built - * @throws MalformedURLException if the URL of the codesource can't be built - */ - private synchronized ProtectionDomain initPolicyContext(final HttpServletRequest request, - final String principalName, - final String[] roles) - throws URISyntaxException, MalformedURLException { - - // Set the policy context - PolicyContext.setContextID(getContextId()); - - // Configure ContextHandler - JPolicyContextHandlerData jPolicyContextHandlerData = JPolicyContextHandlerCurrent.getCurrent() - .getJPolicyContextHandlerData(); - if (jPolicyContextHandlerData == null) { - logger.log(BasicLevel.ERROR, "The Handler data retrieved is null !"); - return null; - } - jPolicyContextHandlerData.setHttpServletRequest(request); - PolicyContext.setHandlerData(jPolicyContextHandlerData); - - // Build Protection Domain with a codesource and array of principal - // We need to switch between URIs and URLs in order to escape spacing characters - String urlString = "file://" + getContextId(); - URL url; - try { - // Check if the URL is valid, therefore already escaped correctly - url = new URI(new URL(urlString).toString()).toURL(); - } catch(URISyntaxException e) { - // Given URL wasn't escaped correctly, escape spaces - url = new URI(new URL(urlString.replaceAll("\\ ", "%20")).toString()).toURL(); - } - CodeSource codesource = new CodeSource(url, (Certificate[]) null); - - // Existing mapping ? - String[] overridedRoles = JPolicyUserRoleMapping.getMappingForPrincipal(getContextId(), principalName); - String[] allRoles = roles; - if (overridedRoles != null) { - allRoles = overridedRoles; - } - - Principal[] principals = null; - if (allRoles != null) { - principals = new Principal[allRoles.length]; - for (int k = 0; k < allRoles.length; k++) { - principals[k] = new JPrincipal(allRoles[k]); - } - } - - return new ProtectionDomain(codesource, null, null, principals); - } - - /** - * Reset Deployment Descriptor. - */ - protected void resetDeploymentDesc() { - webContainerDeploymentDesc = null; - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/DefaultHttpContextImpl.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/DefaultHttpContextImpl.java deleted file mode 100644 index 27eee72009..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/DefaultHttpContextImpl.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.osgi.httpservice; - -import java.io.IOException; -import java.net.URL; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.osgi.framework.Bundle; -import org.osgi.service.http.HttpContext; - - -/** - * Default OSGI HttpContext returned by {@link HttpServiceImpl#createDefaultHttpContext()}. - * @author Guillaume Porcher - */ -public class DefaultHttpContextImpl implements HttpContext { - - /** - * Bundle that is used to get resources. - */ - private final Bundle bundle; - - /** - * Constructor. - * @param bundle the bundle that will be used to get resources. - */ - public DefaultHttpContextImpl(final Bundle bundle) { - this.bundle = bundle; - } - - /** - * Maps a name to a MIME type. - * - * Called by the Http Service to determine the MIME type for the name. For - * servlet registrations, the Http Service will call this method to support - * the ServletContext method getMimeType. For - * resource registrations, the Http Service will call this method to - * determine the MIME type for the Content-Type header in the response. - * - * @param file determine the MIME type for this name. - * @return null to indicate that the Http Service should determine the MIME type - * itself. - */ - public String getMimeType(final String file) { - return null; - } - - /** - * Maps a resource name to a URL. - * - *

    - * Called by the Http Service to map a resource name to a URL. For servlet - * registrations, Http Service will call this method to support the - * ServletContext methods getResource and - * getResourceAsStream. For resource registrations, Http Service - * will call this method to locate the named resource. - * The resource is mapped to a resource in - * the context's bundle via bundle.getResource(name) - * - * @param name the name of the requested resource - * @return URL that Http Service can use to read the resource or - * null if the resource does not exist. - */ - public URL getResource(final String name) { - return this.bundle.getResource(name); - } - - /** - * Handles security for the specified request. - *

    - * The Http Service calls this method prior to servicing the specified - * request. This method controls whether the request is processed in the - * normal manner or an error is returned. - * - * - * @param request the HTTP request - * @param response the HTTP response - * @return true if the request should be serviced, false - * if the request should not be serviced and Http Service will send - * the response back to the client. - * This implementation always returns true. - * @throws java.io.IOException may be thrown by this method. If this - * occurs, the Http Service will terminate the request and close - * the socket. - */ - public boolean handleSecurity(final HttpServletRequest request, final HttpServletResponse response) throws IOException { - return true; - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/HttpServiceFactory.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/HttpServiceFactory.java deleted file mode 100644 index 32aa9b9e8e..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/HttpServiceFactory.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.osgi.httpservice; - -import org.osgi.framework.Bundle; -import org.osgi.framework.ServiceFactory; -import org.osgi.framework.ServiceRegistration; -import org.ow2.jonas.web.base.BaseWebContainerService; - - -/** - * ServiceFactory to create {@link HttpService}. - * @param the web container service class. - * @author Guillaume Porcher - * @author Florent Benoit - */ -public abstract class HttpServiceFactory implements ServiceFactory { - - /** - * The web container service (to access catalina/jetty/... instance). - */ - private final T webContainerService; - - /** - * The name of the working directory. - */ - private String workDir; - - /** - * Constructor. - * @param webContainerService the web container service to use. - */ - public HttpServiceFactory(final T webContainerService) { - this.webContainerService = webContainerService; - } - - /** - * Creates a new {@link HttpService} object. - * - * The Framework invokes this method the first time the specified bundle requests - * a service object using the BundleContext.getService(ServiceReference) method. - * The service factory can then return a specific service object for each bundle. - * - * The Framework caches the value returned (unless it is null), and will return the - * same service object on any future call to BundleContext.getService from the same bundle. - * - * @param callerBundle The bundle using the service. - * @param registration The ServiceRegistration object for the service. - * @return An instance of HttpService. - * - */ - public Object getService(final Bundle callerBundle, final ServiceRegistration registration) { - webContainerService.startInternalWebContainer(); - return buildHttpServiceImpl(callerBundle, this.webContainerService); - } - - /** - * Build an implementation of the Http service. - * @param callerBundle The bundle using the service. - * @param webContainerService the web container service instance - * @return an implementation of the httpService - */ - protected abstract JOnASHttpService buildHttpServiceImpl(final Bundle callerBundle, final T webContainerService); - - /** - * Releases a service object. - * - * The Framework invokes this method when a service has been released by a bundle. - * The service object may then be destroyed. - * - * @param callerBundle The bundle releasing the service. - * @param registration The ServiceRegistration object for the service. - * @param service The service object returned by a previous call - * to the ServiceFactory.getService method. - */ - public void ungetService(final Bundle callerBundle, final ServiceRegistration registration, final Object service) { - ((JOnASHttpService) service).stop(); - } - - /** - * Set the name of the working directory. - * @param workDir The name of the working directory. - */ - public void setWorkDirectory(final String workDir) { - this.workDir = workDir; - } - - /** - * @return name of the working directory. - */ - protected String getWorkDirectory() { - return this.workDir; - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/JOnASHttpService.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/JOnASHttpService.java deleted file mode 100644 index 455e9f7e6d..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/JOnASHttpService.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.osgi.httpservice; - -import org.osgi.service.http.HttpService; - -/** - * Extends The http service to adds stop callback. - * @author Florent Benoit - */ -public interface JOnASHttpService extends HttpService { - - /** - * Allows to stop the service. - */ - void stop(); - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/OSGIResourcesServlet.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/OSGIResourcesServlet.java deleted file mode 100644 index 6d563c1afe..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/osgi/httpservice/OSGIResourcesServlet.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.osgi.httpservice; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URL; -import java.net.URLConnection; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.osgi.service.http.HttpContext; - -/** - * Servlet deployed to server when resources are registered with - * {@link HttpService#registerResources(String, String, HttpContext)}. - * @author Guillaume Porcher - */ -public class OSGIResourcesServlet extends HttpServlet { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = 63252674986896592L; - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * The base name of the resources that are registered. - */ - private final String baseName; - - /** - * Default constructor. - * @param httpContext The HttpContext used during servlet or resource - * registration. - * @param baseName The base name of the resources that are registered. - */ - public OSGIResourcesServlet(final HttpContext httpContext, final String baseName) { - this.httpContext = httpContext; - this.baseName = baseName; - } - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. A target resource name is constructed by adding - * baseName to request path. The resource URL is resolved by using - * {@link HttpContext#getResource(String)}. The contents of the resource is - * then returned to the client. - * @param req an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param resp an HttpServletResponse object that contains the response the - * servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the request - */ - @Override - protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { - String relativeName = req.getPathInfo(); - if (relativeName == null) { - relativeName = ""; - } - if (relativeName.startsWith("/")) { - relativeName = relativeName.substring(1); - } - - final String resourceName = this.baseName + "/" + relativeName; - - final URL resourceUrl = this.httpContext.getResource(resourceName); - - if (resourceUrl == null) { - // return error 404 - resp.sendError(HttpServletResponse.SC_NOT_FOUND); - return; - } - - final URLConnection connection = resourceUrl.openConnection(); - final String mimeType = connection.getContentType(); - resp.setContentType(mimeType); - final String encoding = connection.getContentEncoding(); - resp.setCharacterEncoding(encoding); - - final InputStream inStream = connection.getInputStream(); - final OutputStream outStream = resp.getOutputStream(); - try { - final byte[] buffer = new byte[1024]; - int length = 0; - int readSize = 0; - while ((readSize = inStream.read(buffer)) != -1) { - outStream.write(buffer, 0, readSize); - length += readSize; - } - resp.setContentLength(length); - } finally { - if (inStream != null) { - inStream.close(); - } - if (outStream != null) { - outStream.close(); - } - } - } - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a POST request. This method internally calls - * {@link #doGet(HttpServletRequest, HttpServletResponse)}. - * @param req an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param resp an HttpServletResponse object that contains the response the - * servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the request - */ - @Override - protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { - this.doGet(req, resp); - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/ContextInfo.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/ContextInfo.java deleted file mode 100644 index f8a85b445c..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/ContextInfo.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -/** - * Keep details on a context (like war file, isStarting, etc) - * @author Florent Benoit - */ -public class ContextInfo { - - /** - * War File. - */ - private String warFile = null; - - /** - * The context has been asked to start. - */ - private boolean starting = false; - - /** - * @return the war file associated to this context. - */ - public String getWarFile() { - return warFile; - } - - /** - * Sets the war File of this context. - * @param warFile the given war file. - */ - public void setWarFile(String warFile) { - this.warFile = warFile; - } - - /** - * @return true if this context has been requested and is starting - */ - public synchronized boolean isStarting() { - return starting; - } - - /** - * Sets the starting mode. - * @param starting if true, it means that the context will be loaded by the container. - */ - public synchronized void setStarting(boolean starting) { - this.starting = starting; - } - - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/CopyingStream.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/CopyingStream.java deleted file mode 100644 index 35d31cafe5..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/CopyingStream.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -import java.io.InputStream; -import java.io.OutputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Allow to copy inputstream of the client to the remote output stream. - * @author Florent Benoit - */ -public class CopyingStream extends Thread { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(CopyingStream.class); - - /** - * Input stream of the client. - */ - private InputStream inputStream; - - /** - * Output stream of the remote connection. - */ - private OutputStream outputStream; - - /** - * Bytes to append on the remote output stream. - */ - private ByteArrayOutputStream byteArrayOutputStream; - - /** - * Link to the socket handler. - */ - private HttpSocketHandler socketHandler = null; - - - /** - * Build a new copying stream with the given parameters. - * @param socketHandler object handling the client socket - * @param byteArrayOutputStream the bytes to add on the remote connection - * @param inputStream the client's input stream - * @param outputStream the remote connection output stream - */ - public CopyingStream(HttpSocketHandler socketHandler, ByteArrayOutputStream byteArrayOutputStream, InputStream inputStream, OutputStream outputStream) { - this.socketHandler = socketHandler; - this.byteArrayOutputStream = byteArrayOutputStream; - this.inputStream = inputStream; - this.outputStream = outputStream; - } - - /** - * Send the bytes of the byte array stream and then send all the client's input stream. - */ - public void run() { - byte[] buf = new byte[1024]; - - // First, add the stored bytes - byte[] headerBytes = byteArrayOutputStream.toByteArray(); - try { - outputStream.write(headerBytes, 0, headerBytes.length); - } catch (IOException e) { - logger.debug("Cannot write bytes", e); - } - - // Send to output stream, the input stream data - int count; - try { - while (((count = inputStream.read(buf)) > 0)) { - outputStream.write(buf, 0, count); - } - } catch (Exception e) { - socketHandler.cleanup("Unable to handle data from server to the client", e); - } - } -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HTTPResponse.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HTTPResponse.java deleted file mode 100644 index 4249856699..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HTTPResponse.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.io.IOException; -import java.util.Date; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Allows to define some HTTP response - * @author Florent Benoit - */ -public class HTTPResponse { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(HTTPResponse.class); - - /** - * Default status code. - */ - private static final String DEFAULT_STATUS_CODE = "HTTP/1.0 200 OK"; - - /** - * Carriage return. - */ - final static String CRLF = "\r\n"; - - /** - * Body of the http answer. - */ - private StringBuilder body = null; - - /** - * HTML Title. - */ - private String title = "Http/OnDemandProxy Service"; - - /** - * Status code (200, 404, ...). - */ - private String statusCode = DEFAULT_STATUS_CODE; - - /** - * Default is text/html. - */ - private String contentType = "text/html; charset=ISO-8859-1"; - - - /** - * If body should be an array of bytes. - */ - - private byte[] bodyBytes = null; - - /** - * Needs to send a refresh javascript call ? - */ - private boolean refresh = false; - - /** - * Build a new object with the default status code. - */ - public HTTPResponse() { - this(DEFAULT_STATUS_CODE); - } - - /** - * Build an answer with the given status code. - * @param statusCode given code - */ - public HTTPResponse(String statusCode) { - this.statusCode = statusCode; - this.body = new StringBuilder(); - } - - /** - * Sets the title. - * @param title given HTML title - */ - public void setTitle(String title) { - this.title = title; - } - - /** - * Append text into the body. - * @param string the given string object - */ - public void println(String string) { - body.append(string); - body.append("\n"); - } - - /** - * Append text into the body. - * @param string the given string object - */ - public void print(String string) { - body.append(string); - } - - /** - * Refresh mode is enabled or disabled. - * @param refresh if true, send in the answer a refresh code - */ - public void setRefresh(boolean refresh) { - this.refresh = refresh; - } - - /** - * Gets the array of bytes of this answer. - * @return the bytes of the answer - */ - public byte[] getContent() { - - // Body - StringBuilder bodyContent = new StringBuilder(); - bodyContent.append(""); - if (refresh) { - bodyContent.append(""); - } - bodyContent.append(""); - bodyContent.append(title); - bodyContent.append(""); - bodyContent.append(""); - bodyContent.append(""); - bodyContent.append("
    "); - bodyContent.append(body.toString()); - bodyContent.append("
    "); - bodyContent.append(""); - - // Header - StringBuilder headerContent = new StringBuilder(); - headerContent.append(statusCode); - headerContent.append(CRLF); - headerContent.append("Content-Type: "); - headerContent.append(contentType); - headerContent.append(CRLF); - headerContent.append("Date: "); - headerContent.append(new Date()); - headerContent.append(CRLF); - headerContent.append("Cache-Control: no-cache"); - headerContent.append(CRLF); - headerContent.append("Server: JOnAS/HttpOnDemand Proxy"); - headerContent.append(CRLF); - headerContent.append("Content-Length: "); - if (bodyBytes != null) { - headerContent.append(bodyBytes.length); - } else { - headerContent.append(bodyContent.toString().getBytes().length); - } - headerContent.append(CRLF); - - - // Write message (header + body) - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - PrintStream printStream = new PrintStream(byteArrayOutputStream); - - - if (bodyBytes != null) { - try { - byteArrayOutputStream.write(headerContent.toString().getBytes()); - byteArrayOutputStream.write(CRLF.getBytes()); - byteArrayOutputStream.write(bodyBytes); - } catch (IOException e) { - logger.error("Unable to write bytes", e); - } - } else { - // Header - printStream.print(headerContent); - - // empty line between header and body - printStream.print(CRLF); - - // then body - printStream.print(bodyContent); - } - - // Get bytes of the stream - byte[] messageBytes = byteArrayOutputStream.toByteArray(); - try { - byteArrayOutputStream.close(); - } catch (IOException e) { - throw new IllegalStateException("Unable to get bytes", e); - } - - // send it back - return messageBytes; - } - - public void setContentType(String contentType) { - this.contentType = contentType; - } - - public void setBodyBytes(byte[] bodyBytes) { - this.bodyBytes = bodyBytes; - } - - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxy.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxy.java deleted file mode 100644 index c39dfc3496..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxy.java +++ /dev/null @@ -1,443 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.SocketException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.util.archive.api.ArchiveException; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; -import org.ow2.util.xml.DocumentParser; -import org.ow2.util.xml.DocumentParserException; -import org.ow2.util.xml.XMLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * This class provides proxy mechanism.
    - * This is used to intercept requests and then start the web container or deploy the associated war file. - * @author Florent Benoit - */ -public class HttpOnDemandProxy implements Runnable { - - /** - * Thread count (to be written in the Thread name). - */ - private static int counter = 0; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(HttpOnDemandProxy.class); - - /** - * Web container service. - */ - private BaseWebContainerService webContainerService; - - /** - * Port number. - */ - private int httpPortNumber = 0; - - /** - * Redirect Port number. - */ - private int redirectPortNumber = 0; - - /** - * Server socket (for handling clients). - */ - private ServerSocket serverSocket = null; - - /** - * Infinite loop for waiting clients ? - */ - private boolean listeningClients = true; - - - /** - * Map between URL context and info about this context. - */ - private Map contextMapping = null; - - - /** - * Default constructor. - */ - public HttpOnDemandProxy() { - this.contextMapping = new HashMap(); - } - - - /** - * Start the thread for this service. - */ - public void run() { - // infinite loop until that the service is stopped - while (this.listeningClients) { - - // Accepting connections... - Socket socket; - try { - socket = serverSocket.accept(); - } catch (IOException e) { - // Exception but if we're no longer listening, just exit - if (!listeningClients) { - break; - } - logger.error("Unable to accept connections", e); - continue; - } - - // invalid client - if (socket == null) { - continue; - } - - // Handle the request - HttpSocketHandler handler = null; - try { - handler = new HttpSocketHandler(this, socket); - } catch (HttpOnDemandProxyException e) { - logger.error("Unable to handle connection", e); - } - - // Socket present, we can handle the connection - if (handler != null) { - // Handle the request in a separate thread - Thread thread = new Thread(handler); - thread.setName(handler.getClass().getName() + "-" + (counter++)); - thread.start(); - } - } - } - - /** - * Start this component. - * @throws HttpOnDemandProxyException if start-up failed - */ - public void enable() throws HttpOnDemandProxyException { - - // Create server socket - try { - this.serverSocket = new ServerSocket(httpPortNumber); - } catch (IOException e) { - throw new ServiceException("Cannot use the given port number '" + httpPortNumber + "'.", e); - } - - // Reuse address - try { - serverSocket.setReuseAddress(true); - } catch (SocketException e) { - throw new ServiceException("Cannot set setReuseAddress mode", e); - } - - // Start thread - new Thread(this).start(); - - // debug info - logger.debug("Listening on ''{0}'' port number", httpPortNumber); - } - - /** - * Stop the component - * @throws HttpOnDemandProxyException service stopping failed - */ - public void disable() throws HttpOnDemandProxyException { - - // We're no longer accepting clients - this.listeningClients = false; - - // Stop the server socket - if (serverSocket != null) { - try { - serverSocket.close(); - } catch (IOException e) { - logger.error("Unable to close server socket", e); - } - } - - } - - /** - * @return the http port number used by the proxy. - */ - public int getHttpPortNumber() { - return httpPortNumber; - } - - /** - * Sets the proxy port number. - * @param httpPortNumber the proxy port number - */ - public void setHttpPortNumber(final int httpPortNumber) { - this.httpPortNumber = httpPortNumber; - } - - /** - * @return the server socket - */ - public ServerSocket getServerSocket() { - return serverSocket; - } - - /** - * Sets the web container service that is linked to this component. - * @param webContainerService the service instance - */ - public void setWebContainerService(final BaseWebContainerService webContainerService) { - this.webContainerService = webContainerService; - } - - /** - * @return the web container service instance. - */ - public BaseWebContainerService getWebContainerService() { - return webContainerService; - } - - /** - * Starts the web container. - * @throws JWebContainerServiceException if container is not started - */ - public void startWebContainer() throws JWebContainerServiceException { - webContainerService.startInternalWebContainer(); - } - - /** - * @return the redirect port number (internal web container port) - */ - public int getRedirectPortNumber() { - return redirectPortNumber; - } - - /** - * Sets the redirect port number (internal web container port) - * @param redirectPortNumber given port number - */ - public void setRedirectPortNumber(final int redirectPortNumber) { - this.redirectPortNumber = redirectPortNumber; - } - - /** - * Checks if the context is available (can be started or not) - * @param context the name of the context - * @return true if context is available - */ - public boolean isAvailableContext(final String context) { - return contextMapping.get(context) != null; - } - - /** - * @param context the given context used to get info - * @return data on the given context (or null if not found) - */ - public ContextInfo getContextInfo(final String context) { - return contextMapping.get(context); - } - - - /** - * Checks if the context is ready to be called by clients - * @param context the given context name - * @return true if it is deployed - */ - public boolean isContextDeployed(final String context) { - ContextInfo contextInfo = contextMapping.get(context); - - // true if not null and deployed - return contextMapping.get(context) != null && webContainerService.isWarLoaded(contextInfo.getWarFile()); - } - - /** - * Called by the deployer if this proxy is enabled. It will store the data for the given war file. - * @param warFile the given file to deploy - * @throws HttpOnDemandProxyException if the file cannot be registered - */ - public void addWar(final WARDeployable war) throws HttpOnDemandProxyException { - - // Get the archive - IArchive archive = war.getArchive(); - - // On-Demand Feature enabled in the jonas-web.xml file ? - boolean onDemandEnabled = false; - - // Value of the context - String contextRoot = null; - URL webxmlURL = null; - try { - webxmlURL = archive.getResource("WEB-INF/jonas-web.xml"); - if (webxmlURL != null) { - // There is an entry - // analyze the stream - InputStream is; - try { - is = webxmlURL.openStream(); - } catch (IOException e) { - throw new HttpOnDemandProxyException("Cannot analyze the given war file", e); - } - // Get document - Document document; - try { - document = DocumentParser.getDocument(is, false, null); - } catch (DocumentParserException e) { - throw new HttpOnDemandProxyException("Cannot analyze the given war file", e); - } - - // Root element = - Element jonasWebAppElement = document.getDocumentElement(); - - // get context-root if defined - contextRoot = XMLUtils.getStringValueElement(jonasWebAppElement, "context-root"); - - // get on-demand if defined - onDemandEnabled = Boolean.parseBoolean(XMLUtils.getStringValueElement(jonasWebAppElement, "on-demand")); - - // Handle special case of root context - if ("/".equals(contextRoot)) { - contextRoot = ""; - } - } - } catch (ArchiveException e) { - throw new HttpOnDemandProxyException("Cannot get resource from war file", e); - } finally { - archive.close(); - } - - // This archive has not enabled the on-demand feature in the jonas-web.xml file - // Deploy now the archive without onDemand mode - if (!onDemandEnabled) { - logger.debug("The war file ''{0}'' has not the on-demand flag enabled. WEB-INF/jonas-web.xml path is ''{1}''", archive.getName(), webxmlURL); - try { - webContainerService.registerWar(war); - } catch (JWebContainerServiceException e) { - throw new HttpOnDemandProxyException("Unable to deploy the war file '" + war + "'.", e); - } - // this is a redirect, so stop the execution here - return; - } - - - // Compute context name by using the filename if not found in jonas-web.xml file - if (contextRoot == null) { - contextRoot = archive.getName(); - if (contextRoot.endsWith(".war")) { - contextRoot = contextRoot.substring(0, contextRoot.length() - 4); - } - } - - // ContextInfo present ? - ContextInfo existingContextInfo = contextMapping.get(contextRoot); - if (existingContextInfo != null) { - throw new HttpOnDemandProxyException("Cannot register the war File '" + archive.getName() - + "' with context '" + contextRoot + "' as it is already in use for the war File '" - + existingContextInfo.getWarFile() + "'"); - } - - // Build data - ContextInfo contextInfo = new ContextInfo(); - contextInfo.setWarFile(getAbsoluteFilename(war)); - - - - // Add the mapping --> context Info - contextMapping.put(contextRoot, contextInfo); - - // info - logger.info("The war file ''{0}'' is available on demand at the context /{1}", archive.getName(), contextRoot); - } - - /** - * Convert a Deployable into an absolute filename. - * @param deployable Deployable to convert - * @return the absolute path of the deployable - * @throws HttpOnDemandProxyException if URL cannot be extracted from the archive - */ - private String getAbsoluteFilename(WARDeployable deployable) throws HttpOnDemandProxyException { - - URL url = null; - try { - url = deployable.getArchive().getURL(); - } catch (ArchiveException e) { - throw new HttpOnDemandProxyException("Cannot extract URL from " + deployable, e); - } - File file = URLUtils.urlToFile(url); - return file.getAbsolutePath(); - - } - - /** - * Un-register the given war file - * @param war the file to undeploy - */ - public void removeWar(final WARDeployable war) throws HttpOnDemandProxyException { - - String warFile = getAbsoluteFilename(war); - - // Remove the associated context if found - Set> entries = contextMapping.entrySet(); - String context = null; - - // For each entry, search a matching context (same war file) - if (entries != null) { - for (Map.Entry entry : entries) { - if (warFile.equals(entry.getValue().getWarFile())) { - context = entry.getKey(); - break; - } - } - } - - // Context is found, remove info on this context - if (context != null) { - contextMapping.remove(context); - } - - // War loaded by the container, remove it - if (webContainerService.isWarLoaded(warFile)) { - webContainerService.unRegisterWar(war); - } - logger.debug("Unregistering war file ''{0}''", warFile); - } - - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxyException.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxyException.java deleted file mode 100644 index 31126ebc6b..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpOnDemandProxyException.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -/** - * Exception thrown if there is a problem with the HttpOnDemand proxy. - * @author Florent Benoit - */ -public class HttpOnDemandProxyException extends Exception { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -1013568505738598722L; - - /** - * Build a new Proxy exception with the given message. - * @param message the error message - */ - public HttpOnDemandProxyException(final String message) { - super(message); - } - - /** - * Build a new Exception with the given message and given exception - * @param message the given error message - * @param t the exception - */ - public HttpOnDemandProxyException(final String message, final Throwable t) { - super(message, t); - } - -} diff --git a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpSocketHandler.java b/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpSocketHandler.java deleted file mode 100644 index 63fb3acda7..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/java/org/ow2/jonas/web/base/proxy/HttpSocketHandler.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.base.proxy; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; -import java.rmi.RemoteException; -import java.util.Arrays; - -import org.ow2.jonas.service.ServiceException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Class that is handling the client socket. - * @author Florent Benoit - */ -public class HttpSocketHandler implements Runnable { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(HttpSocketHandler.class); - - /** - * Thread count. - */ - private static int counter = 0; - - /** - * Link to the OnDemand service. - */ - private HttpOnDemandProxy onDemandProxy = null; - - /** - * Client Socket. - */ - private Socket clientSocket = null; - - /** - * Client socket input stream. - */ - private InputStream clientInputStream = null; - - /** - * Client socket output stream. - */ - private OutputStream clientOutputStream = null; - - /** - * Remote connection output stream. - */ - private OutputStream remoteOutputStream = null; - - /** - * Remote connection input stream. - */ - private InputStream remoteInputStream = null; - - /** - * A request has been sent to the web container in order to be started ? - */ - private boolean webContainerStartRequested = false; - - - /** - * Create a new handler for the given socket. - * @param onDemandProxy the http on demand proxy - * @param clientSocket the given client socket - * @throws HttpOnDemandProxyException if unable to get streams - */ - public HttpSocketHandler(final HttpOnDemandProxy onDemandProxy, final Socket clientSocket) - throws HttpOnDemandProxyException { - this.onDemandProxy = onDemandProxy; - this.clientSocket = clientSocket; - - - // Get client's input stream - try { - this.clientInputStream = clientSocket.getInputStream(); - } catch (IOException e) { - throw new HttpOnDemandProxyException("Cannot get input stream", e); - } - - // Get client's output stream - try { - this.clientOutputStream = clientSocket.getOutputStream(); - } catch (IOException e) { - throw new HttpOnDemandProxyException("Cannot get output stream", e); - } - } - - /** - * Analyze the request sent by the client. - * @throws HttpOnDemandProxyException if request cannot be analyzed - */ - protected void analyzeRequest() throws HttpOnDemandProxyException { - - // Analyze stream in order to get the context - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - - // The request has been found ? - boolean requestFound = false; - - // Initialize data - int bytesRead; - byte[] buffer = new byte[128]; - - // First line submitted by the client - String firstLine = null; - try { - while (!requestFound && (bytesRead = clientInputStream.read(buffer)) > 0) { - // Search if we've the CRLF - String line = new String(buffer); - String[] splitLines = line.split("\r\n"); - - // Keep the analyzed bytes for later. - byteArrayOutputStream.write(buffer, 0, bytesRead); - - // We've a first line, keep it ? - if (splitLines.length >= 1) { - firstLine = splitLines[0]; - logger.debug("Request is: ''{0}''", firstLine); - requestFound = true; - } - } - } catch (IOException e) { - cleanup("Unable to handle request", e); - throw new ServiceException("Unable to handle request", e); - } - - // Wrong request - if (firstLine == null || !requestFound) { - cleanup("Invalid header"); - return; - } - - // Analyse context asked - String[] args = firstLine.split(" "); - String contextValue = null; - - String askedURL = null; - - if (args.length > 1) { - // get second token (line is like : GET /myContext/.... HTTP1/0) - askedURL = args[1]; - - // Request should begin by a / - if (askedURL.startsWith("/")) { - // search the second / or go to the end - int index = askedURL.substring(1).indexOf("/"); - if (index == -1) { - // take the whole part - contextValue = askedURL.substring(1); - } else { - // extract the part - contextValue = askedURL.substring(1, index + 1); - } - } - - } - - if (contextValue == null) { - logger.warn("Unable to find context in the given request ''{0}''", firstLine); - } - - // Analyze the request and start the web container if not started or deploy the module if not started. - - // Handle special requests - if ("jonasOnDemandProxy".equals(contextValue)) { - if ("/jonasOnDemandProxy/wait.gif".equals(askedURL)) { - sendWaitGif(); - } - return; - } - - - // Check if web container is launched ? - if (!onDemandProxy.getWebContainerService().isInternalContainerStarted()) { - - // Redirect to a page telling that web container is starting... - webContainerIsStarting(); - - // Start request not yet asked - synchronized (this) { - if (!webContainerStartRequested) { - webContainerStartRequested = true; - startWebContainer(); - } - } - return; - } - - - - // We know the context, check if it is available on our list - if (contextValue != null) { - - - - logger.debug("Extracted context ''{0}'' from the line", contextValue, firstLine); - - // managed by ourself - if (onDemandProxy.isAvailableContext(contextValue)) { - // Not yet deployed - if (!onDemandProxy.isContextDeployed(contextValue)) { - - // Get Context info - ContextInfo contextInfo = onDemandProxy.getContextInfo(contextValue); - - // needs to start or not the application ? - boolean startApplication = false; - - // not yet send a start request ? - if (!contextInfo.isStarting()) { - startApplication = true; - contextInfo.setStarting(true); - } - - // Redirect to a page telling that the context is starting... - contextIsStarting(contextValue); - - // Needs to start the application - if (startApplication) { - - // get war file - String warFile = contextInfo.getWarFile(); - - // start the context - try { - onDemandProxy.getWebContainerService().registerWar(warFile); - } catch (RemoteException e) { - cleanup("Unable to deploy application '" + warFile + "'.", e); - } - } - return; - - } - } - } - - // Now connect on the web container - Socket remoteServerSocket; - try { - remoteServerSocket = new Socket(onDemandProxy.getServerSocket() - .getInetAddress(), onDemandProxy.getRedirectPortNumber()); - } catch (IOException e) { - // exception while connecting to the remote host - cleanup("Unable to connect to the remote host '" + onDemandProxy.getServerSocket() - .getInetAddress() + "' on the port number '" + onDemandProxy.getRedirectPortNumber() + "'", e); - return; - } - - // Get streams of the remote host - try { - remoteOutputStream = remoteServerSocket.getOutputStream(); - } catch (IOException e) { - cleanup("Unable to get remote stream of server socket '" + remoteServerSocket + "'", e); - return; - } - - // remote input stream - try { - remoteInputStream = remoteServerSocket.getInputStream(); - } catch (IOException e) { - cleanup("Unable to get remote stream of server socket '" + remoteServerSocket + "'", e); - return; - } - - // Define a thread that will copy stream of the client to the remote stream - // It will first send the analyzed bytes, then it will send the remaining bytes - CopyingStream t = new CopyingStream(this, byteArrayOutputStream, clientInputStream, remoteOutputStream); - t.setName(t.getClass().getName() + "-" + (counter++)); - t.start(); - - // Copy the answer of the remote host to the client. - byte[] buf = new byte[1024]; - int count; - try { - while (((count = remoteInputStream.read(buf)) > 0)) { - clientOutputStream.write(buf, 0, count); - } - } catch (Exception e) { - cleanup("Unable to handle data from server to the client", e); - return; - } - - cleanup(); - } - - - public void cleanup() { - - try { - if (clientInputStream != null) { - clientInputStream.close(); - } - } catch (IOException e) { - logger.debug("Unable to close stream", e); - } - - try { - if (clientOutputStream != null) { - clientOutputStream.close(); - } - } catch (IOException e) { - logger.debug("Unable to close stream", e); - } - - try { - if (remoteOutputStream != null) { - remoteOutputStream.close(); - } - } catch (IOException e) { - logger.debug("Unable to close stream", e); - } - - try { - if (remoteInputStream != null) { - remoteInputStream.close(); - } - } catch (IOException e) { - logger.debug("Unable to close stream", e); - } - - try { - clientSocket.close(); - } catch (IOException e) { - logger.debug("Unable to close socket", e); - } - - } - - /** - * Send an error message. - * @param message the given error message - */ - public void cleanup(final String message) { - cleanup(message, null); - } - - /** - * Send an error message with its exception - * @param message the given message - * @param exception the given exception - */ - public void cleanup(final String message, final Exception exception) { - HTTPResponse httpResponse = new HTTPResponse("HTTP/1.0 500"); - - httpResponse.println(message); - - httpResponse.println("
    "); - if (exception != null) { - httpResponse.println(Arrays.asList(exception.getStackTrace()).toString()); - } - - sendBytesToClient(httpResponse); - } - - /** - * Send the given response to the client. - * @param httpResponse the given response - */ - protected void sendBytesToClient(final HTTPResponse httpResponse) { - - // write content - try { - clientOutputStream.write(httpResponse.getContent()); - clientOutputStream.flush(); - } catch (IOException ioe) { - logger.debug("Unable to send error message. Stream may be already closed.", ioe); - } - - // Needs to shutdown streams - try { - clientSocket.shutdownOutput(); - } catch (IOException e) { - logger.debug("Unable to close the socket", e); - } - } - - /** - * Asked to start the web container - */ - protected void startWebContainer() { - onDemandProxy.startWebContainer(); - } - - /** - * Tell to the client that the web container is starting. - */ - protected void webContainerIsStarting() { - // Send to the client that the web container is starting... - HTTPResponse httpResponse = new HTTPResponse(); - httpResponse.setRefresh(true); - String txt = "The HTTP Web Container is starting. Please wait."; - httpResponse.setTitle(txt); - - txt = "

    " + txt; - - httpResponse.print(txt); - sendBytesToClient(httpResponse); - } - - /** - * Send the wait gif - */ - protected void sendWaitGif() { - String waitGifResource = "/" + HttpSocketHandler.class.getPackage().getName().replace(".", "/") + "/wait.gif"; - InputStream is = null; - - // Send to the client the given gif - HTTPResponse httpResponse = new HTTPResponse(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - is = HttpSocketHandler.class.getClassLoader().getResourceAsStream(waitGifResource); - httpResponse.setContentType("image/gif"); - httpResponse.setRefresh(true); - - - byte[] buf = new byte[1024]; - int count; - try { - while (((count = is.read(buf)) > 0)) { - baos.write(buf, 0, count); - } - } catch (Exception e) { - logger.error("Cannot get data", e); - } - } finally { - try { - if (is != null) { - is.close(); - } - } catch (IOException e) { - logger.debug("unable to close", e); - } - } - httpResponse.setBodyBytes(baos.toByteArray()); - sendBytesToClient(httpResponse); - } - - - /** - * Tell to the client that the context is starting. - */ - protected void contextIsStarting(final String contextName) { - - // Send to the client that the module is starting... - HTTPResponse httpResponse = new HTTPResponse(); - httpResponse.setRefresh(true); - String txt = "The .war file associated with the context '/" + contextName + "' is loading. Please wait."; - httpResponse.setTitle(txt); - - txt = "

    " + txt; - - httpResponse.print(txt); - sendBytesToClient(httpResponse); - } - - - /** - * Handle the request on the selected socket. - */ - public void run() { - try { - analyzeRequest(); - } catch (HttpOnDemandProxyException e) { - logger.error("Unable to handle request", e); - } - - - } -} diff --git a/jonas/modules/services/web-container/base/core/src/main/resources/META-INF/jonas-web-container-base-core.bnd b/jonas/modules/services/web-container/base/core/src/main/resources/META-INF/jonas-web-container-base-core.bnd deleted file mode 100644 index 5f7bdb096e..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/resources/META-INF/jonas-web-container-base-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Export container -Export-Package org.ow2.jonas.web.base.* - -Import-Package javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - javax.persistence;version="[1.0.0,2.0.0]",\ - * \ No newline at end of file diff --git a/jonas/modules/services/web-container/base/core/src/main/resources/metadata.xml b/jonas/modules/services/web-container/base/core/src/main/resources/metadata.xml deleted file mode 100644 index 465016d9d7..0000000000 --- a/jonas/modules/services/web-container/base/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/base/core/src/main/resources/org/ow2/jonas/web/base/proxy/wait.gif b/jonas/modules/services/web-container/base/core/src/main/resources/org/ow2/jonas/web/base/proxy/wait.gif deleted file mode 100644 index 4a6244fde29853924a5e7e113f9fd742e9b5dbca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3711 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 - - - - org.ow2.jonas - jonas-web-container - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-base - pom - JOnAS :: Services :: Web Container :: Base - - Abstract Web Container used by different implementations - - - core - ant - - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/pom.xml b/jonas/modules/services/web-container/jetty/6.1.x/ant/pom.xml deleted file mode 100644 index 99ef1e8bfe..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-web-container-jetty-6.1 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-jetty-6.1-ant - bundle - JOnAS :: Services :: Web Container :: Jetty :: 6.1.x :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-jetty-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6.java b/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6.java deleted file mode 100644 index 8e9ca6fd03..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty6; - -import org.ow2.jonas.antmodular.jonasbase.web.jetty.Jetty; - -/** - * Support Jetty 6 Connector Configuration. - * @author Jeremy Cazaux - */ -public class Jetty6 extends Jetty { - - /** - * Name of Jetty configuration file. - */ - public static final String JETTY_CONF_FILE = "jetty6.xml"; - - /** - * Name of the implementation class for Jetty. - */ - private static final String JETTY_SERVICE = "org.ow2.jonas.web.jetty6.Jetty6Service"; - - /** - * Default Constructor. - */ - public Jetty6() { - super(); - } - - /** - * Set the port number for the WebContainer - * @param portNumber The port to set. - */ - @Override - public void setPort(String portNumber) { - super.setPort(portNumber,JETTY_CONF_FILE, "jetty"); - } - - /** - * Configure Jetty6's connectors - * @param jetty6Connectors Jetty6 Connectors - */ - public void addConfiguredConnectors(final Jetty6Connectors jetty6Connectors) { - this.tasks.add(jetty6Connectors); - } - - /** - * Execute this task - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.JETTY_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6Connectors.java b/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6Connectors.java deleted file mode 100644 index 097427d9f0..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty6/Jetty6Connectors.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty6; - -import org.ow2.jonas.antmodular.jonasbase.web.jetty.JettyHttps; -import org.ow2.jonas.antmodular.web.base.Ajp; -import org.ow2.jonas.antmodular.web.base.Http; -import org.ow2.jonas.antmodular.jonasbase.web.jetty.JettyConnectors; - -/** - * Configure Jetty 6 connector - * @author Jeremy Cazaux - */ -public class Jetty6Connectors extends JettyConnectors { - - public Jetty6Connectors() { - super(); - } - - public void addConfiguredHttp(Http http) { - super.addConfiguredHttp(http, Jetty6.JETTY_CONF_FILE, Jetty6.INFO); - } - - /** - * Configure a JettyHTTPS Connector. - * @param jettyHttps JettyHTTPS Configuration. - */ - @Override - public void addConfiguredHttps(final JettyHttps jettyHttps) { - super.addConfiguredHttps(jettyHttps, Jetty6.JETTY_CONF_FILE); - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - @Override - public void addConfiguredAjp(final Ajp ajp) { - super.addConfiguredAjp(ajp, Jetty6.JETTY_CONF_FILE); - } - - @Override - public void execute() { - super.execute(); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/antlib-jetty6.xml b/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/antlib-jetty6.xml deleted file mode 100644 index 021ea36f8f..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/antlib-jetty6.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.properties b/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.properties deleted file mode 100644 index 354816a294..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.properties +++ /dev/null @@ -1 +0,0 @@ -webcontainer.service.defaultname=jetty6 \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.xml b/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.xml deleted file mode 100644 index f6279b3208..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/ant/src/main/resources/build-jetty6.xml +++ /dev/null @@ -1,21 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/pom.xml b/jonas/modules/services/web-container/jetty/6.1.x/core/pom.xml deleted file mode 100644 index 36f79e3075..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/pom.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - jonas-web-container-jetty-6.1 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-jetty-6.1-core - bundle - JOnAS :: Services :: Web Container :: Jetty :: 6.1.x :: Core - - - - org.ow2.bundles - ow2-util-log - - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - org.mortbay.jetty - jetty - - - org.mortbay.jetty - servlet-api-2.5 - - - - - - - org.mortbay.jetty - jsp-2.1-glassfish - - - - org.mortbay.jetty - jetty-ajp - - - - org.mortbay.jetty - jetty-annotations - - - - org.mortbay.jetty - jetty-html - - - - - org.apache.tomcat - catalina - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - web-jetty6 - - - org.mortbay.jetty - jetty-util - ${jetty.version} - server - - - org.mortbay.jetty - jetty - ${jetty.version} - server - - - org.ow2.jonas - jonas-web-container-jetty-6.1-core - ${project.version} - server - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/AnnotationProcessorServletHandler.java b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/AnnotationProcessorServletHandler.java deleted file mode 100644 index 9d3a25409a..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/AnnotationProcessorServletHandler.java +++ /dev/null @@ -1,288 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty6; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.List; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.naming.NamingException; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceUnit; -import javax.servlet.Filter; -import javax.servlet.Servlet; -import javax.xml.ws.WebServiceRef; - -import org.mortbay.jetty.servlet.ServletHandler; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -import org.ow2.util.ee.metadata.common.api.enc.IInjectionTargetEnc; - -/** - * This class manages the injection of EJB annotations. This classes is based on - * the Jetty Plus ServletHandler and the Tomcat 6 DefaultAnnotationProcessor - * enhanced in JOnAS. - * @author Florent Benoit - */ -public class AnnotationProcessorServletHandler extends ServletHandler { - - /** - * Env environment. - */ - private javax.naming.Context context = null; - - /** - * Annotation analysis is disabled or not ? - */ - private boolean disabledAnnotation = false; - - /** - * ENC Binding holder. - */ - private IENCBindingHolder encBindingHolder = null; - - /** - * Default constructor with the given ENC env. - * @param context - */ - public AnnotationProcessorServletHandler(final javax.naming.Context context) { - this.context = context; - } - - /** - * Perform injection on the given filter. - * @see org.mortbay.jetty.servlet.ServletHandler#customizeFilter(javax.servlet.Filter) - */ - @Override - public Filter customizeFilter(final Filter filter) throws Exception { - processAnnotations(filter); - return super.customizeFilter(filter); - } - - /** - * Perform injection on the given servlet. - * @see org.mortbay.jetty.servlet.ServletHandler#customizeServlet(javax.servlet.Servlet) - */ - @Override - public Servlet customizeServlet(final Servlet servlet) throws Exception { - processAnnotations(servlet); - return super.customizeServlet(servlet); - } - - /** - * Inject resources in specified instance. - */ - public void processAnnotations(final Object instance) throws IllegalAccessException, InvocationTargetException, - NamingException { - - if (context == null) { - // No resource injection - return; - } - - Class clazz = instance.getClass(); - - while (clazz != null) { - // Initialize fields annotations - Field[] fields = clazz.getDeclaredFields(); - - for (int i = 0; i < fields.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List fieldInjections = encBindingHolder.getFieldInjectionTargets(clazz.getName()); - if (fieldInjections != null) { - for (IInjectionTargetEnc fieldInjection : fieldInjections) { - // found a matching field - if (fields[i].getName().equals(fieldInjection.getName())) { - lookupFieldResource(context, instance, fields[i], fieldInjection.getEncName(), clazz); - } - } - } - } - - if (!disabledAnnotation) { - if (fields[i].isAnnotationPresent(Resource.class)) { - Resource annotation = fields[i].getAnnotation(Resource.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(EJB.class)) { - EJB annotation = fields[i].getAnnotation(EJB.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = fields[i].getAnnotation(WebServiceRef.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = fields[i].getAnnotation(PersistenceContext.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = fields[i].getAnnotation(PersistenceUnit.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - - Annotation[] annotations = fields[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupFieldResource(context, instance, fields[i], "BundleContext", clazz); - } - } - } - - } - } - - // Initialize methods annotations - Method[] methods = clazz.getDeclaredMethods(); - for (int i = 0; i < methods.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List methoddInjections = encBindingHolder.getMethodInjectionTargets(clazz.getName()); - if (methoddInjections != null) { - for (IInjectionTargetEnc methodInjection : methoddInjections) { - // found a matching field - if (methods[i].getName().equals(methodInjection.getName())) { - lookupMethodResource(context, instance, methods[i], methodInjection.getEncName(), clazz); - } - } - } - } - - if (!disabledAnnotation) { - if (methods[i].isAnnotationPresent(Resource.class)) { - Resource annotation = methods[i].getAnnotation(Resource.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(EJB.class)) { - EJB annotation = methods[i].getAnnotation(EJB.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = methods[i].getAnnotation(WebServiceRef.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = methods[i].getAnnotation(PersistenceContext.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = methods[i].getAnnotation(PersistenceUnit.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - Annotation[] annotations = methods[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupMethodResource(context, instance, methods[i], "BundleContext", clazz); - } - } - } - } - } - - clazz = clazz.getSuperclass(); - } - } - - /** - * Inject resources in specified field. - * @param context - * @param instance - * @param field - * @param name - * @param clazz - */ - protected static void lookupFieldResource(final javax.naming.Context context, final Object instance, final Field field, - final String name, final Class clazz) throws NamingException, IllegalAccessException { - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && (name.length() > 0)) { - lookedupResource = context.lookup(name); - } else { - lookedupResource = context.lookup(clazz.getName() + "/" + field.getName()); - } - - accessibility = field.isAccessible(); - field.setAccessible(true); - field.set(instance, lookedupResource); - field.setAccessible(accessibility); - } - - /** - * Inject resources in specified method. - * @param context - * @param instance - * @param method - * @param name - * @param clazz - */ - protected static void lookupMethodResource(final javax.naming.Context context, final Object instance, final Method method, - final String name, final Class clazz) throws NamingException, IllegalAccessException, InvocationTargetException { - - if (!method.getName().startsWith("set") || method.getParameterTypes().length != 1 - || !method.getReturnType().getName().equals("void")) { - throw new IllegalArgumentException("Invalid method resource injection annotation"); - } - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && (name.length() > 0)) { - lookedupResource = context.lookup(name); - } else { - lookedupResource = context.lookup(clazz.getName() + "/" + method.getName().substring(3)); - } - - accessibility = method.isAccessible(); - method.setAccessible(true); - method.invoke(instance, lookedupResource); - method.setAccessible(accessibility); - } - - /** - * Sets the Enc Binding holder. - * @param encBindingHolder - */ - public void setEncBindingHolder(final IENCBindingHolder encBindingHolder) { - this.encBindingHolder = encBindingHolder; - } - - /** - * @return ENC binding holder. - */ - public IENCBindingHolder getEncBindingHolder() { - return encBindingHolder; - } - -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/Jetty6Service.java b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/Jetty6Service.java deleted file mode 100644 index 3db2c2c94b..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/Jetty6Service.java +++ /dev/null @@ -1,792 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty6; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.NamingException; - -import org.mortbay.jetty.Connector; -import org.mortbay.jetty.Handler; -import org.mortbay.jetty.Server; -import org.mortbay.jetty.handler.ContextHandlerCollection; -import org.mortbay.jetty.handler.DefaultHandler; -import org.mortbay.jetty.handler.ErrorHandler; -import org.mortbay.jetty.handler.HandlerCollection; -import org.mortbay.jetty.handler.RequestLogHandler; -import org.mortbay.jetty.security.SecurityHandler; -import org.mortbay.jetty.servlet.ErrorPageErrorHandler; -import org.mortbay.jetty.servlet.SessionHandler; -import org.mortbay.jetty.webapp.WebAppContext; -import org.mortbay.xml.XmlConfiguration; -import org.objectweb.util.monolog.api.BasicLevel; -import org.osgi.framework.BundleContext; -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.jonas.web.base.War; -import org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory; - -/** - * This class provides an implementation of the Jetty service (as web container - * service). - * @author Florent Benoit - */ -public class Jetty6Service extends BaseWebContainerService implements JWebContainerService { - - /** - * The name of the default jetty web configuration file - */ - public static final String JETTY6_WEB_FILENAME = "jetty6-web.xml"; - - /** - * Name of the configuration file - */ - public static final String JETTY6_CONF_FILENAME = "jetty6.xml"; - - /** - * Name of the configuration file. - */ - private static final String JETTY_CONFIGURATION_FILE = BaseWebContainerService.JONAS_BASE + File.separator - + ConfigurationConstants.DEFAULT_CONFIG_DIR + File.separator + JETTY6_CONF_FILENAME; - - /** - * Name of the default web.xml file. - */ - private static final String JETTY_DEFAULT_WEB_XML_FILE = BaseWebContainerService.JONAS_BASE + File.separator - + ConfigurationConstants.DEFAULT_CONFIG_DIR + File.separator + JETTY6_WEB_FILENAME; - - /** - * Path to the jetty 6 configuration file - */ - private String jetty6ConfPath; - - /** - * Path to the default web.xml conf file - */ - private String jetty6WebConfPath; - - /** - * Configuration used to configure Jetty. - */ - private static String config = null; - - /** - * Our own instance of Jetty server. - */ - private Server server = null; - - /** - * Default Handler (instead of 404 error if context is not found). - */ - private DefaultHandler defaultHandler = null; - - /** - * Logging handler. - */ - private RequestLogHandler requestLogHandler = null; - - /** - * List of contexts (web-apps) deployed on the jetty server. - */ - private ContextHandlerCollection webAppContexts = null; - - /** - * List of available Handlers. - */ - private HandlerCollection handlers; - - /** - * Jetty has been started ? - */ - private boolean jettyStarted = false; - - /** - * Default constructor. - * @param bundleContext the bundle context - */ - public Jetty6Service(final BundleContext bundleContext) { - super(bundleContext); - } - - /** - * Init the handlers of Jetty server object. - * @throws Exception - */ - private void initHandlers() { - // TODO We should change the default handler to a JOnAS default - // handler, no ? - // It display a list of context instead of a 404 error - this.defaultHandler = new DefaultHandler(); - - // For the log - this.requestLogHandler = new RequestLogHandler(); - - // Web App Contexts - this.webAppContexts = new ContextHandlerCollection(); - - // List of Handlers - this.handlers = new HandlerCollection(); - - // Add all the handlers - this.handlers.setHandlers(new Handler[] {this.webAppContexts, this.defaultHandler, this.requestLogHandler}); - - // Set the handlers on the server - this.server.setHandler(handlers); - - } - - /** - * Start the Jetty service in a new thread. - * @throws ServiceException if the startup failed. - */ - @Override - public void doStart() throws ServiceException { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, ""); - } - - // On Demand feature not enabled, start the web container now - if (!isOnDemandFeatureEnabled()) { - startInternalWebContainer(); - } // else delay this launch - - // ... and run super method - super.doStart(); - - } - - /** - * Starts the specific code for the web container implementation. - * This allows to start the internal container on demand (if there is an access on the http proxy port for example) - * @throws JWebContainerServiceException if container is not started - */ - @Override - public synchronized void startInternalWebContainer() throws JWebContainerServiceException { - // Already started - if (jettyStarted) { - return; - } - - if (this.jetty6ConfPath != null) { - this.config = this.jetty6ConfPath; - } else { - this.config = JETTY_CONFIGURATION_FILE; - } - - getLogger().log(BasicLevel.LEVEL_DEBUG, "Using configuration file " + config); - - this.server = new Server(); - - initHandlers(); - - if (server != null) { - // Start Jetty directly and just pass it to JMX if available - if (config != null) { - - IExecution jettyServerConfiguration = new IExecution() { - public Server execute() throws Exception { - XmlConfiguration configuration = new XmlConfiguration(new File(config).toURL()); - configuration.configure(server); - - - // If OnDemand Feature is enabled, the http connector port needs to be changed - if (isOnDemandFeatureEnabled()) { - Connector[] connectors = server.getConnectors(); - // Get connector of each service - if (connectors.length >= 1) { - // Only for the first connector - Connector connector = connectors[0]; - connector.setPort(getOnDemandRedirectPort()); - } - } - - server.start(); - return server; - } - }; - - // Execute - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), - jettyServerConfiguration); - // Throw an ServiceException if needed - if (result.hasException()) { - getLogger().log(BasicLevel.LEVEL_ERROR, - "Error has occured while starting Jetty server using configuration file " - + config, result.getException()); - } - } - } else { - throw new ServiceException("Cannot start Jetty server."); - } - - getLogger().log(BasicLevel.INFO, "Jetty6 Service started"); - jettyStarted = true; - - } - - /** - * Checks if the internal web container has been started. - * @return true if it is already started - */ - @Override - public boolean isInternalContainerStarted() { - return jettyStarted; - } - - - /** - * Stop the Jetty service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Undeploy the wars ... - super.doStop(); - - // ... and shut down embedded jetty - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, ""); - } - if (isStarted()) { - if (server != null) { - try { - server.stop(); - server.destroy(); - server = null; - getLogger().log(BasicLevel.INFO, "Jetty6 Service stopped"); - } catch (Exception eExc) { - getLogger().log(BasicLevel.LEVEL_ERROR, - "error has occured while stopping Jetty server using configuration file " + config, eExc); - } - } - } - jettyStarted = false; - } - - /** - * Create the environment and delegate the operation to the implementation - * of the web container. - * @param ctx the context which contains the configuration in order to - * deploy a WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - @Override - protected void doRegisterWar(final Context ctx) throws JWebContainerServiceException { - // Get the 5 parameters : - // - warURL is the URL of the war to register (required param). - // - contextRoot is the context root to which this application - // should be installed (must be unique) (required param). - // - hostName is the name of the host on which deploy the war - // (optional param taken into account only if no element - // was declared in server.xml for this web application) . - // - java2DelegationModel the compliance to java2 delegation model - // - parentCL the war classloader of this war. - // URL warURL = null; - URL unpackedWarURL = null; - String contextRoot = null; - - // War 'management' instance - War war = null; - - boolean java2DelegationModel = true; - try { - war = (War) ctx.lookup("war"); - - unpackedWarURL = (URL) ctx.lookup("unpackedWarURL"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - ClassLoader webClassLoader = null; - try { - webClassLoader = (ClassLoader) ctx.lookup("parentCL"); - } catch (NamingException e) { - String err = "error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - String hostName = null; - - String earAppName = null; - try { - earAppName = (String) ctx.lookup("earAppName"); - } catch (NamingException e) { - // no ear case, so no ear application name - earAppName = null; - } - - WebContainerDeploymentDesc webDD = null; - try { - webDD = (WebContainerDeploymentDesc) ctx.lookup("webDD"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR,"Unable to get default parameters", e); - throw new JWebContainerServiceException("Unable to get default parameters", e); - } - - - // Initialize variable values from the war object - contextRoot = war.getContextRoot(); - java2DelegationModel = war.getJava2DelegationModel(); - - // Special handling for hostName - hostName = war.getHostName(); - if (hostName == null) { - hostName = ""; - } - - - // Install a new web application, whose web application archive is - // at the specified URL, into this container with the specified - // context root. - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else if (contextRoot.equalsIgnoreCase("ROOT")) { - // Jetty uses ROOT.war and ROOT directory to as root context - contextRoot = ""; - } - - // install the war. - File fWar = new File(unpackedWarURL.getFile()); - String fileName = fWar.getAbsolutePath(); - - if (server != null) { - try { - - // New Handlers - SecurityHandler securityHandler = new SecurityHandler(); - SessionHandler sessionHandler = new SessionHandler(); - - ErrorHandler errorHandler = new ErrorPageErrorHandler(); - - // The Annotation processor object needs to be initialized with - // the - // component context. Else, the processor does nothing. - javax.naming.Context envCtx = null; - try { - envCtx = (javax.naming.Context) getNaming().getComponentContext(webClassLoader).lookup("comp/env"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR, - "Cannot get the context of the webapplication '" + war.getWarURL() + "'.", e); - } - - // Customize Servlet Handler in order to make injections - AnnotationProcessorServletHandler servletHandler = new AnnotationProcessorServletHandler(envCtx); - servletHandler.setEncBindingHolder(webDD.getENCBindingHolder()); - - - WebAppContext webAppContext = new WebAppContext(securityHandler, sessionHandler, servletHandler, errorHandler); - - // Set the name of the context - webAppContext.setContextPath("/" + contextRoot); - - // Set path to the war file - webAppContext.setWar(unpackedWarURL.toString()); - - if ((hostName != null) && (hostName.length() > 0)) { - // Host was specified - webAppContext.setConnectorNames(new String[] {hostName}); - } - - webAppContext.setAttribute("J2EEDomainName", getDomainName()); - webAppContext.setAttribute("J2EEServerName", getJonasServerName()); - webAppContext.setAttribute("J2EEApplicationName", earAppName); - - - String webConf; - if (this.jetty6WebConfPath != null) { - webConf = this.jetty6WebConfPath; - } else { - webConf = JETTY_DEFAULT_WEB_XML_FILE; - } - - // Add default xml descriptor - File webDefaults = new File(webConf); - if (webDefaults.exists()) { - webAppContext.setDefaultsDescriptor(webDefaults.toURL().toExternalForm()); - } else { - getLogger().log(BasicLevel.WARN, "The file '" + webConf - + "' is not present. Check that your JONAS_BASE is up-to-date."); - } - - // Specifying the jsp class path used by jasper - webAppContext.setAttribute("org.apache.catalina.jsp_classpath", getJOnASClassPath(webClassLoader)); - - // Set this classloader to the Java2 compliant mode ? - webAppContext.setParentLoaderPriority(java2DelegationModel); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Webapp class loader java 2 delegation model set to " + java2DelegationModel); - - getLogger().log(BasicLevel.DEBUG, "Jetty server starting web app " + fileName); - } - - // Add handler - webAppContexts.addHandler(webAppContext); - - // start context with the parent classloader as parent classloader - ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(webClassLoader); - try { - webAppContext.start(); - } finally { - //reset classloader - Thread.currentThread().setContextClassLoader(oldCL); - } - - // Store the Jetty web-app ClassLoader - war.setClassLoader(webAppContext.getClassLoader()); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Jetty server is running web app " + fileName); - } - - } catch (IOException ioeExc) { - String err = "Cannot install this web application " + ioeExc; - getLogger().log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, ioeExc); - } catch (Exception eExc) { - String err = "Cannot start this web application " + eExc; - getLogger().log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, eExc); - } - } else { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "No Jetty server to install web app " + fileName); - } - } - - // TODO We need to have the J2EE WebModule MBean here, should add it to - // the Context - // Store WebModule ObjectName in Context - try { - ctx.rebind("WebModule", getDummyJSR77ObjectName(hostName, contextRoot, earAppName)); - } catch (Exception e) { - // NamingException or Mbean related Exception - // TODO i18n - String err = "Cannot rebind WebModule ObjectName in Context"; - getLogger().log(BasicLevel.ERROR, err, e); - throw new JWebContainerServiceException(err, e); - } - - } - - /** - * Create a fake, JSR77 MBean ObjectName. - * @param hostName host name - * @param contextRoot context root name - * @param earAppName application name - * @return a fake JSR77 WebModule ObjectName - * @throws MalformedObjectNameException if ObjectName incorrect - */ - private ObjectName getDummyJSR77ObjectName(final String hostName, final String contextRoot, final String earAppName) - throws MalformedObjectNameException { - // jonas:j2eeType=WebModule,name=//localhost/,J2EEApplication=none,J2EEServer=jonas - return ObjectName.getInstance(getDomainName() + ":j2eeType=WebModule,name=" + "/" + contextRoot - + ",J2EEApplication=" + earAppName + ",J2EEServer=" + getJonasServerName()); - } - - /** - * Return the classpath which can be used for jsp compiling by Jasper. This - * classpath is extracted from the web classloader. - * @param webClassLoader the ClassLoader used for extract URLs. - * @return the jonas classpath which is useful for JSP compiling. - */ - public String getJOnASClassPath(final ClassLoader webClassLoader) { - - StringBuffer classpath = new StringBuffer(); - int n = 0; - - ClassLoader tmpLoader = webClassLoader; - while (tmpLoader != null) { - if (!(tmpLoader instanceof URLClassLoader)) { - break; - } - URL[] repositories = ((URLClassLoader) tmpLoader).getURLs(); - for (int i = 0; i < repositories.length; i++) { - String repository = repositories[i].toString(); - if (repository.startsWith("file://")) { - repository = repository.substring("file://".length()); - } else if (repository.startsWith("file:")) { - repository = repository.substring("file:".length()); - } else { - continue; - } - if (repository == null) { - continue; - } - if (n > 0) { - classpath.append(File.pathSeparator); - } - classpath.append(repository); - n++; - } - tmpLoader = tmpLoader.getParent(); - } - - return classpath.toString(); - } - - /** - * Delegate the unregistration to the implementation of the web container. - * @param ctx the context which contains the configuration in order to - * undeploy a WAR. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - protected void doUnRegisterWar(final Context ctx) throws JWebContainerServiceException { - // Get the 2 parameters : - // - contextRoot is the context root to be removed (required param). - // - hostName is the name of the host to remove the war (optional). - String contextRoot = null; - try { - contextRoot = (String) ctx.lookup("contextRoot"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else if (contextRoot.equalsIgnoreCase("ROOT")) { - // Jetty uses ROOT.war and ROOT directory to as root context - contextRoot = ""; - } - - if (server != null) { - WebAppContext webAppContext = null; - - // find the deployed context - Handler[] handlers = webAppContexts.getHandlers(); - - for (Handler handler : handlers) { - if (handler instanceof WebAppContext) { - WebAppContext tmpContext = (WebAppContext) handler; - String contextPath = tmpContext.getContextPath(); - if (contextPath != null && contextPath.equals("/" + contextRoot)) { - webAppContext = tmpContext; - break; - } - } - } - - if (webAppContext != null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server found and is stopping web app at context " + contextRoot); - } - // Stop it gracefully - try { - webAppContext.stop(); - } catch (Exception e) { - getLogger().log(BasicLevel.LEVEL_DEBUG, - "Jetty server encoutered exception while stopping web application ", e); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server stopped and is removing web app at context " + contextRoot); - } - - webAppContexts.removeHandler(webAppContext); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server removed and is destroying web app at context " + contextRoot); - } - webAppContext.destroy(); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Jetty server unloaded web app at context " + contextRoot); - } - - } else { - if (getLogger().isLoggable(BasicLevel.ERROR)) { - getLogger().log(BasicLevel.ERROR, "Jetty server didn't find web app at context " + contextRoot); - } - } - - } else { - if (getLogger().isLoggable(BasicLevel.ERROR)) { - getLogger().log(BasicLevel.ERROR, "No Jetty server to uninstall web app at context " + contextRoot); - } - } - } - - /** - * Update info of the serverName and serverVersion. - */ - @Override - protected void updateServerInfos() { - setServerName("Jetty"); - setServerVersion(Server.getVersion()); - } - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when default host cannot be - * resolved (multiple services). - */ - @Override - public String getDefaultHost() throws JWebContainerServiceException { - Connector[] connectors = server.getConnectors(); - // If we have more than 1 host, we cannot determine default host! - if (connectors.length == 0) { - String err = "Cannot determine default host : Jetty server has no host!"; - throw new JWebContainerServiceException(err); - } - - return connectors[0].getHost(); - } - - /** - * Return the Default HTTP port number of the web container (can be null if - * multiple HTTP connector has been set). - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when default HTTP port cannot be - * resolved (multiple occurences). - */ - @Override - public String getDefaultHttpPort() throws JWebContainerServiceException { - // if server not yet started, analyze the .xml file - if (!jettyStarted) { - return System.getProperty("jetty.port", "9000"); - } - return String.valueOf(getFirstListenerFromScheme("http").getPort()); - } - - /** - * Return the Default HTTPS port number of the web container (can be null if - * multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when default HTTPS port cannot be - * resolved (multiple occurences). - */ - @Override - public String getDefaultHttpsPort() throws JWebContainerServiceException { - return String.valueOf(getFirstListenerFromScheme("https").getPort()); - } - - /** - * @param myScheme matching URL scheme (http, https, ...) - * @return Returns the first HttpListener found - */ - private Connector getFirstListenerFromScheme(final String myScheme) { - - Connector[] connectors = server.getConnectors(); - List matchingConnectors = new ArrayList(); - for (int i = 0; i < connectors.length; i++) { - Connector connector = connectors[i]; - String scheme = connector.getIntegralScheme(); - if (scheme.equalsIgnoreCase(myScheme)) { - matchingConnectors.add(connector); - } - } - if (matchingConnectors.isEmpty()) { - String err = "Cannot determine default '" + myScheme + "' port :" + " Jetty server has 0 '" + myScheme - + "' Listener"; - throw new JWebContainerServiceException(err); - } - - Connector firstConnector = matchingConnectors.get(0); - // Check if there are more than one HTTP connectors specified, if so, - // warn the administrator. - if (matchingConnectors.size() > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log( - BasicLevel.WARN, - "Found multiple Listener for scheme '" + myScheme + "'" + ", using first by default! (port:" - + firstConnector.getPort() + ")"); - } - } - - return firstConnector; - } - - /** - * Creates an instance of the http service factory. - * @return an instance of the httpservice factory - */ - @Override - protected HttpServiceFactory createHttpServiceFactory() { - return null; - } - - /** - * {@inheritDoc} - */ - @Override - public void registerAddonConfig(final IAddonConfig addonConfig) { - super.registerAddonConfig(addonConfig); - File file; - file = addonConfig.getConfigurationFile(JETTY6_WEB_FILENAME); - if (file != null) { - this.jetty6WebConfPath = file.getAbsolutePath(); - } - file = addonConfig.getConfigurationFile(JETTY6_CONF_FILENAME); - if (file != null) { - this.jetty6ConfPath = file.getAbsolutePath(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void unregisterAddonConfig(final IAddonConfig addonConfig) { - super.unregisterAddonConfig(addonConfig); - this.jetty6ConfPath = null; - this.jetty6WebConfPath = null; - } - -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/JettyPrincipal.java b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/JettyPrincipal.java deleted file mode 100644 index 5e82c0b9f8..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/JettyPrincipal.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:JettyPrincipal.java 10798 2007-07-01 20:56:02Z benoitf $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty6.security; - -import java.security.Principal; -import java.util.List; - -/** - * Define a principal which can be used by Jetty. - * @author Florent Benoit - */ -public class JettyPrincipal implements Principal { - - /** - * Name of the principal. - */ - private String name; - - /** - * Roles for this principal. - */ - private List roles; - - /** - * Constructor. - * @param name name of this principal - * @param roles roles for this principal - */ - public JettyPrincipal(final String name, final List roles) { - this.name = name; - this.roles = roles; - } - - /** - * Get the name of this principal. - * @return the name of this principal - */ - public String getName() { - return name; - } - - /** - * This user is authenticated ? - * @return true if it is authenticated - */ - public boolean isAuthenticated() { - return true; - } - - /** - * Check if the given role is in the user's roles. - * @param role the given role - * @return true if the role is in the user's roles - */ - public boolean isUserInRole(final String role) { - if (roles == null) { - return (false); - } - return roles.contains(role); - } - - /** - * Gets the roles of this user. - * @return roles of this user - */ - public List getRoles() { - return roles; - } - -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/Realm.java b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/Realm.java deleted file mode 100644 index 9ffad15f5d..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/java/org/ow2/jonas/web/jetty6/security/Realm.java +++ /dev/null @@ -1,317 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty6.security; - -import java.security.Principal; -import java.security.acl.Group; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import javax.security.auth.Subject; -import javax.security.auth.login.AccountExpiredException; -import javax.security.auth.login.CredentialExpiredException; -import javax.security.auth.login.FailedLoginException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.mortbay.jetty.Request; -import org.mortbay.jetty.security.UserRealm; - -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - - -/** - * Realm used by Jetty 6 service. - * @author Florent Benoit - */ -public class Realm implements UserRealm { - - /** - * Name used in the JAAS config file. - */ - private static final String JAAS_CONFIG_NAME = "jetty"; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(Realm.class); - - /** - * Name of this realm. - */ - private String name; - - /** - * List of authenticated users. - */ - private Map users = null; - - - /** - * Default Constructor. - */ - public Realm() { - this("Jetty Realm"); - } - - /** - * Default Constructor. - * @param name of the realm - */ - public Realm(final String name) { - this.users = new ConcurrentHashMap(); - setName(name); - } - - /** - * Authenticate a user with a specific username and credentials. - * @param username name of the user - * @param credentials credential of the user - * @param request httprequest - * @return a Jetty principal - */ - public Principal authenticate(final String username, final Object credentials, final Request request) { - - // No authentication can be made with a null username - if (username == null) { - return null; - } - - Principal jettyPrincipal = (Principal) getUsers().get(username); - // User previously authenticated --> remove from the cache - if (jettyPrincipal != null) { - removeUser(username); - } - - NoInputCallbackHandler noInputCH = null; - LoginContext loginContext = null; - noInputCH = new NoInputCallbackHandler(username, (String) credentials, null); - - //Establish a LoginContext to use for authentication - try { - loginContext = new LoginContext(JAAS_CONFIG_NAME, noInputCH); - } catch (LoginException e) { - logger.error("Cannot create a login context for the user ''{0}''", username, e); - return null; - } - - // Negotiate a login via this LoginContext - Subject subject = null; - try { - loginContext.login(); - subject = loginContext.getSubject(); - if (subject == null) { - logger.error("No Subject for user ''{0}''", username); - return null; - } - } catch (AccountExpiredException e) { - logger.error("Account expired for user ''{0}''", username, e); - return null; - } catch (CredentialExpiredException e) { - logger.error("Credential Expired for user ''{0}''", username, e); - return null; - } catch (FailedLoginException e) { - logger.error("Failed Login exception for user ''{0}''", username, e); - return null; - } catch (LoginException e) { - logger.error("Login exception for user ''{0}''", username, e); - return null; - } - - // Retrieve first principal name found (without groups) - Iterator iterator = subject.getPrincipals(Principal.class).iterator(); - String userName = null; - while (iterator.hasNext() && (userName == null)) { - Principal principal = iterator.next(); - if (!(principal instanceof Group)) { - userName = principal.getName(); - } - } - - // No name --> error - if (userName == null) { - logger.error("No Username found in the subject"); - return null; - } - - // Retrieve all roles of the user (Roles are members of the Group class) - Set groups = subject.getPrincipals(Group.class); - List roles = new ArrayList(); - - for (Group group : groups) { - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = e.nextElement(); - roles.add(p.getName()); - } - } - - // Create a JettyPrincipal for Jetty - JettyPrincipal principal = new JettyPrincipal(userName, roles); - - // Register the subject in the security context - //SecurityContext ctx = new SecurityContext(subject); - SecurityContext ctx = new SecurityContext(userName, roles); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - // Add to cache - addUser(username, principal); - - return principal; - } - - /** - * @return the users. - */ - protected Map getUsers() { - return users; - } - - /** - * Add a user to the current map. - * @param username name of the user - * @param principal object - */ - protected void addUser(final String username, final JettyPrincipal principal) { - users.put(username, principal); - } - - /** - * Remove a specific user. - * @param username user to remove - */ - protected void removeUser(final String username) { - users.remove(username); - } - - /** - * Check if a user is in a role. - * @param user The user, which must be from this realm - * @param roleName the role to test for the given user - * @return True if the user can act in the role. - */ - public synchronized boolean isUserInRole(final Principal user, final String roleName) { - if (user == null) { - return false; - } - - if (user instanceof JettyPrincipal) { - return ((JettyPrincipal) user).isUserInRole(roleName); - } else { - logger.error("The user ''{0}'' is not instance of JettyPrincipal", user); - return false; - } - } - - /** - * Gets the principal with the given username. - * @param username the given username - * @return the principal with the given username - */ - public Principal getPrincipal(final String username) { - logger.debug("Get principal with username ''{0}''", username); - - JettyPrincipal principal = (JettyPrincipal) users.get(username); - SecurityContext ctx = new SecurityContext(principal.getName(), principal.getRoles()); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - return principal; - } - - /** - * Disassociate a user. - * @param user the given user - */ - public void disassociate(final Principal user) { - // Set anonymous identity - SecurityCurrent.getCurrent().setSecurityContext(new SecurityContext()); - } - - /** - * Push a role to a user (not implemented). - * @param user the given user - * @param role the role to push - * @return the new principal - */ - public Principal pushRole(final Principal user, final String role) { - return user; - } - - /** - * Pop a role to a user (not implemented). - * @param user the given user - * @return the new principal - */ - public Principal popRole(final Principal user) { - return user; - } - - /** - * Log out a specific user. - * @param user the user to logout - */ - public void logout(final Principal user) { - } - - /** - * Check if the specific user is authenticated. - * @param user the user to reauthenticate - * @return true if the user is authenthicated - */ - public boolean reauthenticate(final Principal user) { - if (user instanceof JettyPrincipal) { - return ((JettyPrincipal) user).isAuthenticated(); - } else { - return false; - } - } - - /** - * Sets the name of the realm. - * @param name The name to set. - */ - protected void setName(final String name) { - this.name = name; - } - - /** - * @return The realm name. - */ - public String getName() { - return name; - } - -} diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6-web.xml b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6-web.xml deleted file mode 100644 index a2e58918f9..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6-web.xml +++ /dev/null @@ -1,427 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - Default web.xml file. - This file is applied to a Web application before it's own WEB_INF/web.xml file - - - - - - - - - - org.mortbay.jetty.webapp.NoTLDJarPattern - start.jar|ant-.*\.jar|dojo-.*\.jar|jetty-.*\.jar|jsp-api-.*\.jar|junit-.*\.jar|servlet-api-.*\.jar|dnsns\.jar|rt\.jar|jsse\.jar|tools\.jar|sunpkcs11\.jar|sunjce_provider\.jar|xerces.*\.jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - org.mortbay.jetty.servlet.DefaultServlet - - acceptRanges - true - - - dirAllowed - true - - - redirectWelcome - false - - - maxCacheSize - 4000000 - - - maxCachedFileSize - 254000 - - - maxCachedFiles - 1000 - - - cacheType - both - - - gzip - true - - - useFileMappedBuffer - true - - - 0 - - - default / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.apache.jasper.servlet.JspServlet - - logVerbosityLevel - DEBUG - - - fork - false - - - xpoweredBy - false - - - 0 - - - - jsp - *.jsp - *.jspf - *.jspx - *.xsp - *.JSP - *.JSPF - *.JSPX - *.XSP - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - arISO-8859-6 - beISO-8859-5 - bgISO-8859-5 - caISO-8859-1 - csISO-8859-2 - daISO-8859-1 - deISO-8859-1 - elISO-8859-7 - enISO-8859-1 - esISO-8859-1 - etISO-8859-1 - fiISO-8859-1 - frISO-8859-1 - hrISO-8859-2 - huISO-8859-2 - isISO-8859-1 - itISO-8859-1 - iwISO-8859-8 - jaShift_JIS - koEUC-KR - ltISO-8859-2 - lvISO-8859-2 - mkISO-8859-5 - nlISO-8859-1 - noISO-8859-1 - plISO-8859-2 - ptISO-8859-1 - roISO-8859-2 - ruISO-8859-5 - shISO-8859-5 - skISO-8859-2 - slISO-8859-2 - sqISO-8859-2 - srISO-8859-5 - svISO-8859-1 - trISO-8859-9 - ukISO-8859-5 - zhGB2312 - zh_TWBig5 - - - - - Disable TRACE - / - TRACE - - - - - - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6.xml b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6.xml deleted file mode 100644 index 56b1ab50ea..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/jonas-resources/conf/jetty6.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 10 - 250 - - - - - - - - - - - - - - - - - - - http - 30000 - 2 - 100 - false - 8443 - 1000 - 500 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JOnAS Realm - - - - - MEJB Authentication Area - - - - - - - - - true - true - - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/properties/jonas-web-jetty6.properties b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/properties/jonas-web-jetty6.properties deleted file mode 100644 index b36c794a3c..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/properties/jonas-web-jetty6.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.web.class org.ow2.jonas.web.jetty6.Jetty6Service \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/META-INF/jonas-web-container-jetty-6.1-core.bnd b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/META-INF/jonas-web-container-jetty-6.1-core.bnd deleted file mode 100644 index c1380d56a9..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/META-INF/jonas-web-container-jetty-6.1-core.bnd +++ /dev/null @@ -1,90 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Need to get this package (and only this one) from catalina.jar -# (for) -Export-Package org.apache - -# Need to export the Jasper classes used by the generated JSP classes (not in bundle) --exportcontents org.apache.jasper.runtime;version=${jetty-jasper-glassfish.version}, \ - org.apache.jasper.compiler.*;version=${jetty-jasper-glassfish.version}, \ - org.apache.jasper.servlet;version=${jetty-jasper-glassfish.version}, \ - org.apache.jasper;version=${jetty-jasper-glassfish.version}, \ - com.sun.el;version=${jetty-jasper-glassfish.version} - -# Need to add this import (properties) because Bnd do not handle multiple level inheritance. -# Ant will not be used (eclipse compiler instead) -# sun.misc is a dependency not used by Jasper -# Servlet/JSP resources are used by Jasper -# org.ow2.jonas.deployment.api added for inherited class IServiceRefDesc -# org.osgi.service.prefs & org.eclipse.* are dependencies not used by the JDT core part that we use -# com.sun.org.apache.* packages are not imported because they're already part of the bootdelegation -Import-Package !org.apache.xml.*, \ - !org.apache.bcel.*, \ - !org.apache.env, \ - !org.apache.bsf, \ - !org.apache.tools.ant.launch.*, \ - !org.apache.tools.ant.taskdefs.optional, \ - !org.apache.tools.ant.util.optional, \ - !com.sun.org.apache.xalan.internal.*, \ - !com.sun.org.apache.xpath.internal.*, \ - !com.sun.org.apache.xml.internal.*, \ - !sun.misc, \ - !sun.rmi.rmic, \ - !sun.tools.javac, \ - !org.osgi.service.prefs,\ - !org.eclipse.*,\ - !com.sun.tools.javac,\ - !kaffe.rmi.rmic, \ - javax.servlet.jsp.jstl.*;version="[1.2.0,2.2.0]",\ - javax.persistence.*;version="[1.0.0,2.0.0]",\ - * - -Private-Package org.ow2.jonas.web.jetty6.* - -DynamicImport-Package javax.servlet.resources, \ - javax.servlet.jsp.resources, \ - org.ow2.jonas.deployment.api, \ - org.ow2.jonas.jmx, \ - org.ow2.util.ee.metadata.war.api, \ - org.ow2.jonas.naming, \ - org.ow2.jonas.workcleaner, \ - org.ow2.jonas.ws.axis,\ - org.ow2.jonas.ws.jaxrpc, \ - org.ow2.util.ee.deploy.api.deployer,\ - org.ow2.util.ee.deploy.api.deployable, \ - org.ow2.jonas.addon.deploy.api.config - -# AJP and HTML are not bundles ... -# JSP is the Jasper version used in Jetty (bundled from Glassfish) -# Ant/JDT Core are required because of Jasper -Embed-Dependency jetty-ajp;inline=true, \ - jetty-html;inline=true, \ - jsp-2.1-glassfish;inline=true, \ - core;inline=true, \ - ant;inline=true - -# Avoid adding transitive dependencies as first level -# dependency in the POM to allow bundle inclusion -Embed-Transitive true - diff --git a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/metadata.xml b/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/metadata.xml deleted file mode 100644 index 0e55e92d5b..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/6.1.x/pom.xml b/jonas/modules/services/web-container/jetty/6.1.x/pom.xml deleted file mode 100644 index c90d8c80c8..0000000000 --- a/jonas/modules/services/web-container/jetty/6.1.x/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container-jetty - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-jetty-6.1 - pom - JOnAS :: Services :: Web Container :: Jetty :: 6.1.x - Implementation for Jetty 6.1.x - - core - ant - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/pom.xml b/jonas/modules/services/web-container/jetty/8.0.x/ant/pom.xml deleted file mode 100644 index 1de9e21d1d..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-web-container-jetty-8.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-jetty-8.0-ant - bundle - JOnAS :: Services :: Web Container :: Jetty :: 8.0.x :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-jetty-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8.java b/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8.java deleted file mode 100644 index 63d3dc2c99..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty8; - -import org.ow2.jonas.antmodular.jonasbase.web.jetty.Jetty; - -/** - * Support Jetty 8 Connector Configuration. - * @author Jeremy Cazaux - */ -public class Jetty8 extends Jetty { - - /** - * Name of Jetty configuration file. - */ - public static final String JETTY_CONF_FILE = "jetty8.xml"; - - /** - * Name of the implementation class for Jetty. - */ - private static final String JETTY_SERVICE = "org.ow2.jonas.web.jetty8.Jetty8Service"; - - /** - * Default Constructor. - */ - public Jetty8() { - super(); - } - - /** - * Configure Jetty8's connectors - * @param jetty8Connectors Jetty 8 Connectors - */ - public void addConfiguredConnectors(final Jetty8Connectors jetty8Connectors) { - this.tasks.add(jetty8Connectors); - } - - /** - * Set the port number for the WebContainer - * @param portNumber the port number - */ - @Override - public void setPort(String portNumber) { - super.setPort(portNumber,JETTY_CONF_FILE,"jetty"); - } - - /** - * Execute this task - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.JETTY_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8Connectors.java b/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8Connectors.java deleted file mode 100644 index 9a91a6aee2..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty8/Jetty8Connectors.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty8; - -import org.ow2.jonas.antmodular.jonasbase.web.jetty.JettyConnectors; -import org.ow2.jonas.antmodular.jonasbase.web.jetty.JettyHttps; -import org.ow2.jonas.antmodular.web.base.Ajp; -import org.ow2.jonas.antmodular.web.base.Http; - -/** - * Configure Jetty 8 connector - * @author Jeremy Cazaux - */ -public class Jetty8Connectors extends JettyConnectors { - - /** - * Default constructor - */ - public Jetty8Connectors() { - super(); - } - - /** - * Configure a HTTP Connector. - * @param http HTTP Configuration. - */ - public void addConfiguredHttp(Http http) { - super.addConfiguredHttp(http, Jetty8.JETTY_CONF_FILE, Jetty8.INFO); - } - - /** - * Configure a JettyHTTPS Connector. - * @param jettyHttps JettyHTTPS Configuration. - */ - @Override - public void addConfiguredHttps(final JettyHttps jettyHttps) { - super.addConfiguredHttps(jettyHttps, Jetty8.JETTY_CONF_FILE); - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - @Override - public void addConfiguredAjp(final Ajp ajp) { - super.addConfiguredAjp(ajp, Jetty8.JETTY_CONF_FILE); - } - - @Override - public void execute() { - super.execute(); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/antlib-jetty8.xml b/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/antlib-jetty8.xml deleted file mode 100644 index 0e9bb81235..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/antlib-jetty8.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.properties b/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.properties deleted file mode 100644 index 90d6ea02c6..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.properties +++ /dev/null @@ -1 +0,0 @@ -webcontainer.service.defaultname=jetty8 \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.xml b/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.xml deleted file mode 100644 index a88a96753c..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/ant/src/main/resources/build-jetty8.xml +++ /dev/null @@ -1,21 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/pom.xml b/jonas/modules/services/web-container/jetty/8.0.x/core/pom.xml deleted file mode 100644 index 26651d9a10..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/pom.xml +++ /dev/null @@ -1,369 +0,0 @@ - - - - - jonas-web-container-jetty-8.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-jetty-8.0-core - bundle - JOnAS :: Services :: Web Container :: Jetty :: 8.0.x :: Core - - - 2.2.2-b06 - - - - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - ${ow2.spec.version} - - - - org.ow2.bundles - ow2-util-log - - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - org.eclipse.jetty - jetty-server - ${jetty8.version} - - - - org.eclipse.jetty - jetty-webapp - ${jetty8.version} - - - - org.eclipse.jetty - jetty-security - ${jetty8.version} - - - - org.eclipse.jetty - jetty-ajp - ${jetty8.version} - - - - org.glassfish.web - jsp-impl - ${jsp-impl.version} - - - - org.eclipse.jdt.core.compiler - ecj - 3.5.1 - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - web-jetty8 - - - org.eclipse.jetty - jetty-util - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-io - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-http - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-continuation - ${jetty8.version} - server - - - org.eclipse.jetty - jetty-server - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-security - ${jetty8.version} - server - - - - - org.eclipse.jetty - jetty-servlet - ${jetty8.version} - server - - - - - org.eclipse.jetty - jetty-xml - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-webapp - ${jetty8.version} - server - - - - org.eclipse.jetty - jetty-ajp - ${jetty8.version} - server - - - - org.glassfish.web - el-impl - 2.2.1-b05 - - - - org.eclipse.jdt.core.compiler - ecj - 3.5.1 - server - - - - org.ow2.jonas - jonas-web-container-jetty-8.0-core - ${project.version} - server - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-dependency-plugin - - - generate-sources - - unpack - - - - - org.glassfish.web - jsp-impl - ${jsp-impl.version} - sources - jar - ${project.build.directory}/jsp-impl-sources - - - - - - - - maven-antrun-plugin - - - generate-sources - - run - - - - - - - - - - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - add-source - generate-sources - - add-source - - - - ${project.build.directory}/generated-sources/jetty8 - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - jetty8-config - ${project.build.directory} - config - - **/.svn/** - - - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/apache/AnnotationProcessor.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/apache/AnnotationProcessor.java deleted file mode 100644 index 3f9cdff5db..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/apache/AnnotationProcessor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache; - -import java.lang.reflect.InvocationTargetException; - -import javax.naming.NamingException; - -/** - * Comment - * - * @author Bill Burke - * @version $Revision$ - */ -public interface AnnotationProcessor { - public void postConstruct(Object instance) - throws IllegalAccessException, InvocationTargetException; - public void preDestroy(Object instance) - throws IllegalAccessException, InvocationTargetException; - public void processAnnotations(Object instance) - throws IllegalAccessException, InvocationTargetException, NamingException; -} - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASInjectionDecorator.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASInjectionDecorator.java deleted file mode 100644 index 704d3f3061..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASInjectionDecorator.java +++ /dev/null @@ -1,382 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.EventListener; -import java.util.List; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.naming.NamingException; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceUnit; -import javax.servlet.Filter; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.xml.ws.WebServiceRef; - -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.servlet.ServletContextHandler.Decorator; -import org.ow2.util.ee.metadata.common.api.enc.IENCBindingHolder; -import org.ow2.util.ee.metadata.common.api.enc.IInjectionTargetEnc; - -/** - * This class provides injection of all Java EE stuff into the servlet, filter, - * listener instances. - * @author Florent Benoit - */ - -public class JOnASInjectionDecorator implements Decorator { - - /** - * Env environment. - */ - private javax.naming.Context context = null; - - /** - * Annotation analysis is disabled or not ? - */ - private boolean disabledAnnotation = false; - - /** - * ENC Binding holder. - */ - private IENCBindingHolder encBindingHolder = null; - - /** - * Default constructor with the given ENC env. - * @param context the given ENC - */ - public JOnASInjectionDecorator(final javax.naming.Context context) { - this.context = context; - } - - /** - * @param filter the given filter - * @throws ServletException - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterHolder(org.eclipse.jetty.servlet.FilterHolder) - */ - public void decorateFilterHolder(final FilterHolder filter) throws ServletException { - } - - /** - * @param - * @param filter - * @return the decorated filter - * @throws ServletException - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateFilterInstance(javax.servlet.Filter) - */ - public T decorateFilterInstance(final T filter) throws ServletException { - processAnnotations(filter); - return filter; - } - - /** - * @param - * @param listener - * @return the decorated event listener instance - * @throws ServletException - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateListenerInstance(java.util.EventListener) - */ - public T decorateListenerInstance(final T listener) throws ServletException { - processAnnotations(listener); - return listener; - } - - /* ------------------------------------------------------------ */ - /** - * @param servlet - * @throws ServletException - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletHolder(org.eclipse.jetty.servlet.ServletHolder) - */ - public void decorateServletHolder(final ServletHolder servlet) throws ServletException { - } - - /* ------------------------------------------------------------ */ - /** - * @param - * @param servlet - * @return the decorated servlet instance - * @throws ServletException - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#decorateServletInstance(javax.servlet.Servlet) - */ - public T decorateServletInstance(final T servlet) throws ServletException { - processAnnotations(servlet); - return servlet; - } - - /* ------------------------------------------------------------ */ - /** - * @param f - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyFilterInstance(javax.servlet.Filter) - */ - public void destroyFilterInstance(final Filter f) { - } - - /* ------------------------------------------------------------ */ - /** - * @param s - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyServletInstance(javax.servlet.Servlet) - */ - public void destroyServletInstance(final Servlet s) { - } - - /* ------------------------------------------------------------ */ - /** - * @param f - * @see org.eclipse.jetty.servlet.ServletContextHandler.Decorator#destroyListenerInstance(java.util.EventListener) - */ - public void destroyListenerInstance(final EventListener f) { - } - - /** - * Inject resources in specified instance. - */ - public void processAnnotations(final Object instance) throws ServletException { - - if (context == null) { - // No resource injection - return; - } - - Class clazz = instance.getClass(); - - while (clazz != null) { - // Initialize fields annotations - Field[] fields = clazz.getDeclaredFields(); - - for (int i = 0; i < fields.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List fieldInjections = encBindingHolder.getFieldInjectionTargets(clazz.getName()); - if (fieldInjections != null) { - for (IInjectionTargetEnc fieldInjection : fieldInjections) { - // found a matching field - if (fields[i].getName().equals(fieldInjection.getName())) { - lookupFieldResource(context, instance, fields[i], fieldInjection.getEncName(), clazz); - } - } - } - } - - if (!disabledAnnotation) { - if (fields[i].isAnnotationPresent(Resource.class)) { - Resource annotation = fields[i].getAnnotation(Resource.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(EJB.class)) { - EJB annotation = fields[i].getAnnotation(EJB.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = fields[i].getAnnotation(WebServiceRef.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = fields[i].getAnnotation(PersistenceContext.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = fields[i].getAnnotation(PersistenceUnit.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - - Annotation[] annotations = fields[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupFieldResource(context, instance, fields[i], "BundleContext", clazz); - } - } - } - - } - } - - // Initialize methods annotations - Method[] methods = clazz.getDeclaredMethods(); - for (int i = 0; i < methods.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List methoddInjections = encBindingHolder.getMethodInjectionTargets(clazz.getName()); - if (methoddInjections != null) { - for (IInjectionTargetEnc methodInjection : methoddInjections) { - // found a matching field - if (methods[i].getName().equals(methodInjection.getName())) { - lookupMethodResource(context, instance, methods[i], methodInjection.getEncName(), clazz); - } - } - } - } - - if (!disabledAnnotation) { - if (methods[i].isAnnotationPresent(Resource.class)) { - Resource annotation = methods[i].getAnnotation(Resource.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(EJB.class)) { - EJB annotation = methods[i].getAnnotation(EJB.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = methods[i].getAnnotation(WebServiceRef.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = methods[i].getAnnotation(PersistenceContext.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = methods[i].getAnnotation(PersistenceUnit.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - Annotation[] annotations = methods[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupMethodResource(context, instance, methods[i], "BundleContext", clazz); - } - } - } - } - } - - clazz = clazz.getSuperclass(); - } - } - - /** - * Inject resources in specified field. - * @param context - * @param instance - * @param field - * @param name - * @param clazz - */ - protected static void lookupFieldResource(final javax.naming.Context context, final Object instance, final Field field, - final String name, final Class clazz) throws ServletException { - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && (name.length() > 0)) { - try { - lookedupResource = context.lookup(name); - } catch (NamingException e) { - throw new ServletException("Unable to find the given name '" + name + "'.", e); - } - } else { - try { - lookedupResource = context.lookup(clazz.getName() + "/" + field.getName()); - } catch (NamingException e) { - throw new ServletException("Unable to find the given name '" + clazz.getName() + "/" + field.getName() + "'.", - e); - - } - } - - accessibility = field.isAccessible(); - field.setAccessible(true); - try { - field.set(instance, lookedupResource); - } catch (IllegalArgumentException e) { - throw new ServletException("Unable to set the field instance.", e); - } catch (IllegalAccessException e) { - throw new ServletException("Unable to set the field instance.", e); - } - field.setAccessible(accessibility); - } - - /** - * Inject resources in specified method. - * @param context - * @param instance - * @param method - * @param name - * @param clazz - */ - protected static void lookupMethodResource(final javax.naming.Context context, final Object instance, final Method method, - final String name, final Class clazz) throws ServletException { - - if (!method.getName().startsWith("set") || method.getParameterTypes().length != 1 - || !method.getReturnType().getName().equals("void")) { - throw new IllegalArgumentException("Invalid method resource injection annotation"); - } - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && (name.length() > 0)) { - try { - lookedupResource = context.lookup(name); - } catch (NamingException e) { - throw new ServletException("Unable to find the given name '" + name + "'.", e); - } - } else { - try { - lookedupResource = context.lookup(clazz.getName() + "/" + method.getName().substring(3)); - } catch (NamingException e) { - throw new ServletException("Unable to find the given name '" + clazz.getName() + "/" - + method.getName().substring(3) + "'.", e); - } - } - - accessibility = method.isAccessible(); - method.setAccessible(true); - try { - method.invoke(instance, lookedupResource); - } catch (IllegalArgumentException e) { - throw new ServletException("Unable to call the method instance.", e); - } catch (IllegalAccessException e) { - throw new ServletException("Unable to call the method instance.", e); - } catch (InvocationTargetException e) { - throw new ServletException("Unable to call the method instance.", e); - } - method.setAccessible(accessibility); - } - - /** - * Sets the Enc Binding holder. - * @param encBindingHolder the enc bindings - */ - public void setEncBindingHolder(final IENCBindingHolder encBindingHolder) { - this.encBindingHolder = encBindingHolder; - } - - /** - * @return ENC binding holder. - */ - public IENCBindingHolder getEncBindingHolder() { - return encBindingHolder; - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASTldScanner.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASTldScanner.java deleted file mode 100644 index e9f5c75fe6..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASTldScanner.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLConnection; -import java.util.HashMap; -import java.util.List; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.apache.jasper.JasperException; -import org.apache.jasper.runtime.TldScanner; - -/** - * This TLD scanner is delegating all the public methods to the delegating - * scanner. But before answering, it will initialize the delegating scanner with - * new TLD that were registered dynamically. - * @author Florent Benoit - */ -public class JOnASTldScanner extends TldScanner { - - /** - * Delegating scanner. - */ - private TldScanner delegateTldScanner = null; - - /** - * Already initialized ? - */ - private boolean initialized = false; - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Create a new scanner with the delegating scanner and the list of Tld - * resources to monitor. - * @param delegateTldScanner the previous registered scanner - * @param resourcesToMonitor the TLD to monitor - */ - public JOnASTldScanner(final TldScanner delegateTldScanner, final List resourcesToMonitor) { - this.delegateTldScanner = delegateTldScanner; - this.resourcesToMonitor = resourcesToMonitor; - } - - /** - * Gets the 'location' of the TLD associated with the given taglib 'uri'. - * @param uri the given taglib uri - * @return the location (which is an array) - * @throws JasperException if location can't be obtained - */ - @Override - @SuppressWarnings("unchecked") - public String[] getLocation(final String uri) throws JasperException { - - if (!initialized) { - - // Init delegating code by asking it a first time - delegateTldScanner.getLocation(uri); - - // Get the method - Method scanTldMethod; - try { - scanTldMethod = TldScanner.class.getDeclaredMethod("scanTld", String.class, String.class, InputStream.class); - } catch (SecurityException e) { - throw new JasperException("Unable to get scanTld method", e); - } catch (NoSuchMethodException e) { - throw new JasperException("Unable to get scanTld method", e); - } - scanTldMethod.setAccessible(true); - - // Get mappings field - Field mappingsField = null; - try { - mappingsField = TldScanner.class.getDeclaredField("mappings"); - } catch (SecurityException e) { - throw new JasperException("Unable to get mappings field", e); - } catch (NoSuchFieldException e) { - throw new JasperException("Unable to get mappings field", e); - } - mappingsField.setAccessible(true); - HashMap mappings; - try { - mappings = (HashMap) mappingsField.get(delegateTldScanner); - } catch (IllegalArgumentException e) { - throw new JasperException("Unable to get mappings field", e); - } catch (IllegalAccessException e) { - throw new JasperException("Unable to get mappings field", e); - } - - // Add each taglib into the cache - if (resourcesToMonitor != null) { - for (URL url : resourcesToMonitor) { - - Object tldInfo = null; - try { - URLConnection urlConnection = url.openConnection(); - urlConnection.setDefaultUseCaches(false); - - tldInfo = scanTldMethod - .invoke(delegateTldScanner, url.toString(), null, urlConnection.getInputStream()); - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } - - // Not found - if (tldInfo == null) { - continue; - } - - // Get URI - Field uriField = null; - try { - uriField = tldInfo.getClass().getDeclaredField("uri"); - } catch (SecurityException e) { - throw new JasperException("Unable to get uri field", e); - } catch (NoSuchFieldException e) { - throw new JasperException("Unable to get uri field", e); - } - uriField.setAccessible(true); - String uriStr = null; - try { - uriStr = (String) uriField.get(tldInfo); - } catch (IllegalArgumentException e) { - throw new JasperException("Unable to get listeners field", e); - } catch (IllegalAccessException e) { - throw new JasperException("Unable to get listeners field", e); - } - - // Add URI into the mapping - mappings.put(uriStr, new String[] {url.toString(), null}); - } - } - - initialized = true; - } - - return delegateTldScanner.getLocation(uri); - - } - - /** - * Only delegate the method. - * @param c the set of classes - * @param ctxt the servlet context - * @throws ServletException if it fails - */ - @Override - public void onStartup(final java.util.Set> c, final ServletContext ctxt) throws ServletException { - delegateTldScanner.onStartup(c, ctxt); - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASWebAppContext.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASWebAppContext.java deleted file mode 100644 index a18b11936b..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JOnASWebAppContext.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jetty.webapp.Configuration; -import org.eclipse.jetty.webapp.WebAppContext; - -/** - * Own JOnAS webAppcontext allowing to add new Jetty configurations. - * @author Florent Benoit - */ -public class JOnASWebAppContext extends WebAppContext { - - /** - * Configurations to load after the default one. - */ - private List jonasConfigurations = null; - - /** - * Configuration has been done. - */ - private boolean configurationDone = false; - - /** - * This constructor allows to specify our own configuration objects. - */ - public JOnASWebAppContext() { - super(); - this.jonasConfigurations = new ArrayList(); - } - - /** - * Override the super method by adding our own configurations. - * @throws Exception if it fails - */ - @Override - protected void loadConfigurations() throws Exception { - if (configurationDone) { - return; - } - super.loadConfigurations(); - - Configuration[] configurations = getConfigurations(); - List configurationList = new ArrayList(); - if (configurations != null) { - configurationList.addAll(Arrays.asList(configurations)); - } - configurationList.addAll(jonasConfigurations); - - setConfigurations(configurationList.toArray(new Configuration[configurationList.size()])); - configurationDone = true; - - } - - /** - * Adds a given configuration. - * @param configuration the given configuration - */ - public void addConfiguration(final Configuration configuration) { - jonasConfigurations.add(configuration); - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JSPLifecycleListener.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JSPLifecycleListener.java deleted file mode 100644 index 46cb0d2995..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/JSPLifecycleListener.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.lang.reflect.Field; -import java.net.URL; -import java.util.List; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.jasper.EmbeddedServletOptions; -import org.apache.jasper.runtime.TldScanner; -import org.apache.jasper.servlet.JspServlet; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.util.component.AbstractLifeCycle; -import org.eclipse.jetty.util.component.LifeCycle; - -/** - * Lifecycle listener that will replace the current TldScanner of the JSP servlet by a JOnAS TLD Scanner. - * @author Florent Benoit - */ -public class JSPLifecycleListener extends AbstractLifeCycle.AbstractLifeCycleListener implements LifeCycle.Listener{ - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public JSPLifecycleListener(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - } - - /** - * Replace TLD Scanner by JOnAS TLD scanner. - * @param lifecycle the servlet holder - */ - @Override - public void lifeCycleStarted(final LifeCycle lifecycle) { - // Lifecycle should be a servletHolder - if (lifecycle instanceof ServletHolder) { - ServletHolder servletHolder = (ServletHolder) lifecycle; - Servlet servlet; - try { - servlet = servletHolder.getServlet(); - } catch (ServletException e) { - // Unable to get the servlet - return; - } - // Should be a JSP Servlet - if (servlet instanceof JspServlet) { - JspServlet jspServlet = (JspServlet) servlet; - Field optionsField = null; - try { - optionsField = JspServlet.class.getDeclaredField("options"); - } catch (SecurityException e) { - return; - } catch (NoSuchFieldException e) { - return; - } - - optionsField.setAccessible(true); - Object options = null; - try { - options = optionsField.get(jspServlet); - } catch (IllegalArgumentException e) { - return; - } catch (IllegalAccessException e) { - return; - } - - if (options instanceof EmbeddedServletOptions) { - EmbeddedServletOptions embeddedServletOptions = (EmbeddedServletOptions) options; - TldScanner tldScanner = embeddedServletOptions.getTldScanner(); - - Field tldScannerField; - try { - tldScannerField = EmbeddedServletOptions.class.getDeclaredField("tldScanner"); - } catch (SecurityException e) { - return; - } catch (NoSuchFieldException e) { - return; - } - tldScannerField.setAccessible(true); - - // Replace by our own TldScanner - JOnASTldScanner jOnASTldScanner = new JOnASTldScanner(tldScanner, resourcesToMonitor); - try { - tldScannerField.set(embeddedServletOptions, jOnASTldScanner); - } catch (IllegalArgumentException e) { - return; - } catch (IllegalAccessException e) { - return; - } - } - - - } - } - - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/Jetty8Service.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/Jetty8Service.java deleted file mode 100644 index f8c0fbec49..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/Jetty8Service.java +++ /dev/null @@ -1,832 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.NamingException; - -import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.server.handler.DefaultHandler; -import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.server.handler.RequestLogHandler; -import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.xml.XmlConfiguration; -import org.objectweb.util.monolog.api.BasicLevel; -import org.osgi.framework.BundleContext; -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.jonas.web.base.War; -import org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * This class provides an implementation of the Jetty service (as web container - * service). - * @author Florent Benoit - */ -public class Jetty8Service extends BaseWebContainerService implements JWebContainerService { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(Jetty8Service.class); - - /** - * The name of the default jetty web configuration file - */ - public static final String JETTY8_WEB_FILENAME = "jetty8-web.xml"; - - /** - * Name of the configuration file - */ - public static final String JETTY8_CONF_FILENAME = "jetty8.xml"; - - /** - * Name of the configuration file. - */ - private static final String JETTY_CONFIGURATION_FILE = BaseWebContainerService.JONAS_BASE + File.separator - + ConfigurationConstants.DEFAULT_CONFIG_DIR + File.separator + JETTY8_CONF_FILENAME; - - /** - * Name of the default web.xml file. - */ - private static final String JETTY_DEFAULT_WEB_XML_FILE = BaseWebContainerService.JONAS_BASE + File.separator - + ConfigurationConstants.DEFAULT_CONFIG_DIR + File.separator + JETTY8_WEB_FILENAME; - - /** - * Path to the jetty 8 configuration file - */ - private String jetty8ConfPath; - - /** - * Path to the default web.xml conf file - */ - private String jetty8WebConfPath; - - /** - * Configuration used to configure Jetty. - */ - private static String config = null; - - /** - * Our own instance of Jetty server. - */ - private Server server = null; - - /** - * Default Handler (instead of 404 error if context is not found). - */ - private DefaultHandler defaultHandler = null; - - /** - * Logging handler. - */ - private RequestLogHandler requestLogHandler = null; - - /** - * List of contexts (web-apps) deployed on the jetty server. - */ - private ContextHandlerCollection webAppContexts = null; - - /** - * List of available Handlers. - */ - private HandlerCollection handlers; - - /** - * Jetty has been started ? - */ - private boolean jettyStarted = false; - - /** - * Default constructor. - * @param bundleContext the bundle context - */ - public Jetty8Service(final BundleContext bundleContext) { - super(bundleContext); - } - - /** - * Init the handlers of Jetty server object. - * @throws Exception - */ - private void initHandlers() { - // TODO We should change the default handler to a JOnAS default - // handler, no ? - // It display a list of context instead of a 404 error - this.defaultHandler = new DefaultHandler(); - - // For the log - this.requestLogHandler = new RequestLogHandler(); - - // Web App Contexts - this.webAppContexts = new ContextHandlerCollection(); - - // List of Handlers - this.handlers = new HandlerCollection(); - - // Add all the handlers - this.handlers.setHandlers(new Handler[] {this.webAppContexts, this.defaultHandler, this.requestLogHandler}); - - // Set the handlers on the server - this.server.setHandler(handlers); - - } - - /** - * Start the Jetty service in a new thread. - * @throws ServiceException if the startup failed. - */ - @Override - public void doStart() throws ServiceException { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, ""); - } - - // Disable OnDemand feature as not supported as we can't disable keep alive - if (isOnDemandFeatureEnabled()) { - logger.info("OnDemand feature disabled for Jetty as it is not supported."); - setOnDemandFeature(false); - } - - // override - System.setProperty("jetty.home", getServerProperties().getValue("jonas.base")); - - // FIXME: If the Factory is exposed through OSGi we shouldn't have this kind of hack - System.setProperty("javax.el.ExpressionFactory" , "com.sun.el.ExpressionFactoryImpl"); - - - - // On Demand feature not enabled, start the web container now - if (!isOnDemandFeatureEnabled()) { - startInternalWebContainer(); - } // else delay this launch - - // ... and run super method - super.doStart(); - - } - - /** - * Starts the specific code for the web container implementation. - * This allows to start the internal container on demand (if there is an access on the http proxy port for example) - * @throws JWebContainerServiceException if container is not started - */ - @Override - public synchronized void startInternalWebContainer() throws JWebContainerServiceException { - // Already started - if (jettyStarted) { - return; - } - - if (this.jetty8ConfPath == null) { - this.config = JETTY_CONFIGURATION_FILE; - } else { - this.config = jetty8ConfPath; - } - - getLogger().log(BasicLevel.LEVEL_DEBUG, "Using configuration file " + config); - - this.server = new Server(); - - initHandlers(); - - if (server != null) { - // Start Jetty directly and just pass it to JMX if available - if (config != null) { - - IExecution jettyServerConfiguration = new IExecution() { - public Server execute() throws Exception { - XmlConfiguration configuration = new XmlConfiguration(new File(config).toURL()); - configuration.configure(server); - - - // If OnDemand Feature is enabled, the http connector port needs to be changed - if (isOnDemandFeatureEnabled()) { - Connector[] connectors = server.getConnectors(); - // Get connector of each service - if (connectors.length >= 1) { - // Only for the first connector - Connector connector = connectors[0]; - connector.setPort(getOnDemandRedirectPort()); - } - } - - server.start(); - return server; - } - }; - - // Execute - ExecutionResult result = RunnableHelper.execute(getClass().getClassLoader(), - jettyServerConfiguration); - // Throw an ServiceException if needed - if (result.hasException()) { - getLogger().log(BasicLevel.LEVEL_ERROR, - "Error has occured while starting Jetty server using configuration file " - + config, result.getException()); - } - } - } else { - throw new ServiceException("Cannot start Jetty server."); - } - - getLogger().log(BasicLevel.INFO, "Jetty8 Service started"); - jettyStarted = true; - - } - - /** - * Checks if the internal web container has been started. - * @return true if it is already started - */ - @Override - public boolean isInternalContainerStarted() { - return jettyStarted; - } - - - /** - * Stop the Jetty service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Undeploy the wars ... - super.doStop(); - - // ... and shut down embedded jetty - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, ""); - } - if (isStarted()) { - if (server != null) { - try { - server.stop(); - server.destroy(); - server = null; - getLogger().log(BasicLevel.INFO, "Jetty8 Service stopped"); - } catch (Exception eExc) { - getLogger().log(BasicLevel.LEVEL_ERROR, - "error has occured while stopping Jetty server using configuration file " + config, eExc); - } - } - } - jettyStarted = false; - } - - /** - * Create the environment and delegate the operation to the implementation - * of the web container. - * @param ctx the context which contains the configuration in order to - * deploy a WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - @Override - protected void doRegisterWar(final Context ctx) throws JWebContainerServiceException { - // Get the 5 parameters : - // - warURL is the URL of the war to register (required param). - // - contextRoot is the context root to which this application - // should be installed (must be unique) (required param). - // - hostName is the name of the host on which deploy the war - // (optional param taken into account only if no element - // was declared in server.xml for this web application) . - // - java2DelegationModel the compliance to java2 delegation model - // - parentCL the war classloader of this war. - // URL warURL = null; - URL unpackedWarURL = null; - String contextRoot = null; - - // War 'management' instance - War war = null; - - boolean java2DelegationModel = true; - try { - war = (War) ctx.lookup("war"); - - unpackedWarURL = (URL) ctx.lookup("unpackedWarURL"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - ClassLoader webClassLoader = null; - try { - webClassLoader = (ClassLoader) ctx.lookup("parentCL"); - } catch (NamingException e) { - String err = "error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - String hostName = null; - - String earAppName = null; - try { - earAppName = (String) ctx.lookup("earAppName"); - } catch (NamingException e) { - // no ear case, so no ear application name - earAppName = null; - } - - WebContainerDeploymentDesc webDD = null; - try { - webDD = (WebContainerDeploymentDesc) ctx.lookup("webDD"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR, "Unable to get default parameters", e); - throw new JWebContainerServiceException("Unable to get default parameters", e); - } - - - // Initialize variable values from the war object - contextRoot = war.getContextRoot(); - java2DelegationModel = war.getJava2DelegationModel(); - - // Special handling for hostName - hostName = war.getHostName(); - if (hostName == null) { - hostName = ""; - } - - - // Install a new web application, whose web application archive is - // at the specified URL, into this container with the specified - // context root. - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else if (contextRoot.equalsIgnoreCase("ROOT")) { - // Jetty uses ROOT.war and ROOT directory to as root context - contextRoot = ""; - } - - // install the war. - File fWar = new File(unpackedWarURL.getFile()); - String fileName = fWar.getAbsolutePath(); - - if (server != null) { - try { - - // The Annotation processor object needs to be initialized with - // the - // component context. Else, the processor does nothing. - javax.naming.Context envCtx = null; - try { - envCtx = (javax.naming.Context) getNaming().getComponentContext(webClassLoader).lookup("comp/env"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR, - "Cannot get the context of the webapplication '" + war.getWarURL() + "'.", e); - } - - - - JOnASWebAppContext webAppContext = new JOnASWebAppContext(); - - // Set the name of the context - webAppContext.setContextPath("/" + contextRoot); - - // Set path to the war file - webAppContext.setWar(unpackedWarURL.toString()); - - if ((hostName != null) && (hostName.length() > 0)) { - // Host was specified - webAppContext.setConnectorNames(new String[] {hostName}); - } - - webAppContext.setAttribute("J2EEDomainName", getDomainName()); - webAppContext.setAttribute("J2EEServerName", getJonasServerName()); - webAppContext.setAttribute("J2EEApplicationName", earAppName); - - String webConf; - if (this.jetty8WebConfPath == null) { - webConf = JETTY_DEFAULT_WEB_XML_FILE; - } else { - webConf = this.jetty8WebConfPath; - } - - // Add default xml descriptor - File webDefaults = new File(webConf); - if (webDefaults.exists()) { - webAppContext.setDefaultsDescriptor(webDefaults.toURL().toExternalForm()); - } else { - getLogger().log(BasicLevel.WARN, "The file '" + webConf - + "' is not present. Check that your JONAS_BASE is up-to-date."); - } - - // Add support for injection - JOnASInjectionDecorator jonasInjection = new JOnASInjectionDecorator(envCtx); - jonasInjection.setEncBindingHolder(webDD.getENCBindingHolder()); - webAppContext.addDecorator(jonasInjection); - - // Add the TLD that comes from OSGi services - List resourcesToMonitor = getTLDResources(); - OSGiTagLibConfiguration osGiTagLibConfiguration = new OSGiTagLibConfiguration(resourcesToMonitor); - // register this new configuration - webAppContext.addConfiguration(osGiTagLibConfiguration); - webAppContext.addDecorator(new ServletHolderDecorator(resourcesToMonitor)); - - - // Set this classloader to the Java2 compliant mode ? - webAppContext.setParentLoaderPriority(java2DelegationModel); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Webapp class loader java 2 delegation model set to " + java2DelegationModel); - - getLogger().log(BasicLevel.DEBUG, "Jetty server starting web app " + fileName); - } - - // Add handler - webAppContexts.addHandler(webAppContext); - - // Load Jetty configurations before starting - webAppContext.loadConfigurations(); - - // start context with the parent classloader as parent classloader - ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(webClassLoader); - try { - webAppContext.start(); - } finally { - //reset classloader - Thread.currentThread().setContextClassLoader(oldCL); - } - - // Store the Jetty web-app ClassLoader - war.setClassLoader(webAppContext.getClassLoader()); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Jetty server is running web app " + fileName); - } - - } catch (IOException ioeExc) { - String err = "Cannot install this web application " + ioeExc; - getLogger().log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, ioeExc); - } catch (Exception eExc) { - String err = "Cannot start this web application " + eExc; - getLogger().log(BasicLevel.ERROR, err); - throw new JWebContainerServiceException(err, eExc); - } - } else { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "No Jetty server to install web app " + fileName); - } - } - - // TODO We need to have the J2EE WebModule MBean here, should add it to - // the Context - // Store WebModule ObjectName in Context - try { - ctx.rebind("WebModule", getDummyJSR77ObjectName(hostName, contextRoot, earAppName)); - } catch (Exception e) { - // NamingException or Mbean related Exception - // TODO i18n - String err = "Cannot rebind WebModule ObjectName in Context"; - getLogger().log(BasicLevel.ERROR, err, e); - throw new JWebContainerServiceException(err, e); - } - - } - - /** - * Create a fake, JSR77 MBean ObjectName. - * @param hostName host name - * @param contextRoot context root name - * @param earAppName application name - * @return a fake JSR77 WebModule ObjectName - * @throws MalformedObjectNameException if ObjectName incorrect - */ - private ObjectName getDummyJSR77ObjectName(final String hostName, final String contextRoot, final String earAppName) - throws MalformedObjectNameException { - // jonas:j2eeType=WebModule,name=//localhost/,J2EEApplication=none,J2EEServer=jonas - return ObjectName.getInstance(getDomainName() + ":j2eeType=WebModule,name=" + "/" + contextRoot - + ",J2EEApplication=" + earAppName + ",J2EEServer=" + getJonasServerName()); - } - - /** - * Return the classpath which can be used for jsp compiling by Jasper. This - * classpath is extracted from the web classloader. - * @param webClassLoader the ClassLoader used for extract URLs. - * @return the jonas classpath which is useful for JSP compiling. - */ - public String getJOnASClassPath(final ClassLoader webClassLoader) { - - StringBuffer classpath = new StringBuffer(); - int n = 0; - - ClassLoader tmpLoader = webClassLoader; - while (tmpLoader != null) { - if (!(tmpLoader instanceof URLClassLoader)) { - break; - } - URL[] repositories = ((URLClassLoader) tmpLoader).getURLs(); - for (int i = 0; i < repositories.length; i++) { - String repository = repositories[i].toString(); - if (repository.startsWith("file://")) { - repository = repository.substring("file://".length()); - } else if (repository.startsWith("file:")) { - repository = repository.substring("file:".length()); - } else { - continue; - } - if (repository == null) { - continue; - } - if (n > 0) { - classpath.append(File.pathSeparator); - } - classpath.append(repository); - n++; - } - tmpLoader = tmpLoader.getParent(); - } - - return classpath.toString(); - } - - /** - * Delegate the unregistration to the implementation of the web container. - * @param ctx the context which contains the configuration in order to - * undeploy a WAR. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - protected void doUnRegisterWar(final Context ctx) throws JWebContainerServiceException { - // Get the 2 parameters : - // - contextRoot is the context root to be removed (required param). - // - hostName is the name of the host to remove the war (optional). - String contextRoot = null; - try { - contextRoot = (String) ctx.lookup("contextRoot"); - } catch (NamingException e) { - String err = "Error while getting parameter from context param "; - getLogger().log(BasicLevel.ERROR, err + e.getMessage()); - throw new JWebContainerServiceException(err, e); - } - - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else if (contextRoot.equalsIgnoreCase("ROOT")) { - // Jetty uses ROOT.war and ROOT directory to as root context - contextRoot = ""; - } - - if (server != null) { - WebAppContext webAppContext = null; - - // find the deployed context - Handler[] handlers = webAppContexts.getHandlers(); - - for (Handler handler : handlers) { - if (handler instanceof WebAppContext) { - WebAppContext tmpContext = (WebAppContext) handler; - String contextPath = tmpContext.getContextPath(); - if (contextPath != null && contextPath.equals("/" + contextRoot)) { - webAppContext = tmpContext; - break; - } - } - } - - if (webAppContext != null) { - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server found and is stopping web app at context " + contextRoot); - } - // Stop it gracefully - try { - webAppContext.stop(); - } catch (Exception e) { - getLogger().log(BasicLevel.LEVEL_DEBUG, - "Jetty server encoutered exception while stopping web application ", e); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server stopped and is removing web app at context " + contextRoot); - } - - webAppContexts.removeHandler(webAppContext); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, - "Jetty server removed and is destroying web app at context " + contextRoot); - } - webAppContext.destroy(); - - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Jetty server unloaded web app at context " + contextRoot); - } - - } else { - if (getLogger().isLoggable(BasicLevel.ERROR)) { - getLogger().log(BasicLevel.ERROR, "Jetty server didn't find web app at context " + contextRoot); - } - } - - } else { - if (getLogger().isLoggable(BasicLevel.ERROR)) { - getLogger().log(BasicLevel.ERROR, "No Jetty server to uninstall web app at context " + contextRoot); - } - } - } - - /** - * Update info of the serverName and serverVersion. - */ - @Override - protected void updateServerInfos() { - setServerName("Jetty"); - setServerVersion(Server.getVersion()); - } - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when default host cannot be - * resolved (multiple services). - */ - @Override - public String getDefaultHost() throws JWebContainerServiceException { - Connector[] connectors = server.getConnectors(); - // If we have more than 1 host, we cannot determine default host! - if (connectors.length == 0) { - String err = "Cannot determine default host : Jetty server has no host!"; - throw new JWebContainerServiceException(err); - } - - return connectors[0].getHost(); - } - - /** - * Return the Default HTTP port number of the web container (can be null if - * multiple HTTP connector has been set). - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when default HTTP port cannot be - * resolved (multiple occurences). - */ - @Override - public String getDefaultHttpPort() throws JWebContainerServiceException { - // if server not yet started, analyze the .xml file - if (!jettyStarted) { - return System.getProperty("jetty.port", "9000"); - } - return String.valueOf(getFirstListenerFromScheme("http").getPort()); - } - - /** - * Return the Default HTTPS port number of the web container (can be null if - * multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when default HTTPS port cannot be - * resolved (multiple occurences). - */ - @Override - public String getDefaultHttpsPort() throws JWebContainerServiceException { - return String.valueOf(getFirstListenerFromScheme("https").getPort()); - } - - /** - * @param myScheme matching URL scheme (http, https, ...) - * @return Returns the first HttpListener found - */ - private Connector getFirstListenerFromScheme(final String myScheme) { - - Connector[] connectors = server.getConnectors(); - List matchingConnectors = new ArrayList(); - for (int i = 0; i < connectors.length; i++) { - Connector connector = connectors[i]; - String scheme = connector.getIntegralScheme(); - if (scheme.equalsIgnoreCase(myScheme)) { - matchingConnectors.add(connector); - } - } - if (matchingConnectors.isEmpty()) { - String err = "Cannot determine default '" + myScheme + "' port :" + " Jetty server has 0 '" + myScheme - + "' Listener"; - throw new JWebContainerServiceException(err); - } - - Connector firstConnector = matchingConnectors.get(0); - // Check if there are more than one HTTP connectors specified, if so, - // warn the administrator. - if (matchingConnectors.size() > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log( - BasicLevel.WARN, - "Found multiple Listener for scheme '" + myScheme + "'" + ", using first by default! (port:" - + firstConnector.getPort() + ")"); - } - } - - return firstConnector; - } - - /** - * Creates an instance of the http service factory. - * @return an instance of the httpservice factory - */ - @Override - protected HttpServiceFactory createHttpServiceFactory() { - return null; - } - - - /** - * Add the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void addTldResource(final URL tldResource) { - super.addTldResource(tldResource); - } - - /** - * Remove the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void removeTldResource(final URL tldResource) { - super.removeTldResource(tldResource); - } - - /** - * {@inheritDoc} - */ - @Override - public void registerAddonConfig(final IAddonConfig addonConfig) { - super.registerAddonConfig(addonConfig); - File file; - file = addonConfig.getConfigurationFile(JETTY8_WEB_FILENAME); - if (file != null) { - this.jetty8WebConfPath = file.getAbsolutePath(); - } - file = addonConfig.getConfigurationFile(JETTY8_CONF_FILENAME); - if (file != null) { - this.jetty8ConfPath = file.getAbsolutePath(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void unregisterAddonConfig(final IAddonConfig addonConfig) { - super.unregisterAddonConfig(addonConfig); - this.jetty8ConfPath = null; - this.jetty8WebConfPath = null; - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/OSGiTagLibConfiguration.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/OSGiTagLibConfiguration.java deleted file mode 100644 index 34d4b37bb7..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/OSGiTagLibConfiguration.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.eclipse.jetty.util.resource.Resource; -import org.eclipse.jetty.webapp.TagLibConfiguration; -import org.eclipse.jetty.webapp.WebAppContext; - -/** - * This Configuration enhances the default taglib configuration by using the dynamically TLD that have been registered. - * @author Florent Benoit - */ -public class OSGiTagLibConfiguration extends TagLibConfiguration { - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public OSGiTagLibConfiguration(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - } - - - /** - * Adds our own TLD resources that have been found. - * @param context the given webApp context - * @throws Exception if resources can't be added - */ - @Override - @SuppressWarnings("unchecked") - public void preConfigure(final WebAppContext context) throws Exception { - if (resourcesToMonitor != null && !resourcesToMonitor.isEmpty()) { - List resources = new ArrayList(); - boolean useCache = Resource.getDefaultUseCaches(); - Resource.setDefaultUseCaches(false); - try { - for (URL url : resourcesToMonitor) { - resources.add(Resource.newResource(url)); - } - } finally { - Resource.setDefaultUseCaches(useCache); - } - Collection previouslySet = (Collection) context.getAttribute(TagLibConfiguration.TLD_RESOURCES); - if (previouslySet != null) { - resources.addAll(previouslySet); - } - context.setAttribute(TagLibConfiguration.TLD_RESOURCES, resources); - } - super.preConfigure(context); - - } -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/ServletHolderDecorator.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/ServletHolderDecorator.java deleted file mode 100644 index a9499dd371..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/ServletHolderDecorator.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8; - -import java.net.URL; -import java.util.EventListener; -import java.util.List; - -import javax.servlet.Filter; -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.jasper.servlet.JspServlet; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.servlet.ServletContextHandler.Decorator; - -/** - * Allows to add listener for a given servlet holder. - * @author Florent Benoit - * - */ -public class ServletHolderDecorator implements Decorator { - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public ServletHolderDecorator(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - } - - - - @Override - public void decorateFilterHolder(final FilterHolder arg0) throws ServletException { - - } - - @Override - public T decorateFilterInstance(final T arg0) throws ServletException { - return arg0; - } - - @Override - public T decorateListenerInstance(final T arg0) throws ServletException { - return arg0; - } - - /** - * Adds a new lifecycle listener for the JSP servlet. - * @param servletHolder the given servlet holder of the servlet - */ - @Override - public void decorateServletHolder(final ServletHolder servletHolder) throws ServletException { - if (JspServlet.class.getName().equals(servletHolder.getClassName())) { - servletHolder.addLifeCycleListener(new JSPLifecycleListener(resourcesToMonitor)); - } - - } - - @Override - public T decorateServletInstance(final T servlet) throws ServletException { - return servlet; - } - - @Override - public void destroyFilterInstance(final Filter arg0) { - } - - @Override - public void destroyListenerInstance(final EventListener arg0) { - - } - - @Override - public void destroyServletInstance(final Servlet arg0) { - - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JOnASLoginService.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JOnASLoginService.java deleted file mode 100644 index e18ac8561c..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JOnASLoginService.java +++ /dev/null @@ -1,295 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8.security; - -import java.security.Principal; -import java.security.acl.Group; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import javax.security.auth.Subject; -import javax.security.auth.login.AccountExpiredException; -import javax.security.auth.login.CredentialExpiredException; -import javax.security.auth.login.FailedLoginException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; - -import org.eclipse.jetty.security.DefaultIdentityService; -import org.eclipse.jetty.security.IdentityService; -import org.eclipse.jetty.security.LoginService; -import org.eclipse.jetty.server.UserIdentity; -import org.eclipse.jetty.util.component.AbstractLifeCycle; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - - -/** - * Realm used by Jetty 8 service. - * @author Florent Benoit - */ -public class JOnASLoginService extends AbstractLifeCycle implements LoginService { - - /** - * Name used in the JAAS config file. - */ - private static final String JAAS_CONFIG_NAME = "jetty"; - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(JOnASLoginService.class); - - /** - * Name of this realm. - */ - private String name; - - /** - * Used for create identities. - */ - private IdentityService identityService; - - /** - * List of authenticated users. - */ - private Map users = null; - - - /** - * Default Constructor. - */ - public JOnASLoginService() { - this("JOnAS Login Service"); - } - - /** - * Default Constructor. - * @param name of the login service - */ - public JOnASLoginService(final String name) { - this.users = new ConcurrentHashMap(); - setName(name); - } - - - /** - * Create a default identity service if there is no service. - * @throws Exception if it can't be started - */ - @Override - protected void doStart() throws Exception { - if (identityService == null) { - this.identityService = new DefaultIdentityService(); - } - super.doStart(); - } - - /** Login a user. - * @param username The user name - * @param credentials The users credentials - * @return A UserIdentity if the credentials matched, otherwise null - */ - public UserIdentity login(final String username, final Object credentials) { - - // No authentication can be made with a null username - if (username == null) { - return null; - } - - UserIdentity userIdentity = getUsers().get(username); - // User previously authenticated --> remove from the cache - if (userIdentity != null) { - removeUser(username); - } - - NoInputCallbackHandler noInputCH = null; - LoginContext loginContext = null; - noInputCH = new NoInputCallbackHandler(username, (String) credentials, null); - - //Establish a LoginContext to use for authentication - try { - loginContext = new LoginContext(JAAS_CONFIG_NAME, noInputCH); - } catch (LoginException e) { - logger.error("Cannot create a login context for the user ''{0}''", username, e); - return null; - } - - // Negotiate a login via this LoginContext - Subject subject = null; - try { - loginContext.login(); - subject = loginContext.getSubject(); - if (subject == null) { - logger.error("No Subject for user ''{0}''", username); - return null; - } - } catch (AccountExpiredException e) { - logger.error("Account expired for user ''{0}''", username, e); - return null; - } catch (CredentialExpiredException e) { - logger.error("Credential Expired for user ''{0}''", username, e); - return null; - } catch (FailedLoginException e) { - logger.error("Failed Login exception for user ''{0}''", username, e); - return null; - } catch (LoginException e) { - logger.error("Login exception for user ''{0}''", username, e); - return null; - } - - // Retrieve first principal name found (without groups) - Iterator iterator = subject.getPrincipals(Principal.class).iterator(); - String userName = null; - while (iterator.hasNext() && (userName == null)) { - Principal principal = iterator.next(); - if (!(principal instanceof Group)) { - userName = principal.getName(); - } - } - - // No name --> error - if (userName == null) { - logger.error("No Username found in the subject"); - return null; - } - - // Retrieve all roles of the user (Roles are members of the Group class) - Set groups = subject.getPrincipals(Group.class); - List roles = new ArrayList(); - - for (Group group : groups) { - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = e.nextElement(); - roles.add(p.getName()); - } - } - - // Create a JettyPrincipal for Jetty - JettyPrincipal principal = new JettyPrincipal(userName, roles); - - // Register the subject in the security context - //SecurityContext ctx = new SecurityContext(subject); - SecurityContext ctx = new SecurityContext(userName, roles); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - UserIdentity identity = identityService.newUserIdentity(subject, principal, roles.toArray(new String[roles.size()])); - - // Add to cache - addUser(username, identity); - - return identity; - } - - /** Validate a user identity. - * Validate that a UserIdentity previously created by a call - * to {@link #login(String, Object)} is still valid. - * @param user The user to validate - * @return true if authentication has not been revoked for the user. - */ - public boolean validate(final UserIdentity user) { - return true; - } - - /** - * @return the users. - */ - protected Map getUsers() { - return users; - } - - /** - * Add a user to the current map. - * @param username name of the user - * @param userIdentity object - */ - protected void addUser(final String username, final UserIdentity userIdentity) { - users.put(username, userIdentity); - } - - /** - * Remove a specific user. - * @param username user to remove - */ - protected void removeUser(final String username) { - users.remove(username); - } - - /** - * Logout a user. - * @param user the given user - */ - public void logout(final UserIdentity user) { - // Set anonymous identity - SecurityCurrent.getCurrent().setSecurityContext(new SecurityContext()); - } - - - /** - * Sets the name of the realm. - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /* ------------------------------------------------------------ */ - /** - * @return Get the name of the login service (aka Realm name) - */ - public String getName() { - return name; - } - - - /** - * Get the IdentityService associated with this Login Service. - * @return the IdentityService associated with this Login Service. - */ - public IdentityService getIdentityService() { - return identityService; - } - - /** - * Set the IdentityService associated with this Login Service. - * @param identityService the IdentityService associated with this Login - * Service. - */ - public void setIdentityService(final IdentityService identityService) { - this.identityService = identityService; - } - - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JettyPrincipal.java b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JettyPrincipal.java deleted file mode 100644 index 9eefd355c8..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/java/org/ow2/jonas/web/jetty8/security/JettyPrincipal.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id:JettyPrincipal.java 10798 2007-07-01 20:56:02Z benoitf $ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.jetty8.security; - -import java.security.Principal; -import java.util.List; - -/** - * Define a principal which can be used by Jetty. - * @author Florent Benoit - */ -public class JettyPrincipal implements Principal { - - /** - * Name of the principal. - */ - private String name; - - /** - * Roles for this principal. - */ - private List roles; - - /** - * Constructor. - * @param name name of this principal - * @param roles roles for this principal - */ - public JettyPrincipal(final String name, final List roles) { - this.name = name; - this.roles = roles; - } - - /** - * Get the name of this principal. - * @return the name of this principal - */ - public String getName() { - return name; - } - - /** - * This user is authenticated ? - * @return true if it is authenticated - */ - public boolean isAuthenticated() { - return true; - } - - /** - * Check if the given role is in the user's roles. - * @param role the given role - * @return true if the role is in the user's roles - */ - public boolean isUserInRole(final String role) { - if (roles == null) { - return (false); - } - return roles.contains(role); - } - - /** - * Gets the roles of this user. - * @return roles of this user - */ - public List getRoles() { - return roles; - } - -} diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8-web.xml b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8-web.xml deleted file mode 100644 index 1f785bbefc..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8-web.xml +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - Default web.xml file. - This file is applied to a Web application before it's own WEB_INF/web.xml file - - - - - - - - - - - - - - - - - - - default - org.eclipse.jetty.servlet.DefaultServlet - - aliases - false - - - acceptRanges - true - - - dirAllowed - true - - - welcomeServlets - false - - - redirectWelcome - false - - - maxCacheSize - 256000000 - - - maxCachedFileSize - 200000000 - - - maxCachedFiles - 2048 - - - gzip - true - - - useFileMappedBuffer - true - - - resourceCache - resourceCache - - - 0 - - - - default - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.apache.jasper.servlet.JspServlet - - logVerbosityLevel - DEBUG - - - fork - false - - - compiler - jdt - - - xpoweredBy - false - - - 0 - - - - jsp - *.jsp - *.jspf - *.jspx - *.xsp - *.JSP - *.JSPF - *.JSPX - *.XSP - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - - ar - ISO-8859-6 - - - be - ISO-8859-5 - - - bg - ISO-8859-5 - - - ca - ISO-8859-1 - - - cs - ISO-8859-2 - - - da - ISO-8859-1 - - - de - ISO-8859-1 - - - el - ISO-8859-7 - - - en - ISO-8859-1 - - - es - ISO-8859-1 - - - et - ISO-8859-1 - - - fi - ISO-8859-1 - - - fr - ISO-8859-1 - - - hr - ISO-8859-2 - - - hu - ISO-8859-2 - - - is - ISO-8859-1 - - - it - ISO-8859-1 - - - iw - ISO-8859-8 - - - ja - Shift_JIS - - - ko - EUC-KR - - - lt - ISO-8859-2 - - - lv - ISO-8859-2 - - - mk - ISO-8859-5 - - - nl - ISO-8859-1 - - - no - ISO-8859-1 - - - pl - ISO-8859-2 - - - pt - ISO-8859-1 - - - ro - ISO-8859-2 - - - ru - ISO-8859-5 - - - sh - ISO-8859-5 - - - sk - ISO-8859-2 - - - sl - ISO-8859-2 - - - sq - ISO-8859-2 - - - sr - ISO-8859-5 - - - sv - ISO-8859-1 - - - tr - ISO-8859-9 - - - uk - ISO-8859-5 - - - zh - GB2312 - - - zh_TW - Big5 - - - - - - Disable TRACE - / - TRACE - - - - - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8.xml b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8.xml deleted file mode 100644 index 175403a256..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/jonas-resources/conf/jetty8.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 - 200 - - - - - - - - - - - - - http - 300000 - 2 - false - 8443 - 20000 - 5000 - - - - - - - - - - - - - - - - - - - JOnAS Realm - - - - - - - - - true - true - - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/Compiler.patch b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/Compiler.patch deleted file mode 100644 index 3482a91db6..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/Compiler.patch +++ /dev/null @@ -1,48 +0,0 @@ -Index: Compiler.java -=================================================================== ---- Compiler.java (revision 1082212) -+++ Compiler.java (working copy) -@@ -737,25 +737,18 @@ - * The default is to use javac from ant. - */ - private void initJavaCompiler() throws JasperException { -- Double version = -- Double.valueOf(System.getProperty("java.specification.version")); -- if (version >= 1.6 || getClassFor("javax.tools.Tool") != null) { -- // JDK 6 or bundled with jsr199 compiler -- javaCompiler = new Jsr199JavaCompiler(); -- } else { -- Class c = getClassFor("org.eclipse.jdt.internal.compiler.Compiler"); -- if (c != null) { -- c = getClassFor("org.apache.jasper.compiler.JDTJavaCompiler"); -- if (c != null) { -- try { -- javaCompiler = (JavaCompiler) c.newInstance(); -- } catch (Exception ex) { -- } -- } -- } -+ Class c = getClassFor("org.eclipse.jdt.internal.compiler.Compiler"); -+ if (c != null) { -+ c = getClassFor("org.apache.jasper.compiler.JDTJavaCompiler"); -+ if (c != null) { -+ try { -+ javaCompiler = (JavaCompiler) c.newInstance(); -+ } catch (Exception ex) { -+ } -+ } - } - if (javaCompiler == null) { -- Class c = getClassFor("org.apache.tools.ant.taskdefs.Javac"); -+ c = getClassFor("org.apache.tools.ant.taskdefs.Javac"); - if (c != null) { - c = getClassFor("org.apache.jasper.compiler.AntJavaCompiler"); - if (c != null) { -@@ -766,6 +759,7 @@ - } - } - } -+ - if (javaCompiler == null) { - errDispatcher.jspError("jsp.error.nojavac"); - } diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/TagLibraryInfoImpl.patch b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/TagLibraryInfoImpl.patch deleted file mode 100644 index 91dde71c49..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/patches/TagLibraryInfoImpl.patch +++ /dev/null @@ -1,35 +0,0 @@ -Index: TagLibraryInfoImpl.java -=================================================================== ---- TagLibraryInfoImpl.java (revision 1082212) -+++ TagLibraryInfoImpl.java (working copy) -@@ -65,6 +65,7 @@ - import java.io.StringWriter; - import java.net.JarURLConnection; - import java.net.URL; -+import java.net.URLConnection; - import java.util.Collection; - import java.util.Enumeration; - import java.util.HashMap; -@@ -241,7 +242,20 @@ - } - - try { -- if (!location[0].endsWith("jar")) { -+ if (location[0].startsWith("bundle")) { -+ URL url; -+ try { -+ url = new URL(location[0]); -+ URLConnection urlConnection = url.openConnection(); -+ urlConnection.setUseCaches(false); -+ in = urlConnection.getInputStream(); -+ } catch (Exception e) { -+ err.jspError("jsp.error.tld.unable_to_read", "bundle", -+ location[0], e.toString()); -+ } -+ parseTLD(ctxt, location[0], in, null); -+ -+ } else if (!location[0].endsWith("jar")) { - // Location points to TLD file - try { - in = getResourceAsStream(location[0]); - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/properties/jonas-web-jetty8.properties b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/properties/jonas-web-jetty8.properties deleted file mode 100644 index 91a63f97d4..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/properties/jonas-web-jetty8.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.web.class org.ow2.jonas.web.jetty8.Jetty8Service \ No newline at end of file diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/META-INF/jonas-web-container-jetty-8.0-core.bnd b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/META-INF/jonas-web-container-jetty-8.0-core.bnd deleted file mode 100644 index 7827d6350b..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/META-INF/jonas-web-container-jetty-8.0-core.bnd +++ /dev/null @@ -1,51 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Need to add this import (properties) because Bnd do not handle multiple level inheritance. -Import-Package javax.persistence.*;version="[1.0.0,2.0.0]",\ - javax.servlet;version=3.0.0,\ - javax.servlet.http;version=3.0.0,\ - * - -Export-Package org.glassfish.jsp.api;version=${jsp-impl.version}, \ - org.apache.jasper.*;version=${jsp-impl.version};-split-package:=merge-first, \ - org.apache;version=${jetty8.version} - -Private-Package org.ow2.jonas.web.jetty8.* - -DynamicImport-Package javax.servlet.resources, \ - javax.servlet.jsp.resources, \ - org.ow2.jonas.deployment.api, \ - org.ow2.jonas.jmx, \ - org.ow2.util.ee.metadata.war.api, \ - org.ow2.jonas.naming, \ - org.ow2.jonas.workcleaner, \ - org.ow2.jonas.ws.axis,\ - org.ow2.jonas.ws.jaxrpc, \ - org.ow2.jonas.addon.deploy.api.config,\ - org.ow2.util.ee.deploy.api.deployer,\ - org.ow2.util.ee.deploy.api.deployable, \ - org.eclipse.jetty.*, \ - org.eclipse.jdt.* - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/metadata.xml b/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/metadata.xml deleted file mode 100644 index 5e5c9fdf6b..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/jetty/8.0.x/pom.xml b/jonas/modules/services/web-container/jetty/8.0.x/pom.xml deleted file mode 100644 index b0c46a48a7..0000000000 --- a/jonas/modules/services/web-container/jetty/8.0.x/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container-jetty - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-jetty-8.0 - pom - JOnAS :: Services :: Web Container :: Jetty :: 8.0.x - Implementation for Jetty 8.0.x - - core - ant - - diff --git a/jonas/modules/services/web-container/jetty/base/pom.xml b/jonas/modules/services/web-container/jetty/base/pom.xml deleted file mode 100644 index a3cb71903c..0000000000 --- a/jonas/modules/services/web-container/jetty/base/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-web-container-jetty - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-web-container-jetty-base-ant - jar - JOnAS :: Services :: Web Container :: Jetty :: Base - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-base-ant - ${project.version} - - - diff --git a/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/Jetty.java b/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/Jetty.java deleted file mode 100644 index a921ec6806..0000000000 --- a/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/Jetty.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty; - -import org.ow2.jonas.antmodular.web.base.WebContainer; - -/** - * Support Jetty Connectors Configuration. - * - * @author Guillaume Sauthier - */ -public abstract class Jetty extends WebContainer { - - /** - * Info for the logger. - */ - public static final String INFO = "[Jetty] "; - - /** - * HTTPS TOKEN. - */ - public static final String HTTPS_TOKEN = "\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - if (JettyHttps.IBM_VM.equalsIgnoreCase(jettyHttps.getVm())) { - value.append(" \n"); - } else { - // default to Sun - value.append(" \n"); - } - value.append(" " + jettyHttps.getPort() + "\n"); - value.append(" 5\n"); - value.append(" 100\n"); - value.append(" 30000\n"); - value.append(" 2000\n"); - if (jettyHttps.getKeystoreFile() != null) { - value.append(" " + jettyHttps.getKeystoreFile() + "\n"); - } - if (jettyHttps.getKeystorePass() != null) { - value.append(" " + jettyHttps.getKeystorePass() + "\n"); - } - if (jettyHttps.getKeyPassword() != null) { - value.append(" " + jettyHttps.getKeyPassword() + "\n"); - } - value.append(" \n"); - value.append(" \n"); - value.append(" \n\n"); - value.append(" \n"); - value.append(" " + Jetty.HTTPS_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(Jetty.INFO + "Setting HTTPS port number to : " + jettyHttps.getPort()); - addTask(propertyReplace); - - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(Https.DEFAULT_PORT); - propertyReplace.setValue(jettyHttps.getPort()); - propertyReplace.setLogInfo(Jetty.INFO + "Fix HTTP redirect port number to : " + jettyHttps.getPort()); - addTask(propertyReplace); - } - - /** - * Configure an AJP Connectors. - * @param ajp AJP Configuration. - */ - public void addConfiguredAjp(final Ajp ajp, final String confFile) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(Jetty.AJP_TOKEN); - StringBuffer value = new StringBuffer(); - value.append("\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" " + ajp.getPort() + "\n"); - value.append(" 5\n"); - value.append(" 20\n"); - value.append(" 0\n"); - value.append(" 9043\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n\n"); - value.append(" \n"); - value.append(" " + Jetty.AJP_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(Jetty.INFO + "Setting AJP Connectors to : " + ajp.getPort()); - addTask(propertyReplace); - } - - /** - * Configure a Jetty HTTPS Connectors. - * @param jettyHttps JettyHTTPS Configuration. - */ - public abstract void addConfiguredHttps(final JettyHttps jettyHttps); - - /** - * Configure an AJP Connectors. - * @param ajp AJP Configuration. - */ - public abstract void addConfiguredAjp(final Ajp ajp); - -} diff --git a/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/JettyHttps.java b/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/JettyHttps.java deleted file mode 100644 index 35d639430d..0000000000 --- a/jonas/modules/services/web-container/jetty/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/jetty/JettyHttps.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.jetty; - -import org.ow2.jonas.antmodular.web.base.Https; - -/** - * Created by IntelliJ IDEA. - * User: cazaux-j - * Date: 09/06/11 - * Time: 14:04 - * To change this template use File | Settings | File Templates. - */ -public class JettyHttps extends Https{ - - /** - * Sun VM name. - */ - public static final String SUN_VM = "sun"; - - /** - * IBM VM name. - */ - public static final String IBM_VM = "ibm"; - - /** - * Default VM name. - */ - private static final String DEFAULT_VM = SUN_VM; - - /** - * Targeted VM (Only used for Jetty HTTPS Listener). - */ - private String vm = DEFAULT_VM; - - /** - * key password (only for Jetty). - */ - private String keyPassword = null; - - /** - * @return Returns the vm. - */ - public String getVm() { - return vm; - } - - /** - * @param vm The vm to set. - */ - public void setVm(final String vm) { - this.vm = vm; - } - - /** - * @return Returns the keyPassword. - */ - public String getKeyPassword() { - return keyPassword; - } - - /** - * @param keyPassword The keyPassword to set. - */ - public void setKeyPassword(final String keyPassword) { - this.keyPassword = keyPassword; - } -} diff --git a/jonas/modules/services/web-container/jetty/pom.xml b/jonas/modules/services/web-container/jetty/pom.xml deleted file mode 100644 index 57571a6da6..0000000000 --- a/jonas/modules/services/web-container/jetty/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-jetty - pom - JOnAS :: Services :: Web Container :: Jetty - - Implementation for Jetty of the Web Container - - - - - org.ow2.jonas - jonas-web-container-base-core - ${project.version} - - - - - base - 6.1.x - 8.0.x - - - diff --git a/jonas/modules/services/web-container/pom.xml b/jonas/modules/services/web-container/pom.xml deleted file mode 100644 index aa53bea92f..0000000000 --- a/jonas/modules/services/web-container/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container - pom - JOnAS :: Services :: Web Container - - - - base - jetty - tomcat - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/pom.xml deleted file mode 100644 index 1e40cafa34..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - - - - jonas-web-container-tomcat-6.0-addons - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-6.0-addon-with-bundles - pom - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x :: Addons :: Addon with bundles - - - - org.osgi - org.osgi.compendium - - - org.ow2.jonas - jonas-web-container-base-core - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - ${project.version} - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/src/main/assembly/assembly.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/src/main/assembly/assembly.xml deleted file mode 100644 index cd6d396db5..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-bundles/src/main/assembly/assembly.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - bin - - zip - - false - - - - - ../target/extra-resources - META-INF/ - 774 - - - - ../${project.build.directory}/conf - conf/ - - * - - - - - - - - deploy/ - true - - org.osgi:org.osgi.compendium - org.ow2.jonas:jonas-web-container-base-core:jar - org.ow2.jonas:jonas-web-container-tomcat-6.0-core:jar - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/pom.xml deleted file mode 100644 index 83cf1886b7..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/pom.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - jonas-web-container-tomcat-6.0-addons - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-6.0-addon-with-deployment-plans - pom - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x :: Addons :: Addon with deployment plan - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-base-core - deployment-plan - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml deleted file mode 100644 index 90a59cc172..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - bin - - zip - - false - - - - - ../target/extra-resources - META-INF/ - 774 - - - - ../${project.build.directory}/conf - conf/ - - * - - - - - ${project.build.directory}/deployment-plan - deploy/ - - * - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/pom.xml deleted file mode 100644 index fd16c39e69..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - jonas-web-container-tomcat-6.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-6.0-addons - pom - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x :: Addons - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - config - ${project.version} - - - ${project.build.directory}/conf - META-INF/** - - * - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - - addon-with-bundles - addon-with-deployment-plans - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/addons/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/web-container/tomcat/6.0.x/addons/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 1434fbaee0..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/addons/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - tomcat6 - - - Tomcat6 Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - http://my.repositories.com - - - - jonas.service.tomcat6 - - - - - - org.ow2.jonas.web.tomcat6.Tomcat6Service - - true - - true - - 0 - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/ant/pom.xml deleted file mode 100644 index 3b8fef1d98..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-web-container-tomcat-6.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-6.0-ant - bundle - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-tomcat-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6.java b/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6.java deleted file mode 100644 index 5eaaf1c23c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6.java +++ /dev/null @@ -1,120 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat6; - -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatSessionManager; -import org.ow2.jonas.antmodular.web.base.Cluster; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.Tomcat; -import org.ow2.jonas.antmodular.web.base.SessionReplication; - -/** - * Support Tomcat Connector Configuration. - * Prefered order : http, director, ajp, https, cluster. - * - * @author Jeremy Cazaux - */ -public class Tomcat6 extends Tomcat { - - /** - * Name of the tomcat server file - */ - public static final String TOMCAT_SERVER_CONF_FILE = "tomcat6-server.xml"; - - /** - * Name of the implementation class for Tomcat. - */ - private static final String TOMCAT_SERVICE = "org.ow2.jonas.web.tomcat6.Tomcat6Service"; - - /** - * Name of the tomcat context file - */ - public static final String TOMCAT_CONTEXT_CONF_FILE = "tomcat6-context.xml"; - - /** - * Default Constructor. - */ - public Tomcat6() { - super(); - } - - /** - * Set the port number for the WebContainer - * @param portNumber the port number - */ - @Override - public void setPort(final String portNumber) { - super.setPort(portNumber, TOMCAT_SERVER_CONF_FILE, "tomcat"); - } - - /** - * Configure Tomcat6's connectors - * @param tomcat6Connectors - */ - public void addConfiguredConnectors(final Tomcat6Connectors tomcat6Connectors) { - this.tasks.add(tomcat6Connectors); - } - - /** - * Configure a Cluster HTTP Session. - * @param cluster Cluster HTTP Session. - */ - @Deprecated - public void addConfiguredCluster(final Cluster cluster) { - addConfiguredSessionReplication(cluster); - } - - /** - * {@inheritDoc} - */ - @Override - public void addConfiguredSessionReplication(final SessionReplication sessionReplication) { - super.addConfiguredSessionReplication(sessionReplication, TOMCAT_SERVER_CONF_FILE); - } - - /** - * Configure a jvmRoute. - * @param jvmRoute jvm route name - */ - public void setJvmRoute(final String jvmRoute) { - super.setJvmRoute(jvmRoute, TOMCAT_SERVER_CONF_FILE); - } - - /** - * {@inheritDoc} - */ - @Override - public void addConfiguredSessionManager(final TomcatSessionManager tomcatSessionManager) { - super.addConfiguredSessionManager(tomcatSessionManager, TOMCAT_CONTEXT_CONF_FILE); - } - - /** - * Execute all tasks - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.TOMCAT_SERVICE, this.INFO, destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6Connectors.java b/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6Connectors.java deleted file mode 100644 index 8e5a38d99d..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat6/Tomcat6Connectors.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat6; - -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatAjp; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatConnectors; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatHttp; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatHttps; -import org.ow2.jonas.antmodular.web.base.Director; - -/** - * Configure Tomcat 6 connector - * @author Jeremy Cazaux - */ -public class Tomcat6Connectors extends TomcatConnectors { - - /** - * Default constructor - */ - public Tomcat6Connectors() { - super(); - } - - /** - * Configure a HTTP Connector. - * @param http HTTP Configuration. - */ - @Override - public void addConfiguredHttp(TomcatHttp http) { - super.addConfiguredHttp(http, Tomcat6.TOMCAT_SERVER_CONF_FILE, Tomcat6.INFO); - } - - /** - * Configure a HTTPS Connector. - * @param https HTTPS Configuration. - */ - @Override - public void addConfiguredHttps(TomcatHttps https) { - super.addConfiguredHttps(https, Tomcat6.TOMCAT_SERVER_CONF_FILE); - } - - /** - * Configure a Director Connector. - * @param dir Director Configuration. - */ - @Override - public void addConfiguredDirector(Director dir) { - super.addConfiguredDirector(dir, Tomcat6.TOMCAT_SERVER_CONF_FILE); - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - @Override - public void addConfiguredAjp(TomcatAjp ajp) { - super.addConfiguredAjp(ajp, Tomcat6.TOMCAT_SERVER_CONF_FILE); - } - - @Override - public void execute() { - super.execute(); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/antlib-tomcat6.xml b/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/antlib-tomcat6.xml deleted file mode 100644 index ec7140fe33..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/antlib-tomcat6.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.properties b/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.properties deleted file mode 100644 index af94464262..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.properties +++ /dev/null @@ -1 +0,0 @@ -webcontainer.service.defaultname=tomcat6 \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.xml b/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.xml deleted file mode 100644 index 0810c8f01d..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/ant/src/main/resources/build-tomcat6.xml +++ /dev/null @@ -1,34 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/pom.xml deleted file mode 100644 index 7e386257fe..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/pom.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - jonas-web-container-tomcat-6.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-6.0-core - bundle - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x :: Core - - - - org.ow2.bundles - ow2-util-log - provided - - - - org.ow2.jonas - jonas-security-core - ${project.version} - provided - - - - org.apache.tomcat - catalina-ha - ${tomcat.version} - - - org.apache.tomcat - servlet-api - - - - - - - org.apache.tomcat - catalina - ${tomcat.version} - - - org.apache.tomcat - servlet-api - - - - - - org.apache.tomcat - coyote - ${tomcat.version} - - - org.apache.tomcat - servlet-api - - - - - - - org.apache.tomcat - jasper - ${tomcat.version} - - - org.apache.tomcat - servlet-api - - - org.eclipse.jdt - ecj - - - - - - org.eclipse.jdt.core.compiler - ecj - 3.5.1 - - - - org.apache.tomcat - tribes - ${tomcat.version} - runtime - - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - web-tomcat6 - - - org.ow2.jonas - jonas-web-container-tomcat-6.0-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/connector/Response.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/connector/Response.java deleted file mode 100644 index 8e305d1383..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/connector/Response.java +++ /dev/null @@ -1,1778 +0,0 @@ -/// Response.java from Tomcat 6.0.29 with JOnAS-specific modifications. -/// -/// Original file: -/// https://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_29/java/org/apache/catalina/connector/Response.java - -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.apache.catalina.connector; - - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.MalformedURLException; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.Locale; -import java.util.TimeZone; -import java.util.Vector; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - -import org.apache.catalina.Context; -import org.apache.catalina.Globals; -import org.apache.catalina.Session; -import org.apache.catalina.Wrapper; -import org.apache.catalina.security.SecurityUtil; -import org.apache.catalina.util.CharsetMapper; -import org.apache.catalina.util.DateTool; -import org.apache.catalina.util.StringManager; -import org.apache.tomcat.util.buf.CharChunk; -import org.apache.tomcat.util.buf.UEncoder; -import org.apache.tomcat.util.http.FastHttpDateFormat; -import org.apache.tomcat.util.http.MimeHeaders; -import org.apache.tomcat.util.http.ServerCookie; -import org.apache.tomcat.util.net.URL; - -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -import org.ow2.jonas.web.tomcat6.versioning.FilteredOutputStream; -import org.ow2.jonas.web.tomcat6.versioning.VersionedPathBean; - -/** - * Wrapper object for the Coyote response. - * - * @author Remy Maucherat - * @author Craig R. McClanahan - * @version $Revision: 19229 $ $Date: 2010-02-10 17:42:36 +0100 (Wed, 10 Feb 2010) $ - */ - -public class Response - implements HttpServletResponse { - - - // ----------------------------------------------------------- Constructors - - static { - // Ensure that URL is loaded for SM - URL.isSchemeChar('c'); - } - - public Response() { - urlEncoder.addSafeCharacter('/'); - } - - - // ----------------------------------------------------- Class Variables - - - /** - * Descriptive information about this Response implementation. - */ - protected static final String info = - "org.apache.coyote.tomcat5.CoyoteResponse/1.0"; - - - /** - * The string manager for this package. - */ - protected static StringManager sm = - StringManager.getManager(Constants.Package); - - - // ----------------------------------------------------- Instance Variables - - /** - * The date format we will use for creating date headers. - */ - protected SimpleDateFormat format = null; - - - // ------------------------------------------------------------- Properties - - - /** - * Associated Catalina connector. - */ - protected Connector connector; - - /** - * Return the Connector through which this Request was received. - */ - public Connector getConnector() { - return (this.connector); - } - - /** - * Set the Connector through which this Request was received. - * - * @param connector The new connector - */ - public void setConnector(Connector connector) { - this.connector = connector; - if("AJP/1.3".equals(connector.getProtocol())) { - // default size to size of one ajp-packet - outputBuffer = new FilteredOutputStream(this, 8184); - } else { - outputBuffer = new FilteredOutputStream(this); - } - outputStream = new CoyoteOutputStream(outputBuffer); - writer = new CoyoteWriter(outputBuffer); - } - - - /** - * Coyote response. - */ - protected org.apache.coyote.Response coyoteResponse; - - /** - * Set the Coyote response. - * - * @param coyoteResponse The Coyote response - */ - public void setCoyoteResponse(org.apache.coyote.Response coyoteResponse) { - this.coyoteResponse = coyoteResponse; - outputBuffer.setResponse(coyoteResponse); - } - - /** - * Get the Coyote response. - */ - public org.apache.coyote.Response getCoyoteResponse() { - return (coyoteResponse); - } - - - /** - * Return the Context within which this Request is being processed. - */ - public Context getContext() { - return (request.getContext()); - } - - /** - * Set the Context within which this Request is being processed. This - * must be called as soon as the appropriate Context is identified, because - * it identifies the value to be returned by getContextPath(), - * and thus enables parsing of the request URI. - * - * @param context The newly associated Context - */ - public void setContext(Context context) { - request.setContext(context); - } - - /** - * Associated VersionedPathBean. - */ - protected VersionedPathBean versionedPathBean; - - /** - * Return the VersionedPathBean for the request. - */ - public VersionedPathBean getVersionedPathBean() { - return (this.versionedPathBean); - } - - /** - * Set the VersionedPathBean for the request. - * - * @param versionedPathBean The new VersionedPathBean - */ - public void setVersionedPathBean(VersionedPathBean versionedPathBean) { - this.versionedPathBean = versionedPathBean; - } - - /** - * The associated output buffer. - */ - protected OutputBuffer outputBuffer; - - - /** - * The associated output stream. - */ - protected CoyoteOutputStream outputStream; - - - /** - * The associated writer. - */ - protected CoyoteWriter writer; - - - /** - * The application commit flag. - */ - protected boolean appCommitted = false; - - - /** - * The included flag. - */ - protected boolean included = false; - - - /** - * The characterEncoding flag - */ - private boolean isCharacterEncodingSet = false; - - /** - * The error flag. - */ - protected boolean error = false; - - - /** - * The set of Cookies associated with this Response. - */ - protected ArrayList cookies = new ArrayList(); - - - /** - * Using output stream flag. - */ - protected boolean usingOutputStream = false; - - - /** - * Using writer flag. - */ - protected boolean usingWriter = false; - - - /** - * URL encoder. - */ - protected UEncoder urlEncoder = new UEncoder(); - - - /** - * Recyclable buffer to hold the redirect URL. - */ - protected CharChunk redirectURLCC = new CharChunk(); - - - // --------------------------------------------------------- Public Methods - - - /** - * Release all object references, and initialize instance variables, in - * preparation for reuse of this object. - */ - public void recycle() { - - outputBuffer.recycle(); - usingOutputStream = false; - usingWriter = false; - appCommitted = false; - included = false; - error = false; - isCharacterEncodingSet = false; - - cookies.clear(); - - if (Globals.IS_SECURITY_ENABLED || Connector.RECYCLE_FACADES) { - if (facade != null) { - facade.clear(); - facade = null; - } - if (outputStream != null) { - outputStream.clear(); - outputStream = null; - } - if (writer != null) { - writer.clear(); - writer = null; - } - } else { - writer.recycle(); - } - - } - - - /** - * Clear cached encoders (to save memory for Comet requests). - */ - public void clearEncoders() { - outputBuffer.clearEncoders(); - } - - - // ------------------------------------------------------- Response Methods - - - /** - * Return the number of bytes actually written to the output stream. - */ - public int getContentCount() { - return outputBuffer.getContentWritten(); - } - - /** - * Return the number of bytes actually written to the output stream. - */ - public long getContentCountLong() { - return outputBuffer.getContentWrittenLong(); - } - - /** - * Set the application commit flag. - * - * @param appCommitted The new application committed flag value - */ - public void setAppCommitted(boolean appCommitted) { - this.appCommitted = appCommitted; - } - - - /** - * Application commit flag accessor. - */ - public boolean isAppCommitted() { - return (this.appCommitted || isCommitted() || isSuspended() - || ((getContentLength() > 0) - && (getContentCount() >= getContentLength()))); - } - - - /** - * Return the "processing inside an include" flag. - */ - public boolean getIncluded() { - return included; - } - - - /** - * Set the "processing inside an include" flag. - * - * @param included true if we are currently inside a - * RequestDispatcher.include(), else false - */ - public void setIncluded(boolean included) { - this.included = included; - } - - - /** - * Return descriptive information about this Response implementation and - * the corresponding version number, in the format - * <description>/<version>. - */ - public String getInfo() { - return (info); - } - - - /** - * The request with which this response is associated. - */ - protected Request request = null; - - /** - * Return the Request with which this Response is associated. - */ - public org.apache.catalina.connector.Request getRequest() { - return (this.request); - } - - /** - * Set the Request with which this Response is associated. - * - * @param request The new associated request - */ - public void setRequest(org.apache.catalina.connector.Request request) { - this.request = (Request) request; - } - - - /** - * The facade associated with this response. - */ - protected ResponseFacade facade = null; - - /** - * Return the ServletResponse for which this object - * is the facade. - */ - public HttpServletResponse getResponse() { - if (facade == null) { - facade = new ResponseFacade(this); - } - return (facade); - } - - - /** - * Return the output stream associated with this Response. - */ - public OutputStream getStream() { - if (outputStream == null) { - outputStream = new CoyoteOutputStream(outputBuffer); - } - return outputStream; - } - - - /** - * Set the output stream associated with this Response. - * - * @param stream The new output stream - */ - public void setStream(OutputStream stream) { - // This method is evil - } - - - /** - * Set the suspended flag. - * - * @param suspended The new suspended flag value - */ - public void setSuspended(boolean suspended) { - outputBuffer.setSuspended(suspended); - } - - - /** - * Suspended flag accessor. - */ - public boolean isSuspended() { - return outputBuffer.isSuspended(); - } - - - /** - * Closed flag accessor. - */ - public boolean isClosed() { - return outputBuffer.isClosed(); - } - - - /** - * Set the error flag. - */ - public void setError() { - error = true; - } - - - /** - * Error flag accessor. - */ - public boolean isError() { - return error; - } - - - /** - * Create and return a ServletOutputStream to write the content - * associated with this Response. - * - * @exception IOException if an input/output error occurs - */ - public ServletOutputStream createOutputStream() - throws IOException { - // Probably useless - if (outputStream == null) { - outputStream = new CoyoteOutputStream(outputBuffer); - } - return outputStream; - } - - - /** - * Perform whatever actions are required to flush and close the output - * stream or writer, in a single operation. - * - * @exception IOException if an input/output error occurs - */ - public void finishResponse() - throws IOException { - // Writing leftover bytes - outputBuffer.close(); - } - - - /** - * Return the content length that was set or calculated for this Response. - */ - public int getContentLength() { - return (coyoteResponse.getContentLength()); - } - - - /** - * Return the content type that was set or calculated for this response, - * or null if no content type was set. - */ - public String getContentType() { - return (coyoteResponse.getContentType()); - } - - - /** - * Return a PrintWriter that can be used to render error messages, - * regardless of whether a stream or writer has already been acquired. - * - * @return Writer which can be used for error reports. If the response is - * not an error report returned using sendError or triggered by an - * unexpected exception thrown during the servlet processing - * (and only in that case), null will be returned if the response stream - * has already been used. - * - * @exception IOException if an input/output error occurs - */ - public PrintWriter getReporter() throws IOException { - if (outputBuffer.isNew()) { - outputBuffer.checkConverter(); - if (writer == null) { - writer = new CoyoteWriter(outputBuffer); - } - return writer; - } else { - return null; - } - } - - - // ------------------------------------------------ ServletResponse Methods - - - /** - * Flush the buffer and commit this response. - * - * @exception IOException if an input/output error occurs - */ - public void flushBuffer() - throws IOException { - outputBuffer.flush(); - } - - - /** - * Return the actual buffer size used for this Response. - */ - public int getBufferSize() { - return outputBuffer.getBufferSize(); - } - - - /** - * Return the character encoding used for this Response. - */ - public String getCharacterEncoding() { - return (coyoteResponse.getCharacterEncoding()); - } - - - /** - * Return the servlet output stream associated with this Response. - * - * @exception IllegalStateException if getWriter has - * already been called for this response - * @exception IOException if an input/output error occurs - */ - public ServletOutputStream getOutputStream() - throws IOException { - - if (usingWriter) - throw new IllegalStateException - (sm.getString("coyoteResponse.getOutputStream.ise")); - - usingOutputStream = true; - if (outputStream == null) { - outputStream = new CoyoteOutputStream(outputBuffer); - } - return outputStream; - - } - - - /** - * Return the Locale assigned to this response. - */ - public Locale getLocale() { - return (coyoteResponse.getLocale()); - } - - - /** - * Return the writer associated with this Response. - * - * @exception IllegalStateException if getOutputStream has - * already been called for this response - * @exception IOException if an input/output error occurs - */ - public PrintWriter getWriter() - throws IOException { - - if (usingOutputStream) - throw new IllegalStateException - (sm.getString("coyoteResponse.getWriter.ise")); - - if (Globals.STRICT_SERVLET_COMPLIANCE) { - /* - * If the response's character encoding has not been specified as - * described in getCharacterEncoding (i.e., the method - * just returns the default value ISO-8859-1), - * getWriter updates it to ISO-8859-1 - * (with the effect that a subsequent call to getContentType() will - * include a charset=ISO-8859-1 component which will also be - * reflected in the Content-Type response header, thereby satisfying - * the Servlet spec requirement that containers must communicate the - * character encoding used for the servlet response's writer to the - * client). - */ - setCharacterEncoding(getCharacterEncoding()); - } - - usingWriter = true; - outputBuffer.checkConverter(); - if (writer == null) { - writer = new CoyoteWriter(outputBuffer); - } - return writer; - - } - - - /** - * Has the output of this response already been committed? - */ - public boolean isCommitted() { - return (coyoteResponse.isCommitted()); - } - - - /** - * Clear any content written to the buffer. - * - * @exception IllegalStateException if this response has already - * been committed - */ - public void reset() { - - if (included) - return; // Ignore any call from an included servlet - - coyoteResponse.reset(); - outputBuffer.reset(); - usingOutputStream = false; - usingWriter = false; - isCharacterEncodingSet = false; - } - - - /** - * Reset the data buffer but not any status or header information. - * - * @exception IllegalStateException if the response has already - * been committed - */ - public void resetBuffer() { - resetBuffer(false); - } - - - /** - * Reset the data buffer and the using Writer/Stream flags but not any - * status or header information. - * - * @param resetWriterStreamFlags true if the internal - * usingWriter, usingOutputStream, - * isCharacterEncodingSet flags should also be reset - * - * @exception IllegalStateException if the response has already - * been committed - */ - public void resetBuffer(boolean resetWriterStreamFlags) { - - if (isCommitted()) - throw new IllegalStateException - (sm.getString("coyoteResponse.resetBuffer.ise")); - - outputBuffer.reset(); - - if(resetWriterStreamFlags) { - usingOutputStream = false; - usingWriter = false; - isCharacterEncodingSet = false; - } - - } - - - /** - * Set the buffer size to be used for this Response. - * - * @param size The new buffer size - * - * @exception IllegalStateException if this method is called after - * output has been committed for this response - */ - public void setBufferSize(int size) { - - if (isCommitted() || !outputBuffer.isNew()) - throw new IllegalStateException - (sm.getString("coyoteResponse.setBufferSize.ise")); - - outputBuffer.setBufferSize(size); - - } - - - /** - * Set the content length (in bytes) for this Response. - * - * @param length The new content length - */ - public void setContentLength(int length) { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - if (usingWriter) - return; - - coyoteResponse.setContentLength(length); - - } - - - /** - * Set the content type for this Response. - * - * @param type The new content type - */ - public void setContentType(String type) { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - // Ignore charset if getWriter() has already been called - if (usingWriter) { - if (type != null) { - int index = type.indexOf(";"); - if (index != -1) { - type = type.substring(0, index); - } - } - } - - coyoteResponse.setContentType(type); - - // Check to see if content type contains charset - if (type != null) { - int index = type.indexOf(";"); - if (index != -1) { - int len = type.length(); - index++; - while (index < len && Character.isSpace(type.charAt(index))) { - index++; - } - if (index+7 < len - && type.charAt(index) == 'c' - && type.charAt(index+1) == 'h' - && type.charAt(index+2) == 'a' - && type.charAt(index+3) == 'r' - && type.charAt(index+4) == 's' - && type.charAt(index+5) == 'e' - && type.charAt(index+6) == 't' - && type.charAt(index+7) == '=') { - isCharacterEncodingSet = true; - } - } - } - } - - - /* - * Overrides the name of the character encoding used in the body - * of the request. This method must be called prior to reading - * request parameters or reading input using getReader(). - * - * @param charset String containing the name of the chararacter encoding. - */ - public void setCharacterEncoding(String charset) { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - // Ignore any call made after the getWriter has been invoked - // The default should be used - if (usingWriter) - return; - - coyoteResponse.setCharacterEncoding(charset); - isCharacterEncodingSet = true; - } - - - - /** - * Set the Locale that is appropriate for this response, including - * setting the appropriate character encoding. - * - * @param locale The new locale - */ - public void setLocale(Locale locale) { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - coyoteResponse.setLocale(locale); - - // Ignore any call made after the getWriter has been invoked. - // The default should be used - if (usingWriter) - return; - - if (isCharacterEncodingSet) { - return; - } - - CharsetMapper cm = getContext().getCharsetMapper(); - String charset = cm.getCharset( locale ); - if ( charset != null ){ - coyoteResponse.setCharacterEncoding(charset); - } - - } - - - // --------------------------------------------------- HttpResponse Methods - - - /** - * Return an array of all cookies set for this response, or - * a zero-length array if no cookies have been set. - */ - public Cookie[] getCookies() { - return cookies.toArray(new Cookie[cookies.size()]); - } - - - /** - * Return the value for the specified header, or null if this - * header has not been set. If more than one value was added for this - * name, only the first is returned; use getHeaderValues() to retrieve all - * of them. - * - * @param name Header name to look up - */ - public String getHeader(String name) { - return coyoteResponse.getMimeHeaders().getHeader(name); - } - - - /** - * Return an array of all the header names set for this response, or - * a zero-length array if no headers have been set. - */ - public String[] getHeaderNames() { - - MimeHeaders headers = coyoteResponse.getMimeHeaders(); - int n = headers.size(); - String[] result = new String[n]; - for (int i = 0; i < n; i++) { - result[i] = headers.getName(i).toString(); - } - return result; - - } - - - /** - * Return an array of all the header values associated with the - * specified header name, or an zero-length array if there are no such - * header values. - * - * @param name Header name to look up - */ - public String[] getHeaderValues(String name) { - - Enumeration enumeration = coyoteResponse.getMimeHeaders().values(name); - Vector result = new Vector(); - while (enumeration.hasMoreElements()) { - result.addElement(enumeration.nextElement()); - } - String[] resultArray = new String[result.size()]; - result.copyInto(resultArray); - return resultArray; - - } - - - /** - * Return the error message that was set with sendError() - * for this Response. - */ - public String getMessage() { - return coyoteResponse.getMessage(); - } - - - /** - * Return the HTTP status code associated with this Response. - */ - public int getStatus() { - return coyoteResponse.getStatus(); - } - - - /** - * Reset this response, and specify the values for the HTTP status code - * and corresponding message. - * - * @exception IllegalStateException if this response has already been - * committed - */ - public void reset(int status, String message) { - reset(); - setStatus(status, message); - } - - - // -------------------------------------------- HttpServletResponse Methods - - - /** - * Add the specified Cookie to those that will be included with - * this Response. - * - * @param cookie Cookie to be added - */ - public void addCookie(final Cookie cookie) { - - // Ignore any call from an included servlet - if (included) - return; - - addCookieInternal(cookie); - - } - - /** - * Special method for adding a session cookie as we should be overriding - * any previous - * @param cookie - */ - public void addSessionCookieInternal(final Cookie cookie, - boolean httpOnly) { - if (isCommitted()) - return; - - String name = cookie.getName(); - final String headername = "Set-Cookie"; - final String startsWith = name + "="; - final StringBuffer sb = generateCookieString(cookie, httpOnly); - boolean set = false; - MimeHeaders headers = coyoteResponse.getMimeHeaders(); - int n = headers.size(); - for (int i = 0; i < n; i++) { - if (headers.getName(i).toString().equals(headername)) { - if (headers.getValue(i).toString().startsWith(startsWith)) { - headers.getValue(i).setString(sb.toString()); - set = true; - } - } - } - if (set) { - Iterator iter = cookies.iterator(); - while (iter.hasNext()) { - Cookie c = iter.next(); - if (name.equals(c.getName())) { - iter.remove(); - break; - } - } - } else { - addHeader(headername, sb.toString()); - } - cookies.add(cookie); - - - } - /** - * Add the specified Cookie to those that will be included with - * this Response. - * - * @param cookie Cookie to be added - */ - public void addCookieInternal(final Cookie cookie) { - addCookieInternal(cookie, false); - } - - /** - * Add the specified Cookie to those that will be included with - * this Response. - * - * @param cookie Cookie to be added - * @param httpOnly Should the httpOnly falg be set on this cookie - */ - public void addCookieInternal(final Cookie cookie, final boolean httpOnly) { - - if (isCommitted()) - return; - - final StringBuffer sb = generateCookieString(cookie, httpOnly); - //if we reached here, no exception, cookie is valid - // the header name is Set-Cookie for both "old" and v.1 ( RFC2109 ) - // RFC2965 is not supported by browsers and the Servlet spec - // asks for 2109. - addHeader("Set-Cookie", sb.toString()); - - cookies.add(cookie); - } - - public StringBuffer generateCookieString(final Cookie cookie, - final boolean httpOnly) { - final String cookiePath; - if (versionedPathBean != null && cookie.getPath() != null && versionedPathBean.getUserPath() != null && - versionedPathBean.getVersionedPath() != null && cookie.getPath().startsWith(versionedPathBean.getVersionedPath())) { - cookiePath = versionedPathBean.getUserPath() + cookie.getPath().substring( - versionedPathBean.getVersionedPath().length()); - } else { - cookiePath = cookie.getPath(); - } - - final StringBuffer sb = new StringBuffer(); - //web application code can receive a IllegalArgumentException - //from the appendCookieValue invokation - if (SecurityUtil.isPackageProtectionEnabled()) { - AccessController.doPrivileged(new PrivilegedAction() { - public Object run(){ - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), - cookie.getValue(), cookiePath, - cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), - httpOnly); - return null; - } - }); - } else { - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), cookie.getValue(), - cookiePath, cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), httpOnly); - } - return sb; - } - - - /** - * Add the specified date header to the specified value. - * - * @param name Name of the header to set - * @param value Date value to be set - */ - public void addDateHeader(String name, long value) { - - if (name == null || name.length() == 0) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) { - return; - } - - if (format == null) { - format = new SimpleDateFormat(DateTool.HTTP_RESPONSE_DATE_HEADER, - Locale.US); - format.setTimeZone(TimeZone.getTimeZone("GMT")); - } - - addHeader(name, FastHttpDateFormat.formatDate(value, format)); - - } - - - /** - * Add the specified header to the specified value. - * - * @param name Name of the header to set - * @param value Value to be set - */ - public void addHeader(String name, String value) { - - if (name == null || name.length() == 0 || value == null) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - coyoteResponse.addHeader(name, value); - - } - - - /** - * Add the specified integer header to the specified value. - * - * @param name Name of the header to set - * @param value Integer value to be set - */ - public void addIntHeader(String name, int value) { - - if (name == null || name.length() == 0) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - addHeader(name, "" + value); - - } - - - /** - * Has the specified header been set already in this response? - * - * @param name Name of the header to check - */ - public boolean containsHeader(String name) { - // Need special handling for Content-Type and Content-Length due to - // special handling of these in coyoteResponse - char cc=name.charAt(0); - if(cc=='C' || cc=='c') { - if(name.equalsIgnoreCase("Content-Type")) { - // Will return null if this has not been set - return (coyoteResponse.getContentType() != null); - } - if(name.equalsIgnoreCase("Content-Length")) { - // -1 means not known and is not sent to client - return (coyoteResponse.getContentLengthLong() != -1); - } - } - - return coyoteResponse.containsHeader(name); - } - - - /** - * Encode the session identifier associated with this response - * into the specified redirect URL, if necessary. - * - * @param url URL to be encoded - */ - public String encodeRedirectURL(String url) { - - if (isEncodeable(toAbsolute(url))) { - return (toEncoded(url, request.getSessionInternal().getIdInternal())); - } else { - return (url); - } - - } - - - /** - * Encode the session identifier associated with this response - * into the specified redirect URL, if necessary. - * - * @param url URL to be encoded - * - * @deprecated As of Version 2.1 of the Java Servlet API, use - * encodeRedirectURL() instead. - */ - public String encodeRedirectUrl(String url) { - return (encodeRedirectURL(url)); - } - - - /** - * Encode the session identifier associated with this response - * into the specified URL, if necessary. - * - * @param url URL to be encoded - */ - public String encodeURL(String url) { - - String absolute = toAbsolute(url); - if (isEncodeable(absolute)) { - // W3c spec clearly said - if (url.equalsIgnoreCase("")){ - url = absolute; - } - return (toEncoded(url, request.getSessionInternal().getIdInternal())); - } else { - return (url); - } - - } - - - /** - * Encode the session identifier associated with this response - * into the specified URL, if necessary. - * - * @param url URL to be encoded - * - * @deprecated As of Version 2.1 of the Java Servlet API, use - * encodeURL() instead. - */ - public String encodeUrl(String url) { - return (encodeURL(url)); - } - - - /** - * Send an acknowledgment of a request. - * - * @exception IOException if an input/output error occurs - */ - public void sendAcknowledgement() - throws IOException { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - coyoteResponse.acknowledge(); - - } - - - /** - * Send an error response with the specified status and a - * default message. - * - * @param status HTTP status code to send - * - * @exception IllegalStateException if this response has - * already been committed - * @exception IOException if an input/output error occurs - */ - public void sendError(int status) - throws IOException { - sendError(status, null); - } - - - /** - * Send an error response with the specified status and message. - * - * @param status HTTP status code to send - * @param message Corresponding message to send - * - * @exception IllegalStateException if this response has - * already been committed - * @exception IOException if an input/output error occurs - */ - public void sendError(int status, String message) - throws IOException { - - if (isCommitted()) - throw new IllegalStateException - (sm.getString("coyoteResponse.sendError.ise")); - - // Ignore any call from an included servlet - if (included) - return; - - Wrapper wrapper = getRequest().getWrapper(); - if (wrapper != null) { - wrapper.incrementErrorCount(); - } - - setError(); - - coyoteResponse.setStatus(status); - coyoteResponse.setMessage(message); - - // Clear any data content that has been buffered - resetBuffer(); - - // Cause the response to be finished (from the application perspective) - setSuspended(true); - - } - - - /** - * Send a temporary redirect to the specified redirect location URL. - * - * @param location Location URL to redirect to - * - * @exception IllegalStateException if this response has - * already been committed - * @exception IOException if an input/output error occurs - */ - public void sendRedirect(String location) - throws IOException { - - if (isCommitted()) - throw new IllegalStateException - (sm.getString("coyoteResponse.sendRedirect.ise")); - - // Ignore any call from an included servlet - if (included) - return; - - // Clear any data content that has been buffered - resetBuffer(); - - if (versionedPathBean != null && versionedPathBean.getUserPath() != null && - versionedPathBean.getVersionedPath() != null && location.startsWith(versionedPathBean.getVersionedPath())) { - - if ("/".equals(versionedPathBean.getUserPath())) { - location = location.substring(versionedPathBean.getVersionedPath().length()); - } else { - location = versionedPathBean.getUserPath() + location.substring( - versionedPathBean.getVersionedPath().length()); - } - } - - // Generate a temporary redirect to the specified location - try { - String absolute = toAbsolute(location); - setStatus(SC_FOUND); - setHeader("Location", absolute); - } catch (IllegalArgumentException e) { - setStatus(SC_NOT_FOUND); - } - - // Cause the response to be finished (from the application perspective) - setSuspended(true); - - } - - - /** - * Set the specified date header to the specified value. - * - * @param name Name of the header to set - * @param value Date value to be set - */ - public void setDateHeader(String name, long value) { - - if (name == null || name.length() == 0) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) { - return; - } - - if (format == null) { - format = new SimpleDateFormat(DateTool.HTTP_RESPONSE_DATE_HEADER, - Locale.US); - format.setTimeZone(TimeZone.getTimeZone("GMT")); - } - - setHeader(name, FastHttpDateFormat.formatDate(value, format)); - - } - - - /** - * Set the specified header to the specified value. - * - * @param name Name of the header to set - * @param value Value to be set - */ - public void setHeader(String name, String value) { - - if (name == null || name.length() == 0 || value == null) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - coyoteResponse.setHeader(name, value); - - } - - - /** - * Set the specified integer header to the specified value. - * - * @param name Name of the header to set - * @param value Integer value to be set - */ - public void setIntHeader(String name, int value) { - - if (name == null || name.length() == 0) { - return; - } - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - setHeader(name, "" + value); - - } - - - /** - * Set the HTTP status to be returned with this response. - * - * @param status The new HTTP status - */ - public void setStatus(int status) { - setStatus(status, null); - } - - - /** - * Set the HTTP status and message to be returned with this response. - * - * @param status The new HTTP status - * @param message The associated text message - * - * @deprecated As of Version 2.1 of the Java Servlet API, this method - * has been deprecated due to the ambiguous meaning of the message - * parameter. - */ - public void setStatus(int status, String message) { - - if (isCommitted()) - return; - - // Ignore any call from an included servlet - if (included) - return; - - coyoteResponse.setStatus(status); - coyoteResponse.setMessage(message); - - } - - - // ------------------------------------------------------ Protected Methods - - - /** - * Return true if the specified URL should be encoded with - * a session identifier. This will be true if all of the following - * conditions are met: - *

      - *
    • The request we are responding to asked for a valid session - *
    • The requested session ID was not received via a cookie - *
    • The specified URL points back to somewhere within the web - * application that is responding to this request - *
    - * - * @param location Absolute URL to be validated - */ - protected boolean isEncodeable(final String location) { - - if (location == null) - return (false); - - // Is this an intra-document reference? - if (location.startsWith("#")) - return (false); - - // Are we in a valid session that is not using cookies? - final Request hreq = request; - final Session session = hreq.getSessionInternal(false); - if (session == null) - return (false); - if (hreq.isRequestedSessionIdFromCookie()) - return (false); - - if (SecurityUtil.isPackageProtectionEnabled()) { - return ((Boolean) - AccessController.doPrivileged(new PrivilegedAction() { - - public Object run(){ - return new Boolean(doIsEncodeable(hreq, session, location)); - } - })).booleanValue(); - } else { - return doIsEncodeable(hreq, session, location); - } - } - - private boolean doIsEncodeable(Request hreq, Session session, - String location) { - // Is this a valid absolute URL? - URL url = null; - try { - url = new URL(location); - } catch (MalformedURLException e) { - return (false); - } - - // Does this URL match down to (and including) the context path? - if (!hreq.getScheme().equalsIgnoreCase(url.getProtocol())) - return (false); - if (!hreq.getServerName().equalsIgnoreCase(url.getHost())) - return (false); - int serverPort = hreq.getServerPort(); - if (serverPort == -1) { - if ("https".equals(hreq.getScheme())) - serverPort = 443; - else - serverPort = 80; - } - int urlPort = url.getPort(); - if (urlPort == -1) { - if ("https".equals(url.getProtocol())) - urlPort = 443; - else - urlPort = 80; - } - if (serverPort != urlPort) - return (false); - - String contextPath = getContext().getPath(); - if (contextPath != null) { - String file = url.getFile(); - if ((file == null) || !file.startsWith(contextPath)) - return (false); - String tok = ";" + Globals.SESSION_PARAMETER_NAME + "=" + session.getIdInternal(); - if( file.indexOf(tok, contextPath.length()) >= 0 ) - return (false); - } - - // This URL belongs to our web application, so it is encodeable - return (true); - - } - - - /** - * Convert (if necessary) and return the absolute URL that represents the - * resource referenced by this possibly relative URL. If this URL is - * already absolute, return it unchanged. - * - * @param location URL to be (possibly) converted and then returned - * - * @exception IllegalArgumentException if a MalformedURLException is - * thrown when converting the relative URL to an absolute one - */ - private String toAbsolute(String location) { - - if (location == null) - return (location); - - boolean leadingSlash = location.startsWith("/"); - - if (leadingSlash || !hasScheme(location)) { - - redirectURLCC.recycle(); - - String scheme = request.getScheme(); - String name = request.getServerName(); - int port = request.getServerPort(); - - try { - redirectURLCC.append(scheme, 0, scheme.length()); - redirectURLCC.append("://", 0, 3); - redirectURLCC.append(name, 0, name.length()); - if ((scheme.equals("http") && port != 80) - || (scheme.equals("https") && port != 443)) { - redirectURLCC.append(':'); - String portS = port + ""; - redirectURLCC.append(portS, 0, portS.length()); - } - if (!leadingSlash) { - String relativePath; - if (versionedPathBean != null && versionedPathBean.getOriginalDecodedUri() != null) { - relativePath = versionedPathBean.getOriginalDecodedUri(); - } else { - relativePath = request.getDecodedRequestURI(); - } - int pos = relativePath.lastIndexOf('/'); - relativePath = relativePath.substring(0, pos); - - String encodedURI = null; - final String frelativePath = relativePath; - if (SecurityUtil.isPackageProtectionEnabled() ){ - try{ - encodedURI = (String)AccessController.doPrivileged( - new PrivilegedExceptionAction(){ - public Object run() throws IOException{ - return urlEncoder.encodeURL(frelativePath); - } - }); - } catch (PrivilegedActionException pae){ - IllegalArgumentException iae = - new IllegalArgumentException(location); - iae.initCause(pae.getException()); - throw iae; - } - } else { - encodedURI = urlEncoder.encodeURL(relativePath); - } - redirectURLCC.append(encodedURI, 0, encodedURI.length()); - redirectURLCC.append('/'); - } - redirectURLCC.append(location, 0, location.length()); - } catch (IOException e) { - IllegalArgumentException iae = - new IllegalArgumentException(location); - iae.initCause(e); - throw iae; - } - - return redirectURLCC.toString(); - - } else { - - return (location); - - } - - } - - - /** - * Determine if a URI string has a scheme component. - */ - private boolean hasScheme(String uri) { - int len = uri.length(); - for(int i=0; i < len ; i++) { - char c = uri.charAt(i); - if(c == ':') { - return i > 0; - } else if(!URL.isSchemeChar(c)) { - return false; - } - } - return false; - } - - /** - * Return the specified URL with the specified session identifier - * suitably encoded. - * - * @param url URL to be encoded with the session id - * @param sessionId Session id to be included in the encoded URL - */ - protected String toEncoded(String url, String sessionId) { - - if ((url == null) || (sessionId == null)) - return (url); - - String path = url; - String query = ""; - String anchor = ""; - int question = url.indexOf('?'); - if (question >= 0) { - path = url.substring(0, question); - query = url.substring(question); - } - int pound = path.indexOf('#'); - if (pound >= 0) { - anchor = path.substring(pound); - path = path.substring(0, pound); - } - StringBuffer sb = new StringBuffer(path); - if( sb.length() > 0 ) { // jsessionid can't be first. - sb.append(";"); - sb.append(Globals.SESSION_PARAMETER_NAME); - sb.append("="); - sb.append(sessionId); - } - sb.append(anchor); - sb.append(query); - return (sb.toString()); - - } - - -} - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/startup/TldConfig.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/startup/TldConfig.java deleted file mode 100644 index 0812f5c01e..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/catalina/startup/TldConfig.java +++ /dev/null @@ -1,832 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.apache.catalina.startup; - - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; - -import javax.naming.NameClassPair; -import javax.naming.NamingEnumeration; -import javax.naming.NamingException; -import javax.naming.directory.DirContext; -import javax.servlet.ServletException; - -import org.apache.catalina.Context; -import org.apache.catalina.Globals; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.core.StandardHost; -import org.apache.catalina.util.StringManager; -import org.apache.tomcat.util.digester.Digester; -import org.xml.sax.InputSource; - -/** - * Startup event listener for a Context that configures application - * listeners configured in any TLD files. - * - * @author Craig R. McClanahan - * @author Jean-Francois Arcand - * @author Costin Manolache - */ -public final class TldConfig implements LifecycleListener { - - // Names of JARs that are known not to contain any TLDs - private static HashSet noTldJars; - - private static org.apache.juli.logging.Log log= - org.apache.juli.logging.LogFactory.getLog( TldConfig.class ); - - /* - * Initializes the set of JARs that are known not to contain any TLDs - */ - static { - noTldJars = new HashSet(); - // Bootstrap JARs - noTldJars.add("bootstrap.jar"); - noTldJars.add("commons-daemon.jar"); - noTldJars.add("tomcat-juli.jar"); - // Main JARs - noTldJars.add("annotations-api.jar"); - noTldJars.add("catalina.jar"); - noTldJars.add("catalina-ant.jar"); - noTldJars.add("catalina-ha.jar"); - noTldJars.add("catalina-tribes.jar"); - noTldJars.add("el-api.jar"); - noTldJars.add("jasper.jar"); - noTldJars.add("jasper-el.jar"); - noTldJars.add("jasper-jdt.jar"); - noTldJars.add("jsp-api.jar"); - noTldJars.add("servlet-api.jar"); - noTldJars.add("tomcat-coyote.jar"); - noTldJars.add("tomcat-dbcp.jar"); - // i18n JARs - noTldJars.add("tomcat-i18n-en.jar"); - noTldJars.add("tomcat-i18n-es.jar"); - noTldJars.add("tomcat-i18n-fr.jar"); - noTldJars.add("tomcat-i18n-ja.jar"); - // Misc JARs not included with Tomcat - noTldJars.add("ant.jar"); - noTldJars.add("commons-dbcp.jar"); - noTldJars.add("commons-beanutils.jar"); - noTldJars.add("commons-fileupload-1.0.jar"); - noTldJars.add("commons-pool.jar"); - noTldJars.add("commons-digester.jar"); - noTldJars.add("commons-logging.jar"); - noTldJars.add("commons-collections.jar"); - noTldJars.add("jmx.jar"); - noTldJars.add("jmx-tools.jar"); - noTldJars.add("xercesImpl.jar"); - noTldJars.add("xmlParserAPIs.jar"); - noTldJars.add("xml-apis.jar"); - // JARs from J2SE runtime - noTldJars.add("sunjce_provider.jar"); - noTldJars.add("ldapsec.jar"); - noTldJars.add("localedata.jar"); - noTldJars.add("dnsns.jar"); - noTldJars.add("tools.jar"); - noTldJars.add("sunpkcs11.jar"); - } - - - // ----------------------------------------------------- Instance Variables - - /** - * The Context we are associated with. - */ - private Context context = null; - - - /** - * The string resources for this package. - */ - private static final StringManager sm = - StringManager.getManager(Constants.Package); - - /** - * The Digester we will use to process tag library - * descriptor files. - */ - private static Digester tldDigester = null; - - - /** - * Attribute value used to turn on/off TLD validation - */ - private static boolean tldValidation = false; - - - /** - * Attribute value used to turn on/off TLD namespace awarenes. - */ - private static boolean tldNamespaceAware = false; - - private boolean rescan=true; - - private ArrayList listeners = new ArrayList(); - - // --------------------------------------------------------- Public Methods - - /** - * Sets the list of JARs that are known not to contain any TLDs. - * - * @param jarNames List of comma-separated names of JAR files that are - * known not to contain any TLDs - */ - public static void setNoTldJars(final String jarNames) { - if (jarNames != null) { - noTldJars.clear(); - StringTokenizer tokenizer = new StringTokenizer(jarNames, ","); - while (tokenizer.hasMoreElements()) { - noTldJars.add(tokenizer.nextToken()); - } - } - } - - /** - * Set the validation feature of the XML parser used when - * parsing xml instances. - * @param tldValidation true to enable xml instance validation - */ - public void setTldValidation(final boolean tldValidation){ - TldConfig.tldValidation = tldValidation; - } - - /** - * Get the server.xml attribute's xmlValidation. - * @return true if validation is enabled. - * - */ - public boolean getTldValidation(){ - return tldValidation; - } - - /** - * Get the server.xml attribute's xmlNamespaceAware. - * @return true if namespace awarenes is enabled. - * - */ - public boolean getTldNamespaceAware(){ - return tldNamespaceAware; - } - - - /** - * Set the namespace aware feature of the XML parser used when - * parsing xml instances. - * @param tldNamespaceAware true to enable namespace awareness - */ - public void setTldNamespaceAware(final boolean tldNamespaceAware){ - TldConfig.tldNamespaceAware = tldNamespaceAware; - } - - - public boolean isRescan() { - return rescan; - } - - public void setRescan(final boolean rescan) { - this.rescan = rescan; - } - - public Context getContext() { - return context; - } - - public void setContext(final Context context) { - this.context = context; - } - - public void addApplicationListener( final String s ) { - //if(log.isDebugEnabled()) - log.debug( "Add tld listener " + s); - listeners.add(s); - } - - public String[] getTldListeners() { - String result[]=new String[listeners.size()]; - listeners.toArray(result); - return result; - } - - - /** - * Scan for and configure all tag library descriptors found in this - * web application. - * - * @exception Exception if a fatal input/output or parsing error occurs - */ - public void execute() throws Exception { - long t1=System.currentTimeMillis(); - - File tldCache=null; - - if (context instanceof StandardContext) { - File workDir= (File) - ((StandardContext)context).getServletContext().getAttribute(Globals.WORK_DIR_ATTR); - //tldCache=new File( workDir, "tldCache.ser"); - } - - // Option to not rescan - if( ! rescan ) { - // find the cache - if( tldCache!= null && tldCache.exists()) { - // just read it... - processCache(tldCache); - return; - } - } - - /* - * Acquire the list of TLD resource paths, possibly embedded in JAR - * files, to be processed - */ - Set resourcePaths = tldScanResourcePaths(); - Map jarPaths = getJarPaths(); - - // Check to see if we can use cached listeners - if (tldCache != null && tldCache.exists()) { - long lastModified = getLastModified(resourcePaths, jarPaths); - if (lastModified < tldCache.lastModified()) { - processCache(tldCache); - return; - } - } - - // Scan each accumulated resource path for TLDs to be processed - Iterator paths = resourcePaths.iterator(); - while (paths.hasNext()) { - String path = (String) paths.next(); - if (path.endsWith(".jar")) { - tldScanJar(path); - } else { - tldScanTld(path); - } - } - if (jarPaths != null) { - paths = jarPaths.values().iterator(); - while (paths.hasNext()) { - tldScanJar((File) paths.next()); - } - } - - String list[] = getTldListeners(); - - if( tldCache!= null ) { - log.debug( "Saving tld cache: " + tldCache + " " + list.length); - try { - FileOutputStream out=new FileOutputStream(tldCache); - ObjectOutputStream oos=new ObjectOutputStream( out ); - oos.writeObject( list ); - oos.close(); - } catch( IOException ex ) { - ex.printStackTrace(); - } - } - - if( log.isDebugEnabled() ) { - log.debug( "Adding tld listeners:" + list.length); - } - for( int i=0; list!=null && i lastModified) { - lastModified = lastM; - } - if (log.isDebugEnabled()) { - log.debug( "Last modified " + path + " " + lastM); - } - } - - if (jarPaths != null) { - paths = jarPaths.values().iterator(); - while (paths.hasNext()) { - File jarFile = (File) paths.next(); - long lastM = jarFile.lastModified(); - if (lastM > lastModified) { - lastModified = lastM; - } - if (log.isDebugEnabled()) { - log.debug("Last modified " + jarFile.getAbsolutePath() - + " " + lastM); - } - } - } - - return lastModified; - } - - private void processCache(final File tldCache ) throws IOException { - // read the cache and return; - try { - FileInputStream in=new FileInputStream(tldCache); - ObjectInputStream ois=new ObjectInputStream( in ); - String list[]=(String [])ois.readObject(); - if( log.isDebugEnabled() ) { - log.debug("Reusing tldCache " + tldCache + " " + list.length); - } - for( int i=0; list!=null && iMETA-INF subdirectory, and scan each TLD for application - * event listeners that need to be registered. - * - * @param resourcePath Resource path of the JAR file to scan - * - * @exception Exception if an exception occurs while scanning this JAR - */ - private void tldScanJar(final String resourcePath) throws Exception { - - if (log.isDebugEnabled()) { - log.debug(" Scanning JAR at resource path '" + resourcePath + "'"); - } - - URL url = context.getServletContext().getResource(resourcePath); - if (url == null) { - throw new IllegalArgumentException - (sm.getString("contextConfig.tldResourcePath", - resourcePath)); - } - - File file = null; - try { - file = new File(url.toURI()); - } catch (URISyntaxException e) { - // Ignore, probably an unencoded char - file = new File(url.getFile()); - } - try { - file = file.getCanonicalFile(); - } catch (IOException e) { - // Ignore - } - tldScanJar(file); - - } - - /** - * Scans all TLD entries in the given JAR for application listeners. - * - * @param file JAR file (archive or directory) whose TLD entries are scanned for application - * listeners - */ - private void tldScanJar(final File file) { - - if (file.isFile()) { - // A real Jar file is processed - tldScanJarFile(file); - } else { - // The processed file is a directory (named .jar), maybe structured like a jar - // Let's see if there is any TLD inside - - // Only look for META-INF/**/*.tld patterns - File metaInf = new File(file, "META-INF"); - tldScanJarDirectory(metaInf); - } - } - - /** - * Scans all TLD entries in the given JAR File (directory)for application listeners. - * - * @param file JAR file (directory) whose TLD entries are scanned for application - * listeners - */ - private void tldScanJarDirectory(final File file) { - String jarPath = file.getAbsolutePath(); - - String name = file.getName(); - if (file.isFile()) { - if (name.endsWith(".tld")) { - if (log.isTraceEnabled()) { - log.trace(" Processing TLD at '" + name + "'"); - } - try { - tldScanStream(new InputSource(new FileInputStream(file))); - } catch (Exception e) { - log.error(sm.getString("contextConfig.tldEntryException", - name, jarPath, context.getPath()), - e); - } - } - } else { - // Directory case, look at the childs - File[] childs = file.listFiles(); - for (File child : childs) { - tldScanJarDirectory(child); - } - } - - } - - /** - * Scans all TLD entries in the given JAR File (archive)for application listeners. - * - * @param file JAR file (archive) whose TLD entries are scanned for application - * listeners - */ - private void tldScanJarFile(final File file) { - JarFile jarFile = null; - String name = null; - - String jarPath = file.getAbsolutePath(); - try { - jarFile = new JarFile(file); - Enumeration entries = jarFile.entries(); - while (entries.hasMoreElements()) { - JarEntry entry = (JarEntry) entries.nextElement(); - name = entry.getName(); - if (!name.startsWith("META-INF/")) { - continue; - } - if (!name.endsWith(".tld")) { - continue; - } - if (log.isTraceEnabled()) { - log.trace(" Processing TLD at '" + name + "'"); - } - try { - tldScanStream(new InputSource(jarFile.getInputStream(entry))); - } catch (Exception e) { - log.error(sm.getString("contextConfig.tldEntryException", - name, jarPath, context.getPath()), - e); - } - } - } catch (Exception e) { - log.error(sm.getString("contextConfig.tldJarException", - jarPath, context.getPath()), - e); - } finally { - if (jarFile != null) { - try { - jarFile.close(); - } catch (Throwable t) { - // Ignore - } - } - } - } - - /** - * Scan the TLD contents in the specified input stream, and register - * any application event listeners found there. NOTE - It is - * the responsibility of the caller to close the InputStream after this - * method returns. - * - * @param resourceStream InputStream containing a tag library descriptor - * - * @exception Exception if an exception occurs while scanning this TLD - */ - private void tldScanStream(final InputSource resourceStream) - throws Exception { - - synchronized (tldDigester) { - try { - tldDigester.push(this); - tldDigester.parse(resourceStream); - } finally { - tldDigester.reset(); - } - } - - } - - /** - * Scan the TLD contents at the specified resource path, and register - * any application event listeners found there. - * - * @param resourcePath Resource path being scanned - * - * @exception Exception if an exception occurs while scanning this TLD - */ - private void tldScanTld(final String resourcePath) throws Exception { - - if (log.isDebugEnabled()) { - log.debug(" Scanning TLD at resource path '" + resourcePath + "'"); - } - - InputSource inputSource = null; - try { - InputStream stream = - context.getServletContext().getResourceAsStream(resourcePath); - if (stream == null) { - throw new IllegalArgumentException - (sm.getString("contextConfig.tldResourcePath", - resourcePath)); - } - inputSource = new InputSource(stream); - if (inputSource == null) { - throw new IllegalArgumentException - (sm.getString("contextConfig.tldResourcePath", - resourcePath)); - } - tldScanStream(inputSource); - } catch (Exception e) { - throw new ServletException - (sm.getString("contextConfig.tldFileException", resourcePath, - context.getPath()), - e); - } - - } - - /** - * Accumulate and return a Set of resource paths to be analyzed for - * tag library descriptors. Each element of the returned set will be - * the context-relative path to either a tag library descriptor file, - * or to a JAR file that may contain tag library descriptors in its - * META-INF subdirectory. - * - * @exception IOException if an input/output error occurs while - * accumulating the list of resource paths - */ - private Set tldScanResourcePaths() throws IOException { - if (log.isDebugEnabled()) { - log.debug(" Accumulating TLD resource paths"); - } - Set resourcePaths = new HashSet(); - - // Accumulate resource paths explicitly listed in the web application - // deployment descriptor - if (log.isTraceEnabled()) { - log.trace(" Scanning elements in web.xml"); - } - String taglibs[] = context.findTaglibs(); - for (int i = 0; i < taglibs.length; i++) { - String resourcePath = context.findTaglib(taglibs[i]); - // FIXME - Servlet 2.4 DTD implies that the location MUST be - // a context-relative path starting with '/'? - if (!resourcePath.startsWith("/")) { - resourcePath = "/WEB-INF/" + resourcePath; - } - if (log.isTraceEnabled()) { - log.trace(" Adding path '" + resourcePath + - "' for URI '" + taglibs[i] + "'"); - } - resourcePaths.add(resourcePath); - } - - DirContext resources = context.getResources(); - if (resources != null) { - tldScanResourcePathsWebInf(resources, "/WEB-INF", resourcePaths); - } - - // Return the completed set - return (resourcePaths); - - } - - /* - * Scans the web application's subdirectory identified by rootPath, - * along with its subdirectories, for TLDs. - * - * Initially, rootPath equals /WEB-INF. The /WEB-INF/classes and - * /WEB-INF/lib subdirectories are excluded from the search, as per the - * JSP 2.0 spec. - * - * @param resources The web application's resources - * @param rootPath The path whose subdirectories are to be searched for - * TLDs - * @param tldPaths The set of TLD resource paths to add to - */ - private void tldScanResourcePathsWebInf(final DirContext resources, - final String rootPath, - final Set tldPaths) - throws IOException { - - if (log.isTraceEnabled()) { - log.trace(" Scanning TLDs in " + rootPath + " subdirectory"); - } - - try { - NamingEnumeration items = resources.list(rootPath); - while (items.hasMoreElements()) { - NameClassPair item = (NameClassPair) items.nextElement(); - String resourcePath = rootPath + "/" + item.getName(); - if (!resourcePath.endsWith(".tld") - && (resourcePath.startsWith("/WEB-INF/classes") - || resourcePath.startsWith("/WEB-INF/lib"))) { - continue; - } - if (resourcePath.endsWith(".tld")) { - if (log.isTraceEnabled()) { - log.trace(" Adding path '" + resourcePath + "'"); - } - tldPaths.add(resourcePath); - } else { - tldScanResourcePathsWebInf(resources, resourcePath, - tldPaths); - } - } - } catch (NamingException e) { - ; // Silent catch: it's valid that no /WEB-INF directory exists - } - } - - /** - * Returns a map of the paths to all JAR files that are accessible to the - * webapp and will be scanned for TLDs. - * - * The map always includes all the JARs under WEB-INF/lib, as well as - * shared JARs in the classloader delegation chain of the webapp's - * classloader. - * - * The latter constitutes a Tomcat-specific extension to the TLD search - * order defined in the JSP spec. It allows tag libraries packaged as JAR - * files to be shared by web applications by simply dropping them in a - * location that all web applications have access to (e.g., - * /common/lib). - * - * The set of shared JARs to be scanned for TLDs is narrowed down by - * the noTldJars class variable, which contains the names of JARs - * that are known not to contain any TLDs. - * - * @return Map of JAR file paths - */ - private Map getJarPaths() { - - HashMap jarPathMap = null; - - ClassLoader webappLoader = Thread.currentThread().getContextClassLoader(); - ClassLoader loader = webappLoader; - while (loader != null) { - if (loader instanceof URLClassLoader) { - URL[] urls = ((URLClassLoader) loader).getURLs(); - for (int i=0; i clazz = instance.getClass(); - - // Analyze each super class until there is none - while (clazz != null) { - Method[] methods = clazz.getDeclaredMethods(); - Method postConstruct = null; - for (int i = 0; i < methods.length; i++) { - if (methods[i].isAnnotationPresent(PostConstruct.class)) { - if ((postConstruct != null) - || (methods[i].getParameterTypes().length != 0) - || (Modifier.isStatic(methods[i].getModifiers())) - || (methods[i].getExceptionTypes().length > 0) - || (!methods[i].getReturnType().getName().equals( - "void"))) { - throw new IllegalArgumentException( - "Invalid PostConstruct annotation"); - } - postConstruct = methods[i]; - } - } - - // At the end the postconstruct annotated - // method is invoked - if (postConstruct != null) { - boolean accessibility = postConstruct.isAccessible(); - postConstruct.setAccessible(true); - postConstruct.invoke(instance); - postConstruct.setAccessible(accessibility); - } - - // will analyze the super class - clazz = clazz.getSuperclass(); - - } - - - } - - - /** - * Call preDestroy method on the specified instance. - */ - public void preDestroy(Object instance) - throws IllegalAccessException, InvocationTargetException { - - Class clazz = instance.getClass(); - - // Analyze each super class until there is none - while (clazz != null) { - - Method[] methods = instance.getClass().getDeclaredMethods(); - Method preDestroy = null; - for (int i = 0; i < methods.length; i++) { - if (methods[i].isAnnotationPresent(PreDestroy.class)) { - if ((preDestroy != null) - || (methods[i].getParameterTypes().length != 0) - || (Modifier.isStatic(methods[i].getModifiers())) - || (methods[i].getExceptionTypes().length > 0) - || (!methods[i].getReturnType().getName().equals( - "void"))) { - throw new IllegalArgumentException( - "Invalid PreDestroy annotation"); - } - preDestroy = methods[i]; - } - } - - // At the end the postconstruct annotated - // method is invoked - if (preDestroy != null) { - boolean accessibility = preDestroy.isAccessible(); - preDestroy.setAccessible(true); - preDestroy.invoke(instance); - preDestroy.setAccessible(accessibility); - } - - // will analyze the super class - clazz = clazz.getSuperclass(); - - } - - } - - - /** - * Inject resources in specified instance. - */ - public void processAnnotations(Object instance) - throws IllegalAccessException, InvocationTargetException, NamingException { - - if (context == null) { - // No resource injection - return; - } - - Class clazz = instance.getClass(); - - while (clazz != null) { - // Initialize fields annotations - Field[] fields = clazz.getDeclaredFields(); - - for (int i = 0; i < fields.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List fieldInjections = encBindingHolder.getFieldInjectionTargets(clazz.getName()); - if (fieldInjections != null) { - for (IInjectionTargetEnc fieldInjection : fieldInjections) { - // found a matching field - if (fields[i].getName().equals(fieldInjection.getName())) { - lookupFieldResource(context, instance, fields[i], fieldInjection.getEncName(), clazz); - } - } - } - } - - if (!disabledAnnotation) { - if (fields[i].isAnnotationPresent(Resource.class)) { - Resource annotation = (Resource) fields[i].getAnnotation(Resource.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(EJB.class)) { - EJB annotation = (EJB) fields[i].getAnnotation(EJB.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = - (WebServiceRef) fields[i].getAnnotation(WebServiceRef.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = - (PersistenceContext) fields[i].getAnnotation(PersistenceContext.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - if (fields[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = - (PersistenceUnit) fields[i].getAnnotation(PersistenceUnit.class); - lookupFieldResource(context, instance, fields[i], annotation.name(), clazz); - } - - Annotation[] annotations = fields[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupFieldResource(context, instance, fields[i], "BundleContext" , clazz); - } - } - } - - } - } - - // Initialize methods annotations - Method[] methods = clazz.getDeclaredMethods(); - for (int i = 0; i < methods.length; i++) { - - // Injection target - if (encBindingHolder != null) { - List methoddInjections = encBindingHolder.getMethodInjectionTargets(clazz.getName()); - if (methoddInjections != null) { - for (IInjectionTargetEnc methodInjection : methoddInjections) { - // found a matching field - if (methods[i].getName().equals(methodInjection.getName())) { - lookupMethodResource(context, instance, methods[i], methodInjection.getEncName(), clazz); - } - } - } - } - - - if (!disabledAnnotation) { - if (methods[i].isAnnotationPresent(Resource.class)) { - Resource annotation = (Resource) methods[i].getAnnotation(Resource.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(EJB.class)) { - EJB annotation = (EJB) methods[i].getAnnotation(EJB.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(WebServiceRef.class)) { - WebServiceRef annotation = - (WebServiceRef) methods[i].getAnnotation(WebServiceRef.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceContext.class)) { - PersistenceContext annotation = - (PersistenceContext) methods[i].getAnnotation(PersistenceContext.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - if (methods[i].isAnnotationPresent(PersistenceUnit.class)) { - PersistenceUnit annotation = - (PersistenceUnit) methods[i].getAnnotation(PersistenceUnit.class); - lookupMethodResource(context, instance, methods[i], annotation.name(), clazz); - } - Annotation[] annotations = methods[i].getDeclaredAnnotations(); - if (annotations != null) { - for (Annotation annotation : annotations) { - if ("org.ow2.easybeans.osgi.annotation.OSGiResource".equals(annotation.annotationType().getName())) { - lookupMethodResource(context, instance, methods[i], "BundleContext" , clazz); - } - } - } - } - } - - clazz = clazz.getSuperclass(); - } - } - - - /** - * Inject resources in specified field. - */ - protected static void lookupFieldResource(javax.naming.Context context, - Object instance, Field field, String name, Class clazz) - throws NamingException, IllegalAccessException { - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && - (name.length() > 0)) { - lookedupResource = context.lookup(name); - } else { - lookedupResource = context.lookup(clazz.getName() + "/" + field.getName()); - } - - accessibility = field.isAccessible(); - field.setAccessible(true); - field.set(instance, lookedupResource); - field.setAccessible(accessibility); - } - - - /** - * Inject resources in specified method. - */ - protected static void lookupMethodResource(javax.naming.Context context, - Object instance, Method method, String name, Class clazz) - throws NamingException, IllegalAccessException, InvocationTargetException { - - if (!method.getName().startsWith("set") - || method.getParameterTypes().length != 1 - || !method.getReturnType().getName().equals("void")) { - throw new IllegalArgumentException("Invalid method resource injection annotation"); - } - - Object lookedupResource = null; - boolean accessibility = false; - - if ((name != null) && - (name.length() > 0)) { - lookedupResource = context.lookup(name); - } else { - lookedupResource = - context.lookup(clazz.getName() + "/" + method.getName().substring(3)); - } - - accessibility = method.isAccessible(); - method.setAccessible(true); - method.invoke(instance, lookedupResource); - method.setAccessible(accessibility); - } - - - public void setEncBindingHolder(final IENCBindingHolder encBindingHolder) { - this.encBindingHolder = encBindingHolder; - } - - public IENCBindingHolder getEncBindingHolder() { - return encBindingHolder; - } - - - public DefaultAnnotationProcessor(javax.naming.Context context) { - this.context = context; - } - -} - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java deleted file mode 100644 index a158f93ee6..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java +++ /dev/null @@ -1,782 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jasper.compiler; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.JarURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.Vector; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -import javax.servlet.jsp.tagext.FunctionInfo; -import javax.servlet.jsp.tagext.PageData; -import javax.servlet.jsp.tagext.TagAttributeInfo; -import javax.servlet.jsp.tagext.TagExtraInfo; -import javax.servlet.jsp.tagext.TagFileInfo; -import javax.servlet.jsp.tagext.TagInfo; -import javax.servlet.jsp.tagext.TagLibraryInfo; -import javax.servlet.jsp.tagext.TagLibraryValidator; -import javax.servlet.jsp.tagext.TagVariableInfo; -import javax.servlet.jsp.tagext.ValidationMessage; -import javax.servlet.jsp.tagext.VariableInfo; - -import org.apache.jasper.JasperException; -import org.apache.jasper.JspCompilationContext; -import org.apache.jasper.xmlparser.ParserUtils; -import org.apache.jasper.xmlparser.TreeNode; -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; - -/** - * Implementation of the TagLibraryInfo class from the JSP spec. - * - * @author Anil K. Vijendran - * @author Mandar Raje - * @author Pierre Delisle - * @author Kin-man Chung - * @author Jan Luehe - */ -class TagLibraryInfoImpl extends TagLibraryInfo implements TagConstants { - - // Logger - private Log log = LogFactory.getLog(TagLibraryInfoImpl.class); - - private JspCompilationContext ctxt; - - private PageInfo pi; - - private ErrorDispatcher err; - - private ParserController parserController; - - private final void print(String name, String value, PrintWriter w) { - if (value != null) { - w.print(name + " = {\n\t"); - w.print(value); - w.print("\n}\n"); - } - } - - public String toString() { - StringWriter sw = new StringWriter(); - PrintWriter out = new PrintWriter(sw); - print("tlibversion", tlibversion, out); - print("jspversion", jspversion, out); - print("shortname", shortname, out); - print("urn", urn, out); - print("info", info, out); - print("uri", uri, out); - print("tagLibraryValidator", "" + tagLibraryValidator, out); - - for (int i = 0; i < tags.length; i++) - out.println(tags[i].toString()); - - for (int i = 0; i < tagFiles.length; i++) - out.println(tagFiles[i].toString()); - - for (int i = 0; i < functions.length; i++) - out.println(functions[i].toString()); - - return sw.toString(); - } - - // XXX FIXME - // resolveRelativeUri and/or getResourceAsStream don't seem to properly - // handle relative paths when dealing when home and getDocBase are set - // the following is a workaround until these problems are resolved. - private InputStream getResourceAsStream(String uri) - throws FileNotFoundException { - try { - // see if file exists on the filesystem first - String real = ctxt.getRealPath(uri); - if (real == null) { - return ctxt.getResourceAsStream(uri); - } else { - return new FileInputStream(real); - } - } catch (FileNotFoundException ex) { - // if file not found on filesystem, get the resource through - // the context - return ctxt.getResourceAsStream(uri); - } - - } - - /** - * Constructor. - */ - public TagLibraryInfoImpl(JspCompilationContext ctxt, ParserController pc, - PageInfo pi, String prefix, String uriIn, String[] location, - ErrorDispatcher err, Mark mark) - throws JasperException { - super(prefix, uriIn); - - this.ctxt = ctxt; - this.parserController = pc; - this.pi = pi; - this.err = err; - InputStream in = null; - JarFile jarFile = null; - - if (location == null) { - // The URI points to the TLD itself or to a JAR file in which the - // TLD is stored - location = generateTLDLocation(uri, ctxt); - } - - try { - if (location[0].startsWith("bundle")) { - URL url; - try { - url = new URL(location[0]); - URLConnection urlConnection = url.openConnection(); - urlConnection.setUseCaches(false); - in = urlConnection.getInputStream(); - } catch (Exception e) { - err.jspError(mark, "jsp.error.tld.unable_to_read", location[0], - location[1], e.toString()); - } - parseTLD(ctxt, location[0], in, null); - } else if (!location[0].endsWith("jar")) { - // Location points to TLD file - try { - in = getResourceAsStream(location[0]); - if (in == null) { - throw new FileNotFoundException(location[0]); - } - } catch (FileNotFoundException ex) { - err.jspError(mark, "jsp.error.file.not.found", location[0]); - } - - parseTLD(ctxt, location[0], in, null); - // Add TLD to dependency list - PageInfo pageInfo = ctxt.createCompiler().getPageInfo(); - if (pageInfo != null) { - pageInfo.addDependant(location[0]); - } - } else { - // Tag library is packaged in JAR file - try { - URL jarFileUrl = new URL("jar:" + location[0] + "!/"); - JarURLConnection conn = (JarURLConnection) jarFileUrl - .openConnection(); - conn.setUseCaches(false); - conn.connect(); - jarFile = conn.getJarFile(); - ZipEntry jarEntry = jarFile.getEntry(location[1]); - in = jarFile.getInputStream(jarEntry); - parseTLD(ctxt, location[0], in, jarFileUrl); - } catch (Exception ex) { - err.jspError(mark, "jsp.error.tld.unable_to_read", location[0], - location[1], ex.toString()); - } - } - } finally { - if (in != null) { - try { - in.close(); - } catch (Throwable t) { - } - } - if (jarFile != null) { - try { - jarFile.close(); - } catch (Throwable t) { - } - } - } - - } - - public TagLibraryInfo[] getTagLibraryInfos() { - Collection coll = pi.getTaglibs(); - return (TagLibraryInfo[]) coll.toArray(new TagLibraryInfo[0]); - } - - /* - * @param ctxt The JSP compilation context @param uri The TLD's uri @param - * in The TLD's input stream @param jarFileUrl The JAR file containing the - * TLD, or null if the tag library is not packaged in a JAR - */ - private void parseTLD(JspCompilationContext ctxt, String uri, - InputStream in, URL jarFileUrl) throws JasperException { - Vector tagVector = new Vector(); - Vector tagFileVector = new Vector(); - Hashtable functionTable = new Hashtable(); - - // Create an iterator over the child elements of our element - ParserUtils pu = new ParserUtils(); - TreeNode tld = pu.parseXMLDocument(uri, in); - - // Check to see if the root element contains a 'version' - // attribute, which was added in JSP 2.0 to replace the - // subelement - this.jspversion = tld.findAttribute("version"); - - // Process each child element of our element - Iterator list = tld.findChildren(); - - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - - if ("tlibversion".equals(tname) // JSP 1.1 - || "tlib-version".equals(tname)) { // JSP 1.2 - this.tlibversion = element.getBody(); - } else if ("jspversion".equals(tname) - || "jsp-version".equals(tname)) { - this.jspversion = element.getBody(); - } else if ("shortname".equals(tname) || "short-name".equals(tname)) - this.shortname = element.getBody(); - else if ("uri".equals(tname)) - this.urn = element.getBody(); - else if ("info".equals(tname) || "description".equals(tname)) - this.info = element.getBody(); - else if ("validator".equals(tname)) - this.tagLibraryValidator = createValidator(element); - else if ("tag".equals(tname)) - tagVector.addElement(createTagInfo(element, jspversion)); - else if ("tag-file".equals(tname)) { - TagFileInfo tagFileInfo = createTagFileInfo(element, uri, - jarFileUrl); - tagFileVector.addElement(tagFileInfo); - } else if ("function".equals(tname)) { // JSP2.0 - FunctionInfo funcInfo = createFunctionInfo(element); - String funcName = funcInfo.getName(); - if (functionTable.containsKey(funcName)) { - err.jspError("jsp.error.tld.fn.duplicate.name", funcName, - uri); - - } - functionTable.put(funcName, funcInfo); - } else if ("display-name".equals(tname) || // Ignored elements - "small-icon".equals(tname) || "large-icon".equals(tname) - || "listener".equals(tname)) { - ; - } else if ("taglib-extension".equals(tname)) { - // Recognized but ignored - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.taglib", tname)); - } - } - - } - - if (tlibversion == null) { - err.jspError("jsp.error.tld.mandatory.element.missing", - "tlib-version", uri); - } - if (jspversion == null) { - err.jspError("jsp.error.tld.mandatory.element.missing", - "jsp-version", uri); - } - - this.tags = new TagInfo[tagVector.size()]; - tagVector.copyInto(this.tags); - - this.tagFiles = new TagFileInfo[tagFileVector.size()]; - tagFileVector.copyInto(this.tagFiles); - - this.functions = new FunctionInfo[functionTable.size()]; - int i = 0; - Enumeration enumeration = functionTable.elements(); - while (enumeration.hasMoreElements()) { - this.functions[i++] = (FunctionInfo) enumeration.nextElement(); - } - } - - /* - * @param uri The uri of the TLD @param ctxt The compilation context - * - * @return String array whose first element denotes the path to the TLD. If - * the path to the TLD points to a jar file, then the second element denotes - * the name of the TLD entry in the jar file, which is hardcoded to - * META-INF/taglib.tld. - */ - private String[] generateTLDLocation(String uri, JspCompilationContext ctxt) - throws JasperException { - - int uriType = TldLocationsCache.uriType(uri); - if (uriType == TldLocationsCache.ABS_URI) { - err.jspError("jsp.error.taglibDirective.absUriCannotBeResolved", - uri); - } else if (uriType == TldLocationsCache.NOROOT_REL_URI) { - uri = ctxt.resolveRelativeUri(uri); - } - - String[] location = new String[2]; - location[0] = uri; - if (location[0].endsWith("jar")) { - URL url = null; - try { - url = ctxt.getResource(location[0]); - } catch (Exception ex) { - err.jspError("jsp.error.tld.unable_to_get_jar", location[0], ex - .toString()); - } - if (url == null) { - err.jspError("jsp.error.tld.missing_jar", location[0]); - } - location[0] = url.toString(); - location[1] = "META-INF/taglib.tld"; - } - - return location; - } - - private TagInfo createTagInfo(TreeNode elem, String jspVersion) - throws JasperException { - - String tagName = null; - String tagClassName = null; - String teiClassName = null; - - /* - * Default body content for JSP 1.2 tag handlers ( has - * become mandatory in JSP 2.0, because the default would be invalid for - * simple tag handlers) - */ - String bodycontent = "JSP"; - - String info = null; - String displayName = null; - String smallIcon = null; - String largeIcon = null; - boolean dynamicAttributes = false; - - Vector attributeVector = new Vector(); - Vector variableVector = new Vector(); - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - - if ("name".equals(tname)) { - tagName = element.getBody(); - } else if ("tagclass".equals(tname) || "tag-class".equals(tname)) { - tagClassName = element.getBody(); - } else if ("teiclass".equals(tname) || "tei-class".equals(tname)) { - teiClassName = element.getBody(); - } else if ("bodycontent".equals(tname) - || "body-content".equals(tname)) { - bodycontent = element.getBody(); - } else if ("display-name".equals(tname)) { - displayName = element.getBody(); - } else if ("small-icon".equals(tname)) { - smallIcon = element.getBody(); - } else if ("large-icon".equals(tname)) { - largeIcon = element.getBody(); - } else if ("icon".equals(tname)) { - TreeNode icon = element.findChild("small-icon"); - if (icon != null) { - smallIcon = icon.getBody(); - } - icon = element.findChild("large-icon"); - if (icon != null) { - largeIcon = icon.getBody(); - } - } else if ("info".equals(tname) || "description".equals(tname)) { - info = element.getBody(); - } else if ("variable".equals(tname)) { - variableVector.addElement(createVariable(element)); - } else if ("attribute".equals(tname)) { - attributeVector - .addElement(createAttribute(element, jspVersion)); - } else if ("dynamic-attributes".equals(tname)) { - dynamicAttributes = JspUtil.booleanValue(element.getBody()); - } else if ("example".equals(tname)) { - // Ignored elements - } else if ("tag-extension".equals(tname)) { - // Ignored - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.tag", tname)); - } - } - } - - TagExtraInfo tei = null; - if (teiClassName != null && !teiClassName.equals("")) { - try { - Class teiClass = ctxt.getClassLoader().loadClass(teiClassName); - tei = (TagExtraInfo) teiClass.newInstance(); - } catch (Exception e) { - err.jspError("jsp.error.teiclass.instantiation", teiClassName, - e); - } - } - - TagAttributeInfo[] tagAttributeInfo = new TagAttributeInfo[attributeVector - .size()]; - attributeVector.copyInto(tagAttributeInfo); - - TagVariableInfo[] tagVariableInfos = new TagVariableInfo[variableVector - .size()]; - variableVector.copyInto(tagVariableInfos); - - TagInfo taginfo = new TagInfo(tagName, tagClassName, bodycontent, info, - this, tei, tagAttributeInfo, displayName, smallIcon, largeIcon, - tagVariableInfos, dynamicAttributes); - return taginfo; - } - - /* - * Parses the tag file directives of the given TagFile and turns them into a - * TagInfo. - * - * @param elem The element in the TLD @param uri The location of - * the TLD, in case the tag file is specified relative to it @param jarFile - * The JAR file, in case the tag file is packaged in a JAR - * - * @return TagInfo correspoding to tag file directives - */ - private TagFileInfo createTagFileInfo(TreeNode elem, String uri, - URL jarFileUrl) throws JasperException { - - String name = null; - String path = null; - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode child = (TreeNode) list.next(); - String tname = child.getName(); - if ("name".equals(tname)) { - name = child.getBody(); - } else if ("path".equals(tname)) { - path = child.getBody(); - } else if ("example".equals(tname)) { - // Ignore element: Bugzilla 33538 - } else if ("tag-extension".equals(tname)) { - // Ignore element: Bugzilla 33538 - } else if ("icon".equals(tname) - || "display-name".equals(tname) - || "description".equals(tname)) { - // Ignore these elements: Bugzilla 38015 - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.tagfile", tname)); - } - } - } - - if (path.startsWith("/META-INF/tags")) { - // Tag file packaged in JAR - // See https://issues.apache.org/bugzilla/show_bug.cgi?id=46471 - // This needs to be removed once all the broken code that depends on - // it has been removed - ctxt.setTagFileJarUrl(path, jarFileUrl); - } else if (!path.startsWith("/WEB-INF/tags")) { - err.jspError("jsp.error.tagfile.illegalPath", path); - } - - TagInfo tagInfo = TagFileProcessor.parseTagFileDirectives( - parserController, name, path, jarFileUrl, this); - return new TagFileInfo(name, path, tagInfo); - } - - TagAttributeInfo createAttribute(TreeNode elem, String jspVersion) { - String name = null; - String type = null; - String expectedType = null; - String methodSignature = null; - boolean required = false, rtexprvalue = false, reqTime = false, isFragment = false, deferredValue = false, deferredMethod = false; - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - - if ("name".equals(tname)) { - name = element.getBody(); - } else if ("required".equals(tname)) { - String s = element.getBody(); - if (s != null) - required = JspUtil.booleanValue(s); - } else if ("rtexprvalue".equals(tname)) { - String s = element.getBody(); - if (s != null) - rtexprvalue = JspUtil.booleanValue(s); - } else if ("type".equals(tname)) { - type = element.getBody(); - if ("1.2".equals(jspVersion) - && (type.equals("Boolean") || type.equals("Byte") - || type.equals("Character") - || type.equals("Double") - || type.equals("Float") - || type.equals("Integer") - || type.equals("Long") || type.equals("Object") - || type.equals("Short") || type - .equals("String"))) { - type = "java.lang." + type; - } - } else if ("fragment".equals(tname)) { - String s = element.getBody(); - if (s != null) { - isFragment = JspUtil.booleanValue(s); - } - } else if ("deferred-value".equals(tname)) { - deferredValue = true; - type = "javax.el.ValueExpression"; - TreeNode child = element.findChild("type"); - if (child != null) { - expectedType = child.getBody(); - if (expectedType != null) { - expectedType = expectedType.trim(); - } - } else { - expectedType = "java.lang.Object"; - } - } else if ("deferred-method".equals(tname)) { - deferredMethod = true; - type = "javax.el.MethodExpression"; - TreeNode child = element.findChild("method-signature"); - if (child != null) { - methodSignature = child.getBody(); - if (methodSignature != null) { - methodSignature = methodSignature.trim(); - } - } else { - methodSignature = "java.lang.Object method()"; - } - } else if ("description".equals(tname) || // Ignored elements - false) { - ; - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.attribute", tname)); - } - } - } - - if (isFragment) { - /* - * According to JSP.C-3 ("TLD Schema Element Structure - tag"), - * 'type' and 'rtexprvalue' must not be specified if 'fragment' has - * been specified (this will be enforced by validating parser). - * Also, if 'fragment' is TRUE, 'type' is fixed at - * javax.servlet.jsp.tagext.JspFragment, and 'rtexprvalue' is fixed - * at true. See also JSP.8.5.2. - */ - type = "javax.servlet.jsp.tagext.JspFragment"; - rtexprvalue = true; - } - - if (!rtexprvalue && type == null) { - // According to JSP spec, for static values (those determined at - // translation time) the type is fixed at java.lang.String. - type = "java.lang.String"; - } - - return new TagAttributeInfo(name, required, type, rtexprvalue, - isFragment, null, deferredValue, deferredMethod, expectedType, - methodSignature); - } - - TagVariableInfo createVariable(TreeNode elem) { - String nameGiven = null; - String nameFromAttribute = null; - String className = "java.lang.String"; - boolean declare = true; - int scope = VariableInfo.NESTED; - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - if ("name-given".equals(tname)) - nameGiven = element.getBody(); - else if ("name-from-attribute".equals(tname)) - nameFromAttribute = element.getBody(); - else if ("variable-class".equals(tname)) - className = element.getBody(); - else if ("declare".equals(tname)) { - String s = element.getBody(); - if (s != null) - declare = JspUtil.booleanValue(s); - } else if ("scope".equals(tname)) { - String s = element.getBody(); - if (s != null) { - if ("NESTED".equals(s)) { - scope = VariableInfo.NESTED; - } else if ("AT_BEGIN".equals(s)) { - scope = VariableInfo.AT_BEGIN; - } else if ("AT_END".equals(s)) { - scope = VariableInfo.AT_END; - } - } - } else if ("description".equals(tname) || // Ignored elements - false) { - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.variable", tname)); - } - } - } - return new TagVariableInfo(nameGiven, nameFromAttribute, className, - declare, scope); - } - - private TagLibraryValidator createValidator(TreeNode elem) - throws JasperException { - - String validatorClass = null; - Map initParams = new Hashtable(); - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - if ("validator-class".equals(tname)) - validatorClass = element.getBody(); - else if ("init-param".equals(tname)) { - String[] initParam = createInitParam(element); - initParams.put(initParam[0], initParam[1]); - } else if ("description".equals(tname) || // Ignored elements - false) { - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.validator", tname)); - } - } - } - - TagLibraryValidator tlv = null; - if (validatorClass != null && !validatorClass.equals("")) { - try { - Class tlvClass = ctxt.getClassLoader() - .loadClass(validatorClass); - tlv = (TagLibraryValidator) tlvClass.newInstance(); - } catch (Exception e) { - err.jspError("jsp.error.tlvclass.instantiation", - validatorClass, e); - } - } - if (tlv != null) { - tlv.setInitParameters(initParams); - } - return tlv; - } - - String[] createInitParam(TreeNode elem) { - String[] initParam = new String[2]; - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - if ("param-name".equals(tname)) { - initParam[0] = element.getBody(); - } else if ("param-value".equals(tname)) { - initParam[1] = element.getBody(); - } else if ("description".equals(tname)) { - // Do nothing - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.initParam", tname)); - } - } - } - return initParam; - } - - FunctionInfo createFunctionInfo(TreeNode elem) { - - String name = null; - String klass = null; - String signature = null; - - Iterator list = elem.findChildren(); - while (list.hasNext()) { - TreeNode element = (TreeNode) list.next(); - String tname = element.getName(); - - if ("name".equals(tname)) { - name = element.getBody(); - } else if ("function-class".equals(tname)) { - klass = element.getBody(); - } else if ("function-signature".equals(tname)) { - signature = element.getBody(); - } else if ("display-name".equals(tname) || // Ignored elements - "small-icon".equals(tname) || "large-icon".equals(tname) - || "description".equals(tname) || "example".equals(tname)) { - } else { - if (log.isWarnEnabled()) { - log.warn(Localizer.getMessage( - "jsp.warning.unknown.element.in.function", tname)); - } - } - } - - return new FunctionInfo(name, klass, signature); - } - - // ********************************************************************* - // Until javax.servlet.jsp.tagext.TagLibraryInfo is fixed - - /** - * The instance (if any) for the TagLibraryValidator class. - * - * @return The TagLibraryValidator instance, if any. - */ - public TagLibraryValidator getTagLibraryValidator() { - return tagLibraryValidator; - } - - /** - * Translation-time validation of the XML document associated with the JSP - * page. This is a convenience method on the associated TagLibraryValidator - * class. - * - * @param thePage - * The JSP page object - * @return A string indicating whether the page is valid or not. - */ - public ValidationMessage[] validate(PageData thePage) { - TagLibraryValidator tlv = getTagLibraryValidator(); - if (tlv == null) - return null; - - String uri = getURI(); - if (uri.startsWith("/")) { - uri = URN_JSPTLD + uri; - } - - return tlv.validate(getPrefixString(), uri, thePage); - } - - protected TagLibraryValidator tagLibraryValidator; -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/CheckOpenResourcesValve.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/CheckOpenResourcesValve.java deleted file mode 100644 index 47193423cd..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/CheckOpenResourcesValve.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; - -import org.apache.catalina.valves.ValveBase; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.Session; -import org.apache.catalina.realm.GenericPrincipal; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.ResourceCheckpoints; - -/** - * Valve used to check if resources open in an http method are all closed at the end of the method call. - * @author Florent Benoit - */ -public class CheckOpenResourcesValve extends ValveBase { - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Default constructor with a given resource checker manager. - * @param resourceCheckerManager the given instance - */ - public CheckOpenResourcesValve(IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception java.io.IOException if an input/output error occurs - * @exception javax.servlet.ServletException if a servlet error occurs - */ - public void invoke(final Request request, final Response response) throws IOException, ServletException { - try { - // call the next valve - getNext().invoke(request, response); - } finally { - // Check if resources are closed - resourceCheckerManager.detect(new ValveResourceCheckerInfo(request)); - resourceCheckerManager.delistAll(); - } - } - -} - -/** - * Checker info for valves. - * @author Florent Benoit - */ -class ValveResourceCheckerInfo implements IResourceCheckerInfo { - - /** - * Http request. - */ - private Request request = null; - - /** - * Build a checker info object based on the given request. - * @param request the given request - */ - public ValveResourceCheckerInfo(final Request request) { - this.request = request; - } - - /** - * @return checkpoint of the caller. - */ - public ResourceCheckpoints getCheckPoint() { - return ResourceCheckpoints.HTTP_AFTER_CALL; - } - - /** - * @return data for identifying the current caller (EJB Name, Servlet Name, etc) - */ - public String getCallerInfo() { - return request.getRequestURL().toString(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/FilterValveWrapper.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/FilterValveWrapper.java deleted file mode 100644 index 2205938239..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/FilterValveWrapper.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -import org.apache.catalina.Valve; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; - -/** - * This class allows to wrap an http filter into a Tomcat valve. - * @author Florent Benoit - */ -public class FilterValveWrapper extends ValveBase { - - /** - * Wrapped filter. - */ - private Filter filter = null; - - /** - * Default constructor wrapping the given filter. - * @param filter the given filter - */ - public FilterValveWrapper(final Filter filter) { - this.filter = filter; - } - - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - filter.doFilter(request, response, new ValveFilterChain(getNext(), request, response)); - } - - -} - - -class ValveFilterChain implements FilterChain { - - private Valve valve = null; - - private Request request; - private Response response; - - public ValveFilterChain(final Valve valve, final Request request, final Response response) { - this.valve = valve; - this.request = request; - this.response = response; - } - - public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse) throws IOException, ServletException { - valve.invoke(request, response); - } - - - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JCatalinaRuleSet.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JCatalinaRuleSet.java deleted file mode 100644 index da0020a71c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JCatalinaRuleSet.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import org.apache.catalina.Container; -import org.apache.catalina.startup.ClusterRuleSetFactory; -import org.apache.catalina.startup.ConnectorCreateRule; -import org.apache.catalina.startup.ContextRuleSet; -import org.apache.catalina.startup.EngineRuleSet; -import org.apache.catalina.startup.HostRuleSet; -import org.apache.catalina.startup.NamingRuleSet; -import org.apache.catalina.startup.SetAllPropertiesRule; -import org.apache.tomcat.util.digester.Digester; -import org.apache.tomcat.util.digester.Rule; -import org.apache.tomcat.util.digester.RuleSetBase; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.web.tomcat6.security.Realm; -import org.xml.sax.Attributes; - -/** - * Defines the rules to parse the Tomcat server.xml file - * Some rules are customized for JOnAS. - * @author Tomcat team - * @author Florent Benoit - */ -public class JCatalinaRuleSet extends RuleSetBase { - - /** - * Parent class loader use for Tomcat. - */ - private ClassLoader parentClassLoader = null; - - /** - * SecurityService for the Realms. - */ - private SecurityService securityService = null; - - /** - * Constructor of the rules of parsing for server.xml. - * @param parentClassLoader the parent class loader to use - * @param securityService SecurityService for the Realms - */ - public JCatalinaRuleSet(final ClassLoader parentClassLoader, final SecurityService securityService) { - super(); - this.parentClassLoader = parentClassLoader; - this.securityService = securityService; - } - - - /** - * Add the rules to the digester object. - * @param digester object on whcih to define rules - */ - public void addRuleInstances(final Digester digester) { - - // Configure the actions we will be using - digester.addObjectCreate("Server", - "org.apache.catalina.core.StandardServer", - "className"); - digester.addSetProperties("Server"); - digester.addSetNext("Server", - "setServer", - "org.apache.catalina.Server"); - - digester.addObjectCreate("Server/GlobalNamingResources", - "org.apache.catalina.deploy.NamingResources"); - digester.addSetProperties("Server/GlobalNamingResources"); - digester.addSetNext("Server/GlobalNamingResources", - "setGlobalNamingResources", - "org.apache.catalina.deploy.NamingResources"); - - - digester.addObjectCreate("Server/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Listener"); - digester.addSetNext("Server/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - digester.addObjectCreate("Server/Service", - "org.apache.catalina.core.StandardService", - "className"); - digester.addSetProperties("Server/Service"); - digester.addSetNext("Server/Service", - "addService", - "org.apache.catalina.Service"); - - digester.addObjectCreate("Server/Service/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Service/Listener"); - digester.addSetNext("Server/Service/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - //Executor - digester.addObjectCreate("Server/Service/Executor", - "org.apache.catalina.core.StandardThreadExecutor", - "className"); - digester.addSetProperties("Server/Service/Executor"); - - digester.addSetNext("Server/Service/Executor", - "addExecutor", - "org.apache.catalina.Executor"); - - - digester.addRule("Server/Service/Connector", new ConnectorCreateRule()); - digester.addRule("Server/Service/Connector", new SetAllPropertiesRule(new String[] {"executor"})); - digester.addSetNext("Server/Service/Connector", "addConnector", "org.apache.catalina.connector.Connector"); - - - - - digester.addObjectCreate("Server/Service/Connector/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Service/Connector/Listener"); - digester.addSetNext("Server/Service/Connector/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - - // Add RuleSets for nested elements - digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/")); - digester.addRuleSet(new EngineRuleSet("Server/Service/")); - digester.addRuleSet(new HostRuleSet("Server/Service/Engine/")); - digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/")); - digester.addRuleSet(ClusterRuleSetFactory.getClusterRuleSet("Server/Service/Engine/Host/Cluster/")); - digester.addRuleSet(new NamingRuleSet("Server/Service/Engine/Host/Context/")); - - // When the 'engine' is found, set the parentClassLoader. - digester.addRule("Server/Service/Engine", - new SetParentClassLoaderRule(parentClassLoader)); - - // Assign SecurityService to the declared Realms - SetSecurityServiceRule sssr = new SetSecurityServiceRule(securityService); - digester.addRule("Server/Service/Engine/Realm", sssr); - digester.addRule("Server/Service/Engine/Host/Realm", sssr); - digester.addRule("Server/Service/Engine/Host/Context/Realm", sssr); - - digester.addRuleSet(ClusterRuleSetFactory.getClusterRuleSet("Server/Service/Engine/Cluster/")); - } -} - -/** - * Class that sets the parent class loader for the top class on the stack. - * @author take from Catalina. - */ -final class SetParentClassLoaderRule extends Rule { - - /** - * The parent class loader to be set. - */ - private ClassLoader parentClassLoader = null; - - - /** - * Construct a new action. - * @param parentClassLoader The new parent class loader - */ - public SetParentClassLoaderRule(final ClassLoader parentClassLoader) { - super(); - this.parentClassLoader = parentClassLoader; - } - - /** - * Add the requested parent class loader. - * @param namespace the namespace URI of the matching element, or an - * empty string if the parser is not namespace aware - * or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param attributes the attributes. - * @throws Exception if an error occurs. - */ - public void begin(final String namespace, final String name, final Attributes attributes) throws Exception { - Container top = (Container) digester.peek(); - top.setParentClassLoader(parentClassLoader); - } -} - -/** - * Class that sets the {@link SecurityService} for the top {@link Realm} on the stack. - * @author take from Catalina. - */ -final class SetSecurityServiceRule extends Rule { - - /** - * The {@link SecurityService} to be set. - */ - private SecurityService securityService = null; - - - /** - * Construct a new action. - * @param securityService The {@link SecurityService} - */ - public SetSecurityServiceRule(final SecurityService securityService) { - super(); - this.securityService = securityService; - } - - /** - * Add the {@link SecurityService}. - * @param namespace the namespace URI of the matching element, or an - * empty string if the parser is not namespace aware - * or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param attributes the attributes. - * @throws Exception if an error occurs. - */ - public void begin(final String namespace, final String name, final Attributes attributes) throws Exception { - Object top = digester.peek(); - // We can only handle JOnAS JACC Realms - if (top instanceof Realm) { - Realm realm = (Realm) top; - realm.setSecurityService(securityService); - } - - } -} - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASContextConfig.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASContextConfig.java deleted file mode 100644 index d6bc1b2a4a..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASContextConfig.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import org.apache.catalina.startup.ContextConfig; -import org.apache.tomcat.util.digester.Digester; -import org.ow2.jonas.security.SecurityService; - -import java.lang.reflect.Field; - -/** - * Own JOnAS context config object in order to change some default values. - * @author Florent BENOIT - */ -public class JOnASContextConfig extends ContextConfig { - - /** - * {@link SecurityService} instance to pass to the {@link org.ow2.jonas.web.tomcat6.security.Realm}s. - */ - private SecurityService service = null; - - /** - * Path to the default Context for Tomcat6 (can use /). - */ - public static final String DEFAULT_CONTEXT_XML = "conf/tomcat6-context.xml"; - - /** - * Path to the default Web.xml object for Tomcat6 (can use /). - */ - public static final String DEFAULT_WEB_XML = "conf/tomcat6-web.xml"; - - /** - * @return the location of the default deployment descriptor - */ - @Override - public String getDefaultWebXml() { - if (this.defaultWebXml == null) { - defaultWebXml = DEFAULT_WEB_XML; - } - - return (this.defaultWebXml); - - } - - /** - * @return the location of the default context file - */ - @Override - public String getDefaultContextXml() { - if (defaultContextXml == null) { - defaultContextXml = DEFAULT_CONTEXT_XML; - } - - return (this.defaultContextXml); - - } - - /** - * Extend META-INF/Context.xml Digester with JOnAS {@link SecurityService} setup. - * @return an extended Digester. - */ - @Override - protected Digester createContextDigester() { - // Get base Digester - Digester digester = super.createContextDigester(); - // If a JOnAS Realm is found, inject the SecurityService - digester.addRule("Context/Realm", new SetSecurityServiceRule(service)); - return digester; - } - - /** - * @param service {@link SecurityService} instance to assign. - */ - public void setSecurityService(final SecurityService service) { - this.service = service; - } - - /** - * Always nullify the 'contextDigeste'r static reference. - * @see org.apache.catalina.startup.ContextConfig#init() - */ - @Override - protected synchronized void init() { - // nullify the digester Object - // was holding a reference on a discarded security service. - contextDigester = null; - super.init(); - } - - - /** - * Process the application configuration file, if it exists. - */ - protected void applicationWebConfig() { - super.applicationWebConfig(); - - - // Keep value of the ignoreAnnotations flag - boolean ignore = context.getIgnoreAnnotations(); - if (ignore) { - org.apache.AnnotationProcessor annotationProcessor = ((org.apache.catalina.core.StandardContext) context).getAnnotationProcessor(); - Class clazz= annotationProcessor.getClass(); - Field f = null; - try { - f = clazz.getDeclaredField("disabledAnnotation"); - f.setAccessible(true); - f.set(annotationProcessor, Boolean.TRUE); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to find the field", e); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Unable to find the field", e); - } - - // Enable annotation processing - context.setIgnoreAnnotations(false); - - } - } - - /** - * @param tomcat6ContextConfPath The path to the tomcat 6 configuration file to set - */ - public void setDefaultContextXml(final String tomcat6ContextConfPath) { - this.defaultContextXml = tomcat6ContextConfPath; - } - - /** - * @param tomcat6WebConfPath Path to the tomcat 6 web configuration file to set - */ - public void setDefaultWebXml(final String tomcat6WebConfPath) { - this.defaultWebXml = tomcat6WebConfPath; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASStandardContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASStandardContext.java deleted file mode 100644 index 8e1ae186a0..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/JOnASStandardContext.java +++ /dev/null @@ -1,647 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.catalina.Container; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.Loader; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.deploy.ContextEnvironment; -import org.apache.catalina.deploy.ContextResource; -import org.apache.catalina.deploy.MessageDestinationRef; -import org.apache.catalina.loader.WebappLoader; -import org.apache.tomcat.util.modeler.Registry; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.web.tomcat6.loader.NoSystemAccessWebappClassLoader; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - -/** - * Define a JOnAS context. It is used to check if a context has been defined in - * server.xml and to use this context while deploying the war instead of - * creating a new one - * @author Florent Benoit - * @author Philippe Coq (Tomcat 4.0) - */ -public class JOnASStandardContext extends StandardContext { - - /** - * UID for the serialization. - */ - private static final long serialVersionUID = 1L; - - /** - * Unique instance of Catalina. - */ - private static transient Tomcat6Service catalinaService = null; - - /** - * Logger for this service. - */ - private static Log logger = LogFactory.getLog(JOnASStandardContext.class); - - /** - * URL of the ear. - */ - private URL earURL = null; - - /** - * We are in ear case or not ? - */ - private boolean inEarCase = false; - - /** - * This context was configured in server.xml ? - */ - private boolean inServerXml = false; - - /** - * Java 2 delegation model is use or not ? - */ - private boolean java2DelegationModel = false; - - /** - * WEB deployment descriptor. - */ - private WebContainerDeploymentDesc webDeploymentDescriptor = null; - - /** - * JOnAS deployment descriptor. - */ - private String jonasDeploymentDescriptor = null; - - /** - * Context was started ? - */ - private boolean startedJStdx = false; - - /** - * URL of the war. - */ - private URL warURL = null; - - /** - * J2EEApplication MBean OBJECT_NAME in ear case. - */ - private String earON = null; - - /** - * EJB ClassLoader. - */ - private ClassLoader ejbClassLoader = null; - - /** - * EAR ClassLoader. - */ - private ClassLoader earClassLoader = null; - - /** - * Filtering ClassLoader. - */ - private FilteringClassLoader filteringClassLoader = null; - - - /** - * Constructor of the Context. - */ - public JOnASStandardContext() { - this(true, true, false); - } - - /** - * Constructor of the Context. - * @param inServerXml this context was defined in server.xml - * @param java2DelegationModel delegation model for classloader is true ? - * @param inEarCase if we are or not in EAR case - */ - public JOnASStandardContext(final boolean inServerXml, final boolean java2DelegationModel, final boolean inEarCase) { - super(); - this.inServerXml = inServerXml; - this.java2DelegationModel = java2DelegationModel; - this.inEarCase = inEarCase; - } - - /** - * Assign the parent Tomcat6 WebContainerService. - * @param tomcat {@link Tomcat6Service} instance. - */ - public void setTomcatService(final Tomcat6Service tomcat) { - catalinaService = tomcat; - } - - /** - * @return Returns the earURL. - */ - public URL getEarURL() { - return earURL; - } - - /** - * Gets the web deployment descriptor content. - * @return the content of the web deployment descriptor - */ - public WebContainerDeploymentDesc getWebDeploymentDescriptor() { - return webDeploymentDescriptor; - } - - /** - * Gets the deployment descriptor content of jonas-web.xml file. - * @return the content of jonas-web.xml file - */ - public String getJonasDeploymentDescriptor() { - return jonasDeploymentDescriptor; - } - - /** - * @return Returns the warURL. - */ - public URL getWarURL() { - return warURL; - } - - /** - * @return true if this web module is a part of a EAR - */ - public boolean isInEarCase() { - return inEarCase; - } - - /** - * This context was defined in server.xml ? - * @return true if this context was defined in server.xml - */ - public boolean isInServerXml() { - return inServerXml; - } - - /** - * @return true if the Java2 delegation model is used - */ - public boolean isJava2DelegationModel() { - return java2DelegationModel; - } - - /** - * @param earURL The earURL to set. - */ - protected void setEarURL(final URL earURL) { - this.earURL = earURL; - // Determine the corresponding J2EEApplication ObjectName - ObjectName j2eeAppOn = null; - // Catalina StandardContext provides setter and getter for - // j2eeApplication attribute - // The setter was called in - // CatalinaJWebContainerServiceImpl.doRegisterWar method - // befor the call to this setter - String appName = getJ2EEApplication(); - // setServer() was called before this setter - String serverON = getServer(); - if (appName != null && serverON != null) { - ObjectName serverOn; - try { - serverOn = ObjectName.getInstance(serverON); - String domainName = serverOn.getDomain(); - String serverName = serverOn.getKeyProperty("name"); - j2eeAppOn = J2eeObjectName.J2EEApplication(domainName, serverName, appName); - } catch (MalformedObjectNameException e) { - logger.error("Cannot build the ObjectName for the context ''{0}''", e); - } - } - if (j2eeAppOn != null) { - earON = j2eeAppOn.toString(); - } - } - - /** - * @param inEarCase The inEarCase to set. - */ - protected void setInEarCase(final boolean inEarCase) { - this.inEarCase = inEarCase; - } - - /** - * @param java2DelegationModel The java2DelegationModel to set. - */ - protected void setJava2DelegationModel(final boolean java2DelegationModel) { - this.java2DelegationModel = java2DelegationModel; - } - - /** - * Set the web deployment descriptor content. - * @param webDeploymentDescriptor the content of the web deployment descriptor - */ - public void setWebDeploymentDescriptor(final WebContainerDeploymentDesc webDeploymentDescriptor) { - this.webDeploymentDescriptor = webDeploymentDescriptor; - } - - /** - * Set the deployment descriptor content of jonas-web.xml file. - * @param jonasDeploymentDescriptor the content of jonas-web.xml - */ - public void setJonasDeploymentDescriptor(final String jonasDeploymentDescriptor) { - this.jonasDeploymentDescriptor = jonasDeploymentDescriptor; - } - - /** - * @param warURL The warURL to set. - */ - protected void setWarURL(final URL warURL) { - this.warURL = warURL; - } - - /** - * Start the JOnAS context if catalina is started. - * @throws LifecycleException if the context can't be started - */ - @Override - public synchronized void start() throws LifecycleException { - if (catalinaService != null && catalinaService.isTomcatStarted()) { - if (logger.isDebugEnabled()) { - logger.debug("Tomcat in Web container service is started, starting the context..."); - } - startedJStdx = true; - super.start(); - } - - } - - /** - * Stop this Context component. - * @exception LifecycleException if a shutdown error occurs - */ - @Override - public synchronized void stop() throws LifecycleException { - if (startedJStdx) { - startedJStdx = false; - super.stop(); - unregisterJMX(); - } - - } - - /** - * Unregister the WebModule MBean of this Context. - */ - private void unregisterJMX() { - // Bug Tomcat 5/6 doesn't remove MBean WebModule - // Delete the next line when will be fixed - if(getObjectName() != null) { - Registry.getRegistry(null, null).unregisterComponent(getObjectName()); - // TODO broadcast the "j2ee.object.deleted" notification - } - - } - - /** - * Add a resource reference for this web application. Do nothing when - * running inside JOnAS. Resources are managed by JOnAS - * @param resource New resource reference - */ - public void addResource(final ContextResource resource) { - } - - /** - * Add an environment entry for this web application. Do nothing when - * running inside JOnAS. ENC environment is managed by JOnAS - * @param environment New environment entry - */ - public void addEnvironment(final ContextEnvironment environment) { - } - - /** - * Add a message destination reference for this web application. Do nothing when - * running inside JOnAS. Resources are managed by JOnAS - * @param mdr New message destination reference - */ - @Override - public void addMessageDestinationRef(final MessageDestinationRef mdr) { - - } - - /** - * Set the parent class loader for this web application. Do it only if it is - * not started. - * @param parent The new parent class loader - */ - @Override - public void setParentClassLoader(final ClassLoader parent) { - // Do it only if the context is not already started - if (!startedJStdx) { - super.setParentClassLoader(parent); - } - } - - /** - * @return OBJECT_NAME of the parent J2EEApplication MBean - */ - public String getEarON() { - return earON; - } - - - /** - * Override the working directory (which is going to Catalina.base/work usually). - * @return a path which is referencing the JOnAS work directory - */ - @Override - public String getWorkDir() { - String superWorkDir = super.getWorkDir(); - if (superWorkDir == null) { - // Retrieve our parent (normally a host) name - String hostName = null; - String engineName = null; - Container parentHost = getParent(); - if (parentHost != null) { - hostName = parentHost.getName(); - Container parentEngine = parentHost.getParent(); - if (parentEngine != null) { - engineName = parentEngine.getName(); - } - } - if ((hostName == null) || (hostName.length() < 1)) { - hostName = "_"; - } - if ((engineName == null) || (engineName.length() < 1)) { - engineName = "_"; - } - - String temp = getPath(); - if (temp.startsWith("/")) { - temp = temp.substring(1); - } - temp = temp.replace('/', '_'); - temp = temp.replace('\\', '_'); - if (temp.length() < 1) { - temp = "_"; - } - superWorkDir = catalinaService.getServerProperties().getWorkDirectory() + File.separator + "tomcat" - + File.separator + engineName + File.separator + hostName + File.separator + temp; - new File(superWorkDir).mkdirs(); - super.setWorkDir(superWorkDir); - } - return superWorkDir; - - } - - /** - * Change the type of the WebappClassLoader to be instanciated. - * - * @param loader The newly associated loader - */ - @Override - public void setLoader(final Loader loader) { - // In all cases, update the loader type - if (loader instanceof WebappLoader) { - ((WebappLoader) loader).setLoaderClass(NoSystemAccessWebappClassLoader.class.getName()); - } - super.setLoader(loader); - } - - - /** - * @return ejb classloader - */ - public ClassLoader getEjbClassLoader() { - return ejbClassLoader; - } - - /** - * Sets ejb classloader. - * @param ejbClassLoader the given classloader - */ - public void setEjbClassLoader(final ClassLoader ejbClassLoader) { - this.ejbClassLoader = ejbClassLoader; - } - - /** - * Sets the EAR classloader. - * @param earClassLoader the given EAR classloader - */ - public void setEarClassLoader(final ClassLoader earClassLoader) { - this.earClassLoader = earClassLoader; - } - - - /** - * Gets data about loading a given class. - * @param className the class name - * @return a string description for the given class that needs to be loaded - */ - public String loadClass(final String className) { - if (!started) { - throw new IllegalStateException("Cannot load a class if context is not started"); - } - - // Get ClassLoader - ClassLoader systemClassLoader = null; - try { - systemClassLoader = LoaderManager.getInstance().getExternalLoader(); - } catch (Exception e) { - throw new IllegalStateException("Unable to get LoaderManager", e); - } - - - // Create XML document... - - // Create builder with factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = null; - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new IllegalStateException("Cannot build document builder", e); - } - - // Create Document - Document document = builder.newDocument(); - - // Append root element - Element classElement = document.createElement("class"); - document.appendChild(classElement); - - // name - classElement.setAttribute("name", className); - - - boolean classNotFound = false; - String error = null; - ClassLoader webAppClassLoader = getLoader().getClassLoader(); - Class clazz = null; - try { - clazz = webAppClassLoader.loadClass(className); - } catch (ClassNotFoundException e) { - error = e.toString(); - classNotFound = true; - } catch (Error e) { - classNotFound = true; - error = e.toString(); - } - - // class not found ? (add error content if NotFound) - classElement.setAttribute("classNotFound", Boolean.toString(classNotFound)); - if (classNotFound) { - Element errorElement = document.createElement("error"); - classElement.appendChild(errorElement); - Text errorText = document.createTextNode(error); - errorElement.appendChild(errorText); - } else { - // Class found ! Add details (if any) - - // Search if the classes was loaded from the module, from the application or from the system - String type = "Application/WebApp (This module)"; - ClassLoader classClassLoader = clazz.getClassLoader(); - ClassLoader cl = webAppClassLoader; - boolean found = false; - while (cl != null && !found) { - - // ClassLoader is equals to the classloader that has loaded the class - if (cl.equals(classClassLoader)) { - found = true; - } - - if (systemClassLoader.equals(cl)) { - type = "System"; - } - - if (cl.equals(earClassLoader)) { - type = "Application/EAR"; - } - - if (cl.equals(ejbClassLoader)) { - type = "Application/EJBs"; - } - - cl = cl.getParent(); - } - - // Add where the class has been found - classElement.setAttribute("where", type); - - - // ClassLoader info (if any) - if (classClassLoader != null) { - Element classLoaderElement = document.createElement("class-loader"); - classElement.appendChild(classLoaderElement); - classLoaderElement.setAttribute("name", classClassLoader.getClass().getName()); - Text classLoaderText = document.createTextNode(classClassLoader.toString()); - classLoaderElement.appendChild(classLoaderText); - } - } - - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer; - try { - transformer = transformerFactory.newTransformer(); - } catch (TransformerConfigurationException e) { - throw new IllegalStateException("Unable to get a new transformer", e); - } - - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - - // transform OUTPUT - try { - transformer.transform(new DOMSource(document), streamResult); - } catch (TransformerException e) { - throw new IllegalStateException("Unable to transform the document", e); - } - - return stringWriter.toString(); - } - - /** - * Gets the filters of classloader. - * @return the filters for the war classloader - */ - public String[] getClassLoaderFilters() { - List filters = filteringClassLoader.getFilters(); - return filters.toArray(new String[filters.size()]); - } - - /** - * Gets all the URL to the given resource. - * @param resourceName the name of the resource - * @return the list of url, if any - */ - public URL[] getResources(final String resourceName) { - if (!started) { - throw new IllegalStateException("Cannot load a resource if context is not started"); - } - ClassLoader webAppClassLoader = getLoader().getClassLoader(); - - Enumeration urls = null; - try { - urls = webAppClassLoader.getResources(resourceName); - } catch (IOException e) { - throw new IllegalStateException("Unable to get the resource '" + resourceName + "'.", e); - } - - List urlsList = new ArrayList(); - while (urls.hasMoreElements()) { - urlsList.add(urls.nextElement()); - } - - return urlsList.toArray(new URL[urlsList.size()]); - } - - /** - * Sets the filtering classloader. - * @param filteringClassLoader the given classloader - */ - public void setFilteringClassLoader(final FilteringClassLoader filteringClassLoader) { - this.filteringClassLoader = filteringClassLoader; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ResetAuthenticationValve.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ResetAuthenticationValve.java deleted file mode 100644 index ce9556ada0..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ResetAuthenticationValve.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat6; - -import java.io.IOException; -import java.security.Principal; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; - -import org.apache.catalina.Session; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.realm.GenericPrincipal; -import org.apache.catalina.valves.ValveBase; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -/** - * This valve reset the authentication and propagate the cached principal - * Authenticator valve will be called after (if an authentication is needed - * further). - * @author Florent Benoit - */ -public class ResetAuthenticationValve extends ValveBase { - - /** - * Unauthenticated security context. - */ - private static final SecurityContext UNAUTHENTICATED = new SecurityContext(); - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - - // First, check if there is a principal in the current request - Principal principal = request.getPrincipal(); - if (principal == null) { - // No principal in the request, check if there is a session - HttpSession httpSession = request.getSession(false); - if (httpSession != null) { - // There is a session, check if there is a principal associated - // to this session. - Session session = getContainer().getManager().findSession(httpSession.getId()); - principal = session.getPrincipal(); - } - } - - // We've found a principal (either in the request or in the session) - if (principal != null) { - // Cast if it is a generic principal - if (principal instanceof GenericPrincipal) { - GenericPrincipal genericPrincipal = (GenericPrincipal) principal; - SecurityContext ctx = new SecurityContext(principal.getName(), genericPrincipal.getRoles()); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - } - } - - - // Call next valve - try { - getNext().invoke(request, response); - } finally { - // Reset authentication - SecurityCurrent.getCurrent().setSecurityContext(UNAUTHENTICATED); - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/Tomcat6Service.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/Tomcat6Service.java deleted file mode 100644 index 1b492460d5..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/Tomcat6Service.java +++ /dev/null @@ -1,1666 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6; - -import static org.ow2.jonas.ws.jaxws.IJAXWSService.KEY_WEB_SERVICES_METADATAS; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.net.URL; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.naming.NamingException; -import javax.servlet.Filter; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Engine; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.Server; -import org.apache.catalina.Service; -import org.apache.catalina.connector.Connector; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.core.StandardEngine; -import org.apache.catalina.startup.ContextConfig; -import org.apache.catalina.util.DefaultAnnotationProcessor; -import org.apache.tomcat.util.digester.Digester; -import org.objectweb.util.monolog.api.BasicLevel; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.jonas.web.base.War; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory; -import org.ow2.jonas.web.tomcat6.custom.ContextCustomizer; -import org.ow2.jonas.web.tomcat6.osgi.OSGiTldListener; -import org.ow2.jonas.web.tomcat6.security.Realm; -import org.ow2.jonas.web.tomcat6.tx.TransactionValve; -import org.ow2.jonas.web.tomcat6.versioning.ContextFinder; -import org.ow2.jonas.web.tomcat6.ws.WSContextLifecycleListener; -import org.ow2.jonas.web.tomcat6.ws.WSDeployment; -import org.ow2.jonas.web.tomcat6.ws.WebservicesWebDeployer; -import org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * Implementation of the web container service for Tomcat 6. - * This service also adds virtual path support to Tomcat 6. - * - * @author Florent BENOIT - * @author S. Ali Tokmen - */ -public class Tomcat6Service extends BaseWebContainerService implements JWebContainerService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(Tomcat6Service.class); - - /** - * Relative path of the configuration file. - */ - protected static final String CONFIG_FILE = "conf" + File.separator + "tomcat6-server.xml"; - - /** - * Path to the tomcat 6 server configuration file - */ - protected String tomcat6ServerConfPath; - - /** - * Path to the tomcat 6 context configuration file - */ - protected String tomcat6ContextConfPath; - - /** - * Path to the tomcat 6 web configuration file - */ - protected String tomcat6WebConfPath; - - /** - * Name of the tomcat 6 server configuration file - */ - protected static final String TOMCAT6_SERVER_CONFIG_FILENAME = "tomcat6-server.xml"; - - /** - * Name of the tomcat 6 context configuration file - */ - protected static final String TOMCAT6_CONTEXT_CONFIG_FILENAME = "tomcat6-context.xml"; - - /** - * Name of the tomcat 6 web configuration file - */ - protected static final String TOMCAT6_WEB_CONFIG_FILENAME = "tomcat6-web.xml"; - - /** - * The reference on the catalina server. - */ - private Server server = null; - - /** - * External class loader. - */ - private ClassLoader externalLoader = null; - - /** - * Web container started ? - */ - private boolean tomcatStarted = false; - - /** - * Security service. - */ - private SecurityService securityService = null; - - /** - * {@link IWebServiceDeploymentManager} registration key. - */ - private ServiceRegistration reg; - - /** - * {@link IWebDeployer} registration key. - */ - private ServiceRegistration reg2; - - /** - * Transaction service. - */ - private TransactionService transactionService = null; - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Customizers to be applied on the created Contexts. - */ - private List customizers; - - /** - * Default constructor. - * @param bundleContext the OSGi bundle context - */ - public Tomcat6Service(final BundleContext bundleContext) { - super(bundleContext); - this.customizers = new ArrayList(); - } - - /** - * Init the environment of catalina set catalina.home, catalina.base and - * unset the tomcat naming. - * @throws ServiceException if catalina home is not set - */ - protected void initCatalinaEnvironment() throws ServiceException { - - // Assume that CATALINA_HOME = JONAS_ROOT and CATALINA_BASE = JONAS_BASE - String jonasRoot = System.getProperty("jonas.root"); - String jonasBase = System.getProperty("jonas.base"); - - String catalinaHome = System.getProperty("catalina.home"); - String catalinaBase = System.getProperty("catalina.base"); - - // check that this value is ok ? - if (catalinaHome != null && !jonasRoot.equals(catalinaHome)) { - logger.warn("The CATALINA_HOME property was set to ''{0}'', fix it by using JONAS_ROOT ''{1}''", catalinaHome, - jonasRoot); - } - // override - System.setProperty("catalina.home", jonasRoot); - - // CATALINA_BASE = JONAS_BASE ? - if (catalinaBase != null && !jonasBase.equals(catalinaBase)) { - logger.warn("The CATALINA_BASE property was set to ''{0}'', fix it by using JONAS_BASE ''{1}''", catalinaBase, - jonasBase); - } - // override - System.setProperty("catalina.base", jonasBase); - - // use the JOnAS naming instead of the Tomcat naming - System.setProperty("catalina.useNaming", "false"); - } - - /** - * Start the Catalina service in a new thread. - * @throws ServiceException if the startup failed. - */ - @Override - public void doStart() throws ServiceException { - - initCatalinaEnvironment(); - - // On Demand feature not enabled, start the web container now - if (!isOnDemandFeatureEnabled()) { - startInternalWebContainer(); - } // else delay this launch - - // Here, register the IWSDM - WSDeployment manager = new WSDeployment(this); - manager.setWorkDirectory(getServerProperties().getWorkDirectory()); - reg = getBundleContext().registerService(IWebServiceDeploymentManager.class.getName(), - manager, - null); - - // Here, register the IWebDeployer - WebservicesWebDeployer webDeployer = new WebservicesWebDeployer(this); - webDeployer.setWorkDirectory(getServerProperties().getWorkDirectory()); - reg2 = getBundleContext().registerService(IWebDeployer.class.getName(), - webDeployer, - null); - - // ... and run super method - super.doStart(); - - } - - - /** - * Starts the specific code for the web container implementation. - * This allows to start the internal container on demand (if there is an access on the http proxy port for example) - * @throws JWebContainerServiceException if container is not started - */ - @Override - public synchronized void startInternalWebContainer() throws JWebContainerServiceException { - // Already started - if (tomcatStarted) { - return; - } - - // parent ClassLoader - LoaderManager lm = LoaderManager.getInstance(); - try { - externalLoader = lm.getExternalLoader(); - } catch (Exception e1) { - throw new ServiceException("Cannot get Application/Tomcat ClassLoader", e1); - } - - // Initialize the context finder for the optional versioning service - // Context finder will not do anything if the versioning service is not - // present (can be removed or added on-the-fly). - ContextFinder.setParent(this); - ContextFinder.setJmxService(jmxService); - - // Create the digester for the parsing of the server.xml. - Digester digester = createServerDigester(); - - // Execute the digester for the parsing of the server.xml. - // And configure the catalina server. - File configFile = null; - - try { - configFile = getConfigFile(); - } catch (FileNotFoundException e) { - logger.error("Cannot find the file ''{0}''", getConfigPath(), e); - throw new ServiceException("Cannot find the configuration file", e); - } - - try { - InputSource is = new InputSource("file://" + configFile.getAbsolutePath()); - FileInputStream fis = new FileInputStream(configFile); - is.setByteStream(fis); - digester.setClassLoader(this.getClass().getClassLoader()); - digester.push(this); - digester.parse(is); - fis.close(); - } catch (Exception e) { - logger.error("Cannot parse the configuration file ''{0}''", configFile, e); - throw new ServiceException("Cannot parse the configuration file '" + configFile + "'", e); - } - - // Set the Domain and the name for each known Engine - for (StandardEngine engine : getEngines()) { - // WARNING : the order of th two next lines is very important. - // The domain must be set in first and the name after. - // In the others cases, Tomcat 6 doesn't set correctly these two - // properties - // because there are somes controls that forbid to have a difference - // between - // the name and the domain. Certainly a bug ! - engine.setDomain(getDomainName()); - engine.setName(getDomainName()); - } - - // If OnDemand Feature is enabled, the http connector port needs to be changed - // And keep-alive feature should be turned-off (to monitor all requests) - if (isOnDemandFeatureEnabled()) { - Service[] services = getServer().findServices(); - - // set name of the first service - if (services.length > 0) { - services[0].setName(getDomainName()); - } - - // Get connector of each service - for (int s = 0; s < services.length; s++) { - Connector[] connectors = services[s].findConnectors(); - if (connectors.length >= 1) { - // Only for the first connector - Connector connector = connectors[0]; - connector.setProperty("maxKeepAliveRequests", "1"); - connector.setPort(getOnDemandRedirectPort()); - connector.setProxyPort(Integer.parseInt(getDefaultHttpPort())); - } - } - } - - - // Start Tomcat server in an execution block - IExecution startExec = new IExecution() { - public Void execute() throws ServiceException { - // Finaly start catalina ... - if (server instanceof Lifecycle) { - try { - Field domainField = server.getClass().getDeclaredField("domain"); - domainField.setAccessible(true); - domainField.set(server, getDomainName()); - server.initialize(); - domainField.set(server, getDomainName()); - Service[] services = getServer().findServices(); - // set name of the first service - if (services.length > 0) { - services[0].setName(getDomainName()); - } - ((Lifecycle) server).start(); - } catch (Exception e) { - logger.error("Cannot start the Tomcat server", e); - throw new ServiceException("Cannot start the Tomcat server", e); - } - } - - return null; - } - }; - - // Execute - ExecutionResult startExecResult = RunnableHelper.execute(getClass().getClassLoader(), startExec); - - // Throw an ServiceException if needed - if (startExecResult.hasException()) { - logger.error("Cannot start the Tomcat server", startExecResult.getException()); - throw new ServiceException("Cannot start the Tomcat Server", startExecResult.getException()); - } - - // Tomcat is started - tomcatStarted = true; - } - - - /** - * Set the environment of the web container inside the given context. - * @param ctxParam the java:comp/env/ environment where is stored the values of the web container environment. - * @param ezbInjectionHolder the easybeans injection handler. - * @param webAppClassLoader the classloader of the web application. - * @throws JWebContainerServiceException if the populating of the environment failed. - */ - @Override - protected void setWebEnvironment(final javax.naming.Context ctxParam, final EZBInjectionHolder ezbInjectionHolder, - final ClassLoader webAppClassLoader) throws JWebContainerServiceException { - - super.setWebEnvironment(ctxParam, ezbInjectionHolder, webAppClassLoader); - - // Store bundle context - try { - getNaming().getComponentContext(webAppClassLoader).bind("comp/env/BundleContext", getBundleContext()); - } catch (NamingException e) { - throw new JWebContainerServiceException("Cannot bind bundle context", e); - } - } - - /** - * Checks if the internal web container has been started. - * @return true if it is already started - */ - @Override - public boolean isInternalContainerStarted() { - return tomcatStarted; - } - - - - /** - * Stop the Catalina service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Undeploy the wars ... - super.doStop(); - - // Unregister the WSDM - if (reg != null) { - reg.unregister(); - } - - if (reg2 != null) { - reg2.unregister(); - } - - - // ... and shut down embedded catalina - if (tomcatStarted && server instanceof Lifecycle) { - try { - ((Lifecycle) server).stop(); - } catch (Exception e) { - throw new ServiceException(e.getMessage(), e); - } - } - tomcatStarted = false; - } - - /** - * Deploy a specific WAR file specified in the context. - * @param ctx the context which contains the configuration in order to - * deploy the WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - @Override - protected void doRegisterWar(final javax.naming.Context ctx) throws JWebContainerServiceException { - // Get the 7 parameters : - // - warURL is the URL of the war to register (required param). - // - contextRoot is the context root to which this application - // should be installed (must be unique) (required param). - // - hostName is the name of the host on which deploy the war - // (optional param taken into account only if no element - // was declared in server.xml for this web application) . - // - Name of the Ear application of this war if any - // - java2DelegationModel the compliance to java2 delegation model - // - parentCL the war classloader of this war. - // - jonasDD JOnAS Deployment Desc content - // - permissionManager JACC permission manager - - URL warURL = null; - URL earURL = null; - URL unpackedWarURL = null; - String contextRoot = null; - boolean java2DelegationModel = true; - PermissionManager permissionManager = null; - boolean inEarCase = true; - String earAppName = null; - WebContainerDeploymentDesc webDD = null; - String userURI = null; - Map webservices = null; - - // War 'management' instance - War war = null; - - try { - war = (War) ctx.lookup("war"); - - // Values loading - unpackedWarURL = (URL) ctx.lookup("unpackedWarURL"); - webDD = (WebContainerDeploymentDesc) ctx.lookup("webDD"); - userURI = (String) ctx.lookup("userURI"); - webservices = (Map) ctx.lookup(KEY_WEB_SERVICES_METADATAS); - - } catch (NamingException e) { - logger.error("Unable to get default parameters", e); - throw new JWebContainerServiceException("Unable to get default parameters", e); - } - - try { - earAppName = (String) ctx.lookup("earAppName"); - } catch (NamingException e) { - // no ear case, so no ear application name - inEarCase = false; - } - - ClassLoader webClassLoader = null; - try { - webClassLoader = (ClassLoader) ctx.lookup("parentCL"); - } catch (NamingException e) { - logger.error("Unable to get parentCL parameter", e); - throw new JWebContainerServiceException("Unable to get parentCL parameter", e); - } - - - FilteringClassLoader filteringClassLoader = null; - - try { - filteringClassLoader = (FilteringClassLoader) ctx.lookup(FilteringClassLoader.class.getName()); - } catch (NamingException e) { - logger.error("Unable to get filteringClassLoader parameter", e); - throw new JWebContainerServiceException("Unable to get filteringClassLoader parameter", e); - } - - - // optional parameters - ClassLoader ejbClassLoader = null; - try { - ejbClassLoader = (ClassLoader) ctx.lookup("ejbClassLoader"); - } catch (NamingException e) { - // no ejb classloader - logger.debug("no ejb Class loader"); - } - ClassLoader earClassLoader = null; - try { - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - } catch (NamingException e) { - // no EAR classloader - logger.debug("no EAR Class loader"); - } - - - // Get injection holder - WARDeployable deployable = null; - try { - deployable = (WARDeployable) ctx.lookup(WARDeployable.class.getName()); - } catch (NamingException e) { - logger.debug("No war deployable (denotes currently an ear case)"); - } - - String hostName = null; - - // Initialize variable values from the war object - warURL = war.getWarURL(); - contextRoot = war.getContextRoot(); - java2DelegationModel = war.getJava2DelegationModel(); - permissionManager = war.getPermissionManager(); - - // Special handling for earURL - earURL = war.getEarURL(); - if (earURL == null) { - // no ear case, so no ear application name - // TODO this flag has probably already been set before - inEarCase = false; - // set earURL to something only to avoid null value - earURL = warURL; - } - // Special handling for hostName - hostName = war.getHostName(); - if (hostName == null) { - hostName = ""; - } - - // Install a new web application, whose web application archive is - // at the specified URL, into this container with the specified - // context root. - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else { - contextRoot = "/" + contextRoot; - } - - // Install the war. - File fWar = URLUtils.urlToFile(warURL); - - // Unpacked path of the war - File destDir = null; - if (fWar.isDirectory()) { - destDir = URLUtils.urlToFile(warURL); - } else { - destDir = URLUtils.urlToFile(unpackedWarURL); - } - - // META-INF/context.xml file - File contextXmlFile = new File(destDir, File.separator + "META-INF" + File.separator + "context.xml"); - - // Check if some contexts were configured in server.xml - List jonasContexts = getConfiguredMatchingJonasContexts(contextRoot, fWar, destDir.getPath()); - - Host deployer = null; - // The context was not found in server.xml, a new context will be - // created. - if (jonasContexts.isEmpty()) { - // Find host on which deploy the context - deployer = findHost(hostName); - - // Create context (false because not in server.xml) - JOnASStandardContext context = new JOnASStandardContext(false, java2DelegationModel, inEarCase); - context.setDocBase(destDir.getPath()); - context.setPath(contextRoot); - - // Use the JOnAS context config - ContextConfig config = createContextConfig(); - - // add the config - ((Lifecycle) context).addLifecycleListener(config); - jonasContexts.add(context); - } - - // Configure these contexts and start them - for (JOnASStandardContext jStdCtx : jonasContexts) { - - // FIXME Only needed once (static reference) - jStdCtx.setTomcatService(this); - - // Set the parent class loader - jStdCtx.setParentClassLoader(webClassLoader); - - // Delegation model - jStdCtx.setDelegate(java2DelegationModel); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Webapp class loader java 2 delegation model set to " + java2DelegationModel); - } - - // Add the TLD that comes from OSGi services - List resourcesToMonitor = getTLDResources(); - OSGiTldListener osGiTldListener = new OSGiTldListener(resourcesToMonitor); - jStdCtx.addLifecycleListener(osGiTldListener); - - // Add valves - // for setting unauthenticated user - jStdCtx.addValve(new ResetAuthenticationValve()); - // For checking transactions - if (transactionService != null) { - jStdCtx.addValve(new TransactionValve(transactionService.getTransactionManager())); - } - // For checking resources - if (resourceCheckerManager != null) { - jStdCtx.addValve(new CheckOpenResourcesValve(resourceCheckerManager)); - } - - // For the audit - Filter auditHttpFilter = null; - if (getAuditService() != null) { - auditHttpFilter = getAuditService().getWebAuditFilter(); - // needs to add this filter on the context - jStdCtx.addValve(new FilterValveWrapper(auditHttpFilter)); - } - - // For the tenantId - Filter tenantIdHttpFilter = null; - String tenantId = null; - if (getMultitenantService() != null){ - // get an instance of the filtre - tenantId = super.getTenantId(war.getWarDeployable()); - tenantIdHttpFilter = getMultitenantService().getTenantIdFilter(tenantId); - // needs to add this filter on the context - jStdCtx.addValve(new FilterValveWrapper(tenantIdHttpFilter)); - } - - // Add the WS related ContextListener only if there are some webservices in the webapp - if (!webservices.isEmpty() && (getJAXWSService() != null)) { - WSContextLifecycleListener listener = new WSContextLifecycleListener(webservices, - getJAXWSService()); - jStdCtx.addLifecycleListener(listener); - } - - // META-INF/context.xml file support - if (contextXmlFile.exists()) { - jStdCtx.setConfigFile(contextXmlFile.getAbsolutePath()); - } - - // The Annotation processor object needs to be initialized with the - // component context. Else, the processor does nothing. - javax.naming.Context envCtx = null; - try { - envCtx = (javax.naming.Context) getNaming().getComponentContext(webClassLoader).lookup("comp/env"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR, "Cannot get the context of the webapplication '" + warURL + "'." , e); - } - DefaultAnnotationProcessor annotationProcessor = new DefaultAnnotationProcessor(envCtx); - annotationProcessor.setEncBindingHolder(webDD.getENCBindingHolder()); - jStdCtx.setAnnotationProcessor(annotationProcessor); - - // JSR 77 - jStdCtx.setJ2EEServer(getJonasServerName()); - jStdCtx.setServer(J2eeObjectName.J2EEServer(getDomainName(), getJonasServerName()).toString()); - // Get info about JavaVM in standard J2EEServer MBean - MBeanServer mbeanServer = jmxService.getJmxServer(); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(getDomainName(), getJonasServerName()); - try { - String[] as = (String[]) mbeanServer.getAttribute(j2eeServerOn, "javaVMs"); - jStdCtx.setJavaVMs(as); - } catch (Exception e) { - // String err = - // i18n.getMessage("CatJWebServ.doRegisterWar.startContextError", - // jStdCtx); - // getLogger().log(BasicLevel.WARN, err + e.getMessage()); - getLogger().log(BasicLevel.WARN, "Set MBean JVM error : " + e.getClass().getName() + " " + e.getMessage()); - } - if (earAppName != null) { - jStdCtx.setJ2EEApplication(earAppName); - } else { - jStdCtx.setJ2EEApplication("null"); - } - jStdCtx.setJonasDeploymentDescriptor(webDD.getJOnASXmlContent()); - jStdCtx.setWebDeploymentDescriptor(webDD); - - // Set the realm - org.apache.catalina.Realm ctxRealm = jStdCtx.getRealm(); - - // Take realm of parent - if (ctxRealm == null) { - ctxRealm = deployer.getRealm(); - } - - if (ctxRealm != null && ctxRealm instanceof Realm) { - Realm jaccRealm = null; - try { - jaccRealm = (Realm) ((Realm) ctxRealm).clone(); - } catch (CloneNotSupportedException cnse) { - String err = "Cannot clone the realm used by the existing context or its parent realm"; - getLogger().log(BasicLevel.ERROR, err + cnse.getMessage()); - throw new JWebContainerServiceException(err, cnse); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Setting permission manager to " + permissionManager); - } - jaccRealm.setPermissionManager(permissionManager); - jaccRealm.setSecurityService(securityService); - jaccRealm.setContext(jStdCtx); - // Set the new realm - jStdCtx.setRealm(jaccRealm); - } - - // Set the attributes transfered from the JOnAS War MBean. - // Note that 'java2DelegationModel' and 'inEarCase' attributes - // are passed as arguments to the JOnASStandardContext's constructor - jStdCtx.setWarURL(warURL); - jStdCtx.setFilteringClassLoader(filteringClassLoader); - if (inEarCase) { - jStdCtx.setEarURL(earURL); - jStdCtx.setEjbClassLoader(ejbClassLoader); - jStdCtx.setEarClassLoader(earClassLoader); - } - - // Call the Context Customizers just before startup - for (ContextCustomizer customizer : customizers) { - customizer.customize(jStdCtx, deployable); - } - - // ... and start it or add it - if (jStdCtx.isInServerXml()) { - try { - jStdCtx.setLoader(null); - jStdCtx.start(); - } catch (LifecycleException lce) { - logger.error("Cannot start the context '" + jStdCtx + "'.", lce); - throw new JWebContainerServiceException("Cannot start the context '" + jStdCtx + "'.", lce); - } - } else { - // add it - if (deployer == null) { - logger.error("No deployer found for the deployment of the context '" + jStdCtx + "'."); - throw new JWebContainerServiceException("No deployer found for the deployment of the context '" + jStdCtx - + "'."); - } - - if (isMultitenantEnabled()) { - Object oldTenantCtx = getMultitenantService().getTenantContext(); - try { - if (tenantId != null) { - getMultitenantService().setTenantIdInContext(tenantId); - } - deployer.addChild(jStdCtx); - } finally { - getMultitenantService().setTenantContext(oldTenantCtx); - } - } else { - deployer.addChild(jStdCtx); - } - } - - // Finalize webservices deployment when the context is started - if (this.getJAXWSService() != null) { - // Tell the JAXWS Service that this context deployment is over - getJAXWSService().finalizePOJODeployment(jStdCtx.getServletContext()); - } - - // ...and check if it is now configured - checkStartedContext(jStdCtx, permissionManager); - - // Store the Tomcat web-app ClassLoader - war.setClassLoader(jStdCtx.getLoader().getClassLoader()); - - // Store WebModule ObjectName in Context - try { - ctx.rebind("WebModule", jStdCtx.createObjectName(getDomainName(), jStdCtx.getParentName())); - } catch (Exception e) { - // NamingException or Mbean related Exception - // TODO i18n - String err = "Cannot rebind WebModule ObjectName in Context"; - logger.error(err, e); - throw new JWebContainerServiceException(err, e); - } - ContextFinder.addNonVersionedContext(contextRoot); - - try { - if (isVersioningEnabled() && contextRoot.length() > 0 && userURI.length() > 0) { - if (contextRoot.charAt(0) != '/') { - contextRoot = '/' + contextRoot; - } - if (userURI.charAt(0) != '/') { - userURI = '/' + userURI; - } - - if (!contextRoot.equals(userURI)) { - logger.info("Deploying versioned application " + userURI - + ", path for the added version is " + contextRoot); - String policy = getVersioningService().getDefaultDeploymentPolicy(); - if (earAppName != null) { - ContextFinder.bindContextRoot(earAppName, userURI, jStdCtx, policy); - } else { - ContextFinder.bindContextRoot(URLUtils.urlToFile(warURL).getName(), userURI, jStdCtx, policy); - } - } - } - } catch (Exception e) { - throw new JWebContainerServiceException("Failed binding versioned web context", e); - } - } - } - - /** - * @return a new {@link ContextConfig} for JOnAS. - */ - protected ContextConfig createContextConfig() { - JOnASContextConfig config = new JOnASContextConfig(); - if (this.tomcat6ContextConfPath != null) { - config.setDefaultContextXml(this.tomcat6ContextConfPath); - } - if (this.tomcat6WebConfPath != null) { - config.setDefaultWebXml(this.tomcat6WebConfPath); - } - config.setSecurityService(securityService); - return config; - } - - /** - * Creates a new JOnAS Realm (JACC or JAAS). - * @param name resource name or entry name (depends if a JACC or JAAS realm is required) - * @param isJaccRealm true if a JACC realm is required, false for a JAAS realm. - * @return a configured Realm. - */ - public Realm createJOnASRealm(final String name, final boolean isJaccRealm) { - Realm realm = new Realm(); - realm.setSecurityService(getSecurityService()); - if (isJaccRealm) { - realm.setResourceName(name); - } else { - realm.setJaasEntry(name); - } - return realm; - } - - /** - * Check if there is a previous JOnASStandardContext which match the current - * context If true, deploy our context into the configured context. - * @param contextRoot name of the context that we want to find preconfigured - * contexts - * @param fpackedWar file of the original war file - * @param destDir name of the unpacked directory of the war file - * @return true if a context was found and used - */ - protected List getConfiguredMatchingJonasContexts(final String contextRoot, - final File fpackedWar, - final String destDir) { - List jonasContexts = new ArrayList(); - // Check contexts of all services to see if there is a configured - // context. - // that we must use instead of creating a new one. - // If a context is matching, we set its docbase and start it. - for (Context ctx : getContexts()) { - // Continue if it is not a JOnAS context - if (!(ctx instanceof JOnASStandardContext)) { - continue; - } - JOnASStandardContext jStdCtx = (JOnASStandardContext) ctx; - if (jStdCtx != null) { - // Not created in server.xml file - if (!jStdCtx.isInServerXml()) { - continue; - } - - // The context was configured ? - String serverCtxRoot = jStdCtx.getPath(); - if (!serverCtxRoot.equals(contextRoot)) { - continue; - } - if (jStdCtx.getPrivileged()) { - // Can deploy a privileged context only if it's a .war file - if (fpackedWar.isDirectory()) { - logger.error("Can deploy a privileged context '" + jStdCtx - + "' only if it's a war file (and not a directory)"); - } - jStdCtx.setDocBase(fpackedWar.getPath()); - } else { - jStdCtx.setDocBase(destDir); - } - jonasContexts.add(jStdCtx); - } - } - return jonasContexts; - } - - /** - * Check that the context that was started was right configured. - * @param context context to check - * @param permissionManager the permission manager used for JACC - * @throws JWebContainerServiceException if the context was not right - * configured - */ - protected void checkStartedContext(final Context context, final PermissionManager permissionManager) - throws JWebContainerServiceException { - // Check if the context was configured - if (!context.getConfigured()) { - throw new JWebContainerServiceException("Context '" + context + "' was not configured"); - } - - // Check that JACC realm is correctly set - org.apache.catalina.Realm ctxRealm = context.getRealm(); - if (ctxRealm != null && ctxRealm instanceof Realm) { - Realm jaccRealm = (Realm) ctxRealm; - PermissionManager ctxPerm = jaccRealm.getPermissionManager(); - if (ctxPerm == null && permissionManager != null) { - jaccRealm.setPermissionManager(permissionManager); - // set context on the realm. - jaccRealm.setContext(context); - } - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "context " + context + " started"); - } - - } - - /** - * Gets all the engines of the current Tomcat server. - * @return all the engines of the current Tomcat server - * @throws JWebContainerServiceException if engines can not be retrieved - */ - protected synchronized List getEngines() throws JWebContainerServiceException { - List engines = new ArrayList(); - Service[] services = getServer().findServices(); - - // Get contexts of each engine of each service - for (int s = 0; s < services.length; s++) { - Container cont = services[s].getContainer(); - if (!(cont instanceof StandardEngine)) { - String err = "The container of the service must be an engine (server.xml)"; - throw new JWebContainerServiceException(err); - } - engines.add((StandardEngine) cont); - } - return engines; - } - - /** - * Gets all the contexts of the current Tomcat server. - * @return all the contexts of the current Tomcat server - * @throws JWebContainerServiceException if contexts can not be retrieved - */ - protected synchronized List getContexts() throws JWebContainerServiceException { - List contexts = new ArrayList(); - for (Engine engine : getEngines()) { - Container[] hosts = engine.findChildren(); - - for (int j = 0; j < hosts.length; j++) { - Container[] containers = hosts[j].findChildren(); - for (int k = 0; k < containers.length; k++) { - Container container = containers[k]; - if (container instanceof Context) { - contexts.add((Context) container); - } - } - } - } - return contexts; - } - - /** - * Undeploy a specific WAR file specified in the context. - * @param ctx the context which contains the configuration in order to - * undeploy a WAR. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - protected void doUnRegisterWar(final javax.naming.Context ctx) throws JWebContainerServiceException { - - // Get the 2 parameters : - // - contextRoot is the context root to be removed (required param). - // - hostName is the name of the host to remove the war (optional). - String contextRoot = null; - try { - contextRoot = (String) ctx.lookup("contextRoot"); - } catch (NamingException e) { - throw new JWebContainerServiceException("Unable to find the contextRoot parameter", e); - } - - // Change the root context to "" - if (contextRoot.equals("/")) { - contextRoot = ""; - } else { - contextRoot = "/" + contextRoot; - } - ContextFinder.removeNonVersionedContext(contextRoot); - - String hostName = null; - try { - hostName = (String) ctx.lookup("hostName"); - } catch (NamingException e) { - logger.debug("No hostname was defined for this context"); - } - - // Undeploy all matching context if there is no hostname provided - if (hostName == null) { - boolean found = false; - for (Context context : getContexts()) { - String serverCtxRoot = context.getPath(); - if (serverCtxRoot.equals(contextRoot)) { - removeContext(context); - found = true; - break; - } - } - if (!found) { - throw new JWebContainerServiceException("Unable to remove a context with the context name '" - + contextRoot + "'."); - } - } else { - // Remove the specified Context from the set of defined Contexts - // for its associated Host. - Host host = findHost(hostName); - org.apache.catalina.Context context = host.map(contextRoot); - if (context != null) { - removeContext(context); - } else { - throw new JWebContainerServiceException("Unable to find a context for the given hostname '" + hostName + "'."); - } - } - - try { - if (isVersioningEnabled() && contextRoot.length() > 0) { - if (contextRoot.charAt(0) != '/') { - contextRoot = '/' + contextRoot; - } - if (ContextFinder.unbindContextRoot(contextRoot)) { - logger.info("Undeployed version " + contextRoot); - } - } - } catch (Exception e) { - throw new JWebContainerServiceException("Failed unbinding web context", e); - } - } - - /** - * Remove the specified Context from the set of defined Contexts for its - * associated Host. If this is the last Context for this Host, the Host will - * also be removed. - * @param context The Context to be removed - * @throws JWebContainerServiceException if the context can not be removed - */ - public synchronized void removeContext(final Context context) throws JWebContainerServiceException { - - // Is this Context actually among those that are deployed ? - boolean found = false; - Iterator it = getContexts().iterator(); - while (it.hasNext() && !found) { - if (context == it.next()) { - found = true; - } - } - - if (!found) { - return; - } - // Remove this Context from the associated Host - // Or stop it if it is a JOnAS standard context (to keep the - // configuration) - if (context instanceof JOnASStandardContext) { - JOnASStandardContext jctx = (JOnASStandardContext) context; - if (jctx.isInServerXml()) { - try { - ((JOnASStandardContext) context).stop(); - } catch (LifecycleException le) { - throw new JWebContainerServiceException("Cannot stop context (" + le.getMessage() + ")"); - } - } else { - // must not persist - context.getParent().removeChild(context); - } - } else { - context.getParent().removeChild(context); - // Bug Tomcat 5 doesn't remove MBean WebModule - // Delete the next line when will be fixed - // Bug Tomcat 5 : begin - if (context instanceof StandardContext) { - StandardContext ctx = (StandardContext) context; - try { - // unregister WebModule MBean - jmxService.getJmxServer().unregisterMBean(ctx.getJmxName()); - } catch (Exception e) { - getLogger().log(BasicLevel.ERROR, - "Cannot remove the MBean for the WebModule " + ctx.getObjectName() + " : " + e.getMessage()); - } - } - } - - } - - /** - * The server is started ? - * @return boolean true if the catalina container is running. - */ - public boolean isTomcatStarted() { - return tomcatStarted; - } - - /** - * Set the server instance we are configuring. - * @param server The new server - */ - public void setServer(final Server server) { - this.server = server; - } - - /** - * @return the server instance - */ - public synchronized Server getServer() { - // Needs access to the server object - if (server == null) { - startInternalWebContainer(); - } - return server; - } - - - /** - * Return a File object representing the server.xml configuration file. - * @return a File object representing the server.xml configuration file. - * @throws FileNotFoundException if the configuration file is not found. - */ - protected File getConfigFile() throws FileNotFoundException { - - //get the tomcat 6 server configuration path of the tomcat 6 addon - if (this.tomcat6ServerConfPath != null) { - return new File(this.tomcat6ServerConfPath); - } - - String fileName = System.getProperty("catalina.base"); - fileName = fileName + File.separator + CONFIG_FILE; - File file = new File(fileName); - if (!file.exists()) { - throw new FileNotFoundException("The configuration file '" + fileName + "' does not exists."); - } - return (file); - } - - /** - * Find the specified host. - * @param hostName the name of the host to find. - * @return the host found. - * @throws JWebContainerServiceException if the specified host cannot be - * found. - */ - public Host findHost(final String hostName) throws JWebContainerServiceException { - - Service[] services = getServer().findServices(); - // Check number of services - if (services.length < 1) { - String err = "At least one service must be define in the server.xml of Tomcat"; - throw new JWebContainerServiceException(err); - } - - // Two cases : - // 1/ No host specified - // -> defaulthost of the engine of the first service. - // 2) A host is specified in the jonas-web.xml - // -> find the host and deploy on this host - - if (hostName == null || hostName.equals("")) { - // First case - - // Take first service - Service service = services[0]; - - Container cont = service.getContainer(); - if (!(cont instanceof Engine)) { - String err = "The container of the service must be an engine"; - throw new JWebContainerServiceException(err); - } - - Engine engine = (Engine) cont; - String defaultHost = engine.getDefaultHost(); - if (defaultHost == null) { - String err = "Default host must be specified in server.xml or host must be specified in jonas-web.xml"; - throw new JWebContainerServiceException(err); - } - Container child = engine.findChild(defaultHost); - // found, return it - if (child instanceof Host) { - return (Host) child; - } - // else error - String err = "Default host " + defaultHost + " not found"; - throw new JWebContainerServiceException(err); - } - // Get all hosts. - List hosts = new ArrayList(); - - for (int s = 0; s < services.length; s++) { - Container cont = services[s].getContainer(); - if (!(cont instanceof Engine)) { - String err = "The container of a service must be an engine"; - throw new JWebContainerServiceException(err); - } - Engine engine = (Engine) cont; - Container child = engine.findChild(hostName); - if (child instanceof Host) { - hosts.add((Host) child); - } - } - - // error - if (hosts.size() == 0) { - // No host found. - String err = "Host " + hostName + " not found in all services/Engine of server.xml"; - throw new JWebContainerServiceException(err); - } - - // first element - return hosts.get(0); - } - - /** - * Create and configure the Digester that will be used for the xml parsing - * of the configuration file. - * @return Digester the digester containing the rules for the xml parsing of - * the server.xml. - */ - protected Digester createServerDigester() { - - // Initialize the digester - Digester digester = new Digester(); - digester.setValidating(false); - digester.addRuleSet(new JCatalinaRuleSet(externalLoader, securityService)); - - // Use context class loader. - // Could avoid problem for users putting digester in JONAS_ROOT/lib/ext - // folder - digester.setUseContextClassLoader(true); - return (digester); - - } - - /** - * Update info of the serverName and serverVersion. - */ - @Override - protected void updateServerInfos() { - String infos = org.apache.catalina.util.ServerInfo.getServerInfo(); - StringTokenizer st = new StringTokenizer(infos, "/"); - if (st.countTokens() != 2) { - setServerName(infos); - setServerVersion(""); - } else { - setServerName(st.nextToken()); - setServerVersion(st.nextToken()); - } - } - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when default host cannot be - * resolved (multiple services). - */ - @Override - public String getDefaultHost() throws JWebContainerServiceException { - Engine engine = (Engine) getFirstService().getContainer(); - return engine.getDefaultHost(); - } - - /** - * Return the Default HTTP port number of the web container. Returns the - * first connector port if more than one are defined. - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when default HTTP port cannot be - * resolved or none are defined. - */ - @Override - public String getDefaultHttpPort() throws JWebContainerServiceException { - // if server not yet started, analyze the .xml file - if (!tomcatStarted) { - - File configFile = null; - try { - configFile = getConfigFile(); - } catch (FileNotFoundException e) { - throw new JWebContainerServiceException("Cannot get configuration file", e); - } - - InputStream is = null; - try { - is = new FileInputStream(configFile); - DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); - domFactory.setNamespaceAware(true); - DocumentBuilder builder = null; - try { - builder = domFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new JWebContainerServiceException("Cannot build document builder", e); - } - - Document doc = null; - try { - doc = builder.parse(is); - } catch (SAXException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } catch (IOException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - XPathFactory xPathFactory = XPathFactory.newInstance(); - XPath xPath = xPathFactory.newXPath(); - XPathExpression xPathExpr = null; - try { - xPathExpr = xPath.compile("//Server/Service/Connector[@protocol='HTTP/1.1']"); - } catch (XPathExpressionException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - Node node = null; - try { - node = (Node) xPathExpr.evaluate(doc, XPathConstants.NODE); - } catch (XPathExpressionException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - if (node == null) { - throw new JWebContainerServiceException("No HTTP connector element found in the configuration file. Disable OnDemand feature or add a default HTTP connector."); - } - String text = node.getAttributes().getNamedItem("port").getNodeValue(); - return text; - } catch (FileNotFoundException e) { - throw new JWebContainerServiceException("Cannot get input stream", e); - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException e) { - logger.debug("Cannot close input stream", e); - } - } - } - } - - return String.valueOf(getPort("http")); - } - - /** - * Return the Default HTTPS port number of the web container (can be null if - * multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when default HTTPS port cannot be - * resolved (0 occurences). - */ - @Override - public String getDefaultHttpsPort() throws JWebContainerServiceException { - return String.valueOf(getPort("https")); - } - - /** - * Finds the first connector supporting the given URL scheme - * and return its listening port. - * @param scheme URL schema (http/https) - * @return Port number for a given scheme. - * @throws JWebContainerServiceException if no connectors were found - */ - protected int getPort(final String scheme) throws JWebContainerServiceException { - Service svc = getFirstService(); - List conn = new ArrayList(); - for (Connector c : svc.findConnectors()) { - if (c.getScheme().equalsIgnoreCase(scheme)) { - conn.add(c); - } - } - - if (conn.isEmpty()) { - // No connectors defined - throw new JWebContainerServiceException("No Connectors found for scheme '" + scheme + "' in " + getConfigPath()); - } - - Connector c = conn.get(0); - - // Warn the administrator if there are more than one connectors - // specified for a single scheme. - if (conn.size() > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log( - BasicLevel.WARN, - "Found multiple Connectors for scheme '" + scheme + "' in " + getConfigPath() - + ", using first by default! (port:" + c.getPort() + ")"); - } - } - - return c.getPort(); - } - - /** - * @return Returns the first found Service - */ - protected Service getFirstService() { - Service[] svc = getServer().findServices(); - // throw exception if no service is defined - if ((svc == null) || (svc.length == 0)) { - // No Services specified. - throw new JWebContainerServiceException("No Services found in " + getConfigPath()); - } - // Warn the administrator if there are more than one services - // specified in the configuration file. - if (svc.length > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log(BasicLevel.WARN, "Found multiple Services in " + getConfigPath() + ", using first by default!"); - } - } - return svc[0]; - } - - /** - * Register a WAR by delegating the operation to the registerWar() method. - * This is used for JMX management. - * @param fileName the name of the war to deploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the registration failed. - */ - @Override - public void registerWar(final String fileName) throws RemoteException, JWebContainerServiceException { - ClassLoader old = null; - try { - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(externalLoader); - super.registerWar(fileName); - } catch (Exception e) { - throw new ServiceException("Exception during registering war", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - /** - * Unregister a WAR by delegating the operation to the unRegisterWar() - * method. This is used for JMX management. - * @param fileName the name of the war to undeploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - public void unRegisterWar(final String fileName) throws RemoteException, JWebContainerServiceException { - ClassLoader old = null; - try { - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(externalLoader); - super.unRegisterWar(fileName); - } catch (Exception e) { - throw new ServiceException("Exception during unregistering war", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - /** - * @param securityService Security service to set. - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - } - - /** - * @return Security service. - */ - protected SecurityService getSecurityService() { - return securityService; - } - - /** - * @param transactionService TX service to set. - */ - public void setTransactionService(final TransactionService transactionService) { - this.transactionService = transactionService; - } - - /** - * @return TX service. - */ - protected TransactionService getTransactionService() { - return transactionService; - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Unset the resource checker manager. - */ - public void unsetResourceCheckerManager() { - this.resourceCheckerManager = null; - } - - /** - * Creates an instance of the http service factory. - * @return an instance of the httpservice factory - */ - @Override - protected HttpServiceFactory createHttpServiceFactory() { - return new org.ow2.jonas.web.tomcat6.osgi.httpservice.HttpServiceFactory(this); - } - - /** - * Add a new Context Customizer. - * @param customizer the added Customizer - */ - public void addContextCustomizer(final ContextCustomizer customizer) { - this.customizers.add(customizer); - } - - /** - * Remove the given Customizer. - * @param customizer the removed Customizer - */ - public void removeContextCustomizer(final ContextCustomizer customizer) { - this.customizers.remove(customizer); - } - - /** - * Add the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void addTldResource(final URL tldResource) { - super.addTldResource(tldResource); - } - - /** - * Remove the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void removeTldResource(final URL tldResource) { - super.removeTldResource(tldResource); - } - - /** - * ${@inheritDoc} - */ - @Override - public void unregisterAddonConfig(final IAddonConfig addonConfig) { - super.unregisterAddonConfig(addonConfig); - this.tomcat6ServerConfPath = null; - this.tomcat6ContextConfPath = null; - this.tomcat6WebConfPath = null; - } - - /** - * ${@inheritDoc} - */ - @Override - public void registerAddonConfig(final IAddonConfig addonConfig) { - super.registerAddonConfig(addonConfig); - - //set the path to the tomcat6 server configuration file - File confFile = addonConfig.getConfigurationFile(TOMCAT6_SERVER_CONFIG_FILENAME); - if (confFile != null) { - this.tomcat6ServerConfPath = confFile.getAbsolutePath(); - } - - //set the path to the tomcat6 context configuration file - confFile = addonConfig.getConfigurationFile(TOMCAT6_CONTEXT_CONFIG_FILENAME); - if (confFile != null) { - this.tomcat6ContextConfPath = confFile.getAbsolutePath(); - } - - //set the path to the tomcat6 web configuration file - confFile = addonConfig.getConfigurationFile(TOMCAT6_WEB_CONFIG_FILENAME); - if (confFile != null) { - this.tomcat6WebConfPath = confFile.getAbsolutePath(); - } - - } - - //TODO to remove when JOnAS will be assembled with addons - private String getConfigPath() { - if (this.tomcat6ServerConfPath != null) { - return this.tomcat6ServerConfPath; - } else { - return CONFIG_FILE; - } - - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/custom/ContextCustomizer.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/custom/ContextCustomizer.java deleted file mode 100644 index 07be8bfa44..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/custom/ContextCustomizer.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.custom; - -import org.apache.catalina.core.StandardContext; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - -/** - * A {@code ContextCustomizer} is used to customize a Tomcat Context before its startup. - * @author Guillaume Sauthier - * - */ -public interface ContextCustomizer { - - /** - * Customize the given Catalina Context instance using the given WAR deployable. - * This is called just before the Context start-up. - * @param context Catalina Context to be customized - * @param deployable the WAR being deployed - */ - void customize(final StandardContext context, final WARDeployable deployable); -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/handler/DirContextURLStreamHandlerService.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/handler/DirContextURLStreamHandlerService.java deleted file mode 100644 index 6d0e27b811..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/handler/DirContextURLStreamHandlerService.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.handler; - -import java.net.URL; -import java.net.URLConnection; -import java.net.InetAddress; -import java.io.IOException; - -import org.apache.naming.resources.DirContextURLStreamHandler; -import org.osgi.service.url.URLStreamHandlerService; -import org.osgi.service.url.URLStreamHandlerSetter; - -/** - * The DirContextURLStreamHandlerService is a wrapper around the Tomcat's - * DirContextURLStreamHandler that is responsible of loading URL of the - * scheme 'jndi' (jndi://...). - * - * This class is exposed as a URLStreamHandlerService (OSGi URL service interface). - * - * @author Guillaume Sauthier - */ -public class DirContextURLStreamHandlerService extends DirContextURLStreamHandler - implements URLStreamHandlerService { - - /** - * The URLStreamHandlerSetter object passed to the parseURL - * method. - */ - protected volatile URLStreamHandlerSetter realHandler; - - public URLConnection openConnection(final URL url) throws IOException { - return super.openConnection(url); - } - - public void parseURL(final URLStreamHandlerSetter realHandler, - final URL url, - final String spec, - final int start, - final int limit) { - this.realHandler = realHandler; - parseURL(url, spec, start, limit); - } - - public String toExternalForm(final URL url) { - return super.toExternalForm(url); - } - - public boolean equals(final URL url, final URL url1) { - return super.equals(url, url1); - } - - public int getDefaultPort() { - return super.getDefaultPort(); - } - - public InetAddress getHostAddress(final URL url) { - return super.getHostAddress(url); - } - - public int hashCode(final URL url) { - return super.hashCode(url); - } - - public boolean hostsEqual(final URL url, final URL url1) { - return super.hostsEqual(url, url1); - } - - public boolean sameFile(final URL url, final URL url1) { - return super.sameFile(url, url1); - } - - - /** - * This method calls - * realHandler.setURL(URL,String,String,int,String,String). - * - * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String)" - * @deprecated This method is only for compatibility with handlers written - * for JDK 1.1. - */ - protected void setURL(final URL u, - final String proto, - final String host, - final int port, - final String file, final String ref) { - realHandler.setURL(u, proto, host, port, file, ref); - } - - /** - * This method calls - * realHandler.setURL(URL,String,String,int,String,String,String,String). - * - * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String,String,String)" - */ - protected void setURL(final URL u, - final String proto, - final String host, - final int port, - final String auth, - final String user, - final String path, - final String query, - final String ref) { - realHandler.setURL(u, proto, host, port, auth, user, path, query, ref); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/loader/NoSystemAccessWebappClassLoader.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/loader/NoSystemAccessWebappClassLoader.java deleted file mode 100644 index 425d5cf67b..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/loader/NoSystemAccessWebappClassLoader.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.loader; - -import java.io.InputStream; -import java.net.URL; - -import org.apache.catalina.loader.WebappClassLoader; - -/** - * This {@code WebappClassLoader} disable the system ClassLoader direct access - * from web applications. It make them fit better in the "standard" module classloader - * chain: a module with just 1 parent. - * - * The system ClassLoader will still be accessed, but not in the first - * place: so that OSGi provided JAX-WS API have a chance to make it before - * the system ones AND applications relying on resources available from - * system loader will continue to find their resources. - */ -public class NoSystemAccessWebappClassLoader extends WebappClassLoader { - - /** - * The unique instance of disabled ClassLoader. - */ - private static final ClassLoader DISABLED_LOADER = new DisabledClassLoader(); - - /** - * Construct a new ClassLoader with no defined repositories and no - * parent ClassLoader. - */ - public NoSystemAccessWebappClassLoader(ClassLoader parent) { - super(parent); - // Overwrite the system ClassLoader in use. - system = DISABLED_LOADER; - - // avoid bug JONAS-245 by making Tomcat not destroy the root logger - setClearReferencesLogFactoryRelease(false); - } - - /** - * This disabled loader returns null on all methods used from - * the tomcat WebappClassLoader (getResourceAsStream() use getResource() - * under the hood, so no need to override it). - */ - private static class DisabledClassLoader extends ClassLoader { - /** - * Loads the class with the specified binary name. - * This method searches for classes in the same manner as the {@link - * #loadClass(String, boolean)} method. It is invoked by the Java virtual - * machine to resolve class references. Invoking this method is equivalent - * to invoking {@link #loadClass(String, boolean) loadClass(name, - * false)}.

    - * - * @param name The binary name of the class - * @return The resulting Class object - * @throws ClassNotFoundException If the class was not found - */ - @Override - public Class loadClass(String name) throws ClassNotFoundException { - return null; - } - - /** - * Finds the resource with the given name. A resource is some data - * (images, audio, text, etc) that can be accessed by class code in a way - * that is independent of the location of the code. - *

    - *

    The name of a resource is a '/'-separated path name that - * identifies the resource. - *

    - *

    This method will first search the parent class loader for the - * resource; if the parent is null the path of the class loader - * built-in to the virtual machine is searched. That failing, this method - * will invoke {@link #findResource(String)} to find the resource.

    - * - * @param name The resource name - * @return A URL object for reading the resource, or - * null if the resource could not be found or the invoker - * doesn't have adequate privileges to get the resource. - * @since 1.1 - */ - @Override - public URL getResource(String name) { - return null; - } - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiInstanceTldCacheListener.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiInstanceTldCacheListener.java deleted file mode 100644 index e3cf3e1de5..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiInstanceTldCacheListener.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLConnection; -import java.util.Hashtable; -import java.util.List; - -import org.apache.catalina.InstanceEvent; -import org.apache.catalina.InstanceListener; -import org.apache.jasper.EmbeddedServletOptions; -import org.apache.jasper.compiler.TldLocationsCache; -import org.apache.jasper.servlet.JspServlet; - -/** - * Instance listener of the JSP Servlet in order to add the taglibs found into the cache. - * @author Florent Benoit - */ -public class OSGiInstanceTldCacheListener implements InstanceListener { - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public OSGiInstanceTldCacheListener(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - } - - /** - * Lifecycle event for the instance. - * @param event the event of the instance. - */ - @SuppressWarnings("unchecked") - @Override - public void instanceEvent(final InstanceEvent event) { - // Only react when the instance when just alive (but not already inited) - if (InstanceEvent.AFTER_INIT_EVENT.equals(event.getType())) { - - // The servlet is a JspServlet - try { - JspServlet jspServlet = (JspServlet) event.getServlet(); - Field optionsField = JspServlet.class.getDeclaredField("options"); - optionsField.setAccessible(true); - EmbeddedServletOptions options = (EmbeddedServletOptions) optionsField.get(jspServlet); - TldLocationsCache tldLocationCache = options.getTldLocationsCache(); - - // get the method - Method getUriFromTldMethod = TldLocationsCache.class.getDeclaredMethod("getUriFromTld", String.class, - InputStream.class); - // it is private - getUriFromTldMethod.setAccessible(true); - - // mapping field - Field mappingsField = TldLocationsCache.class.getDeclaredField("mappings"); - mappingsField.setAccessible(true); - - // Add each taglib into the cache - if (resourcesToMonitor != null) { - for (URL url : resourcesToMonitor) { - InputStream stream = null; - try { - URLConnection urlConnection = url.openConnection(); - urlConnection.setDefaultUseCaches(false); - - stream = urlConnection.getInputStream(); - String uri = (String) getUriFromTldMethod.invoke(tldLocationCache, url.toString(), stream); - Hashtable mappings = (Hashtable) mappingsField - .get(tldLocationCache); - if (uri != null && mappings.get(uri) == null) { - mappings.put(uri, new String[] {url.toString(), url.getPath().substring(1)}); - } - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } finally { - try { - stream.close(); - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } - } - } - } - - } catch (SecurityException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (IllegalArgumentException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } - } - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiTldListener.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiTldListener.java deleted file mode 100644 index 2fce208879..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/OSGiTldListener.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.web.tomcat6.osgi; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.Wrapper; -import org.apache.catalina.startup.TldConfig; -import org.apache.jasper.servlet.JspServlet; -import org.xml.sax.InputSource; - -/** - * This TLD listener will manage TLD resources that are exposed through OSGi. - * For example jsf service may expose some TLDs and this listener will register them into Tomcat. - * @author Florent Benoit - */ -public class OSGiTldListener implements LifecycleListener { - - /** - * Instance that will be used to managed the OSGi TLDs resources. - */ - private TldConfig tldConfig; - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Tld Scan Stream method. - */ - private Method tldScanStreamMethod = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public OSGiTldListener(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - this.tldConfig = new TldConfig(); - - try { - this.tldScanStreamMethod = tldConfig.getClass().getDeclaredMethod("tldScanStream", InputSource.class); - // private method - this.tldScanStreamMethod.setAccessible(true); - } catch (SecurityException e) { - throw new IllegalStateException("Unable to find the given method", e); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Unable to find the given method", e); - } - - } - - /** - * Notify the tld scanner depending on the events. - * @param event the lifecycle event - */ - public void lifecycleEvent(final LifecycleEvent event) { - Context context = null; - // Identify the context we are associated with - try { - context = (Context) event.getLifecycle(); - } catch (ClassCastException e) { - return; - } - - if (event.getType().equals(Lifecycle.INIT_EVENT)) { - // Init our internal tldconfig object - tldConfig.lifecycleEvent(event); - } else if (event.getType().equals(Lifecycle.START_EVENT)) { - // needs to analyze the OSGi TLD resources - if (resourcesToMonitor != null) { - for (URL url : resourcesToMonitor) { - try { - URLConnection urlConnection = url.openConnection(); - urlConnection.setDefaultUseCaches(false); - - tldScanStreamMethod.invoke(tldConfig, new InputSource(urlConnection.getInputStream())); - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } - } - } - - - String[] listeners = tldConfig.getTldListeners(); - if (listeners != null) { - for (String listener : listeners) { - context.addApplicationListener(listener); - } - } - - addTldIntoCache(context); - - } else if (event.getType().equals(Lifecycle.STOP_EVENT)) { - // Strop our internal tldconfig object - tldConfig.lifecycleEvent(event); - } - } - - /** - * Adds a listener on the JSP servlet in order to add TagLib into the taglib cache. - * @param context the given standard context. - */ - protected void addTldIntoCache(final Context context) { - - // find all the declared servlets/wrappers - Container[] childs = context.findChildren(); - // Childrens are all Wrappers - if (childs != null) { - for (Container child : childs) { - Wrapper wrapper = (Wrapper) child; - String servletClass = wrapper.getServletClass(); - if (JspServlet.class.getName().equals(servletClass)) { - wrapper.addInstanceListener(new OSGiInstanceTldCacheListener(resourcesToMonitor)); - } - } - } - } - - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceFactory.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceFactory.java deleted file mode 100644 index ef03c494b5..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi.httpservice; - -import org.osgi.framework.Bundle; -import org.ow2.jonas.web.base.osgi.httpservice.JOnASHttpService; -import org.ow2.jonas.web.tomcat6.Tomcat6Service; - -/** - * Service factory for Tomcat6 service. - * @author Florent Benoit - */ -public class HttpServiceFactory extends org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory { - - /** - * Constructor. - * @param tomcat6Service the web container service to use. - */ - public HttpServiceFactory(final Tomcat6Service tomcat6Service) { - super(tomcat6Service); - } - - /** - * Build an implementation of the Http service. - * @param callerBundle The bundle using the service. - * @param tomcat6Service the web container service instance - * @return an implementation of the httpService - */ - @Override - protected JOnASHttpService buildHttpServiceImpl(final Bundle callerBundle, final Tomcat6Service tomcat6Service) { - return new HttpServiceImpl(callerBundle, tomcat6Service, getWorkDirectory()); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceImpl.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceImpl.java deleted file mode 100644 index afc1fe5395..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/HttpServiceImpl.java +++ /dev/null @@ -1,510 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi.httpservice; - -import java.io.File; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.startup.ContextConfig; -import org.osgi.framework.Bundle; -import org.osgi.framework.Constants; -import org.osgi.service.http.HttpContext; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.osgi.httpservice.DefaultHttpContextImpl; -import org.ow2.jonas.web.base.osgi.httpservice.JOnASHttpService; -import org.ow2.jonas.web.base.osgi.httpservice.OSGIResourcesServlet; -import org.ow2.jonas.web.tomcat6.JOnASContextConfig; -import org.ow2.jonas.web.tomcat6.Tomcat6Service; -import org.ow2.jonas.web.tomcat6.versioning.ContextFinder; - - - - -/** - * Implementation of {@link HttpService} that uses {@link Tomcat6Service} - * catalina web container to publish servlets. The Http Service allows other - * bundles in the OSGi environment to dynamically register resources and - * servlets into the URI namespace of Http Service. A bundle may later - * unregister its resources or servlets. - * @author Guillaume Porcher - */ -public class HttpServiceImpl implements JOnASHttpService { - - /** - * The bundle using the service. - */ - private final Bundle callerBundle; - - /** - * The {@link Tomcat6Service} used by this service. - */ - private final Tomcat6Service tomcatService; - - /** - * The name of the working directory. - */ - private final String workDir; - - /** - * List of the registered wrappers. - */ - private List wrapperList = null; - - /** - * Default constructor. - * @param bundle The bundle using the service. - * @param tomcat6Service The {@link Tomcat6Service} to use. - * @param workDir The name of the working directory. - */ - public HttpServiceImpl(final Bundle bundle, final Tomcat6Service tomcat6Service, final String workDir) { - this.callerBundle = bundle; - this.tomcatService = tomcat6Service; - this.workDir = workDir; - this.wrapperList = new LinkedList(); - } - - /** - * Creates a default HttpContext for registering servlets or - * resources with the HttpService, a new HttpContext object is - * created each time this method is called.

    The behavior of the methods - * on the default HttpContext is defined as follows:

      - *
    • getMimeType- Does not define any customized MIME types - * for the Content-Type header in the response, and always returns - * null.
    • handleSecurity- Performs no - * authentication on the request. This method always returns - * true.
    • getResource- Assumes the named - * resource is in the context bundle; this method calls the context bundle's - * Bundle.getResource method, and returns the appropriate URL - * to access the resource. On a Java runtime environment that supports - * permissions, the Http Service needs to be granted - * org.osgi.framework.AdminPermission[*,RESOURCE].
    - * @return a default HttpContext object, which is an instance - * of {@link DefaultHttpContextImpl}. - */ - public HttpContext createDefaultHttpContext() { - return new DefaultHttpContextImpl(this.callerBundle); - } - - /** - * Registers resources into the URI namespace.

    The alias is the name in - * the URI namespace of the Http Service at which the registration will be - * mapped. An alias must begin with slash ('/') and must not end with slash - * ('/'), with the exception that an alias of the form "/" is used - * to denote the root alias. The name parameter must also not end with slash - * ('/'). See the specification text for details on how HTTP requests are - * mapped to servlet and resource registrations.

    For example, suppose - * the resource name /tmp is registered to the alias /files. A request for - * /files/foo.txt will map to the resource name /tmp/foo.txt.

    -     * httpservice.registerResources("/files", "/tmp",
    -     * context); 
    The Http Service will call the HttpContext - * argument to map resource names to URLs and MIME types and to handle - * security for requests. If the HttpContext argument is - * null, a default HttpContext is used (see - * {@link #createDefaultHttpContext}). - * @param alias name in the URI namespace at which the resources are - * registered - * @param name the base name of the resources that will be registered - * @param httpContext the HttpContext object for the registered - * resources, or null if a default - * HttpContext is to be created and used. - * @throws NamespaceException if the registration fails because the alias is - * already in use. - * @throws java.lang.IllegalArgumentException if any of the parameters are - * invalid - */ - public void registerResources(final String alias, final String name, final HttpContext httpContext) - throws NamespaceException, IllegalArgumentException { - HttpContext context = null; - // if context is null, use default context - if (httpContext == null) { - context = this.createDefaultHttpContext(); - } else { - context = httpContext; - } - - final Servlet servlet = new OSGIResourcesServlet(context, name); - try { - this.registerServlet(alias, servlet, null, context); - } catch (final ServletException e) { - // TODO: handle exception - e.printStackTrace(); - } - } - - /** - * Registers a servlet into the URI namespace.

    The alias is the name in - * the URI namespace of the Http Service at which the registration will be - * mapped.

    An alias must begin with slash ('/') and must not end with - * slash ('/'), with the exception that an alias of the form "/" - * is used to denote the root alias. See the specification text for details - * on how HTTP requests are mapped to servlet and resource registrations. - *

    The Http Service will call the servlet's init method - * before returning.

    -     * httpService.registerServlet("/myservlet", servlet, initparams,
    -     * context); 

    Servlets registered with the same - * HttpContext object will share the same - * ServletContext. The Http Service will call the - * context argument to support the ServletContext - * methods getResource,getResourceAsStream and - * getMimeType, and to handle security for requests. If the - * context argument is null, a default - * HttpContext object is used (see - * {@link #createDefaultHttpContext}). - * @param alias name in the URI namespace at which the servlet is registered - * @param servlet the servlet object to register - * @param initParams initialization arguments for the servlet or - * null if there are none. This argument is used by the - * servlet's ServletConfig object. - * @param context the HttpContext object for the registered - * servlet, or null if a default - * HttpContext is to be created and used. - * @throws NamespaceException if the registration fails because the alias is - * already in use. - * @throws javax.servlet.ServletException if the servlet's init - * method throws an exception, or the given servlet object has - * already been registered at a different alias. - * @throws java.lang.IllegalArgumentException if any of the arguments are - * invalid - */ - public void registerServlet(final String alias, final Servlet servlet, final Dictionary initParams, - HttpContext context) throws ServletException, NamespaceException, IllegalArgumentException { - // check alias - if (!this.checkAlias(alias)) { - throw new IllegalArgumentException(alias + " is not a valid alias."); - } - - // check if servlet is already registered - synchronized (wrapperList) { - for (OSGIWrapper osgiWrapper : wrapperList) { - if (osgiWrapper.getServlet() == servlet) { - throw new ServletException("servlet already registered"); - } - } - } - - - String versionID = null; - String userURI = null; - - // Parse context in order to find the context root of the given context - String parsedContext [] = parseContext(alias); - String contextRoot = parsedContext[0]; - String servletPath = parsedContext[1]; - - if (this.tomcatService.isVersioningEnabled()) { - versionID = this.getVersionId(); - if (!contextRoot.contains(versionID)) { - userURI = contextRoot; - contextRoot += versionID; - } else { - userURI = contextRoot.replace(versionID, ""); - } - } - - - // register fake webapp context in host - final Host host = this.tomcatService.findHost(""); - - Container hostContainer = host.findChild(contextRoot); - OSGIContext osgiContext = null; - - // if context is null, use default context - if (context == null) { - context = this.createDefaultHttpContext(); - } - - // No host found - if (hostContainer == null) { - // create fake webapp for registering the servlet - osgiContext = new OSGIContext(context); - osgiContext.setPath(contextRoot); - osgiContext.setName(contextRoot); - osgiContext.setTomcatService(tomcatService); - - // JSR 77 - osgiContext.setJ2EEServer(tomcatService.getJonasServerName()); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(tomcatService.getDomainName(), tomcatService.getJonasServerName()); - osgiContext.setServer(j2eeServerOn.toString()); - // Get info about JavaVM in standard J2EEServer MBean - MBeanServer mbeanServer = tomcatService.getJmxService().getJmxServer(); - try { - String[] as = (String[]) mbeanServer.getAttribute(j2eeServerOn, "javaVMs"); - osgiContext.setJavaVMs(as); - } catch (Exception e) { - //getLogger().log(BasicLevel.WARN, "Set MBean JVM error : " + e.getClass().getName() + " " + e.getMessage()); - } - - osgiContext.setDocBase(new File(this.workDir).getAbsolutePath()); - - final ContextConfig config = new JOnASContextConfig(); - ((Lifecycle) osgiContext).addLifecycleListener(config); - - host.addChild(osgiContext); - - try { - if (this.tomcatService.isVersioningEnabled() && userURI != null) { - final String policy = this.tomcatService.getVersioningService().getDefaultDeploymentPolicy(); - ContextFinder.bindContextRoot(this.callerBundle.getSymbolicName(), userURI, osgiContext, policy); - } - - ContextFinder.addNonVersionedContext(contextRoot); - } catch (final Exception e) { - throw new JWebContainerServiceException("Failed binding versioned web context", e); - } - } else if (hostContainer instanceof OSGIContext) { - osgiContext = (OSGIContext) hostContainer; - } else { - throw new NamespaceException(contextRoot + " already registered."); - } - - // Check servlet path is unique - if (osgiContext.findChild(servletPath) != null) { - throw new NamespaceException(servletPath + " already registered in the context " + contextRoot + "."); - } - - // create wrapper for the servlet - final OSGIWrapper osgiWrapper = new OSGIWrapper(servlet, context); - osgiWrapper.setName(servletPath); - osgiWrapper.setParentClassLoader(servlet.getClass().getClassLoader()); - if (initParams != null) { - final Enumeration elements = initParams.keys(); - while (elements.hasMoreElements()) { - final String name = (String) elements.nextElement(); - osgiWrapper.addInitParameter(name, (String) initParams.get(name)); - } - } - - // Add to the servlet list - synchronized (wrapperList) { - wrapperList.add(osgiWrapper); - - // register servlet in fake webapp - osgiContext.addChild(osgiWrapper); - - // initialize the servlet in the wrapper context - // Init after addChild so getServletContext is here (JIRA JONAS-259) - servlet.init(osgiWrapper); - - // redirect all request to the servlet - osgiContext.addServletMapping(servletPath + "/*", osgiWrapper.getName(), true); - } - } - - /** - * Unregisters a previous registration done by registerServlet - * or registerResources methods.

    After this call, the - * registered alias in the URI name-space will no longer be available. If - * the registration was for a servlet, the Http Service must call the - * destroy method of the servlet before returning.

    If the - * bundle which performed the registration is stopped or otherwise "unget"s - * the Http Service without calling {@link #unregister} then Http Service - * must automatically unregister the registration. However, if the - * registration was for a servlet, the destroy method of the - * servlet will not be called in this case since the bundle may be stopped. - * {@link #unregister} must be explicitly called to cause the - * destroy method of the servlet to be called. This can be done - * in the BundleActivator.stop method of the bundle registering - * the servlet. - * @param alias name in the URI name-space of the registration to unregister - * @throws java.lang.IllegalArgumentException if there is no registration - * for the alias or the calling bundle was not the bundle which - * registered the alias. - */ - public void unregister(final String alias) throws IllegalArgumentException { - // check alias - if (!this.checkAlias(alias)) { - throw new IllegalArgumentException(alias + " is not a valid alias."); - } - - - String versionID = null; - if (this.tomcatService.isVersioningEnabled()) { - versionID = this.getVersionId(); - } - // Extract context - String parsedContext[] = parseContext(alias); - String contextRoot = parsedContext[0]; - String servletPath = parsedContext[1]; - - if (versionID != null) { - if (!contextRoot.contains(versionID)) { - contextRoot += versionID; - } - } - - // get context associated with alias - final Host host = this.tomcatService.findHost(""); - final Context ctx = this.findContext(host, contextRoot); - if (ctx == null) { - throw new IllegalArgumentException(contextRoot + " is not registered."); - } - // check if is an osgi context - if (ctx instanceof OSGIContext) { - OSGIContext osgiContext = (OSGIContext) ctx; - - final OSGIWrapper osgiWrapper = (OSGIWrapper) osgiContext.findChild(servletPath); - if (osgiWrapper == null) { - throw new IllegalArgumentException(servletPath + " is not registered in " + contextRoot + "."); - } - removeWrapper(osgiWrapper, true); - } else { - throw new IllegalArgumentException(contextRoot + " is not registered by this bundle " + this.callerBundle - + "."); - } - } - - /** - * Remove a wrapper from its context. - * @param osgiWrapper the wrapper to remove. - * @param removeFromList true if needs to be removed from the global list - */ - private void removeWrapper(final OSGIWrapper osgiWrapper, final boolean removeFromList) { - OSGIContext osgiContext = (OSGIContext) osgiWrapper.getParent(); - - synchronized (wrapperList) { - // Remove from the servlet list - if (removeFromList) { - wrapperList.remove(osgiWrapper); - } - - // Remove redirection - osgiContext.removeServletMapping(osgiWrapper.getName() + "/*"); - - osgiContext.removeChild(osgiWrapper); - } - - if (osgiContext.getChildren().length == 0) { - Host host = (Host) osgiContext.getParent(); - - host.removeChild(osgiContext); - if (this.tomcatService.isVersioningEnabled()) { - ContextFinder.unbindContextRoot(osgiContext.getPath()); - } - - ContextFinder.removeNonVersionedContext(osgiContext.getPath()); - } - } - - /** - * Unregister all servlets registered by the bundle while using the service. - */ - public void stop() { - synchronized (wrapperList) { - Iterator itWrapper = wrapperList.iterator(); - while (itWrapper.hasNext()) { - OSGIWrapper osgiWrapper = itWrapper.next(); - // Avoid concurrent modification exception - itWrapper.remove(); - // Do not remove it from the list in the submethod in order to avoid concurrent access - removeWrapper(osgiWrapper, false); - } - } - } - - /** - * Look in catalina Host for the Context associated with the given alias. - * @param host The catalina host. - * @param alias The alias. - * @return The {@link Context} matching the given alias in catalina host. - */ - private Context findContext(final Host host, final String alias) { - for (final Container container : host.findChildren()) { - if (container instanceof Context) { - if (alias.equals(((Context) container).getPath())) { - return (Context) container; - } - } - } - return null; - } - - /** - * Split the context and the servlet path form the alias. - * @param alias the alias to parse. - * @return An array containing the context and the servlet path. - */ - private String[] parseContext(final String alias) { - int contextIndex = alias.indexOf('/', 1); - if (contextIndex >= 0) { - return new String[] {alias.substring(0, contextIndex), alias.substring(contextIndex)}; - } else { - return new String[] {alias, ""}; - } - } - - /** - * Check if alias if a valid osgi HttpService alias. An alias must begin - * with slash ('/') and must not end with slash ('/'), with the exception - * that an alias of the form "/" is used to denote the root alias. - * @param alias The alias to check. - * @return true if alias is valid, - * false otherwise. - */ - private boolean checkAlias(final String alias) { - if (alias == null) { - return false; - } - if (alias.equals("/")) { - return true; - } - if (alias.startsWith("/") && !alias.endsWith("/")) { - return true; - } - return false; - } - - /** - * Returns version of the context when versioning is enabled. - * @return version of the context when versioning is enabled. - */ - private String getVersionId() { - final String SNAPSHOT_WITH_DOT = ".SNAPSHOT"; - final String SNAPSHOT_WITH_HYPHEN = "-SNAPSHOT"; - - String bundleVersion = (String) this.callerBundle.getHeaders().get(Constants.BUNDLE_VERSION); - if (bundleVersion.endsWith(SNAPSHOT_WITH_DOT)) { - bundleVersion = bundleVersion.substring(0, bundleVersion.length() - SNAPSHOT_WITH_DOT.length()) - + SNAPSHOT_WITH_HYPHEN; - } - - return "-" + bundleVersion; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIContext.java deleted file mode 100644 index 0209a2e506..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIContext.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi.httpservice; - -import javax.servlet.ServletContext; - -import org.apache.catalina.core.StandardWrapper; -import org.osgi.framework.Bundle; -import org.osgi.service.http.HttpContext; - - -import org.ow2.jonas.web.tomcat6.JOnASStandardContext; -import org.ow2.jonas.web.tomcat6.osgi.httpservice.OSGIWrapper; - - - -/** - * {@link Context} implementation for holding OSGI servlet wrappers. Only the - * {@link #getServletContext()} method is overridden. - * @author Guillaume Porcher - */ -public class OSGIContext extends JOnASStandardContext { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -8093637123939061548L; - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param context The HttpContext used during servlet or resource - * registration. - * @param callerBundle The bundle that uses the HttpService. - */ - public OSGIContext(final HttpContext context) { - this.httpContext = context; - } - - /** - * Return the servlet context for which this Context is a facade. The - * returned context is an instance of {@link OSGIServletContext}. - * @return the servlet context for which this Context is a facade. - */ - @Override - public ServletContext getServletContext() { - // Initialize if not yet done - if (context == null) { - this.context = new OSGIServletContext(this, this.httpContext); - } - return context; - } - - /** - * @return The httpContext used during servlet or resource registration. - */ - public HttpContext getHttpContext() { - return this.httpContext; - } - - /** - * Add a new servlet mapping, replacing any existing mapping for the - * specified pattern. In OSGIContext the OSGiWrapper added are forced to - * update their mapping. - * @param pattern URL pattern to be mapped - * @param name Name of the corresponding servlet to execute - * @param jspWildCard true if name identifies the JspServlet and pattern - * contains a wildcard; false otherwise - * @exception IllegalArgumentException if the specified servlet name is not - * known to this Context - */ - @Override - public void addServletMapping(final String pattern, final String name, final boolean jspWildCard) throws IllegalArgumentException { - super.addServletMapping(pattern, name, jspWildCard); - StandardWrapper wrapper = (StandardWrapper) findChild(name); - // It is possible that the found servlet is not an OSGi registered Servlet - // For example when parsing the tomcat6-web.xml, normal Servlets are registered ('default', 'jsp', ...) - if (wrapper instanceof OSGIWrapper) { - ((OSGIWrapper) wrapper).updateMapping(); - } - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIServletContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIServletContext.java deleted file mode 100644 index cfdb89d12f..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIServletContext.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi.httpservice; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.catalina.core.ApplicationContext; -import org.osgi.service.http.HttpContext; - -/** - * {@link javax.servlet.ServletContext} implementation for servlets or resources registered by - * {@link HttpServiceImpl}. - * @author Guillaume Porcher - */ -public class OSGIServletContext extends ApplicationContext { - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param context the {@link OSGIContext} holding the servlet. - * @param httpContext the http context used during servlet registration. - */ - public OSGIServletContext(final OSGIContext context, final HttpContext httpContext) { - super(null, context); - this.httpContext = httpContext; - } - - /** - * Returns the MIME type of the specified file, or null if the MIME type is - * not known. The MIME type is determined by calling - * {@link HttpContext#getMimeType(String)}. If this method returns - * null, the {@link ApplicationContext#getMimeType(String)} - * method is called. - * @param file a String specifying the name of a file - * @return a String specifying the file's MIME type - */ - @Override - public String getMimeType(final String file) { - final String mime = this.httpContext.getMimeType(file); - if (mime != null) { - return mime; - } else { - return super.getMimeType(file); - } - } - - /** - * Returns a URL to the resource that is mapped to a specified path. The - * path must begin with a "/" and is interpreted as relative to the current - * context root. This method uses {@link HttpContext#getResource(String)} to - * find the resource. - * @param path a String specifying the path to the resource - * @return the resource located at the named path, or null if there is no - * resource at that path - * @throws MalformedURLException if the pathname is not given in the correct - * form - */ - @Override - public URL getResource(final String path) throws MalformedURLException { - return this.httpContext.getResource(path); - } - - /** - * Returns the resource located at the named path as an InputStream object. - * The data in the InputStream can be of any type or length. This method - * gets the resource URL by calling {@link #getResource(String)}. - * @param path a String specifying the path to the resource - * @return the InputStream returned to the servlet, or null if no resource - * exists at the specified path - */ - @Override - public InputStream getResourceAsStream(final String path) { - URL url = null; - try { - url = this.getResource(path); - } catch (final MalformedURLException e) { - return null; - } - if (url != null) { - try { - return url.openStream(); - } catch (final IOException e) { - return null; - } - } - return null; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIWrapper.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIWrapper.java deleted file mode 100644 index a8a7c15557..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/osgi/httpservice/OSGIWrapper.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.osgi.httpservice; - -import java.io.IOException; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.catalina.Contained; -import org.apache.catalina.Valve; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.core.StandardWrapper; -import org.apache.catalina.valves.ValveBase; - -import org.osgi.service.http.HttpContext; - -/** - * {@link org.apache.catalina.Wrapper} implementation for holding servlets deployed with - * {@link HttpServiceImpl}. This implementation sets a specific {@link Valve} to - * handle OSGI security mechanism. - * @author Guillaume Porcher - */ -public class OSGIWrapper extends StandardWrapper { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -749580021429740673L; - - /** - * {@link Valve} implementation that checks before processing the invoke - * method. - * @author Guillaume Porcher - */ - class OSGIWrapperValve extends ValveBase { - - /** - * Default constructor. - * @param delegate the proxied valve. - */ - public OSGIWrapperValve(final Valve delegate) { - this.setNext(delegate); - } - - /** - * Perform request processing. The security is checked by using - * {@link HttpContext#handleSecurity(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)} - * . If the request can be served, invoke the proxied valve to handle - * the request normally. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @throws IOException if an input/output error occurs, or is thrown by - * the proxied Valve - * @throws ServletException if a servlet error is thrown by the proxied - * Valve - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - if (OSGIWrapper.this.httpContext.handleSecurity(request.getRequest(), response.getResponse())) { - Valve next = this.getNext(); - if (next != null) { - if (next instanceof Contained) { - ((Contained) next).setContainer(this.getContainer()); - } - this.getNext().invoke(request, response); - } - } - } - } - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param servlet the {@link Servlet} wrapped in this {@link Wrapper}. - * @param context The HttpContext used during servlet or resource - * registration. - */ - public OSGIWrapper(final Servlet servlet, final HttpContext context) { - super(); - this.instance = servlet; - this.httpContext = context; - this.pipeline.setBasic(new OSGIWrapperValve(this.swValve)); - } - - - /** - * Update the mapping of the wrapper. When the context is already started - * and a mapping is added, this mapping is not handled by the wrapper. This - * function registers this wrapper to JMX - */ - public void updateMapping() { - registerJMX((OSGIContext) getParent()); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/security/Realm.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/security/Realm.java deleted file mode 100644 index a1e8d6c7dd..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/security/Realm.java +++ /dev/null @@ -1,862 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.security; - -import java.io.IOException; -import java.security.Principal; -import java.security.acl.Group; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.security.auth.Subject; -import javax.security.auth.login.AccountExpiredException; -import javax.security.auth.login.CredentialExpiredException; -import javax.security.auth.login.FailedLoginException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.catalina.Context; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.deploy.LoginConfig; -import org.apache.catalina.deploy.SecurityConstraint; -import org.apache.catalina.realm.Constants; -import org.apache.catalina.realm.GenericPrincipal; -import org.apache.catalina.realm.RealmBase; -import org.apache.catalina.util.StringManager; -import org.ow2.jonas.deployment.web.ServletDesc; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.security.auth.JSigned; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.web.tomcat6.JOnASStandardContext; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - *

    - * Implementation of a Realm. (by a wrapper)
    - * Use any JOnAS realm by specifying the resource name This implementation - * manages the security with JACC specification It implements Cloneable to allow - * clones. Each context must have its own Realm. A realm can not be shared - * across different contexts or an engine. This is because each realm is - * associated to a permission manager Extends the Realmbase class of the Tomcat - * Server.
    - * This Realm can use also the LoginModule for the authentication - * @author Florent Benoit - */ -public class Realm extends RealmBase implements Cloneable { - - /** - * Descriptive information about this Realm implementation. - */ - private static final String NAME = Realm.class.getSimpleName(); - - /** - * Descriptive information about this Realm implementation. - */ - private static final String INFO = Realm.class.getName() + "/1.0"; - - /** - * Name used in the JAAS config file. - */ - private static final String DEFAULT_JAAS_ENTRY_NAME = "tomcat"; - - /** - * The string manager for this package. - */ - private static StringManager sm = StringManager.getManager(Constants.Package); - - /** - * The logger used in JOnAS. - */ - private static Log logger = LogFactory.getLog(Realm.class); - - /** - * The resource we will use to authenticate users and identify associated - * roles. - */ - private JResource jResource = null; - - /** - * The name of the resource. - */ - private String resourceName = null; - - /** - * The entry name of the JAAS resource. - */ - private String jaasEntry = DEFAULT_JAAS_ENTRY_NAME; - - /** - * Reference to the JOnAS security service. - */ - private SecurityService securityService = null; - - /** - * Permission manager used by this realm for JACC permissions. - */ - private PermissionManager permissionManager = null; - - /** - * Last request that has been send to hasUserDataPermission or - * hasResourcePermission methods Used in hasRole to know the current servlet - * name. This request is store in a local thread. - */ - private ThreadLocal lastRequestThread = new ThreadLocal(); - - /** - * Context (used to retrieve web.xml informations). - */ - private Context context = null; - - /** - * Name of this Realm for traces. - */ - private String realmName = NAME; - - /** - * Return descriptive information about this Realm implementation and the - * corresponding version number, in the format. - * <description>/<version>. - * @return the info. - */ - @Override - public String getInfo() { - return INFO; - } - - /** - * Return the resource name we will be using. - * @return the resource name. - */ - public String getResourceName() { - return resourceName; - } - - /** - * Set the resource name we will be using. - * @param resourceName The new resource name - */ - public void setResourceName(final String resourceName) { - this.resourceName = resourceName; - - } - - /** - * Return the JAAS entry name we will be using. - * @return the JAAS entry name. - */ - public String getJaasEntry() { - return jaasEntry; - } - - /** - * Set the JAAS entry we will be using. - * @param jaasEntry the JAAS entry name - */ - public void setJaasEntry(final String jaasEntry) { - this.jaasEntry = jaasEntry; - } - - /** - * Set the permission manager used by this realm. - * @param permissionManager the permission manager to use - */ - public void setPermissionManager(final PermissionManager permissionManager) { - this.permissionManager = permissionManager; - - } - - /** - * Return the SecurityConstraints configured to guard the request URI for - * this request, or null if there is no such constraint. - * @param request Request we are processing - * @param context Context the Request is mapped to - * @return security constraints configured to guard the request URI - */ - @Override - public SecurityConstraint[] findSecurityConstraints(final Request request, final Context context) { - // Use super Method - return super.findSecurityConstraints(request, context); - } - - /** - * Perform access control based on the specified authorization constraint. - * @return true if this constraint is satisfied and - * processing should continue, or false otherwise. - * @param request Request we are processing - * @param response Response we are creating - * @param constraints Security constraint we are enforcing - * @param context The Context to which client of this class is attached. - * @exception IOException if an input/output error occurs - */ - @Override - public boolean hasResourcePermission(final Request request, final Response response, final SecurityConstraint[] constraints, - final Context context) throws IOException { - - // Update request - lastRequestThread.set(request); - - // --- Use code of RealmBase for the Login / Error pages - - // Specifically allow access to the form login and form error pages - // and the "j_security_check" action - LoginConfig config = context.getLoginConfig(); - if (config != null && Constants.FORM_METHOD.equals(config.getAuthMethod())) { - String requestURI = request.getDecodedRequestURI(); - String loginPage = context.getPath() + config.getLoginPage(); - if (loginPage.equals(requestURI)) { - logger.debug("{0}: Allow access to login page {1}", realmName, loginPage); - return true; - } - - String errorPage = context.getPath() + config.getErrorPage(); - if (errorPage.equals(requestURI)) { - logger.debug("{0}: Allow access to error page {1}", realmName, errorPage); - return true; - } - if (requestURI.endsWith(Constants.FORM_ACTION)) { - logger.debug("{0}: Allow access to username/password submission", realmName); - return true; - } - } - - // Which user principal have we already authenticated? - Principal principal = request.getUserPrincipal(); - - // --- End of code from RealmBase class - - String[] roles = null; - String principalName = null; - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - if (permissionManager == null) { - logger.error("{0}: No permission manager is set. Realm used without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - boolean hasResourcePermission = permissionManager.checkWebResourcePermission(request, principalName, roles); - - // Need to send HTTP status code as invoke() method of Authenticator - // expect that it is - // done by the realm. - if (!hasResourcePermission) { - // Return a "Forbidden" message denying access to this resource - response.sendError(HttpServletResponse.SC_FORBIDDEN, sm.getString("realmBase.forbidden")); - } - - return hasResourcePermission; - } - - /** - * @return true if the specified Principal has the specified - * security role, within the context of this Realm; otherwise return - * false. This method can be overridden by Realm - * implementations, but the default is adequate when an instance of - * GenericPrincipal is used to represent - * authenticated Principals from this Realm. - * @param principal Principal for whom the role is to be checked - * @param role Security role to be checked - */ - @Override - public boolean hasRole(final Principal principal, final String role) { - - if ((principal == null) || (role == null) || !(principal instanceof GenericPrincipal)) { - return false; - } - - if (logger.isDebugEnabled()) { - logger.debug("{0}: Principal = {1}", realmName, principal); - logger.debug("{0}: Role = {1}", realmName, role); - } - - if (context == null) { - logger.error("{0}: Cannot find a servlet name for isUserInRole() as no context was found", realmName); - return false; - } - - Request req = lastRequestThread.get(); - - if (req == null) { - logger.error("{0}: Cannot find a servlet name for isUserInRole(). No previous request !", realmName); - return false; - } - String servletName = findServletName(req); - String[] roles = null; - String principalName = null; - - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - if (permissionManager == null) { - logger.error( - "{0}: No permission manager is set. Using this realm without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - boolean hasRole = permissionManager.checkWebRoleRefPermission(req, servletName, principalName, roles, role); - return hasRole; - } - - /** - * @return the name of the servlet (or "" if it's a JSP for example) This - * servlet name is used to build JACC permission for the hasRole - * method - * @param request the servlet request with which we have to find servlet - * name - */ - private String findServletName(final Request request) { - - // Servlet name cannot be found - if (request == null || request.getRequestURI() == null || request.getContextPath() == null) { - return null; - } - - // Pattern of the user (remove path) - String userPattern = request.getRequestURI().substring(request.getContextPath().length()); - - if (logger.isDebugEnabled()) { - logger.debug("{0}: User Pattern = {1}", realmName, userPattern); - } - - String servletName = ""; - String[] patterns = context.findServletMappings(); - boolean foundServlet = false; - String pattern = ""; - int i = 0; - - // Try to search servlet name - while ((i < patterns.length) && !foundServlet) { - pattern = patterns[i]; - if (logger.isDebugEnabled()) { - logger.debug("{0}: Pattern found = {1}", realmName, pattern); - logger.debug("{0}: Servlet name for pattern = {1}", realmName, context.findServletMapping(pattern)); - } - - // Extension pattern and ends with extension - if (pattern.startsWith("*.") && userPattern.endsWith(pattern.substring(1))) { - foundServlet = true; - continue; - } - - // Exact Servlet name (ie pattern = /ServletName and userPattern = - // /ServletName) - if (pattern.equals(userPattern)) { - foundServlet = true; - continue; - } - - i++; - } - - if (foundServlet) { - servletName = context.findServletMapping(pattern); - // JSP case. servlet name must be empty as required by JACC - // specification - if (servletName.equals("jsp")) { - servletName = ""; - } - if (logger.isDebugEnabled()) { - logger.debug("{0}: Found servlet name = {1}", realmName, servletName); - } - } - return servletName; - } - - /** - * Enforce any user data constraint required by the security constraint - * guarding this request URI. - * @return true if this constraint was not violated and - * processing should continue, or false if we have - * created a response already. - * @param request Request we are processing - * @param response Response we are creating - * @param constraints Security constraints being checked - * @exception IOException if an input/output error occurs - */ - @Override - public boolean hasUserDataPermission(final Request request, final Response response, final SecurityConstraint[] constraints) - throws IOException { - - // Update request - lastRequestThread.set(request); - - // ---- Start of copy from RealmBase class --- - - // Validate the request against the user data constraint - if (request.getRequest().isSecure()) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: User data constraint already satisfied", realmName); - } - return true; - } - - // Which user principal have we already authenticated? - Principal principal = ((HttpServletRequest) request).getUserPrincipal(); - - // ---- End of copy from RealmBase class --- - - String[] roles = null; - String principalName = null; - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - // ---- Start of copy from RealmBase class --- - for (int i = 0; i < constraints.length; i++) { - SecurityConstraint constraint = constraints[i]; - // Use redirect only if it the transport protocol is integral or - // confidential - String userConstraint = constraint.getUserConstraint(); - - // Redirect only if the constraint is INTEGRAL or CONFIDENTIAL ! - if (userConstraint != null - && (userConstraint.equals(Constants.INTEGRAL_TRANSPORT) || userConstraint - .equals(Constants.CONFIDENTIAL_TRANSPORT))) { - // Initialize variables we need to determine the appropriate - // action - int redirectPort = request.getConnector().getRedirectPort(); - - // Is redirecting disabled? - if (redirectPort <= 0) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: SSL redirect is disabled", realmName); - } - response.sendError(HttpServletResponse.SC_FORBIDDEN, request.getRequestURI()); - return false; - } - - // Redirect to the corresponding SSL port - StringBuffer file = new StringBuffer(); - String protocol = "https"; - String host = request.getServerName(); - // Protocol - file.append(protocol).append("://"); - // Host with port - file.append(host).append(":").append(redirectPort); - // URI - file.append(request.getRequestURI()); - String requestedSessionId = request.getRequestedSessionId(); - if ((requestedSessionId != null) && request.isRequestedSessionIdFromURL()) { - file.append(";jsessionid="); - file.append(requestedSessionId); - } - String queryString = request.getQueryString(); - if (queryString != null) { - file.append('?'); - file.append(queryString); - } - - if (logger.isDebugEnabled()) { - logger.debug("{0}: Redirecting to {1}", realmName, file); - } - response.sendRedirect(file.toString()); - - return false; - } - } - - // ---- End of copy from RealmBase --- - if (permissionManager == null) { - logger.error("{0}: No permission manager is set. Realm used without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - // If Transport protocol is NONE : - boolean hasUserDataPermission = permissionManager.checkWebUserDataPermission(request, principalName, roles); - return hasUserDataPermission; - - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - @Override - public Principal authenticate(final String username, final String credentials) { - // Use JOnAS resource if present - if (jResource != null) { - return authenticateResource(username, credentials); - } else { - // else use JAAS mechanism - return authenticateJAAS(username, credentials); - } - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - public Principal authenticateResource(final String username, final String credentials) { - - // No authentication can be made with a null username - if (username == null) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: No username so no authentication", realmName); - } - return null; - } - - // Does a user with this username exist? - JUser user = null; - try { - user = jResource.findUser(username); - } catch (Exception jre) { - // could not retrieve user - logger.error("{0}: Cannot find the user {1}", realmName, username, jre); - return null; - } - - // User was not found - if (user == null) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: User {1} not found.", realmName, username); - } - return null; - } - - boolean validated = jResource.isValidUser(user, credentials); - if (!validated) { - logger.error("{0}: The password for the user {1} is not valid", realmName, username); - return null; - } - - ArrayList combinedRoles = null; - try { - combinedRoles = jResource.getArrayListCombinedRoles(user); - } catch (JResourceException jre) { - logger.error("{0}: Cannot get the roles from the user {1}", realmName, username, jre); - return null; - } - - GenericPrincipal principal = new GenericPrincipal(this, user.getName(), user.getPassword(), combinedRoles); - SecurityContext ctx = new SecurityContext(principal.getName(), combinedRoles); - - // Get the servlet name - Request request = lastRequestThread.get(); - String servletName = findServletName(request); - - if (servletName != null) { - - // Use the web deployment descriptor to get the role name of the runas element of the servlet - WebContainerDeploymentDesc webDD = ((JOnASStandardContext) context).getWebDeploymentDescriptor(); - - Collection servletDescList = webDD.getServletDescList(); - for (Iterator iterator = servletDescList.iterator(); iterator.hasNext();) { - ServletDesc servletDesc = (ServletDesc) iterator.next(); - - // Servlet declaration found - if (servletDesc.getServletName().equals(servletName)) { - if (servletDesc.getServletRunAS() != null) { - String role = servletDesc.getServletRunAS().getRoleName(); - String principalName = webDD.getServletPrincipalName(servletName); - - if (principalName == null) { - principalName = role; - } - - ctx.pushRunAs(role, principalName, new String[] {role}); - } - - // Exit the loop - break; - } - } - } - - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - return principal; - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - public Principal authenticateJAAS(final String username, final String credentials) { - - // No authentication can be made with a null username - if (username == null) { - logger.error("{0}: No username so no authentication", realmName); - return null; - } - // Establish a LoginContext to use for authentication - LoginContext loginContext = null; - try { - loginContext = new LoginContext(jaasEntry, new NoInputCallbackHandler(username, credentials)); - } catch (LoginException e) { - logger.error("{0}: LoginException for user {1}", realmName, username, e); - return null; - } - // Negotiate a login via this LoginContext - Subject subject = null; - try { - loginContext.login(); - subject = loginContext.getSubject(); - if (subject == null) { - logger.error("{0}: No subject for the user {1}", realmName, username); - return null; - } - } catch (AccountExpiredException e) { - logger.error("{0}: Account expired for the user {1}", realmName, username, e); - return null; - } catch (CredentialExpiredException e) { - logger.error("{0}: Credential expired for the user {1}", realmName, username, e); - return null; - } catch (FailedLoginException e) { - logger.error("{0}: Failed Login for the user {1}", realmName, username, e); - return null; - } catch (LoginException e) { - logger.error("{0}: Login exception for the user {1}", realmName, username, e); - return null; - } - - // Get credentials iterators from the subject - Iterator credentialsIterator = subject.getPrivateCredentials().iterator(); - String credential = (String) credentialsIterator.next(); - - // Retrieve first principal name found (without groups) - Iterator iterator = subject.getPrincipals(Principal.class).iterator(); - String userName = null; - while (iterator.hasNext() && (userName == null)) { - Principal principal = iterator.next(); - if (!(principal instanceof Group)) { - userName = principal.getName(); - } - } - - // No name --> error - if (userName == null) { - logger.error("{0}: No Username found in the subject", realmName); - return null; - } - - // Signed object (if any) - JSigned jSigned = null; - - // Retrieve all roles of the user (Roles are members of the Group.class) - Set groups = subject.getPrincipals(Group.class); - List roles = new ArrayList(); - for (Group group : groups) { - - // Signed group (empty group that contains a signature)? - if (group instanceof JSigned) { - jSigned = (JSigned) group; - continue; - } - - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = e.nextElement(); - roles.add(p.getName()); - } - } - - GenericPrincipal principal = new GenericPrincipal(this, userName, credential, roles); - // instanciation of the security context - SecurityContext ctx = new SecurityContext(userName, roles); - // Signed ? - if (jSigned != null) { - ctx.setSignature(jSigned.getSignature()); - } - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - return principal; - } - - /** - * Return the Principal associated with the specified chain of X509 client - * certificates. If there is none, return null. - * @param cert Array of client certificates, with the first one in the array - * being the certificate of the client itself. - * @return the associated Principal - */ - @Override - public Principal authenticate(final X509Certificate[] cert) { - String dn = cert[0].getSubjectDN().getName(); - return authenticate(dn, "tomcat"); - } - - /** - * Return a short name for this Realm implementation. - * @return the name - */ - @Override - protected String getName() { - return NAME; - } - - /** - * Return the password associated with the given principal's user name. - * @param username the given principal's user name. - * @return the password associated. - */ - @Override - protected String getPassword(final String username) { - return null; - } - - /** - * Return the Principal associated with the given user name. - * @param username the given principal's user name. - * @return the Principal associated - */ - @Override - protected Principal getPrincipal(final String username) { - return null; - } - - /** - * Set the context of this Realm. This is used to retrieve xml information - * of the web.xml file - * @param context Context for this realm - */ - public void setContext(final Context context) { - this.context = context; - StringBuffer sb = new StringBuffer(); - sb.append("["); - sb.append(NAME); - sb.append(":"); - sb.append(resourceName); - sb.append(":"); - if (context != null) { - sb.append(context.getName()); - } - sb.append("] "); - this.realmName = sb.toString(); - } - - /** - * Assign the {@link SecurityService} instance to be used for authentication. - * @param securityService {@link SecurityService} to use. - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - } - - /** - * Prepare for active use of the public methods of this Component. - * @exception LifecycleException if this component detects a fatal error - * that prevents it from being started - */ - @Override - public synchronized void start() throws LifecycleException { - - // Get the resource from the security service if working with resource - // mode - if (resourceName != null) { - if (securityService == null) { - throw new LifecycleException("Security service not set, cannot start"); - } - jResource = securityService.getJResource(resourceName); - if (jResource == null) { - throw new LifecycleException("Can't retrieve resource '" + resourceName + "' from the security service"); - } - - // This is a configuration error to set bot resourceName (for JACC) and jaasEntry (for JAAS) - if (!DEFAULT_JAAS_ENTRY_NAME.equals(jaasEntry)) { - throw new LifecycleException("Invalid Realm configuration: cannot use both resourceName and jaasEntry attributes."); - } - } - - // Perform normal superclass initialization - super.start(); - - } - - /** - * Gracefully shut down active use of the public methods of this Component. - * @exception LifecycleException if this component detects a fatal error - * that needs to be reported - */ - @Override - public synchronized void stop() throws LifecycleException { - // Perform normal superclass finalization - super.stop(); - - // Release reference to our resource - jResource = null; - } - - /** - * Creates and returns a copy of this object. - * @return copy of this object. - * @throws CloneNotSupportedException if the copy fails - */ - @Override - public Object clone() throws CloneNotSupportedException { - Realm jRealm = new Realm(); - jRealm.setResourceName(resourceName); - jRealm.setJaasEntry(jaasEntry); - jRealm.setSecurityService(securityService); - return jRealm; - } - - /** - * @return the permission manager used by this realm. - */ - public PermissionManager getPermissionManager() { - return permissionManager; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/tx/TransactionValve.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/tx/TransactionValve.java deleted file mode 100644 index c14cd5eb81..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/tx/TransactionValve.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.tx; - -import static javax.transaction.Status.STATUS_COMMITTED; -import static javax.transaction.Status.STATUS_MARKED_ROLLBACK; - -import org.apache.catalina.Session; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.realm.GenericPrincipal; -import org.apache.catalina.valves.ValveBase; -import org.ow2.util.log.LogFactory; -import org.ow2.util.log.Log; - -import javax.servlet.ServletException; -import javax.transaction.TransactionManager; -import javax.transaction.Transaction; -import javax.transaction.SystemException; -import javax.ejb.EJBException; -import java.io.IOException; - -/** - * This valve is used when TX service is enabled. It ensures that the transaction is aborted at the end of the execution of the method if it was started in the method. - * @author Florent Benoit - */ -public class TransactionValve extends ValveBase { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(TransactionValve.class); - - /** - * Link to the transaction manager. - */ - private TransactionManager transactionmanager = null; - - - - /** - * Default constructor. - * - */ - public TransactionValve(TransactionManager transactionManager) { - this.transactionmanager = transactionManager; - } - - /** - * Ensure that there is no pending transaction at the end of the method - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - public void invoke(final Request request, final Response response) throws IOException, ServletException { - - // There is a transaction ? - Transaction existingTransaction = null; - try { - existingTransaction = transactionmanager.getTransaction(); - } catch (SystemException e) { - throw new IllegalStateException("Unable to check if there is a transaction", e); - } - - // Call next valve - try { - getNext().invoke(request, response); - } finally { - // If there wasn't transaction before the call - if (existingTransaction == null) { - // check if a transaction has been started in the method ? - Transaction txAfterMethod = null; - try { - txAfterMethod = transactionmanager.getTransaction(); - } catch (SystemException e) { - throw new IllegalStateException("Unable to check if there is a transaction", e); - } - - // 4.2.2 chapter of Java EE 5 - // Transactions may not span web requests from a client. A web component starts a - // transaction in the service method of a servlet (or, for a JSP page, the service - // method of the equivalent JSP page Implementation Class) and it must be completed - // before the service method returns. Returning from the service method with an - // active transaction context is an error. The web container is required to detect this - // error and abort the transaction. - - if (txAfterMethod != null) { - int transactionStatus = 0; - try { - transactionStatus = txAfterMethod.getStatus(); - // There is a transaction and it was not committed - if (transactionStatus != STATUS_COMMITTED) { - String errMsg = "Transaction started in the servlet '" + request.getServletPath() - + "' but not committed. Rolling back..."; - // Log error - logger.error(errMsg); - // Rollback - txAfterMethod.rollback(); - } - } catch (SystemException e) { - throw new IllegalStateException("Cannot rollback transaction", e); - } - } - } - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/AbsVirtualContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/AbsVirtualContext.java deleted file mode 100644 index ecb1c42380..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/AbsVirtualContext.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Copyright (C) 2008 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import java.net.MalformedURLException; -import java.net.URL; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.directory.DirContext; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Virtual Context implementation that only handles operations with the default - * context. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public abstract class AbsVirtualContext implements VirtualContextMBean { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(AbsVirtualContext.class); - - /** - * Default context. - */ - protected Context defaultContext = null; - - /** - * The user (virtual) URI of this context. - */ - protected String userURI; - - /** - * Management bean name for this context. - */ - private String mBeanName; - - /** - * The JMX server. - */ - private JmxService jmxService = null; - - /** - * Creates and registers a virtual context. - * @param jmxService JMX server. - * @param userURI User (virtual) URI of this context. - * @param contextInstance The first context instance, will be mapped as - * default context. - */ - public AbsVirtualContext(final JmxService jmxService, final String userURI, final Context contextInstance) { - this.userURI = userURI; - addContext(contextInstance, VersioningServiceBase.DEFAULT); - Host host = (Host) contextInstance.getParent(); - // J2EEApplication=none since this virtual JNDI binding manager - // is shared between multiple J2EE applications - mBeanName = jmxService.getDomainName() + ":j2eeType=WebModule,name=//" + host.getName() + userURI - + ",J2EEApplication=none,J2EEServer=" + jmxService.getJonasServerName() + ",virtualContext=true"; - logger.debug("New VirtualContext: registering MBean with name : " + mBeanName); - jmxService.registerMBean(this, mBeanName); - this.jmxService = jmxService; - } - - /** - * Internal call for adding non-default context instances. - * @param contextInstance Context instance (versioned path). - * @param policy Policy (extensible). - * @throws IllegalArgumentException If policy not recognized. - */ - protected abstract void addContextInternal(Context contextInstance, String policy) throws IllegalArgumentException; - - /** - * Finds the context object corresponding to a path. This implementation - * only checks against the default context. - * @param versionedPath Path to check against. - * @return Context object corresponding to versionedPath, null if none. - */ - protected Context findContextObject(final String versionedPath) { - if (defaultContext != null) { - if (versionedPath.equals(defaultContext.getPath())) { - return defaultContext; - } - } - return null; - } - - /** - * Adds a context instance to this virtual context using a policy. This - * implementation will check against the default context and if nothing - * found call - * @link{AbsVirtualContext#addContextInternal(Context,String) . - * @param contextInstance Context instance to add. - * @param policy Context policy. - * @throws IllegalArgumentException Policy is invalid. - */ - public void addContext(final Context contextInstance, final String policy) throws IllegalArgumentException { - // Check that context's path is not in any list - if (findContextObject(contextInstance.getPath()) != null) { - throw new IllegalArgumentException("Context " + contextInstance + " already bound!"); - } - - // Context is not in any lists, add it - if (VersioningServiceBase.DEFAULT.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind default context " + contextInstance.getPath() + " for userURI " + userURI); - } - if (null != this.defaultContext) { - if (logger.isDebugEnabled()) { - logger.debug("Setting default context " + defaultContext.getPath() + " as disabled"); - } - addContextInternal(defaultContext, VersioningServiceBase.DISABLED); - } - this.defaultContext = contextInstance; - } else { - addContextInternal(contextInstance, policy); - } - } - - /** - * Completely removes this virtual context. Will automatically unregister - * management beans and unbind the context. - * @return {@link ContextFinder#unbindVirtualContext(String)}. - */ - public boolean removeVirtualContext() { - try { - jmxService.unregisterMBean(ObjectName.getInstance(mBeanName)); - } catch (MalformedObjectNameException e) { - logger.error("Error unbinding VirtualContext for URI " + userURI + ", MBean name " + mBeanName, e); - return false; - } - return ContextFinder.unbindVirtualContext(userURI); - } - - /** - * Removes a context. This implementation will only check against the - * default context. - * @param versionedPath Versioned path of the context. - * @return true if succeeded, false otherwise. - */ - public boolean removeContext(final String versionedPath) { - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - defaultContext = null; - return true; - } else { - return false; - } - } - - /** - * Checks whether a given context has been registered. - * @param versionedPath Versioned path of the context. - * @return true if found, false otherwise. - */ - public boolean hasContext(final String versionedPath) { - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - return true; - } else { - return false; - } - } - - /** - * Dummy definition to keep Tomcat happy. - * @return null. - */ - public Context findMappingObject() { - return defaultContext; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return null. - */ - public DirContext findStaticResources() { - return null; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return new String[0]. - */ - public String[] getwelcomeFiles() { - return new String[0]; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return Unique URL for this context. - */ - public URL getwarURL() { - try { - return new URL("file:///dev/null/VirtualWebContainer-" + userURI); - } catch (MalformedURLException e) { - throw new IllegalStateException("Cannot create URL", e); - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/ContextFinder.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/ContextFinder.java deleted file mode 100644 index a5299d477a..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/ContextFinder.java +++ /dev/null @@ -1,326 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; - -import org.apache.catalina.Context; -import org.apache.catalina.connector.Request; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Manages virtual contexts. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public final class ContextFinder { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(ContextFinder.class); - - /** - * Virtual contexts corresponding to URIs. - */ - private static List nonVersionedContexts = new ArrayList(); - - /** - * Virtual contexts corresponding to URIs. - */ - private static Map contextURIMapping = new HashMap(); - - /** - * Reference to a MBean server. - */ - private static JmxService jmxService = null; - - /** - * Web container. - */ - private static BaseWebContainerService webContainer = null; - - /** - * @param jmxService JMX service to set. - */ - public static void setJmxService(final JmxService jmxService) { - ContextFinder.jmxService = jmxService; - } - - /** - * This is a static class. - */ - private ContextFinder() { - // Nothing - } - - /** - * @param webContainer JOnAS web container to set. - */ - public static void setParent(final BaseWebContainerService webContainer) { - ContextFinder.webContainer = webContainer; - } - - /** - * @return JOnAS web container. - */ - public static BaseWebContainerService getParent() { - return ContextFinder.webContainer; - } - - /** - * Gets the context URI for a given request using the Context URI mapping. - * @param decodedURIString Decoded URI. - * @param req Request received by the HTTP server. - * @param vpb Bean to use for saving information about resolving paths. - * @return Versioned URI. - */ - public static String getContextURI(final String decodedURIString, final Request req, final VersionedPathBean vpb) { - logger.debug("Starting getContextURI with decodedURI {0} and request {1}", decodedURIString, req); - - if (webContainer.isVersioningEnabled()) { - VirtualContext vctx = null; - for (Map.Entry entry : contextURIMapping.entrySet()) { - final String key = entry.getKey(); - final String keyWithEndingSlash; - if (key.length() > 1) { - // The virtual context / has an ending slash, others don't - keyWithEndingSlash = key + '/'; - } else { - keyWithEndingSlash = key; - } - if (decodedURIString.equals(keyWithEndingSlash)) { - vctx = entry.getValue(); - break; - } else if (decodedURIString.startsWith(key)) { - if (vctx == null) { - vctx = entry.getValue(); - } else if (entry.getValue().userURI.length() > vctx.userURI.length()) { - vctx = entry.getValue(); - } - } - } - - if (vctx != null) { - final String userURIWithEndingSlash; - if (vctx.userURI.length() > 1) { - // The virtual context / has an ending slash, others don't - userURIWithEndingSlash = vctx.userURI + '/'; - } else { - userURIWithEndingSlash = vctx.userURI; - } - - if (!decodedURIString.startsWith(userURIWithEndingSlash)) { - logger.debug("Final slash missing for decodedURI {0} and request {1}", decodedURIString, req); - return decodedURIString; - } - - for (String context : nonVersionedContexts) { - if (decodedURIString.startsWith(context) && context.length() > userURIWithEndingSlash.length()) { - logger.debug("Found non-versioned context {0} for decodedURI {1} and request {2}", context, - decodedURIString, req); - return decodedURIString; - } - } - - String versionedPath = vctx.findContext(req); - StringBuffer versionedURI = new StringBuffer(); - if (versionedPath == null) { - logger.debug("No version found on virtual context {0} for request {1}", vctx.userURI, req); - - versionedURI.append(vctx.userURI); - versionedURI.append("-invalid-version/"); - } else { - logger.debug("Found versioned context {0} on virtual context {1} for request {2}", versionedPath, - vctx.userURI, req); - - vpb.setUserPath(vctx.userURI); - vpb.setVersionedPath(versionedPath); - versionedURI.append(versionedPath); - versionedURI.append('/'); - - if (decodedURIString.length() > userURIWithEndingSlash.length()) { - versionedURI.append(decodedURIString.substring(userURIWithEndingSlash.length())); - } - } - logger.debug("Setting versionedURI to {0} for decodedURI {1} and request {2}", versionedURI, decodedURIString, - req); - - return versionedURI.toString(); - } - } - - logger.debug("No virtual context for decodedURI {0} and request {1}", decodedURIString, req); - return decodedURIString; - } - - /** - * Adds a non-versioned context root. - * @param context Context root. - */ - public static void addNonVersionedContext(String context) { - if (!context.startsWith("/")) { - context += "/" + context; - } - nonVersionedContexts.add(context); - } - - /** - * Binds a new context root. If the userURI is an existing versioned path, - * adds the context to the map using the given policy. Else, creates a new - * versioned context with this root as default. - * @param appName Name of the application the context belongs to. - * @param userURI User URI. - * @param contextRoot Versioned context root. - * @param policy Policy to use, ignored if new virtual context. - * @return true if versioning enabled, false otherwise. - */ - public static boolean bindContextRoot(final String appName, final String userURI, final Context contextRoot, - final String policy) { - if (webContainer.isVersioningEnabled()) { - if (!contextURIMapping.containsKey(userURI)) { - VirtualContext newContext = new VirtualContext(jmxService, userURI, contextRoot); - contextURIMapping.put(userURI, newContext); - } else { - contextURIMapping.get(userURI).addContext(contextRoot, policy); - } - return true; - } else { - return false; - } - } - - /** - * @param userContextRoot User (virtual) context root to list. - * @return Context root information for a given virtual (user) URI. - */ - public static Map readContextRoot(final String userContextRoot) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userContextRoot); - if (context == null) { - return null; - } else { - return context.getContexts(); - } - } else { - return null; - } - } - - /** - * Remove a non-versioned context root. - * @param context Context root. - */ - public static void removeNonVersionedContext(String context) { - if (!context.startsWith("/")) { - context += "/" + context; - } - nonVersionedContexts.remove(context); - } - - /** - * Unbinds a context root. - * @param userURI User (virtual) URI to unbind from. - * @param contextRoot Context root to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String userURI, final Context contextRoot) { - return unbindContextRoot(userURI, contextRoot.getPath()); - } - - /** - * Unbinds a versioned path. - * @param userURI User (virtual) URI to unbind from. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String userURI, final String versionedPath) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userURI); - if (context == null) { - return false; - } else { - return context.removeContext(versionedPath); - } - } else { - return false; - } - } - - /** - * Unbinds a versioned path. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final Context contextRoot) { - return unbindContextRoot(contextRoot.getPath()); - } - - /** - * Unbinds a versioned path. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String contextRoot) { - if (webContainer.isVersioningEnabled()) { - for (Map.Entry entry : contextURIMapping.entrySet()) { - if (entry.getValue().hasContext(contextRoot)) { - return unbindContextRoot(entry.getKey(), contextRoot); - } - } - } - - return false; - } - - /** - * Unbinds a user (virtual) URI. - * @param userURI User (virtual) URI to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindVirtualContext(final String userURI) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userURI); - if (context == null) { - return false; - } else { - contextURIMapping.remove(userURI); - return context.removeVirtualContext(); - } - } else { - return false; - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/FilteredOutputStream.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/FilteredOutputStream.java deleted file mode 100644 index e15baf068d..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/FilteredOutputStream.java +++ /dev/null @@ -1,230 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -import org.apache.catalina.connector.OutputBuffer; -import org.apache.catalina.connector.Response; -import org.ow2.jonas.versioning.VersioningService; - -/** - * Output stream with content filtering. - * - * @author tokmen-sa - */ -public class FilteredOutputStream extends OutputBuffer { - - /** - * List of endocings we support for byte array conversion.
    - *
    - * IMPORTANT NOTE: adding multi-byte encodings here (for example, - * UTF-8) is not supported yet. - */ - private static List SUPPORTED_BYTE_ARRAY_ENCODINGS = Arrays.asList(new String[] { - "US-ASCII", - "ISO-8859-1" - }); - - private Response response; - - private int remainingChars = 0; - - public FilteredOutputStream(Response response) { - super(); - this.response = response; - } - - public FilteredOutputStream(Response response, int size) { - super(size); - this.response = response; - } - - @Override - public void writeByte(int b) throws IOException { - String encoding = response.getCharacterEncoding(); - - if (encoding == null || !FilteredOutputStream.SUPPORTED_BYTE_ARRAY_ENCODINGS.contains(encoding)) { - super.writeByte(b); - } else { - super.checkConverter(); - this.doWrite(new String(new byte[]{(byte) b}, 0, 1, encoding), 0, 1); - } - } - - @Override - public void write(byte buf[], int off, int cnt) throws IOException { - String encoding = response.getCharacterEncoding(); - - if (encoding == null || !FilteredOutputStream.SUPPORTED_BYTE_ARRAY_ENCODINGS.contains(encoding)) { - super.write(buf, off, cnt); - } else { - super.checkConverter(); - this.doWrite(new String(buf, off, cnt, encoding), 0, cnt); - } - } - - @Override - public void write(String s, int off, int cnt) throws IOException { - if (s == null) { - super.write(s, off, cnt); - } else { - this.doWrite(s, off, cnt); - } - } - - @Override - public void write(char buf[], int off, int cnt) throws IOException { - if (buf == null) { - super.write(buf, off, cnt); - } else { - this.doWrite(new String(buf, off, cnt), 0, cnt); - } - } - - /** - * Replaces all versioned paths with the user path in the response output - * stream. - */ - protected void doWrite(String s, int off, int cnt) throws IOException { - VersionedPathBean vpb = this.findVersionedPathBean(response.getContentType()); - - // Now rewriting, for example: - // - // - // into - // - if (vpb != null) { - if (this.remainingChars != 0) { - final int remainingCompare = vpb.getVersionedPath().length() - this.remainingChars; - final String remainingVersionedPath = vpb.getVersionedPath().substring(remainingCompare); - - final int compareLength = Math.min(remainingVersionedPath.length(), cnt); - final String expected = remainingVersionedPath.substring(0, compareLength); - final String actual = s.substring(off, off + compareLength); - if (expected.equals(actual)) { - if (compareLength == remainingVersionedPath.length()) { - // Matched the versioned path - // No content to write before - - // Write the user path - if (!"/".equals(vpb.getUserPath())) { - super.write(vpb.getUserPath()); - this.remainingChars = 0; - } - - // Prepare to write the rest - off += compareLength; - cnt -= compareLength; - } else { - // Partial match - this.remainingChars -= compareLength; - - if (this.remainingChars > vpb.getVersionedPath().length()) { - throw new IllegalStateException("Remaining characters has exceeded versioned path length!"); - } - return; - } - } else { - super.write(vpb.getVersionedPath().substring(0, remainingCompare)); - this.remainingChars = 0; - } - } - - final int originalOffset = off; - final int originalCount = cnt; - final int originalLength = originalOffset + originalCount; - - for (int i = originalOffset; i < originalLength; i++) { - if (vpb.getVersionedPath().charAt(0) == s.charAt(i)) { - final int compareLength = Math.min(vpb.getVersionedPath().length(), originalLength - i); - final String expected = vpb.getVersionedPath().substring(0, compareLength); - final String actual = s.substring(i, i + compareLength); - if (expected.equals(actual)) { - // Matched all of part of the the versioned path - // Write out the beginning: vpb.getVersionedPath().length()) { - throw new IllegalStateException("Remaining characters has exceeded versioned path length!"); - } - return; - } - } - } - } - } - - // Write out the end: /image.gif"> - if (s.length() < off + cnt) { - throw new IllegalStateException(s); - } - super.write(s, off, cnt); - } - - private VersionedPathBean findVersionedPathBean(String contentType) { - // Get path information and whether we should overwrite the stream. - if (contentType != null && ContextFinder.getParent() != null) { - VersioningService versioning = ContextFinder.getParent().getVersioningService(); - VersionedPathBean vpb = response.getVersionedPathBean(); - - // Is this a versioned request? - if (vpb != null && vpb.getUserPath() != null && vpb.getVersionedPath() != null && versioning != null - && versioning.isVersioningEnabled()) { - - String[] filteredContentTypes = versioning.getFilteredContentTypesArray(); - if (filteredContentTypes != null && filteredContentTypes.length > 0) { - // For this versioned request, is this response type - // supposed to be rewritten? - for (String filteredContentType : filteredContentTypes) { - if (contentType.startsWith(filteredContentType)) { - return vpb; - } - } - } - } - } - - return null; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersionedPathBean.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersionedPathBean.java deleted file mode 100644 index a791ee557c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersionedPathBean.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -/** - * Information about a versioned path. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VersionedPathBean { - - /** - * User path. - */ - private String userPath; - - /** - * Versioned path. - */ - private String versionedPath; - - /** - * Original decoded URI of the request. - */ - private String originalDecodedUri; - - /** - * Sets all members to null. - */ - public VersionedPathBean() { - this.userPath = null; - this.versionedPath = null; - } - - /** - * Initializes all members. - * @param userPath User path. - * @param versionedPath Versioned path. - */ - public VersionedPathBean(final String userPath, final String versionedPath) { - this.userPath = userPath; - this.versionedPath = versionedPath; - } - - /** - * @return User path. - */ - public String getUserPath() { - return userPath; - } - - /** - * @param userPath User path to set. - */ - public void setUserPath(final String userPath) { - this.userPath = userPath; - } - - /** - * @return Versioned path. - */ - public String getVersionedPath() { - return versionedPath; - } - - /** - * @param versionedPath Versioned path to set. This doesn't set - * userPathEndWithSlash. - */ - public void setVersionedPath(final String versionedPath) { - this.versionedPath = versionedPath; - } - - /** - * @return Original decoded URI of the request. - */ - public String getOriginalDecodedUri() { - return originalDecodedUri; - } - - /** - * @param originalDecodedUri Original decoded URI of the request. - */ - public void setOriginalDecodedUri(final String originalDecodedUri) { - this.originalDecodedUri = originalDecodedUri; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersioningValve.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersioningValve.java deleted file mode 100644 index 7cfd082ae9..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VersioningValve.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat6.versioning; - -import java.io.IOException; - -import javax.servlet.ServletException; - -import org.apache.catalina.connector.CoyoteAdapter; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; - -/** - * Versioning valve. - * - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VersioningValve extends ValveBase { - - private static final ThreadLocal THREAD_VPB = new ThreadLocal(); - - public void invoke(final Request request, final Response response) throws IOException, ServletException { - VersionedPathBean vpb = THREAD_VPB.get(); - - try { - if (vpb == null) { - try { - vpb = new VersionedPathBean(); - vpb.setOriginalDecodedUri(request.getDecodedRequestURI()); - - THREAD_VPB.set(vpb); - response.setVersionedPathBean(vpb); - - CoyoteAdapter adapter = (CoyoteAdapter) request.getConnector().getProtocolHandler().getAdapter(); - - final String requestURI = request.getRequestURI(); - final String versionedURI = ContextFinder.getContextURI(requestURI, request, vpb); - - if (!versionedURI.equals(requestURI)) { - request.getMappingData().recycle(); - request.getCoyoteRequest().decodedURI().recycle(); - request.getCoyoteRequest().requestURI().setChars(versionedURI.toCharArray(), 0, versionedURI.length()); - try { - adapter.service(request.getCoyoteRequest(), response.getCoyoteResponse()); - } catch (Exception e) { - throw new IOException(e); - } - } else { - getNext().invoke(request, response); - } - } finally { - THREAD_VPB.remove(); - } - } else { - response.setVersionedPathBean(vpb); - getNext().invoke(request, response); - } - } finally { - response.setVersionedPathBean(null); - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContext.java deleted file mode 100644 index 2773d5b66c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContext.java +++ /dev/null @@ -1,333 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.Cookie; - -import org.apache.catalina.Context; -import org.apache.catalina.Globals; -import org.apache.catalina.Session; -import org.apache.catalina.connector.Request; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Virtual Context implementation that handles operations with the additional - * contexts and defines a new context called "private". - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VirtualContext extends AbsVirtualContext { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(VirtualContext.class); - - /** - * Reserved contexts. - */ - private List reservedContexts = new ArrayList(); - - /** - * Disabled contexts. - */ - private List disabledContexts = new ArrayList(); - - /** - * Private contexts. - */ - private List privateContexts = new ArrayList(); - - /** - * Creates and registers a virtual context. - * @param jmxService JMX server. - * @param userURI User (virtual) URI of this context. - * @param contextInstance The first context instance, will be mapped as - * default context. - */ - public VirtualContext(final JmxService jmxService, final String userURI, final Context contextInstance) { - super(jmxService, userURI, contextInstance); - } - - /** - * Adds a new context. Called by the parent if the policy is not default. - * @param contextInstance Context instance (versioned path). - * @param policy Policy (extensible). - * @throws IllegalArgumentException If policy not recognized. - */ - @Override - protected void addContextInternal(final Context contextInstance, final String policy) throws IllegalArgumentException { - if (VersioningServiceBase.DISABLED.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind disabled context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.disabledContexts.add(contextInstance); - } else if (VersioningServiceBase.PRIVATE.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind private context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.privateContexts.add(contextInstance); - } else if (VersioningServiceBase.RESERVED.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind reserved context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.reservedContexts.add(contextInstance); - } else { - throw new IllegalArgumentException("Invalid policy: " + policy); - } - } - - /** - * @return All versioned contexts with their POLICIES for this virtual - * context. - */ - public Map getContexts() { - Map result; - int mapSize = disabledContexts.size() + reservedContexts.size() + privateContexts.size(); - if (defaultContext != null) { - result = new HashMap(1 + mapSize); - result.put(defaultContext.getPath(), VersioningServiceBase.DEFAULT); - } else { - result = new HashMap(mapSize); - } - for (Context context : disabledContexts) { - result.put(context.getPath(), VersioningServiceBase.DISABLED); - } - for (Context context : reservedContexts) { - result.put(context.getPath(), VersioningServiceBase.RESERVED); - } - for (Context context : privateContexts) { - result.put(context.getPath(), VersioningServiceBase.PRIVATE); - } - return result; - } - - /** - * Checks if a given request has a private context. - * @param req Request to check. - * @return The private context for this request, null if none found. - */ - protected String findPrivateContext(final Request req) { - // TODO: this should return some non-null values someday - return null; - } - - /** - * Checks if a given session has a disabled context. - * @param req Request to check. - * @return The disabled context for this request, null if none found. - */ - protected String findDisabledContext(final Request req) { - List sessions = new ArrayList(); - - // Build list of sessions - String requestSessionid = req.getRequestedSessionId(); - if (requestSessionid != null) { - sessions.add(requestSessionid); - } - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if (Globals.SESSION_COOKIE_NAME.equals(cookie.getName())) { - sessions.add(cookie.getValue().toString()); - } - } - } - if (sessions.size() == 0) { - logger.debug("No session found"); - return null; - } - - // Check for each session in each disabled context - for (Context context : disabledContexts) { - for (String sessionid : sessions) { - try { - Session session = context.getManager().findSession(sessionid); - if (session != null && session.isValid()) { - logger.debug("Found session " + session + " for context " + context.getPath()); - return context.getPath(); - } - } catch (IOException e) { - logger.error("Cannot read session", e); - } - } - } - - logger.debug("None of the user's sessions belong to the disabled contexts"); - return null; - } - - /** - * Rebinds a context. - * @param versionedPath Versioned path of the context. - * @param policy New policy. - * @return true if succeeded, false otherwise. - */ - public boolean rebindContext(final String versionedPath, final String policy) { - Context contextInstance; - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - contextInstance = defaultContext; - defaultContext = null; - } else { - contextInstance = findDeleteContextObject(versionedPath, true); - } - - if (contextInstance == null) { - return false; - } else { - addContext(contextInstance, policy); - return true; - } - } - - /** - * Finds the context object corresponding to a path. This implementation - * calls parent and check additional contexts. - * @param versionedPath Path to check against. - * @return Context object corresponding to versionedPath, null if none. - */ - @Override - protected Context findContextObject(final String versionedPath) { - Context result = super.findContextObject(versionedPath); - if (result == null) { - result = findDeleteContextObject(versionedPath, false); - } - return result; - } - - /** - * Finds and optionally deletes a context object. - * @param versionedPath Path to check against. - * @param delete Whether to delete when found. - * @return Context corresponding to versionedPath, null if none found. - */ - protected Context findDeleteContextObject(final String versionedPath, final boolean delete) { - // disabledContexts is null when parent - // calls findContextObject at construction - if (disabledContexts != null) { - for (Context context : disabledContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - disabledContexts.remove(context); - } - return context; - } - } - } - // reservedContexts is null when parent - // calls findContextObject at construction - if (reservedContexts != null) { - for (Context context : reservedContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - reservedContexts.remove(context); - } - return context; - } - } - } - // privateContexts is null when parent - // calls findContextObject at construction - if (privateContexts != null) { - for (Context context : privateContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - privateContexts.remove(context); - } - return context; - } - } - } - return null; - } - - /** - * Removes a context. If no more contexts left, will also remove this - * virtual context. - * @param versionedPath Versioned path of the context. - * @return true if succeeded, false otherwise. - */ - @Override - public boolean removeContext(final String versionedPath) { - boolean result = super.removeContext(versionedPath); - if (!result) { - result = (null != findDeleteContextObject(versionedPath, true)); - } - if (defaultContext == null && privateContexts.isEmpty() && reservedContexts.isEmpty() && disabledContexts.isEmpty()) { - removeVirtualContext(); - } - return result; - } - - /** - * Checks whether a given context has been registered. - * @param versionedPath Versioned path of the context. - * @return true if found, false otherwise. - */ - @Override - public boolean hasContext(final String versionedPath) { - boolean result = super.hasContext(versionedPath); - if (!result) { - result = (null != findDeleteContextObject(versionedPath, false)); - } - return result; - } - - /** - * Finds the context URI string for a request. - * @param req Request. - * @return Context URI string for that request, null if none found. - */ - public String findContext(final Request req) { - String contextURI = findPrivateContext(req); - logger.debug("findPrivateContext returned : " + contextURI); - if (contextURI == null) { - contextURI = findDisabledContext(req); - logger.debug("findDisabledContext returned : " + contextURI); - } - if (contextURI == null) { - if (defaultContext == null) { - logger.debug("No context found, default also null. Returning null."); - } else { - // TODO: force session creation ? - contextURI = defaultContext.getPath(); - logger.debug("No context found, returning default : " + contextURI); - } - } - return contextURI; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContextMBean.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContextMBean.java deleted file mode 100644 index 5caa4f4eef..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/VirtualContextMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import org.ow2.jonas.versioning.VirtualContextJMXInterface; - -/** - * JMX interface for a virtual Tomcat context. This interface combines the - * versioning service's Virtual Context JMX interface with the Tomcat WebModule - * JMX interface. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VirtualContextMBean extends WebModuleContext, VirtualContextJMXInterface { - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/WebModuleContext.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/WebModuleContext.java deleted file mode 100644 index 8d9246385b..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/versioning/WebModuleContext.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.versioning; - -import java.net.URL; - -import javax.naming.directory.DirContext; - -import org.apache.catalina.Context; - -/** - * Interface that lists all method that a management bean that Tomcat should - * recognize as a WebModule. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface WebModuleContext { - - /** - * @return The mapping context, can be null. - */ - Context findMappingObject(); - - /** - * @return Static resources, can be null. - */ - DirContext findStaticResources(); - - /** - * @return Welcome files for the web application's directories. - */ - String[] getwelcomeFiles(); - - /** - * @return URL of the WAR file. - */ - URL getwarURL(); - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/EndpointInstanceListener.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/EndpointInstanceListener.java deleted file mode 100644 index 127f0ddfa6..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/EndpointInstanceListener.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.InstanceEvent; -import org.apache.catalina.InstanceListener; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; - -import javax.servlet.ServletContext; - -/** - * This Catalina InstanceListener is invoked during lifecycle phases - * of the servlet's instances. - * Its role is to first create the IWebServiceEndpoint instance - * (using the IJAXWSService), then starting the newly created endpoint, - * and finally, inject the endpoint into the JAXWSServlet instance. - * @author Guillaume Sauthier - */ -public class EndpointInstanceListener implements InstanceListener { - - /** - * Metadata used to create the WSEndpoint. - */ - private IWarClassMetadata endpointMetadata; - - /** - * JAXWS Service instance. - */ - private IJAXWSService service; - - /** - * The created endpoint. - */ - private IWebServiceEndpoint endpoint; - - /** - * Creates a new instanceListener dedicated for Web based, - * web.xml described POJO web services - * @param endpointMetadata Class metadatas - * @param service the JAXWS Service - */ - public EndpointInstanceListener(final IWarClassMetadata endpointMetadata, - final IJAXWSService service) { - this.endpointMetadata = endpointMetadata; - this.service = service; - } - - /** - * Callback when an instance level (ie servlet instance) event is fired by the Wrapper. - * @param event Servlet's instance lifecycle event - */ - public void instanceEvent(final InstanceEvent event) { - - // Only react when the instance when just alive (but not already inited) - if (InstanceEvent.AFTER_INIT_EVENT.equals(event.getType())) { - - // The servlet is a JAXWSServlet - JAXWSServlet servlet = (JAXWSServlet) event.getServlet(); - - // Maybe there are multiple instances of the servlet, so - // // only creates the endpoint once - if (endpoint == null) { - - // Create the endpoint from metadata - ClassLoader loader = event.getWrapper().getLoader().getClassLoader(); - try { - ServletContext sc = event.getServlet().getServletConfig().getServletContext(); - endpoint = service.createPOJOWebServiceEndpoint(endpointMetadata, loader, sc); - } catch (WSException e) { - throw new RuntimeException("WebServiceEndpoint creation failed", e); - } - - // Fill in some PMD values - PortMetaData pmd = endpoint.getPortMetaData(); - - // Update the url-pattern - // Find the first servlet-mapping already registered in the web.xml - String pattern = null; - String[] mappings = event.getWrapper().findMappings(); - if (mappings.length != 0) { - pattern = URLUtils.findValidUrlPattern(mappings); - } - - if (pattern != null) { - // Overwrite the default pattern name - pmd.setUrlPattern(pattern); - } - - // Set context name - Context context = (Context) event.getWrapper().getParent(); - pmd.setContextRoot(context.getName()); - - // Compute a naive endpoint URL - Host host = (Host) context.getParent(); - String url = URLUtils.getEndpointURL(pmd, host); - pmd.setEndpointURL(url); - - // metadata and service references are no more required - endpointMetadata = null; - service = null; - } - - // Inject the endpoint - servlet.setWebServiceEndpoint(endpoint); - - // Print infos - endpoint.displayInfos(); - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/URLUtils.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/URLUtils.java deleted file mode 100644 index 809fbd4a2c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/URLUtils.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import org.apache.catalina.Engine; -import org.apache.catalina.Host; -import org.apache.catalina.Service; -import org.apache.catalina.connector.Connector; -import org.ow2.jonas.ws.jaxws.PortMetaData; - -/** - * The URLUtils a helper class for URL management operations. - * - * @author Guillaume Sauthier - */ -public class URLUtils { - - /** - * Compute a possible local endpoint URL. - * @param portMetadata port related metadata - * @param host host deploying the new context - * @return a possible local endpoint URL or null if computation was impossible - */ - static String getEndpointURL(final PortMetaData portMetadata, final Host host) { - - // Find hostname - String hostname = host.getName(); - - // Find url-pattern - String pattern = portMetadata.getUrlPattern(); - - // Find the connectors associated to this Host - Engine engine = (Engine) host.getParent(); - Service service = engine.getService(); - Connector[] connectors = service.findConnectors(); - - // Find an HTTP and/or an HTTPS Connector - Connector httpConnector = null; - Connector httpsConnector = null; - for (Connector connector : connectors) { - String scheme = connector.getScheme(); - - if ("https".equals(scheme)) { - httpsConnector = connector; - } - - if ("http".equals(scheme)) { - httpConnector = connector; - } - } - - // Compute the endpoint URL - StringBuffer sb = new StringBuffer(); - if (httpConnector != null) { - // Prefer HTTP - sb.append("http://"); - sb.append(hostname); - sb.append(":"); - int port = httpConnector.getPort(); - int proxyPort = httpConnector.getProxyPort(); - if (proxyPort != 0) { - port = proxyPort; - } - sb.append(port); - sb.append(getContextRoot(portMetadata)); - sb.append(pattern); - - return sb.toString(); - } else if (httpsConnector != null) { - // Fallback on HTTPS if available - sb.append("https://"); - sb.append(hostname); - sb.append(":"); - int port = httpsConnector.getPort(); - int proxyPort = httpsConnector.getProxyPort(); - if (proxyPort != 0) { - port = proxyPort; - } - sb.append(port); - sb.append(getContextRoot(portMetadata)); - sb.append(pattern); - - return sb.toString(); - } - - return null; - } - - /** - * Fix the context-root by prefixing it with a leading '/' (if missing). - * @param portMetadata port related metadata - * @return a valid context-root from the port metadata - */ - protected static String getContextRoot(final PortMetaData portMetadata) { - String contextName = portMetadata.getContextRoot(); - if (!contextName.startsWith("/")) { - contextName = "/" + contextName; - } - return contextName; - } - - /** - * @param mappings candidates mappins - * @return a valid mapping selected from the candidates - */ - public static String findValidUrlPattern(final String[] mappings) { - if ((mappings == null) || (mappings.length == 0)) { - // Empty mappings - return null; - } - - for (String mapping : mappings) { - if (containsNoWildcards(mapping)) { - return mapping; - } - } - - // Found no suitable mapping - return null; - } - - /** - * @param mapping candidate - * @return true if the candidate is a valid mapping value. - */ - private static boolean containsNoWildcards(final String mapping) { - return (mapping.indexOf('*') == -1); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSContextLifecycleListener.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSContextLifecycleListener.java deleted file mode 100644 index 4afd34732d..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSContextLifecycleListener.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import org.apache.catalina.Container; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.Wrapper; -import org.apache.catalina.core.StandardContext; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; - -import java.util.Map; - -/** - * React to Context Lifecycle events (start/stop/...). - * This class acts as the @WebService POJO annotated web service deployer. - * Right after the Context is started, existing registered servlet (from web.xml) - * are analyzed, if they marks a web service, the Wrapper class is adapted - * for web service endpoint invocation. - * - * After Context's startup, we benefit of the real WebApp ClassLoader, so - * we can easily creates our own Wrappers - * @author Guillaume Sauthier - */ -public class WSContextLifecycleListener implements LifecycleListener { - - /** - * List of @WebServices annotated classes. - */ - private Map services; - - /** - * The JAXWS Service. - */ - private IJAXWSService jaxwsService; - - /** - * Construct a new LifecycleListener. - * @param services JAX-WS web services description - * @param jaxws the JAXWS service - */ - public WSContextLifecycleListener(final Map services, - final IJAXWSService jaxws) { - this.services = services; - this.jaxwsService = jaxws; - } - - /** - * Callback for all Context Lifecycle events. - * We only react to START_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT - * @param event the Lifecycle event - */ - public void lifecycleEvent(final LifecycleEvent event) { - if (Lifecycle.START_EVENT.equals(event.getType())) { - onContextStart((StandardContext) event.getLifecycle()); - - } else if (Lifecycle.AFTER_START_EVENT.equals(event.getType())) { - onAfterContextStart((StandardContext) event.getLifecycle()); - - } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { - onAfterContextStop((StandardContext) event.getLifecycle()); - } - } - - /** - * Called at the real startup of the Context. - * But before the Wrappers have been started. - * This is important because, we want to change the wrappers. - * @param context Tomcat Context - */ - private void onContextStart(final StandardContext context) { - - // Break processing if there is no services to deploy - if (services.isEmpty()) { - return; - } - - // find all the declared servlets/wrappers - Container[] childs = context.findChildren(); - // Childrens are all Wrappers - if (childs != null) { - for (Container child : childs) { - Wrapper wrapper = (Wrapper) child; - String servletClass = wrapper.getServletClass(); - - // Check if the servlet-class is one of the services we have recognized before - IWarClassMetadata metadata = findWebServiceMetadata(servletClass); - if (metadata != null) { - // OK Got it - - // Change the servlet-class - wrapper.setServletClass(JAXWSServlet.class.getName()); - - // And add an InstanceListener to perform some manual injection before any usage - wrapper.addInstanceListener(new EndpointInstanceListener(metadata, jaxwsService)); - - // remove the servlet from the list of endpoints to prepare - services.remove(servletClass); - - // Try to force servlet loading - // This is important to do that because if the loadOnStartup is not set (or set - // to a negative value), the servlet will be loaded during the first call. - // During the servlet loading, we create the webservice endpoint and register - // it in our WSContainer so that we can start all our services together. - // Waiting for the first call is a bit late for us because we start the WS - // endpoints at the end of StandardContext startup (before the first call). - int loadOnStartup = wrapper.getLoadOnStartup(); - if (loadOnStartup < 0) { - wrapper.setLoadOnStartup(0); - } - } // else next servlet - } - } - - // OK, now we have browsed all the servlets that have been declared in the web.xml - // The metadata remaining in the services Map are discovered endpoint that were - // not declared in the web.xml - // They will be processed 'after startup' - - } - - /** - * Invoked after Context startup. - * @param context the Context of the webapp - */ - private void onAfterContextStart(final StandardContext context) { - - // Iterates on the remaining services (thoses that were not declared in the web.xml) - for (Map.Entry entry : services.entrySet()) { - - // As the Context is started, we have a ClassLoader - ClassLoader loader = context.getLoader().getClassLoader(); - - // That we can use to create our endpoint - IWebServiceEndpoint endpoint = null; - IWarClassMetadata metadata = entry.getValue(); - try { - endpoint = jaxwsService.createPOJOWebServiceEndpoint(metadata, - loader, - context.getServletContext()); - } catch (WSException e) { - throw new RuntimeException("WebServiceEndpoint creation failed", e); - } - - // Fill in some data about PMD - PortMetaData pmd = endpoint.getPortMetaData(); - - // Store context name - pmd.setContextRoot(context.getName()); - - // Compute the endpoint naive URL - String url = URLUtils.getEndpointURL(pmd, (Host) context.getParent()); - pmd.setEndpointURL(url); - - // Create a new Wrapper dedicated to WS endpoint - WebServiceEndpointStandardWrapper wrapper = null; - String name = metadata.getJClass().getName().replace('/', '.'); - wrapper = new WebServiceEndpointStandardWrapper(endpoint, name); - - // Add the Servlet/Wrapper to the context - context.addChild(wrapper); - - // Compute the servlet-mapping - String pattern = pmd.getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - // Print infos - endpoint.displayInfos(); - - } - } - - /** - * Called after the stopping of the Context. - * @param context - */ - private void onAfterContextStop(StandardContext context) { - - jaxwsService.undeployPOJOEndpoints(context.getServletContext()); - } - - - /** - * Find the metadata associated with a given classname. - * @param servletClass class name - * @return the metadata of the named class, may return null, if there - * is no associated metadata - */ - private IWarClassMetadata findWebServiceMetadata(final String servletClass) { - - for (Map.Entry entry : services.entrySet()) { - if (servletClass.equals(entry.getKey())) { - return entry.getValue(); - } - } - return null; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSDeployment.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSDeployment.java deleted file mode 100644 index 28154789f6..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WSDeployment.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.startup.ContextConfig; -import org.ow2.jonas.web.tomcat6.JOnASStandardContext; -import org.ow2.jonas.web.tomcat6.Tomcat6Service; -import org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; - -/** - * @author Guillaume Sauthier - */ -public class WSDeployment implements IWebServiceDeploymentManager { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WSDeployment.class); - - /** - * Our support: Tomcat. - */ - private Tomcat6Service tomcatService; - - /** - * The work directory of tomcat. - */ - private String workDirectory; - - /** - * Construct a new {@link WSDeployment} manager based on Tomcat. - * @param tomcatService Tomcat instance - */ - public WSDeployment(final Tomcat6Service tomcatService) { - this.tomcatService = tomcatService; - } - - /** - * @param workDirectory the workDirectory to set - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - - /** - * @see org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager#registerWSEndpoint(org.ow2.jonas.ws.jaxws.IWebServiceEndpoint) - */ - public void registerWSEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - - switch (endpoint.getType()) { - case POJO: - throw new IllegalStateException("Not implemented yet"); - case EJB: - registerEJBEndpoint(endpoint); - } - - } - - /** - * Register a new EJB based WS endpoint. - * @param endpoint the EJB based WS endpoint to deploy - * @throws WSException - */ - private void registerEJBEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - PortMetaData pmd = endpoint.getPortMetaData(); - // Find the host - Host host = tomcatService.findHost(pmd.getHostname()); - - // TODO Configure security - // TODO, if there are multiple EJB exposed as WS, we need to reuse the Context - - // Configure Wrapper - WebServiceEndpointStandardWrapper wrapper = null; - wrapper = new WebServiceEndpointStandardWrapper(endpoint); - - wrapper.setParentClassLoader(this.getClass().getClassLoader()); - - logger.debug("Added Wrapper/Servlet: {0}", wrapper); - - // Create the context - JOnASStandardContext context = new JOnASStandardContext(false, true, false); - - // Configure the context - context.setPath(URLUtils.getContextRoot(pmd)); - - // Add the Servlet - context.addChild(wrapper); - - String pattern = endpoint.getPortMetaData().getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - context.setTomcatService(tomcatService); - - // I need here a valid File in the work directory of JOnAS - File docBase = new File(workDirectory, - endpoint.getPortMetaData().getContextRoot()); - if (!docBase.exists()) { - docBase.mkdirs(); - } // TODO remove the directory ? - context.setDocBase(docBase.getPath()); - - // This listener is here to tell tomcat that the Context is - // OK for startup, even if no ContextConfig was set. - context.addLifecycleListener(new LifecycleListener() { - - public void lifecycleEvent(LifecycleEvent lifecycleEvent) { - - if (Lifecycle.START_EVENT.equals(lifecycleEvent.getType())) { - // The context is configured - Context ctx = (Context) lifecycleEvent.getLifecycle(); - ctx.setConfigured(true); - } else if (Lifecycle.AFTER_START_EVENT.equals(lifecycleEvent.getType())) { - // Cleanup registered application listeners (such as JSF, ...) - Context ctx = (Context) lifecycleEvent.getLifecycle(); - String[] listeners = ctx.findApplicationListeners(); - for (String listener : listeners) { - ctx.removeApplicationListener(listener); - } - } - } - }); - - // Add the Context - // Will be automatically started - host.addChild(context); - - // Compute a default URL that can be used to access the endpoint locally - String url = URLUtils.getEndpointURL(pmd, host); - endpoint.getPortMetaData().setEndpointURL(url); - - logger.debug("Added Context: {0}", context); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager#unregisterWSEndpoint(org.ow2.jonas.ws.jaxws.IWebServiceEndpoint) - */ - public void unregisterWSEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - switch (endpoint.getType()) { - case POJO: - throw new IllegalStateException("Not implemented yet"); - case EJB: - unregisterEJBEndpoint(endpoint); - } - } - - - private void unregisterEJBEndpoint(final IWebServiceEndpoint endpoint) { - - String contextName = URLUtils.getContextRoot(endpoint.getPortMetaData()); - String hostname = endpoint.getPortMetaData().getHostname(); - - Host host = tomcatService.findHost(hostname); - Context context = (Context) host.findChild(contextName); - - // remove the docbase directory - // add by youchao - String path = context.getDocBase(); - File docBase = new File(path); - if(docBase.isDirectory()) { - docBase.delete(); - } - - host.removeChild(context); - - logger.debug("Context {0} stopped", contextName); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebServiceEndpointStandardWrapper.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebServiceEndpointStandardWrapper.java deleted file mode 100644 index e91c84c18d..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebServiceEndpointStandardWrapper.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import org.apache.catalina.core.StandardWrapper; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; - - -public class WebServiceEndpointStandardWrapper extends StandardWrapper { - - /** - * Default value for the servlet-name element. - */ - public static final String JAX_WS_GENERIC_SERVLET = "JAX-WS 2.x Generic Servlet"; - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -8186120043063306566L; - - /** - * Endpoint to be injected in the servlet instance. - */ - private IWebServiceEndpoint endpoint; - - /** - * Creates a customized Tomcat Wrapper - * @param endpoint web service endpoint - * @param servletName The name of this servlet (not the class name !) - */ - public WebServiceEndpointStandardWrapper(final IWebServiceEndpoint endpoint, - final String servletName) { - this.endpoint = endpoint; - - // Hardcoded JAXWSServlet name ? - setServletClass(JAXWSServlet.class.getName()); - setServletName(servletName); - } - - /** - * Creates a customized Tomcat Wrapper - * @param endpoint web service endpoint - */ - public WebServiceEndpointStandardWrapper(final IWebServiceEndpoint endpoint) { - this(endpoint, JAX_WS_GENERIC_SERVLET); - } - - /* (non-Javadoc) - * @see org.apache.catalina.core.StandardWrapper#loadServlet() - */ - @Override - public synchronized Servlet loadServlet() throws ServletException { - - // Delegate Servlet instanciation - JAXWSServlet servlet = (JAXWSServlet) super.loadServlet(); - - // Inject the Endpoint - servlet.setWebServiceEndpoint(endpoint); - - return servlet; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebservicesWebDeployer.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebservicesWebDeployer.java deleted file mode 100644 index 236eb3dd5a..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/WebservicesWebDeployer.java +++ /dev/null @@ -1,692 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws; - -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.ArrayList; -import java.util.Set; -import java.io.File; - -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.web.tomcat6.Tomcat6Service; -import org.ow2.jonas.web.tomcat6.JOnASStandardContext; -import org.ow2.jonas.web.tomcat6.security.Realm; -import org.ow2.jonas.web.tomcat6.ws.strategy.EjbJarContextNamingStrategy; -import org.ow2.jonas.web.tomcat6.ws.security.SecureWebDeploymentDescBuilder; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.security.PermissionManagerException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.core.StandardWrapper; -import org.apache.catalina.Host; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.Context; -import org.apache.catalina.deploy.SecurityConstraint; -import org.apache.catalina.deploy.SecurityCollection; -import org.apache.catalina.deploy.LoginConfig; -import org.apache.catalina.startup.ContextConfig; - -/** - * The WebservicesWebDeployer is responsible of deploying/creating/removing - * web contexts for EJB based endpoints. - * - * @author Guillaume Sauthier - */ -public class WebservicesWebDeployer implements IWebDeployer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebservicesWebDeployer.class); - - /** - * Our support: Tomcat. - */ - private Tomcat6Service tomcatService; - - /** - * The work directory where contexts bases will be stored. - */ - private String workDirectory; - - /** - * Construct a new {@link WebservicesWebDeployer} manager based on Tomcat. - * @param tomcatService Tomcat instance - */ - public WebservicesWebDeployer(final Tomcat6Service tomcatService) { - this.tomcatService = tomcatService; - } - - /** - * @param workDirectory the workDirectory to set - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - - /** - * Deploy the given module, with all its endpoints in the web - * container, creating appropriate contexts when required. - * - * @param module the webservices module to deploy - * @throws org.ow2.jonas.ws.jaxws.WSException - * if deployment went wrong. - */ - public void deploy(final IWebservicesModule> module) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - logger.debug("Deploying WsModule {0}", module.getName()); - Map> endpoints = getWebContextPartitions(module); - - for (Map.Entry> entry : endpoints.entrySet()) { - - deployEndpoints(entry.getKey(), entry.getValue()); - } - - } - - /** - * Deploy a context and the associated endpoints. - * @param webContext context to be created - * @param endpoints endpoints to be deployed - */ - protected void deployEndpoints(final WebContext webContext, - final List endpoints) throws WSException { - logger.debug("Deploying Web Context {0}", webContext.getContextName()); - - // Create the context - JOnASStandardContext context = createWebservicesContext(webContext.getContextName()); - - // Get the default Host - Host host = getDefaultHost(); - - // Configure the realm to be used if required - configureSecurityRealm(host, context, webContext, endpoints); - - // Add required servlets inside the Context - for (IEJBWebserviceEndpoint endpoint : endpoints) { - - // 1 Servlet per endpoint - configureWebservicesServlet(context, endpoint); - - // Compute a default URL that can be used to access the endpoint locally - PortMetaData pmd = endpoint.getPortMetaData(); - String url = URLUtils.getEndpointURL(pmd, host); - pmd.setEndpointURL(url); - - } - - // Add it into the Host (ie start it) - host.addChild(context); - } - - /** - * Configure the security of the given StandardContext. - * @param host Context's parent, used to get a default Realm - * @param context Context to be configured - * @param webContext WebContext description (provides realm/jaasEntry name) - * @param endpoints list of endpoints (possibly secured) - * @throws WSException - */ - private void configureSecurityRealm(final Host host, - final JOnASStandardContext context, - final WebContext webContext, - final List endpoints) throws WSException { - - // Get a realm (if possible) - Realm realm = null; - if (webContext.getRealmName() != null) { - // JACC realm - realm = tomcatService.createJOnASRealm(webContext.getRealmName(), true); - } else if (webContext.getJaasEntry() != null) { - // JAAS realm - realm = tomcatService.createJOnASRealm(webContext.getJaasEntry(), false); - } else { - // Plug on existing realm if any - org.apache.catalina.Realm parentRealm = host.getRealm(); - if ((parentRealm != null) && (parentRealm instanceof Realm)) { - - try { - realm = (Realm) ((Realm) parentRealm).clone(); - } catch (CloneNotSupportedException cnse) { - String err = "Cannot clone the realm used by the existing context or its parent realm"; - throw new WSException(err, cnse); - } - } - } - - if (realm != null) { - // A PermissionManager needs a contextId - String contextId = host.getName() + context.getPath(); - - // Creates a permission manager - WebContainerDeploymentDesc dd = createWebDeploymentDescriptor(endpoints); - PermissionManager permissionManager = createPermissionManager(contextId, dd); - - // Assign it to the Realm - realm.setPermissionManager(permissionManager); - context.setWebDeploymentDescriptor(dd); - - // Setup realm<->context association - realm.setContext(context); - context.setRealm(realm); - } - } - - /** - * Creates a PermissionManager for the given Web DD. - * @param contextId ID of the secured context - * @param dd web deployment descriptor containing security stuff - * @return a ready to use PermissionManager - * @throws WSException if there is an error during the PermissionManager creation - */ - private PermissionManager createPermissionManager(final String contextId, - final WebContainerDeploymentDesc dd) throws WSException { - - // Use the descriptor to creates a PermissionManager - PermissionManager manager = null; - try { - manager = new PermissionManager(dd, contextId, true); - manager.translateServletDeploymentDescriptor(); - manager.commit(); - } catch (PermissionManagerException e) { - throw new WSException("Cannot construct PermissionManager", e); - } - - return manager; - } - - /** - * Creates a Web deployment descriptor structure from the list of (possibly secured) endpoints. - * @param endpoints list of endpoints - * @return a security initialized Web DD - * @throws WSException if there is an error during the DD generation. - */ - private WebContainerDeploymentDesc createWebDeploymentDescriptor(final List endpoints) throws WSException { - - // Build a Web DeploymentDescriptor - SecureWebDeploymentDescBuilder builder = new SecureWebDeploymentDescBuilder(); - List constraints = new ArrayList(); - for (IEJBWebserviceEndpoint endpoint : endpoints) { - ISecurityConstraint sc = endpoint.getSecurityConstraint(); - if (sc != null) { - constraints.add(sc); - } - } - return builder.createJOnASWebDescriptor(constraints); - } - - /** - * Undeploy the given module, with all its endpoints from the - * web container. An implementation should catch most of the - * Exceptions and try to cleanupas much as possible. - * - * @param module the webservices module to undeploy - */ - public void undeploy(final IWebservicesModule> module) { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - logger.debug("Undeploying WsModule {0}", module.getName()); - - // Get Web context used by the endpoints of the module - List contextsToBeUndeployed = getAssociatedWebContexts(module); - - // Stop all the used Contexts - for (String contextName : contextsToBeUndeployed) { - // Find the Context - Host host = getDefaultHost(); - - if (host != null) { - Context context = (Context) host.findChild(contextName); - - if (context != null) { - - logger.debug("Undeploying Web Context {0}", contextName); - - // remove the docbase directory - // add by youchao - String path = context.getDocBase(); - File docBase = new File(path); - if(docBase.isDirectory()) { - docBase.delete(); - } - - // Remove and Stop the Context - host.removeChild(context); - - // if there is an associated Realm (now stopped) - // get the PermissionManager from it, and delete it - org.apache.catalina.Realm realm = context.getRealm(); - if ((realm != null) && (realm instanceof Realm)) { - Realm ctxRealm = (Realm) realm; - PermissionManager manager = ctxRealm.getPermissionManager(); - if (manager != null) { - try { - manager.delete(); - } catch (PermissionManagerException pme) { - logger.debug("Cannot delete PermissionManager of Context ''{0}''", contextName, pme); - } - } - } - - - } - } - } - - } - - /** - * Get the web contexts list associated with the WS module's endpoints. - * Theses contexts will be undeployed. - * @param module WS hosting module - * @return list of undeployable web contexts - */ - protected List getAssociatedWebContexts(final IWebservicesModule> module) { - List contexts = new ArrayList(); - - // Iterates on the deployed contexts to retrive where they were deployed - for (IWebservicesContainer container : module.getContainers()) { - for (IEJBWebserviceEndpoint endpoint : container.getEndpoints()) { - Map infos = endpoint.getDeploymentInfos(); - String name = (String) infos.get(IEJBWebserviceEndpoint.KEY_CONTEXT_NAME); - contexts.add(name); - } - } - - return contexts; - } - - /** - * Create and configure the Servlet to serve the endpoint: - *
      - *
    1. Create the servlet wrapping the endpoint
    2. - *
    3. Add it to the Context
    4. - *
    5. Set the servlet-mapping
    6. - *
    - * @param context configured context - * @param endpoint endpoint to be wrapped - */ - private void configureWebservicesServlet(final StandardContext context, - final IEJBWebserviceEndpoint endpoint) { - - // create the Servlet - StandardWrapper wrapper = wrapWebserviceEndpoint(endpoint); - - // Configure security constraints (if required) - configureSecurityConstraints(context, endpoint); - - logger.debug("Added Wrapper/Servlet: {0}", wrapper); - - // Add the Servlet - context.addChild(wrapper); - - // Add the servlet-mapping - String pattern = endpoint.getPortMetaData().getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - } - - /** - * Configure security constraints (if required) for the given Context. - * @param context context to be configured - * @param endpoint endpoints that may be secured - */ - private void configureSecurityConstraints(final StandardContext context, - final IEJBWebserviceEndpoint endpoint) { - - // Do something only if there are some security references in the endpoint description - // otherwise exit - if (endpoint.getSecurityConstraint() == null) { - return; - } - - ISecurityConstraint security = endpoint.getSecurityConstraint(); - - // Use endpoint-address as the secured url-pattern - SecurityConstraint constraint = new SecurityConstraint(); - // user-data-constraint/transport-guarantee defines - constraint.setUserConstraint(security.getTransportGuarantee()); - // auth-constraint/(role-name)* references the roles defined on the bean - for (String role : security.getRoleNames()) { - constraint.addAuthRole(role); - } - SecurityCollection collection = new SecurityCollection(); - collection.addPattern(security.getUrlPattern()); - //collection.addPattern("/*"); - // Use defined http-methods (or use all if none defined) - if (security.getHttpMethods() != null) { - for (String method : security.getHttpMethods()) { - collection.addMethod(method); - } - } - constraint.addCollection(collection); - context.addConstraint(constraint); - - // security-roles - for (String role : security.getRoleNames()) { - context.addSecurityRole(role); - } - - - // Manage LoginConfig - LoginConfig loginConfig = new LoginConfig(); - String method = security.getAuthMethod(); - if (method == null) { - method = "BASIC"; - } else if ("FORM".equals(method) || "NONE".equals(method)) { - // This is a non sense to set FORM or NONE on endpoints - logger.warn("This is an error to set auth-method to ''{0}'', changing it to ''BASIC''", method); - method = "BASIC"; - } - loginConfig.setAuthMethod(method); - // The security realm name is not really used in Tomcat ... - loginConfig.setRealmName(security.getRealmName()); - context.setLoginConfig(loginConfig); - } - - /** - * Group the endpoints of the given module keyed on the web context they will belong to. - * @param module ws module to be explored - * @return a Map keyed by context-name - * @throws WSException if there is a problem regarding the Context (duplicate name, incompatible realm, ...) - */ - private Map> getWebContextPartitions(final IWebservicesModule> module) throws WSException { - - // Prepare the Map - Map> endpoints; - endpoints = new HashMap>(); - - // Get the default Host - Host host = getDefaultHost(); - - // Iterates on all the endpoints contained in module/container - for (IWebservicesContainer container : module.getContainers()) { - for (IEJBWebserviceEndpoint endpoint : container.getEndpoints()) { - - // Compute a context-root - String contextName = getContextRoot(endpoint); - String realmName = null; - String jaasEntry = null; - if (endpoint.getSecurityConstraint() != null) { - realmName = endpoint.getSecurityConstraint().getRealmName(); - // TODO add support for JAAS entry - //jaasEntry = endpoint.getSecurityConstraint().getJaasEntry(); - } - WebContext key = new WebContext(contextName, realmName, jaasEntry); - - // Check if the context already exists - if (host.findChild(contextName) != null) { - // The context-root already exists in the Host - throw new WSException("Context '" + contextName + "' already deployed in Host '" + host + "'"); - } - - if (endpoints.containsKey(key)) { - // Shared context (compatible security realms) - List list = endpoints.get(key); - list.add(endpoint); - } else if ((findWebContext(endpoints.keySet(), contextName)) == null){ - // No-one uses this context for now - List list = new ArrayList(); - list.add(endpoint); - endpoints.put(key, list); - } else { - // context name already used, but with an incompatible security scheme - WebContext ctx = findWebContext(endpoints.keySet(), contextName); - List endpointsGroup = endpoints.get(ctx); - StringBuilder sb = new StringBuilder(); - sb.append("Context '"); - sb.append(contextName); - sb.append("' for Bean WSEndpoint '"); - sb.append(endpoint.getContextNamingInfo().getBeanName()); - sb.append("' is incompatible in regards to security with a context used by beans ["); - for (IEJBWebserviceEndpoint ep : endpointsGroup) { - sb.append(ep.getContextNamingInfo().getBeanName()); - sb.append(" "); - } - sb.append("]. "); - sb.append("Specify the / element in the META-INF/easybeans.xml "); - sb.append("or set compatibles / (or /)"); - - throw new WSException(sb.toString()); - } - } - } - - return endpoints; - } - - /** - * Find the WebContext with the given name in the list of provided WebContexts. - * @param contexts searched list - * @param name key - * @return the name matching WebContext, null if not found. - */ - private WebContext findWebContext(final Set contexts, - final String name) { - for(WebContext webContext : contexts) { - if (name.equals(webContext.getContextName())) { - return webContext; - } - } - - return null; - } - - /** - * @return the default Host of tomcat - */ - private Host getDefaultHost() { - return tomcatService.findHost(null); - } - - /** - * Creates an empty (no servlets registered) StandardContext setup for serving webservices endpoints. - * @param contextName name of the context - * @return a configured Context - */ - protected JOnASStandardContext createWebservicesContext(final String contextName) { - - // Create the context instance - JOnASStandardContext context = new JOnASStandardContext(false, true, false); - context.setPath(contextName); - - context.setTomcatService(tomcatService); - - // I need here a valid File in the work directory of JOnAS - File docBase = new File(workDirectory, contextName); - if (!docBase.exists()) { - docBase.mkdirs(); - } // TODO remove the directory ? - context.setDocBase(docBase.getPath()); - - // This listener is here to tell tomcat that the Context is - // OK for startup, even if no ContextConfig was set. - context.addLifecycleListener(new WebservicesContextLifecycleListener()); - - // This is required to set the right Authenticator in the Pipeline - context.addLifecycleListener(new ContextConfig()); - - return context; - } - - /** - * Compute a context root for a given endpoint - * @param endpoint endpoint that will be deployed on the computed context - * @return a possible web context name - * @throws WSException if context computation failed - */ - private String getContextRoot(final IEJBWebserviceEndpoint endpoint) throws WSException { - - String name = endpoint.getPortMetaData().getContextRoot(); - if (name == null) { - // Get the naming strategy - // TODO should be configurable - IContextNamingStrategy strategy = new EjbJarContextNamingStrategy(); - - try { - name = strategy.getContextName(endpoint.getContextNamingInfo()); - } catch (ContextNamingStrategyException e) { - throw new WSException("Cannot define a web context name for endpoint " + endpoint, e); - } - } - - // Fix the name if required - if (!name.startsWith("/")) { - name = "/" + name; - } - // Store it - // TODO get ride of the PMD.contextRoot property - endpoint.getPortMetaData().setContextRoot(name); - endpoint.getDeploymentInfos().put(IEJBWebserviceEndpoint.KEY_CONTEXT_NAME, name); - - return name; - - } - - /** - * Wrap the WS endpoint in a StandardWrapper instance that represents the Servlet. - * @param endpoint endpoint to be wrapped - * @return a Servlet representation - */ - protected StandardWrapper wrapWebserviceEndpoint(final IEJBWebserviceEndpoint endpoint) { - IContextNamingInfo info = endpoint.getContextNamingInfo(); - // Name the servlet after the bean's name - StandardWrapper wrapper = new WebServiceEndpointStandardWrapper(endpoint, info.getBeanName()); - wrapper.setParentClassLoader(this.getClass().getClassLoader()); - return wrapper; - } - - /** - * A specialized LifecyleListener for WS Contexts. - */ - private static class WebservicesContextLifecycleListener implements LifecycleListener { - - public void lifecycleEvent(LifecycleEvent lifecycleEvent) { - - if (Lifecycle.START_EVENT.equals(lifecycleEvent.getType())) { - - // Tell tomcat that the context is configured - Context ctx = (Context) lifecycleEvent.getLifecycle(); - ctx.setConfigured(true); - } else if (Lifecycle.AFTER_START_EVENT.equals(lifecycleEvent.getType())) { - - // Cleanup registered application listeners (such as JSF, ...) - // This avoid some un-interesting traces - Context ctx = (Context) lifecycleEvent.getLifecycle(); - String[] listeners = ctx.findApplicationListeners(); - for (String listener : listeners) { - ctx.removeApplicationListener(listener); - } - } - } - } - - /** - * Data holder. - */ - private static class WebContext { - - /** - * Name of the context. - */ - private String contextName; - - /** - * Realm/resource name (for JACC realm). - */ - private String realmName; - - /** - * JAAS entry name (for JAAS realm). - */ - private String jaasEntry; - - /** - * Construct a WebContext. - * @param name - * @param realmName - * @param jaasEntry - */ - public WebContext(final String name, - final String realmName, - final String jaasEntry) { - this.contextName = name; - this.realmName = realmName; - this.jaasEntry = jaasEntry; - } - - public String getContextName() { - return contextName; - } - - public String getRealmName() { - return realmName; - } - - public String getJaasEntry() { - return jaasEntry; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - WebContext that = (WebContext) o; - - if (contextName != null ? !contextName.equals(that.contextName) : that.contextName != null) return false; - if (jaasEntry != null ? !jaasEntry.equals(that.jaasEntry) : that.jaasEntry != null) return false; - if (realmName != null ? !realmName.equals(that.realmName) : that.realmName != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = contextName != null ? contextName.hashCode() : 0; - result = 31 * result + (realmName != null ? realmName.hashCode() : 0); - result = 31 * result + (jaasEntry != null ? jaasEntry.hashCode() : 0); - return result; - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/security/SecureWebDeploymentDescBuilder.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/security/SecureWebDeploymentDescBuilder.java deleted file mode 100644 index 4b4283323b..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/security/SecureWebDeploymentDescBuilder.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws.security; - -import java.util.List; - -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.deployment.web.xml.JonasWebApp; -import org.ow2.jonas.deployment.web.xml.WebApp; -import org.ow2.jonas.deployment.web.xml.SecurityConstraint; -import org.ow2.jonas.deployment.web.xml.AuthConstraint; -import org.ow2.jonas.deployment.web.xml.UserDataConstraint; -import org.ow2.jonas.deployment.web.xml.WebResourceCollection; -import org.ow2.jonas.deployment.common.xml.SecurityRole; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.WSException; - -/** - * The SecureWebDeploymentDescBuilder is responsible of building, from a list of - * endpoints defined security constraints, a web deployment descriptor strctured - * tailored for web security. - * - * @author Guillaume Sauthier - */ -public class SecureWebDeploymentDescBuilder { - - /** - * Creates the Web DD structure. - * @param security list of security constraints - * @return a security tailored deployment descriptor - * @throws WSException if the descriptor cannot be created - */ - public WebContainerDeploymentDesc createJOnASWebDescriptor(final List security) throws WSException { - try { - return new WebContainerDeploymentDesc(null, // filename: none - this.getClass().getClassLoader(), // unused in our case: no classes to load - createWebApp(security), // the structure mirroring a security only web.xml - new JonasWebApp(), // empty jonas-web.xml - null); // no metadata associated - } catch (DeploymentDescException e) { - throw new WSException("Cannot construct secured web deployment descriptor", e); - } - } - - /** - * Construct the web.xml mirroring structure. - * @param constraints list of constraints to be translated into a web.xml - * @return a WebApp XML structure - */ - private WebApp createWebApp(final List constraints) { - - // In all case, creates an empty webapp - WebApp webApp = new WebApp(); - - if (!constraints.isEmpty()) { - - // Process all the constraints - for (ISecurityConstraint constraint : constraints) { - // security-constraint - SecurityConstraint sc = new SecurityConstraint(); - webApp.addSecurityConstraint(sc); - - // security-constraint/user-data-constraint - UserDataConstraint udc = new UserDataConstraint(); - sc.setUserDataConstraint(udc); - // security-constraint/user-data-constraint/transport-guarantee - String transportGuarantee = constraint.getTransportGuarantee(); - if (transportGuarantee == null) { - transportGuarantee = "NONE"; - } - udc.setTransportGuarantee(transportGuarantee); - - // security-constraint/auth-constraint - AuthConstraint ac = new AuthConstraint(); - sc.setAuthConstraint(ac); - // security-constraint/auth-constraint/role-name - for (String role : constraint.getRoleNames()) { - ac.addRoleName(role); - } - - // security-constraint/web-resource-collection - WebResourceCollection collection = new WebResourceCollection(); - collection.setWebResourceName("default"); - sc.addWebResourceCollection(collection); - // security-constraint/web-resource-collection/url-pattern - collection.addUrlPattern(constraint.getUrlPattern()); - // security-constraint/web-resource-collection/http-method - if (constraint.getHttpMethods() != null) { - for (String method : constraint.getHttpMethods()) { - collection.addHttpMethod(method); - } - } - - // security-role - for (String role : constraint.getRoleNames()) { - SecurityRole sr = new SecurityRole(); - sr.setRoleName(role); - webApp.addSecurityRole(sr); - } - - } - } - - return webApp; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/EjbJarContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/EjbJarContextNamingStrategy.java deleted file mode 100644 index 469cb0dbdd..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/EjbJarContextNamingStrategy.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws.strategy; - -import java.io.File; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The EjbJarContextNamingStrategy computes a web context name based on the EjbJar filename. - * - * @author Guillaume Sauthier - */ -public class EjbJarContextNamingStrategy implements IContextNamingStrategy { - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - return getCleanedName(info.getContainerName()); - } - - /** - * Clean-up the name given in parameter. - * @param name name to be cleaned up - * @return cleaned name - */ - private String getCleanedName(final String name) { - - // Strip off everything before the last '/' or '\' - int pathSeparatorIndex = name.lastIndexOf(File.separatorChar); - String cleanedName = name.substring(pathSeparatorIndex + 1, name.length()); - - // Strip off everything after the first remaining '_' - int underscoreIndex = cleanedName.indexOf('_'); - if (underscoreIndex != -1) { - return cleanedName.substring(0, underscoreIndex); - } - - // Strip off the extension - int dotIndex = cleanedName.lastIndexOf('.'); - if (dotIndex != -1) { - return cleanedName.substring(0, dotIndex); - } - - // return as-is - return cleanedName; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/FixedContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/FixedContextNamingStrategy.java deleted file mode 100644 index 6616ad4b09..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/FixedContextNamingStrategy.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws.strategy; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The FixedContextNamingStrategy simply return the web context name - * that has been assigned to this strategy. - * - * @author Guillaume Sauthier - */ -public class FixedContextNamingStrategy implements IContextNamingStrategy { - - /** - * Fixed context name. - */ - private String contextName; - - public FixedContextNamingStrategy() { - } - - public FixedContextNamingStrategy(final String contextName) { - setContextName(contextName); - } - - public void setContextName(final String contextName) { - this.contextName = contextName; - } - - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - if (contextName == null) { - throw new ContextNamingStrategyException("Missing contextName value."); - } - return contextName; - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/ServiceContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/ServiceContextNamingStrategy.java deleted file mode 100644 index 8e0d1eff04..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/java/org/ow2/jonas/web/tomcat6/ws/strategy/ServiceContextNamingStrategy.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat6.ws.strategy; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The ServiceContextNamingStrategy computes a web context name based - * on the Service QName of the endpoint. - * - * @author Guillaume Sauthier - */ -public class ServiceContextNamingStrategy implements IContextNamingStrategy { - - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - QName name = info.getEndpoint().getIdentifier().getServiceName(); - if (name == null) { - throw new ContextNamingStrategyException("Missing serviceName value."); - } - return name.getLocalPart(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-context.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-context.xml deleted file mode 100644 index a2b49aa613..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-context.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - WEB-INF/web.xml - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-server.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-server.xml deleted file mode 100644 index f1d544ecb8..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-server.xml +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-web.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-web.xml deleted file mode 100644 index c1bbf5f2cd..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/jonas-resources/conf/tomcat6-web.xml +++ /dev/null @@ -1,1203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - org.apache.catalina.servlets.DefaultServlet - - debug - 0 - - - listings - false - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.apache.jasper.servlet.JspServlet - - fork - false - - - xpoweredBy - false - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - / - - - - - - - - jsp - *.jsp - - - - jsp - *.jspx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 - - - - - - - - - - - - abs - audio/x-mpeg - - - ai - application/postscript - - - aif - audio/x-aiff - - - aifc - audio/x-aiff - - - aiff - audio/x-aiff - - - aim - application/x-aim - - - art - image/x-jg - - - asf - video/x-ms-asf - - - asx - video/x-ms-asf - - - au - audio/basic - - - avi - video/x-msvideo - - - avx - video/x-rad-screenplay - - - bcpio - application/x-bcpio - - - bin - application/octet-stream - - - bmp - image/bmp - - - body - text/html - - - cdf - application/x-cdf - - - cer - application/x-x509-ca-cert - - - class - application/java - - - cpio - application/x-cpio - - - csh - application/x-csh - - - css - text/css - - - dib - image/bmp - - - doc - application/msword - - - dtd - application/xml-dtd - - - dv - video/x-dv - - - dvi - application/x-dvi - - - eps - application/postscript - - - etx - text/x-setext - - - exe - application/octet-stream - - - gif - image/gif - - - gtar - application/x-gtar - - - gz - application/x-gzip - - - hdf - application/x-hdf - - - hqx - application/mac-binhex40 - - - htc - text/x-component - - - htm - text/html - - - html - text/html - - - hqx - application/mac-binhex40 - - - ief - image/ief - - - jad - text/vnd.sun.j2me.app-descriptor - - - jar - application/java-archive - - - java - text/plain - - - jnlp - application/x-java-jnlp-file - - - jpe - image/jpeg - - - jpeg - image/jpeg - - - jpg - image/jpeg - - - js - text/javascript - - - jsf - text/plain - - - jspf - text/plain - - - kar - audio/x-midi - - - latex - application/x-latex - - - m3u - audio/x-mpegurl - - - mac - image/x-macpaint - - - man - application/x-troff-man - - - mathml - application/mathml+xml - - - me - application/x-troff-me - - - mid - audio/x-midi - - - midi - audio/x-midi - - - mif - application/x-mif - - - mov - video/quicktime - - - movie - video/x-sgi-movie - - - mp1 - audio/x-mpeg - - - mp2 - audio/x-mpeg - - - mp3 - audio/x-mpeg - - - mp4 - video/mp4 - - - mpa - audio/x-mpeg - - - mpe - video/mpeg - - - mpeg - video/mpeg - - - mpega - audio/x-mpeg - - - mpg - video/mpeg - - - mpv2 - video/mpeg2 - - - ms - application/x-wais-source - - - nc - application/x-netcdf - - - oda - application/oda - - - - odb - application/vnd.oasis.opendocument.database - - - - odc - application/vnd.oasis.opendocument.chart - - - - odf - application/vnd.oasis.opendocument.formula - - - - odg - application/vnd.oasis.opendocument.graphics - - - - odi - application/vnd.oasis.opendocument.image - - - - odm - application/vnd.oasis.opendocument.text-master - - - - odp - application/vnd.oasis.opendocument.presentation - - - - ods - application/vnd.oasis.opendocument.spreadsheet - - - - odt - application/vnd.oasis.opendocument.text - - - ogg - application/ogg - - - - otg - application/vnd.oasis.opendocument.graphics-template - - - - oth - application/vnd.oasis.opendocument.text-web - - - - otp - application/vnd.oasis.opendocument.presentation-template - - - - ots - application/vnd.oasis.opendocument.spreadsheet-template - - - - ott - application/vnd.oasis.opendocument.text-template - - - pbm - image/x-portable-bitmap - - - pct - image/pict - - - pdf - application/pdf - - - pgm - image/x-portable-graymap - - - pic - image/pict - - - pict - image/pict - - - pls - audio/x-scpls - - - png - image/png - - - pnm - image/x-portable-anymap - - - pnt - image/x-macpaint - - - ppm - image/x-portable-pixmap - - - ppt - application/powerpoint - - - ps - application/postscript - - - psd - image/x-photoshop - - - qt - video/quicktime - - - qti - image/x-quicktime - - - qtif - image/x-quicktime - - - ras - image/x-cmu-raster - - - rdf - application/rdf+xml - - - rgb - image/x-rgb - - - rm - application/vnd.rn-realmedia - - - roff - application/x-troff - - - rtf - application/rtf - - - rtx - text/richtext - - - sh - application/x-sh - - - shar - application/x-shar - - - - smf - audio/x-midi - - - sit - application/x-stuffit - - - snd - audio/basic - - - src - application/x-wais-source - - - sv4cpio - application/x-sv4cpio - - - sv4crc - application/x-sv4crc - - - swf - application/x-shockwave-flash - - - t - application/x-troff - - - tar - application/x-tar - - - tcl - application/x-tcl - - - tex - application/x-tex - - - texi - application/x-texinfo - - - texinfo - application/x-texinfo - - - tif - image/tiff - - - tiff - image/tiff - - - tr - application/x-troff - - - tsv - text/tab-separated-values - - - txt - text/plain - - - ulw - audio/basic - - - ustar - application/x-ustar - - - vxml - application/voicexml+xml - - - xbm - image/x-xbitmap - - - xht - application/xhtml+xml - - - xhtml - application/xhtml+xml - - - xml - application/xml - - - xpm - image/x-xpixmap - - - xsl - application/xml - - - xslt - application/xslt+xml - - - xul - application/vnd.mozilla.xul+xml - - - xwd - image/x-xwindowdump - - - wav - audio/x-wav - - - svg - image/svg+xml - - - svgz - image/svg+xml - - - vsd - application/x-visio - - - - wbmp - image/vnd.wap.wbmp - - - - wml - text/vnd.wap.wml - - - - wmlc - application/vnd.wap.wmlc - - - - wmls - text/vnd.wap.wmlscript - - - - wmlscriptc - application/vnd.wap.wmlscriptc - - - wmv - video/x-ms-wmv - - - wrl - x-world/x-vrml - - - Z - application/x-compress - - - z - application/x-compress - - - zip - application/zip - - - xls - application/vnd.ms-excel - - - doc - application/vnd.ms-word - - - ppt - application/vnd.ms-powerpoint - - - - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - - com.sun.faces.injectionProvider - com.sun.faces.vendor.Tomcat6InjectionProvider - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/patches/Response.patch b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/patches/Response.patch deleted file mode 100644 index 9413c8b24c..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/patches/Response.patch +++ /dev/null @@ -1,160 +0,0 @@ -Index: Response.java -=================================================================== ---- Response.java (revision 986040) -+++ Response.java (working copy) -@@ -1,3 +1,8 @@ -+/// Response.java from Tomcat 6.0.29 with JOnAS-specific modifications. -+/// -+/// Original file: -+/// https://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_29/java/org/apache/catalina/connector/Response.java -+ - /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with -@@ -55,11 +60,38 @@ - import org.apache.tomcat.util.net.URL; - - /** -+ * JOnAS: Java(TM) Open Application Server -+ * Copyright (C) 2010 Bull S.A.S. -+ * Contact: jonas-team@ow2.org -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -+ * -+ * -------------------------------------------------------------------------- -+ * $Id$ -+ * -------------------------------------------------------------------------- -+ */ -+ -+import org.ow2.jonas.web.tomcat6.versioning.FilteredOutputStream; -+import org.ow2.jonas.web.tomcat6.versioning.VersionedPathBean; -+ -+/** - * Wrapper object for the Coyote response. - * - * @author Remy Maucherat - * @author Craig R. McClanahan -- * @version $Id$ -+ * @version $Revision$ $Date$ - */ - - public class Response -@@ -127,9 +159,9 @@ - this.connector = connector; - if("AJP/1.3".equals(connector.getProtocol())) { - // default size to size of one ajp-packet -- outputBuffer = new OutputBuffer(8184); -+ outputBuffer = new FilteredOutputStream(this, 8184); - } else { -- outputBuffer = new OutputBuffer(); -+ outputBuffer = new FilteredOutputStream(this); - } - outputStream = new CoyoteOutputStream(outputBuffer); - writer = new CoyoteWriter(outputBuffer); -@@ -178,8 +210,28 @@ - request.setContext(context); - } - -+ /** -+ * Associated VersionedPathBean. -+ */ -+ protected VersionedPathBean versionedPathBean; - - /** -+ * Return the VersionedPathBean for the request. -+ */ -+ public VersionedPathBean getVersionedPathBean() { -+ return (this.versionedPathBean); -+ } -+ -+ /** -+ * Set the VersionedPathBean for the request. -+ * -+ * @param versionedPathBean The new VersionedPathBean -+ */ -+ public void setVersionedPathBean(VersionedPathBean versionedPathBean) { -+ this.versionedPathBean = versionedPathBean; -+ } -+ -+ /** - * The associated output buffer. - */ - protected OutputBuffer outputBuffer; -@@ -1044,6 +1096,15 @@ - - public StringBuffer generateCookieString(final Cookie cookie, - final boolean httpOnly) { -+ final String cookiePath; -+ if (versionedPathBean != null && cookie.getPath() != null && versionedPathBean.getUserPath() != null && -+ versionedPathBean.getVersionedPath() != null && cookie.getPath().startsWith(versionedPathBean.getVersionedPath())) { -+ cookiePath = versionedPathBean.getUserPath() + cookie.getPath().substring( -+ versionedPathBean.getVersionedPath().length()); -+ } else { -+ cookiePath = cookie.getPath(); -+ } -+ - final StringBuffer sb = new StringBuffer(); - //web application code can receive a IllegalArgumentException - //from the appendCookieValue invokation -@@ -1052,7 +1113,7 @@ - public Object run(){ - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), -- cookie.getValue(), cookie.getPath(), -+ cookie.getValue(), cookiePath, - cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), - httpOnly); -@@ -1062,7 +1123,7 @@ - } else { - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), cookie.getValue(), -- cookie.getPath(), cookie.getDomain(), cookie.getComment(), -+ cookiePath, cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), httpOnly); - } - return sb; -@@ -1338,6 +1399,17 @@ - // Clear any data content that has been buffered - resetBuffer(); - -+ if (versionedPathBean != null && versionedPathBean.getUserPath() != null && -+ versionedPathBean.getVersionedPath() != null && location.startsWith(versionedPathBean.getVersionedPath())) { -+ -+ if ("/".equals(versionedPathBean.getUserPath())) { -+ location = location.substring(versionedPathBean.getVersionedPath().length()); -+ } else { -+ location = versionedPathBean.getUserPath() + location.substring( -+ versionedPathBean.getVersionedPath().length()); -+ } -+ } -+ - // Generate a temporary redirect to the specified location - try { - String absolute = toAbsolute(location); -@@ -1597,7 +1669,12 @@ - redirectURLCC.append(portS, 0, portS.length()); - } - if (!leadingSlash) { -- String relativePath = request.getDecodedRequestURI(); -+ String relativePath; -+ if (versionedPathBean != null && versionedPathBean.getOriginalDecodedUri() != null) { -+ relativePath = versionedPathBean.getOriginalDecodedUri(); -+ } else { -+ relativePath = request.getDecodedRequestURI(); -+ } - int pos = relativePath.lastIndexOf('/'); - relativePath = relativePath.substring(0, pos); - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/properties/jonas-web-tomcat6.properties b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/properties/jonas-web-tomcat6.properties deleted file mode 100644 index d4d5bb3920..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/properties/jonas-web-tomcat6.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.web.class org.ow2.jonas.web.tomcat6.Tomcat6Service \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-6.0-core.bnd b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-6.0-core.bnd deleted file mode 100644 index b7b7b88168..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-6.0-core.bnd +++ /dev/null @@ -1,109 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Only export an API package -Export-Package org.ow2.jonas.web.tomcat6.custom - -# Need to export the Jasper classes used by the generated JSP classes (not in bundle) --exportcontents org.apache.jasper.runtime;version=${tomcat.version}, \ - org.apache.jasper.compiler.*;version=${tomcat.version}, \ - org.apache.jasper.el.*;version=${tomcat.version}, \ - org.apache.jasper.servlet;version=${tomcat.version}, \ - org.apache.jasper;version=${tomcat.version}, \ - org.apache.catalina.*;version=${tomcat.version}, \ - org.apache.el.*;version=${tomcat.version}, \ - org.apache.juli.*;version=${tomcat.version}, \ - org.apache;version=${tomcat.version} -# o.a.catalina.* must be exported because users with custon Tomcat configuration -# (using custom Valve for example) are extending Tomcat's classes (ValveBase is one of them) - -# Need to add this import (properties) because Bnd do not handle multiple level inheritance. -# Ant will not be used (eclipse compiler instead) -# Servlet/JSP resources are used by Digester -# org.eclipse.* are dependencies of the JDT core -# some packages are specific to Java 6+: -# * javax.annotation.processing -# * javax.lang.model -# * javax.tools -Import-Package !org.apache.tools.ant.*, \ - !org.eclipse.jdt.core, \ - !org.eclipse.core.*, \ - !org.eclipse.jdt.core.dom, \ - !org.eclipse.jdt.internal.core.builder, \ - !org.eclipse.jdt.internal.core, \ - !org.eclipse.jdt.internal.compiler.apt.dispatch, \ - javax.transaction.xa, \ - org.ow2.util.archive.api, \ - org.ow2.easybeans.api.naming, \ - org.ow2.easybeans.resolver.api, \ - org.ow2.easybeans.api, \ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - javax.annotation.processing;resolution:=optional,\ - javax.lang.model;resolution:=optional,\ - javax.lang.model.*;resolution:=optional,\ - javax.tools;resolution:=optional,\ - javax.persistence.*;version="[1.0.0,2.0.0]",\ - * - -Private-Package org.ow2.jonas.web.tomcat6.*, \ - org.apache;-split-package:=merge-first, \ - org.apache.jasper.*;-split-package:=merge-first, \ - org.apache.catalina.*;-split-package:=merge-first, \ - org.apache.naming.* - -# For Building new InitialContext() and finding java URLContextFactory -DynamicImport-Package javax.servlet.resources, \ - javax.servlet.jsp.resources, \ - org.slf4j, \ - org.ow2.cmi.jndi.context,\ - org.ow2.jonas.deployment.api, \ - org.ow2.jonas.lib.naming.*,\ - org.ow2.jonas.jmx, \ - org.ow2.util.ee.metadata.war.api, \ - org.ow2.util.ee.metadata.common.api.struct, \ - org.ow2.jonas.naming, \ - org.ow2.jonas.workcleaner, \ - org.ow2.jonas.ws.jaxrpc, \ - org.ow2.jonas.ws.jaxws, \ - org.ow2.jonas.ws.axis, \ - org.ow2.util.ee.deploy.api.deployer,\ - org.ow2.util.ee.deploy.api.deployable,\ - org.ow2.easybeans.persistence.api,\ - org.ow2.jonas.ws.jaxws.http.servlet,\ - org.ow2.jonas.addon.deploy.api.config,\ - * -# The final '*' for DIP is used to be able to load user declared -# classes (some custom Valve in the server.xml for example). - -# Avoid adding transitive dependencies as first level -# dependency in the POM to allow bundle inclusion -Embed-Transitive true - -Embed-Dependency asm;inline=true, \ - catalina-ha;inline=true,\ - coyote;inline=true, \ - tribes;inline=true, \ - juli;inline=true, \ - jasper-el;inline=true, \ - ecj;inline=true diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/metadata.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/metadata.xml deleted file mode 100644 index 3c2b02a7f4..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat6/mbeans-descriptors.xml b/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat6/mbeans-descriptors.xml deleted file mode 100644 index c10c3897be..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat6/mbeans-descriptors.xml +++ /dev/null @@ -1,487 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/6.0.x/pom.xml b/jonas/modules/services/web-container/tomcat/6.0.x/pom.xml deleted file mode 100644 index e1323af062..0000000000 --- a/jonas/modules/services/web-container/tomcat/6.0.x/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container-tomcat - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-tomcat-6.0 - pom - JOnAS :: Services :: Web Container :: Tomcat :: 6.0.x - Implementation for Tomcat 6.0.x - - core - ant - addons - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/pom.xml b/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/pom.xml deleted file mode 100644 index bc33b3be52..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/pom.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - jonas-webcontainer-tomcat-7.0-addons - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - JOnAS :: Services :: Web Container :: Tomcat :: 7.0.x :: Addons :: Addon with deployment plan - jonas-web-container-tomcat-7.0-addon-with-deployment-plans - pom - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-deployment-plans - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-base-core - deployment-plan - ${project.version} - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deployment-plan - ${project.version} - - - ${project.build.directory}/deployment-plan - META-INF/** - - * - - - - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - true - - ${project.build.directory}/repository - - ${project.build.directory}/deployment-plan/web-tomcat7.xml - - - - - generate-repository - generate-sources - - legacy-provision-repository - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - generate-assembly - package - - single - - - - - - src/main/assembly/assembly.xml - - - false - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml b/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml deleted file mode 100644 index acc4e40c4c..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/addons/addon-with-deployment-plans/src/main/assembly/assembly.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - bin - - zip - - false - - - - - ../target/extra-resources - META-INF/ - 774 - - - - - ../${project.build.directory}/conf - conf/ - - * - - - - - - ${project.build.directory}/deployment-plan - deploy/ - - * - - - - - ../${project.build.directory}/deploy - deploy/ - - * - - - - - - ${project.build.directory}/repository - repository/ - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/addons/pom.xml b/jonas/modules/services/web-container/tomcat/7.0.x/addons/pom.xml deleted file mode 100644 index 775db7d623..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/addons/pom.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - jonas-web-container-tomcat-7.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - pom - JOnAS :: Services :: Web Container :: Tomcat :: 7.0.x :: Addons - - addon-with-deployment-plans - - jonas-webcontainer-tomcat-7.0-addons - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack-addon-configuration-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - config - ${project.version} - - - ${project.build.directory}/conf - META-INF/** - - * - - - - - unpack-addon-deploy-files - - unpack - - generate-sources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deploy - ${project.version} - - - ${project.build.directory}/deploy - META-INF/** - - * - - - - - - - maven-resources-plugin - - - copy-resources - process-resources - - copy-resources - - - ${project.build.directory}/extra-resources - - - src/main/resources/META-INF/ - true - - jonas-addon.xml - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/addons/src/main/resources/META-INF/jonas-addon.xml b/jonas/modules/services/web-container/tomcat/7.0.x/addons/src/main/resources/META-INF/jonas-addon.xml deleted file mode 100644 index 438d1d7257..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/addons/src/main/resources/META-INF/jonas-addon.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - tomcat7 - - - Tomcat7 Addon - - - The JOnAS Team - - - LGPL - - - [${project.version}] - - - true - - - [1.0,2.0] - - - - http://my.repositories.com - - - - jonas.service.tomcat7 - - - - - - org.ow2.jonas.web.tomcat7.Tomcat7Service - - true - - true - - 0 - - true - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/pom.xml b/jonas/modules/services/web-container/tomcat/7.0.x/ant/pom.xml deleted file mode 100644 index be5bc04b72..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - jonas-web-container-tomcat-7.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-7.0-ant - bundle - JOnAS :: Services :: Web Container :: Tomcat :: 7.0.x :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-tomcat-base-ant - ${project.version} - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - unpack-jonas-configuration - - unpack - - generate-resources - - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - deploy - ${project.version} - - - ${project.build.directory}/generated-resources/templates/web/tomcat7/deploy/optional - META-INF/** - - - - - - - - src/main/resources - - - ${project.build.directory}/generated-resources - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7.java b/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7.java deleted file mode 100644 index 3d63234032..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat7; - -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.Tomcat; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatSessionManager; -import org.ow2.jonas.antmodular.web.base.Cluster; -import org.ow2.jonas.antmodular.web.base.SessionReplication; - -/** - * Support Tomcat 7 Connector Configuration. - * Prefered order : http, director, ajp, https, cluster. - * - * @author Jeremy Cazaux - */ -public class Tomcat7 extends Tomcat { - - /** - * Name of the implementation class for Tomcat. - */ - private static final String TOMCAT_SERVICE = "org.ow2.jonas.web.tomcat7.Tomcat7Service"; - - /** - * Name of the tomcat server file - */ - public static final String TOMCAT_SERVER_CONF_FILE = "tomcat7-server.xml"; - - /** - * Name of the tomcat context file - */ - public static final String TOMCAT_CONTEXT_CONF_FILE = "tomcat7-context.xml"; - - /** - * Default Constructor. - */ - public Tomcat7() { - super(); - } - - /** - * Configure a Cluster HTTP Session. - * @param cluster Cluster HTTP Session. - */ - @Override - @Deprecated - public void addConfiguredCluster(final Cluster cluster) { - addConfiguredSessionReplication(cluster); - } - - /** - * {@inheritDoc} - */ - @Override - public void addConfiguredSessionReplication(final SessionReplication sessionReplication) { - super.addConfiguredSessionReplication(sessionReplication, TOMCAT_SERVER_CONF_FILE); - } - - /** - * Configure Tomcat7's connectors - * @param tomcat7Connectors - */ - public void addConfiguredConnectors(final Tomcat7Connectors tomcat7Connectors) { - this.tasks.add(tomcat7Connectors); - } - - /** - * Configure a jvmRoute. - * @param jvmRoute jvm route name - */ - @Override - public void setJvmRoute(final String jvmRoute) { - super.setJvmRoute(jvmRoute, TOMCAT_SERVER_CONF_FILE); - } - - /** - * {@inheritDoc} - */ - @Override - public void addConfiguredSessionManager(final TomcatSessionManager tomcatSessionManager) { - super.addConfiguredSessionManager(tomcatSessionManager, TOMCAT_CONTEXT_CONF_FILE); - } - - /** - * Set the port number for the WebContainer - * @param portNumber the port number - */ - @Override - public void setPort(String portNumber) { - super.setPort(portNumber, TOMCAT_SERVER_CONF_FILE, "tomcat"); - } - - /** - * Execute all tasks - */ - @Override - public void execute() { - super.execute(); - super.createServiceNameReplace(this.TOMCAT_SERVICE, this.INFO, this.destDir.getAbsolutePath() + this.CONF_DIR); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7Connectors.java b/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7Connectors.java deleted file mode 100644 index ec03ff0458..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat7/Tomcat7Connectors.java +++ /dev/null @@ -1,424 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat7; - -import org.apache.tools.ant.Project; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatAjp; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatConnectors; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatHttp; -import org.ow2.jonas.antmodular.jonasbase.web.tomcat.TomcatHttps; -import org.ow2.jonas.antmodular.web.base.Director; -import org.ow2.jonas.antmodular.web.base.Http; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; - -/** - * Configure a Tomcat 7 Connector - * @author Jeremy Cazaux - */ -public class Tomcat7Connectors extends TomcatConnectors { - - /** - * The tomcat 7 http connector available in (JONAS_BASE/deploy) - */ - public static final String TOMCAT_7_HTPP_CONNECTOR = "tomcat7-http-connector.xml"; - - /** - * Tomcat 7 https connector to create - */ - public static final String TOMCAT_7_HTTPS_CONNECTOR = "tomcat7-https-connector.xml"; - - /** - * Tomcat 7 AJP connector to create - */ - public static final String TOMCAT_7_AJP_CONNECTOR = "tomcat7-ajp-connector.xml"; - - /** - * EOL - */ - public static final String EOL = "\n"; - - /** - * Package of optional deployables - */ - public static final String OPTIONAL_DEPLOYABLE_PACKAGE = "templates/web/tomcat7/deploy/optional/"; - - /** - * The http redirect port configured - */ - public String httpRedirectPort; - - /** - * Default constructor - */ - public Tomcat7Connectors() { - super(); - } - - /** - * Configure a HTTP Connector. - * @param tomcatHttp Tomcat HTTP Configuration. - */ - @Override - public void addConfiguredHttp(final TomcatHttp tomcatHttp) { - this.httpConfigured = true; - - String port = tomcatHttp.getPort(); - String redirectPort = tomcatHttp.getRedirectPort(); - String maxThreads = tomcatHttp.getMaxThreads(); - String minSpareThreads = tomcatHttp.getMinSpareThreads(); - String enableLookups = tomcatHttp.getEnableLookups(); - String connectionTimeout = tomcatHttp.getConnectionTimeout(); - String acceptCount = tomcatHttp.getAcceptCount(); - String compression = tomcatHttp.getCompression(); - String maxKeepAliveRequests = tomcatHttp.getMaxKeepAliveRequest(); - - if (!this.skipOptionalDeployablesCopy) { - //if the http connector already exist (copied from the template dir), update it - JReplace propertyReplace = new JReplace(); - propertyReplace.setDeployableFile(TOMCAT_7_HTPP_CONNECTOR); - propertyReplace.setToken("" + Http.DEFAULT_PORT + ""); - StringBuilder value = new StringBuilder(); - value.append("" + port + ""); - - if (maxThreads != null) { - value.append(EOL + " " + maxThreads + ""); - } - - if (minSpareThreads != null) { - value.append(EOL + " " + minSpareThreads +""); - } - - if (enableLookups != null) { - value.append(EOL + " " + tomcatHttp.getEnableLookups() + ""); - } - - if (connectionTimeout != null) { - value.append(EOL + " " + connectionTimeout + ""); - } - - if (acceptCount != null) { - value.append(EOL + " " + acceptCount + ""); - } - - if (compression != null) { - value.append(EOL + " " + compression + ""); - } - - if (maxKeepAliveRequests != null) { - value.append(EOL + " " + maxKeepAliveRequests + ""); - } - - propertyReplace.setValue(value.toString()); - addTask(propertyReplace); - - if (redirectPort != null) { - //replace redirectPort - JReplace redirectPortReplace = new JReplace(); - redirectPortReplace.setDeployableFile(TOMCAT_7_HTPP_CONNECTOR); - if (this.httpRedirectPort != null) { - redirectPortReplace.setToken("" + this.httpRedirectPort + ""); - } else { - redirectPortReplace.setToken("" + TomcatHttp.DEFAULT_REDIRECT_PORT + ""); - } - redirectPortReplace.setValue("" + redirectPort + ""); - addTask(redirectPortReplace); - this.httpRedirectPort = redirectPort; - } - } else { - //create a new http connector file - File httpConnectorFile = new File(getJOnASBase(), "deploy" + File.separator + TOMCAT_7_HTPP_CONNECTOR); - FileOutputStream outputStream = null; - - try { - try { - outputStream = new FileOutputStream(httpConnectorFile); - } catch (FileNotFoundException e) { - log("Cannot create file " + httpConnectorFile.getAbsolutePath() + ": " + e,Project.MSG_ERR); - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(""); - stringBuilder.append(EOL + ""); - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + " " + port + ""); - - if (redirectPort != null) { - stringBuilder.append(EOL + " " + redirectPort + ""); - } - - if (maxThreads != null) { - stringBuilder.append(EOL + " " + maxThreads + ""); - } - - if (minSpareThreads != null) { - stringBuilder.append(EOL + " " + minSpareThreads +""); - } - - if (enableLookups != null) { - stringBuilder.append(EOL + " " + tomcatHttp.getEnableLookups() + ""); - } - - if (connectionTimeout != null) { - stringBuilder.append(EOL + " " + connectionTimeout + ""); - } - - if (acceptCount != null) { - stringBuilder.append(EOL + " " + acceptCount + ""); - } - - if (compression != null) { - stringBuilder.append(EOL + " " + compression + ""); - } - - if (maxKeepAliveRequests != null) { - stringBuilder.append(EOL + " " + maxKeepAliveRequests + ""); - } - - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + ""); - - try { - outputStream.write(stringBuilder.toString().getBytes()); - } catch (IOException e) { - log("Cannot write " + stringBuilder.toString() + " into the output file " + httpConnectorFile.getAbsolutePath() - + " :" + e, Project.MSG_ERR); - } - - } finally { - try { - outputStream.close(); - } catch (IOException e) { - log("Cannot close the FileOutputStream resource " + e, Project.MSG_ERR); - } - } - } - - } - - - /** - * Configure a HTTPS Connector. - * @param tomcatHttps Tomcat HTTPS Configuration. - */ - @Override - public void addConfiguredHttps(final TomcatHttps tomcatHttps) { - super.addConfiguredHttps(tomcatHttps, Tomcat7.TOMCAT_SERVER_CONF_FILE); - final File httpsConnectorFile = new File(getJOnASBase(), "deploy" + File.separator + TOMCAT_7_HTTPS_CONNECTOR); - FileOutputStream fileOutputStream = null; - try { - try { - fileOutputStream = new FileOutputStream(httpsConnectorFile); - } catch (FileNotFoundException e) { - log("Cannot create file " + httpsConnectorFile.getAbsolutePath() + ": " + e,Project.MSG_ERR); - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(""); - stringBuilder.append(EOL + ""); - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + " localhost"); - stringBuilder.append(EOL + " " + tomcatHttps.getPort() + ""); - - final String redirectPort = tomcatHttps.getRedirectPort(); - if (redirectPort != null) { - stringBuilder.append(EOL + " " + redirectPort + ""); - } - - final String maxThreads = tomcatHttps.getMaxThreads(); - if (maxThreads != null) { - stringBuilder.append(EOL + " " + maxThreads + ""); - } - - final String minSpareThreads = tomcatHttps.getMinSpareThreads(); - if (minSpareThreads != null) { - stringBuilder.append(EOL + " " + minSpareThreads +""); - } - - final String enableLookups = tomcatHttps.getEnableLookups(); - if (enableLookups != null) { - stringBuilder.append(EOL + " " + enableLookups + ""); - } - - final String connectionTimeout = tomcatHttps.getConnectionTimeout(); - if (connectionTimeout != null) { - stringBuilder.append(EOL + " " + connectionTimeout + ""); - } - - final String acceptCount = tomcatHttps.getAcceptCount(); - if (acceptCount != null) { - stringBuilder.append(EOL + " " + acceptCount + ""); - } - - final String compression = tomcatHttps.getCompression(); - if (compression != null) { - stringBuilder.append(EOL + " " + compression + ""); - } - - final String maxKeepAliveRequests = tomcatHttps.getMaxKeepAliveRequest(); - if (maxKeepAliveRequests != null) { - stringBuilder.append(EOL + " " + maxKeepAliveRequests + ""); - } - - final String keystore = tomcatHttps.getKeystoreFile(); - if (keystore != null) { - stringBuilder.append(EOL + " " + keystore + ""); - } - - final String keystorePass = tomcatHttps.getKeystorePass(); - if (keystorePass != null) { - stringBuilder.append(EOL + " " + keystorePass + ""); - } - - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + ""); - - try { - fileOutputStream.write(stringBuilder.toString().getBytes()); - } catch (IOException e) { - log("Cannot write " + stringBuilder.toString() + " into the output file " + httpsConnectorFile.getAbsolutePath() - + " :" + e, Project.MSG_ERR); - } - - } finally { - try { - fileOutputStream.close(); - } catch (IOException e) { - log("Cannot close the FileOutputStream resource " + e, Project.MSG_ERR); - } - } - - //replace http redirect port with the https port value - JReplace propertyReplace = new JReplace(); - propertyReplace.setDeployableFile(TOMCAT_7_HTPP_CONNECTOR); - if (this.httpRedirectPort != null) { - propertyReplace.setToken("" + this.httpRedirectPort + ""); - } else { - propertyReplace.setToken("" + TomcatHttp.DEFAULT_REDIRECT_PORT + ""); - } - String httpsPort = tomcatHttps.getPort(); - propertyReplace.setValue("" + httpsPort + ""); - addTask(propertyReplace); - this.httpRedirectPort = httpsPort; - } - - /** - * Configure a Director Connector. - * @param dir Director Configuration. - */ - @Override - public void addConfiguredDirector(final Director dir) { - super.addConfiguredDirector(dir, Tomcat7.TOMCAT_SERVER_CONF_FILE); - } - - /** - * Configure an AJP Connector. - * @param tomcatAjp AJP Configuration. - */ - @Override - public void addConfiguredAjp(TomcatAjp tomcatAjp) { - File ajpConnectorFile = new File(getJOnASBase(), "deploy" + File.separator + TOMCAT_7_AJP_CONNECTOR); - FileOutputStream fileOutputStream = null; - try { - try { - fileOutputStream = new FileOutputStream(ajpConnectorFile); - } catch (FileNotFoundException e) { - log("Cannot create file " + ajpConnectorFile.getAbsolutePath() + ": " + e,Project.MSG_ERR); - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(""); - stringBuilder.append(EOL + ""); - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + " localhost"); - stringBuilder.append(EOL + " " + tomcatAjp.getPort() + ""); - - String redirectPort = tomcatAjp.getRedirectPort(); - if (redirectPort == null) { - redirectPort = TomcatAjp.DEFAULT_REDIRECT_PORT; - } - stringBuilder.append(EOL + " " + redirectPort + ""); - - final String maxThreads = tomcatAjp.getMaxThreads(); - if (maxThreads != null) { - stringBuilder.append(EOL + " " + maxThreads + ""); - } - - final String minSpareThreads = tomcatAjp.getMinSpareThreads(); - if (minSpareThreads != null) { - stringBuilder.append(EOL + " " + minSpareThreads +""); - } - - final String enableLookups = tomcatAjp.getEnableLookups(); - if (enableLookups != null) { - stringBuilder.append(EOL + " " + enableLookups + ""); - } - - final String connectionTimeout = tomcatAjp.getConnectionTimeout(); - if (connectionTimeout != null) { - stringBuilder.append(EOL + " " + connectionTimeout + ""); - } - - final String acceptCount = tomcatAjp.getAcceptCount(); - if (acceptCount != null) { - stringBuilder.append(EOL + " " + acceptCount + ""); - } - - stringBuilder.append(EOL + " "); - stringBuilder.append(EOL + ""); - - - try { - fileOutputStream.write(stringBuilder.toString().getBytes()); - } catch (IOException e) { - log("Cannot write " + stringBuilder.toString() + " into the output file " + ajpConnectorFile.getAbsolutePath() - + " :" + e, Project.MSG_ERR); - } - - } finally { - try { - fileOutputStream.close(); - } catch (IOException e) { - log("Cannot close the FileOutputStream resource " + e, Project.MSG_ERR); - } - } - } - - @Override - public void execute() { - if (!this.skipOptionalDeployablesCopy) { - //copy optional template deployables - copyTemplateDeployables(OPTIONAL_DEPLOYABLE_PACKAGE); - } - - super.execute(); - super.executeAllTask(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/antlib-tomcat7.xml b/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/antlib-tomcat7.xml deleted file mode 100644 index e4273deb10..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/antlib-tomcat7.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.properties b/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.properties deleted file mode 100644 index 705bf06b43..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.properties +++ /dev/null @@ -1 +0,0 @@ -webcontainer.service.defaultname=tomcat7 \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.xml b/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.xml deleted file mode 100644 index 342deb1894..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/ant/src/main/resources/build-tomcat7.xml +++ /dev/null @@ -1,69 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/pom.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/pom.xml deleted file mode 100644 index af61729ccd..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/pom.xml +++ /dev/null @@ -1,387 +0,0 @@ - - - - - jonas-web-container-tomcat-7.0 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-web-container-tomcat-7.0-core - bundle - JOnAS :: Services :: Web Container :: Tomcat :: 7.0.x :: Core - - - - - org.apache.tomcat - tomcat-servlet-api - ${tomcat7.version} - provided - - - - - org.ow2.bundles - ow2-util-log - provided - - - - org.ow2.bundles - ow2-util-ee-metadata-common-api - provided - - - - org.ow2.jonas - jonas-security-core - ${project.version} - provided - - - - org.apache.tomcat - tomcat-catalina-ha - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - - org.apache.tomcat - tomcat-catalina - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - org.apache.tomcat - tomcat-coyote - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - org.apache.tomcat - tomcat-util - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - org.apache.tomcat - tomcat-api - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - org.apache.tomcat - tomcat-jasper-el - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - - - - org.apache.tomcat - tomcat-jasper - ${tomcat7.version} - - - org.apache.tomcat - tomcat-servlet-api - - - org.eclipse.jdt - ecj - - - - - - org.eclipse.jdt.core.compiler - ecj - 3.5.1 - - - - - - org.apache.tomcat - tomcat-tribes - ${tomcat7.version} - - - - org.apache.tomcat - tomcat-juli - ${tomcat7.version} - - - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - - org.apache.felix - org.apache.felix.ipojo.annotations - ${ipojo.version} - provided - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - false - - - - web-tomcat7 - - - org.ow2.jonas - jonas-web-container-tomcat-7.0-core - ${project.version} - - - - - - - - generate-jonas-services-maven2-deployment-plans - - generate-maven2-deployment-plans - - pre-integration-test - - url-internal - - - - - - maven-dependency-plugin - - - generate-sources - - unpack - - - - - org.apache.tomcat - tomcat-catalina - ${tomcat7.version} - sources - jar - ${project.build.directory}/tomcat-catalina-sources - - - org.apache.tomcat - tomcat-jasper - ${tomcat7.version} - sources - jar - ${project.build.directory}/tomcat-catalina-sources - - - - - - - - maven-antrun-plugin - - - generate-sources - - run - - - - - - - - - - - - - - - - - - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper.version} - - - add-source - generate-sources - - add-source - - - - ${project.build.directory}/generated-sources/tomcat7 - - - - - - - maven-jar-plugin - - - attach-properties - compile - - jar - - - src/main/properties - ${project.build.directory} - properties - - **/.svn/** - - - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-deploy - compile - - jar - - - src/main/jonas-resources/deploy - ${project.build.directory} - deploy - - **/.svn/** - - - - - attach-deploy-example - compile - - jar - - - src/main/jonas-resources/deploy-example - ${project.build.directory} - deploy-example - - **/.svn/** - - - - - attach-deployment-plan - integration-test - - jar - - - ${project.build.directory}/configuration-resources/url-internal - ${project.build.directory} - deployment-plan - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/apache/AnnotationProcessor.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/apache/AnnotationProcessor.java deleted file mode 100644 index 3f9cdff5db..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/apache/AnnotationProcessor.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache; - -import java.lang.reflect.InvocationTargetException; - -import javax.naming.NamingException; - -/** - * Comment - * - * @author Bill Burke - * @version $Revision$ - */ -public interface AnnotationProcessor { - public void postConstruct(Object instance) - throws IllegalAccessException, InvocationTargetException; - public void preDestroy(Object instance) - throws IllegalAccessException, InvocationTargetException; - public void processAnnotations(Object instance) - throws IllegalAccessException, InvocationTargetException, NamingException; -} - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/CheckOpenResourcesValve.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/CheckOpenResourcesValve.java deleted file mode 100644 index 2063a54f75..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/CheckOpenResourcesValve.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import java.io.IOException; - -import javax.servlet.ServletException; - -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerInfo; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.jndi.checker.api.ResourceCheckpoints; - -/** - * Valve used to check if resources open in an http method are all closed at the end of the method call. - * @author Florent Benoit - */ -public class CheckOpenResourcesValve extends ValveBase { - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Default constructor with a given resource checker manager. - * @param resourceCheckerManager the given instance - */ - public CheckOpenResourcesValve(final IResourceCheckerManager resourceCheckerManager) { - super(true); - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception java.io.IOException if an input/output error occurs - * @exception javax.servlet.ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - try { - // call the next valve - getNext().invoke(request, response); - } finally { - // Check if resources are closed - resourceCheckerManager.detect(new ValveResourceCheckerInfo(request)); - resourceCheckerManager.delistAll(); - } - } - -} - -/** - * Checker info for valves. - * @author Florent Benoit - */ -class ValveResourceCheckerInfo implements IResourceCheckerInfo { - - /** - * Http request. - */ - private Request request = null; - - /** - * Build a checker info object based on the given request. - * @param request the given request - */ - public ValveResourceCheckerInfo(final Request request) { - this.request = request; - } - - /** - * @return checkpoint of the caller. - */ - public ResourceCheckpoints getCheckPoint() { - return ResourceCheckpoints.HTTP_AFTER_CALL; - } - - /** - * @return data for identifying the current caller (EJB Name, Servlet Name, etc) - */ - public String getCallerInfo() { - return request.getRequestURL().toString(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/FilterValveWrapper.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/FilterValveWrapper.java deleted file mode 100644 index 5391691bbc..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/FilterValveWrapper.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -import org.apache.catalina.Valve; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; - -/** - * This class allows to wrap an http filter into a Tomcat valve. - * @author Florent Benoit - */ -public class FilterValveWrapper extends ValveBase { - - /** - * Wrapped filter. - */ - private Filter filter = null; - - /** - * Default constructor wrapping the given filter. - * @param filter the given filter - */ - public FilterValveWrapper(final Filter filter) { - super(true); - this.filter = filter; - } - - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - filter.doFilter(request, response, new ValveFilterChain(getNext(), request, response)); - } - - -} - - -class ValveFilterChain implements FilterChain { - - private Valve valve = null; - - private Request request; - private Response response; - - public ValveFilterChain(final Valve valve, final Request request, final Response response) { - this.valve = valve; - this.request = request; - this.response = response; - } - - public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse) throws IOException, ServletException { - valve.invoke(request, response); - } - - - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JCatalinaRuleSet.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JCatalinaRuleSet.java deleted file mode 100644 index 67a457c884..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JCatalinaRuleSet.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import org.apache.catalina.Container; -import org.apache.catalina.startup.ConnectorCreateRule; -import org.apache.catalina.startup.ContextRuleSet; -import org.apache.catalina.startup.EngineRuleSet; -import org.apache.catalina.startup.HostRuleSet; -import org.apache.catalina.startup.NamingRuleSet; -import org.apache.catalina.ha.ClusterRuleSet; -import org.apache.catalina.startup.SetAllPropertiesRule; -import org.apache.tomcat.util.digester.Digester; -import org.apache.tomcat.util.digester.Rule; -import org.apache.tomcat.util.digester.RuleSetBase; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.web.tomcat7.security.Realm; -import org.xml.sax.Attributes; - -/** - * Defines the rules to parse the Tomcat server.xml file - * Some rules are customized for JOnAS. - * @author Tomcat team - * @author Florent Benoit - */ -public class JCatalinaRuleSet extends RuleSetBase { - - /** - * Parent class loader use for Tomcat. - */ - private ClassLoader parentClassLoader = null; - - /** - * SecurityService for the Realms. - */ - private SecurityService securityService = null; - - /** - * Constructor of the rules of parsing for server.xml. - * @param parentClassLoader the parent class loader to use - * @param securityService SecurityService for the Realms - */ - public JCatalinaRuleSet(final ClassLoader parentClassLoader, final SecurityService securityService) { - super(); - this.parentClassLoader = parentClassLoader; - this.securityService = securityService; - } - - - /** - * Add the rules to the digester object. - * @param digester object on whcih to define rules - */ - public void addRuleInstances(final Digester digester) { - - // Configure the actions we will be using - digester.addObjectCreate("Server", - "org.apache.catalina.core.StandardServer", - "className"); - digester.addSetProperties("Server"); - digester.addSetNext("Server", - "setServer", - "org.apache.catalina.Server"); - - digester.addObjectCreate("Server/GlobalNamingResources", - "org.apache.catalina.deploy.NamingResources"); - digester.addSetProperties("Server/GlobalNamingResources"); - digester.addSetNext("Server/GlobalNamingResources", - "setGlobalNamingResources", - "org.apache.catalina.deploy.NamingResources"); - - - digester.addObjectCreate("Server/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Listener"); - digester.addSetNext("Server/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - digester.addObjectCreate("Server/Service", - "org.apache.catalina.core.StandardService", - "className"); - digester.addSetProperties("Server/Service"); - digester.addSetNext("Server/Service", - "addService", - "org.apache.catalina.Service"); - - digester.addObjectCreate("Server/Service/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Service/Listener"); - digester.addSetNext("Server/Service/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - //Executor - digester.addObjectCreate("Server/Service/Executor", - "org.apache.catalina.core.StandardThreadExecutor", - "className"); - digester.addSetProperties("Server/Service/Executor"); - - digester.addSetNext("Server/Service/Executor", - "addExecutor", - "org.apache.catalina.Executor"); - - - digester.addRule("Server/Service/Connector", new ConnectorCreateRule()); - digester.addRule("Server/Service/Connector", new SetAllPropertiesRule(new String[] {"executor"})); - digester.addSetNext("Server/Service/Connector", "addConnector", "org.apache.catalina.connector.Connector"); - - - - - digester.addObjectCreate("Server/Service/Connector/Listener", - null, // MUST be specified in the element - "className"); - digester.addSetProperties("Server/Service/Connector/Listener"); - digester.addSetNext("Server/Service/Connector/Listener", - "addLifecycleListener", - "org.apache.catalina.LifecycleListener"); - - - // Add RuleSets for nested elements - digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/")); - digester.addRuleSet(new EngineRuleSet("Server/Service/")); - digester.addRuleSet(new HostRuleSet("Server/Service/Engine/")); - digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/")); - digester.addRuleSet(new ClusterRuleSet("Server/Service/Engine/Host/Cluster/")); - digester.addRuleSet(new NamingRuleSet("Server/Service/Engine/Host/Context/")); - - // When the 'engine' is found, set the parentClassLoader. - digester.addRule("Server/Service/Engine", - new SetParentClassLoaderRule(parentClassLoader)); - - // Assign SecurityService to the declared Realms - SetSecurityServiceRule sssr = new SetSecurityServiceRule(securityService); - digester.addRule("Server/Service/Engine/Realm", sssr); - digester.addRule("Server/Service/Engine/Host/Realm", sssr); - digester.addRule("Server/Service/Engine/Host/Context/Realm", sssr); - - digester.addRuleSet(new ClusterRuleSet("Server/Service/Engine/Cluster/")); - } -} - -/** - * Class that sets the parent class loader for the top class on the stack. - * @author take from Catalina. - */ -final class SetParentClassLoaderRule extends Rule { - - /** - * The parent class loader to be set. - */ - private ClassLoader parentClassLoader = null; - - - /** - * Construct a new action. - * @param parentClassLoader The new parent class loader - */ - public SetParentClassLoaderRule(final ClassLoader parentClassLoader) { - super(); - this.parentClassLoader = parentClassLoader; - } - - /** - * Add the requested parent class loader. - * @param namespace the namespace URI of the matching element, or an - * empty string if the parser is not namespace aware - * or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param attributes the attributes. - * @throws Exception if an error occurs. - */ - public void begin(final String namespace, final String name, final Attributes attributes) throws Exception { - Container top = (Container) digester.peek(); - top.setParentClassLoader(parentClassLoader); - } -} - -/** - * Class that sets the {@link SecurityService} for the top {@link Realm} on the stack. - * @author take from Catalina. - */ -final class SetSecurityServiceRule extends Rule { - - /** - * The {@link SecurityService} to be set. - */ - private SecurityService securityService = null; - - - /** - * Construct a new action. - * @param securityService The {@link SecurityService} - */ - public SetSecurityServiceRule(final SecurityService securityService) { - super(); - this.securityService = securityService; - } - - /** - * Add the {@link SecurityService}. - * @param namespace the namespace URI of the matching element, or an - * empty string if the parser is not namespace aware - * or the element has no namespace - * @param name the local name if the parser is namespace aware, - * or just the element name otherwise - * @param attributes the attributes. - * @throws Exception if an error occurs. - */ - public void begin(final String namespace, final String name, final Attributes attributes) throws Exception { - Object top = digester.peek(); - // We can only handle JOnAS JACC Realms - if (top instanceof Realm) { - Realm realm = (Realm) top; - realm.setSecurityService(securityService); - } - - } -} - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASContextConfig.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASContextConfig.java deleted file mode 100644 index c64f1c53be..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASContextConfig.java +++ /dev/null @@ -1,203 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import java.lang.reflect.Field; -import java.util.HashSet; -import java.util.Set; - -import javax.servlet.ServletContainerInitializer; -import javax.servlet.annotation.HandlesTypes; - -import org.apache.catalina.deploy.WebXml; -import org.apache.catalina.startup.ContextConfig; -import org.apache.tomcat.util.digester.Digester; -import org.ow2.jonas.security.SecurityService; -import org.xml.sax.InputSource; - -/** - * Own JOnAS context config object in order to change some default values. - * @author Florent BENOIT - */ -public class JOnASContextConfig extends ContextConfig { - - /** - * {@link SecurityService} instance to pass to the {@link org.ow2.jonas.web.tomcat7.security.Realm}s. - */ - private SecurityService service = null; - - /** - * Path to the default Context for Tomcat6 (can use /). - */ - public static final String DEFAULT_CONTEXT_XML = "conf/tomcat7-context.xml"; - - /** - * Path to the default Web.xml object for Tomcat6 (can use /). - */ - public static final String DEFAULT_WEB_XML = "conf/tomcat7-web.xml"; - - /** - * @return the location of the default deployment descriptor - */ - @Override - public String getDefaultWebXml() { - if (defaultWebXml == null) { - defaultWebXml = DEFAULT_WEB_XML; - } - - return (this.defaultWebXml); - - } - - /** - * @return the location of the default context file - */ - @Override - public String getDefaultContextXml() { - if (defaultContextXml == null) { - defaultContextXml = DEFAULT_CONTEXT_XML; - } - - return (this.defaultContextXml); - - } - - /** - * Extend META-INF/Context.xml Digester with JOnAS {@link SecurityService} setup. - * @return an extended Digester. - */ - @Override - protected Digester createContextDigester() { - // Get base Digester - Digester digester = super.createContextDigester(); - // If a JOnAS Realm is found, inject the SecurityService - digester.addRule("Context/Realm", new SetSecurityServiceRule(service)); - return digester; - } - - /** - * @param service {@link SecurityService} instance to assign. - */ - public void setSecurityService(final SecurityService service) { - this.service = service; - } - - - /** - * Process the application configuration file, if it exists. - */ - @Override - protected void webConfig() { - super.webConfig(); - - - // Keep value of the ignoreAnnotations flag - boolean ignore = context.getIgnoreAnnotations(); - if (ignore) { - org.apache.tomcat.InstanceManager instanceManager = ((org.apache.catalina.core.StandardContext) context).getInstanceManager(); - Class clazz= instanceManager.getClass(); - Field f = null; - try { - f = clazz.getDeclaredField("ignoreAnnotations"); - f.setAccessible(true); - f.set(instanceManager, Boolean.TRUE); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to find the field", e); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Unable to find the field", e); - } - - // Enable annotation processing - context.setIgnoreAnnotations(false); - - } - - - } - - /** - * Allows to check the publicId of the WebXML file if it needs to be applied on the context. - * It is used as convertJsp method on the super class will check if publicId is 2.2 before throwing error but this is done before setPublicid is done which is wrong ! - */ - @Override - protected void parseWebXml(final InputSource source, final WebXml dest, - final boolean fragment) { - super.parseWebXml(source, dest, fragment); - if (dest != null) { - if (dest.getPublicId() != null) { - context.setPublicId(dest.getPublicId()); - } - - // Update to specified version - String version = System.getProperty("jonas.servlet.enforcement.version"); - if (version != null) { - dest.setVersion(version); - } - - } - - - - } - public void addServletContainerInitializer(final ServletContainerInitializer initializer) { - - // TODO Try to have Tomcat method refactored so we could use it - - // Copy/Paste from ContextConfig.processServletContainerInitializers(Set fragments) - // Start -------------------------------------- - initializerClassMap.put(initializer, new HashSet>()); - - HandlesTypes ht =initializer.getClass().getAnnotation(HandlesTypes.class); - if (ht != null) { - Class[] types = ht.value(); - if (types != null) { - for (Class type : types) { - Set scis = typeInitializerMap.get(type); - if (scis == null) { - scis = new HashSet(); - typeInitializerMap.put(type, scis); - } - scis.add(initializer); - } - } - } - // End -------------------------------------- - - } - - /** - * @param tomcat7ContextConfPath The path to the tomcat 7 configuration file to set - */ - public void setDefaultContextXml(final String tomcat7ContextConfPath) { - this.defaultContextXml = tomcat7ContextConfPath; - } - - /** - * @param tomcat7WebConfPath Path to the tomcat 7 web configuration file to set - */ - public void setDefaultWebXml(final String tomcat7WebConfPath) { - this.defaultWebXml = tomcat7WebConfPath; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASNamingResources.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASNamingResources.java deleted file mode 100644 index 8fa914565b..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASNamingResources.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import org.apache.catalina.deploy.ContextEnvironment; -import org.apache.catalina.deploy.NamingResources; - -/** - * Manages our own Naming Resources as all parsing is already done by JOnAS. - * @author Florent Benoit - */ -public class JOnASNamingResources extends NamingResources { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -5216733209343793352L; - - - /** - * Add an environment entry for this web application. - * @param environment New environment entry - */ - public void addEnvironment(ContextEnvironment environment) { - if (environment != null && environment.getType() == null) { - environment.setType("java.lang.Object"); - } - super.addEnvironment(environment); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASStandardContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASStandardContext.java deleted file mode 100644 index 4ecb454d23..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/JOnASStandardContext.java +++ /dev/null @@ -1,695 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.Map; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.apache.catalina.Container; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.Loader; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.deploy.ContextEnvironment; -import org.apache.catalina.deploy.ContextResource; -import org.apache.catalina.deploy.MessageDestinationRef; -import org.apache.catalina.deploy.NamingResources; -import org.apache.catalina.loader.WebappLoader; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.web.tomcat7.loader.NoSystemAccessWebappClassLoader; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; - - - - -/** - * Define a JOnAS context. It is used to check if a context has been defined in - * server.xml and to use this context while deploying the war instead of - * creating a new one - * @author Florent Benoit - * @author Philippe Coq (Tomcat 4.0) - */ -public class JOnASStandardContext extends StandardContext { - - /** - * UID for the serialization. - */ - private static final long serialVersionUID = 1L; - - /** - * Unique instance of Catalina. - */ - private static transient Tomcat7Service catalinaService = null; - - /** - * Logger for this service. - */ - private static Log logger = LogFactory.getLog(JOnASStandardContext.class); - - /** - * URL of the ear. - */ - private URL earURL = null; - - /** - * We are in ear case or not ? - */ - private boolean inEarCase = false; - - /** - * This context was configured in server.xml ? - */ - private boolean inServerXml = false; - - /** - * Java 2 delegation model is use or not ? - */ - private boolean java2DelegationModel = false; - - /** - * WEB deployment descriptor. - */ - private WebContainerDeploymentDesc webDeploymentDescriptor = null; - - /** - * JOnAS deployment descriptor. - */ - private String jonasDeploymentDescriptor = null; - - /** - * Context was started ? - */ - private boolean startedJStdx = false; - - /** - * URL of the war. - */ - private URL warURL = null; - - /** - * J2EEApplication MBean OBJECT_NAME in ear case. - */ - private String earON = null; - - /** - * EJB ClassLoader. - */ - private ClassLoader ejbClassLoader = null; - - /** - * EAR ClassLoader. - */ - private ClassLoader earClassLoader = null; - - /** - * Filtering ClassLoader. - */ - private FilteringClassLoader filteringClassLoader = null; - - /** - * Injections map. - */ - private Map> injectionsMap = null; - - /** - * Env Context. - */ - private Context envContext = null; - - /** - * The naming resources for this web application. - */ - private NamingResources namingResources = null; - - /** - * Constructor of the Context. - */ - public JOnASStandardContext() { - this(true, true, false); - } - - /** - * Constructor of the Context. - * @param inServerXml this context was defined in server.xml - * @param java2DelegationModel delegation model for classloader is true ? - * @param inEarCase if we are or not in EAR case - */ - public JOnASStandardContext(final boolean inServerXml, final boolean java2DelegationModel, final boolean inEarCase) { - super(); - this.inServerXml = inServerXml; - this.java2DelegationModel = java2DelegationModel; - this.inEarCase = inEarCase; - } - - /** - * Assign the parent Tomcat6 WebContainerService. - * @param tomcat {@link Tomcat7Service} instance. - */ - public void setTomcatService(final Tomcat7Service tomcat) { - catalinaService = tomcat; - } - - /** - * @return Returns the earURL. - */ - public URL getEarURL() { - return earURL; - } - - /** - * Gets the web deployment descriptor content. - * @return the content of the web deployment descriptor - */ - public WebContainerDeploymentDesc getWebDeploymentDescriptor() { - return webDeploymentDescriptor; - } - - /** - * Gets the deployment descriptor content of jonas-web.xml file. - * @return the content of jonas-web.xml file - */ - public String getJonasDeploymentDescriptor() { - return jonasDeploymentDescriptor; - } - - /** - * @return Returns the warURL. - */ - public URL getWarURL() { - return warURL; - } - - /** - * @return true if this web module is a part of a EAR - */ - public boolean isInEarCase() { - return inEarCase; - } - - /** - * This context was defined in server.xml ? - * @return true if this context was defined in server.xml - */ - public boolean isInServerXml() { - return inServerXml; - } - - /** - * @return true if the Java2 delegation model is used - */ - public boolean isJava2DelegationModel() { - return java2DelegationModel; - } - - /** - * @param earURL The earURL to set. - */ - protected void setEarURL(final URL earURL) { - this.earURL = earURL; - // Determine the corresponding J2EEApplication ObjectName - ObjectName j2eeAppOn = null; - // Catalina StandardContext provides setter and getter for - // j2eeApplication attribute - // The setter was called in - // CatalinaJWebContainerServiceImpl.doRegisterWar method - // befor the call to this setter - String appName = getJ2EEApplication(); - // setServer() was called before this setter - String serverON = getServer(); - if (appName != null && serverON != null) { - ObjectName serverOn; - try { - serverOn = ObjectName.getInstance(serverON); - String domainName = serverOn.getDomain(); - String serverName = serverOn.getKeyProperty("name"); - j2eeAppOn = J2eeObjectName.J2EEApplication(domainName, serverName, appName); - } catch (MalformedObjectNameException e) { - logger.error("Cannot build the ObjectName for the context ''{0}''", e); - } - } - if (j2eeAppOn != null) { - earON = j2eeAppOn.toString(); - } - } - - /** - * @param inEarCase The inEarCase to set. - */ - protected void setInEarCase(final boolean inEarCase) { - this.inEarCase = inEarCase; - } - - /** - * @param java2DelegationModel The java2DelegationModel to set. - */ - protected void setJava2DelegationModel(final boolean java2DelegationModel) { - this.java2DelegationModel = java2DelegationModel; - } - - /** - * Set the web deployment descriptor content. - * @param webDeploymentDescriptor the content of the web deployment descriptor - */ - public void setWebDeploymentDescriptor(final WebContainerDeploymentDesc webDeploymentDescriptor) { - this.webDeploymentDescriptor = webDeploymentDescriptor; - } - - /** - * Set the deployment descriptor content of jonas-web.xml file. - * @param jonasDeploymentDescriptor the content of jonas-web.xml - */ - public void setJonasDeploymentDescriptor(final String jonasDeploymentDescriptor) { - this.jonasDeploymentDescriptor = jonasDeploymentDescriptor; - } - - /** - * @param warURL The warURL to set. - */ - protected void setWarURL(final URL warURL) { - this.warURL = warURL; - } - - /** - * Start the JOnAS context if catalina is started. - * @throws LifecycleException if the context can't be started - */ - @Override - public synchronized void startInternal() throws LifecycleException { - if (catalinaService != null && catalinaService.isTomcatStarted()) { - if (logger.isDebugEnabled()) { - logger.debug("Tomcat in Web container service is started, starting the context..."); - } - startedJStdx = true; - super.startInternal(); - } - - } - - /** - * Stop this Context component. - * @exception LifecycleException if a shutdown error occurs - */ - @Override - public synchronized void stopInternal() throws LifecycleException { - if (startedJStdx) { - startedJStdx = false; - super.stopInternal(); - } - - } - - /** - * Add a resource reference for this web application. Do nothing when - * running inside JOnAS. Resources are managed by JOnAS - * @param resource New resource reference - */ - public void addResource(final ContextResource resource) { - } - - /** - * Add an environment entry for this web application. Do nothing when - * running inside JOnAS. ENC environment is managed by JOnAS - * @param environment New environment entry - */ - public void addEnvironment(final ContextEnvironment environment) { - } - - /** - * Add a message destination reference for this web application. Do nothing when - * running inside JOnAS. Resources are managed by JOnAS - * @param mdr New message destination reference - */ - @Override - public void addMessageDestinationRef(final MessageDestinationRef mdr) { - - } - - /** - * Set the parent class loader for this web application. Do it only if it is - * not started. - * @param parent The new parent class loader - */ - @Override - public void setParentClassLoader(final ClassLoader parent) { - // Do it only if the context is not already started - if (!startedJStdx) { - super.setParentClassLoader(parent); - } - } - - /** - * @return OBJECT_NAME of the parent J2EEApplication MBean - */ - public String getEarON() { - return earON; - } - - /** - * Override the working directory (which is going to Catalina.base/work usually). - * @return a path which is referencing the JOnAS work directory - */ - @Override - public String getWorkDir() { - String superWorkDir = super.getWorkDir(); - if (superWorkDir == null) { - // Retrieve our parent (normally a host) name - String hostName = null; - String engineName = null; - Container parentHost = getParent(); - if (parentHost != null) { - hostName = parentHost.getName(); - Container parentEngine = parentHost.getParent(); - if (parentEngine != null) { - engineName = parentEngine.getName(); - } - } - if ((hostName == null) || (hostName.length() < 1)) { - hostName = "_"; - } - if ((engineName == null) || (engineName.length() < 1)) { - engineName = "_"; - } - - String temp = getPath(); - if (temp.startsWith("/")) { - temp = temp.substring(1); - } - temp = temp.replace('/', '_'); - temp = temp.replace('\\', '_'); - if (temp.length() < 1) { - temp = "_"; - } - superWorkDir = catalinaService.getServerProperties().getWorkDirectory() + File.separator + "tomcat" - + File.separator + engineName + File.separator + hostName + File.separator + temp; - new File(superWorkDir).mkdirs(); - super.setWorkDir(superWorkDir); - } - return superWorkDir; - - } - - /** - * Change the type of the WebappClassLoader to be instanciated. - * - * @param loader The newly associated loader - */ - @Override - public void setLoader(final Loader loader) { - // In all cases, update the loader type - if (loader instanceof WebappLoader) { - ((WebappLoader) loader).setLoaderClass(NoSystemAccessWebappClassLoader.class.getName()); - } - super.setLoader(loader); - - // init the instance manager - } - - /** - * Defines the env context used to perform lookup in the instance manager. - * @param envContext the given ENC context - */ - public void setEnvContext(final Context envContext) { - this.envContext = envContext; - } - - /** - * Defines the injection map used for each class. - * @param injectionsMap the injection map - */ - public void setInjectionMap(final Map> injectionsMap) { - this.injectionsMap = injectionsMap; - } - - - /** - * @return ejb classloader - */ - public ClassLoader getEjbClassLoader() { - return ejbClassLoader; - } - - /** - * Sets ejb classloader. - * @param ejbClassLoader the given classloader - */ - public void setEjbClassLoader(final ClassLoader ejbClassLoader) { - this.ejbClassLoader = ejbClassLoader; - } - - /** - * Sets the EAR classloader. - * @param earClassLoader the given EAR classloader - */ - public void setEarClassLoader(final ClassLoader earClassLoader) { - this.earClassLoader = earClassLoader; - } - - - /** - * Gets data about loading a given class. - * @param className the class name - * @return a string description for the given class that needs to be loaded - */ - public String loadClass(final String className) { - if (!startedJStdx) { - throw new IllegalStateException("Cannot load a class if context is not started"); - } - - // Get ClassLoader - ClassLoader systemClassLoader = null; - try { - systemClassLoader = LoaderManager.getInstance().getExternalLoader(); - } catch (Exception e) { - throw new IllegalStateException("Unable to get LoaderManager", e); - } - - - // Create XML document... - - // Create builder with factory - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = null; - try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new IllegalStateException("Cannot build document builder", e); - } - - // Create Document - Document document = builder.newDocument(); - - // Append root element - Element classElement = document.createElement("class"); - document.appendChild(classElement); - - // name - classElement.setAttribute("name", className); - - - boolean classNotFound = false; - String error = null; - ClassLoader webAppClassLoader = getLoader().getClassLoader(); - Class clazz = null; - try { - clazz = webAppClassLoader.loadClass(className); - } catch (ClassNotFoundException e) { - error = e.toString(); - classNotFound = true; - } catch (Error e) { - classNotFound = true; - error = e.toString(); - } - - // class not found ? (add error content if NotFound) - classElement.setAttribute("classNotFound", Boolean.toString(classNotFound)); - if (classNotFound) { - Element errorElement = document.createElement("error"); - classElement.appendChild(errorElement); - Text errorText = document.createTextNode(error); - errorElement.appendChild(errorText); - } else { - // Class found ! Add details (if any) - - // Search if the classes was loaded from the module, from the application or from the system - String type = "Application/WebApp (This module)"; - ClassLoader classClassLoader = clazz.getClassLoader(); - ClassLoader cl = webAppClassLoader; - boolean found = false; - while (cl != null && !found) { - - // ClassLoader is equals to the classloader that has loaded the class - if (cl.equals(classClassLoader)) { - found = true; - } - - if (systemClassLoader.equals(cl)) { - type = "System"; - } - - if (cl.equals(earClassLoader)) { - type = "Application/EAR"; - } - - if (cl.equals(ejbClassLoader)) { - type = "Application/EJBs"; - } - - cl = cl.getParent(); - } - - // Add where the class has been found - classElement.setAttribute("where", type); - - - // ClassLoader info (if any) - if (classClassLoader != null) { - Element classLoaderElement = document.createElement("class-loader"); - classElement.appendChild(classLoaderElement); - classLoaderElement.setAttribute("name", classClassLoader.getClass().getName()); - Text classLoaderText = document.createTextNode(classClassLoader.toString()); - classLoaderElement.appendChild(classLoaderText); - } - } - - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer; - try { - transformer = transformerFactory.newTransformer(); - } catch (TransformerConfigurationException e) { - throw new IllegalStateException("Unable to get a new transformer", e); - } - - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - - // transform OUTPUT - try { - transformer.transform(new DOMSource(document), streamResult); - } catch (TransformerException e) { - throw new IllegalStateException("Unable to transform the document", e); - } - - return stringWriter.toString(); - } - - /** - * Gets the filters of classloader. - * @return the filters for the war classloader - */ - public String[] getClassLoaderFilters() { - List filters = filteringClassLoader.getFilters(); - return filters.toArray(new String[filters.size()]); - } - - /** - * Gets all the URL to the given resource. - * @param resourceName the name of the resource - * @return the list of url, if any - */ - public URL[] getResources(final String resourceName) { - if (!startedJStdx) { - throw new IllegalStateException("Cannot load a resource if context is not started"); - } - ClassLoader webAppClassLoader = getLoader().getClassLoader(); - - Enumeration urls = null; - try { - urls = webAppClassLoader.getResources(resourceName); - } catch (IOException e) { - throw new IllegalStateException("Unable to get the resource '" + resourceName + "'.", e); - } - - List urlsList = new ArrayList(); - while (urls.hasMoreElements()) { - urlsList.add(urls.nextElement()); - } - - return urlsList.toArray(new URL[urlsList.size()]); - } - - /** - * Sets the filtering classloader. - * @param filteringClassLoader the given classloader - */ - public void setFilteringClassLoader(final FilteringClassLoader filteringClassLoader) { - this.filteringClassLoader = filteringClassLoader; - } - - /** - * Return the real path for a given virtual path, if possible; otherwise - * return null. - * - * @param path The path to the desired resource - */ - @Override - public String getRealPath(final String path) { - if (path != null && path.startsWith("bundle")) { - return null; - } - return super.getRealPath(path); - } - - - /** - * Return the naming resources associated with this web application. - */ - @Override - public NamingResources getNamingResources() { - - if (namingResources == null) { - this.namingResources = new JOnASNamingResources(); - setNamingResources(namingResources); - } - return super.getNamingResources(); - - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ResetAuthenticationValve.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ResetAuthenticationValve.java deleted file mode 100644 index 50c737dce8..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ResetAuthenticationValve.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7; - -import java.io.IOException; -import java.security.Principal; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; - -import org.apache.catalina.Session; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.realm.GenericPrincipal; -import org.apache.catalina.valves.ValveBase; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -/** - * This valve reset the authentication and propagate the cached principal - * Authenticator valve will be called after (if an authentication is needed - * further). - * @author Florent Benoit - */ -public class ResetAuthenticationValve extends ValveBase { - - /** - * Unauthenticated security context. - */ - private static final SecurityContext UNAUTHENTICATED = new SecurityContext(); - - /** - * Default constructor. - */ - public ResetAuthenticationValve() { - super(true); - } - - /** - * Remove the current authenticated user by setting the anonymous user. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - - // First, check if there is a principal in the current request - Principal principal = request.getPrincipal(); - if (principal == null) { - // No principal in the request, check if there is a session - HttpSession httpSession = request.getSession(false); - if (httpSession != null) { - // There is a session, check if there is a principal associated - // to this session. - Session session = getContainer().getManager().findSession(httpSession.getId()); - principal = session.getPrincipal(); - } - } - - // We've found a principal (either in the request or in the session) - if (principal != null) { - // Cast if it is a generic principal - if (principal instanceof GenericPrincipal) { - GenericPrincipal genericPrincipal = (GenericPrincipal) principal; - SecurityContext ctx = new SecurityContext(principal.getName(), genericPrincipal.getRoles()); - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - } - } - // Call next valve - try { - getNext().invoke(request, response); - } finally { - // Reset authentication - SecurityCurrent.getCurrent().setSecurityContext(UNAUTHENTICATED); - } - - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/Tomcat7Service.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/Tomcat7Service.java deleted file mode 100644 index cd3a883dc9..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/Tomcat7Service.java +++ /dev/null @@ -1,2015 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.naming.NamingException; -import javax.servlet.Filter; -import javax.servlet.ServletContainerInitializer; -import javax.servlet.ServletException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpression; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Engine; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.LifecycleState; -import org.apache.catalina.Server; -import org.apache.catalina.Service; -import org.apache.catalina.connector.Connector; -import org.apache.catalina.core.DefaultInstanceManager; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.core.StandardEngine; -import org.apache.catalina.startup.CatalinaProperties; -import org.apache.catalina.startup.ContextConfig; -import org.apache.catalina.util.LifecycleMBeanBase; -import org.apache.tomcat.InstanceManager; -import org.apache.tomcat.util.digester.Digester; -import org.objectweb.util.monolog.api.BasicLevel; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.http.HttpContext; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; -import org.ow2.easybeans.deployment.api.EZBInjectionHolder; -import org.ow2.jonas.addon.deploy.api.config.IAddonConfig; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.jndi.checker.api.IResourceCheckerManager; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.loader.FilteringClassLoader; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.tm.TransactionService; -import org.ow2.jonas.versioning.VersioningService; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.jonas.web.base.War; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory; -import org.ow2.jonas.web.base.proxy.HttpOnDemandProxy; -import org.ow2.jonas.web.tomcat7.custom.ContextCustomizer; -import org.ow2.jonas.web.tomcat7.osgi.OSGiTldListener; -import org.ow2.jonas.web.tomcat7.osgi.configadmin.Tomcat7Connector; -import org.ow2.jonas.web.tomcat7.security.Realm; -import org.ow2.jonas.web.tomcat7.tx.TransactionValve; -import org.ow2.jonas.web.tomcat7.versioning.ContextFinder; -import org.ow2.jonas.web.tomcat7.versioning.EmptyServlet; -import org.ow2.jonas.web.tomcat7.ws.WSContextLifecycleListener; -import org.ow2.jonas.web.tomcat7.ws.WSDeployment; -import org.ow2.jonas.web.tomcat7.ws.WebservicesWebDeployer; -import org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import static org.ow2.jonas.ws.jaxws.IJAXWSService.KEY_WEB_SERVICES_METADATAS; - -/** - * Implementation of the web container service for Tomcat 7. - * This service also adds virtual path support to Tomcat 7. - * - * @author Florent BENOIT - * @author S. Ali Tokmen - */ -public class Tomcat7Service extends BaseWebContainerService implements JWebContainerService,Tomcat7Connector { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(Tomcat7Service.class); - - /** - * Name of the tomcat 7 server configuration file - */ - protected static final String TOMCAT7_SERVER_CONFIG_FILENAME = "tomcat7-server.xml"; - - /** - * Name of the tomcat 7 context configuration file - */ - protected static final String TOMCAT7_CONTEXT_CONFIG_FILENAME = "tomcat7-context.xml"; - - /** - * Name of the tomcat 7 web configuration file - */ - protected static final String TOMCAT7_WEB_CONFIG_FILENAME = "tomcat7-web.xml"; - - /** - * Relative path of the configuration file. - */ - protected static final String CONFIG_FILE = ConfigurationConstants.DEFAULT_CONFIG_DIR + File.separator + - TOMCAT7_SERVER_CONFIG_FILENAME; - - /* - * Path to the tomcat 7 server configuration file - */ - protected String tomcat7ServerConfPath; - - /** - * Path to the tomcat 7 context configuration file - */ - protected String tomcat7ContextConfPath; - - /** - * Path to the tomcat 7 web configuration file - */ - protected String tomcat7WebConfPath; - - /** - * The reference on the catalina server. - */ - private Server server = null; - - /** - * External class loader. - */ - private ClassLoader externalLoader = null; - - /** - * Web container started ? - */ - private boolean tomcatStarted = false; - - /** - * Security service. - */ - private SecurityService securityService = null; - - /** - * {@link IWebServiceDeploymentManager} registration key. - */ - private ServiceRegistration reg; - - /** - * {@link IWebDeployer} registration key. - */ - private ServiceRegistration reg2; - - /** - * Transaction service. - */ - private TransactionService transactionService = null; - - /** - * Link to the resource checker manager. - */ - private IResourceCheckerManager resourceCheckerManager = null; - - /** - * Customizers to be applied on the created Contexts. - */ - private List customizers; - - /** - * SCIs of third party frameworks. - * (need to be stateless 'cause the same instance will be invoked for each deployed web-app). - */ - private List initializers; - - /** - * Default constructor. - * @param bundleContext the OSGi bundle context - */ - public Tomcat7Service(final BundleContext bundleContext) { - super(bundleContext); - this.customizers = new ArrayList(); - this.initializers = new ArrayList(); - } - - /** - * Init the environment of catalina set catalina.home, catalina.base and - * unset the tomcat naming. - * @throws ServiceException if catalina home is not set - */ - protected void initCatalinaEnvironment() throws ServiceException { - - // Assume that CATALINA_HOME = JONAS_ROOT and CATALINA_BASE = JONAS_BASE - String jonasRoot = System.getProperty("jonas.root"); - String jonasBase = System.getProperty("jonas.base"); - - String catalinaHome = System.getProperty("catalina.home"); - String catalinaBase = System.getProperty("catalina.base"); - - // check that this value is ok ? - if (catalinaHome != null && !jonasRoot.equals(catalinaHome)) { - logger.warn("The CATALINA_HOME property was set to ''{0}'', fix it by using JONAS_ROOT ''{1}''", catalinaHome, - jonasRoot); - } - // override - System.setProperty("catalina.home", jonasRoot); - - // CATALINA_BASE = JONAS_BASE ? - if (catalinaBase != null && !jonasBase.equals(catalinaBase)) { - logger.warn("The CATALINA_BASE property was set to ''{0}'', fix it by using JONAS_BASE ''{1}''", catalinaBase, - jonasBase); - } - // override - System.setProperty("catalina.base", jonasBase); - - // use the JOnAS naming instead of the Tomcat naming - System.setProperty("catalina.useNaming", "false"); - - // Init properties - CatalinaProperties.getProperty("catalina.base"); - - } - - /** - * Start the Catalina service in a new thread. - * @throws ServiceException if the startup failed. - */ - @Override - public void doStart() throws ServiceException { - - initCatalinaEnvironment(); - - // On Demand feature not enabled, start the web container now - if (!isOnDemandFeatureEnabled()) { - startInternalWebContainer(); - } // else delay this launch - - // Here, register the IWSDM - WSDeployment manager = new WSDeployment(this); - manager.setWorkDirectory(getServerProperties().getWorkDirectory()); - reg = getBundleContext().registerService(IWebServiceDeploymentManager.class.getName(), - manager, - null); - - // Here, register the IWebDeployer - WebservicesWebDeployer webDeployer = new WebservicesWebDeployer(this); - webDeployer.setWorkDirectory(getServerProperties().getWorkDirectory()); - reg2 = getBundleContext().registerService(IWebDeployer.class.getName(), - webDeployer, - null); - - // ... and run super method - super.doStart(); - - addDummyContextRoot(); - } - - - /** - * Starts the specific code for the web container implementation. - * This allows to start the internal container on demand (if there is an access on the http proxy port for example) - * @throws JWebContainerServiceException if container is not started - */ - @Override - public synchronized void startInternalWebContainer() throws JWebContainerServiceException { - // Already started - if (tomcatStarted) { - return; - } - - // parent ClassLoader - LoaderManager lm = LoaderManager.getInstance(); - try { - externalLoader = lm.getExternalLoader(); - } catch (Exception e1) { - throw new ServiceException("Cannot get Application/Tomcat ClassLoader", e1); - } - - // Initialize the context finder for the optional versioning service - // Context finder will not do anything if the versioning service is not - // present (can be removed or added on-the-fly). - ContextFinder.setParent(this); - ContextFinder.setJmxService(jmxService); - - // Create the digester for the parsing of the server.xml. - Digester digester = createServerDigester(); - - // Execute the digester for the parsing of the server.xml. - // And configure the catalina server. - File configFile = null; - - try { - configFile = getConfigFile(); - } catch (FileNotFoundException e) { - logger.error("Cannot find the file ''{0}''", getConfigPath(), e); - throw new ServiceException("Cannot find the configuration file", e); - } - - try { - InputSource is = new InputSource("file://" + configFile.getAbsolutePath()); - FileInputStream fis = new FileInputStream(configFile); - is.setByteStream(fis); - digester.setClassLoader(this.getClass().getClassLoader()); - digester.push(this); - digester.parse(is); - fis.close(); - } catch (Exception e) { - logger.error("Cannot parse the configuration file ''{0}''", configFile, e); - throw new ServiceException("Cannot parse the configuration file '" + configFile + "'", e); - } - - // Set the Domain and the name for each known Engine - for (StandardEngine engine : getEngines()) { - // WARNING : the order of th two next lines is very important. - // The domain must be set in first and the name after. - // In the others cases, Tomcat 6 doesn't set correctly these two - // properties - // because there are somes controls that forbid to have a difference - // between - // the name and the domain. Certainly a bug ! - engine.setDomain(getDomainName()); - engine.setName(getDomainName()); - } - - // If OnDemand Feature is enabled, the http connector port needs to be changed - // And keep-alive feature should be turned-off (to monitor all requests) - if (isOnDemandFeatureEnabled()) { - Service[] services = getServer().findServices(); - - // set name of the first service - if (services.length > 0) { - services[0].setName(getDomainName()); - } - - // Get connector of each service - for (int s = 0; s < services.length; s++) { - Connector[] connectors = services[s].findConnectors(); - if (connectors.length >= 1) { - // Only for the first connector - Connector connector = connectors[0]; - connector.setProperty("maxKeepAliveRequests", "1"); - connector.setPort(getOnDemandRedirectPort()); - connector.setProxyPort(Integer.parseInt(getDefaultHttpPort())); - } - } - } - - - // Start Tomcat server in an execution block - IExecution startExec = new IExecution() { - public Void execute() throws ServiceException { - // Finaly start catalina ... - if (server instanceof LifecycleMBeanBase) { - try { - ((LifecycleMBeanBase) server).setDomain(getDomainName()); - server.init(); - ((LifecycleMBeanBase) server).setDomain(getDomainName()); - Service[] services = getServer().findServices(); - // set name of the first service - if (services.length > 0) { - services[0].setName(getDomainName()); - } - ((Lifecycle) server).start(); - } catch (Exception e) { - logger.error("Cannot start the Tomcat server", e); - throw new ServiceException("Cannot start the Tomcat server", e); - } - } - - return null; - } - }; - - // Execute - ExecutionResult startExecResult = RunnableHelper.execute(getClass().getClassLoader(), startExec); - - // Throw an ServiceException if needed - if (startExecResult.hasException()) { - logger.error("Cannot start the Tomcat server", startExecResult.getException()); - throw new ServiceException("Cannot start the Tomcat Server", startExecResult.getException()); - } - - // Tomcat is started - tomcatStarted = true; - } - - - /** - * Set the environment of the web container inside the given context. - * @param ctxParam the java:comp/env/ environment where is stored the values of the web container environment. - * @param ezbInjectionHolder the easybeans injection handler. - * @param webAppClassLoader the classloader of the web application. - * @throws JWebContainerServiceException if the populating of the environment failed. - */ - @Override - protected void setWebEnvironment(final javax.naming.Context ctxParam, final EZBInjectionHolder ezbInjectionHolder, - final ClassLoader webAppClassLoader) throws JWebContainerServiceException { - - super.setWebEnvironment(ctxParam, ezbInjectionHolder, webAppClassLoader); - - // Store bundle context - try { - getNaming().getComponentContext(webAppClassLoader).bind("comp/env/BundleContext", getBundleContext()); - } catch (NamingException e) { - throw new JWebContainerServiceException("Cannot bind bundle context", e); - } - } - - /** - * Checks if the internal web container has been started. - * @return true if it is already started - */ - @Override - public boolean isInternalContainerStarted() { - return tomcatStarted; - } - - - - /** - * Stop the Catalina service. - * @throws ServiceException if the stop failed. - */ - @Override - protected void doStop() throws ServiceException { - // Undeploy the wars ... - super.doStop(); - - // Unregister the WSDM - if (reg != null) { - reg.unregister(); - } - - if (reg2 != null) { - reg2.unregister(); - } - - - // ... and shut down embedded catalina - if (tomcatStarted && server instanceof Lifecycle) { - try { - ((Lifecycle) server).stop(); - } catch (Exception e) { - throw new ServiceException(e.getMessage(), e); - } - } - tomcatStarted = false; - } - - /** - * Deploy a specific WAR file specified in the context. - * @param ctx the context which contains the configuration in order to - * deploy the WAR. - * @throws JWebContainerServiceException if the registration of the WAR - * failed. - */ - @Override - protected void doRegisterWar(final javax.naming.Context ctx) throws JWebContainerServiceException { - // Get the 7 parameters : - // - warURL is the URL of the war to register (required param). - // - contextRoot is the context root to which this application - // should be installed (must be unique) (required param). - // - hostName is the name of the host on which deploy the war - // (optional param taken into account only if no element - // was declared in server.xml for this web application) . - // - Name of the Ear application of this war if any - // - java2DelegationModel the compliance to java2 delegation model - // - parentCL the war classloader of this war. - // - jonasDD JOnAS Deployment Desc content - // - permissionManager JACC permission manager - - URL warURL = null; - URL earURL = null; - URL unpackedWarURL = null; - String contextRoot = null; - boolean java2DelegationModel = true; - PermissionManager permissionManager = null; - boolean inEarCase = true; - String earAppName = null; - WebContainerDeploymentDesc webDD = null; - String userURI = null; - Map webservices = null; - - // War 'management' instance - War war = null; - - try { - war = (War) ctx.lookup("war"); - - // Values loading - unpackedWarURL = (URL) ctx.lookup("unpackedWarURL"); - webDD = (WebContainerDeploymentDesc) ctx.lookup("webDD"); - userURI = (String) ctx.lookup("userURI"); - webservices = (Map) ctx.lookup(KEY_WEB_SERVICES_METADATAS); - - } catch (NamingException e) { - logger.error("Unable to get default parameters", e); - throw new JWebContainerServiceException("Unable to get default parameters", e); - } - - try { - earAppName = (String) ctx.lookup("earAppName"); - } catch (NamingException e) { - // no ear case, so no ear application name - inEarCase = false; - } - - ClassLoader webClassLoader = null; - - try { - webClassLoader = (ClassLoader) ctx.lookup("parentCL"); - } catch (NamingException e) { - logger.error("Unable to get parentCL parameter", e); - throw new JWebContainerServiceException("Unable to get parentCL parameter", e); - } - - FilteringClassLoader filteringClassLoader = null; - - try { - filteringClassLoader = (FilteringClassLoader) ctx.lookup(FilteringClassLoader.class.getName()); - } catch (NamingException e) { - logger.error("Unable to get filteringClassLoader parameter", e); - throw new JWebContainerServiceException("Unable to get filteringClassLoader parameter", e); - } - - - // optional parameters - ClassLoader ejbClassLoader = null; - try { - ejbClassLoader = (ClassLoader) ctx.lookup("ejbClassLoader"); - } catch (NamingException e) { - // no ejb classloader - logger.debug("no ejb Class loader"); - } - ClassLoader earClassLoader = null; - try { - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - } catch (NamingException e) { - // no EAR classloader - logger.debug("no EAR Class loader"); - } - - // Get injection holder - WARDeployable deployable = null; - try { - deployable = (WARDeployable) ctx.lookup(WARDeployable.class.getName()); - } catch (NamingException e) { - logger.debug("No war deployable (denotes currently an ear case)"); - } - - String hostName = null; - - // Initialize variable values from the war object - warURL = war.getWarURL(); - contextRoot = war.getContextRoot(); - java2DelegationModel = war.getJava2DelegationModel(); - permissionManager = war.getPermissionManager(); - - // Special handling for earURL - earURL = war.getEarURL(); - if (earURL == null) { - // no ear case, so no ear application name - // TODO this flag has probably already been set before - inEarCase = false; - // set earURL to something only to avoid null value - earURL = warURL; - } - // Special handling for hostName - hostName = war.getHostName(); - if (hostName == null) { - hostName = ""; - } - - // Install a new web application, whose web application archive is - // at the specified URL, into this container with the specified - // context root. - // A context root of "" (the empty string) should be used for the root - // application for this container. Otherwise, the context root must - // start with a slash. - - if (contextRoot.equals("/")) { - contextRoot = ""; - } else { - contextRoot = "/" + contextRoot; - } - - // Install the war. - File fWar = URLUtils.urlToFile(warURL); - - // Unpacked path of the war - File destDir = null; - if (fWar.isDirectory()) { - destDir = URLUtils.urlToFile(warURL); - } else { - destDir = URLUtils.urlToFile(unpackedWarURL); - } - - // META-INF/context.xml file - File contextXmlFile = new File(destDir, File.separator + "META-INF" + File.separator + "context.xml"); - - // Check if some contexts were configured in server.xml - List jonasContexts = getConfiguredMatchingJonasContexts(contextRoot, fWar, destDir.getPath()); - - Host deployer = null; - // The context was not found in server.xml, a new context will be - // created. - if (jonasContexts.isEmpty()) { - // Find host on which deploy the context - deployer = findHost(hostName); - - // Create context (false because not in server.xml) - JOnASStandardContext context = new JOnASStandardContext(false, java2DelegationModel, inEarCase); - context.setDocBase(destDir.getPath()); - context.setPath(contextRoot); - - // Use the JOnAS context config - ContextConfig config = createContextConfig(); - - // add the config - context.addLifecycleListener(config); - jonasContexts.add(context); - } - - // Configure these contexts and start them - for (final JOnASStandardContext jStdCtx : jonasContexts) { - - // FIXME Only needed once (static reference) - jStdCtx.setTomcatService(this); - - // Set the parent class loader - jStdCtx.setParentClassLoader(webClassLoader); - - // Delegation model - jStdCtx.setDelegate(java2DelegationModel); - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Webapp class loader java 2 delegation model set to " + java2DelegationModel); - } - - // Add the TLD that comes from OSGi services - List resourcesToMonitor = getTLDResources(); - OSGiTldListener osGiTldListener = new OSGiTldListener(resourcesToMonitor); - jStdCtx.addLifecycleListener(osGiTldListener); - - - // Add valves - // for setting unauthenticated user - jStdCtx.addValve(new ResetAuthenticationValve()); - // For checking transactions - if (transactionService != null) { - jStdCtx.addValve(new TransactionValve(transactionService.getTransactionManager())); - } - // For checking resources - if (resourceCheckerManager != null) { - jStdCtx.addValve(new CheckOpenResourcesValve(resourceCheckerManager)); - } - - // For the audit - Filter auditHttpFilter = null; - if (getAuditService() != null) { - auditHttpFilter = getAuditService().getWebAuditFilter(); - // needs to add this filter on the context - jStdCtx.addValve(new FilterValveWrapper(auditHttpFilter)); - } - - // For the tenantId - Filter tenantIdHttpFilter = null; - String tenantId = null; - if (getMultitenantService() != null){ - // get an instance of the filtre - tenantId = super.getTenantId(war.getWarDeployable()); - tenantIdHttpFilter = getMultitenantService().getTenantIdFilter(tenantId); - // needs to add this filter on the context - jStdCtx.addValve(new FilterValveWrapper(tenantIdHttpFilter)); - } - - // Add the WS related ContextListener only if there are some webservices in the webapp - if (!webservices.isEmpty() && (getJAXWSService() != null)) { - WSContextLifecycleListener listener = new WSContextLifecycleListener(webservices, - getJAXWSService()); - jStdCtx.addLifecycleListener(listener); - } - - // META-INF/context.xml file support - if (contextXmlFile.exists()) { - jStdCtx.setConfigFile(URLUtils.fileToURL(contextXmlFile)); - } - - // The Annotation processor object needs to be initialized with the - // component context. Else, the processor does nothing. - javax.naming.Context envCtx = null; - try { - envCtx = (javax.naming.Context) getNaming().getComponentContext(webClassLoader).lookup("comp/env"); - } catch (NamingException e) { - getLogger().log(BasicLevel.ERROR, "Cannot get the context of the webapplication '" + warURL + "'." , e); - } - - // Set data for injection - jStdCtx.setInjectionMap(webDD.getENCBindingHolder().getInjectionMap()); - jStdCtx.setEnvContext(envCtx); - - // JSR 77 - jStdCtx.setJ2EEServer(getJonasServerName()); - jStdCtx.setServer(J2eeObjectName.J2EEServer(getDomainName(), getJonasServerName()).toString()); - // Get info about JavaVM in standard J2EEServer MBean - MBeanServer mbeanServer = jmxService.getJmxServer(); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(getDomainName(), getJonasServerName()); - try { - String[] as = (String[]) mbeanServer.getAttribute(j2eeServerOn, "javaVMs"); - jStdCtx.setJavaVMs(as); - } catch (Exception e) { - // String err = - // i18n.getMessage("CatJWebServ.doRegisterWar.startContextError", - // jStdCtx); - // getLogger().log(BasicLevel.WARN, err + e.getMessage()); - getLogger().log(BasicLevel.WARN, "Set MBean JVM error : " + e.getClass().getName() + " " + e.getMessage()); - } - if (earAppName != null) { - jStdCtx.setJ2EEApplication(earAppName); - } else { - jStdCtx.setJ2EEApplication("null"); - } - jStdCtx.setJonasDeploymentDescriptor(webDD.getJOnASXmlContent()); - jStdCtx.setWebDeploymentDescriptor(webDD); - - // Set the realm - org.apache.catalina.Realm ctxRealm = jStdCtx.getRealm(); - - // Take realm of parent - if (ctxRealm == null) { - ctxRealm = deployer.getRealm(); - } - - if (ctxRealm != null && ctxRealm instanceof Realm) { - Realm jaccRealm = null; - try { - jaccRealm = (Realm) ((Realm) ctxRealm).clone(); - } catch (CloneNotSupportedException cnse) { - String err = "Cannot clone the realm used by the existing context or its parent realm"; - getLogger().log(BasicLevel.ERROR, err + cnse.getMessage()); - throw new JWebContainerServiceException(err, cnse); - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "Setting permission manager to " + permissionManager); - } - jaccRealm.setPermissionManager(permissionManager); - jaccRealm.setSecurityService(securityService); - jaccRealm.setContext(jStdCtx); - // Set the new realm - jStdCtx.setRealm(jaccRealm); - } - - // Set the attributes transfered from the JOnAS War MBean. - // Note that 'java2DelegationModel' and 'inEarCase' attributes - // are passed as arguments to the JOnASStandardContext's constructor - jStdCtx.setWarURL(warURL); - jStdCtx.setFilteringClassLoader(filteringClassLoader); - if (inEarCase) { - jStdCtx.setEarURL(earURL); - jStdCtx.setEjbClassLoader(ejbClassLoader); - jStdCtx.setEarClassLoader(earClassLoader); - } - - // Create our own InstanceManager using a Lifecycle event callback - // This should be done before calling customizers as they may register lifecycle callbacks too. - final javax.naming.Context envContext = envCtx; - final WebContainerDeploymentDesc webContainerDeploymentDesc = webDD; - - jStdCtx.addLifecycleListener(new LifecycleListener() { - public void lifecycleEvent(LifecycleEvent event) { - if (Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) { - final StandardContext standardContext = ((StandardContext) event.getLifecycle()); - Map> injectionMap = webContainerDeploymentDesc.getENCBindingHolder().getInjectionMap(); - if (injectionMap == null) { - injectionMap = new HashMap>(); - } - final DefaultInstanceManager instanceManager = new DefaultInstanceManager( - envContext, - injectionMap, - standardContext, - this.getClass().getClassLoader()); - standardContext.setInstanceManager(instanceManager); - standardContext.getServletContext() - .setAttribute(InstanceManager.class.getName(), standardContext.getInstanceManager()); - } - } - }); - - // Call the Context Customizers just before startup - for (ContextCustomizer customizer : customizers) { - customizer.customize(jStdCtx, deployable); - } - - // ... and start it or add it - if (jStdCtx.isInServerXml()) { - try { - jStdCtx.setLoader(null); - jStdCtx.start(); - } catch (LifecycleException lce) { - logger.error("Cannot start the context '" + jStdCtx + "'.", lce); - throw new JWebContainerServiceException("Cannot start the context '" + jStdCtx + "'.", lce); - } - } else { - // add it - if (deployer == null) { - logger.error("No deployer found for the deployment of the context '" + jStdCtx + "'."); - throw new JWebContainerServiceException("No deployer found for the deployment of the context '" + jStdCtx - + "'."); - } - if ("".equals(hostName) && "".equals(contextRoot)) { - removeDummyContextRoot(); - } - - if (isMultitenantEnabled()) { - Object oldTenantCtx = getMultitenantService().getTenantContext(); - try { - if (tenantId != null) { - getMultitenantService().setTenantIdInContext(tenantId); - } - deployer.addChild(jStdCtx); - } finally { - getMultitenantService().setTenantContext(oldTenantCtx); - } - } else { - deployer.addChild(jStdCtx); - } - } - - // Finalize webservices deployment when the context is started - if (this.getJAXWSService() != null) { - // Tell the JAXWS Service that this context deployment is over - getJAXWSService().finalizePOJODeployment(jStdCtx.getServletContext()); - } - - // ...and check if it is now configured - checkStartedContext(jStdCtx, permissionManager); - - // Store the Tomcat web-app ClassLoader - war.setClassLoader(jStdCtx.getLoader().getClassLoader()); - - // Store WebModule ObjectName in Context - try { - ctx.rebind("WebModule", jStdCtx.getObjectName()); - } catch (Exception e) { - // NamingException or Mbean related Exception - // TODO i18n - String err = "Cannot rebind WebModule ObjectName in Context"; - logger.error(err, e); - throw new JWebContainerServiceException(err, e); - } - ContextFinder.addNonVersionedContext(contextRoot); - - try { - if (isVersioningEnabled() && contextRoot.length() > 0 && userURI.length() > 0) { - if (contextRoot.charAt(0) != '/') { - contextRoot = '/' + contextRoot; - } - if (userURI.charAt(0) != '/') { - userURI = '/' + userURI; - } - - if (!contextRoot.equals(userURI)) { - logger.info("Deploying versioned application " + userURI - + ", path for the added version is " + contextRoot); - String policy = getVersioningService().getDefaultDeploymentPolicy(); - if (earAppName != null) { - ContextFinder.bindContextRoot(earAppName, userURI, jStdCtx, policy); - } else { - ContextFinder.bindContextRoot(URLUtils.urlToFile(warURL).getName(), userURI, jStdCtx, policy); - } - } - } - } catch (Exception e) { - throw new JWebContainerServiceException("Failed binding versioned web context", e); - } - } - } - - /** - * @return a new {@link ContextConfig} for JOnAS. - */ - protected ContextConfig createContextConfig() { - JOnASContextConfig config = new JOnASContextConfig(); - config.setSecurityService(securityService); - - if (this.tomcat7ContextConfPath != null) { - config.setDefaultContextXml(this.tomcat7ContextConfPath); - } - if (this.tomcat7WebConfPath != null) { - config.setDefaultWebXml(this.tomcat7WebConfPath); - } - - // Add all the System wide ServletContainerInitializers registered ATM - // TODO As theses are services, how do we support their dynamism here ? - for (ServletContainerInitializer initializer : initializers) { - config.addServletContainerInitializer(initializer); - } - - return config; - } - - /** - * Creates a new JOnAS Realm (JACC or JAAS). - * @param name resource name or entry name (depends if a JACC or JAAS realm is required) - * @param isJaccRealm true if a JACC realm is required, false for a JAAS realm. - * @return a configured Realm. - */ - public Realm createJOnASRealm(final String name, final boolean isJaccRealm) { - Realm realm = new Realm(); - realm.setSecurityService(getSecurityService()); - if (isJaccRealm) { - realm.setResourceName(name); - } else { - realm.setJaasEntry(name); - } - return realm; - } - - /** - * Check if there is a previous JOnASStandardContext which match the current - * context If true, deploy our context into the configured context. - * @param contextRoot name of the context that we want to find preconfigured - * contexts - * @param fpackedWar file of the original war file - * @param destDir name of the unpacked directory of the war file - * @return true if a context was found and used - */ - protected List getConfiguredMatchingJonasContexts(final String contextRoot, - final File fpackedWar, - final String destDir) { - List jonasContexts = new ArrayList(); - // Check contexts of all services to see if there is a configured - // context. - // that we must use instead of creating a new one. - // If a context is matching, we set its docbase and start it. - for (Context ctx : getContexts()) { - // Continue if it is not a JOnAS context - if (!(ctx instanceof JOnASStandardContext)) { - continue; - } - JOnASStandardContext jStdCtx = (JOnASStandardContext) ctx; - if (jStdCtx != null) { - // Not created in server.xml file - if (!jStdCtx.isInServerXml()) { - continue; - } - - // The context was configured ? - String serverCtxRoot = jStdCtx.getPath(); - if (!serverCtxRoot.equals(contextRoot)) { - continue; - } - if (jStdCtx.getPrivileged()) { - // Can deploy a privileged context only if it's a .war file - if (fpackedWar.isDirectory()) { - logger.error("Can deploy a privileged context '" + jStdCtx - + "' only if it's a war file (and not a directory)"); - } - jStdCtx.setDocBase(fpackedWar.getPath()); - } else { - jStdCtx.setDocBase(destDir); - } - jonasContexts.add(jStdCtx); - } - } - return jonasContexts; - } - - /** - * Check that the context that was started was right configured. - * @param context context to check - * @param permissionManager the permission manager used for JACC - * @throws JWebContainerServiceException if the context was not right - * configured - */ - protected void checkStartedContext(final Context context, final PermissionManager permissionManager) - throws JWebContainerServiceException { - // Check if the context was configured - if (!context.getConfigured()) { - throw new JWebContainerServiceException("Context '" + context + "' was not configured"); - } - - if (!LifecycleState.STARTED.equals(context.getState())) { - throw new JWebContainerServiceException("Context '" + context + "' has failed to start."); - } - - // Check that JACC realm is correctly set - org.apache.catalina.Realm ctxRealm = context.getRealm(); - if (ctxRealm != null && ctxRealm instanceof Realm) { - Realm jaccRealm = (Realm) ctxRealm; - PermissionManager ctxPerm = jaccRealm.getPermissionManager(); - if (ctxPerm == null && permissionManager != null) { - jaccRealm.setPermissionManager(permissionManager); - // set context on the realm. - jaccRealm.setContext(context); - } - } - if (getLogger().isLoggable(BasicLevel.DEBUG)) { - getLogger().log(BasicLevel.DEBUG, "context " + context + " started"); - } - - } - - /** - * Gets all the engines of the current Tomcat server. - * @return all the engines of the current Tomcat server - * @throws JWebContainerServiceException if engines can not be retrieved - */ - protected synchronized List getEngines() throws JWebContainerServiceException { - List engines = new ArrayList(); - Service[] services = getServer().findServices(); - - // Get contexts of each engine of each service - for (int s = 0; s < services.length; s++) { - Container cont = services[s].getContainer(); - if (!(cont instanceof StandardEngine)) { - String err = "The container of the service must be an engine (server.xml)"; - throw new JWebContainerServiceException(err); - } - engines.add((StandardEngine) cont); - } - return engines; - } - - /** - * Gets all the contexts of the current Tomcat server. - * @return all the contexts of the current Tomcat server - * @throws JWebContainerServiceException if contexts can not be retrieved - */ - protected synchronized List getContexts() throws JWebContainerServiceException { - List contexts = new ArrayList(); - for (Engine engine : getEngines()) { - Container[] hosts = engine.findChildren(); - - for (int j = 0; j < hosts.length; j++) { - Container[] containers = hosts[j].findChildren(); - for (int k = 0; k < containers.length; k++) { - Container container = containers[k]; - if (container instanceof Context) { - contexts.add((Context) container); - } - } - } - } - return contexts; - } - - /** - * Undeploy a specific WAR file specified in the context. - * @param ctx the context which contains the configuration in order to - * undeploy a WAR. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - protected void doUnRegisterWar(final javax.naming.Context ctx) throws JWebContainerServiceException { - - // Get the 2 parameters : - // - contextRoot is the context root to be removed (required param). - // - hostName is the name of the host to remove the war (optional). - String contextRoot = null; - try { - contextRoot = (String) ctx.lookup("contextRoot"); - } catch (NamingException e) { - throw new JWebContainerServiceException("Unable to find the contextRoot parameter", e); - } - - // Change the root context to "" - if (contextRoot.equals("/")) { - contextRoot = ""; - } else { - contextRoot = "/" + contextRoot; - } - ContextFinder.removeNonVersionedContext(contextRoot); - - String hostName = null; - try { - hostName = (String) ctx.lookup("hostName"); - } catch (NamingException e) { - logger.debug("No hostname was defined for this context"); - } - - // Undeploy all matching context if there is no hostname provided - if (hostName == null) { - boolean found = false; - for (Context context : getContexts()) { - String serverCtxRoot = context.getPath(); - if (serverCtxRoot.equals(contextRoot)) { - removeContext(context); - found = true; - break; - } - } - if (!found) { - throw new JWebContainerServiceException("Unable to remove a context with the context name '" - + contextRoot + "'."); - } - } else { - // Remove the specified Context from the set of defined Contexts - // for its associated Host. - Host host = findHost(hostName); - org.apache.catalina.Context context = (org.apache.catalina.Context) host.findChild(contextRoot); - if (context != null) { - removeContext(context); - } else { - throw new JWebContainerServiceException("Unable to find a context for the given hostname '" + hostName + "'."); - } - } - - if (("".equals(hostName) || hostName == null) && "".equals(contextRoot)) { - addDummyContextRoot(); - } - - try { - if (isVersioningEnabled() && contextRoot.length() > 0) { - if (contextRoot.charAt(0) != '/') { - contextRoot = '/' + contextRoot; - } - if (ContextFinder.unbindContextRoot(contextRoot)) { - logger.info("Undeployed version " + contextRoot); - } - } - } catch (Exception e) { - throw new JWebContainerServiceException("Failed unbinding web context", e); - } - } - - /** - * Remove the specified Context from the set of defined Contexts for its - * associated Host. If this is the last Context for this Host, the Host will - * also be removed. - * @param context The Context to be removed - * @throws JWebContainerServiceException if the context can not be removed - */ - public synchronized void removeContext(final Context context) throws JWebContainerServiceException { - - // Is this Context actually among those that are deployed ? - boolean found = false; - Iterator it = getContexts().iterator(); - while (it.hasNext() && !found) { - if (context == it.next()) { - found = true; - } - } - - if (!found) { - return; - } - // Remove this Context from the associated Host - // Or stop it if it is a JOnAS standard context (to keep the - // configuration) - if (context instanceof JOnASStandardContext) { - JOnASStandardContext jctx = (JOnASStandardContext) context; - if (jctx.isInServerXml()) { - try { - ((JOnASStandardContext) context).stop(); - } catch (LifecycleException le) { - throw new JWebContainerServiceException("Cannot stop context (" + le.getMessage() + ")"); - } - } else { - // must not persist - context.getParent().removeChild(context); - } - } else { - context.getParent().removeChild(context); - // Bug Tomcat 5 doesn't remove MBean WebModule - // Delete the next line when will be fixed - // Bug Tomcat 5 : begin - if (context instanceof StandardContext) { - StandardContext ctx = (StandardContext) context; - try { - // unregister WebModule MBean - jmxService.getJmxServer().unregisterMBean(ctx.getObjectName()); - } catch (Exception e) { - getLogger().log(BasicLevel.ERROR, - "Cannot remove the MBean for the WebModule " + ctx.getObjectName() + " : " + e.getMessage()); - } - } - } - - } - - /** - * The server is started ? - * @return boolean true if the catalina container is running. - */ - public boolean isTomcatStarted() { - return tomcatStarted; - } - - /** - * Set the server instance we are configuring. - * @param server The new server - */ - public void setServer(final Server server) { - this.server = server; - } - - /** - * @return the server instance - */ - public synchronized Server getServer() { - // Needs access to the server object - if (server == null) { - startInternalWebContainer(); - } - return server; - } - - - /** - * Return a File object representing the server.xml configuration file. - * @return a File object representing the server.xml configuration file. - * @throws FileNotFoundException if the configuration file is not found. - */ - protected File getConfigFile() throws FileNotFoundException { - - if (this.tomcat7ServerConfPath != null) { - return new File(this.tomcat7ServerConfPath); - } - - //TODO to remove when JOnAS'll be assembled with addons - String fileName = System.getProperty("catalina.base"); - fileName = fileName + File.separator + CONFIG_FILE; - File file = new File(fileName); - if (!file.exists()) { - throw new FileNotFoundException("The configuration file '" + fileName + "' does not exists."); - } - return (file); - } - - /** - * Find the specified host. - * @param hostName the name of the host to find. - * @return the host found. - * @throws JWebContainerServiceException if the specified host cannot be - * found. - */ - public Host findHost(final String hostName) throws JWebContainerServiceException { - - Service[] services = getServer().findServices(); - // Check number of services - if (services.length < 1) { - String err = "At least one service must be define in the server.xml of Tomcat"; - throw new JWebContainerServiceException(err); - } - - // Two cases : - // 1/ No host specified - // -> defaulthost of the engine of the first service. - // 2) A host is specified in the jonas-web.xml - // -> find the host and deploy on this host - - if (hostName == null || hostName.equals("")) { - // First case - - // Take first service - Service service = services[0]; - - Container cont = service.getContainer(); - if (!(cont instanceof Engine)) { - String err = "The container of the service must be an engine"; - throw new JWebContainerServiceException(err); - } - - Engine engine = (Engine) cont; - String defaultHost = engine.getDefaultHost(); - if (defaultHost == null) { - String err = "Default host must be specified in server.xml or host must be specified in jonas-web.xml"; - throw new JWebContainerServiceException(err); - } - Container child = engine.findChild(defaultHost); - // found, return it - if (child instanceof Host) { - return (Host) child; - } - // else error - String err = "Default host " + defaultHost + " not found"; - throw new JWebContainerServiceException(err); - } - // Get all hosts. - List hosts = new ArrayList(); - - for (int s = 0; s < services.length; s++) { - Container cont = services[s].getContainer(); - if (!(cont instanceof Engine)) { - String err = "The container of a service must be an engine"; - throw new JWebContainerServiceException(err); - } - Engine engine = (Engine) cont; - Container child = engine.findChild(hostName); - if (child instanceof Host) { - hosts.add((Host) child); - } - } - - // error - if (hosts.size() == 0) { - // No host found. - String err = "Host " + hostName + " not found in all services/Engine of server.xml"; - throw new JWebContainerServiceException(err); - } - - // first element - return hosts.get(0); - } - - /** - * Create and configure the Digester that will be used for the xml parsing - * of the configuration file. - * @return Digester the digester containing the rules for the xml parsing of - * the server.xml. - */ - protected Digester createServerDigester() { - - // Initialize the digester - Digester digester = new Digester(); - digester.setValidating(false); - digester.addRuleSet(new JCatalinaRuleSet(externalLoader, securityService)); - - // Use context class loader. - // Could avoid problem for users putting digester in JONAS_ROOT/lib/ext - // folder - digester.setUseContextClassLoader(true); - return (digester); - - } - - /** - * Update info of the serverName and serverVersion. - */ - @Override - protected void updateServerInfos() { - String infos = org.apache.catalina.util.ServerInfo.getServerInfo(); - StringTokenizer st = new StringTokenizer(infos, "/"); - if (st.countTokens() != 2) { - setServerName(infos); - setServerVersion(""); - } else { - setServerName(st.nextToken()); - setServerVersion(st.nextToken()); - } - } - - /** - * Return the Default host name of the web container. - * @return the Default host name of the web container. - * @throws JWebContainerServiceException when default host cannot be - * resolved (multiple services). - */ - @Override - public String getDefaultHost() throws JWebContainerServiceException { - Engine engine = (Engine) getFirstService().getContainer(); - return engine.getDefaultHost(); - } - - /** - * Return the Default HTTP port number of the web container. Returns the - * first connector port if more than one are defined. - * @return the Default HTTP port number of the web container. - * @throws JWebContainerServiceException when default HTTP port cannot be - * resolved or none are defined. - */ - @Override - public String getDefaultHttpPort() throws JWebContainerServiceException { - // if server not yet started, analyze the .xml file - if (!tomcatStarted) { - - File configFile = null; - try { - configFile = getConfigFile(); - } catch (FileNotFoundException e) { - throw new JWebContainerServiceException("Cannot get configuration file", e); - } - - InputStream is = null; - try { - is = new FileInputStream(configFile); - DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); - domFactory.setNamespaceAware(true); - DocumentBuilder builder = null; - try { - builder = domFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new JWebContainerServiceException("Cannot build document builder", e); - } - - Document doc = null; - try { - doc = builder.parse(is); - } catch (SAXException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } catch (IOException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - XPathFactory xPathFactory = XPathFactory.newInstance(); - XPath xPath = xPathFactory.newXPath(); - XPathExpression xPathExpr = null; - try { - xPathExpr = xPath.compile("//Server/Service/Connector[@protocol='HTTP/1.1']"); - } catch (XPathExpressionException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - Node node = null; - try { - node = (Node) xPathExpr.evaluate(doc, XPathConstants.NODE); - } catch (XPathExpressionException e) { - throw new JWebContainerServiceException("Cannot analyze configuration file", e); - } - if (node == null) { - // No HTTP connector found, return null - return null; - } - String text = node.getAttributes().getNamedItem("port").getNodeValue(); - return text; - } catch (FileNotFoundException e) { - throw new JWebContainerServiceException("Cannot get input stream", e); - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException e) { - logger.debug("Cannot close input stream", e); - } - } - } - } - int port = getPort("http"); - if (port == -1) { - return null; - } - return String.valueOf(port); - } - - /** - * Return the Default HTTPS port number of the web container (can be null if - * multiple HTTPS connector has been set). - * @return the Default HTTPS port number of the web container. - * @throws JWebContainerServiceException when default HTTPS port cannot be - * resolved (0 occurences). - */ - @Override - public String getDefaultHttpsPort() throws JWebContainerServiceException { - int port = getPort("https"); - if (port == -1) { - return null; - } - return String.valueOf(port); - } - - - /** - * Finds the first connector supporting the given URL scheme - * and return its listening port. - * @param scheme URL schema (http/https) - * @return Port number for a given scheme. - * @throws JWebContainerServiceException if no connectors were found - */ - protected int getPort(final String scheme) throws JWebContainerServiceException { - Service svc = getFirstService(); - List conn = new ArrayList(); - for (Connector c : svc.findConnectors()) { - if (c.getScheme().equalsIgnoreCase(scheme)) { - conn.add(c); - } - } - - if (conn.isEmpty()) { - // No connectors defined - return -1; - } - - Connector c = conn.get(0); - - // Warn the administrator if there are more than one connectors - // specified for a single scheme. - if (conn.size() > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log( - BasicLevel.WARN, - "Found multiple Connectors for scheme '" + scheme + "' in " + getConfigPath() - + ", using first by default! (port:" + c.getPort() + ")"); - } - } - - return c.getPort(); - } - - /** - * @return Returns the first found Service - */ - protected Service getFirstService() { - Service[] svc = getServer().findServices(); - // throw exception if no service is defined - if ((svc == null) || (svc.length == 0)) { - // No Services specified. - throw new JWebContainerServiceException("No Services found in " + getConfigPath()); - } - // Warn the administrator if there are more than one services - // specified in the configuration file. - if (svc.length > 1) { - if (getLogger().isLoggable(BasicLevel.WARN)) { - getLogger().log(BasicLevel.WARN, "Found multiple Services in " + getConfigPath() + ", using first by default!"); - } - } - return svc[0]; - } - - /** - * Register a WAR by delegating the operation to the registerWar() method. - * This is used for JMX management. - * @param fileName the name of the war to deploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the registration failed. - */ - @Override - public void registerWar(final String fileName) throws RemoteException, JWebContainerServiceException { - ClassLoader old = null; - try { - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(externalLoader); - super.registerWar(fileName); - } catch (Exception e) { - throw new ServiceException("Exception during registering war", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - /** - * Unregister a WAR by delegating the operation to the unRegisterWar() - * method. This is used for JMX management. - * @param fileName the name of the war to undeploy. - * @throws RemoteException if rmi call failed. - * @throws JWebContainerServiceException if the unregistration failed. - */ - @Override - public void unRegisterWar(final String fileName) throws RemoteException, JWebContainerServiceException { - ClassLoader old = null; - try { - old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(externalLoader); - super.unRegisterWar(fileName); - } catch (Exception e) { - throw new ServiceException("Exception during unregistering war", e); - } finally { - if (old != null) { - Thread.currentThread().setContextClassLoader(old); - } - } - } - - /** - * @param securityService Security service to set. - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - } - - /** - * @return Security service. - */ - protected SecurityService getSecurityService() { - return securityService; - } - - /** - * @param transactionService TX service to set. - */ - public void setTransactionService(final TransactionService transactionService) { - this.transactionService = transactionService; - } - - /** - * @return TX service. - */ - protected TransactionService getTransactionService() { - return transactionService; - } - - /** - * @return the resource checker manager - */ - public IResourceCheckerManager getResourceCheckerManager() { - return resourceCheckerManager; - } - - /** - * Sets the resource checker manager. - * @param resourceCheckerManager the given instance - */ - public void setResourceCheckerManager(final IResourceCheckerManager resourceCheckerManager) { - this.resourceCheckerManager = resourceCheckerManager; - } - - /** - * Unset the resource checker manager. - */ - public void unsetResourceCheckerManager() { - this.resourceCheckerManager = null; - } - - /** - * Creates an instance of the http service factory. - * @return an instance of the httpservice factory - */ - @Override - protected HttpServiceFactory createHttpServiceFactory() { - return new org.ow2.jonas.web.tomcat7.osgi.httpservice.HttpServiceFactory(this); - } - - /** - * Add a new Context Customizer. - * @param customizer the added Customizer - */ - public void addContextCustomizer(final ContextCustomizer customizer) { - this.customizers.add(customizer); - } - - /** - * Remove the given Customizer. - * @param customizer the removed Customizer - */ - public void removeContextCustomizer(final ContextCustomizer customizer) { - this.customizers.remove(customizer); - } - - public void addServletContainerInitializer(final ServletContainerInitializer initializer) { - this.initializers.add(initializer); - } - - public void removeServletContainerInitializer(final ServletContainerInitializer initializer) { - this.initializers.remove(initializer); - } - - /** - * Registers a dummy servlet that always returns an HTTP error 404.
    - *
    - * That is required to implement http://jira.ow2.org/browse/JONAS-250 on Tomcat 7.x - */ - protected void addDummyContextRoot() { - final HttpService httpService = getService(HttpService.class); - - final HttpContext httpContext = httpService.createDefaultHttpContext(); - - final VersioningService versioning = this.getVersioningService(); - boolean versioningEnabled = false; - if (versioning != null) { - versioningEnabled = versioning.isVersioningEnabled(); - } - try { - if (versioning != null) { - versioning.setVersioningEnabled(false); - } - httpService.registerServlet("/", new EmptyServlet(), null, httpContext); - } catch (ServletException e) { - logger.warn("Cannot register the fake root servlet", e); - } catch (NamespaceException e) { - logger.warn("Cannot register the fake root servlet", e); - } finally { - if (versioning != null) { - versioning.setVersioningEnabled(versioningEnabled); - } - } - } - - /** - * Unregisters the dummy servlet that always returns an HTTP error 404.
    - *
    - * That is required to implement http://jira.ow2.org/browse/JONAS-250 on Tomcat 7.x - */ - protected void removeDummyContextRoot() { - final HttpService httpService = getService(HttpService.class); - - final VersioningService versioning = this.getVersioningService(); - boolean versioningEnabled = false; - if (versioning != null) { - versioningEnabled = versioning.isVersioningEnabled(); - } - try { - if (versioning != null) { - versioning.setVersioningEnabled(false); - } - httpService.unregister("/"); - } finally { - if (versioning != null) { - versioning.setVersioningEnabled(versioningEnabled); - } - } - } - - protected T getService(final Class serviceType) { - final String serviceName = serviceType.getName(); - ServiceReference serviceReference = this.getBundleContext().getServiceReference(serviceName); - - if (serviceReference != null) { - Object service = this.getBundleContext().getService(serviceReference); - if (service != null) { - if (!serviceType.isInstance(service)) { - throw new IllegalStateException("OSGi service " + service + " not instance of " + serviceName); - } - - return serviceType.cast(service); - } - } - - throw new IllegalStateException("Cannot find OSGi service " + serviceName); - } - - /** - * Add the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void addTldResource(final URL tldResource) { - super.addTldResource(tldResource); - } - - /** - * Remove the given TLD URL as a resource. - * @param tldResource the given TLD resource - */ - @Override - public void removeTldResource(final URL tldResource) { - super.removeTldResource(tldResource); - } - - /** - * ${@inheritDoc} - */ - @Override - public void registerAddonConfig(final IAddonConfig addonConfig) { - super.registerAddonConfig(addonConfig); - File file = addonConfig.getConfigurationFile(TOMCAT7_CONTEXT_CONFIG_FILENAME); - if (file != null) { - this.tomcat7ContextConfPath = file.getAbsolutePath(); - } - file = addonConfig.getConfigurationFile(TOMCAT7_SERVER_CONFIG_FILENAME); - if (file != null) { - this.tomcat7ServerConfPath = file.getAbsolutePath(); - } - file = addonConfig.getConfigurationFile(TOMCAT7_WEB_CONFIG_FILENAME); - if (file != null) { - this.tomcat7WebConfPath = file.getAbsolutePath(); - } - } - - /** - * ${@inheritDoc} - */ - @Override - public void unregisterAddonConfig(final IAddonConfig addonConfig) { - super.unregisterAddonConfig(addonConfig); - this.tomcat7ServerConfPath = null; - this.tomcat7WebConfPath = null; - this.tomcat7ContextConfPath = null; - } - - //TODO to remove when JOnAS will be assembled with addons - private String getConfigPath() { - if (this.tomcat7ServerConfPath != null) { - return this.tomcat7ServerConfPath; - } else { - return CONFIG_FILE; - } - } - - /** - * Tomcat7Connector interface: add a connector - * @param serviceName name of the service on which the connector must be added - * @param address address of the connector - * @param port port number - * @param isAjp true if AJP protocol must be used - * @param isSSL true if HTTPS scheme must be used - * @param enableLookups true if enableLookups must be set - */ - public void addConnector(String serviceName, String address, int port, boolean isAjp, boolean isSSL, boolean enableLookups) throws Exception { - - Service service = getService(serviceName); - // Warning currently (Tomcat 7.0.27) the only way to actually initialize the protocol handler, is to specify the protocol name - // through the constructor. - Connector connector = new Connector(isAjp ? "AJP/1.3" : "HTTP/1.1"); - if ((address != null) && (address.length() > 0)) { - connector.setProperty("address", address); - } - - // Set port number - connector.setPort(port); - // Set SSL - connector.setSecure(isSSL); - connector.setScheme(isSSL ? "https" : "http"); - - // Set enableLookups - connector.setEnableLookups(enableLookups); - - // OnDemand feature enabled ? - if (isOnDemandFeatureEnabled()) { - HttpOnDemandProxy onDemandProxy = getWarDeployer().getOnDemandProxy(); - - // Not yet existing - if (onDemandProxy == null) { - - // Build a new random port - int randomPort = getRandomPort(); - - // Add the connector - connector.setProperty("maxKeepAliveRequests", "1"); - connector.setPort(randomPort); - connector.setProxyPort(port); - service.addConnector(connector); - - // Build a new OnDemand Proxy - setOnDemandRedirectPort(randomPort); - setDefaultHttpPort(port); - - // connector already added. skip - return; - } - } - // No HTTP port yet, so as we're adding a connector, sets the value - if (getDefaultHttpPort() == null) { - setDefaultHttpPort(port); - - } - - - service.addConnector(connector); - } - - - /** - * Tomcat7Connector interface: destroy a connector - * @param serviceName name of the service on which the connector must be added - * @param address address of the connector - * @param port port number - */ - public void destroyConnector(String serviceName, String address, int port) throws Exception { - - Service service = getService(serviceName); - - Connector connector = getConnector(service, address, port); - - if (connector != null) { - - connector.stop(); - service.removeConnector(connector); - logger.debug("Tomcat connector stopped '" + address + "/" + port + "'"); - - connector.destroy(); - logger.debug("Tomcat connector destroyed '" + address + "/" + port + "'"); - - } else { - throw new ServiceException("Unable to find a connector '" + serviceName + "/" + address + "/" + port + "'."); - } - - } - - /** - * Tomcat7Connector interface: start a connector - * @param serviceName name of the service on which the connector must be added - * @param address address of the connector - * @param port port number - */ - public void startConnector(String serviceName, String address, int port) throws Exception { - - Service service = getService(serviceName); - Connector connector = getConnector(service, address, port); - connector.start(); - } - - /** - * Tomcat7Connector interface: stop a connector - * @param serviceName name of the service on which the connector must be added - * @param address address of the connector - * @param port port number - */ - public void stopConnector(String serviceName, String address, int port) throws Exception { - - Service service = getService(serviceName); - Connector connector = getConnector(service, address, port); - connector.stop(); - } - - - /** - * Set an attribute no a specified connector - * @param serviceName tomcat standard service - * @param address ip address - * @param port port number - * @param attribute attribute name - * @param value attribute value - */ - public void setConnectorAttribute(String serviceName, String address, int port, String attribute, String value) throws Exception { - Service service = getService(serviceName); - - Connector connector = getConnector(service, address, port); - - if (connector != null) { - connector.setProperty(attribute, value); - logger.debug("Tomcat connector updated '" + address + "/" + port + "' - '" + attribute + "'='" + value + "'"); - - // check the value - logger.debug("Check value '" + connector.getProperty(attribute) + "'"); - - } else { - throw new ServiceException("Unable to find a connector '" + serviceName + "/" + address + "/" + port + "'."); - } - } - - /** - * Get a connector - * @param service tomcat standard service - * @param address ip address - * @param port port number - */ - private Connector getConnector(Service service, String address, int port) { - - Connector conns[] = service.findConnectors(); - - for (int i = 0; i < conns.length; i++) { - String connAddress = String.valueOf(conns[i].getProperty("address")); - int connPort = conns[i].getPort(); - // If OnDemand is enabled, the connector port may be the internal onDemand connector - // So we've to check this match too - if (isOnDemandFeatureEnabled()) { - if (connPort == getOnDemandRedirectPort()) { - connPort = getWarDeployer().getOnDemandProxy().getHttpPortNumber(); - } - } - - - // if (((address.equals("null")) && - if ((connAddress == null) && port == connPort) { - return conns[i]; - } - // } else if (address.equals(connAddress)) - if (connAddress.contains(address) && port == connPort) { - return conns[i]; - } - } - return null; - - } - - /** - * Get a service - * @param serviceName service name - */ - private Service getService(String serviceName) { - - Service service; - if (serviceName == null) { - service = getFirstService(); - } else { - service = getServer().findService(serviceName); - } - return service; - - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/custom/ContextCustomizer.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/custom/ContextCustomizer.java deleted file mode 100644 index 2deeebbbd1..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/custom/ContextCustomizer.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.custom; - -import org.apache.catalina.core.StandardContext; -import org.ow2.util.ee.deploy.api.deployable.WARDeployable; - -/** - * A {@code ContextCustomizer} is used to customize a Tomcat Context before its startup. - * @author Guillaume Sauthier - * - */ -public interface ContextCustomizer { - - /** - * Customize the given Catalina Context instance using the given WAR deployable. - * This is called just before the Context start-up. - * @param context Catalina Context to be customized - * @param deployable the WAR being deployed - */ - void customize(final StandardContext context, final WARDeployable deployable); -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/handler/DirContextURLStreamHandlerService.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/handler/DirContextURLStreamHandlerService.java deleted file mode 100644 index 7c12733a71..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/handler/DirContextURLStreamHandlerService.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.handler; - -import java.net.URL; -import java.net.URLConnection; -import java.net.InetAddress; -import java.io.IOException; - -import org.apache.naming.resources.DirContextURLStreamHandler; -import org.osgi.service.url.URLStreamHandlerService; -import org.osgi.service.url.URLStreamHandlerSetter; - -/** - * The DirContextURLStreamHandlerService is a wrapper around the Tomcat's - * DirContextURLStreamHandler that is responsible of loading URL of the - * scheme 'jndi' (jndi://...). - * - * This class is exposed as a URLStreamHandlerService (OSGi URL service interface). - * - * @author Guillaume Sauthier - */ -public class DirContextURLStreamHandlerService extends DirContextURLStreamHandler - implements URLStreamHandlerService { - - /** - * The URLStreamHandlerSetter object passed to the parseURL - * method. - */ - protected volatile URLStreamHandlerSetter realHandler; - - public URLConnection openConnection(final URL url) throws IOException { - return super.openConnection(url); - } - - public void parseURL(final URLStreamHandlerSetter realHandler, - final URL url, - final String spec, - final int start, - final int limit) { - this.realHandler = realHandler; - parseURL(url, spec, start, limit); - } - - public String toExternalForm(final URL url) { - return super.toExternalForm(url); - } - - public boolean equals(final URL url, final URL url1) { - return super.equals(url, url1); - } - - public int getDefaultPort() { - return super.getDefaultPort(); - } - - public InetAddress getHostAddress(final URL url) { - return super.getHostAddress(url); - } - - public int hashCode(final URL url) { - return super.hashCode(url); - } - - public boolean hostsEqual(final URL url, final URL url1) { - return super.hostsEqual(url, url1); - } - - public boolean sameFile(final URL url, final URL url1) { - return super.sameFile(url, url1); - } - - - /** - * This method calls - * realHandler.setURL(URL,String,String,int,String,String). - * - * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String)" - * @deprecated This method is only for compatibility with handlers written - * for JDK 1.1. - */ - protected void setURL(final URL u, - final String proto, - final String host, - final int port, - final String file, final String ref) { - realHandler.setURL(u, proto, host, port, file, ref); - } - - /** - * This method calls - * realHandler.setURL(URL,String,String,int,String,String,String,String). - * - * @see "java.net.URLStreamHandler.setURL(URL,String,String,int,String,String,String,String)" - */ - protected void setURL(final URL u, - final String proto, - final String host, - final int port, - final String auth, - final String user, - final String path, - final String query, - final String ref) { - realHandler.setURL(u, proto, host, port, auth, user, path, query, ref); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/loader/NoSystemAccessWebappClassLoader.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/loader/NoSystemAccessWebappClassLoader.java deleted file mode 100644 index 7c61f3275e..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/loader/NoSystemAccessWebappClassLoader.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.loader; - -import java.io.InputStream; -import java.net.URL; - -import org.apache.catalina.loader.WebappClassLoader; - -/** - * This {@code WebappClassLoader} disable the system ClassLoader direct access - * from web applications. It make them fit better in the "standard" module classloader - * chain: a module with just 1 parent. - * - * The system ClassLoader will still be accessed, but not in the first - * place: so that OSGi provided JAX-WS API have a chance to make it before - * the system ones AND applications relying on resources available from - * system loader will continue to find their resources. - */ -public class NoSystemAccessWebappClassLoader extends WebappClassLoader { - - /** - * The unique instance of disabled ClassLoader. - */ - private static final ClassLoader DISABLED_LOADER = new DisabledClassLoader(); - - /** - * Construct a new ClassLoader with no defined repositories and no - * parent ClassLoader. - */ - public NoSystemAccessWebappClassLoader(ClassLoader parent) { - super(parent); - // Overwrite the system ClassLoader in use. - system = DISABLED_LOADER; - - // avoid bug JONAS-245 by making Tomcat not destroy the root logger - setClearReferencesLogFactoryRelease(false); - } - - /** - * This disabled loader returns null on all methods used from - * the tomcat WebappClassLoader (getResourceAsStream() use getResource() - * under the hood, so no need to override it). - */ - private static class DisabledClassLoader extends ClassLoader { - /** - * Loads the class with the specified binary name. - * This method searches for classes in the same manner as the {@link - * #loadClass(String, boolean)} method. It is invoked by the Java virtual - * machine to resolve class references. Invoking this method is equivalent - * to invoking {@link #loadClass(String, boolean) loadClass(name, - * false)}.

    - * - * @param name The binary name of the class - * @return The resulting Class object - * @throws ClassNotFoundException If the class was not found - */ - @Override - public Class loadClass(String name) throws ClassNotFoundException { - return null; - } - - /** - * Finds the resource with the given name. A resource is some data - * (images, audio, text, etc) that can be accessed by class code in a way - * that is independent of the location of the code. - *

    - *

    The name of a resource is a '/'-separated path name that - * identifies the resource. - *

    - *

    This method will first search the parent class loader for the - * resource; if the parent is null the path of the class loader - * built-in to the virtual machine is searched. That failing, this method - * will invoke {@link #findResource(String)} to find the resource.

    - * - * @param name The resource name - * @return A URL object for reading the resource, or - * null if the resource could not be found or the invoker - * doesn't have adequate privileges to get the resource. - * @since 1.1 - */ - @Override - public URL getResource(String name) { - return null; - } - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiInstanceTldCacheListener.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiInstanceTldCacheListener.java deleted file mode 100644 index 30da35a7a0..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiInstanceTldCacheListener.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; - -import org.apache.catalina.InstanceEvent; -import org.apache.catalina.InstanceListener; -import org.apache.jasper.EmbeddedServletOptions; -import org.apache.jasper.compiler.TldLocationsCache; -import org.apache.jasper.servlet.JspServlet; - -/** - * Instance listener of the JSP Servlet in order to add the taglibs found into the cache. - * @author Florent Benoit - */ -public class OSGiInstanceTldCacheListener implements InstanceListener { - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public OSGiInstanceTldCacheListener(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - } - - /** - * Lifecycle event for the instance. - * @param event the event of the instance. - */ - @Override - public void instanceEvent(final InstanceEvent event) { - // Only react when the instance when just alive (but not already inited) - if (InstanceEvent.AFTER_INIT_EVENT.equals(event.getType())) { - - // The servlet is a JspServlet - try { - JspServlet jspServlet = (JspServlet) event.getServlet(); - Field optionsField = JspServlet.class.getDeclaredField("options"); - optionsField.setAccessible(true); - EmbeddedServletOptions options = (EmbeddedServletOptions) optionsField.get(jspServlet); - TldLocationsCache tldLocationCache = options.getTldLocationsCache(); - - // get the method - Method tldScanStreamMethod = TldLocationsCache.class.getDeclaredMethod("tldScanStream", String.class, - String.class, InputStream.class); - // it is private - tldScanStreamMethod.setAccessible(true); - - // Add each taglib into the cache - if (resourcesToMonitor != null) { - for (URL url : resourcesToMonitor) { - try { - URLConnection urlConnection = url.openConnection(); - urlConnection.setDefaultUseCaches(false); - - tldScanStreamMethod.invoke(tldLocationCache, url.toString(), null, urlConnection.getInputStream()); - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } - } - } - - } catch (SecurityException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (IllegalArgumentException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Unable to get TLDCache", e); - } - } - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiTldListener.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiTldListener.java deleted file mode 100644 index 6ad958e1d9..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/OSGiTldListener.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.web.tomcat7.osgi; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.Wrapper; -import org.apache.catalina.startup.TldConfig; -import org.apache.jasper.servlet.JspServlet; - -/** - * This TLD listener will manage TLD resources that are exposed through OSGi. - * For example jsf service may expose some TLDs and this listener will register them into Tomcat. - * @author Florent Benoit - */ -public class OSGiTldListener implements LifecycleListener { - - /** - * Instance that will be used to managed the OSGi TLDs resources. - */ - private TldConfig tldConfig; - - /** - * List of resources to analyze. - */ - private List resourcesToMonitor = null; - - /** - * Tld Scan Stream method. - */ - private Method tldScanStreamMethod = null; - - /** - * Default constructor. - * @param resourcesToMonitor the TLDs resources that needs to be scanned - */ - public OSGiTldListener(final List resourcesToMonitor) { - this.resourcesToMonitor = resourcesToMonitor; - this.tldConfig = new TldConfig(); - - try { - this.tldScanStreamMethod = tldConfig.getClass().getDeclaredMethod("tldScanStream", InputStream.class); - // private method - this.tldScanStreamMethod.setAccessible(true); - } catch (SecurityException e) { - throw new IllegalStateException("Unable to find the given method", e); - } catch (NoSuchMethodException e) { - throw new IllegalStateException("Unable to find the given method", e); - } - - } - - /** - * Notify the tld scanner depending on the events. - * @param event the lifecycle event - */ - public void lifecycleEvent(final LifecycleEvent event) { - Context context = null; - // Identify the context we are associated with - try { - context = (Context) event.getLifecycle(); - } catch (ClassCastException e) { - return; - } - - if (event.getType().equals(Lifecycle.AFTER_INIT_EVENT)) { - // Init our internal tldconfig object - tldConfig.lifecycleEvent(event); - } else if (event.getType().equals(Lifecycle.CONFIGURE_START_EVENT)) { - // needs to analyze the OSGi TLD resources - if (resourcesToMonitor != null) { - for (URL url : resourcesToMonitor) { - try { - URLConnection urlConnection = url.openConnection(); - urlConnection.setDefaultUseCaches(false); - - tldScanStreamMethod.invoke(tldConfig, urlConnection.getInputStream()); - } catch (IOException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } catch (InvocationTargetException e) { - throw new IllegalStateException("Unable to add the TLD", e); - } - } - } - - - String[] listeners = tldConfig.getTldListeners(); - if (listeners != null) { - for (String listener : listeners) { - context.addApplicationListener(listener); - } - } - - addTldIntoCache(context); - - } else if (event.getType().equals(Lifecycle.STOP_EVENT)) { - // Strop our internal tldconfig object - tldConfig.lifecycleEvent(event); - } - } - - /** - * Adds a listener on the JSP servlet in order to add TagLib into the taglib cache. - * @param context the given standard context. - */ - protected void addTldIntoCache(final Context context) { - - // find all the declared servlets/wrappers - Container[] childs = context.findChildren(); - // Childrens are all Wrappers - if (childs != null) { - for (Container child : childs) { - Wrapper wrapper = (Wrapper) child; - String servletClass = wrapper.getServletClass(); - if (JspServlet.class.getName().equals(servletClass)) { - wrapper.addInstanceListener(new OSGiInstanceTldCacheListener(resourcesToMonitor)); - } - - - } - } - } - - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7AjpConnector.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7AjpConnector.java deleted file mode 100644 index ada1cb0c00..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7AjpConnector.java +++ /dev/null @@ -1,194 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.osgi.configadmin; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name = "Tomcat7AjpConnector") -public class Tomcat7AjpConnector { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(Tomcat7AjpConnector.class); - - /** - * Parameter : address - */ - @Property(name = "address", mandatory = true) - private String address; - - /** - * Parameter : port - */ - @Property(name = "port", mandatory = true) - private int port; - - /** - * Parameter : maxThreads - */ - @Property(name = "maxThreads", mandatory = false) - private String maxThreads; - - /** - * Parameter : minSpareThreads - */ - @Property(name = "minSpareThreads", mandatory = false) - private String minSpareThreads; - - /** - * Parameter : enableLookups - */ - @Property(name = "enableLookups", mandatory = false) - private boolean enableLookups; - - /** - * Parameter : connectionTimeout - */ - @Property(name = "connectionTimeout", mandatory = false) - private String connectionTimeout; - - /** - * Parameter : acceptCount - */ - @Property(name = "acceptCount", mandatory = false) - private String acceptCount; - - /** - * Parameter : maxKeepAliveRequests - */ - @Property(name = "maxKeepAliveRequests", mandatory = false) - private String maxKeepAliveRequests; - - /** - * Parameter : compression - */ - @Property(name = "compression", mandatory = false) - private String compression; - - /** - * Parameter: redirectPort - */ - @Property(name = "redirectPort", mandatory = false) - private String redirectPort; - - /** - * Service delegation - */ - @Requires - private Tomcat7Connector tomcat7ConnectorService; - - - @Validate - public void start() { - try { - - boolean isAjp = true; - boolean isSSL = false; - - tomcat7ConnectorService.addConnector(null, address, port, isAjp, isSSL, enableLookups); - logger.info("Tomcat AJP connector {0}/{1} created - enableLookups={2}", address, String.valueOf(port), enableLookups); - - // set the maxThreads - logger.debug("maxThreads={0}", maxThreads); - if (maxThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxThreads", maxThreads); - logger.debug("Tomcat AJP connector {0}/{1} - attribute maxThreads updated -> {2}", address, String.valueOf(port), - maxThreads); - } - - // set the minSpareThreads - logger.debug("minSpareThreads={0}", minSpareThreads); - if (minSpareThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "minSpareThreads", minSpareThreads); - logger.debug("Tomcat AJP connector {0}/{1} - attribute minSpareThreads updated -> {2}", address, String.valueOf(port), - minSpareThreads); - } - - // set the connectionTimeout - logger.debug("connectionTimeout={0}", connectionTimeout); - if (connectionTimeout != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "connectionTimeout", connectionTimeout); - logger.debug("Tomcat AJP connector {0}/{1} - attribute connectionTimeout updated -> {2}", address, String.valueOf(port), - connectionTimeout); - } - - // set the acceptCount - logger.debug("acceptCount={0}", acceptCount); - if (acceptCount != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "acceptCount", acceptCount); - logger.debug("Tomcat AJP connector {0}/{1} - attribute acceptCount updated -> {2}", address, String.valueOf(port), - acceptCount); - } - - // set the maxKeepAliveRequests - logger.debug("maxKeepAliveRequests={0}", maxKeepAliveRequests); - if (maxKeepAliveRequests != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxKeepAliveRequests", maxKeepAliveRequests); - logger.debug("Tomcat AJP connector {0}/{1} - attribute maxKeepAliveRequests updated -> {2}", address, String.valueOf(port), - maxKeepAliveRequests); - } - - // set the compression - logger.debug("compression={0}", compression); - if (compression != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "compression", compression); - logger.debug("Tomcat AJP connector {0}/{1} - attribute compression updated -> {2}", address, String.valueOf(port), - compression); - } - - // set the redirect port - logger.debug("redirectPort={0}", redirectPort); - if (redirectPort != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "redirectPort", redirectPort); - logger.debug("Tomcat AJP connector {0}/{1} - attribute redirectPort updated -> {2}", address, String.valueOf(port), - redirectPort); - } - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, String.valueOf(port), e); - } - } - - @Invalidate - public void stop() { - - try { - - tomcat7ConnectorService.destroyConnector(null, address, port); - logger.debug("Tomcat AJP connector {0}/{1} destroyed", address, String.valueOf(port)); - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, String.valueOf(port), e); - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7Connector.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7Connector.java deleted file mode 100644 index deb31eedd6..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7Connector.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.osgi.configadmin; - -public interface Tomcat7Connector { - void addConnector(final String serviceName, final String address, final int port, final boolean isAjp, final boolean isSSL, final boolean enableLookups) throws Exception; - void destroyConnector(final String serviceName, final String address, final int port) throws Exception; - void startConnector(String serviceName, String address, int port) throws Exception; - void stopConnector(String serviceName, String address, int port) throws Exception; - void setConnectorAttribute(String serviceName, String address, int port, String attribute, String value) throws Exception; -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpConnector.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpConnector.java deleted file mode 100644 index a4a7b86565..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpConnector.java +++ /dev/null @@ -1,195 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.osgi.configadmin; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name = "Tomcat7HttpConnector") -public class Tomcat7HttpConnector { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(Tomcat7HttpConnector.class); - - /** - * Parameter : address - */ - @Property(name = "address", mandatory = true) - private String address; - - /** - * Parameter : port - */ - @Property(name = "port", mandatory = true) - private int port; - - /** - * Parameter : maxThreads - */ - @Property(name = "maxThreads", mandatory = false) - private String maxThreads; - - /** - * Parameter : minSpareThreads - */ - @Property(name = "minSpareThreads", mandatory = false) - private String minSpareThreads; - - /** - * Parameter : enableLookups - */ - @Property(name = "enableLookups", mandatory = false) - private boolean enableLookups; - - /** - * Parameter : connectionTimeout - */ - @Property(name = "connectionTimeout", mandatory = false) - private String connectionTimeout; - - /** - * Parameter : acceptCount - */ - @Property(name = "acceptCount", mandatory = false) - private String acceptCount; - - /** - * Parameter : maxKeepAliveRequests - */ - @Property(name = "maxKeepAliveRequests", mandatory = false) - private String maxKeepAliveRequests; - - /** - * Parameter : compression - */ - @Property(name = "compression", mandatory = false) - private String compression; - - /** - * Parameter: redirectPort - */ - @Property(name = "redirectPort", mandatory = false) - private String redirectPort; - - /** - * Service delegation - */ - @Requires - private Tomcat7Connector tomcat7ConnectorService; - - - @Validate - public void start() { - try { - - boolean isAjp = false; - boolean isSSL = false; - - tomcat7ConnectorService.addConnector(null, address, port, isAjp, isSSL, enableLookups); - logger.info("Tomcat HTTP connector {0}/{1} created - enableLookups={2}", address, String.valueOf(port), enableLookups); - - // set the maxThreads - logger.debug("maxThreads={0}", maxThreads); - if (maxThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxThreads", maxThreads); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute maxThreads updated -> {2}", address, String.valueOf(port), - maxThreads); - } - - // set the minSpareThreads - logger.debug("minSpareThreads={0}", minSpareThreads); - if (minSpareThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "minSpareThreads", minSpareThreads); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute minSpareThreads updated -> {2}", address, String.valueOf(port), - minSpareThreads); - } - - // set the connectionTimeout - logger.debug("connectionTimeout={0}", connectionTimeout); - if (connectionTimeout != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "connectionTimeout", connectionTimeout); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute connectionTimeout updated -> {2}", address, String.valueOf(port), - connectionTimeout); - } - - // set the acceptCount - logger.debug("acceptCount={0}", acceptCount); - if (acceptCount != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "acceptCount", acceptCount); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute acceptCount updated -> {2}", address, String.valueOf(port), - acceptCount); - } - - // set the maxKeepAliveRequests - logger.debug("maxKeepAliveRequests={0}", maxKeepAliveRequests); - if (maxKeepAliveRequests != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxKeepAliveRequests", maxKeepAliveRequests); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute maxKeepAliveRequests updated -> {2}", address, String.valueOf(port), - maxKeepAliveRequests); - } - - // set the compression - logger.debug("compression={0}", compression); - if (compression != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "compression", compression); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute compression updated -> {2}", address, String.valueOf(port), - compression); - } - - // set the redirect port - logger.debug("redirectPort={0}", redirectPort); - if (redirectPort != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "redirectPort", redirectPort); - logger.debug("Tomcat HTTP connector {0}/{1} - attribute redirectPort updated -> {2}", address, String.valueOf(port), - redirectPort); - } - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, String.valueOf(port), e); - - } - } - - @Invalidate - public void stop() { - - try { - - tomcat7ConnectorService.destroyConnector(null, address, port); - logger.debug("Tomcat HTTP connector {0}/{1} destroyed", address, String.valueOf(port)); - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, String.valueOf(port), e); - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpsConnector.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpsConnector.java deleted file mode 100644 index a045878029..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/configadmin/Tomcat7HttpsConnector.java +++ /dev/null @@ -1,224 +0,0 @@ -/** - * JOnAS - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.osgi.configadmin; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Requires; -import org.apache.felix.ipojo.annotations.Validate; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -@Component(name = "Tomcat7HttpsConnector") -public class Tomcat7HttpsConnector { - - /** - * Logger - */ - private static Log logger = LogFactory.getLog(Tomcat7HttpsConnector.class); - - /** - * Parameter : address - */ - @Property(name = "address", mandatory = true) - private String address; - - /** - * Parameter : port - */ - @Property(name = "port", mandatory = true) - private int port; - - /** - * Parameter : maxThreads - */ - @Property(name = "maxThreads", mandatory = false) - private String maxThreads; - - /** - * Parameter : minSpareThreads - */ - @Property(name = "minSpareThreads", mandatory = false) - private String minSpareThreads; - - /** - * Parameter : enableLookups - */ - @Property(name = "enableLookups", mandatory = false) - private boolean enableLookups; - - /** - * Parameter : connectionTimeout - */ - @Property(name = "connectionTimeout", mandatory = false) - private String connectionTimeout; - - /** - * Parameter : acceptCount - */ - @Property(name = "acceptCount", mandatory = false) - private String acceptCount; - - /** - * Parameter : maxKeepAliveRequests - */ - @Property(name = "maxKeepAliveRequests", mandatory = false) - private String maxKeepAliveRequests; - - /** - * Parameter : compression - */ - @Property(name = "compression", mandatory = false) - private String compression; - - /** - * Parameter: redirectPort - */ - @Property(name = "redirectPort", mandatory = false) - private String redirectPort; - - /** - * Parameter: keystoreFile - */ - @Property(name = "keystoreFile", mandatory = false) - private String keystoreFile; - - /** - * Parameter: keystorePass - */ - @Property(name = "keystorePass", mandatory = false) - private String keystorePass; - - /** - * Service delegation - */ - @Requires - private Tomcat7Connector tomcat7ConnectorService; - - - @Validate - public void start() { - try { - - boolean isAjp = false; - boolean isSSL = true; - - tomcat7ConnectorService.addConnector(null, address, port, isAjp, isSSL, enableLookups); - logger.info("Tomcat HTTPS connector {0}/{1} created - enableLookups={2}", address, String.valueOf(port), enableLookups); - - // set the maxThreads - logger.debug("maxThreads={0}", maxThreads); - if (maxThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxThreads", maxThreads); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute maxThreads updated -> {2}", address, String.valueOf(port), - maxThreads); - } - - // set the minSpareThreads - logger.debug("minSpareThreads={0}", minSpareThreads); - if (minSpareThreads != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "minSpareThreads", minSpareThreads); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute minSpareThreads updated -> {2}", address, String.valueOf(port), - minSpareThreads); - } - - // set the connectionTimeout - logger.debug("connectionTimeout={0}", connectionTimeout); - if (connectionTimeout != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "connectionTimeout", connectionTimeout); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute connectionTimeout updated -> {2}", address, String.valueOf(port), - connectionTimeout); - } - - // set the acceptCount - logger.debug("acceptCount={0}", acceptCount); - if (acceptCount != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "acceptCount", acceptCount); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute acceptCount updated -> {2}", address, String.valueOf(port), - acceptCount); - } - - // set the maxKeepAliveRequests - logger.debug("maxKeepAliveRequests={0}", maxKeepAliveRequests); - if (maxKeepAliveRequests != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "maxKeepAliveRequests", maxKeepAliveRequests); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute maxKeepAliveRequests updated -> {2}", address, - String.valueOf(port), maxKeepAliveRequests); - } - - // set the compression - logger.debug("compression={0}", compression); - if (compression != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "compression", compression); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute compression updated -> {2}", address, String.valueOf(port), - compression); - } - - // set the redirect port - logger.debug("redirectPort={0}", redirectPort); - if (redirectPort != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "redirectPort", redirectPort); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute redirectPort updated -> {2}", address, String.valueOf(port), - redirectPort); - } - - //set the keystore file - logger.debug("keystoreFile={0}", keystoreFile); - if (keystoreFile != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "keystoreFile", keystoreFile); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute keystoreFile updated -> {2}", address, String.valueOf(port), - keystoreFile); - } - - //set the keystorePass - logger.debug("keystorePass={0}", keystorePass); - if (keystorePass != null) { - tomcat7ConnectorService.setConnectorAttribute(null, address, port, "keystorePass", keystorePass); - logger.debug("Tomcat HTTPS connector {0}/{1} - attribute keystorePass updated -> {2}", address, String.valueOf(port), - keystorePass); - } - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, String.valueOf(port), e); - - } - } - - @Invalidate - public void stop() { - - try { - - tomcat7ConnectorService.destroyConnector(null, address, port); - logger.debug("Tomcat HTTPS connector {0}/{1} destroyed", address, port); - - - } catch (Exception e) { - logger.error("Error when creating the connector {0}/{1} - exception={2}", address, port, e); - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceFactory.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceFactory.java deleted file mode 100644 index b7a7d76fc4..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi.httpservice; - -import org.osgi.framework.Bundle; -import org.ow2.jonas.web.base.osgi.httpservice.JOnASHttpService; -import org.ow2.jonas.web.tomcat7.Tomcat7Service; - -/** - * Service factory for Tomcat7 service. - * @author Florent Benoit - */ -public class HttpServiceFactory extends org.ow2.jonas.web.base.osgi.httpservice.HttpServiceFactory { - - /** - * Constructor. - * @param tomcat7Service the web container service to use. - */ - public HttpServiceFactory(final Tomcat7Service tomcat7Service) { - super(tomcat7Service); - } - - /** - * Build an implementation of the Http service. - * @param callerBundle The bundle using the service. - * @param tomcat7Service the web container service instance - * @return an implementation of the httpService - */ - @Override - protected JOnASHttpService buildHttpServiceImpl(final Bundle callerBundle, final Tomcat7Service tomcat7Service) { - return new HttpServiceImpl(callerBundle, tomcat7Service, getWorkDirectory()); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceImpl.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceImpl.java deleted file mode 100644 index 94b106480c..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/HttpServiceImpl.java +++ /dev/null @@ -1,512 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi.httpservice; - -import java.io.File; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import javax.management.MBeanServer; -import javax.management.ObjectName; -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.startup.ContextConfig; -import org.osgi.framework.Bundle; -import org.osgi.framework.Constants; -import org.osgi.service.http.HttpContext; -import org.osgi.service.http.HttpService; -import org.osgi.service.http.NamespaceException; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.web.base.osgi.httpservice.DefaultHttpContextImpl; -import org.ow2.jonas.web.base.osgi.httpservice.JOnASHttpService; -import org.ow2.jonas.web.base.osgi.httpservice.OSGIResourcesServlet; -import org.ow2.jonas.web.tomcat7.JOnASContextConfig; -import org.ow2.jonas.web.tomcat7.Tomcat7Service; -import org.ow2.jonas.web.tomcat7.versioning.ContextFinder; - -/** - * Implementation of {@link HttpService} that uses {@link Tomcat7Service} - * catalina web container to publish servlets. The Http Service allows other - * bundles in the OSGi environment to dynamically register resources and - * servlets into the URI namespace of Http Service. A bundle may later - * unregister its resources or servlets. - * @author Guillaume Porcher - */ -public class HttpServiceImpl implements JOnASHttpService { - - /** - * The bundle using the service. - */ - private final Bundle callerBundle; - - /** - * The {@link Tomcat7Service} used by this service. - */ - private final Tomcat7Service tomcatService; - - /** - * The name of the working directory. - */ - private final String workDir; - - /** - * List of the registered wrappers. - */ - private List wrapperList = null; - - /** - * Default constructor. - * @param bundle The bundle using the service. - * @param tomcat7Service The {@link Tomcat7Service} to use. - * @param workDir The name of the working directory. - */ - public HttpServiceImpl(final Bundle bundle, final Tomcat7Service tomcat7Service, final String workDir) { - this.callerBundle = bundle; - this.tomcatService = tomcat7Service; - this.workDir = workDir; - this.wrapperList = new LinkedList(); - } - - /** - * Creates a default HttpContext for registering servlets or - * resources with the HttpService, a new HttpContext object is - * created each time this method is called.

    The behavior of the methods - * on the default HttpContext is defined as follows:

      - *
    • getMimeType- Does not define any customized MIME types - * for the Content-Type header in the response, and always returns - * null.
    • handleSecurity- Performs no - * authentication on the request. This method always returns - * true.
    • getResource- Assumes the named - * resource is in the context bundle; this method calls the context bundle's - * Bundle.getResource method, and returns the appropriate URL - * to access the resource. On a Java runtime environment that supports - * permissions, the Http Service needs to be granted - * org.osgi.framework.AdminPermission[*,RESOURCE].
    - * @return a default HttpContext object, which is an instance - * of {@link DefaultHttpContextImpl}. - */ - public HttpContext createDefaultHttpContext() { - return new DefaultHttpContextImpl(this.callerBundle); - } - - /** - * Registers resources into the URI namespace.

    The alias is the name in - * the URI namespace of the Http Service at which the registration will be - * mapped. An alias must begin with slash ('/') and must not end with slash - * ('/'), with the exception that an alias of the form "/" is used - * to denote the root alias. The name parameter must also not end with slash - * ('/'). See the specification text for details on how HTTP requests are - * mapped to servlet and resource registrations.

    For example, suppose - * the resource name /tmp is registered to the alias /files. A request for - * /files/foo.txt will map to the resource name /tmp/foo.txt.

    -     * httpservice.registerResources("/files", "/tmp",
    -     * context); 
    The Http Service will call the HttpContext - * argument to map resource names to URLs and MIME types and to handle - * security for requests. If the HttpContext argument is - * null, a default HttpContext is used (see - * {@link #createDefaultHttpContext}). - * @param alias name in the URI namespace at which the resources are - * registered - * @param name the base name of the resources that will be registered - * @param httpContext the HttpContext object for the registered - * resources, or null if a default - * HttpContext is to be created and used. - * @throws NamespaceException if the registration fails because the alias is - * already in use. - * @throws java.lang.IllegalArgumentException if any of the parameters are - * invalid - */ - public void registerResources(final String alias, final String name, final HttpContext httpContext) - throws NamespaceException, IllegalArgumentException { - HttpContext context = null; - // if context is null, use default context - if (httpContext == null) { - context = this.createDefaultHttpContext(); - } else { - context = httpContext; - } - - final Servlet servlet = new OSGIResourcesServlet(context, name); - try { - this.registerServlet(alias, servlet, null, context); - } catch (final ServletException e) { - // TODO: handle exception - e.printStackTrace(); - } - } - - /** - * Registers a servlet into the URI namespace.

    The alias is the name in - * the URI namespace of the Http Service at which the registration will be - * mapped.

    An alias must begin with slash ('/') and must not end with - * slash ('/'), with the exception that an alias of the form "/" - * is used to denote the root alias. See the specification text for details - * on how HTTP requests are mapped to servlet and resource registrations. - *

    The Http Service will call the servlet's init method - * before returning.

    -     * httpService.registerServlet("/myservlet", servlet, initparams,
    -     * context); 

    Servlets registered with the same - * HttpContext object will share the same - * ServletContext. The Http Service will call the - * context argument to support the ServletContext - * methods getResource,getResourceAsStream and - * getMimeType, and to handle security for requests. If the - * context argument is null, a default - * HttpContext object is used (see - * {@link #createDefaultHttpContext}). - * @param alias name in the URI namespace at which the servlet is registered - * @param servlet the servlet object to register - * @param initParams initialization arguments for the servlet or - * null if there are none. This argument is used by the - * servlet's ServletConfig object. - * @param context the HttpContext object for the registered - * servlet, or null if a default - * HttpContext is to be created and used. - * @throws NamespaceException if the registration fails because the alias is - * already in use. - * @throws javax.servlet.ServletException if the servlet's init - * method throws an exception, or the given servlet object has - * already been registered at a different alias. - * @throws java.lang.IllegalArgumentException if any of the arguments are - * invalid - */ - public void registerServlet(final String alias, final Servlet servlet, final Dictionary initParams, - HttpContext context) throws ServletException, NamespaceException, IllegalArgumentException { - // check alias - if (!this.checkAlias(alias)) { - throw new IllegalArgumentException(alias + " is not a valid alias."); - } - - // check if servlet is already registered - synchronized (wrapperList) { - for (OSGIWrapper osgiWrapper : wrapperList) { - if (osgiWrapper.getServlet() == servlet) { - throw new ServletException("servlet already registered"); - } - } - } - - String versionID = null; - String userURI = null; - - // Parse context in order to find the context root of the given context - String parsedContext [] = parseContext(alias); - String contextRoot = parsedContext[0]; - String servletPath = parsedContext[1]; - - if (this.tomcatService.isVersioningEnabled()) { - versionID = this.getVersionId(); - if (!contextRoot.contains(versionID)) { - userURI = contextRoot; - contextRoot += versionID; - } else { - userURI = contextRoot.replace(versionID, ""); - } - } - - - // register fake webapp context in host - final Host host = this.tomcatService.findHost(""); - - Container hostContainer = host.findChild(contextRoot); - OSGIContext osgiContext = null; - - // if context is null, use default context - if (context == null) { - context = this.createDefaultHttpContext(); - } - - // No host found - if (hostContainer == null) { - // create fake webapp for registering the servlet - osgiContext = new OSGIContext(context); - osgiContext.setPath(contextRoot); - osgiContext.setName(contextRoot); - osgiContext.setTomcatService(tomcatService); - - // JSR 77 - osgiContext.setJ2EEServer(tomcatService.getJonasServerName()); - ObjectName j2eeServerOn = J2eeObjectName.J2EEServer(tomcatService.getDomainName(), tomcatService.getJonasServerName()); - osgiContext.setServer(j2eeServerOn.toString()); - // Get info about JavaVM in standard J2EEServer MBean - MBeanServer mbeanServer = tomcatService.getJmxService().getJmxServer(); - try { - String[] as = (String[]) mbeanServer.getAttribute(j2eeServerOn, "javaVMs"); - osgiContext.setJavaVMs(as); - } catch (Exception e) { - //getLogger().log(BasicLevel.WARN, "Set MBean JVM error : " + e.getClass().getName() + " " + e.getMessage()); - } - - osgiContext.setDocBase(new File(this.workDir).getAbsolutePath()); - - // Empty Injection Map - osgiContext.setInjectionMap(new HashMap>()); - - - final ContextConfig config = new JOnASContextConfig(); - ((Lifecycle) osgiContext).addLifecycleListener(config); - - host.addChild(osgiContext); - - try { - if (this.tomcatService.isVersioningEnabled() && userURI != null) { - final String policy = this.tomcatService.getVersioningService().getDefaultDeploymentPolicy(); - ContextFinder.bindContextRoot(this.callerBundle.getSymbolicName(), userURI, osgiContext, policy); - } - - ContextFinder.addNonVersionedContext(contextRoot); - } catch (final Exception e) { - throw new JWebContainerServiceException("Failed binding versioned web context", e); - } - } else if (hostContainer instanceof OSGIContext) { - osgiContext = (OSGIContext) hostContainer; - } else { - throw new NamespaceException(contextRoot + " already registered."); - } - - // Check servlet path is unique - if (osgiContext.findChild(servletPath) != null) { - throw new NamespaceException(servletPath + " already registered in the context " + contextRoot + "."); - } - - // create wrapper for the servlet - final OSGIWrapper osgiWrapper = new OSGIWrapper(servlet, context); - osgiWrapper.setName(servletPath); - osgiWrapper.setParentClassLoader(servlet.getClass().getClassLoader()); - if (initParams != null) { - final Enumeration elements = initParams.keys(); - while (elements.hasMoreElements()) { - final String name = (String) elements.nextElement(); - osgiWrapper.addInitParameter(name, (String) initParams.get(name)); - } - } - - // Add to the servlet list - synchronized (wrapperList) { - wrapperList.add(osgiWrapper); - - // register servlet in fake webapp - osgiContext.addChild(osgiWrapper); - - // initialize the servlet in the wrapper context - // Init after addChild so getServletContext is here (JIRA JONAS-259) - servlet.init(osgiWrapper); - - // redirect all request to the servlet - osgiContext.addServletMapping(servletPath + "/*", osgiWrapper.getName(), true); - } - } - - /** - * Unregisters a previous registration done by registerServlet - * or registerResources methods.

    After this call, the - * registered alias in the URI name-space will no longer be available. If - * the registration was for a servlet, the Http Service must call the - * destroy method of the servlet before returning.

    If the - * bundle which performed the registration is stopped or otherwise "unget"s - * the Http Service without calling {@link #unregister} then Http Service - * must automatically unregister the registration. However, if the - * registration was for a servlet, the destroy method of the - * servlet will not be called in this case since the bundle may be stopped. - * {@link #unregister} must be explicitly called to cause the - * destroy method of the servlet to be called. This can be done - * in the BundleActivator.stop method of the bundle registering - * the servlet. - * @param alias name in the URI name-space of the registration to unregister - * @throws java.lang.IllegalArgumentException if there is no registration - * for the alias or the calling bundle was not the bundle which - * registered the alias. - */ - public void unregister(final String alias) throws IllegalArgumentException { - // check alias - if (!this.checkAlias(alias)) { - throw new IllegalArgumentException(alias + " is not a valid alias."); - } - - String versionID = null; - if (this.tomcatService.isVersioningEnabled()) { - versionID = this.getVersionId(); - } - - // Extract context - String parsedContext[] = parseContext(alias); - String contextRoot = parsedContext[0]; - String servletPath = parsedContext[1]; - - if (versionID != null) { - if (!contextRoot.contains(versionID)) { - contextRoot += versionID; - } - } - - // get context associated with alias - final Host host = this.tomcatService.findHost(""); - final Context ctx = this.findContext(host, contextRoot); - if (ctx == null) { - throw new IllegalArgumentException(contextRoot + " is not registered."); - } - - // check if is an osgi context - if (ctx instanceof OSGIContext) { - OSGIContext osgiContext = (OSGIContext) ctx; - - final OSGIWrapper osgiWrapper = (OSGIWrapper) osgiContext.findChild(servletPath); - if (osgiWrapper == null) { - throw new IllegalArgumentException(servletPath + " is not registered in " + contextRoot + "."); - } - removeWrapper(osgiWrapper, true); - } else { - throw new IllegalArgumentException(contextRoot + " is not registered by this bundle " + this.callerBundle + "."); - } - } - - /** - * Remove a wrapper from its context. - * @param osgiWrapper the wrapper to remove. - * @param removeFromList true if needs to be removed from the global list - */ - private void removeWrapper(final OSGIWrapper osgiWrapper, final boolean removeFromList) { - OSGIContext osgiContext = (OSGIContext) osgiWrapper.getParent(); - - synchronized (wrapperList) { - // Remove from the servlet list - if (removeFromList) { - wrapperList.remove(osgiWrapper); - } - - // Remove redirection - osgiContext.removeServletMapping(osgiWrapper.getName() + "/*"); - - osgiContext.removeChild(osgiWrapper); - } - - if (osgiContext.getChildren().length == 0) { - Host host = (Host) osgiContext.getParent(); - - host.removeChild(osgiContext); - if (this.tomcatService.isVersioningEnabled()) { - ContextFinder.unbindContextRoot(osgiContext.getPath()); - } - - ContextFinder.removeNonVersionedContext(osgiContext.getPath()); - } - } - - /** - * Unregister all servlets registered by the bundle while using the service. - */ - public void stop() { - synchronized (wrapperList) { - Iterator itWrapper = wrapperList.iterator(); - while (itWrapper.hasNext()) { - OSGIWrapper osgiWrapper = itWrapper.next(); - // Avoid concurrent modification exception - itWrapper.remove(); - // Do not remove it from the list in the submethod in order to avoid concurrent access - removeWrapper(osgiWrapper, false); - } - } - } - - /** - * Look in catalina Host for the Context associated with the given alias. - * @param host The catalina host. - * @param alias The alias. - * @return The {@link Context} matching the given alias in catalina host. - */ - private Context findContext(final Host host, final String alias) { - for (final Container container : host.findChildren()) { - if (container instanceof Context) { - if (alias.equals(((Context) container).getPath())) { - return (Context) container; - } - } - } - return null; - } - - /** - * Split the context and the servlet path form the alias. - * @param alias the alias to parse. - * @return An array containing the context and the servlet path. - */ - private String[] parseContext(final String alias) { - int contextIndex = alias.indexOf('/', 1); - if (contextIndex >= 0) { - return new String[] {alias.substring(0, contextIndex), alias.substring(contextIndex)}; - } else { - return new String[] {alias, ""}; - } - } - - /** - * Check if alias if a valid osgi HttpService alias. An alias must begin - * with slash ('/') and must not end with slash ('/'), with the exception - * that an alias of the form "/" is used to denote the root alias. - * @param alias The alias to check. - * @return true if alias is valid, - * false otherwise. - */ - private boolean checkAlias(final String alias) { - if (alias == null) { - return false; - } - if (alias.equals("/")) { - return true; - } - if (alias.startsWith("/") && !alias.endsWith("/")) { - return true; - } - return false; - } - - /** - * Returns version of the context when versioning is enabled. - * @return version of the context when versioning is enabled. - */ - private String getVersionId() { - final String SNAPSHOT_WITH_DOT = ".SNAPSHOT"; - final String SNAPSHOT_WITH_HYPHEN = "-SNAPSHOT"; - - String bundleVersion = (String) this.callerBundle.getHeaders().get(Constants.BUNDLE_VERSION); - if (bundleVersion.endsWith(SNAPSHOT_WITH_DOT)) { - bundleVersion = bundleVersion.substring(0, bundleVersion.length() - SNAPSHOT_WITH_DOT.length()) - + SNAPSHOT_WITH_HYPHEN; - } - - return "-" + bundleVersion; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIContext.java deleted file mode 100644 index dc9d477004..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIContext.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi.httpservice; - -import org.ow2.jonas.web.tomcat7.JOnASStandardContext; - -import javax.servlet.ServletContext; - -import org.osgi.framework.Bundle; -import org.osgi.service.http.HttpContext; - -/** - * {@link Context} implementation for holding OSGI servlet wrappers. Only the - * {@link #getServletContext()} method is overridden. - * @author Guillaume Porcher - */ -public class OSGIContext extends JOnASStandardContext { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -8093637123939061548L; - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param context The HttpContext used during servlet or resource - * registration. - * @param callerBundle The bundle that uses the HttpService. - */ - public OSGIContext(final HttpContext context) { - this.httpContext = context; - } - - /** - * Return the servlet context for which this Context is a facade. The - * returned context is an instance of {@link OSGIServletContext}. - * @return the servlet context for which this Context is a facade. - */ - @Override - public ServletContext getServletContext() { - if (context == null) { - context = new OSGIServletContext(this, this.httpContext); - } - return context; - } - - /** - * @return The httpContext used during servlet or resource registration. - */ - public HttpContext getHttpContext() { - return this.httpContext; - } - - - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIServletContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIServletContext.java deleted file mode 100644 index fcb6454b19..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIServletContext.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi.httpservice; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; - -import org.apache.catalina.core.ApplicationContext; -import org.osgi.service.http.HttpContext; - -/** - * {@link javax.servlet.ServletContext} implementation for servlets or resources registered by - * {@link HttpServiceImpl}. - * @author Guillaume Porcher - */ -public class OSGIServletContext extends ApplicationContext { - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param context the {@link OSGIContext} holding the servlet. - * @param httpContext the http context used during servlet registration. - */ - public OSGIServletContext(final OSGIContext context, final HttpContext httpContext) { - super(context); - this.httpContext = httpContext; - } - - /** - * Returns the MIME type of the specified file, or null if the MIME type is - * not known. The MIME type is determined by calling - * {@link HttpContext#getMimeType(String)}. If this method returns - * null, the {@link ApplicationContext#getMimeType(String)} - * method is called. - * @param file a String specifying the name of a file - * @return a String specifying the file's MIME type - */ - @Override - public String getMimeType(final String file) { - final String mime = this.httpContext.getMimeType(file); - if (mime != null) { - return mime; - } else { - return super.getMimeType(file); - } - } - - /** - * Returns a URL to the resource that is mapped to a specified path. The - * path must begin with a "/" and is interpreted as relative to the current - * context root. This method uses {@link HttpContext#getResource(String)} to - * find the resource. - * @param path a String specifying the path to the resource - * @return the resource located at the named path, or null if there is no - * resource at that path - * @throws MalformedURLException if the pathname is not given in the correct - * form - */ - @Override - public URL getResource(final String path) throws MalformedURLException { - return this.httpContext.getResource(path); - } - - /** - * Returns the resource located at the named path as an InputStream object. - * The data in the InputStream can be of any type or length. This method - * gets the resource URL by calling {@link #getResource(String)}. - * @param path a String specifying the path to the resource - * @return the InputStream returned to the servlet, or null if no resource - * exists at the specified path - */ - @Override - public InputStream getResourceAsStream(final String path) { - URL url = null; - try { - url = this.getResource(path); - } catch (final MalformedURLException e) { - return null; - } - if (url != null) { - try { - return url.openStream(); - } catch (final IOException e) { - return null; - } - } - return null; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIWrapper.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIWrapper.java deleted file mode 100644 index 80a996e0af..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/osgi/httpservice/OSGIWrapper.java +++ /dev/null @@ -1,115 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.osgi.httpservice; - - -import java.io.IOException; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; - -import org.apache.catalina.Contained; -import org.apache.catalina.Valve; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.core.StandardWrapper; -import org.apache.catalina.valves.ValveBase; - -import org.osgi.service.http.HttpContext; - -/** - * {@link org.apache.catalina.Wrapper} implementation for holding servlets deployed with - * {@link HttpServiceImpl}. This implementation sets a specific {@link Valve} to - * handle OSGI security mechanism. - * @author Guillaume Porcher - */ -public class OSGIWrapper extends StandardWrapper { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -749580021429740673L; - - /** - * {@link Valve} implementation that checks before processing the invoke - * method. - * @author Guillaume Porcher - */ - class OSGIWrapperValve extends ValveBase { - - /** - * Default constructor. - * @param delegate the proxied valve. - */ - public OSGIWrapperValve(final Valve delegate) { - super(true); - this.setNext(delegate); - } - - /** - * Perform request processing. The security is checked by using - * {@link HttpContext#handleSecurity(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)} - * . If the request can be served, invoke the proxied valve to handle - * the request normally. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @throws IOException if an input/output error occurs, or is thrown by - * the proxied Valve - * @throws ServletException if a servlet error is thrown by the proxied - * Valve - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - if (OSGIWrapper.this.httpContext.handleSecurity(request.getRequest(), response.getResponse())) { - Valve next = this.getNext(); - if (next != null) { - if (next instanceof Contained) { - ((Contained) next).setContainer(this.getContainer()); - } - this.getNext().invoke(request, response); - } - } - } - } - - /** - * The {@link HttpContext} used during servlet or resource registration. - */ - private final HttpContext httpContext; - - /** - * Default constructor. - * @param servlet the {@link Servlet} wrapped in this {@link Wrapper}. - * @param context The HttpContext used during servlet or resource - * registration. - */ - public OSGIWrapper(final Servlet servlet, final HttpContext context) { - super(); - this.instance = servlet; - this.httpContext = context; - this.pipeline.setBasic(new OSGIWrapperValve(this.swValve)); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/security/Realm.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/security/Realm.java deleted file mode 100644 index d078afae62..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/security/Realm.java +++ /dev/null @@ -1,897 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.security; - -import java.io.IOException; -import java.security.Principal; -import java.security.acl.Group; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.security.auth.Subject; -import javax.security.auth.login.AccountExpiredException; -import javax.security.auth.login.CredentialExpiredException; -import javax.security.auth.login.FailedLoginException; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.catalina.Context; -import org.apache.catalina.Wrapper; -import org.apache.catalina.LifecycleException; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.deploy.LoginConfig; -import org.apache.catalina.deploy.SecurityConstraint; -import org.apache.catalina.realm.Constants; -import org.apache.catalina.realm.GenericPrincipal; -import org.apache.catalina.realm.RealmBase; -import org.apache.tomcat.util.res.StringManager; -import org.ow2.jonas.deployment.web.ServletDesc; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.security.auth.JSigned; -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; -import org.ow2.jonas.security.SecurityService; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; -import org.ow2.jonas.security.realm.factory.JResource; -import org.ow2.jonas.security.realm.factory.JResourceException; -import org.ow2.jonas.security.realm.principal.JUser; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.web.tomcat7.JOnASStandardContext; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - *

    - * Implementation of a Realm. (by a wrapper)
    - * Use any JOnAS realm by specifying the resource name This implementation - * manages the security with JACC specification It implements Cloneable to allow - * clones. Each context must have its own Realm. A realm can not be shared - * across different contexts or an engine. This is because each realm is - * associated to a permission manager Extends the Realmbase class of the Tomcat - * Server.
    - * This Realm can use also the LoginModule for the authentication - * @author Florent Benoit - */ -public class Realm extends RealmBase implements Cloneable { - - /** - * Descriptive information about this Realm implementation. - */ - private static final String NAME = Realm.class.getSimpleName(); - - /** - * Descriptive information about this Realm implementation. - */ - private static final String INFO = Realm.class.getName() + "/1.0"; - - /** - * Name used in the JAAS config file. - */ - private static final String DEFAULT_JAAS_ENTRY_NAME = "tomcat"; - - /** - * The string manager for this package. - */ - private static StringManager sm = StringManager.getManager(Constants.Package); - - /** - * The logger used in JOnAS. - */ - private static Log logger = LogFactory.getLog(Realm.class); - - /** - * The resource we will use to authenticate users and identify associated - * roles. - */ - private JResource jResource = null; - - /** - * The name of the resource. - */ - private String resourceName = null; - - /** - * The entry name of the JAAS resource. - */ - private String jaasEntry = DEFAULT_JAAS_ENTRY_NAME; - - /** - * Reference to the JOnAS security service. - */ - private SecurityService securityService = null; - - /** - * Permission manager used by this realm for JACC permissions. - */ - private PermissionManager permissionManager = null; - - /** - * Last request that has been send to hasUserDataPermission or - * hasResourcePermission methods Used in hasRole to know the current servlet - * name. This request is store in a local thread. - */ - private ThreadLocal lastRequestThread = new ThreadLocal(); - - /** - * Context (used to retrieve web.xml informations). - */ - private Context context = null; - - /** - * Name of this Realm for traces. - */ - private String realmName = NAME; - - /** - * Return descriptive information about this Realm implementation and the - * corresponding version number, in the format. - * <description>/<version>. - * @return the info. - */ - @Override - public String getInfo() { - return INFO; - } - - /** - * Return the resource name we will be using. - * @return the resource name. - */ - public String getResourceName() { - return resourceName; - } - - /** - * Set the resource name we will be using. - * @param resourceName The new resource name - */ - public void setResourceName(final String resourceName) { - this.resourceName = resourceName; - - } - - /** - * Return the JAAS entry name we will be using. - * @return the JAAS entry name. - */ - public String getJaasEntry() { - return jaasEntry; - } - - /** - * Set the JAAS entry we will be using. - * @param jaasEntry the JAAS entry name - */ - public void setJaasEntry(final String jaasEntry) { - this.jaasEntry = jaasEntry; - } - - /** - * Set the permission manager used by this realm. - * @param permissionManager the permission manager to use - */ - public void setPermissionManager(final PermissionManager permissionManager) { - this.permissionManager = permissionManager; - - } - - /** - * Return the SecurityConstraints configured to guard the request URI for - * this request, or null if there is no such constraint. - * @param request Request we are processing - * @param context Context the Request is mapped to - * @return security constraints configured to guard the request URI - */ - @Override - public SecurityConstraint[] findSecurityConstraints(final Request request, final Context context) { - // Use super Method - return super.findSecurityConstraints(request, context); - } - - /** - * Perform access control based on the specified authorization constraint. - * @return true if this constraint is satisfied and - * processing should continue, or false otherwise. - * @param request Request we are processing - * @param response Response we are creating - * @param constraints Security constraint we are enforcing - * @param context The Context to which client of this class is attached. - * @exception IOException if an input/output error occurs - */ - @Override - public boolean hasResourcePermission(final Request request, final Response response, final SecurityConstraint[] constraints, - final Context context) throws IOException { - - // Update request - lastRequestThread.set(request); - - // --- Use code of RealmBase for the Login / Error pages - - // Specifically allow access to the form login and form error pages - // and the "j_security_check" action - LoginConfig config = context.getLoginConfig(); - if (config != null && Constants.FORM_METHOD.equals(config.getAuthMethod())) { - String requestURI = request.getDecodedRequestURI(); - String loginPage = context.getPath() + config.getLoginPage(); - if (loginPage.equals(requestURI)) { - logger.debug("{0}: Allow access to login page {1}", realmName, loginPage); - return true; - } - - String errorPage = context.getPath() + config.getErrorPage(); - if (errorPage.equals(requestURI)) { - logger.debug("{0}: Allow access to error page {1}", realmName, errorPage); - return true; - } - if (requestURI.endsWith(Constants.FORM_ACTION)) { - logger.debug("{0}: Allow access to username/password submission", realmName); - return true; - } - } - - // Which user principal have we already authenticated? - Principal principal = request.getUserPrincipal(); - - // Check if there is a deny all - // TODO: Should be done through JACC ? - boolean denyfromall = false; - for(int i=0; i < constraints.length; i++) { - SecurityConstraint constraint = constraints[i]; - - String roles[]; - if (!constraint.getAllRoles()) { - roles = constraint.findAuthRoles(); - if (roles == null) { - roles = new String[0]; - } - - if (roles.length == 0 && !constraint.getAllRoles()) { - if(constraint.getAuthConstraint()) { - denyfromall = true; - break; - } - } - } - } - // --- End of code from RealmBase class - - String[] roles = null; - String principalName = null; - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - if (permissionManager == null) { - logger.error("{0}: No permission manager is set. Realm used without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - boolean hasResourcePermission = false; - // Check permissions if not denied - if (!denyfromall) { - hasResourcePermission = permissionManager.checkWebResourcePermission(request, principalName, roles); - } - - // Need to send HTTP status code as invoke() method of Authenticator - // expect that it is - // done by the realm. - if (!hasResourcePermission) { - // Return a "Forbidden" message denying access to this resource - response.sendError(HttpServletResponse.SC_FORBIDDEN, sm.getString("realmBase.forbidden")); - } - - return hasResourcePermission; - } - - /** - * Return true if the specified Principal has the specified - * security role, within the context of this Realm; otherwise return - * false. This method can be overridden by Realm - * implementations, but the default is adequate when an instance of - * GenericPrincipal is used to represent authenticated - * Principals from this Realm. - * - * @param principal Principal for whom the role is to be checked - * @param role Security role to be checked - */ - @Override - public boolean hasRole(Wrapper wrapper, Principal principal, String role) { - - // Check for a role alias defined in a element - if (wrapper != null) { - String realRole = wrapper.findSecurityReference(role); - if (realRole != null) - role = realRole; - } - - - if ((principal == null) || (role == null) || !(principal instanceof GenericPrincipal)) { - return false; - } - - if (logger.isDebugEnabled()) { - logger.debug("{0}: Principal = {1}", realmName, principal); - logger.debug("{0}: Role = {1}", realmName, role); - } - - if (context == null) { - logger.error("{0}: Cannot find a servlet name for isUserInRole() as no context was found", realmName); - return false; - } - - Request req = lastRequestThread.get(); - - if (req == null) { - logger.error("{0}: Cannot find a servlet name for isUserInRole(). No previous request !", realmName); - return false; - } - String servletName = findServletName(req); - String[] roles = null; - String principalName = null; - - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - if (permissionManager == null) { - logger.error( - "{0}: No permission manager is set. Using this realm without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - boolean hasRole = permissionManager.checkWebRoleRefPermission(req, servletName, principalName, roles, role); - return hasRole; - } - - /** - * @return the name of the servlet (or "" if it's a JSP for example) This - * servlet name is used to build JACC permission for the hasRole - * method - * @param request the servlet request with which we have to find servlet - * name - */ - private String findServletName(final Request request) { - - // Servlet name cannot be found - if (request == null || request.getRequestURI() == null || request.getContextPath() == null) { - return null; - } - - // Pattern of the user (remove path) - String userPattern = request.getRequestURI().substring(request.getContextPath().length()); - - if (logger.isDebugEnabled()) { - logger.debug("{0}: User Pattern = {1}", realmName, userPattern); - } - - String servletName = ""; - String[] patterns = context.findServletMappings(); - boolean foundServlet = false; - String pattern = ""; - int i = 0; - - // Try to search servlet name - while ((i < patterns.length) && !foundServlet) { - pattern = patterns[i]; - if (logger.isDebugEnabled()) { - logger.debug("{0}: Pattern found = {1}", realmName, pattern); - logger.debug("{0}: Servlet name for pattern = {1}", realmName, context.findServletMapping(pattern)); - } - - // Extension pattern and ends with extension - if (pattern.startsWith("*.") && userPattern.endsWith(pattern.substring(1))) { - foundServlet = true; - continue; - } - - // Exact Servlet name (ie pattern = /ServletName and userPattern = - // /ServletName) - if (pattern.equals(userPattern)) { - foundServlet = true; - continue; - } - - i++; - } - - if (foundServlet) { - servletName = context.findServletMapping(pattern); - // JSP case. servlet name must be empty as required by JACC - // specification - if (servletName.equals("jsp")) { - servletName = ""; - } - if (logger.isDebugEnabled()) { - logger.debug("{0}: Found servlet name = {1}", realmName, servletName); - } - } - return servletName; - } - - /** - * Enforce any user data constraint required by the security constraint - * guarding this request URI. - * @return true if this constraint was not violated and - * processing should continue, or false if we have - * created a response already. - * @param request Request we are processing - * @param response Response we are creating - * @param constraints Security constraints being checked - * @exception IOException if an input/output error occurs - */ - @Override - public boolean hasUserDataPermission(final Request request, final Response response, final SecurityConstraint[] constraints) - throws IOException { - - // Update request - lastRequestThread.set(request); - - // ---- Start of copy from RealmBase class --- - - // Validate the request against the user data constraint - if (request.getRequest().isSecure()) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: User data constraint already satisfied", realmName); - } - return true; - } - - // Which user principal have we already authenticated? - Principal principal = ((HttpServletRequest) request).getUserPrincipal(); - - // ---- End of copy from RealmBase class --- - - String[] roles = null; - String principalName = null; - if (principal instanceof GenericPrincipal) { - roles = ((GenericPrincipal) principal).getRoles(); - principalName = principal.getName(); - } - - // ---- Start of copy from RealmBase class --- - for (int i = 0; i < constraints.length; i++) { - SecurityConstraint constraint = constraints[i]; - // Use redirect only if it the transport protocol is integral or - // confidential - String userConstraint = constraint.getUserConstraint(); - - // Redirect only if the constraint is INTEGRAL or CONFIDENTIAL ! - if (userConstraint != null - && (userConstraint.equals(Constants.INTEGRAL_TRANSPORT) || userConstraint - .equals(Constants.CONFIDENTIAL_TRANSPORT))) { - // Initialize variables we need to determine the appropriate - // action - int redirectPort = request.getConnector().getRedirectPort(); - - // Is redirecting disabled? - if (redirectPort <= 0) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: SSL redirect is disabled", realmName); - } - response.sendError(HttpServletResponse.SC_FORBIDDEN, request.getRequestURI()); - return false; - } - - // Redirect to the corresponding SSL port - StringBuffer file = new StringBuffer(); - String protocol = "https"; - String host = request.getServerName(); - // Protocol - file.append(protocol).append("://"); - // Host with port - file.append(host).append(":").append(redirectPort); - // URI - file.append(request.getRequestURI()); - String requestedSessionId = request.getRequestedSessionId(); - if ((requestedSessionId != null) && request.isRequestedSessionIdFromURL()) { - file.append(";jsessionid="); - file.append(requestedSessionId); - } - String queryString = request.getQueryString(); - if (queryString != null) { - file.append('?'); - file.append(queryString); - } - - if (logger.isDebugEnabled()) { - logger.debug("{0}: Redirecting to {1}", realmName, file); - } - response.sendRedirect(file.toString()); - - return false; - } - } - - // ---- End of copy from RealmBase --- - if (permissionManager == null) { - logger.error("{0}: No permission manager is set. Realm used without using the JOnAS deployer but only Tomcat.", - realmName); - return false; - } - - // If Transport protocol is NONE : - boolean hasUserDataPermission = permissionManager.checkWebUserDataPermission(request, principalName, roles); - return hasUserDataPermission; - - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - @Override - public Principal authenticate(final String username, final String credentials) { - // Use JOnAS resource if present - if (jResource != null) { - return authenticateResource(username, credentials); - } else { - // else use JAAS mechanism - return authenticateJAAS(username, credentials); - } - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - public Principal authenticateResource(final String username, final String credentials) { - - // No authentication can be made with a null username - if (username == null) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: No username so no authentication", realmName); - } - return null; - } - - // Does a user with this username exist? - JUser user = null; - try { - user = jResource.findUser(username); - } catch (Exception jre) { - // could not retrieve user - logger.error("{0}: Cannot find the user {1}", realmName, username, jre); - return null; - } - - // User was not found - if (user == null) { - if (logger.isDebugEnabled()) { - logger.debug("{0}: User {1} not found.", realmName, username); - } - return null; - } - - boolean validated = jResource.isValidUser(user, credentials); - if (!validated) { - logger.error("{0}: The password for the user {1} is not valid", realmName, username); - return null; - } - - List combinedRoles = null; - try { - combinedRoles = jResource.getArrayListCombinedRoles(user); - } catch (JResourceException jre) { - logger.error("{0}: Cannot get the roles from the user {1}", realmName, username, jre); - return null; - } - - GenericPrincipal principal = new GenericPrincipal(user.getName(), user.getPassword(), combinedRoles); - SecurityContext ctx = new SecurityContext(principal.getName(), combinedRoles); - - // Get the servlet name - Request request = lastRequestThread.get(); - String servletName = findServletName(request); - - if (servletName != null) { - - // Use the web deployment descriptor to get the role name of the runas element of the servlet - WebContainerDeploymentDesc webDD = ((JOnASStandardContext) context).getWebDeploymentDescriptor(); - - Collection servletDescList = webDD.getServletDescList(); - for (Iterator iterator = servletDescList.iterator(); iterator.hasNext();) { - ServletDesc servletDesc = (ServletDesc) iterator.next(); - - // Servlet declaration found - if (servletDesc.getServletName().equals(servletName)) { - if (servletDesc.getServletRunAS() != null) { - String role = servletDesc.getServletRunAS().getRoleName(); - String principalName = webDD.getServletPrincipalName(servletName); - - if (principalName == null) { - principalName = role; - } - - ctx.pushRunAs(role, principalName, new String[] {role}); - } - - // Exit the loop - break; - } - } - } - - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - return principal; - } - - /** - * Return the Principal associated with the specified username and - * credentials, if there is one; otherwise return null. - * @param username Username of the Principal to look up - * @param credentials Password or other credentials to use in authenticating - * this username - * @return the principal associated - */ - public Principal authenticateJAAS(final String username, final String credentials) { - - // No authentication can be made with a null username - if (username == null) { - logger.error("{0}: No username so no authentication", realmName); - return null; - } - // Establish a LoginContext to use for authentication - LoginContext loginContext = null; - try { - loginContext = new LoginContext(jaasEntry, new NoInputCallbackHandler(username, credentials)); - } catch (LoginException e) { - logger.error("{0}: LoginException for user {1}", realmName, username, e); - return null; - } - // Negotiate a login via this LoginContext - Subject subject = null; - try { - loginContext.login(); - subject = loginContext.getSubject(); - if (subject == null) { - logger.error("{0}: No subject for the user {1}", realmName, username); - return null; - } - } catch (AccountExpiredException e) { - logger.error("{0}: Account expired for the user {1}", realmName, username, e); - return null; - } catch (CredentialExpiredException e) { - logger.error("{0}: Credential expired for the user {1}", realmName, username, e); - return null; - } catch (FailedLoginException e) { - logger.error("{0}: Failed Login for the user {1}", realmName, username, e); - return null; - } catch (LoginException e) { - logger.error("{0}: Login exception for the user {1}", realmName, username, e); - return null; - } - - // Get credentials iterators from the subject - Iterator credentialsIterator = subject.getPrivateCredentials().iterator(); - String credential = (String) credentialsIterator.next(); - - // Retrieve first principal name found (without groups) - Iterator iterator = subject.getPrincipals(Principal.class).iterator(); - String userName = null; - while (iterator.hasNext() && (userName == null)) { - Principal principal = iterator.next(); - if (!(principal instanceof Group)) { - userName = principal.getName(); - } - } - - // No name --> error - if (userName == null) { - logger.error("{0}: No Username found in the subject", realmName); - return null; - } - - // Signed object (if any) - JSigned jSigned = null; - - // Retrieve all roles of the user (Roles are members of the Group.class) - Set groups = subject.getPrincipals(Group.class); - List roles = new ArrayList(); - for (Group group : groups) { - - // Signed group (empty group that contains a signature)? - if (group instanceof JSigned) { - jSigned = (JSigned) group; - continue; - } - - Enumeration e = group.members(); - while (e.hasMoreElements()) { - Principal p = e.nextElement(); - roles.add(p.getName()); - } - } - - GenericPrincipal principal = new GenericPrincipal(userName, credential, roles); - // instanciation of the security context - SecurityContext ctx = new SecurityContext(userName, roles); - // Signed ? - if (jSigned != null) { - ctx.setSignature(jSigned.getSignature()); - } - SecurityCurrent current = SecurityCurrent.getCurrent(); - current.setSecurityContext(ctx); - - return principal; - } - - /** - * Return the Principal associated with the specified chain of X509 client - * certificates. If there is none, return null. - * @param cert Array of client certificates, with the first one in the array - * being the certificate of the client itself. - * @return the associated Principal - */ - @Override - public Principal authenticate(final X509Certificate[] cert) { - String dn = cert[0].getSubjectDN().getName(); - return authenticate(dn, "tomcat"); - } - - /** - * Return a short name for this Realm implementation. - * @return the name - */ - @Override - protected String getName() { - return NAME; - } - - /** - * Return the password associated with the given principal's user name. - * @param username the given principal's user name. - * @return the password associated. - */ - @Override - protected String getPassword(final String username) { - return null; - } - - /** - * Return the Principal associated with the given user name. - * @param username the given principal's user name. - * @return the Principal associated - */ - @Override - protected Principal getPrincipal(final String username) { - return null; - } - - /** - * Set the context of this Realm. This is used to retrieve xml information - * of the web.xml file - * @param context Context for this realm - */ - public void setContext(final Context context) { - this.context = context; - StringBuffer sb = new StringBuffer(); - sb.append("["); - sb.append(NAME); - sb.append(":"); - sb.append(resourceName); - sb.append(":"); - if (context != null) { - sb.append(context.getName()); - } - sb.append("] "); - this.realmName = sb.toString(); - } - - /** - * Assign the {@link SecurityService} instance to be used for authentication. - * @param securityService {@link SecurityService} to use. - */ - public void setSecurityService(final SecurityService securityService) { - this.securityService = securityService; - } - - /** - * Prepare for active use of the public methods of this Component. - * @exception LifecycleException if this component detects a fatal error - * that prevents it from being started - */ - @Override - public synchronized void startInternal() throws LifecycleException { - - // Get the resource from the security service if working with resource - // mode - if (resourceName != null) { - if (securityService == null) { - throw new LifecycleException("Security service not set, cannot start"); - } - jResource = securityService.getJResource(resourceName); - if (jResource == null) { - throw new LifecycleException("Can't retrieve resource '" + resourceName + "' from the security service"); - } - - // This is a configuration error to set bot resourceName (for JACC) and jaasEntry (for JAAS) - if (!DEFAULT_JAAS_ENTRY_NAME.equals(jaasEntry)) { - throw new LifecycleException("Invalid Realm configuration: cannot use both resourceName and jaasEntry attributes."); - } - } - - // Perform normal superclass initialization - super.startInternal(); - - } - - /** - * Gracefully shut down active use of the public methods of this Component. - * @exception LifecycleException if this component detects a fatal error - * that needs to be reported - */ - @Override - public synchronized void stopInternal() throws LifecycleException { - // Perform normal superclass finalization - super.stopInternal(); - - // Release reference to our resource - jResource = null; - } - - /** - * Creates and returns a copy of this object. - * @return copy of this object. - * @throws CloneNotSupportedException if the copy fails - */ - @Override - public Object clone() throws CloneNotSupportedException { - Realm jRealm = new Realm(); - jRealm.setResourceName(resourceName); - jRealm.setJaasEntry(jaasEntry); - jRealm.setSecurityService(securityService); - return jRealm; - } - - /** - * @return the permission manager used by this realm. - */ - public PermissionManager getPermissionManager() { - return permissionManager; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/tx/TransactionValve.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/tx/TransactionValve.java deleted file mode 100644 index a68fb1b0f2..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/tx/TransactionValve.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.tx; - -import static javax.transaction.Status.STATUS_COMMITTED; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.transaction.SystemException; -import javax.transaction.Transaction; -import javax.transaction.TransactionManager; - -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * This valve is used when TX service is enabled. It ensures that the transaction is aborted at the end of the execution of the method if it was started in the method. - * @author Florent Benoit - */ -public class TransactionValve extends ValveBase { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(TransactionValve.class); - - /** - * Link to the transaction manager. - */ - private TransactionManager transactionmanager = null; - - - - /** - * Default constructor. - * @param transactionManager the given transaction manager - */ - public TransactionValve(final TransactionManager transactionManager) { - super(true); - this.transactionmanager = transactionManager; - } - - /** - * Ensure that there is no pending transaction at the end of the method. - * @param request The servlet request to be processed - * @param response The servlet response to be created - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - - // There is a transaction ? - Transaction existingTransaction = null; - try { - existingTransaction = transactionmanager.getTransaction(); - } catch (SystemException e) { - throw new IllegalStateException("Unable to check if there is a transaction", e); - } - - // Call next valve - try { - getNext().invoke(request, response); - } finally { - // If there wasn't transaction before the call - if (existingTransaction == null) { - // check if a transaction has been started in the method ? - Transaction txAfterMethod = null; - try { - txAfterMethod = transactionmanager.getTransaction(); - } catch (SystemException e) { - throw new IllegalStateException("Unable to check if there is a transaction", e); - } - - // 4.2.2 chapter of Java EE 5 - // Transactions may not span web requests from a client. A web component starts a - // transaction in the service method of a servlet (or, for a JSP page, the service - // method of the equivalent JSP page Implementation Class) and it must be completed - // before the service method returns. Returning from the service method with an - // active transaction context is an error. The web container is required to detect this - // error and abort the transaction. - - if (txAfterMethod != null) { - int transactionStatus = 0; - try { - transactionStatus = txAfterMethod.getStatus(); - // There is a transaction and it was not committed - if (transactionStatus != STATUS_COMMITTED) { - String errMsg = "Transaction started in the servlet '" + request.getServletPath() - + "' but not committed. Rolling back..."; - // Log error - logger.error(errMsg); - // Rollback - txAfterMethod.rollback(); - } - } catch (SystemException e) { - throw new IllegalStateException("Cannot rollback transaction", e); - } - } - } - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/AbsVirtualContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/AbsVirtualContext.java deleted file mode 100644 index eb01507afc..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/AbsVirtualContext.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Copyright (C) 2008 France Telecom R&D - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import java.net.MalformedURLException; -import java.net.URL; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.directory.DirContext; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Virtual Context implementation that only handles operations with the default - * context. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public abstract class AbsVirtualContext implements VirtualContextMBean { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(AbsVirtualContext.class); - - /** - * Default context. - */ - protected Context defaultContext = null; - - /** - * The user (virtual) URI of this context. - */ - protected String userURI; - - /** - * Management bean name for this context. - */ - private String mBeanName; - - /** - * The JMX server. - */ - private JmxService jmxService = null; - - /** - * Creates and registers a virtual context. - * @param jmxService JMX server. - * @param userURI User (virtual) URI of this context. - * @param contextInstance The first context instance, will be mapped as - * default context. - */ - public AbsVirtualContext(final JmxService jmxService, final String userURI, final Context contextInstance) { - this.userURI = userURI; - addContext(contextInstance, VersioningServiceBase.DEFAULT); - Host host = (Host) contextInstance.getParent(); - // J2EEApplication=none since this virtual JNDI binding manager - // is shared between multiple J2EE applications - mBeanName = jmxService.getDomainName() + ":j2eeType=WebModule,name=//" + host.getName() + userURI - + ",J2EEApplication=none,J2EEServer=" + jmxService.getJonasServerName() + ",virtualContext=true"; - logger.debug("New VirtualContext: registering MBean with name : " + mBeanName); - jmxService.registerMBean(this, mBeanName); - this.jmxService = jmxService; - } - - /** - * Internal call for adding non-default context instances. - * @param contextInstance Context instance (versioned path). - * @param policy Policy (extensible). - * @throws IllegalArgumentException If policy not recognized. - */ - protected abstract void addContextInternal(Context contextInstance, String policy) throws IllegalArgumentException; - - /** - * Finds the context object corresponding to a path. This implementation - * only checks against the default context. - * @param versionedPath Path to check against. - * @return Context object corresponding to versionedPath, null if none. - */ - protected Context findContextObject(final String versionedPath) { - if (defaultContext != null) { - if (versionedPath.equals(defaultContext.getPath())) { - return defaultContext; - } - } - return null; - } - - /** - * Adds a context instance to this virtual context using a policy. This - * implementation will check against the default context and if nothing - * found call - * @link{AbsVirtualContext#addContextInternal(Context,String) . - * @param contextInstance Context instance to add. - * @param policy Context policy. - * @throws IllegalArgumentException Policy is invalid. - */ - public void addContext(final Context contextInstance, final String policy) throws IllegalArgumentException { - // Check that context's path is not in any list - if (findContextObject(contextInstance.getPath()) != null) { - throw new IllegalArgumentException("Context " + contextInstance + " already bound!"); - } - - // Context is not in any lists, add it - if (VersioningServiceBase.DEFAULT.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind default context " + contextInstance.getPath() + " for userURI " + userURI); - } - if (null != this.defaultContext) { - if (logger.isDebugEnabled()) { - logger.debug("Setting default context " + defaultContext.getPath() + " as disabled"); - } - addContextInternal(defaultContext, VersioningServiceBase.DISABLED); - } - this.defaultContext = contextInstance; - } else { - addContextInternal(contextInstance, policy); - } - } - - /** - * Completely removes this virtual context. Will automatically unregister - * management beans and unbind the context. - * @return {@link ContextFinder#unbindVirtualContext(String)}. - */ - public boolean removeVirtualContext() { - try { - jmxService.unregisterMBean(ObjectName.getInstance(mBeanName)); - } catch (MalformedObjectNameException e) { - logger.error("Error unbinding VirtualContext for URI " + userURI + ", MBean name " + mBeanName, e); - return false; - } - return ContextFinder.unbindVirtualContext(userURI); - } - - /** - * Removes a context. This implementation will only check against the - * default context. - * @param versionedPath Versioned path of the context. - * @return true if succeeded, false otherwise. - */ - public boolean removeContext(final String versionedPath) { - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - defaultContext = null; - return true; - } else { - return false; - } - } - - /** - * Checks whether a given context has been registered. - * @param versionedPath Versioned path of the context. - * @return true if found, false otherwise. - */ - public boolean hasContext(final String versionedPath) { - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - return true; - } else { - return false; - } - } - - /** - * Dummy definition to keep Tomcat happy. - * @return null. - */ - public Context findMappingObject() { - return defaultContext; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return null. - */ - public DirContext findStaticResources() { - return null; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return new String[0]. - */ - public String[] getwelcomeFiles() { - return new String[0]; - } - - /** - * Dummy definition to keep Tomcat happy. - * @return Unique URL for this context. - */ - public URL getwarURL() { - try { - return new URL("file:///dev/null/VirtualWebContainer-" + userURI); - } catch (MalformedURLException e) { - throw new IllegalStateException("Cannot create URL", e); - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/ContextFinder.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/ContextFinder.java deleted file mode 100644 index ccfeea4736..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/ContextFinder.java +++ /dev/null @@ -1,330 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; - -import org.apache.catalina.Context; -import org.apache.catalina.connector.Request; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.web.base.BaseWebContainerService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Manages virtual contexts. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public final class ContextFinder { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(ContextFinder.class); - - /** - * Virtual contexts corresponding to URIs. - */ - private static List nonVersionedContexts = new ArrayList(); - - /** - * Virtual contexts corresponding to URIs. - */ - private static Map contextURIMapping = new HashMap(); - - /** - * Reference to a MBean server. - */ - private static JmxService jmxService = null; - - /** - * Web container. - */ - private static BaseWebContainerService webContainer = null; - - /** - * @param jmxService JMX service to set. - */ - public static void setJmxService(final JmxService jmxService) { - ContextFinder.jmxService = jmxService; - } - - /** - * This is a static class. - */ - private ContextFinder() { - // Nothing - } - - /** - * @param webContainer JOnAS web container to set. - */ - public static void setParent(final BaseWebContainerService webContainer) { - ContextFinder.webContainer = webContainer; - } - - /** - * @return JOnAS web container. - */ - public static BaseWebContainerService getParent() { - return ContextFinder.webContainer; - } - - /** - * Gets the context URI for a given request using the Context URI mapping. - * @param decodedURIString Decoded URI. - * @param req Request received by the HTTP server. - * @param vpb Bean to use for saving information about resolving paths. - * @return Versioned URI. - */ - public static String getContextURI(final String decodedURIString, final Request req, final VersionedPathBean vpb) { - logger.debug("Starting getContextURI with decodedURI {0} and request {1}", decodedURIString, req); - - if (webContainer.isVersioningEnabled()) { - VirtualContext vctx = null; - for (Map.Entry entry : contextURIMapping.entrySet()) { - final String key = entry.getKey(); - final String keyWithEndingSlash; - if (key.length() > 1) { - // The virtual context / has an ending slash, others don't - keyWithEndingSlash = key + '/'; - } else { - keyWithEndingSlash = key; - } - if (decodedURIString.equals(keyWithEndingSlash)) { - vctx = entry.getValue(); - break; - } else if (decodedURIString.startsWith(key)) { - if (vctx == null) { - vctx = entry.getValue(); - } else if (entry.getValue().userURI.length() > vctx.userURI.length()) { - vctx = entry.getValue(); - } - } - } - - if (vctx != null) { - final String userURIWithEndingSlash; - if (vctx.userURI.length() > 1) { - // The virtual context / has an ending slash, others don't - userURIWithEndingSlash = vctx.userURI + '/'; - } else { - userURIWithEndingSlash = vctx.userURI; - } - - if (!decodedURIString.startsWith(userURIWithEndingSlash)) { - logger.debug("Final slash missing for decodedURI {0} and request {1}", decodedURIString, req); - if (decodedURIString.equals(vctx.userURI)) { - return userURIWithEndingSlash; - } else { - return decodedURIString; - } - } - - for (String context : nonVersionedContexts) { - if (decodedURIString.startsWith(context) && context.length() > userURIWithEndingSlash.length()) { - logger.debug("Found non-versioned context {0} for decodedURI {1} and request {2}", context, - decodedURIString, req); - return decodedURIString; - } - } - - String versionedPath = vctx.findContext(req); - StringBuffer versionedURI = new StringBuffer(); - if (versionedPath == null) { - logger.debug("No version found on virtual context {0} for request {1}", vctx.userURI, req); - - versionedURI.append(vctx.userURI); - versionedURI.append("-invalid-version/"); - } else { - logger.debug("Found versioned context {0} on virtual context {1} for request {2}", versionedPath, - vctx.userURI, req); - - vpb.setUserPath(vctx.userURI); - vpb.setVersionedPath(versionedPath); - versionedURI.append(versionedPath); - versionedURI.append('/'); - - if (decodedURIString.length() > userURIWithEndingSlash.length()) { - versionedURI.append(decodedURIString.substring(userURIWithEndingSlash.length())); - } - } - logger.debug("Setting versionedURI to {0} for decodedURI {1} and request {2}", versionedURI, decodedURIString, - req); - - return versionedURI.toString(); - } - } - - logger.debug("No virtual context for decodedURI {0} and request {1}", decodedURIString, req); - return decodedURIString; - } - - /** - * Adds a non-versioned context root. - * @param context Context root. - */ - public static void addNonVersionedContext(String context) { - if (!context.startsWith("/")) { - context += "/" + context; - } - nonVersionedContexts.add(context); - } - - /** - * Binds a new context root. If the userURI is an existing versioned path, - * adds the context to the map using the given policy. Else, creates a new - * versioned context with this root as default. - * @param appName Name of the application the context belongs to. - * @param userURI User URI. - * @param contextRoot Versioned context root. - * @param policy Policy to use, ignored if new virtual context. - * @return true if versioning enabled, false otherwise. - */ - public static boolean bindContextRoot(final String appName, final String userURI, final Context contextRoot, - final String policy) { - if (webContainer.isVersioningEnabled()) { - if (!contextURIMapping.containsKey(userURI)) { - VirtualContext newContext = new VirtualContext(jmxService, userURI, contextRoot); - contextURIMapping.put(userURI, newContext); - } else { - contextURIMapping.get(userURI).addContext(contextRoot, policy); - } - return true; - } else { - return false; - } - } - - /** - * @param userContextRoot User (virtual) context root to list. - * @return Context root information for a given virtual (user) URI. - */ - public static Map readContextRoot(final String userContextRoot) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userContextRoot); - if (context == null) { - return null; - } else { - return context.getContexts(); - } - } else { - return null; - } - } - - /** - * Remove a non-versioned context root. - * @param context Context root. - */ - public static void removeNonVersionedContext(String context) { - if (!context.startsWith("/")) { - context += "/" + context; - } - nonVersionedContexts.remove(context); - } - - /** - * Unbinds a context root. - * @param userURI User (virtual) URI to unbind from. - * @param contextRoot Context root to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String userURI, final Context contextRoot) { - return unbindContextRoot(userURI, contextRoot.getPath()); - } - - /** - * Unbinds a versioned path. - * @param userURI User (virtual) URI to unbind from. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String userURI, final String versionedPath) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userURI); - if (context == null) { - return false; - } else { - return context.removeContext(versionedPath); - } - } else { - return false; - } - } - - /** - * Unbinds a versioned path. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final Context contextRoot) { - return unbindContextRoot(contextRoot.getPath()); - } - - /** - * Unbinds a versioned path. - * @param versionedPath Versioned path to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindContextRoot(final String contextRoot) { - if (webContainer.isVersioningEnabled()) { - for (Map.Entry entry : contextURIMapping.entrySet()) { - if (entry.getValue().hasContext(contextRoot)) { - return unbindContextRoot(entry.getKey(), contextRoot); - } - } - } - - return false; - } - - /** - * Unbinds a user (virtual) URI. - * @param userURI User (virtual) URI to unbind. - * @return true if succeeded, false otherwise. - */ - public static boolean unbindVirtualContext(final String userURI) { - if (webContainer.isVersioningEnabled()) { - VirtualContext context = contextURIMapping.get(userURI); - if (context == null) { - return false; - } else { - contextURIMapping.remove(userURI); - return context.removeVirtualContext(); - } - } else { - return false; - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/EmptyServlet.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/EmptyServlet.java deleted file mode 100644 index cdb7b70134..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/EmptyServlet.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.versioning; - -import java.io.IOException; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; - -/** - * Empty servlet. - * - * @author S. Ali Tokmen - */ -public class EmptyServlet implements Servlet { - - private ServletConfig sc; - - @Override - public void init(ServletConfig sc) throws ServletException { - this.sc = sc; - } - - @Override - public ServletConfig getServletConfig() { - return this.sc; - } - - @Override - public void service(ServletRequest request, ServletResponse rsp) throws ServletException, IOException { - HttpServletResponse response = (HttpServletResponse) rsp; - response.setStatus(404); - } - - @Override - public String getServletInfo() { - return this.toString() + "[" + this.sc + "]"; - } - - @Override - public void destroy() { - // Nothing - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/FilteredOutputStream.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/FilteredOutputStream.java deleted file mode 100644 index a96be4a0b8..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/FilteredOutputStream.java +++ /dev/null @@ -1,230 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import java.io.IOException; -import java.util.Arrays; -import java.util.List; - -import org.apache.catalina.connector.OutputBuffer; -import org.apache.catalina.connector.Response; -import org.ow2.jonas.versioning.VersioningService; - -/** - * Output stream with content filtering. - * - * @author tokmen-sa - */ -public class FilteredOutputStream extends OutputBuffer { - - /** - * List of endocings we support for byte array conversion.
    - *
    - * IMPORTANT NOTE: adding multi-byte encodings here (for example, - * UTF-8) is not supported yet. - */ - private static List SUPPORTED_BYTE_ARRAY_ENCODINGS = Arrays.asList(new String[] { - "US-ASCII", - "ISO-8859-1" - }); - - private Response response; - - private int remainingChars = 0; - - public FilteredOutputStream(Response response) { - super(); - this.response = response; - } - - public FilteredOutputStream(Response response, int size) { - super(size); - this.response = response; - } - - @Override - public void writeByte(int b) throws IOException { - String encoding = response.getCharacterEncoding(); - - if (encoding == null || !FilteredOutputStream.SUPPORTED_BYTE_ARRAY_ENCODINGS.contains(encoding)) { - super.writeByte(b); - } else { - super.checkConverter(); - this.doWrite(new String(new byte[]{(byte) b}, 0, 1, encoding), 0, 1); - } - } - - @Override - public void write(byte buf[], int off, int cnt) throws IOException { - String encoding = response.getCharacterEncoding(); - - if (encoding == null || !FilteredOutputStream.SUPPORTED_BYTE_ARRAY_ENCODINGS.contains(encoding)) { - super.write(buf, off, cnt); - } else { - super.checkConverter(); - this.doWrite(new String(buf, off, cnt, encoding), 0, cnt); - } - } - - @Override - public void write(String s, int off, int cnt) throws IOException { - if (s == null) { - super.write(s, off, cnt); - } else { - this.doWrite(s, off, cnt); - } - } - - @Override - public void write(char buf[], int off, int cnt) throws IOException { - if (buf == null) { - super.write(buf, off, cnt); - } else { - this.doWrite(new String(buf, off, cnt), 0, cnt); - } - } - - /** - * Replaces all versioned paths with the user path in the response output - * stream. - */ - protected void doWrite(String s, int off, int cnt) throws IOException { - VersionedPathBean vpb = this.findVersionedPathBean(response.getContentType()); - - // Now rewriting, for example: - // - // - // into - // - if (vpb != null) { - if (this.remainingChars != 0) { - final int remainingCompare = vpb.getVersionedPath().length() - this.remainingChars; - final String remainingVersionedPath = vpb.getVersionedPath().substring(remainingCompare); - - final int compareLength = Math.min(remainingVersionedPath.length(), cnt); - final String expected = remainingVersionedPath.substring(0, compareLength); - final String actual = s.substring(off, off + compareLength); - if (expected.equals(actual)) { - if (compareLength == remainingVersionedPath.length()) { - // Matched the versioned path - // No content to write before - - // Write the user path - if (!"/".equals(vpb.getUserPath())) { - super.write(vpb.getUserPath()); - this.remainingChars = 0; - } - - // Prepare to write the rest - off += compareLength; - cnt -= compareLength; - } else { - // Partial match - this.remainingChars -= compareLength; - - if (this.remainingChars > vpb.getVersionedPath().length()) { - throw new IllegalStateException("Remaining characters has exceeded versioned path length!"); - } - return; - } - } else { - super.write(vpb.getVersionedPath().substring(0, remainingCompare)); - this.remainingChars = 0; - } - } - - final int originalOffset = off; - final int originalCount = cnt; - final int originalLength = originalOffset + originalCount; - - for (int i = originalOffset; i < originalLength; i++) { - if (vpb.getVersionedPath().charAt(0) == s.charAt(i)) { - final int compareLength = Math.min(vpb.getVersionedPath().length(), originalLength - i); - final String expected = vpb.getVersionedPath().substring(0, compareLength); - final String actual = s.substring(i, i + compareLength); - if (expected.equals(actual)) { - // Matched all of part of the the versioned path - // Write out the beginning: vpb.getVersionedPath().length()) { - throw new IllegalStateException("Remaining characters has exceeded versioned path length!"); - } - return; - } - } - } - } - } - - // Write out the end: /image.gif"> - if (s.length() < off + cnt) { - throw new IllegalStateException(s); - } - super.write(s, off, cnt); - } - - private VersionedPathBean findVersionedPathBean(String contentType) { - // Get path information and whether we should overwrite the stream. - if (contentType != null && ContextFinder.getParent() != null) { - VersioningService versioning = ContextFinder.getParent().getVersioningService(); - VersionedPathBean vpb = response.getVersionedPathBean(); - - // Is this a versioned request? - if (vpb != null && vpb.getUserPath() != null && vpb.getVersionedPath() != null && versioning != null - && versioning.isVersioningEnabled()) { - - String[] filteredContentTypes = versioning.getFilteredContentTypesArray(); - if (filteredContentTypes != null && filteredContentTypes.length > 0) { - // For this versioned request, is this response type - // supposed to be rewritten? - for (String filteredContentType : filteredContentTypes) { - if (contentType.startsWith(filteredContentType)) { - return vpb; - } - } - } - } - } - - return null; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersionedPathBean.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersionedPathBean.java deleted file mode 100644 index 9f7f706a99..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersionedPathBean.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -/** - * Information about a versioned path. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VersionedPathBean { - - /** - * User path. - */ - private String userPath; - - /** - * Versioned path. - */ - private String versionedPath; - - /** - * Original decoded URI of the request. - */ - private String originalDecodedUri; - - /** - * Sets all members to null. - */ - public VersionedPathBean() { - this.userPath = null; - this.versionedPath = null; - } - - /** - * Initializes all members. - * @param userPath User path. - * @param versionedPath Versioned path. - */ - public VersionedPathBean(final String userPath, final String versionedPath) { - this.userPath = userPath; - this.versionedPath = versionedPath; - } - - /** - * @return User path. - */ - public String getUserPath() { - return userPath; - } - - /** - * @param userPath User path to set. - */ - public void setUserPath(final String userPath) { - this.userPath = userPath; - } - - /** - * @return Versioned path. - */ - public String getVersionedPath() { - return versionedPath; - } - - /** - * @param versionedPath Versioned path to set. This doesn't set - * userPathEndWithSlash. - */ - public void setVersionedPath(final String versionedPath) { - this.versionedPath = versionedPath; - } - - /** - * @return Original decoded URI of the request. - */ - public String getOriginalDecodedUri() { - return originalDecodedUri; - } - - /** - * @param originalDecodedUri Original decoded URI of the request. - */ - public void setOriginalDecodedUri(final String originalDecodedUri) { - this.originalDecodedUri = originalDecodedUri; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersioningValve.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersioningValve.java deleted file mode 100644 index a6f0705099..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VersioningValve.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.web.tomcat7.versioning; - -import java.io.IOException; - -import javax.servlet.ServletException; -import org.apache.catalina.Context; - -import org.apache.catalina.connector.CoyoteAdapter; -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.Response; -import org.apache.catalina.valves.ValveBase; -import org.apache.coyote.Constants; - -/** - * Versioning valve. - * - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VersioningValve extends ValveBase { - - private static final ThreadLocal THREAD_VPB = new ThreadLocal(); - - - public VersioningValve() { - super(true); - } - - @Override - public void invoke(final Request request, final Response response) throws IOException, ServletException { - VersionedPathBean vpb = THREAD_VPB.get(); - - try { - if (vpb == null) { - try { - vpb = new VersionedPathBean(); - vpb.setOriginalDecodedUri(request.getDecodedRequestURI()); - - THREAD_VPB.set(vpb); - response.setVersionedPathBean(vpb); - - CoyoteAdapter adapter = (CoyoteAdapter) request.getConnector().getProtocolHandler().getAdapter(); - - final String requestURI = request.getRequestURI(); - final String versionedURI = ContextFinder.getContextURI(requestURI, request, vpb); - - if (versionedURI.equals(requestURI + '/')) { - // Final slash for virtual context missing, redirect - response.sendRedirect(versionedURI); - } else if (!versionedURI.equals(requestURI)) { - String encoding = request.getConnector().getURIEncoding(); - if (encoding == null) { - encoding = Constants.DEFAULT_CHARACTER_ENCODING; - } - - request.getMappingData().recycle(); - request.getCoyoteRequest().decodedURI().recycle(); - request.getCoyoteRequest().requestURI().setChars(versionedURI.toCharArray(), 0, versionedURI.length()); - byte[] versionedURIBytes = versionedURI.getBytes(encoding); - request.getCoyoteRequest().requestURI().setBytes(versionedURIBytes, 0, versionedURIBytes.length); - - try { - adapter.service(request.getCoyoteRequest(), response.getCoyoteResponse()); - - // Put back the context in order to avoid NPEs (JONAS-752) - // - // This happens because we are calling adapter.service, which will set the - // context to null; on the other hand the caller of this valve is also - // adapter.service - request.getConnector().getMapper().map( - request.getCoyoteRequest().serverName(), - request.getCoyoteRequest().requestURI(), null, - request.getMappingData()); - } catch (Exception e) { - throw new IOException(e); - } - } else { - getNext().invoke(request, response); - } - } finally { - THREAD_VPB.remove(); - } - } else { - response.setVersionedPathBean(vpb); - getNext().invoke(request, response); - } - } finally { - response.setVersionedPathBean(null); - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContext.java deleted file mode 100644 index b1c5ccfe37..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContext.java +++ /dev/null @@ -1,338 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.Cookie; - -import org.apache.catalina.Context; -import org.apache.catalina.Session; -import org.apache.catalina.core.ApplicationSessionCookieConfig; -import org.apache.catalina.connector.Request; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.versioning.VersioningServiceBase; - -/** - * Virtual Context implementation that handles operations with the additional - * contexts and defines a new context called "private". - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public class VirtualContext extends AbsVirtualContext { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(VirtualContext.class); - - /** - * Reserved contexts. - */ - private List reservedContexts = new ArrayList(); - - /** - * Disabled contexts. - */ - private List disabledContexts = new ArrayList(); - - /** - * Private contexts. - */ - private List privateContexts = new ArrayList(); - - /** - * Creates and registers a virtual context. - * @param jmxService JMX server. - * @param userURI User (virtual) URI of this context. - * @param contextInstance The first context instance, will be mapped as - * default context. - */ - public VirtualContext(final JmxService jmxService, final String userURI, final Context contextInstance) { - super(jmxService, userURI, contextInstance); - } - - /** - * Adds a new context. Called by the parent if the policy is not default. - * @param contextInstance Context instance (versioned path). - * @param policy Policy (extensible). - * @throws IllegalArgumentException If policy not recognized. - */ - @Override - protected void addContextInternal(final Context contextInstance, final String policy) throws IllegalArgumentException { - if (VersioningServiceBase.DISABLED.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind disabled context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.disabledContexts.add(contextInstance); - } else if (VersioningServiceBase.PRIVATE.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind private context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.privateContexts.add(contextInstance); - } else if (VersioningServiceBase.RESERVED.equals(policy)) { - if (logger.isDebugEnabled()) { - logger.debug("Addind reserved context " + contextInstance.getPath() + " for userURI " + userURI); - } - this.reservedContexts.add(contextInstance); - } else { - throw new IllegalArgumentException("Invalid policy: " + policy); - } - } - - /** - * @return All versioned contexts with their POLICIES for this virtual - * context. - */ - public Map getContexts() { - Map result; - int mapSize = disabledContexts.size() + reservedContexts.size() + privateContexts.size(); - if (defaultContext != null) { - result = new HashMap(1 + mapSize); - result.put(defaultContext.getPath(), VersioningServiceBase.DEFAULT); - } else { - result = new HashMap(mapSize); - } - for (Context context : disabledContexts) { - result.put(context.getPath(), VersioningServiceBase.DISABLED); - } - for (Context context : reservedContexts) { - result.put(context.getPath(), VersioningServiceBase.RESERVED); - } - for (Context context : privateContexts) { - result.put(context.getPath(), VersioningServiceBase.PRIVATE); - } - return result; - } - - /** - * Checks if a given request has a private context. - * @param req Request to check. - * @return The private context for this request, null if none found. - */ - protected String findPrivateContext(final Request req) { - // TODO: this should return some non-null values someday - return null; - } - - /** - * Checks if a given session has a disabled context. - * @param req Request to check. - * @return The disabled context for this request, null if none found. - */ - protected String findDisabledContext(final Request req) { - List sessions = new ArrayList(); - - // Build list of sessions - String requestSessionid = req.getRequestedSessionId(); - if (requestSessionid != null) { - sessions.add(requestSessionid); - } - - Context contextCookie = (Context) req.getMappingData().context; - String sessionCookieName = ApplicationSessionCookieConfig.getSessionCookieName(contextCookie); - - - Cookie[] cookies = req.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if (cookie.getName().equals(sessionCookieName)) { - sessions.add(cookie.getValue().toString()); - } - } - } - if (sessions.size() == 0) { - logger.debug("No session found"); - return null; - } - - // Check for each session in each disabled context - for (Context context : disabledContexts) { - for (String sessionid : sessions) { - try { - Session session = context.getManager().findSession(sessionid); - if (session != null && session.isValid()) { - logger.debug("Found session " + session + " for context " + context.getPath()); - return context.getPath(); - } - } catch (IOException e) { - logger.error("Cannot read session", e); - } - } - } - - logger.debug("None of the user's sessions belong to the disabled contexts"); - return null; - } - - /** - * Rebinds a context. - * @param versionedPath Versioned path of the context. - * @param policy New policy. - * @return true if succeeded, false otherwise. - */ - public boolean rebindContext(final String versionedPath, final String policy) { - Context contextInstance; - if (defaultContext != null && versionedPath.equals(defaultContext.getPath())) { - contextInstance = defaultContext; - defaultContext = null; - } else { - contextInstance = findDeleteContextObject(versionedPath, true); - } - - if (contextInstance == null) { - return false; - } else { - addContext(contextInstance, policy); - return true; - } - } - - /** - * Finds the context object corresponding to a path. This implementation - * calls parent and check additional contexts. - * @param versionedPath Path to check against. - * @return Context object corresponding to versionedPath, null if none. - */ - @Override - protected Context findContextObject(final String versionedPath) { - Context result = super.findContextObject(versionedPath); - if (result == null) { - result = findDeleteContextObject(versionedPath, false); - } - return result; - } - - /** - * Finds and optionally deletes a context object. - * @param versionedPath Path to check against. - * @param delete Whether to delete when found. - * @return Context corresponding to versionedPath, null if none found. - */ - protected Context findDeleteContextObject(final String versionedPath, final boolean delete) { - // disabledContexts is null when parent - // calls findContextObject at construction - if (disabledContexts != null) { - for (Context context : disabledContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - disabledContexts.remove(context); - } - return context; - } - } - } - // reservedContexts is null when parent - // calls findContextObject at construction - if (reservedContexts != null) { - for (Context context : reservedContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - reservedContexts.remove(context); - } - return context; - } - } - } - // privateContexts is null when parent - // calls findContextObject at construction - if (privateContexts != null) { - for (Context context : privateContexts) { - if (versionedPath.equals(context.getPath())) { - if (delete) { - privateContexts.remove(context); - } - return context; - } - } - } - return null; - } - - /** - * Removes a context. If no more contexts left, will also remove this - * virtual context. - * @param versionedPath Versioned path of the context. - * @return true if succeeded, false otherwise. - */ - @Override - public boolean removeContext(final String versionedPath) { - boolean result = super.removeContext(versionedPath); - if (!result) { - result = (null != findDeleteContextObject(versionedPath, true)); - } - if (defaultContext == null && privateContexts.isEmpty() && reservedContexts.isEmpty() && disabledContexts.isEmpty()) { - removeVirtualContext(); - } - return result; - } - - /** - * Checks whether a given context has been registered. - * @param versionedPath Versioned path of the context. - * @return true if found, false otherwise. - */ - @Override - public boolean hasContext(final String versionedPath) { - boolean result = super.hasContext(versionedPath); - if (!result) { - result = (null != findDeleteContextObject(versionedPath, false)); - } - return result; - } - - /** - * Finds the context URI string for a request. - * @param req Request. - * @return Context URI string for that request, null if none found. - */ - public String findContext(final Request req) { - String contextURI = findPrivateContext(req); - logger.debug("findPrivateContext returned : " + contextURI); - if (contextURI == null) { - contextURI = findDisabledContext(req); - logger.debug("findDisabledContext returned : " + contextURI); - } - if (contextURI == null) { - if (defaultContext == null) { - logger.debug("No context found, default also null. Returning null."); - } else { - // TODO: force session creation ? - contextURI = defaultContext.getPath(); - logger.debug("No context found, returning default : " + contextURI); - } - } - return contextURI; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContextMBean.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContextMBean.java deleted file mode 100644 index 7debdd7f1c..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/VirtualContextMBean.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import org.ow2.jonas.versioning.VirtualContextJMXInterface; - -/** - * JMX interface for a virtual Tomcat context. This interface combines the - * versioning service's Virtual Context JMX interface with the Tomcat WebModule - * JMX interface. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface VirtualContextMBean extends WebModuleContext, VirtualContextJMXInterface { - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/WebModuleContext.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/WebModuleContext.java deleted file mode 100644 index 60aaf82d12..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/versioning/WebModuleContext.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * Application Versioning System - * Copyright (C) 2008 France Telecom R&D - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.versioning; - -import java.net.URL; - -import javax.naming.directory.DirContext; - -import org.apache.catalina.Context; - -/** - * Interface that lists all method that a management bean that Tomcat should - * recognize as a WebModule. - * @author Frederic Germaneau - * @author S. Ali Tokmen - */ -public interface WebModuleContext { - - /** - * @return The mapping context, can be null. - */ - Context findMappingObject(); - - /** - * @return Static resources, can be null. - */ - DirContext findStaticResources(); - - /** - * @return Welcome files for the web application's directories. - */ - String[] getwelcomeFiles(); - - /** - * @return URL of the WAR file. - */ - URL getwarURL(); - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/EndpointInstanceListener.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/EndpointInstanceListener.java deleted file mode 100644 index 90b38a1cf4..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/EndpointInstanceListener.java +++ /dev/null @@ -1,140 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.InstanceEvent; -import org.apache.catalina.InstanceListener; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; - -import javax.servlet.ServletContext; - -/** - * This Catalina InstanceListener is invoked during lifecycle phases - * of the servlet's instances. - * Its role is to first create the IWebServiceEndpoint instance - * (using the IJAXWSService), then starting the newly created endpoint, - * and finally, inject the endpoint into the JAXWSServlet instance. - * @author Guillaume Sauthier - */ -public class EndpointInstanceListener implements InstanceListener { - - /** - * Metadata used to create the WSEndpoint. - */ - private IWarClassMetadata endpointMetadata; - - /** - * JAXWS Service instance. - */ - private IJAXWSService service; - - /** - * The created endpoint. - */ - private IWebServiceEndpoint endpoint; - - /** - * Creates a new instanceListener dedicated for Web based, - * web.xml described POJO web services - * @param endpointMetadata Class metadatas - * @param service the JAXWS Service - */ - public EndpointInstanceListener(final IWarClassMetadata endpointMetadata, - final IJAXWSService service) { - this.endpointMetadata = endpointMetadata; - this.service = service; - } - - /** - * Callback when an instance level (ie servlet instance) event is fired by the Wrapper. - * @param event Servlet's instance lifecycle event - */ - public void instanceEvent(final InstanceEvent event) { - - // Only react when the instance when just alive (but not already inited) - if (InstanceEvent.AFTER_INIT_EVENT.equals(event.getType())) { - - // The servlet is a JAXWSServlet - JAXWSServlet servlet = (JAXWSServlet) event.getServlet(); - - // Maybe there are multiple instances of the servlet, so - // // only creates the endpoint once - if (endpoint == null) { - - // Create the endpoint from metadata - ClassLoader loader = event.getWrapper().getLoader().getClassLoader(); - try { - ServletContext sc = event.getServlet().getServletConfig().getServletContext(); - endpoint = service.createPOJOWebServiceEndpoint(endpointMetadata, loader, sc); - } catch (WSException e) { - throw new RuntimeException("WebServiceEndpoint creation failed", e); - } - - // Fill in some PMD values - PortMetaData pmd = endpoint.getPortMetaData(); - - // Update the url-pattern - // Find the first servlet-mapping already registered in the web.xml - String pattern = null; - String[] mappings = event.getWrapper().findMappings(); - if (mappings.length != 0) { - pattern = URLUtils.findValidUrlPattern(mappings); - } - - if (pattern != null) { - // Overwrite the default pattern name - pmd.setUrlPattern(pattern); - } - - // Set context name - Context context = (Context) event.getWrapper().getParent(); - pmd.setContextRoot(context.getName()); - - // Compute a naive endpoint URL - Host host = (Host) context.getParent(); - String url = URLUtils.getEndpointURL(pmd, host); - pmd.setEndpointURL(url); - - // metadata and service references are no more required - endpointMetadata = null; - service = null; - } - - // Inject the endpoint - servlet.setWebServiceEndpoint(endpoint); - - // Print infos - endpoint.displayInfos(); - - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/URLUtils.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/URLUtils.java deleted file mode 100644 index b07216416f..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/URLUtils.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import org.apache.catalina.Engine; -import org.apache.catalina.Host; -import org.apache.catalina.Service; -import org.apache.catalina.connector.Connector; -import org.ow2.jonas.ws.jaxws.PortMetaData; - -/** - * The URLUtils a helper class for URL management operations. - * - * @author Guillaume Sauthier - */ -public class URLUtils { - - /** - * Compute a possible local endpoint URL. - * @param portMetadata port related metadata - * @param host host deploying the new context - * @return a possible local endpoint URL or null if computation was impossible - */ - static String getEndpointURL(final PortMetaData portMetadata, final Host host) { - - // Find hostname - String hostname = host.getName(); - - // Find url-pattern - String pattern = portMetadata.getUrlPattern(); - - // Find the connectors associated to this Host - Engine engine = (Engine) host.getParent(); - Service service = engine.getService(); - Connector[] connectors = service.findConnectors(); - - // Find an HTTP and/or an HTTPS Connector - Connector httpConnector = null; - Connector httpsConnector = null; - for (Connector connector : connectors) { - String scheme = connector.getScheme(); - - if ("https".equals(scheme)) { - httpsConnector = connector; - } - - if ("http".equals(scheme)) { - httpConnector = connector; - } - } - - // Compute the endpoint URL - StringBuffer sb = new StringBuffer(); - if (httpConnector != null) { - // Prefer HTTP - sb.append("http://"); - sb.append(hostname); - sb.append(":"); - int port = httpConnector.getPort(); - int proxyPort = httpConnector.getProxyPort(); - if (proxyPort != 0) { - port = proxyPort; - } - sb.append(port); - sb.append(getContextRoot(portMetadata)); - sb.append(pattern); - - return sb.toString(); - } else if (httpsConnector != null) { - // Fallback on HTTPS if available - sb.append("https://"); - sb.append(hostname); - sb.append(":"); - int port = httpsConnector.getPort(); - int proxyPort = httpsConnector.getProxyPort(); - if (proxyPort != 0) { - port = proxyPort; - } - sb.append(port); - sb.append(getContextRoot(portMetadata)); - sb.append(pattern); - - return sb.toString(); - } - - return null; - } - - /** - * Fix the context-root by prefixing it with a leading '/' (if missing). - * @param portMetadata port related metadata - * @return a valid context-root from the port metadata - */ - protected static String getContextRoot(final PortMetaData portMetadata) { - String contextName = portMetadata.getContextRoot(); - if (!contextName.startsWith("/")) { - contextName = "/" + contextName; - } - return contextName; - } - - /** - * @param mappings candidates mappins - * @return a valid mapping selected from the candidates - */ - public static String findValidUrlPattern(final String[] mappings) { - if ((mappings == null) || (mappings.length == 0)) { - // Empty mappings - return null; - } - - for (String mapping : mappings) { - if (containsNoWildcards(mapping)) { - return mapping; - } - } - - // Found no suitable mapping - return null; - } - - /** - * @param mapping candidate - * @return true if the candidate is a valid mapping value. - */ - private static boolean containsNoWildcards(final String mapping) { - return (mapping.indexOf('*') == -1); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSContextLifecycleListener.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSContextLifecycleListener.java deleted file mode 100644 index 1f324f6046..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSContextLifecycleListener.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import java.util.Map; - -import org.apache.catalina.Container; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.Wrapper; -import org.apache.catalina.core.StandardContext; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; - -/** - * React to Context Lifecycle events (start/stop/...). - * This class acts as the @WebService POJO annotated web service deployer. - * Right after the Context is started, existing registered servlet (from web.xml) - * are analyzed, if they marks a web service, the Wrapper class is adapted - * for web service endpoint invocation. - * - * After Context's startup, we benefit of the real WebApp ClassLoader, so - * we can easily creates our own Wrappers - * @author Guillaume Sauthier - */ -public class WSContextLifecycleListener implements LifecycleListener { - - /** - * List of @WebServices annotated classes. - */ - private Map services; - - /** - * The JAXWS Service. - */ - private IJAXWSService jaxwsService; - - /** - * Construct a new LifecycleListener. - * @param services JAX-WS web services description - * @param jaxws the JAXWS service - */ - public WSContextLifecycleListener(final Map services, - final IJAXWSService jaxws) { - this.services = services; - this.jaxwsService = jaxws; - } - - /** - * Callback for all Context Lifecycle events. - * We only react to CONFIGURE_START_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT - * @param event the Lifecycle event - */ - public void lifecycleEvent(final LifecycleEvent event) { - if (Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) { - onContextStart((StandardContext) event.getLifecycle()); - - } else if (Lifecycle.AFTER_START_EVENT.equals(event.getType())) { - onAfterContextStart((StandardContext) event.getLifecycle()); - - } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { - onAfterContextStop((StandardContext) event.getLifecycle()); - } - } - - /** - * Called at the real startup of the Context. - * But before the Wrappers have been started. - * This is important because, we want to change the wrappers. - * @param context Tomcat Context - */ - private void onContextStart(final StandardContext context) { - - // Break processing if there is no services to deploy - if (services.isEmpty()) { - return; - } - - // find all the declared servlets/wrappers - Container[] childs = context.findChildren(); - // Childrens are all Wrappers - if (childs != null) { - for (Container child : childs) { - Wrapper wrapper = (Wrapper) child; - String servletClass = wrapper.getServletClass(); - - // Check if the servlet-class is one of the services we have recognized before - IWarClassMetadata metadata = findWebServiceMetadata(servletClass); - if (metadata != null) { - // OK Got it - - // Change the servlet-class - wrapper.setServletClass(JAXWSServlet.class.getName()); - - // And add an InstanceListener to perform some manual injection before any usage - wrapper.addInstanceListener(new EndpointInstanceListener(metadata, jaxwsService)); - - // remove the servlet from the list of endpoints to prepare - services.remove(servletClass); - - // Try to force servlet loading - // This is important to do that because if the loadOnStartup is not set (or set - // to a negative value), the servlet will be loaded during the first call. - // During the servlet loading, we create the webservice endpoint and register - // it in our WSContainer so that we can start all our services together. - // Waiting for the first call is a bit late for us because we start the WS - // endpoints at the end of StandardContext startup (before the first call). - int loadOnStartup = wrapper.getLoadOnStartup(); - if (loadOnStartup < 0) { - wrapper.setLoadOnStartup(0); - } - } // else next servlet - } - } - - // OK, now we have browsed all the servlets that have been declared in the web.xml - // The metadata remaining in the services Map are discovered endpoint that were - // not declared in the web.xml - // They will be processed 'after startup' - - } - - /** - * Invoked after Context startup. - * @param context the Context of the webapp - */ - private void onAfterContextStart(final StandardContext context) { - - // Iterates on the remaining services (thoses that were not declared in the web.xml) - for (Map.Entry entry : services.entrySet()) { - - // As the Context is started, we have a ClassLoader - ClassLoader loader = context.getLoader().getClassLoader(); - - // That we can use to create our endpoint - IWebServiceEndpoint endpoint = null; - IWarClassMetadata metadata = entry.getValue(); - try { - endpoint = jaxwsService.createPOJOWebServiceEndpoint(metadata, - loader, - context.getServletContext()); - } catch (WSException e) { - throw new RuntimeException("WebServiceEndpoint creation failed", e); - } - - // Fill in some data about PMD - PortMetaData pmd = endpoint.getPortMetaData(); - - // Store context name - pmd.setContextRoot(context.getName()); - - // Compute the endpoint naive URL - String url = URLUtils.getEndpointURL(pmd, (Host) context.getParent()); - pmd.setEndpointURL(url); - - // Create a new Wrapper dedicated to WS endpoint - WebServiceEndpointStandardWrapper wrapper = null; - String name = metadata.getJClass().getName().replace('/', '.'); - wrapper = new WebServiceEndpointStandardWrapper(endpoint, name); - - // Add the Servlet/Wrapper to the context - context.addChild(wrapper); - - // Compute the servlet-mapping - String pattern = pmd.getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - // Print infos - endpoint.displayInfos(); - - } - } - - /** - * Called after the stopping of the Context. - * @param context - */ - private void onAfterContextStop(final StandardContext context) { - - jaxwsService.undeployPOJOEndpoints(context.getServletContext()); - } - - - /** - * Find the metadata associated with a given classname. - * @param servletClass class name - * @return the metadata of the named class, may return null, if there - * is no associated metadata - */ - private IWarClassMetadata findWebServiceMetadata(final String servletClass) { - - for (Map.Entry entry : services.entrySet()) { - if (servletClass.equals(entry.getKey())) { - return entry.getValue(); - } - } - return null; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSDeployment.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSDeployment.java deleted file mode 100644 index 5b8f655912..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WSDeployment.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.startup.ContextConfig; -import org.ow2.jonas.web.tomcat7.JOnASStandardContext; -import org.ow2.jonas.web.tomcat7.Tomcat7Service; -import org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; - -/** - * @author Guillaume Sauthier - */ -public class WSDeployment implements IWebServiceDeploymentManager { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WSDeployment.class); - - /** - * Our support: Tomcat. - */ - private Tomcat7Service tomcatService; - - /** - * The work directory of tomcat. - */ - private String workDirectory; - - /** - * Construct a new {@link WSDeployment} manager based on Tomcat. - * @param tomcatService Tomcat instance - */ - public WSDeployment(final Tomcat7Service tomcatService) { - this.tomcatService = tomcatService; - } - - /** - * @param workDirectory the workDirectory to set - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - - /** - * @see org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager#registerWSEndpoint(org.ow2.jonas.ws.jaxws.IWebServiceEndpoint) - */ - public void registerWSEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - - switch (endpoint.getType()) { - case POJO: - throw new IllegalStateException("Not implemented yet"); - case EJB: - registerEJBEndpoint(endpoint); - } - - } - - /** - * Register a new EJB based WS endpoint. - * @param endpoint the EJB based WS endpoint to deploy - * @throws WSException - */ - private void registerEJBEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - PortMetaData pmd = endpoint.getPortMetaData(); - // Find the host - Host host = tomcatService.findHost(pmd.getHostname()); - - // TODO Configure security - // TODO, if there are multiple EJB exposed as WS, we need to reuse the Context - - // Configure Wrapper - WebServiceEndpointStandardWrapper wrapper = null; - wrapper = new WebServiceEndpointStandardWrapper(endpoint); - - wrapper.setParentClassLoader(this.getClass().getClassLoader()); - - logger.debug("Added Wrapper/Servlet: {0}", wrapper); - - // Create the context - JOnASStandardContext context = new JOnASStandardContext(false, true, false); - - // Configure the context - context.setPath(URLUtils.getContextRoot(pmd)); - - // Add the Servlet - context.addChild(wrapper); - - String pattern = endpoint.getPortMetaData().getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - context.setTomcatService(tomcatService); - - // I need here a valid File in the work directory of JOnAS - File docBase = new File(workDirectory, - endpoint.getPortMetaData().getContextRoot()); - if (!docBase.exists()) { - docBase.mkdirs(); - } // TODO remove the directory ? - context.setDocBase(docBase.getPath()); - - // This listener is here to tell tomcat that the Context is - // OK for startup, even if no ContextConfig was set. - context.addLifecycleListener(new LifecycleListener() { - - public void lifecycleEvent(LifecycleEvent lifecycleEvent) { - - if (Lifecycle.START_EVENT.equals(lifecycleEvent.getType())) { - // The context is configured - Context ctx = (Context) lifecycleEvent.getLifecycle(); - ctx.setConfigured(true); - } else if (Lifecycle.AFTER_START_EVENT.equals(lifecycleEvent.getType())) { - // Cleanup registered application listeners (such as JSF, ...) - Context ctx = (Context) lifecycleEvent.getLifecycle(); - String[] listeners = ctx.findApplicationListeners(); - for (String listener : listeners) { - ctx.removeApplicationListener(listener); - } - } - } - }); - - // Add the Context - // Will be automatically started - host.addChild(context); - - // Compute a default URL that can be used to access the endpoint locally - String url = URLUtils.getEndpointURL(pmd, host); - endpoint.getPortMetaData().setEndpointURL(url); - - logger.debug("Added Context: {0}", context); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager#unregisterWSEndpoint(org.ow2.jonas.ws.jaxws.IWebServiceEndpoint) - */ - public void unregisterWSEndpoint(final IWebServiceEndpoint endpoint) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - switch (endpoint.getType()) { - case POJO: - throw new IllegalStateException("Not implemented yet"); - case EJB: - unregisterEJBEndpoint(endpoint); - } - } - - - private void unregisterEJBEndpoint(final IWebServiceEndpoint endpoint) { - - String contextName = URLUtils.getContextRoot(endpoint.getPortMetaData()); - String hostname = endpoint.getPortMetaData().getHostname(); - - Host host = tomcatService.findHost(hostname); - Context context = (Context) host.findChild(contextName); - - // remove the docbase directory - // add by youchao - String path = context.getDocBase(); - File docBase = new File(path); - if(docBase.isDirectory()) { - docBase.delete(); - } - - host.removeChild(context); - - logger.debug("Context {0} stopped", contextName); - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebServiceEndpointStandardWrapper.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebServiceEndpointStandardWrapper.java deleted file mode 100644 index 830e3f73d9..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebServiceEndpointStandardWrapper.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import org.apache.catalina.core.StandardWrapper; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.http.servlet.JAXWSServlet; - -import javax.servlet.Servlet; -import javax.servlet.ServletException; - - -public class WebServiceEndpointStandardWrapper extends StandardWrapper { - - /** - * Default value for the servlet-name element. - */ - public static final String JAX_WS_GENERIC_SERVLET = "JAX-WS 2.x Generic Servlet"; - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -8186120043063306566L; - - /** - * Endpoint to be injected in the servlet instance. - */ - private IWebServiceEndpoint endpoint; - - /** - * Creates a customized Tomcat Wrapper - * @param endpoint web service endpoint - * @param servletName The name of this servlet (not the class name !) - */ - public WebServiceEndpointStandardWrapper(final IWebServiceEndpoint endpoint, - final String servletName) { - this.endpoint = endpoint; - - // Hardcoded JAXWSServlet name ? - setServletClass(JAXWSServlet.class.getName()); - setServletName(servletName); - } - - /** - * Creates a customized Tomcat Wrapper - * @param endpoint web service endpoint - */ - public WebServiceEndpointStandardWrapper(final IWebServiceEndpoint endpoint) { - this(endpoint, JAX_WS_GENERIC_SERVLET); - } - - /* (non-Javadoc) - * @see org.apache.catalina.core.StandardWrapper#loadServlet() - */ - @Override - public synchronized Servlet loadServlet() throws ServletException { - - // Delegate Servlet instanciation - JAXWSServlet servlet = (JAXWSServlet) super.loadServlet(); - - // Inject the Endpoint - servlet.setWebServiceEndpoint(endpoint); - - return servlet; - } - -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebservicesWebDeployer.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebservicesWebDeployer.java deleted file mode 100644 index 1e04294639..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/WebservicesWebDeployer.java +++ /dev/null @@ -1,692 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws; - -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.ArrayList; -import java.util.Set; -import java.io.File; - -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.web.tomcat7.Tomcat7Service; -import org.ow2.jonas.web.tomcat7.JOnASStandardContext; -import org.ow2.jonas.web.tomcat7.security.Realm; -import org.ow2.jonas.web.tomcat7.ws.strategy.EjbJarContextNamingStrategy; -import org.ow2.jonas.web.tomcat7.ws.security.SecureWebDeploymentDescBuilder; -import org.ow2.jonas.web.base.lib.PermissionManager; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.lib.security.PermissionManagerException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.apache.catalina.core.StandardContext; -import org.apache.catalina.core.StandardWrapper; -import org.apache.catalina.Host; -import org.apache.catalina.LifecycleListener; -import org.apache.catalina.LifecycleEvent; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.Context; -import org.apache.catalina.deploy.SecurityConstraint; -import org.apache.catalina.deploy.SecurityCollection; -import org.apache.catalina.deploy.LoginConfig; -import org.apache.catalina.startup.ContextConfig; - -/** - * The WebservicesWebDeployer is responsible of deploying/creating/removing - * web contexts for EJB based endpoints. - * - * @author Guillaume Sauthier - */ -public class WebservicesWebDeployer implements IWebDeployer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebservicesWebDeployer.class); - - /** - * Our support: Tomcat. - */ - private Tomcat7Service tomcatService; - - /** - * The work directory where contexts bases will be stored. - */ - private String workDirectory; - - /** - * Construct a new {@link WebservicesWebDeployer} manager based on Tomcat. - * @param tomcatService Tomcat instance - */ - public WebservicesWebDeployer(final Tomcat7Service tomcatService) { - this.tomcatService = tomcatService; - } - - /** - * @param workDirectory the workDirectory to set - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - - /** - * Deploy the given module, with all its endpoints in the web - * container, creating appropriate contexts when required. - * - * @param module the webservices module to deploy - * @throws org.ow2.jonas.ws.jaxws.WSException - * if deployment went wrong. - */ - public void deploy(final IWebservicesModule> module) throws WSException { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - logger.debug("Deploying WsModule {0}", module.getName()); - Map> endpoints = getWebContextPartitions(module); - - for (Map.Entry> entry : endpoints.entrySet()) { - - deployEndpoints(entry.getKey(), entry.getValue()); - } - - } - - /** - * Deploy a context and the associated endpoints. - * @param webContext context to be created - * @param endpoints endpoints to be deployed - */ - protected void deployEndpoints(final WebContext webContext, - final List endpoints) throws WSException { - logger.debug("Deploying Web Context {0}", webContext.getContextName()); - - // Create the context - JOnASStandardContext context = createWebservicesContext(webContext.getContextName()); - - // Get the default Host - Host host = getDefaultHost(); - - // Configure the realm to be used if required - configureSecurityRealm(host, context, webContext, endpoints); - - // Add required servlets inside the Context - for (IEJBWebserviceEndpoint endpoint : endpoints) { - - // 1 Servlet per endpoint - configureWebservicesServlet(context, endpoint); - - // Compute a default URL that can be used to access the endpoint locally - PortMetaData pmd = endpoint.getPortMetaData(); - String url = URLUtils.getEndpointURL(pmd, host); - pmd.setEndpointURL(url); - - } - - // Add it into the Host (ie start it) - host.addChild(context); - } - - /** - * Configure the security of the given StandardContext. - * @param host Context's parent, used to get a default Realm - * @param context Context to be configured - * @param webContext WebContext description (provides realm/jaasEntry name) - * @param endpoints list of endpoints (possibly secured) - * @throws WSException - */ - private void configureSecurityRealm(final Host host, - final JOnASStandardContext context, - final WebContext webContext, - final List endpoints) throws WSException { - - // Get a realm (if possible) - Realm realm = null; - if (webContext.getRealmName() != null) { - // JACC realm - realm = tomcatService.createJOnASRealm(webContext.getRealmName(), true); - } else if (webContext.getJaasEntry() != null) { - // JAAS realm - realm = tomcatService.createJOnASRealm(webContext.getJaasEntry(), false); - } else { - // Plug on existing realm if any - org.apache.catalina.Realm parentRealm = host.getRealm(); - if ((parentRealm != null) && (parentRealm instanceof Realm)) { - - try { - realm = (Realm) ((Realm) parentRealm).clone(); - } catch (CloneNotSupportedException cnse) { - String err = "Cannot clone the realm used by the existing context or its parent realm"; - throw new WSException(err, cnse); - } - } - } - - if (realm != null) { - // A PermissionManager needs a contextId - String contextId = host.getName() + context.getPath(); - - // Creates a permission manager - WebContainerDeploymentDesc dd = createWebDeploymentDescriptor(endpoints); - PermissionManager permissionManager = createPermissionManager(contextId, dd); - - // Assign it to the Realm - realm.setPermissionManager(permissionManager); - context.setWebDeploymentDescriptor(dd); - - // Setup realm<->context association - realm.setContext(context); - context.setRealm(realm); - } - } - - /** - * Creates a PermissionManager for the given Web DD. - * @param contextId ID of the secured context - * @param dd web deployment descriptor containing security stuff - * @return a ready to use PermissionManager - * @throws WSException if there is an error during the PermissionManager creation - */ - private PermissionManager createPermissionManager(final String contextId, - final WebContainerDeploymentDesc dd) throws WSException { - - // Use the descriptor to creates a PermissionManager - PermissionManager manager = null; - try { - manager = new PermissionManager(dd, contextId, true); - manager.translateServletDeploymentDescriptor(); - manager.commit(); - } catch (PermissionManagerException e) { - throw new WSException("Cannot construct PermissionManager", e); - } - - return manager; - } - - /** - * Creates a Web deployment descriptor structure from the list of (possibly secured) endpoints. - * @param endpoints list of endpoints - * @return a security initialized Web DD - * @throws WSException if there is an error during the DD generation. - */ - private WebContainerDeploymentDesc createWebDeploymentDescriptor(final List endpoints) throws WSException { - - // Build a Web DeploymentDescriptor - SecureWebDeploymentDescBuilder builder = new SecureWebDeploymentDescBuilder(); - List constraints = new ArrayList(); - for (IEJBWebserviceEndpoint endpoint : endpoints) { - ISecurityConstraint sc = endpoint.getSecurityConstraint(); - if (sc != null) { - constraints.add(sc); - } - } - return builder.createJOnASWebDescriptor(constraints); - } - - /** - * Undeploy the given module, with all its endpoints from the - * web container. An implementation should catch most of the - * Exceptions and try to cleanupas much as possible. - * - * @param module the webservices module to undeploy - */ - public void undeploy(final IWebservicesModule> module) { - // Ensure web container is started - tomcatService.startInternalWebContainer(); - - logger.debug("Undeploying WsModule {0}", module.getName()); - - // Get Web context used by the endpoints of the module - List contextsToBeUndeployed = getAssociatedWebContexts(module); - - // Stop all the used Contexts - for (String contextName : contextsToBeUndeployed) { - // Find the Context - Host host = getDefaultHost(); - - if (host != null) { - Context context = (Context) host.findChild(contextName); - - if (context != null) { - - logger.debug("Undeploying Web Context {0}", contextName); - - // remove the docbase directory - // add by youchao - String path = context.getDocBase(); - File docBase = new File(path); - if(docBase.isDirectory()) { - docBase.delete(); - } - - // Remove and Stop the Context - host.removeChild(context); - - // if there is an associated Realm (now stopped) - // get the PermissionManager from it, and delete it - org.apache.catalina.Realm realm = context.getRealm(); - if ((realm != null) && (realm instanceof Realm)) { - Realm ctxRealm = (Realm) realm; - PermissionManager manager = ctxRealm.getPermissionManager(); - if (manager != null) { - try { - manager.delete(); - } catch (PermissionManagerException pme) { - logger.debug("Cannot delete PermissionManager of Context ''{0}''", contextName, pme); - } - } - } - - - } - } - } - - } - - /** - * Get the web contexts list associated with the WS module's endpoints. - * Theses contexts will be undeployed. - * @param module WS hosting module - * @return list of undeployable web contexts - */ - protected List getAssociatedWebContexts(final IWebservicesModule> module) { - List contexts = new ArrayList(); - - // Iterates on the deployed contexts to retrive where they were deployed - for (IWebservicesContainer container : module.getContainers()) { - for (IEJBWebserviceEndpoint endpoint : container.getEndpoints()) { - Map infos = endpoint.getDeploymentInfos(); - String name = (String) infos.get(IEJBWebserviceEndpoint.KEY_CONTEXT_NAME); - contexts.add(name); - } - } - - return contexts; - } - - /** - * Create and configure the Servlet to serve the endpoint: - *
      - *
    1. Create the servlet wrapping the endpoint
    2. - *
    3. Add it to the Context
    4. - *
    5. Set the servlet-mapping
    6. - *
    - * @param context configured context - * @param endpoint endpoint to be wrapped - */ - private void configureWebservicesServlet(final StandardContext context, - final IEJBWebserviceEndpoint endpoint) { - - // create the Servlet - StandardWrapper wrapper = wrapWebserviceEndpoint(endpoint); - - // Configure security constraints (if required) - configureSecurityConstraints(context, endpoint); - - logger.debug("Added Wrapper/Servlet: {0}", wrapper); - - // Add the Servlet - context.addChild(wrapper); - - // Add the servlet-mapping - String pattern = endpoint.getPortMetaData().getUrlPattern(); - context.addServletMapping(pattern, wrapper.getServletName()); - - } - - /** - * Configure security constraints (if required) for the given Context. - * @param context context to be configured - * @param endpoint endpoints that may be secured - */ - private void configureSecurityConstraints(final StandardContext context, - final IEJBWebserviceEndpoint endpoint) { - - // Do something only if there are some security references in the endpoint description - // otherwise exit - if (endpoint.getSecurityConstraint() == null) { - return; - } - - ISecurityConstraint security = endpoint.getSecurityConstraint(); - - // Use endpoint-address as the secured url-pattern - SecurityConstraint constraint = new SecurityConstraint(); - // user-data-constraint/transport-guarantee defines - constraint.setUserConstraint(security.getTransportGuarantee()); - // auth-constraint/(role-name)* references the roles defined on the bean - for (String role : security.getRoleNames()) { - constraint.addAuthRole(role); - } - SecurityCollection collection = new SecurityCollection(); - collection.addPattern(security.getUrlPattern()); - //collection.addPattern("/*"); - // Use defined http-methods (or use all if none defined) - if (security.getHttpMethods() != null) { - for (String method : security.getHttpMethods()) { - collection.addMethod(method); - } - } - constraint.addCollection(collection); - context.addConstraint(constraint); - - // security-roles - for (String role : security.getRoleNames()) { - context.addSecurityRole(role); - } - - - // Manage LoginConfig - LoginConfig loginConfig = new LoginConfig(); - String method = security.getAuthMethod(); - if (method == null) { - method = "BASIC"; - } else if ("FORM".equals(method) || "NONE".equals(method)) { - // This is a non sense to set FORM or NONE on endpoints - logger.warn("This is an error to set auth-method to ''{0}'', changing it to ''BASIC''", method); - method = "BASIC"; - } - loginConfig.setAuthMethod(method); - // The security realm name is not really used in Tomcat ... - loginConfig.setRealmName(security.getRealmName()); - context.setLoginConfig(loginConfig); - } - - /** - * Group the endpoints of the given module keyed on the web context they will belong to. - * @param module ws module to be explored - * @return a Map keyed by context-name - * @throws WSException if there is a problem regarding the Context (duplicate name, incompatible realm, ...) - */ - private Map> getWebContextPartitions(final IWebservicesModule> module) throws WSException { - - // Prepare the Map - Map> endpoints; - endpoints = new HashMap>(); - - // Get the default Host - Host host = getDefaultHost(); - - // Iterates on all the endpoints contained in module/container - for (IWebservicesContainer container : module.getContainers()) { - for (IEJBWebserviceEndpoint endpoint : container.getEndpoints()) { - - // Compute a context-root - String contextName = getContextRoot(endpoint); - String realmName = null; - String jaasEntry = null; - if (endpoint.getSecurityConstraint() != null) { - realmName = endpoint.getSecurityConstraint().getRealmName(); - // TODO add support for JAAS entry - //jaasEntry = endpoint.getSecurityConstraint().getJaasEntry(); - } - WebContext key = new WebContext(contextName, realmName, jaasEntry); - - // Check if the context already exists - if (host.findChild(contextName) != null) { - // The context-root already exists in the Host - throw new WSException("Context '" + contextName + "' already deployed in Host '" + host + "'"); - } - - if (endpoints.containsKey(key)) { - // Shared context (compatible security realms) - List list = endpoints.get(key); - list.add(endpoint); - } else if ((findWebContext(endpoints.keySet(), contextName)) == null){ - // No-one uses this context for now - List list = new ArrayList(); - list.add(endpoint); - endpoints.put(key, list); - } else { - // context name already used, but with an incompatible security scheme - WebContext ctx = findWebContext(endpoints.keySet(), contextName); - List endpointsGroup = endpoints.get(ctx); - StringBuilder sb = new StringBuilder(); - sb.append("Context '"); - sb.append(contextName); - sb.append("' for Bean WSEndpoint '"); - sb.append(endpoint.getContextNamingInfo().getBeanName()); - sb.append("' is incompatible in regards to security with a context used by beans ["); - for (IEJBWebserviceEndpoint ep : endpointsGroup) { - sb.append(ep.getContextNamingInfo().getBeanName()); - sb.append(" "); - } - sb.append("]. "); - sb.append("Specify the / element in the META-INF/easybeans.xml "); - sb.append("or set compatibles / (or /)"); - - throw new WSException(sb.toString()); - } - } - } - - return endpoints; - } - - /** - * Find the WebContext with the given name in the list of provided WebContexts. - * @param contexts searched list - * @param name key - * @return the name matching WebContext, null if not found. - */ - private WebContext findWebContext(final Set contexts, - final String name) { - for(WebContext webContext : contexts) { - if (name.equals(webContext.getContextName())) { - return webContext; - } - } - - return null; - } - - /** - * @return the default Host of tomcat - */ - private Host getDefaultHost() { - return tomcatService.findHost(null); - } - - /** - * Creates an empty (no servlets registered) StandardContext setup for serving webservices endpoints. - * @param contextName name of the context - * @return a configured Context - */ - protected JOnASStandardContext createWebservicesContext(final String contextName) { - - // Create the context instance - JOnASStandardContext context = new JOnASStandardContext(false, true, false); - context.setPath(contextName); - - context.setTomcatService(tomcatService); - - // I need here a valid File in the work directory of JOnAS - File docBase = new File(workDirectory, contextName); - if (!docBase.exists()) { - docBase.mkdirs(); - } // TODO remove the directory ? - context.setDocBase(docBase.getPath()); - - // This listener is here to tell tomcat that the Context is - // OK for startup, even if no ContextConfig was set. - context.addLifecycleListener(new WebservicesContextLifecycleListener()); - - // This is required to set the right Authenticator in the Pipeline - context.addLifecycleListener(new ContextConfig()); - - return context; - } - - /** - * Compute a context root for a given endpoint - * @param endpoint endpoint that will be deployed on the computed context - * @return a possible web context name - * @throws WSException if context computation failed - */ - private String getContextRoot(final IEJBWebserviceEndpoint endpoint) throws WSException { - - String name = endpoint.getPortMetaData().getContextRoot(); - if (name == null) { - // Get the naming strategy - // TODO should be configurable - IContextNamingStrategy strategy = new EjbJarContextNamingStrategy(); - - try { - name = strategy.getContextName(endpoint.getContextNamingInfo()); - } catch (ContextNamingStrategyException e) { - throw new WSException("Cannot define a web context name for endpoint " + endpoint, e); - } - } - - // Fix the name if required - if (!name.startsWith("/")) { - name = "/" + name; - } - // Store it - // TODO get ride of the PMD.contextRoot property - endpoint.getPortMetaData().setContextRoot(name); - endpoint.getDeploymentInfos().put(IEJBWebserviceEndpoint.KEY_CONTEXT_NAME, name); - - return name; - - } - - /** - * Wrap the WS endpoint in a StandardWrapper instance that represents the Servlet. - * @param endpoint endpoint to be wrapped - * @return a Servlet representation - */ - protected StandardWrapper wrapWebserviceEndpoint(final IEJBWebserviceEndpoint endpoint) { - IContextNamingInfo info = endpoint.getContextNamingInfo(); - // Name the servlet after the bean's name - StandardWrapper wrapper = new WebServiceEndpointStandardWrapper(endpoint, info.getBeanName()); - wrapper.setParentClassLoader(this.getClass().getClassLoader()); - return wrapper; - } - - /** - * A specialized LifecyleListener for WS Contexts. - */ - private static class WebservicesContextLifecycleListener implements LifecycleListener { - - public void lifecycleEvent(LifecycleEvent lifecycleEvent) { - - if (Lifecycle.START_EVENT.equals(lifecycleEvent.getType())) { - - // Tell tomcat that the context is configured - Context ctx = (Context) lifecycleEvent.getLifecycle(); - ctx.setConfigured(true); - } else if (Lifecycle.AFTER_START_EVENT.equals(lifecycleEvent.getType())) { - - // Cleanup registered application listeners (such as JSF, ...) - // This avoid some un-interesting traces - Context ctx = (Context) lifecycleEvent.getLifecycle(); - String[] listeners = ctx.findApplicationListeners(); - for (String listener : listeners) { - ctx.removeApplicationListener(listener); - } - } - } - } - - /** - * Data holder. - */ - private static class WebContext { - - /** - * Name of the context. - */ - private String contextName; - - /** - * Realm/resource name (for JACC realm). - */ - private String realmName; - - /** - * JAAS entry name (for JAAS realm). - */ - private String jaasEntry; - - /** - * Construct a WebContext. - * @param name - * @param realmName - * @param jaasEntry - */ - public WebContext(final String name, - final String realmName, - final String jaasEntry) { - this.contextName = name; - this.realmName = realmName; - this.jaasEntry = jaasEntry; - } - - public String getContextName() { - return contextName; - } - - public String getRealmName() { - return realmName; - } - - public String getJaasEntry() { - return jaasEntry; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - WebContext that = (WebContext) o; - - if (contextName != null ? !contextName.equals(that.contextName) : that.contextName != null) return false; - if (jaasEntry != null ? !jaasEntry.equals(that.jaasEntry) : that.jaasEntry != null) return false; - if (realmName != null ? !realmName.equals(that.realmName) : that.realmName != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = contextName != null ? contextName.hashCode() : 0; - result = 31 * result + (realmName != null ? realmName.hashCode() : 0); - result = 31 * result + (jaasEntry != null ? jaasEntry.hashCode() : 0); - return result; - } - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/security/SecureWebDeploymentDescBuilder.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/security/SecureWebDeploymentDescBuilder.java deleted file mode 100644 index 750b0559aa..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/security/SecureWebDeploymentDescBuilder.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws.security; - -import java.util.List; - -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.deployment.web.xml.JonasWebApp; -import org.ow2.jonas.deployment.web.xml.WebApp; -import org.ow2.jonas.deployment.web.xml.SecurityConstraint; -import org.ow2.jonas.deployment.web.xml.AuthConstraint; -import org.ow2.jonas.deployment.web.xml.UserDataConstraint; -import org.ow2.jonas.deployment.web.xml.WebResourceCollection; -import org.ow2.jonas.deployment.common.xml.SecurityRole; -import org.ow2.jonas.deployment.common.DeploymentDescException; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.WSException; - -/** - * The SecureWebDeploymentDescBuilder is responsible of building, from a list of - * endpoints defined security constraints, a web deployment descriptor strctured - * tailored for web security. - * - * @author Guillaume Sauthier - */ -public class SecureWebDeploymentDescBuilder { - - /** - * Creates the Web DD structure. - * @param security list of security constraints - * @return a security tailored deployment descriptor - * @throws WSException if the descriptor cannot be created - */ - public WebContainerDeploymentDesc createJOnASWebDescriptor(final List security) throws WSException { - try { - return new WebContainerDeploymentDesc(null, // filename: none - this.getClass().getClassLoader(), // unused in our case: no classes to load - createWebApp(security), // the structure mirroring a security only web.xml - new JonasWebApp(), // empty jonas-web.xml - null); // no metadata associated - } catch (DeploymentDescException e) { - throw new WSException("Cannot construct secured web deployment descriptor", e); - } - } - - /** - * Construct the web.xml mirroring structure. - * @param constraints list of constraints to be translated into a web.xml - * @return a WebApp XML structure - */ - private WebApp createWebApp(final List constraints) { - - // In all case, creates an empty webapp - WebApp webApp = new WebApp(); - - if (!constraints.isEmpty()) { - - // Process all the constraints - for (ISecurityConstraint constraint : constraints) { - // security-constraint - SecurityConstraint sc = new SecurityConstraint(); - webApp.addSecurityConstraint(sc); - - // security-constraint/user-data-constraint - UserDataConstraint udc = new UserDataConstraint(); - sc.setUserDataConstraint(udc); - // security-constraint/user-data-constraint/transport-guarantee - String transportGuarantee = constraint.getTransportGuarantee(); - if (transportGuarantee == null) { - transportGuarantee = "NONE"; - } - udc.setTransportGuarantee(transportGuarantee); - - // security-constraint/auth-constraint - AuthConstraint ac = new AuthConstraint(); - sc.setAuthConstraint(ac); - // security-constraint/auth-constraint/role-name - for (String role : constraint.getRoleNames()) { - ac.addRoleName(role); - } - - // security-constraint/web-resource-collection - WebResourceCollection collection = new WebResourceCollection(); - collection.setWebResourceName("default"); - sc.addWebResourceCollection(collection); - // security-constraint/web-resource-collection/url-pattern - collection.addUrlPattern(constraint.getUrlPattern()); - // security-constraint/web-resource-collection/http-method - if (constraint.getHttpMethods() != null) { - for (String method : constraint.getHttpMethods()) { - collection.addHttpMethod(method); - } - } - - // security-role - for (String role : constraint.getRoleNames()) { - SecurityRole sr = new SecurityRole(); - sr.setRoleName(role); - webApp.addSecurityRole(sr); - } - - } - } - - return webApp; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/EjbJarContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/EjbJarContextNamingStrategy.java deleted file mode 100644 index 3b958d2188..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/EjbJarContextNamingStrategy.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws.strategy; - -import java.io.File; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The EjbJarContextNamingStrategy computes a web context name based on the EjbJar filename. - * - * @author Guillaume Sauthier - */ -public class EjbJarContextNamingStrategy implements IContextNamingStrategy { - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - return getCleanedName(info.getContainerName()); - } - - /** - * Clean-up the name given in parameter. - * @param name name to be cleaned up - * @return cleaned name - */ - private String getCleanedName(final String name) { - - // Strip off everything before the last '/' or '\' - int pathSeparatorIndex = name.lastIndexOf(File.separatorChar); - String cleanedName = name.substring(pathSeparatorIndex + 1, name.length()); - - // Strip off everything after the first remaining '_' - int underscoreIndex = cleanedName.indexOf('_'); - if (underscoreIndex != -1) { - return cleanedName.substring(0, underscoreIndex); - } - - // Strip off the extension - int dotIndex = cleanedName.lastIndexOf('.'); - if (dotIndex != -1) { - return cleanedName.substring(0, dotIndex); - } - - // return as-is - return cleanedName; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/FixedContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/FixedContextNamingStrategy.java deleted file mode 100644 index 6754d87bee..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/FixedContextNamingStrategy.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws.strategy; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The FixedContextNamingStrategy simply return the web context name - * that has been assigned to this strategy. - * - * @author Guillaume Sauthier - */ -public class FixedContextNamingStrategy implements IContextNamingStrategy { - - /** - * Fixed context name. - */ - private String contextName; - - public FixedContextNamingStrategy() { - } - - public FixedContextNamingStrategy(final String contextName) { - setContextName(contextName); - } - - public void setContextName(final String contextName) { - this.contextName = contextName; - } - - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - if (contextName == null) { - throw new ContextNamingStrategyException("Missing contextName value."); - } - return contextName; - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/ServiceContextNamingStrategy.java b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/ServiceContextNamingStrategy.java deleted file mode 100644 index 904f6b9e65..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/java/org/ow2/jonas/web/tomcat7/ws/strategy/ServiceContextNamingStrategy.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.web.tomcat7.ws.strategy; - -import javax.xml.namespace.QName; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingStrategy; -import org.ow2.jonas.ws.jaxws.ejb.context.ContextNamingStrategyException; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The ServiceContextNamingStrategy computes a web context name based - * on the Service QName of the endpoint. - * - * @author Guillaume Sauthier - */ -public class ServiceContextNamingStrategy implements IContextNamingStrategy { - - /** - * Creates a context name (web server root / context root). - * - * @param info used to determine the context name. - * @return a context name - */ - public String getContextName(final IContextNamingInfo info) throws ContextNamingStrategyException { - QName name = info.getEndpoint().getIdentifier().getServiceName(); - if (name == null) { - throw new ContextNamingStrategyException("Missing serviceName value."); - } - return name.getLocalPart(); - } -} diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-context.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-context.xml deleted file mode 100644 index 2519a1dce1..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-context.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - WEB-INF/web.xml - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-server.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-server.xml deleted file mode 100644 index bc7b3b168b..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-server.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-web.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-web.xml deleted file mode 100644 index 5235cbfd31..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/conf/tomcat7-web.xml +++ /dev/null @@ -1,1233 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - org.apache.catalina.servlets.DefaultServlet - - debug - 0 - - - listings - false - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.apache.jasper.servlet.JspServlet - - fork - false - - - xpoweredBy - false - - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - default - / - - - - - jsp - *.jsp - - - - jsp - *.jspx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 - - - - - - - - - - - - abs - audio/x-mpeg - - - ai - application/postscript - - - aif - audio/x-aiff - - - aifc - audio/x-aiff - - - aiff - audio/x-aiff - - - aim - application/x-aim - - - art - image/x-jg - - - asf - video/x-ms-asf - - - asx - video/x-ms-asf - - - au - audio/basic - - - avi - video/x-msvideo - - - avx - video/x-rad-screenplay - - - bcpio - application/x-bcpio - - - bin - application/octet-stream - - - bmp - image/bmp - - - body - text/html - - - cdf - application/x-cdf - - - cer - application/x-x509-ca-cert - - - class - application/java - - - cpio - application/x-cpio - - - csh - application/x-csh - - - css - text/css - - - dib - image/bmp - - - doc - application/msword - - - dtd - application/xml-dtd - - - dv - video/x-dv - - - dvi - application/x-dvi - - - eps - application/postscript - - - etx - text/x-setext - - - exe - application/octet-stream - - - gif - image/gif - - - gtar - application/x-gtar - - - gz - application/x-gzip - - - hdf - application/x-hdf - - - hqx - application/mac-binhex40 - - - htc - text/x-component - - - htm - text/html - - - html - text/html - - - hqx - application/mac-binhex40 - - - ief - image/ief - - - jad - text/vnd.sun.j2me.app-descriptor - - - jar - application/java-archive - - - java - text/plain - - - jnlp - application/x-java-jnlp-file - - - jpe - image/jpeg - - - jpeg - image/jpeg - - - jpg - image/jpeg - - - js - text/javascript - - - jsf - text/plain - - - jspf - text/plain - - - kar - audio/x-midi - - - latex - application/x-latex - - - m3u - audio/x-mpegurl - - - mac - image/x-macpaint - - - man - application/x-troff-man - - - mathml - application/mathml+xml - - - me - application/x-troff-me - - - mid - audio/x-midi - - - midi - audio/x-midi - - - mif - application/x-mif - - - mov - video/quicktime - - - movie - video/x-sgi-movie - - - mp1 - audio/x-mpeg - - - mp2 - audio/x-mpeg - - - mp3 - audio/x-mpeg - - - mp4 - video/mp4 - - - mpa - audio/x-mpeg - - - mpe - video/mpeg - - - mpeg - video/mpeg - - - mpega - audio/x-mpeg - - - mpg - video/mpeg - - - mpv2 - video/mpeg2 - - - ms - application/x-wais-source - - - nc - application/x-netcdf - - - oda - application/oda - - - - odb - application/vnd.oasis.opendocument.database - - - - odc - application/vnd.oasis.opendocument.chart - - - - odf - application/vnd.oasis.opendocument.formula - - - - odg - application/vnd.oasis.opendocument.graphics - - - - odi - application/vnd.oasis.opendocument.image - - - - odm - application/vnd.oasis.opendocument.text-master - - - - odp - application/vnd.oasis.opendocument.presentation - - - - ods - application/vnd.oasis.opendocument.spreadsheet - - - - odt - application/vnd.oasis.opendocument.text - - - - otg - application/vnd.oasis.opendocument.graphics-template - - - - oth - application/vnd.oasis.opendocument.text-web - - - - otp - application/vnd.oasis.opendocument.presentation-template - - - - ots - application/vnd.oasis.opendocument.spreadsheet-template - - - - ott - application/vnd.oasis.opendocument.text-template - - - - ogx - application/ogg - - - ogv - video/ogg - - - oga - audio/ogg - - - ogg - audio/ogg - - - spx - audio/ogg - - - flac - audio/flac - - - anx - application/annodex - - - axa - audio/annodex - - - axv - video/annodex - - - xspf - application/xspf+xml - - - pbm - image/x-portable-bitmap - - - pct - image/pict - - - pdf - application/pdf - - - pgm - image/x-portable-graymap - - - pic - image/pict - - - pict - image/pict - - - pls - audio/x-scpls - - - png - image/png - - - pnm - image/x-portable-anymap - - - pnt - image/x-macpaint - - - ppm - image/x-portable-pixmap - - - ppt - application/vnd.ms-powerpoint - - - pps - application/vnd.ms-powerpoint - - - ps - application/postscript - - - psd - image/x-photoshop - - - qt - video/quicktime - - - qti - image/x-quicktime - - - qtif - image/x-quicktime - - - ras - image/x-cmu-raster - - - rdf - application/rdf+xml - - - rgb - image/x-rgb - - - rm - application/vnd.rn-realmedia - - - roff - application/x-troff - - - rtf - application/rtf - - - rtx - text/richtext - - - sh - application/x-sh - - - shar - application/x-shar - - - - smf - audio/x-midi - - - sit - application/x-stuffit - - - snd - audio/basic - - - src - application/x-wais-source - - - sv4cpio - application/x-sv4cpio - - - sv4crc - application/x-sv4crc - - - svg - image/svg+xml - - - svgz - image/svg+xml - - - swf - application/x-shockwave-flash - - - t - application/x-troff - - - tar - application/x-tar - - - tcl - application/x-tcl - - - tex - application/x-tex - - - texi - application/x-texinfo - - - texinfo - application/x-texinfo - - - tif - image/tiff - - - tiff - image/tiff - - - tr - application/x-troff - - - tsv - text/tab-separated-values - - - txt - text/plain - - - ulw - audio/basic - - - ustar - application/x-ustar - - - vxml - application/voicexml+xml - - - xbm - image/x-xbitmap - - - xht - application/xhtml+xml - - - xhtml - application/xhtml+xml - - - xls - application/vnd.ms-excel - - - xml - application/xml - - - xpm - image/x-xpixmap - - - xsl - application/xml - - - xslt - application/xslt+xml - - - xul - application/vnd.mozilla.xul+xml - - - xwd - image/x-xwindowdump - - - vsd - application/x-visio - - - wav - audio/x-wav - - - - wbmp - image/vnd.wap.wbmp - - - - wml - text/vnd.wap.wml - - - - wmlc - application/vnd.wap.wmlc - - - - wmls - text/vnd.wap.wmlscript - - - - wmlscriptc - application/vnd.wap.wmlscriptc - - - wmv - video/x-ms-wmv - - - wrl - x-world/x-vrml - - - wspolicy - application/wspolicy+xml - - - Z - application/x-compress - - - z - application/x-compress - - - zip - application/zip - - - - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - com.sun.faces.injectionProvider - org.ow2.jonas.jsf.mojarra20.vendor.Tomcat7InjectionProvider - - - - com.sun.faces.enableMissingResourceLibraryDetection - true - - - - - org.apache.myfaces.config.annotation.LifecycleProvider - org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-ajp-connector.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-ajp-connector.xml deleted file mode 100644 index e1d44bfecc..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-ajp-connector.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - 9009 - 9043 - 300 - 20 - true - 120000 - 1000 - -1 - on - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-https-connector.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-https-connector.xml deleted file mode 100644 index 15df41daa0..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy-example/tomcat7-https-connector.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - 9043 - 50 - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy/tomcat7-http-connector.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy/tomcat7-http-connector.xml deleted file mode 100644 index 1b71cecc52..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/jonas-resources/deploy/tomcat7-http-connector.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - 9000 - 9043 - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/DefaultInstanceManager.patch b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/DefaultInstanceManager.patch deleted file mode 100644 index 20837f90d7..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/DefaultInstanceManager.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: DefaultInstanceManager.java -=================================================================== ---- DefaultInstanceManager.java (revision 1298324) -+++ DefaultInstanceManager.java (working copy) -@@ -252,6 +252,10 @@ - InvocationTargetException, NamingException { - - while (clazz != null) { -+ -+ // Initialize injections from the analyzed class -+ injections = injectionMap.get(clazz.getName()); -+ - List annotations = null; - synchronized (annotationCache) { - annotations = annotationCache.get(clazz); - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/Response.patch b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/Response.patch deleted file mode 100644 index 8b43278232..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/Response.patch +++ /dev/null @@ -1,132 +0,0 @@ -Index: java/org/apache/catalina/connector/Response.java -=================================================================== ---- java/org/apache/catalina/connector/Response.java (revision 1298324) -+++ java/org/apache/catalina/connector/Response.java (working copy) -@@ -1,3 +1,8 @@ -+/// Response.java from Tomcat 7.0.26 with JOnAS-specific modifications. -+/// -+/// Original file: -+/// https://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_26/java/org/apache/catalina/connector/Response.java -+ - /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with -@@ -56,6 +61,9 @@ - import org.apache.tomcat.util.net.URL; - import org.apache.tomcat.util.res.StringManager; - -+import org.ow2.jonas.web.tomcat7.versioning.FilteredOutputStream; -+import org.ow2.jonas.web.tomcat7.versioning.VersionedPathBean; -+ - /** - * Wrapper object for the Coyote response. - * -@@ -142,9 +150,9 @@ - this.connector = connector; - if("AJP/1.3".equals(connector.getProtocol())) { - // default size to size of one ajp-packet -- outputBuffer = new OutputBuffer(8184); -+ outputBuffer = new FilteredOutputStream(this, 8184); - } else { -- outputBuffer = new OutputBuffer(); -+ outputBuffer = new FilteredOutputStream(this); - } - outputStream = new CoyoteOutputStream(outputBuffer); - writer = new CoyoteWriter(outputBuffer); -@@ -195,8 +203,28 @@ - request.setContext(context); - } - -+ /** -+ * Associated VersionedPathBean. -+ */ -+ protected VersionedPathBean versionedPathBean; -+ -+ /** -+ * Return the VersionedPathBean for the request. -+ */ -+ public VersionedPathBean getVersionedPathBean() { -+ return (this.versionedPathBean); -+ } - - /** -+ * Set the VersionedPathBean for the request. -+ * -+ * @param versionedPathBean The new VersionedPathBean -+ */ -+ public void setVersionedPathBean(VersionedPathBean versionedPathBean) { -+ this.versionedPathBean = versionedPathBean; -+ } -+ -+ /** - * The associated output buffer. - */ - protected OutputBuffer outputBuffer; -@@ -1043,6 +1071,15 @@ - } - - public StringBuffer generateCookieString(final Cookie cookie) { -+ final String cookiePath; -+ if (versionedPathBean != null && cookie.getPath() != null && versionedPathBean.getUserPath() != null && -+ versionedPathBean.getVersionedPath() != null && cookie.getPath().startsWith(versionedPathBean.getVersionedPath())) { -+ cookiePath = versionedPathBean.getUserPath() + cookie.getPath().substring( -+ versionedPathBean.getVersionedPath().length()); -+ } else { -+ cookiePath = cookie.getPath(); -+ } -+ - final StringBuffer sb = new StringBuffer(); - //web application code can receive a IllegalArgumentException - //from the appendCookieValue invocation -@@ -1052,7 +1089,7 @@ - public Void run(){ - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), -- cookie.getValue(), cookie.getPath(), -+ cookie.getValue(), cookiePath, - cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), - cookie.isHttpOnly()); -@@ -1062,7 +1099,7 @@ - } else { - ServerCookie.appendCookieValue - (sb, cookie.getVersion(), cookie.getName(), cookie.getValue(), -- cookie.getPath(), cookie.getDomain(), cookie.getComment(), -+ cookiePath, cookie.getDomain(), cookie.getComment(), - cookie.getMaxAge(), cookie.getSecure(), - cookie.isHttpOnly()); - } -@@ -1365,6 +1402,18 @@ - // Clear any data content that has been buffered - resetBuffer(true); - -+ -+ if (versionedPathBean != null && versionedPathBean.getUserPath() != null && -+ versionedPathBean.getVersionedPath() != null && location.startsWith(versionedPathBean.getVersionedPath())) { -+ -+ if ("/".equals(versionedPathBean.getUserPath())) { -+ location = location.substring(versionedPathBean.getVersionedPath().length()); -+ } else { -+ location = versionedPathBean.getUserPath() + location.substring( -+ versionedPathBean.getVersionedPath().length()); -+ } -+ } -+ - // Generate a temporary redirect to the specified location - try { - String absolute = toAbsolute(location); -@@ -1681,7 +1730,12 @@ - redirectURLCC.append(portS, 0, portS.length()); - } - if (!leadingSlash) { -- String relativePath = request.getDecodedRequestURI(); -+ String relativePath; -+ if (versionedPathBean != null && versionedPathBean.getOriginalDecodedUri() != null) { -+ relativePath = versionedPathBean.getOriginalDecodedUri(); -+ } else { -+ relativePath = request.getDecodedRequestURI(); -+ } - int pos = relativePath.lastIndexOf('/'); - relativePath = relativePath.substring(0, pos); - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/TagLibraryInfoImpl.patch b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/TagLibraryInfoImpl.patch deleted file mode 100644 index b76bc1f5b3..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/patches/TagLibraryInfoImpl.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- TagLibraryInfoImpl.java 2011-08-23 16:23:46.000000000 +0200 -+++ TagLibraryInfoImpl.java.modified 2011-08-23 16:25:41.000000000 +0200 -@@ -23,7 +23,9 @@ - import java.io.InputStream; - import java.io.PrintWriter; - import java.io.StringWriter; -+import java.net.MalformedURLException; - import java.net.URL; -+import java.net.URLConnection; - import java.util.Collection; - import java.util.Enumeration; - import java.util.Hashtable; -@@ -156,6 +158,19 @@ - JarResource jarResource = location.getJarResource(); - try { - if (jarResource == null) { -+if (tldName.startsWith("bundle")) { -+ URL url; -+ try { -+ url = new URL(tldName); -+ URLConnection urlConnection = url.openConnection(); -+ urlConnection.setUseCaches(false); -+ in = urlConnection.getInputStream(); -+ } catch (Exception e) { -+ err.jspError(mark, "jsp.error.tld.unable_to_read", "bundle", -+ tldName, e.toString()); -+ } -+ parseTLD(tldName, in, null); -+ } else { - // Location points directly to TLD file - try { - in = getResourceAsStream(tldName); -@@ -173,6 +188,7 @@ - pageInfo.addDependant(tldName, - ctxt.getLastModified(tldName)); - } -+ } - } else { - // Tag library is packaged in JAR file - try { diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/properties/jonas-web-tomcat7.properties b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/properties/jonas-web-tomcat7.properties deleted file mode 100644 index f43859a356..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/properties/jonas-web-tomcat7.properties +++ /dev/null @@ -1 +0,0 @@ -jonas.service.web.class org.ow2.jonas.web.tomcat7.Tomcat7Service \ No newline at end of file diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-7.0-core.bnd b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-7.0-core.bnd deleted file mode 100644 index 05f49c9da7..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/META-INF/jonas-web-container-tomcat-7.0-core.bnd +++ /dev/null @@ -1,114 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Only export an API package -Export-Package org.ow2.jonas.web.tomcat7.custom - -# Need to export the Jasper classes used by the generated JSP classes (not in bundle) --exportcontents org.apache.jasper.runtime;version=${tomcat7.version}, \ - org.apache.jasper.compiler;version=${tomcat7.version}, \ - org.apache.jasper.compiler.*;version=${tomcat7.version}, \ - org.apache.jasper.el.*;version=${tomcat7.version}, \ - org.apache.jasper.servlet;version=${tomcat7.version}, \ - org.apache.jasper;version=${tomcat7.version}, \ - org.apache.catalina.*;version=${tomcat7.version}, \ - org.apache.tomcat;version=${tomcat7.version}, \ - org.apache.el.*;version=${tomcat7.version}, \ - org.apache.juli.*;version=${tomcat7.version}, \ - org.apache;version=${tomcat7.version} -# o.a.catalina.* must be exported because users with custon Tomcat configuration -# (using custom Valve for example) are extending Tomcat's classes (ValveBase is one of them) - -# Need to add this import (properties) because Bnd do not handle multiple level inheritance. -# Ant will not be used (eclipse compiler instead) -# Servlet/JSP resources are used by Digester -# org.eclipse.* are dependencies of the JDT core -# -# sun.net.www.http needs to be imported optionally, else we get an trace like: -# JreMemoryLeakPreventionListener.lifecycleEvent : Failed to trigger creation of the -# sun.net.www.http.HttpClient class during Tomcat start to prevent possible memory leaks. -# This is expected on non-Sun JVMs. -Import-Package !org.apache.tools.ant.*, \ - !org.eclipse.jdt.core, \ - !org.eclipse.core.*, \ - !org.eclipse.jdt.core.dom, \ - !org.eclipse.jdt.internal.core.builder, \ - !org.eclipse.jdt.internal.core, \ - !org.eclipse.jdt.internal.compiler.apt.dispatch, \ - javax.transaction.xa, \ - javax.persistence.*;version="[1.0.0,2.0.0]",\ - javax.servlet;version=3.0.0,\ - javax.servlet.http;version=3.0.0,\ - org.ow2.util.archive.api, \ - org.ow2.easybeans.api.naming, \ - org.ow2.easybeans.resolver.api, \ - org.ow2.easybeans.api, \ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - sun.net.www.http;resolution:=optional,\ - * - -Private-Package org.ow2.jonas.web.tomcat7.*, \ - org.apache;-split-package:=merge-first, \ - org.apache.catalina.*;-split-package:=merge-first, \ - org.apache.jasper.*;-split-package:=merge-first, \ - org.apache.naming.*, \ - org.apache - -# For Building new InitialContext() and finding java URLContextFactory -DynamicImport-Package javax.servlet.resources, \ - javax.servlet.jsp.resources, \ - org.slf4j, \ - org.ow2.cmi.jndi.context,\ - org.ow2.jonas.deployment.api, \ - org.ow2.jonas.lib.naming.*,\ - org.ow2.jonas.jmx, \ - org.ow2.util.ee.metadata.war.api, \ - org.ow2.util.ee.metadata.common.api.struct, \ - org.ow2.jonas.naming, \ - org.ow2.jonas.workcleaner, \ - org.ow2.jonas.ws.jaxrpc, \ - org.ow2.jonas.ws.jaxws, \ - org.ow2.jonas.ws.axis, \ - org.ow2.util.ee.deploy.api.deployer,\ - org.ow2.util.ee.deploy.api.deployable,\ - org.ow2.easybeans.persistence.api,\ - org.ow2.jonas.ws.jaxws.http.servlet,\ - org.ow2.jonas.addon.deploy.api.config,\ - * -# The final '*' for DIP is used to be able to load user declared -# classes (some custom Valve in the server.xml for example). - -# Avoid adding transitive dependencies as first level -# dependency in the POM to allow bundle inclusion -Embed-Transitive true - -Embed-Dependency asm;inline=true, \ - tomcat-catalina-ha;inline=true,\ - tomcat-coyote;inline=true, \ - tomcat-util;inline=true, \ - tomcat-tribes;inline=true, \ - tomcat-juli;inline=true, \ - tomcat-api;inline=true, \ - tomcat-jasper-el;inline=true, \ - ecj;inline=true diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/metadata.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/metadata.xml deleted file mode 100644 index fe9ad46545..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/apache/catalina/startup/catalina.properties b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/apache/catalina/startup/catalina.properties deleted file mode 100644 index 5fe5ea0894..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/apache/catalina/startup/catalina.properties +++ /dev/null @@ -1,120 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageAccess unless the -# corresponding RuntimePermission ("accessClassInPackage."+package) has -# been granted. -package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageDefinition unless the -# corresponding RuntimePermission ("defineClassInPackage."+package) has -# been granted. -# -# by default, no packages are restricted for definition, and none of -# the class loaders supplied with the JDK call checkPackageDefinition. -# -package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. - -# -# -# List of comma-separated paths defining the contents of the "common" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. -# If left as blank,the JVM system loader will be used as Catalina's "common" -# loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar - -# -# List of comma-separated paths defining the contents of the "server" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. -# If left as blank, the "common" loader will be used as Catalina's "server" -# loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -server.loader= - -# -# List of comma-separated paths defining the contents of the "shared" -# classloader. Prefixes should be used to define what is the repository type. -# Path may be relative to the CATALINA_BASE path or absolute. If left as blank, -# the "common" loader will be used as Catalina's "shared" loader. -# Examples: -# "foo": Add this folder as a class repository -# "foo/*.jar": Add all the JARs of the specified folder as class -# repositories -# "foo/bar.jar": Add bar.jar as a class repository -# Please note that for single jars, e.g. bar.jar, you need the URL form -# starting with file:. -shared.loader= - -# List of JAR files that should not be scanned for configuration information -# such as web fragments, TLD files etc. It must be a comma separated list of -# JAR file names. -# The JARs listed below include: -# - Tomcat Bootstrap JARs -# - Tomcat API JARs -# - Catalina JARs -# - Jasper JARs -# - Tomcat JARs -# - Common non-Tomcat JARs -# - Sun JDK JARs -# - Apple JDK JARs -# - JOnAS JARs -tomcat.util.scan.DefaultJarScanner.jarsToSkip=\ -bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\ -annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,\ -catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\ -jasper.jar,jasper-el.jar,ecj-*.jar,\ -tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,\ -tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\ -tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\ -tomcat-jdbc.jar,\ -commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\ -commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\ -commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\ -commons-math*.jar,commons-pool*.jar,\ -jstl.jar,\ -geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\ -ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\ -jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\ -xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\ -dnsns.jar,ldapsec.jar,localedata.jar,sunjce_provider.jar,sunmscapi.jar,\ -sunpkcs11.jar,jhall.jar,tools.jar,\ -apple_provider.jar,AppleScriptEngine.jar,CoreAudio.jar,dns_sd.jar,\ -j3daudio.jar,j3dcore.jar,j3dutils.jar,jai_core.jar,jai_codec.jar,\ -mlibwrapper_jai.jar,MRJToolkit.jar,vecmath.jar,\ -junit.jar,junit-*.jar,ant-launcher.jar,\ -_jonas*.jar,jonas-*.jar - -# -# String cache configuration. -tomcat.util.buf.StringCache.byte.enabled=true -#tomcat.util.buf.StringCache.char.enabled=true -#tomcat.util.buf.StringCache.trainThreshold=500000 -#tomcat.util.buf.StringCache.cacheSize=5000 diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat7/mbeans-descriptors.xml b/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat7/mbeans-descriptors.xml deleted file mode 100644 index 51f696b910..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/core/src/main/resources/org/ow2/jonas/web/tomcat7/mbeans-descriptors.xml +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/web-container/tomcat/7.0.x/pom.xml b/jonas/modules/services/web-container/tomcat/7.0.x/pom.xml deleted file mode 100644 index 5925b7e14d..0000000000 --- a/jonas/modules/services/web-container/tomcat/7.0.x/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container-tomcat - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-tomcat-7.0 - pom - JOnAS :: Services :: Web Container :: Tomcat :: 7.0.x - Implementation for Tomcat 7.0.x - - core - ant - addons - - diff --git a/jonas/modules/services/web-container/tomcat/base/pom.xml b/jonas/modules/services/web-container/tomcat/base/pom.xml deleted file mode 100644 index cc2eae658d..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - jonas-web-container-tomcat - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - jonas-web-container-tomcat-base-ant - bundle - JOnAS :: Services :: Web Container :: Tomcat :: Base - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - jonas-web-container-base-ant - ${project.version} - - - - diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/Tomcat.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/Tomcat.java deleted file mode 100644 index ca7b32ddfd..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/Tomcat.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.web.base.Cluster; -import org.ow2.jonas.antmodular.web.base.SessionReplication; -import org.ow2.jonas.antmodular.web.base.SessionReplicationAlgorithm; -import org.ow2.jonas.antmodular.web.base.WebContainer; - - -/** - * Support Tomcat Connector Configuration. - * Prefered order : http, director, ajp, https, cluster. - * - * @author Guillaume Sauthier - */ -public abstract class Tomcat extends WebContainer { - - /** - * Info for the logger. - */ - public static final String INFO = "[Tomcat] "; - - /** - * Tomcat HTTPS Connector token. - */ - private static final String JVM_ROUTE_TOKEN = ""; - - /** - * Tomcat Context manager token - */ - public static final String CONTEXT_MANAGER_TOKEN = ""; - - /** - * Backup manager class name - */ - public static final String SESSION_REPLICATION_BACKUP_MANAGER = "org.apache.catalina.ha.session.BackupManager"; - - /** - * Delta manager class name - */ - public static final String SESSION_REPLICATION_DELTA_MANAGER = "org.apache.catalina.ha.session.DeltaManager"; - - /** - * Default Constructor. - */ - public Tomcat() { - super(); - } - - /** - * Configure a Cluster HTTP Session. - * @param cluster Cluster HTTP Session. - */ - @Deprecated - public abstract void addConfiguredCluster(final Cluster cluster); - - /** - * Configure the tomcat session replication - * @param sessionReplication {@link SessionReplication} - */ - public abstract void addConfiguredSessionReplication(final SessionReplication sessionReplication); - - /** - * Configure a jvmRoute. - * @param jvmRoute jvm route name - */ - public abstract void setJvmRoute(final String jvmRoute); - - /** - * Configure a jvmRoute. - * @param jvmRoute jvm route name - * @param tomcatConfFile Name of Tomcat configuration file. - */ - public void setJvmRoute(final String jvmRoute, final String tomcatConfFile) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(JVM_ROUTE_TOKEN); - StringBuffer value = new StringBuffer(); - value.append(""); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting the jvmRoute to : " + jvmRoute); - - addTask(propertyReplace); - } - - /** - * Configure a Cluster HTTP Session. - * @param cluster Cluster HTTP Session. - * @param tomcatConfFile Name of Tomcat configuration file. - */ - @Deprecated - public void addConfiguredCluster(final Cluster cluster, String tomcatConfFile) { - addConfiguredSessionReplication(cluster, tomcatConfFile); - } - - /** - * Configure an HTTP session replication. - * @param sessionReplication Cluster HTTP Session. - * @param tomcatConfFile Name of Tomcat configuration file. - */ - public void addConfiguredSessionReplication(final SessionReplication sessionReplication, String tomcatConfFile) { - // General Cluster configuration - SessionReplicationAlgorithm sessionReplicationAlgorithm = sessionReplication.getAlgorithm(); - if (SessionReplicationAlgorithm.BACKUP_MANAGER.equals(sessionReplicationAlgorithm)) { - setCluster(tomcatConfFile, SESSION_REPLICATION_BACKUP_MANAGER); - } else { - setCluster(tomcatConfFile, SESSION_REPLICATION_DELTA_MANAGER); - } - - // Cluster name - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(SessionReplication.DEFAULT_CLUSTER_NAME); - propertyReplace.setValue(sessionReplication.getName()); - propertyReplace.setLogInfo(INFO + "Setting Cluster name : " + sessionReplication.getName()); - addTask(propertyReplace); - - // Cluster listening port - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(SessionReplication.DEFAULT_LISTEN_PORT); - propertyReplace.setValue(sessionReplication.getListenPort()); - propertyReplace.setLogInfo(INFO + "Setting Cluster listen port : " + sessionReplication.getListenPort()); - addTask(propertyReplace); - - // Cluster Multicast Address - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(SessionReplication.DEFAULT_MCAST_ADDR); - propertyReplace.setValue(sessionReplication.getMcastAddr()); - propertyReplace.setLogInfo(INFO + "Setting Cluster multicast addr : " + sessionReplication.getMcastAddr()); - addTask(propertyReplace); - - // Cluster Multicast Port - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(SessionReplication.DEFAULT_MCAST_PORT); - propertyReplace.setValue(sessionReplication.getMcastPort()); - propertyReplace.setLogInfo(INFO + "Setting Cluster multicast port : " + sessionReplication.getMcastPort()); - addTask(propertyReplace); - } - - /** - * Enable the cluster feature. - * @param tomcatConfFile Name of Tomcat configuration file. - * @param sessionManagerClassName Name of the implementation class of the session manager - */ - private void setCluster(final String tomcatConfFile, final String sessionManagerClassName) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(""); - StringBuffer value = new StringBuffer("\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - // " " +"\n" + - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" "); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting Cluster"); - addTask(propertyReplace); - } - - /** - * Configure a Cluster HTTP Session. - * @param tomcatSessionManager {@link TomcatSessionManager} - * @param tomcatConfFile Name of Tomcat configuration file. - */ - public void addConfiguredSessionManager(final TomcatSessionManager tomcatSessionManager, final String tomcatConfFile) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(tomcatConfFile); - propertyReplace.setToken(CONTEXT_MANAGER_TOKEN); - StringBuffer value = new StringBuffer(); - String maxActiveSessions = tomcatSessionManager.getMaxActiveSessions(); - if (maxActiveSessions != null) { - value.append(""); - } else { - value.append(""); - } - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting the maxActiveSessions to : " + tomcatSessionManager.getMaxActiveSessions()); - addTask(propertyReplace); - } - - /** - * Configure a Cluster HTTP Session. - * @param tomcatSessionManager {@link TomcatSessionManager} - */ - public abstract void addConfiguredSessionManager(final TomcatSessionManager tomcatSessionManager); -} diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatAjp.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatAjp.java deleted file mode 100644 index 72e831c834..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatAjp.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -import org.ow2.jonas.antmodular.web.base.Ajp; - -/*** - * Allow to configure Tomcat AJP connector - * @author Jeremy Cazaux - */ -public class TomcatAjp extends Ajp { - - /** - * use specifies enableLookups value - */ - protected String enableLookups; - - /** - * use specifies minSpareThreads value - */ - protected String minSpareThreads; - - /** - * use specifies maxThreads value - */ - protected String maxThreads; - - /** - * use specifies connectionTimeout value - */ - protected String connectionTimeout; - - /** - * use specifies acceptCount value - */ - protected String acceptCount; - - /** - * use specifies redirectPort value - */ - protected String redirectPort; - - /** - * Default redirect port for tomcat 7 AJP connector - */ - public static String DEFAULT_REDIRECT_PORT = "9043"; - - /** - * @return the enableLookups value - */ - public String getEnableLookups() { - return this.enableLookups; - } - - /** - * @return the minSpareThreads value - */ - public String getMinSpareThreads() { - return this.minSpareThreads; - } - - /** - * @return the maxThreads value - */ - public String getMaxThreads() { - return this.maxThreads; - } - - /** - * @return the connectionTimeout value - */ - public String getConnectionTimeout() { - return this.connectionTimeout; - } - - /** - * @return the acceptCount value - */ - public String getAcceptCount() { - return this.acceptCount; - } - - /** - * @return the redirect port value - */ - public String getRedirectPort() { - return this.redirectPort; - } - - /** - * @param enableLookups The enableLookups property to set - */ - public void setEnableLookups(String enableLookups) { - this.enableLookups = enableLookups; - } - - /** - * @param minSpareThreads The minSpareThreads property to set - */ - public void setMinSpareThreads(String minSpareThreads) { - this.minSpareThreads = minSpareThreads; - } - - /** - * @param maxThreads The maxThreads property to set - */ - public void setMaxThreads(String maxThreads) { - this.maxThreads = maxThreads; - } - - /** - * @param connectionTimeout The connectionTimeout property to set - */ - public void setConnectionTimeout(String connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - /** - * @param acceptCount The acceptCount property to set - */ - public void setAcceptCount(String acceptCount) { - this.acceptCount = acceptCount; - } - - /* - * @param redirectPort The redirect port property to set - */ - public void setRedirectPort(String redirectPort) { - this.redirectPort = redirectPort; - } -} diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatConnectors.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatConnectors.java deleted file mode 100644 index ecc8fb0907..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatConnectors.java +++ /dev/null @@ -1,185 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.web.base.Ajp; -import org.ow2.jonas.antmodular.web.base.Connectors; -import org.ow2.jonas.antmodular.web.base.Director; -import org.ow2.jonas.antmodular.web.base.Http; -import org.ow2.jonas.antmodular.web.base.Https; - -/** - * Configure Tomcat connector - * @author Jeremy Cazaux - */ -public abstract class TomcatConnectors extends Connectors { - - /** - * Is HTTP Configured ? - */ - protected boolean httpConfigured = false; - - /** - * Tomcat AJP Connector token. - */ - private static final String AJP_CONNECTOR_TOKEN = "\n"); - value.append(" \n\n"); - value.append(" " + HTTPS_CONNECTOR_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(Tomcat.INFO + "Setting HTTPS Connector to : " + https.getPort()); - addTask(propertyReplace); - - // Replace redirect port value in HTTP Connector - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(" redirectPort=\"" + Https.DEFAULT_PORT + "\" "); - propertyReplace.setValue(" redirectPort=\"" + https.getPort() + "\" "); - propertyReplace.setLogInfo(Tomcat.INFO + "Fix HTTP redirect port number to : " + https.getPort()); - addTask(propertyReplace); - - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - public void addConfiguredAjp(final Ajp ajp, final String confFile) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setToken(AJP_CONNECTOR_TOKEN); - StringBuffer value = new StringBuffer(); - value.append(" \n"); - value.append(" \n\n"); - value.append(" " + AJP_CONNECTOR_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(Tomcat.INFO + "Setting AJP Connector to : " + ajp.getPort()); - addTask(propertyReplace); - - } - - /** - * Configure a Director Connector. - * @param dir Director Configuration. - */ - public void addConfiguredDirector(final Director dir, final String confFile) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(confFile); - - propertyReplace.setToken(DIRECTOR_CONNECTOR_TOKEN); - StringBuffer value = new StringBuffer(); - value.append("\n"); - value.append(" \n\n"); - value.append(" " + DIRECTOR_CONNECTOR_TOKEN); - - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(Tomcat.INFO + "Setting Director Connector to : " + dir.getPort()); - addTask(propertyReplace); - - } - - /** - * @return Returns true if HTTP is configured. - */ - public boolean isHttpConfigured() { - return httpConfigured; - } - - /** - * Configure a HTTP Connector. - * @param http HTTP Configuration. - */ - public abstract void addConfiguredHttp(final TomcatHttp http); - - /** - * Configure a HTTPS Connector. - * @param https HTTPS Configuration. - */ - public abstract void addConfiguredHttps(final TomcatHttps https); - - /** - * Configure a Director Connector. - * @param dir Director Configuration. - */ - public abstract void addConfiguredDirector(final Director dir); - - /** - * Configure an AJP Connector. - * @param tomcatAjp AJP Configuration. - */ - public abstract void addConfiguredAjp(final TomcatAjp tomcatAjp); -} diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttp.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttp.java deleted file mode 100644 index db5e406b08..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttp.java +++ /dev/null @@ -1,199 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -import org.ow2.jonas.antmodular.web.base.Http; - -/** - * Allow to configure tomcat Http connector - * @author Jeremy Cazaux - */ -public class TomcatHttp extends Http { - - /** - * use specifies enableLookups value - */ - protected String enableLookups; - - /** - * use specifies minSpareThreads value - */ - protected String minSpareThreads; - - /** - * use specifies maxThreads value - */ - protected String maxThreads; - - /** - * use specifies connectionTimeout value - */ - protected String connectionTimeout; - - /** - * use specifies acceptCount value - */ - protected String acceptCount; - - /** - * use specifies maxKeepAliveRequest - */ - protected String maxKeepAliveRequest; - - /** - * use specifies compression value - */ - protected String compression; - - /** - * use specifies redirectPort value - */ - protected String redirectPort; - - /** - * Default redirect port for tomcat 7 Http connector - */ - public static String DEFAULT_REDIRECT_PORT = "9043"; - - /** - * Default constructor - */ - public TomcatHttp() { - } - - /** - * @return the enableLookups value - */ - public String getEnableLookups() { - return this.enableLookups; - } - - /** - * @return the minSpareThreads value - */ - public String getMinSpareThreads() { - return this.minSpareThreads; - } - - /** - * @return the maxThreads value - */ - public String getMaxThreads() { - return this.maxThreads; - } - - /** - * @return the connectionTimeout value - */ - public String getConnectionTimeout() { - return this.connectionTimeout; - } - - /** - * @return the acceptCount value - */ - public String getAcceptCount() { - return this.acceptCount; - } - - /** - * @return the maxKeepAliveRequest value - */ - public String getMaxKeepAliveRequest() { - return this.maxKeepAliveRequest; - } - - /** - * @return the compression value - */ - public String getCompression() { - return this.compression; - } - - /** - * @return the redirect port value - */ - public String getRedirectPort() { - return this.redirectPort; - } - - /** - * @param enableLookups The enableLookups property to set - */ - public void setEnableLookups(String enableLookups) { - this.enableLookups = enableLookups; - } - - /** - * @param minSpareThreads The minSpareThreads property to set - */ - public void setMinSpareThreads(String minSpareThreads) { - this.minSpareThreads = minSpareThreads; - } - - /** - * @param maxThreads The maxThreads property to set - */ - public void setMaxThreads(String maxThreads) { - this.maxThreads = maxThreads; - } - - /** - * @param connectionTimeout The connectionTimeout property to set - */ - public void setConnectionTimeout(String connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - /** - * @param acceptCount The acceptCount property to set - */ - public void setAcceptCount(String acceptCount) { - this.acceptCount = acceptCount; - } - - /** - * @param maxKeepAliveRequest The maxKeepAliveRequest property to set - */ - public void setMaxKeepAliveRequest(String maxKeepAliveRequest) { - this.maxKeepAliveRequest = maxKeepAliveRequest; - } - - /** - * @param compression The compression property to set - */ - public void setCompression(String compression) { - this.compression = compression; - } - - /* - * @param redirectPort The redirect port property to set - */ - public void setRedirectPort(String redirectPort) { - this.redirectPort = redirectPort; - } -} - - diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttps.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttps.java deleted file mode 100644 index bcf91db506..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatHttps.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -import org.ow2.jonas.antmodular.web.base.Https; - -/*** - * Allow to configure Tomcat Https connector - * @author Jeremy Cazaux - */ -public class TomcatHttps extends Https { - - /** - * use specifies enableLookups value - */ - protected String enableLookups; - - /** - * use specifies minSpareThreads value - */ - protected String minSpareThreads; - - /** - * use specifies maxThreads value - */ - protected String maxThreads; - - /** - * use specifies connectionTimeout value - */ - protected String connectionTimeout; - - /** - * use specifies acceptCount value - */ - protected String acceptCount; - - /** - * use specifies maxKeepAliveRequest - */ - protected String maxKeepAliveRequest; - - /** - * use specifies compression value - */ - protected String compression; - - /** - * use specifies redirectPort value - */ - protected String redirectPort; - - /** - * Default constructor - */ - public TomcatHttps() { - } - - /** - * @return the enableLookups value - */ - public String getEnableLookups() { - return this.enableLookups; - } - - /** - * @return the minSpareThreads value - */ - public String getMinSpareThreads() { - return this.minSpareThreads; - } - - /** - * @return the maxThreads value - */ - public String getMaxThreads() { - return this.maxThreads; - } - - /** - * @return the connectionTimeout value - */ - public String getConnectionTimeout() { - return this.connectionTimeout; - } - - /** - * @return the acceptCount value - */ - public String getAcceptCount() { - return this.acceptCount; - } - - /** - * @return the maxKeepAliveRequest value - */ - public String getMaxKeepAliveRequest() { - return this.maxKeepAliveRequest; - } - - /** - * @return the compression value - */ - public String getCompression() { - return this.compression; - } - - - /** - * @return the redirect port value - */ - public String getRedirectPort() { - return this.redirectPort; - } - - /** - * @param enableLookups The enableLookups property to set - */ - public void setEnableLookups(String enableLookups) { - this.enableLookups = enableLookups; - } - - /** - * @param minSpareThreads The minSpareThreads property to set - */ - public void setMinSpareThreads(String minSpareThreads) { - this.minSpareThreads = minSpareThreads; - } - - /** - * @param maxThreads The maxThreads property to set - */ - public void setMaxThreads(String maxThreads) { - this.maxThreads = maxThreads; - } - - /** - * @param connectionTimeout The connectionTimeout property to set - */ - public void setConnectionTimeout(String connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - /** - * @param acceptCount The acceptCount property to set - */ - public void setAcceptCount(String acceptCount) { - this.acceptCount = acceptCount; - } - - /** - * @param maxKeepAliveRequest The maxKeepAliveRequest property to set - */ - public void setMaxKeepAliveRequest(String maxKeepAliveRequest) { - this.maxKeepAliveRequest = maxKeepAliveRequest; - } - - /** - * @param compression The compression property to set - */ - public void setCompression(String compression) { - this.compression = compression; - } - - /* - * @param redirectPort The redirect port property to set - */ - public void setRedirectPort(String redirectPort) { - this.redirectPort = redirectPort; - } -} diff --git a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatSessionManager.java b/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatSessionManager.java deleted file mode 100644 index c2ac0e51f2..0000000000 --- a/jonas/modules/services/web-container/tomcat/base/src/main/java/org/ow2/jonas/antmodular/jonasbase/web/tomcat/TomcatSessionManager.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.web.tomcat; - -/** - * Allow to configure tomcat's session - * @author Jeremy Cazaux - */ -public class TomcatSessionManager { - - /** - * Max number of active sessions - */ - public String maxActiveSessions; - - /** - * @return maxActiveSessions property - */ - public String getMaxActiveSessions() { - return maxActiveSessions; - } - - /** - * @param maxActiveSessions The number of max sessions allow to set - */ - public void setMaxActiveSessions(String maxActiveSessions) { - this.maxActiveSessions = maxActiveSessions; - } - - /** - * Default constructor - */ - public TomcatSessionManager() { - } -} diff --git a/jonas/modules/services/web-container/tomcat/pom.xml b/jonas/modules/services/web-container/tomcat/pom.xml deleted file mode 100644 index 52f573bfc7..0000000000 --- a/jonas/modules/services/web-container/tomcat/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - org.ow2.jonas - jonas-web-container - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-web-container-tomcat - pom - JOnAS :: Services :: Web Container :: Tomcat - - Implementation for Tomcat of the Web Container - - - - - org.ow2.jonas - jonas-web-container-base-core - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - provided - - - org.ow2.jonas.asm - asm - - - - - 6.0.x - 7.0.x - base - - - diff --git a/jonas/modules/services/webservices/axis/core/pom.xml b/jonas/modules/services/webservices/axis/core/pom.xml deleted file mode 100644 index cfa81b52a1..0000000000 --- a/jonas/modules/services/webservices/axis/core/pom.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - jonas-webservices-axis - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-axis-core - bundle - JOnAS :: Services :: Web Services :: Axis :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxrpc-core - ${project.version} - - - org.apache.axis - axis - - - commons-discovery - commons-discovery - - - org.apache.axis - axis-saaj - - - - org.ow2.jonas - jonas-ejb-container - ${project.version} - - - org.ow2.jonas - jonas-generators-wsgen - ${project.version} - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/AxisService.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/AxisService.java deleted file mode 100644 index 463e71e2e1..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/AxisService.java +++ /dev/null @@ -1,161 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis; - -import java.io.File; - -import javax.xml.namespace.QName; - -import org.apache.axis.AxisProperties; -import org.apache.axis.deployment.wsdd.WSDDConstants; -import org.apache.axis.deployment.wsdd.WSDDProvider; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.generators.genbase.generator.Config; -import org.ow2.jonas.generators.wsgen.WsGen; -import org.ow2.jonas.lib.bootstrap.LoaderManager; -import org.ow2.jonas.lib.execution.ExecutionResult; -import org.ow2.jonas.lib.execution.IExecution; -import org.ow2.jonas.lib.execution.RunnableHelper; -import org.ow2.jonas.lib.loader.ThreadContextClassLoader; -import org.ow2.jonas.ws.jaxrpc.WSException; -import org.ow2.jonas.ws.jaxrpc.base.JAXRPCService; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; -import org.ow2.util.archive.api.IArchive; -import org.ow2.util.archive.impl.ArchiveManager; -import org.ow2.util.ee.deploy.api.deployable.IDeployable; -import org.ow2.util.ee.deploy.api.deployer.DeployerException; -import org.ow2.util.ee.deploy.impl.helper.DeployableHelper; -import org.ow2.util.ee.deploy.impl.helper.UnpackDeployableHelper; -import org.ow2.util.file.FileUtils; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.url.URLUtils; - -/** - * Implements commons methods declared within the abstract class. It's used AXIS classes for specific deployment aspects. - * @author Guillaume Sauthier - * @author Xavier Delplanque - */ -public class AxisService extends JAXRPCService { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(getClass()); - - /** - * Start the AxisWSService. - * @throws WSException when start fails. - */ - @Override - public void doStart() throws WSException { - - super.doStart(); - - // Set our custom provider - QName javaURI = new QName(WSDDConstants.URI_WSDD_JAVA, WSDDJOnASEJBProvider.PROVIDER_NAME); - WSDDProvider.registerProvider(javaURI, new WSDDJOnASEJBProvider()); - - // This method do nothing, but is required here to init AxisProperties class - AxisProperties.getProperties(); - - // Fix for Bug #300844 - // Use a ClassLoader that will delegate to call-time real context ClassLoader - ClassLoader old = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(new ThreadContextClassLoader()); - AxisProperties.getNameDiscoverer(); - Thread.currentThread().setContextClassLoader(old); - - getLogger().log(BasicLevel.INFO, "Axis Service Started"); - } - - /** - * Return JServiceFactory instance - */ - @Override - public JServiceFactory createServiceFactory() { - return new JAxisServiceFactory(); - } - - /** - * Apply WSGen on the given deployable. - * @param deployable the deployable to use - * @return the modified file or the original file if WSGen has not been launched. - * @throws WSException If WSGen cannot be applied. - */ - public String applyWSGen(final IDeployable deployable) throws WSException { - // Execute WSGen in an execution block - IExecution exec = new IExecution() { - public String execute() throws Exception { - String path = URLUtils.urlToFile(deployable.getArchive().getURL()).getPath(); - WsGen wsGen = new WsGen(); - - Config config = new Config(); - config.setInputname(path); - - // Create temporary output directory - config.setOut(new File(getServerProperties().getWorkDirectory(), "wsgen")); - try { - String result = wsGen.execute(config, deployable); - if (wsGen.isInputModified()) { - if (result.endsWith(".ear")) { - // EAR case - IArchive archive = ArchiveManager.getInstance().getArchive(new File(result)); - IDeployable deployable = DeployableHelper.getDeployable(archive); - String archiveName = new File(result).getName(); - File folder = new File(path).getParentFile(); - deployable = UnpackDeployableHelper.unpack(deployable, folder, archiveName, false); - return URLUtils.urlToFile(deployable.getArchive().getURL()).getPath(); - } else { - // EJB-JAR/WAR case - FileUtils.copyFile(result, path); - } - } - return path; - } catch (Exception e) { - throw new DeployerException("Cannot execute WSGen on archive '" + path + "'", e); - } finally { - FileUtils.delete(config.getOut()); - } - } - }; - - // Execute - ExecutionResult result = null; - try { - result = RunnableHelper.execute(LoaderManager.getInstance().getExternalLoader(), exec); - } catch (Exception e) { - e.printStackTrace(); - } - - // Throw a WSException if needed - if (result.hasException()) { - throw new WSException(result.getException().getMessage(), result.getException()); - } - - return result.getResult(); - } -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServiceFactory.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServiceFactory.java deleted file mode 100644 index 7d863c2f73..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServiceFactory.java +++ /dev/null @@ -1,576 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis; - -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; -import java.lang.reflect.Constructor; -import java.lang.reflect.Proxy; -import java.net.URL; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.StringTokenizer; - -import javax.naming.BinaryRefAddr; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.Name; -import javax.naming.NamingException; -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.namespace.QName; - -import org.apache.axis.EngineConfiguration; -import org.apache.axis.client.AxisClient; -import org.apache.axis.configuration.XMLStringProvider; -import org.apache.axis.deployment.wsdd.WSDDConstants; -import org.apache.axis.deployment.wsdd.WSDDProvider; -import org.apache.axis.utils.XMLUtils; -import org.apache.axis.wsdl.toJava.Utils; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.ws.MappingFile; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.PortComponentRefDesc; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.XMLSerializer; -import org.ow2.jonas.ws.jaxrpc.WSException; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -/** - * Axis specific JServiceFactory. Create an Axis Service Reference. Used to - * recreate Axis Service bound in JNDI (ObjectFactory) - * @author Guillaume Sauthier - * @author Xavier Delplanque - */ -public class JAxisServiceFactory implements JServiceFactory { - - - /** logger */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** i18n instance */ - private static I18n i18n = I18n.getInstance(JAxisServiceFactory.class); - - /** The jonas-init-param name for client configuration file */ - private static final String AXIS_CLIENT_CONFIG_PARAM = "axis.clientConfigFile"; - - /** default client configuration file to be filled */ - private static final String CLIENT_CONFIG_WSDD = "org/ow2/jonas/ws/axis/client-config.wsdd"; - - /** Service Implementation in JOnAS */ - private static final String JONAS_SERVICE_CLASSNAME = "org.ow2.jonas.ws.axis.JService"; - - // ====================================================================== - - /** - * Ref name for client-config wsdd - */ - public static final String REF_CLIENT_CONFIG = "client.config.wsdd"; - - /** - * Ref name for the service WSDL URL - */ - public static final String REF_SERVICE_WSDL = "service.wsdl.url"; - - /** - * Ref name for the service QName - */ - public static final String REF_SERVICE_QNAME = "service.qname"; - - /** - * Ref name for a Map linking service-endpoint-interface (from port-component) to wsdl:port - */ - public static final String REF_SERVICE_PORT2WSDL = "port.2.wsdl.map"; - - /** - * Ref name for the service call properties - */ - public static final String REF_SERVICE_CALL_PROPS = "service.call.properties"; - - /** - * Ref name for the service call properties - */ - public static final String REF_SERVICE_STUB_PROPS = "service.stub.properties"; - - /** - * Ref name for the service port list - */ - public static final String REF_SERVICE_WSDL_PORT_LIST = "service.port.list"; - - /** - * setEndpointAddress method signature - */ - private static final Class[] SETENDPOINTADDRESS_SIG = new Class[] {java.lang.String.class, java.lang.String.class }; - - // ====================================================================== - - /** - * Construct a new JAxisServiceFactory. - */ - public JAxisServiceFactory() { - QName javaURI = new QName(WSDDConstants.URI_WSDD_JAVA, WSDDNoopProvider.PROVIDER_NAME); - WSDDProvider.registerProvider(javaURI, new WSDDNoopProvider()); - } - - /** - * Create a Reference on a Service from an Axis Service object. - * @param sr the service-ref instance where informations are extracted - * @param cl the classloader where config files can be loaded - * @return a Reference on a Service from an Axis Service object. - * @throws WSException if wsdd cannot be load or merged - */ - public Reference getServiceReference(final IServiceRefDesc sr, final ClassLoader cl) throws WSException { - - // TODO remove this ugly cast - String classname = createServiceClassname((ServiceRefDesc) sr); - - logger.log(BasicLevel.DEBUG, "Service classname: '" + classname + "'"); - - // Create a reference on the Service class (generated or not) - Reference ref = new Reference(classname, getClass().getName(), null); - - Document base = loadAxisDeployment(CLIENT_CONFIG_WSDD, cl); - - // get the WSDD configuration - String clientConfig = sr.getParam(AXIS_CLIENT_CONFIG_PARAM); - - // If ServiceRef has a specified ConfigFile - if (clientConfig != null) { - // load wsdd - Document doc = loadAxisDeployment(clientConfig, cl); - - // merge - mergeAxisDeployment(base, doc); - } - - // 1. client.wsdd - String str = null; - try { - str = serializeDOM(base); - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Client Descriptor file : \n" + str); - } - } catch (IOException ioe) { - throw new WSException("Cannot serialize Document", ioe); - } - ref.add(new StringRefAddr(REF_CLIENT_CONFIG, str)); - - //2. manage port-component-link - for (Iterator i = sr.getPortComponentRefs().iterator(); i.hasNext();) { - PortComponentRefDesc pcr = (PortComponentRefDesc) i.next(); - PortComponentDesc referencedPortComponent = pcr.getPortComponentDesc(); - - // port has a link on a local port - if (referencedPortComponent != null) { - - logger.log(BasicLevel.DEBUG, "Find a port-component-link in port-component-ref" + pcr.getSEI()); - // Get the Service WSDL URL !!! - URL url = referencedPortComponent.getEndpointURL(); - if (url == null) { - // Component outside JOnAS server - // lookup endpoint URL value - try { - Context ic = new InitialContext(); - url = (URL) ic.lookup(referencedPortComponent.getName()); - } catch (NamingException ne) { - throw new WSException("Cannot find updated endpoint for port-component '" - + referencedPortComponent.getName() + "'", ne); - } - } - - logger.log(BasicLevel.DEBUG, "Uptodate URL : '" + url + "?JWSDL' "); - ref.add(new StringRefAddr(REF_SERVICE_WSDL, url.toExternalForm() + "?JWSDL")); - } - } - - // 3. service wsdl URL - if (sr.getAlternateWsdlURL() != null) { - logger.log(BasicLevel.DEBUG, "Using alternate WSDL URL : '" + sr.getAlternateWsdlURL() + "'"); - ref.add(new StringRefAddr(REF_SERVICE_WSDL, sr.getAlternateWsdlURL().toString())); - } else if (sr.getLocalWSDLURL() != null) { - logger.log(BasicLevel.DEBUG, "Using WSDL URL : '" + sr.getLocalWSDLURL() + "'"); - ref.add(new StringRefAddr(REF_SERVICE_WSDL, sr.getLocalWSDLURL().toExternalForm())); - } - - // 4. Service QName - if (sr.getServiceQName() != null) { - ref.add(new BinaryRefAddr(REF_SERVICE_QNAME, JNDIUtils.getBytesFromObject(sr.getServiceQName()))); - } - - // 5. classname -> wsdl:port map - List ports = sr.getPortComponentRefs(); - if (!ports.isEmpty()) { - Map map = new Hashtable(); - for (Iterator i = ports.iterator(); i.hasNext();) { - PortComponentRefDesc pcrd = (PortComponentRefDesc) i.next(); - QName wsdlPort = pcrd.getWsdlPort(); - if (wsdlPort != null) { - map.put(pcrd.getSEI().getName(), wsdlPort); - } - } - if (!map.isEmpty()) { - ref.add(new BinaryRefAddr(REF_SERVICE_PORT2WSDL, JNDIUtils.getBytesFromObject(map))); - } - } - - // 6. store call & stubs properties - String portNames = null; - for (Iterator i = sr.getPortComponentRefs().iterator(); i.hasNext();) { - PortComponentRefDesc pcr = (PortComponentRefDesc) i.next(); - Properties cProps = pcr.getCallProperties(); - Properties sProps = pcr.getStubProperties(); - - if (pcr.getWsdlPort() != null) { - // use call & stub property only if there is a wsdl:port for applying to - // TODO must be something to add into documentation for this - String name = pcr.getWsdlPort().getLocalPart(); - if (!cProps.isEmpty()) { - ref.add(new BinaryRefAddr(REF_SERVICE_CALL_PROPS + "_" + name, JNDIUtils - .getBytesFromObject(cProps))); - } - if (!sProps.isEmpty()) { - ref.add(new BinaryRefAddr(REF_SERVICE_STUB_PROPS + "_" + name, JNDIUtils - .getBytesFromObject(sProps))); - } - if (!sProps.isEmpty() || !cProps.isEmpty()) { - if (portNames != null) { - // only the first addition does not need a comma - portNames += "," + name; - } else { - portNames = name; - } - } - } - } - if (portNames != null) { - ref.add(new StringRefAddr(REF_SERVICE_WSDL_PORT_LIST, portNames)); - } - - return ref; - } - - /** - * @param base the Document to serialize - * @return Returns a String representation of the given XML Document - * @throws IOException when Serializer cannot proceed - */ - private String serializeDOM(final Document base) throws IOException { - StringWriter sw = new StringWriter(); - XMLSerializer ser = new XMLSerializer(base); - ser.serialize(sw); - return sw.getBuffer().toString(); - } - - /** - * @param base father Document - * @param doc Document that will be incorpored inside base Document - */ - private void mergeAxisDeployment(final Document base, final Document doc) { - Element importedDeploymentElement = (Element) base.importNode(doc.getDocumentElement(), true); - NodeList list = importedDeploymentElement.getChildNodes(); - // append each Element childnodes - for (int i = 0; i < list.getLength(); i++) { - if (list.item(i) instanceof Element) { - base.getDocumentElement().appendChild(list.item(i)); - } - } - } - - /** - * Create the Axis Service Implementation class name from the QName (if - * generated interface found). - * TODO Use jaxrpc mapping information if available ! - * @param sr the service-ref storing service informations - * @return the fully qualified Service implementation classname. - */ - private String createServiceClassname(final ServiceRefDesc sr) { - - String intfName = sr.getServiceInterface().getName(); - - if (intfName.equals("javax.xml.rpc.Service")) { - // no generated class - return JONAS_SERVICE_CLASSNAME; - } else { - // generated class - QName qn = sr.getServiceQName(); - MappingFile mf = sr.getMappingFile(); - - String p = (String) mf.getMappings().get(qn.getNamespaceURI()); - - String classname = ""; - if (p != null) { - classname = p + "." + Utils.xmlNameToJavaClass(qn.getLocalPart()) + "Locator"; - } else { - classname = Utils.xmlNameToJavaClass(qn.getLocalPart()) + "Locator"; - } - - return classname; - } - - } - - /** - * Load the Axis Deployment Descriptor from the ClassLoader. - * @param filename the resource name to load - * @param cl The ClassLoader used to load the WSDD - * @return the Document Axis Deployment Descriptor from the ClassLoader. - * @throws WSException if resource could not be found or if XML - * Document cannot be created - */ - private Document loadAxisDeployment(final String filename, final ClassLoader cl) throws WSException { - - InputStream is = cl.getResourceAsStream(filename); - - //logger.log(BasicLevel.DEBUG, "classloader : " + cl); - - if (is == null) { - // exception ! - String err = i18n.getMessage("JAxisServiceFactory.loadAxisDeployment.configNotFound", filename); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err); - } - - Document doc = null; - try { - doc = XMLUtils.newDocument(is); - } catch (Exception e) { - String err = i18n.getMessage("JAxisServiceFactory.loadAxisDeployment.docCreation", filename); - logger.log(BasicLevel.DEBUG, err); - - throw new WSException(err, e); - } - - return doc; - } - - /** - * Create a new instance of Axis Service (or sub classes) from a Reference - * object. - * @param refObject the Reference to create an instance from - * @param name Object Name - * @param nameCtx Context - * @param env the environnment - * @return A Service instance configured - * @throws Exception when instanciation fail (check if this is a correct - * behavior !!!) - */ - public Object getObjectInstance(final Object refObject, final Name name, final Context nameCtx, final Hashtable env) throws Exception { - - JService instance = null; - Object proxy = null; - - if (refObject instanceof Reference) { - Reference ref = (Reference) refObject; - - // get ClassLoader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - logger.log(BasicLevel.DEBUG, "Context ClassLoader : " + cl); - - // get Class - Class serviceClass = cl.loadClass(ref.getClassName()); - - // new Service - BinaryRefAddr bRefQname = (BinaryRefAddr) ref.get(REF_SERVICE_QNAME); - - QName serviceQname = null; - if (bRefQname != null) { - serviceQname = (QName) JNDIUtils.getObjectFromBytes((byte[]) bRefQname.getContent()); - } - - RefAddr refServiceWSDL = ref.get(REF_SERVICE_WSDL); - - String serviceWsdl = null; - if (refServiceWSDL != null) { - serviceWsdl = (String) refServiceWSDL.getContent(); - } - - // Prefill as much as we can - if (JONAS_SERVICE_CLASSNAME.equals(serviceClass.getName())) { - - // default service class - logger.log(BasicLevel.DEBUG, "default service class"); - - if ((serviceQname == null) && (serviceWsdl == null)) { - logger.log(BasicLevel.DEBUG, "Create a new Service instance without params"); - // no param instance - instance = new JService(); - - } else if ((serviceQname != null) && (serviceWsdl == null)) { - logger.log(BasicLevel.DEBUG, "Create a new Service instance with only a QName " + serviceQname); - // serviceQname only - instance = new JService(serviceQname); - - } else if ((serviceQname != null) && (serviceWsdl != null)) { - logger.log(BasicLevel.DEBUG, "Create a new Service instance with QName " + serviceQname - + "and WSDL " + serviceWsdl); - // serviceQname + wsdl - instance = new JService(serviceWsdl, serviceQname); - - } else { - logger.log(BasicLevel.DEBUG, "Create a new Service instance with WSDL " + serviceWsdl); - logger.log(BasicLevel.DEBUG, "Should not occurs !!!"); - // wsdl - // serviceWsdl, updatedURLs, serviceQname); - instance = new JService(); - } - - } else { - logger.log(BasicLevel.DEBUG, "Create a new Generated Service instance"); - logger.log(BasicLevel.DEBUG, "serviceWSDL:" + serviceWsdl + " serviceQName:" + serviceQname); - - // generated class - Constructor ctr = serviceClass.getConstructor(new Class[] {String.class, QName.class}); - instance = (JService) ctr.newInstance(new Object[] {serviceWsdl, serviceQname}); - - // we have to update ports endpoints - // we should have Service WSDL - // otherwise, no Generated WSDL ! - if (serviceWsdl != null) { - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - Definition def = reader.readWSDL(serviceWsdl); - - Service service = def.getService(serviceQname); - Map ports = service.getPorts(); - java.lang.reflect.Method m = serviceClass.getMethod("setEndpointAddress", SETENDPOINTADDRESS_SIG); - for (Iterator i = ports.keySet().iterator(); i.hasNext();) { - String portName = (String) i.next(); - Port port = service.getPort(portName); - String endpoint = getSOAPLocation(port); - m.invoke(instance, new Object[] {port.getName(), endpoint }); - } - } - } - - // get port2wsdl map - BinaryRefAddr bRefp2w = (BinaryRefAddr) ref.get(REF_SERVICE_PORT2WSDL); - - if (bRefp2w != null) { - Map map = (Map) JNDIUtils.getObjectFromBytes((byte[]) bRefp2w.getContent()); - instance.assignSEIClassnameToWSDLPort(map); - } - - // get WSDL_PORT_NAMES - RefAddr portsRef = ref.get(REF_SERVICE_WSDL_PORT_LIST); - String listPorts = null; - if (portsRef != null) { - listPorts = (String) portsRef.getContent(); - - if (listPorts != null) { - // get call properties - StringTokenizer strPort = new StringTokenizer(listPorts, ","); - while (strPort.hasMoreTokens()) { - String port = strPort.nextToken(); - - // call properties - BinaryRefAddr bRefcp = (BinaryRefAddr) ref.get(REF_SERVICE_CALL_PROPS + "_" + port); - - if (bRefcp != null) { - Properties callProperties = (Properties) JNDIUtils.getObjectFromBytes((byte[]) bRefcp.getContent()); - instance.assignCallProperties(port, callProperties); - } - - // stub properties - BinaryRefAddr bRefsp = (BinaryRefAddr) ref.get(REF_SERVICE_STUB_PROPS + "_" + port); - - if (bRefsp != null) { - Properties stubProperties = (Properties) JNDIUtils.getObjectFromBytes((byte[]) bRefsp.getContent()); - instance.assignStubProperties(port, stubProperties); - } - } - } - } - EngineConfiguration ec = getConfiguration(ref); - - // configure the instance - instance.setEngine(new AxisClient(ec)); - - JServiceProxy handler = new JServiceProxy(instance); - Class[] serviceInterfaces = serviceClass.getInterfaces(); - Class[] interfaces = new Class[serviceInterfaces.length + 1]; - for (int i = 0; i < serviceInterfaces.length; i++) { - interfaces[i] = serviceInterfaces[i]; - } - interfaces[serviceInterfaces.length] = javax.xml.rpc.Service.class; - proxy = Proxy.newProxyInstance(cl, interfaces, handler); - - } - - return proxy; - } - - /** - * @param port analyzed port - * @return Returns the endpoint URL of the given Port - */ - private String getSOAPLocation(final Port port) { - String endpoint = null; - List extensions = port.getExtensibilityElements(); - for (Iterator i = extensions.iterator(); i.hasNext();) { - ExtensibilityElement ext = (ExtensibilityElement) i.next(); - if (ext instanceof SOAPAddress) { - SOAPAddress addr = (SOAPAddress) ext; - endpoint = addr.getLocationURI(); - } - } - return endpoint; - } - - /** - * Return the EngineConfiguration object found in the Reference - * @param ref The reference to an Axis Service instance - * @return the EngineConfiguration object found in the Reference - * @throws Exception when content of reference is not a valid WSDD - */ - private EngineConfiguration getConfiguration(final Reference ref) throws Exception { - // create a Configuration Object - String conf = (String) ref.get(REF_CLIENT_CONFIG).getContent(); - logger.log(BasicLevel.DEBUG, "loaded configuration : " + conf); - return new XMLStringProvider(conf); - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServlet.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServlet.java deleted file mode 100644 index a2afba07d1..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JAxisServlet.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Iterator; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; - -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.WSDeploymentDescException; - -import org.apache.axis.AxisEngine; -import org.apache.axis.AxisFault; -import org.apache.axis.ConfigurationException; -import org.apache.axis.description.OperationDesc; -import org.apache.axis.description.ServiceDesc; -import org.apache.axis.server.AxisServer; -import org.apache.axis.transport.http.AxisServlet; - - -/** - * JOnAS AxisServlet version. - * When displaying the port list, This class set the right URL. - * @author Guillaume Sauthier - */ -public class JAxisServlet extends AxisServlet { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 8738737484808995721L; - - /** - * This method lists the available services; it is called when there is - * nothing to execute on a GET - * @param response HTTP response - * @param writer writer - * @param request HTTP request - * @throws ConfigurationException cannot find axis WSDDConfiguration - * @throws AxisFault cannot find endpoint URL - */ - protected void reportAvailableServices(HttpServletResponse response, - PrintWriter writer, - HttpServletRequest request) throws - ConfigurationException, AxisFault { - AxisEngine engine = getEngine(); - - response.setContentType("text/html; charset=utf-8"); - writer.println("

    And now... Some Services

    "); - - Iterator i; - try { - i = engine.getConfig().getDeployedServices(); - } catch (ConfigurationException configException) { - //turn any internal configuration exceptions back into axis faults - //if that is what they are - if (configException.getContainedException() instanceof AxisFault) { - throw (AxisFault) configException.getContainedException(); - } else { - throw configException; - } - } - - // Before calling super method, add the WSDL in ServletContext - InitialContext iCtx; - AxisServer axisServer = getEngine(); - org.ow2.jonas.deployment.ws.ServiceDesc serviceDesc = null; - try { - iCtx = new InitialContext(); - serviceDesc = (org.ow2.jonas.deployment.ws.ServiceDesc) iCtx.lookup("java:comp/jonas/" + axisServer.getName() + "/dd"); - } catch (NamingException e) { - log.debug("Cannot find ServiceDesc in context 'java:comp/jonas/" + axisServer.getName() + "/dd'", e); - throw new AxisFault("Servlet name not found : " + axisServer.getName(), e); - } - - writer.println("
      "); - while (i.hasNext()) { - ServiceDesc sd = (ServiceDesc) i.next(); - StringBuffer sb = new StringBuffer(); - sb.append("
    • "); - String name = sd.getName(); - sb.append(name); - sb.append(" (wsdl)
    • "); - writer.println(sb.toString()); - ArrayList operations = sd.getOperations(); - if (!operations.isEmpty()) { - writer.println("
        "); - for (Iterator it = operations.iterator(); it.hasNext();) { - OperationDesc desc = (OperationDesc) it.next(); - writer.println("
      • " + desc.getName()); - } - writer.println("
      "); - } - } - writer.println("
    "); - } - - /** - * @param serviceDesc JOnAS ServiceDesc - * @param axisServiceName the axis service name is linked to the J2EE port-component name - * @return Returns the wsdl:port name - */ - private QName getWsdlPortName(org.ow2.jonas.deployment.ws.ServiceDesc serviceDesc, String axisServiceName) { - QName wsdlPortName = null; - for (Iterator p = serviceDesc.getPortComponents().iterator(); p.hasNext() || wsdlPortName == null;) { - PortComponentDesc pcd = (PortComponentDesc) p.next(); - if (axisServiceName.equals(pcd.getServiceName())) { - wsdlPortName = pcd.getQName(); - } - } - return wsdlPortName; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JCall.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JCall.java deleted file mode 100644 index 3e35826ea7..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JCall.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -package org.ow2.jonas.ws.axis; - -import java.util.Enumeration; -import java.util.Properties; - -import javax.xml.namespace.QName; -import javax.xml.rpc.Stub; - -import org.apache.axis.client.Call; - -/** - * JCall is the JOnAS J2EE layer on top of axis Call implementation. - * It is used to assign Call properties. - * @author Jerome Camilleri - */ -public class JCall extends Call { - - /** - * @see org.apache.axis.client.Call#Call(Service) - */ - public JCall(JService service) { - super(service); - } - - /** - * Sets the port name of this Call object. This call will not set - * any additional fields, nor will it do any checking to verify that - * this port name is actually defined in the WSDL - for now anyway. - * - * @param portName Fully qualified name of the port - */ - public void setPortName(QName portName) { - super.setPortName(portName); - JService service = (JService) this.getService(); - Properties propCall = service.getCallProperties(portName.getLocalPart()); - if (propCall != null) { - for (Enumeration e = propCall.propertyNames(); e.hasMoreElements();) { - String name = (String) e.nextElement(); - Object value = propCall.getProperty(name); - if (Call.SESSION_MAINTAIN_PROPERTY.equals(name)) { - value = Boolean.valueOf((String) value); - } - this.setProperty(name, value); - - } - } - Properties propStub = service.getStubProperties(portName.getLocalPart()); - if (propStub != null) { - for (Enumeration e = propStub.propertyNames(); e.hasMoreElements();) { - String name = (String) e.nextElement(); - if (!Stub.ENDPOINT_ADDRESS_PROPERTY.equals(name)) { - Object value = propStub.getProperty(name); - if (Call.SESSION_MAINTAIN_PROPERTY.equals(name)) { - value = Boolean.valueOf((String) value); - } - this.setProperty(name, value); - } - } - - } - } -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JOnASEJBProvider.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JOnASEJBProvider.java deleted file mode 100644 index c315ef18c2..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JOnASEJBProvider.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.lang.reflect.Method; - -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.ejb21.JServiceEndpoint; -import org.ow2.jonas.lib.ejb21.JServiceEndpointHome; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.security.ws.SecurityContextHelper; - -import org.apache.axis.AxisFault; -import org.apache.axis.Handler; -import org.apache.axis.MessageContext; -import org.apache.axis.i18n.Messages; -import org.apache.axis.providers.java.RPCProvider; - - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Expose the service-endpoint interface of the Ejb. - * - * @author Guillaume Sauthier - */ -public class JOnASEJBProvider extends RPCProvider { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -3754705462547648319L; - - /** - * Logger - */ - private static Logger logger = null; - - /** - * parameter service-endpoint class name - */ - public static final String OPTION_SEINTERFACENAME = "serviceEndpointInterfaceName"; - - /** - * parameter service-endpoint JNDI name - */ - public static final String OPTION_SEJNDINAME = "serviceEndpointJndiName"; - - /** - * cached initial context - */ - private static InitialContext cachedContext; - - /** - * Create a new JOnASEJBProvider - */ - public JOnASEJBProvider() { - super(); - logger = Log.getLogger("org.ow2.jonas.lib.ejb21.endpoint"); - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Override the default implementation - * Return a object which implements the service. - * @param msgContext the message context - * @param seiName The Service Endpoint Interface classname - * @return an object that implements the service - * @throws Exception when trying to create a Serviceobject without serviceendpoint name aprameter - */ - protected Object makeNewServiceObject(MessageContext msgContext, String seiName) throws Exception { - logger.log(BasicLevel.DEBUG, seiName); - if (seiName == null) { - logger.log(BasicLevel.ERROR, "Service Endpoint Interface classname is null"); - // cannot find service-endpoint - throw new AxisFault(Messages.getMessage("noOption00", OPTION_SEINTERFACENAME, msgContext.getService() - .getName())); - } - - // Get ServiceEndpointHome in JNDI - String jndiName = getStrOption(OPTION_SEJNDINAME, msgContext.getService()); - if (jndiName == null) { - logger.log(BasicLevel.ERROR, "Service Endpoint JNDI name is null"); - throw new AxisFault("Missing parameter in service : " + OPTION_SEJNDINAME); - } - JServiceEndpointHome sehome = null; - try { - InitialContext ic = getCachedContext(); - sehome = (JServiceEndpointHome) ic.lookup(jndiName); - } catch (NamingException ne) { - logger.log(BasicLevel.ERROR, "Cannot lookup ServiceEndpointHome"); - throw new AxisFault("Cannot lookup ServiceEndpointHome: " + jndiName); - } - // Check that the object implements the SEI - // TODO - - // Create a new ServiceEndpoint object - JServiceEndpoint se = sehome.create(); - - // Set the MessageContext that can be retrived by the bean - se.setMessageContext(msgContext); - return se; - } - - /** - * Override the default implementation : create a SecurityContext from username and password - * @throws Exception if method invokation fail or produce an Exception - */ - protected Object invokeMethod(MessageContext msgContext, Method method, Object obj, Object[] argValues) - throws Exception { - logger.log(BasicLevel.DEBUG, ""); - String username = msgContext.getUsername(); - if (username != null) { - // Do not forget to initialize the security context - SecurityContextHelper.getInstance().login(username, msgContext.getPassword()); - } - return super.invokeMethod(msgContext, method, obj, argValues); - } - - /** - * Override the default implementation - * @return Return the option in the configuration that contains the service - * class name. In the EJB case, it is the JNDI name of the bean. - */ - protected String getServiceClassNameOptionName() { - logger.log(BasicLevel.DEBUG, ""); - return OPTION_SEINTERFACENAME; - } - - /** - * Get a String option by looking first in the service options, and then at - * the Handler's options. This allows defaults to be specified at the - * provider level, and then overriden for particular services. - * - * @param optionName the option to retrieve - * @param service Option holder - * - * @return String the value of the option or null if not found in either - * scope - */ - private String getStrOption(String optionName, Handler service) { - String value = null; - if (service != null) { - value = (String) service.getOption(optionName); - } - if (value == null) { - value = (String) getOption(optionName); - } - return value; - } - - /** - * @return Returns the cached InitialContext (or created a new one) - * @throws javax.naming.NamingException when InitialContext creation fails - */ - private InitialContext getCachedContext() throws javax.naming.NamingException { - if (cachedContext == null) { - cachedContext = new InitialContext(); - } - return cachedContext; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JService.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JService.java deleted file mode 100644 index 9233d8925f..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JService.java +++ /dev/null @@ -1,194 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.io.InputStream; -import java.net.URL; -import java.rmi.Remote; -import java.util.Hashtable; -import java.util.Map; -import java.util.Properties; - -import javax.xml.namespace.QName; -import javax.xml.rpc.Call; -import javax.xml.rpc.ServiceException; - -import org.apache.axis.EngineConfiguration; -import org.apache.axis.client.Service; -import org.apache.axis.wsdl.gen.Parser; - -/** - * JService is the JOnAS J2EE layer on top of axis Service implementation. It is - * currently a no-op class. - * @author Guillaume Sauthier - */ -public class JService extends Service { - - /** - * Serial version UID. - */ - private static final long serialVersionUID = -6590290303291040871L; - - /** - * Internal Map that store service-endpoint-interface names to wsdl:port - * QName - */ - private Map classname2wsdlPort = null; - - /** - * Hastable to store call instances properties - */ - private Hashtable mapCallProperties = new Hashtable(); - - /** - * Hastable to store stub instances properties - */ - private Hashtable mapStubProperties = new Hashtable(); - - /** - * @see org.apache.axis.client.Service#Service() - */ - public JService() { - super(); - } - - /** - * @see org.apache.axis.client.Service#Service(javax.xml.rpc.QName) - */ - public JService(QName serviceName) { - super(serviceName); - } - - /** - * @see org.apache.axis.client.Service#Service(org.apache.axis.EngineConfiguration) - */ - public JService(EngineConfiguration config) { - super(config); - } - - /** - * @see org.apache.axis.client.Service#Service(java.net.URL, - * javax.xml.rpc.QName) - */ - public JService(URL wsdlDoc, QName serviceName) throws ServiceException { - super(wsdlDoc, serviceName); - } - - /** - * @see org.apache.axis.client.Service#Service(org.apache.axis.wsdl.gen.Parser, - * javax.xml.rpc.QName) - */ - public JService(Parser parser, QName serviceName) throws ServiceException { - super(parser, serviceName); - } - - /** - * @see org.apache.axis.client.Service#Service(java.lang.String, - * javax.xml.rpc.QName) - */ - public JService(String wsdlLocation, QName serviceName) throws ServiceException { - super(wsdlLocation, serviceName); - } - - /** - * @see org.apache.axis.client.Service#Service(java.io.InputStream, - * javax.xml.rpc.QName) - */ - public JService(InputStream wsdlInputStream, QName serviceName) throws ServiceException { - super(wsdlInputStream, serviceName); - } - - /** - * @see javax.xml.rpc.Service#getPort(java.lang.Class) - */ - public Remote getPort(Class proxyInterface) throws ServiceException { - if (this.classname2wsdlPort != null) { - QName portname = this.classname2wsdlPort.get(proxyInterface.getName()); - if (portname != null) { - return getPort(portname, proxyInterface); - } else { - return super.getPort(proxyInterface); - } - } - return super.getPort(proxyInterface); - } - - /** - * @see javax.xml.rpc.Service#createCall() - */ - public Call createCall() throws ServiceException { - - return new JCall(this); - } - - /** - * Assign the classname 2 port Map. - * @param map Map to be used - */ - public void assignSEIClassnameToWSDLPort(Map map) { - this.classname2wsdlPort = map; - } - - /** - * @param name port name - * @param callProperties properties used to configure the Call instances - */ - public void assignCallProperties(String name, Properties callProperties) { - this.mapCallProperties.put(name, callProperties); - } - - /** - * @param name port name - * @param stubProperties properties used to configure the Stub instances - */ - public void assignStubProperties(String name, Properties stubProperties) { - this.mapStubProperties.put(name, stubProperties); - } - - /** - * @param name port name - * @return Returns the callProperties. - */ - public Properties getCallProperties(String name) { - Properties props = null; - if (mapCallProperties.containsKey(name)) { - props = (Properties) mapCallProperties.get(name); - } - return props; - } - - /** - * @param name port name - * @return Returns the stubProperties. - */ - public Properties getStubProperties(String name) { - Properties props = null; - if (mapStubProperties.containsKey(name)) { - props = (Properties) mapStubProperties.get(name); - } - return props; - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServiceProxy.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServiceProxy.java deleted file mode 100644 index 9e4a9bce04..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServiceProxy.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Iterator; - -import javax.xml.namespace.QName; -import javax.xml.rpc.Service; -import javax.xml.rpc.ServiceException; - - -/** - * JServiceProxy - * - * @author Guillaume Sauthier - */ -public class JServiceProxy implements InvocationHandler { - - /** - * inner JService implementation. - * used for delegation - */ - private JService service = null; - - /** - * Forbidden method : Service.getTypeMappingRegistry() - */ - private static Method getTypeMappingRegistryMethod = null; - - /** - * Forbidden method : Service.getHandlerRegistry() - */ - private static Method getHandlerRegistryMethod = null; - - /** - * adding behavior to method : Service.getPort(QName, Class) - */ - private static Method getPortQNameClass = null; - - /** - * Constructs a new JServiceProxy wrapping given JService instance. - * @param service the wrapped JService instance - * @throws ServiceException should be never thrown - */ - public JServiceProxy(JService service) throws ServiceException { - this.service = service; - try { - getTypeMappingRegistryMethod = Service.class.getDeclaredMethod("getTypeMappingRegistry", new Class[]{}); - getHandlerRegistryMethod = Service.class.getDeclaredMethod("getHandlerRegistry", new Class[]{}); - getPortQNameClass = Service.class.getDeclaredMethod("getPort", new Class[]{QName.class, Class.class}); - } catch (Exception e) { - throw new ServiceException(e); - } - } - - /** - * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) - */ - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - // avoid getHandlerRegistry method call - if (getHandlerRegistryMethod.equals(method)) { - throw new UnsupportedOperationException("J2EE components shouldn't use getHandlerRegistry method"); - } - // avoid getTypeMappingRegistry method call - if (getTypeMappingRegistryMethod.equals(method)) { - throw new UnsupportedOperationException("J2EE components shouldn't use getTypeMappingRegistry method"); - } - // avoid getPort method call - if (getPortQNameClass.equals(method)) { - return getPort(args); - } - //delegate - try { - return method.invoke(service, args); - } catch (InvocationTargetException ite) { - throw ite.getTargetException(); - } - } - - /** - * @param args Method call arguments - * @return Returns the correct Port - * @throws ServiceException if port's QName is an unknown Port (not defined in WSDL). - */ - private Object getPort(Object[] args) throws ServiceException { - QName name = (QName) args[0]; - Class clazz = (Class) args[1]; - boolean portFound = false; - for (Iterator ports = service.getPorts(); ports.hasNext() && !portFound;) { - QName portName = (QName) ports.next(); - if (portName.equals(name)) { - return service.getPort(name, clazz); - } - } - - // if we come here, no ports have been found, - // so we fail with a ServiceException - throw new ServiceException("Unknown Port : " + name); - } - -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServletEngineConfigurationFactory.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServletEngineConfigurationFactory.java deleted file mode 100644 index d38fc370b9..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JServletEngineConfigurationFactory.java +++ /dev/null @@ -1,248 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.axis; - -import org.apache.axis.EngineConfiguration; -import org.apache.axis.EngineConfigurationFactory; -import org.apache.axis.configuration.EngineConfigurationFactoryServlet; -import org.apache.axis.deployment.wsdd.WSDDDeployment; -import org.apache.axis.deployment.wsdd.WSDDService; -import org.apache.axis.encoding.SerializationContext; -import org.apache.axis.utils.XMLUtils; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.w3c.dom.Document; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; - - -/** - * This is the JOnAS implementation of EngineConfigurationFactory for Servlet. - * It override Axis default one (EngineConfigurationFactoryServlet). - * - * @author Guillaume Sauthier - * @author Xavier Delplanque - */ -public class JServletEngineConfigurationFactory - implements EngineConfigurationFactory { - - /** server config parameter name in init-param */ - public static final String AXIS_SERVER_CONFIG_PARAM = "axis.serverConfigFile"; - - /** server-config.wsdd base */ - public static final String SERVER_CONFIG_WSDD = "org/ow2/jonas/ws/axis/server-config.wsdd"; - - /** The logger to use */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** The file name to use for research */ - private String serverConfigFile; - - /** The EngineConfigurationFactoryServlet for delegation */ - private EngineConfigurationFactory delegate; - - /** The context used for this JServletEngineConfigurationFactory */ - private ServletContext ctx; - - /** The config used for this JServletEngineConfigurationFactory */ - private ServletConfig cfg; - - - /** - * Create the default engine configuration and detect whether the user has - * overridden this with their own. - * - * @param conf a ServletConfig - */ - protected JServletEngineConfigurationFactory(final ServletConfig conf) { - // get the axis delegate - cfg = conf; - ctx = conf.getServletContext(); - delegate = EngineConfigurationFactoryServlet.newFactory(conf); - } - - /** - * Creates and returns a new JServletEngineConfigurationFactory. If a factory - * cannot be created, return 'null'. The factory may return non-NULL only - * if:
    - * - it knows what to do with the param (param != null)
    - * - it can find it's configuration information - * - * @param param The object used to retrieved the right Factory instance - * - * @return null if param is not a ServletContext, or return the JOnAS - * EngineConfigurationFactory used for a service-endpoint. - */ - public static EngineConfigurationFactory newFactory(final Object param) { - - if (param == null) { - return null; // not for us. - } - - if (param instanceof JAxisServlet) { - JAxisServlet servlet = (JAxisServlet) param; - return new JServletEngineConfigurationFactory(servlet.getServletConfig()); - } else { - return null; - } - } - - /** - * Get a server engine configuration. Try to load it from a File or as a - * ServletContext Resource. Delegate to EngineConfigurationFactoryServlet - * for default behavior. - * - * @return a server side EngineConfiguration - */ - public EngineConfiguration getServerEngineConfig() { - - logger.log(BasicLevel.DEBUG, "Entering getServerEngineConfig for servlet " + cfg.getServletName()); - - try { - - // retrieve init param specifying server-config.wsdd filename to be loaded - serverConfigFile = cfg.getInitParameter(AXIS_SERVER_CONFIG_PARAM); - - logger.log(BasicLevel.DEBUG, "serverConfigFile=" + serverConfigFile); - - // if no config file specified, delegate to Axis Servlet EngineConfigurationFactory - if (serverConfigFile == null) { - return delegate.getServerEngineConfig(); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, - "Loading server-config file '" + serverConfigFile + "'"); - } - - /* - * Use the WEB-INF directory - * (so the config files can't get snooped by a browser) - */ - String appWebInfPath = "/WEB-INF"; - - Document deploy = null; - - String realWebInfPath = ctx.getRealPath(appWebInfPath); - - /** - * If path/file doesn't exist, it may still be accessible - * as a resource-stream (i.e. it may be packaged in a JAR - * or WAR file). - */ - if (realWebInfPath == null - || !(new File(realWebInfPath, serverConfigFile)).exists()) { - - String name = appWebInfPath + "/" + serverConfigFile; - InputStream is = ctx.getResourceAsStream(name); - - if (is != null) { - deploy = XMLUtils.newDocument(is); - } - - if (deploy == null) { - String err = "Cannot get config file '" + serverConfigFile + "' as Resource."; - logger.log(BasicLevel.ERROR, err); - } - } - - /** - * Couldn't get data OR file does exist. - * If we have a path, then attempt to either open - * the existing file, or create an (empty) file. - */ - if (deploy == null && realWebInfPath != null) { - try { - InputStream is = new FileInputStream(new File(realWebInfPath, serverConfigFile)); - deploy = XMLUtils.newDocument(is); - } catch (IOException e) { - String err = "Cannot get config file '" + serverConfigFile + "' as File Resource."; - logger.log(BasicLevel.ERROR, err); - } - } - - // if all attempts fails, delegate to Axis... - if (deploy == null) { - return delegate.getServerEngineConfig(); - } - - // get Base Deployment desc as Resource of ClassLoader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - InputStream is = cl.getResourceAsStream(SERVER_CONFIG_WSDD); - Document base = XMLUtils.newDocument(is); - - // Combine the 2 DD - WSDDDeployment deployWSDD = new WSDDDeployment(deploy.getDocumentElement()); - WSDDDeployment configWSDD = new WSDDDeployment(base.getDocumentElement()); - - // Define the disablePrettyXML parameter at service level because global - // parameters of WSDD aren't used to build message context properties - WSDDService[] services = deployWSDD.getServices(); - for (int j = 0; j < services.length; j++) { - WSDDService service = services[j]; - service.setParameter("disablePrettyXML", "true"); - } - - deployWSDD.deployToRegistry(configWSDD); - - if (logger.isLoggable(BasicLevel.DEBUG)) { - StringWriter sw = new StringWriter(); - SerializationContext ctx = new SerializationContext(sw); - - try { - configWSDD.writeToContext(ctx); - } catch (Exception ioe) { - logger.log(BasicLevel.DEBUG, "Cannot serialize Axis wsdd for servlet " + cfg.getServletName()); - } - logger.log(BasicLevel.DEBUG, sw.getBuffer().toString()); - } - - return configWSDD; - } catch (Exception e) { - // if exception occurs, set a default server-config.wsdd - String err = "Cannot configure axis server from '" + serverConfigFile + "'. Use axis default. Caused by : " + e.getMessage(); - e.printStackTrace(); - logger.log(BasicLevel.ERROR, err); - return delegate.getServerEngineConfig(); - } - } - - /** - * Return null. (Not used for WebService server-side) - * - * @return null - */ - public EngineConfiguration getClientEngineConfig() { - return null; - } -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JonasHandler.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JonasHandler.java deleted file mode 100644 index abac6331fd..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/JonasHandler.java +++ /dev/null @@ -1,325 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.util.Iterator; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; - -import org.ow2.jonas.lib.ejb21.EJBInvocation; -import org.ow2.jonas.lib.ejb21.JServiceEndpointHome; -import org.ow2.jonas.lib.ejb21.JStatelessFactory; -import org.ow2.jonas.lib.util.BeanNaming; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.security.ws.SecurityContextHelper; - -import org.apache.axis.AxisFault; -import org.apache.axis.Handler; -import org.apache.axis.MessageContext; -import org.apache.axis.handlers.BasicHandler; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This handler is called before all application specific handlers It allows to - * process some jonas specific stuff like setting the bean environment for - * example. - * - * @author Philippe Durieux - */ -public class JonasHandler extends BasicHandler { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -8901070778405459776L; - - /** - * MC property : service.endpoint.home - */ - private static final String SE_HOME = "service.endpoint.home"; - - /** - * MC property : service.endpoint.context - */ - private static final String SE_CONTEXT = "service.endpoint.context"; - - /** - * logger - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.lib.ejb21.endpoint"); - - /** - * i18n instance - */ - private static I18n i18n = I18n.getInstance(JonasHandler.class); - - /** - * cached initial context - */ - private static InitialContext cachedContext; - - /** - * Thread local storage used for locating the active message context. This - * information is only valid for the lifetime of this request. - */ - private static ThreadLocal currentMessageContext = new ThreadLocal(); - - /** - * Set the active message context. - * - * @param mc the new active message context. - */ - protected static void setCurrentMessageContext(MessageContext mc) { - currentMessageContext.set(mc); - } - - /** - * Get the active message context. - * - * @return the current active message context - */ - public static MessageContext getCurrentMessageContext() { - return currentMessageContext.get(); - } - - /** - * Called on reply if a fault occured. - * - * @param msgContext MessageContext - */ - public void onFault(MessageContext msgContext) { - logger.log(BasicLevel.ERROR, "*------* Fault"); - - // save previous context - MessageContext previousContext = getCurrentMessageContext(); - - try { - // set active context - setCurrentMessageContext(msgContext); - - JServiceEndpointHome sehome = getJServiceEndpointHome(msgContext); - Context savedCtx = getSavedContext(msgContext); - if (sehome != null) { - logger.log(BasicLevel.DEBUG, "*--* Fault"); - sehome.resetCompCtx(savedCtx); - if (savedCtx != null) { - String msg = i18n.getMessage("JonasHandler.onFault.settingNonNullContext", savedCtx); - logger.log(BasicLevel.ERROR, msg); - } - unsetJServiceEndpointHome(msgContext); - unsetSavedContext(msgContext); - } - } finally { - // restore previous state - setCurrentMessageContext(previousContext); - } - } - - /** - * @param msgContext the MC which store the context - */ - private void unsetSavedContext(MessageContext msgContext) { - msgContext.removeProperty(SE_CONTEXT); - } - - /** - * @param msgContext the MC which store the home - */ - private void unsetJServiceEndpointHome(MessageContext msgContext) { - msgContext.removeProperty(SE_HOME); - } - - /** - * @param msgContext the MC to explore - * @return Returns the Context stored inside msgContext - */ - private Context getSavedContext(MessageContext msgContext) { - return (Context) msgContext.getProperty(SE_CONTEXT); - } - - /** - * @param msgContext the MC to explore - * @return Returns the JServiceEndpointHome stored inside msgContext - */ - private JServiceEndpointHome getJServiceEndpointHome(MessageContext msgContext) { - return (JServiceEndpointHome) msgContext.getProperty(SE_HOME); - } - - /** - * Called on request and then on reply if no fault occured. - * - * @param msgContext - * MessageContext - * @throws AxisFault - * if the handler cannot get the service endpoint home - */ - public void invoke(MessageContext msgContext) throws AxisFault { - - // save previous context - MessageContext previousContext = getCurrentMessageContext(); - - try { - // set active context - setCurrentMessageContext(msgContext); - - if (msgContext.getPastPivot()) { - // Response - // --------------------------------------------------- - logger.log(BasicLevel.DEBUG, "*------* Response"); - JServiceEndpointHome sehome = getJServiceEndpointHome(msgContext); - Context savedCtx = getSavedContext(msgContext); - if (sehome != null) { - logger.log(BasicLevel.DEBUG, "*--* Response"); - sehome.resetCompCtx(savedCtx); - unsetJServiceEndpointHome(msgContext); - } - // ---------------------------------------------------- - // /Response - } else { - // Request - // --------------------------------------------------- - logger.log(BasicLevel.DEBUG, "*------* Request"); - - // Get the service class name - Handler service = msgContext.getService(); - String clsName = (String) service - .getOption(JOnASEJBProvider.OPTION_SEINTERFACENAME); - if (clsName == null) { - // We are not in the case of jonas ejb call: do nothing. - return; - } - logger.log(BasicLevel.DEBUG, "*--* Request"); - - // Get ServiceEndpointHome in JNDI - String jndiName = (String) service.getOption(JOnASEJBProvider.OPTION_SEJNDINAME); - if (jndiName == null) { - String msg = i18n.getMessage("JonasHandler.invoke.noSEJNDI", JOnASEJBProvider.OPTION_SEJNDINAME); - logger.log(BasicLevel.ERROR, msg); - throw new AxisFault(msg); - } - JServiceEndpointHome sehome = null; - try { - InitialContext ic = getCachedContext(); - sehome = (JServiceEndpointHome) ic.lookup(jndiName); - setJServiceEndpointHome(msgContext, sehome); - } catch (NamingException ne) { - String msg = i18n.getMessage("JonasHandler.invoke.cannotLookupHome", jndiName); - logger.log(BasicLevel.ERROR, msg, ne); - throw new AxisFault(msg, ne); - } - - // add the security context - String username = msgContext.getUsername(); - if (username != null) { - // Do not forget to initialize the security context - SecurityContextHelper.getInstance().login(username, - msgContext.getPassword()); - // Check the security and throw exception if user is not - // authorized - // to access the EJB before lauching handlers - checkSecurity(sehome, msgContext); - } - - // Switch Context on the context of the target bean - // (java:comp/env) - Context savedCtx = sehome.setCompCtx(); - setSavedContext(msgContext, savedCtx); - if (savedCtx != null) { - String msg = i18n.getMessage("JonasHandler.invoke.savingNonNullCtx", savedCtx); - logger.log(BasicLevel.WARN, msg); - } - // --------------------------------------------------- - // /Request - } - } finally { - // restore previous state - setCurrentMessageContext(previousContext); - } - } - - private void checkSecurity(JServiceEndpointHome sehome, MessageContext msgContext) { - JStatelessFactory bf = sehome.getBeanFactory(); - EJBInvocation ejb = new EJBInvocation(); - QName q = null; - try { - SOAPEnvelope env = msgContext.getMessage().getSOAPPart().getEnvelope(); - SOAPBody body = env.getBody(); - Iterator it = body.getChildElements(); - SOAPElement operation = (SOAPElement) it.next(); - - q = new QName(operation.getNamespaceURI(), operation.getLocalName()); - ejb.methodPermissionSignature = BeanNaming.getSignature(bf.getEJBName(), msgContext.getOperationByQName(q).getMethod()); - } catch (AxisFault e ) { - // error during getting the operation from the message - // not possible to check the security - logger.log(BasicLevel.WARN, "can't retreive the operation from message...can not check the security"); - return; - } catch (SOAPException e) { - // error during getting the operation from the message - // not possible to check the security - logger.log(BasicLevel.WARN, "can't retreive the operation from message...can not check the security"); - return; - } - bf.checkSecurity(ejb); - } - - /** - * @param msgContext the MC which will store the Context - * @param savedCtx Context to store - */ - private void setSavedContext(MessageContext msgContext, Context savedCtx) { - msgContext.setProperty(SE_CONTEXT, savedCtx); - } - - /** - * @param msgContext the MC which will store the EndpointHome - * @param sehome JServiceEndpointHome to be stored - */ - private void setJServiceEndpointHome(MessageContext msgContext, JServiceEndpointHome sehome) { - msgContext.setProperty(SE_HOME, sehome); - } - - /** - * @return Returns the cached InitialContext (or created a new one) - * @throws javax.naming.NamingException - * when InitialContext creation fails - */ - private static InitialContext getCachedContext() - throws javax.naming.NamingException { - if (cachedContext == null) { - cachedContext = new InitialContext(); - } - return cachedContext; - } -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/NoopProvider.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/NoopProvider.java deleted file mode 100644 index a8b30211f4..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/NoopProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS : Java(TM) OpenSource Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import org.ow2.jonas.lib.util.Log; - -import org.apache.axis.AxisFault; -import org.apache.axis.MessageContext; -import org.apache.axis.handlers.soap.SOAPService; -import org.apache.axis.providers.BasicProvider; - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Noop Provider - * @author Guillaume Sauthier - */ -public class NoopProvider extends BasicProvider { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = -3117483157628786959L; - /** - * Logger - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** - * @see org.apache.axis.providers.BasicProvider#initServiceDesc(org.apache.axis.handlers.soap.SOAPService, org.apache.axis.MessageContext) - */ - public void initServiceDesc(SOAPService service, MessageContext msgContext) throws AxisFault { - - } - - /** - * @see org.apache.axis.Handler#invoke(org.apache.axis.MessageContext) - */ - public void invoke(MessageContext msgContext) throws AxisFault { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/QSUpdateServiceWSDLHandler.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/QSUpdateServiceWSDLHandler.java deleted file mode 100644 index 81d1d0a050..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/QSUpdateServiceWSDLHandler.java +++ /dev/null @@ -1,506 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.Iterator; -import java.util.List; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.WSDLException; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.wsdl.xml.WSDLWriter; -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.axis.AxisFault; -import org.apache.axis.Constants; -import org.apache.axis.MessageContext; -import org.apache.axis.i18n.Messages; -import org.apache.axis.server.AxisServer; -import org.apache.axis.transport.http.AbstractQueryStringHandler; -import org.apache.axis.transport.http.HTTPConstants; -import org.apache.axis.utils.XMLUtils; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.ws.jaxrpc.WSException; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - - - -/** - * Update the wsdlFile specified in wsdd with the good URLs for endpoints. - * responds to the ?JWSDL Supports wsdl:import and xsd:include - * @author Guillaume Sauthier - */ -public class QSUpdateServiceWSDLHandler extends AbstractQueryStringHandler { - - /** - * SOAP NS URI - */ - private static final String NS_URI_SOAP = "http://schemas.xmlsoap.org/wsdl/soap/"; - - /** - * soap:address Type QName - */ - private static final QName QNAME_SOAP_ADDRESS = new QName(NS_URI_SOAP, "address"); - - /** - * WSDL NS URI - */ - private static final String NS_URI_WSDL = "http://schemas.xmlsoap.org/wsdl/"; - - /** - * XSD NS URI - */ - private static final String NS_URI_XSD = "http://www.w3.org/2001/XMLSchema"; - - /** - * filename parameter name - */ - private static final String PARAM_FILENAME = "filename"; - - /** - * context parameter name - */ - private static final String PARAM_CONTEXT = "context"; - - /** - * JWSDL parameter QSHandler name - */ - private static final String PARAM_JWSDL = "JWSDL"; - - /** - * wsdl:definition QName - */ - private static final QName WSDL_DEFINITIONS_QNAME = new QName(NS_URI_WSDL, "definitions"); - - /** - * Service meta data - */ - private ServiceDesc sd = null; - - /** - * Performs the action associated with this particular query string handler. - * @param msgContext a MessageContext object containing message context - * information for this query string handler. - * @throws AxisFault if an error occurs. - */ - public void invoke(final MessageContext msgContext) throws AxisFault { - // Obtain objects relevant to the task at hand from the provided - // MessageContext's bag. - configureFromContext(msgContext); - - AxisServer engine = (AxisServer) msgContext.getProperty(HTTPConstants.PLUGIN_ENGINE); - PrintWriter writer = (PrintWriter) msgContext.getProperty(HTTPConstants.PLUGIN_WRITER); - HttpServletResponse response = (HttpServletResponse) msgContext - .getProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE); - HttpServletRequest request = (HttpServletRequest) msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); - - InitialContext ctx; - try { - ctx = new InitialContext(); - sd = (ServiceDesc) ctx.lookup("java:comp/jonas/" + engine.getName() + "/dd"); - } catch (NamingException e) { - throw new AxisFault("Servlet name not found : " + engine.getName(), e); - } - - String wsdlFilename = request.getParameter(PARAM_FILENAME); - String context = request.getParameter(PARAM_CONTEXT); - try { - Document doc = null; - if (wsdlFilename == null) { - // as a Document - doc = getDefinitionAsDocument(sd.getWSDL().getDefinition()); - wsdlFilename = sd.getWSDL().getName(); - String[] pathElements = wsdlFilename.split("/"); - if (pathElements.length <= 2) { - throw new WSException("invalid filename"); - } - - StringBuffer buf = new StringBuffer(); - for (int i = 2; i < pathElements.length; i++) { - buf.append(pathElements[i]); - if (i != (pathElements.length - 1)) { - // last part is a filename - buf.append("/"); - } - } - // remove WEB-INF/wsdl/ - // remove META-INF/wsdl/ - wsdlFilename = buf.toString(); - context = "."; - msgContext.setProperty("WSDL", doc); - } else { - // try to get the specified WSDL from cache ... - doc = (Document) msgContext.getProperty("WSDL_" + wsdlFilename); - - if (doc == null) { - // create the WSDL/Imported file - doc = getDocument(wsdlFilename, context); - } - - msgContext.setProperty("WSDL_" + wsdlFilename, doc); - } - - if (doc != null) { - // update WSDL - modifyImports(doc, request, new File(context, wsdlFilename).getParent()); - Document up2date = updateWSDLPortLocations(doc); - response.setContentType("text/xml; charset=" + XMLUtils.getEncoding().toLowerCase()); - reportWSDL(up2date, writer); - } else { - // report Error - if (log.isDebugEnabled()) { - log.debug("processWsdlRequest: failed to create WSDL"); - } - reportNoWSDL(response, writer, "noWSDL02", null); - } - } catch (AxisFault axisFault) { - //the no-service fault is mapped to a no-wsdl error - if (axisFault.getFaultCode().equals(Constants.QNAME_NO_SERVICE_FAULT_CODE)) { - //which we log - processAxisFault(axisFault); - - //then report under a 404 error - response.setStatus(HttpURLConnection.HTTP_NOT_FOUND); - reportNoWSDL(response, writer, "noWSDL01", axisFault); - } else { - //all other faults get thrown - throw axisFault; - } - } - } - - /** - * @param definition Definition to convert - * @return returns the given Definition instance as a Document instance - * @throws AxisFault when convertion is not possible - */ - private Document getDefinitionAsDocument(final Definition definition) throws AxisFault { - - try { - WSDLWriter writer = getWSDLWriter(); - return writer.getDocument(definition); - } catch (WSDLException e) { - throw new AxisFault(e.getMessage(), e); - } - - } - - /** - * Update the wsdl:import and xsd:include elements of the given Document. - * @param doc Definitions or Schema document instance. - * @param request HTTP request - * @param context loading Context - */ - private void modifyImports(final Document doc, final HttpServletRequest request, final String context) { - // Document may be a wsdl:definition or xsd:schema - // So we must handle import (definitions) and include (schema) - - // wsdl:definition / xsd:schema - Element de = doc.getDocumentElement(); - - NodeList imports = de.getElementsByTagNameNS(NS_URI_WSDL, "import"); - - // modify wsdl:import location - for (int i = 0; i < imports.getLength(); i++) { - Element imp = (Element) imports.item(i); - Attr location = imp.getAttributeNode("location"); - if (!location.getValue().startsWith("http://")) { - // relative import - String req = computeUpdatedURL(request, context, location); - - log.debug("Replacing wsdl:location '" + location.getValue() + "' with '" + req.toString() + "'"); - location.setValue(req.toString()); - } - } - - // modify xsd:include schemaLocation - updateSchema(de, "include", request, context); - // modify xsd:import schemaLocation - updateSchema(de, "import", request, context); - - // wsdl:definitions/wsdl:types/xsd:schema/(xsd:import|xsd:include) - NodeList types = de.getElementsByTagNameNS(NS_URI_WSDL, "types"); - // is there a types here ? - if (types.getLength() != 0) { - - // get the only wsdl:types element - Element typesElement = (Element) types.item(0); - - // is there some xsd:schema out there ? - NodeList schemasList = typesElement.getElementsByTagNameNS(NS_URI_XSD, "schema"); - for (int i = 0; i < schemasList.getLength(); i++) { - Element schema = (Element) schemasList.item(i); - updateSchema(schema, "include", request, context); - updateSchema(schema, "import", request, context); - } - } - } - - /** - * @param request the Http Request - * @param context loading context - * @param location attribute to update - * @return return the new location value - */ - private String computeUpdatedURL(final HttpServletRequest request, final String context, final Attr location) { - StringBuffer req = request.getRequestURL(); - req.append("?" + PARAM_JWSDL); - req.append("&" + PARAM_FILENAME + "=" + location.getValue()); - req.append("&" + PARAM_CONTEXT + "=" + context); - return req.toString(); - } - - /** - * @param schema The Element representing a Schema to be updated - * @param elementName the element name with "schemaLocation" attribute (can be "import" or "include") - * @param request the HTTP Request - * @param context loading context - */ - private void updateSchema(final Element schema, final String elementName, final HttpServletRequest request, final String context) { - - NodeList elements = schema.getElementsByTagNameNS(NS_URI_XSD, elementName); - - // modify xsd:include|xsd:import schemaLocation - for (int i = 0; i < elements.getLength(); i++) { - Element e = (Element) elements.item(i); - Attr location = e.getAttributeNode("schemaLocation"); - if ((location != null) && (!location.getValue().startsWith("http://"))) { - // relative import - String req = computeUpdatedURL(request, context, location); - - log.debug("Replacing xsd:schemaLocation '" + location.getValue() + "' with '" + req.toString() + "'"); - location.setValue(req.toString()); - } - } - } - - /** - * @param wsdlFilename resource to load. - * @param context loading context - * @return Returns a Document created from the filename loaded in the - * context ClassLoader. - * @throws AxisFault if resource if not found or if resource is not XML. - */ - private Document getDocument(final String wsdlFilename, final String context) throws AxisFault { - - // Check that the filename is only relative to META-INF/wsdl or - // WEB-INF/wsdl no deeper ! - // TODO Security Check ! - - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL res = cl.getResource(context + "/" + wsdlFilename); - if (res == null) { - // Just a patch: may be in 'META-INF/wsdl' ? - // It's needed to normalize the path by simplifying '.' and '..', and prefix it by 'META-INF/wsdl' - // Ex: if context=./a/b/c and wsdlFilename=../../thefile.wsdl, than resourcename=META-INF/wsdl/a/thefile.wsdl - // Use URI.normalize() instead of File.getCanonicalPath() to not be OS dependent - String resourceName = null; - try { - URI uriwsdl = (new URI("META-INF/wsdl" + '/' + context + "/" + wsdlFilename)).normalize(); - resourceName = uriwsdl.getPath(); - } catch (URISyntaxException ioe) { - throw new AxisFault("Cannot normalize the path of the document : " + wsdlFilename + "(" + context + ")"); - } - res = cl.getResource(resourceName); - } - - Document doc = null; - if (res != null) { - try { - doc = createDocument(res.openStream()); - } catch (IOException ioe) { - throw new AxisFault("Cannot open requested URL : " + res); - } - } else { - throw new AxisFault("Cannot find requested document : " + wsdlFilename); - } - - return doc; - } - - /** - * @param stream supposed XML InputStream - * @return Returns the Document parsed from the given InputStream - * @throws AxisFault if parsing goes wrong. - */ - private Document createDocument(final InputStream stream) throws AxisFault { - try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setValidating(false); - DocumentBuilder builder = factory.newDocumentBuilder(); - return builder.parse(stream); - } catch (ParserConfigurationException pce) { - throw new AxisFault(pce.getMessage(), pce); - } catch (SAXException se) { - throw new AxisFault(se.getMessage(), se); - } catch (IOException ioe) { - throw new AxisFault(ioe.getMessage(), ioe); - } - } - - /** - * @param doc Document to update - * @return updated Document - * @throws AxisFault When Document cannot be parsed as a WSDL Definition - * instance - */ - private Document updateWSDLPortLocations(final Document doc) throws AxisFault { - log.debug("Entering updateWSDL"); - - QName docQname = new QName(doc.getDocumentElement().getNamespaceURI(), doc.getDocumentElement().getLocalName()); - - // If this is a wsdl:definition - if (WSDL_DEFINITIONS_QNAME.equals(docQname)) { - try { - WSDLReader reader = getWSDLReader(); - // get Definition from Document - Definition def = reader.readWSDL(null, doc); - - /** - * 1. iterer sur le port-component pour prendre leur URL 2. les - * assigner en fonction du wsdl-port - */ - QName sQName = sd.getWSDL().getServiceQname(); - Service s = def.getService(sQName); - if (s != null) { - - List portsComp = sd.getPortComponents(); - for (Iterator i = portsComp.iterator(); i.hasNext();) { - PortComponentDesc pcd = (PortComponentDesc) i.next(); - URL endpoint = pcd.getEndpointURL(); - QName portQName = pcd.getQName(); - - Port port = s.getPort(portQName.getLocalPart()); - // maybe we have not found the requested Port - if (port != null) { - // Set the updated soap:address address - List ext = port.getExtensibilityElements(); - for (Iterator it = ext.iterator(); it.hasNext();) { - ExtensibilityElement element = (ExtensibilityElement) it.next(); - if (element.getElementType().equals(QNAME_SOAP_ADDRESS)) { - SOAPAddress sa = (SOAPAddress) element; - sa.setLocationURI(endpoint.toExternalForm()); - log.debug("Update port soap:location with " + endpoint); - } - } - } else { - log.warn("Cannot find wsdl:port '" + portQName.getLocalPart() + "' in wsdl:service " - + s.getQName()); - } - } - } - - return WSDLFactory.newInstance().newWSDLWriter().getDocument(def); - } catch (WSDLException wsdle) { - throw new AxisFault("Cannot read WSDL Document", wsdle); - } - } else { - // if we have something else (not a wsdl:definition) - // return the document unmodified - return doc; - } - - } - - /** - * @return Returns a configured WSDLReader - * @throws WSDLException if factory or reader cannot be instanciated. - */ - private WSDLReader getWSDLReader() throws WSDLException { - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", false); - return reader; - } - - /** - * @return Returns a configured WSDLWriter - * @throws WSDLException if factory or writer cannot be instanciated. - */ - private WSDLWriter getWSDLWriter() throws WSDLException { - WSDLFactory factory = WSDLFactory.newInstance(); - return factory.newWSDLWriter(); - } - - /** - * Reports WSDL - * @param doc Document to write - * @param writer Servlet Writer to use - */ - public void reportWSDL(final Document doc, final PrintWriter writer) { - XMLUtils.PrettyDocumentToWriter(doc, writer); - } - - /** - * Reports that we have no WSDL - * @param res HttpServletResponse - * @param writer PrintWriter - * @param moreDetailCode optional name of a message to provide more detail - * @param axisFault optional fault string, for extra info at debug time only - */ - public void reportNoWSDL(final HttpServletResponse res, final PrintWriter writer, final String moreDetailCode, final AxisFault axisFault) { - res.setStatus(HttpURLConnection.HTTP_NOT_FOUND); - res.setContentType("text/html"); - - writer.println("

    " + Messages.getMessage("error00") + "

    "); - writer.println("

    " + Messages.getMessage("noWSDL00") + "

    "); - - if (moreDetailCode != null) { - writer.println("

    " + Messages.getMessage(moreDetailCode) + "

    "); - } - - if (axisFault != null && isDevelopment()) { - //dev systems only give fault dumps - writeFault(writer, axisFault); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/URLMapper.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/URLMapper.java deleted file mode 100644 index 88277e4f07..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/URLMapper.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.axis.AxisFault; -import org.apache.axis.MessageContext; -import org.apache.axis.handlers.BasicHandler; -import org.apache.axis.transport.http.HTTPConstants; - -/** - * The URLMapper is given an HTTPServletRequest and - * knows from the invoked URL which service should be used. - * Old style URL : - * http://:/// - * pathInfo = / - * servletPath = / - * - * New Style URL: - * http://:// - * pathInfo = empty - * servletPath = / - * - * @author Guillaume Sauthier - */ -public class URLMapper extends BasicHandler { - - private static final long serialVersionUID = 5261537788705414094L; - - /** - * @see org.apache.axis.Handler#invoke(org.apache.axis.MessageContext) - */ - public void invoke(MessageContext mc) throws AxisFault { - /** - * If there's already a targetService then just return. - */ - if (mc.getService() == null) { - String pathInfo = (String) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETPATHINFO); - HttpServletRequest req = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); - String servletPath = req.getServletPath(); - String path = null; - - if ((pathInfo == null) || (pathInfo.length() == 0)) { - // use the servletPath as target service - // new mode - if (servletPath.startsWith("/")) { - path = servletPath.substring(1); //chop the extra "/" - } - } else { - // directly take the pathinfo value - // compatibility mode - if (pathInfo.startsWith("/")) { - path = pathInfo.substring(1); //chop the extra "/" - } - } - mc.setTargetService(path); - } - } -} diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDJOnASEJBProvider.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDJOnASEJBProvider.java deleted file mode 100644 index 216f460a41..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDJOnASEJBProvider.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import org.apache.axis.EngineConfiguration; -import org.apache.axis.Handler; -import org.apache.axis.deployment.wsdd.WSDDProvider; -import org.apache.axis.deployment.wsdd.WSDDService; - -/** - * JOnAS EJB Provider. - * - * @author Guillaume Sauthier - */ -public class WSDDJOnASEJBProvider extends WSDDProvider { - - /** - * JOnAS EJB Provider name - */ - public static final String PROVIDER_NAME = "JOnASEJB"; - - /** - * @return Returns the JOnAS EJB Provider name - */ - public String getName() { - return PROVIDER_NAME; - } - - /** - * Returns the JOnAS EJB Provider. - * - * @param service not used - * @param registry not used - * - * @return Returns the JOnAS EJB Provider. - * - * @throws Exception never thrown - */ - public Handler newProviderInstance(WSDDService service, EngineConfiguration registry) throws Exception { - return new org.ow2.jonas.ws.axis.JOnASEJBProvider(); - } - -} - diff --git a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDNoopProvider.java b/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDNoopProvider.java deleted file mode 100644 index d08ab462a2..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/java/org/ow2/jonas/ws/axis/WSDDNoopProvider.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis; - -import org.apache.axis.EngineConfiguration; -import org.apache.axis.Handler; -import org.apache.axis.deployment.wsdd.WSDDProvider; -import org.apache.axis.deployment.wsdd.WSDDService; - -/** - * JOnAS Noop Provider. - * - * @author Guillaume Sauthier - */ -public class WSDDNoopProvider extends WSDDProvider { - - /** - * JOnAS Noop Provider name - */ - public static final String PROVIDER_NAME = "Noop"; - - /** - * @return Returns the JOnAS EJB Provider name - */ - public String getName() { - return PROVIDER_NAME; - } - - /** - * Returns the JOnAS Noop Provider. - * - * @param service not used - * @param registry not used - * - * @return Returns the JOnAS Noop Provider. - * - * @throws Exception never thrown - */ - public Handler newProviderInstance(WSDDService service, EngineConfiguration registry) throws Exception { - return new org.ow2.jonas.ws.axis.NoopProvider(); - } - -} - diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/jonas-webservices-axis-core.bnd b/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/jonas-webservices-axis-core.bnd deleted file mode 100644 index 28154f6b40..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/jonas-webservices-axis-core.bnd +++ /dev/null @@ -1,51 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.ws.axis - -Import-Package com.ibm.wsdl.extensions.soap,\ - !org.apache.commons.httpclient.*,\ - !org.apache.commons.net.*,\ - !com.sun.*,\ - !sun.*,\ - !org.exolab.castor.*,\ - !com.ibm.*,\ - !org.apache.bsf,\ - javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - * - -DynamicImport-Package org.ow2.cmi.jndi.context,\ - org.ow2.jonas.jmx,\ - org.ow2.jonas.naming,\ - org.ow2.jonas.web,\ - org.ow2.jonas.security.ws,\ - org.ow2.jonas.ws.publish - --exportcontents org.apache.axis.*,\ - org.apache.commons.discovery.* - -Embed-Dependency axis;inline=true,\ - commons-discovery;inline=true diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/services/org.apache.axis.EngineConfigurationFactory b/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/services/org.apache.axis.EngineConfigurationFactory deleted file mode 100644 index e9cc091c87..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/META-INF/services/org.apache.axis.EngineConfigurationFactory +++ /dev/null @@ -1,26 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# --------------------------------------------------------------------------- -# $Id: I18n.properties 15428 2008-10-07 11:20:29Z sauthieg $ -# --------------------------------------------------------------------------- - -# This is the JOnAS EngineConfigurationFactory implementation -org.ow2.jonas.ws.axis.JServletEngineConfigurationFactory \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/metadata.xml b/jonas/modules/services/webservices/axis/core/src/main/resources/metadata.xml deleted file mode 100644 index 5446beb2c8..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/I18n.properties b/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/I18n.properties deleted file mode 100644 index 90cbecb850..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/I18n.properties +++ /dev/null @@ -1,34 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2005 Bull S.A. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -JAxisServiceFactory.loadAxisDeployment.configNotFound=Configuration File ''{0}'' not found -JAxisServiceFactory.loadAxisDeployment.docCreation=Exception during Document Creation from ''{0}'' -JAxisServiceFactory.getServiceReference.mergeFail=merging WSDD fails for ''{0}''. -JAxisServiceFactory.serializeWSDD.serFail=WSDD Serialization fails. - -JonasHandler.onFault.settingNonNullContext=Setting a non null context: {0}. -JonasHandler.invoke.noSEJNDI=Service Endpoint JNDI name is null, probably a Missing parameter {0} in service description. -JonasHandler.invoke.cannotLookupHome=Cannot lookup the ServiceEndpointHome under jndi name ''{0}''. -JonasHandler.invoke.savingNonNullCtx=Saving a non null context: {0}. diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/client-config.wsdd b/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/client-config.wsdd deleted file mode 100644 index 1f9f6940f9..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/client-config.wsdd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/server-config.wsdd b/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/server-config.wsdd deleted file mode 100644 index 113fdd33b0..0000000000 --- a/jonas/modules/services/webservices/axis/core/src/main/resources/org/ow2/jonas/ws/axis/server-config.wsdd +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/axis/pom.xml b/jonas/modules/services/webservices/axis/pom.xml deleted file mode 100644 index 0fa521e8c8..0000000000 --- a/jonas/modules/services/webservices/axis/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices-axis - pom - JOnAS :: Services :: Web Services :: Axis - - core - - diff --git a/jonas/modules/services/webservices/axis2/core/pom.xml b/jonas/modules/services/webservices/axis2/core/pom.xml deleted file mode 100644 index de2d837d6f..0000000000 --- a/jonas/modules/services/webservices/axis2/core/pom.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - - - jonas-webservices-axis2 - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-axis2-core - bundle - JOnAS :: Services :: Web Services :: Axis2 :: Core - - - - org.testng - testng - 5.1 - jdk15 - test - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.apache.axis2 - axis2-kernel - ${axis2.version} - - - annogen - annogen - 0.1.0 - - - org.apache.axis2 - axis2-metadata - ${axis2.version} - - - org.apache.axis2 - axis2-jaxws - ${axis2.version} - - - org.apache.axis2 - axis2-transport-http - ${axis2.version} - - - org.apache.axis2 - axis2-transport-local - ${axis2.version} - - - - - org.apache.axis2 - axis2-java2wsdl - ${axis2.version} - - - org.apache.axis2 - axis2-adb - ${axis2.version} - - - org.apache.geronimo.specs - geronimo-jaxws_2.1_spec - 1.0 - - - commons-io - commons-io - 1.4 - - - org.apache.ws.commons.axiom - axiom-api - 1.2.8 - - - backport-util-concurrent - backport-util-concurrent - 3.1 - - - xml-resolver - xml-resolver - 1.2 - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - - - org.ow2.easybeans - easybeans-api - - - org.ow2.easybeans - easybeans-core - ${easybeans.version} - - - org.ow2.bundles - ow2-util-annotation-processor - provided - - - org.apache.xbean - xbean-reflect - 3.3 - - - org.apache.httpcomponents - httpcore - 4.0 - - - com.sun.xml.ws - jaxws-rt - 2.1.4 - - - org.apache.axis2 - axis2-saaj - 1.5 - - - com.sun.xml.ws - jaxws-tools - 2.1.3 - - - - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/Axis2Service.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/Axis2Service.java deleted file mode 100644 index ca2f4b3746..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/Axis2Service.java +++ /dev/null @@ -1,285 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import javax.jws.HandlerChain; -import javax.naming.Reference; -import javax.servlet.ServletContext; - -import org.ow2.easybeans.server.Embedded; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.ws.axis2.easybeans.Axis2EJBWebserviceEndpoint; -import org.ow2.jonas.ws.axis2.jaxws.Axis2WSEndpoint; -import org.ow2.jonas.ws.axis2.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.base.JAXWSService; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesModule; -import org.ow2.jonas.ws.jaxws.easybeans.naming.WebServiceRefExtensionListener; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandler; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChain; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; -import org.ow2.util.ee.metadata.ws.api.struct.IWebServiceMarker; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -/** - * The Axis2Service class is used to declare Axis2 as a module in JOnAS. - * - * @author xiaoda - */ -public class Axis2Service extends JAXWSService implements IJAXWSService { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(Axis2Service.class); - - /** - * Each WebApp may be associated with one WSModule. - */ - Map>> webservicesModules = new HashMap>>(); - - /** - * The event service used to register listeners. - */ - private IEventService eventService; - - /** - * The naming extension listener for EasyBean's java:comp/env building. - */ - private WebServiceRefExtensionListener listener; - - - @Override - protected void doStart() throws ServiceException { - super.doStart(); - } - - @Override - protected void doStop() throws ServiceException { - super.doStop(); - } - - public Reference createNamingReference(final IJaxwsWebServiceRef serviceRef) { - return null; - - } - - public IWebServiceEndpoint createPOJOWebServiceEndpoint(final IWarClassMetadata metadata, - final ClassLoader loader, - final ServletContext servletContext) throws WSException { - // Find a unique name for the WebModule - String name = findUniqueContextName(servletContext); - - // The module linked to this archive - IWebservicesModule> module = webservicesModules.get(name); - if (module == null) { - module = new JAXWSWebservicesModule>(name); - webservicesModules.put(name, module); - } - - // TODO Auto-generated method stub - String classname = metadata.getJClass().getName().replace('/', '.'); - - Class klass = null; - try { - klass = loader.loadClass(classname); - } catch (ClassNotFoundException e) { - throw new WSException("Unable to load the WebService class: " + classname, e); - } - - IWebServiceMarker wsMarker = metadata.getWebServiceMarker(); - - JOnASJaxWsImplementorInfo jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass, wsMarker); - - // Get a Container for all services deployed using the same WSDL - WebservicesContainer container = module.findContainer(jaxWsImplementorInfo.getWsdlLocation()); - if (container == null) { - // Create a new Container - container = new WebservicesContainer(jaxWsImplementorInfo.getWsdlLocation()); - module.addContainer(container); - - } - - // FIXME - // Using annotation only values (simple but not sufficent) - String wsdlLocation = jaxWsImplementorInfo.getWsdlLocation(); - - if (wsdlLocation == null || "".equals(wsdlLocation)) { - logger.debug("The WSDL location is not specified!"); - } - - // find the URL pattern to use - - // FIXME - // The util class only look for annotation on the given class - // JAXWS defines precises rules when inheritance comes into play - // They're not respected in this case - // BTW, IWSMarker contains XML descriptor values overriding annotation values - String serviceName = jaxWsImplementorInfo.getServiceName().getLocalPart(); - - String pattern = null; - if (!"".equals(serviceName)) { - // default pattern : /{service-name} - pattern = "/" + serviceName; - } else { - // else /{class.name}Service - pattern = "/" + klass.getSimpleName() + "Service"; - } - - // Creates PortMetaData to hold deployment/runtime information - // about the web service - PortMetaData pmd = new PortMetaData(); - - pmd.setUrlPattern(pattern); - pmd.setWSDLLocation(wsdlLocation); - - StringBuffer handlerXML = new StringBuffer(); - - - - - // if we have define the handlerchain in webservices.xml, should override annotation - if(wsMarker.getHandlerChains()!=null) { - handlerXML.append(""); - for(IHandlerChain hc : wsMarker.getHandlerChains().getHandlerChains()) { - handlerXML.append(""); - for(IHandler ih : hc.getHandlers()) { - handlerXML.append(""); - handlerXML.append("" + ih.getHandlerName() + ""); - handlerXML.append("" + ih.getHandlerClass() + ""); - handlerXML.append(""); - } - handlerXML.append(""); - } - handlerXML.append(""); - pmd.setHandlerXML(handlerXML.toString()); - } else { - try { - HandlerChain hc = klass.getAnnotation(HandlerChain.class); - - if (hc != null) { - URL handlerURL = klass.getResource(hc.file()); - BufferedReader br = new BufferedReader(new InputStreamReader(handlerURL.openStream())); - - String temp = null; - temp = br.readLine(); - while (temp != null) { - handlerXML.append(temp); - temp = br.readLine(); - } - pmd.setHandlerXML(handlerXML.toString()); - } - - } catch (IOException e) { - throw new WSException("Unable to Get the handler description file for" + serviceName + "!", e); - } finally { - if(pmd.getHandlerXML() != null) { - logger.debug("Found handlers in this package!"); - } - } - } - - - Axis2WSEndpoint endpoint = null; - try { - endpoint = new Axis2WSEndpoint(klass, IWebServiceEndpoint.EndpointType.POJO, pmd, null,new URL("file",null,name)); - } catch (MalformedURLException e1) { - throw new WSException("Invalid context root path: " + "file:/ " + name,e1); - } - - try { - // init axis2 - endpoint.init(); - } catch (Exception e) { - throw new WSException("Exception occurs when creating POJO endpoint for" + serviceName + "!",e); - } - - logger.info("Endpoint {0} inited", serviceName); - // Link the endpoint - container.addEndpoint(endpoint); - - return endpoint; - } - - /** - * Finalize the deployment of POJO endpoints contained in the given ServletContext. - * - * @param context ServletContext. - */ - public void finalizePOJODeployment(final ServletContext context) { - // TODO To be implemented - //To change body of implemented methods use File | Settings | File Templates. - } - - /** - * Stop and undeploy the POJO endpoints contained in the given ServletContext. - * - * @param context ServletContext. - */ - public void undeployPOJOEndpoints(final ServletContext context) { - // TODO To be implemented - //To change body of implemented methods use File | Settings | File Templates. - String name = findUniqueContextName(context); - - IWebservicesModule> module = webservicesModules.get(name); - if (module != null) { - module.stop(); - // Remove the module from the list - webservicesModules.remove(name); - } - } - - - public void bindEventService(final IEventService eventService) { - logger.info("EventService instance {0}", eventService); - this.eventService = eventService; - listener = new WebServiceRefExtensionListener(); - eventService.registerListener(listener, Embedded.NAMING_EXTENSION_POINT); - } - - public void unbindEventService(final IEventService eventService) { - this.eventService.unregisterListener(listener); - this.eventService = null; - } - private String findUniqueContextName(final ServletContext context) { - return context.getRealPath("/"); - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JOnASJaxWsImplementorInfo.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JOnASJaxWsImplementorInfo.java deleted file mode 100644 index 8dcf2c114c..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JOnASJaxWsImplementorInfo.java +++ /dev/null @@ -1,163 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2; - -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceException; - -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.util.ee.metadata.ws.api.struct.IWebServiceMarker; - -/** - * The JOnASJaxWsImplementorInfo is needed because the webservices.xml infos - * can overrides some info provided by annotations. - * - * @author Guillaume Sauthier - */ -public class JOnASJaxWsImplementorInfo extends JaxWsImplementorInfo { - - private String endpointInterface; - private String protocolBinding; - private String wsdlLocation; - private QName serviceName; - private QName portName; - private boolean mtomEnabled = false; - - /** - * Construct a new implementor info object. - * @param implementorClass Implementor Class - */ - public JOnASJaxWsImplementorInfo(final Class implementorClass) { - this(implementorClass, null, null, null, null, null, false); - } - - /** - * Construct a new implementor info object. - * @param implementorClass Implementor Class - * @param info Metadata about the port being deployed - */ - public JOnASJaxWsImplementorInfo(final Class implementorClass, final IWebServiceInfo info) { - this(implementorClass, - info.getEndpointInterface(), - info.getProtocolBinding(), - info.getWsdlLocation(), - info.getServiceName(), - info.getPortName(), - info.isMTOMEnabled()); - } - - public JOnASJaxWsImplementorInfo(final Class implementorClass, final IWebServiceMarker marker) { - this(implementorClass, - marker.getEndpointInterface(), - marker.getProtocolBinding(), - marker.getWsdlLocation(), - marker.getServiceName(), - marker.getPortName(), - marker.isEnableMtom()); - } - - public JOnASJaxWsImplementorInfo(final Class implementorClass, - final String sei, - final String protocolBinding, - final String wsdlLocation, - final QName serviceName, - final QName portName, - final boolean mtomEnabled) { - super(implementorClass); - this.endpointInterface = sei; - this.protocolBinding = protocolBinding; - this.wsdlLocation = wsdlLocation; - this.serviceName = serviceName; - this.portName = portName; - this.mtomEnabled = mtomEnabled; - } - - @Override - public Class getSEIClass() { - if (this.endpointInterface != null) { - - // Load the overrided SEI class using the implementor ClassLoader - ClassLoader loader = super.getImplementorClass().getClassLoader(); - try { - return loader.loadClass(this.endpointInterface); - } catch (ClassNotFoundException e) { - throw new WebServiceException("SEI " + this.endpointInterface - + " is not accessible from ClassLoader " + loader, e); - } - } - return super.getSEIClass(); - } - - @Override - public String getBindingType() { - if (this.protocolBinding != null) { - return this.protocolBinding; - } - return super.getBindingType(); - } - - @Override - public String getWsdlLocation() { - if (this.wsdlLocation != null) { - return this.wsdlLocation; - } - return super.getWsdlLocation(); - } - - /** - * See use of targetNamespace in {@link javax.jws.WebService}. - * - * @return the qualified name of the service. - */ - @Override - public QName getServiceName() { - if (this.serviceName != null) { - return this.serviceName; - } - return super.getServiceName(); - } - - /** - * See use of targetNamespace in {@link javax.jws.WebService}. - * - * @return the qualified name of the endpoint. - */ - @Override - public QName getEndpointName() { - if (this.portName != null) { - return this.portName; - } - return super.getEndpointName(); - } - - /** - * @return true if MTOM is enabled, else false. - */ - public boolean isMTOMEnabled() { - return mtomEnabled; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JaxWsImplementorInfo.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JaxWsImplementorInfo.java deleted file mode 100644 index 5820c547f7..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/JaxWsImplementorInfo.java +++ /dev/null @@ -1,323 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; - -import javax.jws.WebService; -import javax.xml.namespace.QName; -import javax.xml.ws.BindingType; -import javax.xml.ws.Provider; -import javax.xml.ws.Service; -import javax.xml.ws.ServiceMode; -import javax.xml.ws.WebServiceException; -import javax.xml.ws.WebServiceProvider; -import javax.xml.ws.soap.SOAPBinding; - -import org.ow2.jonas.ws.axis2.util.JAXWSUtils; - -public class JaxWsImplementorInfo { - - private Class implementorClass; - - private Class seiClass; - - private List wsAnnotations = new ArrayList(2); - - private WebServiceProvider wsProviderAnnotation; - - public JaxWsImplementorInfo(final Class ic) { - implementorClass = ic; - initialize(); - } - - public Class getSEIClass() { - return seiClass; - } - - public Class getImplementorClass() { - return implementorClass; - } - - public Class getEndpointClass() { - Class endpointInterface = getSEIClass(); - if (null == endpointInterface) { - endpointInterface = getImplementorClass(); - } - return endpointInterface; - } - - public String getWsdlLocation() { - for (WebService service : wsAnnotations) { - if (!JAXWSUtils.isEmpty(service.wsdlLocation())) { - return service.wsdlLocation(); - } - } - - if (null != wsProviderAnnotation && !JAXWSUtils.isEmpty(wsProviderAnnotation.wsdlLocation())) { - return wsProviderAnnotation.wsdlLocation(); - } - return null; - } - - /** - * See use of targetNamespace in {@link WebService}. - * @return the qualified name of the service. - */ - public QName getServiceName() { - String serviceName = null; - String namespace = null; - - // serviceName cannot be specified on SEI so check impl class only - if (wsAnnotations.size() > 0) { - int offset = 1; - if (seiClass == null) { - offset = 0; - } - // traverse up the parent impl classes for this info as well, but - // not the last one which would be the sei annotation - for (int x = 0; x < wsAnnotations.size() - offset; x++) { - if (JAXWSUtils.isEmpty(serviceName)) { - serviceName = wsAnnotations.get(x).serviceName(); - } - if (JAXWSUtils.isEmpty(namespace)) { - namespace = wsAnnotations.get(x).targetNamespace(); - } - } - } - - if ((serviceName == null || namespace == null) && wsProviderAnnotation != null) { - serviceName = wsProviderAnnotation.serviceName(); - namespace = wsProviderAnnotation.targetNamespace(); - } - - if (JAXWSUtils.isEmpty(serviceName)) { - serviceName = implementorClass.getSimpleName() + "Service"; - } - - if (JAXWSUtils.isEmpty(namespace)) { - namespace = getDefaultNamespace(implementorClass); - } - - return new QName(namespace, serviceName); - } - - /** - * See use of targetNamespace in {@link WebService}. - * @return the qualified name of the endpoint. - */ - public QName getEndpointName() { - String portName = null; - String namespace = null; - String name = null; - - // portName cannot be specified on SEI so check impl class only - if (wsAnnotations.size() > 0) { - int offset = 1; - if (seiClass == null) { - offset = 0; - } - // traverse up the parent impl classes for this info as well, but - // not the last one which would be the sei annotation - for (int x = 0; x < wsAnnotations.size() - offset; x++) { - if (JAXWSUtils.isEmpty(portName)) { - portName = wsAnnotations.get(x).portName(); - } - if (JAXWSUtils.isEmpty(namespace)) { - namespace = wsAnnotations.get(x).targetNamespace(); - } - if (JAXWSUtils.isEmpty(name)) { - name = wsAnnotations.get(x).name(); - } - } - } - - if ((portName == null || namespace == null) && wsProviderAnnotation != null) { - portName = wsProviderAnnotation.portName(); - namespace = wsProviderAnnotation.targetNamespace(); - } - if (JAXWSUtils.isEmpty(portName) && !JAXWSUtils.isEmpty(name)) { - portName = name + "Port"; - } - if (JAXWSUtils.isEmpty(portName)) { - portName = implementorClass.getSimpleName() + "Port"; - } - - if (JAXWSUtils.isEmpty(namespace)) { - namespace = getDefaultNamespace(implementorClass); - } - - return new QName(namespace, portName); - } - - public QName getInterfaceName() { - String name = null; - String namespace = null; - - if (seiClass != null) { - WebService service = seiClass.getAnnotation(WebService.class); - if (!JAXWSUtils.isEmpty(service.name())) { - name = service.name(); - } - if (!JAXWSUtils.isEmpty(service.targetNamespace())) { - namespace = service.targetNamespace(); - } - } else { - for (WebService service : wsAnnotations) { - if (!JAXWSUtils.isEmpty(service.name()) && name == null) { - name = service.name(); - } - if (!JAXWSUtils.isEmpty(service.targetNamespace()) && namespace == null) { - namespace = service.targetNamespace(); - } - } - } - if (name == null) { - if (seiClass != null) { - name = seiClass.getSimpleName(); - } else if (implementorClass != null) { - name = implementorClass.getSimpleName(); - } - } - if (namespace == null) { - if (seiClass != null) { - namespace = getDefaultNamespace(seiClass); - } else if (implementorClass != null) { - namespace = getDefaultNamespace(implementorClass); - } - } - - return new QName(namespace, name); - } - - private String getDefaultNamespace(final Class clazz) { - String pkg = JAXWSUtils.getNamespace(JAXWSUtils.getPackageName(clazz)); - return JAXWSUtils.isEmpty(pkg) ? "http://unknown.namespace/" : pkg; - } - - private String getWSInterfaceName(final Class implClz) { - if (implClz.isInterface() && implClz.getAnnotation(WebService.class) != null) { - return implClz.getName(); - } - Class[] clzs = implClz.getInterfaces(); - for (Class clz : clzs) { - if (null != clz.getAnnotation(WebService.class)) { - return clz.getName(); - } - } - return null; - } - - private String getImplementorClassName() { - for (WebService service : wsAnnotations) { - if (!JAXWSUtils.isEmpty(service.endpointInterface())) { - return service.endpointInterface(); - } - } - return null; - } - - private void initialize() { - Class cls = implementorClass; - while (cls != null) { - WebService annotation = cls.getAnnotation(WebService.class); - if (annotation != null) { - wsAnnotations.add(annotation); - if (cls.isInterface()) { - cls = null; - } - } - if (cls != null) { - cls = cls.getSuperclass(); - } - } - String sei = getImplementorClassName(); - boolean seiFromWsAnnotation = true; - if (JAXWSUtils.isEmpty(sei)) { - seiFromWsAnnotation = false; - sei = getWSInterfaceName(implementorClass); - } - if (!JAXWSUtils.isEmpty(sei)) { - try { - seiClass = JAXWSUtils.loadClass(sei, implementorClass); - } catch (ClassNotFoundException ex) { - throw new WebServiceException(ex); - } - WebService seiAnnotation = seiClass.getAnnotation(WebService.class); - if (null == seiAnnotation) { - throw new WebServiceException(); - } - if (seiFromWsAnnotation - && (!JAXWSUtils.isEmpty(seiAnnotation.portName()) || !JAXWSUtils.isEmpty(seiAnnotation.serviceName()) || !JAXWSUtils.isEmpty(seiAnnotation - .endpointInterface()))) { - throw new WebServiceException(); - } - wsAnnotations.add(seiAnnotation); - } - wsProviderAnnotation = implementorClass.getAnnotation(WebServiceProvider.class); - } - - public boolean isWebServiceProvider() { - return Provider.class.isAssignableFrom(implementorClass); - } - - public WebServiceProvider getWsProvider() { - return wsProviderAnnotation; - } - - public Service.Mode getServiceMode() { - ServiceMode m = implementorClass.getAnnotation(ServiceMode.class); - if (m != null && m.value() != null) { - return m.value(); - } - return Service.Mode.PAYLOAD; - } - - public Class getProviderParameterType() { - // The Provider Implementor inherits out of Provider - Type intfTypes[] = implementorClass.getGenericInterfaces(); - for (Type t : intfTypes) { - Class clazz = JAXWSUtils.getClassFromType(t); - if (Provider.class == clazz) { - Type paramTypes[] = ((ParameterizedType) t).getActualTypeArguments(); - return JAXWSUtils.getClassFromType(paramTypes[0]); - } - } - return null; - } - - public String getBindingType() { - BindingType bType = implementorClass.getAnnotation(BindingType.class); - if (bType != null) { - return bType.value(); - } - return SOAPBinding.SOAP11HTTP_BINDING; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EJBWebserviceEndpoint.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EJBWebserviceEndpoint.java deleted file mode 100644 index e3ecb94c56..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EJBWebserviceEndpoint.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.easybeans; - -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.axis2.jaxws.Axis2WSEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.easybeans.EasyBeansContextNamingInfo; -import org.ow2.jonas.ws.jaxws.easybeans.EasyBeansSecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The EJBCXFWebserviceEndpoint is the EJB based endpoint implementation on CXF. - * - * @author Guillaume Sauthier - */ -public class Axis2EJBWebserviceEndpoint extends Axis2WSEndpoint implements IEJBWebserviceEndpoint { - - /** - * Structure holding data used to create a web context. - */ - private IContextNamingInfo contextNamingInfo; - - /** - * Security reference (may be null). - */ - private ISecurityConstraint securityConstraint; - - /** - * storage for values set during deployment. - */ - private Map deploymentInfos; - - public Axis2EJBWebserviceEndpoint(final Class endpointClass, - final PortMetaData pmd, - final StatelessSessionFactory factory, - final EZBContainer container, - final IBeanInfo info, - final URL moduleURL) { - super(endpointClass, EndpointType.EJB, pmd, factory,moduleURL); - this.contextNamingInfo = new EasyBeansContextNamingInfo(this, container, info.getName()); - this.deploymentInfos = new HashMap(); - - List roles = info.getSecurityInfo().getDeclaredRoles(); - if (roles != null && !roles.isEmpty()) { - // There are some roles declared here - securityConstraint = new EasyBeansSecurityConstraint(pmd, info); - } - } - - /** - * Get the data used to construct a web context. - * - * @return the Context naming info structure. - */ - public IContextNamingInfo getContextNamingInfo() { - return this.contextNamingInfo; - } - - /** - * Get the data structure used to secure a bean's endpoint. - * - * @return security constraint structure - */ - public ISecurityConstraint getSecurityConstraint() { - return securityConstraint; - } - - /** - * @return a map of values accessibles after web context deployment. - */ - public Map getDeploymentInfos() { - return deploymentInfos; - } - - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EjbMessageReceiver.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EjbMessageReceiver.java deleted file mode 100644 index 07ba7a69cf..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EjbMessageReceiver.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.easybeans; - -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import javax.xml.ws.Binding; -import javax.xml.ws.Provider; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.context.OperationContext; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.WSDL2Constants; -import org.apache.axis2.engine.AxisEngine; -import org.apache.axis2.engine.MessageReceiver; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.core.InvocationContextFactory; -import org.apache.axis2.jaxws.core.MessageContext; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescription; -import org.apache.axis2.jaxws.description.OperationDescription; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.axis2.jaxws.message.util.MessageUtils; -import org.apache.axis2.jaxws.server.EndpointInvocationContext; -import org.apache.axis2.jaxws.server.JAXWSMessageReceiver; -import org.apache.axis2.jaxws.core.InvocationContext; -import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants; -import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.axis2.jaxws.Axis2WSEndpoint; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Substitue axis2's MessageReceiver - * @author youchao - * @author xiaoda - */ -public class Axis2EjbMessageReceiver implements MessageReceiver { - - private static final Log LOG = LogFactory.getLog(Axis2EjbMessageReceiver.class); - - private StatelessSessionFactory factory; - - private Class serviceImplClass; - - private Axis2WSEndpoint endpoint; - - public Axis2EjbMessageReceiver(final Axis2WSEndpoint endpoint, final Class serviceImplClass, final StatelessSessionFactory factory) { - this.endpoint = endpoint; - this.serviceImplClass = serviceImplClass; - this.factory = factory; - } - - public void receive(final org.apache.axis2.context.MessageContext axisMsgCtx) throws AxisFault { - MessageContext requestMsgCtx = new MessageContext(axisMsgCtx); - - // init some bits - requestMsgCtx.setOperationName(requestMsgCtx.getAxisMessageContext().getAxisOperation().getName()); - requestMsgCtx.setEndpointDescription(getEndpointDescription(requestMsgCtx)); - - Method method = null; - if (Provider.class.isAssignableFrom(this.serviceImplClass)) { - method = getProviderMethod(); - } else { - requestMsgCtx.setOperationDescription(getOperationDescription(requestMsgCtx)); - method = getServiceMethod(requestMsgCtx); - } - - if (LOG.isDebugEnabled()) { - LOG.debug("Invoking '" + method.getName() + "' method."); - } - - AxisOperation operation = requestMsgCtx.getAxisMessageContext().getAxisOperation(); - String mep = operation.getMessageExchangePattern(); - - //Use our own controller - Axis2EndpointController controller = new Axis2EndpointController(factory); - Binding binding = (Binding) requestMsgCtx.getAxisMessageContext().getProperty(JAXWSMessageReceiver.PARAM_BINDING); - EndpointInvocationContext ic = InvocationContextFactory.createEndpointInvocationContext(binding); - ic.setRequestMessageContext(requestMsgCtx); - - // invoke by Axis2EndpointController - controller.invoke(ic); - - MessageContext responseMsgCtx = ic.getResponseMessageContext(); - - // If there is a fault it could be Robust In-Only - if (!isMepInOnly(mep) || hasFault(responseMsgCtx)) { - // If this is a two-way exchange, there should already be a - // JAX-WS MessageContext for the response. We need to pull - // the Message data out of there and set it on the Axis2 - // MessageContext. - org.apache.axis2.context.MessageContext axisResponseMsgCtx = responseMsgCtx.getAxisMessageContext(); - - MessageUtils.putMessageOnMessageContext(responseMsgCtx.getMessage(), axisResponseMsgCtx); - - OperationContext opCtx = axisResponseMsgCtx.getOperationContext(); - opCtx.addMessageContext(axisResponseMsgCtx); - - // If this is a fault message, we want to throw it as an - // exception so that the transport can do the appropriate things - if (responseMsgCtx.getMessage().isFault()) { - throw new AxisFault("An error was detected during JAXWS processing", axisResponseMsgCtx); - } else { - AxisEngine.send(axisResponseMsgCtx); - } - } - } - - private boolean hasFault(final MessageContext responseMsgCtx) { - if (responseMsgCtx == null || responseMsgCtx.getMessage() == null) { - return false; - } - return responseMsgCtx.getMessage().isFault(); - } - - private boolean isMepInOnly(final String mep) { - boolean inOnly = mep.equals(WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY) - || mep.equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY) || mep.equals(WSDL2Constants.MEP_URI_IN_ONLY) - || mep.equals(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY) || mep.equals(WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY) - || mep.equals(WSDL20_2006Constants.MEP_URI_IN_ONLY); - return inOnly; - } - - private Method getServiceMethod(final MessageContext mc) { - OperationDescription opDesc = mc.getOperationDescription(); - if (opDesc == null) { - throw ExceptionFactory.makeWebServiceException("Operation Description was not set"); - } - - Method returnMethod = opDesc.getMethodFromServiceImpl(this.serviceImplClass); - if (returnMethod == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("JavaBeanDispatcherErr1")); - } - - return returnMethod; - } - - private OperationDescription getOperationDescription(final MessageContext mc) { - EndpointDescription ed = mc.getEndpointDescription(); - EndpointInterfaceDescription eid = ed.getEndpointInterfaceDescription(); - - OperationDescription[] ops = eid.getDispatchableOperation(mc.getOperationName()); - if (ops == null || ops.length == 0) { - throw ExceptionFactory - .makeWebServiceException("No operation found. WSDL Operation name: " + mc.getOperationName()); - } - if (ops.length > 1) { - throw ExceptionFactory - .makeWebServiceException("More than one operation found. Overloaded WSDL operations are not supported. WSDL Operation name: " - + mc.getOperationName()); - } - OperationDescription op = ops[0]; - return op; - } - - private EndpointDescription getEndpointDescription(final MessageContext mc) { - AxisService axisSvc = mc.getAxisMessageContext().getAxisService(); - - Parameter param = axisSvc.getParameter(EndpointDescription.AXIS_SERVICE_PARAMETER); - - EndpointDescription ed = (EndpointDescription) param.getValue(); - return ed; - } - - private Method getProviderMethod() { - try { - return this.serviceImplClass.getMethod("invoke", getProviderType()); - } catch (NoSuchMethodException e) { - throw ExceptionFactory.makeWebServiceException("Could not get Provider.invoke() method"); - } - } - - private Class getProviderType() { - Class providerType = null; - - Type[] giTypes = this.serviceImplClass.getGenericInterfaces(); - for (Type giType : giTypes) { - ParameterizedType paramType = null; - try { - paramType = (ParameterizedType) giType; - } catch (ClassCastException e) { - throw ExceptionFactory - .makeWebServiceException("Provider based SEI Class has to implement javax.xml.ws.Provider as javax.xml.ws.Provider, javax.xml.ws.Provider, javax.xml.ws.Provider or javax.xml.ws.Provider"); - } - Class interfaceName = (Class) paramType.getRawType(); - - if (interfaceName == javax.xml.ws.Provider.class) { - if (paramType.getActualTypeArguments().length > 1) { - throw ExceptionFactory - .makeWebServiceException("Provider cannot have more than one Generic Types defined as Per JAX-WS Specification"); - } - providerType = (Class) paramType.getActualTypeArguments()[0]; - } - } - return providerType; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointController.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointController.java deleted file mode 100644 index d959a6f3a4..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointController.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans; - -import javax.xml.ws.Provider; - -import org.apache.axis2.jaxws.core.MessageContext; -import org.apache.axis2.jaxws.server.EndpointController; -import org.apache.axis2.jaxws.server.dispatcher.EndpointDispatcher; -import org.apache.axis2.jaxws.server.dispatcher.ProviderDispatcher; -import org.ow2.easybeans.api.bean.EasyBeansSLSB; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.util.pool.api.Pool; - -/** - * Rewrite EndpointController to use our own dispather class - * @author youchao - * @author xiaoda - */ -public class Axis2EndpointController extends EndpointController { - - /** - * The corresponding ejb's factory which can get instance - */ - private StatelessSessionFactory factory = null; - - /** - * Constructor - * @param factory The corresponding ejb's factory which can get instance - */ - public Axis2EndpointController(final StatelessSessionFactory factory) { - this.factory = factory; - } - - /** - * @see org.apache.axis2.jaxws.server.EndpointController#getEndpointDispatcher(java.lang.Class, java.lang.Object) - * Use our own dispathers - */ - @Override - protected EndpointDispatcher getEndpointDispatcher(final Class serviceImplClass, final Object serviceInstance) throws Exception { - if (Provider.class.isAssignableFrom(serviceImplClass)) { - return new ProviderDispatcher(serviceImplClass, serviceInstance); - } else { - //Get ejb pool instance - Pool pool = factory.getPool(); - EasybeansAxis2Invoker easybeansAxis2Invoker = new EasybeansAxis2Invoker(pool); - //use our own dispather class - return new Axis2ServiceDispatcher(serviceImplClass, easybeansAxis2Invoker); - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManager.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManager.java deleted file mode 100644 index 53fd312dba..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManager.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans; - -import org.apache.axis2.jaxws.core.MessageContext; -import org.apache.axis2.jaxws.injection.ResourceInjectionException; -import org.apache.axis2.jaxws.lifecycle.LifecycleException; -import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleException; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; - -/** - * Axis2EndpointLifecycleManager is try to make axis2's serverinstance is null - * for EJB, and then use our own instance - * @author youchao - */ -public class Axis2EndpointLifecycleManager extends org.apache.axis2.jaxws.server.endpoint.lifecycle.impl.EndpointLifecycleManagerImpl { - - /** - * This method is called on each web service call. Make axis2's - * serverinstance is null for EJB, and then use our own instance - * @throws ResourceInjectionException - * @throws LifecycleException - */ - @Override - public Object createServiceInstance(final MessageContext context, final Class serviceClass) throws LifecycleException, ResourceInjectionException { - // TODO:just for ejb to return null now, for pojo do super is ok. - if(context.getProperty(org.ow2.jonas.ws.axis2.jaxws.Axis2WSEndpoint.END_POINT_TYPE) == IWebServiceEndpoint.EndpointType.EJB) { - return null; - } - return super.createServiceInstance(context, serviceClass); - } - - @Override - public void invokePostConstruct() throws EndpointLifecycleException { - } - - @Override - public void invokePreDestroy() throws EndpointLifecycleException { - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManagerFactory.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManagerFactory.java deleted file mode 100644 index 3fdd82ad96..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2EndpointLifecycleManagerFactory.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans; - -import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleException; -import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleManager; -import org.apache.axis2.jaxws.server.endpoint.lifecycle.factory.EndpointLifecycleManagerFactory; - -/** - * Substitue the EndpointLifecycleManagerFactory to create - * Axis2EndpointLifecycleManager - * @author youchao - */ -public class Axis2EndpointLifecycleManagerFactory implements EndpointLifecycleManagerFactory { - - private EndpointLifecycleManager lifecycleManager; - - public Axis2EndpointLifecycleManagerFactory() { - this.lifecycleManager = new Axis2EndpointLifecycleManager(); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.server.endpoint.lifecycle.factory.EndpointLifecycleManagerFactory#createEndpointLifecycleManager(java.lang.Object) - */ - public EndpointLifecycleManager createEndpointLifecycleManager(final Object endpointInstance) throws EndpointLifecycleException { - throw new UnsupportedOperationException(); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.server.endpoint.lifecycle.factory.EndpointLifecycleManagerFactory#createEndpointLifecycleManager() - */ - public EndpointLifecycleManager createEndpointLifecycleManager() { - return this.lifecycleManager; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2ServiceDispatcher.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2ServiceDispatcher.java deleted file mode 100644 index ff5c6d7995..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/Axis2ServiceDispatcher.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans; - -import java.lang.reflect.Method; - -import org.apache.axis2.jaxws.core.MessageContext; -import org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher; - -/** - * Dispatchers that get instace from ejb's pool - * @author youchao - */ -public class Axis2ServiceDispatcher extends JavaBeanDispatcher { - - private EasybeansAxis2Invoker easybeansAxis2Invoker = null; - - public Axis2ServiceDispatcher(final Class implClass, final EasybeansAxis2Invoker easybeansAxis2Invoker) { - super(implClass, null); - this.easybeansAxis2Invoker = easybeansAxis2Invoker; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.server.dispatcher.JavaBeanDispatcher#invokeService(org.apache.axis2.jaxws.core.MessageContext, java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) - */ - //@Override - protected Object invokeService(final MessageContext ctx, final Method method, final Object obj, final Object args[]) throws Exception { - Object instance = null; - try { - //Get the ejb instance from pool - instance = easybeansAxis2Invoker.getServiceObject(); - //invoke it - return method.invoke(instance, args); - } catch (Exception e) { - e.printStackTrace(); - } finally { - //return the ejb instance to pool - easybeansAxis2Invoker.releaseServiceObject(instance); - } - return null; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/EasybeansAxis2Invoker.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/EasybeansAxis2Invoker.java deleted file mode 100644 index d46a947c74..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/EasybeansAxis2Invoker.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans; - -import org.apache.axis2.AxisFault; -import org.ow2.easybeans.api.bean.EasyBeansSLSB; -import org.ow2.util.pool.api.Pool; -import org.ow2.util.pool.api.PoolException; - -/** - * EasyBeans invoker that will take an instance from the pool, call the method - * and then put it back in the pool. - * @author youchao - */ -public class EasybeansAxis2Invoker { - - private Pool pool = null; - - /** - * Build a new invoker for the given stateless' pool. - * @param pool the stateless' pool of the factory - */ - public EasybeansAxis2Invoker(final Pool pool) { - this.pool = pool; - } - - /** - * Creates and returns a service object - */ - public Object getServiceObject() { - try { - return pool.get(); - } catch (PoolException e) { - try { - throw AxisFault.makeFault(e); - } catch (AxisFault e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - } - return null; - - } - - /** - * Called when the invoker is done with the object. Replace the bean in - * pool. - * @param context CXF Exchange - * @param obj object to be released - */ - public void releaseServiceObject(final Object obj) { - try { - pool.release((EasyBeansSLSB) obj); - } catch (PoolException e) { - try { - throw AxisFault.makeFault(e); - } catch (AxisFault e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - } - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/Axis2ConfigurationExtension.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/Axis2ConfigurationExtension.java deleted file mode 100644 index 3eaa6cb237..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/Axis2ConfigurationExtension.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans.ext; - -import org.ow2.easybeans.api.EZBContainerConfig; -import org.ow2.easybeans.api.EZBConfigurationExtension; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; - -/** - * Called by Easybeans Runtime to provide a Hook for Axis2. - * @author youchao - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public class Axis2ConfigurationExtension implements EZBConfigurationExtension { - - /** - * Inner callback. - */ - private LifeCycleCallback lifeCycleCallback; - - public Axis2ConfigurationExtension() { - // Init the callback before configuration of the EZBContainerConfig - lifeCycleCallback = new LifeCycleCallback(); - } - - /** - * Adapt the given configuration. - * @param easybeansContainerConfig JContainerConfig instance. - */ - public void configure(final EZBContainerConfig easybeansContainerConfig) { - - // TODO: add injections - // create the ResourceInjector to add - JAXWS20ResourceInjector resourceInjector = new JAXWS20ResourceInjector(); - - // add them in the Configuration - easybeansContainerConfig.addCallback(lifeCycleCallback); - easybeansContainerConfig.addInjectors(resourceInjector); - } - - /** - * Bind an {@link IWebDeployer} that will be used to - * deploy web services enabled EjbJars - * @param deployer deployer manager - */ - public void bindWebDeployer(final IWebDeployer deployer) { - lifeCycleCallback.setWebDeployer(deployer); - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/JAXWS20ResourceInjector.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/JAXWS20ResourceInjector.java deleted file mode 100644 index 4ed1299272..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/JAXWS20ResourceInjector.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.easybeans.ext; - -import org.ow2.easybeans.api.bean.EasyBeansBean; -import org.ow2.easybeans.container.EmptyResourceInjector; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * Inject JAX-WS 2.x Resource (WebServiceContext) into the EasyBeans EJB instance. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public class JAXWS20ResourceInjector extends EmptyResourceInjector { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JAXWS20ResourceInjector.class); - - /** - * The processor. - */ - private IAnnotationProcessor processor = null; - - public JAXWS20ResourceInjector() { - processor = new DefaultAnnotationProcessor(); - processor.addAnnotationHandler(new WebServiceContextInjectionHandler()); - } - - /** - * Called before EasyBeans resolution and injection of dependencies. - * @param bean the Bean instance. - */ - @Override - public void preEasyBeansInject(final EasyBeansBean bean) { - // Will inject only @Resource WebServiceContext - try { - processor.process(bean); - } catch (ProcessorException e) { - logger.info("Cannot inject WebServiceContext in bean {0}", bean, e); - } - - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/LifeCycleCallback.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/LifeCycleCallback.java deleted file mode 100644 index 41601f6278..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/LifeCycleCallback.java +++ /dev/null @@ -1,403 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.easybeans.ext; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jws.HandlerChain; -import javax.jws.WebService; - -import org.ow2.easybeans.api.EZBContainerCallbackInfo; -import org.ow2.easybeans.api.Factory; -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.easybeans.container.EmptyLifeCycleCallBack; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.axis2.JOnASJaxWsImplementorInfo; -import org.ow2.jonas.ws.axis2.JaxWsImplementorInfo; -import org.ow2.jonas.ws.axis2.easybeans.Axis2EJBWebserviceEndpoint; -import org.ow2.jonas.ws.axis2.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesModule; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.jonas.ws.jaxws.util.JAXWSClassUtils; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Callback for Axis2. - * @author youchao - * @author Guillaume Sauthier - * @author Florent Benoit - * @author xiaoda - */ -public class LifeCycleCallback extends EmptyLifeCycleCallBack { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(LifeCycleCallback.class); - - - - /** - * List of deployed endpoints. - */ - private List endpoints = new ArrayList(); - - /** - * A Module that contains WSContainer and Endpoints. - */ - private Map>> modules; - - /** - * The Web Deployer used to configure Web contexts for the endpoints. - */ - private IWebDeployer webDeployer; - /** - * Construct a new Callback. - */ - public LifeCycleCallback() { - modules = new HashMap>>(); - } - - - - /** - * Called when container is starting. - * @param info some information on the container which is starting. - */ - @Override - public void start(final EZBContainerCallbackInfo info) { - - // Archive identifier - URL moduleURL; - try { - moduleURL = new URL("file:/" + info.getArchive().getName()); - } catch (MalformedURLException e2) { - // TODO Auto-generated catch block - throw new RuntimeException("the file " + info.getArchive().getName() + " does not exist!",e2); - } - String moduleName = info.getArchive().getName(); - - IWebservicesModule> module = null; - - // Iterates over the factories - Map> factories = info.getFactories(); - for (Factory f : factories.values()) { - - // Only for @Stateless - if (f instanceof StatelessSessionFactory) { - - StatelessSessionFactory factory = (StatelessSessionFactory) f; - Class klass = factory.getBeanClass(); - - // An EJB exposed as a JAX-WS web services HAS TO be annotated - // with @WebService - WebService ws = klass.getAnnotation(WebService.class); - - // An EJB exposed as a JAX-WS web services HAS TO be annotated - // with @WebService or @WebServiceProvider - if (JAXWSClassUtils.isWebService(klass)) { - - // Extract merged webservices deploy time informations - IBeanInfo beanInfo = factory.getBeanInfo(); - IWebServiceInfo webServiceInfo = beanInfo.getWebServiceInfo(); - - - JOnASJaxWsImplementorInfo jaxWsImplementorInfo; - if (webServiceInfo != null) { - jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass, webServiceInfo); - } else { - jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass); - } - - - // Get the WSModule for this archive if not already set - module = modules.get(moduleName); - if (module == null) { - module = createWebservicesModule(moduleName); - modules.put(moduleName, module); - } - - - // Get a Container for all services deployed using the same WSDL - WebservicesContainer container = module.findContainer(jaxWsImplementorInfo.getWsdlLocation()); - if (container == null) { - // Create a new Container - container = createWebservicesContainer(jaxWsImplementorInfo.getWsdlLocation()); - module.addContainer(container); - } - - String wsdlLocation = jaxWsImplementorInfo.getWsdlLocation(); - - if (wsdlLocation == null || wsdlLocation.equals("")) { - logger.warn("The wsdl location is not specified!"); - } - - // But values could be overrided - // TODO: use the merged metadata here ! - String serviceName = jaxWsImplementorInfo.getServiceName().getLocalPart();//ws.serviceName(); - //String portName = ws.portName(); - //String name = ws.name(); - - // find the URL pattern to use - String pattern = getUrlPattern(klass, webServiceInfo, jaxWsImplementorInfo); - - // Creates PortMetaData to hold deployment/runtime - // information - // about the web service - PortMetaData pmd = new PortMetaData(); - String contextRoot = extractContextRoot(info.getArchive().getName()); - - StringBuffer handlerXML = new StringBuffer(); - try { - HandlerChain hc = klass.getAnnotation(HandlerChain.class); - - if (hc != null) { - URL handlerURL = klass.getClassLoader().getResource(hc.file()); - BufferedReader br = new BufferedReader(new InputStreamReader(handlerURL.openStream())); - - String temp = null; - temp = br.readLine(); - while (temp != null) { - handlerXML.append(temp); - temp = br.readLine(); - } - pmd.setHandlerXML(handlerXML.toString()); - } - - } catch (IOException e) { - throw new RuntimeException("Unable to Get the handler description file for " + serviceName + "!", e); - } finally { - if(pmd.getHandlerXML() != null) { - logger.debug("Found handlers in this package!"); - } - } - - - - pmd.setContextRoot(contextRoot); - pmd.setUrlPattern(pattern); - if (wsdlLocation != null && !wsdlLocation.equals("")) { - pmd.setWSDLLocation(wsdlLocation); - } - - //logger.info("PortMetaData [context:{0}, pattern:{1}]", pmd.getContextRoot(), pmd.getUrlPattern()); - - ClassLoader old = Thread.currentThread().getContextClassLoader(); - - Thread.currentThread().setContextClassLoader(klass.getClassLoader()); - Axis2EJBWebserviceEndpoint endpoint; - try { - //Axis2WSEndpoint endpoint = new Axis2WSEndpoint(klass, IWebServiceEndpoint.EndpointType.EJB, pmd, factory); - // Wraps the Endpoint into our own IWSEndpoint implementation - endpoint = new Axis2EJBWebserviceEndpoint( - klass, - pmd, - factory, - info.getContainer(), - beanInfo, - moduleURL); - - // init axis2 - endpoint.init(); - } catch (Exception e1) { - //e1.printStackTrace(); - throw new RuntimeException("Exception occurs when creating endpoint for" + serviceName + "!",e1); - } finally { - // reset - Thread.currentThread().setContextClassLoader(old); - } - container.addEndpoint(endpoint); - - } - } - } - - if(module != null) { - module.start(); - - try { - - // Deploy the web context of the endpoints - webDeployer.deploy(module); - // WSDL publication - for (WebservicesContainer container : module.getContainers()) { - - // Attempt to publish the service's WSDLs - // publishWSDL(container); - - // Display the endpoint's URLs - for (Axis2EJBWebserviceEndpoint endpoint : container.getEndpoints()) { - endpoint.displayInfos(); - } - } - - } catch (WSException e) { - // Display a warning - logger.warn("Webservices endpoints of the EjbJar ''{0}'' cannot be deployed because of some error: {1}", - info.getContainer().getName(), - e.getMessage(), - e); - - // An exception occured, cleanup - webDeployer.undeploy(module); - stopWebservicesModule(module); - modules.remove(moduleName); - } - - - } - - } - - /** - * Extract a context-root name from the archive filename. - * @param filename archive filename - * @return a context-root which is the last part of the filename minus the extension - */ - private static String extractContextRoot(final String filename) { - // Remove everything before the last '/' - String context = filename.substring(filename.lastIndexOf(File.separator) + 1); - int underscoreIndex = context.indexOf('_'); - if (underscoreIndex == -1) { - // Cut before the last '.' - context = context.substring(0, context.lastIndexOf('.')); - } else { - // Cut before the first '_' for unpacked archives with timestamp - context = context.substring(0, underscoreIndex); - } - return context; - } - - /** - * Called when container is stopping. - * @param info some information on the container which is stopping. - */ - @Override - public void stop(final EZBContainerCallbackInfo info) { - stop(); - logger.info("axis2 stopped for " + info.getArchive()); - } - - /** - * This stop method is not directly called by the EJB container. The - * lifecycle object itself has decided to stop (maybe one of its - * dependencies is now unavailable) - */ - public void stop() { - logger.debug("Stop ''{0}''", this); - - // Stop all the modules - for (Map.Entry>> entry : modules.entrySet()) { - IWebservicesModule> module = entry.getValue(); - // Stop the module - stopWebservicesModule(module); - } - // Clear the map - modules.clear(); - } - - /** - * Stop the given module. - * @param module module to be stopped - */ - private void stopWebservicesModule(final IWebservicesModule> module) { - - - // Need to unregister the endpoints - webDeployer.undeploy(module); - - // It will recursively stop containers and endpoints - module.stop(); - } - - - /** - * Get a valid URL pattern from available deployment info. - * TODO Should be moved inside the IWebDeployer (another strategy ?) - * @param klass endpoint class - * @param webServiceInfo easybeans.xml infos - * @param jaxWsImplementorInfo merged deployment info - * @return a valid url pattern - */ - private String getUrlPattern(final Class klass, - final IWebServiceInfo webServiceInfo, - final JaxWsImplementorInfo jaxWsImplementorInfo) { - - String pattern; - - // If user has specified an endpoint address, use it - if ((webServiceInfo != null) && (webServiceInfo.getEndpointAddress() != null)) { - - // User defined address - pattern = webServiceInfo.getEndpointAddress(); - if (!pattern.startsWith("/")) { - // Pattern needs to start with a '/' - pattern = "/" + pattern; - } - } else { - - // Default naming strategy - String serviceName = jaxWsImplementorInfo.getServiceName().getLocalPart(); - if (!"".equals(serviceName)) { - // default pattern : /{service-name} - pattern = "/" + serviceName; - } else { - // else /{class-name}Service - pattern = "/" + klass.getSimpleName() + "Service"; - } - } - return pattern; - } - - /** - * Set the web deployer to be used to manage web contexts. - * @param webDeployer deployer - */ - public void setWebDeployer(final IWebDeployer webDeployer) { - this.webDeployer = webDeployer; - } - - protected JAXWSWebservicesModule> createWebservicesModule(final String name) { - return new JAXWSWebservicesModule>(name); - } - protected WebservicesContainer createWebservicesContainer(final String name) { - return new WebservicesContainer(name); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/WebServiceContextInjectionHandler.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/WebServiceContextInjectionHandler.java deleted file mode 100644 index bc7c910211..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/easybeans/ext/WebServiceContextInjectionHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.easybeans.ext; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import javax.annotation.Resource; -import javax.xml.ws.WebServiceContext; - -import org.apache.axis2.jaxws.context.WebServiceContextImpl; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.annotation.processor.handler.AbstractInjectionHandler; - -/** - * React to @Resource on WebServiceContext. - */ -public class WebServiceContextInjectionHandler extends AbstractInjectionHandler { - - /** - * Supports @Resource annotation only - * @param aClass - * @return true if the annotation is a Resource - */ - public boolean isSupported(final Class aClass) { - return Resource.class.equals(aClass); - } - - @Override - public void process(final Annotation annotation, final Field field, final Object o) throws ProcessorException { - if (WebServiceContext.class.equals(field.getType())) { - doInjectField(field, o, new WebServiceContextImpl()); - } - } - - @Override - public void process(final Annotation annotation, final Method method, final Object o) throws ProcessorException { - if (method.getParameterTypes().length == 1) { - if (WebServiceContext.class.equals(method.getParameterTypes()[0])) { - doInjectMethod(method, o, new WebServiceContextImpl()); - } - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2RequestResponseTransport.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2RequestResponseTransport.java deleted file mode 100644 index 2ee6b21078..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2RequestResponseTransport.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.http; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.util.concurrent.CountDownLatch; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.context.MessageContext; -import org.apache.axis2.transport.RequestResponseTransport; -import org.ow2.jonas.ws.jaxws.IWSResponse; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -public class Axis2RequestResponseTransport implements RequestResponseTransport { - - private static final Log LOG = LogFactory.getLog(Axis2RequestResponseTransport.class); - - private IWSResponse response; - - private CountDownLatch responseReadySignal = new CountDownLatch(1); - - private RequestResponseTransportStatus status = RequestResponseTransportStatus.INITIAL; - - private AxisFault faultToBeThrownOut = null; - - private boolean responseWritten; - - public Axis2RequestResponseTransport(final IWSResponse response) { - this.response = response; - } - - public void acknowledgeMessage(final MessageContext msgContext) throws AxisFault { - LOG.debug("acknowledgeMessage"); - LOG.debug("Acking one-way request"); - - response.setContentType("text/xml; charset=" + msgContext.getProperty("message.character-set-encoding")); - - response.setStatus(HttpURLConnection.HTTP_ACCEPTED); - try { - response.flushBuffer(); - } catch (IOException e) { - throw new AxisFault("Error sending acknowledgement", e); - } - - signalResponseReady(); - } - - public void awaitResponse() throws InterruptedException, AxisFault { - LOG.debug("Blocking servlet thread -- awaiting response"); - status = RequestResponseTransportStatus.WAITING; - responseReadySignal.await(); - if (faultToBeThrownOut != null) { - throw faultToBeThrownOut; - } - } - - public void signalFaultReady(final AxisFault fault) { - faultToBeThrownOut = fault; - signalResponseReady(); - } - - public void signalResponseReady() { - LOG.debug("Signalling response available"); - status = RequestResponseTransportStatus.SIGNALLED; - responseReadySignal.countDown(); - } - - public RequestResponseTransportStatus getStatus() { - return status; - } - - public boolean isResponseWritten() { - return responseWritten; - } - - public void setResponseWritten(final boolean responseWritten) { - this.responseWritten = responseWritten; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2TransportInfo.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2TransportInfo.java deleted file mode 100644 index 00df78ac60..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/Axis2TransportInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.http; - -import org.apache.axis2.transport.OutTransportInfo; -import org.apache.axis2.transport.http.HTTPConstants; -import org.ow2.jonas.ws.jaxws.IWSResponse; - -/** - * Wrap IWSResponse to fit axis2's OutTransportInfo - * @author youchao - */ -public class Axis2TransportInfo implements OutTransportInfo { - private IWSResponse response; - - public Axis2TransportInfo(final IWSResponse response) { - this.response = response; - } - - public void setContentType(final String contentType) { - response.setHeader(HTTPConstants.HEADER_CONTENT_TYPE, contentType); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/AxisServiceGenerator.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/AxisServiceGenerator.java deleted file mode 100644 index 43445953e2..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/AxisServiceGenerator.java +++ /dev/null @@ -1,700 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.http; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import javax.jws.WebService; -import javax.wsdl.Binding; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.WSDLException; -import javax.wsdl.extensions.http.HTTPBinding; -import javax.wsdl.extensions.soap.SOAPBinding; -import javax.wsdl.extensions.soap12.SOAP12Binding; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceException; - -import org.apache.axis2.Constants; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; -import org.apache.axis2.engine.MessageReceiver; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.description.DescriptionFactory; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.ServiceDescription; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.WebServiceAnnot; -import org.apache.axis2.jaxws.description.builder.WebServiceProviderAnnot; -import org.apache.axis2.jaxws.description.builder.WsdlComposite; -import org.apache.axis2.jaxws.description.builder.WsdlGenerator; -import org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter; -import org.apache.axis2.jaxws.server.JAXWSMessageReceiver; -import org.apache.axis2.wsdl.WSDLUtil; -import org.apache.ws.commons.schema.utils.NamespaceMap; -import org.ow2.jonas.ws.axis2.util.JAXWSUtils; -import org.ow2.jonas.ws.axis2.util.SimpleWSDLLocator; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -/** - * Get service description from class or wsdl If the service impl is ejb, use - * Axis2MessageReceiver, if it is pojo, use its own JAXWSMessageReceiver - * @author youchao - * @author xiaoda - */ -public class AxisServiceGenerator { - private static final Log log = LogFactory.getLog(AxisServiceGenerator.class); - - /** - * Corresponding MessageReceiver for pojo or ejb - */ - private MessageReceiver messageReceiver; - - public AxisServiceGenerator() { - this.messageReceiver = new JAXWSMessageReceiver(); - } - - /** - * Set method - * @param messageReceiver Corresponding MessageReceiver for pojo or ejb - */ - public void setMessageReceiver(final MessageReceiver messageReceiver) { - this.messageReceiver = messageReceiver; - } - - /** - * This method will be used to determine if a given DBC represents a Web service - * implementation. - * - * @param dbc - DescriptionBuilderComposite - * @return - boolean - */ - private static boolean isImpl(final DescriptionBuilderComposite dbc) { - if (!dbc.isInterface() - && (dbc.getWebServiceAnnot() != null || dbc - .getWebServiceProviderAnnot() != null)) { - return true; - } - return false; - } - - /** @throws MalformedURLException - * @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(Class) */ - public static ServiceDescription createServiceDescription(final Class serviceImplClass, final ConfigurationContext configurationContext, final PortMetaData pmd) throws MalformedURLException { - ServiceDescription serviceDesc = null; - - if (serviceImplClass != null) { - JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); - HashMap dbcMap = converter.produceDBC(); - - - List serviceDescriptionList = new ArrayList(); - - DescriptionBuilderComposite serviceImplComposite = null; - for (Iterator nameIter = dbcMap.values() - .iterator(); nameIter.hasNext();) { - DescriptionBuilderComposite tmpComposite = nameIter.next(); - if (isImpl(tmpComposite)) { - serviceImplComposite = tmpComposite; - } - } - - dbcMap.remove(serviceImplComposite.getClassName()); - URL wsdlURL = null; - WebService ws = serviceImplClass.getAnnotation(WebService.class); - - if(pmd.getWSDLLocation()!=null) { - wsdlURL = serviceImplClass.getClassLoader().getResource(pmd.getWSDLLocation()); - } - - List serviceDescList = new ArrayList(); - if (ws != null && wsdlURL == null && ws.wsdlLocation() != null && !"".equals(ws.wsdlLocation())) { - wsdlURL = new URL(ws.wsdlLocation()); - serviceImplComposite.setwsdlURL(wsdlURL); - dbcMap.put(serviceImplComposite.getClassName(), serviceImplComposite); - serviceDescList = org.ow2.jonas.ws.axis2.jaxws.description.impl.DescriptionFactoryImpl - .createServiceDescriptionFromDBCMap(dbcMap,configurationContext); - } else if (wsdlURL != null) { - serviceImplComposite.setwsdlURL(wsdlURL); - dbcMap.put(serviceImplComposite.getClassName(), serviceImplComposite); - serviceDescList = org.ow2.jonas.ws.axis2.jaxws.description.impl.DescriptionFactoryImpl - .createServiceDescriptionFromDBCMap(dbcMap,configurationContext); - } else { - serviceDescList.add(org.ow2.jonas.ws.axis2.jaxws.description.impl.DescriptionFactoryImpl - .createServiceDescription(serviceImplClass)); - } - - - - - if (serviceDescList != null && serviceDescList.size() > 0) { - serviceDesc = serviceDescList.get(0); - - log.debug("ServiceDescription created with class: {0}", serviceImplClass); - log.debug(serviceDesc); - - } else { - if (log.isDebugEnabled()) { - log.debug("ServiceDesciption was not created for class: " + serviceImplClass); - } - // TODO: NLS & RAS - throw ExceptionFactory.makeWebServiceException( - "A ServiceDescription was not created for " + serviceImplClass); - } - } - return serviceDesc; - } - - /* - // @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescriptionFromDBCMap(HashMap) - public static List createServiceDescriptionFromDBCMap( - final HashMap dbcMap, final ConfigurationContext configContext) { - if (log.isDebugEnabled()) { - log.debug("createServiceDescriptionFromDBCMap(Hashmap,ConfigurationContext " ); - } - - List serviceDescriptionList = new ArrayList(); - for (Iterator nameIter = dbcMap.values() - .iterator(); nameIter.hasNext();) { - DescriptionBuilderComposite serviceImplComposite = nameIter.next(); - if (isImpl(serviceImplComposite)) { - // process this impl class - - org.ow2.jonas.ws.axis2.jaxws.description.impl.ServiceDescriptionImpl serviceDescription = new org.ow2.jonas.ws.axis2.jaxws.description.impl.ServiceDescriptionImpl( - dbcMap, serviceImplComposite, configContext); - ServiceDescriptionValidator validator = new ServiceDescriptionValidator(serviceDescription); - if (validator.validate()) { - serviceDescriptionList.add(serviceDescription); - if (log.isDebugEnabled()) { - log.debug("Service Description created from DescriptionComposite: " + - serviceDescription); - } - } -// } else { -// -// String msg = Messages.getMessage("createSrvcDescrDBCMapErr", -// validator.toString(), -// serviceImplComposite.toString(), -// serviceDescription.toString()); -// throw ExceptionFactory.makeWebServiceException(msg); -// } - } else { - if (log.isDebugEnabled()) { - log.debug("DBC is not a service impl: " + serviceImplComposite.toString()); - } - } - } - - // TODO: Process all composites that are WebFaults...current thinking is - // that - // since WebFault annotations only exist on exception classes, then they - // should be processed by themselves, and at this level - - return serviceDescriptionList; - } -*/ - /** - * Make AxisService from the service impl class - * @param endpointClass - * @return - * @throws Exception - */ - public AxisService getServiceFromClass(final Class endpointClass,final ConfigurationContext configurationContext,final PortMetaData pmd) throws Exception { - ServiceDescription serviceDescription = createServiceDescription(endpointClass,configurationContext, pmd);//DescriptionFactory.createServiceDescription(endpointClass); - EndpointDescription[] edArray = serviceDescription.getEndpointDescriptions(); - AxisService service = edArray[0].getAxisService(); - - if (service.getNameSpacesMap() == null) { - NamespaceMap map = new NamespaceMap(); - map.put(Java2WSDLConstants.AXIS2_NAMESPACE_PREFIX, Java2WSDLConstants.AXIS2_XSD); - map.put(Java2WSDLConstants.DEFAULT_SCHEMA_NAMESPACE_PREFIX, Java2WSDLConstants.URI_2001_SCHEMA_XSD); - service.setNameSpacesMap(map); - } - - String endpointClassName = endpointClass.getName(); - ClassLoader classLoader = endpointClass.getClassLoader(); - - service.addParameter(new Parameter(Constants.SERVICE_CLASS, endpointClassName)); - service.setClassLoader(classLoader); - - for (Iterator opIterator = service.getOperations(); opIterator.hasNext();) { - AxisOperation operation = opIterator.next(); - operation.setMessageReceiver(this.messageReceiver); - } - - Parameter serviceDescriptionParam = new Parameter(EndpointDescription.AXIS_SERVICE_PARAMETER, edArray[0]); - service.addParameter(serviceDescriptionParam); - - return service; - } - - /** - * Make AxisService from wsdl file - * @param portInfo - * @param endpointClass - * @param configurationBaseUrl - * @return - * @throws Exception - */ - // public AxisService getServiceFromWSDL(final PortInfo portInfo, final - // Class endpointClass, final URL configurationBaseUrl) - // throws Exception { - // String wsdlFile = portInfo.getWsdlFile(); - // if (wsdlFile == null || wsdlFile.equals("")) { - // throw new Exception("WSDL file is required."); - // } - // - // String endpointClassName = endpointClass.getName(); - // ClassLoader classLoader = endpointClass.getClassLoader(); - // - // QName serviceQName = portInfo.getWsdlService(); - // if (serviceQName == null) { - // serviceQName = JAXWSUtils.getServiceQName(endpointClass); - // } - // - // QName portQName = portInfo.getWsdlPort(); - // if (portQName == null) { - // portQName = JAXWSUtils.getPortQName(endpointClass); - // } - // - // Definition wsdlDefinition = readWSDL(wsdlFile, configurationBaseUrl, - // classLoader); - // - // Service wsdlService = wsdlDefinition.getService(serviceQName); - // if (wsdlService == null) { - // throw new Exception("Service '" + serviceQName + "' not found in WSDL"); - // } - // - // Port port = wsdlService.getPort(portQName.getLocalPart()); - // if (port == null) { - // throw new Exception("Port '" + portQName.getLocalPart() + "' not found in - // WSDL"); - // } - // - // Binding binding = port.getBinding(); - // List extElements = binding.getExtensibilityElements(); - // Iterator extElementsIterator = extElements.iterator(); - // String bindingS = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING; // - // // this is the default. - // while (extElementsIterator.hasNext()) { - // Object o = extElementsIterator.next(); - // if (o instanceof SOAPBinding) { - // SOAPBinding sp = (SOAPBinding) o; - // if - // (sp.getElementType().getNamespaceURI().equals("http://schemas.xmlsoap.org/wsdl/soap/")) - // { - // // todo: how to we tell if it is MTOM or not. - // bindingS = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING; - // } - // } else if (o instanceof SOAP12Binding) { - // SOAP12Binding sp = (SOAP12Binding) o; - // if - // (sp.getElementType().getNamespaceURI().equals("http://schemas.xmlsoap.org/wsdl/soap12/")) - // { - // // todo: how to we tell if it is MTOM or not. - // bindingS = javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING; - // } - // } else if (o instanceof HTTPBinding) { - // HTTPBinding sp = (HTTPBinding) o; - // if - // (sp.getElementType().getNamespaceURI().equals("http://www.w3.org/2004/08/wsdl/http")) - // { - // bindingS = javax.xml.ws.http.HTTPBinding.HTTP_BINDING; - // } - // } - // } - // - // Class endPointClass = classLoader.loadClass(endpointClassName); - // JavaClassToDBCConverter converter = new - // JavaClassToDBCConverter(endPointClass); - // HashMap dbcMap = - // converter.produceDBC(); - // - // DescriptionBuilderComposite dbc = dbcMap.get(endpointClassName); - // dbc.setClassLoader(classLoader); - // dbc.setWsdlDefinition(wsdlDefinition); - // dbc.setClassName(endpointClassName); - // dbc.setCustomWsdlGenerator(new WSDLGeneratorImpl(wsdlDefinition)); - // - // if (dbc.getWebServiceAnnot() != null) { // information specified in - // // .wsdl should overwrite - // // annotation. - // WebServiceAnnot serviceAnnot = dbc.getWebServiceAnnot(); - // serviceAnnot.setPortName(portQName.getLocalPart()); - // serviceAnnot.setServiceName(serviceQName.getLocalPart()); - // serviceAnnot.setTargetNamespace(serviceQName.getNamespaceURI()); - // if (dbc.getBindingTypeAnnot() != null && bindingS != null && - // !bindingS.equals("")) { - // BindingTypeAnnot bindingAnnot = dbc.getBindingTypeAnnot(); - // bindingAnnot.setValue(bindingS); - // } - // } else if (dbc.getWebServiceProviderAnnot() != null) { - // WebServiceProviderAnnot serviceProviderAnnot = - // dbc.getWebServiceProviderAnnot(); - // serviceProviderAnnot.setPortName(portQName.getLocalPart()); - // serviceProviderAnnot.setServiceName(serviceQName.getLocalPart()); - // serviceProviderAnnot.setTargetNamespace(serviceQName.getNamespaceURI()); - // if (dbc.getBindingTypeAnnot() != null && bindingS != null && - // !bindingS.equals("")) { - // BindingTypeAnnot bindingAnnot = dbc.getBindingTypeAnnot(); - // bindingAnnot.setValue(bindingS); - // } - // } - // - // AxisService service = getService(dbcMap); - // - // service.setName(serviceQName.getLocalPart()); - // service.setEndpointName(portQName.getLocalPart()); - // - // for (Iterator opIterator = service.getOperations(); - // opIterator.hasNext();) { - // AxisOperation operation = opIterator.next(); - // operation.setMessageReceiver(this.messageReceiver); - // String MEP = operation.getMessageExchangePattern(); - // if (!WSDLUtil.isOutputPresentForMEP(MEP)) { - // List mdcList = - // dbc.getMethodDescriptionComposite(operation.getName().toString()); - // for (Iterator mIterator = mdcList.iterator(); - // mIterator.hasNext();) { - // MethodDescriptionComposite mdc = mIterator.next(); - // // TODO: JAXWS spec says need to check Holder param exist - // // before taking a method as OneWay - // mdc.setOneWayAnnot(true); - // } - // } - // } - // - // return service; - // } - // - // private AxisService getService(HashMap dbcMap) { - // return getEndpointDescription(dbcMap).getAxisService(); - // } - // - // private EndpointDescription getEndpointDescription(HashMap dbcMap) { - // List serviceDescList = - // DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); - // if (serviceDescList == null || serviceDescList.isEmpty()) { - // throw new RuntimeException("No service"); - // } - // ServiceDescription serviceDescription = serviceDescList.get(0); - // EndpointDescription[] edArray = - // serviceDescription.getEndpointDescriptions(); - // if (edArray == null || edArray.length == 0) { - // throw new RuntimeException("No endpoint"); - // } - // return edArray[0]; - // } - // - // private static class WSDLGeneratorImpl implements WsdlGenerator { - // private Definition def; - // - // public WSDLGeneratorImpl(Definition def) { - // this.def = def; - // } - // - // public WsdlComposite generateWsdl(final String implClass, final String - // bindingType) throws WebServiceException { - // // Need WSDL generation code - // WsdlComposite composite = new WsdlComposite(); - // composite.setWsdlFileName(implClass); - // HashMap testMap = new HashMap(); - // testMap.put(composite.getWsdlFileName(), def); - // composite.setWsdlDefinition(testMap); - // return composite; - // } - // } - // - // protected Definition readWSDL(final String wsdlLocation, final URL - // configurationBaseUrl, final ClassLoader classLoader) - // throws IOException, WSDLException { - // Definition wsdlDefinition = null; - // URL wsdlURL = getWsdlURL(wsdlLocation, configurationBaseUrl, - // classLoader); - // InputStream wsdlStream = null; - // try { - // wsdlStream = wsdlURL.openStream(); - // WSDLFactory factory = WSDLFactory.newInstance(); - // WSDLReader reader = factory.newWSDLReader(); - // reader.setFeature("javax.wsdl.importDocuments", true); - // reader.setFeature("javax.wsdl.verbose", false); - // SimpleWSDLLocator wsdlLocator = new - // SimpleWSDLLocator(wsdlURL.toString()); - // wsdlDefinition = reader.readWSDL(wsdlLocator); - // } finally { - // if (wsdlStream != null) { - // wsdlStream.close(); - // } - // } - // return wsdlDefinition; - // } - public static URL getWsdlURL(final String wsdlFile, final URL configurationBaseUrl, final ClassLoader classLoader) { - URL wsdlURL = null; - if (wsdlFile != null) { - try { - wsdlURL = new URL(wsdlFile); - } catch (MalformedURLException e) { - // Not a URL, try as a resource - wsdlURL = classLoader.getResource(wsdlFile); - - if (wsdlURL == null && configurationBaseUrl != null) { - // Cannot get it as a resource, try with - // configurationBaseUrl - try { - wsdlURL = new URL(configurationBaseUrl, wsdlFile); - } catch (MalformedURLException ee) { - // ignore - } - } - } - } - return wsdlURL; - } - - public static EndpointDescription getEndpointDescription(final AxisService service) { - Parameter param = service.getParameter(EndpointDescription.AXIS_SERVICE_PARAMETER); - return (param == null) ? null : (EndpointDescription) param.getValue(); - } - - public static boolean isSOAP11(final AxisService service) { - EndpointDescription desc = AxisServiceGenerator.getEndpointDescription(service); - return javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING.equals(desc.getBindingType()) - || javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING.equals(desc.getBindingType()); - } - - public AxisService getServiceFromWSDL(final String wsdlFile, final Class endpointClass, final URL configurationBaseUrl) throws Exception { - //String wsdlFile = portInfo.getWsdlFile(); - if (wsdlFile == null || wsdlFile.equals("")) { - throw new Exception("WSDL file is required."); - } - - String endpointClassName = endpointClass.getName(); - ClassLoader classLoader = endpointClass.getClassLoader(); - - QName serviceQName = null;//portInfo.getWsdlService(); - if (serviceQName == null) { - serviceQName = JAXWSUtils.getServiceQName(endpointClass); - } - - QName portQName = null;//portInfo.getWsdlPort(); - if (portQName == null) { - portQName = JAXWSUtils.getPortQName(endpointClass); - } - - Definition wsdlDefinition = readWSDL(wsdlFile, configurationBaseUrl, classLoader); - - Service wsdlService = wsdlDefinition.getService(serviceQName); - if (wsdlService == null) { - throw new Exception("Service '" + serviceQName + "' not found in WSDL"); - } - - Port port = wsdlService.getPort(portQName.getLocalPart()); - if (port == null) { - throw new Exception("Port '" + portQName.getLocalPart() + "' not found in WSDL"); - } - - String protocolBinding = null; - //if (portInfo.getProtocolBinding() != null) { - // protocolBinding = JAXWSUtils.getBindingURI(portInfo.getProtocolBinding()); - //} else { - protocolBinding = getBindingFromWSDL(port); - //} - - Class endPointClass = classLoader.loadClass(endpointClassName); - JavaClassToDBCConverter converter = new JavaClassToDBCConverter(endPointClass); - HashMap dbcMap = converter.produceDBC(); - - DescriptionBuilderComposite dbc = dbcMap.get(endpointClassName); - dbc.setClassLoader(classLoader); - dbc.setWsdlDefinition(wsdlDefinition); - dbc.setClassName(endpointClassName); - dbc.setCustomWsdlGenerator(new WSDLGeneratorImpl(wsdlDefinition)); - - if (dbc.getWebServiceAnnot() != null) { //information specified in .wsdl should overwrite annotation. - WebServiceAnnot serviceAnnot = dbc.getWebServiceAnnot(); - serviceAnnot.setPortName(portQName.getLocalPart()); - serviceAnnot.setServiceName(serviceQName.getLocalPart()); - serviceAnnot.setTargetNamespace(serviceQName.getNamespaceURI()); - processServiceBinding(dbc, protocolBinding); - } else if (dbc.getWebServiceProviderAnnot() != null) { - WebServiceProviderAnnot serviceProviderAnnot = dbc.getWebServiceProviderAnnot(); - serviceProviderAnnot.setPortName(portQName.getLocalPart()); - serviceProviderAnnot.setServiceName(serviceQName.getLocalPart()); - serviceProviderAnnot.setTargetNamespace(serviceQName.getNamespaceURI()); - processServiceBinding(dbc, protocolBinding); - } - - /* - if (portInfo.isMTOMEnabled() != null) { - dbc.setIsMTOMEnabled(portInfo.isMTOMEnabled().booleanValue()); - } - */ - - AxisService service = getService(dbcMap); - - service.setName(serviceQName.getLocalPart()); - service.setEndpointName(portQName.getLocalPart()); - - for(Iterator opIterator = service.getOperations() ; opIterator.hasNext() ;){ - AxisOperation operation = opIterator.next(); - operation.setMessageReceiver(this.messageReceiver); - String MEP = operation.getMessageExchangePattern(); - if (!WSDLUtil.isOutputPresentForMEP(MEP)) { - List mdcList = dbc.getMethodDescriptionComposite(operation.getName().toString()); - for(Iterator mIterator = mdcList.iterator(); mIterator.hasNext();){ - MethodDescriptionComposite mdc = mIterator.next(); - //TODO: JAXWS spec says need to check Holder param exist before taking a method as OneWay - mdc.setOneWayAnnot(true); - } - } - } - - return service; - } - - protected Definition readWSDL(final String wsdlLocation, - final URL configurationBaseUrl, - final ClassLoader classLoader) - throws IOException, WSDLException { - Definition wsdlDefinition = null; - URL wsdlURL = getWsdlURL(wsdlLocation, configurationBaseUrl, classLoader); - InputStream wsdlStream = null; - try { - wsdlStream = wsdlURL.openStream(); - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - reader.setFeature("javax.wsdl.verbose", false); - SimpleWSDLLocator wsdlLocator = new SimpleWSDLLocator(wsdlURL.toString()); - wsdlDefinition = reader.readWSDL(wsdlLocator); - } finally { - if (wsdlStream != null) { - wsdlStream.close(); - } - } - return wsdlDefinition; - } - private String getBindingFromWSDL(final Port port) { - Binding binding = port.getBinding(); - List extElements = binding.getExtensibilityElements(); - Iterator extElementsIterator = extElements.iterator(); - String bindingS = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING; //this is the default. - while (extElementsIterator.hasNext()) { - Object o = extElementsIterator.next(); - if (o instanceof SOAPBinding) { - SOAPBinding sp = (SOAPBinding)o; - if (sp.getElementType().getNamespaceURI().equals("http://schemas.xmlsoap.org/wsdl/soap/")) { - bindingS = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING; - } - } else if (o instanceof SOAP12Binding) { - SOAP12Binding sp = (SOAP12Binding)o; - if (sp.getElementType().getNamespaceURI().equals("http://schemas.xmlsoap.org/wsdl/soap12/")) { - bindingS = javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING; - } - } else if (o instanceof HTTPBinding) { - HTTPBinding sp = (HTTPBinding)o; - if (sp.getElementType().getNamespaceURI().equals("http://schemas.xmlsoap.org/wsdl/http/")) { - bindingS = javax.xml.ws.http.HTTPBinding.HTTP_BINDING; - } - } - } - return bindingS; - } - private static class WSDLGeneratorImpl implements WsdlGenerator { - private Definition def; - - public WSDLGeneratorImpl(final Definition def) { - this.def = def; - } - - public WsdlComposite generateWsdl(final String implClass, final String bindingType) throws WebServiceException { - // Need WSDL generation code - WsdlComposite composite = new WsdlComposite(); - composite.setWsdlFileName(implClass); - HashMap testMap = new HashMap(); - testMap.put(composite.getWsdlFileName(), def); - composite.setWsdlDefinition(testMap); - return composite; - } - - public WsdlComposite generateWsdl(final String arg0, final EndpointDescription arg1) throws WebServiceException { - // TODO Auto-generated method stub - return null; - } - } - private void processServiceBinding(final DescriptionBuilderComposite dbc, final String bindingFromWSDL) { - if (dbc.getBindingTypeAnnot() == null || bindingFromWSDL == null || bindingFromWSDL.length() == 0) { - return; - } - String bindingFromAnnotation = dbc.getBindingTypeAnnot().value(); - if (bindingFromAnnotation.equals(bindingFromWSDL)) { - return; - } - if (bindingFromWSDL.equals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)) { - if (!bindingFromAnnotation.equals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING)) { - dbc.getBindingTypeAnnot().setValue(bindingFromWSDL); - } - } else if (bindingFromWSDL.equals(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)) { - if (!bindingFromAnnotation.equals(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_MTOM_BINDING)) { - dbc.getBindingTypeAnnot().setValue(bindingFromWSDL); - } - } else { - dbc.getBindingTypeAnnot().setValue(bindingFromWSDL); - } - } - private AxisService getService(final HashMap dbcMap) { - return getEndpointDescription(dbcMap).getAxisService(); - } - private EndpointDescription getEndpointDescription(final HashMap dbcMap) { - List serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); - if (serviceDescList == null || serviceDescList.isEmpty()) { - throw new RuntimeException("No service"); - } - ServiceDescription serviceDescription = serviceDescList.get(0); - EndpointDescription[] edArray = serviceDescription.getEndpointDescriptions(); - if (edArray == null || edArray.length == 0) { - throw new RuntimeException("No endpoint"); - } - return edArray[0]; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/WSDLQueryHandler.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/WSDLQueryHandler.java deleted file mode 100644 index f698d20a64..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/http/WSDLQueryHandler.java +++ /dev/null @@ -1,373 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.http; - -import java.io.FileNotFoundException; -import java.io.OutputStream; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.wsdl.Definition; -import javax.wsdl.Import; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.Types; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.schema.Schema; -import javax.wsdl.extensions.schema.SchemaImport; -import javax.wsdl.extensions.schema.SchemaReference; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.extensions.soap12.SOAP12Address; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.wsdl.xml.WSDLWriter; -import javax.xml.namespace.QName; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.apache.axis2.description.AxisService; -import org.ow2.jonas.ws.axis2.util.WSDLUtils; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class WSDLQueryHandler { - - private static final Log LOG = LogFactory.getLog(WSDLQueryHandler.class); - - private Map mp = new ConcurrentHashMap(); - - private Map smp = new ConcurrentHashMap(); - - private AxisService service; - - public WSDLQueryHandler(final AxisService service) { - this.service = service; - } - - public void writeResponse(final String baseUri, final String wsdlUri, final OutputStream os) throws Exception { - - int idx = baseUri.toLowerCase().indexOf("?wsdl"); - String base = null; - String wsdl = ""; - String xsd = null; - if (idx != -1) { - base = baseUri.substring(0, baseUri.toLowerCase().indexOf("?wsdl")); - wsdl = baseUri.substring(baseUri.toLowerCase().indexOf("?wsdl") + 5); - if (wsdl.length() > 0) { - wsdl = wsdl.substring(1); - } - } else { - base = baseUri.substring(0, baseUri.toLowerCase().indexOf("?xsd=")); - xsd = baseUri.substring(baseUri.toLowerCase().indexOf("?xsd=") + 5); - } - - if (!mp.containsKey(wsdl)) { - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - reader.setFeature("javax.wsdl.verbose", false); - Definition def = reader.readWSDL(wsdlUri); - updateDefinition(def, mp, smp, base); - //updateServices(this.service.getName(), this.service.getEndpointName(), def, base); - WSDLUtils.trimDefinition(def, this.service.getName(), this.service.getEndpointName()); - mp.put("", def); - } - - Element rootElement; - - if (xsd == null) { - Definition def = mp.get(wsdl); - - if (def == null) { - throw new FileNotFoundException("WSDL not found: " + wsdl); - } - - // update service port location on each request - if (wsdl.equals("")) { - WSDLUtils.updateLocations(def, base); - } - - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLWriter writer = factory.newWSDLWriter(); - - rootElement = writer.getDocument(def).getDocumentElement(); - } else { - SchemaReference si = smp.get(xsd); - - if (si == null) { - throw new FileNotFoundException("Schema not found: " + xsd); - } - - rootElement = si.getReferencedSchema().getElement(); - } - - NodeList nl = rootElement.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", - "import"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("schemaLocation"); - if (smp.containsKey(sl)) { - el.setAttribute("schemaLocation", base + "?xsd=" + sl); - } - } - nl = rootElement.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "include"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("schemaLocation"); - if (smp.containsKey(sl)) { - el.setAttribute("schemaLocation", base + "?xsd=" + sl); - } - } - nl = rootElement.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "import"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("location"); - if (mp.containsKey(sl)) { - el.setAttribute("location", base + "?wsdl=" + sl); - } - } - - writeTo(rootElement, os); -/* - Element rootElement; - - if (xsd == null) { - Definition def = mp.get(wsdl); - - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLWriter writer = factory.newWSDLWriter(); - - rootElement = writer.getDocument(def).getDocumentElement(); - } else { - SchemaReference si = smp.get(xsd); - rootElement = si.getReferencedSchema().getElement(); - } - - NodeList nl = rootElement.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "import"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("schemaLocation"); - if (smp.containsKey(sl)) { - el.setAttribute("schemaLocation", base + "?xsd=" + sl); - } - } - nl = rootElement.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "include"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("schemaLocation"); - if (smp.containsKey(sl)) { - el.setAttribute("schemaLocation", base + "?xsd=" + sl); - } - } - nl = rootElement.getElementsByTagNameNS("http://schemas.xmlsoap.org/wsdl/", "import"); - for (int x = 0; x < nl.getLength(); x++) { - Element el = (Element) nl.item(x); - String sl = el.getAttribute("location"); - if (mp.containsKey(sl)) { - el.setAttribute("location", base + "?wsdl=" + sl); - } - } - - writeTo(rootElement, os); -*/ } - - protected void updateDefinition(final Definition def, final Map done, final Map doneSchemas, - final String base) { - Collection imports = def.getImports().values(); - for (List lst : imports) { - List impLst = lst; - for (Import imp : impLst) { - String start = imp.getLocationURI(); - try { - // check to see if it's aleady in a URL format. If so, leave - // it. - new URL(start); - } catch (MalformedURLException e) { - done.put(start, imp.getDefinition()); - updateDefinition(imp.getDefinition(), done, doneSchemas, base); - } - } - } - - /* - * This doesn't actually work. Setting setSchemaLocationURI on the - * import for some reason doesn't actually result in the new URI being - * written - */ - Types types = def.getTypes(); - if (types != null) { - for (ExtensibilityElement el : (List) types.getExtensibilityElements()) { - if (el instanceof Schema) { - Schema see = (Schema) el; - updateSchemaImports(see, doneSchemas, base); - } - } - } - } - - protected void updateSchemaImports(final Schema schema, final Map doneSchemas, final String base) { - Collection imports = schema.getImports().values(); - for (List lst : imports) { - List impLst = lst; - for (SchemaImport imp : impLst) { - String start = imp.getSchemaLocationURI(); - if (start != null) { - try { - // check to see if it's aleady in a URL format. If so, - // leave it. - new URL(start); - } catch (MalformedURLException e) { - if (!doneSchemas.containsKey(start)) { - doneSchemas.put(start, imp); - updateSchemaImports(imp.getReferencedSchema(), doneSchemas, base); - } - } - } - } - } - List includes = schema.getIncludes(); - for (SchemaReference included : includes) { - String start = included.getSchemaLocationURI(); - if (start != null) { - try { - // check to see if it's aleady in a URL format. If so, leave - // it. - new URL(start); - } catch (MalformedURLException e) { - if (!doneSchemas.containsKey(start)) { - doneSchemas.put(start, included); - updateSchemaImports(included.getReferencedSchema(), doneSchemas, base); - } - } - } - } - } - - public static void writeTo(final Node node, final OutputStream os) { - writeTo(new DOMSource(node), os); - } - - public static void writeTo(final Source src, final OutputStream os) { - Transformer it; - try { - it = TransformerFactory.newInstance().newTransformer(); - it.setOutputProperty(OutputKeys.METHOD, "xml"); - it.setOutputProperty(OutputKeys.INDENT, "yes"); - it.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - it.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "false"); - it.setOutputProperty(OutputKeys.ENCODING, "utf-8"); - it.transform(src, new StreamResult(os)); - } catch (TransformerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private void updateServices(final String serviceName, final String portName, final Definition def, final String baseUri) - throws Exception { - boolean updated = false; - Map services = def.getServices(); - if (services != null) { - ArrayList servicesToRemove = new ArrayList(); - - Iterator serviceIterator = services.entrySet().iterator(); - while (serviceIterator.hasNext()) { - Map.Entry serviceEntry = (Map.Entry) serviceIterator.next(); - QName currServiceName = (QName) serviceEntry.getKey(); - if (currServiceName.getLocalPart().equals(serviceName)) { - Service service = (Service) serviceEntry.getValue(); - updatePorts(portName, service, baseUri); - updated = true; - } else { - servicesToRemove.add(currServiceName); - } - } - - for (QName serviceToRemove : servicesToRemove) { - def.removeService(serviceToRemove); - } - } - if (!updated) { - LOG.warn("WSDL '" + serviceName + "' service not found."); - } - } - - private void updatePorts(final String portName, final Service service, final String baseUri) throws Exception { - boolean updated = false; - Map ports = service.getPorts(); - if (ports != null) { - ArrayList portsToRemove = new ArrayList(); - - Iterator portIterator = ports.entrySet().iterator(); - while (portIterator.hasNext()) { - Map.Entry portEntry = (Map.Entry) portIterator.next(); - String currPortName = (String) portEntry.getKey(); - if (currPortName.equals(portName)) { - Port port = (Port) portEntry.getValue(); - updatePortLocation(port, baseUri); - updated = true; - } else { - portsToRemove.add(currPortName); - } - } - - for (String portToRemove : portsToRemove) { - service.removePort(portToRemove); - } - } - if (!updated) { - LOG.warn("WSDL '" + portName + "' port not found."); - } - } - - private void updatePortLocation(final Port port, final String baseUri) throws URISyntaxException { - List exts = port.getExtensibilityElements(); - if (exts != null && exts.size() > 0) { - ExtensibilityElement el = (ExtensibilityElement) exts.get(0); - if (el instanceof SOAP12Address) { - SOAP12Address add = (SOAP12Address) el; - add.setLocationURI(baseUri); - } else if (el instanceof SOAPAddress) { - SOAPAddress add = (SOAPAddress) el; - add.setLocationURI(baseUri); - } - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/Axis2WSEndpoint.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/Axis2WSEndpoint.java deleted file mode 100644 index e5c6a64610..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/Axis2WSEndpoint.java +++ /dev/null @@ -1,1077 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileFilter; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.ejb.EJB; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Result; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.ws.Binding; -import javax.xml.ws.Holder; -import javax.xml.ws.handler.Handler; - -import org.apache.axis2.Constants; -import org.apache.axis2.addressing.AddressingHelper; -import org.apache.axis2.addressing.EndpointReference; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.context.ConfigurationContextFactory; -import org.apache.axis2.context.MessageContext; -import org.apache.axis2.context.OperationContext; -import org.apache.axis2.context.ServiceContext; -import org.apache.axis2.deployment.DeploymentException; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.TransportInDescription; -import org.apache.axis2.description.TransportOutDescription; -import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; -import org.apache.axis2.engine.AxisEngine; -import org.apache.axis2.engine.Handler.InvocationResponse; -import org.apache.axis2.jaxws.binding.BindingUtils; -import org.apache.axis2.jaxws.context.WebServiceContextImpl; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; -import org.apache.axis2.jaxws.registry.FactoryRegistry; -import org.apache.axis2.jaxws.server.JAXWSMessageReceiver; -import org.apache.axis2.jaxws.server.endpoint.lifecycle.factory.EndpointLifecycleManagerFactory; -import org.apache.axis2.transport.RequestResponseTransport; -import org.apache.axis2.transport.http.HTTPConstants; -import org.apache.axis2.transport.http.HTTPTransportReceiver; -import org.apache.axis2.transport.http.HTTPTransportUtils; -import org.apache.axis2.transport.http.TransportHeaders; -import org.apache.axis2.transport.http.util.RESTUtil; -import org.apache.axis2.util.MessageContextBuilder; -import org.apache.axis2.util.UUIDGenerator; -import org.apache.http.HttpStatus; -import org.apache.xbean.recipe.ObjectRecipe; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.easybeans.resolver.api.EZBJNDIBeanData; -import org.ow2.easybeans.resolver.api.EZBRemoteJNDIResolver; -import org.ow2.jonas.ws.axis2.easybeans.Axis2EjbMessageReceiver; -import org.ow2.jonas.ws.axis2.easybeans.Axis2EndpointLifecycleManagerFactory; -import org.ow2.jonas.ws.axis2.http.Axis2RequestResponseTransport; -import org.ow2.jonas.ws.axis2.http.Axis2TransportInfo; -import org.ow2.jonas.ws.axis2.http.AxisServiceGenerator; -import org.ow2.jonas.ws.axis2.http.WSDLQueryHandler; -import org.ow2.jonas.ws.axis2.jaxws.description.impl.DescriptionUtils; -import org.ow2.jonas.ws.axis2.util.JAXWSUtils; -import org.ow2.jonas.ws.jaxws.IWSRequest; -import org.ow2.jonas.ws.jaxws.IWSResponse; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortIdentifier; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import com.sun.xml.ws.api.BindingID; -import com.sun.xml.ws.api.wsdl.writer.WSDLGeneratorExtension; -import com.sun.xml.ws.binding.WebServiceFeatureList; -import com.sun.xml.ws.model.AbstractSEIModelImpl; -import com.sun.xml.ws.model.RuntimeModeler; -import com.sun.xml.ws.util.ServiceFinder; -import com.sun.xml.ws.wsdl.writer.WSDLGenerator; -import com.sun.xml.ws.wsdl.writer.WSDLResolver; -/** - * This class represents the JOnAS' view on a web service endpoint (server side). - * @author xiaoda - */ -public class Axis2WSEndpoint implements IWebServiceEndpoint { - - private static final Log logger = LogFactory.getLog(Axis2WSEndpoint.class); - - private String style = Java2WSDLConstants.DOCUMENT; - private String use = Java2WSDLConstants.LITERAL; - - protected ConfigurationContext configurationContext; - - protected AxisService service; - - protected Binding binding; - - protected PortMetaData portMetaData; - - protected Class endpointClass; - - protected WSDLQueryHandler wsdlQueryHandler; - - protected StatelessSessionFactory factory; - - protected URL moduleURL; - - private final static String JAVA_HOME = "JAVA_HOME"; - - private final static String TOOLS = "tools.jar"; - - private int forkTimeout; - - private final static long FORK_POLL_FREQUENCY = 1000 * 2; // 2 seconds - - private URL wsdlFile; - - private URL wsdlFileURL; - /** - * Identifier. - */ - private PortIdentifier identifier; - /** - * Describe the WS type (EJB/POJO). - */ - private IWebServiceEndpoint.EndpointType type; - - public static final String END_POINT_TYPE = "EndPointType"; - - public Axis2WSEndpoint(final Class endpointClass, final IWebServiceEndpoint.EndpointType type, final PortMetaData portMetaData, - final StatelessSessionFactory factory,final URL moduleURL) { - this.endpointClass = endpointClass; - this.portMetaData = portMetaData; - this.type = type; - this.factory = factory; - this.moduleURL = moduleURL; - forkTimeout = 1000*60; - - String name = endpointClass.getSimpleName(); - String namespace = JAXWSUtils.getDefaultNamespace(endpointClass); - - // Create the identifier - this.identifier = new PortIdentifier(new QName(namespace,name), - portMetaData.getContextRoot()); - } - - public void init() throws Exception { - - - configurationContext = ConfigurationContextFactory.createBasicConfigurationContext("META-INF/axis2.xml"); - AxisServiceGenerator serviceGen = createServiceGenerator(); - - // TODO: Get webservice from wsdl - service = serviceGen.getServiceFromClass(this.endpointClass,this.configurationContext,portMetaData); - service.setScope(Constants.SCOPE_APPLICATION); - //service.setEndpointName();??? - configurationContext.getAxisConfiguration().addService(service); - this.wsdlQueryHandler = new WSDLQueryHandler(this.service); - if (this.type == IWebServiceEndpoint.EndpointType.EJB) { - this.configurationContext.setContextRoot(this.portMetaData.getContextRoot()); - this.configurationContext.setServicePath(this.portMetaData.getUrlPattern()); - } - - this.configureHandlers(); - - FactoryRegistry.setFactory(EndpointLifecycleManagerFactory.class, new Axis2EndpointLifecycleManagerFactory()); - - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - //generate the wsdl file - this.wsdlFile = this.generateWSDL(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - } - - private URL generateWSDL() throws Exception { - - BindingID bindingID = BindingID.parse(endpointClass); - WebServiceFeatureList wsfeatures = new WebServiceFeatureList(endpointClass); - QName qName = new QName(this.service.getTargetNamespace(),this.service.getName()); - RuntimeModeler rtModeler = new RuntimeModeler(endpointClass, qName, bindingID); - - URL mURL = null; - if(this.type==EndpointType.POJO) { - mURL = new URL(this.moduleURL.toString() + "WEB-INF/classes/"); - } else { - mURL = new URL(this.moduleURL.toString()); - } - ClassLoader classLoader = null; - if(this.type==EndpointType.POJO) { - classLoader= new URLClassLoader(new URL[]{mURL},this.getClass().getClassLoader()); - } else { - classLoader= Thread.currentThread().getContextClassLoader(); - } - rtModeler.setClassLoader(classLoader); - if(this.service.getPortTypeName()!=null) { - rtModeler.setPortName(qName); - } - AbstractSEIModelImpl rtModel = null; - try{ - rtModel = rtModeler.buildRuntimeModel(); - } - catch(Exception e) { - e.printStackTrace(); - } - - final File[] wsdlFileName = new File[1]; // used to capture the generated WSDL file. - final Map schemaFiles = new HashMap(); - - WSDLGenerator wsdlGenerator = new WSDLGenerator(rtModel, - new WSDLResolver() { - private File toFile(final String suggestedFilename) { - return new File(moduleURL.getPath(), suggestedFilename); - } - private Result toResult(final File file) { - Result result; - try { - result = new StreamResult(new FileOutputStream(file)); - result.setSystemId(file.getPath().replace('\\', '/')); - } catch (FileNotFoundException e) { - //errReceiver.error(e); - e.printStackTrace(); - return null; - } - return result; - } - public Result getWSDL(final String suggestedFilename) { - File f = toFile(suggestedFilename); - wsdlFileName[0] = f; - return toResult(f); - } - public Result getSchemaOutput(final String namespace, final String suggestedFilename) { - if (namespace.equals("")) { - return null; - } - File f = toFile(suggestedFilename); - schemaFiles.put(namespace,f); - return toResult(f); - } - public Result getAbstractWSDL(final Holder filename) { - return toResult(toFile(filename.value)); - } - public Result getSchemaOutput(final String namespace, final Holder filename) { - return getSchemaOutput(namespace, filename.value); - } - }, bindingID.createBinding(wsfeatures.toArray()), null, endpointClass, ServiceFinder.find(WSDLGeneratorExtension.class).toArray()); - wsdlGenerator.doGeneration(); - - return wsdlFileName[0].toURL(); - - /* - File [] jarFiles = JAXWSTools.getClasspath(); - StringBuilder classPath = new StringBuilder(); - - for(int i = 0 ; i < jarFiles.length ; i++ ) { - classPath.append((jarFiles[i].getAbsolutePath())).append(File.pathSeparator); - } - classPath.append(this.moduleURL.getPath() + "WEB-INF/classes").append(File.pathSeparator); - - logger.info(classPath); - - //create arguments; - String[] arguments = buildArguments(this.endpointClass.getName(), classPath.toString(), new File(this.moduleURL.getPath())); - - - - boolean result = forkWsgen(classPath, arguments); - - - if (result) { - File wsdlFile = findWsdlFile(new File(this.moduleURL.getPath() + "/WEB-INF")); - this.wsdlFileURL = wsdlFile.toURL(); - if (wsdlFile == null) { - throw new DeploymentException("Unable to find the service wsdl file"); - } - return getRelativeNameOrURL(new File(this.moduleURL.getPath()),wsdlFile); - } else { - throw new DeploymentException("WSDL generation failed"); - } - */ - } - - - public static String getRelativeNameOrURL(final File baseDir, final File file) { - String basePath = baseDir.getAbsolutePath(); - String path = file.getAbsolutePath(); - - if (path.startsWith(basePath)) { - if (File.separatorChar == path.charAt(basePath.length())) { - return path.substring(basePath.length() + 1); - } else { - return path.substring(basePath.length()); - } - } else { - return file.toURI().toString(); - } - } - - private File findWsdlFile(final File baseDir) { - QName serviceQName = JAXWSUtils.getServiceQName(this.endpointClass); - String serviceName = (serviceQName == null) ? null : serviceQName.getLocalPart(); - return findWsdlFile(baseDir, serviceName); - } - - private static File[] getWsdlFiles(final File baseDir) { - File[] files = baseDir.listFiles(new FileFilter() { - public boolean accept(final File file) { - return (file.isFile() && file.getName().endsWith(".wsdl")); - } - }); - return files; - } - - public static File findWsdlFile(final File baseDir, final String serviceName) { - File[] files = getWsdlFiles(baseDir); - if (files == null || files.length == 0) { - // no wsdl files found - return null; - } else { - if (files.length == 1) { - // found one wsdl file, must be it - return files[0]; - } else if (serviceName != null) { - // found multiple wsdl files, check filenames to match serviceName - String wsdlFileName = serviceName + ".wsdl"; - for (File file : files) { - if (wsdlFileName.equalsIgnoreCase(file.getName())) { - return file; - } - } - return null; - } else { - // found multiple wsdl files and serviceName is not specified - // so we don't know which wsdl file is the right one - return null; - } - } - } - private boolean forkWsgen(final StringBuilder classPath, final String[] arguments) throws Exception { - List cmd = new ArrayList(); - cmd.add("-classpath"); - cmd.add(classPath.toString()); - cmd.add("com.sun.tools.ws.WsGen"); - cmd.addAll(Arrays.asList(arguments)); - - try { - return execJava(cmd, 1000 * 60); - } catch (Exception e) { - throw new DeploymentException("WSDL generation failed", e); - } - } - - public static boolean execJava(final List arguments, final long timeout) throws Exception { - - List cmd = new ArrayList(); - String javaHome = System.getProperty("java.home"); - String java = javaHome + File.separator + "bin" + File.separator + "java"; - - cmd.add(java); - cmd.addAll(arguments); - return exec(cmd, timeout); - } - - private static boolean waitFor(final Process process, final long timeout) throws Exception { - CaptureOutputThread outputThread = new CaptureOutputThread(process.getInputStream()); - outputThread.start(); - - long sleepTime = 0; - while(sleepTime < timeout) { - try { - int errorCode = process.exitValue(); - if (errorCode == 0) { - logger.debug("Process output: {}", outputThread.getOutput()); - return true; - } else { - logger.error("Process failed: {}", outputThread.getOutput()); - return false; - } - } catch (IllegalThreadStateException e) { - // still running - try { - Thread.sleep(FORK_POLL_FREQUENCY); - } catch (InterruptedException ee) { - // interrupted - process.destroy(); - throw new Exception("Process was interrupted"); - } - sleepTime += FORK_POLL_FREQUENCY; - } - } - - // timeout; - process.destroy(); - - logger.error("Process timed out: {}", outputThread.getOutput()); - - throw new Exception("Process timed out"); - } - - public static boolean exec(final List cmd, final long timeout) throws Exception { - logger.debug("Executing process: {}", cmd); - - ProcessBuilder builder = new ProcessBuilder(cmd); - builder.redirectErrorStream(true); - - Process process = builder.start(); - return waitFor(process, timeout); - } - private String[] buildArguments(final String sei, final String classPath, final File moduleBaseDir) { - List arguments = new ArrayList(); - - arguments.add("-cp"); - arguments.add(classPath); - arguments.add("-keep"); - arguments.add("-wsdl"); - arguments.add("-d"); - arguments.add(moduleBaseDir.getAbsolutePath() + "/WEB-INF"); - - arguments.add(sei); - - return arguments.toArray(new String[]{}); - } - - private static class CaptureOutputThread extends Thread { - - private InputStream in; - private ByteArrayOutputStream out; - - public CaptureOutputThread(final InputStream in) { - this.in = in; - this.out = new ByteArrayOutputStream(); - } - - public String getOutput() { - // make sure the thread is done - try { - join(10 * 1000); - - // if it's still not done, interrupt it - if (isAlive()) { - interrupt(); - } - } catch (InterruptedException e) { - // that's ok - } - - // get the output - byte [] arr = this.out.toByteArray(); - String output = new String(arr, 0, arr.length); - return output; - } - - @Override - public void run() { - try { - copyAll(this.in, this.out); - } catch (IOException e) { - // ignore - } finally { - try { this.out.close(); } catch (IOException ee) {} - try { this.in.close(); } catch (IOException ee) {} - } - } - - private static void copyAll(final InputStream in, final OutputStream out) throws IOException { - byte[] buffer = new byte[4096]; - int count; - while ((count = in.read(buffer)) > 0) { - out.write(buffer, 0, count); - } - out.flush(); - } - } - private boolean waitFor(final Process process) throws DeploymentException { - CaptureOutputThread outputThread = new CaptureOutputThread(process.getInputStream()); - outputThread.start(); - - long sleepTime = 0; - while(sleepTime < this.forkTimeout) { - try { - int errorCode = process.exitValue(); - if (errorCode == 0) { - if (logger.isDebugEnabled()) { - logger.debug("wsgen output: " + outputThread.getOutput()); - } - return true; - } else { - logger.error("WSDL generation process failed"); - logger.error(outputThread.getOutput()); - return false; - } - } catch (IllegalThreadStateException e) { - // still running - try { - Thread.sleep(FORK_POLL_FREQUENCY); - } catch (InterruptedException ee) { - // interrupted - process.destroy(); - throw new DeploymentException("WSDL generation process was interrupted"); - } - sleepTime += FORK_POLL_FREQUENCY; - } - } - - // timeout; - process.destroy(); - - logger.error("WSDL generation process timed out"); - logger.error(outputThread.getOutput()); - - throw new DeploymentException("WSDL generation process timed out"); - } - - protected AxisServiceGenerator createServiceGenerator() { - AxisServiceGenerator serviceGenerator = null; - if (this.type == IWebServiceEndpoint.EndpointType.POJO) { - serviceGenerator = new AxisServiceGenerator(); - //Axis2PojoMessageReceiver messageReceiver = new Axis2PojoMessageReceiver(); - //serviceGenerator.setMessageReceiver(messageReceiver); - } else if (this.type == IWebServiceEndpoint.EndpointType.EJB) { - serviceGenerator = new AxisServiceGenerator(); - Axis2EjbMessageReceiver messageReceiver = new Axis2EjbMessageReceiver(this, this.endpointClass, this.factory); - serviceGenerator.setMessageReceiver(messageReceiver); - } - return serviceGenerator; - } - - public EndpointType getType() { - return this.type; - } - - /** - * @return the port identifier of this endpoint. - */ - public PortIdentifier getIdentifier() { - return this.identifier; - } - - public void invoke(final IWSRequest request, final IWSResponse response) throws WSException { - - - HttpServletRequest httpRequest = request.getAttribute(HttpServletRequest.class); - //HttpServletResponse httpResponse = request.getAttribute(HttpServletResponse.class); - - MessageContext msgContext = new MessageContext(); - msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP); - msgContext.setProperty(MessageContext.REMOTE_ADDR, request.getRemoteAddr()); - msgContext.setProperty(END_POINT_TYPE, this.getType()); - - - ClassLoader old = Thread.currentThread().getContextClassLoader(); - - try { - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - - //inject resource for all Handlers - this.injectHandlers(); - - - TransportOutDescription transportOut = this.configurationContext.getAxisConfiguration().getTransportOut( - Constants.TRANSPORT_HTTP); - TransportInDescription transportIn = this.configurationContext.getAxisConfiguration().getTransportIn( - Constants.TRANSPORT_HTTP); - - msgContext.setConfigurationContext(this.configurationContext); - msgContext.setTransportIn(transportIn); - msgContext.setTransportOut(transportOut); - msgContext.setServiceGroupContextId(UUIDGenerator.getUUID()); - msgContext.setServerSide(true); - msgContext.setAxisService(this.service); - - - if ("GET".equals(httpRequest.getMethod())) { - processGETRequest(request, response,msgContext); - }else if ("POST".equals(httpRequest.getMethod())) { - doService(request, response, msgContext); - } else { - throw new UnsupportedOperationException("[" + httpRequest.getMethod() + " ] method not supported"); - } - - } catch (Throwable e) { - String msg = "Exception occurred while trying to invoke service method doService()"; - logger.error(msg, e); - try { - //AxisEngine engine = new AxisEngine(this.configurationContext); - - msgContext.setProperty(MessageContext.TRANSPORT_OUT, response.getOutputStream()); - msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, new Axis2TransportInfo(response)); - - MessageContext faultContext = MessageContextBuilder.createFaultMessageContext(msgContext, e); - // If the fault is not going along the back channel we should be - // 202ing - if (AddressingHelper.isFaultRedirected(msgContext)) { - response.setStatus(HttpURLConnection.HTTP_ACCEPTED); - } else { - response.setStatus(HttpURLConnection.HTTP_INTERNAL_ERROR); - } - AxisEngine.sendFault(faultContext); - } catch (Exception ex) { - if (AddressingHelper.isFaultRedirected(msgContext)) { - response.setStatus(HttpURLConnection.HTTP_ACCEPTED); - } else { - response.setStatus(HttpURLConnection.HTTP_INTERNAL_ERROR); - response.setHeader(HTTPConstants.HEADER_CONTENT_TYPE, "text/plain"); - PrintWriter pw = null; - try { - pw = new PrintWriter(response.getOutputStream()); - } catch (IOException e1) { - // TODO Auto-generated catch block - throw new WSException("Exception occured while getting output print writer",e); - } - ex.printStackTrace(pw); - pw.flush(); - logger.error(msg, ex); - } - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - } - } - - protected void doService(final IWSRequest request, final IWSResponse response, final MessageContext msgContext) throws Exception { - - processPOSTRequest(request, response, this.service, msgContext); - // Finalize response - OperationContext operationContext = msgContext.getOperationContext(); - Object contextWritten = null; - Object isTwoChannel = null; - if (operationContext != null) { - contextWritten = operationContext.getProperty(Constants.RESPONSE_WRITTEN); - isTwoChannel = operationContext.getProperty(Constants.DIFFERENT_EPR); - } - - if ((contextWritten != null) && Constants.VALUE_TRUE.equals(contextWritten)) { - if ((isTwoChannel != null) && Constants.VALUE_TRUE.equals(isTwoChannel)) { - response.setStatus(HttpURLConnection.HTTP_ACCEPTED); - return; - } - response.setStatus(HttpURLConnection.HTTP_OK); - } else { - response.setStatus(HttpURLConnection.HTTP_ACCEPTED); - } - } - - protected void setMsgContextProperties(final IWSRequest request, final IWSResponse response, final AxisService service, - final MessageContext msgContext) throws IOException { - msgContext.setProperty(MessageContext.TRANSPORT_OUT, response.getOutputStream()); - msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, new Axis2TransportInfo(response)); - msgContext.setProperty(RequestResponseTransport.TRANSPORT_CONTROL, new Axis2RequestResponseTransport(response)); - msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP); - - HttpServletRequest servletRequest = request.getAttribute(HttpServletRequest.class); - msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, servletRequest); - msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, servletRequest.getRequestURI().toString()); - - - HttpServletResponse servletResponse = request.getAttribute(HttpServletResponse.class); - msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE, servletResponse); - - ServletContext servletContext = request.getAttribute(ServletContext.class); - msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT, servletContext); - - if (servletRequest != null) { - msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, new TransportHeaders(servletRequest)); - } - - if (this.binding != null) { - msgContext.setProperty(JAXWSMessageReceiver.PARAM_BINDING, this.binding); - } - msgContext.setTo(new EndpointReference(servletRequest.getRequestURL().toString())); - - } - - - protected void processURLRequest(final IWSRequest request, final IWSResponse response, final AxisService service, - final MessageContext msgContext) throws Exception { - String contentType = request.getHeader(HTTPConstants.HEADER_CONTENT_TYPE); - - ConfigurationContext configurationContext = msgContext.getConfigurationContext(); - configurationContext.fillServiceContextAndServiceGroupContext(msgContext); - - setMsgContextProperties(request, response, service, msgContext); - - ServiceContext serviceContext = msgContext.getServiceContext(); - - - ObjectRecipe objectRecipe = new ObjectRecipe(this.endpointClass.getName()); - Object obj = objectRecipe.create(this.endpointClass.getClassLoader()); - - WebServiceContextImpl wci = new WebServiceContextImpl(); - - serviceContext.setProperty(ServiceContext.SERVICE_OBJECT, obj); - - InvocationResponse processed = null; - try { - processed = RESTUtil.processURLRequest(msgContext, response.getOutputStream(), contentType); - } finally { - // de-associate JAX-WS MessageContext with the thread - // (association happens in - // POJOEndpointLifecycleManager.createService() call) - // POJOWebServiceContext.clear(); - } - - if (!processed.equals(InvocationResponse.CONTINUE)) { - // response.setStatusCode(HttpURLConnection.HTTP_OK); - String s = HTTPTransportReceiver.getServicesHTML(configurationContext); - PrintWriter pw = new PrintWriter(response.getOutputStream()); - pw.write(s); - pw.flush(); - } - } - - protected void processPOSTRequest(final IWSRequest request, final IWSResponse response, final AxisService service, - final MessageContext msgContext) throws Exception { - HttpServletRequest httpRequest = request.getAttribute(HttpServletRequest.class); - HttpServletResponse httpResponse = request.getAttribute(HttpServletResponse.class); - - String contentType = request.getHeader(HTTPConstants.HEADER_CONTENT_TYPE); - String soapAction = request.getHeader(HTTPConstants.HEADER_SOAP_ACTION); - if (soapAction == null) { - soapAction = "\"\""; - } - - ConfigurationContext configurationContext = msgContext.getConfigurationContext(); - configurationContext.fillServiceContextAndServiceGroupContext(msgContext); - - setMsgContextProperties(request, response, service, msgContext); - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - if (!HTTPTransportUtils.isRESTRequest(contentType)) { - - Thread.currentThread().setContextClassLoader(this.endpointClass.getClassLoader()); - - HTTPTransportUtils.processHTTPPostRequest(msgContext, httpRequest.getInputStream(), httpResponse - .getOutputStream(), contentType, soapAction, new URI(httpRequest.getRequestURI()).getPath()); - } else { - RESTUtil.processXMLRequest(msgContext, - request.getInputStream(), - response.getOutputStream(), - contentType); - } - - } finally { - Thread.currentThread().currentThread().setContextClassLoader(old); - } - } - - public void start() { - // TODO Auto-generated method stub - - } - - public void stop() { - // TODO Auto-generated method stub - // call handlers preDestroy - List handlers = this.binding.getHandlerChain(); - for (Handler handler : handlers) { - invokePreDestroy(handler); - } - } - - public PortMetaData getPortMetaData() { - // TODO Auto-generated method stub - // return this.portMetaData; - return this.portMetaData; - } - - /* - * Gets the right handlers for the port/service/bindings and performs injection. - */ - protected void configureHandlers() throws UnsupportedEncodingException, WSException { - EndpointDescription desc = AxisServiceGenerator.getEndpointDescription(this.service); - if (desc == null) { - //this.binding = new BindingImpl(""); - throw new WSException("There is no endpoint description for this service: " + this.service.getName()); - } else { - String xml = this.portMetaData.getHandlerXML(); - HandlerChainsType handlerChains = null; - if (xml != null) { - ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes("UTF-8")); - handlerChains = DescriptionUtils.loadHandlerChains(in,null); - desc.setHandlerChain(handlerChains); - } - - this.binding = BindingUtils.createBinding(desc); - - ClassLoader old = Thread.currentThread().getContextClassLoader(); - - Thread.currentThread().setContextClassLoader(this.endpointClass.getClassLoader()); - try{ - DescriptionUtils.registerHandlerHeaders(desc.getAxisService(), this.binding.getHandlerChain()); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - } - } - - - //here we inject @resource for handlers - // we also need to inject @resource for services - protected void injectHandlers() throws WSException { - List handlers = this.binding.getHandlerChain(); - try { - for (Handler handler : handlers) { - // axis2 has finished WebServiceContext injection - // so we just need to do injection of @EJB resource - injectEJBResources(handler); - invokePostConstruct(handler); - } - } catch (Exception e) { - throw new WSException("Injection of @EJB resource for " + this.service.getName() + " failed!", e); - } - } - - protected void injectEJBResources(final Object instance) throws WSException { - - Field[] fieldArray = instance.getClass().getDeclaredFields(); - - for(Field field : fieldArray){ - if(field.isAnnotationPresent(EJB.class)) { - //LOG.info("@EJB exists!"); - - EJB ejbResource = field.getAnnotation(EJB.class); - - String dependentEJBName = ejbResource.name(); - - try - { - - Context ictx = new InitialContext(); - - //Remote JNDI Resolver - EZBRemoteJNDIResolver jndiResolver = (EZBRemoteJNDIResolver)ictx.lookup("EZB_Remote_JNDIResolver"); - - String ejbResourceName = ((EZBJNDIBeanData)(jndiResolver.getEJBJNDINames(dependentEJBName)).toArray()[0]).getName(); - - - ClassLoader old = Thread.currentThread().getContextClassLoader(); - - try { - Thread.currentThread().setContextClassLoader(this.endpointClass.getClassLoader()); - - Object ejbObject = ictx.lookup(ejbResourceName);/*"org.ow2.easybeans.examples.statelessbean.StatelessBean" - + "_" + dependentEJBName + "@Remote");*/ - - boolean accessibility = field.isAccessible(); - - try { - field.setAccessible(true); - field.set(instance, ejbObject); - } catch (Exception e) { - throw new WSException("Exception occurs while injecting field for " + this.service.getName() + "!",e); - } finally { - field.setAccessible(accessibility); - } - } finally { - Thread.currentThread().setContextClassLoader(old); - } - } - catch(Exception e) { - // TODO Auto-generated catch block - throw new WSException("Unable to inject the field for " + this.service.getName() + "!", e); - } - - } - - } - } - - protected void processGETRequest(final IWSRequest request, final IWSResponse response, final MessageContext msgContext) throws Exception { - HttpServletRequest httpRequest = request.getAttribute(HttpServletRequest.class); - HttpServletResponse httpResponse = request.getAttribute(HttpServletResponse.class); - - response.setStatus(HttpStatus.SC_OK); - - response.setContentType("text/xml"); - - InputStream inStream = null; - String epr = httpRequest.getRequestURL().toString(); - - if(this.wsdlFile!=null) { - inStream = this.endpointClass.getClassLoader().getResourceAsStream(this.wsdlFile.toString()); - - OutputStream outStream = response.getOutputStream(); - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - - Document doc = null; - doc = db.parse(inStream); - doc.normalize(); - - Element root = doc.getDocumentElement(); - - NodeList nodeList = root.getChildNodes(); - - replaceURL(nodeList, epr); - - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer transformer = factory.newTransformer(); - Properties properties = transformer.getOutputProperties(); - properties.setProperty(OutputKeys.ENCODING, "UTF-8"); - properties.setProperty(OutputKeys.METHOD, "xml"); - transformer.setOutputProperties(properties); - - DOMSource source = new DOMSource(doc); - - StreamResult result = new StreamResult(outStream); - - transformer.transform(source, result); - } - - } - - public void replaceURL(final NodeList nodeList,final String url) { - - for(int i=0;i getMethods(final Class target, final Class annotationType) { - Collection methods = new HashSet(); - addMethods(target.getMethods(), annotationType, methods); - addMethods(target.getDeclaredMethods(), annotationType, methods); - return methods; - } - - private void addMethods(final Method[] methods, final Class annotationType, final Collection methodsCol) { - for (Method method : methods) { - if (method.isAnnotationPresent(annotationType)) { - methodsCol.add(method); - } - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/WebservicesContainer.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/WebservicesContainer.java deleted file mode 100644 index c5e240f14c..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/WebservicesContainer.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws; - -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesContainer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -public class WebservicesContainer extends JAXWSWebservicesContainer { - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebservicesContainer.class); - - public WebservicesContainer(final String name) { - super(name); - } - - /** - * Starts the container. - * Recursively starts inner endpoints. - */ - @Override - public void start() { - super.start(); - logger.debug("Start WebservicesContainer[{0}]", getName()); - } - - /** - * Stops the container. - * Recursively stops inner endpoints. - */ - @Override - public void stop() { - - super.stop(); - - logger.debug("Stop WebservicesContainer[{0}]", getName()); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/AttachmentDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/AttachmentDescriptionImpl.java deleted file mode 100644 index f955cf09dc..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/AttachmentDescriptionImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import org.apache.axis2.jaxws.description.AttachmentType; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public class AttachmentDescriptionImpl implements - org.apache.axis2.jaxws.description.AttachmentDescription { - - private static final Log log = LogFactory.getLog(AttachmentDescriptionImpl.class); - - private AttachmentType attachmentType; - private String[] mimeTypes; - - /** - * @param attachmentType - * @param mimeTypes - */ - public AttachmentDescriptionImpl(final AttachmentType attachmentType, final String[] mimeTypes) { - this.attachmentType = attachmentType; - this.mimeTypes = mimeTypes; - if (log.isDebugEnabled()) { - String debugString = toString(); - log.debug("Created AttachmentDescriptionImpl"); - log.debug(debugString); - } - } - - public AttachmentType getAttachmentType() { - return attachmentType; - } - - public String[] getMimeTypes() { - return mimeTypes; - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - - string.append(super.toString()); - string.append(newline); - string.append(" Attachment Type: " + getAttachmentType()); - // - string.append(newline); - string.append(" Mime Types: " + getMimeTypes()); - return string.toString(); - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionFactoryImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionFactoryImpl.java deleted file mode 100644 index 8e0397ec25..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionFactoryImpl.java +++ /dev/null @@ -1,531 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - - -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.xml.namespace.QName; - -import org.apache.axis2.addressing.EndpointReference; -import org.apache.axis2.addressing.EndpointReferenceHelper; -import org.apache.axis2.addressing.metadata.ServiceName; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.jaxws.ClientConfigurationFactory; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.description.DescriptionFactory; -import org.apache.axis2.jaxws.description.DescriptionKey; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.ResolvedHandlersDescription; -import org.apache.axis2.jaxws.description.ServiceDescription; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter; -import org.apache.axis2.jaxws.description.impl.ResolvedHandlersDescriptionImpl; -import org.apache.axis2.jaxws.description.validator.EndpointDescriptionValidator; -import org.apache.axis2.jaxws.description.validator.ServiceDescriptionValidator; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Creates the JAX-WS metadata descritpion hierachy from some combinations of WSDL, Java classes - * with annotations, and (in the future) deployment descriptors. This is the implementation and is - * not intended to be a public API. The API is: - * - * @see org.apache.axis2.jaxws.description.DescriptionFactory - */ -public class DescriptionFactoryImpl { - private static final Log log = LogFactory.getLog(DescriptionFactoryImpl.class); - private static Map cache = - new Hashtable(); - - /** A DescrptionFactory can not be instantiated; all methods are static. */ - private DescriptionFactoryImpl() { - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(URL, QName, Class, DescriptionBuilderComposite) - */ - public static ServiceDescription createServiceDescription(final URL wsdlURL, - final QName serviceQName, - final Class serviceClass) { - return createServiceDescription(wsdlURL, serviceQName, serviceClass, null, null); - - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(URL, - * QName, Class) - */ - public static ServiceDescription createServiceDescription(final URL wsdlURL, - final QName serviceQName, - final Class serviceClass, - final DescriptionBuilderComposite sparseComposite, - final Object sparseCompositeKey) { - ConfigurationContext configContext = DescriptionFactory.createClientConfigurationFactory() - .getClientConfigurationContext(); - DescriptionKey key = new DescriptionKey(serviceQName, wsdlURL, serviceClass, configContext); - if (log.isDebugEnabled()) { - log.debug("Cache Map = " + cache.toString()); - if (key != null) { - log.debug("Description Key = " + key.printKey()); - } - - } - ServiceDescription serviceDesc = null; - synchronized(configContext) { - if (log.isDebugEnabled()) { - log.debug("Check to see if ServiceDescription is found in cache"); - } - serviceDesc = cache.get(key); - - if (serviceDesc != null) { - if (log.isDebugEnabled()) { - log.debug("ServiceDescription found in the cache"); - log.debug(serviceDesc.toString()); - } - } - if (serviceDesc == null) { - if (log.isDebugEnabled()) { - log.debug("ServiceDescription not found in the cache"); - log.debug(" creating new ServiceDescriptionImpl"); - } - - ServiceDescriptionImpl serviceDescImpl = null; - if (sparseComposite != null) { - serviceDescImpl = new ServiceDescriptionImpl(wsdlURL, serviceQName, - serviceClass, sparseComposite, - sparseCompositeKey); - if (log.isDebugEnabled()) { - log.debug("Client-side service description created with service class: " + serviceClass - + ", Service QN: " + serviceQName - + ", and DBC: " + sparseComposite); - log.debug(serviceDescImpl.toString()); - } - - } else { - serviceDescImpl = new ServiceDescriptionImpl(wsdlURL, serviceQName, serviceClass); - } - serviceDescImpl.setAxisConfigContext(configContext); - - serviceDesc = serviceDescImpl; - if (log.isDebugEnabled()) { - log.debug("ServiceDescription created with WSDL URL: " + wsdlURL + "; QName: " + - serviceQName + "; Class: " + serviceClass); - log.debug(serviceDesc.toString()); - } - if (log.isDebugEnabled()) { - log.debug("Caching new ServiceDescription in the cache"); - } - cache.put(key, serviceDesc); - } else { - // A service description was found in the cache. If a sparse composite was - // specified, then set it on the found service desc - ((ServiceDescriptionImpl) serviceDesc).getDescriptionBuilderComposite(). - setSparseComposite(sparseCompositeKey, sparseComposite); - } - ((ServiceDescriptionImpl) serviceDesc).registerUse(); - } - return serviceDesc; - } - - /** - * Clears the entire ServiceDescription cache. - * - *

    Note

    - * This function might cause unpredictable results when configuration contexts are being reused - * and/or there are outstanding requests using the cached ServiceDescription objects. Also, - * in-flight requests (both client and server) using ServiceDelegates MUST be done and out of - * scope before this method is called. - * - */ - public static void clearServiceDescriptionCache() { - cache.clear(); - } - - /** - * Clears all the ServiceDescription objects in the cache associated with the specified - * configuration context. - * - *

    Note

    - * This function should only be used to clear the cache when the specified configuration context - * will not be used anymore and there are no outstanding requests using the associated - * ServiceDescription objects. Also, in-flight requests (both client and server) using - * ServiceDelegates MUST be done and out of scope before this method is called. - * Otherwise, unpredictable results might occur. - * - * @param configContext The configuration context associated with the ServiceDescription - * objects in the cache. - */ - public static void clearServiceDescriptionCache(final ConfigurationContext configContext) { - if (configContext == null) { - return; - } - synchronized (configContext) { - synchronized (cache) { - Iterator iter = cache.keySet().iterator(); - while (iter.hasNext()) { - DescriptionKey key = iter.next(); - if (key.getConfigContext() == configContext) { - iter.remove(); - } - } - } - } - } - - /** @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(Class) */ - public static ServiceDescription createServiceDescription(final Class serviceImplClass) { - return createServiceDescription(serviceImplClass, null); - } - - /** @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescription(Class) */ - public static ServiceDescription createServiceDescription(final Class serviceImplClass, final ConfigurationContext configContext) { - ServiceDescription serviceDesc = null; - - if (serviceImplClass != null) { - JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); - HashMap dbcMap = converter.produceDBC(); - List serviceDescList = createServiceDescriptionFromDBCMap(dbcMap, configContext); - if (serviceDescList != null && serviceDescList.size() > 0) { - serviceDesc = serviceDescList.get(0); - if (log.isDebugEnabled()) { - log.debug("ServiceDescription created with class: " + serviceImplClass); - log.debug(serviceDesc); - } - } else { - if (log.isDebugEnabled()) { - log.debug("ServiceDesciption was not created for class: " + serviceImplClass); - } - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("createServiceDescrErr", serviceImplClass.getName())); - } - } - return serviceDesc; - } - - /** @see org.apache.axis2.jaxws.description.DescriptionFactory#createServiceDescriptionFromDBCMap(HashMap) */ - public static List createServiceDescriptionFromDBCMap( - final HashMap dbcMap, final ConfigurationContext configContext) { - if (log.isDebugEnabled()) { - log.debug("createServiceDescriptionFromDBCMap(Hashmap,ConfigurationContext " ); - } - - List serviceDescriptionList = new ArrayList(); - for (Iterator nameIter = dbcMap.values() - .iterator(); nameIter.hasNext();) { - DescriptionBuilderComposite serviceImplComposite = nameIter.next(); - if (isImpl(serviceImplComposite)) { - // process this impl class - - // the implementation class represented by this DBC represents a single wsdl:service - Set sQNames = serviceImplComposite.getServiceQNames(); - if(sQNames == null - || - sQNames.isEmpty()) { - - if(log.isDebugEnabled()) { - log.debug("Adding ServiceDescription instances from composite"); - } - ServiceDescriptionImpl serviceDescription = new ServiceDescriptionImpl( - dbcMap, serviceImplComposite, configContext); - ServiceDescriptionValidator validator = - new ServiceDescriptionValidator(serviceDescription); - //if (validator.validate()) { - serviceDescriptionList.add(serviceDescription); - if (log.isDebugEnabled()) { - log.debug("Service Description created from DescriptionComposite: " + - serviceDescription); - } - /* - } else { - - String msg = Messages.getMessage("createSrvcDescrDBCMapErr", - validator.toString(), - serviceImplComposite.toString(), - serviceDescription.toString()); - throw ExceptionFactory.makeWebServiceException(msg); - } - */ - } - - // the implementation class represented by this DBC represents multiple wsdl:services - else { - Iterator sQNameIter = sQNames.iterator(); - while(sQNameIter.hasNext()) { - QName sQName = sQNameIter.next(); - if(log.isDebugEnabled()) { - log.debug("Adding ServiceDescription from service QName set for : " + sQName); - } - ServiceDescriptionImpl serviceDescription = new ServiceDescriptionImpl(dbcMap, - serviceImplComposite, - configContext, - sQName); - ServiceDescriptionValidator validator = - new ServiceDescriptionValidator(serviceDescription); - if (validator.validate()) { - serviceDescriptionList.add(serviceDescription); - if (log.isDebugEnabled()) { - log.debug("Service Description created from DescriptionComposite: " + - serviceDescription); - } - } else { - - String msg = Messages.getMessage("createSrvcDescrDBCMapErr", - validator.toString(), - serviceImplComposite.toString(), - serviceDescription.toString()); - throw ExceptionFactory.makeWebServiceException(msg); - } - } - } - } - else { - if (log.isDebugEnabled()) { - log.debug("DBC is not a service impl: " + serviceImplComposite.toString()); - } - } - } - - // TODO: Process all composites that are WebFaults...current thinking is - // that - // since WebFault annotations only exist on exception classes, then they - // should be processed by themselves, and at this level - - return serviceDescriptionList; - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, - * Class, QName, org.apache.axis2.jaxws.description.DescriptionFactory.UpdateType) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final QName portQName, - final DescriptionFactory.UpdateType updateType, - final String bindingId, final String endpointAddress) { - return updateEndpoint(serviceDescription, sei, portQName, updateType, null, null, bindingId, endpointAddress); - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, - * Class, QName, org.apache.axis2.jaxws.description.DescriptionFactory.UpdateType) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final QName portQName, - final DescriptionFactory.UpdateType updateType, final Object serviceDelegateKey, final String bindingId, final String endpointAddress) { - return updateEndpoint(serviceDescription, sei, portQName, updateType, null, serviceDelegateKey, bindingId, endpointAddress); - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, Class, QName, org.apache.axis2.jaxws.description.DescriptionFactory.UpdateType, DescriptionBuilderComposite) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final QName portQName, - final DescriptionFactory.UpdateType updateType, - final DescriptionBuilderComposite composite, - final Object serviceDelegateKey, - final String bindingId, - final String endpointAddress) { - EndpointDescription endpointDesc = null; - synchronized(serviceDescription) { - endpointDesc = - ((ServiceDescriptionImpl)serviceDescription) - .updateEndpointDescription(sei, portQName, updateType, composite, serviceDelegateKey, bindingId, endpointAddress); - } - EndpointDescriptionValidator endpointValidator = new EndpointDescriptionValidator(endpointDesc); - - boolean isEndpointValid = endpointValidator.validate(); - - if (!isEndpointValid) { - String msg = Messages.getMessage("endpointDescriptionValidationErrors", - endpointValidator.toString()); - throw ExceptionFactory.makeWebServiceException(msg); - } - if (log.isDebugEnabled()) { - log.debug("EndpointDescription updated: " + endpointDesc); - } - - setPropertiesOnEndpointDesc(endpointDesc, composite); - - return endpointDesc; - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, - * Class, EndpointReference, String, DescriptionFactory.UpdateType) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final EndpointReference epr, - final String addressingNamespace, - final DescriptionFactory.UpdateType updateType, final String bindingId, final String endpointAddress) { - return updateEndpoint(serviceDescription, sei, epr, addressingNamespace, updateType, null, null, bindingId, endpointAddress); - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, - * Class, EndpointReference, String, DescriptionFactory.UpdateType, Object) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final EndpointReference epr, - final String addressingNamespace, - final DescriptionFactory.UpdateType updateType, - final Object sparseCompositeKey, final String bindingId, final String endpointAddress) { - return updateEndpoint(serviceDescription, sei, epr, addressingNamespace, updateType, null, sparseCompositeKey, bindingId, endpointAddress); - } - - /** - * @see org.apache.axis2.jaxws.description.DescriptionFactory#updateEndpoint(ServiceDescription, - * Class, EndpointReference, String, DescriptionFactory.UpdateType, DescriptionBuilderComposite, Object) - */ - public static EndpointDescription updateEndpoint( - final ServiceDescription serviceDescription, final Class sei, final EndpointReference epr, - final String addressingNamespace, - final DescriptionFactory.UpdateType updateType, - final DescriptionBuilderComposite composite, - final Object sparseCompositeKey, final String bindingId, final String endpointAddress) { - QName portQName = null; - - try { - ServiceName serviceName = EndpointReferenceHelper.getServiceNameMetadata(epr, addressingNamespace); - QName serviceQName = serviceDescription.getServiceQName(); - - //We need to throw an exception if the service name in the EPR metadata does not - //match the service name associated with the JAX-WS service instance. - if (serviceName.getName() != null && !serviceQName.equals(serviceName.getName())) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("serviceNameMismatch", - serviceName.getName().toString(), - serviceQName.toString())); - } - //If a port name is available from the EPR metadata then use that, otherwise - //leave it to the runtime to find a suitable port, based on WSDL/annotations. - if (serviceName.getEndpointName() != null) { - portQName = new QName(serviceQName.getNamespaceURI(), serviceName.getEndpointName()); - } - } - catch (Exception e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("updateEndpointError", e.getMessage())); - } - - return updateEndpoint(serviceDescription, sei, portQName, updateType, composite, sparseCompositeKey, bindingId, endpointAddress); - } - - public static ClientConfigurationFactory getClientConfigurationFactory() { - return ClientConfigurationFactory.newInstance(); - } - - /** - * This method will be used to determine if a given DBC represents a Web service - * implementation. - * - * @param dbc - DescriptionBuilderComposite - * @return - boolean - */ - private static boolean isImpl(final DescriptionBuilderComposite dbc) { - if (!dbc.isInterface() - && (dbc.getWebServiceAnnot() != null || dbc - .getWebServiceProviderAnnot() != null)) { - return true; - } - return false; - } - - /** - * This method will set any properties supplied on the DescriptionBuilderComposite instance - * on the EndpointDescription. If the DBC is null or there are no properties present, this - * method will have no effect. - */ - static void setPropertiesOnEndpointDesc(final EndpointDescription endpointDesc, final DescriptionBuilderComposite - composite) { - if(composite != null - && - composite.getProperties() != null - && - !composite.getProperties().isEmpty()) { - for(String key : composite.getProperties().keySet()) { - Object value = composite.getProperties().get(key); - if(log.isDebugEnabled()) { - log.debug("Setting property from DBC onto EndpointDescription, key= " + - key + ", value= " + value); - } - endpointDesc.setProperty(key, value); - } - } - } - - public static ResolvedHandlersDescription createResolvedHandlersDescription() { - return new ResolvedHandlersDescriptionImpl(); - } - - /** - * Remove the ServiceDescription instance from the client-side cache if there are no - * service delegates using it. Note this must be done in a sync block so that a lookup - * in createServiceDescription doesn't access the cache. - * - * @param svcDesc The instance to be removed. - */ - static boolean removeFromCache(final ServiceDescriptionImpl svcDesc) { - boolean svcDescRemoved = false; - ConfigurationContext configContext = svcDesc.getAxisConfigContext(); - synchronized(configContext) { - svcDesc.deregisterUse(); - if (svcDesc.isInUse()) { - if (log.isDebugEnabled()) { - log.debug("ServiceDescription still in use; not removed from cache"); - } - svcDescRemoved = false; - } else { - if (log.isDebugEnabled()) { - log.debug("ServiceDescription not in use; will be removed from cache"); - } - svcDescRemoved = true; - Set> cacheEntrySet = - cache.entrySet(); - Iterator> cacheEntryIterator = - cacheEntrySet.iterator(); - while (cacheEntryIterator.hasNext()) { - Map.Entry entry = - cacheEntryIterator.next(); - ServiceDescription entrySvcDescValue = entry.getValue(); - if (svcDesc == entrySvcDescValue) { - cacheEntryIterator.remove(); - if (log.isDebugEnabled()) { - log.debug("Removed service description from cache"); - } - } - } - } - } - return svcDescRemoved; - } -} - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionUtils.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionUtils.java deleted file mode 100644 index cc2d018d6d..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/DescriptionUtils.java +++ /dev/null @@ -1,620 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - - -import static org.apache.axis2.jaxws.description.builder.MDQConstants.CONSTRUCTOR_METHOD; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; - -import javax.wsdl.Binding; -import javax.wsdl.BindingOperation; -import javax.wsdl.Operation; -import javax.wsdl.extensions.mime.MIMEContent; -import javax.wsdl.extensions.mime.MIMEMultipartRelated; -import javax.wsdl.extensions.mime.MIMEPart; -import javax.wsdl.extensions.soap.SOAPBody; -import javax.wsdl.extensions.soap.SOAPHeader; -import javax.wsdl.extensions.soap12.SOAP12Body; -import javax.wsdl.extensions.soap12.SOAP12Header; -import javax.xml.namespace.QName; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.soap.SOAPBinding; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.description.AttachmentDescription; -import org.apache.axis2.jaxws.description.AttachmentType; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.EndpointDescriptionWSDL; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MDQConstants; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.WebMethodAnnot; -import org.apache.axis2.jaxws.description.impl.HandlerChainsParser; -import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** Utilities used throughout the Description package. */ -public class DescriptionUtils { - private static final Log log = LogFactory.getLog(DescriptionUtils.class); - - static boolean isEmpty(final String string) { - return (string == null || "".equals(string)); - } - - static boolean isEmpty(final QName qname) { - return qname == null || isEmpty(qname.getLocalPart()); - } - - /** @return Returns TRUE if we find just one WebMethod Annotation with exclude flag set to false */ - static boolean falseExclusionsExist(final DescriptionBuilderComposite dbc) { - MethodDescriptionComposite mdc = null; - Iterator iter = dbc.getMethodDescriptionsList().iterator(); - - while (iter.hasNext()) { - mdc = iter.next(); - - WebMethodAnnot wma = mdc.getWebMethodAnnot(); - if (wma != null) { - if (wma.exclude() == false) { - return true; - } - } - } - - return false; - } - - /** - * Gathers all MethodDescriptionCompsite's that contain a WebMethod Annotation with the exclude - * set to FALSE - * - * @return Returns List - */ - static ArrayList getMethodsWithFalseExclusions( - final DescriptionBuilderComposite dbc) { - ArrayList mdcList = new ArrayList(); - Iterator iter = dbc.getMethodDescriptionsList().iterator(); - - if (DescriptionUtils.falseExclusionsExist(dbc)) { - while (iter.hasNext()) { - MethodDescriptionComposite mdc = iter.next(); - if (mdc.getWebMethodAnnot() != null) { - if (mdc.getWebMethodAnnot().exclude() == false) { - mdc.setDeclaringClass(dbc.getClassName()); - mdcList.add(mdc); - } - } - } - } - - return mdcList; - } - - /* - * Check whether a MethodDescriptionComposite contains a WebMethod annotation with - * exlude set to true - */ - static boolean isExcludeTrue(final MethodDescriptionComposite mdc) { - - if (mdc.getWebMethodAnnot() != null) { - if (mdc.getWebMethodAnnot().exclude() == true) { - return true; - } - } - - return false; - } - - static String javifyClassName(final String className) { - if (className.indexOf("/") != -1) { - return className.replaceAll("/", "."); - } - return className; - } - - /** - * Return the name of the class without any package qualifier. - * - * @param theClass - * @return the name of the class sans package qualification. - */ - static String getSimpleJavaClassName(final String name) { - String returnName = null; - - if (name != null) { - String fqName = name; - - // We need the "simple name", so strip off any package information from the name - int endOfPackageIndex = fqName.lastIndexOf('.'); - int startOfClassIndex = endOfPackageIndex + 1; - returnName = fqName.substring(startOfClassIndex); - } - return returnName; - } - - /** - * Returns the package name from the class. If no package, then returns null - * - * @param theClassName - * @return - */ - static String getJavaPackageName(final String theClassName) { - String returnPackage = null; - if (theClassName != null) { - String fqName = theClassName; - // Get the package name, if there is one - int endOfPackageIndex = fqName.lastIndexOf('.'); - if (endOfPackageIndex >= 0) { - returnPackage = fqName.substring(0, endOfPackageIndex); - } - } - return returnPackage; - } - - /** - * Create a JAX-WS namespace based on the package name - * - * @param packageName - * @param protocol - * @return - */ - static final String NO_PACKAGE_HOST_NAME = "DefaultNamespace"; - - static String makeNamespaceFromPackageName(final String packageName, String protocol) { - if (DescriptionUtils.isEmpty(protocol)) { - protocol = "http"; - } - if (DescriptionUtils.isEmpty(packageName)) { - return protocol + "://" + NO_PACKAGE_HOST_NAME; - } - StringTokenizer st = new StringTokenizer(packageName, "."); - String[] words = new String[ st.countTokens() ]; - for (int i = 0; i < words.length; ++i) { - words[i] = st.nextToken(); - } - - StringBuffer sb = new StringBuffer(80); - for (int i = words.length - 1; i >= 0; --i) { - String word = words[i]; - // seperate with dot - if (i != words.length - 1) { - sb.append('.'); - } - sb.append(word); - } - return protocol + "://" + sb.toString() + "/"; - } - - /** - * Determines whether a method should have an OperationDescription created for it based on the - * name. This is a convenience method to allow us to exlude methods such as constructors. - * - * @param methodName - * @return - */ - static boolean createOperationDescription(final String methodName) { - if (methodName.equals(CONSTRUCTOR_METHOD)) { - return false; - } - return true; - } - - /** - * This is a helper method that will open a stream to an @HandlerChain configuration file. - * - * @param configFile - The path to the file - * @param className - The class in which the annotation was declared. This is used in case the - * file path is relative. - * @param classLoader - ClassLoader used to load relative file paths. - * @return - */ - public static InputStream openHandlerConfigStream(final String configFile, String className, - final ClassLoader - classLoader) { - InputStream configStream = null; - URL configURL; - if (log.isDebugEnabled()) { - log.debug("Attempting to load @HandlerChain configuration file: " + configFile + - " relative to class: " + className); - } - try { - configURL = new URL(configFile); - if (configURL != null) { - if (log.isDebugEnabled()) { - log.debug("Found absolute @HandlerChain configuration file: " + configFile); - } - configStream = configURL.openStream(); - } - } - catch (MalformedURLException e) { - // try another method to obtain a stream to the configuration file - } - catch (IOException e) { - // report this since it was a valid URL but the openStream caused a problem - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("hcConfigLoadFail", - configFile, className, - e.toString())); - } - if (configStream == null) { - if (log.isDebugEnabled()) { - log.debug("@HandlerChain.file attribute refers to a relative location: " - + configFile); - } - className = className.replace(".", "/"); - try { - if (log.isDebugEnabled()) { - log.debug("Resolving @HandlerChain configuration file: " + configFile + - " relative to class file: " + className); - } - URI uri = new URI(className); - uri = uri.resolve(configFile); - String resolvedPath = uri.toString(); - if (log.isDebugEnabled()) { - log.debug("@HandlerChain.file resolved file path location: " + resolvedPath); - } - configStream = getInputStream(resolvedPath, classLoader); - } - catch (URISyntaxException e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("hcConfigLoadFail", - configFile, className, - e.toString())); - } - } - if (configStream == null) { - //throw ExceptionFactory.makeWebServiceException(Messages.getMessage("handlerChainNS", - // configFile, className)); - // No longer throwing an exception here. This method is best-effort, and the caller may - // change the class to which the path is relative and try again. The caller is responsible - // for determining when to "give up" - if (log.isDebugEnabled()) { - log.debug("@HandlerChain configuration fail: " + configFile + " in class: " + className + " failed to load."); - } - } else { - if (log.isDebugEnabled()) { - log.debug("@HandlerChain configuration file: " + configFile + " in class: " + - className + " was successfully loaded."); - } - } - return configStream; - } - - private static InputStream getInputStream(final String path, final ClassLoader classLoader) { - InputStream configStream = classLoader.getResourceAsStream(path); - if (configStream == null) { - // try another classloader - ClassLoader cl = System.class.getClassLoader(); - if (cl != null) { - configStream = cl.getResourceAsStream(path); - } - } - if (configStream == null) { - // and another classloader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - if (cl != null) { - configStream = cl.getResourceAsStream(path); - } - } - return configStream; - } - - /** - * Determine is this method is an async method - * @param method - The method to examine - * @return - */ - public static boolean isAsync(final Method method) { - - if (method == null) { - return false; - } - - String methodName = method.getName(); - Class returnType = method.getReturnType(); - - if (methodName.endsWith("Async") - && (returnType.isAssignableFrom(javax.xml.ws.Response.class) || returnType - .isAssignableFrom(java.util.concurrent.Future.class))) { - return true; - } else { - return false; - } - } - - public static HandlerChainsType loadHandlerChains(final InputStream is, final ClassLoader classLoader) { - try { - HandlerChainsParser parser = new HandlerChainsParser(); - return parser.loadHandlerChains(is); - } catch (Exception e) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("loadHandlerChainErr", e.getMessage())); - } - } - - - /** - * This method will loop through a list of extensibility elements looking for one - * of four objects: SOAPBody, SOAP12Body, SOAPHeader, SOAP12Header. If any of these - * objects are found the namespace URI from this object will be returned. - */ - public static String getNamespaceFromSOAPElement(final List extElements) { - Iterator extIter = extElements.iterator(); - while (extIter.hasNext()) { - Object extObj = extIter.next(); - if (extObj instanceof SOAPBody) { - if (log.isDebugEnabled()) { - log.debug("Returning SOAPBody namespace: " - + ((SOAPBody) extObj).getNamespaceURI()); - } - return ((SOAPBody) extObj).getNamespaceURI(); - } else if (extObj instanceof SOAP12Body) { - if (log.isDebugEnabled()) { - log.debug("Returning SOAP12Body namespace: " - + ((SOAP12Body) extObj).getNamespaceURI()); - } - return ((SOAP12Body) extObj).getNamespaceURI(); - } else if (extObj instanceof SOAPHeader) { - if (log.isDebugEnabled()) { - log.debug("Returning SOAPHeader namespace: " - + ((SOAPHeader) extObj).getNamespaceURI()); - } - return ((SOAPHeader) extObj).getNamespaceURI(); - } else if (extObj instanceof SOAP12Header) { - if (log.isDebugEnabled()) { - log.debug("Returning SOAP12Header namespace: " - + ((SOAP12Header) extObj).getNamespaceURI()); - } - return ((SOAP12Header) extObj).getNamespaceURI(); - } - else if (extObj instanceof MIMEMultipartRelated) { - if (log.isDebugEnabled()) { - log.debug("Found a MIMEMultipartRelated element. Unwrapping to get SOAP binding."); - } - MIMEMultipartRelated mime = (MIMEMultipartRelated) extObj; - List mimeParts = mime.getMIMEParts(); - - Iterator itr = mimeParts.iterator(); - while (itr.hasNext()) { - MIMEPart mimePart = (MIMEPart) itr.next(); - List elements = mimePart.getExtensibilityElements(); - - String ns = getNamespaceFromSOAPElement(elements); - return ns; - } - } - } - return null; - } - /** - * This method will process a WSDL Binding and build AttachmentDescription objects if the - * WSDL dicatates attachments. - */ - public static void getAttachmentFromBinding(final OperationDescriptionImpl opDesc, final Binding binding) { - if (binding != null) { - Iterator bindingOpIter = binding.getBindingOperations().iterator(); - while (bindingOpIter.hasNext()) { - BindingOperation bindingOp = (BindingOperation) bindingOpIter.next(); - // found the BindingOperation that matches the current OperationDescription - if (bindingOp.getName().equals(opDesc.getName().getLocalPart())) { - if (bindingOp.getBindingInput() != null) { - if (log.isDebugEnabled()) { - log.debug("Processing binding opertion input"); - } - processBindingForMIME(bindingOp.getBindingInput().getExtensibilityElements(), - opDesc, bindingOp.getOperation(), true); - } - if (bindingOp.getBindingOutput() != null) { - if (log.isDebugEnabled()) { - log.debug("Processing binding output"); - } - processBindingForMIME(bindingOp.getBindingOutput().getExtensibilityElements(), - opDesc, bindingOp.getOperation(), false); - } - } - } - } - } - - /** - * This method will loop through the extensibility elements for a given BindingInput or - * BindingOutput element and determine if it has any MIMEMultipartRelated content. If it - * does it will build up the appropriate AttachmentDescription objects. - */ - private static void processBindingForMIME(final List extensibilityElements, - final OperationDescriptionImpl opDesc, - final Operation operation, - final boolean isRequest) { - Iterator extensibilityIter = extensibilityElements.iterator(); - while (extensibilityIter.hasNext()) { - Object obj = extensibilityIter.next(); - if (obj instanceof MIMEMultipartRelated) { - if (log.isDebugEnabled()) { - log.debug("Found a mime:multipartRelated extensiblity element."); - } - // Found mime information now process it and determine if we need to - // create an AttachmentDescription - MIMEMultipartRelated mime = (MIMEMultipartRelated) obj; - Iterator partIter = mime.getMIMEParts().iterator(); - while (partIter.hasNext()) { - if (log.isDebugEnabled()) { - log.debug("Found a mime:part child element."); - } - MIMEPart mimePart = (MIMEPart) partIter.next(); - Iterator mExtIter = mimePart.getExtensibilityElements().iterator(); - // Process each mime part to determine if there is mime content - while (mExtIter.hasNext()) { - Object obj2 = mExtIter.next(); - // For mime content we need to potentially create an AttachmentDescription - if (obj2 instanceof MIMEContent) { - MIMEContent mimeContent = (MIMEContent) obj2; - String part = mimeContent.getPart(); - String type = mimeContent.getType(); - // if we have not already processed this part for the operation - if (opDesc.getPartAttachmentDescription(part) == null) { - if (log.isDebugEnabled()) { - log.debug("Adding new AttachmentDescription for part: " + part - + " on operation: " + opDesc.getOperationName()); - } - AttachmentDescription attachmentDesc = - new AttachmentDescriptionImpl(AttachmentType.SWA, - new String[] { type }); - opDesc.addPartAttachmentDescription(part, attachmentDesc); - } else { - if (log.isDebugEnabled()) { - log.debug("Already created AttachmentDescription for part: " - + part + " of type: " + type); - } - } - } - else if (obj2 instanceof SOAPBody || obj2 instanceof SOAP12Body) { - if (log.isDebugEnabled()) { - log.debug("Found a body element with potential nested mime content"); - } - - // Flag whether there's a potential nested attachment. - if (isRequest) { - opDesc.setHasRequestSwaRefAttachments(true); - } - else { - opDesc.setHasResponseSwaRefAttachments(true); - } - } - } - } - } - } - } - - public static void registerHandlerHeaders(final AxisService axisService, final List handlers) { - if (handlers == null || axisService == null) { - return; - } - - ArrayList understoodHeaderQNames = new ArrayList(); - for (Handler handler : handlers) { - if (handler instanceof SOAPHandler) { - SOAPHandler soapHandler = (SOAPHandler) handler; - - Set headers = soapHandler.getHeaders(); - if (headers != null) { - for (QName header : headers) { - if (!understoodHeaderQNames.contains(header)) { - understoodHeaderQNames.add(header); - } - } - } - } - } - - if (!understoodHeaderQNames.isEmpty()) { - Parameter headerQNParameter = - new Parameter(EndpointDescription.HANDLER_PARAMETER_QNAMES, understoodHeaderQNames); - try { - axisService.addParameter(headerQNParameter); - } catch (AxisFault e) { - log.warn(Messages.getMessage("regHandlerHeadersErr",axisService.getName(),e.getMessage())); - } - } - } - - /** - * Given a binding type value based on a JAXWS anntation, return the corresponding WSDL - * binding type. The JAXWS annotation values understood are those returned by - * mapBindingTypeWsdltoAnnotation. - * - * @see #mapBindingTypeWsdlToAnnotation(String, String) - * - * @param annotationBindingType The binding type as represented by a JAXWS annotation value - * @return The binding type as represented by a WSDL binding extension namespace value - */ - public static String mapBindingTypeAnnotationToWsdl(final String annotationBindingType) { - String wsdlBindingType = null; - - if (SOAPBinding.SOAP11HTTP_BINDING.equals(annotationBindingType) - || MDQConstants.SOAP11JMS_BINDING.equals(annotationBindingType)) { - wsdlBindingType = EndpointDescriptionWSDL.SOAP11_WSDL_BINDING; - } else if (SOAPBinding.SOAP12HTTP_BINDING.equals(annotationBindingType) - || MDQConstants.SOAP12JMS_BINDING.equals(annotationBindingType)) { - wsdlBindingType = EndpointDescriptionWSDL.SOAP12_WSDL_BINDING; - } else if (javax.xml.ws.http.HTTPBinding.HTTP_BINDING.equals(annotationBindingType)) { - wsdlBindingType = EndpointDescriptionWSDL.HTTP_WSDL_BINDING; - } - - return wsdlBindingType; - } - - /** - * Given a binding type value based on WSDL, return the corresponding JAXWS annotation value. - * The WSDL binding type values are based on the namespace of the binding extension element. - * The JAXWS annotation values correspond to the values to the HTTPBinding and SOAPBinding - * annotations. Additionally, proprietary values for JMS bindings are supported. The JAXWS - * binding type annotation values returned could be from SOAPBinding or HTTPBinding. - * - * @param wsdlBindingType The binding type as represnted by the WSDL binding extension namespace - * @param soapTransport The WSDL transport. Used to determine if a JMS binding type should - * be returned - * @return The binding represented by a JAXWS Binding Type Annotation value from either - * SOAPBinding or HTTPBinding. - */ - public static String mapBindingTypeWsdlToAnnotation(final String wsdlBindingType, final String soapTransport) { - String soapBindingType = null; - if (EndpointDescriptionWSDL.SOAP11_WSDL_BINDING.equals(wsdlBindingType)) { - if (MDQConstants.SOAP11JMS_BINDING.equals(soapTransport)) { - soapBindingType = MDQConstants.SOAP11JMS_BINDING; - } else { - //REVIEW: We are making the assumption that if not JMS, then HTTP - soapBindingType = SOAPBinding.SOAP11HTTP_BINDING; - } - } else if (EndpointDescriptionWSDL.SOAP12_WSDL_BINDING.equals(wsdlBindingType)) { - if (MDQConstants.SOAP12JMS_BINDING.equals(soapTransport)) { - soapBindingType = MDQConstants.SOAP12JMS_BINDING; - } else { - //REVIEW: We are making the assumption that if not JMS, then HTTP - soapBindingType = SOAPBinding.SOAP12HTTP_BINDING; - } - } else if (EndpointDescriptionWSDL.HTTP_WSDL_BINDING.equals(wsdlBindingType)) { - soapBindingType = javax.xml.ws.http.HTTPBinding.HTTP_BINDING; - } - return soapBindingType; - } -} - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointDescriptionImpl.java deleted file mode 100644 index 9b72a9323e..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointDescriptionImpl.java +++ /dev/null @@ -1,2153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.io.InputStream; -import java.lang.annotation.Annotation; -import java.net.URL; -import java.security.PrivilegedAction; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import javax.jws.HandlerChain; -import javax.jws.WebService; -import javax.wsdl.Binding; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.http.HTTPBinding; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.extensions.soap12.SOAP12Address; -import javax.wsdl.extensions.soap12.SOAP12Binding; -import javax.xml.namespace.QName; -import javax.xml.ws.BindingType; -import javax.xml.ws.Service; -import javax.xml.ws.ServiceMode; -import javax.xml.ws.WebServiceProvider; -import javax.xml.ws.handler.PortInfo; -import javax.xml.ws.soap.MTOM; -import javax.xml.ws.soap.MTOMFeature; -import javax.xml.ws.soap.SOAPBinding; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.Constants; -import org.apache.axis2.Constants.Configuration; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.AxisServiceGroup; -import org.apache.axis2.description.OutInAxisOperation; -import org.apache.axis2.description.OutOnlyAxisOperation; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder; -import org.apache.axis2.description.WSDL11ToAxisServiceBuilder; -import org.apache.axis2.engine.AxisConfiguration; -import org.apache.axis2.java.security.AccessController; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.catalog.JAXWSCatalogManager; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.EndpointDescriptionJava; -import org.apache.axis2.jaxws.description.EndpointDescriptionWSDL; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescription; -import org.apache.axis2.jaxws.description.ServiceDescription; -import org.apache.axis2.jaxws.description.ServiceDescriptionWSDL; -import org.apache.axis2.jaxws.description.builder.CustomAnnotationInstance; -import org.apache.axis2.jaxws.description.builder.CustomAnnotationProcessor; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MDQConstants; -import org.apache.axis2.jaxws.description.builder.WsdlComposite; -import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; -import org.apache.axis2.jaxws.feature.ServerConfigurator; -import org.apache.axis2.jaxws.feature.ServerFramework; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.axis2.jaxws.registry.ServerConfiguratorRegistry; -import org.apache.axis2.jaxws.util.CatalogURIResolver; -import org.apache.axis2.jaxws.util.WSDL4JWrapper; -import org.apache.axis2.wsdl.WSDLConstants; -import org.apache.axis2.wsdl.util.WSDLDefinitionWrapper; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** @see ../EndpointDescription */ -/* - * IMPORTANT NOTE: Axis2 currently only supports 1 service and 1 port under that service. When that is - * fixed, that will probably have an impact on this class. In particular, I think this should be created - * somehow from an AxisService/AxisPort combination, and not directly from the WSDL. - */ -class EndpointDescriptionImpl - implements EndpointDescription, EndpointDescriptionJava, EndpointDescriptionWSDL { - - private ServiceDescriptionImpl parentServiceDescription; - private AxisService axisService; - // In some environments some of the resources on an AxisService can lead to OOMs. - // However, releasing these resources can have other implications. - private boolean releaseAxisServiceResources = false; - - private QName portQName; - private QName serviceQName; - - // Corresponds to a port that was added dynamically via addPort and is not declared (either in WSDL or annotations) - private boolean isDynamicPort; - - // If the WSDL is fully specified, we could build the AxisService from the WSDL - private boolean isAxisServiceBuiltFromWSDL; - - private String serviceImplName; //class name of the service impl or SEI - - // Note that an EndpointInterfaceDescription will ONLY be set for an Endpoint-based implementation; - // it will NOT be set for a Provider-based implementation - private EndpointInterfaceDescription endpointInterfaceDescription; - - //On Client side, there should be One ServiceClient instance per AxisSerivce - private ServiceClient serviceClient = null; - - //This is the base WebService or WebServiceProvider that we are processing - DescriptionBuilderComposite composite = null; - - // Set of packages that are needed to marshal/unmashal data (used to set JAXBContext) - TreeSet packages = null; - - // The JAX-WS Handler port information corresponding to this endpoint - private PortInfo portInfo; - - private String clientBindingID; - // The effective endpoint address. It could be set by the client or come from the WSDL SOAP address - private String endpointAddress; - // The endpoint address from the WSDL soap:address extensibility element if present. - private String wsdlSOAPAddress; - - private static final Log log = LogFactory.getLog(EndpointDescriptionImpl.class); - - // =========================================== - // ANNOTATION related information - // =========================================== - - // ANNOTATION: @WebService and @WebServiceProvider - // Only one of these two annotations will be set; they are mutually exclusive - private WebService webServiceAnnotation; - private WebServiceProvider webServiceProviderAnnotation; - - //ANNOTATION: @HandlerChain - private HandlerChain handlerChainAnnotation; - private HandlerChainsType handlerChainsType; - - // Information common to both WebService and WebServiceProvider annotations - private String annotation_WsdlLocation; - private String annotation_ServiceName; - private String annotation_PortName; - private String annotation_TargetNamespace; - - // Information only set on WebService annotation - // ANNOTATION: @WebService - private String webService_EndpointInterface; - private String webService_Name; - - // ANNOTATION: @ServiceMode - // Note this is only valid on a Provider-based endpoint - private ServiceMode serviceModeAnnotation; - private Service.Mode serviceModeValue; - // Default ServiceMode.value per JAXWS Spec 7.1 "javax.xml.ServiceMode" pg 79 - public static final javax.xml.ws.Service.Mode ServiceMode_DEFAULT = - javax.xml.ws.Service.Mode.PAYLOAD; - - // ANNOTATION: @BindingType - private BindingType bindingTypeAnnotation; - private String bindingTypeValue; - // Default BindingType.value per JAXWS Spec Sec 7.8 "javax.xml.ws.BindingType" pg 83 - // and Sec 1.4 "SOAP Transport and Transfer Bindings" pg 119 - public static final String BindingType_DEFAULT = - javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING; - - // ANNOTATION: @RespectBinding - private Boolean respectBinding = false; - private List requiredBindings; - - private Integer portCompositeIndex = null; - - private List customAnnotations; - - private Map customAnnotationProcessors; - - // Supports WebServiceFeatureAnnotations - private ServerFramework framework = new ServerFramework(); - - private Map properties; - - // Remembers if this endpoint description is MTOMEnabled - private Boolean isMTOMEnabledCache = null; - - - /** - * Create a service-requester side EndpointDescription based on the WSDL port. - * Note that per the JAX-WS Spec (Final - * Release, 4/19/2006 Section 4.2.3 Proxies, page 55)the "namespace component of the port is the - * target namespace of the WSDL definition document". Note this is currently only used on the - * client-side (this may change). - * - * @param theClass The SEI or Impl class. This will be NULL for Dispatch clients since they - * don't use an SEI - */ - EndpointDescriptionImpl(final Class theClass, final QName portName, final ServiceDescriptionImpl parent) { - this(theClass, portName, parent, null, null); - } - EndpointDescriptionImpl(final Class theClass, final QName portName, final ServiceDescriptionImpl parent, - final DescriptionBuilderComposite dbc, final Object compositeKey ) { - this(theClass, portName, false, parent, dbc, compositeKey); - } - EndpointDescriptionImpl(final Class theClass, final QName portName, final boolean dynamicPort, - final ServiceDescriptionImpl parent) { - this(theClass, portName, dynamicPort, parent, null, null); - } - EndpointDescriptionImpl(final Class theClass, final QName portName, final boolean dynamicPort, - final ServiceDescriptionImpl parent, - final DescriptionBuilderComposite sparseComposite, - final Object sparseCompositeKey) { - - this.parentServiceDescription = parent; - composite = new DescriptionBuilderComposite(); - composite.setSparseComposite(sparseCompositeKey, sparseComposite); - composite.setCorrespondingClass(theClass); - ClassLoader loader = (ClassLoader) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - return this.getClass().getClassLoader(); - } - } - ); - composite.setClassLoader(loader); - composite.setIsServiceProvider(false); - - webServiceAnnotation = composite.getWebServiceAnnot(); - - this.isDynamicPort = dynamicPort; - if (DescriptionUtils.isEmpty(portName)) { - // If the port name is null, then per JAX-WS 2.0 spec p. 55, the runtime is responsible for selecting the port. - this.portQName = selectPortToUse(); - } else { - this.portQName = portName; - } - // At this point, there must be a port QName set, either as passed in, or determined from the WSDL and/or annotations. - // If not, that is an error. - if (this.portQName == null) { - String msg = Messages.getMessage("endpointDescriptionErr1",theClass.getName(),parent.getClass().getName()); - throw ExceptionFactory.makeWebServiceException(msg); - } - - setupAxisService(); - addToAxisService(); - setupReleaseResources(getServiceDescription().getAxisConfigContext()); - - buildDescriptionHierachy(); - addAnonymousAxisOperations(); - - // This will set the serviceClient field after adding the AxisService to the AxisConfig - getServiceClient(); - // Give the configuration builder a chance to finalize configuration for this service - try { - getServiceDescriptionImpl().getClientConfigurationFactory() - .completeAxis2Configuration(axisService); - } catch (Exception e) { - String msg = Messages.getMessage("endpointDescriptionErr2",e.getClass().getName(),parent.getClass().getName()); - throw ExceptionFactory.makeWebServiceException(msg, e); - } finally { - releaseAxisServiceResources(); - } - - } - - private void setupReleaseResources(final ConfigurationContext configurationContext) { - if (configurationContext != null) { - AxisConfiguration axisConfiguration = configurationContext.getAxisConfiguration(); - if (axisConfiguration != null) { - Parameter param = - axisConfiguration.getParameter(Constants.Configuration.REDUCE_WSDL_MEMORY_CACHE); - if (param != null) { - releaseAxisServiceResources = ((String) param.getValue()).equalsIgnoreCase("true"); - if (log.isDebugEnabled()) { - log.debug("EndpointDescription configured to release AxisService resources via " - + Constants.Configuration.REDUCE_WSDL_MEMORY_CACHE); - } - } - } - } - else if(composite != null) { - Boolean reduceCache = (Boolean) composite.getProperties().get(Constants.Configuration.REDUCE_WSDL_MEMORY_CACHE); - if(reduceCache != null) { - if(log.isDebugEnabled()) { - log.debug("Retrieved the following reduce WSDL cache value: " + reduceCache + - " from the composite: " + composite.getClassName()); - } - releaseAxisServiceResources = reduceCache; - } - } - - } - EndpointDescriptionImpl(final ServiceDescriptionImpl parent, final String serviceImplName) { - this(parent, serviceImplName, null, null); - } - - /** - * Create a service-provider side EndpointDescription based on the DescriptionBuilderComposite. - * Note that per the - * JAX-WS Spec (Final Release, 4/19/2006 Section 4.2.3 Proxies, page 55)the "namespace component - * of the port is the target namespace of the WSDL definition document". - * - * @param theClass The SEI or Impl class. This will be NULL for Dispatch clients since they - * don't use an SEI - */ - EndpointDescriptionImpl(final ServiceDescriptionImpl parent, final String serviceImplName, final Map - properties, final Integer portCompositeIndex) { - - // initialize CustomAnnotationIntance list and CustomAnnotationProcessor map - customAnnotations = new ArrayList(); - customAnnotationProcessors = new HashMap(); - this.portCompositeIndex = portCompositeIndex; - - // set properties map - this.properties = properties; - - this.parentServiceDescription = parent; - this.serviceImplName = serviceImplName; - - // if the ServiceDescription's service QName is specified, let's use that to get the - // correct DescriptionBuilderComposite - if(parent.getServiceQName() != null) { - composite = getServiceDescriptionImpl().getDescriptionBuilderComposite(parent.getServiceQName(), - portCompositeIndex); - } - - // otherwise we will get the DescriptionBuilderComposite by the current index - else { - composite = getServiceDescriptionImpl().getDescriptionBuilderComposite(null, - portCompositeIndex); - } - - if (composite == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("endpointDescriptionErr3")); - } - - if(composite.getHandlerChainAnnot() != null && composite.getHandlerChainsType() != null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("handlerSourceFail", composite.getClassName())); - } - - handlerChainsType = composite.getHandlerChainsType(); - - //Set the base level of annotation that we are processing...currently - // a 'WebService' or a 'WebServiceProvider' - if (composite.getWebServiceAnnot() != null) { - webServiceAnnotation = composite.getWebServiceAnnot(); - } else { - webServiceProviderAnnotation = composite.getWebServiceProviderAnnot(); - } - - - // now get the custom annotation and process information from the DBC - customAnnotations.addAll(composite.getCustomAnnotationInstances()); - customAnnotationProcessors.putAll(composite.getCustomAnnotationProcessors()); - - // Note that on the client side, the service QN should be set; on the server side it will not be. - if (DescriptionUtils.isEmpty(getServiceDescription().getServiceQName())) { - getServiceDescriptionImpl().setServiceQName(getServiceQName()); - } - //Call the getter to insure the qualified port name is set. - getPortQName(); - - setupAxisServiceFromDBL(); - addToAxisService(); //Add a reference to this EndpointDescription to the AxisService - - buildDescriptionHierachy(); - - WsdlComposite wsdlComposite = null; - - String bindingType = getBindingType(); - - boolean isSOAP11 = - (bindingType.equals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING) || - bindingType.equals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING)) - ? true : false; - - - // Determine if we need to generate WSDL - // First, make sure that this is only a SOAP 1.1 based binding, per JAXWS spec. we cannot - // generate WSDL if the binding type is not SOAP 1.1 based. - // Then, assuming the composite does not contain a - // Wsdl Definition, go ahead and generate it - if (isSOAP11){ - if ( - (isEndpointBased() && - DescriptionUtils.isEmpty(getAnnoWebServiceEndpointInterface())) - || - (!isEndpointBased()) - ) { - //This is either an implicit SEI, or a WebService Provider - - wsdlComposite = generateWSDL(composite); - - } else if (isEndpointBased()) { - //This impl class specifies an SEI...this is a special case. There is a bug - //in the tooling that allows for the wsdllocation to be specifed on either the - //impl. class, or the SEI, or both. So, we need to look for the wsdl as follows: - // 1. If the Wsdl exists on the SEI, then check for it on the impl. - // 2. If it is not found in either location, in that order, then generate - - DescriptionBuilderComposite seic = - getServiceDescriptionImpl().getDBCMap() - .get(composite.getWebServiceAnnot().endpointInterface()); - - //Only generate WSDL if a definition doesn't already exist - if (seic.getWsdlDefinition() == null) { - wsdlComposite = generateWSDL(composite); - } - } - - } else if (composite.getWsdlDefinition() == null) { - //This is a SOAP12 binding that does not contain a WSDL definition, log a WARNING - log.warn("This implementation does not contain a WSDL definition and is not a SOAP 1.1 based binding. " - + "Per JAXWS spec. - a WSDL definition cannot be generated for this implementation. Name: " - + composite.getClassName()); - } - - if (isSOAP11){ - - //Save the WSDL Location and the WsdlDefinition, value depends on whether wsdl was generated - Parameter wsdlLocationParameter = new Parameter(); - wsdlLocationParameter.setName(MDQConstants.WSDL_LOCATION); - - Parameter wsdlDefParameter = new Parameter(); - wsdlDefParameter.setName(MDQConstants.WSDL_DEFINITION); - - Parameter wsdlCompositeParameter = new Parameter(); - wsdlCompositeParameter.setName(MDQConstants.WSDL_COMPOSITE); - - if (wsdlComposite != null) { - - //We have a wsdl composite, so set these values for the generated wsdl - wsdlCompositeParameter.setValue(wsdlComposite); - wsdlLocationParameter.setValue(wsdlComposite.getWsdlFileName()); - - Definition def = - getServiceDescriptionImpl().getGeneratedWsdlWrapper().getDefinition(); - URL wsdlUrl = getServiceDescriptionImpl().getGeneratedWsdlWrapper().getWSDLLocation(); - if (def instanceof WSDLDefinitionWrapper) { - wsdlDefParameter.setValue(def); - } else { - // Create WSDLDefinitionWrapper - WSDLDefinitionWrapper wrap = null; - ConfigurationContext cc = composite.getConfigurationContext(); - if (cc != null && cc.getAxisConfiguration() != null) { - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, - cc.getAxisConfiguration()); - } else { - // Probably shouldn't get here. But if we do, use - // a memory sensitve wsdl wrapper - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, true, 2); - } - wsdlDefParameter.setValue(wrap); - } - - } else if (getServiceDescriptionImpl().getWSDLWrapper() != null) { - //No wsdl composite because wsdl already exists - - wsdlLocationParameter.setValue(getAnnoWebServiceWSDLLocation()); - - Definition def = getServiceDescriptionImpl().getWSDLWrapper().getDefinition(); - URL wsdlUrl = getServiceDescriptionImpl().getWSDLWrapper().getWSDLLocation(); - if (def instanceof WSDLDefinitionWrapper) { - wsdlDefParameter.setValue(def); - } else { - // Create WSDLDefinitionWrapper - WSDLDefinitionWrapper wrap = null; - ConfigurationContext cc = composite.getConfigurationContext(); - if (cc != null && cc.getAxisConfiguration() != null) { - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, - cc.getAxisConfiguration()); - } else { - // Probably shouldn't get here. But if we do, use - // a memory sensitve wsdl wrapper - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, true, 2); - } - wsdlDefParameter.setValue(wrap); - } - - } else { - //There is no wsdl composite and there is NOT a wsdl definition - wsdlLocationParameter.setValue(null); - wsdlDefParameter.setValue(null); - - } - - try { - if (wsdlComposite != null) { - axisService.addParameter(wsdlCompositeParameter); - } - axisService.addParameter(wsdlDefParameter); - axisService.addParameter(wsdlLocationParameter); - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("endpointDescriptionErr4")); - } - } - else { - // Need to account for SOAP 1.2 WSDL when supplied with application - Parameter wsdlDefParameter = new Parameter(); - wsdlDefParameter.setName(MDQConstants.WSDL_DEFINITION); - Parameter wsdlLocationParameter = new Parameter(); - wsdlLocationParameter.setName(MDQConstants.WSDL_LOCATION); - if (getServiceDescriptionImpl().getWSDLWrapper() != null) { - wsdlLocationParameter.setValue(getAnnoWebServiceWSDLLocation()); - - Definition def = getServiceDescriptionImpl().getWSDLWrapper().getDefinition(); - URL wsdlUrl = getServiceDescriptionImpl().getWSDLWrapper().getWSDLLocation(); - if (def instanceof WSDLDefinitionWrapper) { - wsdlDefParameter.setValue(def); - } else { - // Create WSDLDefinitionWrapper - WSDLDefinitionWrapper wrap = null; - ConfigurationContext cc = composite.getConfigurationContext(); - if (cc != null && cc.getAxisConfiguration() != null) { - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, - cc.getAxisConfiguration()); - } else { - // Probably shouldn't get here. But if we do, use - // a memory sensitve wsdl wrapper - wrap = new WSDLDefinitionWrapper(def, wsdlUrl, true, 2); - } - wsdlDefParameter.setValue(wrap); - } - } - // No WSDL supplied and we do not generate for non-SOAP 1.1/HTTP - // endpoints - else { - wsdlLocationParameter.setValue(null); - wsdlDefParameter.setValue(null); - } - try { - axisService.addParameter(wsdlDefParameter); - axisService.addParameter(wsdlLocationParameter); - - } catch (Exception e) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("endpointDescriptionErr4"),e); - } - } - - // Before we leave we need to drive the CustomAnnotationProcessors if - // there were any CustomAnnotationInstance objects registered - Iterator annotationIter = customAnnotations.iterator(); - while(annotationIter.hasNext()) { - CustomAnnotationInstance annotation = annotationIter.next(); - if(log.isDebugEnabled()) { - log.debug("Checking for CustomAnnotationProcessor for CustomAnnotationInstance " + - "class: " + annotation.getClass().getName()); - } - CustomAnnotationProcessor processor = customAnnotationProcessors.get(annotation.getClass().getName()); - if(processor != null) { - if(log.isDebugEnabled()) { - log.debug("Found CustomAnnotationProcessor: " + processor.getClass().getName() + - " for CustomAnnotationInstance: " + annotation.getClass().getName()); - } - processor.processTypeLevelAnnotation(this, annotation); - } - } - - // Configure any available WebServiceFeatures on the endpoint. - configureWebServiceFeatures(); - - // REVIEW: there are some throws above that won't cause the release - setupReleaseResources(composite.getConfigurationContext()); - releaseAxisServiceResources(); - } - - private void addToAxisService() { - // Add a reference to this EndpointDescription object to the AxisService - if (axisService != null) { - Parameter parameter = new Parameter(); - parameter.setName(EndpointDescription.AXIS_SERVICE_PARAMETER); - parameter.setValue(this); - try { - axisService.addParameter(parameter); - } catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("endpointDescriptionErr5"),e); - } - } - } - - private void buildEndpointDescriptionFromAnnotations() { - // TODO: The comments below are not quite correct; this method is used on BOTH the - // client and server. On the client the class is always an SEI. On the server it - // is always a service impl which may be a provider or endpoint based; - // endpoint based may reference an SEI class - - // The Service Implementation class could be either Provider-based or Endpoint-based. The - // annotations that are present are similar but different. Conformance requirements - // per JAX-WS - // - A Provider based implementation MUST carry the @WebServiceProvider annotation - // per section 5.1 javax.xml.ws.Provider on page 63 - // - An Endpoint based implementation MUST carry the @WebService annotation per JSR-181 - // (reference TBD) and JAX-WS (reference TBD) - // - An Endpoint based implementation @WebService annotation MAY reference an endpoint - // interface - // - The @WebService and @WebServiceProvider annotations can not appear in the same class per - // JAX-WS section 7.7 on page 82. - - // If portName was specified, set it. Otherwise, we will get it from the appropriate - // annotation when the getter is called. - - // If this is an Endpoint-based service implementation (i.e. not a - // Provider-based one), then create the EndpointInterfaceDescription to contain - // the operations on the endpoint. Provider-based endpoints don't have operations - // associated with them, so they don't have an EndpointInterfaceDescription. - if (webServiceAnnotation != null) { - // If this impl class references an SEI, then use that SEI to create the EndpointInterfaceDesc. - String seiClassName = getAnnoWebServiceEndpointInterface(); - - if (!composite.isServiceProvider()) { - Class seiClass = null; - if (DescriptionUtils.isEmpty(seiClassName)) { - // This is the client code path; the @WebServce will not have an endpointInterface member - // For now, just build the EndpointInterfaceDesc based on the class itself. - seiClass = composite.getCorrespondingClass(); - } - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(seiClass, this); - } else { - if (DescriptionUtils.isEmpty(getAnnoWebServiceEndpointInterface())) { - - endpointInterfaceDescription = - new EndpointInterfaceDescriptionImpl(composite, true, this); - - } else { - //Otherwise, build the EID based on the SEI composite - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl( - getServiceDescriptionImpl().getDBCMap().get(seiClassName), - false, - this); - - // after this is constructed, we need to update the @WebService.name - // attribute on the axisService instance - if(axisService != null) { - updateWebServiceNameParameter(((EndpointInterfaceDescriptionImpl) - endpointInterfaceDescription).getAnnoWebServiceName(), axisService); - } - } - } - } else { - if (log.isDebugEnabled()) { - log.debug("WebServiceProvider without WSDL encountered"); - } - String bindingType = getBindingType(); - if (javax.xml.ws.http.HTTPBinding.HTTP_BINDING.equals(bindingType)|| - SOAPBinding.SOAP11HTTP_BINDING.equals(bindingType)|| - SOAPBinding.SOAP12HTTP_BINDING.equals(bindingType)|| - MDQConstants.SOAP_HTTP_BINDING.equals(bindingType)) { - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(composite, this); - } - } - } - - public QName getPortQName() { - if (portQName == null) { - // The name was not set by the constructors, so get it from the - // appropriate annotation. - String name = getAnnoWebServicePortName(); - String tns = getAnnoWebServiceTargetNamespace(); - portQName = new QName(tns, name); - } - return portQName; - } - - public QName getServiceQName() { - if (serviceQName == null) { - // If the service name has been set on the Service, use that. Otherwise - // get the name off the annotations - QName serviceDescQName = getServiceDescription().getServiceQName(); - if (!DescriptionUtils.isEmpty(serviceDescQName)) { - serviceQName = serviceDescQName; - } else { - String localPart = getAnnoWebServiceServiceName(); - String tns = getAnnoWebServiceTargetNamespace(); - serviceQName = new QName(tns, localPart); - } - } - return serviceQName; - } - - public ServiceDescription getServiceDescription() { - return parentServiceDescription; - } - - ServiceDescriptionImpl getServiceDescriptionImpl() { - return parentServiceDescription; - } - - public EndpointInterfaceDescription getEndpointInterfaceDescription() { - return endpointInterfaceDescription; - } - - public AxisService getAxisService() { - return axisService; - } - - boolean isDynamicPort() { - return isDynamicPort; - } - - void updateWithSEI(final Class sei, final DescriptionBuilderComposite sparseComposite, final Object sparseCompositeKey) { - // Updating with an SEI is only valid for declared ports; it is not valid for dynamic ports. - if (isDynamicPort()) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("updateWithSEIErr1",portQName.toString())); - } - if (sei == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("updateWithSEIErr2",portQName.toString())); - } - - composite.setSparseComposite(sparseCompositeKey, sparseComposite); - - if (endpointInterfaceDescription != null) { - // The EndpointInterfaceDescription was created previously based on the port declaration (i.e. WSDL) - // so update that with information from the SEI annotations - ((EndpointInterfaceDescriptionImpl)endpointInterfaceDescription).updateWithSEI(sei); - } else { - // An EndpointInterfaceDescription does not exist yet. This currently happens in the case where there is - // NO WSDL provided and a Dispatch client is created for prior to a getPort being done for that port. - // There was no WSDL to create the EndpointInterfaceDescription from and there was no annotated SEI to - // use at that time. Now we have an annotated SEI, so create the EndpointInterfaceDescription now. - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(sei, this); - } - return; - } - - private void setupAxisService() { - // Build up the AxisService. Note that if this is a dynamic port, then we don't use the - // WSDL to build up the AxisService since the port added to the Service by the client is not - // one that will be present in the WSDL. A null class passed in as the SEI indicates this - // is a dispatch client. - if (!isDynamicPort && getServiceDescriptionImpl().getWSDLWrapper() != null) { - isAxisServiceBuiltFromWSDL = buildAxisServiceFromWSDL(); - } else { - buildAxisServiceFromAnnotations(); - } - - if (axisService == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr1",createAxisServiceName())); - } - - // Save the Service QName as a parameter. - Parameter serviceNameParameter = new Parameter(); - serviceNameParameter.setName(WSDL11ToAllAxisServicesBuilder.WSDL_SERVICE_QNAME); - serviceNameParameter.setValue(getServiceDescription().getServiceQName()); - - // Save the Port name. Note: Axis does not expect a QName since the namespace for the port is the ns from the WSDL definition - Parameter portParameter = new Parameter(); - portParameter.setName(WSDL11ToAllAxisServicesBuilder.WSDL_PORT); - portParameter.setValue(portQName.getLocalPart()); - - // Store the service class fully qualified name - Parameter serviceClassNameParam = new Parameter(); - serviceClassNameParam.setName(MDQConstants.CLIENT_SERVICE_CLASS); - String serviceClassName = this.getServiceDescriptionImpl().getServiceClassName(); - if(log.isDebugEnabled()) { - log.debug("Setting service class name parameter to: " + serviceClassName + - " on AxisService: " + axisService + "@" + axisService.hashCode()); - } - serviceClassNameParam.setValue(serviceClassName); - - // Store the sei class fully qualified name, if it is available - Parameter seiClassNameParam = new Parameter(); - seiClassNameParam.setName(MDQConstants.CLIENT_SEI_CLASS); - String seiClassName = composite.getClassName(); - if(log.isDebugEnabled()) { - log.debug("Setting sei class name parameter to: " + seiClassName + - " on AxisService: " + axisService + "@" + axisService.hashCode()); - } - seiClassNameParam.setValue(seiClassName); - - try { - axisService.addParameter(serviceNameParameter); - axisService.addParameter(portParameter); - axisService.addParameter(serviceClassNameParam); - axisService.addParameter(seiClassNameParam); - } - catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr2"),e); - } - } - - /* - * This setups and builds the AxisService using only the DescriptionBuilderCompositeList - * - */ - private void setupAxisServiceFromDBL() { - // Build up the AxisService. Note that if this is a dispatch client, then we don't use the - // WSDL to build up the AxisService since the port added to the Service by the client is not - // one that will be present in the WSDL. A null class passed in as the SEI indicates this - // is a dispatch client. - - // If WSDL is present, it may be full or only partial. If we can create the AxisService from - // the WSDL, that WSDL is fully specified. Otherwise, it is "partial WSDL". In that case - // we use annotaions to build the AxisService - isAxisServiceBuiltFromWSDL = false; - if (getServiceDescriptionImpl().getWSDLWrapper() != null) { - isAxisServiceBuiltFromWSDL = buildAxisServiceFromWSDL(); - - } - - if (!isAxisServiceBuiltFromWSDL) { - //generateWSDL(composite); - buildAxisServiceFromAnnotations(); - } - - if (axisService == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr1",createAxisServiceName())); - } - - //Save the Port Type name - Parameter portTypeNameParameter = new Parameter(); - portTypeNameParameter.setName(MDQConstants.WSDL_PORTTYPE_NAME); - portTypeNameParameter.setValue(getName()); - - // Save the Service QName as a parameter. - Parameter serviceNameParameter = new Parameter(); - serviceNameParameter.setName(MDQConstants.WSDL_SERVICE_QNAME); - serviceNameParameter.setValue(getServiceDescription().getServiceQName()); - - // Save the Port name. Note: Axis does not expect a QName since the namespace - // for the port is the ns from the WSDL definition - Parameter portParameter = new Parameter(); - portParameter.setName(MDQConstants.WSDL_PORT); - portParameter.setValue(getPortQName().getLocalPart()); - - //Save the fully qualified class name for the serviceImpl - Parameter serviceClassNameParameter = new Parameter(); - serviceClassNameParameter.setName(MDQConstants.SERVICE_CLASS); - serviceClassNameParameter - .setValue(DescriptionUtils.javifyClassName(composite.getClassName())); - - try { - axisService.addParameter(portTypeNameParameter); - axisService.addParameter(serviceNameParameter); - axisService.addParameter(portParameter); - axisService.addParameter(serviceClassNameParameter); - } - catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr2"),e); - } - } - - private boolean buildAxisServiceFromWSDL() { - boolean isBuiltFromWSDL = false; - try { - - // Note that the axis service builder takes only the localpart of the port qname. - // TODO:: This should check that the namespace of the definition matches the namespace of the portQName per JAXRPC spec - - - // Use getDefinition() so that we have the advantages of the memory features. - Definition def = getServiceDescriptionImpl().getWSDLWrapper().getDefinition(); - - WSDL11ToAxisServiceBuilder serviceBuilder = - new WSDL11ToAxisServiceBuilder(def, - getServiceDescription().getServiceQName(), - getPortQName().getLocalPart()); - - if (log.isDebugEnabled()) { - log.debug("Building AxisService from wsdl: " + getServiceDescriptionImpl().getWSDLWrapper().getWSDLLocation()); - } - - ClassLoader classLoader; - if (composite.isServiceProvider()) { - classLoader = composite.getClassLoader(); - } else { - classLoader = getContextClassLoader(null); - } - JAXWSCatalogManager catalogManager = getServiceDescriptionImpl().getCatalogManager(); - CatalogURIResolver uriResolver = new CatalogURIResolver(catalogManager, classLoader); - serviceBuilder.setCustomResolver(uriResolver); - - if (getServiceDescriptionImpl().isServerSide()) { - serviceBuilder.setServerSide(true); - } else { - serviceBuilder.setServerSide(false); - } - - // Associate the AxisConfiguration with the ServiceBuilder if it - // is available. This is done so that the serviceBuilder can - // use the appropriate WSDL wrapper memory parameters. - AxisConfiguration ac = null; - if (composite.getConfigurationContext() != null) { - ac = composite.getConfigurationContext().getAxisConfiguration(); - if (ac != null) { - serviceBuilder.useAxisConfiguration(ac); - } - } - // Create and populate the AxisService - axisService = serviceBuilder.populateService(); - - // If an AxisConfiguration was not available, - // default to using a memory efficient wrapper - if (ac == null) { - Parameter wsdlWrapperParam = - axisService.getParameter(WSDLConstants.WSDL_4_J_DEFINITION); - if (wsdlWrapperParam != null && - wsdlWrapperParam.getValue() instanceof WSDLDefinitionWrapper) { - - WSDLDefinitionWrapper wrapper = - (WSDLDefinitionWrapper) wsdlWrapperParam.getValue(); - - // If only the basic wrapper is being used, upgrade to the - // RELOAD wrapper - if (wrapper.getMemoryLimitType() == 0) { - Definition wsdlDef = wrapper.getUnwrappedDefinition(); - - WSDLDefinitionWrapper wrapper2 = - new WSDLDefinitionWrapper(wsdlDef, true, 2); - - wsdlWrapperParam.setValue(wrapper2); - } - } - } - axisService.setName(createAxisServiceName()); - isBuiltFromWSDL = true; - - } catch (AxisFault e) { - String wsdlLocation = (getServiceDescriptionImpl().getWSDLLocation() != null) ? - getServiceDescriptionImpl().getWSDLLocation().toString() : null; - String implClassName = composite.getClassName(); - log.warn(Messages.getMessage("bldAxisSrvcFromWSDLErr",implClassName,wsdlLocation),e); - - isBuiltFromWSDL = false; - return isBuiltFromWSDL; - } - return isBuiltFromWSDL; - } - - private void buildAxisServiceFromAnnotations() { - String serviceName = null; - if (portQName != null) { - serviceName = createAxisServiceName(); - } else { - // Make this service name unique. The Axis2 engine assumes that a service it can not find is a client-side service. - serviceName = ServiceClient.ANON_SERVICE + this.hashCode() + System.currentTimeMillis(); - } - axisService = new AxisService(serviceName); - - } - - private void releaseAxisServiceResources() { - // release the schema list in the AxisService - if (releaseAxisServiceResources && axisService != null) { - axisService.releaseSchemaList(); - } - } - - private void buildDescriptionHierachy() { - // Build up the Description Hierachy. Note that if this is a dynamic port, then we don't use the - // WSDL to build up the hierachy since the port added to the Service by the client is not - // one that will be present in the WSDL. - - if (composite.isServiceProvider()) { - if (!isDynamicPort && isWSDLFullySpecified()) { - buildEndpointDescriptionFromWSDL(); - } else { - buildEndpointDescriptionFromAnnotations(); - } - } else { - //Still processing annotations from the class - // This path was not updated - if (!isDynamicPort && isWSDLFullySpecified()) { - buildEndpointDescriptionFromWSDL(); - } else if (composite.getCorrespondingClass() != null) { - // Create the rest of the description hierachy from annotations on the class. - // If there is no SEI class, then this is a Distpach case, and we currently - // don't create the rest of the description hierachy (since it is not an SEI and thus - // not operation-based client. - buildEndpointDescriptionFromAnnotations(); - } - } - } - - private void buildEndpointDescriptionFromWSDL() { - Definition wsdlDefinition = getServiceDescriptionImpl().getWSDLWrapper().getDefinition(); - javax.wsdl.Service wsdlService = - wsdlDefinition.getService(getServiceDescription().getServiceQName()); - if (wsdlService == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("serviceDescErr2", createAxisServiceName())); - } - - Map wsdlPorts = wsdlService.getPorts(); - boolean wsdlPortFound = false; - if (wsdlPorts != null && wsdlPorts.size() > 0) { - Iterator wsdlPortIterator = wsdlPorts.values().iterator(); - - while (wsdlPortIterator.hasNext() && !wsdlPortFound) { - Port wsdlPort = (Port)wsdlPortIterator.next(); - // Note the namespace is not included on the WSDL Port. - if (wsdlPort.getName().equals(portQName.getLocalPart())) { - - // Build the EndpointInterface based on the specified SEI if there is one - // or on the service impl class (i.e. an implicit SEI). - if (composite.isServiceProvider()) { - String seiClassName = getAnnoWebServiceEndpointInterface(); - if (DescriptionUtils.isEmpty(seiClassName)) { - // No SEI specified, so use the service impl as an implicit SEI - endpointInterfaceDescription = - new EndpointInterfaceDescriptionImpl(composite, true, this); - } else { - // Otherwise, build the EID based on the SEI composite - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl( - getServiceDescriptionImpl().getDBCMap().get(seiClassName), - false, - this); - - // after this is constructed, we need to update the @WebService.name - // attribute on the axisService instance - if(axisService != null) { - updateWebServiceNameParameter(((EndpointInterfaceDescriptionImpl) - endpointInterfaceDescription).getAnnoWebServiceName(), axisService); - } - } - - } else { - // Create the Endpoint Interface Description based on the WSDL. - endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(this); - - // Update the EndpointInterfaceDescription created with WSDL with information from the - // annotations in the SEI - ((EndpointInterfaceDescriptionImpl)endpointInterfaceDescription) - .updateWithSEI(composite.getCorrespondingClass()); - } - wsdlPortFound = true; - } - } - } - - if (!wsdlPortFound) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("serviceDescErr3",portQName.getLocalPart())); - } - } - - /** - * Adds the anonymous axis operations to the AxisService. Note that this is only needed on the - * client side, and they are currently used in two cases (1) For Dispatch clients (which don't - * use SEIs and thus don't use operations) (2) TEMPORARLIY for Services created without WSDL - * (and thus which have no AxisOperations created) See the AxisInvocationController invoke - * methods for more details. - *

    - * Based on ServiceClient.createAnonymouService - */ - private void addAnonymousAxisOperations() { - if (axisService != null) { - OutOnlyAxisOperation outOnlyOperation = - new OutOnlyAxisOperation(ServiceClient.ANON_OUT_ONLY_OP); - axisService.addOperation(outOnlyOperation); - outOnlyOperation.setSoapAction(null); - - OutInAxisOperation outInOperation = - new OutInAxisOperation(ServiceClient.ANON_OUT_IN_OP); - axisService.addOperation(outInOperation); - outInOperation.setSoapAction(null); - } - } - - public ServiceClient getServiceClient() { - try { - if (serviceClient == null) { - ConfigurationContext configCtx = getServiceDescription().getAxisConfigContext(); - AxisService axisSvc = getAxisService(); - AxisConfiguration axisCfg = configCtx.getAxisConfiguration(); - if (axisCfg.getService(axisSvc.getName()) != null) { - axisSvc.setName(axisSvc.getName() + uniqueID()); - } - serviceClient = new ServiceClient(configCtx, axisSvc); - } - } catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("serviceClientCreateError"), e); - } - return serviceClient; - } - - //This should eventually be deprecated in favor 'createAxisServiceNameFromDBL - private String createAxisServiceName() { - String portName = null; - if (portQName != null) { - portName = portQName.getLocalPart(); - } else { - portName = "NoPortNameSpecified"; - - } - return getServiceDescription().getServiceQName().getLocalPart() + "." + portName; - } - - public boolean isWSDLFullySpecified() { - return isAxisServiceBuiltFromWSDL; - } - - public boolean isProviderBased() { - return webServiceProviderAnnotation != null; - } - - public boolean isEndpointBased() { - return webServiceAnnotation != null; - } - - // =========================================== - // ANNOTATION: WebService and WebServiceProvider - // =========================================== - - public String getAnnoWebServiceWSDLLocation() { - if (annotation_WsdlLocation == null) { - - if (getAnnoWebService() != null) { - annotation_WsdlLocation = getAnnoWebService().wsdlLocation(); - - //If this is not an implicit SEI, then make sure that its not on the SEI - if (composite.isServiceProvider()) { - if (!DescriptionUtils.isEmpty(getAnnoWebServiceEndpointInterface())) { - - DescriptionBuilderComposite seic = - getServiceDescriptionImpl().getDBCMap() - .get(composite.getWebServiceAnnot().endpointInterface()); - if (!DescriptionUtils.isEmpty(seic.getWebServiceAnnot().wsdlLocation())) { - annotation_WsdlLocation = seic.getWebServiceAnnot().wsdlLocation(); - } - } - } - } else if (getAnnoWebServiceProvider() != null - && !DescriptionUtils.isEmpty(getAnnoWebServiceProvider().wsdlLocation())) { - annotation_WsdlLocation = getAnnoWebServiceProvider().wsdlLocation(); - } else { - // There is no default value per JSR-181 MR Sec 4.1 pg 16 - annotation_WsdlLocation = ""; - } - } - return annotation_WsdlLocation; - } - - public String getAnnoWebServiceServiceName() { - if (annotation_ServiceName == null) { - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().serviceName())) { - annotation_ServiceName = getAnnoWebService().serviceName(); - } else if (getAnnoWebServiceProvider() != null - && !DescriptionUtils.isEmpty(getAnnoWebServiceProvider().serviceName())) { - annotation_ServiceName = getAnnoWebServiceProvider().serviceName(); - } else { - // Default value is the "simple name" of the class or interface + "Service" - // Per JSR-181 MR Sec 4.1, pg 15 - annotation_ServiceName = DescriptionUtils.getSimpleJavaClassName(composite.getClassName()) + "Service"; - } - } - return annotation_ServiceName; - } - - public String getAnnoWebServicePortName() { - if (annotation_PortName == null) { - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().portName())) { - annotation_PortName = getAnnoWebService().portName(); - } else if (getAnnoWebServiceProvider() != null - && !DescriptionUtils.isEmpty(getAnnoWebServiceProvider().portName())) { - annotation_PortName = getAnnoWebServiceProvider().portName(); - } else { - // Default the value - if (isProviderBased()) { - // This is the @WebServiceProvider annotation path - // Default value is not specified in JSR-224, but we can assume it is - // similar to the default in the WebService case, however there is no - // name attribute for a WebServiceProvider. So in this case we use - // the default value for WebService.name per JSR-181 MR sec 4.1 pg 15. - // Note that this is really the same thing as the call to getWebServiceName() - // in the WebService case; it is done sepertely just to be clear there is no - // name element on the WebServiceProvider annotation - annotation_PortName = DescriptionUtils.getSimpleJavaClassName(composite.getClassName()) - + "Port"; - } else { - // This is the @WebService annotation path - // Default value is the @WebService.name of the class or interface + "Port" - // Per JSR-181 MR Sec 4.1, pg 15 - annotation_PortName = getAnnoWebServiceName() + "Port"; - } - } - } - return annotation_PortName; - } - - public String getAnnoWebServiceTargetNamespace() { - if (annotation_TargetNamespace == null) { - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().targetNamespace())) { - annotation_TargetNamespace = getAnnoWebService().targetNamespace(); - } else if (getAnnoWebServiceProvider() != null - && !DescriptionUtils.isEmpty(getAnnoWebServiceProvider().targetNamespace())) { - annotation_TargetNamespace = getAnnoWebServiceProvider().targetNamespace(); - } else { - // Default value per JSR-181 MR Sec 4.1 pg 15 defers to "Implementation defined, - // as described in JAX-WS 2.0, section 3.2" which is JAX-WS 2.0 Sec 3.2, pg 29. - annotation_TargetNamespace = - DescriptionUtils.makeNamespaceFromPackageName( - DescriptionUtils.getJavaPackageName(composite.getClassName()), - "http"); - } - } - return annotation_TargetNamespace; - } - - // =========================================== - // ANNOTATION: WebServiceProvider - // =========================================== - - public WebServiceProvider getAnnoWebServiceProvider() { - return webServiceProviderAnnotation; - } - - // =========================================== - // ANNOTATION: WebService - // =========================================== - - public WebService getAnnoWebService() { - return webServiceAnnotation; - } - - public String getAnnoWebServiceEndpointInterface() { - // TODO: Validation: Not allowed on WebServiceProvider - if (webService_EndpointInterface == null) { - if (!isProviderBased() && getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().endpointInterface())) { - webService_EndpointInterface = getAnnoWebService().endpointInterface(); - } else { - // This element is not valid on a WebServiceProvider annotation - webService_EndpointInterface = ""; - } - } - return webService_EndpointInterface; - } - - public String getAnnoWebServiceName() { - // TODO: Validation: Not allowed on WebServiceProvider - - //TODO: Per JSR109 v1.2 Sec. 5.3.2.1 - // If not specified then we can use the default value as specified in JSR 181 - // (but only if it is unique within the module)...or If the name is - // not specified in the Service Implementation Bean then fully - // qualified name of the Bean class is used to guarantee uniqueness - // If the above is not unique then fully qualified name of the - // Bean class is used to guarantee uniqueness - - if (webService_Name == null) { - if (!isProviderBased()) { - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().name())) { - webService_Name = getAnnoWebService().name(); - } else { - webService_Name = - DescriptionUtils.getSimpleJavaClassName(composite.getClassName()); - } - } else { - // This element is not valid on a WebServiceProvider annotation - webService_Name = ""; - } - } - return webService_Name; - } - - // =========================================== - // ANNOTATION: ServiceMode - // =========================================== - public ServiceMode getAnnoServiceMode() { - - if (serviceModeAnnotation == null) { - serviceModeAnnotation = composite.getServiceModeAnnot(); - } - return serviceModeAnnotation; - } - - public Service.Mode getServiceMode() { - return getAnnoServiceModeValue(); - } - - public Service.Mode getAnnoServiceModeValue() { - // This annotation is only valid on Provider-based endpoints. - if (isProviderBased() && serviceModeValue == null) { - if (getAnnoServiceMode() != null) { - serviceModeValue = getAnnoServiceMode().value(); - } else { - serviceModeValue = ServiceMode_DEFAULT; - } - } - return serviceModeValue; - } - - // =========================================== - // ANNOTATION: BindingType - // =========================================== - - public BindingType getAnnoBindingType() { - if (bindingTypeAnnotation == null) { - bindingTypeAnnotation = composite.getBindingTypeAnnot(); - } - return bindingTypeAnnotation; - } - - public String getBindingType() { - return getAnnoBindingTypeValue(); - } - - public String getAnnoBindingTypeValue() { - if (bindingTypeValue == null) { - if (getAnnoBindingType() != null && - !DescriptionUtils.isEmpty(getAnnoBindingType().value())) { - bindingTypeValue = getAnnoBindingType().value(); - } else { - // No BindingType annotation present or value was empty; use default value - bindingTypeValue = BindingType_DEFAULT; - } - } - return bindingTypeValue; - } - - // =========================================== - // ANNOTATION: HandlerChain - // =========================================== - - public void setHandlerChain(final HandlerChainsType handlerChain) { - handlerChainsType = handlerChain; - } - - public HandlerChainsType getHandlerChain() { - return getHandlerChain(null); - } - - /** - * Returns a schema derived java class containing the the handler configuration information. - * That information, returned in the HandlerChainsType object, is looked for in the following - * places in this order: - * - Set on the sparseComposite for the given key - * - Set on the composite - * - Read in from the file specified on HandlerChain annotation - * - * @return HandlerChainsType This is the top-level element for the Handler configuration file - * - */ - public HandlerChainsType getHandlerChain(final Object sparseCompositeKey) { - - DescriptionBuilderComposite sparseComposite = null; - - // If there is a HandlerChainsType in the sparse composite for this ServiceDelegate - // (i.e. this sparseCompositeKey), then return that. - if (sparseCompositeKey != null) { - sparseComposite = composite.getSparseComposite(sparseCompositeKey); - if (sparseComposite != null && sparseComposite.getHandlerChainsType() != null) { - HandlerChainsType hct = sparseComposite.getHandlerChainsType(); - return hct; - } - } - - // If there is no HandlerChainsType in the composite, then read in the file specified - // on the HandlerChain annotation if it is present. - if (handlerChainsType == null) { - getAnnoHandlerChainAnnotation(sparseCompositeKey); - if (handlerChainAnnotation != null) { - String handlerFileName = handlerChainAnnotation.file(); - - if (log.isDebugEnabled()) { - log.debug(Messages.getMessage("handlerChainsTypeErr",handlerFileName,composite.getClassName())); - } - - String className = composite.getClassName(); - - // REVIEW: This is using the classloader for EndpointDescriptionImpl; is that OK? - ClassLoader classLoader = (composite.isServiceProvider()) ? - composite.getClassLoader() : - (ClassLoader) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - return this.getClass().getClassLoader(); - } - } - ); - - if(log.isDebugEnabled()){ - log.debug("Trying to load file " + handlerFileName + " relative to " + className); - } - InputStream is = DescriptionUtils.openHandlerConfigStream( - handlerFileName, - className, - classLoader); - if (is == null) { - // config stream is still null. This may mean the @HandlerChain annotation is on a *driver* class - // next to a @WebServiceRef annotation, so the path is relative to the class declaring @HandlerChain - // and NOT relative to the Service or Endpoint class, which also means we should use the sparseComposite - // since that is where the @HandlerChain annotation info would have been loaded. - if (sparseComposite != null) { - String handlerChainDeclaringClass = (String)sparseComposite.getProperties().get(MDQConstants.HANDLER_CHAIN_DECLARING_CLASS); - if (handlerChainDeclaringClass != null) { - className = handlerChainDeclaringClass; - is = DescriptionUtils.openHandlerConfigStream(handlerFileName, className, classLoader); - } - } - } - - if(is == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("handlerChainNS", - handlerFileName, className)); - } else { - ClassLoader classLoader1 = (ClassLoader) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - return this.getClass().getClassLoader(); - } - } - ); - handlerChainsType = - DescriptionUtils.loadHandlerChains(is, classLoader1); - } - } - } - return handlerChainsType; - } - - public HandlerChain getAnnoHandlerChainAnnotation(final Object sparseCompositeKey) { - if (this.handlerChainAnnotation == null) { - if (composite.isServiceProvider()) { - /* - * Per JSR-181 The @HandlerChain annotation MAY be present on - * the endpoint interface and service implementation bean. The - * service implementations bean's @HandlerChain is used if - * @HandlerChain is present on both. So, if we do find the - * annotation on this impl, then don't worry about else - * Otherwise, check to see if the SEI might be annotated with - * @HandlerChain - */ - - handlerChainAnnotation = composite.getHandlerChainAnnot(); - if (handlerChainAnnotation == null) { - - // If this is NOT an implicit SEI, then check for the - // annotation on the SEI - if (!DescriptionUtils.isEmpty(getAnnoWebServiceEndpointInterface())) { - - DescriptionBuilderComposite seic = getServiceDescriptionImpl().getDBCMap() - .get(composite.getWebServiceAnnot().endpointInterface()); - if (seic != null) { - handlerChainAnnotation = seic.getHandlerChainAnnot(); - } - } - } - } else { - handlerChainAnnotation = composite.getHandlerChainAnnot(); - } - } - if (handlerChainAnnotation == null) { - if (sparseCompositeKey != null) { - DescriptionBuilderComposite sparseComposite = composite.getSparseComposite(sparseCompositeKey); - if (sparseComposite != null && sparseComposite.getHandlerChainAnnot() != null) { - handlerChainAnnotation = sparseComposite.getHandlerChainAnnot(); - } - } - } - - return handlerChainAnnotation; - } - - // =========================================== - // ANNOTATION: MTOM - // =========================================== - - /* - * (non-Javadoc) - * @see org.apache.axis2.jaxws.description.EndpointDescription#isMTOMEnabled() - */ - public boolean isMTOMEnabled() { - if (isMTOMEnabledCache != null) { - return isMTOMEnabledCache.booleanValue(); - } - - // isMTOMEnabled is a combination of the @BindingType and the @MTOM setting. - MTOM mtomAnnotation = - (MTOM) getAnnoFeature(MTOMFeature.ID); - - // If the @MTOM annotation is set, it wins - if (mtomAnnotation != null) { - isMTOMEnabledCache = Boolean.valueOf(mtomAnnotation.enabled()); - return isMTOMEnabledCache.booleanValue(); - } - - // Else look at the bindingType - String bindingType = getBindingType(); - isMTOMEnabledCache = Boolean.valueOf(isMTOMBinding(bindingType)); - return isMTOMEnabledCache.booleanValue(); - } - - private static boolean isMTOMBinding(final String url) { - if (url != null && - (url.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) || - url.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING) || - url.equals(MDQConstants.SOAP11JMS_MTOM_BINDING) || - url.equals(MDQConstants.SOAP12JMS_MTOM_BINDING))) { - return true; - } - return false; - } - - // =========================================== - // ANNOTATION: RespectBinding - // =========================================== - - public boolean respectBinding() { - return respectBinding; - } - - public void setRespectBinding(final boolean r) { - respectBinding = r; - } - - - public boolean addRequiredBinding(final QName name) { - if (requiredBindings == null) { - requiredBindings = new ArrayList(); - } - - return requiredBindings.add(name); - } - - public List getRequiredBindings() { - if (requiredBindings == null) { - requiredBindings = new ArrayList(); - } - return requiredBindings; - } - - /* - * (non-Javadoc) - * @see org.apache.axis2.jaxws.description.EndpointDescription#getMTOMThreshold() - */ - public int getMTOMThreshold() { - if (axisService != null) { - // We should cache this call here so we don't have to make - // it on every pass through. - Parameter mtomThreshold = axisService.getParameter(Configuration.MTOM_THRESHOLD); - if (mtomThreshold != null) { - return (Integer) mtomThreshold.getValue(); - } - } - - return -1; - } - - // Get the specified WebServiceFeatureAnnotation - public Annotation getAnnoFeature(final String id) { - return framework.getAnnotation(id); - } - - //The WebServiceFeatures should be configued last so that any other - //configuration can be overridden. Should only be called on the - //server side. - private void configureWebServiceFeatures() { - String bindingType = getBindingType(); - Set ids = ServerConfiguratorRegistry.getIds(); - - for (String id : ids) { - ServerConfigurator configurator = ServerConfiguratorRegistry.getConfigurator(id); - - if (configurator.supports(bindingType)) { - framework.addConfigurator(id, configurator); - } - } - - // The feature instances are stored on the composite from either the - // Java class or from something else building the list and setting it there. - List features = composite.getWebServiceFeatures(); - - if (features != null && features.size() > 0) { - // Add each of the annotation instances to the WebServiceFeature framework - Iterator itr = features.iterator(); - while (itr.hasNext()) { - Annotation feature = itr.next(); - framework.addAnnotation(feature); - } - - // Kick off the configuration of the WebServiceFeature instances. - framework.configure(this); - } - else { - if (log.isDebugEnabled()) { - log.debug("No WebServiceFeatureAnnotation instances were found on the composite."); - } - } - } - - private Definition getWSDLDefinition() { - return ((ServiceDescriptionWSDL)getServiceDescription()).getWSDLDefinition(); - } - - public javax.wsdl.Service getWSDLService() { - Definition defn = getWSDLDefinition(); - if (defn != null) { - return defn.getService(getServiceQName()); - } else { - return null; - } - } - - public Port getWSDLPort() { - javax.wsdl.Service service = getWSDLService(); - if (service != null) { - return service.getPort(getPortQName().getLocalPart()); - } else { - return null; - } - } - - public Binding getWSDLBinding() { - Binding wsdlBinding = null; - Port wsdlPort = getWSDLPort(); - Definition wsdlDef = getWSDLDefinition(); - if (wsdlPort != null && wsdlDef != null) { - wsdlBinding = wsdlPort.getBinding(); - } - return wsdlBinding; - } - - public String getWSDLBindingType() { - String wsdlBindingType = null; - String soapTransport = null; - Binding wsdlBinding = getWSDLBinding(); - if (wsdlBinding != null) { - - // If a WSDL binding was found, we need to find the proper extensibility - // element and return the namespace. The namespace for the binding element will - // determine whether it is SOAP 1.1 vs. SOAP 1.2 vs. HTTP (or other). If the namespace - // indicates SOAP we then need to determine what the transport is (HTTP vs. JMS) - // TODO: What do we do if no extensibility element exists? - List elements = wsdlBinding.getExtensibilityElements(); - Iterator itr = elements.iterator(); - while (itr.hasNext()) { - ExtensibilityElement e = itr.next(); - if (javax.wsdl.extensions.soap.SOAPBinding.class.isAssignableFrom(e.getClass())) { - javax.wsdl.extensions.soap.SOAPBinding soapBnd = - (javax.wsdl.extensions.soap.SOAPBinding)e; - - //representation: this is soap:binding = elementType where NamespaceURI is "soap" - // The transport is represented by the 'transport' attribute within this binding element - wsdlBindingType = soapBnd.getElementType().getNamespaceURI(); - - soapTransport = soapBnd.getTransportURI(); - - - break; - - } else if (SOAP12Binding.class.isAssignableFrom(e.getClass())) { - SOAP12Binding soapBnd = (SOAP12Binding)e; - wsdlBindingType = soapBnd.getElementType().getNamespaceURI(); - soapTransport = soapBnd.getTransportURI(); - break; - - } else if (HTTPBinding.class.isAssignableFrom(e.getClass())) { - HTTPBinding httpBnd = (HTTPBinding)e; - wsdlBindingType = httpBnd.getElementType().getNamespaceURI(); - break; - } - } - - // We need to convert the wsdl-based SOAP and HTTP namespace into the expected Binding Type for - // HTTP or SOAPBindings with the appropriate transport (HTTP, JMS, etc.) - // - // Note that what we're actually returning is the WSDL binding type value conveted - // to the corresponding SOAPBinding or HTTPBinding value. We are overwite the - // wsdlBindingType with that converted JAXWS annotation binding type value and - // return it. - wsdlBindingType = DescriptionUtils.mapBindingTypeWsdlToAnnotation(wsdlBindingType, soapTransport); - } - return wsdlBindingType; - } - - public String getName() { - return getAnnoWebServiceName(); - } - - public String getTargetNamespace() { - return getAnnoWebServiceTargetNamespace(); - } - - public PortInfo getPortInfo() { - if (portInfo == null) { - portInfo = new PortInfoImpl(getServiceQName(), getPortQName(), getBindingType()); - } - return portInfo; - } - - public void setClientBindingID(final String clientBindingID) { - - if (clientBindingID == null) { - this.clientBindingID = DEFAULT_CLIENT_BINDING_ID; - } else if (validateClientBindingID(clientBindingID)) { - this.clientBindingID = clientBindingID; - } else { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("addPortErr0", getPortQName().toString())); - } - } - - private boolean validateClientBindingID(final String bindingId) { - boolean isValid = true; - if (bindingId != null && !(bindingId.equals(SOAPBinding.SOAP11HTTP_BINDING) || - bindingId.equals(javax.xml.ws.http.HTTPBinding.HTTP_BINDING) || - bindingId.equals(SOAPBinding.SOAP12HTTP_BINDING) || - bindingId.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) || - bindingId.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING) || - bindingId.equals(MDQConstants.SOAP11JMS_BINDING) || - bindingId.equals(MDQConstants.SOAP12JMS_BINDING) || - bindingId.equals(MDQConstants.SOAP11JMS_MTOM_BINDING) || - bindingId.equals(MDQConstants.SOAP12JMS_MTOM_BINDING))) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("addPortErr0", getPortQName().toString())); - } - return isValid; - } - - public String getClientBindingID() { - if (clientBindingID == null) { - if (getWSDLDefinition() != null) { - clientBindingID = getWSDLBindingType(); - if (clientBindingID == null) { - clientBindingID = DEFAULT_CLIENT_BINDING_ID; - } - } else { - clientBindingID = DEFAULT_CLIENT_BINDING_ID; - } - } - return clientBindingID; - } - - public void setEndpointAddress(final String endpointAddress) { - // REVIEW: Should this be called whenever BindingProvider.ENDPOINT_ADDRESS_PROPERTY is set by the client? - if (!DescriptionUtils.isEmpty(endpointAddress)) { - this.endpointAddress = endpointAddress; - } else { - // Since a port can be added without setting an endpoint address, this is not an error. - if (log.isDebugEnabled()) { - log.debug("A null or empty endpoint address was attempted to be set", - new Throwable("Stack Traceback")); - } - } - } - - public String getEndpointAddress() { - if (endpointAddress == null) { - // If the endpointAddress has not been set explicitly by a call to setEndpointAddress() - // then try to get it from the WSDL - endpointAddress = getWSDLSOAPAddress(); - } - return endpointAddress; - } - - public void setProperty(final String key, final Object value) { - if(properties == null) { - properties = new HashMap(); - } - properties.put(key, value); - } - - public Object getProperty(final String key) { - if(properties != null) { - return properties.get(key); - } - return null; - } - - /** - * Return the SOAP Address from the WSDL for this port. - * - * @return The SOAP Address from the WSDL for this port or null. - */ - public String getWSDLSOAPAddress() { - if (wsdlSOAPAddress == null) { - Port wsdlPort = getWSDLPort(); - if (wsdlPort != null) { - // The port is in the WSDL, so see if it has a SOAP address extensibility element specified. - List extElementList = wsdlPort.getExtensibilityElements(); - for (Object listElement : extElementList) { - ExtensibilityElement extElement = (ExtensibilityElement)listElement; - if (isSOAPAddressElement(extElement)) { - String soapAddress = getSOAPAddressFromElement(extElement); - if (!DescriptionUtils.isEmpty(soapAddress)) { - wsdlSOAPAddress = soapAddress; - } - } - } - } - } - return wsdlSOAPAddress; - } - - /** - * Determine if the WSDL Extensibility element corresponds to the SOAP Address element. - * - * @param exElement - * @return - */ - static boolean isSOAPAddressElement(final ExtensibilityElement exElement) { - boolean isAddress = false; - if (exElement != null) { - isAddress = (SOAP_11_ADDRESS_ELEMENT.equals(exElement.getElementType()) - || - (SOAP_12_ADDRESS_ELEMENT.equals(exElement.getElementType()))); - } - return isAddress; - } - - static String getSOAPAddressFromElement(final ExtensibilityElement extElement) { - String returnAddress = null; - - if (extElement != null) { - if (SOAP_11_ADDRESS_ELEMENT.equals(extElement.getElementType())) { - returnAddress = ((SOAPAddress)extElement).getLocationURI(); - } else if (SOAP_12_ADDRESS_ELEMENT.equals(extElement.getElementType())) { - returnAddress = ((SOAP12Address)extElement).getLocationURI(); - } - } - - return returnAddress; - } - - /** - * Selects a port to use in the case where a portQName was not specified by the client on the - * Service.getPort(Class) call. If WSDL is present, then an appropriate port is looked for - * under the service element, and an exception is thrown if none can be found. If WSDL is not - * present, then the selected port is simply the one determined by annotations. - * - * @return A QName representing the port that is to be used. - */ - private QName selectPortToUse() { - QName portToUse = null; - // If WSDL Service for this port is present, then we'll find an appropriate port defined in there and set - // the name accordingly. If no WSDL is present, the the PortQName getter will use annotations to set the value. - if (getWSDLService() != null) { - portToUse = selectWSDLPortToUse(); - } else { - // No WSDL, so the port to use is the one defined by the annotations. - portToUse = getPortQName(); - } - return portToUse; - } - - /** - * Look through the WSDL Service for a port that should be used. If none can be found, then - * throw an exception. - * - * @param wsdlService - * @return A QName representing the port from the WSDL that should be used. - */ - private QName selectWSDLPortToUse() { - QName wsdlPortToUse = null; - - // To select which WSDL Port to use, we do the following - // 1) Find the subset of all ports under the service that use the PortType represented by the SEI - // 2) From the subset in (1) find all those ports that specify a SOAP Address - // 3) Use the first port from (2) - - // Per JSR-181, - // - The portType name corresponds to the WebService.name annotation value, which is - // returned by getName() - // - The portType namespace corresponds to the WebService.targetNamespace annotation, which - // is returned by getTargetNamespace() - String portTypeLP = getName(); - String portTypeTNS = getTargetNamespace(); - QName portTypeQN = new QName(portTypeTNS, portTypeLP); - - ServiceDescriptionWSDL serviceDescWSDL = (ServiceDescriptionWSDL)getServiceDescription(); - - List wsdlPortsUsingPortType = serviceDescWSDL.getWSDLPortsUsingPortType(portTypeQN); - List wsdlPortsUsingSOAPAddresses = - serviceDescWSDL.getWSDLPortsUsingSOAPAddress(wsdlPortsUsingPortType); - if (wsdlPortsUsingSOAPAddresses != null && !wsdlPortsUsingSOAPAddresses.isEmpty()) { - // We return the first port that uses the particluar PortType and has a SOAP address. - // HOWEVER, that is not necessarily the first one in the WSDL that meets that criteria! - // The problem is that WSDL4J Service.getPorts(), which is used to get a Map of ports under the service - // DOES NOT return the ports in the order they are defined in the WSDL. - // Therefore, we can't necessarily predict which one we'll get back as the "first" one in the collection. - // REVIEW: Note the above comment; is there anything more predictible and determinstic we can do? - Port portToUse = (Port)wsdlPortsUsingSOAPAddresses.toArray()[0]; - String portLocalPart = portToUse.getName(); - String portNamespace = serviceDescWSDL.getWSDLService().getQName().getNamespaceURI(); - wsdlPortToUse = new QName(portNamespace, portLocalPart); - } - - return wsdlPortToUse; - } - - private WsdlComposite generateWSDL(final DescriptionBuilderComposite dbc) { - - WsdlComposite wsdlComposite = null; - Definition defn = dbc.getWsdlDefinition(getServiceQName()); - if(defn == null) { - defn = dbc.getWsdlDefinition(); - } - if (defn == null || !isAxisServiceBuiltFromWSDL) { - - //Invoke the callback for generating the wsdl - if (dbc.getCustomWsdlGenerator() != null) { - String implName = null; - if (axisService == null) { - implName = DescriptionUtils.javifyClassName(composite.getClassName()); - } else { - implName = (String)axisService.getParameterValue(MDQConstants.SERVICE_CLASS); - } - wsdlComposite = - dbc.getCustomWsdlGenerator().generateWsdl(implName, this); - - if (wsdlComposite != null) { - if(wsdlComposite.getWsdlFileName() == null - || - "".equals(wsdlComposite.getWsdlFileName())) { - wsdlComposite.setWsdlFileName( - (this.getAnnoWebServiceServiceName() + ".wsdl").toLowerCase()); - } - - Definition wsdlDef = wsdlComposite.getRootWsdlDefinition(); - - try { - ConfigurationContext cc = dbc.getConfigurationContext(); - WSDL4JWrapper wsdl4jWrapper = null; - if (cc != null) { - wsdl4jWrapper = new WSDL4JWrapper(dbc.getWsdlURL(), wsdlDef, cc); - } else { - wsdl4jWrapper = new WSDL4JWrapper(dbc.getWsdlURL(), wsdlDef, true, 2); - } - getServiceDescriptionImpl().setGeneratedWsdlWrapper(wsdl4jWrapper); - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("generateWSDLErr"),e); - } - } else { - // REVIEW:Determine if we should always throw an exception on this, or at this point - //throw ExceptionFactory.makeWebServiceException("EndpointDescriptionImpl: Unable to find custom WSDL generator"); - if (log.isDebugEnabled()) { - log.debug( - "The custom WSDL generator returned null, so no generated WSDL is available"); - } - - } - } else { - // REVIEW: This used to throw an exception, but it seems we shouldn't require - // a wsdl generator be provided. -// throw ExceptionFactory.makeWebServiceException("EndpointDescriptionImpl: Unable to find custom WSDL generator"); - if (log.isDebugEnabled()) { - log.debug( - "No custom WSDL generator was supplied, so WSDL can not be generated"); - } - } - } - return wsdlComposite; - } - - List getCustomAnnotationInstances() { - return customAnnotations; - } - - CustomAnnotationProcessor getCustomAnnotationProcessor(final String annotationInstanceClassName) { - return customAnnotationProcessors != null ? - customAnnotationProcessors.get(annotationInstanceClassName) : null; - } - - public DescriptionBuilderComposite getDescriptionBuilderComposite() { - return composite; - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - try { - string.append(super.toString()); - string.append(newline); - string.append("Name: " + getName()); - string.append(sameline); - string.append("Endpoint Address: " + getEndpointAddress()); - // - string.append(newline); - string.append("ServiceQName: " + getServiceQName()); - string.append(sameline); - string.append("PortQName: " + getPortQName()); - string.append(sameline); - string.append("TargetNamespace: " + getTargetNamespace()); - // - string.append(newline); - string.append("Service Mode: " + getServiceMode()); - string.append(sameline); - string.append("Binding Type: " + getBindingType()); - string.append(sameline); - string.append("Client Binding Type: " + getClientBindingID()); - // - string.append(newline); - string.append("Is provider-based: " + (isProviderBased() == true)); - string.append(sameline); - string.append("Is proxy-based: " + (isEndpointBased() == true)); - string.append(sameline); - string.append("Is WSDL fully specified: " + (isWSDLFullySpecified() == true)); - // - string.append(newline); - string.append("AxisService: " + getAxisService()); - // - string.append(newline); - EndpointInterfaceDescription endpointInterfaceDesc = getEndpointInterfaceDescription(); - if (endpointInterfaceDesc != null) { - string.append("EndpointInterfaceDescription: " + endpointInterfaceDesc.toString()); - } else { - string.append("EndpointInterfaceDescription is null."); - } - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "EndpointDescription"); - return string.toString(); - } - return string.toString(); - } - - /** - * Get an annotation. This is wrappered to avoid a Java2Security violation. - * @param cls Class that contains annotation - * @param annotation Class of requrested Annotation - * @return annotation or null - */ - private static Annotation getAnnotation(final Class cls, final Class annotation) { - return (Annotation) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return cls.getAnnotation(annotation); - } - }); - } - - /** - * Return the class for this name - * - * @return Class - */ - private static Class forName(final String className, final boolean initialize, - final ClassLoader classloader) throws ClassNotFoundException { - Class cl = null; - try { - cl = (Class) AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws ClassNotFoundException { - return Class.forName(className, initialize, classloader); - } - } - ); - } catch (PrivilegedActionException e) { - if (log.isDebugEnabled()) { - log.debug("Exception thrown from AccessController: " + e.getMessage(), e); - } - throw (ClassNotFoundException) e.getException(); - } - - return cl; - } - - private static ClassLoader getContextClassLoader(final ClassLoader classLoader) { - ClassLoader cl; - try { - cl = (ClassLoader) AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws ClassNotFoundException { - return classLoader != null ? classLoader : Thread.currentThread().getContextClassLoader(); - } - } - ); - } catch (PrivilegedActionException e) { - if (log.isDebugEnabled()) { - log.debug("Exception thrown from AccessController: " + e.getMessage(), e); - } - throw ExceptionFactory.makeWebServiceException(e.getException()); - } - - return cl; - } - - /** - * This will update or set the parameter on the AxisService that represents the - * value of the @WebService.name attribute. This is needed since the @WebService.name - * value may not be known until the EndpointInterfaceDescription is created for - * the explicitly defined SEI. - */ - void updateWebServiceNameParameter(final String newName, final AxisService service) { - if(log.isDebugEnabled()) { - log.debug("Setting @WebService.name value on the " + service.getName() + - " AxisService to: " + newName); - } - Parameter param = service.getParameter(MDQConstants.WSDL_PORTTYPE_NAME); - if(param != null) { - param.setValue(newName); - } - else { - param = new Parameter(); - param.setName(MDQConstants.WSDL_PORTTYPE_NAME); - param.setValue(newName); - try { - service.addParameter(param); - } - catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr2"),e); - } - } - } - - private static long currentUniqueID = 0; - private long uniqueID() { - if (currentUniqueID == 0) { - currentUniqueID = System.currentTimeMillis(); - } - return currentUniqueID++; - } - - /** - * Release the AxisService objects associated with this EndpointDescription. Note that - * this should only be called by the ServiceDescription that owns this EndpointDescrition. - * - * @param configurationContext The Axis2 ConfigurationContext holding the AxisConfiguration - * from which the AxisServices should be removed. - */ - void releaseResources(final ConfigurationContext configurationContext) { - if (configurationContext != null) { - AxisConfiguration axisConfig = configurationContext.getAxisConfiguration(); - AxisService axisService = getAxisService(); - AxisServiceGroup axisServiceGroup = axisService.getAxisServiceGroup(); - try { - axisConfig.removeServiceGroup(axisServiceGroup.getServiceGroupName()); - } catch (AxisFault e) { - if (log.isDebugEnabled()) { - log.debug("EndpointDescriptionImpl release resources caught exception which it is ignoring", e); - } - } - } - } -} - - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java deleted file mode 100644 index 8465fb481c..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java +++ /dev/null @@ -1,1103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.jws.WebService; -import javax.jws.soap.SOAPBinding; -import javax.wsdl.Definition; -import javax.wsdl.PortType; -import javax.xml.namespace.QName; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisOperationFactory; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.java.security.AccessController; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescription; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescriptionJava; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescriptionWSDL; -import org.apache.axis2.jaxws.description.OperationDescription; -import org.apache.axis2.jaxws.description.ServiceDescriptionWSDL; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MDQConstants; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.axis2.wsdl.WSDLConstants; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** @see ../EndpointInterfaceDescription */ -class EndpointInterfaceDescriptionImpl - implements EndpointInterfaceDescription, EndpointInterfaceDescriptionJava, - EndpointInterfaceDescriptionWSDL { - private EndpointDescriptionImpl parentEndpointDescription; - private ArrayList operationDescriptions = - new ArrayList(); - private Map> dispatchableOperations; - private DescriptionBuilderComposite dbc; - - //Logging setup - private static final Log log = LogFactory.getLog(EndpointInterfaceDescriptionImpl.class); - - // =========================================== - // ANNOTATION related information - // =========================================== - - // ANNOTATION: @WebService - private WebService webServiceAnnotation; - private String webServiceTargetNamespace; - private String webService_Name; - - - // ANNOTATION: @SOAPBinding - // Note this is the Type-level annotation. See OperationDescription for the Method-level annotation - private SOAPBinding soapBindingAnnotation; - private javax.jws.soap.SOAPBinding.Style soapBindingStyle; - // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - public static final javax.jws.soap.SOAPBinding.Style SOAPBinding_Style_DEFAULT = - javax.jws.soap.SOAPBinding.Style.DOCUMENT; - private javax.jws.soap.SOAPBinding.Use soapBindingUse; - // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - public static final javax.jws.soap.SOAPBinding.Use SOAPBinding_Use_DEFAULT = - javax.jws.soap.SOAPBinding.Use.LITERAL; - private javax.jws.soap.SOAPBinding.ParameterStyle soapParameterStyle; - // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - public static final javax.jws.soap.SOAPBinding.ParameterStyle SOAPBinding_ParameterStyle_DEFAULT = - javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED; - - /** - * Add the operationDescription to the list of operations. Note that we can not create the - * list of dispatchable operations at this points. - * @see #initializeDispatchableOperationsList() - * - * @param operation The operation description to add to this endpoint interface - */ - void addOperation(final OperationDescription operation) { - operationDescriptions.add(operation); - } - - /** - * Construct a service requester (aka client-side) EndpointInterfaceDescription for the - * given SEI class. This constructor is used if hierachy is being built fully from annotations - * and not WSDL. - * @param sei - * @param parent - */ - EndpointInterfaceDescriptionImpl(final Class sei, final EndpointDescriptionImpl parent) { - parentEndpointDescription = parent; - dbc = new DescriptionBuilderComposite(); - dbc.setCorrespondingClass(sei); - - // Per JSR-181 all methods on the SEI are mapped to operations regardless - // of whether they include an @WebMethod annotation. That annotation may - // be present to customize the mapping, but is not required (p14) - for (Method method : getSEIMethods(dbc.getCorrespondingClass())) { - OperationDescription operation = new OperationDescriptionImpl(method, this); - addOperation(operation); - } - } - - /** - * Construct a service requester (aka client-side) EndpointInterfaceDescrption for - * an SEI represented by an AxisService. This constructor is used if the hierachy is - * being built fully from WSDL. The AxisService and underlying AxisOperations were built - * based on the WSDL, so we will use them to create the necessary objects. - * - * @param parent - */ - EndpointInterfaceDescriptionImpl(final EndpointDescriptionImpl parent) { - parentEndpointDescription = parent; - dbc = new DescriptionBuilderComposite(); - AxisService axisService = parentEndpointDescription.getAxisService(); - if (axisService != null) { - ArrayList publishedOperations = axisService.getPublishedOperations(); - Iterator operationsIterator = publishedOperations.iterator(); - while (operationsIterator.hasNext()) { - AxisOperation axisOperation = (AxisOperation)operationsIterator.next(); - addOperation(new OperationDescriptionImpl(axisOperation, this)); - } - } - } - /** - * Construct as Provider-based endpoint which does not have specific WSDL operations. Since there - * are no specific WSDL operations in this case, there will be a single generic operation that - * will accept any incoming operation. - * - * @param dbc - * @param parent - */ - EndpointInterfaceDescriptionImpl(final DescriptionBuilderComposite dbc, - final EndpointDescriptionImpl parent) { - if (log.isDebugEnabled()) { - log.debug("Creating a EndpointInterfaceDescription for a generic WSDL-less provider"); - } - parentEndpointDescription = parent; - this.dbc = dbc; - - // Construct the generic provider AxisOperation to use then construct - // an OperactionDescription for it. - AxisOperation genericProviderAxisOp = null; - try { - genericProviderAxisOp = - AxisOperationFactory.getOperationDescription(WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OUT); - } catch (AxisFault e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("eiDescrImplErr"),e); - } - - genericProviderAxisOp.setName(new QName(JAXWS_NOWSDL_PROVIDER_OPERATION_NAME)); - OperationDescription opDesc = new OperationDescriptionImpl(genericProviderAxisOp, this); - - addOperation(opDesc); - AxisService axisService = getEndpointDescription().getAxisService(); - axisService.addOperation(genericProviderAxisOp); - } - - /** - * Build an EndpointInterfaceDescription from a DescriptionBuilderComposite. This EID has - * WSDL operations associated with it. It could represent an SEI-based endpoint built from - * WSDL or annotations, OR it could represent a Provider-based enpoint built from WSDL. It will - * not represent a Provider-based endpoint built without WSDL (which does not know about - * specific WSDL operations). For that type of EID, see: - * @see #EndpointInterfaceDescriptionImpl(DescriptionBuilderComposite dbc, EndpointDescriptionImpl parent) - * @param dbc - * @param isClass - * @param parent - */ - EndpointInterfaceDescriptionImpl(final DescriptionBuilderComposite dbc, - final boolean isClass, - final EndpointDescriptionImpl parent) { - - parentEndpointDescription = parent; - this.dbc = dbc; - - getEndpointDescription().getAxisService() - .setTargetNamespace(getEndpointDescriptionImpl().getTargetNamespace()); - - // Per JSR-181 all methods on the SEI are mapped to operations regardless - // of whether they include an @WebMethod annotation. That annotation may - // be present to customize the mapping, but is not required (p14) - - //We are processing the SEI composite - //For every MethodDescriptionComposite in this list, call OperationDescription - //constructor for it, then add this operation - - //Retrieve the relevent method composites for this dbc (and those in the superclass chain) - Iterator iter = retrieveReleventMethods(dbc); - - if (log.isDebugEnabled()) { - log.debug("EndpointInterfaceDescriptionImpl: Finished retrieving methods"); - } - MethodDescriptionComposite mdc = null; - - while (iter.hasNext()) { - mdc = iter.next(); - - mdc.setDeclaringClass(dbc.getClassName()); - - // Only add if it is a method that would be or is in the WSDL i.e. - // don't create an OperationDescriptor for the MDC representing the - // constructor - if (DescriptionUtils.createOperationDescription(mdc.getMethodName())) { - //First check if this operation already exists on the AxisService, if so - //then use that in the description hierarchy - - AxisService axisService = getEndpointDescription().getAxisService(); - AxisOperation axisOperation = axisService - .getOperation(OperationDescriptionImpl.determineOperationQName(mdc)); - - OperationDescription operation = - new OperationDescriptionImpl(mdc, this, axisOperation); - - if (axisOperation == null) { - // This axisOperation did not already exist on the AxisService, and so was created - // with the OperationDescription, so we need to add the operation to the service - ((OperationDescriptionImpl)operation).addToAxisService(axisService); - } - - if (log.isDebugEnabled()) { - log.debug("EID: Just added operation= " + operation.getOperationName()); - } - addOperation(operation); - } - - } - - if (log.isDebugEnabled()) { - log.debug("EndpointInterfaceDescriptionImpl: Finished Adding operations"); - } - - } - - - private static Method[] getSEIMethods(final Class sei) { - // Per JSR-181 all methods on the SEI are mapped to operations regardless - // of whether they include an @WebMethod annotation. That annotation may - // be present to customize the mapping, but is not required (p14) - Method[] seiMethods = sei.getMethods(); - ArrayList methodList = new ArrayList(); - if (sei != null) { - for (Method method : seiMethods) { - - if (method.getDeclaringClass().getName().equals("java.lang.Object")) { - continue; - } - methodList.add(method); - if (!Modifier.isPublic(method.getModifiers())) { - // JSR-181 says methods must be public (p14) - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("seiMethodsErr")); - } - // TODO: other validation per JSR-181 - } - - } - return (Method[])methodList.toArray(new Method[methodList.size()]); -// return seiMethods; - } - - /** - * Update a previously created EndpointInterfaceDescription with information from an annotated - * SEI. This should only be necessary when the this was created with WSDL. In this case, the - * information from the WSDL is augmented based on the annotated SEI. - * - * @param sei - */ - void updateWithSEI(final Class sei) { - Class seiClass = dbc.getCorrespondingClass(); - if (seiClass != null && seiClass != sei) { - throw ExceptionFactory.makeWebServiceException(new UnsupportedOperationException(Messages.getMessage("seiProcessingErr"))); - } - else if (seiClass != null && seiClass == sei) { - // We've already done the necessary updates for this SEI - return; - } - else if (sei != null) { - seiClass = sei; - dbc.setCorrespondingClass(sei); - // Update (or possibly add) the OperationDescription for each of the methods on the SEI. - for (Method seiMethod : getSEIMethods(seiClass)) { - - if (getOperation(seiMethod) != null) { - // If an OpDesc already exists with this java method set on it, then the OpDesc has already - // been updated for this method, so skip it. - continue; - } - // At this point (for now at least) the operations were created with WSDL previously. - // If they had been created from an annotated class and no WSDL, then the seiClass would have - // already been set so we would have taken other branches in this if test. (Note this could - // change once AxisServices can be built from annotations by the ServiceDescription class). - // Since the operations were created from WSDL, they will not have a java method, which - // comes from the SEI, set on them yet. - // - // Another consideration is that currently Axis2 does not support overloaded WSDL operations. - // That means there will only be one OperationDesc build from WSDL. Still another consideration is - // that the JAXWS async methods which may exist on the SEI will NOT exist in the WSDL. An example - // of these methods for the WSDL operation: - // String echo(String) - // optionally generated JAX-WS SEI methods from the tooling; take note of the annotation specifying the - // operation name - // @WebMethod(operationName="echo" ...) - // Response echoStringAsync(String) - // @WebMethod(operationName="echo" ...) - // Future echoStringAsync(String, AsyncHandler) - // - // So given all the above, the code does the following based on the operation QName - // (which might also be the java method name; see determineOperationQName for details) - // (1) If an operationDesc does not exist, add it. - // (2) If an operationDesc does exist but does not have a java method set on it, set it - // (3) If an operationDesc does exist and has a java method set on it already, add a new one. - // - // TODO: May need to change when Axis2 supports overloaded WSDL operations - - // Get the QName for this java method and then update (or add) the appropriate OperationDescription - // See comments below for imporant notes about the current implementation. - // NOTE ON OVERLOADED OPERATIONS - // Axis2 does NOT currently support overloading WSDL operations. - QName seiOperationQName = - OperationDescriptionImpl.determineOperationQName(seiMethod); - OperationDescription[] updateOpDesc = getOperation(seiOperationQName); - if (updateOpDesc == null || updateOpDesc.length == 0) { - // This operation wasn't defined in the WSDL. Note that the JAX-WS async methods - // which are defined on the SEI are not defined as operations in the WSDL. - // Although they usually specific the same OperationName as the WSDL operation, - // there may be cases where they do not. - OperationDescription operation = new OperationDescriptionImpl(seiMethod, this); - addOperation(operation); - } else { - // Currently Axis2 does not support overloaded operations. That means that even if the WSDL - // defined overloaded operations, there would still only be a single AxisOperation, and it - // would be the last operation encounterd. - // HOWEVER the generated JAX-WS async methods (see above) may (will always?) have the same - // operation name and so will come down this path; they need to be added. - // TODO: When Axis2 starts supporting overloaded operations, then this logic will need to be changed - - // Loop through all the opdescs; if one doesn't currently have a java method set, set it - // If all have java methods set, then add a new one. Assume we'll need to add a new one. - boolean addOpDesc = true; - for (OperationDescription checkOpDesc : updateOpDesc) { - if (checkOpDesc.getSEIMethod() == null) { - // TODO: Should this be checking (somehow) that the signature matches? Probably not an issue until overloaded WSDL ops are supported. - - //Make sure that this is not one of the 'async' methods associated with - //this operation. If it is, let it be created as its own opDesc. - if (!DescriptionUtils.isAsync(seiMethod)) { - ((OperationDescriptionImpl) checkOpDesc).setSEIMethod(seiMethod); - addOpDesc = false; - break; - } - } - } - if (addOpDesc) { - OperationDescription operation = - new OperationDescriptionImpl(seiMethod, this); - addOperation(operation); - } - } - } - } - } - - /** - * Return the OperationDescriptions corresponding to a particular Java method name. Note that an - * array is returned because a method could be overloaded. - * - * @param javaMethodName String representing a Java Method Name - * @return - */ - public OperationDescription[] getOperationForJavaMethod(final String javaMethodName) { - if (DescriptionUtils.isEmpty(javaMethodName)) { - return null; - } - - ArrayList matchingOperations = new ArrayList(); - for (OperationDescription operation : getOperations()) { - if (javaMethodName.equals(operation.getJavaMethodName())) { - matchingOperations.add(operation); - } - } - - if (matchingOperations.size() == 0) { - return null; - } else { - return matchingOperations.toArray(new OperationDescription[0]); - } - } - - /** - * Return the OperationDesription (only one) corresponding to the OperationName passed in. - * - * @param operationName - * @return - */ - public OperationDescription getOperation(final String operationName) { - if (DescriptionUtils.isEmpty(operationName)) { - return null; - } - - OperationDescription matchingOperation = null; - for (OperationDescription operation : getOperations()) { - if (operationName.equals(operation.getOperationName())) { - matchingOperation = operation; - break; - } - } - return matchingOperation; - } - - public OperationDescription[] getOperations() { - return operationDescriptions.toArray(new OperationDescription[0]); - } - - EndpointDescriptionImpl getEndpointDescriptionImpl() { - return parentEndpointDescription; - } - - public EndpointDescription getEndpointDescription() { - return parentEndpointDescription; - } - - /** - * Return an array of Operations given an operation QName. Note that an array is returned since - * a WSDL operation may be overloaded per JAX-WS. - * - * @param operationQName - * @return - */ - public OperationDescription[] getOperation(final QName operationQName) { - OperationDescription[] returnOperations = null; - if (!DescriptionUtils.isEmpty(operationQName)) { - ArrayList matchingOperations = - new ArrayList(); - OperationDescription[] allOperations = getOperations(); - for (OperationDescription operation : allOperations) { - if (operation.getName().getLocalPart().equals(operationQName.getLocalPart())) { - matchingOperations.add(operation); - } - } - // Only return an array if there's anything in it - if (matchingOperations.size() > 0) { - returnOperations = matchingOperations.toArray(new OperationDescription[0]); - } - } - return returnOperations; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.EndpointInterfaceDescription#getDispatchableOperation(QName operationQName) - */ - public OperationDescription[] getDispatchableOperation(final QName operationQName) { - // REVIEW: Can this be synced at a more granular level? Can't sync on dispatchableOperations because - // it may be null, but also the initialization must finish before next thread sees - // dispatachableOperations != null - synchronized(this) { - if (dispatchableOperations == null) { - initializeDispatchableOperationsList(); - } - } - - // Note that OperationDescriptionImpl creates operation qname with empty namespace. Thus - // using only the localPart to get dispatchable operations. - QName key = new QName("",operationQName.getLocalPart()); - List operations = dispatchableOperations.get(key); - if(operations!=null){ - return operations.toArray(new OperationDescription[operations.size()]); - } - return new OperationDescription[0]; - } - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.EndpointInterfaceDescription#getDispatchableOperations() - */ - public OperationDescription[] getDispatchableOperations() { - OperationDescription[] returnOperations = null; - - // REVIEW: Can this be synced at a more granular level? Can't sync on dispatchableOperations because - // it may be null, but also the initialization must finish before next thread sees - // dispatachableOperations != null - synchronized(this) { - if (dispatchableOperations == null) { - initializeDispatchableOperationsList(); - } - } - Collection> dispatchableValues = dispatchableOperations.values(); - Iterator> iteratorValues = dispatchableValues.iterator(); - ArrayList allDispatchableOperations = new ArrayList(); - while (iteratorValues.hasNext()) { - List opDescList = iteratorValues.next(); - allDispatchableOperations.addAll(opDescList); - } - if (allDispatchableOperations.size() > 0) { - returnOperations = allDispatchableOperations.toArray(new OperationDescription[allDispatchableOperations.size()]); - } - return returnOperations; - } - - /** - * Create the list of dispatchable operations from the list of all the operations. A - * dispatchable operation is one that can be invoked on the endpoint, so it DOES NOT include: - * - JAXWS Client Async methods - * - Methods that have been excluded via WebMethod.exclude annotation - * - * Note: We have to create the list of dispatchable operations in a lazy way; we can't - * create it as the operations are added via addOperations() because on the client - * that list is built in two parts; first using AxisOperations from the WSDL, which will - * not have any annotation information (such as WebMethod.exclude). That list will then - * be updated with SEI information, which is the point annotation information becomes - * available. - */ - private void initializeDispatchableOperationsList() { - dispatchableOperations = new HashMap>(); - OperationDescription[] opDescs = getOperations(); - for (OperationDescription opDesc : opDescs) { - if (!opDesc.isJAXWSAsyncClientMethod() && !opDesc.isExcluded()) { - List dispatchableOperationsWithName = dispatchableOperations.get(opDesc.getName()); - if(dispatchableOperationsWithName == null) { - dispatchableOperationsWithName = new ArrayList(); - dispatchableOperations.put(opDesc.getName(), dispatchableOperationsWithName); - } - dispatchableOperationsWithName.add(opDesc); - } - } - } - - /** - * Return an OperationDescription for the corresponding SEI method. Note that this ONLY works - * if the OperationDescriptions were created from introspecting an SEI. If the were created - * with a WSDL then use the getOperation(QName) method, which can return > 1 operation. - * - * @param seiMethod The java.lang.Method from the SEI for which an OperationDescription is - * wanted - * @return - */ - public OperationDescription getOperation(final Method seiMethod) { - OperationDescription returnOperation = null; - if (seiMethod != null) { - OperationDescription[] allOperations = getOperations(); - for (OperationDescription operation : allOperations) { - if (operation.getSEIMethod() != null && operation.getSEIMethod().equals(seiMethod)) - { - returnOperation = operation; - } - } - } - return returnOperation; - } - - public Class getSEIClass() { - return dbc.getCorrespondingClass(); - } - // Annotation-realted getters - - // ======================================== - // SOAP Binding annotation realted methods - // ======================================== - public SOAPBinding getAnnoSoapBinding() { - if (soapBindingAnnotation == null) { - soapBindingAnnotation = dbc.getSoapBindingAnnot(); - } - return soapBindingAnnotation; - } - - public javax.jws.soap.SOAPBinding.Style getSoapBindingStyle() { - return getAnnoSoapBindingStyle(); - } - - public javax.jws.soap.SOAPBinding.Style getAnnoSoapBindingStyle() { - if (soapBindingStyle == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().style() != null) { - soapBindingStyle = getAnnoSoapBinding().style(); - } else { - soapBindingStyle = SOAPBinding_Style_DEFAULT; - } - } - return soapBindingStyle; - } - - public javax.jws.soap.SOAPBinding.Use getSoapBindingUse() { - return getAnnoSoapBindingUse(); - } - - public javax.jws.soap.SOAPBinding.Use getAnnoSoapBindingUse() { - if (soapBindingUse == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().use() != null) { - soapBindingUse = getAnnoSoapBinding().use(); - } else { - soapBindingUse = SOAPBinding_Use_DEFAULT; - } - } - return soapBindingUse; - } - - public javax.jws.soap.SOAPBinding.ParameterStyle getSoapBindingParameterStyle() { - return getAnnoSoapBindingParameterStyle(); - } - - public javax.jws.soap.SOAPBinding.ParameterStyle getAnnoSoapBindingParameterStyle() { - if (soapParameterStyle == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().parameterStyle() != null) { - soapParameterStyle = getAnnoSoapBinding().parameterStyle(); - } else { - soapParameterStyle = SOAPBinding_ParameterStyle_DEFAULT; - } - } - return soapParameterStyle; - } - - /* - * Returns a non-null (possibly empty) list of MethodDescriptionComposites - */ - Iterator retrieveReleventMethods(final DescriptionBuilderComposite dbc) { - - /* - * Depending on whether this is an implicit SEI or an actual SEI, Gather up and build a - * list of MDC's. If this is an actual SEI, then starting with this DBC, build a list of all - * MDC's that are public methods in the chain of extended classes. - * If this is an implicit SEI, then starting with this DBC, - * 1. If a false exclude is found, then take only those that have false excludes - * 2. Assuming no false excludes, take all public methods that don't have exclude == true - * 3. For each super class, if 'WebService' present, take all MDC's according to rules 1&2 - * But, if WebService not present, grab only MDC's that are annotated. - */ - if (log.isTraceEnabled()) { - log.trace("retrieveReleventMethods: Enter"); - } - - ArrayList retrieveList = - new ArrayList(); - - if (dbc.isInterface()) { - if(log.isDebugEnabled()) { - log.debug("Removing overridden methods for interface: " + dbc.getClassName() + - " with super interface: " + dbc.getSuperClassName()); - } - - // make sure we retrieve all the methods, then remove the overridden - // methods that exist in the base interface - retrieveList = retrieveSEIMethodsChain(dbc); - retrieveList = removeOverriddenMethods(retrieveList, dbc); - - } else { - //this is an implied SEI...rules are more complicated - - retrieveList = retrieveImplicitSEIMethods(dbc); - - //Now, continue to build this list with relevent methods in the chain of - //superclasses. If the logic for processing superclasses is the same as for - //the original SEI, then we can combine this code with above code. But, its possible - //the logic is different for superclasses...keeping separate for now. - DescriptionBuilderComposite tempDBC = dbc; - - while (!DescriptionUtils.isEmpty(tempDBC.getSuperClassName())) { - - //verify that this superclass name is not - // java.lang.object, if so, then we're done processing - if (DescriptionUtils.javifyClassName(tempDBC.getSuperClassName()) - .equals(MDQConstants.OBJECT_CLASS_NAME)) { - break; - } - - DescriptionBuilderComposite superDBC = - getEndpointDescriptionImpl().getServiceDescriptionImpl().getDBCMap() - .get(tempDBC.getSuperClassName()); - - if (log.isTraceEnabled()) { - log.trace("superclass name for this DBC is:" + tempDBC.getSuperClassName()); - } - - //Verify that we can find the SEI in the composite list - if (superDBC == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("seiNotFoundErr")); - } - - //If the superclass contains a WebService annotation then retrieve its methods - //as we would for the impl class, otherwise ignore the methods of this - //superclass - if (superDBC.getWebServiceAnnot() != null) { - //Now, gather the list of Methods just like we do for the lowest subclass - retrieveList.addAll(retrieveImplicitSEIMethods(superDBC)); - } - tempDBC = superDBC; - } //Done with implied SEI's superclasses - retrieveList = removeOverriddenMethods(retrieveList, dbc); - }//Done with implied SEI's - - return retrieveList.iterator(); - } - - - /** - * This method will establish a HashMap that represents a class name of a composite - * and an integer value for the entry. The integer represents the classes level in the Java - * hierarchy. 0 represents the most basic class with n representing the highest level class. - * - * @param dbc - DescriptionBuilderComposite - * @return - HashMap - */ - private HashMap getClassHierarchy(final DescriptionBuilderComposite dbc) { - HashMap dbcMap = getEndpointDescriptionImpl(). - getServiceDescriptionImpl().getDBCMap(); - HashMap hierarchyMap = new HashMap(); - if (log.isDebugEnabled()) { - log.debug("Putting class at base level: " + dbc.getClassName()); - } - hierarchyMap.put(dbc.getClassName(), Integer.valueOf(0)); - DescriptionBuilderComposite superDBC = dbcMap.get((dbc.getSuperClassName())); - int i = 1; - while (superDBC != null && !superDBC.getClassName().equals("java.lang.Object")) { - hierarchyMap.put(superDBC.getClassName(), Integer.valueOf(i)); - if (log.isDebugEnabled()) { - log.debug("Putting class: " + superDBC.getClassName() + " at hierarchy rank: " + - i); - } - i++; - superDBC = dbcMap.get(superDBC.getSuperClassName()); - } - return hierarchyMap; - } - - /** - * This method drives the establishment of the hierarchy of interfaces for an SEI. - */ - private Map getInterfaceHierarchy(final DescriptionBuilderComposite dbc) { - if(log.isDebugEnabled()) { - log.debug("Getting interface hierarchy for: " + dbc.getClassName()); - } - Map hierarchyMap = new HashMap(); - hierarchyMap.put(dbc.getClassName(), 0); - return getInterfaceHierarchy(dbc.getInterfacesList(), - hierarchyMap, - 1); - } - - /** - * Recursive method that builds the hierarchy of interfaces. This begins with an - * SEI and walks all of its super interfaces. - */ - private Map getInterfaceHierarchy(final List interfaces, - final Map hierarchyMap, - int level) { - HashMap dbcMap = getEndpointDescriptionImpl(). - getServiceDescriptionImpl().getDBCMap(); - - // walk through all of the interfaces - if(interfaces != null - && - !interfaces.isEmpty()) { - for(String interfaze : interfaces) { - DescriptionBuilderComposite interDBC = dbcMap.get(interfaze); - if(interDBC != null) { - if(log.isDebugEnabled()) { - log.debug("Inserting super interface " + interDBC.getClassName() + - " at level " + level); - } - hierarchyMap.put(interDBC.getClassName(), level); - return getInterfaceHierarchy(interDBC.getInterfacesList(), hierarchyMap, level++); - } - } - } - return hierarchyMap; - } - - /** - * This method will loop through each method that was previously determined as being relevant to - * the current composite. It will then drive the call to determine if this represents a method - * that has been overridden. If it represents an overriding method declaration it will remove - * the inherited methods from the list leaving only the most basic method declaration. - * - * @param methodList - ArrayList list of relevant methods - * @param dbc - DescriptionBuilderComposite current composite - * @return - ArrayList - */ - private ArrayList removeOverriddenMethods( - final ArrayList - methodList, final DescriptionBuilderComposite dbc) { - Map hierarchyMap = dbc.isInterface() ? getInterfaceHierarchy(dbc) : - getClassHierarchy(dbc); - ArrayList returnMethods = - new ArrayList(); - for (int i = 0; i < methodList.size(); i++) { - if (notFound(returnMethods, methodList.get(i))) { - returnMethods.add(getBaseMethod(methodList.get(i), i, methodList, hierarchyMap)); - } - - } - return returnMethods; - } - - /** - * This method will loop through each method we have already identified as a base method and - * compare the current method. - * - * @param mdcList - ArrayList identified base methods - * @param mdc - MethodDescriptionComposite current method - * @return - boolean - */ - private boolean notFound(final ArrayList mdcList, - final MethodDescriptionComposite mdc) { - for (MethodDescriptionComposite method : mdcList) { - if (mdc.compare(method)) { - return false; - } - } - return true; - } - - /** - * This method is responsible for determining the most basic level of a method declaration in - * the DescriptionBuilderComposite hierarchy. - * - * @param mdc - MethodDescriptionComposite current method - * @param index - int current location in method list - * @param methodList - List list of methods available on this composite - * @param hierarchyMap - HashMap map that represents the hierarchy of the current - * DescriptionBuilderComposite - * @return - MethodDescriptionComposite most basic method declaration - */ - private static MethodDescriptionComposite getBaseMethod(MethodDescriptionComposite mdc, - int index, - final ArrayList methodList, - final Map - hierarchyMap) { - int baseLevel = hierarchyMap.get(mdc.getDeclaringClass()); - if (log.isDebugEnabled()) { - log.debug("Base method: " + mdc.getMethodName() + " initial level: " + baseLevel); - } - for (; index < methodList.size(); index++) { - MethodDescriptionComposite compareMDC = methodList.get(index); - // If the two methods are the same method that means we have found an inherited - // overridden case - if (mdc.equals(compareMDC)) { - if (log.isDebugEnabled()) { - log.debug("Found equivalent methods: " + mdc.getMethodName()); - } - // get the declaration level of the method we are comparing to - int compareLevel = hierarchyMap.get(compareMDC.getDeclaringClass()); - // if the method was declared by a class in a lower level of the hierarchy it - // becomes the method that we will compare other methods to - if (compareLevel < baseLevel) { - if (log.isDebugEnabled()) { - log.debug("Found method lower in hierarchy chain: " + - compareMDC.getMethodName() - + " of class: " + compareMDC.getMethodName()); - } - mdc = compareMDC; - baseLevel = compareLevel; - } - } - } - return mdc; - } - - /* - * This is called when we know that this DBC is an implicit SEI - */ - private ArrayList retrieveImplicitSEIMethods( - final DescriptionBuilderComposite dbc) { - - ArrayList retrieveList = - new ArrayList(); - - retrieveList = DescriptionUtils.getMethodsWithFalseExclusions(dbc); - - //If this list is empty, then there are no false exclusions, so gather - //all composites that don't have exclude == true - //If the list is not empty, then it means we found at least one method with 'exclude==false' - //so the list should contain only those methods - if (retrieveList == null || retrieveList.size() == 0) { - Iterator iter = null; - List mdcList = dbc.getMethodDescriptionsList(); - - if (mdcList != null) { - iter = dbc.getMethodDescriptionsList().iterator(); - while (iter.hasNext()) { - MethodDescriptionComposite mdc = iter.next(); - - if (!DescriptionUtils.isExcludeTrue(mdc)) { - mdc.setDeclaringClass(dbc.getClassName()); - retrieveList.add(mdc); - } - } - } - } - - return retrieveList; - } - - private ArrayList retrieveSEIMethods( - final DescriptionBuilderComposite dbc) { - - //Rules for retrieving Methods on an SEI (or a superclass of an SEI) are simple - //Just retrieve all methods regardless of WebMethod annotations - ArrayList retrieveList = - new ArrayList(); - - Iterator iter = null; - List mdcList = dbc.getMethodDescriptionsList(); - - if (mdcList != null) { - iter = dbc.getMethodDescriptionsList().iterator(); - while (iter.hasNext()) { - MethodDescriptionComposite mdc = iter.next(); - mdc.setDeclaringClass(dbc.getClassName()); - retrieveList.add(mdc); - } - } - - return retrieveList; - } - - private ArrayList retrieveSEIMethodsChain( - final DescriptionBuilderComposite tmpDBC) { - - DescriptionBuilderComposite dbc = tmpDBC; - ArrayList retrieveList = - new ArrayList(); - - retrieveList = retrieveSEIMethods(dbc); - - //Since this is an interface, anything that is in the extends clause will actually appear - // in the interfaces list instead. - Iterator iter = null; - List interfacesList = dbc.getInterfacesList(); - if (interfacesList != null) { - iter = dbc.getInterfacesList().iterator(); - - while (iter.hasNext()) { - - String interfaceName = iter.next(); - DescriptionBuilderComposite superInterface = - getEndpointDescriptionImpl().getServiceDescriptionImpl().getDBCMap() - .get(interfaceName); - - retrieveList.addAll(retrieveSEIMethodsChain(superInterface)); - } - } - - return retrieveList; - } - - private Definition getWSDLDefinition() { - return ((ServiceDescriptionWSDL)getEndpointDescription().getServiceDescription()) - .getWSDLDefinition(); - } - - public PortType getWSDLPortType() { - PortType portType = null; -// EndpointDescriptionWSDL endpointDescWSDL = (EndpointDescriptionWSDL) getEndpointDescription(); -// Binding wsdlBinding = endpointDescWSDL.getWSDLBinding(); -// if (wsdlBinding != null) { -// portType = wsdlBinding.getPortType(); -// } - Definition wsdlDefn = getWSDLDefinition(); - if (wsdlDefn != null) { - String tns = getEndpointDescription().getTargetNamespace(); - String localPart = getEndpointDescription().getName(); - if (localPart != null) { - portType = wsdlDefn.getPortType(new QName(tns, localPart)); - } - } - return portType; - } - - - public String getTargetNamespace() { - return getAnnoWebServiceTargetNamespace(); - } - - public WebService getAnnoWebService() { - if (webServiceAnnotation == null) { - webServiceAnnotation = dbc.getWebServiceAnnot(); - } - return webServiceAnnotation; - } - - public String getAnnoWebServiceTargetNamespace() { - if (webServiceTargetNamespace == null) { - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().targetNamespace())) { - webServiceTargetNamespace = getAnnoWebService().targetNamespace(); - } else { - // Default value per JSR-181 MR Sec 4.1 pg 15 defers to "Implementation defined, - // as described in JAX-WS 2.0, section 3.2" which is JAX-WS 2.0 Sec 3.2, pg 29. - webServiceTargetNamespace = - DescriptionUtils.makeNamespaceFromPackageName( - DescriptionUtils.getJavaPackageName(dbc.getClassName()), - "http"); - } - } - return webServiceTargetNamespace; - } - - public String getAnnoWebServiceName() { - if (webService_Name == null) { - - if (getAnnoWebService() != null - && !DescriptionUtils.isEmpty(getAnnoWebService().name())) { - webService_Name = getAnnoWebService().name(); - } else { - // Per the JSR 181 Specification, the default - // is the simple name of the class. - webService_Name = DescriptionUtils.getSimpleJavaClassName(dbc.getClassName()); - } - } - return webService_Name; - } - - public String getName() { - return getAnnoWebServiceName(); - } - - public QName getPortType() { - String name = getName(); - String tns = getTargetNamespace(); - return new QName(tns, name); - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - try { - string.append(super.toString()); - string.append(newline); - string.append("Name: " + getName()); - string.append(sameline); - string.append("PortType: " + getPortType()); - // - string.append(newline); - string.append("SOAP Style: " + getSoapBindingStyle()); - string.append(sameline); - string.append("SOAP Use: " + getSoapBindingUse()); - string.append(sameline); - string.append("SOAP Paramater Style: " + getSoapBindingParameterStyle()); - // - string.append(newline); - OperationDescription[] operations = getOperations(); - if (operations != null && operations.length > 0) { - string.append("Number of operations: " + operations.length); - for (OperationDescription operation : operations) { - string.append(newline); - string.append("Operation: " + operation.toString()); - } - } else { - string.append("OperationDescription array is null"); - } - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "EndpointInterfaceDescription"); - return string.toString(); - } - return string.toString(); - } - /** - * Get an annotation. This is wrappered to avoid a Java2Security violation. - * @param cls Class that contains annotation - * @param annotation Class of requrested Annotation - * @return annotation or null - */ - private static Annotation getAnnotation(final Class cls, final Class annotation) { - return (Annotation) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return cls.getAnnotation(annotation); - } - }); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/FaultDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/FaultDescriptionImpl.java deleted file mode 100644 index 3be3b0d700..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/FaultDescriptionImpl.java +++ /dev/null @@ -1,250 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.lang.reflect.Method; -import java.util.StringTokenizer; - -import javax.xml.ws.WebFault; - -import org.apache.axis2.jaxws.description.FaultDescription; -import org.apache.axis2.jaxws.description.FaultDescriptionJava; -import org.apache.axis2.jaxws.description.FaultDescriptionWSDL; -import org.apache.axis2.jaxws.description.OperationDescription; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; - - -/** @see ../FaultDescription */ - - -class FaultDescriptionImpl implements FaultDescription, FaultDescriptionJava, FaultDescriptionWSDL { - - private Class exceptionClass; - private DescriptionBuilderComposite composite; - private WebFault annotation; - private OperationDescription parent; - - - private String name = ""; // WebFault.name - private String faultBean = ""; // WebFault.faultBean - private String targetNamespace = ""; // WebFault.targetNamespace - private String faultInfo = null; - - private static final String FAULT = "Fault"; - - - /** - * The FaultDescriptionImpl class will only be used to describe exceptions declared to be thrown - * by a service that has a WebFault annotation. No generic exception should ever have a - * FaultDescription associated with it. It is the responsibility of the user of the - * FaultDescriptionImpl class to avoid instantiating this object for non-annotated generic - * exceptions. - * - * @param exceptionClass an exception declared to be thrown by the service on which this - * FaultDescription may apply. - * @param beanName fully qualified package+classname of the bean associated with this - * exception - * @param annotation the WebFault annotation object on this exception class - * @param parent the OperationDescription that is the parent of this FaultDescription - */ - FaultDescriptionImpl(final Class exceptionClass, final WebFault annotation, final OperationDescription parent) { - this.exceptionClass = exceptionClass; - this.annotation = annotation; - this.parent = parent; - } - - FaultDescriptionImpl(final DescriptionBuilderComposite faultDBC, final OperationDescription parent) { - this.composite = faultDBC; - this.parent = parent; - } - - public WebFault getAnnoWebFault() { - - if (annotation == null) { - if (isDBC()) { - annotation = this.composite.getWebFaultAnnot(); - } - } - - return annotation; - } - - public String getExceptionClassName() { - if (!isDBC()) { - // no need for defaults here. The exceptionClass stored in this - // FaultDescription object is one that has been declared to be - // thrown from the service method - return exceptionClass.getCanonicalName(); - } else { - return composite.getClassName(); - } - } - - public String getFaultInfo() { - if (faultInfo != null) { - return faultInfo; - } - if (!isDBC()) { - try { - Method method = exceptionClass.getMethod("getFaultInfo", null); - faultInfo = method.getReturnType().getCanonicalName(); - } catch (Exception e) { - // This must be a legacy exception - faultInfo = ""; - } - } else { - MethodDescriptionComposite mdc = - composite.getMethodDescriptionComposite("getFaultInfo", 1); - if (mdc != null) { - faultInfo = mdc.getReturnType(); - } else { - faultInfo = ""; - } - } - return faultInfo; - } - - public String getFaultBean() { - if (faultBean != null && faultBean.length() > 0) { - // Return the faultBean if it was already calculated - return faultBean; - } else { - // Load up the WebFault annotation and get the faultBean. - // @WebFault may not be present - WebFault annotation = getAnnoWebFault(); - - if (annotation != null && annotation.faultBean() != null && - annotation.faultBean().length() > 0) { - faultBean = annotation.faultBean(); - } else { - // There is no default. But it seems reasonable to return - // the fault info type. - faultBean = getFaultInfo(); - - // The faultBean still may be "" at this point. The JAXWS runtime - // is responsible for finding/buildin a representative fault bean. - } - } - return faultBean; - } - - public String getName() { - if (name.length() > 0) { - return name; - } else { - // Load the annotation. The annotation may not be present in WSGen cases - WebFault annotation = this.getAnnoWebFault(); - if (annotation != null && - annotation.name().length() > 0) { - name = annotation.name(); - } else { - // The default is undefined. - // The JAX-WS layer may use the fault bean information to determine the name - } - } - return name; - } - - public String getTargetNamespace() { - if (targetNamespace.length() > 0) { - return targetNamespace; - } else { - // Load the annotation. The annotation may not be present in WSGen cases - WebFault annotation = this.getAnnoWebFault(); - if (annotation != null && - annotation.targetNamespace().length() > 0) { - targetNamespace = annotation.targetNamespace(); - } else { - // The default is undefined - // The JAX-WS layer may use the fault bean information to determine the name - } - } - return targetNamespace; - } - - - public OperationDescription getOperationDescription() { - return parent; - } - - /** - * utility method to get the last token in a "."-delimited package+classname string - * - * @return - */ - private static String getSimpleName(final String in) { - if (in == null || in.length() == 0) { - return in; - } - String out = null; - StringTokenizer tokenizer = new StringTokenizer(in, "."); - if (tokenizer.countTokens() == 0) { - out = in; - } else { - while (tokenizer.hasMoreTokens()) { - out = tokenizer.nextToken(); - } - } - return out; - } - - private boolean isDBC() { - if (this.composite != null) { - return true; - } else { - return false; - } - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - try { - string.append(super.toString()); - string.append(newline); - string.append("Exception class: " + getExceptionClassName()); - string.append(newline); - string.append("Name: " + getName()); - string.append(newline); - string.append("Namespace: " + getName()); - string.append(newline); - string.append("FaultBean: " + getFaultBean()); - string.append(newline); - string.append("FaultInfo Type Name : " + getFaultInfo()); - - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "FaultDescription"); - return string.toString(); - } - return string.toString(); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/OperationDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/OperationDescriptionImpl.java deleted file mode 100644 index 2ee46181c0..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/OperationDescriptionImpl.java +++ /dev/null @@ -1,2281 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.io.File; -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.net.URL; -import java.security.PrivilegedAction; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.concurrent.Future; - -import javax.jws.Oneway; -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebResult; -import javax.jws.WebParam.Mode; -import javax.jws.soap.SOAPBinding; -import javax.wsdl.Binding; -import javax.wsdl.BindingInput; -import javax.wsdl.BindingOperation; -import javax.wsdl.BindingOutput; -import javax.wsdl.Definition; -import javax.wsdl.extensions.AttributeExtensible; -import javax.xml.namespace.QName; -import javax.xml.ws.Action; -import javax.xml.ws.AsyncHandler; -import javax.xml.ws.FaultAction; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.Response; -import javax.xml.ws.ResponseWrapper; -import javax.xml.ws.WebFault; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.addressing.wsdl.WSDL11ActionHelper; -import org.apache.axis2.description.AxisMessage; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisOperationFactory; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.WSDL2Constants; -import org.apache.axis2.java.security.AccessController; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.description.AttachmentDescription; -import org.apache.axis2.jaxws.description.EndpointDescriptionJava; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescription; -import org.apache.axis2.jaxws.description.FaultDescription; -import org.apache.axis2.jaxws.description.OperationDescription; -import org.apache.axis2.jaxws.description.OperationDescriptionJava; -import org.apache.axis2.jaxws.description.OperationDescriptionWSDL; -import org.apache.axis2.jaxws.description.OperationRuntimeDescription; -import org.apache.axis2.jaxws.description.ParameterDescription; -import org.apache.axis2.jaxws.description.ParameterDescriptionJava; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.FaultActionAnnot; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.OneWayAnnot; -import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.converter.ConverterUtils; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.axis2.jaxws.util.WSDL4JWrapper; -import org.apache.axis2.wsdl.WSDLConstants; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** @see ../OperationDescription */ -// TODO: Axis2 does not support overloaded operations, although EndpointInterfaceDescription.addOperation() does support overloading -// of methods represented by OperationDescription classes. However, the AxisOperation contained in an OperationDescription -// does NOT support overloaded methods. -// -// While overloading is not supported by WS-I, it IS supported by JAX-WS (p11). -// Note that this requires support in Axis2; currently WSDL11ToAxisServiceBuilder.populateOperations does not -// support overloaded methods in the WSDL; the operations are stored on AxisService as children in a HashMap with the wsdl -// operation name as the key. - -class OperationDescriptionImpl - implements OperationDescription, OperationDescriptionJava, OperationDescriptionWSDL { - private EndpointInterfaceDescription parentEndpointInterfaceDescription; - private AxisOperation axisOperation; - private QName operationQName; - private Method seiMethod; - private MethodDescriptionComposite methodComposite; - private ParameterDescription[] parameterDescriptions; - private FaultDescription[] faultDescriptions; - private static final Log log = LogFactory.getLog(OperationDescriptionImpl.class); - // =========================================== - // ANNOTATION related information - // =========================================== - - // ANNOTATION: @Oneway - private Oneway onewayAnnotation; - private Boolean onewayIsOneway; - - // ANNOTATION: @XmlList - private boolean isListType = false; - - // ANNOTATION: @RequestWrapper - private RequestWrapper requestWrapperAnnotation; - private String requestWrapperTargetNamespace; - private String requestWrapperLocalName; - private String requestWrapperClassName; - - // ANNOTATION: @ResponseWrapper - private ResponseWrapper responseWrapperAnnotation; - private String responseWrapperLocalName; - private String responseWrapperTargetNamespace; - private String responseWrapperClassName; - - // ANNOTATION: @Action - private Action actionAnnotation; - - // ANNOTATION: @SOAPBinding - // Note this is the Method-level annotation. See EndpointInterfaceDescription for the Type-level annotation - // Also note this annotation is only allowed on methods if SOAPBinding.Style is DOCUMENT and if the method-level - // annotation is absent, the behavior defined on the Type is used. - // per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - private SOAPBinding soapBindingAnnotation; - private javax.jws.soap.SOAPBinding.Style soapBindingStyle; - public static final javax.jws.soap.SOAPBinding.Style SoapBinding_Style_VALID = - javax.jws.soap.SOAPBinding.Style.DOCUMENT; - private javax.jws.soap.SOAPBinding.Use soapBindingUse; - // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - public static final javax.jws.soap.SOAPBinding.Use SOAPBinding_Use_DEFAULT = - javax.jws.soap.SOAPBinding.Use.LITERAL; - private javax.jws.soap.SOAPBinding.ParameterStyle soapBindingParameterStyle; - // Default value per JSR-181 MR Sec 4.7 "Annotation: javax.jws.soap.SOAPBinding" pg 28 - public static final javax.jws.soap.SOAPBinding.ParameterStyle SOAPBinding_ParameterStyle_DEFAULT = - javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED; - - // ANNOTATION: @WebMethod - private WebMethod webMethodAnnotation; - private String webMethodOperationName; - // Default value per JSR-181 MR Sec 4.2, pg 17 - public static final String WebMethod_Action_DEFAULT = ""; - private String webMethodAction; - // Default value per JSR-181 MR sec 4.2, pg 17 - public static final Boolean WebMethod_Exclude_DEFAULT = new Boolean(false); - private Boolean webMethodExclude; - - // ANNOTATION: @WebParam - private String[] webParamNames; - private Mode[] webParamMode; - private String[] webParamTargetNamespace; - - - // ANNOTATION: @WebResult - private WebResult webResultAnnotation; - private String webResultName; - private String webResultPartName; - // Default value per JSR-181 MR Sec 4.5.1, pg 23 - public static final String WebResult_TargetNamespace_DEFAULT = ""; - private String webResultTargetNamespace; - // Default value per JSR-181 MR sec 4.5, pg 24 - public static final Boolean WebResult_Header_DEFAULT = new Boolean(false); - private Boolean webResultHeader; - - // Web Result Attachment Description information - private boolean _setAttachmentDesc = false; - private AttachmentDescription attachmentDesc = null; - - private boolean hasRequestSwaRefAttachments = false; - private boolean hasResponseSwaRefAttachments = false; - private Map partAttachmentMap; - - private Method serviceImplMethod; - private boolean serviceImplMethodFound = false; - // For JAX-WS client async methods, this is the corresponding Sync method; for everything else, - // this is "this". - private OperationDescription syncOperationDescription = null; - // RUNTIME INFORMATION - Map runtimeDescMap = - Collections.synchronizedMap(new HashMap()); - // Cache the actual Class of the type being returned. - private Class resultActualTypeClazz; - - OperationDescriptionImpl(final Method method, final EndpointInterfaceDescription parent) { - parentEndpointInterfaceDescription = parent; - partAttachmentMap = new HashMap(); - setSEIMethod(method); - - // The operationQName is intentionally unqualified to be consistent with the remaining parts of the system. - // Using a qualified name will cause breakage. - // Don't do --> this.operationQName = new QName(parent.getTargetNamespace(), getOperationName()); - this.operationQName = new QName("", getOperationName()); - if (getEndpointInterfaceDescription().getEndpointDescription() != null) { - if (!getEndpointInterfaceDescription().getEndpointDescription().getServiceDescription().isServerSide()) { - axisOperation = createClientAxisOperation(); - } - } - if(this.axisOperation != null) { - try { - this.axisOperation.addParameter(new Parameter(OperationDescription.AXIS_OPERATION_PARAMETER, - this)); - } - catch(AxisFault af) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("operationDescriptionErr1")); - } - } - buildAttachmentInformation(); - } - - OperationDescriptionImpl(final AxisOperation operation, final EndpointInterfaceDescription parent) { - parentEndpointInterfaceDescription = parent; - partAttachmentMap = new HashMap(); - axisOperation = operation; - if(this.axisOperation != null) { - try { - this.axisOperation.addParameter(new Parameter(OperationDescription.AXIS_OPERATION_PARAMETER, - this)); - } - catch(AxisFault af) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("operationDescriptionErr1")); - } - } - this.operationQName = axisOperation.getName(); - buildAttachmentInformation(); - } - - OperationDescriptionImpl(final MethodDescriptionComposite mdc, - final EndpointInterfaceDescription parent, - final AxisOperation axisOperation) { - - parentEndpointInterfaceDescription = parent; - partAttachmentMap = new HashMap(); - methodComposite = mdc; - // The operationQName is intentionally unqualified to be consistent with the remaining parts of the system. - // Using a qualified name will cause breakage. - // Don't do --> this.operationQName = new QName(parent.getTargetNamespace(), getOperationName()); - this.operationQName = new QName("", getOperationName()); - - webMethodAnnotation = methodComposite.getWebMethodAnnot(); - - parameterDescriptions = createParameterDescriptions(); - faultDescriptions = createFaultDescriptions(); - isListType = mdc.isListType(); - buildAttachmentInformation(); - - //If an AxisOperation was already created for us by populateService then just use that one - //Otherwise, create it - if (axisOperation != null) { - this.axisOperation = axisOperation; - } else { - this.axisOperation = createAxisOperation(); - } - - if(this.axisOperation != null) { - try { - this.axisOperation.addParameter(new Parameter(OperationDescription.AXIS_OPERATION_PARAMETER, - this)); - } - catch(AxisFault af) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("operationDescriptionErr1")); - } - } - - // Register understood headers on axisOperation - registerMustUnderstandHeaders(); - } - - /** - * Create an AxisOperation for this Operation. Note that the ParameterDescriptions must - * be created before calling this method since, for a DOC/LIT/BARE (aka UNWRAPPED) message, the - * ParamaterDescription is used to setup the AxisMessage correctly for use in SOAP Body-based - * dispatching on incoming DOC/LIT/BARE messages. - */ - private AxisOperation createClientAxisOperation() { - AxisOperation newAxisOperation = null; - try { - if (isOneWay()) { - newAxisOperation = - AxisOperationFactory.getOperationDescription(WSDL2Constants.MEP_URI_OUT_ONLY); - } else { - newAxisOperation = - AxisOperationFactory.getOperationDescription(WSDL2Constants.MEP_URI_OUT_IN); - } - //REVIEW: There are several other MEP's, such as: OUT_ONLY, IN_OPTIONAL_OUT, OUT_IN, OUT_OPTIONAL_IN, ROBUST_OUT_ONLY, - // ROBUST_IN_ONLY - // Determine how these MEP's should be handled, if at all - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("clientAxisOprErr"),e); - } - - newAxisOperation.setName(determineOperationQName(seiMethod)); - newAxisOperation.setSoapAction(this.getAction()); - - //************************************************************************************* - //NOTE: assumption here is that all info. need to generate the actions will have to come - // from annotations (or default values) - //************************************************************************************* - - String messageExchangePattern = newAxisOperation.getMessageExchangePattern(); - String operationName = newAxisOperation.getName().getLocalPart(); - String targetNS = getEndpointInterfaceDescriptionImpl().getTargetNamespace(); - String portTypeName = getEndpointInterfaceDescriptionImpl().getPortType().getLocalPart(); - - //We don't have a name at this point, shouldn't matter if we have the MEP. - //On the client the input and output actions are reversed. - String inputName = null; - String inputAction = getOutputAction(); - - //If we still don't have an action then fall back to the Default Action Pattern. - if (inputAction == null || inputAction.length() == 0) { - inputAction = - WSDL11ActionHelper.getInputActionFromStringInformation( messageExchangePattern, - targetNS, - portTypeName, - operationName, - inputName); - } - - ArrayList inputActions = new ArrayList(); - inputActions.add(inputAction); - newAxisOperation.setWsamappingList(inputActions); - - //Map the action to the operation on the actual axisService - //TODO: Determine whether this should be done at a higher level in the - // description hierarchy - getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl(). - getAxisService().mapActionToOperation(inputAction, newAxisOperation); - - //set the OUTPUT ACTION - - //We don't have a name at this point, shouldn't matter if we have the MEP - //On the client the input and output actions are reversed. - String outputName = null; - String outputAction = getInputAction(); - - if (outputAction == null || outputAction.length() == 0) { - outputAction = - WSDL11ActionHelper.getOutputActionFromStringInformation( messageExchangePattern, - targetNS, - portTypeName, - operationName, - outputName); - } - - newAxisOperation.setOutputAction(outputAction); - - setFaultActions(newAxisOperation, operationName, targetNS, portTypeName); - - getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl(). - getAxisService().addOperation(newAxisOperation); - - return newAxisOperation; - } - - /** - * Create an AxisOperation for this Operation. Note that the ParameterDescriptions must - * be created before calling this method since, for a DOC/LIT/BARE (aka UNWRAPPED) message, the - * ParamaterDescription is used to setup the AxisMessage correctly for use in SOAP Body-based - * dispatching on incoming DOC/LIT/BARE messages. - */ - private AxisOperation createAxisOperation() { - AxisOperation newAxisOperation = null; - try { - if (isOneWay()) { - newAxisOperation = AxisOperationFactory - .getOperationDescription(WSDL2Constants.MEP_URI_IN_ONLY); - } else { - newAxisOperation = - AxisOperationFactory.getOperationDescription(WSDL2Constants.MEP_URI_IN_OUT); - } - //TODO: There are several other MEP's, such as: OUT_ONLY, IN_OPTIONAL_OUT, OUT_IN, OUT_OPTIONAL_IN, ROBUST_OUT_ONLY, - // ROBUST_IN_ONLY - // Determine how these MEP's should be handled, if at all - } catch (Exception e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("clientAxisOprErr"), e); - } - - newAxisOperation.setName(determineOperationQName(this.methodComposite)); - newAxisOperation.setSoapAction(this.getAction()); - - //************************************************************************************* - //NOTE: assumption here is that all info. need to generate the actions will have to come - // from annotations (or default values) - //************************************************************************************* - - String messageExchangePattern = newAxisOperation.getMessageExchangePattern(); - String operationName = newAxisOperation.getName().getLocalPart(); - String targetNS = getEndpointInterfaceDescriptionImpl().getTargetNamespace(); - String portTypeName = getEndpointInterfaceDescriptionImpl().getPortType().getLocalPart(); - - //We don't have a name at this point, shouldn't matter if we have the MEP - String inputName = null; - String inputAction = getInputAction(); - - //If we don't have an action then fall back to the Default Action Pattern. - if (inputAction == null || inputAction.length() == 0) { - inputAction = - WSDL11ActionHelper.getInputActionFromStringInformation(messageExchangePattern, - targetNS, - portTypeName, - operationName, - inputName); - } - - ArrayList inputActions = new ArrayList(); - inputActions.add(inputAction); - newAxisOperation.setWsamappingList(inputActions); - - //Map the action to the operation on the actual axisService - //TODO: Determine whether this should be done at a higher level in the - // description hierarchy - getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl(). - getAxisService().mapActionToOperation(inputAction, newAxisOperation); - - //set the OUTPUT ACTION - - //We don't have a name at this point, shouldn't matter if we have the MEP - String outputName = null; - String outputAction = getOutputAction(); - - //If we don't have an action then fall back to the Default Action Pattern. - if (outputAction == null || outputAction.length() == 0) { - outputAction = - WSDL11ActionHelper.getOutputActionFromStringInformation(messageExchangePattern, - targetNS, - portTypeName, - operationName, - outputName); - } - - newAxisOperation.setOutputAction(outputAction); - - //Set the FAULT ACTION - setFaultActions(newAxisOperation, operationName, targetNS, portTypeName); - - // If this is a DOC/LIT/BARE operation, then set the QName of the input AxisMessage to the - // part for the first IN or IN/OUT non-header parameter. If there are no parameters, then don't set - // anything. The AxisMessage name is used to do SOAP-body based routing of DOC/LIT/BARE - // incoming messages. - if (getSoapBindingStyle() == javax.jws.soap.SOAPBinding.Style.DOCUMENT - && getSoapBindingUse() == javax.jws.soap.SOAPBinding.Use.LITERAL - && getSoapBindingParameterStyle() == javax.jws.soap.SOAPBinding.ParameterStyle.BARE) - { - ParameterDescription[] paramDescs = getParameterDescriptions(); - if (paramDescs != null && paramDescs.length > 0) { - for (ParameterDescription paramDesc : paramDescs) { - WebParam.Mode paramMode = paramDesc.getMode(); - if (!paramDesc.isHeader() - && (paramMode == WebParam.Mode.IN || paramMode == WebParam.Mode.INOUT)) - { - // We've found the first IN or INOUT non-header parameter, so set the AxisMessage - // QName based on this parameter then break out of the loop. - AxisMessage axisMessage = - newAxisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - String elementName = paramDesc.getParameterName(); - String partNamespace = paramDesc.getTargetNamespace(); - if (log.isDebugEnabled()) { - log.debug("Setting up annotation based Doc/Lit/Bare operation: " + - newAxisOperation.getName() - + "; axisMessage: " + axisMessage + "; name: " - + elementName + "; partTNS: " + partNamespace); - } - if (axisMessage == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("createAxisOprErr1")); - } else if (DescriptionUtils.isEmpty(partNamespace)) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("createAxisOprErr2")); - } else if (DescriptionUtils.isEmpty(elementName)) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("createAxisOprErr3")); - } else { - QName partQName = new QName(partNamespace, elementName); - if(log.isDebugEnabled()) { - log.debug("Setting AxisMessage element QName for bare mapping: " + - partQName); - } - axisMessage.setElementQName(partQName); - - getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl() - .getAxisService() - .addMessageElementQNameToOperationMapping(partQName, newAxisOperation); - } - break; - } - } - } - } - return newAxisOperation; - } - - private void setFaultActions(final AxisOperation newAxisOperation, - final String operationName, - final String targetNS, - final String portTypeName) { - // Walk the fault information - FaultDescription[] faultDescs = getFaultDescriptions(); - - //Generate fault actions according to the Default Action Pattern. - if (faultDescs != null) { - for (FaultDescription faultDesc : faultDescs) { - - AxisMessage faultMessage = new AxisMessage(); - String faultName = faultDesc.getName(); - faultMessage.setName(faultName); - - String faultAction = - WSDL11ActionHelper.getFaultActionFromStringInformation( targetNS, - portTypeName, - operationName, - faultMessage.getName()); - - newAxisOperation.addFaultAction(faultDesc.getExceptionClassName(), faultAction); - newAxisOperation.setFaultMessages(faultMessage); - } - } - - //Override the fault actions based on any FaultAction annotations that are defined. - FaultAction[] faultActions = getFaultActions(); - - if (faultActions != null) { - for (FaultAction faultAction : faultActions) { - - String className = null; - - if(faultAction instanceof FaultActionAnnot - && - ((FaultActionAnnot) faultAction).classNameString() != null) { - className = ((FaultActionAnnot) faultAction).classNameString(); - } - else if(faultAction.className() != null) { - className = faultAction.className().getName(); - } - - if(className != null) { - if(log.isDebugEnabled()) { - log.debug("Looking for FaultDescription for class: " + className + - " from @FaultAction annotation"); - } - FaultDescription faultDesc = resolveFaultByExceptionName(className); - if (faultDesc != null) { - newAxisOperation.addFaultAction(className, faultAction.value()); - } - } - } - } - } - - /** - * Adds the AxisOperation corresponding to this OperationDescription to the AxisService if it - * isn't already there. It also addes the AxisOperation to any other routing mechanisms for - * that AxisService: - For Doc/Lit/Bare operations it is added to the - * MessageElementQNameToOperationMapping - * - * @param axisService - */ - void addToAxisService(final AxisService axisService) { - AxisOperation newAxisOperation = getAxisOperation(); - QName axisOpQName = newAxisOperation.getName(); - AxisOperation axisOperation = axisService.getOperation(axisOpQName); - if (axisOperation == null) { - axisService.addOperation(newAxisOperation); - // For a Doc/Lit/Bare operation, we also need to add the element mapping - } - if (getSoapBindingStyle() == javax.jws.soap.SOAPBinding.Style.DOCUMENT - && getSoapBindingUse() == javax.jws.soap.SOAPBinding.Use.LITERAL - && getSoapBindingParameterStyle() == javax.jws.soap.SOAPBinding.ParameterStyle - .BARE) { - AxisMessage axisMessage = - null; - if (axisOperation!=null) { - axisMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - } else { - axisMessage = newAxisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - } - if (axisMessage != null) { - QName elementQName = axisMessage.getElementQName(); - if (!DescriptionUtils.isEmpty(elementQName) && - axisService.getOperationByMessageElementQName(elementQName) == null) { - axisService.addMessageElementQNameToOperationMapping(elementQName, - newAxisOperation); - } - } - } - } - - void setSEIMethod(final Method method) { - if (seiMethod != null) { - throw ExceptionFactory.makeWebServiceException( - new UnsupportedOperationException(Messages.getMessage("seiMethodErr"))); - } else { - seiMethod = method; - webMethodAnnotation = (WebMethod) - getAnnotation(seiMethod, WebMethod.class); - parameterDescriptions = createParameterDescriptions(); - faultDescriptions = createFaultDescriptions(); - isListType = ConverterUtils.hasXmlListAnnotation(seiMethod.getAnnotations()); - } - // Register understood headers on axisOperation - registerMustUnderstandHeaders(); - } - - public EndpointInterfaceDescription getEndpointInterfaceDescription() { - return parentEndpointInterfaceDescription; - } - - public EndpointInterfaceDescriptionImpl getEndpointInterfaceDescriptionImpl() { - return (EndpointInterfaceDescriptionImpl)parentEndpointInterfaceDescription; - } - - public AxisOperation getAxisOperation() { - // Note that only the sync operations, and not the JAX-WS async client versions of an - // operation, will have an AxisOperation associated with it. For those async operations, - // get the AxisOperation associated with the sync method and return that. - if (axisOperation == null) { - OperationDescription opDesc = getSyncOperation(); - if (opDesc != null && opDesc != this) { - return getSyncOperation().getAxisOperation(); - } - } - - return axisOperation; - } - - public QName getName() { - return operationQName; - } - - // Java-related getters - public String getJavaMethodName() { - String returnString = null; - - if (!isDBC()) { - if (seiMethod != null) { - returnString = seiMethod.getName(); - } - } else { - if (methodComposite != null) { - returnString = methodComposite.getMethodName(); - } - } - - return returnString; - } - - public String getJavaDeclaringClassName() { - if (!isDBC() && seiMethod != null) { - Class clazz = seiMethod.getDeclaringClass(); - return clazz.getCanonicalName(); - } else if (methodComposite != null) { - return methodComposite.getDeclaringClass(); - } - return null; - } - - public String[] getJavaParameters() { - - ArrayList returnParameters = new ArrayList(); - - if (!isDBC()) { - if (seiMethod != null) { - Class[] paramaters = seiMethod.getParameterTypes(); - for (Class param : paramaters) { - returnParameters.add(param.getName()); - } - } - - } else { - if (methodComposite != null) { - - Iterator iter = - methodComposite.getParameterDescriptionCompositeList().iterator(); - while (iter.hasNext()) { - returnParameters.add(iter.next().getParameterType()); - } - } - } - - // TODO: This is different than the rest, which return null instead of an empty array - return returnParameters.toArray(new String[0]); - } - - /** - * Note this will return NULL unless the operation was built via introspection on the SEI. In - * other words, it will return null if the operation was built with WSDL. - * - * @return - */ - public Method getSEIMethod() { - return seiMethod; - } - - MethodDescriptionComposite getMethodDescriptionComposite() { - return methodComposite; - } - - private boolean isWrappedParameters() { - return getSoapBindingParameterStyle() == javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED; - } - - private ParameterDescription[] createParameterDescriptions() { - - ArrayList buildParameterList = new ArrayList(); - - if (!isDBC()) { - Class[] parameters = seiMethod.getParameterTypes(); - Type[] paramaterTypes = seiMethod.getGenericParameterTypes(); - Annotation[][] annotations = seiMethod.getParameterAnnotations(); - - for (int i = 0; i < parameters.length; i++) { - ParameterDescription paramDesc = new ParameterDescriptionImpl(i, parameters[i], - paramaterTypes[i], - annotations[i], this); - buildParameterList.add(paramDesc); - } - - } else { - ParameterDescriptionComposite pdc = null; - Iterator iter = - methodComposite.getParameterDescriptionCompositeList().iterator(); - - for (int i = 0; i < methodComposite.getParameterDescriptionCompositeList().size(); i++) - { - ParameterDescription paramDesc = - new ParameterDescriptionImpl(i, - methodComposite.getParameterDescriptionComposite( - i), - this); - buildParameterList.add(paramDesc); - } - } - - return buildParameterList.toArray(new ParameterDescription[buildParameterList.size()]); - - } - - private FaultDescription[] createFaultDescriptions() { - - ArrayList buildFaultList = new ArrayList(); - - if (!isDBC()) { - // get exceptions this method "throws" - Class[] webFaultClasses = seiMethod.getExceptionTypes(); - - for (Class wfClass : webFaultClasses) { - // according to JAXWS 3.7, the @WebFault annotation is only used for customizations, - // so we'll add all declared exceptions - WebFault wfanno = null; - for (Annotation anno : wfClass.getAnnotations()) { - if (anno.annotationType() == WebFault.class) { - wfanno = (WebFault)anno; - } - } - buildFaultList.add(new FaultDescriptionImpl(wfClass, wfanno, this)); - } - } else { - // TODO do I care about methodComposite like the paramDescription does? - //Call FaultDescriptionImpl for all non-generic exceptions...Need to check a - // a couple of things - // 1. If this is a generic exception, ignore it - // 2. If this is not a generic exception, then find it in the DBC Map - // If not found in map, then throw not found exception - //3. Pass the validated WebFault dbc and possibly the classImpl dbc to FaultDescription - //4. Possibly set AxisOperation.setFaultMessages array...or something like that - - String[] webFaultClassNames = methodComposite.getExceptions(); - - HashMap dbcMap = - getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl() - .getServiceDescriptionImpl().getDBCMap(); - - if (webFaultClassNames != null) { - for (String wfClassName : webFaultClassNames) { - // Try to find this exception class in the dbc list. If we can't find it - // then just assume that its a generic exception. - - DescriptionBuilderComposite faultDBC = dbcMap.get(wfClassName); - - if (faultDBC != null) { - // JAXWS 3.7 does not require @WebFault annotation - // We found a valid exception composite thats annotated - buildFaultList.add(new FaultDescriptionImpl(faultDBC, this)); - } - - } - } - } - - return buildFaultList.toArray(new FaultDescription[0]); - } - - // ===================================== - // ANNOTATION: WebMethod - // ===================================== - public WebMethod getAnnoWebMethod() { - if (webMethodAnnotation == null) { - if (isDBC() && methodComposite != null) { - webMethodAnnotation = methodComposite.getWebMethodAnnot(); - } else if (!isDBC() && seiMethod != null) { - webMethodAnnotation = (WebMethod) getAnnotation(seiMethod, WebMethod.class); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get WebMethod annotation"); - } - } - } - return webMethodAnnotation; - } - - static QName determineOperationQName(final Method javaMethod) { - return new QName(determineOperationName(javaMethod)); - } - - public static QName determineOperationQName(final MethodDescriptionComposite mdc) { - return new QName(determineOperationName(mdc)); - } - - private static String determineOperationName(final Method javaMethod) { - - String operationName = null; - if (javaMethod == null) { - return null; - } - - WebMethod wmAnnotation = (WebMethod) getAnnotation(javaMethod,WebMethod.class); - // Per JSR-181 MR Sec 4.2 "Annotation: javax.jws.WebMethod" pg 17, - // if @WebMethod specifies and operation name, use that. Otherwise - // default is the Java method name - if (wmAnnotation != null && !DescriptionUtils.isEmpty(wmAnnotation.operationName())) { - operationName = wmAnnotation.operationName(); - } else { - operationName = javaMethod.getName(); - } - - return operationName; - } - - //TODO: For now, we are overriding the above method only because it is static, these should - //be combined at some point - private static String determineOperationName(final MethodDescriptionComposite mdc) { - String operationName = null; - - if (mdc == null) { - return null; - } - WebMethod wmAnnotation = mdc.getWebMethodAnnot(); - if (wmAnnotation != null && !DescriptionUtils.isEmpty(wmAnnotation.operationName())) { - operationName = wmAnnotation.operationName(); - } else { - operationName = mdc.getMethodName(); - } - - return operationName; - } - - public String getOperationName() { - return getAnnoWebMethodOperationName(); - } - - public String getAnnoWebMethodOperationName() { - if (webMethodOperationName == null) { - if (!isDBC() && seiMethod != null) { - webMethodOperationName = determineOperationName(seiMethod); - } else if (methodComposite != null) { - webMethodOperationName = determineOperationName(methodComposite); - } - } - return webMethodOperationName; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.OperationDescription#getSyncOperation() - */ - public OperationDescription getSyncOperation() { - - if (syncOperationDescription != null) { - // No need to do anything; the sync operation has already been set and will be - // returned below - } else if (!isJAXWSAsyncClientMethod()) { - // The current OpDesc is not an async operation. Cache it, then return it below. - syncOperationDescription = this; - } else { - // We haven't found a sync opdesc for this operation yet, so try again. See the - // comments in the interface declaration for this method on why this might occur. - OperationDescription opDesc = null; - - String webMethodAnnoName = getOperationName(); - String javaMethodName = getJavaMethodName(); - if (webMethodAnnoName != null && webMethodAnnoName.length() > 0 && - webMethodAnnoName != javaMethodName) { - EndpointInterfaceDescription eid = getEndpointInterfaceDescription(); - if (eid != null) { - //searching for opDesc of sync operation. - OperationDescription[] ods = null; - ods = eid.getOperationForJavaMethod(webMethodAnnoName); - if (ods != null) { - for (OperationDescription od : ods) { - if (od.getJavaMethodName().equals(webMethodAnnoName) - && !od.isJAXWSAsyncClientMethod()) { - opDesc = od; - break; - } - } - } - } - } - // Note that opDesc might still be null - syncOperationDescription = opDesc; - } - return syncOperationDescription; - } - - public String getAction() { - return getAnnoWebMethodAction(); - } - - public String getAnnoWebMethodAction() { - if (webMethodAction == null) { - if (getAnnoWebMethod() != null && - !DescriptionUtils.isEmpty(getAnnoWebMethod().action())) { - webMethodAction = getAnnoWebMethod().action(); - } else { - webMethodAction = WebMethod_Action_DEFAULT; - } - } - return webMethodAction; - } - - public boolean isExcluded() { - return getAnnoWebMethodExclude(); - } - - public boolean getAnnoWebMethodExclude() { - if (webMethodExclude == null) { - // TODO: Validation: if this attribute specified, no other elements allowed per JSR-181 MR Sec 4.2, pg 17 - // TODO: Validation: This element is not allowed on endpoint interfaces - // Unlike the elements with a String value, if the annotation is present, exclude will always - // return a usable value since it will default to FALSE if the element is not present. - if (getAnnoWebMethod() != null) { - webMethodExclude = new Boolean(getAnnoWebMethod().exclude()); - } else { - webMethodExclude = WebMethod_Exclude_DEFAULT; - } - } - - return webMethodExclude.booleanValue(); - } - - // ========================================== - // ANNOTATION: RequestWrapper - // ========================================== - public RequestWrapper getAnnoRequestWrapper() { - if (requestWrapperAnnotation == null) { - if (!isDBC() && seiMethod != null) { - requestWrapperAnnotation = (RequestWrapper) - getAnnotation(seiMethod,RequestWrapper.class); - } else if (isDBC() && methodComposite != null) { - requestWrapperAnnotation = methodComposite.getRequestWrapperAnnot(); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get RequestWrapper annotation"); - } - } - } - return requestWrapperAnnotation; - } - - public String getRequestWrapperLocalName() { - return getAnnoRequestWrapperLocalName(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoRequestWrapperLocalName() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (requestWrapperLocalName == null) { - if (getAnnoRequestWrapper() != null - && !DescriptionUtils.isEmpty(getAnnoRequestWrapper().localName())) { - requestWrapperLocalName = getAnnoRequestWrapper().localName(); - } else { - // The default value of localName is the value of operationQName as - // defined in the WebMethod annotation. [JAX-WS Sec. 7.3, p. 80] - requestWrapperLocalName = getAnnoWebMethodOperationName(); - } - } - return requestWrapperLocalName; - } - - public String getRequestWrapperTargetNamespace() { - return getAnnoRequestWrapperTargetNamespace(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoRequestWrapperTargetNamespace() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (requestWrapperTargetNamespace == null) { - if (getAnnoRequestWrapper() != null && - !DescriptionUtils.isEmpty(getAnnoRequestWrapper().targetNamespace())) { - requestWrapperTargetNamespace = getAnnoRequestWrapper().targetNamespace(); - } else { - // The default value for targetNamespace is the target namespace of the SEI. [JAX-WS Sec 7.3, p. 80] - requestWrapperTargetNamespace = - getEndpointInterfaceDescription().getTargetNamespace(); - } - } - return requestWrapperTargetNamespace; - } - - public String getRequestWrapperClassName() { - return getAnnoRequestWrapperClassName(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoRequestWrapperClassName() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (requestWrapperClassName == null) { - if (getAnnoRequestWrapper() != null && - !DescriptionUtils.isEmpty(getAnnoRequestWrapper().className())) { - requestWrapperClassName = getAnnoRequestWrapper().className(); - } else { - // There is no default for the RequestWrapper class name. - // In such cases the programming layer (JAXWS) may use a programming spec specific - // mechanism to find the class, build the class, or operate without the class. - requestWrapperClassName = null; - } - } - return requestWrapperClassName; - } - - // =========================================== - // ANNOTATION: ResponseWrapper - // =========================================== - public ResponseWrapper getAnnoResponseWrapper() { - if (responseWrapperAnnotation == null) { - if (!isDBC() && seiMethod != null) { - responseWrapperAnnotation = (ResponseWrapper) - getAnnotation(seiMethod,ResponseWrapper.class); - } else if (isDBC() && methodComposite != null) { - responseWrapperAnnotation = methodComposite.getResponseWrapperAnnot(); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get ResponseWrapper annotation"); - } - } - } - return responseWrapperAnnotation; - } - - public String getResponseWrapperLocalName() { - return getAnnoResponseWrapperLocalName(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoResponseWrapperLocalName() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (responseWrapperLocalName == null) { - if (getAnnoResponseWrapper() != null && - !DescriptionUtils.isEmpty(getAnnoResponseWrapper().localName())) { - responseWrapperLocalName = getAnnoResponseWrapper().localName(); - } else { - // The default value of localName is the value of operationQName as - // defined in the WebMethod annotation appended with "Response". [JAX-WS Sec. 7.4, p. 81] - responseWrapperLocalName = getAnnoWebMethodOperationName() + "Response"; - } - } - return responseWrapperLocalName; - } - - public String getResponseWrapperTargetNamespace() { - return getAnnoResponseWrapperTargetNamespace(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoResponseWrapperTargetNamespace() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (responseWrapperTargetNamespace == null) { - if (getAnnoResponseWrapper() != null && - !DescriptionUtils.isEmpty(getAnnoResponseWrapper().targetNamespace())) { - responseWrapperTargetNamespace = getAnnoResponseWrapper().targetNamespace(); - } else { - // The default value for targetNamespace is the target namespace of the SEI. [JAX-WS Sec 7.3, p. 80] - responseWrapperTargetNamespace = - getEndpointInterfaceDescription().getTargetNamespace(); - } - } - return responseWrapperTargetNamespace; - } - - public String getResponseWrapperClassName() { - return getAnnoResponseWrapperClassName(); - } - - /** - * For wrapped parameter style (based on the annotation and the WSDL), returns the wrapper - * value. For non-wrapped (i.e. bare) parameter style, returns null. - * - * @return - */ - public String getAnnoResponseWrapperClassName() { - if (!isWrappedParameters()) { - // A wrapper is only meaningful for wrapped parameters - return null; - } - if (responseWrapperClassName == null) { - if (getAnnoResponseWrapper() != null && - !DescriptionUtils.isEmpty(getAnnoResponseWrapper().className())) { - responseWrapperClassName = getAnnoResponseWrapper().className(); - } else { - // There is no default for the ResponseWrapper class name. - // In such cases the programming layer (JAXWS) may use a programming spec specific - // mechanism to find the class, build the class, or operate without the class. - responseWrapperClassName = null; - } - } - return responseWrapperClassName; - } - - // =========================================== - // ANNOTATION: WebFault - // =========================================== - - /* - * TODO some of the WebFault stuff should be moved to FaultDescription - */ - - /* - * TODO: this will need revisited. The problem is that a WebFault is not mapped 1:1 to an - * OperationDescription. We should do a better job caching the information. For now, I'm - * following the getWebParam() pattern. - * - * This is gonna get complicated. One other thing to consider is that a method (opdesc) may declare - * several types of exceptions it throws - * - */ - - public FaultDescription[] getFaultDescriptions() { - return faultDescriptions; - } - - public FaultDescription resolveFaultByExceptionName(final String exceptionClassName) { - if (faultDescriptions != null) { - for (FaultDescription fd : faultDescriptions) { - if (exceptionClassName.equals(fd.getExceptionClassName())) { - return fd; - } - } - } - return null; - } - - // =========================================== - // ANNOTATION: WebParam - // =========================================== - // Note that this annotation is handled by the ParameterDescripton. - // Methods are provided on OperationDescription as convenience methods. - public ParameterDescription[] getParameterDescriptions() { - return parameterDescriptions; - } - - public ParameterDescription getParameterDescription(final String parameterName) { - // TODO: Validation: For BARE paramaterUse, only a single IN our INOUT paramater and a single output (either return or OUT or INOUT) is allowed - // Per JSR-224, Sec 3.6.2.2, pg 37 - ParameterDescription matchingParamDesc = null; - if (parameterName != null && !parameterName.equals("")) { - for (ParameterDescription paramDesc : parameterDescriptions) { - if (parameterName.equals(paramDesc.getParameterName())) { - matchingParamDesc = paramDesc; - break; - } - } - } - return matchingParamDesc; - } - - public ParameterDescription getParameterDescription(final int parameterNumber) { - return parameterDescriptions[parameterNumber]; - } - - public String[] getParamNames() { - return getAnnoWebParamNames(); - } - - public String[] getAnnoWebParamNames() { - if (webParamNames == null) { - ArrayList buildNames = new ArrayList(); - ParameterDescription[] paramDescs = getParameterDescriptions(); - for (ParameterDescription currentParamDesc : paramDescs) { - buildNames.add(currentParamDesc.getParameterName()); - } - webParamNames = buildNames.toArray(new String[0]); - } - return webParamNames; - } - - public String[] getAnnoWebParamTargetNamespaces() { - if (webParamTargetNamespace == null) { - ArrayList buildTargetNS = new ArrayList(); - ParameterDescription[] paramDescs = getParameterDescriptions(); - for (ParameterDescription currentParamDesc : paramDescs) { - buildTargetNS.add(currentParamDesc.getTargetNamespace()); - } - webParamTargetNamespace = buildTargetNS.toArray(new String[0]); - } - return webParamTargetNamespace; - } - - public String getAnnoWebParamTargetNamespace(final String name) { - String returnTargetNS = null; - ParameterDescription paramDesc = getParameterDescription(name); - if (paramDesc != null) { - returnTargetNS = paramDesc.getTargetNamespace(); - } - return returnTargetNS; - } - - - public Mode[] getAnnoWebParamModes() { - if (webParamMode == null) { - ArrayList buildModes = new ArrayList(); - ParameterDescription[] paramDescs = getParameterDescriptions(); - for (ParameterDescription currentParamDesc : paramDescs) { - buildModes.add(((ParameterDescriptionJava)currentParamDesc).getAnnoWebParamMode()); - } - webParamMode = buildModes.toArray(new Mode[0]); - } - return webParamMode; - } - - public boolean isAnnoWebParamHeader(final String name) { - ParameterDescription paramDesc = getParameterDescription(name); - if (paramDesc != null) { - return paramDesc.isHeader(); - } - return false; - } - - // =========================================== - // ANNOTATION: WebResult - // =========================================== - public WebResult getAnnoWebResult() { - if (webResultAnnotation == null) { - if (!isDBC() && seiMethod != null) { - webResultAnnotation = (WebResult) - getAnnotation(seiMethod,WebResult.class); - } else if (methodComposite != null) { - webResultAnnotation = methodComposite.getWebResultAnnot(); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get WebResult annotation"); - } - } - } - return webResultAnnotation; - } - - public boolean isWebResultAnnotationSpecified() { - return getAnnoWebResult() != null; - } - - public boolean isOperationReturningResult() { - boolean isResult = false; - if (!isAnnoOneWay()) { - if (!isDBC() && seiMethod != null) { - if (seiMethod.getReturnType() != Void.TYPE) { - isResult = true; - } - } else if (methodComposite != null) { - if (!DescriptionUtils.isEmpty(methodComposite.getReturnType()) && - !methodComposite.getReturnType().equals("void")) { - isResult = true; - } - } else { - if (log.isDebugEnabled()) { - log.debug("No class to determine if result is returned"); - } - } - } - return isResult; - } - - public String getResultName() { - return getAnnoWebResultName(); - } - - public String getAnnoWebResultName() { - if (!isOperationReturningResult()) { - return null; - } - if (webResultName == null) { - if (getAnnoWebResult() != null && !DescriptionUtils.isEmpty(getAnnoWebResult().name())) - { - webResultName = getAnnoWebResult().name(); - } else if (getAnnoSoapBindingStyle() == SOAPBinding.Style.DOCUMENT - && getAnnoSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.BARE) { - // Default for operation style DOCUMENT and paramater style BARE per JSR 181 MR Sec 4.5.1, pg 23 - webResultName = getAnnoWebMethodOperationName() + "Response"; - - } else { - // Defeault value is "return" per JSR-181 MR Sec. 4.5.1, p. 22 - webResultName = "return"; - } - } - return webResultName; - } - - public String getResultPartName() { - return getAnnoWebResultPartName(); - } - - public String getAnnoWebResultPartName() { - if (!isOperationReturningResult()) { - return null; - } - if (webResultPartName == null) { - if (getAnnoWebResult() != null && - !DescriptionUtils.isEmpty(getAnnoWebResult().partName())) { - webResultPartName = getAnnoWebResult().partName(); - } else { - // Default is the WebResult.name per JSR-181 MR Sec 4.5.1, pg 23 - webResultPartName = getAnnoWebResultName(); - } - } - return webResultPartName; - } - - public String getResultTargetNamespace() { - return getAnnoWebResultTargetNamespace(); - } - - public String getAnnoWebResultTargetNamespace() { - if (!isOperationReturningResult()) { - return null; - } - if (webResultTargetNamespace == null) { - if (getAnnoWebResult() != null && - !DescriptionUtils.isEmpty(getAnnoWebResult().targetNamespace())) { - webResultTargetNamespace = getAnnoWebResult().targetNamespace(); - } else if (getAnnoSoapBindingStyle() == SOAPBinding.Style.DOCUMENT - && getAnnoSoapBindingParameterStyle() == SOAPBinding.ParameterStyle.WRAPPED - && !getAnnoWebResultHeader()) { - // Default for operation style DOCUMENT and paramater style WRAPPED and the return value - // does not map to a header per JSR-181 MR Sec 4.5.1, pg 23-24 - webResultTargetNamespace = WebResult_TargetNamespace_DEFAULT; - } else { - // Default is the namespace from the WebService per JSR-181 MR Sec 4.5.1, pg 23-24 - webResultTargetNamespace = - ((EndpointDescriptionJava)getEndpointInterfaceDescription() - .getEndpointDescription()).getAnnoWebServiceTargetNamespace(); - } - - } - return webResultTargetNamespace; - } - - public boolean isResultHeader() { - return getAnnoWebResultHeader(); - } - - public boolean getAnnoWebResultHeader() { - if (!isOperationReturningResult()) { - return false; - } - if (webResultHeader == null) { - if (getAnnoWebResult() != null) { - // Unlike the elements with a String value, if the annotation is present, exclude will always - // return a usable value since it will default to FALSE if the element is not present. - webResultHeader = new Boolean(getAnnoWebResult().header()); - } else { - webResultHeader = WebResult_Header_DEFAULT; - } - } - return webResultHeader.booleanValue(); - } - - // =========================================== - // ANNOTATION: SOAPBinding - // =========================================== - public SOAPBinding getAnnoSoapBinding() { - // TODO: VALIDATION: Only style of DOCUMENT allowed on Method annotation; remember to check the Type's style setting also - // JSR-181 Sec 4.7 p. 28 - if (soapBindingAnnotation == null) { - if (!isDBC() && seiMethod != null) { - soapBindingAnnotation = (SOAPBinding) - getAnnotation(seiMethod,SOAPBinding.class); - } else if (isDBC() && methodComposite != null) { - soapBindingAnnotation = methodComposite.getSoapBindingAnnot(); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get SOAP Binding annotation"); - } - } - } - return soapBindingAnnotation; - } - - public javax.jws.soap.SOAPBinding.Style getSoapBindingStyle() { - return getAnnoSoapBindingStyle(); - } - - public javax.jws.soap.SOAPBinding.Style getAnnoSoapBindingStyle() { - if (soapBindingStyle == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().style() != null) { - soapBindingStyle = getAnnoSoapBinding().style(); - } else { - // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value. - soapBindingStyle = getEndpointInterfaceDescription().getSoapBindingStyle(); - } - } - return soapBindingStyle; - } - - public javax.jws.soap.SOAPBinding.Use getSoapBindingUse() { - return getAnnoSoapBindingUse(); - } - - public javax.jws.soap.SOAPBinding.Use getAnnoSoapBindingUse() { - if (soapBindingUse == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().use() != null) { - soapBindingUse = getAnnoSoapBinding().use(); - } else { - // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value. - soapBindingUse = getEndpointInterfaceDescription().getSoapBindingUse(); - } - } - return soapBindingUse; - } - - public javax.jws.soap.SOAPBinding.ParameterStyle getSoapBindingParameterStyle() { - return getAnnoSoapBindingParameterStyle(); - } - - public javax.jws.soap.SOAPBinding.ParameterStyle getAnnoSoapBindingParameterStyle() { - if (soapBindingParameterStyle == null) { - if (getAnnoSoapBinding() != null && getAnnoSoapBinding().parameterStyle() != null) { - soapBindingParameterStyle = getAnnoSoapBinding().parameterStyle(); - } else { - // Per JSR-181 MR Sec 4.7, pg 28: if not specified, use the Type value. - soapBindingParameterStyle = - getEndpointInterfaceDescription().getSoapBindingParameterStyle(); - } - } - return soapBindingParameterStyle; - } - - // =========================================== - // ANNOTATION: Action - // =========================================== - public Action getAnnoAction() { - if (actionAnnotation == null) { - if (!isDBC() && seiMethod != null) { - actionAnnotation = (Action) getAnnotation(seiMethod, Action.class); - } - else if (methodComposite != null) { - actionAnnotation = methodComposite.getActionAnnot(); - } - else { - if (log.isDebugEnabled()) { - log.debug("Unable to get Action annotation."); - } - } - } - - if (log.isDebugEnabled()) { - log.debug("getAnnoAction: " + actionAnnotation); - } - - return actionAnnotation; - } - - private String getInputAction() { - String inputAction = null; - Action action = getAnnoAction(); - - if (action != null) { - inputAction = action.input(); - } - - if (log.isDebugEnabled()) { - log.debug("getInputAction: " + inputAction); - } - - return inputAction; - } - - private String getOutputAction() { - String outputAction = null; - Action action = getAnnoAction(); - - if (action != null) { - outputAction = action.output(); - } - - if (log.isDebugEnabled()) { - log.debug("getOutputAction: " + outputAction); - } - - return outputAction; - } - - private FaultAction[] getFaultActions() { - FaultAction[] faultActions = null; - Action action = getAnnoAction(); - - if (action != null) { - faultActions = action.fault(); - } - - if (log.isDebugEnabled()) { - log.debug("getFaultActions: " + faultActions); - } - - return faultActions; - } - - // =========================================== - // ANNOTATION: OneWay - // =========================================== - public Oneway getAnnoOneway() { - if (onewayAnnotation == null) { - // Get the onew-way annotation from either the method composite (server-side) - // or from the SEI method (client-side). - if (isDBC() && methodComposite != null) { - if (methodComposite.isOneWay()) { - onewayAnnotation = OneWayAnnot.createOneWayAnnotImpl(); - } - } else if (!isDBC() && seiMethod != null) { - onewayAnnotation = (Oneway) getAnnotation(seiMethod,Oneway.class); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get OneWay annotation"); - } - } - } - return onewayAnnotation; - } - - public boolean isOneWay() { - return isAnnoOneWay(); - } - - public boolean isAnnoOneWay() { - if (onewayIsOneway == null) { - if (getAnnoOneway() != null) { - // The presence of the annotation indicates the method is oneway - onewayIsOneway = new Boolean(true); - } else { - // If the annotation is not present, the default is this is NOT a One Way method - onewayIsOneway = new Boolean(false); - } - } - return onewayIsOneway.booleanValue(); - } - - private boolean isDBC() { - if (methodComposite != null) { - return true; - } else { - return false; - } - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.OperationDescription#getResultType() - */ - public Class getResultType() { - Class returnClass = null; - if (!isDBC() && getSEIMethod() != null) { - Method seiMethod = this.getSEIMethod(); - returnClass = seiMethod.getReturnType(); - } else if (methodComposite != null) { - returnClass = methodComposite.getReturnTypeClass(); - } else { - if (log.isDebugEnabled()) { - log.debug("Unable to get result type from null class"); - } - } - return returnClass; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.OperationDescription#getResultActualType() - */ - public Class getResultActualType() { - if(resultActualTypeClazz == null) { - resultActualTypeClazz = findResultActualType(); - } - return resultActualTypeClazz; - } - - public Class findResultActualType() { - // TODO: Fix this! it isn't doing the right thing for DBC as noted below with FIXME comments - // This is used to marshall the rsp on the service (dbc) and demarshall on the client (reflection) - // But we shouldn't get an async OpDesc on the service since getDispatchableOperation(QN) removes them. - - Class returnType = getResultType(); - if (returnType == null) { - return null; - } - if (isJAXWSAsyncClientMethod()) { - //pooling implementation - if (Response.class == returnType) { - if (!isDBC()) { - Type type = seiMethod.getGenericReturnType(); - ParameterizedType pType = (ParameterizedType)type; - Type aType = pType.getActualTypeArguments()[0]; - if (aType != null && ParameterizedType.class.isInstance(aType)) { - return (Class)((ParameterizedType)aType).getRawType(); - } - return (Class)aType; - } else { - // FIXME: This doesn't work for DBC. That's OK for now because DBC isn't used on the client side - // yet; the client is all Java Reflection. On the Service side, the Async methods are not used. - // This needs to return T for Response, or List for Response>> - return returnType; - } - } - //Callback Implementation - else { - // FIXME: This doesn't work for DBC. That's OK for now because DBC isn't used on the client side - // yet; the client is all Java Reflection. On the Service side, the Async methods are not used. - // This needs to find and return T for AsyncHandler, or List for AsyncHandler>> - Type[] type = getGenericParameterTypes(); - Class parameters[] = getParameterTypes(); - int i = 0; - for (Class param : parameters) { - if (AsyncHandler.class.isAssignableFrom(param)) { - ParameterizedType pType = (ParameterizedType)type[i]; - Type aType = pType.getActualTypeArguments()[0]; - if (aType != null && ParameterizedType.class.isInstance(aType)) { - return (Class)((ParameterizedType)aType).getRawType(); - } - return (Class)aType; - } - i++; - } - } - } - - return returnType; - } - - - private Type[] getGenericParameterTypes() { - if (isDBC()) { - // FIXME: This doesn't work for DBC. That's OK for now because DBC isn't used on the client side - // yet; the client is all Java Reflection. On the Service side, the Async methods are not used. - // And this method is only used to parse out the JAX-WS Async parameter types to find - // AsyncHandler. The problem with the code that was removed is that a Type can not be - // instantiated, so we can't new up a Type inside the PDC. - throw ExceptionFactory.makeWebServiceException(new UnsupportedOperationException(Messages.getMessage("genParamTypesErr"))); -// Type [] type = new Type[parameterDescriptions.length]; -// for (int i=0; i < parameterDescriptions.length; i++){ -// type[i] = ((ParameterDescriptionImpl) parameterDescriptions[i]).getParameterActualGenericType(); -// } -// return type; - } else { - Type [] type = seiMethod.getGenericParameterTypes(); - return type; - } - } - - private Class[] getParameterTypes() { - if (isDBC()) { - Class [] parameters = new Class[parameterDescriptions.length]; - for (int i = 0; i < parameterDescriptions.length; i++) { - parameters[i] = parameterDescriptions[i].getParameterType(); - } - return parameters; - } else { - Class [] parameters = seiMethod.getParameterTypes(); - return parameters; - } - } - - /* - * (non-Javadoc) - * @see org.apache.axis2.jaxws.description.OperationDescription#isJAXWSAsyncClientMethod() - */ - public boolean isJAXWSAsyncClientMethod() { - boolean answer = false; - String methodName = null; - String returnTypeName = null; - if (isDBC()) { - methodName = getMethodDescriptionComposite().getMethodName(); - returnTypeName = getMethodDescriptionComposite().getReturnType(); - } else { - Method method = this.getSEIMethod(); - if (method != null) { - methodName = method.getName(); - returnTypeName = method.getReturnType().getName(); - } - } - if (methodName != null && returnTypeName != null) { - answer = (returnTypeName.contains(Response.class.getName()) || - returnTypeName.contains(Future.class.getName())); - } - if (log.isDebugEnabled()) { - log.debug("Method = " + methodName); - log.debug("Return Type = " + returnTypeName); - log.debug("Is client async = " + answer); - } - return answer; - } - - /** - * Return the Service Implementation method for this operation IFF it has been set by a previous - * call to getMethodFromServiceImpl(Class serviceImplClass). Otherwise a null is returned. - * - * @return - */ - private Method getMethodFromServiceImpl() { - return serviceImplMethod; - - } - - public Method getMethodFromServiceImpl(final Class serviceImpl) { - - // TODO: This doesn't support overloaded methods in the service impl This is - // DIFFERENT than overloaded WSDL operations (which aren't supported). We - // MUST support overloaded service impl methods as long as they have different - // wsdl operation names. For example: - // ServiceImple Class SEI Class - // @WebMethod.name = Foo1 - // void foo() void foo() - // @WebMethod.name = Foo2 - // void foo(int) void foo(int) - // @WebMethod.name = Foo3 - // void foo(String) void foo(String) - // - // There will be two OpDescs, Foo1 and Foo2; the incoming wsdl operation will correctly identify - // which OpDesc. However, to return the correct service impl method, we need to compare the - // signatures, not just the method names. - if (!serviceImplMethodFound) { - Method[] methods = serviceImpl.getMethods(); - String opDescMethodName = getJavaMethodName(); - ParameterDescription[] paramDesc = getParameterDescriptions(); - // TODO: As noted above, a full signature is necessary, not just number of params - int numberOfParams = 0; - if (paramDesc != null) { - numberOfParams = paramDesc.length; - } - - // Loop through all the methods on the service impl and find the method that maps - // to this OperationDescripton - for (Method checkMethod : methods) { - if (checkMethod.getName().equals(opDescMethodName)) { - Class[] methodParams = checkMethod.getParameterTypes(); - // TODO: As noted above, a full signature is necessary, not just number of params - if (methodParams.length == numberOfParams) { - if (paramTypesMatch(paramDesc, methodParams)) { - serviceImplMethod = checkMethod; - break; - } - } - } - } - serviceImplMethodFound = true; - } - return serviceImplMethod; - } - - /** - * This method will compare the types of the parameters in a ParameterDescription - * vs. the type of the arguments in the parameters of a Method. - * - * @param paramDescs - ParameterDescription[] - * @param methodParams - Class[] - * @return - boolean - */ - private boolean paramTypesMatch(final ParameterDescription[] paramDescs, final Class[] - methodParams) { - for (int i = 0; i < paramDescs.length; i++) { - String mParamType = methodParams[i].getName(); - String pdType = getPDType(paramDescs[i]); - if (mParamType == null || !mParamType.equals(pdType)) { - return false; - } - } - return true; - } - - /** - * This will get a String representing the parameter class of a - * ParameterDescription. - * - * @param pd - ParameterDescrition - * @return - String - */ - private String getPDType(final ParameterDescription pd) { - String type = null; - if (pd.getParameterType() != null) { - type = pd.getParameterType().getName(); - } else if (pd.getParameterActualType() != null) { - type = pd.getParameterActualType().getName(); - } - return type; - } - - public OperationRuntimeDescription getOperationRuntimeDesc(final String name) { - // TODO Add toString support - return runtimeDescMap.get(name); - } - - public void setOperationRuntimeDesc(final OperationRuntimeDescription ord) { - // TODO Add toString support - runtimeDescMap.put(ord.getKey(), ord); - } - - public boolean isListType() { - return isListType; - } - - /** - * This method will return the namespace for the BindingInput that this operation - * specifies. It will first look for a namespace on the WSDL Binding object and then - * default to the web service's target namespace. - */ - public String getBindingInputNamespace() { - String tns = null; - Binding binding = - this.getEndpointInterfaceDescriptionImpl() - .getEndpointDescriptionImpl() - .getWSDLBinding(); - if (binding != null) { - if (log.isDebugEnabled()) { - log.debug("Found WSDL binding"); - } - // this call does not support overloaded WSDL operations as it - // does not specify the name of the input and output messages - BindingOperation bindingOp = - binding.getBindingOperation(getOperationName(), null, null); - if (bindingOp != null && bindingOp.getBindingInput() != null) { - if (log.isDebugEnabled()) { - log.debug("Found WSDL binding operation and input"); - } - tns = getBindingNamespace(bindingOp.getBindingInput()); - if (tns != null && log.isDebugEnabled()) { - log.debug("For operation: " + bindingOp.getName() - + " returning the following namespace for input message" - + " from WSDL: " + tns); - } - } - } - if (tns == null) { - tns = getEndpointInterfaceDescription().getTargetNamespace(); - if (log.isDebugEnabled()) { - log.debug("For binding input returning @WebService.targetNamespace: " + tns); - } - } - return tns; - } - - /** - * This method will return the namespace for the BindingOutput that this operation - * specifies. It will first look for a namespace on the WSDL Binding object and then - * default to the web service's target namespace. - */ - public String getBindingOutputNamespace() { - String tns = null; - Binding binding = - this.getEndpointInterfaceDescriptionImpl() - .getEndpointDescriptionImpl() - .getWSDLBinding(); - if (binding != null) { - if (log.isDebugEnabled()) { - log.debug("Found WSDL binding"); - } - // this call does not support overloaded WSDL operations as it - // does not specify the name of the input and output messages - BindingOperation bindingOp = - binding.getBindingOperation(getOperationName(), null, null); - if (bindingOp != null && bindingOp.getBindingOutput() != null) { - if (log.isDebugEnabled()) { - log.debug("Found WSDL binding operation and output"); - } - tns = getBindingNamespace(bindingOp.getBindingOutput()); - if (tns != null && log.isDebugEnabled()) { - log.debug("For operation: " + bindingOp.getName() - + " returning the following namespace for output message" - + " from WSDL: " + tns); - } - } - } - if (tns == null) { - tns = getEndpointInterfaceDescription().getTargetNamespace(); - if (log.isDebugEnabled()) { - log.debug("For binding output returning @WebService.targetNamespace: " + tns); - } - } - return tns; - } - - - /** - * This method will retrieve the namespace that is specified by the BindingInput or - * BindingOutput object. - */ - private String getBindingNamespace(final AttributeExtensible opInfo) { - if (opInfo instanceof BindingInput) { - BindingInput input = (BindingInput) opInfo; - return DescriptionUtils.getNamespaceFromSOAPElement(input.getExtensibilityElements()); - } else if (opInfo instanceof BindingOutput) { - BindingOutput output = (BindingOutput) opInfo; - return DescriptionUtils.getNamespaceFromSOAPElement(output.getExtensibilityElements()); - } - return null; - } - - public AttachmentDescription getResultAttachmentDescription() { - String partName = this.getResultPartName(); - if (partName != null) { - if (log.isDebugEnabled()) { - log.debug("Returning result AttachmentDescription for partName: " + partName); - } - return partAttachmentMap.get(partName); - } - if (log.isDebugEnabled()) { - log.debug("Did not find result AttachmentDescription for partName: " + partName); - } - return null; - } - - /** - * This method will drive the building of AttachmentDescription objects for the - * operation input/output messages in the WSDL. - * - */ - private void buildAttachmentInformation() { - if (log.isDebugEnabled()) { - log.debug("Start buildAttachmentInformation"); - } - // Only building attachment info if we find a full WSDL - if (this.getEndpointInterfaceDescriptionImpl() - .getEndpointDescriptionImpl() - .isWSDLFullySpecified()) { - if (log.isDebugEnabled()) { - log.debug("A full WSDL is available. Query the WSDL binding for the " + - "AttachmentDescription information."); - } - DescriptionUtils.getAttachmentFromBinding(this, - this.getEndpointInterfaceDescriptionImpl() - .getEndpointDescriptionImpl() - .getWSDLBinding()); - } else { - if (log.isDebugEnabled()) { - log.debug("The WSDL is not available. Looking for @WebService wsdlLocation."); - } - - // Try getting a WSDL - String wsdlLocation = this.getEndpointInterfaceDescriptionImpl(). - getEndpointDescriptionImpl(). - getAnnoWebServiceWSDLLocation(); - - if (wsdlLocation == null || wsdlLocation.length() == 0) { - if (log.isDebugEnabled()) { - log.debug("@WebService wsdlLocation is not specified. " + - "Processing continues without AttachmentDescription information"); - } - } else { - if (log.isDebugEnabled()) { - log.debug("@WebService wsdlLocation is " + wsdlLocation); - } - - Definition def = null; - WSDL4JWrapper wsdl4j = null; - try { - File file = new File(wsdlLocation); - URL url = file.toURL(); - wsdl4j = new WSDL4JWrapper(url, true, 2); // In this context, limit the wsdl memory - def = wsdl4j.getDefinition(); - } catch (Throwable t) { - if (log.isDebugEnabled()) { - log.debug("Error occurred while loading WSDL. " + - "Procesing continues without AttachmentDescription " + - "information. " + t); - } - } - if (def != null) { - // Set the WSDL on the server - this.getEndpointInterfaceDescriptionImpl().getEndpointDescriptionImpl(). - getServiceDescriptionImpl().setWsdlWrapper(wsdl4j); - if (log.isDebugEnabled()) { - log.debug("WSDL Definition is loaded. Get the WSDL Binding."); - } - - Binding binding = this.getEndpointInterfaceDescriptionImpl(). - getEndpointDescriptionImpl().getWSDLBinding(); - - if (binding == null) { - if (log.isDebugEnabled()) { - log.debug("WSDL Binding was not found for serviceName=" + - this.getEndpointInterfaceDescription(). - getEndpointDescription().getServiceQName() + - " and portName=" + - this.getEndpointInterfaceDescription(). - getEndpointDescription().getPortQName()); - } - } else { - if (log.isDebugEnabled()) { - log.debug("Query Binding for AttachmentDescription Information"); - } - DescriptionUtils.getAttachmentFromBinding(this, binding); - } - } - } - - } - if (log.isDebugEnabled()) { - log.debug("End buildAttachmentInformation"); - } - } - - /** - * This will return an AttachmentDescription based on a part name. - */ - public AttachmentDescription getPartAttachmentDescription(final String partName) { - return partAttachmentMap.get(partName); - } - - public void addPartAttachmentDescription(final String partName, final AttachmentDescription attachmentDesc) { - partAttachmentMap.put(partName, attachmentDesc); - } - - public boolean hasRequestSwaRefAttachments() { - return hasRequestSwaRefAttachments; - } - - public void setHasRequestSwaRefAttachments(final boolean b) { - hasRequestSwaRefAttachments = b; - } - - public boolean hasResponseSwaRefAttachments() { - return hasResponseSwaRefAttachments; - } - - public void setHasResponseSwaRefAttachments(final boolean b) { - hasResponseSwaRefAttachments = b; - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - try { - string.append(super.toString()); - string.append(newline); - string.append("Name: " + getName()); - string.append(sameline); - string.append("Operation Name: " + getOperationName()); - string.append(sameline); - string.append("Action: " + getAction()); - // - string.append(newline); - string.append("Operation excluded: " + (isExcluded() == true)); - string.append(sameline); - string.append("Is oneway: " + (isOneWay() == true)); - string.append(sameline); - string.append("Is returning result: " + (isOperationReturningResult() == true)); - string.append(sameline); - string.append("Is result header: " + (isResultHeader() == true)); - string.append(sameline); - string.append("Is JAXWS Client Async method: " + (isJAXWSAsyncClientMethod() == true)); - // - string.append(newline); - string.append("SOAP Style: " + getSoapBindingStyle()); - string.append(sameline); - string.append("SOAP Use: " + getSoapBindingUse()); - string.append(sameline); - string.append("SOAP Paramater Style: " + getSoapBindingParameterStyle()); - // - string.append(newline); - string.append("Result name: " + getResultName()); - string.append(sameline); - string.append("Result part name: " + getResultPartName()); - string.append(sameline); - string.append("Result type: " + getResultType()); - string.append(sameline); - string.append("Result actual type: " + getResultActualType()); - if (getResultAttachmentDescription() != null) { - string.append(newline); - string.append(getResultAttachmentDescription().toString()); - } - // - string.append(newline); - string.append("Request Wrapper class: " + getRequestWrapperClassName()); - string.append(sameline); - string.append("Response Wrapper class: " + getResponseWrapperClassName()); - // - string.append(newline); - string.append("Java declaring class name: " + getJavaDeclaringClassName()); - string.append(newline); - string.append("Java method name: " + getJavaMethodName()); - string.append(newline); - string.append("Java paramaters: " + getJavaParameters()); - string.append(newline); - string.append("Service Implementation method: " + getMethodFromServiceImpl()); - string.append(newline); - string.append("Axis Operation: " + getAxisOperation()); - - string.append(newline); - ParameterDescription[] paramDescs = getParameterDescriptions(); - if (paramDescs != null && paramDescs.length > 0) { - string.append("Number of Parameter Descriptions: " + paramDescs.length); - for (ParameterDescription paramDesc : paramDescs) { - string.append(newline); - string.append("Parameter Description: " + paramDesc.toString()); - } - } else { - string.append("No Paramater Descriptions"); - } - - string.append(newline); - FaultDescription[] faultDescs = getFaultDescriptions(); - if (faultDescs != null && faultDescs.length > 0) { - string.append("Number of Fault Descriptions: " + faultDescs.length); - for (FaultDescription faultDesc : faultDescs) { - string.append(newline); - string.append("Fault Description: " + faultDesc.toString()); - } - } else { - string.append("No Fault Descriptions"); - } - - if(!partAttachmentMap.isEmpty()) { - string.append(newline); - string.append("Number of Attachment Descriptions: " + partAttachmentMap.size()); - string.append(newline); - Iterator adIter = partAttachmentMap.values().iterator(); - while(adIter.hasNext()) { - string.append(adIter.next().toString()); - string.append(newline); - } - } else { - string.append(newline); - string.append("No Attachment Descriptions"); - string.append(newline); - } - - string.append("RuntimeDescriptions:" + this.runtimeDescMap.size()); - string.append(newline); - for (OperationRuntimeDescription runtimeDesc : runtimeDescMap.values()) { - string.append(runtimeDesc.toString()); - string.append(newline); - } - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "OperationDescription"); - return string.toString(); - } - return string.toString(); - } - - /** - * Adds a list of SOAP header QNames that are understood by JAXWS for this operation to the - * AxisOperation. This will be used by Axis2 to verify that all headers marked as - * mustUnderstand have been or will be processed. - * - * Server side headers considered understood [JAXWS 2.0 Sec 10.2.1 page 117] - * - SEI method params that are in headers - * - Headers processed by application handlers (TBD) - * - * Client side headers considered understood: None - * - */ - private void registerMustUnderstandHeaders() { - - // REVIEW: If client side (return value, OUT or INOUT params) needs to be supported then - // this needs to process client and server differently. - - AxisOperation theAxisOperation = getAxisOperation(); - if (theAxisOperation == null) { - if (log.isDebugEnabled()) { - log.debug("The axis operation is null, so header QNames could not be registered. OpDesc = " + this); - } - return; - } - - // If any IN or INOUT parameters are in the header, then add their QNames to the list - ParameterDescription paramDescs[] = getParameterDescriptions(); - ArrayList understoodQNames = new ArrayList(); - if (paramDescs != null && paramDescs.length > 0) { - for (ParameterDescription paramDesc : paramDescs) { - if (paramDesc.isHeader() - && (paramDesc.getMode() == WebParam.Mode.IN - || paramDesc.getMode() == WebParam.Mode.INOUT)) { - QName headerQN = new QName(paramDesc.getTargetNamespace(), - paramDesc.getParameterName()); - understoodQNames.add(headerQN); - if (log.isDebugEnabled()) { - log.debug("OpDesc: understoodQName added to AxisOperation (if not null) " + headerQN); - } - } - } - } - - if (!understoodQNames.isEmpty()) { - Parameter headerQNParameter = new Parameter(OperationDescription.HEADER_PARAMETER_QNAMES, - understoodQNames); - try { - theAxisOperation.addParameter(headerQNParameter); - } catch (AxisFault e) { - log.warn(Messages.getMessage("regMUHeadersErr",theAxisOperation.getClass().getName()), e); - } - } - } - /** - * Get an annotation. This is wrappered to avoid a Java2Security violation. - * @param cls Class that contains annotation - * @param annotation Class of requrested Annotation - * @return annotation or null - */ - private static Annotation getAnnotation(final AnnotatedElement element, final Class annotation) { - return (Annotation) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return element.getAnnotation(annotation); - } - }); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ParameterDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ParameterDescriptionImpl.java deleted file mode 100644 index f9766da8c6..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ParameterDescriptionImpl.java +++ /dev/null @@ -1,427 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Array; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import javax.jws.WebParam; -import javax.jws.soap.SOAPBinding; -import javax.xml.ws.Holder; - -import org.apache.axis2.jaxws.description.AttachmentDescription; -import org.apache.axis2.jaxws.description.EndpointDescriptionJava; -import org.apache.axis2.jaxws.description.OperationDescription; -import org.apache.axis2.jaxws.description.ParameterDescription; -import org.apache.axis2.jaxws.description.ParameterDescriptionJava; -import org.apache.axis2.jaxws.description.ParameterDescriptionWSDL; -import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.converter.ConverterUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** @see ../ParameterDescription */ -class ParameterDescriptionImpl - implements ParameterDescription, ParameterDescriptionJava, ParameterDescriptionWSDL { - private static final Log log = LogFactory.getLog(ParameterDescriptionImpl.class); - private OperationDescription parentOperationDescription; - // The Class representing the parameter. Note that for a Generic, including the JAX-WS Holder Generic, - // this represents the raw type of the Generic (e.g. List for List or Holder for Holder). - private Class parameterType; - // For the JAX-WS Generic Holder (e.g. Holder), this will be the actual type argument (e.g. Foo). For - // any other parameter (including other Generics), this will be null. - // Note that since JAX-WS Holder only supports a single actual type T (not multiple types such as ) - private Class parameterHolderActualType; - - // 0-based number of the parameter in the argument list - private int parameterNumber = -1; - // The Parameter Description Composite used to build the ParameterDescription - private ParameterDescriptionComposite paramDescComposite; - - // ANNOTATION: @WebMethod - private WebParam webParamAnnotation; - private String webParamName; - private String webParamPartName; - public static final String WebParam_TargetNamespace_DEFAULT = ""; - private String webParamTargetNamespace; - private WebParam.Mode webParamMode; - public static final Boolean WebParam_Header_DEFAULT = new Boolean(false); - private Boolean webParamHeader; - - // Attachment Description information - private boolean _setAttachmentDesc = false; - private AttachmentDescription attachmentDesc = null; - - // This boolean indicates whether or not there was an @XMLList on the parameter - private boolean isListType = false; - - ParameterDescriptionImpl(final int parameterNumber, final Class parameterType, final Type parameterGenericType, - final Annotation[] parameterAnnotations, final OperationDescription parent) { - this.parameterNumber = parameterNumber; - this.parentOperationDescription = parent; - this.parameterType = parameterType; - - // The Type argument could be a Type (if the parameter is a Paramaterized Generic) or - // just a Class (if it is not). If it JAX-WS Holder parameterized type, then get the - // actual parameter type and hang on to that, too. - if (ParameterizedType.class.isInstance(parameterGenericType)) { - this.parameterHolderActualType = - getGenericParameterActualType((ParameterizedType)parameterGenericType); - } - findWebParamAnnotation(parameterAnnotations); - this.isListType = ConverterUtils.hasXmlListAnnotation(parameterAnnotations); - } - - ParameterDescriptionImpl(final int parameterNumber, final ParameterDescriptionComposite pdc, - final OperationDescription parent) { - this.paramDescComposite = pdc; - this.parameterNumber = parameterNumber; - this.parentOperationDescription = parent; - webParamAnnotation = pdc.getWebParamAnnot(); - this.isListType = pdc.isListType(); - - //TODO: Need to build the schema map. Need to add logic to add this parameter - // to the schema map. - - //TODO: Need to consider processing the following JAXWS annotations on this DBC - // webServiceRef is probably only client, so shouldn't be here - //webServiceContextAnnotation = pdc.getWebServiceContextAnnot(); - //webServiceRefAnnotation = pdc.getWebServiceRefAnnot(); - } - - /* - * This grabs the WebParam annotation from the list of annotations for this parameter - * This should be DEPRECATED once DBC processing is complete. - */ - private void findWebParamAnnotation(final Annotation[] annotations) { - for (Annotation checkAnnotation : annotations) { - // REVIEW: This may not work with the MDQInput. From the java.lang.annotation.Annotation interface - // javadoc: "Note that an interface that manually extends this one does not define an annotation type." - if (checkAnnotation.annotationType() == WebParam.class) { - webParamAnnotation = (WebParam)checkAnnotation; - } - } - } - - public OperationDescription getOperationDescription() { - return parentOperationDescription; - } - - /** - * Returns the class associated with the parameter. Note that for the JAX-WS Holder type, - * you can use getParameterActualType() to get the class associated with T. - */ - public Class getParameterType() { - if (parameterType == null && paramDescComposite != null) { - parameterType = paramDescComposite.getParameterTypeClass(); - } - return parameterType; - } - - /** - * For a non-Holder type, returns the parameter class. For a Holder type, returns the class - * of T. - * - * @return - */ - public Class getParameterActualType() { - if (parameterHolderActualType == null && paramDescComposite != null && - paramDescComposite.isHolderType()) { - parameterHolderActualType = paramDescComposite.getHolderActualTypeClass(); - return parameterHolderActualType; - } else if (parameterHolderActualType != null) { - return parameterHolderActualType; - } else { - if (paramDescComposite != null && parameterType == null) { - parameterType = paramDescComposite.getParameterTypeClass(); - } - return parameterType; - } - } - - /** - * TEMPORARY METHOD! For a JAX-WS Holder this returns the class associated with . For a - * Holder>, it returns the class associated with Generic. If the type is not a - * JAX-WS Holder, return a null. - *

    - * This method SHOULD BE REMOVED when the description layer is refactored to use only DBC and - * not Java reflection directly. - * - * @param parameterGenericType - * @return - */ - // TODO: Remove this method when code refactored to only use DBC. - private Class getGenericParameterActualType(final ParameterizedType parameterGenericType) { - Class returnClass = null; - // If this is a JAX-WS Holder type, then get the actual type. Note that we can't use the - // isHolderType method yet because the class variable it is going to check (parameterHolderActualType) - // hasn't been initialized yet. - if (parameterGenericType != null && - parameterGenericType.getRawType() == javax.xml.ws.Holder.class) { - // NOTE - // If you change this code, please remember to change - // OperationDesc.getResultActualType - - Type type = parameterGenericType.getActualTypeArguments()[0]; - if (type != null && ParameterizedType.class.isInstance(type)) { - // For types of Holder>, return class associated with Generic - returnClass = (Class)((ParameterizedType)type).getRawType(); - } else if (type != null && GenericArrayType.class.isInstance(type)) { - Type componentType = ((GenericArrayType)type).getGenericComponentType(); - Class arrayClass = null; - if (ParameterizedType.class.isInstance(componentType)) { - // For types of Holder[]>, return class associated with Generic[] - arrayClass = (Class)((ParameterizedType)componentType).getRawType(); - } else { - // For types of Holder, return class associated with Object[] - arrayClass = (Class)componentType; - } - // REVIEW: This only works for a single dimension array! Note that if this method is removed - // when DBC is used, just make sure DBC supports multi-dim arrays - returnClass = Array.newInstance(arrayClass, 0).getClass(); - } else { - // For types of Holder, return the class associated with Object - returnClass = (Class)type; - } - } - - return returnClass; - } - - /** Answer whether this ParameterDescription represents a JAX-WS Holder type. */ - public boolean isHolderType() { - // If this is a JAX-WS Holder type, then we set the the class of the actual - // parameter in the constructor. Otherwise, that is null. - // Holder types are defined by JSR-224 JAX-WS 2.0, Sec 2.3.3, pg 16 - if (paramDescComposite != null) { - return paramDescComposite.isHolderType(); - } else { - return Holder.class.equals(getParameterType()); - } - } - - // ===================================== - // ANNOTATION: WebParam - // ===================================== - public WebParam getAnnoWebParam() { - return webParamAnnotation; - } - - public String getParameterName() { - // REVIEW: WSDL/Anno merge - return getAnnoWebParamName(); - } - - public String getAnnoWebParamName() { - if (webParamName == null) { - if (getAnnoWebParam() != null && !DescriptionUtils.isEmpty(getAnnoWebParam().name())) { - webParamName = getAnnoWebParam().name(); - } else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT - && getOperationDescription().getSoapBindingParameterStyle() == - SOAPBinding.ParameterStyle.BARE) { - // Defaul per JSR-181 MR Sec 4.4.1, pg 19 - // TODO: Validation: For BARE paramaterUse, only a single IN our INOUT paramater and a single output (either return or OUT or INOUT) is allowed - // Per JSR-224, Sec 3.6.2.2, pg 37 - webParamName = getOperationDescription().getOperationName(); - } else { - // Default per JSR-181 MR Sec 4.4.1, pg 20 - // Return "argN" where N is the index of the parameter in the method signature - webParamName = "arg" + parameterNumber; - } - } - return webParamName; - } - - public String getPartName() { - // REVIEW: WSDL/Anno merge - return getAnnoWebParamPartName(); - } - - public String getAnnoWebParamPartName() { - if (webParamPartName == null) { - if (getAnnoWebParam() != null && - !DescriptionUtils.isEmpty(getAnnoWebParam().partName())) { - webParamPartName = getAnnoWebParam().partName(); - } else { - // Default per JSR-181 MR Sec 4.4.1, pg 20 - webParamPartName = getAnnoWebParamName(); - } - } - return webParamPartName; - } - - public String getTargetNamespace() { - // REVIEW: WSDL/Anno merge - return getAnnoWebParamTargetNamespace(); - } - - public String getAnnoWebParamTargetNamespace() { - if (webParamTargetNamespace == null) { - if (getAnnoWebParam() != null && - !DescriptionUtils.isEmpty(getAnnoWebParam().targetNamespace())) { - webParamTargetNamespace = getAnnoWebParam().targetNamespace(); - } else if (getOperationDescription().getSoapBindingStyle() == SOAPBinding.Style.DOCUMENT - && getOperationDescription().getSoapBindingParameterStyle() == - SOAPBinding.ParameterStyle.WRAPPED - && !getAnnoWebParamHeader()) { - // Defaul per JSR-181 MR Sec 4.4.1, pg 20 - webParamTargetNamespace = WebParam_TargetNamespace_DEFAULT; - } else { - // Default per JSR-181 MR Sec 4.4.1, pg 20 - webParamTargetNamespace = ((EndpointDescriptionJava)getOperationDescription() - .getEndpointInterfaceDescription().getEndpointDescription()) - .getAnnoWebServiceTargetNamespace(); - } - } - return webParamTargetNamespace; - } - -// public Mode getMode() { - - public WebParam.Mode getMode() { - // REVIEW: WSDL/Anno merge. Problem is that OpDesc is expecting WebParam.Mode - return getAnnoWebParamMode(); - } - - public WebParam.Mode getAnnoWebParamMode() { - if (webParamMode == null) { - // REVIEW: Is the following correct? - // Interesting conundrum here: - // Because WebParam.mode has a default value, it will always return something if the - // annotation is present. That value is currently Mode.IN. However, that default is only - // correct for a non-Holder Type; the correct default for a Holder Type is Mode.INOUT. Furthermore, - // there's no way (I can tell) to differentiate if the setting for mode() was specified or defaulted, - // so there's no way to tell if the value is defaulted to IN or explicitly specified IN by the annotation. - // The conundrum is: Do we return the value from the annotation, or do we return the default value based on the - // type. For now, for a Holder type that has a value of IN, we reset the value to INOUT. - // That means even if WebParam.mode=IN was explicitly set, it will be overridden to INOUT. - // The default values are from JSR-181 MR Sec 4.4.1, pg 20 - - // Unlike a String value, if the annotation is present, it will return a usable default value as defined by - // the Annotation. That is currently Mode.IN - if (getAnnoWebParam() != null) { - webParamMode = getAnnoWebParam().mode(); - } else { - webParamMode = WebParam.Mode.IN; - } - - if (isHolderType() && webParamMode == WebParam.Mode.IN) { - // Default per JSR-181 MR Sec 4.4.1, pg 20 - webParamMode = WebParam.Mode.INOUT; - } - } - return webParamMode; - } - - public boolean isHeader() { - // REVIEW: WSDL/Anno merge - return getAnnoWebParamHeader(); - } - - public boolean getAnnoWebParamHeader() { - if (webParamHeader == null) { - // Unlike a String value, if the annotation is present, it will return a usable default value. - if (getAnnoWebParam() != null) { - webParamHeader = getAnnoWebParam().header(); - } else { - webParamHeader = WebParam_Header_DEFAULT; - } - } - return webParamHeader.booleanValue(); - } - - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - StringBuffer string = new StringBuffer(); - try { - string.append(super.toString()); - string.append(newline); - string.append("Name: " + getParameterName()); - // - string.append(newline); - string.append("Is header: " + (isHeader() == true)); - string.append(sameline); - string.append("Is holder: " + (isHolderType() == true)); - // - string.append(newline); - string.append("Mode: " + getMode()); - // - string.append(newline); - string.append("Type: " + getParameterType()); - string.append(sameline); - string.append("Actual type: " + getParameterActualType()); - if (getAttachmentDescription() != null) { - string.append(newline); - string.append(getAttachmentDescription().toString()); - } - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "ParameterDescription"); - return string.toString(); - } - return string.toString(); - } - - public boolean isListType() { - return isListType; - } - - /** - * Helper method to get to parent impl object. - */ - private OperationDescriptionImpl getOperationDescriptionImpl() { - if(this.getOperationDescription() instanceof OperationDescriptionImpl) { - return (OperationDescriptionImpl) this.getOperationDescription(); - } - return null; - } - - /** - * This method will return an AttachmentDescription based on the part name of the parameter. - */ - public AttachmentDescription getAttachmentDescription() { - String partName = this.getPartName(); - if(partName != null && getOperationDescriptionImpl() != null) { - if(log.isDebugEnabled()) { - log.debug("Returning parameter AttachmentDescription for partName: " + - partName); - } - return getOperationDescriptionImpl().getPartAttachmentDescription(partName); - - } - if(log.isDebugEnabled()) { - log.debug("Did not find parameter AttachmentDescription for partName: " + partName); - } - return null; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/PortInfoImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/PortInfoImpl.java deleted file mode 100644 index ffbb38d043..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/PortInfoImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import javax.xml.namespace.QName; -import javax.xml.ws.handler.PortInfo; - -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.i18n.Messages; - -public class PortInfoImpl implements PortInfo { - private QName serviceName = null; - private QName portName = null; - private String bindingId = null; - - /** - * @param serviceName - * @param portName - * @param bindingId - */ - PortInfoImpl(final QName serviceName, final QName portName, final String bindingId) { - super(); - if (serviceName == null) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("portInfoErr0", "")); - } - if (portName == null) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("portInfoErr1", "")); - } - if (bindingId == null) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("portInfoErr2", "")); - } - this.serviceName = serviceName; - this.portName = portName; - this.bindingId = bindingId; - } - - public QName getServiceName() { - return serviceName; - } - - public QName getPortName() { - return portName; - } - - public String getBindingID() { - return bindingId; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ServiceDescriptionImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ServiceDescriptionImpl.java deleted file mode 100644 index 47d45a5ca1..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/ServiceDescriptionImpl.java +++ /dev/null @@ -1,2662 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - - - -import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE; -import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.lang.annotation.Annotation; -import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; -import java.net.ConnectException; -import java.net.URL; -import java.net.UnknownHostException; -import java.security.PrivilegedAction; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import javax.jws.HandlerChain; -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.PortType; -import javax.wsdl.Service; -import javax.wsdl.WSDLException; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceClient; -import javax.xml.ws.handler.PortInfo; -import javax.xml.ws.soap.SOAPBinding; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.engine.AxisConfiguration; -import org.apache.axis2.java.security.AccessController; -import org.apache.axis2.jaxws.ClientConfigurationFactory; -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.catalog.JAXWSCatalogManager; -import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager; -import org.apache.axis2.jaxws.description.DescriptionFactory; -import org.apache.axis2.jaxws.description.EndpointDescription; -import org.apache.axis2.jaxws.description.EndpointInterfaceDescription; -import org.apache.axis2.jaxws.description.ResolvedHandlersDescription; -import org.apache.axis2.jaxws.description.ServiceDescription; -import org.apache.axis2.jaxws.description.ServiceDescriptionJava; -import org.apache.axis2.jaxws.description.ServiceDescriptionWSDL; -import org.apache.axis2.jaxws.description.ServiceRuntimeDescription; -import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; -import org.apache.axis2.jaxws.description.builder.MDQConstants; -import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite; -import org.apache.axis2.jaxws.description.builder.PortComposite; -import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.axis2.jaxws.util.WSDL4JWrapper; -import org.apache.axis2.jaxws.util.WSDLWrapper; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.xml.resolver.Catalog; - - -/** @see ../ServiceDescription */ -class ServiceDescriptionImpl - implements ServiceDescription, ServiceDescriptionWSDL, ServiceDescriptionJava { - private ClientConfigurationFactory clientConfigFactory; - private ConfigurationContext configContext; - - // Number of times this instance is being used. For service-providers, this is not decremented - // since the serice isn't un-used once it is created. For service-requesters, the service - // is used by ServiceDelegates, and becomes un-used when the ServiceDelegate is released. - private int useCount = 0; - private String wsdlURL; - private QName serviceQName; - - private WSDLWrapper wsdlWrapper; - private WSDLWrapper generatedWsdlWrapper; - - //ANNOTATION: @HandlerChain - private HandlerChain handlerChainAnnotation; - private HandlerChainsType handlerChainsType; - - // EndpointDescriptions from annotations and wsdl - private Map definedEndpointDescriptions = - new HashMap(); - - // Endpoints for dynamic ports - // This needs to be a strong reference (not Weak or Soft) so that the resource release logic - // in the finalizer still has a reference to the EndpointDescriptions so they can be - // released. Otherwise, this collection will be null when the finalizer is called. - private Map> dynamicEndpointDescriptions = - new HashMap>(); - - // Cache classes for the info for resolved handlers - private SoftReference> resolvedHandlersDescription = - new SoftReference> - (new ConcurrentHashMap()); - - private static final Log log = LogFactory.getLog(ServiceDescriptionImpl.class); - - private HashMap dbcMap = null; - - private DescriptionBuilderComposite composite = null; - private boolean isServerSide = false; - - // Allow a unique XML CatalogManager per service description. - private JAXWSCatalogManager catalogManager = null; - - // RUNTIME INFORMATION - Map runtimeDescMap = - new ConcurrentHashMap(); - private static final String JAXWS_DYNAMIC_ENDPOINTS = "jaxws.dynamic.endpoints"; - - /** - * Create a service-requester side (aka client-side) service description. - * Construct a service description hierachy - * based on WSDL (may be null), the Service class, and a service QName. - * - * @param wsdlURL The WSDL file (this may be null). - * @param serviceQName The name of the service in the WSDL. This can not be null since a - * javax.xml.ws.Service can not be created with a null service QName. - * @param serviceClass The JAX-WS service class. This could be an instance of - * javax.xml.ws.Service or a generated service subclass thereof. This will - * not be null. - */ - ServiceDescriptionImpl(final URL wsdlURL, final QName serviceQName, final Class serviceClass) { - this(wsdlURL, serviceQName, serviceClass, null, null); - } - - /** - * Create a service-requester side service description. Same as constructor above with an - * additonal composite paramater. Note that the composite is "sparse" in that any values it - * contains overrides any values on the corresponding class annotation HOWEVER if the composite - * doesn't specify a value, it is gotten from the class annotation. - * @param wsdlURL - * @param serviceQName - * @param serviceClass - * @param sparseComposite a composite with any annotation overrides such as from a client deployment - * descriptor. CAN NOT BE NULL, but it can be an object created with a default constructor - */ - ServiceDescriptionImpl(final URL wsdlURL, final QName serviceQName, final Class serviceClass, - final DescriptionBuilderComposite sparseComposite, - final Object sparseCompositeKey) { - if (log.isDebugEnabled()) { - log.debug("ServiceDescriptionImpl(URL,QName,Class,DescriptionBuilderComposite,Object)"); - } - - if (sparseComposite != null) { - catalogManager = sparseComposite.getCatalogManager(); - } - if (catalogManager == null) { - catalogManager = new OASISCatalogManager(); - } - - if (serviceQName == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("serviceDescErr0")); - } - if (serviceClass == null) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("serviceDescErr1", "null")); - } - if (!javax.xml.ws.Service.class.isAssignableFrom(serviceClass)) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("serviceDescErr1", serviceClass.getName())); - } - - composite = new DescriptionBuilderComposite(); - composite.setIsServiceProvider(false); - composite.setCorrespondingClass(serviceClass); - // The classloader was originally gotten off this class, but it seems more logical to - // get it off the application service class. -// composite.setClassLoader(this.getClass().getClassLoader()); - composite.setClassLoader(getClassLoader(serviceClass)); - composite.setSparseComposite(sparseCompositeKey, sparseComposite); - - // If there's a WSDL URL specified in the sparse composite, that is a override, for example - // from a JSR-109 deployment descriptor, and that's the one to use. - URL sparseCompositeWsdlURL = getSparseCompositeWsdlURL(sparseComposite); - if (sparseCompositeWsdlURL != null) { - if (log.isDebugEnabled()) { - log.debug("Wsdl location overriden by sparse composite; overriden value: " + this.wsdlURL); - } - this.wsdlURL = sparseCompositeWsdlURL.toString(); - } else { - this.wsdlURL = wsdlURL == null ? null : wsdlURL.toString(); - } - if (log.isDebugEnabled()) { - log.debug("Wsdl Location value used: " + this.wsdlURL); - } - // TODO: On the client side, we should not support partial WSDL; i.e. if the WSDL is specified it must be - // complete and must contain the ServiceQName. This is how the Sun RI behaves on the client. - // When this is fixed, the check in ServiceDelegate(URL, QName, Class) should be removed - - // TODO: The serviceQName needs to be verified between the argument/WSDL/Annotation - this.serviceQName = serviceQName; - - setupWsdlDefinition(); - } - - URL getSparseCompositeWsdlURL(final DescriptionBuilderComposite sparseComposite) { - // Use the WSDL file if it is specified in the composite - URL url = null; - if (sparseComposite != null) { - WebServiceClient wsc = sparseComposite.getWebServiceClientAnnot(); - if (wsc != null && wsc.wsdlLocation() != null) { - String wsdlLocation = wsc.wsdlLocation(); - URL wsdlUrl = getWSDLURL(wsdlLocation); - - if (wsdlUrl == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("serviceDescErr4", wsdlLocation)); - } else { - url = wsdlUrl; - } - } - } - return url; - } - - private static URL createWsdlURL(final String wsdlLocation) { - URL theUrl = null; - try { - theUrl = new URL(wsdlLocation); - } catch (Exception ex) { - // Just return a null to indicate we couldn't create a URL from the string - if (log.isDebugEnabled()) { - log.debug("Unable to obtain URL for WSDL file: " + wsdlLocation - + " by using File reference"); - } - } - return theUrl; - } - - ServiceDescriptionImpl( - final HashMap dbcMap, - final DescriptionBuilderComposite composite) { - this(dbcMap, composite, null); - } - - ServiceDescriptionImpl(final HashMap dbcMap, - final DescriptionBuilderComposite composite, - final ConfigurationContext configContext) { - this(dbcMap, composite, configContext, null); - } - - /** - * Create a service-provider side Service description hierachy. The hierachy is created entirely - * from composite. All relevant classes and interfaces referenced from the class represented by - * composite must be included in the map. - * @param dbcMap - * @param composite - */ - ServiceDescriptionImpl( - final HashMap dbcMap, - final DescriptionBuilderComposite composite, - final ConfigurationContext configContext, - final QName serviceQName) { - this.composite = composite; - - this.configContext = configContext; - if (log.isDebugEnabled()) { - log.debug("ServiceDescriptionImpl(HashMap,ConfigurationContext)"); - } - - String serviceImplName = this.composite.getClassName(); - - this.dbcMap = dbcMap; - this.isServerSide = true; - this.serviceQName = serviceQName; - this.catalogManager = this.composite.getCatalogManager(); - - - // if the ServiceDescriptionImpl was constructed with a specific service QName - // we should use that to retrieve the potential list of PortComposite objects - List portComposites = null; - - if(this.serviceQName != null) { - portComposites = composite.getPortComposites(this.serviceQName); - } - else { - portComposites = composite.getPortComposites(); - } - - - - //capture the WSDL, if there is any...to be used for later processing - setupWsdlDefinition(); - - // Do a first pass validation for this DescriptionBuilderComposite. - // This is not intended to be a full integrity check, but rather a fail-fast mechanism - //validateDBCLIntegrity(); - - // The ServiceQName instance variable is set based on annotation or default - // It will be set by the EndpointDescriptionImpl since it is the one that knows - // how to process the annotations and the defaults. - - - - // If PortComposite instances were specified on the DBC we are currently processing - // we want to switch the context of processing to the PortComposites - if(portComposites != null - && - !portComposites.isEmpty()) { - if(log.isDebugEnabled()) { - log.debug("Constructing EndpointDescription instance from PortComposites for " + - "implementation class: " + composite.getClassName()); - } - int i = 0; - for(PortComposite portComposite : portComposites) { - - // get the properties from the SEI and the Impl - Map props = getAllProps(portComposite, dbcMap); - - // here we pass in an index so the EndpointDescriptionImpl instance will know - // which PortComposite instance it is associated with and can retrieve that - // instance as required - EndpointDescriptionImpl endpointDescription = - new EndpointDescriptionImpl(this, serviceImplName, props, i); - addEndpointDescription(endpointDescription); - i++; - } - } - - // If no PortComposites then we build the EndpointDescriptionImpl instance from the - // DBC that was supplied - else { - if(log.isDebugEnabled()) { - log.debug("No PortComposites found for implementation class: " + composite.getClassName()); - } - - // get the properties from the SEI and the Impl - Map props = getAllProps(composite, dbcMap); - - // Create the single EndpointDescription hierachy from the service impl annotations; Since the PortQName is null, - // it will be set to the annotation value. - EndpointDescriptionImpl endpointDescription = - new EndpointDescriptionImpl(this, serviceImplName, props, null); - addEndpointDescription(endpointDescription); - } - } - - /*=======================================================================*/ - /*=======================================================================*/ - // START of public accessor methods - - /** - * Update or create an EndpointDescription. Updates to existing EndpointDescriptons will be - * based on the SEI class and its annotations. Both declared ports and dynamic ports can be - * updated. A declared port is one that is defined (e.g. in WSDL or via annotations); a dyamic - * port is one that is not defined (e.g. not via WSDL or annotations) and has been added via - * Serivce.addPort. - *

    - * For predefined ports, a composite of sparse metadata, such as from a deployment descriptor - * may be supplied. This can be used to modify the endpoint interfaceannotations such as - * adding a handler chain. The sparse composite is NOT supported for dynamic (i.e. ADD_PORT) - * or dispatch clients. - *

    - * Notes on how an EndpointDescription can be updated or created: 1) Service.createDispatch can - * create a Dispatch client for either a declared or dynamic port 2) Note that creating a - * Dispatch does not associate an SEI with an endpoint 3) Service.getPort will associate an SEI - * with a port 4) A getPort on an endpoint which was originally created for a Distpatch will - * update that EndpointDescription with the SEI provided on the getPort 5) Service.getPort can - * not be called on a dynamic port (per the JAX-WS spec) 6) Service.addPort can not be called - * for a declared port - * - * @param sei This will be non-null if the update is of type GET_PORT; it will be null if - * the update is ADD_PORT or CREATE_DISPATCH - * @param portQName - * @param updateType Indicates what is causing the update GET_PORT is an attempt to get a - * declared SEI-based port ADD_PORT is an attempt to add a previously - * non-existent dynamic port CREATE_DISPATCH is an attempt to create a - * Dispatch-based client to either a declared port or a pre-existing dynamic - * port. - * @param composite May contain sparse metadata, for example from a deployment descriptor, that - * should be used in conjunction with the class annotations to update the - * description hierarchy. For example, it may contain a HandlerChain annotation - * based on information in a JSR-109 deployment descriptor. - */ - - EndpointDescription updateEndpointDescription(final Class sei, - QName portQName, - final DescriptionFactory.UpdateType updateType, - final DescriptionBuilderComposite composite, - final Object serviceDelegateKey, - final String bindingId, - final String endpointAddress) { - - - EndpointDescriptionImpl endpointDescription = getEndpointDescriptionImpl(portQName); - boolean isPortDeclared = isPortDeclared(portQName); - - // If a defined endpointDescription is not available, try and locate a dynamic endpoint. - // Note that a dynamic port will only be found for the client that created it, per the - // serviceDelegateKey - - if (endpointDescription == null && serviceDelegateKey != null) { - endpointDescription = getDynamicEndpointDescriptionImpl(portQName, serviceDelegateKey); - } - - // If no QName was specified in the arguments, one may have been specified in the sparse - // composite metadata when the service was created. - if (DescriptionUtils.isEmpty(portQName)) { - QName preferredPortQN = getPreferredPort(serviceDelegateKey); - if (!DescriptionUtils.isEmpty(preferredPortQN)) { - portQName = preferredPortQN; - } - } - - switch (updateType) { - - case ADD_PORT: - if (composite != null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("serviceDescErr5", portQName.toString())); - } - // Port must NOT be declared (e.g. can not already exist in WSDL) - // If an EndpointDesc doesn't exist; create it as long as it doesn't exist in the WSDL - if (DescriptionUtils.isEmpty(portQName)) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("addPortErr2")); - } - if (getWSDLWrapper() != null && isPortDeclared) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("addPortDup", portQName.toString())); - } else if (endpointDescription == null) { - // Use the SEI Class and its annotations to finish creating the Description hierarchy. Note that EndpointInterface, Operations, Parameters, etc. - // are not created for dynamic ports. It would be an error to later do a getPort against a dynamic port (per the JAX-WS spec) - // If we can't add the dynamic port under a specific service delegate, that is an error - - if (serviceDelegateKey == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("serviceDescriptionImplAddPortErr")); - } - - endpointDescription = createEndpointDescriptionImpl(sei, portQName, bindingId, endpointAddress); - addDynamicEndpointDescriptionImpl(endpointDescription, serviceDelegateKey); - - } else { - // All error chJeck above passed, the EndpointDescription already exists and needs no updating - } - break; - - case GET_PORT: - - // try to find existing endpointDesc by SEI class if portQName was not specified - if (endpointDescription == null && portQName == null && sei != null) { - endpointDescription = getEndpointDescriptionImpl(sei); - } - - // If an endpointDesc doesn't exist, and the port exists in the WSDL, create it - // If an endpointDesc already exists and has an associated SEI already, make sure they match - // If an endpointDesc already exists and was created for Dispatch (no SEI), update that with the SEI provided on the getPort - - // Port must be declared (e.g. in WSDL or via annotations) - // TODO: Once isPortDeclared understands annotations and not just WSDL, the 2nd part of this check can possibly be removed. - // Although consider the check below that updates an existing EndpointDescritpion with an SEI. - if (!isPortDeclared || - (endpointDescription != null && endpointDescription.isDynamicPort())) { - // This guards against the case where an addPort was done previously and now a getPort is done on it. - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("updateEPDescrErr1",(portQName != null ? portQName.toString() : "not specified"))); - } else if (sei == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("updateEPDescrErr2",(portQName != null ? portQName.toString() : "not specified"))); - } else if (endpointDescription == null) { - // Use the SEI Class and its annotations to finish creating the Description hierachy: Endpoint, EndpointInterface, Operations, Parameters, etc. - endpointDescription = new EndpointDescriptionImpl(sei, portQName, this, composite, serviceDelegateKey); - addEndpointDescription(endpointDescription); - /* - * We must reset the service runtime description after adding a new endpoint - * since the runtime description information could have references to old - * information. See MarshalServiceRuntimeDescriptionFactory and - * MarshalServiceRuntimeDescription. - */ - resetServiceRuntimeDescription(); - } else - if (getEndpointSEI(portQName) == null && !endpointDescription.isDynamicPort()) { - // Existing endpointDesc from a declared port needs to be updated with an SEI. - // This could happen if the client first did a CREATE_DISPATCH on a declared - // port, which would cause it to be created, and then did a GET_PORT on the - // same port later, providing an SEI. - // Notes - // 1) An EndpointDescritption created from an addPort (i.e. a dynamic port) can - // not do this. - // 2) A sparse composite may be specified. We don't allow mixing JAX-WS unmanaged - // apis (CREATE_DISPATCH) with JSR-109 managed apis (GET_PORT with sparse - // composite metadata from a DD). Since the sparse composite is stored by - // a key AND CREATE_DISPATCH and ADD_PORT will thrown an exception of a composite - // is specified, having a composite and key on the GET_PORTs shouldn't be - // a problem. - endpointDescription.updateWithSEI(sei, composite, serviceDelegateKey); - } else if (getEndpointSEI(portQName) != sei) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("updateEPDescrErr3",portQName.toString(), - sei.getName(),getEndpointSEI(portQName).getName())); - } else { - // All error check above passed, the EndpointDescription already exists and needs no updating - // Just add the sparse composite if one was specified. - endpointDescription.getDescriptionBuilderComposite().setSparseComposite(serviceDelegateKey, composite); - } - break; - - case CREATE_DISPATCH: - if (composite != null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("serviceDescErr6")); - } - - // Port may or may not exist in WSDL. - // If an endpointDesc doesn't exist and it is in the WSDL, it can be created - // Otherwise, it is an error. - if (DescriptionUtils.isEmpty(portQName)) { - throw ExceptionFactory - .makeWebServiceException(Messages.getMessage("createDispatchFail0")); - } else if (endpointDescription != null) { - // The EndpointDescription already exists; nothing needs to be done - } else if (sei != null) { - // The Dispatch should not have an SEI associated with it on the update call. - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("createDispatchFail3",portQName.toString())); - } else if (getWSDLWrapper() != null && isPortDeclared) { - // EndpointDescription doesn't exist and this is a declared Port, so create one - // Use the SEI Class and its annotations to finish creating the Description hierarchy. - // Note that EndpointInterface, Operations, Parameters, etc. are not created for - // Dispatch-based ports, but might be updated later if a getPort is done against - // the same declared port. - endpointDescription = new EndpointDescriptionImpl(sei, portQName, this); - addEndpointDescription(endpointDescription); - } else { - // The port is not a declared port and it does not have an EndpointDescription, - // meaning an addPort has not been done for it - // This is an error. - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("createDispatchFail1", portQName.toString())); - } - break; - } - return endpointDescription; - } - - private EndpointDescriptionImpl createEndpointDescriptionImpl(final Class sei, final QName portQName, final String bindingId, final String endpointAddress) { - if (log.isDebugEnabled()) { - log.debug("Calling createEndpointDescriptionImpl : (" - + portQName + "," + bindingId + "," + endpointAddress + ")"); - } - EndpointDescriptionImpl endpointDescription = null; - AxisConfiguration configuration = configContext.getAxisConfiguration(); - if (log.isDebugEnabled()) { - log.debug("looking for " + JAXWS_DYNAMIC_ENDPOINTS + " in AxisConfiguration : " + configuration); - } - Parameter parameter = configuration.getParameter(JAXWS_DYNAMIC_ENDPOINTS); - HashMap cachedDescriptions = (HashMap) - ((parameter == null) ? null : parameter.getValue()); - if(cachedDescriptions == null) { - cachedDescriptions = new HashMap(); - try { - configuration.addParameter(JAXWS_DYNAMIC_ENDPOINTS, cachedDescriptions); - } catch (AxisFault axisFault) { - throw new RuntimeException(axisFault); - } - if (log.isDebugEnabled()) { - log.debug("Added new instance of cachedDescriptions : " + cachedDescriptions); - } - } else { - if (log.isDebugEnabled()) { - log.debug("found old jaxws.dynamic.endpoints cache in AxisConfiguration (" + cachedDescriptions + ") with size : (" - + cachedDescriptions.size() + ")"); - } - } - - StringBuffer key = new StringBuffer(); - key.append(portQName == null ? "NULL" : portQName.toString()); - key.append(':'); - key.append(bindingId == null ? "NULL" : bindingId); - key.append(':'); - key.append(endpointAddress == null ? "NULL" : endpointAddress); - synchronized(cachedDescriptions) { - WeakReference ref = (WeakReference) cachedDescriptions.get(key.toString()); - if (ref != null) { - endpointDescription = (EndpointDescriptionImpl) ref.get(); - } - } - if(endpointDescription == null) { - endpointDescription = new EndpointDescriptionImpl(sei, portQName, true, this); - synchronized(cachedDescriptions) { - if (log.isDebugEnabled()) { - log.debug("Calling cachedDescriptions.put : (" - + key.toString() + ") : size - " + cachedDescriptions.size()); - } - cachedDescriptions.put(key.toString(), new WeakReference(endpointDescription)); - } - } else { - if (log.isDebugEnabled()) { - log.debug("found old entry for endpointDescription in jaxws.dynamic.endpoints cache : (" - + cachedDescriptions.size() + ")"); - } - } - return endpointDescription; - } - - /** - * This method will get all properties that have been set on the DescriptionBuilderComposite - * instance. If the DBC represents an implementation class that references an SEI, the - * properties from the SEI will also be merged with the returned result. - */ - private Map getAllProps(final DescriptionBuilderComposite dbc, - final Map dbcMap) { - Map props = new HashMap(); - - // first get the properties from the DBC - if(dbc.getProperties() != null - && - !dbc.getProperties().isEmpty()) { - props.putAll(dbc.getProperties()); - } - - // no need to continue if the 'dbcMap' is null - if(dbcMap != null) { - - // now if this is a web service impl with an SEI, get the SEI props - if(dbc.getWebServiceAnnot() != null - && - !DescriptionUtils.isEmpty(dbc.getWebServiceAnnot().endpointInterface())) { - DescriptionBuilderComposite seiDBC = dbcMap.get(dbc.getWebServiceAnnot().endpointInterface()); - if(seiDBC != null - && - seiDBC.getProperties() != null - && - !seiDBC.getProperties().isEmpty()) { - props.putAll(seiDBC.getProperties()); - } - } - } - - return props; - } - - private Class getEndpointSEI(final QName portQName) { - Class endpointSEI = null; - EndpointDescription endpointDesc = getEndpointDescription(portQName); - if (endpointDesc != null) { - EndpointInterfaceDescription endpointInterfaceDesc = - endpointDesc.getEndpointInterfaceDescription(); - if (endpointInterfaceDesc != null ) { - endpointSEI = endpointInterfaceDesc.getSEIClass(); - } - } - return endpointSEI; - } - - private boolean isPortDeclared(final QName portQName) { - // TODO: This needs to account for declaration of the port via annotations in addition to just WSDL - // TODO: Add logic to check the portQN namespace against the WSDL Definition NS - boolean portIsDeclared = false; - if (!DescriptionUtils.isEmpty(portQName)) { - if (getWSDLWrapper() != null) { - Definition wsdlDefn = getWSDLWrapper().getDefinition(); - Service wsdlService = wsdlDefn.getService(serviceQName); - Port wsdlPort = wsdlService.getPort(portQName.getLocalPart()); - portIsDeclared = (wsdlPort != null); - } else { - // TODO: Add logic to determine if port is declared via annotations when no WSDL is present. For now, we have to assume it is declared - // so getPort(...) and createDispatch(...) calls work when there is no WSDL. - portIsDeclared = true; - } - } else { - // PortQName is null, so the runtime gets to choose which one to use. Since there's no WSDL - // we'll use annotations, so it is implicitly declared - portIsDeclared = true; - } - return portIsDeclared; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getEndpointDescriptions() - */ - public EndpointDescription[] getEndpointDescriptions() { - return definedEndpointDescriptions.values().toArray(new EndpointDescriptionImpl[0]); - } - - public Collection getDynamicEndpointDescriptions_AsCollection(final Object serviceDelegateKey) { - Collection dynamicEndpoints = null; - if (serviceDelegateKey != null ) { - if (dynamicEndpointDescriptions.get(serviceDelegateKey) != null) { - dynamicEndpoints = dynamicEndpointDescriptions.get(serviceDelegateKey).values(); - } - } - return dynamicEndpoints; - } - - public Collection getEndpointDescriptions_AsCollection() { - return definedEndpointDescriptions.values(); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getEndpointDescription(javax.xml.namespace.QName) - */ - public EndpointDescription getEndpointDescription(final QName portQName) { - - return getEndpointDescription(portQName, null); - } - - public EndpointDescription getEndpointDescription(final QName portQName, final Object serviceDelegateKey) { - EndpointDescription returnDesc = null; - if (!DescriptionUtils.isEmpty(portQName)) { - returnDesc = definedEndpointDescriptions.get(portQName); - - if (returnDesc == null && serviceDelegateKey != null) { - returnDesc = getDynamicEndpointDescriptionImpl(portQName, serviceDelegateKey); - } - } - return returnDesc; - } - - EndpointDescriptionImpl getEndpointDescriptionImpl(final QName portQName) { - return (EndpointDescriptionImpl)getEndpointDescription(portQName, null); - } - - EndpointDescriptionImpl getEndpointDescriptionImpl(final QName portQName, final Object serviceDelegateKey) { - return (EndpointDescriptionImpl)getEndpointDescription(portQName); - } - - EndpointDescriptionImpl getEndpointDescriptionImpl(final Class seiClass) { - for (EndpointDescription endpointDescription : definedEndpointDescriptions.values()) { - EndpointInterfaceDescription endpointInterfaceDesc = - endpointDescription.getEndpointInterfaceDescription(); - // Note that Dispatch endpoints will not have an endpointInterface because the do not have an associated SEI - if (endpointInterfaceDesc != null) { - Class endpointSEIClass = endpointInterfaceDesc.getSEIClass(); - if (endpointSEIClass != null && endpointSEIClass.equals(seiClass)) { - return (EndpointDescriptionImpl)endpointDescription; - } - } - } - return null; - } - - public DescriptionBuilderComposite getDescriptionBuilderComposite() { - return getDescriptionBuilderComposite(null, null); - } - - /** - * This method provides a means for accessing a DescriptionBuilderComposite instance. - * If the integer value passed in is an index in the list of PortComposite objects, - * then the indiciated PortComposite will be returned. Otherwise, the instance DBC - * will be returned. - */ - public DescriptionBuilderComposite getDescriptionBuilderComposite(final QName serviceQName, - final Integer portCompositeIndex) { - - DescriptionBuilderComposite dbc = null; - - // if the service QName was specified let's attempt to get the correct - // PortComposite list - if(serviceQName != null - && - composite.getServiceQNames() != null - && - !composite.getServiceQNames().isEmpty() - && - portCompositeIndex != null) { - List pcList = composite.getPortComposites(serviceQName); - if(pcList != null) { - dbc = pcList.get(portCompositeIndex); - } - else { - dbc = composite; - } - } - - // ignore null values or values that would cause an IndexOutOfBoundsException - else if(portCompositeIndex == null - || - composite.getPortComposites() == null - || - portCompositeIndex < 0 - || - portCompositeIndex >= composite.getPortComposites().size()) { - dbc = composite; - } - - // return the appropriate PortComposite instance - else { - if(log.isDebugEnabled()) { - log.debug("Returning PortComposite at index: " + portCompositeIndex + - " from ServiceDescriptionImpl: " + this.hashCode()); - } - dbc = composite.getPortComposites().get(portCompositeIndex); - } - - return dbc; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getEndpointDescription(java.lang.Class) - */ - public EndpointDescription[] getEndpointDescription(final Class seiClass) { - EndpointDescription[] returnEndpointDesc = null; - ArrayList matchingEndpoints = - new ArrayList(); - for (EndpointDescription endpointDescription : definedEndpointDescriptions.values()) { - EndpointInterfaceDescription endpointInterfaceDesc = - endpointDescription.getEndpointInterfaceDescription(); - // Note that Dispatch endpoints will not have an endpointInterface because the do not have an associated SEI - if (endpointInterfaceDesc != null) { - Class endpointSEIClass = endpointInterfaceDesc.getSEIClass(); - if (endpointSEIClass != null && endpointSEIClass.equals(seiClass)) { - matchingEndpoints.add((EndpointDescriptionImpl)endpointDescription); - } - } - } - if (matchingEndpoints.size() > 0) { - returnEndpointDesc = matchingEndpoints.toArray(new EndpointDescriptionImpl[0]); - } - return returnEndpointDesc; - } - - // END of public accessor methods - /*=======================================================================*/ - /*=======================================================================*/ - private void addEndpointDescription(final EndpointDescriptionImpl endpoint) { - definedEndpointDescriptions.put(endpoint.getPortQName(), endpoint); - } - - private void setupWsdlDefinition() { - // Note that there may be no WSDL provided, for example when called from - // Service.create(QName serviceName). - - if (log.isDebugEnabled()) { - log.debug("setupWsdlDefinition()"); - } - - if (composite.isServiceProvider()) { - - // Currently, there is a bug which allows the wsdlDefinition to be placed - // on either the impl class composite or the sei composite, or both. We need to - // look in both places and find the correct one, if it exists. - - if(serviceQName != null - && - composite.getWsdlDefinition(serviceQName) != null) { - if(log.isDebugEnabled()) { - log.debug("Found WSDL definition by service QName"); - } - Definition def = composite.getWsdlDefinition(serviceQName); - URL url = composite.getWsdlURL(serviceQName); - this.wsdlURL = url != null ? url.toString() : null; - try { - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null1"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null1"); - } - } - - this.wsdlWrapper = new WSDL4JWrapper(url, - def, - configContext, - this.catalogManager); - } catch (WSDLException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("wsdlException", e.getMessage()), e); - } - } - - else if (((composite.getWebServiceAnnot() != null) && - DescriptionUtils.isEmpty(composite.getWebServiceAnnot().endpointInterface())) - || - (!(composite.getWebServiceProviderAnnot() == null))) { - //This is either an implicit SEI, or a WebService Provider - if (composite.getWsdlDefinition() != null) { - URL url = composite.getWsdlURL(); - this.wsdlURL = url == null ? null : url.toString(); - - try { - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null1"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null1"); - } - } - - this.wsdlWrapper = new WSDL4JWrapper(url, - composite.getWsdlDefinition(), - configContext, - this.catalogManager); - } catch (WSDLException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("wsdlException", e.getMessage()), e); - } - } else { - String wsdlLocation = null; - wsdlLocation = composite.getWebServiceAnnot() != null ? composite.getWebServiceAnnot().wsdlLocation() : - composite.getWebServiceProviderAnnot().wsdlLocation(); - if(wsdlLocation != null - && - !"".equals(wsdlLocation)) { - setWSDLDefinitionOnDBC(wsdlLocation); - } - } - - } else if (composite.getWebServiceAnnot() != null) { - //This impl class specifies an SEI...this is a special case. There is a bug - //in the tooling that allows for the wsdllocation to be specifed on either the - //impl. class, or the SEI, or both. So, we need to look for the wsdl as follows: - // 1. If the Wsdl exists on the SEI, then check for it on the impl. - // 2. If it is not found in either location, in that order, then generate - - DescriptionBuilderComposite seic = - getDBCMap().get(composite.getWebServiceAnnot().endpointInterface()); - - try { - if (seic == null) { - if (log.isDebugEnabled()) { - log.debug("The SEI class " + composite.getWebServiceAnnot().endpointInterface() + " was not found."); - } - } - if (seic != null && seic.getWsdlDefinition() != null) { - // set the wsdl def from the SEI composite - if (log.isDebugEnabled()) { - log.debug("Get the wsdl definition from the SEI composite."); - } - URL url = seic.getWsdlURL(); - this.wsdlURL = url.toString(); - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null2"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null2"); - } - } - this.wsdlWrapper = - new WSDL4JWrapper(seic.getWsdlURL(), - seic.getWsdlDefinition(), - configContext, - this.catalogManager); - - } else if (composite.getWsdlDefinition() != null) { - - //set the wsdl def from the impl. class composite - if (log.isDebugEnabled()) { - log.debug("Get the wsdl definition from the impl class composite."); - } - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null3"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null3"); - } - } - URL url = composite.getWsdlURL(); - this.wsdlURL = url == null ? null : url.toString(); - this.wsdlWrapper = new WSDL4JWrapper(composite.getWsdlURL(), - composite.getWsdlDefinition(), - configContext, - this.catalogManager); - - } else { - String wsdlLocation = null; - // first check to see if the wsdlLocation is on the SEI - if(seic != null - && - seic.getWebServiceAnnot() != null) { - if (log.isDebugEnabled()) { - log.debug("Get the wsdl location from the SEI composite."); - } - wsdlLocation = seic.getWebServiceAnnot().wsdlLocation(); - } - - // now check the impl - if(wsdlLocation == null - || - "".equals(wsdlLocation)) { - if (log.isDebugEnabled()) { - log.debug("Get the wsdl location from the impl class composite."); - } - wsdlLocation = composite.getWebServiceAnnot().wsdlLocation(); - } - - if(wsdlLocation != null - && - !"".equals(wsdlLocation)) { - if (log.isDebugEnabled()) { - log.debug("wsdl location =" + wsdlLocation); - } - - this.wsdlURL = wsdlLocation; - setWSDLDefinitionOnDBC(wsdlLocation); - } - } - } catch (WSDLException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("wsdlException", e.getMessage()), e); - } - } - - //Deprecate this code block when MDQ is fully integrated - } else if (wsdlURL != null) { - try { - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null4"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null4"); - } - } - this.wsdlWrapper = new WSDL4JWrapper(new URL(this.wsdlURL),configContext, - this.catalogManager); - - } - catch (FileNotFoundException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("wsdlNotFoundErr", e.getMessage()), e); - } - catch (UnknownHostException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("unknownHost", e.getMessage()), e); - } - catch (ConnectException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("connectionRefused", e.getMessage()), e); - } - catch(IOException e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("urlStream", e.getMessage()), e); - } - catch (WSDLException e) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("wsdlException", e.getMessage()), e); - } - } - } - - /** - * This method accepts a location of a WSDL document and attempts to - * load and set the WSDL definition on the DBC object. - * @param wsdlLocation - */ - private void setWSDLDefinitionOnDBC(final String wsdlLocation) { - if(log.isDebugEnabled()) { - log.debug("Attempting to load WSDL file from location specified in annotation: " + - wsdlLocation); - } - if(composite.getClassLoader() == null) { - if(log.isDebugEnabled()) { - log.debug("A classloader could not be found for class: " + composite. - getClassName() + ". The WSDL file: " + wsdlLocation + " will not be " + - "processed, and the ServiceDescription will be built from " + - "annotations"); - } - } - try { - if(log.isDebugEnabled()) { - log.debug("Attempting to read WSDL: " + wsdlLocation + " for web " + - "service endpoint: " + composite.getClassName()); - } - if (log.isDebugEnabled() ) { - if (configContext != null) { - log.debug("new WSDL4JWrapper-ConfigContext not null5"); - } else { - log.debug("new WSDL4JWrapper-ConfigContext null5"); - } - } - - URL url = getWSDLURL(wsdlLocation); - ConfigurationContext cc = composite.getConfigurationContext(); - if (cc != null) { - this.wsdlWrapper = new WSDL4JWrapper(url, cc, this.catalogManager); - } else { - // Probably shouldn't get here. But if we do, use a memory sensitive - // wsdl wrapper - this.wsdlWrapper = new WSDL4JWrapper(url, this.catalogManager, true, 2); - } - composite.setWsdlDefinition(wsdlWrapper.getDefinition()); - } - catch(Exception e) { - if(log.isDebugEnabled()) { - log.debug("The WSDL file: " + wsdlLocation + " for class: " + composite.getClassName() + - "could not be processed. The ServiceDescription will be built from " + - "annotations"); - } - } - } - - /** - * This method will handle obtaining a URL for the given WSDL location. The WSDL will be - * looked for in the following places in this order: - * - * PreResolution) check for xmlcatalog resolver - * 1) As a resource on the classpath - * 2) As a fully specified URL - * 3) As a file on the filesystem. This is analagous to what the generated - * Service client does. Is prepends "file:/" to whatever is specified in the - * @WebServiceClient.wsdlLocation element. - * - * @param wsdlLocation The WSDL for which a URL is wanted - * @return A URL if the WSDL can be located, or null - */ - private URL getWSDLURL(String wsdlLocation) { - // Look for the WSDL file as follows: - // PreResolution) check for xmlcatalog resolver - wsdlLocation = resolveWSDLLocationByCatalog(wsdlLocation); - - - // 1) As a resource on the classpath - - ClassLoader loader = composite.getClassLoader(); - URL url = null; - if (loader != null) { - url = getResource(wsdlLocation, loader); - } - - // Try the context class loader - if(url == null){ - ClassLoader classLoader = getContextClassLoader(null); - if(classLoader != loader){ - url = getResource(wsdlLocation, classLoader); - } - } - - // 2) As a fully specified URL - if (url == null) { - if (log.isDebugEnabled()) { - log.debug("URL for wsdl file: " + wsdlLocation + " could not be " - + "determined by classloader... looking for file reference"); - } - url = createWsdlURL(wsdlLocation); - } - // 3) As a file on the filesystem. This is analagous to what the generated - // Service client does. Is prepends "file:/" to whatever is specified in the - // @WebServiceClient.wsdlLocation element. - if (url == null) { - if (log.isDebugEnabled()) { - log.debug("URL for wsdl file: " + wsdlLocation + " could not be " - + "found as local file reference... prepending file: protocol"); - } - // This check is necessary because Unix/Linux file paths begin - // with a '/'. When adding the prefix 'jar:file:/' we may end - // up with '//' after the 'file:' part. This causes the URL - // object to treat this like a remote resource - if(wsdlLocation.indexOf("/") == 0) { - wsdlLocation = wsdlLocation.substring(1, wsdlLocation.length()); - } - url = createWsdlURL("file:/" + wsdlLocation); - - } - if (url == null) { - if (log.isDebugEnabled()) { - log.debug("Unable to obtain URL for WSDL file: " + wsdlLocation - + " by using prepended file: protocol"); - } - } - return url; - } - - private URL getResource(final String wsdlLocation, final ClassLoader loader) { - return (URL) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - return loader.getResource(wsdlLocation); - } - } - ); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescriptionWSDL#getWSDLWrapper() - */ - public WSDLWrapper getWSDLWrapper() { - return wsdlWrapper; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescriptionWSDL#getWSDLLocation() - */ - public String getWSDLLocation() { - return wsdlURL; - } - - public WSDLWrapper getGeneratedWsdlWrapper() { - return this.generatedWsdlWrapper; - } - - void setAxisConfigContext(final ConfigurationContext config) { - this.configContext = config; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getAxisConfigContext() - */ - public ConfigurationContext getAxisConfigContext() { - if (configContext == null) { - configContext = getClientConfigurationFactory().getClientConfigurationContext(); - } - return configContext; - - } - - ClientConfigurationFactory getClientConfigurationFactory() { - - if (clientConfigFactory == null) { - clientConfigFactory = DescriptionFactory.createClientConfigurationFactory(); - } - return clientConfigFactory; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getServiceClient(javax.xml.namespace.QName) - */ - public ServiceClient getServiceClient(final QName portQName, final Object serviceDelegateKey) { - ServiceClient returnServiceClient = null; - if (!DescriptionUtils.isEmpty(portQName)) { - EndpointDescription endpointDesc = getEndpointDescription(portQName, serviceDelegateKey); - - if (endpointDesc != null) { - returnServiceClient = endpointDesc.getServiceClient(); - } - else { - // Couldn't find Endpoint Description for port QName - if (log.isDebugEnabled()) { - log.debug("Could not find portQName: " + portQName - + " under ServiceDescription: " + toString()); - } - } - } - else { - // PortQName is empty - if (log.isDebugEnabled()) { - log.debug("PortQName agrument is invalid; it can not be null or an empty string: " + portQName); - } - } - - return returnServiceClient; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getServiceQName() - */ - public QName getServiceQName() { - //It is assumed that this will always be set in the constructor rather than - //built up from the class or DBC - return serviceQName; - } - - void setServiceQName(final QName theName) { - serviceQName = theName; - } - - public JAXWSCatalogManager getCatalogManager() { - return catalogManager; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#isMTOMEnabled(java.lang.Object) - */ - public boolean isMTOMEnabled(final Object key) { - return getDescriptionBuilderComposite().isMTOMEnabled(key); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#isMTOMEnabled(java.lang.Object, Class seiClass) - */ - public boolean isMTOMEnabled(final Object key, final Class seiClass) { - if(log.isDebugEnabled()) { - log.debug("isMTOMEnabled, key= " + key + ", seiClass= " + seiClass); - } - - boolean mtomEnabled = false; - DescriptionBuilderComposite sparseComposite = getDescriptionBuilderComposite().getSparseComposite(key); - if(sparseComposite != null - && - seiClass != null) { - Map seiToMTOM = (Map) - sparseComposite.getProperties().get(MDQConstants.SEI_MTOM_ENABLEMENT_MAP); - if(seiToMTOM != null - && - seiToMTOM.get(seiClass.getName()) != null) { - mtomEnabled = seiToMTOM.get(seiClass.getName()); - } - else { - mtomEnabled = isMTOMEnabled(key); - } - } - else { - mtomEnabled = isMTOMEnabled(key); - } - - if(log.isDebugEnabled()) { - log.debug("isMTOMEnabled, key= " + key + ", seiClass= " + seiClass + ", isMTOMEnabled= " + mtomEnabled); - } - return mtomEnabled; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getBindingProperites(java.lang.Object, String key) - */ - public Map getBindingProperties(final Object serviceDelegateKey, final String key) { - if(log.isDebugEnabled()) { - log.debug("getBindingProperties, serviceDelegateKey= " + serviceDelegateKey + - ", key= " + key); - } - - Map bindingProps = null; - DescriptionBuilderComposite sparseComposite = getDescriptionBuilderComposite().getSparseComposite(serviceDelegateKey); - if(sparseComposite != null) { - Map> allBindingProps = (Map>) - sparseComposite.getProperties().get(MDQConstants.BINDING_PROPS_MAP); - bindingProps = allBindingProps != null ? (Map) allBindingProps.get(key) : null; - } - - if(log.isDebugEnabled()) { - log.debug("getBindingProperties, serviceDelegateKey= " + serviceDelegateKey + - ", key= " + key + ", propsSize= " + (bindingProps != null ? bindingProps.size() : 0)); - } - - return bindingProps; - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getPreferredPort(java.lang.Object) - */ - public QName getPreferredPort(final Object key) { - return getDescriptionBuilderComposite().getPreferredPort(key); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#isServerSide() - */ - public boolean isServerSide() { - return isServerSide; - } - - HashMap getDBCMap() { - return dbcMap; - } - - void setGeneratedWsdlWrapper(final WSDL4JWrapper wrapper) { - this.generatedWsdlWrapper = wrapper; - } - - void setWsdlWrapper(final WSDL4JWrapper wrapper) { - this.wsdlWrapper = wrapper; - } - - private void validateDBCLIntegrity() { - - //First, check the integrity of this input composite - //and retrieve - //the composite that represents this impl - - try { - validateIntegrity(); - } - catch (Exception ex) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("dbclIntegrityErr",ex.toString(),composite.toString()), ex); - } - } - - /* - * Validates the integrity of an impl. class. This should not be called directly for an SEI composite - */ - void validateIntegrity() { - //In General, this integrity checker should do gross level checking - //It should not be setting spec-defined default values, but can look - //at things like empty strings or null values - - //Verify that, if this implements a strongly typed provider interface, that it - // also contain a WebServiceProvider annotation per JAXWS Sec. 5.1 - Iterator iter = - composite.getInterfacesList().iterator(); - - // Remember if we've validated the Provider interface. Later we'll make sure that if we have an - // WebServiceProvider annotation, we found a valid interface here. - boolean providerInterfaceValid = false; - while (iter.hasNext()) { - String interfaceString = iter.next(); - if (interfaceString.equals(MDQConstants.PROVIDER_SOURCE) - || interfaceString.equals(MDQConstants.PROVIDER_SOAP) - || interfaceString.equals(MDQConstants.PROVIDER_DATASOURCE) - || interfaceString.equals(MDQConstants.PROVIDER_STRING) - || interfaceString.equals(MDQConstants.PROVIDER_OMELEMENT)) { - providerInterfaceValid = true; - //This is a provider based endpoint, make sure the annotation exists - if (composite.getWebServiceProviderAnnot() == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr1",composite.getClassName())); - } - } - } - - //Verify that WebService and WebServiceProvider are not both specified - //per JAXWS - Sec. 7.7 - if (composite.getWebServiceAnnot() != null && - composite.getWebServiceProviderAnnot() != null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr2",composite.getClassName())); - } - - if (composite.getWebServiceProviderAnnot() != null) { - if (!providerInterfaceValid) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr3",composite.getClassName())); - } - // There must be a public default constructor per JAXWS - Sec 5.1 - if (!validateDefaultConstructor()) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr4",composite.getClassName())); - } - // There must be an invoke method per JAXWS - Sec 5.1.1 - if (!validateInvokeMethod()) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr5",composite.getClassName())); - } - - //If ServiceMode annotation specifies 'payload', then make sure that it is not typed with - // SOAPMessage or DataSource - validateProviderInterfaces(); - - } else if (composite.getWebServiceAnnot() != null) { - - if (composite.getServiceModeAnnot() != null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr6",composite.getClassName())); - } - - if (!composite.isInterface()) { - // TODO: Validate on the class that this.classModifiers Array does not contain the strings - // FINAL or ABSTRACT, but does contain PUBLIC - // TODO: Validate on the class that a public constructor exists - // TODO: Validate on the class that a finalize() method does not exist - if (!DescriptionUtils.isEmpty(composite.getWebServiceAnnot().wsdlLocation())) { - if (composite.getWsdlDefinition(getServiceQName()) == null - && - composite.getWsdlDefinition() == null - && - composite.getWsdlURL() == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr7",composite.getClassName(), - composite.getWebServiceAnnot().wsdlLocation())); - } - } - - // setWebServiceAnnotDefaults(true=impl); Must happen before we start checking annot - if (!DescriptionUtils.isEmpty(composite.getWebServiceAnnot().endpointInterface())) { - - DescriptionBuilderComposite seic = - dbcMap.get(composite.getWebServiceAnnot().endpointInterface()); - - //Verify that we can find the SEI in the composite list - if (seic == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr8",composite.getClassName(), - composite.getWebServiceAnnot().endpointInterface())); - } - - // Verify that the only class annotations are WebService and HandlerChain - // (per JSR181 Sec. 3.1). Note that this applies to JSR-181 annotations; the restriction - // does not apply to JSR-224 annotations such as BindingType - if (composite.getSoapBindingAnnot() != null - || composite.getWebFaultAnnot() != null - || composite.getWebServiceClientAnnot() != null - ) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr9",composite.getClassName())); - } - - //Verify that WebService annotation does not contain a name attribute - //(per JSR181 Sec. 3.1) - if (!DescriptionUtils.isEmpty(composite.getWebServiceAnnot().name())) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr10",composite.getClassName(), - composite.getWebServiceAnnot().name())); - } - - validateSEI(seic); - //Verify that that this implementation class implements all methods in the interface - validateImplementation(seic); - - //Verify that this impl. class does not contain any @WebMethod annotations - if (webMethodAnnotationsExist()) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr11",composite.getClassName())); - } - - - } else { //this is an implicit SEI (i.e. impl w/out endpointInterface - - - checkImplicitSEIAgainstWSDL(); - // TODO: Call ValidateWebMethodAnnots() - // - this method will check that all methods are public - ??? - // - } - } else { //this is an interface...we should not be processing interfaces here - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr12",composite.getClassName())); - } - - // Verify that the SOAPBinding annotations are supported. - if (composite.getSoapBindingAnnot() != null) { - if (composite.getSoapBindingAnnot().use() == javax.jws.soap.SOAPBinding.Use.ENCODED) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateIntegrityErr13",composite.getClassName())); - } - } - - checkMethodsAgainstWSDL(); - } - } - - /** - * Validate there is an invoke method on the composite. - * - * @return - */ - private boolean validateInvokeMethod() { - boolean validInvokeMethod = false; - List invokeMethodList = - composite.getMethodDescriptionComposite("invoke"); - if (invokeMethodList != null && !invokeMethodList.isEmpty()) { - validInvokeMethod = true; - } - return validInvokeMethod; - } - - /** - * Validate that, if using PAYLOAD mode, then interfaces list cannot contain SOAPMessage or - * DataSource - * - * @return - */ - private void validateProviderInterfaces() { - - // Default for ServiceMode is 'PAYLOAD'. So, if it is specified (explicitly or - // implicitly) then verify that we are not implementing improper interfaces) - if ((composite.getServiceModeAnnot() == null) - || composite.getServiceModeAnnot().value() == javax.xml.ws.Service.Mode.PAYLOAD) { - - Iterator iter = composite.getInterfacesList().iterator(); - - while (iter.hasNext()) { - String interfaceString = iter.next(); - if (interfaceString.equals(MDQConstants.PROVIDER_SOAP) - || interfaceString.equals(MDQConstants.PROVIDER_DATASOURCE)) { - - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validatePIsErr1",composite.getClassName())); - } - } - - } else { - // We are in MESSAGE mode - // Conformance: JAXWS Spec.- Sec. 4.3 (javax.activation.DataSource) - - // REVIEW: Should the provider interface validation be moved to post-construction validation, - // since it seems that the logic to understand the default values for binding type - // (see comment below) should be left to the creation of the Description objects. - String bindingType = null; - if (composite.getBindingTypeAnnot() != null) { - bindingType = composite.getBindingTypeAnnot().value(); - } - - Iterator iter = composite.getInterfacesList().iterator(); - - while (iter.hasNext()) { - String interfaceString = iter.next(); - - if (interfaceString.equals(MDQConstants.PROVIDER_SOAP)) { - - // Make sure BindingType is SOAP/HTTP with SOAPMessage - // object, Default for Binding Type is SOAP/HTTP - if (!DescriptionUtils.isEmpty(bindingType) - && !bindingType - .equals(SOAPBinding.SOAP11HTTP_BINDING) - && !bindingType - .equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) - && !bindingType - .equals(SOAPBinding.SOAP12HTTP_BINDING) - && !bindingType - .equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING) - && !bindingType - .equals(MDQConstants.SOAP11JMS_BINDING) - && !bindingType - .equals(MDQConstants.SOAP11JMS_MTOM_BINDING) - && !bindingType - .equals(MDQConstants.SOAP12JMS_BINDING) - && !bindingType - .equals(MDQConstants.SOAP12JMS_MTOM_BINDING) - && !bindingType - .equals(MDQConstants.SOAP_HTTP_BINDING)) { - throw ExceptionFactory.makeWebServiceException(Messages - .getMessage("validatePIsErr2", composite - .getClassName())); - } - - - - } else if (interfaceString - .equals(MDQConstants.PROVIDER_DATASOURCE)) { - - // Make sure BindingType is XML/HTTP with DataSource object - if (DescriptionUtils.isEmpty(bindingType) - || !bindingType - .equals(javax.xml.ws.http.HTTPBinding.HTTP_BINDING)) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validatePIsErr3",composite.getClassName())); - } - } - } - } - } - - - /** - * Validate there is a default no-argument constructor on the composite. - * - * @return - */ - private boolean validateDefaultConstructor() { - boolean validDefaultCtor = false; - List constructorList = - composite.getMethodDescriptionComposite(""); - if (constructorList != null && !constructorList.isEmpty()) { - // There are public constructors; make sure there is one that takes no arguments. - for (MethodDescriptionComposite checkCtor : constructorList) { - List paramList = - checkCtor.getParameterDescriptionCompositeList(); - if (paramList == null || paramList.isEmpty()) { - validDefaultCtor = true; - break; - } - } - } - - return validDefaultCtor; - } - - private void validateImplementation(final DescriptionBuilderComposite seic) { - /* - * Verify that an impl class implements all the methods of the SEI. We have to verify this - * because an impl class is not required to actually use the 'implements' clause. So, if - * it doesn't, the Java compiler won't catch it. Don't need to worry about chaining - * because only one EndpointInterface can be specified, and the SEI cannot specify an - * EndpointInterface, so the Java compiler will take care of everything else. - * - * Note, however, that we do need to take overloaded methods into a consideration. The - * same method name can be specified for multiple methods, but they can have different - * parameters. Note that methods which differ only in the return type or the exceptions - * thrown are not overloaded (and therefore would cause a compile error). - */ - - List implMethods = composite.getMethodDescriptionsList(); - // Add methods declared in the implementation's superclass - addSuperClassMethods(implMethods, composite); - - List seiMethods = seic.getMethodDescriptionsList(); - // Add any methods declared in superinterfaces of the SEI - addSuperClassMethods(seiMethods, seic); - - // Make sure all the methods in the SEI (including any inherited from superinterfaces) are - // implemented by the bean (including inherited methods on the bean), taking into - // account overloaded methods. - Iterator verifySEIIterator = seiMethods.iterator(); - while (verifySEIIterator.hasNext()) { - MethodDescriptionComposite seiMDC = verifySEIIterator.next(); - - // Make sure the implementation implements this SEI method. Since we have to account - // for method overloading, we look for ALL methods with the same name in the - // implementation, then from that collection of methods, we look for one that has the - // same parameters. If we find one with the same parameters, then we check the return - // and exceptions. Note that in Java, overloaded methods are ones that have the same - // name but different parameters; a difference in the return type or thrown exceptions - // does not constitute overloading and is a compile error. - Iterator implMDCIterator = implMethods.iterator(); - boolean methodImplFound = false; - while (implMDCIterator.hasNext()) { - MethodDescriptionComposite implMDC = implMDCIterator.next(); - - if (seiMDC.getMethodName().equals(implMDC.getMethodName())) { - // The method names match, so now check the parameters - try { - validateMethodParameters(seiMDC, implMDC, seic.getClassName()); - methodImplFound = true; - } - catch (Exception ex) { - // The parameters didn't match, so we'll check the next - // implemntation method on the next iteration of the inner loop. - } - - // If the name and the parameters matched, then we've found the method - // implementation, even if it was overloaded. Now check the return value and - // thrown exceptions. Note these will methods throw exceptions if validation fails. - // If all the validation passes, we can break out of the inner loop since we - // found the implementation for this sei method. - if (methodImplFound) { - validateMethodExceptions(seiMDC, implMDC, seic.getClassName()); - validateMethodReturnValue(seiMDC, implMDC, seic.getClassName()); - break; - } - } - } - - if (!methodImplFound) { - // We didn't find the implementation for this SEI method, so throw a validation - // exception. - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateImplErr",composite.getClassName(), - seiMDC.getMethodName(),seic.getClassName())); - } - } - } - - private void validateMethodParameters(final MethodDescriptionComposite seiMDC, - final MethodDescriptionComposite implMDC, final String className) { - List seiPDCList = seiMDC - .getParameterDescriptionCompositeList(); - List implPDCList = implMDC - .getParameterDescriptionCompositeList(); - if ((seiPDCList == null || seiPDCList.isEmpty()) - && (implPDCList == null || implPDCList.isEmpty())) { - // There are no parameters on the SEI or the impl; all is well - } else if ((seiPDCList == null || seiPDCList.isEmpty()) - && !(implPDCList == null || implPDCList.isEmpty())) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodParamErr1",implPDCList.toString(), - composite.getClassName(),seiMDC.getMethodName(),className)); - } else if ((seiPDCList != null && !seiPDCList.isEmpty()) - && !(implPDCList != null && !implPDCList.isEmpty())) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodParamErr2",seiPDCList.toString(), - composite.getClassName(),seiMDC.getMethodName(),className)); - } else if (seiPDCList.size() != implPDCList.size()) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodParamErr3", - new Integer(seiPDCList.size()).toString(), - new Integer(implPDCList.size()).toString(),composite.getClassName(), - seiMDC.getMethodName(),className)); - } else { - // Make sure the order and type of parameters match - // REVIEW: This checks for strict equality of the fully qualified - // type. It does not - // take into consideration object hierachy. For example foo(Animal) - // will not equal bar(Zebra) - boolean parametersMatch = true; - String failingMessage = null; - for (int paramNumber = 0; paramNumber < seiPDCList.size(); paramNumber++) { - String seiParamType = seiPDCList.get(paramNumber).getParameterType(); - String implParamType = implPDCList.get(paramNumber).getParameterType(); - if (!seiParamType.equals(implParamType)) { - parametersMatch = false; - String[] inserts = new String[] { - String.valueOf(paramNumber), - seiParamType, - implParamType, - composite.getClassName(), - seiMDC.getMethodName(), - className - }; - - failingMessage = Messages.getMessage("serviceDescriptionImplValidationErr", - inserts); - - break; - } - } - if (!parametersMatch) { - throw ExceptionFactory.makeWebServiceException(failingMessage); - } - } - } - - private void validateMethodReturnValue(final MethodDescriptionComposite seiMDC, - final MethodDescriptionComposite implMDC, final String className) { - String seiReturnValue = seiMDC.getReturnType(); - String implReturnValue = implMDC.getReturnType(); - - if (seiReturnValue == null && implReturnValue == null) { - // Neither specify a return value; all is well - } else if (seiReturnValue == null && implReturnValue != null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodRVErr1",implReturnValue, - composite.getClassName(),seiMDC.getMethodName(),className)); - } else if (seiReturnValue != null && implReturnValue == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodRVErr2",seiReturnValue, - composite.getClassName(),seiMDC.getMethodName(),className)); - } else if (!seiReturnValue.equals(implReturnValue)) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodRVErr3",seiReturnValue,implReturnValue, - composite.getClassName(),seiMDC.getMethodName(),className)); - } - - } - - private void validateMethodExceptions ( final MethodDescriptionComposite seiMDC, - final MethodDescriptionComposite implMDC, - final String className) { - - String[] seiExceptions = seiMDC.getExceptions(); - String[] implExceptions = implMDC.getExceptions(); - - // An impl can choose to throw fewer checked exceptions than declared on the SEI, but not more. - // This is analagous to the Java rules for interfaces. - if (seiExceptions == null) { - if (implExceptions == null) { - return; - } else { - // SEI delcares no checked exceptions, but the implementation has checked exceptions, which is an error - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodExceptionErr1", - composite.getClassName(),seiMDC.getMethodName(),className)); - } - } else if (implExceptions == null) { - // Implementation throws fewer checked exceptions than SEI, which is OK. - return; - } - - // Check the list length; An implementation can not declare more exceptions than the SEI - if (seiExceptions.length < implExceptions.length) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodExceptionErr2", - new Integer(implExceptions.length).toString(), - new Integer(seiExceptions.length).toString(), - composite.getClassName(),seiMDC.getMethodName(),className)); - } - - // Make sure that each checked exception declared by the - // implementation is on the SEI also - if (implExceptions.length > 0) { - for (String implException : implExceptions) { - boolean foundIt = false; - if (seiExceptions.length > 0) { - for (String seiException : seiExceptions) { - if (seiException.equals(implException)) { - foundIt = true; - break; - } - } - } - - if (!foundIt) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateMethodExceptionErr3",implException, - composite.getClassName(),seiMDC.getMethodName(),className)); - } - } - } - - } - - /** - * Adds any methods declared in superclasses to the List. The hierachy starting with the DBC - * will be walked up recursively, adding methods from each parent DBC encountered. - *

    - * Note that this can be used for either classes or interfaces. - * - * @param methodList The current collection of methods, including overloaded ones - * @param dbc The composite to be checked for methods to be added to the collection - */ - private void addSuperClassMethods(final List methodList, final DescriptionBuilderComposite dbc) { - DescriptionBuilderComposite superDBC = dbcMap.get(dbc.getSuperClassName()); - if (superDBC != null) { - Iterator mIter = superDBC.getMethodDescriptionsList().iterator(); - while (mIter.hasNext()) { - MethodDescriptionComposite mdc = mIter.next(); - methodList.add(mdc); - } - addSuperClassMethods(methodList, superDBC); - } - } - - - /* - * This method verifies that, if there are any WebMethod with exclude == false, then - * make sure that we find all of those methods represented in the wsdl. However, if - * there are no exclusions == false, or there are no WebMethod annotations, then verify - * that all the public methods are in the wsdl - */ - private void checkMethodsAgainstWSDL() { - // Verify that, for ImplicitSEI, that all methods that should exist(if one false found, then - // only look for WebMethods w/ False, else take all public methods but ignore those with - // exclude == true - if (webMethodAnnotationsExist()) { - if (DescriptionUtils.falseExclusionsExist(composite)) { - verifyFalseExclusionsWithWSDL(); - } else { - verifyPublicMethodsWithWSDL(); - } - } else { - verifyPublicMethodsWithWSDL(); - } - } - - private void checkImplicitSEIAgainstWSDL() { - - //TODO: If there is a WSDL, then verify that all WebMethods on this class and in the - // superclasses chain are represented in the WSDL...Look at logic below to make - // sure this really happening - - - if (webMethodAnnotationsExist()) { - if (DescriptionUtils.falseExclusionsExist(composite)) { - verifyFalseExclusionsWithWSDL(); - } else { - verifyPublicMethodsWithWSDL(); - } - } else { - verifyPublicMethodsWithWSDL(); - } - - } - - private void checkSEIAgainstWSDL() { - //TODO: Place logic here to verify that each publicMethod with WebMethod annot - // is contained in the WSDL (If there is a WSDL) If we find - // a WebMethod annotation, use its values for looking in the WSDL - - } - - private void validateSEI(final DescriptionBuilderComposite seic) { - - if (seic.getWebServiceAnnot() == null) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateSEIErr1",composite.getClassName(),seic.getClassName())); - } - if (!seic.getWebServiceAnnot().endpointInterface().equals("")) { - throw ExceptionFactory.makeWebServiceException( - Messages.getMessage("validateSEIErr2",composite.getClassName(), - seic.getClassName(),seic.getWebServiceAnnot().endpointInterface())); - } - // Verify that the SOAPBinding annotations are supported. - if (seic.getSoapBindingAnnot() != null && - seic.getSoapBindingAnnot().use() == javax.jws.soap.SOAPBinding.Use.ENCODED) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("validateSEIErr3",seic.getClassName())); - } - - checkSEIAgainstWSDL(); - - //TODO: More validation here - - //TODO: Make sure we don't find any WebMethod annotations with exclude == true - // anywhere in the superclasses chain - - //TODO: Check that all WebMethod annotations in the superclass chain are represented in - // WSDL, assuming there is WSDL - - //TODO: Validate that the interface is public - - // Call ValidateWebMethodAnnots() - // - - //This will perform validation for all methods, regardless of WebMethod annotations - //It is called for the SEI, and an impl. class that does not specify an endpointInterface - validateMethods(seic.getMethodDescriptionsList()); - } - - /** @return Returns TRUE if we find just one WebMethod Annotation */ - private boolean webMethodAnnotationsExist() { - MethodDescriptionComposite mdc = null; - Iterator iter = - composite.getMethodDescriptionsList().iterator(); - - while (iter.hasNext()) { - mdc = iter.next(); - - if (mdc.getWebMethodAnnot() != null) { - return true; - } - } - - return false; - } - - private void verifyFalseExclusionsWithWSDL() { - //TODO: Place logic here to verify that each exclude==false WebMethod annot we find - // is contained in the WSDL - } - - private void verifyPublicMethodsWithWSDL() { - //TODO: Place logic here to verify that each publicMethod with no WebMethod annot - // is contained in the WSDL - - } - - - private void validateMethods(final List mdcList) { - if (mdcList != null && !mdcList.isEmpty()) { - for (MethodDescriptionComposite mdc : mdcList) { - String returnType = mdc.getReturnType(); - if (returnType != null - && (returnType.equals(RETURN_TYPE_FUTURE) || returnType - .equals(RETURN_TYPE_RESPONSE))) { - throw ExceptionFactory.makeWebServiceException(Messages - .getMessage("serverSideAsync", mdc.getDeclaringClass(), mdc - .getMethodName())); - } - // Verify that the SOAPBinding annotation values are supported. - if (mdc.getSoapBindingAnnot() != null) { - - // For this JAXWS engine, SOAPBinding.Use = ENCODED is unsupported - if (mdc.getSoapBindingAnnot().use() == javax.jws.soap.SOAPBinding.Use.ENCODED) { - throw ExceptionFactory. - makeWebServiceException(Messages.getMessage("soapBindingUseEncoded", - mdc.getDeclaringClass(), - mdc.getMethodName())); - - } - - // Verify that, if a SOAPBinding annotation exists, that its style be set to - // only DOCUMENT JSR181-Sec 4.7.1 - if (mdc.getSoapBindingAnnot().style() == javax.jws.soap.SOAPBinding.Style.RPC) { - throw ExceptionFactory. - makeWebServiceException(Messages.getMessage("soapBindingStyle", - mdc.getDeclaringClass(), - mdc.getMethodName())); - } - - } - } - } - // TODO: Fill this out to validate all MethodDescriptionComposite (and - // their inclusive - // annotations on this SEI (SEI is assumed here) - //check oneway - // - - //This could be an SEI, or an impl. class that doesn' specify an EndpointInterface (so, it - //is implicitly an SEI...need to consider this - // - - //TODO: Verify that, if this is an interface...that there are no Methods with WebMethod - // annotations that contain exclude == true - - //TODO: Verify that, if a SOAPBinding annotation exists, that its style be set to - // only DOCUMENT JSR181-Sec 4.7.1 - - } - - private void validateWSDLOperations() { - //Verifies that all operations on the wsdl are found in the impl/sei class - } - - public boolean isWSDLSpecified() { - boolean wsdlSpecified = false; - if (getWSDLWrapper() != null) { - wsdlSpecified = (getWSDLWrapper().getDefinition() != null); - } - return wsdlSpecified; - } - - - // =========================================== - // ANNOTATION: HandlerChain - // =========================================== - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getHandlerChain() - */ - public HandlerChainsType getHandlerChain() { - return getHandlerChain(null); - } - - /* (non-Javadoc) - * @see org.apache.axis2.jaxws.description.ServiceDescription#getHandlerChain(java.lang.Object) - */ - public HandlerChainsType getHandlerChain(final Object sparseCompositeKey) { - DescriptionBuilderComposite sparseComposite = null; - - // If there is a HandlerChainsType in the sparse composite for this ServiceDelegate - // (i.e. this sparseCompositeKey), then return that. - if (sparseCompositeKey != null) { - sparseComposite = composite.getSparseComposite(sparseCompositeKey); - if (sparseComposite != null && sparseComposite.getHandlerChainsType() != null) { - return sparseComposite.getHandlerChainsType(); - } - } - - // If there is no HandlerChainsType in the composite, then read in the file specified - // on the HandlerChain annotation if it is present. - if (handlerChainsType == null) { - - getAnnoHandlerChainAnnotation(sparseCompositeKey); - if (handlerChainAnnotation != null) { - - String handlerFileName = handlerChainAnnotation.file(); - - if (log.isDebugEnabled()) { - log.debug("EndpointDescriptionImpl.getHandlerChain: fileName: " - + handlerFileName + " className: " + composite.getClassName()); - } - - String className = composite.getClassName(); - - ClassLoader classLoader = composite.getClassLoader(); - - InputStream is = - DescriptionUtils.openHandlerConfigStream(handlerFileName, - className, - classLoader); - if (is == null) { - // config stream is still null. This may mean the @HandlerChain annotation is on a *driver* class - // next to a @WebServiceRef annotation, so the path is relative to the class declaring @HandlerChain - // and NOT relative to the Service or Endpoint class, which also means we should use the sparseComposite - // since that is where the @HandlerChain annotation info would have been loaded. - if (sparseComposite != null) { - String handlerChainDeclaringClass = (String)sparseComposite.getProperties().get(MDQConstants.HANDLER_CHAIN_DECLARING_CLASS); - if (handlerChainDeclaringClass != null) { - className = handlerChainDeclaringClass; - is = DescriptionUtils.openHandlerConfigStream(handlerFileName, className, classLoader); - } - } - } - - if(is == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("handlerChainNS", - handlerFileName, className)); - - } - else { - handlerChainsType = - DescriptionUtils.loadHandlerChains(is, - getClassLoader(this.getClass())); - } - } - } - return handlerChainsType; - } - - - /* - * This is a client side only method. The generated service class may contain - * handler chain annotations - */ - public HandlerChain getAnnoHandlerChainAnnotation(final Object sparseCompositeKey) { - if (this.handlerChainAnnotation == null) { - Class serviceClass = composite.getCorrespondingClass(); - if (serviceClass != null) { - handlerChainAnnotation = - (HandlerChain) getAnnotation(serviceClass, HandlerChain.class); - } - } - if (handlerChainAnnotation == null) { - if (sparseCompositeKey != null) { - DescriptionBuilderComposite sparseComposite = composite.getSparseComposite(sparseCompositeKey); - if (sparseComposite != null && sparseComposite.getHandlerChainAnnot() != null) { - handlerChainAnnotation = sparseComposite.getHandlerChainAnnot(); - } - } - } - - return handlerChainAnnotation; - } - - /* Returns the WSDL definiton as specified in the metadata. Note that this WSDL may not be - * complete. - */ - public Definition getWSDLDefinition() { - Definition defn = null; - if (getWSDLWrapper() != null) { - defn = getWSDLWrapper().getDefinition(); - } - return defn; - } - - /** - * Returns the WSDL definiton as created by calling the WSDL generator. This will be null - * unless the WSDL definition provided by the metadata is incomplete - */ - public Definition getWSDLGeneratedDefinition() { - Definition defn = null; - if (getGeneratedWsdlWrapper() != null) { - defn = getGeneratedWsdlWrapper().getDefinition(); - } - return defn; - } - - public Service getWSDLService() { - Service returnWSDLService = null; - Definition defn = getWSDLDefinition(); - if (defn != null) { - returnWSDLService = defn.getService(getServiceQName()); - } - return returnWSDLService; - } - - public Map getWSDLPorts() { - Service wsdlService = getWSDLService(); - if (wsdlService != null) { - return wsdlService.getPorts(); - } else { - return null; - } - } - - public List getPorts(final Object serviceDelegateKey) { - ArrayList portList = new ArrayList(); - // Note that we don't cache these results because the list of ports can be added - // to via getPort(...) and addPort(...). - - // If the WSDL is specified, get the list of ports under this service - Map wsdlPortsMap = getWSDLPorts(); - if (wsdlPortsMap != null) { - Iterator wsdlPortsIterator = wsdlPortsMap.values().iterator(); - // Note that the WSDL Ports do not have a target namespace associated with them. - // JAXWS says to use the TNS from the Service. - String serviceTNS = getServiceQName().getNamespaceURI(); - for (Port wsdlPort = null; wsdlPortsIterator.hasNext();) { - wsdlPort = (Port)wsdlPortsIterator.next(); - String wsdlPortLocalPart = wsdlPort.getName(); - portList.add(new QName(serviceTNS, wsdlPortLocalPart)); - } - } - - // Go through the list of Endpoints that have been created and add any - // not already in the list. This will include ports added to the Service - // via getPort(...) and addPort(...) - Collection endpointDescs = getEndpointDescriptions_AsCollection(); - for (EndpointDescription endpointDesc : endpointDescs) { - QName endpointPortQName = endpointDesc.getPortQName(); - if (!portList.contains(endpointPortQName)) { - portList.add(endpointPortQName); - } - } - - //Retrieve all the dynamic ports for this client - if (serviceDelegateKey != null) { - Collection dynamicEndpointDescs = getDynamicEndpointDescriptions_AsCollection(serviceDelegateKey); - if (dynamicEndpointDescs != null) { - for (EndpointDescription dynamicEndpointDesc : dynamicEndpointDescs) { - QName endpointPortQName = dynamicEndpointDesc - .getPortQName(); - if (!portList.contains(endpointPortQName)) { - portList.add(endpointPortQName); - } - } - } - } - return portList; - } - - public List getWSDLPortsUsingPortType(final QName portTypeQN) { - ArrayList portList = new ArrayList(); - if (!DescriptionUtils.isEmpty(portTypeQN)) { - Map wsdlPortMap = getWSDLPorts(); - if (wsdlPortMap != null && !wsdlPortMap.isEmpty()) { - for (Object mapElement : wsdlPortMap.values()) { - Port wsdlPort = (Port)mapElement; - PortType wsdlPortType = wsdlPort.getBinding().getPortType(); - QName wsdlPortTypeQN = wsdlPortType.getQName(); - if (portTypeQN.equals(wsdlPortTypeQN)) { - portList.add(wsdlPort); - } - } - } - } - return portList; - } - - public List getWSDLPortsUsingSOAPAddress(final List wsdlPorts) { - ArrayList portsUsingAddress = new ArrayList(); - if (wsdlPorts != null && !wsdlPorts.isEmpty()) { - for (Port checkPort : wsdlPorts) { - List extensibilityElementList = checkPort.getExtensibilityElements(); - for (Object checkElement : extensibilityElementList) { - if (EndpointDescriptionImpl - .isSOAPAddressElement((ExtensibilityElement)checkElement)) { - portsUsingAddress.add(checkPort); - } - } - } - } - return portsUsingAddress; - } - - public ServiceRuntimeDescription getServiceRuntimeDesc(final String name) { - return runtimeDescMap.get(name); - } - - public void setServiceRuntimeDesc(final ServiceRuntimeDescription srd) { - runtimeDescMap.put(srd.getKey(), srd); - } - - private void resetServiceRuntimeDescription() { - runtimeDescMap.clear(); - } - - /** - * Return the name of the client-side service class if it exists. - */ - protected String getServiceClassName() { - return composite.getClassName(); - } - - private EndpointDescriptionImpl getDynamicEndpointDescriptionImpl(final QName portQName, final Object key) { - Map innerMap = null; - synchronized(dynamicEndpointDescriptions) { - innerMap = dynamicEndpointDescriptions.get(key); - if (innerMap != null) { - return innerMap.get(portQName); - } - } - return null; - } - - private void addDynamicEndpointDescriptionImpl(final EndpointDescriptionImpl endpointDescriptionImpl, - final Object key) { - Map innerMap = null; - synchronized(dynamicEndpointDescriptions) { - innerMap = dynamicEndpointDescriptions.get(key); - if (innerMap == null) { - innerMap = new HashMap(); - dynamicEndpointDescriptions.put(key, innerMap); - } - innerMap.put(endpointDescriptionImpl.getPortQName(), endpointDescriptionImpl); - } - } - - /** Return a string representing this Description object and all the objects it contains. */ - @Override - public String toString() { - final String newline = "\n"; - final String sameline = "; "; - // This produces a TREMENDOUS amount of output if we have the WSDL Definition objects - // do a toString on themselves. - boolean dumpWSDLContents = false; - StringBuffer string = new StringBuffer(); - try { - // Basic information - string.append(super.toString()); - string.append(newline); - string.append("ServiceQName: " + getServiceQName()); - // WSDL information - string.append(newline); - string.append("isWSDLSpecified: " + isWSDLSpecified()); - string.append(sameline); - string.append("WSDL Location: " + getWSDLLocation()); - string.append(newline); - if (dumpWSDLContents) { - string.append("WSDL Definition: " + getWSDLDefinition()); - string.append(newline); - string.append("Generated WSDL Definition: " + getWSDLGeneratedDefinition()); - } else { - string.append("WSDL Definition available: " + (getWSDLDefinition() != null)); - string.append(sameline); - string.append("Generated WSDL Definition available: " + - (getWSDLGeneratedDefinition() != null)); - } - // Ports - string.append(newline); - List ports = getPorts(null); - string.append("Number of defined ports: " + ports.size()); - //TODO: Show the map that contains the dynamic ports - string.append(newline); - string.append("Port QNames: "); - for (QName port : ports) { - string.append(port + sameline); - } - // Axis Config information - // We don't print out the config context because it will force one to be created - // if it doesn't already exist. - // string.append(newline); - // string.append("ConfigurationContext: " + getAxisConfigContext()); - // EndpointDescriptions - string.append(newline); - Collection endpointDescs = getEndpointDescriptions_AsCollection(); - if (endpointDescs == null) { - string.append("EndpointDescription array is null"); - } - else { - string.append("Number of EndpointDescrptions: " + endpointDescs.size()); - string.append(newline); - for (EndpointDescription endpointDesc : endpointDescs) { - string.append(endpointDesc.toString()); - string.append(newline); - } - } - string.append("RuntimeDescriptions:" + this.runtimeDescMap.size()); - string.append(newline); - for (ServiceRuntimeDescription runtimeDesc : runtimeDescMap.values()) { - string.append(runtimeDesc.toString()); - string.append(newline); - } - } - catch (Throwable t) { - string.append(newline); - string.append("Complete debug information not currently available for " + - "ServiceDescription"); - return string.toString(); - } - return string.toString(); - - } - /** - * Get an annotation. This is wrappered to avoid a Java2Security violation. - * @param cls Class that contains annotation - * @param annotation Class of requrested Annotation - * @return annotation or null - */ - private static Annotation getAnnotation(final Class cls, final Class annotation) { - return (Annotation) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - return cls.getAnnotation(annotation); - } - }); - } - - private static ClassLoader getContextClassLoader(final ClassLoader classLoader) { - ClassLoader cl; - try { - cl = (ClassLoader) AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws ClassNotFoundException { - return classLoader != null ? classLoader : Thread.currentThread().getContextClassLoader(); - } - } - ); - } catch (PrivilegedActionException e) { - if (log.isDebugEnabled()) { - log.debug("Exception thrown from AccessController: " + e.getMessage(), e); - } - throw ExceptionFactory.makeWebServiceException(e.getException()); - } - - return cl; - } - - private static ClassLoader getClassLoader(final Class cls) { - ClassLoader cl = null; - try { - cl = (ClassLoader) AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws ClassNotFoundException { - return cls.getClassLoader(); - } - } - ); - } catch (PrivilegedActionException e) { - if (log.isDebugEnabled()) { - log.debug("Exception thrown from AccessController: " + e); - } - throw ExceptionFactory.makeWebServiceException(e.getException()); - } - - return cl; - } - - public void setResolvedHandlersDescription(final PortInfo portInfo, final ResolvedHandlersDescription resolvedHandlersInfo) { - // Get the cache and store the handler description - Map cache = resolvedHandlersDescription.get(); - - if (cache == null) { - cache = new ConcurrentHashMap(); - resolvedHandlersDescription = - new SoftReference>(cache); - - } - cache.put(portInfo, resolvedHandlersInfo); - - } - - - public ResolvedHandlersDescription getResolvedHandlersDescription(final PortInfo portInfo) { - Map cache = resolvedHandlersDescription.get(); - - return (cache == null) ? - null: // No Cache - cache.get(portInfo); - - } - - private String resolveWSDLLocationByCatalog(final String wsdlLocation) { - if (catalogManager != null) { - Catalog catalog = catalogManager.getCatalog(); - if (catalog != null) { - String resolvedLocation = null; - try { - resolvedLocation = catalog.resolveSystem(wsdlLocation); - if (resolvedLocation == null) { - resolvedLocation = catalog.resolveURI(wsdlLocation); - } - // normally, one might also do the following, but in this case we're looking at a top-level WSDL, so no parent - // resolvedLocation = catalog.resolvePublic(wsdlLocation, parent); - if (resolvedLocation != null) { - if (log.isDebugEnabled()) { - log.debug("XMLCatalog transformed original wsdl location \"" - + wsdlLocation - + "\" to \"" - + resolvedLocation + "\""); - } - return resolvedLocation; - } - } catch (Exception e) { - if (log.isDebugEnabled()) { - log.debug("Catalog resolution attempt caused exception: " - + e); - } - } - } - } - return wsdlLocation; - } - - /** - * Increment the use count for this ServiceDescription instance. Note the use count is - * only used on the client side. - * @return - */ - boolean isInUse() { - return useCount > 0; - } - - /** - * Register that this ServiceDescription is being used by a service delegate instance. Note - * this is only used on the client side (since the service delegate is what is being - * registered). - * - * Note that this is package protected since only the implementation classes should be calling - * it. - */ - void registerUse() { - useCount++; - } - - /** - * Deregister that this ServiceDescription is being used by a service delegate instance. Note - * this is only used on the client side (since the service delegate is what is being - * registered). - - * Note that this is package protected since only the implementation classes should be calling - * it. - */ - void deregisterUse() { - if (useCount > 0) { - useCount--; - } - } - - public void releaseResources(final Object delegate) { - try { - if (log.isDebugEnabled()) { - log.debug("ServiceDescription release resources called with delegate " + delegate); - } - // If the service desc can be removed from the cache, which means no other service delegates - // are using it, then we will release the resources associated with it. If it can't be - // removed because it is still in use, then just return. - if (!DescriptionFactoryImpl.removeFromCache(this)) { - if (log.isDebugEnabled()) { - log.debug("ServiceDesc was not removed from cache, so it will not be released"); - } - return; - } - - if (log.isDebugEnabled()) { - log.debug("ServiceDesc was removed from cache, so releasing associated resources"); - } - - - // Close all the endpoint descs, both declared and dynamic - Collection definedEndpoints = definedEndpointDescriptions.values(); - if (definedEndpoints.size() > 0) { - if (log.isDebugEnabled()) { - log.debug("Releasing defined endpoints, size: " + definedEndpoints.size()); - } - for (EndpointDescription endpointDesc : definedEndpoints) { - ((EndpointDescriptionImpl) endpointDesc).releaseResources(getAxisConfigContext()); - } - } - definedEndpointDescriptions.clear(); - - Collection> dynamicEndpointsMap = - dynamicEndpointDescriptions.values(); - if (log.isDebugEnabled()) { - log.debug("Releasing dynamic endpoints, size: " + dynamicEndpointsMap.size()); - } - Iterator> dynamicEndpointsMapIterator = dynamicEndpointsMap.iterator(); - while (dynamicEndpointsMapIterator.hasNext()) { - Map mapEntry = dynamicEndpointsMapIterator.next(); - Collection dynamicEndpoints = mapEntry.values(); - if (dynamicEndpoints != null && dynamicEndpoints.size() > 0) { - for (EndpointDescription endpointDesc : dynamicEndpoints) { - ((EndpointDescriptionImpl) endpointDesc).releaseResources(getAxisConfigContext()); - // Remove this endpoint from the list on axis config - removeFromDynamicEndpointCache(endpointDesc); - } - } - } - dynamicEndpointDescriptions.clear(); - - } catch (Throwable t) { - if (log.isDebugEnabled()) { - log.debug("Release resorces in ServiceDesc caught throwable ", t); - } - throw ExceptionFactory.makeWebServiceException(t); - } - } - - /** - * Remove the endpointDescription from the list of dynamic ports held on the - * AxisConfiguration object. - * - * @param endpointDesc The endpointDescription to be removed from the list. - */ - private void removeFromDynamicEndpointCache(final EndpointDescription endpointDesc) { - AxisConfiguration configuration = configContext.getAxisConfiguration(); - Parameter parameter = configuration.getParameter(JAXWS_DYNAMIC_ENDPOINTS); - HashMap cachedDescriptions = (HashMap) - ((parameter == null) ? null : parameter.getValue()); - if (cachedDescriptions != null) { - synchronized(cachedDescriptions) { - Set cachedDescSet = cachedDescriptions.entrySet(); - Iterator cachedDescIterator = cachedDescSet.iterator(); - while (cachedDescIterator.hasNext()) { - Map.Entry mapEntry = (Map.Entry) cachedDescIterator.next(); - WeakReference weakRef = (WeakReference) mapEntry.getValue(); - if (weakRef != null) { - EndpointDescriptionImpl checkDynamicEndpointDesc = (EndpointDescriptionImpl) weakRef.get(); - if (endpointDesc == checkDynamicEndpointDesc) { - cachedDescIterator.remove(); - if (log.isDebugEnabled()) { - log.debug("Removing endpoint desc from dynamic cache on configuration"); - } - } - } - } - } - } - } -} - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/URIResolverImpl.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/URIResolverImpl.java deleted file mode 100644 index 1adaf1615a..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/jaxws/description/impl/URIResolverImpl.java +++ /dev/null @@ -1,310 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.jaxws.description.impl; - -import java.io.File; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; - -import org.apache.axis2.jaxws.ExceptionFactory; -import org.apache.axis2.jaxws.i18n.Messages; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.ws.commons.schema.resolver.URIResolver; -import org.xml.sax.InputSource; - -/** This class is used to locate xml schemas that are imported by wsdl documents. */ -public class URIResolverImpl implements URIResolver { - - private final String HTTP_PROTOCOL = "http"; - - private final String HTTPS_PROTOCOL = "https"; - - private final String FILE_PROTOCOL = "file"; - - private final String JAR_PROTOCOL = "jar"; - - private ClassLoader classLoader; - - private static final Log log = LogFactory.getLog(URIResolverImpl.class); - - public URIResolverImpl() { - } - - public URIResolverImpl(final ClassLoader cl) { - classLoader = cl; - } - - public InputSource resolveEntity(final String namespace, final String schemaLocation, - final String baseUri) { - //TODO: Temporary, please change the following log.info to log.debug - log.info("resolveEntity: ["+ namespace + "]["+ schemaLocation + "][ " + baseUri+ "]"); - - InputStream is = null; - URI pathURI = null; - String pathURIStr = null; - if(log.isDebugEnabled()) { - log.debug("Import location: " + schemaLocation + " parent document: " + - baseUri); - } - if (baseUri != null) { - try { - // if the location is an absolute path, build a URL directly - // from it - if(log.isDebugEnabled()){ - log.debug("Base URI not null"); - } - if (isAbsolute(schemaLocation)) { - if(log.isDebugEnabled()) { - log.debug("Retrieving input stream for absolute schema location: " - + schemaLocation); - } - is = getInputStreamForURI(schemaLocation); - } - - else { - if(log.isDebugEnabled()){ - log.debug("schemaLocation not in absolute path"); - } - try{ - pathURI = new URI(baseUri); - }catch(URISyntaxException e){ - // Got URISyntaxException, Creation of URI requires - // that we use special escape characters in path. - // The URI constructor below does this for us, so lets use that. - if(log.isDebugEnabled()){ - log.debug("Got URISyntaxException. Exception Message = "+e.getMessage()); - log.debug("Implementing alternate way to create URI"); - } - pathURI = new URI(null, null, baseUri, null); - } - pathURIStr = schemaLocation; - // If this is absolute we need to resolve the path without the - // scheme information - if (pathURI.isAbsolute()) { - if(log.isDebugEnabled()) { - log.debug("Parent document is at absolute location: " + - pathURI.toString()); - } - URL url = new URL(baseUri); - if (url != null) { - URI tempURI; - try{ - tempURI = new URI(url.getPath()); - }catch(URISyntaxException e){ - //Got URISyntaxException, Creation of URI requires - // that we use special escape characters in path. - // The URI constructor below does this for us, so lets use that. - if(log.isDebugEnabled()){ - log.debug("Got URISyntaxException. Exception Message = "+e.getMessage()); - log.debug("Implementing alternate way to create URI"); - } - tempURI = new URI(null, null, url.getPath(), null); - } - URI resolvedURI = tempURI.resolve(schemaLocation); - // Add back the scheme to the resolved path - pathURIStr = constructPath(url, resolvedURI); - if(log.isDebugEnabled()) { - log.debug("Resolved this path to imported document: " + - pathURIStr); - } - } - } else { - if(log.isDebugEnabled()) { - log.debug("Parent document is at relative location: " + - pathURI.toString()); - } - pathURI = pathURI.resolve(schemaLocation); - pathURIStr = pathURI.toString(); - if(log.isDebugEnabled()) { - log.debug("Resolved this path to imported document: " + - pathURIStr); - } - } - // If path is absolute, build URL directly from it - if (isAbsolute(pathURIStr)) { - is = getInputStreamForURI(pathURIStr); - } - - // if the location is relative, we need to resolve the - // location using - // the baseURI, then use the loadStrategy to gain an input - // stream - // because the URI will still be relative to the module - else { - is = classLoader - .getResourceAsStream(pathURI.toString()); - } - } - } catch (Exception e) { - if(log.isDebugEnabled()) { - log.debug("Exception occured in resolveEntity, ignoring exception continuing processing "+e.getMessage()); - log.debug(e); - } - } - } - if(is == null) { - if(log.isDebugEnabled()) { - log.debug("XSD input stream is null after resolving import for: " + - schemaLocation + " from parent document: " + baseUri); - } - } - else { - if(log.isDebugEnabled()) { - log.debug("XSD input stream is not null after resolving import for: " + - schemaLocation + " from parent document: " + baseUri); - } - } - - InputSource returnInputSource = new InputSource(is); - // We need to set the systemId. XmlSchema will use this value to maintain a collection of - // imported XSDs that have been read. If this value is null, then circular XSDs will - // cause infinite recursive reads. - returnInputSource.setSystemId(pathURIStr != null ? pathURIStr : schemaLocation); - //TODO: Temporary, please change the following log.info to log.debug - log.info("returnInputSource :" + returnInputSource.getSystemId()); - return returnInputSource; - } - - /** - * Checks to see if the location given is an absolute (actual) or relative path. - * - * @param location - * @return - */ - private boolean isAbsolute(final String location) { - boolean absolute = false; - if (location.indexOf(":/") != -1) { - absolute = true; - } else if (location.indexOf(":\\") != -1) { - absolute = true; - } else if (location.indexOf("file:") != -1) { - absolute = true; - } - return absolute; - } - - /** - * Gets input stream from the uri given. If we cannot find the stream, null is - * returned. - * - * @param uri - * @return - */ - private InputStream getInputStreamForURI(final String uri) { - URL streamURL = null; - InputStream is = null; - URI pathURI = null; - - try { - streamURL = new URL(uri); - is = streamURL.openStream(); - } catch (Throwable t) { - //Exception handling not needed - } - - if (is == null) { - try { - pathURI = new URI(uri); - streamURL = pathURI.toURL(); - is = streamURL.openStream(); - } catch (Throwable t) { - //Exception handling not needed - } - } - - if (is == null) { - try { - File file = new File(uri); - streamURL = file.toURL(); - is = streamURL.openStream(); - } catch (Throwable t) { - //Exception handling not needed - } - } - return is; - } - - private String constructPath(final URL baseURL, final URI resolvedURI) { - String importLocation = null; - URL url = null; - try { - // Allow for http or https - if (baseURL.getProtocol() != null && (baseURL.getProtocol().equals( - HTTP_PROTOCOL) || baseURL.getProtocol().equals(HTTPS_PROTOCOL))) { - if(log.isDebugEnabled()){ - log.debug("Constructing path with http/https protocol"); - } - url = new URL(baseURL.getProtocol(), baseURL.getHost(), baseURL.getPort(), - resolvedURI.toString()); - if (log.isDebugEnabled()) { - log.debug("URL = " + url); - } - - } - // Check for file - else if (baseURL.getProtocol() != null && baseURL.getProtocol().equals(FILE_PROTOCOL)) { - if(log.isDebugEnabled()){ - log.debug("Constructing path with file protocol"); - } - url = new URL(baseURL.getProtocol(), baseURL.getHost(), resolvedURI.toString()); - } - //Check for jar - else if (baseURL.getProtocol() != null && baseURL.getProtocol().equals(JAR_PROTOCOL)) { - if(log.isDebugEnabled()){ - log.debug("Constructing path with jar protocol"); - } - url = new URL(baseURL.getProtocol(), baseURL.getHost(), resolvedURI.toString()); - } - else{ - if(log.isDebugEnabled()){ - if(baseURL !=null){ - log.debug("unknown protocol in url "+ baseURL.getProtocol()); - }else{ - log.debug("baseURL is NULL"); - } - } - } - - } - catch (MalformedURLException e) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("schemaImportError", - resolvedURI.toString(), - baseURL.toString()), - e); - } - if (url == null) { - throw ExceptionFactory.makeWebServiceException(Messages.getMessage("schemaImportError", - resolvedURI.toString(), - baseURL.toString())); - } - importLocation = url.toString(); - return importLocation; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/Axis2Java2WSDLBuilder.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/Axis2Java2WSDLBuilder.java deleted file mode 100644 index 7f2998515e..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/Axis2Java2WSDLBuilder.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.util; - -import java.io.OutputStream; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.HashMap; - -import org.apache.axiom.om.OMElement; -import org.apache.axis2.context.ConfigurationContext; -import org.apache.axis2.context.ConfigurationContextFactory; -import org.apache.axis2.deployment.util.Utils; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.AxisService2WSDL20; -import org.apache.axis2.description.WSDL2Constants; -import org.apache.axis2.description.java2wsdl.DefaultNamespaceGenerator; -import org.apache.axis2.description.java2wsdl.DefaultSchemaGenerator; -import org.apache.axis2.description.java2wsdl.DocLitBareSchemaGenerator; -import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; -import org.apache.axis2.description.java2wsdl.Java2WSDLUtils; -import org.apache.axis2.description.java2wsdl.NamespaceGenerator; -import org.apache.axis2.description.java2wsdl.SchemaGenerator; -import org.apache.axis2.engine.AxisConfiguration; -import org.apache.axis2.engine.MessageReceiver; -import org.apache.axis2.util.Loader; -import org.apache.axis2.util.XMLPrettyPrinter; -import org.apache.ws.java2wsdl.Java2WSDLBuilder; - -public class Axis2Java2WSDLBuilder extends Java2WSDLBuilder { - - - public static final String ALL = "all"; - private OutputStream out; - private String className; - private ClassLoader classLoader; - - private String serviceName = null; - - //these apply for the WSDL - private String targetNamespace = null; - private String targetNamespacePrefix = null; - - private String style = Java2WSDLConstants.DOCUMENT; - private String use = Java2WSDLConstants.LITERAL; - - private String nsGenClassName = null; - - private String wsdlVersion = WSDL_VERSION_1; - private String schemaGenClassName = null; - private boolean generateDocLitBare = false; - private AxisConfiguration axisConfig; - - private String epr = null; - - public Axis2Java2WSDLBuilder(final String epr, final OutputStream out, final String className, final ClassLoader classLoader) { - super(out, className, classLoader); - try { - ConfigurationContext configCtx = - ConfigurationContextFactory.createDefaultConfigurationContext(); - axisConfig = configCtx.getAxisConfiguration(); - this.out = out; - this.className = className; - this.classLoader = classLoader; - } catch (Exception e) { - throw new RuntimeException(e); - } - this.epr = epr; - } - - @Override - public void generateWSDL() throws Exception { - SchemaGenerator schemaGenerator = resolveSchemaGen(classLoader, - className, - getSchemaTargetNamespace(), - getSchemaTargetNamespacePrefix()); - - ArrayList excludedOperation = new ArrayList(); - Utils.addExcludeMethods(excludedOperation); - schemaGenerator.setExcludeMethods(excludedOperation); - schemaGenerator.setAttrFormDefault(getAttrFormDefault()); - schemaGenerator.setElementFormDefault(getElementFormDefault()); - schemaGenerator.setExtraClasses(getExtraClasses()); - schemaGenerator.setNsGen(resolveNSGen()); - schemaGenerator.setPkg2nsmap(getPkg2nsMap()); - if (getPkg2nsMap() != null && !getPkg2nsMap().isEmpty() && - (getPkg2nsMap().containsKey(ALL) || getPkg2nsMap().containsKey(ALL.toUpperCase()))) { - schemaGenerator.setUseWSDLTypesNamespace(true); - } - - HashMap messageReciverMap = new HashMap(); - Class inOnlyMessageReceiver = Loader.loadClass( - "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"); - MessageReceiver messageReceiver = - (MessageReceiver) inOnlyMessageReceiver.newInstance(); - messageReciverMap.put( - WSDL2Constants.MEP_URI_IN_ONLY, - messageReceiver); - Class inoutMessageReceiver = Loader.loadClass( - "org.apache.axis2.rpc.receivers.RPCMessageReceiver"); - MessageReceiver inOutmessageReceiver = - (MessageReceiver) inoutMessageReceiver.newInstance(); - messageReciverMap.put( - WSDL2Constants.MEP_URI_IN_OUT, - inOutmessageReceiver); - AxisService service = new AxisService(); - schemaGenerator.setAxisService(service); - AxisService axisService = AxisService.createService(className, - serviceName == null ? Java2WSDLUtils.getSimpleClassName(className) : serviceName, - axisConfig, - messageReciverMap, - targetNamespace == null ? Java2WSDLUtils.namespaceFromClassName(className, classLoader, resolveNSGen()).toString() : targetNamespace, - classLoader, - schemaGenerator, service); - schemaGenerator.setAxisService(axisService); - axisService.setTargetNamespacePrefix(targetNamespacePrefix); - axisService.setSchemaTargetNamespace(getSchemaTargetNamespace()); - axisService.setSchematargetNamespacePrefix(getSchemaTargetNamespacePrefix()); - axisService.setEndpointURL(epr); - - axisConfig.addService(axisService); - - if (WSDL_VERSION_1.equals(wsdlVersion)) { - AxisService2WSDL11 g = new AxisService2WSDL11(axisService); - g.setStyle(this.style); - g.setUse(this.use); - OMElement wsdlElement = g.generateOM(); - if (!isPretty()) { - wsdlElement.serialize(out); - } else { - XMLPrettyPrinter.prettify(wsdlElement, out); - } - } else { - AxisService2WSDL20 g = new AxisService2WSDL20(axisService); - OMElement wsdlElement = g.generateOM(); - if (!isPretty()) { - wsdlElement.serialize(out); - } else { - XMLPrettyPrinter.prettify(wsdlElement, out); - } - } - out.flush(); - out.close(); - } - - private NamespaceGenerator resolveNSGen() { - NamespaceGenerator nsGen; - if (this.nsGenClassName == null) { - nsGen = new DefaultNamespaceGenerator(); - } else { - try { - nsGen = (NamespaceGenerator) Class.forName(this.nsGenClassName).newInstance(); - } catch (Exception e) { - nsGen = new DefaultNamespaceGenerator(); - } - } - return nsGen; - } - - private SchemaGenerator resolveSchemaGen(final ClassLoader loader, final String className, - final String schematargetNamespace, - final String schematargetNamespacePrefix) throws Exception { - SchemaGenerator schemaGen; - if (this.schemaGenClassName == null) { - if (generateDocLitBare) { - schemaGen = new DocLitBareSchemaGenerator( - loader, className, schematargetNamespace, - schematargetNamespacePrefix, null); - } else { - schemaGen = new DefaultSchemaGenerator( - loader, className, schematargetNamespace, - schematargetNamespacePrefix, null); - } - - } else { - try { - Class clazz = Class.forName(this.schemaGenClassName); - Constructor constructor = clazz.getConstructor( - new Class[]{ClassLoader.class, String.class, String.class, String.class}); - schemaGen = (SchemaGenerator) constructor.newInstance( - new Object[]{loader, className, schematargetNamespace, schematargetNamespacePrefix}); - } catch (Exception e) { - if (generateDocLitBare) { - schemaGen = new DocLitBareSchemaGenerator( - loader, className, schematargetNamespace, - schematargetNamespacePrefix, null); - } else { - schemaGen = new DefaultSchemaGenerator( - loader, className, schematargetNamespace, - schematargetNamespacePrefix, null); - } - - } - } - return schemaGen; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/AxisService2WSDL11.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/AxisService2WSDL11.java deleted file mode 100644 index d4260e3b82..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/AxisService2WSDL11.java +++ /dev/null @@ -1,1734 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.axis2.util; - - -import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.axiom.om.OMAbstractFactory; -import org.apache.axiom.om.OMAttribute; -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMFactory; -import org.apache.axiom.om.OMNamespace; -import org.apache.axiom.om.OMNode; -import org.apache.axiom.soap.SOAP11Constants; -import org.apache.axiom.soap.SOAP12Constants; -import org.apache.axis2.AxisFault; -import org.apache.axis2.addressing.AddressingConstants; -import org.apache.axis2.addressing.AddressingHelper; -import org.apache.axis2.description.AxisBinding; -import org.apache.axis2.description.AxisBindingMessage; -import org.apache.axis2.description.AxisBindingOperation; -import org.apache.axis2.description.AxisDescription; -import org.apache.axis2.description.AxisEndpoint; -import org.apache.axis2.description.AxisMessage; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.Parameter; -import org.apache.axis2.description.PolicyInclude; -import org.apache.axis2.description.PolicySubject; -import org.apache.axis2.description.WSDL2Constants; -import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; -import org.apache.axis2.engine.AxisConfiguration; -import org.apache.axis2.namespace.Constants; -import org.apache.axis2.util.ExternalPolicySerializer; -import org.apache.axis2.util.JavaUtils; -import org.apache.axis2.util.PolicyLocator; -import org.apache.axis2.util.PolicyUtil; -import org.apache.axis2.util.WSDLSerializationUtil; -import org.apache.axis2.util.XMLUtils; -import org.apache.axis2.wsdl.SOAPHeaderMessage; -import org.apache.axis2.wsdl.WSDLConstants; -import org.apache.neethi.Policy; -import org.apache.neethi.PolicyComponent; -import org.apache.neethi.PolicyReference; -import org.apache.neethi.PolicyRegistry; -import org.apache.ws.commons.schema.XmlSchema; - -public class AxisService2WSDL11 implements Java2WSDLConstants { - - private AxisService axisService; - - private String serviceName; - - private String targetNamespace; - - private OMElement definition; - - private OMNamespace soap; - - private OMNamespace soap12; - - private OMNamespace http; - - private OMNamespace mime; - - private OMNamespace tns; - - private OMNamespace wsdl; - - private OMNamespace wsaw; - - private String style = DOCUMENT; - - private String use = LITERAL; - - private HashMap policiesInDefinitions; - - private ExternalPolicySerializer serializer; - - private HashMap messagesMap; - - public AxisService2WSDL11(final AxisService service) throws Exception { - this.axisService = service; - this.serviceName = service.getName(); - init(); - } - - private void init() throws AxisFault { -/* - // the EPR list of AxisService contains REST EPRs as well. Those REST - // EPRs will be used to generated HTTPBinding - // and rest of the EPRs will be used to generate SOAP 1.1 and 1.2 - // bindings. Let's first initialize those set of - // EPRs now to be used later, especially when we generate the WSDL. - String[] serviceEndpointURLs = axisService.getEPRs(); - if (serviceEndpointURLs == null) { - Map endpointMap = axisService.getEndpoints(); - if (endpointMap.size() > 0) { - Iterator endpointItr = endpointMap.values().iterator(); - if (endpointItr.hasNext()) { - AxisEndpoint endpoint = (AxisEndpoint) endpointItr.next(); - serviceEndpointURLs = new String[] { endpoint - .getEndpointURL() }; - } - - } else { - serviceEndpointURLs = new String[] { axisService - .getEndpointName() }; - } - } -*/ - this.targetNamespace = axisService.getTargetNamespace(); - - serializer = new ExternalPolicySerializer(); - // CHECKME check whether service.getAxisConfiguration() return null ??? - - AxisConfiguration configuration = axisService.getAxisConfiguration(); - if (configuration != null) { - serializer.setAssertionsToFilter(configuration - .getLocalPolicyAssertions()); - } - } - - public AxisService2WSDL11(final AxisService service, final String serviceName) - throws Exception { - this.axisService = service; - this.serviceName = serviceName; - init(); - } - - /** - * Build the OM structure of the WSDL document - * - * @return an OMElement containing a WSDL document - * @throws Exception - */ - public OMElement generateOM() throws Exception { - - OMFactory fac = OMAbstractFactory.getOMFactory(); - wsdl = fac.createOMNamespace(WSDL_NAMESPACE, DEFAULT_WSDL_NAMESPACE_PREFIX); - OMElement ele = fac.createOMElement("definitions", wsdl); - setDefinitionElement(ele); - - policiesInDefinitions = new HashMap(); - - Map namespaceMap = axisService.getNamespaceMap(); - if (namespaceMap == null) { - namespaceMap = new HashMap(); - } - - WSDLSerializationUtil.populateNamespaces(ele, namespaceMap); - soap = ele.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX); - soap12 = ele.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX); - http = ele.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX); - mime = ele.declareNamespace(MIME_NAMESPACE, MIME_PREFIX); - wsaw = ele.declareNamespace(AddressingConstants.Final.WSAW_NAMESPACE, "wsaw"); - String prefix = WSDLSerializationUtil.getPrefix(axisService.getTargetNamespace(), - namespaceMap); - if (prefix == null || "".equals(prefix)) { - prefix = DEFAULT_TARGET_NAMESPACE_PREFIX; - } - - namespaceMap.put(prefix, axisService.getTargetNamespace()); - tns = ele.declareNamespace(axisService.getTargetNamespace(), prefix); - - // axis2.xml indicated no HTTP binding? - boolean disableREST = false; - Parameter disableRESTParameter = axisService.getParameter( - org.apache.axis2.Constants.Configuration.DISABLE_REST); - if (disableRESTParameter != null - && JavaUtils.isTrueExplicitly(disableRESTParameter.getValue())) { - disableREST = true; - } - - boolean disableSOAP11 = false; - Parameter disableSOAP11Parameter = axisService - .getParameter(org.apache.axis2.Constants.Configuration.DISABLE_SOAP11); - if (disableSOAP11Parameter != null - && JavaUtils.isTrueExplicitly(disableSOAP11Parameter.getValue())) { - disableSOAP11 = true; - } - - // axis2.xml indicated no SOAP 1.2 binding? - boolean disableSOAP12 = false; - Parameter disableSOAP12Parameter = axisService - .getParameter(org.apache.axis2.Constants.Configuration.DISABLE_SOAP12); - if (disableSOAP12Parameter != null - && JavaUtils.isTrueExplicitly(disableSOAP12Parameter.getValue())) { - disableSOAP12 = true; - } - - // adding documentation element - // <b>NEW!</b> This method accepts an ISBN - // string and returns <b>Amazon.co.uk</b> Sales Rank for - // that book. - WSDLSerializationUtil.addWSDLDocumentationElement(axisService, ele, fac, wsdl); - - ele.addAttribute("targetNamespace", axisService.getTargetNamespace(), null); - OMElement wsdlTypes = fac.createOMElement("types", wsdl); - ele.addChild(wsdlTypes); - - // populate the schema mappings - axisService.populateSchemaMappings(); - - ArrayList schemas = axisService.getSchema(); - for (int i = 0; i < schemas.size(); i++) { - StringWriter writer = new StringWriter(); - - // XmlSchema schema = (XmlSchema) schemas.get(i); - XmlSchema schema = axisService.getSchema(i); - - String targetNamespace = schema.getTargetNamespace(); - if (!Constants.NS_URI_XML.equals(targetNamespace)) { - schema.write(writer); - String schemaString = writer.toString(); - if (!"".equals(schemaString)) { - wsdlTypes.addChild(XMLUtils.toOM(new StringReader(schemaString))); - } - } - } - generateMessages(fac, ele); - generatePortType(fac, ele); - -// generateSOAP11Binding(fac, ele); -// if (!disableSOAP12) { -// generateSOAP12Binding(fac, ele); -// } -// if (!disableREST) { -// generateHTTPBinding(fac, ele); -// } - - generateService(fac, ele, disableREST, disableSOAP12 , disableSOAP11); - addPoliciesToDefinitionElement(policiesInDefinitions.values().iterator(), definition); - - return ele; - } - - private void generateMessages(final OMFactory fac, final OMElement defintions) { - HashSet faultMessageNames = new HashSet(); - messagesMap = new HashMap(); - - Iterator operations = axisService.getOperations(); - while (operations.hasNext()) { - AxisOperation axisOperation = (AxisOperation) operations.next(); - if (axisOperation.isControlOperation()) { - continue; - } - String MEP = axisOperation.getMessageExchangePattern(); - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisMessage inaxisMessage = - axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (inaxisMessage != null) { - writeMessage(inaxisMessage, fac, defintions); - generateHeaderMessages(inaxisMessage, fac, defintions); - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisMessage outAxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (outAxisMessage != null) { - writeMessage(outAxisMessage, fac, defintions); - generateHeaderMessages(outAxisMessage, fac, defintions); - } - } - - // generate fault Messages - ArrayList faultyMessages = axisOperation.getFaultMessages(); - if (faultyMessages != null) { - for (Object faultyMessage : faultyMessages) { - AxisMessage axisMessage = (AxisMessage)faultyMessage; - String name = axisMessage.getName(); - if (faultMessageNames.add(name)) { - writeMessage(axisMessage, fac, defintions); - generateHeaderMessages(axisMessage, fac, defintions); - } - } - } - } - } - - private void generateHeaderMessages(final AxisMessage axismessage, final OMFactory fac, - final OMElement defintions) { - ArrayList extList = axismessage.getSoapHeaders(); - for (Object anExtList : extList) { - SOAPHeaderMessage header = (SOAPHeaderMessage)anExtList; - OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME, wsdl); - messageElement.addAttribute(ATTRIBUTE_NAME, header.getMessage().getLocalPart(), null); - defintions.addChild(messageElement); - OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl); - messageElement.addChild(messagePart); - messagePart.addAttribute(ATTRIBUTE_NAME, header.part(), null); - if (header.getElement() == null) { - throw new RuntimeException(ELEMENT_ATTRIBUTE_NAME - + " is null for " + header.getMessage()); - } - messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, - WSDLSerializationUtil.getPrefix(header.getElement() - .getNamespaceURI(), axisService.getNamespaceMap()) - + ":" + header.getElement().getLocalPart(), null); - } - } - - private void writeMessage(final AxisMessage axismessage, final OMFactory fac, final OMElement defintions) { - if (messagesMap.get(axismessage.getName()) == null) { - messagesMap.put(axismessage.getName(), axismessage); - QName schemaElementName = axismessage.getElementQName(); - OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME, wsdl); - messageElement.addAttribute(ATTRIBUTE_NAME, axismessage.getName(), null); - defintions.addChild(messageElement); - if (schemaElementName != null) { - OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl); - messageElement.addChild(messagePart); - if (axismessage.getMessagePartName() != null) { - messagePart.addAttribute(ATTRIBUTE_NAME, - axismessage.getMessagePartName(), - null); - } else { - messagePart.addAttribute(ATTRIBUTE_NAME, axismessage.getPartName(), null); - } - messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, - WSDLSerializationUtil.getPrefix(schemaElementName.getNamespaceURI(), - axisService.getNamespaceMap()) - + ":" + schemaElementName.getLocalPart(), null); - } - } - - } - - /** - * Builds the <portType> element in the passed WSDL definition. When - * this returns successfully, there will be a new child element under - * definitons for the portType. - * - * @param fac - * the active OMFactory - * @param defintions - * the WSDL <definitions> element - * @throws Exception - * if there's a problem - */ - private void generatePortType(final OMFactory fac, final OMElement defintions) - throws Exception { - OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl); - defintions.addChild(portType); - - portType.addAttribute(ATTRIBUTE_NAME, serviceName + PORT_TYPE_SUFFIX, - null); - - addPolicyAsExtAttribute(axisService, portType, fac); - - for (Iterator operations = axisService.getOperations(); operations - .hasNext();) { - AxisOperation axisOperation = (AxisOperation) operations.next(); - if (axisOperation.isControlOperation() - || axisOperation.getName() == null) { - continue; - } - String operationName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - WSDLSerializationUtil.addWSDLDocumentationElement(axisOperation, - operation, fac, wsdl); - portType.addChild(operation); - operation.addAttribute(ATTRIBUTE_NAME, operationName, null); - addPolicyAsExtAttribute(axisOperation, operation,fac); - - String MEP = axisOperation.getMessageExchangePattern(); - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisMessage inaxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (inaxisMessage != null) { - OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, - wsdl); - WSDLSerializationUtil.addWSDLDocumentationElement( - inaxisMessage, input, fac, wsdl); - input.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix() - + ":" + inaxisMessage.getName(), null); - addPolicyAsExtAttribute(inaxisMessage, input,fac); - - WSDLSerializationUtil.addWSAWActionAttribute(input, - axisOperation.getInputAction(), wsaw); - operation.addChild(input); - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisMessage outAxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, - wsdl); - WSDLSerializationUtil.addWSDLDocumentationElement( - outAxisMessage, output, fac, wsdl); - output.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix() - + ":" + outAxisMessage.getName(), null); - addPolicyAsExtAttribute(outAxisMessage, output, fac); - WSDLSerializationUtil.addWSAWActionAttribute(output, - axisOperation.getOutputAction(), wsaw); - operation.addChild(output); - } - } - - // generate fault Messages - ArrayList faultMessages = axisOperation.getFaultMessages(); - if (faultMessages != null) { - for (Object faultMessage : faultMessages) { - AxisMessage faultyMessage = (AxisMessage)faultMessage; - OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME, wsdl); - WSDLSerializationUtil.addWSDLDocumentationElement(faultyMessage, - fault, - fac, - wsdl); - fault.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix() - + ":" + faultyMessage.getName(), null); - fault.addAttribute(ATTRIBUTE_NAME, faultyMessage.getName(), null); - WSDLSerializationUtil.addWSAWActionAttribute(fault, - axisOperation.getFaultAction( - faultyMessage.getName()), - wsaw); - // TODO add policies for fault messages - operation.addChild(fault); - } - } - - } - } - - /** - * Generate the WSDL <service> element - * - * @param fac - * the active OMFactory - * @param defintions - * the WSDL <definitions> element under which to put the - * service - * @param disableREST - * if false, generate REST binding, if true, don't - * @param disableSOAP12 - * if false, generate SOAP 1.2 binding, if true, don't - * @throws Exception - * if there's a problem - */ - public void generateService(final OMFactory fac, final OMElement defintions, final boolean disableREST, - final boolean disableSOAP12, final boolean disableSOAP11) - throws Exception { - OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl); - defintions.addChild(service); - service.addAttribute(ATTRIBUTE_NAME, serviceName, null); - - if (!disableSOAP11) { - generateSoap11Port(fac, defintions, service); - } - - if (!disableSOAP12) { - // generateSOAP12Ports(fac, service); - generateSoap12Port(fac, defintions, service); - } - - - addPolicyAsExtElement(PolicyInclude.SERVICE_POLICY, axisService.getPolicyInclude(), - service); - // addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService. - // getPolicyInclude(), service); - - if (!disableREST) { - // generateHTTPPorts(fac, service); - generateHttpPort(fac, definition, service); - } - } - - private void writeSoapHeaders(final AxisMessage inaxisMessage, final OMFactory fac, - final OMElement input, final OMNamespace soapNameSpace) throws Exception { - ArrayList extElementList; - extElementList = inaxisMessage.getSoapHeaders(); - if (extElementList != null) { - Iterator elements = extElementList.iterator(); - while (elements.hasNext()) { - SOAPHeaderMessage soapheader = (SOAPHeaderMessage) elements - .next(); - addSOAPHeader(fac, input, soapheader, soapNameSpace); - } - } - } - - private void addExtensionElement(final OMFactory fac, final OMElement element, - final String name, final String att1Name, final String att1Value, final String att2Name, - final String att2Value, final OMNamespace soapNameSpace) { - OMElement soapbinding = fac.createOMElement(name, soapNameSpace); - element.addChild(soapbinding); - soapbinding.addAttribute(att1Name, att1Value, null); - if (att2Name != null) { - soapbinding.addAttribute(att2Name, att2Value, null); - } - } - - private void setDefinitionElement(final OMElement defintion) { - this.definition = defintion; - } - - private void addSOAPHeader(final OMFactory fac, final OMElement element, - final SOAPHeaderMessage header, final OMNamespace soapNameSpace) { - OMElement extElement = fac.createOMElement("header", soapNameSpace); - element.addChild(extElement); - String use = header.getUse(); - if (use != null) { - extElement.addAttribute("use", use, null); - } - if (header.part() != null) { - extElement.addAttribute("part", header.part(), null); - } - if (header.getMessage() != null) { - extElement.addAttribute("message", WSDLSerializationUtil.getPrefix( - targetNamespace, axisService.getNamespaceMap()) - + ":" + header.getMessage().getLocalPart(), null); - } - } - - private void addPolicyAsExtElement(final int type, final PolicyInclude policyInclude, - final OMElement parentElement) throws Exception { - ArrayList elementList = policyInclude.getPolicyElements(type); - - for (Object policyElement : elementList) { - if (policyElement instanceof Policy) { - OMElement child = PolicyUtil.getPolicyComponentAsOMElement( - (PolicyComponent)policyElement, serializer); - -// OMNode firstChildElem = parentElement.getFirstElement(); - - // if (firstChildElem == null) { - // parentElement.addChild(child); - // } else { - // firstChildElem.insertSiblingBefore(child); - // } - // there is a problem with the OM insertSiblingBefore element - // with - // drops the already exists elements. - // since there is no any techical problem of adding policy - // elements after other - // children temporaliy fix this as it is. - // one OM fix this issue we can revert this change. - parentElement.addChild(child); - - } else if (policyElement instanceof PolicyReference) { - OMElement child = PolicyUtil - .getPolicyComponentAsOMElement((PolicyComponent)policyElement); - OMElement firstChildElem = parentElement.getFirstElement(); - - if (firstChildElem == null) { - parentElement.addChild(child); - } else { - firstChildElem.insertSiblingBefore(child); - } - - PolicyRegistry reg = policyInclude.getPolicyRegistry(); - String key = ((PolicyReference)policyElement).getURI(); - - if (key.startsWith("#")) { - key = key.substring(key.indexOf("#") + 1); - } - - Policy p = reg.lookup(key); - - if (p == null) { - throw new Exception("Policy not found for uri : " + key); - } - - addPolicyToDefinitionElement(key, p); - } - } - } - - private void addPoliciesToDefinitionElement(final Iterator iterator, - final OMElement definitionElement) throws Exception { - Policy policy; - OMElement policyElement; - OMNode firstChild; - - for (; iterator.hasNext();) { - policy = (Policy) iterator.next(); - policyElement = PolicyUtil.getPolicyComponentAsOMElement(policy, - serializer); - firstChild = definition.getFirstOMChild(); - if (firstChild != null) { - firstChild.insertSiblingBefore(policyElement); - } else { - definitionElement.addChild(policyElement); - } - } - } - - private void addPolicyToDefinitionElement(final String key, final Policy policy) { - policiesInDefinitions.put(key, policy); - } - - public String getStyle() { - return style; - } - - public void setStyle(final String style) { - this.style = style; - } - - public String getUse() { - return use; - } - - public void setUse(final String use) { - this.use = use; - } - - private void generateSoap11Port(final OMFactory fac, final OMElement definition, - final OMElement service) throws Exception { - Iterator iterator = axisService.getEndpoints().values().iterator(); - AxisEndpoint axisEndpoint; - AxisBinding axisBinding; - for (; iterator.hasNext();) { - axisEndpoint = (AxisEndpoint) iterator.next(); - /* - * Some transports might not be active at runtime. - */ - if (!axisEndpoint.isActive()) { - continue; - } - axisBinding = axisEndpoint.getBinding(); - String type = axisBinding.getType(); - if (Java2WSDLConstants.TRANSPORT_URI.equals(type) - || WSDL2Constants.URI_WSDL2_SOAP.equals(type)) { - String version = (String) axisBinding - .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION); - if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(version)) { - OMElement port = fac.createOMElement(PORT, wsdl); - service.addChild(port); - port.addAttribute(ATTRIBUTE_NAME, axisEndpoint.getName(), - null); - QName qname = axisBinding.getName(); - port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":" - + qname.getLocalPart(), null); - String endpointURL = getEndpointURL(axisEndpoint); - WSDLSerializationUtil.addExtensionElement(fac, port, - SOAP_ADDRESS, LOCATION, (endpointURL == null) ? "" - : endpointURL, soap); - generateEPRElement(fac, port, endpointURL); - addPolicyAsExtElement(axisEndpoint, port); - generateSoap11Binding(fac, definition, axisEndpoint - .getBinding()); - } - } - } - } - - private void generateSoap12Port(final OMFactory fac, final OMElement definition, - final OMElement service) throws Exception { - - // /////////////////// FIXME ////////////////////////////////////////// - Iterator iterator = axisService.getEndpoints().values().iterator(); - AxisEndpoint axisEndpoint; - AxisBinding axisBinding; - for (; iterator.hasNext();) { - axisEndpoint = (AxisEndpoint) iterator.next(); - /* - * - */ - if (!axisEndpoint.isActive()) { - continue; - } - axisBinding = axisEndpoint.getBinding(); - String type = axisBinding.getType(); - if (Java2WSDLConstants.TRANSPORT_URI.equals(type) - || WSDL2Constants.URI_WSDL2_SOAP.equals(type)) { - String version = (String) axisBinding - .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION); - if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(version)) { - - OMElement port = fac.createOMElement(PORT, wsdl); - service.addChild(port); - port.addAttribute(ATTRIBUTE_NAME, axisEndpoint.getName(), - null); - QName qname = axisBinding.getName(); - port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":" - + qname.getLocalPart(), null); - String endpointURL = getEndpointURL(axisEndpoint); - WSDLSerializationUtil.addExtensionElement(fac, port, - SOAP_ADDRESS, LOCATION, (endpointURL == null) ? "" - : endpointURL, soap12); - generateEPRElement(fac, port, endpointURL); - addPolicyAsExtElement(axisEndpoint, port); - generateSoap12Binding(fac, definition, axisEndpoint - .getBinding()); - } - } - } - } - - private void generateHttpPort(final OMFactory fac, final OMElement definition, - final OMElement service) throws Exception { - - // /////////////////// FIXME ////////////////////////////////////////// - Iterator iterator = axisService.getEndpoints().values().iterator(); - AxisEndpoint axisEndpoint; - AxisBinding axisBinding; - for (; iterator.hasNext();) { - axisEndpoint = (AxisEndpoint) iterator.next(); - /* - * - */ - if (!axisEndpoint.isActive()) { - continue; - } - axisBinding = axisEndpoint.getBinding(); - String type = axisBinding.getType(); - if (WSDL2Constants.URI_WSDL2_HTTP.equals(type)) { - OMElement port = fac.createOMElement(PORT, wsdl); - service.addChild(port); - port.addAttribute(ATTRIBUTE_NAME, axisEndpoint.getName(), null); - QName qname = axisBinding.getName(); - port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":" - + qname.getLocalPart(), null); - OMElement extElement = fac.createOMElement("address", http); - String endpointURL = getEndpointURL(axisEndpoint); - extElement.addAttribute("location", (endpointURL == null) ? "" - : endpointURL, null); - port.addChild(extElement); - - addPolicyAsExtElement(axisEndpoint, port); - generateHttpBinding(fac, definition, axisEndpoint.getBinding()); - } - } - } - - private void generateSoap11Binding(final OMFactory fac, final OMElement defintions, - final AxisBinding axisBinding) throws Exception { - if (isAlreadyAdded(axisBinding, defintions)) { - return; - } - OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); - OMElement serviceElement = defintions.getFirstChildWithName(new QName( - wsdl.getNamespaceURI(), SERVICE_LOCAL_NAME)); - serviceElement.insertSiblingBefore(binding); - - QName qname = axisBinding.getName(); - binding.addAttribute(ATTRIBUTE_NAME, qname.getLocalPart(), null); - binding.addAttribute("type", tns.getPrefix() + ":" + serviceName - + PORT_TYPE_SUFFIX, null); - - // Adding ext elements - addPolicyAsExtElement(axisBinding, binding); - addExtensionElement(fac, binding, BINDING_LOCAL_NAME, TRANSPORT, - TRANSPORT_URI, STYLE, style, soap); - - // ///////////////////////////////////////////////////////////////////// - // Add WS-Addressing UsingAddressing element if appropriate - // SHOULD be on the binding element per the specification - if (AddressingHelper - .getAddressingRequirementParemeterValue(axisService).equals( - AddressingConstants.ADDRESSING_OPTIONAL)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", wsaw); - } else if (AddressingHelper.getAddressingRequirementParemeterValue( - axisService).equals(AddressingConstants.ADDRESSING_REQUIRED)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", wsaw); - } - // ////////////////////////////////////////////////////////////////////// - - for (Iterator axisBindingOperations = axisBinding.getChildren(); axisBindingOperations - .hasNext();) { - AxisBindingOperation axisBindingOperation = (AxisBindingOperation) axisBindingOperations - .next(); - AxisOperation axisOperation = axisBindingOperation - .getAxisOperation(); - if (axisOperation.isControlOperation() - || axisOperation.getName() == null) { - continue; - } - String opeartionName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - String soapAction = axisOperation.getSoapAction(); - if (soapAction == null) { - soapAction = ""; - } - addPolicyAsExtElement(axisBindingOperation, operation); - addExtensionElement(fac, operation, OPERATION_LOCAL_NAME, - SOAP_ACTION, soapAction, STYLE, style, soap); - - // addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY, - // axisOperation.getPolicyInclude(), operation); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisBindingMessage axisBindingInMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (axisBindingInMessage != null) { - AxisMessage inaxisMessage = axisBindingInMessage - .getAxisMessage(); - - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, opeartionName, - null); - OMElement input = fac.createOMElement( - IN_PUT_LOCAL_NAME, wsdl); - addPolicyAsExtElement(axisBindingInMessage, input); - addExtensionElement(fac, input, SOAP_BODY, SOAP_USE, - use, null, targetNamespace, soap); - // addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY, - // inaxisMessage.getPolicyInclude(), input); - operation.addChild(input); - writeSoapHeaders(inaxisMessage, fac, input, soap12); - } - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - - AxisBindingMessage axisBindingOutMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (axisBindingOutMessage != null) { - AxisMessage outAxisMessage = axisBindingOutMessage - .getAxisMessage(); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement( - OUT_PUT_LOCAL_NAME, wsdl); - addPolicyAsExtElement(axisBindingOutMessage, output); - addExtensionElement(fac, output, SOAP_BODY, SOAP_USE, - use, null, targetNamespace, soap); - // addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY, - // outAxisMessage.getPolicyInclude(), output); - operation.addChild(output); - writeSoapHeaders(outAxisMessage, fac, output, soap12); - } - } - } - - // generate fault Messages - ArrayList faultyMessages = axisBindingOperation.getFaults(); - if (faultyMessages != null) { - for (Object faultyMessage1 : faultyMessages) { - AxisBindingMessage bindingFaultyMessage = (AxisBindingMessage)faultyMessage1; - if (bindingFaultyMessage != null) { - AxisMessage faultyMessage = bindingFaultyMessage.getAxisMessage(); - - OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME, wsdl); - - addPolicyAsExtElement(bindingFaultyMessage, fault); - addExtensionElement(fac, fault, FAULT_LOCAL_NAME, - SOAP_USE, use, ATTRIBUTE_NAME, - faultyMessage.getName(), soap); - fault.addAttribute(ATTRIBUTE_NAME, faultyMessage.getName(), null); - // add policies for fault messages - operation.addChild(fault); - writeSoapHeaders(faultyMessage, fac, fault, soap); - } - } - } - } - } - - private void generateSoap12Binding(final OMFactory fac, final OMElement definitions, - final AxisBinding axisBinding) throws Exception { - if (isAlreadyAdded(axisBinding, definitions)) { - return; - } - OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); - OMElement serviceElement = definitions.getFirstChildWithName(new QName( - wsdl.getNamespaceURI(), SERVICE_LOCAL_NAME)); - serviceElement.insertSiblingBefore(binding); - - QName qname = axisBinding.getName(); - binding.addAttribute(ATTRIBUTE_NAME, qname.getLocalPart(), null); - binding.addAttribute("type", tns.getPrefix() + ":" + serviceName - + PORT_TYPE_SUFFIX, null); - - // Adding ext elements - addPolicyAsExtElement(axisBinding, binding); - addExtensionElement(fac, binding, BINDING_LOCAL_NAME, TRANSPORT, - TRANSPORT_URI, STYLE, style, soap12); - - // ///////////////////////////////////////////////////////////////////// - // Add WS-Addressing UsingAddressing element if appropriate - // SHOULD be on the binding element per the specification - if (AddressingHelper - .getAddressingRequirementParemeterValue(axisService).equals( - AddressingConstants.ADDRESSING_OPTIONAL)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", wsaw); - } else if (AddressingHelper.getAddressingRequirementParemeterValue( - axisService).equals(AddressingConstants.ADDRESSING_REQUIRED)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", wsaw); - } - // ////////////////////////////////////////////////////////////////////// - - for (Iterator axisBindingOperations = axisBinding.getChildren(); axisBindingOperations - .hasNext();) { - AxisBindingOperation axisBindingOperation = (AxisBindingOperation) axisBindingOperations - .next(); - AxisOperation axisOperation = axisBindingOperation - .getAxisOperation(); - if (axisOperation.isControlOperation() - || axisOperation.getName() == null) { - continue; - } - String opeartionName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - String soapAction = axisOperation.getSoapAction(); - if (soapAction == null) { - soapAction = ""; - } - addPolicyAsExtElement(axisBindingOperation, operation); - addExtensionElement(fac, operation, OPERATION_LOCAL_NAME, - SOAP_ACTION, soapAction, STYLE, style, soap12); - - // addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY, - // axisOperation.getPolicyInclude(), operation); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisBindingMessage axisBindingInMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (axisBindingInMessage != null) { - AxisMessage inaxisMessage = axisBindingInMessage - .getAxisMessage(); - - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, opeartionName, - null); - OMElement input = fac.createOMElement( - IN_PUT_LOCAL_NAME, wsdl); - addPolicyAsExtElement(axisBindingInMessage, input); - addExtensionElement(fac, input, SOAP_BODY, SOAP_USE, - use, null, targetNamespace, soap12); - operation.addChild(input); - writeSoapHeaders(inaxisMessage, fac, input, soap12); - } - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - - AxisBindingMessage axisBindingOutMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (axisBindingOutMessage != null) { - AxisMessage outAxisMessage = axisBindingOutMessage - .getAxisMessage(); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement( - OUT_PUT_LOCAL_NAME, wsdl); - addPolicyAsExtElement(axisBindingOutMessage, output); - addExtensionElement(fac, output, SOAP_BODY, SOAP_USE, - use, null, targetNamespace, soap12); - // addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY, - // outAxisMessage.getPolicyInclude(), output); - operation.addChild(output); - writeSoapHeaders(outAxisMessage, fac, output, soap12); - } - } - } - - // generate fault Messages - ArrayList faultyMessages = axisBindingOperation.getFaults(); - if (faultyMessages != null) { - for (Object faultyMessage1 : faultyMessages) { - AxisBindingMessage bindingFaultyMessage = (AxisBindingMessage)faultyMessage1; - if (bindingFaultyMessage != null) { - AxisMessage faultyMessage = bindingFaultyMessage - .getAxisMessage(); - OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME, - wsdl); - addPolicyAsExtElement(bindingFaultyMessage, fault); - addExtensionElement(fac, fault, FAULT_LOCAL_NAME, - SOAP_USE, use, ATTRIBUTE_NAME, faultyMessage - .getName(), soap12); - fault.addAttribute(ATTRIBUTE_NAME, faultyMessage - .getName(), null); - // add policies for fault messages - operation.addChild(fault); - writeSoapHeaders(faultyMessage, fac, fault, soap12); - } - } - } - } - } - - private void generateHttpBinding(final OMFactory fac, final OMElement definitions, - final AxisBinding axisBinding) throws Exception { - if (isAlreadyAdded(axisBinding, definitions)) { - return; - } - OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); - OMElement serviceElement = definitions.getFirstChildWithName(new QName( - wsdl.getNamespaceURI(), SERVICE_LOCAL_NAME)); - serviceElement.insertSiblingBefore(binding); - - QName qname = axisBinding.getName(); - binding.addAttribute(ATTRIBUTE_NAME, qname.getLocalPart(), null); - binding.addAttribute("type", tns.getPrefix() + ":" + serviceName - + PORT_TYPE_SUFFIX, null); - - OMElement httpBinding = fac.createOMElement("binding", http); - binding.addChild(httpBinding); - httpBinding.addAttribute("verb", "POST", null); - - for (Iterator axisBindingOperations = axisBinding.getChildren(); axisBindingOperations - .hasNext();) { - AxisBindingOperation axisBindingOperation = (AxisBindingOperation) axisBindingOperations - .next(); - AxisOperation axisOperation = axisBindingOperation - .getAxisOperation(); - if (axisOperation.isControlOperation() - || axisOperation.getName() == null) { - continue; - } - String opeartionName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - - OMElement httpOperation = fac.createOMElement("operation", http); - operation.addChild(httpOperation); - httpOperation.addAttribute("location", serviceName + "/" - + axisOperation.getName().getLocalPart(), null); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - AxisBindingMessage axisBindingInMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (axisBindingInMessage != null) { - AxisMessage inaxisMessage = axisBindingInMessage - .getAxisMessage(); - - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, opeartionName, - null); - OMElement input = fac.createOMElement( - IN_PUT_LOCAL_NAME, wsdl); - OMElement inputelement = fac.createOMElement("content", - mime); - input.addChild(inputelement); - inputelement.addAttribute("type", "text/xml", null); - inputelement.addAttribute("part", axisOperation - .getName().getLocalPart(), null); - operation.addChild(input); - } - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) { - - AxisBindingMessage axisBindingOutMessage = (AxisBindingMessage) axisBindingOperation - .getChild(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (axisBindingOutMessage != null) { - AxisMessage outAxisMessage = axisBindingOutMessage - .getAxisMessage(); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement( - OUT_PUT_LOCAL_NAME, wsdl); - OMElement outElement = fac.createOMElement("content", - mime); - outElement.addChild(outElement); - outElement.addAttribute("type", "text/xml", null); - outElement.addAttribute("part", axisOperation.getName() - .getLocalPart(), null); - output.addChild(outElement); - operation.addChild(output); - } - } - } - } - } - - private void addPolicyAsExtElement(final AxisDescription axisDescription, - final OMElement wsdlElement) throws Exception { - PolicySubject policySubject = axisDescription.getPolicySubject(); - Collection attachPolicyComponents = policySubject - .getAttachedPolicyComponents(); - - for (Object policyElement : attachPolicyComponents) { - if (policyElement instanceof Policy) { - PolicyReference policyReference = - PolicyUtil.createPolicyReference((Policy)policyElement); - OMElement policyRefElement = - PolicyUtil.getPolicyComponentAsOMElement(policyReference, serializer); - - OMNode firstChildElem = wsdlElement.getFirstElement(); - if (firstChildElem == null) { - wsdlElement.addChild(policyRefElement); - } else { - firstChildElem.insertSiblingBefore(policyRefElement); - } - String key = policyReference.getURI(); - if (key.startsWith("#")) { - key = key.substring(key.indexOf("#") + 1); - } - addPolicyToDefinitionElement(key, (Policy)policyElement); - - } else if (policyElement instanceof PolicyReference) { - OMElement child = - PolicyUtil.getPolicyComponentAsOMElement((PolicyComponent)policyElement, - serializer); - OMElement firstChildElem = wsdlElement.getFirstElement(); - - if (firstChildElem == null) { - wsdlElement.addChild(child); - } else { - firstChildElem.insertSiblingBefore(child); - } - - String key = ((PolicyReference)policyElement).getURI(); - if (key.startsWith("#")) { - key = key.substring(key.indexOf("#") + 1); - } - - PolicyLocator locator = new PolicyLocator(axisService); - Policy p = locator.lookup(key); - - if (p == null) { - throw new Exception("Policy not found for uri : " + key); - } - addPolicyToDefinitionElement(key, p); - } - } - } - - private void addPolicyAsExtAttribute(final AxisDescription axisDescription, - final OMElement element, final OMFactory factory) throws Exception { - - PolicySubject policySubject = axisDescription.getPolicySubject(); - ArrayList policyURIs = new ArrayList(); - - for (Object policyElement : policySubject.getAttachedPolicyComponents()) { - String key; - - if (policyElement instanceof Policy) { - Policy p = (Policy)policyElement; - - if (p.getId() != null) { - key = "#" + p.getId(); - } else if (p.getName() != null) { - key = p.getName(); - } else { - throw new RuntimeException( - "Can't add the Policy as an extensibility attribute since it doesn't have a id or a name attribute"); - } - - policyURIs.add(key); - addPolicyToDefinitionElement(key, p); - } else { - String uri = ((PolicyReference)policyElement).getURI(); - PolicyLocator locator = new PolicyLocator(axisService); - if (uri.startsWith("#")) { - key = uri.substring(uri.indexOf('#') + 1); - } else { - key = uri; - } - - Policy p = locator.lookup(key); - - if (p == null) { - throw new RuntimeException("Cannot resolve " + uri - + " to a Policy"); - } - policyURIs.add(uri); - addPolicyToDefinitionElement(key, p); - } - } - - if (!policyURIs.isEmpty()) { - String value = null; - - /* - * We need to create a String that is like 'uri1 uri2 .." to set as - * the value of the wsp:PolicyURIs attribute. - */ - for (Object policyURI : policyURIs) { - String uri = (String)policyURI; - value = (value == null) ? uri : value + " " + uri; - } - - OMNamespace ns = factory.createOMNamespace( - org.apache.neethi.Constants.URI_POLICY_NS, - org.apache.neethi.Constants.ATTR_WSP); - OMAttribute URIs = factory.createOMAttribute("PolicyURIs", ns, - value); - element.addAttribute(URIs); - } - } - - private boolean isAlreadyAdded(final AxisBinding axisBinding, - final OMElement definitionElement) { - QName bindingName = axisBinding.getName(); - QName name = new QName("name"); - for (Iterator iterator = definitionElement - .getChildrenWithName(new QName(wsdl.getNamespaceURI(), - BINDING_LOCAL_NAME)); iterator.hasNext();) { - OMElement element = (OMElement) iterator.next(); - String value = element.getAttributeValue(name); - if (bindingName.getLocalPart().equals(value)) { - return true; - } - } - return false; - } - - private String getEndpointURL(final AxisEndpoint axisEndpoint) { - return axisService.getEndpointURL(); - /* - Parameter modifyAddressParam = axisService.getParameter("modifyUserWSDLPortAddress"); - String endpointURL = axisEndpoint.getEndpointURL(); - if (modifyAddressParam != null && - !Boolean.parseBoolean((String)modifyAddressParam.getValue())) { - return endpointURL; - } - - String hostIP; - - // First check the hostname parameter - hostIP = Utils.getHostname(axisService.getAxisConfiguration()); - - //If it is not set extract the hostIP from the URL - if (hostIP == null) { - hostIP = WSDLSerializationUtil.extractHostIP(axisService.getEndpointURL()); - } - - //TODO This is to prevent problems when JAVA2WSDL tool is used where there is no - //Axis server running. calculateEndpointURL fails in this scenario, refer to - // SimpleHTTPServer#getEPRsForService() - - if (hostIP != null) { - return axisEndpoint.calculateEndpointURL(hostIP); - } else { - return endpointURL; - } - */ - } - - /** - * Generate the Identity element according to the WS-AddressingAndIdentity if the - * AddressingConstants.IDENTITY_PARAMETER parameter is set. - * http://schemas.xmlsoap.org/ws/2006/02/addressingidentity/ - */ - - private void generateIdentityElement(final OMFactory fac,final OMElement epr, final Parameter wsaIdParam) { - - // Create the Identity element - OMElement identity = fac.createOMElement(AddressingConstants.QNAME_IDENTITY); - OMElement keyInfo = fac.createOMElement(AddressingConstants.QNAME_IDENTITY_KEY_INFO); - OMElement x509Data = fac.createOMElement(AddressingConstants.QNAME_IDENTITY_X509_DATA); - OMElement x509cert = fac.createOMElement(AddressingConstants.QNAME_IDENTITY_X509_CERT); - x509cert.setText((String)wsaIdParam.getValue()); - - x509Data.addChild(x509cert); - keyInfo.addChild(x509Data); - identity.addChild(keyInfo); - - epr.addChild(identity); - - } - - - /* - * Generate the EndpointReference element - * - * - * http://some.service.epr/ - * - * - * - */ - private void generateEPRElement(final OMFactory fac, final OMElement port, final String endpointURL){ - - Parameter parameter = axisService.getParameter(AddressingConstants.IDENTITY_PARAMETER); - - // If the parameter is not set, return - if (parameter == null || parameter.getValue() == null) { - return; - } - - OMElement wsaEpr = fac.createOMElement(AddressingConstants.Final.WSA_ENDPOINT_REFERENCE); - - OMElement address = fac.createOMElement(AddressingConstants.Final.WSA_ADDRESS); - address.setText((endpointURL == null) ? "": endpointURL); - - wsaEpr.addChild(address); - - // This will generate the identity element if the service parameter is set - generateIdentityElement(fac, wsaEpr, parameter); - - port.addChild(wsaEpr); - - } - /** - * Generate the <binding> for SOAP 1.1 underneath the passed definitions - * - * @param fac the active OMFactory - * @param defintions the WSDL <definitions> element under which to put the binding - * @throws Exception if there's a problem - */ - private void generateSOAP11Binding(final OMFactory fac, final OMElement defintions) - throws Exception { - OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); - defintions.addChild(binding); - binding.addAttribute(ATTRIBUTE_NAME, axisService.getName() - + BINDING_NAME_SUFFIX, null); - binding.addAttribute("type", tns.getPrefix() + ":" - + axisService.getName() + PORT_TYPE_SUFFIX, null); - - addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService - .getPolicyInclude(), binding); - addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService - .getPolicyInclude(), binding); - - // Adding ext elements - addExtensionElement(fac, binding, BINDING_LOCAL_NAME, TRANSPORT, - TRANSPORT_URI, STYLE, style, soap); - - // Add WS-Addressing UsingAddressing element if appropriate - // SHOULD be on the binding element per the specification - if (axisService.getWSAddressingFlag().equals( - AddressingConstants.ADDRESSING_OPTIONAL)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", - wsaw); - } else if (axisService.getWSAddressingFlag().equals( - AddressingConstants.ADDRESSING_REQUIRED)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", - wsaw); - } - - for (Iterator operations = axisService.getOperations(); operations.hasNext();) { - AxisOperation axisOperation = (AxisOperation) operations.next(); - if (axisOperation.isControlOperation() || axisOperation.getName() == null) { - continue; - } - String operationName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - String soapAction = axisOperation.getSoapAction(); - if (soapAction == null) { - soapAction = ""; - } - addExtensionElement(fac, operation, OPERATION_LOCAL_NAME, - SOAP_ACTION, soapAction, STYLE, style, soap); - - addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY, - axisOperation.getPolicyInclude(), operation); - addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY, - axisOperation.getPolicyInclude(), operation); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage inaxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, operationName, null); - OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, input, SOAP_BODY, SOAP_USE, use, - null, targetNamespace, soap); - addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY, - inaxisMessage.getPolicyInclude(), input); - operation.addChild(input); - writeSoapHeaders(inaxisMessage, fac, input, soap); - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage outAxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, output, SOAP_BODY, SOAP_USE, use, - null, targetNamespace, soap); - addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY, - outAxisMessage.getPolicyInclude(), output); - operation.addChild(output); - writeSoapHeaders(outAxisMessage, fac, output, soap); - } - } - - // generate fault Messages - ArrayList faultyMessages = axisOperation.getFaultMessages(); - if (faultyMessages != null) { - for (int i = 0; i < faultyMessages.size(); i++) { - AxisMessage faultyMessage = (AxisMessage) faultyMessages - .get(i); - OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, fault, FAULT_LOCAL_NAME, SOAP_USE, use, - ATTRIBUTE_NAME, faultyMessage.getName(), soap); - fault.addAttribute(ATTRIBUTE_NAME, faultyMessage.getName(), - null); - // TODO adding policies for fault messages - operation.addChild(fault); - writeSoapHeaders(faultyMessage, fac, fault, soap); - } - } - } - - } - - /** - * Generate the <binding> for SOAP 1.2 underneath the passed definitions - * - * @param fac the active OMFactory - * @param defintions the WSDL <definitions> element under which to put the binding - * @throws Exception if there's a problem - */ - private void generateSOAP12Binding(final OMFactory fac, final OMElement defintions) - throws Exception { - OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); - defintions.addChild(binding); - binding.addAttribute(ATTRIBUTE_NAME, axisService.getName() - + SOAP12BINDING_NAME_SUFFIX, null); - binding.addAttribute("type", tns.getPrefix() + ":" - + axisService.getName() + PORT_TYPE_SUFFIX, null); - - addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService - .getPolicyInclude(), binding); - addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService - .getPolicyInclude(), binding); - - // Adding ext elements - addExtensionElement(fac, binding, BINDING_LOCAL_NAME, TRANSPORT, - TRANSPORT_URI, STYLE, style, soap12); - - // Add WS-Addressing UsingAddressing element if appropriate - // SHOULD be on the binding element per the specification - if (axisService.getWSAddressingFlag().equals( - AddressingConstants.ADDRESSING_OPTIONAL)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", - wsaw); - } else if (axisService.getWSAddressingFlag().equals( - AddressingConstants.ADDRESSING_REQUIRED)) { - WSDLSerializationUtil.addExtensionElement(fac, binding, - AddressingConstants.USING_ADDRESSING, - DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true", - wsaw); - } - - for (Iterator operations = axisService.getOperations(); operations.hasNext();) { - AxisOperation axisOperation = (AxisOperation) operations.next(); - if (axisOperation.isControlOperation() || axisOperation.getName() == null) { - continue; - } - String opeartionName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - String soapAction = axisOperation.getSoapAction(); - if (soapAction == null) { - soapAction = ""; - } - addExtensionElement(fac, operation, OPERATION_LOCAL_NAME, - SOAP_ACTION, soapAction, STYLE, style, soap12); - - addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY, - axisOperation.getPolicyInclude(), operation); - addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY, - axisOperation.getPolicyInclude(), operation); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage inaxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null); - OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, input, SOAP_BODY, SOAP_USE, use, - null, targetNamespace, soap12); - addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY, - inaxisMessage.getPolicyInclude(), input); - operation.addChild(input); - writeSoapHeaders(inaxisMessage, fac, input, soap12); - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage outAxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, output, SOAP_BODY, SOAP_USE, use, - null, targetNamespace, soap12); - addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY, - outAxisMessage.getPolicyInclude(), output); - operation.addChild(output); - writeSoapHeaders(outAxisMessage, fac, output, soap12); - } - } - - // generate fault Messages - ArrayList faultyMessages = axisOperation.getFaultMessages(); - if (faultyMessages != null) { - for (int i = 0; i < faultyMessages.size(); i++) { - AxisMessage faultyMessage = (AxisMessage) faultyMessages - .get(i); - OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME, - wsdl); - addExtensionElement(fac, fault, FAULT_LOCAL_NAME, SOAP_USE, use, - ATTRIBUTE_NAME, faultyMessage.getName(), soap12); - fault.addAttribute(ATTRIBUTE_NAME, faultyMessage.getName(), - null); - // add policies for fault messages - operation.addChild(fault); - writeSoapHeaders(faultyMessage, fac, fault, soap12); - } - } - } - } - private void generateHTTPBinding(final OMFactory fac, final OMElement defintions) - throws Exception { -OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl); -defintions.addChild(binding); -binding.addAttribute(ATTRIBUTE_NAME, axisService.getName() - + HTTP_BINDING, null); -binding.addAttribute("type", tns.getPrefix() + ":" - + axisService.getName() + PORT_TYPE_SUFFIX, null); - -// Adding ext elements -OMElement httpBinding = fac.createOMElement("binding", http); -binding.addChild(httpBinding); -httpBinding.addAttribute("verb", "POST", null); - - -for (Iterator operations = axisService.getOperations(); operations.hasNext();) { - AxisOperation axisOperation = (AxisOperation) operations.next(); - if (axisOperation.isControlOperation() || axisOperation.getName() == null) { - continue; - } - String opeartionName = axisOperation.getName().getLocalPart(); - OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME, - wsdl); - binding.addChild(operation); - - OMElement httpOperation = fac.createOMElement("operation", http); - operation.addChild(httpOperation); - httpOperation.addAttribute("location", axisService.getName() + "/" + axisOperation.getName() - .getLocalPart(), null); - - String MEP = axisOperation.getMessageExchangePattern(); - - if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_IN_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage inaxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - if (inaxisMessage != null) { - operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null); - OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, - wsdl); - OMElement inputelement = fac.createOMElement("content", - mime); - input.addChild(inputelement); - inputelement.addAttribute("type", "text/xml", null); - inputelement.addAttribute("part", axisOperation.getName() - .getLocalPart(), null); - operation.addChild(input); - } - } - - if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) - || WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT - .equals(MEP) - || WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY - .equals(MEP) - || WSDL2Constants.MEP_URI_IN_OUT - .equals(MEP)) { - AxisMessage outAxisMessage = axisOperation - .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - if (outAxisMessage != null) { - OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, - wsdl); - OMElement outElement = fac.createOMElement("content", mime); - outElement.addChild(outElement); - outElement.addAttribute("type", "text/xml", null); - outElement.addAttribute("part", axisOperation.getName() - .getLocalPart(), null); - output.addChild(outElement); - operation.addChild(output); - } - } -} -} -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSTools.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSTools.java deleted file mode 100644 index bbb4534b97..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSTools.java +++ /dev/null @@ -1,131 +0,0 @@ - -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.util; - -import java.io.File; -import java.util.ArrayList; - -import org.ow2.jonas.Version; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -public class JAXWSTools { - - private static final Log logger = LogFactory.getLog(JAXWSTools.class); - - private final static String TOOLS = "tools.jar"; - - - public JAXWSTools() { - } - - public static File[] getClasspath() throws Exception { - - String osName = System.getProperty("os.name", ""); - ArrayList jars = new ArrayList(); - - addWsGenJarsLocation(jars); - - // add tools.jar to classpath except on Mac OS. On Mac OS there is classes.jar with the - // same contents as tools.jar and is automatically included in the classpath. - if(osName.indexOf("mac") < 0 ) { - addToolsJarLocation(jars); - } - - return jars.toArray(new File[jars.size()]); - - } - private static void addWsGenJarsLocation(final ArrayList jars) { - String jonasHomePath = System.getProperty("jonas.root"); - //4 kinds of jars - //first is from axis2 bundle //lib/sun-wsgen - //second is javaeeapi.jar - //third is ow2-bundles-externals-jaxb2.jar - //fourth is lib/jaxb-xjc.jar - - String version = Version.getNumber(); - - //axis2 Bundle .jar - String axis2BundlePath = jonasHomePath + "/repositories/maven2-internal/org/ow2/jonas/jonas-webservices-axis2/" + version + "/jonas-webservices-axis2-" + version + "-ipojo.jar"; - - if(new File(axis2BundlePath).exists()) { - jars.add(new File(axis2BundlePath)); - } - - //javaEE-API.jar - - String javaEEAPIPath = jonasHomePath + "/repositories/maven2-internal/org/ow2/jonas/osgi/javaee-api/" + version + "/javaee-api-" + version + ".jar"; - - if(new File(javaEEAPIPath).exists()) { - jars.add(new File(javaEEAPIPath)); - } - - //ow2-bundles-externals-jaxb2.jar - File ow2JAXBDir = new File(jonasHomePath + "/repositories/maven2-internal/org/ow2/bundles/ow2-bundles-externals-jaxb2"); - File jaxbDir = ow2JAXBDir.listFiles()[0]; - String ow2JAXBVersion = null; - if(jaxbDir.exists()) { - ow2JAXBVersion = jaxbDir.getName(); - } - - String ow2JAXBPath = jonasHomePath + "/repositories/maven2-internal/org/ow2/bundles/ow2-bundles-externals-jaxb2/" + ow2JAXBVersion + "/ow2-bundles-externals-jaxb2-" + ow2JAXBVersion + ".jar"; - if(new File(ow2JAXBPath).exists()) { - jars.add(new File(ow2JAXBPath)); - } - - //jaxb-xjc.jar - String jaxbxjcPath = jonasHomePath + "/lib/jaxb-xjc.jar"; - if(new File(jaxbxjcPath).exists()) { - jars.add(new File(jaxbxjcPath)); - } - - } - - private static void addToolsJarLocation(final ArrayList jars) { - //create a new File then check exists() - String jreHomePath = System.getProperty("java.home"); - String javaHomePath = ""; - int jreHomePathLength = jreHomePath.length(); - if (jreHomePathLength > 0) { - int i = jreHomePath.substring(0, jreHomePathLength -1).lastIndexOf(java.io.File.separator); - javaHomePath = jreHomePath.substring(0, i); - } - File jdkhomelib = new File(javaHomePath, "lib"); - if (!jdkhomelib.exists()) { - logger.warn("Missing " + jdkhomelib.getAbsolutePath() - + ". This may be required for wsgen to run. "); - } - else { - File tools = new File(jdkhomelib, TOOLS); - if (!tools.exists()) { - logger.warn("Missing tools.jar in" + jdkhomelib.getAbsolutePath() - + ". This may be required for wsgen to run. "); - } else { - jars.add(tools.getAbsoluteFile()); - } - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSUtils.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSUtils.java deleted file mode 100644 index 6dad9d59a6..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/JAXWSUtils.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.axis2.util; - -import java.lang.reflect.Array; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.StringTokenizer; - -import javax.jws.WebService; -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceProvider; - -import org.ow2.jonas.ws.axis2.JaxWsImplementorInfo; - -public abstract class JAXWSUtils { - - - public static boolean isEmpty(final String str) { - if (str == null || "".equals(str)) { - return true; - } else { - return false; - } - } - private static String getNamespace(final Class clazz, final String namespace) { - if (namespace == null || namespace.trim().length() == 0) { - Package pkg = clazz.getPackage(); - if (pkg == null) { - return null; - } else { - return getNamespace(pkg.getName()); - } - } else { - return namespace.trim(); - } - } - private static String getServiceName(final Class clazz, final String name) { - if (name == null || name.trim().length() == 0) { - return clazz.getSimpleName() + "Service"; - } else { - return name.trim(); - } - } - private static QName getServiceQName(final Class clazz, final String namespace, final String name) { - return new QName(getNamespace(clazz, namespace), getServiceName(clazz, name)); - } - public static QName getServiceQName(final Class clazz) { - WebService webService = - (WebService)clazz.getAnnotation(WebService.class); - if (webService == null) { - WebServiceProvider webServiceProvider = - (WebServiceProvider)clazz.getAnnotation(WebServiceProvider.class); - if (webServiceProvider == null) { - throw new IllegalArgumentException("The " + clazz.getName() + " is not annotated"); - } - return getServiceQName(clazz, webServiceProvider.targetNamespace(), webServiceProvider.serviceName()); - } else { - return getServiceQName(clazz, webService.targetNamespace(), webService.serviceName()); - } - } - - public static String getNamespace(final String packageName) { - if (packageName == null || packageName.length() == 0) { - return null; - } - StringTokenizer tokenizer = new StringTokenizer(packageName, "."); - String[] tokens; - if (tokenizer.countTokens() == 0) { - tokens = new String[0]; - } else { - tokens = new String[tokenizer.countTokens()]; - for (int i = tokenizer.countTokens() - 1; i >= 0; i--) { - tokens[i] = tokenizer.nextToken(); - } - } - StringBuffer namespace = new StringBuffer("http://"); - String dot = ""; - for (int i = 0; i < tokens.length; i++) { - if (i == 1) { - dot = "."; - } - namespace.append(dot + tokens[i]); - } - namespace.append('/'); - return namespace.toString(); - } - - public static String getPackageName(final Class clazz) { - String className = clazz.getName(); - if (className.startsWith("[L")) { - className = className.substring(2); - } - int pos = className.lastIndexOf('.'); - if (pos != -1) { - return className.substring(0, pos); - } else { - return ""; - } - } - - public static Class loadClass(final String className, final Class callingClass) throws ClassNotFoundException { - try { - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - - if (cl != null) { - return cl.loadClass(className); - } - } catch (ClassNotFoundException e) { - // ignore - } - return loadClass2(className, callingClass); - } - - private static Class loadClass2(final String className, final Class callingClass) throws ClassNotFoundException { - try { - return Class.forName(className); - } catch (ClassNotFoundException ex) { - try { - - if (JaxWsImplementorInfo.class.getClassLoader() != null) { - return JaxWsImplementorInfo.class.getClassLoader().loadClass(className); - } - } catch (ClassNotFoundException exc) { - if (callingClass != null && callingClass.getClassLoader() != null) { - return callingClass.getClassLoader().loadClass(className); - } - } - throw ex; - } - } - - public static Class getClassFromType(final Type t) { - if (t instanceof Class) { - return (Class) t; - } else if (t instanceof GenericArrayType) { - GenericArrayType g = (GenericArrayType) t; - return Array.newInstance(getClassFromType(g.getGenericComponentType()), 0).getClass(); - } else if (t instanceof ParameterizedType) { - ParameterizedType p = (ParameterizedType) t; - return getClassFromType(p.getRawType()); - } - // TypeVariable and WildCardType are not handled as it is unlikely such - // Types will - // JAXB Code Generated. - assert false; - throw new IllegalArgumentException("Cannot get Class object from unknown Type"); - } - - public static String getDefaultNamespace(final Class clazz) { - String pkg = getNamespace(getPackageName(clazz)); - return isEmpty(pkg) ? "http://unknown.namespace/" : pkg; - } - - - private static QName getPortQName(final Class clazz, final String namespace, final String name, final String portName) { - return new QName(getNamespace(clazz, namespace), getPortName(clazz, name, portName)); - } - - public static QName getPortQName(final Class clazz) { - WebService webService = - (WebService)clazz.getAnnotation(WebService.class); - if (webService == null) { - WebServiceProvider webServiceProvider = - (WebServiceProvider)clazz.getAnnotation(WebServiceProvider.class); - if (webServiceProvider == null) { - throw new IllegalArgumentException("The " + clazz.getName() + " is not annotated"); - } - return getPortQName(clazz, webServiceProvider.targetNamespace(), null, webServiceProvider.portName()); - } else { - return getPortQName(clazz, webService.targetNamespace(), webService.name(), webService.portName()); - } - } - private static String getPortName(final Class clazz, final String name, final String portName) { - if (portName == null || portName.trim().length() == 0) { - if (name == null || name.trim().length() == 0) { - return clazz.getSimpleName() + "Port"; - } else { - return name + "Port"; - } - } else { - return portName.trim(); - } - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleURIResolver.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleURIResolver.java deleted file mode 100644 index 403a8cc189..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleURIResolver.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.ow2.jonas.ws.axis2.util; - - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; - -/** - */ -public class SimpleURIResolver { - - private URI uri; - private URL url; - private InputStream is; - - public SimpleURIResolver() { - } - - public SimpleURIResolver(String path) throws IOException { - this("", path); - } - - public SimpleURIResolver(String baseUriStr, String uriStr) throws IOException { - if (baseUriStr != null && baseUriStr.startsWith("jar:")) { - tryJar(baseUriStr, uriStr); - } else if (uriStr.startsWith("jar:")) { - tryJar(uriStr); - } else { - tryFileSystem(baseUriStr, uriStr); - } - } - - public void resolve(String baseUriStr, String uriStr) throws IOException { - this.uri = null; - this.url = null; - this.is = null; - - if (baseUriStr != null && baseUriStr.startsWith("jar:")) { - tryJar(baseUriStr, uriStr); - } else if (uriStr.startsWith("jar:")) { - tryJar(uriStr); - } else { - tryFileSystem(baseUriStr, uriStr); - } - } - - private void tryFileSystem(String baseUriStr, String uriStr) throws IOException { - try { - URI relative; - File uriFile = new File(uriStr); - uriFile = new File(uriFile.getAbsolutePath()); - - if (uriFile.exists()) { - relative = uriFile.toURI(); - } else { - relative = new URI(uriStr.replaceAll(" ", "%20")); - } - - if (relative.isAbsolute()) { - uri = relative; - url = relative.toURL(); - is = url.openStream(); - } else if (baseUriStr != null) { - URI base; - File baseFile = new File(baseUriStr); - - if (!baseFile.exists() && baseUriStr.startsWith("file:/")) { - baseFile = new File(baseUriStr.substring(6)); - } - - if (baseFile.exists()) { - base = baseFile.toURI(); - } else { - base = new URI(baseUriStr); - } - - base = base.resolve(relative); - if (base.isAbsolute()) { - uri = base; - url = base.toURL(); - is = url.openStream(); - } - } - } catch (URISyntaxException e) { - // do nothing - } - } - - private void tryJar(String baseStr, String uriStr) throws IOException { - int i = baseStr.indexOf('!'); - if (i == -1) { - tryFileSystem(baseStr, uriStr); - } - - String jarBase = baseStr.substring(0, i + 1); - String jarEntry = baseStr.substring(i + 1); - try { - URI u = new URI(jarEntry).resolve(uriStr); - - tryJar(jarBase + u.toString()); - - if (is != null) { - if (u.isAbsolute()) { - url = u.toURL(); - } - return; - } - } catch (URISyntaxException e) { - // do nothing - } - - tryFileSystem("", uriStr); - } - - private void tryJar(String uriStr) throws IOException { - int i = uriStr.indexOf('!'); - if (i == -1) { - return; - } - - url = new URL(uriStr); - try { - is = url.openStream(); - try { - uri = url.toURI(); - } catch (URISyntaxException ex) { - // ignore - } - } catch (IOException e) { - // do nothing - } - } - - public URI getURI() { - return uri; - } - - public URL getURL() { - return url; - } - - public InputStream getInputStream() { - return is; - } - - public boolean isResolved() { - return is != null; - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleWSDLLocator.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleWSDLLocator.java deleted file mode 100644 index 648b43ca8d..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/SimpleWSDLLocator.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.ow2.jonas.ws.axis2.util; - - -import java.io.IOException; - -import javax.wsdl.xml.WSDLLocator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.xml.sax.InputSource; - -public class SimpleWSDLLocator implements WSDLLocator { - - private static final Log LOG = LogFactory.getLog(SimpleWSDLLocator.class); - - private String baseURI; - private String lastImportLocation; - private SimpleURIResolver resolver; - - public SimpleWSDLLocator(final String baseURI) { - this.baseURI = baseURI; - this.resolver = new SimpleURIResolver(); - } - - public InputSource getBaseInputSource() { - return resolve("", this.baseURI); - } - - public String getBaseURI() { - return this.baseURI; - } - - public InputSource getImportInputSource(final String parentLocation, final String importLocation) { - return resolve(parentLocation, importLocation); - } - - protected InputSource resolve(final String parentLocation, final String importLocation) { - if (LOG.isDebugEnabled()) { - LOG.debug("Resolving '" + importLocation + "' relative to '" + parentLocation + "'"); - } - try { - this.resolver.resolve(parentLocation, importLocation); - if (this.resolver.isResolved()) { - this.lastImportLocation = this.resolver.getURI().toString(); - if (LOG.isDebugEnabled()) { - LOG.debug("Resolved location '" + this.lastImportLocation + "'"); - } - return new InputSource(this.resolver.getInputStream()); - } - } catch (IOException e) { - // ignore - } - return null; - } - - public String getLatestImportURI() { - return this.lastImportLocation; - } - - public void close() { - } - - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/WSDLUtils.java b/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/WSDLUtils.java deleted file mode 100644 index d640c54144..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/java/org/ow2/jonas/ws/axis2/util/WSDLUtils.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.ow2.jonas.ws.axis2.util; - - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.http.HTTPAddress; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.extensions.soap12.SOAP12Address; -import javax.xml.namespace.QName; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public class WSDLUtils { - - private static final Log LOG = LogFactory.getLog(WSDLUtils.class); - - public static void trimDefinition(final Definition def, - final String serviceName, - final String portName) { - Map services = def.getServices(); - if (services != null) { - ArrayList servicesToRemove = new ArrayList(services.size()); - - Iterator serviceIterator = services.entrySet().iterator(); - while (serviceIterator.hasNext()) { - Map.Entry serviceEntry = (Map.Entry) serviceIterator.next(); - QName currServiceName = (QName) serviceEntry.getKey(); - if (currServiceName.getLocalPart().equals(serviceName)) { - Service service = (Service) serviceEntry.getValue(); - trimService(service, portName); - } else { - servicesToRemove.add(currServiceName); - } - } - - for (QName serviceToRemove : servicesToRemove) { - def.removeService(serviceToRemove); - } - } - } - - public static void trimService(final Service service, - final String portName) { - Map ports = service.getPorts(); - if (ports != null) { - ArrayList portsToRemove = new ArrayList(ports.size()); - - Iterator portIterator = ports.entrySet().iterator(); - while (portIterator.hasNext()) { - Map.Entry portEntry = (Map.Entry) portIterator.next(); - String currPortName = (String) portEntry.getKey(); - if (!currPortName.equals(portName)) { - portsToRemove.add(currPortName); - } - } - - for (String portToRemove : portsToRemove) { - service.removePort(portToRemove); - } - } - } - - public static void updateLocations(final Definition def, - final String location) { - Map services = def.getServices(); - if (services != null) { - Iterator serviceIterator = services.entrySet().iterator(); - while (serviceIterator.hasNext()) { - Map.Entry serviceEntry = (Map.Entry) serviceIterator.next(); - Service service = (Service) serviceEntry.getValue(); - updateLocations(service, location); - } - } - } - - public static void updateLocations(final Service service, - final String location) { - boolean updated = false; - Map ports = service.getPorts(); - if (ports != null) { - Iterator portIterator = ports.entrySet().iterator(); - while (portIterator.hasNext()) { - Map.Entry portEntry = (Map.Entry) portIterator.next(); - Port port = (Port) portEntry.getValue(); - updateLocations(port, location); - } - } - } - - public static void updateLocations(final Port port, - final String location) { - List exts = port.getExtensibilityElements(); - if (exts != null) { - for (Object extension : exts) { - if (extension instanceof SOAP12Address) { - ((SOAP12Address)extension).setLocationURI(location); - } else if (extension instanceof SOAPAddress) { - ((SOAPAddress)extension).setLocationURI(location); - } else if (extension instanceof HTTPAddress) { - ((HTTPAddress)extension).setLocationURI(location); - } - } - } - } - -} - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/axis2.xml b/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/axis2.xml deleted file mode 100644 index 6bb7027d12..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/axis2.xml +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - true - false - false - false - - - - - - 30000 - - - - false - - - - - - false - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8080 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > - - - - - - - - - - - - - - HTTP/1.1 - chunked - - - - - - - HTTP/1.1 - chunked - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/jonas-webservices-axis2-core.bnd b/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/jonas-webservices-axis2-core.bnd deleted file mode 100644 index 600960eebd..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/resources/META-INF/jonas-webservices-axis2-core.bnd +++ /dev/null @@ -1,79 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- -Import-Package org.apache.neethi,\ - org.w3c.dom,\ - com.ctc.wstx.stax,\ - javax.xml.namespace,\ - javax.xml.datatype,\ - javax.xml.parsers,\ - javax.xml.transform,\ - javax.xml.validation,\ - javax.xml.xpath,\ - org.xml.sax,\ - org.xml.sax.*,\ - org.objectweb.carol.jndi.spi,\ - org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.intercept.spi,\ - !com*,\ - !org.apache.avalon.framework.logger,\ - !sun.misc.*,\ - !org.jvnet.*,\ - !org.apache.log,\ - !org.apache.woden.*,\ - !org.apache.tools.ant.*,\ - !org.jaxen.*,\ - !org.apache.commons.codec.*,\ - !org.apache.commons.fileupload.*,\ - * - - -Private-Package org.ow2.jonas.ws.axis2.* - -Embed-Dependency axiom-api,\ - axiom-dom,\ - axiom-impl,\ - axis2-adb,\ - axis2-jaxws,\ - axis2-kernel,\ - axis2-metadata,\ - axis2-transport-http,\ - axis2-transport-local,\ - axis2-java2wsdl,\ - backport-util-concurrent,\ - commons-httpclient,\ - commons-io,\ - commons-logging,\ - commons-logging-api,\ - geronimo-jaxws_2.1_spec,\ - httpcore,\ - jaxb-impl,\ - annogen,\ - xml-resolver,\ - log4j,\ - XmlSchema,\ - xbean-reflect,\ - jaxws-rt;inline=true,\ - axis2-saaj;inline=true,\ - jaxws-tools;inline=true - - Embed-Transitive true diff --git a/jonas/modules/services/webservices/axis2/core/src/main/resources/metadata.xml b/jonas/modules/services/webservices/axis2/core/src/main/resources/metadata.xml deleted file mode 100644 index e7b105fb1a..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSBean.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSBean.java deleted file mode 100644 index ebfd8449e2..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSBean.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.ejb3; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.jws.HandlerChain; -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -@WebService(name="jaxwsbean", - serviceName="jaxwsbean", - wsdlLocation="META-INF/wsdl/Jaxwsbean.wsdl") - -@Stateless(mappedName="JAXWSBean") -@Remote(JAXWSGreeter.class) -@HandlerChain(file="META-INF/handlers.xml", name = "Handler") -@SOAPBinding(style=SOAPBinding.Style.RPC, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -public class JAXWSBean implements JAXWSGreeter { - - @WebMethod(exclude=false) - public String greetMe(final String me) { - System.out.println("i'm a ejb ws: " + me); - if (!"foo bar".equals(me)) { - throw new RuntimeException("Wrong parameter"); - } - return "Hello " + me; - } - - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSGreeter.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSGreeter.java deleted file mode 100644 index 27ba407cca..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/ejb3/JAXWSGreeter.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.ejb3; - - -public interface JAXWSGreeter { - - public String greetMe(String me); - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java deleted file mode 100644 index 69feff3078..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.pojo; - -import javax.jws.HandlerChain; -import javax.jws.WebService; - -import org.ow2.jonas.ws.axis2.pojo.word.Word; - - -@WebService(name="HelloService",serviceName="HelloService",wsdlLocation="WEB-INF/wsdl/TestPojo.wsdl") -@HandlerChain(file="handlers.xml", name = "Handler") -public class HelloService { - /** - * - */ - private static final long serialVersionUID = 1L; - - public String greetMe(final Word w) { - // TODO Auto-generated method stub - return "hello" + w.getName(); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java deleted file mode 100644 index c5e1d2a937..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.pojo.word; - -import java.io.Serializable; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - - - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "id", - "name" -}) -@XmlRootElement(name = "Word") -public class Word implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - @XmlElement(name = "id", required = true) - int id; - @XmlElement(name = "name", required = true) - String name; - - public Word() { - this.id = 0; - this.name = null; - } - public void setId(final int id) { - this.id = id; - } - public int getId() { - return this.id; - } - public void setName(final String name) { - this.name = name; - } - public String getName() { - return this.name; - } -} - diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2HandlerChainTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2HandlerChainTest.java deleted file mode 100644 index 526391d072..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2HandlerChainTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.test; - -import java.io.InputStream; - -import org.apache.axis2.jaxws.description.impl.DescriptionUtils; -import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class Axis2HandlerChainTest { - - @BeforeClass - public void setUp() { - } - - @AfterClass - public void tearDown() { - } - - //@Test(groups = { "Handler" }) - public void testBasic() { - - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - InputStream in = cl.getResourceAsStream("WEB-INF/handlers.xml"); - - System.out.println(in == null); - HandlerChainsType handlerChains = DescriptionUtils.loadHandlerChains(in,null); - Assert.assertTrue(in != null); - - Assert.assertEquals(handlerChains.getHandlerChain().size(), 2); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2WSEndpointTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2WSEndpointTest.java deleted file mode 100644 index 79baf1a06a..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/axis2/test/Axis2WSEndpointTest.java +++ /dev/null @@ -1,305 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.axis2.test; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.HashMap; - -import javax.jws.WebService; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.ow2.jonas.ws.axis2.jaxws.Axis2WSEndpoint; -import org.ow2.jonas.ws.axis2.pojo.HelloService; -import org.ow2.jonas.ws.jaxws.IWSRequest; -import org.ow2.jonas.ws.jaxws.IWSResponse; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.http.servlet.ServletRequestAdapter; -import org.ow2.jonas.ws.jaxws.http.servlet.ServletResponseAdapter; -import org.ow2.jonas.ws.jaxws.http.servlet.test.ServletInputStreamForTest; -import org.ow2.jonas.ws.jaxws.http.servlet.test.ServletOutputStreamForTest; -import org.ow2.jonas.ws.jaxws.http.servlet.test.ServletRequestAdapterForTest; -import org.ow2.jonas.ws.jaxws.http.servlet.test.ServletResponseAdapterForTest; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -public class Axis2WSEndpointTest { - - @BeforeClass - public void setUp() { - } - - @AfterClass - public void tearDown() { - } - //@Test(groups = { "POJO" }) - public void testAxis2WSEndpointGetWSDL() throws URISyntaxException, IOException { - ServletRequestAdapterForTest request = new ServletRequestAdapterForTest(504, - "text/xml; charset=utf-8", - null, - "GET", - new HashMap(), - new URI("/HelloService"), - new URL("http://localhost:9000/HelloService?wsdl"), - "?wsdl", - new HashMap(), - "127.0.0.1"); - - ServletOutputStreamForTest out = new ServletOutputStreamForTest(); - - ServletResponseAdapterForTest response = new ServletResponseAdapterForTest("text/xml; charset=utf-8", - "127.0.0.1", - null, - null, - 8080, - out); - - IWSRequest req = new ServletRequestAdapter(request); - - req.setAttribute(HttpServletRequest.class, request); - - req.setAttribute(HttpServletResponse.class, response); - - PortMetaData pmd = new PortMetaData(); - - pmd.setContextRoot("/"); - pmd.setUrlPattern("HelloService"); - WebService ws = HelloService.class.getAnnotation(WebService.class); - pmd.setWSDLLocation(ws.wsdlLocation()); - - Axis2WSEndpoint endpoint = new Axis2WSEndpoint(HelloService.class, IWebServiceEndpoint.EndpointType.POJO, pmd, null,null); - - IWSResponse res = new ServletResponseAdapter(response); - - try { - // init axis2 - endpoint.init(); - } catch (Exception e) { - System.err.println("Exception occurs when creating POJO endpoint for HelloService !"); - e.printStackTrace(); - } - - try { - endpoint.invoke(req, res); - } catch (WSException e) { - System.err.println("Exception occurs when invoking POJO endpoint HelloService !"); - e.printStackTrace(); - } - Assert.assertTrue(out.getStringBuffer().toString().contains("wsdl:definitions")); - } - - //@Test(groups = { "POJO" }) - public void testAxis2WSEndpointInvoke() { - try { - invokeWithRequestFile("HelloService", HelloService.class.getCanonicalName(), "WEB-INF/test_service_pojo.xml"); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void invokeWithRequestFile(final String serviceName, final String endPointClassName, final String requestFile ) throws ParserConfigurationException, SAXException, IOException { - - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - InputStream in = cl.getResourceAsStream(requestFile); - - //This will reduce number of requests files - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); - - Document doc = null; - try { - System.out.println(in == null); - doc = documentBuilder.parse(in); - } catch(Exception e) { - e.printStackTrace(); - } - - Element root = doc.getDocumentElement(); - NodeList nodeList = root.getElementsByTagName("soap:Envelope"); - - - - - ServletInputStreamForTest input; - - - for(int i = 0; i < nodeList.getLength(); i++){ - - StringBuffer envelope = new StringBuffer(""); - - NodeList children = element.getChildNodes(); - if(children != null){ - for(int j=0; j < children.getLength(); j++){ - if(children.item(j).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE){ - Element child = (Element)children.item(j); - envelope.append(getElementContent(child).trim()); - }else if(children.item(j).getNodeType() == org.w3c.dom.Node.TEXT_NODE){ - envelope.append(children.item(j).getNodeValue().trim()); - } - } - } - envelope.append(""); - }else { - envelope.append("/>"); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - System.out.println(envelope); - - PortMetaData pmd = new PortMetaData(); - - pmd.setContextRoot("/"); - pmd.setUrlPattern("HelloService"); - WebService ws = HelloService.class.getAnnotation(WebService.class); - pmd.setWSDLLocation(ws.wsdlLocation()); - - input = new ServletInputStreamForTest(envelope.toString().getBytes("UTF-8")); - - - ServletRequestAdapterForTest request = null; - - try { - request = new ServletRequestAdapterForTest(504, - "text/xml; charset=utf-8", - input, - "POST", - new HashMap(), - new URI("/HelloService"), - new URL("http://localhost:9000/HelloService"), - null, - new HashMap(), - "127.0.0.1"); - } catch (URISyntaxException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - ServletOutputStreamForTest out = new ServletOutputStreamForTest(); - - ServletResponseAdapterForTest response = new ServletResponseAdapterForTest("text/xml; charset=utf-8", - "127.0.0.1", - null, - null, - 8080, - out); - - - IWSRequest req = new ServletRequestAdapter(request); - - req.setAttribute(HttpServletRequest.class, request); - - req.setAttribute(HttpServletResponse.class, response); - - Axis2WSEndpoint endpoint = new Axis2WSEndpoint(HelloService.class, IWebServiceEndpoint.EndpointType.POJO, pmd, null,null); - - IWSResponse res = new ServletResponseAdapter(response); - - try { - // init axis2 - endpoint.init(); - } catch (Exception e) { - System.err.println("Exception occurs when creating POJO endpoint for HelloService !"); - e.printStackTrace(); - } - - try { - endpoint.invoke(req, res); - } catch (Exception e) { - System.err.println("Exception occurs when invoking POJO endpoint HelloService !"); - e.printStackTrace(); - } - - System.out.println(out.getStringBuffer()); - Assert.assertTrue(out.getStringBuffer().toString().contains("helloJOnAS")); - } - } - - private String getElementContent(final Element e){ - StringBuffer content = new StringBuffer("<"+e.getNodeName()); - NamedNodeMap attributes = e.getAttributes(); - - if(attributes != null){ - for(int k=0; k < attributes.getLength(); k++){ - content.append(" "+attributes.item(k).getNodeName()) ; - content.append("=\""+attributes.item(k).getNodeValue()+"\"") ; - } - } - - String value = e.getTextContent(); - - if(value != null && !value.equals("")){ - content.append(">"); - - NodeList children = e.getChildNodes(); - if(children != null){ - for(int j=0; j < children.getLength(); j++){ - if(children.item(j).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE){ - Element child = (Element)children.item(j); - content.append(getElementContent(child).trim()); - }else if(children.item(j).getNodeType() == org.w3c.dom.Node.TEXT_NODE){ - content.append(children.item(j).getNodeValue().trim()); - } - } - } - content.append(""); - }else { - content.append("/>"); - } - - return content.toString(); - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletInputStreamForTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletInputStreamForTest.java deleted file mode 100644 index dc77b823c5..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletInputStreamForTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.http.servlet.test; - -import java.io.IOException; - -import javax.servlet.ServletInputStream; - -public class ServletInputStreamForTest extends ServletInputStream { - - byte [] buff; - - int count; - - public ServletInputStreamForTest(final byte [] buff) { - this.buff = buff; - this.count = 0; - } - - - @Override - public int read() throws IOException { - if(count < buff.length) { - int tmp = buff[count]; - count++; - return tmp; - } else { - return -1; - } - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletOutputStreamForTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletOutputStreamForTest.java deleted file mode 100644 index b6439c35df..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletOutputStreamForTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxws.http.servlet.test; - -import java.io.IOException; - -import javax.servlet.ServletOutputStream; - -public class ServletOutputStreamForTest extends ServletOutputStream { - - private StringBuffer sb; - public ServletOutputStreamForTest() { - super(); - sb = new StringBuffer(); - } - - - @Override - public void write(final int ch) throws IOException { - sb.append((char)ch); - } - - public StringBuffer getStringBuffer() { - return sb; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletRequestAdapterForTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletRequestAdapterForTest.java deleted file mode 100644 index 641b735c54..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletRequestAdapterForTest.java +++ /dev/null @@ -1,363 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxws.http.servlet.test; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URL; -import java.security.Principal; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletInputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import org.ow2.jonas.ws.jaxws.IWSRequest; - -public class ServletRequestAdapterForTest implements IWSRequest,HttpServletRequest { - - private int contentLength; - - private String contentType; - - private ServletInputStream in; - - private String method; - - private Map parameters; - - private URI uri; - - private URL url; - - private Map headers; - - private Map attributes; - - private String remoteAddress; - - private String queryString; - - public ServletRequestAdapterForTest(final int contentLength, final String contentType, final ServletInputStream in, - final String method, final Map parameters, final URI uri,final URL url, final String queryString,final Map headers, - final String remoteAddress) { - this.contentType = contentType; - this.in = in; - this.method = method; - this.parameters = parameters; - this.uri = uri; - this.headers = headers; - this.attributes = new HashMap(); - this.remoteAddress = remoteAddress; - this.url = url; - this.queryString = queryString; - } - - public T getAttribute(final Class type) { - return type.cast(attributes.get(type)); - } - - public String getContentType() { - // TODO Auto-generated method stub - return contentType; - } - - public String getHeader(final String name) { - // TODO Auto-generated method stub - return (String) headers.get(name); - } - - public ServletInputStream getInputStream() throws IOException { - // TODO Auto-generated method stub - return in; - } - - public String getRemoteAddr() { - // TODO Auto-generated method stub - return remoteAddress; - } - - public T setAttribute(final Class type, final T value) { - Object old = attributes.put(type, value); - return type.cast(old); - } - - public String getAuthType() { - // TODO Auto-generated method stub - return null; - } - - public String getContextPath() { - // TODO Auto-generated method stub - return null; - } - - public Cookie[] getCookies() { - // TODO Auto-generated method stub - return null; - } - - public long getDateHeader(final String arg0) { - // TODO Auto-generated method stub - return 0; - } - - public Enumeration getHeaderNames() { - // TODO Auto-generated method stub - return null; - } - - public Enumeration getHeaders(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public int getIntHeader(final String arg0) { - // TODO Auto-generated method stub - return 0; - } - - public String getMethod() { - // TODO Auto-generated method stub - return method; - } - - public String getPathInfo() { - // TODO Auto-generated method stub - return null; - } - - public String getPathTranslated() { - // TODO Auto-generated method stub - return null; - } - - public String getQueryString() { - // TODO Auto-generated method stub - return queryString; - } - - public String getRemoteUser() { - // TODO Auto-generated method stub - return null; - } - - public String getRequestURI() { - // TODO Auto-generated method stub - return uri.toString(); - } - - public StringBuffer getRequestURL() { - // TODO Auto-generated method stub - return new StringBuffer(url.toString()); - } - - public String getRequestedSessionId() { - // TODO Auto-generated method stub - return null; - } - - public String getServletPath() { - // TODO Auto-generated method stub - return null; - } - - public HttpSession getSession() { - // TODO Auto-generated method stub - return null; - } - - public HttpSession getSession(final boolean arg0) { - // TODO Auto-generated method stub - return null; - } - - public Principal getUserPrincipal() { - // TODO Auto-generated method stub - return null; - } - - public boolean isRequestedSessionIdFromCookie() { - // TODO Auto-generated method stub - return false; - } - - public boolean isRequestedSessionIdFromURL() { - // TODO Auto-generated method stub - return false; - } - - public boolean isRequestedSessionIdFromUrl() { - // TODO Auto-generated method stub - return false; - } - - public boolean isRequestedSessionIdValid() { - // TODO Auto-generated method stub - return false; - } - - public boolean isUserInRole(final String arg0) { - // TODO Auto-generated method stub - return false; - } - - public Object getAttribute(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public Enumeration getAttributeNames() { - // TODO Auto-generated method stub - return null; - } - - public String getCharacterEncoding() { - // TODO Auto-generated method stub - return null; - } - - public int getContentLength() { - // TODO Auto-generated method stub - return contentLength; - } - - public String getLocalAddr() { - // TODO Auto-generated method stub - return null; - } - - public String getLocalName() { - // TODO Auto-generated method stub - return null; - } - - public int getLocalPort() { - // TODO Auto-generated method stub - return 0; - } - - public Locale getLocale() { - // TODO Auto-generated method stub - return null; - } - - public Enumeration getLocales() { - // TODO Auto-generated method stub - return null; - } - - public String getParameter(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public Map getParameterMap() { - // TODO Auto-generated method stub - return null; - } - - public Enumeration getParameterNames() { - // TODO Auto-generated method stub - return null; - } - - public String[] getParameterValues(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public String getProtocol() { - // TODO Auto-generated method stub - return null; - } - - public BufferedReader getReader() throws IOException { - // TODO Auto-generated method stub - return null; - } - - public String getRealPath(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public String getRemoteHost() { - // TODO Auto-generated method stub - return null; - } - - public int getRemotePort() { - // TODO Auto-generated method stub - return 0; - } - - public RequestDispatcher getRequestDispatcher(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - public String getScheme() { - // TODO Auto-generated method stub - return null; - } - - public String getServerName() { - // TODO Auto-generated method stub - return null; - } - - public int getServerPort() { - // TODO Auto-generated method stub - return 0; - } - - public boolean isSecure() { - // TODO Auto-generated method stub - return false; - } - - public void removeAttribute(final String arg0) { - // TODO Auto-generated method stub - - } - - public void setAttribute(final String arg0, final Object arg1) { - // TODO Auto-generated method stub - - } - - public void setCharacterEncoding(final String arg0) throws UnsupportedEncodingException { - // TODO Auto-generated method stub - - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletResponseAdapterForTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletResponseAdapterForTest.java deleted file mode 100644 index 5afe78f920..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/ServletResponseAdapterForTest.java +++ /dev/null @@ -1,285 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.http.servlet.test; - -import java.io.IOException; -import java.io.PrintWriter; -import java.net.URL; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.ws.jaxws.IWSResponse; - -public class ServletResponseAdapterForTest implements IWSResponse,HttpServletResponse { - - private int contentLength; - - private String contentType; - - private String host; - - private ServletOutputStreamForTest out; - - private int method; - - private Map parameters; - - private String path; - - private URL uri; - - private int port; - - private Map headers; - - private int statusCode; - - private String statusMessage; - - - public ServletResponseAdapterForTest(final String contentType, final String host, final String path, final URL uri, - final int port, final ServletOutputStreamForTest out) { - this.contentType = contentType; - this.host = host; - this.parameters = new HashMap(); - this.path = path; - this.uri = uri; - this.port = port; - this.headers = new HashMap(); - this.out = out; - } - - - - public ServletOutputStream getOutputStream() throws IOException { - // TODO Auto-generated method stub - return out; - } - - - - public void setHeader(final String name, final String value) { - // TODO Auto-generated method stub - this.headers.put(name, value); - } - - - public void setStatus(final int code) { - // TODO Auto-generated method stub - - } - - - public void addCookie(final Cookie arg0) { - // TODO Auto-generated method stub - - } - - - public void addDateHeader(final String arg0, final long arg1) { - // TODO Auto-generated method stub - - } - - - public void addHeader(final String arg0, final String arg1) { - // TODO Auto-generated method stub - this.headers.put(arg0, arg1); - } - - - public void addIntHeader(final String arg0, final int arg1) { - // TODO Auto-generated method stub - - } - - - public boolean containsHeader(final String arg0) { - // TODO Auto-generated method stub - return headers.containsKey(arg0); - } - - - public String encodeRedirectURL(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - - public String encodeRedirectUrl(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - - public String encodeURL(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - - public String encodeUrl(final String arg0) { - // TODO Auto-generated method stub - return null; - } - - - public void sendError(final int arg0) throws IOException { - // TODO Auto-generated method stub - - } - - - public void sendError(final int arg0, final String arg1) throws IOException { - // TODO Auto-generated method stub - - } - - - public void sendRedirect(final String arg0) throws IOException { - // TODO Auto-generated method stub - - } - - - public void setDateHeader(final String arg0, final long arg1) { - // TODO Auto-generated method stub - - } - - - public void setIntHeader(final String arg0, final int arg1) { - // TODO Auto-generated method stub - - } - - - public void setStatus(final int arg0, final String arg1) { - // TODO Auto-generated method stub - - } - - public void flushBuffer() throws IOException { - // TODO Auto-generated method stub - - } - - - - public void setContentType(final String type) { - // TODO Auto-generated method stub - - } - - - - public int getBufferSize() { - // TODO Auto-generated method stub - return 0; - } - - - - public String getCharacterEncoding() { - // TODO Auto-generated method stub - return null; - } - - - - public String getContentType() { - // TODO Auto-generated method stub - return null; - } - - - - public Locale getLocale() { - // TODO Auto-generated method stub - return null; - } - - - - public PrintWriter getWriter() throws IOException { - // TODO Auto-generated method stub - return null; - } - - - - public boolean isCommitted() { - // TODO Auto-generated method stub - return false; - } - - - - public void reset() { - // TODO Auto-generated method stub - - } - - - - public void resetBuffer() { - // TODO Auto-generated method stub - - } - - - - public void setBufferSize(final int arg0) { - // TODO Auto-generated method stub - - } - - - - public void setCharacterEncoding(final String arg0) { - // TODO Auto-generated method stub - - } - - - - public void setContentLength(final int arg0) { - // TODO Auto-generated method stub - - } - - - - public void setLocale(final Locale arg0) { - // TODO Auto-generated method stub - - } -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/StatelessSessionFactoryForTest.java b/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/StatelessSessionFactoryForTest.java deleted file mode 100644 index 16f6b08d41..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/java/org/ow2/jonas/ws/jaxws/http/servlet/test/StatelessSessionFactoryForTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.http.servlet.test; - -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.FactoryException; -import org.ow2.easybeans.api.bean.EasyBeansSLSB; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.util.pool.api.Pool; - -public class StatelessSessionFactoryForTest extends StatelessSessionFactory{ - - public StatelessSessionFactoryForTest(final String className, final EZBContainer container) throws FactoryException { - super(className, container); - // TODO Auto-generated constructor stub - } - @Override - public Pool getPool() { - - System.out.println("Calling customized pool*********************"); - return null; - } - -} diff --git a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/handlers.xml b/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/handlers.xml deleted file mode 100644 index dd3040c608..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/handlers.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - GreeterSOAPHandler - org.ow2.jonas.ws.axis2.test.handlers.GreeterSOAPHandler - - - - - - - GreeterLogicalHandler - org.ow2.jonas.ws.axis2.test.handlers.GreeterLogicalHandler - - - - diff --git a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/test_service_pojo.xml b/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/test_service_pojo.xml deleted file mode 100644 index 52dece0f36..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/test_service_pojo.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - 0 - JOnAS - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/wsdl/TestPojo.wsdl b/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/wsdl/TestPojo.wsdl deleted file mode 100644 index e60388afbd..0000000000 --- a/jonas/modules/services/webservices/axis2/core/src/test/resources/WEB-INF/wsdl/TestPojo.wsdl +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/axis2/pom.xml b/jonas/modules/services/webservices/axis2/pom.xml deleted file mode 100644 index db1afeb23a..0000000000 --- a/jonas/modules/services/webservices/axis2/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices-axis2 - pom - JOnAS :: Services :: Web Services :: Axis2 - - - core - - diff --git a/jonas/modules/services/webservices/cxf/core/pom.xml b/jonas/modules/services/webservices/cxf/core/pom.xml deleted file mode 100644 index b3ef807fdb..0000000000 --- a/jonas/modules/services/webservices/cxf/core/pom.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - jonas-webservices-cxf - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-cxf-core - bundle - JOnAS :: Services :: Web Services :: CXF :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.jonas - jonas-webservices-jaxws-core - ${project.version} - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.bundles - ow2-util-ee-metadata-war-api - provided - - - org.ow2.bundles - ow2-util-ee-builder-webservice - provided - - - org.apache.cxf - cxf-api - ${cxf.version} - provided - - - org.apache.cxf - cxf-rt-transports-http - ${cxf.version} - provided - - - org.apache.cxf - cxf-rt-frontend-jaxws - ${cxf.version} - provided - - - javax.xml.soap - saaj-api - - - com.sun.xml.messaging.saaj - saaj-impl - - - - - org.ow2.bundles - ow2-util-log - provided - - - org.ow2.bundles - ow2-util-annotation-processor - provided - - - org.ow2.easybeans - easybeans-api - provided - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - provided - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/BusCreator.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/BusCreator.java deleted file mode 100644 index e1455c669f..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/BusCreator.java +++ /dev/null @@ -1,231 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf; - -import static org.ow2.jonas.lib.util.Log.setComponentLogLevel; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusException; -import org.apache.cxf.BusFactory; -import org.apache.cxf.binding.soap.SoapTransportFactory; -import org.apache.cxf.bus.managers.DestinationFactoryManagerImpl; -import org.apache.cxf.transport.DestinationFactory; -import org.apache.cxf.transport.DestinationFactoryManager; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Level; -import org.ow2.jonas.ws.cxf.http.JOnASHTTPTransportFactory; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.util.execution.ExecutionResult; -import org.ow2.util.execution.IExecution; -import org.ow2.util.execution.helper.RunnableHelper; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Manage all the code required to start a new CXF Bus. - * @author Guillaume Sauthier - */ -public class BusCreator extends BusFactory { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(BusCreator.class); - - /** - * JAX-WS Service (used to retrieve handlers). - */ - private IJAXWSService service; - - - /** - * Initialize Internal CXF Bus. - * @return a new fully initialized CXF Bus - */ - @Override - public Bus createBus() { - - // Create a new Bus - // Creation mechanism use the TCCL to access default Bus configuration - IExecution createBusJob = new IExecution() { - - public Bus execute() throws Exception { - - // Bus start/stop operations are extra verbose - Level old = setComponentLogLevel("org.apache.cxf", BasicLevel.LEVEL_ERROR); - Level old2 = setComponentLogLevel("org.springframework", BasicLevel.LEVEL_ERROR); - - Bus newBus; - - // TODO: Remove these lines when issue will be closed - // Avoid to get e.printStackTrace from CatalogManager class by catching error stream - PrintStream previousErrorStream = System.err; - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - PrintStream tempStream = new PrintStream(baos); - System.setErr(tempStream); - - // Get the current associated Bus (if any, may be null) - Bus oldThreadBus = BusFactory.getThreadDefaultBus(false); - - try { - newBus = BusFactory.newInstance().createBus(); - - // Store the Endpoint Audit Handler - newBus.setProperty(BusCreator.class.getName() + ".ENDPOINT", service.getEndpointAuditHandler()); - } finally { - - // Dissociate the Bus from the Thread - BusFactory.setThreadDefaultBus(oldThreadBus); - - System.setErr(previousErrorStream); - - // Check if there was an UnknownHostException - String errorMessage = baos.toString(); - if (errorMessage != null && errorMessage.contains("java.net.UnknownHostException")) { - // debug level - logger.debug("Error while initializing the Bus : ''{0}'' ", errorMessage); - } else if (!"".equals(errorMessage)) { - // error level - logger.error("Error while initializing the Bus : ''{0}'' ", errorMessage); - } - - // Reset log levels - setComponentLogLevel("org.apache.cxf", old); - setComponentLogLevel("org.springframework", old2); - } - - return newBus; - } - - }; - - ExecutionResult res = new RunnableHelper().execute(Bus.class.getClassLoader(), - createBusJob); - - if (res.hasException()) { - logger.error("Cannot create Bus", res.getException()); - } - - Bus bus = res.getResult(); - - try { - createDestinationFactory(bus); - } catch (BusException e) { - logger.error("Cannot create destination factory", e); - } - - return bus; - - } - - /** - * Create the EasyBeans destination factory and register the transports. - * @throws BusException if the factory is not created. - * @param bus Bus to be configured - */ - private void createDestinationFactory(final Bus bus) throws BusException { - - JOnASHTTPTransportFactory factory = new JOnASHTTPTransportFactory(bus); - - // transportIds done by Spring ? - List namespaces = new ArrayList(); - // SOAP11 over HTTP - namespaces.add("http://schemas.xmlsoap.org/wsdl/soap/http"); - namespaces.add("http://schemas.xmlsoap.org/soap/http"); - namespaces.add("http://schemas.xmlsoap.org/wsdl/http/"); - - - // SOAP12 over HTTP - namespaces.add("http://www.w3.org/2003/05/soap/bindings/HTTP/"); - - namespaces.add("http://cxf.apache.org/transports/http"); - namespaces.add("http://cxf.apache.org/transports/http/configuration"); - namespaces.add("http://cxf.apache.org/bindings/xformat"); - factory.setTransportIds(namespaces); - - for (String ns : namespaces) { - registerTransport(bus, factory, ns); - } - - // Adds Soap factory - SoapTransportFactory soapTransportFactory = new SoapTransportFactory(); - soapTransportFactory.setBus(bus); - - // Needs to tell that some NS have no factory (and then no need to create jetty http transport factory for it) - Object destinationFactoryManager = bus.getExtension(DestinationFactoryManager.class); - if (destinationFactoryManager instanceof DestinationFactoryManagerImpl) { - DestinationFactoryManagerImpl destinationFactoryManagerImpl = (DestinationFactoryManagerImpl) destinationFactoryManager; - Field failedField = null; - try { - failedField = DestinationFactoryManagerImpl.class.getDeclaredField("failed"); - failedField.setAccessible(true); - Set failed = (Set) failedField.get(destinationFactoryManagerImpl); - failed.add("http://java.sun.com/xml/ns/jaxws"); - } catch (SecurityException e) { - throw new IllegalStateException("Cannot get failed field", e); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Cannot get failed field", e); - } catch (IllegalArgumentException e) { - throw new IllegalStateException("Cannot get failed field", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Cannot get failed field", e); - } - } - - - - - } - - /** - * Utility method to register {@link org.apache.cxf.transport.DestinationFactory} under a namespace. - * @param bus Bus to be configured - * @param factory the {@link org.apache.cxf.transport.DestinationFactory} instance - * @param namespace the key - * @throws BusException if registration fails. - */ - private void registerTransport(final Bus bus, - final DestinationFactory factory, - final String namespace) throws BusException { - - DestinationFactoryManager manager = bus.getExtension(DestinationFactoryManager.class); - manager.registerDestinationFactory(namespace, factory); - } - - /** - * Inject the service reference. - * @param service Jaxws service - */ - public void bindJaxwsService(final IJAXWSService service) { - this.service = service; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/CXFService.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/CXFService.java deleted file mode 100644 index f4cf111d17..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/CXFService.java +++ /dev/null @@ -1,563 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf; - -import static org.ow2.jonas.lib.util.Log.setComponentLogLevel; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.ThreadFactory; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.servlet.ServletContext; -import javax.xml.ws.Endpoint; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.soap.SOAPBinding; -import javax.xml.ws.spi.Provider; -import javax.xml.soap.SOAPFactory; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.workqueue.AutomaticWorkQueue; -import org.apache.cxf.workqueue.WorkQueueManager; -import org.apache.cxf.jaxws.EndpointImpl; -import org.apache.cxf.jaxws.spi.ProviderImpl; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.apache.cxf.resource.ResourceManager; -import org.apache.cxf.transport.servlet.ServletContextResourceResolver; -import org.apache.cxf.version.Version; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Level; -import org.ow2.easybeans.server.Embedded; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.ws.cxf.client.CxfWebServiceRefBuilder; -import org.ow2.jonas.ws.cxf.easybeans.ext.WebServiceContextInjectionHandler; -import org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.base.JAXWSService; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesModule; -import org.ow2.jonas.ws.jaxws.client.JAXWSWebServiceRefBuilder; -import org.ow2.jonas.ws.jaxws.easybeans.naming.WebServiceRefExtensionListener; -import org.ow2.jonas.ws.jaxws.handler.builder.DescriptorHandlerChainBuilder; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.ow2.jonas.ws.publish.WSDLPublisherManager; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.ee.builder.webserviceref.WebServiceRefBuilder; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; -import org.ow2.util.ee.metadata.war.api.IWarClassMetadata; -import org.ow2.util.ee.metadata.ws.api.struct.IWebServiceMarker; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The CXFService class is used to declare CXF as a module in JOnAS. - * - * @author Guillaume Sauthier - */ -public class CXFService extends JAXWSService implements IJAXWSService { - - /** - * This Bus is shared by all clients inside this JVM. - * This is the default CXF Bus. - */ - private Bus clientBus; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(CXFService.class); - - /** - * The event service used to register listeners. - */ - private IEventService eventService; - - /** - * The naming extension listener for EasyBean's java:comp/env building. - */ - private WebServiceRefExtensionListener listener; - - /** - * Each WebApp may be associated with one WSModule. - */ - private Map>> webservicesModules; - - /** - * WSDL Publisher. - */ - private WSDLPublisherManager publisherManager; - - /** - * CXF Endpoint BusFactory. - */ - private BusFactory factory; - - /** - * Default constructor. - */ - public CXFService() { - webservicesModules = new HashMap>>(); - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * - * @throws org.ow2.jonas.service.ServiceException - * service start-up failed - */ - @Override - protected void doStart() throws ServiceException { - - // CXF Bus init is extra verbose, level up the default logging level - Level old = setComponentLogLevel("org.apache.cxf", BasicLevel.LEVEL_ERROR); - Level old2 = setComponentLogLevel("org.springframework", BasicLevel.LEVEL_ERROR); - - // TODO: Remove these lines when issue will be closed - // Avoid to get e.printStackTrace from CatalogManager class by catching error stream - PrintStream previousErrorStream = System.err; - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - PrintStream tempStream = new PrintStream(baos); - System.setErr(tempStream); - try { - // Force initialization of the singleton Bus shared by all clients. - clientBus = BusFactory.getDefaultBus(); - - // "Register" Client handlers - clientBus.setProperty(BusCreator.class.getName() + ".CLIENT", getClientAuditHandler()); - - } finally { - System.setErr(previousErrorStream); - // Check if there was an UnknownHostException - String errorMessage = baos.toString(); - if (errorMessage != null && errorMessage.contains("java.net.UnknownHostException")) { - // debug level - logger.debug("Error while initializing the Bus : ''{0}'' ", errorMessage); - } else if (!"".equals(errorMessage)) { - // error level - logger.error("Error while initializing the Bus : ''{0}'' ", errorMessage); - } - - // Reset log levels - setComponentLogLevel("org.apache.cxf", old); - setComponentLogLevel("org.springframework", old2); - } - - // The client-side Bus provide a unique/global ThreadPool hidden - // behind the AutomaticWorkQueue interface. - // This ThreadPool is creating Threads that have inherited their TCCL - // from the parent creating Thread. That means that an applicative - // loader can be stored in the Thread and kept even if the application - // of the loader have been removed. - // To avoid keeping ClassLoaders around, we wrap the original ThreadFactory - // used by the AutomaticWorkQueue/ThreadPoolExecutor implementation into a - // new ThreadFactory that reset the TCCL to a known and (presumed) static ClassLoader. - WorkQueueManager manager = clientBus.getExtension(WorkQueueManager.class); - if (manager != null) { - AutomaticWorkQueue queue = manager.getAutomaticWorkQueue(); - if (queue instanceof ThreadPoolExecutor) { - ThreadPoolExecutor executor = (ThreadPoolExecutor) queue; - final ThreadFactory factory = executor.getThreadFactory(); - executor.setThreadFactory(new ThreadFactory() { - - public Thread newThread(Runnable r) { - // Delegate to the old factory - Thread thread = factory.newThread(r); - // Reset the TCCL (by default inherited from the caller) - // to a controlled one - thread.setContextClassLoader(SOAPFactory.class.getClassLoader()); - return thread; - } - }); - } - } - - // Force usage of the CXF JAX-WS Provider - System.setProperty(Provider.JAXWSPROVIDER_PROPERTY, ProviderImpl.class.getName()); - - super.doStart(); - - logger.info("{0} started", Version.getCompleteVersionString()); - } - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * - * @throws org.ow2.jonas.service.ServiceException - * service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - - Level old = setComponentLogLevel("org.apache.cxf", BasicLevel.LEVEL_ERROR); - Level old2 = setComponentLogLevel("org.springframework", BasicLevel.LEVEL_ERROR); - - // Stop the client bus - // true means 'wait for complete stop' - clientBus.shutdown(true); - clientBus = null; - BusFactory.setDefaultBus(null); - - setComponentLogLevel("org.apache.cxf", old); - setComponentLogLevel("org.springframework", old2); - - super.doStop(); - - logger.info("CXF service stopped"); - } - - /** - * Construct a Reference dedicated to the given @WebServiceRef metadata. - * - * @param serviceRef the reference described by the user. - * @return a JNDI Naming {@link javax.naming.Reference} that can be bound in a JNDI Context. - */ - public Reference createNamingReference(final IJaxwsWebServiceRef serviceRef) throws NamingException { - - // This could be subclassed for any CXF related specific needs - WebServiceRefBuilder builder = new CxfWebServiceRefBuilder(); - - return builder.build(serviceRef); - } - - /** - * Creates a new POJO Web service endpoint from classes metadata. - * - * @param metadata the class own metadata (annotation + XML) - * @param loader the ClassLoader to be used to load classes from the metadata - * @return A POJO typed IWebServiceEndpoint based on metadata - */ - public IWebServiceEndpoint createPOJOWebServiceEndpoint(final IWarClassMetadata metadata, - final ClassLoader loader, - final ServletContext servletContext) - throws WSException { - - // Find a unique name for the WebModule - String name = findUniqueContextName(servletContext); - - // The module linked to this archive - IWebservicesModule> module = webservicesModules.get(name); - if (module == null) { - module = new JAXWSWebservicesModule>(name); - webservicesModules.put(name, module); - } - - // Load the class - String classname = metadata.getJClass().getName().replace('/', '.'); - Class klass = null; - try { - klass = loader.loadClass(classname); - } catch (ClassNotFoundException e) { - throw new WSException("Impossible to load the WebService class", e); - } - - IWebServiceMarker marker = metadata.getWebServiceMarker(); - - JOnASJaxWsImplementorInfo jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass, marker); - - // Get a Container for all services deployed using the same WSDL - WebservicesContainer container = module.findContainer(jaxWsImplementorInfo.getWsdlLocation()); - if (container == null) { - // Create a new Container - container = new WebservicesContainer(jaxWsImplementorInfo.getWsdlLocation(), factory); - module.addContainer(container); - - // The Bus can resolve file against the module Classloader - ResourceManager manager = container.getBus().getExtension(ResourceManager.class); - manager.addResourceResolver(new ServletContextResourceResolver(servletContext)); - - } - - // End of Generic Part ----------- - - EndpointImpl ep = createEndpointImpl(container, - klass, - jaxWsImplementorInfo, - marker); - - // JaxWsImplementorInfo contains merged/overrided values - String serviceName = jaxWsImplementorInfo.getServiceName().getLocalPart(); - - // find the URL pattern to use - String pattern = null; - if (!"".equals(serviceName)) { - // default pattern : /{service-name} - pattern = "/" + serviceName; - } else { - // else /{class.name}Service - pattern = "/" + klass.getSimpleName() + "Service"; - } - - // Creates PortMetaData to hold deployment/runtime information - // about the web service - PortMetaData pmd = new PortMetaData(); - pmd.setUrlPattern(pattern); - - logger.debug("PortMetaData [pattern:{0}]", pmd.getUrlPattern()); - - // Wraps the Endpoint into our own IWSEndpoint implementation - CXFWSEndpoint endpoint = new CXFWSEndpoint(ep, - IWebServiceEndpoint.EndpointType.POJO, - pmd, - container); - - // Link the endpoint - container.addEndpoint(endpoint); - - return endpoint; - } - - private String findUniqueContextName(final ServletContext context) { - return context.getRealPath("/"); - } - - /** - * Configure CXF internals for the new JAXWS {@link javax.xml.ws.Endpoint}. - * - * @param container The container of all the endpoints (contains the Bus) - * @param klass POJO's class - * @param info Annotation merged values - * @param serviceMarker - * @return a configured CXF {@link org.apache.cxf.jaxws.EndpointImpl} instance. - * @throws WSException if it was impossible to create a new instance from the klass parameter - */ - private EndpointImpl createEndpointImpl(final WebservicesContainer container, - final Class klass, - final JOnASJaxWsImplementorInfo info, - final IWebServiceMarker serviceMarker) - throws WSException { - - Bus bus = container.getBus(); - JaxWsServiceFactoryBean jaxWsServiceFactoryBean = new JaxWsServiceFactoryBean(info); - jaxWsServiceFactoryBean.setBus(bus); - - // Enable MTOM ? - checkEnableMtom(jaxWsServiceFactoryBean, info); - - // Create a service with the correct classloader - ClassLoader old = Thread.currentThread().getContextClassLoader(); - Object implementor = null; - try { - Thread.currentThread().setContextClassLoader(klass.getClassLoader()); - - // We need to call create() here in order to initialize the ServiceFactory - // otherwise, CXF try to guess some values without using our JaxWsImplementorInfo object. - // We also need to set up the TCCL to a ClassLoader that can access - // the JAXB2 implementation packages - - // Init - jaxWsServiceFactoryBean.create(); - - // Create the "service" instance - implementor = klass.newInstance(); - } catch (IllegalAccessException e) { - throw new WSException("Cannot access '" + klass.getName() + "'", e); - } catch (InstantiationException e) { - throw new WSException("Cannot instantiate '" + klass.getName() + "'", e); - } finally { - // reset - Thread.currentThread().setContextClassLoader(old); - } - - // Build the ServerFactory - JOnASJaxWsServerFactoryBean factoryBean = new JOnASJaxWsServerFactoryBean(jaxWsServiceFactoryBean, container); - - // Check if the marker provides a HandlerChains - IHandlerChains handlerChains = serviceMarker.getHandlerChains(); - if (handlerChains != null) { - factoryBean.setHandlerChainBuilder(new DescriptorHandlerChainBuilder(handlerChains)); - } - - // Inject the implementor with WebServiceContext - injectImplementorResources(implementor); - - // Build the endpoint - EndpointImpl endpoint = new EndpointImpl(bus, implementor, factoryBean); - endpoint.setServiceFactory(jaxWsServiceFactoryBean); - - // Set some endpoints properties (avoid some NPE later) - Map properties = new HashMap(); - if (info.getServiceName() != null) { - properties.put(Endpoint.WSDL_SERVICE, info.getServiceName()); - endpoint.setServiceName(info.getServiceName()); - } - if (info.getEndpointName() != null) { - properties.put(Endpoint.WSDL_PORT, info.getEndpointName()); - endpoint.setEndpointName(info.getEndpointName()); - } - endpoint.setProperties(properties); - - // Manage Audit handler - Handler audit = (Handler) bus.getProperty(BusCreator.class.getName() + ".ENDPOINT"); - endpoint.getHandlers().add(audit); - - return endpoint; - } - - /** - * Inject the given Object with requested @Resource - * @param implementor instance to be injected - * @throws WSException if injection failed - */ - private void injectImplementorResources(final Object implementor) throws WSException { - IAnnotationProcessor processor = new DefaultAnnotationProcessor(); - // Inject @Resource WebServiceContext - processor.addAnnotationHandler(new WebServiceContextInjectionHandler()); - - try { - processor.process(implementor); - } catch (ProcessorException e) { - throw new WSException("Cannot inject instance " + implementor, e); - } - } - - - /** - * Enable MTOM feature on CXF service factory if it is enabled. - * @param jaxWsServiceFactoryBean the CXF service factory bean - * @param info the annotation merged info - */ - protected void checkEnableMtom(final JaxWsServiceFactoryBean jaxWsServiceFactoryBean, final JOnASJaxWsImplementorInfo info) { - if (info == null) { - return; - } - // MTOM is enabled - if (info.isMTOMEnabled()) { - String protocolBinding = info.getBindingType(); - // if the protocol binding is correct, enable the MTOM feature - if (protocolBinding != null && (SOAPBinding.SOAP11HTTP_BINDING.equals(protocolBinding) || SOAPBinding.SOAP12HTTP_BINDING.equals(protocolBinding))) { - //List wsFeatures = jaxWsServiceFactoryBean.getWsFeatures(); - // Create if not present - //if (wsFeatures == null) { - // wsFeatures = new ArrayList(); - // jaxWsServiceFactoryBean.setWsFeatures(wsFeatures); - //} - //wsFeatures.add(new MTOMFeature(true)); - } - } - } - - /** - * Publish this service's WSDL using the WSDL publisher manager. - * @param container Group of endpoint sharing the same WSDL - */ - private void publishWSDL(final WebservicesContainer container) { - - try { - publisherManager.publish(container.getPublishableDefinitions()); - } catch (WSDLPublisherException e) { - // Log an error - logger.error("Unable to publish WSDL for the container ''{0}''", container.getName(), e); - } - } - - - /** - * Finalize the deployment of POJO endpoints contained in the given ServletContext. - * - * @param context ServletContext. - */ - public void finalizePOJODeployment(final ServletContext context) { - - String name = findUniqueContextName(context); - - IWebservicesModule> module = webservicesModules.get(name); - if (module != null) { - module.start(); - - for (IWebservicesContainer container : module.getContainers()) { - publishWSDL((WebservicesContainer)container); - } - - } - } - - /** - * Stop and undeploy the POJO endpoints contained in the given ServletContext. - * - * @param context ServletContext. - */ - public void undeployPOJOEndpoints(final ServletContext context) { - - String name = findUniqueContextName(context); - - IWebservicesModule> module = webservicesModules.get(name); - if (module != null) { - module.stop(); - // Remove the module from the list - webservicesModules.remove(name); - } - } - - /** - * Callback invoked when an EventService becomes available. - * @param eventService the event service - */ - public void bindEventService(final IEventService eventService) { - this.eventService = eventService; - setEventService(eventService); - listener = new WebServiceRefExtensionListener(); - eventService.registerListener(listener, Embedded.NAMING_EXTENSION_POINT); - } - - /** - * Callback invoked when the used EventService becomes unavalable. - * @param eventService disposed service - */ - public void unbindEventService(final IEventService eventService) { - this.eventService.unregisterListener(listener); - this.eventService = null; - } - - /** - * Set the WSDLPublisherManager service. - * @param publisherManager publication tool - */ - public void setWSDLPublisherManager(final WSDLPublisherManager publisherManager) { - this.publisherManager = publisherManager; - } - - /** - * Endpoint BusFactory - * @param factory - */ - public void setBusFactory(BusFactory factory) { - this.factory = factory; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsImplementorInfo.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsImplementorInfo.java deleted file mode 100644 index 2a03504ccf..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsImplementorInfo.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf; - -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceException; - -import org.apache.cxf.jaxws.support.JaxWsImplementorInfo; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.util.ee.metadata.ws.api.struct.IWebServiceMarker; - -/** - * The JOnASJaxWsImplementorInfo is needed because the webservices.xml infos - * can overrides some info provided by annotations. - * - * @author Guillaume Sauthier - */ -public class JOnASJaxWsImplementorInfo extends JaxWsImplementorInfo { - - private String endpointInterface; - private String protocolBinding; - private String wsdlLocation; - private QName serviceName; - private QName portName; - private boolean mtomEnabled = false; - - /** - * Construct a new implementor info object. - * @param implementorClass Implementor Class - */ - public JOnASJaxWsImplementorInfo(final Class implementorClass) { - this(implementorClass, null, null, null, null, null, false); - } - - /** - * Construct a new implementor info object. - * @param implementorClass Implementor Class - * @param info Metadata about the port being deployed - */ - public JOnASJaxWsImplementorInfo(final Class implementorClass, final IWebServiceInfo info) { - this(implementorClass, - info.getEndpointInterface(), - info.getProtocolBinding(), - info.getWsdlLocation(), - info.getServiceName(), - info.getPortName(), - info.isMTOMEnabled()); - } - - public JOnASJaxWsImplementorInfo(final Class implementorClass, final IWebServiceMarker marker) { - this(implementorClass, - marker.getEndpointInterface(), - marker.getProtocolBinding(), - marker.getWsdlLocation(), - marker.getServiceName(), - marker.getPortName(), - marker.isEnableMtom()); - } - - public JOnASJaxWsImplementorInfo(final Class implementorClass, - final String sei, - final String protocolBinding, - final String wsdlLocation, - final QName serviceName, - final QName portName, - final boolean mtomEnabled) { - super(implementorClass); - this.endpointInterface = sei; - this.protocolBinding = protocolBinding; - this.wsdlLocation = wsdlLocation; - this.serviceName = serviceName; - this.portName = portName; - this.mtomEnabled = mtomEnabled; - } - - @Override - public Class getSEIClass() { - if (this.endpointInterface != null) { - - // Load the overrided SEI class using the implementor ClassLoader - ClassLoader loader = super.getImplementorClass().getClassLoader(); - try { - return loader.loadClass(this.endpointInterface); - } catch (ClassNotFoundException e) { - throw new WebServiceException("SEI " + this.endpointInterface - + " is not accessible from ClassLoader " + loader, e); - } - } - return super.getSEIClass(); - } - - @Override - public String getBindingType() { - if (this.protocolBinding != null) { - return this.protocolBinding; - } - return super.getBindingType(); - } - - @Override - public String getWsdlLocation() { - if (this.wsdlLocation != null) { - return this.wsdlLocation; - } - return super.getWsdlLocation(); - } - - /** - * See use of targetNamespace in {@link javax.jws.WebService}. - * - * @return the qualified name of the service. - */ - @Override - public QName getServiceName() { - if (this.serviceName != null) { - return this.serviceName; - } - return super.getServiceName(); - } - - /** - * See use of targetNamespace in {@link javax.jws.WebService}. - * - * @return the qualified name of the endpoint. - */ - @Override - public QName getEndpointName() { - if (this.portName != null) { - return this.portName; - } - return super.getEndpointName(); - } - - /** - * @return true if MTOM is enabled, else false. - */ - public boolean isMTOMEnabled() { - return mtomEnabled; - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsServerFactoryBean.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsServerFactoryBean.java deleted file mode 100644 index da3df6d0eb..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/JOnASJaxWsServerFactoryBean.java +++ /dev/null @@ -1,207 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf; - -import java.util.ArrayList; -import java.util.List; - -import javax.xml.namespace.QName; -import javax.xml.ws.WebServiceException; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.PortInfo; - -import org.apache.cxf.BusException; -import org.apache.cxf.endpoint.Endpoint; -import org.apache.cxf.endpoint.EndpointException; -import org.apache.cxf.endpoint.Server; -import org.apache.cxf.frontend.WSDLGetInterceptor; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.apache.cxf.jaxws.support.JaxWsEndpointImpl; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.cxf.wsdl.ContainerWsdlInterceptor; -import org.ow2.jonas.ws.jaxws.handler.PostConstructProcessor; -import org.ow2.jonas.ws.jaxws.handler.builder.AnnotationHandlerChainBuilder; -import org.ow2.jonas.ws.jaxws.handler.builder.HandlerChainBuilder; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; - -/** - * The JOnASJaxwsServerFactoryBean is responsible to build the handler chain - * associated with the endpoint. - * - * @author Guillaume Sauthier - */ -public class JOnASJaxWsServerFactoryBean extends JaxWsServerFactoryBean { - - /** - * Handler Chain Builder. - */ - private HandlerChainBuilder handlerChainBuilder; - - /** - * Group all the endpoints defined in a unique Wsdl. - */ - private WebservicesContainer container; - - /** - * Constructs a new ServerFactory using the given ServiceFactory. - * @param serviceFactory wrapped ServiceFactory - */ - public JOnASJaxWsServerFactoryBean(final JaxWsServiceFactoryBean serviceFactory, - final WebservicesContainer container) { - super(serviceFactory); - this.container = container; - - // Disengage Handler's building in CXF - this.doInit = false; - } - - public void setHandlerChainBuilder(final HandlerChainBuilder builder) { - this.handlerChainBuilder = builder; - } - - @Override - public Server create() { - // Override classloader as SoapBindingUtil will use Thread Context - // classloader in order to create proxies. - // We're setting Context classloader to CXF classloader - // http://jira.ow2.org/browse/JONAS-369 - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(JaxWsServiceFactoryBean.class.getClassLoader()); - Server server = super.create(); - - // Init the handlers with our own builders - buildHandlerChain(); - - return server; - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - } - - /** - * Build the handler chain. - */ - private void buildHandlerChain() { - - // Init the builder if required - if (handlerChainBuilder == null) { - // By default, use a annotation based builder - this.handlerChainBuilder = new AnnotationHandlerChainBuilder(getServiceBeanClass()); - } - - // Identify the target port - final JaxWsServiceFactoryBean sf = (JaxWsServiceFactoryBean) getServiceFactory(); - PortInfo portInfo = new PortInfo() { - - public QName getServiceName() { - return sf.getServiceQName(); - } - - public QName getPortName() { - return sf.getEndpointInfo().getName(); - } - - public String getBindingID() { - return getBindingId(); - } - }; - - // Build the chain using annotations - List chain = new ArrayList(handlers); - - // Add the Handlers in the List - chain.addAll(handlerChainBuilder.buildHandlerChain(portInfo, getHandlerClassLoader())); - - // Init the Handlers - for (Handler h : chain) { - // Inject resources - injectHandler(h); - // Call @PostConstruct - constructHandler(h); - } - - // Assign them to the Binding - ((JaxWsEndpointImpl) getServer().getEndpoint()).getJaxwsBinding().setHandlerChain(chain); - - } - - /** - * @return the classloader to be used for Handler loading - */ - protected ClassLoader getHandlerClassLoader() { - return this.getServiceBeanClass().getClassLoader(); - } - - /** - * Manage handler resource injection. - * @param handler injected object. - */ - private void injectHandler(final Handler handler) { - IAnnotationProcessor processor = new DefaultAnnotationProcessor(); - // TODO inject other references (WebServiceContext, ...) - //processor.addAnnotationHandler(new CXFWebServiceContextResourceProcessor()); - - try { - processor.process(handler); - } catch (ProcessorException e) { - throw new WebServiceException("Cannot inject resources", e); - } - } - - /** - * Manage handler lifecycle. - * @param handler object to be started - */ - private void constructHandler(final Handler handler) { - IAnnotationProcessor processor = new DefaultAnnotationProcessor(); - processor.addAnnotationHandler(new PostConstructProcessor()); - - try { - processor.process(handler); - } catch (ProcessorException e) { - throw new WebServiceException("Cannot start handler", e); - } - } - - @Override - protected Endpoint createEndpoint() throws BusException, EndpointException { - Endpoint endpoint = super.createEndpoint(); - - int index = endpoint.getInInterceptors().indexOf(WSDLGetInterceptor.INSTANCE); - if (index != -1) { - // Replace the old wsdl interceptor - endpoint.getInInterceptors().add(index, new ContainerWsdlInterceptor(container)); - } - - return endpoint; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/CxfWebServiceRefBuilder.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/CxfWebServiceRefBuilder.java deleted file mode 100644 index 8522db5436..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/CxfWebServiceRefBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.cxf.client; - -import javax.naming.Reference; - -import org.ow2.jonas.ws.cxf.client.factory.CxfWebServiceRefObjectFactory; -import org.ow2.jonas.ws.jaxws.client.JAXWSWebServiceRefBuilder; - -/** - * A {@code CxfWebServiceRefBuilder} is ... - * - * @author Guillaume Sauthier - */ -public class CxfWebServiceRefBuilder extends JAXWSWebServiceRefBuilder { - - @Override - protected Reference createReference(String classname) { - return new Reference(classname, CxfWebServiceRefObjectFactory.class.getName(), null); - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/CxfWebServiceRefObjectFactory.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/CxfWebServiceRefObjectFactory.java deleted file mode 100644 index 369457a9c6..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/CxfWebServiceRefObjectFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.cxf.client.factory; - -import java.util.Collections; - -import javax.xml.ws.Service; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.HandlerResolver; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.ow2.jonas.ws.cxf.BusCreator; -import org.ow2.jonas.ws.jaxws.client.factory.JAXWSWebServiceRefObjectFactory; -import org.ow2.util.ee.builder.webserviceref.ReferenceHelper; - -/** - * A {@code CxfWebServiceRefObjectfactory} is ... - * - * @author Guillaume Sauthier - */ -public class CxfWebServiceRefObjectFactory extends JAXWSWebServiceRefObjectFactory { - - @Override - protected void processObjectInstance(Service service, ReferenceHelper reference) throws Exception { - // Let the parent do its job - super.processObjectInstance(service, reference); - - Bus bus = BusFactory.getDefaultBus(); - - // Manage Audit handler - Handler audit = (Handler) bus.getProperty(BusCreator.class.getName() + ".CLIENT"); - - HandlerResolver resolver = service.getHandlerResolver(); - HandlerResolver delegating = new HandlerResolverDelegate(resolver, - Collections.singletonList(audit)); - - service.setHandlerResolver(delegating); - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/HandlerResolverDelegate.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/HandlerResolverDelegate.java deleted file mode 100644 index fca7f10c9f..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/client/factory/HandlerResolverDelegate.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.cxf.client.factory; - -import java.util.List; - -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.HandlerResolver; -import javax.xml.ws.handler.PortInfo; - -/** - * A {@code HandlerResolverDelegate} is ... - * - * @author Guillaume Sauthier - */ -public class HandlerResolverDelegate implements HandlerResolver { - - /** - * Delegate. - */ - private HandlerResolver delegate; - - /** - * Additional handlers to be injected. - */ - private List additional; - - public HandlerResolverDelegate(HandlerResolver delegate, List additional) { - this.delegate = delegate; - this.additional = additional; - } - - public List getHandlerChain(PortInfo portInfo) { - List handlers = delegate.getHandlerChain(portInfo); - handlers.addAll(additional); - return handlers; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFEJBWebserviceEndpoint.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFEJBWebserviceEndpoint.java deleted file mode 100644 index ecc504939b..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFEJBWebserviceEndpoint.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.cxf.jaxws.EndpointImpl; -import org.ow2.easybeans.api.EZBContainer; -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.easybeans.EasyBeansContextNamingInfo; -import org.ow2.jonas.ws.jaxws.easybeans.EasyBeansSecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; - -/** - * The EJBCXFWebserviceEndpoint is the EJB based endpoint implementation on CXF. - * - * @author Guillaume Sauthier - */ -public class CXFEJBWebserviceEndpoint extends CXFWSEndpoint implements IEJBWebserviceEndpoint { - - /** - * Structure holding data used to create a web context. - */ - private IContextNamingInfo contextNamingInfo; - - /** - * Security reference (may be null). - */ - private ISecurityConstraint securityConstraint; - - /** - * storage for values set during deployment. - */ - private Map deploymentInfos; - - public CXFEJBWebserviceEndpoint(final EndpointImpl endpoint, - final PortMetaData pmd, - final WebservicesContainer wsContainer, - final EZBContainer container, - final IBeanInfo info) { - super(endpoint, EndpointType.EJB, pmd, wsContainer); - this.contextNamingInfo = new EasyBeansContextNamingInfo(this, container, info.getName()); - this.deploymentInfos = new HashMap(); - - List roles = info.getSecurityInfo().getDeclaredRoles(); - if (roles != null && !roles.isEmpty()) { - // There are some roles declared here - securityConstraint = new EasyBeansSecurityConstraint(pmd, info); - } - } - - /** - * Get the data used to construct a web context. - * - * @return the Context naming info structure. - */ - public IContextNamingInfo getContextNamingInfo() { - return this.contextNamingInfo; - } - - /** - * Get the data structure used to secure a bean's endpoint. - * - * @return security constraint structure - */ - public ISecurityConstraint getSecurityConstraint() { - return securityConstraint; - } - - /** - * @return a map of values accessibles after web context deployment. - */ - public Map getDeploymentInfos() { - return deploymentInfos; - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFResourceInjector.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFResourceInjector.java deleted file mode 100644 index a68bbf4fd2..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/CXFResourceInjector.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import org.apache.cxf.common.annotation.AnnotationProcessor; -import org.apache.cxf.common.injection.ResourceInjector; -import org.apache.cxf.resource.ResourceManager; - - -/** - * Slightly change the original CXF {@link ResourceInjector} to avoid - * the call to PostConstruct annotated methods. - * @author Guillaume Sauthier - */ -public class CXFResourceInjector extends ResourceInjector { - - /** - * Creates an new CXFResourceInjector. - * @param rm CXF ResourceManager - */ - public CXFResourceInjector(final ResourceManager rm) { - super(rm); - } - - /** - * Do injection on the given object. - * @param instance the given instance on which do the injection. - */ - @Override - public void inject(final Object instance) { - AnnotationProcessor processor = new AnnotationProcessor(instance); - processor.accept(this); - } - - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansInvokerFactory.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansInvokerFactory.java deleted file mode 100644 index 126e3a04eb..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansInvokerFactory.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import java.lang.reflect.Method; -import java.rmi.RemoteException; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; - -import org.apache.cxf.jaxws.JAXWSMethodInvoker; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.apache.cxf.message.Exchange; -import org.apache.cxf.service.Service; -import org.apache.cxf.service.invoker.Factory; -import org.apache.cxf.service.invoker.Invoker; -import org.ow2.easybeans.api.bean.EasyBeansSLSB; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.util.pool.api.PoolException; - - -/** - * This class implements the Factory concept of CXF, that is - * nicely mapped on the EasyBeans's Pool concept. - */ -public class EasyBeansInvokerFactory implements Factory { - - /** - * Logger. - */ - private Log logger = LogFactory.getLog(EasyBeansInvokerFactory.class); - - /** - * EJB Factory. - */ - private StatelessSessionFactory factory; - - /** - * ejbCreate Method. - */ - private Method ejbCreateMethod = null; - - /** - * Creates an EasyBeansInvoker factory for the given factory. - * @param factory the given session factory. - */ - public EasyBeansInvokerFactory(final StatelessSessionFactory factory) { - this.factory = factory; - } - - /** - * Creates the object that will be used for the invoke - * - * @return a new instance from the pool. - * @throws Throwable - */ - public Object create(final Exchange e) throws Throwable { - EasyBeansSLSB statelessBean = factory.getPool().get(); - // SessionBean 2.x, needs to call the ejbCreate() method - if (statelessBean instanceof SessionBean) { - if (ejbCreateMethod == null) { - ejbCreateMethod = statelessBean.getClass().getMethod("ejbCreate"); - } - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(statelessBean.getClass().getClassLoader()); - try { - ejbCreateMethod.invoke(statelessBean); - } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); - } - } - return statelessBean; - } - - /** - * Post invoke, this is called to allow the factory to release - * the object, store it, etc... - * @param o object created from the create method - */ - public void release(final Exchange e, final Object o) { - // SessionBean 2.x, needs to call the ejbRemove() method - if (o instanceof SessionBean) { - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader(o.getClass().getClassLoader()); - try { - ((SessionBean) o).ejbRemove(); - } catch (EJBException e1) { - logger.error("Unable to call the ejbRemove() method on the EJB 2.x Stateless session bean ''{0}''", o, e1); - } catch (RemoteException e1) { - logger.error("Unable to call the ejbRemove() method on the EJB 2.x Stateless session bean ''{0}''", o, e1); - } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); - } - } - - try { - factory.getPool().release((EasyBeansSLSB) o); - } catch (PoolException e1) { - // Ignored Exception - } - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServerFactoryBean.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServerFactoryBean.java deleted file mode 100644 index cb3dad53ef..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServerFactoryBean.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import org.apache.cxf.endpoint.Server; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.apache.cxf.service.Service; -import org.apache.cxf.service.invoker.Invoker; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.cxf.JOnASJaxWsServerFactoryBean; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.handler.builder.DescriptorHandlerChainBuilder; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; - -/** - * Extended {@link JaxWsServerFactoryBean} to inhibit the resource injection. - * This is done because we (EasyBeans) want to control resource injection. - * @author Guillaume Sauthier - */ -public class EasyBeansJaxWsServerFactoryBean extends JOnASJaxWsServerFactoryBean { - - /** - * EJB Factory. - */ - private StatelessSessionFactory factory; - - /** - * Delagating constructor. - * @param serviceFactory Factory for {@link Service} instances. - * @param factory EasyBeans EJB Factory - */ - public EasyBeansJaxWsServerFactoryBean(final JaxWsServiceFactoryBean serviceFactory, - final StatelessSessionFactory factory, - final WebservicesContainer container) { - super(serviceFactory, container); - this.factory = factory; - - // Check if we have a handlerChain defined in descriptor - IWebServiceInfo info = factory.getSessionBeanInfo().getWebServiceInfo(); - if (info != null && (info.getHandlerChains() != null)) { - - // OK, a HandlerChain have been specified, use it ... - IHandlerChains handlerChains = info.getHandlerChains(); - setHandlerChainBuilder(new DescriptorHandlerChainBuilder(handlerChains)); - } - - } - - /** - * Overrided with no-op because we want to control injection. - * @param instance unused - * @see org.apache.cxf.jaxws.JaxWsServerFactoryBean#injectResources(java.lang.Object) - */ - @Override - protected void injectResources(final Object instance) { - // Do nothing (Don't worry, that's OK :) ) - } - - /** - * Set our own {@link Invoker}. - * @see org.apache.cxf.jaxws.JaxWsServerFactoryBean#createInvoker() - */ - @Override - protected Invoker createInvoker() { - return new EasyBeansMethodInvoker(new EasyBeansInvokerFactory(factory)); - } - - /** - * @return the real Bean class. - * @see org.apache.cxf.frontend.ServerFactoryBean#getServiceBeanClass() - */ - @Override - public Class getServiceBeanClass() { - return this.factory.getBeanClass(); - } - - @Override - public Server create() { - // Override classloader as SoapBindingUtil will use Thread Context classloader in order to create proxies. - // We're setting Context classloader to CXF classloader - // http://jira.ow2.org/browse/JONAS-369 - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(JaxWsServiceFactoryBean.class.getClassLoader()); - return super.create(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - } -} - diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServiceFactoryBean.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServiceFactoryBean.java deleted file mode 100644 index 1d8de8731c..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansJaxWsServiceFactoryBean.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import org.apache.cxf.service.invoker.Invoker; -import org.apache.cxf.jaxws.JAXWSMethodInvoker; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.cxf.JOnASJaxWsImplementorInfo; - -/** - * Extended {@link JaxWsServiceFactoryBean} in order to use the EasyBeans Session factory pool - * for managing the EJB instances. - * @author Florent Benoit - */ -public class EasyBeansJaxWsServiceFactoryBean extends JaxWsServiceFactoryBean { - - /** - * EJB Factory. - */ - private StatelessSessionFactory factory; - - /** - * Delagating constructor. - * @param info the implementor info - * @param factory EasyBeans EJB Factory - */ - public EasyBeansJaxWsServiceFactoryBean(final JOnASJaxWsImplementorInfo info, - final StatelessSessionFactory factory) { - super(info); - this.factory = factory; - } - - /** - * Set our own {@link Invoker}. - * @see org.apache.cxf.jaxws.JaxWsServiceFactoryBean#createInvoker() - */ - @Override - protected Invoker createInvoker() { - return new EasyBeansMethodInvoker(new EasyBeansInvokerFactory(factory)); - } -} - diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansMethodInvoker.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansMethodInvoker.java deleted file mode 100644 index c004ea4a17..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/EasyBeansMethodInvoker.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans; - -import org.apache.cxf.jaxws.JAXWSMethodInvoker; -import org.apache.cxf.interceptor.Fault; - -/** - * Invoker that will allow to call release() method on the pool after each call. - * @author Florent Benoit - */ -public class EasyBeansMethodInvoker extends JAXWSMethodInvoker { - - /** - * Keep EasyBeans invoker factory (in order to avoid a cast). - */ - private EasyBeansInvokerFactory easyBeansInvokerFactory = null; - - /** - * Delegate to the super constructor. - * @param easyBeansInvokerFactory the given factory. - */ - public EasyBeansMethodInvoker(EasyBeansInvokerFactory easyBeansInvokerFactory) { - super(easyBeansInvokerFactory); - this.easyBeansInvokerFactory = easyBeansInvokerFactory; - } - - /** - * Call after each message call. We need to release the bean instance in the pool. - * @param exchange the given message exchange - * @param o the object to release in the pool - */ - public void releaseServiceObject(org.apache.cxf.message.Exchange exchange, java.lang.Object o) { - super.releaseServiceObject(exchange, o); - easyBeansInvokerFactory.release(exchange, o); - } - - /** - * Create an instance of bean at each call. - * @param ex exchange object - * @return a stateless session bean instance - */ - public Object getServiceObject(org.apache.cxf.message.Exchange ex) { - try { - return easyBeansInvokerFactory.create(ex); - } catch (Fault e) { - throw e; - } catch (Throwable e) { - throw new Fault(e); - } - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/CXFConfigurationExtension.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/CXFConfigurationExtension.java deleted file mode 100644 index d26a22c587..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/CXFConfigurationExtension.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans.ext; - -import org.apache.cxf.BusFactory; -import org.ow2.easybeans.api.EZBContainerConfig; -import org.ow2.easybeans.api.EZBConfigurationExtension; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.jonas.ws.publish.WSDLPublisherManager; - - -/** - * Called by Easybeans Runtime to provide a Hook for CXF. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public class CXFConfigurationExtension implements EZBConfigurationExtension { - - /** - * Inner callback. - */ - private LifeCycleCallback lifeCycleCallback; - - public CXFConfigurationExtension() { - // Init the callback before configuration of the EZBContainerConfig - lifeCycleCallback = new LifeCycleCallback(); - } - - /** - * Adapt the given configuration. - * @param easybeansContainerConfig JContainerConfig instance. - */ - public void configure(final EZBContainerConfig easybeansContainerConfig) { - - // create the ResourceInjector to add - JAXWS20ResourceInjector resourceInjector = new JAXWS20ResourceInjector(); - - // add them in the Configuration - easybeansContainerConfig.addCallback(lifeCycleCallback); - easybeansContainerConfig.addInjectors(resourceInjector); - } - - /** - * Stop this extension. - */ - public void stop() { - lifeCycleCallback.stop(); - } - - /** - * Bind an {@link IWebDeployer} that will be used to - * deploy web services enabled EjbJars - * @param deployer deployer manager - */ - public void bindWebDeployer(final IWebDeployer deployer) { - lifeCycleCallback.setWebDeployer(deployer); - } - - /** - * Bind the publisher manager. - * @param publisherManager used manager - */ - public void bindWSDLPublisherManager(WSDLPublisherManager publisherManager) { - lifeCycleCallback.setWSDLPublisherManager(publisherManager); - } - - /** - * Bind the publisher manager. - * @param publisherManager used manager - */ - public void bindBusFactory(BusFactory factory) { - lifeCycleCallback.setBusFactory(factory); - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/JAXWS20ResourceInjector.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/JAXWS20ResourceInjector.java deleted file mode 100644 index b59ea92219..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/JAXWS20ResourceInjector.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans.ext; - -import org.ow2.easybeans.api.bean.EasyBeansBean; -import org.ow2.easybeans.container.EmptyResourceInjector; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * Inject JAX-WS 2.x Resource (WebServiceContext) into the EasyBeans EJB instance. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public class JAXWS20ResourceInjector extends EmptyResourceInjector { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JAXWS20ResourceInjector.class); - - /** - * The processor. - */ - private IAnnotationProcessor processor = null; - - public JAXWS20ResourceInjector() { - processor = new DefaultAnnotationProcessor(); - processor.addAnnotationHandler(new WebServiceContextInjectionHandler()); - } - - /** - * Called before EasyBeans resolution and injection of dependencies. - * @param bean the Bean instance. - */ - @Override - public void preEasyBeansInject(final EasyBeansBean bean) { - // Will inject only @Resource WebServiceContext - try { - processor.process(bean); - } catch (ProcessorException e) { - logger.info("Cannot inject WebServiceContext in bean {0}", bean, e); - } - - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/LifeCycleCallback.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/LifeCycleCallback.java deleted file mode 100644 index e67599d445..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/LifeCycleCallback.java +++ /dev/null @@ -1,491 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans.ext; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.ws.Endpoint; -//import javax.xml.ws.WebServiceFeature; -//import javax.xml.ws.soap.MTOMFeature; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.soap.SOAPBinding; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.apache.cxf.jaxws.EndpointImpl; -import org.apache.cxf.jaxws.support.JaxWsImplementorInfo; -import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; -import org.apache.cxf.resource.ClassLoaderResolver; -import org.apache.cxf.resource.ResourceManager; -import org.ow2.easybeans.api.EZBContainerCallbackInfo; -import org.ow2.easybeans.api.Factory; -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; -import org.ow2.easybeans.container.EmptyLifeCycleCallBack; -import org.ow2.easybeans.container.session.stateless.StatelessSessionFactory; -import org.ow2.jonas.ws.cxf.BusCreator; -import org.ow2.jonas.ws.cxf.JOnASJaxWsImplementorInfo; -import org.ow2.jonas.ws.cxf.easybeans.EasyBeansJaxWsServiceFactoryBean; -import org.ow2.jonas.ws.cxf.easybeans.EasyBeansJaxWsServerFactoryBean; -import org.ow2.jonas.ws.cxf.easybeans.CXFEJBWebserviceEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebServiceDeploymentManager; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; -import org.ow2.jonas.ws.jaxws.ejb.IWebDeployer; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesModule; -import org.ow2.jonas.ws.jaxws.util.JAXWSClassUtils; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.ow2.jonas.ws.publish.WSDLPublisherManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - - -/** - * Callback for CXF. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public class LifeCycleCallback extends EmptyLifeCycleCallBack { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(LifeCycleCallback.class); - - /** - * WSDL Publication tool. - */ - private WSDLPublisherManager publisherManager; - - /** - * A Module that contains WSContainer and Endpoints. - */ - private Map>> modules; - - /** - * The Web Deployer used to configure Web contexts for the endpoints. - */ - private IWebDeployer webDeployer; - - /** - * BusFactory service. - */ - private BusFactory factory; - - /** - * Construct a new Callback. - */ - public LifeCycleCallback() { - modules = new HashMap>>(); - } - - /** - * Called when container is starting. - * @param info some information on the container which is starting. - */ - @Override - public void start(final EZBContainerCallbackInfo info) { - - // Archive identifier - String name = info.getArchive().getName(); - - IWebservicesModule> module = null; - - // Generic part ---------- - - // Iterates over the factories - Map> factories = info.getFactories(); - for (Factory f : factories.values()) { - - // Only for @Stateless - if (f instanceof StatelessSessionFactory) { - - StatelessSessionFactory factory = (StatelessSessionFactory) f; - - Class klass = factory.getBeanClass(); - - // An EJB exposed as a JAX-WS web services HAS TO be annotated - // with @WebService or @WebServiceProvider - if (JAXWSClassUtils.isWebService(klass)) { - - // Extract merged webservices deploy time informations - IBeanInfo beanInfo = factory.getBeanInfo(); - IWebServiceInfo webServiceInfo = beanInfo.getWebServiceInfo(); - - // Creates PortMetaData to hold deployment/runtime information - // about the web service - PortMetaData pmd = new PortMetaData(); - - // End of Generic Part ----------- - - JOnASJaxWsImplementorInfo jaxWsImplementorInfo; - if (webServiceInfo != null) { - jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass, webServiceInfo); - - // Also try to read context-root - pmd.setContextRoot(webServiceInfo.getContextRoot()); - } else { - jaxWsImplementorInfo = new JOnASJaxWsImplementorInfo(klass); - } - - // Get the WSModule for this archive if not already set - module = modules.get(name); - if (module == null) { - module = createWebservicesModule(name); - modules.put(name, module); - } - - // Get a Container for all services deployed using the same WSDL - WebservicesContainer container = module.findContainer(jaxWsImplementorInfo.getWsdlLocation()); - if (container == null) { - // Create a new Container - container = createWebservicesContainer(jaxWsImplementorInfo.getWsdlLocation()); - module.addContainer(container); - - // The Bus can resolve file against the module Classloader - ResourceManager manager = container.getBus().getExtension(ResourceManager.class); - manager.addResourceResolver(new ClassLoaderResolver(klass.getClassLoader())); - } - - // find the URL pattern to use - String pattern = getUrlPattern(klass, webServiceInfo, jaxWsImplementorInfo); - pmd.setUrlPattern(pattern); - - // Creates our Endpoint - EndpointImpl easybeansEndpoint = createEasyBeansEndpoint(factory, container, - jaxWsImplementorInfo); - - // Wraps the Endpoint into our own IWSEndpoint implementation - CXFEJBWebserviceEndpoint endpoint = new CXFEJBWebserviceEndpoint( - easybeansEndpoint, - pmd, - container, - info.getContainer(), - beanInfo); - - // Add the endpoint in the list - container.addEndpoint(endpoint); - - // If one of the endpoint set a wsdl-publication-directory, use it - if (webServiceInfo != null) { - String directory = webServiceInfo.getWsdlPublicationDirectory(); - if (directory != null) { - container.setWsdlPublicationDirectory(directory); - } - } - - } - } - } - - // Start the module if some services where found - if (module != null) { - module.start(); - - try { - // Deploy the web context of the endpoints - webDeployer.deploy(module); - - // WSDL publication - for (WebservicesContainer container : module.getContainers()) { - - // Attempt to publish the service's WSDLs - publishWSDL(container); - - // Display the endpoint's URLs - for (CXFEJBWebserviceEndpoint endpoint : container.getEndpoints()) { - endpoint.displayInfos(); - } - } - } catch (WSException e) { - - // Display a warning - logger.warn("Webservices endpoints of the EjbJar ''{0}'' cannot be deployed because of some error: {1}", - info.getContainer().getName(), - e.getMessage(), - e); - - // An exception occured, cleanup - webDeployer.undeploy(module); - stopWebservicesModule(module); - modules.remove(name); - - } - - } - - } - - protected WebservicesContainer createWebservicesContainer(String name) { - return new WebservicesContainer(name, factory); - } - - protected JAXWSWebservicesModule> createWebservicesModule(String name) { - return new JAXWSWebservicesModule>(name); - } - - /** - * Enable MTOM feature on CXF service factory if it is enabled. - * @param jaxWsServiceFactoryBean the CXF service factory bean - * @param info the annotation merged info - */ - protected void checkEnableMtom(final JaxWsServiceFactoryBean jaxWsServiceFactoryBean, final JOnASJaxWsImplementorInfo info) { - if (info == null) { - return; - } - // MTOM is enabled - if (info.isMTOMEnabled()) { - String protocolBinding = info.getBindingType(); - // if the protocol binding is correct, enable the MTOM feature - if (protocolBinding != null && (SOAPBinding.SOAP11HTTP_BINDING.equals(protocolBinding) || SOAPBinding.SOAP12HTTP_BINDING.equals(protocolBinding))) { - //List wsFeatures = jaxWsServiceFactoryBean.getWsFeatures(); - // Create if not present - //if (wsFeatures == null) { - // wsFeatures = new ArrayList(); - // jaxWsServiceFactoryBean.setWsFeatures(wsFeatures); - //} - //wsFeatures.add(new MTOMFeature(true)); - } - } - } - - /** - * Get a valid URL pattern from available deployment info. - * TODO Should be moved inside the IWebDeployer (another strategy ?) - * @param klass endpoint class - * @param webServiceInfo easybeans.xml infos - * @param jaxWsImplementorInfo merged deployment info - * @return a valid url pattern - */ - private String getUrlPattern(final Class klass, - final IWebServiceInfo webServiceInfo, - final JaxWsImplementorInfo jaxWsImplementorInfo) { - - String pattern; - - // If user has specified an endpoint address, use it - if ((webServiceInfo != null) && (webServiceInfo.getEndpointAddress() != null)) { - - // User defined address - pattern = webServiceInfo.getEndpointAddress(); - if (!pattern.startsWith("/")) { - // Pattern needs to start with a '/' - pattern = "/" + pattern; - } - } else { - - // Default naming strategy - String serviceName = jaxWsImplementorInfo.getServiceName().getLocalPart(); - if (!"".equals(serviceName)) { - // default pattern : /{service-name} - pattern = "/" + serviceName; - } else { - // else /{class-name}Service - pattern = "/" + klass.getSimpleName() + "Service"; - } - } - return pattern; - } - - /** - * Publish this service's WSDL using the WSDL publisher manager. - * @param container Group of endpoint sharing the same WSDL - */ - private void publishWSDL(final WebservicesContainer container) { - - try { - publisherManager.publish(container.getPublishableDefinitions()); - } catch (WSDLPublisherException e) { - // Log an error - logger.error("Unable to publish WSDL for the container ''{0}''", container.getName(), e); - } - - } - - /** - * Extract a context-root name from the archive filename. - * @param filename archive filename - * @return a context-root which is the last part of the filename minus the extension - */ - private static String extractContextRoot(final String filename) { - // Remove everything before the last '/' - String context = filename.substring(filename.lastIndexOf(File.separator) + 1); - int underscoreIndex = context.indexOf('_'); - if (underscoreIndex == -1) { - // Cut before the last '.' - context = context.substring(0, context.lastIndexOf('.')); - } else { - // Cut before the first '_' for unpacked archives with timestamp - context = context.substring(0, underscoreIndex); - } - return context; - } - - /** - * Configure CXF internals for the new JAXWS {@link Endpoint}. - * @param factory The EasyBeans EJB factory (used to get the instances) - * @param container Container of all the endpoints - * @param info Info about the port being deployed - * @return a configured CXF {@link EndpointImpl} subclass. - */ - private EndpointImpl createEasyBeansEndpoint(final StatelessSessionFactory factory, - final WebservicesContainer container, - final JOnASJaxWsImplementorInfo info) { - - Bus bus = container.getBus(); - JaxWsServiceFactoryBean jaxWsServiceFactoryBean = new EasyBeansJaxWsServiceFactoryBean(info, factory); - jaxWsServiceFactoryBean.setBus(bus); - - // Enable MTOM ? - checkEnableMtom(jaxWsServiceFactoryBean, info); - - // We need to call create() here in order to initialize the ServiceFactory - // otherwise, CXF try to guess some values without using our JaxWsImplementorInfo object. - // We also need to set up the TCCL to a ClassLoader that can access - // the JAXB2 implementation packages - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(Bus.class.getClassLoader()); - - // Initialisation - jaxWsServiceFactoryBean.setServiceName(info.getServiceName()); - jaxWsServiceFactoryBean.create(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - - // Build the ServerFactory - JaxWsServerFactoryBean factoryBean = new EasyBeansJaxWsServerFactoryBean(jaxWsServiceFactoryBean, - factory, - container); - - // Build the EasyBeans endpoint - EndpointImpl endpoint = new EndpointImpl(bus, factory.getBeanClass(), factoryBean); - endpoint.setImplementorClass(factory.getBeanClass()); - endpoint.setServiceFactory(jaxWsServiceFactoryBean); - - // Set some endpoint properties - Map properties = new HashMap(); - if (info.getServiceName() != null) { - properties.put(Endpoint.WSDL_SERVICE, info.getServiceName()); - endpoint.setServiceName(info.getServiceName()); - } - if (info.getEndpointName() != null) { - properties.put(Endpoint.WSDL_PORT, info.getEndpointName()); - endpoint.setEndpointName(info.getEndpointName()); - } - endpoint.setProperties(properties); - - // Manage Audit handler - Handler audit = (Handler) bus.getProperty(BusCreator.class.getName() + ".ENDPOINT"); - endpoint.getHandlers().add(audit); - - return endpoint; - } - - /** - * Called when container is stopping. - * @param info some information on the container which is stopping. - */ - @Override - public void stop(final EZBContainerCallbackInfo info) { - - // Only stop the good module - String name = info.getArchive().getName(); - IWebservicesModule> module = modules.get(name); - - if (module != null) { - - stopWebservicesModule(module); - modules.remove(name); - } - - } - - /** - * This stop method is not directly called by the EJB container. The lifecycle object - * itself has decided to stop (maybe one of its dependencies is now unavailable) - */ - public void stop() { - - logger.debug("Stop ''{0}''", this); - - // Stop all the modules - for (Map.Entry>> entry : modules.entrySet()) { - - IWebservicesModule> module = entry.getValue(); - - // Stop the module - stopWebservicesModule(module); - } - - // Clear the map - modules.clear(); - } - - /** - * Stop the given module. - * @param module module to be stopped - */ - private void stopWebservicesModule(final IWebservicesModule> module) { - - // Need to unregister the endpoints - webDeployer.undeploy(module); - - // It will recursively stop containers and endpoints - module.stop(); - } - - /** - * Set the WSDLPublisherManager service. - * @param publisherManager publication tool - */ - public void setWSDLPublisherManager(final WSDLPublisherManager publisherManager) { - this.publisherManager = publisherManager; - } - - /** - * Set the web deployer to be used to manage web contexts. - * @param webDeployer deployer - */ - public void setWebDeployer(final IWebDeployer webDeployer) { - this.webDeployer = webDeployer; - } - - /** - * Set the BusFactory to be used - * @param factory BusFactory - */ - public void setBusFactory(BusFactory factory) { - this.factory = factory; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/WebServiceContextInjectionHandler.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/WebServiceContextInjectionHandler.java deleted file mode 100644 index 95770ea709..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/easybeans/ext/WebServiceContextInjectionHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.easybeans.ext; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import javax.annotation.Resource; -import javax.xml.ws.WebServiceContext; - -import org.apache.cxf.jaxws.context.WebServiceContextImpl; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.annotation.processor.handler.AbstractInjectionHandler; - -/** - * React to @Resource on WebServiceContext. - */ -public class WebServiceContextInjectionHandler extends AbstractInjectionHandler { - - /** - * Supports @Resource annotation only - * @param aClass - * @return true if the annotation is a Resource - */ - public boolean isSupported(final Class aClass) { - return Resource.class.equals(aClass); - } - - @Override - public void process(final Annotation annotation, final Field field, final Object o) throws ProcessorException { - if (WebServiceContext.class.equals(field.getType())) { - doInjectField(field, o, new WebServiceContextImpl()); - } - } - - @Override - public void process(final Annotation annotation, final Method method, final Object o) throws ProcessorException { - if (method.getParameterTypes().length == 1) { - if (WebServiceContext.class.equals(method.getParameterTypes()[0])) { - doInjectMethod(method, o, new WebServiceContextImpl()); - } - } - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASDestination.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASDestination.java deleted file mode 100644 index 8ec50701b1..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASDestination.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * ------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.http; - -import org.apache.cxf.Bus; -import org.apache.cxf.message.ExchangeImpl; -import org.apache.cxf.message.Message; -import org.apache.cxf.message.MessageImpl; -import org.apache.cxf.service.model.EndpointInfo; -import org.apache.cxf.transport.ConduitInitiator; -import org.apache.cxf.transport.http.AbstractHTTPDestination; -import org.apache.cxf.transport.http.DestinationRegistry; -import org.apache.cxf.transport.http.HTTPSession; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.soap.MessageFactory; - -import java.io.IOException; -import java.net.URI; -import java.util.logging.Logger; - -/** - * Object that manages the activation/deactivation of the EJB3 endpoint. - * @author Florent Benoit - */ -public class JOnASDestination extends AbstractHTTPDestination { - - /** - * Logger (JDK logger used by the super classes). - */ - private static Logger jdkLogger = Logger.getLogger(JOnASDestination.class.getName()); - - /** - * Build a new Destination. - * @param bus the associated Bus - * @param registry the registry of Destinations - * @param endpointInfo the endpoint info of the destination - * @throws IOException if super constructor fails - */ - public JOnASDestination(final Bus bus, - final DestinationRegistry registry, - final EndpointInfo endpointInfo) throws IOException { - super(bus, registry, endpointInfo, endpointInfo.getAddress(), false); - registry.addDestination(this); - } - - /** - * @return the JDK logger used by the super class. - */ - @Override - protected Logger getLogger() { - return jdkLogger; - } - - /** - * @return the bus used by this Destination. - */ - public Bus getBus() { - return this.bus; - } - - /** - * Invoke the web service (prepare message + exchange + session) - * Copied from CXF ServletDestination. - * @param context HTTP context - * @param req HTTP request - * @param resp HTTP response - * @throws IOException When the Message couldn't be prepared appropriately - */ - public void invoke(final ServletContext context, - final HttpServletRequest req, - final HttpServletResponse resp) throws IOException { - - MessageImpl inMessage = new MessageImpl(); - setupMessage(inMessage, - context, - req, - resp); - - ExchangeImpl exchange = new ExchangeImpl(); - exchange.setInMessage(inMessage); - exchange.setSession(new HTTPSession(req)); - inMessage.setDestination(this); - - String oldAddress = endpointInfo.getAddress(); - ClassLoader oldCCL = Thread.currentThread().getContextClassLoader(); - try { - - endpointInfo.setAddress((String) inMessage.get(Message.REQUEST_URL)); - // Here i use MessageFactory, but any other class located in the - // javaee-api bundle should works - // Note This is just for SAAJ implementation class-loading - Thread.currentThread().setContextClassLoader(MessageFactory.class.getClassLoader()); - incomingObserver.onMessage(inMessage); - } finally { - Thread.currentThread().setContextClassLoader(oldCCL); - endpointInfo.setAddress(oldAddress); - } - - } - - /** - * Exposes this Destination's EndpointInfo - * @return this Destination's EndpointInfo - */ - public EndpointInfo getEndpointInfo() { - return endpointInfo; - } - - protected String getBasePath(String contextPath) throws IOException { - - String address = getAddress().getAddress().getValue(); - if (address == null) { - return contextPath; - } - if (address.startsWith("http")) { - return URI.create(address).getPath(); - } - - return contextPath + address; - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASHTTPTransportFactory.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASHTTPTransportFactory.java deleted file mode 100644 index 1cf0543207..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/http/JOnASHTTPTransportFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.http; - -import java.io.IOException; - -import org.apache.cxf.Bus; -import org.apache.cxf.service.model.EndpointInfo; -import org.apache.cxf.transport.Destination; -import org.apache.cxf.transport.DestinationFactory; -import org.apache.cxf.transport.http.HTTPTransportFactory; - -/** - * JOnAS specialized HTTP TransportFactory. - * It's mainly used as a {@link DestinationFactory} for {@link JOnASDestination}. - * @author Guillaume Sauthier - * @author Florent Benoit - */ -public final class JOnASHTTPTransportFactory extends HTTPTransportFactory - implements DestinationFactory { - - /** - * Build a new JOnAS transport factory for the given bus. - * @param bus the CXF bus. - */ - public JOnASHTTPTransportFactory(final Bus bus) { - setBus(bus); - } - - /** - * @return a new {@link JOnASDestination} for the given {@link EndpointInfo}. - * @param endpointInfo the given endpoint information - * @throws IOException if the {@link JOnASDestination} is not created. - */ - public Destination getDestination(final EndpointInfo endpointInfo) throws IOException { - - // Create the new JOnASDestination and configure it - JOnASDestination destination = new JOnASDestination(getBus(), getRegistry(), endpointInfo); - configure(destination); - return destination; - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/CXFWSEndpoint.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/CXFWSEndpoint.java deleted file mode 100644 index 20c0d45f4e..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/CXFWSEndpoint.java +++ /dev/null @@ -1,196 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.jaxws; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.jaxws.EndpointImpl; -import org.ow2.jonas.ws.cxf.http.JOnASDestination; -import org.ow2.jonas.ws.jaxws.IWSRequest; -import org.ow2.jonas.ws.jaxws.IWSResponse; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.jonas.ws.jaxws.WSException; -import org.ow2.jonas.ws.jaxws.PortIdentifier; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * This class represents the JOnAS' view on a web service endpoint (server side). - * @author Guillaume Sauthier - */ -public class CXFWSEndpoint implements IWebServiceEndpoint { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(CXFWSEndpoint.class); - - /** - * Wrapped CXF Endpoint. - */ - private EndpointImpl endpoint = null; - - /** - * The destination to execute. - */ - private JOnASDestination destination = null; - - /** - * Web service port description info. - */ - private PortMetaData portMetaData; - - /** - * Describe the WS type (EJB/POJO). - */ - private IWebServiceEndpoint.EndpointType type; - - /** - * The "parent" container. - */ - private WebservicesContainer container; - - /** - * Identifier. - */ - private PortIdentifier identifier; - - /** - * Construct a new WSEndpoint using CXF as JAX-WS implementation. - * @param endpoint the wrapped CXF endpoint. - * @param type is this endpoint a POJO or an EJB ? - * @param pmd Metadata related to the port being exposed - */ - public CXFWSEndpoint(final EndpointImpl endpoint, - final EndpointType type, - final PortMetaData pmd, - final WebservicesContainer container) { - this.endpoint = endpoint; - this.type = type; - this.portMetaData = pmd; - this.destination = (JOnASDestination) endpoint.getServer(pmd.getUrlPattern()).getDestination(); - this.container = container; - - // Create the identifier - this.identifier = new PortIdentifier(endpoint.getServiceName(), - endpoint.getEndpointName().getLocalPart()); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceEndpoint#getType() - */ - public EndpointType getType() { - return type; - } - - /** - * @return the port identifier of this endpoint. - */ - public PortIdentifier getIdentifier() { - return this.identifier; - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceEndpoint#invoke(org.ow2.jonas.ws.jaxws.IWSRequest, org.ow2.jonas.ws.jaxws.IWSResponse) - */ - public void invoke(final IWSRequest request, final IWSResponse response) throws WSException { - - // Invoke the Destination ! - logger.debug("Receiving request on the thread ''{0}''", Thread.currentThread()); - - Bus old = BusFactory.getThreadDefaultBus(); - try { - - Bus bus = destination.getBus(); - BusFactory.setThreadDefaultBus(bus); - - HttpServletRequest httpRequest = request.getAttribute(HttpServletRequest.class); - HttpServletResponse httpResponse = request.getAttribute(HttpServletResponse.class); - ServletContext servletContext = request.getAttribute(ServletContext.class); - - // Handle POST & GET messages (?WSDL is now handled through interceptors) - destination.invoke(servletContext, httpRequest, httpResponse); - - } catch (IOException ioe) { - throw new WSException(ioe); - } finally { - BusFactory.setThreadDefaultBus(old); - } - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceEndpoint#start() - */ - public void start() { - logger.debug("Start CXFWSEndpoint[{0}]", endpoint.getEndpointName()); - endpoint.publish(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWebServiceEndpoint#stop() - */ - public void stop() { - logger.debug("Stop CXFWSEndpoint[{0}]", endpoint.getEndpointName()); - endpoint.stop(); - } - - - /** - * Return the port info. - * @see org.ow2.jonas.ws.jaxws.IWebServiceEndpoint#getPortMetaData() - */ - public PortMetaData getPortMetaData() { - return portMetaData; - } - - /** - * @return the destination associated to this endpoint - */ - public JOnASDestination getDestination() { - return this.destination; - } - - /** - * Prints info about the endPoint. - */ - public void displayInfos() { - String endpointURL = "not yet available"; - String name = endpoint.getImplementorClass().getName(); - if (portMetaData != null && portMetaData.getEndpointURL() != null) { - endpointURL = portMetaData.getEndpointURL(); - } - logger.info("{0} endpoint ''{1}'' available at ''{2}''", type, name, endpointURL); - - // TODO: add debug informations too - } - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/WebservicesContainer.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/WebservicesContainer.java deleted file mode 100644 index 883c58971c..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/jaxws/WebservicesContainer.java +++ /dev/null @@ -1,195 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.jaxws; - -import static org.ow2.jonas.lib.util.Log.setComponentLogLevel; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import javax.wsdl.WSDLException; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.service.model.ServiceInfo; -import org.apache.cxf.wsdl.WSDLManager; -import org.apache.cxf.wsdl11.ServiceWSDLBuilder; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Level; -import org.ow2.jonas.ws.cxf.BusCreator; -import org.ow2.jonas.ws.cxf.http.JOnASDestination; -import org.ow2.jonas.ws.cxf.util.WSDLUtils; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.base.JAXWSWebservicesContainer; -import org.ow2.jonas.ws.publish.PublicationInfo; -import org.ow2.jonas.ws.publish.PublishableDefinition; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The WebservicesContainer represents a group of endpoints sharing the same WSDL Definition. - * Grouping is based on the WSDL location value.
    - * For example, if 2 endpoints (from the same archive) are declaring the same WSDL location - * ('META-INF/wsdl/definition.wsdl' for example), they will be grouped in the same container. - * - * @author Guillaume Sauthier - */ -public class WebservicesContainer extends JAXWSWebservicesContainer { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebservicesContainer.class); - - /** - * Endpoints of the group share the same Bus instance. - */ - private Bus bus; - - - /** - * Construct the group. - * @param name Shared WSDL Location - */ - public WebservicesContainer(final String name, BusFactory creator) { - super(name); - - // Init the Bus - bus = creator.createBus(); - - } - - /** - * @return the shared Bus instance. - */ - public Bus getBus() { - return this.bus; - } - - /** - * Stops the container. - * Recursively stops inner endpoints. - */ - @Override - public void stop() { - - // Stop the endpoints first - super.stop(); - - // Stop the Bus of the container - // Bus start/stop operations are extra verbose - Level old = setComponentLogLevel("org.apache.cxf", BasicLevel.LEVEL_ERROR); - Level old2 = setComponentLogLevel("org.springframework", BasicLevel.LEVEL_ERROR); - - this.bus.shutdown(true); - - // Reset log levels - setComponentLogLevel("org.apache.cxf", old); - setComponentLogLevel("org.springframework", old2); - - } - - /** - * @return list of publishable definition that will be used by the publisher - */ - public List getPublishableDefinitions() { - // Get WSDL location - String wsdlLocation = getName(); - - // Only 1 definition if there is a WSDL location, else 1 definition by endpoint - List publishableDefinitionList = new ArrayList(); - - // Two cases : with or without a WSDL - if (wsdlLocation != null && !"".equals(wsdlLocation)) { - // 1st case : With a WSDL location - PublishableDefinition publishableDefinition = new PublishableDefinition(); - publishableDefinitionList.add(publishableDefinition); - - // There is a WSDL, only one definition and publication info - PublicationInfo publicationInfo = new PublicationInfo(); - publicationInfo.setOriginalWsdlFilename(wsdlLocation); - publishableDefinition.setPublicationInfo(publicationInfo); - - // Get the WSDL manager - WSDLManager wsdlManager = bus.getExtension(WSDLManager.class); - try { - publishableDefinition.setDefinition(wsdlManager.getDefinition(wsdlLocation)); - } catch (WSDLException e) { - logger.error("Unable to load WSDL ''{0}''", wsdlLocation, e); - } - - } else { - // No WSDL, needs to publish a WSDL for each endpoint - Collection endPoints = getEndpoints(); - if (endPoints != null) { - for (IWebServiceEndpoint endpoint : endPoints) { - if (endpoint instanceof CXFWSEndpoint) { - CXFWSEndpoint cxfEndPoint = (CXFWSEndpoint) endpoint; - - PublishableDefinition publishableDefinition = new PublishableDefinition(); - JOnASDestination destination = cxfEndPoint.getDestination(); - ServiceInfo serviceInfo = destination.getEndpointInfo().getService(); - - // Publication info - PublicationInfo publicationInfo = new PublicationInfo(); - publishableDefinition.setPublicationInfo(publicationInfo); - // Set a name based on the service name - publicationInfo.setOriginalWsdlFilename(serviceInfo.getName().getLocalPart() + ".wsdl"); - - - - // Definition - try { - ServiceWSDLBuilder builder = new ServiceWSDLBuilder(bus, serviceInfo); - publishableDefinition.setDefinition(builder.build()); - } catch (WSDLException e) { - logger.error("Unable to load WSDL ''{0}''", wsdlLocation, e); - } - } - } - } - } - - // Update publication directory if container contains one - String directory = getWsdlPublicationDirectory(); - if (directory != null) { - File dir = new File(directory); - for (PublishableDefinition publishableDefinition : publishableDefinitionList) { - publishableDefinition.getPublicationInfo().setPublicationDirectory(dir); - - } - } - - // Update definition - for (PublishableDefinition publishableDefinition : publishableDefinitionList) { - WSDLUtils.updateEndpointAddresses(publishableDefinition.getDefinition(), this); - } - - return publishableDefinitionList; - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/util/WSDLUtils.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/util/WSDLUtils.java deleted file mode 100644 index 72932f8cbb..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/util/WSDLUtils.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.cxf.util; - -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortIdentifier; - -import javax.wsdl.Definition; -import javax.wsdl.Service; -import javax.wsdl.Port; -import javax.wsdl.extensions.soap12.SOAP12Address; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.xml.namespace.QName; -import java.util.List; - -/** - * The WSDLUtils class contains WSDL related tools. - * - * @author Guillaume Sauthier - */ -public class WSDLUtils { - - /** - * Update the endpoints addresses of the given WSDL Definition. - * @param definition WSDL document - * @param container group of endpoints sharing the same WSDL definition - */ - public static void updateEndpointAddresses(final Definition definition, - final WebservicesContainer container) { - - // Update port info for each endpoint - for (IWebServiceEndpoint endpoint : container.getEndpoints()) { - - PortIdentifier id = endpoint.getIdentifier(); - QName serviceName = id.getServiceName(); - String portName = id.getPortName(); - - Service service = definition.getService(serviceName); - if (service != null) { - Port port = service.getPort(portName); - - if (port != null) { - String url = container.findUpdatedURL(id); - if (url != null) { - updateSoapAddressLocation(port, url); - } - } - } - } - - } - - /** - * Update the soap:address extensibility element contained in the given port. - * @param port wsdl:port instance - * @param url new value - */ - private static void updateSoapAddressLocation(final Port port, - final String url) { - List extensions = port.getExtensibilityElements(); - for (Object extension : extensions) { - if (extension instanceof SOAP12Address) { - ((SOAP12Address) extension).setLocationURI(url); - } else if (extension instanceof SOAPAddress) { - ((SOAPAddress) extension).setLocationURI(url); - } - } - } - - -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/ContainerWsdlInterceptor.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/ContainerWsdlInterceptor.java deleted file mode 100644 index 7650433e1d..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/ContainerWsdlInterceptor.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.cxf.wsdl; - -import java.util.Map; - -import org.apache.cxf.frontend.WSDLGetInterceptor; -import org.apache.cxf.message.Message; -import org.apache.cxf.service.model.EndpointInfo; -import org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.w3c.dom.Document; - -/** - * A {@code ContainerWsdlInterceptor} is responsible to generate - * (or update) the Wsdl of a given endpoint's group (in a wsdl:service). - * - * @author Guillaume Sauthier - */ -public class ContainerWsdlInterceptor extends WSDLGetInterceptor { - - /** - * Update the Wsdl with appropriate endpoints Url. - */ - private WsdlUpdater updater; - - public ContainerWsdlInterceptor(WebservicesContainer container) { - updater = new WsdlUpdater(container); - } - - @Override - public Document getDocument(Message message, String base, Map params, String ctxUri, EndpointInfo endpointInfo) { - return updater.getDocument(message, base, params, ctxUri, endpointInfo); - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/WsdlUpdater.java b/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/WsdlUpdater.java deleted file mode 100644 index e412cf5092..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/java/org/ow2/jonas/ws/cxf/wsdl/WsdlUpdater.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.cxf.wsdl; - -import java.util.List; -import java.util.Map; - -import javax.wsdl.Definition; -import javax.wsdl.extensions.schema.SchemaReference; -import javax.xml.namespace.QName; - -import org.apache.cxf.frontend.WSDLGetUtils; -import org.apache.cxf.helpers.DOMUtils; -import org.apache.cxf.message.Message; -import org.ow2.jonas.ws.cxf.jaxws.CXFWSEndpoint; -import org.ow2.jonas.ws.cxf.jaxws.WebservicesContainer; -import org.ow2.jonas.ws.jaxws.PortIdentifier; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * A {@code WsdlUpdater} is responsible to update all the - * {@literal soap:address[@location]} of the ports in the wsdl:service. - * - * @author Guillaume Sauthier - */ -public class WsdlUpdater extends WSDLGetUtils { - - /** - * Group all the endpoints defined in a unique Wsdl. - */ - private WebservicesContainer container; - - public WsdlUpdater(WebservicesContainer container) { - this.container = container; - } - - @Override - protected void updateDoc(final Document doc, - final String base, - final Map mp, - final Map smp, - final Message message) { - - // Let CXF do most of the work - super.updateDoc(doc, base, mp, smp, message); - - // The processed service - QName serviceQName = message.getExchange().getService().getName(); - - // Iterates on wsdl:service - // --------------------------------------------------- - List serviceList = DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(), - "http://schemas.xmlsoap.org/wsdl/", - "service"); - for (Element serviceEl : serviceList) { - - // Only select the right service - String serviceName = serviceEl.getAttribute("name"); - if (serviceName.equals(serviceQName.getLocalPart())) { - - // Iterates on wsdl:port - // --------------------------------------------------- - List elementList = DOMUtils.findAllElementsByTagNameNS(doc.getDocumentElement(), - "http://schemas.xmlsoap.org/wsdl/", - "port"); - for (Element el : elementList) { - String name = el.getAttribute("name"); - - // Search the updated Url for the current port - String url = container.findUpdatedURL(new PortIdentifier(serviceQName, name)); - if (url != null) { - rewriteAddress(url, el, "http://schemas.xmlsoap.org/wsdl/soap/"); - rewriteAddress(url, el, "http://schemas.xmlsoap.org/wsdl/soap12/"); - } - } - } - } - } -} diff --git a/jonas/modules/services/webservices/cxf/core/src/main/resources/META-INF/jonas-webservices-cxf-core.bnd b/jonas/modules/services/webservices/cxf/core/src/main/resources/META-INF/jonas-webservices-cxf-core.bnd deleted file mode 100644 index 1175065a26..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/resources/META-INF/jonas-webservices-cxf-core.bnd +++ /dev/null @@ -1,30 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: jonas-webservices-axis.bnd 12337 2007-12-13 02:43:26Z benoitf $ -# --------------------------------------------------------------------------- - -Private-Package org.ow2.jonas.ws.cxf.* - -Export-Package org.ow2.jonas.ws.cxf.client.factory - -Import-Package javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * diff --git a/jonas/modules/services/webservices/cxf/core/src/main/resources/metadata.xml b/jonas/modules/services/webservices/cxf/core/src/main/resources/metadata.xml deleted file mode 100644 index 888f058fb7..0000000000 --- a/jonas/modules/services/webservices/cxf/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/cxf/pom.xml b/jonas/modules/services/webservices/cxf/pom.xml deleted file mode 100644 index 2ed2df662f..0000000000 --- a/jonas/modules/services/webservices/cxf/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices-cxf - pom - JOnAS :: Services :: Web Services :: CXF - - core - - diff --git a/jonas/modules/services/webservices/jaxrpc/ant/pom.xml b/jonas/modules/services/webservices/jaxrpc/ant/pom.xml deleted file mode 100644 index 8636c2c5e0..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/ant/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - jonas-webservices-jaxrpc - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-jaxrpc-ant - bundle - JOnAS :: Services :: Web Services :: JAX-RPC :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/webservices/jaxrpc/ant/src/main/java/org/ow2/jonas/antmodular/jaxrpc/WsGenTask.java b/jonas/modules/services/webservices/jaxrpc/ant/src/main/java/org/ow2/jonas/antmodular/jaxrpc/WsGenTask.java deleted file mode 100644 index 9ff03b998c..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/ant/src/main/java/org/ow2/jonas/antmodular/jaxrpc/WsGenTask.java +++ /dev/null @@ -1,372 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ -package org.ow2.jonas.antmodular.jaxrpc; - -import java.io.File; - -import org.apache.tools.ant.AntClassLoader; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.antmodular.bootstrap.JOnASAntTool; - -/** - * Launch WsGen from Ant. - * - * @author Guillaume Sauthier - */ -public class WsGenTask extends MatchingTask { - - /** Bootstrap class name. */ - private static final String BOOTSTRAP_CLASS = "org.ow2.jonas.client.boot.Bootstrap"; - - /** WsGen class name. */ - private static final String WSGEN_CLASS = "org.ow2.jonas.generators.wsgen.WsGen"; - - /** destination directory. */ - private File destination = null; - - /** source directory. */ - private File source = null; - - /** validation of XML files ? */ - private boolean validation = true; - - /** name of javac command. */ - private String javac = null; - - /** list of javac options. */ - private String javacOpts = null; - - /** will WsGen keep already generated files ? */ - private boolean keepGenerated = false; - - /** Will WsGen create configuration files ? */ - private boolean noConfig = false; - - /** verbose mode. */ - private boolean verbose = false; - - /** debug mode. */ - private boolean debug = false; - - /** JVM debug mode. */ - private boolean jvmDebug = false; - - /** $JONAS_ROOT. */ - private File jonasRoot = null; - - /** $JONAS_BASE. */ - private File jonasBase = null; - - /** - * Set the output Directory. - * @param d output dir - */ - public void setDestdir(final File d) { - destination = d; - } - - /** - * Set where source jar files are located. - * @param s sources dir - */ - public void setSrcdir(final File s) { - source = s; - } - - /** - * Set XML Validation on/off. - * @param v on/off - */ - public void setValidation(final boolean v) { - validation = v; - } - - /** - * Set the javac command line. - * @param j javac to use - */ - public void setJavac(final String j) { - javac = j; - } - - /** - * Set Java Compiler Options. - * @param opts Options - */ - public void setJavacopts(final String opts) { - javacOpts = opts; - } - - /** - * Set keep Generated mode to on/off. - * @param k on/off - */ - public void setKeepgen(final boolean k) { - keepGenerated = k; - } - - /** - * Set noConfig mode to on/off. - * @param c on/off - */ - public void setNoconfig(final boolean c) { - noConfig = c; - } - - /** - * Set WSDL2Java verbose mode to on/off. - * @param v on/off - */ - public void setVerbose(final boolean v) { - verbose = v; - } - - /** - * Set WSDL2Java debug mode to on/off. - * @param b on/off - */ - public void setDebug(final boolean b) { - debug = b; - } - - /** - * Set debug mode on/off. Used only by developers that wants to Debug WsGen. - * @param d boolean - */ - public void setJvmdebug(final boolean d) { - jvmDebug = d; - } - - /** - * Set the JONAS_ROOT to use. - * @param jr JONAS_ROOT - */ - public void setJonasroot(final File jr) { - jonasRoot = jr; - } - - /** - * Set the JONAS_BASE to use. - * @param jb JONAS_BASE - */ - public void setJonasbase(final File jb) { - jonasBase = jb; - } - - /** - * Execute the WsGen Ant Task. - * @throws BuildException if wsgen cannot finish - */ - public void execute() throws BuildException { - - // init the wsgen task - initWsGenTask(); - - // execute - DirectoryScanner ds = getDirectoryScanner(source); - ds.scan(); - String[] files = ds.getIncludedFiles(); - - for (int i = 0; i < files.length; i++) { - - Java wsgen = createWsGen(source + File.separator + files[i]); - - // calling WsGen task - log("Calling WsGen task for '" + source + File.separator + files[i] + "'.", Project.MSG_VERBOSE); - - if (wsgen.executeJava() != 0) { - throw new BuildException("WsGen reported an error."); - } - } - - } - - /** - * Create and configure the WsGen Java task. - * @param filename input file name to be processed by WsGen - * @return the configured Java Ant Task - * @throws BuildException if the Java Task cannot be created - */ - private Java createWsGen(final String filename) throws BuildException { - - Java wsgenTask = null; // WsGen task - - wsgenTask = (Java) getProject().createTask("java"); - wsgenTask.setTaskName("wsgen"); - wsgenTask.setFork(true); - - // jonas root - wsgenTask.addSysproperty(JOnASAntTool.createVariable("jonas.root", jonasRoot)); - - // jonas base - wsgenTask.addSysproperty(JOnASAntTool.createVariable("jonas.base", jonasBase)); - - // Endorsed directory - File endorsedDir = new File(new File(jonasRoot, "lib"), "endorsed"); - wsgenTask.addSysproperty(JOnASAntTool.createVariable("java.endorsed.dirs", endorsedDir)); - - - // java policy file - String jonasConfigDir = jonasRoot + File.separator + "conf"; - File javaPolicyFile = new File(jonasConfigDir, "java.policy"); - if (javaPolicyFile.exists()) { - wsgenTask.addSysproperty(JOnASAntTool.createVariable("java.security.policy", javaPolicyFile)); - } - - // JVM Debug - if (jvmDebug) { - this.log("Launching in debug mode on port 12345, waiting for connection ...", Project.MSG_INFO); - wsgenTask.createJvmarg().setLine("-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=12345,suspend=y"); - } - - // The bootstrap class must launch the GenIC class - wsgenTask.createArg().setValue(WSGEN_CLASS); - - wsgenTask.createArg().setValue("-d"); - wsgenTask.createArg().setFile(destination); - - // add ow_jonas_bootstrap.jar - String bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" - + File.separator + "client-bootstrap.jar"; - Path classpath = new Path(getProject(), bootJar); - - log("Using classpath: " + classpath.toString(), Project.MSG_VERBOSE); - wsgenTask.setClasspath(classpath); - - if (!checkBootstrapClassName(classpath)) { - log("Cannot find bootstrap class in classpath.", Project.MSG_ERR); - throw new BuildException("Bootstrap class not found, please check the classpath."); - } else { - wsgenTask.setClassname(BOOTSTRAP_CLASS); - } - - // keepgenerated - if (keepGenerated) { - wsgenTask.createArg().setValue("-keepgenerated"); - } - - // noconfig - if (noConfig) { - wsgenTask.createArg().setValue("-noconfig"); - } - - // novalidation - if (!validation) { - wsgenTask.createArg().setValue("-novalidation"); - } - - // javac - if (javac != null) { - wsgenTask.createArg().setValue("-javac"); - wsgenTask.createArg().setLine(javac); - } - - // javacopts - if (javacOpts != null && !javacOpts.equals("")) { - wsgenTask.createArg().setValue("-javacopts"); - wsgenTask.createArg().setLine(javacOpts); - } - - // verbose - if (verbose) { - wsgenTask.createArg().setValue("-verbose"); - } - - // debug - if (debug) { - wsgenTask.createArg().setValue("-debug"); - } - - // input file to process by GenIC - wsgenTask.createArg().setValue(filename); - - return wsgenTask; - - } - - /** - * Initialize build properties. - * @throws BuildException if required properties are not set - */ - private void initWsGenTask() throws BuildException { - // try to define jonasRoot if not set - if (jonasRoot == null) { - // get ant property - String jr = getProject().getProperty("jonas.root"); - jonasRoot = new File(jr); - - if (jr == null) { - throw new BuildException("attribute jonasroot is necessary."); - } - } - - // use jonasRoot as jonasBase if not set - if (jonasBase == null) { - String jb = getProject().getProperty("jonas.base"); - if (jb == null) { - jonasBase = jonasRoot; - } else { - jonasBase = new File(jb); - } - - } - - // default destination : project directory - if (destination == null) { - destination = getProject().getBaseDir(); - } - - // javac javacOpts - // by default WsGen already handle them - - } - - /** - * Check the bootstrap class name to use in the given classpath. - * - * @param classpath classpath where the boostrap class must be searched. - * @return true if the bootstrap is available in the classpath - */ - private boolean checkBootstrapClassName(final Path classpath) { - log("Looking for bootstrap class in classpath: " + classpath.toString(), Project.MSG_VERBOSE); - AntClassLoader cl = new AntClassLoader(classpath.getProject(), classpath); - try { - cl.loadClass(BOOTSTRAP_CLASS); - log("Found Bootstrap class '" + BOOTSTRAP_CLASS - + "' in classpath.", Project.MSG_VERBOSE); - } catch (ClassNotFoundException cnf1) { - log("Bootstrap class '" + BOOTSTRAP_CLASS - + "' not found in classpath.", Project.MSG_VERBOSE); - return false; - } - return true; - } - -} diff --git a/jonas/modules/services/webservices/jaxrpc/ant/src/main/resources/antlib-wsgen.xml b/jonas/modules/services/webservices/jaxrpc/ant/src/main/resources/antlib-wsgen.xml deleted file mode 100644 index 27e4027df2..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/ant/src/main/resources/antlib-wsgen.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/jaxrpc/core/pom.xml b/jonas/modules/services/webservices/jaxrpc/core/pom.xml deleted file mode 100644 index 6c0269d11a..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/pom.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - jonas-webservices-jaxrpc - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-jaxrpc-core - bundle - JOnAS :: Services :: Web Services :: JAX-RPC :: Core - - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - provided - - - org.ow2.jonas - jonas-naming - ${project.version} - provided - - - geronimo-spec - geronimo-spec-jaxr - 1.0-rc4 - provided - - - org.ow2.jonas - jonas-deployment - ${project.version} - provided - - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/ClientJServiceFactoryFinder.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/ClientJServiceFactoryFinder.java deleted file mode 100644 index 7408ff6222..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/ClientJServiceFactoryFinder.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.base; - -import java.io.InputStream; -import java.util.Properties; - -import org.ow2.jonas.ws.jaxrpc.WSException; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; - - - -/** - * Used to retrieve from jonas-client.properties the factory to use for Service - * creation (WebServices) - * @author Guillaume Sauthier - */ -public class ClientJServiceFactoryFinder { - - /** - * jonas-client properties - */ - private static Properties props; - - /** - * Property name - */ - private static final String JONAS_SERVICE_FACTORY = "jonas.service.ws.factory.class"; - - /** - * Private empty constructor for utility class - */ - private ClientJServiceFactoryFinder() { - } - - /** - * Factory class name - */ - private static String factoryClassName = null; - - /** - * Return the JServiceFactory specified in jonas.properties - * @return the JServiceFactory specified in jonas.properties - * @throws WSException When JServiceFactory instantiation fails - */ - public static JServiceFactory getJOnASServiceFactory() throws WSException { - JServiceFactory factory = null; - ClassLoader current = Thread.currentThread().getContextClassLoader(); - - if (props == null) { - props = new Properties(); - try { - InputStream is = current.getResourceAsStream("jonas-client.properties"); - if (is != null) { - props.load(is); - factoryClassName = props.getProperty(JONAS_SERVICE_FACTORY); - } else { - System.err.println("Cannot load jonas-client.properties from ClassLoader"); - } - } catch (Exception e) { - String err = "Error when trying to get jonas property '" + JONAS_SERVICE_FACTORY - + "' from jonas-client.properties"; - throw new WSException(err, e); - } - } - - if (factoryClassName == null) { - String err = "jonas property '" + JONAS_SERVICE_FACTORY + "' must be set! in jonas-client.properties"; - throw new WSException(err); - } - - // instanciation - try { - factory = (JServiceFactory) current.loadClass(factoryClassName).newInstance(); - } catch (ClassNotFoundException cnfe) { - String err = "ClassNotFound '" + factoryClassName + "' in JOnAS ClassLoader"; - throw new WSException(err); - } catch (InstantiationException ie) { - String err = "Instantiation error for new '" + factoryClassName + "'"; - throw new WSException(err); - } catch (IllegalAccessException ie) { - String err = "Illegal Access for new '" + factoryClassName + "'"; - throw new WSException(err); - } - - return factory; - - } - -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCService.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCService.java deleted file mode 100644 index e56c419c7b..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCService.java +++ /dev/null @@ -1,1284 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxrpc.base; - -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.StringTokenizer; - -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.xml.namespace.QName; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.deployment.common.HandlerDesc; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDesc; -import org.ow2.jonas.deployment.web.WebContainerDeploymentDescException; -import org.ow2.jonas.deployment.web.wrapper.WebManagerWrapper; -import org.ow2.jonas.deployment.ws.JaxRpcPortComponentDesc; -import org.ow2.jonas.deployment.ws.PortComponentDesc; -import org.ow2.jonas.deployment.ws.SSBPortComponentDesc; -import org.ow2.jonas.deployment.ws.ServiceDesc; -import org.ow2.jonas.deployment.ws.WSDLFile; -import org.ow2.jonas.deployment.ws.WSDeploymentDesc; -import org.ow2.jonas.deployment.ws.WSDeploymentDescException; -import org.ow2.jonas.deployment.ws.wrapper.WSManagerWrapper; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.loader.WebappClassLoader; -import org.ow2.jonas.lib.naming.ComponentContext; -import org.ow2.jonas.lib.naming.URLFactory; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.naming.JNamingManager; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.web.JWebContainerService; -import org.ow2.jonas.web.JWebContainerServiceException; -import org.ow2.jonas.ws.jaxrpc.IJAXRPCService; -import org.ow2.jonas.ws.jaxrpc.WSException; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; -import org.ow2.jonas.ws.jaxrpc.mbean.Handler; -import org.ow2.jonas.ws.jaxrpc.mbean.PortComponent; -import org.ow2.jonas.ws.jaxrpc.mbean.Service; -import org.ow2.jonas.ws.jaxrpc.mbean.WebServicesObjectName; -import org.ow2.jonas.ws.publish.PublicationInfo; -import org.ow2.jonas.ws.publish.PublishableDefinition; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.ow2.jonas.ws.publish.WSDLPublisherManager; -import org.ow2.util.ee.deploy.api.deployable.EARDeployable; -import org.ow2.util.url.URLUtils; - -/** - * implements deployment process and declares commons abstract methods for all - * (used) Web services engine. Actually we consider Glue and AXIS. - * @author Guillaume Sauthier - * @author Xavier Delplanque - * @author S. Ali Tokmen (URL escaping issues when folders contain spaces) - */ -public abstract class JAXRPCService extends AbsServiceImpl implements IJAXRPCService, JAXRPCServiceMBean { - - /** - * Logger for this service. - */ - private static final Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** - * Internationalization tool. - */ - private static final I18n i18n = I18n.getInstance(JAXRPCService.class); - - /** - * Manager for WSDL files publishing. - */ - private WSDLPublisherManager wsdlManager = null; - - /** - * Reference to the web container service. - */ - private JWebContainerService webService = null; - - /** - * JMX Service reference. - */ - private JmxService jmxService = null; - - /** - * Map of deployments descriptor ( {@link ClassLoader} -> {@link Stack}). - */ - private Map deployments = null; - - /** - * Map of warURL -> WebServices. - */ - private Map webservicesMBeans = null; - - /** - * endpoint URL prefix to be used for ws endpoint. - */ - private String endpointURLPrefix = null; - - /** - * Auto WSGen ? - */ - private boolean autoWSGen = true; - - /** - * Naming Manager for URL binding. - */ - private JNamingManager naming; - - /** - * Validate parser or not ? - */ - private boolean parsingWithValidation; - - /** - * Init local fields at the very beginning. - */ - public JAXRPCService() { - // Init variables - deployments = new HashMap(); - webservicesMBeans = new HashMap(); - } - - /** - * Return JServiceFactory instance - * @return JServiceFactory instance - */ - abstract public JServiceFactory createServiceFactory(); - - /** - * @param prefix URL prefixing all generated endpoint URL. - */ - public void setUrlPrefix(final String prefix) { - this.endpointURLPrefix = prefix; - } - - /** - * @param validate validating parser or not ? - */ - public void setParsingWithValidation(final boolean validate) { - this.parsingWithValidation = validate; - WSManagerWrapper.setParsingWithValidation(validate); - - if (!validate) { - logger.log(BasicLevel.DEBUG, "WebServices XML parsing without validation"); - } else { - logger.log(BasicLevel.DEBUG, "WebServices XML parsing with validation"); - } - - } - - /** - * @param engage Engage Automatic WsGen ? - */ - public void setAutoWsGenEngaged(final boolean engage) { - this.autoWSGen = engage; - } - - /** - * Get, update and publish WSDL documents contained in a set of jars and - * wars. - * @param ctx the context containing the configuration to deploy the wars. - *
    This context contains the following parameters :
    - - * jarUrls the list of the urls of the jars to deploy.
    - warUrls - * the list of the urls of the wars to deploy.
    - ejbClassLoader - * the classLoader of the ejbs(used for webapps too).
    - - * earClassLoader the ear classLoader of the j2ee app.
    - - * warCtxRootMapping the webapps contextRoots with associated war - * name.
    - unpackDir the directory where EAR has been unpacked - * (optionnal for pure webapp webservices). - * @throws WSException if an error occurs during the deployment. - */ - public void deployWebServices(final Context ctx) throws WSException { - /** - * For each Jar/WarUrls in the given ctx : - Get the jar/war deployment - * desc - Get the WSDL definition - Update the WSDL location - Publish - * the WSDL - */ - - // Get context parameters. - URL[] jarUrls = null; - URL[] warUrls = null; - URL earURL = null; - EARDeployable earDeployable = null; - ClassLoader ejbClassLoader = null; - ClassLoader earClassLoader = null; - Map warCtxRootMapping = null; - File unpackDirectory = null; - - // EAR & Webapp case common information - try { - jarUrls = (URL[]) ctx.lookup("jarUrls"); - warUrls = (URL[]) ctx.lookup("warUrls"); - unpackDirectory = (File) ctx.lookup(UNPACK_DIRECTORY_CTX_PARAM); - } catch (NamingException e) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.ctxParamProblem"); - logger.log(BasicLevel.ERROR, err + e.getMessage()); - throw new WSException(err, e); - } - - // EAR case specific information - try { - earURL = (URL) ctx.lookup("earURL"); - earDeployable = (EARDeployable) ctx.lookup("earDeployable"); - earClassLoader = (ClassLoader) ctx.lookup("earClassLoader"); - warCtxRootMapping = (Map) ctx.lookup("warCtxRootMapping"); - ejbClassLoader = (ClassLoader) ctx.lookup("ejbClassLoader"); - } catch (NamingException ne) { - // WebApp case - earURL = null; - earClassLoader = null; - warCtxRootMapping = null; - ejbClassLoader = null; - } - - // Deploy wars Web services. - URLClassLoader loaderForCls = null; - String fileName = null; - WSDeploymentDesc wsDD = null; - - for (int i = 0; i < warUrls.length; i++) { - // Get the name of a war to deploy. - fileName = URLUtils.urlToFile(warUrls[i]).getPath(); - logger.log(BasicLevel.DEBUG, "Analyzing war '" + fileName + "' for web services"); - - // Get the class loader for the current war. - loaderForCls = webService.getClassLoader(warUrls[i], earDeployable, ejbClassLoader); - - WebappClassLoader webLoader = (WebappClassLoader) loaderForCls; - URL url = webLoader.getBaseURL(); - - // Get the deployment descriptor from file. - try { - wsDD = WSManagerWrapper.getDeploymentDesc(warUrls[i], url, loaderForCls, earClassLoader); - } catch (WSDeploymentDescException wsdde) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.wsddEx", fileName); - logger.log(BasicLevel.ERROR, err + ": " + wsdde); - throw new WSException(err, wsdde); - } - - if (wsDD != null) { - // The current War contains Webservices - try { - Context compCtx = new ComponentContext(fileName); - compCtx.rebind("wsDD", wsDD); - compCtx.rebind("cl", loaderForCls); - - if (earClassLoader != null) { - compCtx.rebind("earCL", earClassLoader); - } - compCtx.rebind("warURL", warUrls[i]); - - // ear case - if (warCtxRootMapping != null) { - compCtx.rebind("warContextRoot", warCtxRootMapping.get(warUrls[i])); - - // non-ear case - } else { - compCtx.rebind("warContextRoot", ""); - } - - doDeployWebServices(compCtx); - } catch (NamingException ne) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.bindError", fileName); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, ne); - } - } - } - // End deploy wars Web services. - - // Deploy jars Web services. - // Check warCtxRootMapping presence - if ((jarUrls.length != 0) && (warCtxRootMapping == null)) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.ctxRootMappingMissing"); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err); - } - - for (int i = 0; i < jarUrls.length; i++) { - // Get the name of a war to deploy. - fileName = URLUtils.urlToFile(jarUrls[i]).getPath(); - logger.log(BasicLevel.DEBUG, "Analyzing EjbJar '" + fileName + "' for web services"); - - URLClassLoader webClassLoader = null; - - // Get the deployment descriptor from file. - try { - wsDD = WSManagerWrapper.getDeploymentDesc(jarUrls[i], ejbClassLoader, earClassLoader); - } catch (WSDeploymentDescException wsdde) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.wsddEx", fileName); - logger.log(BasicLevel.ERROR, err + ": " + wsdde); - throw new WSException(err, wsdde); - } - - if (wsDD != null) { - // The current EjbJar contains Webservices - URL warURL = null; - - /** - * Default Naming Convention for Webapp linked to Ejb - * .jar -> .war - */ - File targetWebAppFile; - if (wsDD.getWarFile() != null) { - targetWebAppFile = new File(unpackDirectory, wsDD.getWarFile()); - } else { - String ejb = new File(jarUrls[i].getFile()).getName(); - String war = ejb.substring(0, ejb.length() - ".jar".length()); - - targetWebAppFile = new File(unpackDirectory, war.concat(".war")); - } - // Get an escaped URL from the File - warURL = URLUtils.fileToURL(targetWebAppFile); - - logger.log(BasicLevel.DEBUG, "Unpack Dir : " + unpackDirectory); - logger.log(BasicLevel.DEBUG, "Computed URL : " + warURL); - - // check if webapp is present - boolean present = false; - - for (int w = 0; w < warUrls.length; w++) { - if (warUrls[w].equals(warURL)) { - present = true; - } - logger.log(BasicLevel.DEBUG, "warUrls[" + w + "]=" + warUrls[w]); - } - - // get the linked web classloader - webClassLoader = webService.getClassLoader(warURL, earDeployable, ejbClassLoader); - - if (!present) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.webappNotFound", - warURL); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err); - } - - try { - Context compCtx = new ComponentContext(fileName); - compCtx.rebind("wsDD", wsDD); - - // Using WebClassLoader () - compCtx.rebind("cl", webClassLoader); - compCtx.rebind("earCL", earClassLoader); - - compCtx.rebind("warURL", warURL); - - // warContextRoot cannot be null in ejb case - // because an ejb needs a webapp for webservices - Object warContextRoot = warCtxRootMapping.get(warURL); - if (warContextRoot == null) { - // TODO remove that, mapping should only contains escaped URL - // URL escaping issue ? - warContextRoot = warCtxRootMapping.get(URLUtils.fileToURL(new File(warURL.getFile()))); - } - compCtx.rebind("warContextRoot", warContextRoot); - doDeployWebServices(compCtx); - } catch (NamingException ne) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.deployWebServices.bindError", fileName); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, ne); - } - } - } - - // End deploy jars Web services. - } - - /** - * Deploy the given Web services. - * @param ctx Context used for parameter passing. - * @throws WSException when error occurs. - */ - protected void doDeployWebServices(final Context ctx) throws WSException { - /** - * Context structure : - wsDD Web Services deployment descriptor. - cl - * Module ClassLoader - earCL Application ClassLoader - warContextRoot - * the context-root of the war (null in ejb case) - warURL the url of - * war dispatching SOAP requests - */ - WSDeploymentDesc wsDD = null; - ClassLoader cl = null; - ClassLoader earCL = null; - String warContextRoot = null; - URL warURL = null; - - try { - wsDD = (WSDeploymentDesc) ctx.lookup("wsDD"); - cl = (ClassLoader) ctx.lookup("cl"); - warContextRoot = (String) ctx.lookup("warContextRoot"); - warURL = (URL) ctx.lookup("warURL"); - } catch (NamingException ne) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.doDeployWebServices.namingError"); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, ne); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Deploying WebServices for '" + warURL + "'"); - } - - try { - earCL = (ClassLoader) ctx.lookup("earCL"); - } catch (NamingException ne) { - // Nothing to do : non EAR case - earCL = null; - } - - // store WSDeployInfo for later use (completeWSDeployment method) - ClassLoader key = cl; - if (earCL != null) { - key = earCL; - } - Stack s = (Stack) deployments.get(key); - if (s == null) { - s = new Stack(); - deployments.put(key, s); - } - s.push(new WSDeployInfo(warURL, wsDD)); - - - List sds = wsDD.getServiceDescs(); - - // for each WSDL contained in the component - for (Iterator i = sds.iterator(); i.hasNext();) { - ServiceDesc sd = (ServiceDesc) i.next(); - WSDLFile wsdl = sd.getWSDL(); - - // get the endpoint URL for each port-component - // update the WSDL Definition - for (Iterator pc = sd.getPortComponents().iterator(); pc.hasNext();) { - PortComponentDesc pcd = (PortComponentDesc) pc.next(); - QName portQName = pcd.getQName(); - URL endpoint = null; - if (pcd.hasJaxRpcImpl()) { - endpoint = getEndpointURL(wsDD, (JaxRpcPortComponentDesc) pcd, warURL, warContextRoot); - } else { - endpoint = getEndpointURL(wsDD, (SSBPortComponentDesc) pcd, warURL, cl, earCL, warContextRoot); - } - - pcd.setEndpointURL(endpoint); - wsdl.setLocation(portQName, endpoint); - - // add endpoint URL into JNDI namespace to allow application - // clients (that are not running in the same JVM) to use - // port-component-link - final ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - - Context registry = new InitialContext(); - Reference urlRef = new Reference(URL.class.getName(), URLFactory.class.getName(), null); - urlRef.add(new StringRefAddr("url", endpoint.toString())); - registry.rebind(pcd.getName(), urlRef); - logger.log(BasicLevel.DEBUG, "Bind updated URL (" + endpoint + ") in " + pcd.getName()); - } catch (NamingException ne) { - throw new WSException("Cannot bind updated URL for port-component '" + pcd.getName() - + "'", ne); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - - } - - // publish WSDL - try { - // Create publication infos - PublicationInfo info = new PublicationInfo(); - info.setOriginalWsdlFilename(sd.getWSDL().getName()); - - // Handle case where there is no publication directory set - File directory = sd.getPublicationDirectory(); - if (directory == null) { - // create a relative File using webservice-description/name - directory = new File(sd.getName()); - } - info.setPublicationDirectory(directory); - - PublishableDefinition publishableDefinition = new PublishableDefinition(); - publishableDefinition.setDefinition(sd.getWSDL().getDefinition()); - publishableDefinition.setPublicationInfo(info); - - // And finally attempt to publish the WSDL - wsdlManager.publish(publishableDefinition); - } catch (WSDLPublisherException e) { - throw new WSException("Cannot publish the WSDL for webservice-description '" - + sd.getName() + "'", e); - } - } - } - - /** - * Creates and adds all nested Handlers in the parent PortComponent. - * @param pcMBean parent PortComponent MBean - * @param pcd PortComponent Descriptor - */ - private void addHandlerMBeansToPortComponent(final PortComponent pcMBean, final PortComponentDesc pcd) { - - // iterates over the HandlerDesc list - for (Iterator i = pcd.getHandlers().iterator(); i.hasNext();) { - HandlerDesc hd = (HandlerDesc) i.next(); - - // creates the Handler MBean, and automatically - // add it to the PortComponent - Handler hMBean = createHandlerMBean(hd.getName(), pcMBean); - - hMBean.setClassname(hd.getHandlerClassName()); - hMBean.setName(hd.getName()); - // soap-headers - List sh = hd.getSOAPHeaders(); - // transform QName to String - String[] headers = new String[sh.size()]; - int index = 0; - for (Iterator j = sh.iterator(); j.hasNext();) { - // Stringify the QName - headers[index++] = ((QName) j.next()).toString(); - } - hMBean.setSoapHeaders(headers); - // soap-roles - List sr = hd.getSOAPRoles(); - hMBean.setSoapRoles((String[]) sr.toArray(new String[sr.size()])); - - hMBean.setInitParams(hd.getInitParams()); - - } - - } - - /** - * @param name Handler name - * @param parent parent PortComponent - * @return Returns the creates Handler MBean - */ - private static Handler createHandlerMBean(final String name, final PortComponent parent) { - Handler h = null; - try { - h = new Handler(WebServicesObjectName.handler(name, parent.getRealObjectName()).toString()); - } catch (MalformedObjectNameException e) { - // should never happen - logger.log(BasicLevel.DEBUG, "Should never happen", e); - } - // add to the parent - parent.addHandlerMBean(h); - return h; - } - - /** - * @param name PortComponent name - * @param parent parent Service - * @return Returns the created PortComponent MBean - */ - private static PortComponent createPortComponentMBean(final String name, final Service parent) { - PortComponent pc = null; - try { - pc = new PortComponent(WebServicesObjectName.portComponent(name, parent.getRealObjectName()).toString()); - } catch (MalformedObjectNameException e) { - // should never happen - logger.log(BasicLevel.DEBUG, "Should never happen", e); - } - return pc; - } - - /** - * @param name Service name - * @param parent parent WebServices - * @return Returns the created Service MBean - */ - private static Service createServiceMBean(final String name, final ObjectName parent) { - Service service = null; - try { - service = new Service(WebServicesObjectName.service(name, parent).toString()); - } catch (MalformedObjectNameException e) { - // should never happen - logger.log(BasicLevel.DEBUG, "Should never happen", e); - } - return service; - } - - /** - * Creates the endpointURL of a given PortComponentDesc. - * @param wsDD webservices.xml - * @param jpcd JaxRpcPortComponentDesc to analyze - * @param warURL URL of the war file containing the PortComponent - * @param contextRoot context-root of the webapp - * @return the endpointURL of a given PortComponentDesc. - * @throws WSException When URL cannot be constructed. - */ - private URL getEndpointURL(final WSDeploymentDesc wsDD, final JaxRpcPortComponentDesc jpcd, final URL warURL, final String contextRoot) - throws WSException { - - logger.log(BasicLevel.DEBUG, "get endpoint for JaxRpc Port Component"); - - return getEndpointURL(wsDD, jpcd.getWebDesc(), warURL, contextRoot, jpcd); - - } - - /** - * Creates the endpointURL of a given PortComponentDesc. - * @param wsDD webservices.xml - * @param spcd SSBPortComponentDesc to analyze - * @param warURL URL of the wabapp used to expose the Bean - * @param cl ejbjar classloader - * @param earCL application classloader - * @param contextRoot webapp context name - * @return the endpointURL of a given PortComponentDesc. - * @throws WSException When URL cannot be created - */ - private URL getEndpointURL(final WSDeploymentDesc wsDD, final SSBPortComponentDesc spcd, final URL warURL, final ClassLoader cl, - final ClassLoader earCL, final String contextRoot) throws WSException { - - logger.log(BasicLevel.DEBUG, "get endpoint for StatelessSessionBean Port Component"); - - WebContainerDeploymentDesc webDD = null; - - try { - webDD = WebManagerWrapper.getDeploymentDesc(warURL, cl, earCL); - } catch (WebContainerDeploymentDescException e) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.getEndpointURL.webDDException", warURL.getFile()); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, e); - } - - return getEndpointURL(wsDD, webDD, warURL, contextRoot, spcd); - - } - - /** - * Returns the URL used to access the endpoint. - * @param wsDD webservices.xml - * @param webDD the WebContainer DD of the servlet - * @param warURL the url of the war containing the servlet dispatching the - * SOAP request to the servant. - * @param warContextRoot the application defined context-root for the webapp - * (can be null). - * @param pcd PortComponentDesc Port descriptor - * @return the URL used to access the endpoint. - * @throws WSException When cannot create the endpoint URL. - */ - private URL getEndpointURL(final WSDeploymentDesc wsDD, final WebContainerDeploymentDesc webDD, final URL warURL, - final String warContextRoot, final PortComponentDesc pcd) throws WSException { - - // Resolve : - // - hostname - // - http/https port - // Priority order : 1. the ones specified in jonas-web.xml - // 2. default web container values (if any) - String servletName = pcd.getSibLink(); - String pcName = pcd.getQName().getLocalPart(); - - logger.log(BasicLevel.DEBUG, "SOAP Servlet name '" + servletName + "'"); - - String hostname = webDD.getHost(); - String port = webDD.getPort(); - String scheme = "http"; // default scheme - String contextRoot = null; - String mapping = null; - - if (wsDD.getContextRoot() != null && (pcd instanceof SSBPortComponentDesc)) { - contextRoot = wsDD.getContextRoot(); - } else { - contextRoot = getContextRoot(warContextRoot, webDD, warURL); - } - - boolean needPortName = true; - if (pcd.getEndpointURI() != null) { - mapping = pcd.getEndpointURI(); - needPortName = false; - } else { - mapping = getServletMapping(servletName, webDD); - } - - String prefix = endpointURLPrefix; - - // if the instance does not have a specified url-prefix - // we ask the server "environment" for hostname, port, ... - if (endpointURLPrefix == null || endpointURLPrefix.equals("")) { - // get default host value - if (hostname == null) { - // get hostname - try { - hostname = webService.getDefaultHost(); - } catch (JWebContainerServiceException e) { - String err = i18n - .getMessage("AbsWebServicesServiceImpl.getEndpointURL.noDefaultHost", warURL.getFile()); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, e); - } - } - - // get default port and scheme value - if (port == null) { - // get Http informations - try { - port = webService.getDefaultHttpPort(); - scheme = "http"; - } catch (JWebContainerServiceException e) { - // Http Fails - // Try Https informations - try { - port = webService.getDefaultHttpsPort(); - scheme = "https"; - } catch (JWebContainerServiceException e2) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.getEndpointURL.noDefaultHTTPPort", warURL - .getFile()); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, e2); - } - } - } - - // construct URL - if (port.equals("80")) { - port = ""; - } else { - port = ":" + port; - } - - prefix = scheme + "://" + hostname + port; - } - - String url = null; - if (needPortName) { - String encodedPortName = null; - try { - encodedPortName = URLEncoder.encode(pcName, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // should never occurs since utf-8 is mandatory on all JVM - encodedPortName = pcName; - } - url = prefix + "/" + contextRoot + "/" + mapping + "/" + encodedPortName; - } else { - url = prefix + "/" + contextRoot + mapping; - } - - URL endpoint = null; - - try { - endpoint = new URL(url); - } catch (MalformedURLException mue) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.getEndpointURL.endpointURLError", pcName, url); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err, mue); - } - - if (logger.isLoggable(BasicLevel.DEBUG)) { - logger.log(BasicLevel.DEBUG, "Constructed URL for '" + pcName + "' : '" + endpoint + "'"); - } - - return endpoint; - } - - /** - * Returns the contextRoot used for webapp access. - * @param ctxRoot The application specified context-root ("" if not). - * @param webDD The web DeploymentDesc of the dispatching webapp. - * @param warURL url of the webapp file. - * @return The contextRoot used for webapp access. - */ - private static String getContextRoot(final String ctxRoot, final WebContainerDeploymentDesc webDD, final URL warURL) { - // Set the right context root for the web application, the priority is - // the following : - // 1 - context-root of application.xml - // 2 - context-root of jonas-web.xml - // 3 - context-root is the name of the file without .war. - String contextRoot = null; - - if ("".equals(ctxRoot)) { - String cRoot = webDD.getContextRoot(); - - if (cRoot == null) { - String file = new File(warURL.getFile()).getName(); - - if (file.toLowerCase().endsWith(".war")) { - contextRoot = file.substring(0, file.length() - ".war".length()); - } else { - //It's a directory which is deployed - contextRoot = file.substring(0, file.length()); - } - } else { - contextRoot = cRoot; - } - } else { - contextRoot = ctxRoot; - } - - return contextRoot; - } - - /** - * Stops the JAX-RPC service. - * @throws ServiceException If the service stop fails - */ - @Override - public void doStop() throws ServiceException { - if (jmxService != null) { - // Unregister JAXRPCService MBean - try { - jmxService.unregisterMBean(JonasObjectName.jaxrpcService(getDomainName())); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Cannot unregister MBean for JAX-RPC service", e); - } - } - } - - /** - * Starts the JAX-RPC service. - * @throws ServiceException If the service startup fails - */ - @Override - public void doStart() throws ServiceException { - WebServicesObjectName.setDomain(getDomainName()); - - // Load the Descriptors - jmxService.loadDescriptors(JAXRPCService.class.getPackage().getName() + ".mbean", JAXRPCService.class.getClassLoader()); - - // Register JAXRPCService MBean - try { - jmxService.registerMBean(this, JonasObjectName.jaxrpcService(getDomainName())); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Cannot register MBean for JAX-RPC service", e); - } - } - - /** - * Return the unique url servlet mapping. - * - * @param servlet - * the servlet name. - * @param webDD - * the web DeploymentDesc where mappings are stored. - * @return the unique url servlet mapping. - * @throws WSException - * when multiple (or 0) mappings are found. - */ - private String getServletMapping(final String servlet, final WebContainerDeploymentDesc webDD) throws WSException { - - List mappings = webDD.getServletMappings(servlet); - - logger.log(BasicLevel.DEBUG, "mapping : " + mappings); - - if (mappings == null) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.getServletMapping.noMapping", servlet); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err); - } - - if (mappings.size() != 1) { - String err = i18n.getMessage("AbsWebServicesServiceImpl.getServletMapping.1mappingOnly", servlet); - logger.log(BasicLevel.ERROR, err); - throw new WSException(err); - } - - String mapping = (String) mappings.get(0); - - // keep only the first part of the mapping : - // /services/* becomes services - StringTokenizer st = new StringTokenizer(mapping, "/"); - mapping = st.nextToken(); - - return mapping; - - } - - /** - * Remove WebServices descriptors associated to the given ClassLoader - * @param cl key ClassLoader - */ - public void removeCache(final ClassLoader cl) { - WSManagerWrapper.removeCache(cl); - removeDeploymentInfoStack(cl); - } - - /** - * @return Returns the i18n. - */ - protected static I18n getI18n() { - return i18n; - } - - /** - * @return Returns the logger. - */ - protected static Logger getLogger() { - return logger; - } - - /** - * @see org.ow2.jonas.ws.jaxrpc.IJAXRPCService#completeWSDeployment(javax.naming.Context) - */ - public void completeWSDeployment(final Context ctx) throws WSException { - /** - * 1. Get current deployer ClassLoader - * 2. Get associated Stack - * 3. For each DeployInfo element from the Stack - * a. Iterate through its ServiceDesc - * - create ServletEndpoints instance - * - fill it with PortComponentDesc info - * b. Bind ServletEndpoints instance - */ - ClassLoader cl = null; - ObjectName parent = null; - Boolean isInEar = Boolean.FALSE; - try { - cl = (ClassLoader) ctx.lookup(IJAXRPCService.CLASSLOADER_CTX_PARAM); - parent = (ObjectName) ctx.lookup(IJAXRPCService.PARENT_OBJECTNAME_CTX_PARAM); - isInEar = (Boolean) ctx.lookup(IJAXRPCService.ISINEAR_CTX_PARAM); - } catch (NamingException ne) { - throw new WSException("Cannot retrieve '" + IJAXRPCService.CLASSLOADER_CTX_PARAM + "' from given Context", ne); - } - - Stack s = getDeploymentInfoStack(cl); - - while ((s != null) && (!s.empty())) { - - WSDeployInfo di = (WSDeployInfo) s.pop(); - URL warURL = di.getWarURL(); - WSDeploymentDesc wsdd = di.getDescriptor(); - ObjectName parentON = parent; - - if (isInEar.booleanValue()) { - parentON = getParentModuleObjectName(parent, wsdd); - } - - // Store the root webservices MBeans - List webservices = new ArrayList(); - webservicesMBeans.put(warURL, webservices); - - ClassLoader web = webService.getContextLinkedClassLoader(warURL); - Context c = naming.getComponentContext(web); - if (c == null) { - throw new WSException("Cannot get Component Context from ClassLoader : " + web); - } - - List sds = wsdd.getServiceDescs(); - - // for each WSDL contained in the component - for (Iterator i = sds.iterator(); i.hasNext();) { - ServiceDesc sd = (ServiceDesc) i.next(); - - // serviceMBean - Service serviceMBean = createServiceMBean(sd.getName(), parentON); - serviceMBean.setName(sd.getName()); - serviceMBean.setMappingFilename(sd.getMappingFilename()); - serviceMBean.setWsdlFilename(sd.getWsdlFilename()); - - // add the MBeans to the registration list - webservices.add(serviceMBean); - - // get the endpoint URL for each port-component - // update the WSDL Definition - for (Iterator pc = sd.getPortComponents().iterator(); pc.hasNext();) { - PortComponentDesc pcd = (PortComponentDesc) pc.next(); - try { - c.rebind("comp/jonas/" + pcd.getSibLink() + "/dd", sd); - } catch (NamingException ne) { - throw new WSException("Cannot bind ServiceDesc instance for servlet '" + sd.getName() - + "'", ne); - } - - // Filing up MBeans - PortComponent pcMBean = createPortComponentMBean(pcd.getName(), serviceMBean); - pcMBean.setEndpoint(pcd.getEndpointURL().toExternalForm()); - pcMBean.setName(pcd.getName()); - pcMBean.setServiceEndpointInterface(pcd.getServiceEndpointInterface().getName()); - pcMBean.setWsdlPort(pcd.getQName().toString()); - - MBeanServer mbeanServer = jmxService.getJmxServer(); - if (pcd.hasBeanImpl()) { - // first, we must find the StatelessSessionBean MBean - ObjectName ssbSearch = WebServicesObjectName.getStatelessSessionBeanQuery(parentON, pcd.getSibLink()); - Iterator it = mbeanServer.queryNames(ssbSearch, null).iterator(); - - // should have only 1 element - if (it.hasNext()) { - ObjectName on = (ObjectName) it.next(); - pcMBean.setImplementationBean(on.toString()); - serviceMBean.addPortComponentMBean(pcMBean); - } else { - logger.log(BasicLevel.WARN, "Cannot find the MBean for Stateless '" + pcd.getSibLink() + "'"); - } - } else { - // first, we must find the Servlet MBean - ObjectName sSearch = WebServicesObjectName.getServletQuery(parentON, pcd.getSibLink()); - Iterator it = mbeanServer.queryNames(sSearch, null).iterator(); - - // should have only 1 element - if (it.hasNext()) { - ObjectName on = (ObjectName) it.next(); - pcMBean.setImplementationBean(on.toString()); - serviceMBean.addPortComponentMBean(pcMBean); - } else { - logger.log(BasicLevel.WARN, "Cannot find the MBean for Servlet '" + pcd.getSibLink() + "'"); - } - } - - addHandlerMBeansToPortComponent(pcMBean, pcd); - - // WSDL URL - // The same WSDL is returned for each endpoint - serviceMBean.setWsdlURL(pcd.getEndpointURL().toExternalForm() + "?JWSDL"); - } - - } - - // register MBeans - for (Iterator l = webservices.iterator(); l.hasNext();) { - Service service = (Service) l.next(); - service.register(jmxService); - } - - } - } - - /** - * @param parent EAR ObjectName - * @param wsdd WebServices Deployment Descriptor - * @return Returns the parent Module ObjectName (WebModule or EJBModule) - */ - private ObjectName getParentModuleObjectName(final ObjectName parent, final WSDeploymentDesc wsdd) { - // EAR case : - // then the parent ObjectName is the EAR ObjectName - // So we need to find either the WebModule or EJBModule - // that is the real parent of WebServices - - // for this, we will take the first PortComponent and - // if this is a JaxRpcPCDesc, we will search for - // a WebModule ObjectName containing the servlet-link - // in the other case, we will search for an EJBModule - - ObjectName result = null; - ServiceDesc sd = (ServiceDesc) wsdd.getServiceDescs().iterator().next(); - PortComponentDesc pcd = (PortComponentDesc) sd.getPortComponents().iterator().next(); - String key = pcd.getSibLink(); - - MBeanServer mbeanServer = jmxService.getJmxServer(); - if (pcd.hasBeanImpl()) { - // search for an EJBModule - // first, we must find the StatelessSessionBean MBean - ObjectName ssbSearch = WebServicesObjectName.getStatelessSessionBeanQuery(parent, key); - Iterator it = mbeanServer.queryNames(ssbSearch, null).iterator(); - - // should have only 1 element - if (it.hasNext()) { - ObjectName ssb = (ObjectName) it.next(); - - /// Once we have this ObjectName, we can easily get his parent - // name via the EJBModule property :) - ObjectName emSearch = WebServicesObjectName.getEJBModule(parent, ssb.getKeyProperty("EJBModule")); - Iterator it1 = mbeanServer.queryNames(emSearch, null).iterator(); - - // We take the first result and we set it as parent ON - result = (ObjectName) it1.next(); - } else { - // onList is empty, so just keep the J2EEApplication as parent - logger.log(BasicLevel.WARN, "Cannot find EJBModule MBean containing SSB " + key); - result = parent; - } - } else { - // search for WebModule - // first, we must find the Servlet MBean - ObjectName sSearch = WebServicesObjectName.getServletQuery(parent, key); - Iterator it = mbeanServer.queryNames(sSearch, null).iterator(); - - // should have only 1 element - if (it.hasNext()) { - ObjectName servlet = (ObjectName) it.next(); - - // / Once we have this ObjectName, we can easily get his parent - // name via the WebModule property :) - ObjectName wmSearch = WebServicesObjectName.getWebModule(parent, servlet.getKeyProperty("WebModule")); - Iterator it1 = mbeanServer.queryNames(wmSearch, null).iterator(); - - // We take the first result and we set it as parent ON - result = (ObjectName) it1.next(); - } else { - // onList is empty, so just keep the J2EEApplication as parent - logger.log(BasicLevel.WARN, "Cannot find WebModule MBean containing Servlet " + key); - result = parent; - - } - } - return result; - } - - /** - * buildServiceRef from WS ref descriptor - * @param rd WS ref descriptor - */ - public Reference buildServiceRef(final IServiceRefDesc rd, final ClassLoader loader) throws NamingException { - Reference ref = null; - // get the JServiceFactory - JServiceFactory factory = createServiceFactory(); - try { - ref = factory.getServiceReference(rd, loader); - } catch (Exception e1) { - NamingException ne = new NamingException("Cannot get service Reference for " - + rd.getServiceRefName()); - ne.initCause(e1); - throw ne; - } - return ref; - } - - /** - * @param key - * ClassLoader - * @return Returns a Stack of DeployInfo associated to the given ClassLoader - */ - private Stack getDeploymentInfoStack(final ClassLoader key) { - return (Stack) deployments.get(key); - } - - /** - * Removes the Stack associated to the given ClassLoader - * @param key ClassLoader - */ - private void removeDeploymentInfoStack(final ClassLoader key) { - deployments.remove(key); - } - - /** - * Store information about a webservices descriptor. - * @author Guillaume Sauthier - */ - public class WSDeployInfo { - - /** - * URL of the webapp - */ - private URL war = null; - - /** - * WebServices descriptor - */ - private WSDeploymentDesc wsdd = null; - - /** - * Creates a new WSDeployInfo instance with given parameters - * @param war URL of the webapp - * @param wsdd WebServices descriptor - */ - public WSDeployInfo(final URL war, final WSDeploymentDesc wsdd) { - this.war = war; - this.wsdd = wsdd; - } - - /** - * @return Returns the Webapp URL - */ - public URL getWarURL() { - return war; - } - - /** - * @return Returns the WebServices Descriptor - */ - public WSDeploymentDesc getDescriptor() { - return wsdd; - } - } - - /** - * @see org.ow2.jonas.ws.jaxrpc.IJAXRPCService#undeployWebServices(javax.naming.Context) - */ - public void undeployWebServices(final Context ctx) throws WSException { - - URL url = null; - try { - url = (URL) ctx.lookup(IJAXRPCService.WARURL_CTX_PARAM); - } catch (NamingException e) { - // should never go here, but anyway ... - throw new IllegalArgumentException(e.getMessage()); - } - - List ws = (List) webservicesMBeans.get(url); - if (ws != null) { - // unregister if a webservices MBean has been found - for (Iterator l = ws.iterator(); l.hasNext();) { - Service service = (Service) l.next(); - service.unregister(jmxService); - } - } - - // TODO unpublish WSDL ? - } - - /** - * Automatic WSGen is enabled ? - * @return true if automatic WSGen needs to be Called. - */ - public boolean isAutoWsGenEngaged() { - return autoWSGen; - } - - /** - * Returns the URL prefixing all generated endpoint URL. - * @return The URL prefixing all generated endpoint URL - */ - public String getUrlPrefix() { - return this.endpointURLPrefix; - } - - /** - * Validating parser or not ? - * @return Validating parser or not - */ - public boolean isParsingWithValidation() { - return this.parsingWithValidation; - } - - /** - * @param webService the webService to set - */ - public void setWebService(final JWebContainerService webService) { - this.webService = webService; - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @param naming the naming to set - */ - public void setNaming(final JNamingManager naming) { - this.naming = naming; - } - - /** - * Bind the WSDLPublisherManager into this service - * @param wsdlManager the manager to use - */ - public void bindWSDLPublisherManager(final WSDLPublisherManager wsdlManager) { - this.wsdlManager = wsdlManager; - } - -} - diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCServiceMBean.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCServiceMBean.java deleted file mode 100644 index e5f9134e68..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/base/JAXRPCServiceMBean.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxrpc.base; - -/** - * MBean interface of the JAX-RPC service. - * @author Francois Fornaciari - */ -public interface JAXRPCServiceMBean { - /** - * Automatic WSGen is enabled ? - * @return True if automatic WSGen needs to be Called. - */ - boolean isAutoWsGenEngaged(); - - /** - * Returns the URL prefixing all generated endpoint URL. - * @return The URL prefixing all generated endpoint URL - */ - String getUrlPrefix(); - - /** - * Validating parser or not ? - * @return Validating parser or not - */ - public boolean isParsingWithValidation(); - - /** - * Engage Automatic WsGen ? - * @param engage the engage value - */ - void setAutoWsGenEngaged(final boolean engage); - - /** - * Sets the URL prefixing all generated endpoint URL. - * @param prefix URL prefixing all generated endpoint URL - */ - void setUrlPrefix(final String prefix); - - /** - * Use validating parser or not . - * @param validate validating parser or not - */ - void setParsingWithValidation(final boolean validate); -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/factory/JServiceFactory.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/factory/JServiceFactory.java deleted file mode 100644 index 6d9ef6ddcd..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/factory/JServiceFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.jaxrpc.factory; - -import javax.naming.Reference; -import javax.naming.spi.ObjectFactory; - -import org.ow2.jonas.deployment.api.IServiceRefDesc; -import org.ow2.jonas.ws.jaxrpc.WSException; - - -/** - * JServiceFactory is used to create the JaxRpc Service. - * It must be implemented for all different WebServices Engine. - * - * @author Xavier Delplanque - * @author Guillaume Sauthier - */ -public interface JServiceFactory extends ObjectFactory { - - /** - * Create the Reference associated with the service-ref (to be bound in JNDI). - * - * @param sr The service-ref description - * @param cl The classloader used to load Service class - * - * @return The Reference - * - * @throws WSException When Reference creation fails - */ - Reference getServiceReference(IServiceRefDesc sr, ClassLoader cl) throws WSException; - - -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/AbstractWebServiceMBean.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/AbstractWebServiceMBean.java deleted file mode 100644 index 5a9bdbe27f..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/AbstractWebServiceMBean.java +++ /dev/null @@ -1,133 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.mbean; - -import java.util.Iterator; -import java.util.List; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.management.javaee.J2EEManagedObject; -import org.ow2.jonas.lib.util.Log; - -/** - * Base Class for WebServices MBeans. It makes registration/unregistration - * of hierarchical MBeans very easy. Needs to be subclassed for each WebService MBean. - * - * @author Guillaume Sauthier - */ -public abstract class AbstractWebServiceMBean extends J2EEManagedObject { - - /** - * logger - */ - private static Logger log = Log.getLogger("org.ow2.jonas.ws"); - - /** - * ObjectName instance : avoid recreating an ObjectName each time we want one - */ - private ObjectName realObjectName = null; - - /** - * Constructor for default J2eeManagedObject - * @param objectName the MBean's ObjectName - */ - public AbstractWebServiceMBean(final String objectName) { - super(objectName); - try { - realObjectName = ObjectName.getInstance(objectName); - } catch (MalformedObjectNameException e) { - // Cannot go here - realObjectName = null; - } - } - - /** - * Registers the MBean (and its childs) in the specified MBeanServer - * @param jmx reference on the jmx service which allows registering of MBeans - */ - public void register(final JmxService jmx) { - - try { - jmx.registerModelMBean(this, realObjectName); - } catch (Exception e) { - // should never goes here - e.printStackTrace(); - } - - // register "childs" - List childs = getChildsMBeans(); - if (childs != null) { - for (Iterator i = childs.iterator(); i.hasNext();) { - AbstractWebServiceMBean child = (AbstractWebServiceMBean) i.next(); - child.register(jmx); - } - } - } - - /** - * @return Returns the MBean type (as used in mbean-descriptor.xml) - */ - protected abstract String getMBeanType(); - - /** - * Unregisters the MBean (and its childs) from the specified MBeanServer - * @param jmx reference on the jmx service which allows unregistering of MBeans - */ - public void unregister(final JmxService jmx) { - // unregister MBean - try { - jmx.unregisterModelMBean(ObjectName.getInstance(getObjectName())); - } catch (Exception e) { - // nothing to do, we simply continue the unregistering process - log.log(BasicLevel.DEBUG, "Should never goes here", e); - } - - // unregister "childs" - List childs = getChildsMBeans(); - if (childs != null) { - for (Iterator i = childs.iterator(); i.hasNext();) { - AbstractWebServiceMBean child = (AbstractWebServiceMBean) i.next(); - child.unregister(jmx); - } - } - } - - /** - * @return Returns the Child List - */ - protected abstract List getChildsMBeans(); - - /** - * @return Returns the ObjectName instance - */ - public ObjectName getRealObjectName() { - return this.realObjectName; - } -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Handler.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Handler.java deleted file mode 100644 index 62d472ef33..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Handler.java +++ /dev/null @@ -1,158 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.mbean; - -import java.util.List; -import java.util.Properties; - -/** - * A Handler MBean represents a - * handler element in webservices.xml - * - * @author Guillaume Sauthier - */ -public class Handler extends AbstractWebServiceMBean { - - /** - * Handler name - */ - private String name = null; - - /** - * Handler classname - */ - private String classname = null; - - /** - * Properties used to init the handler - */ - private Properties initParams = new Properties(); - - /** - * list of soap:header the handler will access - */ - private String[] soapHeaders = null; - - /** - * list of soap-roles under which the handler acts - */ - private String[] soapRoles = null; - - /** - * Handler constructor - * @param objectName Handler ObjectName - */ - public Handler(final String objectName) { - super(objectName); - } - - /** - * @return Returns the classname. - */ - public String getClassname() { - return classname; - } - - /** - * @param classname The classname to set. - */ - public void setClassname(final String classname) { - this.classname = classname; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the initParams. - */ - public Properties getInitParams() { - return initParams; - } - - /** - * @param initParams The initParams to set. - */ - public void setInitParams(final Properties initParams) { - this.initParams = initParams; - } - - /** - * @return Returns the soapHeaders. - */ - public String[] getSoapHeaders() { - return soapHeaders; - } - - /** - * @return Returns the soapRoles. - */ - public String[] getSoapRoles() { - return soapRoles; - } - - /** - * @param soapHeaders The soapHeaders to set. - */ - public void setSoapHeaders(final String[] soapHeaders) { - this.soapHeaders = soapHeaders; - } - - /** - * @param soapRoles The soapRoles to set. - */ - public void setSoapRoles(final String[] soapRoles) { - this.soapRoles = soapRoles; - } - - /** - * @return Returns the Handler MBean subtype - */ - @Override - protected String getMBeanType() { - return WebServicesObjectName.HANDLER_TYPE; - } - - /** - * @return Returns the childs MBeans (if any) - */ - @Override - protected List getChildsMBeans() { - // Handlers are in the bottom of the Chain, no childs - return null; - } - -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/PortComponent.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/PortComponent.java deleted file mode 100644 index 7bc7a00153..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/PortComponent.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.mbean; - -import java.util.ArrayList; -import java.util.List; - -/** - * A PortComponent represents a port-component - * in webservices.xml. - * - * @author Guillaume Sauthier - */ -public class PortComponent extends AbstractWebServiceMBean { - - /** - * PortComponent name - */ - private String name = null; - - /** - * wsdl:port QName - */ - private String wsdlPort = null; - - /** - * ssei fully qualified classname - */ - private String serviceEndpointInterface = null; - - /** - * Implementation Bean's ObjectName - */ - private String implementationBeanOName = null; - - /** - * Handler list (childs) - */ - private List handlers = new ArrayList(); - - /** - * Handler's ObjectName list - */ - private List handlerONames = new ArrayList(); - - /** - * Endpoint URL : where the PortComponent can be accessed - */ - private String endpoint = null; - - /** - * PortComponent Constructor - * @param objectName PortComponent's ObjectName - */ - public PortComponent(final String objectName) { - super(objectName); - } - - /** - * @return Returns the endpoint. - */ - public String getEndpoint() { - return endpoint; - } - - /** - * @param endpoint The endpoint to set. - */ - public void setEndpoint(final String endpoint) { - this.endpoint = endpoint; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the serviceEndpointInterface. - */ - public String getServiceEndpointInterface() { - return serviceEndpointInterface; - } - - /** - * @param serviceEndpointInterface The serviceEndpointInterface to set. - */ - public void setServiceEndpointInterface(final String serviceEndpointInterface) { - this.serviceEndpointInterface = serviceEndpointInterface; - } - - /** - * @return Returns the wsdlPort. - */ - public String getWsdlPort() { - return wsdlPort; - } - - /** - * @param wsdlPort The wsdlPort to set. - */ - public void setWsdlPort(final String wsdlPort) { - this.wsdlPort = wsdlPort; - } - - /** - * @return Returns the handlers. - */ - public List getHandlersMBean() { - return handlers; - } - - /** - * @return Returns the handlers. - */ - public String[] getHandlers() { - return (String[]) handlerONames.toArray(new String[handlerONames.size()]); - } - - /** - * Add a handler - * @param h Handler MBean - */ - public void addHandlerMBean(final Handler h) { - handlers.add(h); - handlerONames.add(h.getObjectName()); - } - - /** - * @return Returns the implementationBeanOName. - */ - public String getImplementationBean() { - return implementationBeanOName; - } - - /** - * @param implementationBean The implementationBeanOName to set. - */ - public void setImplementationBean(final String implementationBean) { - this.implementationBeanOName = implementationBean; - } - - /** - * @return Returns the PortComponent MBean subtype - */ - @Override - protected String getMBeanType() { - return WebServicesObjectName.PORTCOMPONENT_TYPE; - } - - /** - * @return Returns the childs MBeans (if any) - */ - @Override - protected List getChildsMBeans() { - return handlers; - } - - -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Service.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Service.java deleted file mode 100644 index 2f89d5afe2..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/Service.java +++ /dev/null @@ -1,171 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.mbean; - -import java.util.ArrayList; -import java.util.List; - -/** - * A WebService MBean represents a webservice-description - * in webservices.xml. - * - * @author Guillaume Sauthier - */ -public class Service extends AbstractWebServiceMBean { - - /** - * Service's name - */ - private String name = null; - - /** - * Published WSDL URL - */ - private String wsdlURL = null; - - /** - * JAX-RPC mapping file name - */ - private String mappingFilename = null; - - /** - * WSDL file name - */ - private String wsdlFilename = null; - - /** - * PortComponent MBean list - */ - private List portComponents = new ArrayList(); - - /** - * PortComponent's ObjectName list - */ - private List portComponentONames = new ArrayList(); - - /** - * Service Constructor - * @param objectName Service's ObjectName - */ - public Service(final String objectName) { - super(objectName); - } - - /** - * @return Returns the mappingFile. - */ - public String getMappingFilename() { - return mappingFilename; - } - - /** - * @param mappingFile The mappingFile to set. - */ - public void setMappingFilename(final String mappingFile) { - this.mappingFilename = mappingFile; - } - - /** - * @return Returns the wsdlFilename. - */ - public String getWsdlFilename() { - return wsdlFilename; - } - - /** - * @param wsdlFilename The wsdlFilename to set. - */ - public void setWsdlFilename(final String wsdlFilename) { - this.wsdlFilename = wsdlFilename; - } - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the wsdlURL. - */ - public String getWsdlURL() { - return wsdlURL; - } - - /** - * @param wsdlURL The wsdlURL to set. - */ - public void setWsdlURL(final String wsdlURL) { - this.wsdlURL = wsdlURL; - } - - /** - * @return Returns the portComponents MBean. - */ - public List getPortComponentsMBean() { - return portComponents; - } - - /** - * @return Returns the portComponentONames. - */ - public String[] getPortComponents() { - return (String[]) portComponentONames.toArray(new String[portComponentONames.size()]); - } - - /** - * Add a portComponent - * @param pc PortComponent MBean - */ - public void addPortComponentMBean(final PortComponent pc) { - portComponents.add(pc); - portComponentONames.add(pc.getObjectName()); - } - - /** - * @return Returns the Service MBean subtype - */ - @Override - protected String getMBeanType() { - return WebServicesObjectName.WEBSERVICE_TYPE; - } - - /** - * @return Returns the childs MBeans (if any) - */ - @Override - protected List getChildsMBeans() { - return portComponents; - } - -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/WebServicesObjectName.java b/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/WebServicesObjectName.java deleted file mode 100644 index 0f91090ce0..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/java/org/ow2/jonas/ws/jaxrpc/mbean/WebServicesObjectName.java +++ /dev/null @@ -1,300 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxrpc.mbean; - -import java.util.Hashtable; -import java.util.Iterator; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - - -/** - * ToolKit for WebServices Mbeans. It Helps to create ObjectNames for the - * WebServices MBeans, simplify MBeans queries, ... - * - * @author Guillaume Sauthier - */ -public class WebServicesObjectName { - - /** - * WebService type property - */ - public static final String WEBSERVICE_TYPE = "WebService"; - - /** - * WebServicePortComponent type property - */ - public static final String PORTCOMPONENT_TYPE = "WebServicePortComponent"; - - /** - * WebServiceHandler type property - */ - public static final String HANDLER_TYPE = "WebServiceHandler"; - - /** - * j2eeType for EJB modules - */ - public static final String EJBMODULE = "EJBModule"; - - /** - * j2eeType for Web modules - */ - public static final String WEBMODULE = "WebModule"; - - /** - * j2eeType for ear - */ - public static final String J2EEAPPLICATION = "J2EEApplication"; - - /** - * j2eeType for server instance - */ - public static final String J2EESERVER = "J2EEServer"; - - /** - * domain name - */ - private static String domain = null; - - /** - * Default private Constructor for tool class - */ - private WebServicesObjectName() { - } - - /** - * @return Returns the domain name of the JOnAS server. - * - * TODO refactor this out (duplicated code from J2eeObjectName) - */ - private static String getDomain() { - return domain; - } - - /** - * Sets the domain name of the JOnAS server. - * @param myDomain domain name - */ - public static void setDomain(final String myDomain) { - domain = myDomain; - } - - /** - * @param name - * base ObjectName - * @return Returns a String that contains "inherited" properties from - * parent's ObjectName - */ - private static String getInheritedPropertiesAsString(final ObjectName name) { - Hashtable table = (Hashtable) name.getKeyPropertyList().clone(); - // we remove some attributes from the ObjectName - table.remove("j2eeType"); - table.remove("type"); - table.remove("subtype"); - table.remove("name"); - StringBuffer sb = new StringBuffer(); - for (Iterator i = table.keySet().iterator(); i.hasNext();) { - String key = (String) i.next(); - sb.append(key + "=" + table.get(key) + ","); - } - if (sb.length() > 1) { - // remove the trailing comma - sb.setLength(sb.length() - 1); - } - return sb.toString(); - } - - /** - * @return ObjectName for Service - * @param name - * Service id - * @param parent - * parent name - * @exception MalformedObjectNameException - * Could not create ObjectName with the given String - */ - public static ObjectName service(final String name, final ObjectName parent) - throws MalformedObjectNameException { - String parentModule = ""; - if (parent.getKeyProperty("j2eeType").equals(EJBMODULE)) { - parentModule = EJBMODULE + "=" - + parent.getKeyProperty("name"); - } else { - parentModule = WEBMODULE + "=" - + parent.getKeyProperty("name"); - } - return ObjectName.getInstance(getDomain() - + ":type=WebService,name=" + name + "," + parentModule + "," - + getInheritedPropertiesAsString(parent)); - } - - /** - * @return ObjectName for PortComponent - * @param name - * PortComponent id - * @param parent - * parent name - * @exception MalformedObjectNameException - * Could not create ObjectName with the given String - */ - public static ObjectName portComponent(final String name, final ObjectName parent) - throws MalformedObjectNameException { - String parentModule = ""; - if (parent.getKeyProperty("type").equals(WEBSERVICE_TYPE)) { - parentModule = WEBSERVICE_TYPE + "=" - + parent.getKeyProperty("name"); - } - return ObjectName.getInstance(getDomain() - + ":type=" + PORTCOMPONENT_TYPE + ",name=" + name + "," - + parentModule + "," + getInheritedPropertiesAsString(parent)); - } - - /** - * @return Returns the ObjectName for PortComponent - * @param name PortComponent id - * @param parent parent name - * @exception MalformedObjectNameException - * Could not create ObjectName with the given String - */ - public static ObjectName handler(final String name, final ObjectName parent) - throws MalformedObjectNameException { - String parentModule = ""; - if (parent.getKeyProperty("type").equals(PORTCOMPONENT_TYPE)) { - parentModule = PORTCOMPONENT_TYPE + "=" - + parent.getKeyProperty("name"); - } - return ObjectName.getInstance(getDomain() - + ":type=" + HANDLER_TYPE + ",name=" + name + "," - + parentModule + "," + getInheritedPropertiesAsString(parent)); - } - - /** - * @param parent parent ObjectName (J2EEApplication or J2EEModule subtype) - * @param ejbName SSB name - * @return Returns a Query ObjectName used to find a StatelessSessionBean - * coming from a particular J2EEApplication/J2EEModule - */ - public static ObjectName getStatelessSessionBeanQuery(final ObjectName parent, - final String ejbName) { - try { - StringBuffer sb = new StringBuffer(parent.getDomain()); - sb.append(":j2eeType=StatelessSessionBean"); - sb.append(",name="); - sb.append(ejbName); - sb.append(",J2EEApplication="); - if (parent.getKeyProperty("J2EEApplication") != null) { - // parent MBean maybe is not a J2EEApplication, but an EJBModule - sb.append(parent.getKeyProperty("J2EEApplication")); - } else { - sb.append(parent.getKeyProperty("name")); - } - sb.append(",J2EEServer="); - sb.append(parent.getKeyProperty("J2EEServer")); - sb.append(",*"); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param parent parent J2EEApplication's ObjectName - * @param servletName servlet name - * @return Returns a Query ObjectName used to find a Servlet - * coming from a particular J2EEApplication - */ - public static ObjectName getServletQuery(final ObjectName parent, final String servletName) { - try { - StringBuffer sb = new StringBuffer(parent.getDomain()); - sb.append(":j2eeType=Servlet"); - sb.append(",name="); - sb.append(servletName); - sb.append(",J2EEApplication="); - if (parent.getKeyProperty("J2EEApplication") != null) { - // parent MBean maybe is not a J2EEApplication, but an WebModule - sb.append(parent.getKeyProperty("J2EEApplication")); - } else { - sb.append(parent.getKeyProperty("name")); - } - sb.append(",J2EEServer="); - sb.append(parent.getKeyProperty("J2EEServer")); - sb.append(",*"); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param ear parent J2EEApplication's ObjectName - * @param key EJBModule name - * @return Returns a Query ObjectName used to find an EJBModule - * coming from a particular J2EEApplication - */ - public static ObjectName getEJBModule(final ObjectName ear, final String key) { - try { - StringBuffer sb = new StringBuffer(ear.getDomain()); - sb.append(":j2eeType=EJBModule"); - sb.append(",name="); - sb.append(key); - sb.append(",J2EEApplication="); - sb.append(ear.getKeyProperty("name")); - sb.append(",J2EEServer="); - sb.append(ear.getKeyProperty("J2EEServer")); - sb.append(",*"); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - /** - * @param ear parent J2EEApplication's ObjectName - * @param key WebModule name - * @return Returns a Query ObjectName used to find an WebModule - * coming from a particular J2EEApplication - */ - public static ObjectName getWebModule(final ObjectName ear, final String key) { - try { - StringBuffer sb = new StringBuffer(ear.getDomain()); - sb.append(":j2eeType=WebModule"); - sb.append(",name="); - sb.append(key); - sb.append(",J2EEApplication="); - sb.append(ear.getKeyProperty("name")); - sb.append(",J2EEServer="); - sb.append(ear.getKeyProperty("J2EEServer")); - sb.append(",*"); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } -} diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen b/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen deleted file mode 100644 index 0666f0b281..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Check JONAS_ROOT is set. -if [ ! -d $JONAS_ROOT/deploy ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JAVA_OPTS="$JAVA_OPTS \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.security.manager \ - -Djava.security.policy=$JONAS_BASE/conf/java.policy \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ -" - -# add /client-bootstrap.jar to the classpath for the bootstrap class -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/client.jar - -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.wsgen.WsGen "$@" diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen.bat b/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen.bat deleted file mode 100755 index 60712346cd..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/bin/WsGen.bat +++ /dev/null @@ -1,53 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2008 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Guillaume Sauthier -Rem Contributor(s): -Rem -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -Rem Check environment variables: -if ["%JONAS_ROOT%"]==[""] Goto SetRoot - -call "%JONAS_ROOT%\bin\setenv.bat" -echo JONAS_BASE is set to %JONAS_BASE% - -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.root="%JONAS_ROOT%" -Set JAVA_OPTS=%JAVA_OPTS% -Djonas.base="%JONAS_BASE%" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.security.manager -Djava.security.policy="%JONAS_BASE%\conf\java.policy" -Set JAVA_OPTS=%JAVA_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_ROOT%\lib\client.jar - -%JAVA% -cp "%JONAS_CLASSPATH%" %JAVA_OPTS% org.ow2.jonas.client.boot.Bootstrap org.ow2.jonas.generators.wsgen.WsGen %1 %2 %3 %4 %5 %6 %7 %8 %9 -Goto End - -:SetRoot -@echo "JONAS_ROOT must be set" -Goto End - -:End - diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/conf/jonas-client.properties b/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/conf/jonas-client.properties deleted file mode 100644 index 8b65af934a..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/jonas-resources/conf/jonas-client.properties +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999 Bull S.A. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Guillaume Sauthier. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Set the JServiceFactory to use -jonas.service.ws.factory.class org.ow2.jonas.ws.axis.JAxisServiceFactory diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/META-INF/jonas-webservices-jaxrpc-core.bnd b/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/META-INF/jonas-webservices-jaxrpc-core.bnd deleted file mode 100644 index fef0d5fe12..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/META-INF/jonas-webservices-jaxrpc-core.bnd +++ /dev/null @@ -1,29 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Only export subpackages as jonas-services-api is exporting org.ow2.jonas.ws.jaxrpc -Export-Package org.ow2.jonas.ws.jaxrpc.base, \ - org.ow2.jonas.ws.jaxrpc.factory, \ - org.ow2.jonas.ws.jaxrpc.mbean - -Require-JOnAS-Services wsdl-publisher,web diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/base/I18n.properties b/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/base/I18n.properties deleted file mode 100644 index 2504fde909..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/base/I18n.properties +++ /dev/null @@ -1,22 +0,0 @@ -# $Id$ - -AbsWebServicesServiceImpl.doInit.noJProp=Error when trying to get WebServices configuration -AbsWebServicesServiceImpl.doInit.noHandlers=Must specify a minimum of 1 wsdl handler in ''{0}'' in jonas.properties - -AbsWebServicesServiceImpl.deployWebServices.noWeb=Cannot get the Web Container Service -AbsWebServicesServiceImpl.deployWebServices.ctxParamProblem=Error while getting parameter from context -AbsWebServicesServiceImpl.deployWebServices.wsddEx=Cannot read the deployment descriptors from ''{0}'' -AbsWebServicesServiceImpl.deployWebServices.bindError=Cannot bind information in Context ''{0}'' -AbsWebServicesServiceImpl.deployWebServices.ctxRootMappingMissing=EAR Case, warCtxRootMapping must be set in Context! -AbsWebServicesServiceImpl.deployWebServices.webappNotFound=WebApp ''{0}'' must be present in application -AbsWebServicesServiceImpl.deployWebServices.mue=Not a valid URL - -AbsWebServicesServiceImpl.doDeployWebServices.namingError=Error while getting parameter from context - -AbsWebServicesServiceImpl.getEndpointURL.webDDException=Error when Analyzing Web Deployment Descs for webapp ''{0}'' -AbsWebServicesServiceImpl.getEndpointURL.noDefaultHost=Cannot determine default host. You must add a tag in ''{0}'' jonas-web.xml -AbsWebServicesServiceImpl.getEndpointURL.noDefaultHTTPPort=Cannot determine default HTTP/HTTPS port. You must add a 'port' tag in ''{0}'' jonas-web.xml or configure ports in server.xml properly -AbsWebServicesServiceImpl.getEndpointURL.endpointURLError=Endpoint url for ''{0}'' is malformed : ''{1}'' - -AbsWebServicesServiceImpl.getServletMapping.1mappingOnly=Only 1 Url-Mapping can be specified for servlet ''{0}'' -AbsWebServicesServiceImpl.getServletMapping.noMapping=No url-mapping defined for servlet ''{0}'' diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/mbean/mbeans-descriptors.xml b/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/mbean/mbeans-descriptors.xml deleted file mode 100644 index a2a1c23c39..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/resources/org/ow2/jonas/ws/jaxrpc/mbean/mbeans-descriptors.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/jaxrpc/core/src/main/templates/jonas-jax-rpc.properties.template b/jonas/modules/services/webservices/jaxrpc/core/src/main/templates/jonas-jax-rpc.properties.template deleted file mode 100644 index e2edf21c46..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/core/src/main/templates/jonas-jax-rpc.properties.template +++ /dev/null @@ -1,20 +0,0 @@ -# -###################### JOnAS JAX-RPC service configuration -# -jonas.services jaxrpc -# Set the name of the implementation class of the jaxrpc service. -jonas.service.jaxrpc.class org.ow2.jonas.ws.axis.AxisService - -# Set the XML deployment descriptors parsing mode for the jaxrpc service (with or without validation). -jonas.service.jaxrpc.parsingwithvalidation true - -# Set the Generator to use with wsgen -jonas.service.jaxrpc.wsgen.generator.factory org.ow2.jonas.generators.wsgen.generator.ews.EWSGeneratorFactory - -# Set the prefix that will be used to compute URL endpoints for web services -# Example of prefix: http://www.mydomain.com:8888 -jonas.service.jaxrpc.url-prefix - -# Set automatic WsGen mode on/off -# If set to 'true', WsGen will automatically be applied to all deployed archives (EjbJars, Webapps, Applications) -jonas.service.jaxrpc.auto-wsgen.engaged true diff --git a/jonas/modules/services/webservices/jaxrpc/pom.xml b/jonas/modules/services/webservices/jaxrpc/pom.xml deleted file mode 100644 index a9c11a639b..0000000000 --- a/jonas/modules/services/webservices/jaxrpc/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices-jaxrpc - pom - JOnAS :: Services :: Web Services :: JAX-RPC - - core - ant - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/jaxws/core/pom.xml b/jonas/modules/services/webservices/jaxws/core/pom.xml deleted file mode 100644 index 8dd3f90bb1..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/pom.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - jonas-webservices-jaxws - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-jaxws-core - bundle - JOnAS :: Services :: Web Services :: JAX-WS :: Core - - - - org.apache.tomcat - servlet-api - provided - - - org.apache.geronimo.specs - geronimo-jaxws_2.1_spec - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.bundles - ow2-util-log - provided - - - org.ow2.bundles - ow2-util-annotation-processor - provided - - - org.ow2.bundles - ow2-util-ee-metadata-common-impl - provided - - - org.ow2.bundles - ow2-util-ee-builder-webservice - provided - - - org.ow2.easybeans - easybeans-api - provided - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - provided - - - - org.ow2.bundles - ow2-audit-report - provided - - - - - org.testng - testng - test - - - org.mockito - mockito-all - test - - - org.hamcrest - hamcrest-all - test - - - - - - - - maven-jar-plugin - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSService.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSService.java deleted file mode 100644 index 04a2d06dc2..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSService.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009-2011-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.base; - -import javax.management.ObjectName; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.ws.jaxws.IJAXWSService; -import org.ow2.jonas.ws.jaxws.base.audit.JaxwsClientAuditHandler; -import org.ow2.jonas.ws.jaxws.base.audit.JaxwsEndpointAuditHandler; -import org.ow2.jonas.ws.jaxws.base.audit.mbean.AuditHandlerAdapter; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Common abstract class for JAX-WS service implementations. - * @author Francois Fornaciari - */ -public abstract class JAXWSService extends AbsServiceImpl implements IJAXWSService, JAXWSServiceMBean { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JAXWSService.class); - - private static final String OBJECTNAME_BASE = ":type=Auditors,auditorType="; - - /** - * JMX Service reference. - */ - private JmxService jmxService = null; - private JaxwsClientAuditHandler clientHandler; - private JaxwsEndpointAuditHandler serverHandler; - - /** - * eventService to send events - */ - private IEventService eventService = null; - - /** - * Starts the JAX-WS service. - * - * @throws ServiceException - * If the service startup fails - */ - @Override - protected void doStart() throws ServiceException { - // Register JAXWSService MBean - try { - jmxService.registerMBean(this, JonasObjectName.jaxwsService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for JAX-WS service", e); - } - - // Load MBean descriptors for Handlers - jmxService.loadDescriptors(AuditHandlerAdapter.class.getPackage().getName(),AuditHandlerAdapter.class.getClassLoader()); - } - - /** - * Stops the JAX-WS service. - * @throws ServiceException - * If the service stop fails - */ - @Override - protected void doStop() throws ServiceException { - if (jmxService != null) { - // Unregister JAXWSService MBean - try { - jmxService.unregisterMBean(JonasObjectName.jaxwsService(getDomainName())); - } catch (Exception e) { - logger.debug("Cannot unregister MBean for JAX-WS service", e); - } - } - } - - /** - * @param jmxService - * the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } - - /** - * @return the jmxService - */ - protected JmxService getJmxService() { - return this.jmxService; - } - - /** - * @param eventService - * the eventService to set - */ - public void setEventService(IEventService eventService) { - this.eventService = eventService; - } - - public SOAPHandler getClientAuditHandler() { - if (clientHandler == null) { - clientHandler = new JaxwsClientAuditHandler(CurrentInvocationID.getInstance()); - try { - ObjectName name = new ObjectName(jmxService.getDomainName() + OBJECTNAME_BASE + "wsclient"); - jmxService.registerModelMBean(clientHandler, name); - } catch (Exception e) { - logger.debug("Cannot register MBean for JAX-WS Client Audit Handler", e); - } - } - return clientHandler; - } - - public SOAPHandler getEndpointAuditHandler() { - if (serverHandler == null) { - serverHandler = new JaxwsEndpointAuditHandler(CurrentInvocationID.getInstance(),eventService); - try { - ObjectName name = new ObjectName(jmxService.getDomainName() + OBJECTNAME_BASE+ "wsendpoint"); - jmxService.registerModelMBean(serverHandler, name); - } catch (Exception e) { - logger.debug("Cannot register MBean for JAX-WS Endpoint Audit Handler", e); - } - } - return serverHandler; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSServiceMBean.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSServiceMBean.java deleted file mode 100644 index 0e57445bab..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSServiceMBean.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.base; - -/** - * MBean interface of the JAX-WS service. - * @author Francois Fornaciari - */ -public interface JAXWSServiceMBean { - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesContainer.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesContainer.java deleted file mode 100644 index 83695c8e8c..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesContainer.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.base; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.PortIdentifier; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -public abstract class JAXWSWebservicesContainer implements IWebservicesContainer { - - /** - * Logger. - */ - private static final Log logger = LogFactory.getLog(JAXWSWebservicesContainer.class); - - /** - * This represents the WSDL Location [META-INF/wsdl/definition.wsdl]. - */ - private String name; - - /** - * The list of endpoints sharing the WSDL. - */ - private Map endpoints; - - /** - * Where do the user wants to publish the WSDL ? - */ - private String wsdlPublicationDirectory; - - /** - * Construct the group. - * @param name Shared WSDL Location - */ - public JAXWSWebservicesContainer(final String name) { - this.name = name; - endpoints = new HashMap(); - } - - /** - * Add a new endpoint in the group. - * @param endpoint newly added endpoint. - */ - public void addEndpoint(final T endpoint) { - endpoints.put(endpoint.getIdentifier(), endpoint); - } - - /** - * Remove an endpoint from the group. - * @param endpoint removed endpoint. - */ - public void removeEndpoint(final T endpoint) { - endpoints.remove(endpoint.getIdentifier()); - } - - /** - * Given a service/port pair, try to find a matching endpoint URL. - * @param identifier Port identifier - * @return an endpoint URL or null if no match was found. - */ - public String findUpdatedURL(final PortIdentifier identifier) { - - IWebServiceEndpoint matching = endpoints.get(identifier); - if (matching != null) { - return matching.getPortMetaData().getEndpointURL(); - } - return null; - } - - /** - * @return the name of this container (WSDL location) - */ - public String getName() { - return name; - } - - /** - * @return All the inner endpoints. - */ - public Collection getEndpoints() { - return endpoints.values(); - } - - /** - * Starts the container. - * Recursively starts inner endpoints. - */ - public void start() { - - logger.debug("Start WebservicesContainer[{0}]", name); - for (IWebServiceEndpoint endpoint : endpoints.values()) { - endpoint.start(); - } - } - - /** - * Stops the container. - * Recursively stops inner endpoints. - */ - public void stop() { - - logger.debug("Stop WebservicesContainer[{0}]", name); - for (IWebServiceEndpoint endpoint : endpoints.values()) { - endpoint.stop(); - } - } - - /** - * Set the WSDL publication directory for this WSDL. - * @param wsdlPublicationDirectory directory - */ - public void setWsdlPublicationDirectory(final String wsdlPublicationDirectory) { - this.wsdlPublicationDirectory = wsdlPublicationDirectory; - } - - /** - * @return the WSDL publication directory for this WSDL (may be null). - */ - public String getWsdlPublicationDirectory() { - return wsdlPublicationDirectory; - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesModule.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesModule.java deleted file mode 100644 index e01f1705c9..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/JAXWSWebservicesModule.java +++ /dev/null @@ -1,132 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.base; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.IWebservicesContainer; -import org.ow2.jonas.ws.jaxws.IWebservicesModule; - -/** - * The WebservicesModule represents an archive containing web services. - * - * @author Guillaume Sauthier - */ -public class JAXWSWebservicesModule> implements IWebservicesModule { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JAXWSWebservicesModule.class); - - - /** - * The archive name, or a unique archive identifier. - */ - private String name; - - /** - * All the WSContainers available in the archive. - */ - private Map containers; - - /** - * Build a new module. - * @param name identifier - */ - public JAXWSWebservicesModule(final String name) { - this.name = name; - containers = new HashMap(); - } - - /** - * Add the given container. - * @param container added container - */ - public void addContainer(final T container) { - containers.put(container.getName(), container); - } - - /** - * Remove a given container. - * @param container removed container - */ - public void removeContainer(final T container) { - containers.remove(container.getName()); - } - - - /** - * Find a container with the given name. - * @param name name of the container - * @return the container or null if none was found. - */ - public T findContainer(final String name) { - return containers.get(name); - } - - /** - * @return All the containers in this module - */ - public Collection getContainers() { - return containers.values(); - } - - - /** - * Starts the module. - * Recursively starts inner containers. - */ - public void start() { - logger.debug("Start WebservicesModule[{0}]", name); - for (IWebservicesContainer container : containers.values()) { - container.start(); - } - } - - /** - * Stop the module. - * Recursively stops inner containers. - */ - public void stop() { - logger.debug("Stop WebservicesModule[{0}]", name); - for (IWebservicesContainer container : containers.values()) { - container.stop(); - } - } - - /** - * @return the name of this module - */ - public String getName() { - return name; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/AbstractJaxwsAuditHandler.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/AbstractJaxwsAuditHandler.java deleted file mode 100644 index 55625d91e8..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/AbstractJaxwsAuditHandler.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.base.audit; - -import java.util.Set; - -import javax.management.MBeanException; -import javax.management.Notification; -import javax.management.modelmbean.ModelMBeanNotificationBroadcaster; -import javax.xml.namespace.QName; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -/** - * A {@code AbstractJaxwsAuditHandler} is ... - * - * @author Guillaume Sauthier - */ -public abstract class AbstractJaxwsAuditHandler implements SOAPHandler { - /** - * Notification sender. - */ - private ModelMBeanNotificationBroadcaster broadcaster = null; - - public void setBroadcaster(ModelMBeanNotificationBroadcaster broadcaster) { - this.broadcaster = broadcaster; - } - - public void sendNotification(Notification notification) throws MBeanException { - broadcaster.sendNotification(notification); - } - - public boolean isOutbound(MessageContext context) { - return (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); - } - - public boolean handleFault(SOAPMessageContext context) { - return true; - } - - public void close(MessageContext context) { - - } - - public Set getHeaders() { - return null; - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsClientAuditHandler.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsClientAuditHandler.java deleted file mode 100644 index 74a14d6d73..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsClientAuditHandler.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.base.audit; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; - -/** - * A {@code JaxwsAuditHandler} is ... - * - * @author Guillaume Sauthier - */ -public class JaxwsClientAuditHandler extends AbstractJaxwsAuditHandler { - - private ICurrentInvocationID current; - - public JaxwsClientAuditHandler(final ICurrentInvocationID current) { - this.current = current; - } - - public boolean handleMessage(final SOAPMessageContext context) { - - if (isOutbound(context)) { - // Request - // Need to add a new header in the outbound message that will store the token - - // Creates a new child ID - IAuditID old = current.newInvocation(); - IAuditID id = current.getAuditID(); - - // Place it in the HTTP Headers of the request - Map> headers = (Map>) context.get(MessageContext.HTTP_REQUEST_HEADERS); - if (headers != null) { - headers.put("Invocation-ID", Collections.singletonList(id.getID())); - } - - // Reset the current to the parent - current.setAuditID(old); - - } - // Nothing to do for inbound response (else) - - return true; - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsEndpointAuditHandler.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsEndpointAuditHandler.java deleted file mode 100644 index cfd37da888..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/JaxwsEndpointAuditHandler.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.base.audit; - -import java.util.concurrent.atomic.AtomicLong; - -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.JaxwsAuditReport; -import org.ow2.util.auditreport.impl.event.Event; -import org.ow2.util.event.api.IEventService; -import org.ow2.util.event.impl.EventDispatcher; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * A {@code JaxwsAuditHandler} is ... - * - * @author Guillaume Sauthier - */ -public class JaxwsEndpointAuditHandler extends AbstractJaxwsAuditHandler { - - public static final String REPORT_KEY = JaxwsEndpointAuditHandler.class.getName() + ".REPORT"; - - public static final String AUDIT_ID_KEY = JaxwsEndpointAuditHandler.class.getName() + ".AUDIT_ID"; - - public static final Log logger = LogFactory.getLog(JaxwsEndpointAuditHandler.class); - - private AtomicLong sequence = new AtomicLong(); - - private boolean detailed = false; - - private ICurrentInvocationID current; - - /** - * eventService to send events - */ - private IEventService eventService = null; - - public JaxwsEndpointAuditHandler(ICurrentInvocationID current) { - this(current,null); - } - - public JaxwsEndpointAuditHandler(ICurrentInvocationID current,IEventService eventService) { - this.current = current; - this.eventService=eventService; - } - - public boolean handleMessage(SOAPMessageContext context) { - - if (isOutbound(context)) { - // Response - // Close the report generation - JaxwsAuditReport report = (JaxwsAuditReport) context.get(REPORT_KEY); - if (report != null) { - - report.setEndProcessingTimestamp(System.nanoTime()); - - Event event = new Event(report); - - if(eventService != null){ - EventDispatcher d = (EventDispatcher) eventService.getDispatcher("JAXWS"); - if(d == null) { - d = new EventDispatcher(); - d.setNbWorkers(2); - d.start(); - eventService.registerDispatcher("JAXWS", d); - } - eventService.getDispatcher("JAXWS").dispatch(event); - } - // Restore the Audit ID in the thread. - // is equivalent to a current.pop() if it was existing - IAuditID old = (IAuditID) context.get(AUDIT_ID_KEY); - if (old != null) { - current.setAuditID(old); - } - } - - } else { // inbound - // Request - // Init the report generation - - IAuditID oldId = current.getAuditID(); - - if (oldId != null) { - - // Generate a new ID (will appear as a new node in the UI) - current.newInvocation(); - IAuditID id = current.getAuditID(); - - // If there is no ID set, just abort report generation - - JaxwsAuditReport report = new JaxwsAuditReport(); - report.setKeyID(id.getID()); - report.setRequestTimeStamp(System.currentTimeMillis()); - report.setStartProcessingTimestamp(System.nanoTime()); - - report.setServiceQName(context.get(MessageContext.WSDL_SERVICE).toString()); - report.setPortQName(context.get(MessageContext.WSDL_PORT).toString()); - report.setOperationQName(context.get(MessageContext.WSDL_OPERATION).toString()); - - report.setSoapRoles(context.getRoles()); - - // Store the report - context.put(REPORT_KEY, report); - - // Store the old ID - context.put(AUDIT_ID_KEY, oldId); - } - } - return true; - } - - public boolean isDetailed() { - return detailed; - } - - public void setDetailed(boolean detailed) { - this.detailed = detailed; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/mbean/AuditHandlerAdapter.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/mbean/AuditHandlerAdapter.java deleted file mode 100644 index c563f0b462..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/base/audit/mbean/AuditHandlerAdapter.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.base.audit.mbean; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.modelmbean.InvalidTargetObjectTypeException; - -import org.apache.commons.modeler.BaseModelMBean; -import org.ow2.jonas.ws.jaxws.base.audit.AbstractJaxwsAuditHandler; - -/** - * A {@code EndpointHandlerAdapter} is ... - * - * @author Guillaume Sauthier - */ -public class AuditHandlerAdapter extends BaseModelMBean { - - /** - * Create the mbean. - * @throws MBeanException if the super constructor fails. - */ - public AuditHandlerAdapter() throws MBeanException { - super(); - } - - /** - * @return the wrapped resource (managed object) - */ - public AbstractJaxwsAuditHandler getManagedComponent() { - try { - return (AbstractJaxwsAuditHandler) getManagedResource(); - } catch (InstanceNotFoundException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (InvalidTargetObjectTypeException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } catch (MBeanException e) { - throw new IllegalStateException("Cannot get the managed resource of the MBean", e); - } - } - - /** - * Calls some operation on the wrapped object. - * @param registrationDone if registration has been done or not - */ - @Override - public void postRegister(final Boolean registrationDone) { - getManagedComponent().setBroadcaster(this); - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/JAXWSWebServiceRefBuilder.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/JAXWSWebServiceRefBuilder.java deleted file mode 100644 index 41242ea0a7..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/JAXWSWebServiceRefBuilder.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.client; - - -import javax.naming.Reference; - -import org.ow2.jonas.ws.jaxws.client.factory.JAXWSWebServiceRefObjectFactory; -import org.ow2.util.ee.builder.webserviceref.WebServiceRefBuilder; - -/** - * The JAXWSWebServiceRefBuilder simply helps us to take some control on the client - * side during the lookup phase. - * - * @author Guillaume Sauthier - */ -public class JAXWSWebServiceRefBuilder extends WebServiceRefBuilder { - - /** - * Provides our own ObjectFactory. - * @param classname class to be constructed after lookup - * @return a JNDI Reference - */ - @Override - protected Reference createReference(final String classname) { - return new Reference(classname, JAXWSWebServiceRefObjectFactory.class.getName(), null); - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/factory/JAXWSWebServiceRefObjectFactory.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/factory/JAXWSWebServiceRefObjectFactory.java deleted file mode 100644 index ab075f5778..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/client/factory/JAXWSWebServiceRefObjectFactory.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.client.factory; - -import java.io.IOException; -import java.net.URL; - -import javax.xml.ws.Service; -import javax.xml.ws.WebServiceException; - -import org.ow2.jonas.ws.jaxws.handler.JOnASHandlerResolver; -import org.ow2.jonas.ws.jaxws.handler.builder.DescriptorHandlerChainBuilder; -import org.ow2.util.ee.builder.webserviceref.Constants; -import org.ow2.util.ee.builder.webserviceref.ReferenceHelper; -import org.ow2.util.ee.builder.webserviceref.factory.WebServiceRefObjectFactory; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; -import org.ow2.util.ee.metadata.common.impl.xml.parsing.HandlerChainsLoader; -import org.ow2.util.ee.metadata.common.impl.xml.parsing.ParsingException; -import org.ow2.util.ee.metadata.common.impl.xml.struct.HandlerChains; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * The JAXWSWebServiceRefObjectFactory is responsible to provide a handler - * Chain to the created Service (if required). - * - * @author Guillaume Sauthier - */ -public class JAXWSWebServiceRefObjectFactory extends WebServiceRefObjectFactory { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(JAXWSWebServiceRefObjectFactory.class); - - @Override - protected void processObjectInstance(final Service service, final ReferenceHelper reference) throws Exception { - - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - - // I've not used the IHandlerChains interface intentionally here - // This is done because the reference need to deserialize the HandlerChain structure - // For this, it needs a classloader, that it takes from the type parameter. - HandlerChains handlerChain = reference.extract(Constants.HANDLER_CHAIN_STRUCT.name(), HandlerChains.class); - - if (handlerChain != null) { - // OK, Provides a new HandlerResolver - JOnASHandlerResolver resolver = new JOnASHandlerResolver(service.getClass(), tccl); - resolver.setHandlerChainBuilder(new DescriptorHandlerChainBuilder(handlerChain)); - - service.setHandlerResolver(resolver); - } else { - - // Try to see if the service is associated to a @HandlerChain - String file = reference.extract(Constants.HANDLER_CHAIN_FILE.name()); - String declaringClass = reference.extract(Constants.DECLARING_CLASS.name()); - - if ((file != null) && (declaringClass != null)) { - // The annotation @HandlerChain is present - - URL location; - // First try if this is an absolute URL - try { - location = new URL(file); - } catch (IOException mue) { - // OK, this is not an absolute URL - // Try to resolve the resource as a Class resource - Class supportingClass = Class.forName(declaringClass, true, tccl); - logger.debug("@HandlerChain declaring class -> ''{0}''", supportingClass); - location = supportingClass.getResource(file); - } - - logger.debug("@HandlerChain.file -> ''{0}''", location); - - IHandlerChains handlerChainsElement; - try { - handlerChainsElement = HandlerChainsLoader.loadHandlerChains(location, true); - } catch (ParsingException e) { - throw new WebServiceException("Cannot parse ", e); - } - - // OK, Provides a new HandlerResolver - JOnASHandlerResolver resolver = new JOnASHandlerResolver(service.getClass(), tccl); - resolver.setHandlerChainBuilder(new DescriptorHandlerChainBuilder(handlerChainsElement)); - - service.setHandlerResolver(resolver); - } - } - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansContextNamingInfo.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansContextNamingInfo.java deleted file mode 100644 index 602f6e5765..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansContextNamingInfo.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.easybeans; - -import org.ow2.jonas.ws.jaxws.ejb.context.IContextNamingInfo; -import org.ow2.jonas.ws.jaxws.ejb.IEJBWebserviceEndpoint; -import org.ow2.easybeans.api.EZBContainer; - -/** - * The EasyBeansContextNamingInfo is an implementation of - * IContextNamingInfo for easybeans. - * - * @author Guillaume Sauthier - */ -public class EasyBeansContextNamingInfo implements IContextNamingInfo { - - /** - * EasyBeans container. - */ - private EZBContainer container; - - /** - * Exposed bean's name. - */ - private String beanName; - - /** - * EJB Endpoint. - */ - private IEJBWebserviceEndpoint endpoint; - - /** - * Creates a new ContextNamingInfo structure dedicated to easybeans. - * @param endpoint WS endpoint. - * @param container EasyBeans container. - * @param beanName name of the bean. - */ - public EasyBeansContextNamingInfo(final IEJBWebserviceEndpoint endpoint, - final EZBContainer container, - final String beanName) { - this.endpoint = endpoint; - this.container = container; - this.beanName = beanName; - } - - /** - * Get the name of the EJB container hosting the EJB exposed endpoint. - * - * @return the EJB container name - */ - public String getContainerName() { - return this.container.getName(); - } - - /** - * Get J2EE Application name. - * - * @return application name (is be null for standalone EjbJar) - */ - public String getApplicationName() { - return this.container.getConfiguration().getApplicationName(); - } - - /** - * Get the name of the bean exposed as WS. - * - * @return bean's name - */ - public String getBeanName() { - return this.beanName; - } - - /** - * Get the realm name to use if this bean is secured. - * - * @return a real name (may be null if the bean is not secured) - */ - public String getRealmName() { - // TODO implement the realm support - return null; - } - - /** - * Get the endpoint for which the context needs to be created. - * - * @return the WS endpoint. - */ - public IEJBWebserviceEndpoint getEndpoint() { - return this.endpoint; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansSecurityConstraint.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansSecurityConstraint.java deleted file mode 100644 index 056d24c40c..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/EasyBeansSecurityConstraint.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.easybeans; - -import java.util.List; - -import org.ow2.jonas.ws.jaxws.ejb.ISecurityConstraint; -import org.ow2.jonas.ws.jaxws.PortMetaData; -import org.ow2.easybeans.api.bean.info.IBeanInfo; -import org.ow2.easybeans.api.bean.info.IWebServiceInfo; - -/** - * The EasyBeansSecurityConstraint is the representation of an endpoint's security contraint. - * - * @author Guillaume Sauthier - */ -public class EasyBeansSecurityConstraint implements ISecurityConstraint { - - /** - * Hold the url-pattern. - */ - private PortMetaData pmd; - - private IBeanInfo info; - - public EasyBeansSecurityConstraint(final PortMetaData pmd, final IBeanInfo info) { - this.pmd = pmd; - this.info = info; - } - - /** - * @return the secured Url pattern. - */ - public String getUrlPattern() { - return pmd.getUrlPattern(); - } - - /** - * @return the list of protected HTTP methods. - */ - public List getHttpMethods() { - IWebServiceInfo wsInfo = info.getWebServiceInfo(); - if (wsInfo == null) { - return null; - } - return wsInfo.getHttpMethods(); - } - - /** - * @return the required guarantee. - */ - public String getTransportGuarantee() { - IWebServiceInfo wsInfo = info.getWebServiceInfo(); - if (wsInfo == null) { - return null; - } - return wsInfo.getTransportGuarantee(); - } - - /** - * @return the list of references roles in the EJB. - */ - public List getRoleNames() { - return info.getSecurityInfo().getDeclaredRoles(); - } - - /** - * @return the authentication method's name. - */ - public String getAuthMethod() { - IWebServiceInfo wsInfo = info.getWebServiceInfo(); - if (wsInfo == null) { - return null; - } - return wsInfo.getAuthMethod(); - } - - /** - * @return the name of the realm to be used for authentication. - */ - public String getRealmName() { - IWebServiceInfo wsInfo = info.getWebServiceInfo(); - if (wsInfo == null) { - return null; - } - return wsInfo.getRealmName(); - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/naming/WebServiceRefExtensionListener.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/naming/WebServiceRefExtensionListener.java deleted file mode 100644 index 0bd1495300..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/easybeans/naming/WebServiceRefExtensionListener.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.easybeans.naming; - -import org.ow2.easybeans.api.Factory; -import static org.ow2.easybeans.deployment.helper.JavaContextHelper.getJndiName; -import org.ow2.easybeans.deployment.metadata.ejbjar.EasyBeansEjbJarClassMetadata; -import org.ow2.easybeans.deployment.metadata.ejbjar.EasyBeansEjbJarFieldMetadata; -import org.ow2.easybeans.deployment.metadata.ejbjar.EasyBeansEjbJarMethodMetadata; -import static org.ow2.easybeans.deployment.util.BytecodeDescriptorHelper.getClassname; -import static org.ow2.easybeans.deployment.util.BytecodeDescriptorHelper.getMethodParamClassname; -import org.ow2.easybeans.event.naming.JavaContextNamingEvent; -import org.ow2.util.ee.builder.webserviceref.WebServiceRefBuilder; -import org.ow2.util.ee.metadata.common.api.struct.IJaxwsWebServiceRef; -import org.ow2.util.event.api.EventPriority; -import org.ow2.util.event.api.IEvent; -import org.ow2.util.event.api.IEventListener; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.ow2.jonas.ws.jaxws.client.JAXWSWebServiceRefBuilder; - -import javax.naming.Context; -import javax.naming.NamingException; -import javax.naming.Reference; -import java.util.List; - -/** - * This extension is responsible of filling the EJB java:comp/env Context with @WebServiceRef. - * @author Guillaume Sauthier - */ -public class WebServiceRefExtensionListener implements IEventListener { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WebServiceRefExtensionListener.class); - - /** - * Only accepts the event if it's a EnvNamingEvent. - * @param event tested event - * @return true if the proposed event is of the expected type - */ - public boolean accept(final IEvent event) { - if (event instanceof JavaContextNamingEvent) { - JavaContextNamingEvent javaContextNamingEvent = (JavaContextNamingEvent) event; - - // source/event-provider-id attribute is used to filter the destination - if ("java:".equals(javaContextNamingEvent.getEventProviderId())) { - return true; - } - } - return false; - } - - /** - * @return Normal synchronous priority - */ - public EventPriority getPriority() { - return EventPriority.SYNC_NORM; - } - - /** - * Process the event. - * @param event - */ - public void handle(final IEvent event) { - - JavaContextNamingEvent ene = (JavaContextNamingEvent) event; - EasyBeansEjbJarClassMetadata bean = ene.getBeanMetadata(); - Factory easyBeansFactory = ene.getFactory(); - Context javaContext = ene.getJavaContext(); - Context envCtx = null; - try { - envCtx = (Context) javaContext.lookup("comp/env"); - } catch (NamingException e) { - throwException(ene, new IllegalStateException("Cannot lookup java:comp/env element.", e)); - } - - logger.debug("Handling 'java:comp/env' building for EJB {0}", easyBeansFactory.getBeanInfo().getName()); - - // Handle @WebServiceRefs - // Class level ----------------------- - IJaxwsWebServiceRef webServiceRefOnClass = bean.getJaxwsWebServiceRef(); - if (webServiceRefOnClass != null) { - // JNDI name must be set - String name = webServiceRefOnClass.getName(); - createAndBindWebServiceReference(easyBeansFactory, envCtx, webServiceRefOnClass, name, ene); - } - List refs = bean.getJaxwsWebServiceRefs(); - if (refs != null && refs.size() > 0) { - for (IJaxwsWebServiceRef webServiceRef : refs) { - String name = webServiceRef.getName(); - createAndBindWebServiceReference(easyBeansFactory, envCtx, webServiceRef, name, ene); - } - } - - // Field level ----------------------- - for (EasyBeansEjbJarFieldMetadata fieldMetadata : bean.getStandardFieldMetadataCollection()) { - IJaxwsWebServiceRef webServiceRef = fieldMetadata.getJaxwsWebServiceRef(); - if (webServiceRef != null) { - - // Compute JNDI name from field info - String refName = webServiceRef.getName(); - String name = getJndiName(refName, fieldMetadata); - - // Fix type - String type = getClassname(fieldMetadata.getJField().getDescriptor()); - webServiceRef.setType(type); - - // Rebind - createAndBindWebServiceReference(easyBeansFactory, envCtx, webServiceRef, name, ene); - } - } - // Method level ----------------------- - for (EasyBeansEjbJarMethodMetadata methodMetadata : bean.getMethodMetadataCollection()) { - IJaxwsWebServiceRef webServiceRef = methodMetadata.getJaxwsWebServiceRef(); - if (webServiceRef != null) { - - // Compute JNDI name from method info - String refName = webServiceRef.getName(); - String name = getJndiName(refName, methodMetadata); - - // Fix type - String type = getMethodParamClassname(methodMetadata.getJMethod().getDescriptor(), 0); - webServiceRef.setType(type); - - // Rebind - createAndBindWebServiceReference(easyBeansFactory, envCtx, webServiceRef, name, ene); - } - } - } - - - /** - * Create a Reference from the metadata and then bind it in the 'env' Context. - * @param easyBeansFactory the EJB Factory - * @param envCtx the java:comp/env Context - * @param ref the @WebServiceRef metadata - * @param name JNDI name - */ - private void createAndBindWebServiceReference(final Factory easyBeansFactory, - final Context envCtx, - final IJaxwsWebServiceRef ref, - final String name, - final JavaContextNamingEvent event) { - try { - // Create the Reference object - Reference wsRef = getWebServiceReference(easyBeansFactory, ref); - - // Rebind - if (wsRef != null) { - logger.debug("Rebind ''java:comp/env/{0}''", name); - envCtx.rebind(name, wsRef); - } - } catch (NamingException e) { - throwException(event, new IllegalStateException("Cannot bind element '" + name + "'.", e)); - } - } - - /** - * Creates a JNDI Reference object from the given metadata. - * @param easyBeansFactory the factory used to retrieve extensions - * @param webServiceRef metadata - * @return a newly created Reference or null. - */ - private Reference getWebServiceReference(final Factory easyBeansFactory, - final IJaxwsWebServiceRef webServiceRef) - throws NamingException { - - // TODO Should use the Factory and the Extensor model of the EZBContainer to get a builder instance - // Without this, Axis2 will have to copy this whole class if it wants to provides it's own builder. - WebServiceRefBuilder builder = new JAXWSWebServiceRefBuilder(); - - Reference ref = null; - if (builder != null) { - ref = builder.build(webServiceRef); - } - - return ref; - } - - /** - * Add the Exception in the event for a possible feedback for the caller. - * @param event the event to be completed - * @param throwable the exception to be added and then rethrown - */ - private static void throwException(final JavaContextNamingEvent event, - final Throwable throwable) { - - // Log a message - logger.error("Errors during Listeners processing.", throwable); - - // Append the exception in the event - event.addThrowable(throwable); - - // Rethrow the exception to break the execution flow - if (throwable instanceof RuntimeException) { - throw (RuntimeException) throwable; - } else { - throw new RuntimeException("Wrapping cause", throwable); - } - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/HandlerResourceProcessor.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/HandlerResourceProcessor.java deleted file mode 100644 index ad8a3b0b13..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/HandlerResourceProcessor.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.handler; - - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Map; - -import javax.annotation.Resource; - -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.annotation.processor.handler.AbstractInjectionHandler; - -/** - * The HandlerResourceProcessor is responsible of injecting init params of the handler. - * - * @author Guillaume Sauthier - */ -public class HandlerResourceProcessor extends AbstractInjectionHandler { - - private Map params; - - public HandlerResourceProcessor(final Map params) { - this.params = params; - } - - public boolean isSupported(final Class aClass) { - return Resource.class.equals(aClass); - } - - @Override - public void process(final Annotation annotation, final Method method, final Object o) throws ProcessorException { - - // Find name - Resource resource = (Resource) annotation; - String name = resource.name(); - if ((name == null) || ("".equals(name))) { - // If @Resource does not provides a name, find it from the Method's name - name = getAttributeName(method); - } - - // Get the value - String value = params.get(name); - - // Convert to the expected type - if (method.getParameterTypes().length == 1) { - Class type = method.getParameterTypes()[0]; - Object injectableValue = convertValue(value, type); - - // Inject it - doInjectMethod(method, o, injectableValue); - } - } - - private Object convertValue(final String value, final Class type) { - - // String, int, double, char, long, float, byte, short, boolean - Object ret = null; - if (String.class.isAssignableFrom(type)) { - ret = value; - } else if (Integer.class.isAssignableFrom(type) - || Integer.TYPE.isAssignableFrom(type)) { - ret = Integer.valueOf(value); - } else if (Double.class.isAssignableFrom(type) - || Double.TYPE.isAssignableFrom(type)) { - ret = Double.valueOf(value); - } else if (Character.class.isAssignableFrom(type) - || Character.TYPE.isAssignableFrom(type)) { - ret = value.charAt(0); - } else if (Long.class.isAssignableFrom(type) - || Long.TYPE.isAssignableFrom(type)) { - ret = Long.valueOf(value); - } else if (Float.class.isAssignableFrom(type) - || Float.TYPE.isAssignableFrom(type)) { - ret = Float.valueOf(value); - } else if (Byte.class.isAssignableFrom(type) - || Byte.TYPE.isAssignableFrom(type)) { - ret = Byte.valueOf(value); - } else if (Short.class.isAssignableFrom(type) - || Short.TYPE.isAssignableFrom(type)) { - ret = Short.valueOf(value); - } else if (Boolean.class.isAssignableFrom(type) - || Boolean.TYPE.isAssignableFrom(type)) { - ret = Boolean.valueOf(value); - } - - return ret; - - } - - @Override - public void process(final Annotation annotation, final Field field, final Object o) throws ProcessorException { - - // Find name - Resource resource = (Resource) annotation; - String name = resource.name(); - if ((name == null) || ("".equals(name))) { - // If @Resource does not provides a name, find it from the Field's name - name = field.getName(); - } - - // Get the value - String value = params.get(name); - - // Convert to the expected type - Class type = field.getType(); - Object injectableValue = convertValue(value, type); - - // Inject it - doInjectField(field, o, injectableValue); - } -} - diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/JOnASHandlerResolver.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/JOnASHandlerResolver.java deleted file mode 100644 index 10a5ea1154..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/JOnASHandlerResolver.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.handler; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.ws.WebServiceException; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.HandlerResolver; -import javax.xml.ws.handler.PortInfo; - -import org.ow2.jonas.ws.jaxws.handler.builder.AnnotationHandlerChainBuilder; -import org.ow2.jonas.ws.jaxws.handler.builder.HandlerChainBuilder; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; - -public class JOnASHandlerResolver implements HandlerResolver { - - /** - * The application classloader (used to load handler classes) - */ - private ClassLoader applicationClassLoader; - - /** - * Map, for each port, the List oh Handlers to use. - */ - private final Map> handlerMap = new HashMap>(); - - /** - * Which builder will be used ? - */ - private HandlerChainBuilder handlerChainBuilder; - - /** - * Constructs a new HandlerResolver for the given Class - * @param clazz supported class - * @param appsClassLoader Handler's classloader - */ - public JOnASHandlerResolver(final Class clazz, final ClassLoader appsClassLoader) { - this.applicationClassLoader = appsClassLoader; - - // By default, provide an annotation based builder - this.handlerChainBuilder = new AnnotationHandlerChainBuilder(clazz); - } - - /** - * @param handlerChainBuilder the Builder to use - */ - public void setHandlerChainBuilder(final HandlerChainBuilder handlerChainBuilder) { - this.handlerChainBuilder = handlerChainBuilder; - } - - /** - * Gte the handlers chain associated with the given port. - * @param portInfo Port identifier (service name, port name and protocol binding ID) - * @return the list of Handlers - */ - public List getHandlerChain(final PortInfo portInfo) { - - List handlerChain = handlerMap.get(portInfo); - if (handlerChain == null) { - handlerChain = createHandlerChain(portInfo); - handlerMap.put(portInfo, handlerChain); - } - return handlerChain; - } - - /** - * Creates a Handler chain for the given port. - * @param portInfo port identifier - * @return a new handler chain for the given port - */ - private List createHandlerChain(final PortInfo portInfo) { - List chain = handlerChainBuilder.buildHandlerChain(portInfo, - applicationClassLoader); - - // TODO improve @Resource handling - for (Handler h : chain) { - configHandler(h); - callPostConstructs(h); - } - - return chain; - } - - /** - * Start the given Handler by calling all its @postConstruct methods. - * @param handler handler to be started - */ - private void callPostConstructs(final Handler handler) { - - IAnnotationProcessor processor = new DefaultAnnotationProcessor(); - processor.addAnnotationHandler(new PostConstructProcessor()); - - try { - processor.process(handler); - } catch (ProcessorException e) { - throw new WebServiceException("Cannot start Handler instance", e); - } - } - - /** - * JAX-WS section 9.3.1: The runtime MUST then carry out any injections - * requested by the handler, typically via the javax .annotation.Resource - * annotation. After all the injections have been carried out, including in - * the case where no injections were requested, the runtime MUST invoke the - * method carrying a javax.annotation .PostConstruct annotation, if present. - */ - private void configHandler(final Handler handler) { - if (handler != null) {/* - ResourceManager resourceManager = bus.getExtension(ResourceManager.class); - List resolvers = resourceManager.getResourceResolvers(); - resourceManager = new DefaultResourceManager(resolvers); - ResourceInjector injector = new ResourceInjector(resourceManager); - injector.inject(handler); - injector.construct(handler);*/ - } - - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/PostConstructProcessor.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/PostConstructProcessor.java deleted file mode 100644 index 49014edca0..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/PostConstructProcessor.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.handler; - - -import java.lang.annotation.Annotation; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import javax.annotation.PostConstruct; - -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.annotation.processor.handler.AbstractAnnotationHandler; - -/** - * The PostConstructProcessor is responsible of calling @PostConstruct annotated methods. - * - * @author Guillaume Sauthier - */ -public class PostConstructProcessor extends AbstractAnnotationHandler { - - /** - * Cached no params Object. - */ - private static Object[] NO_PARAMS = new Object[0]; - - public boolean isSupported(final Class aClass) { - return PostConstruct.class.equals(aClass); - } - - @Override - public void process(final Annotation annotation, final Method method, final Object o) throws ProcessorException { - - // Only methods without parameters can be called - if (method.getParameterTypes().length == 0) { - - boolean accessible = method.isAccessible(); - try { - method.setAccessible(true); - - try { - method.invoke(o, NO_PARAMS); - } catch (IllegalAccessException e) { - throw new ProcessorException("Cannot access method " + method, e); - } catch (InvocationTargetException e) { - throw new ProcessorException("Cannot invoke method " + method, e); - } - } finally { - method.setAccessible(accessible); - } - } - } - - - - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/AnnotationHandlerChainBuilder.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/AnnotationHandlerChainBuilder.java deleted file mode 100644 index f1a37d64e3..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/AnnotationHandlerChainBuilder.java +++ /dev/null @@ -1,202 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.handler.builder; - -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.List; - -import javax.jws.HandlerChain; -import javax.jws.WebService; -import javax.xml.ws.WebServiceException; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.PortInfo; - -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; -import org.ow2.util.ee.metadata.common.impl.xml.parsing.HandlerChainsLoader; -import org.ow2.util.ee.metadata.common.impl.xml.parsing.ParsingException; - -public class AnnotationHandlerChainBuilder extends HandlerChainBuilder { - - /** - * HandlerChains structure. - */ - private IHandlerChains handlerChainsElement; - - /** - * This constructors has to be used on the endpoint side (@WebService annotated class). - * @param clazz supporting class - */ - public AnnotationHandlerChainBuilder(final Class clazz) { - - HandlerChainAnnotation annotation = findHandlerChainAnnotation(clazz, true); - - // If we found an annotation, use it - if (annotation != null) { - String file = annotation.getHandlerChain().file().trim(); - - if ((file == null) || ("".equals(file))) { - throw new WebServiceException("@HandlerChain annotation on '" + clazz - + "' is missing a valid 'file' value."); - } - - URL location = getHandlerChainsLocation(file, annotation.getDeclaringClass()); - - try { - handlerChainsElement = HandlerChainsLoader.loadHandlerChains(location, true); - } catch (ParsingException e) { - throw new WebServiceException("Cannot parse ", e); - } - - } - } - - /** - * Build the chain. - * @param info identify the target port for the builded chain - * @param loader classloader used for Handler class loading - * @return a Handler's List - */ - @Override - public List buildHandlerChain(final PortInfo info, final ClassLoader loader) { - List handlers = Collections.emptyList(); - if (handlerChainsElement != null) { - handlers = buildHandlerChain(handlerChainsElement, info, loader); - } - return handlers; - } - - /** - * Find the URL of the handler-chains.xml file. - * @param file filename - * @param declaringClass relative class - * @return the file's URL - */ - private URL getHandlerChainsLocation(final String file, final Class declaringClass) { - - URL location; - // First try if this is an absolute URL - try { - location = new URL(file); - } catch (IOException mue) { - // OK, this is not an absolute URL - // Try to resolve the resource as a Classloader resource - location = declaringClass.getResource(file); - } - - return location; - } - - /** - * Find a couple HandlerChain/Class - * @param clazz introspected class - * @param searchSEI search the serviceEndpointInterface ? - * @return a HandlerChain/Class couple or null if none found - */ - private HandlerChainAnnotation findHandlerChainAnnotation(final Class clazz, final boolean searchSEI) { - - HandlerChainAnnotation annotation = null; - - HandlerChain chain = clazz.getAnnotation(HandlerChain.class); - - if (chain == null) { - - if (searchSEI) { - // Try to look on the SEI - WebService ws = clazz.getAnnotation(WebService.class); - - if (((ws != null) && (!"".equals(ws.endpointInterface())))) { - ClassLoader loader = clazz.getClassLoader(); - String seClassname = ws.endpointInterface(); - - Class sei; - try { - sei = Class.forName(seClassname, true, loader); - } catch (ClassNotFoundException e) { - throw new WebServiceException("Cannot load SEI class '" + seClassname + "'", e); - } - - annotation = findHandlerChainAnnotation(sei, false); - - } - } - - if (annotation == null) { - // At this point, the SEI do not have any @HandlerChain - // Next step: search the interfaces - for (Class itf : clazz.getInterfaces()) { - - HandlerChain itfHC = itf.getAnnotation(HandlerChain.class); - if (itfHC != null) { - annotation = new HandlerChainAnnotation(itfHC, itf); - // Got a @HandlerChain, stop the loop - break; - } - } - } - } else { - // We have a HandlerChain annotation - annotation = new HandlerChainAnnotation(chain, clazz); - } - - return annotation; - - } - - - /** - * The class permits to remember where the @HandlerChain annotation comes from. - * this have to be used because JAX-WS specify that the 'file' attribute has to - * be resolved relatively to the declaring class. - */ - private class HandlerChainAnnotation { - - /** - * The annotation. - */ - private HandlerChain handlerChain; - - /** - * Class declaring the annotation. - */ - private Class declaringClass; - - public HandlerChainAnnotation(final HandlerChain chain, final Class declaringClass) { - this.handlerChain = chain; - this.declaringClass = declaringClass; - } - - public HandlerChain getHandlerChain() { - return handlerChain; - } - - public Class getDeclaringClass() { - return declaringClass; - } - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/BindingUtils.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/BindingUtils.java deleted file mode 100644 index 0ce66e4a84..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/BindingUtils.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.handler.builder; - -import java.util.HashMap; -import java.util.Map; - -/** - * The BindingUtils is responsible to resolve aliased URI bindings. - * - * @author Guillaume Sauthier - */ -public class BindingUtils { - - public static final String SOAP11_HTTP_TOKEN = "##SOAP11_HTTP"; - public static final String SOAP11_HTTP = "http://schemas.xmlsoap.org/wsdl/soap/http"; - - public static final String SOAP11_HTTP_MTOM_TOKEN = "##SOAP11_HTTP_MTOM"; - public static final String SOAP11_HTTP_MTOM = SOAP11_HTTP + "?mtom=true"; - - public static final String SOAP12_HTTP_TOKEN = "##SOAP12_HTTP"; - public static final String SOAP12_HTTP = "http://www.w3.org/2003/05/soap/bindings/HTTP/"; - - public static final String SOAP12_HTTP_MTOM_TOKEN = "##SOAP12_HTTP_MTOM"; - public static final String SOAP12_HTTP_MTOM = SOAP12_HTTP + "?mtom=true"; - - public static final String XML_HTTP_TOKEN = "##XML_HTTP"; - public static final String XML_HTTP = "http://www.w3.org/2004/08/wsdl/http"; - - private static Map bindings; - - static { - bindings = new HashMap(); - bindings.put(SOAP11_HTTP_TOKEN, SOAP11_HTTP); - bindings.put(SOAP11_HTTP_MTOM_TOKEN, SOAP11_HTTP_MTOM); - bindings.put(SOAP12_HTTP_TOKEN, SOAP12_HTTP); - bindings.put(SOAP12_HTTP_MTOM_TOKEN, SOAP12_HTTP_MTOM); - bindings.put(XML_HTTP_TOKEN, XML_HTTP); - } - - /** - * Resolve the given binding URI. - * @param binding Binding ID - * @return resolved binding ID (may not change if no aliases were found) - */ - public static String resolve(final String binding) { - - // Is the binding aliased ? - String resolved = bindings.get(binding); - if (resolved == null) { - // If not, consider it as already resolved - // Anyway, we only deal with JAX-WS bindings here - resolved = binding; - } - return resolved; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/DescriptorHandlerChainBuilder.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/DescriptorHandlerChainBuilder.java deleted file mode 100644 index 60e9ec5c81..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/DescriptorHandlerChainBuilder.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.handler.builder; - -import java.util.List; - -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.PortInfo; - -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; - -/** - * The DescriptorHandlerChainBuilder is responsible to build a Handler chain - * from a pre parsed handler-chains.xml file. - * - * @author Guillaume Sauthier - */ -public class DescriptorHandlerChainBuilder extends HandlerChainBuilder { - - /** - * Already parsed HandlerChains structure. - */ - private IHandlerChains handlerChainsElement; - - /** - * Constructs a new builder using the given structure. - * @param handlerChains structure representing the handler chain - */ - public DescriptorHandlerChainBuilder(final IHandlerChains handlerChains) { - this.handlerChainsElement = handlerChains; - } - - /** - * Build the chain. - * @param info identify the target port for the builded chain - * @param loader classloader used for Handler class loading - * @return a new Handler's List - */ - @Override - public List buildHandlerChain(final PortInfo info, final ClassLoader loader) { - return buildHandlerChain(handlerChainsElement, info, loader); - } -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerBuilder.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerBuilder.java deleted file mode 100644 index 1347336202..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerBuilder.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - - -package org.ow2.jonas.ws.jaxws.handler.builder; - - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Map; - -import javax.xml.ws.WebServiceException; -import javax.xml.ws.handler.Handler; - -import org.ow2.jonas.ws.jaxws.handler.HandlerResourceProcessor; -import org.ow2.util.annotation.processor.DefaultAnnotationProcessor; -import org.ow2.util.annotation.processor.IAnnotationProcessor; -import org.ow2.util.annotation.processor.ProcessorException; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandler; - -/** - * The HandlerBuilder is responsible of building Handler instances from - * handler's XML descriptions. - * - * @author Guillaume Sauthier - */ -public class HandlerBuilder { - - /** - * Handler description to be transformed into a real Handler instance. - */ - private IHandler handlerDesc; - - /** - * Classloader to be used for Handler class loading. - */ - private ClassLoader classloader; - - /** - * Constructs a new HandlerBuilder. - * @param pcHandler the handler desc - * @param loader classloader to be used for loading - */ - public HandlerBuilder(final IHandler pcHandler, final ClassLoader loader) { - this.handlerDesc = pcHandler; - this.classloader = loader; - } - - /** - * Build a handler and init it. - * @return an inited Handler - */ - public Handler buildHandler() { - - String classname = handlerDesc.getHandlerClass(); - - Handler handler; - try { - Class clazz = Class.forName(classname, true, classloader).asSubclass(Handler.class); - handler = clazz.newInstance(); - } catch (ClassNotFoundException e) { - throw new WebServiceException("Cannot load class '" + classname + "' from loader '" + classloader + "'", e); - } catch (IllegalAccessException e) { - throw new WebServiceException("Cannot call default constructor of class '" + classname + "'", e); - } catch (InstantiationException e) { - throw new WebServiceException("Cannot instanciate class '" + classname + "'", e); - } - - // Init the handler - initHandler(handler, handlerDesc.getInitParams()); - - return handler; - } - - /** - * Initialize the newly created handler. - * @param handler to be inited instance - * @param initParams init params from the descriptor - */ - private void initHandler(final Handler handler, final Map initParams) { - - // Initialize Handler - Method initMethod = findInitMethod(handler.getClass()); - if (initMethod != null) { - initHandlerUsingMethod(handler, initMethod, initParams); - } else { - initHandlerUsingResource(handler, initParams); - } - - } - - /** - * init the Handler using @Resource injection resolved by the init params. - * @param handler inited instance - * @param initParams Map of init parameters - */ - private void initHandlerUsingResource(final Handler handler, final Map initParams) { - - // Create an annotation processor - IAnnotationProcessor processor = createAnnotationProcessor(initParams); - - try { - // perform injection - processor.process(handler); - } catch (ProcessorException e) { - throw new WebServiceException("Cannot initialise the handler '" + handler + "'", e); - } - } - - /** - * Creates a new configured AnnotationProcessor for init param injection. - * @param initParams parameters - * @return a configured AnnotationProcessor - */ - private IAnnotationProcessor createAnnotationProcessor(final Map initParams) { - IAnnotationProcessor processor = new DefaultAnnotationProcessor(); - processor.addAnnotationHandler(new HandlerResourceProcessor(initParams)); - // TODO inject other types (WebServiceContext, ...) - return processor; - } - - /** - * Init the handler using the init(Map) method. - * @param handler inited instance - * @param initMethod method to be called - * @param initParams init parameters - */ - private void initHandlerUsingMethod(final Handler handler, final Method initMethod, final Map initParams) { - - boolean access = initMethod.isAccessible(); - try { - initMethod.setAccessible(true); - initMethod.invoke(handler, initParams); - } catch (IllegalAccessException e) { - throw new WebServiceException("Cannot use method '" + initMethod + "'", e); - } catch (InvocationTargetException e) { - throw new WebServiceException("Exception during '" + initMethod + "' invocation", e); - } finally { - initMethod.setAccessible(access); - } - } - - /** - * Find the init(Map) method (if any). - * @param clazz inspected class - * @return the Method of the init(Map) or null if none was found - */ - private Method findInitMethod(final Class clazz) { - - try { - return clazz.getMethod("init", Map.class); - } catch (NoSuchMethodException e) { - // No init method: that's OK, continue - return null; - } - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerChainBuilder.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerChainBuilder.java deleted file mode 100644 index 15df002aa6..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/handler/builder/HandlerChainBuilder.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.handler.builder; - -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChains; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandlerChain; -import org.ow2.util.ee.metadata.common.api.xml.struct.IHandler; - -import javax.xml.namespace.QName; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.LogicalHandler; -import javax.xml.ws.handler.PortInfo; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -/** - * The HandlerChainBuilder is ... - * - * @author Guillaume Sauthier - */ -public abstract class HandlerChainBuilder { - - /** - * Build a Handler chain for the given PortInfo. - * @param info identify the target port for the builded chain - * @param loader classloader used for Handler class loading - * @return a new HandlerChain for this port - */ - public abstract List buildHandlerChain(PortInfo info, - ClassLoader loader); - /** - * Build a Handler chain for the given PortInfo. - * @param handlerChains represents the XML structure - * @param info identify the target port for the builded chain - * @param loader classloader used for Handler class loading - * @return a new HandlerChain for this port - */ - public List buildHandlerChain(final IHandlerChains handlerChains, - final PortInfo info, - final ClassLoader loader) { - List handlers = new ArrayList(); - - List chains = handlerChains.getHandlerChains(); - for (IHandlerChain chain : chains) { - - // Before creating the chain, check that the current chain - // really target the current port - QName portPattern = chain.getPortNamePattern(); - if (!matchesPattern(info.getPortName(), portPattern)) { - // No matches - // Try next chain - continue; - } - QName servicePattern = chain.getServiceNamePattern(); - if (!matchesPattern(info.getServiceName(), servicePattern)) { - // No matches - // Try next chain - continue; - } - List bindings = chain.getProtocolBindings(); - if (!matchesBinding(info.getBindingID(), bindings)) { - // No matches - // Try next chain - continue; - } - - // If we are here, this is because we match the PortInfo - // So we can continue and build the chain - - List handlerList = chain.getHandlers(); - for (IHandler pcHandler : handlerList) { - - HandlerBuilder builder = new HandlerBuilder(pcHandler, loader); - Handler handler = builder.buildHandler(); - handlers.add(handler); - } - - } - - return sortHandlers(handlers); - } - - private boolean matchesBinding(final String bindingID, final List bindings) { - - // Quick tries - if (bindingID == null) { - return true; - } - - if ((bindings == null) || (bindings.isEmpty())) { - return true; - } - - // Resolve the bindings - List resolvedBindings = new ArrayList(); - for (String binding : bindings) { - resolvedBindings.add(BindingUtils.resolve(binding)); - } - - // Check if the Port's bindings is contained is the list - return (resolvedBindings.contains(bindingID)); - } - - /** - * Naive pattern matching method (namespaces are not checked). - * @param name target QName - * @param pattern checked pattern (of the form [namespace-prefix:]local-part) - * @return true if the pattern is matching the current QName - */ - private boolean matchesPattern(final QName name, final QName pattern) { - if (pattern == null) { - // null matches everything - return true; - } - - if (("".equals(pattern.getNamespaceURI())) - && ("*".equals(pattern.getLocalPart()))) { - // having the QName {""}* matches everything - return true; - } - - // Namespaces cannot have wildwards, so just check strict equality - if (!pattern.getNamespaceURI().equals(name.getNamespaceURI())) { - // different namespaces, quickly exit - return false; - } - - // Try pattern matching - return Pattern.matches(pattern.getLocalPart(), name.getLocalPart()); - } - - protected List sortHandlers(final List handlers) { - - List logicalHandlers = new ArrayList(); - List protocolHandlers = new ArrayList(); - - if (handlers != null) { - for (Handler handler : handlers) { - - if (handler instanceof LogicalHandler) { - logicalHandlers.add(handler); - } else { - protocolHandlers.add(handler); - } - } - } - - // LogicalHandlers first, then ProtocolHandlers - List sortedHandlers = new ArrayList(); - sortedHandlers.addAll(logicalHandlers); - sortedHandlers.addAll(protocolHandlers); - - return sortedHandlers; - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/JAXWSServlet.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/JAXWSServlet.java deleted file mode 100644 index ccd3efeac4..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/JAXWSServlet.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.http.servlet; - -import org.ow2.jonas.ws.jaxws.IWSRequest; -import org.ow2.jonas.ws.jaxws.IWSResponse; -import org.ow2.jonas.ws.jaxws.IWebServiceEndpoint; -import org.ow2.jonas.ws.jaxws.WSException; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * JAX-WS 2.x Servlet. It wraps an {@link IWebServiceEndpoint} instance that will be invoked. - * @author Guillaume Sauthier - */ -public class JAXWSServlet extends HttpServlet { - - /** - * Serial Version UID. - */ - private static final long serialVersionUID = 2241539363010941679L; - - /** - * The wrapped web service endpoint. - */ - private IWebServiceEndpoint endpoint; - - /** - * Set the endpoint. - * @param endpoint wrapped endpoint - */ - public void setWebServiceEndpoint(final IWebServiceEndpoint endpoint) { - this.endpoint = endpoint; - } - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a POST request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws ServletException if the request for the POST could not be handled - */ - @Override - protected void doPost(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException { - invokeDestination(request, response); - } - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws ServletException if the request for the GET could not be handled - */ - @Override - protected void doGet(final HttpServletRequest request, - final HttpServletResponse response) throws ServletException { - invokeDestination(request, response); - } - - /** - * Invoke the Destination object by analyzing the given request. - * @param request the given request - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws ServletException if the invocation fails - */ - protected void invokeDestination(final HttpServletRequest request, - final HttpServletResponse response) - throws ServletException { - - // Init Request + Response - IWSRequest req = new ServletRequestAdapter(request); - req.setAttribute(HttpServletRequest.class, request); - req.setAttribute(HttpServletResponse.class, response); - req.setAttribute(ServletContext.class, getServletContext()); - - IWSResponse res = new ServletResponseAdapter(response); - - try { - endpoint.invoke(req, res); - } catch (WSException e) { - throw new ServletException(e); - } - - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletRequestAdapter.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletRequestAdapter.java deleted file mode 100644 index acef071ceb..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletRequestAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.http.servlet; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Hashtable; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -import org.ow2.jonas.ws.jaxws.IWSRequest; - -/** - * Wraps an {@link HttpServletRequest}. - * @author Guillaume Sauthier - */ -public class ServletRequestAdapter implements IWSRequest { - - /** - * Wrapped HTTP request. - */ - private HttpServletRequest request; - - /** - * Storage for attributes. - */ - private Map, Object> attributes; - - /** - * Construct a new {@link IWSRequest} from an {@link HttpServletRequest}. - * @param request wrapped request - */ - public ServletRequestAdapter(final HttpServletRequest request) { - this.request = request; - attributes = new Hashtable, Object>(); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.ws.jaxws.IWSRequest#getAttribute(java.lang.Class) - */ - public T getAttribute(final Class type) { - return type.cast(attributes.get(type)); - } - - public String getContentType() { - return request.getContentType(); - } - - public InputStream getInputStream() throws IOException { - return request.getInputStream(); - } - - public String getRemoteAddr() { - return request.getRemoteAddr(); - } - - public String getHeader(final String name) { - return request.getHeader(name); - } - - public String getParameter(final String parameter) { - return request.getParameter(parameter); - } - - public T setAttribute(final Class type, final T value) { - Object old = attributes.put(type, value); - return type.cast(old); - } - - public StringBuffer getRequestURL() { - // TODO Auto-generated method stub - return request.getRequestURL(); - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletResponseAdapter.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletResponseAdapter.java deleted file mode 100644 index dfa4775155..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/http/servlet/ServletResponseAdapter.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.http.servlet; - -import java.io.IOException; -import java.io.OutputStream; - -import javax.servlet.http.HttpServletResponse; - -import org.ow2.jonas.ws.jaxws.IWSResponse; - -public class ServletResponseAdapter implements IWSResponse { - - private HttpServletResponse response; - - public ServletResponseAdapter(final HttpServletResponse response) { - this.response = response; - } - - public OutputStream getOutputStream() throws IOException { - return response.getOutputStream(); - } - - public void flushBuffer() throws IOException { - // TODO Auto-generated method stub - response.flushBuffer(); - } - - public void setContentType(final String type) { - // TODO Auto-generated method stub - response.setContentType(type); - } - - public void setHeader(final String name, final String value) { - // TODO Auto-generated method stub - response.setHeader(name, value); - } - - public void setStatus(final int code) { - // TODO Auto-generated method stub - response.setStatus(code); - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/util/JAXWSClassUtils.java b/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/util/JAXWSClassUtils.java deleted file mode 100644 index 4ad2c09e7b..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/java/org/ow2/jonas/ws/jaxws/util/JAXWSClassUtils.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.util; - -import javax.jws.WebService; -import javax.xml.ws.WebServiceProvider; - -/** - * The JAXWSClassUtils is a utility class used to extract informations from the JAXWS annotations. - * - * @author Guillaume Sauthier - */ -public class JAXWSClassUtils { - - /** - * Private default constructor for utility class. - */ - private JAXWSClassUtils() {} - - /** - * @param klass class supporting annotations - * @return true is the given class support @WebService or @WebServiceProvider - */ - public static boolean isWebService(Class klass) { - - return ((klass.getAnnotation(WebService.class) != null) - || (klass.getAnnotation(WebServiceProvider.class) != null)); - } - - /** - * @param klass class supporting annotations - * @return the 'wsdlLocation' attribute's value (from @WebService or @WebServiceProvider) - */ - public static String getWsdlLocation(Class klass) { - WebService ws = getWebService(klass); - if (ws != null) { - return ws.wsdlLocation(); - } - WebServiceProvider wsp = getWebServiceProvider(klass); - if (wsp != null) { - return wsp.wsdlLocation(); - } - - throw new IllegalStateException("Class '" + klass + "' have neither @WebService nor @WebServiceProvider annotation"); - } - - /** - * @param klass class supporting annotations - * @return the 'serviceName' attribute's value (from @WebService or @WebServiceProvider) - */ - public static String getServiceName(Class klass) { - WebService ws = getWebService(klass); - if (ws != null) { - return ws.serviceName(); - } - WebServiceProvider wsp = getWebServiceProvider(klass); - if (wsp != null) { - return wsp.serviceName(); - } - - throw new IllegalStateException("Class '" + klass + "' have neither @WebService nor @WebServiceProvider annotation"); - } - - /** - * @param klass class supporting annotations - * @return the WebService annotation (null if no annotation is found) - */ - private static WebService getWebService(Class klass) { - return klass.getAnnotation(WebService.class); - } - - /** - * @param klass class supporting annotations - * @return the WebServiceProvider annotation (null if no annotation is found) - */ - private static WebServiceProvider getWebServiceProvider(Class klass) { - return klass.getAnnotation(WebServiceProvider.class); - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/resources/META-INF/jonas-webservices-jaxws-core.bnd b/jonas/modules/services/webservices/jaxws/core/src/main/resources/META-INF/jonas-webservices-jaxws-core.bnd deleted file mode 100644 index 9753afc73b..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/resources/META-INF/jonas-webservices-jaxws-core.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008-2009 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: jonas-webservices-axis.bnd 12337 2007-12-13 02:43:26Z benoitf $ -# --------------------------------------------------------------------------- - -# Neets to export individually sub packages because jaxws.* would include API classes -Export-Package org.ow2.jonas.ws.jaxws.base,\ - org.ow2.jonas.ws.jaxws.http.*,\ - org.ow2.jonas.ws.jaxws.handler.*,\ - org.ow2.jonas.ws.jaxws.util.*,\ - org.ow2.jonas.ws.jaxws.client.*,\ - org.ow2.jonas.ws.jaxws.easybeans.* - -Require-JOnAS-Services wsdl-publisher - -Import-Package javax.servlet;version="[2.5.0,3.0.0]",\ - javax.servlet.http;version="[2.5.0,3.0.0]",\ - * diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/resources/org/ow2/jonas/ws/jaxws/base/audit/mbean/mbeans-descriptors.xml b/jonas/modules/services/webservices/jaxws/core/src/main/resources/org/ow2/jonas/ws/jaxws/base/audit/mbean/mbeans-descriptors.xml deleted file mode 100644 index 30eee0abd1..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/resources/org/ow2/jonas/ws/jaxws/base/audit/mbean/mbeans-descriptors.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/jaxws/core/src/main/templates/jonas-jax-ws.properties.template b/jonas/modules/services/webservices/jaxws/core/src/main/templates/jonas-jax-ws.properties.template deleted file mode 100644 index 6c98a654f2..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/main/templates/jonas-jax-ws.properties.template +++ /dev/null @@ -1,13 +0,0 @@ -# -###################### JOnAS JAX-WS 2.x service configuration -# -jonas.services jaxws -# Set the name of the implementation class of the jaxws service -# Note: The jaxws service implementation based on Apache CXF is currently -# the only implementation that pass Java EE TCK. -jonas.service.jaxws.class org.ow2.jonas.ws.cxf.CXFService - -# Note: The jaxws service implementation based on Apache Axis2 is still -# at experimental stage (missing features, not currently TCK tested) -# Use it at your own risks -#jonas.service.jaxws.class org.ow2.jonas.ws.axis2.Axis2Service diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java deleted file mode 100644 index f43772e3b7..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/HelloService.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.ws.axis2.pojo; - -import javax.jws.HandlerChain; -import javax.jws.WebService; - -import org.ow2.jonas.ws.axis2.pojo.word.Word; - - -@WebService(name="HelloService",serviceName="HelloService",wsdlLocation="/WEB-INF/wsdl/TestPojo.wsdl") -@HandlerChain(file="/WEB-INF/handlers.xml", name = "Handler") -public class HelloService { - /** - * - */ - private static final long serialVersionUID = 1L; - - public String greetMe(final Word w) { - // TODO Auto-generated method stub - return "hello" + w.getName(); - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java deleted file mode 100644 index 3ea4c9e40f..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/pojo/word/Word.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.ws.axis2.pojo.word; - -import java.io.Serializable; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = {"id", "name"}) -@XmlRootElement(name = "Word") -public class Word implements Serializable { - - private static final long serialVersionUID = 1L; - - @XmlElement(name = "id", required = true) - int id; - - @XmlElement(name = "name", required = true) - String name; - - public Word() { - this.id = 0; - this.name = null; - } - - public void setId(final int id) { - this.id = id; - } - - public int getId() { - return this.id; - } - - public void setName(final String name) { - this.name = name; - } - - public String getName() { - return this.name; - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterLogicalHandler.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterLogicalHandler.java deleted file mode 100644 index 5d9132522f..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterLogicalHandler.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.ws.axis2.test.handlers; - - -import javax.ejb.EJB; -import javax.xml.ws.handler.LogicalMessageContext; -import javax.xml.ws.handler.MessageContext; - -import org.ow2.jonas.ws.axis2.pojo.HelloService; -import org.ow2.jonas.ws.axis2.pojo.word.Word; - - -public class GreeterLogicalHandler implements javax.xml.ws.handler.LogicalHandler { - - //@Resource(name = "greeting") - //private String greeting; - - @EJB(name="org.ow2.jonas.ws.axis2.test.ejb3.Hello") - HelloService hello; - - public void close(final MessageContext arg0) { - // TODO Auto-generated method stub - System.out.println("CLOSE in LogicalHandler"); - } - - public boolean handleFault(final LogicalMessageContext arg0) { - // TODO Auto-generated method stub - return true; - } - - public boolean handleMessage(final LogicalMessageContext arg0) { - - // TODO Auto-generated method stub - System.out.println("GREATERLogicalHandler HandleMessage"); - //System.out.println(greeting); - Word word = new Word(); - word.setId(0); - word.setName("JOnAS"); - hello.greetMe(word); - - return true; - } -} - - diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterSOAPHandler.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterSOAPHandler.java deleted file mode 100644 index 648f0f5c99..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/axis2/test/handlers/GreeterSOAPHandler.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.ws.axis2.test.handlers; - - -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; -import javax.xml.namespace.QName; -import javax.xml.soap.Node; -import javax.xml.soap.SOAPElement; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -public class GreeterSOAPHandler implements SOAPHandler { - - @Resource - WebServiceContext context = null; - - //@Resource(name = "greeting") - //private String greeting; - - @PostConstruct - public void init() { - System.out.println(this + " init: " + context); - } - - @PreDestroy - public void destroy() { - System.out.println(this + " destroy"); - } - - public void init(final Map config) { - } - - public boolean handleFault(final SOAPMessageContext context) { - System.out.println(this + " handleFault"); - return true; - } - - public void close(final MessageContext context) { - System.out.println("CLOSE in SOAPHandler"); - } - - public boolean handleMessage(final SOAPMessageContext context) { - System.out.println("GREATERSOAPHandler HandleMessage"); - System.out.println(context == null); - System.out.println(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)); - return true; - } - - private SOAPElement findElement(final SOAPElement element, final String name) { - Iterator iter = element.getChildElements(); - while(iter.hasNext()) { - Node child = (Node)iter.next(); - if (child instanceof SOAPElement) { - SOAPElement childEl = (SOAPElement)child; - if (name.equals(childEl.getElementName().getLocalName())) { - return childEl; - } else { - return findElement(childEl, name); - } - } - } - return null; - } - - public Set getHeaders() { - System.out.println(this + " getHeaders"); - return new TreeSet(); - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsClientAuditHandlerTestCase.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsClientAuditHandlerTestCase.java deleted file mode 100644 index 5e1bf5e67f..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsClientAuditHandlerTestCase.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.base.audit; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -import org.ow2.jonas.ws.jaxws.base.audit.JaxwsClientAuditHandler; -import org.ow2.util.auditreport.api.IAuditID; -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.AuditIDImpl; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * A {@code JaxwsClientAuditHandlerTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class JaxwsClientAuditHandlerTestCase { - - private ICurrentInvocationID current; - - @BeforeMethod - public void setUpAuditIdInThreadLocal() throws Exception { - current = CurrentInvocationID.getInstance(); - // Erase any audit ID in place - current.setAuditID(new AuditIDImpl("parent/0:local/0")); - } - - @Test - public void testInvocationIdIsPropagatedIntoHttpHeaders() throws Exception { - Map> headers = new HashMap>(); - SOAPMessageContext context = mock(SOAPMessageContext.class); - - when(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)).thenReturn(Boolean.TRUE); - when(context.get(MessageContext.HTTP_REQUEST_HEADERS)).thenReturn(headers); - - JaxwsClientAuditHandler handler = new JaxwsClientAuditHandler(current); - handler.handleMessage(context); - - String header = headers.get("Invocation-ID").get(0); - assertThat(header, notNullValue()); - - String[] parts = header.split(":"); - assertThat(parts[0], is("local/1")); - } - - @Test - public void testNoChangesForInboundMessage() throws Exception { - SOAPMessageContext context = mock(SOAPMessageContext.class); - IAuditID before = current.getAuditID(); - - when(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)).thenReturn(Boolean.FALSE); - - JaxwsClientAuditHandler handler = new JaxwsClientAuditHandler(current); - handler.handleMessage(context); - - assertThat(current.getAuditID(), is( before )); - } - - @Test - public void testInvocationIdIsIncremented() throws Exception { - Map> headers = new HashMap>(); - SOAPMessageContext context = mock(SOAPMessageContext.class); - - when(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)).thenReturn(Boolean.TRUE); - when(context.get(MessageContext.HTTP_REQUEST_HEADERS)).thenReturn(headers); - - JaxwsClientAuditHandler handler = new JaxwsClientAuditHandler(current); - - // First call - handler.handleMessage(context); - - String header = headers.get("Invocation-ID").get(0); - assertThat(header, notNullValue()); - - String[] parts = header.split(":"); - assertThat(parts[0], is( "local/1" )); - - // Second call - handler.handleMessage(context); - - String header2 = headers.get("Invocation-ID").get(0); - assertThat(header2, notNullValue()); - - String[] parts2 = header2.split(":"); - assertThat(parts2[0], is( "local/2" )); - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsEndpointAuditHandlerTestCase.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsEndpointAuditHandlerTestCase.java deleted file mode 100644 index db91b743e2..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/base/audit/JaxwsEndpointAuditHandlerTestCase.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.base.audit; - -import javax.xml.namespace.QName; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -import org.ow2.util.auditreport.api.ICurrentInvocationID; -import org.ow2.util.auditreport.impl.AuditIDImpl; -import org.ow2.util.auditreport.impl.CurrentInvocationID; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * A {@code JaxwsClientAuditHandlerTestCase} is ... - * - * @author Guillaume Sauthier - */ -public class JaxwsEndpointAuditHandlerTestCase { - - private ICurrentInvocationID current; - - @BeforeMethod - public void setUpAuditIdInThreadLocal() throws Exception { - current = CurrentInvocationID.getInstance(); - // Erase any audit ID in place - current.setAuditID(new AuditIDImpl("parent/0:local/0")); - } - - @Test - public void testReportGeneration() throws Exception { - SOAPMessageContext context = mock(SOAPMessageContext.class); - QName description = new QName("uri:test", "description"); - QName service = new QName("uri:test", "service"); - QName port = new QName("uri:test", "port"); - QName operation = new QName("uri:test", "operation"); - - // First call: inbound, then outbound - when(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)).thenReturn(Boolean.FALSE, Boolean.TRUE); - when(context.get(MessageContext.WSDL_DESCRIPTION)).thenReturn(description); - when(context.get(MessageContext.WSDL_SERVICE)).thenReturn(service); - when(context.get(MessageContext.WSDL_PORT)).thenReturn(port); - when(context.get(MessageContext.WSDL_OPERATION)).thenReturn(operation); - - } - -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/jaxws/test/JOnASHandlerResolverTest.java b/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/jaxws/test/JOnASHandlerResolverTest.java deleted file mode 100644 index 449433680a..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/java/org/ow2/jonas/ws/jaxws/test/JOnASHandlerResolverTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.ow2.jonas.ws.jaxws.test; - -import java.util.List; - -import javax.xml.namespace.QName; -import javax.xml.ws.handler.Handler; -import javax.xml.ws.handler.PortInfo; - -import org.ow2.jonas.ws.axis2.pojo.HelloService; -import org.ow2.jonas.ws.jaxws.handler.JOnASHandlerResolver; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class JOnASHandlerResolverTest { - - @BeforeClass - public void setUp() { - } - - @AfterClass - public void tearDown() { - } - - @Test(groups = { "Handler" }) - public void testBasic() { - JOnASHandlerResolver resolver = null; - try { - resolver = new JOnASHandlerResolver(HelloService.class,getClass().getClassLoader()); - } catch (Throwable t) { - t.printStackTrace(); - } - List handlers = null; - - handlers = resolver.getHandlerChain(new TestPortInfo(null, null, null)); - System.out.println(handlers.size()); - - Assert.assertEquals(handlers.size(), 2); - - - - - - /* - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - InputStream in = cl.getResourceAsStream("WEB-INF/handlers.xml"); - - System.out.println(in == null); - HandlerChainsType handlerChains = DescriptionUtils.loadHandlerChains(in); - Assert.assertTrue(in != null); - - Assert.assertEquals(handlerChains.getHandlerChain().size(), 2); - - System.out.println("*********************Start get HandlerChain 1 *********************"); - - System.out.println(getClass()!=null); - System.out.println(getClass().getClassLoader()!=null); - - Class clazz = getClass(); - ClassLoader loader = clazz.getClassLoader(); - JOnASHandlerResolver resolver = new JOnASHandlerResolver(getClass(),getClass().getClassLoader()); - - List handlers = resolver.getHandlerChain(new TestPortInfo(null, null, null)); - - Assert.assertEquals(2, handlers.size()); - */ - } - - private static class TestPortInfo implements PortInfo { - - private String bindingID; - private QName portName; - private QName serviceName; - - public TestPortInfo(final String bindingID, final QName portName, final QName serviceName) { - this.bindingID = bindingID; - this.portName = portName; - this.serviceName = serviceName; - } - - public String getBindingID() { - return this.bindingID; - } - - public QName getPortName() { - return this.portName; - } - - public QName getServiceName() { - return this.serviceName; - } - - } -} diff --git a/jonas/modules/services/webservices/jaxws/core/src/test/resources/WEB-INF/handlers.xml b/jonas/modules/services/webservices/jaxws/core/src/test/resources/WEB-INF/handlers.xml deleted file mode 100644 index 83816da723..0000000000 --- a/jonas/modules/services/webservices/jaxws/core/src/test/resources/WEB-INF/handlers.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - jws:Bar - - GreeterSOAPHandler - org.ow2.jonas.ws.axis2.test.handlers.GreeterSOAPHandler - - - - - - jws:Bar - - GreeterLogicalHandler - org.ow2.jonas.ws.axis2.test.handlers.GreeterLogicalHandler - - - diff --git a/jonas/modules/services/webservices/jaxws/pom.xml b/jonas/modules/services/webservices/jaxws/pom.xml deleted file mode 100755 index 7f84928872..0000000000 --- a/jonas/modules/services/webservices/jaxws/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices-jaxws - pom - JOnAS :: Services :: Web Services :: JAX-WS - - core - - diff --git a/jonas/modules/services/webservices/pom.xml b/jonas/modules/services/webservices/pom.xml deleted file mode 100644 index 31b1193423..0000000000 --- a/jonas/modules/services/webservices/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - org.ow2.jonas - jonas-services - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-webservices - pom - JOnAS :: Services :: Web Services - - - jaxrpc - axis - jaxws - cxf - axis2 - publish - - - diff --git a/jonas/modules/services/webservices/publish/ant/pom.xml b/jonas/modules/services/webservices/publish/ant/pom.xml deleted file mode 100644 index d9d7537859..0000000000 --- a/jonas/modules/services/webservices/publish/ant/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - jonas-webservices-publish - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-publish-ant - bundle - JOnAS :: Services :: Web Services :: Publish :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - - diff --git a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/File.java b/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/File.java deleted file mode 100644 index da0f010ad1..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/File.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.wsdl; - -/** - * Defines a file for WSDL publication. - * @author Florent Benoit - */ -public class File { - - /** - * Directory for publish. - */ - private String dir = null; - - /** - * Class for FileWSDL publisher. - */ - public static final String PUBLISHER_CLASS = "org.ow2.jonas.ws.publish.internal.file.FileWSDLPublisher"; - - /** - * Default encoding. - */ - private static final String DEFAULT_ENCODING = "UTF-8"; - - /** - * User defined encoding. - */ - - private String encoding = DEFAULT_ENCODING; - - /** - * Name of the file. - */ - private String name = null; - - /** - * Gets the directory. - * @return the directory - */ - public String getDir() { - return dir; - } - - /** - * Sets the directory. - * @param dir the directory to set - */ - public void setDir(final String dir) { - this.dir = dir; - } - - /** - * Gets the encoding. - * @return the encoding. - */ - public String getEncoding() { - return encoding; - } - - /** - * Sets the encoding. - * @param encoding the encoding to set. - */ - public void setEncoding(final String encoding) { - this.encoding = encoding; - } - - /** - * Gets the name. - * @return the name. - */ - public String getName() { - return name; - } - - /** - * Sets the name. - * @param name name to set. - */ - public void setName(final String name) { - this.name = name; - } -} diff --git a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/Uddi.java b/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/Uddi.java deleted file mode 100644 index 855b03d239..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/Uddi.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.antmodular.jonasbase.wsdl; - -/** - * Defines a UDDI configuration file for WSDL publication. - * @author Florent Benoit - */ -public class Uddi { - - /** - * Class for RegistryWsdl publisher. - */ - public static final String PUBLISHER_CLASS = "org.ow2.jonas.ws.publish.internal.registry.RegistryWSDLPublisher"; - - /** - * Name of the file. - */ - private String name = null; - - /** - * Username. - */ - private String userName = null; - - /** - * Password. - */ - private String password = null; - - /** - * Organization name. - */ - private String orgName = null; - - /** - * Organization Description. - */ - private String orgDesc = null; - - /** - * Organization Person name. - */ - private String orgPersonName = null; - - /** - * url : lifecyclemanagerURL. - */ - private String lifecyclemanagerURL = null; - - /** - * url : queryManagerURL. - */ - private String queryManagerURL = null; - - /** - * Gets the name. - * @return the name. - */ - public String getName() { - return name; - } - - /** - * Sets the name. - * @param name name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the lifecyclemanagerURL. - */ - public String getLifecyclemanagerURL() { - return lifecyclemanagerURL; - } - - /** - * @param lifecyclemanagerURL The lifecyclemanagerURL to set. - */ - public void setLifecyclemanagerURL(final String lifecyclemanagerURL) { - this.lifecyclemanagerURL = lifecyclemanagerURL; - } - - /** - * @return Returns the orgDesc. - */ - public String getOrgDesc() { - return orgDesc; - } - - /** - * @param orgDesc The orgDesc to set. - */ - public void setOrgDesc(final String orgDesc) { - this.orgDesc = orgDesc; - } - - /** - * @return Returns the orgName. - */ - public String getOrgName() { - return orgName; - } - - /** - * @param orgName The orgName to set. - */ - public void setOrgName(final String orgName) { - this.orgName = orgName; - } - - /** - * @return Returns the orgPersonName. - */ - public String getOrgPersonName() { - return orgPersonName; - } - - /** - * @param orgPersonName The orgPersonName to set. - */ - public void setOrgPersonName(final String orgPersonName) { - this.orgPersonName = orgPersonName; - } - - /** - * @return Returns the password. - */ - public String getPassword() { - return password; - } - - /** - * @param password The password to set. - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * @return Returns the queryManagerURL. - */ - public String getQueryManagerURL() { - return queryManagerURL; - } - - /** - * @param queryManagerURL The queryManagerURL to set. - */ - public void setQueryManagerURL(final String queryManagerURL) { - this.queryManagerURL = queryManagerURL; - } - - /** - * @return Returns the userName. - */ - public String getUserName() { - return userName; - } - - /** - * @param userName The userName to set. - */ - public void setUserName(final String userName) { - this.userName = userName; - } -} diff --git a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/WsdlPublish.java b/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/WsdlPublish.java deleted file mode 100644 index 8fb5f2b418..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/java/org/ow2/jonas/antmodular/jonasbase/wsdl/WsdlPublish.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.jonasbase.wsdl; - -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JOnASBaseTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JReplace; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.JTask; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -/** - * Generates files for WSDL publish. - * @author Florent Benoit - */ -public class WsdlPublish extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger. - */ - private static final String INFO = "[WSDL-Publish] "; - - /** - * Property for WSDL Publishers. - */ - private static final String WSDL_PUBLISHER_PROPERTY = "jonas.service.wsdl-publisher.publishers"; - - /** - * Default property for WSDL publishers. - */ - private static final String TOKEN_WSDLPUBLISHER = WSDL_PUBLISHER_PROPERTY + JTask.SEPARATORS + "file1"; - - /** - * List of files (WSDL publish). - */ - private List files = new ArrayList(); - - /** - * List of uddi (WSDL publish). - */ - private List uddis = new ArrayList(); - - /** - * Add file (wsdl publish). - * @param file properties file - */ - public void addConfiguredFile(final File file) { - files.add(file); - } - - /** - * Add UDDI (wsdl publish). - * @param uddi properties file - */ - public void addConfiguredUddi(final Uddi uddi) { - uddis.add(uddi); - } - - /** - * set files (wsdl publish). - * @param files list of properties file - */ - public void setFiles(final List files) { - this.files = files; - } - - /** - * set uddis (wsdl publish). - * @param uddis list of properties uddi file - */ - public void setUddis(final List uddis) { - this.uddis = uddis; - } - - /** - * Execute this task. - */ - public void execute() { - super.execute(); - - String fileNameList = ""; - JTask jtask = new JTask(); - jtask.setDestDir(destDir); - - java.io.File jonasBaseConfDir = new java.io.File(this.destDir.getPath() + java.io.File.separator + "conf"); - - // Write file Publisher - for (Iterator it = files.iterator(); it.hasNext();) { - File f = it.next(); - - String dir = f.getDir(); - String encoding = f.getEncoding(); - String name = f.getName(); - - // Add file to handler list - if (fileNameList.length() == 0) { - fileNameList = name; - } else { - fileNameList += "," + name; - } - - String fileName = name + ".properties"; - - // Build properties file and write it - Properties props = new Properties(); - props.put("jonas.service.wsdl.class", File.PUBLISHER_CLASS); - props.put("jonas.service.publish.file.directory", dir); - props.put("jonas.service.publish.file.encoding", encoding); - java.io.File writeFile = new java.io.File(jonasBaseConfDir, fileName); - log(INFO + "Generating a WSDL publish file with name '" + name + "', dir '" + dir + "' and encoding '" - + encoding + "' in file '" + writeFile + "'..."); - jtask.writePropsToFile(INFO, props, writeFile); - - } - - // Write Uddi Publisher - for (Iterator it = uddis.iterator(); it.hasNext();) { - Uddi uddi = it.next(); - - String name = uddi.getName(); - String username = uddi.getUserName(); - String password = uddi.getPassword(); - String orgName = uddi.getOrgName(); - String orgDesc = uddi.getOrgDesc(); - String orgPersonName = uddi.getOrgPersonName(); - String lifecyclemanagerURL = uddi.getLifecyclemanagerURL(); - String queryManagerURL = uddi.getQueryManagerURL(); - - // Add file to handler list - if (fileNameList.length() == 0) { - fileNameList = name; - } else { - fileNameList += "," + name; - } - - String fileName = name + ".properties"; - - // Build properties file and write it - Properties props = new Properties(); - props.put("jonas.service.wsdl.class", Uddi.PUBLISHER_CLASS); - props.put("jonas.service.publish.uddi.username", username); - props.put("jonas.service.publish.uddi.password", password); - props.put("jonas.service.publish.uddi.organization.name", orgName); - props.put("jonas.service.publish.uddi.organization.desc", orgDesc); - props.put("jonas.service.publish.uddi.organization.person_name", orgPersonName); - props.put("javax.xml.registry.lifeCycleManagerURL", lifecyclemanagerURL); - props.put("javax.xml.registry.queryManagerURL", queryManagerURL); - java.io.File writeFile = new java.io.File(jonasBaseConfDir, fileName); - log(INFO + "Generating a WSDL publish UDDI with name '" + name + "' in file '" + writeFile + "'..."); - jtask.writePropsToFile(INFO, props, writeFile); - } - - // Now set the handlers to the existing list for the property - JReplace propertyReplace = new JReplace(); - propertyReplace.setProject(getProject()); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setDestDir(new java.io.File(destDir.getPath())); - propertyReplace.setToken(TOKEN_WSDLPUBLISHER); - propertyReplace.setValue(WSDL_PUBLISHER_PROPERTY + JTask.SEPARATORS + fileNameList); - log(INFO + "Adding WSDL Publishers '" + fileNameList + "' in " + JOnASBaseTask.JONAS_CONF_FILE + " file."); - propertyReplace.execute(); - - addTask(jtask); - super.executeAllTask(); - } - -} diff --git a/jonas/modules/services/webservices/publish/ant/src/main/resources/antlib-wsdl.xml b/jonas/modules/services/webservices/publish/ant/src/main/resources/antlib-wsdl.xml deleted file mode 100644 index e2a6ba731d..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/resources/antlib-wsdl.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.properties.template b/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.properties.template deleted file mode 100644 index 428c5fa908..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.properties.template +++ /dev/null @@ -1,3 +0,0 @@ -#Wsdl -wsdl.file.name=file1 -wsdl.file.dir=/tmp/ \ No newline at end of file diff --git a/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.xml b/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.xml deleted file mode 100644 index 6fee2bcc06..0000000000 --- a/jonas/modules/services/webservices/publish/ant/src/main/resources/build-wsdl.xml +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/publish/core/pom.xml b/jonas/modules/services/webservices/publish/core/pom.xml deleted file mode 100644 index b25403db6c..0000000000 --- a/jonas/modules/services/webservices/publish/core/pom.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - jonas-webservices-publish - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-webservices-publish-core - bundle - JOnAS :: Services :: Web Services :: Publish :: Core - - - - org.ow2.bundles - ow2-util-log - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - provided - - - org.ow2.jonas - jonas-services-api - ${project.version} - provided - - - org.ow2.jonas - jonas-deployment - ${project.version} - provided - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-templates - compile - - jar - - - src/main/templates - ${project.build.directory} - templates - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/FileWSDLPublisher.java b/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/FileWSDLPublisher.java deleted file mode 100644 index fb96c78e3b..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/FileWSDLPublisher.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.publish.internal.file; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.charset.IllegalCharsetNameException; -import java.nio.charset.UnsupportedCharsetException; -import java.util.Properties; - -import javax.wsdl.Definition; -import javax.wsdl.WSDLException; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.ws.publish.AbsWSDLPublisher; -import org.ow2.jonas.ws.publish.PublicationInfo; -import org.ow2.jonas.ws.publish.PublishableDefinition; -import org.ow2.jonas.ws.publish.WSDLPublisher; -import org.ow2.jonas.ws.publish.WSDLPublisherException; - -/** - * In charge of publishing a given WSDL in a directory. - * properties :
    - * - jonas.service.publish.file.directory : directory name where WSDLs will be placed (default to JONAS_BASE/wsdls)
    - * - jonas.service.publish.file.encoding : file encoding (default to UTF-8)
    - * - * use the wsdl-publish-directory if provided in jonas descriptors. - * @author Xavier Delplanque - * @author Guillaume Sauthier - */ -public class FileWSDLPublisher extends AbsWSDLPublisher implements WSDLPublisher { - - /** WSDL Directory */ - private File location; - - /** charset */ - private Charset cs; - - /** directory property name */ - private static final String OUTPUT_DIRECTORY = "jonas.service.publish.file.directory"; - - /** encoding mode */ - private static final String ENCODING = "jonas.service.publish.file.encoding"; - - /** logger */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** - * Return a new instance of FileWSDLPublisher. - * - * @param props Properties used to configure FileWSDLPublisher - * - * @throws WSDLPublisherException When Cannot create the directory - * (if it don't exist or not set in property file). - */ - public FileWSDLPublisher(final Properties props) throws WSDLPublisherException { - - String directory = props.getProperty(OUTPUT_DIRECTORY); - - if (directory == null) { - // no directory specified - // use the default one : JONAS_BASE/wsdls - String jonasBase = JProp.getJonasBase(); - directory = new File(jonasBase, "wsdls").getPath(); - } - - String encoding = props.getProperty(ENCODING, "UTF-8"); - - try { - location = new File(directory).getCanonicalFile(); - - if (!location.exists()) { - // if the given file doesn't exist, create it. - location.mkdirs(); - } - - cs = Charset.forName(encoding); - - } catch (IOException ioe) { - throw new WSDLPublisherException( - "cannot find/create the publishing directory '" + directory + "'", - ioe); - } catch (IllegalCharsetNameException icsne) { - throw new WSDLPublisherException( - "Illegal Charset '" + encoding + "'", - icsne); - } catch (UnsupportedCharsetException ucse) { - throw new WSDLPublisherException( - "Charset '" + encoding + "' not supported on this platform.", - ucse); - } - } - - /** - * publish the given wsdl - * @param publishableDefinition the data containing the WSDL file to be - * published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - public void publish(final PublishableDefinition publishableDefinition) throws WSDLPublisherException { - - Definition definition = publishableDefinition.getDefinition(); - PublicationInfo info = publishableDefinition.getPublicationInfo(); - - // build the fully qualified file name for the published wsdl file - String fileName = info.getOriginalWsdlFilename(); - logger.log(BasicLevel.DEBUG, "Attempting to publish '" + fileName + "'"); - - File sLoc = null; - File pubDirectory = info.getPublicationDirectory(); - if (pubDirectory == null) { - // No directory provided, just place the WSDL at the root of - // the directory provided to the Handler - sLoc = location; - } else { - if (pubDirectory.isAbsolute()) { - // absolute directory - sLoc = pubDirectory; - } else { - // relative directory - sLoc = new File(location, pubDirectory.getPath()); - } - } - - try { - sLoc = sLoc.getCanonicalFile(); - - logger.log(BasicLevel.DEBUG, "Publishing into directory '" + sLoc + "'"); - - createDirIfNeeded(sLoc); - // write the wsdl file in the directory - JDefinitionWriter jdw = new JDefinitionWriter(definition, sLoc, cs, fileName); - jdw.write(); - } catch (IOException ioe) { - throw new WSDLPublisherException("Error with writer of file '" - + fileName + "'", ioe); - } catch (WSDLException we) { - throw new WSDLPublisherException("Error with wsdl file '" + fileName - + "' publishing in directory '" + location - + "'", we); - } - } - /** - * Creates the parent of the given file as a directory - * @param file with a parent that must be a directory - * @throws IOException if directory cannot be created - */ - private void createDirIfNeeded(final File file) throws IOException { - if (!file.exists()) { - if (!file.mkdirs()) { - // cannot create directory - throw new IOException("Cannot create directory " + file.getCanonicalPath()); - } - } else if (!file.isDirectory()) { - // parent exists but is not a directory - throw new IOException("Parent " + file.getCanonicalPath() + " already exists but is not a directory."); - } - } - - -} diff --git a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/JDefinitionWriter.java b/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/JDefinitionWriter.java deleted file mode 100644 index 2424653efb..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/file/JDefinitionWriter.java +++ /dev/null @@ -1,262 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.publish.internal.file; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.util.XMLSerializer; -import org.w3c.dom.Document; - -import javax.wsdl.Definition; -import javax.wsdl.Import; -import javax.wsdl.Types; -import javax.wsdl.WSDLException; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.UnknownExtensibilityElement; -import javax.wsdl.extensions.schema.Schema; -import javax.wsdl.extensions.schema.SchemaImport; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.nio.charset.Charset; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -/** - * Wrote the given Definition and all imported WSDL to the given base directory. - * @author Guillaume Sauthier - */ -public class JDefinitionWriter { - - /** WSDL Directory */ - private File base; - - /** charset */ - private Charset cs; - - /** Definition to write */ - private Definition definition; - - /** base WSDL filename */ - private String filename; - - /** logger */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** - * Constructs a new JDefinitionWriter that will wrote the given Definition - * and all imported WSDL to the given base directory. - * @param def base Definition - * @param context Context where file should be wrote (MUST exists) - * @param cs Charset to use - * @param filename base Definition filename - */ - public JDefinitionWriter(Definition def, File context, Charset cs, String filename) { - if (!context.exists()) { - throw new IllegalArgumentException("Context MUST exists : " + context); - } - this.definition = def; - if (context.isDirectory()) { - this.base = context; - } else { - this.base = context.getParentFile(); - } - this.cs = cs; - this.filename = filename; - } - - /** - * Write the given Definition into the base directory - * @throws IOException if a file or directory cannot be created - * @throws WSDLException if WSDLWriter is not able to write its Definition - */ - public void write() throws IOException, WSDLException { - - // Write the main definition as-is - writeDefinition(definition, base, filename); - - // Then, handle imports of this definition - writeWsdlImports(); - - // Finally, write the imported types of this definition - writeXsdImports(); - } - - /** - * Write to the FS the imported schema documents (imported using - * the xsd:import element). - * @throws IOException if writing failed - */ - private void writeXsdImports() throws IOException { - - Types types = definition.getTypes(); - if (types != null) { - List extList = types.getExtensibilityElements(); - for (Iterator extIt = extList.iterator(); extIt.hasNext();) { - ExtensibilityElement ext = (ExtensibilityElement) extIt.next(); - - if (ext instanceof Schema) { - // schema handling - Schema schema = (Schema) ext; - Map> imports = schema.getImports(); - if (imports != null) { - for (Vector list : imports.values()) { - - for(SchemaImport imported : list) { - String uri = imported.getSchemaLocationURI(); - - // Exclude absolute imports - if ((uri != null) && !uri.startsWith("http://")) { - Document doc = imported.getReferencedSchema().getElement().getOwnerDocument(); - File dir = new File(base, filename).getCanonicalFile().getParentFile(); - writeDocument(doc, dir, uri); - } - } - } - } - } - } - } - } - - /** - * Write to the FileSystem all the documents imported (using the - * wsdl:import element) - * @throws IOException If writing fails - * @throws WSDLException if WSDLWriter creation failed - */ - private void writeWsdlImports() throws IOException, WSDLException { - Map imports = definition.getImports(); - for (Iterator ns = imports.keySet().iterator(); ns.hasNext();) { - // for each nsURI, we have a List of Import - String uri = (String) ns.next(); - List importeds = (List) imports.get(uri); - // for each import related to the given ns - for (Iterator imp = importeds.iterator(); imp.hasNext();) { - Import imported = (Import) imp.next(); - - // create a resolved URL to know if the import is relative or - // not to the publish - String locURI = imported.getLocationURI(); - if (!locURI.startsWith("http://")) { - // locResolvedURL starts with the publish URI, so it's a - // relative import - // and we should wrote it. - Definition impDef = imported.getDefinition(); - if (locURI.toLowerCase().endsWith("wsdl")) { - // if we have another WSDL - JDefinitionWriter jdw = new JDefinitionWriter(impDef, new File(base, filename).getCanonicalFile(), cs, locURI); - jdw.write(); - } else { - // Assume this is a types import - Types types = impDef.getTypes(); - if (types != null) { - List extList = types.getExtensibilityElements(); - for (Iterator extIt = extList.iterator(); extIt.hasNext();) { - ExtensibilityElement ext = (ExtensibilityElement) extIt.next(); - Document doc = null; - - if (ext instanceof Schema) { - // schema handling - Schema schema = (Schema) ext; - doc = schema.getElement().getOwnerDocument(); - } else if (ext instanceof UnknownExtensibilityElement) { - // other XML - UnknownExtensibilityElement unknownExtElem = (UnknownExtensibilityElement) ext; - doc = unknownExtElem.getElement().getOwnerDocument(); - } - - if (doc != null) { - // we have something to serialize - File dir = new File(base, filename).getCanonicalFile().getParentFile(); - writeDocument(doc, dir, locURI); - } - } - } - } - } - } - } - } - - /** - * @param doc XML Document to write - * @param base storing directory - * @param locURI Document filename (may include directories) - * @throws IOException if OutputStream cannot be created - */ - private void writeDocument(Document doc, File base, String locURI) throws IOException { - XMLSerializer ser = new XMLSerializer(doc); - File file = new File(base, locURI).getCanonicalFile(); - logger.log(BasicLevel.DEBUG, "Writing XML Document in " + file); - createParentIfNeeded(file); - Writer writer = new OutputStreamWriter(new FileOutputStream(file), cs); - ser.serialize(writer); - writer.close(); - } - - /** - * @param def Definition to write (that does not write imported files) - * @param base storing directory - * @param filename Definition filename - * @throws WSDLException if WSDLWriter failed to wrote the Definition - * @throws IOException if OutputStream cannot be created - */ - private void writeDefinition(Definition def, File base, String filename) throws WSDLException, IOException { - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLWriter writer = factory.newWSDLWriter(); - File wsdl = new File(base, filename).getCanonicalFile(); - logger.log(BasicLevel.DEBUG, "Writing WSDL Definition in " + wsdl); - createParentIfNeeded(wsdl); - Writer w = new OutputStreamWriter(new FileOutputStream(wsdl), cs); - writer.writeWSDL(def, w); - w.close(); - } - - /** - * Creates the parent of the given file as a directory - * @param file with a parent that must be a directory - * @throws IOException if directory cannot be created - */ - private void createParentIfNeeded(File file) throws IOException { - File parent = file.getParentFile(); - if (!parent.exists()) { - if (!parent.mkdirs()) { - // cannot create directory - throw new IOException("Cannot create directory " + parent.getCanonicalPath()); - } - } else if (!parent.isDirectory()) { - // parent exists but is not a directory - throw new IOException("Parent " + parent.getCanonicalPath() + " already exists but is not a directory."); - } - } -} \ No newline at end of file diff --git a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/DefaultWSDLPublisherManager.java b/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/DefaultWSDLPublisherManager.java deleted file mode 100644 index 45d8c6f43d..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/DefaultWSDLPublisherManager.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.publish.internal.manager; - -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.jmx.JmxService; -import org.ow2.jonas.lib.service.AbsServiceImpl; -import org.ow2.jonas.lib.util.JonasObjectName; -import org.ow2.jonas.service.ServiceException; -import org.ow2.jonas.ws.publish.PublishableDefinition; -import org.ow2.jonas.ws.publish.WSDLPublisher; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.ow2.jonas.ws.publish.WSDLPublisherManager; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Delegate publishing to all added WSDL Publishers. - * @author Xavier Delplanque - * @author Guillaume Sauthier - */ -public class DefaultWSDLPublisherManager extends AbsServiceImpl implements WSDLPublisherManager { - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(DefaultWSDLPublisherManager.class); - - /** - * List of WSDL Publishers in charge of WSDL Publication - */ - private List publishers; - - /** - * JMX Service. - */ - private JmxService jmxService = null; - - /** - * Get a new instance of WSDLManager. - */ - public DefaultWSDLPublisherManager() { - publishers = new ArrayList(); - } - - /** - * @param param List of WSDL Publishers to create. - */ - public void setPublishers(final String param) { - List handlers = convertToList(param); - - WSDLPublisherFactory factory = WSDLPublisherFactory.newInstance(); - for (String name : handlers) { - // Create the publisher - WSDLPublisher publisher = null; - try { - publisher = factory.newPublisher(name); - } catch (WSDLPublisherException e) { - logger.info("Cannot add the new WSDLPublisher '{0}'", name, e); - } - - logger.debug("Adding WSDLPublisher ''{0}''", name); - - // Add the created Handler - this.addPublisher(publisher); - } - } - - /** - * Add a new publisher in this manager. - * @param publisher new WSDLPublisher - */ - public void addPublisher(final WSDLPublisher publisher) { - publishers.add(publisher); - } - - /** - * Remove an already registered publisher. - * @param publisher WSDLPublisher to be removed - */ - public void removePublisher(final WSDLPublisher publisher) { - publishers.remove(publisher); - } - - /** - * Delegate publishing to all added WSDL Publishers. - * @param publishableDefinition the data containing the WSDL file to be published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - public void publish(final PublishableDefinition publishableDefinition) throws WSDLPublisherException { - for (WSDLPublisher publisher : publishers) { - publisher.publish(publishableDefinition); - } - } - - /** - * Delegate publishing to all added WSDL Publishers. - * @param publishableDefinitionList a list of data containing the WSDL file to be published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - public void publish(final List publishableDefinitionList) throws WSDLPublisherException { - if (publishableDefinitionList != null) { - for (PublishableDefinition publishableDefinition : publishableDefinitionList) { - for (WSDLPublisher publisher : publishers) { - publisher.publish(publishableDefinition); - } - } - } - } - - /** - * Abstract start-up method to be implemented by sub-classes. - * @throws org.ow2.jonas.service.ServiceException service start-up failed - */ - @Override - protected void doStart() throws ServiceException { - // Load the Descriptors - jmxService.loadDescriptors(getClass().getPackage().getName(), getClass().getClassLoader()); - - // And register MBean - try { - jmxService.registerModelMBean(this, JonasObjectName.wsdlPublisherService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot register MBean for Deployable Monitor service", e); - } - } - - /** - * Abstract method for service stopping to be implemented by sub-classes. - * @throws org.ow2.jonas.service.ServiceException service stopping failed - */ - @Override - protected void doStop() throws ServiceException { - // Unregister MBean - if (jmxService != null) { - try { - jmxService.unregisterModelMBean(JonasObjectName.wsdlPublisherService(getDomainName())); - } catch (Exception e) { - logger.warn("Cannot unregister MBean for Deployable Monitor service", e); - } - } - } - - /** - * @param jmxService the jmxService to set - */ - public void setJmxService(final JmxService jmxService) { - this.jmxService = jmxService; - } -} diff --git a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/WSDLPublisherFactory.java b/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/WSDLPublisherFactory.java deleted file mode 100644 index 175bd913bf..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/manager/WSDLPublisherFactory.java +++ /dev/null @@ -1,213 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.publish.internal.manager; - -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.ws.publish.WSDLPublisher; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Constructor; -import java.util.Properties; - - -/** - * WSDLHandlerFactory is used to dynamically instantiate a WSDLHandler - * from a Property file.
    - * Minimum properties in file :
    - * - jonas.service.wsdl.class : Fully qualified classname to be instanciated - * - * @author Guillaume Sauthier - */ -public class WSDLPublisherFactory { - - /** Classname property. */ - public static final String CLASSNAME = "jonas.service.wsdl.class"; - - /** - * Logger. - */ - private static Log logger = LogFactory.getLog(WSDLPublisherFactory.class); - - /** - * I18n. - */ - private static I18n i18n = I18n.getInstance(WSDLPublisherFactory.class); - - /** - * Construct a new WSDLPublisherFactory. - */ - private WSDLPublisherFactory() { } - - /** - * @return Returns a new WSDLPublisherFactory instance. - */ - public static WSDLPublisherFactory newInstance() { - return new WSDLPublisherFactory(); - } - - /** - * Create a new WSDLPublisher. - * - * @param filename properties filename to be loaded - * - * @return a WSDLPublisher init from properties - * - * @throws WSDLPublisherException when filename is null or cannot be - * loaded (as ClassLoader Resource or as System file) - */ - public WSDLPublisher newPublisher(String filename) - throws WSDLPublisherException { - - Properties props = loadProperties(filename + ".properties"); - - String classname = props.getProperty(CLASSNAME); - - if (classname == null) { - // i18n WSDLPublisherFactory.newHandler.noClassname - String err = i18n.getMessage("WSDLHandlerFactory.newHandler.noClassname", - filename + ".properties"); - logger.error("WSDLHandlerFactory.newHandler.noClassname", filename + ".properties"); - throw new WSDLPublisherException(err); - } - - Object[] pvalues = new Object[] {props}; - Class[] types = new Class[] {Properties.class}; - - // Instanciation - WSDLPublisher publisher = null; - try { - // Can only load WSDLPublishers class accessible from imported package - Class handlerClazz = Class.forName(classname).asSubclass(WSDLPublisher.class); - Constructor handlerConstr = handlerClazz.getConstructor(types); - publisher = handlerConstr.newInstance(pvalues); - } catch (Exception e) { - // i18n WSDLPublisherFactory.newHandler.instantiationFailure - String err = i18n.getMessage("WSDLHandlerFactory.newHandler.instantiationFailure", - filename, - classname); - logger.error("WSDLHandlerFactory.newHandler.instantiationFailure", filename, classname); - throw new WSDLPublisherException(err, e); - } - - return publisher; - } - - /** - * Load Properties from a properties file. - * Try to load the file first as a ClassLoader resource and - * as a File if not found in ClassLoader. - * - * @param filename filename to be loaded - * - * @return the Properties object loaded from filename - * - * @throws WSDLPublisherException if properties cannot be loaded. - */ - private Properties loadProperties(String filename) - throws WSDLPublisherException { - - Properties props = new Properties(); - - InputStream is = getFromClassLoader(filename); - - if (is == null) { - // load from ${jonas.base}/conf - is = getFromFile(JProp.getJonasBase() + File.separator + "conf" + File.separator + filename); - } - - if (is != null) { - try { - props.load(is); - } catch (IOException ioe) { - // !!! i18n WSDLPublisherFactory.loadProperties.ioe - String err = i18n.getMessage("WSDLHandlerFactory.loadProperties.ioe", - filename); - logger.error("WSDLHandlerFactory.loadProperties.ioe", filename); - throw new WSDLPublisherException(err); - } - } else { - // !!! i18n WSDLPublisherFactory.loadProperties.notFound - String err = i18n.getMessage("WSDLHandlerFactory.loadProperties.notFound", - filename); - logger.error("WSDLHandlerFactory.loadProperties.notFound", filename); - throw new WSDLPublisherException(err); - } - - return props; - } - - /** - * Get the file as ClassLoader Resource (can be null if not found). - * - * @param filename the filename searched in the ClassLoader - * - * @return an InputStream from the ClassLoader - */ - private InputStream getFromClassLoader(String filename) { - - String clProps = filename; - - // if filename do not start with a "/" prepend it. - // otherwise, getResourceAsStream will attemps to load it - // from directory of the current package. - if (!clProps.startsWith("/")) { - clProps = "/" + clProps; - } - - return getClass().getResourceAsStream(clProps); - } - - /** - * Get the file as File (can be null if not found). - * - * @param filename the filename searched in the System files. - * - * @return an InputStream from the File - */ - private InputStream getFromFile(String filename) { - - InputStream is = null; - - // Create a file - File file = new File(filename); - try { - is = new FileInputStream(file); - } catch (IOException ioe) { - logger.warn("Cannot load {0} from file system.", filename); - is = null; - } - - return is; - } - -} diff --git a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/registry/RegistryWSDLPublisher.java b/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/registry/RegistryWSDLPublisher.java deleted file mode 100644 index 43074b9edc..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/java/org/ow2/jonas/ws/publish/internal/registry/RegistryWSDLPublisher.java +++ /dev/null @@ -1,447 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ - -package org.ow2.jonas.ws.publish.internal.registry; - -import java.net.MalformedURLException; -import java.net.PasswordAuthentication; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Set; - -import javax.wsdl.Definition; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.xml.registry.BulkResponse; -import javax.xml.registry.BusinessLifeCycleManager; -import javax.xml.registry.BusinessQueryManager; -import javax.xml.registry.Connection; -import javax.xml.registry.ConnectionFactory; -import javax.xml.registry.JAXRException; -import javax.xml.registry.LifeCycleManager; -import javax.xml.registry.RegistryException; -import javax.xml.registry.RegistryService; -import javax.xml.registry.infomodel.Classification; -import javax.xml.registry.infomodel.ClassificationScheme; -import javax.xml.registry.infomodel.Concept; -import javax.xml.registry.infomodel.ExternalLink; -import javax.xml.registry.infomodel.InternationalString; -import javax.xml.registry.infomodel.Key; -import javax.xml.registry.infomodel.Organization; -import javax.xml.registry.infomodel.PersonName; -import javax.xml.registry.infomodel.Service; -import javax.xml.registry.infomodel.ServiceBinding; -import javax.xml.registry.infomodel.SpecificationLink; -import javax.xml.registry.infomodel.User; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.I18n; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.ws.publish.AbsWSDLPublisher; -import org.ow2.jonas.ws.publish.PublicationInfo; -import org.ow2.jonas.ws.publish.PublishableDefinition; -import org.ow2.jonas.ws.publish.WSDLPublisher; -import org.ow2.jonas.ws.publish.WSDLPublisherException; -import org.w3c.dom.Element; - -/** - * Publish a given WSDL Definition into a specified WebServices registry (UDDI/ebXML). - * Use JAXR (only UDDI At this time). - * properties :
    - * - jonas.service.publish.uddi.username : publisher username
    - * - jonas.service.publish.uddi.password : publisher password
    - * - javax.xml.registry.lifeCycleManagerURL : url of the Publish API for a registry
    - * - javax.xml.registry.queryManagerURL : url of the Query API for a registry
    - * - jonas.service.publish.uddi.organization.name : The organisation name
    - * - jonas.service.publish.uddi.organization.desc : The organization description (optionnal)
    - * - jonas.service.publish.uddi.organization.person_name : Primary Contact for the organization
    - * The property file is given 'as is' to the ConnectionFactory, If you want to add some JAXR specific - * properties, add them in this property file. - * - * @author Guillaume Sauthier - */ -public class RegistryWSDLPublisher extends AbsWSDLPublisher implements WSDLPublisher { - - /** - * Standard Publish URL - */ - private static final String PUBLISH_URL_PROP - = "javax.xml.registry.lifeCycleManagerURL"; - - /** - * Standard Inquiry URL - */ - private static final String INQUIRY_URL_PROP - = "javax.xml.registry.queryManagerURL"; - - /** - * JOnAS Username - */ - private static final String USERNAME - = "jonas.service.publish.uddi.username"; - - /** - * JOnAS Password - */ - private static final String PASSWORD - = "jonas.service.publish.uddi.password"; - - /** - * JOnAS Organization name - */ - private static final String ORGANIZATION_NAME - = "jonas.service.publish.uddi.organization.name"; - - /** - * JOnAS Organization description - */ - private static final String ORGANIZATION_DESC - = "jonas.service.publish.uddi.organization.desc"; - - /** - * JOnAS Person under wich WSDL will be published - */ - private static final String PERSON_NAME - = "jonas.service.publish.uddi.organization.person_name"; - - - /** JAXR ConnectionFactory to use */ - private ConnectionFactory connFactory; - - /** username/password pair */ - private PasswordAuthentication passAuth; - - /** list of properties */ - private Properties props; - - /** Publication Logger (special file storing keys) */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws.wsdl"); - - /** Internationalisation tool */ - private static I18n i18n = I18n.getInstance(RegistryWSDLPublisher.class); - - /** - * Constructor : creates a RegistryWSDLHandler object. - * - * @param props uddi.properties file - * - * @throws WSDLPublisherException When some properties are missing - */ - public RegistryWSDLPublisher(final Properties props) throws WSDLPublisherException { - - this.props = props; - - //Check minimal properties - String publishURL = props.getProperty(PUBLISH_URL_PROP); - String queryURL = props.getProperty(INQUIRY_URL_PROP); - String username = props.getProperty(USERNAME); - String password = props.getProperty(PASSWORD); - - // Check if publishURL is an URL - try { - new URL(publishURL); - } catch (MalformedURLException mue) { - String err = i18n.getMessage("RegistryWSDLHandler.constr.mue", publishURL); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err, mue); - } - - try { - new URL(queryURL); - } catch (MalformedURLException mue) { - String err = i18n.getMessage("RegistryWSDLHandler.constr.mue", queryURL); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err, mue); - } - - try { - // Create the ConnectionFactory - connFactory = ConnectionFactory.newInstance(); - connFactory.setProperties(props); - } catch (JAXRException jaxre) { - String err = i18n.getMessage("RegistryWSDLHandler.constr.jaxrException"); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err, jaxre); - } - - // Create the Authentication - if (username != null && password != null) { - passAuth = new PasswordAuthentication(username, password.toCharArray()); - } else { - String err = i18n.getMessage("RegistryWSDLHandler.constr.noCreds"); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err); - } - - // Check organization props - String name = props.getProperty(ORGANIZATION_NAME); - String person = props.getProperty(PERSON_NAME); - if ((name == null) || (person == null)) { - String err = i18n.getMessage("RegistryWSDLPublisher.constr.missingProp"); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err); - } - } - - /** - * publish the given wsdl - * @param publishableDefinition the data containing the WSDL file to be - * published and the publication info - * @throws WSDLPublisherException if an error occurs at the publishing. - */ - public void publish(final PublishableDefinition publishableDefinition) throws WSDLPublisherException { - - Definition definition = publishableDefinition.getDefinition(); - PublicationInfo info = publishableDefinition.getPublicationInfo(); - try { - - // Create the connection - Connection connection = connFactory.createConnection(); - - // Add Credentials - Set creds = new HashSet(); - creds.add(passAuth); - connection.setCredentials(creds); - - // Get the registry Service - RegistryService rs = connection.getRegistryService(); - - // get the Query API Manager - BusinessQueryManager bqm = rs.getBusinessQueryManager(); - - // get the Publish API Manager - BusinessLifeCycleManager blcm = rs.getBusinessLifeCycleManager(); - - // Reference a unique InternationalString - InternationalString is = null; - - // Create the Organization with properties - Organization org = blcm.createOrganization(props.getProperty(ORGANIZATION_NAME)); - String orgDesc = props.getProperty(ORGANIZATION_DESC); - if (orgDesc != null) { - is = blcm.createInternationalString(orgDesc); - org.setDescription(is); - } - User contact = blcm.createUser(); - PersonName pName = blcm.createPersonName(props.getProperty(PERSON_NAME)); - contact.setPersonName(pName); - org.setPrimaryContact(contact); - - Collection services = new ArrayList(); - // Create n Service (1 for each service) - for (Iterator servicesIter = definition.getServices().values().iterator(); - servicesIter.hasNext();) { - - javax.wsdl.Service s = (javax.wsdl.Service) servicesIter.next(); - Service service = blcm.createService(s.getQName().getLocalPart()); - - Element desc = s.getDocumentationElement(); - if (desc != null) { - String description = getDescription(desc); - is = blcm.createInternationalString(description); - service.setDescription(is); - } - - // Create n ServiceBinding (1 for each port) - Collection serviceBindings = new ArrayList(); - for (Iterator portsIter = s.getPorts().values().iterator(); - portsIter.hasNext();) { - - javax.wsdl.Port port = (javax.wsdl.Port) portsIter.next(); - - ServiceBinding binding = blcm.createServiceBinding(); - - Element pDesc = port.getDocumentationElement(); - String pDescription = port.getName(); - if (pDesc != null) { - pDescription += " " + getDescription(pDesc); - } - is = blcm.createInternationalString(pDescription); - binding.setDescription(is); - - // we do not check URL validity because webapps - // are not deployed at this point. - binding.setValidateURI(false); - String url = getEndpoint(port); - binding.setAccessURI(url); - - // Create the Concep for WSDL - Concept concept = blcm.createConcept(null, port.getName() + " Concept", ""); - is = blcm.createInternationalString(pDescription + " Concept"); - concept.setDescription(is); - - ExternalLink extlink = blcm.createExternalLink("file://", - "WSDL"); - extlink.setValidateURI(false); - // !!! Axis specific !!! - extlink.setExternalURI(url + "?JWSDL"); - - concept.addExternalLink(extlink); - - // The Concept is a WSDL Document - ClassificationScheme uddiOrgTypes = - bqm.findClassificationSchemeByName(null, "uddi-org:types"); - Classification wsdlSpecClass = blcm.createClassification(uddiOrgTypes, - "wsdlSpec", - "wsdlSpec"); - concept.addClassification(wsdlSpecClass); - - // save into registry and get key - Collection concepts = new ArrayList(); - concepts.add(concept); - BulkResponse br = blcm.saveConcepts(concepts); - String key = getKey(br); - - // i18n RegistryWSDLPublisher.publish.conceptKey - String msg = i18n.getMessage("RegistryWSDLHandler.publish.conceptKey", - port.getName(), - key); - logger.log(BasicLevel.INFO, msg); - - // get the concept from registry - Concept c = (Concept) bqm.getRegistryObject(key, LifeCycleManager.CONCEPT); - - SpecificationLink specLink = blcm.createSpecificationLink(); - specLink.setSpecificationObject(c); - binding.addSpecificationLink(specLink); - - serviceBindings.add(binding); - } - service.addServiceBindings(serviceBindings); - services.add(service); - } - // Save into the Organisation - org.addServices(services); - - Collection orgs = new ArrayList(); - orgs.add(org); - - BulkResponse br = blcm.saveOrganizations(orgs); - String key = getKey(br); - - // i18n RegistryWSDLPublisher.publish.organisationKey - String msg = i18n.getMessage("RegistryWSDLPublisher.publish.organisationKey", - org, - key); - logger.log(BasicLevel.INFO, msg); - - - } catch (JAXRException jaxre) { - String err = i18n.getMessage("RegistryWSDLHandler.publish.jaxrException"); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err, jaxre); - } - } - - /** - * Return the soap:location of the Port. - * - * @param port the wsdl:port we want the endpoint URL. - * - * @return the endpoint URL. - */ - private String getEndpoint(final javax.wsdl.Port port) { - String url = null; - List ee = port.getExtensibilityElements(); - for (Iterator ext = ee.iterator(); ext.hasNext();) { - ExtensibilityElement elem = (ExtensibilityElement) ext.next(); - if (elem instanceof SOAPAddress) { - SOAPAddress soap = (SOAPAddress) elem; - url = soap.getLocationURI(); - } - } - return url; - } - - /** - * @param e Element containing Description - * @return Returns the desciption of the given Element - */ - private String getDescription(final Element e) { - return e.getFirstChild().getNodeValue(); - } - - /** - * Return the Key contained in the Registry response. - * - * @param br the Registry response - * - * @return the key contained in the response - * - * @throws WSDLPublisherException when no key returned or response - * wraps server side exceptions. - * @throws JAXRException If no Key was returned by the server - */ - private String getKey(final BulkResponse br) - throws WSDLPublisherException, JAXRException { - String keyStr = null; - Collection exceptions = br.getExceptions(); - Key key = null; - if (exceptions == null) { - // save OK - Collection keys = br.getCollection(); - Iterator keyIter = keys.iterator(); - if (keyIter.hasNext()) { - // we have 1 key - key = (Key) keyIter.next(); - keyStr = key.getId(); - } else { - // no key - // i18n RegistryWSDLPublisher.getKey.noKeyReturned - String err = i18n.getMessage("RegistryWSDLHandler.getKey.noKeyReturned"); - logger.log(BasicLevel.ERROR, err); - throw new WSDLPublisherException(err); - } - } else { - - // Exceptions in Server Side - - // i18n RegistryWSDLPublisher.getKey.serverSideExceptions - String err = i18n.getMessage("RegistryWSDLHandler.getKey.serverSideExceptions"); - - // Get Server Side Cause - Iterator exIter = exceptions.iterator(); - Exception cause = null; - if (exIter.hasNext()) { - // we have 1 Exception - cause = (RegistryException) exIter.next(); - } - logger.log(BasicLevel.ERROR, err); - if (cause == null) { - throw new WSDLPublisherException(err); - } else { - throw new WSDLPublisherException(err, cause); - } - } - - return keyStr; - } -} diff --git a/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/file1.properties b/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/file1.properties deleted file mode 100644 index ee1546b012..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/file1.properties +++ /dev/null @@ -1,12 +0,0 @@ -# $Id$ - -# FileWSDLPublisher class -jonas.service.wsdl.class org.ow2.jonas.ws.publish.internal.file.FileWSDLPublisher - -# Directory where WSDLs will be copied -# If not set JONAS_BASE/wsdls will be used -# jonas.service.publish.file.directory /tmp - -# Encoding of the file (In respect with the platform JOnAS is running on) -# If not set default to UTF-8 -jonas.service.publish.file.encoding UTF-8 diff --git a/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/uddi.properties b/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/uddi.properties deleted file mode 100644 index 99f2d808f0..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/jonas-resources/conf/uddi.properties +++ /dev/null @@ -1,17 +0,0 @@ -# $Id$ - -# RegistryWSDLPublisher class -jonas.service.wsdl.class org.ow2.jonas.ws.publish.internal.registry.RegistryWSDLPublisher - -# User name and Password to access Registry -jonas.service.publish.uddi.username jonas -jonas.service.publish.uddi.password jonas - -# Organization name, small desc (optionnal) and primary contact name. -jonas.service.publish.uddi.organization.name OW2 -jonas.service.publish.uddi.organization.desc OW2 Consortium (http://www.ow2.org) -jonas.service.publish.uddi.organization.person_name JOnAS - -# URLs where Registry can be contacted (Publish an Query APIs) -javax.xml.registry.lifeCycleManagerURL http://localhost:9000/juddi/publish -javax.xml.registry.queryManagerURL http://localhost:9000/juddi/inquiry diff --git a/jonas/modules/services/webservices/publish/core/src/main/resources/META-INF/jonas-webservices-publish-core.bnd b/jonas/modules/services/webservices/publish/core/src/main/resources/META-INF/jonas-webservices-publish-core.bnd deleted file mode 100644 index 994bc3ce5e..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/resources/META-INF/jonas-webservices-publish-core.bnd +++ /dev/null @@ -1,26 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id: jonas-webservices-axis.bnd 12337 2007-12-13 02:43:26Z benoitf $ -# --------------------------------------------------------------------------- - -# All sub-packages are "internal" -Private-Package org.ow2.jonas.ws.publish.internal.* - diff --git a/jonas/modules/services/webservices/publish/core/src/main/resources/metadata.xml b/jonas/modules/services/webservices/publish/core/src/main/resources/metadata.xml deleted file mode 100644 index 630efb6356..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/I18n.properties b/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/I18n.properties deleted file mode 100644 index 61334aa4e6..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/I18n.properties +++ /dev/null @@ -1,15 +0,0 @@ -# $Id$ - -RegistryWSDLHandler.constr.mue=Malformed Url ''{0}'' -RegistryWSDLHandler.constr.jaxrException=Cannot create ConnectionFactory -RegistryWSDLHandler.constr.noCreds=No Credentials for Registry -RegistryWSDLHandler.publish.jaxrException=JAXRException occurs when publishing -RegistryWSDLHandler.publish.conceptKey=Concept of wsdl:port ''{0}'' published with key ''{1}'' -RegistryWSDLHandler.publish.organizationKey=Organization ''{0}'' published with key ''{1}'' -RegistryWSDLHandler.getKey.noKeyReturned=No Key found in BulkResponse -RegistryWSDLHandler.getKey.serverSideExceptions=Server Side Exceptions occurs during publication - -WSDLHandlerFactory.newHandler.noClassname=property 'jonas.service.wsdl.class' not set in ''{0}'' -WSDLHandlerFactory.newHandler.instantiationFailure=Cannot instatiate ''{0}'' as ''{1}'' -WSDLHandlerFactory.loadProperties.ioe=Properties file ''{0}'' not valid -WSDLHandlerFactory.loadProperties.notFound=Properties file ''{0}'' not found in ClassLoader or as File diff --git a/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/mbeans-descriptors.xml b/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/mbeans-descriptors.xml deleted file mode 100644 index ebf46615e7..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/resources/org/ow2/jonas/ws/publish/internal/manager/mbeans-descriptors.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - diff --git a/jonas/modules/services/webservices/publish/core/src/main/templates/jonas-wsdl.properties.template b/jonas/modules/services/webservices/publish/core/src/main/templates/jonas-wsdl.properties.template deleted file mode 100644 index e21ec5ae06..0000000000 --- a/jonas/modules/services/webservices/publish/core/src/main/templates/jonas-wsdl.properties.template +++ /dev/null @@ -1,14 +0,0 @@ -# -###################### JOnAS WSDL Publisher service configuration -# -jonas.services wsdl-publisher -# Set the name of the implementation class of the WSDL Publisher service. -jonas.service.wsdl-publisher.class org.ow2.jonas.ws.publish.internal.manager.DefaultWSDLPublisherManager - -# Set the WSDL Publishers list for WSDL publication -# A minimum of 1 WSDLPublisher is required ! -# This key is set with a coma-separated list of WSDLPublisher properties -# file names (without the '.properties' suffix). -# Ex: file1,uddi (while the properties file names are -# file1.properties and uddi.properties) -jonas.service.wsdl-publisher.publishers file1 diff --git a/jonas/modules/services/webservices/publish/pom.xml b/jonas/modules/services/webservices/publish/pom.xml deleted file mode 100644 index 996a30702e..0000000000 --- a/jonas/modules/services/webservices/publish/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - org.ow2.jonas - jonas-webservices - 5.3.0-M7-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.ow2.jonas - jonas-webservices-publish - pom - JOnAS :: Services :: Web Services :: Publish - - core - ant - - diff --git a/jonas/modules/services/wrapper/core/pom.xml b/jonas/modules/services/wrapper/core/pom.xml deleted file mode 100644 index 510421fcd7..0000000000 --- a/jonas/modules/services/wrapper/core/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - wrapper - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - wrapper-core - pom - JOnAS :: Services :: Wrapper :: Core - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-windows_service - compile - - jar - - - src/main/jonas-resources/windows_service - ${project.build.directory} - windows_service - - **/.svn/** - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper.conf b/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper.conf deleted file mode 100644 index 37b72349b4..0000000000 --- a/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper.conf +++ /dev/null @@ -1,134 +0,0 @@ -#******************************************************************** -# Wrapper Properties -# -# DO NOT MODIFY THIS FILE, IT WILL BE REGERENATED BY THE ANT TASK. -# -# For extra options, use the wrapper_extra.conf file instead. -# -#******************************************************************** -# Java Application -#wrapper.debug=true -wrapper.java.command=@java.home@/bin/java - -# Java Main class -wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperStartStopApp - -# Java Classpath (wrapper.jar is required) -# Add JOnAS class path elements as needed starting from 2 -wrapper.java.classpath.1=@wrapper.home@/lib/wrapper.jar - -# Java Library Path (location of Wrapper.DLL or libwrapper.so) -wrapper.java.library.path.1=@wrapper.home@/lib - -# Java Additional Parameters -wrapper.java.additional.1=-Dorg.tanukisoftware.wrapper.WrapperStartStopApp.waitForStartMain=FALSE - -# Initial Java Heap Size (in MB) -# set to zero so that -Xms can be set using wrapper.java.additonal -# in the wrapper_ext.conf file. // BUG 304628 -# SET JAVA_OPTS=-Xms before running the ANT task -wrapper.java.initmemory=0 - -# Maximum Java Heap Size (in MB) -# set to zero so that -Xmx can be set using wrapper.java.additonal -# in the wrapper_ext.conf file. // BUG 304628 -# SET JAVA_OPTS=-Xmx before running the ANT task -wrapper.java.maxmemory=0 - -# Port which the native wrapper code will attempt to connect to -wrapper.port=4777 - -#******************************************************************** -# Application parameters. -# -# THESE PARAMETERS SHOULD NOT BE MODIFIED -# -# Parameters in this section specify the Java classes to be run -# and the parameters to the classes. -# The parameters defined in this section will start and stop -# JOnAS using the default server name of 'jonas'. -# wrapper.app.parameter.8 specifies the server name. This value -# can be changed by setting wrapper.app.parameter.8 in the -# wrapper_ext.conf file that is generated by the ANT task. -# -# The parameters below should be identical to those used -# by bin\jonas.bat to start and stop the server. -#******************************************************************** - -# Start parameters -wrapper.app.parameter.1=org.ow2.jonas.commands.admin.ClientAdmin -wrapper.app.parameter.2=1 -wrapper.app.parameter.3=-start - -# Stop parameters -wrapper.app.parameter.4=org.ow2.jonas.commands.admin.ClientAdmin -wrapper.app.parameter.5=false -wrapper.app.parameter.6=1 -wrapper.app.parameter.7=-stop - -#******************************************************************** -# Wrapper Logging Properties -#******************************************************************** -# Format of output for the console. (See docs for formats) -wrapper.console.format=PM - -# Log Level for console output. (See docs for log levels) -wrapper.console.loglevel=INFO - -# Log file to use for wrapper output logging. -wrapper.logfile=@jonas.base@/logs/wrapper.log - -# Format of output for the log file. (See docs for formats) -wrapper.logfile.format=LPTM - -# Log Level for log file output. (See docs for log levels) -wrapper.logfile.loglevel=INFO - -# Maximum size that the log file will be allowed to grow to before -# the log is rolled. Size is specified in bytes. The default value -# of 0, disables log rolling. May abbreviate with the 'k' (kb) or -# 'm' (mb) suffix. For example: 10m = 10 megabytes. -wrapper.logfile.maxsize=0 - -# Maximum number of rolled log files which will be allowed before old -# files are deleted. The default value of 0 implies no limit. -wrapper.logfile.maxfiles=0 - -# Log Level for sys/event log output. (See docs for log levels) -wrapper.syslog.loglevel=NONE - -#******************************************************************** -# Wrapper NT Service Properties -#******************************************************************** -# WARNING - Do not modify any of these properties when an application -# using this configuration file has been installed as a service. -# Please uninstall the service before modifying this section. The -# service can then be reinstalled. - -# Name of the service -wrapper.ntservice.name=JOnAS - -# Display name of the service -wrapper.ntservice.displayname=JOnAS - -# Description of the service -wrapper.ntservice.description=JOnAS Java EE Application Server - -# Service dependencies. Add dependencies as needed starting from 1 -wrapper.ntservice.dependency.1= - -# Mode in which the service is installed. AUTO_START or DEMAND_START -wrapper.ntservice.starttype=AUTO_START - -# Allow the service to interact with the desktop. -wrapper.ntservice.interactive=false - -#******************************************************************** -# include wrapper.conf extensions specific to JONAS_BASE -# -# note that #include is a wrapper directive, not a comment -# -# this will be resolved to JONAS_BASE by the ANT task -#******************************************************************** -#include @jonas.base@/conf/wrapper_extra.conf - diff --git a/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper_extra.conf b/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper_extra.conf deleted file mode 100644 index 3896c5aad9..0000000000 --- a/jonas/modules/services/wrapper/core/src/main/jonas-resources/conf/wrapper_extra.conf +++ /dev/null @@ -1,8 +0,0 @@ -#******************************************************************** -# Wrapper Properties -# -# For information regarding these parameters refer to the -# Java Service Wrapper documentation at -# http://wrapper.tanukisoftware.org/doc/english/properties.html -# -#******************************************************************** diff --git a/jonas/modules/services/wrapper/core/src/main/jonas-resources/windows_service/build.xml b/jonas/modules/services/wrapper/core/src/main/jonas-resources/windows_service/build.xml deleted file mode 100644 index cc42a936ff..0000000000 --- a/jonas/modules/services/wrapper/core/src/main/jonas-resources/windows_service/build.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/services/wrapper/pom.xml b/jonas/modules/services/wrapper/pom.xml deleted file mode 100644 index a997c75990..0000000000 --- a/jonas/modules/services/wrapper/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - jonas-services - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - wrapper - pom - JOnAS :: Services :: Wrapper - - core - - diff --git a/jonas/modules/tools/commands/pom.xml b/jonas/modules/tools/commands/pom.xml deleted file mode 100644 index 77f53dc298..0000000000 --- a/jonas/modules/tools/commands/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-commands - JOnAS :: Tools :: Commands - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.carol - carol - - - org.ow2.jonas.launchers - jonas-launcher - ${project.version} - - - diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIArgument.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIArgument.java deleted file mode 100644 index 174631ff46..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIArgument.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin; - -/** - * Command line argument holder. - */ -public class CLIArgument { - - /** - * Argument type. - */ - public int type; - - /** - * Argument name. - */ - public String value = ""; - - /** - * {@link CLIArgument} constructor. - * @param type argument type - */ - public CLIArgument(final int type) { - this.type = type; - } - - /** - * {@link CLIArgument} constructor. - * @param type argument type - * @param name argument name - */ - public CLIArgument(final int type, final String value) { - this(type); - this.value = value; - } -} \ No newline at end of file diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIConstants.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIConstants.java deleted file mode 100644 index daac1fa060..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/CLIConstants.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin; - -public interface CLIConstants { - - /** - * Static states - */ - public final static int ADDFILE = 101; - - /** - * Remove file state. - */ - public final static int REMOVEFILE = 102; - - /** - * List bean state. - */ - public final static int LISTBEAN = 103; - - /** - * List Jndi state. - */ - public final static int LISTJNDI = 104; - - /** - * List env state. - */ - public final static int LISTENV = 105; - - /** - * List topics state. - */ - public final static int LISTTOPICS = 106; - - /** - * Debug option state. - */ - public final static int DEBUGOPTION = 107; - - /** - * . - */ - public final static int TTOPTION = 108; - - /** - * Sync option state. - */ - public final static int SYNCOPTION = 109; - - /** - * Custom option state. - */ - public final static int CUSTOMOPTION = 110; - - /** - * Passivate option state. - */ - public final static int PASSIVATEOPTION = 111; - - /** - * GC option state. - */ - public final static int GCOPTION = 112; - - /** - * Is deploy option state. - */ - public final static int ISDEPLOYOPTION = 113; - - /** - * Is start option state. - */ - public final static int STARTOPTION = 114; - - /** - * Stop option state. - */ - public final static int STOPOPTION = 115; - - /** - * List module state. - */ - public final static int LISTMODULE = 116; - - /** - * List applications state. - */ - public final static int LISTAPP = 117; - -} \ No newline at end of file diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/ClientAdmin.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/ClientAdmin.java deleted file mode 100644 index 9390b41b4c..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/ClientAdmin.java +++ /dev/null @@ -1,1646 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin; - -import static org.ow2.jonas.commands.admin.CLIConstants.ADDFILE; -import static org.ow2.jonas.commands.admin.CLIConstants.CUSTOMOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.DEBUGOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.GCOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.ISDEPLOYOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTAPP; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTBEAN; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTENV; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTJNDI; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTMODULE; -import static org.ow2.jonas.commands.admin.CLIConstants.LISTTOPICS; -import static org.ow2.jonas.commands.admin.CLIConstants.PASSIVATEOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.REMOVEFILE; -import static org.ow2.jonas.commands.admin.CLIConstants.STARTOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.STOPOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.SYNCOPTION; -import static org.ow2.jonas.commands.admin.CLIConstants.TTOPTION; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.rmi.NotBoundException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import java.util.Set; -import java.util.StringTokenizer; - -import javax.management.Attribute; -import javax.management.MBeanException; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXServiceURL; - -import org.ow2.jonas.commands.admin.util.ExceptionUtils; -import org.ow2.jonas.commands.admin.util.JMXConnectionHelper; -import org.ow2.jonas.commands.admin.util.PrintUtils; -import org.ow2.jonas.launcher.jonas.JOnAS; - - -/** - * This class implements a jmx remote client to administer a JOnAS server. It may be run either in interactive mode or in - * command mode. - * @author Adriana Danes and Philippe Coq - * Contributor(s): Florent Benoit & Ludovic Bert : Methods for wars and ear files - * S. Ali Tokmen : added user name and password options - */ -public class ClientAdmin { - - /** - * Default JOnAS name. - */ - private static final String DEFAULT_NAME = "jonas"; - - /** - * Default JOnAS name. - */ - private static final String JONAS_NAME = "jonas.name"; - - /** - * Default JMX URL prefix. - */ - private static final String JMXSERVICE_URL_PREFIX = "service:jmx:rmi:///jndi/"; - - /** - * System property for standby mode. - */ - private static final String JONAS_STANDBY = "jonas.standby"; - - /** - * $JONAS_ROOT system property. - */ - private static final String JONAS_ROOT = "jonas.root"; - - /** - * $JONAS_BASE system property. - */ - private static final String JONAS_BASE = "jonas.base"; - - /** - * Name of the JOnAS properties file. - */ - private static final String JONAS_FILE = "jonas.properties"; - - /** - * Name of the carol file. - */ - private static final String CAROL_FILE = "carol.properties"; - - /** - * The property in jonas.properties for the username parameter. - */ - private static final String CLIENT_USERNAME = "jonas.adminClient.username"; - - /** - * The property in jonas.properties for the password parameter. - */ - private static final String CLIENT_PASSWORD = "jonas.adminClient.password"; - - /** - * Default timeout (120 seconds). - */ - private static final int DEFAULT_TIMEOUT = 120000; - - /** - * Define one second by loop (sleep value) in milliseconds. - */ - private static final int WAIT_LOOP_MSEC = 1000; - - /** - * Current JOnAS name. - */ - private String jonasName = null; - - /** - * Current domain name. - */ - private String domainName = null; - - /** - * Server object name. - */ - private ObjectName j2eeServerObjectName = null; - - /** - * True if server connection is null. - */ - private boolean isError = false; - - /** - * List of servers where deployment will be done. - */ - private String[] target = null; - - /** - * Quiet option. - */ - private boolean qOption = false; - - /** - * User name to use when connecting. - */ - private String username = null; - - /** - * Password to use when connecting. - */ - private String password = null; - - /** - * Is output verbose ? - */ - private boolean verbose = false; - - /** - * JMX Connection Helper. - */ - private JMXConnectionHelper connection; - - public ClientAdmin(final String[] args) throws Exception { - String fileName = null; - String timeout = null; - String topic = null; - String pingTimeoutValue = null; - String protocol = null; - String registry = null; - String manageableState = "j2ee.state.running"; - - boolean pingOption = false; - boolean startOption = false; - - boolean interactive = true; - List lstArgs = new ArrayList(); - // Get command args - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - boolean nextArgument = argn < args.length - 1; - - // Backward compliance for some tools like Cargo, etc that are using previous halt command - if ("-halt".equals(arg)) { - PrintUtils.warning("The -halt option is deprecated. Use -stop instead."); - arg = "-stop"; - } - - if (arg.equals("-h") || arg.equals("-?")) { - usage(); - System.exit(0); - } - if (arg.equals("-a") && nextArgument) { - fileName = args[++argn]; - CLIArgument ja = new CLIArgument(ADDFILE, fileName); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-ping")) { - pingOption = true; - continue; - } - if (arg.equals("-custom")) { - CLIArgument ja = new CLIArgument(CUSTOMOPTION); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-e")) { - CLIArgument ja = new CLIArgument(LISTENV); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-gc")) { - CLIArgument ja = new CLIArgument(GCOPTION); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-j")) { - CLIArgument ja = new CLIArgument(LISTJNDI); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-l")) { - CLIArgument ja = new CLIArgument(LISTBEAN); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-lmodules")) { - CLIArgument ja = new CLIArgument(LISTMODULE); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-lapps")) { - CLIArgument ja = new CLIArgument(LISTAPP); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-registry") && nextArgument) { - registry = args[++argn]; - continue; - } - if (arg.equals("-protocol") && nextArgument) { - protocol = args[++argn]; - continue; - } - if (arg.equals("-timeout") && nextArgument) { - pingTimeoutValue = args[++argn]; - continue; - } - if (arg.equals("-state") && nextArgument) { - manageableState = args[++argn]; - continue; - } - if (arg.equals("-target") && nextArgument) { - target = makeArrayFrom(args[++argn]); - continue; - } - if (arg.equals("-r") && nextArgument) { - fileName = args[++argn]; - CLIArgument ja = new CLIArgument(REMOVEFILE, fileName); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-stop")) { - CLIArgument ja = new CLIArgument(STOPOPTION); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-start")) { - CLIArgument ja = new CLIArgument(STARTOPTION); - lstArgs.add(ja); - startOption = true; - interactive = false; - continue; - } - if (arg.equals("-standby")) { - System.setProperty(JONAS_STANDBY, "true"); - manageableState = "j2ee.state.stopped"; - continue; - } - if (arg.equals("-sync")) { - CLIArgument ja = new CLIArgument(SYNCOPTION); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-passivate")) { - CLIArgument ja = new CLIArgument(PASSIVATEOPTION); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("--debug-level") && nextArgument) { - topic = args[++argn]; - CLIArgument ja = new CLIArgument(DEBUGOPTION, topic); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-t")) { - CLIArgument ja = new CLIArgument(LISTTOPICS); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-tt") && nextArgument) { - timeout = args[++argn]; - CLIArgument ja = new CLIArgument(TTOPTION, timeout); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-isdeployed") && nextArgument) { - fileName = args[++argn]; - CLIArgument ja = new CLIArgument(ISDEPLOYOPTION, fileName); - lstArgs.add(ja); - interactive = false; - continue; - } - if (arg.equals("-q")) { - qOption = true; - interactive = false; - continue; - } - if (arg.equals("--verbose") || arg.equals("-v")) { - verbose = true; - continue; - } - if (arg.equals("-username")) { - username = args[++argn]; - continue; - } - if (arg.equals("-password")) { - password = args[++argn]; - continue; - } - System.out.println("Bad option: " + arg); - usage(); - System.exit(2); - } - - Properties jonasProperties = new Properties(); - InputStream fis = null; - try { - // Load JOnAS properties - String jonasBase = System.getProperty(JONAS_BASE); - File base = new File(jonasBase); - File conf = new File(base, "conf"); - File jonasPropertiesFile = new File(conf, JONAS_FILE); - fis = new FileInputStream(jonasPropertiesFile); - jonasProperties.load(fis); - } catch (Exception e) { - PrintUtils.failure("Cannot load jonas.properties", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - // TODO no exit here ? - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - // Ignored - } - } - } - - if (System.getProperty(JONAS_NAME) != null) { - jonasName = System.getProperty(JONAS_NAME); - } else { - jonasName = jonasProperties.getProperty(JONAS_NAME); - - if (jonasName == null || jonasName.length() == 0) { - jonasName = DEFAULT_NAME; // default value - } - } - - if (username == null) { - username = jonasProperties.getProperty(CLIENT_USERNAME); - } - if (password == null) { - password = jonasProperties.getProperty(CLIENT_PASSWORD); - } - - JMXServiceURL jmxServiceUrl = initializeJMXConnectionHelper(registry, protocol); - - // Start JOnAS server if not already started - if (startOption && (target == null)) { - boolean isStarted = connection.connect(); - connection.close(); - - if (!isStarted) { - // Launch the framework with a minimal classloader - // This avoids to have client.jar as Thread Context ClassLoader see JONAS-364 - // For example iPOJO threads will have this context classloader - ClassLoader old = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(JOnAS.class.getClassLoader()); - JOnAS jonas = new JOnAS(Boolean.getBoolean("jonas.cache.clean")); - jonas.start(); - } finally { - Thread.currentThread().setContextClassLoader(old); - } - return; - } else if (isStarted && Boolean.getBoolean(JONAS_STANDBY)) { - PrintUtils.error("JOnAS is already on standby."); - return; - } - } - - if (pingOption) { - int pingTimeout = DEFAULT_TIMEOUT; - // if a timeout is set by user, use it. - if (pingTimeoutValue != null) { - try { - pingTimeout = Integer.parseInt(pingTimeoutValue); - } catch (NumberFormatException nfe) { - PrintUtils.warning("Incorrect ping timeout value (" + pingTimeoutValue + "). " + pingTimeout + " will be used instead."); - } - } - // Wait JOnAS server is running - System.exit(waitServerManageable(pingTimeout, manageableState)); - } - - // Now, we're in the administrative mode - // We should try to contact the server - if (!connection.connect()) { - // Cannot connect - Exception e = connection.getLastException(); - PrintUtils.failure("Cannot connect to JOnAS using '" + jmxServiceUrl + "'", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } else { - // Connection was a success - PrintUtils.println("Connected on " + jmxServiceUrl); - - try { - MBeanServerConnection conn = connection.getConnection(); - j2eeServerObjectName = getJ2EEServerObjectName(conn); - domainName = j2eeServerObjectName.getDomain(); - } catch (Exception e) { - if (!pingOption) { - PrintUtils.failure("Cannot administer server '" + jonasName + "'.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - - System.exit(2); - } - } - - // No option => interactive mode. - if (interactive) { - menu(); - } else { - boolean first = true; - boolean forQuiet = qOption; - qOption = true; - for (Iterator i = lstArgs.iterator(); i.hasNext();) { - CLIArgument argument = i.next(); - switch (argument.type) { - case ADDFILE: - // Adds file into JOnAS container - addFile(argument.value); - break; - case REMOVEFILE: - // Remove file from JOnAS container - removeFile(argument.value); - break; - case STARTOPTION: - startServer(); - break; - case STOPOPTION: - stopServer(); - break; - case LISTBEAN: - // List beans in JOnAS container - listBeans(); - break; - case LISTMODULE: - // List beans in JOnAS container - listModules(); - break; - case LISTAPP: - // List beans in JOnAS container - listApps(); - break; - case LISTJNDI: - // List jndi names in JOnAS container - listJNDINames(); - break; - case LISTENV: - // List JOnAS environment - listProperties(); - break; - case LISTTOPICS: - // List Monolog topics - listTopics(); - break; - case DEBUGOPTION: - // set debug for a topic - setTopic(argument.value, "DEBUG"); - break; - case TTOPTION: - // set the default value for transaction timeout - setTTimeout(argument.value); - break; - case SYNCOPTION: - // sync all entity instances outside transactions - sync(false); - break; - case CUSTOMOPTION: - // Custom option - custom(); - break; - case PASSIVATEOPTION: - // passivate all entity instances outside transactions - sync(true); - break; - case GCOPTION: - // run the garbage collector - runGC(); - break; - case ISDEPLOYOPTION: - // is the file deployed ? - isDeployedFile(argument.value); - break; - } - // Keep original functionality w/ first option then add - // header - // lines for each additional command if -q not set. - if (first) { - first = false; - qOption = forQuiet; - } - // Exit if error - if (isError) { - System.exit(2); - } - } - } - - connection.close(); - } - } - - /** - * Main function, creates a new {@link ClientAdmin} instance. - * @param args See {@link ClientAdmin#ClientAdmin(String[])}. - * @throws Exception If any error occurs. - */ - public static void main(final String[] args) throws Exception { - try { - // Add client.jar to the TCCL - // See http://jira.ow2.org/browse/JONAS-35 for details - String jonasRoot = System.getProperty(JONAS_ROOT); - File clientJar = new File(jonasRoot, "lib/client.jar").getAbsoluteFile(); - - if (clientJar.isFile()) { - URL clientJarURL = clientJar.toURI().toURL(); - ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - URLClassLoader clWithClientJar = new URLClassLoader(new URL[] { clientJarURL }, oldCL); - try { - Thread.currentThread().setContextClassLoader(clWithClientJar); - new ClientAdmin(args); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - } else { - // Not an error: Micro JOnAS - new ClientAdmin(args); - } - - - } catch (SecurityException e) { - Throwable rootCause = ExceptionUtils.getRootCause(e); - PrintUtils.error("This JOnAS server's JMX server requires credentials."); - if (rootCause instanceof NotBoundException) { - PrintUtils.error("JMX security seems not to be configured properly."); - PrintUtils.error("Please check that in the jaas.config, the declaration for your JMX security"); - PrintUtils.error("authenticator (default name is jaas-jmx) has its serverName attribute with the"); - PrintUtils.error("same name as your server's name.", rootCause); - } else { - PrintUtils.error("Please use the -username and -password options to provide them.", rootCause); - } - - // Log the trace if in verbose mode - // As args are not parsed at this level, we have to - // search the --verbose flag manually - List list = Arrays.asList(args); - if (list.contains("-v") || list.contains("--verbose")) { - PrintUtils.println(e); - } - - System.exit(2); - } - } - - /** - * Initialize the JMXConnectionHelper using provided parameters or the Carol properties by default. - * @param registry User defined registry (can be null) - * @param protocol User defined protocol (can be null) - * @return The MBeanServer remote URL - */ - private JMXServiceURL initializeJMXConnectionHelper(String registry, String protocol) { - Properties carolProperties = new Properties(); - InputStream fis = null; - try { - // Load Carol properties - String jonasBase = System.getProperty(JONAS_BASE); - File base = new File(jonasBase); - File conf = new File(base, "conf"); - File carolPropertiesFile = new File(conf, CAROL_FILE); - fis = new FileInputStream(carolPropertiesFile); - carolProperties.load(fis); - } catch (Exception e) { - PrintUtils.failure("Cannot load carol.properties", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - // TODO no exit here ? - } finally { - if (fis != null) { - try { - fis.close(); - } catch (IOException e) { - // Ignored - } - } - } - - if (protocol == null) { - String protocols = carolProperties.getProperty("carol.protocols"); - // Take the first protocol of the list - protocol = protocols.split(",")[0]; - } - - if (registry == null) { - registry = carolProperties.getProperty("carol." + protocol + ".url"); - } - String urlPrefix = JMXSERVICE_URL_PREFIX; - if ("iiop".equals(protocol)) { - urlPrefix = urlPrefix.replace("rmi", "iiop"); - } - String serviceUrl = urlPrefix.concat(registry).concat("/").concat(protocol).concat("connector_").concat(jonasName); - - JMXServiceURL jmxServiceUrl = null; - - try { - jmxServiceUrl = new JMXServiceURL(serviceUrl); - } catch (MalformedURLException e) { - PrintUtils.error("Cannot administer server " + jonasName + " because of incorrect JMX URL", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - - System.exit(2); - } - - connection = new JMXConnectionHelper(jmxServiceUrl, username, password); - - return jmxServiceUrl; - } - - private void runGC() { - if (!qOption) { - System.out.println("Run GC:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - String operationName = "runGC"; - Object[] params = null; - String[] signature = null; - try { - conn.invoke(j2eeServerObjectName, operationName, params, signature); - } catch (Exception e) { - PrintUtils.error("Can't run GC in server " + jonasName + ". JMX Problem with MBean " + j2eeServerObjectName, - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - private MBeanServerConnection getConnection() { - try { - return connection.getConnection(); - } catch (IOException e) { - PrintUtils.error("Unable to connect to " + connection.getURL(), - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - return null; - } - - private void custom() { - if (!qOption) { - System.out.println("Custom:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - System.out.println(UtilAdmin.dumpCustom(domainName, jonasName, conn)); - } catch (Exception e) { - PrintUtils.error("Cannot dump custom infos.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - isError = true; - return; - } - System.out.println(""); - } - - /** - * Make an Array of OBJECT_NAMEs. - * @param line A comma separated list of names - * @return Array of String-ified object names - */ - private String[] makeArrayFrom(final String line) { - StringTokenizer stk = new StringTokenizer(line, ","); - int nb = stk.countTokens(); - String[] ret = new String[nb]; - for (int i = 0; i < nb; i++) { - ret[i] = stk.nextToken(); - } - return ret; - } - - /** - * Client usage description. - */ - private void usage() { - System.out.println("usage : jonas admin "); - System.out.println("if no option(except -n), mode is interactive."); - System.out.println("list of available options:"); - System.out.println(" -n name : to identify an JOnAS Server"); - System.out.println(" -username username : user name to use when connecting"); - System.out.println(" -password password : password to use when connecting"); - System.out.println(" -registry : to define registry address"); - System.out.println(" -protocol : to define protocol"); - System.out.println(" -start : starts the current JOnAS server."); - System.out.println(" -stop : stops the current JOnAS server."); - System.out.println(" -l : lists beans currently in the JOnAS Server."); - System.out.println(" -lmodules : lists J2EEModules currently in the JOnAS Server."); - System.out.println(" -lapps : lists J2EEApplications currently in the JOnAS Server."); - System.out.println(" -j : lists registered JNDI names."); - System.out.println(" -e : lists JOnAS properties currently used by the JOnAS Server."); - System.out.println(" -a fileName : dynamically adds : - beans from fileName in a new container"); - System.out.println(" : - servlets from a WAR file"); - System.out.println(" : - j2ee application from an EAR file"); - System.out.println(" : - resource adapter from a RAR file"); - System.out.println(" -r fileName : dynamically remove : - beans from container fileName"); - System.out.println(" : - servlets of a WAR file"); - System.out.println(" : - j2ee application of an EAR file"); - System.out.println(" : - resource adapter from a RAR file"); - System.out.println(" -sync: synchronize all entities"); - System.out.println(" -passivate: passivate all entities"); - System.out.println(" -gc: run the garbage collector"); - System.out.println(" -tt timeout: set default transaction timeout"); - System.out.println(" -target target: set target for commands (default is local server)"); - System.out.println(" -start: Start servers designed by '-target' arg"); - System.out.println(" -stop: Stop servers designed by '-target' arg"); - System.out.println(" -start [-standby] -target target: Start servers designed by '-target' arg"); - System.out.println(" -stop [-standby] -target target: Stop servers designed by '-target' arg"); - System.out.println(" -ping [-timeout ] [-state ]: ping server for milliseconds"); - System.out.println(" until it reaches state "); - System.out.println(" Default timeout is 2 minutes = 120 seconds = 120000 milliseconds"); - System.out.println(" -t list monolog topics"); - System.out.println(" --debug-level topic : set DEBUG for a monolog topic"); - System.out.println(" -q : quiet mode, no processing header information."); - System.out.println(" -v | --verbose : Verbose mode (Show stack traces)."); - System.out.println(" -h : help message."); - System.out.println(" -? : help message."); - } - - /** - * interactive mode menu. - */ - private void menu() throws IOException { - // User interface - BufferedReader inbuf = new BufferedReader(new InputStreamReader(System.in)); - while (true) { - System.out.print("Admin (" + jonasName + ") > "); - String command = inbuf.readLine(); - if (command == null || command.length() == 0) { - continue; - } - if ("addfile".startsWith(command)) { - String fName = null; - System.out.print("file name ? > "); - if ((fName = inbuf.readLine()).length() != 0) { - addFile(fName); - } - continue; - } - if ("start".startsWith(command)) { - startServer(); - continue; - } - if ("env".startsWith(command)) { - listProperties(); - continue; - } - if ("gc".startsWith(command)) { - runGC(); - continue; - } - if ("help".startsWith(command) || command.equals("?")) { - help(); - continue; - } - if ("jndinames".startsWith(command)) { - listJNDINames(); - continue; - } - if ("listbeans".startsWith(command)) { - listBeans(); - continue; - } - if ("listmodules".startsWith(command)) { - listModules(); - continue; - } - if ("listapps".startsWith(command)) { - listApps(); - continue; - } - if ("custom".startsWith(command)) { - custom(); - continue; - } - if ("name".startsWith(command)) { - System.out.println("Use the -n option to define the managed server name"); - continue; - } - if ("quit".startsWith(command) || "exit".startsWith(command)) { - return; - } - if ("removefile".startsWith(command)) { - String fName = null; - System.out.print("file name ? > "); - if ((fName = inbuf.readLine()).length() != 0) { - removeFile(fName); - } - continue; - } - if ("trace".startsWith(command)) { - while (true) { - if (listTopics()) { - System.out.print("topic name ? > "); - String tname = inbuf.readLine(); - if (tname == null) { - break; - } - tname = tname.trim(); - if (tname.length() == 0) { - break; - } - System.out.print("topic level ? (DEBUG | WARN | INFO | ERROR | INHERIT) > "); - String levstr = inbuf.readLine(); - if (levstr == null) { - break; - } - levstr = levstr.trim(); - setTopic(tname, levstr); - } else { - break; - } - } - continue; - } - if ("stop".startsWith(command)) { - stopServer(); - continue; - } - if ("sync".startsWith(command)) { - sync(false); - continue; - } - if ("passivate".startsWith(command)) { - sync(true); - continue; - } - if ("ttimeout".startsWith(command)) { - String tstr = null; - System.out.print("transaction timeout in seconds ? > "); - if ((tstr = inbuf.readLine()).length() != 0) { - setTTimeout(tstr); - } - continue; - } - if ("target".startsWith(command)) { - System.out.print("Server or Cluster where to deploy the beans ? > "); - target = makeArrayFrom(inbuf.readLine()); - continue; - } - PrintUtils.error("Unknown command. Type 'help' to list commands."); - } - } - - private void help() { - System.out.println("addfile adds beans/servlets/j2ee app/rars based upon the file extension"); - System.out.println("custom dump jonas customization"); - System.out.println("env JOnAS properties used by the server"); - System.out.println("gc run the garbage collector"); - System.out.println("help help"); - System.out.println("jndinames lists registered JNDI names"); - System.out.println("listbeans lists beans"); - System.out.println("listmodules lists modules"); - System.out.println("listapps lists applications"); - System.out.println("name to identify a current JOnAS server"); - System.out.println("quit quit JonasAdmin"); - System.out.println("removefile remove beans/servlets/j2ee app/rars (based upon the file extension)"); - System.out.println("start start target servers"); - System.out.println("stop stop target servers"); - System.out.println("sync synchronize all entities"); - System.out.println("passivate passivate all entities"); - System.out.println("trace get/set monolog topics"); - System.out.println("ttimeout set default transaction timeout"); - System.out.println("target set list of servers where command must be applied"); - } - - /** - * Check every second if the server is manageable and return when it's OK. The server becomes manageable when its state - * reaches the state passed in parameter. Don't wait more than given timeout (DEFAULT_TIMEOUT if not set). - * @param pingTimeout value to wait - * @param manageableState the given state to reach - */ - private int waitServerManageable(final int pingTimeout, final String manageableState) { - if (pingTimeout <= 0) { - throw new IllegalArgumentException("Timeout should be a value greater than 0"); - } - // State provided by the J2EEServer MBean - String serverState = null; - // Define the number of loops (WAIT_LOOP_MSEC milliseconds by loop) - int loopValue = pingTimeout / WAIT_LOOP_MSEC; - for (int i = 0; i < loopValue; i++) { - try { - // Wait WAIT_LOOP_SEC seconds - Thread.sleep(WAIT_LOOP_MSEC); - } catch (InterruptedException e) { - return 1; - } - - try { - // Try to connect to the server - if ("j2ee.state.stopped".equals(manageableState) && !Boolean.getBoolean(JONAS_STANDBY)) { - if (connection.connect()) { - // JOnAS didn't shutdown yet, close connection to retry - connection.close(); - } else { - // The connection is down and we were waiting for JOnAS - // to shut down, we therefore "reached" - // j2ee.state.stopped - return 2; - } - } else { - if (!connection.connect()) { - continue; - } - - MBeanServerConnection conn = getConnection(); - - // Hmm, we were never connected to the server - // Try to ask for its name - if (j2eeServerObjectName == null) { - j2eeServerObjectName = getJ2EEServerObjectName(conn); - } else { - // If we have one, use it - // get server state - try { - serverState = (String) conn.getAttribute(j2eeServerObjectName, "state"); - if (serverState.equalsIgnoreCase(manageableState)) { - return 0; - } - } catch (Exception e) { - String message = "Cannot administer server " + jonasName + ". Problem with MBean " - + j2eeServerObjectName; - PrintUtils.failure(message, ExceptionUtils.getRootCause(e)); - - if (verbose) { - PrintUtils.println(e); - } - return 2; - } - } - } - } catch (SecurityException e) { - // If a SecurityException is thrown, be careful: when JOnAS is - // starting, the cause of the SecurityException might be a - // NotBoundException or ClassNotFoundException, temporarily. In - // that case, keep on looping as these exceptions should - // disappear as soon as the JOnAS security service is up. - Throwable rootCause = ExceptionUtils.getRootCause(e); - if ((rootCause instanceof NotBoundException) || - (rootCause instanceof ClassNotFoundException)) { - - if (i == loopValue - 1) { - throw e; - } else { - continue; - } - } - } - } - return 1; - } - - /** - * @param conn - */ - private ObjectName getJ2EEServerObjectName(final MBeanServerConnection conn) { - if (j2eeServerObjectName == null) { - try { - Set servers = conn.queryNames(UtilAdmin.J2EEServer(jonasName), null); - if (!servers.isEmpty()) { - // Get the first one - return (ObjectName) servers.iterator().next(); - } - } catch (Exception e) { - // Continue - } - } - return j2eeServerObjectName; - } - - /** - * @param conn - * @param targetName - */ - private ObjectName getServerProxyObjectName(final MBeanServerConnection conn, final String targetName) { - ObjectName result = null; - try { - Set servers = conn.queryNames(UtilAdmin.ServerProxy(targetName), null); - if (!servers.isEmpty()) { - // Get the first one - return (ObjectName) servers.iterator().next(); - } - } catch (Exception e) { - // TODO - } - return result; - } - /** - * This method can add a jar, war, ear or rar file depending on the extension of the file. - * @param fileName name of the .jar file (Case of ejb-jar file) name of the .war file (Case of WAR file) name of the .ear - * file (Case of EAR file) name of the .rar file (Case of RAR file) - */ - private void addFile(final String fileName) { - if (!qOption) { - System.out.println("Add File:" + fileName); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - - String operationName = "deploy"; - String[] params = {fileName}; - String[] signature = {"java.lang.String"}; - try { - conn.invoke(j2eeServerObjectName, operationName, params, signature); - PrintUtils.success("Deployment OK (Check result with listmodules or listapps command)."); - } catch (Exception e) { - PrintUtils.error("Unable to deploy module " + fileName, - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - /** - * This method tells if the given file is deployed or not. - * @param fileName name of the .jar file (Case of ejb-jar file) name of the .war file (Case of WAR file) name of the .ear - * file (Case of EAR file) name of the .rar file (Case of RAR file) - */ - private void isDeployedFile(final String fileName) { - if (!qOption) { - System.out.println("Is File Deployable:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - String operationName = "isDeployed"; - String[] params = {fileName}; - String[] signature = {"java.lang.String"}; - try { - boolean res = (Boolean) conn.invoke(j2eeServerObjectName, operationName, params, signature); - if (res) { - PrintUtils.success("File '" + fileName + "' deployed."); - } else { - PrintUtils.success("File '" + fileName + "' not deployed."); - } - PrintUtils.success("Check result with listmodules or listapps command."); - } catch (Exception e) { - PrintUtils.error("Cannot determine if module '" + fileName + "' is deployed or not", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - /** - * This method can remove beans, war file or ear file depending on the extension of the file. - * @param fileName name of the .jar file (Case of ejb-jar file) name of the .war file (Case of WAR file) name of the .ear - * file (Case of EAR file) name of the .rar file (Case of RAR file) - */ - private void removeFile(final String fileName) { - if (!qOption) { - System.out.println("Remove File: " + fileName); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - String operationName = "undeploy"; - String[] params = {fileName}; - String[] signature = {"java.lang.String"}; - try { - conn.invoke(j2eeServerObjectName, operationName, params, signature); - PrintUtils.success("Undeployment OK (Check result with listmodules or listapps command)."); - } catch (Exception e) { - PrintUtils.error("Cannot undeploy module '" + fileName + "'.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - private void stopServer() { - if (!Boolean.getBoolean(JONAS_STANDBY)) { - haltServer(); - return; - } - - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - if (target == null) { - // Stop the managed server to the STOPPED state - String operationName = "stop"; - Object[] params = null; - String[] signature = null; - try { - System.out.println("Trying to stop and standby server named " + jonasName); - conn.invoke(j2eeServerObjectName, operationName, params, signature); - PrintUtils.success("JOnAS '" + jonasName + "' stopped (Standby mode)."); - } catch (Exception e) { - PrintUtils.error("Can't stop server " + jonasName + " using MBean " + j2eeServerObjectName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } else { - // Stop remote servers via the Domain manager - for (int i = 0; i < target.length; i++) { - String atarget = target[i]; - // check if this target corresponds to a ServerProxy - ObjectName on = getServerProxyObjectName(conn, atarget); - if (on != null) { - // try to start the target via the ServerProxy MBean - String operationName = "stop"; - boolean standby = true; - Boolean standbyObj = Boolean.valueOf(standby); - Object[] params = { - standbyObj - }; - String[] signature = { - "boolean" - }; - try { - System.out.println("Trying to stop and standby target server named " + atarget); - conn.invoke(on, operationName, params, signature); - PrintUtils.success(" Operation done."); - } catch (Exception e) { - PrintUtils.error("Can't stop target server " + atarget + " using MBean " + on + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } - } - } - } - - private void haltServer() { - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - if (target == null) { - // Stop completely the managed server - String operationName = "halt"; - Object[] params = null; - String[] signature = null; - try { - System.out.println("Trying to stop server named " + jonasName); - conn.invoke(j2eeServerObjectName, operationName, params, signature); - PrintUtils.success("JOnAS '" + jonasName + "' stopped (JVM shutdown)."); - } catch (Exception e) { - PrintUtils.error("Can't stop server " + jonasName + " using MBean " + j2eeServerObjectName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } else { - // Stop remote servers via the Domain manager - for (int i = 0; i < target.length; i++) { - String atarget = target[i]; - // check if this target corresponds to a ServerProxy - ObjectName on = getServerProxyObjectName(conn, atarget); - if (on != null) { - // try to stop the target via the ServerProxy MBean - String operationName = "stop"; - boolean standby = false; - Boolean standbyObj = Boolean.valueOf(standby); - Object[] params = {standbyObj}; - String[] signature = {"boolean"}; - try { - System.out.println("You are trying to stop target server named " + atarget); - conn.invoke(on, operationName, params, signature); - PrintUtils.success(" Operation done."); - } catch (Exception e) { - PrintUtils.error("Can't stop target server " + atarget + " using MBean " + on + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } - } - } - } - - private void startServer() { - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - boolean standby = Boolean.getBoolean(JONAS_STANDBY); - if (target == null) { - // Start managed server if stopped - // TODO test server stopped - String operationName = "start"; - Object[] params = null; - String[] signature = null; - try { - System.out.println("Trying to start server named " + jonasName); - conn.invoke(j2eeServerObjectName, operationName, params, signature); - PrintUtils.success("JOnAS '" + jonasName + "' started."); - } catch (Exception e) { - PrintUtils.error("Can't start server " + jonasName + " using MBean " + j2eeServerObjectName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } else { - // Start remote server via the Domain manager - for (int i = 0; i < target.length; i++) { - String atarget = target[i]; - // check if this target corresponds to a ServerProxy - ObjectName on = getServerProxyObjectName(conn, atarget); - if (on != null) { - // try to start the target via the ServerProxy MBean - String operationName = "start"; - Boolean standbyObj = Boolean.valueOf(standby); - Object[] params = {standbyObj}; - String[] signature = {"boolean"}; - try { - System.out.println("Trying to start target server named " + atarget); - conn.invoke(on, operationName, params, signature); - PrintUtils.success(" Operation done."); - } catch (Exception e) { - PrintUtils.error("Can't start target server " + atarget + " using MBean " + on + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - } - } - } - } - - /** - * Get EJB list - */ - private void listBeans() { - if (!qOption) { - System.out.println("ListBeans:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - ArrayList names = UtilAdmin.listBeans(domainName, jonasName, conn); - if (names.size() == 0) { - System.out.println("No beans in " + jonasName); - } else { - for (String name : names) { - System.out.println(name); - } - } - } catch (Exception e) { - PrintUtils.error("Cannot list EJB components.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - isError = true; - return; - } - System.out.println(""); - } - - /** - * Get Modules list - */ - private void listModules() { - if (!qOption) { - System.out.println("ListModules:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - ArrayList names = UtilAdmin.listModules(domainName, jonasName, conn); - if (names.size() == 0) { - System.out.println("No modules in " + jonasName); - } else { - for (String name : names) { - System.out.println(name); - } - } - } catch (Exception e) { - PrintUtils.error("Cannot list deployed Java EE modules.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - isError = true; - return; - } - System.out.println(""); - } - - /** - * Get Applications list - */ - private void listApps() { - if (!qOption) { - System.out.println("ListApplications:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - ArrayList names = UtilAdmin.listApps(domainName, jonasName, conn); - if (names.size() == 0) { - System.out.println("No applications in " + jonasName); - } else { - for (String name : names) { - System.out.println(name); - } - } - } catch (Exception e) { - PrintUtils.error("Cannot list Java EE applications (EAR).", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - isError = true; - return; - } - System.out.println(""); - } - - private void listJNDINames() { - if (!qOption) { - System.out.println("List JndiNames:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - ArrayList ons = UtilAdmin.listJNDIResources(domainName, jonasName, conn); - for (ObjectName on : ons) { - System.out.println(""); - try { - String name = (String) conn.getAttribute(on, "Name"); - String[] names = (String[]) conn.getAttribute(on, "Names"); - System.out.println(name + " names:"); - for (int i = 0; i < names.length; i++) { - System.out.println(names[i]); - } - } catch (MBeanException me) { - PrintUtils.failure("Cannot access MBean attributes values (" + on + ").", - ExceptionUtils.getRootCause(me)); - if (verbose) { - PrintUtils.println(me); - } - - } - } - } catch (Exception e) { - PrintUtils.error("Cannot list bound JNDI names.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - isError = true; - return; - } - System.out.println(""); - } - - private void listProperties() { - if (!qOption) { - System.out.println("ListProperties:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - String operationName = "getConfigFileEnv"; - Object[] params = null; - String[] signature = null; - try { - Properties configProps = (Properties) (conn.invoke(j2eeServerObjectName, operationName, params, signature)); - for (Enumeration e = configProps.keys(); e.hasMoreElements();) { - Object key = e.nextElement(); - Object value = configProps.get(key); - System.out.println(key.toString() + "=" + value.toString()); - } - } catch (Exception e) { - PrintUtils.failure("Can't get properties of server " + jonasName - + ". JMX Problem with MBean " + j2eeServerObjectName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - /** - * - */ - private boolean listTopics() { - if (!qOption) { - System.out.println("List Monolog Topics:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return false; - } - try { - String[] result = UtilAdmin.getTopics(domainName, jonasName, conn); - if (result == null) { - PrintUtils.failure("Can't list Monolog Topics. Didn't found MBean for JOnAS logging management"); - return false; - } - if (result.length == 0) { - System.out.println("No topics in " + jonasName); - } - for (int i = 0; i < result.length; i++) { - String level = UtilAdmin.getTopicLevel(domainName, jonasName, conn, result[i]); - System.out.println(level + "\t" + result[i]); - } - } catch (Exception e) { - PrintUtils.failure("Cannot list Monolog topics.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - - isError = true; - return false; - } - return true; - } - - private void setTopic(final String topic, final String name) { - if (!qOption) { - System.out.println("Set Monolog Topic:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - UtilAdmin.setTopicLevel(domainName, jonasName, conn, topic, name); - } catch (Exception e) { - PrintUtils.failure("Cannot set Monolog topic's level.", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - - isError = true; - } - System.out.println(""); - } - - private void setTTimeout(final String tstr) { - if (!qOption) { - System.out.println("Set TransactionTimeout:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - Integer timeout = new Integer(tstr); - // Use JTA MBean - ObjectName on = UtilAdmin.getJ2eeMBean(domainName, jonasName, "JTAResource", "JTAResource"); - if (conn.isRegistered(on)) { - Attribute att = new Attribute("timeOut", timeout); - conn.setAttribute(on, att); - Integer val = (Integer) conn.getAttribute(on, "timeOut"); - PrintUtils.success("New transaction timeout is " + val + " seconds."); - } - } catch (Exception e) { - PrintUtils.failure("Can't set transaction timeout for server " + jonasName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } - - private void sync(final boolean passivate) { - if (!qOption) { - System.out.println("Sync:"); - } - MBeanServerConnection conn = getConnection(); - if (conn == null) { - isError = true; - return; - } - try { - ObjectName on = UtilAdmin.getJonasServiceMBean(domainName, jonasName, "ejbContainers", null); - String operationName = "syncAllEntities"; - Boolean[] params = {passivate}; - String[] signature = {"boolean"}; - - conn.invoke(on, operationName, params, signature); - } catch (Exception e) { - PrintUtils.failure("Can't synchronize entity beans in server " + jonasName + ".", - ExceptionUtils.getRootCause(e)); - if (verbose) { - PrintUtils.println(e); - } - } - System.out.println(""); - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/UtilAdmin.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/UtilAdmin.java deleted file mode 100644 index 98831fb023..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/UtilAdmin.java +++ /dev/null @@ -1,402 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.commands.admin; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Properties; -import java.util.Set; - -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -/** - * Utility class allowing MBean manipulations on the managed server. - * @author Adriana.Danes@bull.net - */ -public class UtilAdmin { - /** - * Constant used in pattern ObjectNames. - */ - public static final String ALL = ",*"; - public static final String J2EEServer = "J2EEServer"; - public static final String ServerProxy = "ServerProxy"; - public static final String J2EEType = "j2eeType"; - public static final String Type = "type"; - public static final String ServiceType = "service"; - - /** - * Private constructor for utility class. - */ - private UtilAdmin() { - } - /** - * Construct ObjectName for an MBean associated with a manageable object in a J2EEServer. - * @param domain management domain name - * @param server J2EE server name - * @param type manageable object type - * @return created ObjectName - * @throws MalformedObjectNameException Could not create the ObjectName as - */ - private static ObjectName getJ2eeMBean(final String domain, final String server, final String type) throws MalformedObjectNameException { - StringBuilder sb = new StringBuilder(domain); - sb.append(":"); - sb.append(J2EEServer); - sb.append("="); - sb.append(server); - sb.append(","); - sb.append(J2EEType); - sb.append("="); - sb.append(type); - sb.append(ALL); - return ObjectName.getInstance(sb.toString()); - } - - /** - * Construct ObjectName for an MBean associated with a manageable object in a J2EEServer. - * @param domain management domain name - * @param server J2EE server name - * @param type manageable object type - * @param name MBean name - * @return created ObjectName - * @throws MalformedObjectNameException Could not create the ObjectName as - */ - protected static ObjectName getJ2eeMBean(final String domain, final String server, final String type, final String name) throws MalformedObjectNameException { - StringBuilder sb = new StringBuilder(domain); - sb.append(":"); - sb.append(J2EEServer); - sb.append("="); - sb.append(server); - sb.append(","); - sb.append(J2EEType); - sb.append("="); - sb.append(type); - sb.append(","); - sb.append("name="); - sb.append(name); - return ObjectName.getInstance(sb.toString()); - } - - /** - * Create ObjectName for J2EEServer MBean without knowing domain name - * @param serverName the server name - * @return ObjectName for J2EEServer MBean - * @throws MalformedObjectNameException Format exception - * @throws NullPointerException null parameter - */ - public static ObjectName J2EEServer(final String serverName) throws MalformedObjectNameException, NullPointerException { - StringBuilder sb = new StringBuilder("*"); - sb.append(":"); - sb.append(J2EEType); - sb.append("="); - sb.append(J2EEServer); - sb.append(","); - sb.append("name"); - sb.append("="); - sb.append(serverName); - return ObjectName.getInstance(sb.toString()); - } - - /** - * Create ObjectName for ServerProxy MBean without knowing domain name - * @param serverName the server name - * @return ObjectName for ServerProxy MBean - * @throws MalformedObjectNameException Format exception - * @throws NullPointerException null parameter - */ - public static ObjectName ServerProxy(final String serverName) throws MalformedObjectNameException, NullPointerException { - StringBuilder sb = new StringBuilder("*"); - sb.append(":"); - sb.append(Type); - sb.append("="); - sb.append(ServerProxy); - sb.append(","); - sb.append("name"); - sb.append("="); - sb.append(serverName); - return ObjectName.getInstance(sb.toString()); - } - - private static ObjectName J2EEServer(final String domain, final String server) - throws MalformedObjectNameException, NullPointerException { - Hashtable table = new Hashtable(); - table.put(J2EEType, J2EEServer); - table.put("name", server); - return getObjectName(domain, table); - } - - public static ObjectName getJonasServiceMBean(final String domain, final String server, final String service) - throws MalformedObjectNameException, NullPointerException { - StringBuilder sb = new StringBuilder(domain); - sb.append(":"); - sb.append(Type); - sb.append("="); - sb.append(ServiceType); - sb.append(","); - sb.append("name"); - sb.append("="); - sb.append(service); - sb.append(ALL); - return ObjectName.getInstance(sb.toString()); - } - - public static ObjectName getJonasServiceMBean(final String domain, - final String server, - final String service, - final Properties keyProps) - throws MalformedObjectNameException, NullPointerException { - Hashtable table = new Hashtable(); - table.put(Type, "service"); - table.put("name", service); - if (keyProps != null) { - Enumeration keys = keyProps.keys(); - while (keys.hasMoreElements()) { - String key = (String) keys.nextElement(); - String value = keyProps.getProperty(key); - table.put(key, value); - } - } - return getObjectName(domain, table); - } - - /** - * Create an ObjectName instance - * @param domain management domain name - * @param table key properties table - * @return created ObjectName. - * @throws NullPointerException One of the parameters is null. - * @throws MalformedObjectNameException The domain contains an illegal character, or one of the keys or values in table contains - * an illegal character, or one of the values in table does not follow the rules for quoting. - */ - private static ObjectName getObjectName(final String domain, - final Hashtable table) throws MalformedObjectNameException, NullPointerException { - return ObjectName.getInstance(domain, table); - } - /** - * Get the beans name list in a given server - * @param domain the server's domain - * @param server the server name - * @param conn the MBeanServer connection for this server - * @return the list of the bean names - * @throws MalformedObjectNameException should not arrive if we construct correct ObjectName - * @throws IOException A communication problem occurred when talking to the MBean server - */ - public static ArrayList listBeans(final String domain, final String server, final MBeanServerConnection conn) - throws MalformedObjectNameException, IOException { - // Get EntityBeans ObjectNames - String type = "EntityBean"; - ObjectName ons = getJ2eeMBean(domain, server, type); - Set onSet = conn.queryNames(ons, null); - // Get StatefulSessionBeans - type = "StatefulSessionBean"; - ons = getJ2eeMBean(domain, server, type); - Set nextSet = conn.queryNames(ons, null); - onSet.addAll(nextSet); - // Get StatelessSessionBeans - type = "StatelessSessionBean"; - ons = getJ2eeMBean(domain, server, type); - nextSet = conn.queryNames(ons, null); - onSet.addAll(nextSet); - // Get MessageDrivenBeans - type = "MessageDrivenBean"; - ons = getJ2eeMBean(domain, server, type); - nextSet = conn.queryNames(ons, null); - onSet.addAll(nextSet); - - // The set contains all the xxBean ObjectNames - Iterator it = onSet.iterator(); - ArrayList nameList = new ArrayList(); - while (it.hasNext()) { - ObjectName on = it.next(); - String name = on.getKeyProperty("name"); - String module = on.getKeyProperty("EJBModule"); - String printable = module.concat(": "); - printable = printable.concat(name); - nameList.add(printable); - } - return nameList; - } - - /** - * Get the modules name list in a given server - * @param domain the server's domain - * @param server the server name - * @param conn the MBeanServer connection for this server - * @return the list of the module names - * @throws MalformedObjectNameException should not arrive if we construct correct ObjectName - * @throws IOException A communication problem occurred when talking to the MBean server - */ - protected static ArrayList listModules(final String domain, final String server, final MBeanServerConnection conn) - throws MalformedObjectNameException, IOException { - // Get EJBModules - String type = "EJBModule"; - ObjectName ons = getJ2eeMBean(domain, server, type); - Set onSet = conn.queryNames(ons, null); - // Get WebModule - type = "WebModule"; - ons = getJ2eeMBean(domain, server, type); - Set nextSet = conn.queryNames(ons, null); - onSet.addAll(nextSet); - // Get ResourceAdapterModule - type = "ResourceAdaperModule"; - nextSet = conn.queryNames(ons, null); - onSet.addAll(nextSet); - // Got set with the xxModule ObjectNames - Iterator it = onSet.iterator(); - ArrayList nameList = new ArrayList(); - while (it.hasNext()) { - ObjectName on = it.next(); - String name = on.getKeyProperty("name"); - String appName = on.getKeyProperty("J2EEApplication"); - String printable = null; - if (appName != null && appName.equals("none")) { - printable = appName.concat(": "); - } else { - printable = ""; - } - printable = printable.concat(name); - nameList.add(printable); - } - return nameList; - } - - /** - * Get the application name list in a given server - * @param domain the server's domain - * @param server the server name - * @param conn the MBeanServer connection for this server - * @return the list of the application names - * @throws MalformedObjectNameException should not arrive if we construct correct ObjectName - * @throws IOException A communication problem occurred when talking to the MBean server - */ - protected static ArrayList listApps(final String domain, final String server, final MBeanServerConnection conn) - throws MalformedObjectNameException, IOException { - // Get J2EEApplications - // Get J2EEApplications - String type = "J2EEApplication"; - ObjectName ons = getJ2eeMBean(domain, server, type); - Set onSet = conn.queryNames(ons, null); - Iterator it = onSet.iterator(); - ArrayList nameList = new ArrayList(); - while (it.hasNext()) { - ObjectName on = it.next(); - String name = on.getKeyProperty("name"); - nameList.add(name); - } - return nameList; - } - - public static String dumpCustom(final String domain, final String server, final MBeanServerConnection conn) throws Exception { - String ret = ""; - // Get jvm and os info - ObjectName on = J2EEServer(domain, server); - String jvmInfos = (String) conn.getAttribute(on, "jvmInfos"); - ret += jvmInfos; - ret += "\n"; - // Get JTA info - on = getJ2eeMBean(domain, server, "JTAResource", "JTAResource"); - if (conn.isRegistered(on)) { - ret += "TM timeout=" + conn.getAttribute(on, "timeOut"); - ret += "\n"; - } - // Get JDBCDataSource info - ObjectName ons = getJ2eeMBean(domain, server, "JDBCDataSource"); - Set onSet = conn.queryNames(ons, null); - if (!onSet.isEmpty()) { - Iterator it = onSet.iterator(); - while(it.hasNext()) { - on = it.next(); - String dsInfo = on.getKeyProperty("name"); - // TODO - get lockPolicy - String lockPolicy = null; - dsInfo += ":lockPolicy=" + lockPolicy; - dsInfo += ":minPoolSize=" + conn.getAttribute(on, "jdbcMinConnPool"); - dsInfo += ":maxPoolSize=" + conn.getAttribute(on, "jdbcMaxConnPool"); - dsInfo += ":maxOpenTime=" + conn.getAttribute(on, "jdbcMaxOpenTime"); - dsInfo += ":maxWaitTime=" + conn.getAttribute(on, "jdbcMaxWaitTime"); - dsInfo += ":maxWaiters=" + conn.getAttribute(on, "jdbcMaxWaiters"); - dsInfo += ":pstmtMax=" + conn.getAttribute(on, "jdbcPstmtMax"); - dsInfo += "\n"; - ret += dsInfo; - } - } else { - ret += "No DataSources"; - ret += "\n"; - } - return ret; - } - - public static ArrayList listJNDIResources(final String domain, final String server, final MBeanServerConnection conn) throws Exception { - ArrayList res = new ArrayList(); - // Get JNDIResource MBean - ObjectName ons = getJ2eeMBean(domain, server, "JNDIResource"); - Set onSet = conn.queryNames(ons, null); - Iterator it = onSet.iterator(); - while(it.hasNext()) { - res.add(it.next()); - } - return res; - } - - public static String[] getTopics(final String domain, final String server, final MBeanServerConnection conn) throws Exception { - ObjectName ons = getJonasServiceMBean(domain, server, "log"); - Set onSet = conn.queryNames(ons, null); - if (onSet.isEmpty()) { - return null; - } - ObjectName on = (ObjectName) onSet.iterator().next(); - //System.out.println(">> log MBean " + on); - return (String[]) conn.getAttribute(on, "topics"); - } - - public static String getTopicLevel(final String domain, final String server, final MBeanServerConnection conn, final String topic) throws Exception { - ObjectName ons = getJonasServiceMBean(domain, server, "log"); - Set onSet = conn.queryNames(ons, null); - if (onSet.isEmpty()) { - return null; - } - ObjectName on = (ObjectName) onSet.iterator().next(); - String operationName = "getTopicLevel"; - String[] params = {topic}; - String[] signature = {"java.lang.String"}; - return (String) conn.invoke(on, operationName, params, signature); - } - - public static void setTopicLevel(final String domain, final String server, final MBeanServerConnection conn, final String topic, final String level) throws Exception { - ObjectName ons = getJonasServiceMBean(domain, server, "log"); - Set onSet = conn.queryNames(ons, null); - if (onSet.isEmpty()) { - return; - } - ObjectName on = (ObjectName) onSet.iterator().next(); - String operationName = "setTopicLevel"; - String[] params = {topic, level}; - String[] signature = {"java.lang.String", "java.lang.String"}; - conn.invoke(on, operationName, params, signature); - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/ExceptionUtils.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/ExceptionUtils.java deleted file mode 100644 index 51d77414b0..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/ExceptionUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin.util; - -import java.util.Set; -import java.util.HashSet; - -/** - * Exception/Throwable related utility class. - */ -public class ExceptionUtils { - - /** - * Private constructor for utility class. - */ - private ExceptionUtils() {} - - /** - * Get the root cause of an Exception. - * @param throwable the top level exception. - * @return the root cause of the given exception - */ - public static Throwable getRootCause(final Throwable throwable) { - if (throwable == null) { - throw new IllegalStateException("Throwable parameter MUST not be null"); - } - return getRootCause(throwable, new HashSet()); - } - - /** - * Get the deeper cause of the given Throwable. Manage loops. - * @param throwable Traversed item - * @param throwableSet set of already traversed items - * @return the deeper cause available. - */ - private static Throwable getRootCause(final Throwable throwable, - final Set throwableSet) { - - Throwable cause = throwable.getCause(); - - if (cause == null) { - // Return itself, the given throwable is the root cause - return throwable; - } - - if (throwableSet.contains(cause)) { - // There is a loop in the chained Exceptions - // Return the given throwable as it's the most deeper Exception we have - return throwable; - } - - // Add this exception in the list - throwableSet.add(throwable); - // Continue recursion - return getRootCause(cause, throwableSet); - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/JMXConnectionHelper.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/JMXConnectionHelper.java deleted file mode 100644 index a16810427c..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/JMXConnectionHelper.java +++ /dev/null @@ -1,182 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin.util; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.security.auth.Subject; - -/** - * Wrap a {@link JMXConnector}. - * @author Guillaume Sauthier - * @author S. Ali Tokmen - */ -public class JMXConnectionHelper { - - /** - * The MBeanServer remote URL. - */ - private JMXServiceURL url; - - /** - * Security subject (if any). - */ - private Subject subject; - - /** - * User name to use when connecting. - */ - private String username = null; - - /** - * Password to use when connecting. - */ - private String password = null; - - /** - * {@link JMXConnector} instance. - */ - private JMXConnector connector; - - /** - * Store last thrown Exception. - */ - private IOException lastException; - - /** - * Construct a new {@link JMXConnectionHelper} using the provided URL and Subject. - * @param url MBeanServer URL - * @param subject Security subject - */ - public JMXConnectionHelper(final JMXServiceURL url, final Subject subject) { - this.url = url; - this.subject = subject; - } - - /** - * Construct a new {@link JMXConnectionHelper} using the provided URL and credentials. - * @param url MBeanServer URL - * @param username User name to use when connecting - * @param password Password to use when connecting - */ - public JMXConnectionHelper(final JMXServiceURL url, final String username, final String password) { - this.url = url; - this.username = username; - this.password = password; - } - - /** - * Try to connect to the remote {@link MBeanServer}. - * @return true if connection was successful, false otherwise. - */ - public boolean connect() { - if (connector == null) { - try { - connector = createConnector(); - } catch (IOException e) { - lastException = e; - return false; - } - } - return true; - } - - /** - * @return the last thrown Exception. - */ - public Exception getLastException() { - return lastException; - } - - /** - * @return a new {@link JMXConnector} to the remote URL. - * @throws IOException if something was wrong. - */ - private JMXConnector createConnector() throws IOException { - Map env = null; - if(username != null && password != null) { - env = new HashMap(1); - String[] creds = {username, password}; - env.put(JMXConnector.CREDENTIALS, creds); - } - return JMXConnectorFactory.connect(url, env); - } - - /** - * @return an {@link MBeanServerConnection} (authenticatd with subject if not null). - * @throws IOException If connection fails - */ - public MBeanServerConnection getConnection() throws IOException { - if (connector != null) { - return connector.getMBeanServerConnection(subject); - } else { - // Try to connect once - if (connect()) { - return connector.getMBeanServerConnection(subject); - } else { - // No luck, throw an Exception - throw lastException; - } - } - } - - /** - * Close the underlying {@link JMXConnector}. - * @return true if connection was successful - */ - public boolean close() { - if (connector != null) { - try { - connector.close(); - connector = null; - } catch (IOException e) { - lastException = e; - return false; - } - } - return true; - } - - /** - * @param subject the subject to set - */ - public void setSubject(final Subject subject) { - this.subject = subject; - } - - /** - * @return the {@link JMXServiceURL} connection URL - */ - public JMXServiceURL getURL() { - return url; - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/PrintUtils.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/PrintUtils.java deleted file mode 100644 index 872aa14890..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/admin/util/PrintUtils.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.admin.util; - -import java.io.PrintStream; - -/** - * This utility class is responsible of keeping logs coherents. - * Should be used to display informative messages to the user. - */ -public class PrintUtils { - - /** - * Success prefix. - */ - private static final String SUCCESS = "[SUCCESS] "; - - /** - * Failure prefix. - */ - private static final String FAILURE = "[FAILURE] "; - - /** - * Error prefix. - */ - private static final String ERROR = "[ERROR] "; - - /** - * Warning prefix. - */ - private static final String WARNING = "[WARNING] "; - - /** - * Print a message on the given PrintStream. - * @param message displayed message - * @param stream PrintStream used to print the message - */ - public static void println(final String message, - final PrintStream stream) { - stream.println(message); - } - - /** - * Print a message on the System.out PrintStream. - * @param message displayed message - */ - public static void println(final String message) { - println(message, System.out); - } - - /** - * Print the given Throwable on the given PrintStream. - * @param exception displayed exception - * @param stream PrintStream used to print the message - */ - public static void println(final Throwable exception, - final PrintStream stream) { - // TODO Maybe we could format the Throwable appropriately ? only root cause ? - exception.printStackTrace(stream); - } - - /** - * Print the given Throwable on the System.err PrintStream. - * @param exception displayed exception - */ - public static void println(final Throwable exception) { - println(exception, System.err); - } - - /** - * Print a success type message (prefixed with [SUCCESS]) - * on the System.out PrintStream. - * @param message displayed message - */ - public static void warning(final String message) { - println(WARNING + message, System.err); - } - - /** - * Print a success type message (prefixed with [SUCCESS]) - * on the System.out PrintStream. - * @param message displayed message - */ - public static void success(final String message) { - println(SUCCESS + message, System.out); - } - - /** - * Print a failure type message (prefixed with [FAILURE]) - * on the System.err PrintStream. - * @param message displayed message - */ - public static void failure(final String message) { - println(FAILURE + message, System.err); - } - - /** - * Print a failure type message (prefixed with [FAILURE]) - * on the System.err PrintStream and then print the - * cause' message of the given exception. - * @param message displayed message - * @param exception Displayed exception - */ - public static void failure(final String message, final Throwable exception) { - failure(message); - String type = exception.getClass().getSimpleName(); - failure("Cause: [" + type + "] " + exception.getMessage()); - } - - /** - * Print an error type message (prefixed with [ERROR]) - * on the System.err PrintStream. - * @param message displayed message - */ - public static void error(final String message) { - println(ERROR + message, System.err); - } - - /** - * Print an error type message (prefixed with [ERROR]) - * on the System.err PrintStream and then print the - * cause' message of the given exception. - * @param message displayed message - * @param exception Throwable - */ - public static void error(final String message, final Throwable exception) { - error(message); - String type = exception.getClass().getSimpleName(); - error("Cause: [" + type + "] " + exception.getMessage()); - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/check/CheckEnv.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/check/CheckEnv.java deleted file mode 100644 index 00dd28243e..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/check/CheckEnv.java +++ /dev/null @@ -1,301 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.check; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.ServerSocket; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -/** - * This class allows to check if the environment is correct for JOnAS. - * @author Francois Fornaciari - */ -public final class CheckEnv { - - /** - * Constant result of JOnAS's conf check [OK]. - */ - public static final int ENV_OK = 0; - - /** - * Constant result of the JOnAS configuration check [Error]. - */ - public static final int ENV_ERROR = 1; - - /** - * Constant JONAS_ROOT. - */ - private static final String JONAS_ROOT = "jonas.root"; - - /** - * Constant JONAS_BASE. - */ - private static final String JONAS_BASE = "jonas.base"; - - /** - * Constant JORAM deployment plan name. - */ - private static final String JORAM_XML = "joram.xml"; - - /** - * JORAM admin configuration file. - */ - private static final String JORAM_ADMIN_FILE = "joramAdmin.xml"; - - /** - * Property files to check. - */ - private static List propertyFilesToCheck = new ArrayList(); - - /** - * Initialize files to check. - */ - static { - propertyFilesToCheck.add("conf/trace.properties"); - propertyFilesToCheck.add("conf/carol.properties"); - propertyFilesToCheck.add("conf/jonas-realm.xml"); - } - - /** - * Jar files to check. - */ - private static List jarFilesToCheck = new ArrayList(); - - /** - * Initialize jar files to check. - */ - static { - jarFilesToCheck.add("lib/client.jar"); - jarFilesToCheck.add("lib/jonas-client-core.jar"); - jarFilesToCheck.add("lib/bootstrap/client-bootstrap.jar"); - jarFilesToCheck.add("lib/bootstrap/jonas-launcher.jar"); - jarFilesToCheck.add("lib/bootstrap/jonas-commands.jar"); - jarFilesToCheck.add("lib/common/util-ant-tasks.jar"); - jarFilesToCheck.add("lib/common/ow_jonas_ant.jar"); - } - - /** - * Status of the the JOnAS configuration check. - */ - private int envStatus = ENV_OK; - - /** - * JONAS_ROOT. - */ - private String jonasRoot = null; - - /** - * JONAS_BASE. - */ - private String jonasBase = null; - - /** - * Build new instance. - * @param args command arguments - */ - public CheckEnv(final String[] args) { - // Get command arguments - for (String arg : args) { - if (arg.equals("-help") || arg.equals("-?")) { - help(); - System.exit(0); - } - } - - jonasRoot = System.getProperty(JONAS_ROOT); - jonasBase = System.getProperty(JONAS_BASE); - - // Perform the check - envStatus = performCheck(); - if (envStatus == ENV_OK) { - System.out.println("\nThe JOnAS environment seems correct."); - System.exit(0); - } else if (envStatus == ENV_ERROR) { - System.out.println("\nERROR : The JOnAS environment is NOT correct."); - System.exit(2); - } - } - - /** - * Main function, creates a new {@link CheckEnv} instance. - * @param args See {@link CheckEnv#ClientAdmin(String[])}. - */ - public static void main(final String[] args) { - new CheckEnv(args); - } - - /** - * Check the JOnAS's configuration. - * @return check status - */ - public int performCheck() { - envStatus = ENV_OK; - - // Check JOnAS properties - checkJOnASProperties(); - - // Check declared property files - for (String fileName : propertyFilesToCheck) { - if (!fileExists(jonasBase, fileName)) { - System.out.println("ERROR : '" + fileName + "' not accessible in " + jonasBase); - envStatus = ENV_ERROR; - } - } - - // Check declared jar files - for (String fileName : jarFilesToCheck) { - if (!fileExists(jonasRoot, fileName)) { - System.out.println("ERROR : '" + fileName + "' not accessible in " + jonasRoot); - envStatus = ENV_ERROR; - } - } - - // Check JORAM RA configuration - checkJORAM(); - - // Check port availability - checkPortAvailability(); - - return envStatus; - } - - /** - * Check if a file exists. - * @param parent The parent file - * @param fileName The file name - * @return True is the given file is accessible - */ - private boolean fileExists(final String parent, final String fileName) { - return new File(parent, fileName).exists(); - } - - /** - * Print help message. - */ - private void help() { - System.out.println("This command allows to check that the JOnAS environment is correctly set."); - } - - /** - * Get all properties from a file. - * @param fileName the file name - * @return Properties for a given file - */ - private Properties getProperties(final String fileName) { - Properties props = null; - InputStream is = getClass().getClassLoader().getResourceAsStream(fileName); - if (is != null) { - props = new Properties(); - try { - props.load(is); - } catch (IOException e) { - props = null; - } - } - return props; - } - - /** - * Check JOnAS properties. - */ - private void checkJOnASProperties() { - System.out.println("\nChecking jonas.properties file..."); - - try { - // Check jonas.properties file - Properties properties = getProperties("jonas.properties"); - String services = properties.getProperty("jonas.services"); - - if (services != null) { - System.out.println("- jonas.services : " + services); - } else { - System.out.println("ERROR: jonas.services not defined in jonas.properties"); - envStatus = ENV_ERROR; - } - - String jonasContent = properties.toString(); - if (jonasContent.length() == 0) { - System.out.println("ERROR : jonas.properties is empty"); - envStatus = ENV_ERROR; - } - } catch (Exception e) { - System.out.println("ERROR: 'jonas.properties' not accessible (" + e + ")"); - envStatus = ENV_ERROR; - } - } - - /** - * Check JORAM RA configuration. - */ - private void checkJORAM() { - System.out.println("\nChecking JORAM configuration..."); - - File deployDirectory = new File(jonasBase, "deploy"); - if (!new File(deployDirectory, JORAM_XML).exists()) { - System.out.println("ERROR : the file '" + JORAM_XML + "' was not found in JONAS_BASE/deploy directory"); - envStatus = ENV_ERROR; - } - - // Check presence of joramAdmin.xml - File joramAdminFile = new File(jonasBase + File.separator + "conf" + File.separator + JORAM_ADMIN_FILE); - if (!joramAdminFile.exists()) { - System.out.println("ERROR : the file " + JORAM_ADMIN_FILE + " was not found in JONAS_BASE/conf directory"); - envStatus = ENV_ERROR; - } - } - - /** - * Check port availability. - */ - private void checkPortAvailability() { - System.out.println("\nChecking port availability..."); - - Properties carolProperties = getProperties("carol.properties"); - String protocols = carolProperties.getProperty("carol.protocols"); - - int port = -1; - - for (String protocol : protocols.split(",")) { - try { - URI url = new URI(carolProperties.getProperty("carol." + protocol + ".url")); - port = url.getPort(); - ServerSocket sock = new ServerSocket(port); - sock.close(); - } catch (URISyntaxException e) { - System.out.println("ERROR : the URL for the '" + protocol + "' protocol is malformed"); - envStatus = ENV_ERROR; - } catch (IOException e) { - System.out.println("ERROR : the port number " + port + " is already open"); - envStatus = ENV_ERROR; - } - } - } -} diff --git a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/wrapper/GenerateWrapperConf.java b/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/wrapper/GenerateWrapperConf.java deleted file mode 100644 index fa63a70e7c..0000000000 --- a/jonas/modules/tools/commands/src/main/java/org/ow2/jonas/commands/wrapper/GenerateWrapperConf.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.commands.wrapper; - -import java.util.StringTokenizer; -/** - * This class is called by 'jonas start' command to generate - * properties for the Java Service Wrapper configuration file. - */ -public class GenerateWrapperConf -{ - - /** - * Generate property file for Java Service Wrapper. - *

    - * GenerateWrapperConf parses CLASSPATH or an array of JAVA options - * for the current JONAS_BASEW - * into individual property definitions for the Java Service Wrapper - * configuration file. - *

    - *

    -   * Usage: java org.ow2.jonas.commands.wrapper.GenerateWrapperConf
    -   *        [-h | -?] to display usage
    -   *        [-d ] to define delimiter for StringTokenizer
    -   *                          is a string of one or more
    -   *                         characters to be used by StringTokenizer
    -   *        [-i ]     to define initial index for generated property
    -   *                          is the initial value to be appended
    -   *                         to the generated property.name entries
    -   *        property.name    name of property(s) to be generated
    -   *        args             string(s) to be parsed into properties
    -   * 
    - *

    - * Refer to Java Service Wrapper documentation - * for details on configuration file format. - * http://wrapper.tanukisoftware.org - */ - String propertyName = null; - int index = 1; - - /** - * Display command syntax. - */ - void syntax() - { - System.err.println("syntax: GenerateWrapperConf [-d ] [-i ] property.name args"); - System.exit(1); - } - - /** - * Display command syntax with unrecognized command line argument - */ - void syntax(String arg) - { - System.err.println("GenerateWrapperConf: unrecognized argument '" + arg + "'"); - syntax(); - } - - /** - * Display command syntax with exception message - */ - void syntax(Exception e) - { - System.err.println(e.toString()); - syntax(); - } - - /** - * Generate Wrapper.conf property - */ - void generateKey(String val) - { - if (val.contains(" ")) { - int equals = val.indexOf('='); - if (equals == -1) { - // This one should not be escaped, see http://jira.ow2.org/browse/JONAS-36 - System.out.println (propertyName + "." + index + "=" + val); - } else { - // Put the quotes just after the "=" - equals++; - System.out.println (propertyName + "." + index + "=" + val.substring(0, equals) + "\"" + val.substring(equals) + "\""); - } - } else { - System.out.println (propertyName + "." + index + "=" + val); - } - index += 1; - } - - /** - * Process command line args and generate requested - * wrapper.conf property entries to STDOUT. - */ - void run(String[] args) - { - String delimiter = null; - int i = 0; // index into args[] - - for ( ; i < args.length; i++) - { - if (args[i].charAt(0) != '-') break; - try { - switch(args[i].charAt(1)) - { - case 'h': - case '?': - usage(); - - case 'd': - delimiter = args[++i]; - break; - - case 'i': - index = Integer.parseInt(args[++i]); - break; - - default: - syntax(args[i]); - } - } - catch (StringIndexOutOfBoundsException e) { - syntax(args[i]); - } - catch (NumberFormatException e) { - syntax(e); - } - } - - // first positional arg after -d is the property.name - if ((args.length - i) < 2) syntax(); - propertyName = args[i]; - i += 1; - - if (delimiter == null) // process array of individual args - { - for ( ; i < args.length; ++i) generateKey(args[i]); - } - - else // use StringTokenizer to parse single string - { - StringTokenizer st = new StringTokenizer(args[i], delimiter); - while (st.hasMoreTokens()) generateKey(st.nextToken()); - i += 1; - } - - if ((args.length - i) > 0) syntax(); - } - - /** - * run a new instance of the class - */ - public static void main(String[] args) - { - if (args.length == 0) - usage(); - else - new GenerateWrapperConf().run(args); - } - - /** - * Display syntax - */ - private static void usage() - { - System.out.println( - "\nUsage: java org.objectweb.java.tools.GenerateWrapperConf [-h | -?]\n" + - " [-d ] [-i ] property.name args\n" + - "\n" + - " -h or -? display this help message.\n" + - " -d specifies a string of delimiters used to parse\n" + - " args into individual tokens.\n" + - " -i specifies the initial index for generated property\n" + - " values. The default value is 1.\n" + - " property.name specifies the property name to be generated.\n" + - " Property names for the individual tokens are formed\n" + - " as 'property.name.index' where 'index' is incremented\n" + - " for each token.\n" + - " args Either a single string to be parsed using StringTokenizer\n" + - " and the delimiter specified by the -d option.\n" + - " This form is used to process the CLASSPATH variable.\n\n" + - " Or, an array of strings to be processed as individual tokens.\n" + - " This form is used to process JAVA_OPTS style variables.\n" - ); - System.exit(1); - } -} \ No newline at end of file diff --git a/jonas/modules/tools/eclipse-compiler/pom.xml b/jonas/modules/tools/eclipse-compiler/pom.xml deleted file mode 100644 index b0a4c1f82b..0000000000 --- a/jonas/modules/tools/eclipse-compiler/pom.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas - eclipse-compiler - bundle - JOnAS :: Tools :: Eclipse Compiler - - - - org.eclipse.jdt - ecj - 3.3 - - - org.ow2.bundles - ow2-util-log - - - org.testng - testng - 5.1 - test - jdk15 - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - - my.src.dir - ${basedir}/src/test/input - - - my.output.dir - ${basedir}/target/compilation-results - - - - - - - \ No newline at end of file diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilationContext.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilationContext.java deleted file mode 100644 index cceff37b1c..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilationContext.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; - -/** - * The {@link CompilationContext} defines all the options needed by the eclipse compiler. - * @author Guillaume Sauthier - */ -public class CompilationContext { - - /** - * The directory where sources files are located. - */ - private File sourceDirectory; - - /** - * The directory where all generated class files will be placed. - */ - private File outputDirectory; - - /** - * List of source files relatives to the base source directory. - */ - private List sources; - - /** - * Source file encoding. - */ - private String encoding; - - /** - * Contextual ClassLoader used for compilation. - */ - private ClassLoader contextualClassLoader; - - /** - * Eclipse Compiler options. - */ - private CompilerOptions compilerOptions; - - /** - * @return the sourceDirectory - */ - public File getSourceDirectory() { - return sourceDirectory; - } - - /** - * @param sourceDirectory the sourceDirectory to set - */ - public void setSourceDirectory(final File sourceDirectory) { - this.sourceDirectory = sourceDirectory; - } - - /** - * @return the outputDirectory - */ - public File getOutputDirectory() { - return outputDirectory; - } - - /** - * @param outputDirectory the outputDirectory to set - */ - public void setOutputDirectory(final File outputDirectory) { - this.outputDirectory = outputDirectory; - } - - /** - * @return the sources - */ - public List getSources() { - // return an empty list if no source files have been provided. - if (sources == null) { - sources = new ArrayList(); - } - return sources; - } - - /** - * @param sources the sources to set - */ - public void setSources(final List sources) { - this.sources = sources; - } - - /** - * @return the encoding - */ - public String getEncoding() { - //default to UTF-8 - if (encoding == null) { - encoding = "UTF-8"; - } - return encoding; - } - - /** - * @param encoding the encoding to set - */ - public void setEncoding(final String encoding) { - this.encoding = encoding; - } - - /** - * @return the contextualClassLoader - */ - public ClassLoader getContextualClassLoader() { - // if not set, use the TCCL - if (contextualClassLoader == null) { - contextualClassLoader = Thread.currentThread().getContextClassLoader(); - } - return contextualClassLoader; - } - - /** - * @param contextualClassLoader the contextualClassLoader to set - */ - public void setContextualClassLoader(final ClassLoader contextualClassLoader) { - this.contextualClassLoader = contextualClassLoader; - } - - /** - * @return the compilerOptions - */ - public CompilerOptions getCompilerOptions() { - if (compilerOptions == null) { - compilerOptions = getDefaultOptions(); - } - return compilerOptions; - } - - /** - * @param compilerOptions the compilerOptions to set - */ - public void setCompilerOptions(final CompilerOptions compilerOptions) { - this.compilerOptions = compilerOptions; - } - - /** - * @param filename relative path. - * @return the absolute path to the file. - */ - public String getAbsolutePath(final String filename) { - File path = new File(sourceDirectory, filename); - return path.getAbsolutePath(); - } - - /** - * @return the default set of compiler options. - */ - private CompilerOptions getDefaultOptions() { - - // Configure compiler options - Map settings = new HashMap(); - settings.put(CompilerOptions.OPTION_LocalVariableAttribute, CompilerOptions.GENERATE); - settings.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_5); - settings.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_5); - settings.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.IGNORE); - settings.put(CompilerOptions.OPTION_LineNumberAttribute, CompilerOptions.GENERATE); - settings.put(CompilerOptions.OPTION_SourceFileAttribute, CompilerOptions.GENERATE); - - CompilerOptions options = new CompilerOptions(); - options.set(settings); - - return options; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilerError.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilerError.java deleted file mode 100644 index 8f756a5c4f..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/CompilerError.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import org.eclipse.jdt.core.compiler.IProblem; - -/** - * Error that happened during the compilation process. - * @author Guillaume Sauthier - */ -public class CompilerError { - - /** - * Error message. - */ - private String message; - - /** - * Error cause (if the cause was an execution Exception). - */ - private Exception cause; - - /** - * The error problem (if the cause is a compilation error). - */ - private IProblem problem; - - /** - * Creates a new {@link CompilerError} coming from the execution. - * @param message Descriptive error message. - * @param exception Exception's cause. - */ - public CompilerError(final String message, final Exception exception) { - this.message = message; - this.cause = exception; - } - - /** - * Creates a new {@link CompilerError} coming from the compilation itself. - * @param message Descriptive error message. - * @param problem Original compilation problem. - */ - public CompilerError(final String message, final IProblem problem) { - this.message = message; - this.problem = problem; - } - - /** - * @return a String-ified representation of the error. - */ - @Override - public String toString() { - if (cause != null) { - return message + ": " + cause.toString(); - } else if (problem != null) { - - // Output as much data as possible - StringBuilder sb = new StringBuilder(); - sb.append(problem.getOriginatingFileName()); - sb.append("[" + problem.getSourceLineNumber() + "]"); - sb.append("\n"); - sb.append(problem.getMessage()); - sb.append("[" + problem.getSourceStart()); - sb.append("," + problem.getSourceEnd()); - sb.append("]\n"); - - String[] args = problem.getArguments(); - for (int i = 0; i < args.length; i++) { - String arg = args[i]; - sb.append("[" + i + "] "); - sb.append(arg); - sb.append("\n"); - } - - return sb.toString(); - } else { - return message; - } - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilationUnit.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilationUnit.java deleted file mode 100644 index 986839270e..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilationUnit.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.util.List; - -import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; - -/** - * JOnAS glue for Eclipse compiler. - * @author Guillaume Sauthier - */ -public class JOnASCompilationUnit implements ICompilationUnit { - - /** - * Fully qualified class name (x.y.Z). - */ - private String className; - - /** - * Java source file. - */ - private String sourceFile; - - /** - * Compilations errors. - */ - private List errors; - - /** - * Cache the file content, as it is requested twice. - */ - private char[] cachedContent = null; - - /** - * Compilation Context. - */ - private CompilationContext context; - - /** - * Creates a new {@link ICompilationUnit} targeting a given class. - * @param className target classname. - * @param sourceFile input source file. - * @param context Compilation context. - * @param errors errors holder. - */ - public JOnASCompilationUnit(final String className, - final String sourceFile, - final CompilationContext context, - final List errors) { - super(); - this.className = className; - this.sourceFile = sourceFile; - this.context = context; - this.errors = errors; - } - - /** - * @return the file's content as a char array. - * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getContents() - */ - public char[] getContents() { - if (cachedContent == null) { - try { - // load cache - cachedContent = Util.toCharArray(new FileInputStream(new File(sourceFile)), - context.getEncoding()); - } catch (FileNotFoundException e) { - errors.add(new CompilerError(className, e)); - return null; - } - } - // use cache - return cachedContent; - } - - /** - * @return the non qualified Java classname. - * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getMainTypeName() - */ - public char[] getMainTypeName() { - int dot = className.lastIndexOf('.'); - if (dot > 0) { - return className.substring(dot + 1).toCharArray(); - } - return className.toCharArray(); - } - - /** - * @return the package name (without the type name). - * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getPackageName() - */ - public char[][] getPackageName() { - String[] parts = className.split("\\."); - char[][] result = new char[parts.length - 1][]; - for (int i = 0; i < result.length; i++) { - result[i] = parts[i].toCharArray(); - } - return null; - } - - /** - * @return the filename. - * @see org.eclipse.jdt.internal.compiler.env.IDependent#getFileName() - */ - public char[] getFileName() { - return sourceFile.toCharArray(); - } - -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompiler.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompiler.java deleted file mode 100644 index 7114992fa7..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompiler.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; - -import org.eclipse.jdt.internal.compiler.Compiler; -import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; -import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; -import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * JOnAS glue for Eclipse compiler integration. - * @author Guillaume Sauthier - */ -public class JOnASCompiler { - - /** - * Logger. - */ - private static final Log log = LogFactory.getLog(JOnASCompiler.class); - - /** - * CompilationContext with all required configuration. - */ - private CompilationContext context; - - /** - * Construct a new JOnAS Compiler based on Eclipse. - * @param context CompoilationContext to use. - */ - public JOnASCompiler(final CompilationContext context) { - this.context = context; - // fall-back on TCCL if none is specified - if (context.getContextualClassLoader() == null) { - context.setContextualClassLoader(Thread.currentThread().getContextClassLoader()); - } - } - - /** - * Compile the requested classes. - * @return a compiler errors list (may be empty). - */ - public List compile() { - - // Creates the initial List of ICompilationUnit - List compilationUnits = new ArrayList(); - List errors = new ArrayList(); - for (Iterator it = context.getSources().iterator(); it.hasNext();) { - String source = it.next(); - ICompilationUnit unit = new JOnASCompilationUnit(Util.getClassName(source), - new File(context.getSourceDirectory(), - source).getAbsolutePath(), - context, - errors); - - compilationUnits.add(unit); - } - - // Creates a Compiler with JOnAS Glue classes - Compiler compiler = new Compiler(new JOnASNameEnvironment(context, errors), - DefaultErrorHandlingPolicies.proceedWithAllProblems(), - context.getCompilerOptions(), - new JOnASCompilerRequestor(context.getOutputDirectory(), errors), - new DefaultProblemFactory(Locale.getDefault())); - - log.debug("Compiling {0} units into {1} using {2} CLassLoader.", - compilationUnits.size(), - context.getOutputDirectory(), - context.getContextualClassLoader()); - - // Compile - ICompilationUnit[] units = (ICompilationUnit[]) compilationUnits.toArray(new ICompilationUnit[compilationUnits.size()]); - compiler.compile(units); - - // Return the error list - return errors; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilerRequestor.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilerRequestor.java deleted file mode 100644 index ff02b6545c..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASCompilerRequestor.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.List; - -import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.core.compiler.IProblem; -import org.eclipse.jdt.internal.compiler.ClassFile; -import org.eclipse.jdt.internal.compiler.CompilationResult; -import org.eclipse.jdt.internal.compiler.ICompilerRequestor; -import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * JOnAS glue for Eclipse Compiler. - * @author Guillaume Sauthier - */ -public class JOnASCompilerRequestor implements ICompilerRequestor { - - /** - * Logger. - */ - private static final Log log = LogFactory.getLog(JOnASCompilerRequestor.class); - - /** - * Directory where generated files will be placed. - */ - private File outputDirectory; - - /** - * Compilation process errors. - */ - private List errors; - - /** - * Creates a new {@link ICompilerRequestor}. - * @param outputDirectory Directory where generated files will be placed. - * @param errors Compilation process errors. - */ - public JOnASCompilerRequestor(final File outputDirectory, - final List errors) { - super(); - this.outputDirectory = outputDirectory; - this.errors = errors; - } - - /** - * Analyze the compilation process results and store the generated class files on the disk. - * This is called for each {@link ICompilationUnit}. - * @see org.eclipse.jdt.internal.compiler.ICompilerRequestor#acceptResult(org.eclipse.jdt.internal.compiler.CompilationResult) - */ - public void acceptResult(final CompilationResult result) { - - if (result.hasErrors()) { - // Handle compilation Errors - IProblem[] problems = result.getErrors(); - - for (int i = 0; i < problems.length; i++) { - IProblem problem = problems[i]; - - String name = new String(problems[i].getOriginatingFileName()); - errors.add(new CompilerError(name, problem)); - } - } else { - // Get the generated files - ClassFile[] classFiles = result.getClassFiles(); - - // For each class file ... - for (int i = 0; i < classFiles.length; i++) { - ClassFile classFile = classFiles[i]; - - // Re-creates a fully qualified Java class name - String className = new String(CharOperation.concatWith(classFile.getCompoundName(), '.')); - - // Get content - byte[] bytes = classFile.getBytes(); - - log.debug("Storing class: {0}", className); - - // Creates the directory structure - File outFile = new File(outputDirectory, - className.replace('.', File.separatorChar) + ".class"); - if (!outFile.getParentFile().exists()) { - outFile.getParentFile().mkdirs(); - } - - // Store the class file content on the disk - FileOutputStream fout = null; - try { - fout = new FileOutputStream(outFile); - fout.write(bytes); - fout.flush(); - } catch (FileNotFoundException e) { - errors.add(new CompilerError(className, e)); - } catch (IOException e) { - errors.add(new CompilerError(className, e)); - } finally { - if (fout != null) { - try { - fout.close(); - } catch (IOException e) { - // Ignore - } - } - } - } - } - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASNameEnvironment.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASNameEnvironment.java deleted file mode 100644 index 7c3f437777..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/JOnASNameEnvironment.java +++ /dev/null @@ -1,210 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; -import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; -import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; -import org.eclipse.jdt.internal.compiler.env.INameEnvironment; -import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * Central piece of JOnAS glue for eclipse compiler integration. - * @author Guillaume Sauthier - */ -public class JOnASNameEnvironment implements INameEnvironment { - - /** - * Logger. - */ - private static final Log log = LogFactory.getLog(JOnASNameEnvironment.class); - - /** - * Compilation Context. - */ - private CompilationContext context; - - /** - * List of generated errors. - */ - private List errors; - - /** - * Creates a new {@link JOnASNameEnvironment} glue. - * @param context CompilationContext - * @param errors list of compilation errors - */ - public JOnASNameEnvironment(final CompilationContext context, - final List errors) { - this.context = context; - this.errors = errors; - } - - /** - * @see org.eclipse.jdt.internal.compiler.env.INameEnvironment#cleanup() - */ - public void cleanup() { - // nothing to clean - } - - /** - * @see org.eclipse.jdt.internal.compiler.env.INameEnvironment#findType(char[][]) - */ - public NameEnvironmentAnswer findType(final char[][] compoundTypeName) { - - // Creates a fully qualified Java class name - String result = new String(CharOperation.concatWith(compoundTypeName, '.')); - - log.debug("------------- Entering: findType(type:{0})", result); - - return findType(result); - } - - /** - * @see org.eclipse.jdt.internal.compiler.env.INameEnvironment#findType(char[], - * char[][]) - */ - public NameEnvironmentAnswer findType(final char[] typeName, final char[][] packageName) { - - // Creates a fully qualified Java class name - String result = new String(CharOperation.concatWith(packageName, '.')); - - log.debug("------------- Entering: findType(package:{0}, typeName:{1})", result, new String(typeName)); - - // append the type name to the package - result += "."; - result += new String(typeName); - - return findType(result); - } - - /** - * @return an {@link ICompilationUnit} if the class name match a source - * file that has to be compiled. Otherwise, load the dependency byte code - * from the context class loader. - * @param className classname to find - */ - private NameEnvironmentAnswer findType(final String className) { - try { - log.debug("'"+ className + "' processing"); - - // Try to locate a java source file from the class name - String javaSource = className.replace(".", File.separator) + ".java"; - File f = new File(context.getSourceDirectory(), javaSource); - - if (f.exists()) { - - log.debug("Found matching java source file '{0}'", f); - - // If the file is found, then return an ICompilationUnit - ICompilationUnit compilationUnit = new JOnASCompilationUnit(className, - f.getAbsolutePath(), - context, - errors); - - return new NameEnvironmentAnswer(compilationUnit, null); - } - - // In the other case (file not found), try to find the class file - // byte code from the ClassLoader - String resourceName = className.replace('.', '/') + ".class"; - InputStream is = context.getContextualClassLoader().getResourceAsStream(resourceName); - - if (is == null) { - - log.debug("Didn't find the class resource '{0}'", resourceName); - // if class file is not found, simply returns - return null; - } - - // Constructs the class file reader from the IS - ClassFileReader classFileReader = ClassFileReader.read(is, resourceName); - - return new NameEnvironmentAnswer(classFileReader, null); - } catch (IOException e) { - errors.add(new CompilerError(className, e)); - return null; - } catch (ClassFormatException e) { - errors.add(new CompilerError(className, e)); - return null; - } - } - - /** - * @see org.eclipse.jdt.internal.compiler.env.INameEnvironment#isPackage(char[][], - * char[]) - */ - public boolean isPackage(final char[][] parentPackageName, final char[] packageName) { - String result = ""; - - // Construct a String package name by concatenation - if (parentPackageName != null) { - result = new String(CharOperation.concatWith(parentPackageName, '.')); - } - - log.debug("=============== Entering: isPackage(parent:{0}, name:{1})", result, new String(packageName)); - - // Continue concatenation - String str = new String(packageName); - result += "."; - result += str; - - return isPackage(result); - } - - /** - * @param potentialPackage the potential package name to be tested - * @return true if the String parameter is a java package, false - * otherwise. - */ - private boolean isPackage(final String potentialPackage) { - - log.debug("isPackage({0})", potentialPackage); - - // Try to see if a .java class exists - String javaSource = potentialPackage.replace(".", File.separator) + ".java"; - File f = new File(context.getSourceDirectory(), javaSource); - if (f.exists()) { - log.debug("Found a java file {0}", f); - // if so, directly return false - return false; - } - - // Try to see if there is an associated resource in the classloader - String resourceName = potentialPackage.replace('.', '/') + ".class"; - InputStream is = context.getContextualClassLoader().getResourceAsStream(resourceName); - - // if so return false, any other case return true. - return is == null; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/Util.java b/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/Util.java deleted file mode 100644 index 083abe5680..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/java/org/ow2/jonas/eclipse/compiler/Util.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.eclipse.compiler; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; - -/** - * Eclipse Compiler Utilities. - * @author Guillaume Sauthier - */ -public class Util { - - /** - * Maximum buffer size. - */ - private static final int MAX_BUFFER_SIZE = 8192; - - /** - * Transform a given {@link InputStream} into a char array. May return null. - * @param is the {@link InputStream} to convert - * @param charset Encoding to use. - * @return the content of the {@link InputStream} as a char array - */ - public static char[] toCharArray(final InputStream is, final String charset) { - try { - char[] result = null; - Reader reader = new BufferedReader(new InputStreamReader(is, charset)); - if (reader != null) { - char[] chars = new char[MAX_BUFFER_SIZE]; - StringBuffer buf = new StringBuffer(); - int count; - while ((count = reader.read(chars, 0, chars.length)) > 0) { - buf.append(chars, 0, count); - } - result = new char[buf.length()]; - buf.getChars(0, result.length, result, 0); - return result; - } - } catch (IOException e) { - // do nothing - return null; - } - - // return null if something failed - return (char[]) null; - } - - /** - * Convert a given {@link InputStream} in a byte array. - * @param is Class file input - * @return the byte[] content of the given {@link InputStream} - * @throws IOException if InputStream manipulation fails. - */ - public static byte[] toByteArray(final InputStream is) throws IOException { - - byte[] buf = new byte[MAX_BUFFER_SIZE]; - ByteArrayOutputStream baos = new ByteArrayOutputStream(buf.length); - int count; - while ((count = is.read(buf, 0, buf.length)) > 0) { - baos.write(buf, 0, count); - } - baos.flush(); - return baos.toByteArray(); - } - - /** - * Get the fully qualified Java class name from a source - * file (system path + .java). - * @param source Java Source file name - * @return the fully qualified classname - */ - public static String getClassName(final String source) { - String classname = source.replace(File.separatorChar, '.'); - // remove trailing .java - return classname.substring(0, classname.lastIndexOf('.')); - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/main/resources/META-INF/eclipse-compiler.bnd b/jonas/modules/tools/eclipse-compiler/src/main/resources/META-INF/eclipse-compiler.bnd deleted file mode 100644 index 31c1dcecb9..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/main/resources/META-INF/eclipse-compiler.bnd +++ /dev/null @@ -1,34 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.eclipse.compiler - -# javax.tools and javax.lang.model are JDK6 interfaces, not used here. -# ant is not used either. -Import-Package !javax.tools.*,\ - !javax.lang.model.*,\ - !org.apache.tools.ant.*,\ - !javax.annotation.*,\ - * - -Embed-Dependency ecj;inline=true diff --git a/jonas/modules/tools/eclipse-compiler/src/test/input/test/UpperCase/UpperCasePackage.java b/jonas/modules/tools/eclipse-compiler/src/test/input/test/UpperCase/UpperCasePackage.java deleted file mode 100644 index de4d725cc2..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/input/test/UpperCase/UpperCasePackage.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.UpperCase; - -/** - * Test upper case for packages. - * @author Guillaume Sauthier - */ -public class UpperCasePackage { - - public String hello(final String who) { - return "Hello " + who; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/input/test/inheritance/Inheritance.java b/jonas/modules/tools/eclipse-compiler/src/test/input/test/inheritance/Inheritance.java deleted file mode 100644 index 3a4e56ab60..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/input/test/inheritance/Inheritance.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.inheritance; - -/** - * Multiple classes within 1 .java file. - * @author Guillaume Sauthier - */ -public class Inheritance extends SuperClass implements Interface { - - public String hello(final String who) { - Local l = new Local(); - return l.getPrefix() + getSeparator() + who; - } -} - -class Local { - public String getPrefix() { - return "Hello"; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/input/test/multiple/Multiple.java b/jonas/modules/tools/eclipse-compiler/src/test/input/test/multiple/Multiple.java deleted file mode 100644 index dd46d47f7d..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/input/test/multiple/Multiple.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.multiple; - -/** - * Multiple classes within 1 .java file. - * @author Guillaume Sauthier - */ -public class Multiple { - - public String hello(final String who) { - Local l = new Local(); - return l.getPrefix() + " " + who; - } -} - -class Local { - public String getPrefix() { - return "Hello"; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/input/test/simple/Simple.java b/jonas/modules/tools/eclipse-compiler/src/test/input/test/simple/Simple.java deleted file mode 100644 index 07e60adf0e..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/input/test/simple/Simple.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.simple; - -/** - * No deps class, with just a simple hello(String) method. - * @author Guillaume Sauthier - */ -public class Simple { - - public String hello(final String who) { - return "Hello " + who; - } -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/java/org/ow2/jonas/eclipse/compiler/EclipseCompilerTestCase.java b/jonas/modules/tools/eclipse-compiler/src/test/java/org/ow2/jonas/eclipse/compiler/EclipseCompilerTestCase.java deleted file mode 100644 index fb503fd346..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/java/org/ow2/jonas/eclipse/compiler/EclipseCompilerTestCase.java +++ /dev/null @@ -1,288 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.eclipse.compiler; - -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.List; - -import org.testng.Assert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * Tests Eclipse compiler integration. - * @author Guillaume Sauthier - */ -public class EclipseCompilerTestCase { - - /** - * List of source files to be compiled. - */ - private List list; - - /** - * Compiler to use. - */ - private JOnASCompiler compiler; - - /** - * Build directory. - */ - private File out; - - /** - * Sources directory. - */ - private File in; - - /** - * Invoked before each test method execution. - */ - @BeforeMethod - private void prepare() { - - // Where are the sources ? - String src = System.getProperty("my.src.dir"); - in = new File(src); - - // Where should I put the generated class files ? - String output = System.getProperty("my.output.dir"); - out = new File(output); - - // Create the compilation context - CompilationContext context = new CompilationContext(); - context.setContextualClassLoader(this.getClass().getClassLoader()); - context.setOutputDirectory(out); - context.setSourceDirectory(in); - - // Assure that output dir is created. - if (!out.exists()) { - out.mkdirs(); - out.deleteOnExit(); - } - - // Assign the empty list of sources to be compiled - list = new ArrayList(); - context.setSources(list); - - // create the compiler - compiler = new JOnASCompiler(context); - } - - /** - * Test a simple compilation. - * Simple has no dependencies other than String. - * @throws Exception error - */ - @Test - public void testSimpleCompilation() throws Exception { - - Assert.assertTrue(new File(in, - convertToSystem("test/simple/Simple.java")).isFile(), - "No source to compile."); - list.add(convertToSystem("test/simple/Simple.java")); - - List errors = compiler.compile(); - - Assert.assertTrue(errors.isEmpty(), "There are compilation errors."); - Assert.assertTrue(new File(out, - convertToSystem("test/simple/Simple.class")).isFile(), - "Class 'test.simple.Simple' not compiled."); - - } - - /** - * Try the compiler class. - * @throws Exception if compilation was erroneus - */ - @Test(dependsOnMethods={"testSimpleCompilation"}) - public void testSimpleExecution() throws Exception { - - ClassLoader cl = new URLClassLoader(new URL[] {out.toURL()}); - - Object ret = invokedCompiledHelloMethod(cl, "test.simple.Simple"); - Assert.assertEquals((String) ret, "Hello Guillaume", "Cannot execute method"); - - cl = null; - System.gc(); - } - - /** - * Test a compilation located in a package starting with upper case letter. - * Simple has no dependencies other than String. - * @throws Exception error - */ - @Test - public void testUpperCaseCompilation() throws Exception { - - Assert.assertTrue(new File(in, - convertToSystem("test/UpperCase/UpperCasePackage.java")).isFile(), - "No source to compile."); - list.add(convertToSystem("test/UpperCase/UpperCasePackage.java")); - - List errors = compiler.compile(); - - Assert.assertTrue(errors.isEmpty(), "There are compilation errors."); - Assert.assertTrue(new File(out, - convertToSystem("test/UpperCase/UpperCasePackage.class")).isFile(), - "Class 'test.UpperCase.UpperCasePackage' not compiled."); - - } - - /** - * Try the compiled class. - * @throws Exception if execution goes wrong. - */ - @Test(dependsOnMethods={"testUpperCaseCompilation"}) - public void testUpperCaseExecution() throws Exception { - - ClassLoader cl = new URLClassLoader(new URL[] {out.toURL()}); - - Object ret = invokedCompiledHelloMethod(cl, "test.UpperCase.UpperCasePackage"); - Assert.assertEquals((String) ret, "Hello Guillaume", "Cannot execute method"); - - cl = null; - System.gc(); - } - - /** - * Try to compile a java source file with 2 classes inside. - * @throws Exception if compilation fails. - */ - @Test - public void testMultipleCompilation() throws Exception { - - Assert.assertTrue(new File(in, - convertToSystem("test/multiple/Multiple.java")).isFile(), - "No source to compile."); - list.add(convertToSystem("test/multiple/Multiple.java")); - - List errors = compiler.compile(); - - Assert.assertTrue(errors.isEmpty(), "There are compilation errors."); - Assert.assertTrue(new File(out, - convertToSystem("test/multiple/Multiple.class")).isFile(), - "Class 'test.multiple.Multiple' not compiled."); - Assert.assertTrue(new File(out, - convertToSystem("test/multiple/Local.class")).isFile(), - "Class 'test.multiple.Local' not compiled."); - - } - - /** - * Try to execute compiled class. - * @throws Exception error - */ - @Test(dependsOnMethods={"testMultipleCompilation"}) - public void testMultipleExecution() throws Exception { - - ClassLoader cl = new URLClassLoader(new URL[] {out.toURL()}); - - Object ret = invokedCompiledHelloMethod(cl, "test.multiple.Multiple"); - Assert.assertEquals((String) ret, "Hello Guillaume", "Cannot execute method"); - - cl = null; - System.gc(); - } - - /** - * Try to compile a java source file with multiple classes inside + - * dependencies outside of the compilation unit. - * @throws Exception error - */ - @Test - public void testInheritanceCompilation() throws Exception { - - Assert.assertTrue(new File(in, - convertToSystem("test/inheritance/Inheritance.java")).isFile(), - "No source to compile."); - list.add(convertToSystem("test/inheritance/Inheritance.java")); - - List errors = compiler.compile(); - - Assert.assertTrue(errors.isEmpty(), "There are compilation errors."); - Assert.assertTrue(new File(out, - convertToSystem("test/inheritance/Inheritance.class")).isFile(), - "Class 'test.inheritance.Inheritance' not compiled."); - Assert.assertTrue(new File(out, - convertToSystem("test/inheritance/Local.class")).isFile(), - "Class 'test.inheritance.Local' not compiled."); - - } - - /** - * Try to execute compiled class. - * @throws Exception error - */ - @Test(dependsOnMethods={"testInheritanceCompilation"}) - public void testInheritanceExecution() throws Exception { - - // use a parent classloader as classes dependencies are in it. - ClassLoader cl = new URLClassLoader(new URL[] {out.toURL()}, this.getClass().getClassLoader()); - - Object ret = invokedCompiledHelloMethod(cl, "test.inheritance.Inheritance"); - Assert.assertEquals((String) ret, "Hello Guillaume", "Cannot execute method"); - - cl = null; - System.gc(); - } - - /** - * @param path location to be converted - * @return a system compatible File. - */ - private static String convertToSystem(final String path) { - if (File.separatorChar == '/') { - // return as is - return path; - } - - // convert to OS specific path - return path.replace('/', File.separatorChar); - } - - /** - * Invoke the hello(String) method on a newly created instance - * of the freshly compiled class. - * @param cl loader to use for Class laoding - * @param classname class to load - * @return the String result - * @throws Exception if something failed. - */ - private static Object invokedCompiledHelloMethod(final ClassLoader cl, - final String classname) - throws Exception { - Class clazz = cl.loadClass(classname); - Method m = clazz.getDeclaredMethod("hello", new Class[] {String.class}); - Object o = clazz.newInstance(); - Object ret = m.invoke(o, new Object[] {"Guillaume"}); - return ret; - } - -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/Interface.java b/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/Interface.java deleted file mode 100644 index c2bbc35d13..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/Interface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.inheritance; - -/** - * Test interface, used in test compilation units. - * @author Guillaume Sauthier - */ -public interface Interface { - - String hello(String who); -} diff --git a/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/SuperClass.java b/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/SuperClass.java deleted file mode 100644 index f458b3772e..0000000000 --- a/jonas/modules/tools/eclipse-compiler/src/test/java/test/inheritance/SuperClass.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package test.inheritance; - -/** - * Test super class, used in test compilation units. - * @author Guillaume Sauthier - */ -public class SuperClass { - - public String getSeparator() { - return " "; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/pom.xml b/jonas/modules/tools/jonas-ant-tasks/pom.xml deleted file mode 100644 index 7afa363ce0..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-ant-tasks - bundle - JOnAS :: Tools :: Deprecated Ant Tasks - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.bundles - ow2-util-xml - - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-services-datasource-core - ${project.version} - - - - - - - maven-jar-plugin - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - - - - diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/EjbJar.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/EjbJar.java deleted file mode 100644 index 2efd112117..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/EjbJar.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** - * - * Class only used for compatibility with previous version of JOnAS - * It prevents the user to change taskdef in build.xml in its applications - * - * @author Philippe Coq - */ -@Deprecated -public class EjbJar extends org.ow2.jonas.ant.EjbJar { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/GenICTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/GenICTask.java deleted file mode 100644 index cfba410ef9..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/GenICTask.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class GenICTask extends org.ow2.jonas.ant.GenICTask { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASBaseTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASBaseTask.java deleted file mode 100644 index 06306733db..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASBaseTask.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** - * - * Class only used for compatibility with previous version of JOnAS - * It prevents the user to change taskdef in build.xml in its applications - * - * @author Philippe Coq - */ -@Deprecated -public class JOnASBaseTask extends org.ow2.jonas.ant.JOnASBaseTask { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASClusterConfigTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASClusterConfigTask.java deleted file mode 100644 index dff96b0c0e..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASClusterConfigTask.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class JOnASClusterConfigTask extends org.ow2.jonas.ant.JOnASClusterConfigTask { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASTask.java deleted file mode 100644 index 9f9f58f3dc..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JOnASTask.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class JOnASTask extends org.ow2.jonas.ant.JOnASTask { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JProperty.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JProperty.java deleted file mode 100644 index 0417104f48..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/JProperty.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class JProperty extends org.ow2.jonas.ant.JProperty { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/ServerDeploy.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/ServerDeploy.java deleted file mode 100644 index a0c2f346d3..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/ServerDeploy.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class ServerDeploy extends org.ow2.jonas.ant.ServerDeploy { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/WsGenTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/WsGenTask.java deleted file mode 100644 index 0d5e8e1767..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/objectweb/jonas/ant/WsGenTask.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.ant; - -/** -* -* Class only used for compatibility with previous version of JOnAS -* It prevents the user to change taskdef in build.xml in its applications -* -* @author Philippe Coq -*/ -@Deprecated -public class WsGenTask extends org.ow2.jonas.ant.WsGenTask { - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/BootstrapTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/BootstrapTask.java deleted file mode 100644 index 778460b6cd..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/BootstrapTask.java +++ /dev/null @@ -1,348 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant; - -import static org.ow2.jonas.ant.JOnASAntTool.createVariable; - -import java.io.File; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; - -/** - * Allow to use the BootStrap class
    It allows to do some operations like - *

    • starting/stopping JOnAS
    • Deploying some apps
    • - * etc...
    - * @author Florent Benoit - */ -public abstract class BootstrapTask extends Task { - - /** - * Bootstrap class name. - */ - private static final String BOOTSTRAP_CLASS = "org.ow2.jonas.client.boot.Bootstrap"; - - /** - * Default JOnAS server name. - */ - private static final String DEFAULT_SERVER_NAME = "jonas"; - - /** - * Default maven2-internal repository subpath. - */ - private static final String MAVEN2_REPOSITORY = "repositories" + File.separator + "maven2-internal"; - - /** - * Name of the task (to be displayed in log : default to JOnAS). - */ - private String taskName = "JOnAS"; - - /** - * JOnAS Root. - */ - private File jonasRoot = null; - - /** - * Name of the server (default 'jonas'). - */ - private String serverName = DEFAULT_SERVER_NAME; - - /** - * Name of the server (default 'jonas'). - */ - private String domainName = null; - - /** - * JOnAS Base. - */ - private File jonasBase = null; - - /** - * Options given to the JVM. - */ - private String jvmOpts = null; - - /** - * Classpath used for this task. - */ - private Path classpath = null; - - /** - * Set the JOnAS root directory. - * @param jonasRoot the JOnAS root directory. - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * Set the JOnAS base directory. - * @param jonasBase the JOnAS base directory. - */ - public void setJonasBase(final File jonasBase) { - this.jonasBase = jonasBase; - } - - /** - * Set the additional args to pass to the JVM. - * @param jvmOpts the options. - */ - public void setJvmopts(final String jvmOpts) { - this.jvmOpts = jvmOpts; - } - - /** - * Adds to the classpath the class of the project. - * @return the path to be configured. - */ - public Path createClasspath() { - return new Path(getProject()); - } - - /** - * Set the classpath for this task. - * @param classpath the classpath to use. - */ - public void setClasspath(final Path classpath) { - this.classpath = classpath; - } - - /** - * - * @param definedClass - * @return - * @see org.ow2.jonas.ant.BootstrapTask.getBootstrapTask(String, boolean) - */ - protected Java getBootstraptask(final String definedClass) { - return getBootstraptask(definedClass, true); - } - - /** - * Run the task. - * @param definedClass Main class to run - * @param assignClasspath if true, will set the default Classpath for Ant task - * @return a {@link Java} configured ant task - * @see org.apache.tools.ant.Task#execute() - */ - protected Java getBootstraptask(final String definedClass, final boolean assignClasspath) { - - if (jonasRoot == null) { - // get ant property - String jr = getProject().getProperty("jonas.root"); - - if (jr == null) { - throw new BuildException("JONAS_ROOT is not set."); - } - - jonasRoot = new File(jr); - } - - if (jonasBase == null) { - jonasBase = jonasRoot; - } - - Java bootstrapTask = (Java) getProject().createTask("java"); - bootstrapTask.setTaskName(taskName); - bootstrapTask.setFork(true); - bootstrapTask.setFailonerror(true); - - // Name of the server - if (serverName != null) { - bootstrapTask.addSysproperty(createVariable("jonas.name", serverName)); - } - - // Name of the domain - if (domainName != null) { - bootstrapTask.addSysproperty(createVariable("domain.name", domainName)); - } - - // jonas root - // jonas.root ?? - bootstrapTask.addSysproperty(createVariable("jonas.root", jonasRoot)); - - // jonas base - bootstrapTask.addSysproperty(createVariable("jonas.base", jonasBase)); - - // set headless (for unix without X running) - bootstrapTask.addSysproperty(createVariable("java.awt.headless", "true")); - - // iiop - bootstrapTask.addSysproperty(createVariable("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB")); - bootstrapTask.addSysproperty(createVariable("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton")); - bootstrapTask.addSysproperty(createVariable("org.omg.PortableInterceptor.ORBInitializerClass.standard_init", - "org.jacorb.orb.standardInterceptors.IORInterceptorInitializer")); - - File jonasLibDir = new File(jonasRoot, "lib"); - File jonasLibEndorsedDir = new File(jonasLibDir, "endorsed"); - bootstrapTask.addSysproperty(createVariable("javax.rmi.CORBA.PortableRemoteObjectClass", - "org.ow2.carol.rmi.multi.MultiPRODelegate")); - bootstrapTask.addSysproperty(createVariable("java.endorsed.dirs", jonasLibEndorsedDir)); - - // Rmi annotation - // Disabled in OSGi - /* - bootstrapTask.createJvmarg().setValue( - "-Djava.rmi.server.RMIClassLoaderSpi=org.ow2.jonas.lib.bootstrap.RemoteClassLoaderSpi"); - */ - - // java policy file - String jonasConfigDir = jonasBase + File.separator + "conf"; - File javaPolicyFile = new File(jonasConfigDir, "java.policy"); - if (javaPolicyFile.exists()) { - bootstrapTask.addSysproperty(createVariable("java.security.policy", javaPolicyFile)); - } - File javaAuthLoginFile = new File(jonasConfigDir, "jaas.config"); - bootstrapTask.addSysproperty(createVariable("java.security.auth.login.config", javaAuthLoginFile)); - - // The bootstrap class must launch the defined class - bootstrapTask.createArg().setValue(definedClass); - - // add jonas_base/conf - classpath = new Path(getProject(), jonasConfigDir); - - // then add ow_jonas_bootstrap.jar to classloader - String bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "client-bootstrap.jar"; - classpath.append(new Path(getProject(), bootJar)); - bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "felix-launcher.jar"; - classpath.append(new Path(getProject(), bootJar)); - bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "jonas-commands.jar"; - classpath.append(new Path(getProject(), bootJar)); - bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "jonas-version.jar"; - classpath.append(new Path(getProject(), bootJar)); - // Add tools.jar - String toolsJar = System.getProperty("java.home") + File.separator + ".." + File.separator + "lib" - + File.separator + "tools.jar"; - classpath.append(new Path(getProject(), toolsJar)); - - // Set the classpath - bootstrapTask.setClasspath(classpath); - - // class to use = bootstrap class - bootstrapTask.setClassname(BOOTSTRAP_CLASS); - - // add user defined jvmopts - if (jvmOpts != null && !jvmOpts.equals("")) { - bootstrapTask.createJvmarg().setLine(jvmOpts); - } - - // add jonas name - /* - if (serverName != null) { - bootstrapTask.createArg().setValue("-n"); - bootstrapTask.createArg().setValue(getServerName()); - } - */ - return bootstrapTask; - - } - - /** - * @return the taskName. - */ - @Override - public String getTaskName() { - return taskName; - } - - /** - * Set the name of the task. - * @param taskName Name of the task - */ - @Override - public void setTaskName(final String taskName) { - this.taskName = taskName; - } - - /** - * @return the server Name. - */ - public String getServerName() { - return serverName; - } - - /** - * Set the name of the server. - * @param serverName The serverName to set. - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * Set catalina Home. - * @param catalinaHome The catalinaHome to set. - * @deprecated - */ - @Deprecated - public void setCatalinaHome(final String catalinaHome) { - // deprecated - } - - /** - * Set jetty home path. - * @param jettyHome The jettyHome to set. - * @deprecated - */ - @Deprecated - public void setJettyHome(final String jettyHome) { - // deprecated - } - - /** - * @return the jonasRoot. - */ - public File getJonasRoot() { - return jonasRoot; - } - - /** - * @return the relative maven2 repository path. - */ - public String getMaven2Repository() { - return MAVEN2_REPOSITORY; - } - - /** - * @return the domainName. - */ - public String getDomainName() { - return domainName; - } - - /** - * Set domainName. - * @param domainName The domainName to set. - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/DescriptorHandler.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/DescriptorHandler.java deleted file mode 100644 index 550560e736..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/DescriptorHandler.java +++ /dev/null @@ -1,452 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.ant; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Hashtable; - -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -/** - * Inner class used by EjbJar to facilitate the parsing of deployment - * descriptors and the capture of appropriate information. Extends - * HandlerBase so it only implements the methods needed. During parsing - * creates a hashtable consisting of entries mapping the name it should be - * inserted into an EJB jar as to a File representing the file on disk. This - * list can then be accessed through the getFiles() method. - */ -public class DescriptorHandler extends org.xml.sax.helpers.DefaultHandler { - private static final int STATE_LOOKING_EJBJAR = 1; - private static final int STATE_IN_EJBJAR = 2; - private static final int STATE_IN_BEANS = 3; - private static final int STATE_IN_SESSION = 4; - private static final int STATE_IN_ENTITY = 5; - private static final int STATE_IN_MESSAGE = 6; - - private static final int STATE_IN_SERVICE_REF = 7; - private static final int STATE_IN_PORT_COMPONENT_REF = 8; - private static final int STATE_IN_HANDLER = 9; - - - private Task owningTask; - - private String publicId = null; - - /** - * Bunch of constants used for storing entries in a hashtable, and for - * constructing the filenames of various parts of the ejb jar. - */ - private static final String EJB_REF = "ejb-ref"; - private static final String EJB_LOCAL_REF = "ejb-local-ref"; - private static final String HOME_INTERFACE = "home"; - private static final String REMOTE_INTERFACE = "remote"; - private static final String LOCAL_HOME_INTERFACE = "local-home"; - private static final String LOCAL_INTERFACE = "local"; - private static final String ENDPOINT_INTERFACE = "service-endpoint"; - private static final String BEAN_CLASS = "ejb-class"; - private static final String PK_CLASS = "prim-key-class"; - private static final String EJB_NAME = "ejb-name"; - private static final String EJB_JAR = "ejb-jar"; - private static final String ENTERPRISE_BEANS = "enterprise-beans"; - private static final String ENTITY_BEAN = "entity"; - private static final String SESSION_BEAN = "session"; - private static final String MESSAGE_BEAN = "message-driven"; - - /** - * Add support for service-ref elements - */ - private static final String SERVICE_REF = "service-ref"; - private static final String SERVICE_INTERFACE = "service-interface"; - private static final String WSDL_FILE = "wsdl-file"; - private static final String JAXRPC_MAPPING_FILE = "jaxrpc-mapping-file"; - private static final String PORT_COMPONENT_REF = "port-component-ref"; - private static final String SERVICE_ENDPOINT_INTERFACE = "service-endpoint-interface"; - private static final String HANDLER = "handler"; - private static final String HANDLER_CLASS = "handler-class"; - - /** - * The state of the parsing - */ - private int parseState = STATE_LOOKING_EJBJAR; - - /** - * The old state of the parsing (used only for service-ref) - */ - private int oldParseState; - - /** - * Instance variable used to store the name of the current element being - * processed by the SAX parser. Accessed by the SAX parser call-back methods - * startElement() and endElement(). - */ - protected String currentElement = null; - - /** - * The text of the current element - */ - protected String currentText = null; - - /** - * Instance variable that stores the names of the files as they will be - * put into the jar file, mapped to File objects Accessed by the SAX - * parser call-back method characters(). - */ - protected Hashtable ejbFiles = null; - - /** - * Instance variable that stores the value found in the <ejb-name> element - */ - protected String ejbName = null; - - private Hashtable fileDTDs = new Hashtable(); - - private Hashtable resourceDTDs = new Hashtable(); - - private boolean inEJBRef = false; - - private Hashtable urlDTDs = new Hashtable(); - - /** - * The directory containing the bean classes and interfaces. This is - * used for performing dependency file lookups. - */ - private File srcDir; - - public DescriptorHandler(Task task, File srcDir) { - this.owningTask = task; - this.srcDir = srcDir; - } - - public void registerDTD(String publicId, String location) { - if (location == null) { - return; - } - - File fileDTD = new File(location); - if (!fileDTD.exists()) { - // resolve relative to project basedir - fileDTD = owningTask.getProject().resolveFile(location); - } - - if (fileDTD.exists()) { - if (publicId != null) { - fileDTDs.put(publicId, fileDTD); - owningTask.log("Mapped publicId " + publicId + " to file " - + fileDTD, Project.MSG_VERBOSE); - } - return; - } - - if (getClass().getResource(location) != null) { - if (publicId != null) { - resourceDTDs.put(publicId, location); - owningTask.log("Mapped publicId " + publicId + " to resource " - + location, Project.MSG_VERBOSE); - } - } - - try { - if (publicId != null) { - URL urldtd = new URL(location); - urlDTDs.put(publicId, urldtd); - } - } catch (java.net.MalformedURLException e) { - //ignored - } - - } - - public InputSource resolveEntity(String publicId, String systemId) - throws SAXException { - this.publicId = publicId; - - File dtdFile = (File) fileDTDs.get(publicId); - if (dtdFile != null) { - try { - owningTask.log("Resolved " + publicId + " to local file " - + dtdFile, Project.MSG_VERBOSE); - return new InputSource(new FileInputStream(dtdFile)); - } catch (FileNotFoundException ex) { - // ignore - } - } - - String dtdResourceName = (String) resourceDTDs.get(publicId); - if (dtdResourceName != null) { - InputStream is = this.getClass().getResourceAsStream(dtdResourceName); - if (is != null) { - owningTask.log("Resolved " + publicId + " to local resource " - + dtdResourceName, Project.MSG_VERBOSE); - return new InputSource(is); - } - } - - URL dtdUrl = (URL) urlDTDs.get(publicId); - if (dtdUrl != null) { - try { - InputStream is = dtdUrl.openStream(); - owningTask.log("Resolved " + publicId + " to url " - + dtdUrl, Project.MSG_VERBOSE); - return new InputSource(is); - } catch (IOException ioe) { - //ignore - } - } - - owningTask.log("Could not resolve ( publicId: " + publicId - + ", systemId: " + systemId + ") to a local entity", Project.MSG_INFO); - - return null; - } - - /** - * Getter method that returns the set of files to include in the EJB jar. - */ - public Hashtable getFiles() { - return (ejbFiles == null) ? new Hashtable() : ejbFiles; - } - - /** - * Get the publicId of the DTD - */ - public String getPublicId() { - return publicId; - } - - /** - * Getter method that returns the value of the <ejb-name> element. - */ - public String getEjbName() { - return ejbName; - } - - /** - * SAX parser call-back method that is used to initialize the values of some - * instance variables to ensure safe operation. - */ - public void startDocument() throws SAXException { - this.ejbFiles = new Hashtable(10, 1); - this.currentElement = null; - inEJBRef = false; - } - - - /** - * SAX parser call-back method that is invoked when a new element is entered - * into. Used to store the context (attribute name) in the currentAttribute - * instance variable. - * @param uri The namespace of the element being entered. - * @param localname The name of the element being entered. - * @param qname The qname of the element being entered. - * @param attrs Attributes associated to the element. - */ - public void startElement(String uri, String localname, String qname, Attributes attrs) - throws SAXException { - - String name = qname; - - this.currentElement = name; - currentText = ""; - if (name.equals(EJB_REF) || name.equals(EJB_LOCAL_REF)) { - inEJBRef = true; - } else if (parseState == STATE_LOOKING_EJBJAR && name.equals(EJB_JAR)) { - parseState = STATE_IN_EJBJAR; - } else if (parseState == STATE_IN_EJBJAR && name.equals(ENTERPRISE_BEANS)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_BEANS && name.equals(SESSION_BEAN)) { - parseState = STATE_IN_SESSION; - } else if (parseState == STATE_IN_BEANS && name.equals(ENTITY_BEAN)) { - parseState = STATE_IN_ENTITY; - } else if (parseState == STATE_IN_BEANS && name.equals(MESSAGE_BEAN)) { - parseState = STATE_IN_MESSAGE; - } else if ( ((parseState == STATE_IN_SESSION) - || (parseState == STATE_IN_ENTITY) - || (parseState == STATE_IN_MESSAGE)) - && (name.equals(SERVICE_REF))) { - oldParseState = parseState; - parseState = STATE_IN_SERVICE_REF; - } else if ((parseState == STATE_IN_SERVICE_REF) - && (name.equals(PORT_COMPONENT_REF))) { - parseState = STATE_IN_PORT_COMPONENT_REF; - } else if ((parseState == STATE_IN_SERVICE_REF) - && (name.equals(HANDLER))) { - parseState = STATE_IN_HANDLER; - } - } - - - /** - * SAX parser call-back method that is invoked when an element is exited. - * Used to blank out (set to the empty string, not nullify) the name of - * the currentAttribute. A better method would be to use a stack as an - * instance variable, however since we are only interested in leaf-node - * data this is a simpler and workable solution. - * @param name The name of the attribute being exited. Ignored - * in this implementation. - */ - public void endElement(String uri, String localname, String qname) throws SAXException { - String name = qname; - - processElement(); - currentText = ""; - this.currentElement = ""; - if (name.equals(EJB_REF) || name.equals(EJB_LOCAL_REF)) { - inEJBRef = false; - } else if (parseState == STATE_IN_HANDLER && name.equals(HANDLER)) { - parseState = STATE_IN_SERVICE_REF; - } else if (parseState == STATE_IN_PORT_COMPONENT_REF && name.equals(PORT_COMPONENT_REF)) { - parseState = STATE_IN_SERVICE_REF; - } else if (parseState == STATE_IN_SERVICE_REF && name.equals(SERVICE_REF)) { - parseState = oldParseState; - } else if (parseState == STATE_IN_ENTITY && name.equals(ENTITY_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_SESSION && name.equals(SESSION_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_MESSAGE && name.equals(MESSAGE_BEAN)) { - parseState = STATE_IN_BEANS; - } else if (parseState == STATE_IN_BEANS && name.equals(ENTERPRISE_BEANS)) { - parseState = STATE_IN_EJBJAR; - } else if (parseState == STATE_IN_EJBJAR && name.equals(EJB_JAR)) { - parseState = STATE_LOOKING_EJBJAR; - } - } - - /** - * SAX parser call-back method invoked whenever characters are located within - * an element. currentAttribute (modified by startElement and endElement) - * tells us whether we are in an interesting element (one of the up to four - * classes of an EJB). If so then converts the classname from the format - * org.apache.tools.ant.Parser to the convention for storing such a class, - * org/apache/tools/ant/Parser.class. This is then resolved into a file - * object under the srcdir which is stored in a Hashtable. - * @param ch A character array containing all the characters in - * the element, and maybe others that should be ignored. - * @param start An integer marking the position in the char - * array to start reading from. - * @param length An integer representing an offset into the - * char array where the current data terminates. - */ - public void characters(char[] ch, int start, int length) - throws SAXException { - - currentText += new String(ch, start, length); - } - - - protected void processElement() { - if (inEJBRef - || (parseState != STATE_IN_ENTITY - && parseState != STATE_IN_SESSION - && parseState != STATE_IN_MESSAGE - && parseState != STATE_IN_SERVICE_REF - && parseState != STATE_IN_PORT_COMPONENT_REF - && parseState != STATE_IN_HANDLER)) { - return; - } - - if (currentElement.equals(HOME_INTERFACE) - || currentElement.equals(REMOTE_INTERFACE) - || currentElement.equals(LOCAL_INTERFACE) - || currentElement.equals(ENDPOINT_INTERFACE) - || currentElement.equals(LOCAL_HOME_INTERFACE) - || currentElement.equals(BEAN_CLASS) - || currentElement.equals(PK_CLASS) - || currentElement.equals(SERVICE_INTERFACE) - || currentElement.equals(SERVICE_ENDPOINT_INTERFACE) - || currentElement.equals(HANDLER_CLASS)) { - - // Get the filename into a String object - File classFile = null; - String className = currentText.trim(); - - // If it's a primitive wrapper then we shouldn't try and put - // it into the jar, so ignore it. - if (!className.startsWith("java.") - && !className.startsWith("javax.")) { - // Translate periods into path separators, add .class to the - // name, create the File object and add it to the Hashtable. - className = className.replace('.', File.separatorChar); - className += ".class"; - classFile = new File(srcDir, className); - ejbFiles.put(className, classFile); - } - } - - // service-ref support for simple file - if (currentElement.equals(WSDL_FILE) - || currentElement.equals(JAXRPC_MAPPING_FILE)) { - //owningTask.log("***** element name : " + currentElement, Project.MSG_VERBOSE); - String filename = currentText.trim(); - File file = new File(srcDir, filename); - ejbFiles.put(filename, file); - } - - // Get the value of the tag. Only the first occurrence. - if (currentElement.equals(EJB_NAME)) { - if (ejbName == null) { - ejbName = currentText.trim(); - } - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EJBDeploymentTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EJBDeploymentTool.java deleted file mode 100644 index 1fb57fcdc1..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EJBDeploymentTool.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.ant; - - - -import javax.xml.parsers.SAXParser; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; - - -public interface EJBDeploymentTool { - /** - * Process a deployment descriptor, generating the necessary vendor specific - * deployment files. - * - * @param descriptorFilename the name of the deployment descriptor - * @param saxParser a SAX parser which can be used to parse the deployment descriptor. - */ - void processDescriptor(String descriptorFilename, SAXParser saxParser) - throws BuildException; - - /** - * Called to validate that the tool parameters have been configured. - * - */ - void validateConfigured() throws BuildException; - - /** - * Set the task which owns this tool - */ - void setTask(Task task); - - /** - * Configure this tool for use in the ejbjar task. - */ - void configure(EjbJar.Config config); -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EjbJar.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EjbJar.java deleted file mode 100644 index 3385e34f00..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/EjbJar.java +++ /dev/null @@ -1,587 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2000-2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "Ant" and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -package org.ow2.jonas.ant; - -// Standard java imports -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.EnumeratedAttribute; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; -import org.xml.sax.SAXException; - -/** - * Provides automated EJB JAR file creation. - *

    - * Extends the - * MatchingTask class provided in the default ant distribution to provide a - * directory scanning EJB jarfile generator. - *

    - * - *

    - * The task works by taking the deployment descriptors one at a time and - * parsing them to locate the names of the classes which should be placed in - * the jar. The classnames are translated to java.io.Files by replacing - * periods with File.separatorChar and resolving the generated filename as a - * relative path under the srcDir attribute. All necessary files are then - * assembled into a jarfile. One jarfile is constructed for each deployment - * descriptor found. - *

    - * - * @author Tim Fennell - * @author Conor MacNeill - * @author Rob van Oostrum - * */ -public class EjbJar extends MatchingTask { - - /** - * Inner class used to record information about the location of a local DTD - */ - public static class DTDLocation - extends org.apache.tools.ant.types.DTDLocation { - } - - /** - * A class which contains the configuration state of the ejbjar task. - * This state is passed to the deployment tools for configuration - */ - static class Config { - /** - * Stores a handle to the directory under which to search for class - * files - */ - public File srcDir; - - /** - * Stores a handle to the directory under which to search for - * deployment descriptors - */ - public File descriptorDir; - - /** Instance variable that marks the end of the 'basename' */ - public String baseNameTerminator = "-"; - - /** Stores a handle to the destination EJB Jar file */ - public String baseJarName; - - /** - * Instance variable that determines whether to use a package structure - * of a flat directory as the destination for the jar files. - */ - public boolean flatDestDir = false; - - /** - * The classpath to use when loading classes - */ - public Path classpath; - - /** - * A Fileset of support classes - */ - public List supportFileSets = new ArrayList(); - - /** - * The list of configured DTD locations - */ - public ArrayList dtdLocations = new ArrayList(); - - /** - * The naming scheme used to determine the generated jar name - * from the descriptor information - */ - public NamingScheme namingScheme; - - /** - * The Manifest file - */ - public File manifest; - - /** - * The dependency analyzer to use to add additional classes to the jar - */ - public String analyzer; - } - - /** - * An EnumeratedAttribute class for handling different EJB jar naming - * schemes - */ - public static class NamingScheme extends EnumeratedAttribute { - /** - * Naming scheme where generated jar is determined from the ejb-name in - * the deployment descripor - */ - public static final String EJB_NAME = "ejb-name"; - - /** - * Naming scheme where the generated jar name is based on the - * name of the directory containing the deployment descriptor - */ - public static final String DIRECTORY = "directory"; - - /** - * Naming scheme where the generated jar name is based on the name of - * the deployment descriptor file - */ - public static final String DESCRIPTOR = "descriptor"; - - /** - * Naming scheme where the generated jar is named by the basejarname - * attribute - */ - public static final String BASEJARNAME = "basejarname"; - - /** - * Gets the values of the NamingScheme - * - * @return an array of the values of this attribute class. - */ - public String[] getValues() { - return new String[] {EJB_NAME, DIRECTORY, DESCRIPTOR, BASEJARNAME}; - } - } - - /** - * CMP versions supported - * valid CMP versions are 1.0 and 2.0 - * @since ant 1.6 - */ - public static class CMPVersion extends EnumeratedAttribute { - public static final String CMP1_0 = "1.0"; - public static final String CMP2_0 = "2.0"; - public String[] getValues() { - return new String[]{ - CMP1_0, - CMP2_0, - }; - } - } - /** - * The config which is built by this task and used by the various deployment - * tools to access the configuration of the ejbjar task - */ - private Config config = new Config(); - - - /** - * Stores a handle to the directory to put the Jar files in. This is - * only used by the generic deployment descriptor tool which is created - * if no other deployment descriptor tools are provided. Normally each - * deployment tool will specify the desitination dir itself. - */ - private File destDir; - - /** Instance variable that stores the suffix for the generated jarfile. */ - private String genericJarSuffix = "-generic.jar"; - - /** Instance variable that stores the CMP version for the jboss jarfile. */ - private String cmpVersion = CMPVersion.CMP1_0; - - /** The list of deployment tools we are going to run. */ - private ArrayList deploymentTools = new ArrayList(); - - /** - * Add a deployment tool to the list of deployment tools that will be - * processed - * - * @param deploymentTool a deployment tool instance to which descriptors - * will be passed for processing. - */ - protected void addDeploymentTool(EJBDeploymentTool deploymentTool) { - deploymentTool.setTask(this); - deploymentTools.add(deploymentTool); - } - - /** - * Adds a deployment tool for JOnAS server. - * - * @return the deployment tool instance to be configured. - */ - public JonasDeploymentTool createJonas() { - log("JOnAS deployment tools", Project.MSG_VERBOSE); - - JonasDeploymentTool tool = new JonasDeploymentTool(); - addDeploymentTool(tool); - return tool; - } - - /** - * Adds to the classpath used to locate the super classes and - * interfaces of the classes that will make up the EJB JAR. - * - * @return the path to be configured. - */ - public Path createClasspath() { - if (config.classpath == null) { - config.classpath = new Path(getProject()); - } - return config.classpath.createPath(); - } - - /** - * Create a DTD location record. This stores the location of a DTD. The - * DTD is identified by its public Id. The location may either be a file - * location or a resource location. - * - * @return the DTD location object to be configured by Ant - */ - public DTDLocation createDTD() { - DTDLocation dtdLocation = new DTDLocation(); - config.dtdLocations.add(dtdLocation); - - return dtdLocation; - } - - /** - * Adds a fileset for support elements. - * - * @return a fileset which can be populated with support files. - */ - public FileSet createSupport() { - FileSet supportFileSet = new FileSet(); - config.supportFileSets.add(supportFileSet); - return supportFileSet; - } - - - /** - * Set the Manifest file to use when jarring. As of EJB 1.1, manifest - * files are no longer used to configure the EJB. However, they still - * have a vital importance if the EJB is intended to be packaged in an - * EAR file. By adding "Class-Path" settings to a Manifest file, the EJB - * can look for classes inside the EAR file itself, allowing for easier - * deployment. This is outlined in the J2EE specification, and all J2EE - * components are meant to support it. - * - * @param manifest the manifest to be used in the EJB jar - */ - public void setManifest(File manifest) { - config.manifest = manifest; - } - - /** - * Sets the source directory, which is the directory that - * contains the classes that will be added to the EJB jar. Typically - * this will include the home and remote interfaces and the bean class. - * - * @param inDir the source directory. - */ - public void setSrcdir(File inDir) { - config.srcDir = inDir; - } - - /** - * Set the descriptor directory. The descriptor directory contains the - * EJB deployment descriptors. These are XML files that declare the - * properties of a bean in a particular deployment scenario. Such - * properties include, for example, the transactional nature of the bean - * and the security access control to the bean's methods. - * - * @param inDir the directory containing the deployment descriptors. - */ - public void setDescriptordir(File inDir) { - config.descriptorDir = inDir; - } - - /** - * Set the analyzer to use when adding in dependencies to the JAR. - * - * @param analyzer the name of the dependency analyzer or a class. - */ - public void setDependency(String analyzer) { - config.analyzer = analyzer; - } - - /** - * Set the base name of the EJB JAR that is to be created if it is not - * to be determined from the name of the deployment descriptor files. - * - * @param inValue the basename that will be used when writing the jar - * file containing the EJB - */ - public void setBasejarname(String inValue) { - config.baseJarName = inValue; - if (config.namingScheme == null) { - config.namingScheme = new NamingScheme(); - config.namingScheme.setValue(NamingScheme.BASEJARNAME); - } else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) { - throw new BuildException("The basejarname attribute is not " - + "compatible with the " - + config.namingScheme.getValue() + " naming scheme"); - } - } - - /** - * Set the naming scheme used to determine the name of the generated jars - * from the deployment descriptor - * - * @param namingScheme the naming scheme to be used - */ - public void setNaming(NamingScheme namingScheme) { - config.namingScheme = namingScheme; - if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) - && config.baseJarName != null) { - throw new BuildException("The basejarname attribute is not " - + "compatible with the " - + config.namingScheme.getValue() + " naming scheme"); - } - } - - /** - * Gets the destination directory. - * - * @return destination directory - * @since ant 1.6 - */ - public File getDestdir() { - return this.destDir; - } - - /** - * Set the destination directory. The EJB jar files will be written into - * this directory. The jar files that exist in this directory are also - * used when determining if the contents of the jar file have changed. - * Note that this parameter is only used if no deployment tools are - * specified. Typically each deployment tool will specify its own - * destination directory. - * - * @param inDir the destination directory in which to generate jars - */ - public void setDestdir(File inDir) { - this.destDir = inDir; - } - - /** - * Gets the CMP version. - * - * @return CMP version - * @since ant 1.6 - */ - public String getCmpversion() { - return this.cmpVersion; - } - - /** - * Sets the CMP version. - * - * @param version CMP version. - * Must be either 1.0 or 2.0.
    - * Default is 1.0.
    - * Initially, only the JBoss implementation does something specific for CMP 2.0.
    - * @since ant 1.6 - */ - public void setCmpversion(CMPVersion version) { - this.cmpVersion = version.getValue(); - } - - /** - * Set the classpath to use when resolving classes for inclusion in the jar. - * - * @param classpath the classpath to use. - */ - public void setClasspath(Path classpath) { - config.classpath = classpath; - } - - /** - * Controls whether the - * destination JARs are written out in the destination directory with - * the same hierarchical structure from which the deployment descriptors - * have been read. If this is set to true the generated EJB jars are - * written into the root of the destination directory, otherwise they - * are written out in the same relative position as the deployment - * descriptors in the descriptor directory. - * - * @param inValue the new value of the flatdestdir flag. - */ - public void setFlatdestdir(boolean inValue) { - config.flatDestDir = inValue; - } - - /** - * Set the suffix for the generated jar file. When generic jars are - * generated, they have a suffix which is appended to the the bean name - * to create the name of the jar file. Note that this suffix includes - * the extension fo te jar file and should therefore end with an - * appropriate extension such as .jar or .ear - * - * @param inString the string to use as the suffix. - */ - public void setGenericjarsuffix(String inString) { - this.genericJarSuffix = inString; - } - - /** - * The string which terminates the bean name. - * The convention used by this task is - * that bean descriptors are named as the BeanName with some suffix. The - * baseNameTerminator string separates the bean name and the suffix and - * is used to determine the bean name. - * - * @param inValue a string which marks the end of the basename. - */ - public void setBasenameterminator(String inValue) { - config.baseNameTerminator = inValue; - } - - /** - * Validate the config that has been configured from the build file - * - * @throws BuildException if the config is not valid - */ - private void validateConfig() throws BuildException { - if (config.srcDir == null) { - throw new BuildException("The srcDir attribute must be specified"); - } - - if (config.descriptorDir == null) { - config.descriptorDir = config.srcDir; - } - - if (config.namingScheme == null) { - config.namingScheme = new NamingScheme(); - config.namingScheme.setValue(NamingScheme.DESCRIPTOR); - } else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) - && config.baseJarName == null) { - throw new BuildException("The basejarname attribute must " - + "be specified with the basejarname naming scheme"); - } - } - - /** - * Invoked by Ant after the task is prepared, when it is ready to execute - * this task. - * - * This will configure all of the nested deployment tools to allow them to - * process the jar. If no deployment tools have been configured a generic - * tool is created to handle the jar. - * - * A parser is configured and then each descriptor found is passed to all - * the deployment tool elements for processing. - * - * @exception BuildException thrown whenever a problem is - * encountered that cannot be recovered from, to signal to ant - * that a major problem occurred within this task. - */ - public void execute() throws BuildException { - validateConfig(); - - if (deploymentTools.size() == 0) { - GenericDeploymentTool genericTool = new GenericDeploymentTool(); - genericTool.setTask(this); - genericTool.setDestdir(destDir); - genericTool.setGenericJarSuffix(genericJarSuffix); - deploymentTools.add(genericTool); - } - - for (Iterator i = deploymentTools.iterator(); i.hasNext();) { - EJBDeploymentTool tool = (EJBDeploymentTool) i.next(); - tool.configure(config); - tool.validateConfigured(); - } - - try { - // Create the parser using whatever parser the system dictates - SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); - saxParserFactory.setValidating(true); - saxParserFactory.setNamespaceAware(true); - SAXParser saxParser = saxParserFactory.newSAXParser(); - - - DirectoryScanner ds = getDirectoryScanner(config.descriptorDir); - ds.scan(); - String[] files = ds.getIncludedFiles(); - - log(files.length + " deployment descriptors located.", - Project.MSG_VERBOSE); - - // Loop through the files. Each file represents one deployment - // descriptor, and hence one bean in our model. - for (int index = 0; index < files.length; ++index) { - // process the deployment descriptor in each tool - for (Iterator i = deploymentTools.iterator(); i.hasNext();) { - EJBDeploymentTool tool = (EJBDeploymentTool) i.next(); - tool.processDescriptor(files[index], saxParser); - } - } - } catch (SAXException se) { - String msg = "SAXException while creating parser." - + " Details: " - + se.getMessage(); - throw new BuildException(msg, se); - } catch (ParserConfigurationException pce) { - String msg = "ParserConfigurationException while creating parser. " - + "Details: " + pce.getMessage(); - throw new BuildException(msg, pce); - } - } // end of execute() - -} - - - - - - - diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenICTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenICTask.java deleted file mode 100644 index 09d42dc7de..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenICTask.java +++ /dev/null @@ -1,329 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ -package org.ow2.jonas.ant; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; - -/** - * GenIC Task. That's basically an Ant Task wrapper around GenIC. - * - * @author Guillaume Sauthier - */ -public class GenICTask extends BootstrapTask { - - /** GenIC class name. */ - private static final String GENIC_CLASS = "org.ow2.jonas.generators.genic.GenIC"; - - /** validation of XML files ? */ - private boolean validation = true; - - /** name of javac command. */ - private String javac = null; - - /** list of javac options. */ - private String javacOpts = null; - - /** will GenIC keep already generated files ? */ - private boolean keepGen = false; - - /** - * specifies which RMIC compiler to user: the built-in one or the external - * one. - */ - private boolean noFastRMIC = false; - - /** protocol list. */ - private String protocols = null; - - /** nocompil. */ - private boolean nocompil = false; - - /** Invoke Javac with tools.jar. */ - private boolean invokeCmd = false; - - /** Options for rmic compiler. */ - private String rmicOpts = null; - - /** extra arguments to be passed to GenIC. */ - private String additionalArgs = null; - - /** verbose mode. */ - private boolean verbose = false; - - /** additionnal classpath for libs. */ - private Path libraryClasspath = null; - - /** inner FileSet list. */ - private List filesets = new ArrayList(); - - /** debug field. */ - private boolean debug = false; - - /** - * @return Returns an empty Path for inner element classpath - */ - @Override - public Path createClasspath() { - libraryClasspath = new Path(getProject()); - return libraryClasspath; - } - - /** - * @return Returns an empty FileSet - */ - public FileSet createFileSet() { - FileSet set = new FileSet(); - set.setProject(getProject()); - filesets.add(set); - return set; - } - - /** - * Set additional arguments for GenIC command line. - * @param added additional args - */ - public void setAdditionalargs(final String added) { - additionalArgs = added; - } - - /** - * Set verbose mode on/off. - * @param v boolean - */ - public void setVerbose(final boolean v) { - verbose = v; - } - - /** - * Set debug mode on/off. Used only by developers that wants to Debug GenIC - * @param d boolean - */ - public void setJvmdebug(final boolean d) { - debug = d; - } - - /** - * Use InvokeCmd option on/off. - * @param inv boolean - */ - public void setInvokecmd(final boolean inv) { - invokeCmd = inv; - } - - /** - * Do not compile generated java files. - * @param noc on/off - */ - public void setNocompil(final boolean noc) { - nocompil = noc; - } - - /** - * Set the optios to be passed to the RMI compiler. - * @param opts list of options - */ - public void setRmicopts(final String opts) { - rmicOpts = opts; - } - - /** - * Validate XML descriptors. - * @param v on/off - */ - public void setValidation(final boolean v) { - validation = v; - } - - /** - * Set the javac command line to be used. - * @param j path to javac executable - */ - public void setJavac(final String j) { - javac = j; - } - - /** - * Set the options to be given to javac. - * @param opts options - */ - public void setJavacopts(final String opts) { - javacOpts = opts; - } - - /** - * Keep already generated files. - * @param k on/off - */ - public void setKeepgenerated(final boolean k) { - keepGen = k; - } - - /** - * Specifies which RMIC compiler to use: the built-in fast one or the - * slower external one. - * @param value if true, use the external RMIC compiler - */ - public void setNoFastRMIC(final boolean value) { - noFastRMIC = value; - } - - /** - * Set the set of protocols for the generation. - * @param p protocol list (comma separated) - */ - public void setProtocols(final String p) { - protocols = p; - } - - /** - * Execute the WsGen Ant Task. - * @throws BuildException if something goes wrong - */ - @Override - public void execute() throws BuildException { - - // avoid a -n jonas in the GenIC command line - setServerName(null); - - for (Iterator fsIterator = filesets.iterator(); fsIterator.hasNext();) { - FileSet set = fsIterator.next(); - DirectoryScanner ds = set.getDirectoryScanner(getProject()); - ds.scan(); - String[] files = ds.getIncludedFiles(); - File srcDirectory = set.getDir(getProject()); - for (int i = 0; i < files.length; i++) { - - Java genic = getBootstraptask(GENIC_CLASS); - - configureGenIC(genic, srcDirectory + File.separator + files[i]); - - // calling GenIC task - log("Calling GenIC task for '" + srcDirectory + File.separator + files[i] + "'.", Project.MSG_VERBOSE); - - if (genic.executeJava() != 0) { - throw new BuildException("GenIC reported an error."); - } - } - } - - } - - /** - * @param genicJavaTask GenIC Task to be configured for GenIC - * @param filename name of the file to pass into GenIC - * @return a configured Java Task - * @throws BuildException if something goes wrong - */ - private Java configureGenIC(final Java genicJavaTask, final String filename) throws BuildException { - - // keepgenerated - if (keepGen) { - genicJavaTask.createArg().setValue("-keepgenerated"); - } - - if (noFastRMIC) { - genicJavaTask.createArg().setValue("-nofastrmic"); - } - - // novalidation - if (!validation) { - genicJavaTask.createArg().setValue("-novalidation"); - } - - // classpath - if (libraryClasspath != null) { - genicJavaTask.createArg().setValue("-classpath"); - genicJavaTask.createArg().setPath(libraryClasspath); - } - - // nocompil - if (nocompil) { - genicJavaTask.createArg().setValue("-nocompil"); - } - - // invokecmd - if (invokeCmd) { - genicJavaTask.createArg().setValue("-invokecmd"); - } - - // javac - if (javac != null) { - genicJavaTask.createArg().setValue("-javac"); - genicJavaTask.createArg().setLine(javac); - } - - // javacopts - if (javacOpts != null && !javacOpts.equals("")) { - genicJavaTask.createArg().setValue("-javacopts"); - genicJavaTask.createArg().setLine(javacOpts); - } - - // rmicopts - if (rmicOpts != null && !rmicOpts.equals("")) { - genicJavaTask.createArg().setValue("-rmicopts"); - genicJavaTask.createArg().setValue(rmicOpts); - } - - // verbose - if (verbose) { - genicJavaTask.createArg().setValue("-verbose"); - } - - // debug - if (debug) { - this.log("Launching in debug mode on port 12345, waiting for connection ...", Project.MSG_INFO); - genicJavaTask.createJvmarg().setLine("-Xdebug -Xnoagent -Xrunjdwp:transport=" - + "dt_socket,server=y,address=12345,suspend=y"); - } - - // additionalargs - if (additionalArgs != null) { - genicJavaTask.createArg().setLine(additionalArgs); - } - - // protocols - if (protocols != null) { - genicJavaTask.createArg().setValue("-protocols"); - genicJavaTask.createArg().setValue(protocols); - } - - // input file to process by GenIC - genicJavaTask.createArg().setValue(filename); - - return genicJavaTask; - - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenericDeploymentTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenericDeploymentTool.java deleted file mode 100644 index da9060464b..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/GenericDeploymentTool.java +++ /dev/null @@ -1,929 +0,0 @@ -/** - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.ow2.jonas.ant; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.jar.JarOutputStream; -import java.util.jar.Manifest; -import java.util.zip.ZipEntry; -import javax.xml.parsers.SAXParser; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Location; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Path; -import org.apache.tools.ant.util.depend.DependencyAnalyzer; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - - -/** - * A deployment tool which creates generic EJB jars. Generic jars contains - * only those classes and META-INF entries specified in the EJB 1.1 standard - * - * This class is also used as a framework for the creation of vendor specific - * deployment tools. A number of template methods are provided through which the - * vendor specific tool can hook into the EJB creation process. - * - */ - - -/** - * @WARNING : - * Method writeJar is modified. It allows to include or not inner classes for some classes). - * protected void writeJar(String baseName, File jarfile, Hashtable files, - * String publicId, boolean includeInnerClasses) throws BuildException { -*/ - -public class GenericDeploymentTool implements EJBDeploymentTool { - /** The standard META-INF directory in jar files */ - protected static final String META_DIR = "META-INF/"; - - /** The standard MANIFEST file */ - protected static final String MANIFEST = META_DIR + "MANIFEST.MF"; - - /** Name for EJB Deployment descriptor within EJB jars */ - protected static final String EJB_DD = "ejb-jar.xml"; - - /** A dependency analyzer name to find ancestor classes */ - public static final String ANALYZER_SUPER = "super"; - /** A dependency analyzer name to find all related classes */ - public static final String ANALYZER_FULL = "full"; - /** A dependency analyzer name for no analyzer */ - public static final String ANALYZER_NONE = "none"; - - /** The default analyzer */ - public static final String DEFAULT_ANALYZER = ANALYZER_SUPER; - - /** The analyzer class for the super analyzer */ - public static final String ANALYZER_CLASS_SUPER - = "org.apache.tools.ant.util.depend.bcel.AncestorAnalyzer"; - /** The analyzer class for the super analyzer */ - public static final String ANALYZER_CLASS_FULL - = "org.apache.tools.ant.util.depend.bcel.FullAnalyzer"; - - /** - * The configuration from the containing task. This config combined - * with the settings of the individual attributes here constitues the - * complete config for this deployment tool. - */ - private EjbJar.Config config; - - /** Stores a handle to the directory to put the Jar files in */ - private File destDir; - - /** The classpath to use with this deployment tool. This is appended to - any paths from the ejbjar task itself.*/ - private Path classpath; - - /** Instance variable that stores the suffix for the generated jarfile. */ - private String genericJarSuffix = "-generic.jar"; - - /** - * The task to which this tool belongs. This is used to access services - * provided by the ant core, such as logging. - */ - private Task task; - - /** - * The classloader generated from the given classpath to load - * the super classes and super interfaces. - */ - private ClassLoader classpathLoader = null; - - /** - * List of files have been loaded into the EJB jar - */ - private List addedfiles; - - /** - * Handler used to parse the EJB XML descriptor - */ - private DescriptorHandler handler; - - /** - * Dependency analyzer used to collect class dependencies - */ - private DependencyAnalyzer dependencyAnalyzer; - - public GenericDeploymentTool() { - } - - - /** - * Set the destination directory; required. - * @param inDir the destination directory. - */ - public void setDestdir(File inDir) { - this.destDir = inDir; - } - - /** - * Get the destination directory. - * - * @return the destination directory into which EJB jars are to be written - */ - protected File getDestDir() { - return destDir; - } - - - /** - * Set the task which owns this tool - * - * @param task the Task to which this deployment tool is associated. - */ - public void setTask(Task task) { - this.task = task; - } - - /** - * Get the task for this tool. - * - * @return the Task instance this tool is associated with. - */ - protected Task getTask() { - return task; - } - - /** - * Get the basename terminator. - * - * @return an ejbjar task configuration - */ - protected EjbJar.Config getConfig() { - return config; - } - - /** - * Indicate if this build is using the base jar name. - * - * @return true if the name of the generated jar is coming from the - * basejarname attribute - */ - protected boolean usingBaseJarName() { - return config.baseJarName != null; - } - - /** - * Set the suffix for the generated jar file. - * @param inString the string to use as the suffix. - */ - public void setGenericJarSuffix(String inString) { - this.genericJarSuffix = inString; - } - - /** - * Add the classpath for the user classes - * - * @return a Path instance to be configured by Ant. - */ - public Path createClasspath() { - if (classpath == null) { - classpath = new Path(task.getProject()); - } - return classpath.createPath(); - } - - /** - * Set the classpath to be used for this compilation. - * - * @param classpath the classpath to be used for this build. - */ - public void setClasspath(Path classpath) { - this.classpath = classpath; - } - - /** - * Get the classpath by combining the one from the surrounding task, if any - * and the one from this tool. - * - * @return the combined classpath - */ - protected Path getCombinedClasspath() { - Path combinedPath = classpath; - if (config.classpath != null) { - if (combinedPath == null) { - combinedPath = config.classpath; - } else { - combinedPath.append(config.classpath); - } - } - - return combinedPath; - } - - /** - * Log a message to the Ant output. - * - * @param message the message to be logged. - * @param level the severity of this message. - */ - protected void log(String message, int level) { - getTask().log(message, level); - } - - /** - * Get the build file location associated with this element's task. - * - * @return the task's location instance. - */ - protected Location getLocation() { - return getTask().getLocation(); - } - - private void createAnalyzer() { - String analyzer = config.analyzer; - if (analyzer == null) { - analyzer = DEFAULT_ANALYZER; - } - - if (analyzer.equals(ANALYZER_NONE)) { - return; - } - - String analyzerClassName = null; - if (analyzer.equals(ANALYZER_SUPER)) { - analyzerClassName = ANALYZER_CLASS_SUPER; - } else if (analyzer.equals(ANALYZER_FULL)) { - analyzerClassName = ANALYZER_CLASS_FULL; - } else { - analyzerClassName = analyzer; - } - - try { - Class analyzerClass = Class.forName(analyzerClassName); - dependencyAnalyzer - = (DependencyAnalyzer) analyzerClass.newInstance(); - dependencyAnalyzer.addClassPath(new Path(task.getProject(), - config.srcDir.getPath())); - dependencyAnalyzer.addClassPath(config.classpath); - } catch (NoClassDefFoundError e) { - dependencyAnalyzer = null; - task.log("Unable to load dependency analyzer: " + analyzerClassName - + " - dependent class not found: " + e.getMessage(), - Project.MSG_WARN); - } catch (Exception e) { - dependencyAnalyzer = null; - task.log("Unable to load dependency analyzer: " + analyzerClassName - + " - exception: " + e.getMessage(), - Project.MSG_WARN); - } - } - - - /** - * Configure this tool for use in the ejbjar task. - * - * @param config the configuration from the surrounding ejbjar task. - */ - public void configure(EjbJar.Config config) { - this.config = config; - - createAnalyzer(); - classpathLoader = null; - } - - /** - * Utility method that encapsulates the logic of adding a file entry to - * a .jar file. Used by execute() to add entries to the jar file as it is - * constructed. - * @param jStream A JarOutputStream into which to write the - * jar entry. - * @param inputFile A File from which to read the - * contents the file being added. - * @param logicalFilename A String representing the name, including - * all relevant path information, that should be stored for the entry - * being added. - */ - protected void addFileToJar(JarOutputStream jStream, - File inputFile, - String logicalFilename) - throws BuildException { - FileInputStream iStream = null; - try { - if (!addedfiles.contains(logicalFilename)) { - iStream = new FileInputStream(inputFile); - // Create the zip entry and add it to the jar file - ZipEntry zipEntry = new ZipEntry(logicalFilename.replace('\\', '/')); - jStream.putNextEntry(zipEntry); - - // Create the file input stream, and buffer everything over - // to the jar output stream - byte[] byteBuffer = new byte[2 * 1024]; - int count = 0; - do { - jStream.write(byteBuffer, 0, count); - count = iStream.read(byteBuffer, 0, byteBuffer.length); - } while (count != -1); - - //add it to list of files in jar - addedfiles.add(logicalFilename); - } - } catch (IOException ioe) { - log("WARNING: IOException while adding entry " - + logicalFilename + " to jarfile from " - + inputFile.getPath() + " " + ioe.getClass().getName() - + "-" + ioe.getMessage(), Project.MSG_WARN); - } finally { - // Close up the file input stream for the class file - if (iStream != null) { - try { - iStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - } - - protected DescriptorHandler getDescriptorHandler(File srcDir) { - DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir); - - registerKnownDTDs(handler); - - // register any DTDs supplied by the user - for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) { - EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next(); - handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation()); - } - return handler; - } - - /** - * Register the locations of all known DTDs. - * - * vendor-specific subclasses should override this method to define - * the vendor-specific locations of the EJB DTDs - */ - protected void registerKnownDTDs(DescriptorHandler handler) { - // none to register for generic - } - - public void processDescriptor(String descriptorFileName, SAXParser saxParser) { - - checkConfiguration(descriptorFileName, saxParser); - - try { - handler = getDescriptorHandler(config.srcDir); - - // Retrive the files to be added to JAR from EJB descriptor - Hashtable ejbFiles = parseEjbFiles(descriptorFileName, saxParser); - - // Add any support classes specified in the build file - addSupportClasses(ejbFiles); - - // Determine the JAR filename (without filename extension) - String baseName = getJarBaseName(descriptorFileName); - - String ddPrefix = getVendorDDPrefix(baseName, descriptorFileName); - - File manifestFile = getManifestFile(ddPrefix); - if (manifestFile != null) { - ejbFiles.put(MANIFEST, manifestFile); - } - - - - // First the regular deployment descriptor - ejbFiles.put(META_DIR + EJB_DD, - new File(config.descriptorDir, descriptorFileName)); - - // now the vendor specific files, if any - addVendorFiles(ejbFiles, ddPrefix); - - // add any dependent files - checkAndAddDependants(ejbFiles); - - // Lastly create File object for the Jar files. If we are using - // a flat destination dir, then we need to redefine baseName! - if (config.flatDestDir && baseName.length() != 0) { - int startName = baseName.lastIndexOf(File.separator); - if (startName == -1) { - startName = 0; - } - - int endName = baseName.length(); - baseName = baseName.substring(startName, endName); - } - - File jarFile = getVendorOutputJarFile(baseName); - - - // Check to see if we need a build and start doing the work! - if (needToRebuild(ejbFiles, jarFile)) { - // Log that we are going to build... - log("building " - + jarFile.getName() - + " with " - + String.valueOf(ejbFiles.size()) - + " files", - Project.MSG_INFO); - - // Use helper method to write the jarfile - String publicId = getPublicId(); - writeJar(baseName, jarFile, ejbFiles, publicId, true); - - } else { - // Log that the file is up to date... - log(jarFile.toString() + " is up to date.", - Project.MSG_VERBOSE); - } - - } catch (SAXException se) { - String msg = "SAXException while parsing '" - + descriptorFileName.toString() - + "'. This probably indicates badly-formed XML." - + " Details: " - + se.getMessage(); - throw new BuildException(msg, se); - } catch (IOException ioe) { - String msg = "IOException while parsing'" - + descriptorFileName.toString() - + "'. This probably indicates that the descriptor" - + " doesn't exist. Details: " - + ioe.getMessage(); - throw new BuildException(msg, ioe); - } - } - - /** - * This method is called as the first step in the processDescriptor method - * to allow vendor-specific subclasses to validate the task configuration - * prior to processing the descriptor. If the configuration is invalid, - * a BuildException should be thrown. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @exception BuildException Thrown if the configuration is invalid - */ - protected void checkConfiguration(String descriptorFileName, - SAXParser saxParser) throws BuildException { - - /* - * For the GenericDeploymentTool, do nothing. Vendor specific - * subclasses should throw a BuildException if the configuration is - * invalid for their server. - */ - } - - /** - * This method returns a list of EJB files found when the specified EJB - * descriptor is parsed and processed. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @param saxParser SAXParser which may be used to parse the XML - * descriptor - * @return Hashtable of EJB class (and other) files to be - * added to the completed JAR file - * @throws org.xml.sax.SAXException Any SAX exception, possibly wrapping another - * exception - * @throws java.io.IOException An IOException from the parser, possibly from a - * the byte stream or character stream - */ - protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser) - throws IOException, SAXException { - FileInputStream descriptorStream = null; - Hashtable ejbFiles = null; - - try { - - /* Parse the ejb deployment descriptor. While it may not - * look like much, we use a SAXParser and an inner class to - * get hold of all the classfile names for the descriptor. - */ - descriptorStream - = new FileInputStream(new File(config.descriptorDir, descriptorFileName)); - saxParser.parse(new InputSource(descriptorStream), handler); - - ejbFiles = handler.getFiles(); - - } finally { - if (descriptorStream != null) { - try { - descriptorStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - - return ejbFiles; - } - - /** - * Adds any classes the user specifies using support nested elements - * to the ejbFiles Hashtable. - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - */ - protected void addSupportClasses(Hashtable ejbFiles) { - // add in support classes if any - Project project = task.getProject(); - for (Iterator i = config.supportFileSets.iterator(); i.hasNext();) { - FileSet supportFileSet = (FileSet) i.next(); - File supportBaseDir = supportFileSet.getDir(project); - DirectoryScanner supportScanner = supportFileSet.getDirectoryScanner(project); - supportScanner.scan(); - String[] supportFiles = supportScanner.getIncludedFiles(); - for (int j = 0; j < supportFiles.length; ++j) { - ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j])); - } - } - } - - - /** - * Using the EJB descriptor file name passed from the ejbjar - * task, this method returns the "basename" which will be used to name the - * completed JAR file. - * - * @param descriptorFileName String representing the file name of an EJB - * descriptor to be processed - * @return The "basename" which will be used to name the - * completed JAR file - */ - protected String getJarBaseName(String descriptorFileName) { - - String baseName = ""; - - // Work out what the base name is - if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME)) { - String canonicalDescriptor = descriptorFileName.replace('\\', '/'); - int index = canonicalDescriptor.lastIndexOf('/'); - if (index != -1) { - baseName = descriptorFileName.substring(0, index + 1); - } - baseName += config.baseJarName; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator); - int endBaseName = -1; - if (lastSeparatorIndex != -1) { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator, - lastSeparatorIndex); - } else { - endBaseName = descriptorFileName.indexOf(config.baseNameTerminator); - } - - if (endBaseName != -1) { - baseName = descriptorFileName.substring(0, endBaseName); - } else { - throw new BuildException("Unable to determine jar name " - + "from descriptor \"" + descriptorFileName + "\""); - } - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) { - File descriptorFile = new File(config.descriptorDir, descriptorFileName); - String path = descriptorFile.getAbsolutePath(); - int lastSeparatorIndex - = path.lastIndexOf(File.separator); - if (lastSeparatorIndex == -1) { - throw new BuildException("Unable to determine directory name holding descriptor"); - } - String dirName = path.substring(0, lastSeparatorIndex); - int dirSeparatorIndex = dirName.lastIndexOf(File.separator); - if (dirSeparatorIndex != -1) { - dirName = dirName.substring(dirSeparatorIndex + 1); - } - - baseName = dirName; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME)) { - baseName = handler.getEjbName(); - } - return baseName; - } - - /** - * Get the prefix for vendor deployment descriptors. - * - * This will contain the path and the start of the descriptor name, - * depending on the naming scheme - */ - public String getVendorDDPrefix(String baseName, String descriptorFileName) { - String ddPrefix = null; - - if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - ddPrefix = baseName + config.baseNameTerminator; - } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME) - || config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME) - || config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) { - String canonicalDescriptor = descriptorFileName.replace('\\', '/'); - int index = canonicalDescriptor.lastIndexOf('/'); - if (index == -1) { - ddPrefix = ""; - } else { - ddPrefix = descriptorFileName.substring(0, index + 1); - } - } - return ddPrefix; - } - - /** - * Add any vendor specific files which should be included in the - * EJB Jar. - */ - protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { - // nothing to add for generic tool. - } - - - /** - * Get the vendor specific name of the Jar that will be output. The modification date - * of this jar will be checked against the dependent bean classes. - */ - File getVendorOutputJarFile(String baseName) { - return new File(destDir, baseName + genericJarSuffix); - } - - /** - * This method checks the timestamp on each file listed in the - * ejbFiles and compares them to the timestamp on the jarFile - * . If the jarFile's timestamp is more recent than - * each EJB file, true is returned. Otherwise, false - * is returned. - * TODO: find a way to check the manifest-file, that is found by naming convention - * - * @param ejbFiles Hashtable of EJB classes (and other) files that will be - * added to the completed JAR file - * @param jarFile JAR file which will contain all of the EJB classes (and - * other) files - * @return boolean indicating whether or not the jarFile - * is up to date - */ - protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) { - if (jarFile.exists()) { - long lastBuild = jarFile.lastModified(); - - Iterator fileIter = ejbFiles.values().iterator(); - - // Loop through the files seeing if any has been touched - // more recently than the destination jar. - while (fileIter.hasNext()) { - File currentFile = (File) fileIter.next(); - if (lastBuild < currentFile.lastModified()) { - log("Build needed because " + currentFile.getPath() + " is out of date", - Project.MSG_VERBOSE); - return true; - } - } - return false; - } - - return true; - } - - /** - * Returns the Public ID of the DTD specified in the EJB descriptor. Not - * every vendor-specific DeploymentTool will need to reference - * this value or may want to determine this value in a vendor-specific way. - * - * @return Public ID of the DTD specified in the EJB descriptor. - */ - protected String getPublicId() { - return handler.getPublicId(); - } - - /** - * Get the manifets file to use for building the generic jar. - * - * If the file does not exist the global manifest from the config is used - * otherwise the default Ant manifest will be used. - * - * @param prefix the prefix where to llook for the manifest file based on - * the naming convention. - * - * @return the manifest file or null if the manifest file does not exist - */ - protected File getManifestFile(String prefix) { - File manifestFile - = new File(getConfig().descriptorDir, prefix + "manifest.mf"); - if (manifestFile.exists()) { - return manifestFile; - } - - if (config.manifest != null) { - return config.manifest; - } - return null; - } - - /** - * Method used to encapsulate the writing of the JAR file. Iterates over the - * filenames/java.io.Files in the Hashtable stored on the instance variable - * ejbFiles. - * @param includeInnerClasses if true, include inner classes - */ - protected void writeJar(String baseName, File jarfile, Hashtable files, - String publicId, boolean includeInnerClasses) throws BuildException { - - JarOutputStream jarStream = null; - try { - // clean the addedfiles Vector - addedfiles = new ArrayList(); - - /* If the jarfile already exists then whack it and recreate it. - * Should probably think of a more elegant way to handle this - * so that in case of errors we don't leave people worse off - * than when we started =) - */ - if (jarfile.exists()) { - jarfile.delete(); - } - jarfile.getParentFile().mkdirs(); - jarfile.createNewFile(); - - InputStream in = null; - Manifest manifest = null; - try { - File manifestFile = (File) files.get(MANIFEST); - if (manifestFile != null && manifestFile.exists()) { - in = new FileInputStream(manifestFile); - } else { - String defaultManifest = "/org/apache/tools/ant/defaultManifest.mf"; - in = this.getClass().getResourceAsStream(defaultManifest); - if (in == null) { - throw new BuildException("Could not find " - + "default manifest: " + defaultManifest); - } - } - - manifest = new Manifest(in); - } catch (IOException e) { - throw new BuildException ("Unable to read manifest", e, getLocation()); - } finally { - if (in != null) { - in.close(); - } - } - - // Create the streams necessary to write the jarfile - - jarStream = new JarOutputStream(new FileOutputStream(jarfile), manifest); - jarStream.setMethod(JarOutputStream.DEFLATED); - - // Loop through all the class files found and add them to the jar - for (Iterator entryIterator = files.keySet().iterator(); entryIterator.hasNext();) { - String entryName = (String) entryIterator.next(); - if (entryName.equals(MANIFEST)) { - continue; - } - - File entryFile = (File) files.get(entryName); - - log("adding file '" + entryName + "'", - Project.MSG_VERBOSE); - - addFileToJar(jarStream, entryFile, entryName); - - // See if there are any inner classes for this class and add them in if there are - InnerClassFilenameFilter flt = new InnerClassFilenameFilter(entryFile.getName()); - File entryDir = entryFile.getParentFile(); - String[] innerfiles = entryDir.list(flt); - if (innerfiles != null && includeInnerClasses) { - for (int i = 0, n = innerfiles.length; i < n; i++) { - - //get and clean up innerclass name - int entryIndex = entryName.lastIndexOf(entryFile.getName()) - 1; - if (entryIndex < 0) { - entryName = innerfiles[i]; - } else { - entryName = entryName.substring(0, entryIndex) - + File.separatorChar + innerfiles[i]; - } - // link the file - entryFile = new File(config.srcDir, entryName); - - log("adding innerclass file '" + entryName + "'", - Project.MSG_VERBOSE); - - addFileToJar(jarStream, entryFile, entryName); - - } - } - } - } catch (IOException ioe) { - String msg = "IOException while processing ejb-jar file '" - + jarfile.toString() - + "'. Details: " - + ioe.getMessage(); - throw new BuildException(msg, ioe); - } finally { - if (jarStream != null) { - try { - jarStream.close(); - } catch (IOException closeException) { - // ignore - } - } - } - } // end of writeJar - - - /** - * Add all available classes, that depend on Remote, Home, Bean, PK - * @param checkEntries files, that are extracted from the deployment descriptor - */ - protected void checkAndAddDependants(Hashtable checkEntries) - throws BuildException { - - if (dependencyAnalyzer == null) { - return; - } - - dependencyAnalyzer.reset(); - - Iterator i = checkEntries.keySet().iterator(); - while (i.hasNext()) { - String entryName = (String) i.next(); - if (entryName.endsWith(".class")) { - String className = entryName.substring(0, - entryName.length() - ".class".length()); - className = className.replace(File.separatorChar, '/'); - className = className.replace('/', '.'); - - dependencyAnalyzer.addRootClass(className); - } - } - - Enumeration e = dependencyAnalyzer.getClassDependencies(); - - while (e.hasMoreElements()) { - String classname = (String) e.nextElement(); - String location - = classname.replace('.', File.separatorChar) + ".class"; - File classFile = new File(config.srcDir, location); - if (classFile.exists()) { - checkEntries.put(location, classFile); - log("dependent class: " + classname + " - " + classFile, - Project.MSG_VERBOSE); - } - } - } - - - /** - * Returns a Classloader object which parses the passed in generic EjbJar classpath. - * The loader is used to dynamically load classes from javax.ejb.* and the classes - * being added to the jar. - * - */ - protected ClassLoader getClassLoaderForBuild() { - if (classpathLoader != null) { - return classpathLoader; - } - - Path combinedClasspath = getCombinedClasspath(); - - // only generate a new ClassLoader if we have a classpath - if (combinedClasspath == null) { - classpathLoader = getClass().getClassLoader(); - } else { - classpathLoader - = getTask().getProject().createClassLoader(combinedClasspath); - } - - return classpathLoader; - } - - /** - * Called to validate that the tool parameters have been configured. - * - * @throws BuildException If the Deployment Tool's configuration isn't - * valid - */ - public void validateConfigured() throws BuildException { - if ((destDir == null) || (!destDir.isDirectory())) { - String msg = "A valid destination directory must be specified " - + "using the \"destdir\" attribute."; - throw new BuildException(msg, getLocation()); - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/HotDeploymentTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/HotDeploymentTool.java deleted file mode 100644 index e9a237e25c..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/HotDeploymentTool.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright 2002-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.ow2.jonas.ant; - -import org.apache.tools.ant.BuildException; - -/** - * An interface for vendor-specific "hot" deployment tools. - * @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool - * @see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy - */ -public interface HotDeploymentTool { - - /** - * The delete action String - */ - String ACTION_DELETE = "delete"; - - /** - * The deploy action String - */ - String ACTION_DEPLOY = "deploy"; - - /** - * The list action String - */ - String ACTION_LIST = "list"; - - /** - * The undeploy action String - */ - String ACTION_UNDEPLOY = "undeploy"; - - /** - * The update action String - */ - String ACTION_UPDATE = "update"; - - /** - * Validates the passed in attributes. - * @exception org.apache.tools.ant.BuildException if the attributes are - * invalid or incomplete. - */ - void validateAttributes() throws BuildException; - - /** - * Perform the actual deployment. - * @exception org.apache.tools.ant.BuildException if the attributes are - * invalid or incomplete. - */ - void deploy() throws BuildException; - - /** - * Sets the parent task. - * @param task A ServerDeploy object representing the parent task. - */ - void setTask(ServerDeploy task); -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/InnerClassFilenameFilter.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/InnerClassFilenameFilter.java deleted file mode 100644 index 65472f0ddd..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/InnerClassFilenameFilter.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2000,2002,2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package org.ow2.jonas.ant; - -import java.io.File; -import java.io.FilenameFilter; - -public class InnerClassFilenameFilter implements FilenameFilter { - - private String baseClassName; - - InnerClassFilenameFilter(String baseclass) { - int extidx = baseclass.lastIndexOf(".class"); - if (extidx == -1) { - extidx = baseclass.length() - 1; - } - baseClassName = baseclass.substring(0, extidx); - } - - public boolean accept(File Dir, String filename) { - if ((filename.lastIndexOf(".") != filename.lastIndexOf(".class")) - || (filename.indexOf(baseClassName + "$") != 0)) { - return false; - } - return true; - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASAntTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASAntTool.java deleted file mode 100644 index 51eb66e9a9..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASAntTool.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import java.io.File; - -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.Environment; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.Environment.Variable; -import org.apache.tools.ant.types.PatternSet.NameEntry; -import org.ow2.jonas.ant.jonasbase.Archives; -import org.ow2.jonas.ant.jonasbase.DeploymentPlans; - - -/** - * Common constants or methods used by several classes of the package. - * @author Benoit Pelletier - */ -public final class JOnASAntTool { - - - /** - * List of deployment plans to copy for each JONAS_BASE. - */ - public static final String[] DEPLOYMENT_PLAN_LIST = new String[] {"jonasAdmin.xml", - "joram.xml", - "mejb.xml", - "ctxroot.xml", - "doc.xml"}; - - - /** - * Private constructor for tool class. - */ - private JOnASAntTool() { - - } - - /** - * Update the JONAS_BASE directory with ejbjars, webapps, rars, etc. - * @param antTask target task - * @param jonasRoot JONAS_ROOT - * @param destDir destination directory - **/ - public static void updateJonasBase(final Task antTask, - final File jonasRoot, - final File destDir, final String[] deploymentPlanList) { - Archives deploymentPlans = new DeploymentPlans(); - String[] depPlans = DEPLOYMENT_PLAN_LIST; - if(deploymentPlanList != null) { - depPlans = deploymentPlanList; - } - - updateJonasBaseForArchives(antTask, jonasRoot, destDir, deploymentPlans, "deploy", depPlans); - } - - /** - * Update JONAS_BASE with given archives with lists of includes. - * @param antTask target task - * @param jonasRoot JONAS_ROOT - * @param destDir destination directory - * @param archives tasks (webapps, rars, ejbjars) - * @param folderName where to put files - * @param listOfIncludes files to include - */ - public static void updateJonasBaseForArchives(final Task antTask, - final File jonasRoot, - final File destDir, - final Archives archives, - final String folderName, - final String[] listOfIncludes) { - configure(antTask, archives); - archives.setDestDir(destDir); - FileSet fileSet = new FileSet(); - fileSet.setDir(new File(jonasRoot, folderName)); - for (int f = 0; f < listOfIncludes.length; f++) { - NameEntry ne = fileSet.createInclude(); - ne.setName(listOfIncludes[f]); - } - archives.addFileset(fileSet); - archives.setOverwrite(true); - String info = archives.getLogInfo(); - if (info != null) { - antTask.log(info, Project.MSG_INFO); - } - archives.execute(); - } - - /** - * Configure the given task by setting name, project root, etc. - * @param srcTask source task - * @param dstTask destination task - */ - public static void configure(final Task srcTask, final Task dstTask) { - dstTask.setTaskName(srcTask.getTaskName()); - dstTask.setProject(srcTask.getProject()); - } - - /** - * Delete a file. If the file is a directory, delete recursively all the - * files inside. - * @param aFile file to delete. - */ - public static void deleteAllFiles(final File aFile) { - if (aFile.isDirectory()) { - File[] someFiles = aFile.listFiles(); - for (int i = 0; i < someFiles.length; i++) { - deleteAllFiles(someFiles[i]); - } - } - aFile.delete(); - } - - /** - * Create an Ant {@link Variable} configured with a simple value. - * @param key variable name - * @param value variable value - * @return a configured {@link Variable} - */ - public static Environment.Variable createVariable(final String key, final String value) { - Environment.Variable variable = new Environment.Variable(); - variable.setKey(key); - variable.setValue(value); - return variable; - } - - /** - * Create an Ant {@link Variable} configured with an absolute File path as value. - * @param key variable name - * @param value variable value - * @return a configured {@link Variable} - */ - public static Environment.Variable createVariable(final String key, final File value) { - Environment.Variable variable = new Environment.Variable(); - variable.setKey(key); - variable.setFile(value); - return variable; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASBaseTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASBaseTask.java deleted file mode 100644 index d69b7817dd..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASBaseTask.java +++ /dev/null @@ -1,409 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.types.FileSet; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Carol; -import org.ow2.jonas.ant.jonasbase.Db; -import org.ow2.jonas.ant.jonasbase.Dbm; -import org.ow2.jonas.ant.jonasbase.Discovery; -import org.ow2.jonas.ant.jonasbase.JMkdir; -import org.ow2.jonas.ant.jonasbase.JdbcRa; -import org.ow2.jonas.ant.jonasbase.JdbcXml; -import org.ow2.jonas.ant.jonasbase.Jms; -import org.ow2.jonas.ant.jonasbase.JonasProperties; -import org.ow2.jonas.ant.jonasbase.Lib; -import org.ow2.jonas.ant.jonasbase.Mail; -import org.ow2.jonas.ant.jonasbase.Services; -import org.ow2.jonas.ant.jonasbase.Tasks; -import org.ow2.jonas.ant.jonasbase.WebContainer; -import org.ow2.jonas.ant.jonasbase.jaas.Jaas; -import org.ow2.jonas.ant.jonasbase.wsdl.WsdlPublish; - -/** - * Class used to create a JOnAS base with different configuration like port, url - * for JNDI, etc. - * @author Florent Benoit - */ -public class JOnASBaseTask extends Task { - - /** - * Name of JOnAS configuration file. - */ - public static final String JONAS_CONF_FILE = "jonas.properties"; - - /** - * Name of Joram configuration file. - */ - public static final String JORAM_CONF_FILE = "a3servers.xml"; - - /** - * Name of Joram admin configuration file (resource adaptor). - */ - public static final String JORAM_ADMIN_CONF_FILE = "joramAdmin.xml"; - - /** - * Name of Carol configuration file. - */ - public static final String CAROL_CONF_FILE = "carol.properties"; - - /** - * Name of JGroups CMI configuration file. - */ - public static final String JGROUPS_CMI_CONF_FILE = "jgroups-cmi.xml"; - - /** - * Name of JGroups HA configuration file. - */ - public static final String JGROUPS_HA_CONF_FILE = "jgroups-ha.xml"; - - /** - * Name of Tomcat configuration file. - */ - public static final String TOMCAT_CONF_FILE = "tomcat7-server.xml"; - - /** - * Name of Tomcat configuration file. - */ - public static final String JETTY_CONF_FILE = "jetty6.xml"; - - /** - * Name of P6Spy configuration file. - */ - public static final String P6SPY_CONF_FILE = "spy.properties"; - - /** - * Name of domain management file. - */ - public static final String DOMAIN_CONF_FILE = "domain.xml"; - - /** - * Name of JAAS configuration file. - */ - public static final String JAAS_CONF_FILE = "jaas.config"; - - /** - * Name of logs directory. - */ - public static final String LOG_DIR_NAME = "logs"; - - /** - * Name of deploy directory. - */ - public static final String DEPLOY_DIR_NAME = "deploy"; - - /** - * Name of datasources configuration file - */ - public static final String JDBC_DS_CONF_FILE = "jdbc-ds.xml"; - /** - * Name of lib/ext directory. - */ - public static final String LIB_EXT_DIR_NAME = "lib/ext"; - - /** - * Source directory (JOnAS root). - */ - private File jonasRoot = null; - - /** - * Destination directory (Where create the jonasBase). - */ - private File destDir = null; - - /** - * Update only JONAS_BASE without erasing it. - */ - private boolean onlyUpdate = false; - - /** - * List of tasks to do. - */ - private List tasks = null; - - /** - * Constructor. - */ - public JOnASBaseTask() { - tasks = new ArrayList(); - } - - /** - * Run this task. - * @see org.apache.tools.ant.Task#execute() - */ - @Override - public void execute() { - if (jonasRoot == null) { - throw new BuildException("jonasRoot element is not set"); - } - - if (destDir == null) { - throw new BuildException("destDir element is not set"); - } - - if (jonasRoot.getPath().equals(destDir.getPath())) { - throw new BuildException("jonasRoot and destDir is the same path !"); - } - - File jprops = new File(destDir.getPath() + File.separator + "conf" + File.separator + "jonas.properties"); - - if (onlyUpdate) { - if (!jprops.exists()) { - throw new BuildException("JOnAS base directory '" + destDir.getPath() + "' doesn't exists. Cannot update."); - } - } - - if (!onlyUpdate) { - // First, create JOnAS base - log("Creating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'", - Project.MSG_INFO); - Copy copy = new Copy(); - JOnASAntTool.configure(this, copy); - copy.setTodir(destDir); - FileSet fileSet = new FileSet(); - fileSet.setDir(new File(new File(jonasRoot, "templates"), "conf")); - copy.addFileset(fileSet); - copy.setOverwrite(true); - copy.execute(); - - log("Creating logs in the directory '" + destDir, Project.MSG_INFO); - JMkdir mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + LOG_DIR_NAME)); - mkdir.execute(); - - log("Creating deploy in the directory '" + destDir, Project.MSG_INFO); - mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + DEPLOY_DIR_NAME)); - mkdir.execute(); - - log("Creating lib/ext in the directory '" + destDir, Project.MSG_INFO); - mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + LIB_EXT_DIR_NAME)); - mkdir.execute(); - } else { - log("Only updating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'", - Project.MSG_INFO); - } - - - for (Iterator it = tasks.iterator(); it.hasNext();) { - Object o = it.next(); - if (o instanceof BaseTaskItf) { - BaseTaskItf task = (BaseTaskItf) o; - task.setDestDir(destDir); - task.setJonasRoot(jonasRoot); - if (task instanceof BootstrapTask) { - ((BootstrapTask) task).setJonasBase(destDir); - } - JOnASAntTool.configure(this, (Task) task); - String info = task.getLogInfo(); - if (info != null) { - log(info, Project.MSG_INFO); - } - task.execute(); - } else { - Task task = (Task) o; - JOnASAntTool.configure(this, task); - task.execute(); - } - } - - // Then update JonasBase - JOnASAntTool.updateJonasBase(this, jonasRoot, destDir, null); - } - - /** - * Add tasks for configured object. - * @param subTasks some tasks to do on files - */ - public void addTasks(final Tasks subTasks) { - if (subTasks != null) { - for (Iterator it = subTasks.getTasks().iterator(); it.hasNext();) { - tasks.add(it.next()); - } - } - } - - /** - * Add a task for configure some objects. - * @param task the task to do - */ - public void addTask(final BaseTaskItf task) { - if (task != null) { - tasks.add(task); - } - } - - /** - * Add tasks for services (wrapped to default method). - * @param servicesTasks tasks to do on files - */ - public void addConfiguredServices(final Services servicesTasks) { - addTask(servicesTasks); - } - - /** - * Add tasks for jonas.properties global properties configuration. - * @param servicesTasks tasks to do on files - */ - public void addConfiguredJonasProperties(final JonasProperties servicesTasks) { - addTask(servicesTasks); - } - - /** - * Add tasks for JMS configuration. - * @param jmsTasks tasks to do on files - */ - public void addConfiguredJms(final Jms jmsTasks) { - addTasks(jmsTasks); - } - - /** - * Add task for Resource adaptor. - * @param jdbcRaTask task to do - */ - public void addConfiguredJdbcRa(final JdbcRa jdbcRaTask) { - addTask(jdbcRaTask); - } - - /** - * Add task for Resource adaptor. - * @param jdbcRaTask task to do - */ - public void addConfiguredJdbcXml(final JdbcXml jdbcXmlTask) { - addTask(jdbcXmlTask); - } - - /** - * Add task for Resource adaptor. - * @param mailTask task to do - */ - public void addConfiguredMail(final Mail mailTask) { - addTask(mailTask); - } - - /** - * Add task for the DB service. - * @param dbTask task to do - */ - public void addConfiguredDb(final Db dbTask) { - addTask(dbTask); - } - - /** - * Add task for the DBM service. - * @param dbTask task to do - */ - public void addConfiguredDbm(final Dbm dbTask) { - addTask(dbTask); - } - /** - * Add task for library to put in JONAS_BASE/lib/ext. - * @param libTask task to do - */ - public void addConfiguredLib(final Lib libTask) { - addTask(libTask); - } - - /** - * Add task for WSDL. - * @param wsdlTask task to do - */ - public void addConfiguredWsdlPublish(final WsdlPublish wsdlTask) { - addTask(wsdlTask); - } - - /** - * Add tasks for Carol configuration. - * @param carolTasks tasks to do on files - */ - public void addConfiguredCarol(final Carol carolTasks) { - addTask(carolTasks); - } - - /** - * Add tasks for Discovery configuration. - * @param discoveryTasks tasks to do on files - */ - public void addConfiguredDiscovery(final Discovery discoveryTasks) { - addTasks(discoveryTasks); - } - - /** - * Add tasks for the web container configuration. - * @param webContainerTasks tasks to do on files - */ - public void addConfiguredWebContainer(final WebContainer webContainerTasks) { - addTasks(webContainerTasks); - } - - /** - * Add tasks for JAAS configuration. - * @param jaasTasks tasks to do on files - */ - public void addConfiguredJaas(final Jaas jaasTasks) { - addTasks(jaasTasks); - } - - /** - * Set the destination directory for the replacement. - * @param destDir the destination directory - */ - public void setDestDir(final File destDir) { - this.destDir = destDir; - } - - /** - * Set the source directory for the replacement. - * @param jonasRoot the source directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * Set if this is only an update or a new JONAS_BASE. - * @param onlyUpdate If true update, else create and then update - */ - public void setUpdate(final boolean onlyUpdate) { - this.onlyUpdate = onlyUpdate; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASClusterConfigTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASClusterConfigTask.java deleted file mode 100644 index b5c1e8d68e..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASClusterConfigTask.java +++ /dev/null @@ -1,408 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.types.FileSet; -import org.ow2.jonas.ant.cluster.ClusterDaemon; -import org.ow2.jonas.ant.cluster.ClusterTasks; -import org.ow2.jonas.ant.cluster.Common; -import org.ow2.jonas.ant.cluster.EjbLevel; -import org.ow2.jonas.ant.cluster.Script; -import org.ow2.jonas.ant.cluster.WebLevel; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.JMkdir; -import org.ow2.jonas.ant.jonasbase.Tasks; - - -/** - * Class used to create a JOnAS Cluster Configuration - * @author Benoit Pelletier - */ -public class JOnASClusterConfigTask extends Task { - - /** - * Architecture of the JOnAS's instances : contain both Web level and Ejb level - */ - private static final String ARCH_BOTH_WEB_EJB = "bothWebEjb"; - - /** - * Architecture of the JOnAS's instances : separate Web level and Ejb level - */ - private static final String ARCH_DIFF_WEB_EJB = "diffWebEjb"; - - /** - * Source directory (JOnAS root) - */ - private File jonasRoot = null; - - /** - * Destination directory prefix (used to create the jonasBase(s)) - */ - private String destDirPrefix = null; - - /** - * cluster daemon destination directory - */ - private String cdDir = null; - - /** - * Cluster architecture : share instance for web/ejb or separate them - */ - private String arch = null; - - /** - * number of JOnAS's instance for web level - */ - private int webInstNb = -1; - - /** - * number of JOnAS's instance for ejb level - */ - private int ejbInstNb = -1; - - /** - * Update only JONAS_BASE without erasing it - */ - private boolean onlyUpdate = false; - - /** - * List of tasks to do - */ - private List tasks = null; - - /** - * Name of logs directory. - */ - public static final String LOG_DIR_NAME = "logs"; - - /** - * Name of deploy directory. - */ - public static final String DEPLOY_DIR_NAME = "deploy"; - - /** - * Name of lib/ext directory. - */ - public static final String LIB_EXT_DIR_NAME = "lib/ext"; - - /** - * List of deployment plans to copy for each JONAS_BASE. - */ - public static final String[] DEPLOYMENT_PLAN_LIST = new String[] {"jonasAdmin.xml", - "mejb.xml", - "ctxroot.xml", - "doc.xml"}; - - /** - * Constructor - */ - public JOnASClusterConfigTask() { - tasks = new ArrayList(); - } - - /** - * Creates a new JONAS_BASE or update it - * @param destDir destination directory - */ - private void createJonasBase(final String destDir) { - File destDirFile = new File(destDir); - File jprops = new File(destDir + File.separator + "conf" + File.separator + "jonas.properties"); - - if (onlyUpdate) { - if (jprops.exists()) { - log("Only updating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'", - Project.MSG_INFO); - JOnASAntTool.updateJonasBase(this, jonasRoot, destDirFile, DEPLOYMENT_PLAN_LIST); - - return; - } else { - throw new BuildException("JOnAS base directory '" + destDir + "' doesn't exists. Cannot update."); - } - } - - log("Creating JONAS_BASE in the directory '" + destDir + "' from source directory '" + jonasRoot + "'", - Project.MSG_INFO); - Copy copy = new Copy(); - JOnASAntTool.configure(this, copy); - copy.setTodir(destDirFile); - FileSet fileSet = new FileSet(); - fileSet.setDir(new File(new File(jonasRoot, "templates"), "conf")); - copy.addFileset(fileSet); - copy.setOverwrite(true); - copy.execute(); - - log("Creating logs in the directory '" + destDir, Project.MSG_INFO); - JMkdir mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + LOG_DIR_NAME)); - mkdir.execute(); - - log("Creating deploy in the directory '" + destDir, Project.MSG_INFO); - mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + DEPLOY_DIR_NAME)); - mkdir.execute(); - - log("Creating lib/ext in the directory '" + destDir, Project.MSG_INFO); - mkdir = new JMkdir(); - JOnASAntTool.configure(this, mkdir); - mkdir.setDestDir(new File(destDir + File.separator + LIB_EXT_DIR_NAME)); - mkdir.execute(); - } - - /** - * Updates a JONAS_BASE - * @param destDir destination directory - */ - private void updateJonasBase(final String destDir) { - File destDirFile = new File(destDir); - JOnASAntTool.updateJonasBase(this, jonasRoot, destDirFile, DEPLOYMENT_PLAN_LIST); - } - - /** - * Run this task - * @see org.apache.tools.ant.Task#execute() - */ - @Override - public void execute() { - if (jonasRoot == null) { - throw new BuildException("jonasRoot element is not set"); - } - - if (destDirPrefix == null) { - throw new BuildException("destDirPrefix element is not set"); - } - - if (cdDir == null) { - throw new BuildException("cdDir element is not set"); - } - - if (jonasRoot.getPath().equals(destDirPrefix)) { - throw new BuildException("jonasRoot and destDirPrefix is the same path !"); - } - - // First, JONAS_BASE creation - for (int i = 1; i <= webInstNb + ejbInstNb; i++) { - - String destDir = ClusterTasks.getDestDir(destDirPrefix, i); - createJonasBase(destDir); - } - - // Creates JONAS_BASE for the cluster daemon - createJonasBase(cdDir); - - // 2nd, executes the tasks - for (Task task : tasks) { - ((BaseTaskItf) task).setJonasRoot(jonasRoot); - JOnASAntTool.configure(this, task); - String info = ((BaseTaskItf) task).getLogInfo(); - if (info != null) { - log(info, Project.MSG_INFO); - } - - task.execute(); - } - - // Then update JonasBase - for (int i = 1; i <= webInstNb + ejbInstNb; i++) { - String destDir = ClusterTasks.getDestDir(destDirPrefix, i); - updateJonasBase(destDir); - } - - // Update JONAS_BASE for the cluster daemon - updateJonasBase(cdDir); - } - - - /** - * Add tasks for configured object - * @param subTasks some tasks to do on files - */ - public void addTasks(final Tasks subTasks) { - if (subTasks != null) { - for (Task task : subTasks.getTasks()) { - tasks.add(task); - } - } - } - - /** - * Set the destination directory prefix - * @param destDirPrefix the destination directory prefix - */ - public void setDestDirPrefix(final String destDirPrefix) { - this.destDirPrefix = destDirPrefix; - } - - /** - * Set the cluster daemon directory - * @param cdDir the destination directory for the cluster daemon configuration - */ - public void setCdDir(final String cdDir) { - this.cdDir = cdDir; - } - - /** - * Set the source directory for the replacement - * @param jonasRoot the source directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * Set architecture - * @param arch the architecture - */ - public void setArch(final String arch) { - this.arch = arch; - } - - /** - * Set the web instances number - * @param webInstNb number of web instances - */ - public void setWebInstNb(final int webInstNb) { - this.webInstNb = webInstNb; - } - - /** - * Set the ejb instances number - * @param ejbInstNb number of ejb instances - */ - public void setEjbInstNb(final int ejbInstNb) { - this.ejbInstNb = ejbInstNb; - } - - /** - * Add tasks for the common instances (both web & ejb ) - * @param common common tasks to do - */ - public void addConfiguredCommon(final Common common) { - common.setRootTask(this); - common.setDestDirPrefix(destDirPrefix); - common.setDestDirSuffixIndFirst(1); - common.setDestDirSuffixIndLast(webInstNb + ejbInstNb); - common.setArch(arch); - common.setWebInstNb(webInstNb); - common.setEjbInstNb(ejbInstNb); - common.generatesTasks(); - addTasks(common); - } - - /** - * Add tasks for the web level instances - * If chosen architecture is both web and ejb within the same JOnAS, - * the tasks are added to all instances - * @param webLevel tasks to do on files - */ - public void addConfiguredWebLevel(final WebLevel webLevel) { - webLevel.setRootTask(this); - webLevel.setDestDirPrefix(destDirPrefix); - webLevel.setArch(arch); - - if (arch.compareTo(ARCH_BOTH_WEB_EJB) == 0) { - webLevel.setDestDirSuffixIndFirst(1); - webLevel.setDestDirSuffixIndLast(webInstNb + ejbInstNb); - } else if (arch.compareTo(ARCH_DIFF_WEB_EJB) == 0) { - webLevel.setDestDirSuffixIndFirst(1); - webLevel.setDestDirSuffixIndLast(webInstNb); - } else { - handleErrorOutput("Invalide architecture choice : " + arch); - } - webLevel.generatesTasks(); - addTasks(webLevel); - } - - /** - * Add tasks for the ejb level instances - * If chosen architecture is both web and ejb within the same JOnAS, - * the tasks are added to all instances - * @param ejbLevel tasks to do on files - */ - public void addConfiguredEjbLevel(final EjbLevel ejbLevel) { - ejbLevel.setRootTask(this); - ejbLevel.setDestDirPrefix(destDirPrefix); - ejbLevel.setArch(arch); - - if (arch.compareTo(ARCH_BOTH_WEB_EJB) == 0) { - ejbLevel.setDestDirSuffixIndFirst(1); - ejbLevel.setDestDirSuffixIndLast(webInstNb + ejbInstNb); - } else if (arch.compareTo(ARCH_DIFF_WEB_EJB) == 0) { - ejbLevel.setDestDirSuffixIndFirst(webInstNb + 1); - ejbLevel.setDestDirSuffixIndLast(webInstNb + ejbInstNb); - } else { - handleErrorOutput("Invalide architecture choice : " + arch); - } - ejbLevel.generatesTasks(); - addTasks(ejbLevel); - } - - /** - * Add tasks for the is - * @param script Tasks to do on files - */ - public void addConfiguredScript(final Script script) { - script.setRootTask(this); - script.setLogInfo("Script"); - script.setInstNb(webInstNb + ejbInstNb); - script.setDestDirPrefix(destDirPrefix); - script.generatesTasks(); - addTasks(script); - } - - /** - * Add tasks for the is - * @param script Tasks to do on files - */ - public void addConfiguredClusterDaemon(final ClusterDaemon clusterDaemon) { - clusterDaemon.setRootTask(this); - clusterDaemon.setLogInfo("ClusterDaemon"); - clusterDaemon.setInstNb(webInstNb + ejbInstNb); - clusterDaemon.setDestDirPrefix(destDirPrefix); - clusterDaemon.setJonasRoot(jonasRoot.getAbsolutePath()); - clusterDaemon.generatesTasks(); - addTasks(clusterDaemon); - } - - /** - * Set if this is only an update or a new JONAS_BASE - * @param onlyUpdate If true update, else create and then update - */ - public void setUpdate(final boolean onlyUpdate) { - this.onlyUpdate = onlyUpdate; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASTask.java deleted file mode 100644 index 43479ea2fa..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JOnASTask.java +++ /dev/null @@ -1,210 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import org.apache.tools.ant.taskdefs.Java; - -/** - * Uses to start/stop/... JOnAS - * @author Florent Benoit - */ -public class JOnASTask extends BootstrapTask { - - /** - * Stop class (Admin class). - */ - private static final String ADMIN_CLASS = "org.ow2.jonas.commands.admin.ClientAdmin"; - - /** - * Check Environment class. - */ - private static final String CHECKENV_CLASS = "org.ow2.jonas.commands.check.CheckEnv"; - - /** - * Version class. - */ - private static final String VERSION_CLASS = "org.ow2.jonas.Version"; - - /** - * Enumeration of the different execution modes supported by this task. - */ - private enum Mode { - /** - * (START) mode. - */ - START { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - task.clearArgs(); - task.setClassname(ADMIN_CLASS); - task.createArg().setValue("-start"); - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return ADMIN_CLASS; - } - }, - - /** - * (STOP) mode. - */ - STOP { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - task.createArg().setValue("-stop"); - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return ADMIN_CLASS; - } - }, - - /** - * (JNDI) mode (print jndi names of the registry). - */ - JNDI { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - task.createArg().setValue("-j"); - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return ADMIN_CLASS; - } - }, - - /** - * (CHECK) mode. - */ - CHECK { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - // nothing special to do - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return CHECKENV_CLASS; - } - }, - - /** - * (VERSION) mode. - */ - VERSION { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - // nothing special to do - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return VERSION_CLASS; - } - }, - - /** - * (PING) mode. - */ - PING { - /** - * {@inheritDoc} - */ - public void configureJava(final Java task) { - task.createArg().setValue("-ping"); - } - - /** - * {@inheritDoc} - */ - public String getMainClass() { - return ADMIN_CLASS; - } - }; - - /** - * Configure the given {@link Java} task according to the execution mode. - * @param task {@link Java} task to be configured - */ - public abstract void configureJava(final Java task); - - /** - * @return the main class to be used by the {@link Java} task. - */ - public abstract String getMainClass(); - } - - /** - * Mode (start or stop). - * START is default mode - */ - private Mode mode = Mode.START; - - /** - * Run the task. - * @see org.apache.tools.ant.Task#execute() - */ - public void execute() { - - // Start the task - Java bootstrapTask = getBootstraptask(mode.getMainClass()); - mode.configureJava(bootstrapTask); - bootstrapTask.executeJava(); - - } - - /** - * Sets the mode for the server (start or stop). - * @param mode The mode to set. - */ - public void setMode(final String mode) { - // This enum.valueOf may throw an IllegalArgumentException if the specified mode is incorrect - this.mode = Mode.valueOf(mode.toUpperCase()); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JProperty.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JProperty.java deleted file mode 100644 index 6eacea42f7..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JProperty.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Property; - -/** - * Allow to define property with the value of my.${name}.property. - * @author Florent Benoit - */ -public class JProperty extends Property { - - /** - * Internal value (to evaluate). - */ - private String internalValue = null; - - /** - * Default value if the key is not found. - */ - private String defaultValue = null; - - /** - * The value of the property to set. - * @param value value to set - */ - public void setValue(final String value) { - // Called with Ant <= 1.7.x - this.internalValue = value; - } - - /** - * The value of the property to set. - * @param value value to set - * @since Ant 1.8.0 - */ - public void setValue(final Object value) { - // Called with Ant >= 1.8.x - if (value != null) { - this.internalValue = value.toString(); - } - // Adhoc fix, this will probably break something if execute() is called twice - super.setValue(value); - } - - /** - * The default value if the property cannot be found. - * @param defaultValue value to set - */ - public void setDefaultValue(final String defaultValue) { - this.defaultValue = defaultValue; - } - - /** - * Execute the task. It sets the value by evaluating variable name. - * @throws BuildException if value is not set - * @see org.apache.tools.ant.Task#execute() - */ - public void execute() throws BuildException { - - if (internalValue == null) { - throw new BuildException("The property '" + getName() - + "' was not set."); - } - - String valueEvaluated = getProject().getProperty(internalValue); - - // set default value - if (valueEvaluated == null && defaultValue != null) { - valueEvaluated = defaultValue; - } - - // No value ? error - if (valueEvaluated == null) { - throw new BuildException("The property '" + internalValue - + "' cannot be evaluated in the current project."); - } - - // Set the value with the value evaluated - super.setValue(valueEvaluated); - - // Now execute the super method - super.execute(); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasDeploymentTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasDeploymentTool.java deleted file mode 100644 index cc96ece29c..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasDeploymentTool.java +++ /dev/null @@ -1,914 +0,0 @@ -/** - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2002 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Ant", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ -package org.ow2.jonas.ant; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.jar.Attributes; -import java.util.jar.Manifest; - -import javax.xml.parsers.SAXParser; - -import org.apache.tools.ant.AntClassLoader; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.apache.tools.ant.types.Reference; - -/** - * The deployment tool to add the jonas specific deployment descriptors to the - * ejb JAR file. JONAS only requires one additional file jonas-ejb-jar.xml. - * @author Cyrille Morvan , Ingenosya France , - * Contributor(s): Mathieu - * Peltier Adriana Danes: change configuration directory name from - * "config" to "conf" - * @version 1.0 - * @see EjbJar#createJonas - */ -public class JonasDeploymentTool extends GenericDeploymentTool { - - /** Public Id of the standard deployment descriptor DTD. */ - protected static final String EJB_JAR_1_1_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"; - protected static final String EJB_JAR_2_0_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"; - - /** Public Id of the JOnAS-specific deployment descriptor DTD. */ - protected static final String JONAS_EJB_JAR_2_4_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 2.4//EN"; - protected static final String JONAS_EJB_JAR_2_5_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 2.5//EN"; - protected static final String JONAS_EJB_JAR_3_0_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.0//EN"; - protected static final String JONAS_EJB_JAR_3_2_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.2//EN"; - protected static final String JONAS_EJB_JAR_3_3_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.3//EN"; - protected static final String JONAS_EJB_JAR_3_3_2_PUBLIC_ID = "-//ObjectWeb//DTD JOnAS 3.3.2//EN"; - - /** - * Name of the standard deployment descriptor DTD (these files are stored in - * the ${JONAS_ROOT}/xml directory). - */ - protected static final String EJB_JAR_1_1_DTD = "/org/ow2/jonas/deployment/ejb/ejb-jar_1_1.dtd"; - protected static final String EJB_JAR_2_0_DTD = "/org/ow2/jonas/deployment/ejb/ejb-jar_2_0.dtd"; - - /** - * Name of the JOnAS-specific deployment descriptor DTD (these files are - * stored in the ${JONAS_ROOT}/xml directory). - */ - protected static final String JONAS_EJB_JAR_2_4_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_4.dtd"; - protected static final String JONAS_EJB_JAR_2_5_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_2_5.dtd"; - protected static final String JONAS_EJB_JAR_3_0_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_0.dtd"; - protected static final String JONAS_EJB_JAR_3_2_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_2.dtd"; - protected static final String JONAS_EJB_JAR_3_3_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3.dtd"; - protected static final String JONAS_EJB_JAR_3_3_2_DTD = "/org/ow2/jonas/deployment/ejb/jonas-ejb-jar_3_3_2.dtd"; - - /** Default JOnAS deployment descriptor name. */ - protected static final String JONAS_DD = "jonas-ejb-jar.xml"; - - /** Bootstrap class name. */ - protected static final String BOOTSTRAP_CLASS = "org.ow2.jonas.client.boot.Bootstrap"; - - /** GenIC class name. */ - protected static final String GENIC_CLASS = "org.ow2.jonas.generators.genic.GenIC"; - - /** - * Filename of the standard EJB descriptor (which is passed to this class - * from the parent "ejbjar" task). This file is relative to the directory - * specified by the "srcdir" attribute in the ejbjar task. - */ - private String descriptorName; - - /** - * Filename of the JOnAS-specific EJB descriptor (which is passed to this - * class from the parent "ejbjar" task). This file is relative to the - * directory specified by the "srcdir" attribute in the ejbjar task. - */ - private String jonasDescriptorName; - - /* ------------- */ - /* GenIC options */ - /* ------------- */ - - /** - * Temporary output directory used by GenIC. - */ - private File outputdir; - - /** - * true if the intermediate Java source files generated by - * GenIC must be deleted or not. The default is false - */ - private boolean keepgenerated = false; - - - /** - * If true, the JDK-provided RMIC compiler is used. If false, the built-in - * rmic compiler is used. - */ - private boolean nofastrmic = false; - - /** - * true if the generated source files must not be compiled - * via the java and rmi compilers. The default is false. - */ - private boolean nocompil = false; - - /** - * Equivalent to the -invokecmd GenIC option. The default is - * false. - */ - private boolean invokeCmd = false; - - /** - * true if the XML deployment descriptors must be parsed - * without validation. The default is false. - */ - private boolean novalidation = false; - - /** - * Java compiler to use. The default is the value of - * build.compiler property. - */ - private String javac; - - /** Options to pass to the java compiler. */ - private String javacopts; - - /** Options to pass to the rmi compiler. */ - private String rmicopts; - - /** - * true if the GenIC call must be verbose. The default is - * false. - */ - private boolean verbose = false; - - /** Additional args to send to GenIC. */ - private String additionalargs; - - /** Additional args to pass to the GenIC JVM. */ - private String jvmopts = null; - - /** List of protocols (used for Carol) */ - private String protocols = null; - - /* ------------- */ - /* other options */ - /* ------------- */ - - /** JOnAS root directory. */ - private File jonasroot; - - /** JOnAS base directory. */ - private File jonasbase; - - /** - * true if the generic JAR file used as input to GenIC must - * be retained. The default is false. - */ - private boolean keepgeneric = false; - - /** Stores the suffix for the JOnAS JAR file. The default is '.jar'. */ - private String suffix = ".jar"; - - /** - * true if GenIC must not be run on the EJB JAR. The default - * is false. - */ - private boolean nogenic = false; - - /* -------------------- */ - /* GenIC options setter */ - /* -------------------- */ - - /** - * Set the {@link #keepgenerated}flag. - * @param aBoolean true if the flag must be set. - */ - public void setKeepgenerated(boolean aBoolean) { - keepgenerated = aBoolean; - } - - public void setNoFastRMIC(boolean value) { - nofastrmic = value; - } - - /** - * Do nothing because the mappernames attribute is deprecated - * @param aString list of mapper names separed by , - */ - public void setMappernames(String aString) { - log("'mappernames' attribute ignored (deprecated)", Project.MSG_WARN); - } - - /** - * Set the protocols list - * @param aString list of the protocol names separed by , - */ - public void setProtocols(String aString) { - protocols = aString; - } - - /** - * Set the classpath as a Reference on another path - * @param r Referenced Classpath - */ - public void setClasspathref(Reference r) { - createClasspath().setRefid(r); - } - /** - * Set the {@link #additionalargs}. - * @param aString additional args. - */ - public void setAdditionalargs(String aString) { - additionalargs = aString; - } - - /** - * Set the {@link #nocompil}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNocompil(boolean aBoolean) { - nocompil = aBoolean; - } - - /** - * Set the {@link #invokecmd}flag. - * @param aBoolean true if the flag must be set. - */ - public void setInvokecmd(boolean aBoolean) { - invokeCmd = aBoolean; - } - - /** - * Set the {@link #novalidation}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNovalidation(boolean aBoolean) { - novalidation = aBoolean; - } - - /** - * Set the java compiler {@link #javac}to use. - * @param aString the java compiler. - */ - public void setJavac(String aString) { - javac = aString; - } - - /** - * Set the options to pass to the java compiler. - * @param aString the options. - */ - public void setJavacopts(String aString) { - javacopts = aString; - } - - /** - * Set the options to pass to the rmi compiler. - * @param aString the options. - */ - public void setRmicopts(String aString) { - rmicopts = aString; - } - - /** - * Set the {@link #verbose}flag. - * @param aBoolean true if the flag must be set. - */ - public void setVerbose(boolean aBoolean) { - verbose = aBoolean; - } - - /* -------------------- */ - /* other options setter */ - /* -------------------- */ - - /** - * Set the JOnAS root directory. - * @param aFile the JOnAS root directory. - */ - public void setJonasroot(File aFile) { - jonasroot = aFile; - } - - /** - * Set the JOnAS base directory. - * @param aFile the JOnAS base directory. - */ - public void setJonasbase(File aFile) { - jonasbase = aFile; - } - - /** - * Set the {@link #keepgeneric}flag. - * @param aBoolean true if the flag must be set. - */ - public void setKeepgeneric(boolean aBoolean) { - keepgeneric = aBoolean; - } - - /** - * Set the {@link #jarsuffix}. - * @param aString the string to use as the suffix. - */ - public void setJarsuffix(String aString) { - suffix = aString; - } - - /** - * Set the {@link #nogenic}flag. - * @param aBoolean true if the flag must be set. - */ - public void setNogenic(boolean aBoolean) { - nogenic = aBoolean; - } - - /** - * Set the additional args to pass to the GenIC JVM. - * @param aString the options. - */ - public void setJvmopts(String aString) { - jvmopts = aString; - } - - /* ------------- */ - /* other methods */ - /* ------------- */ - - public void processDescriptor(String aDescriptorName, SAXParser saxParser) { - - descriptorName = aDescriptorName; - - log("JOnAS Deployment Tool processing for JOnAS: " + descriptorName, Project.MSG_VERBOSE); - - super.processDescriptor(descriptorName, saxParser); - - if (outputdir != null) { - // the method deleteOnExit() do not work because the directory is - // not empty - log("Deleting temp output directory '" + outputdir + "'.", Project.MSG_VERBOSE); - JOnASAntTool.deleteAllFiles(outputdir); - } - } - - protected void writeJar(String baseName, File jarfile, Hashtable ejbFiles, String publicId, - boolean includeInnerClasses) throws BuildException { - - // create the generic jar first - File genericJarFile = super.getVendorOutputJarFile(baseName); - - super.writeJar(baseName, genericJarFile, ejbFiles, publicId, true); - - - // GenIC call on generic jar - addGenICGeneratedFiles(genericJarFile, ejbFiles); - - // merge Manifest give by user if exist with this generated by Genic - if (this.getConfig() != null && this.getConfig().manifest != null - && this.getConfig().manifest.exists()) { - File filePathGenicManifest = (File) ejbFiles.get("META-INF/MANIFEST.MF"); - if (filePathGenicManifest != null) - mergeManifest(this.getConfig().manifest, filePathGenicManifest); - else - ejbFiles.put("META-INF/MANIFEST.MF", this.getConfig().manifest); - } - - // create the real jar - super.writeJar(baseName, getVendorOutputJarFile(baseName), ejbFiles, publicId, false); - - //log("genericJarFile: " + genericJarFile, Project.MSG_VERBOSE); - //log("getVendorOutputJarFile(baseName): " + - //getVendorOutputJarFile(baseName), Project.MSG_VERBOSE); - //log("baseName: " + baseName, Project.MSG_VERBOSE); - - if (!keepgeneric) { - log("Deleting generic JAR " + genericJarFile.toString(), Project.MSG_VERBOSE); - genericJarFile.delete(); - } - } - - /** - * Merge Manifest file - * @param manifestUserFile : input file - * @param manifestGenicFile : output file - */ - protected void mergeManifest(File manifestUserFile, File manifestGenicFile) { - try { - InputStream userStream = new FileInputStream(manifestUserFile); - InputStream genICStream = new FileInputStream(manifestGenicFile); - - Manifest userManifest = new Manifest(userStream); - Manifest genICManifest = new Manifest(genICStream); - - // close streams - userStream.close(); - genICStream.close(); - - // Merge main attributes - Attributes userMainAttributes = userManifest.getMainAttributes(); - Attributes genICMainAttributes = genICManifest.getMainAttributes(); - Iterator itUserMainAttributes = userMainAttributes.keySet().iterator(); - while (itUserMainAttributes.hasNext()) { - Object name = itUserMainAttributes.next(); - Object value = userMainAttributes.get(name); - genICMainAttributes.put(name, value); - } - - - // Merge specific entries - Map userEntries = userManifest.getEntries(); - Set keys = userEntries.keySet(); - Iterator itKeys = keys.iterator(); - - // Get keys of user manifest - while (itKeys.hasNext()) { - String key = (String) itKeys.next(); - Attributes attributes = userManifest.getAttributes(key); - // key is present in final manifest ? - Attributes genICAttributes = genICManifest.getAttributes(key); - if (genICAttributes == null) { - genICAttributes = new Attributes(); - genICManifest.getEntries().put(key, genICAttributes); - } - - // write attributes of user manifest into genic manifest - Set atKeys = attributes.keySet(); - Iterator itAt = atKeys.iterator(); - while (itAt.hasNext()) { - Object name = itAt.next(); - Object value = attributes.get(name); - genICAttributes.put(name, value); - } - } - FileOutputStream fos = new FileOutputStream(manifestGenicFile); - genICManifest.write(fos); - fos.close(); - - - - } catch (IOException e) { - log("Unable to update Manifest with user manifest :" + e.getMessage(), Project.MSG_WARN); - } - } - - protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { - - // JOnAS-specific descriptor deployment - jonasDescriptorName = getJonasDescriptorName(); - File jonasDD = new File(getConfig().descriptorDir, jonasDescriptorName); - - if (jonasDD.exists()) { - ejbFiles.put(META_DIR + JONAS_DD, jonasDD); - } else { - log("Unable to locate the JOnAS deployment descriptor. It was expected to be in: " + jonasDD.getPath() - + ".", Project.MSG_WARN); - } - } - - protected File getVendorOutputJarFile(String baseName) { - return new File(getDestDir(), baseName + suffix); - } - - /** - * Determines the name of the JOnAS-specific EJB descriptor using the - * specified standard EJB descriptor name. In general, the standard - * descriptor will be named "[basename]-ejb-jar.xml", and this method will - * return "[basename]-jonas-ejb-jar.xml" or "jonas-[basename].xml" - * @return The name of the JOnAS-specific EJB descriptor file. - */ - private String getJonasDescriptorName() { - - // descriptorName = - // examples = /org/objectweb/fooAppli/foo/Foo-ejb-jar.xml - // examples = /org/objectweb/fooAppli/foo/Foo.xml (JOnAS convention) - - String jonasDescriptorName; // JOnAS-specific DD - boolean jonasConvention = false; // true if the JOnAS convention is used - // for the DD - String path; // Directory path of the EJB descriptor - String fileName; // EJB descriptor file name - String baseName; // Filename appearing before name terminator - String remainder; // Filename appearing after the name terminator - - int startOfFileName = descriptorName.lastIndexOf(File.separatorChar); - if (startOfFileName != -1) { - // extract path info - path = descriptorName.substring(0, startOfFileName + 1); - fileName = descriptorName.substring(startOfFileName + 1); - } else { - // descriptorName is just a file without path - path = ""; - fileName = descriptorName; - } - - if (fileName.startsWith(EJB_DD)) { - return path + JONAS_DD; - } - - int endOfBaseName = descriptorName.indexOf(getConfig().baseNameTerminator, startOfFileName); - - /* - * Check for the odd case where the terminator and/or filename extension - * aren't found. These will ensure "jonas-" appears at the end of the - * name and before the '.' (if present). - */ - if (endOfBaseName < 0) { - // baseNameTerminator not found: the descriptor use the - // JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and - // not [Foo-ejb-jar.xml, - // Foo-jonas-ejb-jar.xml]. - endOfBaseName = descriptorName.lastIndexOf('.') - 1; - if (endOfBaseName < 0) { - // no . found - endOfBaseName = descriptorName.length() - 1; - } - - jonasConvention = true; - } - - baseName = descriptorName.substring(startOfFileName + 1, endOfBaseName + 1); - remainder = descriptorName.substring(endOfBaseName + 1); - - if (jonasConvention) { - jonasDescriptorName = path + "jonas-" + baseName + ".xml"; - } else { - jonasDescriptorName = path + baseName + "jonas-" + remainder; - } - - log("Standard EJB descriptor name: " + descriptorName, Project.MSG_VERBOSE); - log("JOnAS-specific descriptor name: " + jonasDescriptorName, Project.MSG_VERBOSE); - - return jonasDescriptorName; - } - - protected String getJarBaseName(String descriptorFileName) { - - String baseName = null; - - if (getConfig().namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) { - - // try to find JOnAS specific convention name - if (descriptorFileName.indexOf(getConfig().baseNameTerminator) == -1) { - - // baseNameTerminator not found: the descriptor use the - // JOnAS naming convention, ie [Foo.xml,jonas-Foo.xml] and - // not [Foo-ejb-jar.xml, - // Foo-jonas-ejb-jar.xml]. - - String aCanonicalDescriptor = descriptorFileName.replace('\\', '/'); - int lastSeparatorIndex = aCanonicalDescriptor.lastIndexOf('/'); - int endOfBaseName; - - if (lastSeparatorIndex != -1) { - endOfBaseName = descriptorFileName.indexOf(".xml", lastSeparatorIndex); - } else { - endOfBaseName = descriptorFileName.indexOf(".xml"); - } - - if (endOfBaseName != -1) { - baseName = descriptorFileName.substring(0, endOfBaseName); - } - } - } - - if (baseName == null) { - // else get standard baseName - baseName = super.getJarBaseName(descriptorFileName); - } - - log("JAR base name: " + baseName, Project.MSG_VERBOSE); - - return baseName; - } - - protected void registerKnownDTDs(DescriptorHandler handler) { - - handler.registerDTD(EJB_JAR_1_1_PUBLIC_ID, EJB_JAR_1_1_DTD); - handler.registerDTD(EJB_JAR_2_0_PUBLIC_ID, EJB_JAR_2_0_DTD); - - handler.registerDTD(JONAS_EJB_JAR_2_4_PUBLIC_ID, JONAS_EJB_JAR_2_4_DTD); - handler.registerDTD(JONAS_EJB_JAR_2_5_PUBLIC_ID, JONAS_EJB_JAR_2_5_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_0_PUBLIC_ID, JONAS_EJB_JAR_3_0_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_2_PUBLIC_ID, JONAS_EJB_JAR_3_2_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_3_PUBLIC_ID, JONAS_EJB_JAR_3_3_DTD); - handler.registerDTD(JONAS_EJB_JAR_3_3_2_PUBLIC_ID, JONAS_EJB_JAR_3_3_2_DTD); - } - - /** - * Add to the given hashtable all the file generated by GenIC. - * @param genericJarFile jar file. - * @param ejbFiles the hashtable. - */ - private void addGenICGeneratedFiles(File genericJarFile, Hashtable ejbFiles) { - - Java genicTask = null; // GenIC task - - if (nogenic) { - return; - } - - genicTask = (Java) getTask().getProject().createTask("java"); - genicTask.setTaskName("genic"); - genicTask.setFork(true); - - // jonas root - genicTask.createJvmarg().setValue("-Djonas.root=" + jonasroot); - - // jonas base - genicTask.createJvmarg().setValue("-Djonas.base=" + jonasbase); - - // Endorsed directory - File endorsedDir = new File(new File(jonasroot, "lib"), "endorsed"); - genicTask.createJvmarg().setValue("-Djava.endorsed.dirs=" + endorsedDir); - - // java policy file - String jonasConfigDir = jonasroot + File.separator + "conf"; - File javaPolicyFile = new File(jonasConfigDir, "java.policy"); - if (javaPolicyFile.exists()) { - genicTask.createJvmarg().setValue("-Djava.security.policy=" + javaPolicyFile.toString()); - } - - // The bootstrap class must launch the GenIC class - genicTask.createArg().setValue(JonasDeploymentTool.GENIC_CLASS); - - // outputdir - try { - outputdir = createTempDir(); - } catch (IOException aIOException) { - throw new BuildException("Cannot create temp dir", aIOException); - } - log("Using temporary output directory: " + outputdir, Project.MSG_VERBOSE); - - genicTask.createArg().setValue("-d"); - genicTask.createArg().setFile(outputdir); - - // classpath - Path classpath = getCombinedClasspath(); - if (classpath == null) { - classpath = new Path(getTask().getProject()); - } - // add client-bootstrap.jar - String bootJar = jonasroot + File.separator + "lib" + File.separator + "bootstrap" + File.separator - + "client-bootstrap.jar"; - String clientJar = jonasroot + File.separator + "lib" + File.separator + "client.jar"; - Path bootstrap = new Path(getTask().getProject(), bootJar); - Path clientPath = new Path(getTask().getProject(), clientJar); - bootstrap.append(clientPath); - //classpath.append(new Path(classpath.getProject(), bootJar)); - - classpath.append(new Path(classpath.getProject(), outputdir.toString())); - - log("Using classpath: " + bootstrap.toString(), Project.MSG_VERBOSE); - genicTask.setClasspath(bootstrap); - - if (!checkBootstrapClassName(bootstrap)) { - log("Cannot find bootstrap class in classpath.", Project.MSG_ERR); - throw new BuildException("Bootstrap class not found, please check the classpath."); - } else { - genicTask.setClassname(JonasDeploymentTool.BOOTSTRAP_CLASS); - } - - // classpath - genicTask.createArg().setValue("-classpath"); - genicTask.createArg().setPath(classpath); - - // keepgenerated - if (keepgenerated) { - genicTask.createArg().setValue("-keepgenerated"); - } - - if (nofastrmic) { - genicTask.createArg().setValue("-nofastrmic"); - } - - // nocompil - if (nocompil) { - genicTask.createArg().setValue("-nocompil"); - } - - // invokecmd - if (invokeCmd) { - genicTask.createArg().setValue("-invokecmd"); - } - - // novalidation - if (novalidation) { - genicTask.createArg().setValue("-novalidation"); - } - - // javac - if (javac != null) { - genicTask.createArg().setValue("-javac"); - genicTask.createArg().setLine(javac); - } - - // javacopts - if (javacopts != null && !javacopts.equals("")) { - genicTask.createArg().setValue("-javacopts"); - genicTask.createArg().setValue(javacopts); - } - - // rmicopts - if (rmicopts != null && !rmicopts.equals("")) { - genicTask.createArg().setValue("-rmicopts"); - genicTask.createArg().setValue(rmicopts); - } - - // verbose - if (verbose) { - genicTask.createArg().setValue("-verbose"); - } - - // additionalargs - if (additionalargs != null) { - genicTask.createArg().setLine(additionalargs); - } - - // protocols - if (protocols != null) { - genicTask.createArg().setValue("-protocols"); - genicTask.createArg().setValue(protocols); - } - - // the generated classes must not be added in the generic JAR! - genicTask.createArg().setValue("-noaddinjar"); - - // jvmopts - if (jvmopts != null && !jvmopts.equals("")) { - genicTask.createJvmarg().setLine(jvmopts); - } - - // input file to process by GenIC - genicTask.createArg().setValue(genericJarFile.getPath()); - - // calling GenIC task - log("Calling GenIC task for " + getConfig().descriptorDir + File.separator + descriptorName + ".", - Project.MSG_VERBOSE); - - if (genicTask.executeJava() != 0) { - // Don't delete the temp output directory in case of error: - - //log("Deleting temp output directory '" + outputdir + "'.", - // Project.MSG_VERBOSE); - // the method deleteOnExit() do not work because the directory is - // not empty - //JOnASAntTool.deleteAllFiles(outputdir); - - if (!keepgeneric) { - log("Deleting generic JAR " + genericJarFile.toString(), Project.MSG_VERBOSE); - genericJarFile.delete(); - } - - throw new BuildException("GenIC reported an error."); - } - - // add the generated files to the ejbFiles - addAllFiles(outputdir, "", ejbFiles); - } - - /** - * Check the bootstrap class name to use in the given classpath. - * @param classpath classpath where the boostrap class must be searched. - * @return true if the bootstrap is available in the classpath - */ - private boolean checkBootstrapClassName(Path classpath) { - log("Looking for bootstrap class in classpath: " + classpath.toString(), Project.MSG_VERBOSE); - AntClassLoader cl = new AntClassLoader(classpath.getProject(), classpath); - try { - cl.loadClass(JonasDeploymentTool.BOOTSTRAP_CLASS); - log("Found Bootstrap class '" + JonasDeploymentTool.BOOTSTRAP_CLASS + "' in classpath.", - Project.MSG_VERBOSE); - } catch (ClassNotFoundException cnf1) { - log("Bootstrap class '" + JonasDeploymentTool.BOOTSTRAP_CLASS + "' not found in classpath.", - Project.MSG_VERBOSE); - return false; - } - return true; - } - - protected void checkConfiguration(String descriptorFileName, SAXParser saxParser) throws BuildException { - // jonasroot - if (jonasroot == null) { - throw new BuildException("The jonasroot attribute is not set."); - } else if (!jonasroot.isDirectory()) { - throw new BuildException("The jonasroot attribute '" + jonasroot + "' is not a valid directory."); - } - // jonasbase default value is jonasroot - if (jonasbase == null) { - jonasbase = jonasroot; - } - - // additionalargs - if (additionalargs != null && additionalargs.equals("")) { - throw new BuildException("Empty additionalargs attribute."); - } - - // javac - if (javac != null && javac.equals("")) { - throw new BuildException("Empty javac attribute."); - } - } - - /* ----------------------------------------------------------------------------------- */ - /* utilitary methods */ - /* ----------------------------------------------------------------------------------- */ - - /** - * Create a temporary directory for GenIC output. - * @return the temp directory. - * @throws BuildException if a temp directory cannot be created. - */ - private File createTempDir() throws IOException { - File tmpDir = File.createTempFile("genic", null, null); - tmpDir.delete(); - if (!tmpDir.mkdir()) { - throw new IOException("Cannot create the temporary directory '" + tmpDir + "'."); - } - return tmpDir; - } - - /** - * Add a file to the a given hashtable. If the file is a directory, add - * recursivly all the files inside to the hashtable. - * @param file the file to add. - * @param rootDir the current sub-directory to scan. - * @param hashtable the hashtable where to add the files. - */ - private void addAllFiles(File file, String rootDir, Hashtable hashtable) { - - if (!file.exists()) { - throw new IllegalArgumentException(); - } - - String newRootDir; - if (file.isDirectory()) { - File[] files = file.listFiles(); - for (int i = 0; i < files.length; i++) { - if (rootDir.length() > 0) { - newRootDir = rootDir + File.separator + files[i].getName(); - } else { - newRootDir = files[i].getName(); - } - addAllFiles(files[i], newRootDir, hashtable); - } - } else { - hashtable.put(rootDir.replace(File.separatorChar , '/'), file); // for a window platform replace \ by / is necessary - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasHotDeploymentTool.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasHotDeploymentTool.java deleted file mode 100644 index f99f8375d7..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/JonasHotDeploymentTool.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; - -/** - * Class used to manage deployment on JOnAS (with ant and ServerDeploy task) - * @author Florent Benoit - */ -public class JonasHotDeploymentTool extends BootstrapTask implements HotDeploymentTool { - - /** - * Admin class (JonasAdmin class) - */ - private static final String ADMIN_CLASS = "org.ow2.jonas.commands.admin.ClientAdmin"; - - /** - * The parent task - */ - private ServerDeploy task; - - /** - * All actions supported by JOnAS - */ - private static final String[] VALID_ACTIONS = {ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY, - ACTION_UPDATE}; - - /** - * Validates the passed in attributes. Subclasses should chain to this - * super-method to insure validation of boilerplate attributes.

    Only the - * "action" attribute is required in the base class. Subclasses should check - * attributes accordingly. - * @throws BuildException if the attributes are - * invalid or incomplete. - */ - public void validateAttributes() throws BuildException { - if (task.getAction() == null) { - throw new BuildException("The \"action\" attribute must be set"); - } - - if (!isActionValid()) { - throw new BuildException("Invalid action \"" + task.getAction() + "\" passed"); - } - - } - - /** - * Sets the parent task. - * @param task a ServerDeploy object representing the parent task. - * @ant.attribute ignore="true" - */ - public void setTask(ServerDeploy task) { - this.task = task; - } - - /** - * Returns the task field, a ServerDeploy object. - * @return An ServerDeploy representing the parent task. - */ - protected ServerDeploy getTask() { - return task; - } - - /** - * Determines if the "action" attribute defines a valid action.

    - * Subclasses should determine if the action passed in is supported by the - * vendor's deployment tool.

    Actions may by "deploy", "delete", etc... - * It all depends on the tool. - * @return true if the "action" attribute is valid, false if not. - */ - protected boolean isActionValid() { - - String action = getTask().getAction(); - - for (int i = 0; i < VALID_ACTIONS.length; i++) { - if (action.equals(VALID_ACTIONS[i])) { - return true; - } - } - - return false; - } - - /** - * Perform the actual deployment. It's up to the subclasses to implement the - * actual behavior. - * @exception org.apache.tools.ant.BuildException if the attributes are - * invalid or incomplete. - */ - public void deploy() throws BuildException { - - String action = getTask().getAction(); - Java bootstrapTask = getBootstraptask(ADMIN_CLASS); - String fileName = getTask().getSource().getPath(); - - if (action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) { - bootstrapTask.setTaskName("JOnAS/Deploy"); - bootstrapTask.createArg().setValue("-a"); - bootstrapTask.createArg().setValue(fileName); - bootstrapTask.log("Deploying '" + fileName + "'...", Project.MSG_INFO); - } else if (action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) { - bootstrapTask.setTaskName("JOnAS/Undeploy"); - bootstrapTask.createArg().setValue("-r"); - bootstrapTask.createArg().setValue(fileName); - bootstrapTask.log("Undeploying '" + fileName + "'...", Project.MSG_INFO); - } else if (action.equals(ACTION_LIST)) { - bootstrapTask.setTaskName("JOnAS/List"); - bootstrapTask.createArg().setValue("-l"); - getTask().log("Listing beans ...", Project.MSG_INFO); - } else { - throw new BuildException("Invalid action \"" + action + "\" passed"); - } - - bootstrapTask.createArg().setValue("-n"); - bootstrapTask.createArg().setValue(getServerName()); - bootstrapTask.executeJava(); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/PropertyStatement.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/PropertyStatement.java deleted file mode 100644 index c006d98d8c..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/PropertyStatement.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - * - */ -package org.ow2.jonas.ant; -/** - * @author eyindanga - * Represents a statement for property adding or replacement. - */ -public class PropertyStatement { - - /** - * Property name. - */ - String name = null; - - /** - * replace value. - */ - String value = null; - - /** - * true, means add. - */ - boolean add; - /** - * @return the name. - */ - public String getName() { - return name; - } - /** - * @param name the name to set. - */ - public void setName(final String name) { - this.name = name; - } - /** - * @return the value - */ - public String getValue() { - return value; - } - /** - * @param value the value to set. - */ - public void setValue(final String value) { - this.value = value; - } - /** - * @return the add. - */ - public boolean isAdd() { - return add; - } - /** - * @param add the add to set. - */ - public void setAdd(final boolean add) { - this.add = add; - } - /** - * Default constructor. - */ - public PropertyStatement() { - - } - - /** - * Default constructor. - */ - public PropertyStatement(final String name, final String value, final boolean add) { - this.name = name; - this.value = value; - this.add = add; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/ServerDeploy.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/ServerDeploy.java deleted file mode 100644 index ad80acc104..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/ServerDeploy.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Copyright 2002-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.ow2.jonas.ant; - -import java.io.File; -import java.util.Enumeration; -import java.util.Vector; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.taskdefs.optional.j2ee.GenericHotDeploymentTool; -import org.apache.tools.ant.taskdefs.optional.j2ee.WebLogicHotDeploymentTool; - -/** - * Controls hot deployment tools for J2EE servers. This class is used as a - * framework for the creation of vendor specific hot deployment tools. - * @see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool - * @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool - * @see org.apache.tools.ant.taskdefs.optional.j2ee.GenericHotDeploymentTool - * @see org.apache.tools.ant.taskdefs.optional.j2ee.WebLogicHotDeploymentTool - */ -public class ServerDeploy extends Task { - - /** - * The action to be performed. IE: "deploy", "delete", etc... - */ - private String action; - - /** - * The source (fully-qualified path) to the component being deployed - */ - private File source; - - /** - * The vendor specific tool for deploying the component - */ - private Vector vendorTools = new Vector(); - - /////////////////////////////////////////////////////////////////////////// - // - // Place vendor specific tool creations here. - // - /////////////////////////////////////////////////////////////////////////// - - /** - * Creates a generic deployment tool.

    Ant calls this method on creation - * to handle embedded "generic" elements in the ServerDeploy task. - * @param tool An instance of GenericHotDeployment tool, passed in by Ant. - */ - public void addGeneric(GenericHotDeploymentTool tool) { - } - - /** - * Creates a WebLogic deployment tool, for deployment to WebLogic servers. - *

    Ant calls this method on creation to handle embedded "weblogic" - * elements in the ServerDeploy task. - * @param tool An instance of WebLogicHotDeployment tool, passed in by Ant. - */ - public void addWeblogic(WebLogicHotDeploymentTool tool) { - } - - /** - * Creates a JOnAS deployment tool, for deployment to JOnAS servers.

    Ant - * calls this method on creation to handle embedded "jonas" elements in the - * ServerDeploy task. - * @param tool An instance of JonasHotDeployment tool, passed in by Ant. - */ - public void addJonas(JonasHotDeploymentTool tool) { - tool.setTask(this); - vendorTools.addElement(tool); - } - - /////////////////////////////////////////////////////////////////////////// - // - // Execute method - // - /////////////////////////////////////////////////////////////////////////// - - /** - * Execute the task.

    This method calls the deploy() method on each of - * the vendor-specific tools in the vendorTools collection. - * This performs the actual process of deployment on each tool. - * @exception org.apache.tools.ant.BuildException if the attributes are - * invalid or incomplete, or a failure occurs in the deployment - * process. - */ - public void execute() throws BuildException { - for (Enumeration e = vendorTools.elements(); e.hasMoreElements();) { - HotDeploymentTool tool = (HotDeploymentTool) e.nextElement(); - tool.validateAttributes(); - tool.deploy(); - } - } - - /////////////////////////////////////////////////////////////////////////// - // - // Set/get methods - // - /////////////////////////////////////////////////////////////////////////// - - /** - * Returns the action field. - * @return A string representing the "action" attribute. - */ - public String getAction() { - return action; - } - - /** - * The action to be performed, usually "deploy"; required. Some tools - * support additional actions, such as "delete", "list", "undeploy", - * "update"... - * @param action A String representing the "action" attribute. - */ - public void setAction(String action) { - this.action = action; - } - - /** - * Returns the source field (the path/filename of the component to be - * deployed. - * @return A File object representing the "source" attribute. - */ - public File getSource() { - return source; - } - - /** - * The filename of the component to be deployed; optional depending upon the - * tool and the action. - * @param source String representing the "source" attribute. - */ - public void setSource(File source) { - this.source = source; - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/WsGenTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/WsGenTask.java deleted file mode 100644 index c26cd7e14e..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/WsGenTask.java +++ /dev/null @@ -1,371 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- -*/ -package org.ow2.jonas.ant; - -import java.io.File; - -import org.apache.tools.ant.AntClassLoader; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.types.Path; - -/** - * Launch WsGen from Ant. - * - * @author Guillaume Sauthier - */ -public class WsGenTask extends MatchingTask { - - /** Bootstrap class name. */ - private static final String BOOTSTRAP_CLASS = "org.ow2.jonas.client.boot.Bootstrap"; - - /** WsGen class name. */ - private static final String WSGEN_CLASS = "org.ow2.jonas.generators.wsgen.WsGen"; - - /** destination directory. */ - private File destination = null; - - /** source directory. */ - private File source = null; - - /** validation of XML files ? */ - private boolean validation = true; - - /** name of javac command. */ - private String javac = null; - - /** list of javac options. */ - private String javacOpts = null; - - /** will WsGen keep already generated files ? */ - private boolean keepGenerated = false; - - /** Will WsGen create configuration files ? */ - private boolean noConfig = false; - - /** verbose mode. */ - private boolean verbose = false; - - /** debug mode. */ - private boolean debug = false; - - /** JVM debug mode. */ - private boolean jvmDebug = false; - - /** $JONAS_ROOT. */ - private File jonasRoot = null; - - /** $JONAS_BASE. */ - private File jonasBase = null; - - /** - * Set the output Directory. - * @param d output dir - */ - public void setDestdir(final File d) { - destination = d; - } - - /** - * Set where source jar files are located. - * @param s sources dir - */ - public void setSrcdir(final File s) { - source = s; - } - - /** - * Set XML Validation on/off. - * @param v on/off - */ - public void setValidation(final boolean v) { - validation = v; - } - - /** - * Set the javac command line. - * @param j javac to use - */ - public void setJavac(final String j) { - javac = j; - } - - /** - * Set Java Compiler Options. - * @param opts Options - */ - public void setJavacopts(final String opts) { - javacOpts = opts; - } - - /** - * Set keep Generated mode to on/off. - * @param k on/off - */ - public void setKeepgen(final boolean k) { - keepGenerated = k; - } - - /** - * Set noConfig mode to on/off. - * @param c on/off - */ - public void setNoconfig(final boolean c) { - noConfig = c; - } - - /** - * Set WSDL2Java verbose mode to on/off. - * @param v on/off - */ - public void setVerbose(final boolean v) { - verbose = v; - } - - /** - * Set WSDL2Java debug mode to on/off. - * @param b on/off - */ - public void setDebug(final boolean b) { - debug = b; - } - - /** - * Set debug mode on/off. Used only by developers that wants to Debug WsGen. - * @param d boolean - */ - public void setJvmdebug(final boolean d) { - jvmDebug = d; - } - - /** - * Set the JONAS_ROOT to use. - * @param jr JONAS_ROOT - */ - public void setJonasroot(final File jr) { - jonasRoot = jr; - } - - /** - * Set the JONAS_BASE to use. - * @param jb JONAS_BASE - */ - public void setJonasbase(final File jb) { - jonasBase = jb; - } - - /** - * Execute the WsGen Ant Task. - * @throws BuildException if wsgen cannot finish - */ - public void execute() throws BuildException { - - // init the wsgen task - initWsGenTask(); - - // execute - DirectoryScanner ds = getDirectoryScanner(source); - ds.scan(); - String[] files = ds.getIncludedFiles(); - - for (int i = 0; i < files.length; i++) { - - Java wsgen = createWsGen(source + File.separator + files[i]); - - // calling WsGen task - log("Calling WsGen task for '" + source + File.separator + files[i] + "'.", Project.MSG_VERBOSE); - - if (wsgen.executeJava() != 0) { - throw new BuildException("WsGen reported an error."); - } - } - - } - - /** - * Create and configure the WsGen Java task. - * @param filename input file name to be processed by WsGen - * @return the configured Java Ant Task - * @throws BuildException if the Java Task cannot be created - */ - private Java createWsGen(final String filename) throws BuildException { - - Java wsgenTask = null; // WsGen task - - wsgenTask = (Java) getProject().createTask("java"); - wsgenTask.setTaskName("wsgen"); - wsgenTask.setFork(true); - - // jonas root - wsgenTask.addSysproperty(JOnASAntTool.createVariable("jonas.root", jonasRoot)); - - // jonas base - wsgenTask.addSysproperty(JOnASAntTool.createVariable("jonas.base", jonasBase)); - - // Endorsed directory - File endorsedDir = new File(new File(jonasRoot, "lib"), "endorsed"); - wsgenTask.addSysproperty(JOnASAntTool.createVariable("java.endorsed.dirs", endorsedDir)); - - - // java policy file - String jonasConfigDir = jonasRoot + File.separator + "conf"; - File javaPolicyFile = new File(jonasConfigDir, "java.policy"); - if (javaPolicyFile.exists()) { - wsgenTask.addSysproperty(JOnASAntTool.createVariable("java.security.policy", javaPolicyFile)); - } - - // JVM Debug - if (jvmDebug) { - this.log("Launching in debug mode on port 12345, waiting for connection ...", Project.MSG_INFO); - wsgenTask.createJvmarg().setLine("-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=12345,suspend=y"); - } - - // The bootstrap class must launch the GenIC class - wsgenTask.createArg().setValue(WSGEN_CLASS); - - wsgenTask.createArg().setValue("-d"); - wsgenTask.createArg().setFile(destination); - - // add ow_jonas_bootstrap.jar - String bootJar = jonasRoot + File.separator + "lib" + File.separator + "bootstrap" - + File.separator + "client-bootstrap.jar"; - Path classpath = new Path(getProject(), bootJar); - - log("Using classpath: " + classpath.toString(), Project.MSG_VERBOSE); - wsgenTask.setClasspath(classpath); - - if (!checkBootstrapClassName(classpath)) { - log("Cannot find bootstrap class in classpath.", Project.MSG_ERR); - throw new BuildException("Bootstrap class not found, please check the classpath."); - } else { - wsgenTask.setClassname(BOOTSTRAP_CLASS); - } - - // keepgenerated - if (keepGenerated) { - wsgenTask.createArg().setValue("-keepgenerated"); - } - - // noconfig - if (noConfig) { - wsgenTask.createArg().setValue("-noconfig"); - } - - // novalidation - if (!validation) { - wsgenTask.createArg().setValue("-novalidation"); - } - - // javac - if (javac != null) { - wsgenTask.createArg().setValue("-javac"); - wsgenTask.createArg().setLine(javac); - } - - // javacopts - if (javacOpts != null && !javacOpts.equals("")) { - wsgenTask.createArg().setValue("-javacopts"); - wsgenTask.createArg().setLine(javacOpts); - } - - // verbose - if (verbose) { - wsgenTask.createArg().setValue("-verbose"); - } - - // debug - if (debug) { - wsgenTask.createArg().setValue("-debug"); - } - - // input file to process by GenIC - wsgenTask.createArg().setValue(filename); - - return wsgenTask; - - } - - /** - * Initialize build properties. - * @throws BuildException if required properties are not set - */ - private void initWsGenTask() throws BuildException { - // try to define jonasRoot if not set - if (jonasRoot == null) { - // get ant property - String jr = getProject().getProperty("jonas.root"); - jonasRoot = new File(jr); - - if (jr == null) { - throw new BuildException("attribute jonasroot is necessary."); - } - } - - // use jonasRoot as jonasBase if not set - if (jonasBase == null) { - String jb = getProject().getProperty("jonas.base"); - if (jb == null) { - jonasBase = jonasRoot; - } else { - jonasBase = new File(jb); - } - - } - - // default destination : project directory - if (destination == null) { - destination = getProject().getBaseDir(); - } - - // javac javacOpts - // by default WsGen already handle them - - } - - /** - * Check the bootstrap class name to use in the given classpath. - * - * @param classpath classpath where the boostrap class must be searched. - * @return true if the bootstrap is available in the classpath - */ - private boolean checkBootstrapClassName(final Path classpath) { - log("Looking for bootstrap class in classpath: " + classpath.toString(), Project.MSG_VERBOSE); - AntClassLoader cl = new AntClassLoader(classpath.getProject(), classpath); - try { - cl.loadClass(BOOTSTRAP_CLASS); - log("Found Bootstrap class '" + BOOTSTRAP_CLASS - + "' in classpath.", Project.MSG_VERBOSE); - } catch (ClassNotFoundException cnf1) { - log("Bootstrap class '" + BOOTSTRAP_CLASS - + "' not found in classpath.", Project.MSG_VERBOSE); - return false; - } - return true; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CarolCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CarolCluster.java deleted file mode 100644 index 9337a6068d..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CarolCluster.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.jonasbase.Carol; - - -/** - * Define CarolCluster task. - * @author Benoit Pelletier - */ -public class CarolCluster extends ClusterTasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[CarolCluster] "; - - /** - * Ports range. - */ - private String[] portRange = null; - - /** - * Protocols. - */ - private String protocols = null; - - /** - * Jrmp optimization. - */ - private boolean jrmpOptimization = false; - - /** - * Default constructor - */ - public CarolCluster() { - super(); - } - - /** - * Set protocols. - * @param protocols protocols to set - */ - public void setProtocols(final String protocols) { - this.protocols = protocols; - } - - /** - * Set ports range. - * @param portRange ports range - */ - public void setPortRange(final String portRange) { - this.portRange = portRange.split(","); - - } - - /** - * Set jrmp optimization. - * @param jrmpOptimization jrmp optimization - */ - public void setJrmpOptimization(final boolean jrmpOptimization) { - this.jrmpOptimization = jrmpOptimization; - - } - - /** - * Generates the carol tasks for each JOnAS's instances. - */ - @Override - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - // creation of the Carol tasks - Carol carol = new Carol(); - log(INFO + "tasks generation for " + destDir); - carol.setDefaultPort(portRange[portInd]); - carol.setProtocols(protocols); - carol.setJrmpOptimization(jrmpOptimization); - - // Enable the clustering - carol.setCmiStarted(true); - // - int webIstNb = getWebInstNb(); - if(getArch().equals(ARCH_SEPARATED_WEB_EJB) && i <= webIstNb) { - int ejbInstNb = getEjbInstNb(); - String seqProtocol2ProviderURLs = ""; - for(String protocol : protocols.split(",")) { - if(seqProtocol2ProviderURLs != "") { - seqProtocol2ProviderURLs += ";"; - } - seqProtocol2ProviderURLs += protocol + "::"; - if(protocol.equals("jrmp") || protocol.equals("irmi")) { - seqProtocol2ProviderURLs += "rmi://"; - } else if(protocol.equals("iiop")) { - seqProtocol2ProviderURLs += "iiop://"; - } else { - log(INFO + "Unknown protocol: " + protocol); - throw new BuildException("Unknown protocol: " + protocol); - } - for(int j = webIstNb ; j < webIstNb + ejbInstNb ; j++) { - if(j != webIstNb) { - seqProtocol2ProviderURLs += ","; - } - seqProtocol2ProviderURLs += "localhost:" + portRange[j]; - } - } - carol.setClusterViewProviderUrls(seqProtocol2ProviderURLs); - } - - // set destDir for carol task - carol.setDestDir(new File(destDir)); - - - addTask(carol); - - portInd++; - - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterDaemon.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterDaemon.java deleted file mode 100644 index d0bddf2576..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterDaemon.java +++ /dev/null @@ -1,484 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.io.IOException; -import java.util.Iterator; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Carol; -import org.ow2.jonas.ant.jonasbase.XMLSerializerTask; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - -/** - * Configures the cluster daemon - * @author Benoit Pelletier - */ -public class ClusterDaemon extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[ClusterDaemon] "; - - /** - * Name of the configuration file - */ - private static final String CLUSTER_DAEMON_CONF_FILE = "clusterd.xml"; - - /** - * Domain.xml structure - */ - private Document clusterDaemonDoc = null; - - /** - * Flag indicating if the document has been loaded - */ - private boolean clusterDaemonDocLoaded = false; - - /** - * name - */ - private String name = null; - - /** - * domain name - */ - private String domainName = null; - - /** - * directory - */ - private String cdDir = null; - - /** - * protocol - */ - private String protocol = null; - - /** - * port number - */ - private String port = null; - - /** - * jdk - */ - private String jdk = null; - - /** - * interaction mode - */ - private String interactionMode = null; - - /** - * autoboot - */ - private String autoBoot = null; - - /** - * xprm - */ - private String xprm = null; - - /** - * nodes nb - */ - private int instNb = 0; - - /** - * JONAS_ROOT - */ - private String jonasRoot = null; - - /** - * nodes name - */ - private String clusterNodesName = null; - - /** - * Default constructor - */ - public ClusterDaemon() { - super(); - } - - /** - * load the clusterd.xml file in a DOM structure - */ - private void loadClusterDaemonXmlDoc() { - - if (!clusterDaemonDocLoaded) { - - // Load the orignal configuration file - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = null; - try { - factory.setNamespaceAware(true); - docBuilder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new BuildException(INFO + "Exception during loadClusterDaemonXmlDoc", e); - } - try { - clusterDaemonDoc = docBuilder.parse(jonasRoot + File.separator + "templates" + File.separator + "conf" - + File.separator + "conf" + File.separator + CLUSTER_DAEMON_CONF_FILE); - } catch (SAXException e) { - throw new BuildException(INFO + "Error during parsing of the file " + CLUSTER_DAEMON_CONF_FILE, e); - } catch (IOException e) { - throw new BuildException(INFO + "Error during parsing of the file " + CLUSTER_DAEMON_CONF_FILE, e); - } - - Element root = clusterDaemonDoc.getDocumentElement(); - - // Remove the default servers list - NodeList serverNodeL = root.getElementsByTagName("server"); - for (int i = 0; i < serverNodeL.getLength(); i++) { - Node n = serverNodeL.item(i); - root.removeChild(n); - } - - // Prepare the serialization - XMLSerializerTask xmlSerTask = new XMLSerializerTask(); - xmlSerTask.setXmlDoc(clusterDaemonDoc); - xmlSerTask.setXmlFileName(CLUSTER_DAEMON_CONF_FILE); - - addTask(xmlSerTask); - - clusterDaemonDocLoaded = true; - } - } - - /** - * Add the servers definition in the clusterd.xml - */ - public void addServersDefinition() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - for (int i = 1; i <= instNb; i++) { - - Text c = clusterDaemonDoc.createTextNode("\n\n "); - root.appendChild(c); - - // Element server - Node s = clusterDaemonDoc.createElement("server"); - root.appendChild(s); - - Text c0 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c0); - - // Element name - Node sn = clusterDaemonDoc.createElement("name"); - s.appendChild(sn); - - Text tsn = clusterDaemonDoc.createTextNode(clusterNodesName + i); - sn.appendChild(tsn); - - Text c1 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c1); - - // Element description - Node sd = clusterDaemonDoc.createElement("description"); - s.appendChild(sd); - - Text tsd = clusterDaemonDoc.createTextNode(clusterNodesName + i); - sd.appendChild(tsd); - - Text c2 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c2); - - // Element java-home - Node sjdk = clusterDaemonDoc.createElement("java-home"); - s.appendChild(sjdk); - - Text tsjdk = clusterDaemonDoc.createTextNode(jdk); - sjdk.appendChild(tsjdk); - - Text c3 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c3); - - // Element jonas-root - Node sjr = clusterDaemonDoc.createElement("jonas-root"); - s.appendChild(sjr); - - Text tsjr = clusterDaemonDoc.createTextNode(jonasRoot); - sjr.appendChild(tsjr); - - Text c4 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c4); - - // Element jonas-base - Node sjb = clusterDaemonDoc.createElement("jonas-base"); - s.appendChild(sjb); - String jb = getDestDirPrefix() + i; - - if (File.separatorChar == '/') { - jb = jb.replace('\\', File.separatorChar); - } else { - jb = jb.replace('/', File.separatorChar); - } - - Text tsjb = clusterDaemonDoc.createTextNode(getDestDirPrefix() + i); - sjb.appendChild(tsjb); - - Text c5 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c5); - - // Element xprm - Node sxprm = clusterDaemonDoc.createElement("xprm"); - s.appendChild(sxprm); - - Text tsxprm = clusterDaemonDoc.createTextNode(xprm); - sxprm.appendChild(tsxprm); - - Text c6 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c6); - - // Element auto-boot - Node sab = clusterDaemonDoc.createElement("auto-boot"); - s.appendChild(sab); - - Text tsab = clusterDaemonDoc.createTextNode(autoBoot); - sab.appendChild(tsab); - - Text c7 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c7); - } - Text c10 = clusterDaemonDoc.createTextNode("\n\n"); - root.appendChild(c10); - - } - - /** - * update the name - */ - public void updateName() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the name - NodeList nameNodeL = root.getElementsByTagName("name"); - nameNodeL.item(0).getFirstChild().setNodeValue(name); - - } - - /** - * update the domain name - */ - public void updateDomainName() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("domain-name"); - nameNodeL.item(0).getFirstChild().setNodeValue(domainName); - - } - - /** - * update the interaction mode - */ - public void updateInteractionMode() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("jonas-interaction-mode"); - nameNodeL.item(0).getFirstChild().setNodeValue(interactionMode); - - } - - /** - * update the carol.propertier - */ - public void updateCarol() { - - Carol carol = new Carol(); - carol.setDefaultPort(port); - carol.setProtocols(protocol); - - addTask(carol); - - } - - /** - * Set nodes number - * @param instNb nodes nb - */ - public void setInstNb(final int instNb) { - this.instNb = instNb; - } - - /** - * cluster daemon directory - * @param cdDir directory - */ - public void setCdDir(final String cdDir) { - this.cdDir = cdDir; - if (File.separatorChar == '/') { - this.cdDir = this.cdDir.replace('\\', File.separatorChar); - } else { - this.cdDir = this.cdDir.replace('/', File.separatorChar); - } - } - - /** - * Set the name - * @param name name - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the domain name - * @param domainName domain name - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * interaction mode - * @param interactionMode loosely/tighly coupled - */ - public void setInteractionMode(final String interactionMode) { - this.interactionMode = interactionMode; - } - - /** - * jdk to use - * @param jdk jdk - */ - public void setJdk(final String jdk) { - - this.jdk = jdk; - - if (File.separatorChar == '/') { - this.jdk = this.jdk.replace('\\', File.separatorChar); - } else { - this.jdk = this.jdk.replace('/', File.separatorChar); - } - } - - /** - * port number - * @param port port number - */ - public void setPort(final String port) { - this.port = port; - } - - /** - * set the protocol - * @param protocol protocol - */ - public void setProtocol(final String protocol) { - this.protocol = protocol; - } - - /** - * Set JONAS_ROOT - * @param jonasRoot JONAS_ROOT - */ - public void setJonasRoot(final String jonasRoot) { - this.jonasRoot = jonasRoot; - - if (File.separatorChar == '/') { - this.jonasRoot = this.jonasRoot.replace('\\', File.separatorChar); - } else { - this.jonasRoot = this.jonasRoot.replace('/', File.separatorChar); - } - - } - - /** - * set the name prefix for the cluster nodes - * @param clusterNodesName prefix of the nodes names in the cluster - */ - public void setClusterNodesName(final String clusterNodesName) { - this.clusterNodesName = clusterNodesName; - } - - /** - * Set auto boot - * @param autoBoot true/false - */ - public void setAutoBoot(final String autoBoot) { - this.autoBoot = autoBoot; - } - - /** - * Set xprm - * @param xprm xprm - */ - public void setXprm(final String xprm) { - this.xprm = xprm; - } - - /** - * Generates the script tasks - */ - @Override - public void generatesTasks() { - - updateDomainName(); - updateInteractionMode(); - addServersDefinition(); - updateCarol(); - - // set destDir for each task - for (Iterator it = this.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(cdDir)); - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterTasks.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterTasks.java deleted file mode 100644 index fe2f704597..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ClusterTasks.java +++ /dev/null @@ -1,273 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.ant.jonasbase.Tasks; - -import org.apache.tools.ant.Task; - - -/** - * Defines a common cluster task - * @author Benoit Pelletier - */ -public abstract class ClusterTasks extends Tasks { - - /** - * Architecture of the JOnAS's instances : contain both Web level and Ejb level. - */ - protected static final String ARCH_BOTH_WEB_EJB = "bothWebEjb"; - - /** - * Architecture of the JOnAS's instances : separate Web level and Ejb level. - */ - protected static final String ARCH_SEPARATED_WEB_EJB = "diffWebEjb"; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * Prefix to the destination directory (JONAS_BASE). - */ - private String destDirPrefix = null; - - /** - * First index for the destDir suffix. - */ - private int destDirSuffixIndFirst = -1; - - /** - * Last index for the destDir suffix. - */ - private int destDirSuffixIndLast = -1; - - /** - * Cluster tasks List. - */ - private List clusterTasks = null; - - /** - * Cluster architecture : share instance for web/ejb or separate them. - */ - private String arch = null; - - /** - * number of JOnAS's instance for web level - */ - private int webInstNb = -1; - - /** - * number of JOnAS's instance for ejb level - */ - private int ejbInstNb = -1; - - /** - * Root task set just for logging purpose. - */ - private Task rootTask = null; - - /** - * Constructor. - */ - public ClusterTasks() { - clusterTasks = new ArrayList(); - } - - /** - * Set directory prefix. - * @param destDirPrefix The destDirPrefix to set. - */ - public void setDestDirPrefix(String destDirPrefix) { - this.destDirPrefix = destDirPrefix; - } - - /** - * Gets the prefix of the destination directory. - * @return the prefix of the destination directory - */ - public String getDestDirPrefix() { - return destDirPrefix; - } - - /** - * @param destDirSuffixIndFirst The destDirSuffixIndFirst to set. - */ - public void setDestDirSuffixIndFirst(int destDirSuffixIndFirst) { - this.destDirSuffixIndFirst = destDirSuffixIndFirst; - } - - /** - * Gets the first index of the destDir suffix. - * @return the first index of the destDir suffix - */ - public int getDestDirSuffixIndFirst() { - return destDirSuffixIndFirst; - } - - /** - * @param destDirSuffixIndLast The destDirSuffixIndLast to set. - */ - public void setDestDirSuffixIndLast(int destDirSuffixIndLast) { - this.destDirSuffixIndLast = destDirSuffixIndLast; - } - /** - * Gets the last index of the destDir suffix. - * @return the last index of the destDir suffix - */ - public int getDestDirSuffixIndLast() { - return destDirSuffixIndLast; - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(String logInfo) { - this.logInfo = logInfo; - } - - /** - * Build dest dir with an index. - * @param destDirPrefix destination directory prefix - * @param i index - * @return destination directory - */ - public static String getDestDir(String destDirPrefix, int i) { - String destDir = destDirPrefix + i; - return destDir; - } - - /** - * Set architecture. - * @param arch the architecture - */ - public void setArch(String arch) { - this.arch = arch; - } - - /** - * Get architecture. - * @return architecture - */ - public String getArch() { - return arch; - } - - /** - * Set the web instances number. - * @param webInstNb number of web instances - */ - public void setWebInstNb(final int webInstNb) { - this.webInstNb = webInstNb; - } - - /** - * Get the web instances number. - * @return number of web instances - */ - public int getWebInstNb() { - return webInstNb; - } - - /** - * Set the ejb instances number. - * @param ejbInstNb number of ejb instances - */ - public void setEjbInstNb(final int ejbInstNb) { - this.ejbInstNb = ejbInstNb; - } - - /** - * Get the ejb instances number. - * @return number of ejb instances - */ - public int getEjbInstNb() { - return ejbInstNb; - } - - /** - * Set root task. - * @param rootTask root task - */ - public void setRootTask(Task rootTask) { - this.rootTask = rootTask; - } - - /** - * Get root Task. - * @return rootTask root task - */ - public Task getRootTask() { - return rootTask; - } - - /** - * Add a task to the list of defined tasks. - * @param ct task to add - */ - public void addClusterTask(ClusterTasks ct) { - clusterTasks.add(ct); - } - - /** - * @return a list of all tasks to do - */ - public List getClusterTasks() { - return clusterTasks; - } - - /** - * Logging. - * @param msg message to log - */ - public void log(String msg) { - - if (rootTask != null) { - rootTask.log(msg); - } - } - - /** - * Abstract generatesTasks(). - */ - public abstract void generatesTasks(); -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CmiCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CmiCluster.java deleted file mode 100644 index cbb2c9a8f0..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/CmiCluster.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.Iterator; - -import org.apache.tools.ant.Task; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Cmi; - -/** - * Define CmiCluster task. - * @author Loris Bouzonnet - */ -public class CmiCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[CmiCluster] "; - - /** - * multicast addr - */ - private String mcastAddr = null; - - /** - * multicast port - */ - private String mcastPort = null; - - /** - * Default constructor - */ - public CmiCluster() { - super(); - } - - /** - * Set mcastAddr - * @param mcastAddr multicast address to set - */ - public void setMcastAddr(final String mcastAddr) { - this.mcastAddr = mcastAddr; - } - - /** - * Set mcastPort - * @param mcastPort multicast port to set - */ - public void setMcastPort(final String mcastPort) { - this.mcastPort = mcastPort; - } - - @Override - public void generatesTasks() { - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - // creation of the Cmi tasks - Cmi cmi = new Cmi(); - log(INFO + "tasks generation for " + destDir); - cmi.setMcastAddr(mcastAddr); - cmi.setMcastPort(mcastPort); - cmi.setReplicationEnabled(true); - - // set destDir for each carol task - for (Iterator it = cmi.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(destDir)); - } - - addTasks(cmi); - - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Common.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Common.java deleted file mode 100644 index e41a56f688..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Common.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -/** - * Common task - * @author Benoit Pelletier - */ -public class Common extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[Common] "; - - /** - * Default constructor - */ - public Common() { - super(); - } - - /** - * Add tasks for Carol configuration - * @param carolCluster added task - */ - public void addConfiguredCarolCluster(final CarolCluster carolCluster) { - carolCluster.setRootTask(getRootTask()); - log(INFO + "CarolCluster added"); - carolCluster.setLogInfo("CarolCluster"); - addClusterTask(carolCluster); - } - - /** - * Add tasks for Db configuration - * @param dbCluster added task - */ - public void addConfiguredDbCluster(final DbCluster dbCluster) { - dbCluster.setRootTask(getRootTask()); - log(INFO + "DbCluster added"); - dbCluster.setLogInfo("DbCluster"); - addClusterTask(dbCluster); - } - - /** - * Add tasks for Mail configuration - * @param mailCluster added task - */ - public void addConfiguredMailCluster(final MailCluster mailCluster) { - mailCluster.setRootTask(getRootTask()); - log(INFO + "MailCluster added"); - mailCluster.setLogInfo("MailCluster"); - addClusterTask(mailCluster); - } - - /** - * Add tasks for Jms configuration - * @param jmsCluster added task - */ - public void addConfiguredJmsCluster(final JmsCluster jmsCluster) { - jmsCluster.setRootTask(getRootTask()); - log(INFO + "JmsCluster added"); - jmsCluster.setLogInfo("JmsCluster"); - addClusterTask(jmsCluster); - } - - /** - * Add tasks for WsdlPublish configuration - * @param wsdlPublishCluster added task - */ - public void addConfiguredWsdlPublishCluster(final WsdlPublishCluster wsdlPublishCluster) { - wsdlPublishCluster.setRootTask(getRootTask()); - log(INFO + "WsdlPublishCluster added"); - wsdlPublishCluster.setLogInfo("WsdlPublishCluster"); - addClusterTask(wsdlPublishCluster); - } - - /** - * Add tasks for Discovery configuration - * @param discoveryCluster added task - */ - public void addConfiguredDiscoveryCluster(final DiscoveryCluster discoveryCluster) { - discoveryCluster.setRootTask(getRootTask()); - log(INFO + "DiscoveryCluster added"); - discoveryCluster.setLogInfo("DiscoveryCluster"); - addClusterTask(discoveryCluster); - } - - /** - * Add deployable task. - * @param DeployableCluster added task - */ - public void addConfiguredDeployableCluster(final DeployableCluster deployableCluster) { - deployableCluster.setRootTask(getRootTask()); - log(INFO + "DeployableCluster added"); - deployableCluster.setLogInfo("DeployableCluster"); - addClusterTask(deployableCluster); - } - - /** - * Generates tasks for common. - */ - @Override - public void generatesTasks() { - - for (ClusterTasks ct : getClusterTasks()) { - log(INFO + "tasks generation for " + ct.getLogInfo()); - ct.setArch(getArch()); - ct.setDestDirPrefix(getDestDirPrefix()); - ct.setDestDirSuffixIndFirst(getDestDirSuffixIndFirst()); - ct.setDestDirSuffixIndLast(getDestDirSuffixIndLast()); - ct.setWebInstNb(getWebInstNb()); - ct.setEjbInstNb(getEjbInstNb()); - - ct.generatesTasks(); - addTasks(ct); - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbCluster.java deleted file mode 100644 index 1546677863..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbCluster.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.Db; - -/** - * Define DbCluster task - * @author Benoit Pelletier - */ -public class DbCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[DbCluster] "; - - /** - * ports range - */ - private String[] portRange = null; - - /** - * Default constructor - */ - public DbCluster() { - super(); - } - - /** - * Set ports range - * @param portRange ports range - */ - public void setPortRange(String portRange) { - this.portRange = portRange.split(","); - - } - - /** - * Generates the db tasks for each JOnAS's instances - */ - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the Db task - Db db = new Db(); - - db.setPort(portRange[portInd]); - db.setDestDir(new File(destDir)); - - addTask(db); - - portInd++; - - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbmCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbmCluster.java deleted file mode 100644 index 44da1e3043..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DbmCluster.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.Dbm; - -/** - * Define DbmCluster task - * @author Benoit Pelletier - */ -public class DbmCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[DbmCluster] "; - - /** - * dataSource - */ - private String dataSources = null; - - /** - * Default constructor - */ - public DbmCluster() { - super(); - } - - /** - * Set the dataSources for the Dbm service - * @param dataSources the dataSources for the Dbm service - */ - public void setdataSources(String dataSources) { - this.dataSources = dataSources; - } - - /** - * Generates the DbmCluster tasks for each JOnAS's instances - */ - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the DbmCluster task - Dbm dbm = new Dbm(); - - dbm.setdataSources(dataSources); - dbm.setDestDir(new File(destDir)); - - addTask(dbm); - - portInd++; - - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeployableCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeployableCluster.java deleted file mode 100644 index ab4cd92fa1..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeployableCluster.java +++ /dev/null @@ -1,203 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.DeployableTask; - - -/** - * Define MailCluster task - * @author eyindanga. - */ -public class DeployableCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[DeployableCluster] "; - - - /** - * this.extension is extension of deployables. - */ - private String extension = null; - - /** - * this.values list of deployables, separated with comma. - */ - private String values = null; - - /** - * this.sourceDir is stringified url of a filesystem directory. - */ - private String sourceDir = null; - - /** - * this.destdir is a directory within JONAS_BASE - */ - private String destDir = null; - - /** - * Possible values of this.target are copy, exclude. - */ - private String target = null; - - /** - * Get the source directory. - * @return the source directory. - */ - public String getSourceDir() { - return sourceDir; - } - - - /** - * Set the source directory. - * @param sourceDir the source directory. - */ - public void setSourceDir(final String sourceDir) { - this.sourceDir = sourceDir; - } - - - /** - * Get the destination directory. - * @return the destination directory. - */ - public String getDestDir() { - return destDir; - } - - /** - * Set the destination directory. - * @param destDir the destination directory. - */ - public void setDestDir(final String destDir) { - this.destDir = destDir; - } - - - /** - * Get extension of deployables. - * @return extension of deployables. - */ - public String getExtension() { - return extension; - } - - - /** - * Get deployables. - * @return comma separated list of deployables. - */ - public String getValues() { - return values; - } - - /** - * Sets comma separated list of deployables. - * @param values the comma separated list of deployables to set. - */ - public void setValues(final String values) { - this.values = values; - } - - - - /** - * Sets deployables extension - * @param extension deployables extension - */ - public void setExtension(final String extension) { - this.extension = extension; - } - - /** - * Default constructor. - */ - public DeployableCluster() { - super(); - } - /** - * Get the target to be executed. - * @return the target to be executed. - */ - public String getTarget() { - return target; - } - - /** - * set the target to be executed. - * @param target to be executed - */ - public void setTarget(final String target) { - this.target = target; - } - - /** - * Generates DeployableTask tasks for each JOnAS's instances - */ - @Override - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String jonasBase = getDestDir(getDestDirPrefix(), i); - - log(INFO + "tasks generation for " + destDir); - DeployableTask deptask = new DeployableTask(); - deptask.setDestDir(new File(destDir)); - /** - * this.destdir is a directory within JONAS_BASE - */ - deptask.setDstDir(this.destDir); - /** - * this.sourceDir is stringified url of a filesystem directory. - */ - deptask.setSrcDir(this.sourceDir); - /** - * Possible values of this.target are copy, exclude. - */ - deptask.setTarget(this.target); - /** - * this.extension is extension of deployables. - */ - deptask.setExtension(this.extension); - /** - * this.values list of deployables, separated with comma. - */ - deptask.setValues(this.values); - - deptask.setDestDir(new File(jonasBase)); - - addTask(deptask); - - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeploymentCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeploymentCluster.java deleted file mode 100644 index c152f3f318..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DeploymentCluster.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.PropertyTask; - -/** - * @author eyindanga - * Set deployment properties to cluster instances. - */ -public class DeploymentCluster extends ClusterTasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[DeploymentCluster] "; - - /** - * JOnAS prefix. - */ - private static final String JOnAS_PREFIX = "jonas."; - - /** - * Service prefix. - */ - private static final String SERVICE_PREFIX = JOnAS_PREFIX + "service."; - - - /** - * JOnAS properties file. - */ - private static final String PROPERTIES_FILE = JOnAS_PREFIX + "properties"; - - /** - * JOnAS development mode. - */ - private static final String JOnAS_DEVMODE = JOnAS_PREFIX + "development"; - - /** - * Depmonitor development mode. - */ - private static final String DEPMONITOR_DEVMODE = SERVICE_PREFIX + "depmonitor.development"; - - - /** - * SecurityManager property. - */ - private static final String ONDEMAND_ENABLED_PROPERTY = SERVICE_PREFIX + "web.ondemand.enabled"; - - /** - * Services property. - */ - private static final String ONDEMAND_REDIRECTPORT_PROPERTY = SERVICE_PREFIX + "web.ondemand.redirectPort"; - - - - /** - * Ondemand enabled ? true if so. - */ - private boolean ondemandEnabled = false; - /** - * Ondemand redirect port. - */ - private String ondemandRedirectPort = "0"; - /** - * Depmonitor development mode enabled ? true if so. - */ - private boolean depmonitorDevModeEnabled = true; - - /** - * JOnAS Development mode enabled ? true if so. - */ - private boolean devModeEnabled = false; - - /** - * @return the ondemandEnabled - */ - public boolean isOndemandEnabled() { - return ondemandEnabled; - } - - /** - * @param ondemandEnabled the ondemandEnabled to set - */ - public void setOndemandEnabled(final boolean ondemandEnabled) { - this.ondemandEnabled = ondemandEnabled; - } - - /** - * @return the ondemandRedirectPort - */ - public String getOndemandRedirectPort() { - return ondemandRedirectPort; - } - - /** - * @param ondemandRedirectPort the ondemandRedirectPort to set - */ - public void setOndemandRedirectPort(final String ondemandRedirectPort) { - this.ondemandRedirectPort = ondemandRedirectPort; - } - - /** - * @return the depmonitorDevModeEnabled - */ - public boolean isDepmonitorDevModeEnabled() { - return depmonitorDevModeEnabled; - } - - /** - * @param depmonitorDevModeEnabled the depmonitorDevModeEnabled to set - */ - public void setDepmonitorDevModeEnabled(final boolean depmonitorDevModeEnabled) { - this.depmonitorDevModeEnabled = depmonitorDevModeEnabled; - } - - /** - * @return the devModeEnabled - */ - public boolean isDevModeEnabled() { - return devModeEnabled; - } - - /** - * @param devModeEnabled the devModeEnabled to set - */ - public void setDevModeEnabled(final boolean devModeEnabled) { - this.devModeEnabled = devModeEnabled; - } - - @Override - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - PropertyTask propertyTask = new PropertyTask(); - propertyTask.addPropertyStatement(PROPERTIES_FILE, DEPMONITOR_DEVMODE, Boolean.toString(depmonitorDevModeEnabled), false); - propertyTask.addPropertyStatement(PROPERTIES_FILE, JOnAS_DEVMODE, Boolean.toString(devModeEnabled), false); - propertyTask.addPropertyStatement(PROPERTIES_FILE, ONDEMAND_REDIRECTPORT_PROPERTY , ondemandRedirectPort, false); - propertyTask.addPropertyStatement(PROPERTIES_FILE, ONDEMAND_ENABLED_PROPERTY , Boolean.toString(ondemandEnabled), false); - propertyTask.setDestDir(new File(destDir)); - addTask(propertyTask); - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Director.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Director.java deleted file mode 100644 index afb0cc845e..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Director.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2006 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.ant.jonasbase.JEcho; -import org.ow2.jonas.ant.jonasbase.JMkdir; -import org.ow2.jonas.ant.jonasbase.JTouch; -import org.ow2.jonas.ant.jonasbase.Tasks; - - - -/** - * Allow to configure the director Load Balancer for Apache - * @author Benoit Pelletier - */ -public class Director extends Tasks { - - /** - * Info for the logger - */ - private static final String INFO = "[Director] "; - - /** - * Name of the director conf file - */ - private static final String DIRECTOR_FILE = "enhydra_director.conf"; - - /** - * Configuration file - */ - private File configurationFile = null; - - /** - * Application Server list - */ - private List appServerList = null; - - /** - * sticky session - */ - private boolean stickySession = false; - - /** - * Default constructor - */ - public Director() { - super(); - appServerList = new ArrayList(); - } - - /** - * Creation of the Director file - * @param destDir destination directory - */ - public void createFile(String destDir) { - JMkdir mkdir = new JMkdir(); - mkdir.setDestDir(new File(destDir)); - addTask(mkdir); - - JTouch touchWorker = new JTouch(); - configurationFile = new File(destDir + "/" + DIRECTOR_FILE); - touchWorker.setDestDir(configurationFile); - addTask(touchWorker); - - } - - /** - * Add an application server - * @param portNumber port number - * @param lbFactor load balancing factor - */ - public void addAppServer(String portNumber, String lbFactor) { - AppServer appServer = new AppServer(); - appServer.setPortNumber(portNumber); - appServer.setLbFactor(lbFactor); - appServerList.add(appServer); - } - - /** - * get app server definition - * @param appServer application server to define - * @return definition of the application server - */ - private String getAppServerDef(AppServer appServer) { - String appServerDef = "\n" - + " "; - return appServerDef; - } - - /** - * creation of the AppServer file - */ - private void flushAppServerFile() { - JEcho echo = new JEcho(); - echo.setDestDir(configurationFile); - String appServersDefs = ""; - int ind = 1; - for (Iterator it = this.appServerList.iterator(); it.hasNext();) { - AppServer appServer = (AppServer) it.next(); - appServer.setName("appServer" + ind); - appServersDefs = appServersDefs + getAppServerDef(appServer); - ind++; - } - - String contentFile = "\n" - + "" + "\n" - + "" + "\n" - + "" + "\n" - + " " - + appServersDefs + "\n" - + " " + "\n" - + " " + "\n" - + " " + "\n" - + " " + "\n" - + " " + "\n" - + ""; - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing AppServer Configuration in '" + configurationFile + "'"); - addTask(echo); - } - - /** - * Generation of the config files - */ - public void flushFile() { - flushAppServerFile(); - } - - /** - * Set sticky Session - * @param stickySession to set - **/ - public void setStickySession(boolean stickySession) { - this.stickySession = stickySession; - } - - /** - * Define an inner class for application servers - * @author Benoit Pelletier - */ - public class AppServer { - - /** - * port number - */ - private String portNumber = null; - - /** - * load balancing factor - */ - private String lbFactor = null; - - /** - * name - */ - private String name = null; - - /** - * get port number - * @return port number - */ - public String getPortNumber() { - return portNumber; - } - - /** - * set port number - * @param portNumber port number - */ - public void setPortNumber(String portNumber) { - this.portNumber = portNumber; - } - - /** - * get load balancing factor - * @return load balancing factor - */ - public String getLbFactor() { - return lbFactor; - } - - /** - * set load balancing factor - * @param lbFactor load balancing factor - */ - public void setLbFactor(String lbFactor) { - this.lbFactor = lbFactor; - } - - /** - * get name - * @return name - */ - public String getName() { - return name; - } - - /** - * set name - * @param name name to set - */ - public void setName(String name) { - this.name = name; - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DiscoveryCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DiscoveryCluster.java deleted file mode 100644 index 71935333f7..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/DiscoveryCluster.java +++ /dev/null @@ -1,327 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.Iterator; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Discovery; - - -/** - * Define DiscoveryCluster task - * @author Benoit Pelletier - */ -public class DiscoveryCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[DiscoveryCluster] "; - - - /** - * greeting ports range - */ - private String[] greetingPortRange = null; - - /** - * source ports range - */ - private String[] sourcePortRange = null; - - /** - * multicast port - */ - private String mcastPort = null; - - /** - * multicast addr - */ - private String mcastAddr = null; - - /** - * ind of master node - */ - private int masterNode = -1; - - /** - * jonas_root - */ - private String jonasRoot = null; - - /** - * domain name - */ - private String domainName = null; - - /** - * protocol - */ - private String protocol = null; - - /** - * carol ports range - */ - private String[] carolPortRange = null; - - /** - * domain desc - */ - private String domainDesc = null; - - /** - * cluster name - */ - private String clusterName = null; - - /** - * cluster desc - */ - private String clusterDesc = null; - - /** - * nodes name - */ - private String clusterNodesName = null; - - /** - * cluster daemon name - */ - private String cdName = null; - - /** - * cluster daemon protocol - */ - private String cdProtocol = null; - - /** - * cluster daemon port - */ - private String cdPort = null; - - - /** - * Default constructor - */ - public DiscoveryCluster() { - super(); - } - - /** - * Set master node - * @param masterNode inf of the master node - */ - public void setMasterNode(final int masterNode) { - this.masterNode = masterNode; - } - - /** - * Set mcastPort - * @param mcastPort multicast port to set - */ - public void setMcastPort(final String mcastPort) { - this.mcastPort = mcastPort; - } - - /** - * Set mcastAddr - * @param mcastAddr multicast address to set - */ - public void setMcastAddr(final String mcastAddr) { - this.mcastAddr = mcastAddr; - } - - /** - * Set greeting ports range - * @param portRange ports range - */ - public void setGreetingPortRange(final String portRange) { - this.greetingPortRange = portRange.split(","); - - } - - /** - * Set source ports range - * @param portRange ports range - */ - public void setSourcePortRange(final String portRange) { - this.sourcePortRange = portRange.split(","); - - } - - /** - * Set domainName - * @param domainName domain name - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * Set domainDesc - * @param domainDesc domain desc - */ - public void setDomainDesc(final String domainDesc) { - this.domainDesc = domainDesc; - } - - /** - * Set clusterName - * @param clusterName cluster name - */ - public void setClusterName(final String clusterName) { - this.clusterName = clusterName; - } - - /** - * Set clusterDesc - * @param clusterDesc cluster desc - */ - public void setClusterDesc(final String clusterDesc) { - this.clusterDesc = clusterDesc; - } - - /** - * Generates the discovery tasks for each JOnAS's instances - */ - @Override - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the Discovery tasks - Discovery discovery = new Discovery(); - - if (i == masterNode) { - discovery.setJonasRoot(jonasRoot); - discovery.setSourcePort(sourcePortRange[portInd]); - discovery.setDomainDesc(domainDesc); - /** - * FIXME this line will be necessary until the bind_addr problem of JGroups is fixed. - * an ip address should be passed on JOnAS starting, that will be used by JGroups channel to avoid static discovery. - */ - //discovery.setDomainCluster(clusterName, clusterDesc, clusterNodesName, getWebInstNb() + getEjbInstNb(), protocol, carolPortRange, cdName, getCdUrl()); - } - discovery.setGreetingPort(greetingPortRange[portInd]); - discovery.setMcastPort(mcastPort); - discovery.setMcastAddr(mcastAddr); - - // set destDir for each task - for (Iterator it = discovery.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(destDir)); - } - - addTasks(discovery); - - portInd++; - - } - } - - /** - * set the name prefix for the cluster nodes - * @param clusterNodesName prefix of the nodes names in the cluster - */ - public void setClusterNodesName(final String clusterNodesName) { - this.clusterNodesName = clusterNodesName; - } - - /** - * Set the protocol used by the server nodes - * @param protocol protocol - */ - public void setProtocol(final String protocol) { - this.protocol = protocol; - } - - /** - * Set the name used by the cluster daemon - * @param cdName cdName - */ - public void setCdName(final String cdName) { - this.cdName = cdName; - } - - /** - * Set the protocol used by the cluster daemon - * @param cdProtocol cdProtocol - */ - public void setCdProtocol(final String cdProtocol) { - this.cdProtocol = cdProtocol; - } - - /** - * Set the port used by the cluster daemon - * @param cdPort cdPort - */ - public void setCdPort(final String cdPort) { - this.cdPort = cdPort; - } - - /** - * Build the cluster daemon JRM remote url - * @return url - */ - public String getCdUrl(){ - String scheme; - if(cdProtocol.equals("jrmp") || cdProtocol.equals("irmi")) { - scheme = "rmi"; - } else if(cdProtocol.equals("iiop")) { - scheme = "iiop"; - } else { - throw new BuildException(INFO + "Unknown protocol for cluster daemon: " + cdProtocol); - } - String url = "service:jmx:" + scheme + "://localhost/jndi/" - + scheme + "://localhost:" + cdPort + "/" + cdProtocol + "connector_" + cdName; - return url; - } - - /** - * set the carol port range - * @param carolPortRange carol port range - */ - public void setCarolPortRange(final String carolPortRange) { - this.carolPortRange = carolPortRange.split(","); - } - - /** - * Set JONAS ROOT - * @param jonasRoot directory - */ - public void setJonasRoot(final String jonasRoot) { - this.jonasRoot = jonasRoot; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/EjbLevel.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/EjbLevel.java deleted file mode 100644 index aaf914fce4..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/EjbLevel.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - - -/** - * Defines Ejblevel task - * @author Benoit Pelletier - */ -public class EjbLevel extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[EjbLevel] "; - - /** - * Default constructor - */ - public EjbLevel() { - super(); - } - - /** - * Add tasks for servicesCluster configuration - * @param servicesCluster added task - */ - public void addConfiguredServicesCluster(final ServicesCluster servicesCluster) { - servicesCluster.setRootTask(getRootTask()); - log(INFO + "ServicesCluster added"); - servicesCluster.setLogInfo("ServicesCluster"); - addClusterTask(servicesCluster); - } - - /** - * Add tasks for jdbcRaCluster configuration - * @param jdbcRaCluster added task - */ - public void addConfiguredJdbcRaCluster(final JdbcRaCluster jdbcRaCluster) { - jdbcRaCluster.setRootTask(getRootTask()); - log(INFO + "JdbcRaCluster added"); - jdbcRaCluster.setLogInfo("JdbcRaCluster"); - addClusterTask(jdbcRaCluster); - } - - /** - * Add tasks for jdbcXmlCluster configuration - * @param jdbcXmlCluster added task - */ - public void addConfiguredJdbcXmlCluster(final JdbcXmlCluster jdbcXmlCluster) { - jdbcXmlCluster.setRootTask(getRootTask()); - log(INFO + "JdbcXmlCluster added"); - jdbcXmlCluster.setLogInfo("JdbcXmlCluster"); - addClusterTask(jdbcXmlCluster); - } - - - /** - * Add tasks for DbmCluster configuration - * @param dbmCluster added task - */ - public void addConfiguredDbmCluster(final DbmCluster dbmCluster) { - dbmCluster.setRootTask(getRootTask()); - log(INFO + "DbmCluster added"); - dbmCluster.setLogInfo("DbmCluster"); - addClusterTask(dbmCluster); - } - - /** - * Add tasks for CmiCluster configuration - * @param cmiCluster added task - */ - public void addConfiguredCmiCluster(final CmiCluster cmiCluster) { - cmiCluster.setRootTask(getRootTask()); - log(INFO + "CmiCluster added"); - cmiCluster.setLogInfo("CmiCluster"); - addClusterTask(cmiCluster); - } - - /** - * Add tasks for HaCluster configuration - * @param haCluster added task - */ - public void addConfiguredHaCluster(final HaCluster haCluster) { - haCluster.setRootTask(getRootTask()); - log(INFO + "HaCluster added"); - haCluster.setLogInfo("HaCluster"); - addClusterTask(haCluster); - } - - /** - * Add tasks for LibCluster configuration - * @param libCluster added task - */ - public void addConfiguredLibCluster(final LibCluster libCluster) { - libCluster.setRootTask(getRootTask()); - log(INFO + "LibCluster added"); - libCluster.setLogInfo("LibCluster"); - addClusterTask(libCluster); - } - - /** - * Add tasks for DeploymentCluster configuration - * @param deploymentCluster added task - */ - public void addConfiguredDeploymentCluster(final DeploymentCluster deploymentCluster) { - deploymentCluster.setRootTask(getRootTask()); - log(INFO + "DeploymentCluster added"); - deploymentCluster.setLogInfo("DeploymentCluster"); - addClusterTask(deploymentCluster); - } - - /** - * Generates tasks for common - */ - @Override - public void generatesTasks() { - for (ClusterTasks ct : getClusterTasks()) { - log(INFO + "tasks generation for " + ct.getLogInfo()); - ct.setArch(getArch()); - ct.setDestDirPrefix(getDestDirPrefix()); - ct.setDestDirSuffixIndFirst(getDestDirSuffixIndFirst()); - ct.setDestDirSuffixIndLast(getDestDirSuffixIndLast()); - ct.generatesTasks(); - addTasks(ct); - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/HaCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/HaCluster.java deleted file mode 100644 index 15f65046d5..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/HaCluster.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.Iterator; - -import org.apache.tools.ant.Task; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Ha; - - -/** - * Define HaCluster task - * @author Benoit Pelletier - */ -public class HaCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[HaCluster] "; - - /** - * multicast addr - */ - private String mcastAddr = null; - - /** - * multicast port - */ - private String mcastPort = null; - - - /** - * Default constructor - */ - public HaCluster() { - super(); - } - - /** - * Set mcastAddr - * @param mcastAddr multicast address to set - */ - public void setMcastAddr(final String mcastAddr) { - this.mcastAddr = mcastAddr; - } - - /** - * Set mcastPort - * @param mcastPort multicast port to set - */ - public void setMcastPort(final String mcastPort) { - this.mcastPort = mcastPort; - } - - /** - * Generates the carol tasks for each JOnAS's instances - */ - @Override - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - // creation of the Ha tasks - Ha ha = new Ha(); - log(INFO + "tasks generation for " + destDir); - ha.setMcastAddr(mcastAddr); - ha.setMcastPort(mcastPort); - - // set destDir for each carol task - for (Iterator it = ha.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(destDir)); - } - - addTasks(ha); - - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcRaCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcRaCluster.java deleted file mode 100644 index 99f0be1639..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcRaCluster.java +++ /dev/null @@ -1,225 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.JdbcRa; - -/** - * Define JdbcRaCluster task - * @author Benoit Pelletier - */ -public class JdbcRaCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[JdbcRaCluster] "; - - /** - * New file or add into existing one - */ - private boolean newFile = false; - - /** - * Name of this JDBC Resource Adaptor - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor - */ - private String mapperName = null; - - /** - * username of this JDBC Resource Adaptor - */ - private String user = null; - - /** - * Password of this JDBC Resource Adaptor - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name) - */ - private String driverName = null; - - /** - * Driver Name of this JDBC Resource Adaptor - */ - private String realDriverName = null; - - /** - * Max Pool Size - */ - private String maxPoolSize = "100"; - - /** - * JNDI Name of this JDBC Resource Adaptor - */ - private String jndiName = null; - - /** - * Copy to autoload dir or not - */ - private boolean autoload = true; - - /** - * Using of the P6Spy tool or not - */ - private boolean p6spy = false; - /** - * Default constructor - */ - public JdbcRaCluster() { - super(); - } - - /** - * Set the name of this JDBC Resource Adaptor - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor - * @param mapperName the mappername of this JDBC Resource Adaptor - */ - public void setMapperName(final String mapperName) { - this.mapperName = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor - * @param user the user of this JDBC Resource Adaptor - */ - public void setUser(final String user) { - this.user = user; - } - - /** - * Set the password of this JDBC Resource Adaptor - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the url of this JDBC Resource Adaptor - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool - * @param maxPoolSize max pool size of connection - */ - public void setMaxPoolSize(final String maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - - /** - * Set the name of the driver of this JDBC Resource Adaptor - * @param driverName the name of the driver of this JDBC Resource Adaptor - */ - public void setDriverName(final String driverName) { - this.driverName = driverName; - this.realDriverName = driverName; - } - - /** - * Set the jndiName of this JDBC Resource Adaptor - * @param jndiName the jndiName of this JDBC Resource Adaptor - */ - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - /** - * opy rar to autoload or only in rars/ ? - * @param autoload true of false - */ - public void setAutoload(final boolean autoload) { - this.autoload = autoload; - } - - /** - * Configure the using of the P6Spy tool or not ? - * @param p6spy true or false - */ - public void setP6spy(final boolean p6spy) { - this.p6spy = p6spy; - } - - /** - * Generates the JdbcRa tasks for each JOnAS's instances - */ - @Override - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the JdbcRa task - JdbcRa jdbcRa = new JdbcRa(); - - jdbcRa.setAutoload(autoload); - jdbcRa.setDriverName(driverName); - jdbcRa.setJndiName(jndiName); - jdbcRa.setMapperName(mapperName); - jdbcRa.setMaxPoolSize(maxPoolSize); - jdbcRa.setName(name); - jdbcRa.setP6spy(p6spy); - jdbcRa.setPassword(password); - jdbcRa.setUrl(url); - jdbcRa.setUser(user); - - jdbcRa.setDestDir(new File(destDir)); - - addTask(jdbcRa); - - portInd++; - - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcXmlCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcXmlCluster.java deleted file mode 100644 index 75ab8f60ab..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JdbcXmlCluster.java +++ /dev/null @@ -1,347 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.JdbcXml; - -/** - * Define JdbcXmlCluster task - * @author Benoit Pelletier - */ -public class JdbcXmlCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[JdbcXmlCluster] "; - - /** - * New file or add into existing one - */ - private boolean newFile = false; - - /** - * Name of this JDBC Resource Adaptor. - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor. - */ - private String mapper = null; - - /** - * username of this JDBC Resource Adaptor. - */ - private String userName = null; - - /** - * Password of this JDBC Resource Adaptor. - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor. - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name). - */ - private String className = null; - - /** - * Init Pool Size. - */ - private String initConPool = "1"; - - /** - * Min Pool Size. - */ - private String minConPool = "10"; - - /** - * Max Pool Size. - */ - private String maxConPool = "100"; - - /** - * Max Prepared Statements Size - */ - private String pstmtMax = "10"; - - /** - * Pstmt cache policy - */ - private String pstmtCachePolicy = "List"; - - /** - * Max Wait Time jdbc - */ - private String maxWaitTime = "10"; - - /** - * Max Waiters jdbc - */ - private String maxWaiters = "100"; - - /** - * connexion max age jdbc - */ - private String connMaxAge = "1440"; - - /** - * Max open time jdbc - */ - private String maxOpenTime = "60"; - - /** - * Connection check level - */ - private String conCheckLevel = "0"; - - /** - * Connection check level - */ - private String conTestStmt = ""; - - /** - * Sampling period - */ - private String samplingPeriod = "30"; - /** - * Default constructor - */ - public JdbcXmlCluster() { - super(); - } - - /** - * Set the name of the driver of this JDBC Resource Adaptor. - * @param className the name of the driver of this JDBC Resource Adaptor - */ - public void setClassName(final String className) { - this.className = className; - } - - /** - * Set the init pool size of this JDBC Resource Adaptor Connection Pool. - * @param initConPool init pool size of connection - */ - public void setInitConPool(final String initConPool) { - this.initConPool = initConPool; - } - - /** - * Set the min pool size of this JDBC Resource Adaptor Connection Pool. - * @param minConPool min pool size of connection - */ - public void setMinConPool(final String minConPool) { - this.minConPool = minConPool; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool. - * @param maxConPool max pool size of connection - */ - public void setMaxConPool(final String maxConPool) { - this.maxConPool = maxConPool; - } - - /** - * Set the prepared statement pool size of this JDBC Resource Adaptor Connection Pool. - * @param pstmtMax pool size of connection - */ - public void setPstmtMax(final String pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * Set the prepared statement cache policy of this JDBC Resource Adaptor Connection Pool. - * @param pstmtCachePolicy cache policy - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - - /** - * Set the connection check level. - * @param conCheckLevel level - */ - public void setConCheckLevel(final String conCheckLevel) { - this.conCheckLevel = conCheckLevel; - } - - /** - * Set the statement for the connection check level. - * @param conTestStmt request - */ - public void setConTestStmt(final String conTestStmt) { - this.conTestStmt = conTestStmt; - } - - /** - * Set the name of this JDBC Resource Adaptor. - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor. - * @param mapper the mappername of this JDBC Resource Adaptor - */ - public void setMapper(final String mapperName) { - this.mapper = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor. - * @param user the user of this JDBC Resource Adaptor - */ - public void setUserName(final String user) { - this.userName = user; - } - - /** - * Set the password of this JDBC Resource Adaptor. - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the samplingPeriod of the JDBC Resource Adaptor. - * @param samplingPeriod the sampling period - */ - public void setSamplingPeriod(final String samplingPeriod) { - this.samplingPeriod = samplingPeriod; - } - - /** - * Set the url of this JDBC Resource Adaptor. - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max wait time of this JDBC Resource Adaptor Connection Pool. - * @param maxWaitTime of the connection - */ - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - /** - * Set the max waiters of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxWaiters(final String maxWaiters) { - this.maxWaiters = maxWaiters; - } - - /** - * Set the connexion max age of this JDBC Resource Adaptor Connection Pool. - * @param maxConnMAxAge of connection - */ - public void setConnMaxAge(final String connMaxAge) { - this.connMaxAge = connMaxAge; - } - - /** - * Set the open time max of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxOpenTime(final String maxOpenTime) { - this.maxOpenTime = maxOpenTime; - } - - /** - * - * @return true if a new file is requested - */ - public boolean isNewFile() { - return newFile; - } - - /** - * Set is a new file has to be created - * @param newFile - */ - public void setNewFile(final String newFile) { - this.newFile = Boolean.valueOf(newFile); - } - - /** - * Generates the JdbcRa tasks for each JOnAS's instances - */ - @Override - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the JdbcXml task - JdbcXml jdbcXml = new JdbcXml(); - - jdbcXml.setNewFile(String.valueOf(newFile)); - jdbcXml.setName(name); - jdbcXml.setMapper(mapper); - jdbcXml.setUserName(userName); - jdbcXml.setPassword(password); - jdbcXml.setUrl(url); - jdbcXml.setClassName(className); - - - jdbcXml.setInitConPool(initConPool); - jdbcXml.setMinConPool(minConPool); - jdbcXml.setMaxConPool(maxConPool); - jdbcXml.setPstmtMax(pstmtMax); - jdbcXml.setPstmtCachePolicy(pstmtCachePolicy); - jdbcXml.setMaxWaitTime(maxWaitTime); - jdbcXml.setMaxWaiters(maxWaiters); - jdbcXml.setConnMaxAge(connMaxAge); - jdbcXml.setMaxOpenTime(maxOpenTime); - jdbcXml.setConCheckLevel(conCheckLevel); - jdbcXml.setConTestStmt(conTestStmt); - jdbcXml.setSamplingPeriod(samplingPeriod); - - jdbcXml.setDestDir(new File(destDir)); - - addTask(jdbcXml); - - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JmsCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JmsCluster.java deleted file mode 100644 index c843b43f7d..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/JmsCluster.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - - -import java.io.File; -import java.util.Iterator; - -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.Jms; - - -/** - * Define JmsCluster task - * @author Benoit Pelletier - */ -public class JmsCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[JmsCluster] "; - - /** - * ports range - */ - private String[] portRange = null; - - /** - * initialTopics - */ - private String initialTopics = null; - - /** - * initialQueues - */ - private String initialQueues = null; - - /** - * Default constructor - */ - public JmsCluster() { - super(); - } - - /** - * Set ports range - * @param portRange ports range - */ - public void setPortRange(String portRange) { - this.portRange = portRange.split(","); - - } - - /** - * Set the initial topics - * @param initialTopics comma separated list of topics - */ - public void setInitialTopics(String initialTopics) { - this.initialTopics = initialTopics; - } - - /** - * Set the initial queues when JOnAS start - * @param initialQueues comma separated list of topics - */ - public void setInitialQueues(String initialQueues) { - this.initialQueues = initialQueues; - } - - /** - * Generates the Jms tasks for each JOnAS's instances - */ - public void generatesTasks() { - - int portInd = 0; - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - // creation of the Db task - Jms jms = new Jms(); - - jms.setPort(portRange[portInd]); - jms.setInitialQueues(initialQueues); - jms.setInitialTopics(initialTopics); - - // set destDir for each carol task - for (Iterator it = jms.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(destDir)); - } - - addTasks(jms); - - portInd++; - - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/LibCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/LibCluster.java deleted file mode 100644 index ea26a1ff5c..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/LibCluster.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.ant.jonasbase.Lib; - -import org.apache.tools.ant.types.FileSet; - - -/** - * Define LibCluster task - * @author Benoit Pelletier - */ -public class LibCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[LibCluster] "; - - /** - * List of files (WSDL publish) - */ - private List files = new ArrayList(); - - /** - * destination Directory - */ - private File destDir = null; - - /** - * Default constructor - */ - public LibCluster() { - super(); - } - - /** - * Add file (wsdl publish) - * @param file properties file - */ - public void addConfiguredFileSet(FileSet file) { - files.add(file); - } - - /** - * Override method to copy files to custom folder and not for several JONAS_BASE - * @param destDir The destDir to set. - */ - public void setDestDir(File destDir) { - this.destDir = destDir; - } - - /** - * Generates the LibCluster tasks for each JOnAS's instances - */ - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - log(INFO + "tasks generation for " + destDir); - - // creation of the Lib task - Lib lib = new Lib(); - - for (Iterator it = files.iterator(); it.hasNext();) { - FileSet fileSet = (FileSet) it.next(); - lib.addFileset(fileSet); - if (this.destDir == null) { - lib.setDestDir(new File(destDir)); - } else { - // bypass the adding of '/lib/ext' suffix - lib.setTodir(this.destDir); - } - - addTask(lib); - } - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/MailCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/MailCluster.java deleted file mode 100644 index d5b5645a1d..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/MailCluster.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.Mail; - - -/** - * Define MailCluster task - * @author Benoit Pelletier - */ -public class MailCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[MailCluster] "; - - - /** - * Type of factory (Session or MimePartDataSource) - */ - private String type = null; - - /** - * Name of the factory - */ - private String name = null; - - /** - * Recipient (TO) of MimePartDataSource factory - */ - private String mailTo = null; - - /** - * Subject of MimePartDataSource factory - */ - private String subject = null; - - /** - * Sets the recipient (MimePartDataSource) - * @param mailTo recipient. - */ - public void setMailTo(String mailTo) { - this.mailTo = mailTo; - } - - /** - * Sets the name - * @param name name of the factory - */ - public void setName(String name) { - this.name = name; - } - - /** - * Sets the subject (MimePartDataSource) - * @param subject of the mail - */ - public void setSubject(String subject) { - this.subject = subject; - } - - /** - * Sets the type of factory - * @param type of factory - */ - public void setType(String type) { - this.type = type; - } - - /** - * Default constructor - */ - public MailCluster() { - super(); - } - - /** - * Generates the mail tasks for each JOnAS's instances - */ - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - // creation of the Mail task - Mail mail = new Mail(); - - log(INFO + "tasks generation for " + destDir); - - mail.setMailTo(mailTo); - mail.setName(name); - mail.setSubject(subject); - mail.setType(type); - - mail.setDestDir(new File(destDir)); - - addTask(mail); - - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ModJk.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ModJk.java deleted file mode 100644 index 2d8d30ebed..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ModJk.java +++ /dev/null @@ -1,494 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.ow2.jonas.ant.jonasbase.JEcho; -import org.ow2.jonas.ant.jonasbase.JMkdir; -import org.ow2.jonas.ant.jonasbase.JTouch; -import org.ow2.jonas.ant.jonasbase.Tasks; - - - -/** - * Allow to configure the mod_jk load balancer for Apache - * @author Benoit Pelletier - */ -public class ModJk extends Tasks { - - /** - * Info for the logger - */ - private static final String INFO = "[ModJk] "; - - /** - * Name of the worker file - */ - private static final String MOD_JK_WORKER_FILE = "workers.properties"; - - /** - * Name of the tomcat_jk file - */ - private static final String MOD_JK_TOMCAT_FILE = "tomcat_jk.conf"; - - /** - * Name of the httpd.conf file - */ - private static final String HTTPD_CONF_FILE = "httpd.conf"; - - /** - * Worker file - */ - private File fileWorker = null; - - /** - * Tomcat config file - */ - private File fileTomcat = null; - - /** - * Httpd config file - */ - private File fileHttpd = null; - - /** - * Workers list - */ - private List workersList = null; - - /** - * sticky session - */ - private boolean stickySession = false; - - /** - * root dir - */ - private String rootDir = null; - - /** - * mod_jk dir - */ - private String dir = null; - - /** - * List of worker files to put in configuration dirs - * of web instances. - */ - // Disabling, wondering the use case of JONAS-67 - //private List workerFiles = null; - - /** - * Default constructor - */ - public ModJk() { - super(); - workersList = new ArrayList(); - // Disabling, wondering the use case of JONAS-67 - //workerFiles = new ArrayList(); - } - - /** - * Creation of the mod_jk files - */ - public void createFiles() { - String modJkDir = rootDir + File.separator + dir; - JMkdir mkdir = new JMkdir(); - mkdir.setDestDir(new File(modJkDir)); - addTask(mkdir); - - JTouch touchWorker = new JTouch(); - fileWorker = new File(modJkDir + "/" + MOD_JK_WORKER_FILE); - touchWorker.setDestDir(fileWorker); - addTask(touchWorker); - - JTouch touchTomcat = new JTouch(); - fileTomcat = new File(modJkDir + "/" + MOD_JK_TOMCAT_FILE); - touchTomcat.setDestDir(fileTomcat); - addTask(touchTomcat); - -// JTouch touchHttpd = new JTouch(); -// fileHttpd = new File(modJkDir + "/" + HTTPD_CONF_FILE); -// touchHttpd.setDestDir(fileHttpd); -// addTask(touchHttpd); - - } - - /** - * @return the webConfDirs - */ - // Disabling, wondering the use case of JONAS-67 - //public List getWorkerFiles() { - // return workerFiles; - //} - - /** - * @param webConfDirs the webConfDirs to set - */ - // Disabling, wondering the use case of JONAS-67 - //public void setWorkerFiles(final List workerFiles) { - // this.workerFiles = workerFiles; - //} - - /** - * Add a worker - * @param portNumber port number - * @param lbFactor load balancing factor - * @return worker name - */ - public String addWorker(final String portNumber, final String lbFactor) { - Worker worker = new Worker(); - worker.setPortNumber(portNumber); - worker.setLbFactor(lbFactor); - int index = workersList.size() + 1; - worker.setName("worker" + index); - workersList.add(worker); - return worker.getName(); - } - - /** - * get worker definition - * @param worker worker to define - * @return definition of the worker - */ - private String getWorkerDef(final Worker worker) { - String preferedWorker = choosePreferedFailOverNode(worker.getName()); - String workerDef = "\n" - + - "# -----------------------" + "\n" - + - "# " + worker.getName() + "\n" - + - "# -----------------------" + "\n" - + - "worker." + worker.getName() + ".port=" + worker.getPortNumber() + "\n" - + - "worker." + worker.getName() + ".host=localhost" + "\n" - + - "worker." + worker.getName() + ".type=ajp13" + "\n" - + - "# Load balance factor" + "\n" - + - "worker." + worker.getName() + ".lbfactor=" + worker.getLbFactor() + "\n" - + - "# Define prefered failover node for " + worker.getName() + "\n" - + - "worker." + worker.getName() + ".redirect=" + preferedWorker + "\n" - + - "# Disable " + worker.getName() + " for all requests except failover" + "\n" - + - "#worker." + worker.getName() + ".disabled=True" + "\n"; - return workerDef; - } - /** - * Choose the prefered fail over node for the given worker. - * @param name the worker's name. - * @return the name of the prefered fail over node. - */ - private String choosePreferedFailOverNode(final String name) { - String ret = name; - for(Worker worker: workersList) { - if (!worker.getName().equals(name)) { - ret = worker.getName(); - break; - } - } - return ret; - } - - /** - * creation of the worker file - */ - private void flushWorkerFile() { - JEcho echo = new JEcho(); - echo.setDestDir(fileWorker); - String workersNameList = ""; - String workersDefs = ""; - for (Iterator it = this.workersList.iterator(); it.hasNext();) { - Worker worker = (Worker) it.next(); - - if (workersNameList.compareTo("") == 0) { - workersNameList = workersNameList + worker.getName(); - } else { - workersNameList = workersNameList + "," + worker.getName(); - } - workersDefs = workersDefs + getWorkerDef(worker); - } - - String contentFile = "\n" - + - "# -----------------------" + "\n" - + - "# List the workers name" + "\n" - + - "# -----------------------" + "\n" - + - "worker.list=loadbalancer,jkstatus" + "\n" - + - workersDefs + "\n" - + - "# -----------------------" + "\n" - + - "# Load Balancer worker" + "\n" - + - "# -----------------------" + "\n" - + - "worker.loadbalancer.type=lb" + "\n" - + - "worker.loadbalancer.balance_workers=" + workersNameList + "\n" - + - "worker.loadbalancer.sticky_session=" + stickySession + "\n" - + - "# -----------------------" + "\n" - + - "# jkstatus worker" + "\n" - + - "# -----------------------" + "\n" - + - "worker.jkstatus.type=status" + "\n"; - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing Configuration in '" + fileWorker + "'"); - addTask(echo); - - // Disabling, wondering the use case of JONAS-67 - //try { - // for (Iterator iterator = workerFiles.iterator(); iterator.hasNext();) { - // File workerFile = iterator.next(); - // JEcho cpyWebBase = (JEcho)echo.clone(); - // cpyWebBase.setDestDir(workerFile); - // cpyWebBase.setLogInfo(INFO + "Flushing Configuration in '" + workerFile + "'"); - // addTask(cpyWebBase); - // } - //} catch (Exception e) { - // e.printStackTrace(); - //} - - } - - /** - * creation of the tomcat-jk file - */ - private void flushTomcatFile() { - JEcho echo = new JEcho(); - echo.setDestDir(fileTomcat); - - String contentFile = "\n" - + - "LoadModule jk_module modules/mod_jk.so" + "\n" - + - "# Location of the worker file" + "\n" - + - "JkWorkersFile " + this.dir + File.separator + MOD_JK_WORKER_FILE + "\n" - + - "# Location of the log file" + "\n" - + - "JkLogFile " + this.dir + File.separator + "mod_jk.log" + "\n" - + - "# Log level : debug, info, error or emerg" + "\n" - + - "JkLogLevel emerg" + "\n" - + - "# Shared Memory Filename ( Only for Unix platform ) required by loadbalancer" + "\n" - + - "JkShmFile " + this.dir + File.separator + "jk.shm" + "\n" - + - "# Assign specific URL to Tomcat workers" + "\n" - + - "JkMount /sampleCluster2 loadbalancer" + "\n" - + - "JkMount /sampleCluster2/* loadbalancer" + "\n" - + - "JkMount /sampleCluster3 loadbalancer" + "\n" - + - "JkMount /sampleCluster3/* loadbalancer" + "\n" - + - "# A mount point to the status worker" + "\n" - + - "JkMount /jkmanager jkstatus" + "\n" - + - "JkMount /jkmanager/* jkstatus" + "\n" - + - "# Copy mount points into all the virtual hosts" + "\n" - + - "JkMountCopy All" + "\n" - + - "# Enable the Jk manager access only from localhost" + "\n" - + - "" + "\n" - + - " JkMount jkstatus" + "\n" - + - " Order deny,allow" + "\n" - + - " Deny from all" + "\n" - + - " Allow from 127.0.0.1" + "\n" - + - "" + "\n"; - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing Configuration in '" + fileTomcat + "'"); - addTask(echo); - } - - /** - * creation of the httpd.conf file - */ - private void flushHttpdFile() { - JEcho echo = new JEcho(); - echo.setDestDir(fileHttpd); - - String contentFile = "\n" - + - "Include " + this.dir + File.separator + MOD_JK_TOMCAT_FILE + "\n"; - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing Configuration in '" + fileHttpd + "'"); - addTask(echo); - } - - /** - * Generation of the config files - */ - public void flushFiles() { - flushWorkerFile(); - flushTomcatFile(); -// flushHttpdFile(); - } - - /** - * Set sticky Session - * @param stickySession to set - **/ - public void setStickySession(final boolean stickySession) { - this.stickySession = stickySession; - } - - /** - * Define an inner class for workers - * @author Benoit Pelletier - */ - public class Worker { - - /** - * port number - */ - private String portNumber = null; - - /** - * load balancing factor - */ - private String lbFactor = null; - - /** - * name - */ - private String name = null; - - /** - * get port number - * @return port number - */ - public String getPortNumber() { - return portNumber; - } - - /** - * set port number - * @param portNumber port number - */ - public void setPortNumber(final String portNumber) { - this.portNumber = portNumber; - } - - /** - * get load balancing factor - * @return load balancing factor - */ - public String getLbFactor() { - return lbFactor; - } - - /** - * set load balancing factor - * @param lbFactor load balancing factor - */ - public void setLbFactor(final String lbFactor) { - this.lbFactor = lbFactor; - } - - /** - * get name - * @return name - */ - public String getName() { - return name; - } - - /** - * set name - * @param name name to set - */ - public void setName(final String name) { - this.name = name; - } - } - - - /** - * Set the mod_jk directory - * @param dir directory - */ - public void setDir(final String dir) { - this.dir = dir; - } - - /** - * Set the root directory - * @param dir directory - */ - public void setRootDir(final String dir) { - this.rootDir = dir; - } - /** - * Add configuration dir for a web instance. - * @param webConfDir the configuration dir to add. - */ - // Disabling, wondering the use case of JONAS-67 - //public void addWorkerFile(final String webConfDir) { - // JTouch touchWorker = new JTouch(); - // File fileWorker = new File(webConfDir + File.separator + MOD_JK_WORKER_FILE); - // touchWorker.setDestDir(fileWorker); - // addTask(touchWorker); - // workerFiles.add(fileWorker); - //} -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Script.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Script.java deleted file mode 100644 index 9f432f51ac..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/Script.java +++ /dev/null @@ -1,414 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.JEcho; -import org.ow2.jonas.ant.jonasbase.JMkdir; -import org.ow2.jonas.ant.jonasbase.JTouch; - - -//import org.apache.tools.ant.taskdefs.Chmod; - -/** - * Allow to launch the cluster nodes - * @author Benoit Pelletier - */ -public class Script extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[Script] "; - - /** - * Name of the unix script file - */ - private static final String UNIX_SCRIPT_FILE = "jcl4sc"; - - /** - * Name of the unix script file - */ - private static final String WIN_SCRIPT_FILE = "jcl4sc.bat"; - - /** - * Script file Unix - */ - private File unixScriptFile = null; - - /** - * Script file - */ - private File winScriptFile = null; - - - /** - * domain name - */ - private String domainName = null; - - /** - * node name prefix - */ - private String nodeNamePrefix = null; - - /** - * script dir - */ - private String scriptDir = null; - - /** - * nodes nb - */ - private int instNb = 0; - - /** - * cluster daemon directory - */ - private String cdDir = null; - - /** - * db directory - */ - private String dbDir = null; - - /** - * db instance name - */ - private String dbName = null; - - /** - * master directory - */ - private String masterDir = null; - - /** - * master instance name - */ - private String masterName = null; - - - /** - * Default constructor - */ - public Script() { - super(); - } - - /** - * Creation of the script files - * @param destDir destination directory - */ - public void createFiles(final String destDir) { - JMkdir mkdir = new JMkdir(); - mkdir.setDestDir(new File(destDir)); - addTask(mkdir); - - // depending the os, the unix or the windows script is created - if (isOsWindows()) { - JTouch touchWin = new JTouch(); - winScriptFile = new File(destDir + "/" + WIN_SCRIPT_FILE); - touchWin.setDestDir(winScriptFile); - addTask(touchWin); - - } else { - JTouch touchUnix = new JTouch(); - unixScriptFile = new File(destDir + "/" + UNIX_SCRIPT_FILE); - touchUnix.setDestDir(unixScriptFile); - addTask(touchUnix); - - } - } - - /** - * creation of the unix file - */ - private void flushUnixScriptFile() { - JEcho echo = new JEcho(); - echo.setDestDir(unixScriptFile); - - String contentFile = "\n" - + - "# -----------------------------------------------------------" + "\n" - + - "# start/stop/kill the cluster nodes" + "\n" - + - "# Note : " + "\n" - + - "# - JONAS_ROOT has to be set" + "\n" - + - "# - XWINDOWS can be set to 'yes' for starting the process in xterm" + "\n" - + - "# -----------------------------------------------------------" + "\n" - + - "\n" - + - "JCL_NUMBER_OF_NODES=" - + - this.instNb + "\n" - + - "\n" - + - "JCL_CLUSTER_DAEMON_DIR=" - + - this.cdDir + "\n" - + - "JCL_BASE_PREFIX=" - + - this.getDestDirPrefix() + "\n" - + - "\n" - + - "JCL_NODE_NAME_PREFIX=" - + - this.nodeNamePrefix + "\n" - + - "JCL_DOMAIN_NAME=" - + - this.domainName + "\n" - + - "\n" - + - "JCL_DB_DIR=" - + - this.dbDir + "\n" - + - "JCL_DB_NAME=" - + - this.dbName + "\n" - + - "\n" - + - "JCL_MASTER_DIR=" - + - this.masterDir + "\n" - + - "JCL_MASTER_NAME=" - + - this.masterName + "\n" - + - "\n" - + - "export JCL_MASTER_NAME JCL_MASTER_DIR JCL_DB_NAME JCL_DB_DIR JCL_DOMAIN_NAME JCL_NODE_NAME_PREFIX" - + - "\n" - + - "export JCL_NUMBER_OF_NODES JCL_CLUSTER_DAEMON_DIR JCL_BASE_PREFIX" - + - "\n" - + - "$JONAS_ROOT/bin/jcl.sh $*" + "\n"; - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing Configuration in '" + unixScriptFile + "'"); - addTask(echo); - } - - - /** - * creation of the windows file - */ - private void flushWinScriptFile() { - JEcho echo = new JEcho(); - echo.setDestDir(winScriptFile); - - String contentFile = "\n" - + - "@echo off" + "\n" - + - ":: -----------------------" + "\n" - + - ":: start/stop the cluster nodes" + "\n" - + - ":: Note : JONAS_ROOT has to be set" + "\n" - + - ":: -----------------------" + "\n" - + - "set JCL_NUMBER_OF_NODES=" - + - this.instNb + "\n" - + - "set JCL_BASE_PREFIX=" - + - this.getDestDirPrefix().replace('/', '\\') + "\n" - + - "set JCL_DOMAIN_NAME=" - + - this.domainName + "\n" - + - "set JCL_NODE_NAME_PREFIX=" - + - this.nodeNamePrefix + "\n" - + - "set JCL_CLUSTER_DAEMON_DIR=" - + - this.cdDir + "\n" - + - "set JCL_DB_DIR=" - + - this.dbDir + "\n" - + - "set JCL_DB_NAME=" - + - this.dbName + "\n" - + - "set JCL_MASTER_DIR=" - + - this.masterDir + "\n" - + - "set JCL_MASTER_NAME=" - + - this.masterName + "\n" - + - "%JONAS_ROOT%\\bin\\jcl.bat %*" + "\n"; - - - echo.setMessage(contentFile); - echo.setLogInfo(INFO + "Flushing Configuration in '" + winScriptFile + "'"); - addTask(echo); - } - - /** - * Generation of the config files - */ - public void flushFiles() { - if (isOsWindows()) { - flushWinScriptFile(); - } else { - flushUnixScriptFile(); - } - } - - /** - * Set domainName - * @param domainName domain name - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * Set nodeNamePrefix - * @param nodeNamePrefix node name prefix - */ - public void setNodeNamePrefix(final String nodeNamePrefix) { - this.nodeNamePrefix = nodeNamePrefix; - } - - - /** - * Set script directory - * @param scriptDir Script directory - */ - public void setScriptDir(final String scriptDir) { - this.scriptDir = scriptDir; - } - - /** - * Set nodes number - * @param instNb nodes nb - */ - public void setInstNb(final int instNb) { - this.instNb = instNb; - } - - /** - * cluster daemon directory - * @param cdDir directory - */ - public void setCdDir(final String cdDir) { - this.cdDir = cdDir; - if (File.separatorChar == '/') { - this.cdDir = this.cdDir.replace('\\', File.separatorChar); - } else { - this.cdDir = this.cdDir.replace('/', File.separatorChar); - } - } - - /** - * db instance directory - * @param dbDir directory - */ - public void setDbDir(final String dbDir) { - this.dbDir = dbDir; - if (File.separatorChar == '/') { - this.dbDir = this.dbDir.replace('\\', File.separatorChar); - } else { - this.dbDir = this.dbDir.replace('/', File.separatorChar); - } - } - - /** - * db instance name - * @param dbName name - */ - public void setDbName(final String dbName) { - this.dbName = dbName; - } - - /** - * master instance directory - * @param dbDir directory - */ - public void setMasterDir(final String masterDir) { - this.masterDir = masterDir; - if (File.separatorChar == '/') { - this.masterDir = this.masterDir.replace('\\', File.separatorChar); - } else { - this.masterDir = this.masterDir.replace('/', File.separatorChar); - } - } - - /** - * master instance name - * @param dbName name - */ - public void setMasterName(final String masterName) { - this.masterName = masterName; - } - - - /** - * Generates the script tasks - */ - @Override - public void generatesTasks() { - - // creation of the Script tasks - createFiles(scriptDir); - flushFiles(); - } - - /** - * @return true if the os.name starts with "Windows" - */ - public static boolean isOsWindows() { - String osName = System.getProperty("os.name", ""); - return (osName.startsWith("Windows")); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ServicesCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ServicesCluster.java deleted file mode 100644 index 8c0a35a253..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/ServicesCluster.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; - -import org.ow2.jonas.ant.jonasbase.Services; - -/** - * Define ServicesCluster task - * @author Benoit Pelletier - */ -public class ServicesCluster extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[ServicesCluster] "; - /** - * Partial list of the JOnAS's services to be used whether the chosen - * architecture is separated web/ejb - */ - private String partialList = null; - - /** - * Partial list of the JOnAS's services to be used whether the chosen - * architecture is both web/ejb - */ - private String fullList = null; - - /** - * Default constructor - */ - public ServicesCluster() { - super(); - } - - /** - * Set the partial list of the JOnAS's services - * @param partialList partial list of JOnAS services - */ - public void setPartialList(String partialList) { - this.partialList = partialList; - - } - - /** - * Set the full list of the JOnAS's services - * @param fullList full list of JOnAS services - */ - public void setFullList(String fullList) { - this.fullList = fullList; - - } - - /** - * Generates the Services tasks for each JOnAS's instances - */ - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - log(INFO + "tasks generation for " + destDir); - - // creation of the Services task - Services services = new Services(); - - if (this.getArch().compareTo(ARCH_BOTH_WEB_EJB) == 0) { - services.setNames(fullList); - } else { - services.setNames(partialList); - } - services.setDestDir(new File(destDir)); - - addTask(services); - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebContainerCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebContainerCluster.java deleted file mode 100644 index 7cb6f8102e..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebContainerCluster.java +++ /dev/null @@ -1,396 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.io.File; -import java.util.Iterator; - -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.WebContainer; -import org.ow2.jonas.ant.jonasbase.web.Ajp; -import org.ow2.jonas.ant.jonasbase.web.Cluster; -import org.ow2.jonas.ant.jonasbase.web.Http; -import org.ow2.jonas.ant.jonasbase.web.Tomcat; - -/** - * Define WebContainerCluster task. - * @author Benoit Pelletier - */ -public class WebContainerCluster extends ClusterTasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[WebContainerCluster] "; - - /** - * Name of the container web : tomcat/jetty. - */ - private String name = null; - - /** - * HTTP ports range. - */ - private String[] httpPortRange = null; - - /** - * AJP ports range. - */ - private String[] ajpPortRange = null; - - /** - * Sticky Session : true/false. - */ - private boolean stickySession = false; - - /** - * mod_jk enabled : true/false. - */ - private boolean modjkEnabled = false; - - /** - * mod_jk LB factor ports range. - */ - private String[] modJkLbFactorRange = null; - - /** - * director enabled : true/false. - */ - private boolean directorEnabled = false; - - /** - * Director ports range. - */ - private String[] directorPortRange = null; - - /** - * director LB factor ports range. - */ - private String[] directorLbFactorRange = null; - - /** - * multicast addr. - */ - private String clusterMcastAddr = null; - - /** - * multicast port. - */ - private String clusterMcastPort = null; - - /** - * Cluster Listen Port Range. - */ - private String[] clusterListenPortRange = null; - - /** - * Cluster name. - */ - private String clusterName = null; - - /** - * mod_jk directory. - */ - private String modjkDir = null; - - /** - * mod_jk root directory. - */ - private String modjkRootDir = null; - - /** - * director directory. - */ - private String directorDir = null; - - /** - * director directory. - */ - private String ondemandRedirectPort = null; - - /** - * director directory. - */ - private boolean ondemandEnabled = true; - - /** - * Default constructor. - */ - public WebContainerCluster() { - super(); - } - - /** - * Set director directory. - * @param directorDir directory - */ - public void setDirectorDir(final String directorDir) { - this.directorDir = directorDir; - } - - /** - * Set mod_jk enabled. - * @param enabled true/false - */ - public void setModjkEnabled(final boolean enabled) { - this.modjkEnabled = enabled; - } - - /** - * Set director enabled. - * @param enabled true/false - */ - public void setDirectorEnabled(final boolean enabled) { - this.directorEnabled = enabled; - } - - /** - * Set mod_jk directory. - * @param modjkDir directory - */ - public void setModjkDir(final String modjkDir) { - this.modjkDir = modjkDir; - } - - /** - * Set ondemand enabled. - * @param enabled true/false - */ - public void setOndemandEnabled(final boolean enabled) { - this.ondemandEnabled = enabled; - } - - /** - * Set mod_jk directory. - * @param modjkDir directory - */ - public void setOndemandRedirectPort(final String redirectport) { - this.ondemandRedirectPort = redirectport; - } - - /** - * Set mod_jk root directory. - * @param modjkRootDir directory - */ - public void setModjkRootDir(final String modjkRootDir) { - this.modjkRootDir = modjkRootDir; - } - /** - * Set clusterMcastAddr. - * @param clusterMcastAddr multicast address to set - */ - public void setClusterMcastAddr(final String clusterMcastAddr) { - this.clusterMcastAddr = clusterMcastAddr; - } - - /** - * Set clusterMcastPort. - * @param clusterMcastPort multicast port to set - */ - public void setClusterMcastPort(final String clusterMcastPort) { - this.clusterMcastPort = clusterMcastPort; - } - - /** - * Set Cluster listen ports range. - * @param clusterListenPortRange Cluster Listen ports range - */ - public void setClusterListenPortRange(final String clusterListenPortRange) { - this.clusterListenPortRange = clusterListenPortRange.split(","); - - } - - /** - * Set Cluster name. - * @param clusterName cluster name - */ - public void setClusterName(final String clusterName) { - this.clusterName = clusterName; - - } - - /** - * Set HTTP ports range. - * @param httpPortRange HTTP ports range - */ - public void setHttpPortRange(final String httpPortRange) { - this.httpPortRange = httpPortRange.split(","); - - } - - /** - * Set AJP ports range. - * @param ajpPortRange AJP ports range - */ - public void setAjpPortRange(final String ajpPortRange) { - this.ajpPortRange = ajpPortRange.split(","); - - } - - /** - * Set mod_jk lb factor range. - * @param modJkLbFactorRange load balancing factor range - */ - public void setModJkLbFactorRange(final String modJkLbFactorRange) { - this.modJkLbFactorRange = modJkLbFactorRange.split(","); - - } - - /** - * Set Director ports range. - * @param directorPortRange Director ports range - */ - public void setDirectorPortRange(final String directorPortRange) { - this.directorPortRange = directorPortRange.split(","); - - } - - /** - * Set director lb factor range. - * @param directorLbFactorRange load balancing factor range - */ - public void setDirectorLbFactorRange(final String directorLbFactorRange) { - this.directorLbFactorRange = directorLbFactorRange.split(","); - - } - - /** - * Set the name of the web container : jetty or tomcat. - * @param containerName jetty or tomcat - */ - public void setName(final String containerName) { - - this.name = containerName; - } - - /** - * Set the sticky session. - * @param stickySession true/false - */ - public void setStickySession(final boolean stickySession) { - - this.stickySession = stickySession; - } - - /** - * Generates the WebContainer tasks for each JOnAS's instances. - */ - @Override - public void generatesTasks() { - - int portInd = 0; - - ModJk modJk = new ModJk(); - Director director = new Director(); - - // creation of the mod_jk file - modJk.setRootDir(modjkRootDir); - modJk.setDir(modjkDir); - modJk.createFiles(); - modJk.setStickySession(stickySession); - - // creation of the Director file - director.createFile(directorDir); - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - log(INFO + "tasks generation for " + destDir); - - // creation of the WebContainer tasks - WebContainer webContainer = new WebContainer(); - - // FIXME still needed as we expect Tomcat only usage ? - webContainer.setName(name); - - Tomcat tomcat = new Tomcat(); - Http http = new Http(); - http.setPort(httpPortRange[portInd]); - tomcat.addConfiguredHttp(http); - - if (directorEnabled) { - org.ow2.jonas.ant.jonasbase.web.Director d = new org.ow2.jonas.ant.jonasbase.web.Director(); - d.setPort(directorPortRange[portInd]); - tomcat.addConfiguredDirector(d); - } - if (modjkEnabled) { - Ajp ajp = new Ajp(); - ajp.setPort(ajpPortRange[portInd]); - tomcat.addConfiguredAjp(ajp); - } - - Cluster cluster = new Cluster(); - cluster.setListenPort(clusterListenPortRange[portInd]); - cluster.setMcastAddr(clusterMcastAddr); - cluster.setMcastPort(clusterMcastPort); - cluster.setName(clusterName); - tomcat.addConfiguredCluster(cluster); - - // mod_jk - if (modjkEnabled) { - String workerName = modJk.addWorker(ajpPortRange[portInd], modJkLbFactorRange[portInd]); - tomcat.setJvmRoute(workerName); - } - - webContainer.addConfiguredTomcat(tomcat); - - // director - if (directorEnabled) { - director.addAppServer(directorPortRange[portInd], directorLbFactorRange[portInd]); - } - - if (ondemandEnabled) { - // set the redirect port - webContainer.setOndemandredirectPort(ondemandRedirectPort); - } - webContainer.setOndemandenabled(Boolean.toString(ondemandEnabled)); - - // set destDir for each webContainer task - for (Iterator it = webContainer.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(destDir)); - // Disabling, wondering the use case of JONAS-67 - //modJk.addWorkerFile(destDir + File.separator + "conf"); - } - - addTasks(webContainer); - - portInd++; - - } - - if (modjkEnabled) { - modJk.flushFiles(); - addTasks(modJk); - } - - if (directorEnabled) { - director.flushFile(); - addTasks(director); - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebLevel.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebLevel.java deleted file mode 100644 index ff97a067a3..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WebLevel.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - -import java.util.Iterator; - -/** - * Defines Weblevel task - * @author Benoit Pelletier - */ -public class WebLevel extends ClusterTasks { - - /** - * Info for the logger - */ - private static final String INFO = "[WebLevel] "; - - /** - * Default constructor - */ - public WebLevel() { - super(); - } - - /** - * Add tasks for Services configuration - * @param servicesCluster added task - */ - public void addConfiguredServicesCluster(final ServicesCluster servicesCluster) { - servicesCluster.setRootTask(getRootTask()); - log(INFO + "ServicesCluster added"); - servicesCluster.setLogInfo("ServicesCluster"); - addClusterTask(servicesCluster); - } - - /** - * Add tasks for WebContainer configuration - * @param webContainerCluster added task - */ - public void addConfiguredWebContainerCluster(final WebContainerCluster webContainerCluster) { - webContainerCluster.setRootTask(getRootTask()); - log(INFO + "WebContainerCluster added"); - webContainerCluster.setLogInfo("WebContainerCluster"); - addClusterTask(webContainerCluster); - } - - /** - * Add tasks for LibCluster configuration - * @param libCluster added task - */ - public void addConfiguredLibCluster(final LibCluster libCluster) { - libCluster.setRootTask(getRootTask()); - log(INFO + "LibCluster added"); - libCluster.setLogInfo("LibCluster"); - addClusterTask(libCluster); - } - /** - * Add tasks for DeploymentCluster configuration - * @param deploymentCluster added task - */ - public void addConfiguredDeploymentCluster(final DeploymentCluster deploymentCluster) { - deploymentCluster.setRootTask(getRootTask()); - log(INFO + "DeploymentCluster added"); - deploymentCluster.setLogInfo("DeploymentCluster"); - addClusterTask(deploymentCluster); - } - - /** - * Generates tasks for common - */ - @Override - public void generatesTasks() { - - for (Iterator it = this.getClusterTasks().iterator(); it.hasNext();) { - ClusterTasks ct = (ClusterTasks) it.next(); - - log(INFO + "tasks generation for " + ct.getLogInfo()); - - ct.setArch(getArch()); - ct.setDestDirPrefix(getDestDirPrefix()); - ct.setDestDirSuffixIndFirst(getDestDirSuffixIndFirst()); - ct.setDestDirSuffixIndLast(getDestDirSuffixIndLast()); - ct.generatesTasks(); - addTasks(ct); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WsdlPublishCluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WsdlPublishCluster.java deleted file mode 100644 index 36c88ada90..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/cluster/WsdlPublishCluster.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.cluster; - - -import java.util.ArrayList; -import java.util.List; - -import org.ow2.jonas.ant.jonasbase.wsdl.File; -import org.ow2.jonas.ant.jonasbase.wsdl.Uddi; -import org.ow2.jonas.ant.jonasbase.wsdl.WsdlPublish; - - -/** - * Define WsdlPublishCluster task. - * @author Benoit Pelletier - */ -public class WsdlPublishCluster extends ClusterTasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[WsdlPublishCluster] "; - - /** - * List of files (WSDL publish). - */ - private List files = new ArrayList(); - - /** - * List of uddi (WSDL publish). - */ - private List uddis = new ArrayList(); - - /** - * Add file (wsdl publish). - * @param file properties file - */ - public void addConfiguredFile(final File file) { - files.add(file); - } - - /** - * Add UDDI (wsdl publish). - * @param uddi properties file - */ - public void addConfiguredUddi(final Uddi uddi) { - uddis.add(uddi); - } - /** - * Generates the WsdlPublish tasks for each JOnAS's instances. - */ - public void generatesTasks() { - - for (int i = getDestDirSuffixIndFirst(); i <= getDestDirSuffixIndLast(); i++) { - - String destDir = getDestDir(getDestDirPrefix(), i); - - log(INFO + "tasks generation for " + destDir); - - // creation of the Mail task - WsdlPublish wsdl = new WsdlPublish(); - - wsdl.setFiles(files); - wsdl.setUddis(uddis); - - wsdl.setDestDir(new java.io.File(destDir)); - - addTask(wsdl); - - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Archives.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Archives.java deleted file mode 100644 index d82689d2ea..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Archives.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -/** - * Allow to copy files to JONAS_BASE/xxxx/(autoload). - * @author Florent Benoit - */ -public class Archives extends JCopy implements BaseTaskItf { - - /** - * Folder to copy files (apps|webapps|rars|...). - */ - private String folderName = null; - - /** - * Default constructor. - * @param header text for the header displayed for each line - * @param folderName text to display - */ - public Archives(final String header, final String folderName) { - super(); - this.folderName = folderName; - setLogInfo(header + "Copying " + folderName + "..."); - } - - /** - * Override method to copy files to - * JONAS_BASE/deploy. - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - File jBaseLibExtDir = new File(destDir.getPath() + File.separator + "deploy"); - super.setDestDir(jBaseLibExtDir); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/BaseTaskItf.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/BaseTaskItf.java deleted file mode 100644 index 132152e298..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/BaseTaskItf.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -/** - * @author Florent Benoit - */ -public interface BaseTaskItf { - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - void setConfigurationFile(String configurationFile); - - /** - * @param destDir The destDir to set. - */ - void setDestDir(File destDir); - - /** - * @param jonasRoot The jonasRoot directory - */ - void setJonasRoot(File jonasRoot); - - /** - * Execute the task. - */ - void execute(); - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - String getLogInfo(); - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - void setLogInfo(String logInfo); -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Carol.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Carol.java deleted file mode 100644 index 0cc4134133..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Carol.java +++ /dev/null @@ -1,353 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.ow2.jonas.ant.JOnASBaseTask; - - -/** - * Allow to configure the properties in carol.properties file. - * - * carol.protocols - * rmi.local.registry - * rmi.local.call - * carol.start.cmi - * cmi.server.provider.urls - * @author Florent Benoit - * @author coqp - * - */ - -public class Carol extends JTask implements BaseTaskItf { - - - /** - * Info for the logger. - */ - private static final String INFO = "[Carol] "; - - /** - * Property separators (4 spaces). - */ - public static final String SEPARATOR = "="; - - - - - /** - * Default Host. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Default protocol header. - */ - private static final String PROTOCOL_HEADER = "://"; - - /** - * Default jrmp port number. - */ - private static final String DEFAULT_JRMP_PORT = "1099"; - - /** - * Default iiop port number. - */ - private static final String DEFAULT_IIOP_PORT = "2001"; - - /** - * Default irmi port number. - */ - private static final String DEFAULT_IRMI_PORT = "1098"; - - /** - * Protocols property. - */ - private static final String PROTOCOLS_PROPERTY = "carol.protocols"; - - /** - * Carol JRMP property. - */ - private static final String JRMP_PROPERTY = "carol.jrmp.url"; - - /** - * Carol IIOP property. - */ - private static final String IIOP_PROPERTY = "carol.iiop.url"; - - /** - * Carol IRMI property. - */ - private static final String IRMI_PROPERTY = "carol.irmi.url"; - - /** - * Optimization. - */ - private static final String OPTIMIZATION_PROPERTY = "carol.jvm.rmi.local.call"; - - - - /** - * Local Registry. - */ - private static final String LOCALREGISTRY_PROPERTY = "carol.jvm.rmi.local.registry"; - - /** - * Start CMI. - */ - public static final String START_CMI_PROPERTY = "carol.start.cmi"; - - - /** - * Sequence of associations between a protocol and a list of provider URLs. - */ - public static final String SEQ_PROTOCOLS_TO_PROVIDER_URLS = "cmi.server.provider.urls"; - - - /** - * List of provider URLs. - */ - - private String serverproviderurls = null; - - /** - * connection url for jrmp. - */ - - private String jrmpconnectionurl = "rmi"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_JRMP_PORT; - - /** - * connection url for iiop. - */ - private String iiopconnectionurl = "iiop"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_IIOP_PORT; - - /** - * connection url for irmi. - */ - private String irmiconnectionurl = "rmi"+PROTOCOL_HEADER+DEFAULT_HOST+":"+DEFAULT_IRMI_PORT; - - /** - * for starting cmi automatically. - */ - private Boolean startcmi = false; - - - /** - * local call with jrmp optimisation. - */ - private Boolean rmilocalcall = false; - - - /** - * local registry optimisation. - */ - private Boolean rmilocalregistry = true; - - /** - * jonas rmi activation (iiop, irmi, jrmp). - */ - private String carolprotocols = null; - - /** - * host. - */ - private String host = DEFAULT_HOST; - - /** - * Default constructor. - */ - public Carol() { - super(); - } - - - - /** - * Set the connection url for JRMP. - * - * @param portNumber - * port for JRMP - */ - public void setJrmpPort(final String portNumber) { - jrmpconnectionurl = "rmi" + PROTOCOL_HEADER + host + ":" + portNumber; - - } - - - - /** - * Set the connection url for IIOP. - * - * @param portNumber - * port for IIOP - */ - public void setIiopPort(final String portNumber) { - iiopconnectionurl = "iiop" + PROTOCOL_HEADER + host + ":" + portNumber; - - } - - /** - * Set the connection url for IRMI. - * - * @param portNumber - * port for IRMI - */ - public void setIrmiPort(final String portNumber) { - irmiconnectionurl = "rmi" + PROTOCOL_HEADER + host + ":" + portNumber; - } - - /** - * Set the port for all protocols. - * - * @param portNumber - * port for all protocols - */ - public void setDefaultPort(final String portNumber) { - setJrmpPort(portNumber); - setIiopPort(portNumber); - setIrmiPort(portNumber); - } - - /** - * Set the initial protocols when JOnAS start. - * - * @param protocols - * comma separated list of protocols - */ - public void setProtocols(final String protocols) { - this.carolprotocols = protocols; - } - - /** - * Set the host. - * - * @param host hostname - * - */ - public void setHost(final String host) { - this.host = host; - } - - /** - * Enable or disable optimization. - * - * @param enabled - * (true or false) - * the default value is currently false in carol.properties - */ - public void setJrmpOptimization(final boolean enabled) { - this.rmilocalcall = enabled; - } - - /** - * Enable or disable local registry. - * - * @param enabled - * (true or false) - * the default value is currently true in carol.properties - */ - public void setLocalRegistry(final boolean enabled) { - this.rmilocalregistry = enabled; - } - - /** - * Enable or disable the use of CMI. - * @param enabled (true or false) - * the default value is currently false in carol.properties - */ - public void setCmiStarted(final boolean enabled) { - this.startcmi = enabled; - } - - /** - * Set the sequence of protocols and provider urls. - * @param seqProtocol2ProviderURLs a sequence of protocols and provider urls - */ - public void setClusterViewProviderUrls(final String seqProtocol2ProviderURLs) { - this.serverproviderurls = seqProtocol2ProviderURLs; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - PROTOCOLS_PROPERTY, - carolprotocols, - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - OPTIMIZATION_PROPERTY, - rmilocalcall.toString(), - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - LOCALREGISTRY_PROPERTY, - rmilocalregistry.toString(), - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - START_CMI_PROPERTY, - startcmi.toString(), - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - JRMP_PROPERTY , - jrmpconnectionurl , - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - IIOP_PROPERTY , - iiopconnectionurl , - SEPARATOR, - false); // replace - changeValueForKey(INFO, - jBaseConf, - JOnASBaseTask.CAROL_CONF_FILE, - IRMI_PROPERTY , - irmiconnectionurl , - SEPARATOR, - false); // replace - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Cmi.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Cmi.java deleted file mode 100644 index 32139feac9..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Cmi.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import org.ow2.jonas.ant.JOnASBaseTask; - -/** - * Defines properties for cmi service. - * @author Loris Bouzonnet - */ -public class Cmi extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[Cmi] "; - - /** - * CMI mcast address attribute. - */ - private static final String CMI_MCASTADDR_ATTR = "mcast_addr"; - - /** - * CMI mcast port attribute. - */ - private static final String CMI_MCASTPORT_ATTR = "mcast_port"; - - /** - * Default cmi mcast address. - */ - private static final String DEFAULT_CMI_MCASTADDR = "224.0.0.35"; - - /** - * Default cmi mcast port. - */ - private static final String DEFAULT_CMI_MCASTPORT = "35467"; - - /** - * CMI replication enabled attribute. - */ - private static final String REPLICATION_ENABLED_ATTR = "cmi.server.start.replication"; - - /** - * Default constructor. - */ - public Cmi() { - super(); - } - - /** - * Set mcastAddr for CMI. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace the multicast addr - String token = CMI_MCASTADDR_ATTR + "=" + "\"" + DEFAULT_CMI_MCASTADDR - + "\""; - String value = CMI_MCASTADDR_ATTR + "=" + "\"" + mcastAddr + "\""; - JReplace mcastAddrReplace = new JReplace(); - mcastAddrReplace - .setLogInfo(INFO + "Setting mcastaddr for cmi"); - mcastAddrReplace - .setConfigurationFile(JOnASBaseTask.JGROUPS_CMI_CONF_FILE); - mcastAddrReplace.setToken(token); - mcastAddrReplace.setValue(value); - addTask(mcastAddrReplace); - } - - /** - * Set mcastPort for CMI. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace the multicast port - String token = CMI_MCASTPORT_ATTR + "=" + "\"" + DEFAULT_CMI_MCASTPORT - + "\""; - String value = CMI_MCASTPORT_ATTR + "=" + "\"" + mcastPort + "\""; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace - .setLogInfo(INFO + "Setting mcastport for cmi"); - mcastPortReplace - .setConfigurationFile(JOnASBaseTask.JGROUPS_CMI_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - - } - - /** - * Set if the replication is enabled. - * @param replicationEnabled true if the replication is enabled - */ - public void setReplicationEnabled(final boolean replicationEnabled) { - // Token to replace the MBean name - String token = REPLICATION_ENABLED_ATTR + "=false"; - String value = REPLICATION_ENABLED_ATTR + "=true"; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace - .setLogInfo(INFO + "Setting if replication is enabled for cmi"); - mcastPortReplace - .setConfigurationFile(JOnASBaseTask.CAROL_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Db.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Db.java deleted file mode 100644 index 62fd110373..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Db.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.ow2.jonas.ant.JOnASBaseTask; - -import org.apache.tools.ant.BuildException; - - -/** - * Allow to configure the DB service. - * @author Florent Benoit - */ -public class Db extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[DB] "; - - /** - * Name of the property for changing the port. - */ - private static final String PORT_PROPERTY = "jonas.service.db.port"; - - /** - * Port number. - */ - private String portNumber = null; - - /** - * Default constructor. - */ - public Db() { - super(); - } - - /** - * Set the port number for the Db service. - * @param portNumber the port for the Db service - */ - public void setPort(final String portNumber) { - this.portNumber = portNumber; - } - - - /** - * Check the properties. - */ - private void checkProperties() { - if (portNumber == null) { - throw new BuildException(INFO + "Property 'portNumber' is missing."); - } - } - - /** - * Execute this task. - */ - public void execute() { - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - PORT_PROPERTY, portNumber, false); - - - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Dbm.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Dbm.java deleted file mode 100644 index aacfa574c0..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Dbm.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.ow2.jonas.ant.JOnASBaseTask; - -import org.apache.tools.ant.BuildException; - -/** - * Allow to configure the DBM service. - * @author Philippe Coq - */ -public class Dbm extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[DBM] "; - - /** - * Name of the property for changing datasource. - */ - private static final String DATASOURCES_PROPERTY = "jonas.service.dbm.datasources"; - - /** - * dataSource. - */ - private String dataSources = null; - - /** - * Default constructor. - */ - public Dbm() { - super(); - } - - /** - * Set the dataSources for the Dbm service. - * @param dataSources the dataSources for the Dbm service - */ - public void setdataSources(final String dataSources) { - this.dataSources = dataSources; - } - - - /** - * Check the properties. - */ - private void checkProperties() { - if (dataSources == null) { - throw new BuildException(INFO + "Property 'dataSource ' is missing."); - } - } - - /** - * Execute this task. - */ - public void execute() { - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, - DATASOURCES_PROPERTY, dataSources, false); - - - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableSelector.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableSelector.java deleted file mode 100644 index 54843c587d..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableSelector.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.util.List; - -import org.apache.tools.ant.types.selectors.FilenameSelector; -/** - * Filter deployables to be copied or excluded. - * @author eyindanga. - * - */ -public class DeployableSelector extends FilenameSelector { - /** - * - */ - private List deployableNames; - /** - * Default constructor. - */ - public DeployableSelector() { - } - - /** - * Default constructor. - */ - public DeployableSelector(final List deployableNames) { - this.deployableNames = deployableNames; - } - @Override - public boolean isSelected(final File basedir, final String filename, final File file) { - return deployableNames.contains(filename); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableTask.java deleted file mode 100644 index deeb30fb37..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeployableTask.java +++ /dev/null @@ -1,270 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.types.FileSet; -import org.ow2.jonas.ant.JOnASAntTool; - -/** - * Allow to create mail factory. - * @author Florent Benoit - */ -public class DeployableTask extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[Deployable] "; - - /** - * Deployables separator. - */ - private static final String DEPSEPARATOR_PROPERTY = ","; - - /** - * Exclude deployables. - */ - private static final String TARGET_EXCLUDE_PROPERTY = "exclude"; - - /** - * Copy deployables. - */ - private static final String TARGET_COPY_PROPERTY = "copy"; - /** - * Source directory. - */ - File f_srcDir; - - /** - * Destination directory. - */ - File f_dstDir; - /** - * Type of factory (Session or MimePartDataSource) - */ - private String extension = null; - - /** - * Name of the factory - */ - private String values = null; - - /** - * Directory to copy from. - */ - private String srcDir = null; - - /** - * Destination. - */ - private String dstDir = null; - - /** - * Target to execute. Possible values are : copy, exclude - */ - private String target = null; - - - public String getSrcDir() { - return srcDir; - } - - - - public void setSrcDir(final String sourceDir) { - this.srcDir = sourceDir; - } - - public String getExtension() { - return extension; - } - - public String getValues() { - return values; - } - - /** - * Sets the recipient (MimePartDataSource) - * @param mailTo recipient. - */ - public void setValues(final String values) { - this.values = values; - } - - - - /** - * Sets the extension - * @param extension of the deployables - */ - public void setExtension(final String extension) { - this.extension = extension; - } - /** - * Check the properties. - */ - private void checkParameters() { - try { - // Get dest. dir. - f_dstDir = new File(getDestDir().getPath(), this.dstDir); - if (extension == null || values == null || target == null) { - throw new BuildException(INFO + "Property 'extension' or 'values' is incorrect."); - } - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - // Get source dir. - f_srcDir = new File(this.srcDir); - if ( !f_srcDir.exists()) { - throw new BuildException(INFO + "Property 'sourceDir'is incorrect."); - } - }else if(!TARGET_EXCLUDE_PROPERTY.equalsIgnoreCase(target)){ - throw new BuildException(INFO + "Unsupported target '" + target - + "'. Possible values are :'" + TARGET_COPY_PROPERTY + ", " + TARGET_EXCLUDE_PROPERTY + "'"); - } - if ( !f_dstDir.exists()) { - throw new BuildException(INFO + "Property 'destDir'is incorrect."); - } - } catch (Exception e) { - throw new BuildException(INFO + "Properties are incorrect."); - } - } - /** - * Get the destination directory. - * @return destination directory. - */ - public String getDstDir() { - return dstDir; - } - - - /** - * Set the destination directory. - * @param destDir destination directory. - */ - public void setDstDir(final String destDir) { - this.dstDir = destDir; - } - - /** - * Get the target to be executed. - * @return the target - */ - public String getTarget() { - return target; - } - - - /** - * Set the target to be executed. - * @param target the target to be executed. - */ - public void setTarget(final String target) { - this.target = target; - } - - - - /** - * Execute this task. - */ - @Override - public void execute() { - - checkParameters(); - List deployables = new ArrayList(); - parseDeployableValues(values, deployables); - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - log(INFO + "Copying Type: " + extension + " values :" + deployables + " from " + f_srcDir.getAbsolutePath() - + " to " + f_dstDir.getAbsolutePath()); - Copy copyTask = new Copy(); - JOnASAntTool.configure(this, copyTask); - copyTask.setFailOnError(true); - copyTask.setTodir(f_dstDir); - FileSet fset = new FileSet(); - fset.setDir(f_srcDir); - DeployableSelector selector = new DeployableSelector(deployables); - fset.add(selector); - copyTask.addFileset(fset); - copyTask.execute(); - - }else { - log(INFO + "Excluding Type: " + extension - + " values :" + values + " from " + f_dstDir.getAbsolutePath() - + " deployables: " + deployables); - File toDelete = null; - for(String fileName : deployables) { - toDelete = new File(f_dstDir, fileName); - if (toDelete.exists()) { - //Delete The file... - log(INFO + "Deleting " + toDelete.getAbsolutePath()); - toDelete.delete(); - } - } - } - - - - } - - - /** - * get deployables from comma separated list. - * @param values2Parse the values to parse. - * @param deplList The list of deployables. - * */ - private void parseDeployableValues(final String values2Parse, final List deplList) { - if (values2Parse != null) { - int ind = values2Parse.indexOf(DEPSEPARATOR_PROPERTY); - String dep = null; - File depF = null; - if (ind != -1) { - dep = values2Parse.substring(0, ind) + "." + extension; - depF = new File(f_srcDir.getAbsolutePath(), dep); - if (depF.exists()) { - deplList.add(dep); - } - parseDeployableValues(values2Parse.substring(ind + 1, values2Parse.length()), deplList); - }else { - dep = values2Parse + "." + extension; - if (TARGET_COPY_PROPERTY.equalsIgnoreCase(target)) { - depF = new File(f_srcDir.getAbsolutePath(), dep); - }else { - depF = new File(f_dstDir.getAbsolutePath(), dep); - } - if (depF.exists()) { - deplList.add(dep); - } - } - - } - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeploymentPlans.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeploymentPlans.java deleted file mode 100644 index 581a9beeb4..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/DeploymentPlans.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -/** - * Allow to copy files to JONAS_BASE/rars/(autoload). - * @author Florent Benoit - */ -public class DeploymentPlans extends Archives implements BaseTaskItf { - - /** - * Default constructor. - */ - public DeploymentPlans() { - super("[Deployment plans] ", "deployment plans"); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Discovery.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Discovery.java deleted file mode 100644 index 4bb5262cb1..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Discovery.java +++ /dev/null @@ -1,525 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.IOException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.JOnASBaseTask; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - -/** - * Defines properties for Discovery service. - * @author Florent Benoit - */ -public class Discovery extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[Discovery] "; - - /** - * Default mcast addr. - */ - private static final String DEFAULT_DISCOVERY_MCASTADDR = "224.224.224.224"; - - /** - * Default mcast port. - */ - private static final String DEFAULT_DISCOVERY_MCASTPORT = "9080"; - - /** - * Default greeting port. - */ - private static final String DEFAULT_DISCOVERY_GREETING_PORT = "9899"; - - /** - * Default source port. - */ - private static final String DEFAULT_DISCOVERY_SOURCE_PORT = "9888"; - - /** - * Default ttl. - */ - private static final String DEFAULT_DISCOVERY_TTL = "1"; - - /** - * Discovery mcast addr property. - */ - private static final String DISCOVERY_MCASTADDR_PROPERTY = "jonas.service.discovery.multicast.address"; - - /** - * Discovery mcast port property. - */ - private static final String DISCOVERY_MCASTPORT_PROPERTY = "jonas.service.discovery.multicast.port"; - - /** - * Discovery master property. - */ - private static final String DISCOVERY_MASTER_PROPERTY = "jonas.service.discovery.master"; - - /** - * Discovery greeting port property. - */ - private static final String DISCOVERY_GREETING_PORT_PROPERTY = "jonas.service.discovery.greeting.port"; - - /** - * Discovery greeting timeout property. - */ - private static final String DISCOVERY_GREETING_TIMEOUT_PROPERTY = "jonas.service.discovery.greeting.timeout"; - - /** - * Discovery source port property. - */ - private static final String DISCOVERY_SOURCE_PORT_PROPERTY = "jonas.service.discovery.source.port"; - - /** - * Discovery ttl property. - */ - private static final String DISCOVERY_TTL_PROPERTY = "jonas.service.discovery.ttl"; - - /** - * domain management configuration file. - */ - private static final String DOMAIN_MNGT_CONF_FILE = "domain.xml"; - - /** - * Domain.xml structure. - */ - private Document domainDoc = null; - - /** - * Flag indicating if the domain document has been loaded. - */ - private boolean domainDocLoaded = false; - - /** - * directory JONAS_ROOT. - */ - private String jonasRoot = null; - - /** - * Default constructor. - */ - public Discovery() { - super(); - } - - /** - * Set the source port for the discovery service. - * @param portNumber port number (-1 means to disable to master node) - */ - public void setSourcePort(final String portNumber) { - - int pn = new Integer(portNumber).intValue(); - if (pn != -1) { - enableMaster(); - - // Token to replace - String token = DISCOVERY_SOURCE_PORT_PROPERTY + "=" + DEFAULT_DISCOVERY_SOURCE_PORT; - String value = DISCOVERY_SOURCE_PORT_PROPERTY + "=" + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting source port for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - } - } - - /** - * Enable greeting part of discovery service. - */ - private void enableMaster() { - // 1st Token to replace - String token1 = "#" + DISCOVERY_MASTER_PROPERTY; - String value1 = DISCOVERY_MASTER_PROPERTY; - JReplace propertyReplace1 = new JReplace(); - propertyReplace1.setLogInfo(INFO + "Enable master node for discovery"); - propertyReplace1.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace1.setToken(token1); - propertyReplace1.setValue(value1); - addTask(propertyReplace1); - - // 2nd Token to replace - String token2 = "#" + DISCOVERY_SOURCE_PORT_PROPERTY; - String value2 = DISCOVERY_SOURCE_PORT_PROPERTY; - JReplace propertyReplace2 = new JReplace(); - propertyReplace2.setLogInfo(INFO + "Enable greeting timeout for discovery"); - propertyReplace2.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace2.setToken(token2); - propertyReplace2.setValue(value2); - addTask(propertyReplace2); - } - - /** - * Enable greeting part of discovery service. - */ - private void enableGreeting() { - // 1st Token to replace - String token1 = "#" + DISCOVERY_GREETING_PORT_PROPERTY; - String value1 = DISCOVERY_GREETING_PORT_PROPERTY; - JReplace propertyReplace1 = new JReplace(); - propertyReplace1.setLogInfo(INFO + "Enable greeting port for discovery"); - propertyReplace1.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace1.setToken(token1); - propertyReplace1.setValue(value1); - addTask(propertyReplace1); - - // 2nd Token to replace - String token2 = "#" + DISCOVERY_GREETING_TIMEOUT_PROPERTY; - String value2 = DISCOVERY_GREETING_TIMEOUT_PROPERTY; - JReplace propertyReplace2 = new JReplace(); - propertyReplace2.setLogInfo(INFO + "Enable greeting timeout for discovery"); - propertyReplace2.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace2.setToken(token2); - propertyReplace2.setValue(value2); - addTask(propertyReplace2); - } - - /** - * Set the port for the discovery service. - * @param portNumber port number - */ - public void setGreetingPort(final String portNumber) { - enableGreeting(); - // Token to replace - String token = DISCOVERY_GREETING_PORT_PROPERTY + "=" + DEFAULT_DISCOVERY_GREETING_PORT; - String value = DISCOVERY_GREETING_PORT_PROPERTY + "=" + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting greeting port for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - } - - /** - * Set mcastAddr. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace - String token = DISCOVERY_MCASTADDR_PROPERTY + "=" + DEFAULT_DISCOVERY_MCASTADDR; - String value = DISCOVERY_MCASTADDR_PROPERTY + "=" + mcastAddr; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting mcastaddr for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - - } - - /** - * Set mcastPort. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace - String token = DISCOVERY_MCASTPORT_PROPERTY + "=" + DEFAULT_DISCOVERY_MCASTPORT; - String value = DISCOVERY_MCASTPORT_PROPERTY + "=" + mcastPort; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting mcastport for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - - } - - /** - * Set ttl. - * @param ttl paquet time to live - */ - public void setTtl(final String ttl) { - - // Token to replace - String token = DISCOVERY_TTL_PROPERTY + "=" + DEFAULT_DISCOVERY_TTL; - String value = DISCOVERY_TTL_PROPERTY + "=" + ttl; - JReplace propertyReplace = new JReplace(); - propertyReplace.setLogInfo(INFO + "Setting ttl for discovery"); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - addTask(propertyReplace); - - } - - /** - * load the domain.xml file in a DOM structure. - */ - private void loadDomainXmlDoc() { - - if (!domainDocLoaded) { - - // Load the orignal configuration file - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = null; - try { - factory.setNamespaceAware(true); - docBuilder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new BuildException(INFO + "Exception during loadDomainXmlDoc", e); - } - try { - domainDoc = docBuilder.parse(jonasRoot + File.separator + "templates" + File.separator + "conf" + File.separator + "conf" - + File.separator + DOMAIN_MNGT_CONF_FILE); - } catch (SAXException e) { - throw new BuildException(INFO + "Error during parsing of the file " + DOMAIN_MNGT_CONF_FILE, e); - } catch (IOException e) { - throw new BuildException(INFO + "Error during parsing of the file " + DOMAIN_MNGT_CONF_FILE, e); - } - - Element root = domainDoc.getDocumentElement(); - - // Remove the default servers list - NodeList serverNodeL = root.getElementsByTagName("server"); - for (int i = 0; i < serverNodeL.getLength(); i++) { - Node n = serverNodeL.item(i); - root.removeChild(n); - } - - // Prepare the serialization - XMLSerializerTask xmlSerTask = new XMLSerializerTask(); - xmlSerTask.setXmlDoc(domainDoc); - xmlSerTask.setXmlFileName(DOMAIN_MNGT_CONF_FILE); - - addTask(xmlSerTask); - - domainDocLoaded = true; - } - - } - - /** - * Set the domain description. - * @param domainDesc domain description - */ - public void setDomainDesc(final String domainDesc) { - - // Load the orignal configuration file - loadDomainXmlDoc(); - - Element root = domainDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("description"); - nameNodeL.item(0).getFirstChild().setNodeValue(domainDesc); - - } - - /** - * Add a cluster in the domain. - * @param clusterName cluster name - * @param clusterDesc cluster desc - * @param nodesName prefix of the nodes names within the cluster - * @param nodesNb number of nodes within the cluster - * @param protocol protocol - * @param portRange protocol port range - * @param cdName Cluster daemon's name - * @param cdUrl Cluster daemon's URL - */ - public void setDomainCluster(final String clusterName, final String clusterDesc, final String nodesName, final int nodesNb, - final String protocol, final String[] portRange, final String cdName, final String cdUrl) { - - // Load the orignal configuration file - loadDomainXmlDoc(); - - Element root = domainDoc.getDocumentElement(); - - Text c = domainDoc.createTextNode("\n\t"); - root.appendChild(c); - - // creation of the cluster-daemon node - Node dnc = domainDoc.createElement("cluster-daemon"); - root.appendChild(dnc); - - Text c1 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c1); - - // Element name - Node dncn = domainDoc.createElement("name"); - dnc.appendChild(dncn); - - Text dtncn = domainDoc.createTextNode(cdName); - dncn.appendChild(dtncn); - - Text c2 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c2); - - // Element description - Node dncd = domainDoc.createElement("description"); - dnc.appendChild(dncd); - - Text dtncd = domainDoc.createTextNode(""); - dncd.appendChild(dtncd); - - Text c3 = domainDoc.createTextNode("\n\t\t"); - dnc.appendChild(c3); - - // Element location - Node dncl = domainDoc.createElement("location"); - dnc.appendChild(dncl); - - Text c4 = domainDoc.createTextNode("\n\t\t "); - dncl.appendChild(c4); - - // Element url - Node dncu = domainDoc.createElement("url"); - dncl.appendChild(dncu); - - Text dtncu = domainDoc.createTextNode(cdUrl); - dncu.appendChild(dtncu); - - Text c5 = domainDoc.createTextNode("\n\t"); - root.appendChild(c5); - - // creation of the cluster node - Node cnc = domainDoc.createElement("cluster"); - root.appendChild(cnc); - - Text c6 = domainDoc.createTextNode("\n\t "); - cnc.appendChild(c6); - - Node cncn = domainDoc.createElement("name"); - cnc.appendChild(cncn); - - Text ctncn = domainDoc.createTextNode(clusterName); - cncn.appendChild(ctncn); - - Text c7 = domainDoc.createTextNode("\n\t "); - cnc.appendChild(c7); - - Node cncd = domainDoc.createElement("description"); - cnc.appendChild(cncd); - - Text ctncd = domainDoc.createTextNode(clusterDesc); - cncd.appendChild(ctncd); - - for (int i = 1; i <= nodesNb; i++) { - - Text c8 = domainDoc.createTextNode("\n\t\t"); - cnc.appendChild(c8); - - // Element server - Node cncs = domainDoc.createElement("server"); - cnc.appendChild(cncs); - - Text c9 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c9); - - // Element name - Node cncsn = domainDoc.createElement("name"); - cncs.appendChild(cncsn); - - Text ctncsn = domainDoc.createTextNode(nodesName + i); - cncsn.appendChild(ctncsn); - - Text c10 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c10); - - // Element location - Node cncsl = domainDoc.createElement("location"); - cncs.appendChild(cncsl); - - Text c11 = domainDoc.createTextNode("\n\t\t\t"); - cncsl.appendChild(c11); - - // Element url - Node cncsu = domainDoc.createElement("url"); - cncsl.appendChild(cncsu); - - String scheme; - if (protocol.equals("jrmp") || protocol.equals("irmi")) { - scheme = "rmi"; - } else if (protocol.equals("iiop")) { - scheme = "iiop"; - } else { - throw new BuildException(INFO + "Unknown protocol '" + protocol + "' for node '" + i + "'."); - } - String url = "service:jmx:" + scheme + "://localhost/jndi/" + scheme + "://localhost:" + portRange[i - 1] + "/" - + protocol + "connector_node" + i; - - Text ctncsu = domainDoc.createTextNode(url); - cncsu.appendChild(ctncsu); - - Text c20 = domainDoc.createTextNode("\n\t\t "); - cncsl.appendChild(c20); - - Text c12 = domainDoc.createTextNode("\n\t\t "); - cncs.appendChild(c12); - - // Element cluster-daemon - Node cncscd = domainDoc.createElement("cluster-daemon"); - cncs.appendChild(cncscd); - - Text ctncscd = domainDoc.createTextNode(cdName); - cncscd.appendChild(ctncscd); - - Text c28 = domainDoc.createTextNode("\n\t\t"); - cncs.appendChild(c28); - - } - - Text c21 = domainDoc.createTextNode("\n\t"); - cnc.appendChild(c21); - - Text c14 = domainDoc.createTextNode("\n\t\t"); - dncl.appendChild(c14); - - Text c13 = domainDoc.createTextNode("\n\t"); - dnc.appendChild(c13); - - Text c18 = domainDoc.createTextNode("\n"); - root.appendChild(c18); - - Text cf = domainDoc.createTextNode("\n"); - root.appendChild(cf); - - } - - /** - * Set the JONAS_ROOT dir. - * @param jonasRoot directory - */ - public void setJonasRoot(final String jonasRoot) { - this.jonasRoot = jonasRoot; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Ha.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Ha.java deleted file mode 100644 index 75e32a5f19..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Ha.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import org.ow2.jonas.ant.JOnASBaseTask; - -/** - * Defines properties for ha service. - * @author Benoit Pelletier - */ -public class Ha extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[Ha] "; - - /** - * CMI mcast addr attribut. - */ - private static final String MCASTADDR_ATTR = "mcast_addr"; - - /** - * CMI mcast port attribut. - */ - private static final String MCASTPORT_ATTR = "mcast_port"; - - /** - * Default cmi mcast addr. - */ - private static final String DEFAULT_MCASTADDR = "224.0.0.36"; - - /** - * Default cmi mcast port. - */ - private static final String DEFAULT_MCASTPORT = "35468"; - - /** - * Default constructor. - */ - public Ha() { - super(); - } - - /** - * Set mcastAddr. - * @param mcastAddr multicast address - */ - public void setMcastAddr(final String mcastAddr) { - - // Token to replace the multicast addr - String token = MCASTADDR_ATTR + "=" + "\"" + DEFAULT_MCASTADDR + "\""; - String value = MCASTADDR_ATTR + "=" + "\"" + mcastAddr + "\""; - JReplace mcastAddrReplace = new JReplace(); - mcastAddrReplace.setLogInfo(INFO + "Setting mcastaddr"); - mcastAddrReplace.setConfigurationFile(JOnASBaseTask.JGROUPS_HA_CONF_FILE); - mcastAddrReplace.setToken(token); - mcastAddrReplace.setValue(value); - addTask(mcastAddrReplace); - } - - /** - * Set mcastPort. - * @param mcastPort multicast port - */ - public void setMcastPort(final String mcastPort) { - - // Token to replace the multicast port - String token = MCASTPORT_ATTR + "=" + "\"" + DEFAULT_MCASTPORT + "\""; - String value = MCASTPORT_ATTR + "=" + "\"" + mcastPort + "\""; - JReplace mcastPortReplace = new JReplace(); - mcastPortReplace.setLogInfo(INFO + "Setting mcastport"); - mcastPortReplace.setConfigurationFile(JOnASBaseTask.JGROUPS_HA_CONF_FILE); - mcastPortReplace.setToken(token); - mcastPortReplace.setValue(value); - addTask(mcastPortReplace); - - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JCopy.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JCopy.java deleted file mode 100644 index dc475d11fa..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JCopy.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.apache.tools.ant.taskdefs.Copy; - -/** - * Defines common copy methods. - * @author Florent Benoit - */ -public class JCopy extends Copy implements BaseTaskItf { - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * JONAS_ROOT directory. - */ - private File jonasRoot = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - setTodir(destDir); - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * @param jonasRoot The jonasRoot directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return the configurationFile. - */ - protected String getConfigurationFile() { - return configurationFile; - } - /** - * @return the jonasRoot. - */ - protected File getJonasRoot() { - return jonasRoot; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JEcho.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JEcho.java deleted file mode 100644 index 2b8110d19b..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JEcho.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.apache.tools.ant.taskdefs.Echo; - -/** - * Defines echo message task. - * @author Florent Benoit - * @author Benoit Pelletier - */ -public class JEcho extends Echo implements BaseTaskItf { - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * JONAS_ROOT directory. - */ - private File jonasRoot = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - setFile(destDir); - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * @param jonasRoot The jonasRoot directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return the jonasRoot. - */ - protected File getJonasRoot() { - return jonasRoot; - } - - /** - * Clone this object. - * @return clone of the object. - * @throws CloneNotSupportedException if cloning is not supported - */ - // Disabling, wondering the use case of JONAS-67 - // public Object clone() throws CloneNotSupportedException { - // return super.clone(); - //} - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JMkdir.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JMkdir.java deleted file mode 100644 index 292a305654..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JMkdir.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.apache.tools.ant.taskdefs.Mkdir;; - -/** - * Defines creation directory task. - * @author Florent Benoit - * @author Benoit Pelletier - */ -public class JMkdir extends Mkdir implements BaseTaskItf { - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * JONAS_ROOT directory. - */ - private File jonasRoot = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - setDir(destDir); - } - - /** - * Gets logger info (to be displayed)? - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * @param jonasRoot The jonasRoot directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return the jonasRoot. - */ - protected File getJonasRoot() { - return jonasRoot; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JReplace.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JReplace.java deleted file mode 100644 index 3950442775..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JReplace.java +++ /dev/null @@ -1,106 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -/** - * Defines common replacement methods. - * @author Florent Benoit - * @author Shenheng Liang - */ -public class JReplace extends Replace implements BaseTaskItf { - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * JONAS_ROOT directory. - */ - private File jonasRoot = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - setFile(new File(new File(destDir, "conf"), configurationFile)); - } - - /** - * @param destFile The destination file to set. - */ - public void setDestFile(final File destFile) { - setFile(destFile); - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * @param jonasRoot The jonasRoot directory. - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return the jonasRoot. - */ - protected File getJonasRoot() { - return jonasRoot; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTask.java deleted file mode 100644 index 80707519b6..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTask.java +++ /dev/null @@ -1,224 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.BootstrapTask; - -/** - * Defines a common task. - * @author Florent Benoit - */ -public class JTask extends BootstrapTask implements BaseTaskItf { - - /** - * Property separators (4 spaces). - */ - public static final String SEPARATORS = " "; - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * Destination directory (JONAS_BASE). - */ - private File destDir = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - this.destDir = destDir; - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * Gets the destination directory. - * @return the destination directory - */ - public File getDestDir() { - return destDir; - } - - /** - * Write properties object to a file with some logging info. - * @param info header for logging - * @param props Properties to write - * @param f file for writing - */ - protected void writePropsToFile(final String info, - final Properties props, - final File f) { - OutputStream fOut = null; - try { - fOut = new FileOutputStream(f); - } catch (FileNotFoundException e) { - throw new BuildException(info + "File is invalid", e); - } - - // Write properties to file - try { - props.store(fOut, ""); - fOut.close(); - } catch (IOException ioe) { - throw new BuildException(info + "Error while writing properties", ioe); - } - - } - - /** - * Add a value for a specific property in a configuration file. - * The separator uses between the property name and the property value is the default separator value. - * @param info text to be displayed for header - * @param confDir configuration directory (can be JONAS_BASE/conf) - * @param confFile configuration file (can be jonas.properties) - * @param property which must be found in confFile - * @param name value for the property to add - * @param add if true, add it, else replace - */ - protected void changeValueForKey(final String info, - final String confDir, - final String confFile, - final String property, - final String name, - final boolean add) { - changeValueForKey(info, confDir, confFile, property, name, SEPARATORS, add); - } - - /** - * Add a value for a specific property in a configuration file. - * @param info text to be displayed for header - * @param confDir configuration directory (can be JONAS_BASE/conf) - * @param confFile configuration file (can be jonas.properties) - * @param property which must be found in confFile - * @param name value for the property to add - * @param separators separator using between the property name and the property value - * @param add if true, add it, else replace - */ - protected void changeValueForKey(final String info, - final String confDir, - final String confFile, - final String property, - final String name, - final String separators, - final boolean add) { - - - if (name == null) { - log(info + "Ignoring property '" + property + "' in " + confFile - + " as the value is not provided."); - return; - } - - // Read current value - Properties currentProps = new Properties(); - File f = null; - try { - f = new File(confDir + File.separator + confFile); - currentProps.load(new FileInputStream(f)); - } catch (Exception e) { - throw new BuildException( - "Cannot load current properties for file '" + f + "'.", e); - } - - String valueOfProperty = currentProps.getProperty(property); - - // Now, add/replace mail value - JReplace propertyReplace = new JReplace(); - propertyReplace.setProject(getProject()); - propertyReplace.setConfigurationFile(confFile); - propertyReplace.setDestDir(new File(getDestDir().getPath())); - if (valueOfProperty == null || valueOfProperty.length() == 0) { - propertyReplace.setToken(property); - propertyReplace.setValue(property + separators + name); - } else if (!add) { - propertyReplace.setToken(property + separators + valueOfProperty); - propertyReplace.setValue(property + separators + name); - } else { - valueOfProperty = valueOfProperty.trim(); - propertyReplace.setToken(property + separators + valueOfProperty); - valueOfProperty += ", " + name; - String replaceVal = property + separators + valueOfProperty; - replaceVal = replaceVal.trim(); - propertyReplace.setValue(replaceVal); - } - if (add) { - log(info + "Adding '" + name + "' in " + confFile - + " file to property '" + property + "'."); - } else { - log(info + "Replacing the property '" + property + " : "+name+"' in " - + confFile + " file ."); - } - propertyReplace.execute(); - } - - /** - * @return the configurationFile. - */ - protected String getConfigurationFile() { - return configurationFile; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTouch.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTouch.java deleted file mode 100644 index 0430e78f84..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JTouch.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.apache.tools.ant.taskdefs.Touch; - -/** - * Defines creation file task. - * @author Florent Benoit - * @author Benoit Pelletier - */ -public class JTouch extends Touch implements BaseTaskItf { - - /** - * configuration file used. - */ - private String configurationFile = null; - - /** - * Information for the logger. - */ - private String logInfo = null; - - /** - * JONAS_ROOT directory. - */ - private File jonasRoot = null; - - /** - * Sets the configuration file. - * @param configurationFile The configurationFile to set. - */ - public void setConfigurationFile(final String configurationFile) { - this.configurationFile = configurationFile; - } - - /** - * @param destDir The destDir to set. - */ - public void setDestDir(final File destDir) { - setFile(destDir); - } - - /** - * Gets logger info (to be displayed). - * @return logger info - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#getLogInfo() - */ - public String getLogInfo() { - return logInfo; - } - - /** - * Set the info to be displayed by the logger. - * @param logInfo information to be displayed - * @see org.ow2.jonas.ant.jonasbase.BaseTaskItf#setLogInfo(String) - */ - public void setLogInfo(final String logInfo) { - this.logInfo = logInfo; - } - - /** - * @param jonasRoot The jonasRoot directory - */ - public void setJonasRoot(final File jonasRoot) { - this.jonasRoot = jonasRoot; - } - - /** - * @return the jonasRoot. - */ - protected File getJonasRoot() { - return jonasRoot; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcRa.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcRa.java deleted file mode 100644 index 59a33e7383..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcRa.java +++ /dev/null @@ -1,398 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Date; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.ant.JOnASBaseTask; - - -/** - * Allow to create JDBC resource adaptors. - * @author Florent Benoit - */ -public class JdbcRa extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JdbcRa] "; - - /** - * Name of the rar for JDBC_DM. - */ - private static final String JONAS_JDBCDM = "jonas-jca-jdbc-dm"; - - /** - * RAConfig classname. - */ - private static final String RACONFIG_CLASS = "org.ow2.jonas.generators.raconfig.RAConfig"; - - /** - * P6Spy driver class name. - */ - private static final String P6SPY_DRIVER = "com.p6spy.engine.spy.P6SpyDriver"; - - /** - * Name of the property of the real driver when using P6Spy tool. - */ - private static final String REALDRIVER_PROPERTY = "realdriver"; - - /** - * Name of this JDBC Resource Adaptor. - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor. - */ - private String mapperName = null; - - /** - * username of this JDBC Resource Adaptor. - */ - private String user = null; - - /** - * Password of this JDBC Resource Adaptor. - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor. - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name). - */ - private String driverName = null; - - /** - * Driver Name of this JDBC Resource Adaptor. - */ - private String realDriverName = null; - - /** - * Max Pool Size. - */ - private String maxPoolSize = "100"; - - /** - * Max Prepared Statements Size - */ - private String maxPreparedStatementsSize = "10"; - - /** - * Max Wait Time jdbc - */ - private String maxWaitTime = "10"; - - /** - * Max Waiters jdbc - */ - private String maxWaiters = "0"; - - /** - * connexion max age jdbc - */ - private String connMaxAge = "0"; - - /** - * Max open time jdbc - */ - private String maxOpenTime = "0"; - - /** - * JNDI Name of this JDBC Resource Adaptor - */ - /** - * JNDI Name of this JDBC Resource Adaptor. - */ - private String jndiName = null; - - /** - * Using of the P6Spy tool or not. - */ - private boolean p6spy = false; - - /** - * Set the name of this JDBC Resource Adaptor. - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor. - * @param mapperName the mappername of this JDBC Resource Adaptor - */ - public void setMapperName(final String mapperName) { - this.mapperName = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor. - * @param user the user of this JDBC Resource Adaptor - */ - public void setUser(final String user) { - this.user = user; - } - - /** - * Set the password of this JDBC Resource Adaptor. - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the url of this JDBC Resource Adaptor. - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool. - * @param maxPoolSize max pool size of connection - */ - public void setMaxPoolSize(final String maxPoolSize) { - this.maxPoolSize = maxPoolSize; - } - - /** - * Set the max prepared Statements size of this JDBC Resource Adaptor Connection Pool. - * @param maxPreparedStatementsSize of connection - */ - public void setMaxPreparedStatementsSize(final String maxPreparedStatementSize) { - this.maxPreparedStatementsSize = maxPreparedStatementSize; - } - - /** - * Set the max wait time of this JDBC Resource Adaptor Connection Pool. - * @param maxWaitTime of the connection - */ - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - /** - * Set the max waiters of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxWaiters(final String maxWaiters) { - this.maxWaiters = maxWaiters; - } - - /** - * Set the connexion max age of this JDBC Resource Adaptor Connection Pool. - * @param maxConnMAxAge of connection - */ - public void setConnMaxAge(final String connMaxAge) { - this.connMaxAge = connMaxAge; - } - - /** - * Set the open time max of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxOpenTime(final String maxOpenTime) { - this.maxOpenTime = maxOpenTime; - } - - /** - * Set the name of the driver of this JDBC Resource Adaptor. - * @param driverName the name of the driver of this JDBC Resource Adaptor - */ - public void setDriverName(final String driverName) { - this.driverName = driverName; - this.realDriverName = driverName; - } - - /** - * Set the jndiName of this JDBC Resource Adaptor. - * @param jndiName the jndiName of this JDBC Resource Adaptor - */ - public void setJndiName(final String jndiName) { - this.jndiName = jndiName; - } - - /** - * Check the properties. - */ - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (mapperName == null) { - throw new BuildException(INFO + "Property 'mapperName' is missing."); - } else if (user == null) { - throw new BuildException(INFO + "Property 'user' is missing."); - } else if (password == null) { - throw new BuildException(INFO + "Property 'password' is missing."); - } else if (url == null) { - throw new BuildException(INFO + "Property 'url' is missing."); - } else if (driverName == null) { - throw new BuildException(INFO + "Property 'driverName' is missing."); - } else if (jndiName == null) { - throw new BuildException(INFO + "Property 'jndiName' is missing."); - } - } - - /** - * Gets a Properties object for JDBC. - * @return configured properties - */ - private Properties getProperties() { - // Check properties - checkProperties(); - - Properties props = new Properties(); - props.put("datasource.name", jndiName); - props.put("datasource.url", url); - if (p6spy) { - driverName = P6SPY_DRIVER; - } - props.put("datasource.classname", driverName); - props.put("datasource.username", user); - props.put("datasource.password", password); - props.put("datasource.mapper", mapperName); - props.put("jdbc.maxconpool", maxPoolSize); - props.put("jdbc.pstmtmax", maxPreparedStatementsSize); - props.put("jdbc.maxwaittime", maxWaitTime); - props.put("jdbc.maxwaiters", maxWaiters); - props.put("jdbc.connmaxage", connMaxAge); - props.put("jdbc.maxopentime", maxOpenTime); - return props; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - - // Build new temp file for making a resource adaptor - File tmpFile = new File(System.getProperty("java.io.tmpdir"), String.valueOf(new Date().getTime())); - - // Write properties to a file - Properties props = getProperties(); - writePropsToFile(INFO, props, tmpFile); - - // Build resource adapter for this configuration - - // args - String jBaseDeployDir = getDestDir().getPath() + File.separator + "deploy"; - - String jdbcDM = getJonasRoot().getPath() + File.separator + getMaven2Repository() + File.separator + "org" - + File.separator + "ow2" + File.separator + "jonas" + File.separator + JONAS_JDBCDM + File.separator - + getJOnASVersion() + File.separator + JONAS_JDBCDM + "-" + getJOnASVersion() + ".rar"; - String destRarFile = jBaseDeployDir + File.separator + name + ".rar"; - - Java raConfigTask = getBootstraptask("", false); - - // Add the ra-config Jar in the Java classpath path - String clientJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "client.jar"; - String raConfigJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "jonas-generators-raconfig.jar"; - Path classpath = new Path(raConfigTask.getProject(), clientJar); - classpath.append(new Path(raConfigTask.getProject(), raConfigJar)); - raConfigTask.setClasspath(classpath); - - raConfigTask.clearArgs(); - raConfigTask.createArg().setValue(RACONFIG_CLASS); - raConfigTask.createArg().setValue("-dm"); - raConfigTask.createArg().setValue("-p"); - raConfigTask.createArg().setValue(tmpFile.getPath()); - raConfigTask.createArg().setValue(jdbcDM); - raConfigTask.createArg().setValue(destRarFile); - - log(INFO + "Generating a rar file with name '" + name + "', mapperName '" + mapperName + "', user '" + user - + "', password '" + password + "', URL '" + url + "', driverName '" + driverName + "' and jndiName '" - + jndiName + "'..."); - - try { - raConfigTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - throw new BuildException(INFO + "Cannot make a resource adaptor on RAConfig: ", rae); - } finally { - tmpFile.delete(); - } - log(INFO + "Rar generated : '" + destRarFile + "'."); - - // P6Spy tool Configuration - if (p6spy) { - // Set the realdriver property of the JONAS_BASE/conf/spy.properties P6Spy configuration file - String jBaseConf = getJonasRoot().getPath() + File.separator + "conf"; - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.P6SPY_CONF_FILE, - REALDRIVER_PROPERTY, realDriverName, "=", false); - } - } - - /** - * Copy rar to autoload or only in rars/ ? - * @param autoload true of false - * @deprecated - */ - @Deprecated - public void setAutoload(final boolean autoload) { - } - - /** - * Configure the using of the P6Spy tool or not ? - * @return the p6spy - */ - public boolean isP6spy() { - return p6spy; - } - - /** - * Configure the using of the P6Spy tool or not ? - * @param p6spy true or false - */ - public void setP6spy(final boolean p6spy) { - this.p6spy = p6spy; - } - - private String getJOnASVersion() { - Properties versions = new Properties(); - try { - versions.load(new FileInputStream(new File(getJonasRoot(), "versions.properties"))); - } catch (Exception e) { - throw new BuildException(INFO + "Cannot read versions.properties file: ", e); - } - return versions.getProperty("org.ow2.jonas"); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcXml.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcXml.java deleted file mode 100644 index e502cefc45..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JdbcXml.java +++ /dev/null @@ -1,424 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.FileOutputStream; -import java.math.BigInteger; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.JOnASBaseTask; -import org.ow2.jonas.datasource.deployer.binding.ConnectionManagerConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceConfigurationType; -import org.ow2.jonas.datasource.deployer.binding.DatasourceType; -import org.ow2.jonas.datasource.deployer.binding.Datasources; -import org.ow2.jonas.datasource.deployer.binding.ObjectFactory; -import org.ow2.jonas.datasource.deployer.reader.DatasourceXmlReader; - - -/** - * Allow to create JDBC datasources. - * @author Benoit Pelletier - */ -public class JdbcXml extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JdbcXml] "; - - /** - * New file or add into existing one - */ - private boolean newFile = false; - - /** - * Name of this JDBC Resource Adaptor. - */ - private String name = null; - - /** - * Mapper Name of this JDBC Resource Adaptor. - */ - private String mapper = null; - - /** - * username of this JDBC Resource Adaptor. - */ - private String userName = null; - - /** - * Password of this JDBC Resource Adaptor. - */ - private String password = null; - - /** - * URL of this JDBC Resource Adaptor. - */ - private String url = null; - - /** - * Driver Name of this JDBC Resource Adaptor (may be set to the P6Spy driver name). - */ - private String className = null; - - /** - * Init Pool Size. - */ - private String initConPool = "1"; - - /** - * Min Pool Size. - */ - private String minConPool = "10"; - - /** - * Max Pool Size. - */ - private String maxConPool = "100"; - - /** - * Max Prepared Statements Size - */ - private String pstmtMax = "10"; - - /** - * Pstmt cache policy - */ - private String pstmtCachePolicy = "List"; - - - /** - * Max Wait Time jdbc - */ - private String maxWaitTime = "10"; - - /** - * Max Waiters jdbc - */ - private String maxWaiters = "100"; - - /** - * connexion max age jdbc - */ - private String connMaxAge = "1440"; - - /** - * Max open time jdbc - */ - private String maxOpenTime = "60"; - - /** - * Connection check level - */ - private String conCheckLevel = "0"; - - /** - * Connection check level - */ - private String conTestStmt = ""; - - /** - * Sampling period - */ - private String samplingPeriod = "30"; - - - /** - * Set the name of the driver of this JDBC Resource Adaptor. - * @param className the name of the driver of this JDBC Resource Adaptor - */ - public void setClassName(final String className) { - this.className = className; - } - - /** - * Set the init pool size of this JDBC Resource Adaptor Connection Pool. - * @param initConPool init pool size of connection - */ - public void setInitConPool(final String initConPool) { - this.initConPool = initConPool; - } - - /** - * Set the min pool size of this JDBC Resource Adaptor Connection Pool. - * @param minConPool min pool size of connection - */ - public void setMinConPool(final String minConPool) { - this.minConPool = minConPool; - } - - /** - * Set the max pool size of this JDBC Resource Adaptor Connection Pool. - * @param maxConPool max pool size of connection - */ - public void setMaxConPool(final String maxConPool) { - this.maxConPool = maxConPool; - } - - /** - * Set the prepared statement pool size of this JDBC Resource Adaptor Connection Pool. - * @param pstmtMax pool size of connection - */ - public void setPstmtMax(final String pstmtMax) { - this.pstmtMax = pstmtMax; - } - - /** - * Set the prepared statement cache policy of this JDBC Resource Adaptor Connection Pool. - * @param pstmtCachePolicy cache policy - */ - public void setPstmtCachePolicy(final String pstmtCachePolicy) { - this.pstmtCachePolicy = pstmtCachePolicy; - } - - /** - * Set the connection check level. - * @param conCheckLevel level - */ - public void setConCheckLevel(final String conCheckLevel) { - this.conCheckLevel = conCheckLevel; - } - - /** - * Set the statement for the connection check level. - * @param conTestStmt request - */ - public void setConTestStmt(final String conTestStmt) { - this.conTestStmt = conTestStmt; - } - - /** - * Set the name of this JDBC Resource Adaptor. - * @param name the name of this JDBC Resource Adaptor - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the mapper name of this JDBC Resource Adaptor. - * @param mapper the mappername of this JDBC Resource Adaptor - */ - public void setMapper(final String mapperName) { - this.mapper = mapperName; - } - - /** - * Set the user of this JDBC Resource Adaptor. - * @param user the user of this JDBC Resource Adaptor - */ - public void setUserName(final String user) { - this.userName = user; - } - - /** - * Set the password of this JDBC Resource Adaptor. - * @param password the name of this JDBC Resource Adaptor - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * Set the samplingPeriod of the JDBC Resource Adaptor. - * @param samplingPeriod the sampling period - */ - public void setSamplingPeriod(final String samplingPeriod) { - this.samplingPeriod = samplingPeriod; - } - - /** - * Set the url of this JDBC Resource Adaptor. - * @param url the name of this JDBC Resource Adaptor - */ - public void setUrl(final String url) { - this.url = url; - } - - /** - * Set the max wait time of this JDBC Resource Adaptor Connection Pool. - * @param maxWaitTime of the connection - */ - public void setMaxWaitTime(final String maxWaitTime) { - this.maxWaitTime = maxWaitTime; - } - - /** - * Set the max waiters of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxWaiters(final String maxWaiters) { - this.maxWaiters = maxWaiters; - } - - /** - * Set the connexion max age of this JDBC Resource Adaptor Connection Pool. - * @param maxConnMAxAge of connection - */ - public void setConnMaxAge(final String connMaxAge) { - this.connMaxAge = connMaxAge; - } - - /** - * Set the open time max of this JDBC Resource Adaptor Connection Pool. - * @param maxWaiters of connection - */ - public void setMaxOpenTime(final String maxOpenTime) { - this.maxOpenTime = maxOpenTime; - } - - /** - * - * @return true if a new file is requested - */ - public boolean isNewFile() { - return newFile; - } - - /** - * Set is a new file has to be created - * @param newFile - */ - public void setNewFile(final String newFile) { - this.newFile = Boolean.valueOf(newFile); - } - - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (mapper == null) { - throw new BuildException(INFO + "Property 'mapper' is missing."); - } else if (userName == null) { - throw new BuildException(INFO + "Property 'userName' is missing."); - } else if (password == null) { - throw new BuildException(INFO + "Property 'password' is missing."); - } else if (url == null) { - throw new BuildException(INFO + "Property 'url' is missing."); - } else if (className == null) { - throw new BuildException(INFO + "Property 'className' is missing."); - } - } - - - - /** - * Execute this task. - */ - @Override - public void execute() { - - final ClassLoader oldCL = Thread.currentThread().getContextClassLoader(); - try { - // Look for the JAXB2 JARs since the JDBC XML tasks require JAXB2, - // not included in the Java 5 runtime. Please remove this piece of - // code when JOnAS completely switches to Java 6. - final String javaVersion = System.getProperty("java.version"); - if (javaVersion.startsWith("1.5")) { - Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); - } - - // Check properties - checkProperties(); - - DatasourceXmlReader datasourceReader = new DatasourceXmlReader(); - if (datasourceReader == null) { - throw new BuildException("DatasourceReader is null"); - } - Datasources datasources = null; - - File dsXmlFile = new File(getDestDir().getPath() + File.separator + JOnASBaseTask.DEPLOY_DIR_NAME + File.separator + JOnASBaseTask.JDBC_DS_CONF_FILE); -// if (!dsXmlFile.exists()) { -// throw new BuildException("jdbc-ds.xml file doesn't exist"); -// } - - // if needed, load the current XML file - if (!isNewFile()) { - datasources = datasourceReader.extractDataSources(dsXmlFile); - } else { - datasources = new Datasources(); - } - - // add the datasource - DatasourceType ds = new DatasourceType(); - - DatasourceConfigurationType dsConf = new DatasourceConfigurationType(); - dsConf.setName(name); - dsConf.setUsername(userName); - dsConf.setPassword(password); - dsConf.setUrl(url); - dsConf.setMapper(mapper); - dsConf.setClassname(className); - dsConf.setDescription(name); - ds.setDatasourceConfiguration(dsConf); - - ConnectionManagerConfigurationType cmConf = new ConnectionManagerConfigurationType(); - cmConf.setConnchecklevel(Integer.valueOf(this.conCheckLevel)); - cmConf.setConnteststmt(this.conTestStmt); - cmConf.setConnmaxage(BigInteger.valueOf(Long.valueOf(connMaxAge))); - cmConf.setInitconpool(BigInteger.valueOf(Long.valueOf(this.initConPool))); - cmConf.setMinconpool(BigInteger.valueOf(Long.valueOf(this.minConPool))); - cmConf.setMaxconpool(BigInteger.valueOf(Long.valueOf(this.maxConPool))); - cmConf.setMaxopentime(BigInteger.valueOf(Long.valueOf(this.maxOpenTime))); - cmConf.setMaxwaiters(BigInteger.valueOf(Long.valueOf(this.maxWaiters))); - cmConf.setMaxwaittime(BigInteger.valueOf(Long.valueOf(this.maxWaitTime))); - cmConf.setPstmtmax(BigInteger.valueOf(Long.valueOf(this.pstmtMax))); - cmConf.setPstmtcachepolicy(this.pstmtCachePolicy); - cmConf.setSamplingperiod(BigInteger.valueOf(Long.valueOf(this.samplingPeriod))); - ds.setConnectionManagerConfiguration(cmConf); - - datasources.getDatasources().add(ds); - - // flush the file - if (dsXmlFile.exists()) { - dsXmlFile.delete(); - } - dsXmlFile.createNewFile(); - - JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class); - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE ); - FileOutputStream fileOut = new FileOutputStream(dsXmlFile); - try { - marshaller.marshal(datasources, fileOut); - } finally { - fileOut.close(); - } - - log(INFO + "JDBC XML generated : '" + dsXmlFile.getAbsolutePath() + "'."); - } catch (BuildException e) { - throw e; - } catch (Throwable t) { - throw new BuildException("Failed building JDBC XML: " + t, t); - } finally { - Thread.currentThread().setContextClassLoader(oldCL); - } - - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Jms.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Jms.java deleted file mode 100644 index c70739c190..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Jms.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.util.StringTokenizer; - -import org.ow2.jonas.ant.JOnASBaseTask; - - -/** - * Allow to configure the JMS service. - * @author Florent Benoit - */ -public class Jms extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[JMS] "; - - /** - * Default host name. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "16010"; - - /** - * Token for the end of the joramAdmin configuration file. - */ - private static final String TOKEN_END_CONF_FILE = ""; - - /** - * Default constructor. - */ - public Jms() { - super(); - } - - /** - * Set the host name for Joram. - * @param host host name for Joram - */ - public void setHost(final String host) { - - // For JMS - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_CONF_FILE); - propertyReplace.setToken(DEFAULT_HOST); - propertyReplace.setValue(host); - propertyReplace.setLogInfo(INFO + "Setting Joram host name to : " + host + " in " - + JOnASBaseTask.JORAM_CONF_FILE + " file."); - addTask(propertyReplace); - - // for RAR file - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(DEFAULT_HOST); - propertyReplace.setValue(host); - propertyReplace.setLogInfo(INFO + "Setting Joram host name to : " + host + " in " - + JOnASBaseTask.JORAM_ADMIN_CONF_FILE + " file."); - addTask(propertyReplace); - - // Patch the RAR file - JmsRa jmsRa = new JmsRa(); - jmsRa.setServerHost(host); - addTask(jmsRa); - - } - - /** - * Set the port number for Joram. - * @param portNumber the port for Joram - */ - public void setPort(final String portNumber) { - - // For JMS - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Joram port number to : " + portNumber + " in " - + JOnASBaseTask.JORAM_CONF_FILE + " file."); - addTask(propertyReplace); - - // for RAR file - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Joram port number to : " + portNumber + " in " - + JOnASBaseTask.JORAM_ADMIN_CONF_FILE + " file."); - addTask(propertyReplace); - - // Patch the RAR file - JmsRa jmsRa = new JmsRa(); - jmsRa.setServerPort(portNumber); - addTask(jmsRa); - - } - - /** - * Set the initial topics when JOnAS start. - * @param initialTopics comma separated list of topics - */ - public void setInitialTopics(final String initialTopics) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(TOKEN_END_CONF_FILE); - String tokenValue = ""; - StringTokenizer st = new StringTokenizer(initialTopics, ","); - - while (st.hasMoreTokens()) { - String topic = st.nextToken(); - tokenValue += " " - + "\n" - + " " - + "\n" - + " " - + "\n" - + " " - + "\n" - + " " - + "\n"; - } - - tokenValue += TOKEN_END_CONF_FILE; - - propertyReplace.setValue(tokenValue); - propertyReplace.setLogInfo(INFO + "Setting initial topics to : " + initialTopics); - addTask(propertyReplace); - } - - /** - * Set the initial queues when JOnAS start. - * @param initialQueues comma separated list of topics - */ - public void setInitialQueues(final String initialQueues) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JORAM_ADMIN_CONF_FILE); - propertyReplace.setToken(TOKEN_END_CONF_FILE); - - String tokenValue = ""; - StringTokenizer st = new StringTokenizer(initialQueues, ","); - - while (st.hasMoreTokens()) { - String queue = st.nextToken(); - tokenValue += " " - + "\n" - + " " - + "\n" - + " " - + "\n" - + " " - + "\n" - + " " - + "\n"; - } - - tokenValue += TOKEN_END_CONF_FILE; - - propertyReplace.setValue(tokenValue); - propertyReplace.setLogInfo(INFO + "Setting initial queues to : " + initialQueues); - addTask(propertyReplace); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JmsRa.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JmsRa.java deleted file mode 100644 index 2da007dd49..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JmsRa.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Date; -import java.util.Properties; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.taskdefs.Expand; -import org.apache.tools.ant.taskdefs.Java; -import org.apache.tools.ant.types.Path; -import org.ow2.jonas.ant.JOnASAntTool; - -/** - * Allow to create/adapt the JMS resource adaptor. - * @author Benoit Pelletier - */ -public class JmsRa extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JmsRa] "; - - /** - * Name of the rar. - */ - private static final String JORAM_RA_FOR_JONAS = "joram-jca-jonas"; - - /** - * RAConfig classname. - */ - private static final String RACONFIG_CLASS = "org.ow2.jonas.generators.raconfig.RAConfig"; - - /** - * Default host name. - */ - private static final String DEFAULT_HOST = "localhost"; - - /** - * Host name of the server. - */ - private String serverHost = DEFAULT_HOST; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "16010"; - - /** - * Port number of the server. - */ - private String serverPort = DEFAULT_PORT; - - /** - * Set the host name. - * @param serverHost the host name - */ - public void setServerHost(final String serverHost) { - this.serverHost = serverHost; - } - - /** - * Set the port number. - * @param serverPort the port nb - */ - public void setServerPort(final String serverPort) { - this.serverPort = serverPort; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - - // Build new temp file for making a resource adaptor - File tmpFile = new File(System.getProperty("java.io.tmpdir"), String.valueOf(new Date().getTime())); - - // Copy the RAR file from JONAS_ROOT to JONAS_BASE - - - String rarFileName = JORAM_RA_FOR_JONAS + "-" + getJoramVersion() + ".rar"; - String rarDir = getMaven2Repository() + File.separator + "org" + File.separator + "ow2" + File.separator - + "joram" + File.separator + JORAM_RA_FOR_JONAS + File.separator + getJoramVersion(); - String srcRarPathName = getJonasRoot().getPath() + File.separator + rarDir + File.separator + rarFileName; - String dstRarPathName = getDestDir().getPath() + File.separator + rarDir + File.separator + rarFileName; - - Copy copy = new Copy(); - JOnASAntTool.configure(this, copy); - copy.setTofile(new File(dstRarPathName)); - copy.setFile(new File(srcRarPathName)); - copy.setOverwrite(true); - try { - copy.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot copy " + JORAM_RA_FOR_JONAS + " file : ", rae); - } - - // Extract the jonas-ra.xml - Expand jarTask = new Expand(); - JOnASAntTool.configure(this, jarTask); - jarTask.setDest(tmpFile); - jarTask.setSrc(new File(dstRarPathName)); - try { - jarTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot extract jonas-ra.xml with jar command : ", rae); - } - - // update the jonas-ra.xml - Replace replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String token = "\r"; - String value = ""; - replaceTask.setToken(token); - replaceTask.setValue(value); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace port number in the jonas-ra.xml file : ", rae); - } - - - replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String portToken = "ServerPort" - + "\n" - + " "; - String portValue = "ServerPort" - + "\n" - + " " + serverPort + ""; - - replaceTask.setToken(portToken); - replaceTask.setValue(portValue); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace port number in the jonas-ra.xml file : ", rae); - } - - replaceTask = new Replace(); - JOnASAntTool.configure(this, replaceTask); - replaceTask.setFile(new File(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml")); - - String hostToken = "HostName" - + "\n" - + " "; - String hostValue = "HostName" - + "\n" - + " " + serverHost + ""; - - replaceTask.setToken(hostToken); - replaceTask.setValue(hostValue); - try { - replaceTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - JOnASAntTool.deleteAllFiles(tmpFile); - throw new BuildException(INFO + "Cannot replace host name in the jonas-ra.xml file : ", rae); - } - - // update the archive - Java raConfigTask = getBootstraptask("", false); - - // Add the ra-config Jar in the Java classpath path - String clientJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "client.jar"; - String raConfigJar = getJonasRoot().getPath() + File.separator + "lib" + File.separator + "jonas-generators-raconfig.jar"; - Path classpath = new Path(raConfigTask.getProject(), clientJar); - classpath.append(new Path(raConfigTask.getProject(), raConfigJar)); - raConfigTask.setClasspath(classpath); - - JOnASAntTool.configure(this, raConfigTask); - raConfigTask.clearArgs(); - raConfigTask.createArg().setValue(RACONFIG_CLASS); - raConfigTask.createArg().setValue("-u"); - raConfigTask.createArg().setValue(tmpFile.getPath() + File.separator + "META-INF/jonas-ra.xml"); - raConfigTask.createArg().setValue(dstRarPathName); - - try { - raConfigTask.execute(); - } catch (Exception rae) { - rae.printStackTrace(); - throw new BuildException(INFO + "Cannot make a resource adaptor on RAConfig: ", rae); - } finally { - JOnASAntTool.deleteAllFiles(tmpFile); - } - - log(INFO + "Setting host name to " + serverHost + ", port number to " + serverPort + " in the rar '" + - dstRarPathName + "'."); - } - - private String getJoramVersion() { - Properties versions = new Properties(); - try { - versions.load(new FileInputStream(new File(getJonasRoot(), "versions.properties"))); - } catch (Exception e) { - throw new BuildException(INFO + "Cannot read versions.properties file: ", e); - } - return versions.getProperty("org.ow2.joram_joram-jca-jonas"); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JonasProperties.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JonasProperties.java deleted file mode 100644 index 1e1bf684d7..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/JonasProperties.java +++ /dev/null @@ -1,279 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * - */ -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.ow2.jonas.ant.JOnASBaseTask; - -/** - * Allow to configure the global properties in jonas.properties file. - * services jonas.security.manager - * jonas.security.propagation jonas.csiv2.propagation - * jonas.transaction.propagation jonas.log.configfile - * jonas.master jonas.service.ear.genstub - * jonas.development jonas.service.ejb3.jpa.provider - * @author coqp - */ -public class JonasProperties extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JOnAS] "; - - /** - * Services property. - */ - private static final String SERVICES_PROPERTY = "jonas.services"; - - /** - * SecurityManager property. - */ - private static final String SECURITYMANAGER_PROPERTY = "jonas.security.manager"; - - /** - * Security Propagation property. - */ - private static final String SECURITYPROPAGATIONPROPERTY = "jonas.security.propagation"; - - /** - * Csiv2 Propagation property. - */ - private static final String CSIV2PROPAGATIONPROPERTY = "jonas.csiv2.propagation"; - - /** - * Transaction Propagation property. - */ - private static final String TRANSACTIONPROPAGATIONPROPERTY = "jonas.transaction.propagation"; - - /** - * JONAS Log Config file property. - */ - private static final String LOGCONFIGFILEPROPERTY = "jonas.log.configfile"; - - /** - * JONAS work directory property. - */ - private static final String JONAS_WORKDIRECTORY_PROPERTY = "jonas.workdirectory"; - - /** - * JONAS master property. - */ - private static final String MASTER_PROPERTY = "jonas.master"; - - /** - * JONAS EAR genClientStub property. - */ - private static final String EAR_GENCLIENT_STUB = "jonas.service.ear.genstub"; - - /** - * JONAS development property. - */ - private static final String DEVELOPMENTMODE = "jonas.development"; - - /** - * EJB3 JPA provider property. - */ - private static final String EJB3_JPA_PROVIDER_PROPERTY = "jonas.service.ejb3.jpa.provider"; - - /** - * List of services names. - */ - private String services = null; - - /** - * Enable the Security manager. - */ - private Boolean securitymanager = true; - - /** - * Enable the Security propagation. - */ - private Boolean securitypropagation = true; - - /** - * Enable the Csiv2 propagation. - */ - private Boolean csiv2propagation = true; - - /** - * Enable the transaction propagation. - */ - private Boolean transactionpropagation = true; - - /** - * Enable the GenClientStub. - */ - private Boolean genClientStub = false; - - /** - * JOnAS log config file name. - */ - private String configfile = "trace"; - - /** - * Enable the development mode. - */ - private Boolean development = true; - - /** - * Enable the transaction propagation. - */ - private Boolean master = false; - - /** - * EJB3 JPA provider. - */ - private String ejb3JpaProvider = "hibernate4.1"; - - /** - * Work directory. - */ - private String workDirectory = "work"; - - /** - * Default constructor. - */ - public JonasProperties() { - super(); - } - - /** - * Set the names of the services. - * @param services list of services - */ - public void setServices(final String services) { - this.services = services; - } - - /** - * Enable or disable SecurityManager. - * @param securitymanager enabled (true or false) - */ - public void setSecurityManager(final boolean securitymanager) { - this.securitymanager = securitymanager; - } - - /** - * Enable or disable Security propagation. - * @param securitypropagation enabled (true or false) - */ - public void setSecurityPropagation(final boolean securitypropagation) { - this.securitypropagation = securitypropagation; - } - - /** - * Enable or disable Csiv2 propagation. - * @param csiv2propagation enabled (true or false) - */ - public void setCsiv2Propagation(final boolean csiv2propagation) { - this.csiv2propagation = csiv2propagation; - } - - /** - * Enable or disable Transaction propagation. - * @param transactionpropagation enabled (true or false) - */ - public void setTransactionPropagation(final boolean transactionpropagation) { - this.transactionpropagation = transactionpropagation; - } - - /** - * Set the name of the JOnAS log config file. - * @param configfile log config file name - */ - public void setConfigfile(final String configfile) { - this.configfile = configfile; - } - - /** - * Enable or disable JOnaS master property. - * @param master enabled (true or false) - */ - public void setMaster(final boolean master) { - this.master = master; - } - - /** - * Enable or disable JOnaS development property. - * @param development enabled (true or false) - */ - public void setDevelopment(final boolean development) { - this.development = development; - } - - /** - * Enable or disable JOnaS EAR gen Client Stub call. - * @param genClientStub enabled (true or false) - */ - public void setEarClientStub(final boolean genClientStub) { - this.genClientStub = genClientStub; - } - - /** - * Sets the EJB3 JPA provider. - * @param ejb3JpaProvider the JPA provider - */ - public void setEjb3JpaProvider(final String ejb3JpaProvider) { - this.ejb3JpaProvider = ejb3JpaProvider; - } - - /** - * Sets the work directory. - * @param workDirectory the working directory - */ - public void setWorkDirectory(final String workDirectory) { - this.workDirectory = workDirectory; - } - - /** - * Execute this task. - */ - @Override - public void execute() { - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, SERVICES_PROPERTY, services, false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, SECURITYMANAGER_PROPERTY, securitymanager.toString(), - false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, SECURITYPROPAGATIONPROPERTY, securitypropagation - .toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, CSIV2PROPAGATIONPROPERTY, - csiv2propagation.toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, TRANSACTIONPROPAGATIONPROPERTY, - transactionpropagation.toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, LOGCONFIGFILEPROPERTY, configfile, false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, MASTER_PROPERTY, master.toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, EAR_GENCLIENT_STUB, genClientStub.toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, DEVELOPMENTMODE, development.toString(), false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, EJB3_JPA_PROVIDER_PROPERTY, ejb3JpaProvider, false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, JONAS_WORKDIRECTORY_PROPERTY, workDirectory, false); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Lib.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Lib.java deleted file mode 100644 index f021a14dba..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Lib.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -/** - * Allow to copy files to lib/ext. - * @author Florent Benoit - */ -public class Lib extends JCopy implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[Lib] "; - - /** - * Directory for copying. - */ - private String dir = "ext"; - - /** - * Default constructor. - */ - public Lib() { - super(); - // Don't fail if the source directory doesn't exist - setFailOnError(false); - setLogInfo(INFO + "Copying files to lib folder"); - } - - /** - * Override method to copy files to lib/ext folder. - * @param destDir The destDir to set. - */ - @Override - public void setDestDir(final File destDir) { - File jBaseLibExtDir = new File(destDir.getPath() + File.separator + "lib" + File.separator + dir); - super.setDestDir(jBaseLibExtDir); - } - - /** - * Gets the directory. - * @return the directory - */ - public String getDir() { - return dir; - } - - /** - * Sets the directory. - * @param dir the directory to set - */ - public void setDir(final String dir) { - this.dir = dir; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Mail.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Mail.java deleted file mode 100644 index 3913062b12..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Mail.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.util.Properties; - -import org.ow2.jonas.ant.JOnASBaseTask; - -import org.apache.tools.ant.BuildException; - -/** - * Allow to create mail factory. - * @author Florent Benoit - */ -public class Mail extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[Mail] "; - - /** - * Property for Mail factories. - */ - private static final String MAILFACTORY_PROPERTY = "jonas.service.mail.factories"; - - /** - * Session factory. - */ - private static final String SESSION_FACTORY = "Session"; - - /** - * MimePartDataSource factory. - */ - private static final String MIMEPARTDATASOURCE_FACTORY = "MimePartDataSource"; - - /** - * Session factory class. - */ - private static final String SESSION_FACTORY_CLASS = "javax.mail.Session"; - - /** - * MimePartDataSource factory class. - */ - private static final String MIMEPARTDATASOURCE_FACTORY_CLASS = "javax.mail.internet.MimePartDataSource"; - - /** - * Type of factory (Session or MimePartDataSource). - */ - private String type = null; - - /** - * Name of the factory. - */ - private String name = null; - - /** - * Recipient (TO) of MimePartDataSource factory. - */ - private String mailTo = null; - - /** - * Subject of MimePartDataSource factory. - */ - private String subject = null; - - /** - * Host of the mail server. - */ - private String host = null; - - /** - * Sets the recipient (MimePartDataSource). - * @param mailTo recipient. - */ - public void setMailTo(final String mailTo) { - this.mailTo = mailTo; - } - - /** - * Sets the name. - * @param name name of the factory - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Sets the subject (MimePartDataSource). - * @param subject of the mail - */ - public void setSubject(final String subject) { - this.subject = subject; - } - - /** - * Sets the type of factory. - * @param type of factory - */ - public void setType(final String type) { - this.type = type; - } - - /** - * Sets the host of mail server. - * @param host host of mail server - */ - public void setHost(final String host) { - this.host = host; - } - /** - * Check the properties. - */ - private void checkProperties() { - if (name == null) { - throw new BuildException(INFO + "Property 'name' is missing."); - } else if (type == null) { - throw new BuildException(INFO + "Property 'type' is missing."); - } - } - - /** - * Execute this task. - */ - public void execute() { - checkProperties(); - - Properties props = new Properties(); - props.put("mail.factory.name", name); - String className = null; - - String infoTxt = "Generating a MailFactory with type '" + type + "' and name '" + name + "'"; - if(host != null) { - props.put("mail.host", host); - } - if (type.equalsIgnoreCase(SESSION_FACTORY)) { - className = SESSION_FACTORY_CLASS; - } else if (type.equalsIgnoreCase(MIMEPARTDATASOURCE_FACTORY)) { - className = MIMEPARTDATASOURCE_FACTORY_CLASS; - // Set mailTo - if (mailTo != null) { - props.put("mail.to", mailTo); - infoTxt += ", mailTo field '" + mailTo + "'"; - } - // Subject - if (subject != null) { - props.put("mail.subject", subject); - infoTxt += ", subject '" + subject + "'"; - } - - } else { - throw new BuildException(INFO + "Invalid type '" + type + "'."); - } - - // Display info - log(INFO + infoTxt + "..."); - - // Set type - props.put("mail.factory.type", className); - - // Build new mail factory - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - - String propsFileName = jBaseConf + File.separator + name + ".properties"; - File tmpFile = new File(propsFileName); - - writePropsToFile(INFO, props, tmpFile); - - // Now add name to the existing list for the property - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, MAILFACTORY_PROPERTY, name, true); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/PropertyTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/PropertyTask.java deleted file mode 100644 index 36df158a94..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/PropertyTask.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.PropertyStatement; - - -/** - * Task that replaces or adds any property in a file located in JONAS_BASE/conf. - * @author eyindanga - * - */ -public class PropertyTask extends JTask implements BaseTaskItf { - /** - * Info for the logger. - */ - private static final String INFO = "[PropertyTask] "; - /** - * Properties to be replaced or added for each file. - */ - private Hashtable> properties4file = new Hashtable>(); - /** - * Default constructor. - */ - public PropertyTask() { - - } - /** - * Add a property statement. - * @param fileName The file where the property is located. - * @param propertyName name of the property - * @param propertyValue value of the property - * @param add if true then, add it, else replace it. - */ - public void addPropertyStatement(final String fileName, final String propertyName, - final String propertyValue, final boolean add) { - addPropertyStatement(fileName, new PropertyStatement(propertyName, propertyValue, add)); - } - /** - * Add a property statement. - * @param fileName The file where the property is located. - * @param statement the property statement to add or replace. - */ - public void addPropertyStatement(final String fileName, final PropertyStatement statement) { - - List statements = properties4file.get(fileName); - if (statements == null) { - statements = new ArrayList(); - properties4file.put(fileName, statements); - } - statements.add(statement); - } - - /** - * Add properties statements. - * @param fileName The file where the properties are located. - * @param vstatement the properties statements to add or replace. - */ - public void addPropertyStatements(final String fileName, final List vstatements) { - - List statements = properties4file.get(fileName); - if (statements == null) { - statements = new ArrayList(); - properties4file.put(fileName, statements); - } - statements.addAll(vstatements); - } - /** - * Executes this task. - */ - @Override - public void execute() throws BuildException { - super.execute(); - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - for (Iterator>> iterator = properties4file.entrySet().iterator(); iterator.hasNext();) { - Entry> entry = iterator.next(); - String fileName = entry.getKey(); - log(INFO + ": Replace statements " + entry.getValue() + " in '" + getDestDir().getPath() - + File.separator + fileName + "'"); - for (Iterator iterator2 = entry.getValue().iterator(); iterator2.hasNext();) { - PropertyStatement statement = iterator2.next(); - changeValueForKey(INFO, jBaseConf, fileName, statement.getName(), - statement.getValue(), statement.isAdd()); - } - } - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Replace.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Replace.java deleted file mode 100644 index c53270fccb..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Replace.java +++ /dev/null @@ -1,636 +0,0 @@ -/* - * Copyright 2000-2004 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributor: Shenheng Liang - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.Enumeration; -import java.util.Properties; -import java.util.Vector; - -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.Delete; -import org.apache.tools.ant.taskdefs.MatchingTask; -import org.apache.tools.ant.taskdefs.Move; -import org.apache.tools.ant.util.FileUtils; -import org.apache.tools.ant.util.StringUtils; - -/** - * Replaces all occurrences of one or more string tokens with given - * values in the indicated files. Each value can be either a string - * or the value of a property available in a designated property file. - * If you want to replace a text that crosses line boundaries, you - * must use a nested <replacetoken> element. - * - * @since Ant 1.1 - * - * @ant.task category="filesystem" - */ -public class Replace extends MatchingTask { - - private File src = null; - - private NestedString token = null; - - private NestedString value = new NestedString(); - - private File propertyFile = null; - - private File replaceFilterFile = null; - - private Properties properties = null; - - private Vector replacefilters = new Vector(); - - private File dir = null; - - private int fileCount; - - private int replaceCount; - - private boolean summary = false; - - /** The encoding used to read and write files - if null, uses default */ - private String encoding = null; - - private FileUtils fileUtils = FileUtils.newFileUtils(); - - /** - * an inline string to use as the replacement text - */ - public class NestedString { - - private StringBuffer buf = new StringBuffer(); - - /** - * the text of the element - * - * @param val the string to add - */ - public void addText(final String val) { - buf.append(val); - } - - /** - * @return the text - */ - public String getText() { - return buf.substring(0); - } - } - - /** - * A filter to apply. - */ - public class Replacefilter { - private String token; - - private String value; - - private String property; - - /** - * validate the filter's configuration - * @throws BuildException if any part is invalid - */ - public void validate() throws BuildException { - //Validate mandatory attributes - if (token == null) { - String message = "token is a mandatory attribute " + "of replacefilter."; - throw new BuildException(message); - } - - if ("".equals(token)) { - String message = "The token attribute must not be an empty " + "string."; - throw new BuildException(message); - } - - //value and property are mutually exclusive attributes - if ((value != null) && (property != null)) { - String message = "Either value or property " + "can be specified, but a replacefilter " - + "element cannot have both."; - throw new BuildException(message); - } - - if ((property != null)) { - //the property attribute must have access to a property file - if (propertyFile == null) { - String message = "The replacefilter's property attribute " + "can only be used with the replacetask's " - + "propertyFile attribute."; - throw new BuildException(message); - } - - //Make sure property exists in property file - if (properties == null || properties.getProperty(property) == null) { - String message = "property \"" + property + "\" was not found in " + propertyFile.getPath(); - throw new BuildException(message); - } - } - } - - /** - * Get the replacement value for this filter token. - * @return the replacement value - */ - public String getReplaceValue() { - if (property != null) { - return properties.getProperty(property); - } else if (value != null) { - return value; - } else if (Replace.this.value != null) { - return Replace.this.value.getText(); - } else { - //Default is empty string - return new String(""); - } - } - - /** - * Set the token to replace - * @param token token - */ - public void setToken(final String token) { - this.token = token; - } - - /** - * Get the string to search for - * @return current token - */ - public String getToken() { - return token; - } - - /** - * The replacement string; required if property - * is not set - * @param value value to replace - */ - public void setValue(final String value) { - this.value = value; - } - - /** - * Get replacements string - * @return replacement or null - */ - public String getValue() { - return value; - } - - /** - * Set the name of the property whose value is to serve as - * the replacement value; required if value is not set. - * @param property propname - */ - public void setProperty(final String property) { - this.property = property; - } - - /** - * Get the name of the property whose value is to serve as - * the replacement value; - * @return property or null - */ - public String getProperty() { - return property; - } - } - - /** - * Do the execution. - * @throws BuildException if we cant build - */ - @Override - public void execute() throws BuildException { - - Vector savedFilters = (Vector) replacefilters.clone(); - Properties savedProperties = properties == null ? null : (Properties) properties.clone(); - - try { - if (replaceFilterFile != null) { - Properties props = getProperties(replaceFilterFile); - Enumeration e = props.keys(); - while (e.hasMoreElements()) { - String token = e.nextElement().toString(); - Replacefilter replaceFilter = createReplacefilter(); - replaceFilter.setToken(token); - replaceFilter.setValue(props.getProperty(token)); - } - } - - validateAttributes(); - - if (propertyFile != null) { - properties = getProperties(propertyFile); - } - - validateReplacefilters(); - fileCount = 0; - replaceCount = 0; - - if (src != null) { - processFile(src); - } - - if (dir != null) { - DirectoryScanner ds = super.getDirectoryScanner(dir); - String[] srcs = ds.getIncludedFiles(); - - for (int i = 0; i < srcs.length; i++) { - File file = new File(dir, srcs[i]); - processFile(file); - } - } - - if (summary) { - log("Replaced " + replaceCount + " occurrences in " + fileCount + " files.", Project.MSG_INFO); - } - } finally { - replacefilters = savedFilters; - properties = savedProperties; - } // end of finally - - } - - /** - * Validate attributes provided for this task in .xml build file. - * - * @exception BuildException if any supplied attribute is invalid or any - * mandatory attribute is missing - */ - public void validateAttributes() throws BuildException { - if (src == null && dir == null) { - String message = "Either the file or the dir attribute " + "must be specified"; - throw new BuildException(message, getLocation()); - } - if (propertyFile != null && !propertyFile.exists()) { - String message = "Property file " + propertyFile.getPath() + " does not exist."; - throw new BuildException(message, getLocation()); - } - if (token == null && replacefilters.size() == 0) { - String message = "Either token or a nested replacefilter " + "must be specified"; - throw new BuildException(message, getLocation()); - } - if (token != null && "".equals(token.getText())) { - String message = "The token attribute must not be an empty string."; - throw new BuildException(message, getLocation()); - } - } - - /** - * Validate nested elements. - * - * @exception BuildException if any supplied attribute is invalid or any - * mandatory attribute is missing - */ - public void validateReplacefilters() throws BuildException { - for (int i = 0; i < replacefilters.size(); i++) { - Replacefilter element = (Replacefilter) replacefilters.elementAt(i); - element.validate(); - } - } - - /** - * helper method to load a properties file and throw a build exception - * if it cannot be loaded - * @param propertyFile the file to load the properties from - * @return loaded properties collection - * @throws BuildException if the file could not be found or read - */ - public Properties getProperties(final File propertyFile) throws BuildException { - Properties properties = new Properties(); - - FileInputStream in = null; - try { - in = new FileInputStream(propertyFile); - properties.load(in); - } catch (FileNotFoundException e) { - String message = "Property file (" + propertyFile.getPath() + ") not found."; - throw new BuildException(message); - } catch (IOException e) { - String message = "Property file (" + propertyFile.getPath() + ") cannot be loaded."; - throw new BuildException(message); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - // ignore - } - } - } - - return properties; - } - - /** - * Perform the replacement on the given file. - * - * The replacement is performed on a temporary file which then - * replaces the original file. - * - * Re-implement the rename part. - * - * @author Shenheng Liang - * @param src the source file - */ - private void processFile(final File src) throws BuildException { - if (!src.exists()) { - throw new BuildException("Replace: source file " + src.getPath() + " doesn't exist", getLocation()); - } - - File temp = fileUtils.createTempFile("rep", ".tmp", fileUtils.getParentFile(src)); - temp.deleteOnExit(); - - Reader reader = null; - Writer writer = null; - try { - reader = encoding == null ? new FileReader(src) : new InputStreamReader(new FileInputStream(src), encoding); - writer = encoding == null ? new FileWriter(temp) : new OutputStreamWriter(new FileOutputStream(temp), encoding); - - BufferedReader br = new BufferedReader(reader); - BufferedWriter bw = new BufferedWriter(writer); - - String buf = fileUtils.readFully(br); - if (buf == null) { - buf = ""; - } - - //Preserve original string (buf) so we can compare the result - String newString = new String(buf); - - if (token != null) { - // line separators in values and tokens are "\n" - // in order to compare with the file contents, replace them - // as needed - String val = stringReplace(value.getText(), "\r\n", "\n", false); - val = stringReplace(val, "\n", StringUtils.LINE_SEP, false); - String tok = stringReplace(token.getText(), "\r\n", "\n", false); - tok = stringReplace(tok, "\n", StringUtils.LINE_SEP, false); - - // for each found token, replace with value - log("Replacing in " + src.getPath() + ": " + token.getText() + " --> " + value.getText(), Project.MSG_VERBOSE); - newString = stringReplace(newString, tok, val, true); - } - - if (replacefilters.size() > 0) { - newString = processReplacefilters(newString, src.getPath()); - } - - boolean changes = !newString.equals(buf); - if (changes) { - bw.write(newString, 0, newString.length()); - bw.flush(); - } - - // cleanup - bw.close(); - writer = null; - br.close(); - reader = null; - - // If there were changes, move the new one to the old one; - // otherwise, delete the new one - if (changes) { - ++fileCount; - - //The original implementation of renaming file - //fileUtils.rename(temp, src); - //end of original implementation - - //The new implemention of renaming file - Project tempProject = new Project(); - Delete delete = new Delete(); - delete.setProject(tempProject); - delete.setFile(src); - delete.execute(); - Move mv =new Move(); - mv.setProject(tempProject); - mv.setFile(temp); - mv.setTofile(src); - mv.execute(); - //end of the modification - - temp = null; - - } - } catch (IOException ioe) { - throw new BuildException("IOException in " + src + " - " + ioe.getClass().getName() + ":" + ioe.getMessage(), ioe, - getLocation()); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - // ignore - } - } - if (writer != null) { - try { - writer.close(); - } catch (IOException e) { - // ignore - } - } - if (temp != null) { - temp.delete(); - } - } - - } - - /** - * apply all replace filters to a buffer - * @param buffer string to filter - * @param filename filename for logging purposes - * @return filtered string - */ - private String processReplacefilters(final String buffer, final String filename) { - String newString = new String(buffer); - - for (int i = 0; i < replacefilters.size(); i++) { - Replacefilter filter = (Replacefilter) replacefilters.elementAt(i); - - //for each found token, replace with value - log("Replacing in " + filename + ": " + filter.getToken() + " --> " + filter.getReplaceValue(), Project.MSG_VERBOSE); - newString = stringReplace(newString, filter.getToken(), filter.getReplaceValue(), true); - } - - return newString; - } - - /** - * Set the source file; required unless dir is set. - * @param file source file - */ - public void setFile(final File file) { - this.src = file; - } - - /** - * Indicates whether a summary of the replace operation should be - * produced, detailing how many token occurrences and files were - * processed; optional, default=false - * - * @param summary true if you would like a summary logged of the - * replace operation - */ - public void setSummary(final boolean summary) { - this.summary = summary; - } - - /** - * Sets the name of a property file containing filters; optional. - * Each property will be treated as a - * replacefilter where token is the name of the property and value - * is the value of the property. - * @param filename file to load - */ - public void setReplaceFilterFile(final File filename) { - replaceFilterFile = filename; - } - - /** - * The base directory to use when replacing a token in multiple files; - * required if file is not defined. - * @param dir base dir - */ - public void setDir(final File dir) { - this.dir = dir; - } - - /** - * Set the string token to replace; - * required unless a nested - * replacetoken element or the replacefilterfile - * attribute is used. - * @param token token string - */ - public void setToken(final String token) { - createReplaceToken().addText(token); - } - - /** - * Set the string value to use as token replacement; - * optional, default is the empty string "" - * @param value replacement value - */ - public void setValue(final String value) { - createReplaceValue().addText(value); - } - - /** - * Set the file encoding to use on the files read and written by the task; - * optional, defaults to default JVM encoding - * - * @param encoding the encoding to use on the files - */ - public void setEncoding(final String encoding) { - this.encoding = encoding; - } - - /** - * the token to filter as the text of a nested element - * @return nested token to configure - */ - public NestedString createReplaceToken() { - if (token == null) { - token = new NestedString(); - } - return token; - } - - /** - * the string to replace the token as the text of a nested element - * @return replacement value to configure - */ - public NestedString createReplaceValue() { - return value; - } - - /** - * The name of a property file from which properties specified using - * nested <replacefilter> elements are drawn; - * Required only if property attribute of - * <replacefilter> is used. - * @param filename file to load - */ - public void setPropertyFile(final File filename) { - propertyFile = filename; - } - - /** - * Add a nested <replacefilter> element. - * @return a nested ReplaceFilter object to be configured - */ - public Replacefilter createReplacefilter() { - Replacefilter filter = new Replacefilter(); - replacefilters.addElement(filter); - return filter; - } - - /** - * Replace occurrences of str1 in string str with str2 - */ - private String stringReplace(final String str, final String str1, final String str2, final boolean countReplaces) { - StringBuffer ret = new StringBuffer(); - int start = 0; - int found = str.indexOf(str1); - while (found >= 0) { - // write everything up to the found str1 - if (found > start) { - ret.append(str.substring(start, found)); - } - - // write the replacement str2 - if (str2 != null) { - ret.append(str2); - } - - // search again - start = found + str1.length(); - found = str.indexOf(str1, start); - if (countReplaces) { - ++replaceCount; - } - } - - // write the remaining characters - if (str.length() > start) { - ret.append(str.substring(start, str.length())); - } - - return ret.toString(); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Services.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Services.java deleted file mode 100644 index c33beed3c9..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Services.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.ant.JOnASBaseTask; - -/** - * Allow to configure the list of services in jonas.properties file. - * @author Florent Benoit - */ -public class Services extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[JOnAS] "; - - /** - * Enable the Security manager - */ - private Boolean securitymanager = Boolean.TRUE; - - /** - * SecurityManager property - */ - private static final String SECURITYMANAGER_PROPERTY = "jonas.security.manager"; - - /** - * Services property. - */ - private static final String SERVICES_PROPERTY = "jonas.services"; - - /** - * List of services names. - */ - private String serviceNames = null; - - /** - * Default constructor. - */ - public Services() { - super(); - } - - /** - * Set the names of the services. - * @param serviceNames list of services - */ - public void setNames(final String serviceNames) { - this.serviceNames = serviceNames; - } - - /** - * Enable or disable SecurityManager - * @param securitymanager (true or false) - */ - public void setSecurityManager(final boolean securitymanager) { - this.securitymanager = Boolean.valueOf(securitymanager); - } - - /** - * Check the properties. - */ - private void checkProperties() { - if (serviceNames == null) { - throw new BuildException(INFO + "Property 'services ' is missing."); - } - } - - /** - * Execute this task. - */ - @Override - public void execute() { - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, SERVICES_PROPERTY, serviceNames, false); - changeValueForKey(INFO, jBaseConf, JOnASBaseTask.JONAS_CONF_FILE, SECURITYMANAGER_PROPERTY, securitymanager.toString(), false); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Tasks.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Tasks.java deleted file mode 100644 index 7dfee8edc8..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/Tasks.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.tools.ant.Task; - -/** - * @author Florent Benoit - */ -public class Tasks { - - /** - * List of tasks. - */ - private List tasks = null; - - /** - * Default constructor. - */ - public Tasks() { - tasks = new ArrayList(); - } - - /** - * Add a task to the list of defined tasks. - * @param task to add - */ - public void addTask(final Task task) { - tasks.add(task); - } - - /** - * @return a list of all tasks to do - */ - public List getTasks() { - return tasks; - } - - /** - * Add several tasks. - * @param subTasks some tasks to do - */ - public void addTasks(final Tasks subTasks) { - if (subTasks != null) { - for (Task task : subTasks.getTasks()) { - addTask(task); - } - } - } - - /** - * Add several tasks. - * @param tasks some tasks to do - */ - public void addTasks(final List tasks) { - if (tasks != null) { - for (Task task : tasks) { - addTask(task); - } - } - } - } diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/WebContainer.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/WebContainer.java deleted file mode 100644 index 4fe31efdb2..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/WebContainer.java +++ /dev/null @@ -1,219 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import org.ow2.jonas.ant.JOnASBaseTask; - -import org.apache.tools.ant.Task; - -import org.ow2.jonas.ant.jonasbase.web.Jetty; -import org.ow2.jonas.ant.jonasbase.web.Tomcat; - -/** - * Allow to configure the WebContainer service. - * - * @author Florent Benoit - */ -public class WebContainer extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[WebContainer] "; - - /** - * Name of the implementation class for Jetty. - */ - private static final String JETTY_SERVICE = "org.ow2.jonas.web.jetty6.Jetty6Service"; - - /** - * Name of the implementation class for Tomcat. - */ - private static final String TOMCAT_SERVICE = "org.ow2.jonas.web.tomcat6.Tomcat6Service"; - - /** - * Name of the implementation class for the default service (tomcat). - */ - private static final String DEFAULT_SERVICE = TOMCAT_SERVICE; - - /** - * Default port number. - */ - private static final String DEFAULT_PORT = "9000"; - - /** - * ondemand.enabled property. - */ - private static final String ONDEMANDENABLED = "jonas.service.web.ondemand.enabled"; - /** - * ondemand.enabled property token default value. - */ - private static final String ONDEMANDENABLEDTOKEN = "jonas.service.web.ondemand.enabled true"; - - /** - * ondemand.redirectPort property. - */ - private static final String ONDEMANDREDIRECTPORT = "jonas.service.web.ondemand.redirectPort"; - - /** - * ondemand.redirectPort property token default value - */ - private static final String ONDEMANDREDIRECTPORTTOKEN = "jonas.service.web.ondemand.redirectPort 0"; - - /** - * is serviceName set ? - */ - private boolean serviceNameSet = false; - - /** - * Default constructor. - */ - public WebContainer() { - super(); - } - - /** - * Set the port number for the WebContainer. - * Optionnal, if missing, we look at the inner element <jetty>/<http> or <tomcat>/<http>. - * It overrides both <jetty>/<http> or <tomcat>/<http> values if set. - * - * @param portNumber the port for the HTTP web Container - */ - public void setPort(final String portNumber) { - - // For tomcat - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Tomcat port number to : " + portNumber); - addTask(propertyReplace); - - // For Jetty - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JETTY_CONF_FILE); - propertyReplace.setToken(DEFAULT_PORT); - propertyReplace.setValue(portNumber); - propertyReplace.setLogInfo(INFO + "Setting Jetty port number to : " + portNumber); - addTask(propertyReplace); - } - - - /** - * Set the name of the web container : jetty or tomcat. - * Optionnal, if missing, we look at the inner element <jetty> or <tomcat>. - * This setting is priority 1 if both <jetty> or <tomcat> are set. - * - * @param containerName jetty or tomcat. - */ - public void setName(final String containerName) { - - if ("jetty".equalsIgnoreCase(containerName)) { - addTask(createServiceNameReplace(JETTY_SERVICE)); - serviceNameSet = true; - } else if ("tomcat".equalsIgnoreCase(containerName)) { - addTask(createServiceNameReplace(TOMCAT_SERVICE)); - serviceNameSet = true; - } - } - - /** - * Set the value of the jonas.service.web.ondemand.enabled property in jonas.properties. - * - * @param ondemandenabled - */ - public void setOndemandenabled(final String ondemandenabled) { - // Ondemandenabled Token to replace - String token = ONDEMANDENABLEDTOKEN; - String value = ONDEMANDENABLED + " " + ondemandenabled; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - propertyReplace.setLogInfo(INFO + "Setting "+ ONDEMANDENABLED+" to "+ondemandenabled); - addTask(propertyReplace); - } - - /** - * Set the value of the jonas.service.web.ondemand.redirectPort property in jonas.properties. - * - * @param portNumber - */ - public void setOndemandredirectPort(final String portNumber) { - // OndemanderedirectPort Token to replace - String token = ONDEMANDREDIRECTPORTTOKEN; - String value = ONDEMANDREDIRECTPORT+ " " + portNumber; - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(token); - propertyReplace.setValue(value); - propertyReplace.setLogInfo(INFO + "Setting "+ ONDEMANDREDIRECTPORT +" to "+portNumber); - addTask(propertyReplace); - } - - - /** - * Create a JReplace Task for changing service classname in jonas.properties. - * - * @param serviceName service classname to use. - * @return Returns a JReplace Task. - */ - private Task createServiceNameReplace(final String serviceName) { - // Replace the service in jonas.properties file - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setToken(DEFAULT_SERVICE); - propertyReplace.setValue(serviceName); - propertyReplace.setLogInfo(INFO + "Setting service to : " + serviceName); - return propertyReplace; - } - - /** - * Configure the Jetty WebContainer. - * - * @param jetty Jetty Configuration. - */ - public void addConfiguredJetty(final Jetty jetty) { - if (!serviceNameSet) { - addTask(createServiceNameReplace(JETTY_SERVICE)); - serviceNameSet = true; - } - addTasks(jetty); - } - - /** - * Configure the Tomcat WebContainer. - * - * @param tomcat Tomcat Configuration. - */ - public void addConfiguredTomcat(final Tomcat tomcat) { - if (!serviceNameSet) { - addTask(createServiceNameReplace(TOMCAT_SERVICE)); - serviceNameSet = true; - } - addTasks(tomcat); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/XMLSerializerTask.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/XMLSerializerTask.java deleted file mode 100644 index f15d2053f5..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/XMLSerializerTask.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; - -import org.ow2.util.xml.XMLSerializer; -import org.w3c.dom.Document; - -import org.apache.tools.ant.BuildException; - - -/** - * Allow to serialize a XML DOM structure. - * @author Philippe Coq - */ -public class XMLSerializerTask extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[XML Serializer] "; - - /** - * XML document to serialize. - */ - private Document xmlDoc = null; - - /** - * XML file name. - */ - private String fileName = null; - - /** - * Default constructor. - */ - public XMLSerializerTask() { - super(); - } - - /** - * Set the xml document to serialize. - * @param xmlDoc xml document - */ - public void setXmlDoc(final Document xmlDoc) { - this.xmlDoc = xmlDoc; - } - - /** - * Set the xml filename. - * @param fileName xml filename - */ - public void setXmlFileName(final String fileName) { - this.fileName = fileName; - } - - /** - * Check the properties. - */ - private void checkProperties() { - if (xmlDoc == null) { - throw new BuildException(INFO + "XML document is missing."); - } - if (fileName == null) { - throw new BuildException(INFO + "XML filename is missing."); - } - - } - - /** - * Execute this task. - */ - public void execute() { - checkProperties(); - - // Path to JONAS_BASE - String jBaseConf = getDestDir().getPath() + File.separator + "conf"; - String xmlFile = jBaseConf + File.separator + fileName; - - // Serialize the XML document - FileOutputStream os; - try { - os = new FileOutputStream(xmlFile); - } catch (FileNotFoundException e) { - throw new BuildException(INFO + "XML filename " + xmlFile + " is not valid", e); - } - XMLSerializer xmlSer = new XMLSerializer(xmlDoc); - try { - xmlSer.serialize(os); - } catch (IOException e) { - throw new BuildException(INFO + "Error during serialization of " + xmlFile, e); - } - - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JResourceLoginModule.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JResourceLoginModule.java deleted file mode 100644 index fc8f8b2fb5..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JResourceLoginModule.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.jaas; - -/** - * @author Julien Legrand - */ -public class JResourceLoginModule extends LoginModule { - - /** - * Class name of the JResourceLoginModule - */ - public static final String DEFAULT_LOGIN_MODULE_NAME = "org.ow2.jonas.security.auth.spi.JResourceLoginModule"; - - /** - * Default Resource name - */ - private static final String DEFAULT_RESOURCENAME = "memrlm_1"; - - /** - * Resource name - */ - private String resourceName = DEFAULT_RESOURCENAME; - - /** - * Server (JOnAS instance) name - */ - private String serverName = ""; - - /** - * Certificate callback needed - */ - private boolean certCallback = false; - - /** - * Case conversion needed - */ - private boolean useUpperCaseUsername = false; - - /** - * Constructor - */ - public JResourceLoginModule(){ - super(); - } - - /** - * @return Returns the resource name. - */ - public String getResourceName() { - return resourceName; - } - - /** - * @param resourceName the resource name to set. - */ - public void setResourceName(final String resourceName){ - this.resourceName = resourceName; - } - - /** - * @return Returns the server name. - */ - public String getServerName() { - return serverName; - } - - /** - * @param serverName the server name to set. - */ - public void setServerName(final String serverName) { - this.serverName = serverName; - } - - /** - * @return Returns true if a callback certificate is needed. False otherwise. - */ - public boolean isCertCallback() { - return certCallback; - } - - /** - * @param certCallback - */ - public void setCertCallback(final boolean certCallback) { - this.certCallback = certCallback; - } - - /** - * @return Returns true if the username needs to be converted in upper case. False otherwise. - */ - public boolean isUseUpperCaseUsername() { - return useUpperCaseUsername; - } - - /** - * @param useUpperCaseUsername - */ - public void setUseUpperCaseUsername(final boolean useUpperCaseUsername) { - this.useUpperCaseUsername = useUpperCaseUsername; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/Jaas.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/Jaas.java deleted file mode 100644 index 371c85d488..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/Jaas.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.jaas; - -import org.ow2.jonas.ant.jonasbase.Tasks; -import org.ow2.jonas.ant.jonasbase.JReplace; -import org.ow2.jonas.ant.JOnASBaseTask; -import org.apache.tools.ant.Task; - -/** - * Allow to configure JAAS - * @author Julien Legrand - */ -public class Jaas extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[JAAS] "; - - /** - * Token for the begin of the jaas.config configuration file. - */ - private static final String TOKEN_BEGIN_CONF_FILE = "jaasclient {"; - - /** - * Constructor - */ - public Jaas(){ - super(); - } - - /** - * Configure a JAAS entry - * @param entry the entry to configure. - */ - public void addConfiguredJaasEntry(final JaasEntry entry){ - - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JAAS_CONF_FILE); - propertyReplace.setToken(TOKEN_BEGIN_CONF_FILE); - StringBuffer value = new StringBuffer(); - - value.append(entry.getName() + "{" + "\n"); - for(LoginModule lm : entry.getLoginModules()){ - - if(lm instanceof JResourceLoginModule){ - - JResourceLoginModule rlm = (JResourceLoginModule) lm; - - value.append(" " + JResourceLoginModule.DEFAULT_LOGIN_MODULE_NAME + " " + lm.getFlag() + "\n"); - value.append(" " + "resourceName=\"" + rlm.getResourceName() + "\"" + "\n"); - - if(rlm.getServerName() != null && !"".equals(rlm.getServerName())){ - value.append(" " + "serverName=\"" + rlm.getServerName() + "\"" + "\n"); - } - if(rlm.isUseUpperCaseUsername()){ - value.append(" " + "useUpperCaseUsername=\"" + rlm.isUseUpperCaseUsername() + "\"" + "\n"); - } - if(rlm.isCertCallback()){ - value.append(" " + "certCallback=\"" + rlm.isCertCallback() + "\"" + "\n"); - } - } - - value.append("\n"); - } - - value.append(" " + ";" + "\n"); - value.append("};" + "\n"); - value.append("\n"); - value.append(TOKEN_BEGIN_CONF_FILE); - - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Add the JAAS entry : " + entry.getName()); - addTask(propertyReplace); - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JaasEntry.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JaasEntry.java deleted file mode 100644 index 2239237130..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/JaasEntry.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.jaas; - -import org.ow2.jonas.ant.jonasbase.Tasks; -import org.ow2.jonas.ant.jonasbase.JReplace; -import org.apache.tools.ant.Task; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Julien Legrand - */ -public class JaasEntry extends Tasks { - - /** - * Name of the JAAS entry - */ - private String name; - - /** - * List of login modules for the JAAS entry - */ - private List loginModules; - - /** - * Constructor - */ - public JaasEntry(){ - super(); - loginModules = new ArrayList(); - } - - /** - * - * @param lm - */ - public void addConfiguredJResourceLoginModule(final JResourceLoginModule lm){ - loginModules.add(lm); - } - - /** - * @return Returns the list of login modules. - */ - public List getLoginModules(){ - return loginModules; - } - - /** - * @return Returns the name of JAAS entry - */ - public String getName() { - return name; - } - - /** - * @param name the name of the JAAS entry to set. - */ - public void setName(final String name){ - this.name = name; - } -} - diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/LoginModule.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/LoginModule.java deleted file mode 100644 index 2576401178..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/jaas/LoginModule.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.jaas; - -import org.ow2.jonas.ant.jonasbase.Tasks; - -/** - * @author Julien Legrand - */ -public abstract class LoginModule { - - /** - * Default behaviour flag - */ - protected static final String DEFAUT_FLAG = "required"; - - /** - * Flag for the behaviour of the login module. - */ - protected String flag = DEFAUT_FLAG; - - /** - * @return Returns the flag of the login module - */ - public String getFlag() { - return flag; - } - - /** - * @param flag the flag to set. - */ - public void setFlag(String flag) { - this.flag = flag; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Ajp.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Ajp.java deleted file mode 100644 index 1de44e4a51..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Ajp.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -/** - * Support for AJP Connector Configuration. Tomcat only. - * - * - * @author Guillaume Sauthier - */ -public class Ajp { - - /** - * Default AJP Port. - */ - private static final String DEFAULT_AJP_PORT = "8009"; - - /** - * user specified port value. - */ - private String port = DEFAULT_AJP_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Cluster.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Cluster.java deleted file mode 100644 index 8f10c8895b..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Cluster.java +++ /dev/null @@ -1,131 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -/** - * Support for HTTP Session Clustering. Tomcat only. - * - * @author Guillaume Sauthier - */ -public class Cluster { - - /** - * Default MultiCast Host for HTTP Session Clustering. - */ - public static final String DEFAULT_MCAST_ADDR = "228.0.0.4"; - - /** - * Default MultiCast Port for HTTP Session Clustering. - */ - public static final String DEFAULT_MCAST_PORT = "45564"; - - /** - * Default listening port for HTTP Session Clustering. - */ - public static final String DEFAULT_LISTEN_PORT = "4001"; - - /** - * Default cluster name. - */ - public static final String DEFAULT_CLUSTER_NAME = "myTomcatCluster"; - - /** - * User specified Cluster listening port. - */ - private String listenPort = DEFAULT_LISTEN_PORT; - - /** - * User specified MultiCast port. - */ - private String mcastPort = DEFAULT_MCAST_PORT; - - /** - * User specified MultiCast address. - */ - private String mcastAddr = DEFAULT_MCAST_ADDR; - - /** - * Cluster name. - */ - private String name = DEFAULT_CLUSTER_NAME; - - - /** - * @return Returns the name. - */ - public String getName() { - return name; - } - - /** - * @param name The cluster name. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the listenPort. - */ - public String getListenPort() { - return listenPort; - } - - /** - * @param listenPort The listenPort to set. - */ - public void setListenPort(final String listenPort) { - this.listenPort = listenPort; - } - - /** - * @return Returns the mcastAddr. - */ - public String getMcastAddr() { - return mcastAddr; - } - - /** - * @param mcastAddr The mcastAddr to set. - */ - public void setMcastAddr(final String mcastAddr) { - this.mcastAddr = mcastAddr; - } - - /** - * @return Returns the mcastPort. - */ - public String getMcastPort() { - return mcastPort; - } - - /** - * @param mcastPort The mcastPort to set. - */ - public void setMcastPort(final String mcastPort) { - this.mcastPort = mcastPort; - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Director.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Director.java deleted file mode 100644 index 97688a7bf8..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Director.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -/** - * Support for Director Connector Configuration. Tomcat only. - * - * - * @author Guillaume Sauthier - */ -public class Director { - - /** - * Default Director Port. - */ - private static final String DEFAULT_DIRECTOR_PORT = "9999"; - - /** - * user specified port value. - */ - private String port = DEFAULT_DIRECTOR_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } - - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Http.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Http.java deleted file mode 100644 index 67736cd896..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Http.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -/** - * Configure an HTTPS Connector for Tomcat/Jetty. - * - * - * @author Guillaume Sauthier - */ -public class Http { - - /** - * Default HTTP Port. - */ - public static final String DEFAULT_PORT = "9000"; - - /** - * user specified port value. - */ - private String port = DEFAULT_PORT; - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Https.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Https.java deleted file mode 100644 index 0ac6ad357a..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Https.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -/** - * Configure an HTTPS Connector for Tomcat/Jetty. - * - * - * @author Guillaume Sauthier - */ -public class Https { - - /** - * Sun VM name. - */ - public static final String SUN_VM = "sun"; - - /** - * IBM VM name. - */ - public static final String IBM_VM = "ibm"; - - /** - * Default VM name. - */ - private static final String DEFAULT_VM = SUN_VM; - - /** - * Default HTTPS Port. - */ - public static final String DEFAULT_PORT = "9043"; - - /** - * user specified port value. - */ - private String port = DEFAULT_PORT; - - /** - * keystore filename. - */ - private String keystoreFile = null; - - /** - * keystore password. - */ - private String keystorePass = null; - - /** - * key password (only for Jetty). - */ - private String keyPassword = null; - - /** - * Targeted VM (Only used for Jetty HTTPS Listener). - */ - private String vm = DEFAULT_VM; - - /** - * @return Returns the keystore. - */ - public String getKeystoreFile() { - return keystoreFile; - } - - /** - * @param keystore The keystore to set. - */ - public void setKeystoreFile(final String keystore) { - this.keystoreFile = keystore; - } - - /** - * @return Returns the password. - */ - public String getKeystorePass() { - return keystorePass; - } - - /** - * @param password The password to set. - */ - public void setKeystorePass(final String password) { - this.keystorePass = password; - } - - /** - * @return Returns the port. - */ - public String getPort() { - return port; - } - - /** - * @param port The port to set. - */ - public void setPort(final String port) { - this.port = port; - } - - /** - * @return Returns the vm. - */ - public String getVm() { - return vm; - } - - /** - * @param vm The vm to set. - */ - public void setVm(final String vm) { - this.vm = vm; - } - - /** - * @return Returns the keyPassword. - */ - public String getKeyPassword() { - return keyPassword; - } - - /** - * @param keyPassword The keyPassword to set. - */ - public void setKeyPassword(final String keyPassword) { - this.keyPassword = keyPassword; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Jetty.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Jetty.java deleted file mode 100644 index b70affbba7..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Jetty.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -import org.ow2.jonas.ant.JOnASBaseTask; -import org.ow2.jonas.ant.jonasbase.JReplace; -import org.ow2.jonas.ant.jonasbase.Tasks; - - -/** - * Support Jetty Connector Configuration. - * - * @author Guillaume Sauthier - */ -public class Jetty extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[Jetty] "; - - /** - * HTTPS TOKEN. - */ - private static final String HTTPS_TOKEN = "\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - if (Https.IBM_VM.equalsIgnoreCase(https.getVm())) { - value.append(" \n"); - } else { - // default to Sun - value.append(" \n"); - } - value.append(" " + https.getPort() + "\n"); - value.append(" 5\n"); - value.append(" 100\n"); - value.append(" 30000\n"); - value.append(" 2000\n"); - if (https.getKeystoreFile() != null) { - value.append(" " + https.getKeystoreFile() + "\n"); - } - if (https.getKeystorePass() != null) { - value.append(" " + https.getKeystorePass() + "\n"); - } - if (https.getKeyPassword() != null) { - value.append(" " + https.getKeyPassword() + "\n"); - } - value.append(" \n"); - value.append(" \n"); - value.append(" \n\n"); - value.append(" \n"); - value.append(" " + HTTPS_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting HTTPS port number to : " + https.getPort()); - addTask(propertyReplace); - - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JETTY_CONF_FILE); - propertyReplace.setToken(Https.DEFAULT_PORT); - propertyReplace.setValue(https.getPort()); - propertyReplace.setLogInfo(INFO + "Fix HTTP redirect port number to : " + https.getPort()); - addTask(propertyReplace); - - - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - public void addConfiguredAjp(final Ajp ajp) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.JETTY_CONF_FILE); - propertyReplace.setToken(AJP_TOKEN); - StringBuffer value = new StringBuffer(); - value.append("\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" " + ajp.getPort() + "\n"); - value.append(" 5\n"); - value.append(" 20\n"); - value.append(" 0\n"); - value.append(" 9043\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n\n"); - value.append(" \n"); - value.append(" " + AJP_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting AJP Connector to : " + ajp.getPort()); - addTask(propertyReplace); - } - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Tomcat.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Tomcat.java deleted file mode 100644 index 41e658e5b6..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/web/Tomcat.java +++ /dev/null @@ -1,294 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ant.jonasbase.web; - -import org.ow2.jonas.ant.JOnASBaseTask; -import org.ow2.jonas.ant.jonasbase.JReplace; -import org.ow2.jonas.ant.jonasbase.Tasks; - - -/** - * Support Tomcat Connector Configuration. - * Prefered order : http, director, ajp, https, cluster. - * - * @author Guillaume Sauthier - */ -public class Tomcat extends Tasks { - - /** - * Info for the logger. - */ - private static final String INFO = "[Tomcat] "; - - /** - * Tomcat AJP Connector token. - */ - private static final String AJP_CONNECTOR_TOKEN = "\n"); - value.append(" \n\n"); - value.append(" " + HTTPS_CONNECTOR_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting HTTPS Connector to : " + https.getPort()); - addTask(propertyReplace); - - // Replace redirect port value in HTTP Connector - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(" redirectPort=\"" + Https.DEFAULT_PORT + "\" "); - propertyReplace.setValue(" redirectPort=\"" + https.getPort() + "\" "); - propertyReplace.setLogInfo(INFO + "Fix HTTP redirect port number to : " + https.getPort()); - addTask(propertyReplace); - - } - - /** - * Configure an AJP Connector. - * @param ajp AJP Configuration. - */ - public void addConfiguredAjp(final Ajp ajp) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(AJP_CONNECTOR_TOKEN); - StringBuffer value = new StringBuffer(); - value.append(" \n"); - value.append(" \n\n"); - value.append(" " + AJP_CONNECTOR_TOKEN); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting AJP Connector to : " + ajp.getPort()); - addTask(propertyReplace); - - } - - /** - * Configure a jvmRoute. - * @param jvmRoute jvm route name - */ - public void setJvmRoute(final String jvmRoute) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(JVM_ROUTE_TOKEN); - StringBuffer value = new StringBuffer(); - value.append(""); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting the jvmRoute to : " + jvmRoute); - addTask(propertyReplace); - } - - /** - * Configure a Director Connector. - * @param dir Director Configuration. - */ - public void addConfiguredDirector(final Director dir) { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - - propertyReplace.setToken(DIRECTOR_CONNECTOR_TOKEN); - StringBuffer value = new StringBuffer(); - value.append("\n"); - value.append(" \n\n"); - value.append(" " + DIRECTOR_CONNECTOR_TOKEN); - - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting Director Connector to : " + dir.getPort()); - addTask(propertyReplace); - - } - - /** - * Configure a Cluster HTTP Session. - * @param cluster Cluster HTTP Session. - */ - public void addConfiguredCluster(final Cluster cluster) { - // General Cluster configuration - setCluster(); - - // Cluster name - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(Cluster.DEFAULT_CLUSTER_NAME); - propertyReplace.setValue(cluster.getName()); - propertyReplace.setLogInfo(INFO + "Setting Cluster name : " + cluster.getName()); - addTask(propertyReplace); - - // Cluster listening port - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(Cluster.DEFAULT_LISTEN_PORT); - propertyReplace.setValue(cluster.getListenPort()); - propertyReplace.setLogInfo(INFO + "Setting Cluster listen port : " + cluster.getListenPort()); - addTask(propertyReplace); - - // Cluster Multicast Address - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(Cluster.DEFAULT_MCAST_ADDR); - propertyReplace.setValue(cluster.getMcastAddr()); - propertyReplace.setLogInfo(INFO + "Setting Cluster multicast addr : " + cluster.getMcastAddr()); - addTask(propertyReplace); - - // Cluster Multicast Port - propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(Cluster.DEFAULT_MCAST_PORT); - propertyReplace.setValue(cluster.getMcastPort()); - propertyReplace.setLogInfo(INFO + "Setting Cluster multicast port : " + cluster.getMcastPort()); - addTask(propertyReplace); - - } - - /** - * Enable the cluster feature. - */ - private void setCluster() { - JReplace propertyReplace = new JReplace(); - propertyReplace.setConfigurationFile(JOnASBaseTask.TOMCAT_CONF_FILE); - propertyReplace.setToken(""); - StringBuffer value = new StringBuffer("\n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - // " " +"\n" + - value.append(" \n"); - value.append(" \n"); - value.append(" \n"); - value.append(" "); - propertyReplace.setValue(value.toString()); - propertyReplace.setLogInfo(INFO + "Setting Cluster"); - addTask(propertyReplace); - } - - /** - * @return Returns true if HTTP is configured. - */ - public boolean isHttpConfigured() { - return httpConfigured; - } - - -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/File.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/File.java deleted file mode 100644 index 56ae9e10ae..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/File.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.wsdl; - - -/** - * Defines a file for WSDL publication. - * @author Florent Benoit - */ -public class File { - - /** - * Directory for publish. - */ - private String dir = null; - - /** - * Class for FileWSDL publisher. - */ - public static final String PUBLISHER_CLASS = "org.ow2.jonas.ws.publish.internal.file.FileWSDLPublisher"; - - /** - * Default encoding. - */ - private static final String DEFAULT_ENCODING = "UTF-8"; - - /** - * User defined encoding. - */ - - private String encoding = DEFAULT_ENCODING; - - /** - * Name of the file. - */ - private String name = null; - - /** - * Gets the directory. - * @return the directory - */ - public String getDir() { - return dir; - } - - /** - * Sets the directory. - * @param dir the directory to set - */ - public void setDir(final String dir) { - this.dir = dir; - } - - /** - * Gets the encoding. - * @return the encoding. - */ - public String getEncoding() { - return encoding; - } - - /** - * Sets the encoding. - * @param encoding the encoding to set. - */ - public void setEncoding(final String encoding) { - this.encoding = encoding; - } - - /** - * Gets the name. - * @return the name. - */ - public String getName() { - return name; - } - - /** - * Sets the name. - * @param name name to set. - */ - public void setName(final String name) { - this.name = name; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/Uddi.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/Uddi.java deleted file mode 100644 index e197e34cc2..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/Uddi.java +++ /dev/null @@ -1,192 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2008 Bull S.A. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.wsdl; - -/** - * Defines a UDDI configuration file for WSDL publication. - * @author Florent Benoit - */ -public class Uddi { - - /** - * Class for RegistryWsdl publisher. - */ - public static final String PUBLISHER_CLASS = "org.ow2.jonas.ws.publish.internal.registry.RegistryWSDLPublisher"; - - /** - * Name of the file. - */ - private String name = null; - - /** - * Username. - */ - private String userName = null; - - /** - * Password. - */ - private String password = null; - - /** - * Organization name. - */ - private String orgName = null; - - /** - * Organization Description. - */ - private String orgDesc = null; - - /** - * Organization Person name. - */ - private String orgPersonName = null; - - /** - * url : lifecyclemanagerURL. - */ - private String lifecyclemanagerURL = null; - - /** - * url : queryManagerURL. - */ - private String queryManagerURL = null; - - /** - * Gets the name. - * @return the name. - */ - public String getName() { - return name; - } - - /** - * Sets the name. - * @param name name to set. - */ - public void setName(final String name) { - this.name = name; - } - - /** - * @return Returns the lifecyclemanagerURL. - */ - public String getLifecyclemanagerURL() { - return lifecyclemanagerURL; - } - - /** - * @param lifecyclemanagerURL The lifecyclemanagerURL to set. - */ - public void setLifecyclemanagerURL(final String lifecyclemanagerURL) { - this.lifecyclemanagerURL = lifecyclemanagerURL; - } - - /** - * @return Returns the orgDesc. - */ - public String getOrgDesc() { - return orgDesc; - } - - /** - * @param orgDesc The orgDesc to set. - */ - public void setOrgDesc(final String orgDesc) { - this.orgDesc = orgDesc; - } - - /** - * @return Returns the orgName. - */ - public String getOrgName() { - return orgName; - } - - /** - * @param orgName The orgName to set. - */ - public void setOrgName(final String orgName) { - this.orgName = orgName; - } - - /** - * @return Returns the orgPersonName. - */ - public String getOrgPersonName() { - return orgPersonName; - } - - /** - * @param orgPersonName The orgPersonName to set. - */ - public void setOrgPersonName(final String orgPersonName) { - this.orgPersonName = orgPersonName; - } - - /** - * @return Returns the password. - */ - public String getPassword() { - return password; - } - - /** - * @param password The password to set. - */ - public void setPassword(final String password) { - this.password = password; - } - - /** - * @return Returns the queryManagerURL. - */ - public String getQueryManagerURL() { - return queryManagerURL; - } - - /** - * @param queryManagerURL The queryManagerURL to set. - */ - public void setQueryManagerURL(final String queryManagerURL) { - this.queryManagerURL = queryManagerURL; - } - - /** - * @return Returns the userName. - */ - public String getUserName() { - return userName; - } - - /** - * @param userName The userName to set. - */ - public void setUserName(final String userName) { - this.userName = userName; - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/WsdlPublish.java b/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/WsdlPublish.java deleted file mode 100644 index 17805094eb..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/java/org/ow2/jonas/ant/jonasbase/wsdl/WsdlPublish.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ant.jonasbase.wsdl; - -import org.ow2.jonas.ant.JOnASBaseTask; -import org.ow2.jonas.ant.jonasbase.BaseTaskItf; -import org.ow2.jonas.ant.jonasbase.JReplace; -import org.ow2.jonas.ant.jonasbase.JTask; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - - -/** - * Generates files for WSDL publish. - * @author Florent Benoit - */ -public class WsdlPublish extends JTask implements BaseTaskItf { - - /** - * Info for the logger. - */ - private static final String INFO = "[WSDL-Publish] "; - - /** - * Property for WSDL Publishers. - */ - private static final String WSDL_PUBLISHER_PROPERTY = "jonas.service.wsdl-publisher.publishers"; - - /** - * Default property for WSDL publishers. - */ - private static final String TOKEN_WSDLPUBLISHER = WSDL_PUBLISHER_PROPERTY + SEPARATORS + "file1"; - - /** - * List of files (WSDL publish). - */ - private List files = new ArrayList(); - - /** - * List of uddi (WSDL publish). - */ - private List uddis = new ArrayList(); - - /** - * Add file (wsdl publish). - * @param file properties file - */ - public void addConfiguredFile(final File file) { - files.add(file); - } - - /** - * Add UDDI (wsdl publish). - * @param uddi properties file - */ - public void addConfiguredUddi(final Uddi uddi) { - uddis.add(uddi); - } - - /** - * set files (wsdl publish). - * @param files list of properties file - */ - public void setFiles(final List files) { - this.files = files; - } - - /** - * set uddis (wsdl publish). - * @param uddis list of properties uddi file - */ - public void setUddis(final List uddis) { - this.uddis = uddis; - } - - /** - * Execute this task. - */ - public void execute() { - - String fileNameList = ""; - - java.io.File jonasBaseConfDir = new java.io.File(getDestDir().getPath() + java.io.File.separator + "conf"); - - // Write file Publisher - for (Iterator it = files.iterator(); it.hasNext();) { - File f = it.next(); - - String dir = f.getDir(); - String encoding = f.getEncoding(); - String name = f.getName(); - - // Add file to handler list - if (fileNameList.length() == 0) { - fileNameList = name; - } else { - fileNameList += "," + name; - } - - String fileName = name + ".properties"; - - // Build properties file and write it - Properties props = new Properties(); - props.put("jonas.service.wsdl.class", File.PUBLISHER_CLASS); - props.put("jonas.service.publish.file.directory", dir); - props.put("jonas.service.publish.file.encoding", encoding); - java.io.File writeFile = new java.io.File(jonasBaseConfDir, fileName); - log(INFO + "Generating a WSDL publish file with name '" + name + "', dir '" + dir + "' and encoding '" - + encoding + "' in file '" + writeFile + "'..."); - writePropsToFile(INFO, props, writeFile); - } - - // Write Uddi Publisher - for (Iterator it = uddis.iterator(); it.hasNext();) { - Uddi uddi = it.next(); - - String name = uddi.getName(); - String username = uddi.getUserName(); - String password = uddi.getPassword(); - String orgName = uddi.getOrgName(); - String orgDesc = uddi.getOrgDesc(); - String orgPersonName = uddi.getOrgPersonName(); - String lifecyclemanagerURL = uddi.getLifecyclemanagerURL(); - String queryManagerURL = uddi.getQueryManagerURL(); - - // Add file to handler list - if (fileNameList.length() == 0) { - fileNameList = name; - } else { - fileNameList += "," + name; - } - - String fileName = name + ".properties"; - - // Build properties file and write it - Properties props = new Properties(); - props.put("jonas.service.wsdl.class", Uddi.PUBLISHER_CLASS); - props.put("jonas.service.publish.uddi.username", username); - props.put("jonas.service.publish.uddi.password", password); - props.put("jonas.service.publish.uddi.organization.name", orgName); - props.put("jonas.service.publish.uddi.organization.desc", orgDesc); - props.put("jonas.service.publish.uddi.organization.person_name", orgPersonName); - props.put("javax.xml.registry.lifeCycleManagerURL", lifecyclemanagerURL); - props.put("javax.xml.registry.queryManagerURL", queryManagerURL); - java.io.File writeFile = new java.io.File(jonasBaseConfDir, fileName); - log(INFO + "Generating a WSDL publish UDDI with name '" + name + "' in file '" + writeFile + "'..."); - writePropsToFile(INFO, props, writeFile); - } - - // Now set the handlers to the existing list for the property - JReplace propertyReplace = new JReplace(); - propertyReplace.setProject(getProject()); - propertyReplace.setConfigurationFile(JOnASBaseTask.JONAS_CONF_FILE); - propertyReplace.setDestDir(new java.io.File(getDestDir().getPath())); - propertyReplace.setToken(TOKEN_WSDLPUBLISHER); - propertyReplace.setValue(WSDL_PUBLISHER_PROPERTY + SEPARATORS + fileNameList); - log(INFO + "Adding WSDL Publishers '" + fileNameList + "' in " + JOnASBaseTask.JONAS_CONF_FILE + " file."); - propertyReplace.execute(); - - } -} diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb b/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb deleted file mode 100644 index 1531d92a54..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Florent Benoit -# Contributor(s): Benoit Pelletier -# --------------------------------------------------------------------------- -# $Id:newjb 12758 2008-01-31 10:23:26Z durieuxp $ -# --------------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Compute JONAS_ROOT in case it has not been set. -# ----------------------------------------------------------------------- -if [ ! -d $JONAS_ROOT/deploy ]; then - - # We know that the 'jonas' command is located at /bin/jonas - # So we can try to be smart enough and deduce the JONAS_ROOT value from that info :) - - # Remove bin/jonas from the command path - relative_directory=`dirname $0` - relative_directory=`dirname $relative_directory` - - # Keep old position - old_position=`pwd` - - # As the relative path is relative from the current location, we can cd into it ... - cd $relative_directory - # ... and then get the absolute path - absolute_directory=`pwd` - - # Come back into the old position - cd $old_position - - # Before accepting that value as is, check if that's a real JONAS_ROOT - if [ ! -d $absolute_directory/deploy ]; then - echo "Cannot deduce JONAS_ROOT value from $0." - exit 1 - fi - - # Set the JONAS_ROOT variable - JONAS_ROOT=$absolute_directory - export JONAS_ROOT -fi - -i=0 -while [ -z "$JONAS_BASE" ] -do - if [ $i -eq 3 ] - then - exit 1 - fi -echo "JONAS_BASE not set. Please enter a JONAS_BASE: " -read JONAS_BASE -i=`expr $i + 1` -done -export JONAS_BASE - -# ----------------------------------------------------------------------- -# Debugging properties -#ANT_OPTS="$ANT_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=4143,suspend=y" -# ----------------------------------------------------------------------- - -# Force endorsed directory for the ant process -# Ensure that the XML parser used is recent enough -ANT_OPTS="$ANT_OPTS -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed" -export ANT_OPTS - -# creation d'un cluster daemon demandee -#if [ "$1" = "-cd" ]; then -# ant -file $JONAS_ROOT/templates/newjb/build-jb.xml create_jonas_clusterDaemon -#else - ant -file $JONAS_ROOT/templates/newjb/build-jb.xml -#fi - - diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb.bat b/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb.bat deleted file mode 100755 index 52f2395d6b..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjb.bat +++ /dev/null @@ -1,54 +0,0 @@ -@Echo Off - -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Benoit Pelletier -Rem Contributor(s): Shenheng Liang -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -setlocal - -Rem set the Environment Variables -if ["%JONAS_ROOT%"]==[""] goto setroot -if ["%JONAS_BASE%"]==[""] goto setbase - -Rem Force endorsed directory for the ant process -Rem Ensure that the XML parser used is recent enough -set ANT_OPTS=%ANT_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Rem if "%1" == "-cd" goto cd_call - -call ant -file "%JONAS_ROOT%\templates\newjb\build-jb.xml" -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF - -:setbase -echo JONAS_BASE not set. -goto :EOF - -:cd_call -call ant -file "%JONAS_ROOT%\templates\newjb\build-jb.xml" create_jonas_clusterDaemon -goto :EOF diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc b/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc deleted file mode 100644 index afb5124733..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2005-2007 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Benoit Pelletier -# Contributor(s): Nicolas Duvauchel -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- -echo $0 -if [ ! -d $JONAS_ROOT/lib ] -then - echo "JONAS_ROOT must be set" - exit 1 -fi - -NEWJCDIR=$JONAS_ROOT/templates/newjc; - -# Force endorsed directory for the ant process -# Ensure that the XML parser used is recent enough -ANT_OPTS="$ANT_OPTS -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed" -export ANT_OPTS - -if [ $# -eq 0 ] -then - echo 1>&2 Mode Step by Step - ant -file $NEWJCDIR/build-jc.xml -Dsilence.mode="false" -else - if [ $1 = "-auto" ] - then - echo 1>&2 Mode Auto - ant -file $NEWJCDIR/build-jc.xml -Dsilence.mode="true" - fi -fi - - - - diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc.bat b/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc.bat deleted file mode 100755 index f5003a2551..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/jonas-resources/bin/newjc.bat +++ /dev/null @@ -1,106 +0,0 @@ -@echo off -:: --------------------------------------------------------------------------- -:: JOnAS: Java(TM) Open Application Server -:: Copyright (C) 2006-2009 Bull S.A.S. -:: Contact: jonas-team@objectweb.org -:: -:: This library is free software; you can redistribute it and/or -:: modify it under the terms of the GNU Lesser General Public -:: License as published by the Free Software Foundation; either -:: version 2.1 of the License, or any later version. -:: -:: This library is distributed in the hope that it will be useful, -:: but WITHOUT ANY WARRANTY; without even the implied warranty of -:: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -:: Lesser General Public License for more details. -:: -:: You should have received a copy of the GNU Lesser General Public -:: License along with this library; if not, write to the Free Software -:: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -:: USA -:: -:: Initial developer(s): Benoit Pelletier -:: Contributor(s): -:: --------------------------------------------------------------------------- -:: $Id$ -:: --------------------------------------------------------------------------- -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -if [%JONAS_ROOT%]==[] goto setroot - -set NEWJCDIR=%JONAS_ROOT%\templates\newjc - -Rem Force endorsed directory for the ant process -Rem Ensure that the XML parser used is recent enough -set ANT_OPTS=%ANT_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -if [%1]==[] goto no_arg - -Rem --------------------------------------------- -Rem Set the silence mode required -Rem --------------------------------------------- -:arg -if [%1]==[-auto] goto auto_mode -if [%1]==[-debug] goto debug_arg -goto end - - -:execute -call ant -file "%NEWJCDIR%\build-jc.xml" %SILENCE_MODE% -goto end - -:auto_mode -echo Mode Auto -set SILENCE_MODE=%SILENCE_MODE% -Dsilence.mode="true" -goto next_arg - -:next_arg -shift -if not [%1]==[] goto arg -goto execute - - -Rem --------------------------------------------- -Rem No arg, silence mode by default -Rem --------------------------------------------- - -:no_arg -echo Mode Step by Step -set SILENCE_MODE=%SILENCE_MODE% -Dsilence.mode="false" -goto execute -goto end - -:setroot -echo JONAS_ROOT not set. -goto end - - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto end - -:set_debug_opts -echo newjc Debug Info : -echo listening on port : %DEBUG_PORT% -echo suspend mode : %DEBUG_SUSPEND% -set ANT_OPTS=%ANT_OPTS% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=%DEBUG_PORT%,suspend=%DEBUG_SUSPEND% -goto next_arg - -:debug_arg -shift -if not [%1]==[-p] goto debug_usage -shift -set DEBUG_PORT=%1 -set DEBUG_SUSPEND=n -shift -shift -if [%1]==[y] goto set_debug_suspend -goto set_debug_opts - -:set_debug_suspend -set DEBUG_SUSPEND=%1 -goto set_debug_opts - -:end -goto :EOF diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/resources/META-INF/jonas-ant-tasks.bnd b/jonas/modules/tools/jonas-ant-tasks/src/main/resources/META-INF/jonas-ant-tasks.bnd deleted file mode 100644 index 4f77c93786..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/resources/META-INF/jonas-ant-tasks.bnd +++ /dev/null @@ -1,41 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All of this package is private -Private-Package org.objectweb.jonas.ant, \ - org.ow2.jonas.ant.*, \ - org.ow2.jonas.deployment.ejb, \ - org.ow2.util.xml, \ - org.ow2.jonas.lib.util, \ - -# I added o.o.j.deployment.ejb as private package because I want the -# DTDs to be copied in this jar file -# Notice that it will copy other classes from the same package (depl API) -# but it shouldn't do any harm as the ant task classloader is not used -# as the parent for GenIC task - -Embed-Dependency jonas-services-datasource-core;inline=true - -# Import/Export nothing -Import-Package !* -Export-Package !* diff --git a/jonas/modules/tools/jonas-ant-tasks/src/main/resources/org/ow2/jonas/ant/antlib.xml b/jonas/modules/tools/jonas-ant-tasks/src/main/resources/org/ow2/jonas/ant/antlib.xml deleted file mode 100644 index 4e7dc46c18..0000000000 --- a/jonas/modules/tools/jonas-ant-tasks/src/main/resources/org/ow2/jonas/ant/antlib.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - diff --git a/jonas/modules/tools/jonas-cluster-daemon/ant/pom.xml b/jonas/modules/tools/jonas-cluster-daemon/ant/pom.xml deleted file mode 100644 index 108d1d5059..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/ant/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - jonas-cluster-daemon - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-cluster-daemon-ant - bundle - JOnAS :: Tools :: Cluster Daemon :: Ant - - - - org.apache.ant - ant-nodeps - 1.8.0 - provided - - - org.ow2.jonas - bootstrap-ant - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-ant - ${project.version} - - - - diff --git a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/java/org/ow2/jonas/antmodular/cluster/clusterdaemon/ClusterDaemon.java b/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/java/org/ow2/jonas/antmodular/cluster/clusterdaemon/ClusterDaemon.java deleted file mode 100644 index 2352c0275f..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/java/org/ow2/jonas/antmodular/cluster/clusterdaemon/ClusterDaemon.java +++ /dev/null @@ -1,469 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Benoit Pelletier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.antmodular.cluster.clusterdaemon; - -import java.io.File; -import java.io.IOException; -import java.util.Iterator; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.tools.ant.BuildException; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.AbstractJOnASBaseAntTask; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.BaseTaskItf; -import org.ow2.jonas.antmodular.jonasbase.bootstrap.XMLSerializerTask; -import org.ow2.jonas.antmodular.jonasbase.carol.Carol; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; - -/** - * Configures the cluster daemon - * @author Benoit Pelletier - */ -public class ClusterDaemon extends AbstractJOnASBaseAntTask { - - /** - * Info for the logger - */ - private static final String INFO = "[ClusterDaemon] "; - - /** - * Name of the configuration file - */ - private static final String CLUSTER_DAEMON_CONF_FILE = "clusterd.xml"; - - /** - * Domain.xml structure - */ - private Document clusterDaemonDoc = null; - - /** - * Flag indicating if the document has been loaded - */ - private boolean clusterDaemonDocLoaded = false; - - /** - * name - */ - private String name = null; - - /** - * domain name - */ - private String domainName = null; - - /** - * directory - */ - private String cdDir = null; - - /** - * jdk - */ - private String jdk = null; - - /** - * interaction mode - */ - private String interactionMode = null; - - /** - * autoboot - */ - private String autoBoot = null; - - /** - * xprm - */ - private String xprm = null; - - /** - * nodes nb - */ - private int instNb = 0; - - /** - * nodes name - */ - private String clusterNodesName = null; - - /** - * Destination directory prefix (used to create the jonasBase(s)) - */ - private String destDirPrefix = null; - - /** - * The JOnAS script - */ - private String jonasScript = null; - - /** - * Set the destination directory prefix - * @param destDirPrefix the destination directory prefix - */ - public void setDestDirPrefix(final String destDirPrefix) { - this.destDirPrefix = destDirPrefix; - } - - /** - * Default constructor - */ - public ClusterDaemon() { - super(); - } - - /** - * load the clusterd.xml file in a DOM structure - */ - private void loadClusterDaemonXmlDoc() { - - if (!clusterDaemonDocLoaded) { - - // Load the orignal configuration file - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = null; - try { - factory.setNamespaceAware(true); - docBuilder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new BuildException(INFO + "Exception during loadClusterDaemonXmlDoc", e); - } - try { - clusterDaemonDoc = docBuilder.parse(jonasRoot + File.separator + "templates" + File.separator + "conf" - + File.separator + "conf" + File.separator + CLUSTER_DAEMON_CONF_FILE); - } catch (SAXException e) { - throw new BuildException(INFO + "Error during parsing of the file " + CLUSTER_DAEMON_CONF_FILE, e); - } catch (IOException e) { - throw new BuildException(INFO + "Error during parsing of the file " + CLUSTER_DAEMON_CONF_FILE, e); - } - - Element root = clusterDaemonDoc.getDocumentElement(); - - // Remove the default servers list - NodeList serverNodeL = root.getElementsByTagName("server"); - for (int i = 0; i < serverNodeL.getLength(); i++) { - Node n = serverNodeL.item(i); - root.removeChild(n); - } - - // Prepare the serialization - XMLSerializerTask xmlSerTask = new XMLSerializerTask(); - xmlSerTask.setXmlDoc(clusterDaemonDoc); - xmlSerTask.setXmlFileName(CLUSTER_DAEMON_CONF_FILE); - - addTask(xmlSerTask); - - clusterDaemonDocLoaded = true; - } - } - - /** - * Add the servers definition in the clusterd.xml - */ - public void addServersDefinition() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - for (int i = 1; i <= instNb; i++) { - - Text c = clusterDaemonDoc.createTextNode("\n\n "); - root.appendChild(c); - - // Element server - Node s = clusterDaemonDoc.createElement("server"); - root.appendChild(s); - - Text c0 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c0); - - // Element name - Node sn = clusterDaemonDoc.createElement("name"); - s.appendChild(sn); - - Text tsn = clusterDaemonDoc.createTextNode(clusterNodesName + i); - sn.appendChild(tsn); - - Text c1 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c1); - - // Element description - Node sd = clusterDaemonDoc.createElement("description"); - s.appendChild(sd); - - Text tsd = clusterDaemonDoc.createTextNode(clusterNodesName + i); - sd.appendChild(tsd); - - Text c2 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c2); - - // Element java-home - Node sjdk = clusterDaemonDoc.createElement("java-home"); - s.appendChild(sjdk); - - Text tsjdk = clusterDaemonDoc.createTextNode(jdk); - sjdk.appendChild(tsjdk); - - Text c3 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c3); - - // Element jonas-root - Node sjr = clusterDaemonDoc.createElement("jonas-root"); - s.appendChild(sjr); - - Text tsjr = clusterDaemonDoc.createTextNode(jonasRoot.getAbsolutePath()); - sjr.appendChild(tsjr); - - Text c4 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c4); - - // Element jonas-base - Node sjb = clusterDaemonDoc.createElement("jonas-base"); - s.appendChild(sjb); - String jb = destDirPrefix + i; - - if (File.separatorChar == '/') { - jb = jb.replace('\\', File.separatorChar); - } else { - jb = jb.replace('/', File.separatorChar); - } - - Text tsjb = clusterDaemonDoc.createTextNode(destDirPrefix + i); - sjb.appendChild(tsjb); - - Text c5 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c5); - - // Element xprm - Node sxprm = clusterDaemonDoc.createElement("xprm"); - s.appendChild(sxprm); - - Text tsxprm = clusterDaemonDoc.createTextNode(xprm); - sxprm.appendChild(tsxprm); - - Text c6 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c6); - - // Element auto-boot - Node sab = clusterDaemonDoc.createElement("auto-boot"); - s.appendChild(sab); - - Text tsab = clusterDaemonDoc.createTextNode(autoBoot); - sab.appendChild(tsab); - - Text c7 = clusterDaemonDoc.createTextNode("\n "); - s.appendChild(c7); - } - Text c10 = clusterDaemonDoc.createTextNode("\n\n"); - root.appendChild(c10); - - } - - /** - * update the name - */ - public void updateName() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the name - NodeList nameNodeL = root.getElementsByTagName("name"); - nameNodeL.item(0).getFirstChild().setNodeValue(name); - - } - - /** - * update the domain name - */ - public void updateDomainName() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("domain-name"); - nameNodeL.item(0).getFirstChild().setNodeValue(domainName); - - } - - /** - * Update the JOnAS script - */ - public void updateJOnASScript() { - if (this.jonasScript != null) { - loadClusterDaemonXmlDoc(); - Element root = this.clusterDaemonDoc.getDocumentElement(); - NodeList node = root.getElementsByTagName("jonas-cmd"); - node.item(0).getFirstChild().setNodeValue(this.jonasScript); - } - } - - /** - * update the interaction mode - */ - public void updateInteractionMode() { - - // Load the orignal configuration file - loadClusterDaemonXmlDoc(); - - Element root = clusterDaemonDoc.getDocumentElement(); - - // update the domain name - NodeList nameNodeL = root.getElementsByTagName("jonas-interaction-mode"); - nameNodeL.item(0).getFirstChild().setNodeValue(interactionMode); - - } - - /** - * Set nodes number - * @param instNb nodes nb - */ - public void setInstNb(final int instNb) { - this.instNb = instNb; - } - - /** - * cluster daemon directory - * @param cdDir directory - */ - public void setCdDir(final String cdDir) { - this.cdDir = cdDir; - if (File.separatorChar == '/') { - this.cdDir = this.cdDir.replace('\\', File.separatorChar); - } else { - this.cdDir = this.cdDir.replace('/', File.separatorChar); - } - } - - /** - * Set the name - * @param name name - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the domain name - * @param domainName domain name - */ - public void setDomainName(final String domainName) { - this.domainName = domainName; - } - - /** - * @param jonasScript The JOnAS script to set - */ - public void setJonasScript(final String jonasScript) { - this.jonasScript = jonasScript; - } - - /** - * interaction mode - * @param interactionMode loosely/tighly coupled - */ - public void setInteractionMode(final String interactionMode) { - this.interactionMode = interactionMode; - } - - /** - * jdk to use - * @param jdk jdk - */ - public void setJdk(final String jdk) { - - this.jdk = jdk; - - if (File.separatorChar == '/') { - this.jdk = this.jdk.replace('\\', File.separatorChar); - } else { - this.jdk = this.jdk.replace('/', File.separatorChar); - } - } - - /** - * set the name prefix for the cluster nodes - * @param clusterNodesName prefix of the nodes names in the cluster - */ - public void setClusterNodesName(final String clusterNodesName) { - this.clusterNodesName = clusterNodesName; - } - - /** - * Set auto boot - * @param autoBoot true/false - */ - public void setAutoBoot(final String autoBoot) { - this.autoBoot = autoBoot; - } - - /** - * Set xprm - * @param xprm xprm - */ - public void setXprm(final String xprm) { - this.xprm = xprm; - } - - /** - * Generates the script tasks - */ - public void generatesTasks() { - - updateName(); - updateDomainName(); - updateInteractionMode(); - addServersDefinition(); - updateJOnASScript(); - - // set destDir for each task - for (Iterator it = this.getTasks().iterator(); it.hasNext();) { - BaseTaskItf task = (BaseTaskItf) it.next(); - task.setDestDir(new File(cdDir)); - } - } - - public void execute() { - super.execute(); - this.generatesTasks(); - super.executeAllTask(); - } - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/antlib-clusterdaemon.xml b/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/antlib-clusterdaemon.xml deleted file mode 100644 index 9dc324b6a8..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/antlib-clusterdaemon.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/build-clusterdaemon.properties.template b/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/build-clusterdaemon.properties.template deleted file mode 100644 index 31dd5fd441..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/ant/src/main/resources/build-clusterdaemon.properties.template +++ /dev/null @@ -1,5 +0,0 @@ -#Cluster daemon configuration -cluster.daemon.protocol=jrmp -cluster.daemon.port=1806 -cluster.daemon.interactionMode=loosely-coupled -discovery.domainName=jonas \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/api/pom.xml b/jonas/modules/tools/jonas-cluster-daemon/api/pom.xml deleted file mode 100644 index f417cd5995..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/api/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - jonas-cluster-daemon - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - - bundle - - jonas-cluster-daemon-api - - JOnAS :: Tools :: Cluster Daemon :: API - - - - - org.apache.felix - org.apache.felix.ipojo - - - - - \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/ClusterDaemonException.java b/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/ClusterDaemonException.java deleted file mode 100644 index e9b80b99a2..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/ClusterDaemonException.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon.api; - -/** - * Exception thrown if there is a failure in the cluster daemon. - * @author Benoit Pelletier - */ -public class ClusterDaemonException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = -4396865739010208923L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public ClusterDaemonException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public ClusterDaemonException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public ClusterDaemonException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new exception with the specified cause and a detail message - * of (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This - * constructor is useful for exceptions that are little more than wrappers - * for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public ClusterDaemonException(final Throwable cause) { - super(cause); - } -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/IClusterDaemon.java b/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/IClusterDaemon.java deleted file mode 100644 index 208a92f09b..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/java/org/ow2/jonas/cluster/daemon/api/IClusterDaemon.java +++ /dev/null @@ -1,406 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.daemon.api; - -import java.util.ArrayList; -import java.util.Hashtable; - -/** - * Defines the MBean interface. Don't use Models MBeans as it will imply some - * external libraries like commons-modeler (easier). - * @author Benoit Pelletier - */ -/** - * @author eyindanga - */ -public interface IClusterDaemon { - - /** - * @return Object Name - */ - String getObjectName() throws ClusterDaemonException; - - /** - * Sets the object name of this mbean - * @param name the Object Name - * @throws ClusterDaemonException any. - */ - void setObjectName(String name) throws ClusterDaemonException; - - /** - * @return true if it is an event provider - * @throws ClusterDaemonException any. - */ - boolean iseventProvider() throws ClusterDaemonException; - - /** - * @return true if this managed object implements J2EE State Management - * Model - * @throws ClusterDaemonException any. - */ - boolean isstateManageable() throws ClusterDaemonException; - - /** - * @return true if this managed object implements the J2EE StatisticProvider - * Model - * @throws ClusterDaemonException any. - */ - boolean isstatisticsProvider() throws ClusterDaemonException; - - /** - * @return list of controlled servers. - */ - public ArrayList serversNames() throws ClusterDaemonException; - - /** - * Controlled servers. - * @return cluster daemon controlled server names. - */ - public ArrayList getControlledServersNames() throws ClusterDaemonException; - - /** - * @param serverName The name of the server - * @return true if the given server is managed by the cluster daemon. Otherwise, return false. - * @throws ClusterDaemonException - */ - boolean isServerManaged(final String serverName) throws ClusterDaemonException; - - /** - * @return the domain name for a specified server name. - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getDomain4Server(String name) throws ClusterDaemonException; - - /** - * @return the JAVA_HOME for a specified server name. - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getJavaHome4Server(String name) throws ClusterDaemonException; - - /** - * get JONAS_ROOT for the given server. - * @return the JONAS_ROOT for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getJonasRoot4Server(String name) throws ClusterDaemonException; - - /** - * Get JONAS_BASE for the given server. - * @return the JONAS_BASE for a specified server name. - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getJonasBase4Server(String name) throws ClusterDaemonException; - - /** - * Get command for the given server. - * @return the user command for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getJonasCmd4Server(String name) throws ClusterDaemonException; - - /** - * Get extra parameters for the given server. - * @return xprm for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - String getXprm4Server(String name) throws ClusterDaemonException; - - /** - * True if autoboot is enabled for the given server. - * @return autoBoot value for a specified server name - * @param name JOnAS instance name - */ - String getAutoBoot4Server(String name) throws ClusterDaemonException; - - /** - * Get the whole JMX URL for the given server. - * @return The JMX URL for a specified server name - * @param name JOnAS instance name - */ - String getJmxUrl4Server(String name) throws ClusterDaemonException; - - /** - * The JMX port for the given server. - * @return JMX port value for a specified server name - * @param name JOnAS instance name - */ - String getJmxPort4Server(String name) throws ClusterDaemonException; - - /** - * Reload the configuration. - * @throws ClusterDaemonException if an error occurs - */ - void reloadConfiguration() throws ClusterDaemonException; - - /** - * Add a server configuration. - * @param name server name - * @param domain domain name - * @param description server description - * @param javaHome JAVA_HOME dir - * @param jonasBase JONAS_BASE dir - * @param jonasRoot JONAS_ROOT dir - * @param xprm extra JVM parameters - * @param autoBoot automatic start - * @param jonasCmd user command - * @throws ClusterDaemonException if an error occurs - */ - void addServer(String name, String domain, String description, String jonasRoot, String jonasBase, String javaHome, String xprm, - String autoBoot, String jonasCmd, String saveIt) throws ClusterDaemonException; - - /** - * Modify a server configuration. - * @param name server name - * @param domain domain name - * @param description server description - * @param javaHome JAVA_HOME dir - * @param jonasBase JONAS_BASE dir - * @param jonasRoot JONAS_ROOT dir - * @param xprm extra JVM parameters - * @param autoBoot automatic start - * @param jonasCmd user command - * @throws ClusterDaemonException if an error occurs - */ - void modifyServer(String name, String domain, String description, String javaHome, String jonasRoot, String jonasBase, String xprm, - String autoBoot, String jonasCmd) throws ClusterDaemonException; - - /** - * Remove this server from cluster daemon control. - * @param serverName the server to remove - * @param saveIt if true then flush the configuration - */ - public void removeServer(String serverName, String saveIt) throws ClusterDaemonException; - - /** - * Save the configuration. - * @throws ClusterDaemonException any. - */ - public void saveConfiguration() throws ClusterDaemonException; - - /** - * Remove this server from cluster daemon control. - * @param serverName the server to remove - */ - public void removeServer(String serverName) throws ClusterDaemonException; - - /** - * Start a JOnAS instance. - * @param name instance name - * @param prm extra parameters - * @throws ClusterDaemonException if an error occurs - */ - void startJOnAS(String name, String prm) throws ClusterDaemonException; - - /** - * Stop a JOnAS instance. - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - void stopJOnAS(String name) throws ClusterDaemonException; - - /** - * Halt a JOnAS instance. - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - void haltJOnAS(String name) throws ClusterDaemonException; - - /** - * Ping a JOnAS instance (MBean interface). - * @param name instance name - * @return exit code of the ping (0 ok, 1 ko) - * @throws ClusterDaemonException if an error occurs - */ - int pingJOnAS(String name) throws ClusterDaemonException; - - /** - * Start all the JOnAS instances configured with auto-reboot. - * @param domainName domain name - * @param prm extra parameters - * @return the nodes list with an indicator started/starting failed - */ - String startAllJOnAS(String domainName, String prm) throws ClusterDaemonException; - - /** - * Stop all the JOnAS instances. - * @return the nodes list with an indicator stopped/stopping failed - * @throws ClusterDaemonException any. - */ - String stopAllJOnAS() throws ClusterDaemonException; - - /** - * Stop the cluster daemon instance. - * @throws ClusterDaemonException any. - */ - void stopClusterDaemon() throws ClusterDaemonException; - - /** - * Get jmx url of the cluster daemon. - * @return clusterd jmx url - */ - String getJmxUrl() throws ClusterDaemonException; - - /** - * Get available processors of the OS. - * @return Operating system processors number - */ - public String getOperatingSystemAvailableProcessors() throws ClusterDaemonException; - - /** - * Get OS name. - * @return OS name - * @throws ClusterDaemonException any. - */ - public String getOperatingSystemName() throws ClusterDaemonException; - - /** - * get OS architecture. - * @return Os architecture - * @throws ClusterDaemonException any. - */ - public String getOperatingSystemArch() throws ClusterDaemonException; - - /** - * Get OS version. - * @return OS version - * @throws ClusterDaemonException any. - */ - public String getOperatingSystemVersion() throws ClusterDaemonException; - - /** - * Get spec. vendor. - * @return Spec vendor - * @throws ClusterDaemonException any. - */ - public String getRunTimeSpecVendor() throws ClusterDaemonException; - - /** - * Get runtime spec. version. - * @return Spec version - * @throws ClusterDaemonException any. - */ - public String getRunTimeSpecVersion() throws ClusterDaemonException; - - /** - * Get runtime vm name. - * @return the Vm name - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmName() throws ClusterDaemonException; - - /** - * Get runtime vendor. - * @return Vm vendor - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmVendor() throws ClusterDaemonException; - - /** - * Get runtime vm version. - * @return Vm version - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmVersion() throws ClusterDaemonException; - - /** - * Get dynamic host attributes. - * @return hashtable with dynamic attributes keys and values. - * @throws ClusterDaemonException any. - */ - public Hashtable getDynamicHostAttributes() throws ClusterDaemonException; - - /** - * Retrieve the state of the given controlled server. - * @param srvName server's name. - * @return true if the server is running - * @throws ClusterDaemonException any. - */ - public boolean checkServerState(String srvName) throws ClusterDaemonException; - - /** - * (this method is not a duplicate of checkServerState -> checkServerState can be run only in isLooselyCoupled mode - * and only if a process associated to a server has been registered before) - * @param serverName The name of a server - * @return true if the server is running. Otherwise, false - */ - public boolean isServerRunning(final String serverName); - - /** - * Get remote Vm used Memory. - * @return the value of current used memory - * @throws ClusterDaemonException any. - */ - - public String getVmCurrentUsedMemory() throws ClusterDaemonException; - - /** - * Getting remote Vm Total Memory. - * @return the value of Vm Total memory - * @throws ClusterDaemonException any. - */ - public String getVmTotalMemory() throws ClusterDaemonException; - - /** - * Getting remote Vm's Current used Heap memory. - * @return the value of Vm's Current used Heap memory - * @throws ClusterDaemonException any. - */ - public String getVmCurrentUsedHeapMemory() throws ClusterDaemonException; - - /** - * Getting remote Vm's Current used non Heap memory. - * @return the value of Vm's Current used non Heap memory - * @throws ClusterDaemonException any. - */ - public String getVmCurrentUsedNonHeapMemory() throws ClusterDaemonException; - - /** - * Getting Operating system Current used space. - * @return the value of Operating system Current used space - * @throws ClusterDaemonException any. - */ - public String getOsCurrentUsedSpace() throws ClusterDaemonException; - - /** - * Getting Operating system Current used space. - * @return the value of Operating system Total space - * @throws ClusterDaemonException any. - */ - public String getOsTotalSpace() throws ClusterDaemonException; - - /** - * Generate the JOnAS report of the given server - * @param name The server name - * @return the path to the report - */ - String generateReport(String name) throws ClusterDaemonException; - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/META-INF/jonas-cluster-daemon-api.bnd b/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/META-INF/jonas-cluster-daemon-api.bnd deleted file mode 100644 index c0cc8e9044..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/META-INF/jonas-cluster-daemon-api.bnd +++ /dev/null @@ -1,25 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Export-Package org.ow2.jonas.cluster.daemon.api - diff --git a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/metadata.xml b/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/metadata.xml deleted file mode 100644 index f615c6a256..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/api/src/main/resources/metadata.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/pom.xml b/jonas/modules/tools/jonas-cluster-daemon/core/pom.xml deleted file mode 100644 index 95c8589664..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/pom.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - - jonas-cluster-daemon - org.ow2.jonas - 5.3.0-M7-SNAPSHOT - - 4.0.0 - jonas-cluster-daemon-core - bundle - JOnAS :: Tools :: Cluster Daemon :: Core - - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-cluster-daemon-api - ${project.version} - - - org.ow2.carol - carol - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.objectweb.monolog - monolog-api - ${monolog.version} - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-discovery-jgroups-core - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.apache.felix - org.apache.felix.ipojo - - - org.apache.felix - org.apache.felix.ipojo.annotations - 1.8.0 - - - org.ow2.jonas.tools.configurator - configurator - 1.3.2 - - - - - - - maven-jar-plugin - - - attach-config - compile - - jar - - - src/main/jonas-resources/conf - ${project.build.directory} - config - - **/.svn/** - - - - - attach-bin - compile - - jar - - - src/main/jonas-resources/bin - ${project.build.directory} - bin - - **/.svn/** - - - - - - - - - diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemon.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemon.java deleted file mode 100644 index 1b31de9b26..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemon.java +++ /dev/null @@ -1,2505 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.daemon; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.lang.management.ClassLoadingMXBean; -import java.lang.management.CompilationMXBean; -import java.lang.management.GarbageCollectorMXBean; -import java.lang.management.ManagementFactory; -import java.lang.management.MemoryMXBean; -import java.lang.management.MemoryManagerMXBean; -import java.lang.management.MemoryPoolMXBean; -import java.lang.management.OperatingSystemMXBean; -import java.lang.management.RuntimeMXBean; -import java.lang.management.ThreadMXBean; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.Vector; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanException; -import javax.management.MBeanInfo; -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXServiceURL; -import javax.management.remote.MBeanServerForwarder; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Property; -import org.apache.felix.ipojo.annotations.Provides; -import org.apache.felix.ipojo.annotations.Validate; -import org.apache.felix.ipojo.annotations.Invalidate; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.jndi.ns.NameServiceException; -import org.ow2.carol.jndi.ns.NameServiceManager; -import org.ow2.jonas.cluster.daemon.api.ClusterDaemonException; -import org.ow2.jonas.cluster.daemon.mbean.JMXRemoteException; -import org.ow2.jonas.cluster.daemon.mbean.JMXRemoteHelper; -import org.ow2.jonas.cluster.daemon.mbean.MBeanServerException; -import org.ow2.jonas.cluster.daemon.mbean.MBeanServerHelper; -import org.ow2.jonas.deployment.clusterd.xml.Server; -import org.ow2.jonas.deployment.common.xml.JLinkedList; -import org.ow2.jonas.discovery.jgroups.JgroupsDiscoveryServiceImpl; -import org.ow2.jonas.discovery.jgroups.utils.JGroupsDiscoveryUtils; -import org.ow2.jonas.lib.bootstrap.JProp; -import org.ow2.jonas.lib.util.ConfigurationConstants; -import org.ow2.jonas.lib.util.Env; -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.windows.WinSysEnv; -import org.ow2.jonas.security.auth.spi.RoleBasedAuthorizationModule; - -/** - * ClusterDaemon is provided to control JOnAS instances remotely. The - * ClusterDaemon is an independent Java program, and runs on every node - * (machine) in the cluster. It receives remote commands (JMX), and does - * something such as starting or stopping JOnAS instances. - * @author zhengzz (initial version for PKUAS) - * @author Benoit Pelletier (integration in JOnAS) - * @author eyindanga (Administration) - * @author S. Ali Tokmen (JMX security) - */ -@Component(immediate = true) -@Provides -public class ClusterDaemon implements ClusterDaemonMBean { - - /** - * Sleep time to wait. - */ - public static final int SLEEP_TIME = 2000; - - /** - * JOnAS interaction mode : tighly coupled. - */ - private static final String TIGHLY_COUPLED = "tighly-coupled"; - - /** - * JOnAS interaction mode : loosely coupled. - */ - private static final String LOOSELY_COUPLED = "loosely-coupled"; - - /** - * jonas admin ping short timeout. - */ - private static final int PING_SHORT_TIMEOUT = 5; - - /** - * jonas admin ping long timeout. - */ - private static final int PING_LONG_TIMEOUT = 120; - - /** - * jonas admin ping safety timeout - */ - private static final int PING_SAFETY_TIMEOUT= 2000; - - /** - * Sleep before exit of JVM. - */ - public static final int SLEEP_DELAY = 2000; - - /** - * Used to exclude attribute that are not Long typed when getting. Operating - * System dynamic attributes - */ - - public static final String LONG_TYPE_DYN_INFO = "long"; - - /** - * JOnAS command name in windows environmment. - */ - public static final String JONAS_CMD_NAME_WIN_DEF = "jonas.bat"; - - /** - * JOnAS command name in unix environmment. - */ - public static final String JONAS_CMD_NAME_UNIX_DEF = "jonas"; - - /** - * Trace properties file property name. - */ - public static final String CS_TRACE_FILE_PROPERTY_NAME = "cs.trace.properties.file"; - - /** - * Carol properties file property name. - */ - public static final String CAROL_FILE_PROPERTY_NAME = "carol.properties.file"; - - /** - * Clusterd config file property name. - */ - public static final String CONF_FILE_PROPERTY_NAME = "clusterd.conf.file"; - - /** - * Use monitor property name. - */ - public static final String USE_MONITOR_PROPERTY_NAME = "use.monitor"; - - /** - * trace.properties file to use instead of the default file. - */ - @Property(name = CS_TRACE_FILE_PROPERTY_NAME) - private String csTraceFile = null; - - /** - * carol.properties file to use instead of the default file. - */ - @Property(name = CAROL_FILE_PROPERTY_NAME) - private String carolFile = null; - - /** - * clusterd.xml filename (by default $JONAS_ROOT/conf/clusterd.xml). - */ - @Property(name = CONF_FILE_PROPERTY_NAME) - private String confFile = null; - - /** - * Whether or not use a monitor. - */ - @Property(name = USE_MONITOR_PROPERTY_NAME) - private boolean useMonitor = false; - - /** - * J2EE Management domain. - */ - private static String domainName = null; - - /** - * Logger to use. - */ - private Logger logger = null; - - /** - * Object name. - */ - private String objectName = null; - - /** - * Cluster Daemon name. - */ - private String name = null; - - public Map getProcessMap() { - return processMap; - } - - /** - * Process list. - */ - private Map processMap = new HashMap(); - - /** - * server state. - */ - private boolean isStarted = false; - - /** - * Controled servers url list. - */ - private ArrayList controlledServersNames; - - /** - * the clusterd jmx url. - */ - private String jmxUrl = null; - - /** - * MXbean for runtime. - */ - - private static RuntimeMXBean runtimeMxbean = null; - - /** - * MBean for class loading. - */ - - private static ClassLoadingMXBean classLoadingMxBean = null; - - /** - * MBean for operating system. - */ - - private static OperatingSystemMXBean operatingSystemMxBean = null; - - /** - * MBean for threads. - */ - - private static ThreadMXBean threadMxBean = null; - - /** - * MBean for compilation. - */ - - @SuppressWarnings("unused") - private static CompilationMXBean compilationMxBean = null; - - /** - * MBean for garbage collector. - */ - - @SuppressWarnings("unused") - private static List garbageCollectorMXBean = null; - - /** - * MBean for memory manager. - */ - @SuppressWarnings("unused") - private static List memoryManagerMXBean = null; - - /** - * MBean for memory. - */ - private static MemoryMXBean memoryMXBean = null; - - /** - * MBean for memory pool. - */ - @SuppressWarnings("unused") - private static List memoryPoolMXBean = null; - - // the platform MbeanSever - /** - * MBean server of the platform. - */ - private static MBeanServer platFormMbeanServer = null; - - // Management attributtes - // Runtime Mbean - /** - * Spec vendor.. - */ - private String runTimeSpecVendor = null; - - /** - * Spec version. - */ - private String runTimeSpecVersion = null; - - /** - * Virtual machine name. - */ - private String runTimeVmName = null; - - /** - * Virtual machine vendor. - */ - private String runTimeVmVendor = null; - - /** - * Runtime version. - */ - private String runTimeVmVersion = null; - - // OperatingSystem MBean - /** - * OS avalaibale processors. - */ - private String operatingSystemAvailableProcessors = null; - - /** - * OS name. - */ - private String operatingSystemName = null; - - /** - * OS version. - */ - private String operatingSystemVersion = null; - - /** - * OS architecture. - */ - private String operatingSystemArch = null; - - /** - * OS dynamic attributes. - */ - private Hashtable dynamicHostAttributes = null; - - /** - * JGroups discovery instance. - */ - private JgroupsDiscoveryServiceImpl discovery = null; - - /** - * Execute a JOnAS command in a separate JVM. - * @param server JOnAS server to pass the command - * @param cmd command - * @param keyCmd id the of command - * @return Process associated with the command - * @throws Exception exception if an error occurs - */ - @SuppressWarnings("unchecked") - private Process execJOnASCmd(final Server server, final String cmd, final String keyCmd) throws Exception { - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("server=null"); - } - - // Check that a same process in not running - Process previousP = (Process) processMap.get(keyCmd); - if (previousP != null) { - try { - this.logger.log(BasicLevel.INFO, "Cmd =" + cmd + " Process=" + previousP.exitValue()); - } catch (IllegalThreadStateException exc) { - // there is already a process running - this.logger.log(BasicLevel.INFO, "Cmd =" + cmd + " already running (pid=" + previousP.toString() + ")."); - throw new IllegalStateException("Cmd =" + cmd + " already running (pid=" + previousP.toString() + ")."); - } - } - - // Set the environment - Vector envv = new Vector(); - envv.addElement("JAVA_HOME=" + server.getJavaHome()); - envv.addElement("JONAS_ROOT=" + server.getJonasRoot()); - envv.addElement("JONAS_BASE=" + server.getJonasBase()); - - String catalinaHome = System.getProperty("catalina.home"); - if (catalinaHome != null) { - envv.addElement("CATALINA_HOME=" + catalinaHome); - envv.addElement("CATALINA_BASE=" + server.getJonasBase()); - } - - String jettyHome = System.getProperty("jetty.home"); - if (jettyHome != null) { - envv.addElement("JETTY_HOME=" + jettyHome); - } - - // if OS is of Windows family, set the SystemRoot variable - if (Env.isOsWindows()) { - envv.addElement("SystemRoot=" + WinSysEnv.get("SystemRoot")); - } - - String[] enva = new String[envv.size()]; - envv.copyInto(enva); - - // set the bin dir according to the platform (only if it's not a user - // command) - String binDir = null; - if (isDefinedUserJonasCmd(server)) { - // a full path must be set in the configuration - this.logger.log(BasicLevel.INFO, "User cmd - don't add the jonas-root prefix dir"); - binDir = ""; - } else { - this.logger.log(BasicLevel.INFO, "Default cmd - add the jonas-root prefix dir"); - binDir = server.getJonasRoot(); - if (File.separatorChar == '/') { // unix system - binDir += "/bin/"; - } else if (File.separatorChar == '\\') { // windows system - binDir += "\\bin\\"; - } - } - - String[] cmda = null; - if (cmd != null) { - cmda = (binDir + cmd).split("\\s+"); - } - // Set the working directory to the current directory - File workingDirectory = new File("."); - - // Launch the command - this.logger.log(BasicLevel.INFO, "Execute the command <" + binDir + cmd + "> with the env " + envv); - - Process p = Runtime.getRuntime().exec(cmda, enva, workingDirectory); - - // if synchronous mode, wait for the end of the execution - - processMap.put(keyCmd, p); - - // wait for starting - Thread.sleep(SLEEP_TIME); - - // trace the start execution - InputStream cmdError = p.getErrorStream(); - InputStream cmdOut = p.getInputStream(); - Thread err = new Thread(new CmdReaderThread(this.logger, keyCmd, cmdError, true)); - Thread out = new Thread(new CmdReaderThread(this.logger, keyCmd, cmdOut, false)); - out.start(); - err.start(); - - // add a shutdown hook for this process - // if loosely coupled mode, only the current commands are destroyed - - // the JOnAS instances are not stopped - int action = ShutdownHookThread.ACTION_DESTROY; - if (keyCmd.startsWith("start") && isTighlyCoupled()) { - action = ShutdownHookThread.ACTION_JONAS_STOP; - } - Runtime.getRuntime().addShutdownHook(new ShutdownHookThread(server.getName(), keyCmd, action, this, logger)); - - this.logger.log(BasicLevel.INFO, "Command " + cmd + " with the env " + envv + " launched"); - - return p; - } - - /** - * @param server JOnAS server configuration. - * @return true if a user command is defined. - */ - private boolean isDefinedUserJonasCmd(final Server server) { - if (server.getJonasCmd() == null) { - return false; - } - if (server.getJonasCmd().trim().equals("")) { - return false; - } - return true; - } - - /** - * @param server the server name. - * @return JOnAS command name according to the os. - */ - private String getJOnASCmdName(final Server server) { - // Test whether a user command is set - if (isDefinedUserJonasCmd(server)) { - // user command - return server.getJonasCmd().trim(); - } else { - // default command - if (Env.isOsWindows()) { - return JONAS_CMD_NAME_WIN_DEF; - } else { - return JONAS_CMD_NAME_UNIX_DEF; - } - } - - } - - /** - * Start a JOnAS instance. - * @param name server name to start - * @param prm extra parameters - * @param sync wait until the complete starting - * @throws ClusterDaemonException if an error occurs - */ - private void doStartJOnAS(final String name, final String prm, - final boolean sync) - throws ClusterDaemonException { - - // Get the Server - Server server = getServer(name); - - // check if the server exists - if (server == null) { - // throw new ClusterDaemonException("JOnAS instance " + name + " - // doesn't exist"); - throw new ClusterDaemonException("JOnAS server " + name + " is not known by the cluster daemon " + getName()); - } - - // get prm if needed - String xprm = null; - if (prm == null) { - xprm = ""; - } else { - xprm = prm; - } - - // add the parameters given in the configuration - if (server.getXprm() != null) { - xprm += server.getXprm(); - } - - String d = getDomain4Server(name); - - // Compose the command - String cmd = getJOnASCmdName(server) + " start -n " + name + " -Ddomain.name=" + d + " " + xprm; - - // If the interaction mode with JOnAS is tighly coupled, the instance is - // launched in the foreground - if (isTighlyCoupled()) { - cmd += " -fg"; - } - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " is starting ..."); - - String keyCmd = "start/" + name; - - Process p = null; - try { - p = execJOnASCmd(server, cmd, keyCmd); - } catch (Throwable t) { - this.logger.log(BasicLevel.ERROR, "Unable to start the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - throw new ClusterDaemonException("Unable to start the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - } - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " launched"); - - // If sync is required, wait for the end of the starting - if (sync) { - if (isLooselyCoupled()) { - @SuppressWarnings("unused") - int exitCode = waitEndProcess(p); - } else { - if (doPingJOnAS(name, PING_LONG_TIMEOUT) == 1) { - throw new ClusterDaemonException("Unable to start the JOnAS instance " + name + " - unreachable server"); - } - } - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " started"); - } - } - - /** - * Stop a JOnAS instance. - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - public void doStopJOnAS(final String name) throws ClusterDaemonException { - // Get the Server - Server server = getServer(name); - - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - String cmd = getJOnASCmdName(server) + " stop -n " + server.getName(); - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " is stopping ..."); - - String keyCmd = "stop/" + server.getName(); - - Process p = null; - try { - p = execJOnASCmd(server, cmd, keyCmd); - } catch (Throwable t) { - this.logger.log(BasicLevel.ERROR, "Unable to stop the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - throw new ClusterDaemonException("Unable to stop the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - } - // Wait until command termination and get the exit code - @SuppressWarnings("unused") - int exitCode = waitEndProcess(p); - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " stopped"); - } - - /** - * Halt a JOnAS instance. - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - private void doHaltJOnAS(final String name) throws ClusterDaemonException { - // Get the Server - Server server = getServer(name); - - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - String cmd = getJOnASCmdName(server) + " halt -n " + server.getName(); - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " is halting ..."); - - String keyCmd = "halt/" + server.getName(); - - Process p = null; - try { - p = execJOnASCmd(server, cmd, keyCmd); - } catch (Throwable t) { - this.logger.log(BasicLevel.ERROR, "Unable to halt the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - throw new ClusterDaemonException("Unable to halt the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - } - // Wait until command termination and get the exit code - @SuppressWarnings("unused") - int exitCode = waitEndProcess(p); - - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " halted"); - } - - /** - * Kill a JOnAS instance (only in tighly coupled mode). - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - private void doKillJOnAS(final String name) throws ClusterDaemonException { - // Get the Server - Server server = getServer(name); - - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - // check the mode - if (isLooselyCoupled()) { - throw new ClusterDaemonException("Command not compatible with the loosely-coupled mode"); - } - - String keyCmd = "start/" + server.getName(); - - // get the process - Process p = (Process) processMap.get(keyCmd); - - // check that the process is alive - boolean alive = false; - try { - this.logger.log(BasicLevel.DEBUG, "Process=" + p.exitValue()); - - // Process not alived - this.logger.log(BasicLevel.DEBUG, "JOnAS instance " + name + " is already dead"); - - } catch (IllegalThreadStateException exc) { - // there is already a process running - this.logger.log(BasicLevel.DEBUG, "JOnAS instance " + server.getName() + " is going to be killed"); - alive = true; - } - - if (alive) { - // kill the process - p.destroy(); - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " killed"); - } else { - this.logger.log(BasicLevel.INFO, "JOnAS instance " + name + " already killed"); - } - - } - - /** - * Wait until the end of the execution of the process. - * @param p process - * @return exit code of the process - */ - private int waitEndProcess(final Process p) { - - if (p == null) { - return -1; - } - boolean isRunning = true; - int exitCode = -1; - while (isRunning) { - this.logger.log(BasicLevel.DEBUG, "check if the process " + p + " is running"); - try { - exitCode = p.exitValue(); - this.logger.log(BasicLevel.DEBUG, "cmd " + p + " is finished"); - isRunning = false; - } catch (IllegalThreadStateException exc) { - // there is already a process running - this.logger.log(BasicLevel.DEBUG, "cmd " + p + " is still running"); - try { - Thread.sleep(SLEEP_TIME / 2); - } catch (InterruptedException e) { - this.logger.log(BasicLevel.DEBUG, e); - } - } - } - return exitCode; - } - - /** - * Ping a JOnAS instance. - * @param name instance name - * @param timeout timeout - * @return exit code of the ping (0 ok, 1 ko) - * @throws ClusterDaemonException if an error occurs - */ - private int doPingJOnAS(final String name, final int timeout) throws ClusterDaemonException { - - // Get the Server - Server server = getServer(name); - - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - String jonasBase = getJonasBase4Server(name); - - String cmd = getJOnASCmdName(server) + " admin -n " + server.getName() + " -ping -timeout " + timeout; - - this.logger.log(BasicLevel.INFO, "Ping JOnAS instance " + name + " ..."); - - String keyCmd = "ping/" + server.getName(); - - try { - execJOnASCmd(server, cmd, keyCmd); - } catch (Throwable t) { - this.logger.log(BasicLevel.ERROR, "Unable to ping the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - throw new ClusterDaemonException("Unable to ping the JOnAS instance <" + name + ">, cmd=<" + cmd + ">", t); - } - - // Wait until command termination and get the exit code - Process p = (Process) processMap.get(keyCmd); - int exitCode = waitEndProcess(p); - this.logger.log(BasicLevel.INFO, "Ping JOnAS instance " + name + " return " + exitCode); - return exitCode; - } - - /** - * Check jonas instance state. - * @param name server name - * @return true if the server is running. - * @throws ClusterDaemonException if an error occurs. - */ - @SuppressWarnings("unused") - private boolean doCheckState(final String name) throws ClusterDaemonException { - // Get the Server - Server server = getServer(name); - // check if the server exists - if (server == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - // check the mode - if (isLooselyCoupled()) { - throw new ClusterDaemonException("Command not compatible with the loosely-coupled mode"); - } - - String keyCmd = "start/" + server.getName(); - - // get the process - Process p = (Process) processMap.get(keyCmd); - - // check that the process is alive - boolean alive = false; - try { - this.logger.log(BasicLevel.DEBUG, "Process=" + p.exitValue()); - - // Process not alive - this.logger.log(BasicLevel.DEBUG, "JOnAS instance " + name + " is STOPPED"); - - } catch (IllegalThreadStateException exc) { - // there is already a process running - this.logger.log(BasicLevel.DEBUG, "JOnAS instance " + server.getName() + " is RUNNING"); - alive = true; - } - return alive; - - } - - /** - * Retrieve the state of the given controlled server. - * @param srvName server's name. - * @return true if the server is running - * @throws ClusterDaemonException any. - */ - public boolean checkServerState(final String srvName) throws ClusterDaemonException{ - boolean running = false; - try { - running = doCheckState(srvName); - } catch (ClusterDaemonException e) { - this.logger.log(BasicLevel.DEBUG, "Unabale to get Server State" + e); - throw e; - } - return running; - } - - /** - * {@inheritDoc} - */ - public boolean isServerRunning(final String serverName) { - boolean isServerRunning; - int exitCode = -1; - try { - exitCode = pingJOnAS(serverName); - } catch (ClusterDaemonException e) { - //the server is not running - isServerRunning = false; - } - if (exitCode == 0) { - isServerRunning = true; - } else { - isServerRunning = false; - } - return isServerRunning; - } - - /** - * Call the Log class to instanciate the cluster daemon logger. - * @throws ClusterDaemonException if an error occurs. - */ - private void initLogger() throws ClusterDaemonException { - - if (csTraceFile != null) { - File tClient = new File(csTraceFile); - - if (!tClient.exists()) { - throw new ClusterDaemonException("The file '" + csTraceFile + "' was not found."); - } - - if (!tClient.isFile()) { - throw new ClusterDaemonException("The file '" + csTraceFile + "' is not a valid file. Maybe a directory ?"); - } - - // Configure log - System.setProperty("jonas.client.trace.file", csTraceFile); - Log.reset(); - } else { - csTraceFile = "trace"; - } - // Allow tracing ejb/jms code - try { - System.setProperty("jonas.client.trace.file", csTraceFile); - Log.configure(csTraceFile); - } catch (NoClassDefFoundError ncdfe) { - // 'normal exception' thrown outside the JOnAS containers - ncdfe.printStackTrace(); - } - // init the logger - this.logger = Log.getLogger(Log.JONAS_CLUSTER_DAEMON); - } - - /** - * Starts the name service - * @throws ClusterDaemonException any. - */ - private void startNameService() throws ClusterDaemonException { - // start registry - NameServiceManager nameServiceManager = NameServiceManager.getNameServiceManager(); - if(!nameServiceManager.isStarted()){ - logger.log(BasicLevel.INFO, "Name service was not started, starting now."); - try { - nameServiceManager.startNS(); - } catch (NameServiceException e) { - throw new ClusterDaemonException("Cannot start registry", e); - } - } else { - logger.log(BasicLevel.INFO, "Name service was already started, skipping."); - } - } - - /** - * Init MBeans. - * @throws ClusterDaemonException if an error occurs. - */ - private void initMBeans() throws ClusterDaemonException { - - // JonasObjectName.setDomain(domainName); - try { - MBeanServerHelper.startMBeanServer(domainName); - } catch (MBeanServerException e) { - throw new ClusterDaemonException("Cannot start MBean server", e); - } - - try { - Map props = null; - this.name = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getName(); - String url = ClusterDaemonTools.getJmxUrl(name); - String objName = ClusterDaemonTools.getObjectName(); - - // Set JMX authentication and authorization options - // We'll test later if JMX has really been secured - boolean jmxSecured = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().isJmxSecured(); - MBeanServerForwarder forwarder = null; - if (jmxSecured) { - props = new HashMap(); - String fileSeparator = System.getProperty("file.separator"); - - // Authentication, avoid NullPointerExceptions - String loginModule = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon() - .getJmxAuthenticationMethod(); - String loginParam = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon() - .getJmxAuthenticationParameter(); - if (loginModule != null && loginParam != null) { - if ("jmx.remote.x.password.file".equals(loginModule)) { - // Make sure files get read using JONAS_BASE - props.put(loginModule, JProp.getJonasBase() + fileSeparator + loginParam); - } else { - props.put(loginModule, loginParam); - } - } - - // Authorization, avoid NullPointerExceptions - String authModule = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getJmxAuthorizationMethod(); - String authParam = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon() - .getJmxAuthorizationParameter(); - if (authModule != null && authParam != null) { - if (authModule.startsWith("jmx.remote.x.access.rolebased")) { - forwarder = RoleBasedAuthorizationModule.newProxyInstance(authModule - .substring("jmx.remote.x.access.rolebased".length() + 1), authParam); - } else if ("jmx.remote.x.access.file".equals(authModule)) { - // Make sure files get read using JONAS_BASE - props.put(authModule, JProp.getJonasBase() + fileSeparator + authParam); - } else { - props.put(authModule, authParam); - } - } - } - - JMXConnectorServer connectorServer = JMXRemoteHelper.startConnector(url, objName, props); - if (forwarder != null) { - connectorServer.setMBeanServerForwarder(forwarder); - } - this.logger.log(BasicLevel.INFO, "JMX remote connector (" + url + ", " + objName + " started "); - - // set management attribute - setJmxUrl(url); - - if (jmxSecured) { - // Test security: try to connect without credentials - try { - JMXConnectorFactory.connect(new JMXServiceURL(url)).close(); - logger.log(BasicLevel.WARN, "JMX security is enabled but anonymous logins are still accepted! " - + "Please check your JMX security configuration."); - } catch (SecurityException e) { - // It's working: connection was refused - logger.log(BasicLevel.INFO, "JMX security is enabled and active"); - } catch (Exception e) { - throw new ClusterDaemonException("Cannot test JMX security", e); - } - } else { - logger.log(BasicLevel.WARN, "JMX security is DISABLED"); - } - } catch (JMXRemoteException e) { - throw new ClusterDaemonException("Cannot start JMX Remote connector", e); - } - - // register local MBeans - StringBuffer sb = new StringBuffer(domainName); - // TODO add the cd name when registering its mbean - sb.append(":type=ClusterDaemon"); - ObjectName on = null; - try { - on = new ObjectName(sb.toString()); - - } catch (MalformedObjectNameException e) { - throw new ClusterDaemonException("Cannot build ObjectName", e); - } - try { - MBeanServerHelper.getMBeanServer().registerMBean(this, on); - this.logger.log(BasicLevel.DEBUG, "MBean (" + on + ") registered"); - - } catch (Exception e) { - throw new ClusterDaemonException("Cannot register MBean '" + on + "' in MBeanServer", e); - } - - // set management attribute - setObjectName(on.toString()); - - this.logger.log(BasicLevel.INFO, "MBeans initialized"); - } - - /** - * Gets runtime info of current platform. - */ - public void buildRuntimeInfo() { - this.logger.log(BasicLevel.INFO, "getting Runtime Mbean"); - RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); - @SuppressWarnings("unused") - String vendor = mxbean.getVmVendor(); - return; - - } - - /** - * @return true is the loosely-coupled mode is enabled - */ - private boolean isLooselyCoupled() { - String mode = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getJonasInteractionMode(); - return ClusterDaemon.LOOSELY_COUPLED.equals(mode); - } - - /** - * @return true is the tighly-coupled mode is enabled. - */ - private boolean isTighlyCoupled() { - String mode = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getJonasInteractionMode(); - return ClusterDaemon.TIGHLY_COUPLED.equals(mode); - } - - /** - * @param name server name. - * @return Configuration of the server - */ - private Server getServer(final String name) throws ClusterDaemonException { - try { - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - - if (servers != null) { - for (int i = 0; i < servers.size(); i++) { - Server serverElement = (Server) servers.get(i); - if (serverElement.getName().equals(name)) { - return serverElement; - } - } - } - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - return null; - } - - /** - * Start all the JOnAS instances configured with auto-reboot - * @param domainName domain name - * @param prm extra parameters - * @param force the starting - * @param sync synchronous starting - * @return the nodes list with an indicator started/starting failed - * @throws ClusterDaemonException any. - */ - private String doStartAllJOnAS(final String domainName, final String prm, final boolean force, final boolean sync) - throws ClusterDaemonException { - try { - // This feature is valid only if the jonas-interaction-mode is - // loosely-coupled - if (!force) { - if (isLooselyCoupled()) { - String result = "JOnAS interaction mode is set to loosely-coupled => don't start the JOnAS instances"; - this.logger.log(BasicLevel.INFO, result); - return result; - } else { - this.logger.log(BasicLevel.INFO, - "JOnAS interaction mode is set to tighly-coupled => start the JOnAS instances"); - } - } - int nbInst = 0; - int nbInstStarted = 0; - String instStarted = ""; - int nbInstStartingError = 0; - String instStartingError = ""; - - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - - if (servers != null) { - for (int i = 0; i < servers.size(); i++) { - nbInst++; - Server serverElement = (Server) servers.get(i); - if (serverElement.isAutoBoot() || force) { - try { - doStartJOnAS(serverElement.getName(), prm, sync); - nbInstStarted++; - instStarted += serverElement.getName() + " "; - } catch (ClusterDaemonException e) { - this.logger.log(BasicLevel.ERROR, "Error during the launching of JOnAS instance " - + serverElement.getName(), e); - nbInstStartingError++; - instStartingError += serverElement.getName() + " ex=" + e + " "; - } - } - } - } - String result = "Instances started (" + nbInstStarted + "/" + nbInst + ", " + instStarted + ")"; - result += " Instances starting failed (" + nbInstStartingError + "/" + nbInst + ", " + instStartingError + ")"; - - this.logger.log(BasicLevel.INFO, result); - return result; - } catch (Exception e) { - if (e instanceof ClusterDaemonException) { - throw (ClusterDaemonException) e; - } - throw new ClusterDaemonException(e); - } - - } - - /** - * Stop all the JOnAS instances - * @return the nodes list with an indicator stopped/stopping failed - */ - private String doStopAllJOnAS() { - - int nbInst = 0; - int nbInstStopped = 0; - String instStopped = ""; - int nbInstStoppingError = 0; - String instStoppingError = ""; - - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - - if (servers != null) { - for (int i = 0; i < servers.size(); i++) { - Server serverElement = (Server) servers.get(i); - try { - doStopJOnAS(serverElement.getName()); - nbInstStopped++; - instStopped += serverElement.getName() + " "; - } catch (ClusterDaemonException e) { - this.logger.log(BasicLevel.ERROR, "Error during the stopping of JOnAS instance " + serverElement.getName(), - e); - nbInstStoppingError++; - instStoppingError += serverElement.getName() + " ex=" + e + " "; - } - } - } - String result = "Instances stopped (" + nbInstStopped + "/" + nbInst + ", " + instStopped + ")"; - result += " Instances stopping failed (" + nbInstStoppingError + "/" + nbInst + ", " + instStoppingError + ")"; - - this.logger.log(BasicLevel.INFO, result); - return result; - } - - /** - * Kill all the JOnAS instances - * @return the nodes list with an indicator killed/killing failed - */ - @SuppressWarnings("unused") - private String doKillAllJOnAS() { - - int nbInst = 0; - int nbInstKilled = 0; - String instKilled = ""; - int nbInstKillingError = 0; - String instKillingError = ""; - - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - - if (servers != null) { - for (int i = 0; i < servers.size(); i++) { - Server serverElement = (Server) servers.get(i); - try { - doKillJOnAS(serverElement.getName()); - nbInstKilled++; - instKilled += serverElement.getName() + " "; - } catch (ClusterDaemonException e) { - this.logger.log(BasicLevel.ERROR, "Error during the killing of JOnAS instance " + serverElement.getName(), - e); - nbInstKillingError++; - instKillingError += serverElement.getName() + " ex=" + e + " "; - } - } - } - String result = "Instances killed (" + nbInstKilled + "/" + nbInst + ", " + instKilled + ")"; - result += " Instances killing failed (" + nbInstKillingError + "/" + nbInst + ", " + instKillingError + ")"; - - this.logger.log(BasicLevel.INFO, result); - return result; - } - - /** - * Main function. - * @throws ClusterDaemonException if an error occurs - */ - @Validate - public void start() throws ClusterDaemonException { - - /** - * Init the trace logger - */ - initLogger(); - logger.log(BasicLevel.INFO, "Starting Cluster Daemon..."); - - /** - * Load clusterd.xml - */ - ClusterDaemonTools.loadClusterDaemonConfiguration(confFile); - /** - * get controlled server names from configuration - */ - buildControlledServersNames(); - /** - * getting cluster daemon Host info for monitoring - */ - initHostInfos(); - /** - * Get the domain name - */ - domainName = System.getProperty(ConfigurationConstants.DOMAIN_NAME_PROP, ConfigurationConstants.DEFAULT_DOMAIN_NAME); - String confDomainName = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getDomainName(); - - if (domainName.equals(ConfigurationConstants.DEFAULT_DOMAIN_NAME)) { - if (confDomainName == null) { - this.logger.log(BasicLevel.INFO, "Domain set with default value : " + domainName); - } else { - domainName = confDomainName; - this.logger.log(BasicLevel.INFO, "Domain set with the value defined in the clusterd.xml : " + domainName); - } - } else if (domainName.equals(confDomainName)) { - this.logger.log(BasicLevel.INFO, "Domain set with the value defined in the clusterd.xml : " + domainName); - } else { - throw new ClusterDaemonException("Incorrect domain name set in clusterd.xml file and in the property " - + confDomainName + "/" + domainName); - } - /** - * Init Carol - */ - ClusterDaemonTools.initCarol(); - /** - * Start the name service. - */ - startNameService(); - - this.logger.log(BasicLevel.INFO, "Carol initialized!"); - /** - * Init MBean server - */ - initMBeans(); - - this.logger.log(BasicLevel.INFO, "JOnAS Cluster Daemon Started!"); - - /** - * start the monitor thread if required - */ - if (useMonitor) { - new MonitorThread(this.logger).start(); - } - - /** - * Launches the JOnAS instances configured with auto-reboot - */ - doStartAllJOnAS(domainName, null, false, false); - getDynamicHostAttributes(); - - if (ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getDiscovery().getStartDiscovery()) { - /** - * Starts JGroups discovery - */ - startDiscovery(); - } - - /** - * The server is started now - */ - isStarted = true; - logger.log(BasicLevel.INFO, "ClusterDaemon started."); - } - - /** - * Starts JGroups discovery. - */ - @SuppressWarnings("unchecked") - private void startDiscovery() { - discovery = new JgroupsDiscoveryServiceImpl(); - HashMap discoveryEnv = new HashMap(); - discoveryEnv.put("group.name", ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getDiscovery() - .getDiscoveryGroupName()); - discoveryEnv.put("jgroups.conf", ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getDiscovery() - .getDiscoveryStackFile()); - discoveryEnv.put("host.name", ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getName()); - discoveryEnv.put("domain.name", domainName); - try { - String[] urls = {ClusterDaemonTools.getJmxUrl(name)}; - discoveryEnv.put("connector.urls", urls); - discovery.start(discoveryEnv, MBeanServerHelper.getMBeanServer(), JGroupsDiscoveryUtils.DISCOVERY_IS_CLUSTERD); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Cluster daemon was unable to start JGroups discovery \n", e); - } - logger.log(BasicLevel.INFO, "JGroups discovery started \n"); - } - - /** - * Usage. - */ - private static void usage() { - System.out - .println("Usage : jclusterd [-DdomainName=] [-useMonitor] [-confFile my_clusterd.xml] [-carolFile=]"); - } - - /** - * displaying dynamic host attributes. - */ - public void displayDynamicAttributes() { - Hashtable myhash = dynamicHostAttributes; - for (String str : myhash.keySet()) { - String val = myhash.get(str); - this.logger.log(BasicLevel.DEBUG, "Key : " + str + " Value " + val); - } - } - - /** - * Main method - * @param args the arguments of the cluster daemon - */ - public static void main(final String[] args) { - // Retrieve command line parameters - ClusterDaemon cs = new ClusterDaemon(); - - try { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - - try { - if (arg.equals("-useMonitor")) { - cs.useMonitor = true; - continue; - } - - if (arg.equals("-traceFile")) { - cs.csTraceFile = args[++argn]; - continue; - } - - if (arg.equals("-carolFile")) { - cs.carolFile = args[++argn]; - continue; - } - - if (arg.equals("-confFile")) { - cs.confFile = args[++argn]; - continue; - } - - if (arg.equals("--help") || arg.equals("-help") || arg.equals("-h") || arg.equals("-?")) { - usage(); - System.exit(1); - } - - } catch (ArrayIndexOutOfBoundsException aioobe) { - // The next argument is not in the array - throw new ClusterDaemonException("A required parameter was missing after the argument" + arg); - } - } - - cs.start(); - } catch (Exception e) { - System.err.println("There was the following exception : " + e.getMessage()); - e.printStackTrace(); - System.exit(-1); - } - } - - // //////////////////////////////////////////////////////////////////////////////////////// - // / - // / MBEAN INTERFACES - // / - // //////////////////////////////////////////////////////////////////////////////////////// - /** - * @return Object Name. - */ - public String getObjectName() { - return objectName; - } - - /** - * Sets the object name of this mbean. - * @param name the Object Name - */ - public void setObjectName(final String name) { - this.objectName = name; - } - - /** - * @return true if it is an event provider - */ - public boolean iseventProvider() { - return false; - } - - /** - * @return true if this managed object implements J2EE State Management - * Model - */ - public boolean isstateManageable() { - return false; - } - - /** - * @return true if this managed object implements the J2EE StatisticProvider - * Model - */ - public boolean isstatisticsProvider() { - return false; - } - - /** - * (MBean interface). - * @return the JAVA_HOME for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJavaHome4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getJavaHome(); - } else { - return null; - } - } - - /** - * (MBean interface). - * @return the JONAS_BASE for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJonasBase4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getJonasBase(); - } else { - return null; - } - } - - /** - * (MBean interface). - * @return the JONAS_ROOT for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJonasRoot4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getJonasRoot(); - } else { - return null; - } - } - - /** - * @return the user command for a specified server name. - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJonasCmd4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getJonasCmd(); - } else { - return null; - } - } - - /** - * @return the xprm for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getXprm4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getXprm(); - } else { - return null; - } - } - - /** - * @return the autoboot value for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getAutoBoot4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getAutoBoot(); - } else { - return null; - } - } - - /** - * @return the JMX port value for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJmxPort4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return getJmxPort(server.getJonasBase()); - } else { - return null; - } - } - - /** - * @return the JMX port value for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getDomain4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - return server.getDomain(); - } else { - return null; - } - } - - /** - * @return the autoboot value for a specified server name - * @param name JOnAS instance name - * @throws ClusterDaemonException any. - */ - public String getJmxUrl4Server(final String name) throws ClusterDaemonException { - Server server = getServer(name); - if (server != null) { - String port = getJmxPort(server.getJonasBase()); - return "service:jmx:rmi://localhost/jndi/rmi://localhost:" + - port + "/jrmpconnector_" + name; - } else { - return null; - } - } - - /** - * Gets servers that are controlled by the clusterd. - * @throws ClusterDaemonException any. - */ - @SuppressWarnings("unchecked") - private void buildControlledServersNames() throws ClusterDaemonException { - try { - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - if (controlledServersNames == null) { - controlledServersNames = new ArrayList(); - } - - if (servers != null) { - for (int i = 0; i < servers.size(); i++) { - Server serverElement = (Server) servers.get(i); - controlledServersNames.add(serverElement.getName()); - } - } - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Flush the configuration to the clusterd.xml file. - * @throws ClusterDaemonException if an error occurs - */ - private void flushConfiguration() throws ClusterDaemonException { - String buf = ClusterDaemonTools.getCurrentConfiguration().toXML(); - FileWriter fw; - if (confFile == null) { - confFile = ClusterDaemonTools.getCurrentConfigurationFileName(); - } - try { - fw = new FileWriter(confFile); - fw.write(buf); - fw.close(); - } catch (IOException e) { - throw new ClusterDaemonException(e); - } - - this.logger.log(BasicLevel.DEBUG, "Configuration flushed in the file " + confFile + "\n" + buf); - } - - /** - * Remove a server configuration (MBean interface). - * @param serverName server name - * @throws ClusterDaemonException if an error occurs - */ - public void removeServer(final String serverName) throws ClusterDaemonException { - - if(pingJOnAS(serverName) == 0) { - throw new ClusterDaemonException("Could not delete a running server"); - } - - // Get the Server - Server server = getServer(serverName); - // check if the server exists - if (server == null) { - logger.log(BasicLevel.INFO, "Server named " + serverName + " can't be removed from cluster daemon " + this.name - + " control as unknown"); - return; - } - String jonasBase = getJonasBase4Server(serverName); - // Remove the server - ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList().remove(server); - controlledServersNames.remove(serverName); - - if(jonasBase == null) { - return; - } - - File jonasBaseFolder = new File(jonasBase); - if(jonasBaseFolder.exists()) { - try { - delete(jonasBaseFolder); - } catch (IOException e) { - throw new ClusterDaemonException("JOnAS Base could not be deleted for server '" + serverName + "'", e); - } - } - } - - void delete(File f) throws IOException { - - if (f.isDirectory()) { - for (File c : f.listFiles()) - delete(c); - } - if (!f.delete()) - throw new FileNotFoundException("Failed to delete file: " + f); - - } - - /** - * Modify a server configuration (MBean interface). - * @param name server name - * @param description server description - * @param javaHome JAVA_HOME dir - * @param jonasBase JONAS_BASE dir - * @param jonasRoot JONAS_ROOT dir - * @param xprm extra JVM parameters - * @param autoBoot automatic start - * @param jonasCmd user command - * @throws ClusterDaemonException if an error occurs - */ - public void modifyServer(final String name, final String domain, - final String description, final String javaHome, - final String jonasRoot, final String jonasBase, - final String xprm, final String autoBoot, final String jonasCmd) - throws ClusterDaemonException { - - // Get the Server - Server myServer = getServer(name); - - // check if the server exists - if (myServer == null) { - throw new ClusterDaemonException("JOnAS instance " + name + " doesn't exist"); - } - - // Update the server - myServer.setDomain(domain); - myServer.setDescription(description); - myServer.setJavaHome(javaHome); - myServer.setJonasBase(jonasBase); - myServer.setJonasRoot(jonasRoot); - myServer.setXprm(xprm); - myServer.setAutoBoot(autoBoot); - myServer.setJonasCmd(jonasCmd); - - // flush the configuration - flushConfiguration(); - - this.logger.log(BasicLevel.DEBUG, "Server " + name + " updated"); - } - - /** - * Reload the configuration (MBean interface). - * @throws ClusterDaemonException if an error occurs - */ - public void reloadConfiguration() throws ClusterDaemonException { - - ClusterDaemonTools.loadClusterDaemonConfiguration(confFile); - - } - - /** - * Start a JOnAS instance (MBean interface). - * @param name instance name - * @param prm extra parameters - * @throws ClusterDaemonException if an error occurs - */ - public void startJOnAS(final String name, final String prm) throws ClusterDaemonException { - doStartJOnAS(name, prm, true); - } - - /** - * Stop a JOnAS instance (MBean interface). - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - public void stopJOnAS(final String name) throws ClusterDaemonException { - doStopJOnAS(name); - } - - /** - * Halt a JOnAS instance (MBean interface). - * @param name instance name - * @throws ClusterDaemonException if an error occurs - */ - public void haltJOnAS(final String name) throws ClusterDaemonException { - doHaltJOnAS(name); - } - - /** - * Ping a JOnAS instance (MBean interface). - * @param name instance name - * @return exit code of the ping (0 ok, 1 ko) - * @throws ClusterDaemonException if an error occurs - */ - public int pingJOnAS(final String name) throws ClusterDaemonException { - return doPingJOnAS(name, PING_SAFETY_TIMEOUT); - } - - /** - * Start all the JOnAS instances configured with auto-reboot. - * @param domainName domain name - * @param prm extra parameters - * @return the nodes list with an indicator started/starting failed - * @throws ClusterDaemonException any. - */ - public String startAllJOnAS(final String domainName, final String prm) throws ClusterDaemonException { - return doStartAllJOnAS(domainName, prm, true, true); - } - - /** - * Stop all the JOnAS instances. - * @return the nodes list with an indicator stopped/stopping failed - * @throws ClusterDaemonException any. - */ - public String stopAllJOnAS() { - return doStopAllJOnAS(); - } - - /** - * Stop the current instance. - */ - @Invalidate - public void stopClusterDaemon() { - - if (isStarted) { - this.logger.log(BasicLevel.DEBUG, "Server not started"); - } - // Stop JGroups discovery - if (discovery != null) { - discovery.stop(); - } - isStarted = false; - - // Delay the exit of the JVM so the link client/server is not broken. - // client call will return before the end of the JVM on server side. - new Thread(new Runnable() { - - public void run() { - try { - // Wait before exit - Thread.sleep(SLEEP_DELAY); - } catch (InterruptedException ie) { - ie.printStackTrace(); - throw new IllegalStateException("Cannot wait: " + ie.getMessage()); - } - System.exit(0); - } - }).start(); - - this.logger.log(BasicLevel.INFO, "Server stopped"); - } - - /** - * @return clusterd name. - */ - public String getName() { - return name; - } - - /** - * Controlled servers. - * @return cluster daemon controlled server names. - * @throws ClusterDaemonException any. - */ - public ArrayList getControlledServersNames() throws ClusterDaemonException { - if (controlledServersNames == null) { - buildControlledServersNames(); - } - return this.controlledServersNames; - } - - /** - * {@inheritDoc} - */ - public boolean isServerManaged(final String serverName) throws ClusterDaemonException { - List managedServers = managedServers = getControlledServersNames(); - if (managedServers == null) { - throw new ClusterDaemonException("Cannot get the list of managed servers"); - } - return managedServers.contains(serverName); - } - - /** - * Get jmx url of the cluster daemon. - * @return clusterd jmx url - * @throws ClusterDaemonException any. - */ - public ArrayList serversNames() throws ClusterDaemonException { - return getControlledServersNames(); - - } - - /** - * Get jmx url of the cluster daemon. - * @return clusterd jmx url - */ - public String getJmxUrl() { - return jmxUrl; - } - - /** - * @param url the url used by the JMX Remote connector - */ - public void setJmxUrl(final String url) { - jmxUrl = url; - } - - /** - * Get available processors of the OS. - * @return Operating system processors number - */ - public String getOperatingSystemAvailableProcessors() { - return operatingSystemAvailableProcessors; - } - - /** - * @param operatingSystemAvailableProcessors all avalable processors for the OS - */ - public void setOperatingSystemAvailableProcessors(final String operatingSystemAvailableProcessors) { - this.operatingSystemAvailableProcessors = operatingSystemAvailableProcessors; - } - - /** - * Get OS name. - * @return OS name - * @throws ClusterDaemonException any. - */ - public String getOperatingSystemName() { - return operatingSystemName; - } - - /** - * Sets operating system name. - * @param operatingSystemName - */ - public void setOperatingSystemName(final String operatingSystemName) { - this.operatingSystemName = operatingSystemName; - } - - /** - * Get OS version. - * @return OS version - * @throws ClusterDaemonException any. - */ - public String getOperatingSystemVersion() { - return operatingSystemVersion; - } - - /** - * Sets OS version - * @param operatingSystemVersion - */ - public void setOperatingSystemVersion(final String operatingSystemVersion) { - this.operatingSystemVersion = operatingSystemVersion; - } - - /** - * Get spec. vendor. - * @return Spec vendor - * @throws ClusterDaemonException any. - */ - public String getRunTimeSpecVendor() { - return runTimeSpecVendor; - } - - /** - * Sets Runtime vendor. - * @param runTimeSpecVendor - */ - public void setRunTimeSpecVendor(final String runTimeSpecVendor) { - this.runTimeSpecVendor = runTimeSpecVendor; - } - - /** - * Get runtime spec. version. - * @return Spec version - * @throws ClusterDaemonException any. - */ - public String getRunTimeSpecVersion() { - return runTimeSpecVersion; - } - - /** - * Sets Runtime spec. version. - * @param runTimeSpecVersion - */ - public void setRunTimeSpecVersion(final String runTimeSpecVersion) { - this.runTimeSpecVersion = runTimeSpecVersion; - } - - /** - * Get runtime vm name. - * @return the Vm name - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmName() { - return runTimeVmName; - } - - /** - * @param runTimeVmName - */ - public void setRunTimeVmName(final String runTimeVmName) { - this.runTimeVmName = runTimeVmName; - } - - /** - * Get runtime vendor. - * @return Vm vendor - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmVendor() { - return runTimeVmVendor; - } - - /** - * Sets Runtime VM vendor. - * @param runTimeVmVendor - */ - public void setRunTimeVmVendor(final String runTimeVmVendor) { - this.runTimeVmVendor = runTimeVmVendor; - } - - /** - * Get runtime vm version. - * @return Vm version - * @throws ClusterDaemonException any. - */ - public String getRunTimeVmVersion() { - return runTimeVmVersion; - } - - /** - * Sets runtime VM version. - * @param runTimeVmVersion - */ - public void setRunTimeVmVersion(final String runTimeVmVersion) { - this.runTimeVmVersion = runTimeVmVersion; - } - - /** - * Get dynamic host attributes. - * @return hashtable with dynamic attributes keys and values. - * @throws ClusterDaemonException any. - */ - public Hashtable getDynamicHostAttributes() throws ClusterDaemonException { - if (dynamicHostAttributes == null) { - dynamicHostAttributes = new Hashtable(); - } - this.logger.log(BasicLevel.DEBUG, "retrieving cluster daemon's host dynamic information"); - try { - // ClassLoading Mbean - dynamicHostAttributes.put("loadedClassCount", new Integer(classLoadingMxBean.getLoadedClassCount()).toString()); - dynamicHostAttributes.put("unloadedClassCount", new Long(classLoadingMxBean.getUnloadedClassCount()).toString()); - // Threading Mbean - dynamicHostAttributes.put("threadCount", new Integer(threadMxBean.getThreadCount()).toString()); - dynamicHostAttributes - .put("totalStartedThreadCount", new Long(threadMxBean.getTotalStartedThreadCount()).toString()); - // heap memory mxBeans - // "vm" is added to specify that the memory attribute is for virtual - // machine # Operating system memory - dynamicHostAttributes.put("initHeapMemoryVm", new Long(memoryMXBean.getHeapMemoryUsage().getInit()).toString()); - dynamicHostAttributes.put("usedHeapMemoryVm", new Long(memoryMXBean.getHeapMemoryUsage().getUsed()).toString()); - dynamicHostAttributes.put("maxHeapMemoryVm", new Long(memoryMXBean.getHeapMemoryUsage().getMax()).toString()); - dynamicHostAttributes.put("heapCommittedMemoryVm", new Long(memoryMXBean.getHeapMemoryUsage().getCommitted()) - .toString()); - // non heap - dynamicHostAttributes.put("initNonHeapMemoryVm", new Long(memoryMXBean.getNonHeapMemoryUsage().getInit()) - .toString()); - dynamicHostAttributes.put("usedNonHeapMemoryVm", new Long(memoryMXBean.getNonHeapMemoryUsage().getUsed()) - .toString()); - dynamicHostAttributes.put("maxNonHeapMemoryVm", new Long(memoryMXBean.getNonHeapMemoryUsage().getMax()).toString()); - dynamicHostAttributes.put("CommittedNonHeapMemoryVm", new Long(memoryMXBean.getNonHeapMemoryUsage().getCommitted()) - .toString()); - // retrieve operating system dynamic infos. - buildOperatingSystemdynInfo(); - // used in debug mode.. - displayDynamicAttributes(); - } catch (Exception e) { - this.logger.log(BasicLevel.DEBUG, "Cannot retrieve cluster daemon's host dynamic information: " + e); - throw new ClusterDaemonException(e); - } finally { - return dynamicHostAttributes; - } - } - - /** - * Used to get management infos thare are not available from MXbeans. - * @throws ClusterDaemonException any. - */ - private void buildOperatingSystemdynInfo() throws ClusterDaemonException { - ObjectName osOn; - try { - osOn = new ObjectName("java.lang:type=OperatingSystem"); - - if ((platFormMbeanServer != null) && (platFormMbeanServer.isRegistered(osOn))) { - - MBeanInfo mbeaInfo = platFormMbeanServer.getMBeanInfo(osOn); - MBeanAttributeInfo[] atts = mbeaInfo.getAttributes(); - String attrName = null; - String attrType = null; - Long attrValue; - for (int i = 0; i < atts.length; i++) { - attrName = atts[i].getName(); - attrType = atts[i].getType(); - if (attrType.equals(LONG_TYPE_DYN_INFO)) { - logger.log(BasicLevel.DEBUG, "**** Attribute Info ****"); - logger.log(BasicLevel.DEBUG, "Name " + atts[i].getName()); - logger.log(BasicLevel.DEBUG, "Type " + atts[i].getType()); - logger.log(BasicLevel.DEBUG, "isIs " + atts[i].isIs()); - logger.log(BasicLevel.DEBUG, "isReadable " + atts[i].isReadable()); - logger.log(BasicLevel.DEBUG, "isWritable " + atts[i].isWritable()); - attrValue = (Long) platFormMbeanServer.getAttribute(osOn, atts[i].getName()); - logger.log(BasicLevel.DEBUG, "value " + attrValue); - dynamicHostAttributes.put(attrName, attrValue.toString()); - - } - } - - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Unable to get dynamic dynamic infos for the Operating System " + e); - throw new ClusterDaemonException(e); - } - - } - - /** - * Initializes platform infos. - * @throws ClusterDaemonException any. - */ - public void initHostInfos() throws ClusterDaemonException { - this.logger.log(BasicLevel.INFO, "Initializing Host monitoring informations"); - try { - // MXbeans initialization - runtimeMxbean = ManagementFactory.getRuntimeMXBean(); - classLoadingMxBean = ManagementFactory.getClassLoadingMXBean(); - threadMxBean = ManagementFactory.getThreadMXBean(); - compilationMxBean = ManagementFactory.getCompilationMXBean(); - garbageCollectorMXBean = ManagementFactory.getGarbageCollectorMXBeans(); - memoryManagerMXBean = ManagementFactory.getMemoryManagerMXBeans(); - memoryMXBean = ManagementFactory.getMemoryMXBean(); - memoryPoolMXBean = ManagementFactory.getMemoryPoolMXBeans(); - platFormMbeanServer = ManagementFactory.getPlatformMBeanServer(); - // - runTimeVmVendor = runtimeMxbean.getVmVendor(); - runTimeSpecVendor = runtimeMxbean.getSpecVendor(); - runTimeSpecVersion = runtimeMxbean.getSpecName(); - runTimeVmName = runtimeMxbean.getVmName(); - runTimeVmVersion = runtimeMxbean.getVmVersion(); - // OperatingSystem mbean - operatingSystemMxBean = ManagementFactory.getOperatingSystemMXBean(); - operatingSystemAvailableProcessors = new Integer(operatingSystemMxBean.getAvailableProcessors()).toString(); - operatingSystemName = operatingSystemMxBean.getName(); - operatingSystemVersion = operatingSystemMxBean.getVersion(); - operatingSystemArch = operatingSystemMxBean.getArch(); - dynamicHostAttributes = new Hashtable(); - - } catch (Exception e) { - this.logger.log(BasicLevel.DEBUG, "cannot get host monitoring informations : " + e); - throw new ClusterDaemonException(e); - } - - } - - /** - * Gets OS architecture - * @return operating system architecture - */ - public String getOperatingSystemArch() { - return operatingSystemArch; - } - - /** - *Sets OS Architecture - * @param operatingSystemArch - */ - public void setOperatingSystemArch(final String operatingSystemArch) { - this.operatingSystemArch = operatingSystemArch; - } - - /** - * Getting remote Vm's Current used non Heap memory. - * @return the value of Vm's Current used non Heap memory - * @throws ClusterDaemonException any. - */ - public String getVmCurrentUsedNonHeapMemory() throws ClusterDaemonException { - try { - long nonheap = memoryMXBean.getNonHeapMemoryUsage().getUsed(); - return new Long(nonheap).toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Getting Operating system Current used space. - * @return the value of Operating system Current used space - * @throws ClusterDaemonException any. - */ - public String getOsCurrentUsedSpace() throws ClusterDaemonException { - try { - long totalPhys = getOsAtributeValue("TotalPhysical"); - long totalFree = getOsAtributeValue("FreePhysical"); - return new Long(totalPhys - totalFree).toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Getting Operating system Current used space. - * @return the value of Operating system Total space - * @throws ClusterDaemonException any. - */ - public String getOsTotalSpace() throws ClusterDaemonException { - try { - return getOsAtributeValue("TotalPhysical").toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * @param jonasBasePath The path to a JOnAS instance - * @return the JMX port of the instance - * @throws ClusterDaemonException if the JMX port cannot be found - */ - private String getJmxPort(final String jonasBasePath) throws ClusterDaemonException { - File jonasBase = new File(jonasBasePath); - if (!jonasBase.exists()) { - throw new ClusterDaemonException("The JONAS_BASE of the server " + name + " doesn't exist."); - } - File carolProperties = new File(new File(jonasBase, ConfigurationConstants.DEFAULT_CONFIG_DIR), "carol.properties"); - if (!carolProperties.exists()) { - throw new ClusterDaemonException(carolProperties.getAbsolutePath() + " doesn't exist"); - } - - Properties properties = new Properties(); - try { - properties.load(new FileInputStream(carolProperties)); - } catch (IOException e) { - throw new ClusterDaemonException("Cannot load properties of " + carolProperties.getAbsolutePath() + " file", e); - } - String protocol = properties.getProperty("carol.protocols"); - - //get JMX port - return getJmxPort(properties, protocol); - } - - /** - * @param carolProperties Carol properties - * @param protocol Carol protocol - * @return the JMX port - * @throws ClusterDaemonException - */ - private String getJmxPort(final Properties carolProperties, final String protocol) throws ClusterDaemonException { - String jmxPort = null; - String token = "carol." + protocol + ".url"; - String url = carolProperties.getProperty(token); - StringTokenizer stringTokenizer = new StringTokenizer(url, ":"); - if (stringTokenizer.hasMoreElements()) { - stringTokenizer.nextElement(); - if (stringTokenizer.hasMoreElements()) { - stringTokenizer.nextElement(); - if (stringTokenizer.hasMoreElements()) { - jmxPort = stringTokenizer.nextToken(); - } - } - } - if (jmxPort == null) { - throw new ClusterDaemonException("The JMX url is invalid: " + url); - } else { - return jmxPort; - } - } - - /** - * {@inheritDoc} - */ - @Override - public String generateReport(final String name) throws ClusterDaemonException{ - Server server = getServer(name); - if (server == null) { - throw new ClusterDaemonException("Server " + name + " cannot be found."); - } - final File jonasBase = new File(server.getJonasBase()); - if (!jonasBase.exists()) { - throw new ClusterDaemonException("The JONAS_BASE of the server " + name + " doesn't exist."); - } - File carolProperties = new File(new File(jonasBase, ConfigurationConstants.DEFAULT_CONFIG_DIR), "carol.properties"); - if (!carolProperties.exists()) { - throw new ClusterDaemonException(carolProperties.getAbsolutePath() + " doesn't exist"); - } - - Properties properties = new Properties(); - try { - properties.load(new FileInputStream(carolProperties)); - } catch (IOException e) { - throw new ClusterDaemonException("Cannot load properties of " + - carolProperties.getAbsolutePath() + " file", e); - } - - //get server host & RMI protocol - String host = "localhost"; - String protocol = properties.getProperty("carol.protocols"); - - //get JMX port - String jmxPort = getJmxPort(properties, protocol); - - //get JMX URL - final String jmxUrl = ClusterDaemonTools.getJmxUrl(host, jmxPort, server.getName(), protocol); - - //get a connection to the remote MBean server - MBeanServerConnection mBeanServerConnection = null; - try { - mBeanServerConnection = JMXRemoteHelper.connect(jmxUrl); - } catch (JMXRemoteException e) { - throw new ClusterDaemonException("Cannot connect to JMX URL " + jmxUrl, e); - } - - //TODO secure JMX authentification - - //remote invocation - final String pattern = "*:type=service,name=report"; - ObjectName objectName = null; - try { - objectName = new ObjectName(pattern); - } catch (MalformedObjectNameException e) { - throw new ClusterDaemonException("Canno't instanciate ObjectName"); - } - - Set objectNameSet = null; - try { - objectNameSet = mBeanServerConnection.queryNames(objectName, null); - } catch (IOException e) { - throw new ClusterDaemonException("Could not find a valid ObjectName with the pattern " + pattern, e); - } - Iterator iterator = objectNameSet.iterator(); - if (!iterator.hasNext()) { - throw new ClusterDaemonException("Could not find a valid ObjectName with the pattern " + pattern); - } else { - try { - return (String) mBeanServerConnection.invoke(iterator.next(), "generateReport", null, null); - } catch (InstanceNotFoundException e) { - throw new ClusterDaemonException("Could not get back data of the 'generateReport' method of the objectName" - + objectName, e); - } catch (MBeanException e) { - throw new ClusterDaemonException("Could not get back data of the 'generateReport' method of the objectName" - + objectName, e); - } catch (ReflectionException e) { - throw new ClusterDaemonException("Could not get back data of the 'generateReport' method of the objectName" - + objectName, e); - } catch (IOException e) { - throw new ClusterDaemonException("Could not get back data of the 'generateReport' method of the objectName" - + objectName, e); - } - } - } - - /** - * Getting remote Vm's Current used Heap memory. - * @return the value of Vm's Current used Heap memory - * @throws ClusterDaemonException any. - */ - public String getVmCurrentUsedHeapMemory() throws ClusterDaemonException { - try { - long memusage = memoryMXBean.getHeapMemoryUsage().getUsed(); - return new Long(memusage).toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Get remote Vm used Memory. - * @return the value of current used memory - * @throws ClusterDaemonException any. - */ - public String getVmCurrentUsedMemory() throws ClusterDaemonException { - try { - long heapmem = memoryMXBean.getHeapMemoryUsage().getUsed(); - long nonHeapmem = memoryMXBean.getNonHeapMemoryUsage().getUsed(); - return new Long(heapmem + nonHeapmem).toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Getting remote Vm Total Memory. - * @return the value of Vm Total memory - * @throws ClusterDaemonException any. - */ - public String getVmTotalMemory() throws ClusterDaemonException { - try { - long committed = memoryMXBean.getHeapMemoryUsage().getCommitted(); - long usage = memoryMXBean.getNonHeapMemoryUsage().getCommitted(); - return new Long(committed + usage).toString(); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Use this method to get an attribute value. Can't use direct call to the - * getAttribute method because some attributes are not exposed to management - * @param key get value for this key - * @return OS attribute value for given key - * @throws ClusterDaemonException if an error occurs. - */ - @SuppressWarnings("unused") - private Long getOsAtributeValue(final String key) throws ClusterDaemonException { - ObjectName osOn; - try { - osOn = new ObjectName("java.lang:type=OperatingSystem"); - - if ((platFormMbeanServer != null) && (platFormMbeanServer.isRegistered(osOn))) { - - MBeanInfo mbeaInfo = platFormMbeanServer.getMBeanInfo(osOn); - MBeanAttributeInfo[] atts = mbeaInfo.getAttributes(); - String attrName = null; - int i = 0; - while ((!atts[i].getName().contains(key)) && (i < atts.length)) { - i++; - } - if (i < atts.length) { - return (Long) platFormMbeanServer.getAttribute(osOn, atts[i].getName()); - } else { - throw new ClusterDaemonException("Key {0} in Operating System mbean" + key); - } - - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Unable to get dynamic dynamic infos for the Operating System " + e); - throw new ClusterDaemonException(e); - } - return null; - - } - - /** - * Add a server to cluster daemon control. - * @param name the server name - * @param description server description - * @param javaHome path to JRE - * @param jonasRoot path to bin repository - * @param jonasBase path to lib repository - * @param xprem extra parameter e.g: -Djava.net.preferIPv4Stack=true - * @param autoBoot true if the server is launched when cluster daemon starts - * @param jonasCmd user command - * @param saveIt boolean - * @throws ClusterDaemonException any. - */ - @SuppressWarnings("unchecked") - public void addServer(final String name, final String domain, - final String description, final String jonasRoot, - final String jonasBase, final String javaHome, - final String xprem, final String autoBoot, - final String jonasCmd, final String saveIt) - throws ClusterDaemonException { - try { - JLinkedList servers = ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList(); - if (servers != null) { - ListIterator itr = servers.listIterator(); - while (itr.hasNext()) { - Server serverElement = (Server) itr.next(); - if (serverElement.getName().equals(name) && serverElement.getDomain().equals(domain)) { - throw new ClusterDaemonException("Cannot add the server named " + name - +", a server with the same name is already present in the domain " + domain); - } - } - } - Server srv = new Server(); - srv.setName(name); - srv.setDomain(domain); - srv.setJonasRoot(jonasRoot); - srv.setJonasBase(jonasBase); - srv.setJavaHome(javaHome); - srv.setXprm(xprem); - srv.setAutoBoot(autoBoot); - srv.setJonasCmd(jonasCmd); - servers.add(srv); - if (saveIt.equals("true")) { - try { - flushConfiguration(); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Cannot flush configuration for cluster daemon named" + this.name); - return; - } - } - // Update controled servers list - controlledServersNames.add(srv.getName()); - logger.log(BasicLevel.DEBUG, "Server named " + name + " successfully added to cluster daemon " + this.name - + "control"); - } catch (Exception e) { - throw new ClusterDaemonException(e); - } - - } - - /** - * Remove This server from cluster daemon control. - * @param serverName The server to remove - * @param saveIt True to flush clusterd configuration - * @throws ClusterDaemonException any. - */ - public void removeServer(final String serverName, final String saveIt) throws ClusterDaemonException { - - if(pingJOnAS(serverName) == 0) { - throw new ClusterDaemonException("Could not delete a running server"); - } - - Server server = getServer(serverName); - if (server != null) { - - try { - ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getServerList().remove(server); - - if (saveIt.equals("true")) { - flushConfiguration(); - } - } catch (ClusterDaemonException e) { - logger.log(BasicLevel.DEBUG, "Cannot flush configuration for cluster daemon named" + this.name); - return; - } - String jonasBase = server.getJonasBase(); - controlledServersNames.remove(serverName); - if(jonasBase == null) { - return; - } - - File jonasBaseFolder = new File(jonasBase); - if(jonasBaseFolder.exists()) { - try { - delete(jonasBaseFolder); - } catch (IOException e) { - throw new ClusterDaemonException("JOnAS Base could not be deleted for server '" + serverName + "'", e); - } - } - logger.log(BasicLevel.INFO, "Server named " + serverName + " successfully removed from cluster daemon " + this.name - + " control"); - } else { - logger.log(BasicLevel.INFO, "Server named " + serverName + " can't be removed from cluster daemon " + this.name - + " control as not known"); - } - - } - - /** - * Save current configuration - * @throws ClusterDaemonException any. - */ - public void saveConfiguration() throws ClusterDaemonException { - flushConfiguration(); - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonAdmin.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonAdmin.java deleted file mode 100644 index 128df55194..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonAdmin.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectInstance; - -import org.ow2.jonas.cluster.daemon.mbean.JMXRemoteHelper; - -/** - * This class implements a JMX client to administer the cluster daemon. - * - * @author Benoit Pelletier - * @author S. Ali Tokmen - */ -public class ClusterDaemonAdmin { - /** - * Connection to the MBean server - */ - private static MBeanServerConnection cnx = null; - - /** - * Object Instance - */ - private static ObjectInstance oi = null; - - /** - * STOP command - */ - private static final int STOP_CMD = 0; - - /** - * clusterd.xml filename (by default $JONAS_ROOT/conf/clusterd.xml) - */ - private static String confFile = null; - - /** - * User name to use for JMX connections. - */ - private static String username = null; - - /** - * Password to use for JMX connections. - */ - private static String password = null; - - /** - * Private constructor - */ - private ClusterDaemonAdmin() { - - } - - /** - * Init MBean server connection - */ - private static void initJmxCnt() { - - try { - cnx = JMXRemoteHelper.connect( - ClusterDaemonTools.getJmxUrl(ClusterDaemonTools.getCurrentConfiguration().getClusterDaemon().getName()), - username, password); - oi = JMXRemoteHelper.getInstance(cnx, "*:type=ClusterDaemon"); - } catch (Exception e) { - System.err.println("Cannot init MBean server connection : " + e); - System.exit(2); - } - - } - - /** - * Usage - */ - private static void usage() { - System.err.println("usage : jclusterd "); - System.err.println("list of available options:"); - System.err.println(" start : start the cluster daemon."); - System.err.println(" stop : stop the cluster daemon."); - } - - - /** - * Main method - * @param args arguments - */ - public static void main(String[] args) { - - int cmd = -1; - - - // Get command args - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - - if (arg.equals("-stop")) { - cmd = STOP_CMD; - } - - if (arg.equals("-confFile")) { - confFile = args[++argn]; - continue; - } - - if (arg.equals("-username")) { - username = args[++argn]; - continue; - } - - if (arg.equals("-password")) { - password = args[++argn]; - continue; - } - - // load the clusterd.xml file - try { - ClusterDaemonTools.loadClusterDaemonConfiguration(confFile); - } catch (Exception e) { - System.err.println("Error during the loading of the configuration file : " + e); - System.exit(2); - } - - // init the jmx connection with the cluster daemon - initJmxCnt(); - - // execute the command - switch (cmd) { - case STOP_CMD: - try { - // call the stop() operation - Object[] params = new Object[] {}; - String[] sig = new String[] {}; - cnx.invoke(oi.getObjectName(), "stopClusterDaemon", params, sig); - System.out.println("Cluster daemon stopped"); - } catch (Exception e) { - System.err.println("MBean invocation exception : " + e); - System.exit(2); - } - break; - default: - System.err.println("Bad cmd: " + cmd); - usage(); - System.exit(2); - break; - } - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonException.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonException.java deleted file mode 100644 index fe5ff49870..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonException.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon; - -/** - * Exception thrown if there is a failure in the cluster daemon. - * @author Benoit Pelletier - */ -public class ClusterDaemonException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = -4396865739010208923L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public ClusterDaemonException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public ClusterDaemonException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public ClusterDaemonException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new exception with the specified cause and a detail message - * of (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This - * constructor is useful for exceptions that are little more than wrappers - * for other throwables (for example, {@link - * java.security.PrivilegedActionException}). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - * @since 1.4 - */ - public ClusterDaemonException(final Throwable cause) { - super(cause); - } -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonMBean.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonMBean.java deleted file mode 100644 index f9360b813b..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonMBean.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.daemon; - -import org.ow2.jonas.cluster.daemon.api.IClusterDaemon; - -public interface ClusterDaemonMBean extends IClusterDaemon { -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonTools.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonTools.java deleted file mode 100644 index b40241aa8e..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ClusterDaemonTools.java +++ /dev/null @@ -1,360 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.daemon; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.net.URI; -import java.net.URL; -import java.util.Properties; - -import org.ow2.carol.rmi.util.PortNumber; -import org.ow2.carol.util.configuration.CarolDefaultValues; -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.carol.util.configuration.ProtocolConfiguration; -import org.ow2.jonas.cluster.daemon.api.ClusterDaemonException; -import org.ow2.jonas.deployment.clusterd.ClusterDaemonConfiguration; -import org.ow2.jonas.deployment.clusterd.ClusterDaemonConfigurationException; -import org.ow2.jonas.deployment.clusterd.lib.ClusterDaemonConfigurationManager; -import org.ow2.jonas.lib.bootstrap.JProp; - - -/** - * Commons tools - */ - -public class ClusterDaemonTools { - - - public static Long ONE_MEGA=new Long(1024); - - - /** - * Current cluster configuration (loaded) - */ - private static ClusterDaemonConfiguration currentConfiguration = null; - - - /** - * Current cluster daemon configuration file (loaded) - */ - private static String currentConfigurationFileName = null; - - /** - * constructor - */ - private ClusterDaemonTools() { - - } - - /** - * Init carol. - * - * @throws ClusterDaemonException - * if an error occurs - * @return the configuration file. - */ - public static String initCarol() throws ClusterDaemonException { - System.setProperty("carol.server.mode", "true"); - String carolFile = null; - try { - // hack - Writer fw; - File fConf = null; - if (carolFile == null) { - // 1st, try to use the carol.properties in $JONAS_BASE/conf - File jonasBaseConf = new File(JProp.getJonasBase(), "conf"); - URL myCarolFile = new File(jonasBaseConf, CarolDefaultValues.CAROL_CONFIGURATION_FILE).toURI().toURL(); - - if (myCarolFile == null) { - fConf = new File(System.getProperty("java.io.tmpdir") - + File.separator + "cs-carol.properties"); - try { - fw = new FileWriter(fConf); - fw.write("carol.protocols=irmi\n"); - fw.write("carol.irmi.url=rmi://localhost:1806\n"); - // fw.write("carol.jvm.rmi.local.registry=true"); - fw.close(); - } catch (IOException e) { - throw new ClusterDaemonException( - "Cannot initialize carol", e); - } - } else { - fConf = new File(myCarolFile.getFile()); - } - } else { - fConf = new File(carolFile); - } - ConfigurationRepository.init(fConf.toURL()); - } catch (Exception e) { - throw new ClusterDaemonException("Cannot initialize carol", e); - } - return carolFile; - } - - /** - * Get the JMX URL of a server - * @param host The host of the server - * @param port The JMX port of the server - * @param serverName The name of the server - * @param carolProtocol The RMI protocol - * @return the JMX url of the server - * @throws ClusterDaemonException - */ - public static String getJmxUrl(final String host, final String port, final String serverName, - final String carolProtocol) - throws ClusterDaemonException { - - String serviceURL = null; - try { - if ("jrmp".equals(carolProtocol)) { - // Treat RMI/JRMP case - String myName = "jrmpconnector_" + serverName; - serviceURL = "service:jmx:rmi://" + host; - int jrmpExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_JRMP_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - jrmpExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - } - if (jrmpExportedPort > 0) { - serviceURL += ":" + jrmpExportedPort; - } - serviceURL += "/jndi/rmi://" + host + ":" + port + "/" + myName; - } else if ("irmi".equals(carolProtocol)) { - // Treat RMI/IRMI case - String myName = "irmiconnector_" + serverName; - serviceURL = "service:jmx:rmi://" + host; - int irmiExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_IRMI_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - irmiExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - // Add 1 to this port for IRMI as the JMX object will not - // use IRMI to bind but JRMP methods. - irmiExportedPort++; - } - if (irmiExportedPort > 1) { - serviceURL += ":" + irmiExportedPort; - } - serviceURL += "/jndi/rmi://" + host + ":" + port + "/" + myName; - } else if ("iiop".equals(carolProtocol)) { - // Treat RMI/IIOP case - String myName = "iiopconnector_" + serverName; - - serviceURL = "service:jmx:iiop://" + host + "/jndi/iiop://" + host + ":" + port + "/" + myName; - } - } catch (Exception e) { - throw new ClusterDaemonException("Cannot get JMX URL", e); - } - return serviceURL; - } - - - - /** - * Build the JMX url connection - * @param cdName cluster daemon name - * @return JMX url - * @throws ClusterDaemonException if an error occurs - */ - public static String getJmxUrl(String cdName) throws ClusterDaemonException { - - // Determine protocols used by Carol and their configuration, only the current one is considered - String serviceURL = null; - try { - initCarol(); - ProtocolConfiguration protocolConfiguration = ConfigurationRepository.getCurrentConfiguration(); - ConfigurationRepository.setCurrentConfiguration(protocolConfiguration); - String carolProtocol = protocolConfiguration.getName(); - String providerUrl = protocolConfiguration.getProviderURL(); - URI carolURL = new URI(providerUrl); - String host = carolURL.getHost(); - String port = String.valueOf(carolURL.getPort()); - String scheme = carolURL.getScheme(); - - if (scheme.equals("rmi") && carolProtocol.equals("jrmp")) { - // Treat RMI/JRMP cas - String myName = "jrmpconnector_" + cdName; - serviceURL = "service:jmx:rmi://" + host; - int jrmpExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_JRMP_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - jrmpExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - } - if (jrmpExportedPort > 0) { - serviceURL += ":" + jrmpExportedPort; - } - serviceURL += "/jndi/rmi://" + host + ":" + port + "/" + myName; - } else if (scheme.equals("rmi") && carolProtocol.equals("irmi")) { - // Treat RMI/IRMI cas - String myName = "irmiconnector_" + cdName; - serviceURL = "service:jmx:rmi://" + host; - int irmiExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_IRMI_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - irmiExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - // Add 1 to this port for IRMI as the JMX object will not - // use IRMI to bind but JRMP methods. - irmiExportedPort++; - } - if (irmiExportedPort > 1) { - serviceURL += ":" + irmiExportedPort; - } - serviceURL += "/jndi/rmi://" + host + ":" + port + "/" + myName; - } /*else if (scheme.equals("jrmi")) { - // Treat JEREMIE case - String myName = "jeremieconnector_" + cdName; - serviceURL = "service:jmx:rmi://" + host; - int jeremieExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_JEREMIE_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - jeremieExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - // Add 1 to this port for jeremie as the JMX object will not - // use jeremie to bind but JRMP methods. - jeremieExportedPort++; - } - if (jeremieExportedPort > 1024) { - serviceURL += ":" + jeremieExportedPort; - } - serviceURL += "/jndi/jrmi://" + host + ":" + port + "/" + myName; - - } */else if (scheme.equals("cmi")) { - // Treat CMI case - String myName = "cmiconnector_" + cdName; - serviceURL = "service:jmx:rmi://" + host; - - int jrmpExportedPort = 0; - // Add port number of exported objects if one is set by carol. - String propertyName = CarolDefaultValues.SERVER_JRMP_PORT; - Properties p = ConfigurationRepository.getProperties(); - if (p != null) { - jrmpExportedPort = PortNumber.strToint(p.getProperty(propertyName, "0"), propertyName); - } - if (jrmpExportedPort > 0) { - serviceURL += ":" + jrmpExportedPort; - } - serviceURL += "/jndi/cmi://" + host + ":" + port + "/" + myName; - - - } else if (scheme.equals("iiop")) { - // Treat RMI/IIOP case - String myName = "iiopconnector_" + cdName; - - serviceURL = "service:jmx:iiop://" + host + "/jndi/iiop://" + host + ":" + port + "/" + myName; - } - } catch (Exception e) { - throw new ClusterDaemonException("Cannot get JMX URL", e); - } - return serviceURL; - - } - - /** - * Build the Object Name - * @return Object name - * @throws ClusterDaemonException if an error occurs - */ - public static String getObjectName() throws ClusterDaemonException { - - // Determine protocols used by Carol and their configuration, only the current one is considered - String objName = null; - try { - ProtocolConfiguration protocolConfiguration = ConfigurationRepository.getCurrentConfiguration(); - ConfigurationRepository.setCurrentConfiguration(protocolConfiguration); - String carolProtocol = protocolConfiguration.getName(); - String providerUrl = protocolConfiguration.getProviderURL(); - URI carolURL = new URI(providerUrl); - String scheme = carolURL.getScheme(); - - if (scheme.equals("rmi") && carolProtocol.equals("jrmp")) { - // Treat RMI/JRMP cas - objName = "connectors:protocol=jrmp, name=cs_connector"; - } else if (scheme.equals("rmi") && carolProtocol.equals("irmi")) { - // Treat RMI/IRMI cas - objName = "connectors:protocol=irmi, name=cs_connector"; - } else if (scheme.equals("jrmi")) { - // Treat JEREMIE case - objName = "connectors:protocol=jrmi, name=cs_connector"; - } else if (scheme.equals("cmi")) { - // Treat CMI case - objName = "connectors:protocol=cmi, name=cs_connector"; - - } else if (scheme.equals("iiop")) { - // Treat RMI/IIOP case - objName = "connectors:protocol=iiop, name=cs_connector"; - } - } catch (Exception e) { - throw new ClusterDaemonException("Cannot get ObjectName", e); - } - return objName; - - } - - - /** - * Load the cluster daemon configuration (clusterd.xml) - * @param confFileName configuration file to used - * @throws ClusterDaemonException if an error occurs - */ - public static void loadClusterDaemonConfiguration(String confFileName) throws ClusterDaemonException { - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - - currentConfiguration = null; - try { - currentConfiguration = ClusterDaemonConfigurationManager.getClusterDaemonConfiguration(confFileName, currentLoader); - currentConfigurationFileName = ClusterDaemonConfigurationManager.getClusterDaemonFileName(confFileName); - } catch (ClusterDaemonConfigurationException e) { - throw new ClusterDaemonException(e); - } - - } - - - /** - * @return current configuration - */ - public static ClusterDaemonConfiguration getCurrentConfiguration() { - return currentConfiguration; - } - - /** - * @return current configuration - */ - public static String getCurrentConfigurationFileName() { - return currentConfigurationFileName; - } - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/CmdReaderThread.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/CmdReaderThread.java deleted file mode 100644 index 790af3b151..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/CmdReaderThread.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.ow2.jonas.cluster.daemon; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; - -/** - * Allow to trace errors/output of a process. - */ -public class CmdReaderThread implements Runnable { - - /** - * Input stream containing information. - */ - private InputStream is; - - /** - * Should send as error or debug message. - */ - private boolean isErrorMessage = false; - - /** - * Logger to use. - */ - private Logger logger = null; - - /** - * Cmd associated with the reader. - */ - private String cmd = null; - - /** - * Constructor. - * - * @param logger logger - * @param cmd command - * @param is given input stream - * @param isErrorMessage Should send as error or debug message - */ - public CmdReaderThread(final Logger logger, final String cmd, final InputStream is, final boolean isErrorMessage) { - this.is = is; - this.isErrorMessage = isErrorMessage; - this.logger = logger; - this.cmd = cmd; - } - - /** - * Thread execution printing information received. - */ - public void run() { - try { - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - String str = null; - while ((str = br.readLine()) != null) { - if (isErrorMessage) { - this.logger.log(BasicLevel.ERROR, "<" + cmd + "> " + str); - } else { - this.logger.log(BasicLevel.DEBUG, "<" + cmd + "> " + str); - } - } - // close input stream - is.close(); - } catch (Exception e) { - this.logger.log(BasicLevel.ERROR, e.getMessage()); - e.printStackTrace(); - } - } - -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/MonitorThread.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/MonitorThread.java deleted file mode 100644 index 4f89290732..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/MonitorThread.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ow2.jonas.cluster.daemon; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import java.io.BufferedWriter; -import java.io.FileWriter; -/** - * Monitor is a tool that collects node's performance information regularly. - * if needed (only supporting CPU and memory information now). - * - * @author zhengzz - */ -public class MonitorThread extends Thread { - - private static final int FACTOR = 10; - - /** - * Logger to use. - */ - private Logger logger = null; - - private int cpurate; - - private long totalM, availM, percentM; - - private BufferedWriter out; - - private int count = 0; - - /** - * Initializes log monitor. - * - * @param logger - */ - public MonitorThread(final Logger logger) { - this.logger = logger; - try { - out = new BufferedWriter(new FileWriter("monitor.txt", true)); - } catch (Exception e) { - this.logger.log(BasicLevel.ERROR, "Fail to new FileWrite from monitor.txt" + e); - } - } - - /* - * (non-Javadoc) - * @see java.lang.Thread#run() - */ - @Override - @SuppressWarnings("static-access") - public void run() { - this.logger.log(BasicLevel.INFO, "Start monitoring thread...."); - while (true) { - try { - Thread.currentThread().sleep(FACTOR * ClusterDaemon.SLEEP_TIME / 2); - count = count + FACTOR; - } catch (Exception e) { - e.printStackTrace(); - } - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ShutdownHookThread.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ShutdownHookThread.java deleted file mode 100644 index 1932c1cbdc..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/ShutdownHookThread.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.ow2.jonas.cluster.daemon; - - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.carol.util.configuration.TraceCarol; - -/** - * Allow stop the cmd childs - */ -public class ShutdownHookThread extends Thread { - private ClusterDaemon clusterDaemon; - - private Logger logger; - - - /** - * Action at the shutdown : destroy the process. - */ - public static final int ACTION_DESTROY = 0; - - /** - * Action at the shutdown : stop the JOnAS instance. - */ - public static final int ACTION_JONAS_STOP = 1; - - /** - * Cmdkey. - */ - private String keyCmd = null; - - /** - * Action. - */ - private int action = -1; - - /** - * JOnAS instance name. - */ - private String serverName = null; - - /** - * Constructor. - * - * @param keyCmd key command - */ - public ShutdownHookThread(final String serverName, final String keyCmd, - final int action, ClusterDaemon clusterDaemon, - final Logger logger) { - this.clusterDaemon = clusterDaemon; - this.keyCmd = keyCmd; - this.action = action; - this.serverName = serverName; - this.logger = logger; - } - - /** - * Thread execution printing information received. - */ - @Override - public void run() { - try { - if (action == ACTION_DESTROY) { - ((Process) clusterDaemon.getProcessMap().get(this.keyCmd)).destroy(); - logger.log(BasicLevel.DEBUG, "destroy cmd" + keyCmd); - } else if (action == ACTION_JONAS_STOP) { - logger.log(BasicLevel.DEBUG, "stop JOnAS instance " + serverName); - clusterDaemon.doStopJOnAS(serverName); - logger.log(BasicLevel.DEBUG, "destroy cmd" + keyCmd); - ((Process) clusterDaemon.getProcessMap().get(this.keyCmd)).destroy(); - } - - } catch (Exception e) { - TraceCarol.error("ShutdownHook problem for key=" + this.keyCmd, e); - } - } -} \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteException.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteException.java deleted file mode 100644 index 2ed348d140..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteException.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon.mbean; - -/** - * Exception thrown if there is a failure in the JMX remote helper. - * @author Florent Benoit - */ -public class JMXRemoteException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = -8206835816589559694L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public JMXRemoteException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public JMXRemoteException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public JMXRemoteException(final String message, final Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteHelper.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteHelper.java deleted file mode 100644 index 927fc90181..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/JMXRemoteHelper.java +++ /dev/null @@ -1,253 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon.mbean; - -import org.ow2.jonas.cluster.daemon.ClusterDaemon; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; -import javax.management.ObjectInstance; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXConnectorServerFactory; -import javax.management.remote.JMXServiceURL; - -/** - * This helper class allow to start a JMX remote connector allowing to connect remote applications. - * This could be for example a JSR88 provider. - * @author Florent Benoit - * @author S. Ali Tokmen - */ -public final class JMXRemoteHelper { - - /** - * JMX connector (server side). - */ - private static JMXConnectorServer jmxConnectorServer = null; - - /** - * Default URL. - */ - private static final String DEFAULT_URL = "service:jmx:rmi:///jndi/rmi://localhost:1099/jonasConnector"; - - /** - * ObjectName for the connector. - */ - private static final String DEFAULT_NAME_CONNECTOR = "connectors:name=JMXRemoteConnector"; - - /** - * MBean server connection - */ - private static MBeanServerConnection mbscnx = null; - - - /** - * Utility class, no public constructor. - */ - private JMXRemoteHelper() { - - } - - - /** - * Build a new JMX Remote connector - * @param url JMX remote url. - * @param env Environment to use as base when creating the connector. - * Can be null. - * @throws JMXRemoteException if jmx connector can't be built. - */ - private static void init(String url, Map env) throws JMXRemoteException { - - // Create connector - Map environment = new HashMap(); - JMXServiceURL jmxServiceURL = null; - try { - jmxServiceURL = new JMXServiceURL(url); - } catch (MalformedURLException e) { - throw new JMXRemoteException("Cannot create jmxservice url with url '" + url + "'.", e); - } - environment.put("jmx.remote.jndi.rebind", "true"); - if (env != null) { - environment.putAll(env); - } - try { - jmxConnectorServer = JMXConnectorServerFactory.newJMXConnectorServer(jmxServiceURL, environment, null); - } catch (IOException e) { - throw new JMXRemoteException("Cannot create new JMX Connector", e); - } - - } - - /** - * Connect to a JMX Remote connector by calling - * {@link JMXRemoteHelper#connect(String, String, String)}(url, null, null). - * @param url JMX remote url. - * @return MBeanServerConnection MBean server connection - * @throws JMXRemoteException if jmx connector can't be connected. - */ - public static MBeanServerConnection connect(String url) throws JMXRemoteException { - return connect(url, null, null); - } - - /** - * Connect to a JMX Remote connector. If either username or password - * (or both) is null, no credentials are provided for connection. - * @param url JMX remote url. - * @param username User name to use, can be null. - * @param password Password to use, can be null. - * @return MBeanServerConnection MBean server connection - * @throws JMXRemoteException if jmx connector can't be connected. - */ - public static MBeanServerConnection connect(String url, String username, String password) throws JMXRemoteException { - if (mbscnx != null) { - return mbscnx; - } - - JMXServiceURL jmxServiceURL = null; - try { - jmxServiceURL = new JMXServiceURL(url); - } catch (MalformedURLException e) { - throw new JMXRemoteException("Cannot create jmxservice url with url '" + url + "'.", e); - } - try { - Map env = null; - if(username != null && password != null) { - env = new HashMap(1); - String[] creds = {username, password}; - env.put(JMXConnector.CREDENTIALS, creds); - } - JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxServiceURL, env); - mbscnx = jmxConnector.getMBeanServerConnection(); - } catch (IOException e) { - throw new JMXRemoteException("Cannot connect to JMX remote with '" + url + "'.", e); - } - return mbscnx; - } - - /** - * Calls {@link JMXRemoteHelper#startConnector(String, String, Map)}(url, connectorName, null). - * @param url JMX remote url - * @param connectorName connector name - * @throws JMXRemoteException if the connector can't be started. - */ - public static synchronized void startConnector(String url, String connectorName) throws JMXRemoteException { - startConnector(url, connectorName, null); - } - - /** - * Start a JMX connector (used to do remote administration). - * @param url JMX remote url - * @param connectorName connector name - * @param env Environment to use as base when creating the connector, - * used to provide security. Can be null. - * @throws JMXRemoteException if the connector can't be started. - * @return The created JMX connector server. - */ - public static synchronized JMXConnectorServer startConnector(String url, String connectorName, Map env) throws JMXRemoteException { - // Create connector if null - if (jmxConnectorServer == null) { - if (url == null) { - init(DEFAULT_URL, env); - } else { - init(url, env); - } - } - - // Create MBean for this connector - ObjectName connectorServerName = null; - String objName = null; - try { - if (connectorName == null) { - objName = DEFAULT_NAME_CONNECTOR; - } else { - objName = connectorName; - } - connectorServerName = new ObjectName(objName); - } catch (MalformedObjectNameException e) { - throw new JMXRemoteException("Cannot create ObjectName with name '" + objName + "'", e); - } catch (NullPointerException e) { - throw new JMXRemoteException("Cannot create ObjectName with name '" + objName + "'", e); - } - - // register it - try { - MBeanServerHelper.getMBeanServer().registerMBean(jmxConnectorServer, connectorServerName); - } catch (InstanceAlreadyExistsException e) { - throw new JMXRemoteException("Cannot register Mbean with the name '" + connectorServerName + "'", e); - } catch (MBeanRegistrationException e) { - throw new JMXRemoteException("Cannot register Mbean with the name '" + connectorServerName + "'", e); - } catch (NotCompliantMBeanException e) { - throw new JMXRemoteException("Cannot register Mbean with the name '" + connectorServerName + "'", e); - } - - // Start connector - ClassLoader threadClassLoader = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(ClusterDaemon.class.getClassLoader()); - jmxConnectorServer.start(); - } catch (IOException e) { - throw new JMXRemoteException("Cannot start the jmx connector", e); - } finally { - Thread.currentThread().setContextClassLoader(threadClassLoader); - } - return jmxConnectorServer; - } - - - - /** - * Get ObjectInstance - * @param cnx MBean server connection - * @param pattern MBean name - * @return ObjectInstance - */ - public static ObjectInstance getInstance(MBeanServerConnection cnx, String pattern) { - - Set oiset = null ; - ObjectInstance oi = null; - try { - ObjectName on = new ObjectName(pattern); - oiset = cnx.queryMBeans(on, null); - - } catch (Exception ex){ - ex.printStackTrace(); - } - if (! oiset.isEmpty()) oi = (ObjectInstance) oiset.iterator().next(); - - return oi; - } -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerException.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerException.java deleted file mode 100644 index 444babdbd5..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerException.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon.mbean; - -/** - * Exception thrown if there is a failure in the MBean helper. - * @author Florent Benoit - */ -public class MBeanServerException extends Exception { - - /** - * Id for serializable class. - */ - private static final long serialVersionUID = 3775231369308593696L; - - /** - * Constructs a new runtime exception with null as its detail - * message. The cause is not initialized, and may subsequently be - * initialized by a call to {@link #initCause}. - */ - public MBeanServerException() { - super(); - } - - /** - * Constructs a new runtime exception with the specified detail message. The - * cause is not initialized, and may subsequently be initialized by a call - * to {@link #initCause}. - * @param message the detail message. The detail message is saved for later - * retrieval by the {@link #getMessage()} method. - */ - public MBeanServerException(final String message) { - super(message); - } - - /** - * Constructs a new runtime exception with the specified detail message and - * cause. - *

    - * Note that the detail message associated with cause is - * not automatically incorporated in this runtime exception's detail - * message. - * @param message the detail message (which is saved for later retrieval by - * the {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is - * permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public MBeanServerException(final String message, final Throwable cause) { - super(message, cause); - } - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerHelper.java b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerHelper.java deleted file mode 100644 index d0ba41887c..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/java/org/ow2/jonas/cluster/daemon/mbean/MBeanServerHelper.java +++ /dev/null @@ -1,130 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A.S. - * Contact: jonas@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.daemon.mbean; - -import java.util.List; - -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanServer; -import javax.management.MBeanServerFactory; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; - -/** - * Allow to start an MBean server and get an MBeanServer. - * @author Florent Benoit - */ -public final class MBeanServerHelper { - - /** - * Id of the generated MBeanServer. - */ - private static String idMbeanServer = null; - - /** - * Default domain name. - */ - private static final String DEFAULT_DOMAIN_NAME = "JOnAS"; - - /** - * Utility class, no public constructor. - */ - private MBeanServerHelper() { - - } - - /** - * Gets first available MBean Server. - * @return first available MBean server. - * @throws JMXRemoteException if no server is available - */ - public static MBeanServer getMBeanServer() throws JMXRemoteException { - if (getInternalMBeanServer() != null) { - return getInternalMBeanServer(); - } - throw new JMXRemoteException("No running MBeanServer was found."); - } - - /** - * @return first MBean server found. - */ - private static MBeanServer getInternalMBeanServer() { - List mbeanServers = MBeanServerFactory.findMBeanServer(null); - if (mbeanServers.size() > 0) { - return (MBeanServer) mbeanServers.get(0); - } - return null; - } - - /** - * Starts an MBeanServer if no MBeanServer is available. - * @throws MBeanServerException if MBeanServer can't be started - */ - public static synchronized void startMBeanServer(String domainName) throws MBeanServerException { - MBeanServer mbeanServer = getInternalMBeanServer(); - // Need to create one - if (mbeanServer == null) { - // Need to create an MBean server - if (domainName == null) { - mbeanServer = MBeanServerFactory.createMBeanServer(DEFAULT_DOMAIN_NAME); - } else { - mbeanServer = MBeanServerFactory.createMBeanServer(domainName); - } - } - - ObjectName mbeanServerDelegate = null; - try { - mbeanServerDelegate = new ObjectName("JMImplementation:type=MBeanServerDelegate"); - } catch (MalformedObjectNameException e) { - throw new MBeanServerException("Cannot build an objectName", e); - } catch (NullPointerException e) { - throw new MBeanServerException("Cannot build an objectName", e); - } - - try { - idMbeanServer = (String) mbeanServer.getAttribute(mbeanServerDelegate, "MBeanServerId"); - } catch (AttributeNotFoundException e) { - throw new MBeanServerException("Cannot get an attribute on MBeanserver.", e); - } catch (InstanceNotFoundException e) { - throw new MBeanServerException("Cannot get an attribute on MBeanserver.", e); - } catch (MBeanException e) { - throw new MBeanServerException("Cannot get an attribute on MBeanserver.", e); - } catch (ReflectionException e) { - throw new MBeanServerException("Cannot get an attribute on MBeanserver.", e); - } - } - - /** - * @return the id of the created MbeanServer. - */ - protected static String getIdMbeanServer() { - return idMbeanServer; - } - -} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd deleted file mode 100644 index 1fbfbd3505..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999-2008 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# ----------------------------------------------------------------------- -# Compute JONAS_ROOT in case it has not been set. -# ----------------------------------------------------------------------- -if [ ! -d $JONAS_ROOT/lib ]; then - savewd=`pwd` - cd `dirname $0` - zdir=`pwd` - cd $savewd - zfqn=$zdir/`basename "$0"` - JONAS_ROOT=`dirname $zdir` - JONAS_ROOT=`dirname $JONAS_ROOT` - export JONAS_ROOT -fi - -# Set CLASSPATH and JONAS_BASE -. $JONAS_ROOT/bin/setenv - -JONAS_OPTS="\ - -Djonas.root=$JONAS_ROOT \ - -Djonas.root=$JONAS_ROOT \ - -Djonas.base=$JONAS_BASE \ - -Djava.awt.headless=true \ - -Djava.security.auth.login.config=$JONAS_BASE/conf/jaas.config \ - -Djava.endorsed.dirs=$JONAS_ROOT/lib/endorsed \ - -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB \ - -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton \ - -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer \ - -Djavax.rmi.CORBA.PortableRemoteObjectClass=org.ow2.carol.rmi.multi.MultiPRODelegate \ - -Djava.naming.factory.initial=org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory \ - -Djavax.rmi.CORBA.UtilClass=org.ow2.carol.util.delegate.UtilDelegateImpl \ - " - -# --------------------------------------------- -# Get arguments -# --------------------------------------------- -ARGS= -DEBUG_OPTS= -MODE=start -USERNAME= -PASSWORD= -while [ "$#" -gt 0 ] - do case "$1" in - start) - MODE=start - ;; - stop) - MODE=stop - ;; - -cp) - shift - JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$1 - ;; - -D*) - JAVA_OPTS="$JAVA_OPTS $1" - ;; - -security) - # Use security manager - JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djava.security.policy=$JONAS_BASE/conf/java.policy" - ;; - -debug) - shift - # $1=-p - if [ "$1" != "-p" ]; then - echo "-debug mode need a following \"-p \"" - exit 1 - fi - shift - DEBUG_PORT=$1 - DEBUG_SUSPEND=n - if [ "$2" = "-s" ]; then - shift - shift - DEBUG_SUSPEND=$1 - fi - echo "Debug Info :" - echo " listening on port : $DEBUG_PORT" - echo " suspend mode : $DEBUG_SUSPEND" - DEBUG_OPTS=" -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=$DEBUG_PORT,suspend=$DEBUG_SUSPEND" - ;; - -username) - shift - USERNAME="-username $1" - ;; - -password) - shift - PASSWORD="-password $1" - ;; - *) - # All other args are passed "as is" to the java program - ARGS="$ARGS $1" - ;; - esac - shift -done - -# --------------------------------------------- -# Check mode -# --------------------------------------------- -case "$MODE" in - start) - CLASS_TO_RUN=org.ow2.jonas.cluster.daemon.ClusterDaemon - ;; - stop) - CLASS_TO_RUN="org.ow2.jonas.cluster.daemon.ClusterDaemonAdmin -stop" - ;; - *) - echo "Usage: jclusterd start|stop [options]" - echo "Debug mode : jclusterd start -debug -p [-s ] [options]" - exit 1 - ;; -esac - -# --------------------------------------------- -# Set tomcat base directory -# --------------------------------------------- -if [ -n "$CATALINA_HOME" ] -then - JONAS_OPTS="$JONAS_OPTS -Dcatalina.home=$CATALINA_HOME" -fi -if [ -n "$CATALINA_BASE" ] -then - JONAS_OPTS="$JONAS_OPTS -Dcatalina.base=$CATALINA_BASE" -fi - -# --------------------------------------------- -# Set jetty home directory -# --------------------------------------------- -if [ -n "$JETTY_HOME" ] -then - JONAS_OPTS="$JONAS_OPTS -Djetty.home=$JETTY_HOME" -fi - - -# update CLASSPATH -JONAS_CLASSPATH=$JONAS_CLASSPATH$SPS$JONAS_ROOT/lib/bootstrap/client-bootstrap.jar$SPS$JONAS_ROOT/lib/jonas-cluster-daemon.jar$SPS$JONAS_ROOT/lib/client.jar - -# --------------------------------------------- -# Run java command -# --------------------------------------------- -$JAVA -cp $JONAS_CLASSPATH $JAVA_OPTS $DEBUG_OPTS $JONAS_OPTS org.ow2.jonas.client.boot.Bootstrap $CLASS_TO_RUN $ARGS $USERNAME $PASSWORD diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd.bat b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd.bat deleted file mode 100755 index fc80a98335..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/bin/jclusterd.bat +++ /dev/null @@ -1,198 +0,0 @@ -@Echo Off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999-2009 Bull S.A.S. -Rem Contact: jonas-team@ow2.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem but WITHOUT ANY WARRANTY; without even the implied warranty of -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Benoit Pelletier -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Keep variables local to this script -setlocal ENABLEDELAYEDEXPANSION - -Rem Check for JONAS_ROOT, if not set set it to the default -if ["%JONAS_ROOT%"]==[""] Goto SetJONAS_ROOT -echo JONAS_ROOT is set to %JONAS_ROOT% -Goto ExecuteBatch - -Rem %~dp0 is the directory in which this batch file is, -Rem therefore JONAS_ROOT\bin in our case. -:SetJONAS_ROOT -pushd "%~dp0" -cd .. -@set JONAS_ROOT=%CD% -@echo Setting JONAS_ROOT to %JONAS_ROOT% -popd - -:ExecuteBatch -Rem --------------------------------------------- -Rem set environment -Rem --------------------------------------------- -if ["%JONAS_ROOT%"]==[""] goto setroot -call "%JONAS_ROOT%\bin\setenv.bat" -set JONAS_LIB=%JONAS_ROOT%\lib - - -Rem --------------------------------------------- -Rem set JAVA_OPTS -Rem --------------------------------------------- -if ["%JAVA_HOME%"]==[""] goto setjava - -Rem JONAS_OPTS may be already partially initialized -set JONAS_OPTS=%JONAS_OPTS% -Djonas.root="%JONAS_ROOT%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.root="%JONAS_ROOT%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.base="%JONAS_BASE%" -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.policy="%JONAS_ROOT%\conf\java.policy" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.classpath="%XTRA_CLASSPATH%" -set JONAS_OPTS=%JONAS_OPTS% -Djonas.default.classloader=true -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton -set JONAS_OPTS=%JONAS_OPTS% -Dorg.omg.PortableInterceptor.ORBInitializerClass.standard_init=org.jacorb.orb.standardInterceptors.IORInterceptorInitializer -set JONAS_OPTS=%JONAS_OPTS% -Djavax.rmi.CORBA.PortableRemoteObjectClass=org.ow2.carol.rmi.multi.MultiPRODelegate -set JONAS_OPTS=%JONAS_OPTS% -Djava.naming.factory.initial=org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory -set JONAS_OPTS=%JONAS_OPTS% -Djavax.rmi.CORBA.UtilClass=org.ow2.carol.util.delegate.UtilDelegateImpl -set JONAS_OPTS=%JONAS_OPTS% -Djava.security.auth.login.config="%JONAS_BASE%\conf\jaas.config" -set JONAS_OPTS=%JONAS_OPTS% -Djava.endorsed.dirs="%JONAS_ROOT%\lib\endorsed" - -Rem --------------------------------------------- -Rem Get args -Rem --------------------------------------------- -set ARGS= -set MODE= -set USERNAME= -set PASSWORD= - -:loop_on_args -Set VALUE=%~1 -if [%1]==[] goto usage -if [%1]==[start] goto start_arg -if [%1]==[stop] goto stop_arg -if [%1]==[-cp] goto cp_arg -if [%1]==[-debug] goto debug_arg -if [%1]==[-username] goto username_arg -if [%1]==[-password] goto password_arg -if %VALUE:~0,2%==-D goto java_opts -set ARGS=%ARGS% %1 -goto next_arg - -Rem Add -D System Properties -:java_opts -Set PROP=%~1 -shift -Set PROP=%PROP%=%1 -Set JONAS_OPTS=%JONAS_OPTS% %PROP% -goto next_arg - - -:start_arg -set MODE=start -set CLASS_TO_RUN=org.ow2.jonas.cluster.daemon.ClusterDaemon -echo JONAS_BASE is set to %JONAS_BASE% -goto next_arg - -:stop_arg -set MODE=stop -set CLASS_TO_RUN=org.ow2.jonas.cluster.daemon.ClusterDaemonAdmin -stop -goto next_arg - -:cp_arg -shift -set JONAS_CLASSPATH=%JONAS_CLASSPATH%;%~1 -goto next_arg - -:debug_arg -shift -if not [%1]==[-p] goto debug_usage -shift -set JONAS_DEBUG_PORT=%1 -set JONAS_DEBUG_SUSPEND=n -if not [%2]==[-s] goto set_debug_opts -shift -shift -set JONAS_DEBUG_SUSPEND=%1 - -:set_debug_opts -echo JOnAS Debug Info : -echo listening on port : %JONAS_DEBUG_PORT% -echo suspend mode : %JONAS_DEBUG_SUSPEND% -set JONAS_DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=%JONAS_DEBUG_PORT%,suspend=%JONAS_DEBUG_SUSPEND% -goto next_arg - -:username_arg -shift -set USERNAME=-username %1 -goto next_arg - -:password_arg -shift -set PASSWORD=-password %1 -goto next_arg - -:next_arg -shift -if not [%1]==[] goto loop_on_args - -if [%MODE%]==[] goto no_mode - - -Rem --------------------------------------------- -Rem Set tomcat/jetty base directory -Rem --------------------------------------------- -set TOMCAT_OPTS= -set JETTY_OPTS= -if not ["%TOMCAT_BASE%"]==[""] set TOMCAT_OPTS=%TOMCAT_OPTS% -Dtomcat.base="%TOMCAT_BASE%" -if not ["%CATALINA_HOME%"]==[""] set TOMCAT_OPTS=%TOMCAT_OPTS% -Dcatalina.home="%CATALINA_HOME%" -if not ["%CATALINA_BASE%"]==[""] set TOMCAT_OPTS=%TOMCAT_OPTS% -Dcatalina.base="%CATALINA_BASE%" -if not ["%JETTY_HOME%"]==[""] set JETTY_OPTS=-Djetty.home="%JETTY_HOME%" - -Rem --------------------------------------------- -Rem include jonas classes -Rem --------------------------------------------- -Set JONAS_CLASSPATH=%JONAS_ROOT%\lib\bootstrap\client-bootstrap.jar;%JONAS_ROOT%\lib\jonas-cluster-daemon.jar;%JONAS_ROOT%\lib\client.jar;%JONAS_CLASSPATH% - -Rem --------------------------------------------- -Rem Run java command -Rem --------------------------------------------- -set BOOT=org.ow2.jonas.client.boot.Bootstrap -start /B "jclusterd" %JAVA% -cp "%JONAS_CLASSPATH%" %JAVA_OPTS% %JONAS_DEBUG_OPTS% %JONAS_OPTS% %TOMCAT_OPTS% %JETTY_OPTS% %BOOT% %CLASS_TO_RUN% %USERNAME% %PASSWORD% - -goto :EOF - -:setjava -echo JAVA_HOME not set. -goto :EOF - -:setroot -echo JONAS_ROOT not set. -goto :EOF - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto :EOF - -:no_mode -echo "No startup mode specified, specify start | stop | admin | version | check" -goto usage - -:usage -echo "jclusterd start | stop [options]" -echo "Debug mode : jclusterd start -debug -p [-s ]" -goto :EOF - diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/conf/clusterd.xml b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/conf/clusterd.xml deleted file mode 100644 index dfa4075f5b..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/jonas-resources/conf/clusterd.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - cd - domainSample - loosely-coupled - - - JGroupsDiscovery - jgroups-discovery.xml - true - - - - - - - diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/META-INF/jonas-cluster-daemon-core.bnd b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/META-INF/jonas-cluster-daemon-core.bnd deleted file mode 100644 index c920845b12..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/META-INF/jonas-cluster-daemon-core.bnd +++ /dev/null @@ -1,34 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -Import-Package org.ow2.jonas.cluster.daemon.api, \ - org.objectweb.util.monolog.api, \ - org.ow2.jonas.lib.util, \ - * - -DynamicImport-Package org.ow2.carol.jndi.spi,\ - org.ow2.carol.jndi.spi.*,\ - org.ow2.carol.jndi.intercept.*,\ - org.ow2.carol.jndi.intercept.spi.* - -#Implementation-Version ${project.version} diff --git a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/metadata.xml b/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/metadata.xml deleted file mode 100644 index 9e574daf52..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/core/src/main/resources/metadata.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/jonas/modules/tools/jonas-cluster-daemon/pom.xml b/jonas/modules/tools/jonas-cluster-daemon/pom.xml deleted file mode 100644 index d4ccbd4035..0000000000 --- a/jonas/modules/tools/jonas-cluster-daemon/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-cluster-daemon - pom - JOnAS :: Tools :: Cluster Daemon - - - api - core - ant - - diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/pom.xml b/jonas/modules/tools/launchers/jonas-launcher-for-addons/pom.xml deleted file mode 100644 index f71fcfd52d..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/pom.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - org.ow2.jonas - jonas-launchers - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.launchers - jonas-launcher-for-addons - bundle - JOnAS :: Tools :: Launchers :: JOnAS for addons - - - org.ow2.jonas.launcher.jonas.JOnAS - - - - - org.osgi - org.osgi.core - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.bundles - ow2-util-substitution - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - false - - - org.ow2.jonas - bootstrap-core-for-addons - ${project.version} - - - org.ow2.jonas - jonas-service-manager-for-addons - ${project.version} - - - org.ow2.jonas - jonas-mbeans-for-addons - ${project.version} - - - org.ow2.jonas - jonas-addon-core - ${project.version} - - - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - org/ow2/jonas/launcher/jonas/auto-deploy.properties - - - - generate-autodeploy-bundles-list - true - - generate-list - - generate-sources - - - - - - - diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java deleted file mode 100644 index 836ea21598..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java +++ /dev/null @@ -1,536 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import static org.ow2.jonas.launcher.jonas.util.IOUtils.getPropertiesFromClass; -import static org.ow2.jonas.launcher.jonas.util.IOUtils.getPropertiesFromFile; -import static org.ow2.jonas.launcher.jonas.util.IOUtils.props2Map; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.SortedMap; -import java.util.TreeMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.osgi.framework.Constants; -import org.ow2.jonas.launcher.jonas.util.IOUtils; -import org.ow2.jonas.launcher.jonas.util.JOnASUtils; -import org.ow2.jonas.launcher.jonas.util.Maven2Utils; -import org.ow2.util.substitution.ISubstitutionEngine; -import org.ow2.util.substitution.engine.DefaultSubstitutionEngine; -import org.ow2.util.substitution.resolver.ChainedResolver; -import org.ow2.util.substitution.resolver.PropertiesResolver; -import org.ow2.util.substitution.resolver.RecursiveResolver; - -/** - * Default {@link IConfigurationProvider} for Apache Felix. - * @author Guillaume Sauthier - */ -public class DefaultConfigurationProvider implements IConfigurationProvider { - - /** - * Property for the bundles to start at startup. - */ - private static final String JONAS_BUNDLES_CONFIG_FILE_PROP = "jonas.bundles.configuration.file"; - - /** - * Logger. - */ - private static final Logger LOGGER = Logger.getLogger(DefaultConfigurationProvider.class.getName()); - - /** - * Property substitution engine. - */ - private ISubstitutionEngine substitutionEngine; - - /** - * The list of resolvers to be used. - */ - private ChainedResolver resolver; - - /** - * List of auto install bundle locations (per level). - */ - private SortedMap> autoInstallLevelBundlesLocationMap = null; - - /** - * List of auto start bundle locations (per level). - */ - private SortedMap> autoStartLevelBundlesLocationMap = null; - - /** - * Default constructor. - */ - public DefaultConfigurationProvider() { - resolver = new ChainedResolver(); - this.substitutionEngine = createSubstitutionEngine(); - this.autoInstallLevelBundlesLocationMap = new TreeMap>(); - this.autoStartLevelBundlesLocationMap = new TreeMap>(); - } - - /** - * Can be overridden if required. - * @return the substituion engine that will be used for variable value resolution. - */ - protected ISubstitutionEngine createSubstitutionEngine() { - DefaultSubstitutionEngine engine = new DefaultSubstitutionEngine(); - engine.setMarkerChar('$'); - engine.setOpeningChar('{'); - engine.setEndingChar('}'); - engine.setResolver(new RecursiveResolver(engine, resolver)); - return engine; - } - - /** - * @return a Felix default configuration. - * @throws java.io.IOException configuration not found - */ - public Map getConfiguration() throws IOException { - - // 1. Load javase-profiles.properties - // User shouldn't override theses properties, so they're only retrieved as class resources - Properties javaProfiles = IOUtils.getPropertiesFromClass("javase-profiles.properties", JOnAS.class); - - resolver.getResolvers().add(new PropertiesResolver(System.getProperties())); - resolver.getResolvers().add(new PropertiesResolver(javaProfiles)); - - resolveProperties(javaProfiles); - - // 2. Load defaults.properties - Properties defaultsProperties; - File defaultsFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/defaults.properties"); - if (defaultsFile.exists()) { - defaultsProperties = IOUtils.getPropertiesFromFile(defaultsFile); - } else { - defaultsProperties = IOUtils.getPropertiesFromClass("defaults.properties", JOnAS.class); - } - - // Add a special property 'javase.version' - // Detect the JVM version (1.5 / 1.6), fallback on 1.5 - defaultsProperties.setProperty("javase.version", javaSeSpecificationVersion()); - - // Add a new resolver - resolver.getResolvers().add(new PropertiesResolver(defaultsProperties)); - - // Resolve the variables - resolveProperties(defaultsProperties); - - // 3. gateway.properties - Properties gatewayProperties; - File gatewayFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/gateway.properties"); - if (gatewayFile.exists()) { - gatewayProperties = getPropertiesFromFile(gatewayFile); - } else { - gatewayProperties = getPropertiesFromClass("gateway.properties", JOnAS.class); - } - - // Add a new resolver - resolver.getResolvers().add(new PropertiesResolver(gatewayProperties)); - - // Resolve the variables - resolveProperties(gatewayProperties); - - // Augment that basic configuration with bundles to be started during gateway start-up - // - Properties autoDeployProperties = null; - File autoDeployFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/auto-deploy.properties"); - if (autoDeployFile.exists()) { - autoDeployProperties = IOUtils.getPropertiesFromFile(autoDeployFile); - } else { - autoDeployProperties = IOUtils.getPropertiesFromClass("auto-deploy.properties", JOnAS.class); - } - initLevelBundles(autoDeployProperties); - - // Set the Framework storage root directory in working directory (folder named osgi-framework-storage) - File cacheDirectory = IOUtils.getSystemFile(JOnASUtils.getWorkDirectory(), "osgi-framework-storage"); - gatewayProperties.put(Constants.FRAMEWORK_STORAGE, cacheDirectory.getAbsolutePath()); - - return props2Map(gatewayProperties); - } - - /** - * Resolve this set of properties with the given resolver. - * @param properties properties to be resolved - */ - @SuppressWarnings("unchecked") - private void resolveProperties(final Properties properties) { - - Enumeration names = (Enumeration) properties.propertyNames(); - while (names.hasMoreElements()) { - String name = names.nextElement(); - - String value = properties.getProperty(name); - String systemValue = System.getProperty(name); - - // Override with System properties if possible - if (systemValue != null) { - value = systemValue; - } - - // Resolve the value - String resolved = substitutionEngine.substitute(value); - properties.setProperty(name, resolved); - } - } - - /** - * Gather a Java specification version (1.5 / 1.6) from system package, system - * properties or use a default value. - * @return the Java specification version supported by this JVM - */ - private static String javaSeSpecificationVersion() { - - VersionNumber version; - - // Try package version - String value = System.class.getPackage().getSpecificationVersion(); - if (value != null) { - version = new VersionNumber(value); - } else { - // Try system property (with default to 1.5) - value = System.getProperty("java.specification.version", "1.5"); - version = new VersionNumber(value); - } - - return version.getMajorMinor(); - } - - - /** - * - */ - protected void initLevelBundles(final Properties autoDeployProperties) throws IOException { - // Iterates over the properties - for (Iterator it = autoDeployProperties.keySet().iterator(); it.hasNext();) { - - // Process level properties - String key = (String) it.next(); - - if (key.startsWith("install.level.")) { - // Get the associated level - String level = key.substring("install.level.".length()); - - // Add list of bundles locations for the given level - autoInstallLevelBundlesLocationMap.put(Integer.valueOf(level), getBundleLocations(autoDeployProperties, key)); - - } - - if (key.startsWith("start.level.")) { - // Get the associated level - String level = key.substring("start.level.".length()); - - // Add list of bundles locations for the given level - autoStartLevelBundlesLocationMap.put(Integer.valueOf(level), getBundleLocations(autoDeployProperties, key)); - } - } - - - // Create a list with bundles that needs to be started before all the other bundles of start level 1 - List extraBundleListLocationLevelOne = new ArrayList(); - - - // Adds the bootstrap bundles that the user may specify. - File jonasBootStrapBundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles"); - List jonasBootStrapBundlesLocations = getBundleLocationsFromDirectory(jonasBootStrapBundlesDir); - // Concatenate the locations with the new one - if (jonasBootStrapBundlesLocations != null && !jonasBootStrapBundlesLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(jonasBootStrapBundlesLocations); - } - - // JPA 2.0 - String jpaProviders = ""; - try { - jpaProviders = JOnASUtils.getServerProperty("jonas.service.ejb3.jpa.provider", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get ejb3 persistence providers property", e); - } - if (jpaProviders.contains("eclipselink2.2") || jpaProviders.contains("eclipselink2.3") || jpaProviders.contains("hibernate3.5") || jpaProviders.contains("hibernate3.6") || jpaProviders.contains("hibernate4.0") || jpaProviders.contains("openjpa2")) { - File jpa2BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-jpa2.0"); - List bundleLocations = getBundleLocationsFromDirectory(jpa2BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Java EE 6 API - if (!Boolean.getBoolean("jonas.javaee-6-api.disabled")) { - File ejb31BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-javaee-6.0"); - List bundleLocations = getBundleLocationsFromDirectory(ejb31BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Adds JSP 2.2 / Servlet 3.0 / EL 2.2 if there is servlet 3 container - String webServiceClass = ""; - try { - webServiceClass = JOnASUtils.getServerProperty("jonas.service.web.class", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get jonas.service.web.class property", e); - } - if (webServiceClass.contains("7") || webServiceClass.contains("8")) { - File servlets3BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-servlets-3.0"); - List bundleLocations = getBundleLocationsFromDirectory(servlets3BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // JSF 2.0 - String jsfService = ""; - try { - jsfService = JOnASUtils.getServerProperty("jonas.service.jsf.class", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get JSF service", e); - } - if (jsfService.contains("Mojarra20") || jsfService.contains("MyFaces20")) { - File jsf2BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-jsf-2.0"); - List bundleLocations = getBundleLocationsFromDirectory(jsf2BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Add interceptor (v1.1) API bundle for CDI - // This is required because if we ship that API bundle in the 'cdi' deployment plan, it comes too - // late and it causes class spaces inconsistencies (with JSF for examples that uses the 'old' - // javax.interceptor package) causing cascading errors when deploying cdi enabled web applications. - String services = ""; - try { - services = JOnASUtils.getServerProperty("jonas.services", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get 'jonas.services' property in conf/jonas.properties", e); - } - List sections = Arrays.asList(services.split(",")); - if (sections.contains("cdi")) { - - File cdiBundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-cdi"); - List bundleLocations = getBundleLocationsFromDirectory(cdiBundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Bundles with start level of 1 - List previousBundleListLocationLevelOne = autoStartLevelBundlesLocationMap.get(1); - if (previousBundleListLocationLevelOne != null) { - // add the existing bundles to the extra list - extraBundleListLocationLevelOne.addAll(previousBundleListLocationLevelOne); - } - - // Define new list as the extra list + previous list - autoStartLevelBundlesLocationMap.put(1, extraBundleListLocationLevelOne); - } - - - - /** - * @param directory Directory to look for bundles. - * @return A list of URLs corresponding to the - * files in the given directory. An empty String if the directory - * does not exists. - * @throws java.io.IOException when a bundle File cannot be turned into an URL - */ - protected List getBundleLocationsFromDirectory(final File directory) throws IOException { - List locations = new ArrayList(); - if (directory.exists()) { - // list all files - FilenameFilter filter = new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return name.endsWith(".jar"); - } - }; - File[] bundles = directory.listFiles(filter); - LOGGER.log(Level.FINE, "Adding bundles from the directory '" + directory + "' :" + Arrays.asList(bundles)); - // Add each URL of the bundle - for (File file : bundles) { - locations.add("reference:".concat(file.toURI().toURL().toExternalForm())); - } - } - return locations; - } - - - /** - * Get the bundle list for a given property. - * @param levels The property list - * @param key The searched key - * @return The bundle list for a given property. - * @throws java.io.IOException If the list cannot be built. - */ - private List getBundleLocations(final Properties levels, final String key) throws IOException { - // init list - List locations = new ArrayList(); - - String value = levels.getProperty(key); - - // The bundle list separator is ',' - String[] bundles = value.split(","); - for (int i = 0; i < bundles.length; i++) { - String bundle = bundles[i]; - - // Only process non-empty parts - if (!"".equals(bundle)) { - - String location = ""; - - // The bundle is specified using the following format: - // :[:] - String[] artifact = bundle.split(":"); - - String groupId = artifact[0].trim(); - String artifactId = artifact[1].trim(); - String version = null; - String classifier = null; - - if (artifact.length == 3) { - // Is the third element a version or a - // classifier ? - classifier = getClassifier(artifact[2]); - if (classifier == null) { - // this is NOT a classifier - version = artifact[2].trim(); - } - } else if (artifact.length == 4) { - // We have both version + classifier - // first is the version - version = artifact[2].trim(); - // then, the classifier - classifier = getClassifier(artifact[3]); - if (classifier == null) { - // in this case, this is an error - throw new IOException("Incorrect classifier in bundle: " + bundle); - } - } else if (artifact.length > 4) { - // More elements, invalid - throw new IOException("Incorrect number of parts in bundle: " + bundle); - } - - // no version specified, get the default one - if (version == null) { - version = JOnASUtils.getVersion(); - } - - // Use the reference attribute to load the bundle - // from the local file without copying it into the - // cache of Felix - location = location.concat("reference:"); - - File repository = null; - if (JOnASUtils.isDeveloperMode()) { - // Use m2 repository - repository = Maven2Utils.getMaven2Repository(); - } else { - // Use repositories/internal - repository = Maven2Utils.getMaven2InternalRepository(); - } - // add path - location = location.concat(Maven2Utils.getBundleMaven2Location(repository.getPath(), groupId, artifactId, version, classifier)); - - // add to the list - locations.add(location); - } - } - - return locations; - } - - /** - * @param value value from which the classifier will be extracted - * @return the classifier value if this is a valid classifier, null otherwise - */ - private static String getClassifier(final String value) { - String classifier = null; - String trimmed = value.trim(); - if (trimmed.startsWith("{") && trimmed.endsWith("}")) { - // classifier - classifier = trimmed.substring(1, trimmed.length() - 1); - } - return classifier; - } - - /** - * @return list of the bundles to install and add it to the start level - */ - public SortedMap> getAutoInstallBundles() { - return autoInstallLevelBundlesLocationMap; - } - - /** - * @return map of the bundles to "automatically start for a given level" - */ - public SortedMap> getAutoStartBundles() { - return autoStartLevelBundlesLocationMap; - } - - - public ClassLoader getFrameworkClassLoader(final ClassLoader parentClassLoader) { - File root = JOnASUtils.getJOnASRoot(); - File frameworkDir = IOUtils.getSystemFile(root, "lib/bootstrap/framework"); - - if (!frameworkDir.exists()) { - throw new IllegalStateException("No jar found in the '" + frameworkDir + "' directory."); - } - - // list all files - FilenameFilter filter = new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return name.endsWith(".jar"); - } - }; - - List urlList = new ArrayList(); - File[] frameworkFiles = frameworkDir.listFiles(filter); - // Add each URL of the bundle - for (File file : frameworkFiles) { - try { - urlList.add(file.toURI().toURL()); - } catch (MalformedURLException e) { - throw new IllegalStateException("Unable to get the URL from the file '" + file + "'."); - } - } - return new URLClassLoader(urlList.toArray(new URL[urlList.size()]), parentClassLoader); - - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java deleted file mode 100644 index 920aba9934..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; - -/** - * Provides a gateway configuration. - * @author Guillaume Sauthier - */ -public interface IConfigurationProvider { - - /** - * @return an OSGi configuration. - * @throws java.io.IOException If the configuration couldn't be provided. - */ - Map getConfiguration() throws IOException; - - /** - * @return list of the bundles to install and add it to the start level - */ - SortedMap> getAutoInstallBundles(); - - /** - * @return map of the bundles to "automatically start for a given level" - */ - SortedMap> getAutoStartBundles(); - - ClassLoader getFrameworkClassLoader(final ClassLoader parentClassLoader); - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java deleted file mode 100644 index e59949bc9b..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java +++ /dev/null @@ -1,435 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; -import java.net.URL; -import java.rmi.RMISecurityManager; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.SortedMap; -import java.util.TreeSet; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.naming.Context; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; -import org.osgi.framework.launch.Framework; -import org.osgi.framework.launch.FrameworkFactory; -import org.osgi.framework.startlevel.BundleStartLevel; -import org.ow2.jonas.launcher.jonas.util.IOUtils; -import org.ow2.jonas.launcher.jonas.util.JOnASUtils; - - -/** - * JOnAS Running on OSGi framework. - * @author Guillaume Sauthier - */ -public class JOnAS { - - /** - * OSGi Framework. - */ - private Framework framework; - - /** - * Property for the security manager. - */ - private static final String SECURITY_MANAGER = "jonas.security.manager"; - - /** - * Framework factory property. - */ - private static final String FRAMEWORK_FACTORY_PROPERTY = "META-INF/services/org.osgi.framework.launch.FrameworkFactory"; - - /** - * Property for the TUI bundle name. - */ - private static final String TUI_BUNDLE_NAME_PROPERTY = "jonas-tui"; - - /** - * Property for the GUI bundle name. - */ - private static final String GUI_BUNDLE_NAME_PROPERTY = "jonas-gui"; - - /** - * Provider. - */ - private IConfigurationProvider provider = null; - - /** - * TUI bundle name. - */ - private String tuiBundleName; - - /** - * GUI bundle name. - */ - private String guiBundleName; - - /** - * Logger (JDK). - */ - private static final Logger LOGGER = Logger.getLogger(JOnAS.class.getName()); - - /** - * Creates a new configured framework instance. - * @param forceCleanUp true if cache directory must be deleted. - * @throws Exception cannot create the internal gateway. - */ - public JOnAS(final boolean forceCleanUp) throws Exception { - - System.out.print("\nWelcome to OW2 JOnAS"); - - // RMI Security Manager - boolean useSecurityManager = new Boolean(JOnASUtils.getServerProperty(SECURITY_MANAGER, "true").trim()).booleanValue(); - - if (useSecurityManager) { - if (System.getSecurityManager() == null) { - System.setSecurityManager(new RMISecurityManager()); - } - } - - // Init required System properties - initializeSystemProperties(); - - // Get a new provider - provider = getConfigurationProvider(); - - // Retrieve the configuration - Map configProps = provider.getConfiguration(); - - // Retrieve the bundle names for the shell - tuiBundleName = configProps.get(TUI_BUNDLE_NAME_PROPERTY); - guiBundleName = configProps.get(GUI_BUNDLE_NAME_PROPERTY); - if (guiBundleName == null) { - throw new Exception("Property not defined: " + GUI_BUNDLE_NAME_PROPERTY); - } - - // Delete the cache directory if requested - if (forceCleanUp) { - IOUtils.deleteDir(new File(configProps.get(Constants.FRAMEWORK_STORAGE))); - } - - framework = getFrameworkFactory().newFramework(configProps); - - framework.init(); - - // Use of the system bundle to get the version (For example Equinox framework.getVersion() will answer 0.0.0) - String version = framework.getBundleContext().getBundle(0).getVersion().toString(); - - System.out.println(" (Running on " + framework.getClass().getSimpleName() + " v" + version + ")."); - System.out.println("-----------------------------------------------\n"); - - - // process the auto-install/auto-start bundles - processBundles(); - - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - try { - // Only stop if the system is still running - if (framework.getState() == Bundle.ACTIVE) { - framework.stop(); - } - } catch (Exception e) { - e.printStackTrace(System.err); - } - } - }); - } - - /** - * Start JOnAS on the gateway. - * @throws Exception Thrown if the start fails - */ - public void start() throws Exception { - // Start it ! - framework.start(); - - startTransientBundles(); - - // Wait for framework to stop to exit the VM. - framework.waitForStop(0); - System.exit(0); - } - - /** - * Stop JOnAS. - * @throws Exception Thrown if the stop fails - */ - public void stop() throws Exception { - // Only stop if the system is still running - if (framework.getState() == Bundle.ACTIVE) { - framework.stop(); - } - } - - /** - * @return a new {@link IConfigurationProvider}. - */ - protected IConfigurationProvider getConfigurationProvider() { - // can be sub-classed - return new DefaultConfigurationProvider(); - } - - /** - * Start a new JOnAS. - * @param args not used - * @throws Exception if something failed - */ - public static void main(final String[] args) throws Exception { - JOnAS jonas = new JOnAS(Boolean.getBoolean("jonas.cache.clean")); - jonas.start(); - } - - /** - * Initialize required System properties (using reasonable default values - * when needed). - */ - protected void initializeSystemProperties() { - // Set the current date to calculate the server startup time - System.setProperty("jonas.start.date", Long.toString(System.currentTimeMillis())); - - // Sets the Wrappers that monolog will remove in order to print the - // right caller - System.setProperty("monolog.wrappers", "mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger," - + "org.apache.commons.logging.impl.Jdk14Logger," - + "org.apache.juli.logging.impl.Jdk14Logger," - + "org.ow2.util.log.JDKLogger,org.apache.juli.logging.DirectJDKLog," - + "org.jgroups.logging.JDKLogImpl," - + "org.ow2.carol.util.configuration.TraceCarol,org.slf4j.impl.JCLLoggerAdapter"); - - // Corba/JacORB Properties - System.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); - System.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); - System.setProperty("org.omg.PortableInterceptor.ORBInitializerClass.standard_init", - "org.jacorb.orb.standardInterceptors.IORInterceptorInitializer"); - // Corba/Carol Properties - System.setProperty("javax.rmi.CORBA.PortableRemoteObjectClass", "org.ow2.carol.rmi.multi.MultiPRODelegate"); - System.setProperty("javax.rmi.CORBA.UtilClass", "org.ow2.carol.util.delegate.UtilDelegateImpl"); - - // Naming properties - System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.ow2.carol.jndi.intercept.spi.InterceptorInitialContextFactory"); - - // Security Properties - setDefaultPropertyIfNotSet("java.security.policy", IOUtils.getSystemPath(JOnASUtils.getJOnASBase(), "conf/java.policy")); - setDefaultPropertyIfNotSet("java.security.auth.login.config", IOUtils.getSystemPath(JOnASUtils.getJOnASBase(), - "conf/jaas.config")); - - // MBeanServerBuilder - System.setProperty("javax.management.builder.initial", "org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder"); - } - - /** - * @return a framework factory used to instantiate the framework - * @throws Exception if the factory can't be retrieved - */ - private FrameworkFactory getFrameworkFactory() throws Exception { - // Add jar of the framework in a new classloader - ClassLoader frameworkClassLoader = provider.getFrameworkClassLoader(getClass().getClassLoader()); - - - URL url = frameworkClassLoader.getResource(FRAMEWORK_FACTORY_PROPERTY); - if (url != null) { - BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); - try { - for (String s = br.readLine(); s != null; s = br.readLine()) { - s = s.trim(); - // Try to load first non-empty, non-commented line. - if ((s.length() > 0) && (s.charAt(0) != '#')) { - return (FrameworkFactory) Class.forName(s, true, frameworkClassLoader).newInstance(); - } - } - } finally { - if (br != null) { - br.close(); - } - } - } - throw new Exception("Could not find any OSGi framework factory (no '" + FRAMEWORK_FACTORY_PROPERTY + "' property found)."); - } - - /** - * If the property was already set, do not change its value, otherwise, use - * the default. - * @param key property name - * @param def default property value - */ - protected void setDefaultPropertyIfNotSet(final String key, final String def) { - System.setProperty(key, System.getProperty(key, def)); - } - - /** - * The bundle start operation is transient for TUI and GUI bundles. - * @throws BundleException If bundles startup fails - */ - protected void startTransientBundles() throws BundleException { - Bundle[] bundles = framework.getBundleContext().getBundles(); - for (Bundle bundle : bundles) { - // OSGi R3 bundle may not have the Bundle-SymbolicName manifest header - String symbolicName = bundle.getSymbolicName(); - if (symbolicName != null) { - - if (symbolicName.equals(tuiBundleName)) { - // Use Text UI ? - if (Boolean.getBoolean("jonas.felix.tui.enabled")) { - startTransient(bundle); - } - } - - if (symbolicName.startsWith(guiBundleName)) { - // Use GUI ? - if (Boolean.getBoolean("jonas.felix.gui.enabled")) { - startTransient(bundle); - } - } - } - } - } - - /** - * Auto install and auto start the bundles. - */ - protected void processBundles() { - - // Bundle context - BundleContext bundleContext = framework.getBundleContext(); - - // Auto install and auto start bundles - SortedMap> autoInstallBundles = provider.getAutoInstallBundles(); - SortedMap> autoStartBundles = provider.getAutoStartBundles(); - - // Merge keys (levels) - Set levels = new TreeSet(); - levels.addAll(autoInstallBundles.keySet()); - levels.addAll(autoStartBundles.keySet()); - - Iterator levelIterator = levels.iterator(); - - List bundlesToStart = new ArrayList(); - - // For each level, install the given bundles and specify the start level for these bundles - while (levelIterator.hasNext()) { - Integer level = levelIterator.next(); - - // Auto install or auto start bundles ? - List autoInstallBundleLocations = autoInstallBundles.get(level); - List autoStartBundleLocations = autoStartBundles.get(level); - - // for each location, install the bundle and sets the start level - if (autoInstallBundleLocations != null && !autoInstallBundleLocations.isEmpty()) { - for (String bundleLocation : autoInstallBundleLocations) { - - //install the bundle only if it's not already installed in the felix cache - Bundle bundle = isDeploy(bundleLocation); - if (bundle == null) { - try { - bundle = bundleContext.installBundle(bundleLocation); - bundle.adapt(BundleStartLevel.class).setStartLevel(level); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to install the bundle with location '" + bundleLocation - + "' and the startlevel '" + level + "'.", e); - } - } - } - } - - // for auto start, install them and add it to the list of bundles to be started - if (autoStartBundleLocations != null && !autoStartBundleLocations.isEmpty()) { - for (String bundleLocation : autoStartBundleLocations) { - - //install the bundle only if it's not already installed in the felix cache - Bundle bundle = isDeploy(bundleLocation); - if (bundle == null) { - try { - bundle = bundleContext.installBundle(bundleLocation); - bundle.adapt(BundleStartLevel.class).setStartLevel(level); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to install the bundle with location '" + bundleLocation - + "' and the startlevel '" + level + "'.", e); - } - } - if (bundle != null && (bundle.getState() == Bundle.INSTALLED || bundle.getState() == Bundle.RESOLVED)) { - //Bundle needs to be started - bundlesToStart.add(bundle); - } - } - } - - } - - // Start the bundles in the specified order - for (Bundle bundle : bundlesToStart) { - try { - bundle.start(); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to start the bundle with name '" + bundle.getSymbolicName() + "'", e); - } - } - } - - /** - * @param bundleLocation A bundle location - * @return the Bundle if it's already installed in the felix cache. Null if the bundle is not in the felix cache - */ - private Bundle isDeploy(final String bundleLocation) { - BundleContext bundleContext = this.framework.getBundleContext(); - for (Bundle bundle: bundleContext.getBundles()) { - if (bundle.getLocation().equals(bundleLocation)) { - return bundle; - } - } - return null; - } - - /** - * The bundle start operation is transient for the given bundle. - * @param bundle the given bundle. - * @throws BundleException If bundle startup fails - */ - protected void startTransient(final Bundle bundle) throws BundleException { - bundle.start(Bundle.START_TRANSIENT); - } - - /** - * @return the Framework instance used by this launcher. - */ - public Framework getFramework() { - return framework; - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java deleted file mode 100644 index 4b2f783cd2..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Simple version number holder. - * @author Guillaume Sauthier - */ -public class VersionNumber { - - /** - * Components of the version number. - */ - private List values = new ArrayList(); - - /** - * Construct a version number - * @param version value to be parsed - */ - public VersionNumber(final String version) { - - // Cut the string on '.' - String[] elements = version.split("\\."); - values.addAll(Arrays.asList(elements)); - - // Fix value if the element list is not long enough - // (we requires at least 2 elements: and ) - if (values.size() == 1) { - // Append a trailing '0' - values.add("0"); - } - } - - /** - * @return the 2 first indices of the version number (representing the major and minor numbers). - */ - public String getMajorMinor() { - return values.get(0) + "." + values.get(1); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - for (String element : values) { - if (sb.length() != 0) { - sb.append('.'); - } - sb.append(element); - } - return sb.toString(); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java deleted file mode 100644 index 80d16e8b91..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; -import java.util.Map.Entry; - -/** - * IO utilities. - * @author Guillaume Sauthier - */ -public final class IOUtils { - - /** - * Empty private constructor. - */ - private IOUtils() { - } - - /** - * Recursively delete a directory. - * @param dir directory to be deleted - * @return true if everything went smoothly. - */ - public static boolean deleteDir(final File dir) { - - // not a directory, abort quickly - if (!dir.isDirectory()) { - return false; - } - - // to see if this directory is actually a symbolic link to a directory, - // we want to get its canonical path - that is, we follow the link to - // the file it's actually linked to - File candir; - try { - candir = dir.getCanonicalFile(); - } catch (IOException e) { - return false; - } - - // a symbolic link has a different canonical path than its actual path, - // unless it's a link to itself - if (!candir.equals(dir.getAbsoluteFile())) { - // this file is a symbolic link, and there's no reason for us to - // follow it, because then we might be deleting something outside of - // the directory we were told to delete - return false; - } - - // now we go through all of the files and sub-directories in the - // directory and delete them one by one - File[] files = candir.listFiles(); - if (files != null) { - for (File file : files) { - // in case this directory is actually a symbolic link, or it's - // empty, we want to try to delete the link before we try - // anything - boolean deleted = file.delete(); - if (!deleted) { - // deleting the file failed, so maybe it's a non-empty - // directory - if (file.isDirectory()) { - deleteDir(file); - } - - // otherwise, there's nothing else we can do - } - } - } - - // now that we tried to clear the directory out, we can try to delete it - // again - return dir.delete(); - } - - /** - * Return a OS valid path. - * @param base basis directory - * @param relative relative path name to the basis directory - * @return the OS dependent path name - */ - public static String getSystemPath(final File base, final String relative) { - return getSystemFile(base, relative).getPath(); - } - - /** - * Return a OS valid File. - * @param base basis directory - * @param relative relative path name to the basis directory - * @return the OS dependent File - */ - public static File getSystemFile(final File base, final String relative) { - return new File(base, relative.replace('/', File.separatorChar)); - } - - /** - * Checks if the file exists. - * @param filename File name to be tested - * @return {@code true} if the given file exists. - */ - public static boolean exists(final String filename) { - return new File(filename).exists(); - } - - /** - * @param filename properties file name - * @return the content of the resource as a {@link java.util.Properties} instance. - * @throws java.io.IOException if file is not found or if file is not a property file. - */ - public static Properties getPropertiesFromFile(final File filename) throws IOException { - return loadPropertiesFromStream(new FileInputStream(filename)); - } - - /** - * Create a {@code Properties} from the given InputStream. Close the stream - * at the end of the operation. - * @param is InputStream - * @return properties - * @throws java.io.IOException if the stream cannot be read or if it doesn't - * contains a {@code Properties} - */ - public static Properties loadPropertiesFromStream(final InputStream is) throws IOException { - Properties config = new Properties(); - try { - config.load(is); - } finally { - is.close(); - } - return config; - } - - /** - * Convert the given properties object into a map. - * @param p the properties object - * @return a map - */ - public static Map props2Map(final Properties p) { - Map map = new HashMap(); - if (p != null) { - Iterator> it = p.entrySet().iterator(); - while (it.hasNext()) { - Entry entry = it.next(); - map.put(entry.getKey().toString(), entry.getValue().toString()); - } - } - return map; - } - - - /** - * @param resource properties file name (relative to org/ow2/jonas/launcher/jonas) - * @return the content of the resource as a {@link java.util.Properties} instance. - * @throws java.io.IOException if file is not found or if file is not a property file. - */ - public static Properties getPropertiesFromClass(final String resource, final Class clazz) throws IOException { - return loadPropertiesFromStream(clazz.getResourceAsStream(resource)); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java deleted file mode 100644 index 6bbdfbd26e..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.util.Properties; - -import org.ow2.jonas.lib.util.ConfigurationConstants; - -/** - * JOnAS utilities. - * @author Guillaume Sauthier - */ -public final class JOnASUtils { - - /** - * JOnAS Base directory. - */ - private static File base; - - /** - * JOnAS Root directory. - */ - private static File root; - - /** - * Are we in developer mode ? - * TODO Will be initialized by System property. - */ - private static Boolean developerMode = null; - - - /** - * Empty private constructor. - */ - private JOnASUtils() { - } - - /** - * @return the JOnAS Base to be used - */ - public static File getJOnASBase() { - if (base == null) { - // Init JOnAS Base value (using jonas.root if unset) - String jb = System.getProperty(ConfigurationConstants.JONAS_BASE_PROP, - System.getProperty(ConfigurationConstants.JONAS_ROOT_PROP)); - base = new File(jb); - } - return base; - } - - - /** - * Returns the value associated to the given property in jonas.properties file. - * @param property the property name - * @param defaultValue the default value - * @return The value associated to the given property. - * @throws Exception If the property value cannot be retrieved - */ - public static String getServerProperty(final String property, final String defaultValue) throws Exception { - File jonasPropertiesFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), - "conf/" + ConfigurationConstants.JONAS_PROPERTIES_PROP); - Properties props = IOUtils.getPropertiesFromFile(jonasPropertiesFile); - return props.getProperty(property, defaultValue); - } - - /** - * @return the JOnAS Root to be used. May throw an {@link IllegalStateException} - * if jonas.root System property is not set. - */ - public static File getJOnASRoot() { - if (root == null) { - // Init JOnAS Root value - String jr = System.getProperty(ConfigurationConstants.JONAS_ROOT_PROP); - if (jr == null) { - throw new IllegalStateException("Property 'jonas.root' is not set but is required"); - } - root = new File(jr); - } - return root; - } - - /** - * @return the work directory - */ - public static File getWorkDirectory() { - String workDirectoryStr = null; - try { - workDirectoryStr = getServerProperty(ConfigurationConstants.WORK_DIRECTORY_PROP, - ConfigurationConstants.DEFAULT_WORK_DIRECTORY); - } catch (Exception e) { - workDirectoryStr = ConfigurationConstants.DEFAULT_WORK_DIRECTORY; - } - File workDirectory = new File(workDirectoryStr); - if (workDirectory.isAbsolute()) { - return workDirectory; - } - return new File(getJOnASBase(), workDirectoryStr); - } - - /** - * @return the JOnAS version from the Implementation-Version Manifest entry. - */ - public static String getVersion() { - return JOnASUtils.class.getPackage().getImplementationVersion(); - } - - /** - * @return true if the jonas.developer system property has been set. - */ - public static boolean isDeveloperMode() { - if (developerMode == null) { - boolean mode = Boolean.getBoolean(ConfigurationConstants.JONAS_DEVELOPER_PROP); - developerMode = Boolean.valueOf(mode); - } - return developerMode.booleanValue(); - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java deleted file mode 100644 index b3ef4e1e2b..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.net.MalformedURLException; - - -/** - * Maven2 Utilities. - * @author Guillaume Sauthier - */ -public final class Maven2Utils { - - /** - * User specified user repository property name. - */ - private static final String PROP_M2_REPOSITORY = "m2.repository"; - - /** - * Path to default M2 repository. - */ - private static final String PATH_DEFAULT_REPOSITORY = ".m2/repository"; - - /** - * Private empty constructor. - */ - private Maven2Utils() { - } - - /** - * @param repository Artifact repository - * @param groupId Artifact groupId - * @param artifactId Artifact ID - * @param version Artifact version - * @param classifier Artifact's classifier (may be null) - * @return a string-ified URL - * @throws java.net.MalformedURLException If jar file is not in the repository. - */ - public static String getBundleMaven2Location(final String repository, final String groupId, final String artifactId, final String version, - final String classifier) throws MalformedURLException { - - // Creates a File from artifact info - String appendedClassifier = ""; - if (classifier != null) { - // Handle classifier if any - appendedClassifier = appendedClassifier.concat("-").concat(classifier); - } - String path = constructDirectoryPath(groupId, artifactId, version); - File bundle = new File(repository, path.concat(File.separator).concat(artifactId).concat("-").concat(version).concat( - appendedClassifier).concat(".jar")); - - // Transform to URI first, because File.toURL() is buggy - return bundle.toURI().toURL().toExternalForm(); - } - - /** - * @return a {@link java.io.File} to a usable Maven2 repository. - */ - public static File getMaven2Repository() { - File myRepository = null; - String m2Repository = System.getProperty(PROP_M2_REPOSITORY); - - // Priority to a user defined repository - if (m2Repository == null) { - // nothing, so try a reasonable default - // Assume that local Maven2 repository is in ~/.m2/repository - String userHome = System.getProperty("user.home"); - myRepository = IOUtils.getSystemFile(new File(userHome), PATH_DEFAULT_REPOSITORY); - } else { - // Just use the provided value - myRepository = new File(m2Repository); - } - - // Return the detected repository - return myRepository; - } - - /** - * @param groupId Artifact groupId - * @param artifactId Artifact ID - * @param version Artifact version - * @return transform the artifact coordinates into a m2 repository path - */ - private static String constructDirectoryPath(final String groupId, final String artifactId, final String version) { - // Transform groupId '.' into '/' - String transformed = groupId.replace('.', File.separatorChar); - return transformed.concat(File.separator).concat(artifactId).concat(File.separator).concat(version); - } - - /** - * @return a File pointing to $JONAS_ROOT/repositories/maven2-internal - */ - public static File getMaven2InternalRepository() { - File root = JOnASUtils.getJOnASRoot(); - return IOUtils.getSystemFile(root, "repositories/maven2-internal"); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/META-INF/jonas-launcher-for-addons.bnd b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/META-INF/jonas-launcher-for-addons.bnd deleted file mode 100644 index 7ebe41d84a..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/META-INF/jonas-launcher-for-addons.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All packages of this bundle are private -Private-Package org.ow2.jonas.launcher.jonas.*, org.osgi.* - -# Import/Export nothing -Import-Package !* -Export-Package !* - -# Standard Manifest entries -Main-Class ${main.class} -Implementation-Version ${project.version} - -Embed-Dependency ow2-util-substitution;inline=true - diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties deleted file mode 100644 index 335f7654cd..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties +++ /dev/null @@ -1,100 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -## ---------------------------------------------------------------------- ## -## -## For curious users: -## This file relies on properties defined in different files: -## * lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/javase-profiles.properties -## -## Note: These values can be overridden by System properties -## Example: force JVM 1.5 profile -Djavase-packages=${javase-1.5} -## -## ---------------------------------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Default list of packages patterns representing the bootdelegation packages -# -# Note: All theses packages are defined twice because xxxx.* do not -# match the xxxx package itself. -# -# Note: This list assumes that theses packages are available from -# the System ClassLoader. If changed, ensure that the library jar -# file is placed in an endorsed directory ($JONAS_ROOT/lib/endorsed -# for example). -# -# Note: Read theses articles to better understand OSGi bootdelegation model: -# http://blog.springsource.com/2009/01/19/exposing-the-boot-classpath-in-osgi/ -# http://paxrunner.ops4j.org/space/Boot+delegation+packages#Bootdelegationpackages-specs -# -bootdelegation-packages com.sun.corba, \ - com.sun.corba.*, \ - com.ibm.CORBA, \ - com.ibm.CORBA.*, \ - com.sun.org.apache.xalan.internal, \ - com.sun.org.apache.xalan.internal.*, \ - com.sun.org.apache.xerces.internal, \ - com.sun.org.apache.xerces.internal.*, \ - com.sun.org.apache.xml.internal, \ - com.sun.org.apache.xml.internal.*, \ - com.sun.org.apache.xpath.internal, \ - com.sun.org.apache.xpath.internal.*, \ - com.sun.jndi.cosnaming, \ - com.sun.jndi.cosnaming.*, \ - com.sun.jndi.ldap, \ - com.sun.jndi.url, \ - com.sun.jndi.url.*, \ - com.sun.security.auth, \ - com.sun.security.auth.*, \ - com.sun.image, \ - com.sun.image.*, \ - org.apache.xalan, \ - org.apache.xalan.*, \ - org.apache.xerces, \ - org.apache.xerces.*, \ - org.apache.xpath.jaxp, \ - org.apache.xpath.jaxp.*, \ - org.jacorb.*, \ - sun.security.krb5 - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# OSGi framework packages exported by the underlying JVM (and System bundle) -# That list should be kept in synch with framework supported version -# -osgi-system-packages org.osgi.framework; version=1.6.0, \ - org.osgi.framework.launch; version=1.0.0, \ - org.osgi.framework.wiring; version=1.0.0, \ - org.osgi.framework.startlevel; version=1.0.0, \ - org.osgi.framework.hooks.bundle; version=1.0.0, \ - org.osgi.framework.hooks.resolver; version=1.0.0, \ - org.osgi.framework.hooks.service; version=1.1.0, \ - org.osgi.framework.hooks.weaving; version=1.0.0, \ - org.osgi.service.packageadmin; version=1.2.0, \ - org.osgi.service.startlevel; version=1.1.0, \ - org.osgi.service.url; version=1.0.0, \ - org.osgi.util.tracker; version=1.5.0 - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# ${javase.version} is computed by the launcher -# -javase-packages ${javase-${javase.version}} diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties deleted file mode 100644 index 50401c6fa0..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties +++ /dev/null @@ -1,111 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -## ---------------------------------------------------------------------- ## -## -## For curious users: -## This file relies on properties defined in different files: -## * defaults.properties -## -> $JONAS_BASE/conf/osgi/default.properties -## -> lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/defaults.properties -## (if the file in conf/ was not found) -## * lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/javase-profiles.properties -## -## Note: These values can be overriden by System properties -## Example: change the framework log level -Dfelix.log.level=4 -## -## ---------------------------------------------------------------------- ## - -## --------------------------------------------- ## -## OSGi Standard ## -## --------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# To override the packages the framework exports by default from the -# class path, set this variable. -# -# Note: Changes to this property must be done with caution, prefer using -# the 'o.o.f.system.packages.extra' property (see below) if only -# additional packages need to be declared. -# -# Note: ${javase-packages} is computed by the launcher given your JVM -# version (1.5 / 1.6). -# -# Do NOT remove ${osgi-system-packages} -# -org.osgi.framework.system.packages ${osgi-system-packages}, \ - ${javase-packages} - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set this value to append packages to the default set of exported -# system packages. -# -# Example: my.company.lib;version="x.y.z", my.other.lib -# -#org.osgi.framework.system.packages.extra - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# The following property makes specified packages from the class path -# available to all bundles. You should avoid using this property. -# -# Note: Packages can be described using pattern (using '*' as ending -# char). -# Warning: 'sun.*' do not match the 'sun' package's content -# -org.osgi.framework.bootdelegation ${bootdelegation-packages} - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Sets the initial start level of the framework upon startup. -# -# Note: JOnAS requires a framework startlevel AT LEAST equals to 3 -# -org.osgi.framework.startlevel.beginning 3 - - -## --------------------------------------------- ## -## Apache Felix ## -## --------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Control Felix logger level: from 1 (silent) to 4 (verbose). -# Set it to 4 to see Bundle's wires (package + constraints, client -# and provider) -# -felix.log.level 1 - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Invalid fragment bundles throw an 'exception' by default, for JOnAS, -# we simply output a 'warning' -# -felix.fragment.validation warning - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Felix tries to guess when to implicitly boot delegate in certain -# situations to ease integration without outside code. This feature -# is enabled by default, uncomment the following line to disable it. -# -#felix.bootdelegation.implicit false - -jonas-tui org.ow2.shelbie.startup-console - -jonas-gui org.apache.felix.shell.gui diff --git a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties b/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties deleted file mode 100644 index ab08148780..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher-for-addons/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties +++ /dev/null @@ -1,554 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# --------------------------------------- # -# Assign some version to system packages # -# --------------------------------------- # - -annotation-1.0 javax.annotation; version="1.0.0" - -activation-1.1 javax.activation; version="1.1.0" - -jaxb-2.1 javax.xml.bind; \ - javax.xml.bind.annotation; \ - javax.xml.bind.annotation.adapters; \ - javax.xml.bind.attachment; \ - javax.xml.bind.helpers; \ - javax.xml.bind.util; version="2.1.0" - -transaction-1.0 javax.transaction; \ - javax.transaction.xa; version="1.0.0" - -saaj-1.3 javax.xml.soap; version="1.3.0" - -jws-2.0 javax.jws; \ - javax.jws.soap; version="2.0.0" - -jaxws-2.1 javax.xml.ws; \ - javax.xml.ws.handler; \ - javax.xml.ws.handler.soap; \ - javax.xml.ws.http; \ - javax.xml.ws.soap; \ - javax.xml.ws.spi; \ - javax.xml.ws.wsaddressing; version="2.1.0" - -jdbc-4.0 javax.sql; \ - javax.sql.rowset; \ - javax.sql.rowset.serial; \ - javax.sql.rowset.spi; version="4.0.0" - -stax-1.0 javax.xml.stream; \ - javax.xml.stream.events; \ - javax.xml.stream.util; \ - javax.xml.transform.stax; version="1.0" - -# Theses packages are relative to a given JVM version -# TODO We shoud probably remove some of them: it's now easier to add packages to the System Bundle -# -# sun.net.www.http needs to be imported optionally, else in Tomcat 7.0.x we get an trace like: -# JreMemoryLeakPreventionListener.lifecycleEvent : Failed to trigger creation of the -# sun.net.www.http.HttpClient class during Tomcat start to prevent possible memory leaks. -# This is expected on non-Sun JVMs. -sun-extra-packages sun.misc; \ - sun.net.www.http; \ - sun.print; \ - sun.print.resources; \ - sun.reflect;\ - sun.rmi.registry; \ - sun.rmi.server; \ - sun.rmi.transport; \ - sun.security.util; \ - sun.security.provider; \ - sun.util.calendar - -jacorb-packages org.jacorb.orb.etf; \ - org.jacorb.orb.iiop; \ - org.jacorb.orb.portableInterceptor; \ - org.jacorb.orb.rmi; \ - org.jacorb.poa - -xpath-packages org.apache.xpath; \ - org.apache.xpath.compiler; \ - org.apache.xpath.functions; \ - org.apache.xpath.objects; \ - org.apache.xml.utils - -# Theses packages are the one provided by a JVM -se-corba-packages org.omg.CORBA; \ - org.omg.CORBA_2_3; \ - org.omg.CORBA_2_3.portable; \ - org.omg.CORBA.DynAnyPackage; \ - org.omg.CORBA.ORBPackage; \ - org.omg.CORBA.portable; \ - org.omg.CORBA.TypeCodePackage; \ - org.omg.CosNaming; \ - org.omg.CosNaming.NamingContextExtPackage; \ - org.omg.CosNaming.NamingContextPackage; \ - org.omg.CosTransactions; \ - org.omg.CSI; \ - org.omg.CSIIOP; \ - org.omg.Dynamic; \ - org.omg.DynamicAny; \ - org.omg.DynamicAny.DynAnyFactoryPackage; \ - org.omg.DynamicAny.DynAnyPackage; \ - org.omg.ETF; \ - org.omg.GSSUP; \ - org.omg.IOP; \ - org.omg.IOP.CodecFactoryPackage; \ - org.omg.IOP.CodecPackage; \ - org.omg.Messaging; \ - org.omg.PortableInterceptor; \ - org.omg.PortableInterceptor.ORBInitInfoPackage; \ - org.omg.PortableServer; \ - org.omg.PortableServer.CurrentPackage; \ - org.omg.PortableServer.POAManagerPackage; \ - org.omg.PortableServer.POAPackage; \ - org.omg.PortableServer.portable; \ - org.omg.PortableServer.ServantLocatorPackage; \ - org.omg.SendingContext; \ - org.omg.SSLIOP; \ - org.omg.stub.java.rmi; \ - org.omg.stub.javax.management.remote.rmi - -# Theses complementary CORBA packages are provided by the JacORB version of the APIs -# Theoretically, they should only be included when the jacorb-corba-api jar is in endorsed directory -# By default, we assume that jacorb-corba-api packages are always available -jacorb-corba-packages org.omg.CosTransactions; \ - org.omg.CSI; \ - org.omg.CSIIOP; \ - org.omg.ETF; \ - org.omg.GSSUP; \ - org.omg.SSLIOP - - -# --------------------------------------- # -# Java SE 7 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# * javax.annotation -# -> Could be provided by the JDK -# * javax.jws.* -# -> Could be provided by the JDK -# * javax.activation -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.soap.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.bind.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.ws.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.stream.*, javax.xml.transform.stax; -# -> We can have some problems if we use those packages from the JDK -# -> Note that we don't really know which version is embedded in the JDK 7 (1.0, 1.1, 1.2 ?) -# (StAX 1.2 API Upgrade in the Sun JDK version 1.6.0_18) -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) -# Differences with JDK 6 is the new package javax.swing.plaf.nimbus - - -# ${annotation-1.0},\ -# ${activation-1.1},\ -# ${jaxb-2.1},\ -# ${transaction-1.0},\ -# ${saaj-1.3},\ -# ${jws-2.0},\ -# ${jaxws-2.1},\ -# ${stax-1.0},\ - -javase-1.7 ${jdbc-4.0}, \ - javax.accessibility; \ - javax.activity; \ - javax.annotation.processing; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio; \ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.lang.model; \ - javax.lang.model.element; \ - javax.lang.model.type; \ - javax.lang.model.util; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.script; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.smartcardio; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.nimbus; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.tools; \ - javax.xml; \ - javax.xml.crypto; \ - javax.xml.crypto.dom; \ - javax.xml.crypto.dsig; \ - javax.xml.crypto.dsig.dom; \ - javax.xml.crypto.dsig.keyinfo; \ - javax.xml.crypto.dsig.spec; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.jcp.xml.dsig.internal; \ - org.jcp.xml.dsig.internal.dom; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.7.0" - -# --------------------------------------- # -# Java SE 6 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# * javax.annotation -# -> Could be provided by the JDK -# * javax.jws.* -# -> Could be provided by the JDK -# * javax.activation -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.soap.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.bind.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.ws.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.stream.*, javax.xml.transform.stax; -# -> We can have some problems if we use those packages from the JDK -# -> Note that we don't really know which version is embedded in the JDK 6 (1.0, 1.1, 1.2 ?) -# (StAX 1.2 API Upgrade in the Sun JDK version 1.6.0_18) -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) - -# ${annotation-1.0},\ -# ${activation-1.1},\ -# ${jaxb-2.1},\ -# ${transaction-1.0},\ -# ${saaj-1.3},\ -# ${jws-2.0},\ -# ${jaxws-2.1},\ -# ${stax-1.0},\ - -javase-1.6 ${jdbc-4.0}, \ - javax.accessibility; \ - javax.activity; \ - javax.annotation.processing; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio; \ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.lang.model; \ - javax.lang.model.element; \ - javax.lang.model.type; \ - javax.lang.model.util; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.script; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.smartcardio; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.tools; \ - javax.xml; \ - javax.xml.crypto; \ - javax.xml.crypto.dom; \ - javax.xml.crypto.dsig; \ - javax.xml.crypto.dsig.dom; \ - javax.xml.crypto.dsig.keyinfo; \ - javax.xml.crypto.dsig.spec; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.jcp.xml.dsig.internal; \ - org.jcp.xml.dsig.internal.dom; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.6.0" - -# --------------------------------------- # -# Java SE 1.5 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) - -javase-1.5 javax.accessibility; \ - javax.activity; \ - javax.imageio; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.sql; \ - javax.sql.rowset; \ - javax.sql.rowset.serial; \ - javax.sql.rowset.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.xml; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.5.0" diff --git a/jonas/modules/tools/launchers/jonas-launcher/pom.xml b/jonas/modules/tools/launchers/jonas-launcher/pom.xml deleted file mode 100644 index 7b750561c7..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - org.ow2.jonas - jonas-launchers - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.launchers - jonas-launcher - bundle - JOnAS :: Tools :: Launchers :: JOnAS - - - org.ow2.jonas.launcher.jonas.JOnAS - - - - - org.osgi - org.osgi.core - provided - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.ow2.bundles - ow2-util-substitution - - - - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - false - - - org.ow2.jonas - bootstrap-core - ${project.version} - - - org.ow2.jonas - jonas-service-manager - ${project.version} - - - org.ow2.jonas - jonas-mbeans - ${project.version} - - - - - org.ow2.jonas - jonas-report-core - ${project.version} - - - org/ow2/jonas/launcher/jonas/auto-deploy.properties - - - - generate-autodeploy-bundles-list - true - - generate-list - - generate-sources - - - - - - - diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java deleted file mode 100644 index 0cf4b177a2..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/DefaultConfigurationProvider.java +++ /dev/null @@ -1,537 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import static org.ow2.jonas.launcher.jonas.util.IOUtils.getPropertiesFromClass; -import static org.ow2.jonas.launcher.jonas.util.IOUtils.getPropertiesFromFile; -import static org.ow2.jonas.launcher.jonas.util.IOUtils.props2Map; - -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.SortedMap; -import java.util.TreeMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.osgi.framework.Constants; -import org.ow2.jonas.launcher.jonas.util.IOUtils; -import org.ow2.jonas.launcher.jonas.util.JOnASUtils; -import org.ow2.jonas.launcher.jonas.util.Maven2Utils; -import org.ow2.util.substitution.ISubstitutionEngine; -import org.ow2.util.substitution.engine.DefaultSubstitutionEngine; -import org.ow2.util.substitution.resolver.ChainedResolver; -import org.ow2.util.substitution.resolver.PropertiesResolver; -import org.ow2.util.substitution.resolver.RecursiveResolver; - -/** - * Default {@link IConfigurationProvider} for Apache Felix. - * @author Guillaume Sauthier - */ -public class DefaultConfigurationProvider implements IConfigurationProvider { - - /** - * Property for the bundles to start at startup. - */ - private static final String JONAS_BUNDLES_CONFIG_FILE_PROP = "jonas.bundles.configuration.file"; - - /** - * Logger. - */ - private static final Logger LOGGER = Logger.getLogger(DefaultConfigurationProvider.class.getName()); - - /** - * Property substitution engine. - */ - private ISubstitutionEngine substitutionEngine; - - /** - * The list of resolvers to be used. - */ - private ChainedResolver resolver; - - /** - * List of auto install bundle locations (per level). - */ - private SortedMap> autoInstallLevelBundlesLocationMap = null; - - /** - * List of auto start bundle locations (per level). - */ - private SortedMap> autoStartLevelBundlesLocationMap = null; - - /** - * Default constructor. - */ - public DefaultConfigurationProvider() { - resolver = new ChainedResolver(); - this.substitutionEngine = createSubstitutionEngine(); - this.autoInstallLevelBundlesLocationMap = new TreeMap>(); - this.autoStartLevelBundlesLocationMap = new TreeMap>(); - } - - /** - * Can be overridden if required. - * @return the substituion engine that will be used for variable value resolution. - */ - protected ISubstitutionEngine createSubstitutionEngine() { - DefaultSubstitutionEngine engine = new DefaultSubstitutionEngine(); - engine.setMarkerChar('$'); - engine.setOpeningChar('{'); - engine.setEndingChar('}'); - engine.setResolver(new RecursiveResolver(engine, resolver)); - return engine; - } - - /** - * @return a Felix default configuration. - * @throws IOException configuration not found - */ - public Map getConfiguration() throws IOException { - - // 1. Load javase-profiles.properties - // User shouldn't override theses properties, so they're only retrieved as class resources - Properties javaProfiles = IOUtils.getPropertiesFromClass("javase-profiles.properties", JOnAS.class); - - resolver.getResolvers().add(new PropertiesResolver(System.getProperties())); - resolver.getResolvers().add(new PropertiesResolver(javaProfiles)); - - resolveProperties(javaProfiles); - - // 2. Load defaults.properties - Properties defaultsProperties; - File defaultsFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/defaults.properties"); - if (defaultsFile.exists()) { - defaultsProperties = IOUtils.getPropertiesFromFile(defaultsFile); - } else { - defaultsProperties = IOUtils.getPropertiesFromClass("defaults.properties", JOnAS.class); - } - - // Add a special property 'javase.version' - // Detect the JVM version (1.5 / 1.6), fallback on 1.5 - defaultsProperties.setProperty("javase.version", javaSeSpecificationVersion()); - - // Add a new resolver - resolver.getResolvers().add(new PropertiesResolver(defaultsProperties)); - - // Resolve the variables - resolveProperties(defaultsProperties); - - // 3. gateway.properties - Properties gatewayProperties; - File gatewayFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/gateway.properties"); - if (gatewayFile.exists()) { - gatewayProperties = getPropertiesFromFile(gatewayFile); - } else { - gatewayProperties = getPropertiesFromClass("gateway.properties", JOnAS.class); - } - - // Add a new resolver - resolver.getResolvers().add(new PropertiesResolver(gatewayProperties)); - - // Resolve the variables - resolveProperties(gatewayProperties); - - // Augment that basic configuration with bundles to be started during gateway start-up - // - Properties autoDeployProperties = null; - File autoDeployFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), "conf/osgi/auto-deploy.properties"); - if (autoDeployFile.exists()) { - autoDeployProperties = IOUtils.getPropertiesFromFile(autoDeployFile); - } else { - autoDeployProperties = IOUtils.getPropertiesFromClass("auto-deploy.properties", JOnAS.class); - } - initLevelBundles(autoDeployProperties); - - // Set the Framework storage root directory in working directory (folder named osgi-framework-storage) - File cacheDirectory = IOUtils.getSystemFile(JOnASUtils.getWorkDirectory(), "osgi-framework-storage"); - gatewayProperties.put(Constants.FRAMEWORK_STORAGE, cacheDirectory.getAbsolutePath()); - - return props2Map(gatewayProperties); - } - - /** - * Resolve this set of properties with the given resolver. - * @param properties properties to be resolved - */ - @SuppressWarnings("unchecked") - private void resolveProperties(final Properties properties) { - - Enumeration names = (Enumeration) properties.propertyNames(); - while (names.hasMoreElements()) { - String name = names.nextElement(); - - String value = properties.getProperty(name); - String systemValue = System.getProperty(name); - - // Override with System properties if possible - if (systemValue != null) { - value = systemValue; - } - - // Resolve the value - String resolved = substitutionEngine.substitute(value); - properties.setProperty(name, resolved); - } - } - - /** - * Gather a Java specification version (1.5 / 1.6) from system package, system - * properties or use a default value. - * @return the Java specification version supported by this JVM - */ - private static String javaSeSpecificationVersion() { - - VersionNumber version; - - // Try package version - String value = System.class.getPackage().getSpecificationVersion(); - if (value != null) { - version = new VersionNumber(value); - } else { - // Try system property (with default to 1.5) - value = System.getProperty("java.specification.version", "1.5"); - version = new VersionNumber(value); - } - - return version.getMajorMinor(); - } - - - /** - * - */ - protected void initLevelBundles(final Properties autoDeployProperties) throws IOException { - // Iterates over the properties - for (Iterator it = autoDeployProperties.keySet().iterator(); it.hasNext();) { - - // Process level properties - String key = (String) it.next(); - - if (key.startsWith("install.level.")) { - // Get the associated level - String level = key.substring("install.level.".length()); - - // Add list of bundles locations for the given level - autoInstallLevelBundlesLocationMap.put(Integer.valueOf(level), getBundleLocations(autoDeployProperties, key)); - - } - - if (key.startsWith("start.level.")) { - // Get the associated level - String level = key.substring("start.level.".length()); - - // Add list of bundles locations for the given level - autoStartLevelBundlesLocationMap.put(Integer.valueOf(level), getBundleLocations(autoDeployProperties, key)); - } - } - - - // Create a list with bundles that needs to be started before all the other bundles of start level 1 - List extraBundleListLocationLevelOne = new ArrayList(); - - - // Adds the bootstrap bundles that the user may specify. - File jonasBootStrapBundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles"); - List jonasBootStrapBundlesLocations = getBundleLocationsFromDirectory(jonasBootStrapBundlesDir); - // Concatenate the locations with the new one - if (jonasBootStrapBundlesLocations != null && !jonasBootStrapBundlesLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(jonasBootStrapBundlesLocations); - } - - // JPA 2.0 - String jpaProviders = ""; - try { - jpaProviders = JOnASUtils.getServerProperty("jonas.service.ejb3.jpa.provider", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get ejb3 persistence providers property", e); - } - if (jpaProviders.contains("eclipselink2.2") || jpaProviders.contains("eclipselink2.3") || jpaProviders.contains("hibernate3.5") || jpaProviders.contains("hibernate3.6") || jpaProviders.contains("hibernate4.1") || jpaProviders.contains("openjpa2")) { - File jpa2BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-jpa2.0"); - List bundleLocations = getBundleLocationsFromDirectory(jpa2BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Java EE 6 API - if (!Boolean.getBoolean("jonas.javaee-6-api.disabled")) { - File ejb31BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-javaee-6.0"); - List bundleLocations = getBundleLocationsFromDirectory(ejb31BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - - // Adds JSP 2.2 / Servlet 3.0 / EL 2.2 if there is servlet 3 container - String webServiceClass = ""; - try { - webServiceClass = JOnASUtils.getServerProperty("jonas.service.web.class", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get jonas.service.web.class property", e); - } - if (webServiceClass.contains("7") || webServiceClass.contains("8")) { - File servlets3BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-servlets-3.0"); - List bundleLocations = getBundleLocationsFromDirectory(servlets3BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // JSF 2.0 - String jsfService = ""; - try { - jsfService = JOnASUtils.getServerProperty("jonas.service.jsf.class", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get JSF service", e); - } - if (jsfService.contains("Mojarra20") || jsfService.contains("MyFaces20")) { - File jsf2BundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-jsf-2.0"); - List bundleLocations = getBundleLocationsFromDirectory(jsf2BundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Add interceptor (v1.1) API bundle for CDI - // This is required because if we ship that API bundle in the 'cdi' deployment plan, it comes too - // late and it causes class spaces inconsistencies (with JSF for examples that uses the 'old' - // javax.interceptor package) causing cascading errors when deploying cdi enabled web applications. - String services = ""; - try { - services = JOnASUtils.getServerProperty("jonas.services", ""); - } catch (Exception e) { - throw new IllegalStateException("Cannot get 'jonas.services' property in conf/jonas.properties", e); - } - List sections = Arrays.asList(services.split(",")); - if (sections.contains("cdi")) { - - File cdiBundlesDir = IOUtils.getSystemFile(JOnASUtils.getJOnASRoot(), "lib/bootstrap/bundles-cdi"); - List bundleLocations = getBundleLocationsFromDirectory(cdiBundlesDir); - // Concatenate this list with the existing list - if (bundleLocations != null && !bundleLocations.isEmpty()) { - extraBundleListLocationLevelOne.addAll(bundleLocations); - } - } - - // Bundles with start level of 1 - List previousBundleListLocationLevelOne = autoStartLevelBundlesLocationMap.get(1); - if (previousBundleListLocationLevelOne != null) { - // add the existing bundles to the extra list - extraBundleListLocationLevelOne.addAll(previousBundleListLocationLevelOne); - } - - // Define new list as the extra list + previous list - autoStartLevelBundlesLocationMap.put(1, extraBundleListLocationLevelOne); - } - - - - /** - * @param directory Directory to look for bundles. - * @return A list of URLs corresponding to the - * files in the given directory. An empty String if the directory - * does not exists. - * @throws IOException when a bundle File cannot be turned into an URL - */ - protected List getBundleLocationsFromDirectory(final File directory) throws IOException { - List locations = new ArrayList(); - if (directory.exists()) { - // list all files - FilenameFilter filter = new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return name.endsWith(".jar"); - } - }; - File[] bundles = directory.listFiles(filter); - LOGGER.log(Level.FINE, "Adding bundles from the directory '" + directory + "' :" + Arrays.asList(bundles)); - // Add each URL of the bundle - for (File file : bundles) { - locations.add("reference:".concat(file.toURI().toURL().toExternalForm())); - } - } - return locations; - } - - - /** - * Get the bundle list for a given property. - * @param levels The property list - * @param key The searched key - * @return The bundle list for a given property. - * @throws IOException If the list cannot be built. - */ - private List getBundleLocations(final Properties levels, final String key) throws IOException { - // init list - List locations = new ArrayList(); - - String value = levels.getProperty(key); - - // The bundle list separator is ',' - String[] bundles = value.split(","); - for (int i = 0; i < bundles.length; i++) { - String bundle = bundles[i]; - - // Only process non-empty parts - if (!"".equals(bundle)) { - - String location = ""; - - // The bundle is specified using the following format: - // :[:] - String[] artifact = bundle.split(":"); - - String groupId = artifact[0].trim(); - String artifactId = artifact[1].trim(); - String version = null; - String classifier = null; - - if (artifact.length == 3) { - // Is the third element a version or a - // classifier ? - classifier = getClassifier(artifact[2]); - if (classifier == null) { - // this is NOT a classifier - version = artifact[2].trim(); - } - } else if (artifact.length == 4) { - // We have both version + classifier - // first is the version - version = artifact[2].trim(); - // then, the classifier - classifier = getClassifier(artifact[3]); - if (classifier == null) { - // in this case, this is an error - throw new IOException("Incorrect classifier in bundle: " + bundle); - } - } else if (artifact.length > 4) { - // More elements, invalid - throw new IOException("Incorrect number of parts in bundle: " + bundle); - } - - // no version specified, get the default one - if (version == null) { - version = JOnASUtils.getVersion(); - } - - // Use the reference attribute to load the bundle - // from the local file without copying it into the - // cache of Felix - location = location.concat("reference:"); - - File repository = null; - if (JOnASUtils.isDeveloperMode()) { - // Use m2 repository - repository = Maven2Utils.getMaven2Repository(); - } else { - // Use repositories/internal - repository = Maven2Utils.getMaven2InternalRepository(); - } - // add path - location = location.concat(Maven2Utils.getBundleMaven2Location(repository.getPath(), groupId, artifactId, version, classifier)); - - // add to the list - locations.add(location); - } - } - - return locations; - } - - /** - * @param value value from which the classifier will be extracted - * @return the classifier value if this is a valid classifier, null otherwise - */ - private static String getClassifier(final String value) { - String classifier = null; - String trimmed = value.trim(); - if (trimmed.startsWith("{") && trimmed.endsWith("}")) { - // classifier - classifier = trimmed.substring(1, trimmed.length() - 1); - } - return classifier; - } - - /** - * @return list of the bundles to install and add it to the start level - */ - public SortedMap> getAutoInstallBundles() { - return autoInstallLevelBundlesLocationMap; - } - - /** - * @return map of the bundles to "automatically start for a given level" - */ - public SortedMap> getAutoStartBundles() { - return autoStartLevelBundlesLocationMap; - } - - - public ClassLoader getFrameworkClassLoader(final ClassLoader parentClassLoader) { - File root = JOnASUtils.getJOnASRoot(); - File frameworkDir = IOUtils.getSystemFile(root, "lib/bootstrap/framework"); - - if (!frameworkDir.exists()) { - throw new IllegalStateException("No jar found in the '" + frameworkDir + "' directory."); - } - - // list all files - FilenameFilter filter = new FilenameFilter() { - public boolean accept(final File dir, final String name) { - return name.endsWith(".jar"); - } - }; - - List urlList = new ArrayList(); - File[] frameworkFiles = frameworkDir.listFiles(filter); - // Add each URL of the bundle - for (File file : frameworkFiles) { - try { - urlList.add(file.toURI().toURL()); - } catch (MalformedURLException e) { - throw new IllegalStateException("Unable to get the URL from the file '" + file + "'."); - } - } - return new URLClassLoader(urlList.toArray(new URL[urlList.size()]), parentClassLoader); - - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java deleted file mode 100644 index a91522c3e3..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/IConfigurationProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; - -/** - * Provides a gateway configuration. - * @author Guillaume Sauthier - */ -public interface IConfigurationProvider { - - /** - * @return an OSGi configuration. - * @throws IOException If the configuration couldn't be provided. - */ - Map getConfiguration() throws IOException; - - /** - * @return list of the bundles to install and add it to the start level - */ - SortedMap> getAutoInstallBundles(); - - /** - * @return map of the bundles to "automatically start for a given level" - */ - SortedMap> getAutoStartBundles(); - - ClassLoader getFrameworkClassLoader(final ClassLoader parentClassLoader); - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java deleted file mode 100644 index c2c7269adc..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/JOnAS.java +++ /dev/null @@ -1,437 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; -import java.net.URL; -import java.rmi.RMISecurityManager; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.SortedMap; -import java.util.TreeSet; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.naming.Context; - -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; -import org.osgi.framework.launch.Framework; -import org.osgi.framework.launch.FrameworkFactory; -import org.osgi.framework.startlevel.BundleStartLevel; -import org.ow2.jonas.launcher.jonas.util.IOUtils; -import org.ow2.jonas.launcher.jonas.util.JOnASUtils; - - -/** - * JOnAS Running on OSGi framework. - * @author Guillaume Sauthier - */ -public class JOnAS { - - /** - * OSGi Framework. - */ - private Framework framework; - - /** - * Property for the security manager. - */ - private static final String SECURITY_MANAGER = "jonas.security.manager"; - - /** - * Framework factory property. - */ - private static final String FRAMEWORK_FACTORY_PROPERTY = "META-INF/services/org.osgi.framework.launch.FrameworkFactory"; - - /** - * Property for the TUI bundle name. - */ - private static final String TUI_BUNDLE_NAME_PROPERTY = "jonas-tui"; - - /** - * Property for the GUI bundle name. - */ - private static final String GUI_BUNDLE_NAME_PROPERTY = "jonas-gui"; - - /** - * Provider. - */ - private IConfigurationProvider provider = null; - - /** - * TUI bundle name. - */ - private String tuiBundleName; - - /** - * GUI bundle name. - */ - private String guiBundleName; - - /** - * Logger (JDK). - */ - private static final Logger LOGGER = Logger.getLogger(JOnAS.class.getName()); - - /** - * Creates a new configured framework instance. - * @param forceCleanUp true if cache directory must be deleted. - * @throws Exception cannot create the internal gateway. - */ - public JOnAS(final boolean forceCleanUp) throws Exception { - - System.out.print("\nWelcome to OW2 JOnAS"); - - // RMI Security Manager - boolean useSecurityManager = new Boolean(JOnASUtils.getServerProperty(SECURITY_MANAGER, "true").trim()).booleanValue(); - - if (useSecurityManager) { - if (System.getSecurityManager() == null) { - System.setSecurityManager(new RMISecurityManager()); - } - } - - // Init required System properties - initializeSystemProperties(); - - // Get a new provider - provider = getConfigurationProvider(); - - // Retrieve the configuration - Map configProps = provider.getConfiguration(); - - // Retrieve the bundle names for the shell - tuiBundleName = configProps.get(TUI_BUNDLE_NAME_PROPERTY); - guiBundleName = configProps.get(GUI_BUNDLE_NAME_PROPERTY); - if (guiBundleName == null) { - throw new Exception("Property not defined: " + GUI_BUNDLE_NAME_PROPERTY); - } - - // Delete the cache directory if requested - if (forceCleanUp) { - IOUtils.deleteDir(new File(configProps.get(Constants.FRAMEWORK_STORAGE))); - } - - framework = getFrameworkFactory().newFramework(configProps); - - framework.init(); - - // Use of the system bundle to get the version (For example Equinox framework.getVersion() will answer 0.0.0) - String version = framework.getBundleContext().getBundle(0).getVersion().toString(); - - System.out.println(" (Running on " + framework.getClass().getSimpleName() + " v" + version + ")."); - System.out.println("-----------------------------------------------\n"); - - - // process the auto-install/auto-start bundles - processBundles(); - - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - try { - // Only stop if the system is still running - if (framework.getState() == Bundle.ACTIVE) { - framework.stop(); - } - } catch (Exception e) { - e.printStackTrace(System.err); - } - } - }); - } - - /** - * Start JOnAS on the gateway. - * @throws Exception Thrown if the start fails - */ - public void start() throws Exception { - // Start it ! - framework.start(); - - startTransientBundles(); - - // Wait for framework to stop to exit the VM. - framework.waitForStop(0); - System.exit(0); - } - - /** - * Stop JOnAS. - * @throws Exception Thrown if the stop fails - */ - public void stop() throws Exception { - // Only stop if the system is still running - if (framework.getState() == Bundle.ACTIVE) { - framework.stop(); - } - } - - /** - * @return a new {@link IConfigurationProvider}. - */ - protected IConfigurationProvider getConfigurationProvider() { - // can be sub-classed - return new DefaultConfigurationProvider(); - } - - /** - * Start a new JOnAS. - * @param args not used - * @throws Exception if something failed - */ - public static void main(final String[] args) throws Exception { - JOnAS jonas = new JOnAS(Boolean.getBoolean("jonas.cache.clean")); - jonas.start(); - } - - /** - * Initialize required System properties (using reasonable default values - * when needed). - */ - protected void initializeSystemProperties() { - // Set the current date to calculate the server startup time - System.setProperty("jonas.start.date", Long.toString(System.currentTimeMillis())); - - // Sets the Wrappers that monolog will remove in order to print the - // right caller - System.setProperty("monolog.wrappers", "mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger," - + "org.apache.commons.logging.impl.Jdk14Logger," - + "org.apache.juli.logging.impl.Jdk14Logger," - + "org.ow2.util.log.JDKLogger,org.apache.juli.logging.DirectJDKLog," - + "org.jgroups.logging.JDKLogImpl," - + "org.ow2.carol.util.configuration.TraceCarol,org.slf4j.impl.JCLLoggerAdapter"); - - // Corba/JacORB Properties - System.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); - System.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); - System.setProperty("org.omg.PortableInterceptor.ORBInitializerClass.standard_init", - "org.jacorb.orb.standardInterceptors.IORInterceptorInitializer"); - // Corba/Carol Properties - System.setProperty("javax.rmi.CORBA.PortableRemoteObjectClass", "org.ow2.carol.rmi.multi.MultiPRODelegate"); - System.setProperty("javax.rmi.CORBA.UtilClass", "org.ow2.carol.util.delegate.UtilDelegateImpl"); - - // Naming properties - System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.ow2.carol.jndi.intercept.spi.InterceptorInitialContextFactory"); - - // Security Properties - setDefaultPropertyIfNotSet("java.security.policy", IOUtils.getSystemPath(JOnASUtils.getJOnASBase(), "conf/java.policy")); - setDefaultPropertyIfNotSet("java.security.auth.login.config", IOUtils.getSystemPath(JOnASUtils.getJOnASBase(), - "conf/jaas.config")); - - // MBeanServerBuilder - System.setProperty("javax.management.builder.initial", "org.ow2.jonas.services.bootstrap.mbeanbuilder.JOnASMBeanServerBuilder"); - } - - /** - * @return a framework factory used to instantiate the framework - * @throws Exception if the factory can't be retrieved - */ - private FrameworkFactory getFrameworkFactory() throws Exception { - // Add jar of the framework in a new classloader - ClassLoader frameworkClassLoader = provider.getFrameworkClassLoader(getClass().getClassLoader()); - - - URL url = frameworkClassLoader.getResource(FRAMEWORK_FACTORY_PROPERTY); - if (url != null) { - BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); - try { - for (String s = br.readLine(); s != null; s = br.readLine()) { - s = s.trim(); - // Try to load first non-empty, non-commented line. - if ((s.length() > 0) && (s.charAt(0) != '#')) { - return (FrameworkFactory) Class.forName(s, true, frameworkClassLoader).newInstance(); - } - } - } finally { - if (br != null) { - br.close(); - } - } - } - throw new Exception("Could not find any OSGi framework factory (no '" + FRAMEWORK_FACTORY_PROPERTY + "' property found)."); - } - - /** - * If the property was already set, do not change its value, otherwise, use - * the default. - * @param key property name - * @param def default property value - */ - protected void setDefaultPropertyIfNotSet(final String key, final String def) { - System.setProperty(key, System.getProperty(key, def)); - } - - /** - * The bundle start operation is transient for TUI and GUI bundles. - * @throws BundleException If bundles startup fails - */ - protected void startTransientBundles() throws BundleException { - Bundle[] bundles = framework.getBundleContext().getBundles(); - for (Bundle bundle : bundles) { - // OSGi R3 bundle may not have the Bundle-SymbolicName manifest header - String symbolicName = bundle.getSymbolicName(); - if (symbolicName != null) { - - if (symbolicName.equals(tuiBundleName)) { - // Use Text UI ? - if (Boolean.getBoolean("jonas.felix.tui.enabled")) { - startTransient(bundle); - } - } - - if (symbolicName.startsWith(guiBundleName)) { - // Use GUI ? - if (Boolean.getBoolean("jonas.felix.gui.enabled")) { - startTransient(bundle); - } - } - } - } - } - - /** - * Auto install and auto start the bundles. - */ - protected void processBundles() { - - // Bundle context - BundleContext bundleContext = framework.getBundleContext(); - - // Auto install and auto start bundles - SortedMap> autoInstallBundles = provider.getAutoInstallBundles(); - SortedMap> autoStartBundles = provider.getAutoStartBundles(); - - // Merge keys (levels) - Set levels = new TreeSet(); - levels.addAll(autoInstallBundles.keySet()); - levels.addAll(autoStartBundles.keySet()); - - Iterator levelIterator = levels.iterator(); - - List bundlesToStart = new ArrayList(); - - // For each level, install the given bundles and specify the start level for these bundles - while (levelIterator.hasNext()) { - Integer level = levelIterator.next(); - - // Auto install or auto start bundles ? - List autoInstallBundleLocations = autoInstallBundles.get(level); - List autoStartBundleLocations = autoStartBundles.get(level); - - // for each location, install the bundle and sets the start level - if (autoInstallBundleLocations != null && !autoInstallBundleLocations.isEmpty()) { - for (String bundleLocation : autoInstallBundleLocations) { - - //install the bundle only if it's not already installed in the felix cache - Bundle bundle = isDeploy(bundleLocation); - if (bundle == null) { - try { - bundle = bundleContext.installBundle(bundleLocation); - bundle.adapt(BundleStartLevel.class).setStartLevel(level); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to install the bundle with location '" + bundleLocation - + "' and the startlevel '" + level + "'.", e); - } - } - } - } - - // for auto start, install them and add it to the list of bundles to be started - if (autoStartBundleLocations != null && !autoStartBundleLocations.isEmpty()) { - for (String bundleLocation : autoStartBundleLocations) { - //install the bundle only if it's not already installed in the felix cache - Bundle bundle = isDeploy(bundleLocation); - if (bundle == null) { - try { - bundle = bundleContext.installBundle(bundleLocation); - bundle.adapt(BundleStartLevel.class).setStartLevel(level); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to install the bundle with location '" + bundleLocation - + "' and the startlevel '" + level + "'.", e); - } - } - if (bundle != null && (bundle.getState() == Bundle.INSTALLED || bundle.getState() == Bundle.RESOLVED)) { - //Bundle needs to be started - bundlesToStart.add(bundle); - } - } - } - - } - - // Start the bundles in the specified order - for (Bundle bundle : bundlesToStart) { - try { - bundle.start(); - } catch (BundleException e) { - LOGGER.log(Level.SEVERE, "Unable to start the bundle with name '" + bundle.getSymbolicName() + "'", e); - } - } - - - - } - - /** - * @param bundleLocation A bundle location - * @return the Bundle if it's already installed in the felix cache. Null if the bundle is not in the felix cache - */ - private Bundle isDeploy(final String bundleLocation) { - BundleContext bundleContext = this.framework.getBundleContext(); - for (Bundle bundle: bundleContext.getBundles()) { - if (bundle.getLocation().equals(bundleLocation)) { - return bundle; - } - } - return null; - } - - /** - * The bundle start operation is transient for the given bundle. - * @param bundle the given bundle. - * @throws BundleException If bundle startup fails - */ - protected void startTransient(final Bundle bundle) throws BundleException { - bundle.start(Bundle.START_TRANSIENT); - } - - /** - * @return the Framework instance used by this launcher. - */ - public Framework getFramework() { - return framework; - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java deleted file mode 100644 index 4b2f783cd2..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/VersionNumber.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Simple version number holder. - * @author Guillaume Sauthier - */ -public class VersionNumber { - - /** - * Components of the version number. - */ - private List values = new ArrayList(); - - /** - * Construct a version number - * @param version value to be parsed - */ - public VersionNumber(final String version) { - - // Cut the string on '.' - String[] elements = version.split("\\."); - values.addAll(Arrays.asList(elements)); - - // Fix value if the element list is not long enough - // (we requires at least 2 elements: and ) - if (values.size() == 1) { - // Append a trailing '0' - values.add("0"); - } - } - - /** - * @return the 2 first indices of the version number (representing the major and minor numbers). - */ - public String getMajorMinor() { - return values.get(0) + "." + values.get(1); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - for (String element : values) { - if (sb.length() != 0) { - sb.append('.'); - } - sb.append(element); - } - return sb.toString(); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java deleted file mode 100644 index 80d16e8b91..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/IOUtils.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; -import java.util.Map.Entry; - -/** - * IO utilities. - * @author Guillaume Sauthier - */ -public final class IOUtils { - - /** - * Empty private constructor. - */ - private IOUtils() { - } - - /** - * Recursively delete a directory. - * @param dir directory to be deleted - * @return true if everything went smoothly. - */ - public static boolean deleteDir(final File dir) { - - // not a directory, abort quickly - if (!dir.isDirectory()) { - return false; - } - - // to see if this directory is actually a symbolic link to a directory, - // we want to get its canonical path - that is, we follow the link to - // the file it's actually linked to - File candir; - try { - candir = dir.getCanonicalFile(); - } catch (IOException e) { - return false; - } - - // a symbolic link has a different canonical path than its actual path, - // unless it's a link to itself - if (!candir.equals(dir.getAbsoluteFile())) { - // this file is a symbolic link, and there's no reason for us to - // follow it, because then we might be deleting something outside of - // the directory we were told to delete - return false; - } - - // now we go through all of the files and sub-directories in the - // directory and delete them one by one - File[] files = candir.listFiles(); - if (files != null) { - for (File file : files) { - // in case this directory is actually a symbolic link, or it's - // empty, we want to try to delete the link before we try - // anything - boolean deleted = file.delete(); - if (!deleted) { - // deleting the file failed, so maybe it's a non-empty - // directory - if (file.isDirectory()) { - deleteDir(file); - } - - // otherwise, there's nothing else we can do - } - } - } - - // now that we tried to clear the directory out, we can try to delete it - // again - return dir.delete(); - } - - /** - * Return a OS valid path. - * @param base basis directory - * @param relative relative path name to the basis directory - * @return the OS dependent path name - */ - public static String getSystemPath(final File base, final String relative) { - return getSystemFile(base, relative).getPath(); - } - - /** - * Return a OS valid File. - * @param base basis directory - * @param relative relative path name to the basis directory - * @return the OS dependent File - */ - public static File getSystemFile(final File base, final String relative) { - return new File(base, relative.replace('/', File.separatorChar)); - } - - /** - * Checks if the file exists. - * @param filename File name to be tested - * @return {@code true} if the given file exists. - */ - public static boolean exists(final String filename) { - return new File(filename).exists(); - } - - /** - * @param filename properties file name - * @return the content of the resource as a {@link java.util.Properties} instance. - * @throws java.io.IOException if file is not found or if file is not a property file. - */ - public static Properties getPropertiesFromFile(final File filename) throws IOException { - return loadPropertiesFromStream(new FileInputStream(filename)); - } - - /** - * Create a {@code Properties} from the given InputStream. Close the stream - * at the end of the operation. - * @param is InputStream - * @return properties - * @throws java.io.IOException if the stream cannot be read or if it doesn't - * contains a {@code Properties} - */ - public static Properties loadPropertiesFromStream(final InputStream is) throws IOException { - Properties config = new Properties(); - try { - config.load(is); - } finally { - is.close(); - } - return config; - } - - /** - * Convert the given properties object into a map. - * @param p the properties object - * @return a map - */ - public static Map props2Map(final Properties p) { - Map map = new HashMap(); - if (p != null) { - Iterator> it = p.entrySet().iterator(); - while (it.hasNext()) { - Entry entry = it.next(); - map.put(entry.getKey().toString(), entry.getValue().toString()); - } - } - return map; - } - - - /** - * @param resource properties file name (relative to org/ow2/jonas/launcher/jonas) - * @return the content of the resource as a {@link java.util.Properties} instance. - * @throws java.io.IOException if file is not found or if file is not a property file. - */ - public static Properties getPropertiesFromClass(final String resource, final Class clazz) throws IOException { - return loadPropertiesFromStream(clazz.getResourceAsStream(resource)); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java deleted file mode 100644 index 6bbdfbd26e..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/JOnASUtils.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007-2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.util.Properties; - -import org.ow2.jonas.lib.util.ConfigurationConstants; - -/** - * JOnAS utilities. - * @author Guillaume Sauthier - */ -public final class JOnASUtils { - - /** - * JOnAS Base directory. - */ - private static File base; - - /** - * JOnAS Root directory. - */ - private static File root; - - /** - * Are we in developer mode ? - * TODO Will be initialized by System property. - */ - private static Boolean developerMode = null; - - - /** - * Empty private constructor. - */ - private JOnASUtils() { - } - - /** - * @return the JOnAS Base to be used - */ - public static File getJOnASBase() { - if (base == null) { - // Init JOnAS Base value (using jonas.root if unset) - String jb = System.getProperty(ConfigurationConstants.JONAS_BASE_PROP, - System.getProperty(ConfigurationConstants.JONAS_ROOT_PROP)); - base = new File(jb); - } - return base; - } - - - /** - * Returns the value associated to the given property in jonas.properties file. - * @param property the property name - * @param defaultValue the default value - * @return The value associated to the given property. - * @throws Exception If the property value cannot be retrieved - */ - public static String getServerProperty(final String property, final String defaultValue) throws Exception { - File jonasPropertiesFile = IOUtils.getSystemFile(JOnASUtils.getJOnASBase(), - "conf/" + ConfigurationConstants.JONAS_PROPERTIES_PROP); - Properties props = IOUtils.getPropertiesFromFile(jonasPropertiesFile); - return props.getProperty(property, defaultValue); - } - - /** - * @return the JOnAS Root to be used. May throw an {@link IllegalStateException} - * if jonas.root System property is not set. - */ - public static File getJOnASRoot() { - if (root == null) { - // Init JOnAS Root value - String jr = System.getProperty(ConfigurationConstants.JONAS_ROOT_PROP); - if (jr == null) { - throw new IllegalStateException("Property 'jonas.root' is not set but is required"); - } - root = new File(jr); - } - return root; - } - - /** - * @return the work directory - */ - public static File getWorkDirectory() { - String workDirectoryStr = null; - try { - workDirectoryStr = getServerProperty(ConfigurationConstants.WORK_DIRECTORY_PROP, - ConfigurationConstants.DEFAULT_WORK_DIRECTORY); - } catch (Exception e) { - workDirectoryStr = ConfigurationConstants.DEFAULT_WORK_DIRECTORY; - } - File workDirectory = new File(workDirectoryStr); - if (workDirectory.isAbsolute()) { - return workDirectory; - } - return new File(getJOnASBase(), workDirectoryStr); - } - - /** - * @return the JOnAS version from the Implementation-Version Manifest entry. - */ - public static String getVersion() { - return JOnASUtils.class.getPackage().getImplementationVersion(); - } - - /** - * @return true if the jonas.developer system property has been set. - */ - public static boolean isDeveloperMode() { - if (developerMode == null) { - boolean mode = Boolean.getBoolean(ConfigurationConstants.JONAS_DEVELOPER_PROP); - developerMode = Boolean.valueOf(mode); - } - return developerMode.booleanValue(); - } - -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java b/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java deleted file mode 100644 index abcce74d72..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/java/org/ow2/jonas/launcher/jonas/util/Maven2Utils.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2007 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.launcher.jonas.util; - -import java.io.File; -import java.net.MalformedURLException; - - -/** - * Maven2 Utilities. - * @author Guillaume Sauthier - */ -public final class Maven2Utils { - - /** - * User specified user repository property name. - */ - private static final String PROP_M2_REPOSITORY = "m2.repository"; - - /** - * Path to default M2 repository. - */ - private static final String PATH_DEFAULT_REPOSITORY = ".m2/repository"; - - /** - * Private empty constructor. - */ - private Maven2Utils() { - } - - /** - * @param repository Artifact repository - * @param groupId Artifact groupId - * @param artifactId Artifact ID - * @param version Artifact version - * @param classifier Artifact's classifier (may be null) - * @return a string-ified URL - * @throws MalformedURLException If jar file is not in the repository. - */ - public static String getBundleMaven2Location(final String repository, final String groupId, final String artifactId, final String version, - final String classifier) throws MalformedURLException { - - // Creates a File from artifact info - String appendedClassifier = ""; - if (classifier != null) { - // Handle classifier if any - appendedClassifier = appendedClassifier.concat("-").concat(classifier); - } - String path = constructDirectoryPath(groupId, artifactId, version); - File bundle = new File(repository, path.concat(File.separator).concat(artifactId).concat("-").concat(version).concat( - appendedClassifier).concat(".jar")); - - // Transform to URI first, because File.toURL() is buggy - return bundle.toURI().toURL().toExternalForm(); - } - - /** - * @return a {@link File} to a usable Maven2 repository. - */ - public static File getMaven2Repository() { - File myRepository = null; - String m2Repository = System.getProperty(PROP_M2_REPOSITORY); - - // Priority to a user defined repository - if (m2Repository == null) { - // nothing, so try a reasonable default - // Assume that local Maven2 repository is in ~/.m2/repository - String userHome = System.getProperty("user.home"); - myRepository = IOUtils.getSystemFile(new File(userHome), PATH_DEFAULT_REPOSITORY); - } else { - // Just use the provided value - myRepository = new File(m2Repository); - } - - // Return the detected repository - return myRepository; - } - - /** - * @param groupId Artifact groupId - * @param artifactId Artifact ID - * @param version Artifact version - * @return transform the artifact coordinates into a m2 repository path - */ - private static String constructDirectoryPath(final String groupId, final String artifactId, final String version) { - // Transform groupId '.' into '/' - String transformed = groupId.replace('.', File.separatorChar); - return transformed.concat(File.separator).concat(artifactId).concat(File.separator).concat(version); - } - - /** - * @return a File pointing to $JONAS_ROOT/repositories/maven2-internal - */ - public static File getMaven2InternalRepository() { - File root = JOnASUtils.getJOnASRoot(); - return IOUtils.getSystemFile(root, "repositories/maven2-internal"); - } -} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/META-INF/jonas-launcher.bnd b/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/META-INF/jonas-launcher.bnd deleted file mode 100644 index 7ebe41d84a..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/META-INF/jonas-launcher.bnd +++ /dev/null @@ -1,36 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2011 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# All packages of this bundle are private -Private-Package org.ow2.jonas.launcher.jonas.*, org.osgi.* - -# Import/Export nothing -Import-Package !* -Export-Package !* - -# Standard Manifest entries -Main-Class ${main.class} -Implementation-Version ${project.version} - -Embed-Dependency ow2-util-substitution;inline=true - diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties b/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties deleted file mode 100644 index a98c4d45a0..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/defaults.properties +++ /dev/null @@ -1,100 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2007-2012 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -## ---------------------------------------------------------------------- ## -## -## For curious users: -## This file relies on properties defined in different files: -## * lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/javase-profiles.properties -## -## Note: These values can be overridden by System properties -## Example: force JVM 1.5 profile -Djavase-packages=${javase-1.5} -## -## ---------------------------------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Default list of packages patterns representing the bootdelegation packages -# -# Note: All theses packages are defined twice because xxxx.* do not -# match the xxxx package itself. -# -# Note: This list assumes that theses packages are available from -# the System ClassLoader. If changed, ensure that the library jar -# file is placed in an endorsed directory ($JONAS_ROOT/lib/endorsed -# for example). -# -# Note: Read theses articles to better understand OSGi bootdelegation model: -# http://blog.springsource.com/2009/01/19/exposing-the-boot-classpath-in-osgi/ -# http://paxrunner.ops4j.org/space/Boot+delegation+packages#Bootdelegationpackages-specs -# -bootdelegation-packages com.sun.corba, \ - com.sun.corba.*, \ - com.ibm.CORBA, \ - com.ibm.CORBA.*, \ - com.sun.org.apache.xalan.internal, \ - com.sun.org.apache.xalan.internal.*, \ - com.sun.org.apache.xerces.internal, \ - com.sun.org.apache.xerces.internal.*, \ - com.sun.org.apache.xml.internal, \ - com.sun.org.apache.xml.internal.*, \ - com.sun.org.apache.xpath.internal, \ - com.sun.org.apache.xpath.internal.*, \ - com.sun.jndi.cosnaming, \ - com.sun.jndi.cosnaming.*, \ - com.sun.jndi.ldap, \ - com.sun.jndi.url, \ - com.sun.jndi.url.*, \ - javax.management.remote.rmi, \ - com.sun.security.auth, \ - com.sun.security.auth.*, \ - com.sun.image, \ - com.sun.image.*, \ - org.apache.xalan, \ - org.apache.xalan.*, \ - org.apache.xerces, \ - org.apache.xerces.*, \ - org.apache.xpath.jaxp, \ - org.apache.xpath.jaxp.*, \ - org.jacorb.* - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# OSGi framework packages exported by the underlying JVM (and System bundle) -# That list should be kept in synch with framework supported version -# -osgi-system-packages org.osgi.framework; version=1.6.0, \ - org.osgi.framework.launch; version=1.0.0, \ - org.osgi.framework.wiring; version=1.0.0, \ - org.osgi.framework.startlevel; version=1.0.0, \ - org.osgi.framework.hooks.bundle; version=1.0.0, \ - org.osgi.framework.hooks.resolver; version=1.0.0, \ - org.osgi.framework.hooks.service; version=1.1.0, \ - org.osgi.framework.hooks.weaving; version=1.0.0, \ - org.osgi.service.packageadmin; version=1.2.0, \ - org.osgi.service.startlevel; version=1.1.0, \ - org.osgi.service.url; version=1.0.0, \ - org.osgi.util.tracker; version=1.5.0 - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# ${javase.version} is computed by the launcher -# -javase-packages ${javase-${javase.version}} diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties b/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties deleted file mode 100644 index 2b042703e8..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/gateway.properties +++ /dev/null @@ -1,111 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -## ---------------------------------------------------------------------- ## -## -## For curious users: -## This file relies on properties defined in different files: -## * defaults.properties -## -> $JONAS_BASE/conf/osgi/default.properties -## -> lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/defaults.properties -## (if the file in conf/ was not found) -## * lib/bootstrap/felix-launcher.jar!/org/ow2/jonas/launcher/felix/javase-profiles.properties -## -## Note: These values can be overriden by System properties -## Example: change the framework log level -Dfelix.log.level=4 -## -## ---------------------------------------------------------------------- ## - -## --------------------------------------------- ## -## OSGi Standard ## -## --------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# To override the packages the framework exports by default from the -# class path, set this variable. -# -# Note: Changes to this property must be done with caution, prefer using -# the 'o.o.f.system.packages.extra' property (see below) if only -# additional packages need to be declared. -# -# Note: ${javase-packages} is computed by the launcher given your JVM -# version (1.5 / 1.6). -# -# Do NOT remove ${osgi-system-packages} -# -org.osgi.framework.system.packages ${osgi-system-packages}, \ - ${javase-packages} - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Set this value to append packages to the default set of exported -# system packages. -# -# Example: my.company.lib;version="x.y.z", my.other.lib -# -#org.osgi.framework.system.packages.extra - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# The following property makes specified packages from the class path -# available to all bundles. You should avoid using this property. -# -# Note: Packages can be described using pattern (using '*' as ending -# char). -# Warning: 'sun.*' do not match the 'sun' package's content -# -org.osgi.framework.bootdelegation ${bootdelegation-packages} - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Sets the initial start level of the framework upon startup. -# -# Note: JOnAS requires a framework startlevel AT LEAST equals to 3 -# -org.osgi.framework.startlevel.beginning 3 - - -## --------------------------------------------- ## -## Apache Felix ## -## --------------------------------------------- ## - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Control Felix logger level: from 1 (silent) to 4 (verbose). -# Set it to 4 to see Bundle's wires (package + constraints, client -# and provider) -# -felix.log.level 1 - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Invalid fragment bundles throw an 'exception' by default, for JOnAS, -# we simply output a 'warning' -# -felix.fragment.validation warning - -# # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Felix tries to guess when to implicitly boot delegate in certain -# situations to ease integration without outside code. This feature -# is enabled by default, uncomment the following line to disable it. -# -#felix.bootdelegation.implicit false - -jonas-tui org.ow2.shelbie.startup-console - -jonas-gui org.apache.felix.shell.gui diff --git a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties b/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties deleted file mode 100644 index ab08148780..0000000000 --- a/jonas/modules/tools/launchers/jonas-launcher/src/main/resources/org/ow2/jonas/launcher/jonas/javase-profiles.properties +++ /dev/null @@ -1,554 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# --------------------------------------- # -# Assign some version to system packages # -# --------------------------------------- # - -annotation-1.0 javax.annotation; version="1.0.0" - -activation-1.1 javax.activation; version="1.1.0" - -jaxb-2.1 javax.xml.bind; \ - javax.xml.bind.annotation; \ - javax.xml.bind.annotation.adapters; \ - javax.xml.bind.attachment; \ - javax.xml.bind.helpers; \ - javax.xml.bind.util; version="2.1.0" - -transaction-1.0 javax.transaction; \ - javax.transaction.xa; version="1.0.0" - -saaj-1.3 javax.xml.soap; version="1.3.0" - -jws-2.0 javax.jws; \ - javax.jws.soap; version="2.0.0" - -jaxws-2.1 javax.xml.ws; \ - javax.xml.ws.handler; \ - javax.xml.ws.handler.soap; \ - javax.xml.ws.http; \ - javax.xml.ws.soap; \ - javax.xml.ws.spi; \ - javax.xml.ws.wsaddressing; version="2.1.0" - -jdbc-4.0 javax.sql; \ - javax.sql.rowset; \ - javax.sql.rowset.serial; \ - javax.sql.rowset.spi; version="4.0.0" - -stax-1.0 javax.xml.stream; \ - javax.xml.stream.events; \ - javax.xml.stream.util; \ - javax.xml.transform.stax; version="1.0" - -# Theses packages are relative to a given JVM version -# TODO We shoud probably remove some of them: it's now easier to add packages to the System Bundle -# -# sun.net.www.http needs to be imported optionally, else in Tomcat 7.0.x we get an trace like: -# JreMemoryLeakPreventionListener.lifecycleEvent : Failed to trigger creation of the -# sun.net.www.http.HttpClient class during Tomcat start to prevent possible memory leaks. -# This is expected on non-Sun JVMs. -sun-extra-packages sun.misc; \ - sun.net.www.http; \ - sun.print; \ - sun.print.resources; \ - sun.reflect;\ - sun.rmi.registry; \ - sun.rmi.server; \ - sun.rmi.transport; \ - sun.security.util; \ - sun.security.provider; \ - sun.util.calendar - -jacorb-packages org.jacorb.orb.etf; \ - org.jacorb.orb.iiop; \ - org.jacorb.orb.portableInterceptor; \ - org.jacorb.orb.rmi; \ - org.jacorb.poa - -xpath-packages org.apache.xpath; \ - org.apache.xpath.compiler; \ - org.apache.xpath.functions; \ - org.apache.xpath.objects; \ - org.apache.xml.utils - -# Theses packages are the one provided by a JVM -se-corba-packages org.omg.CORBA; \ - org.omg.CORBA_2_3; \ - org.omg.CORBA_2_3.portable; \ - org.omg.CORBA.DynAnyPackage; \ - org.omg.CORBA.ORBPackage; \ - org.omg.CORBA.portable; \ - org.omg.CORBA.TypeCodePackage; \ - org.omg.CosNaming; \ - org.omg.CosNaming.NamingContextExtPackage; \ - org.omg.CosNaming.NamingContextPackage; \ - org.omg.CosTransactions; \ - org.omg.CSI; \ - org.omg.CSIIOP; \ - org.omg.Dynamic; \ - org.omg.DynamicAny; \ - org.omg.DynamicAny.DynAnyFactoryPackage; \ - org.omg.DynamicAny.DynAnyPackage; \ - org.omg.ETF; \ - org.omg.GSSUP; \ - org.omg.IOP; \ - org.omg.IOP.CodecFactoryPackage; \ - org.omg.IOP.CodecPackage; \ - org.omg.Messaging; \ - org.omg.PortableInterceptor; \ - org.omg.PortableInterceptor.ORBInitInfoPackage; \ - org.omg.PortableServer; \ - org.omg.PortableServer.CurrentPackage; \ - org.omg.PortableServer.POAManagerPackage; \ - org.omg.PortableServer.POAPackage; \ - org.omg.PortableServer.portable; \ - org.omg.PortableServer.ServantLocatorPackage; \ - org.omg.SendingContext; \ - org.omg.SSLIOP; \ - org.omg.stub.java.rmi; \ - org.omg.stub.javax.management.remote.rmi - -# Theses complementary CORBA packages are provided by the JacORB version of the APIs -# Theoretically, they should only be included when the jacorb-corba-api jar is in endorsed directory -# By default, we assume that jacorb-corba-api packages are always available -jacorb-corba-packages org.omg.CosTransactions; \ - org.omg.CSI; \ - org.omg.CSIIOP; \ - org.omg.ETF; \ - org.omg.GSSUP; \ - org.omg.SSLIOP - - -# --------------------------------------- # -# Java SE 7 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# * javax.annotation -# -> Could be provided by the JDK -# * javax.jws.* -# -> Could be provided by the JDK -# * javax.activation -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.soap.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.bind.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.ws.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.stream.*, javax.xml.transform.stax; -# -> We can have some problems if we use those packages from the JDK -# -> Note that we don't really know which version is embedded in the JDK 7 (1.0, 1.1, 1.2 ?) -# (StAX 1.2 API Upgrade in the Sun JDK version 1.6.0_18) -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) -# Differences with JDK 6 is the new package javax.swing.plaf.nimbus - - -# ${annotation-1.0},\ -# ${activation-1.1},\ -# ${jaxb-2.1},\ -# ${transaction-1.0},\ -# ${saaj-1.3},\ -# ${jws-2.0},\ -# ${jaxws-2.1},\ -# ${stax-1.0},\ - -javase-1.7 ${jdbc-4.0}, \ - javax.accessibility; \ - javax.activity; \ - javax.annotation.processing; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio; \ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.lang.model; \ - javax.lang.model.element; \ - javax.lang.model.type; \ - javax.lang.model.util; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.script; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.smartcardio; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.nimbus; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.tools; \ - javax.xml; \ - javax.xml.crypto; \ - javax.xml.crypto.dom; \ - javax.xml.crypto.dsig; \ - javax.xml.crypto.dsig.dom; \ - javax.xml.crypto.dsig.keyinfo; \ - javax.xml.crypto.dsig.spec; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.jcp.xml.dsig.internal; \ - org.jcp.xml.dsig.internal.dom; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.7.0" - -# --------------------------------------- # -# Java SE 6 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# * javax.annotation -# -> Could be provided by the JDK -# * javax.jws.* -# -> Could be provided by the JDK -# * javax.activation -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.soap.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.bind.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.ws.* -# -> Maybe we can have some CNFE exception if we use the package from the JDK -# * javax.xml.stream.*, javax.xml.transform.stax; -# -> We can have some problems if we use those packages from the JDK -# -> Note that we don't really know which version is embedded in the JDK 6 (1.0, 1.1, 1.2 ?) -# (StAX 1.2 API Upgrade in the Sun JDK version 1.6.0_18) -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) - -# ${annotation-1.0},\ -# ${activation-1.1},\ -# ${jaxb-2.1},\ -# ${transaction-1.0},\ -# ${saaj-1.3},\ -# ${jws-2.0},\ -# ${jaxws-2.1},\ -# ${stax-1.0},\ - -javase-1.6 ${jdbc-4.0}, \ - javax.accessibility; \ - javax.activity; \ - javax.annotation.processing; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio; \ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.lang.model; \ - javax.lang.model.element; \ - javax.lang.model.type; \ - javax.lang.model.util; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.script; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.smartcardio; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.tools; \ - javax.xml; \ - javax.xml.crypto; \ - javax.xml.crypto.dom; \ - javax.xml.crypto.dsig; \ - javax.xml.crypto.dsig.dom; \ - javax.xml.crypto.dsig.keyinfo; \ - javax.xml.crypto.dsig.spec; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.jcp.xml.dsig.internal; \ - org.jcp.xml.dsig.internal.dom; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.6.0" - -# --------------------------------------- # -# Java SE 1.5 Environment # -# --------------------------------------- # - -# Notes: Packages provided by JOnAS: -# * javax.transaction.* -# -> JDK provides incomplete packages -# -# -> Theses packages will NOT BE EXPORTED by the System Bundle (even if they -# really are located in rt.jar) - -javase-1.5 javax.accessibility; \ - javax.activity; \ - javax.imageio; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.sql; \ - javax.sql.rowset; \ - javax.sql.rowset.serial; \ - javax.sql.rowset.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.xml; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - ${sun-extra-packages}; \ - ${jacorb-packages}; \ - ${xpath-packages}; \ - ${se-corba-packages}; \ - ${jacorb-corba-packages}; \ - version="1.5.0" diff --git a/jonas/modules/tools/launchers/pom.xml b/jonas/modules/tools/launchers/pom.xml deleted file mode 100644 index c94074a49b..0000000000 --- a/jonas/modules/tools/launchers/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-launchers - pom - JOnAS :: Tools :: Launchers - - - jonas-launcher - jonas-launcher-for-addons - - - diff --git a/jonas/modules/tools/maven/genic-plugin/pom.xml b/jonas/modules/tools/maven/genic-plugin/pom.xml deleted file mode 100644 index be6385de04..0000000000 --- a/jonas/modules/tools/maven/genic-plugin/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - org.ow2.jonas.tools.maven - jonas-tools-maven - 5.3.0-M7-SNAPSHOT - - 4.0.0 - maven-genic-plugin - maven-plugin - JOnAS :: Tools :: Maven :: GenIC plugin - - - - - org.ow2.jonas - jonas-genic - ${project.version} - - - - - diff --git a/jonas/modules/tools/maven/genic-plugin/src/main/java/org/ow2/jonas/tool/maven/genic/plugin/GenICMojo.java b/jonas/modules/tools/maven/genic-plugin/src/main/java/org/ow2/jonas/tool/maven/genic/plugin/GenICMojo.java deleted file mode 100644 index 59af47e75f..0000000000 --- a/jonas/modules/tools/maven/genic-plugin/src/main/java/org/ow2/jonas/tool/maven/genic/plugin/GenICMojo.java +++ /dev/null @@ -1,224 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tool.maven.genic.plugin; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.DependencyResolutionRequiredException; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.project.MavenProject; -import org.ow2.jonas.generators.genic.GenIC; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -/** - * Maven plugin to launch GenIC. - * @goal genic - * @phase package - */ -public class GenICMojo extends AbstractMojo { - - /** - * Name of the file on which GenIC needs to be launched. - * @parameter expression="${project.build.finalName}" - */ - private String fileName; - - /** - * The maven project. - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** - * Directory of the fileName. - * @parameter expression="${project.build.directory}" - */ - private File fileDirectory; - - /** - * validation of XML files ? - */ - private boolean validation = true; - - /** - * list of javac options. - */ - private String javacOpts = null; - - /** - * will GenIC keep already generated files ? - */ - private boolean keepGen = false; - - /** - * specifies which RMIC compiler to user: the built-in one or the external - * one. - */ - private boolean noFastRMIC = false; - - /** - * protocol list. - */ - private String protocols = "jrmp,iiop"; - - /** - * nocompil. - */ - private boolean nocompil = false; - - /** - * Invoke Javac with tools.jar. - */ - private boolean invokeCmd = false; - - /** - * Options for rmic compiler. - */ - private String rmicOpts = null; - - /** - * extra arguments to be passed to GenIC. - */ - private String additionalArgs = null; - - /** - * verbose mode. - */ - private boolean verbose = false; - - /** - * List of arguments that will be used to call GenIC. - */ - private List argumentList = null; - - /** - * Maven runtime classpath - */ - private List runtimeclasspath = null; - - - /** - * Default constructor. - */ - public GenICMojo() { - this.argumentList = new ArrayList(); - } - - /** - * Execute the Maven plugin. - * @throws MojoExecutionException if the file is not generated. - */ - @SuppressWarnings("unchecked") - public void execute() throws MojoExecutionException { - - // keepgenerated - if (keepGen) { - argumentList.add("-keepgenerated"); - } - - if (noFastRMIC) { - argumentList.add("-nofastrmic"); - } - - // novalidation - if (!validation) { - argumentList.add("-novalidation"); - } - - // nocompil - if (nocompil) { - argumentList.add("-nocompil"); - } - - // invokecmd - if (invokeCmd) { - argumentList.add("-invokecmd"); - } - - // javacopts - if (javacOpts != null && !javacOpts.equals("")) { - argumentList.add("-javacopts"); - argumentList.add(javacOpts); - } - - // rmicopts - if (rmicOpts != null && !rmicOpts.equals("")) { - argumentList.add("-rmicopts"); - argumentList.add(rmicOpts); - } - - // verbose - if (verbose) { - argumentList.add("-verbose"); - } - - // additionalargs - if (additionalArgs != null) { - argumentList.add(additionalArgs); - } - - // protocols - if (protocols != null) { - argumentList.add("-protocols"); - argumentList.add(protocols); - } - - try { - runtimeclasspath = project.getRuntimeClasspathElements(); - String cp = new String(); - for (int i = 0; i < runtimeclasspath.size(); i++) { - cp = cp + runtimeclasspath.get(i) + File.pathSeparator; - - } - argumentList.add("-classpath"); - argumentList.add(cp); - - } catch (DependencyResolutionRequiredException e) { - e.printStackTrace(); - } - - // Get artifact - Artifact artifact = project.getArtifact(); - - // Get extension - String extension = artifact.getArtifactHandler().getExtension(); - - // Filename - String inputFilePath = fileDirectory + File.separator + fileName + "." + extension; - - // Add file - argumentList.add(inputFilePath); - - // Call GenIC - GenIC.main(argumentList.toArray(new String[argumentList.size()])); - - } -} diff --git a/jonas/modules/tools/maven/packaging/pom.xml b/jonas/modules/tools/maven/packaging/pom.xml deleted file mode 100644 index 6a74e7f308..0000000000 --- a/jonas/modules/tools/maven/packaging/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - jonas-tools-maven - org.ow2.jonas.tools.maven - 5.3.0-M7-SNAPSHOT - - 4.0.0 - maven-packaging-plugin - maven-plugin - JOnAS :: Tools :: Maven :: Packaging plugin - - - - org.ow2.jonas - jonas-packaging-core - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - - org.apache.felix - org.apache.felix.ipojo - ${ipojo.version} - - - - \ No newline at end of file diff --git a/jonas/modules/tools/maven/packaging/src/main/java/org/ow2/jonas/tool/maven/packaging/ApplicationPackagingMojo.java b/jonas/modules/tools/maven/packaging/src/main/java/org/ow2/jonas/tool/maven/packaging/ApplicationPackagingMojo.java deleted file mode 100644 index e3e0c1c9a6..0000000000 --- a/jonas/modules/tools/maven/packaging/src/main/java/org/ow2/jonas/tool/maven/packaging/ApplicationPackagingMojo.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2012 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tool.maven.packaging; - -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.ow2.jonas.packaging.internal.PackagingManager; - -import java.net.MalformedURLException; -import java.net.URL; - -/** - * A {@code ApplicationPackagingMojo} is responsible to generate an addon - * of the application - * - * @author Mohammed Boukada - * @goal generate-application-addon - * @phase generate-resources - * @requiresProject false - */ -public class ApplicationPackagingMojo extends AbstractMojo { - - /** - * @parameter expression="${urlCloudApplication}" - * @readonly - * @required - */ - private String urlCloudApplication; - - /** - * @parameter expression="${urlEnvironmentTemplate}" - * @readonly - * @optional - */ - private String urlEnvironmentTemplate; - - /** - * @parameter expression="${urlMappingTopology}" - * @readonly - * @optional - */ - private String urlMappingTopology; - - /** - * @parameter expression="${tenant-id}" - * default-value="" - * @readonly - * @optional - */ - private String tenantId; - - /** - * @parameter expression="${outPutDirectory}" - * @readonly - * @required - */ - private String outPutDirectory; - - public void execute() throws MojoExecutionException, MojoFailureException { - - // Quick exit - if (urlCloudApplication == null && outPutDirectory == null) { - return; - } - try { - generateAddon(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void generateAddon() throws Exception { - PackagingManager packagingManager = new PackagingManager(); - if (urlEnvironmentTemplate != null && urlMappingTopology != null && - !"".equals(urlEnvironmentTemplate) && !"".equals(urlMappingTopology)) { - packagingManager.generateAddon(getUrl(urlCloudApplication), tenantId, getUrl(urlEnvironmentTemplate), - getUrl(urlMappingTopology), outPutDirectory); - } else { - packagingManager.generateAddon(getUrl(urlCloudApplication), tenantId, outPutDirectory); - } - } - - private URL getUrl(String url) throws MalformedURLException { - if (url.indexOf(':') == -1) { - url = "file:" + url; - } - return new URL(url); - } -} diff --git a/jonas/modules/tools/maven/pom.xml b/jonas/modules/tools/maven/pom.xml deleted file mode 100644 index fce9a830f1..0000000000 --- a/jonas/modules/tools/maven/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - - 4.0.0 - org.ow2.jonas.tools.maven - jonas-tools-maven - pom - JOnAS :: Tools :: Maven - - - genic-plugin - wsgen-plugin - shade-jonas-transformers - packaging - - - - - org.apache.maven - maven-plugin-api - - - org.apache.maven - maven-project - - - org.apache.maven - maven-artifact - - - - diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/pom.xml b/jonas/modules/tools/maven/shade-jonas-transformers/pom.xml deleted file mode 100644 index 06a07a224a..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - jonas-tools-maven - org.ow2.jonas.tools.maven - 5.3.0-M7-SNAPSHOT - - 4.0.0 - maven-shade-jonas-transformers - JOnAS :: Tools :: Maven :: Shade JOnAS Transformers - - - - - org.apache.maven.plugins - maven-shade-plugin - 1.4 - - - - org.ow2.util.maven - maven-merge-properties-plugin - ${ow2-util-plugin.version} - provided - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - - - \ No newline at end of file diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AbstractJOnASResourceTransformer.java b/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AbstractJOnASResourceTransformer.java deleted file mode 100644 index d191bd5809..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AbstractJOnASResourceTransformer.java +++ /dev/null @@ -1,156 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tools.maven.shade.transformers; - -import com.sun.org.apache.xml.internal.serialize.OutputFormat; -import com.sun.org.apache.xml.internal.serialize.XMLSerializer; -import org.apache.maven.plugins.shade.resource.ResourceTransformer; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Abstract JOnAS Ressource Transformer - * @author Jeremy Cazaux - */ -public abstract class AbstractJOnASResourceTransformer implements ResourceTransformer { - - /** - * Logger - */ - protected Log logger = LogFactory.getLog(this.getClass()); - - /** - * Default constructor - */ - protected AbstractJOnASResourceTransformer() { - } - - /** - * Remove header comment of a Document - * @param document - * @return the header comment as a String - */ - String removeHeaderCommentFromDocument(Document document) { - List masterHeaderCommentNodes = new ArrayList(); - StringBuffer stringBuffer = new StringBuffer(""); - NodeList masterNodes = document.getChildNodes(); - for (int i = 0; i < masterNodes.getLength(); i++) { - Node node = masterNodes.item(i); - if (node.getNodeType() == Node.COMMENT_NODE) { - stringBuffer.append("\n"); - masterHeaderCommentNodes.add(node); - } - } - - for (Node masterHeaderCommentNode: masterHeaderCommentNodes) { - document.removeChild(masterHeaderCommentNode); - } - - return stringBuffer.toString(); - } - - /** - * - * Wrtiting Dom Document onto an output streams - * - * @param document The document to serialize - * @param outputstream The outpustream - * @param lineWidth Max line width - * @param indenting True if we need to indent the document - * @param omitXmlDeclaration true if we need to omit Xml declaration - * @param headerComment The header comment of a document - */ - public void serializeXML(Document document, OutputStream outputstream, final Integer lineWidth, final boolean indenting, - final boolean omitXmlDeclaration, final String headerComment) { - - final String xmlDeclaration = "\n"; - - OutputFormat format = new OutputFormat(document); - format.setOmitXMLDeclaration(true); - format.setIndenting(indenting); - if (indenting) { - format.setIndent(2); - } - if (lineWidth != null) { - format.setLineWidth(lineWidth); - } else { - format.setLineWidth(200); - } - - OutputStreamWriter outputStreamWriter = null; - try { - outputStreamWriter = new OutputStreamWriter(outputstream, "utf-8"); - } catch (UnsupportedEncodingException e) { - this.logger.error("Cannot create an OutputStreamWriter from the outputstream .", e); - } - - try { - outputStreamWriter.write(xmlDeclaration); - } catch (IOException e) { - this.logger.error("Cannot write the following string: " + xmlDeclaration + "\n.", e); - } - - if (headerComment != null) { - try { - outputStreamWriter.write(headerComment); - } catch (IOException e) { - this.logger.error("Cannot write the following string: " + headerComment + "\n.", e); - } - } - - XMLSerializer serializer = new XMLSerializer(outputStreamWriter, format); - try { - serializer.serialize(document); - } catch (IOException e) { - this.logger.error("Cannot serialize the Dom document .", e); - } - } - - /** - * @param resource The resource - * @param regex The regex - * @return true if the resource match the regex. Otherwise false. - */ - protected boolean matchPattern(String resource, String regex) { - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(resource); - return matcher.matches(); - } -} diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AntLibResourceTransformer.java b/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AntLibResourceTransformer.java deleted file mode 100644 index 392071f735..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/AntLibResourceTransformer.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tools.maven.shade.transformers; - -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.codehaus.plexus.util.IOUtil; -import org.ow2.util.maven.plugin.mergeproperties.core.Resource; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.jar.JarEntry; -import java.util.jar.JarOutputStream; - -/** - * This class merge antlib fragments into one. - * - * @author Jeremy Cazaux - */ -public class AntLibResourceTransformer extends AbstractJOnASResourceTransformer { - - /** - * Antlib pattern - */ - public static final String ANTLIB_PATTERN = "antlib-.*[.]xml"; - - /** - * Antlib master file - */ - public static final String MASTER_FILE = "antlib-master.xml"; - - /** - * The output file - */ - protected String outputFile; - - /** - * The master file - */ - protected Resource masterResource; - - /** - * Template files - */ - protected List templateResources; - - /** - * Default constructor - */ - public AntLibResourceTransformer() { - this.templateResources = new ArrayList(); - } - - /** - * @param resource - * @return true if the resource is an antlib resource. Otherwise false - */ - private boolean isAntlibResource(String resource) { - return matchPattern(resource, ANTLIB_PATTERN); - } - - - /** - * @param resource - * @return true if the resource is an antlib fragment - */ - public boolean canTransformResource(String resource) { - return isAntlibResource(resource); - } - - /** - * - * @param resource The ressource - * @param is The InputStream associated to the resource - * @param relocators The list of relocators - * @throws IOException - */ - public void processResource(String resource, InputStream is, List relocators) throws IOException { - - this.logger.info("Processing resource " + resource); - InputStream byteArrayInputStream = new ByteArrayInputStream(IOUtil.toByteArray(is)); - Resource res = new Resource(byteArrayInputStream); - res.setName(resource); - - if (resource.equals(MASTER_FILE)) { - this.masterResource = res; - } else { - this.templateResources.add(res); - } - } - - /** - * @return true if there is transformed ressource. Otherwise false. - */ - public boolean hasTransformedResource() { - return (this.masterResource != null); - } - - /** - * Merge all resources into one - * @param os The JarOutputStream - * @throws IOException - */ - public void modifyOutputStream(JarOutputStream os) { - ByteArrayInputStream antLibResource = null; - try { - //merge antlib fragment into one - antLibResource = this.mergeAntLib(); - } catch (MojoExecutionException e) { - this.logger.info("" + e); - } catch (MojoFailureException e) { - this.logger.info("" + e); - } - - //insert antlib file into the uber jar - try { - os.putNextEntry(new JarEntry(this.outputFile)); - } catch (IOException e) { - this.logger.error("Cannot add a new JarEntry .", e); - } - try { - IOUtil.copy(antLibResource, os); - } catch (IOException e) { - this.logger.error("Cannot copy antLibResource .", e); - } - } - - /** - * Main method of the plugin - * @throws org.apache.maven.plugin.MojoExecutionException - * @throws org.apache.maven.plugin.MojoFailureException - */ - private ByteArrayInputStream mergeAntLib() throws MojoExecutionException, MojoFailureException { - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db; - Document masterDom; - ByteArrayInputStream byteInputStream = null; - String headerComment = null; - - try { - db = dbf.newDocumentBuilder(); - - try { - masterDom = db.parse(this.masterResource.getInputStream()); - Element rootElement = masterDom.getDocumentElement(); - - //remove header comment node of the master - headerComment = removeHeaderCommentFromDocument(masterDom); - - //append child node - List nodes = new ArrayList(); - for (Resource template: this.templateResources) { - - this.logger.info("Merging template " + template.getName() + "..."); - - Document templateDom = null; - try { - templateDom = db.parse(template.getInputStream()); - } catch (SAXException e) { - this.logger.error("Cannot parse " + template.getName() + ".", e); - } - Element element = templateDom.getDocumentElement(); - NodeList nl = element.getChildNodes(); - - for (int i = 0; i < nl.getLength(); i++) { - nodes.add(nl.item(i)); - } - } - for (Node node: nodes) { - rootElement.appendChild(masterDom.importNode(node, true)); - } - - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - serializeXML(masterDom, buffer, null, true, false, headerComment); - byteInputStream = new ByteArrayInputStream(buffer.toByteArray()); - - } catch (SAXException e) { - this.logger.error("Cannot parse " + this.masterResource.getName() + ".", e); - } - - } catch (ParserConfigurationException e) { - this.logger.info(".", e); - } catch (IOException e) { - this.logger.info(".", e); - } -; - return byteInputStream; - } - - /** - * Initialize the output file - * @param outputFile The output file - */ - public void setOutputFile(String outputFile) { - this.outputFile = outputFile; - } -} diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/BuildResourceTransformer.java b/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/BuildResourceTransformer.java deleted file mode 100644 index 3c8f9b8c06..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/BuildResourceTransformer.java +++ /dev/null @@ -1,637 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tools.maven.shade.transformers; - -import org.apache.maven.plugin.MojoFailureException; -import org.codehaus.plexus.util.IOUtil; -import org.ow2.jonas.tools.maven.shade.transformers.xml.Input; -import org.ow2.jonas.tools.maven.shade.transformers.xml.Target; -import org.ow2.util.maven.plugin.mergeproperties.core.MergeProperties; -import org.ow2.util.maven.plugin.mergeproperties.core.Preferences; -import org.ow2.util.maven.plugin.mergeproperties.core.Resource; -import org.ow2.util.maven.plugin.mergeproperties.core.Strategies; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.StringTokenizer; -import java.util.jar.JarOutputStream; - -/** - * This class generate Build.xml ant script - * @author Jeremy Cazaux - */ -public class BuildResourceTransformer extends AbstractJOnASResourceTransformer { - - /** - * build.properties master file - */ - private Resource buildPropertiesMasterResource; - - /** - * build.properties properties files - */ - private List buildPropertiesResources; - - /** - * Build.properties template files - */ - private List buildPropertiesTemplateResources; - - /** - * Output build.properties file - */ - private String outputBuildPropertiesFile; - - /** - * build.xml master File - */ - private Resource buildXmlMasterResource; - - /** - * build.xml template files - */ - private List buildXmlTemplateResources; - - /** - * Output build.xml file - */ - private String outputBuildXmlFile; - - - /** - * Strategies - */ - private Strategies strategies; - - /** - * Preferences - */ - private Preferences preferences; - - /** - * List of for each buildProperties files - */ - private HashMap properties; - - /** - * The build.xml master file - */ - public static final String BUILD_XML_MASTER_FILE = "build-master.xml"; - - /** - * The build.properties master file - */ - public static final String BUILD_PROPERTIES_MASTER_FILE = "build-master.properties.template"; - - /** - * An antacall service marker is a marker which need to be replaced by antcalls to all JOnAS services - * A JOnAS service is a target with a target name prefix by the string "set_" - */ - private final String ANTCALL_SERVICES_MARKER = "antcall_services"; - - /** - * An antcall implementation is a marker which need to be replaced by antcalls to all services which implemented - * the service where is defined this antcall - */ - private final String ANTCALL_IMPLEMENTATION_MARKER = "antcall_implementation"; - - /** - * A input marker is a marker which need to be replaced by inputs tags. - */ - private static final String INPUT_MARKER = "input"; - - /** - * A condition marker is a marker which need to be replaced by conditions tags - */ - private static final String CONDITION_MARKER = "condition"; - - /** - * Build.xml pattern - */ - public static final String BUILD_XML_PATTERN = "build-.*[.]xml"; - - /** - * Build.properties pattern - */ - public static final String BUILD_PROPERTIES_PATTERN = "build-.*[.]properties"; - - /** - * Build.properties.template pattern - */ - public static final String BUILD_PROPERTIES_TEMPLATE_PATTERN = "build-.*[.]properties.template"; - - /** - * Default constructor - */ - public BuildResourceTransformer() { - super(); - this.properties = new HashMap(); - this.buildPropertiesTemplateResources = new ArrayList(); - this.buildXmlTemplateResources = new ArrayList(); - this.buildPropertiesResources = new ArrayList(); - } - - /** - * - * @param resource The resource - * @return true if the resource is a build.xml resource - */ - private boolean isBuildXMLResource(String resource) { - return matchPattern(resource, BUILD_XML_PATTERN); - } - - /** - * @param resource The resource - * @return true if the resource is a build.properties.template resource - */ - private boolean isBuildPropertiesTemplateResource(String resource) { - return matchPattern(resource, BUILD_PROPERTIES_TEMPLATE_PATTERN); - } - - /** - * @param resource The resource - * @return true if the resource is a build.properties resource - */ - private boolean isBuildPropertiesResource(String resource) { - return matchPattern(resource, BUILD_PROPERTIES_PATTERN); - } - - /** - * return true if the resource is an ant script fragment or an ant properties file - */ - public boolean canTransformResource(String resource) { - return isBuildPropertiesResource(resource) || isBuildPropertiesTemplateResource(resource) || - isBuildXMLResource(resource); - } - - /** - * - * @param resource The ressource - * @param is The InputStream associated to the resource - * @param relocators The list of relocators - * @throws IOException - */ - public void processResource(String resource, InputStream is, List relocators) throws IOException { - - Resource res = new Resource(new ByteArrayInputStream(IOUtil.toByteArray(is))); - res.setName(resource); - - //master resources - if (isMasterBuildProperties(res)) { - this.buildPropertiesMasterResource = res; - } else if (isMasterBuildXml(res)) { - this.buildXmlMasterResource = res; - - //template resources - } else if (isBuildXMLResource(resource)) { - this.buildXmlTemplateResources.add(res); - } else if (isBuildPropertiesResource(resource)) { - updateProperties(res); - this.buildPropertiesResources.add(res); - } else if (isBuildPropertiesTemplateResource(resource)) { - this.buildPropertiesTemplateResources.add(res); - } - } - - /** - * @return true if there is transformed ressource. Otherwise false. - */ - public boolean hasTransformedResource() { - return (this.buildPropertiesMasterResource != null || this.buildXmlMasterResource != null); - } - - /** - * This method generates Build.xml Ant script - * @param os - * @throws IOException - */ - public void modifyOutputStream(JarOutputStream os) { - - //merge build.xml - try { - this.mergeAntTasks(); - } catch (MojoFailureException e) { - this.logger.info("." + e); - } - - //merge build.properties - try { - MergeProperties mergeProperties = new MergeProperties(); - mergeProperties.setMasterResource(this.buildPropertiesMasterResource); - mergeProperties.setTemplateResources(this.buildPropertiesTemplateResources); - mergeProperties.setPropertiesResources(this.buildPropertiesResources); - mergeProperties.setStrategies(this.strategies); - mergeProperties.setPreferences(this.preferences); - mergeProperties.setOutputFile(this.outputBuildPropertiesFile); - mergeProperties.execute(); - } catch (Exception e) { - this.logger.error(".", e); - } - } - - /** - * Update properties List - * @param resource A BuildProperties file - */ - public void updateProperties(final Resource resource) { - BufferedReader br = resource.getBufferedReader(); - - try { - StringTokenizer stringTokenizer; - String line; - while ((line = br.readLine()) != null) { - if (line.contains("=")) { - stringTokenizer = new StringTokenizer(line, "="); - } else { - stringTokenizer = new StringTokenizer(line, " "); - } - if (stringTokenizer.hasMoreElements()) { - String key = stringTokenizer.nextElement().toString(); - if (stringTokenizer.hasMoreElements()) { - String value = stringTokenizer.nextElement().toString(); - if (this.properties.containsKey(key)) { - this.properties.put(key, this.properties.get(key) + "," + value); - } else { - this.properties.put(key, value); - } - } - } - } - } catch (IOException e) { - this.logger.info(".", e); - } - } - - /** - * - * @param resource - * @return true if the resource is the build.properties master file. Otherwise false. - */ - private boolean isMasterBuildProperties(Resource resource) { - return resource.getName().equals(BUILD_PROPERTIES_MASTER_FILE); - } - - /** - * - * @param resource - * @return true if the resource is the build.xml master file. Otherwise false. - */ - private boolean isMasterBuildXml(Resource resource) { - return resource.getName().equals(BUILD_XML_MASTER_FILE); - } - - /** - * - * @param resource - * @return ture if the resource is a master file. Otherwise false. - */ - private boolean isMaster(Resource resource) { - return isMasterBuildProperties(resource) || isMasterBuildXml(resource); - } - - /** - * Update children and parent of target - */ - private void updateTarget(List targets) { - - for (Target target1: targets) { - - for (Target target2: targets){ - - if (target1.getName().startsWith(target2.getName() + "_") && !target1.equals(target2) && - !target1.isMasterTarget() && !target2.isMasterTarget()) { - target2.addChild(target1); - target1.setParent(target2); - } - } - } - } - - /** - * @param targets - * @param name the name of the target - * @return the target identified by the name - */ - private Target getTarget(List targets, final String name) { - int i = 0; - - //search for a target - while (i < targets.size() && !targets.get(i).getName().equals(name)) { - i++; - } - - //return the target if found, null otherwise - if (i < targets.size() && targets.get(i).getName().equals(name)) { - return targets.get(i); - } else { - return null; - } - } - - /** - * Generate ant tasks - * @throws org.apache.maven.plugin.MojoExecutionException - * @throws org.apache.maven.plugin.MojoFailureException - */ - public void mergeAntTasks() throws MojoFailureException { - - BufferedReader br = null; - InputStreamReader inputStreamReader = null; - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = null; - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - this.logger.error("." + e); - } - - List resources = new ArrayList(); - resources.add(this.buildXmlMasterResource); - resources.addAll(this.buildXmlTemplateResources); - - List inputs = new ArrayList(); - List conditions = new ArrayList(); - List targets = new ArrayList(); - - Document masterDom = null; - List templateDomList = new ArrayList(); - - String headerComment = null; - - //searching input, condition and target Elements. - for (Resource resource: resources) { - - Document dom = null; - try { - dom = db.parse(resource.getInputStream()); - } catch (SAXException e) { - this.logger.info(".", e); - } catch (IOException e) { - this.logger.info(".", e); - } - - if (isMaster(resource)) { - masterDom = dom; - //remove header comment node of the master - headerComment = removeHeaderCommentFromDocument(masterDom); - } else { - templateDomList.add(dom); - } - - Element rootElement = dom.getDocumentElement(); - - if (!isMaster(resource)) { - NodeList inputNodes = rootElement.getElementsByTagName("input"); - for (int i = 0; i < inputNodes.getLength(); i++) { - Input input = new Input(); - input.setElement((Element) inputNodes.item(i)); - inputs.add(input); - } - } - - NodeList conditionNodes = rootElement.getElementsByTagName("condition"); - for (int i = 0; i < conditionNodes.getLength(); i++) { - conditions.add((Element) conditionNodes.item(i)); - } - - //add template targets with a target name prefix by the string "set_" (a JOnAS service) - NodeList targetNodes = rootElement.getElementsByTagName("target"); - for (int i = 0; i < targetNodes.getLength(); i++) { - Target target = new Target(); - target.setElement((Element) targetNodes.item(i)); - target.setMasterTarget(this.buildXmlMasterResource.equals(resource)); - if (target.getElement().getAttribute("name").startsWith("set_") || - this.buildXmlMasterResource.equals(resource)) { - targets.add(target); - } - } - } - - //update children of targets contained in templates file - this.updateTarget(targets); - - //sort the list of templates target - //Targets of the master template file have the highest priority - //Others target are sort by target name in ascending order - Collections.sort(targets); - - //update condition tags of each input tag element - for (Input input: inputs) { - input.update(conditions, this.properties); - } - - //sort the list of input - //Inputs are sorted by their defaultValue value - Collections.sort(inputs); - - List documents = new ArrayList(); - documents.add(masterDom); - documents.addAll(templateDomList); - - - //updating markers... - for (Document document: documents) { - - NodeList markers = document.getElementsByTagName("marker"); - - List markerList = new ArrayList(); - for (int k = 0; k < markers.getLength(); k++) { - markerList.add((Element) markers.item(k)); - } - - for (Element marker: markerList) { - - String markerType = marker.getAttribute("type"); - - Node parent = marker.getParentNode(); - Node nextNode = marker.getNextSibling(); - - if (markerType.equals(INPUT_MARKER)) { - - if (inputs.size() == 0) { - parent.removeChild(marker); - } else { - for (int y = 0; y < inputs.size(); y++) { - - Element inputElement = inputs.get(y).getElement(); - Node adoptNode = document.importNode(inputElement, true); - - if (y == 0) { - parent.replaceChild(adoptNode, marker); - } else { - parent.insertBefore(adoptNode, nextNode); - } - } - } - - } else if (markerType.equals(CONDITION_MARKER)) { - - if (conditions.size() == 0) { - parent.removeChild(marker); - } else { - for (int y = 0; y < conditions.size(); y++) { - - Element conditionElement = conditions.get(y); - Node adoptNode = document.importNode(conditionElement, true); - - if (y == 0) { - parent.replaceChild(adoptNode, marker); - } else { - parent.insertBefore(adoptNode, nextNode); - } - } - } - - } else if (markerType.equals(ANTCALL_IMPLEMENTATION_MARKER)) { - - Node node = parent; - while (node != null && !(node.getNodeName().equals("target"))){ - node = node.getParentNode(); - } - - if (node != null) { - String targetName = ((Element) node).getAttribute("name"); - Target target = getTarget(targets, targetName); - List children = target.getChildren(); - - for (int i = 0; i < children.size(); i++) { - - Target child = children.get(i); - Element element = document.createElement("antcall"); - element.setAttribute("target", child.getName()); - - if (i == 0) { - parent.replaceChild(element, marker); - } else { - parent.insertBefore(element, nextNode); - } - } - } - - } else if (markerType.equals(ANTCALL_SERVICES_MARKER)) { - int ind = 0; - - for (int i = 0; i < targets.size(); i++) { - Target target = targets.get(i); - - if (target.getParent() == null && !target.isMasterTarget()) { - Element element = document.createElement("antcall"); - element.setAttribute("target", target.getName()); - - if (ind == 0) { - parent.replaceChild(element, marker); - } else { - parent.insertBefore(element, nextNode); - } - - ind++; - } - } - } else { - this.logger.error("Error: marker type unknow"); - } - } - } - - //adding template Element to the master Document... - Element rootElement = masterDom.getDocumentElement(); - for (Document document: templateDomList) { - NodeList nodeList = document.getElementsByTagName("target"); - for (int i = 0; i< nodeList.getLength(); i++) { - Element target = (Element) nodeList.item(i); - rootElement.appendChild(masterDom.importNode(target, true)); - } - } - - //Create parent directories if !exists - File file = new File(this.outputBuildXmlFile); - File parentFile = file.getParentFile(); - if (parentFile != null && !parentFile.exists()) { - parentFile.mkdirs(); - } - - //writing the output file - FileOutputStream fileOutputStream = null; - try { - fileOutputStream = new FileOutputStream(file); - } catch (FileNotFoundException e) { - this.logger.error("Cannot create a FileOutputStream from the file " + file.getAbsolutePath(), e); - } - serializeXML(masterDom, fileOutputStream, 65, true, false, headerComment); - } - - /** - * - * @param strategies Strategies to set - */ - public void setStrategies(Strategies strategies) { - this.strategies = strategies; - } - - /** - * - * @param preferences Preferences to set - */ - public void setPreferences(Preferences preferences) { - this.preferences = preferences; - } - - - /** - * - * @param outputBuildXmlFile Output build.xml file to set - */ - public void setOutputBuildXmlFile(String outputBuildXmlFile) { - this.outputBuildXmlFile = outputBuildXmlFile; - } - - /** - * - * @param outputBuildPropertiesFile Output build.properties file to set - */ - public void setOutputBuildPropertiesFile(String outputBuildPropertiesFile) { - this.outputBuildPropertiesFile = outputBuildPropertiesFile; - } -} diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Input.java b/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Input.java deleted file mode 100644 index 7887d195e5..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Input.java +++ /dev/null @@ -1,169 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tools.maven.shade.transformers.xml; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.StringTokenizer; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -/** - * This class represents a XML input tag - * @author Jeremy Cazaux - */ -public class Input implements Comparable{ - - /** - * Dom Element of an Input - */ - Element element; - - /** - * List of tag conditions associated - */ - private List conditions; - - /** - * Default constructor - */ - public Input() { - this.conditions = new ArrayList(); - } - - /** - * - * @return The list of condition Node associated to this Input - * */ - public List getConditions() { - return conditions; - } - - /** - * - * @return the Element of this input - */ - public Element getElement() { - return element; - } - - /** - * - * @param element Set the element of this input - */ - public void setElement(Element element) { - this.element = element; - } - - /** - * Update conditions associated to this input - * Update validargs attribute - * @param conditions - */ - public void update(final List conditions, final HashMap properties) { - - if (conditions != null && !conditions.isEmpty()) { - - String validArgs = this.element.getAttribute("validargs"); - String defaultValue = this.element.getAttribute("defaultvalue"); - String addProperty = this.element.getAttribute("addproperty"); - - //update all condition associated to this input - for (Element condition: conditions) { - String arg1; - String arg2; - - NodeList nodelist = condition.getElementsByTagName("equals"); - if (nodelist.getLength() > 0) { - Element equals = (Element) nodelist.item(0); - arg1 = equals.getAttribute("arg1"); - arg2 = equals.getAttribute("arg2"); - - if (arg1.length() > 3) { - arg1 = arg1.substring(2, arg1.length() - 1); - } - if (arg2.length() > 3) { - arg2 = arg2.substring(2, arg2.length()-1); - } - - if (arg1.equals(addProperty) && !validArgs.contains(arg2)) { - this.conditions.add(condition); - } else if (arg2.equals(addProperty) && !validArgs.contains(arg1)) { - this.conditions.add(condition); - } - } - } - - //initialize valid argument of the input as a List - List validArgsList = new ArrayList(); - StringTokenizer stringTokenizer = new StringTokenizer(validArgs,","); - while (stringTokenizer.hasMoreElements()) { - validArgsList.add(stringTokenizer.nextElement().toString()); - } - - //update validArgs list with properties hashmap - Set keys = properties.keySet(); - Iterator it = keys.iterator(); - while (it.hasNext()){ - String key = (String) it.next(); - String values = properties.get(key); - - if (key.equals(defaultValue.substring(2, defaultValue.length() - 1))) { - stringTokenizer = new StringTokenizer(values, ","); - while (stringTokenizer.hasMoreElements()) { - String value = stringTokenizer.nextElement().toString(); - if (!validArgsList.contains(value)) { - validArgsList.add(value); - } - } - } - } - - //update valid argument of this input - StringBuffer stringBuffer = new StringBuffer(); - for (int i = 0; i < validArgsList.size(); i++) { - stringBuffer.append(validArgsList.get(i)); - if (i < validArgsList.size() - 1) { - stringBuffer.append(","); - } - } - this.element.setAttribute("validargs", stringBuffer.toString()); - } - } - - /** - * Compare two Input object - * @param o - * @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater - * than the second. - */ - public int compareTo(Object o) { - //Inputs are sorted by their defaultValue value - Input input = (Input) o; - return element.getAttribute("defaultvalue").compareTo(input.getElement().getAttribute("defaultvalue")); - } -} diff --git a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Target.java b/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Target.java deleted file mode 100644 index d24cf165be..0000000000 --- a/jonas/modules/tools/maven/shade-jonas-transformers/src/main/java/org/ow2/jonas/tools/maven/shade/transformers/xml/Target.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2011 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.tools.maven.shade.transformers.xml; - -import org.ow2.util.maven.plugin.mergeproperties.core.Resource; -import org.w3c.dom.Element; - -import java.util.ArrayList; -import java.util.List; - -/** - * This class represents a XML target tag - * @author Jeremy Cazaux - */ -public class Target implements Comparable { - - /** - * Template file associate to the target - */ - private Resource resource; - - /** - * List of child target. A children target is a XML file which is called by an antcall of this current target - */ - private List children; - - /** - * Parent target - */ - private Target parent; - - /** - * Dom Element of a Target - */ - private Element element; - - /** - * Is true if this object is a master targe. - */ - private boolean isMasterTarget; - - /** - * Default constructor - */ - public Target() { - this.children = new ArrayList(); - } - - /** - * - * @return the name of the target - */ - public String getName() { - return element.getAttribute("name"); - } - - /** - * - * @return the template file associate to the target - */ - public Resource getResource() { - return resource; - } - - /** - * - * Add a child to the list of child target - * @param child - */ - public void addChild(Target child) { - this.children.add(child); - } - - /** - * - * @return children of this target - */ - public List getChildren() { - return children; - } - - /** - * - * @return the parent target - */ - public Target getParent() { - return parent; - } - - /** - * - * @return true if this object is a master target. Otherwise, it returns false - */ - public boolean isMasterTarget() { - return isMasterTarget; - } - - /** - * - * @param resource The file associated to this target is set - */ - public void setResource(Resource resource) { - this.resource = resource; - } - - /** - * - * @param parent Parent target is set - */ - public void setParent(Target parent) { - this.parent = parent; - } - - /** - * - * @param masterTarget Set if this target is the master - */ - public void setMasterTarget(boolean masterTarget) { - isMasterTarget = masterTarget; - } - - /** - * - * @param element Set the target Element - */ - public void setElement(Element element) { - this.element = element; - } - - /** - * - * @return the target Element - */ - public Element getElement() { - return element; - } - - /** - * Compare two target object - * - * @param o Object - * @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater - * than the second. - */ - public int compareTo(Object o) { - Target target = (Target) o; - - //Targets of the master template file have the highest priority - //Other targets are sort by target name in ascending order - if (this.isMasterTarget && !target.isMasterTarget) { - return -1; - } else if (!this.isMasterTarget && target.isMasterTarget) { - return 1; - } else if (this.isMasterTarget && target.isMasterTarget){ - return 0; - } else { - return element.getAttribute("name").compareTo(target.element.getAttribute("name")); - } - } -} diff --git a/jonas/modules/tools/maven/wsgen-plugin/pom.xml b/jonas/modules/tools/maven/wsgen-plugin/pom.xml deleted file mode 100644 index ff946bfe60..0000000000 --- a/jonas/modules/tools/maven/wsgen-plugin/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - org.ow2.jonas.tools.maven - jonas-tools-maven - 5.3.0-M7-SNAPSHOT - - 4.0.0 - maven-wsgen-plugin - maven-plugin - JOnAS :: Tools :: Maven :: WSGen plugin - - - - - org.ow2.jonas - jonas-generators-wsgen - ${project.version} - - - - - - diff --git a/jonas/modules/tools/maven/wsgen-plugin/src/main/java/org/ow2/jonas/tool/maven/wsgen/plugin/WsGenMojo.java b/jonas/modules/tools/maven/wsgen-plugin/src/main/java/org/ow2/jonas/tool/maven/wsgen/plugin/WsGenMojo.java deleted file mode 100644 index e984198d54..0000000000 --- a/jonas/modules/tools/maven/wsgen-plugin/src/main/java/org/ow2/jonas/tool/maven/wsgen/plugin/WsGenMojo.java +++ /dev/null @@ -1,129 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2008 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.tool.maven.wsgen.plugin; - -import java.io.File; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectHelper; -import org.ow2.jonas.generators.wsgen.WsGen; - -/** - * Maven plugin to launch WsGen. - * @goal wsgen - * @phase package - * @author Florent BENOIT - */ -public class WsGenMojo extends AbstractMojo { - - /** - * Name of the file on which WSGen needs to be launched. - * @parameter expression="${project.build.finalName}" - */ - private String fileName; - - /** - * The maven project. - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** - * Helper used to attach artifacts. - * @component - * @required - */ - private MavenProjectHelper mavenProjectHelper; - - /** - * Directory of the fileName. - * @parameter expression="${project.build.directory}" - */ - private File fileDirectory; - - /** - * Work directory. - * @parameter expression="${project.build.directory}" - */ - private File workDirectory; - - /** - * Execute the Maven plugin. - * @throws MojoExecutionException if the file is not generated. - */ - public void execute() throws MojoExecutionException { - - // Get artifact - Artifact artifact = project.getArtifact(); - - // Get extension - String extension = artifact.getArtifactHandler().getExtension(); - - // Filename - String inputFilePath = fileDirectory + File.separator + fileName + "." + extension; - - // Create args - String[] args = new String[] {"-d", workDirectory.getPath(), inputFilePath}; - - // Create WsGen - WsGen wsGen = new WsGen(); - - // Call it - String resultFilePath = null; - try { - resultFilePath = wsGen.execute(args); - } catch (Exception e) { - throw new MojoExecutionException("Cannot execute WSGen", e); - } - - // Filename differs ? needs to attach the file. - if (!inputFilePath.equals(resultFilePath)) { - // Get new File extension produced or null if there is no extension - String newExtension = null; - int indexDot = resultFilePath.lastIndexOf('.'); - if (indexDot > 0) { - newExtension = resultFilePath.substring(indexDot + 1); - } - if (extension.equals(newExtension)) { - // Replace the input file - new File(resultFilePath).renameTo(new File(inputFilePath)); - } else { - // attach the new artifact to the build - mavenProjectHelper.attachArtifact(project, newExtension, null, new File(resultFilePath)); - } - - } else { - // Nothing to do - getLog().info("No WsGen generation"); - } - } - -} diff --git a/jonas/modules/tools/migration-jboss/pom.xml b/jonas/modules/tools/migration-jboss/pom.xml deleted file mode 100644 index bbe3a736f7..0000000000 --- a/jonas/modules/tools/migration-jboss/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - org.ow2.jonas - jonas-tools - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-migration-jboss - JOnAS :: Tools :: Migration JBoss - \ No newline at end of file diff --git a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Migrate.java b/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Migrate.java deleted file mode 100644 index 5a5fdc941c..0000000000 --- a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Migrate.java +++ /dev/null @@ -1,303 +0,0 @@ -package org.ow2.jonas.migration.jboss; - -import java.io.*; -import java.util.*; -import javax.xml.parsers.*; -import org.w3c.dom.*; -import org.xml.sax.*; - -/** - * Migrate - * - * @author Rafael H. Schloming <rhs@mit.edu> - **/ - -public class Migrate extends Transformer { - - private Document m_ejbjar; - private Document m_jboss; - private Document m_jbosscmp; - - public Migrate(Document ejbjar, Document jboss, Document jbosscmp) { - m_ejbjar = ejbjar; - m_jboss = jboss; - m_jbosscmp = jbosscmp; - } - - private Collection getBeanNames(String type) { - List docs = new ArrayList(); - docs.add(m_ejbjar); - docs.add(m_jboss); - docs.add(m_jbosscmp); - - LinkedHashSet result = new LinkedHashSet(); - for (int i = 0; i < docs.size(); i++) { - Document doc = (Document) docs.get(i); - Node root = doc.getDocumentElement(); - if (root == null) { continue; } - result.addAll(values(root, - "enterprise-beans/" + type + "/ejb-name")); - } - return result; - } - - private Node getBean(Document doc, final String name) { - Node root = doc.getDocumentElement(); - if (root == null) { return null; } - LinkedHashSet result = new LinkedHashSet(); - String[] paths = {"enterprise-beans/session", - "enterprise-beans/entity", - "enterprise-beans/message-driven"}; - for (int i = 0; i < paths.length; i++) { - query(root, paths[i], result, new NodeFilter() { - public boolean accept(Node node) { - return name.equals(value(node, "ejb-name")); - } - }); - } - return singleton(result); - } - - public void transform() { - open("jonas-ejb-jar"); - - text(LINE); - text(LINE); - comment(" this file is autogenerated by jboss2jonas "); - text(LINE); - - Collection ssn = getBeanNames("session"); - for (Iterator it = ssn.iterator(); it.hasNext(); ) { - String name = (String) it.next(); - session(name); - } - - Collection entity = getBeanNames("entity"); - if (!entity.isEmpty()) { text(LINE); } - for (Iterator it = entity.iterator(); it.hasNext(); ) { - String name = (String) it.next(); - entity(name); - } - - Collection message = getBeanNames("message-driven"); - if (!message.isEmpty()) { text(LINE); } - for (Iterator it = message.iterator(); it.hasNext(); ) { - String name = (String) it.next(); - message(name); - } - - Collection relations = - nodes(m_jbosscmp, "jbosscmp-jdbc/relationships/ejb-relation"); - if (!relations.isEmpty()) { text(LINE); } - rename(relations, new Mapper() - .rename("ejb-relation", "jonas-ejb-relation") - .copy("ejb-relation-name") - .remove("relation-table-mapping") - .rename("table-name", "jdbc-table-name") - .rename("ejb-relationship-role", "jonas-ejb-relationship-role") - .copy("ejb-relationship-role-name") - .remove("key-fields") - .remove("key-field") - .rename("column-name", "foreign-key-jdbc-name")); - text(LINE); - close(); - } - - private void openBean(String type, String name) { - open("jonas-" + type); - tag("ejb-name", name); - - Node bean = getBean(m_jboss, name); - if (bean == null) { return; } - - tag("jndi-name", value(bean, "jndi-name")); - tag("jndi-local-name", value(bean, "local-jndi-name")); - tag("run-as", value(bean, "security-identity/run-as-principal")); - - rename(nodes(bean, "resource-ref"), new Mapper() - .rename("resource-ref", "jonas-resource") - .copy("res-ref-name") - .copy("jndi-name") - .rename("resource-name", "jndi-name") - .rename("res-url", "jndi-name")); - - rename(nodes(bean, "ejb-ref"), new Mapper() - .rename("ejb-ref", "jonas-ejb-ref") - .copy("ejb-ref-name") - .copy("jndi-name")); - - rename(nodes(bean, "resource-env-ref"), new Mapper() - .rename("resource-env-ref", "jonas-resource-env") - .copy("resource-env-ref-name") - .copy("jndi-name")); - } - - private void session(String name) { - openBean("session", name); - close(); - } - - private String value(Node primary, Node secondary, String path) { - if (primary == null) { return null; } - String result = value(primary, path); - if (result != null) { return result; } - if (secondary == null) { return null; } - return value(secondary, path); - } - - private boolean isTrue(String value, boolean def) { - if (value == null || value.equals("")) { return def; } - return value.equalsIgnoreCase("true"); - } - - private String ds2jndi(String ds) { - if (ds == null) { return "jdbc_1"; } - if (ds.equals("java:/DefaultDS")) { - return "jdbc_1"; - } else { - return ds; - } - } - - private void entity(String name) { - openBean("entity", name); - - Node bean = getBean(m_jbosscmp, name); - - open("jdbc-mapping"); - Node defaults = node(m_jbosscmp, "jbosscmp-jdbc/defaults"); - // XXX: I'm guessing at these defaults - boolean create = isTrue(value(bean, defaults, "create-table"), true); - boolean remove = isTrue(value(bean, defaults, "remove-table"), false); - if (remove) { - tag("cleanup", "removeall"); - } else if (!create) { - tag("cleanup", "none"); - } - - tag("jndi-name", ds2jndi(value(bean, defaults, "datasource"))); - tag("jdbc-table-name", value(bean, "table-name")); - - if (bean != null) { - rename(nodes(bean, "cmp-field"), new Mapper() - .rename("cmp-field", "cmp-field-jdbc-mapping") - .copy("field-name") - .rename("column-name", "jdbc-field-name") - // XXX: not sure if this is the right mapping, jonas - // sql type may be the same as jboss's jdbc-type - .copy("sql-type")); - } - close(); - - close(); - } - - private void message(String name) { - openBean("message-driven", name); - Node bean = getBean(m_jboss, name); - if (bean != null) { - String jndi = value(bean, "destination-jndi-name"); - if (!isEmpty(jndi)) { - open("jonas-message-driven-destination"); - tag("jndi-name", jndi); - close(); - } - rename(node(bean, "activation-config"), new Mapper() - .copy("activation-config") - .copy("activation-config-property") - .copy("activation-config-property-name") - .copy("activation-config-property-value")); - } - close(); - } - - private static final Map ARGS = new LinkedHashMap(); - - private static final String arg(String arg, String usage) { - ARGS.put(arg, usage); - return arg; - } - - private static final String HELP = - arg("--help", "display usage information"); - private static final String EJBJAR = - arg("--ejb-jar", "the path to the ejb-jar.xml file"); - private static final String JBOSS = - arg("--jboss", "the path to the jboss.xml file"); - private static final String JBOSSCMP = - arg("--jbosscmp-jdbc", "the path to the jbosscmp-jdbc.xml file"); - - private static void usage(PrintStream out) { - out.println("Usage: jboss2jonas > jonas-ejb-jar.xml"); - out.println(); - out.println(" This utility can be used to generate a JOnAS specific deployment "); - out.println(" descriptor based on an ejb-jar file and various JBoss specific "); - out.println(" configuration files."); - out.println(); - out.println("Options:"); - for (Iterator it = ARGS.entrySet().iterator(); it.hasNext(); ) { - Map.Entry me = (Map.Entry) it.next(); - String arg = (String) me.getKey(); - String usage = (String) me.getValue(); - out.println(); - out.println(" " + arg); - out.println(" " + usage); - } - } - - public static final void main(String[] args) { - List unprocessed = new ArrayList(Arrays.asList(args)); - Map files = new HashMap(); - while (!unprocessed.isEmpty()) { - String arg = (String) unprocessed.remove(0); - if (!ARGS.containsKey(arg)) { - System.err.println("unrecognized arg: " + arg); - System.exit(1); - } - if (arg.equals(HELP)) { - usage(System.out); - System.exit(0); - } else if (unprocessed.isEmpty()) { - System.err.println(arg + ": requires file"); - System.exit(1); - } - files.put(arg, unprocessed.remove(0)); - } - if (files.size() == 0) { - usage(System.err); - System.exit(1); - } - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db; - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new RuntimeException(e); - } - Document ejbjar = parse(db, (String) files.get(EJBJAR)); - Document jboss = parse(db, (String) files.get(JBOSS)); - Document jbosscmp = parse(db, (String) files.get(JBOSSCMP)); - Migrate mig = new Migrate(ejbjar, jboss, jbosscmp); - mig.transform(); - System.out.println(mig.getDocument().getDocumentElement()); - } - - private static final Document parse(DocumentBuilder db, String file) { - if (file == null) { - return db.newDocument(); - } else { - try { - return db.parse(new File(file)); - } catch (SAXException e) { - System.err.println(file + ": " + e.getMessage()); - System.exit(1); - return null; - } catch (IOException e) { - System.err.println(e.getMessage()); - System.exit(1); - return null; - } - } - } - -} diff --git a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Transformer.java b/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Transformer.java deleted file mode 100644 index e11c8aa806..0000000000 --- a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/Transformer.java +++ /dev/null @@ -1,439 +0,0 @@ -package org.ow2.jonas.migration.jboss; - -import java.util.*; -import javax.xml.parsers.*; -import org.w3c.dom.*; - -/** - * The Transformer class contains methods for querying one or more - * input documents and building a new output document. Transformation - * tasks such as these can also be programmed in XSL and performed by - * an XSLT engine, however, for certain kinds of transformations it - * may be useful to perform them in Java by extending the Transformer - * class. - * - * @author Rafael H. Schloming <rhs@mit.edu> - **/ - -public class Transformer { - - /** - * Interface used to filter nodes when querying an input document. - */ - - protected interface NodeFilter { - - /** - * Tests the given node and returns true iff it is accepted by - * this NodeFilter. - * - * @param node the node to test - * @return true iff node is accepted by this NodeFilter - */ - - boolean accept(Node node); - } - - /** - * A predefined {@link NodeFilter} that accepts all nodes. - */ - - protected static final NodeFilter ALL = new NodeFilter() { - public boolean accept(Node node) { return true; } - }; - - /** - * A predefined {@link String} containing the line seperator for - * this system. - */ - - protected static final String LINE = - System.getProperty("line.separator", "\n\r"); - - /** - * A stack of nodes containing the enclosing elements for the - * current node being output. This stack is maintained by the - * {@link #open(String)} and {@link #close()} methods. - */ - private Stack m_stack = new Stack(); - /** - * The document being output. - */ - private Document m_doc; - /** - * The current node being output. - */ - private Node m_node; - - /** - * Constructs a new Transformer ready to output to an empty document. - */ - - protected Transformer() { - try { - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - m_doc = db.newDocument(); - } catch (ParserConfigurationException e) { - throw new RuntimeException(e); - } - m_node = m_doc; - } - - /** - * Returns the output document. - * - * @return the output document - */ - - protected Document getDocument() { - return m_doc; - } - - /** - * Return a string containing the correct number of spaces to - * indent for the given level of nesting. Uses a two space indent. - * - * @param level the number of levels to indent - * @return a string consisting of 2*level spaces - */ - - private String indent(int level) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < level; i++) { - buf.append(" "); - } - return buf.toString(); - } - - /** - * Conditionally indents if indent is true and it is - * necessry to indent. The amount to indent is determined by the - * current stack size adjusted by the amount specified by - * offset. - * - * @param indent a flag indicating whether to indent at all - * @param offset adjusts the amount to indent - */ - - private void indent(boolean indent, int offset) { - int level = m_stack.size() + offset; - if (indent && level > 0) { - text(LINE + indent(level)); - } - } - - /** - * Creates a new child element of the current node with the given - * name and makes the new element the current node. A text node is - * added with an appropriate amount of indenting whitespace before - * the new element is added. - * - * @param name the name of the new element - * - * @see #open(String, boolean) - */ - - protected void open(String name) { - open(name, true); - } - - /** - * Creates a new child element of the current node with the given - * name and makes the new element the current node. If indent is - * true then a text node with the appropriate amount of whitespace - * is added before the new element is created. - * - * @param name the name of the new node - * @param indent a flag indicating whether or not to indent - */ - - protected void open(String name, boolean indent) { - indent(indent, 0); - Element el = m_doc.createElement(name); - m_node.appendChild(el); - m_stack.push(m_node); - m_node = el; - } - - /** - * Adds a text node with the appropriate amount of whitespace and - * restores the previous current node. - * - * @see #close(boolean) - */ - - protected void close() { - close(true); - } - - /** - * Restores the previous current node. If indent is - * true an appropriate amount of indenting whitespace is added - * before restoring the previous current node. - * - * @param indent a flag indicating whether or not to indent - */ - - protected void close(boolean indent) { - indent(indent, -1); - m_node = (Node) m_stack.pop(); - } - - /** - * Sets an attribute on the current element. - * - * @param name the attribute name - * @param value the attribute value - * @throws IllegalStateException if the current node is not an - * element - */ - - protected void set(String name, String value) { - if (m_node.getNodeType() != Node.ELEMENT_NODE) { - throw new IllegalStateException - ("not currently in an element"); - } - Element el = (Element) m_node; - el.setAttribute(name, value); - } - - /** - * Adds the given text to the current node. - * - * @param text the text to add - */ - - protected void text(String text) { - m_node.appendChild(m_doc.createTextNode(text)); - } - - /** - * Adds a comment to the current node. - * - * @param comment the text of the comment - */ - - protected void comment(String comment) { - m_node.appendChild(m_doc.createComment(comment)); - } - - /** - * Creates an element with the given name that contains a single - * text node with the given value and adds it as a child to the - * current node. - * - * @param name the name of the element - * @param value the value of the text node - */ - - protected void tag(String name, String value) { - if (value == null) { return; } - open(name); - text(value); - close(false); - } - - /** - * Queries a node for child elements with a given name and filters - * the result based on a given {@link NodeFilter}. - * - * @param node the node to query - * @param name the name of the child elements to get - * @param result the collection to add the results to - * @param filter the result filter - */ - - protected void get(Node node, String name, Collection result, - NodeFilter filter) { - NodeList nodes = node.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node child = nodes.item(i); - if (child.getNodeName().equals(name) && filter.accept(child)) { - result.add(child); - } - } - } - - /** - * Queries the given node for all elements at a given path. - * - * @param node the node to query - * @param path the path - * @param result the collection to add results to - */ - - protected void query(Node node, String path, Collection result) { - query(node, path, result, ALL); - } - - /** - * Queries the given node for all elements at a given path and - * filters the result. - * - * @param node the node to query - * @param the path - * @param result the collection to add results to - * @param filter the {@link NodeFilter} used to filter the results - */ - - protected void query(Node node, String path, Collection result, - NodeFilter filter) { - int idx = path.indexOf('/'); - if (idx < 0) { - get(node, path, result, filter); - return; - } - - String first = path.substring(0, idx); - String rest = path.substring(idx+1); - ArrayList l = new ArrayList(); - get(node, first, l, ALL); - for (int i = 0; i < l.size(); i++) { - Node n = (Node) l.get(i); - query(n, rest, result, filter); - } - } - - /** - * Queries a node for all descendent elements at a given path. - * - * @param node the node to query - * @param path the path - * @return the resulting list of nodes - */ - - protected List nodes(Node node, String path) { - List result = new ArrayList(); - query(node, path, result); - return result; - } - - /** - * Queries a node for a single descedent element at a given path. - * - * @param node the node to query - * @param path the path - * @return the node or null if none is found - * @throws IllegalStateException if more than one node is found - */ - - protected Node node(Node node, String path) { - ArrayList result = new ArrayList(); - query(node, path, result); - return singleton(result); - } - - /** - * Queries a node for a string value at a given path. - * - * @param node the node to query - * @param path the path - * @return the value or null if there is none - * @throws IllegalStateException if the node exists but has no - * value - */ - - protected String value(Node node, String path) { - if (node == null) { return null; } - Node val = node(node, path + "/#text"); - if (val == null) { - return null; - } else { - String result = val.getNodeValue(); - if (result == null) { - throw new IllegalStateException - ("node has no value: " + val); - } else { - return result.trim(); - } - } - } - - protected List values(Node node, String path) { - List result = new ArrayList(); - List nodes = nodes(node, path + "/#text"); - for (int i = 0; i < nodes.size(); i++) { - Node nd = (Node) nodes.get(i); - result.add(nd.getNodeValue()); - } - return result; - } - - protected Node singleton(Collection c) { - if (c.isEmpty()) { - return null; - } else if (c.size() > 1) { - throw new IllegalStateException - ("too many results: " + c); - } else { - return (Node) c.iterator().next(); - } - } - - private boolean isInlinable(NodeList nodes) { - for (int i = 0; i < nodes.getLength(); i++) { - Node node = nodes.item(i); - switch (node.getNodeType()) { - case Node.TEXT_NODE: - case Node.ENTITY_REFERENCE_NODE: - continue; - default: - return false; - } - } - return true; - } - - protected boolean isEmpty(String str) { - return str == null || str.equals(""); - } - - protected void rename(Collection nodes, Map substitutions) { - for (Iterator it = nodes.iterator(); it.hasNext(); ) { - Node node = (Node) it.next(); - rename(node, substitutions); - } - } - - protected void rename(Node node, Map substitutions) { - if (node == null) { return; } - if (node.getNodeType() == Node.TEXT_NODE) { - String value = node.getNodeValue().trim(); - if (!value.equals("")) { - text(node.getNodeValue()); - } - return; - } - String name = node.getNodeName(); - if (!substitutions.containsKey(name)) { - return; - } - name = (String) substitutions.get(name); - NodeList nodes = node.getChildNodes(); - boolean opened = false; - if (!isEmpty(name)) { - open(name); - opened = true; - } - for (int i = 0; i < nodes.getLength(); i++) { - rename(nodes.item(i), substitutions); - } - if (opened) { - close(!isInlinable(nodes)); - } - } - - protected static class Mapper extends LinkedHashMap { - Mapper copy(String element) { - return rename(element, element); - } - Mapper rename(String from, String to) { - put(from, to); - return this; - } - Mapper remove(String element) { - return rename(element, ""); - } - } - -} diff --git a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jboss.xml b/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jboss.xml deleted file mode 100644 index 06c125df25..0000000000 --- a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jboss.xml +++ /dev/null @@ -1,216 +0,0 @@ - - - - - EntityEJB - EntityJNDI - EntityLocalJNDI - - - EntityResRef(resource-name) - EntityResRefResName - - - EntityResRef(jndi-name) - EntityResRefJNDI - - - EntityResRef(res-url) - EntityResRefResURL - - - - EntityResRefEnvName - EntityResRefEnvJNDI - - - - EntityRefName - EntityRefJNDI - - - - EntityPrincipal - - - - - - LocalEntityRefName - LocalEntityJNDI - - - - - - - - - - - - - - SessionEJB - SessionJNDI - SessionLocalJNDI - - - SessionResRef(resource-name) - SessionResRefResName - - - SessionResRef(jndi-name) - SessionResRefJNDI - - - SessionResRef(res-url) - SessionResRefResURL - - - - SessionResRefEnvName - SessionResRefEnvJNDI - - - - SessionRefName - SessionRefJNDI - - - LocalSessionRefName - LocalSessionJNDI - - - - SessionPrincipal - - - - - - - - - - - - - - - - - - - - MessageEJB - MessageDestinationJNDI - - - MessageDrivenResRef(resource-name) - MessageDrivenResRefResName - - - MessageDrivenResRef(jndi-name) - MessageDrivenResRefJNDI - - - MessageDrivenResRef(res-url) - MessageDrivenResRefResURL - - - - MessageDrivenResRefEnvName - MessageDrivenResRefEnvJNDI - - - - MessageDrivenRefName - MessageDrivenRefJNDI - - - LocalMessageDrivenRefName - LocalMessageDrivenJNDI - - - - - ACPName1 - ACPValue1 - - - ACPName2 - ACPValue2 - - - ACPName3 - ACPValue3 - - - - - MessageDrivenPrincipal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jbosscmp-jdbc.xml b/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jbosscmp-jdbc.xml deleted file mode 100644 index 448e0eba75..0000000000 --- a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jbosscmp-jdbc.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - EntityEJB - - JNDIDatasource - true - true - - EntityTable - - fieldName - columnName - sqlType - - - - - - - RelationName - - RelationTable - - - Role1Name - - - Role1FieldName1 - Role1ColumnName1 - - - Role1FieldName2 - Role1ColumnName2 - - - - - Role2Name - - - Role2FieldName1 - Role2ColumnName1 - - - Role2FieldName2 - Role2ColumnName2 - - - - - - diff --git a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jonas-ejb-jar.xml b/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jonas-ejb-jar.xml deleted file mode 100644 index 7875e155f0..0000000000 --- a/jonas/modules/tools/migration-jboss/src/main/java/org/ow2/jonas/migration/jboss/jonas-ejb-jar.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - SessionEJB - SessionJNDI - SessionLocalJNDI - SessionPrincipal - - SessionResRef(resource-name) - SessionResRefResName - - - SessionResRef(jndi-name) - SessionResRefJNDI - - - SessionResRef(res-url) - SessionResRefResURL - - - SessionRefName - SessionRefJNDI - - - SessionResRefEnvName - SessionResRefEnvJNDI - - - - - EntityEJB - EntityJNDI - EntityLocalJNDI - EntityPrincipal - - EntityResRef(resource-name) - EntityResRefResName - - - EntityResRef(jndi-name) - EntityResRefJNDI - - - EntityResRef(res-url) - EntityResRefResURL - - - EntityRefName - EntityRefJNDI - - - EntityResRefEnvName - EntityResRefEnvJNDI - - - JNDIDatasource - EntityTable - - fieldName - columnName - sqlType - - - - - - MessageEJB - MessageDrivenPrincipal - - MessageDrivenResRef(resource-name) - MessageDrivenResRefResName - - - MessageDrivenResRef(jndi-name) - MessageDrivenResRefJNDI - - - MessageDrivenResRef(res-url) - MessageDrivenResRefResURL - - - MessageDrivenRefName - MessageDrivenRefJNDI - - - MessageDrivenResRefEnvName - MessageDrivenResRefEnvJNDI - - - MessageDestinationJNDI - - - - ACPName1 - ACPValue1 - - - ACPName2 - ACPValue2 - - - ACPName3 - ACPValue3 - - - - - - RelationName - RelationTable - - Role1Name - Role1ColumnName1 - Role1ColumnName2 - - - Role2Name - Role2ColumnName1 - Role2ColumnName2 - - - diff --git a/jonas/modules/tools/pom.xml b/jonas/modules/tools/pom.xml deleted file mode 100644 index 7a14886547..0000000000 --- a/jonas/modules/tools/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.3.0-M7-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas - jonas-tools - pom - JOnAS :: Tools - - - commands - eclipse-compiler - jonas-ant-tasks - jonas-cluster-daemon - launchers - maven - migration-jboss - - - diff --git a/jonas/pom.xml b/jonas/pom.xml deleted file mode 100644 index 5fa30dc91e..0000000000 --- a/jonas/pom.xml +++ /dev/null @@ -1,2353 +0,0 @@ - - - - - org.ow2 - ow2 - 1.3 - - 4.0.0 - org.ow2.jonas - jonas - 5.3.0-M7-SNAPSHOT - JOnAS : Java Open Application Server - JOnAS - http://jonas.ow2.org - - - - GNU LESSER GENERAL PUBLIC LICENSE Version 2.1 - http://www.gnu.org/copyleft/lesser.html - - - - pom - - modules - - - - - UTF-8 - - - 1.0.12 - - - 5.3.0-M7-SNAPSHOT - 1.0.1 - 1.0.9 - 2.0.0-M2-SNAPSHOT - 2.1.12 - 3.0.10 - 1.0.1 - 2.2.6 - 2.2.6 - 1.1.2 - 2.9.3-patch - 3.2.2 - 1.7.1 - 1.6.3 - 1.5.4 - 1.6.1 - 1.6 - 5.8.0 - 5.3.1 - 2.2.3 - - - 1.0.0 - 1.0.1 - 1.0.0 - 1.0.0 - 1.0.0 - 1.2.3 - 1.2.3 - - - 2.3.1-jonas-patch-20110823 - 1.3 - - - 1.0.34 - - - 1.0.36 - 1.0.35 - - - 1.0-M1 - - - 2.0.0-M2 - 2.0.0-M1 - 0.10.0 - - - 6.1.26 - 9.1.1.B60.25.p1 - 6.0.35 - 7.0.27 - 8.1.1.v20120215 - - - 1.3.164 - - - 4.3.0 - 4.2.0 - - 4.0.2 - 1.4.2 - 1.4.1 - 0.9.0-incubator-2007.12.14 - 1.6.6 - 1.2.8 - 2.0.1 - 1.0.2 - 1.2.8 - - 1.8.2 - 1.6.0 - 1.6.0 - 1.4.0 - 1.8.0 - 1.8.4 - - - 3.1.1.RELEASE - - - 4.2.0.Final - - - 2.6.1 - 2.1.9 - - 1.5.1 - - - 2.0-alpha-3 - - - 1.2_08 - 2.0.6 - - 2.0.5 - - - 2.0.9 - - - 2.2.6 - 2.2.5 - - - 1.1.1 - 2.0rc7 - - - 2.0 - 2.0.1 - - - 4.1.2 - 3.1.1 - - - 1.1.2 - 1.7 - 6.1.1 - 1.8.5 - 1.1 - - - 1.4 - - 1.9.1 - - - - - - - - - org.ow2.spec.ee - ow2-ejb-3.0-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-ejb-3.1-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-jaspic-1.0-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-annotation-1.1-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-interceptor-1.1-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-jpa-1.0-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-jsr77-1.1-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-jta-1.1-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-deployment-1.2-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-connector-1.6-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-connector-1.5-spec - ${ow2.spec.version} - - - - org.ow2.spec.ee - ow2-validation-1.0-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-servlet-3.0-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-jsp-2.2-spec - ${ow2.spec.version} - - - org.ow2.spec.ee - ow2-el-2.2-spec - ${ow2.spec.version} - - - - org.ow2.spec.osgi - ow2-jdbc-service-1.0-spec - ${ow2.spec.version} - - - - - org.ow2.spec.ee - ow2-jaxrs-1.1-spec - ${ow2.spec.version} - - - - - org.apache.axis - axis-jaxrpc - 1.4 - - - - org.apache.axis - axis-saaj - 1.4 - - - - - org.apache.tomcat - servlet-api - ${tomcat.version} - - - org.apache.tomcat - jsp-api - ${tomcat.version} - - - - - javax.mail - mail - ${javax.mail.version} - - - org.apache.geronimo.specs - geronimo-jaxr_1.0_spec - 1.1 - - - javax.security - jacc - 1.1 - - - org.apache.geronimo.specs - geronimo-jms_1.1_spec - 1.1.1 - - - org.apache.geronimo.specs - geronimo-corba_2.3_spec - 1.1 - - - javax.faces - jsf-api - ${jsf.version} - - - - org.apache.geronimo.specs - geronimo-jaxws_2.1_spec - 1.0 - - - - org.apache.geronimo.specs - geronimo-saaj_1.3_spec - 1.0.0 - - - org.apache.geronimo.specs - geronimo-javamail_1.4_spec - - - org.apache.geronimo.specs - geronimo-activation_1.1_spec - - - - - - - - org.ow2.carol - carol - ${carol.version} - - - - commons-logging - commons-logging - - - - - org.ow2.carol - carol-interceptors - ${carol-interceptors.version} - - - org.ow2.carol - carol-iiop-delegate - ${carol.version} - - - - - org.ow2.cmi.osgi - cmi-all - ${cmi-osgi.version} - - - org.ow2.cmi.osgi - cmi-loader - ${cmi-osgi.version} - - - - - org.ow2.carol.irmi - irmi - ${irmi.version} - - - - - org.ow2.jotm - jotm-core - ${jotm.version} - provided - - - org.ow2.jotm - jotm-interceptor-jrmp - ${jotm.version} - provided - - - - - commons-digester - commons-digester - ${commons-digester.version} - - - commons-discovery - commons-discovery - 0.4 - - - - commons-logging - commons-logging - 1.1.1 - - - log4j - log4j - - - logkit - logkit - - - avalon-framework - avalon-framework - - - javax.servlet - servlet-api - - - - - - org.ow2.bundles - ow2-bundles-externals-slf4j-jcl - ${ow2-bundles.version} - - - - commons-modeler - commons-modeler - ${commons-modeler.version} - - - commons-digester - commons-digester - - - - - commons-beanutils - commons-beanutils - 1.8.0 - - - - - org.apache.axis - axis - 1.4 - - - - - xerces - xercesImpl - 2.9.1 - - - xml-apis - xml-apis - 1.3.04 - - - xalan - xalan - 2.7.1 - - - xalan - serializer - 2.7.1 - - - - - javax.faces - jsf-impl - ${jsf.version} - - - - - org.jacorb - jacorb - ${jacorb.version} - - - org.jacorb - jacorb-idl - ${jacorb.version} - - - avalon-framework - avalon-framework - 4.1.5 - - - logkit - logkit - 1.2 - - - - - p6spy - p6spy - ${p6spy.version} - - - regexp - regexp - - - gnu-regexp - gnu-regexp - - - log4j - log4j - - - ant - ant - - - oracle - classes12 - - - jboss - jboss - - - - - - - org.ow2.easybeans - easybeans-api - ${easybeans.version} - - - org.ow2.easybeans - easybeans-component-smartclient-server - ${easybeans.version} - - - org.ow2.easybeans - easybeans-deployment - ${easybeans.version} - - - org.ow2.easybeans - easybeans-injection-api - ${easybeans.version} - - - org.ow2.easybeans - easybeans-injection-impl - ${easybeans.version} - - - org.ow2.easybeans - easybeans-util - ${easybeans.version} - - - org.ow2.easybeans.osgi - easybeans-api - ${easybeans.version} - - - org.ow2.easybeans.osgi - easybeans-modules-core - ${easybeans.version} - - - - org.ow2.easybeans.osgi - easybeans-component-quartz - ${easybeans.version} - - - - - org.mortbay.jetty - jetty - ${jetty.version} - - - org.mortbay.jetty - jsp-2.1-glassfish - ${jetty-jasper-glassfish.version} - - - org.mortbay.jetty - jetty-ajp - ${jetty.version} - - - org.mortbay.jetty - jetty-annotations - ${jetty.version} - - - org.mortbay.jetty - jetty-html - ${jetty.version} - - - org.mortbay.jetty - jetty-util - ${jetty.version} - - - org.mortbay.jetty - jetty-plus - ${jetty.version} - - - org.mortbay.jetty - jetty-naming - ${jetty.version} - - - - - org.apache.tomcat - catalina - ${tomcat.version} - - - - org.apache.ws.scout - scout - ${scout.version} - - - org.apache.ws.scout - jaxr-api - - - commons-logging - commons-logging - - - geronimo-spec - geronimo-spec-activation - - - jdom - jdom - - - commons-discovery - commons-discovery - - - axis - axis - - - org.apache.axis - axis-saaj - - - org.apache.axis - axis-jaxrpc - - - xmlbeans - xbean - - - stax - stax-api - - - xerces - xercesImpl - - - - - org.apache.juddi - juddi - ${juddi.version} - - - commons-logging - commons-logging - - - log4j - log4j - - - junit - junit - - - axis - axis - - - - - - - org.ow2.bundles - ow2-util-archive-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-archive-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-scan-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-scan-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-component-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-component-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-execution - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-file - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-i18n - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-marshalling - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-url - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-xml - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-substitution - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-stream - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-deploy-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-deploy-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-common-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-common-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-war-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-war-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-car-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-car-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ws-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ws-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-event-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-event - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-event-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-jmx-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-jmx-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-pool-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-pool-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-xmlconfig - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-annotation-processor - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-builder-webservice - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-audit-report - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-bundles-externals-jgroups - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-bundles-externals-commons-collections - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-bundles-externals-commons-logging - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-bundles-externals-jaxb2 - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-schemas - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-repository-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-repository-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-reader - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deploy-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deploy-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deployer - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-url - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-maven2 - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-obr - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-monitor - ${ow2-bundles.version} - - - - org.ow2.jonas.asm - asm - 3.1 - - - - - org.ow2.fastrmic - fastrmic - 1.0.5 - - - - - org.osgi - org.osgi.core - ${osgi.core.version} - - - - org.osgi - org.osgi.compendium - ${osgi.compendium.version} - - - - - org.apache.felix - org.osgi.compendium - 1.2.0 - - - - org.apache.felix - javax.servlet - - - - - - org.apache.felix - org.apache.felix.framework - ${felix.framework.version} - - - org.apache.felix - org.apache.felix.main - ${felix.framework.version} - - - org.apache.felix - org.apache.felix.shell - ${felix.shell.version} - - - org.apache.felix - org.apache.felix.shell.tui - ${felix.shell.tui.version} - - - org.apache.felix - org.apache.felix.bundlerepository - ${felix.bundlerepository.version} - - - org.apache.felix - org.apache.felix.shell.gui - ${felix.gui.version} - - - org.apache.felix - org.apache.felix.shell.gui.plugin - ${felix.gui.version} - - - org.apache.felix - org.osgi.service.obr - ${felix.osgi.obr.version} - - - org.apache.felix - org.apache.felix.ipojo - ${ipojo.version} - - - org.apache.felix - org.apache.felix.ipojo.annotations - ${ipojo.version} - - - org.apache.felix - org.apache.felix.ipojo.arch - ${ipojo-arch.version} - - - org.apache.felix - org.apache.felix.configadmin - ${felix.configadmin.version} - - - org.apache.felix - org.apache.felix.dependencymanager - ${felix.dependencymanager.version} - - - - - org.apache.maven - maven-plugin-api - ${maven.version} - - - org.apache.maven - maven-project - ${maven.version} - - - org.apache.maven - maven-artifact - ${maven.version} - - - - - org.testng - testng - ${testng.version} - test - - - org.mockito - mockito-all - ${mockito.version} - test - - - org.hamcrest - hamcrest-all - ${hamcrest.version} - test - - - - - - - - - ow2.old - Obsolete OW2 repository - http://maven.ow2.org/maven2 - - - true - - - false - - - - - - maven2-repository.dev.java.net - Java.net Repository for Maven2 - http://download.java.net/maven/2 - - true - - - false - - - - - com.springsource.repository.bundles.external - SpringSource Enterprise Bundle Repository - External Bundle Releases - http://repository.springsource.com/maven/bundles/external - - true - - - false - - - - - - install - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.6 - - - org.apache.maven.plugins - maven-assembly-plugin - 2.3 - - - gnu - - - - org.apache.maven.plugins - maven-clean-plugin - 2.4.1 - - - org.apache.maven.plugins - maven-compiler-plugin - 2.5.1 - - - org.apache.maven.plugins - maven-dependency-plugin - 2.2 - - - org.apache.maven.plugins - maven-deploy-plugin - 2.6 - - - org.apache.maven.plugins - maven-shade-plugin - 1.4 - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.0 - - - org.apache.maven.plugins - maven-help-plugin - 2.1.1 - - - org.apache.maven.plugins - maven-install-plugin - 2.3.1 - - - org.apache.maven.plugins - maven-invoker-plugin - 1.5 - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.8 - - - org.apache.maven.plugins - maven-one-plugin - 1.2 - - - org.apache.maven.plugins - maven-plugin-plugin - 2.8 - - - org.apache.maven.plugins - maven-release-plugin - 2.1 - - - org.apache.maven.plugins - maven-remote-resources-plugin - 1.2 - - - org.apache.maven.plugins - maven-repository-plugin - 2.3.1 - - - org.apache.maven.plugins - maven-resources-plugin - 2.5 - - - org.apache.maven.plugins - maven-scm-plugin - 1.5 - - - org.apache.maven.plugins - maven-site-plugin - 3.0-beta-3 - - - org.jvnet.jaxb2.maven2 - maven-jaxb2-plugin - 0.8.0 - - - org.apache.maven.plugins - maven-source-plugin - 2.1.2 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.9 - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.8.1 - - - org.apache.maven.plugins - maven-verifier-plugin - 1.0 - - - org.apache.maven.plugins - maven-ejb-plugin - 2.3 - - - org.apache.maven.plugins - maven-war-plugin - 2.1.1 - - - org.apache.maven.plugins - maven-ear-plugin - 2.6 - - - org.apache.maven.plugins - maven-rar-plugin - 2.2 - - - org.apache.maven.plugins - maven-artifact-plugin - 2.2-beta-1 - - - org.apache.felix - maven-bundle-plugin - 2.3.5 - - - org.codehaus.mojo.jspc - jspc-maven-plugin - ${jspc.version} - - - org.ow2.util.maven - maven-jbuilding-plugin - ${ow2-util-plugin.version} - - - org.ow2.util - util-maven-plugin-antrmic - ${ow2-util-plugin.version} - - - org.ow2.util.maven - maven-osgi-plugin-launcher-core - ${ow2-util-plugin.version} - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.0 - - - org.ow2.util.maven - maven-merge-properties-plugin - ${ow2-util-plugin.version} - - - - - - - - maven-compiler-plugin - true - - 1.5 - 1.5 - - - - - org.apache.maven.plugins - maven-resources-plugin - - UTF-8 - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - true - - true - 128m - 256m - - http://docs.oracle.com/javase/1.5.0/docs/api/ - http://docs.oracle.com/javaee/5/api/ - - - - - - - maven-jar-plugin - - - - true - true - - - ${buildNumber} - - - - - - - - maven-enforcer-plugin - - - enforce-java - - enforce - - - - - - - 2.1 - - - 1.6 - - - - - - - org.apache.maven.plugins - maven-release-plugin - - jspcompile, release-source-assembly - svn+ssh://${maven.username}@svn.forge.objectweb.org/svnroot/jonas/jonas/tags - true - false - - - - - org.ow2.util.maven - maven-jbuilding-plugin - true - - - org.ow2.jonas.client.ClientContainer - - - - org.ow2.util - org.ow2.bundles - org.ow2.jonas - org.ow2.jonas.osgi - org.ow2.easybeans - org.ow2.easybeans.osgi - org.apache.tomcat - asm - ant - jgroups - org.apache.axis - org.apache.axis2 - org.apache.cxf - org.apache.ws.commons.axiom - org.jacorb - org.mortbay.jetty - org.objectweb.joram - org.objectweb.medor - org.objectweb.monolog - org.ow2.cmi - org.ow2.cmi.osgi - org.ow2.jonas.admin - org.ow2.jotm - org.springframework - org.ow2.shelbie - - - 4 - - - org.ow2.jonas* - org.ow2* - - - - org.apache.felix - org.apache.felix.shell - ${felix.shell.version} - server - - - org.apache.felix - org.apache.felix.shell.tui - ${felix.shell.tui.version} - server - false - - - org.apache.felix - org.osgi.service.obr - ${felix.osgi.obr.version} - server - - - org.apache.felix - org.apache.felix.shell.gui - ${felix.gui.version} - server - false - 2 - - - org.apache.felix - org.apache.felix.shell.gui.plugin - ${felix.gui.version} - server - false - - - org.apache.felix - org.apache.felix.bundlerepository - ${felix.bundlerepository.version} - server - - - org.osgi - org.osgi.core - ${osgi.version} - client - - - org.apache.felix - org.apache.felix.ipojo - ${ipojo.version} - - - org.apache.felix - org.apache.felix.ipojo.arch - ${ipojo-arch.version} - server - - - - org.apache.felix - org.apache.felix.ipojo.api - ${ipojo-api.version} - server - - - org.apache.felix - org.apache.felix.ipojo.handler.whiteboard - ${ipojo-wbp.version} - server - - - org.apache.felix - org.apache.felix.eventadmin - ${felix.eventadmin} - server - - - org.apache.felix - org.apache.felix.ipojo.handler.eventadmin - ${ea-ipojo-handler.version} - server - - - org.apache.felix - org.apache.felix.gogo.runtime - ${gogo.version} - server - - - org.apache.geronimo.blueprint - geronimo-blueprint-api - 1.0.0 - server - - - org.ow2.shelbie - shelbie-core - ${shelbie.version} - server - - - org.apache.felix - org.apache.felix.gogo.command - ${gogo.version} - server - - - org.ow2.shelbie - shelbie-commands-builtin - ${shelbie.version} - server - - - org.ow2.shelbie.commands - shelbie-felix-commands - ${shelbie-felix-commands.version} - server - - - org.ow2.shelbie.commands - shelbie-config-commands - ${shelbie.version} - server - - - org.ow2.shelbie.commands - shelbie-ipojo-commands - ${shelbie.version} - server - - - org.ow2.jonas - jonas-shell - ${project.version} - server - - - org.ow2.shelbie - shelbie-startup-console - ${shelbie.version} - server - false - - - - org.ow2.bundles - ow2-bundles-externals-commons-collections - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-archive-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-archive-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-execution - ${ow2-bundles.version} - server - - - org.ow2.bundles - ow2-util-ee-deploy-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-deploy-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-scan-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-scan-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-common-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-common-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-car-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-car-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ws-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ws-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-war-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-war-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-ee-metadata-ejbjar-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-event-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-event-impl - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-file - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-i18n - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-jmx-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-log - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-pool-api - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-url - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-audit-report - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-xml - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-substitution - ${ow2-bundles.version} - - - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - - - org.ow2.spec.ee - ow2-validation-1.0-spec - - - org.ow2.spec.osgi - ow2-jdbc-service-1.0-spec - - - org.ow2.bundles - ow2-bundles-externals-jaxb2 - ${ow2-bundles.version} - - - - org.ow2.bundles - util-plan-schemas - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-url - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-maven2 - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-fetcher-impl-obr - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deploy-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deploy-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-repository-api - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-repository-impl - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-monitor - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-reader - ${ow2-bundles.version} - - - org.ow2.bundles - util-plan-deployer - ${ow2-bundles.version} - - - org.ow2.bundles - ow2-util-xmlconfig - ${ow2-bundles.version} - - - org.ow2.jonas - jonas-extension-loader-core - ${project.version} - server - - - org.ow2.easybeans.osgi - easybeans-api - ${easybeans.version} - - - org.ow2.jonas - jonas-services-api - ${project.version} - - - org.ow2.jonas.osgi - monolog - ${project.version} - - - org.ow2.jonas - jonas-version - ${project.version} - - - org.ow2.jonas - jonas-commons - ${project.version} - - - org.apache.felix - org.apache.felix.configadmin - ${felix.configadmin.version} - server - - - org.ow2.carol - carol-interceptors - ${carol-interceptors.version} - - - org.ow2.jonas - jonas-naming - ${project.version} - - - org.ow2.jonas - ipojo-interceptor - ${project.version} - - - org.ow2.jonas - jonas-endpoint-collector-core - ${project.version} - - - org.ow2.jonas - event-provider-api - ${project.version} - - - org.ow2.jonas - event-provider-core - ${project.version} - - - org.ow2.jonas - log-provider-core - ${project.version} - - - org.ow2.jonas - jonas-carol-registry-core - ${project.version} - - - org.ow2.jonas - jonas-management-javaee - ${project.version} - - - - org.ow2.bundles - ow2-bundles-externals-commons-logging - - - org.ow2.jonas - jonas-jmx-core - ${project.version} - - - org.ow2.jonas - jonas-generators-raconfig - ${project.version} - - - org.ow2.jonas - jonas-services-datasource-core - ${project.version} - - - org.ow2.jonas - jonas-configadmin-core - ${project.version} - - - org.ow2.jonas - jonas-deployment - ${project.version} - - - org.ow2.jonas - jonas-domain - ${project.version} - - - org.ow2.jonas - jonas-management-reconfig - ${project.version} - - - org.ow2.jonas - jonas-sec-interceptors-jrmp - ${project.version} - - - org.ow2.jonas - jonas-security-core - ${project.version} - - - org.ow2.jonas - jonas-security-auth - ${project.version} - - - org.ow2.jonas - jonas-security-jacc - ${project.version} - - - org.ow2.jonas - jonas-security-jacc-handlers - ${project.version} - - - org.ow2.jonas - jonas-timer - ${project.version} - - - org.ow2.jonas - jonas-ejb-container-svc - ${project.version} - - - org.ow2.jonas - jonas-ejb-container - ${project.version} - - - org.ow2.bundles - ow2-util-event-impl - ${ow2-bundles.version} - server - - - org.ow2.jonas - jndi-interceptors-core - ${project.version} - server - - - org.jacorb - jacorb - client - - - org.jacorb - jacorb-idl - client - - - avalon-framework - avalon-framework - client - - - logkit - logkit - client - - - org.ow2.jonas - jonas-report-api - ${project.version} - - - org.ow2.jonas - jonas-report-extension-deployables - ${project.version} - - - org.ow2.jonas - jonas-report-extension-endpoints - ${project.version} - - - org.ow2.jonas - jonas-report-extension-deployers - ${project.version} - - - org.ow2.jonas - jonas-report-extension-ipojo-instances - ${project.version} - - - org.ow2.jonas - jonas-report-extension-ipojo-handlers - ${project.version} - - - org.ow2.jonas - jonas-report-extension-ipojo-factories - ${project.version} - - - org.ow2.jonas - jonas-report-extension-bundles - ${project.version} - - - org.ow2.jonas - jonas-report-extension-server-info - ${project.version} - - - org.ow2.jonas - jonas-report-extension-jvm - ${project.version} - - - - - - org.ow2.util.maven - maven-deploymentplan-plugin - ${ow2-util-plugin.version} - true - - - - - - - scm:svn:svn://svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/jonas - scm:svn:svn+ssh://${maven.username}@svn.forge.objectweb.org/svnroot/jonas/jonas/trunk/jonas - http://fisheye.ow2.org/browse/JOnAS/jonas/trunk/jonas - - - - Jira - http://jira.ow2.org/browse/JONAS - - - - Bamboo - http://bamboo.ow2.org/browse/JNS - - - - - - - - assembly - - - !assembly - - - - assemblies - - - - - itests - - - !itests - - - - itests - - - - - - build-number-generation - - - .svn - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - - - validate - - create - - - - - false - false - - - - - - - - - build-number-provided - - - .svn - - - - - 0 - - - - - - tools.jar-for-ant - - - ${java.home}/../lib/tools.jar - - - - - - - - maven-antrun-plugin - - - com.sun - tools - ${java.version} - system - ${java.home}/../lib/tools.jar - - - - - - - - - - release-source-assembly - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.3 - - - source-release-assembly - package - - single - - - - true - - project - - - gnu - - - - - - - - - - - diff --git a/jonas_doc/core/src/resources/images/JonasSmall.png b/jonas_doc/core/src/resources/images/JonasSmall.png deleted file mode 100644 index ae4b1776b01dd83298ec4ab8d4efef55ad450196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6305 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 XcmG#4_9_DT00000NkvXXu0mjfhT>7A diff --git a/jonas_tests/.classpath b/jonas_tests/.classpath deleted file mode 100644 index 1168799c8a..0000000000 --- a/jonas_tests/.classpath +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/.settings/org.eclipse.jdt.core.prefs b/jonas_tests/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bf6964c86f..0000000000 --- a/jonas_tests/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -#Wed Dec 12 00:55:22 CET 2007 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/jonas_tests/applications/build.xml b/jonas_tests/applications/build.xml deleted file mode 100644 index 44c19d460d..0000000000 --- a/jonas_tests/applications/build.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/applications/src/org/objectweb/jonas/applications/util/JApplicationsTestCase.java b/jonas_tests/applications/src/org/objectweb/jonas/applications/util/JApplicationsTestCase.java deleted file mode 100644 index 91e4c6dbb4..0000000000 --- a/jonas_tests/applications/src/org/objectweb/jonas/applications/util/JApplicationsTestCase.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Matt Wringe - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.applications.util; - -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.TestCase; - -import org.ow2.jonas.adm.AdmInterface; - -import com.meterware.httpunit.WebConversation; - -/** - * Define a class to add useful methods for test the examples - * - Deploy ear, war and beans - * - Retrieve initial context - * @author Florent Benoit - */ -public class JApplicationsTestCase extends TestCase { - - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - - /** - * Initial context used for lookup - */ - private static Context ictx = null; - - /** - * JOnAS admin used for communicate via JMX to JOnAS - */ - private static AdmInterface admI = null; - - /** - * Conversation used for HttpUnit - */ - protected WebConversation wc = null; - - /** - * URL used for the constructor - */ - protected String url = null; - - /** - * Prefix for build URLs - */ - private String prefixUrl = null; - - /** - * Add to the specified url the prefix - * @param url relative URL - * @return absolute path of URL - */ - protected String getAbsoluteUrl (String url) { - return (this.prefixUrl + url); - } - - /** - * Initialize the port used by tests and the prefix - */ - private void init() { - String port = System.getProperty("http.port"); - if (port == null) { - port = "9000"; - } - - prefixUrl = "http://localhost:" + port; - } - - /** - * Constructor with a specified name - * @param s the name - */ - public JApplicationsTestCase(String s) { - super(s); - init(); - } - /** - * Constructor with a specified name and url - * @param s the name - * @param url the url which can be used - */ - public JApplicationsTestCase(String s, String url) { - super(s); - wc = new WebConversation(); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Constructor with a specific name and url - * This constructor is to be used when Basic Authentication - * is required. - * - * @param s the name - * @param url the url which can be used - * @param username the username - * @param password the password - */ - public JApplicationsTestCase(String s, String url, String username, String password) { - super(s); - wc = new WebConversation(); - wc.setAuthorization(username, password); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Common setUp routine, used for every test. - * @throws Exception if an error occurs - */ - protected void setUp() throws Exception { - try { - // get InitialContext - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - - } catch (NamingException e) { - System.err.println("Cannot setup test: " + e); - e.printStackTrace(); - } - } - - - /** - * Load an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void useEar(String filename) throws Exception { - - try { - // Load ear in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) ictx.lookup(jonasName + "_Adm"); - } - - //Test in both directories (apps/ and apps/autoload) - String appsFileName = filename + ".ear"; - String autoloadAppsFileName = "autoload" + File.separator + filename + ".ear"; - if (!admI.isEarLoaded(appsFileName) && !admI.isEarLoaded(autoloadAppsFileName)) { - //if the file was in autoload, it was loaded - admI.addEar(appsFileName); - } - - } catch (Exception e) { - throw new Exception("Cannot load Ear : " + e.getMessage()); - } - } - - /** - * Load a war file in the jonas server - * @param filename war file, without ".war" extension - * @throws Exception if an error occurs - */ - public void useWar(String filename) throws Exception { - - try { - // Load war in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) ictx.lookup(jonasName + "_Adm"); - } - - //Test in both directories (apps/ and apps/autoload) - String webappsFileName = filename + ".war"; - String autoloadWebappsFileName = "autoload" + File.separator + filename + ".war"; - if (!admI.isWarLoaded(webappsFileName) && !admI.isWarLoaded(autoloadWebappsFileName)) { - //if the file was in autoload, it was loaded - admI.addWar(webappsFileName); - } - - } catch (Exception e) { - throw new Exception("Cannot load War : " + e.getMessage()); - } - } - - /** - * Load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void useBeans(String filename) throws Exception { - try { - // Load bean in EJBServer if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) ictx.lookup(jonasName + "_Adm"); - } - if (!admI.isLoaded(filename + ".jar")) { - admI.addBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot load Bean : " + e.getMessage()); - } - } - - - /** - * Unload a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void unUseBeans(String filename) throws Exception { - try { - // Load bean in EJBServer if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) ictx.lookup(jonasName + "_Adm"); - } - if (admI.isLoaded(filename + ".jar")) { - admI.removeBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - - /** - * Call the main method of a specific class with empty args - * @param classToLoad name of class which contains the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad) throws Exception { - callMainMethod(classToLoad, new String[]{}); - } - - - /** - * Call the main method of a specific class and the specific args - * @param classToLoad name of class which contains the main method - * @param args args to give to the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad, String[] args) throws Exception { - //Build classloader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL[] urls = new URL[1]; - urls[0] = new File(System.getProperty("jonas.root") + File.separator + "examples" + File.separator + "classes").toURL(); - URLClassLoader loader = new URLClassLoader(urls); - Thread.currentThread().setContextClassLoader(loader); - Class clazz = loader.loadClass(classToLoad); - Class[] argList = new Class[] {args.getClass()}; - Method meth = clazz.getMethod("main", argList); - Object appli = meth.invoke(null, new Object[]{args}); - } - - - - - -} diff --git a/jonas_tests/build.properties b/jonas_tests/build.properties deleted file mode 100644 index 129b986a2b..0000000000 --- a/jonas_tests/build.properties +++ /dev/null @@ -1,52 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999 Bull S.A. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): Philippe Durieux -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Properties defined in this file could be customized - -# To use the jike compiler -#build.compiler jikes -build.compiler.emacs true - -# options for java compiler -opt.javac.debug on -opt.javac.optimize off - -# To use the jike compiler -#build.compiler jikes - -# -# genic args -#verbose=true - -# protocols for Carol (jrmp,iiop) -protocols.names=iiop,jrmp -# JOnAS version to be tested -jonas.version 5.3.0-M7-SNAPSHOT -# Webcontainer used -webcontainer.name=Tomcat6 -# examples base dir. -examples.base.dir=examples/base/examples diff --git a/jonas_tests/build.xml b/jonas_tests/build.xml deleted file mode 100755 index 8dbb1e5d85..0000000000 --- a/jonas_tests/build.xml +++ /dev/null @@ -1,517 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JOnAS Tests Java Documentation]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${environment.html} - - ${suiteslist.html} - <a name="conformance"></a><h2>JOnAS Junit Test Suite - conformance</h2> - ${conformance.html} - <a name="examples"></a><h2>JOnAS Junit Test Suite - examples</h2> - - ${examples.html} -<a name="webservices"></a><h2>JOnAS Junit Test Suite - webservices</h2> - - ${ws.html} - - - ${footer.html} - - - - - - - - - - - - - - - - - - - - - Proxy properties : ${proxy.properties.set} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Starting JOnAS - - - - - - - Waiting for JOnAS to activate - - - - - - Setup db environment for JOnAS example eb - - - - Starting JOnAS/Testsuite - - - - Stopping JOnAS - - - - - - - - - - - - - Run newjb for JOnAS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Run newjb for JOnAS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/build-client.xml b/jonas_tests/cluster/build-client.xml deleted file mode 100644 index f80f1f8006..0000000000 --- a/jonas_tests/cluster/build-client.xml +++ /dev/null @@ -1,607 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JONAS_BASE structure is not initialized properly. - Run ANT create_jonasbase before attempting to create a Win32 Service. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/build.properties b/jonas_tests/cluster/build.properties deleted file mode 100644 index e55eccf546..0000000000 --- a/jonas_tests/cluster/build.properties +++ /dev/null @@ -1,44 +0,0 @@ -#jonas start timeout. -jonas.start.timeout=40 -#jonas stop timeout. -jonas.stop.timeout=10 - -#time to wait for deployment of samplecluster2,3 on all the servers. -jonas.deploy.timeout=120 - -#The domain name. -cluster.domain.name=sampleClusterDomain - -# To use the jike compiler -#build.compiler jikes -build.compiler.emacs true - -# options for java compiler -opt.javac.debug on -opt.javac.optimize off - -# To use the jike compiler -#build.compiler jikes - -# -# genic args -#verbose=true - -# protocols for Carol (jrmp,iiop) -protocols.names=iiop,jrmp -# JOnAS version to be tested -jonas.version 5.2.0-M1-SNAPSHOT -# Webcontainer used -webcontainer.name=Tomcat6 - -myjonas.bases.path=test-cluster-bases -#repository.path=c:/home/jemuser/m2-repository -myjonas.root.path=test-cluster-root -# examples base dir. -#examples.base.dir=examples/base/examples - -jonas.version=5.2.0-M1-SNAPSHOT -#jonas.version=5.1.1-SNAPSHOT -junit.version=4.7 -xmlunit.version=1.3 -httpunit.version=1.5.4 diff --git a/jonas_tests/cluster/build.xml b/jonas_tests/cluster/build.xml deleted file mode 100644 index 2a096b7994..0000000000 --- a/jonas_tests/cluster/build.xml +++ /dev/null @@ -1,1180 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/AbsTestClient.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/AbsTestClient.java deleted file mode 100644 index ae52e88362..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/AbsTestClient.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; -import java.io.File; -import java.io.InputStream; -import java.util.Properties; - -import junit.framework.TestCase; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -/** - * @author eyindanga - * - */ -public abstract class AbsTestClient extends TestCase { - /** - * Logger. - */ - protected static final Log LOGGER = LogFactory.getLog(AbsTestClient.class); - - /** - * Number of simultaneous clients to be executed. - */ - protected int clientsNumber = 0; - /** - * The worker - */ - protected Worker worker = null; - - /** - * Check if invocation are terminated. - */ - protected Checker checker = null; - /** - * test properties. - */ - protected Properties testConfig = null; - - /** - * Name of the EJB version - */ - protected String ejbVersion = "ejb2"; - - /** - * Name of the EJB version - */ - protected long checkerSleepTime = 0; - - /** - * Name of the EJB version - */ - protected long workerSleepTime = 0; - /** - * Directory where the test outputs will be printed. - */ - protected String outputDir = null; - /** - * Domain name. - */ - protected String domainName; - /** - * Cluster root stringifiedurl. - */ - protected String clusterRoot; - - /** - * JOnAS root stringifiedurl. - */ - protected String jonasRoot; - /** - * Cluster configuration stringifiedurl. - */ - protected String clusterConfig; - - public AbsTestClient() { - super(); - } - - public AbsTestClient(String s) { - super(s); - } - protected void setUp() throws Exception { - - String propertiesFile = TestEnum.DEF_PROPERTIES_FILE.getPropertyName(); - String usrPropertiesFile = System.getProperty(TestEnum.PROPERTIES_FILE_KEY.getPropertyName()); - ejbVersion = System.getProperty(TestEnum.EJB_VERSION_KEY.getPropertyName()); - outputDir = System.getProperty(TestEnum.OUTPUT_FOLDER_KEY.getPropertyName()); - domainName = System.getProperty(TestEnum.DOMAIN_NAME_KEY.getPropertyName()); - clusterRoot = System.getProperty(TestEnum.CLUSTER_ROOT_KEY.getPropertyName()); - jonasRoot = System.getProperty(TestEnum.CLUSTER_JOnASROOT_KEY.getPropertyName()); - clusterConfig = System.getProperty(TestEnum.CLUSTER_CONFIG_KEY.getPropertyName()); - try { - testConfig = new Properties(); - if(usrPropertiesFile != null) { - //initializes default properties - propertiesFile = usrPropertiesFile; - } - //load the properties. - InputStream in = null; - File f = new File(propertiesFile); - if (f.exists()) { - try { - in = f.getCanonicalFile().toURL().openStream(); - } catch (Exception e) { - // TODO: handle exception - } - } - if (in == null) { - in = Thread.currentThread().getContextClassLoader().getResourceAsStream(f.toString()); - } - if (in == null) { - in = getClass().getClassLoader().getResourceAsStream(f.toString()); - } - if (in == null) { - in = getClass().getClassLoader().getResourceAsStream( - TestEnum.DEF_PROPERTIES_FILE.getPropertyName()); - } - //FileInputStream in = new FileInputStream(propertiesFile); - testConfig.load(in); - in.close(); - String value = testConfig.getProperty(TestEnum.CLIENT_NUMBER_KEY.getPropertyName()); - clientsNumber = Integer.parseInt(value); - LOGGER.debug("Number of clients to be launched : " + clientsNumber); - //get sleep time for checkers and workers. - - value = testConfig.getProperty(TestEnum.CKECKER_SLEEP_TIME_KEY.getPropertyName()); - checkerSleepTime = Long.parseLong(value); - value = testConfig.getProperty(TestEnum.WORKER_SLEEP_TIME_KEY.getPropertyName()); - workerSleepTime = Long.parseLong(value); - worker = new Worker(); - checker = new Checker(checkerSleepTime); - checker.setWorker(worker); - } catch (Exception e) { - LOGGER.error("Exception on setup of {0}, {1}", ejbVersion, e); - // TODO: handle exception - } - LOGGER.debug("Successfully set up client tests for {0}", ejbVersion); - } - -} - diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Checker.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Checker.java deleted file mode 100644 index ad80ff80e0..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Checker.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -import java.util.Iterator; -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; -public class Checker extends Thread { - /** - * Logger. - */ - protected static final Log LOGGER = LogFactory.getLog(Checker.class); - /** - * Sleep for 10 seconds - */ - private long time2sleep = 10000; - /** - * the worker. - */ - private Worker worker = null; - /** - * Stop this thread if true - */ - private boolean stop = false; - - public Checker() { - super(); - // TODO Auto-generated constructor stub - } - /** - * Contructor using fields. - * @param time2sleep - * @param worker - */ - public Checker(long time2sleep) { - super(); - this.time2sleep = time2sleep; - } - - @Override - public void run() { - LOGGER.info("Running the checker"); - while(!stop) { - try { - LOGGER.debug("Do not stop the checker ....."); - boolean breakLoop = true; - for (Iterator iterator = worker.getTasks().iterator(); iterator - .hasNext();) { - RunnableTask task = (RunnableTask) iterator.next(); - LOGGER.debug("Is the task :{0} terminated ? {1}", task.getName(), task.isTerminated()); - breakLoop = (breakLoop && task.isTerminated()); - } - stop = breakLoop; - LOGGER.debug("Stop the checker ? {0}", stop); - if(!stop) { - LOGGER.debug("Sleeping for :{0} ", time2sleep); - Thread.currentThread().sleep(time2sleep); - } - } catch (InterruptedException e) { - stop = true; - } - } - } - /** - * Set the worker. - * @param worker - */ - public void setWorker(final Worker worker) { - this.worker = worker; - } - /** - * Set the time to sleep. - * @param time2sleep - */ - public void setTime2Sleep(long time2sleep) { - this.time2sleep = time2sleep; - } - /** - * True if the worker is stopped. - * @return true if the worker is stopped. - */ - public boolean stopped() { - return stop; - } - -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/ClientTask.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/ClientTask.java deleted file mode 100644 index ff2f7bae22..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/ClientTask.java +++ /dev/null @@ -1,139 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; - -import org.ow2.util.log.Log; -import org.ow2.util.log.LogFactory; - -public class ClientTask implements RunnableTask { - /** - * Logger. - */ - protected static final Log LOGGER = LogFactory.getLog(ClientTask.class); - /** - * Any exception thrown on task execution. - */ - protected Exception exception = null; - /** - * Name of the task. - */ - protected String name = null; - /** - * The class to run - */ - private String class2Run = null; - /** - * True if the task is terminated - */ - protected boolean terminated = false; - - /** - * Arguments. - */ - ArrayList args = new ArrayList(); - /** - * return exception thrown on execution. - */ - public Exception getException() { - return exception; - } - /** - * default constructor. - */ - public ClientTask () { - - } - - /** - * Constructor using fields. - */ - public ClientTask(final String name, final String class2run, final String[] vargs) { - this.name = name; - if (vargs != null) { - args.addAll(Arrays.asList(vargs)); - } - this.class2Run = class2run; - } - /** - * Get the name. - */ - public String getName() { - return name; - } - /** - * Return true if the task has ended. - */ - public boolean isTerminated() { - return terminated; - } - - public void setName(final String name) { - this.name = name; - - } - - public void stop() { - Thread.currentThread().interrupt(); - } - /** - * Executes this task. - */ - public void run() { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - Class clazz; - try { - //create the output. - clazz = loader.loadClass(class2Run); - LOGGER.info("Invoking {0} with args: {1}", class2Run, args); - String[] ar = {}; - Class[] argList = new Class[] {ar.getClass()}; - Method meth = clazz.getMethod("main", argList); - meth.invoke(null, new Object[] {args.toArray(new String[args.size()])}); - } catch (Exception e) { - //Consider the task is terminated. - terminated = true; - exception = e; - LOGGER.info("Running {0}, {1} terminated with Exception {2} ", name, class2Run, e); - return; - } - LOGGER.info("Running {0}, {1} terminated.", name, class2Run); - terminated = true; - } - /** - * Additional arguments. - * @param args the arguments. - */ - public void addArguments(final String[] vargs) { - if (vargs != null) { - args.addAll(Arrays.asList(vargs)); - } - - } - -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/JOnASTask.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/JOnASTask.java deleted file mode 100644 index b68a942df6..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/JOnASTask.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import javax.management.InstanceNotFoundException; -import javax.management.MBeanException; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.ReflectionException; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; - -public class JOnASTask { - /** - * Output to be used. - */ - protected PrintStream out = null; - /** - * the name of the client. - */ - protected String clientName = "JOnAS Client for cluster-javaee5"; - - /** - * Time to sleep each 10 iterations. - */ - protected long time2sleep = TIME2SLEEP; - - /** - * The configuration file - */ - String clusterConfigFile; - - /** - * The cluster root. - */ - String clusterRoot = null; - - /** - * The JOnAS root. - */ - String jonasRoot = null; - - /** - * Cluster foncfiguration. - */ - private Properties clusterConfig; - /** - * Domain name. - */ - private String domainName = "sampleClusterDomain"; - - List jmxPorts = null; - - /** - * Default time to sleep. - */ - private static final long TIME2SLEEP = 10000; - - public JOnASTask() { - - } - - public JOnASTask(final String[] args) throws Exception { - out = System.out; - clusterConfig = new Properties(); - String url = null; - if(args != null && args.length != 0) { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - if("-out".equals(arg)) { - url = args[++argn]; - if (url != null) { - initOut(url); - } - continue; - }else if ("-clientName".equals(arg)) { - clientName = args[++argn]; - out.println("Client name set to : " + clientName); - continue; - }else if ("-time2sleep".equals(arg)) { - String time = args[++argn]; - try { - time2sleep = Long.parseLong(time); - } catch (NumberFormatException e) { - time2sleep = TIME2SLEEP; - } - out.println("Time to sleep set to : " + time2sleep); - continue; - }else if ("-clusterConfig".equals(arg)) { - clusterConfigFile = args[++argn]; - out.println("Cluster configuration file set to : " + clusterConfigFile); - continue; - }else if ("-clusterRoot".equals(arg)) { - clusterRoot = args[++argn]; - out.println("Cluster root set to : " + clusterRoot); - continue; - }else if ("-jonasRoot".equals(arg)) { - jonasRoot = args[++argn]; - out.println("JOnAS root set to : " + jonasRoot); - continue; - }else if ("-domainName".equals(arg)) { - domainName = args[++argn]; - out.println("Domain name root set to : " + clusterRoot); - continue; - } - } - } - if (clusterConfigFile != null) { - initClusterConfig(clusterConfigFile); - } - } - - private void initClusterConfig(final String clusterConfigFile) throws Exception { - InputStream in = null; - File f = new File(clusterConfigFile); - if (f.exists()) { - try { - in = f.getCanonicalFile().toURL().openStream(); - } catch (Exception e) { - // TODO: handle exception - } - } - if (in == null) { - in = Thread.currentThread().getContextClassLoader().getResourceAsStream(f.toString()); - } - if (in == null) { - in = getClass().getClassLoader().getResourceAsStream(f.toString()); - } - if (in == null) { - in = getClass().getClassLoader().getResourceAsStream( - TestEnum.DEF_PROPERTIES_FILE.getPropertyName()); - } - //load the properties. - clusterConfig.load(in); - getJmxPorts(); - in.close(); - - } - private void getJmxPorts() { - // TODO Auto-generated method stub - String ports = clusterConfig.getProperty(TestEnum.JMX_PORTRANGE_KEY.getPropertyName()); - jmxPorts = new ArrayList(); - while(ports != null) { - String port = ports.substring(0, ports.indexOf(",")); - jmxPorts.add(port); - ports = ports.substring(ports.indexOf(",") + 1); - } - - } - - /** - * Runs the client. - * @return 0 if ok, -1 otherwise. - * @throws Exception any. - */ - private int run() throws Exception { - Thread.currentThread().sleep(time2sleep); - execute("stop", 3, null, null); - Thread.currentThread().sleep(time2sleep); - execute("start", 3, null, null); - return 0; - } - private void execute(String operation, int i, Object[] params, String[] signature) - throws IOException, InstanceNotFoundException, MBeanException, ReflectionException { - String jbPrefix = clusterConfig.getProperty(TestEnum.CLUSTER_DEFPREFIX_KEY.getPropertyName()); - String nodeName = jbPrefix + i; - String serviceURL = "service:jmx:rmi://localhost/jndi/rmi://localhost:" - + jmxPorts.get(i - 1) + "/jrmpconnector_" + nodeName; - JMXServiceURL url = new JMXServiceURL(serviceURL); - JMXConnector connector = JMXConnectorFactory.connect(url); - MBeanServerConnection mbeanSrv = connector.getMBeanServerConnection(); - mbeanSrv.invoke(J2EEServer(domainName, nodeName), operation, params, signature); - } - - /** - * Initializes client output. - * @param url Stringified url of the client output file. - */ - private void initOut(final String url) throws Exception { - try { - FileOutputStream file = new FileOutputStream(url, true); - out.println("Initializing output '" + url + "' for " + clientName); - out = new PrintStream(file, true); - } catch (Exception e) { - out.println("Unable to initialize output for " + clientName + " because : " + e); - throw new Exception("Unable to initialize output for " + clientName, e); - } - } - /** - * Main method. - * @param args the arguments - * @return 0 if ok, -1 otherwise. - * @throws Exception - */ - public static int main(String[] args) throws Exception { - JOnASTask jtask = new JOnASTask(args); - return jtask.run(); - } - - /** - * Create ObjectName for a J2EEServer MBean. - * @param pDomain domain name - * @param pServer server name - * @return the created ObjectName - */ - public static ObjectName J2EEServer(final String pDomain, final String pServer) { - try { - StringBuffer sb = new StringBuffer(pDomain); - sb.append(":j2eeType=J2EEServer"); - sb.append(",name="); - sb.append(pServer); - return new ObjectName(sb.toString()); - } catch (javax.management.MalformedObjectNameException e) { - // this should never occur - return null; - } - } - - -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/RunnableTask.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/RunnableTask.java deleted file mode 100644 index 10693f422e..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/RunnableTask.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -public interface RunnableTask extends Runnable { - /** - * Stops the task. - * @throws Exception - */ - public void stop(); - /** - * Set the name of the task. - * @param name the name to set. - */ - public void setName(String name); - /** - * Get the name of the task - * @return - */ - public String getName(); - /** - * True if the task has ended. - * @return true if the task has ended. - */ - public boolean isTerminated(); - - /** - * Returns any exception thrown on task execution. - * @return any exception thrown on task execution. - */ - public Exception getException(); -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/TestEnum.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/TestEnum.java deleted file mode 100644 index 67788e9ed1..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/TestEnum.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -public enum TestEnum { - /** - * Key for sleeping time of a checker - */ - CKECKER_SLEEP_TIME_KEY("checker.sleep.time"), - /** - * Key for sleeping time of a worker - */ - WORKER_SLEEP_TIME_KEY("worker.sleep.time"), - /** - * Key for properties file. - */ - PROPERTIES_FILE_KEY("test.properties.file"), - /** - * Key for cluster properties file. - */ - CLUSTER_PROPERTIES_FILE_KEY("cluster.properties.file"), - /** - * Default properties file. - */ - DEF_PROPERTIES_FILE("defConf.properties"), - - /** - * Key for sleeping time of a worker - */ - EJB_VERSION_KEY("ejb.version"), - - /** - * Key for sleeping time of a worker - */ - PROVIDER_URL_KEY("cmiclient.provider.url"), - - /** - * Key for sleeping time of a worker - */ - TEST_CMIURL_KEY("cmi.config.url"), - - /** - * Key for sleeping time of a worker - */ - CMI_URL_KEY("cmi.conf.url"), - - /** - * Key for output folder. - */ - OUTPUT_FOLDER_KEY("testejb.output.dir"), - /** - * key for sleeping time of a worker - */ - CLIENT_NUMBER_KEY("clients.number"), - - /** - * key for cluster root. - */ - CLUSTER_ROOT_KEY("cluster.root"), - - /** - * key for cluster root. - */ - CLUSTER_JOnASROOT_KEY("cluster.jonas.root"), - - /** - * key for cluster configuration. - */ - CLUSTER_CONFIG_KEY("cluster.config"), - - /** - * key for domain name. - */ - DOMAIN_NAME_KEY("domain.name"), - - /** - * Default properties file. - */ - DEF_NEWJC_FILE("build-jc.properties"), - /** - * key for default prefix of cluster instances. - */ - JMX_PORTRANGE_KEY("carol.portrange"), - /** - * key for default prefix of cluster instances. - */ - CLUSTER_DEFPREFIX_KEY("jonas.base.defaultprefix"); - - /** - * A name of property. - */ - private final String propertyName; - - private TestEnum(final String propertyName) { - this.propertyName = propertyName; - } - - /** - * @return the name of property - */ - @Override - public String toString() { - return propertyName; - } - - /** - * @return the name of property - */ - public String getPropertyName() { - return propertyName; - } -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Worker.java b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Worker.java deleted file mode 100644 index 4028fe0012..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/Worker.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.common; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -public class Worker implements Runnable { - /** - * Tasks. - */ - List tasks = new ArrayList(); - /** - * Tasks failures - */ - Map tasksFailures = new HashMap(); - public void run() { - // TODO Auto-generated method stub - for (Iterator iterator = tasks.iterator(); iterator.hasNext();) { - RunnableTask task = iterator.next(); - Thread thr = new Thread(null, task, task.getName()); - thr.start(); - } - } - /** - * Add a task. - * @param task - */ - public void addTask(final RunnableTask task) { - tasks.add(task); - } - /** - * Get the tasks. - * @return - */ - public List getTasks() { - return tasks; - } - /** - * Retunr tru if any task failed. - * @return - */ - public boolean hasFailure() { - Exception e = null; - for (Iterator iterator = tasks.iterator(); iterator.hasNext();) { - RunnableTask task = iterator.next(); - e = task.getException(); - if(e != null) { - tasksFailures.put(task.getName(), e); - } - } - return !tasksFailures.isEmpty(); - } - /** - * Clear the worker - */ - public void clear() { - tasks.clear(); - tasksFailures.clear(); - } - - /** - * Gets failure per tasks - */ - public Map getTasksFailures() { - return tasksFailures; - } - -} diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/build-jc.properties b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/build-jc.properties deleted file mode 100644 index e318642a28..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/build-jc.properties +++ /dev/null @@ -1,161 +0,0 @@ -# Prefix for JONAS_BASE directories -jonas.base.defaultprefix=jb - -#Drivers directory -drivers.dir=jc.config/lib - -#Cluster architecture : -# bothWebEjb : both web and ejb services and each instance -# diffWebEjb : dedicates instances to web level and separated instances to ejb level -cluster.architecture.default=diffWebEjb - -#Cluster architecture : -# nodes name : prefix of the node names -cluster.nodesName=node - -#Cluster daemon configuration -cluster.daemon.name=cd -cluster.daemon.protocol=jrmp -cluster.daemon.port=1806 -cluster.daemon.dir=cd -#enable this to set JAVA_HOME of the cluster daemon -#cluster.daemon.jdk=/usr/java/jdk/sun/current-1.5 -cluster.daemon.interactionMode=loosely-coupled -cluster.daemon.autoBoot=false -cluster.daemon.xprm=-Djava.net.preferIPv4Stack=true - -#Services -jonas.web.services=registry,jmx,jtm,security,cmi,jaxrpc,web,ear,depmonitor,discovery -jonas.ejb.services=registry,jmx,jtm,db,security,resource,cmi,ha,ejb2,ejb3,ear,depmonitor,discovery -jonas.full.services=registry,jmx,jtm,db,security,resource,cmi,ha,ejb2,ejb3,jaxrpc,jaxws,web,ear,depmonitor,discovery - -#Jms -jms.portrange=16010,16020,16030,16040 -jms.topics=sampleTopic,InvoiceTopic -jms.queues=sampleQueue,OrderApprovalQueue,OrdersQueue,MailCompletedOrderQueue,SupPurchaseOrderQueue,MailOrderApprovalQueue,MailQueue - -#Carol -carol.portrange=2002,2022,2032,2043 -carol.defaultprotocol=jrmp -carol.jrmpopt=false - -# Cmi service -cmi.mcastaddr=224.0.0.35 -cmi.mcastport=35467 - -# Ha service -ha.mcastaddr=224.0.0.36 -ha.mcastport=35468 - -#Web -webcontainer.httpportrange=9000,9200,9300,9400 -webcontainer.ajpportrange=9010,9011,9012,9013 -webcontainer.stickysession=false -webcontainer.mod_jkenabled=true -webcontainer.mod_jk.dir=conf/jk -webcontainer.mod_jk.lbfactorrange=1,1,1,1 -webcontainer.directorenabled=false -webcontainer.directorportrange=9996,9997,9998,9999 -webcontainer.director.lbfactorrange=1,1,1,1 -webcontainer.director.dir=director -webcontainer.cluster.name=myTomcatCluster -webcontainer.cluster.mcastaddr=228.0.0.4 -webcontainer.cluster.mcastport=45564 -webcontainer.cluster.listenportrange=4003,4004,4005,4006 -# Enable ondemand on web instances -webinstances.ondemandenabled=true -webinstances.ondemand.redirectport=0 - -#disable development mode on web instances. -webinstances.devmodeenabled=false -#enable development mode for depmonitor on ejb instances. -webinstances.depmonitor.devmodeenabled=true - -#Tomcat -webcontainer.service.defaultname=tomcat - -#disable ondemand on ejb instances -ejbinstances.ondemandenabled=false -#disable development mode on ejb instances. -ejbinstances.devmodeenabled=false -#enable development mode for depmonitor on ejb instances. -ejbinstances.depmonitor.devmodeenabled=true - -#Director -director.lib.jarfile=tomcat5.5-director.jar - -#Discovery service -discovery.sourceportrange=-1,-1,-1,-1 -discovery.greetingportrange=9899,9900,9901,9902 -discovery.mcastaddr=224.224.224.224 -discovery.mcastport=9080 -discovery.domainName=sampleClusterDomain -discovery.domainDesc=A domain for management of cluster examples. -discovery.clusterName=mycluster -discovery.clusterDesc=A cluster sample. -# specify here the node number that will be the master. By default, the feature -# is supported by a dedicated node but the file is generated in the first cluster -# member. Then it will copy to the master conf dir -discovery.masternode=1 - -#Master node when the feature is shipped by a dedicated node (default) -master.dir=master -master.nodeName=master - -#Db -db.portrange=9001,9002,9003,9004 -db.dir=db -db.nodeName=db - - -#Database -rajdbc.defaultname=hsql - -#DB connections - -rajdbc.hsql.user=jonas -rajdbc.hsql.password=jonas -rajdbc.hsql.url=jdbc:hsqldb:hsql://localhost:9005/db_jonas -rajdbc.hsql.drivername=org.hsqldb.jdbcDriver -rajdbc.hsql.jndiname=jdbc_1 -rajdbc.hsql.jdbcdriverjarfile=none -rajdbc.hsql.mappername=rdb.hsql - -rajdbc.postgresql.user=jonas -rajdbc.postgresql.password=jonas -rajdbc.postgresql.url=jdbc:postgresql://localhost:5433/db_jonas -rajdbc.postgresql.drivername=org.postgresql.Driver -rajdbc.postgresql.jndiname=jdbc_1 -rajdbc.postgresql.jdbcdriverjarfile=postgresql.jar -rajdbc.postgresql.mappername=rdb.postgresql - -rajdbc.oracle.user=jonas -rajdbc.oracle.password=jonas -rajdbc.oracle.url=jdbc:oracle:thin:@localhost:1521:db_jonas -rajdbc.oracle.drivername=oracle.jdbc.driver.OracleDriver -rajdbc.oracle.jndiname=jdbc_1 -rajdbc.oracle.jdbcdriverjarfile=ojdbc5.jar -rajdbc.oracle.mappername=rdb.oracle - -rajdbc.mysql.user=root -rajdbc.mysql.password= -rajdbc.mysql.url=jdbc:mysql:http://localhost:3306/db_jonas -rajdbc.mysql.drivername=org.gjt.mm.mysql.Driver -rajdbc.mysql.jndiname=jdbc_1 -rajdbc.mysql.jdbcdriverjarfile=mysql-connector-java.jar -rajdbc.mysql.mappername=rdb.mysql - - -#Mail -mail.session.name=mailSession_1 -mail.mimepartds.name=mailMimePartDS_1 -mail.to=jean.dupont@ow2.org -mail.subject=test mail -mail.host=localhost - -#Wsdl -wsdl.file.name=wsdlPublishFile -wsdl.file.dir=/tmp/ - -# script -script.node.basename=node diff --git a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/defConf.properties b/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/defConf.properties deleted file mode 100644 index c0165582a9..0000000000 --- a/jonas_tests/cluster/commons/src/org/ow2/jonas/cluster/test/common/defConf.properties +++ /dev/null @@ -1,6 +0,0 @@ -#The checker sleeps for 15 seconds. -checker.sleep.time=15000 -#The checker sleeps for 15 seconds. -worker.sleep.time=15000 -# number of clients to be launched simultaneously -clients.number=5 \ No newline at end of file diff --git a/jonas_tests/cluster/etc/footer.html b/jonas_tests/cluster/etc/footer.html deleted file mode 100644 index b605728ee2..0000000000 --- a/jonas_tests/cluster/etc/footer.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/jonas_tests/cluster/etc/header.html b/jonas_tests/cluster/etc/header.html deleted file mode 100644 index 0331814e2b..0000000000 --- a/jonas_tests/cluster/etc/header.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - @title@ - - - - -

    JOnAS Junit Test Report : @subtitle@

    diff --git a/jonas_tests/cluster/etc/style/environment/junit-noframes.xsl b/jonas_tests/cluster/etc/style/environment/junit-noframes.xsl deleted file mode 100644 index 9601aad1fb..0000000000 --- a/jonas_tests/cluster/etc/style/environment/junit-noframes.xsl +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -

    Environment

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    JOnAS Version
    Packaging
    JONAS_ROOT
    JONAS_BASE
    Version JDK
    Version ANT
    Protocol
    DataSource
    System
    Host
    Author
    Date
    - -
    - - - -
    - diff --git a/jonas_tests/cluster/etc/style/include/junit-noframes.xsl b/jonas_tests/cluster/etc/style/include/junit-noframes.xsl deleted file mode 100644 index 3b5448781b..0000000000 --- a/jonas_tests/cluster/etc/style/include/junit-noframes.xsl +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - -
    - - -
    - - - -
    - - - - -
    - - - - - - - -

    Packages

    - Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    - - - -
    -
    - - - - - - - - - - - - -

    Package

    - - - - - - -
    - Back to top -

    -

    - - - - - - - - -

    TestCase

    - - - - - - - - - - -
    -

    - - Back to top - - - - -

    Summary

    - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    TestsFailuresErrorsSuccess rateTime
    - - - - - - - -
    - - - - -
    - Note: failures are anticipated and checked for with assertions while errors are unanticipated. -
    -
    - - - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Testcase - Test - Status - Type - Time(s) - - - - - - - - - - - Failure - Error - - - - - - - - - - - - - - - - - - - - - Error - - - - - - - - - Failure - - - - Error - - - - Success - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - - - - - - - - - - - - -
    - diff --git a/jonas_tests/cluster/etc/style/standalone/junit-noframes.xsl b/jonas_tests/cluster/etc/style/standalone/junit-noframes.xsl deleted file mode 100644 index 652120da25..0000000000 --- a/jonas_tests/cluster/etc/style/standalone/junit-noframes.xsl +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - - Test Results - - - - - - - - - - - -
    - - -
    - - - -
    - - - - - - -
    - - - - - - - - - -

    Environment

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    JOnAS Version
    Packaging
    JONAS_ROOT
    JONAS_BASE
    Version JDK
    Version ANT
    Protocol
    DataSource
    System
    Host
    Author
    Date
    - -
    - - - - - - - - - -

    Packages

    - Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    - - - -
    -
    - - - - - - - - - - - - -

    Package

    - - - - - - -
    - Back to top -

    -

    - - - - - - - - -

    TestCase

    - - - - - - - - - - -
    -

    - - Back to top - - - - -

    Summary

    - - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    TestsFailuresErrorsSuccess rateTime
    - - - - - - - -
    - - - - -
    - Note: failures are anticipated and checked for with assertions while errors are unanticipated. -
    -
    - - - - -

    -
    - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Testcase - Test - Status - Type - Time(s) - - - - - - - - - - - Failure - Error - - - - - - - - - - - - - - - - - - - - Error - - - - - - - - - Failure - - - - Error - - - - Success - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - - - - - - - - - - - - -
    - diff --git a/jonas_tests/cluster/etc/style/standalone_perfs/compare.xsl b/jonas_tests/cluster/etc/style/standalone_perfs/compare.xsl deleted file mode 100644 index 539b67712b..0000000000 --- a/jonas_tests/cluster/etc/style/standalone_perfs/compare.xsl +++ /dev/null @@ -1,559 +0,0 @@ - - - - - - - - - - Test Results - - - - - - - - - - - -
    - - -
    - - - -
    - - - - - - -
    - - - - - - - - - -

    Environment

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    JOnAS Version
    Packaging
    Version JDK
    Version ANT
    DataSource
    System
    Arch
    Version
    Host
    Author
    Date
    - -
    - - - - - - - - - -

    Packages

    - Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    -
    - - - - - - - - - - - - -

    Package

    - - - - - - -
    - Back to top -

    -

    - - - - - - - - -

    TestCase

    - - - - - - - - - - -
    -

    - - Back to top - - - - -

    Summary

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    TestsSuccess rateTime jrmpTime iiop
    - - - - - - - - - - - - - -
    -
    - - - - -

    -
    - - - - Name - Tests - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - Name - Tests - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - Name - - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - diff --git a/jonas_tests/cluster/etc/style/standalone_perfs/junit-noframes.xsl b/jonas_tests/cluster/etc/style/standalone_perfs/junit-noframes.xsl deleted file mode 100644 index da817e033c..0000000000 --- a/jonas_tests/cluster/etc/style/standalone_perfs/junit-noframes.xsl +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - Test Results - - - - - - - - - - - -
    - - -
    - - - -
    - - - - - - -
    - - - - - - - - - -

    Environment

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    JOnAS Version
    Packaging
    JONAS_ROOT
    JONAS_BASE
    Version JDK
    Version ANT
    Protocol
    DataSource
    System
    Host
    Author
    Date
    - -
    - - - - - - - - - -

    Packages

    - Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    - - - -
    -
    - - - - - - - - - - - - -

    Package

    - - - - - - -
    - Back to top -

    -

    - - - - - - - - -

    TestCase

    - - - - - - - - - - -
    -

    - - Back to top - - - - -

    Summary

    - - - - - - - - - - - - - - - - - - Failure - Error - - - - - - - - - -
    TestsFailuresErrorsSuccess rateTime
    - - - - - - - -
    - - - - -
    - Note: failures are anticipated and checked for with assertions while errors are unanticipated. -
    -
    - - - - -

    -
    - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Name - Tests - Errors - Failures - Time(s) - - - - - - - Testcase - Test - Status - Type - Time(s) - - - - - - - - - - - Failure - Error - - - - - - - - - - - - - - - - - - - - Error - - - - - - - - Failure - - - - Error - - - - Success - - - - - - - - - - - - - - - - - - - - - - - - N/A - - - - - - - - - - - - - - - - -
    - diff --git a/jonas_tests/cluster/etc/suiteslist.html b/jonas_tests/cluster/etc/suiteslist.html deleted file mode 100644 index 9bf624aea5..0000000000 --- a/jonas_tests/cluster/etc/suiteslist.html +++ /dev/null @@ -1,18 +0,0 @@ -

    All Suites

    - - - - - - - - - - - - - - - - -
    Name
    JOnAS Junit Test Suite - conformance
    JOnAS Junit Test Suite - examples
    JOnAS Junit Test Suite - webservices
    diff --git a/jonas_tests/cluster/logging/logging.properties b/jonas_tests/cluster/logging/logging.properties deleted file mode 100644 index 24b08f8eb9..0000000000 --- a/jonas_tests/cluster/logging/logging.properties +++ /dev/null @@ -1,80 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 2010 Bull S.A.S. -# Contact: jonas-team@ow2.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - - -############################################################ -# Default Logging Configuration File -# -# You can use a different file by specifying a filename -# with the java.util.logging.config.file system property. -# For example java -Djava.util.logging.config.file=myfile -############################################################ - -############################################################ -# Global properties -############################################################ - -# "handlers" specifies a comma separated list of log Handler -# classes. These handlers will be installed during VM startup. -# Note that these classes must be on the system classpath. -# By default we only configure a ConsoleHandler, which will only -# show messages at the INFO and above levels. -handlers= java.util.logging.ConsoleHandler - -# To also add the FileHandler, use the following line instead. -#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler - -# Default global logging level. -# This specifies which kinds of events are logged across -# all loggers. For any given facility this global level -# can be overriden by a facility specific level -# Note that the ConsoleHandler also has a separate level -# setting to limit messages printed to the console. -.level= INFO - -############################################################ -# Handler specific properties. -# Describes specific configuration info for Handlers. -############################################################ - -# default file output is in user's home directory. -java.util.logging.FileHandler.pattern = %h/java%u.log -java.util.logging.FileHandler.limit = 50000 -java.util.logging.FileHandler.count = 1 -java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter - -# Limit the message that are printed on the console to INFO and above. -java.util.logging.ConsoleHandler.level = INFO -java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter - - -############################################################ -# Facility specific properties. -# Provides extra control for each logger. -############################################################ - -# For example, set the com.xyz.foo logger to only log SEVERE -# messages: -org.ow2.cmi.controller.client.level=FINEST diff --git a/jonas_tests/cluster/resources/cmi-client.xml b/jonas_tests/cluster/resources/cmi-client.xml deleted file mode 100644 index 6a538fcea4..0000000000 --- a/jonas_tests/cluster/resources/cmi-client.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - rmi://localhost:2032 - rmi://localhost:2043 - - - - - - \ No newline at end of file diff --git a/jonas_tests/cluster/resources/test-config.properties b/jonas_tests/cluster/resources/test-config.properties deleted file mode 100644 index 8bfd99f77e..0000000000 --- a/jonas_tests/cluster/resources/test-config.properties +++ /dev/null @@ -1,6 +0,0 @@ -#The checker sleeps for 10 seconds. -checker.sleep.time=10000 -#The checker sleeps for 10 seconds. -worker.sleep.time=10000 -# number of clients to be launched simultaneously -clients.number=1 \ No newline at end of file diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/ClientTest.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/ClientTest.java deleted file mode 100644 index 47351d94f0..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/ClientTest.java +++ /dev/null @@ -1,193 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.j2ee14; - -import java.io.File; -import java.util.ArrayList; - -import junit.framework.TestSuite; - -import org.ow2.jonas.cluster.test.common.AbsTestClient; -import org.ow2.jonas.cluster.test.common.ClientTask; -import org.ow2.jonas.cluster.test.common.RunnableTask; -import org.ow2.jonas.cluster.test.common.Worker; -/** - * - * @author Nicolas Duvauchel - * - */ -public class ClientTest extends AbsTestClient { - - /** - * The worker - */ - protected static Worker jworker = null; - - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - public static TestSuite suite() { - return new TestSuite(ClientTest.class); - } - - public ClientTest(String s) { - super(s); - } - - protected void setUp() throws Exception { - super.setUp(); -// if (jworker == null) { -// jworker = new Worker(); -// ArrayList arg = new ArrayList(); -// arg.add("-out"); -// arg.add(outputDir + File.separator + "cluster-j2ee14.jonasTask.txt"); -// arg.add("-clientName"); -// arg.add("cluster-j2ee14.jonasTask"); -// arg.add("-clusterConfig"); -// arg.add(clusterConfig); -// arg.add("-clusterRoot"); -// arg.add(clusterRoot); -// arg.add("-jonasRoot"); -// arg.add(jonasRoot); -// arg.add("-domainName"); -// arg.add(domainName); -// RunnableTask task = new ClientTask("cluster-j2ee14.jonasTask", "org.ow2.jonas.cluster.test.common.JOnASTask", arg.toArray(new String[arg.size()])); -// jworker.addTask(task); -// jworker.run(); -// } - } - - public void testLBHome() throws Exception { - LOGGER.info("cluster-j2ee14.testLBHome "); - RunnableTask task = null; - - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-j2ee14.testLBHome_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-j2ee14.testLBHome_" + i + ".txt"); - task = new ClientTask("cluster-j2ee14.testLBHome_" + i, - "org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBHome", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on testLBHome" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-j2ee14.testLBHome is ok"); - } - - public void testFOSFSB() throws Exception { - LOGGER.info("cluster-j2ee14.testFOSFSB"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-j2ee14.testFOSFSB_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-j2ee14.testFOSFSB_" + i + ".txt"); - task = new ClientTask("cluster-j2ee14.testFOSFSB_" + i, - "org.ow2.jonas.examples.cluster.j2ee14.client.ClientFOSFSB", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on cluster-j2ee14.testFOSFSB" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-j2ee14.testFOSFSB is ok"); - } - - public void testLBLookup() throws Exception { - LOGGER.info("cluster-j2ee14.testLBLookup"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-j2ee14.testLBLookup_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-j2ee14.testLBLookup_" + i + ".txt"); - task = new ClientTask("cluster-j2ee14.testLBLookup_" + i, - "org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBLookup", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on cluster-j2ee14.testLBLookup" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-j2ee14.testLBLookup is ok"); - } - - public void testLBRemote() throws Exception { - LOGGER.info("cluster-j2ee14.testLBRemote"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-j2ee14.testLBRemote_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-j2ee14.testLBRemote_" + i + ".txt"); - task = new ClientTask("cluster-j2ee14.testLBRemote_" + i, - "org.ow2.jonas.examples.cluster.j2ee14.client.ClientLBRemote", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on cluster-j2ee14.testLBRemote" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-j2ee14.testLBRemote is ok"); - } - -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/SampleCluster2Test.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/SampleCluster2Test.java deleted file mode 100644 index 9f8659da7f..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/j2ee14/SampleCluster2Test.java +++ /dev/null @@ -1,181 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.j2ee14; - -import java.io.IOException; -import java.net.MalformedURLException; - -import org.xml.sax.SAXException; - -import com.meterware.httpunit.GetMethodWebRequest; -import com.meterware.httpunit.WebConversation; -import com.meterware.httpunit.WebRequest; -import com.meterware.httpunit.WebResponse; - -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * the aim of this class is to check the different calls made in sampleCluster2 - * example. - * @author Nicolas Duvauchel - */ -public class SampleCluster2Test extends TestCase { - - /** - * the link with the web page - */ - private static WebConversation conversation = null; - /** - * default HTTP ports. - */ - private static final String[] default_http_ports = {"9000", "9200"}; - /** - * @param args - */ - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - /** - * @return the test suite - */ - public static TestSuite suite() { - return new TestSuite(SampleCluster2Test.class); - } - - /** - * @param s - */ - public SampleCluster2Test(String s) { - super(s); - } - - /** - * set up parameters for the tests - */ - protected void setUp() throws Exception { - try { - if (conversation == null) { - System.out.println("setting up conversation."); - conversation = new WebConversation(); - } - } catch (Exception e) { - fail("Unable to set up web tests " + e); - } - - } - - /** - * test if the page is accessible - * @throws Exception - */ - public void testReachable() throws Exception { - - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster2"); - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Reachable: " + e); - } - - } - - /** - * test and create a session - * @throws Exception - */ - public void testSession() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster2/servlet/session"); - - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Session: " + e); - } - } - - /** - * test and check the session - * @throws Exception - */ - public void testCheck() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster2/servlet/check"); - - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Check: " + e); - } - } - - /** - * test and release the session - * @throws Exception - */ - public void testRelease() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster2/servlet/release"); - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Release: " + e); - } - } - - /** - * test the exception - * @throws Exception - */ -// public void testException() throws Exception { -// try { -// for (String port: default_http_ports) { -// WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster2/servlet/exception"); -// WebResponse response = conversation.getResponse(request); -// System.out.println(response.getText()); -// } -// -// } catch (Exception e) { -// fail("on test Exception: " + e); -// } -// } - -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/ClientTest.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/ClientTest.java deleted file mode 100644 index e02bfd52ea..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/ClientTest.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.javaee5; - -import java.io.File; -import java.util.ArrayList; - -import junit.framework.TestSuite; - -import org.ow2.jonas.cluster.test.common.AbsTestClient; -import org.ow2.jonas.cluster.test.common.ClientTask; -import org.ow2.jonas.cluster.test.common.RunnableTask; -import org.ow2.jonas.cluster.test.common.Worker; -/** - * - * @author eyindanga - * - */ -public class ClientTest extends AbsTestClient { - /** - * The worker - */ - protected static Worker jworker = null; - - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - public static TestSuite suite() { - return new TestSuite(ClientTest.class); - } - - public ClientTest(String s) { - super(s); - } - - protected void setUp() throws Exception { - super.setUp(); -// if (jworker == null) { -// jworker = new Worker(); -// ArrayList arg = new ArrayList(); -// arg.add("-out"); -// arg.add(outputDir + File.separator + "cluster-javaee5.jonasTask.txt"); -// arg.add("-clientName"); -// arg.add("cluster-javaee5.jonasTask"); -// arg.add("-clusterConfig"); -// arg.add(clusterConfig); -// arg.add("-clusterRoot"); -// arg.add(clusterRoot); -// arg.add("-domainName"); -// arg.add(domainName); -// RunnableTask task = new ClientTask("cluster-javaee5.jonasTask", "org.ow2.jonas.cluster.test.common.JOnASTask", arg.toArray(new String[arg.size()])); -// jworker.addTask(task); -// jworker.run(); -// } - } - - /** - * Test Exception. - * @throws Exception any. - */ - public void testException() throws Exception { - LOGGER.info("cluster-javaee5.testException"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-javaee5.testException_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-javaee5.testException_" + i + ".txt"); - task = new ClientTask("cluster-javaee5.testException_" + i, - "org.ow2.jonas.cluster.test.javaee5.client.ClientException", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - System.out.println("running the worker"); - worker.run(); - /**start the checker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - System.out.println("Worker has terminated"); - if(worker.hasFailure()) { - fail("on cluster-javaee5.testException" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-javaee5.testException is ok"); - } - /** - * Test Fail over of Stateful session Bean. - * @throws Exception any. - */ - public void testFOSFSB() throws Exception { - LOGGER.info("cluster-javaee5.testFOSFSB"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-javaee5.testFOSFSB_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-javaee5.testFOSFSB_" + i + ".txt"); - task = new ClientTask("cluster-javaee5.testFOSFSB_" + i, - "org.ow2.jonas.cluster.test.javaee5.client.ClientFOSFSB", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on cluster-javaee5.testFOSFSB" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-javaee5.testFOSFSB is ok"); - } - - /** - * Test Load Balancing - * @throws Exception any. - */ - public void testLBRemote() throws Exception { - LOGGER.info("cluster-javaee5.testLBRemote"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-javaee5.testLBRemote_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-javaee5.testLBRemote_" + i + ".txt"); - task = new ClientTask("cluster-javaee5.testLBRemote_" + i, - "org.ow2.jonas.cluster.test.javaee5.client.ClientLBRemote", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - worker.run(); - /**start the ckecker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - if(worker.hasFailure()) { - fail("on cluster-javaee5.testLBRemote" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-javaee5.testLBRemote is ok."); - } - -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/SampleCluster3Test.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/SampleCluster3Test.java deleted file mode 100644 index 23f60b6daa..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/SampleCluster3Test.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): eyindanga - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.javaee5; - -import junit.framework.TestCase; -import junit.framework.TestSuite; - -import com.meterware.httpunit.GetMethodWebRequest; -import com.meterware.httpunit.WebConversation; -import com.meterware.httpunit.WebRequest; -import com.meterware.httpunit.WebResponse; - -/** - * the aim of this class is to check the different calls made in sampleCluster3 - * example. - * @author Nicolas Duvauchel - */ -public class SampleCluster3Test extends TestCase { - - /** - * the link with the web page - */ - private static WebConversation conversation = null; - /** - * default HTTP ports. - */ - private static final String[] default_http_ports = {"9000", "9200"}; - /** - * @param args - */ - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - /** - * @return the test suite - */ - public static TestSuite suite() { - return new TestSuite(SampleCluster3Test.class); - } - - /** - * @param s - */ - public SampleCluster3Test(String s) { - super(s); - } - - /** - * set up parameters for the tests - */ - protected void setUp() throws Exception { - try { - if (conversation == null) { - System.out.println("setting up conversation."); - conversation = new WebConversation(); - } - } catch (Exception e) { - fail("Unable to set up web tests " + e); - } - - } - - /** - * test if the page is accessible - * @throws Exception - */ - public void testReachable() throws Exception { - - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster3"); - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Reachable: " + e); - } - - } - - /** - * test and create a session - * @throws Exception - */ - public void testSession() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster3/servlet/session"); - - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Session: " + e); - } - } - - /** - * test and check the session - * @throws Exception - */ - public void testCheck() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster3/servlet/check"); - - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Check: " + e); - } - } - - /** - * test and release the session - * @throws Exception - */ - public void testRelease() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster3/servlet/release"); - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Release: " + e); - } - } - - /** - * test the exception - * @throws Exception - */ - public void testException() throws Exception { - try { - for (String port: default_http_ports) { - WebRequest request = new GetMethodWebRequest("http://localhost:" + port + "/sampleCluster3/servlet/exception"); - WebResponse response = conversation.getResponse(request); - System.out.println(response.getText()); - } - - } catch (Exception e) { - fail("on test Exception: " + e); - } - } - -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientException.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientException.java deleted file mode 100644 index 025baf5b26..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientException.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.javaee5.client; - -import javax.naming.Context; -import javax.naming.InitialContext; - -import org.ow2.jonas.examples.cluster.javaee5.client.ClientBase; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyException; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; - -public class ClientException extends ClientBase { - /** - * Private constructor for utility class - * - */ - private ClientException() { - } - /** - * Constructor. - * @param args the arguments - */ - private ClientException(final String[] args) { - super(args); - } - - private int start() { - try { - out.println(clientName + ": starting..."); - Context ctx = new InitialContext(); - MyStateless myStateless = (MyStateless) ctx.lookup("org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatelessBean" - + "_" + MyStateless.class.getName() +"@Remote"); - out.println("Bean created -> " + myStateless); - out.println("Throw an exception at the server side"); - myStateless.throwMyException(); - //Close the context - ctx.close(); - } catch (MyException e) { - out.println("Exception caught : invocation successful"); - }catch (Exception e) { - out.println(clientName + " KO. " + e); - out.close(); - return -1; - } - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - } - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientException client = new ClientException(args); - return client.start(); - - } - -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientFOSFSB.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientFOSFSB.java deleted file mode 100644 index d3c8d42399..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientFOSFSB.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.javaee5.client; - -import javax.naming.Context; -import javax.naming.InitialContext; - -import org.ow2.jonas.examples.cluster.javaee5.client.ClientBase; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateful; - -/** - * Fat client : - * - test Fail Over of the SFSB - */ -public class ClientFOSFSB extends ClientBase { - - - /** - * Iteration number - */ - private static final int ITERATION_NB = 50; - - /** - * Default constructor. - */ - private ClientFOSFSB() { - - } - /** - * Constructor. - * @param args the arguments. - */ - private ClientFOSFSB(final String[] args) { - super(args); - } - - private int start() { - try { - out.println(clientName + ": starting..."); - Context ctx = new InitialContext(); - MyStateful myStateful = (MyStateful) ctx.lookup("org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatefulBean" - + "_" + MyStateful.class.getName() +"@Remote"); - out.println("Bean created -> " + myStateful); - for (int i = 1; i < ITERATION_NB + 1; i++) { - - - String l = "log entry " + i; - // add in the bean state - myStateful.logWithJOnASInstance(l); - - out.println("Add " + l); - - if (0 == i % 10) { - StringBuffer sb = myStateful.getLogTextDump(); - out.println("Get the log entries from the bean state " + sb); - out.println("Sleep 10s"); - try { - Thread.sleep(10000); - } catch (Exception e) { - out.println(clientName + " KO. " + e); - out.close(); - return -1; - } - } - - - } - myStateful.cleanup(); - //Close the context. - ctx.close(); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - return -1; - } - out.println(clientName + ": OK. Exiting."); - out.close(); - return 0; - } - - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientFOSFSB client = new ClientFOSFSB(args); - return client.start(); - } -} diff --git a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientLBRemote.java b/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientLBRemote.java deleted file mode 100644 index 3dcebdd2ca..0000000000 --- a/jonas_tests/cluster/samples/src/org/ow2/jonas/cluster/test/javaee5/client/ClientLBRemote.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.javaee5.client; - -import java.util.Properties; - -import javax.naming.Context; -import javax.naming.InitialContext; - -import org.ow2.jonas.examples.cluster.javaee5.client.ClientBase; -import org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStateless; - -/** - * Fat client : - * - access to a SSB - * - LB at the remote - */ -public class ClientLBRemote extends ClientBase { - - /** - * Iteration number - */ - private static final int ITERATION_NB = 50; - - private ClientLBRemote() { - } - public ClientLBRemote(String[] args) { - super(args); - } - private int start() { - try { - out.println(clientName + ": starting..."); - String jonasEJBServer = null; - String ejbTotalCallsCount = null; - Properties prop = null; - /** - * Link to the SSB. - */ - MyStateless myStateless = null; - - Context ctx = new InitialContext(); - myStateless = (MyStateless) ctx.lookup("org.ow2.jonas.examples.cluster.javaee5.beans.samplecluster3.MyStatelessBean" - + "_" + MyStateless.class.getName() + "@Remote"); - - out.println("Bean created -> " + myStateless); - for (int i = 1; i < ITERATION_NB + 1; i++) { - out.println("Bean invoked"); - prop = myStateless.getInfoProps(); - jonasEJBServer = prop.getProperty("EJB server"); - ejbTotalCallsCount = prop.getProperty("EJB total calls"); - out.println("Calls=" + i + " - EJB served by jonas=" + jonasEJBServer + "- EJB total calls=" + ejbTotalCallsCount); - if (0 == i % 10) { - out.println("Sleep 10s"); - try { - Thread.sleep(10000); - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - return -1; - } - } - //Close the context. - ctx.close(); - } - } catch (Exception e) { - out.println(clientName + ": KO. " + e); - out.close(); - return -1; - } - out.println( clientName + ": OK. Exiting."); - out.close(); - return 0; - } - /** - * Main method - * @param args arguments of the client - */ - public static int main(final String[] args) { - ClientLBRemote client = new ClientLBRemote(args); - return client.start(); - - } -} diff --git a/jonas_tests/cluster/testing-applications/build.xml b/jonas_tests/cluster/testing-applications/build.xml deleted file mode 100644 index b72b2c6977..0000000000 --- a/jonas_tests/cluster/testing-applications/build.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/testing-applications/jmx/build.xml b/jonas_tests/cluster/testing-applications/jmx/build.xml deleted file mode 100644 index 1f68fbd591..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/build.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/testing-applications/jmx/etc/META-INF/MANIFEST.MF b/jonas_tests/cluster/testing-applications/jmx/etc/META-INF/MANIFEST.MF deleted file mode 100644 index b8bcfdaa31..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/etc/META-INF/MANIFEST.MF +++ /dev/null @@ -1 +0,0 @@ -Require-JOnAS-Services: cmi,ha diff --git a/jonas_tests/cluster/testing-applications/jmx/etc/application.xml b/jonas_tests/cluster/testing-applications/jmx/etc/application.xml deleted file mode 100644 index c32e8e076c..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/etc/application.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - Application for testing remote management on CMI - CMI remote management testing - - - - ejb3.jar - - - - - - cmi-jmx-client.jar - - diff --git a/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-application.xml b/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-application.xml deleted file mode 100644 index 203f21d8f6..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-application.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - OW2 JOnAS :: Cluster Examples :: JMX client for CMI - - diff --git a/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-jonas.xml b/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-jonas.xml deleted file mode 100644 index 2c80ddcc65..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/etc/cmi-jmx-client-jonas.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/ClientJMXTester.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/ClientJMXTester.java deleted file mode 100644 index ef2c8c15b1..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/ClientJMXTester.java +++ /dev/null @@ -1,217 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.client; - - -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import org.ow2.jonas.cluster.test.jmx.common.ClientBase; -import org.ow2.jonas.cluster.test.jmx.common.ClientUtility; -import org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester; -import org.ow2.jonas.cluster.test.jmx.ejb.RemoteClusterFangBean; - -public class ClientJMXTester extends ClientBase{ - - /** - * Link to the tester bean. - */ - private ClusterJMXTester testerBean; - /** - * Link to the fang bean. - */ - RemoteClusterFangBean fangBean = null; - /** - * @param args - * @param args Command line arguments - * @throws Exception - * @throws Exception InitialContext creation failure / JMS Exception - */ - - public ClientJMXTester(String[] args) throws Exception { - super(args); - // Print Header - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("OW2 JOnAS :: Cluster Examples :: JMX client for CMI "); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - testerBean = ClientUtility.getJMXTesterBean(); - fangBean = ClientUtility.getFangBean(); - out.println("Init successful for " + clientName + "."); - - } - - private void run() throws Exception { - out.println(clientName + ", initiliazing JMX connection to CMI"); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - testerBean.init(); - out.println("CMI objectName: " + testerBean.getObjectName()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - Set names = testerBean.getObjectNames(); - out.println("Registered objects: " + names); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - Set clusters = testerBean.getClusterNames(); - out.println("Cluster names: " + clusters); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Is " + clusterName + " present in cluster names ?: " - + clusters.contains(clusterName)); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Delay to refresh: " + testerBean.getDelayToRefresh()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Connected clients: " + - testerBean.getNbClientsConnectedToProvider()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("policies and strategies: " + - testerBean.retrieveAvailablePoliciesAndStrategies()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Is " + fangBeanName + " replicated ?: " + - testerBean.isReplicated(fangBeanName)); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Fang description: " + fangBean.getFangDescription()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - out.println("Fang web sites: " + fangBean.getFangWebsites()); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - setPolicyStrategy(); - addPoolToEmpty(); - //blacklistServers(); - getBusinessName(); - setDelay2Refresh(); - - } - /** - * Set delay for refreshing clients view. - * @return - * @throws Exception - */ - private void setDelay2Refresh() throws Exception { - testerBean.setDelayToRefresh(delayToRefresh); - } - - private void changePolicy(String clusteredObject, String policyClass) - throws Exception { - testerBean.setPolicyClassName(clusteredObject, policyClass); - out.println(clientName + - ". Clustered object: " - + clusteredObject + ". Policy:" - + testerBean.getPolicyClassName(clusteredObject)); - } - - private void changeStrategy(String clusteredObject, String strategyClass) - throws Exception { - testerBean.setStrategyClassName(clusteredObject, strategyClass); - out.println(clientName +". Clustered object: " - + clusteredObject + ". Strategy:" - + testerBean.getStrategyClassName(clusteredObject)); - out.println("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); - } - - - /** - * Clears the pool. - * @throws Exception, any. - */ - private void addPoolToEmpty() throws Exception { - out.println(clientName +". Clustered object: " - + fangBeanName + ". Clear pool:"); - testerBean.addPooltoEmpty(fangBeanName); - if (!testerBean.isPoolToEmpty(fangBeanName)) { - throw new Exception(clientName + ". Unable clear pool for object " - + fangBeanName); - } - } - - - /** - * Try to blacklist/unblacklist each server. - * @throws Exception, any. - */ - private void blacklistServers() throws Exception{ - out.println(clientName + ". blacklist servers."); - Set protos = testerBean.getProtocols(); - for (String proto : protos) { - Set srvRefs = testerBean.getServerRefsForProtocol(proto); - for (String ref : srvRefs) { - out.println(clientName + ". blacklisting server " - + ref + " on protocol " + proto); - testerBean.addServerToBlackList(ref); - Thread.currentThread().sleep(time2sleep); - if (!testerBean.isServerBlackListed(ref)) { - throw new Exception(clientName + ". unable to blacklist server " - + ref + " on protocol " + proto); - } - out.println(clientName + ". unblacklisting server " - + ref + " on protocol " + proto); - testerBean.removeServerFromBlackList(ref); - Thread.currentThread().sleep(time2sleep); - if (testerBean.isServerBlackListed(ref)) { - throw new Exception(clientName + ". unable to blacklist server " - + ref + " on protocol " + proto); - } - - } - } - } - - private void getBusinessName() throws Exception { - out.println(clientName +". Clustered object: " - + fangBeanName + ". Business name:" + - testerBean.getBusinessName(fangBeanName)); - } - - /** - * Try to set each strategy/policy, available in CMI - * to the clustered object beanName. - * @throws Exception, any. - */ - @SuppressWarnings("unchecked") - private void setPolicyStrategy() throws Exception { - Map> lb = testerBean.retrieveAvailablePoliciesAndStrategies(); - Set policies = null; - Set strategies = null; - Set>> set = lb.entrySet(); - for (Iterator iterator = set.iterator(); iterator.hasNext();) { - Entry> entry = (Entry>) iterator - .next(); - if (entry.getKey().contains("poli")) { - policies = entry.getValue(); - }else { - strategies = entry.getValue(); - } - } - - for(String policy: policies) { - changePolicy(fangBeanName, policy); - for(String strategy: strategies) { - changeStrategy(fangBeanName, strategy); - } - } - } - - public static void main(final String[] args) throws Exception { - ClientJMXTester jmxTester = new ClientJMXTester(args); - jmxTester.run(); - } -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/JMXTest.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/JMXTest.java deleted file mode 100644 index 2adb9d0420..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/client/JMXTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.client; - -import java.io.File; -import java.util.ArrayList; - -import junit.framework.TestSuite; - -import org.ow2.jonas.cluster.test.common.AbsTestClient; -import org.ow2.jonas.cluster.test.common.ClientTask; -import org.ow2.jonas.cluster.test.common.RunnableTask; -import org.ow2.jonas.cluster.test.common.Worker; - -public class JMXTest extends AbsTestClient { - /** - * The worker - */ - protected static Worker jworker = null; - - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - public static TestSuite suite() { - return new TestSuite(JMXTest.class); - } - - public JMXTest(String s) { - super(s); - } - - protected void setUp() throws Exception { - super.setUp(); - } - - /** - * Test Exception. - * @throws Exception any. - */ - public void testJMXCmi() throws Exception { - LOGGER.info("cluster-jmx-cmi.testJMX"); - RunnableTask task = null; - ArrayList arg = new ArrayList(); - for(int i = 0; i < clientsNumber; i++) { - arg.add("-clientName"); - arg.add("cluster-jmx-cmi.testJMX_" + i); - arg.add("-out"); - arg.add(outputDir + File.separator + "cluster-jmx-cmi.testJMX_" + i + ".txt"); - arg.add("-time2sleep"); - arg.add("20000"); - task = new ClientTask("cluster-jmx-cmi.testJMX_" + i, - "org.ow2.jonas.cluster.test.jmx.client.ClientJMXTester", arg.toArray(new String[arg.size()])); - worker.addTask(task); - } - System.out.println("running the worker"); - worker.run(); - /**start the checker **/ - checker.start(); - while(!checker.stopped()) { - // sleep. - Thread.currentThread().sleep(checkerSleepTime); - } - LOGGER.info("Worker has terminated"); - if(worker.hasFailure()) { - fail("on cluster-jmx-cmi.testJMX" + worker.getTasksFailures()); - } - worker.clear(); - LOGGER.info("cluster-jmx-cmi.testJMX is ok"); - } -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientBase.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientBase.java deleted file mode 100644 index 635a697f47..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientBase.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.common; - -import java.io.FileOutputStream; -import java.io.PrintStream; - -public class ClientBase { - - /** - * Iteration number - */ - private static final int ITERATION_NB = 50; - - /** - * Default time to sleep. - */ - private static final long TIME2SLEEP = 3000; - - /** - * Output to be used. - */ - protected PrintStream out = null; - /** - * the name of the client. - */ - protected String clientName = "JOnAS Client for cluster-javaee5"; - - /** - * Time to sleep each 10 iterations. - */ - protected long time2sleep = 5000; - - /** - * Iterations number. - */ - protected int iterations = ITERATION_NB; - - /** - * Delay to refresh clients views. - */ - protected int delayToRefresh = 3000; - - /** - * Cluster name. - */ - protected String clusterName = "fangcluster"; - - /** - * Cluster name. - */ - protected String fangBeanName = "fangbean"; - - public ClientBase() { - } - - public ClientBase(final String[] args) { - initArgs(args); - } - - private void initArgs(final String[] args) { - out = System.out; - String url = null; - if(args != null && args.length != 0) { - for (int argn = 0; argn < args.length; argn++) { - String arg = args[argn]; - if("-out".equals(arg)) { - url = args[++argn]; - continue; - }else if ("-clientName".equals(arg)) { - clientName = args[++argn]; - out.println("Client name set to : " + clientName); - continue; - }else if ("-time2sleep".equals(arg)) { - String time = args[++argn]; - try { - time2sleep = Long.parseLong(time); - } catch (NumberFormatException e) { - time2sleep = TIME2SLEEP; - } - out.println("Time to sleep set to : " + time2sleep); - continue; - }else if ("-iterations".equals(arg)) { - String it = args[++argn]; - try { - iterations = Integer.parseInt(it); - } catch (Exception e) { - // TODO: handle exception - iterations = ITERATION_NB; - } - out.println("Number of iterations set to : " + iterations); - continue; - }else if ("-delay2refresh".equals(arg)) { - String str = args[++argn]; - try { - delayToRefresh = Integer.parseInt(str); - } catch (Exception e) { - ; - } - out.println("Delay for refreshing clients view : " + delayToRefresh); - continue; - }else if ("-clusterName".equals(arg)) { - clusterName = args[++argn]; - }else if ("-beanName".equals(arg)) { - fangBeanName = args[++argn]; - } - } - } - if (url != null) { - initOut(url); - } - } - /** - * Initializes client output. - * @param url Stringified url of the client output file. - */ - private void initOut(final String url) { - try { - FileOutputStream file = new FileOutputStream(url, true); - out.println("Initializing output '" + url + "' for " + clientName); - out = new PrintStream(file, true); - } catch (Exception e) { - out.println("Unable to initialize output for " + clientName + " because : " + e); - } - } - -} - diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientUtility.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientUtility.java deleted file mode 100644 index dcc6aeb633..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/common/ClientUtility.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.common; - - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester; -import org.ow2.jonas.cluster.test.jmx.ejb.RemoteClusterFangBean; - -/** - * Fat client : generic methods - */ -public class ClientUtility { - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientUtility() { - } - - /** - * @return MyEjb1 home object - * @throws Exception any. - */ - public static ClusterJMXTester getJMXTesterBean() throws Exception { - - Context ctx = null; - ClusterJMXTester bean = null; - try { - ctx = new InitialContext(); - } catch (NamingException e) { - throw new Exception("Exception in getJMXTesterBean. Unable to create context ", e); - } - - // Lookup bean. - try { - bean = (ClusterJMXTester) ctx.lookup("org.ow2.jonas.cluster.test.jmx.ejb." + - "ClusterJMXTesterBean_org.ow2.jonas.cluster." + - "test.jmx.ejb.RemoteClusterJMXTester@Remote"); - ctx.close(); - } catch (Exception e) { - //e.printStackTrace(); - //System.exit(2); - throw new Exception("Exception in getJMXTesterBean. Unable to get bean reference ", e); - } - - return bean; - } - - /** - * @return MyEjb1 home object - * @throws Exception any. - */ - public static RemoteClusterFangBean getFangBean() throws Exception { - - Context ctx = null; - RemoteClusterFangBean bean = null; - try { - ctx = new InitialContext(); - } catch (NamingException e) { - throw new Exception("Exception in getFangBean. Unable to create context ", e); - } - - // Lookup bean. - try { - bean = (RemoteClusterFangBean) ctx.lookup("fangbean"); - ctx.close(); - } catch (Exception e) { - throw new Exception("Exception in getFangBean. Unable to get bean reference ", e); - } - - return bean; - } -} - diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterFangBean.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterFangBean.java deleted file mode 100644 index c2da297ade..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterFangBean.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.ejb; - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.List; - -import javax.ejb.Remote; -import javax.ejb.Stateful; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; - -import org.ow2.cmi.annotation.Cluster; -import org.ow2.cmi.annotation.Policy; -import org.ow2.cmi.annotation.Strategy; -import org.ow2.cmi.lb.policy.FirstAvailable; -import org.ow2.cmi.lb.strategy.NoStrategy; - -/** - * @author eyindanga - * - */ -@Cluster(name="fangcluster") -@Policy(FirstAvailable.class) -@Strategy(NoStrategy.class) -@Remote(RemoteClusterFangBean.class) -@Stateful(mappedName="fangbean") -@TransactionAttribute(TransactionAttributeType.NEVER) -public class ClusterFangBean implements RemoteClusterFangBean{ - - /** - * Web sites. - */ - List webSites = new ArrayList(); - /** - * Description. - */ - String description = "Fang is an ethnic group of central africa"; - - public void addFangWebsite(String wSite) throws RemoteException { - webSites.add(wSite); - } - - public List getFangWebsites() throws RemoteException { - return webSites; - } - - public String getFangDescription() throws RemoteException { - return description; - } - - public void removeFangWebsite(String wSite) throws RemoteException { - webSites.remove(wSite); - } - - public void setDescription(String desc) throws RemoteException { - description = desc; - } - -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTester.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTester.java deleted file mode 100644 index f09a0a31e7..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTester.java +++ /dev/null @@ -1,879 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.jmx.ejb; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.UnknownHostException; -import java.rmi.RemoteException; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.InvalidAttributeValueException; -import javax.management.MBeanException; -import javax.management.ObjectName; -import javax.management.ReflectionException; -import javax.management.remote.JMXServiceURL; - -/** - * Remote interface for the bean Writer. - * - * @author JOnAS team - */ -public interface ClusterJMXTester { - - void init() throws Exception; - - /** - * Returns the ObjectName binded in the MBean Server. - * - * @return the ObjectName binded in the MBean Server - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - ObjectName getObjectName() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException; - - /** - * @param protocolName - * a name of protocol - * @return the JMX service URL to access to this MBean - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - JMXServiceURL getJMXServiceURL(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException; - - /** - * @return the protocols registered in the manager - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - Set getProtocols() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException; - - /** - * @param protocolName - * a name of protocol - * @return the reference on the local registry for the given protocol - * @throws IllegalArgumentException - * if the given protocol name doesn't exist - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getRefOnLocalRegistry(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns a name of interface of this object. - * - * @param objectName - * a name of object - * @return a name of interface of this object - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getItfName(String objectName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns the business interface name of an object bound with the given - * name (for ejb2 only). If the object is not an ejb2, null is returned. - * - * @param objectName - * a name of object - * @return the business interface name of an object bound with the given - * name - * @throws IllegalArgumentException - * if none object has the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getBusinessName(String objectName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * @param objectName - * a name of object - * @return true if the object with the given name is replicated - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - boolean isReplicated(String objectName) throws IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * @param protocolName - * a name of protocol - * @return the set of references on server connected to this server - * @throws IllegalArgumentException - * if the given protocol name doesn't exist - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Set getServerRefsForProtocol(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * @return the set of clustered object names - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - Set getObjectNames() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException; - - /** - * Returns the name of class of policy for the object with the given name. - * - * @param objectName - * name of the object - * @return the name of class of policy for the object with the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getPolicyClassName(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets a new policy for a given object. - * - * @param objectName - * a name of object - * @param policyClassName - * a name of class of policy - * @throws IllegalArgumentException - * if none object has the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws ClassNotFoundException - * if the class is missing - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setPolicyClassName(String objectName, String policyClassName) - throws IllegalArgumentException, UnsupportedOperationException, - ClassNotFoundException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * Returns the name of class of strategy for the object with the given name. - * - * @param objectName - * name of the object - * @return the name of class of strategy for the object with the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getStrategyClassName(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets a new strategy for a given object. - * - * @param objectName - * a name of object - * @param strategyClassName - * a name of class of strategy - * @throws IllegalArgumentException - * if none object has the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws ClassNotFoundException - * if the class is missing - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setStrategyClassName(String objectName, String strategyClassName) - throws IllegalArgumentException, UnsupportedOperationException, - ClassNotFoundException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * Returns the set of property names for the object with the given name. - * - * @param objectName - * a name of object - * @return the set of property names for the object with the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Set getPropertiesNamesForPolicy(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns the set of property names (for which value is a list) for the - * object with the given name. - * - * @param objectName - * a name of object - * @return the set of property names for the object with the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Set getListPropertiesNamesForPolicy(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns the value of the property with the given name. - * - * @param objectName - * a name of object - * @param propertyName - * a name of property - * @return the value of the property with the given name, or null if there - * is not property for this name - * @throws IllegalArgumentException - * if none object has the given name, or if the value is a list - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getPropertyForPolicy(String objectName, String propertyName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns the list of value of the property with the given name. - * - * @param objectName - * a name of object - * @param propertyName - * a name of property - * @return the list of value of the property with the given name, or null if - * there is not property for this name - * @throws IllegalArgumentException - * if none object has the given name, or if the value is not a - * list - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - List getListPropertyForPolicy(String objectName, String propertyName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets a property for a given object. A property is either a String or a - * list of String. - * - * @param objectName - * a name of object - * @param propertyName - * a name of property - * @param propertyValue - * a value for the given name of property - * @throws IllegalArgumentException - * if none object has the given name, or if the property doesn't - * exist or has an invalid type - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setPropertyForPolicy(String objectName, String propertyName, - String propertyValue) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets a property for a given object. A property is either a String or a - * list of String. - * - * @param objectName - * a name of object - * @param propertyName - * a name of property - * @param propertyValues - * a list of value for the given name of property - * @throws IllegalArgumentException - * if none object has the given name, or if the property doesn't - * exist or has an invalid type - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setListPropertyForPolicy(String objectName, String propertyName, - List propertyValues) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets the properties for a given object. A property is either a String or - * a list of String. - * - * @param objectName - * a name of object - * @param properties - * properties a set of properties - * @throws IllegalArgumentException - * if none object has the given name, or if a property doesn't - * exist or has an invalid type - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setPropertiesForPolicy(String objectName, - Map properties) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Sets the algorithm of load-balancing for the object with the given name. - * - * @param objectName - * a name of object - * @param policyClassName - * a name of class of policy - * @param strategyClassName - * a name of class of strategy - * @param properties - * a set of properties - * @throws IllegalArgumentException - * if none object has the given name, or if a property doesn't - * exist or has an invalid type - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws ClassNotFoundException - * if the class is missing - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setAlgorithmForPolicy(String objectName, String policyClassName, - String strategyClassName, Map properties) - throws IllegalArgumentException, UnsupportedOperationException, - ClassNotFoundException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * Returns a list of String representing a ServerRef for an object with the - * given name and protocol. - * - * @param objectName - * a name of object - * @param protocolName - * a name of protocol - * @return a list of String representing a ServerRef for an object with the - * given name and protocol - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - List getServerRefs(String objectName, String protocolName) - throws IllegalArgumentException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns a list of String representing a ServerRef for an object with the - * given name. - * - * @param objectName - * a name of object - * @return a list of String representing a ServerRef for an object with the - * given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - List getServerRefs(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns the set of name of cluster. - * - * @return the set of name of cluster - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - Set getClusterNames() throws UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException, AttributeNotFoundException; - - /** - * Returns the set of object names included in the given cluster. - * - * @param clusterName - * The cluster name - * @return a set of object names included in the given cluster - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IllegalArgumentException - * if none cluster has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Set getObjectNames(String clusterName) - throws UnsupportedOperationException, IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns the time between each update of the cluster view by clients. - * - * @return the time between each update of the cluster view by clients - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - Integer getDelayToRefresh() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException; - - /** - * Sets the time between each update of the cluster view by clients. - * - * @param delay - * the time between each update of the cluster view by clients - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws InvalidAttributeValueException - * @throws AttributeNotFoundException - */ - void setDelayToRefresh(Integer delay) throws UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException, AttributeNotFoundException, InvalidAttributeValueException; - - /** - * Returns the name of cluster for the object with the given name. - * - * @param objectName - * a name of object - * @return the name of cluster for a object with the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - String getClusterName(String objectName) throws IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns the minimal size of pool of CMIReferenceable for a object with - * the given name. - * - * @param objectName - * a name of object - * @return the minimal size of pool of CMIReferenceable for a object with - * the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Integer getMinPoolSize(String objectName) throws IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns the maximal size of pool of CMIReferenceable for a object with - * the given name. - * - * @param objectName - * a name of object - * @return the maximal size of pool of CMIReferenceable for a object with - * the given name - * @throws IllegalArgumentException - * if none object has the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Integer getMaxPoolSize(String objectName) throws IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Sets the minimal size of pool of CMIReferenceable for a object with the - * given name. - * - * @param objectName - * a name of object - * @param minPoolSize - * the minimal size of pool of CMIReferenceable for a object with - * the given name - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setMinPoolSize(String objectName, Integer minPoolSize) - throws IllegalArgumentException, UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Sets the maximal size of pool of CMIReferenceable for a object with the - * given name. - * - * @param objectName - * a name of object - * @param maxPoolSize - * the maximal size of pool of CMIReferenceable for a object with - * the given name - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setMaxPoolSize(String objectName, Integer maxPoolSize) - throws IllegalArgumentException, UnsupportedOperationException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Adds a server to the blacklist. - * - * @param serverName - * a reference on a server - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws MalformedURLException - * if the URL is malformed - * @throws UnknownHostException - * if the given host cannot be resolved - * @throws RemoteException - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void addServerToBlackList(String serverName) - throws UnsupportedOperationException, MalformedURLException, - UnknownHostException, RemoteException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Removes a server from the blacklist. - * - * @param serverName - * a reference on a server - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws MalformedURLException - * if the URL is malformed - * @throws UnknownHostException - * if the given host cannot be resolved - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void removeServerFromBlackList(String serverName) - throws UnsupportedOperationException, MalformedURLException, - UnknownHostException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * Returns true the server with the given reference if blacklisted. - * - * @param serverName - * a reference on a server - * @return true the server with the given reference if blacklisted - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws MalformedURLException - * if the URL is malformed - * @throws UnknownHostException - * if the given host cannot be resolved - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - boolean isServerBlackListed(String serverName) - throws UnsupportedOperationException, MalformedURLException, - UnknownHostException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * Adds the pool of the object with the given name of the list of pool that - * should be empty. - * - * @param objectName - * a name of object - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void addPooltoEmpty(String objectName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Removes the pool of the object with the given name of the list of pool - * that should be empty. - * - * @param objectName - * a name of object - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void removePoolToEmpty(String objectName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Returns true if the pool for object with the given name should be empty. - * - * @param objectName - * a name of object - * @return true if the pool for object with the given name should be empty - * @throws IllegalArgumentException - * if no object is bound with the given name - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - boolean isPoolToEmpty(String objectName) throws IllegalArgumentException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Returns the load-factor for the server with the given address. - * - * @param serverRef - * a reference on a server - * @return the load-factor for the server with the given address - * @throws IllegalArgumentException - * if none server has the given address - * @throws MalformedURLException - * if the URL is malformed - * @throws UnknownHostException - * if the given host cannot be resolved - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - Integer getLoadFactor(String serverRef) throws IllegalArgumentException, - MalformedURLException, UnknownHostException, - InstanceNotFoundException, MBeanException, ReflectionException, - IOException; - - /** - * Sets the load-factor for the server with the given address. - * - * @param serverRef - * a reference on a server - * @param loadFactor - * the load-factor for the server with the given address - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws MalformedURLException - * if the URL is malformed - * @throws UnknownHostException - * if the given host cannot be resolved - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - void setLoadFactor(String serverRef, String loadFactor) - throws UnsupportedOperationException, MalformedURLException, - UnknownHostException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException; - - /** - * @return the numbers of clients connected to a provider of the cluster - * view - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - * @throws AttributeNotFoundException - */ - Integer getNbClientsConnectedToProvider() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException; - - /** - * Gets objects hosted on a given server started with a given protocol. - * - * @param serverUrl - * a server reference - * @param protocolName - * a name of protocol - * @return set of objects hosted on the server - * @throws IllegalArgumentException - * if the given protocol name doesn't exist or the server is not - * registered for the given protocol - * @throws UnsupportedOperationException - * if the used manager is at client-side - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - public Set getServerObjectsForProtocol(final String serverUrl, - final String protocolName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - - /** - * Gets available load balancing policies and strategies. - * - * @return available policies and strategies - * @throws UnsupportedOperationException - * if the operation is not supported - * @throws IOException - * @throws ReflectionException - * @throws MBeanException - * @throws InstanceNotFoundException - */ - public Map> retrieveAvailablePoliciesAndStrategies() - throws UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException; - -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTesterBean.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTesterBean.java deleted file mode 100644 index 45117d74e9..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/ClusterJMXTesterBean.java +++ /dev/null @@ -1,552 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.jmx.ejb; - -import java.io.IOException; -import java.rmi.RemoteException; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.ejb.TransactionAttribute; -import javax.ejb.TransactionAttributeType; -import javax.management.Attribute; -import javax.management.AttributeNotFoundException; -import javax.management.InstanceNotFoundException; -import javax.management.InvalidAttributeValueException; -import javax.management.MBeanException; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.ReflectionException; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; - -import org.ow2.jonas.lib.management.extensions.manager.ManagementEntryPoint; -import org.ow2.jonas.lib.util.JonasObjectName; - -/** - * This is an example of Session Bean, stateless, secured, available - * with a Local and a Remote interface (with the same methods). - * @author JOnAS team - */ -@Stateless(name="clusterJMXTester") -@Remote(RemoteClusterJMXTester.class) -@Local(LocalClusterJMXTester.class) -@TransactionAttribute(TransactionAttributeType.NEVER) -public class ClusterJMXTesterBean implements LocalClusterJMXTester, RemoteClusterJMXTester { - - private String domainName; - private String serverName; - private String url; - private JMXServiceURL jmxService; - private JMXConnector connector; - private MBeanServerConnection mbeanserver; - private ObjectName objectName = null; - - /** - * Checks if CMI MBean is registered. - * @throws IOException - * @throws MalformedObjectNameException - * @throws RemoteException. - */ - public void checkCMIMBean() throws MalformedObjectNameException, IOException { - System.out.println("checkCMIMBean"); - boolean registered = mbeanserver.isRegistered(JonasObjectName.cmiServer(domainName, serverName)); - if (!registered) { - throw new RemoteException(" CMI ObjectName not registered" - + " for domain: "+ domainName - + "server: " + serverName); - } - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#addPooltoEmpty(java.lang.String) - */ - public void addPooltoEmpty(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, "addPooltoEmpty", - new String[]{objectName}, new String[]{"java.lang.String"}); - if (!isPoolToEmpty(objectName)) { - throw new RemoteException("Unable to reset pool for " + objectName); - } - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#addServerToBlackList(java.lang.String) - */ - public void addServerToBlackList(String serverName) - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, "addPooltoEmpty", - new String[]{serverName}, new String[]{"java.lang.String"}); - if (!isServerBlackListed(serverName)) { - throw new RemoteException("Unable blacklist server " + serverName); - } - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getBusinessName(java.lang.String) - */ - public String getBusinessName(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, "getBusinessName", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getClusterName(java.lang.String) - */ - public String getClusterName(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, "getClusterName", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getClusterNames() - */ - public Set getClusterNames() throws UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException { - return(Set) mbeanserver.getAttribute(this.objectName, "ClusterNames"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getDelayToRefresh() - */ - public Integer getDelayToRefresh() throws InstanceNotFoundException, MBeanException, - ReflectionException, IOException, AttributeNotFoundException { - return (Integer) mbeanserver.getAttribute(this.objectName, "DelayToRefresh"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getItfName(java.lang.String) - */ - public String getItfName(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, "getItfName", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getJMXServiceURL(java.lang.String) - */ - public JMXServiceURL getJMXServiceURL(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException { - // TODO Auto-generated method stub - return (JMXServiceURL)mbeanserver.invoke(this.objectName, "getJMXServiceURL", - new String[]{protocolName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getListPropertiesNamesForPolicy(java.lang.String) - */ - public Set getListPropertiesNamesForPolicy(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Set)mbeanserver.invoke(this.objectName, - "getListPropertiesNamesForPolicy", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getListPropertyForPolicy(java.lang.String, - * java.lang.String) - */ - public List getListPropertyForPolicy(String objectName, - String propertyName) throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (List)mbeanserver.invoke(this.objectName, - "getListPropertyForPolicy", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getLoadFactor(java.lang.String) - */ - public Integer getLoadFactor(String serverRef) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Integer)mbeanserver.invoke(this.objectName, - "getLoadFactor", - new String[]{serverRef}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getMaxPoolSize(java.lang.String) - */ - public Integer getMaxPoolSize(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Integer)mbeanserver.invoke(this.objectName, - "getMaxPoolSize", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getMinPoolSize(java.lang.String) - */ - public Integer getMinPoolSize(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Integer)mbeanserver.invoke(this.objectName, - "getMinPoolSize", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getNbClientsConnectedToProvider() - */ - public Integer getNbClientsConnectedToProvider() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException { - return (Integer)mbeanserver.getAttribute(this.objectName, "NbClientsConnectedToProvider"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getObjectName() - */ - public ObjectName getObjectName() throws InstanceNotFoundException, MBeanException, - ReflectionException, IOException, AttributeNotFoundException { - return (ObjectName)mbeanserver.getAttribute(this.objectName, "ObjectName"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getObjectNames() - */ - public Set getObjectNames() throws InstanceNotFoundException, MBeanException, - ReflectionException, IOException, AttributeNotFoundException { - return (Set)mbeanserver.getAttribute(this.objectName, "ObjectNames"); - } - - public Set getObjectNames(String clusterName) - throws UnsupportedOperationException, IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Set)mbeanserver.invoke(this.objectName, - "getObjectNames", - new String[]{clusterName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getPolicyClassName(java.lang.String) - */ - public String getPolicyClassName(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - System.out.println("getPolicyClassName ObjectName" + this.objectName); - return (String)mbeanserver.invoke(this.objectName, - "getPolicyClassName", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - public Set getPropertiesNamesForPolicy(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Set)mbeanserver.invoke(this.objectName, - "getPropertiesNamesForPolicy", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getPropertyForPolicy(java.lang.String, - * java.lang.String) - */ - public String getPropertyForPolicy(String objectName, String propertyName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, - "getPropertyForPolicy", - new String[]{objectName, propertyName}, - new String[]{"java.lang.String", "java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getProtocols() - */ - public Set getProtocols() throws InstanceNotFoundException, - MBeanException, ReflectionException, IOException, AttributeNotFoundException { - return (Set)mbeanserver.getAttribute(this.objectName, "Protocols"); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getRefOnLocalRegistry(java.lang.String) - */ - public String getRefOnLocalRegistry(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, - "getRefOnLocalRegistry", - new String[]{protocolName}, new String[]{"java.lang.String"}); - } - - public Set getServerObjectsForProtocol(String serverUrl, - String protocolName) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException { - return (Set)mbeanserver.invoke(this.objectName, - "getServerObjectsForProtocol", - new String[]{serverUrl, protocolName}, - new String[]{"java.lang.String", "java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getServerRefs(java.lang.String, - * java.lang.String) - */ - public List getServerRefs(String objectName, String protocolName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException { - return (List)mbeanserver.invoke(this.objectName, - "getServerRefs", - new String[]{objectName, protocolName}, - new String[]{"java.lang.String", "java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getServerRefs(java.lang.String) - */ - public List getServerRefs(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (List)mbeanserver.invoke(this.objectName, - "getServerRefs", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getServerRefsForProtocol(java.lang.String) - */ - public Set getServerRefsForProtocol(String protocolName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Set)mbeanserver.invoke(this.objectName, - "getServerRefsForProtocol", - new String[]{protocolName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#getStrategyClassName(java.lang.String) - */ - public String getStrategyClassName(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (String)mbeanserver.invoke(this.objectName, - "getStrategyClassName", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#isPoolToEmpty(java.lang.String) - */ - public boolean isPoolToEmpty(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Boolean)mbeanserver.invoke(this.objectName, - "isPoolToEmpty", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#isReplicated(java.lang.String) - */ - public boolean isReplicated(String objectName) - throws IllegalArgumentException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - return (Boolean)mbeanserver.invoke(this.objectName, - "isReplicated", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - public boolean isServerBlackListed(String serverName) - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - // TODO Auto-generated method stub - return (Boolean)mbeanserver.invoke(this.objectName, - "isServerBlackListed", - new String[]{serverName}, new String[]{"java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#removePoolToEmpty(java.lang.String) - */ - public void removePoolToEmpty(String objectName) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "removePoolToEmpty", - new String[]{objectName}, new String[]{"java.lang.String"}); - } - - public void removeServerFromBlackList(String serverName) - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "removeServerFromBlackList", - new String[]{serverName}, new String[]{"java.lang.String"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#retrieveAvailablePoliciesAndStrategies() - */ - public Map> retrieveAvailablePoliciesAndStrategies() - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - System.out.println("retrieveAvailablePoliciesAndStrategies ObjectName " + this.objectName); - return (Map>)mbeanserver.invoke(this.objectName, - "retrieveAvailablePoliciesAndStrategies", - null, null); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setAlgorithmForPolicy(java.lang.String, - * java.lang.String, java.lang.String, java.util.Map) - */ - public void setAlgorithmForPolicy(String objectName, - String policyClassName, String strategyClassName, - Map properties) throws IllegalArgumentException, - UnsupportedOperationException, ClassNotFoundException, InstanceNotFoundException, - MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setAlgorithmForPolicy", - new String[]{objectName, policyClassName, strategyClassName}, - new String[]{"java.lang.String", "java.lang.String", "java.lang.String"}); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setDelayToRefresh(java.lang.Integer) - */ - public void setDelayToRefresh(Integer delay) - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, - ReflectionException, IOException, AttributeNotFoundException, InvalidAttributeValueException { - mbeanserver.setAttribute(this.objectName, new Attribute("DelayToRefresh", delay)); - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setListPropertyForPolicy(java.lang.String, - * java.lang.String, java.util.List) - */ - public void setListPropertyForPolicy(String objectName, - String propertyName, List propertyValues) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setListPropertyForPolicy", - new Object[]{objectName, propertyName, propertyValues}, - new String[]{"java.lang.String", "java.lang.String", "java.util.List"}); - - } - - public void setLoadFactor(String serverRef, String loadFactor) - throws UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setLoadFactor", - new String[]{serverRef, loadFactor}, - new String[]{"java.lang.String", "java.lang.String"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setMaxPoolSize(java.lang.String, java.lang.Integer) - */ - public void setMaxPoolSize(String objectName, Integer maxPoolSize) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setMaxPoolSize", - new Object[]{objectName, maxPoolSize}, - new String[]{"java.lang.String", "java.lang.Integer"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setMinPoolSize(java.lang.String, java.lang.Integer) - */ - public void setMinPoolSize(String objectName, Integer minPoolSize) - throws IllegalArgumentException, UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setMinPoolSize", - new Object[]{objectName, minPoolSize}, - new String[]{"java.lang.String", "java.lang.Integer"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setPolicyClassName(java.lang.String, java.lang.String) - */ - public void setPolicyClassName(String objectName, String policyClassName) - throws IllegalArgumentException, UnsupportedOperationException, - ClassNotFoundException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setPolicyClassName", - new String[]{objectName, policyClassName}, - new String[]{"java.lang.String", "java.lang.String"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setPropertiesForPolicy(java.lang.String, java.util.Map) - */ - public void setPropertiesForPolicy(String objectName, - Map properties) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setPropertiesForPolicy", - new Object[]{objectName, properties}, - new String[]{"java.lang.String", "java.util.Map"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setPropertyForPolicy(java.lang.String, java.lang.String, java.lang.String) - */ - public void setPropertyForPolicy(String objectName, String propertyName, - String propertyValue) throws IllegalArgumentException, - UnsupportedOperationException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setPropertyForPolicy", - new Object[]{objectName, propertyName, propertyValue}, - new String[]{"java.lang.String", "java.lang.String", "java.lang.String"}); - - } - - /* (non-Javadoc) - * @see org.ow2.jonas.cluster.test.jmx.ejb.ClusterJMXTester#setStrategyClassName(java.lang.String, java.lang.String) - */ - public void setStrategyClassName(String objectName, String strategyClassName) - throws IllegalArgumentException, UnsupportedOperationException, - ClassNotFoundException, InstanceNotFoundException, MBeanException, ReflectionException, IOException { - mbeanserver.invoke(this.objectName, - "setStrategyClassName", - new Object[]{objectName, strategyClassName}, - new String[]{"java.lang.String", "java.lang.String"}); - - - } - /** - * Initializes the JMX connection. - */ - public void init() throws Exception { - System.out.println("initializing testerBean"); - domainName = ManagementEntryPoint.getInstance().getDomainName(); - serverName = ManagementEntryPoint.getInstance().getServerName(); - url = ManagementEntryPoint.getInstance().getConnectionUrl(null); - jmxService = new JMXServiceURL(url); - connector = JMXConnectorFactory.connect(jmxService); - mbeanserver = connector.getMBeanServerConnection(); - objectName = JonasObjectName.cmiServer(domainName, serverName); - checkCMIMBean(); - } - - - -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/LocalClusterJMXTester.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/LocalClusterJMXTester.java deleted file mode 100644 index 7957b0b29a..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/LocalClusterJMXTester.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.jmx.ejb; - -import java.io.IOException; -import java.rmi.RemoteException; - -import javax.management.MalformedObjectNameException; - -/** - * {@link javax.ejb.Local} interface. - * @author Guillaume Sauthier - */ -public interface LocalClusterJMXTester extends ClusterJMXTester { - /** - * Checks if CMI MBean is registered. - * @throws IOException - * @throws MalformedObjectNameException - * @throws RemoteException. - */ - public void checkCMIMBean() throws RemoteException, MalformedObjectNameException, IOException; - -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterFangBean.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterFangBean.java deleted file mode 100644 index 888b903222..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterFangBean.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.cluster.test.jmx.ejb; - -import java.rmi.RemoteException; -import java.util.List; - -/** - * @author zeng-ls - * - */ -public interface RemoteClusterFangBean { - /** - * Gets description of fang group. - * @return Description of fang group - * @throws RemoteException, any. - */ - String getFangDescription() throws RemoteException; - - /** - * Sets description. - * @param desc, the description to set. - * @throws RemoteException, any. - */ - void setDescription(String desc) throws RemoteException; - - /** - * Gets fang web sites. - * @return fang web sites. - * @throws RemoteException, any. - */ - List getFangWebsites() throws RemoteException; - - /** - * Adds fang web site. - * @param wSite the web site to add - * @throws RemoteException, any. - */ - void addFangWebsite(String wSite) throws RemoteException; - - /** - * Removes fang web site. - * @param wSite the web site to remove - * @throws RemoteException, any. - */ - void removeFangWebsite(String wSite) throws RemoteException; -} diff --git a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterJMXTester.java b/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterJMXTester.java deleted file mode 100644 index 6b7fe64358..0000000000 --- a/jonas_tests/cluster/testing-applications/jmx/src/main/java/org/ow2/jonas/cluster/test/jmx/ejb/RemoteClusterJMXTester.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2010 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.cluster.test.jmx.ejb; - -/** - * {@link javax.ejb.Remote} interface. - * @author Guillaume Sauthier - */ -public interface RemoteClusterJMXTester extends ClusterJMXTester { - -} diff --git a/jonas_tests/cluster/testing-applications/jonas-common.xml b/jonas_tests/cluster/testing-applications/jonas-common.xml deleted file mode 100644 index 17f81d9f51..0000000000 --- a/jonas_tests/cluster/testing-applications/jonas-common.xml +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/cluster/tools/maven-ant-tasks-2.0.9.jar b/jonas_tests/cluster/tools/maven-ant-tasks-2.0.9.jar deleted file mode 100644 index 82a30e5872b9d7fdd6e614d0edc05a9688254c01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018394 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

    _#Pj;(fiTGfqIa3{D&?ssCNVur_-(f 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%0AIyfx+Dl_K?~Na-gLYB6tDTw-EwR$0NZU9 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
    iN6VYYBJ{K9&0wQ-sCXp#}Uqq*t|^dtub+~h~| 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ℜ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

  • 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

    Hh=NTH0P+*J$RJ)k& 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%0DR&aZ9_>A!rC346ybMz2nRv_{_c#i|;Ti%V3;D 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

    VbLD!zoH;AaQ(DAO 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/conformance/build_hotdeploy.xml b/jonas_tests/conformance/build_hotdeploy.xml deleted file mode 100644 index ca7a8e6187..0000000000 --- a/jonas_tests/conformance/build_hotdeploy.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/conformance/src/hotdeploy1/HotDeploySLR.java b/jonas_tests/conformance/src/hotdeploy1/HotDeploySLR.java deleted file mode 100644 index 401e04e55f..0000000000 --- a/jonas_tests/conformance/src/hotdeploy1/HotDeploySLR.java +++ /dev/null @@ -1,97 +0,0 @@ -// HotDeploySLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.hotdeploy; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import javax.ejb.EJBObject; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - - -/** - * - */ -public class HotDeploySLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private static final int VERSION_NUMBER = 1; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // HotDeploy implementation - // ------------------------------------------------------------------ - /** - * method1 - */ - public String getEnvString() { - logger.log(BasicLevel.DEBUG, "getEnvString"); - String value = ""; - try { - InitialContext ictx = new InitialContext(); - value = (String) ictx.lookup("java:comp/env/name"); - // value should be the one defined in ejb-jar.xml - } catch (NamingException e) { - throw new EJBException(e); - } - - return value; - } - - public int getVersionNumber() { - logger.log(BasicLevel.DEBUG, "getVersionNumber = " + VERSION_NUMBER); - return VERSION_NUMBER; - } - - public int getHelperClassVersionNumber() { - logger.log(BasicLevel.DEBUG, "getHelperClassVersionNumber = " + Helper.VERSION_NUMBER); - return Helper.VERSION_NUMBER; - } - -} - diff --git a/jonas_tests/conformance/src/hotdeploy2/HotDeploySLR.java b/jonas_tests/conformance/src/hotdeploy2/HotDeploySLR.java deleted file mode 100644 index 8e4a30e03f..0000000000 --- a/jonas_tests/conformance/src/hotdeploy2/HotDeploySLR.java +++ /dev/null @@ -1,97 +0,0 @@ -// HotDeploySLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.hotdeploy; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import javax.ejb.EJBObject; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - - -/** - * - */ -public class HotDeploySLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private static final int VERSION_NUMBER = 2; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // HotDeploy implementation - // ------------------------------------------------------------------ - /** - * method1 - */ - public String getEnvString() { - logger.log(BasicLevel.DEBUG, "getEnvString"); - String value = ""; - try { - InitialContext ictx = new InitialContext(); - value = (String) ictx.lookup("java:comp/env/name"); - // value should be the one defined in ejb-jar.xml - } catch (NamingException e) { - throw new EJBException(e); - } - - return value; - } - - public int getVersionNumber() { - logger.log(BasicLevel.DEBUG, "getVersionNumber = " + VERSION_NUMBER); - return VERSION_NUMBER; - } - - public int getHelperClassVersionNumber() { - logger.log(BasicLevel.DEBUG, "getHelperClassVersionNumber = " + Helper.VERSION_NUMBER); - return Helper.VERSION_NUMBER; - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/annuaire/PersonneEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/annuaire/PersonneEC2.java deleted file mode 100644 index 0ae6a2d027..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/annuaire/PersonneEC2.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// PersonneEC2.java - -package org.objectweb.jonas.jtests.beans.annuaire; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.TimedObject; -import javax.ejb.Timer; -import javax.ejb.TimerService; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This is an entity bean with "container managed persistence version 2.x". - * @author Philippe Durieux, Helene Joanin (jonas team) - */ -public abstract class PersonneEC2 implements EntityBean, TimedObject { - - static protected Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getNom(); - public abstract void setNom(String n); - - public abstract String getNumero(); // Tx Attribute = Required - public abstract void setNumero(String n); // Tx Attribute = Required - - public abstract int getTimerIdent(); - public abstract void setTimerIdent(int id); - - public abstract int getTimerCount(); - public abstract void setTimerCount(int cnt); - - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String nom, String numero) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - public void ejbPostCreate(String nom, String numero, boolean t) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - - public java.lang.String ejbCreate(String nom, String numero) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, "ejbCreate(" + nom + ", " + numero + ")"); - - // Init here the bean fields - setNom(nom); - setNumero(numero); - setTimerIdent(0); - setTimerCount(0); - - // In CMP, should return null. - return null; - } - - public java.lang.String ejbCreate(String nom, String numero, boolean t) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, "ejbCreate nom numero boolean"); - - // Init here the bean fields - setNom(nom); - setNumero(numero); - setTimerIdent(0); - setTimerCount(0); - - // In CMP, should return null. - return null; - } - - /** - * This method is called before the instance enters the "passive" state. - * The instance should release any resources that it can re-acquire later in the - * ejbActivate() method. - * After the passivate method completes, the instance must be in a state that - * allows the container to use the Java Serialization protocol to externalize - * and store away the instance's state. - * This method is called with no transaction context. - * - * @exception EJBException - Thrown if the instance could not perform the - * function requested by the container - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * This method is called when the instance is activated from its "passive" state. - * The instance should acquire any resource that it has released earlier in the - * ejbPassivate() method. - * This method is called with no transaction context. - * - * @exception EJBException - Thrown if the instance could not perform the - * function requested by the container - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Personne implementation - // ------------------------------------------------------------------ - - /** - * getNumeroNTX / Tx Attribute = Supports - */ - public String getNumeroNTX() { - logger.log(BasicLevel.DEBUG, ""); - return getNumero(); - } - - /** - * setNumeroNTX / Tx Attribute = Supports - */ - public void setNumeroNTX(String s) { - logger.log(BasicLevel.DEBUG, ""); - setNumero(s); - } - - // - // Methods only implemented in the entity bean with "CMP version 1.x" - // used to test the isModified extension for CMP version 1 Entity Bean. - // (defined here to have a common interface) - // - - public boolean isModified() { - throw new UnsupportedOperationException(); - } - - public void reset() { - throw new UnsupportedOperationException(); - } - - public boolean isModifiedCalled() { - throw new UnsupportedOperationException(); - } - - public boolean ejbStoreCalled() { - throw new UnsupportedOperationException(); - } - - public boolean isDirty() { - throw new UnsupportedOperationException(); - } - - public int setTimer(int dur, int period) { - TimerService timerservice = ejbContext.getTimerService(); - Timer mt = null; - int ret = getTimerIdent() + 1; - setTimerIdent(ret); - if (period > 0) { - mt = timerservice.createTimer(1000 * dur, 1000 * period, new Integer(ret)); - } else { - mt = timerservice.createTimer(1000 * dur, new Integer(ret)); - } - return ret; - } - - public void cancelTimer(int ident) throws RemoteException { - TimerService timerservice = ejbContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - t.cancel(); - } - } - } - - public long getTimeRemaining(int ident) throws RemoteException { - TimerService timerservice = ejbContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - long ret = -1; - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - ret = t.getTimeRemaining(); - } - } - return ret; - } - - - // ----------------------------------------------------------- - // TimedObject implementation - // ----------------------------------------------------------- - - /** - * A timer is expired. - */ - public void ejbTimeout(Timer timer) { - setTimerCount(getTimerCount() + 1); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/AppliSession.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/AppliSession.java deleted file mode 100644 index 31f0b93813..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/AppliSession.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.applimet; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - */ -public class AppliSession implements SessionBean { - - static protected Logger logger = null; - private MetHome th; - private Met tr; - - SessionContext ejbContext; - - public void ejbRemove() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - tr.remove(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot remove Met:" + e); - throw new RemoteException("Cannot remove Met:" + e); - } - } - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - try{ - Context ctx = new InitialContext(); - Object objref = ctx.lookup(MetHome.JNDI_NAME); - th = (MetHome) PortableRemoteObject.narrow(objref, MetHome.class); - tr = th.create(); - } catch(Exception e) { - logger.log(BasicLevel.ERROR, "Cannot create Met:" + e); - throw new CreateException("Cannot create Met:" + e); - } - } - - public void methodeApplicative() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - tr.methode1(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot call Met:" + e); - throw new RemoteException("Cannot call Met:" + e); - } - } - - public void noTxMethod() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - ejbContext.getRollbackOnly(); - throw new RemoteException("Should get IllegalStateException"); - } catch (IllegalStateException e) { - } - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setSessionContext(javax.ejb.SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void unsetSessionContext() { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/MetSession.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/MetSession.java deleted file mode 100644 index cbf7853bde..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/MetSession.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.applimet; - -import java.rmi.RemoteException; -import java.sql.SQLException; -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - */ -public class MetSession implements SessionBean { - - SessionContext ejbContext; - static protected Logger logger = null; - private Dao dao; - private Dao dao2; - - public void ejbRemove() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao.removeConnexion(); - } catch (SQLException e) { - throw new RemoteException("cannot remove Connexion: " + e); - } - } - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao = new Dao(); - } catch (Exception e) { - throw new CreateException("Cannot create Dao: " + e); - } - } - - public void methode1() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - String liste = dao.rechercherTousLesMarches(); - logger.log(BasicLevel.DEBUG, liste); - } catch (Exception e) { - throw new RemoteException("Error calling Dao: " + e); - } - } - - /** - * Method with RequiresNew Tx Attribute. - * Uses the connection allocated in another transaction - * @throws RemoteException - */ - public void testTxNew() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - String liste = dao2.rechercherTousLesMarches(); - logger.log(BasicLevel.DEBUG, liste); - } catch (Exception e) { - throw new RemoteException("Error calling Dao: " + e); - } - } - - public void methode2() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao2 = new Dao(); - testTxNew(); - dao2.removeConnexion(); - } catch (Exception e) { - throw new RemoteException("Cannot create Dao: " + e); - } - } - - public void moscone1() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao2 = new Dao(); - dao2.rechercherTousLesMarches(); - dao2.removeConnexion(); - } catch (Exception e) { - throw new RemoteException("Error on Dao2: " + e); - } - } - - public void getconn() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao2 = new Dao(); - } catch (Exception e) { - throw new RemoteException("Cannot create Dao: " + e); - } - } - - public void getconntx() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao2 = new Dao(); - } catch (Exception e) { - throw new RemoteException("Cannot create Dao: " + e); - } - } - - public void useconn() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - String liste = dao2.rechercherTousLesMarches(); - logger.log(BasicLevel.DEBUG, liste); - } catch (Exception e) { - throw new RemoteException("Error calling Dao: " + e); - } - } - - public void closeconn() throws java.rmi.RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - dao2.removeConnexion(); - } catch (SQLException e) { - throw new RemoteException("cannot remove Connexion: " + e); - } - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setSessionContext(javax.ejb.SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void unsetSessionContext() { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/applimet.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/applimet.xml deleted file mode 100644 index 6e47ca9fb7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/applimet/applimet.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - applimet - - - - - - Met - - org.objectweb.jonas.jtests.beans.applimet.MetHome - org.objectweb.jonas.jtests.beans.applimet.Met - org.objectweb.jonas.jtests.beans.applimet.MetLocalHome - org.objectweb.jonas.jtests.beans.applimet.MetLocal - org.objectweb.jonas.jtests.beans.applimet.MetSession - Stateful - Container - - - - - - Appli - - org.objectweb.jonas.jtests.beans.applimet.AppliHome - org.objectweb.jonas.jtests.beans.applimet.Appli - org.objectweb.jonas.jtests.beans.applimet.AppliLocalHome - org.objectweb.jonas.jtests.beans.applimet.AppliLocal - org.objectweb.jonas.jtests.beans.applimet.AppliSession - Stateful - Container - - - - - - - - - Appli - noTxMethod - - - - Appli - remove - - NotSupported - - - - Met - * - - - Appli - * - - Required - - - - Met - moscone1 - - - Met - getconn - - Supports - - - - Met - testTxNew - - RequiresNew - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/AccountEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/AccountEC2.java deleted file mode 100644 index 87bcf47acf..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/AccountEC2.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.bank; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Account Implementation (with container-managed persistence version 2) - * @author Philippe Durieux - */ -public abstract class AccountEC2 implements EntityBean { - - protected static Logger history = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getName(); - public abstract void setName(String n); - public abstract int getNum(); - public abstract void setNum(int n); - public abstract int getBalance(); - public abstract void setBalance(int b); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (history == null) { - history = Log.getLogger("org.objectweb.jonas_tests.history"); - } - history.log(BasicLevel.DEBUG, getName()); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - history.log(BasicLevel.DEBUG, getName()); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - history.log(BasicLevel.DEBUG, getName()); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - String name = getName(); - int balance = getBalance(); - history.log(BasicLevel.DEBUG, name + "\tLOAD= " + balance); - if (balance < 0) { - history.log(BasicLevel.WARN, name + " : Bad balance loaded"); - throw new EJBException("ejbLoad: Balance "+name+" was negative ="+balance); - } - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - String name = getName(); - int balance = getBalance(); - history.log(BasicLevel.DEBUG, name + "\tSTORE= " + balance); - if (balance < 0) { - history.log(BasicLevel.WARN, name + " : Bad balance stored"); - throw new EJBException("ejbStore: Balance "+name+" was negative ="+balance); - } - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int num, int ib) throws CreateException { - history.log(BasicLevel.DEBUG, getName()); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.String ejbCreate(int num, int ib) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - setNum(num); - setName("a_"+(new Integer(num)).toString()); - setBalance(ib); - - history.log(BasicLevel.DEBUG, getName()); - - // In CMP, should return null. - return null; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - // balance may be wrong in case of rollback. Anyway, this instance is being - // released now, so no problem! - // This causes problems (in case of DB policy at least) - //setBalance(-80000); - history.log(BasicLevel.DEBUG, getName()); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - history.log(BasicLevel.DEBUG, getName() + " balance=" + getBalance()); - } - - // ------------------------------------------------------------------ - // Bank implementation - // ------------------------------------------------------------------ - - /** - * credit - */ - public void credit(int v) { - String name = getName(); - if (getBalance() < 0) { - if (ejbContext.getRollbackOnly() == true) { - history.log(BasicLevel.WARN, name + " : tx already rollbackonly"); - setBalance(-99000); - return; - } - history.log(BasicLevel.WARN, name + " : Bad balance to credit ="+getBalance()); - throw new EJBException("credit: Balance "+name+" was negative ="+getBalance()); - } - int oldval = getBalance(); - setBalance(oldval + v); - history.log(BasicLevel.DEBUG, name + "\told= " + oldval + "\tnew= " + getBalance()); - } - - /** - * debit - */ - public void debit(int v) { - String name = getName(); - int oldval = getBalance(); - if (oldval < 0) { - if (ejbContext.getRollbackOnly() == true) { - history.log(BasicLevel.WARN, name + " : tx already rollbackonly"); - setBalance(-99000); - return; - } - history.log(BasicLevel.WARN, name + " : Bad balance to debit="+oldval); - throw new EJBException("debit: Balance "+name+" was negative ="+oldval); - } - setBalance(oldval - v); - if (getBalance() < 0) { - history.log(BasicLevel.WARN, name + " : set rollback only. NEW BAL = -90000"); - ejbContext.setRollbackOnly(); - setBalance(-90000); // put it a very bad balance to check rollback is OK - } - history.log(BasicLevel.DEBUG, name + "\tOLD= " + oldval + "\tNEW= " + getBalance()); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/ManagerSF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/ManagerSF.java deleted file mode 100644 index c071e963e7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bank/ManagerSF.java +++ /dev/null @@ -1,438 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.bank; - -import java.rmi.NoSuchObjectException; -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.NoSuchObjectLocalException; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; -import javax.ejb.TransactionRolledbackLocalException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Manager Implementation - * @author Philippe Durieux - */ -public class ManagerSF implements SessionBean, SessionSynchronization { - - protected static Logger history = null; - SessionContext ejbContext; - AccountLocalHome accountLocalHome = null; - AccountLocal last = null; - int initialValue; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (history == null) { - history = Log.getLogger("org.objectweb.jonas_tests.history"); - } - history.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - history.log(BasicLevel.DEBUG, ""); - } - - /** - * Create a session. - * @param ival initial balance value for new accounts. - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate(int ival) throws CreateException { - history.log(BasicLevel.DEBUG, ""); - - // lookup AccountLocalHome - try { - Context ictx = new InitialContext(); - accountLocalHome = (AccountLocalHome) ictx.lookup("java:comp/env/ejb/bank"); - } catch (NamingException e) { - history.log(BasicLevel.ERROR, "Cannot get AccountLocalHome:" + e); - throw new CreateException("Cannot get AccountLocalHome"); - } - - initialValue = ival; - } - - /** - * Create a session. - * @param ival initial balance value for new accounts. - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate(int ival, boolean prefetch) throws CreateException { - history.log(BasicLevel.DEBUG, ""); - - // lookup AccountLocalHome - try { - Context ictx = new InitialContext(); - String ejblink = prefetch ? "java:comp/env/ejb/bankpf" : "java:comp/env/ejb/bank"; - accountLocalHome = (AccountLocalHome) ictx.lookup(ejblink); - } catch (NamingException e) { - history.log(BasicLevel.ERROR, "Cannot get AccountLocalHome:" + e); - throw new CreateException("Cannot get AccountLocalHome"); - } - - initialValue = ival; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - history.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - history.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // SessionSynchronization implementation - // ------------------------------------------------------------------ - - public void afterBegin() { - history.log(BasicLevel.DEBUG, ""); - } - - public void beforeCompletion() { - history.log(BasicLevel.DEBUG, ""); - } - - public void afterCompletion(boolean committed) { - if (committed) { - history.log(BasicLevel.DEBUG, "TX committed"); - } else { - history.log(BasicLevel.DEBUG, "TX rolled back"); - } - } - - // ------------------------------------------------------------------ - // Manager implementation - // ------------------------------------------------------------------ - - /** - * create a set of Accounts - * @param nb nb of Accounts created. - */ - public void createAll(int nb) throws RemoteException, CreateException { - // Check if accounts are already created. - history.log(BasicLevel.DEBUG, " nb= "+nb); - try { - accountLocalHome.findByNum(nb - 1); - } catch (Exception e) { - // create accounts - for (int i = 0; i < nb; i++) { - newAccount(i); - } - } - } - - /** - * reinit all created accounts to their initial value. - */ - public void reinitAll() throws RemoteException { - try { - Collection coll = accountLocalHome.findAll(); - for (Iterator it = coll.iterator(); it.hasNext();) { - AccountLocal a = (AccountLocal) it.next(); - a.setBalance(initialValue); - } - } catch (Exception e) { - history.log(BasicLevel.ERROR, "reinitAll:" + e); - } - } - - - /** - * Remove an Account - * @param d1 num of the Account. - */ - public void delAccount(int d1) throws RemoteException, RemoveException { - try { - AccountLocal deb1 = accountLocalHome.findByNum(d1); - deb1.remove(); - history.log(BasicLevel.DEBUG, d1 + "\tREMOVED"); - } catch (FinderException e) { - history.log(BasicLevel.INFO, d1 + "\tNot Found for remove"); - } - } - - /** - * Check all existing Accounts - * @return true if all are OK. - */ - public boolean checkAll() throws RemoteException { - int count = 0; - int total = 0; - boolean ret = true; - try { - Collection coll = accountLocalHome.findAll(); - for (Iterator it = coll.iterator(); it.hasNext();) { - count++; - AccountLocal a = (AccountLocal) it.next(); - int balance = a.getBalance(); - String name = a.getName(); - if (balance < 0) { - history.log(BasicLevel.ERROR, name + " bad balance: " + balance); - ret = false; - } else { - history.log(BasicLevel.DEBUG, name + " : FINAL BALANCE=" + balance); - total += balance; - } - } - } catch (Exception e) { - history.log(BasicLevel.ERROR, "checkAllAccounts:" + e); - return false; - } - int exp = initialValue * count; - if (total != exp) { - history.log(BasicLevel.ERROR, "checkAllAccounts: bad total: " + total + " (expected: " + exp + ")"); - return false; - } - history.log(BasicLevel.DEBUG, "CheckAll OK"); - return ret; - } - - /** - * Check an existing Account - * @param a num of the Account. - * @return true if OK. - */ - public boolean checkAccount(int a) throws RemoteException { - boolean ret = false; - AccountLocal m = null; - - // retry several times, because this operation may be rolledback - // in case of deadlock. - Exception exc = null; - int retry; - for (retry = 0; retry < 20; retry++) { - try { - history.log(BasicLevel.DEBUG, "\ta_" + a + "\tCHECKED try #" + retry); - m = accountLocalHome.findByNum(a); - int b = m.getBalance(); - if (b >= 0) { - ret = true; - } else { - history.log(BasicLevel.WARN, "bad balance=" + b); - } - return ret; - } catch (javax.ejb.ObjectNotFoundException e1) { - try { - newAccount(a); - ret = true; - break; - }catch (Exception ex) { - ret= false; - break; - } - } catch (Exception e) { - exc = e; - history.log(BasicLevel.DEBUG, "retrying " + retry); - sleep(retry + 1); - } - } - history.log(BasicLevel.WARN, "cannot check account: " + exc); - return ret; - } - - /* - * read balance for this Account, in a transaction. - * @param a num of the Account. - * @return balance - */ - public int readBalanceTx(int a) throws RemoteException { - //checkAccount(a); - return readBalance(a); - } - - /** - * read balance for this Account - * @param a num of the Account. - * @return balance - */ - public int readBalance(int a) throws RemoteException { - int ret; - try { - AccountLocal acc = getAccount(a); - if (acc == null) { - history.log(BasicLevel.ERROR, "Cannot get account"); - throw new RemoteException("Cannot get account " + a); - } - ret = acc.getBalance(); - } catch (Exception e) { - history.log(BasicLevel.ERROR, "Cannot read balance for " + a + ": " + e); - throw new RemoteException("Cannot read balance for " + a); - } - history.log(BasicLevel.DEBUG, "READ " + a + " = " + ret); - return ret; - } - - /** - * move form an Account to another one. - * @param d num of the debit Account. - * @param c num of the credit Account. - * @param v value to be moved - * @param d delay in second for the operation. - */ - public void move(int d, int c, int v, int delay) throws RemoteException { - history.log(BasicLevel.DEBUG, "MOVE " + v + " from " + d + " to " + c); - try { - AccountLocal cred = getAccount(c); - AccountLocal deb = getAccount(d); - cred.credit(v); - sleep(delay); - deb.debit(v); - } catch (TransactionRolledbackLocalException e) { - history.log(BasicLevel.WARN, "move: Rollback transaction"); - return; - } catch (EJBException e) { - history.log(BasicLevel.ERROR, "Cannot move:" + e); - return; - } - } - - /** - * Read balance on last accessed account - */ - public int readBalance() throws RemoteException { - int ret; - try { - ret = last.getBalance(); - } catch (NoSuchObjectLocalException e) { - throw new NoSuchObjectException("Account destroyed"); - } catch (Exception e) { - throw new RemoteException("Cannot read last balance"); - } - return ret; - } - - /** - * Create an Account, but set rollback only the transaction - * @return - * @throws RemoteException - */ - public void createRollbackOnly(int i) throws RemoteException { - try { - last = newAccount(i); - } catch (CreateException c) { - throw new RemoteException("Cannot create account"); - } - ejbContext.setRollbackOnly(); - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /** - * Create a new Account. The account may exist (for example, when running - * tests twice without restarting the Container, or if created by another - * session meanwhile) - * @param i account number (its PK) - */ - private AccountLocal newAccount(int i) throws RemoteException, CreateException { - AccountLocal ml = null; - ml = accountLocalHome.create(i, initialValue); - history.log(BasicLevel.DEBUG, "New Account has been created\t" + i); - return ml; - } - - /** - * Create an Account if it does not exist yet. - * @param c1 num of the Account. - */ - private AccountLocal getAccount(int c1) throws RemoteException { - history.log(BasicLevel.DEBUG, "Get Account\t" + c1); - try { - last = accountLocalHome.findByNum(c1); - } catch (FinderException e) { - try { - last = newAccount(c1); - } catch (CreateException c) { - throw new RemoteException("Cannot create account"); - } - } - return last; - } - - /** - * sleep n seconds - * @param n seconds - */ - private void sleep(int n) { - try { - Thread.sleep(1000 * n); - } catch (InterruptedException e) { - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountEC2.java deleted file mode 100644 index 631d51a395..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountEC2.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.beanexc; - -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.EJBContext; -import javax.ejb.RemoveException; -import javax.ejb.CreateException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This is an entity bean with "container managed persistence version 2". - * The state of an instance is stored into a relational database. - * @author Philippe Durieux, Philippe Coq, Helene Joanin - */ -public abstract class AccountEC2 extends AccountCommon implements EntityBean { - - boolean forceToFailEjbStore; - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - public abstract int getNumber(); - public abstract void setNumber(int n); - public abstract long getBalance(); - public abstract void setBalance(long d); - public abstract String getCustomer(); - public abstract void setCustomer(String c); - - - - public EJBContext getContext() { - return entityContext; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - if (forceToFailEjbStore) { - forceToFailEjbStore = false; - throw new RuntimeException("RunTimeExceptionInEjbStore"); - } - } - - /** - * This method is common for impl and expl bean - * it is used to test exception raised in ejbRemove() - * with unspecified transactional context (Required attribute). - * This method throws a RemoveException when the value of the PK is between 999990 and 999999 - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - AccountPK pk = (AccountPK) entityContext.getPrimaryKey(); - if ((pk.number >= 999990) && (pk.number <= 999999)) { - logger.log(BasicLevel.DEBUG, - "RemoveException throwned by bean provider in ejbRemove"); - throw new RemoveException("RemoveException throwned by bean provider in ejbRemove"); - } - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - entityContext = null; - } - - public AccountPK ejbCreate(int val_number, String val_customer, long val_balance) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(val_number); - setCustomer(val_customer); - setBalance(val_balance); - return (null); - } - - /** - * this method is common for impl and expl bean - * it is used to test exception raised in ejbCreate - * with unspecified transactional context (Required attribute) - * CAUTION: Do not call ejbCreate inside another ejbCreate (known bug) - */ - public AccountPK ejbCreate(int flag) throws CreateException, AppException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(1951); - setCustomer("Myself"); - setBalance(10000); - if (flag == 0) { - entityContext.setRollbackOnly(); - throw new AppException("AppException in ejbCreate(boolean)"); - } else { - int zero = 0; - float f = 10 / zero; - } - return (null); - } - - /** - * this method is common for impl and expl bean - * NotSupported attr. - * CAUTION: Do not call ejbCreate inside another ejbCreate (known bug) - */ - public AccountPK ejbCreate(boolean flag) throws CreateException, AppException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(1951); - setCustomer("Myself"); - setBalance(10000); - if (flag) { - throw new AppException("AppException in ejbCreate(boolean)"); - } else { - int zero = 0; - float f = 10 / zero; - } - return (null); - } - - public void ejbPostCreate(int val_number, String val_customer, long val_balance) { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate(int flag) { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate(boolean flag) { - logger.log(BasicLevel.DEBUG, ""); - } - - public void doFailedEjbStore_1() { - logger.log(BasicLevel.DEBUG, ""); - setBalance(1000); - forceToFailEjbStore = true; - } - public void doFailedEjbStore_2() { - logger.log(BasicLevel.DEBUG, ""); - setBalance(2000); - forceToFailEjbStore = true; - } - public void doFailedEjbStore_3() { - logger.log(BasicLevel.DEBUG, ""); - setBalance(3000); - forceToFailEjbStore = true; - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountSL.java deleted file mode 100644 index d93b90fb9c..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/beanexc/AccountSL.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.beanexc; - -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.EJBContext; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Stateless Session Bean - * @author Philippe Coq - */ -public class AccountSL extends AccountCommon implements SessionBean { - protected SessionContext sessionContext = null; - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setSessionContext(SessionContext t) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - sessionContext = t; - } - - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setBalance(long val) { - logger.log(BasicLevel.DEBUG, ""); - } - - public EJBContext getContext() { - logger.log(BasicLevel.DEBUG, ""); - return sessionContext; - } - - public void doFailedEjbStore_1() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void doFailedEjbStore_2() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void doFailedEjbStore_3() { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/Moscone.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/Moscone.java deleted file mode 100644 index 4ff31de44e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/Moscone.java +++ /dev/null @@ -1,17 +0,0 @@ -// Moscone.java - -package org.objectweb.jonas.jtests.beans.bmt; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Moscone remote interface - */ -public interface Moscone extends EJBObject { - public void tx_start() throws RemoteException; - public void tx_commit() throws RemoteException; - public void tx_rollback() throws RemoteException; - public void moscone1() throws RemoteException; - public void moscone2() throws RemoteException; -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/MosconeST.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/MosconeST.java deleted file mode 100644 index 4747978487..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/bmt/MosconeST.java +++ /dev/null @@ -1,324 +0,0 @@ -// MosconeST.java -// Stateful Session Bean - -package org.objectweb.jonas.jtests.beans.bmt; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.SQLException; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.sql.DataSource; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; -import javax.transaction.UserTransaction; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Stateful Session bean that manages transactions inside the bean. - * This type of bean must NOT implement SessionSynchronization. - */ -public class MosconeST implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - // state of the sessionbean - Context ictx = null; - UserTransaction ut = null; - Connection cnx = null; - ResultSet rs = null; - Statement st = null; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if( logger == null) - logger = Log.getLogger("org.objectweb.jonas_tests"); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - private void getConnection() throws RemoteException { - try { - ictx = new InitialContext(); - DataSource ds = (DataSource) PortableRemoteObject.narrow(ictx.lookup("jdbc_1"), DataSource.class); - cnx = ds.getConnection(); - } catch (Exception e) { - throw new RemoteException("cannot get connection: " + e); - } - } - - private void closeConnection() throws RemoteException { - try { - if (cnx != null) { - cnx.close(); - } - } catch (Exception e) { - throw new RemoteException("cannot close connection: " + e); - } - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Moscone implementation - // ------------------------------------------------------------------ - - /** - * The following method start a transaction that will be continued - * in other methods of this bean. - */ - public void tx_start() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - // Obtain the UserTransaction interface - try { - ut = ejbContext.getUserTransaction(); - } catch (IllegalStateException e) { - logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); - throw new RemoteException("Can't get UserTransaction:", e); - } - - // Start a global transaction - try { - ut.begin(); - } catch (NotSupportedException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } - } - - /** - * This method commits the current transaction, started previously by tx_start(). - */ - public void tx_commit() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - // Commit this GLOBAL transaction - try { - ut.commit(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't commit Transaction"); - throw new RemoteException("Can't commit Transaction:", e); - } - } - - /** - * This method rolls back the current transaction, started previously by tx_start(). - */ - public void tx_rollback() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - // Roll back this GLOBAL transaction - try { - ut.rollback(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't rollback Transaction"); - throw new RemoteException("Can't rollback Transaction:", e); - } - } - - /** - * This method open a connection before starting transactions. - */ - public void moscone1() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - getConnection(); - - // Obtain the UserTransaction interface - try { - ut = ejbContext.getUserTransaction(); - } catch (IllegalStateException e) { - logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); - throw new RemoteException("Can't get UserTransaction:", e); - } - - // Start a global transaction - try { - ut.begin(); - } catch (NotSupportedException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } - - // work with connection. - try { - String ret = null; - st = cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = st.executeQuery("SELECT * FROM JT2_MARCHE"); - if (rs.first()) { - do { - ret += rs.getInt("IDMAR") + ":" + rs.getString("NOM") + "\n"; - } while(rs.next()); - } - st.close(); - } catch (SQLException e) { - throw new RemoteException("Error working on database: " + e); - } - - // Commit this GLOBAL transaction - try { - ut.commit(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't commit Transaction"); - throw new RemoteException("Can't commit Transaction:", e); - } - - closeConnection(); - } - - /** - * This method open a connection before starting transactions. - */ - public void moscone2() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - int count = 0; - - getConnection(); - - // Obtain the UserTransaction interface - try { - ut = ejbContext.getUserTransaction(); - } catch (IllegalStateException e) { - logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); - throw new RemoteException("Can't get UserTransaction:", e); - } - - // Start a global transaction - try { - ut.begin(); - } catch (NotSupportedException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } - - try { - // Count the number of lines - st = cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = st.executeQuery("SELECT * FROM JT2_MARCHE"); - - if (rs.first()) { - do { - count++; - } while(rs.next()); - } - - // try to add a line - st.execute("insert into JT2_MARCHE values(5, 'Philippe Morris')"); - - st.close(); - } catch (SQLException e) { - throw new RemoteException("Error working on database: " + e); - } - - // Rollback this GLOBAL transaction: The line should not be added! - try { - ut.rollback(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't commit Transaction"); - throw new RemoteException("Can't commit Transaction:", e); - } - - try { - // Count the number of lines again - int count2 = 0; - st = cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = st.executeQuery("SELECT * FROM JT2_MARCHE"); - - if (rs.first()) { - do { - count2++; - } while(rs.next()); - } - - st.close(); - - // Check that we did not change the database - if (count2 > count) { - throw new RemoteException("Bad result on this test:" + count2); - } - } catch (SQLException e) { - throw new RemoteException("Error working on database: " + e); - } - - closeConnection(); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/cluster/IdentityEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/cluster/IdentityEC.java deleted file mode 100644 index f61f315101..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/cluster/IdentityEC.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.objectweb.jonas.jtests.beans.cluster; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -public class IdentityEC implements EntityBean { - - static private Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistence. - // ------------------------------------------------------------------ - public String name; - public int number; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, "="+number); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, "="+number); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, "="+number); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String s, int i) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - name = s; - number = i; - logger.log(BasicLevel.DEBUG, "="+number); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String s, int i) throws CreateException { - logger.log(BasicLevel.DEBUG, "="+number); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, "="+number); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, "="+number); - } - - // ------------------------------------------------------------------ - // Identity implementation - // ------------------------------------------------------------------ - - /** - * getName - */ - public String getName() { - logger.log(BasicLevel.DEBUG, "="+number); - return name; - } - - /** - * getNumber - */ - public int getNumber() { - logger.log(BasicLevel.DEBUG, "="+number); - return number; - } - - /** - * setNumber - */ - public void setNumber(int val) { - number = val; - logger.log(BasicLevel.DEBUG, "="+number); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/AccountEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/AccountEC2.java deleted file mode 100644 index fd4c48f5ad..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/AccountEC2.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This is an entity bean with "container managed persistence version 2.x". - * This bean is used to test an entity with a primary key that maps a java.lang.Integer - * single field. - * @author Helene Joanin - */ -public abstract class AccountEC2 implements EntityBean { - - static protected Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract Integer getNumber(); - public abstract void setNumber(Integer numtest); - - public abstract String getCustomer(); - public abstract void setCustomer(String customer); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.Integer ejbCreate(int num, String s) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setNumber(new Integer(num)); - setCustomer(new String(s)); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int num, String s) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Account implementation - // ------------------------------------------------------------------ - - /** - * getNumberPrimitive() - */ - public int getNumberPrimitive() { - logger.log(BasicLevel.DEBUG, ""); - return getNumber().intValue(); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/BDateEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/BDateEC2.java deleted file mode 100644 index 0081b2c325..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/BDateEC2.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * - */ -public abstract class BDateEC2 implements javax.ejb.EntityBean { - - static private Logger logger = null; - javax.ejb.EntityContext ejbContext; - - - public java.util.Date ejbCreate(int f1, - int f2, - java.util.Date f3) throws javax.ejb.CreateException{ - - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setField1(f1); - setField2(f2); - setField3(f3); - return null; - } - - public void ejbPostCreate(int f1, int f2, java.util.Date f3) { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Persistent fields - // - // ------------------------------------------------------------------ - public abstract int getField1(); - public abstract void setField1(int f1); - - public abstract int getField2(); - public abstract void setField2(int f2); - - public abstract java.util.Date getField3(); - public abstract void setField3(java.util.Date f3); - - // ------------------------------------------------------------------ - // Standard call back methods - // ------------------------------------------------------------------ - - - public void setEntityContext(javax.ejb.EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/E4QueryEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/E4QueryEC2.java deleted file mode 100644 index 0b4a2f51f5..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/E4QueryEC2.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This is an entity bean with "container managed persistence version 2.x". - * The state of an instance is stored into a relational database. - * @author Helene Joanin - */ - -public abstract class E4QueryEC2 implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - public abstract String getId(); - public abstract void setId(String s); - public abstract String getFstring(); - public abstract void setFstring(String s); - public abstract int getFint(); - public abstract void setFint(int i); - public abstract double getFdouble(); - public abstract void setFdouble(double i); - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String id, String s, int i, double d) throws CreateException { - logger.log(BasicLevel.DEBUG, "create "+id+","+s+","+i+","+d); - setId(id); - setFstring(s); - setFint(i); - setFdouble(d); - return(null); - } - - public void ejbPostCreate(String id, String s, int i, double d){ - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/PersonEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/PersonEC2.java deleted file mode 100644 index 4e6e0ba6f6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/PersonEC2.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -/** - * This is an entity bean with "container managed persistence version 2.x". - * This bean is used to test an entity with an unknown primary key class at the development phase. - * @author Helene Joanin - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ -public abstract class PersonEC2 implements EntityBean { - - static protected Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract Integer getNumber(); - public abstract void setNumber(Integer num); - - public abstract String getName(); - public abstract void setName(String name); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.Object ejbCreate(int i, String s) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setNumber(new Integer(i)); - setName(new String(s)); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int i, String s) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Person implementation - // ------------------------------------------------------------------ - - /** - * getNumberPrimitive - */ - public int getNumberPrimitive() { - logger.log(BasicLevel.DEBUG, ""); - return getNumber().intValue(); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/SimpleEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/SimpleEC2.java deleted file mode 100644 index 2e9042dd30..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/SimpleEC2.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This is an entity bean with "container managed persistence version 2.x". - * The state of an instance is stored into a relational database. - * The following table should exist : - * ebasicSimpleEC2 - * c_testname varchar(30) primarey key - * c_info integer - * c_numtest integer - * @author Philippe Coq, Philippe Durieux, Helene Joanin - */ - -public abstract class SimpleEC2 implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - public abstract int getInfo(); - public abstract void setInfo(int info); - - public abstract int getNumTest(); - public abstract void setNumTest(int numtest); - - public abstract String getTestName(); - public abstract void setTestName(String testname); - - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String name, int info, int num) throws CreateException { - logger.log(BasicLevel.DEBUG, "create"+info+","+name+","+num); - setInfo(info); - setNumTest(num); - setTestName(name); - return(null); - } - - public void ejbPostCreate(String name, int info, int num) { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * loop back on the same bean instance. - * This is forbidden when bean is non reentrant. - * @return true if test passed. - * @throws RemoteException - */ - public boolean loopBack() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - boolean pass = false; - Simple myref = (Simple) entityContext.getEJBObject(); - try { - myref.getNumTest(); - } catch (RemoteException e) { - logger.log(BasicLevel.DEBUG, "expected exception:" + e); - pass = true; - } - return pass; - } - - /** - * loop back on the same bean instance. - * This is forbidden when bean is non reentrant. - * @return true if test passed. - * @throws RemoteException - */ - public boolean loopBackTx() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - boolean pass = false; - Simple myref = (Simple) entityContext.getEJBObject(); - try { - myref.getNumTest(); - } catch (RemoteException e) { - logger.log(BasicLevel.DEBUG, "expected exception:" + e); - pass = true; - } - return pass; - } - - public void nullPointerException() throws RemoteException { - Account acc = null; - acc.hashCode(); - } - - /** - * Check the set of allowed operations - * See EJB 2.1 spec - 12.1.6 - */ - public void ejbHomeGlobalOpe() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - if (entityContext == null) { - throw new RemoteException("null entityContext"); - } - entityContext.getEJBHome(); - // This bean has no local interface - try { - entityContext.getEJBLocalHome(); - } catch (IllegalStateException e) { - } - entityContext.getCallerPrincipal(); - entityContext.getRollbackOnly(); - entityContext.isCallerInRole("role"); - entityContext.getTimerService(); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/pkautoObjectEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/pkautoObjectEC2.java deleted file mode 100644 index 04e96c202b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ebasic/pkautoObjectEC2.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * --------------------------------------------------------------------------$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ebasic; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This is an entity bean with "container managed persistence version 2". - * This bean is used to test an entity with auto generated primary key - * @author Jerome Camilleri - */ -public abstract class pkautoObjectEC2 implements javax.ejb.EntityBean { - - static protected Logger logger = null; - javax.ejb.EntityContext ejbContext; - - - public java.lang.Object ejbCreate(int f1, int f2) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setField1(f1); - setField2(f2); - return null; - } - - public void ejbPostCreate(int f1, int f2) { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Abstract Accessor methods for Persistent fields - // ------------------------------------------------------------------ - public abstract int getField1(); - public abstract void setField1(int f1); - - public abstract int getField2(); - public abstract void setField2(int f2); - - // ------------------------------------------------------------------ - // Standard call back methods - // ------------------------------------------------------------------ - - public void setEntityContext(javax.ejb.EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ejbql/SessionTestBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ejbql/SessionTestBean.java deleted file mode 100644 index 56c130d809..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/ejbql/SessionTestBean.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.ejbql; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Stateless Session useful to do some specifics tests which local interfaces are needed. - * @author Helene Joanin - */ -public class SessionTestBean implements SessionBean { - - static protected Logger logger = null; - protected SessionContext ctx = null; - protected CustomerHomeLocal hCustomer = null; - protected PhoneHomeLocal hPhone = null; - - // SessionBean methods implementation - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - this.ctx = ctx; - try { - InitialContext inctx = new InitialContext(); - hCustomer = (CustomerHomeLocal) inctx.lookup("java:comp/env/ejb/CustomerHomeLocal"); - hPhone = (PhoneHomeLocal) inctx.lookup("java:comp/env/ejb/PhoneHomeLocal"); - } catch (Exception e) { - throw new javax.ejb.EJBException(e); - } - } - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // SessionTestRemote implementation - public Integer getCustomerWithPhone(String phoneNumber) throws EJBException { - try { - PhoneLocal phone = hPhone.findByNumber(phoneNumber); - CustomerLocal customer = hCustomer.findCustomerWithPhone(phone); - return customer.getId(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot get the customer with phone " + phoneNumber, e); - throw new EJBException("Cannot get the customer with phone " + phoneNumber, e); - } - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/etype/EtypeBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/etype/EtypeBean.java deleted file mode 100644 index be086ff09b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/etype/EtypeBean.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.etype; - -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This class implements the common code of all the entities beans classes of the etype/* tests. - * @author Helene Joanin - * Contributor(s): - */ - -public abstract class EtypeBean implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FileEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FileEC.java deleted file mode 100644 index 8a7283a4c6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FileEC.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import java.io.Serializable; -import java.rmi.RemoteException; -import javax.ejb.EJBException; -import javax.ejb.EJBHome; -import javax.ejb.EJBLocalHome; -import javax.ejb.EJBMetaData; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.ejb.CreateException; -import javax.ejb.TimedObject; -import javax.ejb.Timer; -import javax.ejb.TimerHandle; -import javax.ejb.TimerService; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Implementation for the bean FileEC. - * @author Philippe Durieux - */ -public class FileEC implements EntityBean, TimedObject { - - protected static Logger logger = null; - EntityContext ejbContext; - InitialContext ictx; - Context myEnv; - PaperLocalHome phome; - PaperLocal p1; - PaperLocal p2; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String name; - public String p1pk; - public String p2pk; - public int count; - - /** - * Check environment variables - */ - void checkEnv(String method) { - - // Check directly in my context - logger.log(BasicLevel.DEBUG, "Check directly in my context"); - try { - String value = (String) myEnv.lookup("myname"); - if (!value.equals("myentity")) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup failed: myname=" + value); - throw new EJBException("FileEC 1: " + method); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup raised exception:\n" + e); - throw new EJBException("FileEC 2: " + method); - } - // Check from initial Context - logger.log(BasicLevel.DEBUG, "Check from initial Context"); - try { - String value = (String) ictx.lookup("java:comp/env/myname"); - if (!value.equals("myentity")) { - logger.log(BasicLevel.ERROR, ": ictx.lookup failed: myname=" + value); - throw new EJBException("FileEC 6: " + method); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FileEC 7: " + method); - } - logger.log(BasicLevel.DEBUG, ": checkEnv OK"); - } - - // ------------------------------------------------------------------ - // TimedObject implementation - // ------------------------------------------------------------------ - - /* - * @param timer the Timer object - * @see javax.ejb.TimedObject#ejbTimeout(javax.ejb.Timer) - */ - public void ejbTimeout(Timer timer) { - logger.log(BasicLevel.DEBUG, ""); - Serializable sz = timer.getInfo(); - if (!(sz instanceof Integer)) { - logger.log(BasicLevel.ERROR, "Bad Info"); - return; - } - int action = ((Integer)sz).intValue(); - boolean ok = true; - } - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Called by the container after the instance has been created. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - // Get initial Context - ictx = new InitialContext(); - myEnv = (Context) ictx.lookup("java:comp/env"); - } catch (NamingException e) { - throw new EJBException("FileEC: Cannot get filehome:" + e); - } - checkEnv("setEntityContext"); - - // Check that we can do "getEJBHome" - EJBHome home = ctx.getEJBHome(); - if (home == null) { - throw new EJBException("FileEC: setEntityContext cannot get EJBHome"); - } - // Check that we can do "getEJBLocalHome" - EJBLocalHome homel = ctx.getEJBLocalHome(); - if (homel == null) { - throw new EJBException("FileEC: setEntityContext cannot get EJBLocalHome"); - } - // Check that we can do "getEJBMetaData" - try { - EJBMetaData md = home.getEJBMetaData(); - } catch (RemoteException e) { - throw new EJBException("FileEC: setEntityContext cannot get EJBMetaData"); - } - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - try { - stateUpdate(); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "FileEC ejbActivate raised exception " + e); - throw new EJBException("Error in ejbActivate:" + e); - } - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - // raz values to verify that activation is ok. - phome = null; - p1 = null; - p2 = null; - } - - /** - * Persistent state has been loaded just before this method is invoked - * by the container. - * Must reinit here non persistent data. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - p1 = null; - if (p1pk.length() > 0) { - try { - p1 = phome.findByPrimaryKey(p1pk); - } catch (FinderException e) { - } - } - p2 = null; - if (p2pk.length() > 0) { - try { - p2 = phome.findByPrimaryKey(p2pk); - } catch (FinderException e) { - } - } - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // ejbCreate methods - // ------------------------------------------------------------------ - - public String ejbCreate(String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - this.name = name; - return null; // In CMP, should return null. - } - - public String ejbPostCreate(String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - try { - stateUpdate(); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "FileEC ejbPostCreate raised exception " + e); - throw new CreateException("Error in ejbPostCreate:" + e); - } - return null; // In CMP, should return null. - } - - // ------------------------------------------------------------------ - // File / FileLocal implementation - // ------------------------------------------------------------------ - - public TimerHandle getTimerHandle() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = ejbContext.getTimerService(); - Timer mt = timerservice.createTimer(300 * 1000, new Integer(1)); - TimerHandle th = mt.getHandle(); - return th; - } - - public void cancelTimer(TimerHandle th) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Timer mt = th.getTimer(); - mt.cancel(); - } - - public int getP1Value() { - logger.log(BasicLevel.DEBUG, ""); - int ret = p1.getValue(); - return ret; - } - - public int getP2Value() { - logger.log(BasicLevel.DEBUG, ""); - int ret = p2.getValue(); - return ret; - } - - public String getName() { - logger.log(BasicLevel.DEBUG, ""); - return this.name; - } - - public int getCount() { - logger.log(BasicLevel.DEBUG, ""); - return this.count; - } - - public PaperLocal getP1() { - logger.log(BasicLevel.DEBUG, ""); - return p1; - } - - public PaperLocal getP2() { - logger.log(BasicLevel.DEBUG, ""); - return p2; - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /** - * init non persistent bean data. - * This should be called when instance is created or activated. - */ - private void stateUpdate() throws NamingException { - // lookup paperhome in JNDI - phome = (PaperLocalHome) ictx.lookup("java:comp/env/ejb/paper"); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FolderSY.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FolderSY.java deleted file mode 100644 index 0142e7c127..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/FolderSY.java +++ /dev/null @@ -1,527 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import java.io.Serializable; -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Enumeration; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.NoSuchObjectLocalException; -import javax.ejb.RemoveException; -import javax.ejb.SessionBean; -import javax.ejb.SessionSynchronization; -import javax.ejb.SessionContext; -import javax.ejb.Timer; -import javax.ejb.TimerHandle; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.sql.DataSource; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * FolderSY implementation - * This bean is a stateful session bean that implements SessionSynchronization - * @author Philippe Durieux, Philippe Coq - */ -public class FolderSY implements SessionBean, SessionSynchronization { - - protected static Logger logger = null; - SessionContext ejbContext; - transient InitialContext ictx; - Context myEnv; - FileHome filehome; - PaperLocalHome paperhome; - Paper2LocalHome paper2home; - Paper3LocalHome paper3home; - boolean rollbackOnly; - - /** - * Check environment variables - */ - void checkEnv(String method) { - - // Check directly in my context - logger.log(BasicLevel.DEBUG, "Check directly in my context"); - try { - String value = (String) myEnv.lookup("myname"); - if (!value.equals("mysession")) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup failed: myname=" + value); - throw new EJBException("FolderSY 1: " + method); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup raised exception:\n" + e); - throw new EJBException("FolderSY 2: " + method); - } - // Idem with compound name - logger.log(BasicLevel.DEBUG, "Idem with compound name"); - try { - String value = (String) myEnv.lookup("dir1/dir2/name"); - if (!value.equals("sessionvalue")) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup failed: dir1/dir2/name=" + value); - throw new EJBException("FolderSY 3: " + method); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup raised exception:\n" + e); - throw new EJBException("FolderSY 4: " + method); - } - // Check from initial Context - logger.log(BasicLevel.DEBUG, "Check from initial Context"); - try { - String value = (String) ictx.lookup("java:comp/env/myname"); - if (!value.equals("mysession")) { - logger.log(BasicLevel.ERROR, ": ictx.lookup failed: myname=" + value); - throw new EJBException("FolderSY 6: " + method); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FolderSY 7: " + method); - } - - // Check datasource directly - logger.log(BasicLevel.DEBUG, "Check datasource directly"); - DataSource ds1 = null; - try { - ds1 = (DataSource) ictx.lookup("jdbc_1"); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FolderSY 8: " + method); - } - Connection con = null; - if (!method.equals("afterCompletion")) { - try { - con = (Connection) ds1.getConnection(); - if (con.isClosed()) { - logger.log(BasicLevel.ERROR, ": connection is closed"); - throw new EJBException("FolderSY 8a: " + method); - } - con.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": getConnection:\n" + e); - throw new EJBException("FolderSY 8b: " + method); - } - } - - // Check DataSource from resource ref in bean environment - logger.log(BasicLevel.DEBUG, "Check DataSource from resource ref"); - DataSource ds2 = null; - try { - // The name is the one defined in FolderSY.xml - ds2 = (DataSource) myEnv.lookup("jdbc/mydb"); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FolderSY 9: " + method); - } - if (!method.equals("afterCompletion")) { - try { - con = (Connection) ds2.getConnection(); - if (con.isClosed()) { - logger.log(BasicLevel.ERROR, ": connection is closed"); - throw new EJBException("FolderSY 9a: " + method); - } - con.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": getConnection:\n" + e); - throw new EJBException("FolderSY 9b: " + method); - } - } - - // Check boolean values - logger.log(BasicLevel.DEBUG, "Check boolean values"); - try { - Boolean value = (Boolean) ictx.lookup("java:comp/env/bVrai"); - if (!value.booleanValue()) { - logger.log(BasicLevel.ERROR, ": ictx.lookup failed: bVrai=" + value); - throw new EJBException("FolderSY 10a: " + method); - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FolderSY10a: " + method); - } - try { - Boolean value = (Boolean) ictx.lookup("java:comp/env/bFaux"); - if (value.booleanValue()) { - logger.log(BasicLevel.ERROR, ": ictx.lookup failed: bFaux=" + value); - throw new EJBException("FolderSY 10b: " + method); - } - // lookup char in env-entry - Character c = (Character) ictx.lookup("java:comp/env/testChar"); - - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FolderSY10b: " + method); - } - - logger.log(BasicLevel.DEBUG, ": checkEnv OK"); - } - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - // Get initial Context - ictx = new InitialContext(); - myEnv = (Context) ictx.lookup("java:comp/env"); - // lookup filehome in JNDI - filehome = (FileHome) PortableRemoteObject.narrow(ictx.lookup("java:comp/env/ejb/file"), FileHome.class); - paperhome = (PaperLocalHome) PortableRemoteObject.narrow(ictx.lookup("java:comp/env/ejb/paperec2"), PaperLocalHome.class); - paper2home = (Paper2LocalHome) PortableRemoteObject.narrow(ictx.lookup("java:comp/env/ejb/paper2"), Paper2LocalHome.class); - paper3home = (Paper3LocalHome) PortableRemoteObject.narrow(ictx.lookup("java:comp/env/ejb/paper3"), Paper3LocalHome.class); - } catch (NamingException e) { - throw new EJBException("FolderSY: Cannot get filehome:" + e); - } - checkEnv("setSessionContext"); - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("ejbRemove"); - } - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("ejbCreate"); - rollbackOnly = false; - } - - public void ejbCreateForRollback() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("ejbCreate"); - rollbackOnly = true; - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("ejbPassivate"); - ictx = null; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - try { - // Get initial Context - ictx = new InitialContext(); - } catch (NamingException e) { - throw new EJBException("FolderSY: Cannot get Initial Context:" + e); - } - checkEnv("ejbActivate"); - } - - // ------------------------------------------------------------------ - // SessionSynchronization implementation - // ------------------------------------------------------------------ - - public void afterBegin() { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("afterBegin"); - try { - ejbContext.getRollbackOnly(); - } catch (IllegalStateException e) { - throw new EJBException("Cannot call getRollbackOnly in afterBegin"); - } - if (rollbackOnly) { - try { - ejbContext.setRollbackOnly(); - } catch (IllegalStateException e) { - throw new EJBException("Cannot call setRollbackOnly in afterBegin"); - } - } - } - - public void beforeCompletion() { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("beforeCompletion"); - try { - ejbContext.getRollbackOnly(); - } catch (IllegalStateException e) { - throw new EJBException("Cannot call getRollbackOnly in beforeCompletion"); - } - if (rollbackOnly) { - try { - ejbContext.setRollbackOnly(); - } catch (IllegalStateException e) { - throw new EJBException("Cannot call setRollbackOnly in afterBegin"); - } - } - } - - public void afterCompletion(boolean committed) { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("afterCompletion"); - // Should not be able to call set or get RollbackOnly here. - try { - ejbContext.getRollbackOnly(); - throw new EJBException("getRollbackOnly forbidden in afterCompletion"); - } catch (IllegalStateException e) { - } - if (rollbackOnly) { - try { - ejbContext.setRollbackOnly(); - throw new EJBException("setRollbackOnly forbidden in afterCompletion"); - } catch (IllegalStateException e) { - } - } - } - - // ------------------------------------------------------------------ - // Folder implementation - // ------------------------------------------------------------------ - - public File newFile(String fname) throws RemoteException, CreateException { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("newFile"); - File ret = filehome.create(fname); - return ret; - } - - public File getFile(String fname) throws RemoteException, FinderException { - logger.log(BasicLevel.DEBUG, ""); - checkEnv("getFile"); - File ret = filehome.findByPrimaryKey(fname); - return ret; - } - - public boolean testTimerCancel(String fname) throws RemoteException, CreateException { - logger.log(BasicLevel.DEBUG, ""); - boolean ret = true; - - // Create a bean implementing TimedObject - File file = filehome.create(fname); - - // Create a Timer on this bean and get its Handle - TimerHandle th = file.getTimerHandle(); - if (th == null) { - logger.log(BasicLevel.WARN, "Null Handle returned"); - return false; - } - - // Check that Timer Info can be read and is correct. - Timer t = th.getTimer(); - Serializable sz = t.getInfo(); - if (!(sz instanceof Integer)) { - logger.log(BasicLevel.WARN, "Non-integer info value returned"); - return false; - } - - // Cancel the timer - file.cancelTimer(th); - - // Check that the TimerHandle cannot be used any longer - try { - th.getTimer(); - logger.log(BasicLevel.WARN, "Timer still accessible after bean remove"); - ret = false; - } catch (NoSuchObjectLocalException e) { - } - - // Remove the bean - try { - file.remove(); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Cannot remove the bean after use."); - return false; - } - return ret; - } - - public boolean testTimerRemoved(String fname) throws RemoteException, CreateException, RemoveException { - logger.log(BasicLevel.DEBUG, ""); - boolean ret = true; - - // Create a bean implementing TimedObject - File file = filehome.create(fname); - - // Create a Timer on this bean and get its Handle - TimerHandle th = file.getTimerHandle(); - if (th == null) { - logger.log(BasicLevel.WARN, "Null Handle returned"); - return false; - } - - // Check that Timer Info can be read and is correct. - Serializable sz = th.getTimer().getInfo(); - if (!(sz instanceof Integer)) { - logger.log(BasicLevel.WARN, "Non-integer info value returned"); - return false; - } - - // Remove the bean (and the timer!) - file.remove(); - - // Check that the TimerHandle cannot be used any longer - try { - th.getTimer(); - logger.log(BasicLevel.WARN, "Timer still accessible after bean remove"); - ret = false; - } catch (NoSuchObjectLocalException e) { - } - return ret; - } - - public void sendRef(Folder f) throws RemoteException { - } - - public void sendInt(int i) throws RemoteException { - } - - public void sendRefTS(Folder f) throws RemoteException { - } - - public void sendIntTS(int i) throws RemoteException { - } - - public Folder getRef(Folder f) throws RemoteException { - return f; - } - - public int getInt(int i) throws RemoteException { - return i; - } - - public Folder getRefTS(Folder f) throws RemoteException { - return f; - } - - public int getIntTS(int i) throws RemoteException { - return i; - } - - public void sendArray(long[] x) throws RemoteException { - } - - public long[] getArray() throws RemoteException { - long[] anArray; - anArray = new long [100]; - for (int i = 0; i < anArray.length; i++) { - anArray[i] = i; - } - return anArray; - } - public int modify(String pname, int val) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - int sum=0; - try { - PaperLocal plocal = paperhome.findByPrimaryKey(pname); - logger.log(BasicLevel.DEBUG, "findByPrimaryKey OK "); - int valb = plocal.getValue(); - logger.log(BasicLevel.DEBUG, "valb= "+valb); - plocal.setValue(val); - sum = paperhome.getTotalValeur(); - logger.log(BasicLevel.DEBUG, "sum= "+sum); - - } catch (FinderException fe) { - - } finally { - // to clean up the changes - ejbContext.setRollbackOnly(); - } - return sum; - } - - public int modifypaper2And3(String pid, int val) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - int sum=0; - try { - Paper2Local plocal2 = paper2home.findByPrimaryKey(pid); - logger.log(BasicLevel.DEBUG, "findByPrimaryKey OK "); - int valb = plocal2.getValeur(); - logger.log(BasicLevel.DEBUG, "valb= "+valb); - plocal2.setValeur(val); - - Paper3Local plocal3 = paper3home.findByPrimaryKey("2"); - String v1 = plocal3.getValide(); - if ( v1 == "1") { - plocal3.setValide("0"); - } else { - plocal3.setValide("1"); - - } - - sum = paper2home.getSumOfValeurs(); - logger.log(BasicLevel.DEBUG, "sum= "+sum); - - } catch (FinderException fe) { - - }finally { - // to clean up the changes - ejbContext.setRollbackOnly(); - } - return sum; - } - - - public int modifypaper2And3WithFinder(String pid, int val) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - int nb=0; - Enumeration eList = null; - try { - Paper2Local plocal2 = paper2home.findByPrimaryKey(pid); - logger.log(BasicLevel.DEBUG, "findByPrimaryKey OK "); - int valb = plocal2.getValeur(); - logger.log(BasicLevel.DEBUG, "valb= "+valb); - plocal2.setValeur(val); - - Paper3Local plocal3 = paper3home.findByPrimaryKey("2"); - String v1 = plocal3.getValide(); - if ( v1 == "1") { - plocal3.setValide("0"); - } else { - plocal3.setValide("1"); - - } - Paper2Local paper2local = null; - eList = paper2home.findAllValide(); - while (eList.hasMoreElements()) { - paper2local =(Paper2Local)javax.rmi.PortableRemoteObject.narrow(eList.nextElement(), Paper2Local.class); - nb++; - } - logger.log(BasicLevel.DEBUG, "nb= "+nb); - - } catch (FinderException fe) { - - }finally { - // to clean up the changes - ejbContext.setRollbackOnly(); - } - return nb; - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper2EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper2EC2.java deleted file mode 100644 index a226817e06..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper2EC2.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This is an entity bean with "container managed persistence version 2.x". - * The state of an instance is stored into a relational database. - * The following table should exist : - * jt2_paper2 - * c_id varchar(30) primarey key - * c_valeur integer - * c_statut integer - * - * @author Philippe Coq - */ - -public abstract class Paper2EC2 implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - // cmp-field - public abstract String getId(); - public abstract void setId(String id); - - public abstract int getValeur(); - public abstract void setValeur(int val); - - public abstract String getStatut(); - public abstract void setStatut(String val); - - // cmr-field - public abstract Paper3Local getPaper3(); - public abstract void setPaper3(Paper3Local p); - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setId(id); - setValeur(0); - setStatut("0"); - return null; // In CMP, should return null. - } - - public void ejbPostCreate(String id) { - logger.log(BasicLevel.DEBUG, ""); - } - public abstract int ejbSelectGetSumOfValeurs() throws javax.ejb.FinderException; - - public int ejbHomeGetSumOfValeurs() throws javax.ejb.FinderException { - int sum = this.ejbSelectGetSumOfValeurs(); - return sum; - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper3EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper3EC2.java deleted file mode 100644 index 261b363614..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/Paper3EC2.java +++ /dev/null @@ -1,113 +0,0 @@ - /* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This is an entity bean with "container managed persistence version 2.x". - * The state of an instance is stored into a relational database. - * The following table should exist : - * jt2_paper3 - * c_statut3 varchar primarey key - * c_valide integer - * - * @author Philippe Coq - */ - -public abstract class Paper3EC2 implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - // cmp-field - public abstract String getStatut3(); - public abstract void setStatut3(String statut); - - public abstract String getValide(); - public abstract void setValide(String val); - - - // cmr-field - public abstract java.util.Collection getPaper2s(); - public abstract void setPaper2s(java.util.Collection p); - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String statut) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setStatut3(statut); - setValide("0"); - return null; // In CMP, should return null. - } - - public void ejbPostCreate(String id) { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC.java deleted file mode 100644 index 743efc94e2..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import javax.ejb.EJBException; -import javax.ejb.EJBLocalHome; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Implementation for the bean PaperEC. - * @author Philippe Durieux, Philippe Coq - */ -public class PaperEC implements EntityBean { - - static protected Logger logger = null; - EntityContext ejbContext; - InitialContext ictx; - Context myEnv; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String name; - public int value; - - /** - * Check environment variables - */ - void checkEnv(String method) { - - // Check directly in my context - logger.log(BasicLevel.DEBUG, "Check directly in my context"); - try { - String value = (String) myEnv.lookup("myname"); - if (!value.equals("myentity")) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup failed: myname=" + value); - throw new EJBException("FileEC 1: " + method); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup raised exception:\n" + e); - throw new EJBException("FileEC 2: " + method); - } - // Check from initial Context - logger.log(BasicLevel.DEBUG, "Check from initial Context"); - try { - String value = (String) ictx.lookup("java:comp/env/myname"); - if (!value.equals("myentity")) { - logger.log(BasicLevel.ERROR, ": ictx.lookup failed: myname=" + value); - throw new EJBException("FileEC 6: " + method); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, ": ictx.lookup raised exception:\n" + e); - throw new EJBException("FileEC 7: " + method); - } - logger.log(BasicLevel.DEBUG, ": checkEnv OK"); - } - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - // Get initial Context - ictx = new InitialContext(); - myEnv = (Context) ictx.lookup("java:comp/env"); - } catch (NamingException e) { - throw new EJBException("PaperEC: Cannot get filehome:" + e); - } - checkEnv("setEntityContext"); - - // Check that we can do "getEJBLocalHome" - EJBLocalHome homel = ctx.getEJBLocalHome(); - if (homel == null) { - throw new EJBException("PaperEC: setEntityContext cannot get EJBLocalHome"); - } - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // ejbCreate methods - // ------------------------------------------------------------------ - - public String ejbCreate(String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - this.name = name; - this.value = 0; - return null; // In CMP, should return null. - } - - public String ejbPostCreate(String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - return null; // In CMP, should return null. - } - - // Not used for PaperEC only for PaperEC2 - public int ejbHomeGetTotalValeur() throws javax.ejb.FinderException { - return 0; - } - // ------------------------------------------------------------------ - // PaperLocal implementation - // ------------------------------------------------------------------ - - public String getName() { - logger.log(BasicLevel.DEBUG, ""); - return this.name; - } - - public int getValue() { - logger.log(BasicLevel.DEBUG, ""); - return this.value; - } - - public void setValue(int v) { - logger.log(BasicLevel.DEBUG, ""); - this.value = v; - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC2.java deleted file mode 100644 index 0a4181a3c1..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/folder/PaperEC2.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.folder; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * This is an entity bean with "container managed persistence version 2.x". - * The state of an instance is stored into a relational database. - * The following table should exist : - * jt2_paper - * c_name varchar(30) primarey key - * c_value integer - * - * @author Philippe Coq, Philippe Durieux, Helene Joanin - */ - -public abstract class PaperEC2 implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - - // Get and Set accessor methods of the bean's abstract schema - public abstract String getName(); - public abstract void setName(String name); - - public abstract int getValue(); - public abstract void setValue(int val); - - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setName(name); - setValue(0); - return null; // In CMP, should return null. - } - - public void ejbPostCreate(String name) { - logger.log(BasicLevel.DEBUG, ""); - } - public abstract int ejbSelectGetTotalValeur() throws javax.ejb.FinderException; - - public int ejbHomeGetTotalValeur() throws javax.ejb.FinderException { - int sum = this.ejbSelectGetTotalValeur(); - return sum; - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/PersonEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/PersonEC.java deleted file mode 100644 index 0b688ee661..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/PersonEC.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// PersonEC.java - -package org.objectweb.jonas.jtests.beans.inherit; - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - - -public class PersonEC extends PersonImpl implements EntityBean { - - static protected Logger logger = null; - protected EntityContext entityContext; - - public IdPK ejbCreate(int val_id, String val_name) throws CreateException { - - logger.log(BasicLevel.DEBUG, - "PersonEC.ejbCreate(int " + val_id + " ,String " + val_name + ")"); - // what should be done in a container managed bean is only the following lines ... - id = val_id; - name = val_name; - age = 1; - - return(null); - } - - public void ejbPostCreate(int val_id, String val_name) { - } - - public void ejbActivate() { - } - - public void ejbPassivate() { - } - - public void ejbLoad() { - } - - public void ejbStore() { - } - - // Test with no RemoveException exception - public void ejbRemove() { - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - } - - public void unsetEntityContext() { - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/UserEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/UserEC.java deleted file mode 100644 index 9e5d599580..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/inherit/UserEC.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// UserEC.java -package org.objectweb.jonas.jtests.beans.inherit; - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -public class UserEC extends UserImpl implements EntityBean { - - static protected Logger logger = null; - - protected EntityContext entityContext; - - public IdPK ejbCreate(int val_id, String val_name) throws CreateException { - - logger.log(BasicLevel.DEBUG, "UserEC.ejbCreate(int " + val_id + " ,String " + val_name + ")"); - - // what should be done in a container managed bean is only the following - // lines ... - id = val_id; - name = val_name; - age = 0; - password = "bidon"; - - return (null); - } - - public void ejbPostCreate(int val_id, String val_name) { - } - - public void ejbActivate() { - } - - public void ejbPassivate() { - } - - public void ejbLoad() { - - } - - public void ejbStore() { - } - - public void ejbRemove() throws RemoveException { - } - - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - } - - public void unsetEntityContext() { - } - - // This method is useful to test the overloaded methods in bean - public String getData() { - return "UserEC.getData"; - } - - // This method is useful to test the bug #301113 - public int methBug301113(int p) { - return p; - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/connectorCASLR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/connectorCASLR.java deleted file mode 100644 index 38fa08e284..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/connectorCASLR.java +++ /dev/null @@ -1,292 +0,0 @@ -// connectorCASLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.j2eeca; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.resource.cci.ConnectionMetaData; -import javax.resource.spi.ConnectionEvent; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import fictional.resourceadapter.CommonClient; -import fictional.resourceadapter.ConnectionImpl; -import fictional.resourceadapter.JtestInteraction; -import fictional.resourceadapter.JtestResourceAdapter; - -/** - * - - */ -public class connectorCASLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private CommonClient cccf = null; //Common Client Connection Factory - private JtestResourceAdapter mcf = null; //Managed Connection Factory - private CommonClient csp = null; //ConnectionSpec - private ConnectionImpl conn = null; - InitialContext ic=null; - JtestInteraction i = null; - ConnectionMetaData cMetaData = null; - String cName = "connectorCASLR"; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas.jtests.j2eeca"); - } - logger.log(BasicLevel.DEBUG, cName+".setSessionContext"); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, cName+".ejbRemove"); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, cName+".ejbCreate"); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, cName+".ejbPassivate"); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, cName+".ejbActivate"); - } - - // ------------------------------------------------------------------ - // connectorCA implementation - // ------------------------------------------------------------------ - /** - * method1 - */ - public void method1(String rar_jndi_name, String testName) - throws Exception - { - logger.log(BasicLevel.DEBUG, "============================ "+testName); - try { - ic = new InitialContext(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: InitialContext failed"); - throw e1; - } - try { - cccf = (CommonClient)ic.lookup(rar_jndi_name); - logger.log(BasicLevel.DEBUG, cName+".method1 : found "+rar_jndi_name); - } catch (Exception e2) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: lookup failed for "+rar_jndi_name); - throw e2; - } - - try { - csp = new CommonClient(); // get a new ConnectionSpec - logger.log(BasicLevel.DEBUG, cName - +".method1 : ConnectionSpec o.k."); - - } catch (Exception e3) { - logger.log(BasicLevel.DEBUG, cName+".method1 : new connection spec failed"); - throw e3; - } - try { - conn = (ConnectionImpl)cccf.getConnection(); - logger.log(BasicLevel.DEBUG, cName+".method1 : getConnection conn="+conn); - if (conn==null) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection returned null connection."); - throw new Exception(""); - } - } catch (Exception e4) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection failed " - +e4.toString()); - throw e4; - } - try { - i = (JtestInteraction)conn.createInteraction(); - } catch (Exception e5) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: create interaction failed"); - throw e5; - } - try { - cMetaData = (ConnectionMetaData)conn.getMetaData(); - } catch (Exception e6) { - logger.log(BasicLevel.DEBUG, cName+".method1 : get ConnectionMetaData failed"); - throw e6; - } - - } - - /** - * closeUp - */ - public void closeUp(int w) { - try { - if (w>0) { - // The CONNECTION_ERROR_OCCURRED indicates that the associated - // ManagedConnection instance is now invalid and unusable. - conn.close(ConnectionEvent.CONNECTION_ERROR_OCCURRED); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed physical connection"); - } else { - // The CONNECTION_CLOSED indicates that connection handle - // is closed, but physical connection still exists - conn.close(); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed connection"); - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".closeUp error: close handle/physical connection failed"); - } - } - /** - * JUnit tests - */ - public boolean isConnectionSpec() { - if (csp==null) return false; - else return true; - } - public boolean isConnection() { - if (conn==null) return false; - else return true; - } - public boolean isInteraction() { - if (i==null) return false; - else return true; - } - public String getConnectionProduct() - throws Exception - { - String s; - try { - s = cMetaData.getEISProductName(); - logger.log(BasicLevel.DEBUG, cName+".getConnectionProduct : ConnectionMetaData.product="+s); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getConnectionProduct error: ConnectionMetaData.getEISProductName() failed"); - throw e; - } - return s; - } - /** - * The application server calls setter methods on the ManagedConnectionFactory instance - * to set various configuration properties on this instance. These properties provide - * information required by the ManagedConnectionFactory instance to create physical - * connections to the underlying EIS. The application server uses an existing property set - * (configured during the deployment of a resource adapter) to set the required properties on - * the ManagedConnectionFactory instance. - * - */ - public String getServerName() - throws Exception - { - logger.log(BasicLevel.DEBUG, cName+".getServerName"); - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - String cp1 = "null"; - if (mcf==null) return cp1; - try { - cp1 = mcf.getServerName(); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getConfigurationProperty error: failed"); - throw e; - } - return cp1; - } - public String getProtocolProperty() - throws Exception - { - logger.log(BasicLevel.DEBUG, cName+".getProtocolProperty"); - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - String p = "null"; - if (mcf==null) return p; - try { - p = mcf.getProtocol(); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getProtocolProperty error: failed"); - throw e; - } - return p; - } - /** - * After the newly created ManagedConnectionFactory instance has been configured with - * its property set, the application server creates a new ConnectionManager instance. - * true returned if ConnectionManager is valid - */ - public boolean getCMInstance() - { - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - if (mcf.getCM()==null) { // ConnectionManager not null - logger.log(BasicLevel.DEBUG, cName+".getCMInstance error: ConnectionManager is null"); - return false; - } - else { - logger.log(BasicLevel.DEBUG, cName+".getCMInstance ConnectionManager is o.k."); - return true; - } - } - public int getMCF_Pwriter() - { - int here=2; - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - try { - if (mcf.getLogWriter()==null) { // PrintWriter not null - logger.log(BasicLevel.DEBUG, cName+".getMCF_Pwriter No PrintWriter registered"); - here=0; - } - else { - logger.log(BasicLevel.DEBUG, cName+".getMCF_Pwriter PrintWriter is o.k."); - here=1; - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+ - ".getMCF_Pwriter error: "+e.toString()); - } - return here; - } - public int getMC_Pwriter() - { - int here=2; - ConnectionImpl conni = (ConnectionImpl)conn; - try { - JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - if (mc.getLogWriter()==null) { // PrintWriter not null - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter No PrintWriter registered in ManagedConnection"); - here=0; - } - else { - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter PrintWriter in ManagedConnection is o.k."); - here=1; - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter error: "+e.toString()); - } - return here; - } - public void setMatchNull(boolean b) { - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - mcf.setMatchNull(b); - } - public int cntListeners() - { - int i = 0; - ConnectionImpl conni = (ConnectionImpl)conn; - try { - JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - i = mc.cntListeners(); - logger.log(BasicLevel.DEBUG, cName+".cntListeners cnt="+i); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".cntListeners error: failed to count Listeners"); - } - return i; - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/runtimeCASLR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/runtimeCASLR.java deleted file mode 100644 index 77675cc31b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/runtimeCASLR.java +++ /dev/null @@ -1,237 +0,0 @@ -// runtimeCASLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.j2eeca; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.resource.spi.ConnectionEvent; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import fictional.resourceadapter.CommonClient; -import fictional.resourceadapter.ConnectionImpl; -import fictional.resourceadapter.JtestResourceAdapter; - - -/* - */ -public class runtimeCASLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private JtestResourceAdapter mcf = null; //Managed Connection Factory - private CommonClient cccf = null; //Common Client Connection Factory - private ConnectionImpl conn = null; - private CommonClient csp = null; //ConnectionSpec - InitialContext ic=null; - private String res_auth = ""; - String cName = "runtimeCASLR"; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas.jtests.j2eeca"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // runtime implementation - // ------------------------------------------------------------------ - public void setResAuth(String ra) { - res_auth=ra; // set to Application or Container - } - - /** - * method1 - */ - public void method1(String rar_jndi_name, String testName) - throws Exception - { - logger.log(BasicLevel.DEBUG, "============================ "+testName); - logger.log(BasicLevel.DEBUG, cName+".method1 : lookup "+rar_jndi_name); - try { - ic = new InitialContext(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: InitialContext failed"); - throw e1; - } - try { - cccf = (CommonClient)ic.lookup(rar_jndi_name); - logger.log(BasicLevel.DEBUG, cName+".method1 : found "+rar_jndi_name); - } catch (Exception e2) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: lookup failed for "+rar_jndi_name); - throw e2; - } - - // - // Component-managed sign-on when file "runtime.xml" contains line below - // - // Application - // - try { - csp = new CommonClient(); // get a new ConnectionSpec - csp.setUserName("Fictional_User_Name"); - csp.setPassword("__Jtest_Pass_word__"); - logger.log(BasicLevel.DEBUG, cName - +".method1 : ConnectionSpec + Fictional_User_Name,__Jtest_Pass_word__"); - } catch (Exception e3) { - logger.log(BasicLevel.DEBUG, cName+".method1 : new connection spec failed"); - throw e3; - } - try { - conn = (ConnectionImpl)cccf.getConnection(); - if (conn==null) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection returned null connection."); - throw new Exception(""); - } - } catch (Exception e4) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection failed " - +e4.toString()); - throw e4; - } - } - - /** - * closeUp - */ - public void closeUp(int w) { - try { - if (w>0) { - // The CONNECTION_ERROR_OCCURRED indicates that the associated - // ManagedConnection instance is now invalid and unusable. - conn.close(ConnectionEvent.CONNECTION_ERROR_OCCURRED); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed physical connection"); - } else { - // The CONNECTION_CLOSED indicates that connection handle - // is closed, but physical connection still exists - conn.close(); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed connection"); - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".closeUp error: close handle/physical connection failed"); - } - } - /** - * JUnit tests - */ - public int getMCF_Pwriter() - { - int here=2; - JtestResourceAdapter mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - try { - if (mcf.getLogWriter()==null) { // PrintWriter not null - logger.log(BasicLevel.DEBUG, cName+".getMCF_Pwriter No PrintWriter registered"); - here=0; - } - else { - logger.log(BasicLevel.DEBUG, cName+".getMCF_Pwriter PrintWriter is o.k."); - here=1; - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+ - ".getMCF_Pwriter error: "+e.toString()); - } - return here; - } - public int getMC_Pwriter() - { - int here=2; - ConnectionImpl conni = (ConnectionImpl)conn; - try { - JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - if (mc.getLogWriter()==null) { // PrintWriter not null - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter No PrintWriter registered in ManagedConnection"); - here=0; - } - else { - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter PrintWriter in ManagedConnection is o.k."); - here=1; - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+ - ".getMC_Pwriter error: "+e.toString()); - } - return here; - } - public String getResAuth() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String ra = mcf.getRes_Auth(); // get real "Application" or "Container" - logger.log(BasicLevel.DEBUG, cName+".getResAuth " - +""+ra+""); - return ra; - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName - +".getResAuth error: failed to find " - +"in ManagedConnectionFactory"); - return ""; - } - } - public String getSecurityPassword() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - //ConnectionImpl conni = (ConnectionImpl)conn; - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String pw = mcf.getPassword(); - logger.log(BasicLevel.DEBUG, cName+".getSecurityPassword (" - +mcf.getRes_Auth()+")password="+pw); - return pw; - } catch (Exception e) { - String pw = mcf.getPassword(); // find default - logger.log(BasicLevel.DEBUG, cName - +".getSecurityPassword error: failed to find ManagedConnectionFactory " - +"instance containing password. Using pw="+pw); - return pw; - } - } - public String getSecurityUserName() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - //ConnectionImpl conni = (ConnectionImpl)conn; // get ConnectionImpl - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String u = mcf.getUserName(); - logger.log(BasicLevel.DEBUG, cName+".getSecurityUserName (" - +mcf.getRes_Auth()+")userName="+u); - return u; - } catch (Exception e) { - String u = mcf.getUserName(); // find default - logger.log(BasicLevel.DEBUG, cName - +".getSecurityUserName error: failed to find ManagedConnectionFactory " - +"instance containing userName. Using="+u); - return u; - } - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/securedCASLR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/securedCASLR.java deleted file mode 100644 index 4b6e65582a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/securedCASLR.java +++ /dev/null @@ -1,189 +0,0 @@ -// securedCASLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.j2eeca; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.resource.spi.ConnectionEvent; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import fictional.resourceadapter.CommonClient; -import fictional.resourceadapter.ConnectionImpl; -import fictional.resourceadapter.JtestResourceAdapter; - - -/** - * - */ -public class securedCASLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private JtestResourceAdapter mcf = null; //Managed Connection Factory - private CommonClient cccf = null; //Common Client Connection Factory - private ConnectionImpl conn = null; - InitialContext ic=null; - private String res_auth = ""; - String cName = "securedCASLR"; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas.jtests.j2eeca"); - } - logger.log(BasicLevel.DEBUG, cName+".setSessionContext"); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * closeUp - */ - public void closeUp(int w) { - try { - if (w>0) { - // The CONNECTION_ERROR_OCCURRED indicates that the associated - // ManagedConnection instance is now invalid and unusable. - conn.close(ConnectionEvent.CONNECTION_ERROR_OCCURRED); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed physical connection"); - } else { - // The CONNECTION_CLOSED indicates that connection handle - // is closed, but physical connection still exists - conn.close(); - logger.log(BasicLevel.DEBUG, cName+".closeUp : closed connection"); - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".closeUp error: close handle/physical connection failed"); - } - } - public void setResAuth(String ra) { - res_auth=ra; // set to Application or Container - } - public void setMatchNull(boolean b) { - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - mcf.setMatchNull(b); - } - // ------------------------------------------------------------------ - // secured implementation - // ------------------------------------------------------------------ - - /** - * method1 - */ - public void method1(String rar_jndi_name, String testName) - throws Exception - { - logger.log(BasicLevel.DEBUG, "============================ "+testName); - try { - ic = new InitialContext(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: InitialContext failed"); - throw e1; - } - try { - cccf = (CommonClient)ic.lookup(rar_jndi_name); - logger.log(BasicLevel.DEBUG, cName+".method1 : found "+rar_jndi_name); - } catch (Exception e2) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: lookup failed for "+rar_jndi_name); - throw e2; - } - - // - // Container-managed sign-on when file "secured.xml" contains line below - // - // Container - // - try { - conn = (ConnectionImpl)cccf.getConnection(); - logger.log(BasicLevel.DEBUG, cName+".method1 : getConnection() 'Container' conn="+conn); - - if (conn==null) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection returned null connection."); - throw new Exception(""); - } - } catch (Exception e4) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection failed " - +e4.toString()); - throw e4; - } - } - - public String getResAuth() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String ra = mcf.getRes_Auth(); // get real "Application" or "Container" - logger.log(BasicLevel.DEBUG, cName+".getResAuth " - +""+ra+""); - return ra; - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName - +".getResAuth error: failed to find " - +"in ManagedConnectionFactory"); - return ""; - } - } - public String getSecurityPassword() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - //ConnectionImpl conni = (ConnectionImpl)conn; - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String pw = mcf.getPassword(); - logger.log(BasicLevel.DEBUG, cName+".getSecurityPassword (" - +mcf.getRes_Auth()+")password="+pw); - return pw; - } catch (Exception e) { - String pw = mcf.getPassword(); // find default - logger.log(BasicLevel.DEBUG, cName - +".getSecurityPassword error: failed to find ManagedConnectionFactory " - +"instance containing password. Using pw="+pw); - return pw; - } - } - public String getSecurityUserName() { - mcf = (JtestResourceAdapter) cccf.getMcf(); // get ManagedConnectionFactory - //ConnectionImpl conni = (ConnectionImpl)conn; // get ConnectionImpl - try { - //JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - String u = mcf.getUserName(); - logger.log(BasicLevel.DEBUG, cName+".getSecurityUserName (" - +mcf.getRes_Auth()+")userName="+u); - return u; - } catch (Exception e) { - String u = mcf.getUserName(); // find default - logger.log(BasicLevel.DEBUG, cName - +".getSecurityUserName error: failed to find ManagedConnectionFactory " - +"instance containing userName. Using="+u); - return u; - } - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/transactedCASLR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/transactedCASLR.java deleted file mode 100644 index 0a04b917b0..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/j2eeca/transactedCASLR.java +++ /dev/null @@ -1,242 +0,0 @@ -// transactedCASLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.j2eeca; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.resource.cci.LocalTransaction; -import javax.resource.spi.ConnectionEvent; -import javax.transaction.xa.Xid; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import fictional.resourceadapter.CommonClient; -import fictional.resourceadapter.ConnectionImpl; -import fictional.resourceadapter.JtestResourceAdapter; -import fictional.resourceadapter.LocalTransactionImpl; -import fictional.resourceadapter.XAResourceImpl; - - -/** - * - */ -public class transactedCASLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private JtestResourceAdapter mcf = null; //Managed Connection Factory - private CommonClient csp = null; //ConnectionSpec - private CommonClient cccf = null; //Common Client Connection Factory - private ConnectionImpl conn = null; - InitialContext ic=null; - String cName = "transactedCASLR"; - final public int NoTransaction = 0; - final public int LoTransaction = 1; - final public int XATransaction = 2; - final public int CLOSE_HANDLE = 0; - final public int CLOSE_PHYSICAL = 1; - public int TransactionType = 0; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas.jtests.j2eeca"); - } - logger.log(BasicLevel.DEBUG, cName+".setSessionContext"); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - /** - * closeUp - */ - public void closeUp(int closeType) { - logger.log(BasicLevel.DEBUG, cName+ - ".closeUp (enter) closeType="+closeType); - try { - if (closeType==CLOSE_PHYSICAL) { - // The CONNECTION_ERROR_OCCURRED indicates that the associated - // ManagedConnection instance is now invalid and unusable. - conn.close(ConnectionEvent.CONNECTION_ERROR_OCCURRED); - logger.log(BasicLevel.DEBUG, cName+ - ".closeUp (exit) : closed physical connection closeType="+closeType+ - " ConnectionEvent.CONNECTION_ERROR_OCCURRED="+ - ConnectionEvent.CONNECTION_ERROR_OCCURRED); - } else { - // The CONNECTION_CLOSED indicates that connection handle - // is closed, but physical connection still exists - conn.close(); - logger.log(BasicLevel.DEBUG, cName+ - ".closeUp (exit) : closed connection closeType="+closeType); - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".closeUp (exit) error: close "+ - "handle/physical connection failed closeType="+closeType); - } - } - - // ------------------------------------------------------------------ - // transacted implementation - // ------------------------------------------------------------------ - - /** - * method1 - */ - public void method1(String rar_jndi_name, String testName) - throws Exception - { - logger.log(BasicLevel.DEBUG, "============================ "+testName); - - if ("FictionalXATransaction".equals(rar_jndi_name)) - TransactionType = XATransaction; - else if ("FictionalLoTransaction".equals(rar_jndi_name)) - TransactionType = LoTransaction; - else - TransactionType = NoTransaction; - - try { - ic = new InitialContext(); - } catch (Exception e1) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: InitialContext failed"); - throw e1; - } - try { - cccf = (CommonClient)ic.lookup(rar_jndi_name); - logger.log(BasicLevel.DEBUG, cName+".method1 : found "+rar_jndi_name); - } catch (Exception e2) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: lookup failed for "+rar_jndi_name); - throw e2; - } - - try { - csp = new CommonClient(); // get a new ConnectionSpec - - } catch (Exception e3) { - logger.log(BasicLevel.DEBUG, cName+".method1 : new connection spec failed"); - throw e3; - } - try { - conn = (ConnectionImpl)cccf.getConnection(); - logger.log(BasicLevel.DEBUG, cName+".method1 : getConnection conn="+conn); - if (conn==null) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection returned null connection."); - throw new Exception(""); - } - } catch (Exception e4) { - logger.log(BasicLevel.DEBUG, cName+".method1 error: getConnection failed " - +e4.toString()); - throw e4; - } - } - public String getXid() { - ConnectionImpl conni = (ConnectionImpl)conn; - try { - JtestResourceAdapter mc = (JtestResourceAdapter)conni.getMC(); //get ManagedConnection - XAResourceImpl xar = mc.getCurrentXar(); - if (xar==null) { - logger.log(BasicLevel.DEBUG, cName+".getXid error: failed xar==null"); - return "FAIL"; - } else { - Xid xid = xar.getCurrentXid(); - logger.log(BasicLevel.DEBUG, cName+".getXid "); - return "OK"; - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getXid error: failed"); - return "FAIL"; - } - } - /** - * After the newly created ManagedConnectionFactory instance has been configured with - * its property set, the application server creates a new ConnectionManager instance. - * true returned if ConnectionManager is valid - */ - public boolean getCMInstance() - { - mcf = (JtestResourceAdapter) cccf.getMcf(); // ManagedConnectionFactory - if (mcf.getCM()==null) { // ConnectionManager not null - logger.log(BasicLevel.DEBUG, cName+".getCMInstance error: ConnectionManager is null"); - return false; - } - else { - logger.log(BasicLevel.DEBUG, cName+".getCMInstance ConnectionManager is o.k."); - return true; - } - } - LocalTransactionImpl lt=null; - public void beginLoTransaction() { - logger.log(BasicLevel.DEBUG, cName+".beginLoTransaction (enter)"); - try { - LocalTransaction l = conn.getLocalTransaction(); - lt = (LocalTransactionImpl) l; - lt.begin(); - int s=lt.getTxState(); - logger.log(BasicLevel.DEBUG, cName+".beginLoTransaction (exit) State="+s); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".beginLoTransaction (exit) error:" - +" "+e.toString()); - - } - } - public void commitLoTransaction() throws Exception - { - logger.log(BasicLevel.DEBUG, cName+".commitLoTransaction (enter)"); - try { - if (lt==null) { - Exception e = new Exception("Undefined LocalTransaction"); - throw e; - } - lt.commit(); - int s=lt.getTxState(); - logger.log(BasicLevel.DEBUG, cName+".commitLoTransaction (exit) ="+s); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".commitLoTransaction (exit) error: State error." - +" "+e.getMessage()); - throw e; - } - lt=null; - } - public void rollbackLoTransaction() { - logger.log(BasicLevel.DEBUG, cName+".rollbackLoTransaction (enter)"); - try { - if (lt==null) { - Exception e = new Exception("Undefined LocalTransaction"); - throw e; - } - lt.rollback(); - int s=lt.getTxState(); - logger.log(BasicLevel.DEBUG, cName+".rollbackLoTransaction (exit) State="+s); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".rollbackLoTransaction (exit) error: State error" - +" "+e.getMessage()); - - } - lt=null; - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jca15/Utility.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jca15/Utility.java deleted file mode 100644 index e21b330076..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jca15/Utility.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Created on January 20, 2004 - * - * Utility.java is part of a JUnit test suit to test - * J2EE Connector 1.5 as implemented by JOnAS. - */ - -package org.objectweb.jonas.jtests.beans.jca15; - -import java.util.*; -import java.text.SimpleDateFormat; - -import javax.resource.ResourceException; -import javax.resource.spi.*; -import javax.resource.spi.SecurityException; -import javax.resource.spi.security.*; -import javax.security.auth.Subject; -import javax.transaction.xa.*; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - - -/**

    This class contains the support methods for the - * JOnAS JCA1.5 test suite - * -**/ -public class Utility -{ - - private static Logger logger = null; - public static final String USER_TRANSACTION = "javax.transaction.UserTransaction"; - - /** - * Write a JOnAS log record - * - * @param msg display this message in log - * - */ - public static synchronized void log(String msg) { - if (logger == null) { - logger = Log.getLogger("ersatz.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, msg); - } - - -} \ No newline at end of file diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/Manager.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/Manager.java deleted file mode 100644 index 90905ff693..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/Manager.java +++ /dev/null @@ -1,26 +0,0 @@ -// Manager.java - -package org.objectweb.jonas.jtests.beans.jdbc; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Manager remote interface - */ -public interface Manager extends EJBObject { - public int openConnection() throws RemoteException; - public boolean closeConnection(int nb) throws RemoteException; - public boolean openCloseConnection() throws RemoteException; - public boolean accessCloseConnection() throws RemoteException; - - /** - * Store the value for the pk entry - */ - public void storeValue(String pk, int val) throws RemoteException; - - /** - * return the value stored for this pk entry - */ - public int getValue(String pk) throws RemoteException; -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/ManagerSY.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/ManagerSY.java deleted file mode 100644 index 0ad2ab115c..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/ManagerSY.java +++ /dev/null @@ -1,328 +0,0 @@ -package org.objectweb.jonas.jtests.beans.jdbc; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.Statement; -import java.sql.SQLException; -import java.sql.ResultSet; -import java.util.Hashtable; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.sql.DataSource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Stateful Session Bean that manages directly jdbc connections - */ -public class ManagerSY implements SessionBean, SessionSynchronization { - - static private Logger logger = null; - SessionContext ejbContext; - String tableName = "jdbcSF"; - - // ------------------------------------------------------------------ - // The state of this Stateful Session Bean - // ------------------------------------------------------------------ - int conb = 100; - InitialContext ictx = null; - DataSource ds = null; - - /** - * List of Connections - */ - Hashtable clist = new Hashtable(); - - // ------------------------------------------------------------------ - // SessionSynchronization implementation - // ------------------------------------------------------------------ - - public void afterBegin() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void beforeCompletion() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void afterCompletion(boolean committed) { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Make here all initialisations needed in this stateful session bean - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - ds = getDataSource("java:comp/env/jdbc/mydb"); - // Get a Connection now - try { - Connection c = ds.getConnection(); - clist.put(new Integer(0), c); - } catch (SQLException e) { - throw new EJBException("Cannot get first Connection:"+e); - } - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - // Close all opened connections - for (Iterator it = clist.values().iterator(); it.hasNext();) { - Connection c = (Connection) it.next(); - try { - c.close(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot close Connection:" + e); - } - } - } - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Manager implementation - // ------------------------------------------------------------------ - - /** - * Access a closed connection - * @return true if all was OK - */ - public boolean accessCloseConnection() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Connection c; - try { - c = ds.getConnection(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot get a Connection:"+e); - return false; - } - try { - c.close(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot close Connection:"+e); - return false; - } - PreparedStatement stmt = null; - try { - stmt = c.prepareStatement("update "+tableName+" set c_value=? where c_pk=?"); - stmt.setString(2, "pk3"); - stmt.setInt(1, 122); - stmt.executeUpdate(); - } catch (SQLException e) { - return true; - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "SQLException should be raised, not :" + e); - e.printStackTrace(); - return false; - } finally { - try { - if (stmt != null) { - stmt.close(); - } - } catch (SQLException ignore) { - } - } - logger.log(BasicLevel.ERROR, "Should not access a close Connection:"); - return false; - } - - /** - * open and close a Connection - * @return true if all was OK - * @throws RemoteException fail on SQL command. - */ - public boolean openCloseConnection() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Connection c; - try { - c = ds.getConnection(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot get a Connection:"+e); - return false; - } - try { - c.close(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot close Connection:"+e); - return false; - } - return true; - } - - /** - * return the number associated to the connection opened, - * or 0 if it failed. - * @return connection ident (int) - * @throws RemoteException fail on SQL command. - */ - public int openConnection() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Connection c; - try { - c = ds.getConnection(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot get a Connection:"+e); - return 0; - } - // choose a connection number - conb++; - clist.put(new Integer(conb), c); - logger.log(BasicLevel.DEBUG, "connection number="+conb); - return conb; - } - - /** - * Close a Connection previously opened. - * @param nb ident of the Connection - * @return true if close Connection worked - * @throws RemoteException fail on SQL command. - */ - public boolean closeConnection(int nb) throws RemoteException { - logger.log(BasicLevel.DEBUG, "connection number="+conb); - Connection c = (Connection) clist.remove(new Integer(nb)); - if (c == null) { - logger.log(BasicLevel.ERROR, "Unknown Connection"); - return false; - } - try { - c.close(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot close Connection:"+e); - return false; - } - boolean isclosed = false; - try { - isclosed = c.isClosed(); - } catch (SQLException e) { - logger.log(BasicLevel.ERROR, "Cannot check if closed:"+e); - return false; - } - return isclosed; - } - - /** - * Store the value for the pk entry - * @param pk primary key - * @param val value associated to this pk. - * @throws RemoteException fail on SQL command. - */ - public void storeValue(String pk, int val) throws RemoteException { - Connection conn; - try { - conn = ds.getConnection(); - } catch(Exception e) { - throw new RemoteException("Cannot get Connection"); - } - PreparedStatement stmt = null; - try { - stmt = conn.prepareStatement("update "+tableName+" set c_value=? where c_pk=?"); - stmt.setString(2, pk); - stmt.setInt(1, val); - stmt.executeUpdate(); - } catch (SQLException e) { - throw new RemoteException("Cannot set value to pk: " + pk); - } finally { - try { - if (stmt != null) { - stmt.close(); - } - conn.close(); - } catch (SQLException ignore) { - } - } - } - - /** - * return the value stored for this pk entry - * @param pk primary key - * @return value associated to this pk. - * @throws RemoteException fail on SQL command. - */ - public int getValue(String pk) throws RemoteException { - int value = 0; - Connection conn; - try { - conn = ds.getConnection(); - } catch(Exception e) { - throw new RemoteException("Cannot get Connection"); - } - PreparedStatement stmt = null; - try { - stmt = conn.prepareStatement("select c_value from "+tableName+" where c_pk=?"); - stmt.setString(1, pk); - ResultSet rs = stmt.executeQuery(); - if (! rs.next()) { - throw new RemoteException("No such value"); - } - value = rs.getInt(1); - } catch (SQLException e) { - throw new RemoteException("Cannot get value from pk: " + pk); - } finally { - try { - if (stmt != null) { - stmt.close(); - } - conn.close(); - } catch (SQLException ignore) { - } - } - return value; - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /* - * get the DataSource given its name in JNDI - */ - private DataSource getDataSource(String db) { - - // lookup the DataSource in the initial context - DataSource ds = null; - try { - // get initial context - if (ictx == null) { - ictx = new InitialContext(); - } - ds = (DataSource) PortableRemoteObject.narrow(ictx.lookup(db), DataSource.class); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Cannot lookup datasource "+db+": "+e); - throw new EJBException("Cannot access DataSource"); - } - - // return it - return ds; - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/jdbc.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/jdbc.xml deleted file mode 100644 index 81bec308b2..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbc/jdbc.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - jdbc - - - - Describe here the session bean Manager - jdbc/ManagerSY - ManagerSY - org.objectweb.jonas.jtests.beans.jdbc.ManagerHome - org.objectweb.jonas.jtests.beans.jdbc.Manager - org.objectweb.jonas.jtests.beans.jdbc.ManagerSY - Stateful - Container - - name1 - java.lang.String - value1 - - - jdbc/mydb - javax.sql.DataSource - Application - - - - - - - - - ManagerSY - * - - Required - - - - ManagerSY - getValue - - - ManagerSY - storeValue - - Supports - - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA1EBRBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA1EBRBean.java deleted file mode 100644 index 038edfcf95..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA1EBRBean.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.jdbcra; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Enumeration; -import java.util.Vector; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.sql.DataSource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ -public class JdbcRA1EBRBean implements EntityBean { - - private DataSource dataSource1 = null; - - static private Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // - // ------------------------------------------------------------------ - - public Integer accno; - public String customer; - public double balance; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to remove bean in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // delete Object in DB - - stmt = conn.prepareStatement("delete from jdbc_xa1 where xa_accno=?"); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new RemoveException ("Failed to delete bean from database " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to load bean state from table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // find account in DB - - stmt = conn.prepareStatement("select xa_customer,xa_balance from jdbc_xa1 where xa_accno=?"); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new EJBException("Failed to load bean from database"); - } - - // update object state - - accno = pk; - customer = rs.getString("xa_customer"); - balance = rs.getDouble("xa_balance"); - - } catch (SQLException e) { - throw new EJBException("Failed to load bean from database " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to store bean state in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // store Object state in DB - - stmt = conn.prepareStatement("update jdbc_xa1 set xa_customer=?,xa_balance=? where xa_accno=?"); - stmt.setString(1, customer); - stmt.setDouble(2, balance); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(3, pk.intValue()); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new EJBException("Failed to store bean to database " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate(int val_accno, String val_customer, double val_balance){ - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public java.lang.Integer ejbCreate(int val_accno, String val_customer, double val_balance) - throws CreateException{ - - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - // Init object state - - accno = new Integer(val_accno); - customer = val_customer; - balance = val_balance; - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // create object in DB - - stmt = conn.prepareStatement("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (?, ?, ?)"); - stmt.setInt(1, accno.intValue()); - stmt.setString(2, customer); - stmt.setDouble(3, balance); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new CreateException("Failed to create bean in database: "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // Return the primary key - return accno; - - } - - public java.lang.Integer ejbFindByPrimaryKey(Integer pk) - throws ObjectNotFoundException, FinderException { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to find entry in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // lookup for this primary key in DB - stmt = conn.prepareStatement("select xa_accno from jdbc_xa1 where xa_accno=?"); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - return pk; - } - - - /** - * Find Account by its account number - * - * @return pk The primary key - * - * @exception FinderException - Failed to execute the query. - * @exception ObjectNotFoundException - Object not found for this account number - */ - - public Integer ejbFindByNumber(int accno) - throws ObjectNotFoundException, FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // lookup for this primary key in DB - - stmt = conn.prepareStatement("select xa_accno from jdbc_xa1 where xa_accno=?"); - stmt.setInt(1, accno); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // return a primary key for this account - return new Integer(accno); - } - - /** - * Creates an enumeration of primary keys for all accounts - * - * @return pkv The primary keys - * - * @exception FinderException - Failed to execute the query. - */ - - public Enumeration ejbFindAllAccounts() throws FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - - Vector pkv = new Vector(); - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // Lookup for all accounts in DB - - stmt = conn.prepareStatement("select xa_accno from jdbc_xa1"); - ResultSet rs = stmt.executeQuery(); - - // Build the vector of primary keys - - while (rs.next()) { - Integer pk = new Integer(rs.getInt("xa_accno")); - pkv.addElement((Object)pk); - }; - - } catch (SQLException e) { - e.printStackTrace(); - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // return primary keys - return pkv.elements(); - } - - public java.lang.Integer ejbCreate() - throws CreateException{ - - logger.log(BasicLevel.DEBUG, ""); - - // Init object state - Integer tempint = new Integer(0); - Connection conn = null; - Statement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // create object in DB - - stmt = conn.createStatement(); - stmt.addBatch("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (201, 'Albert Smith', 500)"); - stmt.addBatch("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (202, 'Bob Smith', 500)"); - stmt.addBatch("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (203, 'Carl Smith', 500)"); - stmt.addBatch("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (204, 'David Smith', 500)"); - stmt.addBatch("insert into jdbc_xa1 (xa_accno, xa_customer, xa_balance) values (205, 'Edward Smith', 500)"); - int[] upCounts = stmt.executeBatch(); - - } catch (SQLException e) { - throw new CreateException("Failed to create bean in database: "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - return tempint; - } - - /** - * @return the connection from the dataSource - * @exception EJBException Thrown by the method if the dataSource is not found - * in the naming. - * @exception SQLException may be thrown by dataSource.getConnection() - */ - - private Connection getConnection() throws EJBException, SQLException { - - Connection myconn1 = null; - - if (dataSource1 == null) { - - // Finds DataSource from JNDI - - Context initialContext = null; - - try { - initialContext = new InitialContext(); - dataSource1 = (DataSource)initialContext.lookup("java:comp/env/jdbc/JdbcRA1Ds"); - } catch (Exception e) { - throw new javax.ejb.EJBException("Cannot lookup dataSource1 "+e); - } - } - - try { - myconn1 = dataSource1.getConnection(); - } catch (Exception e) { - throw new javax.ejb.EJBException("Cannot getConnection dataSource1 "+e); - } - - return myconn1; - } - - /*========================= Account implementation ============================*/ - - /** - * Business method for returning the balance. - * - * @return balance - * - */ - - public double getBalance(){ - return balance; - } - - /** - * Business method for updating the balance. - * - * @param d balance to update - * - */ - - public void setBalance(double d){ - balance = balance + d; - } - - /** - * Business method for returning the customer. - * - * @return customer - * - */ - - public String getCustomer(){ - return customer; - } - - /** - * Business method for changing the customer name. - * - * @param c customer to update - * - */ - - public void setCustomer(String c) { - customer = c; - } - - /** - * Business method to get the Account number - */ - - public int getNumber() { - return accno.intValue(); - } - -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA2EBRBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA2EBRBean.java deleted file mode 100644 index d3f38f350f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/jdbcra/JdbcRA2EBRBean.java +++ /dev/null @@ -1,512 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.jdbcra; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Enumeration; -import java.util.Vector; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.sql.DataSource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ - -public class JdbcRA2EBRBean implements EntityBean { - - private DataSource dataSource2 = null; - - static private Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // - // ------------------------------------------------------------------ - - public Integer accno; - public String customer; - public double balance; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - public void setEntityContext(EntityContext ctx) { - - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to remove bean in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // delete Object in DB - - stmt = conn.prepareStatement("delete from jdbc_xa2 where xa_accno=?"); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - stmt.executeUpdate(); - } catch (SQLException e) { - throw new RemoveException ("Failed to delete bean from database"+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to load bean state from table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // find account in DB - - stmt = conn.prepareStatement("select xa_customer,xa_balance from jdbc_xa2 where xa_accno=?"); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new EJBException("Failed to load bean from database"); - } - - // update object state - - accno = pk; - customer = rs.getString("xa_customer"); - balance = rs.getDouble("xa_balance"); - - } catch (SQLException e) { - throw new EJBException("Failed to load bean from database "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to store bean state in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // store Object state in DB - - stmt = conn.prepareStatement("update jdbc_xa2 set xa_customer=?,xa_balance=? where xa_accno=?"); - stmt.setString(1, customer); - stmt.setDouble(2, balance); - Integer pk = (Integer) ejbContext.getPrimaryKey(); - stmt.setInt(3, pk.intValue()); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new EJBException("Failed to store bean to database "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate(int val_accno, String val_customer, double val_balance){ - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPostCreate(){ - logger.log(BasicLevel.DEBUG, ""); - } - - public java.lang.Integer ejbCreate(int val_accno, String val_customer, double val_balance) - throws CreateException { - - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - // Init object state - accno = new Integer(val_accno); - customer = val_customer; - balance = val_balance; - - Connection conn = null; - - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // create object in DB - - stmt = conn.prepareStatement("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (?, ?, ?)"); - stmt.setInt(1, accno.intValue()); - stmt.setString(2, customer); - stmt.setDouble(3, balance); - stmt.executeUpdate(); - } catch (SQLException e) { - throw new CreateException("Failed to create bean in database: "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // Return the primary key - - return accno; - - } - - public java.lang.Integer ejbFindByPrimaryKey(Integer pk) - throws ObjectNotFoundException, FinderException { - logger.log(BasicLevel.DEBUG, ""); - - // Access database to find entry in table - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // lookup for this primary key in DB - - stmt = conn.prepareStatement("select xa_accno from jdbc_xa2 where xa_accno=?"); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - return pk; - } - - - /** - * Find Account by its account number - * - * @return pk The primary key - * - * @exception FinderException - Failed to execute the query. - * @exception ObjectNotFoundException - Object not found for this account number - */ - - public Integer ejbFindByNumber(int accno) - throws ObjectNotFoundException, FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // lookup for this primary key in DB - - stmt = conn.prepareStatement("select xa_accno from jdbc_xa2 where xa_accno=?"); - stmt.setInt(1, accno); - ResultSet rs = stmt.executeQuery(); - - if (rs.next() == false) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // return a primary key for this account - - return new Integer(accno); - } - - /** - * Creates an enumeration of primary keys for all accounts - * - * @return pkv The primary keys - * - * @exception FinderException - Failed to execute the query. - */ - - public Enumeration ejbFindAllAccounts() throws FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - - Vector pkv = new Vector(); - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // Lookup for all accounts in DB - - stmt = conn.prepareStatement("select xa_accno from jdbc_xa2"); - ResultSet rs = stmt.executeQuery(); - - // Build the vector of primary keys - - while (rs.next()) { - Integer pk = new Integer(rs.getInt("xa_accno")); - pkv.addElement((Object)pk); - }; - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " +e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - - // return primary keys - return pkv.elements(); - } - - public java.lang.Integer ejbCreate() - throws CreateException{ - - logger.log(BasicLevel.DEBUG, ""); - - // Init object state - - Connection conn = null; - Statement stmt = null; - Integer tempint = new Integer(0); - - try { - // get a connection for this transaction context - - conn = getConnection(); - - // create object in DB - - stmt = conn.createStatement(); - stmt.addBatch("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (201, 'Albert Smith', 500)"); - stmt.addBatch("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (202, 'Bob Smith', 500)"); - stmt.addBatch("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (203, 'Carl Smith', 500)"); - stmt.addBatch("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (204, 'David Smith', 500)"); - stmt.addBatch("insert into jdbc_xa2 (xa_accno, xa_customer, xa_balance) values (205, 'Edward Smith', 500)"); - int[] upCounts = stmt.executeBatch(); - - } catch (SQLException e) { - throw new CreateException("Failed to create bean in database: "+e); - } finally { - try { - if (stmt != null) stmt.close(); // close statement - if (conn != null) conn.close(); // release connection - } catch (Exception ignore) { - } - } - return tempint; - } - - /** - * @return the connection from the dataSource - * @exception EJBException Thrown by the method if the dataSource is not found - * in the naming. - * @exception SQLException may be thrown by dataSource.getConnection() - */ - - private Connection getConnection() throws EJBException, SQLException { - - Connection myconn2 = null; - - if (dataSource2 == null) { - - // Finds DataSource from JNDI - - Context initialContext = null; - - try { - initialContext = new InitialContext(); - dataSource2 = (DataSource)initialContext.lookup("java:comp/env/jdbc/JdbcRA2Ds"); - } catch (Exception e) { - throw new javax.ejb.EJBException("Cannot lookup dataSource2 "+e); - } - } - - try { - myconn2 = dataSource2.getConnection(); - } catch (Exception e) { - throw new javax.ejb.EJBException("Cannot getConnection dataSource2 "+e); - } - - return myconn2; - } - - /*========================= Account implementation ============================*/ - - /** - * Business method for returning the balance. - * - * @return balance - * - */ - - public double getBalance(){ - return balance; - } - - /** - * Business method for updating the balance. - * - * @param d balance to update - * - */ - - public void setBalance(double d){ - balance = balance + d; - } - - /** - * Business method for returning the customer. - * - * @return customer - * - */ - - public String getCustomer(){ - return customer; - } - - /** - * Business method for changing the customer name. - * - * @param c customer to update - * - */ - - public void setCustomer(String c) { - customer = c; - } - - /** - * Business method to get the Account number - */ - - public int getNumber() { - return accno.intValue(); - } - -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/SimpleSessionSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/SimpleSessionSL.java deleted file mode 100644 index 034e390c07..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/SimpleSessionSL.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.local; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Stateless Session - * @author Philippe Durieux - */ -public class SimpleSessionSL implements SessionBean { - - static protected Logger logger = null; - SessionContext ejbContext; - - public String string; - public int number; - public boolean createdViaCreateXX; - public boolean createdViaCreateYY; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Target implementation - // ------------------------------------------------------------------ - - /** - * getTen - */ - public int getTen() { - logger.log(BasicLevel.DEBUG, ""); - return 10; - } - - /** - * method2 - */ - public void method2(java.lang.String s) { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * getNumber - * Not called - */ - public int getNumber() { - logger.log(BasicLevel.DEBUG, ""); - return 0; - } - - /** - * getString - * Not called - */ - public String getString() { - logger.log(BasicLevel.DEBUG, ""); - return null; - } - - /** - * isCreatedViaCreateXX - * Not called - */ - public boolean isCreatedViaCreateXX() { - logger.log(BasicLevel.DEBUG, ""); - return false; - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/TargetSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/TargetSL.java deleted file mode 100644 index 533ad8ce43..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/local/TargetSL.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.local; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.transaction.UserTransaction; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Stateless Session - * @author Philippe Durieux, Philippe Coq - */ -public class TargetSL implements SessionBean { - - static protected Logger logger = null; - SessionContext ejbContext; - - public String string; - public int number; - public boolean createdViaCreateXX; - public boolean createdViaCreateYY; - private int [] inttable = new int[30]; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Check allowed and disallowed methods (See spec EJB 2.1 p 100) - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - - // These operations are allowed - ejbContext.getEJBHome(); - ejbContext.getEJBLocalHome(); - ejbContext.getEJBObject(); - ejbContext.getEJBLocalObject(); - ejbContext.getTimerService(); - - try { - // Must access java:comp/env - InitialContext ictx = new InitialContext(); - ictx.lookup("java:comp/env/myname"); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot lookup java:comp/env/myname: " + e); - throw new CreateException("Cannot lookup java:comp/env/myname: " + e); - } - - // These operations are disallowed - try { - ejbContext.getCallerPrincipal(); - throw new CreateException("getCallerPrincipal disallowed"); - } catch (IllegalStateException e) { - logger.log(BasicLevel.DEBUG, "getCallerPrincipal disallowed"); - } - try { - ejbContext.isCallerInRole(""); - throw new CreateException("isCallerInRole disallowed"); - } catch (IllegalStateException e) { - logger.log(BasicLevel.DEBUG, "isCallerInRole disallowed"); - } - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // LocalInterface implementation - // ------------------------------------------------------------------ - - /** - * getTwenty - */ - public int getTwenty() { - logger.log(BasicLevel.DEBUG, ""); - return 20; - } - - /** - * lmethod2 - */ - public void lmethod2(java.lang.String s) { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Target implementation - // ------------------------------------------------------------------ - - /** - * getTen - */ - public int getTen() { - logger.log(BasicLevel.DEBUG, ""); - return 10; - } - - /** - * method2 - */ - public void method2(java.lang.String s) { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * getNumber - * Not called - */ - public int getNumber() { - logger.log(BasicLevel.DEBUG, ""); - return 0; - } - - /** - * getString - * Not called - */ - public String getString() { - logger.log(BasicLevel.DEBUG, ""); - return null; - } - - /** - * isCreatedViaCreateXX - * Not called - */ - public boolean isCreatedViaCreateXX() { - logger.log(BasicLevel.DEBUG, ""); - return false; - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Listener.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Listener.java deleted file mode 100644 index 45caa331b6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Listener.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.message; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.ejb.TimedObject; -import javax.ejb.Timer; -import javax.ejb.TimerService; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.JMSException; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.Transaction; -import javax.transaction.UserTransaction; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.jonas.jtests.util.JBean; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Common code for all Message Driven Beans - * @author Philippe Durieux, Philippe Coq - */ -public abstract class Listener extends JBean implements MessageDrivenBean, MessageListener, TimedObject { - protected static Logger logger = null; - protected transient MessageDrivenContext mdbContext; - protected transient MRecordHome arh = null; - protected String myname; - - abstract protected String getMyDest(); - - public static final int CREATE_TIMER_MIN = 1500; - public static final int CREATE_TIMER_MAX = 1600; - public static final int CREATE_P_TIMER_MIN = 25000; - public static final int CREATE_P_TIMER_MAX = 26000; - - /** - * Default constructor - */ - public Listener() { - } - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated context. The container call this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx A MessageDrivenContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the message-driven object. - * This happens when a container decides to terminate the message-driven object. - * - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - */ - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - - // Get a ref on MRecordHome - InitialContext ictx = null; - try { - ictx = new InitialContext(); - arh = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup("messageMRecordECHome"), MRecordHome.class); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Listener : Cannot get messageMRecordHome:" + e); - } - - // Accesses the bean env to get the bean name - // This test also that we can access java:comp/env from here. - try { - myname = (String) ictx.lookup("java:comp/env/mdbname"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Listener : Cannot access java:comp/env/mdbname from ejbCreate:" + e); - } - } - - /** - * @return current Transaction - */ - public int getCurrentTransactionStatus() { - int ret = -1; - try { - UserTransaction ut = getUserTransaction(); - ret = ut.getStatus(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot get the current transaction"); - } - return ret; - } - - /** - * onMessage method - */ - public void onMessage(Message message) { - logger.log(BasicLevel.DEBUG, ""); - - sleep(20); - - // Decode the message (MapMessage) - String uuid = null; - String dest = null; - int value = 0; - MapMessage msg = (MapMessage) message; - try { - uuid = msg.getString("Id"); - dest = msg.getString("Text"); - value = msg.getInt("Value"); - } catch (JMSException e) { - logger.log(BasicLevel.ERROR, "Listener exception:" + e); - return; - } - - // Check destination - if (! dest.equals(getMyDest())) { - logger.log(BasicLevel.ERROR, "Bad destination: " + dest + ". Expected is " + getMyDest()); - return; - } - - // Create a timer if required - if (value >= CREATE_TIMER_MIN && value <= CREATE_TIMER_MAX) { - TimerService timerservice = mdbContext.getTimerService(); - int dur = value - CREATE_TIMER_MIN; - Info info = new Info(uuid, dest, value, myname); - Timer mt = timerservice.createTimer(dur * 1000, dur * 1000, info); - return; - } - - // Create a persistent timer (time in minuts) - if (value >= CREATE_P_TIMER_MIN && value <= CREATE_P_TIMER_MAX) { - TimerService timerservice = mdbContext.getTimerService(); - int dur = value - CREATE_P_TIMER_MIN; - Info info = new Info(uuid, dest, value, myname); - Timer mt = timerservice.createTimer(dur * 1000 * 60, 0, info); - return; - } - - // Create a new Entity bean for this message - // Check that transaction association did not change after create. - // This should be better checked, but need to access the Transaction directly. - try { - int t1 = getCurrentTransactionStatus(); - arh.create(uuid, dest, value, myname); - if (t1 != getCurrentTransactionStatus()) { - logger.log(BasicLevel.ERROR, "Error in transaction association"); - } - } catch (CreateException e) { - logger.log(BasicLevel.ERROR, "Listener exception:" + e); - } catch (RemoteException e) { - logger.log(BasicLevel.ERROR, "Listener exception:" + e); - } - - - } - - // ----------------------------------------------------------- - // TimedObject implementation - // ----------------------------------------------------------- - - /** - * A timer is expired. - */ - public void ejbTimeout(Timer timer) { - logger.log(BasicLevel.DEBUG, ""); - Info info = (Info) timer.getInfo(); - // Create a new Entity bean for this message - try { - MRecord mr = arh.findByPrimaryKey(new MRecordPK(info.uuid, info.ejbname)); - int cnt = mr.getCount(); - if (cnt <= 3) { - mr.updateCount(); - } else { - timer.cancel(); - } - } catch (RemoteException e) { - logger.log(BasicLevel.ERROR, "Listener exception :" + e); - } catch (FinderException e) { - try { - arh.create(info.uuid, info.dest, info.value, info.ejbname); - } catch (CreateException ee) { - logger.log(BasicLevel.ERROR, "Listener exception:" + ee); - } catch (RemoteException ee) { - logger.log(BasicLevel.ERROR, "Listener exception on create:" + ee); - } - } - - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/MRecordEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/MRecordEC.java deleted file mode 100644 index 45947b9e11..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/MRecordEC.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MRecordEC.java - -package org.objectweb.jonas.jtests.beans.message; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * - */ -public class MRecordEC implements EntityBean { - - protected static Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String uuid; - public String dest; - public int value; - public int count; - public String mdb; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String uuid, String dest, int value, String mdb) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public MRecordPK ejbCreate(String uuid, String dest, int value, String mdb) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - // Init here the bean fields - this.uuid = uuid; - this.dest = dest; - this.value = value; - this.mdb = mdb; - this.count = 1; - - // In CMP, should return null. - return null; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // MRecord implementation - // ------------------------------------------------------------------ - - /** - * returns UUID - */ - public String getUUID() throws RemoteException { - return uuid; - } - - /** - * returns dest - */ - public String getDest() throws RemoteException { - return dest; - } - - /** - * returns value - */ - public int getValue() throws RemoteException { - return value; - } - - /** - * returns count - */ - public int getCount() throws RemoteException { - return count; - } - - /** - * Add 1 to the count - */ - public void updateCount() throws RemoteException { - count++; - } - - /** - * returns MDB - */ - public String getMDB() throws RemoteException { - return mdb; - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_1SF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_1SF.java deleted file mode 100644 index 3521ed8a1e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_1SF.java +++ /dev/null @@ -1,316 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SenderSF1_1.java -// Stateful Session Bean - -package org.objectweb.jonas.jtests.beans.message; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.jonas.jtests.util.Env; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This Session Bean is equivalent to the SenderF bean - * the only difference is it is written in JMS1.1 - * it is using ConnectionFactory, Connection, Session and MessageProducer - */ -public class Sender1_1SF implements SessionBean { - - static protected Logger logger = null; - SessionContext ejbContext; - private transient InitialContext ictx = null; - private transient ConnectionFactory cf = null; - private transient javax.jms.Connection c = null; - private transient MRecordHome ehome = null; - private static int count = 1; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - try { - c.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Exception on close:" + e); - } - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - // Lookup Connection Factories - try { - ictx = new InitialContext(); - cf = (ConnectionFactory) ictx.lookup("CF"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot lookup Connection Factories: "+e); - throw new CreateException("SenderSF: Cannot lookup Connection Factories"); - } - - // Create Connections - try { - - c = cf.createConnection(); - } catch (JMSException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot create connections: "+e); - throw new CreateException("SenderSF: Cannot create connections"); - } - - // Lookup Entity Home for checking - String BEAN_HOME = "messageMRecordECHome"; - try { - ehome = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), MRecordHome.class); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF ejbCreate: Cannot get entity home: "+e); - throw new CreateException("SenderSF: Cannot get entity home"); - } - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /** - * return a unique identifier - */ - private String getUUID() { - long uuid; - synchronized(getClass()) { - uuid = System.currentTimeMillis() * 256 + count; - count++; - } - return String.valueOf(uuid); - } - - // ------------------------------------------------------------------ - // Sender implementation - // ------------------------------------------------------------------ - - /** - * send a message on destination (topic or queue) - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnDestination(String dst, int val, int nb) { - logger.log(BasicLevel.DEBUG, ""); - // Lookup destinations - Destination dest = null; - try { - dest = (Destination) ictx.lookup(dst); - } catch (NamingException e) { - throw new EJBException("sendOnDestination: Cannot lookup "+dest); - } - - // Create Session - // Create Session at each request : Avoids the bug in JMS - // about Session not enlisted in transactions if open first. - Session ss = null; - try { - // (true, 0) are the recommanded args, although they are not taken - // in account by the container. - ss = c.createSession(true, 0); - } catch (JMSException e) { - throw new EJBException("Cannot create Session: "+e); - } - - // Create the MessageProducer for topic - MessageProducer producer = null; - try { - producer = ss.createProducer(dest); - } catch (JMSException e) { - throw new EJBException("Cannot create MessageProducer: "+e); - } - - // Send messages on the destination - try { - for (int i = 0; i < nb; i++) { - MapMessage mess = ss.createMapMessage(); - mess.setString("Id", getUUID()); - mess.setString("Text",dst); - mess.setInt("Value", val); - producer.send(mess); - } - } catch (JMSException e) { - throw new EJBException("Cannot send message: "+e); - } - - // Close Session: This is mandatory for the correct behaviour of - // XA protocol. An XA END must be sent before commit or rollback. - try { - ss.close(); - } catch (JMSException e) { - throw new EJBException("Cannot close session: "+e); - } - } - - /** - * send messages on destination (topic or queue) (transacted) - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnDestinationTx(String dest, int val, int nb) { - sendOnDestination(dest, val, nb); - } - - - - /** - * Checking send methods - * @param int value looked in messages received - * @param int nb of messages that could be received - * @param int nb of seconds max to wait for all messages - * @return actual nb of messages received - */ - public int check(int val, int nb, int sec) { - Collection elist = null; - int retval = 0; - for (int i = 0; i <= sec; i++) { - logger.log(BasicLevel.DEBUG, "sec : " + i + "/" + sec); - try { - elist = ehome.findByValue(val); - retval = elist.size(); - if (retval >= nb) { - // clean database before returning - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - return retval; - } - } catch (FinderException e) { - } catch (RemoteException e) { - return retval; - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - return retval; - } - - /** - * Clean all entity beans for this value - */ - public void clean(int val) { - logger.log(BasicLevel.DEBUG, ""); - Collection elist = null; - try { - elist = ehome.findByValue(val); - } catch (FinderException e) { - return; - } catch (Exception e) { - throw new EJBException("Error on find"); - } - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_2SF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_2SF.java deleted file mode 100644 index db4930b9d5..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/Sender1_2SF.java +++ /dev/null @@ -1,423 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SenderSF1_1.java -// Stateful Session Bean - -package org.objectweb.jonas.jtests.beans.message; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.UserTransaction; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.jonas.jtests.util.Env; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This Session Bean is equivalent to the Sender1_1SF bean - * the only difference is it is bean managed transaction - * it is using ConnectionFactory, Connection, Session and MessageProducer - */ -public class Sender1_2SF implements SessionBean { - - static protected Logger logger = null; - SessionContext ejbContext; - private transient InitialContext ictx = null; - private transient ConnectionFactory cf = null; - private transient javax.jms.Connection c = null; - private transient MRecordHome ehome = null; - private static int count = 1; - private static UserTransaction utx = null; - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - try { - c.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Exception on close:" + e); - } - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - // Lookup Connection Factories - try { - ictx = new InitialContext(); - cf = (ConnectionFactory) ictx.lookup("CF"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot lookup Connection Factories: "+e); - throw new CreateException("SenderSF: Cannot lookup Connection Factories"); - } - - - // Create Connections - try { - - c = cf.createConnection(); - } catch (JMSException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot create connections: "+e); - throw new CreateException("SenderSF: Cannot create connections"); - } - - // Lookup Entity Home for checking - String BEAN_HOME = "messageMRecordECHome"; - try { - ehome = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), MRecordHome.class); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF ejbCreate: Cannot get entity home: "+e); - throw new CreateException("SenderSF: Cannot get entity home"); - } - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /** - * return a unique identifier - */ - private String getUUID() { - long uuid; - synchronized(getClass()) { - uuid = System.currentTimeMillis() * 256 + count; - count++; - } - return String.valueOf(uuid); - } - - // ------------------------------------------------------------------ - // Sender implementation - // ------------------------------------------------------------------ - - /** - * send a message on destination (topic or queue) - * @param Session session - * @param String destination - * @param int value set in message - * @param int nb of messages sent - * @param boolean commit transaction if true - */ - public void sendOnDestination(Session ss, String dst, int val, int nb) { - - // Lookup destinations - Destination dest = null; - try { - dest = (Destination) ictx.lookup(dst); - } catch (NamingException e) { - throw new EJBException("sendOnDestination: Cannot lookup "+dest); - } - - // Create the MessageProducer for destination - MessageProducer producer = null; - try { - producer = ss.createProducer(dest); - } catch (JMSException e) { - throw new EJBException("Cannot create MessageProducer: "+e); - } - - // Send messages on the destination - try { - for (int i = 0; i < nb; i++) { - MapMessage mess = ss.createMapMessage(); - mess.setString("Id", getUUID()); - mess.setString("Text",dst); - mess.setInt("Value", val); - producer.send(mess); - } - } catch (JMSException e) { - throw new EJBException("Cannot send message: "+e); - } - - } - - /** - * send a message on destination (topic or queue) - * the transaction is demarcated before the session creation - * @param String destination - * @param int value set in message - * @param int nb of messages sent - * @param boolean commit transaction if true - */ - public void sendOnDestinationWithTxBeforeSession(String dst, int val, int nb, boolean commit) - throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - - // Obtain the UserTransaction interface - try { - utx = ejbContext.getUserTransaction(); - } catch (IllegalStateException e) { - logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); - throw new RemoteException("Can't get UserTransaction:", e); - } - - - - // Start a global transaction - try { - utx.begin(); - } catch (NotSupportedException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } - - - // Create Session - // Create Session at each request : Avoids the bug in JMS - // about Session not enlisted in transactions if open first. - Session ss = null; - try { - // (true, 0) are the recommanded args, although they are not taken - // in account by the container. - ss = c.createSession(true, 0); - } catch (JMSException e) { - throw new EJBException("Cannot create Session: "+e); - } - sendOnDestination(ss, dst, val, nb); - - - // Close Session: This is mandatory for the correct behaviour of - // XA protocol. An XA END must be sent before commit or rollback. - try { - ss.close(); - } catch (JMSException e) { - throw new EJBException("Cannot close session: "+e); - } - - try { - // commit or rollback the transaction depending on commit parameter - if(commit) { - utx.commit(); - } else { - utx.rollback(); - } - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't rollback Transaction"); - throw new RemoteException("Can't rollback Transaction:", e); - } - } - - /** - * send messages on destination (topic or queue) - * the transaction is demarcated after the session creation - * @param String destination - * @param int value set in message - * @param int nb of messages sent - * @param boolean commit transaction if true - */ - public void sendOnDestinationWithTxAfterSession(String dst, int val, int nb, boolean commit) - throws RemoteException { - - // Obtain the UserTransaction interface - try { - utx = ejbContext.getUserTransaction(); - } catch (IllegalStateException e) { - logger.log(BasicLevel.ERROR, "Can't get UserTransaction"); - throw new RemoteException("Can't get UserTransaction:", e); - } - - Session ss = null; - try { - - ss = c.createSession(false, 0); - } catch (JMSException e) { - throw new EJBException("Cannot create Session: "+e); - } - - // Start a global transaction - try { - utx.begin(); - } catch (NotSupportedException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } catch (SystemException e) { - logger.log(BasicLevel.ERROR, "Can't start Transaction"); - throw new RemoteException("Can't start Transaction:", e); - } - sendOnDestination(ss, dst, val, nb); - // Close Session: This is mandatory for the correct behaviour of - // XA protocol. An XA END must be sent before commit or rollback. - try { - ss.close(); - } catch (JMSException e) { - throw new EJBException("Cannot close session: "+e); - } - - try { - // commit or rollback the transaction depending on commit parameter - if(commit) { - utx.commit(); - } else { - utx.rollback(); - } - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't rollback Transaction"); - throw new RemoteException("Can't rollback Transaction:", e); - } - } - - - - /** - * Checking send methods - * @param int value looked in messages received - * @param int nb of messages that could be received - * @param int nb of seconds max to wait for all messages - * @return actual nb of messages received - */ - public int check(int val, int nb, int sec) { - Collection elist = null; - int retval = 0; - for (int i = 0; i <= sec; i++) { - logger.log(BasicLevel.DEBUG, "sec : " + i + "/" + sec); - try { - elist = ehome.findByValue(val); - retval = elist.size(); - if (retval >= nb) { - // clean database before returning - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - return retval; - } - } catch (FinderException e) { - } catch (RemoteException e) { - return retval; - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - return retval; - } - - /** - * Clean all entity beans for this value - */ - public void clean(int val) { - logger.log(BasicLevel.DEBUG, ""); - Collection elist = null; - try { - elist = ehome.findByValue(val); - } catch (FinderException e) { - return; - } catch (Exception e) { - throw new EJBException("Error on find"); - } - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/SenderSF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/SenderSF.java deleted file mode 100644 index 0e8faa6645..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/message/SenderSF.java +++ /dev/null @@ -1,390 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SenderSF.java -// Stateful Session Bean - -package org.objectweb.jonas.jtests.beans.message; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Queue; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueSender; -import javax.jms.QueueSession; -import javax.jms.Topic; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicPublisher; -import javax.jms.TopicSession; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.jonas.jtests.util.Env; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ -public class SenderSF implements SessionBean { - - static protected Logger logger = null; - SessionContext ejbContext; - private transient InitialContext ictx = null; - private transient TopicConnectionFactory tcf = null; - private transient TopicConnection tc = null; - private transient QueueConnectionFactory qcf = null; - private transient QueueConnection qc = null; - private transient MRecordHome ehome = null; - private static int count = 1; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - try { - tc.close(); - qc.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Exception on close:" + e); - } - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - // Lookup Connection Factories - try { - ictx = new InitialContext(); - tcf = (TopicConnectionFactory) ictx.lookup("TCF"); - qcf = (QueueConnectionFactory) ictx.lookup("QCF"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot lookup Connection Factories: "+e); - throw new CreateException("SenderSF: Cannot lookup Connection Factories"); - } - - // Create Connections - try { - qc = qcf.createQueueConnection(); - tc = tcf.createTopicConnection(); - } catch (JMSException e) { - logger.log(BasicLevel.ERROR, "SenderSF : Cannot create connections: "+e); - throw new CreateException("SenderSF: Cannot create connections"); - } - - // Lookup Entity Home for checking - String BEAN_HOME = "messageMRecordECHome"; - try { - ehome = (MRecordHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), MRecordHome.class); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "SenderSF ejbCreate: Cannot get entity home: "+e); - throw new CreateException("SenderSF: Cannot get entity home"); - } - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // private methods - // ------------------------------------------------------------------ - - /** - * return a unique identifier - */ - private String getUUID() { - long uuid; - synchronized(getClass()) { - uuid = System.currentTimeMillis() * 256 + count; - count++; - } - return String.valueOf(uuid); - } - - // ------------------------------------------------------------------ - // Sender implementation - // ------------------------------------------------------------------ - - /** - * send a message on topic - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnTopic(String dest, int val, int nb) { - logger.log(BasicLevel.DEBUG, ""); - // Lookup destinations - Topic topic = null; - try { - topic = (Topic) ictx.lookup(dest); - } catch (NamingException e) { - throw new EJBException("sendOnTopic: Cannot lookup "+dest); - } - - // Create TopicSession - // Create Session at each request : Avoids the bug in JMS - // about Session not enlisted in transactions if open first. - TopicSession ss = null; - try { - // (true, 0) are the recommanded args, although they are not taken - // in account by the container. - ss = tc.createTopicSession(true, 0); - } catch (JMSException e) { - throw new EJBException("Cannot create Session: "+e); - } - - // Create the TopicPublisher - TopicPublisher publisher = null; - try { - publisher = ss.createPublisher(topic); - } catch (JMSException e) { - throw new EJBException("Cannot create TopicPublisher: "+e); - } - - // Publish messages on the topic - try { - for (int i = 0; i < nb; i++) { - MapMessage mess = ss.createMapMessage(); - mess.setString("Id", getUUID()); - mess.setString("Text", dest); - mess.setInt("Value", val); - publisher.publish(mess); - } - } catch (JMSException e) { - throw new EJBException("Cannot send message: "+e); - } - - // Close Session: This is mandatory for the correct behaviour of - // XA protocol. An XA END must be sent before commit or rollback. - try { - ss.close(); - } catch (JMSException e) { - throw new EJBException("Cannot close session: "+e); - } - } - - /** - * send messages on topic (transacted) - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnTopicTx(String dest, int val, int nb) { - sendOnTopic(dest, val, nb); - } - - /** - * send a message on queue - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnQueue(String dest, int val, int nb) { - logger.log(BasicLevel.DEBUG, ""); - // Lookup destination - Queue queue = null; - try { - queue = (Queue) ictx.lookup(dest); - } catch (NamingException e) { - throw new EJBException("sendOnQueue: Cannot lookup "+dest); - } - - // Create QueueSession - // Must create Session at each request because of the bug in JMS - // about Session not enlisted in transactions if open first. - QueueSession ss = null; - try { - // (true, 0) are the recommanded args, although they are not taken - // in account by the container. - ss = qc.createQueueSession(true, 0); - } catch (JMSException e) { - throw new EJBException("Cannot create Session: "+e); - } - - // Create the QueueSender - QueueSender sender = null; - try { - sender = ss.createSender(queue); - } catch (JMSException e) { - throw new EJBException("Cannot create QueueSender: "+e); - } - - // Publish messages on the queue - try { - for (int i = 0; i < nb; i++) { - MapMessage mess = ss.createMapMessage(); - mess.setString("Id", getUUID()); - mess.setString("Text", dest); - mess.setInt("Value", val); - sender.send(mess); - } - } catch (JMSException e) { - throw new EJBException("Cannot send message: "+e); - } - - // Close Session: This is mandatory for the correct behaviour of - // XA protocol. An XA END must be sent before commit or rollback. - try { - ss.close(); - } catch (JMSException e) { - throw new EJBException("Cannot close session: "+e); - } - } - - /** - * send messages on queue (transacted) - * @param String destination - * @param int value set in message - * @param int nb of messages sent - */ - public void sendOnQueueTx(String dest, int val, int nb) { - sendOnQueue(dest, val, nb); - } - - /** - * Checking send methods - * @param int value looked in messages received - * @param int nb of messages that could be received - * @param int nb of seconds max to wait for all messages - * @return actual nb of messages received - */ - public int check(int val, int nb, int sec) { - Collection elist = null; - int retval = 0; - for (int i = 0; i <= sec; i++) { - logger.log(BasicLevel.DEBUG, "sec : " + i + "/" + sec); - try { - elist = ehome.findByValue(val); - retval = elist.size(); - if (retval >= nb) { - // clean database before returning - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - return retval; - } - } catch (FinderException e) { - } catch (RemoteException e) { - return retval; - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - return retval; - } - - /** - * Clean all entity beans for this value - */ - public void clean(int val) { - logger.log(BasicLevel.DEBUG, ""); - Collection elist = null; - try { - elist = ehome.findByValue(val); - } catch (FinderException e) { - return; - } catch (Exception e) { - throw new EJBException("Error on find"); - } - Iterator it = elist.iterator(); - while (it.hasNext()) { - MRecord ent = (MRecord) PortableRemoteObject.narrow(it.next(), MRecord.class); - try { - ent.remove(); - } catch (Exception e) { - throw new EJBException("Error on remove"); - } - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/AddressBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/AddressBean.java deleted file mode 100644 index 5bfeefd90a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/AddressBean.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityContext; -import javax.ejb.EntityBean; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Address - * @author Ph Durieux - */ -public abstract class AddressBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - - public Integer ejbCreate(String street, String city, String state, String zip) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setStreet(street); - setCity(city); - setState(state); - setZip(zip); - return null; - } - - public void ejbPostCreate(String street, String city, String state, String zip) { - logger.log(BasicLevel.DEBUG, ""); - } - - public Integer ejbCreate(AddressDO addr, CustomerL customer) throws CreateException { - setStreet(addr.getStreet()); - setCity(addr.getCity()); - setState(addr.getState()); - setZip(addr.getZip()); - return null; - } - - public void ejbPostCreate(AddressDO addr, CustomerL customer) throws CreateException { - // Sould we do this ? Actually, it doesn't work. - // SInce this is a 1-1 relation, when setting the cmr in customer it should set - // this also, by coherence ? (to be confirmed) - //setCustomer(customer); - } - - public Integer getCustomerId() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - CustomerL c = getCustomer(); - Integer ret = null; - if (c != null) { - ret = c.getId(); - } - return ret; - } - - - // relationship fields (if defined in ejb-relationship-role only) - public abstract CustomerL getCustomer(); - public abstract void setCustomer(CustomerL cust); - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract String getStreet(); - public abstract void setStreet(String street); - public abstract String getCity(); - public abstract void setCity(String city); - public abstract String getState(); - public abstract void setState(String state); - public abstract String getZip(); - public abstract void setZip(String zip); - - // standard call back methods - - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CarBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CarBean.java deleted file mode 100644 index 71cdfd2855..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CarBean.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Vector; -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Car - * @author Ph Durieux - */ -public abstract class CarBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - protected InsuranceHL insuranceHL = null; - protected InvoiceHL invoiceHL = null; - - public Object ejbCreate(String number, byte type, String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(number); - setType(type); - setName(name); - return null; - } - - public void ejbPostCreate(String number, byte type, String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - InsuranceL ins = insuranceHL.create("000" + number); - setInsurance(ins); - } - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract String getNumber(); - public abstract void setNumber(String number); - public abstract byte getType(); - public abstract void setType(byte type); - public abstract String getName(); - public abstract void setName(String name); - - // persistent relationships - public abstract InsuranceL getInsurance(); - public abstract void setInsurance(InsuranceL i); - public abstract CustomerL getCustomer(); - public abstract void setCustomer(CustomerL c); - public abstract java.util.Collection getInvoices(); - public abstract void setInvoices(java.util.Collection invoices); - - - public void addInvoice(String number) throws NamingException, CreateException { - logger.log(BasicLevel.DEBUG, ""); - InvoiceL invoice = invoiceHL.create(number); - Collection invoices = getInvoices(); - invoices.add(invoice); - } - - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - try { - InitialContext cntx = new InitialContext(); - insuranceHL = (InsuranceHL) cntx.lookup("java:comp/env/ejb/InsuranceHomeLocal"); - invoiceHL = (InvoiceHL) cntx.lookup("java:comp/env/ejb/InvoiceHomeLocal"); - } catch (Exception e) { - throw new javax.ejb.EJBException(e); - } - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - checkCustomerAccess(); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - checkCustomerAccess(); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - // This cannot be done: See EJB specs - // A bean must not attempt to access its state here. - //checkCustomerAccess(); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - // This cannot be done: See EJB specs - // A bean must not attempt to access its state here. - //checkCustomerAccess(); - } - - /** - * this instance is being removed. - * we must be able to access bean fields here, including the CMRs - */ - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - InsuranceL myins = getInsurance(); - if (myins == null) { - logger.log(BasicLevel.ERROR, "CMR field Insurance is null"); - throw new RemoveException("Cannot access CMR field Insurance inside ejbRemove"); - } - String insnumber = myins.getNumber(); - String expect = "000" + getNumber(); - if (! expect.equals(insnumber)) { - throw new RemoveException("Bad insurance number:" + insnumber); - } - checkCustomerAccess(); - } - - protected void checkCustomerAccess() { - logger.log(BasicLevel.DEBUG, ""); - CustomerL mycust = getCustomer(); - if (mycust == null) { - logger.log(BasicLevel.ERROR, "CMR field Customer is null"); - throw new EJBException("CMR field Customer is null"); - } - Name n = mycust.getName(); - if (n == null || n.getLastName().length() == 0) { - logger.log(BasicLevel.ERROR, "Cannot get customer name"); - throw new EJBException("Cannot get customer name"); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CreditCardBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CreditCardBean.java deleted file mode 100644 index 39f16ae6db..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CreditCardBean.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.util.Date; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean CreditCard - * @author Ph Durieux - */ -public abstract class CreditCardBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - - public Object ejbCreate(Date exp, String numb, String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setExpirationDate(exp); - setNumber(numb); - setNameOnCard(name); - return null; - } - - public void ejbPostCreate(Date exp, String numb, String name) { - logger.log(BasicLevel.DEBUG, ""); - } - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract Date getExpirationDate(); - public abstract void setExpirationDate(Date date); - public abstract String getNumber(); - public abstract void setNumber(String number); - public abstract String getNameOnCard(); - public abstract void setNameOnCard(String name); - - // standard call back methods - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CustomerBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CustomerBean.java deleted file mode 100644 index 3762400e5b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/CustomerBean.java +++ /dev/null @@ -1,339 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Date; -import java.util.Iterator; -import java.util.Vector; - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Customer - * @author Ph Durieux - */ -public abstract class CustomerBean implements EntityBean { - - static protected Logger logger = null; - private CreditCardHL creditCardHL = null; - private AddressHL addressHL = null; - private PhoneHL phoneHL = null; - private CarHL carHL = null; - private EntityContext ejbContext = null; - - public Integer ejbCreate(Integer id) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, ""); - this.setId(id); - return null; - } - - public void ejbPostCreate(Integer id) { - logger.log(BasicLevel.DEBUG, ""); - } - - public Integer ejbCreateWithAddress(Integer id, AddressDO addr) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, ""); - this.setId(id); - return null; - } - - public void ejbPostCreateWithAddress(Integer id, AddressDO addr) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, ""); - CustomerL myLocalInterface = (CustomerL) ejbContext.getEJBLocalObject(); - AddressL addrl = addressHL.create(addr, myLocalInterface); - setHomeAddress(addrl); - } - - - // business methods - - public Name getName() { - logger.log(BasicLevel.DEBUG, ""); - Name name = new Name(getLastName(), getFirstName()); - return name; - } - - public void setName(Name name) { - logger.log(BasicLevel.DEBUG, ""); - setLastName(name.getLastName()); - setFirstName(name.getFirstName()); - } - - public void setAddress(String street, String city, String state, String zip) throws CreateException, NamingException { - logger.log(BasicLevel.DEBUG, ""); - - AddressL addr = this.getHomeAddress(); - - if (addr == null) { - addr = addressHL.create(street, city, state, zip); - setHomeAddress(addr); - } else { - // Customer already has an address. Change its fields - addr.setStreet(street); - addr.setCity(city); - addr.setState(state); - addr.setZip(zip); - } - } - - public void setAddress(AddressDO addrValue) throws CreateException, NamingException { - logger.log(BasicLevel.DEBUG, ""); - String street = addrValue.getStreet(); - String city = addrValue.getCity(); - String state = addrValue.getState(); - String zip = addrValue.getZip(); - - setAddress(street, city, state, zip); - } - - public AddressDO getAddress() { - logger.log(BasicLevel.DEBUG, ""); - AddressL addrL = this.getHomeAddress(); - if (addrL == null) { - return null; - } - String street = addrL.getStreet(); - String city = addrL.getCity(); - String state = addrL.getState(); - String zip = addrL.getZip(); - AddressDO addrValue = new AddressDO(street, city, state, zip); - return addrValue; - } - - public void addPhoneNumber(String number, byte type) throws NamingException, CreateException, RemoteException { - logger.log(BasicLevel.DEBUG, ""); - PhoneL phone = phoneHL.create(number, type, getName().getLastName()); - Collection phoneNumbers = this.getPhoneNumbers(); - phoneNumbers.add(phone); - } - - public void addCar(String number, byte type) throws NamingException, CreateException, RemoteException { - logger.log(BasicLevel.DEBUG, ""); - CarL car = carHL.create(number, type, getName().getLastName()); - Collection cars = this.getCars(); - cars.add(car); - } - - public void setCreditCard(Date date, String num, String name) throws NamingException, CreateException, RemoteException { - logger.log(BasicLevel.DEBUG, ""); - CreditCardL cc = creditCardHL.create(date, num, name); - setCreditCard(cc); - } - - public void removePhoneNumber(byte typeToRemove) { - logger.log(BasicLevel.DEBUG, "typeToRemove=" + typeToRemove); - - Collection phoneNumbers = this.getPhoneNumbers(); - Iterator iterator = phoneNumbers.iterator(); - - while (iterator.hasNext()) { - PhoneL phone = (PhoneL) iterator.next(); - if (phone.getType() == typeToRemove) { - phoneNumbers.remove(phone); - break; - } - } - } - - public void removeCar(byte typeToRemove) { - logger.log(BasicLevel.DEBUG, "typeToRemove=" + typeToRemove); - - Collection cars = this.getCars(); - Iterator iterator = cars.iterator(); - - while (iterator.hasNext()) { - CarL car = (CarL) iterator.next(); - if (car.getType() == typeToRemove) { - cars.remove(car); - break; - } - } - } - - public void updatePhoneNumber(String number, byte typeToUpdate) { - logger.log(BasicLevel.DEBUG, "typeToUpdate=" + typeToUpdate); - - Collection phoneNumbers = this.getPhoneNumbers(); - Iterator iterator = phoneNumbers.iterator(); - while (iterator.hasNext()) { - PhoneL phone = (PhoneL) iterator.next(); - if (phone.getType() == typeToUpdate) { - phone.setNumber(number); - break; - } - } - } - - public void accident(String carnumber, String invoicenumber) throws RemoteException, CreateException, NamingException { - logger.log(BasicLevel.DEBUG, "invoicenumber=" + invoicenumber); - - // retrieve car in the list - CarL car = null; - boolean found = false; - for (Iterator i = getCars().iterator(); i.hasNext();) { - car = (CarL) i.next(); - if (car.getNumber().equals(carnumber)) { - found = true; - break; - } - } - if (! found) { - throw new RemoteException("Car not found:" + carnumber); - } - - // Create new invoice - car.addInvoice(invoicenumber); - } - - public void updateCar(String number, byte typeToUpdate) { - logger.log(BasicLevel.DEBUG, "typeToUpdate=" + typeToUpdate); - - Collection cars = this.getCars(); - Iterator iterator = cars.iterator(); - while (iterator.hasNext()) { - CarL car = (CarL) iterator.next(); - if (car.getType() == typeToUpdate) { - car.setNumber(number); - break; - } - } - } - - public Vector getPhoneList() { - logger.log(BasicLevel.DEBUG, ""); - - Vector vv = new Vector(); - Collection phoneNumbers = this.getPhoneNumbers(); - - Iterator iterator = phoneNumbers.iterator(); - while (iterator.hasNext()) { - PhoneL phone = (PhoneL) iterator.next(); - String ss = "Type=" + phone.getType() + " Number=" + phone.getNumber(); - vv.add(ss); - } - return vv; - } - - public Vector getCarList() { - logger.log(BasicLevel.DEBUG, ""); - - Vector vv = new Vector(); - Collection cars = this.getCars(); - - Iterator iterator = cars.iterator(); - while (iterator.hasNext()) { - CarL car = (CarL) iterator.next(); - String ss = "Type=" + car.getType() + " Number=" + car.getNumber(); - vv.add(ss); - } - return vv; - } - - // persistent relationships - - public abstract AddressL getHomeAddress(); - public abstract void setHomeAddress(AddressL address); - - public abstract CreditCardL getCreditCard(); - public abstract void setCreditCard(CreditCardL card); - - public abstract java.util.Collection getPhoneNumbers(); - public abstract void setPhoneNumbers(java.util.Collection phones); - - public abstract java.util.Collection getCars(); - public abstract void setCars(java.util.Collection cars); - - // abstract accessor methods - public abstract Integer getId(); - public abstract void setId(Integer id); - - public abstract String getLastName( ); - public abstract void setLastName(String lname); - - public abstract String getFirstName( ); - public abstract void setFirstName(String fname); - - // standard call back methods - - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - try { - ejbContext = ec; - InitialContext cntx = new InitialContext(); - creditCardHL = (CreditCardHL) cntx.lookup("java:comp/env/ejb/CreditCardHomeLocal"); - addressHL = (AddressHL) cntx.lookup("java:comp/env/ejb/AddressHomeLocal"); - phoneHL = (PhoneHL) cntx.lookup("java:comp/env/ejb/PhoneHomeLocal"); - carHL = (CarHL) cntx.lookup("java:comp/env/ejb/CarHomeLocal"); - } catch (Exception e) { - throw new javax.ejb.EJBException(e); - } - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - checkCMRAccess(); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - checkCMRAccess(); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - checkCMRAccess(); - } - - protected void checkCMRAccess() { - logger.log(BasicLevel.DEBUG, ""); - Collection col = getCars(); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InsuranceBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InsuranceBean.java deleted file mode 100644 index 3108e931b1..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InsuranceBean.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityContext; -import javax.ejb.EntityBean; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Insurance - * @author Ph Durieux - */ -public abstract class InsuranceBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - - public Integer ejbCreate(String number) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(number); - return null; - } - - public void ejbPostCreate(String number) { - logger.log(BasicLevel.DEBUG, ""); - } - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract String getNumber(); - public abstract void setNumber(String number); - - // persistent relationships - public abstract CarL getCar(); - public abstract void setCar(CarL car); - - - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * this instance is being removed. - * we must be able to access bean fields here, including the CMRs - */ - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - CarL mycar = getCar(); - if (mycar == null) { - logger.log(BasicLevel.ERROR, "CMR field is null"); - throw new RemoveException("Cannot access CMR field inside ejbRemove"); - } - String carnumber = mycar.getNumber(); - if (! getNumber().equals("000" + carnumber)) { - throw new RemoveException("Bad car number while removing Insurance:" + carnumber); - } - CustomerL cust = mycar.getCustomer(); - if (cust == null) { - logger.log(BasicLevel.ERROR, "Cannot get customer from insurance"); - throw new RemoveException("Cannot get customer from insurance"); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InvoiceBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InvoiceBean.java deleted file mode 100644 index d93562187b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/InvoiceBean.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityContext; -import javax.ejb.EntityBean; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Invoice - * @author Ph Durieux - */ -public abstract class InvoiceBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - - public Integer ejbCreate(String number) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(number); - return null; - } - - public void ejbPostCreate(String number) { - logger.log(BasicLevel.DEBUG, ""); - } - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract String getNumber(); - public abstract void setNumber(String number); - - // persistent relationships - public abstract CarL getCar(); - public abstract void setCar(CarL car); - - - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * this instance is being removed. - * we must be able to access bean fields here, including the CMRs - */ - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, "number=" + getNumber()); - CarL mycar = getCar(); - if (mycar == null) { - logger.log(BasicLevel.ERROR, "CMR field is null"); - throw new RemoveException("Cannot access CMR field inside Invoice.ejbRemove"); - } - String carnumber = mycar.getNumber(); - if (! getNumber().startsWith(carnumber)) { - throw new RemoveException("Bad car number while removing Invoice:" + carnumber); - } - CustomerL cust = mycar.getCustomer(); - if (cust == null) { - logger.log(BasicLevel.ERROR, "Cannot get customer from invoice"); - throw new RemoveException("Cannot get customer from invoice"); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/PhoneBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/PhoneBean.java deleted file mode 100644 index 0027657a66..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/cascade/PhoneBean.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.cascade; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Implementation for bean Phone - * @author Ph Durieux - */ -public abstract class PhoneBean implements EntityBean { - - static protected Logger logger = null; - protected EntityContext ejbContext = null; - - public Object ejbCreate(String number, byte type, String name) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - setNumber(number); - setType(type); - setName(name); - return null; - } - - public void ejbPostCreate(String number, byte type, String name) { - logger.log(BasicLevel.DEBUG, ""); - } - - // persistent fields - public abstract Integer getId(); - public abstract void setId(Integer id); - public abstract String getNumber(); - public abstract void setNumber(String number); - public abstract byte getType(); - public abstract void setType(byte type); - public abstract String getName(); - public abstract void setName(String name); - - // standard call back methods - public void setEntityContext(EntityContext ec) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ec; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/AEC2.java deleted file mode 100644 index 60bbdbcb6d..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/AEC2.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - - public void assignB(String c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - if (c != null) { - BLocal bl = null; - bl = bhl.findByPrimaryKey(c); - setB(bl); - } else - setB(null); - } - - public String retrieveB() { - logger.log(BasicLevel.DEBUG, ""); - BLocal lejbB = getB(); - if (lejbB == null) { - return null; - } else { - return lejbB.getId(); - } - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - public abstract String getBcmrvalue(); - public abstract void setBcmrvalue(String id); - - public abstract BLocal getB(); - public abstract void setB(BLocal bl); - - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/BEC2.java deleted file mode 100644 index 5563c8cd47..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/BEC2.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author Ph Durieux - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P1EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P1EC2.java deleted file mode 100644 index b6dabe3d5e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P1EC2.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class P1EC2 implements javax.ejb.EntityBean { - - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - public abstract String getPf1(); - public abstract void setPf1(String pf1); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id, String pf1) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setPf1(pf1); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id, String pf1) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P2EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P2EC2.java deleted file mode 100644 index bd8eb1bd8f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P2EC2.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class P2EC2 implements javax.ejb.EntityBean { - - private P1HomeLocal p1home = null; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - public abstract P1Local getP1(); - public abstract void setP1(P1Local p1); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - try { - P1Local p1l = p1home.findByPrimaryKey(id); - setP1(p1l); - } catch (FinderException e) { - throw new CreateException("P2 cannot exist without matching P1"); - } - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - p1home = (P1HomeLocal) ictx.lookup("java:comp/env/ejb/p1"); - } catch (NamingException e) { - throw new EJBException("Impossible to get HomeLocal:", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // --------------------------------------------------------------------- - // P1Remote Implementation - // --------------------------------------------------------------------- - - /** - * - */ - public String getP1Value() { - P1Local p1l = getP1(); - return p1l.getPf1(); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P3EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P3EC2.java deleted file mode 100644 index 5906b9b559..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P3EC2.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class P3EC2 implements javax.ejb.EntityBean { - - private P1HomeLocal p1home = null; - private P4HomeLocal p4home = null; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId3(); - public abstract void setId3(String id3); - - public abstract String getId(); - public abstract void setId(String id); - - public abstract P1Local getP1(); - public abstract void setP1(P1Local p1); - public abstract P4Local getP4(); - public abstract void setP4(P4Local p4); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id3, String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId3(id3); - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id3, String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id3=" + id3 + " id=" + id); - try { - P1Local p1l = p1home.findByPrimaryKey(id); - setP1(p1l); - } catch (FinderException e) { - throw new CreateException("P3 cannot exist without matching P1"); - } - try { - P4PK pk4 = new P4PK(id); - P4Local p4l = p4home.findByPrimaryKey(pk4); - setP4(p4l); - } catch (FinderException e) { - throw new CreateException("P3 cannot exist without matching P4"); - } - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - p1home = (P1HomeLocal) ictx.lookup("java:comp/env/ejb/p1"); - p4home = (P4HomeLocal) ictx.lookup("java:comp/env/ejb/p4"); - } catch (NamingException e) { - throw new EJBException("Impossible to get HomeLocal:", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // --------------------------------------------------------------------- - // P3Remote Implementation - // --------------------------------------------------------------------- - - /** - * - */ - public String getP1Value() { - P1Local p1l = getP1(); - return p1l.getPf1(); - } - - public String getP4Value() { - P4Local p4l = getP4(); - return p4l.getPf4(); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P4EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P4EC2.java deleted file mode 100644 index 8d9b2528e9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/dass/P4EC2.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.dass; - -import java.util.Collection; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class P4EC2 implements javax.ejb.EntityBean { - - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - public abstract String getPf4(); - public abstract void setPf4(String pf4); - - public abstract Collection getP3(); - public abstract void setP3(Collection p3); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id, String pf4) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setPf4(pf4); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id, String pf4) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/family/PeopleEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/family/PeopleEC2.java deleted file mode 100644 index b86675fbac..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/family/PeopleEC2.java +++ /dev/null @@ -1,377 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.family; - -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Bean implementation. This is an example of bean with relation between - * instances of the same bean. Each instance represents a people, the PK - * is the name, and he may have a mother, a father, and a spouse. - * @author Philippe Durieux - */ -public abstract class PeopleEC2 implements javax.ejb.EntityBean { - - private static Logger logger = null; - private EntityContext ejbContext; - private InitialContext ictx; - private Context myEnv; - private PeopleHomeLocal homeLocal = null; - private PeopleHome home = null; - - // --------------------------------------------------------------------- - // CMP fields - // --------------------------------------------------------------------- - public abstract String getName(); - public abstract void setName(String name); - - // --------------------------------------------------------------------- - // CMR fields - // --------------------------------------------------------------------- - public abstract Collection getChildren(); - public abstract void setChildren(Collection c); - - public abstract PeopleLocal getFather(); - public abstract void setFather(PeopleLocal p); - - public abstract PeopleLocal getMother(); - public abstract void setMother(PeopleLocal p); - - public abstract PeopleLocal getUnion(); - public abstract void setUnion(PeopleLocal p); - - // --------------------------------------------------------------------- - // Home operations - // --------------------------------------------------------------------- - - public java.lang.String ejbCreate(String name, String papa, String maman) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, getName()); - setName(name); - return null; - } - - public void ejbPostCreate(String name, String papa, String maman) throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, getName()); - if (papa != null) { - try { - PeopleLocal father = homeLocal.findByPrimaryKey(papa); - setFather(father); - } catch (FinderException e) { - throw new CreateException("Father unknown"); - } - } - if (maman != null) { - try { - PeopleLocal mother = homeLocal.findByPrimaryKey(maman); - setMother(mother); - } catch (FinderException e) { - throw new CreateException("Mother unknown"); - } - } - } - - /** - * Home method. - */ - public void ejbHomeUnion(String name1, String name2) throws FinderException, RemoteException { - logger.log(BasicLevel.DEBUG, name1 + " with " + name2); - try { - PeopleLocal p1 = homeLocal.findByPrimaryKey(name1); - PeopleLocal p2 = homeLocal.findByPrimaryKey(name2); - p1.setUnion(p2); - } catch (FinderException e) { - logger.log(BasicLevel.ERROR, "Cannot find people"); - throw e; - } - } - - /** - * Home method. - */ - public void ejbHomeDivorce(String name1, String name2) throws FinderException, RemoteException { - logger.log(BasicLevel.DEBUG, name1 + " with " + name2); - try { - PeopleLocal p1 = homeLocal.findByPrimaryKey(name1); - PeopleLocal p2 = homeLocal.findByPrimaryKey(name2); - if (p1.getUnion() != p2) { - logger.log(BasicLevel.ERROR, name1 + " and " + name2 + " were not united yet"); - throw new RemoteException(name1 + " and " + name2 + " were not united yet"); - } - p1.setUnion(null); - } catch (FinderException e) { - logger.log(BasicLevel.ERROR, "Cannot find people"); - throw e; - } - } - - - // --------------------------------------------------------------------- - // EJB standard callbacks - // --------------------------------------------------------------------- - - public void setEntityContext(javax.ejb.EntityContext ctx) { - // init the logger - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, getName()); - ejbContext = ctx; - try { - // Get initial Context - ictx = new InitialContext(); - myEnv = (Context) ictx.lookup("java:comp/env"); - } catch (NamingException e) { - throw new EJBException("PeopleEC2: Cannot get filehome:" + e); - } - checkEnv("setEntityContext"); - home = (PeopleHome) ejbContext.getEJBHome(); - homeLocal = (PeopleHomeLocal) ejbContext.getEJBLocalHome(); - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, getName()); - ejbContext = null; - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, getName()); - } - - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, getName()); - checkEnv("ejbLoad"); - } - - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, getName()); - checkEnv("ejbStore"); - } - - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, getName()); - checkEnv("ejbPassivate"); - } - - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, getName()); - checkEnv("ejbActivate"); - } - - // --------------------------------------------------------------------- - // Implementation of the Remote interface - // --------------------------------------------------------------------- - - /** - * Retrieve my Father, as a Remote Object. - * Mainly convert Local object to Remote Object. - */ - public People myFather() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - People father = null; - PeopleLocal f = getFather(); - if (f == null) { - return null; - } - try { - father = home.findByPrimaryKey(f.getName()); - } catch (FinderException e) { - throw new RemoteException("Lost father"); - } - return father; - } - - /** - * Retrieve my Mother, as a Remote Object. - * Mainly convert Local object to Remote Object. - */ - public People myMother() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - People mother = null; - PeopleLocal f = getMother(); - if (f == null) { - return null; - } - try { - mother = home.findByPrimaryKey(f.getName()); - } catch (FinderException e) { - throw new RemoteException("Lost mother"); - } - return mother; - } - - /** - * Retrieve my children, as a Collection of Remote Objects. - * Mainly convert Local objects to Remote Objects. - */ - public Collection myChildren() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - Collection ret = new ArrayList(); - Collection c = getChildren(); - if (c.size() == 0) { - // If no children, maybe it's because I'm the father. - // In this case, must use a finder method (uni-directional relation) - try { - c = homeLocal.findChildren(getName()); - } catch (FinderException e) { - throw new RemoteException("Cannot get children"); - } - } - for (Iterator i = c.iterator(); i.hasNext(); ) { - PeopleLocal p = (PeopleLocal) i.next(); - try { - People pr = home.findByPrimaryKey(p.getName()); - ret.add(pr); - } catch (FinderException e) { - throw new RemoteException("Lost child"); - } - } - return ret; - } - - /** - * Return true if not married - */ - public boolean isSingle() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - return (getUnion() == null); - } - - /** - * Return true if no father - */ - public boolean hasNoFather() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - return (getFather() == null); - } - - /** - * Return true if no mother - */ - public boolean hasNoMother() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - return (getMother() == null); - } - - /** - * @return the People we are married with - */ - public People mySpouse() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - People ret = null; - PeopleLocal f = getUnion(); - if (f == null) { - return null; - } - try { - ret = home.findByPrimaryKey(f.getName()); - } catch (FinderException e) { - throw new RemoteException("Lost spouse"); - } - return ret; - } - - public int kidNumber() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - int ret = getChildren().size(); - if (ret == 0) { - // maybe I'm the father... - try { - ret = homeLocal.findChildren(getName()).size(); - } catch (FinderException e) { - throw new RemoteException("Cannot get my children"); - } - } - return ret; - } - - /** - * @return true if orphan - */ - public boolean isOrphan() throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - return (getMother() == null && getFather() == null); - } - - /** - * @return true if is brother or sister with other People - * @param c name of the other people. - */ - public boolean brotherSisterOf(String c) throws RemoteException { - logger.log(BasicLevel.DEBUG, getName()); - try { - PeopleLocal p = homeLocal.findByPrimaryKey(c); - if (getMother() != null && p.getMother() == getMother()) { - return true; - } - if (getFather() != null && p.getFather() == getFather()) { - return true; - } - } catch (FinderException e) { - } - return false; - } - - // --------------------------------------------------------------------- - // private methods - // --------------------------------------------------------------------- - - /** - * Check environment variables - */ - void checkEnv(String method) { - try { - String value = (String) myEnv.lookup("myname"); - if (!value.equals("myentity")) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup failed: myname=" + value); - throw new EJBException("PeopleEC2 1: " + method); - } - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, ": myEnv.lookup raised exception:\n" + e); - throw new EJBException("PeopleEC2 2: " + method); - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/AEC2.java deleted file mode 100644 index 832674d8a0..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/AEC2.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mnb; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - } - } - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(String pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(String pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(String pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(String pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(String pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/BEC2.java deleted file mode 100644 index db8c0da147..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnb/BEC2.java +++ /dev/null @@ -1,283 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mnb; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1(){ - } - - public void assignA(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) { - al.add(ahl.findByPrimaryKey((String) it.next())); - } - } - } - setA(al); - } - - public void assignAInNewTx(Collection c) throws FinderException { - assignA(c); - } - - public Collection retrieveA() { - Collection bs = getA(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((ALocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveAInNewTx() { - return retrieveA(); - } - - public void addInA(String pkb) throws FinderException { - getA().add(ahl.findByPrimaryKey(pkb)); - } - public void addInAInNewTx(String pkb) throws FinderException { - addInA(pkb); - } - - public void addAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((String) it.next())); - getA().addAll(al); - } - public void addAllInAInNewTx(Collection pkbs) throws FinderException { - addAllInA(pkbs); - } - - public void removeFromA(String pkb) throws FinderException { - getA().remove(ahl.findByPrimaryKey(pkb)); - } - public void removeFromAInNewTx(String pkb) throws FinderException { - removeFromA(pkb); - } - - public void clearA() { - getA().clear(); - } - - public void clearAInNewTx() { - clearA(); - } - - public boolean containAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((String) it.next())); - return getA().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean A defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInA(String pkb) throws FinderException { - return (getA().contains(ahl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getA(); - - public abstract void setA(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/AEC2.java deleted file mode 100644 index 22a404b3bd..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/AEC2.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mnu; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1() { - } - - public void assignB(Collection c) throws FinderException { - ArrayList al; - if (c == null) { - al = new ArrayList(); - } else { - if (c.size() == -1) { - al = new ArrayList(); - } else { - al = new ArrayList(c.size()); - for (Iterator it = c.iterator(); it.hasNext();) { - al.add(bhl.findByPrimaryKey((String) it.next())); - } - } - } - setB(al); - } - - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result; - if (bs.size() == -1) { - result = new ArrayList(); - } else { - result = new ArrayList(bs.size()); - } - - for (Iterator it = bs.iterator(); it.hasNext();) { - result.add(((BLocal) it.next()).getPrimaryKey()); - } - return result; - } - - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(String pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - - public void addInBInNewTx(String pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) { - al.add(bhl.findByPrimaryKey((String) it.next())); - } - getB().addAll(al); - } - - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(String pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - - public void removeFromBInNewTx(String pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for (Iterator it = pkbs.iterator(); it.hasNext();) { - al.add(bhl.findByPrimaryKey((String) it.next())); - } - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throws FinderException if the primary key does not match to a bean. - */ - public boolean containInB(String pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - protected static Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/BEC2.java deleted file mode 100644 index 8be2cbfb71..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mnu/BEC2.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mnu; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - public void m1(){ - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/AEC2.java deleted file mode 100644 index 0beda505b6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/AEC2.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mou; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(String c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - if (c != null) { - BLocal bl = null; - bl = bhl.findByPrimaryKey(c); - setB(bl); - } else - setB(null); - } - - public void assignBInNewTx(String c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - assignB(c); - } - - public String retrieveB() { - BLocal lejbB = getB(); - if (lejbB == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } else { - logger.log(BasicLevel.DEBUG, "return " + lejbB.getId()); - return lejbB.getId(); - } - } - - public String retrieveBInNewTx() { - logger.log(BasicLevel.DEBUG, ""); - return retrieveB(); - } - - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract BLocal getB(); - - public abstract void setB(BLocal bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id, String idb) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id, String idb) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - try { - assignB(idb); - } catch (FinderException e) { - throw new CreateException("Bad arg: " + idb); - } - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id, BLocal b) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id, BLocal b) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - setB(b); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/BEC2.java deleted file mode 100644 index 004558bce0..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/BEC2.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.mou; - - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - public void m1(){ - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/jonas-mou.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/jonas-mou.xml deleted file mode 100644 index 18c5fcd209..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/mou/jonas-mou.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - AEjb - relation_mou_AHome - removeall - container-serialized - - jdbc_1 - JT2_MOU_A - - id - c_ida - - - - - - BEjb - relation_mou_BHome - removeall - container-serialized - - jdbc_1 - JT2_MOU_B - - id - c_idb - - - - - - AtxEjb - relation_mou_AtxHome - removeall - container-read-write - - jdbc_1 - JT2_MOU_Atx - - id - c_ida - - - - - - BtxEjb - relation_mou_BtxHome - removeall - container-read-write - - jdbc_1 - JT2_MOU_Btx - - id - c_idb - - - - - - A1Ejb - relation_mou_A1Home - removeall - container-serialized - - jdbc_1 - JT2_MOU_A1 - - id - c_ida - - - - - - B1Ejb - relation_mou_B1Home - removeall - container-serialized - - jdbc_1 - JT2_MOU_B1 - - id - c_idb - - - - - - a2b - - a_2_b - - cfk_idb - - - - - - a12b1 - - a1_2_b1 - - cfk_idb - - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/AEC2.java deleted file mode 100644 index 25c7ba8207..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/AEC2.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.omb; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * @author S.Chassande-Barrioz, Helene Joanin - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - assignB(c); - } - - public Collection retrieveB() { - logger.log(BasicLevel.DEBUG, ""); - Collection bs = getB(); - ArrayList result = new ArrayList(bs.size()); - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - public Collection retrieveBInNewTx() { - logger.log(BasicLevel.DEBUG, ""); - return retrieveB(); - } - public Collection retrieveBisB() { - logger.log(BasicLevel.DEBUG, ""); - // To reproduce the bug #300156: Error on creating Array from cmr-collection - // same as retrieveB(), except the bs initialization - List bs = new ArrayList(getB()); - ArrayList result = new ArrayList(bs.size()); - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - - public void addInB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - addInB(pkb); - } - - public void addNewB(String pkb) throws CreateException, FinderException { - logger.log(BasicLevel.DEBUG, ""); - BLocal bl = bhl.create(pkb); - getB().add(bl); - bhl.findByName(pkb, getId()); - } - - public void addAllInB(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - addAllInB(pkbs); - } - - public void removeFromB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - removeFromB(pkb); - } - - public void clearB() { - logger.log(BasicLevel.DEBUG, ""); - getB().clear(); - } - - public void clearBInNewTx() { - logger.log(BasicLevel.DEBUG, ""); - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - /** - * This method check it isn't allowed to reset the pk - * and that the container throw the java.lang.IllegalStateException. - * It returns true if ok. - * See spec 2.0, chapter 10.3.5, page 134 - */ - public boolean testResetPkForbidden(String pka) { - logger.log(BasicLevel.DEBUG, ""); - boolean ret = false; - try { - setId(pka); - } catch (IllegalStateException e) { - ret = true; - } - return ret; - } - - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - // This cmp field with an utility class type Product - // to test that this Product class can be resolved in the JORM adapter - public abstract Product getProduct(); - public abstract void setProduct(Product p); - - public abstract Collection getB(); - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setProduct(new Product()); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/BEC2.java deleted file mode 100644 index b7117127d6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/BEC2.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.omb; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -/** - * @author S.Chassande-Barrioz, Helene Joanin - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1() { - } - - public void testSetCmrWithDeleted() throws EJBException { - logger.log(BasicLevel.DEBUG, ""); - ALocal ax9; - try { - ax9 = ahl.create("ax9"); - ax9.remove(); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - this.setA(ax9); - throw new EJBException("entity was not deleted, expected IllegalArgumentException"); - } catch (IllegalArgumentException e) { - // Pass - } catch (Exception e) { - throw new EJBException("Caugth unexpected exception: " + e); - } - } - - public void assignA(String pkA) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + pkA); - ALocal a = null; - if (pkA != null) { - a = ahl.findByPrimaryKey(pkA); - } - logger.log(BasicLevel.DEBUG, "assign:" + a); - setA(a); - } - - public void assignAInNewTx(String pkA) throws FinderException { - assignA(pkA); - } - - public String retrieveA() { - if (getA() == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } - logger.log(BasicLevel.DEBUG, "return : " + getA().getPrimaryKey()); - return (String) (getA().getPrimaryKey()); - } - - public String retrieveAInNewTx() { - return retrieveA(); - } - - public boolean equalsRelA(String pka) throws FinderException { - return (pka == retrieveA()); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - // This cmp field with an utility class type Product - // to test that this Product class can be resolved in the JORM adapter - public abstract Product getProduct(); - public abstract void setProduct(Product p); - - - public abstract ALocal getA(); - public abstract void setA(ALocal a); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setProduct(new Product()); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of - * the object. - * @throws EJBException - Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - setA(null); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/FrontSFR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/FrontSFR.java deleted file mode 100644 index 2d71449dbf..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omb/FrontSFR.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.omb; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Frontal Session bean. - */ -public class FrontSFR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private AHomeLocal ahl = null; - private BHomeLocal bhl = null; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate(String pka, String pkb) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - try { - ALocal al = ahl.create(pka); - BLocal bl = bhl.create(pkb); - al.getB().add(bl); - bhl.findByName(pkb, al.getId()); - } catch (Exception e) { - throw new CreateException("ejbCreate failed " + e); - } - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Front implementation - // ------------------------------------------------------------------ - - /** - * method1 - */ - public void method1() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * method2 - */ - public void method2(java.lang.String s) { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Ensure the javax.ejb.EJBException is thrown when trying - * to invoke an accessor method on a deleted entitybean object - */ - public void testRemove1() { - logger.log(BasicLevel.DEBUG, ""); - ALocal ax9; - try { - ax9 = ahl.create("ax9"); - ax9.remove(); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - ax9.getId(); - throw new EJBException("entity was not deleted, expected EJBException"); - } catch (EJBException e) { - // Pass - } catch (Exception e) { - throw new EJBException("Caught unexpected exception: " + e); - } - } - - /** - * Ensure the IllegalArgumentException is thrown when trying - * to set a collection cmr-field to a wrong relationship type - */ - public void testSetCmrWithDeleted() { - logger.log(BasicLevel.DEBUG, ""); - BLocal b0; - try { - b0 = bhl.findByPrimaryKey("b0"); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - b0.testSetCmrWithDeleted(); - } catch (Exception e) { - throw new EJBException("Caugth unexpected exception: " + e); - } - } - - /** - * Ensure the IllegalArgumentException is thrown when trying - * to set a collection cmr-field to a wrong relationship type - */ - public void testSetCmrWithWrongType() { - logger.log(BasicLevel.DEBUG, ""); - ALocal a0; - try { - a0 = ahl.findByPrimaryKey("a0"); - } catch (FinderException e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - a0.getB().add(a0); - } catch (IllegalArgumentException e) { - // Pass - return; - } catch (Exception e) { - throw new EJBException("Caugth unexpected exception: " + e); - } - throw new EJBException("Expected IllegalArgumentException"); - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/AEC2.java deleted file mode 100644 index 526735418f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/AEC2.java +++ /dev/null @@ -1,281 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.omu; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - assignB(c); - } - - public Collection retrieveB() { - logger.log(BasicLevel.DEBUG, ""); - Collection bs = getB(); - ArrayList result = new ArrayList(bs.size()); - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - public Collection retrieveBInNewTx() { - logger.log(BasicLevel.DEBUG, ""); - return retrieveB(); - } - - public void addInB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - addAllInB(pkbs); - } - - public void removeFromB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - removeFromB(pkb); - } - - public void clearB() { - logger.log(BasicLevel.DEBUG, ""); - getB().clear(); - } - - public void clearBInNewTx() { - logger.log(BasicLevel.DEBUG, ""); - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(String pkb) throws FinderException { - logger.log(BasicLevel.DEBUG, ""); - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/BEC2.java deleted file mode 100644 index ea85cabc72..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/omu/BEC2.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.omu; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - public void m1(){ - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/AEC2.java deleted file mode 100644 index ff629f419a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/AEC2.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(String c) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + c); - if (c != null) { - BLocal bl = null; - bl = bhl.findByPrimaryKey(c); - setB(bl); - } else - setB(null); - } - public void assignBInNewTx(String c) throws FinderException { - assignB(c); - } - - public String retrieveB() { - BLocal lejbB = getB(); - if (lejbB == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } else { - logger.log(BasicLevel.DEBUG, "return " + lejbB.getId()); - return lejbB.getId(); - } - } - - public String retrieveBInNewTx() { - return retrieveB(); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - public abstract BLocal getB(); - public abstract void setB(BLocal bl); - - public abstract BLocal getBBis(); - public abstract void setBBis(BLocal bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BEC2.java deleted file mode 100644 index 6e448ec21f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BEC2.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1() { - } - - public void testSetCmrWithDeleted() throws EJBException { - logger.log(BasicLevel.DEBUG, ""); - ALocal ax9; - try { - ax9 = ahl.create("ax9"); - ax9.remove(); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - this.setA(ax9); - throw new EJBException("entity was not deleted, expected IllegalArgumentException"); - } catch (IllegalArgumentException e) { - // Pass - } catch (Exception e) { - throw new EJBException("Unexpected exception at 1st access: " + e); - } - try { - this.setA(ax9); - throw new EJBException("entity was not deleted, expected IllegalArgumentException"); - } catch (IllegalArgumentException e) { - // Pass - } catch (Exception e) { - throw new EJBException("Unexpected exception at 2nd access: " + e); - } - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public abstract ALocal getA(); - public abstract void setA(ALocal al); - - public abstract ALocal getABis(); - public abstract void setABis(ALocal al); - - public String retrieveA() { - ALocal lejbA = getA(); - if (lejbA==null) - return null; - else - return lejbA.getId(); - } - - public String retrieveAInNewTx() { - return retrieveA(); - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BHomeLocal.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BHomeLocal.java deleted file mode 100644 index 3e7b800231..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BHomeLocal.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import javax.ejb.EJBLocalHome; -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; - -/** - * @author S.Chassande-Barrioz - */ -public interface BHomeLocal extends EJBLocalHome { - - BLocal create(String id) throws CreateException; - - BLocal findByPrimaryKey(String pk) throws FinderException; - BLocal findByName(String name, String project) throws FinderException; - Collection findAll() throws FinderException; -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BLocal.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BLocal.java deleted file mode 100644 index 1b96d81648..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/BLocal.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import javax.ejb.EJBLocalObject; - -/** - * @author S.Chassande-Barrioz - */ -public interface BLocal extends EJBLocalObject { - - String getId(); - void m1(); - void testSetCmrWithDeleted(); - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/Front.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/Front.java deleted file mode 100644 index 5570e652db..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/Front.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * Frontal2 remote interface - */ -public interface Front extends EJBObject { - public void testRemove1() throws RemoteException; - public void testSetCmrWithDeleted() throws RemoteException; -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontHome.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontHome.java deleted file mode 100644 index 97e4160810..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontHome.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Front - */ -public interface FrontHome extends EJBHome { - Front create() throws CreateException, RemoteException; - Front create(String p, String r) throws CreateException, RemoteException; -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontSFR.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontSFR.java deleted file mode 100644 index 1197b5b102..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/FrontSFR.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oob; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; -import org.ow2.jonas.lib.util.Log; - - -/** - * Frontal Session bean. - */ -public class FrontSFR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - private AHomeLocal ahl = null; - private BHomeLocal bhl = null; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate(String pka, String pkb) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - try { - ALocal al = ahl.create(pka); - BLocal bl = bhl.create(pkb); - al.setB(bl); - bhl.findByName(pkb, al.getId()); - } catch (Exception e) { - throw new CreateException("ejbCreate failed " + e); - } - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Front implementation - // ------------------------------------------------------------------ - - /** - * Ensure the javax.ejb.EJBException is thrown when trying - * to invoke an accessor method on a deleted entitybean object - */ - public void testRemove1() { - logger.log(BasicLevel.DEBUG, ""); - ALocal ax9; - try { - ax9 = ahl.create("ax9"); - ax9.remove(); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - ax9.getId(); - throw new EJBException("entity was not deleted, expected EJBException"); - } catch (EJBException e) { - // Pass - } catch (Exception e) { - throw new EJBException("Caught unexpected exception: " + e); - } - } - - /** - * Ensure the IllegalArgumentException is thrown when trying - * to set a collection cmr-field to a wrong relationship type - */ - public void testSetCmrWithDeleted() { - logger.log(BasicLevel.DEBUG, ""); - BLocal b0; - try { - b0 = bhl.findByPrimaryKey("b0"); - } catch (Exception e) { - throw new EJBException("Initial state creation problem: " + e); - } - try { - b0.testSetCmrWithDeleted(); - } catch (Exception e) { - throw new EJBException("Caugth bad exception: " + e); - } - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/jonas-oob.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/jonas-oob.xml deleted file mode 100644 index b3792a105e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/jonas-oob.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - FrontSFR - relation_oob_FrontHome - 2 - - - - AEjb - relation_oob_AHome - removeall - container-serialized - false - - jdbc_1 - JT2_OOB_A - - id - c_ida - - - - - - BEjb - relation_oob_BHome - removeall - container-serialized - false - - jdbc_1 - JT2_OOB_B - - id - c_idb - - - - - - AtxEjb - relation_oob_AtxHome - removeall - container-read-write - - jdbc_1 - JT2_OOB_Atx - - id - c_ida - - - - - - BtxEjb - relation_oob_BtxHome - removeall - container-read-write - - jdbc_1 - JT2_OOB_Btx - - id - c_idb - - - - - - a2b - - b_2_a - - cfk_ida - - - - - - atx2btx - - btx_2_atx - - cfk_ida - - - - - - bis_a2b - - bis_b_2_a - - cfk_ida_bis - - - - - - bis_a2btx - - bis_b_2_atx - - cfk_ida_bis - - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/oob.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/oob.xml deleted file mode 100644 index 91e0e82214..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oob/oob.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - Beans used to test a relation One-One bidirectional - - - - oob/FrontSFR - FrontSFR - org.objectweb.jonas.jtests.beans.relation.oob.FrontHome - org.objectweb.jonas.jtests.beans.relation.oob.Front - org.objectweb.jonas.jtests.beans.relation.oob.FrontSFR - Stateful - Container - - ejb/a - Entity - org.objectweb.jonas.jtests.beans.relation.oob.AHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.ALocal - AEjb - - - ejb/b - Entity - org.objectweb.jonas.jtests.beans.relation.oob.BHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.BLocal - BEjb - - - - - oob/A - AEjb - org.objectweb.jonas.jtests.beans.relation.oob.AHomeRemote - org.objectweb.jonas.jtests.beans.relation.oob.ARemote - org.objectweb.jonas.jtests.beans.relation.oob.AHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.ALocal - org.objectweb.jonas.jtests.beans.relation.oob.AEC2 - Container - java.lang.String - true - 2.x - jt2_oob_A - - id - - id - - ejb/b - Entity - org.objectweb.jonas.jtests.beans.relation.oob.BHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.BLocal - BEjb - - - - findAll - - - SELECT OBJECT(a) FROM jt2_oob_A a - - - - - oob/B - BEjb - org.objectweb.jonas.jtests.beans.relation.oob.BHomeRemote - org.objectweb.jonas.jtests.beans.relation.oob.BRemote - org.objectweb.jonas.jtests.beans.relation.oob.BHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.BLocal - org.objectweb.jonas.jtests.beans.relation.oob.BEC2 - Container - java.lang.String - true - 2.x - jt2_oob_B - - id - - id - - ejb/a - Entity - org.objectweb.jonas.jtests.beans.relation.oob.AHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.ALocal - AEjb - - - - findByName - - java.lang.String - java.lang.String - - - SELECT OBJECT(b) FROM jt2_oob_B b WHERE b.id = ?1 AND b.a.id = ?2 - - - - findAll - - - SELECT OBJECT(b) FROM jt2_oob_B b - - - - - oob/Atx - AtxEjb - org.objectweb.jonas.jtests.beans.relation.oob.AHomeRemote - org.objectweb.jonas.jtests.beans.relation.oob.ARemote - org.objectweb.jonas.jtests.beans.relation.oob.AHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.ALocal - org.objectweb.jonas.jtests.beans.relation.oob.AEC2 - Container - java.lang.String - true - 2.x - jt2_oob_Atx - - id - - id - - ejb/b - Entity - org.objectweb.jonas.jtests.beans.relation.oob.BHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.BLocal - BtxEjb - - - - findAll - - - SELECT OBJECT(a) FROM jt2_oob_Atx a - - - - - oob/Btx - BtxEjb - org.objectweb.jonas.jtests.beans.relation.oob.BHomeRemote - org.objectweb.jonas.jtests.beans.relation.oob.BRemote - org.objectweb.jonas.jtests.beans.relation.oob.BHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.BLocal - org.objectweb.jonas.jtests.beans.relation.oob.BEC2 - Container - java.lang.String - true - 2.x - jt2_oob_Btx - - id - - id - - ejb/a - Entity - org.objectweb.jonas.jtests.beans.relation.oob.AHomeLocal - org.objectweb.jonas.jtests.beans.relation.oob.ALocal - AtxEjb - - - - findByName - - java.lang.String - java.lang.String - - - SELECT OBJECT(b) FROM jt2_oob_Btx b WHERE b.id = ?1 AND b.a.id = ?2 - - - - findAll - - - SELECT OBJECT(b) FROM jt2_oob_Btx b - - - - - - - a2b - - a_2_b - - One - - AEjb - - - b - - - - - - b_2_a - One - - BEjb - - - a - - - - - - atx2btx - - atx_2_btx - - One - - AtxEjb - - - b - - - - - - btx_2_atx - One - - BtxEjb - - - a - - - - - - bis_a2b - - bis_a_2_b - One - - AEjb - - - bBis - - - - - bis_b_2_a - One - - BEjb - - - aBis - - - - - - bis_a2btx - - bis_a_2_btx - One - - AtxEjb - - - bBis - - - - - bis_b_2_atx - One - - BtxEjb - - - aBis - - - - - - - - AEjb* - BEjb* - Supports - - - - FrontSFR - * - - AtxEjb* - BtxEjb* - Required - - - AEjbassignBInNewTx - AEjbretrieveBInNewTx - BEjbretrieveAInNewTx - RequiresNew - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/AEC2.java deleted file mode 100644 index 2807ef3637..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/AEC2.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oou; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(String c) throws FinderException { - if (c != null) { - BLocal bl = null; - bl = bhl.findByPrimaryKey(c); - setB(bl); - } else - setB(null); - } - public void assignBInNewTx(String c) throws FinderException { - assignB(c); - } - - public String retrieveB() { - BLocal lejbB = getB(); - if (lejbB==null) - return null; - else - return lejbB.getId(); - } - - public String retrieveBInNewTx() { - return retrieveB(); - } - - public void setValueInB(int val) { - getB().setValue(val); - } - - public int getValueInB() { - return getB().getValue(); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract BLocal getB(); - - public abstract void setB(BLocal bl); - - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/BEC2.java deleted file mode 100644 index 5bb97c0e8a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/oou/BEC2.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.oou; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - public void m1(){ - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - public abstract int getValue(); - public abstract void setValue(int v); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setValue(10); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/AEC2.java deleted file mode 100644 index 70e0727d67..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/AEC2.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.pkcomp; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author J.Camilleri - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - public APK getId() { - return (APK) ejbContext.getPrimaryKey(); - } - - public void assignB(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((BPK) it.next())); - } - } - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(BPK pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(BPK pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((BPK) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(BPK pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(BPK pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((BPK) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(BPK pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getIda1(); - - public abstract int getIda2(); - - public abstract void setIda1(String id); - - public abstract void setIda2(int id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String ida1, int ida2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setIda1(ida1); - setIda2(ida2); - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String ida1, int ida2) throws CreateException { - logger.log(BasicLevel.DEBUG, "ida1=" + ida1 + " / ida2=" + ida2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/BEC2.java deleted file mode 100644 index 6ab569c0e5..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkcomp/BEC2.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.pkcomp; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; -/** - * @author J.Camilleri - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1(){ - } - - public BPK getId() { - return (BPK) ejbContext.getPrimaryKey(); - } - - public void assignA(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) { - al.add(ahl.findByPrimaryKey((APK) it.next())); - } - } - } - setA(al); - } - - public void assignAInNewTx(Collection c) throws FinderException { - assignA(c); - } - - public Collection retrieveA() { - Collection bs = getA(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((ALocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveAInNewTx() { - return retrieveA(); - } - - public void addInA(APK pkb) throws FinderException { - getA().add(ahl.findByPrimaryKey(pkb)); - } - public void addInAInNewTx(APK pkb) throws FinderException { - addInA(pkb); - } - - public void addAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((APK) it.next())); - getA().addAll(al); - } - public void addAllInAInNewTx(Collection pkbs) throws FinderException { - addAllInA(pkbs); - } - - public void removeFromA(APK pkb) throws FinderException { - getA().remove(ahl.findByPrimaryKey(pkb)); - } - public void removeFromAInNewTx(APK pkb) throws FinderException { - removeFromA(pkb); - } - - public void clearA() { - getA().clear(); - } - - public void clearAInNewTx() { - clearA(); - } - - public boolean containAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((APK) it.next())); - return getA().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean A defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInA(APK pkb) throws FinderException { - return (getA().contains(ahl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getIdb1(); - - public abstract int getIdb2(); - - public abstract void setIdb1(String id); - - public abstract void setIdb2(int id); - - public abstract Collection getA(); - - public abstract void setA(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String idb1, int idb2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setIdb1(idb1); - setIdb2(idb2); - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String idb1, int idb2) throws CreateException { - logger.log(BasicLevel.DEBUG, "idb1=" + idb1 + " / idb2=" + idb2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/AEC2.java deleted file mode 100644 index db3104254b..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/AEC2.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.pkg.beans; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -import org.objectweb.jonas.jtests.beans.relation.pkg.itf.BHomeLocal; -import org.objectweb.jonas.jtests.beans.relation.pkg.itf.BLocal; - - -/** - * @author S.Chassande-Barrioz - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - } - } - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(String pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(String pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(String pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(String pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((String) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(String pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/BEC2.java deleted file mode 100644 index 2d2ebadf26..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/pkg/beans/BEC2.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.pkg.beans; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -import org.objectweb.jonas.jtests.beans.relation.pkg.itf.AHomeLocal; -import org.objectweb.jonas.jtests.beans.relation.pkg.itf.ALocal; - -/** - * @author S.Chassande-Barrioz - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1(){ - } - - public void assignA(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) { - al.add(ahl.findByPrimaryKey((String) it.next())); - } - } - } - setA(al); - } - - public void assignAInNewTx(Collection c) throws FinderException { - assignA(c); - } - - public Collection retrieveA() { - Collection bs = getA(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((ALocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveAInNewTx() { - return retrieveA(); - } - - public void addInA(String pkb) throws FinderException { - getA().add(ahl.findByPrimaryKey(pkb)); - } - public void addInAInNewTx(String pkb) throws FinderException { - addInA(pkb); - } - - public void addAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((String) it.next())); - getA().addAll(al); - } - public void addAllInAInNewTx(Collection pkbs) throws FinderException { - addAllInA(pkbs); - } - - public void removeFromA(String pkb) throws FinderException { - getA().remove(ahl.findByPrimaryKey(pkb)); - } - public void removeFromAInNewTx(String pkb) throws FinderException { - removeFromA(pkb); - } - - public void clearA() { - getA().clear(); - } - - public void clearAInNewTx() { - clearA(); - } - - public boolean containAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((String) it.next())); - return getA().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean A defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInA(String pkb) throws FinderException { - return (getA().contains(ahl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - - public abstract void setId(String id); - - public abstract Collection getA(); - - public abstract void setA(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/rcycle/PersonEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/rcycle/PersonEC2.java deleted file mode 100644 index 14043173c6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/rcycle/PersonEC2.java +++ /dev/null @@ -1,314 +0,0 @@ -// PersonEC2.java - -package org.objectweb.jonas.jtests.beans.relation.rcycle; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.FinderException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * Class implementation of bean Person which is a CMP2 entity.
    - * This bean Person have several bidirectional relation-ships with itself.
    - * The CMP fields are:
    - * - id
    - * - name
    - * - sex (male or female).
    - * The CMR fields are:
    - * - spouse, (One-One-bi relation),
    - * - parents and children, (Many-Many-bi relation),
    - * - guardian and is-guardian-of, (One-Many-bi relation).
    - * - * @author Helene Joanin - */ -public abstract class PersonEC2 implements javax.ejb.EntityBean { - - private static Logger logger = null; - private javax.ejb.EntityContext ejbContext; - private PersonHomeLocal plHome = null; - - - // --------------------------------------------------------------------- - // Get and Set accessor methods of cmp and cmr fields - // --------------------------------------------------------------------- - - public abstract Integer getId(); - public abstract void setId(Integer id); - - public abstract String getName(); - public abstract void setName(String name); - - public abstract int getSex(); - public abstract void setSex(int sex); - - public abstract PersonLocal getSpouse(); - public abstract void setSpouse(PersonLocal spouse); - - public abstract Collection getParents(); - public abstract void setParents(Collection parents); - - public abstract Collection getChildren(); - public abstract void setChildren(Collection parents); - - public abstract PersonLocal getGuardian(); - public abstract void setGuardian(PersonLocal guardian); - - public abstract Collection getGuardianOf(); - public abstract void setGuardianOf(Collection guardianOf); - - - // --------------------------------------------------------------------- - // Call back methods for those defined in the bean interfaces. - // --------------------------------------------------------------------- - - public java.lang.String ejbCreate(Integer id, String name, int sex) - throws javax.ejb.CreateException { - logger.log(BasicLevel.DEBUG, "id = " + id + ", name = " + name + ", sex = " + sex); - // Init here the bean fields - setId(id); - setName(name); - setSex(sex); - return null; - } - - public void ejbPostCreate(Integer id, String name, int sex) { - logger.log(BasicLevel.DEBUG, ""); - } - - public Integer retrieveSpouse() { - PersonLocal spouse = getSpouse(); - if (spouse == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } else { - logger.log(BasicLevel.DEBUG, "return " + spouse.getId()); - return spouse.getId(); - } - } - - public void assignSpouse(Integer id) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + id); - if (id != null) { - PersonLocal spouse = plHome.findByPrimaryKey(id); - setSpouse(spouse); - } else { - setSpouse(null); - } - } - - public Collection retrieveParents() { - Collection ps = getParents(); - ArrayList result; - if (ps.size() <= 0) { - result = new ArrayList(); - } else { - result = new ArrayList(ps.size()); - } - for (Iterator it = ps.iterator(); it.hasNext();) { - result.add(((PersonLocal) it.next()).getPrimaryKey()); - } - logger.log(BasicLevel.DEBUG, "return=" + result); - return result; - } - - public void assignParents(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + c); - ArrayList al; - if (c == null) { - al = new ArrayList(); - } else { - if (c.size() <= 0) { - al = new ArrayList(); - } else { - al = new ArrayList(c.size()); - for (Iterator it = c.iterator(); it.hasNext();) { - al.add(plHome.findByPrimaryKey((Integer) it.next())); - } - } - } - setParents(al); - } - - public void addInParents(Integer id) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + id); - getParents().add(plHome.findByPrimaryKey(id)); - } - - public Collection retrieveChildren() { - Collection ps = getChildren(); - ArrayList result; - if (ps.size() <= 0) { - result = new ArrayList(); - } else { - result = new ArrayList(ps.size()); - } - for (Iterator it = ps.iterator(); it.hasNext();) { - result.add(((PersonLocal) it.next()).getPrimaryKey()); - } - logger.log(BasicLevel.DEBUG, "return=" + result); - return result; - } - - public Collection retrieveChildrenNames() { - Collection ps = getChildren(); - ArrayList result; - if (ps.size() <= 0) { - result = new ArrayList(); - } else { - result = new ArrayList(ps.size()); - } - for (Iterator it = ps.iterator(); it.hasNext();) { - result.add(((PersonLocal) it.next()).getName()); - } - logger.log(BasicLevel.DEBUG, "return=" + result); - return result; - } - - public void assignChildren(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + c); - ArrayList al; - if (c == null) { - al = new ArrayList(); - } else { - if (c.size() <= 0) { - al = new ArrayList(); - } else { - al = new ArrayList(c.size()); - for (Iterator it = c.iterator(); it.hasNext();) { - al.add(plHome.findByPrimaryKey((Integer) it.next())); - } - } - } - setChildren(al); - } - - public void addInChildren(Integer id) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + id); - getChildren().add(plHome.findByPrimaryKey(id)); - } - - - public Integer retrieveGuardian() { - PersonLocal guardian = getGuardian(); - if (guardian == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } else { - logger.log(BasicLevel.DEBUG, "return " + guardian.getId()); - return guardian.getId(); - } - } - - public void assignGuardian(Integer id) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + id); - if (id != null) { - PersonLocal guardian = plHome.findByPrimaryKey(id); - setGuardian(guardian); - } else { - setGuardian(null); - } - } - - public Collection retrieveGuardianOf() { - Collection ps = getGuardianOf(); - ArrayList result; - if (ps.size() <= 0) { - result = new ArrayList(); - } else { - result = new ArrayList(ps.size()); - } - for (Iterator it = ps.iterator(); it.hasNext();) { - result.add(((PersonLocal) it.next()).getPrimaryKey()); - } - logger.log(BasicLevel.DEBUG, "return=" + result); - return result; - } - - public void assignInGuardianOf(Collection c) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + c); - ArrayList al; - if (c == null) { - al = new ArrayList(); - } else { - if (c.size() <= 0) { - al = new ArrayList(); - } else { - al = new ArrayList(c.size()); - for (Iterator it = c.iterator(); it.hasNext();) { - al.add(plHome.findByPrimaryKey((Integer) it.next())); - } - } - } - setGuardianOf(al); - } - - public void addInGuardianOf(Integer id) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + id); - getGuardianOf().add(plHome.findByPrimaryKey(id)); - } - - public boolean testCmrNull() throws FinderException { - PersonLocal g = plHome.findByPrimaryKey(new Integer(3)); - PersonLocal sg = g.getSpouse(); - if (sg == null) { - return true; - } else { - return false; - } - } - - // --------------------------------------------------------------------- - // Standard call back methods of those defined in javax.ejb.EntityBean - // --------------------------------------------------------------------- - - public void setEntityContext(javax.ejb.EntityContext ctx) { - // init the logger - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - // save the given EntityContext - ejbContext = ctx; - // get the PersonHomeLocal (local home of the current bean - plHome = (PersonHomeLocal) ejbContext.getEJBLocalHome(); - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public void ejbRemove() throws javax.ejb.RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/AttributeEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/AttributeEC2.java deleted file mode 100644 index 74dc601a91..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/AttributeEC2.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.remon; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class AttributeEC2 implements javax.ejb.EntityBean { - - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/MainEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/MainEC2.java deleted file mode 100644 index 374fa67d01..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/remon/MainEC2.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.remon; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Ph Durieux - */ -public abstract class MainEC2 implements javax.ejb.EntityBean { - - private AttributeHome attrhome = null; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId(); - public abstract void setId(String id); - public abstract String getPf1(); - public abstract void setPf1(String pf1); - - public abstract Attribute getAttr(); - public abstract void setAttr(Attribute a); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * Create a new instance with: - * @param id the primary key - * @param pf1 value cmp field - * @param att foreign key attribute - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String id, String pf1, String att) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(id); - setPf1(pf1); - - // In CMP, should return null. - return null; - } - - /** - * Make here the relations between ejbs - * @throws CreateException Failure to create the attribute - */ - public void ejbPostCreate(String id, String pf1, String aname) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - Attribute attr = attrhome.create(aname); - setAttr(attr); - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - attrhome = (AttributeHome) PortableRemoteObject.narrow(ictx.lookup("java:comp/env/ejb/attribute"), AttributeHome.class); - } catch (NamingException e) { - throw new EJBException("Impossible to get AttributeHome:", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - getAttr().remove(); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/AEC2.java deleted file mode 100644 index 3a3494b4f9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/AEC2.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s1pkcomp; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author J.Camilleri - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - public PK getId() { - return (PK) ejbContext.getPrimaryKey(); - } - - public void assignB(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((PK) it.next())); - } - } - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(PK pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(PK pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((PK) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(PK pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(PK pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((PK) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(PK pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId1(); - - public abstract int getId2(); - - public abstract void setId1(String id); - - public abstract void setId2(int id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String ida1, int ida2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId1(ida1); - setId2(ida2); - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String ida1, int ida2) throws CreateException { - logger.log(BasicLevel.DEBUG, "ida1=" + ida1 + " / ida2=" + ida2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/BEC2.java deleted file mode 100644 index 3be73306e7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s1pkcomp/BEC2.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s1pkcomp; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; -/** - * @author J.Camilleri - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - private AHomeLocal ahl = null; - - public void m1(){ - } - - public PK getId() { - return (PK) ejbContext.getPrimaryKey(); - } - - public void assignA(Collection c) throws FinderException { - ArrayList al; - if (c==null) - al = new ArrayList(); - else { - if (c.size()==-1) - al = new ArrayList(); - else { - al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) { - al.add(ahl.findByPrimaryKey((PK) it.next())); - } - } - } - setA(al); - } - - public void assignAInNewTx(Collection c) throws FinderException { - assignA(c); - } - - public Collection retrieveA() { - Collection bs = getA(); - ArrayList result ; - if (bs.size()==-1) - result = new ArrayList(); - else result = new ArrayList(bs.size()); - - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((ALocal) it.next()).getPrimaryKey()); - return result; - } - - public Collection retrieveAInNewTx() { - return retrieveA(); - } - - public void addInA(PK pkb) throws FinderException { - getA().add(ahl.findByPrimaryKey(pkb)); - } - public void addInAInNewTx(PK pkb) throws FinderException { - addInA(pkb); - } - - public void addAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((PK) it.next())); - getA().addAll(al); - } - public void addAllInAInNewTx(Collection pkbs) throws FinderException { - addAllInA(pkbs); - } - - public void removeFromA(PK pkb) throws FinderException { - getA().remove(ahl.findByPrimaryKey(pkb)); - } - public void removeFromAInNewTx(PK pkb) throws FinderException { - removeFromA(pkb); - } - - public void clearA() { - getA().clear(); - } - - public void clearAInNewTx() { - clearA(); - } - - public boolean containAllInA(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(ahl.findByPrimaryKey((PK) it.next())); - return getA().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean A defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInA(PK pkb) throws FinderException { - return (getA().contains(ahl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId1(); - - public abstract int getId2(); - - public abstract void setId1(String id); - - public abstract void setId2(int id); - - public abstract Collection getA(); - - public abstract void setA(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(String idb1, int idb2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId1(idb1); - setId2(idb2); - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - ahl = (AHomeLocal) ictx.lookup("java:comp/env/ejb/a"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String idb1, int idb2) throws CreateException { - logger.log(BasicLevel.DEBUG, "idb1=" + idb1 + " / idb2=" + idb2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/AEC2.java deleted file mode 100644 index ac3b1c86f5..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/AEC2.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s2pkcomp; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Helene Joanin - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public Pk getId(){ - return (Pk)ejbContext.getPrimaryKey(); - } - - public void assignB(Pk c) throws FinderException { - logger.log(BasicLevel.DEBUG, "param=" + c.toString()); - if (c != null) { - BLocal bl = null; - bl = bhl.findByPrimaryKey(c); - setB(bl); - } else { - setB(null); - } - } - public void assignBInNewTx(Pk c) throws FinderException { - assignB(c); - } - - public Pk retrieveB() { - BLocal lejbB = getB(); - if (lejbB == null) { - logger.log(BasicLevel.DEBUG, "return null"); - return null; - } else { - logger.log(BasicLevel.DEBUG, "return " + lejbB.getId()); - return lejbB.getId(); - } - } - - public Pk retrieveBInNewTx() { - return retrieveB(); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId1(); - public abstract void setId1(String id1); - public abstract int getId2(); - public abstract void setId2(int id2); - public abstract BLocal getB(); - public abstract void setB(BLocal bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public Pk ejbCreate(String id1, int id2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId1(id1); - setId2(id2); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id1, int id2) throws CreateException { - logger.log(BasicLevel.DEBUG, "id1="+id1+", id2="+id2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/BEC2.java deleted file mode 100644 index dc5e5ae977..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s2pkcomp/BEC2.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s2pkcomp; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author Helene Joanin - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getId1(); - public abstract void setId1(String id1); - public abstract int getId2(); - public abstract void setId2(int id2); - public abstract ALocal getA(); - public abstract void setA(ALocal al); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - public void m1(){ - } - - public Pk getId(){ - return (Pk) ejbContext.getPrimaryKey(); - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public Pk ejbCreate(String id1, int id2) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId1(id1); - setId2(id2); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - public Pk retrieveA() { - ALocal lejbA = getA(); - if (lejbA==null) - return null; - else - return lejbA.getId(); - } - - public Pk retrieveAInNewTx() { - return retrieveA(); - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id1, int id2) throws CreateException { - logger.log(BasicLevel.DEBUG, "id1="+id1+", id2="+id2); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/AEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/AEC2.java deleted file mode 100644 index a158a5578d..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/AEC2.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s3pkcomp; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.FinderException; -import javax.ejb.EJBException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import java.util.Collection; -import java.util.ArrayList; -import java.util.Iterator; - -/** - * @author H. Joanin - */ -public abstract class AEC2 implements javax.ejb.EntityBean { - - private BHomeLocal bhl = null; - - public void m1(){ - } - - public void assignB(Collection c) throws FinderException { - ArrayList al = new ArrayList(c.size()); - for(Iterator it = c.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((Pk) it.next())); - setB(al); - } - public void assignBInNewTx(Collection c) throws FinderException { - assignB(c); - } - - public Collection retrieveB() { - Collection bs = getB(); - ArrayList result = new ArrayList(bs.size()); - for(Iterator it = bs.iterator(); it.hasNext();) - result.add(((BLocal) it.next()).getPrimaryKey()); - return result; - } - public Collection retrieveBInNewTx() { - return retrieveB(); - } - - public void addInB(Pk pkb) throws FinderException { - getB().add(bhl.findByPrimaryKey(pkb)); - } - public void addInBInNewTx(Pk pkb) throws FinderException { - addInB(pkb); - } - - public void addAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(); - for (Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((Pk) it.next())); - getB().addAll(al); - } - public void addAllInBInNewTx(Collection pkbs) throws FinderException { - addAllInB(pkbs); - } - - public void removeFromB(Pk pkb) throws FinderException { - getB().remove(bhl.findByPrimaryKey(pkb)); - } - public void removeFromBInNewTx(Pk pkb) throws FinderException { - removeFromB(pkb); - } - - public void clearB() { - getB().clear(); - } - - public void clearBInNewTx() { - clearB(); - } - - public boolean containAllInB(Collection pkbs) throws FinderException { - ArrayList al = new ArrayList(pkbs.size()); - for(Iterator it = pkbs.iterator(); it.hasNext();) - al.add(bhl.findByPrimaryKey((Pk) it.next())); - return getB().containsAll(al); - } - - /** - * It returns true the multivalued relation contains the bean B defined - * by the primary key specified by the parameter. - * This method has the transactional attribut TX_SUPPORTS. - * @throw a FinderException if the primary key does not match to a bean. - */ - public boolean containInB(Pk pkb) throws FinderException { - return (getB().contains(bhl.findByPrimaryKey(pkb))); - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract Integer getId(); - - public abstract void setId(Integer id); - - public abstract Collection getB(); - - public abstract void setB(Collection bl); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(int id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(new Integer(id)); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - try { - Context ictx = new InitialContext(); - bhl = (BHomeLocal) ictx.lookup("java:comp/env/ejb/b"); - } catch (NamingException e) { - throw new EJBException("Impossible to fetch the ", e); - } - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/BEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/BEC2.java deleted file mode 100644 index 5c1a44beba..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relation/s3pkcomp/BEC2.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.relation.s3pkcomp; - -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.RemoveException; - -/** - * @author H.Joanin - */ -public abstract class BEC2 implements javax.ejb.EntityBean { - public void m1(){ - } - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract Integer getId(); - - public abstract void setId(Integer id); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - static protected Logger logger = null; - EntityContext ejbContext; - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(int id) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - // Init here the bean fields - setId(new Integer(id)); - - // In CMP, should return null. - return null; - } - - /** - * Set the associated entity context. The container invokes this method - * on an instance after the instance has been created. - * This method is called in an unspecified transaction context. - * - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. - * This is the last method that the container invokes on the instance. - * The Java garbage collector will eventually invoke the finalize() method - * on the instance. - * This method is called in an unspecified transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by a - * system-level error. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. This method is - * invoked when a client invokes a remove operation on the enterprise Bean's - * home interface or the EJB object's remote interface. This method - * transitions the instance from the ready state to the pool of available - * instances. - * - * This method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of the object. - * @throws EJBException - Thrown by the method to indicate a failure caused by a system-level - * error. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - * This method always executes in the proper transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int id) throws CreateException { - logger.log(BasicLevel.DEBUG, "id=" + id); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relatives/RelativeEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relatives/RelativeEC2.java deleted file mode 100644 index e17f5cddb2..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/relatives/RelativeEC2.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// PersonneEC2.java - -package org.objectweb.jonas.jtests.beans.relatives; - -import java.util.Date; -import java.util.Set; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * This is an entity bean with "container managed persistence version 2.x". - * @author Christophe Ney - cney@batisseurs.com - */ -public abstract class RelativeEC2 implements EntityBean { - - static protected Logger logger = null; - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getFullName(); - - public abstract void setFullName(String name); - - public abstract int getLuckyNumber(); - - public abstract void setLuckyNumber(int age); - - public abstract Date getBirthdate(); - - public abstract void setBirthdate(Date birthdate); - - public abstract RelativeLocal getSpouse(); - - public abstract void setSpouse(RelativeLocal spouse); - - public abstract Set getSibblings(); - - public abstract void setSibblings(Set sibblings); - - public abstract Set getVisitedRelatives(); - - public abstract void setVisitedRelatives(Set sibblings); - - public abstract boolean getIsMale(); - - public abstract void setIsMale(boolean isMale); - - public abstract double getAverageAnnualVisits(); - - public abstract void setAverageAnnualVisits(double averageAnnualVisits); - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. - */ - public void setEntityContext(EntityContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * Unset the associated entity context. - */ - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object - * that is currently associated with the instance. - */ - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. - */ - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. - */ - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this instance before creating the EJBObject - */ - public String ejbCreate(String fullName, Date birthdate, int luckyNumber) throws CreateException, DuplicateKeyException { - logger.log(BasicLevel.DEBUG, ""); - - setFullName(fullName); - setBirthdate(birthdate); - setLuckyNumber(luckyNumber); - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String fullName, Date birthdate, int luckyNumber) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - - /** - * This method is called before the instance enters the "passive" state. - * The instance should release any resources that it can re-acquire later in the - * ejbActivate() method. - * After the passivate method completes, the instance must be in a state that - * allows the container to use the Java Serialization protocol to externalize - * and store away the instance's state. - * This method is called with no transaction context. - * - * @exception EJBException - Thrown if the instance could not perform the - * function requested by the container - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * This method is called when the instance is activated from its "passive" state. - * The instance should acquire any resource that it has released earlier in the - * ejbPassivate() method. - * This method is called with no transaction context. - * - * @exception EJBException - Thrown if the instance could not perform the - * function requested by the container - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/remoterunner/RemoteRunnerSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/remoterunner/RemoteRunnerSL.java deleted file mode 100644 index 4666287e39..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/remoterunner/RemoteRunnerSL.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// RemoteRunnerSL.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.remoterunner; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import junit.framework.Test; -import junit.textui.TestRunner; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ - -public class RemoteRunnerSL implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL setSessionContext"); - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL ejbRemove"); - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL ejbCreate"); - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL ejbPassivate"); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL ejbActivate"); - } - - // ------------------------------------------------------------------ - // RemoteRunner implementation - // ------------------------------------------------------------------ - - /** - * Run a JUnit TestSuite - * - * @param jtcc the class of the JUnit TestSuite to be run - * - * The code run here is equivalent to : - * TestRunner.run( jtcc.suite()) - */ - - public String run(Class jtcc) throws RemoteException { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL run"); - try{ - Test ts = null; - Method method = jtcc.getMethod("suite", (Class []) null); - ts = (Test)method.invoke(null, (Object []) null); - ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); - PrintStream ps = new java.io.PrintStream(baos); - TestRunner tr = new TestRunner(ps); - tr.doRun(ts , false); - return baos.toString(); - }catch( Exception e){ - throw new RemoteException(e.toString()); - } - - } - - /** - * Run a TestCase in the JUnit TestSuite - * - * @param jtcc the class of the JUnit TestSuite to be run - * @param name name of the testcase to run - * - * This code run here is equivalent to do - * TestRunner.run(new jtcc(testtorun)) - */ - public String run(Class jtcc, String testtorun) throws RemoteException { - logger.log(BasicLevel.DEBUG, "RemoteRunnerSL run: "+testtorun); - try{ - Object suiteInstance = null; - int nbParams = 1; - Class paramTypes[] = new Class[nbParams]; // constructor argument types - Object paramObjects[] = new Object[nbParams]; // constructor argument values - paramTypes[0] = java.lang.String.class; - paramObjects[0] = (Object)testtorun; - Constructor constructor = jtcc.getConstructor(paramTypes); - suiteInstance = constructor.newInstance(paramObjects); - ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); - PrintStream ps = new java.io.PrintStream(baos); - TestRunner tr = new TestRunner(ps); - tr.doRun((Test)suiteInstance , false); - return baos.toString(); - }catch( Exception e){ - throw new RemoteException(e.toString()); - } - - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseEC2.java deleted file mode 100644 index 6063346f1d..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseEC2.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.secured; - -import javax.ejb.CreateException; -import javax.ejb.EJBContext; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * This is an entity bean with "container managed persistence 2". - * The state of an instance is stored into a relational database. - * @author Helene Joanin (jonas team) - */ -public abstract class BaseEC2 extends BaseCommon implements EntityBean { - - protected EntityContext entityContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getInfo(); - public abstract void setInfo(String n); - public abstract String getName(); - public abstract void setName(String n); - - public EJBContext getEJBContext() { - return entityContext; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - if( logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - entityContext = ctx; - - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - } - - public String ejbCreate(String name, String info) throws CreateException { - logger.log(BasicLevel.DEBUG,""); - setInfo(info); - setName(name); - return(null); - } - - public void ejbPostCreate(String name, String info){ - logger.log(BasicLevel.DEBUG, ""); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseSL.java deleted file mode 100644 index 70af5a7a07..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/BaseSL.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// BaseSL.java - -package org.objectweb.jonas.jtests.beans.secured; - -import javax.ejb.EJBContext; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; - -public class BaseSL extends BaseCommon implements SessionBean { - - protected SessionContext ejbContext; - - - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - public void setSessionContext(SessionContext ctx) { - if( logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Base implementation - // ------------------------------------------------------------------ - - public EJBContext getEJBContext(){ - return ejbContext; - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/DerivedSF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/DerivedSF.java deleted file mode 100644 index 60b739f5ad..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/DerivedSF.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// DerivedSF.java - -package org.objectweb.jonas.jtests.beans.secured; - -import javax.ejb.EJBContext; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; - -public class DerivedSF extends BaseCommon implements SessionBean { - - protected SessionContext ejbContext; - - - public EJBContext getEJBContext(){ - return ejbContext; - } - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - public void setSessionContext(SessionContext ctx) { - if( logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Derived Interface Remote implementation - // ------------------------------------------------------------------ - - public void otherMethod() { - logger.log(BasicLevel.DEBUG, ""); - } - - - // ------------------------------------------------------------------ - // Derived Interface Local implementation - // ------------------------------------------------------------------ - - public void anotherMethod(){ - logger.log(BasicLevel.DEBUG, ""); - } - - - public void noRunAsWithRole1() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void noRunAsWithRole2() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void runAsRole2() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void runAsWithRole2() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void runAsWithRole1() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void runAsRole3() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void runAsRole2AndCallAnotherBean() { - logger.log(BasicLevel.DEBUG, ""); - } - - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/Listener.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/Listener.java deleted file mode 100644 index 1d29960ea0..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/secured/Listener.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.secured; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.QueueConnectionFactory; -import javax.jms.Queue; -import javax.jms.QueueConnection; -import javax.jms.QueueSession; -import javax.jms.QueueSender; -import javax.jms.Session; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Come from the mdb tests - * @author Philippe Coq & Philippe Durieux - * @author Florent Benoit (run-as test) - */ -public class Listener implements MessageDrivenBean, MessageListener { - - /** - * Logger - */ - private static Logger logger = null; - - /** - * Context - */ - private transient MessageDrivenContext mdbContext; - - /** - * Class of the other bean - */ - private transient DerivedLocalHome dh = null; - - - /** - * Default constructor - */ - public Listener() { - } - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated context. The container call this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx MessageDrivenContext A MessageDrivenContext interface for the instance. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the message-driven object. - * This happens when a container decides to terminate the message-driven object. - * - * This method is called with no transaction context. - * - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - */ - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * onMessage method - * @param message receive message - */ - public void onMessage(Message message) { - logger.log(BasicLevel.DEBUG, ""); - - String messageTest = "ok"; - - try { - // Don't test message but test run-as bean by calling another bean - try { - InitialContext ictx = new InitialContext(); - dh = (DerivedLocalHome) ictx.lookup("java:comp/env/ejb/derivednorunaslocal"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Listener : Cannot get DerivedHome:" + e); - messageTest = "fail : Cannot get DerivedHome: " + e; - } - - // Create a new bean for this message (with right run-as) - try { - dh.create(); - } catch (EJBException ejbe) { - messageTest = "fail : EJBException : " + ejbe.getMessage(); - logger.log(BasicLevel.ERROR, "EJBException: " + ejbe.getMessage()); - } catch (CreateException e) { - messageTest = "fail : Can not create the bean"; - logger.log(BasicLevel.ERROR, "Listener exception: " + e); - } - } catch (Exception ee) { - logger.log(BasicLevel.ERROR, "exception: " + ee); - messageTest = "fail :" + ee.getMessage(); - } - - QueueConnectionFactory qcf = null; - Queue queue = null; - try { - // Send the message (ok or fail) - try { - InitialContext ictx = new InitialContext(); - qcf = (QueueConnectionFactory) ictx.lookup("java:comp/env/jms/RunAsFactory"); - queue = (Queue) ictx.lookup("java:comp/env/jms/testRunAs"); - } catch (NamingException e) { - logger.log(BasicLevel.ERROR, "Listener : Cannot get DerivedHome:" + e); - } - - - QueueConnection qc = qcf.createQueueConnection(); - QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - Message m = qs.createMessage(); - m.setStringProperty("testRunAsJms", messageTest); - QueueSender qsender = qs.createSender(queue); - qsender.send(m); - - // close - qsender.close(); - qs.close(); - qc.close(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "exception:" + e); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleCommon.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleCommon.java deleted file mode 100644 index db0fb39b96..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleCommon.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SimpleCommon.java - -package org.objectweb.jonas.jtests.beans.transacted; - -import java.rmi.RemoteException; - -import javax.ejb.EJBContext; -import javax.transaction.Status; -import javax.transaction.UserTransaction; - - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.jonas.jtests.util.JBean; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Common part to different implementations of Simple - */ -public class SimpleCommon extends JBean { - - static protected Logger logger = null; - private EJBContext ejbContext = null; - - protected void setEjbContext(EJBContext ctx) { - ejbContext = ctx; - } - - /** - * Utility method that returns true if the thread is associated to a - * transaction - */ - protected boolean isAssociated() { - int ret; - try { - UserTransaction ut = getUserTransaction(); - ret = ut.getStatus(); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "isAssociated: " + e); - return false; - } - if (ret == Status.STATUS_UNKNOWN) { - logger.log(BasicLevel.DEBUG, "STATUS_UNKNOWN"); - return false; - } else if (ret == Status.STATUS_NO_TRANSACTION) { - logger.log(BasicLevel.DEBUG, "STATUS_NO_TRANSACTION"); - return false; - } else { - logger.log(BasicLevel.DEBUG, "Status=" + ret); - return true; - } - } - - /** - * Utility method that init the logger - */ - protected void initLogger() { - if (logger == null) - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_notsupported() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_supports() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_required() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_requires_new() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_mandatory() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with - * this thread - */ - public boolean opwith_never() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * REQUIRED -> should return true. - */ - public boolean required_call_requires_new() { - logger.log(BasicLevel.DEBUG, ""); - boolean tx = opwith_requires_new(); - if (!tx) { - logger.log(BasicLevel.ERROR, "opwith_requires_new was outside tx"); - return false; // error - } - return isAssociated(); - } - - /** - * REQUIRED -> should return true. - */ - public boolean call_requires_new_on(Simple other) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - boolean tx = other.opwith_requires_new(); - if (!tx) { - logger.log(BasicLevel.ERROR, "opwith_requires_new was outside tx"); - return false; // error - } - return isAssociated(); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleEC2.java deleted file mode 100644 index 84612ee5d7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleEC2.java +++ /dev/null @@ -1,555 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.transacted; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.ejb.TimedObject; -import javax.ejb.Timer; -import javax.ejb.TimerHandle; -import javax.ejb.TimerService; - -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * Entity bean with container managed persistence version 2. - * @author Helene Joanin - */ -public abstract class SimpleEC2 extends SimpleCommon implements EntityBean, TimedObject { - - private final int TOCANCEL = 10000; - - protected EntityContext entityContext; - - // ------------------------------------------------------------------ - // Get and Set accessor methods of the bean's abstract schema - // ------------------------------------------------------------------ - public abstract String getAccno(); - public abstract void setAccno(String accno); - public abstract String getCustomer(); - public abstract void setCustomer(String customer); - public abstract long getBalance(); - public abstract void setBalance(long balance); - public abstract int getTimerIdent(); - public abstract void setTimerIdent(int id); - public abstract int getTimerCount(); - public abstract void setTimerCount(int cnt); - - /** - * Create without arg - * transaction attribute = supports (by default in xml file) - */ - public String ejbCreate() throws CreateException { - - logger.log(BasicLevel.DEBUG, ""); - - // Must init fields in any case. - setAccno("000"); - setCustomer("Initial"); - setBalance(0); - setTimerIdent(0); - setTimerCount(0); - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = default (= supports) - */ - public void ejbPostCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * transaction attribute = notsupported - */ - public String ejbCreate(int i) throws CreateException { - - logger.log(BasicLevel.DEBUG, ""); - - if (isAssociated()) { - throw new EJBException("ejbCreate(int i): should not be in a transaction"); - } - Integer v = new Integer((int)i); - setAccno(v.toString()); - setCustomer("by int"); - setBalance(1000 + i); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = notsupported - */ - public void ejbPostCreate(int i) { - logger.log(BasicLevel.DEBUG, ""); - if (isAssociated()) { - throw new EJBException("ejbPostCreate(int i): should not be in a transaction"); - } - } - - /** - * transaction attribute = required - */ - public String ejbCreateForRequired(long i) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - if (!isAssociated()) { - throw new EJBException("ejbCreate(long i): should be in a transaction"); - } - Integer v = new Integer((int)i); - setAccno(v.toString()); - setCustomer("Required"); - setBalance(1000 + i); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = required - */ - public void ejbPostCreateForRequired(long i) { - logger.log(BasicLevel.DEBUG, ""); - if (!isAssociated()) { - throw new EJBException("ejbPostCreateForRequired(long i): should be in a transaction"); - } - } - - /** - * transaction attribute = never - */ - public String ejbCreateForNever(short i) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - - if (isAssociated()) { - throw new EJBException("ejbCreateForNever(short i): should not be in a transaction"); - } - Integer v = new Integer((int)i); - setAccno(v.toString()); - setCustomer("by short"); - setBalance(1000 + i); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = requiresnew - */ - public String ejbCreateForRequiresNew(String i) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - - if (!isAssociated()) { - throw new EJBException("ejbCreate(String i): should be in a transaction"); - } - setAccno(i); - setCustomer("by string"); - setBalance(100); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = requiresnew - */ - public void ejbPostCreateForRequiresNew(String i) { - logger.log(BasicLevel.DEBUG, ""); - - if (!isAssociated()) { - throw new EJBException("ejbPostCreateForRequiresNew(String i): should be in a transaction"); - } - } - - /** - * transaction attribute = mandatory - */ - public String ejbCreateForMandatory(char i) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - - if (!isAssociated()) { - throw new EJBException("ejbCreateForMandatory(char i): should be in a transaction"); - } - Integer v = new Integer((int)i); - setAccno(v.toString()); - setCustomer("by char"); - setBalance(200); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = mandatory - */ - public void ejbPostCreateForMandatory(char i) { - logger.log(BasicLevel.DEBUG, ""); - - if (!isAssociated()) { - throw new EJBException("ejbPostCreateForMandatory(char i): should be in a transaction"); - } - } - - /** - * transaction attribute = supports - */ - public String ejbCreateForSupports(boolean intx) throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - - if (intx) { - setAccno("TRUE"); - setBalance(101); - if (!isAssociated()) { - throw new EJBException("ejbCreateForSupports(true): should be in a transaction"); - } - } else { - setAccno("FALSE"); - setBalance(102); - if (isAssociated()) { - throw new EJBException("ejbCreate(false): should not be in a transaction"); - } - } - setCustomer("by boolean"); - setTimerIdent(0); - setTimerCount(0); - - // In BMP, return PK. - return getAccno(); - } - - /** - * transaction attribute = supports - */ - public void ejbPostCreateForSupports(boolean intx) { - logger.log(BasicLevel.DEBUG, ""); - - if (intx) { - if (!isAssociated()) { - throw new EJBException("ejbPostCreateForSupports: should be in a transaction"); - } - } else { - if (isAssociated()) { - throw new EJBException("ejbPostCreateForSupports: should not be in a transaction"); - } - } - } - - public String ejbCreateWithTimer(int i, long dur) throws RemoteException, CreateException { - logger.log(BasicLevel.DEBUG, ""); - // Must init fields in any case. - setAccno("001"); - setCustomer("Timer"); - setBalance(0); - setTimerIdent(0); - setTimerCount(0); - // In BMP, return PK. - return getAccno(); - } - - public void ejbPostCreateWithTimer(int i, long dur) throws RemoteException, CreateException { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - int ret = getTimerIdent() + 1; - Timer mt = timerservice.createTimer(dur, new Integer(ret)); - } - - /** - * transaction attribute = never - */ - public void ejbPostCreateForNever(short i) { - logger.log(BasicLevel.DEBUG, ""); - - if (isAssociated()) { - throw new EJBException("ejbPostCreateForNever(short i): should not be in a transaction"); - } - } - - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_notsupported() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_supports() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_required() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_requires_new() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_mandatory() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - /** - * This method return true if there is an association of a transaction with this thread - */ - public boolean ejbHomeOpwith_never() { - logger.log(BasicLevel.DEBUG, ""); - return isAssociated(); - } - - public void ejbRemove() throws RemoveException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbLoad() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbStore() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void setEntityContext(EntityContext ctx) { - setEjbContext(ctx); - initLogger(); - logger.log(BasicLevel.DEBUG, ""); - this.entityContext = ctx; - } - - public void unsetEntityContext() { - logger.log(BasicLevel.DEBUG, ""); - this.entityContext = null; - } - - public int setTimer(int dur, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Timer mt = null; - int ret = getTimerIdent() + 1; - setTimerIdent(ret); - if (period > 0) { - mt = timerservice.createTimer(dur * 1000, period * 1000, new Integer(ret)); - } else if (period < 0) { - // special test for cancel inside ejbTimeout - mt = timerservice.createTimer(dur * 1000, -period * 1000, new Integer(TOCANCEL)); - } else { - mt = timerservice.createTimer(dur * 1000, new Integer(ret)); - } - return ret; - } - - public int setTimer(java.util.Date date, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Timer mt = null; - int ret = getTimerIdent() + 1; - setTimerIdent(ret); - if (period > 0) { - mt = timerservice.createTimer(date, period * 1000, new Integer(ret)); - } else if (period < 0) { - // special test for cancel inside ejbTimeout - mt = timerservice.createTimer(date, -period * 1000, new Integer(TOCANCEL)); - } else { - mt = timerservice.createTimer(date, new Integer(ret)); - } - return ret; - } - - public int setTimerGetHandle(int dur, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - int ret = dur * 10 + period; - Timer t = null; - if (period > 0) { - t = timerservice.createTimer(dur * 1000, period * 1000, new Integer(ret)); - } else { - t = timerservice.createTimer(dur * 1000, new Integer(ret)); - } - TimerHandle hdl = t.getHandle(); - Timer t2 = hdl.getTimer(); - if (t != t2) { - logger.log(BasicLevel.ERROR, "Bad timer handle"); - logger.log(BasicLevel.ERROR, "Original=" + t); - logger.log(BasicLevel.ERROR, "Recomputed=" + t2); - throw new EJBException("Bad timer handle"); - } - return ret; - } - - public TimerHandle getTimerHandle(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerHandle hdl = null; - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - hdl = t.getHandle(); - break; - } - } - return hdl; - } - - public void cancelTimer(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - t.cancel(); - } - } - } - - public void cancelTimers() { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - t.cancel(); - } - } - - public long getTimeRemaining(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - long ret = -1; - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - ret = t.getTimeRemaining(); - } - } - return ret; - } - - public int getTimerNumber() { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - return timerList.size(); - } - - /** - * This support method calls a required method - */ - public boolean supports_call_required() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Simple myentity = (Simple) entityContext.getEJBLocalObject(); - return myentity.opwith_required(); - } - - /** - * Cancels all timers, that are associated with this entity, and starts a - * new timer. - */ - public void startInfoTimer(int dur, String inform) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - // Remove all timers with this Info first - for (Iterator timers = timerservice.getTimers().iterator(); timers.hasNext();) { - Timer timer = (Timer) timers.next(); - if (inform.equals(timer.getInfo())) { - timer.cancel(); - } - } - // Now, create the Timer - timerservice.createTimer(dur * 1000, inform); - } - - // ----------------------------------------------------------- - // TimedObject implementation - // ----------------------------------------------------------- - - /** - * A timer is expired. - */ - public void ejbTimeout(Timer timer) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = entityContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - Integer id = (Integer) timer.getInfo(); - if (id.intValue() == TOCANCEL) { - timer.cancel(); - } - setTimerCount(getTimerCount() + 1); - TimerHandle hdl = timer.getHandle(); - TimerHandle hdl2 = getDeserializedHandle(hdl); - if (! timersAreIdentical(hdl, hdl2)) { - logger.log(BasicLevel.ERROR, "Bad timer handle"); - throw new EJBException("Bad timer handle"); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSF.java deleted file mode 100644 index b2e0a21ec6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSF.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SimpleSF.java - -package org.objectweb.jonas.jtests.beans.transacted; - - -import java.rmi.RemoteException; - -import javax.ejb.SessionContext; - -import org.objectweb.util.monolog.api.BasicLevel; - -/* - * Stateful session bean - */ - -public class SimpleSF extends SimpleCommon { - - protected SessionContext sessionContext; - public int i = 0; - - public void setSessionContext(SessionContext sessionContext) { - setEjbContext(sessionContext); - initLogger(); - logger.log(BasicLevel.DEBUG, ""); - this.sessionContext = sessionContext; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate(int i) { - this.i = i; - } - - /** - * This support method calls a required method - */ - public boolean supports_call_required() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Simple mysession = (Simple) sessionContext.getEJBObject(); - return mysession.opwith_required(); - } - - public void startInfoTimer(int dur, String info) throws RemoteException { - logger.log(BasicLevel.ERROR, "not implemented"); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSL.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSL.java deleted file mode 100644 index e31ef87a68..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/SimpleSL.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.transacted; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.TimedObject; -import javax.ejb.Timer; -import javax.ejb.TimerHandle; -import javax.ejb.TimerService; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.objectweb.util.monolog.api.BasicLevel; - -public class SimpleSL extends SimpleCommon implements SessionBean, TimedObject { - - protected SessionContext sessionContext; - static protected int timercount = 0; - - public void setSessionContext(SessionContext sessionContext) { - setEjbContext(sessionContext); - initLogger(); - logger.log(BasicLevel.DEBUG, ""); - this.sessionContext = sessionContext; - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbCreate() { - logger.log(BasicLevel.DEBUG, ""); - try { - InitialContext ictx = new InitialContext(); - } catch(NamingException e) { - throw new EJBException(e); - } - } - - public int setTimer(int dur, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - int ret = dur * 10 + period; - if (period > 0) { - timerservice.createTimer(dur * 1000, period * 1000, new Integer(ret)); - } else { - timerservice.createTimer(dur * 1000, new Integer(ret)); - } - return ret; - } - - public int setTimer(java.util.Date date, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - int ret = 200 + period; - if (period > 0) { - timerservice.createTimer(date, period * 1000, new Integer(ret)); - } else { - timerservice.createTimer(date, new Integer(ret)); - } - return ret; - } - - public int setTimerGetHandle(int dur, int period) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - int ret = dur * 10 + period; - Timer t = null; - if (period > 0) { - t = timerservice.createTimer(dur * 1000, period * 1000, new Integer(ret)); - } else { - t = timerservice.createTimer(dur * 1000, new Integer(ret)); - } - TimerHandle hdl = t.getHandle(); - TimerHandle hdl2 = getDeserializedHandle(hdl); - if (! timersAreIdentical(hdl, hdl2)) { - logger.log(BasicLevel.ERROR, "Bad timer handle"); - throw new EJBException("Bad timer handle"); - } - return ret; - } - - public TimerHandle getTimerHandle(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerHandle hdl = null; - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - hdl = t.getHandle(); - TimerHandle hdl2 = getDeserializedHandle(hdl); - if (! timersAreIdentical(hdl, hdl2)) { - logger.log(BasicLevel.ERROR, "Bad timer handle"); - throw new EJBException("Bad timer handle"); - } - break; - } - } - return hdl; - } - - public void cancelTimer(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - t.cancel(); - } - } - } - - public void cancelTimers() { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - t.cancel(); - } - } - - public long getTimeRemaining(int ident) { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - long ret = -1; - for (Iterator i = timerList.iterator(); i.hasNext(); ) { - Timer t = (Timer) i.next(); - Integer id = (Integer) t.getInfo(); - if (id.intValue() == ident) { - ret = t.getTimeRemaining(); - } - } - return ret; - } - - public int getTimerNumber() { - logger.log(BasicLevel.DEBUG, ""); - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - return timerList.size(); - } - - public int getTimerCount() { - logger.log(BasicLevel.DEBUG, ""); - return timercount; - } - - /** - * This support method calls a required method - */ - public boolean supports_call_required() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - Simple mysession = (Simple) sessionContext.getEJBObject(); - return mysession.opwith_required(); - } - - public void startInfoTimer(int dur, String info) throws RemoteException { - logger.log(BasicLevel.ERROR, "not implemented"); - } - - // ----------------------------------------------------------- - // TimedObject implementation - // ----------------------------------------------------------- - - /** - * A timer is expired. - */ - public void ejbTimeout(Timer timer) { - logger.log(BasicLevel.DEBUG, ""); - timercount++; - TimerService timerservice = sessionContext.getTimerService(); - Collection timerList = timerservice.getTimers(); - TimerHandle hdl = timer.getHandle(); - TimerHandle hdl2 = getDeserializedHandle(hdl); - if (! timersAreIdentical(hdl, hdl2)) { - logger.log(BasicLevel.ERROR, "Bad timer handle"); - throw new EJBException("Bad timer handle"); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/jonas-transacted.xml b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/jonas-transacted.xml deleted file mode 100644 index f3c6006d54..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/transacted/jonas-transacted.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - SimpleSL - transactedSimpleSLHome - 4 - false - - - - SimpleSF - transactedSimpleSFHome - - - - SimpleSY - transactedSimpleSYHome - - - - SimpleEB - transactedSimpleEBHome - - jdbc/BMP - jdbc_1 - - - - - SimpleEC - transactedSimpleECHome - - jdbc_1 - transactedSimpleEC - - accno - c_accno - - - customer - c_customer - - - balance - c_balance - - - timerIdent - c_ident - - - timerCount - c_count - - - - finder_notsupported - - where c_customer = 'NotSupported' - - - - finder_required - - where c_customer = 'Required' - - - - finder_supports - - where c_customer = 'Supports' - - - - finder_requiresnew - - where c_customer = 'RequiresNew' - - - - finder_mandatory - - where c_customer = 'Mandatory' - - - - finder_never - - where c_customer = 'Never' - - - - - - SimpleEC2 - transactedSimpleEC2Home - removeall - - jdbc_1 - - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/worker/WorkerSF.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/worker/WorkerSF.java deleted file mode 100644 index f401da2ba3..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/beans/worker/WorkerSF.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.beans.worker; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.resource.spi.work.Work; -import javax.resource.spi.work.WorkEvent; -import javax.resource.spi.work.WorkException; -import javax.resource.spi.work.WorkListener; -import javax.resource.spi.work.WorkManager; - -import org.ow2.jonas.lib.util.Log; -import org.ow2.jonas.lib.ejb21.JSessionContext; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Worker Implementation. - * This bean is JONAS specific because it uses the JSessionContext - * to retrieve the WorkManager. - * @author Philippe Durieux - */ -public class WorkerSF implements SessionBean, Work, WorkListener { - - private static final long serialVersionUID = 1L; - private static Logger logger = null; - private JSessionContext ejbContext; - private WorkManager workManager; - private int wcount; - private int notifyAccepted = 0; - private int notifyStarted = 0; - private int notifyRejected = 0; - private int notifyCompleted = 0; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = (JSessionContext) ctx; - } - - /** - * A container invokes this method before it ends the life of the session object. - * This happens as a result of a client's invoking a remove operation, or when a - * container decides to terminate the session object after a timeout. - * This method is called with no transaction context. - * - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * Create a session. - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - wcount = 0; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * A container invokes this method when the instance is taken out of - * the pool of available instances to become associated with a specific - * EJB object. - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // Work implementation - // ------------------------------------------------------------------ - - public void release() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void run() { - logger.log(BasicLevel.DEBUG, ""); - wcount++; - } - - // ------------------------------------------------------------------ - // Worker implementation - // ------------------------------------------------------------------ - - /** - * set the count - */ - public void setwcount(int c) throws RemoteException { - wcount = c; - } - - /** - * get the count - */ - public int getwcount() throws RemoteException { - return wcount; - } - - /** - * @return the notify-accepted count - */ - public int getNotifyAccepted() { - return notifyAccepted; - } - - /** - * @return the notify-rejected count - */ - public int getNotifyRejected() { - return notifyRejected; - } - - /** - * @return the notify-completed count - */ - public int getNotifyCompleted() { - return notifyCompleted; - } - - /** - * @return the notify-started count - */ - public int getNotifyStarted() { - return notifyStarted; - } - - /** - * Run n works, synchronously. - */ - public void doWorks(int n) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - for (int i = 0; i < n; i++) { - try { - getWM().doWork(this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - } - - /** - * Start n works - */ - public void startWorks(int n) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - for (int i = 0; i < n; i++) { - try { - getWM().startWork(this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - } - - /** - * Schedule n works - */ - public void scheduleWorks(int n, long timeout) throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - for (int i = 0; i < n; i++) { - try { - getWM().scheduleWork(this, timeout, null, this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - } - - /** - * Run 1 work synchronously in a TX - * The tx attribute is set as "Required" - */ - public void doWorkInTx() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - getWM().doWork(this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - - /** - * Start 1 work in a TX - * The tx attribute is set as "Required" - */ - public void startWorkInTx() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - getWM().startWork(this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - - /** - * Schedule 1 work in a TX - * The tx attribute is set as "Required" - */ - public void scheduleWorkInTx() throws RemoteException { - logger.log(BasicLevel.DEBUG, ""); - try { - getWM().scheduleWork(this); - } catch (WorkException e) { - throw new RemoteException("doWork failed:" + e); - } - } - - // ------------------------------------------------------------------ - // Private Methods - // ------------------------------------------------------------------ - - /** - * Get the WorkManager - */ - private WorkManager getWM() { - if (workManager == null) { - workManager = ejbContext.getWorkManager(); - } - return workManager; - } - - /** - * sleep n seconds - * @param n seconds - */ - private void sleep(int n) { - try { - Thread.sleep(1000 * n); - } catch (InterruptedException e) { - } - } - - // ------------------------------------------------------------------------ - // WorkListener implementation - // ------------------------------------------------------------------------ - - public void workAccepted(WorkEvent we) { - logger.log(BasicLevel.DEBUG, ""); - notifyAccepted++; - } - - public void workRejected(WorkEvent we) { - logger.log(BasicLevel.DEBUG, ""); - notifyRejected++; - } - - public void workStarted(WorkEvent we) { - logger.log(BasicLevel.DEBUG, ""); - notifyStarted++; - } - - public void workCompleted(WorkEvent we) { - logger.log(BasicLevel.DEBUG, ""); - notifyCompleted++; - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bank.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bank.java deleted file mode 100644 index 3d81f758df..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bank.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.objectweb.jonas.jtests.clients.distribution; - -import javax.rmi.PortableRemoteObject; -import org.objectweb.jonas.jtests.beans.bank.Manager; -import org.objectweb.jonas.jtests.beans.bank.ManagerHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -public abstract class A_bank extends A_bankRead { - - public A_bank(String name) { - super(name); - } - - /** - * Operation= Move - * min range for account nb = 2 - * max range for account nb = 2 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * no verification - * @throws Exception - */ - public void testSameAccount() throws Exception { - ope(OP_MOVETO, 2, 2, 10, 1, 10); - } - - /** - * Operation= Move - * min range for account nb = 6 - * max range for account nb = 6 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 1 - * amount = 12 - * no verification - * @throws Exception - * No more multheaded see S_bank.java - */ - public void testMultiSameAccount() throws Exception { - createOpe(OP_MOVETO, 6, 6, 1, 1, 12); - } -} - - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankRead.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankRead.java deleted file mode 100644 index aa8c1cf91c..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankRead.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import javax.rmi.PortableRemoteObject; -import org.objectweb.jonas.jtests.beans.bank.Manager; -import org.objectweb.jonas.jtests.beans.bank.ManagerHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -public abstract class A_bankRead extends JTestCase { - - protected static final int OP_READ = 1; - protected static final int OP_MOVE = 2; - protected static final int OP_CREATE = 3; - protected static final int OP_REMOVE = 4; - protected static final int OP_ONEMOVE = 5; - protected static final int OP_READTX = 6; - protected static final int OP_ONEMOVETX = 7; - protected static final int OP_MOVETO = 8; - - static final int initialValue = 1000; - static final int accountNb = 100; - - protected static ManagerHome home = null; - protected static Manager manager = null; - public static boolean threadfail; - public static Throwable threadex = null; - - public A_bankRead(String name) { - super(name); - } - - public abstract String getManagerHomeName(); - public abstract boolean getPrefetch(); - - protected void setUp() { - super.setUp(); - try { - if (home == null) { - useBeans("bank", false); - home = (ManagerHome) PortableRemoteObject.narrow(ictx.lookup(getManagerHomeName()), ManagerHome.class); - } - if (manager == null) { - manager = home.create(initialValue, getPrefetch()); - } - // Initializes the test by creating accounts - manager.createAll(accountNb); - threadfail = false; - threadex = null; - } catch (Exception e) { - fail("Exception raised in setup: " + e); - } - } - - protected void tearDown() throws Exception { - super.tearDown(); - if (manager != null) { - try { - try { - manager.reinitAll(); - } finally { - manager.remove(); - } - } finally { - manager = null; - } - } - } - - /** - * Create test accounts and run test ope - */ - public void createOpe(int action, int accmin, int accmax, int loops, int threads) throws Exception { - createOpe(action, accmin, accmax, loops, threads, 10); - } - - /** - * Create test accounts and run test ope - */ - public void createOpe(int action, int accmin, int accmax, int loops, int threads, int amount) throws Exception { - ope(OP_CREATE, accmin, accmax, (accmax - accmin + 1)*threads, 1, amount, true); - ope(action, accmin, accmax, loops, threads, amount, true); - } - - public void ope(int action, int accmin, int accmax, int loops, int threads) throws Exception { - ope(action, accmin, accmax, loops, threads, 10, true); - } - - public void ope(int action, int accmin, int accmax, int loops, int threads, int amount) throws Exception { - ope(action, accmin, accmax, loops, threads, amount, true); - } - - /** - * generic operation. - * @param accmin min range for account nb - * @param accmax max range for account nb - * @param loops nb of loop in each thread - * @param threads nb of threads running the same operations - */ - public void ope(int action, int accmin, int accmax, int loops, int threads, int amount, boolean verify) throws Exception { - - // Set transaction timeout in the server (global value!) - if (amount > 10) { - stopTxAt(20); - } - - // Create and start all threads - A_thread[] t_thr = new A_thread[threads]; - for (int i = 0; i < threads; i++) { - t_thr[i] = new A_thread(getManagerHomeName(), i, ictx, action, accmin, accmax, loops, amount, getPrefetch()); - t_thr[i].start(); - } - - // Wait end of all threads - for (int p = 0; p < threads; p++) { - t_thr[p].join(); - } - - // Check if all threads run ok - if (threadfail) { - throw new RuntimeException("Error in a thread", threadex); - } - if (verify) { - stopTxAt(60); - if (!manager.checkAll()) { - threadfail = true; // to reinit the database - fail("Bad global state"); - } - } - } - - - public void testCheckAll() throws Exception { - if (!manager.checkAll()) { - fail("Bad state in database"); - } - } - - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 1 - * no verification - * @throws Exception - */ - public void testBasicRead() throws Exception { - ope(OP_READ, 0, 9, 1, 1, 10, false); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 1 - * no verification - * @throws Exception - */ - public void testBasicReadTx() throws Exception { - ope(OP_READTX, 0, 9, 1, 1, 10, false); - } - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test3Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 1); - } - - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test4Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 1); - } - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test5Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 1); - } - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test8Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 1); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test3ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 1); - } - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test4ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 1); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test5ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 1); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 8 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - public void test8ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 100, 1); - } - - /** - * Operation= read outside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - - public void testMultiRead() throws Exception { - ope(OP_READ, 0, 9, 1, 1); - } - /** - * Operation= read inside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 1 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - - public void testMultiReadTx() throws Exception { - ope(OP_READTX, 0, 9, 1, 1); - } - - /** - * Operation= read inside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 10 - * verification of base's state - * @throws Exception - * No more multithreadedsee S_bank.java - */ - - public void testMultiShortReadTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 1); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankWrite.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankWrite.java deleted file mode 100644 index 17b2d9d0ed..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_bankWrite.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import java.rmi.NoSuchObjectException; -import java.rmi.ServerException; - -public abstract class A_bankWrite extends A_bank { - - public A_bankWrite(String name) { - super(name); - } - - public void testBasicMove() throws Exception { - ope(OP_MOVE, 0, 9, 1, 1); - } - - public void testBasicMoveNC() throws Exception { - ope(OP_MOVE, 0, 9, 1, 1, 5, false); - } - - public void testBasicRemove() throws Exception { - createOpe(OP_REMOVE, 3000, 3001, 1, 1); - } - - public void testMultiRemove() throws Exception { - createOpe(OP_REMOVE, 3010, 3040, 1, 1); - } - - public void testManyRemove() throws Exception { - createOpe(OP_REMOVE, 3000, 3200, 200, 1); - } - - /** - * Test the rollback - */ - public void testBasicRB() throws Exception { - ope(OP_MOVE, 0, 2, 4, 1, 700); - } - - public void testMultiRB() throws Exception { - createOpe(OP_MOVE, 0, 4, 4, 1, 600); - } - - - public void testBasicCreate() throws Exception { - ope(OP_CREATE, 100, 150, 1, 1); - } - - public void testShortCreate() throws Exception { - ope(OP_CREATE, 6000, 8000, 100, 1); - } - - public void testMultiCreate() throws Exception { - ope(OP_CREATE, 1000, 1900, 1, 1); - } - - - public void testMultiMove() throws Exception { - ope(OP_MOVE, 0, 5, 1, 1); - } - - /** - * test access on removed account - * spec EJB 2.1 page 406 (18.3.6/18.3.7) says that the container - * must throw a NoSuchObjectException to the client. - */ - public void testAccessRemoved() throws Exception { - int num = 700; - // create the account if it doesn't exist yet - manager.readBalance(num); - manager.delAccount(num); - try { - // read balance for last accessed account - manager.readBalance(); - fail("must throw NoSuchObjectException"); - } catch (NoSuchObjectException e) { - manager = null; // avoids that all other tests fail - } catch (ServerException e) { - manager = null; // avoids that all other tests fail - if (! (e.getCause() instanceof NoSuchObjectException)) { - fail("Should receive NoSuchObjectException instead of :" + e); - } - } - } - - /** - * Test that an entity created inside a transaction rollback only is not accessible - * Emulate a problem raised by safir project - */ - public void testCreateRollbackOnly() throws Exception { - int num = 800; - manager.createRollbackOnly(num); - try { - // read balance for last accessed account - manager.readBalance(); - fail("must throw NoSuchObjectException"); - } catch (NoSuchObjectException e) { - manager = null; // avoids that all other tests fail - } catch (ServerException e) { - manager = null; // avoids that all other tests fail - if (! (e.getCause() instanceof NoSuchObjectException)) { - fail("Should receive NoSuchObjectException instead of :" + e); - } - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_thread.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_thread.java deleted file mode 100644 index eebb2a6cb1..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/A_thread.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import java.rmi.RemoteException; -import java.rmi.ServerException; - -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.rmi.PortableRemoteObject; -import javax.transaction.TransactionRolledbackException; -import org.objectweb.jonas.jtests.beans.bank.Manager; -import org.objectweb.jonas.jtests.beans.bank.ManagerHome; - -public class A_thread extends Thread { - String managerName; - String name; - int ope; - int accmin; - int accmax; - int amount; - int loops; - int num; - boolean pf; - Context ictx; - Manager mgr = null; - ManagerHome mgrHome = null; - - public A_thread(String mname, int num, Context ictx, int ope, int accmin, int accmax, int loops, int amount, boolean pf) { - this.managerName = mname; - name = managerName + "." + ope + "." + num; - setName(name); - this.num = num; - this.ope = ope; - this.ictx = ictx; - this.accmin = accmin; - this.accmax = accmax; - this.loops = loops; - this.amount = amount; - this.pf = pf; - } - - public void run() { - - // Create a session bean - try { - mgrHome = (ManagerHome) PortableRemoteObject.narrow(ictx.lookup(managerName), ManagerHome.class); - mgr = mgrHome.create(A_bank.initialValue, pf); - } catch (Exception e) { - System.out.println("Cannot Create Session:" + e); - return; - } - - try { - switch (ope) { - case A_bank.OP_READ: - opRead(false); - break; - case A_bank.OP_READTX: - opRead(true); - break; - case A_bank.OP_MOVE: - opMove(); - break; - case A_bank.OP_MOVETO: - opMoveFromTo(amount/10 + num); - break; - case A_bank.OP_ONEMOVE: - if (num == 1) { - opMove(); - } else { - opRead(false); - } - break; - case A_bank.OP_ONEMOVETX: - if (num == 1) { - opMove(); - } else { - opRead(true); - } - break; - case A_bank.OP_CREATE: - opCreate(); - break; - case A_bank.OP_REMOVE: - opRemove(); - break; - default: - System.out.println("Bad OP: " + ope); - return; - } - } catch (RemoteException e) { - System.out.println("Thread " + name + " : " + e); - A_bank.threadfail = true; - A_bank.threadex = e; - } catch (RemoveException e) { - System.out.println("Thread " + name + " : " + e); - A_bank.threadfail = true; - A_bank.threadex = e; - } catch (RuntimeException e) { - System.out.println("Thread " + name + " : " + e); - A_bank.threadfail = true; - A_bank.threadex = e; - } finally { - try { - mgr.remove(); - } catch (javax.ejb.RemoveException e) { - throw new RuntimeException("remove failed", e); - } catch (RemoteException e) { - throw new RuntimeException("remove failed", e); - } - } - } - - private void opRead(boolean tx) throws RemoteException { - int acc = accmin + 10 * num; - for (int i = 0; i < loops; i++) { - acc++; - if (acc > accmax) { - acc = accmin; - } - int bal = tx ? mgr.readBalanceTx(acc) : mgr.readBalance(acc); - if (bal < 0) { - System.out.println("Thread " + name + " : account " + acc + ", negative balance = " + bal); - } - } - } - - private void opMoveFromTo(int delay) throws RemoteException { - int cre = (num % 2) == 0 ? accmin : accmax; - int deb = (num % 2) == 0 ? accmax : accmin; - try { - mgr.move(deb, cre, amount, delay); - } catch (TransactionRolledbackException e) { - // a possible rollback must not be considered as an error. - System.out.println("Thread " + name + " : " + e); - } catch (ServerException e) { - if (e.detail instanceof TransactionRolledbackException) { - System.out.println("Thread " + name + " : " + e.detail); - } else { - throw e; - } - } - } - - private void opMove() throws RemoteException { - int incr = num % (accmax - accmin); - int cre = accmin + incr; - int deb = accmin + incr + 1; - for (int i = 0; i < loops; i++) { - cre++; - if (cre > accmax) { - cre = accmin; - } - deb += 2; - if (deb > accmax) { - deb = accmin + 1; - } - // Add this to avoids deb = cre - if (deb == cre) { - if (deb > accmin) { - deb--; - } else { - deb++; - } - } - try { - mgr.move(deb, cre, amount, 0); - } catch (TransactionRolledbackException e) { - // a possible rollback must not be considered as an error. - System.out.println("Thread " + name + " : " + e); - } catch (ServerException e) { - if (e.detail instanceof TransactionRolledbackException) { - System.out.println("Thread " + name + " : " + e.detail); - } else { - throw e; - } - } - } - } - - private void opCreate() throws RemoteException { - int acc = accmin; - int errcount = 0; - for (int i = 0; i < loops; i++) { - acc++; - int bal = mgr.readBalanceTx(acc); - if (bal < 0) { - System.out.println("Thread " + name + " : account " + acc + ", negative balance = " + bal); - } - } - } - - private void opRemove() throws RemoteException, RemoveException { - int acc = accmin + 20 * num; - for (int i = 0; i < loops; i++) { - acc++; - if (acc > accmax) { - acc = accmin; - } - mgr.delAccount(acc); - } - } - -} - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/C_distribution.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/C_distribution.java deleted file mode 100644 index 6f8e2a5881..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/C_distribution.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This test suites test distribution pbs and involve generally - * several beans, with different types of interfaces. - * Beans used: folder - * @author Philippe Coq, Philippe Durieux (jonas team) - */ -public class C_distribution extends JTestCase { - - public C_distribution(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTest(F_FrontalCMP2.suite()); - suite.addTest(F_Frontal.suite()); - suite.addTest(F_Jdbc.suite()); - suite.addTest(F_Cluster.suite()); - suite.addTest(F_bankCRC.suite()); - suite.addTest(F_bankDB.suite()); - suite.addTest(F_bankRO.suite()); - suite.addTest(F_bankCST.suite()); - suite.addTest(F_bankCRW.suite()); - - return suite; - } - - public static void main (String args[]) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Frontal.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Frontal.java deleted file mode 100644 index 00755699e9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Frontal.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import java.rmi.NoSuchObjectException; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Assert; -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.ow2.carol.util.perfs.CarolJRMPPerformanceHelper; -import org.objectweb.jonas.jtests.beans.folder.File; -import org.objectweb.jonas.jtests.beans.folder.Folder; -import org.objectweb.jonas.jtests.beans.folder.FolderHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * Test a session bean remote accessing entities local. - * Beans used: folder - * @author Philippe Durieux - */ -public class F_Frontal extends JTestCase { - - protected static FolderHome fhome = null; - protected Folder folder = null; - - public F_Frontal(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - if (fhome == null) { - useBeans("folder", true); - try { - fhome = (FolderHome) PortableRemoteObject.narrow(ictx.lookup("FolderSYHome"), FolderHome.class); - assertNotNull(fhome); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - if (folder == null) { - try { - folder = fhome.create(); - assertNotNull(folder); - } catch (Exception e) { - fail("Cannot create folder session " + e); - } - } - } - - public void testSetRollbackOnly() throws Exception { - Folder f1 = fhome.createForRollback(); - f1.getIntTS(2); - f1.remove(); - } - - /** - * create 1 entity and remove it by its remote reference. - */ - public void testCreate1F() throws Exception { - File f = folder.newFile("file1"); - assertNotNull(f); - f.remove(); - } - - public void testAccessOnRemovedEntity() throws Exception { - File f = folder.newFile("file1"); - File f2 = folder.getFile("file1"); - f2.remove(); - try { - f.getName(); - fail("Should not access deleted object"); - } catch (NoSuchObjectException e) { - } catch (Exception e) { - fail("Bab Exception:" + e); - } - } - - /** - * print serialized form of the reference - */ - public void testSerializedReference() throws Exception { - String mfolder = CarolJRMPPerformanceHelper.getMarshalBytes(folder); - //System.out.println("Marshalled Ref = " + mfolder); - } - - /** - * send a reference as argument - */ - public void testSendRef() throws Exception { - for (int i = 0; i < 20; i++) { - folder.sendRef(folder); - } - } - - /** - * send an int as argument - */ - public void testSendInt() throws Exception { - for (int i = 0; i < 20; i++) { - folder.sendInt(1); - } - } - - /** - * send and get a reference as argument - */ - public void testGetRef() throws Exception { - for (int i = 0; i < 20; i++) { - folder.getRef(folder); - } - } - - /** - * send and get an int as argument - */ - public void testGetInt() throws Exception { - for (int i = 0; i < 20; i++) { - folder.getInt(1); - } - } - - /** - * send a reference as argument - */ - public void testSendRefTS() throws Exception { - for (int i = 0; i < 20; i++) { - folder.sendRefTS(folder); - } - } - - /** - * send an int as argument - */ - public void testSendIntTS() throws Exception { - for (int i = 0; i < 20; i++) { - folder.sendIntTS(1); - } - } - - /** - * send and get a reference as argument - */ - public void testGetRefTS() throws Exception { - for (int i = 0; i < 20; i++) { - folder.getRefTS(folder); - } - } - - /** - * send and get an int as argument - */ - public void testGetIntTS() throws Exception { - for (int i = 0; i < 20; i++) { - folder.getIntTS(1); - } - } - - /** - * to reproduce bug 305498 - * use ejbql query SELECT SUM (p.value) FROM jt2_paper AS p] - */ - public void testModify() throws Exception { - int result = folder.modify("aaaa", 100); - Assert.assertEquals("bad result", 120, result); - } - - /** - * try to reproduce bug on ejbSelect #305711 - * use ejbql query SELECT SUM (p.valeur) FROM jt2_paper2 AS p WHERE p.paper3.valide = '1' - */ - public void testModifyPaper2And3() throws Exception { - int result = folder.modifypaper2And3("1", 55); - Assert.assertEquals("bad result", 85, result); - } - - /** - * to see if the previous pb on ejbSelect exists on finder - * Here we use a finder method with - * SELECT OBJECT(o) FROM jt2_paper2 AS p WHERE p.paper3.valide = '1' - */ - public void testModifyPaper2And3WithFinder() throws Exception { - int result = folder.modifypaper2And3WithFinder("1", 55); - Assert.assertEquals("bad result", 3, result); - } - - - public static Test suite() { - return new TestSuite(F_Frontal.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_Frontal(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Jdbc.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Jdbc.java deleted file mode 100644 index 244a77ef26..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_Jdbc.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.jdbc.Manager; -import org.objectweb.jonas.jtests.beans.jdbc.ManagerHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * Test Jdbc accesses from a session bean - * Beans used: jdbc - * @author Philippe Durieux - */ -public class F_Jdbc extends JTestCase { - - protected static ManagerHome mhome = null; - protected Manager manager = null; - - public F_Jdbc(String name) { - super(name); - } - - protected void tearDown() throws Exception { - if (manager != null) { - manager.remove(); - } - } - - protected void setUp() { - super.setUp(); - if (mhome == null) { - useBeans("jdbc", true); - try { - mhome = (ManagerHome) PortableRemoteObject.narrow(ictx.lookup("jdbcManagerSYHome"), ManagerHome.class); - assertNotNull(mhome); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - if (manager == null) { - try { - manager = mhome.create(); - assertNotNull(manager); - } catch (Exception e) { - fail("Cannot create manager session"); - } - } - } - - /** - * Test we can open a Connection - */ - public void testOpenConnection() throws Exception { - int cnb = manager.openConnection(); - assertTrue("Cannot open Connection", cnb > 0); - } - - /** - * Test we can close a Connection previously opened - */ - public void testCloseConnection() throws Exception { - int cnb = manager.openConnection(); - assertTrue("open connection failed", cnb > 0); - assertTrue("isClosed() should return true after close()", manager.closeConnection(cnb)); - } - - /** - * test we can create and close a Connection in the same method. - */ - public void testOpenCloseConnection() throws Exception { - assertTrue("basic open+close failed", manager.openCloseConnection()); - } - - /** - * test that we cannot use a connection after close. - * an SQLException should be raised (spec JDBC 2.0 p.21) - */ - public void testAccessConnectionAfterClose() throws Exception { - assertTrue("using conn after close must raise SQLException", manager.accessCloseConnection()); - } - - /** - * Test simple jdbc access (write value) - */ - public void testJdbcStoreNoTx() throws Exception { - manager.storeValue("pk1", 1); - } - - /** - * Test simple jdbc access (write value) in committed tx - */ - public void testJdbcStoreCommit() throws Exception { - int val = manager.getValue("pk1"); - utx.begin(); - try { - manager.storeValue("pk1", val + 1); - } finally { - utx.commit(); - } - assertEquals("Commit did not work", val + 1, manager.getValue("pk1")); - } - - /** - * Test simple jdbc access (write value) in committed tx - */ - public void testJdbcStore2Commit() throws Exception { - int val = manager.getValue("pk1"); - int val2 = manager.getValue("pk2"); - utx.begin(); - try { - manager.storeValue("pk1", val + 1); - manager.storeValue("pk2", val2 + 1); - } finally { - utx.commit(); - } - assertEquals("Commit did not work", val + 1, manager.getValue("pk1")); - assertEquals("Commit did not work", val2 + 1, manager.getValue("pk2")); - } - - /** - * Test simple jdbc access (write value) in rollback tx - */ - public void testJdbcStoreRollback() throws Exception { - int val = manager.getValue("pk1"); - utx.begin(); - try { - manager.storeValue("pk1", val + 1); - } finally { - utx.rollback(); - } - assertEquals("Rollback did not work", val, manager.getValue("pk1")); - } - - /** - * Test with 2 resources - */ - public void testJdbcStore2Rollback() throws Exception { - int val1 = manager.getValue("pk1"); - int val2 = manager.getValue("pk2"); - utx.begin(); - try { - manager.storeValue("pk1", val1 + 1); - manager.storeValue("pk2", val2 + 1); - } finally { - utx.rollback(); - } - assertEquals("Rollback did not work", val1, manager.getValue("pk1")); - assertEquals("Rollback did not work", val2, manager.getValue("pk2")); - } - - public static Test suite() { - return new TestSuite(F_Jdbc.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_Jdbc(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_bankRO.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_bankRO.java deleted file mode 100644 index b23776d070..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/F_bankRO.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import javax.rmi.PortableRemoteObject; - -import org.objectweb.jonas.jtests.beans.bank.Manager; -import org.objectweb.jonas.jtests.beans.bank.ManagerHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class F_bankRO extends A_bankRead { - - protected static ManagerHome homecs = null; - protected static Manager managercs = null; - public static boolean threadfail; - static final int accountNb = 150; - public F_bankRO(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerROHome"; - } - - public boolean getPrefetch() { - return false; - } - - protected void setUp() { - - try { - if (home == null) { - useBeans("bank", false); - home = (ManagerHome) PortableRemoteObject.narrow(ictx.lookup(getManagerHomeName()), ManagerHome.class); - } - if (manager == null) { - manager = home.create(initialValue, getPrefetch()); - } - } catch (Exception e) { - fail("Exception raised in setup: " + e); - } - try { - // Create all accounts with another manager (not the read-only one) - if (homecs == null) { - homecs = (ManagerHome) PortableRemoteObject.narrow(ictx.lookup("bankManagerCSHome"), ManagerHome.class); - } - if (managercs == null) { - managercs = homecs.create(initialValue, false); - } - // Initializes the test by creating accounts - - managercs.createAll(accountNb); - threadfail = false; - } catch (Exception e) { - fail("Exception raised in setup: " + e); - } - } - - - public static Test suite() { - return new TestSuite(F_bankRO.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_bankRO(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bank.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bank.java deleted file mode 100644 index dd2d4d3e38..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bank.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.objectweb.jonas.jtests.clients.distribution; - -import javax.rmi.PortableRemoteObject; -import org.objectweb.jonas.jtests.beans.bank.Manager; -import org.objectweb.jonas.jtests.beans.bank.ManagerHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -public abstract class S_bank extends A_bankRead { - - public S_bank(String name) { - super(name); - } - - /** - * Here is kept testcases that fails from time to times - * do to the multithreading? - * It comes from A_bank.java - */ - - /** - * Operation= Move - * min range for account nb = 6 - * max range for account nb = 6 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 4 - * amount = 12 - * no verification - * @throws Exception - */ - public void testMultiSameAccount() throws Exception { - createOpe(OP_MOVETO, 6, 6, 1, 4, 12); - } - - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 3 - * verification of base's state - * @throws Exception - */ - public void test3Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 3); - } - - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 4 - * verification of base's state - * @throws Exception - */ - public void test4Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 4); - } - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 5 - * verification of base's state - * @throws Exception - */ - public void test5Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 5); - } - /** - * Operation= read - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 8 - * verification of base's state - * @throws Exception - */ - public void test8Readers() throws Exception { - createOpe(OP_READ, 0, 9, 10, 8); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 3 - * verification of base's state - * @throws Exception - */ - public void test3ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 3); - } - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 4 - * verification of base's state - * @throws Exception - */ - public void test4ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 4); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 5 - * verification of base's state - * @throws Exception - */ - public void test5ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 5); - } - - /** - * Operation= read in transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 8 - * verification of base's state - * @throws Exception - */ - public void test8ReadersTx() throws Exception { - createOpe(OP_READTX, 0, 9, 100, 8); - } - - /** - * Operation= read outside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 10 - * verification of base's state - * @throws Exception - */ - - public void testMultiRead() throws Exception { - ope(OP_READ, 0, 9, 1, 10); - } - /** - * Operation= read inside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 1 - * nb of threads running the same operations = 10 - * verification of base's state - * @throws Exception - */ - - public void testMultiReadTx() throws Exception { - ope(OP_READTX, 0, 9, 1, 10); - } - - /** - * Operation= read inside transaction - * min range for account nb = 0 - * max range for account nb = 9 - * nb of loop in each thread = 10 - * nb of threads running the same operations = 10 - * verification of base's state - * @throws Exception - */ - - /* these tests come from A_bankWrite */ - - public void testMultiShortReadTx() throws Exception { - createOpe(OP_READTX, 0, 9, 10, 10); - } - - public void testMultiRemove() throws Exception { - createOpe(OP_REMOVE, 3010, 3040, 1, 4); - } - - public void testManyRemove() throws Exception { - createOpe(OP_REMOVE, 3000, 3200, 200, 1); - } - public void testMultiRB() throws Exception { - createOpe(OP_MOVE, 0, 4, 4, 5, 600); - } - public void testMultiCreate() throws Exception { - ope(OP_CREATE, 1000, 1900, 1, 12); - } - - public void testMultiMove() throws Exception { - ope(OP_MOVE, 0, 5, 1, 5); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRC.java deleted file mode 100644 index 45fac8768d..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRC.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class S_bankCRC extends A_bankWrite { - - public S_bankCRC(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerCRCHome"; - } - - public boolean getPrefetch() { - return false; - } - - public static Test suite() { - return new TestSuite(S_bankCRC.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_bankCRC(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRW.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRW.java deleted file mode 100644 index c229a55ad5..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCRW.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class S_bankCRW extends A_bankWrite { - - public S_bankCRW(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerCRWHome"; - } - - public boolean getPrefetch() { - return false; - } - - public static Test suite() { - return new TestSuite(S_bankCRW.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_bankCRW(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCS.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCS.java deleted file mode 100644 index 423f5b8691..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCS.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class S_bankCS extends A_bankWrite { - - public S_bankCS(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerCSHome"; - } - - public boolean getPrefetch() { - return false; - } - - public static Test suite() { - return new TestSuite(S_bankCS.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_bankCS(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCST.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCST.java deleted file mode 100644 index 5136ab5d74..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCST.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class S_bankCST extends S_bank { - - public S_bankCST(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerCSTHome"; - } - - public boolean getPrefetch() { - return false; - } - - public static Test suite() { - return new TestSuite(S_bankCST.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_bankCST(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCSpf.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCSpf.java deleted file mode 100644 index f8980bb774..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_bankCSpf.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; - -public class S_bankCSpf extends A_bankWrite { - - public S_bankCSpf(String name) { - super(name); - } - - public String getManagerHomeName() { - return "bankManagerCSHome"; - } - - public boolean getPrefetch() { - return true; - } - - public static Test suite() { - return new TestSuite(S_bankCSpf.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_bankCSpf(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_distribution.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_distribution.java deleted file mode 100644 index d5e3cf6436..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/distribution/S_distribution.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.distribution; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This test suites collects all the suites that have testcases that may fail in distribution directory - * failing is not systematic and may depend of the speed of the computer - * Beans used:bank, cluster, folder - * @author Philippe Coq, Philippe Durieux (jonas team) - */ -public class S_distribution extends JTestCase { - - public S_distribution(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(); - - suite.addTest(S_bankCS.suite()); - suite.addTest(S_bankCSpf.suite()); - suite.addTest(S_bankCRW.suite()); - suite.addTest(S_bankCRC.suite()); - return suite; - } - - public static void main (String args[]) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_AdvancedHomeEC.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_AdvancedHomeEC.java deleted file mode 100644 index 47a59351e8..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_AdvancedHomeEC.java +++ /dev/null @@ -1,808 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.rmi.RemoteException; -import java.util.Enumeration; - -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.Handle; -import javax.ejb.RemoveException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.RollbackException; - -import org.objectweb.jonas.jtests.beans.annuaire.Personne; -import org.objectweb.jonas.jtests.beans.annuaire.PersonneHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This is an advanced test suite for home interface on entity bean CMP. - * Beans used: annuaire - * @author Philippe Coq, Philippe Durieux, Helene Joanin (jonas team) - */ -public abstract class A_AdvancedHomeEC extends JTestCase { - - String mynum = "638"; - String myname = "Philippe Durieux"; - - public A_AdvancedHomeEC(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - } - - /** - * return PersonneHome, that can be either CMP v1 or CMP v2 bean. - */ - abstract public PersonneHome getHome(); - - /** - * Test findByPK in transaction - * Check in jonas admin that transaction count is OK. - * Possible pb is that since there are no resource associated, - * the distributed commit will not go to the server. - */ - public void testFindByPkTx() throws Exception { - Personne p = null; - - utx.begin(); - try { - p = getHome().findByPrimaryKey(myname); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - - /** - * test du findAll, returning an Enumeration. - * Some of the beans are already in the database, some other are created. - */ - public void testFindAllEnum() throws Exception { - Enumeration e = null; - e = getHome().findAll(); - int count = 0; - while (e.hasMoreElements()) { - count++; - Personne p = (Personne) - PortableRemoteObject.narrow(e.nextElement(), Personne.class); - } - assertEquals("Wrong number of bean (case 1)", 10, count); - Personne p1 = getHome().create("Paul Morgan", "1234256"); - Personne p2 = getHome().create("Jean Richard", "1234356"); - Personne p3 = getHome().create("Jean-Paul Landry", "1234556"); - e = getHome().findAll(); - count = 0; - while (e.hasMoreElements()) { - count++; - Personne p = (Personne) - PortableRemoteObject.narrow(e.nextElement(), Personne.class); - } - assertEquals("Wrong number of bean (case 2)", 13, count); - // cleaning - p1.remove(); - p2.remove(); - p3.remove(); - e = getHome().findAll(); - count = 0; - while (e.hasMoreElements()) { - count++; - Personne p = (Personne) PortableRemoteObject.narrow(e.nextElement(), Personne.class); - } - assertEquals("Wrong number of bean (case 3)", 10, count); - } - - /** - * test Create inside a Transaction. - */ - public void testCreateInTx() throws Exception { - utx.begin(); - try { - getHome().create("Duke Ellington", "12235446"); - utx.commit(); - Personne p = getHome().findByNom("Duke Ellington"); - p.remove(); - utx.begin(); - getHome().create("Louis Armstrong", "12035446"); - } catch (Exception e) { - fail(e.getMessage()); - } finally { - utx.rollback(); - } - try { - getHome().findByNom("Louis Armstrong"); - fail("Should not find it"); - } catch (FinderException e) { - } - } - - /** - * test a simple Create inside a Transaction. - */ - public void testSimpleCreateInTx() throws Exception { - utx.begin(); - try { - getHome().create("Mike", "12235846"); - } catch (Exception e) { - fail(e.getMessage()); - } finally { - utx.commit(); - } - Personne p = getHome().findByNom("Mike"); - p.remove(); - } - - /** - * test a simple Remove - * Find an instance already in database and remove it. - */ - public void testSimpleRemove() throws Exception { - Personne p = getHome().findByNom("Adriana Danes"); - p.remove(); - getHome().create("Adriana Danes", "777"); // cleaning - } - - /** - * test remove twice - */ - public void testRemoveTwice() throws Exception { - Personne p = getHome().create("Andre", "77710"); // first create a new element - p.remove(); - try { - p.remove(); - fail("Should not be able to remove this object twice"); - } catch (RemoteException e) { - // OK - } catch (Exception e) { - fail("Bad exception raised: " + e); - } - } - - /** - * test remove twice in same transaction - */ - public void testRemoveTwiceTx() throws Exception { - Personne p = getHome().create("Andre", "77710"); // first create a new element - utx.begin(); - try { - p.remove(); - p.remove(); - fail("Should not be able to remove this object twice"); - } catch (RemoteException e) { - // OK: normal case because 2nd remove must fail - } catch (Exception e) { - fail("Bad exception raised: " + e); - } finally { - try { - utx.commit(); - } catch (RollbackException e) { - // Possibly go here, since 2nd remove failed. - // clean object (1st remove has been rolled back!) - // Don't use p because instance should have been discarded. - getHome().remove("Andre"); - } - } - } - - /** - * Test Create + Business Method inside the same Tx - */ - public void testCreateAndBusiness() throws Exception { - String num = "00000001"; - Personne p = null; - utx.begin(); - try { - p = getHome().create("Lionel Hampton", "92235446"); - p.setNumero(num); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - assertTrue(num.equals(p.getNumero())); - p.remove(); // cleaning - } - - /** - * Test remove(pk): create / find / remove(pk) / find - */ - public void testRemovePk() throws Exception { - Personne p = null; - String newman = "Xavier Spengler"; - p = getHome().create(newman, "6"); - getHome().findByPrimaryKey(newman); - getHome().remove(newman); - try { - getHome().findByPrimaryKey(newman); - fail("Should not exist anymore"); - } - catch (FinderException e) { - } - } - - /** - * Test remove(handle): create / find / remove(handle) / find - * CMP2: bug #300419 - */ - public void testRemoveHandle() throws Exception { - Personne p = null; - String newman = "Xavier Spengler"; - p = getHome().create(newman, "6"); - Handle h = p.getHandle(); - getHome().remove(h); - try { - getHome().findByPrimaryKey(newman); - fail("Should not exist anymore"); - } catch (FinderException e) { - } - } - - /** - * Test remove(pk) inside transaction: - * create / find / remove(pk) / find - */ - public void testRemovePkInTx() throws Exception { - Personne p = null; - String newman = "Xavier Spengler"; - p = getHome().create(newman, "6"); - getHome().findByPrimaryKey(newman); - utx.begin(); - try { - getHome().remove(newman); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - try { - getHome().findByPrimaryKey(newman); - fail("Should not exist anymore"); - } - catch (FinderException e) { - } - } - - /** - * Test remove(pk) of a non-existent pk. - */ - public void testRemovePkNonExistent() throws Exception { - String man = "NonExistent"; - try { - getHome().remove(man); - fail("No RemoteException"); - } - catch (RemoteException e) { - } - } - - /** - * Test remove(pk) of a non-existent pk inside transaction. - * See ejb2.1 18.3.1 - */ - public void testRemovePkNonExistentInTx() throws Exception { - String man = "NonExistent"; - utx.begin(); - try { - getHome().remove(man); - fail("No RemoteException"); - } - catch (RemoteException e) { - } finally { - try { - utx.commit(); - fail("transaction should be marked as rollback"); - } catch (RollbackException e) { - } - } - } - - /** - * Test bean.remove : - * create / find / remove / find - */ - public void testRemove() throws Exception { - Personne p = null; - String newman = "Jeannot"; - p = getHome().create(newman, "5"); - getHome().findByPrimaryKey(newman); - p.remove(); - try { - getHome().findByPrimaryKey(newman); - fail("Should not exist anymore"); - } - catch (FinderException e) { - } - } - - /** - * Test bean.remove : - * create / find / remove / bussiness method - * Ensure the javax.ejb.EJBException is thrown when trying - * to invoke an accessor method on a deleted entitybean object - */ - public void testRemove2() throws Exception { - Personne p = null; - String newman = "Jeannot2"; - p = getHome().create(newman, "5"); - getHome().findByPrimaryKey(newman); - p.remove(); - try { - p.getNumero(); - fail("Should not exist anymore"); - } - catch (Exception e) { - } - } - - /** - * Test remove by PK in a tx rolled back - * we modify the bean instance outside tx, then we check that - * the bean state has not been changed by the rolled back remove - */ - public void testRemovePKRB() throws Exception { - String newnum = "344"; - String name = "remove-by-pk"; - Personne p = getHome().create(name, "420"); - p.setNumero(newnum); - utx.begin(); - getHome().remove(name); - utx.rollback(); - try { - assertEquals("Lost modified value", newnum, p.getNumero()); - } finally { - // cleaning - getHome().remove(name); - } - } - - /** - * Test remove in a tx rolled back - * we modify the bean instance outside tx, then we check that - * the bean state has not been changed by the rolled back remove - */ - public void testRemoveRB() throws Exception { - String newnum = "345"; - String name = "remove-instance"; - Personne p = getHome().create(name, "421"); - p.setNumero(newnum); - utx.begin(); - p.remove(); - utx.rollback(); - try { - assertEquals("Lost modified value", newnum, p.getNumero()); - } finally { - // cleaning - //p.remove(); - getHome().remove(name); - } - } - - /** - * Test bean.remove inside a tx: - * create / find / remove / find - */ - public void testRemoveInTx() throws Exception { - Personne p = null; - String newman = "Jeannot"; - p = getHome().create(newman, "5"); - getHome().findByPrimaryKey(newman); - utx.begin(); - try { - p.remove(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - try { - getHome().findByPrimaryKey(newman); - fail("Should not exist anymore"); - } - catch (FinderException e) { - } - } - - /** - * Test finder in transactions - */ - public void testFinderInTx() throws Exception { - Personne p = null; - - // FindByPrimaryKey - for (int i = 0; i < 3; i++) { - utx.begin(); - try { - p = getHome().findByPrimaryKey(myname); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - assertTrue(p.getNumero().equals(mynum)); - - // FindByNum - for (int i = 0; i < 7; i++) { - utx.begin(); - try { - p = getHome().findByNom(myname); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - assertTrue(p.getNumero().equals(mynum)); - - // FindAll - for (int i = 0; i < 11; i++) { - utx.begin(); - try { - getHome().findAll(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - } - - /** - * Test create + remove in transactions - */ - public void testCreateRemoveInTx() throws Exception { - for (int i = 0; i < 20; i++) { - utx.begin(); - try { - getHome().create("Eric Paire", "500"); - getHome().remove("Eric Paire"); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - } - - /** - * test 2 findByPrimaryKey in the same tx, with an update - * between the 2 calls. We shall see the modifications, even before - * the commit occurs. - */ - public void testFindTwice() throws Exception { - String num = "0032"; - String oldnum = ""; - utx.begin(); - Personne p = null; - try { - p = getHome().findByPrimaryKey(myname); - oldnum = p.getNumero(); - p.setNumero(num); - Personne p2 = getHome().findByPrimaryKey(myname); - assertTrue(p2.getNumero().equals(num)); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.rollback(); - } - p = getHome().findByPrimaryKey(myname); - assertTrue(p.getNumero().equals(oldnum)); - } - - /** - * Test DuplicateKeyException. - * Create in an implicit tx - * known bug #300836: remove it from the list - */ - public void _testDuplicateKeyTx() throws Exception { - getHome().findByPrimaryKey(myname); - try { - getHome().create(myname, "700"); - fail("DuplicateKeyException not raised"); - } catch (DuplicateKeyException e) { - } catch (Exception e) { - fail("Bad Exception raised:" + e); - } - } - - /** - * Test DuplicateKeyException. - * Create outside tx - * known bug #300836: remove it from the list - */ - public void _testDuplicateKey() throws Exception { - try { - getHome().create(myname, "700", true); - fail("DuplicateKeyException not raised"); - } catch (DuplicateKeyException e) { - } catch (Exception e) { - fail("Bad exception raised: " + e); - } - } - - public void testDuplicateKey2() throws Exception { - getHome().findByPrimaryKey(myname); - try { - getHome().create(myname, "700", true); - fail("DuplicateKeyException not raised"); - } catch (DuplicateKeyException e) { - // should go here - } catch (Exception e) { - // go here in jonas-3-3-6 - } - utx.begin(); - Personne p0 = getHome().findByPrimaryKey(myname); - utx.commit(); - String num = p0.getNumero(); - assertTrue("bad value: " + num + ", should be: " + mynum, num.equals(mynum)); - } - - public void testRemoveCreateTx() throws Exception { - utx.begin(); - try { - getHome().remove(myname); - getHome().create(myname, mynum, true); - } finally { - utx.commit(); - } - getHome().findByPrimaryKey(myname); - } - - /** - * Verify that we can create an entity with a null name - * - */ - public void testCreateNull() throws Exception { - getHome().create("nullv", null); - getHome().remove("nullv"); // cleaning - } - - /** - * Test many Create calls - */ - public void testManyCreate() throws Exception { - int nbCreate = 20; - for (int i = 1; i <= nbCreate; i++) { - Personne p = getHome().create("manycreate" + i, "num" + i, true); - } - for (int i = 1; i <= nbCreate; i++) { - getHome().remove("manycreate" + i); - } - } - - public void testRemoveCreate() throws Exception { - Personne p1 = null; - String man1 = "Count"; - utx.begin(); - getHome().create(man1, "1"); - utx.commit(); - p1 = getHome().findByNom(man1); - p1.remove(); - getHome().create(man1, "1"); - p1 = getHome().findByNom(man1); - p1.remove(); - } - - public void testRemoveCreate2() throws Exception { - Personne p1 = null; - String man1 = "Duke"; - p1 = getHome().create(man1, "1"); - p1.remove(); - p1 = getHome().create(man1, "1"); - p1.remove(); - } - - public void testRemoveCreate3() throws Exception { - Personne p4 = null; - String man4 = "Dexter"; - p4 = getHome().create(man4, "4"); - getHome().findByPrimaryKey(man4); - getHome().remove(man4); - p4 = getHome().create(man4, "44"); - getHome().remove(man4); - } - - /** - * Combination of other tests - * This test the transaction isolation in entity bean container - * this test must never hang - */ - public void testIsolation() throws Exception { - Personne p0 = null; - Personne p1 = null; - Personne p2 = null; - Personne p3 = null; - Personne p4 = null; - Personne p5 = null; - String n = null; - String man1 = "Duke Ellington"; - String man2 = "Louis Armstrong"; - String man3 = "Lionel Hampton"; - String man4 = "Dexter Gordon"; - String man5 = "Bill Evans"; - - // man1 - utx.begin(); - try { - getHome().create(man1, "1"); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - p1 = getHome().findByNom(man1); - - // man2 - utx.begin(); - try { - getHome().create(man2, "2"); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.rollback(); - } - - // man3 - utx.begin(); - try { - p3 = getHome().create(man3, "3"); - p3.setNumero("33"); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - assertTrue(p3.getNumero().equals("33")); - - // cleaning - p1.remove(); - p3.remove(); - - // man4 - p4 = getHome().create(man4, "4"); - getHome().findByPrimaryKey(man4); - getHome().remove(man4); - p4 = getHome().create(man4, "44"); - getHome().findByPrimaryKey(man4); - utx.begin(); - try { - getHome().remove(man4); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - - // man5 - p5 = getHome().create(man5, "5"); - getHome().findByPrimaryKey(man5); - p5.remove(); - p5 = getHome().create(man5, "5"); - getHome().findByPrimaryKey(man5); - utx.begin(); - try { - p5.remove(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - - // existing person - for (int i = 0; i < 5; i++) { - utx.begin(); - try { - p0 = getHome().findByPrimaryKey(myname); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - assertTrue(p0.getNumero().equals(mynum)); - - // findall - for (int i = 0; i < 5; i++) { - utx.begin(); - try { - getHome().findAll(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - - // create + remove - for (int i = 0; i < 20; i++) { - utx.begin(); - try { - getHome().create(man2, "500"); - getHome().remove(man2); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - } - - // findByPrimaryKey twice - utx.begin(); - try { - p0 = getHome().findByPrimaryKey(myname); - p0.setNumero("0"); - p2 = getHome().findByPrimaryKey(myname); - assertTrue(p2.getNumero().equals("0")); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.rollback(); - } - - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_BasicHomeInterface.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_BasicHomeInterface.java deleted file mode 100644 index d541644e59..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_BasicHomeInterface.java +++ /dev/null @@ -1,548 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.Collection; -import java.util.Enumeration; -import java.util.Iterator; -import java.rmi.RemoteException; -import java.rmi.ServerException; - -import javax.ejb.FinderException; - - -import org.objectweb.jonas.jtests.beans.ebasic.Simple; -import org.objectweb.jonas.jtests.beans.ebasic.SimpleHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * test cases common to both suites CMP and BMP. - */ -public abstract class A_BasicHomeInterface extends JTestCase { - - protected static SimpleHome home = null; - - public A_BasicHomeInterface(String name) { - super(name); - } - - /** - * init environment: - * - load beans - * - create/init database for entities. - */ - protected void setUp() { - super.setUp(); - useBeans("ebasic", true); - } - - /** - * return SimpleHome, that can be either BMP or CMP bean. - */ - abstract public SimpleHome getHome(); - - /** - * testFindByPK verify that findByPrimaryKey find an existing entityBean - * pre condition: an element with "pk1" as primary key must exist in the database - * - * findByPrimaryKey("testFindByPK") must pass. - */ - public void testFindByPK() throws Exception { - getHome().findByPrimaryKey("pk1"); - } - - - - /** - * testFindUnexistingPK verify that findByPrimaryKey throw Finder Exception - * when the specified entity beab doesn't exist. - * pre condition there is no element with "pk999" in the table - * - * findByPrimaryKey("testFindUnexistingPK") must throw Finder Exception - */ - public void testFindUnexistingPK() throws Exception { - try { - getHome().findByPrimaryKey("pk999"); - fail("findByPrimaryKey must throw ObjectNotFound Exception"); - } catch(FinderException e) { - } - } - - /** - * testOtherFinder verify that we can use finder method other than findByPrimaryKey - * pre condition an element with "pk2" as primary key must exist in the database - * findByTestName("testOtherFinder") must pass - * - */ - public void testOtherFinder() throws Exception { - getHome().findByTestName("pk2"); - } - - /** - * testFinderEnumObjNotFound verify that a finder method that can return a Enumeration - * return an empty enumeration where there is no matching bean - * pre condition there is no elements with NumTest = 999 - * - */ - public void testFinderEnumObjNotFound() throws Exception { - Simple entity = null; - Enumeration listOfEntity = null; - - listOfEntity = getHome().findInfoForNum(999); - if (listOfEntity.hasMoreElements()) - fail("findInfoForNum must return an empty enumeration"); - - } - - /** - * testCreateNewEntity verify that we can create a new entityBean - * We create a new entity testCreateNewEntity, 20, 6 - * the findByTestName("testCreateNewEntity") must pass and the resulting must be equals to 20 - * pre condition the testCreateNewEntity element must not exist - * - */ - public void testCreateNewEntity() throws Exception { - getHome().create("pk100", 20, 6); - Simple entity2 = getHome().findByTestName("pk100"); - assertEquals(20, entity2.getInfo()); - // cleaning - entity2.remove(); - } - - /* - * Simpler tests, for debugging only : - * - cannot be passed twice - * - are not independant each others - * Use Jadmin to check instance counts are OK ! - */ - public void essaiC1() throws Exception { - getHome().create("pke1", 20, 6); - } - public void essaiA1() throws Exception { - getHome().findByPrimaryKey("pke1").getInfo(); - } - public void essaiA1C() throws Exception { - utx.begin(); - getHome().findByPrimaryKey("pke1").getInfo(); - utx.commit(); - } - public void essaiF1() throws Exception { - getHome().findByPrimaryKey("pke1"); - } - public void essaiR1() throws Exception { - getHome().remove("pke1"); - } - public void essaiR1C() throws Exception { - utx.begin(); - getHome().remove("pke1"); - utx.commit(); - } - public void essaiC2() throws Exception { - getHome().create("pke2", 20, 6); - } - public void essaiA2() throws Exception { - getHome().findByPrimaryKey("pke2").getInfo(); - } - public void essaiA2C() throws Exception { - utx.begin(); - getHome().findByPrimaryKey("pke2").getInfo(); - utx.commit(); - } - public void essaiF2() throws Exception { - getHome().findByTestName("pke2"); - } - public void essaiR2() throws Exception { - getHome().findByTestName("pke2").remove(); - } - public void essaiR2C() throws Exception { - utx.begin(); - getHome().findByTestName("pke2").remove(); - utx.commit(); - } - - /* - * testCreateRolledBack verify that we cannot access to a bean whose - * creation has been rolledback by a finder method. - * pre condition the pk110 element must not exist - */ - public void testCreateRolledBack() throws Exception { - utx.begin(); - try { - Simple entity1 = getHome().create("pk110", 30, 7); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.rollback(); - } - - try { - getHome().findByTestName("pk110"); - fail("element should not be found"); - } catch(FinderException e) { - } - } - - /* - * testCreateRolledBack verify that we cannot access to a bean whose - * creation has been rolledback by findByPrimaryKey. - * pre condition the pk110 element must not exist - */ - public void testCreateRolledBackPK() throws Exception { - utx.begin(); - try { - Simple entity1 = getHome().create("pk110", 30, 7); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.rollback(); - } - - try { - getHome().findByPrimaryKey("pk110"); - fail("element should not be found"); - } catch(FinderException e) { - } - } - - /* - * testRemoveViaEJBHome verify it is possible to remove an entity bean via the home object - * pre condition the testRemoveViaEJBHome element must exist - * - */ - public void testRemoveViaEJBHome() throws Exception { - getHome().remove("pk4"); - try { - getHome().findByTestName("pk4"); - fail("not removed"); - } catch (FinderException e) { - } - // cleaning - getHome().create("pk4", 40, 8); - } - - /** - * test remove by PK twice. - * test that a removeByPrimaryKey can be followed by a create of the same entity. - */ - public void testRemoveByPKTwice() throws Exception { - getHome().create("pkn4", 40, 8); - getHome().remove("pkn4"); - getHome().create("pkn4", 40, 8); - getHome().remove("pkn4"); - } - - /** - * test remove by EJBObject twice. - * test that a remove can be followed by a create of the same entity. - */ - public void testRemoveTwice() throws Exception { - Simple entity = getHome().create("pkn5", 50, 8); - entity.remove(); - entity = getHome().create("pkn5", 50, 8); - entity.remove(); - } - - /* - * testRemoveViaEJBObject verify it is possible to remove an entity bean via the EJBObject - * pre condition the testRemoveViaEJBObject element must exist - */ - public void testRemoveViaEJBObject() throws Exception { - Simple entity = getHome().findByPrimaryKey("pk5"); - entity.remove(); - try { - getHome().findByPrimaryKey("pk5"); - fail("not removed"); - } catch (FinderException e) { - } - // cleaning - getHome().create("pk5", 50, 8); - } - - /** - * testRemoveInsideTransaction Verify that after a remove inside a transaction, - * the bean cannot be found anymore - * pre condition the pk4 instance must exist. - */ - public void testRemoveInsideTransaction() throws Exception { - Simple entity1 = getHome().findByPrimaryKey("pk4"); - utx.begin(); - try { - entity1.remove(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - utx.begin(); - try { - getHome().findByPrimaryKey("pk4"); - fail("should not exist anymore"); - } catch(FinderException e) { - } finally { - utx.rollback(); - } - // cleaning - getHome().create("pk4", 40, 8); - } - - /** - * same test without second tx. - */ - public void testRemoveInTransaction() throws Exception { - Simple entity1 = getHome().findByPrimaryKey("pk4"); - utx.begin(); - try { - entity1.remove(); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - try { - getHome().findByPrimaryKey("pk4"); - fail("should not exist anymore"); - } catch(FinderException e) { - } - // cleaning - getHome().create("pk4", 40, 8); - } - - /** - * test remove by PK in transaction - */ - public void testHomeRemoveCommitted() throws Exception { - utx.begin(); - try { - getHome().remove("pk4"); - } - catch (Exception e) { - fail(e.getMessage()); - } - finally { - utx.commit(); - } - try { - getHome().findByPrimaryKey("pk4"); - fail("should not exist anymore"); - } catch(FinderException e) { - } - // cleaning - getHome().create("pk4", 40, 8); - } - - /** - * testRemoveRolledBack verify that we can access to a bean after remove has been rolledback - * pre condition the testRemoveRolledBack must exist - */ - public void testRemoveRolledBack() throws Exception { - Simple entity1 = getHome().findByPrimaryKey("pk6"); - utx.begin(); - try { - entity1.remove(); - } - catch (Exception e) { - utx.rollback(); - fail(e.getMessage()); - } - try { - // Here we verify we cannot acces to the removed bean - // (the transaction is not yet rolled back") - getHome().findByPrimaryKey("pk6"); - fail("should not exist anymore at this point"); - } catch(FinderException e) { - } finally { - utx.rollback(); - } - Simple entity3 = getHome().findByTestName("pk6"); - assertEquals(60, entity3.getInfo()); - } - - /** - * testHomeRemoveRolledBack verify that we can access to a bean after remove has been rolledback - * it is the same that testRemoveRolledBack but with home.remove(pk); - * pre condition the testHomeRemoveRolledBack must exist - */ - public void testHomeRemoveRolledBack() throws Exception { - Simple entity1 = getHome().findByPrimaryKey("pk7"); - utx.begin(); - try { - getHome().remove("pk7"); - } - catch (Exception e) { - utx.rollback(); - fail(e.getMessage()); - } - try { - // Here we verify we cannot acces to the removed bean - // (the transaction is not yet rolled back") - getHome().findByPrimaryKey("pk7"); - fail("should not exist anymore at this point"); - } catch(FinderException e) { - } finally { - utx.rollback(); - } - Simple entity3 = getHome().findByTestName("pk7"); - assertEquals(70, entity3.getInfo()); - } - - /** - * testFinderEnum verify a finder method that return a Enumeration - * pre condition there are 3 elements with num =4 - * all of them have a field info equals to 10 - */ - public void testFinderEnum() throws Exception { - Simple entity = null; - Enumeration listOfEntity = getHome().findInfoForNum(4); - int nb = 0; - while (listOfEntity.hasMoreElements()) { - entity = (Simple)javax.rmi.PortableRemoteObject.narrow(listOfEntity.nextElement(), Simple.class); - assertEquals(10, entity.getInfo()); - nb++; - } - assertEquals(3, nb); - } - - /** - * Verify that we can create an entity and retrieve it by - * a finder method inside the same transaction - */ - public void testCreateFindUserTx() throws Exception { - utx.begin(); - try { - Simple e1 = getHome().create("pk120", 32, 7); - Simple e2 = getHome().findByTestName("pk120"); - assertTrue(e2.isIdentical(e1)); - } - catch (Exception e) { - fail(e.getMessage()); - } finally { - utx.rollback(); - } - } - - - /** - * testFinderCollection verify a finder method that return a Collection - * pre condition there are 4 elements with c_numtest =4 (pk4,...,pk7) - * findInCollection returns all the beans where c_numtest = 4 - * this test is equivalent to testcase2 in SimpleTest in finder_col - */ - public void testFinderCollection() throws Exception { - Simple entity = null; - Collection cListEntity = getHome().findInCollection(); - int nb = 0; - Iterator icListEntity = cListEntity.iterator(); - while(icListEntity.hasNext()) { - entity = (Simple) javax.rmi.PortableRemoteObject.narrow(icListEntity.next(), Simple.class); - nb++; - } - assertEquals(4, nb); - } - - /** - * Test that the removed is no more seen after the rollback - */ - public void testFindAfterRBR() throws Exception { - getHome().findByPrimaryKey("pk8"); - utx.begin(); - getHome().remove("pk8"); - utx.rollback(); - getHome().findByTestName("pk8"); - } - - /** - * test loop on finder method (findByPrimaryKey) - */ - public void testLoopFindByPK() throws Exception { - for (int i = 0; i < 20; i++) { - getHome().findByPrimaryKey("pk9"); - } - } - - /** - * test loop on other finder method - */ - public void testLoopFinder() throws Exception { - for (int i = 0; i < 20; i++) { - getHome().findByTestName("pk10"); - } - } - - /** - * test loopback on non reentrant bean in same tx - */ - public void testLoopBackTx() throws Exception { - Simple s = getHome().findByPrimaryKey("pk9"); - assertTrue(s.loopBackTx()); - } - - /** - * test that we can access the instance twice in the same transaction, - * even if the bean is non reentrant. - */ - public void testAccessTwiceTx() throws Exception { - Simple s = getHome().findByPrimaryKey("pk9"); - utx.begin(); - try { - s.getNumTest(); - s.getNumTest(); - } finally { - utx.commit(); - } - } - - /** - * test that we can access the instance twice in the same transaction, - * even if the bean is non reentrant. - */ - public void testFindAccessTx() throws Exception { - utx.begin(); - try { - Simple s = getHome().findByPrimaryKey("pk9"); - s.getNumTest(); - } finally { - utx.commit(); - } - } - - /** - * test loopback on non reentrant bean outside tx - * Invalid this test because loopback with no transaction context - * is not clearly specified in EJB spec. - */ - public void _testLoopBack() throws Exception { - Simple s = getHome().findByPrimaryKey("pk10"); - assertTrue(s.loopBack()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_omb.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_omb.java deleted file mode 100644 index 88cfd09d7e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_omb.java +++ /dev/null @@ -1,1281 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.relation.omb.AHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.ARemote; -import org.objectweb.jonas.jtests.beans.relation.omb.BHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.BRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.Front; -import org.objectweb.jonas.jtests.beans.relation.omb.FrontHome; - -/** - * For testing one-to-many bidirectional relationships - * @author Ph. Durieux - */ -public abstract class A_omb extends A_Cmp2Util { - - public abstract AHomeRemote getAHome(); - public abstract BHomeRemote getBHome(); - protected static String BEAN_HOME_FRONT = "relation_omb_FrontHome"; - protected static FrontHome fhome = null; - - - static Hashtable a2b = new Hashtable(); - static String[][] b2a = { - {"bs0", null}, - {"bs1_1", "as1"}, - {"bs2_1", "as2"}, - {"bs2_2", "as2"}, - {"bs2_3", "as2"}, - {"bs3", null}, - {"b0", null}, - {"b1_1", "a1"}, - {"b1_2", "a1"}, - {"b1_3", "a1"}, - {"b2_1", "a2"}, - {"b2_2", "a2"}, - {"b2_3", "a2"}, - {"b3_1", "a3"}}; - - static { - a2b.put("as0", new String[]{}); - a2b.put("as1", new String[]{"bs1_1"}); - a2b.put("as2", new String[]{"bs2_1", "bs2_2", "bs2_3"}); - a2b.put("a0", new String[]{}); - a2b.put("a1", new String[]{"b1_1", "b1_2", "b1_3"}); - a2b.put("a2", new String[]{"b2_1", "b2_2", "b2_3"}); - a2b.put("a3", new String[]{"b3_1"}); - a2b.put("ax0", new String[]{}); - - // Translate the String[] to a Collection of String - for (Iterator it = a2b.keySet().iterator(); it.hasNext();) { - String aname = (String) (it.next()); - String[] tb = (String[]) a2b.get(aname); - ArrayList col = new ArrayList(tb.length); - for (int i = 0; i < tb.length; i++) { - col.add(tb[i]); - } - a2b.put(aname, col); - } - } - - - public A_omb(String name) { - super(name); - } - - protected boolean isInit = false; - - protected void setUp() { - super.setUp(); - boolean ok = false; - int nbtry = 0; - while (!ok && nbtry < 3) { - if (!isInit) { - // load bean if not loaded yet - useBeans("omb", false); - try { - fhome = (FrontHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_FRONT), - FrontHome.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - // check if tables have been initialized - try { - getAHome().findByPrimaryKey("a0"); - } catch (Exception e) { - try { - utx.begin(); - getBHome().create("bs0"); - getBHome().create("bs1_1"); - getBHome().create("bs2_1"); - getBHome().create("bs2_2"); - getBHome().create("bs2_3"); - getBHome().create("bs3"); - getBHome().create("b0"); - getBHome().create("b1_1"); - getBHome().create("b1_2"); - getBHome().create("b1_3"); - getBHome().create("b2_1"); - getBHome().create("b2_2"); - getBHome().create("b2_3"); - getBHome().create("b3_1"); - getAHome().create("as0"); - getAHome().create("as1").assignB((Collection) a2b.get("as1")); - getAHome().create("as2").assignB((Collection) a2b.get("as2")); - getAHome().create("a0"); - getAHome().create("a1").assignB((Collection) a2b.get("a1")); - getAHome().create("a2").assignB((Collection) a2b.get("a2")); - getAHome().create("a3").assignB((Collection) a2b.get("a3")); - getAHome().create("ax0"); - } catch (Exception i) { - fail("InitialState creation problem: " + i); - } finally { - try { - utx.commit(); - } catch (Exception ii) { - } - } - } - isInit = true; - } - // Check that all is OK. Sometimes, a test has failed and has corrupted - // the bean state in the database. We must unload and reload the bean then. - nbtry++; - try { - if (initStateOK()) { - ok = true; - } - } catch (Exception e) { - } - if (!ok) { - isInit = false; - unloadBeans("omb"); - } - } - } - - /** - * Check that we are in the same state as after the tables creation for thoses beans A and B - * (ie if it is the initial state) - */ - boolean initStateOK() throws Exception { - boolean isOk = true; - msgerror = new StringBuffer(); - // Check the relations A => B - for (Enumeration ea = a2b.keys(); ea.hasMoreElements();) { - String aname = (String) (ea.nextElement()); - ARemote a = getAHome().findByPrimaryKey(aname); - Collection colActual = a.retrieveB(); - Collection colExpected = (Collection) (a2b.get(aname)); - if (!isCollectionEqual(colExpected, colActual)) { - isOk = false; - msgerror = msgerror.append("\nWrong relation for " + aname - + " (expected:" + colExpected - + ", found:" + colActual + ")"); - } - } - // Check the relation B => A - for (int i = 0; i < b2a.length; i++) { - BRemote b = getBHome().findByPrimaryKey(b2a[i][0]); - String pkb = b.getId(); - String pka = b.retrieveA(); - if (b2a[i][1] == null && pka != null - || b2a[i][1] != null && !b2a[i][1].equals(pka)) { - isOk = false; - msgerror = msgerror.append("\nWrong relation for " + pkb - + " (expected:" + b2a[i][1] - + ", found:" + pka + ")"); - } - - } - return isOk; - } - - - /** - * Check that the bean 'as0' has no relation. - */ - public void tBasicGetEmptyA2B(int tx) throws Exception { - Collection c = null; - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as0"); - if (tx == TX_CONT) { - c = a.retrieveBInNewTx(); - } else { - c = a.retrieveB(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - checkIsInitialState(); - } - - public void testBasicGetEmptyA2BTxNo() throws Exception { - tBasicGetEmptyA2B(TX_NO); - } - public void testBasicGetEmptyA2BTxCall() throws Exception { - tBasicGetEmptyA2B(TX_CALL); - } - public void testBasicGetEmptyA2BTxCont() throws Exception { - tBasicGetEmptyA2B(TX_CONT); - } - public void testBasicGetEmptyA2BTxRb() throws Exception { - tBasicGetEmptyA2B(TX_RB); - } - - /** - * Check that the bean 'bs0' has no relation. - */ - public void tBasicGetEmptyB2A(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - String pka = null; - BRemote b = getBHome().findByPrimaryKey("bs0"); - if (tx == TX_CONT) { - pka = b.retrieveAInNewTx(); - } else { - pka = b.retrieveA(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - checkIsInitialState(); - } - public void testBasicGetEmptyB2ANoTx() throws Exception { - tBasicGetEmptyB2A(TX_NO); - } - public void testBasicGetEmptyB2ATxCall() throws Exception { - tBasicGetEmptyB2A(TX_CALL); - } - public void testBasicGetEmptyB2ATxCont() throws Exception { - tBasicGetEmptyB2A(TX_CONT); - } - public void testBasicGetEmptyB2ATxRb() throws Exception { - tBasicGetEmptyB2A(TX_RB); - } - - - /** - * Check that the bean 'as1' has only one relation with 'bs1_1'. - */ - public void tBasicGetOneA2B(int tx) throws Exception { - - Collection c = null; - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as1"); - if (tx == TX_CONT) { - c = a.retrieveBInNewTx(); - } else { - c = a.retrieveB(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - assertEquals("Relations size of: ", 1, c.size()); - String s = "bs1_1"; - assertTrue("Relation missing " + s + ": ", c.contains(s)); - checkIsInitialState(); - } - - public void testBasicGetOneA2BTxNo() throws Exception { - tBasicGetOneA2B(TX_NO); - } - - public void testBasicGetOneA2BTxCall() throws Exception { - tBasicGetOneA2B(TX_CALL); - } - - public void testBasicGetOneA2BTxCont() throws Exception { - tBasicGetOneA2B(TX_CONT); - } - - public void testBasicGetOneA2BTxRb() throws Exception { - tBasicGetOneA2B(TX_RB); - } - - - /** - * Check that the bean 'as2' has many relations with 'bs2_1', 'bs2_2', 'bs2_3'. - */ - public void tBasicGetManyA2B(int tx) throws Exception { - - Collection c = null; - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as2"); - if (tx == TX_CONT) { - c = a.retrieveBInNewTx(); - } else { - c = a.retrieveB(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - assertEquals("Relations size of: ", 3, c.size()); - String s = "bs2_1"; - assertTrue("Relation missing " + s + ": ", c.contains(s)); - s = "bs2_2"; - assertTrue("Relation missing " + s + ": ", c.contains(s)); - s = "bs2_3"; - assertTrue("Relation missing " + s + ": ", c.contains(s)); - checkIsInitialState(); - } - - public void testBasicGetManyA2BTxNo() throws Exception { - tBasicGetManyA2B(TX_NO); - } - - public void testBasicGetManyA2BTxCall() throws Exception { - tBasicGetManyA2B(TX_CALL); - } - - public void testBasicGetManyA2BTxCont() throws Exception { - tBasicGetManyA2B(TX_CONT); - } - - public void testBasicGetManyA2BTxRb() throws Exception { - tBasicGetManyA2B(TX_RB); - } - - - /** - * Set a A2B relation to empty. - * Before: as1 <-> bs1_1 - * After: as1 bs1_1 - * Check also the assignement rules for relationships. - */ - public void tCohSetEmptyA2B(int tx) throws Exception { - ArrayList ce = new ArrayList(); - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as1"); - if (tx == TX_CONT) { - a.assignBInNewTx(ce); - } else { - a.assignB(ce); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - assertEquals("Relations size for as1 ", 0, ca.size()); - BRemote b = getBHome().findByPrimaryKey("bs1_1"); - assertNull("Bad relation for bs1_1", b.retrieveA()); - // undo - a.addInB("bs1_1"); - } - checkIsInitialState(); - } - - public void testCohSetEmptyA2BTxNo() throws Exception { - tCohSetEmptyA2B(TX_NO); - } - - public void testCohSetEmptyA2BTxCall() throws Exception { - tCohSetEmptyA2B(TX_CALL); - } - - public void testCohSetEmptyA2BTxCont() throws Exception { - tCohSetEmptyA2B(TX_CONT); - } - - public void testCohSetEmptyA2BTxRb() throws Exception { - tCohSetEmptyA2B(TX_RB); - } - - - /** - * Set a A2B relation to empty by clearing the collection. - * Before: as1 <-> bs1_1 - * After: as1 bs1_1 - * Check also the assignement rules for relationships. - */ - public void tCohClearA2B(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as1"); - if (tx == TX_CONT) { - a.clearBInNewTx(); - } else { - a.clearB(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection c = a.retrieveB(); - BRemote b = getBHome().findByPrimaryKey("bs1_1"); - String r = b.retrieveA(); - assertEquals("Expected empty collection for as1 relation: ", 0, c.size()); - assertNull("Expected no relation for bs1_1", r); - // undo - b.assignA("as1"); - } - checkIsInitialState(); - } - - public void testCohClearA2BTxNo() throws Exception { - tCohClearA2B(TX_NO); - } - - public void testCohClearA2BTxCall() throws Exception { - tCohClearA2B(TX_CALL); - } - - public void testCohClearA2BTxCont() throws Exception { - tCohClearA2B(TX_CONT); - } - - public void testCohClearA2BTxRb() throws Exception { - tCohClearA2B(TX_RB); - } - - - /** - * Set an empty A2B relation with 1 element. - * This added element was'nt already in an other relation. - * Before: as0 b0 - * After: as0 <-> b0 - * Check also the assignement rules for relationships. - */ - public void tCohSetOneA2B(int tx) throws Exception { - ArrayList ce = new ArrayList(); - ce.add("b0"); - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as0"); - if (tx == TX_CONT) { - a.assignBInNewTx(ce); - } else { - a.assignB(ce); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - BRemote b = getBHome().findByPrimaryKey("b0"); - String r = b.retrieveA(); - assertTrue("Bad relations for as0 (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - assertEquals("Bad relation for b0: ", "as0", r); - // undo - a.assignB(new ArrayList()); - } - checkIsInitialState(); - } - - public void testCohSetOneA2BTxNo() throws Exception { - tCohSetOneA2B(TX_NO); - } - - public void testCohSetOneA2BTxCall() throws Exception { - tCohSetOneA2B(TX_CALL); - } - - public void testCohSetOneA2BTxCont() throws Exception { - tCohSetOneA2B(TX_CONT); - } - - public void testCohSetOneA2BTxRb() throws Exception { - tCohSetOneA2B(TX_RB); - } - - - /** - * Set a null B2A relation with 1 element. - * This element was'nt already in an other relation. - * Before: b0 as0 - * After: b0 <-> as0 - * Check also the assignement rules for relationships. - */ - public void tCohSet1B2A(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - BRemote b = getBHome().findByPrimaryKey("b0"); - if (tx == TX_CONT) { - b.assignAInNewTx("as0"); - } else { - b.assignA("as0"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - String r = b.retrieveA(); - ARemote a = getAHome().findByPrimaryKey("as0"); - Collection ca = a.retrieveB(); - ArrayList ce = new ArrayList(); - ce.add("b0"); - if (tx != TX_RB) { - assertEquals("Bad relation for b0: ", "as0", r); - assertTrue("Bad relations for as0 (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - // undo - b.assignA(null); - } - checkIsInitialState(); - } - - public void testCohSet1B2ATxNo() throws Exception { - tCohSet1B2A(TX_NO); - } - - public void testCohSet1B2ATxCall() throws Exception { - tCohSet1B2A(TX_CALL); - } - - public void testCohSet1B2ATxCont() throws Exception { - tCohSet1B2A(TX_CONT); - } - - public void testCohSet1B2ATxRb() throws Exception { - tCohSet1B2A(TX_RB); - } - - - - /** - * Add an element to a empty relation. - * Same as tCohSetOneA2B except that we add the element in the collection - * instead of we set directly the collection. - * Before: as0 bs0 - * After: as0 <-> bs0 - * Check also the assignement rules for relationships. - */ - public void tCohAddOneA2B(int tx) throws Exception { - ArrayList ce = new ArrayList(); - ce.add("bs0"); - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as0"); - if (tx == TX_CONT) { - a.addInBInNewTx("bs0"); - } else { - a.addInB("bs0"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - BRemote b = getBHome().findByPrimaryKey("bs0"); - String r = b.retrieveA(); - assertTrue("Bad relations for as0 (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - assertEquals("Bad relation for bs0", "as0", r); - // undo - a.assignB(new ArrayList()); - } - checkIsInitialState(); - } - - public void testCohAddOneA2BTxNo() throws Exception { - tCohAddOneA2B(TX_NO); - } - - public void testCohAddOneA2BTxCall() throws Exception { - tCohAddOneA2B(TX_CALL); - } - - public void testCohAddOneA2BTxCont() throws Exception { - tCohAddOneA2B(TX_CONT); - } - - public void testCohAddOneA2BTxRb() throws Exception { - tCohAddOneA2B(TX_RB); - } - - - /** - * Re-Set a relation with N element. - * Before: as1 <-> bs1_1 - * bs0 - * bs3 - * After: bs1_1 - * as1 <-> bs0 - * as1 <-> bs3 - */ - public void tCohSetMultiA2B(int tx) throws Exception { - ArrayList ce = new ArrayList(2); - ce.add("bs0"); - ce.add("bs3"); - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("as1"); - Collection co = a.retrieveB(); - if (tx == TX_CONT) { - a.assignBInNewTx(ce); - } else { - a.assignB(ce); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - BRemote bs1_1 = getBHome().findByPrimaryKey("bs1_1"); - BRemote bs0 = getBHome().findByPrimaryKey("bs0"); - BRemote bs3 = getBHome().findByPrimaryKey("bs3"); - assertTrue("Bad relations for as1 (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - assertNull("Not null relation for bs1_1", bs1_1.retrieveA()); - assertEquals("Bad relation for bs0: ", "as1", bs0.retrieveA()); - assertEquals("Bad relation for bs3: ", "as1", bs3.retrieveA()); - // undo - a.assignB(co); - } - checkIsInitialState(); - } - - public void testCohSetMultiA2BTxNo() throws Exception { - tCohSetMultiA2B(TX_NO); - } - - public void testCohSetMultiA2BTxCall() throws Exception { - tCohSetMultiA2B(TX_CALL); - } - - public void testCohSetMultiA2BTxCont() throws Exception { - tCohSetMultiA2B(TX_CONT); - } - - public void testCohSetMultiA2BTxRb() throws Exception { - tCohSetMultiA2B(TX_RB); - } - - - /** - * Set a B2A relation with 1 element. - * This element wasn't already in an other relation. - * Before: bs1_1 <-> as1 - * as0 - * Change: bs1_1.assignA(as0); - * After: bs1_1 <-> as0 - * as1 - * Check also the assignement rules for relationships. - * - */ - public void tCohSet2B2A(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - BRemote b = getBHome().findByPrimaryKey("bs1_1"); - if (tx == TX_CONT) { - b.assignAInNewTx("as0"); - } else { - b.assignA("as0"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - String r = b.retrieveA(); - assertEquals("Bad relation for bs1_1: ", "as0", r); - ARemote as0 = getAHome().findByPrimaryKey("as0"); - Collection cas0 = as0.retrieveB(); - ARemote as1 = getAHome().findByPrimaryKey("as1"); - Collection cas1 = as1.retrieveB(); - ArrayList ce = new ArrayList(); - ce.add("bs1_1"); - assertTrue("Bad relations for as0 (required:" + ce + ", found:" + cas0 - + ")", isCollectionEqual(ce, cas0)); - ce = new ArrayList(); - assertTrue("Bad relations for as1 (required:" + ce + ", found:" + cas1 - + ")", isCollectionEqual(ce, cas1)); - // undo - b.assignA("as1"); - } - checkIsInitialState(); - } - - public void testCohSet2B2ATxNo() throws Exception { - tCohSet2B2A(TX_NO); - } - - public void testCohSet2B2ATxCall() throws Exception { - tCohSet2B2A(TX_CALL); - } - - public void testCohSet2B2ATxCont() throws Exception { - tCohSet2B2A(TX_CONT); - } - - public void testCohSet2B2ATxRb() throws Exception { - tCohSet2B2A(TX_RB); - } - - - /** - * Set a B2A relation with 1 element. - * This element was already in an other relation. - * Before: bs1_1 <-> as1 - * b3_1 <-> a3 - * Change: bs1_1.assignA(b3_1.retrieveA()) - * After: bs1_1 <-> a3 - * b3_1 <-> - * as1 - * Check also the assignement rules for relationships. - * - * See Spec chapter 10.3.7.3, change example: b2m.setA(b1n.getA()) - */ - public void tCohSet3B2A(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - BRemote bs1_1 = getBHome().findByPrimaryKey("bs1_1"); - if (tx == TX_CONT) { - bs1_1.assignAInNewTx("a3"); - } else { - bs1_1.assignA("a3"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - String rbs1_1 = bs1_1.retrieveA(); - ARemote as1 = getAHome().findByPrimaryKey("as1"); - Collection cas1 = as1.retrieveB(); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - Collection ca3 = a3.retrieveB(); - assertEquals("Bad relation for bs1_1: ", "a3", rbs1_1); - ArrayList ce = new ArrayList(); - ce.add("bs1_1"); - ce.add("b3_1"); - assertTrue("Bad relations for a3 (required:" + ce + ", found:" + ca3 - + ")", isCollectionEqual(ce, ca3)); - ce = new ArrayList(); - assertTrue("Bad relations for as1 (required:" + ce + ", found:" + cas1 - + ")", isCollectionEqual(ce, cas1)); - // undo - bs1_1.assignA("as1"); - } - checkIsInitialState(); - } - - public void testCohSet3B2ATxNo() throws Exception { - tCohSet3B2A(TX_NO); - } - - public void testCohSet3B2ATxCall() throws Exception { - tCohSet3B2A(TX_CALL); - } - - public void testCohSet3B2ATxCont() throws Exception { - tCohSet3B2A(TX_CONT); - } - - public void testCohSet3B2ATxRb() throws Exception { - tCohSet3B2A(TX_RB); - } - - - /** - * Remove an element in a relation. - * Before: a3 <-> b3_1 - * Change: a3.retrieveB().remove(b3_1) - * After: a3 b3_1 - * See Spec chapter 10.3.7.3, change example: a1.getB().remove(b1n) - */ - public void tCohRemoveInRelA2B(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a3"); - if (tx == TX_CONT) { - a.removeFromBInNewTx("b3_1"); - } else { - a.removeFromB("b3_1"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - BRemote b = getBHome().findByPrimaryKey("b3_1"); - String r = b.retrieveA(); - ArrayList ce = new ArrayList(); - assertTrue("Bad relations for a3: (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - assertNull("Bad not null relation for b3_1", r); - // undo - a.addInB("b3_1"); - } - // check to initial state - checkIsInitialState(); - - } - - public void testCohRemoveInRelA2BTxNo() throws Exception { - tCohRemoveInRelA2B(TX_NO); - } - - public void testCohRemoveInRelA2BTxCall() throws Exception { - tCohRemoveInRelA2B(TX_CALL); - } - - public void testCohRemoveInRelA2BTxCont() throws Exception { - tCohRemoveInRelA2B(TX_CONT); - } - - public void testCohRemoveInRelA2BTxRb() throws Exception { - tCohRemoveInRelA2B(TX_RB); - } - - - /** - * Remove a bean B which is in a relation. - * Before: a3 <-> b3_1 - * change: B.remove(b3_1) - * After: a3 - * - */ - public void tCohRemoveB(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - getBHome().remove("b3_1"); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - ARemote a = getAHome().findByPrimaryKey("a3"); - Collection ca = a.retrieveB(); - assertEquals("Wrong relations size for a3: (expected: 0 found:" - + ca.size(), 0, ca.size()); - // undo - getBHome().create("b3_1"); - a.addInBInNewTx("b3_1"); - } - checkIsInitialState(); - } - - public void testCohRemoveBTxNo() throws Exception { - tCohRemoveB(TX_NO); - } - - public void testCohRemoveBTxCall() throws Exception { - tCohRemoveB(TX_CALL); - } - - public void testCohRemoveBTxRb() throws Exception { - tCohRemoveB(TX_RB); - } - - - /** - * Remove a bean B which is in a relation. - * Same as tCohRemoveB except that the called remove method is on the bean - * instead of the home. - * Before: a3 <-> b3_1 - * change: B.remove(b3_1) - * After: a3 - * - */ - public void tCohBeanRemoveB(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - BRemote b = getBHome().findByPrimaryKey("b3_1"); - b.remove(); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - ARemote a = getAHome().findByPrimaryKey("a3"); - Collection ca = a.retrieveB(); - assertEquals("Wrong relations size for a3: (expected: 0 found:" - + ca.size(), 0, ca.size()); - // undo - getBHome().create("b3_1"); - a.addInBInNewTx("b3_1"); - } - checkIsInitialState(); - } - - public void testCohBeanRemoveBTxNo() throws Exception { - tCohBeanRemoveB(TX_NO); - } - - public void testCohBeanRemoveBTxCall() throws Exception { - tCohBeanRemoveB(TX_CALL); - } - - public void testCohBeanRemoveBTxRb() throws Exception { - tCohBeanRemoveB(TX_RB); - } - - - - /** - * Set a empty relation A2B with 1 element. - * This added element was already in a other relation. - * Before: a0 - * a3 <-> b3_1 - * Change: a0.assignB({b3_1}) - * After: a0 <-> b3_1 - * a3 - */ - public void tCohSetOne2A2B(int tx) throws Exception { - ArrayList ce = new ArrayList(); - ce.add("b3_1"); - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a0"); - if (tx == TX_CONT) { - a.assignBInNewTx(ce); - } else { - a.assignB(ce); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca = a.retrieveB(); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - Collection ca3 = a3.retrieveB(); - BRemote b = getBHome().findByPrimaryKey("b3_1"); - String r = b.retrieveA(); - assertTrue("Wrong relations a0 (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - assertTrue("Wrong relations for b3_1" + ": found:" + ca3 , - !ca3.contains("b3_1")); - assertEquals("Bad relation for b3_1: ", "a0", r); - // undo - a.assignB(new ArrayList()); - a3.addInB("b3_1"); - } - checkIsInitialState(); - } - - public void testCohSetOne2A2BTxNo() throws Exception { - tCohSetOne2A2B(TX_NO); - } - - public void testCohSetOne2A2BTxCall() throws Exception { - tCohSetOne2A2B(TX_CALL); - } - - public void testCohSetOne2A2BTxCont() throws Exception { - tCohSetOne2A2B(TX_CONT); - } - - public void testCohSetOne2A2BTxRb() throws Exception { - tCohSetOne2A2B(TX_RB); - } - - - /** - * Add an element to a relation A2B already multiple. - * The element was already in a relation. - * Check also the assignement rules for relationships. - * Before: a1 <-> b1_1 - * <-> b1_2 - * <-> b1_3 - * a3 <-> b3_1 - * Change: a1.addInB(b3_1) - * After: a1 <-> b1_1 - * <-> b1_2 - * <-> b1_3 - * <-> b3_1 - * a3 - * - * See Spec chapter 10.3.7.3, change example: a1.getB().add(b2m) - * - */ - public void tCohAddOneInMultiA2B(int tx) throws Exception { - - ArrayList ce = new ArrayList(); - ce.add("b1_1"); - ce.add("b1_2"); - ce.add("b1_3"); - String bAdded = "b3_1"; - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a1"); - if (tx == TX_CONT) { - a.addInBInNewTx(bAdded); - } else { - a.addInB(bAdded); - } - ce.add(bAdded); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca1 = a.retrieveB(); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - Collection ca3 = a3.retrieveB(); - assertTrue("Bad relations for a1 (required:" + ce + ", found:" + ca1 + ")", - isCollectionEqual(ce, ca1)); - ce = new ArrayList(); - assertTrue("Bad relations for a3 (required:" + ce + ", found:" + ca3 + ")", - isCollectionEqual(ce, ca3)); - BRemote b = getBHome().findByPrimaryKey(bAdded); - assertEquals("Bad relation for b3_1: ", "a1", b.retrieveA()); - // undo - a3.addInB(bAdded); - } - - checkIsInitialState(); - } - - public void testCohAddOneInMultiA2BTxNo() throws Exception { - tCohAddOneInMultiA2B(TX_NO); - } - - public void testCohAddOneInMultiA2BTxCall() throws Exception { - tCohAddOneInMultiA2B(TX_CALL); - } - - public void testCohAddOneInMultiA2BTxCont() throws Exception { - tCohAddOneInMultiA2B(TX_CONT); - } - - public void testCohAddOneInMultiA2BTxRb() throws Exception { - tCohAddOneInMultiA2B(TX_RB); - } - - - /* - * Set a relation to multiple. - * All of element was already in an other relation. - * Check also the assignement rules for relationships. - * Before: a1 <-> b1_1 - * <-> b1_2 - * <-> b1_3 - * a2 <-> b2_1 - * <-> b2_2 - * <-> b2_3 - * Change: a1.assignB(a2.retrieveB()) - * After: a1 <-> b2_1 - * <-> b2_2 - * <-> b2_3 - * a2 - * b1_1 - * b1_2 - * b1_3 - * - * Spec chapter 10.3.7.3, change example: a1.setB(a2.getB()) - * - */ - public void tCohSetMultiBisA2B(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - Collection co1 = a1.retrieveB(); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - Collection co2 = a2.retrieveB(); - if (tx == TX_CONT) { - a1.assignBInNewTx(co2); - } else { - a1.assignB(co2); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // checking - Collection ca1 = a1.retrieveB(); - assertTrue("Wrong relations for a1 (required:" + co2 + ", found:" + ca1 + ")", isCollectionEqual(co2, ca1)); - Collection ca2 = a2.retrieveB(); - assertEquals("Wrong relations size for a2: ", 0, ca2.size()); - BRemote b; - b = getBHome().findByPrimaryKey("b1_1"); - assertNull("Wrong not null relation for b1_1: ", b.retrieveA()); - b = getBHome().findByPrimaryKey("b1_2"); - assertNull("Wrong not null relation for b1_2: ", b.retrieveA()); - b = getBHome().findByPrimaryKey("b1_3"); - assertNull("Wrong not null relation for b1_3: ", b.retrieveA()); - b = getBHome().findByPrimaryKey("b2_1"); - assertEquals("Wrong relation for b2_1: ", "a1", b.retrieveA()); - b = getBHome().findByPrimaryKey("b2_2"); - assertEquals("Wrong relation for b2_2: ", "a1", b.retrieveA()); - b = getBHome().findByPrimaryKey("b2_3"); - assertEquals("Wrong relation for b2_3: ", "a1", b.retrieveA()); - // Undo - a1.assignB(co1); - a2.assignB(co2); - } - checkIsInitialState(); - } - - public void testCohSetMultiBisA2BTxNo() throws Exception { - tCohSetMultiBisA2B(TX_NO); - } - - public void testCohSetMultiBisA2BTxCall() throws Exception { - tCohSetMultiBisA2B(TX_CALL); - } - - public void testCohSetMultiBisA2BTxCont() throws Exception { - tCohSetMultiBisA2B(TX_CONT); - } - - public void testCohSetMultiBisA2BTxRb() throws Exception { - tCohSetMultiBisA2B(TX_RB); - } - - /** - * This test check it isn't allowed to reset the pk - * and that the container throw the java.lang.IllegalStateException. - * See spec 2.0, chapter 10.3.5, page 134. - */ - public void testResetPkForbidden() throws Exception { - ARemote a = getAHome().findByPrimaryKey("ax0"); - assertTrue("IllegalStateException not thrown when a pk value is reset", - a.testResetPkForbidden("aY0")); - } - - /** - * Test that we can create a bean and find it in the same transaction. - */ - public void testCreateFindTx() throws Exception { - utx.begin(); - ARemote project = getAHome().create("project"); - BRemote role = getBHome().create("role"); - project.addInB("role"); - getBHome().findByName("role", "project"); - utx.rollback(); - checkIsInitialState(); - } - - /** - * Test that we can create a bean and find it in the same transaction, - * using a method in A bean. - */ - public void testCreateFindTx2() throws Exception { - utx.begin(); - ARemote project = getAHome().create("project"); - project.addNewB("role"); - getBHome().findByName("role", "project"); - utx.rollback(); - checkIsInitialState(); - } - - /** - * Reproduce the bug #300156: Error on creating Array from cmr-collection - */ - public void testNewArrayListOnCmr() throws Exception { - ArrayList ce = new ArrayList(); - ce.add("bs2_1"); - ce.add("bs2_2"); - ce.add("bs2_3"); - Collection ca = null; - ARemote as2 = getAHome().findByPrimaryKey("as2"); - // Test of retrieveB() - ca = as2.retrieveB(); - assertTrue("Bad relations for as2.retrieveB() (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - // Test of retrieveBisB() - ca = as2.retrieveBisB(); - assertTrue("Bad relations for as2.retrieveBisB() (required:" + ce + ", found:" + ca - + ")", isCollectionEqual(ce, ca)); - } - - /** - * Ensure the javax.ejb.EJBException is thrown when trying - * to invoke an accessor method on a deleted entitybean object - */ - public void testRemove1() throws Exception { - Front fb = fhome.create(); - fb.testRemove1(); - - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_oob.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_oob.java deleted file mode 100644 index 5c19283d06..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/A_oob.java +++ /dev/null @@ -1,830 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import javax.ejb.ObjectNotFoundException; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.objectweb.jonas.jtests.beans.relation.oob.AHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.ARemote; -import org.objectweb.jonas.jtests.beans.relation.oob.BHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.BRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.Front; -import org.objectweb.jonas.jtests.beans.relation.oob.FrontHome; - -/** - * This is an advanced test suite for home interface on entity bean CMP2. - * Beans used: oob - * @author Ph. Durieux - */ -public abstract class A_oob extends A_Cmp2Util { - - public abstract AHomeRemote getAHome(); - public abstract BHomeRemote getBHome(); - protected static String BEAN_HOME_FRONT = "relation_oob_FrontHome"; - protected static FrontHome fhome = null; - - - public A_oob(String name) { - super(name); - } - - protected boolean isInit = false; - - protected void setUp() { - super.setUp(); - boolean ok = false; - int nbtry = 0; - while (!ok && nbtry < 3) { - if (!isInit) { - // load bean if not loaded yet - useBeans("oob", false); - try { - fhome = (FrontHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_FRONT), - FrontHome.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - // check if tables have been initialized - try { - debug("find a2"); - getAHome().findByPrimaryKey("a2"); - } catch (Exception e) { - // Make the initialization needed for the tests - try { - utx.begin(); - debug("Make initialization"); - ARemote a1 = getAHome().create("a1"); - ARemote a2 = getAHome().create("a2"); - getAHome().create("a3"); - getBHome().create("b0"); - getBHome().create("b1"); - getBHome().create("b2"); - getBHome().create("b3"); - a1.assignB("b1"); - a2.assignB("b2"); - } catch (Exception i) { - fail("InitialState creation problem: " + i); - } finally { - try { - utx.commit(); - } catch (Exception ii) { - } - } - } - isInit = true; - } - // Check that all is OK. Sometimes, a test has failed and has corrupted - // the bean state in the database. We must unload and reload the bean then. - nbtry++; - try { - if (initStateOK()) { - ok = true; - } - } catch (Exception e) { - } - if (!ok) { - debug("Unload oob"); - isInit = false; - unloadBeans("oob"); - } - } - } - - /* - * Check that we are in the same state as after the tables creation for thoses beans A and B - * (ie if it is the initial state) - */ - boolean initStateOK() throws Exception { - boolean isOk = true; - - msgerror = new StringBuffer(); - - debug("Checking init state"); - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - BRemote b2 = getBHome().findByPrimaryKey("b2"); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - String idB1 = a1.retrieveB(); - String idB2 = a2.retrieveB(); - String idB3 = a3.retrieveB(); - String idA1 = b1.retrieveA(); - String idA2 = b2.retrieveA(); - String idA3 = b3.retrieveA(); - - if (idB1 != null && !idB1.equals("b1")) { - isOk = false; - msgerror.append("\nWrong relation for a1->b1" - + "(expected: A1.retrieveB()='b1'" - + ", found:" + idB1 + ")"); - } - if (idB2 != null && !idB2.equals("b2")) { - isOk = false; - msgerror.append("\nWrong relation for a2->b2" - + "(expected: A2.retrieveB()='b2'" - + ", found:" + idB2 + ")"); - } - if (idA1 != null && !idA1.equals("a1")) { - isOk = false; - msgerror.append("\nWrong relation for b1->a1" - + "(expected: B1.retrieveA()='a1'" - + ", found:" + idA1 + ")"); - } - if (idA2 != null && !idA2.equals("a2")) { - isOk = false; - msgerror.append("\nWrong relation for b2->a2" - + "(expected: B2.retrieveA()='a2'" - + ", found:" + idA2 + ")"); - } - if (idA3 != null) { - isOk = false; - msgerror.append("\nWrong relation for a3->b3" - + "(expected: A3.retrieveB()=null" - + ", found:" + idA3 + ")"); - } - if (idB3 != null) { - isOk = false; - msgerror.append("\nWrong relation for b3->a3" - + "(expected: B3.retrieveA()=null" - + ", found:" + idB3 + ")"); - } - if (!isOk) { - debug(msgerror.toString()); - } - return isOk; - } - - - /** - * Check that the bean 'a3' has no relation. - */ - public void _testBasicGetEmpty(int tx) throws Exception { - String idB = null; - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a3"); - if (tx == TX_CONT) { - idB = a.retrieveBInNewTx(); - } else { - idB = a.retrieveB(); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - if (idB != null) { - fail("a3->b not empty"); - } - } - - public void testBasicGetEmptyTxNo() throws Exception { - _testBasicGetEmpty(TX_NO); - } - public void testBasicGetEmptyTxCall() throws Exception { - _testBasicGetEmpty(TX_CALL); - } - public void testBasicGetEmptyTxCont() throws Exception { - _testBasicGetEmpty(TX_CONT); - } - - /** - * Set a relation : a3.assignB("b3") - */ - public void _testBasicSetEmpty(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a3"); - if (tx == TX_CONT) { - a.assignBInNewTx("b3"); - } else { - a.assignB("b3"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - String idB = a.retrieveBInNewTx(); - if (tx != TX_RB) { - assertEquals("Wrong assign for relation a3->b3 : ", "b3", idB); - // undo - a.assignBInNewTx(null); - } else { - assertNull("Rollback did not occur", idB); - } - checkIsInitialState(); - } - - public void testBasicSetEmptyTxNo() throws Exception { - _testBasicSetEmpty(TX_NO); - } - public void testBasicSetEmptyTxCall() throws Exception { - _testBasicSetEmpty(TX_CALL); - } - public void testBasicSetEmptyTxCont() throws Exception { - _testBasicSetEmpty(TX_CONT); - } - public void testBasicSetEmptyTxRb() throws Exception { - _testBasicSetEmpty(TX_RB); - } - - /** - * Set a relation to empty : a3.assignB(null) - */ - public void _testBasicSetEmptyNull(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a = getAHome().findByPrimaryKey("a1"); - if (tx == TX_CONT) { - a.assignBInNewTx(null); - } else { - a.assignB(null); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - // checking - String idB = a.retrieveBInNewTx(); - if (tx == TX_RB) { - assertEquals("Wrong assign null for relation a1->b1: ", "b1", idB); - } else { - assertNull("Wrong assign null for relation a1->b1: " + idB, idB); - // undo - a.assignBInNewTx("b1"); - } - checkIsInitialState(); - } - - public void testBasicSetEmptyNullTxNo() throws Exception { - _testBasicSetEmptyNull(TX_NO); - } - public void testBasicSetEmptyNullTxCall() throws Exception { - _testBasicSetEmptyNull(TX_CALL); - } - public void testBasicSetEmptyNullTxCont() throws Exception { - _testBasicSetEmptyNull(TX_CONT); - } - public void testBasicSetEmptyNullTxRb() throws Exception { - _testBasicSetEmptyNull(TX_RB); - } - - - - /** - * test coherence relation one to one bidirectionnel, - * A1.assignB(B2) => A1.retreiveB()=B2 && B2.retreiveA()=A1 && B1.retreiveA()=null && A2.retreiveB()=null - */ - public void _testCohSetOne(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - BRemote b2 = getBHome().findByPrimaryKey("b2"); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // change the relation - if (tx == TX_CONT) { - a1.assignBInNewTx("b2"); - } else { - a1.assignB("b2"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - utx.begin(); - try { - assertNull("Bad coherence of relation null : expected for a2.retreiveB() found :" + a2.retrieveB(), a2.retrieveB()); - assertNull("Bad coherence of relation null : expected for b1.retreiveA() found :" + b1.retrieveA(), b1.retrieveA()); - assertEquals("Bad coherence of relation a1 : expected for b2.retreiveA() found :" + b2.retrieveA(), "a1", b2.retrieveA()); - assertEquals("Bad coherence of relation b2 : expected for a1.retreiveB() found :" + a1.retrieveB(), "b2", a1.retrieveB()); - - // undo - a1.assignB("b1"); - a2.assignB("b2"); - } finally { - utx.commit(); - } - } - checkIsInitialState(); - } - - public void testCohSetOneTxNo() throws Exception { - _testCohSetOne(TX_NO); - } - public void testCohSetOneTxCall() throws Exception { - _testCohSetOne(TX_CALL); - } - - /** - * test coherence relation one to one bidirectionnel, - * A3.assignB(B3)=>A3.retreiveB()==B3 && B3.retreiveB()==A3 - */ - public void _testCohWithoutRelation(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // change the relation - if (tx == TX_CONT) { - a3.assignBInNewTx("b3"); - } else { - a3.assignB("b3"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - utx.begin(); - try { - assertEquals("Bad coherence of relation : b3 expected:" + a3.retrieveB(), "b3", a3.retrieveB()); - assertEquals("Bad coherence of relation : a3 expected:" + b3.retrieveA(), "a3", b3.retrieveA()); - - // undo - a3.assignB(null); - } finally { - utx.commit(); - } - } - checkIsInitialState(); - } - - public void testBasicCohWithoutRelation() throws Exception { - _testCohWithoutRelation(TX_NO); - } - public void testBasicCohWithoutRelationTxCall() throws Exception { - _testCohWithoutRelation(TX_CALL); - } - - /** - * test coherence relation one to one bidirectionnel, - * A1.assignB(B3)=>A1.retreiveB()==B3 && B1.retreiveB()==null && B2.retreiveB()=null - */ - public void _testCohAlreadyAssign(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // change the relation - if (tx == TX_CONT) { - a1.assignBInNewTx("b3"); - } else { - a1.assignB("b3"); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - utx.begin(); - try { - assertEquals("Bad coherence of relation : b3 expected:" + a1.retrieveB(), "b3", a1.retrieveB()); - assertNull("Bad coherence of relation : null expected:" + b1.retrieveA(), b1.retrieveA()); - assertEquals("Bad coherence of relation : a1 expected:" + b3.retrieveA(), "a1", b3.retrieveA()); - - // undo - a1.assignB("b1"); - } finally { - utx.commit(); - } - } - checkIsInitialState(); - } - - public void testCohAlreadyAssign() throws Exception { - _testCohAlreadyAssign(TX_NO); - } - public void testCohAlreadyAssignTxCall() throws Exception { - _testCohAlreadyAssign(TX_CALL); - } - - /** - * test coherence relation one to one bidirectionnel, - * A1.assignB(null)=>A1.retreiveB()==null && B1.retreiveB()==null - */ - public void _testCohSetNull(int tx) throws Exception { - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - BRemote b2 = getBHome().findByPrimaryKey("b2"); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // change the relation - if (tx == TX_CONT) { - a1.assignBInNewTx(null); - } else { - a1.assignB(null); - } - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - try { - utx.begin(); - // Verify expected result - assertNull("Bad coherence of relation : null expected for a1.retreiveB() found :" + a1.retrieveB(), a1.retrieveB()); - assertNull("Bad coherence of relation : null expected for b1.retreiveA() found :" + b1.retrieveA(), b1.retrieveA()); - - // undo - a1.assignB("b1"); - } finally { - utx.commit(); - } - } - checkIsInitialState(); - } - - public void testCohSetNull() throws Exception { - _testCohSetNull(TX_NO); - } - public void testCohSetNullTxCall() throws Exception { - _testCohSetNull(TX_CALL); - } - - /** - * test coherence relation one to one bidirectionnel, - * A1.remove=>A1removed && B1.retreiveA()==null - */ - public void _testCohRemoveA(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - BRemote b1 = getBHome().findByPrimaryKey("b1"); - // remove the bean - getAHome().remove("a1"); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - assertNull("Bad coherence of relation : null expected for b1.retreiveB() found :" + b1.retrieveAInNewTx(), b1.retrieveAInNewTx()); - boolean not_found = false; - try { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - } catch (ObjectNotFoundException e) { - not_found = true; - } - assertTrue("a1 is not removed", not_found); - // undo - getAHome().create("a1"); - ARemote a1 = getAHome().findByPrimaryKey("a1"); - a1.assignBInNewTx("b1"); - } - checkIsInitialState(); - } - - public void testCohRemoveATxNo() throws Exception { - _testCohRemoveA(TX_NO); - } - public void testCohRemoveATxCall() throws Exception { - _testCohRemoveA(TX_CALL); - } - public void testCohRemoveATxRb() throws Exception { - _testCohRemoveA(TX_RB); - } - - /** - * test coherence relation one to one bidirectionnel, - * getAHome().remove(a1)=>A1removed && B1.retreiveA()==null - * Same as _testCohRemoveA except that the called remove method is on the bean - * instead of the home. - */ - public void _testCohBeanRemoveA(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - a1.remove(); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - assertNull("Bad coherence of relation : null expected for b1.retreiveB() found :" + b1.retrieveAInNewTx(), b1.retrieveAInNewTx()); - boolean not_found=false; - try { - a1 = getAHome().findByPrimaryKey("a1"); - } catch (ObjectNotFoundException e) { - not_found=true; - } - assertTrue("a1 is not removed",not_found); - // undo - getAHome().create("a1"); - a1 = getAHome().findByPrimaryKey("a1"); - a1.assignBInNewTx("b1"); - } - checkIsInitialState(); - } - - public void testCohBeanRemoveATxNo() throws Exception { - _testCohBeanRemoveA(TX_NO); - } - public void testCohBeanRemoveATxCall() throws Exception { - _testCohBeanRemoveA(TX_CALL); - } - public void testCohBeanRemoveATxRb() throws Exception { - _testCohBeanRemoveA(TX_RB); - } - - /** - * test coherence relation one to one bidirectionnel, - * getBHome().remove(b1)=>B1 removed && A1.retreiveB()==null - */ - public void _testCohRemoveB(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - BRemote b2 = getBHome().findByPrimaryKey("b2"); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // remove the bean - getBHome().remove("b1"); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - assertNull("Bad coherence of relation : null expected for a1.retreiveB() found :"+a1.retrieveBInNewTx(), a1.retrieveBInNewTx()); - boolean not_found=false; - try { - b1 = getBHome().findByPrimaryKey("b1"); - } catch (ObjectNotFoundException e) { - not_found=true; - } - assertTrue("B is not removed",not_found); - // undo - getBHome().create("b1"); - a1.assignBInNewTx("b1"); - } - checkIsInitialState(); - } - - public void testCohRemoveBTxNo() throws Exception { - _testCohRemoveB(TX_NO); - } - public void testCohRemoveBTxCall() throws Exception { - _testCohRemoveB(TX_CALL); - } - public void testCohRemoveBTxRb() throws Exception { - _testCohRemoveB(TX_RB); - } - - /** - * test coherence relation one to one bidirectionnel, - * B1.remove=>B1 removed && A1.retreiveB()==null - * Same as _testCohRemoveB except that the called remove method is on the bean - * instead of the home. - */ - public void _testCohBeanRemoveB(int tx) throws Exception { - if (tx == TX_CONT) { - // The transaction attribute of the remove method is TX_SUPPORT, - // so the transaction cannot be initiate by the container - fail("Transaction cannot be initiate by the container for this test"); - } - - if ((tx == TX_CALL) || (tx == TX_RB)) { - utx.begin(); - } - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - ARemote a2 = getAHome().findByPrimaryKey("a2"); - BRemote b2 = getBHome().findByPrimaryKey("b2"); - ARemote a3 = getAHome().findByPrimaryKey("a3"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - // change the relation - b1.remove(); - if (tx == TX_CALL) { - utx.commit(); - } else if (tx == TX_RB) { - utx.rollback(); - } - if (tx != TX_RB) { - // Verify expected result - assertNull("Bad coherence of relation : null expected for a1.retreiveB() found :"+a1.retrieveBInNewTx(), a1.retrieveBInNewTx()); - boolean not_found=false; - try { - b1 = getBHome().findByPrimaryKey("b1"); - } catch (ObjectNotFoundException e) { - not_found=true; - } - assertTrue("B is not removed",not_found); - // undo - getBHome().create("b1"); - a1.assignBInNewTx("b1"); - } - checkIsInitialState(); - } - - public void testCohBeanRemoveBTxNo() throws Exception { - _testCohBeanRemoveB(TX_NO); - } - public void testCohBeanRemoveBTxCall() throws Exception { - _testCohBeanRemoveB(TX_CALL); - } - public void testCohBeanRemoveBTxRb() throws Exception { - _testCohBeanRemoveB(TX_RB); - } - - /** - * Combination of 2 tests that fails : - * _testCohAlreadyAssign(TX_CALL) + _testCohRemoveA(TX_RB) - */ - public void testMultiA1() throws Exception { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - utx.begin(); - a1.assignB("b3"); - utx.commit(); - a1.assignB("b1"); - utx.begin(); - getAHome().remove("a1"); - utx.rollback(); - String idB1 = a1.retrieveB(); - assertEquals("a1.b", "b1", idB1); - checkIsInitialState(); - } - - public void testMultiA2() throws Exception { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - utx.begin(); - a1.assignB("b3"); - utx.commit(); - a1.assignB("b1"); - utx.begin(); - String idB1 = a1.retrieveB(); - utx.commit(); - assertEquals("a1.b", "b1", idB1); - checkIsInitialState(); - } - - public void testMultiA3() throws Exception { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - utx.begin(); - a1.assignB("b3"); - utx.commit(); - a1.assignB("b1"); - utx.begin(); - String idA1 = b1.retrieveA(); - utx.commit(); - assertEquals("b1.a", "a1", idA1); - checkIsInitialState(); - } - - public void testMultiA4() throws Exception { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - utx.begin(); - a1.assignB("b3"); - utx.commit(); - a1.assignB("b1"); - utx.begin(); - getBHome().remove("b1"); - utx.rollback(); - String idB1 = a1.retrieveB(); - assertEquals("a1.b", "b1", idB1); - checkIsInitialState(); - } - - public void testMultiA5() throws Exception { - ARemote a1 = getAHome().findByPrimaryKey("a1"); - BRemote b1 = getBHome().findByPrimaryKey("b1"); - BRemote b3 = getBHome().findByPrimaryKey("b3"); - utx.begin(); - a1.assignB("b3"); - utx.commit(); - a1.assignB("b1"); - utx.begin(); - getBHome().remove("b3"); - utx.rollback(); - String idB1 = a1.retrieveB(); - assertEquals("a1.b", "b1", idB1); - checkIsInitialState(); - } - - public void testRollback() throws Exception { - ARemote a = getAHome().findByPrimaryKey("a1"); - BRemote b = getBHome().findByPrimaryKey("b1"); - String orig = a.retrieveB(); - - // disassociate and commit - utx.begin(); - a.assignB(null); - utx.commit(); - assertEquals(null, a.retrieveB()); - - // revert to original state outside of a user transaction - a.assignB(orig); - - // retrieveB inside a transaction - utx.begin(); - assertEquals(orig, a.retrieveB()); - utx.rollback(); - - // verify that retrieveB returns correct value after rollback - try { - assertEquals("a1", b.retrieveA()); - assertEquals(orig, a.retrieveB()); - } finally { - // force sync to cleanup - sync(true); - } - checkIsInitialState(); - } - - /** - * Ensure the javax.ejb.EJBException is thrown when trying - * to invoke an accessor method on a deleted entitybean object - */ - public void testRemove1() throws Exception { - Front fb = fhome.create(); - fb.testRemove1(); - - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/C_Relation.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/C_Relation.java deleted file mode 100644 index 66c3496297..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/C_Relation.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This is a test suite about the different cases of the relationships bean's CMP2. - * Beans used: relation/* - * @author Jerome Camilleri - */ - -public class C_Relation extends JTestCase { - - public C_Relation(String name) { - super(name); - } - - /* - * tests on CS policy are deprecated in JONAS 5. - * Some of them may fail with JDK 6 (reason is not clear) - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - // relation oou - //suite.addTest(F_oou_CS_EC2.suite()); - suite.addTest(F_oou_CRW_EC2.suite()); - // relation oob - //suite.addTest(F_oob_CS_EC2.suite()); - suite.addTest(F_oob_CRW_EC2.suite()); - // relation omu - //suite.addTest(F_omu_CS_EC2.suite()); - suite.addTest(F_omu_CRW_EC2.suite()); - // relation omb - //suite.addTest(F_omb_CS_EC2.suite()); - suite.addTest(F_omb_CRW_EC2.suite()); - // relation mou - //suite.addTest(F_mou_CS_EC2.suite()); - suite.addTest(F_mou_CRW_EC2.suite()); - // relation mnu - //suite.addTest(F_mnu_CS_EC2.suite()); - suite.addTest(F_mnu_CRW_EC2.suite()); - // relation mnb - //suite.addTest(F_mnb_CS_EC2.suite()); - suite.addTest(F_mnb_CRW_EC2.suite()); - // composite PK suites - suite.addTest(F_Relation_pkcompEC2.suite()); - suite.addTest(F_Relation_s1pkcompEC2.suite()); - suite.addTest(F_Relation_s2pkcompEC2.suite()); - suite.addTest(F_Relation_s3pkcompEC2.suite()); - - // Tables created with not null foreign-key - suite.addTest(F_Relation2_mouEC2.suite()); - - return suite; - } - - public static void main (String args[]) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_BasicEjbqlEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_BasicEjbqlEC2.java deleted file mode 100644 index a5faecad59..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_BasicEjbqlEC2.java +++ /dev/null @@ -1,402 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.Collection; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.ebasic.E4Query; -import org.objectweb.jonas.jtests.beans.ebasic.E4QueryHome; -import org.objectweb.jonas.jtests.util.JTestCase; - - -/** - * For testing basic EJB QL queries. - * @author Helene Joanin - */ - -public class F_BasicEjbqlEC2 extends JTestCase { - - private static String BEAN_HOME_E4QUERY = "ebasicE4QueryEC2Home"; - protected static E4QueryHome home = null; - - - public F_BasicEjbqlEC2(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - if (home == null) { - // load bean if not loaded yet - useBeans("ebasic", true); - try { - home = (E4QueryHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_E4QUERY), - E4QueryHome.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - // check if tables have been initialized - try { - home.findByPrimaryKey("id1"); - } catch (Exception e) { - try { - home.create("idnull", null, 0, 0.0); - home.create("id1","helene", 1959, 1959.0); - home.create("id2","ahelene", -1959, 1959.0); - home.create("id3","helene-bis", 1959*1959, 1959.0*1959.0); - home.create("id4","eric", 1957, 1957.0); - home.create("id4e","ric", 1957, 1957.0); - } catch (Exception i) { - fail("InitialState creation problem:: "+i); - } - } - } - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE LENGTH(o.fstring) = ?1 - */ - public void testLength() throws Exception { - int l = "helene".length(); - Collection cBeans = home.findByLengthString(l); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - assertEquals("Id="+bean.getId(), l, bean.getFstring().length()); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE LOCATE(?1, o.fstring) > 0 - */ - public void testLocate() throws Exception { - String l = "helene"; - Collection cBeans = home.findByLocateString(l); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("Id="+bean.getId(), f.indexOf(l)>-1); - nb++; - } - assertEquals("Beans number: ", 3, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE LOCATE(?1, o.fstring, ?2) > 0 - * FAIL in postgresql. Spec 2.1 says that this implementation is optional. - */ - public void testLocateAt() throws Exception { - String l = "helene"; - Collection cBeans = home.findByLocateStringAt(l, 2); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("Id=" + bean.getId() + ",f=" + f, f.indexOf(l, 1)>-1); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE SUBSTRING(o.fstring, ?2, ?3) = ?1 - */ - public void testSubstring() throws Exception { - String s = "el"; - int is = 2; - int il = "el".length(); - Collection cBeans = home.findBySubstring(s, is, il); - Iterator iBeans = cBeans.iterator(); - int nb=0; - int ib = is - 1; - int ie = is - 1 + il; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("id="+bean.getId(), s.equals(f.substring(ib, ie))); - nb++; - } - assertEquals("Beans number: ", 2, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE CONCAT(o.id, o.fstring) = ?1 - */ - public void testConcat() throws Exception { - String s = "id4"+"eric"; - Collection cBeans = home.findByConcatString(s); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("Id="+bean.getId(), s.equals(bean.getId().concat(bean.getFstring()))); - nb++; - } - assertEquals("Beans number: ", 2, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE ABS(o.fint) = ?1 - */ - public void testAbsInt() throws Exception { - int i = 1959; - Collection cBeans = home.findByAbsInt(i); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - assertTrue("Id="+bean.getId(), (f==-i) || (f==i)); - nb++; - } - assertEquals("Beans number: ", 2, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE SQRT(o.fdouble) BETWEEN ?1 - 0.1 AND ?1 + 0.1 - */ - public void testSqrt() throws Exception { - int i = 1959; - Collection cBeans = home.findBySqrtDouble(1959.0); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - assertTrue("Id="+bean.getId(), f==i*i); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fstring IS NULL - */ - public void testIsNull() throws Exception { - Collection cBeans = home.findByIsNull(); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - assertNull("Id="+bean.getId(), bean.getFstring()); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE ?1 IS NULL - */ - public void testIsNull1Param() throws Exception { - Collection cBeans = home.findByIsNullParam(null); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - nb++; - } - assertEquals("Beans number: ", 6, nb); - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE ?1 IS NULL - */ - public void testIsNull2Param() throws Exception { - Collection cBeans = home.findByIsNullParam("hello"); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - nb++; - } - assertEquals("Beans number: ", 0, nb); - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fstring IN ('helene', 'eric') - */ - public void testInStrings() throws Exception { - Collection cBeans = home.findByInStrings(); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - boolean ok = "helene".equals(bean.getFstring()) || "eric".equals(bean.getFstring()); - assertTrue("Id="+bean.getId(), ok); - nb++; - } - assertEquals("Beans number: ", 2, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE ABS(o.fint) = -100 - */ - public void testLessThanMinus100() throws Exception { - Collection cBeans = home.findByLessThanMinus100(); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - assertTrue("Id="+bean.getId(), f < -100); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fint = ?1 - ?2 - ?3 - * to reproduce bug 303587 - * This bug is pending: Remove this test from the list for now. - */ - public void _testIntEqualExpr2() throws Exception { - Collection cBeans = home.findByIntEqualExpr2(1962, 2, 1); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - assertEquals("Id="+bean.getId(), 1959, f); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fstring > ?1 - */ - public void testStringGreaterThenExpr() throws Exception { - Collection cBeans = home.findByStringGreaterThenExpr("helene"); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("Id="+bean.getId()+",fString="+f, f.compareTo("helene") > 0); - nb++; - } - assertEquals("Beans number: ", 2, nb); - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fstring >= ?1 - */ - public void testStringGreaterOrEqualThenExpr() throws Exception { - Collection cBeans = home.findByStringGreaterOrEqualThenExpr("helene"); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - String f = bean.getFstring(); - assertTrue("Id="+bean.getId()+",fString="+f, f.compareTo("helene") >= 0); - nb++; - } - assertEquals("Beans number: ", 3, nb); - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE MOD(o.fint, ?1) = 0 - */ - public void testMod() throws Exception { - int op2 = 1959; - Collection cBeans = home.findByIntModXIsZero(op2); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - //System.out.println("Id="+bean.getId()+",fInt="+f); - assertTrue("Id="+bean.getId()+",fInt="+f, (f % op2) == 0); - nb++; - } - assertEquals("Beans number: ", 4, nb); - } - - - public static Test suite() { - return new TestSuite(F_BasicEjbqlEC2.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_BasicEjbqlEC2(testtorun)); - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_EjbqlEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_EjbqlEC2.java deleted file mode 100644 index 58a46a91b9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_EjbqlEC2.java +++ /dev/null @@ -1,1897 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty offind - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.ejbql.*; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -/** - * This is an advanced test suite for home interface on entity bean EJBQL. - */ -public class F_EjbqlEC2 extends A_Cmp2Util { - - private static String BEAN_HOME_SESSION_TEST = "EjbqlSessionTestHomeRemote"; - private static String BEAN_HOME_CUSTOMER = "CustomerHomeRemote"; - private static String BEAN_HOME_RESERVATION = "ReservationHomeRemote"; - private static String BEAN_HOME_CRUISE = "CruiseHomeRemote"; - private static String BEAN_HOME_SHIP = "ShipHomeRemote"; - private static String BEAN_HOME_CABIN = "CabinHomeRemote"; - private static String BEAN_HOME_ADDRESS = "AddressHomeRemote"; - - protected static SessionTestHomeRemote sessiontesthome = null; - protected static CustomerHomeRemote customerhome = null; - protected static ReservationHomeRemote reservationhome = null; - protected static CruiseHomeRemote cruisehome = null; - protected static ShipHomeRemote shiphome = null; - protected static CabinHomeRemote cabinhome = null; - protected static AddressHomeRemote addresshome = null; - protected static CreditCardHomeRemote creditcardhome = null; - - public F_EjbqlEC2(String name) { - super(name); - } - - protected boolean isInit = false; - - protected void setUp() { - super.setUp(); - boolean ok = false; - int nbtry = 0; - while (!ok && nbtry < 3) { - logger.log(BasicLevel.DEBUG, "Starting " + getName() + " try " + nbtry); - if (!isInit) { - // load bean if not loaded yet - useBeans("ejbql", false); - // lookup home used in the tests - - try { - sessiontesthome = (SessionTestHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_SESSION_TEST), - SessionTestHomeRemote.class); - customerhome = (CustomerHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_CUSTOMER), - CustomerHomeRemote.class); - shiphome = (ShipHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_SHIP), - ShipHomeRemote.class); - cruisehome = (CruiseHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_CRUISE), - CruiseHomeRemote.class); - reservationhome = (ReservationHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_RESERVATION), - ReservationHomeRemote.class); - cabinhome = (CabinHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_CABIN), - CabinHomeRemote.class); - addresshome = (AddressHomeRemote) - PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_ADDRESS), - AddressHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - // check if tables have been initialized - try { - customerhome.findByPrimaryKey(new Integer(80)); - } catch (Exception e) { - // Make the initialization needed for the tests - try { - logger.log(BasicLevel.DEBUG, getName() + ": init tables"); - - utx.begin(); - String cities[] = new String[6]; - cities[0] = "Minneapolis"; cities[1] = "St. Paul"; cities[2] = "Rochester"; - cities[3] = "Winona"; cities[4] = "Wayzata"; cities[5] = "Eagan"; - ShipRemote shipA = null; - CruiseRemote cruiseA = null; - shipA = shiphome.create(new Integer(10772), "Ship A", 30000.0); - cruiseA = cruisehome.create("Cruise A", new Integer(10772)); - for (int jj = 1; jj <= 10; jj++) { - ShipRemote ship = shiphome.create(new Integer(jj), "Ship " + jj, 30000.0 + (10000.0 * jj)); - } - cruiseA = null; - CruiseRemote cruiseB = null; - ShipRemote ship1 = shiphome.findByPrimaryKey(new Integer(1)); - cruiseA = cruisehome.create("Alaska Cruise", new Integer(1)); - cruiseB = cruisehome.create("Bohemian Cruise", new Integer(1)); - for (int kk = 80; kk <= 99; kk++) { - CustomerRemote customer = null; - - customer = customerhome.create(new Integer(kk)); - customer.setName(new Name("Smith"+kk,"John") ); - customer.addPhoneNumber("612-555-12"+kk,(byte) 1); - - customer.setAddress("10"+kk+" Elm Street", - cities[(kk-80)%6], - (kk%2==0?"MN":"CA"), - "5540"+(kk%5+1)); - customer.setHasGoodCredit((kk%4 == 0)); - if (kk%4 == 0) - customer.setCreditCard(new Date(System.currentTimeMillis()+100000), "100001"+kk, "MasterCard", "CA" ,"CETELEM", "rue de jeunet", cities[0], "France", "3888" ); - } - utx.commit(); - - // Creating Customers 1-6, each with 2 reservations for 2 cabins - utx.begin(); - Calendar date = Calendar.getInstance(); - date.set(2002,10,1); - - for (int kk=201; kk<207; kk++) { - Collection customers = new ArrayList(); - CustomerRemote cust = customerhome.create(new Integer(kk)); - cust.setName(new Name("Customer "+kk,"Mike")); - cust.setHasGoodCredit( (kk%2==0) ); // odds are bums - cust.setAddress("50"+kk+" Main Street","Minneapolis","MN","5510"+kk); - customers.add(new Integer(kk)); // put this single customer in the collection - - Collection reservations = new ArrayList(); - - for (int jj=0; jj<2; jj++) { - - ReservationRemote reservation = reservationhome.create(cruiseA.getId(), customers); - reservation.setDate(date.getTime()); - reservation.setAmountPaid(1000*kk+100*jj+2000); - - date.add(Calendar.DAY_OF_MONTH, 7); - - Set cabins = new HashSet(); - CabinRemote cabin = cabinhome.create(new Integer(1000+kk*100+jj)); - cabin.setDeckLevel(kk-200); - cabin.setName("Cabin "+kk+"0"+jj+"1"); - - cabins.add(cabin.getId()); - cabin = cabinhome.create(new Integer(1000+kk*100+10+jj)); - cabin.setDeckLevel(kk-200); - cabin.setName("Cabin "+kk+"0"+jj+"2"); - - cabins.add(cabin.getId()); - - reservation.setAllCabins(cabins); // this reservation has 2 cabins - - } - } - utx.commit(); - utx.begin(); - String fnames[] = new String[5]; - fnames[0]="John"; fnames[1]="Paul"; fnames[2]="Ringo"; - fnames[3]="Joe"; fnames[4]="Roger"; - - String lnames[] = new String[3]; - lnames[0]="Smith"; lnames[1]="Johnson"; lnames[2]="Star"; - // Creating Customers 50-69 - for (int kk=50; kk<=69; kk++) { - CustomerRemote customer = customerhome.create(new Integer(kk)); - customer.setName( new Name(lnames[(kk-50)%3], fnames[(kk-50)%5]) ); - customer.addPhoneNumber("612-555-12"+kk,(byte)1); - customer.setAddress("10"+kk+" Elm Street", - cities[(kk-50)%6], - (kk%2==0?"MN":"CA"), - "5540"+(kk%5+1)); - customer.setHasGoodCredit((kk%4==0)); - - // Some customers will have reservations already on one of the two cruises.. - if (kk%3!=0) { - Collection customers = new ArrayList(); - customers.add(customer.getId()); // put this single customer in the collection - ReservationRemote reservation = reservationhome.create((kk%3==1?cruiseA.getId():cruiseB.getId()), customers); - reservation.setDate(date.getTime()); - reservation.setAmountPaid(10*kk+2000); - date.add(Calendar.DAY_OF_MONTH, 7); - } - } - utx.commit(); - - // Creating Customers 100-109 - utx.begin(); - for (int kk=100; kk<=109; kk++) { - CustomerRemote customer = customerhome.create(new Integer(kk)); - customer.setName( new Name("Lennon"+kk, "Paul") ); - customer.addPhoneNumber("666-543-12"+kk,(byte)1); - - customer.setAddress("10"+kk+" Abbey Road", - cities[(kk-100)%6], - (kk%2==0?"FL":"WA"), - "5540"+(kk%5+1)); - customer.setHasGoodCredit((kk%4==0)); - } - - logger.log(BasicLevel.DEBUG, getName() + ": init done"); - } catch (Exception i) { - i.printStackTrace(System.out); - fail("InitialState creation problem: "+i); - } finally { - try { - utx.commit(); - } catch (Exception ii) { - } - } - } - isInit = true; - } - // Check that all is OK. Sometimes, a test has failed and has corrupted - // the bean state in the database. We must unload and reload the bean then. - nbtry++; - try { - if (initStateOK()) { - ok = true; - } - } catch (Exception e) { - e.printStackTrace(System.out); - } - if (!ok) { - isInit = false; - unloadBeans("ejbql"); - } - } - } - - - /* - * Check that we are in the same state as after the tables creation for thoses beans A and B - * (ie if it is the initial state) - */ - boolean initStateOK() throws Exception { - // just verify that all ejb are correcly created. Nothing about relation here because we testing only ejbql - boolean isOk = true; - - msgerror = new StringBuffer(); - - ShipRemote ship10772 = shiphome.findByPrimaryKey(new Integer(10772)); - for (int i=1; i<=10; i++) { - ShipRemote ship = shiphome.findByPrimaryKey(new Integer(i)); - } - - CruiseRemote cruiseA = cruisehome.findByName("Cruise A"); - CruiseRemote cruiseB = cruisehome.findByName("Alaska Cruise"); - CruiseRemote cruiseC = cruisehome.findByName("Bohemian Cruise"); - for (int j=10; j<=12; j++) { - CruiseRemote cruise = cruisehome.findByPrimaryKey(new Integer(j)); - } - - for (int k=80; k<=109; k++) { - CustomerRemote customer = customerhome.findByPrimaryKey(new Integer(k)); - } - - for (int l=201; l<=206; l++) { - CustomerRemote customer1 = customerhome.findByPrimaryKey(new Integer(l)); - } - - for (int p=50; p<=69; p++) { - CustomerRemote customer2 = customerhome.findByPrimaryKey(new Integer(p)); - } - for (int kk=201;kk<207;kk++) { - for (int jj=0;jj<2;jj++) { - CabinRemote cabin = cabinhome.findByPrimaryKey(new Integer(1000+kk*100+jj)); - CabinRemote cabin1 = cabinhome.findByPrimaryKey(new Integer(1000+kk*100+10+jj)); - } - } - - for (int kkh=10;kkh<=34;kkh++) { - ReservationRemote reservation = reservationhome.findByPrimaryKey(new Integer(kkh)); - } - - return isOk; - } - - /** - * The execution of those two tests failed. - */ - public void testSeries1() throws Exception { - testWildcards(); - testWildcards(); - } - - /** - * Finding Customer having name 'John Smith85' - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName = ?1 AND c.firstName = ?2 - */ - public void testAnd1() throws Exception { - CustomerRemote customer85 = customerhome.findByExactName("Smith85","John"); - assertEquals("Wrong Customer : ",new Integer(85), customer85.getId()); - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customer 'Smith90' - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName = 'Smith90' - */ - public void testEgalString() throws Exception { - CustomerRemote customer90 = customerhome.findSmith90(); - assertEquals("Wrong Customer : ",new Integer(90), customer90.getId()); - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers having GoodCredit - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.hasGoodCredit = TRUE - */ - public void testEgalBoolean() throws Exception { - Collection mplscustomers = customerhome.findByGoodCredit(); - ArrayList customers_id = new ArrayList(); - Iterator customer = mplscustomers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - for (int ii=80;ii<=96;ii=ii+4) { - result.add(new Integer(ii)); - } - - for (int ii=100;ii<=108;ii=ii+4) { - result.add(new Integer(ii)); - } - for (int jj=202;jj<=206;jj=jj+2) { - result.add(new Integer(jj)); - } - - for (int kk=52;kk<=68;kk=kk+4) { - result.add(new Integer(kk)); - } - - assertTrue("Wrong result EJBQL Customer.findByGoogCredit() (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers having City = Minneapolis and STATE= MN - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress.city = ?1 AND c.homeAddress.state = ?2 - */ - public void testAnd2() throws Exception { - Collection mplscustomers = customerhome.findByCity("Minneapolis","MN"); - - ArrayList customers_id = new ArrayList(); - Iterator customer = mplscustomers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(206)); - result.add(new Integer(50)); - result.add(new Integer(56)); - result.add(new Integer(62)); - result.add(new Integer(68)); - result.add(new Integer(80)); - result.add(new Integer(86)); - result.add(new Integer(92)); - result.add(new Integer(98)); - result.add(new Integer(201)); - result.add(new Integer(202)); - result.add(new Integer(203)); - result.add(new Integer(204)); - result.add(new Integer(205)); - - assertTrue("Wrong result EJBQL Customer.findByCity(Minneapolis,MN) (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - //checkIsInitialState();not necessary in this test - } - /** - * Finding Customer having a name exactly matching 'Joe Star' & - * Finding Customers having a name like 'Jo S' (no wildcards) & - * Finding Customers having a name like 'Jo% S%' (with wildcards) - * Finding Customers having a name like 'Jo% S%' and living in MN - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName = ?1 AND c.firstName = ?2 & - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 & - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 AND c.homeAddress.state = ?3 - */ - public void testWildcards() throws Exception { - // first test : exactly matching - CustomerRemote customer = customerhome.findByExactName("Star","Joe"); - assertEquals("Wrong Customer for customerhome.findByExactName(Star,Joe);: ",new Integer(58), customer.getId()); - - // second test : find with no wildcards - Collection customers = customerhome.findByName("S","Jo"); - ArrayList customers_id = new ArrayList(); - Iterator customerit1 = customers.iterator(); - while (customerit1.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customerit1.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - assertTrue("Wrong result EJBQL customerhome.findByName(S,Jo) (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - // thirdth test : find with no wildcards - customers = customerhome.findByName("S%","Jo%"); - customers_id = new ArrayList(); - Iterator customerit2 = customers.iterator(); - while (customerit2.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customerit2.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - result = new ArrayList(); - result.add(new Integer(50)); - result.add(new Integer(53)); - result.add(new Integer(55)); - result.add(new Integer(58)); - result.add(new Integer(65)); - result.add(new Integer(68)); - for (int i=80;i<=99;i++) { - result.add(new Integer(i)); - } - assertTrue("Wrong result EJBQL customerhome.findByName(S%,Jo%) (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - customers = customerhome.findByNameAndState("S%","Jo%","MN"); - customers_id = new ArrayList(); - Iterator customerit3 = customers.iterator(); - while (customerit3.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customerit3.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - result = new ArrayList(); - result.add(new Integer(50)); - result.add(new Integer(68)); - result.add(new Integer(58)); - for (int i=80;i<=99;i=i+2) { - result.add(new Integer(i)); - } - assertTrue("Wrong result EJBQL customerhome.findByNameAndState(S%,Jo%,MN) (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - - // checkIsInitialState(); not necessary in this test - } - - /** - * (Bug #300634) - * Finding Customers having a name not like 'Jo%' OR not like 'S%' - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.lastName NOT LIKE ?1 OR c.firstName NOT LIKE ?2 - */ - public void testNotLike() throws Exception { - Collection customers = customerhome.findByNotName("S%","Jo%"); - ArrayList customers_id = new ArrayList(); - Iterator customerit1 = customers.iterator(); - while (customerit1.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customerit1.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(51)); - result.add(new Integer(52)); - result.add(new Integer(54)); - result.add(new Integer(56)); - result.add(new Integer(57)); - result.add(new Integer(59)); - for (int i=60;i<=64;i++) { - result.add(new Integer(i)); - } - result.add(new Integer(66)); - result.add(new Integer(67)); - result.add(new Integer(69)); - for (int i=100;i<=109;i++) { - result.add(new Integer(i)); - } - for (int i=201;i<=206;i++) { - result.add(new Integer(i)); - } - assertTrue("Wrong result EJBQL customerhome.findByNotName(S%,Jo%) (required:" + result + ", found:" +customers_id - + ")", isCollectionEqual(result, customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Retrieve a collection of all cabins on deck 3 - * SELECT OBJECT(c) FROM Cabin as c WHERE c.deckLevel = ?1 - */ - public void testEgalInteger() throws Exception { - Collection cabins = cabinhome.findAllOnDeckLevel(new Integer(3)); - - ArrayList cabins_id = new ArrayList(); - Iterator cabin = cabins.iterator(); - while (cabin.hasNext()) { - CabinRemote cabin_remote = (CabinRemote) PortableRemoteObject.narrow(cabin.next(), CabinRemote.class); - cabins_id.add(cabin_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(21300)); - result.add(new Integer(21310)); - result.add(new Integer(21301)); - result.add(new Integer(21311)); - - assertTrue("Wrong result EJBQL cabinhome.findAllOnDeckLevel(new Integer(3))(required:" + result + ", found:" +cabins_id+ - ")", isCollectionEqual(result,cabins_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Findng Customers Living in Warm Climates - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress.state IN ('FL','TX','AZ','CA') - */ - public void testInWhere() throws Exception { - Collection customers = customerhome.findInHotStates(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int i=51;i<=69;i=i+2) { - result.add(new Integer(i)); - } - for (int j=100;j<=109;j=j+2) { - result.add(new Integer(j)); - } - for (int k=81;k<=99;k=k+2) { - result.add(new Integer(k)); - } - - assertTrue("Wrong result EJBQL customerhome.findInHotStates() (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Test an IN expression with literals integer - * SELECT OBJECT(c) FROM jt2_Cabin as c WHERE c.deckLevel IN ( 1 , 3 , 5 ) - */ - public void test2InWhere() throws Exception { - Collection cabins = cabinhome.findAllOnDeckLevel1_3_5(); - - ArrayList customers_id = new ArrayList(); - Iterator icabins = cabins.iterator(); - int nb = 0; - while (icabins.hasNext()) { - CabinRemote cabin_remote = (CabinRemote) PortableRemoteObject.narrow(icabins.next(), CabinRemote.class); - nb++; - int level = cabin_remote.getDeckLevel(); - if ((level != 1) && (level != 3) && (level != 5)) { - fail("Wrong result EJBQL cabinhome.findAllOnDeckLevel1_3_5(5) (level=" - + level + ")"); - } - } - assertEquals("Wrong result EJBQL cabinhome.findAllOnDeckLevel1_3_5(5)", 12, nb); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Test an IN expression with literals integer and an input parameter - * SELECT OBJECT(c) FROM jt2_Cabin as c WHERE c.deckLevel IN ( 1 , 3 , ?1 ) - */ - public void test3InWhere() throws Exception { - Collection cabins = cabinhome.findAllOnDeckLevel1_3_X(5); - - ArrayList customers_id = new ArrayList(); - Iterator icabins = cabins.iterator(); - int nb = 0; - while (icabins.hasNext()) { - CabinRemote cabin_remote = (CabinRemote) PortableRemoteObject.narrow(icabins.next(), CabinRemote.class); - nb++; - int level = cabin_remote.getDeckLevel(); - if ((level != 1) && (level != 3) && (level != 5)) { - fail("Wrong result EJBQL cabinhome.findAllOnDeckLevel1_3_X(5) (level=" - + level + ")"); - } - } - assertEquals("Wrong result EJBQL cabinhome.findAllOnDeckLevel1_3_X(5)", 12, nb); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers Without Reservations - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.reservations IS EMPTY - */ - public void testIsEmpty() throws Exception { - Collection customers = customerhome.findWithoutReservations(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int i=51;i<=69;i=i+3) { - result.add(new Integer(i)); - } - for (int i=80;i<=109;i++) { - result.add(new Integer(i)); - } - - assertTrue("Wrong result EJBQL customerhome.findWithoutReservations() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers With Reservations - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.reservations IS NOT EMPTY - */ - public void testIsNotEmpty() throws Exception { - Collection customers = customerhome.findWithReservations(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int i=201;i<=206;i++) { - result.add(new Integer(i)); - } - result.add(new Integer(50)); - result.add(new Integer(52)); - result.add(new Integer(53)); - result.add(new Integer(55)); - result.add(new Integer(56)); - result.add(new Integer(58)); - result.add(new Integer(59)); - result.add(new Integer(61)); - result.add(new Integer(62)); - result.add(new Integer(64)); - result.add(new Integer(65)); - result.add(new Integer(67)); - result.add(new Integer(68)); - - assertTrue("Wrong result EJBQL customerhome.findWithReservations() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Test to reproduce bug #300525 - * Finding Customers Without or With Reservations (equivalent to finding all customers) - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE c.reservations IS EMPTY OR c.reservations IS NOT EMPTY - */ - public void testIsEmptyIsNotEmpty() throws Exception { - Collection customers = customerhome.findWithOrWithoutReservations(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int i=50;i<=69;i++) { - result.add(new Integer(i)); - } - for (int i=80;i<=109;i++) { - result.add(new Integer(i)); - } - for (int i=201;i<=206;i++) { - result.add(new Integer(i)); - } - - assertTrue("Wrong result EJBQL customerhome.findWithOrWithoutReservations() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers Without Reservations and with good credit - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE c.reservations IS EMPTY AND c.hasGoodCredit = true - */ - public void testIsEmptyInExp1() throws Exception { - Collection customers = customerhome.findWithoutReservationsAndWithGoodCredit(true); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - result.add(new Integer(84)); - result.add(new Integer(88)); - result.add(new Integer(92)); - result.add(new Integer(96)); - result.add(new Integer(60)); - result.add(new Integer(100)); - result.add(new Integer(104)); - result.add(new Integer(108)); - - assertTrue("Wrong result EJBQL customerhome.findWithoutReservationsAndWithGoodCredit() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers Without Reservations and with good credit - * Test equivalent to testIsEmptyInExp1 - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE NOT (c.reservations IS NOT EMPTY OR c.hasGoodCredit <> true) - */ - public void testIsEmptyInExp1Bis() throws Exception { - Collection customers = customerhome.findBisWithoutReservationsAndWithGoodCredit(true); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - result.add(new Integer(84)); - result.add(new Integer(88)); - result.add(new Integer(92)); - result.add(new Integer(96)); - result.add(new Integer(60)); - result.add(new Integer(100)); - result.add(new Integer(104)); - result.add(new Integer(108)); - - assertTrue("Wrong result EJBQL customerhome.findBisWithoutReservationsAndWithGoodCredit() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers Without Reservations and with good credit - * Test equivalent to testIsEmptyInExp1 - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE NOT ( NOT (c.reservations IS EMPTY AND c.hasGoodCredit = true) ) - */ - public void testIsEmptyInExp1Ter() throws Exception { - Collection customers = customerhome.findTerWithoutReservationsAndWithGoodCredit(true); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - result.add(new Integer(84)); - result.add(new Integer(88)); - result.add(new Integer(92)); - result.add(new Integer(96)); - result.add(new Integer(60)); - result.add(new Integer(100)); - result.add(new Integer(104)); - result.add(new Integer(108)); - - assertTrue("Wrong result EJBQL customerhome.findTerWithoutReservationsAndWithGoodCredit() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers Without Reservations and with good credit - * Test equivalent to testIsEmptyInExp1 - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE NOT (c.hasGoodCredit <> true) AND c.reservations IS EMPTY - */ - public void testIsEmptyInExp1Quad() throws Exception { - Collection customers = customerhome.findQuadWithoutReservationsAndWithGoodCredit(true); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - result.add(new Integer(84)); - result.add(new Integer(88)); - result.add(new Integer(92)); - result.add(new Integer(96)); - result.add(new Integer(60)); - result.add(new Integer(100)); - result.add(new Integer(104)); - result.add(new Integer(108)); - - assertTrue("Wrong result EJBQL customerhome.findQuadWithoutReservationsAndWithGoodCredit() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Test to reproduce bug #300525 - * Finding Customers Without Reservations OR with good credit - * SELECT OBJECT(c) FROM jt2_Customer c - * WHERE c.reservations IS EMPTY OR c.hasGoodCredit == true - */ - public void testIsEmptyInExp2() throws Exception { - Collection customers = customerhome.findWithoutReservationsOrWithGoodCredit(true); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int i=51;i<=69;i=i+3) { - result.add(new Integer(i)); - } - for (int i=80;i<=109;i++) { - result.add(new Integer(i)); - } - result.add(new Integer(202)); - result.add(new Integer(204)); - result.add(new Integer(206)); - result.add(new Integer(52)); - result.add(new Integer(56)); - result.add(new Integer(64)); - result.add(new Integer(68)); - - assertTrue("Wrong result EJBQL customerhome.findWithoutReservationsOrWithGoodCredit() (required:" - + result + ", found:" + customers_id + ")", - isCollectionEqual(result,customers_id)); - - //checkIsInitialState(); not necessary in this test - } - - /** - * Finding the customer with a specific phone number - * SELECT OBJECT(c) FROM jt2_Customer cust WHERE ?1 IS MEMBER OF cust.phoneNumbers - * This test is done via a session bean because it need to use Local interfaces. - */ - public void testSimpleMemberOf() throws Exception { - SessionTestRemote sTest = sessiontesthome.create(); - int custId = sTest.getCustomerWithPhone("612-555-1280").intValue();; - assertEquals("Wrong result EJBQL session.getCustomerWithPhone(612-555-1280): ", - 80, custId); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers On Alaska Cruise - * SELECT OBJECT(c) FROM jt2_Customer cust, Cruise cr, IN(cr.reservations) res - * WHERE cr = ?1 AND cust MEMBER OF res.customers - */ - public void testMemberOfNavigate() throws Exception { - CruiseRemote crA = cruisehome.findByName("Alaska Cruise"); - Collection customers_id = customerhome.callFindOnCruise(crA.getId()); - - ArrayList result = new ArrayList(); - result.add(new Integer(201)); - result.add(new Integer(202)); - result.add(new Integer(203)); - result.add(new Integer(204)); - result.add(new Integer(205)); - result.add(new Integer(206)); - result.add(new Integer(52)); - result.add(new Integer(55)); - result.add(new Integer(58)); - result.add(new Integer(61)); - result.add(new Integer(64)); - result.add(new Integer(67)); - - assertTrue("Wrong result EJBQL customerhome.findOnCruise(crA) (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding ship by tonnage - * SELECT OBJECT(c) FROM jt2_Ship s - * WHERE s.tonnage = ?1 - */ - public void testEgalDouble() throws Exception { - Collection ships = shiphome.findByTonnage(new Double(100000)); - - ArrayList ships_id = new ArrayList(); - Iterator ship = ships.iterator(); - while (ship.hasNext()) { - ShipRemote ship_remote = (ShipRemote) PortableRemoteObject.narrow(ship.next(), ShipRemote.class); - ships_id.add(ship_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(7)); - - - assertTrue("Wrong result EJBQL shiphome.findByTonnage(new Double(100000)) (required:" + result + ", found:" +ships_id+ ")", isCollectionEqual(result,ships_id)); - - // checkIsInitialState(); not necessary in this test - } - - - /** - * Finding ship by tonnage - * SELECT OBJECT(c) FROM jt2_Ship s - * WHERE s.tonnage BETWEEN ?1 AND ?2 - */ - public void testBetweenDouble() throws Exception { - Collection ships = shiphome.findByTonnage(new Double(100000),new Double(130000)); - - ArrayList ships_id = new ArrayList(); - Iterator ship = ships.iterator(); - while (ship.hasNext()) { - ShipRemote ship_remote = (ShipRemote) PortableRemoteObject.narrow(ship.next(), ShipRemote.class); - ships_id.add(ship_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(7)); - result.add(new Integer(8)); - result.add(new Integer(9)); - result.add(new Integer(10)); - - assertTrue("Wrong result EJBQL shiphome.findByTonnage(new Double(100000),new Double(130000)) (required:" + result + ", found:" +ships_id+ ")", isCollectionEqual(result,ships_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * A complex navigation test - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.creditCard.creditCompany.address.city = ?1 - */ - public void testNavigate() throws Exception { - - - Collection customers = customerhome.findAllCreditCardAddress("Minneapolis"); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - result.add(new Integer(84)); - result.add(new Integer(88)); - result.add(new Integer(92)); - result.add(new Integer(96)); - - assertTrue("Wrong result EJBQL customerhome.findAllCreditCardAddress() (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - checkIsInitialState(); - - } - - /** - * An other complex navigation test and the OR operator - * SELECT OBJECT(c) FROM jt2_Customer AS c WHERE c.creditCard.number = ?1 OR c.homeAddress.zip = ?2 - */ - public void testNavigateOr() throws Exception { - - - Collection customers = customerhome.findCustWithCCNumOrAddrZip("10000184", "55404"); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(84)); - result.add(new Integer(88)); - - assertTrue("Wrong result EJBQL customerhome.findCustWithCCNumOrAddrZip() (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - checkIsInitialState(); - - } - - /** - * Finding all Customer with reservations (there will be duplication in result if customer has more than one reservation - * - * SELECT OBJECT(c) FROM jt2_Reservation res, IN(res.customers) c - */ - public void testInFrom() throws Exception { - - Collection customers = customerhome.findAllCustomersWithReservation(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - result.add(new Integer(201)); - result.add(new Integer(201)); - result.add(new Integer(202)); - result.add(new Integer(202)); - result.add(new Integer(203)); - result.add(new Integer(203)); - result.add(new Integer(204)); - result.add(new Integer(204)); - result.add(new Integer(205)); - result.add(new Integer(205)); - result.add(new Integer(206)); - result.add(new Integer(206)); - result.add(new Integer(50)); - result.add(new Integer(52)); - result.add(new Integer(53)); - result.add(new Integer(55)); - result.add(new Integer(56)); - result.add(new Integer(58)); - result.add(new Integer(59)); - result.add(new Integer(61)); - result.add(new Integer(62)); - result.add(new Integer(64)); - result.add(new Integer(65)); - result.add(new Integer(67)); - result.add(new Integer(68)); - - assertTrue("Wrong result EJBQL customerhome.findAllCustomersWithReservation (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding all Customer with reservations (there will not be duplication in result) - * - * SELECT DISTINCT OBJECT(c) FROM jt2_Reservation res, IN(res.customers) c - */ - public void testDistinctInFrom() throws Exception { - - Collection customers = customerhome.findAllCustomersWithReservationDistinct(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - result.add(new Integer(201)); - result.add(new Integer(202)); - result.add(new Integer(203)); - result.add(new Integer(204)); - result.add(new Integer(205)); - result.add(new Integer(206)); - result.add(new Integer(50)); - result.add(new Integer(52)); - result.add(new Integer(53)); - result.add(new Integer(55)); - result.add(new Integer(56)); - result.add(new Integer(58)); - result.add(new Integer(59)); - result.add(new Integer(61)); - result.add(new Integer(62)); - result.add(new Integer(64)); - result.add(new Integer(65)); - result.add(new Integer(67)); - result.add(new Integer(68)); - - assertTrue("Wrong result EJBQL customerhome.findAllCustomersWithReservationDistinct (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Test for feature #300040 - * Finding Customer by address - * - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress = ?1 - */ - public void _testBeanAsParameter() throws Exception { - - AddressRemote add = addresshome.findByPrimaryKey(new Integer(10)); - - Collection customers = customerhome.findByAddress(add); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - result.add(new Integer(80)); - - assertTrue("Wrong result EJBQL customerhome.findByAddress(add)(required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Test for feature #300040 - * Finding Customer by address - * - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress = ?1 - */ - public void _testBeanNullAsParameter() throws Exception { - - Collection customers = customerhome.findByAddress(null); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - assertTrue("Wrong result EJBQL customerhome.findByAddress(add)(required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding All Customer - * - * SELECT OBJECT(c) FROM jt2_Customer AS c - */ - public void testFindCustomerAll() throws Exception { - - Collection customers = customerhome.findCustomersAll(); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - - for (int i=80;i<=99;i++) { - result.add(new Integer(i)); - } - for (int j=201;j<=206;j++) { - result.add(new Integer(j)); - } - for (int k=50;k<=69;k++) { - result.add(new Integer(k)); - } - for (int l=100;l<=109;l++) { - result.add(new Integer(l)); - } - - assertTrue("Wrong result EJBQL customerhome.findCustomersAll()(required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers by AddressId - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress.id = ?1 - */ - public void testFindCustByAddrId() throws Exception { - Collection customers = customerhome.findByAddressId(new Integer(10)); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - - assertTrue("Wrong result EJBQL customerhome.findByAddressId(10) (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Bug #300626 - * SELECT OBJECT(a) FROM jt2_Address AS a - * WHERE a.homecustomer.lastName = 'Smith80' - * AND a.homecustomer.creditCard.id = 10 - * AND a.homecustomer.creditCard.creditCompany.name = 'CETELEM' - * AND a.homecustomer.creditCard.creditCompany.id = 10 - */ - public void testAddrQuery300626() throws Exception { - AddressRemote a = addresshome.findQuery300626(); - assertEquals("Wrong result EJBQL : addresshome.findQuery300626()", 10, a.getId().intValue()); - } - - /** - * Finding Customers by AddressLocal - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress = ?1 - */ - public void testBeanLocalAsParameter() throws Exception { - Collection customers = customerhome.callFindByAddressLocal(new Integer(10)); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - customers_id.add((Integer)customer.next()); - } - ArrayList result = new ArrayList(); - result.add(new Integer(80)); - - assertTrue("Wrong result EJBQL customerhome.callFindByAddressLocal(10) (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding Customers by AddressLocal - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.homeAddress = ?1 - */ - public void testBeanLocalNullAsParameter() throws Exception { - Collection customers = customerhome.callFindByAddressLocal(null); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - customers_id.add((Integer)customer.next()); - } - ArrayList result = new ArrayList(); - - assertTrue("Wrong result EJBQL customerhome.callFindByAddressLocal(null) (required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Test a finder method - * - which have no parameter and which have its name starts with 'findAll', - * - but which not means "findAll". - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.firstName LIKE 'Mike' - */ - public void testFindAllMike() throws Exception { - Collection customers = customerhome.findAllMike(); - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - assertEquals("findAllMike() wrong result: ", - "Mike", customer_remote.getName().getFirstName()); - } - } - - /** - * Test a finder method with the IS NOT NULL operator on a cmr field. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.creditCard IS NOT NULL - */ - public void testIsNull1() throws Exception { - Collection customers = customerhome.findCustomersWithCreditCard(); - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList resExpected = new ArrayList(); - resExpected.add(new Integer(80)); - resExpected.add(new Integer(84)); - resExpected.add(new Integer(88)); - resExpected.add(new Integer(92)); - resExpected.add(new Integer(96)); - assertTrue("Wrong result EJBQL customerhome.findCustomersWithCreditCard (required:" - + resExpected + ", found:" + customers_id + ")", - isCollectionEqual(resExpected,customers_id)); - } - - /** - * Test a finder method with the IS NULL operator on a cmr field. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.creditCard IS NULL - */ - public void testIsNull1bis() throws Exception { - Collection customers = customerhome.findCustomersWithOutCreditCard(); - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList resExpected = new ArrayList(); - for (int i = 50; i <= 69; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 81; i <= 83; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 85; i <= 87; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 89; i <= 91; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 93; i <= 95; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 97; i <= 109; i++) { - resExpected.add(new Integer(i)); - } - for (int i = 201; i <= 206; i++) { - resExpected.add(new Integer(i)); - } - assertTrue("Wrong result EJBQL customerhome.findCustomersWithOutCreditCard (required:" - + resExpected + ", found:" + customers_id + ")", - isCollectionEqual(resExpected,customers_id)); - } - - /** - * Test a finder method with the IS NULL operator on a cmr field in an expression. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.firstName = ?1 AND c.creditCard IS NULL - */ - public void testIsNull1ter() throws Exception { - Collection customers = customerhome.findCustomersXWithOutCreditCard("John"); - assertEquals("Wrong result EJBQL customerhome.findCustomersXWithOutCreditCard: ", 19, customers.size()); - - } - - /** - * Test a finder method with the IS NOT NULL operator on a cmr field with a complex navigation. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE c.creditCard.creditCompany IS NOT NULL - */ - public void testIsNull2() throws Exception { - Collection customers = customerhome.findCustomersWithCreditCompany(); - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList resExpected = new ArrayList(); - resExpected.add(new Integer(80)); - resExpected.add(new Integer(84)); - resExpected.add(new Integer(88)); - resExpected.add(new Integer(92)); - resExpected.add(new Integer(96)); - assertTrue("Wrong result EJBQL customerhome.findCustomersWithCreditCompany (required:" - + resExpected + ", found:" + customers_id + ")", - isCollectionEqual(resExpected,customers_id)); - } - - /** - * Test a finder method with the IS NULL operator on a parameter which is a bean null. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE ?1 IS NULL - */ - public void testIsNull3() throws Exception { - Collection customers = customerhome.callFindByParameterIsNull(null); - assertEquals("Wrong result EJBQL customerhome.callFindByParameterIsNull(null): ", - 56, customers.size()); - } - - /** - * Test a finder method with the IS NULL operator on a parameter which is a bean not null. - * SELECT OBJECT(c) FROM jt2_Customer c WHERE ?1 IS NULL - */ - public void testIsNull3bis() throws Exception { - Collection customers = customerhome.callFindByParameterIsNull(new Integer(10)); - assertEquals("Wrong result EJBQL customerhome.callFindByParameterIsNull(): ", - 0, customers.size()); - } - - /** - * Select the lastName of a customer - * SELECT c.lastName FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCustEjbSelectLastName() throws Exception { - assertEquals("Wrong ejbSelectLastName for c.id=80: ", - "Smith80", customerhome.selectLastName(new Integer(80))); - } - - /** - * Select the city of the address of a customer - * SELECT c.homeAddress.city FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCustEjbSelectAddrCity() throws Exception { - assertEquals("Wrong ejbSelectAddrCity for c.id=80: ", - "Minneapolis", customerhome.selectAddrCity(new Integer(80))); - } - - /** - * Select the deckLevel of a cabin - * SELECT c.deckLevel FROM jt2_Cabin AS c WHERE c.id = ?1 - */ - public void testCabinEjbSelectDeckLevel() throws Exception { - assertEquals("Wrong ejbSelectDeckLevel for c.id=21100: ", - 1, cabinhome.selectDeckLevel(new Integer(21100))); - } - - /** - * Select the firstName of all the customers. - * SELECT c.firstName FROM jt2_Customer AS c - */ - public void testCustEjbSelectFirstName() throws Exception { - Set lfn = customerhome.selectFirstName(); - Iterator ilfn = lfn.iterator(); - StringBuffer slfn = new StringBuffer(); - while (ilfn.hasNext()) { - slfn = slfn.append((String) ilfn.next() + ","); - } - assertEquals("Wrong ejbSelectFirstName() number results (" + slfn.toString() + "): ", - 6, lfn.size()); - if (!lfn.contains("John") - || !lfn.contains("Mike") - || !lfn.contains("Paul") - || !lfn.contains("Ringo") - || !lfn.contains("Roger") - || !lfn.contains("Joe")) { - fail("Wrong ejbSelectFirstName() result (" + slfn.toString() - + "): does not contain 'John', 'Mike' or 'Paul' or 'Ringo' or 'Roger' or 'Joe'"); - } - } - - /** - * Select the DISTINCT firstName of all the customers. - * SELECT DISTINCT c.firstName FROM jt2_Customer AS c - */ - public void testCustEjbSelectDistinctFirstName() throws Exception { - Collection lfn = customerhome.selectDistinctFirstName(); - assertEquals("Wrong ejbSelectDistinctFirstName() number results (" + lfn.toString() + "): ", - 6, lfn.size()); - if (!lfn.contains("John") - || !lfn.contains("Mike") - || !lfn.contains("Paul") - || !lfn.contains("Ringo") - || !lfn.contains("Roger") - || !lfn.contains("Joe")) { - fail("Wrong ejbSelectDistinctDistinctFirstName() result (" + lfn.toString() - + "): does not contain 'John', 'Mike' or 'Paul' or 'Ringo' or 'Roger' or 'Joe'"); - } - } - - /** - * Select the address of a customer - * An ejbSelect with a local bean as result - * SELECT c.homeAddress FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCustEjbSelectAddr() throws Exception { - assertEquals("Wrong ejbSelectAddr for c.id=80: ", - new Integer(10), customerhome.selectAddr(new Integer(80))); - } - - /** - * Select the addresses of the company of the credit card of all the customers. - * An ejbSelect with a collection of local bean as result - * SELECT c.creditCard.creditCompany.address FROM jt2_Customer c - */ - public void testCustEjbSelectAllCreditCartAddr() throws Exception { - Collection addr = customerhome.selectAllCreditCardAddr(); - StringBuffer sAddr = new StringBuffer(); - Iterator iAddr = addr.iterator(); - while (iAddr.hasNext()) { - sAddr = sAddr.append(((Integer) iAddr.next()).toString() + ","); - } - ArrayList eAddr = new ArrayList(); - eAddr.add(new Integer(11)); - eAddr.add(new Integer(16)); - eAddr.add(new Integer(21)); - eAddr.add(new Integer(26)); - eAddr.add(new Integer(31)); - assertTrue("Wrong ejbSelectCreditCardAddr: (" + sAddr + "): ", - isCollectionEqual(eAddr, addr)); - } - - /** - * Select the adresses of all 'roger' customers. - * An ejbSelect with a collection of local bean as result - * SELECT c.homeAddress FROM jt2_Customer c WHERE c.firstName = 'Roger' - */ - public void testCustEjbSelectRogerAddr() throws Exception { - Collection addr = customerhome.selectRogerAddr(); - StringBuffer sAddr = new StringBuffer(); - Iterator iAddr = addr.iterator(); - while (iAddr.hasNext()) { - sAddr = sAddr.append(((Integer) iAddr.next()).toString() + ","); - } - ArrayList eAddr = new ArrayList(); - eAddr.add(new Integer(45)); - eAddr.add(new Integer(50)); - eAddr.add(new Integer(55)); - eAddr.add(new Integer(60)); - assertTrue("Wrong ejbCustSelectRogerAddr: (" + sAddr + "): ", - isCollectionEqual(eAddr, addr)); - } - - /** - * Find all the customers ordered by their lastname. - * SELECT OBJECT(c) FROM jt2_Customer c ORDER BY c.lastName - */ - public void testSimpleOrderBy() throws Exception { - Collection customers = customerhome.findAllOrderByLastname(); - assertEquals("Wrong customers number for customerhome.findAllOrderByLastname(): ", - 56, customers.size()); - Iterator ci = customers.iterator(); - String previous = ((CustomerRemote) PortableRemoteObject.narrow(ci.next(), CustomerRemote.class)).getName().getLastName(); - while (ci.hasNext()) { - String lname = ((CustomerRemote) PortableRemoteObject.narrow(ci.next(), CustomerRemote.class)).getName().getLastName(); - assertTrue("Wrong ordered (previous=" + previous + ",current=" + lname + ")", - previous.compareTo(lname)<=0); - previous = lname; - } - } - - /** - * Find all the customers ordered by their lastname (desc) and firstname (asc). - * SELECT OBJECT(c) FROM jt2_Customer c ORDER BY c.lastName DESC, c.firstName ASC - */ - public void testOrderByDescAsc() throws Exception { - Collection customers = customerhome.findAllOrderByDescLastnameAscFirstname(); - assertEquals("Wrong customers number for customerhome.findAllOrderByLastname(): ", - 56, customers.size()); - Iterator ci = customers.iterator(); - Name previous = ((CustomerRemote) PortableRemoteObject.narrow(ci.next(), CustomerRemote.class)).getName(); - while (ci.hasNext()) { - Name current = ((CustomerRemote) PortableRemoteObject.narrow(ci.next(), CustomerRemote.class)).getName(); - assertTrue("Wrong ordered (previous=" + previous + ",current=" + current + ")", - previous.getLastName().compareTo(current.getLastName())>=0); - if (previous.getLastName().equals(current.getLastName())) { - assertTrue("Wrong ordered (previous=" + previous + ",current=" + current + ")", - previous.getFirstName().compareTo(current.getFirstName())<=0); - } - previous = current; - } - - } - - /** - * Find the reservations ordered by their amountPaid. - * The DISTINCT aggregate is used to reproduce the bug #300527 - * SELECT DISTINCT OBJECT(r) FROM jt2_Reservation AS r ORDER BY r.amountPaid - * (bug #300527) - */ - public void testOrderBy2() throws Exception { - Collection reservations = reservationhome.findOrderedRsrv(); - assertEquals("Wrong reservations number for reservationhome.findOrderedRsrv(): ", - 25, reservations.size()); - } - - /** - * Get the average of the tonnage of all the ships. - * SELECT AVG(s.tonnage) FROM jt2_Ship AS s - */ - public void testAverageofTonnage() throws Exception { - assertEquals("AverageofTonnage: ", 80000.0D, shiphome.getAverageOfTonnage(), 0.1); - } - - /** - * Get the count of reservations. - * SELECT COUNT(r) FROM jt2_Reservations AS r - */ - public void testCountOfReservations() throws Exception { - assertEquals("CountOfReservations: ", 25L, reservationhome.getCountOfReservations()); - } - - /** - * bug #300723 - * Get the count of customers with a given id - * SELECT COUNT(c) FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCountOfCustomersWithId1() throws Exception { - assertEquals("CountOfCustomersWithId1: ", 1L, customerhome.getCountCustomersWithId1(new Integer(82))); - } - - /** - * bug #300723 - * Get the count of customers with a given id - * SELECT COUNT(c) FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCountOfCustomersWithId2() throws Exception { - assertEquals("CountOfCustomersWithId2: ", 1L, customerhome.getCountCustomersWithId2(82)); - } - - /** - * Get the count of customers with a firstname 'Ringo' - * SELECT COUNT(c) FROM jt2_Customer AS c WHERE c.firstName = 'Ringo' - */ - public void testCountOfCustomersRingo() throws Exception { - assertEquals("CountOfCustomersRingo: ", 4L, customerhome.getCountCustomersRingo()); - } - - /** - * Get the customer with a given id - * SELECT c FROM jt2_Customer AS c WHERE c.id = ?1 - */ - public void testCustFindById() throws Exception { - assertEquals("CustFindById: ", new Integer(82), customerhome.findById(new Integer(82)).getId()); - } - - /** - * Get the min value of the amount of the reservations. - * SELECT MIN(r.amountPaid) FROM jt2_Reservations AS r - */ - public void testMinAmountOfReservations() throws Exception { - assertEquals("testMinAmountOfReservations: ", - 2500.0, reservationhome.getMinAmountOfReservations(), 0.1); - } - - /** - * (Bug #300635) - * Get the min value of the amount of the reservations for the cruise name. - * SELECT MIN(r.amountPaid) FROM jt2_Reservations AS r WHERE r.cruise.name = ?1 - */ - public void testMinAmountForCruise() throws Exception { - assertEquals("testMinAmountForCruise(Alaska Cruise): ", - 2520.0, reservationhome.getMinAmountForCruise("Alaska Cruise"), 0.1); - } - - /** - * Get the values of the amounts of the reservations for the cruise name. - * SELECT r.amountPaid FROM jt2_Reservations AS r WHERE r.cruise.name = ?1 - */ - public void testAmountsForCruise() throws Exception { - assertEquals("testAmountsForCruise(Alaska Cruise): ", - 18, reservationhome.getAmountsForCruise("Alaska Cruise").size()); - } - - /** - * Get the max value of the amount of the reservations. - * SELECT MAX(r.amountPaid) FROM jt2_Reservations AS r - */ - public void testMaxAmountOfReservations() throws Exception { - assertEquals("testMaxAmountOfReservations: ", - 208100.0, reservationhome.getMaxAmountOfReservations(), 0.1); - } - - /** - * Get the count of all the reservations for a specific customer. - * SELECT COUNT(r) FROM jt2_Reservation AS r WHERE ?1 MEMBER OF r.customers - * (bug #300280) - */ - public void testCountOfReservationsForCustomer() throws Exception { - assertEquals("CountOfReservationsForCustomer: ", - 2L, reservationhome.getCountOfReservationsForCustomer(new Integer(202))); - } - - /** - * Get the amount paid of all the reservations for a specific customer. - * SELECT SUM(r.amountPaid) FROM jt2_Reservation AS r WHERE ?1 MEMBER OF r.customers - * (bug #300280) - */ - public void testAmountOfReservationsForCustomer() throws Exception { - assertEquals("AmountOfReservationsForCustomer: ", - 408100.0, reservationhome.getAmountOfReservationsForCustomer(new Integer(202)), 0.1); - } - - /** - * Get the count of credit card for customers - * SELECT COUNT(c.creditCard) FROM jt2_Customer AS c - * The result must be equivalent to - * SELECT COUNT(c.creditCard) FROM jt2_Customer AS c WHERE c.creditCard IS NOT NULL - */ - public void testCustomersCountCreditCard() throws Exception { - assertEquals("CustomersCountCreditCard: ", 5, customerhome.getCountCreditCard()); - } - - /** - * Get the list of the number of the credit card for customers - * SELECT DISTINCT c.creditCard.number FROM jt2_Customer AS c ORDER BY c.creditCard.number - */ - public void testCustomersCreditCardNumbers() throws Exception { - assertEquals("CustomersCreditCardNumbers: ", 5, customerhome.getCreditCardNumbers().size()); - } - - - /** - * Find all the addresses - * SELECT OBJECT(a) FROM jt2_Address AS a - */ - public void testFindAllAddresses() throws Exception { - Collection addresses = addresshome.findAllAddress(); - Iterator iAddr = addresses.iterator(); - int nbAddr = 0; - while (iAddr.hasNext()) { - nbAddr++; - iAddr.next(); - } - assertEquals("testFindAllAddresses: ", 61, nbAddr); - } - - /** - * Get all the cities of addresses - * SELECT a.city FROM jt2_Address AS a - */ - public void testAddrGetAllCities() throws Exception { - assertEquals("testAddrGetAllCities: ", 61, addresshome.getAllCities().size()); - } - - /** - * Get all the creditCompanies of addresses - * SELECT a.creditCompany FROM jt2_Address AS a - */ - public void testAddrGetAllCreditCompanies() throws Exception { - assertEquals("testAddrGetAllCreditCompanies: ", 5, addresshome.getAllCreditCompanies().size()); - } - - /** - * Get all the creditCompany names of addresses. - * This is a test about Null Values in the Query Result. - * If the result of the query corresponds to a cmr-field or cmp-field not defined in term of java primitive type, - * the container must include null value in the result. - * See the EJB Specification version 2.1, chapter 11.2.7.1 - * SELECT a.creditCompany.name FROM jt2_Address AS a - * (bug #3001174) - */ - public void testAddrGetAllCreditCompanyNames() throws Exception { - assertEquals("testAddrGetAllCreditCompanyNames: ", 61, addresshome.getAllCreditCompanyNames().size()); - } - - /** - * Get all the creditCompany id of addresses. - * This is a test about Null Values in the Query Result. - * If the result of the query corresponds to a cmp-field not defined in term of java primitive type, - * the container must include null value in the result. - * See the EJB Specification version 2.1, chapter 11.2.7.1 - * SELECT a.creditCompany.id FROM jt2_Address AS a - * (bug #301174) - */ - public void testAddrGetAllCreditCompanyIds() throws Exception { - assertEquals("testAddrGetAllCreditCompanyIds: ", 61, addresshome.getAllCreditCompanyIds().size()); - } - - /** - * Get all the creditCompany id of addresses. - * This is a test about Null Values in the Query Result. - * If the result of the query corresponds to a cmp-field defined in term of java primitive type, - * the container must not include null value in the result. - * See the EJB Specification version 2.1, chapter 11.2.7.1 - * SELECT a.creditCompany.num FROM jt2_Address AS a - * (bug #301174) - */ - public void testAddrGetAllCreditCompanyNums() throws Exception { - assertEquals("testAddrGetAllCreditCompanyNums: ", 5, addresshome.getAllCreditCompanyNums().size()); - } - - - /** - * Get the count of cities for addresses - * SELECT COUNT(a.city) FROM jt2_Address AS a - */ - public void testAddrCountOfCities() throws Exception { - assertEquals("testAddrCountOfCities: ", 61L, addresshome.getCountOfCities()); - } - - /** - * Get the count of DISTINCT cities for addresses - * SELECT COUNT(DISTINCT a.city) FROM jt2_Address AS a - */ - public void testAddrCountOfDistinctCities() throws Exception { - assertEquals("testAddrCountOfDistinctCities: ", 6L, addresshome.getCountOfDistinctCities()); - } - - /** - * Find the reservations with lesser amount. - * SELECT DISTINCT OBJECT(r1) FROM jt2_Reservation AS r1, jt2_Reservation AS r2 - * WHERE r1.amountPaid < r2.amountPaid AND r2.id = 26 - */ - public void testFindResWithLesserAmount() throws Exception { - Collection reservations = reservationhome.findReservationsWithLesserAmount(); - assertEquals("Wrong reservations number for reservationhome.findReservationsWithLesserAmount(): ", - 4, reservations.size()); - } - - /** - * Finding All Customer with a limiter startAt range - * - * SELECT OBJECT(c) FROM jt2_Customer AS c WHERE c.id > 0 ORDER BY c.id LIMIT ?1 - */ - public void testFindCustAllLimit_1() throws Exception { - - Collection customers = customerhome.findAllWithLimit_1(40); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int l=100;l<=109;l++) { - result.add(new Integer(l)); - } - for (int j=201;j<=206;j++) { - result.add(new Integer(j)); - } - - assertTrue("Wrong result EJBQL customerhome.findAllWithLimit_1()(required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - /** - * Finding All Customer with a limiter startAt range and a size range - * - * SELECT OBJECT(c) FROM jt2_Customer AS c ORDER BY c.id LIMIT ?1, 5 - */ - public void testFindCustAllLimit_2() throws Exception { - - Collection customers = customerhome.findAllWithLimit_2(40); - - ArrayList customers_id = new ArrayList(); - Iterator customer = customers.iterator(); - while (customer.hasNext()) { - CustomerRemote customer_remote = (CustomerRemote) PortableRemoteObject.narrow(customer.next(), CustomerRemote.class); - customers_id.add(customer_remote.getId()); - } - ArrayList result = new ArrayList(); - for (int l=100;l<=104;l++) { - result.add(new Integer(l)); - } - - assertTrue("Wrong result EJBQL customerhome.findAllWithLimit_2()(required:" + result + ", found:" +customers_id+ - ")", isCollectionEqual(result,customers_id)); - - // checkIsInitialState(); not necessary in this test - } - - - - public static Test suite() { - return new TestSuite(F_EjbqlEC2.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_EjbqlEC2(testtorun)); - } - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_RcycleEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_RcycleEC2.java deleted file mode 100644 index cd19dbaf10..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_RcycleEC2.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.Collection; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.relation.rcycle.PersonRemote; -import org.objectweb.jonas.jtests.beans.relation.rcycle.PersonHomeRemote; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This is a test suite on CMP 2 : legacy, cycle in relations, relations between - * the same bean. - * @author Helene Joanin - */ -public class F_RcycleEC2 extends JTestCase { - - private static final int ID_L_ERIC = 1; - - private static final int ID_JL_HELENE = 2; - - private static final int ID_L_GUILHEM = 3; - - private static final int ID_L_MALVA = 4; - - private static PersonHomeRemote personhome = null; - - public F_RcycleEC2(String name) { - super(name); - } - - protected boolean isInit = false; - - protected void setUp() { - super.setUp(); - if (!isInit) { - useBeans("rcycle", true); - try { - personhome = (PersonHomeRemote) PortableRemoteObject.narrow(ictx.lookup("RcyclePersonHome"), - PersonHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - isInit = true; - } - } - - /** - * Test the findAll method. - * @throws Exception - */ - public void testFindAll() throws Exception { - Collection cp = personhome.findAll(); - assertEquals("Number of Persons: ", 4, cp.size()); - } - - /** - * (Bug #300533) Test the findQuery1 method. - * @throws Exception - */ - public void testFindQuery1() throws Exception { - Collection cp = personhome.findQuery1(); - assertEquals("Number of Persons: ", 0, cp.size()); - } - - /** - * Test the findQuery2 method. - * @throws Exception - */ - public void testFindQuery2() throws Exception { - Collection cp = personhome.findQuery2(); - assertEquals("Number of Persons: ", 0, cp.size()); - } - - /** - * (Bug #300526) Test the findSpouse3 method. - * @throws Exception - */ - public void testFindSpouse3() throws Exception { - PersonRemote p = personhome.findSpouse3(); - assertNull("Laurent Guilhem spouse: ", p); - } - - - - protected boolean initStateOK() throws Exception { - return true; - } - - public static Test suite() { - return new TestSuite(F_RcycleEC2.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_RcycleEC2(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_omb_CS_EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_omb_CS_EC2.java deleted file mode 100644 index d2efe08e11..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_omb_CS_EC2.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.relation.omb.AHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.ARemote; -import org.objectweb.jonas.jtests.beans.relation.omb.BHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.BRemote; -import org.objectweb.jonas.jtests.beans.relation.omb.Front; -import org.objectweb.jonas.jtests.beans.relation.omb.FrontHome; - -/** - * For testing one-to-many bidirectional relationships - * @author Ph Durieux - */ -public class F_omb_CS_EC2 extends A_omb { - - - private static String BEAN_HOME_A = "relation_omb_AHome"; - protected static AHomeRemote ahome = null; - private static String BEAN_HOME_B = "relation_omb_BHome"; - protected static BHomeRemote bhome = null; - - public F_omb_CS_EC2(String name) { - super(name); - } - - public AHomeRemote getAHome() { - if (ahome == null) { - try { - ahome = (AHomeRemote) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_A), - AHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - } - return ahome; - } - - public BHomeRemote getBHome() { - if (bhome == null) { - try { - bhome = (BHomeRemote) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_B), - BHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - } - return bhome; - } - - /** - * Ensure the IllegalArgumentException is thrown when trying - * to assign a deleted object as the value of a cmr-field - * (Bug #300519) - * A TransactionRolledbackLocalException (an EJBException) should - * occur when calling the business method of another bean with the - * client's tx context. - * We expect an EJBException here. - */ - public void testSetCmrWithDeleted() throws Exception { - Front fb = fhome.create(); - fb.testSetCmrWithDeleted(); - } - - /** - * Ensure the IllegalArgumentException is thrown when trying - * to set a collection cmr-field to a wrong relationship type - */ - public void testSetCmrWithWrongType() throws Exception { - Front fb = fhome.create(); - fb.testSetCmrWithWrongType(); - - } - - public static Test suite() { - return new TestSuite(F_omb_CS_EC2.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_omb_CS_EC2(testtorun)); - } - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_oob_CS_EC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_oob_CS_EC2.java deleted file mode 100644 index 031f2183c9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/F_oob_CS_EC2.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import javax.ejb.ObjectNotFoundException; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.beans.relation.oob.ARemote; -import org.objectweb.jonas.jtests.beans.relation.oob.AHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.BRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.BHomeRemote; -import org.objectweb.jonas.jtests.beans.relation.oob.Front; -import org.objectweb.jonas.jtests.beans.relation.oob.FrontHome; - -/** - * This is an advanced test suite for home interface on entity bean CMP2. - * Beans used: oob - * @author Ph. Durieux - */ -public class F_oob_CS_EC2 extends A_oob { - - private static String BEAN_HOME_A = "relation_oob_AHome"; - private static String BEAN_HOME_B = "relation_oob_BHome"; - protected static AHomeRemote ahome = null; - protected static BHomeRemote bhome = null; - - public F_oob_CS_EC2(String name) { - super(name); - } - - public AHomeRemote getAHome() { - if (ahome == null) { - try { - ahome = (AHomeRemote) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_A), - AHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - } - return ahome; - } - - public BHomeRemote getBHome() { - if (bhome == null) { - try { - bhome = (BHomeRemote) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_B), - BHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - } - return bhome; - } - - /* - * Ensure the IllegalArgumentException is thrown when trying - * to assign a deleted object as the value of a cmr-field - * (Bug #300519) - */ - public void testSetCmrWithDeleted() throws Exception { - Front fb = fhome.create(); - fb.testSetCmrWithDeleted(); - } - - public static Test suite() { - return new TestSuite(F_oob_CS_EC2.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_oob_CS_EC2(testtorun)); - } - } -} - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_BasicEjbqlEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_BasicEjbqlEC2.java deleted file mode 100644 index 4189a59eb4..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_BasicEjbqlEC2.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.Collection; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.ebasic.E4Query; -import org.objectweb.jonas.jtests.beans.ebasic.E4QueryHome; -import org.objectweb.jonas.jtests.util.JTestCase; - - -/** - * For testing basic EJB QL queries. - * @author Helene Joanin - */ - -public class S_BasicEjbqlEC2 extends JTestCase { - - private static String BEAN_HOME_E4QUERY = "ebasicE4QueryEC2Home"; - protected static E4QueryHome home = null; - - - public S_BasicEjbqlEC2(String name) { - super(name); - } - - protected void setUp() { - if (home == null) { - // load bean if not loaded yet - useBeans("ebasic", true); - try { - home = (E4QueryHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_E4QUERY), - E4QueryHome.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - // check if tables have been initialized - try { - home.findByPrimaryKey("id1"); - } catch (Exception e) { - try { - home.create("idnull", null, 0, 0.0); - home.create("id1","helene", 1959, 1959.0); - home.create("id2","ahelene", -1959, 1959.0); - home.create("id3","helene-bis", 1959*1959, 1959.0*1959.0); - home.create("id4","eric", 1957, 1957.0); - home.create("id4e","ric", 1957, 1957.0); - } catch (Exception i) { - fail("InitialState creation problem:: "+i); - } - } - } - } - - /** - * Test the EJB-QL: SELECT OBJECT(o) FROM jt2_e4query o WHERE o.fint = ?1 + ?2 - ?3 - */ - public void testIntEqualExpr() throws Exception { - Collection cBeans = home.findByIntEqualExpr(1959, 255, 255); - Iterator iBeans = cBeans.iterator(); - int nb=0; - while(iBeans.hasNext()) { - E4Query bean = (E4Query) javax.rmi.PortableRemoteObject.narrow(iBeans.next(), - E4Query.class); - int f = bean.getFint(); - assertEquals("Id="+bean.getId(), 1959, f); - nb++; - } - assertEquals("Beans number: ", 1, nb); - - } - - - - public static Test suite() { - return new TestSuite(S_BasicEjbqlEC2.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_BasicEjbqlEC2(testtorun)); - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_RcycleEC2.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_RcycleEC2.java deleted file mode 100644 index 2c7b1d3cea..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_RcycleEC2.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import java.util.Collection; -import java.util.Iterator; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.relation.rcycle.PersonRemote; -import org.objectweb.jonas.jtests.beans.relation.rcycle.PersonHomeRemote; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This test suite collects some test cases of F_RcycleEC2 that are failing - * with HSQLDB - * - * @author Helene Joanin Philippe Coq - */ -public class S_RcycleEC2 extends JTestCase { - - private static final int ID_L_ERIC = 1; - - private static final int ID_JL_HELENE = 2; - - private static final int ID_L_GUILHEM = 3; - - private static final int ID_L_MALVA = 4; - - private static PersonHomeRemote personhome = null; - - public S_RcycleEC2(String name) { - super(name); - } - - protected boolean isInit = false; - - protected void setUp() { - super.setUp(); - if (!isInit) { - useBeans("rcycle", true); - try { - personhome = (PersonHomeRemote) PortableRemoteObject.narrow(ictx.lookup("RcyclePersonHome"), - PersonHomeRemote.class); - } catch (NamingException e) { - fail("Cannot get bean home: " + e.getMessage()); - } - isInit = true; - } - } - - - - /** - * Test the spouse relation. - * @throws Exception - */ - public void testSpouseRelation() throws Exception { - PersonRemote ph = personhome.findByPrimaryKey(new Integer(ID_L_ERIC)); - Integer iw = ph.retrieveSpouse(); - assertEquals("Wife of Laurent Eric: ", ID_JL_HELENE, iw.intValue()); - PersonRemote pw = personhome.findByPrimaryKey(iw); - Integer ih = pw.retrieveSpouse(); - assertEquals("Husband of Joanin-Laurent Helene: ", ID_L_ERIC, ih.intValue()); - PersonRemote pc = personhome.findByPrimaryKey(new Integer(ID_L_GUILHEM)); - Integer in = pc.retrieveSpouse(); - assertNull("Laurent Guilhem spouse: ", in); - } - - /** - * Test the guardian/is-guardian-of relation. - * @throws Exception - */ - public void testGuardianRelation() throws Exception { - Integer iLEric = new Integer(ID_L_ERIC); - PersonRemote ph = personhome.findByPrimaryKey(iLEric); - Collection c = ph.retrieveGuardianOf(); - assertEquals("Laurent Eric guardian of: ", 2, c.size()); - for (Iterator i = c.iterator(); i.hasNext();) { - Integer ip = (Integer) i.next(); - PersonRemote p = personhome.findByPrimaryKey(ip); - assertEquals("Guardian of " + p.getName() + ": ", iLEric, p.retrieveGuardian()); - } - } - - /** - * Test the parents/children relation. - * @throws Exception - */ - public void testParentsChildrenRelation() throws Exception { - Integer iLEric = new Integer(ID_L_ERIC); - PersonRemote ph = personhome.findByPrimaryKey(iLEric); - Collection cc = ph.retrieveChildren(); - assertEquals("Laurent Eric father of: ", 2, cc.size()); - for (Iterator i = cc.iterator(); i.hasNext();) { - Integer ip = (Integer) i.next(); - PersonRemote p = personhome.findByPrimaryKey(ip); - Collection cp = p.retrieveParents(); - assertTrue("Father of " + p.getName() + ": ", cp.contains(iLEric)); - } - } - - /** - * Test if a cmr null is 'null' - * @throws Exception - */ - public void testCmrNull() throws Exception { - PersonRemote ph = personhome.findByPrimaryKey(new Integer(ID_L_ERIC)); - assertTrue("CMR null is NOT null", ph.testCmrNull()); - } - - /** - * Verify the spy trace to check less database access are done - * @throws Exception - */ - public void testPrefetch() throws Exception { - //sleep(15000); - try { - utx.begin(); - Integer iLEric = new Integer(ID_L_ERIC); - PersonRemote ph = personhome.findByPrimaryKey(iLEric); - // If there is CMR prefetching, this may imply less database access - Collection cc = ph.retrieveChildrenNames(); - assertEquals("Laurent Eric father of: ", 2, cc.size()); - } finally { - utx.commit(); - } - } - - protected boolean initStateOK() throws Exception { - return true; - } - - public static Test suite() { - return new TestSuite(S_RcycleEC2.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new S_RcycleEC2(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_entity.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_entity.java deleted file mode 100644 index 97dd7fd8b4..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/entity/S_entity.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.entity; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This test suites collects all the suites that have testcases that fail with HSQLDB - * Beans used: annuaire, ebasic - * @author Philippe Coq, Philippe Durieux (jonas team) - */ -public class S_entity extends JTestCase { - - public S_entity(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(); - - suite.addTest(S_BasicEjbqlEC2.suite()); - suite.addTest(S_RcycleEC2.suite()); - suite.addTest(F_Relation_lcpEC2.suite()); - return suite; - } - - public static void main (String args[]) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/hotdeploy/F_EjbJarHotDeploy.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/hotdeploy/F_EjbJarHotDeploy.java deleted file mode 100644 index 4cf9e7d8ca..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/hotdeploy/F_EjbJarHotDeploy.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.objectweb.jonas.jtests.clients.hotdeploy; - -import junit.framework.*; - -import org.objectweb.jonas.jtests.util.JTestCase; -import org.objectweb.jonas.jtests.beans.hotdeploy.HotDeploy; -import org.objectweb.jonas.jtests.beans.hotdeploy.HotDeployHome; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -import javax.rmi.PortableRemoteObject; -import javax.naming.NamingException; - - - -public class F_EjbJarHotDeploy extends JTestCase { - - private static String BEAN_HOME = "HotDeployHome"; - private HotDeployHome bhome1 = null; - private HotDeployHome bhome2 = null; - private String jonasbase = null; - private String sep = File.separator; - - public F_EjbJarHotDeploy(String name) { - super(name); - } - - public static Test suite() { - return new TestSuite(F_EjbJarHotDeploy.class); - } - - public void setUp() { - super.setUp(); - jonasbase = System.getProperty("jonas.base"); - } - - private void copy(String source, String dest) throws IOException { - File src = new File(jonasbase + sep + "ejbjars" + sep + source); - File dst = new File(jonasbase + sep + "ejbjars" + sep + dest); - - FileInputStream is = new FileInputStream(src); - FileOutputStream os = new FileOutputStream(dst); - - byte[] b = new byte[1024]; - int t; - while ((t = is.read(b, 0, b.length - 1)) != -1) { - os.write(b, 0, t); - } - - } - - public void testBeanHotDeployTwice() throws Exception { - // copy $JONAS_BASE/ejbjars/hotdeploy1.jar -> $JONAS_BASE/ejbjars/hotdeploy.jar - System.err.println("Start Test"); - copy("hotdeploy1.jar", "hotdeploy.jar"); - System.err.println("Copy executed"); - useBeans("hotdeploy", false); - System.err.println("First Deployment OK"); - try { - bhome1 = (HotDeployHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), HotDeployHome.class); - } catch (NamingException e) { - fail("Cannot get HotDeployHome:" + e); - } - System.err.println("Home retrieved"); - - HotDeploy bean1 = bhome1.create(); - String envVal1 = bean1.getEnvString(); - int beanVal1 = bean1.getVersionNumber(); - int helperVal1 = bean1.getHelperClassVersionNumber(); - - System.err.println("getValues OK"); - unloadBeans("hotdeploy"); - System.err.println("Unload first"); - - // copy $JONAS_BASE/ejbjars/hotdeploy2.jar -> $JONAS_BASE/ejbjars/hotdeploy.jar - copy("hotdeploy2.jar", "hotdeploy.jar"); - - System.err.println("Copy Second jar"); - useBeans("hotdeploy", false); - System.err.println("Seconf Load OK"); - try { - bhome2 = (HotDeployHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), HotDeployHome.class); - } catch (NamingException e) { - fail("Cannot get HotDeployHome:" + e); - } - - HotDeploy bean2 = bhome2.create(); - String envVal2 = bean2.getEnvString(); - int beanVal2 = bean2.getVersionNumber(); - int helperVal2 = bean2.getHelperClassVersionNumber(); - unloadBeans("hotdeploy"); - - assertEquals("1.XML env String", "value1", envVal1); - assertEquals("1.Static bean attr", 1, beanVal1); - assertEquals("1.Static helper attr", 1, helperVal1); - - assertEquals("2.XML env String", "value2", envVal2); - assertEquals("2.Static bean attr", 2, beanVal2); - assertEquals("2.Static helper attr", 2, helperVal2); - - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_EjbJarHotDeploy(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_BasicMDB.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_BasicMDB.java deleted file mode 100644 index 7d85f95db9..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_BasicMDB.java +++ /dev/null @@ -1,610 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.jms; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; -import org.objectweb.jonas.jtests.beans.message.Sender; -import org.objectweb.jonas.jtests.beans.message.SenderHome; -import org.objectweb.jonas.jtests.beans.message.Sender1_1; -import org.objectweb.jonas.jtests.beans.message.Sender1_1Home; - -public class F_BasicMDB extends JTestCase { - - private static String BEAN_HOME = "messageSenderSFHome"; - private static String BEAN1_1_HOME = "messageSender1_1SFHome"; - protected static SenderHome home = null; - protected static Sender1_1Home home1 = null; - - public F_BasicMDB(String name) { - super(name); - } - - public SenderHome getHome() { - if (home == null) { - try { - home = (SenderHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SenderHome.class); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - return home; - } - - public Sender1_1Home getHome1() { - if (home1 == null) { - try { - home1 = (Sender1_1Home) PortableRemoteObject.narrow(ictx.lookup(BEAN1_1_HOME), Sender1_1Home.class); - } catch (NamingException e) { - fail("Cannot get bean home1"); - } - } - return home1; - } - - /** - * init environment: - * - load beans - * - create/init database for entities. - */ - protected void setUp() { - super.setUp(); - useBeans("message", true); - } - - // -------------------------------------------------------- - // Basic Tests on Topics - // -------------------------------------------------------- - - /** - * Basic test: Send 1 message on a topic - * 2 MDB are reading the topic. - * No tx. - */ - public void testBasicSendOnTopic1() throws Exception { - Sender s = getHome().create(); - int val = 200; - s.sendOnTopic("JunitTopic1", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a topic Durable - * 2 MDB are reading the topic. - * No tx. - */ - public void testBasicSendOnTopic2() throws Exception { - Sender s = getHome().create(); - int val = 200; - s.sendOnTopic("JunitTopic2", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send nb messages on a topic - * 2 MDB are reading the topic. - * No tx. - */ - public void testMultipleSendOnTopic1() throws Exception { - Sender s = getHome().create(); - int val = 210; - int nb = 10; - s.sendOnTopic("JunitTopic1", val, nb); - assertEquals(nb * 2, s.check(val, nb * 2, 4)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testBasicSendOnTopic1Tx() throws Exception { - Sender s = getHome().create(); - int val = 201; - s.sendOnTopicTx("JunitTopic1", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send n messages on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testMutipleSendOnTopic1Tx() throws Exception { - Sender s = getHome().create(); - int val = 211; - int nb = 10; - s.sendOnTopicTx("JunitTopic1", val, nb); - assertEquals(2 * nb, s.check(val, 2 * nb, 4)); - s.remove(); - } - - /** - * Basic test: send a message on a topic in a transaction committed - */ - public void testCommitSendOnTopic1() throws Exception { - - Sender s = getHome().create(); - int val = 206; - utx.begin(); - s.sendOnTopic("JunitTopic1", val, 1); - utx.commit(); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: send n message on a topic in a transaction committed - */ - public void testNCommitSendOnTopic1() throws Exception { - - Sender s = getHome().create(); - int val = 206; - int nb = 12; - utx.begin(); - s.sendOnTopic("JunitTopic1", val, nb); - utx.commit(); - assertEquals(2*nb, s.check(val, 2*nb, 4)); - s.remove(); - } - - /** - * Basic test: send more messages on a topic in a transaction committed - */ - public void testManySendOnTopic() throws Exception { - - Sender s = getHome().create(); - int val = 2060; - int nb = 120; - s.sendOnTopic("JunitTopic1", val, nb); - assertEquals(2*nb, s.check(val, 2*nb, 6)); - s.remove(); - } - - /** - * Basic test: Send more messages on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testManySendOnTopicTx() throws Exception { - Sender s = getHome().create(); - int val = 2110; - int nb = 100; - s.sendOnTopicTx("JunitTopic1", val, nb); - assertEquals(2 * nb, s.check(val, 2 * nb, 8)); - s.remove(); - } - - // -------------------------------------------------------- - // Basic Tests on Queues - // -------------------------------------------------------- - - /** - * Basic test: Send 1 message on a queue - * No tx, MDB transacted. - */ - public void testBasicSendOnQueue1() throws Exception { - - Sender s = getHome().create(); - int val = 100; - s.sendOnQueue("JunitQueue1", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send n messages on a queue - * No tx, MDB transacted. - */ - public void testMultipleSendOnQueue1() throws Exception { - Sender s = getHome().create(); - int val = 100; - int nb = 5; - s.sendOnQueue("JunitQueue1", val, nb); - assertEquals(nb, s.check(val, nb, 8)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * tx, MDB transacted. - */ - public void testBasicSendOnQueue1Tx() throws Exception { - Sender s = getHome().create(); - int val = 101; - s.sendOnQueueTx("JunitQueue1", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send nb messages on a queue - * tx, MDB transacted. - */ - public void testMultipleSendOnQueue1Tx() throws Exception { - Sender s = getHome().create(); - int val = 121; - int nb = 20; - s.sendOnQueueTx("JunitQueue1", val, nb); - assertEquals(nb, s.check(val, nb, 8)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * No tx, MDB not transacted. - */ - public void testBasicSendOnQueue2() throws Exception { - Sender s = getHome().create(); - int val = 102; - s.sendOnQueue("JunitQueue2", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * tx, MDB not transacted. - */ - public void testBasicSendOnQueue2Tx() throws Exception { - Sender s = getHome().create(); - int val = 103; - s.sendOnQueueTx("JunitQueue2", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction rolled back - * MDB not transacted. - */ - public void testRollbackSendOnQueue2() throws Exception { - Sender s = getHome().create(); - int val = 105; - utx.begin(); - s.sendOnQueue("JunitQueue2", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction committed - * MDB transacted. - */ - public void testCommitSendOnQueue1() throws Exception { - Sender s = getHome().create(); - int val = 106; - utx.begin(); - s.sendOnQueue("JunitQueue1", val, 1); - utx.commit(); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction committed - * MDB not transacted. - */ - public void testCommitSendOnQueue2() throws Exception { - Sender s = getHome().create(); - int val = 107; - utx.begin(); - s.sendOnQueue("JunitQueue2", val, 1); - utx.commit(); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - - // -------------------------------------------------------- - // Basic Tests on Topics (JMS1.1) - // -------------------------------------------------------- - - /** - * Basic test: Send 1 message on a topic - * 2 MDB are reading the topic. - * No tx. - */ - public void testBasicSendOnDestTopic1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 200; - s.sendOnDestination("JunitTopic1", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a topic Durable - * 2 MDB are reading the topic. - * No tx. - */ - public void testBasicSendOnDestTopic2() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 200; - s.sendOnDestination("JunitTopic2", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send nb messages on a topic - * 2 MDB are reading the topic. - * No tx. - */ - public void testMultipleSendOnDestTopic1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 210; - int nb = 10; - s.sendOnDestination("JunitTopic1", val, nb); - assertEquals(nb * 2, s.check(val, nb * 2, 8)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testBasicSendOnDestTopic1Tx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 201; - s.sendOnDestinationTx("JunitTopic1", val, 1); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: Send n messages on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testMutipleSendOnDestTopic1Tx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 211; - int nb = 10; - s.sendOnDestinationTx("JunitTopic1", val, nb); - assertEquals(2*nb, s.check(val, 2*nb, 4)); - s.remove(); - } - - /** - * Basic test: send a message on a topic in a transaction committed - */ - public void testCommitSendOnDestTopic1() throws Exception { - - Sender1_1 s = getHome1().create(); - int val = 206; - utx.begin(); - s.sendOnDestination("JunitTopic1", val, 1); - utx.commit(); - assertEquals(2, s.check(val, 2, 4)); - s.remove(); - } - - /** - * Basic test: send n message on a topic in a transaction committed - */ - public void testNCommitSendOnDestTopic1() throws Exception { - - Sender1_1 s = getHome1().create(); - int val = 206; - int nb = 12; - utx.begin(); - s.sendOnDestination("JunitTopic1", val, nb); - utx.commit(); - assertEquals(2 * nb, s.check(val, 2 * nb, 4)); - s.remove(); - } - - /** - * Basic test: send more messages on a topic in a transaction committed - */ - public void testManySendOnDestTopic() throws Exception { - - Sender1_1 s = getHome1().create(); - int val = 2061; - int nb = 100; - s.sendOnDestination("JunitTopic1", val, nb); - assertEquals(2*nb, s.check(val, 2*nb, 8)); - s.remove(); - } - - /** - * Basic test: Send more messages on a topic - * 2 MDB are reading the topic. - * tx. - */ - public void testManySendOnDestTopicTx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 2111; - int nb = 100; - s.sendOnDestinationTx("JunitTopic1", val, nb); - assertEquals(2 * nb, s.check(val, 2 * nb, 8)); - s.remove(); - } - - // -------------------------------------------------------- - // Basic Tests on Queues (JMS1.1) - // -------------------------------------------------------- - - /** - * Basic test: Send 1 message on a queue - * No tx, MDB transacted. - */ - public void testBasicSendOnDestQueue1() throws Exception { - - Sender1_1 s = getHome1().create(); - int val = 100; - s.sendOnDestination("JunitQueue1", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send n messages on a queue - * No tx, MDB transacted. - */ - public void testMultipleSendOnDestQueue1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 100; - int nb = 20; - s.sendOnDestination("JunitQueue1", val, nb); - assertEquals(nb, s.check(val, nb, 8)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * tx, MDB transacted. - */ - public void testBasicSendOnDestQueue1Tx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 101; - s.sendOnDestinationTx("JunitQueue1", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send nb messages on a queue - * tx, MDB transacted. - */ - public void testMultipleSendOnDestQueue1Tx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 121; - int nb = 20; - s.sendOnDestinationTx("JunitQueue1", val, nb); - assertEquals(nb, s.check(val, nb, 8)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * No tx, MDB not transacted. - */ - public void testBasicSendOnDestQueue2() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 102; - s.sendOnDestination("JunitQueue2", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Basic test: Send 1 message on a queue - * tx, MDB not transacted. - */ - public void testBasicSendOnDestQueue2Tx() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 103; - s.sendOnDestinationTx("JunitQueue2", val, 1); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction rolled back - * MDB not transacted. - */ - public void testRollbackSendOnDestQueue2() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 105; - utx.begin(); - s.sendOnDestination("JunitQueue2", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction committed - * MDB transacted. - */ - public void testCommitSendOnDestQueue1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 106; - utx.begin(); - s.sendOnDestination("JunitQueue1", val, 1); - utx.commit(); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - /** - * Basic test: send a message on a queue in a transaction committed - * MDB not transacted. - */ - public void testCommitSendOnDestQueue2() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 107; - utx.begin(); - s.sendOnDestination("JunitQueue2", val, 1); - utx.commit(); - assertEquals(1, s.check(val, 1, 4)); - s.remove(); - } - - - - /** - * Run all the tests - */ - public static Test suite() { - return new TestSuite(F_BasicMDB.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_BasicMDB(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_RollbackMDB.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_RollbackMDB.java deleted file mode 100644 index e54dabc19a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/jms/F_RollbackMDB.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.jms; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; -import org.objectweb.jonas.jtests.beans.message.Sender; -import org.objectweb.jonas.jtests.beans.message.SenderHome; -import org.objectweb.jonas.jtests.beans.message.Sender1_1; -import org.objectweb.jonas.jtests.beans.message.Sender1_1Home; - -public class F_RollbackMDB extends JTestCase { - - private static String BEAN_HOME = "messageSenderSFHome"; - - private static String BEAN1_1_HOME = "messageSender1_1SFHome"; - - protected static SenderHome home = null; - - protected static Sender1_1Home home1 = null; - - public F_RollbackMDB(String name) { - super(name); - } - - public SenderHome getHome() { - if (home == null) { - try { - home = (SenderHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SenderHome.class); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - return home; - } - - public Sender1_1Home getHome1() { - if (home1 == null) { - try { - home1 = (Sender1_1Home) PortableRemoteObject.narrow(ictx.lookup(BEAN1_1_HOME), Sender1_1Home.class); - } catch (NamingException e) { - fail("Cannot get bean home1"); - } - } - return home1; - } - - /** - * init environment: - load beans - create/init database for entities. - */ - protected void setUp() { - super.setUp(); - useBeans("message", true); - } - - // -------------------------------------------------------- - // Tests Rollback - // -------------------------------------------------------- - - /** - * send a message on a topic in a transaction rolled back - */ - public void testRollbackSendOnTopic1() throws Exception { - Sender s = getHome().create(); - int val = 204; - utx.begin(); - s.sendOnTopic("JunitTopic1", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 2, 4)); - s.remove(); - } - - /** - * send a message on a topic in a transaction rolled back via Sender1_1SF - * and JMS1.1 interfaces - */ - public void testRollbackSendOnDestTopic1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 204; - utx.begin(); - s.sendOnDestination("JunitTopic1", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 2, 4)); - s.remove(); - } - - /** - * send a message on a queue in a transaction rolled back MDB transacted. - */ - public void testRollbackSendOnQueue1() throws Exception { - Sender s = getHome().create(); - int val = 104; - utx.begin(); - s.sendOnQueue("JunitQueue1", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 1, 4)); - s.remove(); - } - - /** - * send a message on a queue in a transaction rolled back MDB transacted. - * via Sender1_1SF and JMS1.1 interfaces - */ - public void testRollbackSendOnDestQueue1() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 104; - utx.begin(); - s.sendOnDestination("JunitQueue1", val, 1); - utx.rollback(); - assertEquals(0, s.check(val, 1, 4)); - s.remove(); - } - - /** - * Test that it's possible to set rollback only in a message driven 2 MDB - * are listening queue3, but 1 of them rollback all messages. So, we should - * receive all messages by the commiting MDB. - */ - public void testRollbackOnlyOnQueue3() throws Exception { - Sender s = getHome().create(); - int val = 114; - int nb = 25; - s.sendOnQueue("JunitQueue3", val, nb); - assertEquals(nb, s.check(val, nb, 10)); - s.remove(); - } - - /** - * Test that it's possible to set rollback only in a message driven 2 MDB - * are listening queue3, but 1 of them rollback all messages. So, we should - * receive all messages by the commiting MDB. via Sender1_1SF and JMS1.1 - * interfaces - */ - public void testRollbackOnlyOnDestQueue3() throws Exception { - Sender1_1 s = getHome1().create(); - int val = 114; - int nb = 25; - s.sendOnDestination("JunitQueue3", val, nb); - assertEquals(nb, s.check(val, nb, 10)); - s.remove(); - } - - /** - * Run all the tests - */ - public static Test suite() { - return new TestSuite(F_RollbackMDB.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_RollbackMDB(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/F_Connectors.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/F_Connectors.java deleted file mode 100644 index 5c5c9986ea..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/F_Connectors.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.management; - -import java.net.MalformedURLException; -import java.net.URI; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Properties; - -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.InitialContext; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.ow2.carol.util.configuration.ConfigurationRepository; -import org.ow2.carol.util.configuration.ProtocolConfiguration; - -import org.objectweb.jonas.jtests.util.JTestCase; - -/** -* JMX Service test suite -* -* @author Adriana Danes -* -*/ - -public class F_Connectors extends JTestCase { - - /** - * Constructor - */ - public F_Connectors(String name) { - super(name); - } - - /** - * init environment - */ - protected void setUp() { - super.setUp(); - } - - /** - * This suite is all test cases - */ - public static Test suite() { - return new TestSuite(F_Connectors.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_Connectors(testtorun)); - } - } - - public void testConnectJmxRemote() throws Exception { - // Prepare ObjectName for J2EEServer MBean - // This is a well known MBeans which should be registered in the MBean Server - String sOn = jonasName + ":j2eeType=J2EEServer,name=" + jonasName; - ObjectName on = null; - try { - on = ObjectName.getInstance(sOn); - } catch (MalformedObjectNameException e) { - // Can't test the connection if no ObjectName - fail("Can't create ObjectName for J2EEServer MBean using String: " + sOn); - } - - // Determine protocols used by Carol and their configuration - ProtocolConfiguration[] protocolConfigurations = ConfigurationRepository.getConfigurations(); - Properties myCarolConfig = new Properties(); - for (int c = 0; c < protocolConfigurations.length; c++) { - String protocol = protocolConfigurations[c].getName(); - //if (!protocol.equals("cmi")) { - myCarolConfig.setProperty(protocol, protocolConfigurations[c].getProviderURL()); - //} - } - - int nbProtocols = myCarolConfig.size(); - if (nbProtocols == 0) { - fail("Can't find any protocol in Carol configuration"); - } - boolean foundJ2EEServerMBean = true; - for (Iterator it = myCarolConfig.keySet().iterator(); it.hasNext();) { - String carolProtocol = (String) it.next(); - String sCarolURL = (String) myCarolConfig.get(carolProtocol); - URI carolURL = new URI(sCarolURL); - int portNb = carolURL.getPort(); - String port = String.valueOf(portNb); - String url = null; - Map env = null; - if (carolProtocol.equals("jrmp")) { - // Treat JRMP case - url = "service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jrmpconnector_" + jonasName; - } else if (carolProtocol.equals("iiop")) { - // Treat IIOP case - url = "service:jmx:iiop:///jndi/iiop://localhost:" + port + "/iiopconnector_" + jonasName; - env = new HashMap(); - env.put("java.naming.corba.orb", new InitialContext().lookup("java:comp/ORB")); - } else if (carolProtocol.equals("cmi")) { - // Treat CMI - url = "service:jmx:rmi:///jndi/cmi://localhost:" + port + "/cmiconnector_" + jonasName; - } else { - continue; - } - //System.out.println("===Use URL=== " + url); - // Try to connect to the MBeanServer - JMXServiceURL connURL = null; - try { - connURL = new JMXServiceURL(url); - } catch (MalformedURLException e) { - fail("Can't create JMXServiceURL with string: " + url); - } - JMXConnector connector = null; - try { - connector = JMXConnectorFactory.newJMXConnector(connURL, env); - } catch (MalformedURLException e1) { - fail("there is no provider for the protocol in " + url); - } catch (java.io.IOException e) { - fail("Connector client cannot be made because of a communication problem (used URL: " + url + ")"); - } - MBeanServerConnection currentServerConnection = null; - try { - connector.connect(env); - currentServerConnection = connector.getMBeanServerConnection(); - } catch (java.io.IOException ioe) { - fail("connection could not be made because of a communication problem"); - } - // Look up J2EEServer MBean in the MBeanServer - try { - foundJ2EEServerMBean = currentServerConnection.isRegistered(on); - } catch (java.io.IOException ioe) { - fail("Connected, via " + carolProtocol + ", but can't find MBean " + on.toString() + " in the MBeanServer"); - } - - } - assertTrue(foundJ2EEServerMBean); - } -} \ No newline at end of file diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/README b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/README deleted file mode 100644 index be26c54ab7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/management/README +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains test suite for jmx service. -It tests JSR 160 connectors. -C_management -> F_Connectors -F_Connectors tests connection via jrmp and/or iiop corresponding to Carol configuration - It uses contracted URLs. -F_JeremieConnectors tests connection for jeremie protocol if this protocol is in Carol Config - It uses classic jmx service URL definition and uses a non null environment - variable to establish connection. - -JOnAS implementation dependencies (considered hypothesis) -- management domain name used in J2EEServer MBean's ObjectName creation is supposed -to be equal to the server's name (jonasName). -- JEREMIE test only: port number used in the service URL is obtained by adding 5 to - the port number used by the naming service \ No newline at end of file diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/A_AccessControl.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/A_AccessControl.java deleted file mode 100644 index 00e5703546..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/A_AccessControl.java +++ /dev/null @@ -1,395 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.security; - - -import java.rmi.RemoteException; -import java.util.Hashtable; -import java.util.Vector; - -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -import org.objectweb.jonas.jtests.beans.secured.BaseS; -import org.objectweb.jonas.jtests.util.JTestCase; - - -/** - * Security Management common tests for all type of beans (Entity/Session) - * - * @author Ph.Coq, Ph.Durieux - * - */ - -public abstract class A_AccessControl extends JTestCase { - - protected static String PRINCIPAL1_NAME = "principal1"; - protected static String PRINCIPAL3_NAME = "principal3"; - protected static String ROLE1_NAME = "baserole1"; - protected static String ROLE2_NAME = "baserole2"; - - protected static SecurityCurrent current = null; - protected static SecurityContext principal1 = null; - protected static SecurityContext principal2 = null; - protected static SecurityContext principal3 = null; - protected static SecurityContext principal4 = null; - - - public A_AccessControl(String name) { - super(name); - } - - /** - * init environment: - * - load beans - */ - protected void setUp() { - super.setUp(); - if (current == null) { - current = SecurityCurrent.getCurrent(); - principal1 = new SecurityContext("principal1", new String[] {"role1"}); - principal2 = new SecurityContext("principal2", new String[] {"role2"}); - String[] roles3 = new String[]{"role1", "role3"}; - principal3 = new SecurityContext(PRINCIPAL3_NAME, roles3); - String[] roles4 = new String[]{"role2"}; - principal4 = new SecurityContext("principal4", roles4); - } - } - - public abstract BaseS getBaseS(String name) throws Exception; - public abstract void removeBaseS(String name) throws Exception; - - /** - * test getCallerPrincipal. - * The Principal must be propagated. - */ - public void testGetCallerPrincipal() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("un"); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalName()); - sl.remove(); - } - - /** - * test isCallerInRole. - * principal1 = role1 - * principal2 = role2 - */ - public void testIsCallerInRole() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("deux"); - assertTrue(sl.isCallerInRole(ROLE1_NAME) == true); - assertTrue(sl.isCallerInRole(ROLE2_NAME) == false); - sl.remove(); - } - - /** - * test testIsCallerInRoleRolesInContext. - * principal1 = role1 (jonas-users.properties) - * principal2 = role2 (jonas-users.properties) - * principal3 = role1, role3 (role with security context) - * principal4 = role2 (role with security context) - */ - public void testIsCallerInRoleRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("deuxbis"); - assertTrue(sl.isCallerInRole(ROLE1_NAME) == true); - assertTrue(sl.isCallerInRole(ROLE2_NAME) == false); - sl.remove(); - } - - /** - * test basic method reject - */ - public void testBasicMethodReject() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("trois"); - try { - sl.simpleMethod(); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } - sl.remove(); - } - - /** - * test basic method reject - */ - public void testBasicMethodRejectRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("troisbis"); - try { - sl.simpleMethod(); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } - sl.remove(); - } - - - /** - * test basic method accept - */ - public void testBasicMethodAccept() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("quatre"); - sl.simpleMethod(); - sl.remove(); - } - - /** - * test basic method accept - */ - public void testBasicMethodAcceptRolesInContext() throws Exception { - current.setSecurityContext(principal4); - BaseS sl = getBaseS("quatrebis"); - sl.simpleMethod(); - sl.remove(); - } - - /** - * test complex method reject - */ - public void testComplexMethodReject() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("cinq"); - try { - Hashtable ht = new Hashtable(); - ht.put("foo", new Vector(10)); - ht.put("bar", new Hashtable()); - Object[] o = {"bar", new Hashtable(), new Vector()}; - sl.complexMethod(ht, o); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } - sl.remove(); - } - - /** - * test complex method reject - */ - public void testComplexMethodRejectRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("cinqbis"); - try { - Hashtable ht = new Hashtable(); - ht.put("foo", new Vector(10)); - ht.put("bar", new Hashtable()); - Object[] o = {"bar", new Hashtable(), new Vector()}; - sl.complexMethod(ht, o); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } - sl.remove(); - } - - /** - * test complex method accept - */ - public void testComplexMethodAccept() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("six"); - Hashtable ht = new Hashtable(); - ht.put("foo", new Vector(10)); - ht.put("bar", new Hashtable()); - Object[] o = {"bar", new Hashtable(), new Vector()}; - sl.complexMethod(ht, o); - sl.remove(); - } - - /** - * test complex method accept - */ - public void testComplexMethodAcceptRolesInContext() throws Exception { - current.setSecurityContext(principal4); - BaseS sl = getBaseS("sixbis"); - Hashtable ht = new Hashtable(); - ht.put("foo", new Vector(10)); - ht.put("bar", new Hashtable()); - Object[] o = {"bar", new Hashtable(), new Vector()}; - sl.complexMethod(ht, o); - sl.remove(); - } - - /** - * test security-role-ref in DD - * baserole -> role1 - */ - public void testSecurityRoleRef() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("sept"); - assertTrue(sl.isCallerInRole(ROLE1_NAME) == true); - sl.remove(); - } - - /** - * test security-role-ref in DD - * baserole -> role1 - */ - public void testSecurityRoleRefRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("septbis"); - assertTrue(sl.isCallerInRole(ROLE1_NAME) == true); - sl.remove(); - } - - /** - * test principal propagation from bean to bean - */ - public void testBeanToBeanPropagation() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("sept"); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalNameOfAnotherBean()); - sl.remove(); - } - - /** - * test principal propagation from bean to bean - */ - public void testBeanToBeanPropagationRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("sept"); - assertEquals(PRINCIPAL3_NAME, sl.getPrincipalNameOfAnotherBean()); - sl.remove(); - } - - /** - * test principal propagation from bean to bean and access is denied - */ - public void testRejectBeanToBeanAccess() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("huit"); - try { - sl.getPrincipalNameOfAnotherBean(); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } finally { - // sl should have been discarded. - removeBaseS("huit"); - } - } - - /** - * test principal propagation from bean to bean and access is denied - */ - public void testRejectBeanToBeanAccessRolesInContext() throws Exception { - current.setSecurityContext(principal4); - BaseS sl = getBaseS("huitbis"); - try { - sl.getPrincipalNameOfAnotherBean(); - fail("should be rejected: not in the role"); - } catch (RemoteException e) { - } finally { - // sl should have been discarded. - removeBaseS("huitbis"); - } - } - - /** - * test accept access to a local method - * callAnotherMethod is called with role1 and call DerivedSF.anotheMethod with this role - * return false if access to anotheMethod was denied - * expected return is true - */ - public void testLocalMethodAccept() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("neuf"); - assertTrue(sl.callAnotherMethod() == true); - sl.remove(); - } - - /** - * test accept access to a local method - * callAnotherMethod is called with role1 and call DerivedSF.anotheMethod with this role - * return false if access to anotheMethod was denied - * expected return is true - */ - public void testLocalMethodAcceptRolesInContext() throws Exception { - current.setSecurityContext(principal3); - BaseS sl = getBaseS("neufbis"); - assertTrue(sl.callAnotherMethod() == true); - sl.remove(); - } - - /** - * test reject access to a local method - * callAnotherMethod is called with role1 and call DerivedSF.anotheMethod with this role - * return false if access to anotheMethod was denied - * expected return is true - */ - public void testLocalMethodReject() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("dix"); - assertTrue(sl.callAnotherMethod() == false); - sl.remove(); - } - - /** - * test reject access to a local method - * callAnotherMethod is called with role1 and call DerivedSF.anotheMethod with this role - * return false if access to anotheMethod was denied - * expected return is true - */ - public void testLocalMethodRejectRolesInContext() throws Exception { - current.setSecurityContext(principal4); - BaseS sl = getBaseS("dixbis"); - assertTrue(sl.callAnotherMethod() == false); - sl.remove(); - } - - /** - * test on an exluded method (excluded list) - */ - public void testExcludedMethod() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("excluded"); - try { - sl.excludedMethod(); - fail("should be excluded"); - } catch (RemoteException e) { - } - sl.remove(); - } - - /** - * test timeout - */ - public void testTimeout() throws Exception { - current.setSecurityContext(principal2); - int duration = 5; - BaseS sl = getBaseS("timed"); - try { - int oldval = sl.getTimerCount(); - sl.setTimer(duration, 0, 0); - sleep(2000); - assertEquals("timer expired too quickly", oldval, sl.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, sl.getTimerCount()); - } finally { - sl.remove(); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/B_AccessControl.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/B_AccessControl.java deleted file mode 100644 index e7bf4d66e6..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/B_AccessControl.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.security; - - -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -import org.objectweb.jonas.jtests.beans.secured.BaseS; -import org.objectweb.jonas.jtests.util.JTestCase; - - -/** - * Security Management common tests for all type of beans (Entity/Session) - * - * @author Ph.Coq, Ph.Durieux - * - */ - -public abstract class B_AccessControl extends JTestCase { - - protected static String PRINCIPAL1_NAME = "principal1"; - protected static String PRINCIPAL3_NAME = "principal3"; - protected static String ROLE1_NAME = "baserole1"; - protected static String ROLE2_NAME = "baserole2"; - - protected static SecurityCurrent current = null; - protected static SecurityContext principal1 = null; - protected static SecurityContext principal2 = null; - protected static SecurityContext principal3 = null; - protected static SecurityContext principal4 = null; - - - public B_AccessControl(String name) { - super(name); - } - - /** - * init environment: - * - load beans - */ - protected void setUp() { - super.setUp(); - if (current == null) { - current = SecurityCurrent.getCurrent(); - principal1 = new SecurityContext("principal1"); - principal2 = new SecurityContext("principal2"); - String[] roles3 = new String[]{"role1", "role3"}; - principal3 = new SecurityContext(PRINCIPAL3_NAME, roles3); - String[] roles4 = new String[]{"role2"}; - principal4 = new SecurityContext("principal4", roles4); - } - } - - public abstract BaseS getBaseS(String name) throws Exception; - - /** - * test getCallerPrincipal. - * The Principal must be propagated. - */ - public void testGetCallerPrincipal() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("un"); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalName()); - sl.remove(); - } - - /** - * test isCallerInRole. - * principal1 = role1 - * principal2 = role2 - */ - public void testIsCallerInRole() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("deux"); - assertTrue(sl.isCallerInRole(ROLE1_NAME) == true); - assertTrue(sl.isCallerInRole(ROLE2_NAME) == false); - sl.remove(); - } - - - - - /** - * test basic method accept - */ - public void testBasicMethodAccept() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseS("quatre"); - sl.simpleMethod(); - sl.remove(); - } - - - - - /** - * test principal propagation from bean to bean - */ - public void testBeanToBeanPropagation() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseS("sept"); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalNameOfAnotherBean()); - sl.remove(); - } - - - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/F_RunAs.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/F_RunAs.java deleted file mode 100644 index 3faccabd2f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/security/F_RunAs.java +++ /dev/null @@ -1,458 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.security; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.Topic; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicPublisher; -import javax.jms.TopicSession; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.lib.security.context.SecurityContext; -import org.ow2.jonas.lib.security.context.SecurityCurrent; - -import org.objectweb.jonas.jtests.beans.secured.BaseS; -import org.objectweb.jonas.jtests.beans.secured.BaseSHome; -import org.objectweb.jonas.jtests.beans.secured.Session1; -import org.objectweb.jonas.jtests.beans.secured.Session1Home; -import org.objectweb.jonas.jtests.util.JTestCase; -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * Security Management Suite with a stateless session as first bean - * Test the run-as element - * - * @author Florent Benoit - * - */ - -public class F_RunAs extends JTestCase { - - - /** - * Bean RunAs - */ - private static String BEAN_HOME_RUNAS = "securedBaseRunAsSLHome"; - - /** - * Bean without RunAs - */ - private static String BEAN_HOME_NO_RUNAS = "securedBaseNoRunAsSLHome"; - - - /** - * Name of the principal 1 - */ - protected static String PRINCIPAL1_NAME = "principal1"; - - /** - * Name of the principal 2 - */ - protected static String PRINCIPAL2_NAME = "principal2"; - - /** - * Name of the role 1 - */ - protected static String ROLE1_NAME = "role1"; - - /** - * Name of the role 2 - */ - protected static String ROLE2_NAME = "role2"; - - /** - * Home runAs - */ - protected static BaseSHome runAsHome = null; - - /** - * Home no runAs - */ - protected static BaseSHome noRunAsHome = null; - - /** - * Current - */ - protected static SecurityCurrent current = null; - - /** - * principal 1 - */ - protected static SecurityContext principal1 = null; - - /** - * principal 2 - */ - protected static SecurityContext principal2 = null; - - - /** - * Constructor - */ - public F_RunAs(String name) { - super(name); - } - - /** - * Return the Home runAs - */ - public BaseSHome getRunAsHome() { - if (runAsHome == null) { - try { - runAsHome = (BaseSHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_RUNAS), BaseSHome.class); - } catch (NamingException e) { - fail("Cannot get bean home " + BEAN_HOME_RUNAS); - } - } - return runAsHome; - } - - /** - * Return the Home no runAs - */ - public BaseSHome getNoRunAsHome() { - if (noRunAsHome == null) { - try { - noRunAsHome = (BaseSHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME_NO_RUNAS), BaseSHome.class); - } catch (NamingException e) { - fail("Cannot get bean home " + BEAN_HOME_NO_RUNAS); - } - } - return noRunAsHome; - } - - public BaseS getBaseRunAs() throws Exception { - return getRunAsHome().create(); - } - - public BaseS getBaseNoRunAs() throws Exception{ - return getNoRunAsHome().create(); - } - - /** - * init environment: - * - load beans - */ - protected void setUp() { - super.setUp(); - if (current == null) { - current = SecurityCurrent.getCurrent(); - String[] roles1 = new String[]{ROLE1_NAME}; - principal1 = new SecurityContext(PRINCIPAL1_NAME, roles1); - String[] roles2 = new String[]{ROLE2_NAME}; - principal2 = new SecurityContext(PRINCIPAL2_NAME, roles2); - } - useBeans("secured", true); - } - - - /** - * This suite is all BMP test cases - */ - public static Test suite() { - return new TestSuite(F_RunAs.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_RunAs(testtorun)); - } - } - - - - /** - * Test the call on a bean which call another bean without any runAs - * The principal must be propagated - */ - public void testNoRunAsAtAll() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = getBaseNoRunAs(); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalName()); - assertTrue(sl.isCallerInRole(ROLE1_NAME)); - sl.callBeanNoRunAsWithRole1(); - sl.remove(); - } - - - - /** - * Test the call on a bean which call another bean. - * First bean need to have a run-as access, but not the second - * The principal must be propagated - */ - public void testRunAsAndNoRunAs() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = null; - try { - sl = getBaseRunAs(); - } catch (Exception e) { - fail("Create failed. Role used to access this bean must be role2"); - } - assertEquals(PRINCIPAL2_NAME, sl.getPrincipalName()); - assertTrue(sl.isCallerInRole(ROLE2_NAME)); - boolean b = sl.callBeanNoRunAsWithRole2(); - if (!b) { - fail("Cannot call another bean as role for calling the method must be role1 (run-as on the current bean) and not role2 (principal role)"); - } - sl.remove(); - } - - /** - * Test the run-as with a Timer - * First bean implements TimedObject and has the run-as set. - * Timeout method calls another bean method protected - * @throws Exception Unexpected Test error - */ - public void testRunAsOnTimer() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = getBaseRunAs(); - int duration = 5; - try { - int oldval = sl.getTimerCount(); - sl.setTimer(duration, 0, 2); - sleep(2000); - assertEquals("timer expired too quickly", oldval, sl.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, sl.getTimerCount()); - } finally { - sl.remove(); - } - } - - /** - * Test the call on a bean which call another bean. - * First bean don't need to have a run-as access, but the second does - * The principal must be propagated - */ - public void testnoRunAsAndRunAs() throws Exception { - current.setSecurityContext(principal1); - BaseS sl = null; - sl = getBaseNoRunAs(); - assertEquals(PRINCIPAL1_NAME, sl.getPrincipalName()); - assertTrue(sl.isCallerInRole(ROLE1_NAME)); - boolean b = sl.callBeanRunAsWithRole1(); - if (!b) { - fail("Current role is role1 and the bean which is called need to have role2"); - } - sl.remove(); - } - - - - /** - * Test the call on a bean which call another bean. - * First bean need to have a run-as access and the second too - * First run-as is role1 ,second run-as is role3 - * so the test works if there is an access denied in second bean - * The principal must be propagated - */ - public void testRunAsChain() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = null; - try { - sl = getBaseRunAs(); - } catch (Exception e) { - fail("Create failed. Maybe role used is role1 but it must be role2 as this bean has got a run-as attribute with role2"); - } - assertEquals(PRINCIPAL2_NAME, sl.getPrincipalName()); - assertTrue(sl.isCallerInRole(ROLE2_NAME)); - boolean b = sl.callBeanRunAsWithRole2(); - if (!b) { - fail("Current role is role2 and the bean which is called has got a run as with role1. The next bean need role 2."); - } - sl.remove(); - } - - - /** - * Test the call on a bean which call another bean, etc - * First bean need role2 and has a run-as - * After calling a runas bean, it call a no-run as bean - * First run-as is role2 ,second run-as is role3 and last call is done on a without runas - * The principal must be propagated - */ - public void testRunAsMultipleChain() throws Exception { - current.setSecurityContext(principal2); - BaseS sl = null; - try { - sl = getBaseRunAs(); - } catch (Exception e) { - fail("Create failed. Maybe role used is role1 but it must be role2 as this bean has got a run-as attribute with role2"); - } - assertEquals(PRINCIPAL2_NAME, sl.getPrincipalName()); - assertTrue(sl.isCallerInRole(ROLE2_NAME)); - boolean b = sl.callBeanRunAsWithRole2(); - if (!b) { - fail("Current role is role2 and the bean which is called has got a run as with role1. The next bean require role1 so it must work"); - } - - b = sl.callBeanNoRunAsWithRole2(); - if (!b) { - fail("Current role is role2 and the bean which is called has got a run as with role1. The next bean require role1 so it must work"); - } - - sl.remove(); - } - - /** - * Test call on protected beans, some beans have run-as roles - * It also use LoginContext to authenticate - * This test come from user Alexander Daryin - * This testcase test the problem of the order in ejb-jar.xml of the permissions - */ - public void testRunAsAndSecurityOrderDeclaration() throws Exception { - current.setSecurityContext(principal1); - final Session1Home home = (Session1Home) PortableRemoteObject.narrow(ictx.lookup("securedSession1EJB"), Session1Home.class); - final Session1 bean = home.create(); - String resultTest = bean.test(); - if (!("value".equals(resultTest))) { - fail("The return value must be 'value' instead of '" + resultTest + "'"); - } - - - } - - - /** - * Send a message to a MDB which create another bean with its run-as role - * MDB send to a queue the answer to see if the test is ok or fail - */ - public void testRunAsJms() throws Exception { - current.setSecurityContext(principal2); - - TopicConnectionFactory tcf = null; - TopicConnection tc = null; - // Lookup Connection Factories - try { - tcf = (TopicConnectionFactory) ictx.lookup("JTCF"); - } catch (NamingException e) { - fail("Cannot lookup Connection Factories"); - } - - // Create Connections - try { - tc = tcf.createTopicConnection(); - } catch (JMSException e) { - fail("Cannot create connections"); - } - - TopicSession ss = null; - try { - ss = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - } catch (JMSException e) { - fail("Cannot create Session: " + e); - } - - Topic topic = null; - try { - topic = (Topic) ictx.lookup("runAsTopic"); - } catch (Exception e) { - fail("Cannot lookup Topic: " + e); - } - - - // Create the TopicPublisher - TopicPublisher publisher = null; - try { - publisher = ss.createPublisher(topic); - } catch (JMSException e) { - fail("Cannot create TopicPublisher: " + e); - } - - // Publish messages on the queue - try { - MapMessage mess = ss.createMapMessage(); - mess.setString("Id", "test"); - publisher.publish(mess); - } catch (JMSException e) { - fail("Cannot send message: " + e); - } - - // No close else it fails with JDK 1.3 - try { - ss.close(); - tc.close(); - } catch (JMSException e) { - fail("Cannot close session: "+e); - } - - - // Now receive the message to test if the test is ok or not - String msgtxt = null; - try { - ConnectionFactory cf = (ConnectionFactory) ictx.lookup("JCF"); - Queue queue = (Queue) ictx.lookup("sampleQueue"); - Connection conn = cf.createConnection(); - Session sess = conn.createSession(true, Session.AUTO_ACKNOWLEDGE); - MessageConsumer mc = sess.createConsumer((Destination) queue); - conn.start(); - Message message = (Message) mc.receive(10000); - if (message == null) { - fail("Can not receive message"); - } - msgtxt = message.getStringProperty("testRunAsJms"); - sess.close(); - conn.close(); - } catch (Exception e) { - fail("Can not get answer of the jms " + e); - } - - if (msgtxt == null) { - fail("No message received from the bean"); - } - - if (!msgtxt.equals("ok")) { - fail("The test is not ok : " + msgtxt); - } - - - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/session/F_Smt.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/session/F_Smt.java deleted file mode 100644 index 4860d9493e..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/session/F_Smt.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.session; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.beans.bmt.Moscone; -import org.objectweb.jonas.jtests.beans.bmt.MosconeHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -public class F_Smt extends JTestCase { - - protected static MosconeHome home = null; - - public F_Smt(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - useBeans("bmt", true); // must create tables (no entity bean) - useBeans("applimet", true); // must create tables (no entity bean) - } - - public MosconeHome getHome() throws Exception { - if (home == null) { - home = (MosconeHome) PortableRemoteObject.narrow(ictx.lookup("MosconeSTHome"), MosconeHome.class); - } - assertTrue(home != null); - return home; - } - - public void testSpanTx() throws Exception { - Moscone m = getHome().create(); - m.tx_start(); - m.tx_commit(); - m.remove(); - } - - public void testEnlistConn1() throws Exception { - Moscone m = getHome().create(); - m.moscone1(); - m.remove(); - } - - public void testEnlistConn2() throws Exception { - Moscone m = getHome().create(); - m.moscone2(); - m.remove(); - } - - public static Test suite() { - return new TestSuite(F_Smt.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_Smt(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_Timer.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_Timer.java deleted file mode 100644 index eb29d360d1..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_Timer.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.timer; - -import java.util.Date; - -import javax.ejb.TimerHandle; -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * This is test of the TimerService. - * tests here are common to entity and session beans. - * beans used : transacted - * @author Philippe Durieux (jonas team) - */ -public abstract class A_Timer extends JTestCase { - - /** - * constructor - * @param name name of the test suite. - */ - public A_Timer(String name) { - super(name); - } - - /** - * Sets up the fixture, here load the beans if not loaded yet. - * This method is called before a test is executed. - */ - protected void setUp() { - super.setUp(); - useBeans("transacted", true); - } - - /** - * Get an instance of the bean. - * This method depends on the home used to get it. - * For entity bean, the arg is used to get a particular instance. - * For session beans, we get any session bean from the pool. - */ - public abstract Simple getSimple(int i) throws Exception; - - // -------------------------------------------------------------------- - // test cases - // -------------------------------------------------------------------- - - /** - * Test single-event timer - */ - public void testTimer1() throws Exception { - int duration = 5; - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimer(duration, 0); - sleep(2000); - assertEquals("timer expired too quickly", oldval, s.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * Test with absolute time - */ - public void testTimerA1() throws Exception { - Date d = new Date(System.currentTimeMillis() + 1000); - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimer(d, 0); - sleep(2000); - assertEquals("timer did not expired", oldval + 1, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * Test with absolute time (for persistent timer test) - */ - public void testTimerAin4mn() throws Exception { - Date d = new Date(System.currentTimeMillis() + 4000 * 60); - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimer(d, 0); - } finally { - // Remove this line for persistent timers tests - s.remove(); - } - } - - /** - * Test periodic timer - * Can be used also to test persistent timers. - */ - public void testTimer2() throws Exception { - int duration = 5; - int period = 7; - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimer(duration, period); - sleep(2000); - assertEquals("timer expired too quickly", oldval, s.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, s.getTimerCount()); - sleep(period * 1000); - assertEquals("timer did not expired twice", oldval + 2, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * Test single-event timer Handle - */ - public void testTimerHandle1() throws Exception { - int duration = 5; - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimerGetHandle(duration, 0); - sleep(2000); - assertEquals("timer expired too quickly", oldval, s.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * Test periodic timer Handle - */ - public void testPeriodicTimerHandle1() throws Exception { - int duration = 5; - int period = 200; - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimerGetHandle(duration, period); - sleep(2000); - assertEquals("timer expired too quickly", oldval, s.getTimerCount()); - sleep(4000); - assertEquals("timer did not expired", oldval + 1, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * test getTimeRemaining on a Timer - */ - public void testTimeRemaining() throws Exception { - int duration1 = 5000; - int duration2 = 2000; - Simple s = getSimple(random(500000)); - try { - int id1 = s.setTimer(duration1, 0); - int id2 = s.setTimer(duration2, 0); - long t1 = s.getTimeRemaining(id1) / 1000; - long t2 = s.getTimeRemaining(id2) / 1000; - sleep(1200); - assertTrue(t1 < duration1); - assertTrue(t2 < duration2); - assertTrue(t1 > duration1 - 2); - assertTrue(t2 > duration2 - 2); - } finally { - s.remove(); - } - } - - /** - * Test du cancel Timer - */ - public void testCancel1() throws Exception { - int duration = 2; - Simple s = getSimple(random(500000)); - try { - int oldval = s.getTimerCount(); - int id = s.setTimer(duration, 0); - assertEquals("timer expired too quickly", oldval, s.getTimerCount()); - s.cancelTimer(id); - sleep(1000 * (duration + 1)); - assertEquals("timer did expired", oldval, s.getTimerCount()); - } finally { - s.remove(); - } - } - - /** - * Test of getTimers - */ - public void testGetTimers() throws Exception { - Simple s = getSimple(random(500000)); - int [] ids = new int[10]; - int before = s.getTimerNumber(); - try { - for (int i = 0; i < 10; i++) { - ids[i] = s.setTimer(i + 1, 100); - } - sleep(1000); - assertEquals("Bad number of timers", 10, s.getTimerNumber() - before); - for (int i = 0; i < 10; i++) { - s.cancelTimer(ids[i]); - } - } finally { - s.remove(); - } - } - - /** - * Test getTimers with cancel outside tx - * The cancelled timer should not be returned - */ - public void testGetTimerCancelled() throws Exception { - Simple s = getSimple(random(500000)); - int [] ids = new int[10]; - int before = s.getTimerNumber(); - try { - for (int i = 0; i < 10; i++) { - ids[i] = s.setTimer(i + 1, 100); - } - sleep(1000); - s.cancelTimer(ids[0]); - assertEquals("Bad number of timers", 9, s.getTimerNumber() - before); - for (int i = 1; i < 10; i++) { - s.cancelTimer(ids[i]); - } - } finally { - s.remove(); - } - } - - /** - * Test getTimers with cancel in the transaction. - * The cancelled timer should not be returned - */ - public void testGetTimerCancelledInTx() throws Exception { - Simple s = getSimple(random(500000)); - int [] ids = new int[10]; - int before = s.getTimerNumber(); - // start transaction - utx.begin(); - try { - for (int i = 0; i < 10; i++) { - ids[i] = s.setTimer(i + 1, 100); - } - sleep(1000); - s.cancelTimer(ids[0]); - assertEquals("Bad number of timers", 9, s.getTimerNumber() - before); - for (int i = 1; i < 10; i++) { - s.cancelTimer(ids[i]); - } - } finally { - utx.commit(); - s.remove(); - } - } - - /** - * Test getHandle on one-shot timer - */ - public void testGetHandle1() throws Exception { - int duration = 2; - Simple s = getSimple(random(500000)); - try { - int id = s.setTimer(duration, 0); - TimerHandle th = s.getTimerHandle(id); - assertTrue(th != null); - } finally { - s.remove(); - } - } - - /** - * Test getHandle on one-shot timer that has expired - */ - public void testGetExpiredHandle1() throws Exception { - int duration = 1; - Simple s = getSimple(random(500000)); - try { - int id = s.setTimer(duration, 0); - sleep(3000); - TimerHandle th = s.getTimerHandle(id); - assertTrue(th == null); - } finally { - s.remove(); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_TimerEntity.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_TimerEntity.java deleted file mode 100644 index 12c2d39cc8..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/timer/A_TimerEntity.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.timer; - -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.beans.transacted.SimpleEHome; - -/** - * Tests of the TimerService, specific to entity beans. - * @author Philippe Durieux (jonas team) - */ -public abstract class A_TimerEntity extends A_Timer { - - /** - * constructor - * @param name name of the test suite. - */ - public A_TimerEntity(String name) { - super(name); - } - - /** - * return SimpleHome, that can be either BMP, CMP1, or CMP2 bean. - */ - protected abstract SimpleEHome getHome(); - - /** - * Test interval timer - */ - public void testTimer2() throws Exception { - int duration = 4; - int intervalduration = 3; - Simple s = getSimple(random(500000)); - int expected = s.getTimerCount(); - int id = s.setTimer(duration, intervalduration); - try { - assertEquals("timer expired too quickly", expected, s.getTimerCount()); - sleep(1000 * duration + 1500); - expected++; - assertEquals("timer did not expire first", expected, s.getTimerCount()); - for (int i = 0; i < 3; i++) { - sleep(1000 * intervalduration); - expected++; - assertEquals("timer did not expired at " + i, expected, s.getTimerCount()); - } - } finally { - s.remove(); // should remove the timer too. - } - } - - /** - * Test for bug #305384 - * Create a timer for an entity bean - * Remove this bean instance before timer expire - * Check that the timer is removed. - */ - public void test305384() throws Exception { - int duration = 7; - Simple s = getSimple(random(500000)); - for (int i = 0; i < 10; i++) { - sleep(100); - s.startInfoTimer(duration, "Lock"); - } - sleep(1000); - s.remove(); // should remove the timers too. - System.out.println("Check that no exception is raised on server within 5 sec"); - } - - - /** - * Test this with a jonas restart to see if the timer - * is correctly restarted. - * @throws Exception - */ - public void testPersistentTimer() throws Exception { - int duration = 4; - int intervalduration = 3; - Simple s = getSimple(random(500000)); - try { - int expected = s.getTimerCount(); - s.setTimer(duration, intervalduration); - assertEquals("timer expired too quickly", expected, s.getTimerCount()); - sleep(1000 * duration + 1500); - expected++; - assertEquals("timer did not expire first", expected, s.getTimerCount()); - for (int i = 0; i < 3; i++) { - sleep(1000 * intervalduration); - expected++; - assertEquals("timer did not expired at " + i, expected, s.getTimerCount()); - } - } finally { - // Remove this line for persistent timers tests - s.remove(); - } - } - - /** - * test timer in ejbPostCreate - */ - public void testTimerInEjbPostCreate() throws Exception { - Simple s = getHome().createWithTimer(10, 2000); - sleep(4000); - s.remove(); - } - - /** - * test immediate timer in ejbPostCreate (bug #300502) - */ - public void testTimerInEjbPostCreate2() throws Exception { - Simple s = getHome().createWithTimer(10, 2); - sleep(1000); - s.remove(); - } - - /** - * test cancel in ejbTimeout (bug #300306) - */ - public void testCancelInTimeout() throws Exception { - int duration = 2; - int intervalduration = -1; - Simple s = getSimple(random(500000)); - int id = s.setTimer(duration, intervalduration); - // timer should be cancelled at first expiration. - // TODO: test this. - sleep(6000); - s.remove(); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttribute.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttribute.java deleted file mode 100644 index 1692b14407..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttribute.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.transaction; - -import java.rmi.RemoteException; - -import javax.transaction.TransactionRequiredException; - -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * Transactional attribute test cases - * tests here are common to entity and session beans. - * beans used : transacted - * @author Ph.Coq, Ph.Durieux (jonas team) - */ -public abstract class A_TxAttribute extends JTestCase { - - /** - * constructor - * @param name name of the test suite. - */ - public A_TxAttribute(String name) { - super(name); - } - - /** - * Sets up the fixture, here load the beans if not loaded yet. - * This method is called before a test is executed. - */ - protected void setUp() { - super.setUp(); - useBeans("transacted", true); - } - - /** - * Get an instance of the bean. - * This method depends on the home used to get it. - * For entity bean, the arg is used to get a particular instance. - * For session beans, we get any session bean from the pool. - */ - public abstract Simple getSimple(int i) throws Exception; - - - // -------------------------------------------------------------------- - // test cases - // -------------------------------------------------------------------- - - /** - * Test of NotSupported attribute - * A business method with NotSupported is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testNotSupported() throws Exception { - - Simple s = getSimple(210); - try { - assertEquals(false, s.opwith_notsupported()); - } finally { - s.remove(); - } - } - - /** - * Test of RequiresNew attribute - * A business method with RequiresNew is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testRequiresNew() throws Exception { - - Simple s = getSimple(211); - try { - assertEquals(true, s.opwith_requires_new()); - } finally { - s.remove(); - } - } - - /** - * Test of Required attribute - * A business method with Required is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testRequired() throws Exception { - - Simple s = getSimple(212); - try { - assertEquals(true, s.opwith_required()); - } finally { - s.remove(); - } - } - - /** - * Test a "Required" method calling a "Requires_new" method. - * the expected value is true - */ - public void testRequiredRequiresNew() throws Exception { - - Simple s = getSimple(312); - try { - assertEquals(true, s.required_call_requires_new()); - } finally { - s.remove(); - } - } - - /** - * Test a "Required" method calling a "Requires_new" method on - * another bean instance. - * the expected value is true - */ - public void testRequiredRequiresNew2() throws Exception { - - Simple s = getSimple(220); - Simple s2 = getSimple(221); - try { - assertEquals(true, s.call_requires_new_on(s2)); - } finally { - s2.remove(); - s.remove(); - } - } - - /** - * Test of Mandatory attribute - * A business method with Mandatory is called outside TX - * this method returns if the thread is associated to a transaction - * - * A javax.transaction.TransactionRequiredException must be received - */ - - public void testMandatory() throws Exception { - - Simple s = getSimple(213); - try { - s.opwith_mandatory(); - fail("mandatory: should raise exception"); - } catch (javax.transaction.TransactionRequiredException e) { - } catch (RemoteException e) { - assertTrue(e.detail instanceof TransactionRequiredException); - } finally { - s.remove(); - } - } - - /** - * Test of Never attribute - * A business method with Never is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testNever() throws Exception { - - Simple s = getSimple(214); - try { - assertEquals(false, s.opwith_never()); - } finally { - s.remove(); - } - } - - /** - * Test of Supports attribute - * A business method with Supports is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testSupports() throws Exception { - - Simple s = getSimple(215); - try { - assertEquals(false, s.opwith_supports()); - } finally { - s.remove(); - } - } - - /** - * Test of NotSupported attribute - * A business method with NotSupported is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testNotSupportedTx() throws Exception { - - Simple s = getSimple(220); - utx.begin(); - try { - assertEquals(false, s.opwith_notsupported()); - } finally { - utx.rollback(); - s.remove(); - } - } - - /** - * Test of RequiresNew attribute - * A business method with RequiresNew is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testRequiresNewTx() throws Exception { - Simple s = getSimple(221); - utx.begin(); - try { - assertEquals(true, s.opwith_requires_new()); - } finally { - utx.rollback(); - s.remove(); - } - } - - /** - * Test of Required attribute - * A business method with Required is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testRequiredTx() throws Exception { - - Simple s = getSimple(222); - utx.begin(); - try { - assertEquals(true, s.opwith_required()); - } finally { - utx.rollback(); - s.remove(); - } - - } - - /** - * Test of Mandatory attribute - * A business method with Mandatory is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testMandatoryTx() throws Exception { - - Simple s = getSimple(223); - utx.begin(); - try { - assertEquals(true, s.opwith_mandatory()); - } finally { - utx.rollback(); - s.remove(); - } - } - - /** - * Test of Never attribute - * A business method with Mandatory is called inside TX - * this method returns if the thread is associated to a transaction - * - * A java.rmi.RemoteException must be received - */ - public void testNeverTx() throws Exception { - - Simple s = getSimple(24); - utx.begin(); - try { - s.opwith_never(); - fail("never: should raise exception"); - } catch (RemoteException e) { - } finally { - utx.rollback(); - s.remove(); - } - } - - /** - * Test of Supports attribute - * A business method with Supports is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testSupportsTx() throws Exception { - - Simple s = getSimple(25); - utx.begin(); - try { - assertEquals(true, s.opwith_supports()); - } finally { - utx.rollback(); - s.remove(); - } - - } - - /** - * Test the sequence of several calls to methods - * with different transactional contexts - */ - public void testNoTx() throws Exception { - Simple s = getSimple(90); - try { - assertEquals(false, s.opwith_notsupported()); - assertEquals(true, s.opwith_requires_new()); - assertEquals(true, s.opwith_required()); - assertEquals(false, s.opwith_never()); - assertEquals(false, s.opwith_supports()); - } finally { - s.remove(); - } - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttributeEntity.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttributeEntity.java deleted file mode 100644 index 342368e2a3..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/A_TxAttributeEntity.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.objectweb.jonas.jtests.clients.transaction; - -import java.rmi.RemoteException; -import javax.transaction.TransactionRequiredException; -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.beans.transacted.SimpleEHome; - - -/** - * Here are found transactional attribute tests - * common but specific for all type of entity beans (BMP, CMP1.1, CMP2.0) - * Tests on finder and create methods - * @author Philippe Durieux (jonas team) - */ -public abstract class A_TxAttributeEntity extends A_TxAttribute { - - /** - * constructor - * @param name name of the test suite. - */ - public A_TxAttributeEntity(String name) { - super(name); - } - - /** - * return SimpleHome, that can be either BMP, CMP1, or CMP2 bean. - */ - protected abstract SimpleEHome getHome(); - - // ----------------------------------------------------------------- - // tests on Create methods - // ----------------------------------------------------------------- - - /** - * Test Required transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateRequired() throws Exception { - long i = 100; - Simple entity = getHome().createForRequired(i); - entity.remove(); - } - - /** - * Test Required transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateRequiredTx() throws Exception { - utx.begin(); - long i = 110; - Simple entity = null; - try { - entity = getHome().createForRequired(i); - } finally { - utx.rollback(); - } - - } - /** - * Test NotSupported transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateNotSupported() throws Exception { - int i = 120; - Simple entity = getHome().create(i); - entity.remove(); - } - - /** - * Test NotSupported transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateNotSupportedTx() throws Exception { - utx.begin(); - int i = 130; - Simple entity = null; - try { - entity = getHome().create(i); - } finally { - utx.rollback(); - entity.remove(); - } - } - - /** - * Test Never transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateNever() throws Exception { - short i = 140; - Simple entity = getHome().createForNever(i); - entity.remove(); - } - - /** - * Test Never transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateNeverTx() throws Exception { - utx.begin(); - short i = 150; - Simple entity = null; - try { - entity = getHome().createForNever(i); - entity.remove(); - fail("never: should raise exception"); - } catch (java.rmi.RemoteException e) { - } finally { - utx.rollback(); - - } - - } - - /** - * Test RequiresNew transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateRequiresNew() throws Exception { - String s = "160"; - Simple entity = getHome().createForRequiresNew(s); - entity.remove(); - } - - /** - * Test RequiresNew transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateRequiresNewTx() throws Exception { - utx.begin(); - String s = "170"; - Simple entity = null; - try { - entity = getHome().createForRequiresNew(s); - } finally { - utx.rollback(); - entity.remove(); - } - } - - - /** - * Test Mandatory transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateMandatory() throws Exception { - char c = 'a'; - try { - Simple entity = getHome().createForMandatory(c); - entity.remove(); - fail("mandatory: should raise exception"); - } catch (javax.transaction.TransactionRequiredException e) { - } catch (java.rmi.RemoteException e) { - assertTrue(e.detail instanceof javax.transaction.TransactionRequiredException); - } - } - - /** - * Test Mandatory transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateMandatoryTx() throws Exception { - utx.begin(); - char c = 'b'; - Simple entity = null; - try { - entity = getHome().createForMandatory(c); - } finally { - utx.rollback(); - - } - } - - - /** - * Test Supports transactional attributes on create method - * the create method xith required is called outside TX - * - */ - public void testCreateSupports() throws Exception { - - Simple entity = getHome().createForSupports(false); - entity.remove(); - } - - /** - * Test Supports transactional attributes on create method - * the create method xith required is called inside TX - * - */ - public void testCreateSupportsTx() throws Exception { - utx.begin(); - Simple entity = null; - try { - entity = getHome().createForSupports(true); - } finally { - utx.rollback(); - - } - } - - // ----------------------------------------------------------------- - // tests on Home methods - // ----------------------------------------------------------------- - - /** - * Test of NotSupported attribute - * A home method with NotSupported is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testHomeNotSupported() throws Exception { - assertEquals(false, getHome().opwith_notsupported()); - } - - /** - * Test of RequiresNew attribute - * A home method with RequiresNew is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeRequiresNew() throws Exception { - assertEquals(true, getHome().opwith_requires_new()); - } - - /** - * Test of Required attribute - * A home method with Required is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeRequired() throws Exception { - assertEquals(true, getHome().opwith_required()); - } - - /** - * Test of Mandatory attribute - * A home method with Mandatory is called outside TX - * this method returns if the thread is associated to a transaction - * - * A javax.transaction.TransactionRequiredException must be received - */ - - public void testHomeMandatory() throws Exception { - try { - getHome().opwith_mandatory(); - fail("mandatory: should raise exception"); - } catch (javax.transaction.TransactionRequiredException e) { - } catch (RemoteException e) { - assertTrue(e.detail instanceof TransactionRequiredException); - } - } - - /** - * Test of Never attribute - * A home method with Never is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testHomeNever() throws Exception { - assertEquals(false, getHome().opwith_never()); - } - - - /** - * Test of Supports attribute - * A home method with Supports is called outside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testHomeSupports() throws Exception { - assertEquals(false, getHome().opwith_supports()); - } - - /** - * Test of NotSupported attribute - * A home method with NotSupported is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is false - */ - public void testHomeNotSupportedTx() throws Exception { - utx.begin(); - try { - assertEquals(false, getHome().opwith_notsupported()); - } finally { - utx.rollback(); - } - } - - /** - * Test of RequiresNew attribute - * A home method with RequiresNew is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeRequiresNewTx() throws Exception { - utx.begin(); - try { - assertEquals(true, getHome().opwith_requires_new()); - } finally { - utx.rollback(); - } - } - - /** - * Test of Required attribute - * A home method with Required is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeRequiredTx() throws Exception { - utx.begin(); - try { - assertEquals(true, getHome().opwith_required()); - } finally { - utx.rollback(); - } - - } - - /** - * Test of Mandatory attribute - * A home method with Mandatory is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeMandatoryTx() throws Exception { - utx.begin(); - try { - assertEquals(true, getHome().opwith_mandatory()); - } finally { - utx.rollback(); - } - } - - - - - /** - * Test of Never attribute - * A home method with Mandatory is called inside TX - * this method returns if the thread is associated to a transaction - * - * A java.rmi.RemoteException must be received - */ - public void testHomeNeverTx() throws Exception { - utx.begin(); - try { - getHome().opwith_never(); - fail("never: should raise exception"); - } catch (RemoteException e) { - } finally { - utx.rollback(); - } - } - - /** - * Test of Supports attribute - * A home method with Supports is called inside TX - * this method returns if the thread is associated to a transaction - * - * the expected value is true - */ - public void testHomeSupportsTx() throws Exception { - utx.begin(); - try { - assertEquals(true, getHome().opwith_supports()); - } finally { - utx.rollback(); - } - - } - - /** - * Test the sequence of several calls to home methods - * with different transactional contexts - */ - public void testHomeNoTx() throws Exception { - assertEquals(false, getHome().opwith_notsupported()); - assertEquals(true, getHome().opwith_requires_new()); - assertEquals(true, getHome().opwith_required()); - assertEquals(false, getHome().opwith_never()); - assertEquals(false, getHome().opwith_supports()); - } - - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/C_transaction.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/C_transaction.java deleted file mode 100644 index 54beb54460..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/C_transaction.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.transaction; - -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * link all the suites from this directory - */ -public class C_transaction extends JTestCase { - - public C_transaction(String name) { - super(name); - } - - public static Test suite() { - TestSuite suite = new TestSuite(); - - // put here the list of suites to run - suite.addTest(F_BeanManagedTx.suite()); - suite.addTest(F_ContManagedTx.suite()); - suite.addTest(C_TxAttribute.suite()); - suite.addTest(F_BeanToBeanTx.suite()); - suite.addTest(F_BeanToLocalTx.suite()); - suite.addTest(F_EntityCMT.suite()); - suite.addTest(F_Jotm.suite()); - suite.addTest(F_State.suite()); - - return suite; - } - - public static void main (String args[]) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_BeanToBeanTx.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_BeanToBeanTx.java deleted file mode 100644 index 8469ec52b8..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_BeanToBeanTx.java +++ /dev/null @@ -1,360 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.transaction; - -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.beans.transacted.SimpleEHome; -import org.objectweb.jonas.jtests.beans.transacted.SimpleSHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * Test for Bean to Bean transactions - * @author Ph.Durieux - */ -public class F_BeanToBeanTx extends JTestCase { - - protected static SimpleSHome syhome = null; - protected static SimpleSHome sfhome = null; - protected static SimpleSHome slhome = null; - protected static SimpleEHome echome = null; - protected static SimpleEHome ec2home = null; - protected static SimpleEHome ebhome = null; - - public F_BeanToBeanTx(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - useBeans("transacted", true); - if (syhome == null) { - String BEAN_HOME = "transactedSimpleSYHome"; - try { - syhome = (SimpleSHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleSHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - if (sfhome == null) { - String BEAN_HOME = "transactedSimpleSFHome"; - try { - sfhome = (SimpleSHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleSHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - if (slhome == null) { - String BEAN_HOME = "transactedSimpleSLHome"; - try { - slhome = (SimpleSHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleSHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - if (echome == null) { - String BEAN_HOME = "transactedSimpleECHome"; - try { - echome = (SimpleEHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleEHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - if (ec2home == null) { - String BEAN_HOME = "transactedSimpleEC2Home"; - try { - ec2home = (SimpleEHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleEHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - if (ebhome == null) { - String BEAN_HOME = "transactedSimpleEBHome"; - try { - ebhome = (SimpleEHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleEHome.class); - } catch (NamingException e) { - fail("Cannot get " + BEAN_HOME + ":" + e); - } - } - } - - /** - * SL/Required -> EC/RequiresNew - */ - public void testSLToEC() throws Exception { - Simple s1 = slhome.create(); - Simple s2 = echome.create(30); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SL/Required -> EC2/RequiresNew - */ - public void testSLToEC2() throws Exception { - Simple s1 = slhome.create(); - Simple s2 = ec2home.create(310); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SF/Required -> EC/RequiresNew - */ - public void testSFToEC() throws Exception { - Simple s1 = sfhome.create(); - Simple s2 = echome.create(32); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SF/Required -> EC2/RequiresNew - */ - public void testSFToEC2() throws Exception { - Simple s1 = sfhome.create(); - Simple s2 = ec2home.create(33); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SY/Required -> EC/RequiresNew - */ - public void testSYToEC() throws Exception { - Simple s1 = syhome.create(); - Simple s2 = echome.create(34); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SY/Required -> EC2/RequiresNew - */ - public void testSYToEC2() throws Exception { - Simple s1 = syhome.create(); - Simple s2 = ec2home.create(35); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EC/Required -> EC/RequiresNew - */ - public void testECToEC() throws Exception { - Simple s1 = echome.create(36); - Simple s2 = echome.create(37); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EC2/Required -> EC2/RequiresNew - */ - public void testEC2ToEC2() throws Exception { - Simple s1 = ec2home.create(38); - Simple s2 = ec2home.create(39); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EB/Required -> EC/RequiresNew - */ - public void testEBToEC() throws Exception { - Simple s1 = ebhome.create(40); - Simple s2 = echome.create(41); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EB/Required -> EC2/RequiresNew - */ - public void testEBToEC2() throws Exception { - Simple s1 = ebhome.create(42); - Simple s2 = ec2home.create(43); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SL/Required -> SY/RequiresNew - */ - public void testSLToSY() throws Exception { - Simple s1 = slhome.create(); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SF/Required -> SY/RequiresNew - */ - public void testSFToSY() throws Exception { - Simple s1 = sfhome.create(); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * SY/Required -> SY/RequiresNew - */ - public void testSYToSY() throws Exception { - Simple s1 = syhome.create(); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EC/Required -> SY/RequiresNew - */ - public void testECToSY() throws Exception { - Simple s1 = echome.create(44); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * EC2/Required -> SY/RequiresNew - */ - public void testEC2ToSY() throws Exception { - Simple s1 = ec2home.create(45); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - public void testSupports2Required() throws Exception { - Simple s2 = sfhome.create(); - try { - assertEquals(true, s2.supports_call_required()); - } finally { - s2.remove(); - } - } - - /** - * EB/Required -> SY/RequiresNew - */ - public void testEBToSY() throws Exception { - Simple s1 = ebhome.create(46); - Simple s2 = syhome.create(); - try { - assertEquals(true, s1.call_requires_new_on(s2)); - } finally { - s1.remove(); - s2.remove(); - } - } - - public static Test suite() { - return new TestSuite(F_BeanToBeanTx.class); - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_BeanToBeanTx(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_Jotm.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_Jotm.java deleted file mode 100644 index 35de819df7..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_Jotm.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.transaction; - -import java.rmi.RemoteException; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.RollbackException; -import javax.transaction.TransactionRolledbackException; -import javax.transaction.Status; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.beans.transacted.Simple; -import org.objectweb.jonas.jtests.beans.transacted.SimpleEHome; -import org.objectweb.jonas.jtests.beans.transacted.SimpleSHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * Basic tests of Jotm included in Jonas - */ -public class F_Jotm extends JTestCase { - - private static String BEAN_HOME = "transactedSimpleEC2Home"; - private static String SL_BEAN_HOME = "transactedSimpleSLHome"; - protected static SimpleEHome home = null; - protected static SimpleSHome homesl = null; - - /** - * constructor - * @param name name of the test suite. - */ - public F_Jotm(String name) { - super(name); - } - - /** - * init environment: - */ - protected void setUp() { - super.setUp(); - useBeans("transacted", true); - } - - /** - * return SimpleHome for CMP2 bean. - */ - protected SimpleEHome getHome() { - if (home == null) { - try { - home = (SimpleEHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), SimpleEHome.class); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - return home; - } - - /** - * return SimpleHome for Session bean. - */ - protected SimpleSHome getHomeSL() { - if (homesl == null) { - try { - homesl = (SimpleSHome) PortableRemoteObject.narrow(ictx.lookup(SL_BEAN_HOME), SimpleSHome.class); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - return homesl; - } - - /** - * Create a bean and return it. - */ - public Simple getSimple(int i) throws Exception { - Simple ret = null; - try { - ret = getHome().create(i); - } catch (Exception e) { - error("Cannot create entity bean: " + e); - } - return ret; - } - - /** - * Create a Session bean and return it. - */ - public Simple getSimpleSL() throws Exception { - Simple ret = null; - try { - ret = getHomeSL().create(); - } catch (Exception e) { - error("Cannot create session bean: " + e); - } - return ret; - } - - /** - * Test du transaction timeout - */ - public void testBasicTimeout() throws Exception { - int nbsec = 5; - utx.setTransactionTimeout(nbsec); - utx.begin(); - try { - utx.commit(); - // test OK. - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } catch (RollbackException e) { - fail("timeout rolled back transaction"); - } finally { - } - } - - /** - * Test du transaction timeout - */ - public void testBasicTimeoutRollback() throws Exception { - int nbsec = 5; - utx.setTransactionTimeout(nbsec); - utx.begin(); - try { - sleep((nbsec + 3)*1000); - utx.commit(); - fail("timeout should rollback transaction"); - } catch (RollbackException e) { - // test OK. - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } finally { - } - } - - public void test2PC() throws Exception { - Simple s1 = getSimple(131); - Simple s2 = getSimple(141); - try { - utx.begin(); - s1.opwith_mandatory(); - s2.opwith_mandatory(); - utx.commit(); - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } finally { - s1.remove(); - s2.remove(); - } - } - - public void test2PCSL() throws Exception { - Simple s1 = getSimpleSL(); - Simple s2 = getSimpleSL(); - try { - utx.begin(); - s1.opwith_mandatory(); - s2.opwith_mandatory(); - utx.commit(); - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } finally { - s1.remove(); - s2.remove(); - } - } - - /** - * This test the jonas bug 312334 - * To be sure this test is OK, we should also - * check the stats on transactions with jonasAdmin. - */ - public void test2PCtimeout() throws Exception { - int nbsec = 5; - utx.setTransactionTimeout(nbsec); - Simple s1 = getSimple(732); - Simple s2 = getSimple(742); - utx.begin(); - debug("access s1"); - s1.opwith_mandatory(); - sleep((nbsec + 3)*1000); - debug("access s2 after the timeout"); - try { - s2.opwith_supports(); - } catch (TransactionRolledbackException e) { - // ideal case. - } catch (RemoteException e) { - if (e.detail instanceof TransactionRolledbackException) { - // normal case - } else { - fail("Unexpected exception: " + e); - } - } finally { - debug("try to commit"); - try { - utx.commit(); - fail("timeout should rollback transaction"); - } catch (RollbackException e) { - // test OK. - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } catch (IllegalStateException e) { - // Transaction may not exist any longer, because of the timeout - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } finally { - debug("removing s1"); - s1.remove(); - debug("removing s2"); - s2.remove(); - } - } - } - - /** - */ - public static Test suite() { - return new TestSuite(F_Jotm.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_Jotm(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_State.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_State.java deleted file mode 100644 index 21e412a34f..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/clients/transaction/F_State.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.transaction; - - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.RollbackException; -import javax.transaction.TransactionRolledbackException; -import javax.transaction.Status; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.objectweb.jonas.jtests.beans.annuaire.Personne; -import org.objectweb.jonas.jtests.beans.annuaire.PersonneHome; -import org.objectweb.jonas.jtests.util.JTestCase; - -/** - * these tests check state validity with transactions. - * Uses bean Personne (nom:pk, numero) - */ -public class F_State extends JTestCase { - - private static String BEAN_HOME = "annuairePersonneECHome"; - protected static PersonneHome ehome = null; - - public F_State(String name) { - super(name); - } - - protected void setUp() { - super.setUp(); - if (ehome == null) { - useBeans("annuaire", true); - try { - ehome = (PersonneHome) PortableRemoteObject.narrow(ictx.lookup(BEAN_HOME), PersonneHome.class); - } catch (NamingException e) { - fail("Cannot get bean home"); - } - } - } - - protected void tearDown() throws Exception { - super.tearDown(); - } - - /** - * Test with commit. Both beans should be modified - */ - public void testCommit() throws Exception { - // create beans - // Sometimes, the beans may exist. Delete them first. - Personne bob = null; - Personne jack = null; - try { - bob = ehome.create("Bob", "1"); - } catch (CreateException e) { - ehome.remove("Bob"); - bob = ehome.create("Bob", "1"); - } - try { - jack = ehome.create("Jack", "2"); - } catch (CreateException e) { - ehome.remove("Jack"); - jack = ehome.create("Jack", "2"); - } - - // transaction qui va etre committee - utx.setTransactionTimeout(6); - utx.begin(); - String newval = "4"; - try { - bob.setNumero(newval); - jack.setNumero(newval); - utx.commit(); - // Check beans have bean modified - assertTrue("first bean not modified", bob.getNumero().equals(newval)); - assertTrue("second bean not modified", jack.getNumero().equals(newval)); - } finally { - // remove created beans - bob.remove(); - jack.remove(); - } - } - - /** - * Test if modifications are cancelled after timeout. - */ - public void testTimeout() throws Exception { - // create beans - // Sometimes, the beans may exist. Delete them first. - Personne bob = null; - String bobnum = "1"; - try { - bob = ehome.create("Bob", bobnum); - } catch (CreateException e) { - ehome.remove("Bob"); - bob = ehome.create("Bob", bobnum); - } - Personne jack = null; - String jacknum = "2"; - try { - jack = ehome.create("Jack", jacknum); - } catch (CreateException e) { - ehome.remove("Jack"); - jack = ehome.create("Jack", jacknum); - } - - // tx that will be timed out. - int nbsec = 5; - utx.setTransactionTimeout(nbsec); - utx.begin(); - // first bean access, before timeout - bob.setNumero("3"); - sleep((nbsec + 3)*1000); - try { - // second bean access, after timeout - jack.setNumero("4"); - // fail("should not access bean inside a rolled back transaction"); - // possible case. But transaction will be rolled back later. - } catch (TransactionRolledbackException e) { - // ideal case. - debug("TransactionRolledbackException"); - } catch (RemoteException e) { - // normal case. - debug("RemoteException:" + e); - } finally { - try { - utx.commit(); - fail("should not commit transaction"); - } catch (RollbackException e) { - // Normal case. - } finally { - // Check that beans have not bean modified - // This is the most important checking of the test! - assertTrue("first bean modified", bob.getNumero().equals(bobnum)); - assertTrue("second bean modified", jack.getNumero().equals(jacknum)); - // remove created beans - bob.remove(); - jack.remove(); - } - } - } - - /** - * Test si les modifications apres le timeout sont effectivement - * annulees par le rollback. - * Implique que ces modifications soient bien enrolees dans la transaction - * ou bien carrement pas faite du tout. - */ - public void testTimeout1() throws Exception { - // create the bean - // Sometimes, the bean may exist. - Personne jack = null; - String jacknum = "2"; - try { - jack = ehome.create("Jack", jacknum); - } catch (CreateException e) { - ehome.remove("Jack"); - jack = ehome.create("Jack", jacknum); - } - - // transaction qui va etre rollbackee sur timeout - int nbsec = 5; - utx.setTransactionTimeout(nbsec); - utx.begin(); - try { - sleep((nbsec + 3)*1000); - // bean accede apres le timeout - jack.setNumero("4"); - utx.commit(); - // remove created beans - jack.remove(); - fail("timeout should rollback transaction"); - } catch (RollbackException e) { - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } - // Check beans have not been modified - // This is the most important checking of the test! - try { - assertTrue("bean modified", jack.getNumero().equals(jacknum)); - } finally { - // remove created beans - jack.remove(); - } - } - - public void testRollbackOnlyBasic() throws Exception { - utx.setTransactionTimeout(6); - utx.begin(); - utx.setRollbackOnly(); - try { - utx.commit(); - fail("Should rollback transaction"); - } catch (RollbackException e) { - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } - } - - /** - * Test si les modifications apres le rollbackonly sont effectivement - * annulees par le rollback. - * Implique que ces modifications soient bien enrolees dans la transaction - * ou bien carrement pas faite du tout. - */ - public void testRollbackOnly1() throws Exception { - // create beans - // Sometimes, the beans may exist. Delete them first. - Personne jack = null; - String jacknum = "2"; - try { - jack = ehome.create("Jack", jacknum); - } catch (CreateException e) { - ehome.remove("Jack"); - jack = ehome.create("Jack", jacknum); - } - - // transaction qui va etre rollbackee AVANT l'acces au bean - utx.setTransactionTimeout(6); - utx.begin(); - try { - // rollback only de la transaction - utx.setRollbackOnly(); - // bean accessed after rollbackOnly - jack.setNumero("4"); - // Actually, we could get an exception here. - // maybe should write this test differently - utx.commit(); - // remove created beans - jack.remove(); - fail("Should rollback transaction"); - } catch (RollbackException e) { - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } - // Check beans have not been modified - // This is the most important checking of the test! - try { - assertTrue("bean modified", jack.getNumero().equals(jacknum)); - } finally { - // remove created beans - jack.remove(); - } - } - - /** - * Test si les modifications apres le rollbackonly sont effectivement - * annulees par le rollback. - * Implique que ces modifications soient bien enrolees dans la transaction - * ou bien carrement pas faite du tout. - */ - public void testRollbackOnly() throws Exception { - // create beans - // Sometimes, the beans may exist. Delete them first. - Personne bob = null; - String bobnum = "1"; - try { - bob = ehome.create("Bob", bobnum); - } catch (CreateException e) { - ehome.remove("Bob"); - bob = ehome.create("Bob", bobnum); - } - Personne jack = null; - String jacknum = "2"; - try { - jack = ehome.create("Jack", jacknum); - } catch (CreateException e) { - ehome.remove("Jack"); - jack = ehome.create("Jack", jacknum); - } - - // transaction qui va etre rollbackee entre les - // 2 acces aux beans - utx.setTransactionTimeout(6); - utx.begin(); - // premier bean accede avant le rollbackOnly - bob.setNumero("3"); - // rollback only de la transaction - utx.setRollbackOnly(); - try { - // deuxieme bean accede apres le rollbackOnly - jack.setNumero("4"); - //fail("should not access bean inside a rolled back transaction"); - // possible case. But transaction will be rolled back later. - } catch (TransactionRolledbackException e) { - // ideal case. - } catch (RemoteException e) { - assertTrue((e.detail instanceof TransactionRolledbackException) - || (e instanceof TransactionRolledbackException)); - // normal case. - } finally { - try { - utx.commit(); - fail("should not commit transaction"); - } catch (RollbackException e) { - // Normal case. - assertEquals(utx.getStatus(), Status.STATUS_NO_TRANSACTION); - } finally { - // Controle que les 2 beans n'ont pas ete modifies - assertTrue("first bean modified", bob.getNumero().equals(bobnum)); - assertTrue("second bean modified", jack.getNumero().equals(jacknum)); - // remove created beans - bob.remove(); - jack.remove(); - } - } - } - - public static Test suite() { - return new TestSuite(F_State.class); - } - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sarg = args[argn]; - if (sarg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_State(testtorun)); - } - } -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tjdbc.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tjdbc.java deleted file mode 100644 index e35378f16a..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tjdbc.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.tables; - -import org.objectweb.util.monolog.api.BasicLevel; - -import javax.naming.NamingException; -import java.sql.Statement; -import java.sql.Connection; -import java.rmi.RemoteException; - -/** - * Class to create tables for the 'jdbc' bean. - * @author durieuxp - */ - -public class Tjdbc extends Tmanager { - /** - * Entry point - */ - public static void init() throws NamingException, RemoteException { - mgrInit(); - createTable("jdbcSF"); - } - - /** - * create a table for the pdouble bean of etype - */ - private static void createTable(String name) throws RemoteException { - - // get connection - Connection conn = null; - try { - conn = dataSource.getConnection(); - } catch (Exception e) { - throw new RemoteException("Cannot get Connection"); - } - - Statement stmt; - try { - stmt = conn.createStatement(); - stmt.execute("DROP TABLE " + name); - stmt.close(); - logger.log(BasicLevel.INFO, "Table " + name + " dropped"); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, "Exception in dropTable : \n" + e); - } - try { - stmt = conn.createStatement(); - stmt.execute("create table " + name + - "(c_pk varchar(30) not null primary key,"+ - "c_value integer)"); - stmt.execute("insert into " + name + " values('pk1', 0)"); - stmt.execute("insert into " + name + " values('pk2', 0)"); - stmt.execute("insert into " + name + " values('pk3', 0)"); - stmt.execute("insert into " + name + " values('pk4', 0)"); - - stmt.close(); - conn.close(); // release connection - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Exception in create/init Table : " + e); - throw new RemoteException("Exception in create/init Table : " + e); - } - logger.log(BasicLevel.INFO, "Table " + name + " created"); - } - -} diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tmanager.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tmanager.java deleted file mode 100644 index 3221c5acdf..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/tables/Tmanager.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.tables; - -import java.rmi.RemoteException; -import javax.naming.NamingException; -import javax.sql.DataSource; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; - -public class Tmanager { - - static protected Logger logger = null; - static DataSource dataSource = null; - - /** - * Entry point - */ - public static void mgrInit() throws NamingException, RemoteException { - logger = Log.getLogger(Log.JONAS_TESTS_PREFIX); - dataSource = DBEnvSL.getDataSource("jdbc_1"); - } -} - - diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JBean.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JBean.java deleted file mode 100644 index 8f5ea0f4ba..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JBean.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.util; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -import javax.ejb.EJBException; -import javax.ejb.Timer; -import javax.ejb.TimerHandle; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.transaction.UserTransaction; - - -/** - * This class can be extended in every bean of the jonas test suite. It provide - * some utilities to look transaction status, ... Most of them are not a clean - * and standard way to do this, but it is OK for jonas tests. - */ -public class JBean { - - public UserTransaction getUserTransaction() { - InitialContext ctx; - UserTransaction ut = null; - try { - ctx = new InitialContext(); - ut = (UserTransaction) ctx.lookup("javax.transaction.UserTransaction"); - } catch (NamingException e) { - throw new EJBException("Cannot get UserTransaction from the bean"); - } - return ut; - } - - public TimerHandle getDeserializedHandle(TimerHandle handle) { - TimerHandle newhandle = null; - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream os = new ObjectOutputStream(baos); - os.writeObject(handle); - byte[] b = baos.toByteArray(); - ByteArrayInputStream bais = new ByteArrayInputStream(b); - ObjectInputStream is = new ObjectInputStream(bais); - newhandle = (TimerHandle) is.readObject(); - } catch (Exception e) { - throw new EJBException("Bad deserialized timer handle:" + e); - } - return newhandle; - } - - public static boolean timersAreIdentical(TimerHandle th1, TimerHandle th2) { - Timer timer1, timer2; - - try { - timer1 = th1.getTimer(); - if (timer1 == null) { - return false; - } - timer2 = th2.getTimer(); - if (timer2 == null) { - return false; - } - return timer1.equals(timer2); - } catch (Exception e) { - throw new EJBException("Cannot compare 2 timers:" + e); - } - } - - /** - * sleep n millisec. - */ - public void sleep(int msec) { - try { - Thread.sleep(msec); - } catch (InterruptedException e) { - System.err.println("sleep interrupted"); - } - } - -} \ No newline at end of file diff --git a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JTestCase.java b/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JTestCase.java deleted file mode 100644 index e4ffa8c3b1..0000000000 --- a/jonas_tests/conformance/src/org/objectweb/jonas/jtests/util/JTestCase.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.util; - -import java.io.IOException; -import java.lang.reflect.Constructor; -import java.rmi.RemoteException; -import java.util.Set; - -import javax.management.Attribute; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; -import javax.transaction.Status; -import javax.transaction.SystemException; -import javax.transaction.UserTransaction; - -import junit.extensions.RepeatedTest; -import junit.framework.TestCase; - -import org.objectweb.jonas.jtests.tables.DBEnv; -import org.objectweb.jonas.jtests.tables.DBEnvHome; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -import org.ow2.jonas.lib.util.Log; - -/** - * JTestCase extends TestCase to provide a set of standard routines - * used in jonas tests. - */ -public abstract class JTestCase extends TestCase { - protected static String jonasName = "jonas"; // change this XXX - protected static String testtorun = null; - protected static Context ictx = null; - public static UserTransaction utx = null; - protected static String jb = null; - - protected static MBeanServerConnection cnx = null; - - private static DBEnv dbEnv = null; - private static boolean tableSessionLoaded = false; - - /** - * logger for tests: jonas_tests - * See $JONAS_BASE/conf/traceclient.properties - */ - static protected Logger logger = null; - - protected StringBuffer msgerror = null; - - public static final String PACKAGE = "org.objectweb.jonas.jtests.clients."; - - public JTestCase(String name) { - super(name); - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - } - - /** - * deprecated. use logger instead. - */ - protected void debug(String txt) { - logger.log(BasicLevel.DEBUG, getName() + ": " + txt); - } - - /** - * deprecated. use logger instead. - */ - protected void error(String txt) { - logger.log(BasicLevel.ERROR, getName() + ": " + txt); - } - - protected static void callTest(String classname, String testname) throws Exception { - Class clazz = Class.forName(PACKAGE + classname); - Class[] paramTypes = {String.class}; - Object[] arguments = {testname}; - Constructor constructor = clazz.getDeclaredConstructor(paramTypes); - JTestCase mytestcase = (JTestCase) constructor.newInstance(arguments); - System.out.print("Running " + classname + " (" + testname + ")\t"); - junit.textui.TestRunner.run(mytestcase); - } - - protected static void callrepeatedTest(String classname, String testname, int n) throws Exception { - Class clazz = Class.forName(PACKAGE + classname); - Class[] paramTypes = {String.class}; - Object[] arguments = {testname}; - Constructor constructor = clazz.getDeclaredConstructor(paramTypes); - JTestCase mytestcase = (JTestCase) constructor.newInstance(arguments); - RepeatedTest myrepeatedtest = new RepeatedTest(mytestcase,n); - System.out.print("Running repeated " + n + "times " + classname + " (" + testname + ")\t"); - junit.textui.TestRunner.run(myrepeatedtest); - } - - /** - * random returns an integer between 0 and max - 1 - */ - public int random(int max) throws RemoteException { - double d = Math.random(); - int ret = (int) (max * d); - return ret; - } - - /* - ** Make an absolute path with the filename. - */ - public String absPath(String name) { - String ret = jb + "/ejbjars/" + name + ".jar"; - return ret; - } - - - - private static JMXServiceURL jmxServerUrl = null; - private static String urlSuffix = "service:jmx:"; - private static String registry = null; - private static String defaultRegistry = "rmi://localhost:1099"; - private static String protocol = null; - private static String defaultProtocol = "jrmp"; - - - private void getJmxCnx() { - if (cnx == null) { - try { - if (registry == null) { - registry = defaultRegistry; - } - registry = registry + "/"; - int indx = registry.lastIndexOf(":"); - String st = registry.substring(0, indx); - String serverUrl = urlSuffix + st +"/jndi/"+registry; - if (protocol == null) { - protocol = defaultProtocol; - } - String connectorName = protocol.concat("connector_"); - connectorName = connectorName.concat(jonasName); - serverUrl = serverUrl.concat(connectorName); - jmxServerUrl = new JMXServiceURL(serverUrl); - System.out.println("JMX connector: "+serverUrl); - JMXConnector cntor = JMXConnectorFactory.connect(jmxServerUrl, null); - cnx = cntor.getMBeanServerConnection(null); - - } catch (IOException e) { - System.err.println("Can't reach server " + jonasName - + " as couldn't create JMXConnector (" + e.getMessage() - + ")"); - System.err.println("Check name, registry and protocol options."); - System.exit(2); - } - } - } - - - private static ObjectName j2eeserver = null; - - private ObjectName getJ2eeServer() { - if (j2eeserver == null) { - try { - ObjectName on = ObjectName.getInstance("*:j2eeType=J2EEServer,name=" + jonasName); - Set j2eeservers = cnx.queryNames(on, null); - if (j2eeservers.isEmpty()) { - System.err.println("Can't admin server " + jonasName + ": didn't found J2EEServer MBean"); - System.exit(2); - } - j2eeserver = (ObjectName) j2eeservers.iterator().next(); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - } - return j2eeserver; - } - - private void getInitialContext() { - try { - ictx = new InitialContext(); - } catch (NamingException e) { - System.err.println("Can't get InitialContext: " +e); - System.exit(2); - } - } - - private void getUserTransaction() { - try { - utx = (UserTransaction) PortableRemoteObject.narrow(ictx.lookup("java:comp/UserTransaction"), UserTransaction.class); - } catch (NamingException e) { - System.err.println("Can't get UserTransaction: " +e); - System.exit(2); - } - } - - - /** - * common setUp routine, used for every test. - */ - protected void setUp() { - getInitialContext(); - getUserTransaction(); - jb = System.getProperty("jonas.base"); - registry = System.getProperty("registry"); - protocol = System.getProperty("protocol"); - getJmxCnx(); - - - try { - // rollback transaction if previous test failed to do so - if (utx.getStatus() != Status.STATUS_NO_TRANSACTION) { - utx.rollback(); - } - } catch (SystemException e) { - throw new RuntimeException("Cannot use UserTransaction", e); - } - - // Load Session bean tables.jar - if (!tableSessionLoaded) { - String filename = "tables"; - if (!isLoaded(filename)) { - addBeans(filename); - } - tableSessionLoaded = true; - } - logger.log(BasicLevel.INFO, "Junit Running " + getName()); - } - - protected void tearDown() throws Exception { - logger.log(BasicLevel.DEBUG, "Junit Stopping " + getName()); - } - - /** - * isLoaded remote operation - */ - private boolean isLoaded(String filename) { - String an = absPath(filename); - boolean ret = false; - try { - String[] params = {an}; - String[] signature = {"java.lang.String"}; - try { - Boolean r = (Boolean) cnx.invoke(getJ2eeServer(), "isDeployed", params, signature); - ret = r.booleanValue(); - } catch (Exception e) { - System.err.println("Cannot deploy " + an + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - return ret; - } - - /** - * addBean remote operation - */ - public void addBeans(String filename) { - String an = absPath(filename); - try { - String[] params = {an}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + an + ": " + e); - } - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * unloadBean remote operation - */ - public void unloadBeans(String filename) { - logger.log(BasicLevel.DEBUG, "unloadBeans " + filename); - String an = absPath(filename); - try { - String[] params = {an}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "undeploy", params, signature); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - - } catch (Exception e) { - System.err.println("Cannot unload bean: " + e); - } - } - - /** - * load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @param create creates tables at loading (CMP1 only) - * Note that in CMP2, the decision to create the tables is in - * the jonas specific deployment descriptor. - * @return true if bean has just been loaded. - */ - public boolean useBeans(String filename, boolean create) { - debug("useBeans " + filename); - boolean added = false; - try { - // Load bean in EJBServer if not already loaded. - if (!isLoaded(filename)) { - addBeans(filename); - - // Create table if the bean was not loaded - if (create) { - getDBEnv().initTable(filename); - } - added = true; - } - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot load bean :" + e); - } - return added; - } - - /** - * synchronize all entity beans - * @param passivate passivate all instances after synchronization. - */ - public void sync(boolean passivate) { - logger.log(BasicLevel.DEBUG, "sync"); - try { - if (passivate) { - sleep(2500); - } - String domainName = j2eeserver.getDomain(); - ObjectName on = ObjectName.getInstance(domainName + ":type=service,name=ejbContainers"); - Boolean[] params = {passivate}; - String[] signature = {"boolean"}; - try { - cnx.invoke(on, "syncAllEntities", params, signature); - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Can't invoke mbeanServer: " + e); - } - - } catch (Exception e) { - logger.log(BasicLevel.ERROR, "Cannot sync entities :" + e); - } - } - - /** - * Set the Default Transaction Timeout value on the server. - * @param tt timeout in seconds - */ - public static void stopTxAt(int tt) { - try { - String domainName = j2eeserver.getDomain(); - ObjectName on = ObjectName.getInstance(domainName + ":j2eeType=JTAResource,name=JTAResource,J2EEServer=" + jonasName); - try { - Attribute att = new Attribute("timeOut", tt); - cnx.setAttribute(on, att); - //Integer val = (Integer) cnx.getAttribute(on, "timeOut"); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - - } catch (Exception e) { - System.err.println("Cannot set transaction timeout: " + e); - } - } - - /** - * Get the session bean to manage database tables. - */ - public DBEnv getDBEnv() { - if (dbEnv == null) { - - useBeans("tables", false); - - // Connect to the DBEnvHome object - DBEnvHome dbhome = null; - try { - dbhome = (DBEnvHome) PortableRemoteObject.narrow(ictx.lookup("tablesDBEnvHome"), DBEnvHome.class); - } catch (NamingException e) { - System.err.println(">>> " + e); - fail("Cannot bind to DBEnvHome"); - } - - // Create the table using a session bean - try { - dbEnv = dbhome.create(); - } catch (Exception e) { - fail(e.toString()); - } - } - return dbEnv; - } - - /** - * sleep n millisec. - */ - public void sleep(int msec) { - try { - Thread.sleep(msec); - } catch (InterruptedException e) { - fail(e.toString()); - } - } - - public void testEmpty() throws Exception { - } - -} diff --git a/jonas_tests/deployment/build.xml b/jonas_tests/deployment/build.xml deleted file mode 100644 index c9f78b463e..0000000000 --- a/jonas_tests/deployment/build.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/deployment/src/DDTest.java b/jonas_tests/deployment/src/DDTest.java deleted file mode 100644 index a62ba12623..0000000000 --- a/jonas_tests/deployment/src/DDTest.java +++ /dev/null @@ -1,487 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -import java.io.BufferedReader; -import java.io.InputStreamReader; - -import org.ow2.jonas.deployment.client.tests.ClientDeploymentTest; -import org.ow2.jonas.deployment.client.tests.JonasClientDeploymentTest; -import org.ow2.jonas.deployment.client.xml.ApplicationClient; -import org.ow2.jonas.deployment.client.xml.JonasClient; -import org.ow2.jonas.deployment.common.xml.Element; -import org.ow2.jonas.deployment.ear.tests.EarDeploymentTest; -import org.ow2.jonas.deployment.ear.xml.Application; -import org.ow2.jonas.deployment.ejb.tests.EJBDeploymentTest; -import org.ow2.jonas.deployment.ejb.tests.JonasEJBDeploymentTest; -import org.ow2.jonas.deployment.ejb.xml.EjbJar; -import org.ow2.jonas.deployment.ejb.xml.JonasEjbJar; -import org.ow2.jonas.deployment.rar.tests.JonasRarDeploymentTest; -import org.ow2.jonas.deployment.rar.tests.RarDeploymentTest; -import org.ow2.jonas.deployment.rar.xml.Connector; -import org.ow2.jonas.deployment.rar.xml.JonasConnector; -import org.ow2.jonas.deployment.tests.AbsDeploymentTest; -import org.ow2.jonas.deployment.web.tests.JonasWebDeploymentTest; -import org.ow2.jonas.deployment.web.tests.WebDeploymentTest; -import org.ow2.jonas.deployment.web.xml.JonasWebApp; -import org.ow2.jonas.deployment.web.xml.WebApp; -import org.ow2.jonas.deployment.ws.tests.JonasWsDeploymentTest; -import org.ow2.jonas.deployment.ws.tests.WsDeploymentTest; -import org.ow2.jonas.deployment.ws.xml.JavaWsdlMapping; -import org.ow2.jonas.deployment.ws.xml.JonasWebservices; -import org.ow2.jonas.deployment.ws.xml.Webservices; - - -/** - * Defines a class for testing - * @author Florent Benoit - * @author Philippe Coq - * @author Helene Joanin - */ - -public class DDTest { - - /** - * WebApp tests - */ - private static WebDeploymentTest webDeploymentTest = null; - private static JonasWebDeploymentTest jonasWebDeploymentTest = null; - - /** - * Connector tests - */ - private static RarDeploymentTest rarDeploymentTest = null; - private static JonasRarDeploymentTest jonasRarDeploymentTest = null; - /** - * Application Client tests - */ - private static ClientDeploymentTest clientDeploymentTest = null; - private static JonasClientDeploymentTest jonasClientDeploymentTest = null; - /** - * EJB tests - */ - private static EJBDeploymentTest ejbDeploymentTest = null; - private static JonasEJBDeploymentTest jonasEjbDeploymentTest = null; - /** - * Application tests - */ - private static EarDeploymentTest earDeploymentTest = null; - - /** - * Web Services tests - */ - private static WsDeploymentTest wsDeploymentTest = null; - private static JonasWsDeploymentTest jonasWsDeploymentTest = null; - - private DDTest() { - webDeploymentTest = new WebDeploymentTest(); - jonasWebDeploymentTest = new JonasWebDeploymentTest(); - rarDeploymentTest = new RarDeploymentTest(); - jonasRarDeploymentTest = new JonasRarDeploymentTest(); - clientDeploymentTest = new ClientDeploymentTest(); - jonasClientDeploymentTest = new JonasClientDeploymentTest(); - ejbDeploymentTest = new EJBDeploymentTest(); - jonasEjbDeploymentTest = new JonasEJBDeploymentTest(); - earDeploymentTest = new EarDeploymentTest(); - wsDeploymentTest = new WsDeploymentTest(); - jonasWsDeploymentTest = new JonasWsDeploymentTest(); - - } - - public static void main(String[] args) throws Exception { - DDTest ddTest = new DDTest(); - try { - ddTest.interactUser(); - }catch (Exception e) { - System.out.println("Error : '" + e.getMessage() + "'"); - e.printStackTrace(); - System.exit(2); - } - } - - private void choice() { - System.out.println("d for Displaying an XML element"); - System.out.println("t for Testing an XML element"); - System.out.println("s for Stressing an XML element"); - System.out.println("p for Parsing check"); - System.out.println("f for Parsing from an XML file"); - System.out.println("q for Quit"); - } - - private void help() { - System.out.println("+--------------------------------+"); - System.out.println("| |"); - System.out.println("+--------------------------------+"); - - } - - private void interactUser() throws Exception { - // User interface - BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - while (true) { - choice(); - System.out.print("> "); - String readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - char c = readLine.charAt(0); - - switch (c) { - case 'd': - System.out.println("1 - WebApp element"); - System.out.println("2 - JonasWebApp element"); - System.out.println("3 - Connector element"); - System.out.println("4 - JonasConnector element"); - System.out.println("5 - ClientApp element"); - System.out.println("6 - JonasClient element"); - System.out.println("7 - Application element"); - System.out.println("8 - EjbJar element"); - System.out.println("9 - JonasEjbJar element"); - System.out.println("a - WebServices element"); - System.out.println("b - JonasWebServices element"); - System.out.println("c - JavaWsdlMapping element"); - - System.out.println("0 - Customize element"); - - System.out.print("> "); - readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - c = readLine.charAt(0); - Element element = null; - switch (c) { - case '1' : - element = new WebApp(); - break; - case '2' : - element = new JonasWebApp(); - break; - case '3' : - element = new Connector(); - break; - case '4' : - element = new JonasConnector(); - break; - case '5' : - element = new ApplicationClient(); - break; - case '6' : - element = new JonasClient(); - break; - case '7' : - element = new Application(); - break; - case '8' : - element = new EjbJar(); - break; - case '9' : - element = new JonasEjbJar(); - break; - case 'a' : - element = new Webservices(); - break; - case 'b' : - element = new JonasWebservices(); - break; - case 'c' : - element = new JavaWsdlMapping(); - break; - - case '0' : - System.out.print("Enter the name of the Element > "); - String className = in.readLine(); - try { - Class cl = Class.forName(className); - element = (Element) cl.newInstance(); - } catch (Exception e) { - System.out.println("className is not a good element " + e); - continue; - } - break; - - default : - continue; - } - - wsDeploymentTest.fill(element, false); - System.out.println(""); - System.out.println(element); - break; - - case 't': - System.out.println("1 - WebApp element"); - System.out.println("2 - JonasWebApp element"); - System.out.println("3 - Connector element"); - System.out.println("4 - JonasConnector element"); - System.out.println("5 - ClientApp element"); - System.out.println("6 - JonasClient element"); - System.out.println("7 - Application element"); - System.out.println("8 - EjbJar element"); - System.out.println("9 - JonasEjbJar element"); - System.out.println("a - WebServices element"); - System.out.println("b - JonasWebServices element"); - System.out.println("c - JaxrcpMapping element"); - - System.out.print("> "); - readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - c = readLine.charAt(0); - AbsDeploymentTest testElememt = null; - switch (c) { - case '1' : - webDeploymentTest.startTest(true); - break; - case '2' : - jonasWebDeploymentTest.startTest(true); - break; - case '3' : - rarDeploymentTest.startTest(true); - break; - case '4' : - jonasRarDeploymentTest.startTest(true); - break; - case '5' : - clientDeploymentTest.startTest(true); - break; - case '6' : - jonasClientDeploymentTest.startTest(true); - break; - case '7' : - earDeploymentTest.startTest(true); - break; - case '8' : - ejbDeploymentTest.startTest(true); - break; - case '9' : - jonasEjbDeploymentTest.startTest(true); - break; - case 'a' : - wsDeploymentTest.startTest(true); - break; - case 'b' : - wsDeploymentTest.startTest(true); - break; - case 'c' : - wsDeploymentTest.startJaxrpcMappingTest(true); - break; - - default : - continue; - } - break; - - case 's': - System.out.println("1 - WebApp element"); - System.out.println("2 - JonasWebApp element"); - System.out.println("3 - Connector element"); - System.out.println("4 - JonasConnector element"); - System.out.println("5 - ClientApp element"); - System.out.println("6 - JonasClient element"); - System.out.println("7 - Application element"); - System.out.println("8 - EjbJar element"); - System.out.println("9 - JonasEjbJar element"); - System.out.println("a - WebServices element"); - System.out.println("b - JonasWebServices element"); - System.out.println("c - JaxrcpMapping element"); - - System.out.print("> "); - readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - c = readLine.charAt(0); - - switch (c) { - case '1' : - webDeploymentTest.stress(); - break; - case '2' : - jonasWebDeploymentTest.stress(); - break; - case '3' : - rarDeploymentTest.stress(); - break; - case '4' : - jonasRarDeploymentTest.stress(); - break; - case '5' : - clientDeploymentTest.stress(); - break; - case '6' : - jonasClientDeploymentTest.stress(); - break; - case '7' : - earDeploymentTest.stress(); - break; - case '8' : - ejbDeploymentTest.stress(); - break; - case '9' : - jonasEjbDeploymentTest.stress(); - break; - case 'a' : - wsDeploymentTest.stress(); - break; - case 'b' : - jonasWsDeploymentTest.stress(); - break; - case 'c' : - wsDeploymentTest.startJaxrpcMappingTest(true); - break; - - default : - continue; - } - break; - - case 'p': - System.out.println("1 - WebApp element"); - System.out.println("2 - JonasWebApp element"); - System.out.println("3 - Connector element"); - System.out.println("4 - JonasConnector element"); - System.out.println("5 - ClientApp element"); - System.out.println("6 - JonasClient element"); - System.out.println("7 - Application element"); - System.out.println("8 - EjbJar element"); - System.out.println("9 - JonasEjbJar element"); - System.out.println("a - WebServices element"); - System.out.println("b - JonasWebServices element"); - System.out.println("c - JaxrcpMapping element"); - - System.out.print("> "); - readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - c = readLine.charAt(0); - switch (c) { - case '1' : - webDeploymentTest.parseElement(); - break; - case '2' : - jonasWebDeploymentTest.parseElement(); - break; - case '3' : - rarDeploymentTest.parseElement(); - break; - case '4' : - jonasRarDeploymentTest.parseElement(); - break; - case '5' : - clientDeploymentTest.parseElement(); - break; - case '6' : - jonasClientDeploymentTest.parseElement(); - break; - case '7' : - earDeploymentTest.parseElement(); - break; - case '8' : - ejbDeploymentTest.parseElement(); - break; - case '9' : - jonasEjbDeploymentTest.parseElement(); - break; - - } - - break; - case 'f': - System.out.println("1 - web.xml file"); - System.out.println("2 - jonas-web.xml file"); - System.out.println("3 - ra.xml file"); - System.out.println("4 - jonas-ra.xml file"); - System.out.println("5 - client.xml file"); - System.out.println("6 - jonas-client.xml file"); - System.out.println("7 - application.xml file"); - System.out.println("8 - ejb-jar.xml file"); - System.out.println("9 - jonas-ejbjar.xml file"); - - System.out.print("> "); - readLine = in.readLine(); - if (readLine.length() == 0) { - continue; - } - c = readLine.charAt(0); - System.out.print("Enter the name of the xml file > "); - String fileName = in.readLine(); - - switch (c) { - case '1' : - webDeploymentTest.parseXmlfromFile(fileName); - break; - case '2' : - jonasWebDeploymentTest.parseXmlfromFile(fileName); - break; - case '3' : - rarDeploymentTest.parseXmlfromFile(fileName); - break; - case '4' : - jonasRarDeploymentTest.parseXmlfromFile(fileName); - break; - case '5' : - clientDeploymentTest.parseXmlfromFile(fileName); - break; - case '6' : - jonasClientDeploymentTest.parseXmlfromFile(fileName); - break; - case '7' : - earDeploymentTest.parseXmlfromFile(fileName); - break; - case '8' : - ejbDeploymentTest.parseXmlfromFile(fileName); - break; - case '9' : - jonasEjbDeploymentTest.parseXmlfromFile(fileName); - break; - case 'a' : - wsDeploymentTest.parseXmlfromFile(fileName); - break; - case 'b' : - jonasWsDeploymentTest.parseXmlfromFile(fileName); - break; - case 'c' : - wsDeploymentTest.parseJaxrcpMappingElement(); - break; - - } - break; - - case 'q': - System.exit(0); - break; - - default : - break; - } - } - } - - -} diff --git a/jonas_tests/doc/index.html b/jonas_tests/doc/index.html deleted file mode 100644 index 3648e8af7e..0000000000 --- a/jonas_tests/doc/index.html +++ /dev/null @@ -1,617 +0,0 @@ - - - - - Jonas Tests - - - - - - -

    JOnAS Test Suite

    - -

    Table of contents

    -
    - -

    Aim of the suite

    - -

    The aim of this suite is to provide tests that verify that JOnAS conforms -to the EJB specifications. This suite is used to identify regressions in -contributions made in the JOnAS code. This suite is far from complete and -will be expanded in the future. Anyone is welcome to write or add new test -cases to this suite according to the guidelines explained below.

    - -

    Note that this test suite has been done to test JOnAS, and its use to test -other application servers is not straightforward.

    - -

    Getting the suite from CVS repository

    - -

    Anyone can checkout source code from our anonymous CVS server. To do so, -simply use the following commands (if you are using a GUI CVS client, -configure it appropriatly):

    -
    -cvs -d :pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/jonas login
    -cvs -d :pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/jonas co jonas_tests
    -
    - -

    When prompted for a password for anonymous, simply press the Enter key.

    - -

    Description of the source tree

    - -

    Under jonas_tests you will find different test suites -:

    - - - - - - - - - - - - - - - - -
    conformancetest of EJB spec conformance
    stresstest of robustness and scalibility
    j2eecatest Application Server conformance to J2EE Connector Architecture
    - -

    Other suites are likely to be added in the future.

    - -

    conformance and stress are made of the -following files and directories:

    - - - - - - - - - - - - - - - - -
    build.xmlant file to build and run all the tests
    srcsource files
    junit.shscript to run 1 or more tests
    - -

    The source code is organized according to the package name. So, for the -conformance test suite, the source is located in -src/org/objectweb/jonas/jtests :

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    beansEach directory contains code for a set of beans (a ejb-jar file) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    annuairesession bean accessing entity beans
    beanexcbeans used for exception testing
    clusterentity beans with shared attribute
    ebasic
    foldermainly to test local interfaces
    j2eecabeans used for jca 1.0 Connector Architecture testing
    jca15beans used for JCA 1.5 Connector Architecture testing
    jdbcrabeans used for jdbc resource adapter testing
    localbeans used for local interfaces testing
    messagebeans used for jms testing
    securedbeans used for security testing
    transactedbeans used for transaction testing
    remoterunnerbeans used for running junit test suites on the server - side.
    -
    clientsEach directory contains code for a set of test suites. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    distributiontests related to the chapter 19 of the Specs EJB2.0
    entitytests related to the chapter 9,10,11,12,14 of the Specs - EJB2.0
    exceptiontests related to the chapter 18 of the Specs EJB2.0
    j2eecatests related to JCA 1.0 Connector Architecture testing
    jca15tests related to JCA 1.5 Connector Architecture testing
    jdbcratests related to JDBC RA testing
    jms
    localtest suites that must be run on the server side
    securitytests related to the chapter 21 of the Specs EJB2.0
    sessiontests related to the chapter 6,7 of the Specs EJB2.0
    suitesuite that run all the suites
    transactiontests related to the chapter 17 of the Specs EJB2.0
    -
    dtdsA local copy of the dtds used in the deployment descriptors. - (Useful to be able to edit the DDs with emacs).
    tablesThe definition of a session bean used for creating and initializing - the database tables used by tests.
    templatesTemplates of a test suite.
    utilUtility classes.
    - -

    The stress test suite structure is slightly different, in fact simplified. -This documentation focuses on the conformance test suite, however, all tests -can be applied to the stress test suite.

    - -

    Building the suite

    - -

    Using ant

    - -

    This test has been designed to be compiled and run using Ant.
    -Ant must be installed (with the optional tasks package) and the environment -variables %ANT_HOME% or $ANT_HOME must be set.
    -$ANT_HOME/bin must have been added to the PATH -environment variable.
    -The xalan product must be installed, and the xalan.jar -must be present in $ANT_HOME/lib. (xalan is necessary for the -JUnitReport ant task).

    - -


    -The JUnit product must also be installed and the -junit.jar must be present in $ANT_HOME/lib.
    -For xalan and JUnit, you may also choose to update the file -$JONAS_ROOT/bin/unix/config_env (on Unix) or -%JONAS_ROOT%\bin\nt\config_env.bat (on Windows) by adding the path to -xalan.jar and junit.jar in the predefined classpath -used by JOnAS which is defined in this file.

    - -

    The main ant targets are the following :

    - - - - - - - - - - - - - - - - -
    cleanfor deleting all generated classes
    installfor installing ejbjars under $JONAS_ROOT/ejbjars This target should - be used to rebuild all the test suites.
    reportto run the all set and produce a report
    - -

    To build the jonas tests :

    -
      -
    1. Customize jonas-tests/build.properties according to your - environment.

      -
    2. -
    3. Go to the jonas-tests/ directory and type
      - ant install

      -
    4. -
    - -

    Running the suite

    - -

    Using Ant

    - -

    You can launch the complete JOnAS test suite via ant and -obtain a test suite report.

    - -

    You should use the CLASSPATH environment variable or modify the predefined -classpath used by JOnAS in the $JONAS_ROOT/bin/unix/config_env (on Unix) or -%JONAS_ROOT%\bin\nt\config_env.bat (on Windows) file, by adding the path to -jonas_tests/conformance/classes/$OBJECTWEB_ORB.

    -
      -
    1. Update the jonas.properties file according to your environment. -
      - Actually, the JOnAS suite needs only one datasource with jdbc_1 as - datasource.name.
      - The jms service must be set in jonas.services - property.
    2. -
    3. Run the JOnAS Server : jonas start
    4. -
    5. Once it is running you can launch the complete JOnAS test suite via the - report ant target.
    6. -
    7. A test suite report is generated under - jonas_tests/conformance/reports/html.
    8. -
    - -

    Using JDBC Resource Adapter

    - -

    To execute the JDBC Resouce Adapter tests, two datasources jdbc_xa1 -and jdbc_xa2 are required.

    -
      -
    1. Update the jonas.properties file according to your environment. -
      - Replace the dbm service with resource in - jonas.services property.
    2. -
    3. There are four JDBC Resource Adapters available:
      - Data Manager
      - Data Service
      - Connection Pool
      - XA Support
    4. -
    5. Configure the deployment descriptors to access the JDBC driver.
    6. -
    7. Reference the JOnAS documentation for configuration details.
    8. -
    -

    Running J2EE Connector Architecture 1.5 (JCA 1.5) tests

    - -

    To execute the jca 1.5 tests, a fictional Resource Adapter - is created when the jonas_test suite is built. Verify the following to assure proper setup of the test.

    -
      -
    1. Update the jonas.properties file according to your environment. - Include resource in the - jonas.services property. For example,
      jonas.services - registry,jmx,jtm,dbm,security,jms,resource,ejb2,web,ear
    2. -
    3. The deployed Ersatz (fictional) Resource Adapters are deployed - in the JONAS_BASE rar autoload area. -
      - eis/ErsatxEIS.rar
      - eis/ErsatzNolog.rar
      - eis/ErsatzSecurity.rar
      - eis/ErsatzLoTransaction.rar
      - eis/ErsatzXATransaction.rar
    4. -
    5. Add entries to the trace.properties files if traces are desired. The - entries should look like the following.
      - - # ------------------------------------------------
      - # logger definitions
      - # ------------------------------------------------
      - #logger.org.objectweb.jonas_tests.level DEBUG
      - logger.org.objectweb.jonas.jtests.j2eeca.level DEBUG
      - logger.ersatz.resourceadapter.level DEBUG
      - logger.fictional.resourceadapter.level DEBUG (for JCA 1.0 only) -
    6. -
    - -

    Using scripts

    - -

    It may be interesting to launch only one of the suites or only one -testcase of a test suite, particularly to debug a testcase that fails.

    - -

    To do this a script jonas_tests/junit.bat can be run. -Depending on the number of arguments, you will run:

    -
      -
    1. all the junit tests
    2. -
    3. all suites in a client directory
    4. -
    5. 1 named suite in a directory
    6. -
    7. 1 testcase in 1 particular suite in a directory
    8. -
    - -

    Windows Example:

    -
    junit conformance jca15
    -junit conformance jca15 F_connectorTest testConnectionBasics
    -    
    - -

    Update the junit.bat file according to your environment. Note the location - of TEST_CLASSES, PROJ_BASE and ANT_HOME. -

    -

    Naming conventions

    - -

    In order to have a homogeneous suite we have defined strict naming -conventions that should be followed. This makes it easier to understand a -test suite.

    - -

    The coding conventions are related to :

    -
      -
    • file names for the suite classes
    • -
    • interfaces, beans, deployment descriptor, ejb-jar names
    • -
    • ejb-name, jndi names, table names in DB, field names
    • -
    • etc.
    • -
    - -

    Rules for bean names in the tests

    -Beans must be put in a directory under -src/org/objectweb/jonas/jtests/beans. Each directory will produce a -jar file holding a set of beans that work together. Assuming we choose: - - - - - - - - - - - - -
    bdirdirectory for this bean
    bnamename of this bean
    -To avoid name conflicts in JNDI, the bdir/bname combination -must be unique in the junit suite . Other names can be deduced from these: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    optional remote interfacebname
    optional home interfacebnameHome
    optional local interfacebnameLocal
    optional local home interfacebnameLocalHome
    bean class implementationbnameXX
    optional primary key classbnamePK
    jar file namebname.jar
    ejb-name in ddbnameXX
    display-name in ddbdir/bnameXX
    JNDI name for homebdirbnameXXHome
    table name in DB (entity)bdirbnameXX
    field names (entity CMP)c_field
    - -

    XX must be one of the following values :

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    EBentity bean with bean managed persistence
    ECentity bean with container managed persistence(cmp version 1.x)
    EC2entity bean with container managed persistence(cmp version 2.x)
    SLsession bean stateless
    SFsession bean stateful
    SYsession bean stateful implementing Synchronization interface
    STsession bean stateful with bean managed transactions
    MDmessage driven bean
    - -

    Note : that these rules are inforced when using the Newbean -tool.

    - -

    Rules for files names for the client suites

    - -

    Each directory in src/org/objectweb/jonas/jtests/clients holds a -set of test suites relative to a common topic (entity, session, transaction, -etc...). To improve the readability of these files and to know which suite -can be run with which testcase, we have enforced the following naming -conventions :

    - - - - - - - - - - - - - - - - -
    A_name.javaAbstract class holding test cases shared by several suites. These - files cannot be run as a test suite since they do not have a - main.
    C_name.javaComposite suites that link several Suites together. They can be run - separately, but not with only 1 testcase. Their main routine should - be very simple, only 1 line.
    F_name.javaFinal suites that can be run separately or with only 1 testcase. - They must have a main routine with a -n arg to be able to be - run with a specified test case.
    - -

    How to contribute?

    - -

    Coding conventions

    - -

    Coding conventions are the same for jonas or for jonas_tests. They must -follow -Code Conventions for the JavaTM Programming Language

    - -

    Methodology for writing new tests

    -
      -
    • Each testcase must be independent of the others. It is possible to run - each testcase more than once without problems. This implies that - everything is clean after the test, for example, a testcase creating an - instance should remove it before returning.
    • -
    • Beans and clients are in different packages. All beans should be under - beans directory, all clients (tests) should be in clients - directory. A useBean() method must be used in the client to ask - the EJBServer to load a bean, if it is not already loaded.
    • -
    • When loading entity beans the first time in the server, tables in - database are dropped and created. This is to avoid problems due to - previous run of tests. This is done by setting a boolean in - useBean.
    • -
    • Each testcase name must begin by the String test. Inside the - tests method, there is no need to try/catch unexpected exceptions. Only - catch exceptions that are expected.
    • -
    - -

    Creating a new suite

    -
      -
    • You must first decide which directory your Suite should be in. A - limited number of directories has been defined in clients. See Structure of source code. You should not need to - add new directories since all needed directories have already been - defined.
    • -
    • An example of Suites can be found in - src/org/objectweb/jonas/jtests/templates
    • -
    • Examples of more sophisticated suites can be found in - src/org/objectweb/jonas/jtests/clients/entity
    • -
    - -

    Adding test cases to an existing suite

    - -

    Adding a new test case is pretty straightforward. Have a look at the tests -already written then mimic them. In most cases you will not have to catch -exceptions. So the tests look very simple. You can refer to the junit primer -for more details.

    - -

    Submitting a contribution to jonas team

    - -

    Follow the same rules as for contributing to jonas.

    - -

    Current conformance test results

    -You can find conformance test results for the most recent JOnAS builds on the -Objectweb website at http://jonas.objectweb.org/tests.html. -The suite results are organized by configuration. Each configuration is -identified as follows: - -

    ORB/Operating System/DataSource/JDK version/JOnAS build

    - -

    e.g. RMI / Solaris / Oracle / JDK1.3/JOnAS-Tomcat

    - - diff --git a/jonas_tests/etc/style/standalone_perfs/compare.xsl b/jonas_tests/etc/style/standalone_perfs/compare.xsl deleted file mode 100644 index 539b67712b..0000000000 --- a/jonas_tests/etc/style/standalone_perfs/compare.xsl +++ /dev/null @@ -1,559 +0,0 @@ - - - - - - - - - - Test Results - - - - - - - - - - - -
    - - -
    - - - -
    - - - - - - -
    - - - - - - - - - -

    Environment

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    JOnAS Version
    Packaging
    Version JDK
    Version ANT
    DataSource
    System
    Arch
    Version
    Host
    Author
    Date
    - -
    - - - - - - - - - -

    Packages

    - Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    -
    - - - - - - - - - - - - -

    Package

    - - - - - - -
    - Back to top -

    -

    - - - - - - - - -

    TestCase

    - - - - - - - - - - -
    -

    - - Back to top - - - - -

    Summary

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    TestsSuccess rateTime jrmpTime iiop
    - - - - - - - - - - - - - -
    -
    - - - - -

    -
    - - - - Name - Tests - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - Name - Tests - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - Name - - Time(s) jrmp - Time(s) iiop - Time(s) jeremie - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - diff --git a/jonas_tests/etc/suiteslist.html b/jonas_tests/etc/suiteslist.html deleted file mode 100644 index 9bf624aea5..0000000000 --- a/jonas_tests/etc/suiteslist.html +++ /dev/null @@ -1,18 +0,0 @@ -

    All Suites

    - - - - - - - - - - - - - - - - -
    Name
    JOnAS Junit Test Suite - conformance
    JOnAS Junit Test Suite - examples
    JOnAS Junit Test Suite - webservices
    diff --git a/jonas_tests/examples/base/.gitignore b/jonas_tests/examples/base/.gitignore deleted file mode 100644 index 4262a4664d..0000000000 --- a/jonas_tests/examples/base/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -output/ -build/ - diff --git a/jonas_tests/examples/base/examples/README b/jonas_tests/examples/base/examples/README deleted file mode 100644 index c0a33394c1..0000000000 --- a/jonas_tests/examples/base/examples/README +++ /dev/null @@ -1,48 +0,0 @@ -Copyright (C) BULL S.A. 1998-2002. - - -There are 4 kind of examples: - - - examples with enterprise java beans accessed from a simple client which - is a java program, (these examples are all on examples/src); - - - examples with enterprise java beans accessed from a servlet - or JSP and packaged in .ear file: - examples/earsample, examples/cmp2, examples/alarm. - - - examples of AXIS use in JOnAS : examples/webservices - - - 1 example of JOnAS application generation via xdoclet. - -There is also the well-known Java Pet Store application. (petstore1.3) - -Before compiling and running these examples, the installation and configuration -of JOnAS have to be done: - - - initialization of the JONAS_ROOT environment variable, - - optionally, initialization of the JONAS_BASE environment variable, - - update of your PATH, - - update of the JOnAS config_env script, - - configuration of JNDI environment via the carol.properties file - - configuration of the database access: - - update of the JOnAS config_env script, - - configuration of JOnAS environment via the jonas.properties file, - - update of the .properties file. - - configuration of Tomcat for JOnAS. - -Refer to install documentation for more information. - - - -Compiling these examples: ------------------------- - Use the Ant 1.5 build tool in one of the directories where there is a build.xml file. - - You may have to modify $JONAS_ROOT/examples/build.properties - - The default "install" target allows to build the examples and copy the built ejb-jar - file in your JOnAS_BASE/ejbjars directory. - - Example: - export JONAS_ROOT= - cd $JONAS_ROOT/examples; ant install diff --git a/jonas_tests/examples/base/examples/alarm/README b/jonas_tests/examples/base/examples/alarm/README deleted file mode 100644 index c526e47a8a..0000000000 --- a/jonas_tests/examples/base/examples/alarm/README +++ /dev/null @@ -1,78 +0,0 @@ -Application Overview: --------------------- -This application watch alarm messages generated asynchronously via -JMS. It involves the different technics used in JOnAS: -- Entity Bean for AlarmRecord, persistent in a DataBase -- Session Bean to allow clients to visualize alarm received -- Message Driven Bean to catch Alarms -- JMS to use a topic where Alarms are sent and received -- a service included in EJBServer (AlarmManager) -- tomcat or jetty (for JSP pages and servlets) -- security -Alarm messages are formed of (severity 1-3, from, reason). - -Directory structure: --------------------- -etc/web.xml application description -web/ JSPs, images, html files. -beans/ beans and service, to be loaded in JOnAS. -client/ client java program generating alarms and using JMS. - this alarm generator is obsolete. - -Compiling this test: -------------------- - -Use the Ant 1.5 build tool: - ant install - - -Running this test: ------------------ -Prerequisite: - - You must have installed Tomcat4.1.x or Jetty 4.2.x - - You must have configured a Database. - The jndi name used in the bean is jdbc_1. - See $JONAS_ROOT/doc/GettingStarted.html for more information. - - -1) run JOnAS server - The jonas.properties file must specify the following services : - - web service, jms service, ear service - You also have to add the alarm.ear component in the list of jonas.service.ear.descriptors. - - Note that the AlarmTopic that will be used by this test will be automatically created - when the message driven bean will be loaded in the container. - jonas start - -2) Load the alarm.ear if you have not added it in the ear service descriptors list - jonas admin -a alarm.ear - -3) Generate alarms - The easiest way is to use the link on the first html page that will run - a servlet that will generate customized alarms. - -4) Look at http://$HOSTNAME:/alarm/index.html - to start using the web application. - -5) Stop the jonas server - jonas stop - -Known bugs or Limitations: --------------------------- -1. -Sending many alarm messages concurrently with InstantDB as database will -not work (deadlock leading to transaction timeout, and delay on servlet -display) This can occur with every database that cannot handle multithreading -properly. - -2. -The display pages are not automatically refreshed when a new alarm is -arrived. To be done in a future version. - -3. -Filter names cannot contain "space" characters. - -4. -The first time you run this application, the table will be created in the -database. An error message will be printed by JOnAS because it tries -to drop the table, but it does not exist. Ignore it. diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmData.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmData.java deleted file mode 100644 index aa6570b289..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmData.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.io.Serializable; - -/** - * - * @author Florent Benoit - */ -/** - * Data associated with an AlarmRecord. This is what will be passed to servlets - * to be displayed. - */ -public class AlarmData implements Serializable { - - /** - * AlarmRecord number (=pk) - */ - private int num; - - /** - * Severity Level - */ - private int sev; - - /** - * Device that generated Alarm - */ - private String device; - - /** - * Alarm Message - */ - private String message; - - /** - * Count of received messages - */ - private int count; - - /** - * State (1=received, 2=processed, 3=deleted) - */ - private int state; - - /** - * Date of first message - */ - private java.sql.Date date; - - /** - * @param n AlarmRecord number - * @param s Severity Level - * @param dev Device that generated Alarm - * @param m Alarm Message - * @param d Date of first message - */ - public AlarmData(int n, int s, String dev, String m, java.sql.Date d) { - num = n; - sev = s; - device = dev; - message = m; - count = 1; - state = 1; - date = d; - } - - /** - * @return the alarm record number - */ - public int getNum() { - return num; - } - - /** - * @return Severity Level - */ - public int getSev() { - return sev; - } - - /** - * @return the device - */ - public String getDevice() { - return device; - } - - /** - * @return the alarm message - */ - public String getMessage() { - return message; - } - - /** - * @return nb of messages received - */ - public int getCount() { - return count; - } - - /** - * Set the nb of messages received - * @param c Count of received messages - */ - public void setCount(int c) { - count = c; - } - - /** - * @return the state - */ - public int getState() { - return state; - } - - /** - * Set the current state - * @param s State (1=received, 2=processed, 3=deleted) - */ - public void setState(int s) { - state = s; - } - - /** - * @return Date of first message - */ - public java.util.Date getDate() { - return date; - } -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmListenerBean.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmListenerBean.java deleted file mode 100644 index 0d7739ba76..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmListenerBean.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import javax.ejb.EJBException; -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageListener; - -/** - * - */ -public class AlarmListenerBean implements MessageDrivenBean, MessageListener { - - /** - * Reference to the alarm manager - */ - private static transient AlarmManager alarmManager = null; - - /** - * Default constructor - */ - public AlarmListenerBean() { - } - - /** - * Set the associated context. The container call this method after the - * instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param ctx A MessageDrivenContext interface for the - * instance. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - } - - /** - * A container invokes this method before it ends the life of the - * message-driven object. This happens when a container decides to terminate - * the message-driven object. This method is called with no transaction - * context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() throws EJBException { - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. We - * can do here all operations that will be common to all messages, i.e. - * asking JNDI for bean homes, ... - */ - public void ejbCreate() { - // Get a reference on the AlarmManager. - alarmManager = AlarmManager.getInstance(); - - } - - /** - * Called when there is a messgae - * @param message the message - * @see javax.jms.MessageListener#onMessage(javax.jms.Message) - */ - public void onMessage(Message message) { - - int sev = 0; - String from = null; - String reason = null; - - // Decode the message (MapMessage) - MapMessage msg = (MapMessage) message; - try { - sev = msg.getInt("Severity"); - from = msg.getString("From"); - reason = msg.getString("Reason"); - } catch (JMSException e) { - Debug.logError("AlarmListenerBean exception:" + e); - } - // Give all messages to the AlarmServiceHelper. - alarmManager.alarm(sev, from, reason); - - } -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmManager.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmManager.java deleted file mode 100644 index 7a896345f4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmManager.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; -import java.util.Iterator; -import java.util.LinkedList; - -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -/** - * AlarmManager implementation. - */ -public class AlarmManager { - - /** - * Unique instance of this class - */ - private static AlarmManager unique = null; - - /** - * Initial context - */ - private Context ictx = null; - - /** - * Home the bean AlarmRecord - */ - private AlarmRecordHome arh = null; - - /** - * Bean alarm Record - */ - private AlarmRecord arcount = null; - - /** - * List of profiles - */ - private LinkedList profilList = new LinkedList(); - - /** - * Default constructor - */ - private AlarmManager() { - Debug.log("AlarmManager - creating"); - - // Get a ref on AlarmRecordHome - try { - ictx = new InitialContext(); - arh = (AlarmRecordHome) PortableRemoteObject.narrow(ictx.lookup("alarmrecord"), AlarmRecordHome.class); - } catch (NamingException e) { - Debug.logError("AlarmManager : Cannot get AlarmRecordHome:" + e); - } - - // Get number of alarms still in database - // Create AlarmTable if does not exist - int trycount = 0; - while (arcount == null) { - try { - arcount = arh.findByPrimaryKey("0"); - int alarmid = arcount.getAlarmCount(); - Debug.log("AlarmManager: " + alarmid + " alarm records"); - } catch (Exception e) { - if (trycount > 0) { - Debug.logError("AlarmManager - bad start"); - return; - } - Debug.log("AlarmTable does not exist: create it"); - try { - arh.create(); - } catch (Exception f) { - Debug.logError("AlarmManager: Cannot init database:" + e); - } - trycount++; - } - } - - // Create a set of default profils - newProfil("all", "A"); - - Debug.log("AlarmManager - created"); - } - - /** - * @return unique instance of this class - */ - public static AlarmManager getInstance() { - if (unique == null) { - unique = new AlarmManager(); - } - return unique; - } - - /** - * * a new Alarm is arrived must be synchronized to make sure we do not - * create several AlarmRecord for the same Alarm (in case of many identical - * Alarm arriving at the same time) - * @param severity the level of severity - * @param from the device name - * @param reason the reason of the alarm - */ - public synchronized void alarm(int severity, String from, String reason) { - Debug.log("AlarmManager new Alarm from " + from + ": " + reason); - - // Search if alarm already known - // Key information is made of "from"+"reason" - AlarmRecord arec = null; - try { - arec = arh.findAlarm(from, reason); - } catch (FinderException e) { - Debug.logError("AlarmManager: " + e); - } catch (RemoteException e) { - Debug.logError("AlarmManager: " + e); - } - - if (arec == null) { - // If New Alarm: Create the AlarmRecord - Debug.log("new AlarmRecord"); - AlarmData ad = null; - try { - // Allocate a unique ident - int alarmid = arcount.getNewIdent(); - java.util.Date now = new java.util.Date(); - ad = new AlarmData(alarmid, severity, from, reason, new java.sql.Date(now.getTime())); - arec = arh.create(ad); - } catch (CreateException e) { - Debug.logError("AlarmManager: " + e); - } catch (RemoteException e) { - Debug.logError("AlarmManager: " + e); - } - // Notice profiles interested - Iterator i = profilList.iterator(); - while (i.hasNext()) { - Profil prof = (Profil) i.next(); - if (prof.interestedBy(ad)) { - prof.noticeAlarm(arec); - } - } - } else { - // Old Alarm -> just increment count. - Debug.log("AlarmRecord already known"); - try { - arec.update(severity); - } catch (RemoteException e) { - Debug.logError("AlarmManager: " + e); - } - } - - } - - /** - * Mark an AlarmRecord as processed. We don't remove it now to keep it in - * history. - * @param pk the primary key - * @throws RemoteException as it is remote it can fails - */ - public void forgetAlarm(String pk) throws RemoteException { - Debug.log("entering for " + pk); - - // Find this Alarm by its PK - AlarmRecord arec = null; - try { - arec = arh.findByPrimaryKey(pk); - } catch (FinderException e) { - Debug.logError("AlarmManager Alarm not found"); - throw new RemoteException("Alarm not found"); - } catch (RemoteException e) { - Debug.logError("AlarmManager: " + e); - throw e; - } - - // Change Alarm state - try { - arec.setProcessed(); - } catch (RemoteException e) { - Debug.logError("AlarmManager: " + e); - throw e; - } - } - - /** - * Makes a new Profil - * @param from the device name - * @param maxsev the maximum level of severity - * @return the new profile created - */ - public Profil newProfil(String from, String maxsev) { - Debug.log("entering for " + from + "/" + maxsev); - - // Check if already exist - Iterator i = profilList.iterator(); - while (i.hasNext()) { - Profil prof = (Profil) i.next(); - if (prof.getDevice().equals(from) && prof.getSeverity().equals(maxsev)) { - return null; - } - } - - Profil p = new Profil(from, maxsev, arh); - profilList.add(p); - return p; - } - - /** - * @return the list of available profils - */ - public String[] getProfilNames() { - Debug.log("entering"); - LinkedList nlist = new LinkedList(); - Iterator i = profilList.iterator(); - while (i.hasNext()) { - Profil prof = (Profil) i.next(); - nlist.add(prof.getName()); - } - return (String[]) nlist.toArray(new String[0]); - } - - /** - * @param name of the profile to remove - * @return a reference on Profil object, given its name. - */ - public Profil getProfil(String name) { - Debug.log("entering for " + name); - Profil ret = null; - Iterator i = profilList.iterator(); - while (i.hasNext()) { - Profil prof = (Profil) i.next(); - if (prof.getName().equals(name)) { - ret = prof; - } - } - return ret; - } - - /** - * remove a Profil - * @param name the name of the profile to remove - * @return true if the profile was removed - */ - public boolean delProfil(String name) { - Debug.log("entering for " + name); - Iterator i = profilList.iterator(); - while (i.hasNext()) { - Profil prof = (Profil) i.next(); - if (prof.getName().equals(name)) { - i.remove(); - return true; - } - } - return false; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecord.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecord.java deleted file mode 100644 index de07d67808..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecord.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * AlarmRecord remote interface - */ -public interface AlarmRecord extends EJBObject { - - /** - * Update the record - * @param s severity level - * @throws RemoteException if remote call failed - */ - void update(int s) throws RemoteException; - - /** - * @throws RemoteException if remote call failed - */ - void forget() throws RemoteException; - - /** - * @throws RemoteException if remote call failed - */ - void setProcessed() throws RemoteException; - - /** - * @return the sender - * @throws RemoteException if remote call failed - */ - String getFrom() throws RemoteException; - - /** - * @return the severity level - * @throws RemoteException if remote call failed - */ - int getSeverity() throws RemoteException; - - /** - * @return the number of messages - * @throws RemoteException if remote call failed - */ - int getCount() throws RemoteException; - - /** - * @return number of alarms - * @throws RemoteException if remote call failed - */ - int getAlarmCount() throws RemoteException; - - /** - * @return the new ident - * @throws RemoteException if remote call failed - */ - int getNewIdent() throws RemoteException; - - /** - * @return the data - * @throws RemoteException if remote call failed - */ - AlarmData getAlarmData() throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordBean.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordBean.java deleted file mode 100644 index 50b5913690..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordBean.java +++ /dev/null @@ -1,316 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.Date; -import java.sql.SQLException; -import java.sql.Statement; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; -import javax.naming.InitialContext; -import javax.sql.DataSource; - -/** - * - */ -public class AlarmRecordBean implements EntityBean { - - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String pk; - - public int sev; - - public String from; - - public String reason; - - public int count; - - public int state; - - public Date date; - - // ------------------------------------------------------------------ - // init DataBase - // ------------------------------------------------------------------ - private void initDB() { - - // Get my DataSource from JNDI - DataSource ds = null; - InitialContext ictx = null; - try { - ictx = new InitialContext(); - } catch (Exception e) { - throw new EJBException("Cannot get JNDI InitialContext"); - } - try { - ds = (DataSource) ictx.lookup("java:comp/env/jdbc/myDS"); - } catch (Exception e) { - throw new EJBException("cannot lookup datasource"); - } - - // Drop table - Connection conn = null; - Statement stmt = null; - String myTable = "AlarmTable"; - try { - conn = ds.getConnection(); - stmt = conn.createStatement(); - stmt.execute("drop table " + myTable); - stmt.close(); - } catch (SQLException e) { - // The first time, table will not exist. - } - - // Create table. - try { - stmt = conn.createStatement(); - stmt - .execute("create table " - + myTable - + "(dbpk varchar(12) not null primary key, dbsev integer, dbfrom varchar(12), dbreason varchar(30), dbcount integer, dbstate integer, dbdate date)"); - stmt.close(); - conn.close(); - } catch (SQLException e) { - throw new EJBException("Exception in createTable"); - } - } - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setEntityContext(EntityContext ctx) { - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void unsetEntityContext() { - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of - * the object. - * @throws EJBException - Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbRemove() throws RemoveException { - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(AlarmData ad) throws CreateException { - } - - public void ejbPostCreate() throws CreateException { - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public String ejbCreate(AlarmData ad) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - Integer i = new Integer(ad.getNum()); - pk = i.toString(); - sev = ad.getSev(); - from = ad.getDevice(); - reason = ad.getMessage(); - count = 1; - state = 1; - date = (java.sql.Date) ad.getDate(); - - // In CMP, should return null. - return null; - } - - public String ejbCreate() throws CreateException, DuplicateKeyException { - - // init database - initDB(); - - // init bean fields - pk = "0"; - sev = 99; // avoids taking this as a true AlarmRecord. - from = "init"; - reason = "init"; - count = 0; - state = 0; - date = null; - - // In CMP, should return null. - return null; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - } - - // ------------------------------------------------------------------ - // AlarmRecord implementation - // ------------------------------------------------------------------ - - /** - * - */ - public void update(int s) { - count++; - if (s < sev) { - sev = s; - } - java.util.Date now = new java.util.Date(); - date = new java.sql.Date(now.getTime()); - } - - /** - * forget - */ - public void forget() { - state = 3; - } - - /** - * setProcessed - */ - public void setProcessed() { - state = 2; - } - - public String getFrom() { - return from; - } - - public int getSeverity() { - return sev; - } - - public int getCount() { - return count; - } - - /** - * Get the number of alarms in database only valid for special "0" element. - */ - public int getAlarmCount() throws RemoteException { - if (!pk.equals("0")) { - throw new RemoteException("pk should be 0"); - } - return count; - } - - /** - * Get a new Ident only valid for special "0" element. - */ - public int getNewIdent() throws RemoteException { - if (!pk.equals("0")) { - throw new RemoteException("pk should be 0"); - } - return ++count; - } - - /** - * Returns the AlarmData for that instance - */ - public AlarmData getAlarmData() throws RemoteException { - Integer id = new Integer(pk); - AlarmData ret = new AlarmData(id.intValue(), sev, from, reason, date); - ret.setCount(count); - ret.setState(state); - return ret; - } -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordHome.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordHome.java deleted file mode 100644 index 67c3373464..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/AlarmRecordHome.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; -import java.util.Collection; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; -import javax.ejb.FinderException; - -/** - * Home interface for the bean AlarmRecord - */ -public interface AlarmRecordHome extends EJBHome { - - /** - * @return - * @throws CreateException - * @throws RemoteException - */ - AlarmRecord create() throws CreateException, RemoteException; - - /** - * @param ad - * @return - * @throws CreateException - * @throws RemoteException - */ - AlarmRecord create(AlarmData ad) throws CreateException, RemoteException; - - /** - * @param pk - * @return - * @throws FinderException - * @throws RemoteException - */ - AlarmRecord findByPrimaryKey(String pk) throws FinderException, RemoteException; - - /** - * @param from - * @param mess - * @return - * @throws FinderException - * @throws RemoteException - */ - AlarmRecord findAlarm(String from, String mess) throws FinderException, RemoteException; - - /** - * @return - * @throws FinderException - * @throws RemoteException - */ - Collection findAll() throws FinderException, RemoteException; - - /** - * @param from - * @param sev - * @return - * @throws FinderException - * @throws RemoteException - */ - Collection findByInterest(String from, int sev) throws FinderException, RemoteException; - - /** - * @param sev - * @return - * @throws FinderException - * @throws RemoteException - */ - Collection findBySeverity(int sev) throws FinderException, RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Debug.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Debug.java deleted file mode 100644 index fe00843cfb..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Debug.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -/** - * Provide a ligth Debug. - */ -public class Debug { - - /** - * No public constructor (Utility class) - */ - private Debug() { - - } - - /** - * True if only if use the debug. - */ - private static boolean debug = false; - - /** - * Log some debugging info, if debug is true. - * @param msg the message to log. - */ - public static void log(String msg) { - if (debug) { - System.out.println(msg); - } - } - - /** - * Log some errors. - * @param msg the error message to log. - */ - public static void logError(String msg) { - System.err.println(msg); - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Profil.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Profil.java deleted file mode 100644 index fcad1e137d..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/Profil.java +++ /dev/null @@ -1,206 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; -import java.util.LinkedList; - -import javax.ejb.FinderException; -import javax.rmi.PortableRemoteObject; - - -/** - * Helper class Profil Profils are managed by AlarmManager and used by View - * session beans We do not use an Entity because we need neither persistence nor - * remote accesses. We cannot use a Session bean because it's accessed from - * several clients, and from the AlarmManager. - */ -public class Profil { - - /** - * Device name or "all" - */ - private String device; - - /** - * max severity level - */ - private int maxsev; // - - /** - * Name - */ - private String name; - - /** - * Is the device is all ? - */ - private boolean fromAll; - - /** - * Home of the bean AlarmRecord - */ - private AlarmRecordHome arh; - - /** - * A list of AlarmRecord objects - */ - private LinkedList alarmList = new LinkedList(); - - /** - * constructor - * @param device the device name - * @param sev the severity level - * @param arh the home of the eban - */ - - public Profil(String device, String sev, AlarmRecordHome arh) { - - // init object - this.device = device; - this.arh = arh; - fromAll = device.equals("all"); - if (sev.startsWith("S")) { - maxsev = 1; - sev = "S"; - } else if (sev.startsWith("W")) { - maxsev = 2; - sev = "W"; - } else { - maxsev = 3; - sev = "I"; - } - name = device + "-" + sev; - - // find alarms already arrived and matching this Profil - Collection knal = null; - try { - if (fromAll) { - knal = arh.findBySeverity(maxsev); - } else { - knal = arh.findByInterest(device, maxsev); - } - alarmList.addAll(knal); - } catch (FinderException e) { - System.out.println("Profil constructor: No Alarm found"); - } catch (RemoteException e) { - System.out.println("Error getting AlarmRecords:" + e); - } - } - - /** - * @return the device - */ - public String getDevice() { - return device; - } - - /** - * @return the severity watched - */ - public String getSeverity() { - switch (maxsev) { - case 1: - return "S"; - case 2: - return "W"; - case 3: - return "I"; - default: - return "A"; - } - } - - /** - * @return the profil name - */ - public String getName() { - return name; - } - - /** - * get Alarms for this Profil. - * @param all true if get all alarms, false if get only new alarms - * @return Alarms for this Profil. - */ - public synchronized Collection getAlarms(boolean all) { - LinkedList ret = new LinkedList(); - Iterator it = alarmList.iterator(); - while (it.hasNext()) { - AlarmRecord arec = (AlarmRecord) PortableRemoteObject.narrow(it.next(), AlarmRecord.class); - AlarmData ad = null; - try { - ad = arec.getAlarmData(); - if (all || (ad.getState() == 1)) { - ret.add(ad); - } - } catch (RemoteException e) { - System.out.println("Error getting AlarmRecord:" + e); - } - } - return ret; - } - - /** - * Gets current Alarm level - * @return current Alarm level - */ - public synchronized int getCurrentLevel() { - int ret = 1000; - Iterator it = alarmList.iterator(); - while (it.hasNext()) { - AlarmRecord arec = (AlarmRecord) PortableRemoteObject.narrow(it.next(), AlarmRecord.class); - try { - AlarmData ad = arec.getAlarmData(); - if (ad.getState() == 1 && ad.getSev() <= ret) { - ret = ad.getSev(); - } - } catch (RemoteException e) { - System.out.println("Error getting AlarmRecord:" + e); - } - } - return ret; - } - - /** - * @param ad alarm data object - * @return true if this Profil is interested by this AlarmRecord. - */ - public boolean interestedBy(AlarmData ad) { - return ((fromAll || ad.getDevice().equals(device)) && ad.getSev() <= maxsev); - } - - /** - * add an Alarm Record to this Profil. - * @param arec the record - */ - public synchronized void noticeAlarm(AlarmRecord arec) { - alarmList.add(arec); - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/View.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/View.java deleted file mode 100644 index bb718dadbd..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/View.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * View remote interface - */ -public interface View extends EJBObject { - - /** - * @return - * @throws RemoteException - */ - AlarmData[] getAllAlarms() throws RemoteException; - - /** - * @return - * @throws RemoteException - */ - AlarmData[] getNewAlarms() throws RemoteException; - - /** - * @return - * @throws RemoteException - */ - String[] getProfils() throws RemoteException; - - /** - * @param name - * @throws RemoteException - */ - void setProfil(String name) throws RemoteException; - - /** - * @param name - * @return - * @throws RemoteException - */ - int alarmLevel(String name) throws RemoteException; - - /** - * @param pk - * @throws RemoteException - */ - void forgetAlarm(String pk) throws RemoteException; - - /** - * @param device - * @param level - * @return - * @throws RemoteException - */ - String newProfil(String device, String level) throws RemoteException; - - /** - * @param name - * @throws RemoteException - */ - void removeProfil(String name) throws RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewBean.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewBean.java deleted file mode 100644 index b0af3635b5..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewBean.java +++ /dev/null @@ -1,198 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; -import java.util.Collection; - -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -/** - * Session bean View. Does not implement SessionSynchronization. We assume that - * this bean and AlarmManager run in the same JVM. Each Session bean is - * dedicated to 1 client: Here, the ViewProxy class. Each Session may be - * connected to 1 Profil or not. - */ -public class ViewBean implements SessionBean { - - /** - * Reference to the alarm manager - */ - private static transient AlarmManager alarmManager = null; - - /** - * Profil reference - */ - private Profil prof = null; - - /** - * Set the context for this bean - * @param ctx the context - * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext) - */ - public void setSessionContext(SessionContext ctx) { - - } - - /** - * Remove - * @see javax.ejb.SessionBean#ejbRemove() - */ - public void ejbRemove() { - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - */ - public void ejbCreate() { - // Get a reference on the AlarmManager. - alarmManager = AlarmManager.getInstance(); - } - - /** - * Passivate - * @see javax.ejb.SessionBean#ejbPassivate() - */ - public void ejbPassivate() { - } - - /** - * Activate - * @see javax.ejb.SessionBean#ejbActivate() - */ - public void ejbActivate() { - } - - /** - * @return all messages for the current profil - * @throws RemoteException if remote call failed - */ - public AlarmData[] getAllAlarms() throws RemoteException { - if (prof == null) { - throw new RemoteException("No Profil defined for this session"); - } - Collection alist = prof.getAlarms(true); - return (AlarmData[]) alist.toArray(new AlarmData[0]); - } - - /** - * @return new messages for the current profil - * @throws RemoteException if remote call failed - */ - public AlarmData[] getNewAlarms() throws RemoteException { - if (prof == null) { - throw new RemoteException("No Profil defined for this session"); - } - Collection alist = prof.getAlarms(false); - return (AlarmData[]) alist.toArray(new AlarmData[0]); - } - - /** - * @return an enumeration of all available profils - */ - public String[] getProfils() { - return alarmManager.getProfilNames(); - } - - /** - * Chooses to work on a particular profil. - * @param name of the profil - * @throws RemoteException if remote call failed - */ - public void setProfil(String name) throws RemoteException { - if (name == null) { - prof = null; - return; - } - prof = alarmManager.getProfil(name); - if (prof == null) { - throw new RemoteException("This Profil does not exist yet: " + name); - } - } - - /** - * @return the Alarm Level for Profil specified - * @param name of the profil - * @throws RemoteException if remote call failed - */ - public int alarmLevel(String name) throws RemoteException { - Profil prof = alarmManager.getProfil(name); - if (prof == null) { - throw new RemoteException("This Profil does not exist yet: " + name); - } - return prof.getCurrentLevel(); - } - - /** - * Forget this message because problem has been taken into account. - * @param pk primary key - * @throws RemoteException if remote call failed - */ - public void forgetAlarm(String pk) throws RemoteException { - alarmManager.forgetAlarm(pk); - } - - /** - * creates a new Profil - * @param device the name of the device - * @param level the severity level - * @return the newly created profil - * @throws RemoteException if remote call failed - */ - public String newProfil(String device, String level) throws RemoteException { - - // Check arg validity - if (device.length() == 0) { - throw new RemoteException("null device string"); - } - if (!level.startsWith("S") && !level.startsWith("W") && !level.startsWith("I")) { - throw new RemoteException("severity must be one of S|W|I"); - } - - prof = alarmManager.newProfil(device, level); - if (prof == null) { - return null; - } - return prof.getName(); - } - - /** - * remove a Profil - * @param name the name of the profil - * @throws RemoteException if remote call failed - */ - public void removeProfil(String name) throws RemoteException { - if (name == null) { - return; - } - boolean ok = alarmManager.delProfil(name); - if (!ok) { - throw new RemoteException("This Profil does not exist yet: " + name); - } - } -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewHome.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewHome.java deleted file mode 100644 index cc9084256f..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewHome.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean View - */ -public interface ViewHome extends EJBHome { - - /** - * @return the bean created - * @throws CreateException if the bean can't be created - * @throws RemoteException if remote call failed - */ - View create() throws CreateException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewProxy.java b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewProxy.java deleted file mode 100644 index 1970921af4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/ViewProxy.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: JOnAS Team - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.alarm.beans; - -import java.rmi.RemoteException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -/** - * proxy used to access the "View" session bean. must be instantiated by JSP's - * with a tag like this: - */ -public class ViewProxy { - -/** - * Initial context - */ - private Context ictx = null; - - /** - * Home of the bean View - */ - private ViewHome vh = null; - - /** - * Bean View - */ - private View ejbview = null; - - /** - * Name of my profil - */ - private String myprofil = null; - - /** - * Error message - */ - private String errorMessage = null; - - private View getEjbView() { - if (ejbview == null) { - // Create the Session Bean - try { - ejbview = vh.create(); - } catch (Exception e) { - errorMessage = "ViewProxy : Cannot create EJB:" + e.toString(); - } - } - return ejbview; - } - - /** - * Init procedure - * Gets the bean and create one - */ - private void init() { - // Get the ViewHome - try { - ictx = new InitialContext(); - vh = (ViewHome) PortableRemoteObject.narrow(ictx.lookup("viewhome"), ViewHome.class); - } catch (NamingException e) { - errorMessage = "ViewProxy : Cannot get ViewHome:" + e.toString(); - return; - } - getEjbView(); - } - - /** - * constructor: Create here the EJB session. - */ - public ViewProxy() { - init(); - } - - /** - * @return RO attribute: Get all Profils already created by Alarm Manager. - */ - public String[] getProfils() { - String[] ret = new String[0]; - try { - ret = getEjbView().getProfils(); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot get Profil list:" + e.toString(); - ejbview = null; - } - return ret; - } - - /** - * @return RW attribute: Profil used. - */ - public String getProfil() { - errorMessage = null; - return myprofil; - } - - /** - * Set the current profil - * @param p the name of the profil - */ - public void setProfil(String p) { - try { - getEjbView().setProfil(p); - errorMessage = null; - // keep it on local for efficiency - myprofil = p; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot set Profil:" + e.toString(); - ejbview = null; - } - } - - /** - * @return RO attribute: list of new alarms on the current Profil - */ - public AlarmData[] getNewAlarms() { - AlarmData[] ret = null; - try { - ret = getEjbView().getNewAlarms(); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot get new alarms:" + e.toString(); - ejbview = null; - } - return ret; - } - - /** - * @return RO attribute: list of all alarms on the current Profil - */ - public AlarmData[] getAllAlarms() { - AlarmData[] ret = null; - try { - ret = getEjbView().getAllAlarms(); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot get all alarms:" + e.toString(); - ejbview = null; - } - return ret; - } - - /** - * @param profilName the name of the profil - * @return the maximum level of alarm for this Profil. - */ - public int alarmLevel(String profilName) { - int level = 0; - try { - level = getEjbView().alarmLevel(profilName); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot get AlarmLevel:" + e.toString(); - ejbview = null; - } - return level; - } - - /** - * @return error message if any - */ - public String getErrorMessage() { - return errorMessage; - } - - /** - * Forget this Alarm because it has been treated. - * @param pk primary key - */ - public void forgetAlarm(String pk) { - try { - getEjbView().forgetAlarm(pk); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot forget Alarm:" + e.toString(); - ejbview = null; - } - } - - /** - * Creates a new Profil - * @param device the name of the device - * @param level the severity level - * @return the newly created profil - */ - public String newProfil(String device, String level) { - String ret = null; - try { - ret = getEjbView().newProfil(device, level); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot create Profil:" + e.toString(); - ejbview = null; - } - return ret; - } - - /** - * remove a Profil - * @param profil name of the profil to remove - */ - public void removeProfil(String profil) { - try { - getEjbView().removeProfil(profil); - errorMessage = null; - } catch (RemoteException e) { - errorMessage = "ViewProxy : Cannot remove Profil:" + e.toString(); - ejbview = null; - } - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/alarm.xml b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/alarm.xml deleted file mode 100644 index a39659b9ce..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/alarm.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - Demo Appli: Alarm Manager - Alarm - - - - - session bean View - View - View - org.objectweb.alarm.beans.ViewHome - org.objectweb.alarm.beans.View - org.objectweb.alarm.beans.ViewBean - Stateful - Container - - - - AlarmRecord - AlarmRecord - AlarmRecord - org.objectweb.alarm.beans.AlarmRecordHome - org.objectweb.alarm.beans.AlarmRecord - org.objectweb.alarm.beans.AlarmRecordBean - Container - java.lang.String - True - 1.x - - pk - - - sev - - - from - - - reason - - - count - - - state - - - date - - pk - - jdbc/myDS - javax.sql.DataSource - Application - - - - - Message Driven Bean AlarmListener - AlarmListener - AlarmListener - org.objectweb.alarm.beans.AlarmListenerBean - Container - Auto-acknowledge - - javax.jms.Topic - Durable - - - - - - - - - AlarmRecord - create - - Supports - - - - View - * - - - AlarmRecord - * - - - AlarmListener - * - - Required - - - - diff --git a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/jonas-alarm.xml b/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/jonas-alarm.xml deleted file mode 100644 index 8e0507bbb4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/beans/org/objectweb/alarm/beans/jonas-alarm.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - View - viewhome - - - - AlarmRecord - alarmrecord - - jdbc/myDS - - jdbc_1 - - false - 20 - - jdbc_1 - AlarmTable - - pk - dbpk - - - sev - dbsev - - - from - dbfrom - - - reason - dbreason - - - count - dbcount - - - state - dbstate - - - date - dbdate - - - - findAlarm - - where dbfrom = ? and dbreason = ? and dbstate = 1 - - - - findAll - - - - - - findByInterest - - where dbfrom = ? and dbsev <= ? - - - - findBySeverity - - where dbsev <= ? - - - - - - AlarmListener - - AlarmTopic - - - - diff --git a/jonas_tests/examples/base/examples/alarm/build.xml b/jonas_tests/examples/base/examples/alarm/build.xml deleted file mode 100644 index 8f319f81b6..0000000000 --- a/jonas_tests/examples/base/examples/alarm/build.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/alarm/client/org/objectweb/alarm/AlarmGenerator.java b/jonas_tests/examples/base/examples/alarm/client/org/objectweb/alarm/AlarmGenerator.java deleted file mode 100644 index 4eddfa9dcc..0000000000 --- a/jonas_tests/examples/base/examples/alarm/client/org/objectweb/alarm/AlarmGenerator.java +++ /dev/null @@ -1,214 +0,0 @@ -// AlarmGenerator.java - -package org.objectweb.alarm; - -import java.rmi.RemoteException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.jms.*; - -class ClientThread extends Thread { - String name; - - public ClientThread(int num) { - name = AlarmGenerator.m_device; - if (name == null) { - name = "device"+num; - } - setName(name); - } - - /** - * random returns an integer between 0 and max - 1 - */ - private int random(int max) { - - double d = Math.random(); - int ret = (int) (max * d); - return ret; - } - - private String getReason(int sev) { - String reason; - int num = AlarmGenerator.m_mess; - if (num == 0) { - num = random(10) + 1; - } - switch (sev) { - case 1: - reason = "Severe Error "+num; - break; - case 2: - reason = "Warning "+num; - break; - case 3: - reason = "Running OK"; - break; - default: - reason = "Unknown Alarm"; - break; - } - return reason; - } - - public void run() { - - // Create Session + Publisher - TopicSession session = null; - TopicPublisher tp = null; - try { - session = AlarmGenerator.mytc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(AlarmGenerator.mytopic); - } catch (Exception e) { - System.err.println("Cannot create JMS Publisher:"+ e); - } - - // main loop - int severity = AlarmGenerator.m_severity; - try { - for (int i = 0; i < AlarmGenerator.m_loops; i++) { - // publish messages to the topic - try { - MapMessage message = session.createMapMessage(); - // randomize the severity level if not specified - if (severity == 0) - severity = random(2)+1; - message.setInt("Severity", severity); - message.setString("From", name); - message.setString("Reason", getReason(severity)); - tp.publish(message); - } catch (JMSException e) { - System.err.println("Exception occurred: "+ e); - } - } - } catch (Exception e) { - System.err.println("Exception in main loop"+ e); - } - } -} - - -public class AlarmGenerator { - - static Context ictx = null; - static Topic mytopic = null; - static TopicConnection mytc = null; - - - static boolean m_reinit = false; - static int m_threads = 1; - static int m_loops = 1; - static int m_severity = 0; - static int m_mess = 0; - static String m_device = null; - - private static void usage() { - System.out.println("AlarmGenerator [-d device] [-l loops] [-t threads] [-s severity] [-m num]"); - } - - public static void main(String[] args) { - - TopicConnectionFactory tcf = null; - - // Get Args - // Get command args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-l")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_loops = i_arg.intValue(); - } else if (s_arg.equals("-d")) { - m_device = args[++argn]; - } else if (s_arg.equals("-t")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_threads = i_arg.intValue(); - } else if (s_arg.equals("-s")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_severity = i_arg.intValue();; - } else if (s_arg.equals("-m")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_mess = i_arg.intValue(); - } else { - usage(); - System.exit(2); - } - } - - // Get InitialContext - try { - ictx = new InitialContext(); - } catch (NamingException e) { - System.err.println("Cannot get InitialContext:"+ e); - } - - // Lookup JMS resources - try { - // lookup the TopicConnectionFactory through its JNDI name - tcf = (TopicConnectionFactory) ictx.lookup("JTCF"); - // lookup the Topic through its JNDI name - mytopic = (Topic) ictx.lookup("AlarmTopic"); - } catch (NamingException e) { - System.err.println("Cannot lookup JMS Resources:"+ e); - } - - // Create Connection - try { - mytc = tcf.createTopicConnection(); - } catch (Exception e) { - System.err.println("Cannot create JMS Connection:"+ e); - } - - // If reinit: send a special message to reinit AlarmTable first. - // This doesn't work (DuplicateKey exception) - // Code to remove! - if (m_reinit) { - TopicSession session = null; - TopicPublisher tp = null; - MapMessage message; - try { - session = AlarmGenerator.mytc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(AlarmGenerator.mytopic); - message = session.createMapMessage(); - message.setInt("Severity", 1); - message.setString("From", "reinit"); - message.setString("Reason", "reinit"); - tp.publish(message); - } catch (JMSException e) { - System.err.println("Exception occurred: "+ e); - } finally { - try { - session.close(); - } catch (Exception i) {} - } - } - - // Create and start threads - ClientThread[] t_thr = new ClientThread[m_threads]; - for (int i = 0; i < m_threads; i++) { - t_thr[i] = new ClientThread(i+1); - t_thr[i].start(); - } - - // Wait end of all threads - for (int p = 0; p < m_threads; p++) { - try { - t_thr[p].join(); - } catch (InterruptedException e) { - System.err.println("ERROR: Problem in ClientThread.join"+ e); - } - } - - // close connection - try { - mytc.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/jonas_tests/examples/base/examples/alarm/db1.prp b/jonas_tests/examples/base/examples/alarm/db1.prp deleted file mode 100644 index 5dae3df2a4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/db1.prp +++ /dev/null @@ -1,325 +0,0 @@ -!--------------------------------------------------------------------- -! -! PROPERTIES for the InstantDB database used in the JOnAS alarm example -! (builded from InstantDB/3.25/Examples/sample.prp) -! -!--------------------------------------------------------------------- - -!--------------------------------------------------------------------- -! -! BASIC PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Path where index tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -indexPath=./tmp/indexes -! -! Path where system tables are held. Can be absolute or relative to -! the properties file. Defaults to tablePath. -! -systemPath=./tmp/system -! -! Path where database tables are held. Can be absolute or relative -! to the properties file. Defaults to "current" directory. -! -tablePath=./tmp/tables -! -! Path where results set tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -tmpPath=./tmp/tmp -! -! Non-zero means paths are relative to the properties file. -! Default is absolute paths for files. -! -relativeToProperties=1 -! -! Alternative partitions can be defined so that tables can be placed -! in multiple locations. Each partition is numbered: 1, 2, 3,... Tables -! can be created on partitions using the syntax -! -! CREATE TABLE ON PARTITION ... -! -! The partition count has to be supplied. -! -!partitionCount=2 -! -! The locations of each partition must be supplied. These are always -! absolute path names. -! -!partition1=d:/petes -!partition2=c:/temp - - -!--------------------------------------------------------------------- -! -! TUNING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! The amount of each column to cache, expressed either as an absolute -! number of rows or as a percentage figure. Defaults to 256 or 10 respectively. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheAmount=512 -! -! CACHE_ROWS Must be one of CACHE_ROWS or CACHE_PERCENT. Determines whether -! to cache columns in tables based on an absolute number of rows, or the -! percentage number of rows in the table. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheCondition=CACHE_ROWS -! -! The amount of the system tables to be cached. Defaults to 100. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheSize=10 -! -! Similar to cacheCondition, but applies only to the system tables. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheCondition=CACHE_ROWS -! -! The percentage cache hit improvement required in order to move the -! cache to a new location in a column. -! -! (Currently not implemented). -! -cacheResetPercent=10 -! -! Non-zero means that database changes do not get written to the -! database immediately. See tuning.html. -! -fastUpdate=0 -! -! Percentage of free space in an index that must be present before -! the index reorganises itself. High values means frequent index -! reorganisation. Low values means slow index inserts. -! -indexLoad=5 -! -! The number of cache misses to include in calculations of the next -! base for the cache. -! -! (Currently not implemented). -! -missesInCacheStats=100 -! -! Non-zero means that results sets get instantiated on disk. By default -! InstantDB holds results sets emtirely in memory (apart from Binary -! columns). For large results sets this can be a problem. This property -! forces all results sets to be held on disk. -! -resultsOnDisk=0 -! -! Similar to cacheCondition but applies only to disk based -! results sets. Default is CACHE_ROWS. -! -resultsSetCache=CACHE_ROWS -! -! Similar to cacheAmount but applies only to disk based -! results sets. Default is 100. -! -resultsSetCacheAmount=100 -! -! Number of rows to read into the disk read ahead buffer. -! Recommended to be set somewhere around 128 to 256. -! Default is 20. -! -rowCacheSize=128 -! -! The read ahead buffer is effective at speeding up full -! table scans. However for indexed lookups or multiple -! simultaneous scans it is better to read a single row at -! a time. Each table holds a small number of single row -! buffers to improve such operations. Default is 8. -! -!singleRowCount=4 -! -! Sometimes the look ahead buffer can be held by a single -! thread even though it is not retrieveing many values from it. -! If too many lookups retrieve data from the single row -! buffers then it is better to flush the look ahead buffer and -! make it available for re-use. Default is 128. -! -!flushAfterCacheMisses=64 -! -! Number of rows to read ahead for system tables. By default -! system tables cache everything, so it is wasteful to have large -! read ahead buffers since they will very rarely be used. This -! allows the size of the system read ahead buffers to be reduced -! if necessary. Defaults to rowCacheSize. -! -!systemRows=20 -! -! The control column in all tables normally has a large cache -! since this speeds up all operation on that table. This can be -! varied to either improve performance or to reduce space. -! default is 8192. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!controlColCacheSize=512 -! -! By default, InstantDB only does a cursory search for deleted rows during -! UPDATE statements. Setting searchDeletes=1 causes more detailed searches -! for deleted rows. This slows down UPDATE executions, but reults in more -! compact tables. Default is 0. -! -searchDeletes=0 -! -! The interval, in milliseconds, between checks for statement execution -! timeouts. Default is 5000. -! -!timerCheck=5000 - -!--------------------------------------------------------------------- -! -! LOGGING AND DEBUGGING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Non-zero means include SQL statements in the export file. -! -exportSQL=0 -! -! Non-zero means trace output also directed to console. -! Defaults to 0. -! -!traceConsole=1 -traceConsole=0 -! -! Relative or absolute path where exporting and tracing goes. -! -traceFile=./tmp/trace.log -! -! Bitmap of various items that can be traced. See debug.html. -! Defaults to 0. -! -traceLevel=2 - - -!--------------------------------------------------------------------- -! -! TRANSACTION AND RECOVERY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! 0 means do not perform recovery on startup. -! 1 means perform automatic recovery -! 2 (default) means prompt the user using standard in -! -recoveryPolicy=2 -! -! Sets the level of transaction journalling. See trans.html. -! Defaults to 1. -! -! 0 - No journalling takes place. -! 1 - Normal journalling (default). -! 2 - Full journalling. -! -transLevel=1 -! -! When doing an import, defines the number of rows imported -! before the transaction is committed. Recommended value 8192. -! defaults to 100. -! -transImports=100 - -!--------------------------------------------------------------------- -! -! DATE, TIME AND CURRENCY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Number of digits after decimal point in currency outputs. Defaults to 2. -! -currencyDecimal=2 -! -! Currency symbol used in currency outputs. Defaults to $. -! -currencySymbol=$ -! -! Default format for date columns. Defaults to "yyyy-mm-dd". -! -dateFormat=yyyy-mm-dd -! -! Default format for timestamp columns. Defaults to "yyyy-mm-dd hh:mm:ss.lll". -! -dateTimeFormat=yyyy-mm-dd hh:mm:ss.lll -! -! If set, then all two digit dates less than its value are interpreted -! as 21st century dates. -! -!milleniumBoundary=50 -! -! Set to 1 causes the date string "now" to store a full timestamp. -! Default is to store only the date for fields with now hour in the -! format string. -! -nowMeansTime=0 - -!--------------------------------------------------------------------- -! -! STRING HANDLING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! If set to 1 then String hashes use the JDK Object.hashCode() function. -! By default, uses InstantDB's String hashing. -! -altStringHashing=0 -! -! Set to 1 to cause LIKE clauses to always perform case insensitive -! comparisons. -! -likeIgnoreCase=0 -! -! Same as SET LITERAL STRICT_ON. Prevents string literals being interpreted -! as column names or numbers. Default is 0. -! -strictLiterals=0 -! -! Set this value to 1 (one) if you would like PreparedStatement.setString() -! to ignore "\" (backslash) characters when proceesing string constants. -! When set, InstantDB will not attempt to interpret \ as the start of an -! escape sequence. Default is 0. -! -!prepareIgnoresEscapes=1 - -!--------------------------------------------------------------------- -! -! MISCELLANEOUS PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Allows selected InstantDB keywords to be un-reserved. -! e.g. ignoreKeywords=url,quote would allow the keywords -! url and quote to be used as table or column names. -! -! This faciliy is provided for compatatbility reasons only. -! It's use is not recommended AND IS NOT SUPPORTED. -! -!ignoreKeywords -! -! Non-zero means database is opened in read only mode. -! -readOnly=0 diff --git a/jonas_tests/examples/base/examples/alarm/etc/alarm.xml b/jonas_tests/examples/base/examples/alarm/etc/alarm.xml deleted file mode 100644 index a39659b9ce..0000000000 --- a/jonas_tests/examples/base/examples/alarm/etc/alarm.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - Demo Appli: Alarm Manager - Alarm - - - - - session bean View - View - View - org.objectweb.alarm.beans.ViewHome - org.objectweb.alarm.beans.View - org.objectweb.alarm.beans.ViewBean - Stateful - Container - - - - AlarmRecord - AlarmRecord - AlarmRecord - org.objectweb.alarm.beans.AlarmRecordHome - org.objectweb.alarm.beans.AlarmRecord - org.objectweb.alarm.beans.AlarmRecordBean - Container - java.lang.String - True - 1.x - - pk - - - sev - - - from - - - reason - - - count - - - state - - - date - - pk - - jdbc/myDS - javax.sql.DataSource - Application - - - - - Message Driven Bean AlarmListener - AlarmListener - AlarmListener - org.objectweb.alarm.beans.AlarmListenerBean - Container - Auto-acknowledge - - javax.jms.Topic - Durable - - - - - - - - - AlarmRecord - create - - Supports - - - - View - * - - - AlarmRecord - * - - - AlarmListener - * - - Required - - - - diff --git a/jonas_tests/examples/base/examples/alarm/etc/application.xml b/jonas_tests/examples/base/examples/alarm/etc/application.xml deleted file mode 100644 index f48944b614..0000000000 --- a/jonas_tests/examples/base/examples/alarm/etc/application.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - alarm - alarm demo - - - alarm.jar - - - - - alarm.war - alarm - - - diff --git a/jonas_tests/examples/base/examples/alarm/etc/jonas-alarm.xml b/jonas_tests/examples/base/examples/alarm/etc/jonas-alarm.xml deleted file mode 100644 index 8e0507bbb4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/etc/jonas-alarm.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - View - viewhome - - - - AlarmRecord - alarmrecord - - jdbc/myDS - - jdbc_1 - - false - 20 - - jdbc_1 - AlarmTable - - pk - dbpk - - - sev - dbsev - - - from - dbfrom - - - reason - dbreason - - - count - dbcount - - - state - dbstate - - - date - dbdate - - - - findAlarm - - where dbfrom = ? and dbreason = ? and dbstate = 1 - - - - findAll - - - - - - findByInterest - - where dbfrom = ? and dbsev <= ? - - - - findBySeverity - - where dbsev <= ? - - - - - - AlarmListener - - AlarmTopic - - - - diff --git a/jonas_tests/examples/base/examples/alarm/etc/jonas-web.xml b/jonas_tests/examples/base/examples/alarm/etc/jonas-web.xml deleted file mode 100644 index f05f484aff..0000000000 --- a/jonas_tests/examples/base/examples/alarm/etc/jonas-web.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - jms/AlarmTopic - AlarmTopic - - - - jms/TopicFactory - JTCF - - - diff --git a/jonas_tests/examples/base/examples/alarm/etc/web.xml b/jonas_tests/examples/base/examples/alarm/etc/web.xml deleted file mode 100644 index 4af5be53cf..0000000000 --- a/jonas_tests/examples/base/examples/alarm/etc/web.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - alarmsender - org.objectweb.alarm.Sender - - - - alarmsender - /secured/alarmsender - - - - jms/AlarmTopic - javax.jms.Topic - - - - jms/TopicFactory - javax.jms.TopicConnectionFactory - Container - - - - - Protected Area - - /secured/* - - - - tomcat - jetty - - - - - - BASIC - JOnAS Realm - - - - - tomcat - - - - jetty - - - diff --git a/jonas_tests/examples/base/examples/alarm/src/org/objectweb/alarm/Sender.java b/jonas_tests/examples/base/examples/alarm/src/org/objectweb/alarm/Sender.java deleted file mode 100644 index 141b9f36e4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/src/org/objectweb/alarm/Sender.java +++ /dev/null @@ -1,115 +0,0 @@ -// "plain/text" -package org.objectweb.alarm; - -import java.io.*; -import javax.jms.*; -import javax.servlet.*; -import javax.servlet.http.*; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -/** - * This servlet is used to send Alarms on a JMS topic - */ -public class Sender extends HttpServlet { - - public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { - - res.setContentType("text/html"); - PrintWriter out = res.getWriter(); - String device = req.getParameter("device"); - String level = req.getParameter("level"); - String message = req.getParameter("message"); - String sloop = req.getParameter("number"); - String stimeout = req.getParameter("timeout"); - int severity; - String error = ""; - - out.write("Alarm Sender Servlet"); - if (level.startsWith("S")) { - severity = 1; - } else if (level.startsWith("W")) { - severity = 2; - } else { - severity = 3; - } - int loop = (new Integer(sloop)).intValue(); - int timeout = (new Integer(stimeout)).intValue(); - - Context ictx = null; - try { - ictx = new InitialContext(); - } catch (Exception e) { - error += "Cannot get initial context:"+e; - } - - // Lookup JMS resources - TopicConnectionFactory tcf = null; - Topic mytopic = null; - TopicConnection mytc = null; - try { - // lookup the TopicConnectionFactory through its JNDI name - tcf = (TopicConnectionFactory) ictx.lookup("java:comp/env/jms/TopicFactory"); - // lookup the Topic through its JNDI name - mytopic = (Topic) ictx.lookup("java:comp/env/jms/AlarmTopic"); - } catch (NamingException e) { - error += "Cannot lookup JMS Resources:"+ e; - } - - // Create Connection - try { - mytc = tcf.createTopicConnection(); - } catch (Exception e) { - error += "Cannot create JMS Connection:"+ e; - } - - // Create Session + Publisher - TopicSession session = null; - TopicPublisher tp = null; - try { - session = mytc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(mytopic); - } catch (Exception e) { - error += "Cannot create JMS Publisher:"+ e; - } - - // publish messages to the topic - try { - for (int i = 0 ; i < loop; i++) { - if (timeout > 0) { - Thread.currentThread().sleep(1000*timeout); - } - MapMessage mess = session.createMapMessage(); - mess.setInt("Severity", severity); - mess.setString("From", device); - mess.setString("Reason", message); - tp.publish(mess); - } - } catch (JMSException e) { - String l = e.getLinkedException().toString(); - error += " Exception while creating or sending message: "+ e; - error += " Linked Exception: "+l; - } catch (java.lang.InterruptedException e) { - out.println("Alarm Generator Interrupted"); - } - - if (error.equals("")) { - out.println("Message sent"); - } else { - out.println(error); - } - out.println("

    return to Alarm Generator"); - out.println("

    go to Alarm List"); - - // close connection - try { - mytc.close(); - } catch (Exception e) { - } - - out.println(""); - out.println(""); - } -} diff --git a/jonas_tests/examples/base/examples/alarm/web/generator.html b/jonas_tests/examples/base/examples/alarm/web/generator.html deleted file mode 100644 index 10a01e1ee4..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/generator.html +++ /dev/null @@ -1,37 +0,0 @@ - -generator - - - - - - - - -
    JOnAS LogoThe Alarm GeneratorTomcat LogoJetty Logo
    - -You can select which alarms will be sent, and how many of them. -It is also possible to periodically resend the same alarms by -setting a timer. - -

    -

    -text of the message itself: -

    -device where the alarm comes from: -

    -severity level of the Alarm Message: -

    - Severe Alarm
    - Warning
    - Informative Message
    -
    -

    -number of messages that will be sent: -

    -timeout in seconds: -

    - -

    - - diff --git a/jonas_tests/examples/base/examples/alarm/web/images/alarmArchi.gif b/jonas_tests/examples/base/examples/alarm/web/images/alarmArchi.gif deleted file mode 100644 index 18e45cc9bd6e73fc5dab1c7735856c5017cf19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51084 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 z 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 diff --git a/jonas_tests/examples/base/examples/alarm/web/images/logo_jonas.jpg b/jonas_tests/examples/base/examples/alarm/web/images/logo_jonas.jpg deleted file mode 100644 index 3fe9b43072176d2275d8725eb977b781a9730306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3293 zcmb7Gc{r5o|9)p5%P=F3eK(dd!U!qCWGC4tDH+?T>_o{f`{(I}2dVj7*IH2m}HcgAcH~ z0}ze|dQdNTxJ!8Y1xlD5_tm$Ra1E6p2L}84Nsv9fy{SH-LDkV07z7m4HM*sM(he=G*W=;SIlI`S$n+lhtSzZcbpQx zL{j*Lk;h}7wOqa}>xkY4ZjWha#3ID1slC9Zr>4}dSEI>!{kdqHFI_>YIJ zk7YgKO;lI(ml+>vI*TGX`AbnWt8Ni5w-zt(M}IO8dwKzL8S_qQE?qlw zQv+hM)_?E>a;OWDtqbscUcO2c<4c$)I{VTML;f!5CYBS+3hY>cX0%J8^p_i_6it$s zowUw(2Z}ApOLEV#D;l|E0iRIG^oB>2(0}A-H9j(cZ&BR5ad;R3&K|kVB6Msfl5BDZ zqI>atZ&n!Izk^wH}X6;ddjw9D;$#(GgN`s+qQI74wu&&dt z+){7Jn^x^;KW!tr;D3eD43ABaM)@Ykk#n%Ju89IO4lvkQp7p;7Ly+6d>)op#-D z7t+%6?gqhWW5MQz!l6h6n&T%rka#!_0EyqHij~s0rpE9}lLE5TY+M6lvm1Mne1FK0 z-EvC*>SO(?Sfnm=S;ah`JO)hkV-|BG;yT@4HHBT=sjU=GVWoxEc#Iw=JRpo2d|JWB z|GfeTuRiL8WL;6@h}9CytFCgzg|L^|-XF}aT$Sq-`WSk$@LE?9qu4ykey}+lMOg{z ziA_N(%vqWWAz;F-LN>`vcNVQp{k3;MU_lpuShL7%&dZzmjqeA=)LF-IPqZ~VlDk#H zxW9{X=jT+jJDfes-_)`Axpg)I_bG#G>qf~Jd-FQkd9x4c5vMIh^ZHgApAY)(TuGWG zUkYx}w&C_4r#~EA6R~er?k{#xn2X9E#m3xeIrE59q08<7%i5=#OO@Kz;qMx%p7Sih z2)a5OwqMm@%s$&rr65<4kS^VHb?J2~W+a4gp2W~KtD*L0l<$y>#Ls2+I7QtU@wVYO zGhV>mE*;ghUwSCWbfI$oU4zlK6*rIOmXkPR+XE|HeT&hf>-+jEi~cA`UZ!yTDM6qm zbS)~nKdoQc-TJ}CveEh&V;7+DNvGC+C3K!24~rK0)^Pg~Y<$?o$JWzc*Ume9Ejp<> zsS`j%GedpwuV}?O%JjzKff=AXjJ<_hTk!llw_+X5b*mTDt+20$%njkHjf?hxT!ksC zj9y$=9iif>o+6j^%6S)VO;+Szy4VyScrhp8l^?mD4iS^XUDm_sIE2JR@pJta$TIF*D?=xdOt# zX;D6d>e~jDeV6TW&ZcVA1U-%Dd@sU#)mX{yYS+;N(YeX|OX(BED`{5E9UgcOguQ|P zo!n9nR)P!Lm`J@B=JOv@#q#G|=#>d(=U*zKW zmwjB!&2IQ~kusz}XPM+EF8Q~KXkh3Lv^9am&EPlmsyQRqf^1ddY2R+XQvAV?wU*C+ zEM$VshsW;O69fjD)&HFgI7wBo=>o7ZS*4A=to8T5eL+`p8Ei8_VX3dCsDKwN~>?@YOe%zH0365 zGNOnl(!DV$j#}`e)8@-?1tnlH+DScYT+m+hmfez;@cLDy921M_oj8l;Z?(>R2N6bv z{8$ZzYo+zi_XV81_An4rRP_>jgty#J!h8s7P<&XD@^K(T&YDu6vbu_Aqa z;tJQ)giD)=fuP#bxIKS|fj;ot2p~8~08~3Biy8om{Y&dTZ^Ht0RnVx*QH7HaFMapC z8c;y7EPL>Axx9jSr2B&2n*>k9ylCM*pZE0ivGmLW+ap4W>s0-J@7)i~ znQ=^E#DxuieZhIe|E}|ccZ@^8tmN!?WRS#^^_^>umImp-ym<-0Qke0Vj2^Nw@N%V9 z7YPKuPANB})SK|k(a(U0rG6rY|9549;DDd?xmTV~eirARX<-d9AIviA*S^MAizRQJ z;r$pblme?aU~OOWzg6n|t$$uV&2ZWn|Ex-B#wVbN-zuf;e9r`*i+!-wG7pE$@tCie z={j3cONe@*GW75UZ?u1#FKxsYITjhS9%ldCb+L_5|B_I>TGO-d84}MWGA<^d91;a0 z6vu*O!uIY|ze)X#5E~Hl(^Emtb+O+aM~gB=l0JPDSuQRQ>nmJN)F5v`iC4U$8=m5VJs_k!bv78Q~nhdBh;UKY^pmyy~M`CDy$nC%0yxHi~X-A}0z zXEGB#Q4KE%mtZT=BmhWtb_u$$JjF zz__fo&cd(|Emz%kI9ebs{cvzutK9n_89c_g!BC6sn3w{$oAfXl!WQy)Ew`eGfL5?I z8S`z43V6xXSupioK5=m?tPggXdD1KP@So`m;+2A5Tp}!tD>t8Kc3CG4v?u8vpFerD z=P}@gIJ51TF%!Qc!yK@A(~9d4Ge`<}q%z0Z^#Mj`C!{Jy_l!^*c`nA`sj;&X;+!=m z0`wcC9wNe#)|d6Cztn*nN+bWM#2zw!e8&B)TQf)G&OdAp`!b~!$Yg#l2}?Z_!S-az z%0aWn?COFHZ7s=OUN+Z4c0;=07DJ5ZOaijiaYqR|B!r%^GCjtAwMQ^te&pb3!dxAe-dyyxUZQ~M0WOZW3NI~aKw9O9~xecB+&uB=|} eE-2CFuG3VCHK#YaAG8lIG=wSHt2qwtPW}&+(o35F diff --git a/jonas_tests/examples/base/examples/alarm/web/images/return.gif b/jonas_tests/examples/base/examples/alarm/web/images/return.gif deleted file mode 100644 index af4f68f4a3a13e0ef1dc0045b04c2c93354cdf40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmeH`(Q6!46vppnx0|bNlG}7iZ{rg7+D*+Z5i>Q#4vn(x+N>Q)$&RbyXeH}5khoAZ zgHYWn8m8H>&V#9A@nKri+6f7CAZX^n(t)JHP^8RL7z)bJ*uqp1CeXrcK^P~G{tuqV z^BsQQ$2pwh@zEn}1p^F%5QJd}Aw&paj0qu>(zUfUmSs7P<9S{Xgle@~tJOqNtk>(3 zB+0U@D2l48nx^TxZWsoa&$A3e34s7$jDj$XWIqfUmW{ZO5C9=SDAKGTH2r`GRm|~r z5L$j98>Zp~kYOR42b6JwQ1b%S^%chx9UoE#D+ZEvK&b8ovKvT_U$;Hc_5{o0Esv@u zV|vtZNi@a@L^X--U`fN84f8w{M0eXUG$N)K%8oDDURAev)u`Ei)$*#g&zml%+l*qc z5u_%u5lz+^!=({{P?YDX?hsigszo##*Hy@JNK{Z=MY4eu6Y@37k1~gfg@L4*NB(TMHD`z5Mi$4{3$K3Fd0=2+ z2&SJ^4mHd1^M91~z5jb@w)hR4@9nxce6>IZv*odP-zSex6`o(pw(oi7X69J;zL6Ew zmMCYwj%&NFbnm5LWxe~Y@k3x5DnB+pXsm90nHrr#zmNkgMYcdmxvLDB z3k3wE&!9rlKuzGPY8;a- zBi9R*frQ3fG0HGx<2Ev@GR53BXC{m%G)VNLfCm<(3@d!93@{LZo_h$0rKE)ez={AR zgN!_u;fgt_k*ub?wkzoZv`}`Ys26raPFHm$%%BQT?K!Jd*G5{=2gTkKm85a{lvhHM zq%hB6VYfiyxgkqU9BLfq5RU* z2xlq)4&Xs{t#U;v$CFDj&NmWlD78X3I~6kLRd#bsr!75?4-CS74p59TK!KLf(JWu{ zs2v*S6ek^IHWKo4`3Crh2n(HYAT;)8-4N!?Qv zNbi9l1PcSqNrRkkR)i&s4h%q4MFf=5oO?=aIRu&^c=rJw0k{aKqKI;+K%I56kbr3( zT^9|EFF~oypO-Kx)_@a?poNQXGV3h=heLGfTx2gvE6D=$^|mAimqz*Qx6i`q0EiqZ zX{>b0T!2TWRdNdMyA7Df-B5uH!I}}iQP5DR3&J@iyZ|@QpsyT3VN?@)6_TL?|JvGb zsR2JbFnZ>Em8}t9itts#&O#Tl#4NP8&A=BMaR>)2aO~^~Du2x3z~t)k)w%Hy0Wb|N zf17BMQk3jS7A-St-iA4YT*F$sb-+w3wCY?#(cjA3oB($E+yrXkHtlSK1V9}%g5$L? z4jxm=8#ISec@1urM2z!T!(E(>UmR+KtH75H9xTQonZA6CVvE^3jNEGf8?Dt{4bgYM zB8}xx0fgr)FOFfvw|E2Nu^`I-E1+OfSsnpQ6FIyCXB@^}X!r0#Q?Ha1Tqt*iKKj-* zbZu`Hd;Pnc4;4Jdc?Pd1&`RjkM63YE4c>dh0Ym&NF1B{PqBjP@eV!ELIakRle2Onf z!}iJE#RJVc2-}0!;N}Fr2?j5C`v(gnatq2yDd;Sm3ncK%`!KwXpTQ?+TmTTKffX(5 zeh_;T4ald1=DBZMCtzJt5WE%0q#&l0rBXp38ywnN(Lc7mOyr?ig~*8{&%esThK=OkAph3=niSAp+oHso - - The JOnAS Alarm Demo - - - - - - - - - - -
    JOnAS LogoThe JOnAS Alarm DemoTomcat LogoJetty Logo
    - -

    Goal of this demo

    - This little demo intends to show how you can use JOnAS, Tomcat or Jetty, and Joram - together to get a complete application using EJBs, servlets, html, JSPs, and - message driven beans. - -

    Running this demo

    -When you click to access this demo, your web browser should open a dialog box -asking you a user ID and a password. -Enter as login/password jonas/jonas. -

    -Click Here to Start the Demo -

    -Notice that the first time, Tomcat or Jetty has to compile each JSP and this may take several seconds. - -

    Description of the different parts

    - - - - - - - - - - - - - - - - - - -
    AlarmGeneratorAlarmGenerator is a servlet that generates alarms by -publishing messages on a topic. Once the JOnAS Server is running, this -servlet may be used to feed the Message Driven Bean listening -on the topic. -Click Here to Generate new Alarms -
    Session bean ViewA Session bean is used to provide a remote access to the Alarm Service. Each user -will create its own session that will be reached from JSP pages or servlets.
    Entity Bean AlarmRecordWhen a new alarm type is received, an entity bean is created. If the Alarm is already -known, its count is incremented only.
    Message Driven BeanJMS is used to access asynchronously to the service. A Message Driven Bean is used -to collect Alarm sent by AlarmGenerator. It will then inform the AlarmManager -that will process it.
    -

    Architecture

    -Alarm Demo Architecture - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/createfilter.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/createfilter.jsp deleted file mode 100644 index 52750066d9..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/createfilter.jsp +++ /dev/null @@ -1,12 +0,0 @@ - -create filter - - -<% - String device = request.getParameter("device"); - String level = request.getParameter("level"); - String profil = myview.newProfil(device, level); -%> - - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/current.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/current.jsp deleted file mode 100644 index 70a68e686c..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/current.jsp +++ /dev/null @@ -1,115 +0,0 @@ - -current page -<%@ include file="top.html" %> -<%@ page import="org.objectweb.alarm.beans.AlarmData" %> - -<% - String error = myview.getErrorMessage(); - if (error != null) { -%> -

    -An error occured in the JOnAS Server: -<%=error%> -<% - } -%> -<% - AlarmData[] adlist = null; - boolean history = request.getParameter("listType").equals("History"); -%> - -<% - if (history) { - adlist = myview.getAllAlarms(); -%> - Log of all -<% - } else { - adlist = myview.getNewAlarms(); -%> - Current list of -<% - } -%> - alarms received on <%=myview.getProfil()%> - - - - - - - - - - - -<% - for (int i = 0; i < adlist.length; i++) { - AlarmData ad = adlist[i]; - int sev = ad.getSev(); - int state = ad.getState(); -%> - -<% switch (sev) { - case 1: -%> - - - - - - - -<% - } -%> -
    identdatefrommessagecountstate
    -<% - break; - case 2: -%> - -<% - break; - case 3: -%> - -<% - break; - default: -%> - -<% - break; - } -%> -<%=ad.getNum()%><%=ad.getDate()%><%=ad.getDevice()%><%=ad.getMessage()%><%=ad.getCount()%> -<% switch (state) { - case 1: -%> -received -<% - break; - case 2: -%> -processed -<% - break; - default: -%> -removed -<% - break; - } -%>
    -
    -

    -<% if (history) { %> -View only the current list of Alarms for this filter. -<% } else { %> -View the full log of Alarms received for this filter. -<% } %> -

    -Return to the list of filters - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/list.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/list.jsp deleted file mode 100644 index 37879e8ec5..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/list.jsp +++ /dev/null @@ -1,107 +0,0 @@ - -list page -<%@ include file="top.html" %> - -<% - String error = myview.getErrorMessage(); - if (error != null) { -%> -

    -An error occured in the JOnAS Server: -

    -<%=error%> -

    -<% - } -%> -<% - String[] plist = myview.getProfils(); -%> -You have been authenticated by web container and you can access now the list of -alarms received for each filter. -The color used shows the current level of alarm: - - - - - - - - - - - - - - -
    SEVERE ERROR
    WARNING
    INFO
    NO ALARM
    -
    -

    - - - - - -
    -You can see the list of alarm received for a special filter by -choosing in the list here after. -

    - - <% - for (int i = 0; i < plist.length; i++) { - String profil = plist[i]; - %> -<% - switch (myview.alarmLevel(profil)) { - case 1: -%> - -<% - break; - case 2: -%> - -<% - break; - case 3: -%> - -<% - break; - default: -%> - -<% - } -%> - - - - - <% - } - %> -
    -<%=profil%> - ->See details - ->Remove filter -
    -

    -You can create a new filter by using -the following form. -
    -

    -device name: -

    - Only Severe Alarms
    - Warnings and Severe Alarms
    - All Alarm Messages
    -

    - -

    -
    -Return to index page - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/remove.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/remove.jsp deleted file mode 100644 index ef063c4751..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/remove.jsp +++ /dev/null @@ -1,13 +0,0 @@ - -remove page - - -<% - String alarmPK = request.getParameter("alarm"); - myview.forgetAlarm(alarmPK); -%> - - - - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/removefilter.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/removefilter.jsp deleted file mode 100644 index a66d56d0e3..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/removefilter.jsp +++ /dev/null @@ -1,11 +0,0 @@ - -remove filter - - -<% - String profil = request.getParameter("profil"); - myview.removeProfil(profil); -%> - - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/setfilter.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/setfilter.jsp deleted file mode 100644 index e22ebc4d45..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/setfilter.jsp +++ /dev/null @@ -1,13 +0,0 @@ - -set filter - - -<% - String profil = request.getParameter("profil"); - myview.setProfil(profil); -%> - - - - - diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/top.html b/jonas_tests/examples/base/examples/alarm/web/secured/top.html deleted file mode 100644 index ece8a76459..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/top.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - -
    JOnAS LogoThe JOnAS Alarm DemoTomcat LogoJetty Logo
    diff --git a/jonas_tests/examples/base/examples/alarm/web/secured/unsetfilter.jsp b/jonas_tests/examples/base/examples/alarm/web/secured/unsetfilter.jsp deleted file mode 100644 index 4b53e8f355..0000000000 --- a/jonas_tests/examples/base/examples/alarm/web/secured/unsetfilter.jsp +++ /dev/null @@ -1,10 +0,0 @@ - -unset filter - - -<% - myview.setProfil(null); -%> - - - diff --git a/jonas_tests/examples/base/examples/build.properties b/jonas_tests/examples/base/examples/build.properties deleted file mode 100644 index 80ebd7c47f..0000000000 --- a/jonas_tests/examples/base/examples/build.properties +++ /dev/null @@ -1,42 +0,0 @@ -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999 Bull S.A. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# Initial developer(s): ____________________________________. -# Contributor(s): ______________________________________. -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# Properties defined in this file could be customized - -# options for java compiler -opt.javac.debug on -opt.javac.optimize off - -# To use the jike compiler -#build.compiler jikes - -# genic args -#verbose=true - -# protocols for Carol (jrmp,iiop) -protocols.names=jrmp,iiop -genicargs=-verbose diff --git a/jonas_tests/examples/base/examples/build.xml b/jonas_tests/examples/base/examples/build.xml deleted file mode 100644 index 4240b897ce..0000000000 --- a/jonas_tests/examples/base/examples/build.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/cmp2/README b/jonas_tests/examples/base/examples/cmp2/README deleted file mode 100644 index aaf9dfe63b..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/README +++ /dev/null @@ -1,109 +0,0 @@ - - -Example Overview -================ - -This example shows how to use new features of container managed persistence -in EJB 2.0, like Entity Relationships and EJB-QL. - -The code of the EJBs used in this example comes from the book: - "Enterprise JavaBeans(TM)" Third Edition - by Richard Monson-Haefel - [O'REILLY edition ISBN 0-596-00226-2] - -We have packaged this example as an ear since the client is implemented -as three servlets. - - -Directories structure -===================== - -The "src" directory contains: - -- eight Entity beans: - CustomerEJB, - AddressEJB, - PhoneEJB, - CreditCardEJB, - CruiseEJB, - ShipEJB, - ReservationEJB, - CabinEJB, - Sequence. - The seven first beans shows the seven relationship types, - the last is used for an automatic generation of primary keys. - -- three Session beans: - TravelAgentEJB, - RTravelAgentEJB, - SequenceSession. - -- three servlets: - ServletTest - shows one to one relationship unidirectional or bidirectional, - ServletTest2 - shows one to many, many to one, many to many - uni and bidirectional relationships - ServletTest3 - shows example of finder methods using many EJB-QL examples - -The "etc" directory contains: - -- the "xml" directory which contains all the deployment descriptors - used for this example : - application.xml (ear file), - ejb-jar.xml and jonas-ejb-jar.xml (jar file), - web.xml and jonas-web.xml (war file). - -- the "resources" directory which contains all the resources for this - application - "web" directory contains all resources used by the servlets - - -Compiling this example creates an .ear file that represents the application -including : -- all the beans used by the web application, -- a web application that will be used by Tomcat or Jetty to run the servlets. - - -Prerequisites -============= -First, you must have installed a web container (ie : Catalina or Jetty) -as the web container service - -You have to set the environment variables - CATALINA_HOME and CATALINA_BASE as indicated in the Tomcat 4.1.x documentation. -or JETTY_HOME for Jetty 4.2.x - -(See the howto on ObjectWeb : http://www.objectweb.org/jonas/doc/index.html) - -As for the other JOnAS examples, you have to configure a datasource. -It's JNDI name must be 'jdbc_1'. -The 'datasource.mappername' property value must be up-to-date. - - -Building this example -===================== -Under $JONAS_ROOT/examples/cmp2, do - $ ant install - - -Running this example -==================== -Commands are given for an Unix system, similar commands can be done on -Windows. - -1) Run a JOnAS server: - $ jonas start - -2) Load cmp2.ear (if you have not added it in the ear service descriptors list) using jonasAdmin -management application (http://:/jonasAdmin) or the 'jonas admin' command. - -3) Lookup at http://:/cmp2 to start this example - - is the name of your machine (localhost by default), and - - the port number (9000 by default). - -4) Stop the jonas server - $jonas stop - - diff --git a/jonas_tests/examples/base/examples/cmp2/build.xml b/jonas_tests/examples/base/examples/cmp2/build.xml deleted file mode 100644 index c1a80645a1..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/build.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/cmp2/etc/resources/web/index.html b/jonas_tests/examples/base/examples/cmp2/etc/resources/web/index.html deleted file mode 100644 index 28695422eb..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/resources/web/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - JOnAS example cmp2 - - - - -

    cmp2 : EJB 2.0 Container Managed Persistence

    - -

    This example shows how to use new features of container managed persistence - in EJB 2.0, like Entity Relationships and EJB-QL.

    - -

    The code of the EJBs used in this example comes from the book - "Enterprise JavaBeans(TM)" Third Edition by Richard Monson-Haefel -
    [O'REILLY edition ISBN 0-596-00226-2] -

    - -

    Examples Showing One to One Relationships:

    -
      -
    • One to One Unidirectional Relationship: -
      Customer --> Address

    • -
    • One to One Bidirectional Relationship: -
      Customer <--> CreditCard

    • -
    • One to Many Unidirectional Relationship: -
      Customer --> Phone

    • -
    - - - - - - -
    - Run the tests? - -
    - -
    -
    - - -

    Examples Showing Many to One, One to Many, and Many to Many Relationships:

    -
      -
    • Many to One Unidirectional Relationship: -
      Cruise --> Ship

    • -
    • One to Many Bidirectional Relationship: -
      Cruise <--> Reservation

    • -
    • Many to Many Bidirectional Relationship: -
      Customer <--> Reservation

    • -
    • Many to Many Unidirectional Relationship: -
      Reservation --> Cabin

    • -
    - - - - - - -
    - Run the tests? - -
    - -
    -
    - -

    Examples Showing EJB-QL:

    -
      -
    • SELECT OBJECT(s) FROM JE2_Ship AS s WHERE s.tonnage = ?1
    • -
    • SELECT OBJECT(s) FROM JE2_Ship AS s WHERE s.tonnage BETWEEN ?1 AND ?2
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c
    • -
    • SELECT OBJECT(c) FROM JE2_Cruise AS c WHERE c.name = ?1
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c -
      WHERE c.lastName = ?1 AND c.firstName = ?2
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName = 'Smith90'
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c -
      WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.hasGoodCredit = TRUE
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c -
      WHERE c.homeAddress.city = ?1 AND c.homeAddress.state = ?2
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c -
      WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 AND c.homeAddress.state = ?3
    • -
    • SELECT OBJECT(c) FROM JE2_Cabin AS c WHERE c.deckLevel = ?1
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c -
      WHERE c.homeAddress.state IN ('FL','TX','AZ','CA')
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.reservations IS EMPTY
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS cust, Cruise AS cr, IN (cr.reservations) AS res -
      WHERE cr = ?1 AND cust MEMBER OF res.customers
    • -
    • SELECT a.zip FROM JE2_Address AS a WHERE a.state = ?1
    • -
    • SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.homeAddress = ?1
    • -
    • .....
    • -
    - - - - - - -
    - Run the tests? - -
    - -
    -
    - - - - diff --git a/jonas_tests/examples/base/examples/cmp2/etc/resources/web/style.css b/jonas_tests/examples/base/examples/cmp2/etc/resources/web/style.css deleted file mode 100644 index 4f852c2a87..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/resources/web/style.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - background : white; - color : black; -} -h1, h2, h3 {font-family : sans-serif; } -h1 {font-size : 175%; color : DarkCyan; text-align : center;} -h2 {font-size : 150%; color : DarkCyan; - border-bottom : solid; - border-bottom-width : 1; -} -h3 {font-size : 125%; } -strong { font-weight : bold; } -hr { size : 1; width : 100%; } diff --git a/jonas_tests/examples/base/examples/cmp2/etc/xml/application.xml b/jonas_tests/examples/base/examples/cmp2/etc/xml/application.xml deleted file mode 100644 index 945d7cc97d..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/xml/application.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - cmp2 example EJB2.0 container managed persistence - cmp2 servlet - - - - cmp2.jar - - - - - cmp2.war - cmp2 - - - diff --git a/jonas_tests/examples/base/examples/cmp2/etc/xml/cmp2.xml b/jonas_tests/examples/base/examples/cmp2/etc/xml/cmp2.xml deleted file mode 100644 index c24df0a211..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/xml/cmp2.xml +++ /dev/null @@ -1,715 +0,0 @@ - - - - - Deployment descriptor for the cmp2 JOnAS example - cmp2 example - - - - CustomerEJB - com.titan.customer.CustomerHomeRemote - com.titan.customer.CustomerRemote - com.titan.customer.CustomerHomeLocal - com.titan.customer.CustomerLocal - com.titan.customer.CustomerBean - Container - java.lang.Integer - false - 2.x - JE2_Customer - id - lastName - firstName - hasGoodCredit - id - - ejb/AddressHomeLocal - Entity - com.titan.address.AddressHomeLocal - com.titan.address.AddressLocal - AddressEJB - - - ejb/CreditCardHome - Entity - com.titan.customer.CreditCardHomeLocal - com.titan.customer.CreditCardLocal - CreditCardEJB - - - ejb/PhoneHomeLocal - Entity - com.titan.phone.PhoneHomeLocal - com.titan.phone.PhoneLocal - PhoneEJB - - - - - findAllCustomers - - - SELECT OBJECT(c) FROM JE2_Customer AS c - - - - findByName - - java.lang.String - java.lang.String - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 - - - - - findSmith90 - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.lastName = 'Smith90' - - - - - findByExactName - - java.lang.String - java.lang.String - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.lastName = ?1 AND c.firstName = ?2 - - - - - findByNameAndState - - java.lang.String - java.lang.String - java.lang.String - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 AND c.homeAddress.state = ?3 - - - - - findByGoodCredit - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.hasGoodCredit = TRUE - - - - - findByCity - - java.lang.String - java.lang.String - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.homeAddress.city = ?1 AND c.homeAddress.state = ?2 - - - - - findInHotStates - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.homeAddress.state IN ('FL','TX','AZ','CA') - - - - - findWithNoReservations - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.reservations IS EMPTY - - - - - findOnCruise - - com.titan.cruise.CruiseLocal - - - - SELECT OBJECT(cust) FROM JE2_Customer cust, JE2_Cruise cr, IN (cr.reservations) AS res - WHERE cr = ?1 AND cust MEMBER OF res.customers - - - - - findByState - - java.lang.String - - - - SELECT OBJECT(c) FROM JE2_Customer c - WHERE c.homeAddress.state = ?1 - ORDER BY c.lastName,c.firstName - - - - - - AddressEJB - com.titan.address.AddressHomeLocal - com.titan.address.AddressLocal - com.titan.address.AddressBean - Container - java.lang.Object - false - 2.x - JE2_Address - street - city - state - zip - - - - findAllAddress - - - SELECT OBJECT(c) FROM JE2_Address c - - - - ejbSelectZipCodes - - java.lang.String - - - SELECT a.zip FROM JE2_Address AS a WHERE a.state = ?1 - - - - ejbSelectAll - - - SELECT OBJECT(a) FROM JE2_Address AS a - - - - ejbSelectCustomer - - com.titan.address.AddressLocal - - - SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.homeAddress = ?1 - - - - - PhoneEJB - com.titan.phone.PhoneHomeLocal - com.titan.phone.PhoneLocal - com.titan.phone.PhoneBean - Container - java.lang.Object - false - 2.x - JE2_Phone - number - type - - - - findAllPhones - - - SELECT OBJECT(c) FROM JE2_Phone c - - - - - CreditCardEJB - com.titan.customer.CreditCardHomeLocal - com.titan.customer.CreditCardLocal - com.titan.customer.CreditCardBean - Container - java.lang.Object - false - 2.x - JE2_CreditCard - expirationDate - number - nameOnCard - creditOrganization - - - - findAllCreditCards - - - SELECT OBJECT(cc) FROM JE2_CreditCard cc - - - - - CruiseEJB - com.titan.cruise.CruiseHomeLocal - com.titan.cruise.CruiseLocal - com.titan.cruise.CruiseBean - Container - java.lang.Object - false - 2.x - JE2_Cruise - name - - - - findAllCruises - - - SELECT OBJECT(cc) FROM JE2_Cruise cc - - - - findByName - - java.lang.String - - - SELECT OBJECT(c) FROM JE2_Cruise c WHERE c.name = ?1 - - - - - ShipEJB - com.titan.ship.ShipHomeLocal - com.titan.ship.ShipLocal - com.titan.ship.ShipBean - Container - java.lang.Integer - false - 2.x - JE2_Ship - id - name - tonnage - id - - - - findAllShips - - - SELECT OBJECT(cc) FROM JE2_Ship cc - - - - findByTonnage - - java.lang.Double - - - - SELECT OBJECT(s) FROM JE2_Ship s - WHERE s.tonnage = ?1 - - - - - findByTonnage - - java.lang.Double - java.lang.Double - - - - SELECT OBJECT(s) FROM JE2_Ship s - WHERE s.tonnage BETWEEN ?1 AND ?2 - - - - - - ReservationEJB - com.titan.reservation.ReservationHomeLocal - com.titan.reservation.ReservationLocal - com.titan.reservation.ReservationBean - Container - java.lang.Object - false - 2.x - JE2_Reservation - amountPaid - date - - - - findAllReservations - - - SELECT OBJECT(cc) FROM JE2_Reservation cc - - - - - CabinEJB - com.titan.cabin.CabinHomeRemote - com.titan.cabin.CabinRemote - com.titan.cabin.CabinHomeLocal - com.titan.cabin.CabinLocal - com.titan.cabin.CabinBean - Container - java.lang.Integer - false - 2.x - JE2_Cabin - id - name - deckLevel - bedCount - id - - - - findAllOnDeckLevel - - java.lang.Integer - - - - SELECT OBJECT(c) FROM JE2_Cabin as c WHERE c.deckLevel = ?1 - - - - - findAllCabins - - - SELECT OBJECT(cc) FROM JE2_Cabin cc - - - - ejbSelectAllForCustomer - - com.titan.customer.CustomerLocal - - - SELECT OBJECT(cab) FROM JE2_Customer AS cust, - IN (cust.reservations) AS res, IN (res.cabins) AS cab - WHERE cust = ?1 - - - - - - TravelAgentEJB - com.titan.travelagent.TravelAgentHomeRemote - com.titan.travelagent.TravelAgentRemote - com.titan.travelagent.TravelAgentBean - Stateless - Container - - ejb/CabinHomeLocal - Entity - com.titan.cabin.CabinHomeLocal - com.titan.cabin.CabinLocal - CabinEJB - - - - - - RTravelAgentEJB - com.titan.travelagent.RTravelAgentHomeRemote - com.titan.travelagent.RTravelAgentRemote - com.titan.travelagent.RTravelAgentBean - Stateless - Container - - ejb/CabinHomeRemote - Entity - com.titan.cabin.CabinHomeRemote - com.titan.cabin.CabinRemote - - - - - - - - - Customer-Address - - Customer-has-a-Address - One - - CustomerEJB - - - homeAddress - - - - Address-belongs-to-Customer - One - - - AddressEJB - - - - - - Customer-CreditCard - - Customer-has-a-CreditCard - One - - CustomerEJB - - creditCard - - - CreditCard-belongs-to-Customer - One - - - CreditCardEJB - - customer - - - - - Customer-Phones - - Customer-has-many-Phone-numbers - One - - CustomerEJB - - - phoneNumbers - java.util.Collection - - - - Phone-belongs-to-Customer - Many - - - PhoneEJB - - - - - - Customer-Reservation - - Customer-has-many-Reservations - Many - - CustomerEJB - - - reservations - java.util.Collection - - - - Reservation-has-many-Customers - Many - ReservationEJB - - - customers - java.util.Set - - - - - - Cruise-Ship - - Cruise-has-a-Ship - Many - - CruiseEJB - - ship - - - Ship-has-many-Cruises - One - - ShipEJB - - - - - - Cruise-Reservation - - Cruise-has-many-Reservations - One - - CruiseEJB - - - reservations - java.util.Collection - - - - Reservation-has-a-Cruise - Many - - ReservationEJB - - cruise - - - - - Cabin-Ship - - Cabin-has-a-Ship - Many - - CabinEJB - - ship - - - Ship-has-many-Cabins - One - - ShipEJB - - - - - - Cabin-Reservation - - Cabin-has-many-Reservations - Many - - CabinEJB - - - - Reservation-has-many-Cabins - Many - - ReservationEJB - - - cabins - java.util.Set - - - - - - - - - - - - CabinEJB - * - - - RTravelAgentEJB - * - - - TravelAgentEJB - * - - - CustomerEJB - * - - - AddressEJB - * - - - CreditCardEJB - * - - - PhoneEJB - * - - - CruiseEJB - * - - - ShipEJB - * - - - ReservationEJB - * - - Required - - - - - SequenceSession - * - - - Sequence - * - - Required - - - - - - diff --git a/jonas_tests/examples/base/examples/cmp2/etc/xml/jonas-cmp2.xml b/jonas_tests/examples/base/examples/cmp2/etc/xml/jonas-cmp2.xml deleted file mode 100644 index 147cfb33b7..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/xml/jonas-cmp2.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - CustomerEJB - CustomerHomeRemote - jdbc_1 - - - - AddressEJB - - jdbc_1 - - - - - CabinEJB - jdbc_1 - - - - PhoneEJB - - jdbc_1 - - - - - CreditCardEJB - - jdbc_1 - - - - - CruiseEJB - - jdbc_1 - - - - - ShipEJB - jdbc_1 - - - - ReservationEJB - - jdbc_1 - - - - - - RTravelAgentEJB - RTravelAgentHomeRemote - - ejb/CabinHomeRemote - CabinHomeRemote - - - - diff --git a/jonas_tests/examples/base/examples/cmp2/etc/xml/web.xml b/jonas_tests/examples/base/examples/cmp2/etc/xml/web.xml deleted file mode 100644 index 7d15267747..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/etc/xml/web.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - ServletTest - servlets.ServletTest - - - - ServletTest2 - servlets.ServletTest2 - - - - ServletTest3 - servlets.ServletTest3 - - - - ServletTest - /test1 - - - - ServletTest2 - /test2 - - - - ServletTest3 - /test3 - - - - ejb/CreditCardHomeLocal - Entity - com.titan.customer.CreditCardHomeLocal - com.titan.customer.CreditCardLocal - cmp2.jar#CreditCardEJB - - - - ejb/CustomerHomeLocal - Entity - com.titan.customer.CustomerHomeLocal - com.titan.customer.CustomerLocal - cmp2.jar#CustomerEJB - - - - ejb/AddressHomeLocal - Entity - com.titan.address.AddressHomeLocal - com.titan.address.AddressLocal - cmp2.jar#AddressEJB - - - - ejb/ShipHomeLocal - Entity - com.titan.address.ShipHomeLocal - com.titan.address.ShipLocal - cmp2.jar#ShipEJB - - - - ejb/CruiseHomeLocal - Entity - com.titan.address.CruiseHomeLocal - com.titan.address.CruiseLocal - cmp2.jar#CruiseEJB - - - - ejb/ReservationHomeLocal - Entity - com.titan.address.ReservationHomeLocal - com.titan.address.ReservationLocal - cmp2.jar#ReservationEJB - - - - ejb/CabinHomeLocal - Entity - com.titan.address.CabinHomeLocal - com.titan.address.CabinLocal - cmp2.jar#CabinEJB - - - - ejb/PhoneHomeLocal - Entity - com.titan.adress.PhoneHomeLocal - com.titan.address.PhoneLocal - cmp2.jar#PhoneEJB - - - diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressBean.java deleted file mode 100644 index 1c59356ade..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressBean.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.titan.address; - -import java.util.Collection; -import java.util.Set; - -import javax.ejb.EntityContext; -import javax.ejb.FinderException; - -import com.titan.customer.CustomerLocal; - -public abstract class AddressBean implements javax.ejb.EntityBean { - - public Integer ejbCreateAddress(String street, String city, String state, String zip) - throws javax.ejb.CreateException { - setStreet(street); - setCity(city); - setState(state); - setZip(zip); - return null; - } - - public void ejbPostCreateAddress(String street, String city, String state, String zip) { - - } - - // select methods - public abstract Set ejbSelectZipCodes(String state) throws FinderException; - - public abstract Collection ejbSelectAll() throws FinderException; - - public abstract CustomerLocal ejbSelectCustomer(AddressLocal addr) throws FinderException; - - // Public Home method required to test the private ejbSelectZipCodes method - public Collection ejbHomeSelectZipCodes(String state) throws FinderException { - return this.ejbSelectZipCodes(state); - } - - // Public Home method required to test the private ejbSelectCustomer method - public CustomerLocal ejbHomeSelectCustomer(AddressLocal addr) throws FinderException { - return (CustomerLocal) (this.ejbSelectCustomer(addr)); - } - - // persistent fields - public abstract String getStreet(); - - public abstract void setStreet(String street); - - public abstract String getCity(); - - public abstract void setCity(String city); - - public abstract String getState(); - - public abstract void setState(String state); - - public abstract String getZip(); - - public abstract void setZip(String zip); - - // standard call back methods - - public void setEntityContext(EntityContext ec) { - } - - public void unsetEntityContext() { - } - - public void ejbLoad() { - } - - public void ejbStore() { - } - - public void ejbActivate() { - } - - public void ejbPassivate() { - } - - public void ejbRemove() throws javax.ejb.RemoveException { - } - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressHomeLocal.java deleted file mode 100644 index 7bac2363c4..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressHomeLocal.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.titan.address; - -import java.util.Collection; - -import com.titan.customer.CustomerLocal; - -// Address EJB's local home interface -public interface AddressHomeLocal extends javax.ejb.EJBLocalHome { - - public AddressLocal createAddress(String street, String city, String state, String zip ) - throws javax.ejb.CreateException; - - public AddressLocal findByPrimaryKey(Integer primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllAddress() - throws javax.ejb.FinderException; - - // Home method, requires ejbHomeSelectZipCodes method in bean class - public Collection selectZipCodes(String state) - throws javax.ejb.FinderException; - - // Home method, requires ejbHomeSelectCustomer method in bean class - public CustomerLocal selectCustomer(AddressLocal addr) - throws javax.ejb.FinderException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressLocal.java deleted file mode 100644 index 360a00bbe9..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/address/AddressLocal.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.titan.address; - -// Address EJB's local interface -public interface AddressLocal extends javax.ejb.EJBLocalObject { - - public String getStreet(); - - public void setStreet(String street); - - public String getCity(); - - public void setCity(String city); - - public String getState(); - - public void setState(String state); - - public String getZip(); - - public void setZip(String zip); -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinBean.java deleted file mode 100644 index 5919fe467e..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinBean.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.titan.cabin; - -import java.util.Set; - -import javax.ejb.EntityContext; -import javax.ejb.FinderException; - -import com.titan.customer.CustomerLocal; -import com.titan.ship.ShipLocal; - -public abstract class CabinBean implements javax.ejb.EntityBean { - - public Integer ejbCreate(Integer id) throws javax.ejb.CreateException { - this.setId(id); - return null; - } - - public void ejbPostCreate(Integer id) { - - } - - public abstract Set ejbSelectAllForCustomer(CustomerLocal cust) throws FinderException; - - // Public Home method required to test the private ejbSelectAllForCustomer - // method - public Set ejbHomeSelectAllForCustomer(CustomerLocal cust) throws FinderException { - return this.ejbSelectAllForCustomer(cust); - } - - public abstract void setId(Integer id); - - public abstract Integer getId(); - - public abstract void setShip(ShipLocal ship); - - public abstract ShipLocal getShip(); - - public abstract void setName(String name); - - public abstract String getName(); - - public abstract void setBedCount(int count); - - public abstract int getBedCount(); - - public abstract void setDeckLevel(int level); - - public abstract int getDeckLevel(); - - public int getShipId() { - return getShip().getId().intValue(); - } - - public void setShipId(int sp) { - ShipLocal sl = getShip(); - sl.setId(new Integer(sp)); - setShip(sl); - } - - public void setEntityContext(EntityContext ctx) { - // Not implemented. - } - - public void unsetEntityContext() { - // Not implemented. - } - - public void ejbActivate() { - // Not implemented. - } - - public void ejbPassivate() { - // Not implemented. - } - - public void ejbLoad() { - // Not implemented. - } - - public void ejbStore() { - // Not implemented. - } - - public void ejbRemove() throws javax.ejb.RemoveException { - // Not implemented. - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeLocal.java deleted file mode 100644 index 32a6bc30fb..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeLocal.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.titan.cabin; - -import com.titan.customer.CustomerLocal; - -import java.util.Collection; -import java.util.Set; -import javax.ejb.EJBException; -import javax.ejb.CreateException; -import javax.ejb.FinderException; - -public interface CabinHomeLocal extends javax.ejb.EJBLocalHome { - - public CabinLocal create(Integer id) - throws CreateException, EJBException; - - public CabinLocal findByPrimaryKey(Integer pk) - throws FinderException, EJBException; - - public Collection findAllOnDeckLevel(Integer level) - throws FinderException; - - public Collection findAllCabins() - throws FinderException; - - // Home method, requires ejbHomeSelectAllForCustomer method in bean class - public Set selectAllForCustomer(CustomerLocal cust) - throws FinderException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeRemote.java deleted file mode 100644 index d5c2dea860..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinHomeRemote.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.titan.cabin; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.FinderException; - -public interface CabinHomeRemote extends javax.ejb.EJBHome { - - public CabinRemote create(Integer id) - throws CreateException, RemoteException; - - public CabinRemote findByPrimaryKey(Integer pk) - throws FinderException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinLocal.java deleted file mode 100644 index 40a1872192..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinLocal.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.titan.cabin; - -import javax.ejb.EJBException; -import com.titan.ship.ShipLocal; - -public interface CabinLocal extends javax.ejb.EJBLocalObject { - - public String getName() throws EJBException; - public void setName(String str) throws EJBException; - public int getDeckLevel() throws EJBException; - public void setDeckLevel(int level) throws EJBException; - public ShipLocal getShip(); - public void setShip(ShipLocal ship); - public int getBedCount() throws EJBException; - public void setBedCount(int bc) throws EJBException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinRemote.java deleted file mode 100644 index 29faff6fdc..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cabin/CabinRemote.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.titan.cabin; - -import java.rmi.RemoteException; - -public interface CabinRemote extends javax.ejb.EJBObject { - public String getName() throws RemoteException; - public void setName(String str) throws RemoteException; - public int getDeckLevel() throws RemoteException; - public void setDeckLevel(int level) throws RemoteException; - public int getShipId() throws RemoteException; - public void setShipId(int sp) throws RemoteException; - public int getBedCount() throws RemoteException; - public void setBedCount(int bc) throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseBean.java deleted file mode 100644 index 3373f90cec..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseBean.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.titan.cruise; - -import javax.ejb.CreateException; -import javax.ejb.RemoveException; -import javax.ejb.EntityContext; -import com.titan.ship.*; -import java.util.Collection; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -public abstract class CruiseBean implements javax.ejb.EntityBean { - - public Integer ejbCreate(String name, ShipLocal ship) throws CreateException { - setName(name); - return null; - } - - public void ejbPostCreate(String name, ShipLocal ship) { - setShip(ship); - } - - // persistent fields - public abstract void setName(String name); - public abstract String getName( ); - - public abstract void setShip(ShipLocal ship); - public abstract ShipLocal getShip( ); - - // relationship fields - - public abstract void setReservations(Collection res); - public abstract Collection getReservations( ); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws RemoveException {} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseHomeLocal.java deleted file mode 100644 index 6b6e30d8a5..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseHomeLocal.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.titan.cruise; - -import com.titan.ship.*; -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; - - -// Cruise EJB's local home interface -public interface CruiseHomeLocal extends javax.ejb.EJBLocalHome { - - public CruiseLocal create(String name, ShipLocal ship) - throws javax.ejb.CreateException; - - public CruiseLocal findByPrimaryKey(Object primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllCruises() - throws FinderException; - - public CruiseLocal findByName(String name) - throws FinderException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseLocal.java deleted file mode 100644 index e632bedf37..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/cruise/CruiseLocal.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.titan.cruise; - -import com.titan.ship.*; -import java.util.Collection; - -// Cruise EJB's local interface -public interface CruiseLocal extends javax.ejb.EJBLocalObject { - - public String getName(); - public void setName(String name); - - public ShipLocal getShip(); - public void setShip(ShipLocal ship); - - public void setReservations(Collection res); - public Collection getReservations( ); - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/AddressDO.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/AddressDO.java deleted file mode 100644 index cae7e22182..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/AddressDO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.titan.customer; - -public class AddressDO implements java.io.Serializable { - - private String street; - private String city; - private String state; - private String zip; - - public AddressDO(String street, String city, String state, String zip ) { - this.street = street; - this.city = city; - this.state = state; - this.zip = zip; - } - public String getStreet(){ - return street; - } - public String getCity(){ - return city; - } - public String getState(){ - return state; - } - public String getZip(){ - return zip; - } -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardBean.java deleted file mode 100644 index 5855282576..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardBean.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.titan.customer; - -import javax.ejb.EntityContext; -import java.util.Date; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -public abstract class CreditCardBean implements javax.ejb.EntityBean { - - public Object ejbCreate(Date exp, String numb, String name, String org) - throws javax.ejb.CreateException { - - setExpirationDate(exp); - setNumber(numb); - setNameOnCard(name); - setCreditOrganization(org); - return null; - } - - public void ejbPostCreate(Date exp, String numb, String name, String org) { - } - - // relationship fields - - public abstract CustomerLocal getCustomer( ); - public abstract void setCustomer(CustomerLocal cust); - - // persistent fields - public abstract Date getExpirationDate(); - public abstract void setExpirationDate(Date date); - public abstract String getNumber(); - public abstract void setNumber(String number); - public abstract String getNameOnCard(); - public abstract void setNameOnCard(String name); - public abstract String getCreditOrganization(); - public abstract void setCreditOrganization(String org); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws javax.ejb.RemoveException{} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardHomeLocal.java deleted file mode 100644 index 1e20caf818..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardHomeLocal.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.titan.customer; - -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; -import java.util.Date; - -// CreditCard EJB's local home interface -public interface CreditCardHomeLocal extends javax.ejb.EJBLocalHome { - - public CreditCardLocal create(Date exp, String numb, String name, String org) - throws javax.ejb.CreateException; - - public CreditCardLocal findByPrimaryKey(Object primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllCreditCards() throws FinderException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardLocal.java deleted file mode 100644 index 0311d0b6a6..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CreditCardLocal.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.titan.customer; - -import java.util.Date; - -// Credit Card EJB's local interface -public interface CreditCardLocal extends javax.ejb.EJBLocalObject { - - public Date getExpirationDate(); - public void setExpirationDate(Date date); - public String getNumber(); - public void setNumber(String number); - public String getNameOnCard(); - public void setNameOnCard(String name); - public String getCreditOrganization(); - public void setCreditOrganization(String org); - - public CustomerLocal getCustomer(); - public void setCustomer(CustomerLocal cust); - -} - diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerBean.java deleted file mode 100644 index df280a5207..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerBean.java +++ /dev/null @@ -1,182 +0,0 @@ -package com.titan.customer; - -import com.titan.phone.*; -import com.titan.address.AddressLocal; -import com.titan.address.AddressHomeLocal; - -import javax.naming.InitialContext; -import javax.ejb.EJBException; -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.naming.NamingException; -import java.util.Date; -import java.util.Collection; -import java.util.Iterator; -import java.util.Vector; - -public abstract class CustomerBean implements javax.ejb.EntityBean { - - public Integer ejbCreate(Integer id) throws javax.ejb.CreateException{ - this.setId(id); - return null; - } - - public void ejbPostCreate(Integer id){ - } - - - // business methods - - public Name getName() { - Name name = new Name(getLastName(),getFirstName()); - return name; - } - public void setName(Name name) { - setLastName(name.getLastName()); - setFirstName(name.getFirstName()); - } - - public void setAddress(String street, String city, String state, String zip) - throws EJBException { - - AddressLocal addr = this.getHomeAddress( ); - - try { - - if (addr == null) { - // Customer doesn't have an address yet. Create a new one. - InitialContext cntx = new InitialContext( ); - AddressHomeLocal addrHome = - (AddressHomeLocal)cntx.lookup("java:comp/env/ejb/AddressHomeLocal"); - addr = addrHome.createAddress(street, city, state, zip); - this.setHomeAddress(addr); - } else { - // Customer already has an address. Change its fields - addr.setStreet(street); - addr.setCity(city); - addr.setState(state); - addr.setZip(zip); - } - } catch (NamingException ne) { - throw new EJBException(ne); - } catch (CreateException ce) { - throw new EJBException(ce); - } - } - - public void setAddress(AddressDO addrValue) throws CreateException, NamingException { - String street = addrValue.getStreet(); - String city = addrValue.getCity(); - String state = addrValue.getState(); - String zip = addrValue.getZip(); - - setAddress(street,city,state,zip); - } - - - public AddressDO getAddress() { - - AddressLocal addrLocal = this.getHomeAddress(); - if (addrLocal == null) return null; - String street = addrLocal.getStreet(); - String city = addrLocal.getCity(); - String state = addrLocal.getState(); - String zip = addrLocal.getZip(); - AddressDO addrValue = new AddressDO(street,city,state,zip); - return addrValue; - } - - public void addPhoneNumber(String number, byte type) - throws NamingException, CreateException { - InitialContext jndiEnc = new InitialContext( ); - PhoneHomeLocal phoneHome = (PhoneHomeLocal)(jndiEnc.lookup("java:comp/env/ejb/PhoneHomeLocal")); - - PhoneLocal phone = phoneHome.create(number,type); - Collection phoneNumbers = this.getPhoneNumbers( ); - phoneNumbers.add(phone); - } - - public void removePhoneNumber(byte typeToRemove) { - - Collection phoneNumbers = this.getPhoneNumbers( ); - Iterator iterator = phoneNumbers.iterator(); - - while(iterator.hasNext()){ - PhoneLocal phone = (PhoneLocal)iterator.next(); - if (phone.getType() == typeToRemove) { - phoneNumbers.remove(phone); - break; - } - - } - } - - public void updatePhoneNumber(String number, byte typeToUpdate) { - - - Collection phoneNumbers = this.getPhoneNumbers( ); - Iterator iterator = phoneNumbers.iterator(); - while(iterator.hasNext()){ - PhoneLocal phone = (PhoneLocal)iterator.next(); - if (phone.getType() == typeToUpdate) { - phone.setNumber(number); - break; - } - } - } - - public Vector getPhoneList() { - - Vector vv = new Vector(); - Collection phoneNumbers = this.getPhoneNumbers(); - - Iterator iterator = phoneNumbers.iterator(); - while(iterator.hasNext()) { - PhoneLocal phone = (PhoneLocal)iterator.next(); - String ss = "type = '" + phone.getType() + "', number = '" + phone.getNumber() + "'"; - vv.add(ss); - } - - return vv; - } - - - // persistent relationships - - public abstract AddressLocal getHomeAddress(); - public abstract void setHomeAddress(AddressLocal address); - - public abstract CreditCardLocal getCreditCard(); - public abstract void setCreditCard(CreditCardLocal card); - - public abstract java.util.Collection getPhoneNumbers( ); - public abstract void setPhoneNumbers(java.util.Collection phones); - - public abstract java.util.Collection getReservations(); - public abstract void setReservations(java.util.Collection reservations); - - - // abstract accessor methods - public abstract Integer getId(); - public abstract void setId(Integer id); - - public abstract String getLastName( ); - public abstract void setLastName(String lname); - - public abstract String getFirstName( ); - public abstract void setFirstName(String fname); - - public abstract boolean getHasGoodCredit(); - public abstract void setHasGoodCredit(boolean flag); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws javax.ejb.RemoveException {} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeLocal.java deleted file mode 100644 index ec021688a6..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeLocal.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.titan.customer; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; -import com.titan.cruise.CruiseLocal; - -public interface CustomerHomeLocal extends javax.ejb.EJBLocalHome { - - public CustomerLocal create(Integer id) - throws CreateException; - public CustomerLocal findByPrimaryKey(Integer id) - throws FinderException; - - public Collection findAllCustomers() - throws FinderException; - - public Collection findByName(String lastName, String firstName) - throws FinderException; - - public CustomerLocal findByExactName(String lastName, String firstName) - throws FinderException; - - public Collection findByNameAndState(String lastName, String firstName, String state) - throws FinderException; - - public CustomerLocal findSmith90() - throws FinderException; - - public Collection findByGoodCredit() - throws FinderException; - - public Collection findByCity(String city, String state) - throws FinderException; - - public Collection findInHotStates() - throws FinderException; - - public Collection findWithNoReservations() - throws FinderException; - - public Collection findOnCruise(CruiseLocal cruise) - throws FinderException; - - public Collection findByState(String state) - throws FinderException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeRemote.java deleted file mode 100644 index d240be88ab..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerHomeRemote.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.titan.customer; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.FinderException; - -public interface CustomerHomeRemote extends javax.ejb.EJBHome { - - public CustomerRemote create(Integer id) throws CreateException, RemoteException; - public CustomerRemote findByPrimaryKey(Integer id) throws FinderException, RemoteException; - -} - diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerLocal.java deleted file mode 100644 index 8238a42dd7..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerLocal.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.titan.customer; - -import com.titan.address.*; - -import javax.ejb.CreateException; -import javax.naming.NamingException; -import java.util.Date; -import java.util.Vector; -import java.util.Collection; - -public interface CustomerLocal extends javax.ejb.EJBLocalObject { - - public Name getName(); - public void setName(Name name); - - public boolean getHasGoodCredit(); - public void setHasGoodCredit(boolean flag); - - public void addPhoneNumber(String number, byte type) - throws NamingException, CreateException; - public void removePhoneNumber(byte typeToRemove); - public void updatePhoneNumber(String number, byte typeToUpdate); - - public Vector getPhoneList(); - - public AddressLocal getHomeAddress(); - public void setHomeAddress(AddressLocal address); - - public CreditCardLocal getCreditCard(); - public void setCreditCard(CreditCardLocal card); - - public Collection getPhoneNumbers( ); - public void setPhoneNumbers(Collection phones); - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerRemote.java deleted file mode 100644 index c35c1193a7..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/CustomerRemote.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.titan.customer; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.naming.NamingException; - -public interface CustomerRemote extends javax.ejb.EJBObject { - - public void setAddress(String street, String city, String state, String zip) - throws RemoteException, CreateException, NamingException; - - public void setAddress(AddressDO address) - throws RemoteException, CreateException, NamingException; - - public AddressDO getAddress() throws RemoteException; - - public Name getName() throws RemoteException; - public void setName(Name name) throws RemoteException; - - public boolean getHasGoodCredit() throws RemoteException; - public void setHasGoodCredit(boolean flag) throws RemoteException; - // public String getHasGoodCredit() throws RemoteException; - // public void setHasGoodCredit(String flag) throws RemoteException; - // public double getHasGoodCredit() throws RemoteException; - //public void setHasGoodCredit(double flag) throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/Name.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/Name.java deleted file mode 100644 index 33e856a461..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/customer/Name.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.titan.customer; - -public class Name implements java.io.Serializable { - - private String lastName; - private String firstName; - - public Name(String lname, String fname){ - lastName = lname; - firstName = fname; - } - public String getLastName() { - return lastName; - } - public String getFirstName() { - return firstName; - } -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneBean.java deleted file mode 100644 index 7b40bead92..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneBean.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.titan.phone; - -import javax.ejb.EntityContext; -import java.util.Date; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -public abstract class PhoneBean implements javax.ejb.EntityBean { - - public Object ejbCreate(String number, byte type) throws javax.ejb.CreateException { - setNumber(number); - setType(type); - - return null; - } - - public void ejbPostCreate(String number, byte type) { - } - - // persistent fields - public abstract String getNumber(); - public abstract void setNumber(String number); - public abstract byte getType(); - public abstract void setType(byte type); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws javax.ejb.RemoveException{} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneHomeLocal.java deleted file mode 100644 index 1bbae830ef..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneHomeLocal.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.titan.phone; - -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; - -// Phone EJB's local home interface -public interface PhoneHomeLocal extends javax.ejb.EJBLocalHome { - - public PhoneLocal create(String number, byte type) - throws javax.ejb.CreateException; - - public PhoneLocal findByPrimaryKey(Object primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllPhones() - throws javax.ejb.FinderException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneLocal.java deleted file mode 100644 index 59f03b92d0..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/phone/PhoneLocal.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.titan.phone; - -// Phone EJB's local interface -public interface PhoneLocal extends javax.ejb.EJBLocalObject { - - public String getNumber(); - public void setNumber(String number); - public byte getType(); - public void setType(byte type); - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationBean.java deleted file mode 100644 index 46b011bbd0..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationBean.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.titan.reservation; - -import com.titan.cruise.*; - -import javax.ejb.CreateException; -import javax.ejb.RemoveException; -import javax.ejb.EntityContext; -import java.util.Date; -import java.util.Set; -import java.util.Collection; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -public abstract class ReservationBean implements javax.ejb.EntityBean { - public Object ejbCreate(CruiseLocal cruise, Collection customers) throws CreateException { - return null; - } - - public void ejbPostCreate(CruiseLocal cruise, Collection customers) { - setCruise(cruise); - Collection myCustomers = this.getCustomers(); - myCustomers.addAll(customers); - } - - // relationship fields - - public abstract CruiseLocal getCruise(); - public abstract void setCruise(CruiseLocal cruise); - - public abstract Set getCabins( ); - public abstract void setCabins(Set cabins); - - public abstract Set getCustomers( ); - public abstract void setCustomers(Set customers); - - // persistent fields - public abstract Date getDate(); - public abstract void setDate(Date date); - public abstract double getAmountPaid(); - public abstract void setAmountPaid(double amount); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws RemoveException {} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationHomeLocal.java deleted file mode 100644 index 9c649f0081..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationHomeLocal.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.titan.reservation; - -import com.titan.cruise.*; - -import java.util.Collection; -import javax.ejb.CreateException; -import javax.ejb.FinderException; - -// Reservation EJB's local home interface -public interface ReservationHomeLocal extends javax.ejb.EJBLocalHome { - - public ReservationLocal create(CruiseLocal cruise, Collection customers) - throws javax.ejb.CreateException; - - public ReservationLocal findByPrimaryKey(Object primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllReservations() throws FinderException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationLocal.java deleted file mode 100644 index 9a4442856c..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/reservation/ReservationLocal.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.titan.reservation; - -import com.titan.cruise.*; - -import java.util.Date; -import java.util.Set; - -// Reservation EJB's local interface -public interface ReservationLocal extends javax.ejb.EJBLocalObject { - - public Date getDate(); - public void setDate(Date date); - public double getAmountPaid(); - public void setAmountPaid(double amount); - - public CruiseLocal getCruise(); - public void setCruise(CruiseLocal cruise); - - public Set getCabins( ); - public void setCabins(Set customers); - - public Set getCustomers( ); - public void setCustomers(Set customers); - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipBean.java deleted file mode 100644 index b3923d703c..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipBean.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.titan.ship; - -import javax.ejb.EntityContext; -import javax.ejb.CreateException; -import javax.ejb.RemoveException; - -public abstract class ShipBean implements javax.ejb.EntityBean { - - public Integer ejbCreate(Integer primaryKey, String name, double tonnage) throws CreateException { - setId(primaryKey); - setName(name); - setTonnage(tonnage); - return null; - } - - public void ejbPostCreate(Integer primaryKey, String name, double tonnage) { - } - - // persistent fields - - public abstract void setId(Integer id); - public abstract Integer getId(); - public abstract void setName(String name); - public abstract String getName( ); - public abstract void setTonnage(double tonnage); - public abstract double getTonnage( ); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws RemoveException {} - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipHomeLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipHomeLocal.java deleted file mode 100644 index 80028c831f..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipHomeLocal.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.titan.ship; - -import javax.ejb.CreateException; -import javax.ejb.FinderException; -import java.util.Collection; - -// Ship EJB's local home interface -public interface ShipHomeLocal extends javax.ejb.EJBLocalHome { - - public ShipLocal create(Integer primaryKey, String name, double tonnage) - throws javax.ejb.CreateException; - - public ShipLocal findByPrimaryKey(Object primaryKey) - throws javax.ejb.FinderException; - - public Collection findAllShips() - throws FinderException; - - public Collection findByTonnage(Double tonnage) - throws javax.ejb.FinderException; - - public Collection findByTonnage(Double tonnage1, Double tonnage2) - throws javax.ejb.FinderException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipLocal.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipLocal.java deleted file mode 100644 index 539b05b1d3..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/ship/ShipLocal.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.titan.ship; - -// Ship EJB's local interface -public interface ShipLocal extends javax.ejb.EJBLocalObject { - - public Integer getId(); - public void setId(Integer id); - public String getName(); - public void setName(String name); - public double getTonnage(); - public void setTonnage(double tonnage); - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentBean.java deleted file mode 100644 index e33e41900f..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentBean.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.titan.travelagent; - -import com.titan.cabin.CabinRemote; -import com.titan.cabin.CabinHomeRemote; -import java.rmi.RemoteException; -import javax.naming.InitialContext; -import javax.naming.Context; -import javax.ejb.EJBException; -import java.util.Properties; -import java.util.Vector; - -public class RTravelAgentBean implements javax.ejb.SessionBean { - - public void ejbCreate() throws javax.ejb.CreateException { - // Do nothing. - } - - public String [] listCabins(int shipID, int bedCount) { - - try { - - javax.naming.Context jndiContext = new InitialContext(); - Object obj = - jndiContext.lookup("java:comp/env/ejb/CabinHomeRemote"); - - - CabinHomeRemote home = (CabinHomeRemote) - javax.rmi.PortableRemoteObject.narrow(obj,CabinHomeRemote.class); - - Vector vect = new Vector(); - for (int i = 1; ; i++) { - Integer pk = new Integer(i); - CabinRemote cabin = null; - try { - cabin = home.findByPrimaryKey(pk); - } catch(javax.ejb.FinderException fe) { - System.out.println(">>>> Caught exception: "+fe.getMessage()+" for pk="+i); - break; - } - - // Check to see if the bed count and ship ID match - if (cabin != null && - cabin.getShipId() == shipID && - cabin.getBedCount() == bedCount) { - String details = i+","+cabin.getName()+","+cabin.getDeckLevel(); - vect.addElement(details); - } - } - - String [] list = new String[vect.size()]; - vect.copyInto(list); - return list; - - } catch(Exception e) { - throw new EJBException(e); - } - } - - public void ejbRemove() {} - public void ejbActivate(){} - public void ejbPassivate(){} - public void setSessionContext(javax.ejb.SessionContext cntx){} -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentHomeRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentHomeRemote.java deleted file mode 100644 index 398027d8bf..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentHomeRemote.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.titan.travelagent; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; - -public interface RTravelAgentHomeRemote extends javax.ejb.EJBHome { - - public RTravelAgentRemote create() - throws RemoteException, CreateException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentRemote.java deleted file mode 100644 index d374852dce..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/RTravelAgentRemote.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.titan.travelagent; - -import java.rmi.RemoteException; -import javax.ejb.FinderException; - -public interface RTravelAgentRemote extends javax.ejb.EJBObject { - - // String elements follow the format "id, name, deck level" - public String [] listCabins(int shipID, int bedCount) - throws RemoteException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentBean.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentBean.java deleted file mode 100644 index 429d50148b..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentBean.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.titan.travelagent; - -import com.titan.cabin.CabinLocal; -import com.titan.cabin.CabinHomeLocal; -import java.rmi.RemoteException; -import javax.naming.InitialContext; -import javax.naming.Context; -import javax.ejb.EJBException; -import java.util.Properties; -import java.util.Vector; - -public class TravelAgentBean implements javax.ejb.SessionBean { - - public void ejbCreate() throws javax.ejb.CreateException { - // Do nothing. - } - - public String [] listCabins(int shipID, int bedCount) { - - try { - - javax.naming.Context jndiContext = new InitialContext(); - Object obj = - jndiContext.lookup("java:comp/env/ejb/CabinHomeLocal"); - - - CabinHomeLocal home = (CabinHomeLocal) - javax.rmi.PortableRemoteObject.narrow(obj,CabinHomeLocal.class); - - Vector vect = new Vector(); - for (int i = 1; ; i++) { - Integer pk = new Integer(i); - CabinLocal cabin = null; - try { - cabin = home.findByPrimaryKey(pk); - } catch(javax.ejb.FinderException fe) { - System.out.println(">>>> Caught exception: "+fe.getMessage()+" for pk="+i); - break; - } - - // Check to see if the bed count and ship ID match - if (cabin != null && - // cabin.getShipId() == shipID && //getShipId only exist in Remote interface - cabin.getBedCount() == bedCount) { - String details = i+","+cabin.getName()+","+cabin.getDeckLevel(); - vect.addElement(details); - } - } - - String [] list = new String[vect.size()]; - vect.copyInto(list); - return list; - - } catch(Exception e) { - throw new EJBException(e); - } - } - - public void ejbRemove() {} - public void ejbActivate(){} - public void ejbPassivate(){} - public void setSessionContext(javax.ejb.SessionContext cntx){} -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentHomeRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentHomeRemote.java deleted file mode 100644 index 9ff3a8a764..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentHomeRemote.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.titan.travelagent; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; - -public interface TravelAgentHomeRemote extends javax.ejb.EJBHome { - - public TravelAgentRemote create() - throws RemoteException, CreateException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentRemote.java b/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentRemote.java deleted file mode 100644 index 4b41e145c3..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/com/titan/travelagent/TravelAgentRemote.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.titan.travelagent; - -import java.rmi.RemoteException; -import javax.ejb.FinderException; - -public interface TravelAgentRemote extends javax.ejb.EJBObject { - - // String elements follow the format "id, name, deck level" - public String [] listCabins(int shipID, int bedCount) - throws RemoteException; - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest.java b/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest.java deleted file mode 100644 index 0efa9b1d8c..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest.java +++ /dev/null @@ -1,410 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Calendar; -import java.util.Vector; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.titan.address.AddressHomeLocal; -import com.titan.address.AddressLocal; -import com.titan.customer.CreditCardHomeLocal; -import com.titan.customer.CreditCardLocal; -import com.titan.customer.CustomerHomeLocal; -import com.titan.customer.CustomerLocal; -import com.titan.customer.Name; -import com.titan.phone.PhoneLocal; - - - -/** - * This servlet is used to test O'Reilly examples - * @author JOnAS team - */ -public class ServletTest extends HttpServlet { - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request - * the client has made of the servlet - * @param response an HttpServletResponse object that contains the - * response the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - boolean ok = true; - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - out.println(""); - out.println(""); - out.println(""); - out.println("O'Reilly Examples"); - out.println(""); - out.println(""); - out.println(""); - out.println("

    Examples 1:1 Relationships

    "); - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - out.println("

    ERROR: Cannot get initial context for JNDI: " + e + "

    "); - return; - } - - out.println("Back to Menu"); - - - out.println("

    Example showing CreditCard/Customer relationship

    "); - - out.println("

    (ie Setting reference in a one-to-one bidirectional relationship)

    "); - - // Connecting to CustomerHomeLocal and CreditCardHomeLocal thru JNDI - CustomerHomeLocal customerhome = null; - CreditCardHomeLocal cardhome = null; - AddressHomeLocal addresshome = null; - - try { - customerhome = (CustomerHomeLocal) - initialContext.lookup("java:comp/env/ejb/CustomerHomeLocal"); - cardhome = (CreditCardHomeLocal) - initialContext.lookup("java:comp/env/ejb/CreditCardHomeLocal"); - addresshome = (AddressHomeLocal) - initialContext.lookup("java:comp/env/ejb/AddressHomeLocal"); - } catch (Exception e) { - out.println("

    ERROR: Cannot lookup java:comp/env/ejb/XXHomeLocal: " - + e + "

    "); - return; - } - - out.println("

    Creating Customer 'Smith'.

    "); - Integer primaryKey = new Integer(71); - CustomerLocal customer = null; - try { - customer = customerhome.create(primaryKey); - } catch (javax.ejb.CreateException ex) { - out.println("

    Cannot create customer: " - + ex + "

    "); - return; - } - customer.setName(new Name("Smith", "John")); - - out.println("

    Creating CreditCard.

    "); - // set Credit Card info - Calendar now = Calendar.getInstance(); - CreditCardLocal card = null; - try { - card = cardhome.create(now.getTime(), "370000000000001", "John Smith", "O'Reilly"); - } catch (javax.ejb.CreateException ex) { - out.println("

    ERROR: Cannot create creditcard : " + ex + "

    "); - return; - } - - out.println("

    Linking CreditCard and Customer.

    "); - customer.setCreditCard(card); - - out.println("

    Testing both directions on relationship:

    "); - String cardname = customer.getCreditCard().getNameOnCard(); - out.println("customer.getCreditCard().getNameOnCard() = '" + cardname + "'
    "); - Name name = card.getCustomer().getName(); - String custfullname = name.getFirstName() + " " + name.getLastName(); - out.println("card.getCustomer().getName() = '" + custfullname + "'
    "); - if (!cardname.equals(custfullname)) { - out.println("

    ERROR: The name must be the same

    "); - ok = false; - } - out.println("

    Content of Tables:

    "); - try { - listCustomers(out, customerhome); - listCreditcards(out, cardhome); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - } - - out.println("

    Unlink the beans using CreditCard, test Customer side:

    "); - card.setCustomer(null); - CreditCardLocal newcardref = customer.getCreditCard(); - if (newcardref == null) { - out.print("

    Card is properly unlinked from customer bean

    "); - } else { - out.print("

    ERROR: Whoops, customer still thinks it has a card !

    "); - ok = false; - } - // relink to avoid side effect on further test - card.setCustomer(customer); - - - out.println("

    Example Showing Customer/Address Relationship

    "); - out.println("

    (ie Setting reference in a one-to-one unidirectional relationship)

    "); - - // Find Customer 71 - primaryKey = new Integer(71); - try { - customer = customerhome.findByPrimaryKey(primaryKey); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - - AddressLocal addr = customer.getHomeAddress(); - if (addr == null) { - out.println("

    Address reference is NULL, Creating one and setting in Customer:

    "); - try { - addr = addresshome.createAddress("333 North Washington", "Minneapolis", "MN", "55401"); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - customer.setHomeAddress(addr); - } - out.println("

    Address Info: " - + addr.getStreet() + ", " - + addr.getCity() + ", " - + addr.getState() + ", " - + addr.getZip() + "

    "); - // Modifying Address - - out.println("

    Modifying Address through address reference:

    "); - addr.setStreet("445 East Lake Street"); - addr.setCity("Wayzata"); - addr.setState("MN"); - addr.setZip("55432"); - out.println("

    Address Info: " - + addr.getStreet() + ", " - + addr.getCity() + ", " - + addr.getState() + ", " - + addr.getZip() + "

    "); - - out.print("

    Creating New Address and calling setHomeAddress():

    "); - AddressLocal addrold = addr; - try { - addr = addresshome.createAddress("700 Main Street", "St. Paul", "MN", "55302"); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - out.println("

    Address Info: " - + addr.getStreet() + ", " - + addr.getCity() + ", " - + addr.getState() + ", " - + addr.getZip() + "

    "); - customer.setHomeAddress(addr); - - // Note: Original Address remains in database, orphaned by setHomeAddress call.. - - - out.print("

    Retrieving Address reference from Customer via getHomeAddress():

    "); - addr = customer.getHomeAddress(); - out.print("

    Address Info: " - + addr.getStreet() + ", " - + addr.getCity() + ", " - + addr.getState() + ", " - + addr.getZip() + "

    "); - - out.print("

    Content of Tables:

    "); - try { - listCustomers(out, customerhome); - listAddress(out, addresshome); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - return; - } - - - out.println("

    Example Showing Customer/Phone Relationship

    "); - - // Display current phone numbers and types - out.println("

    Starting content of phone list:

    "); - - Vector vv = customer.getPhoneList(); - listPhones(out, vv); - - // add a new phone number - out.println("

    Adding a new type '1' phone number to Customer 'John Smith'.

    "); - try { - customer.addPhoneNumber("612-555-1212", (byte) 1); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - - out.println("

    New content of phone list for customer 'John Smith':

    "); - vv = customer.getPhoneList(); - listPhones(out, vv); - - // add a new phone number - out.println("

    Adding a new type '2' phone number to Customer 'John Smith'.

    "); - try { - customer.addPhoneNumber("800-333-3333", (byte) 2); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - out.println("

    New content of phone list for customer 'John Smith':

    "); - vv = customer.getPhoneList(); - listPhones(out, vv); - - // update a phone number - out.println("

    Updating type '1' phone numbers.

    "); - try { - customer.updatePhoneNumber("763-555-1212", (byte) 1); - } catch (Exception e) { - out.println("

    ERROR: Exception : " + e + "

    "); - return; - } - - out.println("

    New content of phone list for customer 'John Smith':

    "); - vv = customer.getPhoneList(); - listPhones(out, vv); - - // delete a phone number - out.print("

    Removing type '1' phone numbers from this Customer.

    "); - customer.removePhoneNumber((byte) 1); - - out.println("

    Final content of phone list:

    "); - vv = customer.getPhoneList(); - listPhones(out, vv); - // Note that the phone is still in the database, - // but it is no longer related to this customer bean - - // Remove newly created beans for clean - out.println("

    Remove newly created beans for cleaning.

    "); - try { - customer.remove(); - addrold.remove(); - } catch (Exception e) { - out.println("

    Exception : " + e + "

    "); - return; - } - - if (ok) { - out.println("

    Servlet is OK.

    "); - } - - out.println("Back to Menu"); - out.println(""); - out.println(""); - } - - private void listCustomers (PrintWriter out, CustomerHomeLocal chl) throws Exception { - out.println("

    Customers Table Content:

    "); - out.println("
      "); - java.util.Collection clc = chl.findAllCustomers(); - if (clc == null) { - out.println("
    • Customers table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CustomerLocal cl = (CustomerLocal) iterator.next(); - String name = cl.getName().getLastName(); - String number = cl.getCreditCard().getNumber(); - out.print("
    • customerLastName = '" + name + "', creditCardNumber = '" + number); - if (cl.getHomeAddress() != null) { - String city = cl.getHomeAddress().getCity(); - out.print("', city = '" + city); - } - out.println("'
    • "); - java.util.Collection phoneNumbers = cl.getPhoneNumbers(); - java.util.Iterator phiterator = phoneNumbers.iterator(); - out.println("
        "); - while (phiterator.hasNext()) { - PhoneLocal phone = (PhoneLocal) phiterator.next(); - out.println("
      • phoneType = '" + phone.getType() - + "', phoneNumber = '" + phone.getNumber() + "'
      • "); - } - out.println("
      "); - - } - } - out.println("
    "); - } - - private void listCreditcards (PrintWriter out, CreditCardHomeLocal cchl) throws Exception { - out.println("

    Creditcards Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllCreditCards(); - if (clc == null) { - out.println("
    • CreditCards table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CreditCardLocal ccl = (CreditCardLocal) iterator.next(); - String number = ccl.getNumber(); - String name = ccl.getNameOnCard(); - out.println("
    • creditCardNumber = '" + number - + "', nameOnCard = '" + name + "'
    • "); - } - } - out.println("
    "); - } - - private void listAddress (PrintWriter out, AddressHomeLocal cchl) throws Exception { - out.println("

    Addresses Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllAddress(); - if (clc == null) { - out.println("
    • Addresses table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - AddressLocal al = (AddressLocal) iterator.next(); - String city = al.getCity(); - String street = al.getStreet(); - out.println("
    • city = '" + city + "', street = '" + street + "'
    • "); - } - } - out.println("
    "); - } - - private void listPhones(PrintWriter out, Vector vv) { - out.println("
      "); - if (vv.size() == 0) { - out.println("
    • phones list is empty
    • "); - } else { - for (int jj = 0; jj < vv.size(); jj++) { - String ss = (String) (vv.get(jj)); - out.println("
    • " + ss + "
    • "); - } - } - out.println("
    "); - } - -} diff --git a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest2.java b/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest2.java deleted file mode 100644 index c6d8f96452..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest2.java +++ /dev/null @@ -1,857 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.transaction.UserTransaction; - -import com.titan.cabin.CabinHomeLocal; -import com.titan.cabin.CabinLocal; -import com.titan.cruise.CruiseHomeLocal; -import com.titan.cruise.CruiseLocal; -import com.titan.customer.CustomerHomeLocal; -import com.titan.customer.CustomerLocal; -import com.titan.customer.Name; -import com.titan.reservation.ReservationHomeLocal; -import com.titan.reservation.ReservationLocal; -import com.titan.ship.ShipHomeLocal; -import com.titan.ship.ShipLocal; - -/** - * This servlet is used to test O'Reilly examples - * @author JOnAS team - */ -public class ServletTest2 extends HttpServlet { - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - - boolean ok = true; - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - out.println(""); - out.println("O'Reilly Examples (Suite)"); - out.println(""); - out.println(""); - out.println(""); - out.println("

    Example Showing Cruise/Ship and Cruise/Reservation Relationships

    "); - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - out.println("

    ERROR: Cannot get initial context for JNDI: " + e + "

    "); - return; - } - - // Connecting to ShipHomeLocal thru JNDI - ShipHomeLocal shiphome = null; - CruiseHomeLocal cruisehome = null; - ReservationHomeLocal reservationhome = null; - CustomerHomeLocal customerhome = null; - CabinHomeLocal cabinhome = null; - UserTransaction tran = null; - try { - shiphome = (ShipHomeLocal) initialContext.lookup("java:comp/env/ejb/ShipHomeLocal"); - cruisehome = (CruiseHomeLocal) initialContext.lookup("java:comp/env/ejb/CruiseHomeLocal"); - reservationhome = (ReservationHomeLocal) initialContext.lookup("java:comp/env/ejb/ReservationHomeLocal"); - customerhome = (CustomerHomeLocal) initialContext.lookup("java:comp/env/ejb/CustomerHomeLocal"); - cabinhome = (CabinHomeLocal) initialContext.lookup("java:comp/env/ejb/CabinHomeLocal"); - tran = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - } catch (Exception e) { - out.println("

    ERROR: Cannot lookup java:comp/env/ejb/XXHomeLocal: " + e + "

    "); - return; - - } - - out.println("Back to Menu"); - - out.println("

    Example Showing Cruise/Ship Relationship (Fig 7-12)

    "); - out.println("

    (ie Sharing a bean reference in a Many-to-One Relationship)

    "); - - out.println("

    Creating Ships

    "); - // Create some Ship beans - manually set key - ShipLocal shipA = null; - ShipLocal shipB = null; - try { - shipA = shiphome.create(new Integer(1001), "Ship A", 30000.0); - shipB = shiphome.create(new Integer(1002), "Ship B", 40000.0); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - out.println("
      "); - out.println("
    • id = '" + shipA.getId() + "', name = '" + shipA.getName() + "', tonnage = '" - + shipA.getTonnage() + "'
    • "); - out.println("
    • id = '" + shipB.getId() + "', name=" + shipB.getName() + "', tonnage = '" + shipB.getTonnage() - + "
    • "); - out.println("
    "); - - out.println("

    Creating Cruises

    "); - // Create some Cruise beans - automatic key generation by CMP engine - // Link 1-3 to Ship A, 4-6 to Ship B - CruiseLocal[] cruises = new CruiseLocal[7]; - try { - cruises[1] = cruisehome.create("Cruise 1", shipA); - cruises[2] = cruisehome.create("Cruise 2", shipA); - cruises[3] = cruisehome.create("Cruise 3", shipA); - cruises[4] = cruisehome.create("Cruise 4", shipB); - cruises[5] = cruisehome.create("Cruise 5", shipB); - cruises[6] = cruisehome.create("Cruise 6", shipB); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - out.println("
      "); - for (int jj = 1; jj < 7; jj++) { - CruiseLocal cc = cruises[jj]; - out.println("
    • '" + cc.getName() + "' is using '" + cc.getShip().getName() + "'
    • "); - } - out.println("
    "); - - out.print("

    Changing 'Cruise 1' to use same ship as 'Cruise 4'

    "); - ShipLocal newship = cruises[4].getShip(); - cruises[1].setShip(newship); - out.println("
      "); - for (int jj = 1; jj < 7; jj++) { - CruiseLocal cc = cruises[jj]; - out.println("
    • '" + cc.getName() + "' is using '" + cc.getShip().getName() + "'
    • "); - } - out.println("
    "); - - out.println("

    Content of Tables

    "); - try { - listCruises(out, cruisehome); - listShips(out, shiphome); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - } - - out.println("

    Example Showing Cruise/Reservation Relationship Using set() (Fig 7-14)

    "); - out - .println("

    (ie Sharing an entire collection in a One-to-Many bidirectional Relationship Using set() )

    "); - out.println("

    Creating some Cruise beans

    "); - // Create some Cruise beans - leave ship reference empty since we don't - // care - CruiseLocal cruiseA = null; - CruiseLocal cruiseB = null; - try { - cruiseA = cruisehome.create("Cruise A", null); - cruiseB = cruisehome.create("Cruise B", null); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - } - out.println("
      "); - out.print("
    • name = '" + cruiseA.getName() + "'
    • "); - out.print("
    • name = '" + cruiseB.getName() + "'
    • "); - out.println("
    "); - - out.print("

    Creating Reservations

    "); - // Create some Reservation beans - automatic key generation by CMP - // engine - // Link 1-3 to Cruise A, 4-6 to Cruise B - ReservationLocal reservations[] = new ReservationLocal[7]; - Calendar date = Calendar.getInstance(); - date.set(2002, 10, 1); - // Leave the Customers collection null in the create() call, - // we don't care about it right now - try { - reservations[1] = reservationhome.create(cruiseA, null); - reservations[1].setDate(date.getTime()); - reservations[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[2] = reservationhome.create(cruiseA, null); - reservations[2].setDate(date.getTime()); - reservations[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[3] = reservationhome.create(cruiseA, null); - reservations[3].setDate(date.getTime()); - reservations[3].setAmountPaid(6000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[4] = reservationhome.create(cruiseB, null); - reservations[4].setDate(date.getTime()); - reservations[4].setAmountPaid(7000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[5] = reservationhome.create(cruiseB, null); - reservations[5].setDate(date.getTime()); - reservations[5].setAmountPaid(8000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[6] = reservationhome.create(cruiseB, null); - reservations[6].setDate(date.getTime()); - reservations[6].setAmountPaid(9000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - out.println("
      "); - DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); - for (int jj = 1; jj < 7; jj++) { - ReservationLocal rr = reservations[jj]; - CruiseLocal thiscruise = rr.getCruise(); - String cruisename = (thiscruise != null ? thiscruise.getName() : "No Cruise!"); - out.println("
    • reservationDate = '" + df.format(rr.getDate()) + "', amountPaid = '" + rr.getAmountPaid() - + "', for '" + cruisename + "'
    • "); - } - out.println("
    "); - - out.println("

    Testing CruiseB.setReservations(CruiseA.getReservations())

    "); - // show the effect of a simple "setReservations" on a cruise - Collection areservations = cruiseA.getReservations(); - cruiseB.setReservations(areservations); - // Report information on the 6 reservations - String[] cruisename = new String[7]; - out.println("
      "); - for (int jj = 1; jj < 7; jj++) { - ReservationLocal rr = reservations[jj]; - CruiseLocal thiscruise = rr.getCruise(); - cruisename[jj] = (thiscruise != null ? thiscruise.getName() : "No Cruise!"); - out.print("
    • reservationDate = '" + df.format(rr.getDate()) + "', amount paid = '" + rr.getAmountPaid() - + "', for '" + cruisename[jj] + "'
    • "); - } - out.println("
    "); - if (!cruisename[4].equals("No Cruise!") || !cruisename[5].equals("No Cruise!") - || !cruisename[6].equals("No Cruise!")) { - ok = false; - } - - out.print("

    Content of Tables

    "); - try { - listCruises(out, cruisehome); - listReservations(out, reservationhome); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - return; - } - - out.println("

    Example Showing Cruise/Reservation Relationship Using addAll(..) (Fig 7-15)

    "); - out.print("

    (ie Using Collection.addAll() in a One-to-Many bidirectional relationship)

    "); - // Show how to combine reservations using Collection methods - // Operations such as this must be done in a transaction, usually done - // within a - // stateless session EJB using declarative transactions rather than - // manually like this - - date.set(2002, 10, 1); - // Remove previous reservation - for (int jj = 1; jj < 7; jj++) { - try { - reservations[jj].remove(); - } catch (Exception ex) { - out.println("

    ERROR: exception caught = " + ex + "

    "); - } - } - // Reinit the reservation as before the previous test - try { - reservations[1] = reservationhome.create(cruiseA, null); - reservations[1].setDate(date.getTime()); - reservations[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[2] = reservationhome.create(cruiseA, null); - reservations[2].setDate(date.getTime()); - reservations[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[3] = reservationhome.create(cruiseA, null); - reservations[3].setDate(date.getTime()); - reservations[3].setAmountPaid(6000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[4] = reservationhome.create(cruiseB, null); - reservations[4].setDate(date.getTime()); - reservations[4].setAmountPaid(7000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[5] = reservationhome.create(cruiseB, null); - reservations[5].setDate(date.getTime()); - reservations[5].setAmountPaid(8000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[6] = reservationhome.create(cruiseB, null); - reservations[6].setDate(date.getTime()); - reservations[6].setAmountPaid(9000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - - Collection breservations = null; - try { - tran.begin(); - areservations = cruiseA.getReservations(); - breservations = cruiseB.getReservations(); - breservations.addAll(areservations); - tran.commit(); - } catch (Exception e) { - e.printStackTrace(); - try { - tran.rollback(); - } catch (Exception ex) { - ex.printStackTrace(); - return; - } - return; - } - // Report information on the 6 reservations - out.println("

      "); - for (int jj = 1; jj < 7; jj++) { - ReservationLocal rr = reservations[jj]; - CruiseLocal thiscruise = rr.getCruise(); - cruisename[jj] = (thiscruise != null ? thiscruise.getName() : "No Cruise!"); - out.print("
    • reservationDate = '" + df.format(rr.getDate()) + "', amount paid = '" + rr.getAmountPaid() - + "', for '" + cruisename[jj] + "'
    • "); - } - out.println("
    "); - - out.print("

    Contents of Tables

    "); - try { - listCruises(out, cruisehome); - listReservations(out, reservationhome); - } catch (Exception e) { - out.println("

    ERROR: exception caught = " + e + "

    "); - return; - } - - out.println("

    Example Showing Reservation/Customer Relationships (Fig 7-17)

    "); - out.print("

    (ie Using Collection.addAll() in a Many-to-Many bidirectional relationship)

    "); - - out.println("

    Using 'ShipA' and 'CruiseA'

    "); - cruiseA.setShip(shipA); - out.println("
      "); - out.println("
    • cruise.getName() = '" + cruiseA.getName() + "'
    • "); - out.println("
    • ship.getName() = '" + shipA.getName() + "'
    • "); - out.println("
    • cruise.getShip().getName() = '" + cruiseA.getShip().getName() + "'
    • "); - out.println("
    "); - - out.println("

    Creating two sets of customers, one with 1-3, and one with 4-6

    "); - // create two sets of customers, one with customers 1-3 and one with 4-6 - Set lowcustomers = new HashSet(); - Set highcustomers = new HashSet(); - CustomerLocal cust = null; - out.println("
      "); - for (int kk = 1; kk < 7; kk++) { - try { - cust = customerhome.create(new Integer(kk)); - } catch (Exception e) { - out.println("

      ERROR: exception caught = " + e + "

      "); - } - cust.setName(new Name("Customer " + kk, "mike")); - if (kk <= 3) { - lowcustomers.add(cust); - } else { - highcustomers.add(cust); - } - out.print("
    • customer '" + cust.getName().getLastName() + "' created
    • "); - } - out.println("
    "); - // Remove previous reservation - for (int jj = 1; jj < 7; jj++) { - try { - reservations[jj].remove(); - } catch (Exception ex) { - out.println("

    ERROR: exception caught = " + ex + "

    "); - } - } - - out.print("

    Creating Reservations '1' and '2', each with 3 customers

    "); - try { - reservations[1] = reservationhome.create(cruiseA, lowcustomers); - reservations[1].setDate(date.getTime()); - reservations[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations[2] = reservationhome.create(cruiseA, highcustomers); - reservations[2].setDate(date.getTime()); - reservations[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - // report information on the reservations - reportReservations(out, reservations, 2, tran); - - out.print("

    Performing customers_a.addAll(customers_b) test

    "); - // Finally we can perform the test shown in Figure 7-17 - // Operations such as this must be done in a transaction, usually done - // within a - // stateless session EJB using declarative transactions rather than - // manually like this - try { - tran.begin(); - Set customers_a = reservations[1].getCustomers(); - Set customers_b = reservations[2].getCustomers(); - customers_a.addAll(customers_b); - tran.commit(); - } catch (Exception e) { - e.printStackTrace(); - try { - tran.rollback(); - } catch (Exception ex) { - out.println("

    ERROR: Exception caught " + ex + "

    "); - return; - } - } - // report information on the reservations - reportReservations(out, reservations, 2, tran); - - out.print("

    Sharing an entire collection in a Many-to-Many bidirectional relationship (Fig 7-18)

    "); - out.println("

    Creating four sets of customers 1-3, 2-4, 3-5, 4-6

    "); - // create four sets of customers, 1-3, 2-4, 3-5, 4-6 - Set customers13 = new HashSet(); - Set customers24 = new HashSet(); - Set customers35 = new HashSet(); - Set customers46 = new HashSet(); - out.println("
      "); - for (int kk = 1; kk < 7; kk++) { - try { - cust = customerhome.create(new Integer(kk + 500)); - cust.setName(new Name("Customer_1 " + kk, "bill")); - } catch (Exception e) { - out.println("

      ERROR: exception caught = " + e + "

    "); - return; - } - if (kk <= 3) { - customers13.add(cust); - } - if (kk >= 2 && kk <= 4) { - customers24.add(cust); - } - if (kk >= 3 && kk <= 5) { - customers35.add(cust); - } - if (kk >= 4) { - customers46.add(cust); - } - out.print("
  • customer '" + cust.getName().getLastName() + "' created
  • "); - } - out.println(""); - - out.print("

    Creating Reservations 1-4 using three customers each

    "); - ReservationLocal reservations1[] = new ReservationLocal[5]; - try { - reservations1[1] = reservationhome.create(cruiseA, customers13); - reservations1[1].setDate(date.getTime()); - reservations1[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations1[2] = reservationhome.create(cruiseA, customers24); - reservations1[2].setDate(date.getTime()); - reservations1[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations1[3] = reservationhome.create(cruiseA, customers35); - reservations1[3].setDate(date.getTime()); - reservations1[3].setAmountPaid(6000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations1[4] = reservationhome.create(cruiseA, customers46); - reservations1[4].setDate(date.getTime()); - reservations1[4].setAmountPaid(7000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - reportReservations(out, reservations1, 4, tran); - - out.print("

    Performing reservationD.setCustomers(customersA) (Fig 7-18)

    "); - try { - tran.begin(); - Set customers_a = reservations1[1].getCustomers(); - reservations1[4].setCustomers(customers_a); - tran.commit(); - } catch (Exception e) { - e.printStackTrace(); - try { - tran.rollback(); - } catch (Exception ex) { - out.println("

    ERROR: Exception caught " + ex + "

    "); - return; - } - } - reportReservations(out, reservations1, 4, tran); - - out.print("

    Example Showing Reservation/Cabin Relationships (Fig 7-20)

    "); - out.print("

    (ie Removing beans in a Many-to-Many unidirectional relationship)

    "); - out.print("

    Creating Cabins four sets of cabins, 1-3, 2-4, 3-5, 4-6

    "); - // create four sets of cabins, 1-3, 2-4, 3-5, 4-6 - Set cabins13 = new HashSet(); - Set cabins24 = new HashSet(); - Set cabins35 = new HashSet(); - Set cabins46 = new HashSet(); - CabinLocal cabin = null; - out.println("
      "); - for (int kk = 1; kk < 7; kk++) { - try { - cabin = cabinhome.create(new Integer(kk)); - } catch (Exception e) { - out.println("

      ERROR: exception caught = " + e + "

    "); - } - cabin.setName("Cabin " + kk); - if (kk <= 3) { - cabins13.add(cabin); - } - if (kk >= 2 && kk <= 4) { - cabins24.add(cabin); - } - if (kk >= 3 && kk <= 5) { - cabins35.add(cabin); - } - if (kk >= 4) { - cabins46.add(cabin); - } - out.print("
  • cabin '" + cabin.getName() + "' created
  • "); - } - out.println(""); - - out.print("

    Creating Reservations 1-4 using three cabins each

    "); - ReservationLocal reservations2[] = new ReservationLocal[5]; - // leave Customers collection null, we dont care about it for this - // example - try { - reservations2[1] = reservationhome.create(cruiseA, null); - reservations2[1].setCabins(cabins13); - reservations2[1].setDate(date.getTime()); - reservations2[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations2[2] = reservationhome.create(cruiseA, null); - reservations2[2].setCabins(cabins24); - reservations2[2].setDate(date.getTime()); - reservations2[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations2[3] = reservationhome.create(cruiseA, null); - reservations2[3].setCabins(cabins35); - reservations2[3].setDate(date.getTime()); - reservations2[3].setAmountPaid(6000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations2[4] = reservationhome.create(cruiseA, null); - reservations2[4].setCabins(cabins46); - reservations2[4].setDate(date.getTime()); - reservations2[4].setAmountPaid(7000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - reportReservations(out, reservations2, 4, tran); - - out.print("

    Performing cabins_a collection iterator.remove() test

    "); - // Finally we can perform the test shown in Figure 7-20 - try { - tran.begin(); - Set cabins_a = reservations2[1].getCabins(); - Iterator iterator = cabins_a.iterator(); - out.print("
      "); - while (iterator.hasNext()) { - CabinLocal cc = (CabinLocal) iterator.next(); - out.print("
    • Removing '" + cc.getName() + "' from 'cabins_a'" + "
    • "); - iterator.remove(); - } - out.print("
    "); - tran.commit(); - } catch (Exception e) { - try { - tran.rollback(); - } catch (Exception ex) { - out.println("

    ERROR: Exception caught " + ex + "

    "); - return; - } - } - reportReservations(out, reservations2, 4, tran); - - out.print("

    Example Showing Reservation/Cabin Relationships

    "); - - out.print("

    Creating Cabins in ShipA

    "); - CabinLocal cabins[] = new CabinLocal[4]; - try { - cabins[1] = cabinhome.create(new Integer(10)); - cabins[1].setShip(shipA); - cabins[1].setDeckLevel(1); - cabins[1].setName("Minnesota Suite"); - cabins[1].setBedCount(2); - - cabins[2] = cabinhome.create(new Integer(11)); - cabins[2].setShip(shipA); - cabins[2].setDeckLevel(2); - cabins[2].setName("California Suite"); - cabins[2].setBedCount(2); - - cabins[3] = cabinhome.create(new Integer(12)); - cabins[3].setShip(shipA); - cabins[3].setDeckLevel(3); - cabins[3].setName("Missouri Suite"); - cabins[3].setBedCount(2); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - out.println("
      "); - for (int jj = 1; jj < 4; jj++) { - CabinLocal cc = cabins[jj]; - out.print("
    • cabin '" + cc.getName() + "' is on ship '" + cc.getShip().getName() + "'
    • "); - } - out.println("
    "); - - out.print("

    Creating Reservations

    "); - ReservationLocal reservations3[] = new ReservationLocal[3]; - try { - reservations3[1] = reservationhome.create(cruiseA, null); - reservations3[1].setDate(date.getTime()); - reservations3[1].setAmountPaid(4000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - - reservations3[2] = reservationhome.create(cruiseA, null); - reservations3[2].setDate(date.getTime()); - reservations3[2].setAmountPaid(5000.0); - date.add(Calendar.DAY_OF_MONTH, 7); - } catch (Exception e) { - out.println("

    ERROR: Exception caught " + e + "

    "); - return; - } - reportReservations(out, reservations3, 2, tran); - - out.print("

    Creating Links from Reservations to Cabins

    "); - Set cabins1 = new HashSet(2); - cabins1.add(cabins[1]); - cabins1.add(cabins[2]); - Set cabins2 = new HashSet(2); - cabins2.add(cabins[2]); - cabins2.add(cabins[3]); - reservations3[1].setCabins(cabins1); - reservations3[2].setCabins(cabins2); - reportReservations(out, reservations3, 2, tran); - - out.print("

    Testing reservation_b.setCabins(reservation_a.getCabins())

    "); - try { - tran.begin(); - Set cabins_a = reservations3[1].getCabins(); - reservations3[2].setCabins(cabins_a); - tran.commit(); - } catch (Exception e) { - try { - tran.rollback(); - } catch (Exception ex) { - out.println("

    ERROR: Exception caught " + ex + "

    "); - return; - } - } - reportReservations(out, reservations3, 2, tran); - - out.print("

    Cleaning all tables

    "); - try { - Collection clc = customerhome.findAllCustomers(); - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CustomerLocal cl = (CustomerLocal) iterator.next(); - cl.remove(); - } - clc = shiphome.findAllShips(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - ShipLocal sl = (ShipLocal) iterator.next(); - sl.remove(); - } - clc = cruisehome.findAllCruises(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - CruiseLocal cl = (CruiseLocal) iterator.next(); - cl.remove(); - } - - clc = reservationhome.findAllReservations(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - ReservationLocal rl = (ReservationLocal) iterator.next(); - rl.remove(); - } - clc = cabinhome.findAllCabins(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - CabinLocal cl = (CabinLocal) iterator.next(); - cl.remove(); - } - - } catch (Exception ex) { - out.println("

    ERROR: during cleaning exception caught = " + ex + "

    "); - } - if (ok) { - out.println("

    Servlet is OK.

    "); - } - out.println("Back to Menu"); - out.println(""); - out.println(""); - } - - private void listCruises(PrintWriter out, CruiseHomeLocal chl) throws Exception { - out.println("

    Cruises Table Content:

    "); - out.println("
      "); - java.util.Collection clc = chl.findAllCruises(); - if (clc == null) { - out.println("
    • Cruises table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CruiseLocal cl = (CruiseLocal) iterator.next(); - String cname = cl.getName(); - String sname = (cl.getShip() != null ? cl.getShip().getName() : "No Ship!"); - out.println("
    • cruiseName = '" + cname + "', shipName = '" + sname + "'
    • "); - - } - } - out.println("
    "); - } - - private void listShips(PrintWriter out, ShipHomeLocal cchl) throws Exception { - out.println("

    Ships Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllShips(); - if (clc == null) { - out.println("
    • Ships table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - ShipLocal ccl = (ShipLocal) iterator.next(); - double tonnage = ccl.getTonnage(); - String name = ccl.getName(); - out.println("
    • shipName = '" + name + "', tonnage = '" + tonnage + "'
    • "); - } - } - out.println("
    "); - } - - private void listReservations(PrintWriter out, ReservationHomeLocal cchl) throws Exception { - out.println("

    Reservations Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllReservations(); - if (clc == null) { - out.println("
    • Reservations table is empty
    • "); - out.println("
    "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - ReservationLocal ccl = (ReservationLocal) iterator.next(); - Date date = ccl.getDate(); - out.println("
  • reservation date = '" + date + "'
  • "); - } - out.println(""); - } - } - - private void reportReservations(PrintWriter out, ReservationLocal reservations[], int nb, UserTransaction tran) { - DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); - // report information on the reservations - out.println("
      "); - for (int jj = 1; jj < nb + 1; jj++) { - ReservationLocal rr = reservations[jj]; - CruiseLocal thiscruise = rr.getCruise(); - String cruisename = (thiscruise != null ? thiscruise.getName() : "No Cruise!"); - // Operations such as this must be done in a transaction, usually - // done within a - // stateless session EJB using declarative transactions rather than - // manually like this - String customerinfo = ""; - CustomerLocal cust = null; - String cabininfo = ""; - try { - tran.begin(); - Set customerset = rr.getCustomers(); - Iterator iterator = customerset.iterator(); - while (iterator.hasNext()) { - cust = (CustomerLocal) iterator.next(); - customerinfo += cust.getName().getLastName() + " "; - } - Set cabinset = rr.getCabins(); - iterator = cabinset.iterator(); - while (iterator.hasNext()) { - CabinLocal cabin = (CabinLocal) iterator.next(); - cabininfo += cabin.getName() + " "; - } - tran.commit(); - } catch (Exception e) { - e.printStackTrace(); - try { - tran.rollback(); - } catch (Exception ex) { - out.println("

      ERROR: Exception caught " + ex + "

      "); - return; - } - } - out.print("
    • reservationDate = '" + df.format(rr.getDate()) + "', amountPaid = '" + rr.getAmountPaid() - + "', for '" + cruisename + "' with :
    • "); - out.print("
        "); - if (!customerinfo.equals("")) { - out.print("
      • customers: " + customerinfo); - } - if (!cabininfo.equals("")) { - out.print("
      • cabins: " + cabininfo + "
      • "); - } - out.print("
      "); - } - out.println("
    "); - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest3.java b/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest3.java deleted file mode 100644 index 661cf4eae4..0000000000 --- a/jonas_tests/examples/base/examples/cmp2/src/servlets/ServletTest3.java +++ /dev/null @@ -1,777 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.Vector; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.titan.address.AddressHomeLocal; -import com.titan.address.AddressLocal; -import com.titan.cabin.CabinHomeLocal; -import com.titan.cabin.CabinLocal; -import com.titan.cruise.CruiseHomeLocal; -import com.titan.cruise.CruiseLocal; -import com.titan.customer.CreditCardHomeLocal; -import com.titan.customer.CreditCardLocal; -import com.titan.customer.CustomerHomeLocal; -import com.titan.customer.CustomerLocal; -import com.titan.customer.Name; -import com.titan.phone.PhoneHomeLocal; -import com.titan.reservation.ReservationHomeLocal; -import com.titan.reservation.ReservationLocal; -import com.titan.ship.ShipHomeLocal; -import com.titan.ship.ShipLocal; - -/** - * This servlet is used to test O'Reilly examples - * @author JOnAS team - */ -public class ServletTest3 extends HttpServlet { - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - - boolean ok = true; - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - out.println(""); - out.println(""); - out.println(""); - out.println("O'Reilly Examples"); - out.println(""); - out.println(""); - out.println(""); - out.println("

    EJB QL Examples from Chapter 8

    "); - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - out.print("

    ERROR: Cannot get initial context for JNDI: " + e + "

    "); - return; - } - - out.println("Back to Menu"); - - // Connecting to CustomerHomeLocal and CreditCardHomeLocal thru JNDI - CustomerHomeLocal customerhome = null; - CreditCardHomeLocal cardhome = null; - AddressHomeLocal addresshome = null; - ShipHomeLocal shiphome = null; - CruiseHomeLocal cruisehome = null; - ReservationHomeLocal reservationhome = null; - CabinHomeLocal cabinhome = null; - PhoneHomeLocal phonehome = null; - try { - customerhome = (CustomerHomeLocal) initialContext.lookup("java:comp/env/ejb/CustomerHomeLocal"); - cardhome = (CreditCardHomeLocal) initialContext.lookup("java:comp/env/ejb/CreditCardHomeLocal"); - addresshome = (AddressHomeLocal) initialContext.lookup("java:comp/env/ejb/AddressHomeLocal"); - shiphome = (ShipHomeLocal) initialContext.lookup("java:comp/env/ejb/ShipHomeLocal"); - cruisehome = (CruiseHomeLocal) initialContext.lookup("java:comp/env/ejb/CruiseHomeLocal"); - reservationhome = (ReservationHomeLocal) initialContext.lookup("java:comp/env/ejb/ReservationHomeLocal"); - cabinhome = (CabinHomeLocal) initialContext.lookup("java:comp/env/ejb/CabinHomeLocal"); - phonehome = (PhoneHomeLocal) initialContext.lookup("java:comp/env/ejb/PhoneHomeLocal"); - } catch (Exception e) { - out.println("

    ERROR: Cannot lookup java:comp/env/ejb/XXHomeLocal: " + e + "

    "); - return; - } - - String cities[] = new String[6]; - cities[0] = "Minneapolis"; - cities[1] = "St. Paul"; - cities[2] = "Rochester"; - cities[3] = "Winona"; - cities[4] = "Wayzata"; - cities[5] = "Eagan"; - - out.println("

    Example showing Sample EJB-QL

    "); - - out.print("

    Creating a Ship and Cruise

    "); - ShipLocal shipA = null; - CruiseLocal cruiseA = null; - try { - shipA = shiphome.create(new Integer(10772), "Ship A", 30000.0); - cruiseA = cruisehome.create("Cruise A", shipA); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - out.println("
      "); - out.println("
    • cruise.getName() = '" + cruiseA.getName() + "'
    • "); - out.println("
    • ship.getName() = '" + shipA.getName() + "'
    • "); - out.println("
    • cruise.getShip().getName() = '" + cruiseA.getShip().getName() + "'
    • "); - out.println("
    "); - - out.print("

    Creating Ship Beans with Various Tonnage Values

    "); - out.print("
      "); - for (int jj = 1; jj <= 10; jj++) { - try { - ShipLocal ship = shiphome.create(new Integer(jj), "Ship " + jj, 30000.0 + (10000.0 * jj)); - printShip(out, ship); - } catch (Exception ex) { - ok = false; - out.print("

      ERROR: Exception caught : " + ex + "

      "); - } - - } - out.print("
    "); - - out.print("

    Finding Ships with Exactly 100K Tonnage

    "); - out.print("

    SELECT OBJECT(s) FROM JE2_Ship AS s WHERE s.tonnage = ?1

    "); - Collection ships100k = null; - try { - ships100k = shiphome.findByTonnage(new Double(100000.0)); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - out.print("

    Number of ships = " + ships100k.size() + "
    Expected = 1 ships

    "); - if (ships100k.size() != 1) { - ok = false; - } - Iterator iterator = ships100k.iterator(); - out.print("
      "); - while (iterator.hasNext()) { - ShipLocal ship = (ShipLocal) (iterator.next()); - printShip(out, ship); - } - out.print("
    "); - - out.print("

    Finding Ships with Tonnage between 50K and 110K

    "); - out.print("

    SELECT OBJECT(s) FROM JE2_Ship AS s WHERE s.tonnage BETWEEN ?1 AND ?2

    "); - Collection ships50110k = null; - try { - ships50110k = shiphome.findByTonnage(new Double(50000.0), new Double(110000.0)); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - out.print("

    Number of ships = " + ships50110k.size() + "
    Expected = 7 ships

    "); - if (ships50110k.size() != 7) { - ok = false; - } - iterator = ships50110k.iterator(); - out.print("
      "); - while (iterator.hasNext()) { - ShipLocal ship = (ShipLocal) (iterator.next()); - printShip(out, ship); - } - out.print("
    "); - - // creating cruise for future use - cruiseA = null; - CruiseLocal cruiseB = null; - try { - ShipLocal ship1 = shiphome.findByPrimaryKey(new Integer(1)); - cruiseA = cruisehome.create("Alaska Cruise", ship1); - cruiseB = cruisehome.create("Bohemian Cruise", ship1); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - out.println("

    Creating Customers

    "); - for (int kk = 80; kk <= 99; kk++) { - CustomerLocal customer = null; - AddressLocal addr = null; - try { - customer = customerhome.create(new Integer(kk)); - customer.setName(new Name("Smith" + kk, "John")); - customer.addPhoneNumber("612-555-12" + kk, (byte) 1); - addr = addresshome.createAddress("10" + kk + " Elm Street", cities[(kk - 80) % 6], (kk % 2 == 0 ? "MN" - : "CA"), "5540" + (kk % 5 + 1)); - } catch (Exception e) { - ok = false; - out.println("

    ERROR: exception caught = " + e + "

    "); - } - customer.setHomeAddress(addr); - customer.setHasGoodCredit((kk % 4 == 0)); - //printCustomer(out, customer, addr); - } - - // Creating Customers 1-6, each with 2 reservations for 2 cabins - Calendar date = Calendar.getInstance(); - date.set(2002, 10, 1); - try { - - for (int kk = 201; kk < 207; kk++) { - Collection customers = new ArrayList(); - CustomerLocal cust = customerhome.create(new Integer(kk)); - cust.setName(new Name("Customer " + kk, "Mike")); - cust.setHasGoodCredit((kk % 2 == 0)); // odds are bums - AddressLocal addr = addresshome.createAddress("50" + kk + " Main Street", "Minneapolis", "MN", "5510" - + kk); - cust.setHomeAddress(addr); - //out.print("

  • Customer name= - // "+cust.getName().getLastName()+"
  • "); - customers.add(cust); // put this single customer in the - // collection - - //printCustomer(out, cust,addr); - - Collection reservations = new ArrayList(); - - for (int jj = 0; jj < 2; jj++) { - - ReservationLocal reservation = reservationhome.create(cruiseA, customers); - reservation.setDate(date.getTime()); - reservation.setAmountPaid(1000 * kk + 100 * jj + 2000); - date.add(Calendar.DAY_OF_MONTH, 7); - - Set cabins = new HashSet(); - CabinLocal cabin = cabinhome.create(new Integer(1000 + kk * 100 + jj)); - cabin.setDeckLevel(kk - 200); - cabin.setName("Cabin " + kk + "0" + jj + "1"); - - cabins.add(cabin); - cabin = cabinhome.create(new Integer(1000 + kk * 100 + 10 + jj)); - cabin.setDeckLevel(kk - 200); - cabin.setName("Cabin " + kk + "0" + jj + "2"); - - cabins.add(cabin); - - reservation.setCabins(cabins); // this reservation has 2 - // cabins - //out.print("
      "); - //printReservation(out, reservation); - //out.print("
    "); - } - } - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - String fnames[] = new String[5]; - fnames[0] = "John"; - fnames[1] = "Paul"; - fnames[2] = "Ringo"; - fnames[3] = "Joe"; - fnames[4] = "Roger"; - - String[] lnames = new String[3]; - lnames[0] = "Smith"; - lnames[1] = "Johnson"; - lnames[2] = "Star"; - - // Creating Customers 50-69 - try { - for (int kk = 50; kk <= 69; kk++) { - CustomerLocal customer = customerhome.create(new Integer(kk)); - customer.setName(new Name(lnames[(kk - 50) % 3], fnames[(kk - 50) % 5])); - customer.addPhoneNumber("612-555-12" + kk, (byte) 1); - AddressLocal addr = addresshome.createAddress("10" + kk + " Elm Street", cities[(kk - 50) % 6], - (kk % 2 == 0 ? "MN" : "CA"), "5540" + (kk % 5 + 1)); - customer.setHomeAddress(addr); - customer.setHasGoodCredit((kk % 4 == 0)); - - //printCustomer(out, customer, addr); - - // Some customers will have reservations already on one of the - // two cruises.. - if (kk % 3 != 0) { - Collection customers = new ArrayList(); - customers.add(customer); // put this single customer in the - // collection - ReservationLocal reservation = reservationhome.create((kk % 3 == 1 ? cruiseA : cruiseB), customers); - reservation.setDate(date.getTime()); - reservation.setAmountPaid(10 * kk + 2000); - //out.print("
      "); - //printReservation(out, reservation); - //out.print("
    "); - - date.add(Calendar.DAY_OF_MONTH, 7); - } - } - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - // Creating Customers 100-109 - try { - for (int kk = 100; kk <= 109; kk++) { - CustomerLocal customer = customerhome.create(new Integer(kk)); - customer.setName(new Name("Lennon" + kk, "Paul")); - customer.addPhoneNumber("666-543-12" + kk, (byte) 1); - AddressLocal addr = addresshome.createAddress("10" + kk + " Abbey Road", cities[(kk - 100) % 6], - (kk % 2 == 0 ? "FL" : "WA"), "5540" + (kk % 5 + 1)); - - customer.setHomeAddress(addr); - customer.setHasGoodCredit((kk % 4 == 0)); - - //printCustomer(out, customer, addr); - } - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - try { - listCustomers(out, customerhome); - } catch (Exception e) { - ok = false; - out.println("

    ERROR: exception caught = " + e + "

    "); - } - - out.print("

    Finding Customer having name 'John Smith85'

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName = ?1 AND c.firstName = ?2

    "); - CustomerLocal customer85 = null; - try { - customer85 = customerhome.findByExactName("Smith85", "John"); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - AddressLocal addr85 = customer85.getHomeAddress(); - printCustomer(out, customer85, addr85); - - out.print("

    Finding Customer 'Smith90'

    "); - out.print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName = 'Smith90'

    "); - CustomerLocal customer90 = null; - try { - customer90 = customerhome.findSmith90(); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - AddressLocal addr90 = customer90.getHomeAddress(); - printCustomer(out, customer90, addr90); - - out.print("

    Finding Customers having GoodCredit

    "); - out.print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.hasGoodCredit = TRUE

    "); - Collection mplscustomers = null; - try { - mplscustomers = customerhome.findByGoodCredit(); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - iterator = mplscustomers.iterator(); - out.print("

    Number of customers = " + mplscustomers.size() + "
    Expected = 16 customers

    "); - if (mplscustomers.size() != 16) { - ok = false; - } - while (iterator.hasNext()) { - CustomerLocal customer = (CustomerLocal) (iterator.next()); - AddressLocal addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Finding Customers having City = 'Minneapolis' and State = 'MN'

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.homeAddress.city = ?1 AND c.homeAddress.state = ?2

    "); - try { - mplscustomers = customerhome.findByCity("Minneapolis", "MN"); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - out.print("

    Number of customers = " + mplscustomers.size() + "
    Expected = 14 customers

    "); - if (mplscustomers.size() != 14) { - ok = false; - } - iterator = mplscustomers.iterator(); - while (iterator.hasNext()) { - CustomerLocal customer = (CustomerLocal) (iterator.next()); - AddressLocal addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Cabins Table Content

    "); - try { - listCabins(out, cabinhome); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - out.print("

    Retrieve a collection of all cabins on deck '3'

    "); - out.print("

    SELECT OBJECT(c) FROM Cabin AS c WHERE c.deckLevel = ?1

    "); - Collection cabins = null; - try { - cabins = cabinhome.findAllOnDeckLevel(new Integer(3)); - out.print("

    Number of cabins = " + cabins.size() + "
    Expected = 4 cabins

    "); - Iterator iter = cabins.iterator(); - out.print("
      "); - while (iter.hasNext()) { - CabinLocal cabin = (CabinLocal) (iter.next()); - out.print("
    • cabin '" + cabin.getName() + "' on deck '" + cabin.getDeckLevel() + "'
    • "); - } - out.print("
    "); - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - - try { - out.print("

    Finding Customer having a name exactly matching 'Joe Star'

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName = ?1 AND c.firstName = ?2

    "); - CustomerLocal customer = customerhome.findByExactName("Star", "Joe"); - AddressLocal addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - Collection customers = null; - - out.print("

    Finding Customers having a name like 'Jo S' (no wildcards)

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2

    "); - - customers = customerhome.findByName("S", "Jo"); - iterator = customers.iterator(); - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - out.print("

    Number of customers = " + customers.size() + "
    Expected = 0 customers

    "); - if (customers.size() != 0) { - ok = false; - } - - out.print("

    Finding Customers having a name like 'Jo% S%' (with wildcards)

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2

    "); - customers = customerhome.findByName("S%", "Jo%"); - iterator = customers.iterator(); - out.print("

    Number of customers = " + customers.size() + "
    Expected = 26 customers

    "); - if (customers.size() != 26) { - ok = false; - } - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Finding Customers having a name like 'Jo% S%' and living in 'MN'

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c
    WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2 AND c.homeAddress.state = ?3

    "); - customers = customerhome.findByNameAndState("S%", "Jo%", "MN"); - iterator = customers.iterator(); - out.print("

    Number of customers = " + customers.size() + "
    Expected = 13 customers

    "); - if (customers.size() != 13) { - ok = false; - } - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Finding Customers Living in Warm Climates

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.homeAddress.state IN ('FL','TX','AZ','CA')

    "); - customers = customerhome.findInHotStates(); - out.print("

    Number of customers = " + customers.size() + "
    Expected = 25 customers

    "); - if (customers.size() != 25) { - ok = false; - } - iterator = customers.iterator(); - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Finding Customers With No Reservation

    "); - out.print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.reservations IS EMPTY

    "); - customers = customerhome.findWithNoReservations(); - out.print("

    Number of customers = " + customers.size() + "
    Expected = 37 customers

    "); - if (customers.size() != 37) { - ok = false; - } - iterator = customers.iterator(); - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Finding Customers On Alaska Cruise

    "); - out - .print("

    SELECT OBJECT(c) FROM JE2_Customer AS cust, Cruise AS cr, IN (cr.reservations) AS res
    WHERE cr = ?1 AND cust MEMBER OF res.customers

    "); - CruiseLocal crA = cruisehome.findByName("Alaska Cruise"); - customers = customerhome.findOnCruise(cruiseA); - out.print("

    Number of customers = " + customers.size() + "
    Expected = 12 customers

    "); - if (customers.size() != 12) { - ok = false; - } - iterator = customers.iterator(); - while (iterator.hasNext()) { - customer = (CustomerLocal) (iterator.next()); - addr = customer.getHomeAddress(); - printCustomer(out, customer, addr); - } - - out.print("

    Select the zip codes of the state 'FL'

    "); - out.print("

    SELECT a.zip FROM JE2_Address AS a WHERE a.state = ?1

    "); - Collection zipCodes = null; - zipCodes = addresshome.selectZipCodes("FL"); - out.print("

    Number of zip codes = " + zipCodes.size() - + "
    Expected = 5 zip codes (from 55401 to 55405)

    "); - if (zipCodes.size() != 5) { - ok = false; - } - Iterator iZipCodes = zipCodes.iterator(); - out.println("
      "); - while (iZipCodes.hasNext()) { - out.print("
    • zip code = '" + iZipCodes.next() + "'
    • "); - } - out.println("
    "); - - out.print("

    Select the customer which have the address 'addr85'

    "); - out.print("

    SELECT OBJECT(c) FROM JE2_Customer AS c WHERE c.homeAddress = ?1

    "); - CustomerLocal cust = null; - cust = addresshome.selectCustomer(addr85); - addr = cust.getHomeAddress(); - printCustomer(out, cust, addr); - - } catch (Exception ex) { - ok = false; - out.print("

    ERROR: Exception caught : " + ex + "

    "); - } - out.print("

    Cleaning all tables

    "); - - try { - Collection clc = customerhome.findAllCustomers(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - CustomerLocal cl = (CustomerLocal) iterator.next(); - cl.remove(); - } - clc = shiphome.findAllShips(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - ShipLocal sl = (ShipLocal) iterator.next(); - sl.remove(); - } - clc = cruisehome.findAllCruises(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - CruiseLocal cl = (CruiseLocal) iterator.next(); - cl.remove(); - } - clc = reservationhome.findAllReservations(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - ReservationLocal rl = (ReservationLocal) iterator.next(); - rl.remove(); - } - clc = cabinhome.findAllCabins(); - iterator = clc.iterator(); - while (iterator.hasNext()) { - CabinLocal cl = (CabinLocal) iterator.next(); - cl.remove(); - } - } catch (Exception ex) { - ok = false; - out.println("

    ERROR: during cleaning exception caught = " + ex + "

    "); - } - - if (ok) { - out.println("

    Servlet is OK.

    "); - } - out.println("Back to Menu"); - out.println(""); - out.println(""); - - } - - private void listCabins(PrintWriter out, CabinHomeLocal chl) throws Exception { - out.println("

    Cabins Table Content:

    "); - out.println("
      "); - Collection clc = chl.findAllCabins(); - if (clc == null) { - out.println("
    • Cabins table is empty
    • "); - } else { - Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CabinLocal cl = (CabinLocal) iterator.next(); - String name = cl.getName(); - int deck = cl.getDeckLevel(); - int bd = cl.getBedCount(); - out.println("
    • cabinName = '" + name + "', deckLevel = '" + deck + "', bedCount = '" + bd + "'
    • "); - } - } - out.println("
    "); - } - - private void listCustomers(PrintWriter out, CustomerHomeLocal chl) throws Exception { - out.println("

    Customers Table Content:

    "); - out.println("
      "); - java.util.Collection clc = chl.findAllCustomers(); - if (clc == null) { - out.println("
    • Customers table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CustomerLocal cl = (CustomerLocal) iterator.next(); - String name = cl.getName().getLastName(); - String fname = cl.getName().getFirstName(); - String number = " No Card! "; - boolean gc = cl.getHasGoodCredit(); - if (cl.getCreditCard() != null) { - number = cl.getCreditCard().getNumber(); - } - out.print("
    • firstName = '" + fname + "', lastName = '" + name + "'"); - out.println("
        "); - out.print("
      • creditCardNumber = '" + number + "', goodCredit = '" + gc + "'
      • "); - if (cl.getHomeAddress() != null) { - String city = cl.getHomeAddress().getCity(); - String state = cl.getHomeAddress().getState(); - out.print("
      • city> = '" + city + "', state = '" + state + "'
      • "); - } - out.println(""); - out.println("
      "); - } - } - out.println("
    "); - } - - private void listCreditcards(PrintWriter out, CreditCardHomeLocal cchl) throws Exception { - out.println("

    CreditCards Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllCreditCards(); - if (clc == null) { - out.println("
    • CreditCards table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - CreditCardLocal ccl = (CreditCardLocal) iterator.next(); - String number = ccl.getNumber(); - String name = ccl.getNameOnCard(); - out.println("
    • creditCardNumber = '" + number + "', nameOnCard '= '" + name + "'
    • "); - } - } - out.println("
    "); - } - - private void listAddress(PrintWriter out, AddressHomeLocal cchl) throws Exception { - out.println("

    Addresses Table Content:

    "); - out.println("
      "); - java.util.Collection clc = cchl.findAllAddress(); - if (clc == null) { - out.println("
    • Addresses table is empty
    • "); - } else { - java.util.Iterator iterator = clc.iterator(); - while (iterator.hasNext()) { - AddressLocal al = (AddressLocal) iterator.next(); - String city = al.getCity(); - String street = al.getStreet(); - out.println("
    • adressCity = '" + city + "', street = '" + street + "'
    • "); - } - } - out.println("
    "); - } - - private void listPhones(PrintWriter out, Vector vv) { - out.println("
      "); - for (int jj = 0; jj < vv.size(); jj++) { - String ss = (String) (vv.get(jj)); - out.println("
    • " + ss + "
    • "); - } - out.println("
    "); - } - - private void printShip(PrintWriter out, ShipLocal ship) { - out.print("
  • shipId = '" + ship.getId() + "', name = '" + ship.getName() + "', tonnage = '" - + ship.getTonnage() + "'
  • "); - } - - private void printCustomer(PrintWriter out, CustomerLocal customer, AddressLocal addr) { - out.print("
      "); - out.print("
    • firstName = '" + customer.getName().getFirstName() + "', lastName = '" - + customer.getName().getLastName() + "', goodCredit = '" + customer.getHasGoodCredit() + "'
    • "); - out.print("
    • street = '" + addr.getStreet() + "', city = '" + addr.getCity() + "', state = '" - + addr.getState() + "', zip = '" + addr.getZip() + "'
    • "); - out.print("
    "); - } - - private void printReservation(PrintWriter out, ReservationLocal reservation) { - out.print("
      "); - String cru = "no Cruise!"; - if (reservation.getCruise() != null) { - cru = reservation.getCruise().getName(); - } - out.print("
    • reservationDate: '" + reservation.getDate() + "' on '" + cru + "' amountPaid: '" - + reservation.getAmountPaid() + "'
    • "); - Set cabinset = reservation.getCabins(); - String customerinfo = ""; - CustomerLocal cust = null; - String cabininfo = ""; - Set customerset = reservation.getCustomers(); - Iterator iterator = customerset.iterator(); - while (iterator.hasNext()) { - cust = (CustomerLocal) iterator.next(); - customerinfo += cust.getName().getLastName() + " "; - } - iterator = cabinset.iterator(); - while (iterator.hasNext()) { - CabinLocal cabin = (CabinLocal) iterator.next(); - cabininfo += cabin.getName() + " "; - } - out.print("
        "); - if (!customerinfo.equals("")) { - out.print("
      • customers: " + customerinfo); - } - if (!cabininfo.equals("")) { - out.print("
      • cabins: " + cabininfo + "
      • "); - } - out.print("
      "); - out.print("
    "); - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/README b/jonas_tests/examples/base/examples/earsample/README deleted file mode 100644 index 022235e6bb..0000000000 --- a/jonas_tests/examples/base/examples/earsample/README +++ /dev/null @@ -1,94 +0,0 @@ - -Example Overview: ------------------ - -This example shows how to access an EJB deployed in a JOnAS EJB container, from - - a servlet deployed in a Tomcat/Jetty container (thin client) - - a client running inside the client container (heavy client) - -It also shows how to use security in Tomcat or Jetty to authentificate the user and in JOnAS -to authorize the user to access the EJB methods. This aspect is described in details -in the "Use Security in JOnAS with TOMCAT" howto of the JOnAS documentation. - -Besides, this example shows the uniform naming resource access supported in JOnAS. -The servlet gets a javax.transaction.UserTransaction object reference from the JNDI -using the "java:comp/UserTransaction" name. Moreover, it gets a reference on the -bean's home using an environment entry: "java:comp/env/ejb/". - -This sample contains an example of using ejb-link which allows to link the EJB to the -servlet. It is used in the web.xml file for both the ejb-ref and -ejb-local-ref tags. It implies that when the servlet performs a lookup on the bean, -the web classloader has got the visibility of the ejb class. -This is due to the classloader hierarchy between the ear classloader, ejb -classloader and the web classloader. - -Finally, this example shows how to add a resource adapter in an ear. - -The "src" directory contains - - An EJB that mimics $JONAS_ROOT/examples/src/sb with the addition of - security access to the bean methods. - - The servlet source of ServletOp. - - The source of a client which run inside the client container with uniform naming available - - The resource adapter source. - -The "etc" directory contains - - the "xml" directory which contains all the deployment descriptors used for this example : - * application.xml (ear file) - * ejb-jar.xml and jonas-ejb-jar.xml (jar file) - * web.xml, jonas-web.xml (war file) - * ra.xml (rar file) - * application-client.xml, jonas-client1.xml and jonas-client2.xml (two clients jar file) - - the "resources" directory which contains all the resources for this application - * "web" directory contains all resources used by the servlet - - -Compiling this example creates an .ear file that represents an application including : - - a session bean used by the web application - - a web application that will be used by Tomcat or Jetty to run the servlet. - - a resource adapter. - -Prerequisites -------------- -First, you must have installed a web container (ie : Catalina or Jetty) -as the web container service or you will use the heavy client - -You have to set the environment variables - CATALINA_HOME and CATALINA_BASE as indicated in the Tomcat 5.x documentation. -or JETTY_HOME for Jetty 5.x - -Compiling and installing this example: --------------------------------------- - ant install - -Running this example: --------------------- -Commands are given for an Unix system. -(Similar commands can be done on Windows) - -1) Run a jonas server: - jonas start - -2) Load earsample.ear (if you have not added it in the ear service descriptors list) using the jonasAadmin -management application (http://:/jonasAdmin) or the 'jonas admin' command. - -3a) Run your web browser (e.g., netscape): - netscape http://:/earsample - where is the name of your machine (localhost by default) - and the port number (9000 by default) - -3b) You can also lookup the Bean by using one of the client of the ear - - Use the default client (first found) - java -jar $JONAS_ROOT/lib/client.jar $JONAS_BASE/apps/earsample.ear -carolFile $JONAS_BASE/conf/carol.properties - - Use a specific client - java -jar $JONAS_ROOT/lib/client.jar $JONAS_BASE/apps/earsample.ear -jarClient client2.jar -carolFile $JONAS_BASE/conf/carol.properties - - -Notes : - a) that when you use the packages JOnAS-Tomcat and JOnAS-Jetty the earsample.ear is found $JONAS_BASE/apps/autoload directory. - b) the argument -carolFile is useless if you have rebuilt this example because in this - case the carol.properties of your environment is inserted in earsample.ear - -4) Stop the jonas server - jonas stop diff --git a/jonas_tests/examples/base/examples/earsample/build.xml b/jonas_tests/examples/base/examples/earsample/build.xml deleted file mode 100644 index 14a3222c22..0000000000 --- a/jonas_tests/examples/base/examples/earsample/build.xml +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/jaas/jaas.config b/jonas_tests/examples/base/examples/earsample/etc/resources/jaas/jaas.config deleted file mode 100644 index 30ac6faa18..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/resources/jaas/jaas.config +++ /dev/null @@ -1,13 +0,0 @@ -earsample { - // Login Module to use for the example earsample. - - //First, use a LoginModule for the authentication - // Use the resource memrlm_1 - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - ; - - // Use the login module to propagate security to the JOnAS server - org.ow2.jonas.security.auth.spi.ClientLoginModule required - ; -}; \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/jetty.gif b/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_jonas_logo.gif b/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_logo.png b/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/ow_logo.png deleted file mode 100644 index 60617270bf0c0d21c9f40e4f7c85ef5bfdbda548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11700 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 Re0F?dK$vW)v>aKN{y(`9mQw%# diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/vcss.png b/jonas_tests/examples/base/examples/earsample/etc/resources/web/img/vcss.png deleted file mode 100644 index 9b2f596e016533327216d98a0a927738fe17384f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^5kM@@!3-or#C~03U|`e?@Ck7Ra+Q_kdEDnlhI%!W zMb4c&_g;@{HxGAjZ*NM+!7cOCYk@#Y{Pps{+}zwx_wR4FlUu4N92*~!s#T`6W<+- zt4%e$w+9&~i2E*D*W)T9Bhx(p?A&_0|7X(X^Ya7IW>?MPDaUzu zczTO0wr<^e|Jf%QG42CClNSR6E4d`dFZlmw6q^`8Jh0FrC=HPY3SEXN1j@jH0f@DT z;lF?am<8g&3^agg*jyz(n}LC8qNj^vNX4zUQ)`1SI|v-Rel?4G(T!h0t6h3r9Tx_% z{GPN=z+e1GN8qGw>eHn5|8FmNua|o1m5;W_zoO+QbMz<2znfQG#(ynM{=I#{0V!X> zqF)tO-~TK+p#QH~U+~Uxw*7OC?@4lzU=MuwAfY=*I-PyJf}6|jF4ry6#nK@bObtKJ z{jpr)a7XQvK=_v<_kY&OUtDf7N2Y`!=sAP5DASo0{WX7G;uf&=`Gs|Enroa;cP#bwBZgT0Vk8}Ij!pi@+JzOex~wA_|LQI>iZ4KOPMZj@RJmq z{=ckJgo`sg=^ee+rLf!@|1r#|1Qou-tz zozY_28jcOAqH_ZHT>9G+6r2tD{%tx^c*pF4-nNSOH_A#)UvDaE^>6pwzeB^b1utmshBn2mW1YZ#q&(r+Ne9lLHSPV z;lJMu*6nF1eX&Vu#au@n)2h{;1^hB;>x|=8`0r4N5Dq`3W>NpNuIHfS-r}72x2dtZ z|1vypS3P_!s?6%3q3f=mrP_V^@twUAXY`EwoTZxX&st-k^Kye`&fdVV(2iA`qSwCa zO3SD?y)^LM2F^-1=1_^hVN1d%c)e7=87<81^0{cK;`g>k^UAjGxu$SW%#%-OqR3cMOS7CD$Nw90jSF7TjZ+3b%7?`))PKP%lew!LZ} z9@4ntXMQ2~DY0cQL^+Gz9jsW~FI2w%Uw?1i^C{7@K5}j{esbPgg&e IbxsLQ074N#oB#j- diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/index.html b/jonas_tests/examples/base/examples/earsample/etc/resources/web/index.html deleted file mode 100644 index 51fea3aaac..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/resources/web/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - EarSample Example - - - - -
    - Jakarta Tomcat - Mortbay Jetty - JOnAS WebSite -
    - -
    - Earsample : Example of servlet accessing a protected EJB -
    - - - - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/etc/resources/web/ow_jonas.css b/jonas_tests/examples/base/examples/earsample/etc/resources/web/ow_jonas.css deleted file mode 100644 index 3c5d6ab29f..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/resources/web/ow_jonas.css +++ /dev/null @@ -1,222 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - -.bodywelcome -{ - background-color: #FFFFFF; - color: #000000; - background-image: url(img/ow_logo.png); - background-repeat: no-repeat; - margin: 0; -} - - -img { - margin: 5px; - border:0; -} - -body -{ - background-color: #FFFFFF; - margin: 10px; - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - -} - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - font-size: 14px; - margin-top : 40px; - margin-left : 100px; -} - - -div.titlepage { - margin-left: 200px; - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 22px; - line-height: 27px; - font-weight: bold; - border-color: #99C; - border-width: 0 0 4px 0; - border-style: none none solid none; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - -h1 -{ - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 22px; - line-height: 27px; - font-weight: bold; - border-color: #99C; - border-width: 0 0 4px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; -} - -h2 -{ - color: #99C; - font-family: Arial, Helvetica, sans-serif; - font-size: 20px; - line-height: 27px; - font-weight: normal; - border-color: #E06611; - border-width: 0 0 4px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; - -} - -h3 -{ - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 16px; - line-height: 27px; - font-weight: bold; - border-color: #E8EAF0; - border-width: 0 0 2px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; - -} -h4 -{ - color: #99C; - font-family: Arial, Helvetica, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: normal; - border-color: #E8EAF0; - border-width: 0 0 2px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; - -} -h5 -{ - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - line-height: 24px; - font-weight: normal; - border-color: #E8EAF0; - border-width: 0 0 2px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; - -} -h6 -{ - color: #99C; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - line-height: 22px; - font-weight: normal; - border-color: #E8EAF0; - border-width: 0 0 2px 0; - border-style: none none solid none; - margin: 10px 0px 5px 0px; - -} - -td -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - font-weight: normal; -} - -p -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - margin: 10px 10px 5px 0px; -} - -p.error -{ - color: red; -} - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/application-client.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/application-client.xml deleted file mode 100644 index 44291ed628..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/application-client.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - Client of the earsample - - - envEntryString - java.lang.String - - Test of envEntry of application-client.xml file - - - - - - ejb/Op - Session - org.objectweb.earsample.beans.secusb.OpHome - org.objectweb.earsample.beans.secusb.Op - secusb.jar#EarOp - - - - - ejb/OpLink - Session - org.objectweb.earsample.beans.secusb.OpHome - org.objectweb.earsample.beans.secusb.Op - EarOp - - - - url/jonas - java.net.URL - Container - - - - org.ow2.jonas.security.auth.callback.LoginCallbackHandler - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/application.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/application.xml deleted file mode 100644 index 7d984a8a16..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/application.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - ear example secusb/servlet - earsample secusb/servlet - - - secusb.jar - - - - - earsample.war - earsample - - - - - client1.jar - - - client2.jar - - - - ra-sample.rar - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client1.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client1.xml deleted file mode 100644 index b7b0d3fdd1..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client1.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - url/jonas - http://jonas.objectweb.org - - - - jaas.config - earsample - jonas - jonas - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client2.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client2.xml deleted file mode 100644 index 1cf3ead282..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-client2.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - url/jonas - http://jonas.objectweb.org - - - - jaas.config - earsample - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-secusb.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-secusb.xml deleted file mode 100644 index ca04b169db..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-secusb.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - EarOp - EarOpHome - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-web.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-web.xml deleted file mode 100644 index 069066e888..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/jonas-web.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - url/URL - http://jonas.objectweb.org - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/ra.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/ra.xml deleted file mode 100755 index 73edde1b46..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/ra.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - rar sample - rar sample - ObjectWeb - - 1.0 - - false - - - - - org.objectweb.earsample.resourceadapters.ResourceAdapterImpl - - - - JNDI name - jndiName - - java.lang.String - - - eisName - - - - URL for EIS instance - EisURL - - java.lang.String - - - EIS_URL - - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/secusb.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/secusb.xml deleted file mode 100644 index 531d055c2d..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/secusb.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - secured session bean JOnAS example - - secusb (earsample) - - - - EarOp - org.objectweb.earsample.beans.secusb.OpHome - org.objectweb.earsample.beans.secusb.Op - org.objectweb.earsample.beans.secusb.OpLocalHome - org.objectweb.earsample.beans.secusb.OpLocal - org.objectweb.earsample.beans.secusb.OpBean - Stateful - Container - - - - - - tomcat - - - jetty - - - - tomcat - - EarOp - * - - - - - jetty - - EarOp - * - - - - - - EarOp - * - - Supports - - - - - diff --git a/jonas_tests/examples/base/examples/earsample/etc/xml/web.xml b/jonas_tests/examples/base/examples/earsample/etc/xml/web.xml deleted file mode 100644 index 3366a4d289..0000000000 --- a/jonas_tests/examples/base/examples/earsample/etc/xml/web.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - Op - - org.objectweb.earsample.servlets.ServletOp - - - - - Op - /secured/Op - - - - url/URL - java.net.URL - Application - - - - - Protected Area - - /secured/* - - DELETE - GET - POST - PUT - - - - tomcat - jetty - - - - - - BASIC - JOnAS Realm - - - - - tomcat - - - - jetty - - - - - envEntryString - java.lang.String - - This is a string from the env-entry - - - - - ejb/Op - Session - org.objectweb.earsample.beans.secusb.OpHome - org.objectweb.earsample.beans.secusb.Op - EarOp - - - - ejb/OpLocal - Session - - org.objectweb.earsample.beans.secusb.OpLocalHome - - org.objectweb.earsample.beans.secusb.OpLocal - secusb.jar#EarOp - - - diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/Op.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/Op.java deleted file mode 100644 index f4c31355da..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/Op.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.beans.secusb; - -import javax.ejb.EJBObject; -import java.rmi.RemoteException; - -/** - * Remote interface for the bean Op - * @author JOnAS team - */ -public interface Op extends EJBObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - * @throws RemoteException if RMI failed. - */ - void buy (int shares) throws RemoteException; - - /** - * Business method implementation. - * @return the nb of shares bought - * @throws RemoteException if RMI failed. - */ - int read () throws RemoteException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpBean.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpBean.java deleted file mode 100644 index 65afb2722c..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpBean.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.beans.secusb; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; - -/** - * This is an example of Session Bean, statefull, and synchronized. - * @author JOnAS team - */ -public class OpBean implements SessionBean, SessionSynchronization { - - /** - * Actual state of the bean - */ - private int total = 0; - - /** - * value inside Tx, not yet committed. - */ - private int newtotal = 0; - - /** - * User client - */ - private String clientUser = null; - - /** - * Session context that the container provides for a session enterprise Bean - * instance. - */ - private SessionContext sessionContext = null; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param user the user name - */ - public void ejbCreate(String user) { - total = 0; - // in case we are outside transactions - newtotal = total; - clientUser = user; - } - - /* =============== javax.ejb.SessionBean 2.0 implementation ============== */ - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - this.sessionContext = sessionContext; - } - - /* - * ============== javax.ejb.SessionSynchronization implementation - * ============= - */ - - /** - * The afterBegin method notifies a session Bean instance that a new - * transaction has started, and that the subsequent business methods on the - * instance will be invoked in the context of the transaction. The instance - * can use this method, for example, to read data from a database and cache - * the data in the instance fields. This method executes in the proper - * transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterBegin() throws EJBException, java.rmi.RemoteException { - newtotal = total; - } - - /** - * The beforeCompletion method notifies a session Bean instance that a - * transaction is about to be committed. The instance can use this method, - * for example, to write any cached data to a database. This method executes - * in the proper transaction context. Note: The instance may still - * cause the container to rollback the transaction by invoking the - * setRollbackOnly() method on the instance context, or by throwing an - * exception. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void beforeCompletion() throws EJBException, java.rmi.RemoteException { - } - - /** - * The afterCompletion method notifies a session Bean instance that a - * transaction commit protocol has completed, and tells the instance whether - * the transaction has been committed or rolled back. This method executes - * with no transaction context. - * @param committed - True if the transaction has been committed, false if - * is has been rolled back. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterCompletion(boolean committed) throws EJBException, java.rmi.RemoteException { - - if (committed) { - total = newtotal; - } else { - newtotal = total; - } - } - - /* ========================= Op implementation ============================ */ - - /** - * Business method implementation. - * @param s nb of shares to be bought - */ - public void buy(int s) { - newtotal = newtotal + s; - return; - } - - /** - * Business method implementation. - * @return the nb of shares bought - */ - public int read() { - return newtotal; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpHome.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpHome.java deleted file mode 100644 index c27269138d..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpHome.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.beans.secusb; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Op - * @author JOnAS team - */ -public interface OpHome extends EJBHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - * @throws RemoteException if the RMI call failed. - */ - Op create(String user) throws CreateException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocal.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocal.java deleted file mode 100644 index f65b4b5543..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocal.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.beans.secusb; - -import javax.ejb.EJBLocalObject; - -/** - * Local interface for the bean Op - * @author JOnAS team - */ -public interface OpLocal extends EJBLocalObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - */ - void buy(int shares); - - /** - * Business method implementation. - * @return the nb of shares bought - */ - int read(); -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocalHome.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocalHome.java deleted file mode 100644 index 730e996624..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/beans/secusb/OpLocalHome.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.beans.secusb; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; - -/** - * Local home interface for the bean Op - * @author JOnAS team - */ -public interface OpLocalHome extends EJBLocalHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - */ - OpLocal create(String user) throws CreateException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/clients/Client.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/clients/Client.java deleted file mode 100644 index 87aa7e493a..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/clients/Client.java +++ /dev/null @@ -1,189 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent Benoit - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.clients; - -import java.net.URL; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.transaction.UserTransaction; -import javax.rmi.PortableRemoteObject; - -import org.objectweb.earsample.beans.secusb.Op; -import org.objectweb.earsample.beans.secusb.OpHome; - -/** - * Heavy client doing some operations on a bean - * @author jonas team - */ -public class Client { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private Client() { - - } - - /** - * Main method - * @param args arguments of the client - */ - public static void main(String[] args) { - - Context initialContext = null; - System.out.print("Building a new InitialContext..."); - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - System.out.println("done !"); - - System.out.print("Looking up java:comp/UserTransaction ..."); - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - System.out.println("done !"); - - String envEntry = null; - System.out.print("Looking up java:comp/env/envEntryString ..."); - try { - envEntry = (String) initialContext.lookup("java:comp/env/envEntryString"); - } catch (Exception e) { - System.err.println("Cannot get env-entry on JNDI " + e); - System.exit(2); - } - System.out.println("done !"); - System.out.println("Env entry is : " + envEntry); - - URL url = null; - System.out.print("Looking up java:comp/env/url/jonas ..."); - try { - url = (URL) initialContext.lookup("java:comp/env/url/jonas"); - } catch (Exception e) { - System.err.println("Cannot get URL on JNDI " + e); - System.exit(2); - } - System.out.println("done !"); - System.out.println("Web site of jonas is at :" + url); - - System.out.print("Looking up java:comp/env/ejb/Op ..."); - // Connecting to OpHome thru JNDI - OpHome home = null; - try { - home = (OpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Op"), OpHome.class); - System.out.println("done !"); - } catch (Exception e) { - e.printStackTrace(); - System.err.println("Cannot lookup OpHome: " + e); - System.exit(2); - } - - // OpBean creation - Op t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create OpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientOp OK. Exiting."); - } -} - diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/resourceadapters/ResourceAdapterImpl.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/resourceadapters/ResourceAdapterImpl.java deleted file mode 100755 index 0015535668..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/resourceadapters/ResourceAdapterImpl.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.resourceadapters; - - -import java.net.MalformedURLException; -import java.util.HashMap; - -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.resource.NotSupportedException; -import javax.resource.ResourceException; -import javax.resource.spi.ActivationSpec; -import javax.resource.spi.BootstrapContext; -import javax.resource.spi.ResourceAdapterInternalException; -import javax.resource.spi.endpoint.MessageEndpointFactory; -import javax.transaction.xa.XAResource; - -/** - * A Resource adapter - * @author kemlerp - * - */ -public class ResourceAdapterImpl implements javax.resource.spi.ResourceAdapter, java.io.Serializable { - - - /** - * serialVersionUID - */ - private static final long serialVersionUID = 3834312812943456568L; - - /** - * String should be the RA name when set, ie, EIS - */ - private String eisurl; - - /** - * The JNDI name - */ - private String jndiName; - - /** - * Initial context - */ - private InitialContext ictx; - - /** - * BootstrapContext - */ - private BootstrapContext bootstrapCtx = null; // set in start() - - /** - * EndpointFactories - */ - private transient HashMap endpointFactories = new HashMap(); - - - /** - * Start - * @param bootstrapCtx bootstrapCtx - * @throws ResourceAdapterInternalException if an error occurs - */ - public void start(BootstrapContext bootstrapCtx) throws ResourceAdapterInternalException { - this.bootstrapCtx = bootstrapCtx; - - try { - ictx = new InitialContext(); - ictx.bind(jndiName, eisurl); - } catch (NamingException e) { - e.printStackTrace(); - } - - } - - /** - * Stop - */ - public void stop() { - try { - ictx.unbind(jndiName); - } catch (NamingException e) { - e.printStackTrace(); - } - } - - - /** - * Called by the application server when a message-driven bean - * (MessageEndpoint) is deployed. - * @param factory MessageEndpointFactory - * @param spec activation spec - * @throws NotSupportedException if an error occurs - * @throws ResourceAdapterInternalException if an error occurs - */ - public void endpointActivation(MessageEndpointFactory factory, ActivationSpec spec) throws NotSupportedException, - ResourceAdapterInternalException { - endpointFactories.put(spec, factory); - } - - /** - * Endpoint Deactivation - * @param factory MessageEndpointFactory - * @param spec activation spec - */ - public void endpointDeactivation(MessageEndpointFactory factory, ActivationSpec spec) { - endpointFactories.remove(spec); - } - - /** - * Get XAResources - * @param specs A tab of specs - * @throws ResourceException if an error occurs - * @return Tab of XAResources - */ - public XAResource[] getXAResources(ActivationSpec[] specs) throws ResourceException { - return null; - } - - /** - * Get Eis URL - * @return Eis URL - */ - public String getEisURL() { - return eisurl.toString(); - } - - /** - * Set Eis URL - * @param eisURL Eis URL - * @throws MalformedURLException if 'eisURL' is not a URL - */ - public void setEisURL(String eisURL) throws MalformedURLException { - // ra.xml deployment supplies value - this.eisurl = eisURL; - } - - /** - * Get BootstrapContext - * @return bootstrapCtx - */ - public BootstrapContext getBootstrapCtx() { - return bootstrapCtx; - } - - /** - * Set BootstrapContext - * @param bootstrapCtx bootstrapContext - */ - public void setBootstrapCtx(BootstrapContext bootstrapCtx) { - this.bootstrapCtx = bootstrapCtx; - } - - /** - * Get used JNDI name - * @return A string - */ - public String getJndiName() { - return jndiName; - } - - /** - * Set JNDI name - * @param jndiName a string - */ - public void setJndiName(String jndiName) { - this.jndiName = jndiName; - } -} diff --git a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/servlets/ServletOp.java b/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/servlets/ServletOp.java deleted file mode 100644 index c72f0c9d2b..0000000000 --- a/jonas_tests/examples/base/examples/earsample/src/org/objectweb/earsample/servlets/ServletOp.java +++ /dev/null @@ -1,304 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.earsample.servlets; - -import java.io.IOException; -import java.io.PrintWriter; -import java.net.URL; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.transaction.UserTransaction; - -import org.objectweb.earsample.beans.secusb.Op; -import org.objectweb.earsample.beans.secusb.OpHome; -import org.objectweb.earsample.beans.secusb.OpLocal; -import org.objectweb.earsample.beans.secusb.OpLocalHome; - -/** - * This servlet is an example to show how to access a EJB from a servlet - * @author JOnAS team - */ -public class ServletOp extends HttpServlet { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request - * the client has made of the servlet - * @param response an HttpServletResponse object that contains the - * response the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println("Ear Sample of Servlet accessing a protected EJB"); - out.println(""); - out.println(""); - out.println("

    Ear sample of Servlet accessing a protected EJB"); - out.println("

    \"Tomcat"); - out.println("\"Jetty"); - out.println("\"JOnAS"); - out.println("

    Initial context / UserTransaction

    "); - out.println("
      "); - Context initialContext = null; - try { - initialContext = new InitialContext(); - out.println("
    • Initial context OK
    • "); - } catch (Exception e) { - out.print("
    • Cannot get initial context for JNDI: "); - out.println(e + "
    • "); - return; - } - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - out.println("
    • Get java:comp/UserTransaction OK
    • "); - } catch (Exception e) { - out.println("
    • Cannot lookup java:comp/UserTransaction: " + e + "
    • "); - return; - } - out.println("

    "); - - out.println("

    "); - out.println("Lookup on env-entry with java:comp/env/envEntryString"); - out.println("

    "); - out.println("
      "); - String envEntry = null; - try { - envEntry = (String) initialContext.lookup("java:comp/env/envEntryString"); - out.println("
    • Env entry is : " + envEntry + "
    • "); - } catch (Exception e) { - out.println("
    • Cannot get env-entry on JNDI " + e + "
    • "); - return; - } - out.println("

    "); - - - out.println("
    "); - - out.println("

    "); - out.println("Lookup on URL with java:comp/env/url/URL"); - out.println("

    "); - out.println("
      "); - URL jonasURL = null; - try { - jonasURL = (URL) initialContext.lookup("java:comp/env/url/URL"); - out.println("
    • URL is : " + jonasURL.toString() + "
    • "); - } catch (Exception e) { - out.println("
    • Cannot get url on JNDI " + e + "
    • "); - return; - } - out.println("

    "); - - out.println("

    Actions realized by the servlet and the EJB

    "); - out.println("

    With local interface

    "); - out.println("
      "); - // Connecting to OpLocalHome thru JNDI - OpLocalHome opLocalHome = null; - try { - opLocalHome = (OpLocalHome) - initialContext.lookup("java:comp/env/ejb/OpLocal"); - } catch (Exception e) { - out.println("
    • Cannot lookup java:comp/env/ejb/OpLocal: " + e + "
    • "); - return; - } - // OpBean creation - OpLocal opLocal = null; - try { - opLocal = opLocalHome.create("User1"); - out.println("
    • Create a bean
    • "); - } catch (Exception e) { - out.println("
    • Cannot create OpBean: " + e + "
    • "); - return; - } - // First transaction (committed) - try { - out.println("
    • Start a first transaction
    • "); - utx.begin(); - opLocal.buy(FIRST_BUY_AMOUNT); - out.println("
    • First request on the new bean
    • "); - opLocal.buy(SECOND_BUY_AMOUNT); - out.println("
    • Second request on the bean
    • "); - utx.commit(); - out.println("
    • Commit the transaction
    • "); - } catch (Exception e) { - out.println("
    • exception during 1st Tx: " + e + "
    • "); - return; - } - // Start another transaction (rolled back) - try { - out.println("
    • Start a second transaction
    • "); - utx.begin(); - opLocal.buy(THIRD_BUY_AMOUNT); - utx.rollback(); - out.println("
    • Rollback the transaction
    • "); - } catch (Exception e) { - out.println("
    • exception during 2nd Tx: " + e + "
    • "); - return; - } - // Get the total bought, outside the transaction - int val = 0; - try { - val = opLocal.read(); - out.println("
    • Request outside any transaction
    • "); - } catch (Exception e) { - out.println("
    • Cannot read value on t1 : " + e + "
    • "); - return; - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - out.println("
    • Bad value read: " + val + "
    • "); - return; - } - // Remove Session bean - try { - opLocal.remove(); - } catch (Exception e) { - out.println("
    • Exception on buy: " + e + "
    • "); - return; - } - out.println("

    "); - - out.println("

    With remote interface

    "); - out.println("
      "); - // Connecting to OpHome thru JNDI - OpHome opHome = null; - try { - opHome = (OpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Op"), OpHome.class); - } catch (Exception e) { - out.println("
    • Cannot lookup java:comp/env/ejb/Op: " + e + "
    • "); - return; - } - // OpBean creation - Op op = null; - try { - op = opHome.create("User1"); - out.println("
    • Create a bean
    • "); - } catch (Exception e) { - out.println("
    • Cannot create OpBean: " + e + "
    • "); - return; - } - // First transaction (committed) - try { - out.println("
    • Start a first transaction
    • "); - utx.begin(); - op.buy(FIRST_BUY_AMOUNT); - out.println("
    • First request on the new bean
    • "); - op.buy(SECOND_BUY_AMOUNT); - out.println("
    • Second request on the bean
    • "); - utx.commit(); - out.println("
    • Commit the transaction
    • "); - } catch (Exception e) { - out.println("
    • exception during 1st Tx: " + e + "
    • "); - return; - } - // Start another transaction (rolled back) - try { - out.println("
    • Start a second transaction
    • "); - utx.begin(); - op.buy(THIRD_BUY_AMOUNT); - utx.rollback(); - out.println("
    • Rollback the transaction
    • "); - } catch (Exception e) { - out.println("
    • exception during 2nd Tx: " + e + "
    • "); - return; - } - // Get the total bought, outside the transaction - val = 0; - try { - val = op.read(); - out.println("
    • Request outside any transaction
    • "); - } catch (Exception e) { - out.println("
    • Cannot read value on t1 : " + e + "
    • "); - return; - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - out.println("
    • Bad value read: " + val + "
    • "); - return; - } - // Remove Session bean - try { - op.remove(); - } catch (Exception e) { - out.println("
    • Exception on buy: " + e + "
    • "); - return; - } - out.println("

    "); - - - - out.println("

    "); - out.println("Resource Adapter Properties"); - out.println("

    "); - out.println("
      "); - String eisName = null; - try { - eisName = (String) initialContext.lookup("eisName"); - out.println("
    • EIS Name is : " + eisName + "
    • "); - } catch (Exception e) { - out.println("
    • Cannot get eis name on JNDI " + e + "
    • "); - return; - } - out.println("

    "); - - - out.println("Sample is OK.
    "); - out.println(""); - out.println(""); - } -} diff --git a/jonas_tests/examples/base/examples/emb-sample/.cvsignore b/jonas_tests/examples/base/examples/emb-sample/.cvsignore deleted file mode 100644 index 378eac25d3..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -build diff --git a/jonas_tests/examples/base/examples/emb-sample/README b/jonas_tests/examples/base/examples/emb-sample/README deleted file mode 100644 index e4a673003b..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/README +++ /dev/null @@ -1,70 +0,0 @@ -$Id: README,v 1.3 2005/07/08 14:02:52 pasmith Exp $ - -============================================================================== -ENTERPRISE MEDIA BEANS SAMPE README -============================================================================== - -As a pre-requisite, please deploy the emb-sample application. - -To visit the emb-sample Application visit: - - http://localhost:9000/emb-sample - -First you have to had some media to the database : - - to add default samples select Load - - to add your own samples by uploading it - -All your sample will be remove after session timeout - - -====================================== -DIRECTORY STRUCTURE: -====================================== - -emb-core/ customizes preset core application of EMB -etc/ all deployment descriptor -lib/ upload lib -resources/ JSPs, samples, images, html files. -src/ java files - - -====================================== -KNOWN ISSUES: -====================================== - -Here are some known issues about the emb-sample demo: - -1) By default the application is set to work only on localhost - -2) Cookies have to be accepted in order to use this sample - -3) If the user's session times out or if the user removes their - cookies, all generated media will be removed - -4) This sample needs some memory under quite heavy load, I advice you to start - JOnAS more memory than default (64MB). (if you got OutOfMemoryError) - To do this set JAVA_OPTS environment variable to -Xmx128m, in order to - set the maximum memory of the JVM to 128MB. - - -====================================== -HOW TO CUSTOMIZE EMB-SAMPLE SETTING: -====================================== - -Customize application : - emb sample have some few setting in order to limit the load of the server - in case of an on line demo. - - - in etc/web.xml : set the session timeout (in minutes - - in etc/embSampleSession.xml : - - set the env entry ejb/embSample/isCopyAllowed in order to copy or - to modify the media when using some conversion (limit numbers of ejb - entity). - - set the env entry ejb/embSample/maxMediaPerSession to set the - maximum of media that can be created (upload, convert if copy is - allowed) - - Some features are only avaiable by using some plugins such has streaming - capabilities, video conversion or more image format support. - For using this sample through a network (not localhost) see the - Enterprise Media Beans documentation. diff --git a/jonas_tests/examples/base/examples/emb-sample/build.xml b/jonas_tests/examples/base/examples/emb-sample/build.xml deleted file mode 100644 index 636d26ea75..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/build.xml +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/emb-core/README b/jonas_tests/examples/base/examples/emb-sample/emb-core/README deleted file mode 100644 index e057cf6e18..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/emb-core/README +++ /dev/null @@ -1,9 +0,0 @@ -$Id: README,v 1.3 2005/07/08 14:02:52 pasmith Exp $ - -============================================================================== - EMB CORE -============================================================================== - -In this directory put your customized emb-core.ear -(orginal is in $JONAS_ROOT/lib/commons/jonas/emb/emb-core) - diff --git a/jonas_tests/examples/base/examples/emb-sample/etc/application.xml b/jonas_tests/examples/base/examples/emb-sample/etc/application.xml deleted file mode 100644 index 5d6f36240c..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/etc/application.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - JOnAS EMB sample - JOnAS EMB sample - - - - - emb-core-ejb.jar - - - - - emb-plugin-publisher-servlet-jonas.rar - - - - emb-plugin-publisher-servlet-jonas.war - - emb-plugin-publisher-servlet-jonas - - - - - - - - - emb-sample-ejb.jar - - - - - - emb-sample.war - emb-sample - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/etc/embSampleSession.xml b/jonas_tests/examples/base/examples/emb-sample/etc/embSampleSession.xml deleted file mode 100644 index ae2c91129c..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/etc/embSampleSession.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - EMB Sample Session Bean - - - MediaSampleSession - - emb.sample.session.MediaSampleSessionLocalHome - - emb.sample.session.MediaSampleSessionLocal - - emb.sample.session.MediaSampleSessionBean - - Stateful - Container - - This permit to copy media content instead of mdified it. It create more mediaEntityBean - - ejb/embSample/isCopyAllowed - - java.lang.Boolean - true - - - Maximum media per session, to avoid server over load. The demo has at least 10 media by default. 0 is no limit - - ejb/embSample/maxMediaPerSession - - java.lang.Integer - 0 - - - ejb/emb/MediaEntity - Entity - javax.emb.MediaEntityLocalHome - javax.emb.MediaEntityLocal - emb-core-ejb.jar#MediaEntity - - - - - - - MediaSampleSession - * - - Supports - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/etc/jonas-embSampleSession.xml b/jonas_tests/examples/base/examples/emb-sample/etc/jonas-embSampleSession.xml deleted file mode 100644 index 23c3e122cc..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/etc/jonas-embSampleSession.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/etc/web.xml b/jonas_tests/examples/base/examples/emb-sample/etc/web.xml deleted file mode 100644 index ee70939732..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/etc/web.xml +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - 10 - - - - - ActionDispatcher - - emb.sample.servlet.ActionDispatcher - - - - LoadSampleMedia - - emb.sample.servlet.LoadSampleMedia - - - - UploadSampleMedia - - emb.sample.servlet.UploadSampleMedia - - - - HomeSample - emb.sample.servlet.HomeSample - - - ListSampleMedia - - emb.sample.servlet.ListSampleMedia - - - - ExtractHeaderData - - emb.sample.servlet.ExtractHeaderData - - - - RetrieveSampleMedia - - emb.sample.servlet.RetrieveSampleMedia - - - - ConvertSampleImageBW - - emb.sample.servlet.ConvertSampleImageBW - - - - ConvertSampleImageHalfSize - - emb.sample.servlet.ConvertSampleImageHalfSize - - - - JAIConvertSampleImageBW - - emb.sample.servlet.ConvertSampleImageBW - - - - JAIConvertSampleImageHalfSize - - emb.sample.servlet.ConvertSampleImageHalfSize - - - - ConvertSampleImageFormat - - emb.sample.servlet.ConvertSampleImageFormat - - - - ConvertSampleImageChained - - emb.sample.servlet.ConvertSampleImageChained - - - - ConvertSampleImageSvgToPng - - emb.sample.servlet.ConvertSampleImageSvgToPng - - - - ConvertSampleVideoTo3GPP - - emb.sample.servlet.ConvertSampleVideoTo3GPP - - - - - ConvertSampleVideoToMpegTs - - emb.sample.servlet.ConvertSampleVideoToMpegTs - - - - ConvertSampleVideoToMpeg - - emb.sample.servlet.ConvertSampleVideoToMpeg - - - - ConvertSampleImageOverlayed - - emb.sample.servlet.ConvertSampleImageOverlayed - - - - ConvertSampleImageFrame - - emb.sample.servlet.ConvertSampleImageFrame - - - - - - ActionDispatcher - /index.jsp - - - HomeSample - /HomeSample - - - ActionDispatcher - /ActionDispatcher - - - UploadSampleMedia - /UploadSampleMedia - - - LoadSampleMedia - /LoadSampleMedia - - - ListSampleMedia - /ListSampleMedia - - - ExtractHeaderData - /ExtractHeaderData - - - RetrieveSampleMedia - /RetrieveSampleMedia - - - ConvertSampleImageBW - /ConvertSampleImageBW - - - ConvertSampleImageHalfSize - /ConvertSampleImageHalfSize - - - ConvertSampleImageFormat - /ConvertSampleImageFormat - - - ConvertSampleImageChained - /ConvertSampleImageChained - - - ConvertSampleImageSvgToPng - /ConvertSampleImageSvgToPng - - - ConvertSampleVideoTo3GPP - /ConvertSampleVideoTo3GPP - - - ConvertSampleVideoToMpegTs - /ConvertSampleVideoToMpegTs - - - ConvertSampleVideoToMpeg - /ConvertSampleVideoToMpeg - - - ConvertSampleImageOverlayed - /ConvertSampleImageOverlayed - - - ConvertSampleImageFrame - /ConvertSampleImageFrame - - - 404 - /ActionDispatcher - - - ejb/emb/MediaEntity - Entity - javax.emb.MediaEntityLocalHome - javax.emb.MediaEntityLocal - emb-core-ejb.jar#MediaEntity - - - ejb/embSample/MediaSampleSession - Session - - emb.sample.session.MediaSampleSessionLocalHome - - emb.sample.session.MediaSampleSessionLocal - emb-sample-ejb.jar#MediaSampleSession - - - - - - emb.sample.servlet.HttpSessionMgr - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/lib/README b/jonas_tests/examples/base/examples/emb-sample/lib/README deleted file mode 100644 index 6ab933bf41..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/lib/README +++ /dev/null @@ -1,2 +0,0 @@ -Version of jars file is located in versions.properties file. -Sources are located under JONAS_CVS/emb-jonas. \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/emb-sample/lib/commons-fileupload-1.1.1.jar b/jonas_tests/examples/base/examples/emb-sample/lib/commons-fileupload-1.1.1.jar deleted file mode 100644 index fc5763d0d33108308493ac19cbc0e4c2eadfca26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31909 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 z z)r|!9pJ?yDGY_n!KW6Y>VoNG8_}QOFnwAErcz_771rF|p*%+56Urx1 zj4b?2_`#bUyQ{FI+M~>I{_WK#Z+>7@2#{4obY^^QEWu#_m5VcpU%(}Xg|u!5Yk;Ml zH98iYY;)|pwxpH^D6VVF%|M}1h;X5t9JZ;#CD8+$$np&CW9WECdn#1ViPdu!3s4n^ zMfnckW*UPDK+M;eYsDcoe^8ako7$3P0_aK_|w; z-i^CRc7nt1-tL731EgQXLFCt7YQ96N*19eC zXl;5(65L)m^>k|9oQ6c#={Z=1$Gup&Ta}&ntpC)kuIo^g!ds~gO-~MncS8YG+?)`_jyozg) zJ#*&4ipvB}4|wu!k)xXV?Ew0b1T{DC(R6DtB<0!$lSiMIS9{Cbjb zw!_yf23XTo?(tl`1LC{#K!0813#G3bYk31dE z(M0$g~1`_J##%iu*otLng87rVL^ec-!*OK|2l&B*51$2<*-kam%<% zzp)sfMf?4i`*XNHARE79dtZzZtm6eOTFGK)Gk@=<`ZHp*U0N!>!>GpB6X#cz$B$$J zZGwYoOg!MZ5?kw)X(pv@a~2}5AaY{Z1EoqHK_7ZE@bBPJT?!A5r{1$58dk9hxahNm zrwbz4xcQg+eoiRUSmsG&XlWe>7BKWZ$(}W&=qfQ{!JK7ANgWomsdkic#zE$+Yeml_ zDt*8Pu(VU|NJ&#HWRVKLj>)2hy_Lp%ORmk#XV~G;5@WS%mLfSdT6zql*E5wg)=*7H zBu_X!7DAOK_GZE=DIFJ-Tu3!yh#EmYbfV#8bGcuXYZRC+$`ZT(mM^p?j7?OV!@EpX zRZVrI8A7a;!P;gedV_x{}m^8N+(n;fhVp0N)~6`_df-J>~5i)CqIJj46o9 z9zh&FzXH){u4|2=JbMrrFj8*cdk7mUG~vzt1YJ|4E3=m?MGHh=D4B&v-z#O^>FG5l+D6Fw=sWZNO-dkgr8dG#RP3VK3bRT7t+kLZ(X z2G<3PTQV1cX!{B}gVwRv=Hl91Vs-EEo7Ne|?^!6-)vEzkk5t1tk93K0QotanpucP5 z{h2o5;|b`aAp#vdg-QM^<@S5C-{rTSv`uuT_`FzSe`FyU@_up>;2q*`z^yu@CDf3^^z+W9a7lV6BnfhTl z0QW~qy}uv1Kb7|T72vtl*OR8)56b~4Jsx!ZD}bL!CV$0wPW}BP9QMO<0Mn5Fg!30N zV!uK>=SzO#5dUF00EWj@w7>7l|AF}1&O9e-eTp^xupEFk&Oagj85{GjJ$X+5`M7@l zVL1R%~83 z9em=9{9!o&Lel@;_y5Kq`78Ew?ztyk!ylFdxFY+P*#E?G_$%~tzO*NDyC0SVu%`T% z(0@&J_bcf0O68xYI4kwP1N}XD;8*|8%W$9Soqt#kfRX!u_y0>h=C2^nt3sb@KYv&b zpz3jf`1=*%mx{rEsPFw1`FY*q&&a`i{}%c0Yfyhhex82&^Bu1L>R%%N`8W4G)9Ggb z)W@6h?+5iyb9#U6!Sj@sr`Yok%K^YB{}aF;oBN-qPyGt@Je@$`2hQXF9DtANzl8d; z;N`Dy&*SYs-&A&wTE2fjbpMP0=W*GeN3K=#pZx!Lg!zjY{;yqm9uE6??y|f{Bi#0XYW0|XAe@(B5rb0;E(BeKtM!~f9H>n&dIhZAX>!-4kt z$|{0(j>G0shF0VN0YeQAqG^aj!dP5z-li+?>y^8RHswh2YRE3dXd4(eK^gV89;TQH#Rr7@op=;wbYHTC&u>n*1L1rQkdZZJ`yS z`@#=TLv-}&Y;RBcdT(`OADHv&_~`6;eEuKmP9?DGmQEkG>p#!>P8^3%&RZCau^MzI z8;VMT0>fro4@clyf)89n-c{^HMb``3M{Tg5J|2`d$g(DtPmv2XF4 zlyQT@L>WKoe>alfD(MK7Rb63)EF^6rN32i#$#X0>+RhQn)BqWEwOX?m;68ic+L56( z&;Ft{-lPx*`yFhAPXYR}ZxcgYm=~mWGQvi5a`~HlFI6kW(2ZtI9(z#i%qZY@?z7K_ z7R|J7vT%FXMd5Qcf%tJwRH2W zxbvw9>WjXVQ{c&{QZL9Ocq$Y}4}u;^%kjObQk(F%peVdFy)bmhi^RWeAJskI8D}m@ z3K@_n)>l1bWR|CX#c{agJ|*n=>SkKKCk)6g6n)S?9#)E+dnH9_=lSlw+VI|-vGupL{(eG! za&mQ*>J`RM6-g7^s*wlJJam@fo`0b+6D*6VR)vwRgb%tBR#GV?DwLg}QFqcAf7VQt zy#~qfjcSEhiD-ZE%NpZNbToW9y-GJrMT_}mDQSpP#W$6ui7#g`4>F0Die@~SDR`S|1RLBqRVkSjQE}MMmc?G}0 z7rv(q)5+R3F6gxr$xzN~VRSaIrsP1MS$_I$@MAekvZ6?}?&u_k8(2RveJv3Vg-=br z5)4~OI=*FHv*kaK;;~4GIZQ0Di(jN;eC0$D6Lm_7T>lNoUQ-9`$`S~&pUmFSoGMJ2*`8kc^_ z?pB6Dtw9?3FaR0`L|6^U-QcBs4wnpM&zFUcL?(~r2fBB3q=)bC3|e^}>g`-zw8uRM z`2_6Emy5nY=DB;9u|oiIV@2W0m=DYagm}K6h272#S04~lxw!NY!DKP zUIEhI7hbFp%DkzlFZKFJ(xz}^?K~izMlZT&OUO&yZv!jt z04v!$WsRr!TLCi!iKMq)W(E+V9zj+?{W-#|Fj(mesL>>kC>+X!lp9I-jL1j^Ls{QK zo!g6GP(bq^i-F5&#>cTm=oZ~%$%E4-36Eub~pNN+>43Bmb%xa>h{N(#jFCUR8T1f0juV# zq-grU8pBu3P`TH=EKp9MGXvKsZju0p((qSlR2c^BGE_wcDqQ-WTbA(H!DM9^C=cIK zF4o{%GM4(0|D}B0VJzgjgZ7em7ZS=x+7kB_W0>6V(4BrN|6q4<^~Nnb$jWurwD`V` zqOAJ9scXD6*{7tFxO#-Kp_!_#fJVh9`|aH!j8UF`CQa_H)J1jc(&f1KASl{2T2PL* zD$nHWswTy!;tXA#)fA;Z5gw9RXuO3H^=LV7%%f{gY}BhUVAc9egw0jL0gIp89!B?u zGD&=CtJD?MoY(FA*e(!Si<4~5C0#k>xs3>GZu-p~-q_&G{xRNfCk!7Qq&48R(Xy~4 zqfc#abw0X}s@(|e)~aq153!Nm!cQIC9ilHUoFT-5qR5_)RDepjOs@pf9Gx zSf2MFUz(W$1wO2L&SV}>@!l?sLkb=M~SRw-WsrCjZakz{0u1@cB{%02S= z*TzG=zlqkSz+k*%D$k3yKxwQYC&!@|kuhER-eb5tD3GyH3O`Vl#@WsG-#A zra=9o4JWyg!@!l2vpUAA0b4qfaa!Ft;(l20-Lu`*rI$*e{^=OloIq=((}bf+u)B(b z)}+TY#C|>!v#sWMo#t{}Wiu{v0(z`AvZRD)6GU7cHak#QfOd&?`g1`cTAlZ;oU|77 zL#)(IMrW*QSU0y9$&+9ZqnrfDj!fTu?UGk%tSWRAELB8aSNY`i)$z4%rmfvrZFh(% zJTRY)I5R|EWF)vXW$k-#{?j=4fJs0_n2XK2+uU0;OX&6ZL@luh{t-{fOVW+Vs%x2Am}aPxe9(= z4dMfO!~JLC@3Be(BZa+up@!^#Tz_{H+8ON7nd^}8Sq`+0{$to^8b#6K{8IS@g_p)c zZ(Y^j5R(kqiJi3dR|4beLM^|p!hf_0t*+t`f6x2aLxnr9-zZaMG97)rM_Cr)eke<7R69froEsK`lKrj3ggh7&x5o;2|EX7YjoP44pMM;!pz|3wWdo zO>H*IksGl2gMFE<_xf068bb`_5x8TiGdndD`YcsP%bwDklU@#YnVzSm5usdVY9gQ+ zTpY3a;>ERB$0T>6J2j;g;puWmPc3Q zTGz(l`$haXy7UT{loVACrZ~Q_%Op-Xc5-pIepr&wlCLR zM=aHz`%KSr0e}Z=>%DeNZwqiy3#+^$ME0$s87+WhIMBhYfp z^Ym3B(BCgX!hjASK<%YU^$63_k`L~w(q228u`Ss) z5D<2j5PYif@aqP3Wny%4aq$@UyRq#?ufdgi;=0$qdH+Xo1fRVFeqe!sG|+(m4~m26 zKUmm0SkpNe8PG`^JLwDQJN-YhLR#O>&fLcIf5{2%Z^uoR2Hr_u@C$cGSqWwK8PUa& zS=ZAwhk}@183o$a)pI8^=!SH;A_)a?ukNo~Ti1JjKQIc36x34L43-oqy?Qlj7tF|E zhtvK*nis!sryXAJnXb6^MfJW?E~)ONSOE;_w9y*3F+<;>k{zp)P*v)7aRnaZL~;`V zJ{iv!jN(h;>yDt@0jhS-aUs)r-F~PTvs4%g6CXNaDmwXz5wR|n3&2VQg6^elT?@##<(1x=&?hXW=Mix~Hdcm9HrUx1V&h!}*S z%XRlD{Wj4}FC-c_3&@Oy4P_vd8UZA{HDkjKgYUoqxpgCAJ)#ttmR6b(SmLx}=JSAj z>2%Hy)K_F>v^LldREZ0{C{Qc`uT>+ae1gIBBIpP{&&Kxlx6SMQplMV$J~;$$lwNqu z!s(SYnryFRJL`9+nghX`FEo_tl?aioLa;&>hklbr zUEPiT9?5t)lDwpH4S4sb{g8R~O6@vlt?nx|2lms2YHwH}6Si>V{K&tDVaHPPeeiw~ zJB{s+K&G771@|fcq&gUqi|Pk!Xayx z+~_xf$*k>>$SxjhEa{a{ScKW3$P;DsZZym8kFqE49@p73`&*q7PF-Q-hyYVPmyuqX~PyB z#R}RwX>X(dLcyalhS%w<{#LCzbA+Oc(S*KL7tu!hU zLQrLByo{zo9-LNVuP)S($oWKk#l?oAe`VN42mJZC@fm_g9Q(ze%h&Kh+n^OR@2ofW z!0qob_179_#l-H8CEa6$sx4}W)Z;4&HW;%#2rdbp*J{KWC^IihX40)G#{LmT+v?jf zaJi06QN+Zo=Y3XOvvC>@@vyG2b*7LA0dMx#eT0b|p!mUXsJ0632xODFM7U^dn7?(z z-<4DS?XxA@%B03eD7Twd_0H)l!D>NqEk~Bfq+7fgh}4hK5192|@3QNX(yVI|b=u<*DXXYVB^bGfD!Qy&L`XG zbJ;;yGXCQFui~(RCcbl9 zAIuq*S3Cb42t!V;H`^p}!%*nGLn-A8A8Q+9l25horvnHj($CXGXKM6FubS*z zxKlC#qOwFRz|I)-`s8(sfsv6mzpagdi?o}joAi&Ho{<|`PqV%k_z2EK*Z`Kz^?#(& z7{FN4rerz^IS1l#v!mE@H}3{gdB73os6an8%Xhk^WJd@vijD3sO$c#V?+14qh$9S$ z@boK>8-9IOLOElD@v)Zv?83s@xGB$F7|IKqRUh~n@2(5mLnWHt>2lc(Lmaf8Hr@ zdM+@o6;?QLTs}u3L$_%dnMe|Di3pwuSn~027I4i5x2Ue+>qF2 zad6hBE-ZMrQLCEr4ks)3)+($0xi0?|;gq?e3;xk>dySlLe9W?LwDs4dTGxCBO@eDp zzPDm>et7v-%W&VCer_+(uj-=iHwqXJjahAlvGmjOnO6qZP9`(QKv(ogfZfl%#tmJ- z;1lgxi61@~0y3`6xJq{m!og+a71~TrN-rP7HktJ~E1mYj!pLk<$EX(gM8xK=B>!b5 zlb6$lw0ob_Ei!+e=E?A0zm3Tyr;`Q1YMkLZ>vs7-1IVfRa|O&Zt%>fj;oC#kO__@8 zdino3k;^Tr8O+ZhY=rCa#{m>FMw!&=B{So{X$0ufF^9HrcKg0U&U{g%g`&ONzt73# zj#jN&IEc&=96XkUZX9f}HNmZPD;)s8g#byBL$S|G)eI!pc zb}Yf?bjJEK1q*Xg-A&qsu5LqQ^h{d{l@pV2t4S;*gDjP79IPW+bNbl|4^{p$?93_x zm0H!avUHdrEYlGmZ4ldPFrWAdNsKYzsj`5`E3@(aCOan7}MfcIG_b zi$?IR*^JJ$kT38zQ)d@nlAye^)X?4ug-5@F^Nfk9;b6wfX~vQ>xRCFiKM{-qvP=Qk zlm$@aJa622?^H|!0$w2^?v2YK=2?yoA(PM-S=oplznjin7Rbt((vN0E$9Dd87!9(q zagf3oi$MBk)r=QhU+Axo&;JT>4F1iD{uy_r5=Y<`^N1~J)R9iW>DiwZe1X~FAF%}7 z*UsDadUA2~%7HfxSR|yEMU6UR#OLeZXjL`Q4A;j$*Ta_#_0RX;0Zm2j+@0>qbc%An zdwZ&vg~}sE({B{911m7@~oP!cCIwQ+#5D0(4I0i}{6etJgnBFL?KqGHBC z=Oqk^S0*dMtG+Kh1p3=Rh4u4WD@y9_G^;2dh^v)=Mvx7zI}oh8CthMf%E`odT2?#! z;{5lI=q0~1q0N(GWdMJn>M-DsB7f|Fp*rfB1`Kcl^zxnJJPKV0)3E$wB(buq=Z>}7o&Y7vzNuzC?67IBfFKdEzrhhO%{zbTvGgvvl$@2 z2^7~1_zFs!D`X<$CfY!dl$EE zT6gVy^L^3$k>^BIl-dE=71%nrSeY;#UXN1#!M3t-#2rb<1Ygb%Z`k3}@yIn;ldz`bs(v`&ugIMJ#!T4MLO6F;S#$jhVeA$VRX; z5{IKJ97V4ya;@e-MAlSm>52l*CT58(_!`TKJEPjFF!&3`(|*cwp-4I*Y?_5`e(qvrD>kvRLUE#e`GKbJSAtKZgJ0$7qf6R8dr8YOCi|Hxaxl#NwqUFGTk8 zH;ENd&xZ9=H)&%u-YlIB>-xX13U`-h@t`Z-IB0U^I~~HBFd==r!tp&4E?1HW+K96> zO`@HYFJ?vuz<9v`%Hd8}bX9n11lD)ge*bZhlkg2)uu=7yE{dHprmDs8Cr6$drt*dG z+esc8UCB~J<}5#jmQXn!RxapKmzx8o|E>B~=QwTx<5I!@^!8H3K5sN5+~m zMkduXj7$&ZNM~!05L-|44u<}l@k(}EjoYMiDrmz+hoasMWs1&L)i>X}Ya{qxSOx3p zHDd%wOn4b;p99EAat3++{EQL3x6J(hp-h5@eMZ;);$=xZeV$W!I`Sum7{JkQdkw0B z43zqr9$ZW2QG`e})~PNK;s$qaxst1X6FdF{0hMC>sih}^I%BeO>ho%0o4U5uQFTb- zilTV#9z`S#CuyQ?@<=@KOWi`sr-cdvo549=Gpmc^#SZ(JTby62UxW(c^bnJ_N$vW0ZxnL4o40Gl`^L%hDdQ zsvyg)_!9Lq>{~QifC+yj{VJZtq5f=MXWJpZGw%bk$@y+*Fzwk@2chf{D_b*3OzV(y z0T7FU8BF*Q&K#Cv$09ST{j(9qr{Yx7Z_HwSqJZ8D0_Su)Ge>%=<{L7M*+SYeyA~ao z;6$mRp8G{O_z6QHtpCAMj z37)V+>V*eS&$nPMW2=yPrSz&nFn2XURkIE`3`SJ6qG}xB0H$hIF(^W=1CqRdI_+Sa`jpz{>O(;#ohoy) z#s5BeU;2JG)?NM?n`&so&{$*$PN~YAZSI+9y!cSE4|e~`myi_`Q#8+CMJ7@fiHR9L zREH;E&onoR>D=MK+Nz9v)_74G5Xe2XnA2hRqp&NJcj99gCDq8lMdTQpnKXlyT=D+S z({KVK*7Du)&kM2#WaIU@T#dHf88Lgv!iyVCsG?NBp+i|y5p^&!^BChrCef+%zKJ=* zLhvD=Mh8)_**vx8E2!k@N^dJeT(V+Qq*ACRT#Q z_I#@dhluUOy9%sb;aiCsQ#+V+OwqOMiNt2Azhk)-I25v5^r_8VmMg#5FHyj%%k6b2c zy*K=xJy>&Y7GkT5QV2V+GgeSF>;yN|ZM8G~{aY}W!dkLBt+ipC5>u65>lc)S5`%-@i6CBG+U?_?m8PYWvnBX1vKe?pgV22bBd}D z%JMm(=tMqgW{cU`g%+8(N^YF~2(e%yMB1E?>rrlbAV2!DgBb&+-P6w^UHbr<91Nlg z(Q*(H@G;ZLuo}jI{*8Bt>Cq)e#sMTwpQRGEbZ6 zQH}-$19z};t}ZRUmz5i`fRnCd} zXd=$t*8|eVE`w8qWw}_P*Qdd?!OGCH5y#^C)*}lo!WN*HGREzb=rGa6Q98X!a@}=i z3ZO#tA0FT2Q&+!l<|4{= z^g4fjKl(&Nd*gXLK5;~t8}e({iLJw0v)6g!*1m0Ypdvavc=FL=p(_e|iij(op2c*K z4Lb72UES5YMFeb4Fy|CLy)${t#xJ_MkS|3Zd*xoSM;;qjcry-|r;n|I-mNw=e09dg zaOP!pwF%o99k(LaJ^%O?9TLf8MYko4)E z%UtvdWkRl4v}ODi>Cp);HSN45yPXS$^fV-f(q_g&_Ki1{UEA$lll)yhouDID!2UfH zYC~Ul^)>cIVx=tV!~bo%?)yr77P2X3?Ah3LwOdwyoyOd&&`G;vbB^v$v&p5jF6s2@ z2tF!fohO(7UFYVxeVySwm4XGX(_o!j6YG)l_*`b z#LTFfGfy@H`x82fHY*l3<{`o-okXhDR$sI!Wel#dcW`W18!lNw-n^NHRt?NvJ0V4d zIXBD2R2mwPe+-B=?My8py2c79Y|I0x%r7{orAy8Gq04q*gKbpaX>>=`>g2*>Owc`H z19#C5D>5q#*VVMgXUc({sRDvx?OF(%ST?O2QCch4w{U@(r?NLUn!m*rS^tt+wAiIb zWTJpy9~ppppt>)XYus}oiNGxVYh{HI#q*&L5BU4Bcgb3+cM*S@uE-Hu!hxC*hKkcD z7NNl*<$DY6@=wGg@2xMrU?2oVL;}~#P&aI(&)c@jYZ>rNEBkzq@&(15H8X{yx8r#^ zV87V5=KzvsR8%r<#e&?8F#^#Zl}2c#L2y$1rym$%NtBVV3Zw06$A)=swAsHRDQ5Yu zXLheVl5K3(A>lrWF!CXld8|9=qH>n3uW4LwMAR%c{Q3kP(KnFv6IPd_wN)hc;?+kpX-yCdymki(MlT$bSP4njwr8)zLI=YhE7qQU;iW_wN5 zO$G{beepc5ujv=p$Ns~7;ytF`+4g8GzK5)f>fV`X;kId_se8-}`yf^N#y)2+b1rW; zDvxWCuMS-$-G$!wR?g);0PuAhyFKioWK(ddTaMlX~iUxMq%A+qv`I z!kEk3j>x^;G?as16W`y_W?(mgsc5@{Db=55E$U&_p zHNDcWHa9(bhldpqOD0Pe>(WbVvV#}hUCOJ|(WXA!=T&`WRkE(h%bP0DixZ-<-Ojeb z#!&y|Y`O6QO70J1a~tlOS+feMSx#%S4?VXHeQ}O3yJQ)%xeTW~$}P7ddJ{ba>rrtC zuzNA;j&B`Y{z6H)I2tQG@)>b00na90wX7_LWBTJc}ANzLZ@NyO@w`h{SHUyGq&*%T+D^q zIa7B1L_&RJ8e%I9RhzE_TEhBnY89 zP_}U~4zKgV8CZo8K83*3k7HdpvfAxCF@KRny_DZ-K?q@vJ^Rr0D+R~kdQ_0kcxtGtYK7ZWTGU{5a=aHyMc8Fx z*9hLFLFfj+N*dm&-8BB~i%BVTsko&@7Ae(~0PN2%FgUtH#U>MY2$*1aTOUz*>l&zq zd-TYFetDN`H}An2p*uoJ|Ff<+`mAIcOc8|;`*$_+fY6JDygYseGum)Ts?SdOn(U{t zv`NYDdP%%bXtcsVM8+KcW&}-`(N9Vx)KQffv|Lsd=qGE5a(9jbHYHkEjfK)GBd{V^ zj=+!kR9sjaImr!KGg9tmuG<{jl{!DojL?#*xYjIN-`j*yd#U^;;PH)dwha(g=0M@x zoJ^hnrXqS}Mp}=DKY?9`Y~{PnQHPs}M^jw&`h#O&d~}npypJ2oDLI?k2(XDhs-}+R zV9<)3jz9j&j&69Wxg@}$XDjjWPy;MB(-Nk4}V)ycJR0Vr%n8O zMrK~V`5d|Pc|&ONOzTs7n`8f~+ueUhONXrp8EK16H>mddqT-&;@G@7 zu^D(H{%V&t3!QW$6tqHB`$EZmcQ+u2)^L;?%*MgNU{sWYShIXJ@FSNsEYiniN#+AAvlF(Fwa z3k=s3E5ajA9dBfrJAY@)j;wu&u?#gd$6uq}XiWSz3A){=i!E9ju;XUcXSR_puSlmt zXPAfE*84@7u=*I(F+O-Zbz%-!6A5Qg1tIBcz&C;;V_UtD5S?*JDa&~!9!PLIzT^|~##))1SD zzaOWjGJ_H?O5<#jltx!xB59U!xhNjxYiiNe?OQ@;g2HhMrM`6$Fg{>(Saw`|FTBin zrB&vB;0V`EDM{F<%Ig+FlEKIGup$RI1pcX*vfJsV&arBSYkLPqpR#w1*%s+3W`xzo z^iDFXPqHeCnyCO-{xK|t55fH;T8-2_f3AVm{n2nKF0v?HB5x+c-yhCAD3OYtT~}mT zhhSBf5wkCd798R%xIg?9I2>&)sBh=MWbmFzuJhZkUX126dLer?Cd}E2Sr;d!9Y3)+ zbi#D<_Ru~1c*1a6jxhQ&aG{vPS#b6G8r-n^yH5Uj)g$+^E|KK?r1=VDZ+P4MNV}LC zi6F-t30!7hzR$Ij7Ieu9&HP;%Th6L-VA_n5T{&Ry(_D|UYR;Nc4UPxez(BHUa>r(F zjkjrCH5u*vK3p|fAUe;rh8%t(T(F^ynXH8`jZ@=(c5qe6h&IDRWRF32q3fHtW5efe zOGP#QUQe|XTi55U{d(x+xca?h7y4i0lxdpF>6o``i^$=VvZnkz1F`)R_dFAF8eFZc z|GK}Sc>JpP-mTOU%lINk^D-NlxVjB&IWRNvQQK^vY5O9E)B3*J@Nc7Sn$_m9)}^-5 zK6AI)5tH|~S2{jg)YY)simT&w-EZB^i4}jFw>7!({;a0|Zv73Y`J3zg`k+LUcRvrcTqjx`3E|U*{&)Ht-Cqx?Uxj*1)CEQ z-->w+bVc%vR9z1j6v<l285}M@5aF8O z#8;D`G8Cjgu@bT|@(z~7Hw76VL5+JFGKi%-<%IocNqCCZ19+mxO=^BrS5AIy-?Kve z*+Nl57019ls0~AD?ga=*wid}0C_|`(@z%RR61X5i@DsLq<;d8mc7QkHnU@RCm*YZ) zs=}MFjh8s~tmxkXJEy;j$$W&&l%dgd|B73#N}+B8A|ur(hqEx~7cdwv`-uPWW*!Kn ztM6M=);6Xuw>VyCmRS^vK=ul5wt`d86yIyQ6GRWSi{sjNN*FWXB4y%<@Ds`>P9y(Q z{*C2g$?mGP=$zJaHd|FuFmYquVxF3I5s%JFoKTk3WZBHU>Pk&egj4A1H+B$v%q|3< zU$v4N>En71oDq&%4Ob*sV%DMKyo@FY59&b)YCMseX{(gm%FoJ2CnVTmYONF%p&_mT z;LM|Tby|>C3+;?cGw09JaqCp6x0!IE`MisLm;%x{7^V2-jsGdOz@~-)=xmt0-+BE}ntZBS2Ph1ymSXini!;y4=3%34cytets5p1`0Lr%d$3 zEiZSfX+|*{`C^777qL2BP*83oSIAC4BvuLzf+w}&E(4^zTG{pEYp0IhP^*h8j7NHy zMJb0K`1d@a84VphUvBnYU@xp{TktF0g42X$EAM#1rf8)B!l2q&BU7k<-|t%*XMPz5 zzl*ilRrcbq%jy^dkDhqf#W77oT}1wf622B$>*ux1FoATXb~g@slwy)?EB?I$J~`Jr z9Tj_0JrxDjCxX{?PM2T~D0SNYx$oC!O*P0s7^FWIQ~c6T5I6ov@Wu#R!hw;a%KdwF zyl-Ba$PcYS@@!mD$+0{gC0+CJ&a~d~hE;U}wG#at36AP0c0mzkm7q9bFs9l8ki?5z zslk9bP{xNB^;8$qGb3#c+PC7I0s~xp2l8fvAIV9ib=MQ38)Qr{)FOVSbF;qxsT*y0)!E84TMbRLP``^oTiGEO*o?_?S8b z6cbH;s65-tC)UO*VC~HmMqEe(ayekoR^9H}`F$!(;_-6XL=1UEl$p|W3v%HIs5vz{1DpI05n6#HJ<~ z3$EzqNVoMgDoF|}u2cG=bPe*9mJQ;yt$GRe3$B`yY4!Y49yl2M{dZOR=nR_Ek^0l` zG~m-Z%vY?B3Uo+}fvDj;ja@GYb)ka3k&@VP$}QT7L&>gf7VoNv$3~-erX6+;m3$?G9KiuH2tRCXzEl6|zp$n4u$Ky-gr-%5 z%m=5X=2vt$`;vN3E?mT3H%~WmpgebzTMvJzlwi&|#+k*9-lj-(8Y$NDWeLiV@%=LF zRW`!zW;GhSL{j;tj!@*`QDtA7g7QR4SJmOOm^EHA3E!avE>CYlRxou9=p+^}o!8^( zxPi$WT`vYK{ouS7^v_mfTH z_F~M(>~TA+|Gr6*088SXT#9y}6ZFJTj9;*zA5JoQPI#ZLmM%bbWumk6KWuHJ)fk3% zwGf_ATQk}0KBtyIAy78QW{77+$p#ri`l}1Qdd+e;;)l&*jxkfE*nP~ALdO$gn}^{c zI}UdkojMYaFbXewq+zI6Kgf19#mM>uyE$bo?VApD6v_Y1a>Z|G zXzb`{>p*L0rSIq%ow(_+NRJevD!svHW-h3Z;Be+&2#V&|7N9fVWOT-6Z94E&q8iZ% zW{gWkR7tWw-?j(rMh-E|&m(3W0z2#G>-~9K)AjTGIVwxuN83d*hvmTFz`17nM4u!j z!~4b~f{aP>7i=ZuDWL-x9`Z)qHmrx5-@lIq6Et=7p7pA|9uyDo$~3J_EO+w&yMHK( z@z;Nu;kv*odV~gF0*=IA_|&V{T}1Cx*CZ5`U^L;r4(xa>FPoK|WBSn>METmwFP=^< zi(ha1eqp6kq0X+3wNho7g}vj1$y!Ugwwm{up(j(#0!Kkw5kJ}}^mQFGxAf;{N#qDAEP_bibPY6L>#NUy}ZakBv!0aEz zC{?h8DzZm%h$*j-pHp`-E|D=vw#a5S+an6yK74N14dI$X<&bCJHpqQ<-@&6)ew;HUQ(sJ_;W_mgR!2S;# zm|ZLRuY~|(V!UbuYMlTSOb`+(K6o`-I_?0U329C`u~6NH#vxY}|IEH4I z7*aXdXP>Hd^U6l*#%S~F3(v;JOG~lN_4g}#;?xni|Ljg|Y~$=z_sWLl?Q^Yfb>iu+ z=L3`GMVfqqk^3cZtPwX^OY9+2*-X zba2q(9T{Ht#h^CBLy5bmfVihZKNp)|@s7^Ip*O)xtKFq9Qiu0s@4vA7E*n9`MmR2n zkUcr1?IRm`XD*)`szBAlVYei*J{LOh*nUJS7MZ4H@nQ#1=skD-n!B8n;A zFk)Jm7<{vA5t(jriV|J8i~3JSbecOur=%kAewYES&($o=go~;zL}qR;j4Y`Tg$9+e zbI`Nu8B)x2mXvLW50EP@+sC<0V(Ui7xpS=2(U>`>MqXN4ijr9}RXKiOB}5qAmcSP&ovLed>iW^xqSJx{vYU%0j7qcYJabnzhB~kH|6yxM!=%DfrH_iSEh2m?BM!v<4 z&fR6i5FChd_(bJGtwb4>4@(7!q_rmgo6#lfi4rymBKx4wS-pqYS-Jz@@s83teWCnT z9MXJAjP~yDI)7pR<{$Ddx04wwST}mpfC}Xu_RbaT_d0(;^e*3Xl6dH-IO#K4lqkGR zBbGr4M4L2i7YGi6CJvuVt26-Qx0aM~#nBR9r7EW*il+=l=a=0yM{n;T`;)G^S(_e} z>;a>8c4te_(+P-;BNo(D=EgDUnZuDAtTs&Tc0Dw9D6GF>zw)uX=Wl?Yf-W8zmQU`@a>D5Q>_%`oi|#b5JlAB9Z}D%TfP+|Ddr8+Vz`>*4jiDDNxH= zzc9=s5lYW27=ttlkV@pxCLUR7lSck4V`FYWq4w5A$b*UkKUk^=EJVX99Ia5T8)*`~ z0nX+w$wn%RiSm>YHXa@h1k$ix?b})!YhJ{SJfc1>V_rLEHmxRx9bOJsYB|YFncinl za4)W)V>~eNP;6-5G4d%<&@zi^CMG<0iM073RFUko=vUjD?XV~!Jhg0;QvTZ_=V5Zb zP`^|Qk;tt`shzze@og`S^C!7p>ElNyW_)BI1KQfqlp1flNTX2k3X&wrBgBT9XQ@ zC?LOhY-){tZI%*i5=`Ju5pSR-%@s-;dS=IsCUo&4LKgtOMzXi6UF#Gn1`57#UHudB zK`BBEa)t_ilOM;kxQ@U{6;Ek#OEy;dFFP{K63qjU5VK0#Y*6xLjQv9r&{g$9$~)$%QG!vH=&!M|#yQdUO$ zM2LKEIUTmN!5QRZ(8-Him!+6y1)F(yHaJ`^UO@(f_ju0Nh^6c+sMFEqiqgOO+K-f8 z(C{o7_2)$AER(P$`d73G!yAI|E87=g7pXUWuZN6-Fo##zQR1^LO>NK035io%^l#k5 z@Zv0Y7voFi8BzyT*~43;^sj!VB?IsWxzOY?$WLyqaEO>_pb>rahxZt z!?NULNCW}=!^%BDuL|BQ5cIphL+Q?Hv%5-IuIyUmd2^5mhFcwhW0f>?4tRc@T(=Z% z2y;=Tm^9@MEe9?mStGDJ5_M#dd zbh7^ZU#z`Tj4nX9CED6;+qP}&wr$(CZQFMD-?nYrw(Z`HIp@rs$(>|!lAGMOs!F}p zTB%xV<*TotfmrxzMANYDplldy2+ac*1+MMjW~4+aUyG*;2W9XlviIKshmO@Q*Qxl?7tpl4l+`U`*;4=ps_uGp z^l~j(4<%m&R`AOti`NI=J?4k6p>L5n1~l9o(-xZ-5+%$t@q7I&iaM^S1wr@uu-kUT z1f&s%mqQ%itC^obtdX}5+S%5TV~XQ8Nw?FpL?RzIF!x|Tkl|+4pvUwWDQ!WGv?D%$ z1hS4;Pv~;>s10qI2%JCNfRm0KtIohV!-%Rz82PLXu^xA1+RgB2?C`XBWR^CSD+Q7> zLSkd|A_C)cSH~5;pTnDjPe{Ny8EIZYDoJ~moape?l@2`?@bQ3j<`k;R5w;w_hun$m{sIvU=xmF`#v_4nunZHJ zQ`#S_>`qGe#=hE>*XTC8@FcZ^;=O~pf05E{OU8D+-`RnG<6jS#w?CCT0=*qtuMg-7 zOcmS?4W3=^dtx?n!L~E*C&KbHGy5D}>;q)p)xfUz|LA0{zl>GO4c7itbdX(7 zR4v1{;c>kCxHwNx#S?KB&w7!C1cz*R0gfpftiJVhy7x< ze1TH$WEgo+@$g(*hJ-6SQip}rIc}l6gRSl=!`kY8*@D6A@Ro8q z1P$&_1Ble?eA@LEAefyy2g7$U=rby)PVXrb+E>WHCWD|!{!IS*UACvY|Nhziq%GS; zA{L9CLt?V>$&EM|H=$`7i>x^I&@iKHOn~-wNpOZ``S1yO?VYx`8A0Wh!qGQmdZ$Ke zjvs!+WP3~2!Kd)VC5-ZtgoTgs+|uz(%<~WL>y1u-K<@F+tlAsW_6VhT?>#&N z9kF&|_oF;J6z3g~Hv#sej(!NE9h(EEG=cx+SfB|Px+Mqy*6}EC+=s|nVGL@ z2sKnbVh_`cMPPmgc6#!||FzQl_#rZRzzO?mgZ;R}d~B=y=RMs|Q29WicaX2i^E2o` zU~c<#0*59mm+hQ0F_X_eGhw!UEwIXZaP*@ zat&2+QW;kMABT)W5brz3%_FkjDp7uvt`PDo6NON=KPSLVpKOx zLZcH@UJ5J+D_eK;BUilHK4n*{`5OA0~0<+^)1@^_*al1wEl^}IBmvgVcQht8Qx8Hpuq5_@d`LrqF@)(q)^)pfFiSSImP(T!xC#RE;1bO5qoc$iS8261Bs$ zmZYp|2h5tWrj6h)jcEz*i0tFsg9dyoFVs2=>PPGw0X)ZA+jK~`8^hnVXLhph-69Rz zSsTV#)4Q=ADq0Q_5_iZXBJ4-58$leUX!er0_R=8!38Zn-+3hFX3&Tkuk`t(w=7AR} z9gAd7rdxl#>mxY`BN|Q|dfBDkYXm_A4-8f6ruNSW(eH3L>&5A&WPR)mqb-b+ZZ0_g zX_G4az>;%Iv4z)*c;u(Uyq?Tb`rr+s9VN7I>iO=D!?z!^OapR3YgHQ|kV!R$a&*y6 z-MIR`FrOcVHK=V|x0%x&7v@ZnFq z#21qG-q||xcyhFB`#JsL7E+OtaQXKETC=gniT#iygLdOvg#=s+hkQ-2Z|N=17IDC`emSm1rF>7NFRjjyeEiJar^ihrfQ< z8xW=J&m9~Y$-2J3>WytpPe$HnZ8tl3jsG4E?mh-~=?iZK&cbdyVqghC9+m4bFjsS# z3PVCsax>fJxB1v!v`=xqmO?&1YnV9jT`n{0y!ggoFrQ)VFKQ3upA9h^?^Qp3LMti` z2Tov{U(W9biUf}t1sIUM;`}7}&?~{r5|1t^rdZ2 zv@m#C6~JLww{G;Vuk@g3E}@^$U-+A+h*K;GM+>bL8ZI2vbTmfDf~M2)UW#`jads|0 zu$`<Aj1qnq5inFyabIikCd^d9}k;t+@auOuWW$jMxMEx#|Wo?a~d>;%z< zS8d<2d#m0{R4C4~jy5-c!wv8R1ccGz001*@ss>42M}ehbG zEQ1p=UPU%?p9lVKKa}YjVG77v_h$)UM4~&l6|MS(8uThC%FT?%wEnhSI zoDq!%upYxHTB;mI%%{YvPlOc%xLl+hVN;fx^dNAP#WYs^`13fvLd8030C3T9Y1c#K zhNP?s>tR>9Vx1K!OEk->c81dch`nW&cT76tq74pxd;M2f8^%W>pbvCaELu0ofeM63 zO*#|VN>_K$8cj$#%f^Tz{%56~XM@o$qv2u)HKu(J$vTPwyw)lb(wt$UL)AMdy@`FG z->@!k08xxDZ99vNHY-#xff7mtv5c|oIcQY)8Um4yP+JXt%oZ&3YqT$ok$Rn~BDhS3`*-hlU(1$pPUNJ_>l_~kkVjgL@uu&9E zsw7$O24n&&|Al1~)00u-Jc z)GVL|m{qY@uL%j`^#}&O=)4+QT_sj=Q{!RBjsz}ER>kVH2{weGUSC2{)4j&6Z<$)% z1MNrY6}83$m!9>nz`wti+=95ess@Ae53HG10>88mca_6Oof^c4ki)Wa>4cSelPiKm z0UDUfiS?Z}9Xb+$_#YQCwS-Z=ugkVyceN)97iLbFOo>G9S~gwrjuBX`k* zqY+LQUJ{+|Vi+KI2P|~i!Y~(8D)pnR?zZ)WR-L@aJ@B9%w37Dv^9D(!ubZYrf${u- zTjQ}9X*LyRU8Xyp*Q_qB`ZZTQj;ua`W2l>_pygx=Ye#d_h_=cR8-SpTWl?OD-dQ=E zvvH6t0WQ8IJT$4oilGPv?IKV@$cdnuti{&GXQD!eLMiw`OOch-!Ijt-G02aj7VJi8 z#tsFVStz#>vm)e%stL%Jj_8@9nBbp=7IcGLaO}V8_5BS=GYBDDuB>gv9r~%KqnkB4 zw?9IkQ3jDFHec`s>w)iENRM;m$3`b#)kvPJzStK8^n0K?#R%=Tgv}KT&|twkg0-|z zua^-nS`&L2;t2g>*++{vR8EE!!jtB9&z>@!#^d^-L~VxUP8!w~l?Ixacww0x^gT@^ z_;?TRqpNGZD3Eo~Wu6|hhqebc@{Ka4A&JKA?U}gTi$!~{PN}@&BFGl0`c+1TOMlX1 zB!jx3+dtSHzr(c&l#98inS1YRl+lawP51P*ZK2#*3w&BMDXVlRrD{)8fKRmyUrKQ! z`JKsVxMCq~xj1odb#@}{E34fELOBGtvt6Gn2j&*+KV2aa8K!)Zr6n~cF+`WGwYIj7 zmputjZG?Ur`u^h*xhqvt!QCeYhR-MGe`~;VU5U`aj-u#)S<|0K(RY96@(J~;-n0sf zFy0dOGy~Xm?vtr+rNm$1Owx89GOw3!+TN5{%bODFuRwKc(fUFuXe@Mk8ROOEtT-{u z*1TO#xp&3hM~!k9?IOM0x$W5YBK7|86XoJ*>T5-i>>Sul8YU$`2`wE%TJ+xz!k7 z;wj%{c#SP5Ux}MsUfKK5xVN3uouzHARZi zT)^z`f4C2I^iA`Bj9dbH%xf@P=7+yVT7L3BW~*idc z(2@Ysg!phiH7J5iSxd@SxqF?0ISZwRi1JDOLsAz%dqw<&U9tVsEroM!>mp}L=U@lj zE*poe3d%eU<9+HGJqSf5`|xzGw*Fmw@G3QJ=b=TGjY2!CKY!i!R@wxWDvpv>j;L@9 zoG`|f;yRTKV^KA!41-qM+BUHfBMz35q!}*jHDpjU=#J&WiV0+e#R5c=HHtN-p|Ube zYZ1#yY&5iGewOpS#vs6f~Vqtr-TKMNU-)ply#lM;p zEm!sthaw#;@pC}{9p2J46w{#p_h<02(8OrIj-onJ0)Z%*wTtCy)zCr@eF)ajeE z=7&@^jbUc!L4)kQV`lh>lGW!H`;QXbWdNQaisv=b1Nqogn{#HexcSlBP}9N3%K}>& ze=jH5S|5U`kQp;~AHH55elDz_f~ioUUCzNw4p*&gOuHe_Q>6k+f(P7tYXnP&B5cBt0%84xVvfj|I9k3vY%RxXQ} zx0h`oRI@l*f~BeyN7Y*CIF>tJ0v~>udrXiPh9J(1zRMMHGgjR^i<*ci$6X}4^jBO@ zKLV)bca0D=S)ar)1J!{-UDw7fN1d9(H22str&IznJcbuB%j;IZjLOPb4l^3mxX6Rz z(koa6Ms1{*1tW2C41C%SW1Cy6wHnvn^*xhPEhiPPr`a=s}_nheLPkA z*2OWCGb4iF*%Ll1SI%kDvN?#6MVYvo$eOYCbggFW-)4zlnE7CVM%o`KtRW)|D8r%#3ZF{#Ps~Z}$HZ z5Hgm|E~a*-|4(e(qAIJrq=3q22~!7$g!qAuHW06rfQpDHSgN9uK@4wtZ#-0T!4f8k zLN1B)8`ODkeKQ(LgTV<|JWFZqpK>Hii3*JOH%Bh1_i2~!Z96;p&F|~$5$-RAn25^0 z3fPH7+&-%orWV#LV-A{PkTbEABYzO(rpWO8?7U(aBE3hO9C#+t>^vD^%0U#B0k`Q! zmW}CY`z8M=mgg)pnz`ChSvL&*laAQzf`!kbObLaDn!1>*x_kcg>)S9y=OJHD56Lh$ zWr2$XhwB?4pljhbvA{MAT0%>czJRzi`^$|#{ou7Zi3yTwEf;kS)p&WI%dQgy+ zL02#_MTrwtInn!Ea@d~zjX1BAgUeU)s9gW764cR#M!0#zT+RvK+es;kw`s=1836XoSu4(~@?Hb}xQ zY57re>_pg!}lm;MG?JAd|Z49ttu0{p1E=%PIM#2*FW0Q%BM(65(zK8 zLN6coJJ)TVoEy9B^6xZ`Pok@?+1750vZex%W0_8n-PONmA`yOL3bGP#u|^>f=TxI= zM8lf`MD-#hz%4Ee;)n+FNJevrhI3Fg!hAKahocs8W()JZG5gp;D0hln4``)tJZk-F zNI$(IQ-O?==hvF$Ri*w042WiRilcf$Ms*5vy9EOnqUNBwu_*?+8v247#zcZPSb?S@ zYJ|0g*DNJKQ9`2jWZu!>uW<=S7Mp`eUo2yZxwr%oM^8Ig;{hz_Nkg1{F|D;u}CX|oL%8GzF`2=k87&;^)X$Ek$2@#ec7#wOg zSb_mN6k#;v&@mYncV^@h`CprnKaN#6HKkS@+EvS)fl@%qBX$~H>oaOynq3;UH+o(E zsdxUj-cP5dk4Zj$AK#C+erdmaXWPzqJ~ubzc|=9n@f?5KoYu$8A;yOe99>`-AorW< z6Xp&?`T5u8qCs6)7_i399zK9;PfCIHM(^lJ2^iiU{xHAsH8#sxy*yeb%t3!tr_2F_ zdK1*8YZUpdLqOTOKVD?z#2u&fr3QpzNQY$OY_QpU?^P zsgv8lE%5bEk8FVf$9T+amq+jfSNylI3K>Iww@HmWe^+pmH)nxX?!A3+-<;(G(4D8p zpc2V0j`Rfd@e7_zca<`e9-EK~U`n!Ho%I7QP0!JH$?|s|H;#^efNDHgGY9=5^p`8+ zCFS|9k0*ed=Qlh&5cmDch(~}p2j?fQ#(#T2@$*|86ZhraKQfjXczv<8t+8IK(P_9j ze4$yh+gw#yb2|9!gi&v0k=(q%O z8}Pt4vX(qcV5^j+skaxh$<1A=9L^i4(k>L1+k`STF``Mjkb1L=9QqQDS!aNB8ntq7 z6vJe!9_Hy7rpPfviF`G{J13rB63g|UTD-q=X1HBkh=l&5mTuZe|3f+fy_*=lcXgf|(;$b9mJPF|@>QqZFkg?3hI{jq{!6riE-8q2eH%0V z`dn)K;2_M5KgOQjuk8eviBIdEPj`rFI>F&Gc8I4DBsWyEl(SLoK1@8Rfnw=xCRd)d zv4zUCI5QEaVJ>s0FxpMdB4AEg=Mx)&%$VLHGAslVR?IYkyRp7)@|0l$dqo|Gg|pp_ zkaOU_RNwE)S?AN_z|hZGVOSJhT7jik+?ISHV;%qYJUrBsm=fp<-L__Hqr9S;Xu+L% zImYi1qgSR`JcA}5-ZkKe7?#pC$qKqeG^)iGKn43!r8};XQ{ZD>UBzHZohn6UI?t>|DPNMw$l8(aQY~G{e65u8o-BnC`r>AjD5hA2*o)IYaw`g}J3W zgqqyQqJk>|$9%?4&T}MOui822?{N&d(eq?o3MUgD?W9w~c+BRYT+Au=5!m^42BnA? z2~k+>3v8hRH}}*8Ilr(6E!L>9D)S18Ya!fuyrgd zzD)><%~EMSqfAF%|E3<@liIBtD=g6h(jUIz&ZosF*t=nW5_XA9j7ug=(dE|8`E|o7 zlxX5LCq_G&tB4uui1beDhDqk%%S66uRix1c)#WuBU@wd2)GwhVodVm^0_s_fWu)Rj zIgfL&0grQ!XzCnu;lNCO^SS;+$_YV!QqZu=R=c4_V^{bpADuzt+0G=J-P0sBj2E)7 zChYi3TS<~!NgtSn+F+s^CAx>J)(Arl*@=WTfWg@jio;*l>?EY~bBw8xR>L@dO;)?o zyTDfyed?&2!A8O`dBxlc9{4#M?zr5Skb44$i;vpB2;<3`# zkmWq$?cUz9hqVtJY(7bGHg5WSo{J&Ir0VpR=aD1Z2}}ifE~UD#gMtt%;q_95PHhCN z9xoLvOABLpUQ{+d!sR9N65&V_?q*>GvcIZ8Apv{G7(QQgv3)ap3-4XeIiq_=7`|V= zvHtxGOu2ixa&N0)Ly39=jpWJKE=Ftr5=ufsy=WK8)y27qj9e*9qSUXFlKg^WG2W7Ct`pPk!i(qGkOS#6>)?C*W2}hP<)WgrI{+#y#h6BrAmoEqaybD z*ordo&lX=KKTJRe`HZ^vv-APx^a&;MsCu#4+B!*#kwae1qaq-ZCb;y4ID=>9*nNWn z#sDt}C~6Sj+m5W32+NMZj^4T^WsNy2iPsUHU3Bc3bl2NENIFikjl3<))DX)4V{enj34*NE#wkh9(36XjbzJ1vE|0JVItU*3rOUco%4V5CPBD8g`wSpd-pW1^0)q!s40C zv9`eD7vn;YFeP=GJL$5h-g5|esEOHrL;(i0veQND?jqEjA~je%~<4Z(vVhABzJl!*C05vk%a(l!u{132=Pe9)Qrzs zY(LIdkXT>oSb~uWSqt)K*sTQZ0_1q765-W);-9!`0aO-LQ9*$IdL;`@inHeYJI9xH z?B4Mnlj?CyXi-FAngVqKxo|^s;TTWg=@s$D;PxNJ+z{cQ+X$qnVP!9I0f}=cA`ojl zE)+AZW9*S!_lSfATb{H(=-o@MnVGv?wDTU=^5Wwz=4K~uwO1fIkX;0waq4vIm4l@l+@WX!iE$wNXHf(3%F3|+ccZGmMh&&!d8$Y zYAvuI&UTaLvo0m9W=>~_J4|M$&T$PFBqj-`(tlW8kJVVh$#deECIXJUifDFfcJm#i zGX$~#Hu^y?xjY2i7LOM+_hY1F&-D#H*(1Yu}7b_w$isZuw2bpd{@I` zVm|5Hu-`9J|A-w)&JI?$o!Ja$*XJDSTSI!gm<&ruA}L$1XuZ2eJ-Tu3JZMnoSrZz{ zx$4A8_^wl9m|>kx|E+6XJupBzk?{SZb-`!M6<1BOB5lEVCBb7qW@tA2SxwgOE!C@) zik{rNxC6Q@WzmP4X|Cq|_n1DzoDQGZy2ZMA58cDEh#{}tQPf$1CgSD&0(L9@B;MPL zApLSIj_Qew>Kvt8=*~*grErI5XAcyY=ekpQZ1({t(lEV++j2UZ>~0o9h5`Fz$!tZJA(g{ zz+z|-&nrS`Lv+M=Y>s-RD!AK9v#pO474`A)38Y( zkiq@lFpr9Y^K806?@Z0GEB48vDyK)91OWZf(DDMYCTb<*V%i4Iu%2Hzc1&e)~C(Ce)c(i^( z$n|SLHb$YzFX;x3VE>yepV*fKQ33fvrRGb0Ir8WqRA$IzwREy)Hr zqA;dn4T^T;%@tdYih5Cu)to(PfsiYyZg85~9Pw)O!=~YgMknkEtSe7*PTmQbQ1|CN z9q4un$OV;AAHJXtWV#K+D9{|K)fj71exY2ErdZR3z*lU*qwCLxM`zk?IRxPfX*I7% zey9pUkpKc;{*fuSoP2xr>nK)HOOGCi(qsinMv8Z7d*HjT9TZ5tDm#WupGwU4Jd1&baZ>?9rD8k~j ztSH%7#j}ZOqJMzd&d|@1iS(!ZqYy;Peds3p&tU`%z~@}qQPOz(mF4)E5_0uE!B~2<{WeS zAO|?W=Z;5FnUl0S)Z6T*+8hKg^(44C<=-6YO5ndM>+(RrJM!b6y(>=s^79IPTlD|1 z^2)9|(DVVFJHYv%?Ul6kppYp@VP9N3zq(KMT$b4@uopVS))HlyZ!?hb-WT61yEAyE zSN%tCHD*a>wI_UIyYg1_jyX4#0cW)rZr%X+1_DocX~6#KOM%jAo@JJfq{Lv4u@sr5oo=_(9++4cR`7NT-S#rtf>Sea{Q+WoEBZ`34Yb2 zW}i@pLSl09bmmVaTu$)qlaVkvE$uTPDxv#j007GJV8OOm&?avL8;1D{JKrzru+J>f zCM?c0)iaBiYUHbP2zT-)I!tI1EwnWnv;nx<4dlBf?zFBq5^OI5u3k~*S7WeZWUL_6 zcaUEt=C>8A*cEQfY8T@t8fFi;SY7Y}jxnRx%xKllV3i1bJ^4or)P{clc^y6MDF^i=M>Zj>F z+Ob)51f`eAuMFW=n~?d7hq~L3x6!-v`9&dY{W^BUPR*L@|Z_H zA`^tB%5|3XN!}-m!1ACpFF=4co9%N5)rsa`_5Jqt*{0#ZH9v3R*CqSqFwXCnw%T#o zS;1N5yQuB#XC4dz%Gu8WH)~}QuIx+8FlIWE_kp__*>BMAg(Ccx*HT*RJRaI7+Sadr zGI9_4Kgl($3r(?RUad=5c@e>enXyt>-;qDnm_H}KlMdgIu*nANFkw`Tto@99;6of2 zb!jJjU||J+r5j<3&ANxUwu#I?sj~1@#Jk`%ASzG_T5*Z{Fly2+X}ir65LUhskG&wB zSY+RP0;Krb<~Q=T&UNPSqzX>fm#r9mGIy0aHj%ZP$(}hryEc!>o)KK*a-#j6cU_m2PU4>qxUQ<`jXtBdDrRUE~&!0%LEew(_nkQ0cE>n71OKB{*|qizCIMDuR0&MOfLgEant0PD%U=9xG^bAt}vyeOOy!Jk5@Du%$o_9Sh+)ps%hR^w)r0B)*d6&Z@@L@7 zoL?3u_+#V`OjQC~-<)&{|DBP4gTVPvf68S+-Flxwn%>!&aQR+$Ezq7l=XE>2JO1Nr zc%b?csy*DyV_4;2R|2}%Tp{;ehf88xnpTgrWsf_S?OSg)^6tsP-s zN{@;JT7)R}pcubguq7|P0@^-1doabl$fGp*RIcGjlDs0nXMfm7 zzzrS*?cM!R?HjYtVDx-fdb!gB;@$nYckiDMH<-uZV!>WcjK?>afpi|wXc%Pqxma_No$GA_PTH^qzd z#sjY9>`^<_^IevsaMm+N7k|KFTY;gO9vCF$hIC8>`B)z;6exS3TVMb_MQu6tn~1wA zjt8@$WziQBFs#{%NRq^PAr$0zg5!MfR0}g@TZo~Z@lg|Ap)=A40pquVij8h!xji%OQb`` z+a5+@6;i1r%K54PUu9IAn%)O!KtK>I|DA;_`v2KNCS_6<)DU%YvUid&v@@~!Ur|k| zvaUReASz!Q0d1EW0Ih)%+Gs_o877jykdS~ZOQm>#b#SX0_9p3ub_1{1FG^rYgmgh< z?^|({XUoiTe*kgodb=mtd5-IC_WDj>&mW|s=+XdFnVoiP7toG@A(9bcOg z#R+1N;o-;@h7PJ(w4Ng_^;Y7h1yZ>4NVJq|P=^n4%Wi%Bi|* z&8mUCxq|BE;s}ju8Dy>ZKBXK3YHl)}Za2#kk-2JsU3+qkk8JP8J)8N9GK>EX^-@s! z9S+Hh{LbDiMp?|B)*ldRh}es6wUtif{w_v^Rr^UCMGBh6a8b(YAD758C6$a)<{gXY z>dS#FP7k^l&6w0uoVLBBSAZ^qGki+^8%V+_If!2)j6^Np;^`ee^WKt|(}Z*#PS1VIothIv%K^%@WeVj0~f@{NxPR%ua2vz7YD@1HTorj$E<4n&RCm0&{{APmLVeKS- z{f`^Cbjpl!WhxSBl(-V7$9ggi<<95!Df%5|yd3TDL(0s%|AzPAMO#1Of!q0rua4nCSm((eb~-#Q)WwPi`+nIc0h-s3 zc|BAqE8j;=D}t`0_5m=eBwiX?>fLL=ZB`W3P%o+;sEdYCZ&ng3qur=32%;t_0ruA>`T7aN^Y6No!e8j2I_!@y44L;z{UzdqnL56 z0(|Xr-St}Fa_xm5bA0u49qw8Tp=$!BYGVf9Eqd1OWpL%1ok4qSwd&A~peuOi!q~l` zi_a!FerM?RWl*biVTj#x-Iu#-4~C;j6u(u|{3YrJJ(sUwwNen+75}vWq!sW(pp+4= z`VfKqJ_PU(G2iO8;ki09j&B_ExpsUFLC`ms2N;D@yHRhWt0oljmNu35+$ShS>*Bx0 z%;u@0_|Hz|nKPW*v?*m{xV|O{^;Um+ikjD5UbC?YDZQ_uUBcz|ROZ=V*u;nT)HJ#C zUh5KcPwy^m=;eN^Tdw`%e+B+GKg7SdF{bB{?5Z{{?^7S^3-G&9?&DV;IeWDKM-cie zRM@N1*Q?amt2V*`cvnN)qbl2@iS-u>6sR~9SN$r9%2$1eruI`EvFHA`1F^M1!2M5| z?{{%yj~n81Lh($7uVXfJwse;5kEe^A)IG3#;h#e)?zg1=j(GA(I0E?-Oa9%kHdWD1 z>My|f{k_{|rlj%Vjq9$Uq+8-F!n|kNEYD>QY-qT7^k4>bx@@hM>3m+=E^2!47&-WMnyg?XC=tpGu{6jqSmhsz{oK#hXZ0O7-l_TsnG8eZ(qu z#YIoYWgyPJx0x2gw zCe&!SHVauZFLSb2v~#)TicF2Bf+AkEi$U3+NL5nq3V3K`6fG^J+A7%+IX3ITsbZF! zv}N%|S{Htt!sOzqQMgmWXP1jQ$Dv}RMxz~$TK+Kf9*;1sr=&&8(2-_n=hJpN@9aqB za(RBc>ym|$kyp}YPqdYjLhO*<C=gpY}4VzpnLBkPu)P>aZE? zqc##U&yAA?wl~dG#z;^2Jz00&K!Zu`hKNt*Z!Z7WL z8P^oqbQQK)!Zc;7>14#@F}X4G<&xxP{!z(f#jN4%BO0Peff1vlE7{Hb8L)%4{=&+_;|qP%@Y%*X(y$}t|uuqs*1S}ok# znuw5T=u((r@*!20mdX2|KXzUk7?l;c3TUPO9z@bRm4C5%eL@(es397SU7Dym+yv^WdOe0G7l3O9D1 zA3cld5;RJdLxN7qTr6)e)la()VoA7G3D!({u zBJM%OW!bvP%@DYB%*Axeb`JZ>*1|{>Ir%%ElGKu3FzM-`G7MsyoXlMf>_04Se%P}i z3N6kUi~P=b%11W#5gN26ZWl!fyqhFfkx5V zV2S!=Ddn=P7c&Himhr4GWp(t*DyRiiKroCA6n2>~7DkplKv(Wc_{vV(Ed>9TI>+K$ zHj1g0XN`2G7O^Gm zHi8NoO*GQJ^0W=pN2!U;dD79)NsGkEa!sxOcoAu78;Y0MIhu|i>lXRN!l|n%@nOBJ z!g;t^i(fMo`zkgB*sMO!`>@1SzT6vIrXyk!*QudnTXWPe4^RSXTUEJDKGIjKg&5TB z%04fpPE`0q=C^dkNmMKwRAy8{^l(TnjyC;~LodbXs|x?tX#OJZfY&S`C7ZZtYDNUn zT9XTn{DmC*y?fqobY5;2nxeWY>9_UgR)x+KJS5nml$)NuJ;SCd`!h9#SA*oFjRiSP zrBtlCX)ktLsMST{E`5d!JzXf#C%kj$#7v(IGlmvRpQEItqU4n`V^-6%XO*r3PY72P zXP4?vZ|<}m26chBaG=@FF@rcAAu^R2FI&!%zPU`;FeObQLJRfoel9Q4&1N zp6PLw*#djh!FVV%2;o-$)WkuKS5*zL84ZlHY9HG|D*ck-HFIz=&~xQ ztnKcTKd8V3Qu7yu(t~0Bu=TC(msF<;Yx0wtSWK01^X4D6_RaTq!1YJwSl=}PoZ4t- z_s*$yq&KjWLTG@#M#k@>h9;%dC)n+Pw*(4HJMz_u4o%BGiU<@9o~^RV2qc#r9Svr$ z?Q`VxMCFtdA?y36k3Uw7Z-CErFx*YI^&i|(F1WmtLQra4c#Syan{@?QS&d4n%E3_Z zJ_)Q#eU%3qy(No{Y7^4toX1Wr(}d|+Xk&wFmXT{CQ2!xo-Y?`}eSpkGM4CG>T-QVs z3Mj{cZ;Auw%79pc-opgnKlUpQ@SmxrjeRe6aI0SVFs1+hEzgA^Lgg&*4e|X@xgJ-;7 z+`+%$`u6uN?}Q+)9Pe;nV!?aE_U!L;UuvK@_ksw0Gy7NXUZ8Es^Y1rb@CbcN`|gfP zb%HZh>eGb@aT`kP@8Ev&(PS~P- zd2Tibgx*-jw49pEeu&AMCS|8KHguG;PO!lz*^-G$#f1L0C-DjUHu4G9cVnpu{IPI2 zA1HnHd%x`%1$H{_!l?1V0JgDnIrT9qE3oLQm6B^lgU$7cSU1~WpqY^@02;H1xsjsR zI|}|!$$&d$?4IR)`TG*M-9Z=Z_GG?dU!E%h1u{l1I5t#zC{^`z6nS+ZH8T|OmL6rW z(1w=sge{BLi9}rFKy_BVmP`vH>1Tm%IqjD7mnVY%z<$?9H0sGr1^lWgdYCn}+T!9& zmY#|dCZzb#BX48mfQ0UiA+?5ABy!tDA>e*7VL<=14)Yz&PmpT+IcifhP=Zqd3w}+> z#T46T%5IIinQWFTE)!Q7afRPX6(p{-ZDWZ;Zd)J%h?f zI^bOjP5+4x06aj$zx+4M-}?Se<)Me#Phlh;@Ggla@MJ$TO?hbz_XG30GF_5$yRqL# zwRa^Qw~1T?8vHx^Tkq?~ipcn$|HTl^hz+5ku)IX#ab3{A?+;VZZJ{-o1u*76%fbdx zJx;05unu0NtF|Yl2G-8-$M)` z8l?`RCa$QZ0db13iIW)E#Ib!s7d}RP%_*n*gMsJP>p&MCjEsHcI;NQnPRpUIm4=7t zbi9Cy_F>T$L^E^@Ici*OWQ)b$Kcn*b++2m+j92%A7ojr>xagRYn`<6ZqCzbVc*gj4 zS%%@vtgZE15v^eo7=B>v<&X7sJz9gk2G2eSz+VrP zBvVNE;*_GU82WGvf48&FB+yBSI&ljl&a5L1V6JLt{*@d0t<>46KdFkxkE@#ym`3s? zIYxe)1QJ6;3x{LTg<}DQoD+$|qeI}Gp~_}n^%qirgXiQyh1BG#sA;6UUi8_QiR};$ z4~oftjoYZ^1Zf_6t8qu!REJ>iFR;^i{MHi2&O}*9yMqB=ND#3_HNqEb%Me!8kC4}E z&QUBmX-5~KEljFw#sAW)^@9y0AC}8!ljzJT);6>?%E)|y=UNd* zo9oKjZAY0BlI9cq5_2<~9ry~kCh1g6cebCSq~W+gC1)&PXen9t+IT!UjVeH+)>(a# z!%F9Y!Oa=nQRODC>I!~7b{SW5)ZGG>#lzMpx;tr=r)0kV{j%o7 z?_hLI2N~w&r-r+PzJT0K_;M%bLsnm2zO7SlC-F}g+u=8XaL-9pXwhkz^tnY5rdb7M!IT@f|96nu<)X919674`S(eW;;@=`<5 zLK%YzIW>(rRnsnO)QW$TOW)C~W*zKSGb)1`@03)#b)CDqW8<`iTdP@HJu#~2i;VCt zc^ihx;Bdn3*E1$B+6+uS7gx2a@oBYDaJW@N!PQ=?US_=fO*MC;xeO$5&x`XDw~{Uy zc@4ZO+z=P9Wjw6fsU>T@NH$r7(;bqiaP+pPQbGG~OK9T+ZPa&U>gXeBWI$QnT%)9e z*nAqiCs!>?0)sY`!cGa(sF_Y&=rkb7*I#(c0Qt zn_N7Yl4+q<xWX9GW{GAe4MQ*zki90s(l7!r-|N5#8vQS&45nSC=DycxEOuces`~k{FdVOHyeilVl zOhu2JOo6iI6NbzeRUBmK8vW+BdiXqFNeRe`Y_Ch(Fde0W$Z6Eqv*L4(^KZ)+Nepl) zVdarY;velcw=Sgn!p`2=4ySiPwEc{GWoEA9V1!5}v(Po1iq%Gjj;pPJu2p(;=_%*2 zlrb{irg$TL_c=XiYCz7; zDAMl1)vzbVvaKv~x{!r(C&q4vE+uYgM*XyY5}y0CNXzqS#zw7BJ$L41;2Rs4KJ6;U z@co-9Jh~5@t&ocML>Hqv$D~&zp;qS8sWV@F?~L6!qE9qMzXAv1>bM1Hcn!V z@t%mEeRi2IDXt;fP`(AqwA1RJ1y0;n!DxE>GF{3J*Nhl-Nj>tle)&vT+cHV-ll#Xu z#Z1yxr#2wkzdV@9TCmT-?!px2d6vU00NgweF&;jZo@{v_t~%O})xo;nMd(SqY9$EZ z~~038%YNr+U_3jH|A|(GRpS4Uuet$w@uH;1>cM z%z740ljC%c*V{3%^T9d|Ep-$~fzO%W+ zq9)^syY3ts=$K_?iRJWg`}!rESej{XumLiLiaT?eP;>0dfFYKFs7fHmByRVGNg4Oa2>OBomozsKCzj2)Q=CW({lF zB(-pogA3^s^-KeLUkclR)8gOiydK%>NBKZ72TB+DTr%ykfFfGj;FgPU4%abiE_AZ( zu%$aFK9sT{qO;f$t>2NXzXAtnf-QOWo1k)!1N$i7s31Q{2TBm$EQ2k1_YI+P4+8^8 z->e`%AqU2|_64B@RzZHm@0=0ZK?nZeJ4ptIAhe?nJmNW722bHRVFpj(J81@sBDCWU zJRUMJ5P24W))KvWLUu>)%RuUZ_P)6SgQWJY)!m& zhbyfSbyy@6Z#AqmFXpy?U$>FB{6MT_^kL({T+3}fW6;a!5Gc6We&V}a9t5%*9Ua+6 zRL>-KF6=QQ16mjMsF9Z}iu(SLlwL~&q>0J>lL%N7iw!91()86Agh3*w#Ze;m3GD8mRF`*$#kc2>wA2?<1 zCzT6RdmC|-3SoO2Bmc`sQ7u4N+9$IEr8M>wjI1G}Rx*MmB|%quL{lVfsmjRt_1O8{XodB`wf0h&A{ zrN^eHd-IN@;Gn8HYBK-TLCxAJPXE^)S)r(El4WOerkqmy#YIA6=24D(9DN za&d^JO6b8{l4&9n6GOccAg7@t_di`GCaNNVz7#L!Mk~~t%K_h29pH-=Y?~jqS*P6@ zu!}*pm0GeU>ZQORdiL{vnJ*vYu;LIDwgsi$kTkt(3q*0|o<`3SqPfA zBp(wY+@A{!;y_p_GNNCMF3_4QyL$|(d~iW2#&n;KE>!l;Nh?m=iB}=`gNneh-};UY zW5|{ZRbW*6j$C|QAUb)8ip4>4!3jjXKSFhxH;iPbh`KXJ68V}NZNxw{>C!t|aNss3$a`zO@;kCV?ICx#2-2K628UXSg{G`3wGk>RQ?4n=)a^)(LVoeHlDsmGO_ z%(`0JUT^Eim8r}+0|)gwrg)9-s5f~uRly2>nb|K_FUPIV8v%FO2Z06Ea=qk05y zId_{?=wj{ScuEP;mZU8gDtBIMQtRef24geZE38XbsKhw0U#`ALDoH?o-$<5e$$UzO z5aRY6*H>jOn7mN)_7J-%h4om)0ope<--NFDgt>hp-&B|HQ>NHC)!x_NyYj0*ZC_}? zv9t_KL-VgYc6YAc0gU~uE4u9=h5?U_<2R13-+RVccl@p3uRJfA{c$Pp+Q_yD8{&WI zin(X5r0>t>s|LkC6D7Ws2OV~>c50Zm<5PK$ZbH?_@qZ>{P)>IF!-TW{=0$=CmfXB5 zKm7x5rc^yO>wv!fBOL-kRwDccFZ`;yxY2%IF(Ds7RKCmJ!9(A1&Io2-Pt*Z-L}!MU#1hrcG=33v zibH9{Z1cer#bOyUO|0c_mGn@yQenuGpjo+yT{>`=bj)xj!VXd`u- zu!i5Qn|#r%6S9ovozmQnG!?%T6~8o9j}%ppG?kweRaC_iX|rgJv`5i>IkK0_SJlPA zbXPJ(Axil*0}2nVwg@PcHyYs|LzVv*`3D10bciZwz znHdH7&1pL>snVA%g)!~mqA%--Ye|(4WoX`KY8H76^NOB#L>u|ScJ$fO5pGKr2L;e< zSp$9n=q0xLhWVH{(n%4Ose5Srn?cLKEPQuJYxneIz!dlDkk>?VIu_-yCCK!q{#&-+ zLj#I$%I5FSaB!Aa5H7(?S%W~O{fUP+#_EWeb)7p)uXgyAp^*i<2NWP9+gVTAJ+Yk`W8X?qH#Rb*#B!b%PFO&>ZOI_+NvC*(}jqR;5?v=Dh;mZe) zRJ+QB$SIf7n!p|C5-;<0gDh#c^<;+n%we}X=^<)Vl~T!?meOj@;>%Cbp6Lf zAd~l!`ZruRameT6X96AUD4r~vj39Vn;!R7GMlFVXIU<4^P4hGHVapmioX}}Qp6vv- zM=%C4G(a5dZPth4BRtkg*2icL{%C*;s*Ydi&7axSGEf&YEd6Eo2kq&^XK;PjK? z-)81^ggo;~&;v!eEs1KxPpl+JIO1O%8xL^%=hVuv@V z8o}}YeJETqV&Fe*Qjf22rBwVZW$EZy`C!78$`{u#|uE;@&Nv_l#T(^m) zh!kIqSv~kW39wZ{aHC9V^X%jpqy>5GTYe zpfB&DC%XECLuIt4GTRAJT7OARuLmo;5eNOp2Y#=S^Av1e-ug2Z@JDTag*a7&qaOog z71~@SE}DfP5$*j|<9nd+@=PQxRjr7G2T+^vK!%}DIZ{19VP#s#!>epBuZD?vb1u!^ zpiF)6+S2af*7%TB?x3J1v3;XskX6m9D;aOik2mZ<$-FC^`>s%K;vo#*g*$78yKm!; zXh-7aA8sGIV~6V7e-o0o{v{2W<#TtPZdlJ3$--R5(H{ae5#1Shp?40 z_(JK~1@5TXT2*C(tv(}*y+yiJ{xgP@;@qlaAdG5BvU{*7Dx2%uwj5A6x_lQRaw4L)7&dWk4YD;pz zPh}i^7%1}$9N#5=Wy{IL&2Br_H~ zVy;%87gV7ajBm5UCH)x=dJ;>@<4N>J>zLycRHLd3qmfd5{D8AQ{-l{8xjH3FT6Rk; z=&x?RRx&BFIxJ3(`3RQOe$&%_L)CuM*Yd?SFX(WQl0Qnk7(A#t;V!0hk@7gWbF;&t zuBF=~YqUBX1ZH8u4*eCEAc=v)#Mt8yOlTHEux7yPJ*bQw(j2^^v`B77Y4=qlOkNif0K2#rlKQu|ra$kvh%Ee{ zNU>9_U7cpoE`%A(lM04bVv_k)s4GBL0>T9#o7xa^7H8k~fvQ&rNwC^!>o?(7af*~K zJ7=JS+)>-RDfGxKhU+L0(@cHRq@`OZKCYfsoADgcv;tfW$V0}ZRTkQ^z>HI<=>o6Y`%n?^Jyfz2kL&+q;$rSpSgEsJ(J&|EAOl$Cb`U zHyy_B`qi}DuQzY{yuDg@GEXReM4*S2>3hzmXK>7$z7BJrE^oBseEi|7)#IClJ;+|M z`r}74dAD%P-OQ$nL0wLNo7L$9WJ}DO#w> ztW-3L&>YHzzPy8hKmTN$yK7+*`2qo=*2pZ`nmR?rA1QuiLV3QEb8TgAxwVSk~hO zXd{W`wx|XuIj$NG6z#Rz4*V|YCT!%g^uJit$~U;D_=IO!3RlNq;8ulss|rC>7e?9T zb5n)B^|SftWxjJr9J5f0GzIbDHp!UYC}#8JQwBIGKpnG#ID>?@z#t5Vv76&q-U>UQ zizyQW@F^7&k^}5tZew0=WsUX~jqc2|g9In{WdT9RmPTYu<5EU1&t4pN`Ar38OdxOV{uqIj|wqCyBY+b6ugpP-2Wy1OpWl zT~&^UQ>76LFss0BYr&$AL#-1lj#*ZzedwgjK2mH;Y97OUexb%06BW}*O|gSRtrsiJ zSvHBh3J2k9!Bmg%dC~k@ut=u}QEETHv9(+ivCE{A3*R8i3MymouLw2rv4^z!fS8O8VZ!6fKBo`VPyKdmA40DNc33IDq%flJcl&gdBiQ z^6A!|-Up(2&v^jxjS&Xsv(Nm^aCLM$VC&21JNzU2??=Gp8^q!Pks9m`3K2+XO8f&> z_Ta~r6%gL?39C2KHyHEA*&ZGcllAuc#`S}ocPe)fmHI$2XZr3($##e25|Z2p>grkQhE8ftKTu zg+~n(is4aVL>3fE;E^a$Oye-?ZIdIQKARMKs>Px>#xMhInH4@MMrGyY5_iOt_>}O7 zC8H-EpqRyHF_(^Dl<731G9K)dN#@X5k8GG}2WI>O2{$Q=eCRo2uB(?KZ=%YO{c)%J zTjLKSk@a1V-^EI$9(=LW6>95Z4)2625}DM;UzQj7Brps?5a6UwWBlL&_6HS>EynZf(Upq zUdpw&=xNDuV9Pcd>b-JH%uDRL_}Q0yFr~DhJyfWCQTaLh6_WQQJO_PmLM>-bWA4~} zG2y)qSkA;na^ZVM@WxRkhmf4<;84c~;FvK_qKW9x9`kil22hj{kdcGUO$4gZU=Qe& zL2QTbod8;39?>%EL<(VXPu+@Y14V^6xkR32P(v{$%-s~J{k(+`FVRpX$!>RHS}=w& zs0X|ac>YMV)Q03h;u92_A(9z z{HM47@hJe#%(cyT! zp^H13 zBtV|jtH{#R2JY=h;LCl;B!i(SFG$knkA z!!g+hk2~wy530Q%Sb;)`QIe02oQJQSOuQ+d>@*ahu9z}AOw+PN!Ebm+V46Tf$l9BUz%7cb@^#4(qnhS z)Y@7}tWAt-;Rk0#o2})g`1Jo)cCVq!z?h#virNUY1`If7(&Ct`{H%6xh?uQ>rRtC< z6MnTwUMiDz+*u^teLQExYE;|<5NAO?QjQ@9WyPd^P`2`#bP|F=wtJ?N7<(=ezHrIt zG3Qdx-)YhKp7EYIjOblXEuIjUBY)mf*5iDJW7;*lhlRQaKY?zm(%l2Uf$|(OSH?>t zU3T%F2{Y(E8x=r5_l&p5!h?hjcpz%4{*@_X6yrL`Wk?*fM~NLEBJIBth9A5uNzbG4!A0G*`{=skmCW0 zF&f&k@lM&x^f=}<=TKuuOWs-4TtnFP(k0aMcsvQ4(23cg=5JCA2Ysml&hq>PJH=TIt1+ahN3K zYY$EudGh-vTr2d!u~qaxOW();EVtp2;#419q$dA8Iz(xOE@tu{L@Js1mC zU{ql8i$ce8x!T!h7K`jN1J4lONl8ES?!n6hO`_n zaf;W2xIBXK6v~B~8wVJ*@nQF-mXVCJGKtp?vUyRQOf@-&@*yUqoF2+~fiV2VJm7v% z=~gocuR1=~Vyqi3J6dU%tR3iiz=3$+IZ3nCrt|`Z9mn0E@?yiNjJ(DWYF_QF%z&YDj zH)YCWnC3lKi+&H2a~yHF=0Wtn_*1K!;WcXR*b<2Q-eE`Em%@L)AoU(X z2N0a1d5@`1>YJQ8x_!WSPunK?Nqw~@GF(mnlma~1$^!(g2x@Xt3!fL@>=RQf@ylBZ zT5Kd~S2SoB7h9||4YLZ&JH?O;#Yv&wvPqzx(LXmDpn~a6_7{IAm@~U!zShQA$R{!2 zN$7b{WshmJr#zo{X$5h*=UUKY`}2xFuEy=XD+!BM2HHGY zuj2Dq@e}7i2k+`QVwF9IVe1H{R~-vwq(VNn2rCsF54qF`W*5Q-s&5*pB3*2jqJ*Lh zt(`#PtYxN&)Sy;0*Kidt8@7NWW`_ds(|VWGYBXRB>^bZsxkJA&`kJgUGa`(Cjo8CK zDwsnMsOizLI9WMYJk?P%tgzhe1633u2vqbcE%)nzi>;wF`H%|wU+!Wb(3wi$d zj1{YJSfMoxkxmWa^}IXFEaCneskx0{Q^J1di5+$1C)q1RHaO6Pjn0^Va+aPD7@KO? zT)B@B+4%z&cN96V*2rho^pw+e4RwAJTXxGJjSZ+gS=*nsb{1Hs$8RABt9S|^3GOuK zBN+`LGSBZvjt%#JH)6+7ME4Z1j9KDyI0+s6f+PN)pD=FUf96q-knac=iP+fF*;88sUa|Ab|61a#bO+39b4Kl>?Vn5K!Yeu# zw^xP(>86_yZYpz{>0b6x$F{IMH)>oK@aU)%SICm3RRW}mI7-+r-iHt`{fY9I5hznB z^@=5d?-Cw9@X`shx1i)x@PBk)oSeB}0_U$^{DA)x-ADO$-bg!wi{;J{KZ2?x%5SCszYoQ60?vb56M>Lps0VhF;6;ZqX zP|PLDUMt%kg`RDq^)*IAW;Qd7k}9v4vdhDeK{e6%{G%XgnWZkSqdo~+9p730DsdBQ z_4q`Fr9c$d#H36V5U-Fr$Tt#0MR70vFA48~HKhn-JhyZ_T!Nrpiyy4YU-$x?SL`2Z zGh*cx+y?i!rc+j+M|~g!a)?d^Ni{Irm)K<+`T#?{!nA;K!M45V5b}=hMv;DSuG^$w@s{^P(}p{ZBATJ%qmCaScx^RE-1nq_$^>O zRr&c?!Te_;y~ND1?Ynwzrt)C^0B_1!o4D>1;(zheK=MkV`TgtHD(L?ye$4+@Li+#X zP5=K3nM7#6*-C`fGqpY!Jfo+cdV=%RJ}^aacn~*7wuZdvU-VQRcEHu{HY5?Q3O-x4Z#GK3x{^z z*`f)5&YcPPeV??X6D+)&&0PAJ9clk+RCLQ9f?&oTR;l~oa^EQD z&%Kv_Ppjr%0&DRYm+?u{8%3a5<;&XBX7)gMXM5&c1AB51e}6v&=a1iKaHy;Q)=Lc7 z8+TNBpP}g+0gwCCh}$~}4*PVEb1Wint@=cW+dB`YFh%sJ@Qr|-r4aJ4`IKbfN~@ba z>Uz78^XJ?vy7xKrV|-qhP4J`XO9lT4fJV)svs=En&L-i?4lwPkq+d{TSkmClih9hR{gQ!s?)%_*Hbd-KU|eL(-s zEt;L{dQMg&aZ{$*IsZ%u&qe@zVzmdsK`R7D5^pVeLm@X zg$$c=WfXKK)zYw-e0Fh^baTrD1G9LxTuBAk0$Z>d53!LfMK_H?fh0G-h0>6meD;M2 z0kbT6nR#OY&{bWnyf8Vll4ZnBSw4ZgGQBF=YhAIDL0R;1R&xZqvRqvpKV;g%@K07> z2{DR6TkgQwrjwbvw&$@;z#qGs0P~Ftr*TaB$F@2;+p#*D3!ac5huDnM*OoU@IK5Fz z(|r-a5W2%63baV}vDE_)$tcw7HmW`wDqrF=G5YNKv13NdK>2tx7a9A?J=*SNogzjR{j+>bUMlAv+p|^6Ge~C zjg?wuQj}N;$U8dJG0fi>HunxWUXv;t_v2dMi6hlgg%sR>d5r!ZXsmQ%ilhr7nvT3B zURcpj>9sUDkW$wrS`Xeigx#W@#wTXQ)@2ixRfA*l0V|AT4Ir~2jn{L5uEmTeG6F5E zz<-SKer*a;KTUYI_%IQGtriQL(rVt7G&zXg6kw5;!)D=L1T)V`N#+TV?YF#3O+f&o zVYRsxs4VZ>1=I2O_5R5eYG>^PdnIm2B$PLFbW$iLc;`~ayw*R>#ulo`BkurDQ?4AO zZ_fZ}2}&0r|&4`&Uc%*MjzD-S0;Gvc+3cg$W_$s^~XA zX2HK}>>u(B4E55$Y$2#;HMj00CXD+qox$r;8>8_}2GLD8{Nr=TkW!At->JTx)fq() ze6U~F2kdN&-|(00f5F3Pq&$oRG8?`1CAm-l{8-a;ItzsG@ZqrUrsgr2tFu^rB=5N7 zxi2xBkt_KuG2y(VGvC8_Ac7*?g?sPHYoor%WdE*{rZv(AbcN=?%gCVs_zV=40z z!@Kn&TnzVY9 z#Nqv%2~Xw_f)1Us!B|&MLm45kLi?8&G=QZG2?)Uq8)_k2lg?y9x;Tp^zWngJmX4vQ zjDj7^Vb*O^)@Yl2W)2W11M2qmuLjK%#Di&IFP5n?AApw=|L81D8c*CX5N)5SXtD5I za7mG@UwfOnDmPY_cw{yL+(3Y=X1@;GX!nz-|2(4{f|Rc6n$kExuzzLlxaMo~G$N8K z+i#{Fd|h^eQHA4}D|zV26@%x`q2tXQ$rRj8d6>fdZjz^F4}<>d^dGh>VT>(a$)w-2 z6Y^=4mh@S$fx$*Z(oZbVp@XkRpD|R{R%PuC*Rd{)cVaUNJkZNp((<9$Q?LzOF$#Brj!u z((uD#*R?Dk5pZTC96z(U1rCDOR77Butl&Fqa#0TxX>wJNG>v?h0K1p%-i{|0Ad;90 z*qYs|q}Zg`%z$XEjE1tZctKQ(J!I^=6a_268j2oy_(@_7F9@_xatJ7mq>CVO)#XbZ zD8xf|g}dJ|_9t{C)`>K+Hz6O<$t+Hr?cy%42q<(}Vqd@p?@WIQRO{rwKJfq6k+Cl zMy${>Un}t}DlP1+?m0h-7M#eEG_dH{9ZfC&*bD{6FMCM^0!aAfgNcS_x_9BkDT;=y zRthyFu}gGtpPp`6CO^ZC9q4}O+nS2N54+9$5;0-Me%D;mY7|B^Qt7RP>m5?^W0D;r zL1%%qq@3fN1I@8PV{>~bA|o6^k>NRNZs8zs2hXM` zBs0(~Im!5(r;zi4sXhqxoOc&e?>^>jq30(b%ng?b-f)7PlP4t-F^uzj=J#xvsQs{n z9gX{}Ay}_U)P9w`{O--q*ht>afm3sVgaL`mCK}BdJ5LYcOHSczvb{9mX1CTdPiD4M zuX6^Ex-OO;J$4WGX8aq*k2|=a#g~^DwTE7Aw>Hk0qvN+w{$2sJv|o?NTC87=%*=bU zv-mSV9n=mdXsr+k_miJ8JOUOhXL;KAI6q0qd05$ms+}}Dx>S@-VBnonuac8?9|b35 z$ruA(X*EBRVNyVYISLU4ro`WW3t5Ys=0Wcz{_>ZE(_`{>0rD~3uUH@9r+d%bEB0V<07v>^}3Zv*a zvzou8FR284)v$m0R3AUOl2NR@W04%q_pzfbEDj?<@+>FVpd01Uy#+dogQ{bT1QEnJ3}!Y|=8n{LP`#%c{!JV<}=fxp$oT#?b4 z|447CNgQ!>3tA=(yI>pxrbEZUGSLgJ%$!_Ud^F!h#FSX|O|Ei}1_9Z`^V;}X@e6Ww zY-2zrAIn&>jZwct6$*B8AN)z}aZI?{*XDxV*S51OPCJUs3jZZsi>{UvoFUrA8jS{` zqt{Sf^0}8;J+UZv+u!u#SV85*wozppn8|vv^u?+a+a!JGZ%W#N+8Ms?>7298KtSLc%T z@xX(t80%?uwttFdWW5Drykhr*ho=Qfx|C7E+`@|exX=WOwq)B5P(pm0D;skgv~Z>B z8C_4{$mpq_)%K4O)wQ9??uO;6$sId)r>+7)^r|Bi`g-!f25q~A5yWBk&UOs=w6}tG z1lv3e@&USLZs7gVIP`XS+1r{KyOtLw}pbVQJ+03Oxt&?%)jZWz!<;sTz>- z#Q|YjNe8}(2PgT3G0&l$A>`M_O4SG(PLCW6#nOoH>~fi{oa@;vkGzEZ%jG(FRVMoC z+Wn@w*HWKImC{AyhlY*O3RHR}T{?Byo5$h4O{@lA%p8yNvP-T{rc(GYY8@FOnJiv31 zsDTEXy>p$?Uaor+%_u~iubA>?h^t=|JG`9X1`{#=&}W-1B?{OJP?Ao>v5&hHW!~e_ zO@MY@F|olw6>`l=#FX{sM&jX(djs-&tL0?>Vj?cg6Z;)SyWZD(g5l?WCreX~Zd8sWJcKK!?U^2F+ROaqqt?em z(qy8Nw<^arKRwrNyzJ zrM#0iZA4+k$XVt9{4@6LWft2iXeA8IHhj^>*)S?FsAP#U%VJg?5yI{+7qXc8Xk%`$ zPcvhy5%jyyQ}ZMB_t2fm|Hv6_TW4`Ly2%*HHb(skIiJWN)=?n}|0^syfjxk;z(gG$QwYFI z0nua2eHF1^Ce1Zs+RfJFAjwow4Xs3!Es4AW^%f*z&{; z1aTM>oa0S0XGuFfGwtJ9r9{*YJtfBi&(H;NNTg+%#y@vM;QIcHfVG&uTS^hg|2XZ3g0 z5N2GmWqc#f3$FKg07#~1#}3=q4AU4E$x5P}9TCQ83Edehgm!N)I%q-_v~)gy`5I60 z2%}=DTvlDt5aHqoD^OegQw(!1>eS6yjjt-k)aLFiWf~WL10c{$RvzY03p*+XszT6k%LAh zAyo`M-9-lFw%8-Gg%8-?ZD|*{0D5O+X^1@h^|f5qn;6fUYWh3uAX)sJjcLM%7AKC> zgdNBJ{KvKmb0Ka``8)yPFo!yX5H4cw_DYERjbXS|fk3rq@Xh-8mrB$%)-Ua`vE3BW zM}gamao$?iB|?r@w*}&7l<~W7hE%Mv7LC7rwbzdnld-$jhFelAa=rOTug*NXV}4oC zU)PAV0EeylcotJ*T21m1T0HSyTscU-2MR)bQMECC`KPvjC}CuND*Bq%*>7x8g6Str z@k^u66JXSvgVZx}vL-)Y2~5edC(Hnl_UnI6i#h0rDtd4^!{ursCg}R_SZN9fOE7So z!{P_UO*akax1UdiaZMY11e5IdGF%xUAj#dO8tMM2X3gzVeb@@nBJlv$^jwIC+xE0> zHm5>gQ*$D#?V6c{$;nEmv47(30vYaj9I^pjF>my3liDk?mgLqS z;`T{*I>CkvTG`=2|JdMLnJQ-`smX&@a~uY7H6v2a-h&Vhf&YAclh$GybQ!IB; zUDn##}7m^;Fe@TU}65yr}n1}PtT1lW3Pn$0`P{{u^cA>g8IjWHM!x>aQ)wL|# zY3EZ8JgIPWo@CK~dLvI1SeD)66m>a<&($!rocDjHU&9UY`_L`ScY8tSvY zh=pgL%p!(HCp|*1ZFWa@E^M7@da@!Ej2D{95>E2?EF&}v!)z|})v4aRj9>NbRKQ|q z5SCgJBst&q@-I1p%CeqI_WrLca+fG7wy|H`BOM%c9e7J5YiG)yX9@jDUYO3*=PxsH zz9#txJ=sXHT^RHPt(x^R@1s~My;U%Q*- zL!Y(meV5bU&lW%6)xy1VX0XRy3s-&PSAFYOeZyCMDfEC_idMZ|&GbFXj6KV&z0-Nl zn|D2T0s%iQ1IXV<*Gw(#xLWtb`|>+P1d!y)u4K`(V#@Ru2_f!*PGcItKV;=x&frw@ z(4hMySP*GLTJ10tgNXZP8WWif2@ci6I_ZWY3(;NsVBlQ{1x_YA!l5KZ9Bb;Di{KfP zJ4&BaXZnfiUW3Bp92YM_xoyRe5KdarJ1@aS+YPTFyj0}n{I!ukn@Q(Z<({9$vZRQy|ySYf{~(L4rkiwovopy=Y+CW{*`nI|cYIvXG* zilr}tn41O&26JNrSu()5DFo_(5U+nhbFHb&Azg4^(qRqFgzaDIVFmNcAd#Bapi?wr zWCYza&1X3jkEWJ-Pv6m=~4cw4g~%l&}ihKgAYWe8_*zaLtdr8$GbIk7pRLF zg(on+qC&-6m2?+|LEkgP@)B2pHW+fk+nt1mi!pD&Z$cRCDBD8qEh9~zSu6{<6v$}T|T~GYBasw))63)wnE2SWqB*rc5M|E|_gtOp9`p$JE>BhZl zN2F-_V#?f(fAs-UFh>N~mH@CXf#}TQMNoa@u75L$@PV^vK^`P`ICM7t`W24+8BLNG zi{BTcC*`Yk!7qWExt8Li!YRk2;*3PGiXTKhE=;-VgD42DI*HD_oOt6%8}0$1a_BQ% zP#$-qeTy@pNl$SHw2a0gw7qQZcBV?wVN*k3)_uaj9551P_X2xe(o-4r2Z=m$q%;{G z3hV^Z(5*J?O0QWG)0rmf@+5vE1WlA+rLK@LGHL6?Zw(XzDVSh3Mkk7dDors6&nO-E zi0QGoW8X&-|7sCUQHRp;$zgc$M1$}`Ovl@iPAz9UPV)f7kUsOzvb|i6&?~aF@nxm* zI_XJ3`=|2Oei4SKZYvBA(t$$OuQ?H&{o$t46XNg)$mTU>n+0QBHAa~Y%H)HrdKJn5 zxEKq}215vdWi<*6z>+DP5MR0^z;Y1f^X!`qYvb_>!}1EdgJ0+WSxEgy#U3SN6HAm7 zQume2H761^a1=q!!YwSmTcCp&Pa~X%onIuUY$9{Fb_u+Ck;Q*qMG)`Z#XAo)dH}LM z1uB8g;hTwTRcevG3|y~#OPUYHRP~`EJ3!(+$Yr-97?IYMT&Ig`%eKv6emF3D8VZLq(ao|M+y^R!yRJ z;)Z9OPkErkN_L^Q1F~;&%5-;Cikc_B+YJw<3gR)<(9W>5DPRr z;VD$k;2;!>E6h4r=e?Gmr zQXN7=Ukyeb!Z7?{TOM@xMf`DX5846jzPMYX?Er?F%}I{|;6Bv6gYJFyK1q}lo}HXcWL{4jf8iCrkIu`nvioFy!IGIKvNnub`s*q z#jP_rwYo;H7+IC|p7lDwYv(gYT5OGgD}PWq!xbtBO1FE{2}wjBY36Dmd_Ag^p`$>r zRFQ{s;aOyKG{)h@fAdfyUbt*CP=3a_cCFS;xMeMtf?VTL;@4s)CPb6QQP5RYD5C=QY)%^1RZ(&0WvFrFix!Ml<5pM@3 z0j1%8&}B?kK&@inN4&{b5)YMam@jmawO2rLRJ!TxQleK&wo)%&aOpESG*|<19{b?Pk zfMt9n0a`@a7!|();pb_bx~FUCZ`Fuv8GfF2=`yyN=?5ZKy{+|@l|dX5kF?GO%hMt+ zr{n0-Qmv{9=O-T2lxI~Ww;oSQ;~vgqOGCz4IZpCX^+pRz^Y+;@iQC}HmPvP98f7Ik zK8CTsTW}6d<&}vaB-*gnMb*+iOTS zs};kj{F1r6BbQN?b%XUPUlu^B)0G53jx*mq4CQO>B?lxwHsX5R<9Kt|Z(O?5o zsMoy+BuoHyw3KQGke6AUSRRbob4}+a=5tr-d6=p>PAgNTIhdv2(|N2YKkjU6$9%@! z+qPfNh&&v)?+;v##%5M@#LX>XhuO^|iRm5dfaJUWL9A4&yAC$Ce?lG_b(6Q3*$q3mfkRxx&S|H!|mjv9x$Wii! zl^Kf{@&ew*gSc0yMjWCKY3o1*i=i$+q!D>Es@kZh17~6wg9>w1q;(C3{Q$xWjWbAb z3k0|kp2UP#kM268dRX7Fcn#bmir=xn0}>&^XTP8WF%K1SVA4dehnyg2H%f9(^p47x zgdliU4AYm^TdA7wPt&k}8fBhw@vuvc6rL#kJxVsQfkk;#eq-kWx_j9xxGsr-Iqh)v zCEgtmuVT+&kQT-D79!}ruB%?YNZwSK;v6(@3|}UA|A^2Dln)M|TXPPal0G>S=h5aF z&ISz~VaU5unGJ4!vvht^h;wr`PdxZ+2+M@&1A69f094O-p6J70v+|LO@jGTThqm# z*@#2AM-1r%GnzVP>q@TXk0iiif!NF79`vG`+=Tpp8P*#6^-^=flNuIl-2w4ZoYzHh zC`%Vv&K@3s?eVc}xMKVjJ^cpc){P(CTdj{PiX1R7g& z#W4YYQhvn4OUy0TIgzrgB8dFv^a7 z`D0PP0W!_lZEx}zjhqZR=Aj`2ddS5tg` zbMiTY?bD`VI5VQHAgg9vt6T@4;-$I{iiX9D#i->GdF6&)C#KtVp?giVyN3N9v>p`k2f}GhI3p2V)1>R3=QC^?K+*>EUnqY-^Uq zF$$dvcx}G*6!9~JbS#L~;nzE#Ibk%Ggbkdovg$?+B;+q`Mzm;%B5#l0tP z$mC`}`1X|m%Li&jD`z>BF0@sDF4u=?MxVbVJFkMaumEJlR2dQP!0ZHaITcUXm4L#P zfch+~JP|gZxx-Nt->E>?|7FZQGwEt;*abu(SR&>jFXe_JCWhp+$iCUL9(}80WEE+) zp7f?SvgbwisJnfS?YNyu*9#LTRgk3r3wU|!W3I#(XfhSiIQ1UWO7j~A`50BJ+Bb^t zg>kLI7h;tv9}qi%=~#WwZmaqYyP3*pTz-#!snXYY%7P32`ZFiBuYnwd@T^NmpYHmG zpVn6Fg7J5H8^ht6gBndZ{NqLIfZEk-wPex?Ptps!|Cm5fHY`&58NW{6ip+gkU=LFuH6| zaz_{jy|5b58=A;_E?UMAVW2pt0xpFRTS?|4E*awvQ;?iJF6dES3em_zS1Q1Z*ccku z2s3&W-l9>RDNoKmRXBJY_S`8Kd>WTRsCk@r1Ii?Q9E@xYr3}3kT`wGV9v#0nQhz9q zV39o`2@NF1&)ZNsyxJyX%x<2G7=lL|=T^C3X-}^^foi z$xsWbPz%UlXVze6*kEUrPzx?l3-dQ{3xaEc@(DP%*{?=az{(dRr}vmC@V>2(2E|kl zPbn4acQp6&zc{|JZSE8aJ}^IGhSU9h&77wRSe1n|c$A{Mrb4?XQ!L>XIgb10;T;IP z(9Y+f-_0@EmW&g4;&2XD>2dC3Lx7G@V?YP7;$+hHDOApccEwm2ZeS{UY!lk*k^o zg=-H@aRtulxqg{d49*e6ryI+#{P+%jn-2MhO4me&N&9?Qzp_JX7xKSJfM}AyThKoZ zO@ED2cmbrKdGHg?#60FJg#%eZN4ecH_NLm1XoY&d(*3BNxaUKdQG+XG*EFe{UR%ju z-O1k+qLN$@Zfe<+%HAj#7A{@S=0PqSI_`cVaCq})mhrkMCQA@)MpHp0uyYGo}K{n9D%0p(Efou)l1HhR5hUa`&4y8Oi;WbX%Z!yP> zyU3?`o-m!zcZEWJk^Z4G6+6CFM`v3kel7U32>)A{;DJmo^ieUlRw_(=+|(}NFWi8V zC6WZsrg2R(CBt+F2sKOI!D9H ze^`dluceCl1r)5}`?EF<9jG?|Ui@4+x{JRMui084H9IY4`nLE=@hq56cjevQnCl*) zyX>K_sA_XuAX!Ef%%b%7+^^eeS*J+;GUW~GJLgXMue>d_%?K{kJP_4AAk{rU)w%3( zU7YgK!nci*HLx!ZuL!C(K7pBBC=sqra5S3aq@?^qX~vpLrAYySgWdP z(4P*=JqPO0oo*bya>W{YD8cB&(>6;;d1 z!9oTIeSMSUK)ProZD+5fKoEf~vqSi@LEoK$F|pxr(yPvJWTkBBN4}eVd`DL8alR9_ z*{m14a_Bk$PO7UfbZO;%#tQrk%8vO$Pv2w1%dNt>1SqRj0p9^Fe-AE945$Dq1m+-- z;^WTPX~Pay0=1?HKWTj%6MiaIY7eBg2I6EIO>E)B8ia?AHdCgZ+NQ9ws8lloR*eA= z0Xu~0vO-2dUErT{?~GD|pvNvWoF&?UdINA_H`E&S`at;e)&}h_;;oQlyK{NRa&OSB z(jBOeCEY^VZHU=Q53TYe%poc-tm**5vRh@f2+~lexe2Bz%l6lSfrw73tNZ zXFm?iXZ*`O?K>cJqO6*GkCVpP-I5Xw8F>2)90{kChy$=P zQx7+q7qal`BhKKLU(db6G{KSdOJl;t*^E;2AWuXwn)wYKoj@#|khzW<`i-sKCjLQ> zbZk^dp_g&Pi5T8IE&cO9sJ33##=Kz-y#Woq5e>Z|4ZWW~(3@BnH1j$&#f^vZYc{An4bg)=5mmcUW2ui5{Ef^uwH?Cyt zl?>xMCDK7jh1LD5J*1D9pk|Fr&1YE*tN?{0F(0(TZ|tW*Ln7TTEaxRfBE>IUn%e$i zBww4s;JltpV4M)zyz%HGIZ=8GoY`o3ECLSxDC-IzHkJI~=x!~40^F^UFuv)q6%3z5 z?F21*h_;>JaPtt=wh(v$5Ju3J<(TGr_n7VVL3TTevX!6R$arq+3gwPEVX ztdbZ-Il(_tIU%t!xn@>b(rE9MdE9?A79BE-^k_trkBQB^5ttQKIe7!&kjTgUgMmfy z_v=C&Ep>{Ol_J)fLuaxuS=d`7Ho&loQU|H*P|$2pkzFW-BRNJ$?yXQ2#R8$zda-|yAIKm0_y?JH6jNaAyBTh?E{17 zd42~ux`2@5_8FL7hVQv?2WhXss&rVc3(9Zwsfy4v4{1gSJ1wNiJUeDiQ$nQn{qGct zT@o%{1tSnpfaQOR0T}+zV*rMh=Jt&LXYl|>HxpZH7b|mTMj1tWVO6F7@yp80&B@Hg z!on=)U}|hD#UMn{-+#-So*@qK)WR+a?doN7t1 zAKfd4D8)CT!7o`Ta9oe^MGZ)tO7OxpTkin%bV(yfxarIe_28KHD4(LFFfB{gz4wfV?p}`C%x0!(v&c2h zYbcUqv8J>_D3&@2rC_mtOKFa&X2!)Twl;O!K1$LzuER$l0KXBdD`#dVO zb1-@@3e37fg;_T7*q-mHnVWEuMken5NwM0l^jQ-+`$WZ5$X=(QVee7Z8H8*PJ$V+u z#BQp+#_$ICoDG|ij(CYU_|N?UfFsx^-&B=onR%xbJI7!qeZ|=qEyi1olx00p|D@Yc zh`Q%jQafpr-*~4k{E0c%Ig^VIPDiybeGO7Aff6gc6x&XpVO+kuz34&Oeg6Gb`eXdN zzyDG!#k4}DyG%0i0`5!rl4p1t#u64&_Um^s)M=qVn$Q4RtOrnO>B$M3njCm0PE+al z!m1Qao-!({O04wDfv4w#og+J6cTWK6X^-iRcD;)h?(RDDZUbmJ#9zB+b!eo;tf3E9 zafFls``V`V^A8`f5!%EMwr#(Ie@NnNTuHEvZf@8hZUqr=Z;HkbOb=o;F6u9=MiHwxd*2x+$u@UJA9?hQzt1gBJcB?5sw8-$GC0 zk6vddobT82M>ln^?Sm1RAD*!B++ioca~*u`DW4NFeU%e1=muMmQP6=~L=&nD0_{)3jJA{t;zXI;;N5eMS72{a9{}58s0V0dd3s zC;QR*e_%iVN+c>Y^NNz~yV|1q~WHJ38Cbu@SWx9==#$SV#BA@#m!UIqqJbbUpj zs4A48gn|(#d9p8F14VCcTXd^M-1ToN5k;^?$VBqH?_|I1v@~l^w*46h;1H;6%~a%} zx9-SP)Vea zewikSw*HTu7rXq>BrO^eFfuaoi{I{V7YR!;1=rDe!>?kz+0K{VM`VKx3kvSt?!P%V zdB=Gl_cyOa;2j#ytLvtkRc!>Z9U&_>9y;K+WNI=h@WOt6kiktxx2lJ&O$#yHbF!j+k8UMu`1GY34Wm@6=boFU;ULTe^Xk_ZTr|Xu71+pI)%>c& zd2Wpe6YB3R6#LVS|15*QhB4$*{SvArAZW_@PIVF}vawH~I=NLUv*eoUV}QoOgy!Vt zGU}QT^#;`99&@b#W4~mY^cl+(FO1V%LNBOPF*tns3Q0Yq!yYLzo%s>))4X4j>UF)1 z4QwZ(3Yq3=OwICzYQ)xjA>rJyl2#%?@V9ZbVoPAX@)xSh??RhFmbxaHPCjf27gyo^ zO}a)PWNEnV+kxBm*$L=%skiA|>R-Bag0V^dZY;3OfJN0Hh zZu8I6a&lB%;a1K#?i<{j+qIC9C&o|!dafAcKyd6TGgEXJ8cDzkI*X=9+i-)b zDZv<4GQaSu@#UQURb11ysygn{rPsh67q0+4(wWX?h$XcRe;>+hc2|#(rm-X{U8FEu zv$amaj|<6dEsD?7hI*vF#Z}g@f3v&3NxgPA zvC|xxx2nki**iz;Ym8}k6rt^kIrcGDu8Eo%8^9`U-b(@#OW({ja~@qn6I=a%9Oh2&;wU9PU0(hG2tQIVxq&+-MmVf>HPX%SVmvblOCf|CUIqw}i za{d6~V@pU0kv69OE9|T2D$w;^it>B4ieeLS-wB4s_xafwo7cMrOnffp@Nd9GKL3-= zmZ4KT5^%T2&XCTopT7BxhJ%B<;l)j#z?NU|O&{~pzeeb6em7iccZaz2Iqd#Wf_&mY zNd9DZmWTw~NK|n}OK4r+tXg*KwhuPmA?r3sYwuqRk8fG zHlJS$WPVv+`)q%RriDDiRRqQc=MYMLUk0OiWM^sw?kEumfAA%X;!|(Q2uo4o?h>i? zvF&S-`6X;Qi)JJINs}Z>q{Q-B@hGLl#?Hz^V)~nhz`&+;K z>Lyh&*6$7qREA-w^W*e~Y@{>;+RCG{x^VuPx8#WZBCqO*{SvQki2cH^)AU)#wJbZ4 z18Ap`{LvtkXCK%4BvBsecX>k4H>~dg^WiZ9CXY@%-OVwI6$9kHRd<#+zw7QWaei0c zY2y5@z2n6BJxRCAJo(}wu_Tod_Wt`{KHJg%O9UMp2&e+?Kl!Zo|4)_m-`?D+GN~{m zgw`8O6~%Z&zUQ(J!tn^ImG~ZoOw1vSifIv$t)jwH1_#xDGK6?r9JA;iWjE5n7>Yi zVMPt=2_BAbPF0j$roM`^#(Ek$0xzJdO=#EBTE){;J`We2NGH1WAsAlz*6IU7^y=TdT>)5VE@&LhC_=7q{L@@+4 zI93u_S(gsNqg`CwO8~|}E95aOBf0Yy&PAZIv2lAu79a*<`P)`|*~^JLw1!4=tA<>Ni|mAJD&6M1Dp8c=SJ&*Zn`X6K46pNPMfh8oOGX z{+G-y^5P=@C3UVAv@hB+_D{cFGn^>Yq#rpb$+jMy28{@k^w4O{B?U8dU;u|4N3xlt zhec*?=cIR;!9`ttYwEl2&zV>q}v+X06@T@%&_)j?USOg{6ljC-lbs zM><#Q|Af({Y*q79B*3wZt|7&DGew0=`WyfnWh(E;v-lyJx zDgocsAgf-An&8Et3&E$zzynFvZ3bjNoxs`Wp|`>9p62JGw@*2># z&sB<~mxDF2PeLx*U)b8(Tp@ILe0YL*K`O7vub$|$bphD?(z4O-o9Ml>5s7)7`cH*> zCwXN?RC9|egeN{Tu(mIIig2)i!8D@|fu+S20^5x|9e8k^nP1mtMuQ?zks@IW87yK- zbn5LqEwXAn_Q7SpRwTki49zh`m5b*kn^{G(>e|Rmd#lzfA0^b|MkA=^8Ag^~*D~pv zAX>oyRSCujudzGZHp3g`&+i_%T}ijqjRwDCB=FNrtP?HRaWtpJxaNd3rf`&M9SM+l z1jmVg(4dHXk^h<=&V|QX$|#e^ATx%Q;SxHG1OZ73m8u$ zjUy|2<{App%9qZO2^2Kn+ArPd3e=ckSpiQN(iO$QyoSS+`MF7#vPdcQ8h1CLVyxnX zENNSc>5w)}csQpCtRMkOS1+27WdV8U(=>~9U&#w+MJI9}tw=@J(?>1$-&rZtXslE1 zXvs+?4`PtA2vVXqO7wYuJI7#NS+yl~?fOzOHq3CCNy3faju@tEo%7%mD^wMR5lF2i z)at@>QVc;g?xs=R3uGdMjJ0x-4}}*Bsj1W9kf+dn-Ta0lM!u^0R_m{?<+bxvMaVwE zf0MtMJAqr<39*xZ!kY~ysiq7ngI`te zsKZ)IVmM-A#Zix3M4nsU$ZSEnQqTX~o1#$#mpxlr3$jw7#A8jbg{*jx}xsBM=MLkDDK`WNemdt!a&79^phN5X*J;h`Tk65UINpz#6 zi7XQOnhLaLP*RcJka~^C5V5a-yk(H4_R!JI9-~c_U$P@HgGt4kVHP<|TIH~d7^pEy zZAOo4E4fdxj!8m#AkD5q>2uQi27dLgRsEKJ%imZ2UO%DLG}V5OhXz$O27?VmKXHHV z4N%x)qLWk1X#G%cfM1s9Y(W2N2A7p*cd@L-?T3`A0F)}S%03tzNX6GVjGxIC;Y4!c zi+XUg;lNsLnn~8{m}x{Jqj}$vRi(WcKY?;lR}XZ!rd3k zq;Q!7S5|nzifox@%IRLh=9w&;Vpn3n>)gtFA7Z>nCPxa}AW~Uv<{V9!udN#vT}#u< zixFtY`OtVMVOn4Z64NAfp&aMJ<10LqwOOz1p@H2FALA!A3rC5rl=ScKK(g`g z$Csn>cr??_GJgH=&QkXuQ{?4wH;~pz-0N!46~`Yjyr0tzir50&nOqkufOxHX7TFm_ zK@70Y{D60^vTh3R7^pIx7{zvI7rH}8c6b(K1Y>7PD2pwfmZ{cq+fIRA2^nEdJy0V# zjOKRCV1)tpA5=C~c;JxINt1P*u;AdF1r~6j+r?D(81V&1#89NSTd_f;8OaSa*;F%PM||d2aJjLkkQb(tLkPN&*otBKwIJQODAG1Nb!xg{p@q?1iRT;Ar4cgr z5aR_deBc8KVd5QAU9|ug=5V@=_!k}wd`kSS_qwVvrKvcL*n%xxW{@|X*E7FNk2fd< z-Vk$BtwfGsMO5#;B$oY0dUeUMhNjJrIOW$-(a%)dswx8UC$2MwL2fIGOWd<`!EN^) z(ehncl$XKi59K(>2H-=oHzsL;AR>b4S0*Wer8|L5N_|g30UG zP4*?ZhKddv_A2T4rV7^2bX756#e^M7=vCE_3u}{0?5G?|>XST=5l?uA>4Lqfx?!B5 zJ7PSkeIwJ7;2-W&u>B0?unqg0D&^NP?eWkGOStN8Yu{0-9c&6MO9GKMtQ9ko6a8Uk z`h4?;9`_uwnVDp*bXw-Hr)~D)3RvZk4qJW68(e}R?$4Om77UnfH(O^{&x^BCiqe=A zwwUfv995Cyt*7k8IzwIqJKXlNP22`aNl{;+Yr*;~S|S<*r5AVhPgb$5?h}PKdHyOgmWaKv0m8Z*>G?Q3gM{a=@m|n0`R@EH!Z;B6^k4J zQ0;D|Z_N7?GFi#j(jkj@a2O}so%={Q+0l~O?TQeTt*7wRnX{q78$=(D7bTKIk_F|! z12TP_`xNKV;W%mDf@PDrz~4&!veYO4q9)h<&eI-DV^3MEbB41f&LG`+;2Y)iJ}!o= z8>`|@(Q`?c(%f2MVtEMHhTv9%5Nivnvo2w4`d7taJ3!wS6-^_4QX8nf$zp3Ts3Shq z_Iwp-UHxcB5$P$^l{|HA2~!1KMtRo7WU6pITK8=8Lp6k2_LXhtnm1J&Vj;EjX-3Yx z?FMfpQlu@lq<*M8cgn$;Wkyw99}rh~Wkpear87gqA;3*8D(n?oyBR!-gkjO|hml{5 zZ%wzF?l*zn4VxyP)RP|uU*@>Ux2poFc6t8%5s%sMuw@O|Ean+xtba=b34*&y{o zQM@s`Z1`jNFBtjD`e;Z051N`|{U;dF{eOq2|NZFje|GjeqAsrp!i?7QqWL%=jC$oS z7OAaZMh*ilLw0A=wF!yVeO0DQGy1wqUl5`woYFdGanhUV`iY{;0Z} z-lmJhZS@(}z$Yk?t|{(deO~M10S=f)mg5RRa=!VB)Hu`e$V*X zMFUx@sr|K^_yLWZ^mQ!w3j8mLNp+v#i2wDBQx13<%A!|dF{WpAY|2_p+Rbnhvx(#9N_2)qD3 zRQYJx)^MlXR&$J(eGApann~S>;9sb19$o0%`%Uiz$LIR!ss*|9-<`E0F)1c1H^rF4TXfeFXSFO*`5@pS-x5Fuk;b1f#i)3B8T6GlQp{ z?G>)B<|fB$u3_O_gQ~j)?%GOoBO5X|uK4cPhi&!=@T%Y66l`g&UbI%w`36QE$E~nkyydT$?yd;`4-`Cf9 z59Y4U*9uBN^mr-|qMG~4zCy>((nlf`H?1M~TF%!c?LS>VZnJqRiVc6vciLatIzxaS z`Q%IqXKIijDg^QHgOKl;zyJxx9H8M)VQ4)#@Q5BjaQu#GF@AEC5s!GF%1R={qGS{q zB){n9hRZfiQkIIQ6z^4Ps=&}WFpFTaZY+!hRk}uh=hph-M5M?=fw0v=aF%P)btI@To(p1l37gjFB)){v zSRzCVcPF&t#2k(MM4MC6TKW+Iv>!Rh*MoSAVB@z?2W3P|W_}VVbrB}H!X3i4r3?$Z z?dANEyW;_S8P0U++7pJqYE)qxOIbUI$6r{Yd==}^@dO2)m1LwhXXkQZ{6V9%m0Bg0 zv7&aH_=6-Py1>S+cJ9GcI1apGZ@jOR@%MrB9pi29@)qVhi(4h{N#W8Al@O_snQS&4 zg&(NKUI&{3B6>jc+)RzM#qFUS=#e#9uPh9VH%%}DqM<=ZxkiLhfHdDw3tk1m9HB;8 z!z$>7K{6AT{RT21=^c%sh9ZF3-2P#dY$FkVGz{ZhrO^|f{Cm&MfoMyP1>rCr!4uO_+Jm35z#V4OCQor%a>d~iauIM?Xu0-Gd{ zFDBb6+EFj-AI$OQ<@{(>XX{T1OZ zM0jcA!IW9*aX!1)sR0x4K%|ScJuAx+-V#Q^&lw@nRcI|HP8(K3j+&l%k`AxGTr_8P zZKKzAt=xj6XvkBD$rO;8R+T@<#sS-9x%K_on#NtC9KD;dkv{(?N;H=nXU~f?_@r$Y zw=^tvAxOrw#Ng;*FP$|S8%U@W9Ojw=S-hZu9*XD?S(sd*CMq6AH@1cjB7(Td_0n4H ztRv#Q$g7h!wbWAeOb%5oDpx{grFV#qcW;dL`7i$kzIv`ht8eQ2gjeb>1MEoF$1wT3 zq%=>0&gBbT_);%$hGlsk5~lGEQk4ytm@hajG}4J^3I76hz{Gk}4@W)sXWq@k`9v*o z+CsbR?0mb~!`@_Eu7YEZpicTwwI6_B-2w+9!7*#aD9Dd-F~i>=oO(@*?7kX;Dwh_e z(M(wWoIE2)Dd81vOu$_nF5YMy-P{&EL0yGSCgPXHq{R(Xh)sI(VJrwWC(OJ33PVD( z+`)n}zs8*st?^nrWFq5vV2-y1digrH zLd7}yIFxtoX`~fNHuJL^H*=8WL%+{6HZjGyT)5?#hYI^(o*c`ozqaAcO`vV&(NE&# zR#{I_%PYU47U1t=MievhekaP7qbDN<>ew-c$ER?aAX>Zv+<=RB^5u`T6x0TLNr z%h=2j+mDS@y)R~B-%xZe;5KOWA?b+IX5L7oTXm%8PD7o-zg?5bXVZwGhNTQD@~fB1HL{ls#m|dY*`IupE1m0_MC>4 ze)u8}BO)Z)e3M`V{+=MBRtqbyga+oN_n}*nm}J|+*I%V@3k$nO6NuW5yxozNM^q|O zbe-s6KXmsE{Id+die6E>q?wQjYilq@?i-4U{7s;3oLXs0BQN8D5j`?f*D$WEJ#0HA z9FUFmo7AAsm|b&9hpv~WnuYJwiger7Z#Sq{%?(%T;va@?s#nL_UOiOGZ8s}xXd7*N zYwE`J;{+5dsyHy~Kaw_FY%FsOo*8$(SAPCgLA%+GpMd_^w6yX4f4w*TzxO8U-+R+5 z&0QB9P9*=6?u{x5fM<$6d?R%7DSEu8{J`>+HeO(R&jky@$3z0ttF&}e8K+Lo>* z>U3o6KJm~n-YFvO_wYOJDe&-JrE|3o@?cJ!6!(Bk#{}r$%4At*Ap`qRu@h#BxVi9K zlN|VLgf+gKnZnukF(xj7?>>*uCP~8&K{&`=ct}5?x2qgWl2s-hv|ExWn7o|_>L3o) zvSi--rvT{g#i&ievWm4hw=l1vD3-*bnYo@Ql0?ib=iWn?88S^(4i<^UQOk?fQfHE} zd6JPK<>6^k3d~C!m#goCfuMc;Aqh;&k2d}RU&w*F&(AkC+A(nSkXmcLa&)~8#)i+# za)s<;Os%j5d?SxoLfMwO=3iPT?{J|Z%_0D4P`X`P`E6O z)3uKa*$UFwUxg}{{YpMARPXv(AP9w6uKP|86ISJ_^wkxWzG5Oy3z0hZ7LUQ9^ck^R z-HKUPt11(;@?}=;*YTyp)amupEst~#Ga-0Xy#@~SSQtVu66SG)vQs-TGdulPBHi*} zEja5qEv2sL^zg*Mf1>mD(9i_f+7Gfu&%q|=r(NAc+0Z~@#vE{i7(jlKO<(O>?jm6otk!zy$+WjR!j{CzBI985>>*X zOqQLFf+71rrKOE-(e>1F@(49rey>PDF$>I9po%~%C&+ZjFdKB&XF_A5gzD6nvC7?0 zN+m9^qiR~(tbEayBp#J`N_#9)D|H*$X``pC6lwfIRlGcV>Y@iRr!5dEV~xmHuo{@j z8Uu1jPkV;4ip2xN&*OOBY#$bY^SrMrurao)IefPC+%LFqXPgff-jvV+Q?%)py~bI8 z?Y{gaS|RlO{#AD7enH|(5zm{1$aM=Pwm59UQS+b&*;ka05e3t)>{nP@jXT5(*CKi+zkkjti&R*F-u3HwrghvVx&!nnWV34wkx=SqV~hLyHV3-7oUq^K zov%0(u+(r$6V?3sbMmFgc2lOU`HeU%W&Sg;8!q^75~6wpNgf9U0)qOFubgE6gQ5J( z5j_8GA^#J!HDqREXJzAHW#(f4Z+Ntv1?j0a@;C%)PQc8}7i3A!EqUH@v-lC*R z1PuT|K)$~mlp^m;gqyV8&@CMizy_?WCWe$)WF#zvBsL(SeA%n#(C9I;bF=*Gt>496 zniS^S;Q%%7gUiKz#`huj&F{vS74=%Rf9E%vP>vO56r0|!kqsp&JF8l=d4E9R13d4-=;6LiqT!3-K^=*Z@p|dh%>r`6X$Z* zZrqIG6*bmmc&_lSr@2-c5m+|uNB4j{48S=eP{&gnAy&uJ80oF*P(**JJ^)tdtB4}4 z;=+kC<*LggP#FPKaTP{Ms@+w*?~N^`^V^T0+H@)E+^La1jxK8Op$1vr=|Sa`@OIF33;(jA8m<$iPwKkI?f zR9L+0YS5#cf|_sgibskk5dK4(yxkcm;*ujlP&}@0115*#r1mgx+OY(rU!G?S6-Z&j zFv@3`wtvU7{lBpGPQjHp(ZBCx$JUN*XJXs7ZB3j^Y}>YNI}_W<#L2`vwsn91Q}^NA zs#E9bKCJ5Q>V8~RYxVl9Z+FWXO2#4)PUxalPq2cIK_JuPkZB6fHpNbq@?cLZTNvfc z6nm7f&y$W*QXls^kZcYITmN6snQEPfD)+91tH$e~wMVLQto2_ebddK(1KD;SX}E*X zQzpIlGFl%iuJ%i8vT71!)_bt3T@XvADAJ=iGW2U0<3Tx)-W{th@{2Oaq z@G)+2?4ZezX;*8u#_5;3%8<)Bu1mchPwlVihU4r>YqdUWm#*^3baiG;UHkP`v8uQ- zLw==|p0>(6?sA4D4)q!ZZ|&4fnu|TT!eQ-PZ99jL>8k$B55bW>6YUku7u>yyD^9i{ z{rw4c2_AKx_?pn8n5$l|=Zlqc%V)pd8FPYiS36NC7Rauz9eWkfbfh9KuWd|q3Z=}; zWWbKmQ29&DMD=k|>z<2`@lg89WLW)eEXMA}4MAV~J~ZA}?6=l!F{0pJKS298c_Qr+ zt_9bNuiya|p5KTA2N;QMM#uyQNoZNgfua-SaSAP3yF7?gYM?el+6z{ak%iU^X85md z)XkCimU&%7&K*oRT@V-(-w0v(YQ&AdXjp@zXbnE|#DSAHz)*>uABirLed=FyoJF`G zp_-O>1FeWHX^M*pepBY+G%CONtOo_W;fjO6+%B5(>kJ_@^ptFaFR}+@}GjD^geY;t!3E*Vu zd%^1sj{e~BeTTvIjjSm1yWRd5c}GA>b)FDyscpSp=hubiqkiJvl>136X9r9VZJ{NX zWjB5w8uF5nmL1hPO1Pz)bfSMZLcY#sC0WUuX+;cYxTtG9zUsTZMy_!ebNlekTiE;Y zg2AyP=*rSxWRBY9&G{ZWXQisrb=XwhK5{I1A{-u2&Z)YGbRU40ul+im_$zvr$T#L& zf@#z>8OJkhuX!$PeofWbQYX8d+Wozm<7?^=)D+83MEk^gk&1>d$e($!( zigO$uBo~j|&IyUifeYM}l)St&1>sm!kdFqEN2N)ykn3T_5|w6kLYGA$xJn`v;sG<* z=?@;!ieTcY$d47&q;GI~<%MvPr~63jeDjL+4OC&!FeYKm$7d)wPmPbu4cItMcwy;q z$SE``u$Un5h`2^MO%z5UwhNl1@tIgnFhl~jD>wC$3zrIFWGxt}NLp>0ge|sIoz;7u zgiSFnia(@*U|e?I^wQSOcr`xP%jd_Q>Y&d084f3scU@DH#M&5{N8=XX zh|sL5dP57*O9=zCLeC39U+eeN?Yt5GDdGK9in+6zCwxm?U*f82M=q^u$H7@J;FG<> zd;E{=l>lvT2>(>YyC+C=2I!S{iy zI4{y&z%pW2cKci^yLk>pO>`LFvP5dH?AA=%YxEd@Dna{AWk$8#E%I?c(NzCq>FDn&DjeE!D_(ll?r2t))nBD5p7cduXQMrTgWq)*1CUAZUSaX-5CU9l(59Qyty9t5wFTmdI-iVosjv%N^&G`b=7lyMu>;3jS8!Pn>jK;DjVphOk zkXtxPI&P_mv4JSV6Y+0VJ7EKixj-hZ53Xu9jp*P~8T=}3HyACb_ujSO_>n3pvHOd( zIjM?`F{uhK46?$r-k6XoMaQdGKCS!;)JRQKQUg)eTOLNB1F=re2uzRs+qF@S2NwFU zcLw1+HRI+Zf5K;fF;2<pW%+VT zTK0|ly97>{yzIu0 z(EcxDn9#};Hb8xM;77$93{`Hhsf9i}gg8QAG>KzzFug>{LqYw6NyUS43cYX>ed*y8 zlQ?7fvL>8iMxtZHfkOZ}A5 z|3nt2oW>&XLZlkmtwgp+ z-a>b-G@e~4tIYK^rUu%IfAA`=@fK9=Ne^?esok0TZAVc$A*G$^0(ZrFcVmE^u{^s9 zpmwG6c9!z3FxkUPEpqpNa2vJB-E;wIH~lIpkYDRG*>-0{8T&;@g{w{vaXc{sV++p$ zj5HUreR#0$rb26fK<`Xa;oPTz3pR^qbGSL?@DIq-#4!g#0uh*Z)H;)s4{|-Ed3RK-~Wo*VH%3dx9$F{ygR$FXldbOLb?^r~s&|>1b zQOqx(^iH%Ug~*9jFmmQj)k`-Z6s#-~tStL$SFE!J?L4(YM+g%^1TCeg}Vsa-0x`pxQi8#4gdkB!&;961u48=kx$^}P2kPn=iv7SbIwXaxkSZ4@RI_j}` zNM{a{Cd#qQV9$Re>M_({Paso0@iZN*3%jv_c!nnWF?&d77*jpPbZdwwfpHz#^kYb8 zAQR`}lKF3V)=J@_Es+dP)Z>|u&RC{)^kaq)Pdeiri416%d&0qW4}Q@p$zC#Yi^BY>offIKdL9ea=DTjJn_uG2`$fjA}a5V z%VyE#a^snP3rsG*vZ$WyX7CW1p84ePWahI3U5#spOZLFYga9uSlb1nB}nn?MjR5Y!C>X#zp3K#(^O^bQ0; zL%fkdzM(?CF++MK0X{8V{eZ`IRHPS^#Tkhss4%0Ha}aGi ztklc2W;xr4;gaLr_@S-J9+Ibw1YXSnG1^|TV+ZQLyb)B>E*j$};03x|(CiPude=f& zI!GvyG%DEvJ9vnL*nq8k3mu>5HSO|4wE*cSluMcec)OG0P5cfT^k?$ zTz_$<-%?M$;hHm;_(M)9B32K9t9=wO?3n0}H>zlL-MFkzt`mxgpk zFkzt|qYdiGWK6-_v;5DY^rfYh|GcnNct}tF|KzHdA)fHYbyU;murA=nJ3<+Fu=f&! zTVfg6urBb%_7v0EF!vUNTM8NNi%aZE-wEx<-~UTr5xnFKYlrdU$3Nl!Ta}mO|Ez2j zHZ?VOadG&6l{2wPy9$F$z)?joaa17c@ORKo41Dviqe)`MtU_|~;msy>`oL6I$j6nQ z8!#VgQyQG<-;@UQr>}44?z5|p=kEvTNseGAFi6lb@za>7FHrDX4-gpFt8t<}`L}Gu z5U*f)CN2@ZeXnbHD3T>4kp+VuyJl5>6#S~0|Cre~r<&-4q%hR@v@`&@4ib^AenFP8AM&Sv%ay($_5O^t*!zCB}3GM#& z+e=<+&R`$Lco^U^zw~bquffKzk1i^{$h5ltMy(XriyD%y#rE9$5ZVz-cQpK}O}PKr zir-+TP?jS9aTABppR8(mrB`H7URCRutKEa@k0A_D2{6L=0Y?MztAVkaReNR`vC@nL zOPRx%uISL1w+P5)A!!<=6h+;w6i4li+g#5Kjq6guEQ#w15|7yUIOQM;e`~ei$UXEV(@nijPfrKKKQf6sX*N)CO?fm`h zv(3M>w!XW&zALHO?iW=Sm|h0+mAGxfHee93h^_ef%RkEG=Y*20{H|Ov)BOhumDN?~ z4q{#*HdST51y_#A!@!*V!se>vn5f7z7Q#^v!lc~Q!e;c1=kp6G=^f2JGs5z+xEFe zB0%_l1NZv6Sbu(>^V<^i2t)Goc>NfeI)R3P-rezJ^(QP`7{m7MY)1E9dY-oiQg9Ag z-9hJB5Z#!)NCLf1uQ|E!as7z)U(LA2lJni%K0NUU=R!HZkVKd-c>WOhq@1_VG0l{GH`dk&Pv-&ZL8dq5?^D`I)4&{zr;`6a1Ai691}L8 z)nhsRQ!Jd{z42A=T-YqmTJ4u`vGsEirkZ<*tHp6d{<8A=9!0j~s_MD0y?-4rjCk$0a*+%GHBO>&y6yzUq=W0-YC6hUB z0UhnRMlGe(=*ka}Wk3q{R5G~Bg*;A2o2C!Gfqu!x2>=cNm#YWp&oWe4>gJ*jND!&C zCl8XVHj*ilxSUDIP`E>Nsd#Cj{?#>h6)D?e8S0%u{+;Rg!5f2ajAWD1j?RTyII#y6 zHcj-YLcFRwxR4%kqVHBVRr!mEg`W489+(skJv5+>_p;wVF}9a#vPu@us{7c_Sx=%& z*J#SyXU^I4v#TL8EFZ>7+GPGIhFKaU?RW`0LT)yzhPD?-(q(GX>q#Bfb456r9Dulu z0h6C81ZT^d+8=NnTzs=hBW$|lZH$fkFQz#GGEh}=(>)Lngl?^2>c5r86|xB(H8EZ3;V7SV%4e5ncAfLEbkE!fOd$@@%OGHmJ|YxiRU zZ({tMnc{Khs#jVtMLIdArBiv31m%F^edl7+CU(Y)2a61tZ*UxlEHh=MQedzDMDBOk^a>FUoe~9JD8Bl~|H;`ItJlrlPXdN@H9dl0< zB>PqRlo5A03$OFw!%3NaMYrf6QgHEW!bH^Swl&}E*;fcsi#loh?NkW|!4Y|0Is5?= zVzLd;_&fz(1D4w?ysa|tr~8-WX*9PEA}Jm4)gAq`;F_3_d#wIgKu5Iu}@Prd*R+(!mMINru$ z#jq~G{@vx*Ex~~+Mu0+eO^|Gh?}XN!^!8E2)&1uufDFo_|2ERJ`c^efRYCbxB->(L z;$@CVU%>G1&m>0cS;?=midC90r^;VO*#AVWfc7GMB_iAw`XCc`QrDRAfJ|xmR_UE) zb-HAzih!YYa|(|m7keXzDVC0cKt|00SXAm@6$^hCv-XyABCVjQIM)GH3ie{Q=$#l$ z7KVr4!Q|Z+>YR7IeHhGBUA~EWyY!o<$&x%G}d`+-T_TlaeW4_vMOpa}vnNIM_uL3x-LU4rGhi z-+XBtIZ%EJw9xi}|0NgHXA!-2crn;l7mimAPLDU_v{75Y#Klze{|dy`lA z_?h9amibE=vr4@!@OWNvF3`;X22I;bBPF3ri=|aNy)~Q3I=zKn2uyGI`K(Oqr}hDK zdJUSWw5lbL%RHG9LBwralSg!XGTK`fDLET5asf8#0;Oe5K7vmsz*8zh;(p!-)lA^i z8_I>i|eiqxu_ zmjJ(QsIqG~&N^58?ILXE49b%c@(}%Wq|h*_irl$|xn*5(Nq+uW5GD>a!P^HG2=jxh z=TQYMEvSEaojC@Y=WjR(6E3Vm|3@Pa4i{z3sQo%5Fzl1tX+J}OE%tG;B%o1($U}m<;pz3&AM@C8?j-7oH#7NXHJZLm0O#Qt*n2P~ z6;;7fPaeFC2@*>#JF_x$VFJLH z3#U?a^t`}E8$xrO%Y!QetiOMgxDMl`tL^5&47gqhRF83 zj~%m_6DejBQm)dJy(RHL3np`~I$DuGO-X(KqZ}a&bcRXY^h?Eu%ZRfa2SKldBU%JO zF5=ijL81M%hqF>}=#=no5a%_LqcdV1)lh``zVLIRccZm49Zle87)#5=RLbf&VBFT? z0M?DcVrkuE3S-JyTx7Kq%rqgJRiF=us@{?(an*>Fe}wvShA$TFB@Uvh^wP=$3R;zN5QDu8m|u9 zN`Lk27vZzD>354k)K=uE?3*LUq>RSJNeo?4csPHB+mP-7ip0)p(>r8H1eshyoKn&1 z`sw02wo%CTNp3)XTBw$~n+3R(lE|LqGM^|Ca_tvRj<97DN!=Ac+ijXnh@@rSXn8Ve z&rb>w=};*LQ)xsK>DQWCx(u@e7gkzr+8nitkTFz66>+Q1fF!XQB*kpw6LV9Usi2cN z&MGrzY+e+xY|(`fF#@^psBslCpRX5DSzYS>I#3eMw1bdGrBPrkJh|F%`m{oX9reJp zJp-9s_7slps8${`4-89fzVNcJtyYG#lv?v5_0sKnw`nCi!z7#f;(114*g1tDE`sz8 zyDkCJ{BjN7B&7xW$We>n=VS{%I9mKa_)X51&Ts^eAqF<_yd!}8QOE^}DSowaNo7(V z#WHy#l(;OesiU{jL?z91SZFcZ&zKI!FeymSH#!wa@K7fxQLuKp%B;5*Q%cZzfF>dz zr8y7Fo#U$x)0eGCuQjTW_ar?gT#I$)7&a_$^iF2gBzHbFrwoI(>Bh|J;;%4@QfXy3 za}5QpNI)u2kuS`A51)Z=sl*)v#=&fb;S z-(S=nL(2>kVM-U;jprYy8oMZzXLktYG>#(TElh@QK5q0=bC@&hjJk2^5hDLSnG0zS z&fw_iO#q4O7<>f`A~QKt_l#uRI5?D3u{%C`r^!tLReX?sF9y#6k#!s!ZbV#Y$D$zZ z#x(HIl6#wO_S&#t_$9pcNTlb)zKAAdEVCX+(bA=Hc-S(Mr%<`i!;FM8Jk=t(eEj`o zq<=%IWoOKxmV8{%@-UxE;qvCF%8XucOvNY3{Ae$Q6bE{gKHflcf(ux~hB4o*H$iGR z`vs+}+ap2?Q<0Is4;9+EryJ3*?TD{}O7l0kQ8CEukC_uSpyq7k*t2oW7uHrL%b?@6 z2O++Ts^}(7F=;1U>#zVD$I-Z0w5W!lj3K`J-KNetCI;=m+sbAG@;D2ACo zey(Y@ebT_DW~}%*9BMbbVr)EAbpG12CQQ&$E{DusJdW_DUY*Wr$e5Zyboxi96OoGl zxyBTsg%!;#G~P=2saE)cYhs&4CK=ysou8^DTr=~)4!7!&{k0x#!OW?;x!I9Tb5+JF z8@#3)IyFCNg=|bt=Znqtwv{#dkG8*0Wnxp22UD{&me7<>0cVb`x$Qir&#dZi#WFw~ zPrES~J2$cpsfL6zt|ONx_B?)j#TIGvMStv;H=07c(*v(t z*Xg2ebgzzKn8RB^ACa%S0LOr}EQGj$1)l*(dA*6=Qj)KUuA9 zxIVQ9fmIQFNf}0|L{(lRn`2P&5OkkVvAuXx!?4{h4z>rOm;0gWvxDJosI{ojUBk#L z(jJG*!}5WZctnc8{`9^@Bhub{+BORX_)7nqZSH|styU@cN?+tYUmdA~c2K)DiC}$8 zf(DXb%m9@WQ|CI#*Iz{Q3D-q~4B||UifF533AHhkC(_^6B<5`(fRNVT!WPb9Ks;X; z`OFTPJiPV65AO7sma6k{3NpJWn|Cm!;iq=lYY#KDW5JHic{$ne(JmA{E1&w!bKbDK>41ctmin)k% zOvJ@dG7OLfQ52YH$mE`cw0IM@Ren$R{3WG2glZm1qf0x9qCgiB_~Bkb<~Rv8VZ62) zGrMZm-W8(GtH5N7|4HHr#q_vt$95p@I+m+fKAeVcdf$N6z(A*bG2c><*k4W1!TOzr zKa^dF%)~WlNchiRM(5Dm2s#HLwJ){auSLn*XNwhJHDEsAtyL%rL9PcQ%y?Bfq+&>c<&xObQprUs&& zZq0-Qu%JG&>ayj9iYY?$C(N=qbGLBCsaTpUYw9qSq4azLHn6-QYZ;}L3t;o{BM!9} z{V0Xw63m?WFXR|X4&zIm$ei57?i4Pfcpl#!NZ%p2N&#^mBnHPvq_wB(W^OjRMP%KV zn$RHP7x&KK3XfVp0DvpP>3hNy9z_UN+mrH2pb_}b)#w4f2TMP$n^jYt3b8Ll)g-Zz z0f!+qRFHRo{@h&WUOQeTVt+JriBiJf$x~{C3Q8(On~{}<9rKl)mN>uM%7u61XL{MV z^&SjFwx^!Mg;9JP#Ll9(i?(R0V3gG9RJEK%N#gI3uoWw0x$>wXs@y2e?a|EUeIF`BEXa4if?mm6s^{9XCRXnq8NevVPR?#h-L>rN@WH3 z;{)mZFM*k{V1RI`)Ed}8_k(iLFN-mNOSrZ`;wF}}SCSPa33j2sBzBu=5>#`IR*j8* zGUV;^Ghq5-?+VMBt9ABZK{9{vboBszO8m~5%(pi}Saqo5E9`p2g*=tB>O#JWc*bkP zY$0spZ%S-wzbvMJU;Z!uCVVq?P}4ifKe3-T-?8h~sUp*_lvMh^k_aNQ@Or0uwGP`tr)#};}W>&9Rc zGHKJClAO|%8olZR*;S;qEH3d?GoV6PStt#crN>2;#D#GIVyaEo3;tQ0y_~j??9T9hmb=Df7WN$8(+Z5*Z>R z<-0|pegwjzf~a~UBM(#>f%*?Zbv28$EKsVP1n(>}PhUVQ2vAoHd5@0iSnIG~tuMK_ zi!yVAxIuuR=JBW87F}(&{8=pt#aE z!dy{^XcKNv*{_KyQ?wlJ`~8fIKF+1ih3o++Ra|%Aa7Nq(Z5{JA7-=u1U7%HV5J$%7 zPR9_cpX~8a<5emt@_BQ^@2?@C``8@%gw2!xa zozAEftWuJ2iAq_7-WkO!Vaf36K6>PPbsXE@(8uGd#c+7oYlq5eu$*DNXkf=UQS|iY z%paf_?(LG(su9I0X{oF0Rwwl@zg`veYItqs)~r~ZVZgtAw@m45_Y}#3NAKl7o((b z@maPUcn=L%!pyCl@TC|7gsbixCK`BMqb9PNQsgu6b%@woF%FxvLN`<@`gc`MxuolP z>xh~HbC2JJy-0)cxf0No;31x8P;aGwJyd@GRwo|1vd1bn!rfh=q&e#G-(6C5G;{MP z8S`kY&&*WPd*^VJ-b~Zq(_FRVT%SAJaO2Jt%Zu{`dtjVk(}7?;<1Xf0s(c`-=BsOr z6$WJDt>&e{nf77FqM}W4T@)78URSEW3nA)0A$0Er0~(yA^RYO?HSnQSq_bwn-Zm{Rbv_a@tBG<%mYq z-Kx%#{Jg;CX1*s>BAyxf0$E5JT`4&lHJ1%dAHC<*kA)e%yBoY9w@~E~wvwjPj=gG4 zjyBoVLN|{H5n%9qW`G8q&*vTXr%{9nPEeSv=Y@Qc9 z+VM0lwPR>yC&#k51G4rHT2C8{Tu4xd4bLh4!;<>%v&8GNt~%Gh?qwGtp_?|m(wj%D z&3k8cv;oP2*%j9{U)X`mEO7Nkw$caEXln*X>RL98w2F$(_vGq3Z!S9(ip}_3`K^;K z<1WRIPhe^W`oxU>9P&r%U4f7)cItV}1!!B_XPc`G~t*6}&pgUk2bOH-^Uibd4Kbrfrs9)!@x?(CnBaDii^FQH8)FYI=tZ-`sKrYz^*$dj;UZ;?+9s z?lN0vRj0QSen&@4Z(a@z;LHDPW}JQf$IvpQG7z3~-HYEXr9-d4fcu=^*Y5}~oky|# zDI4?a-Y3p)BhkS=4VDSwSJGi&;9eMZvKD4!R5~}c(S_~Ep|^KbY!=lviP`Kdt+}uQqRzNw|&u!&?US8_{#R|VV8oSN7Y)Kz~!!DbJ351BX z2y*uN=hgL`J@u24iF={EBcz^*wa4WfTm8Bu z*uS)+JHi?XLG)=h8>nS=$#p`^HWx$?JI91pnchDtEsK~Y_TM%g`d9R4IV}7bVDPtx z{A7_9n`^+s*dU-W+G?CD7mcPC{Wu%3OS3fLnKnc1Etdex&vz`BD1vJglJILN6=7ei z08x@G=at~EQtBJk?OM0Ya@m$rJdzjV_> zjA=&a-pkqc1b1d(K5~HPOW-A8evkp)IpnAyskchr&me_B#zfUX#^a;TIR7t`c;sQJ zzMO4{@&<4lairwoVof9uFafNQIZ6iU`f|&q!u+^nrDO~>tz@<>3`jC}MH0g%T?8S% zbQ+XH<9gn_D4wB#62s=*xmj@Okf2LS;dSjMidDw^!=vh#xg?z!R-j*t4|7jO;bg{- zh&Q$fl}je4^*$(tk8CEHt)4e^_hPsDDIb**Xjhw+%d``N?y_IHbL@!61V;ys$aoLK zg6u-$C&kpu$y5eadeNxfDy_63)aka5g@PQPd2z_82IH5$Dn2Lq!-A(o_$-(iiKD_V zxP$$eG`gQ5lxb9%PxYCm8HS@T|18_b=Tx2scqxttg4yuBV6*l5TCXs`@U6oA*;U^Y zB(q}%O)n_s4R;97DP|&oUL^1IhBbb!-Fyc^NTXxMuc7eb5ic6FqEaLTE2zoA=YyQ` zce-G`TVVpl*7E4e8M`vDK$JerMFAiURvj#)gkslWWlV97v}t?v@&b9`-yc~j&hE_N z4qy`G+0!?@*R)lw5bh9ZEq+{wcaA)ey?8XcZzy)@NdvQ13b*KfqEc_<(AP9h{NLmp zIWE>RL4K-gO}TxY+HQL};l|1=pSbGUuz#?6Fb$l@pCK!)-YR%26L#H#>@HQ>3+_&S z`jf~i^$;brtx+u-R}YD>6bY{=4D*1bq#6gf+_AeDz_GKR%E=O<8M)ysO=ihZMZZ%I zP~g)LiIQ0{n~UGW4jd^h@WUn2Tq^PVSCR&VSwmAEfZ_(fO_N7o*UDr#3kmC!eN*HW z3snk{Q+Fo4Av~~i)rggp9nVR=+j@hDQ;3mu{d51g znbSK{6u_eOH_*6ce9Z`eee0>FgbFpY7;FR6o=yZi-`2HLP5_{%wt2xldi^oZ4C7{H zHK|BEGvNd-+D7;Xx@_paO$_{~F$Q>KjTYtpo!Hv3m#qB%B~oJY=v#NH26U4FykOH@ z77I?~KciUXVH6q{>2}z#=r+Liv?B8JlCBA3*OcC0rCxVI7E$nyX76GuNSv~2vYBa9 zMq+=EG$}{)6$Ix5AqN%G2eUDxSr0dUIsdlR_WRA@{{!puEeU%`jV8#)W==iYW*U z^Pmx@s*)h00Tvhu>(0glGes38(CeFbbpdef2dAh;6tcEmRYyUpG{TvLl>mDf+mSCC z#?mqct}aUeJt+0DSd9Jk^aycrQCF!Mk{u7uhC@kberb^HE|eK{slzNp z553GuM&VW46n9fnqCMakmFBD!92dH-u{d-8W(kVsgdt^JB(ttiPL>3@d?e>6YxDD7{MH$k9>XX?G7?}StXjkx18(S^?y3}8enz38JarzX&@l@BlGQP zHv9D+CRSh+G?n`e_#f_1@j(IZK=k8>A2Hbfh5Kv%|Ma4&Atx&nH!~9}`~S}TyRlqMVZ6tiy(2CGtNmFnhf}&#c7Ge4`6<(uFgtp&zdJ`0&5E zDFpNI3+bZ(t|#6gOMEeOLGJ>h9sx-hmt`1L~b=jZj)(|4D9Lp)NS|JTLOxqJd*d>@w+`A_YTxNFmg zqbIiuc>$4f<&>?MqUzln^7oK>iGK0I^e?aAp~Sss)I9xIix9$tq- z$>QYugLl|CRzWyJ>g(f7qL}~Up0@`wx~Ydd5E85fjHoQEUC{IN5<9z(cVgT}B61`B z9rf$d#x=z#!^S0ED{}Ro>xN1Rbp29TwRPLA$zJatWwG{goTHF;N>GgBh}_57>wgfg znxob_RV5JJ#JRwiqmjxNJ$gUEK=&<>`1N1L@@^+nMq&4LR_}xIp_`bHoTYe_S~H9pt^k85!w7~N_!kQ-%z118+(3#IlRdIvEnV8%#H{8yc4o~fA74j zV)Gm@Rpa}Vw^_jD%MpR@=&$2)8`A-Th z#I*CC9;yGJa11)0l}c64a!KhSPenD$DJtt< z@gZO5t?0{%EN~WF3HC1CH8BOQv0r=wDprqt;ZyWCdW)1ec-$nR5qsq&&~oS3&-)lV zgTO1Y82VIrQU^GVX<64xNSZcRW#Cm!x@5Z_lf0wWs;u&CWqOh0FO%Frm6yy6pTtg6 zPg#`#NG|Z**9E@cHcE6`I0QoNs=qZvp$w)Y;d*Ksqm`jPgK*U%0t@{2^ULDK$6>Q9 zz71CnfRSC-axDx;N5|d&es&5J*Hkk#hxX9%myvn$ai_m8O8vF& z5A}JL1?RCG;!)`sch^jDO!_rdK%eq2*oQpxSVP5de|mYk&t`Pjrpe_M`;(I3X_FfpQePvhTGRxfrHxaNmJ78zQdp%Ko5=e zD#Gx#FabwG%ldOgoVq!b4~u{y_7D~8*FxoS(xqfEvx3jho9|0~$PTSWZ_@EU%hARZ zxjC5jsd8`B>78D9qc%mVk^Y48&=DS=Wc7PRc=}8^6;l;IqCR064h64|npR!EaS{6x zOv{~*Vk(nB=y11Gu4oW1qwu4dJwM$WTzC{&ff6_f1ZTp8k<+t1hhVap)xE1Ud3fAgkOlpwR_+A~2b2zyc!o5HChF+onNjA|i z$@?~CS)k@xd)XFe1nL9NbB*w6meYDZ{To~si~8oWs@`n>1xg3>itYW_2nJfe-hCMh50~s=aU4kFg&Q2vv9p`DCIFckMFm0^Jkt$(hPGp~h)0(=-Ox zSX68mpbz)VUvnDPx~NCX+apq{7JDb5mE)Qy$Wr{nAVnzPsD{k_6>z7a zBV?N};5UtkgDN(`!YyZiY$i0~93NT7J7Nu|rg@k$5&nTi(wcz+--(l`cjRWt{Fiuf z_T4myQzA%4EOpgxU~OYkpHyhZr`n}%kQSqiB0AOwD-&hgGS;K(0>bY_xi-QzbW*U{ zP-`<7!YZXiWzLxg$u6QNZqZ);+A6pz07gK$zuD}TA;L1Z1jpLkPtEEEVO+{Q*3_pq z+BFtqy8&K2IPYv;48M`VI#j^%Di`(N-2yeXrhzqWhpwF1?1t*7YYN_nYwkj?792NT z!LGlg;h$ZykNQrml0~bqHzxcGz@!*^TcD1_(|ZMhT~Li9mv3AbRFh8WZ>u)6vcNQ< zlYj|@!eJ7gpl1>#sQ)gh7 zqjQGTVI$f?qVtf4hr8Fq-^a_x&C|ov*)ME%w_qwiZnH$8QrBc*V*ThgoHJZ0m z8)_Ii>?a98Er-fI_B%rK46#U1oGg1Sp5}=Rv_pKSdKW>Hv)HXKl}*6&5|<_6i|~qs z(DUL-CSac05O+(+6P4aHsolUh0>OILfUhcpzbu?mUQvrcg?Md4#z(HcD!TTwr$(CZQItK|MR@(e0{&2q?1l}I+fIw)Rk27OIHHn zUOk=|<OO}fUa|V$r4YM=jtxrigrRe?ym!>kT z@cAaza?bnolKb=q+HwWXA*cLE8J&=5$LvCuZ_tY6n9(r!Mj3?hE`A;wEgA^Z9zf|Z zJ%L}NnBtImA^6|Le$mOaP8sS(ZAk`JV!z^nrOY}y3`py?C4xNC{Q!>q6#DVIP%DFW zK^T#9^!VXe=0;{t(2}2=cTHbbeA- z9pD7)M{u~`AjHB)ngy&N|Y8{(1;|fpIA}OH1@wA_TNN-5XlAuS&iGpuu} z?`eQV8f&%BEGm8WGkj9p`IdbBQ08cR`tB&(%Z6wzvCTN|)oT>RxY{KlcQ9M0B7qy(0#1O%*^=%y2 z|Ip4$H{0j}Aw~~hqLA`8F1zqT=T$^@4CwRy`en8uyBm>wDa$yPB1aWuV-E>olIyPk zbeQt`n|T<;8JTn8+x*4B#()1pzDn189575muZfjOXimPlSQxh#i>d5$VjrPeASR0}h=|6)ZI2){Bn=y-iL}T=| z|5D%lcn2j6VcQ=U&*&y3&Fj#2N^{Wx6{En&HY)q~dd&F*?v(<)n^T+eh}j2Vq|>eb zCs5|RreCh=I2Oa2+3AvJL~H1G(5&QFw|jI%sLcDkNo56=lPj{d5)EBu#mTBmeM-QU z?vNJzAKf*ZgX4@*tp^|eUrZ# z7)i56i(_rshU(I7hpW+2Qjhsva6ws*d2c%jlwrup1V$QHiA@2C>M`+%Qc*-N|GPY> zB(k0#F7mDtD<6l)+P=RetxpjHxgug(F{&TKOkzmHngNHgcIc#7S%Ai`b*nNBEKJ3* zW+pqAh-p3|*AHnp=bJO)xaRD6X7O!?ZmI&%+HmFbQ_*3Yo~M%?<Yx6<-utW6BMx)Z&oK%Jr3;MQ~WI!PBq3x=IHBl^$0Yk|+dS@!a&Ex}oiP z{7r7z$nAcWWZNqwR6Au=%K1RN_623@xwI902mVS+$DN%yz5D{4NfjVYn@oZASh~!* zx@I=qw<`5rtaC$RZcL~gaTbeJHjzqw2H3K7wMbm*H^O;MAlM&RoK$)_%Ue2^$1amu z>^DeAqSrVZoSi9H`&=ue?@v)XxYYP`)Hl;mG{xMr+ww6^OV>1hG<)qPXQ)cM*z66; z*Pzg>T2J`sC{=L0sOQUJj^9`p#$;t`Q#YPCa(Uza?F}e%l3N=(BoT8ZM$^>pD z7(256JfV_s+_$Bm?+zX2i1W#>sC(-vG~K*}%A|NVhl@R2^8%Sq8g%uonncTNEr&4d z1)G7{FpM>3U3Mg3mhB~a$?s}zjtOca#~J{fV&z_0sYTZ78a0*{RhRyR2O)b6dbNcO zt2KIu?*tlBYt+L^Ck{0gulULI2@LfQDBQoynBku;rz2}a|1$JXP28XaTF}ZE-%e4H zmdp*ZjRPuw$!YKjoS`IA>RRc<<)9rSq@!Uzq#`_GJk&lo2Y=l{G-A+ruanb$4N}mu zF<)qfM6Gc-efod5J9t+dlYN_kt1NuV3kxZGLtdG9YNr-4QMpk?dRrz?1p0Mrzd|GB z*09SdTI984XoxA+#Wv9xeS1Dt(GZwWp&Or*aT}Iq$W=DUck^>2Wzo%6o_km~+&Fg% zXQ# z{yI!}@gtl89rM=tBrIy)<|TXBqtST=q-~JM2Gn;N88}>z_Ki^P=i2d|dg>4GKr;Aa zP}EYjNj}7<(Q(O3?Rzb3Q$PI+&rKzb;Tn!-vsan8tR6}TH?SczuK%l!XRI9w{4 zce=qjIG(+j`fTVP4`qdJ{6%G-XupHesPDWCg6-GJL#QA5ij1y_8Qkjk-w2%HP(Hm8 zA?DHb|2`5M?+Gk(CD`?aD;Tb~d4)~;TPdCK(~*{<04Q=pcwToiBb6MBKmD%Nx<}5* z?{OkkIdJ5lJrxR6f@Vs2_@0p+r6jJ&;du}kS z_0%Ao=M}Ai4wmGxk6MKKO0$k$#cGPpJqe=+G2~aCq!0w{xWp^?kdA$Lr(EW#^zfGGb#iYd z72j;xBFEr=0_BG|caA{igj#CGjD$DVU<#w;zYyy;nD0ZphLBK2F_B(>Q4f|s3li;q zE@8X#3)E+=GAQ<6dcaR2MqS>%3GKWqdBlwGki%_1EmFd%EVYzWCj=4*zr7U#C!o2Z z*#Ya{$iHi`-u{i)_)0OHdkw22qDi%gjAQLm&^SK$GlrmAn^lq3jhT(WV_PCsnNMx` zk$K?yORSK*idam7#Wzu@11*0g*&FP;KNDXMIsQs1L5dukpbmjG4w5Wr>=MrpEK_>Yaz!yfw^GAaCwa445l?OaK(u00n|t#(yMmK#Z^ zGcC7i&V+3k&B6sl<#mjM^b)!dypUN_>rA}%%{cuYwtQ8R&!Kve%in98rCyuvT@nCB zA6f|kgIC{xHxp*c-$0zF4L!yFmiE8M4j%zLMG(2q#p0(E1S?yZi>_?zhH@9QWB~PL z0&dB^d?^WD4=X>fR~Mmny{Y((z99|X7&Tuxw!u{kbFQU+(A*FYNvZ-T3bSqA z$Og`$KM6K1XKrG#OUV)jGjn<4bOgdmQuXyhqHpobBzXuv&@VjUX2baJ;>Saj}LZXfx}HVCa}!v_ZbCpGPcA#?l@(WWYwQ za(h*0cEDv|um*q#p`arhvjL6~+`MRiFfe)caVTr{e( zR4DwO?@NYT?e+Z+s~afNVObs|mg8^31b3vN+A;kH$78`vCxBPHoVbrCUu3!cFtOO; zn9*e&hea0Vg&&Fv3+vvLH|LexK9@=DhyibAH&?FI3qqXmgXZ*&_KJXRFpv{IQgYdq zS7O;AUNjH$_w`J9kz!!(e8j10om9GzxoX*`$eCe+-lm(27~%cIQ#2E4mbER#|(4H6PxI)vhZ6G zG^6y*lQ56S_p5%0HS1079pRBwhyLMCP0prrss~HL1nQ<7YgCkfTh?sEo5+Sq3_c4s z?Hs?cOTSDt@G0gHWbsBv)=lm4+VoDF1uuFs({*gnlNL0ql`AP!M1eE{Q?AF=;}tEx z`+<2$?_c=Z6gzQY{7$z1B#eqENk`$*(MoFtXm{uV9l5jJ5b4eE{TL0sjvIJ9pFHlG zrlHl1S`U98ZGjP~P(!#2oudPfhP=mb9?P3Qe{qmIw`IS`cAlxg3dADekN&=Hng0F} zO$EKL5y4UPd>b+)rcxJVQC!^m#X@{)o{)Q>=8GDaE5Yg1xJGy}^KSu*=krm6z^Qku zn`-7OK>qvA$HiK0EXVehUP%7JkGhA+V;7MMXPTMAfqPE{y@gm^B1npe&Cd#rZA8P0 zu7&XVBr`MeX9*#3D{PNVRDF)6tK)l&;41ybS%!7HwVwkUVRF6kpt1sAQ<udr z+>wSW!E@*H6^!3O(k!$SCn`Kt2jy>$>P#Pz?S`|Eq;9KbFX?jgnG;A9AA!AEo(C)C zJYU*EG(X!U!8ZOusO3rgXB7=69CgNmVW{-7`c|@ z^gaawt~=aOq!Z3-et4rUngN0<$N(JCTKcgN?jg*6V}AQ$SA0XGJ}N-a^g)&K`nH!g zVJhRlP<4lEDyD9x z<{|EImEqlyTB`RWC{TVKw@Zp8II9Xq3YF=nJTAh~J{Qf~W%}Bx5zKw|`?cfsj#w=p z8+fC{8S!s|(?^pI7%`s>KmP(=2)Ct15dq%FL)`cL#Vzm@RaMi?;!2DPZb^E<8tV%8 z2})`YcXjf}gt7zd2h;Pc!^u>R*~%YF9i3lV)_BxGWd+5&LSx2QtnbYD$2JKI)ec21 z2G-!q7t=S-PI>J`P+uxPSb)=bZ4$>Oj! z=P^P&YBwI(W5$jbxZU9xdOBKa#UV~^Z3(6Ii^(o?-ag}vI;XVP@r^Pmp1Q5AL%~8C zO6bT~NL569WE79_C;mYVp()9Wx=m*f|ASsdY7S^%R%C_BYLvEjMjY!TF?dlxi7KIE zdYJd1mSan(&FIgEd+8Lb8dZs^(bUu5lq5niBsyBl$l1aC6TB}WM+5p9UIYLlioZCt zwQaDPn>y>#o~s|eD$3I)__jBE(?4s5@w?a5Re0vJdX!;n_TdWJW@e*^{w5--(7`o!jtYw?j?8%PE?!deWSr(WAMsmb zi6vW?RD8L4|MV_NcFt9`m`+S5cDI(A*q)g{n%s#puvXr8;bgC=;f0Mac1pM_F*VLGET)ZggmU z7-qm`E*zyf8l($!$wTz3E;ZO!f zJO*YC1<<3yMaYS@PfOFQ^k6{$uq&(!bp`1u3fEY)o0VnS%Ygx0BfaW0&%FyWFeawW z5Y5A<9v|C(x!#;mvNsLd<1=g@E}fviVc!WnrM8ZGN-eGi>y6p*t0e_o$We9%AJnz| zNRr_S{;M2tqITP(btS*&k@!cBL$XBWyhA-*oIN)1A{oud$2@`TEwk}APBlsO2N9-#|ZaW_?IA|GCJmol8A<|bB7=vMniF}GE z(z*<`%>f}Jk%y`4fIgGV9V_ZOq8=l{0A%wL_1a$4KtdSZ*GYH8FSg=NtsrbxK9RSe zOiiGdi`TeTDa}D|*;#lT(EiH2(sPlMBs%_3{LF^8h-|~KRv-Ox;`QNGS63B!B{P35 zAiYpzL`=Nc=RHzB$< z4wNU1Y>uJj2^`T440r!K1r{B)$`hNE+0x@}E>phVo9b)&$bpA_whhH}MGqu(7IGQ? zT_1JAQVS1a!Nc~6QL~Y=JVw7sa!CX|@ccIeFG!8Kk{uiIE26S~=@lq8U9O`lnKilY zqeO7D{z-$PgiWhw^SZE*iANF7ZEk;tEHi6pvu%a#IO#Dhnwo!K$8V<1PHA%Yvq@r% zVDFIucLinXGxcJq%A}+H)n(+QFPfp`B#b6DN1<)WsZ;T?;ZizPT; z;F8htA%ck}k?9t%iQ^tFuO3P!n!4DxUETy_g)@Sh7Odp?#EDuw%2N}ubkC%^I6!UP z(h~%bJnqQxW)i5dq5)QmB{1IVTNClH4U&ZLTa(?d!AUq^1tk9}|IpzB|9^-b6c{J- z`^Ncgn^#1FD4#b%{>|NgcJ}{j|3ZD9?R}ok{ycoGgF-KHy6r6Gik-a)i0j+^!}=d! zC$$YwNk;|(QfdBw19pJ_{{TDx`;SYvmzx3l^2=SjTd9pJ6$W$=Zd`)&8HG?1_)rkJ zXn-oUOalzuxZT$F+?CPrud*_O(b9fI=P;h#CvdVE1g4-0a|6BfE3E#W$Xla#` zf1+uXlejM6d6T;SDE|@w_fZeVaMcTF>>a-<=6YfIOA*sOq4%d@b^8k8rDSTysi9Rj zZg3~x@pj_s)((4Mr|`r(-J7@(NtY?h`zQeA3Ir5s;>wunGf4fBnmxCDO>pg$h4&~V zaUDyZ>mp!uE!FM?Kd0iyjQdn5BjQoj{ zQ@UPu8#tjvbR=$T;xHO8U%o4mLYb<6JRuujzxPmT3`9YkhHrSBcf6|+4tEXH#vKbQ zibRU-P8D?x6nAZTyb}crs@x-XtQ19nlie|>hPV6K;XbDeYyXP=QGi9ktzRtY+{pF! ziMOr;^{3>?w~0?e;;UOfMo>pEl0*NgSKbuVJnJCB>YXgrY=TD%+)Aa^F?SGiYDWLk z(YRMwB2qB~;-80ohPH45hX)iEBAii)`+0eR5s23N`lc(dbgVW5*3E;H!?*FJsL~U3 zPQhdaheu&OQGFydn}S3Ir-wxyrZ7zIbqJ)!SZE&}Tr@`42UM!ugQH@3y_2J3mRy=g z*z{Z>noZ%Pl6YAfQ-N&=g$LGh*1>7>2hAsr&GFMQuNt_VeRH07O_to#0PiQBT=G`G zj9`}6wmq>P$rH69pC6tmD z!t#VE9))m-32MDVsY;DHC$w94IQrC&YAk}I2%&H7V;q7=9wn5axeEBYdnZ^AktRO% ziM1*36fC`}C#mCKPLMYhA0aII-EJQfkc@#z3luq~IbA%ly&SbH_)qWFaMucX{2%vYGWXR!!@-JFNbYm>6N3x$s??MeC6;!@-N@hK6E`tK1_5i z3(S(cpet1@rr_ad=g;FQ;zF;SKw#1f9ZhyeKBRyLJbU;k@HeEMTHYO(4?2{fnX7|? z(Z(5g9jQt9Pr{^l4CaLA)P)Mk(+2q{Soph*7j)4ig^h-KS&Gth8xCdKWawbssaBF^ z4HA!obIwz1T~$^hdVX&VNiwo9kAp8#d=#^Zdvs6m`&iX zH*m|4sM0mumslQwi~Nxnl4Z?14)N=pJmw}F9umT1EHyIXmxiL$<^8PdEa*bXn2HhN94osH zGPiK=%ZHMKYVy?6Q2Ap z(j^~Msu?DV=)kLCN$q3)ZSB=Pip0e+P3*Mg4F7)+>}oGckxa@(c1WJP)i}S4uvlIX z$TA{dXs5r)6Yq?EGZ(5>X6dM!$PZ@>XM$`S=`;cSlzJm%m!OwR>Me0zM5gyQ*!T_r zl!{b~1J#P3^=K89#(97K(Pmo$H`KK&cw}b%%o_NYkP>EXm_}04YL%oUB2jb~ zD1VRrViLs!t7!6@B5f4D9=Qjta zw}g~r09)S;SjncZT&txy2SMreJ4AKnVUgAcJH@vfpHrnj8MlpfR$h$pSQFt7Stexo zJw!kA*LqOir{gAoVca0vel29|l`MX`M$r>~Zmsp@XFT;?RnS2LVnVf4vcnK+W$`n_ znS1uR5j^`>^_uF&C^92#{yp6L*a40=9t`?L7&Of(jfPSev zf~}DjxC8EqmR`h^&W(X7p^N3Ry`)x#r*MdRMjyYEa7LdVQZyGQzjQs-0ia8EQ3G-Y z6dQv5^C!aaf#_BC&)qYJ@bTBjctbFBNXytQe+T<1in1?H!{GWQXk>_uAMbq7?5>?6tozq*Oc$9;2C%#aW2zMyO`?nU%QJ_@)+d21+lDVo`C;BbA{+i zCDk^)kSL^&$E$=e1Pqv31$@!?G*8tky)}E$2RiF}ix8tf7@Fn~A{MEP$sjSl9Q?9w zBBy_Jfz_X_E!-n&zDp2B(>@;_?eoXKyTowix$Mt-_$PE+TK8@fGH_CV4*wycp-EU~ zQ>9gf(?&zOnDN=Hyb@$!Ys?S3gI#oo2P6v49ye1Au(!R#?lua>Qr*@t@0LfvJom?K z?uCx#@qRbbUp^>P6~0J?R6yS5jFP=W_!1A^9kNe(7Z0{SXl26Q>K}yQ2Lis-U9$)5 z4_ha{5QBHa2{_Qa!_*qiVLL-@)!%fz8V7F7d@Z#f(}vjxt+ne%kb~)ovk|lX0SGEBUn&vOgD^jF(S0~CNgjIvUxYrjQ<>;J!Mmk*pO)cB$fw++ zF&=LKz~nyf_+|(#sTd&W1wC3Nk5aG9H3%}MwtEX%b8y?jn&4`SPlW_mEost zz^zc^p6V^JS{4rC;5n%4++x*-9)k9Zx}ZH&$AR>c?6Dj6A1%EBt?$MTpV2a>WiTVU z_y-zoFbE+jm@**`M z-LeUxwEh)LdAm{k>ZL;I;O}Sn;mYTO+J*%xxoz7T$bN z46c&#=ldh9ufLjsQFuk?hIX)i^BBgo?mKgo(z*!^8M-U~X5Jmxmss$>=-q<5)G^dg z@loskNqLN4T7TRC1zb=7BQ_smn>c|VU#4k!Ctw@vi7o&8&yuiG#F^xoP#q_b5)a2kPlxfE;Y8lIse$3-BXmY6eB!VHC>noYB* zgg&+|LKWzKMNcoM$dtF@f5CI4Kv`7Uf4g-=y1Q|Q-Ax8eU*HTh4zo-5c;vypBmeU6 zX5UF57Zr*oSSc3D*-swS1yw2CK7{x6A8Jj06oP%_xc}*Y;Xxi6C5GoDFjb#(69q~z zwa`VjQ}WIai=)#yzruDVUu10pcD{b! zKM5{1)mdV@8RH<%+i4rNF5VegnJG19Wx!dy#HwaFw_s9jv}`3EG-Y>CFMW%G`=0a~ zEW5#D!m0gJf2;j!J-jy_Bnu_j&Dnbbkxts~N22|5`w1QRS9Ag`NW=TvkqL^E#gVH+ zbGA|^{6*P*W=M=skUAgJt=fb@Z39wpn@y@3@mI&Sdj<1_+^4?Hvk?*`wn;1JI-3Gs z_KtcsS3WGKK|YA5XshH>2eR{Ps(?E*|$BlvMnZSC^?mwQ-o)sK?M+MV+VZ`e>GwUMJ)f9-=1r`YqPoWNP4hVY}c*kVIJ znHckWlv0xU;6R0^XeWk-b-Yf1tUHE_@R9X92a37eKk9-0* z7KuvxC_CtNKURk7?(b$OQ~Kw|ZQX48oL|@Gi1YOF>UfV)IDop53Z@%p?aJor_>6J& z4|R`aFU75jj#gbp$5aXnw9Y$|k`!M@^<+^?7u z8@1q*c8CpnJu$i-S?x}1{`4uUlYb|iboIy8u9{(Rtk1RjmCvgJKHU#8AV-5#@*zNiUY-` z(BK(y-y*#@FOq6>nJDxiQ^H;e`V=U)Dx+3b;izOa{?c`VE*8G)u%RjGc zf0}k*hji#(*;}Ab&Pzxj=CFPcc0ogL_o2>$XaDuZg1mjf_^9Xh_SIfIauWCeeSc~M z|M>|npQ3d8CV}#wYiW7&JoV(gicyv;q;oHuXCb@6)<5M=5Q9&Mp|*%@>})ACh^tD|c{<6=j&0=E*iDxw>e zk2{~1lEZh=eL5)-&!^1E0JlOdmnt9`e@YRSqq5>btAb-M-;5(Q?yk!QD_@fb0i6lr zN&|&qg5&A8IfMM8L}e}{m# z`aY(Q0d7$L#8@XzaeE2VyC&z zn{Vwr4zt(y!sjsXj*Nsw+@wD`rW4Se2+#8E%#r}nEfZV=ic%vi>C4ggdm3TM5=m2W z*RR{(Ca&LKMAtYeP=J?YdZM55XbnW<^9dJ9Zmb_O$fVu| zZ{N8U)*SD}32671=gjUn4}#kro_j5Lt{*bpIXfzG>?)X0U0T7AaW;?bcPV;maL&R>zu*5Vv>fgMp)dlDjhGH2lESXXTK{!7c!;zU1HS-1iU z%K)YeBke_PJ!gYAqNgVJ8zJ`_DEAwZu!Kw0RP7p`?W_)NhC}cJqH&yZ*mo|8(3cfdIh52K#j&og4(7U>7 zTKIcv1mB}09_NyoYW^)gEaNtmL{sza09nhRPY*lHqXEV<*)BBdIxamSxf`wlVhw@2 zQN^iI+u)8c%8Xb<;|wv-nWeiPX)16_RYao&yMvYS$$&j>+{zGKJD?~so=rn)cG=j0 zgYuYjJf93%a$M-0ums z0cHXIki$?7g)GiSjTqlp8P?f3zT^)NUTDPvp#-z4HiB+!LL)IUV^!1~qI3bxe$lc(V>>)yx}O z#D%%@i2fXouZTHc)XW<%&mj@>4Aid`X4Ijt>8HBmKh+n%SeH1mgCtyZ{dh7 zEsW?BeUqzr{FMS%2uK{*k2KbTR0JSA{_^ws6#MA zmRUb)J~XpC8{pVuUJ8;w6A@(PyF*(qDT&iZ z{)L+4j0DeF6tryy7>-j8$qAxMVqFX4)dV*-rwKGGOIvq-sw@LxC#(@Gu%72zDHPI& z+J1kwn8G7Yv=6HHLQA^ib#QJr%vvp&vlMFbIrT})OW(t>2>5HL)zT6oJ&jj-8_eov zh&#YPD+?OExDHNj%Kdl3b+BrkoBF?cNA#%wL)*Ym*cdIWU2qB%8Tp<=@!t()@c}t* zClJ36oew7Jcd-rjike7#o5ALN!Y$cS;52RabJBtZ{D5oS@1&)(6Rghrpszkcm$N%N zhu0J;i%9&T=fR!tiRln^IkE_8RFu-!N`69B_QpwmqM^nK`3PwX8T-`zjDMd?^d%Yw|4H=EzL z@}Kk-o?cq-D3#!TH?mJQ525 zm|>MMauS!5gLB^s{dR~pLs*BYPNv;?jN@c*hjvHoeoBlI;E)+Gt74E;2qMlqvfm*e z;x+1?b_9rWtbzR7>a4xBpafq~NN0Ak{+~|H=&R|_Fs^;{WdEN)OCj1kC&bI`Wknuk zMek)r5M|^@G~>05b^>@RJpNp z;>J$ecIR!_?2S_`&T6E^)?G>+G*rqRJT<~1?U>mpep#p;VIJp(F%(i)?3V;|Fdt~Nn-G1_y7_F}QU2o3nHqe(TiHZmH?Mav~O z5+mgxhE4(&FwpWqlX-BZz-;nNbOuEjtL;%1AK&1+a}jYUoNogG3sK- zoYP3g0rEzn<xgnav>x3cUnqhL_XW!bWr_eHam&cGYuBFH;M-12FkkUNA*;vmU_ zawI=~X`5G({O6jK79~J}%cu(q>HjPxSO8Gr>;UJTpXq>F1ov&|#{|+4*RqTc;M3BSerb?1t(E39juh1+06gB=dhBwY!Nl4Ir_!C>sK5xcwVgo2Rs(8 zF`s2~H!Ecv6Ds`-APcU*fv_zo(nwLq=rW4EW2+j{ksJ0-I!I@ug_W|&bwqR<2d!$x zo&IA*>nY0REb4L|r&hv_p^+Y#*c_02MKY{YN15x;PqP(J(2Wqj8#8npA}~O3#_U!w zx)p4+1AiF&*Wu~7WjHQY-3Vh^9evt0NN3(ZU|AwSI^w?=S8yvuFR<$S%;X(#)5e^* zPiWYBIikipf&0fe*tC3b6a#QvAJUrv?85+Hs_1`@Ip9{3(gIw{_3BFS3k@)Ke&h58 zKYW3R!`u#7?BBN4yb|lX6H&rI8DBX>d-rD;Q3HcTEQbF@rF*E2x;*hmTtWruZ2JeW z7ZjpgUzW+JO4y=T4KPYRYp5<5sxI7?6$vUzNf4_XF{wNEp(~Bdudc0R(V(?JRGvW! z$p(Nk>F&9eQNv-)*}}mx93BOo+t?_DMRW(7YNVGX*g#u=cWYopR% z`=y*wN2Nbxb3pmUJzZA?!*eRb({OB=5OE>kh*v|4)3B768`a+nyUGQQSvl(oggM0> z&%@^-(clII=}4kOi8OG5cSMTh=W@X}4DH9!#)Oi*;nT$U2|J>zh8ySU;lr6nzSk-9 z;mlyb?Rh!k>jd6f539gi7a12lU-8JvcV$vit>g+DtX8#U$BEl-m!C_?FX z?g>LpO{r&hdcnE>X*IIyNo#nyz-%*7DEgDW({AKCkxXA_7MuN0W1-+-9V6obDF3tX z+J?rUoQu?7eDUbmrsFLT+EGaLy>}x2mY5Ue^Oj(9_T;m~7e+xGq0&c@QlK}P*9b(k zJWxHOSMQTLz=?PE2`E3XNn@DtZ$Hoh0&*bq90}=A zuzvs6fvy}9D|@tRQ+*mhC_uVFPwmq^P8s4xzvy<5)12{<J=b<7$2W%IHu ziD>8Vt0e94Rj>FerL9E9L$3|Jx3VUt)J?>{29d#MBvb0MWa_?9MoKr9jL~k&-npDKaYbzhx|9_ zDwNhjF@9LiNZz>$tvx$Osx2~(LBx6r@dnO@Oy}{Qh@5~8L;mv;jK^1<30i>tb69h`+(H{$kN5Wa?h=O{MM?oiN{SLG7>0yDT#qr;wb z=uRRif^UG_RBDT#pxg#7iu(i@N6Is?bnY1+dUFk8wC@m`9wox~--m2$M$i3UEiA;} zL$;x|L1urovLYa#S4XRQxw5AUKVCnx(ptfxeVeKvQbN0GjPr1z#k;+|iT!>h!AgC89) zF!f0L0keDCx5zg{KAIl5+Q{3%(SuM2$uIC8RKbAS;XnuA7ko@uuCeG_!f<$Kn)X+K z%cxspj{T4Q6W^I{^(g^|=jM7$&L*BOzNg*Kzv5FOrCGuJ9A6>+e-WNP2+v;F&tFg% z?+QzgNMVlH=GC7t}m#FjGW3c>EQ=gt_%Io?HVGXneMyc4HglGfR4+}Mjx$qfqi-EHuwYeB_i zgX;XZ$?8!rUKDK5jf(|I!S@SfAed)E7iw+W@`e4(HsNXuG(a zm6k)um9{aMmI!wFQQTI%9FnS8E8yW(oq+kkM;3&&vPovXk=#N(<#mX6kV|g}`#9p| zBW2aBHE{k;e=S7J24ZS(`h~a+i*Q&fa1RM{6y5l>9+DMTGVpg23$flrz>G4-Q=(H| zFB|ql5g#@!fI zHh4Y|R;b)rKz7(X7+sv7JwQPVl*E#PE>*oBV!^|q-WgGcG#hU9@DuX<*BU@KOw}%O zY`Px0tO0z+G2GrF;qMj^&-GkLHdnGJ_8@!=FOM3M zn}#iXwS)HcdS1fp0r5Mta<`Vm0@E#L?~-eJyO{Hx7QR&2JI%&F&40DG@@Y^R@44;adaRwo5kWgXkPrG_aT~c zts9-UgKETl!SvieyyAcMi1VKAVZVBZ&I)+(qJUn&9gD9C>|cPyCf$a9Uzk=Tw+(PQ z$4sN&j$l6Fn4)ME33R3!N$cDrwPYPh@0@qN^|xIBs}r#b$W9B;F8bVKKKF4K_r!jY zi8ZKNMzP^?udeZ&ySPR^ade7!hT6vO81oh( z0VAEm_+w_b7ecS>7bLFe&y8IbKZ3j|y(fB71k87(bL(%5eCrAqPP3%+3()Oivk>m= z*?f%|^H`KQ1L~q*O3Kf?ZVz^M?{B-uAlz7!#2J>GR$uRL1IOwi{LhGfvH5HN9p701 zLO{L09BEm(8+y39S|d)2=6EIHho2P{yuv$l;qF*H7Vnb3O-)$mnFf;nq!hmUZT2-0 zM^MiMjaR>_$=bnDE@wK+QbU$dD9K7u%2Ipk4<{M*7kxy;NFiNv%PC^QToR>oTtZoD z5Lx-h#y%>F4LImQt9B*zp+C3#RU4cZzB3w})@duPpEh%>0=U$V3H`L7_`w1TCBrBIN_sD*rn0YDhAA2I`K^< zq8a#Sfkz&jK#yk|Hg7?!jFmfNZxL`z@aKu$ApAWNxC_Watex=Q2WuDfqC_%~oiT89 zqP!$GufK8PzylzewL1}Jk|G%=KR9qG5cXFb$5#mvPOFa@uW>t(@Dk->jTx`=aOZB* z#2UX&P&IxY-`jNZ`Clg~7}7tK+Yt2#GGe9IsBwKOM1F|-;81#OjOB(XN%d#nP&vy3 z8miwur~|w2G`TNch@M_NdglI+6)Ad0{rwi<+Ji&XF8^!Wg!gxxOu^s19Ub-9Dd|8p z$pAw74n9ezxE_}#;KnHPIiaxA2Qbk{*Xx^d>KFN=BIv!f4PBTxM>E=1)j*iJSC!Q} zkQY6NAQLGxeRnJ%Ik!8J5#tlGOSsa*zXh*vxqF7tdp&B;y}`*=>1*{rCw}56YaUN~ zd1sQq{%E*#Bpp4FfG*^$2B`H4;g&8Y<(gm>Q=%*q#^6R1LH8p_^gDh?V~h`7T^>yb zR<$F}7;!3Vxz*BVO;soCU-hdBhsR30<(Blc)Quf29G`o-4Xd?<&TWWSZj?jX0ADAPS*dmjq+c1NqZL~8%rk(Q%8D*|9kYG9?255 zEjtudj6XT9ZA~_1C}`!+Vh}2gJ@W@f9nImbAyNg&i?&fGh10jWt;%NRsTmuKj>xDl zGZ4ly`y&t$!@(G`GSZ?W5JBQNMCBc5Yg=E&9WFf9E{;^zCt;b>)1# zg1CP%@36e_618qosnW7DZyIf0Io6_ z2W`dMrVn<5V6P#CMcYidYRx){GZPL5dThD3TyJ(8k_v440GGEwp^Fwrkiz*}QjVdM zd^^Wq87kRZ!dlz;DH3@p1X?lUmbtpH?Z}-&^+j`yW2)4A6Ueusc2(=R^#*NS6M6N&1ML`(WK7R1=V^c1MS+Bde}Rr z*3zunrG@hg)ugV=djot%W}|E0$B5|Zb^sR``BUoz{@uKDV41EXE@O?niA`1(Ko3*; z33RB}oIoEGHEbzjmEU1>1+Hc7r1eybtzuI7kYJ2gE3`#4)*$|3wv<_nF+*~RR1-Y_ z38vP-LSsN3_Tcji2Z}7mREqhTMAXm%(S=}h#XS=Kz@B{+H$hV5=+Tl(!-r2K$-$+e zQP@PmaxllN+@lc@H&cxpxt8xlRKIk?UySTqg=CaKUQ?MQ%vfzy?jCPvs$Z0Hnd;qC zWMRC1;;F14@H% zTR*0w%|6z}WPD5!x_Y7kBV2qQd-$Oqkw`)u17k#B(QzoFfk{mHN^D1+D(hFR7z&~; zBsPjdCzYPc7$nU^cLY6@dnUsLrEaP-#LZNDq>FhMap2=T*&guI#AXb>vh$BF4eX@Q z>5DcaK;EHiY%+ZUIEnZxwXkHVHKmm7(2;bmG8$?Mjh{$Lh}o%NT&tN%Jvoqtj2?#F zcf39prDIr?C$23Cf5rS-Y?%dJD7&gpckTcX3MZ<0XIJka$%yW58l*2D0(H8gh}jXD zB^jD}0vnn7SzLTr8S}~~itR}27b3;4Wh0J;JLm8q$XBcEY!lGMH2lS%@QNyQ59BQ|4!5rwu2RGbE@&zS`&Ez~jBEEs8P1!H zy1CD)%e>Z+czHBZ*=2ljP8Tau33Z(<&1h?IJ1d+4?5GcDt}0CBGnh0>>6on|>Yk@^ zv=hPA^tl+;Hl=k4A$;O&#xUoO?uhgYf2N)%lmcrY6J%zRM#;1kFY*@r>Mh}~wdaa6 zMw#p!erj1H`+(RK(c{HepAO9I;*9j)0uxMuRGh@40!cGL3KW)TJkgi8$0aUET;Krz z%)C5B=ni3PaKtw)a*8J^(5$Y^66H{m6RJQkK>`*kCon{-0(-=x+5%Y#@TfLyk1!;x zF@48Ocr|dT_rSZtIBn<+cJ4wy#UA#ycBu#8sR~uszyq?zV1#sp)m&IMF#6eVOx?bF zn%sldavK90O@c~P_~}ZO@`PGYer@?IALA-Zx9zb-bxQcG3g=R@@d{89_VwGU93g)9 z8>=*dua0M0+=h*d(8hqE1R`t1U{o>$4`GZ*{z8%6XXz0!KhNQain~a9CYwb}3Z<8P zLY+OrgXIx{?n9m;wi=0Z0P;gRq@S)=(lJVDpT@FJaqSw_vd^h_UJqAk4}d=W;cA3l zA`ysmjM}Uyhg;O+s+kYW~!|mIZ>^5->-&vMa=3-}VgPD^o{Cc?Ye!r<{Dq za4Vp~kKalqX~-xqq3g_+-#TTaQO0Y7q0q<;JRpGgK;flUU*9pMzK%%=*rSEv>1MhQ zGY#m;T}k-2piK2sf8T=r_<;=fPlAH`pN&%g!(%UG2{5q)nEzWiTGXtSkarO!QsyuX>E)eeKk2aheSJ;Yg&z_{0+&ITwxr~)th%^N+B=_Z1OuwCM#XT1 z_8Tp2i)VBMr?|Pb=yVz2R(y+59WS~qIVu4bYQI{qTH1@aKV~LII0}J#Rsbdn(w?3J zV*msW^&yMJhDe8DFfFthTk5)<<)}=7qjbReENg%TQAc$?SPgBs-~r5*Vveo0fDB}F z3RzU8?ObIEQUWM=Q&dF79Kc_P#f-;fO=1KP*mgSI}~m6$KSWJEU7 z`E;g7OMA6e=d>kfLv=w@#a38yclnujcSem;0%=?_>}y18)mChOgh*>XpX!om%Hru% zZ^ki5Ko#rJY%nKPdvKg-XPp9?`E-2Z&vnMWO~6F+I6u~?zWLoQ)B`V7W*}npB#9qg zy&C$hpCML~jD9_IR_8&z^G#z1H8~&R?x7*`9!byHq%psW7en_k>yqWd7Ke@~GIZ=g zd-h}&XtPhhnb#goYI;13z_@hB@G;J6nPR7?^am}MR_0^_7L@dZp~Bje$4ski6>L&< zhc6n<65|t@+nqY_j@?#^eA{o>rHiCNmzHw=wbiV84b~q~u_u!$Q6G9Rw}H{r;+P?x zfr<=qsGKxajuff^O)Wj3X0geg@c>hckU!+j3{05U!kE{@tvyXyZmt{VTccaN2%TZ& z4BF<+5NX!sp*X82=M4?mt~5Ib>Xt*a17zAxi#lgfXnhGb^>m*c;`8BT-`nn#;-LL7 zA3#SRC7;C)+j88#V;(g3wL#_sPQsUPo4$dc$lLqmki`0S2o!@)3YX^2UjcHta(4&S z0#-jGAV0SZcYlf#0ui-!v^AIRob5w(1t=)Dc|iP5#q!Rpu-V&#sYl$LyK~t@2hnmTye$Wvu11@*>80 zdg@~rsnOn166Q9a|H>EE(%oR^kS3&24T5!wd}I2{B-@Q)i9XQ;n5sGo*njR*MMpq;1g0&&#~`KIs4&dO{Fd;6cRt*z^Lh=%?j9k`1}%&+gb zi$Qf0Xi(9KlZumyb6m3mRfqad@3xmotvz86`rAWoa6mwmYuo7aS1{)>Z zS;>XUlgN`aY7&?Ri#n8V7laPKgiAnIr+P8kT7H4loGfM(Qzy(C^4-5SF$OOj_GyvoB+Qcuq9V*XnnAgzH{j~FG;!8?$a|>G zY@j)rI|C}b_NnH~S9of~#%c;C7;hW2r;RPAn7hrHad&uicP46MdvgtqZqXIE3^YR7 zDfS&c{WvXi3k8&3Y0&Lyj5R)Yh4`j&AZVwUA z{e;sKRc`GmOc_^zba3C}=fu%7-l0|fKL>s zo|qU~m`^*^L1v&YEJb^)AQ-#A4UbSAcD%Mv0;))=F%T-C9taxkgldvobvlpsMrCALCZ~YPo!-6C3<`S0^!Y)nlhpQD?u<5Dt$QkZNiXIZOR2J;GsSVxtcc0R$= zE0C(e{`G^*PCq9`xsceGcNHwTI;b&U%RRR(%J%VN#>PqIGDMjG$ zJ47^o0;*bMtr#q>o2{66yqm&WQ!vsy1U#?U$c8lvpXE+yOSpu#DQBE;0L;j7{uwqUhrEMHrJ8!h(c4c((f+d_AfIzwdy5{J@6zC-52m_rdqCKu6dP z@E6RS|KHGOt-K_F!b?e7KnVPZgn;@WXqoUlAT0=LrJAmWV~>H4pKjYZ%3wK20`!3X zk%1YkXr4UxO)-|$te_X`&yiES)8#eC`F4A8JEyPT2ZAvi9WAyUo)5%}xGho_tc?Va zZYM56b2AM;k0OZl#bg{NgP$YG=&$U?hg zf9aEaNvlYV(m4Xfa1I^Ltx191cAJ1D5y6FK9dR)?kqK0CAu= zNnI)fOl3|xQ=&(>5qrYF!r^QQgPN4ZRXWprZbLdhl;(JOiD<;J`3~FdE%>{@8J~dq`#IQbtiS zo}VFVj)A2n79bU=A8uh6j-k?qeY~ z1>q&-vRTCim|cica?np$&c|7oSlL%mIBoxn-?g=9uRz{8gL;S-pzyAEJebf0RnIYqX=k6 z;o%@CJ%R9AH)k`8I5UOJy&;*p!B2Vf$$!8fUi#UJahJc=i%$e_FE7}rhFX^B!=aWV zESIAsDU6_T4-vRP6rGjlmqbBL4T(_=bx{M?(S)?aZG?A4ztAZNRYE4er5uoQj6#Xj z7kqvcoz7vT#Tp+&83z!pQ6LSz?EQ_r&|6OYtG|$E`;W-e`TthP`(M!}Y-eHmmk1i0 zN|@T%{|D%lr{o3&P#7JKRo@b@E^)nOqUpcp$DKzafaT}PWiF6%n(K|U#t zoN<6@N$Fsl&L?u1&vrY`Zj0Bukd<$2R=-WXxyF7JJ?RhVp>x& zTN{t6pi$3^dt}|+%Q`RoEM^A9E199T;^!)tSee{*;o_6S;e$6SPLY}QS{2$VATt-* z#C)NN_;{h2!}W#%M@^9O(Kd{?~9S%=(nh1 z!2||XLa6o5?8hnwBB>P?Gel!U0a#62`bs}-dHRVT(OpwcU%Bg#L2&Uc|01s84-FhN z3V$Rc{g4&>fcSgiZ630B?0|m!;0OJuh1dG;Q?9UurH#p7EB!a!{>NA5|ID?T|BiH^ z{|W&cfPoLe=}HJF2?zoyoGS;L2NgzdLL`^0A(KKRm4@|?nVBJr+UeLiE{2iwT@`hJB+MQ}Ly&zINov4m%$;d-hTeY3d+Oma(2C+Fca-`G(J?*KZL?_U zIEgi7>LIAUm|Er~e+vFPQJ8n4_xsyH2p3I(wNSg0ooZk2(~sl4T^gwP8W`Q4q)7Wy zZeiNVTx|lIq+(?Ub`6Et);>u)*Z+XuX&=TzvxQck@JER{}^8KkUAf>w@Bk>`vM4_g#AzdNQe~5UeDW3&-R< zaRIsyuwz)lQ8MowE}-I*jUBCnIDf^B96PdP0_ZOJ&~s}7VP35_mjRal$T(K*nRrVr z(H`@Q?*J%N5K5h4*j{yzL5xIas66;8A1{L!(rd+8>8VqZU{pEIRU~0SH%^=HtCOj( z;)h88J|DFzcvblC5iAakk_x+2lp+Z*x!V@?Qt4#NWRVyz&D+jMvDcS}SQ*ah?6dP! zF)p}=9i_ax>4P~uM50bgqp38?`dwa7mW~zu0JsI&+chzP=*Ic1T%5V}N+X+;CKqPx zsYbicE830-uzr?0%B2joaz&oZ{oi3t@xIup1Y2+cl9u$zx{IE*1*WoDk-72wZOsEi z&k+Y0l9w0B1RmkNBg0(5B4^COYUd*U&$Xgp{cH$k^oXW)5}V;i#W!2B^SC>O9ZsmI zc8IflqPngisy{nd`&SV?nuIO|Kv$mY6auY_^$qS24Dl6bc7=`b=ZEgAdk2uwIq=S zC-VM=8np>H?9pEw`vU&|H^=_x>Hoi&_CHbp%#57uj2ui%j52n{hBp5OTZ)>tIBw*e5@lE7jue*DEdwgDVA4hxoeh~AqcEB8=OGKR@Cwzu6DSOV{E1od4Vhfdyp>(l+ z={RW)r~gz3wis*=PY#dx0qe1=?-uEa2t^ zmIF&FO;MJyO*PH-D5Y#FE!cEhuP!x_8B%l!(wwx9+-L=01zC+U){KZ)DEXJ|O)~*? zC7Cd4QCUo9Dzxxe4jV~MUA;#8?;1F&6Mpd}2$gyJ$I-4@mp5ex)U7Ev7Z(IB#cf|mkLrbTj) zr0QJ{ZtTtBD^=ohN>8iz7lrzHpAbx8gv2*04D_2CcCM3KqfCB~+?`}!fOYC2@!%Y+ z6+lSPsZMlD!ch9Nc8-GvQdx#MS#?pmY6IdIqe2}x5oi&xYYBlSeY?B%z{hq0A<5-1s zmi_=9-FJy%tJ|3NEIV@a&K9ZTV7WUlz>3YUV(QVHJQtV2W!^ZtFR@}kk!Q}yx@UbN z1xD08Dp8x8>d;nZwTGI{Y-~1$fp~XITyh4xLaDj@BW5B-wAAbc^!K~PeHAK>cKYo)lk7ev_D(`FP~jsuV^D}+;^JjwS*Vf4_zjChw=(=Psr zg;m2i>?Cbxh`L2mB@ZMr_B6Ha1GH0~aVjhDD;WD$g6NXkd$K{lnOsLhlSPsAFe9XU z9v#&S$px~6b^14M0kt@;q#Z{i@Bt++RQNoWeG9~bKic9vd+2vk&wV-_6OiZA9M$C_ zb$J~7I9yCFY5e^+xLqe-qLh~!VX3y-zH|w;Q3dJy(5@-y;qE>2b$rhp0j;sQPV$K9 zwP);(L*6#Q@6>v78g`l^+70OiEK~hr($?r62YC&$Gar6I@}G4ybcTI2wKe>8g_Jw% zG*Q&?f9iBb1f}Xq9&$`^4kg0U7CHl4;c~^PbHAA)ul197`G=zDrsvf=CsKYsv{Ltt z0jbv_nCpB?(rl0E*U~t#Nuv>zeht6i9db$0xGiMqd3K7x#x9XMKtltLI6m^qe)oe# z&O>EYA)kk>F5!kw(Af8IzCe$?*`oddi|<` zj8&2w56~`#$S;hdB#)44^6-tS=0B2;Q%K6uJavfD%Fa!4$b&9A!*Gw?lAGGaJ+fE0 zLY+~f<<6{&kfc%g3^$IKgx$!`+>&!H9548POAEcamB|9wj~_cQ|0FHa{~#@YcfWG~ zmzezT|GM)p6_K#BHT}1e+-O31tE{|y&rX@_($GVJ2FjQ~5g;|fMdix~kPuR6heHu0 zQ02(rnJ{ETFe4Mtq1OBcjA$)vs*U(lYrzpgm(!}%XrV8!hHP5ZtaPqwb)Em|vNKDZ z03V?HbMp4*VXEutmiuknY3^;uX|{*w<0Ob1D0v(Q-O3?1_DOf%J^%!rYeTR2$Y@3H zaF9vo^7x1eH?3=b5cSfb1V;UU`_iE$7EbCOi}YQWymsVGXME7*a!c&RvnR1n@Wn@e zEavhAg6x>Ha7>PsPr zmu`A=mvi^A5USqlLnQXfdkJ>mVAbVAre}BU5ghJs=TEJ%EH2-oqqe|kk0>hhm1+$w zMO|h$#S#Lq0job)eQgW)S|>FTqJagfB`8!s!wMPwC|Z~I){VICQ~UXNF`!3d(O8b@ zA;r}^hFq#<1Z-+F&vbF&KZ>ZQS6p^In>rY`H%&r~^!%LWwGku1jBA=^Eb^P@2m|aX zPJf0@hr8+Nc*pW1z=&%}kI|#9PY%755?BL)QE6vhPLCV;=@NTg2ZUe5J&c8aKBRtK zb(<;YxD{yPKaZ`@Ktg=R=tNW*>Gs>if_32G+QEQV!-if?X;l#okogt6^lnh4$L}qH zLCjyWt+9p?GhRg*cz!>AMU1tCO{cp_z637*wKaOL-g68r2C4i=(4N_;;zR>e7XkzM zYMxq$17mg{?Tv|hq%=2EmPF$+`D%x8ZKN99)O^{oQ{R|IeA7tAZ2%S4uwvK}$rul6 zQe8hOXr(VIB7=<&1lkvf)Plpu3MWiSY7j7>N}#x_UhmevE96exZh0?J<4G=KUeklBsziJWO?l~pe8nIz)& zmEkcj7nJb_jlN~aU>l}jR!PyF1%Fd<-DlP$sOBs!2Wt}nIms#5E`54L2{lY`uo z_j2Fs$A1V2`1ydy{xJYf0D^yn43c*!&&9`lZ|)7)r+*hx*vTqYH5=cO?i=YL>wUQi zXIh$D`9$?&zIXc+9!mr7J(NR0oQY>?z)Ylb6?S&OI8?F5OEh?~nj*zLm_a~ay*OkW zj)xUyN;wagThI*f$Bfa^yTc&5Uri54g}j-#I-ibW6&bV^_He23_*TGcYsIvT1uZhu z+g9i^!DJEuhj!%l(c2jmWzC?BjOuc`QKuF5E^CaGAipcnHuz&E z)e5T=HxPO}j$ryi2-}!CDxo~DJwt#X&FW^+O+Eq>O{mzkYd)^4Dk40JpR^+)6ym~9mNV^41q~oWz^4Xo@dt2ox zJetoa=}8Sm!-{GS$0;+4<;XGE8O=$oRGX9O|C(30lo;QYgb@ z!Za9)1LVoqgq+y8nqINZH4)-vWBXJ=qr=h#o>Wd>{<3#yTC6*Qe|l}XG8Cf6cOb&4L8!9 zJf%=o?GMhAt#&y+S}0NNOjTUtReCEnVl^U(1eqyy)}peBXx8AXDjC4DMKZosV3p9f zhIFtQ*H?lnZ6!|(G&t=Ytu$8_ap@#enS!U$_x3kQztz(+8Z#DkT+NYt4SWe&o+DR0=<{#i5kbO}X3`R}$%q3rNXT3$JF@NxWPRB@wi$=(5bgMGI+14mz(j%6FMqN8su0ksiZ=6Cr9rdIdY zW=#d3Gb{4_Y`>?yp(>@leVH~?82^mRfW>s-RHmNy{av&tZh(_msN!Ror7EG>aY^Rq8+j^>Q*ZC6mh z=+PC`wyJL*6>b<#$Y0LFu5)?;yZdo!TGPg{XH+(XS0&VO+>Y(M7&SJQB#JuUzkWrE zHBEHp)h7v{nN$68!Qf{A3w3o9Jads=oN`jO)3y09opj=iuv6W+l?QjZk%z_7*;`y* z-n@Cvcg`tyrhV@md*7ujud=aPxa;;4Ci&uO35hCT*F#K9SB5VXljsp`2JlVNphJ)1 zb2N;Ka{gZTg&O@rGtWlsdyoXzBKCDi^8UhFV~-#RRMZI7Dn1aQ8DsCKLMJ~kX{G*Q z@lM9{u@%R~2Xc)mJi*fHDQLLBHqQG=S$?LhI{-pjKQx7hO#LwnwAoNk7$hWq>#x=Y zX9)w{WcxiZ;;;$C}`Oj;{C-Iy?(M3wQNGn>p3QW^;BM) zr@99peE|G(3U4cRXr=mSGocUes4JFQCfdm^bmwUIgxT>LJK;of&p1PjIubf^Q?Yww zKT_Its0$Uo`sCsd4Xh|5V9*S!N6kKB!ZJd>YrPrN|0cS^KS(6Mog`$D*C^X_O1%RPPg3X~@+QBG9=joiGoVS;EK z5%z^@mYPOVu|~RWM?QQD5N{Qacju>*x3qJIE1blco%Lwfo_1M=L! zNThY73$nLd+|Hp^=U4?O*)JWuHN03y7g$T-+A+ZmNj`IIm#&m@qFgU@&6;%cvSmc& zml+G&p%gyxhD@*Gu?Ff7WSiRD`+7)-B=jYf&M>70PMJYNVg5{{ZLHAagG8PW zbD%9pkmBs>MDp-mt%~Hubry96agvDxl@W(q!jxw=a_3>Nk?;dr+E{N&gAdUGWIT8! z9J0_#t~6G;D~u&WLYC&&o{j&OmpQ~|8RPhmF33NC!9S3Dcq1B8$@^tE4;-Zj=CC~S z4C6c#{f{UhQ*#w}n3tR4vU3bsJksWW0-5>3lplCj55Q)B5k)kn8J>~Oelh{ZsN2!| zj;reqExSkS?Cw9V;KwuH(F;S}*EQtF!RNcz;c-NN%4(;(Is@~h*wVc7TE_8&AjQMV19IcNxQt>Cr!tK2$KlBg13o;y^&575^AaABlMW|HGL+OXm-g~7nz z-eMFUKRQ~eE7~x1kKReYn7TK)HUynqk2PL4cSAJKTzOr2%HFmR&ydIOO+Y?RCB-wx z3YuIHh3-I-zJ8t2*b1HUsTEOj(v(1!HQkXY9f;k7LUKVp7bH@Lj_8c0k%^vGA(`Ah znZl|Kj8aCNDCia<+CWWcjBFJ$zw|)9WB4k6WqypHWjD-SfhWvU(U#(y>DN{g1>H;d zd&?~qrT3qC9WVW^=H}}s@E(tUL|j@QJ6uaR@ z!0vc<6S@ES_$VEkSZAN`L*3~c8v_)8hJBmj%tHasGwOfe-d?W`yO|`aEw+?M(@hO> zp8-33mKZ~C8Xpdu$})kN27AyaY(nuT1|=?8s&+bF*t8Wki3*bt=(RRg5h;ODS4i^d z4~AaqAAb5jntD=DI5ZkMOo%}yNRFmVqZ5b}36$v+$_Gir7ju>zYTggtIA8_PsjMQ^!cF#A%1F9nmQ5*)1z6?pn2jQI4#7N!B#u*PxXH zQjUtlNclU0LfD_LicG=lJgx4K4IA9{TLF=qhFc6}rEERz$b-)$!LYQjWN5+gCweeK ztKE2Is3JCM6*d9qG&o`saW5B8C^?mfsuYVm6MKIR9cYxey7JFu1RJKt2Ztrngc1k` zZyYF4ZYJxAs0&f;9K4)E4rR!GV<@WJcovp#T89@};gdu%OWvAaWMROBn0FPpGiN)( zfRB@*Ow^>)*hU9yGbjVjN_#-YrgAjM+zw1SvdB|vASZf6t{I2dYZLH~WIE!q-h8u# z%XCS$>|=QRtxdTB$q*eLZu^8D;n?qnJk(wHq1U5Zj}+e&{1-~)%?2}m#Gzwf`2F`D zM(@Ck-U%4Dq@nbPL+arNb>Rn9!}qL4?_7-DK^V8hp>{|^^5F+r!}sjN_ie-Xv_|i2 zjGwrS-eDNuxfs3Duzv(#_lQI9kcWPTAA}9x8yme_qQkB=%EXYrK!eL0Q84$;Vy2u= z@7zhY(Ih_WWgS_xS&|PzPI8cvy{Ur>9CJJ9p#x3NJ$MK)gn`~ z(6pEbC#Z%Sw$x&yn|HKtU;|aR2r~#`Ls_#zu1~mu%Y{u_xjbyXMxLpo4?qUPx zZccC)nHsvNfhebLOCJj3Mi(#{?RZoM3=Ex&g-9)?i0 z6OWnCivrVD_Co1vb$U5pPOrHA(c)2W`NSxqy>7UPl6w_$_Uk1=a}ud3nr<7Uh(VFE zR9gLItD(8<)^vQ{Dxrk-uJpG}c9MpxppcuZ(L}Z0RJB(Wa%Y{+j;`-k=M2wV-@n|c z_~y|8tVln8aMS$LX%*4`!kwyY>S$?bW9eyVWb;1`p<>h^yi`O{cSihUXzZa*fkAzL~f*79;^xHMUFn4^{-5 z5+*-(5?9oo$kB9dUPO++2XCQjB1C6zCCRB2ZV#S+do~#{k|#-eq+r+-bP~5LMsYfA z2OA4Ib8nmm=S(zj@h)%ksjPKw>zRrpxi)eyCcJE$ys^LxY1%6Z)I+b3pj=6^mnCYF zXS67+ZkQNqKQ?n@q@R^G0jMksMvK{!3r|OJDNPJ9TC{FtT4_<;(mLg~16kuvNA%c* zH)GQp6snxJRY=+m^s87=n^x?%t(?5Fht^6h8B>;(ril91x~FA_dBsINY~@w~4Na}t zO>4K+6LiG^#gMd9S$8g7lH3JYFgAszmT0Wo_t~ldE7MX0J<^;C*6!ry9lZ=tCmv%@h_&<5dFEZ$ zb0Id>tweuY$E><}?%z;e`}Ya~6R*I_z+4MF_@W-ZkRq3>K0tsSMzJfLyZ43y7pd4Z zU5BG_MRo>AdrFkA#6L-Ph0SssmF4aX>jU!BAZa-wcvg)pp^DukVOhDhs* z4XKmq<&>j?Y@%$c3;{VP<{j4&XkO*hrplgq*1zp6mnKW3aXob;>WwiE0w*fJyh(UvomAPh^Ff3-o^+_za}7r&kE*+BAHA&$g{BpB zs3m(Al@@5DX_1*dWT)egx)Cs7t|NdImYOKb!sq$>(7R~qutMM~&`bAFQw=-AV#_Q_ zSEAbeb!sr5kn!~@u)#^Untr|YET6R}CziM&@&mEkPDuklnUh*=nrKSJGEQG;z|s2_ z7`)1(8#GS-@f})viT4}yv_kK1Ff-~s@Bp$Cukk^?f^Vm~t;j1C)grW4Rv(@h z^5;IeZhubqZ1M$a`(mUm3j5&46R=pd-WlMilsn3RqvSix0OMr4C;^?1T=e>sJJA5s z$+t%TBJVnAlH@xVAoY*kVrAW%4$UxZbf-Nou`5j7iE}HlHKxwo1=(nTp)+?8H|EaF zxt`b?^Jf1!p;#Q#rD=15V(x;Om^`Cr=mMJ99J6P_!c?@L=`$B`=1#sDRqu0zN_!G! zbXl%oKFSzF<8us1e92El%dp?6e6YnOZrYm(y?v`~Mc&+-ZN}bRL3U%mT(j-mo^Rw9 zHHCYu*jzQ>zL zvlJHW#6hwhd3uMy8*LO6g!b}6H{1A_A+Po@I-}75L1#9M+$w9m8`m1DHH8vGj)?hhMZ|C1+sFf zb_S}6m7ID}j%evA&aa6B9^SDh2cVhUv-XI_jHi!*P}*_}cQn+SnC5fo$M$O2Xu7#0 zs*u`=Bd!p@_|d6j1YqU}{-ldK&I_fJJ`MuKlOZk)bK#c9>?9$p@E$ps{o`G7Q2zJ3 z=HT4NJJ=xo$2;m^-N!rJpq*?0S6m;E<{N$CpSC~dq6ecqyAAO}UD3P7&wNEcF?`0) ziN)}le+4g;Me`Xya~9EK_)MHri|L19Up>8tHu8qqk$%e^-jRL_9^#XJOCIKtev2OJ zlYYw{?vZ{AAM!)gmM1c-EdINU0~*PbbOZdyk0!)_5=zbgzB%W=7?Jfl=iKG!G)fO?EVq;25~jM-lcJh4 zbC}B-F>}{ak}ocApGp=AhSvp*EZp5Q6~@4p<<3iQ<)Ga$e&fS?;wk))q@Dv~DRxQP zqepex)>Cl=m%MZ#pJ5%5!0aBERqucQ#&IVkuS&h30yRjQrkix@$Y4Pkt4ROlJG`7Z zsjjobgbT!)$(1q(18IE;Os`dS3^*J=m-l|JR&7-E6@M#t`@?1+0Bk4 zG%0gxx^{8%Q=eWMKK)c~c41xGOs+#in{9 z_u;PVxO4-e)KwPk=C~1Xe9;W)?#u&n5oh+Wv~!u2d^Sjz$C7ttp|w7juuG zD{Da}2~%@O@^fB0+Db;bCnpfJ`S=$KD>U8#CC*o@%7rwBF=STw<}=Z zE0~FXKHVc|bId2pKpV18o7{yUn&Jy>(!S;y>=n%L6<6^U73p^<+bf7IA7$pYb6Zjn zQ$qrDLu_QwJ2)_QxQ$Tp2(<`EIT9-G3_}8xS1*^nC%V}E9mb+wH29zep(ME^Fvk0H49uHblL;H}4n%fpE( zV&KSdvU#6{&R?I!)yv0;kIN)q)t}wNMqkU@BwvAx#o5z`(aS_%KQN}q`8gTKG7|!( zT8KDX@=2Ka>(X-q(8qty($h-GxlBz1Wm3jgZWHsftI|_9&>&i1SEvO%GciH>J71lV zoR(bu4q|0y3J(aTdRA^qeAeyBj$f7{BFP@`4em;gNeD;?fC|qD7#J8I9Pc0Ohdyoq z@}LpO#0}^4w;=svba{njE=Ktyp)n{a3WoBVxX5{!U3Fp6` zxY4n-+u}g_#`yycsMi?h&3oM3B@*}1@5*vQEa z-bX;(c#XJp-eIaBi1_(vo|EduaQ1T-_9g@3kI?U~E;~0@zuk>3QLnq$*Pn5(ZwL?H zoI|l!$}H~C3voGe;WrRGgyCYyNm_67JH!psURVaNrb56^cysqjlHOPCOAcT0gX6>M zrC~u4oZ&=RxM_WTsgYEG?O}r&d2o3)s1E6%Zi(ZrQ@97pHK^h3mubEio_ReVCxqeN zd%Kq%LiD#tvMKF6LDK_p*x$QM5a{MBtL0l~fc^M#IiY9^HO4}!I2eyCaGWj#(o<2t z2fHjWDgqJZ$Kfq@8R80`B_|qh4*jON*BJo5EkJRBKyh&lv^1o%3HZsh@S-J)Q#JNq|G108elCf6a4W4Rgrpm1v7AW0w;IoNgZ zyy{q*h<=*MGR`~e1ytVB6l(_vv8_mMrIXbH;2y?drmO5^3azmDab{hjT4y} zFLX_(Q#qnwA%u!C1p*md&oht$eoXH(RcTgTEPb2^|53|? zh}d>Z($5ncp1x^o%Zwvygql>zjhgUh=c{JhNK--4WGD|AMNDM=HS=b!j392s6H%6 zxp;uAbF8$G^5ZqKi7L#7vJw9_5_fDqwJ__#Ir4&)7N1Ekxp}U*!^m)yv?xC`zDQr` zk4Rr7s#tFALoFGkddGKHefAW|>X4u74kl>`pok6rd_r8% zQSoBZxJoPtbMXkuB7xG!Oo1Y5wr}}SSWlTV?a%mG%m}Chl~AHPI3+o#dGC6~Lyb{V zJKiZl!^St%n3c|JT5oY$N6rUi1q{;S)U|%`Kwbmr@E-s*xC~)~{ly1uMP~gAw z?K^5y$GL!Ak`hQYE|ohvDS{PXkfo4R+i2UOAm@t-W{$09*HK@<>!p1u&_E?MU9we` z-loK&TiQfx1G{ z^ksT$BKL49JdoPrIMxoZ7N1Xf8cjh0d74AZd+Kuu51|5Q^#{;}vq~^-!XiVD!Zx(@Y&0Bq zckrLtmTOm@OxJ9%u0sZWltHr9+8r}rQm>OnloA`~!~%^lFK$i8uQh4gOfRVG_!wv% z{n~a%3f+7H+18w@)wFTD)%iUnF?voX)f_EZE=_%yg1$K}P1w4z>WQmxKpP10r{CK& z1t-CMaAH#-_woeDM^J_#Yn{Db)jk92Eo>ZJ0~_kY8%DW+epirI?D{V>gR0n)@Q!Ia z*)MJnD_R`w3Xo$=myy`Ccy=_HL9d-hHYGt*d8f(J{o|Jg4_zHSkfbgC->m~jV%p-? zK(5N5fJR-FnE7~gx$ECggF?*(n%lNur+d`#b)XNS+>#q^X-T^2X55e+a1=M(-81Y$ zEM1t7unOu`+O|lL`m8<$ZsriWqtV0+QaKsTX^+qP}nwr%^gZQHhO+jgI} ze?8y--b^ydB==!554*BzS3U0Rti7sg*P~cEVrb|iZAGo|8f|5b*K!B(rZ%Up)^Q4k zV75wWDy5E8qV`g8cy13bowab(8oNC{^-3H>?S1>%GexWAYTVe?n6B==Zjq7`!nLeb zgGOf`-^huo8gH=9lG?9zXr5 z%lIV*#phJS;mI$IaO{yL>Kau~&*RBEjHap&mspuH?{7Lc$Gq`ZdhyQ*JXLsHlZU*s z#_JrTAR0_}4pMqC6$Yb_VR%^za}wH{*q?Mr;Y4D7`H{t+6VCvS>V@$jPj4}lIoX#d zph-kf*`;H^lo%YJyk4YR#MCzL5b%>@kYNbdflPxabxKC^@dZz(NdEBjV)@|d!PVWf ze9l%6zl29W+=`PjYfl&MPEP(SBvFM+AuETM-E6epyb$Ll7LXtHEF8Ky=-6!X`f_Bb z&_A#Vp<5Og7^@-)cKA^8hx`TT&Gv$<3?}RDCAJ*;08wCD2;~a)SUFuKI zJCu2B-k>+p2HJpVp*+v9%aQ5yixWwHBm{ADHFFeaBV1%0+ba=_PDN382t>?8-v9(| z6Fn9V;IJE|Th!>(rn;%!0j0B#^YuVF4!op%x&=On%4H3twXLn@4IwsX$ae7adl(cp z?&Q#Khad8|665tHZ}f#D$R06j*kD+2jPDa zPre@)-1bHRnE>!2uVslYxIbD>#ySdiW>HODgiyw{4Tro`Y4`Ez}pi8@bJb2$%B_x?~o zp9w`F2fpLlu?asEdCgO~$t#^rzQuCm^qv=f)Lb-sk?U(AgJXkm`2=oYEAZkZ8EW(EA8?0G~Lg zm0QB0VDhl~)vEiAK*Dk9F1Ni)&)s>^DB|X^VcCYTmyhqJVY)qcI>x?wQZwB}%$%em zW+`iCA}SfEg6pL5Jf4&d@WwccOvFXdWOGj%aY^9#OImQz2<)idT8Rfa@X2XunVjI3 z|3S(Qe+2P`_BkLrFq$bP&N#`-q3OeI$-dEyIndv+wQ;(EJFwz@4rS=zP(G*+t`y5Q zkAS`H)z#hob$horhZx&?OAR3aV;F^Slzy{Ll;ex*;_%4Pc*6hS&jM91+Il;i$?<-m z=Tx-@7xD8mJ9}%lmUn<+8qx@2}$z%Y-;>qbI z#F28>@=7kS0s0Mdd8H=zABrFCHXL%b@*8DEAS%1(>~V*749X1aAigm-Oa=0+!R404 zzj5%?{nG{~wjkT{d|00-2XkIFpWbXS5LzoRH`w#Jy3H`Tl7>&-*KyS!){d^n&*Ppc zRDL*NDVcY>L`$^Q4+)2zoG{;!?WMr98~(fzxbids zAWbD*TmZUkkh5b+bt3mk_Etmx1W{fnW(swR>z{(*7os3=(2p*=2pd!?;>MZODTJPL zP=RVn$ssW#a)9vMOKJ-a__ZbXi)i(XZmSSM^w_`#K(_00bZf(FgoH z%l>aL_NTqy7%1YzFZ)8FroZWydST1%hB9B=;ZCz)T}gHfes2i1A$n-~R#UT~V42)# z!hRU68fKjksCo2ei%@l&o?ay2XxwqfG79u%s;%#|l#&W# z1p<(TX^AHP(4JspMzg~cdHlR5dUH4)YSBMTcxG)p%5{H0Uio@9&#mb z<`Ins_`md*DlX`&9A0gfed5b8dfRa!d1CK@Cb&BhpKiGo2F^;qFW)S6$yDU#L=wew zlJ7-kYx02?)@H~bpS49!izz;I>=5kKx0JO0t%u|<_!B}={h)DQy#5?w{zXF5T1oq9 zXX~0x7t#wdw~n2l3AV%XB+O5S8{Fz}O}*QnkMSJSt#2AY4$r^IA0vYw7GZR;n**YR zXU3I3A9CmGNT(LBtnEC?l3z$|)eI&1s_dSU(`H6TjX)vVzNeQySY%l zJo6>IK-EqT4o-s1aHa4g6^75S-z^7(g&g>CCaQyk#1a3F&O(P05_9|@99olDJ4Um> zjhzk2)M->ybW<*K)cYF${hf?3A-IXb5>Zc3cA)S~Zxixoba!`8ug$A(XMfK%V@O-r z3{#r`rR?ds(fHcpJbO`-G4t(hiePL^AS_vPQ>3gh9Pvjhr(Z?Pbd!r@AVwjqe3>9C zL@v21Xc0de@Pn0@BbFYGr;i0NV}Az7$XCb>3R=o56E38|0U1=$|JgB8&G-t&1E27Jm#TYwZI-nb>@jePh zERbrAaE_S*WA5@%sr!@=@EqcGf+bm1LDq5b^cNnCKQat3MmWT+l&!$_*@daEpDOJ- z4}43hA6>w809&O-ES*6hyBgBYcp>MMJ;`-q%7$;WaA~zHoJqzn}jgNAWj~!TQ7>~Moj0jHW%v* zT7Ng>jyduis8pey>t?xCpu>C^h!ygtpTVB95ycxO@@|yz^e5i7!vXCA7CPwp^dk|6 z>NVnwrZj9q3E_;mj&ez`CI}|5Ww1$#k+A^-2MzaY8PS*WZunH%sXoCslw0?9ZVyQNsRtJ-s~6LOMs8@Ojd(*0g9zGa!mpiEv#|QZ9IWxXMwQT731eB?O2huMLlv&xByT4OH|g;_rH&4r1G}Pyt#$l~lr;<4^ce(d z4o{g6`T*J*T^D9h8hxsZ;Xwd(Ql+uAc%00_bN0q$kioj-{g>Jra0?jt6XyjlVSaAqI&B#2SNPC&G9Vbw1;&DXjhqG z4`GfpYqJZhm;KG4UT2y&qdfSWf5~CG*lk{pjzjWmZf+ZKDq-F6Gt34>3~nbAmqIn4 zkB;eD<`oG52J6A0VA3|T@U>JVxekU+j4zg&lA+RaxBzR9X1A10!y{dfcoEwYCl0gm z=x`-1)4)5ZWCZ*=Vc`@Yb$223Anmj_%QmzpucYk*0Uav&lIA3LGlpiuNE*SEUu$KH zBUA!VDPUB)^ex5NS=Zs4&HPU%x?7D&a`?24{6(R^;)?TkLRlsgGVRbE-UQi zau9#R>@iO+10iVQnpwF0p$x3g{)*heI~e+xTTY_OiT(xklDDN+bX8KS=73xvJA1AS z-#O*f=D6r~+9)R$MN$0Aoj@BTz*t>$K1}&oUuGJj4%l^ch7c{=Lzge*e3cAJU(#k{ z9o{iqwFhOxXf*fl94%n;&t0u}7ut z{<}}LShAKZLaXIHFUsuG8kKxu=`kZ!aB=d8n6k^WUctZILxR?XGGgfDN$Rd}*%;~E zn)d#0_0OK0D6dmQO`<62L;W_iPQ*^kU%S_(4V8INXB;&YRw6&2*jN1Js%GL}ke+1jZUIyh#pmU@`KFbg z;5xIjsTMea-66f2!6YjOcc0u>E_?g4ztSR!;8MFkcCx7HR-s|<@bS^D-k@g=bC*R* zbFxq0McV+4>4!@BlbY3;?fWh}C{s66>>y4{Hez^$aJ~8BnYnq(ZEA3|S|`{;J~_%> zo!q7F(G>M`_BW9W5O*Pc8^#BN;(ht+5)Y?J7)vI)GJ0gpT?X1M;p~+BkZSBsvgEx^ zw>55i!eI5yyWZc?cfV?omSV%$w=7>x+#vnAbStkjF-qO4w);R74<`Km700-$*!(h& z&%}t0YEu{yY4S3?;>whNI`rvTwG5kM>Q8F+NK_>_sUC=+e@qr)I%j)JHP2$1SAles z5r|P|Z`v`RrL*>;$O2R!N0}7P8hzc8cwt`%L_dzVSnpNSaGz_*W|nX5sb-fCs3V_t z%FIr^Z~`$dQgzgkFQv9mO}ni7jSKAy)wHT~B++ADSZ|%d+nhuctM+mw-Ob2*P$%_i z?J5$TLwy)8?YE>fD0Z6_HE4FhU8S7*$vR78HV6efa8GK8bDi*MI1p#7!)v$YzwVI>@MGr3z zs2FQifxDrMTiEsPGlBsd!)O@sWk$b~x|jy_W$rcRg#%@kh9*B9r~?b*uo$3r;&_E1 z^d^?$)?;MqiY!{g>&(H66U}UEnKVY;wNYghPlv`>Id&~J&}i2|X?x^8AGT!>dlSTd zY~CcxI@tvnYPn1pEhBI}=+T{eTgL0m8Y?w0fF@W5(^jcal%UiJ(v)-&GRGz~t#oil zlV`1#KqqHNeTSFH&1g6BNH1MzIe_;~$~ss_>};;Ui{JZ~(c1@p$^%do*;-y2sC z)#3@&&~w|7mNo8u=w$QX{k=?4%?g6el^#)E*`vd~w)DbQ^$>bfT8ZT9PyTgHJ?t#C z^kxC?4&LB$umo^A|17?LAe8Mh?yHxo*LB*Mt!+je28SJYrDD5^ww;Q@yO2kC z)kr(w6}w`$oE)lY^5B)>y#aTIg=4|V;}vV9F|rf}iBrU^;ZY$>;Xyl(6;E^@wR#&9 z31RS^k;+c0lOBghdNYMkPtqH!%`^vMVK7{-@}*kbaQVy9T97w1sn^F=js-X6OhVkE zurxJlibHcuvglP1EO_AKzzUZS%Ps!#K9F1NZ_AfWodCO~nqqB#j!h{ge)zBaifEOZ zDTy^q0?sd+jR>a!O>-rx5VAmDinbf6cgMxQvTkc6EfpQ8#wRb$qF8Jo5xk0;$*tW< zAw`D8k{##Bg3}*SQEEa%t|*3zg#u}6mL`0me9()H1roy5LRC1$4d@3({0Ma&l~NOS zHsS@HZ0{i&9Yuz#Jabnxt|Tf$3zbDW8lo&k1ERTbG+Gg@YD72H8?xfOkVSwETd2yDD5yHs6-hg@Rm>Pq;#6K8Re>(=sqQwV!Gvow>Y8z^YCvR1r`0w%vtInD2+ zzU&P%wHi?kM>-Ttxd!hzY!nNkxF5+X4%xeVljmw-YU zS)?3n#V6!fAypPM$~;?~a6`Y0wq2qid}W`l1eRA?kup?hv<-L+Sg{_75a@d1&pV-R zSIeYkveMdYLs@@+A_C+{F#2@(+lI=JO(I%#Jg$SDO^xj2csquFJ-2+lsT8&P@#G-$ zr+JKK0%{mEZNdeI)IL6pRkwp(z`xFbYO~3r@E1aXvfoIr>f4qLxg4*)aG^-0E@ClT zuAH^~tFkGjiA&=hB4d)PN*#*+I>rnkb`{**=$p#VqUGKz$FvpoL(#eL4-taE1|icjC)EinN3 z`q^GoZ%?KY?m%2i`6u zJPJ-;rPQF8GM=(xQ-cmg+ANHVtnq(HzQSM!ppoN1s~8HRhAWIOzM5Es zC8L^nM%vk8T~0U>)I=$`QREgq-16>l{DkECo&6eAq4<72<)^Y_fB}+!U5f5vLk@<0 z%b?-SI8gt1n%#n6wAqNyyrW9#0LT8H1D{Go8 z$(Iy5GO?|wrNZrP-n|L)lq@DmF`%u%pzc%Yu4|OFDO_QRz7RkA*^@#l6K!${!Y3re z-NdxJH^^vZ7~!EJDU+TMF7LIk8lf=|YYG{HB6E?Ll#+#*jtbB|jD?n5Fiqbx$+-?J z8>>Wq$(eYmLW6lDwJ~6?C1HB4;FY!N5^=Ha4j!9=8w6jU4Sy1BCF#v-KY$FgQlNQ~ zUn#J*bln{*zQeV(a%vCA@boz`D%U87uxph;lRO|&20>MNpfo1K9amC|gbP#{IyM!v z!K*Bce-$}oItU~Q(WN-cwM|cU+*q-pI2*H}%H{sVf&7QiXu{GyNf2|1~5eT7o>(`Xd3Q4uZExH!WvNUtd zWbM+ZR0#2fO^-xAnmOk+IW4!ue`m~$w=UKTtklHwdG7%`NPl>F74xmSPolZ)Ifq)| zOuQHw2q}0seLt*nZqbihth5q z`q#9E>0z5k(r%VnwdqEXH2vyc_7!_}o1-SU8@ZT@)2P!>OtbomldI*RBu2wu{{b2WhC)xWp;Q>Z1r0`(n>im(* zE#|S$eWeEzO4^>id4VUe)9?&hK1@C!l_1#PBWGYU-_qNZ!I%P?1?2``xJsyJerRtd z{(b|Z3m5z^Sfm9_PYpm1E<=8!_sLaqJN~`1_9h4duyCJ4K$NCs*-L@q$j7@R4ICQ8rQi@m%(-zKgc|5l+1>BK=uC0iVP*R1&j*W7|IH9NTT~;sUn9=*D2X{wl$?8<{e}SNXPUfAN(Whcrm0h0L zfyo?G5?WgQ8NatdFDih7hR3O*+EF-?kOaQJk%__BG=NJT^Df()T(>776R$XIHP=JW z?^Q%XZzKLaOQYHSENd-noh5s<-uPk>g!9lyZa4`Hu~M#9KrNAJoZzD-n6-%~+fW_^ z|J)5xz3S+Eb>X3g(gxGp{%`fZJnJA|ZAeQz7c=?ri<(F+)RAd|uqu#jQxodW3q*d@ zurMRR2C_aQ=>kD3WX7oi&h;J2RA?pl0l2E|sKS4=yk9UmB&_}f1`_&1mOk)v`|e_s zK7ieD+m_J|5wUN#bf3O=5b{16wq5yK@J)tfi%!{~P~@T1xV>m`-`xPNZ~w<15lAjV z9tsb?NJ8lGf>rq(%jxws&-tFml1n+>37_oM{XI4<3iQ+wXv9U01$D%XTrG+cX(kM{ zv)hC#F-w558^!BqGG?w&zc$Y!FA+p#qxWy@`C6Efyv8Snr`5m_6cdD6H&x#X8#IPC zLr#p~i)!+2OmpGc8_)3>ph4gWad3A2tq(W$Q-<+r?`_^)5L4#C`O4iGSpl;rypz}A zeh=D#Cy!f`E}r4a@TDj3>LJg|-@(CRCEx*w_ILN+W;0bwuXM)E3L{;@y+Ll88&%d81!aj10J-^rQkG*9J>_$5Jnto*hcIKXX zO|o;KK2RlE?=A}ne}HdC`xg?4=f=K|e6*t*z;CekoOiZAJYt3CO71NtIchT+kDM$Z$5i<9lT&#y=7 z=Vcz{!c$nqYV{mF!+T-9aR0l^Fax;o`G}u->0zuFkGxyBCA^v((tc(1;Th3h?Yr5q z9&ZSBy-v@Kj*E8tTy@hP2t^QhyGruBT5M>ru!uwI*sU%WA&%YTOi*L)SsC#knW-h34q`Lb=<5Y-i0wVU3vYc_5A%`aKC z>$bh-*K9iV|8LiC3+hGa$5s*qGbAuW@CKpe9fsS)IOMt>^xXJ> zHsbNH=jrE6g$+s>O;K3r?2#}q;^7H+xSfrv@`kOJF8STb$OLHWCTGW8g%qt~*(P!n~WhB5g;S`Gk8qdRN}Nn^UJAVIeoYhKnu6S7x~ zgfGnMxGN8n0LG8an zEhNYKst-fN_gYp2l|{uzovDM0ujrmeoVj%SSCQD3YWKCXiwi$7NxI+ORO(J$MvTv( z|Drj)Iu)aXMB^n;Tuhn9_tGB*edAGbU?D6mcYiSiNsgyXb#*{Ps)d(KU8n`~Pt z$f9ij)Snz~4XG|;Rdu0(-P|O!(CAaCir`*q@r>FeS9>&qYhg9}D|EkO4Jk$r7@EVz z-6q~PoiNi%qUt}Sz3S3K%9ORCB?{9?&sKkuib(DM%<;sR~y-b{22d8am@{i}Jd8H`TrD!PizDSS3 z8(-(&+SmI>Tw+v)jDBELGp-fS&SIr1OjS^8`daZTwdl@`)!JXTxUHCUI>7J%OYA&u9F}C3eq)yxxp!lKZQN=)c-`i6?QXyqgUwV_|S>}4Oov!6OfE`n8Hou!gSuS9iNV^jy*QA5YvaFU*XnW5zhrdu z%{G!-VLOe-DLZXVUouqZkEjW6J|;%H>hYy?wH<>Qvi)(FU*S<62gI;*9)Kl%tXi-1B}4ViN0mkznF$Ez$JLF1~eS zqkQyHMsGNpy{ljD2f(4ZSn~Eq^IMd%BGqv6ioS$zieTpBw@{cYxw@n$3vlOd6`99h z^tf+a@VHlhmSgx9lf7dkpf!A*sXfDI{_%)6Q|{}=U#3uQCt0VEH}w!bv?!(AxoSaF z*#5P~ug{s1B2NY@%<^v>>HDJT28)HaL;fn4y@u7?f9&rRY5N5Qb&x?j9j*etwt`e?4tCvQhP;YiVQe-UZh&5Wwmg z?8McbF%^+`$;ChL6fvJY2H=^B%i4=r_%T;Yn%)ZeYoP7Mse$-Yy!?pkJLh(poCeTJdzW4|zy>h=!Fdr5cCQM(&;m~2<s7ycBx_U}qOK)>O z7=fw%-`HAfe#`d`Rm1Tgt{v$#jc3>i@?S<4Z z(QX20f3-Cd6F%+82Hn-vFQL;Ox3x76VA>U1yAO=snR-P55t6SPfRmm$UAL^-oSyxq zi~aShp=XbmVBX&Xf9;oJw6(Vt@M`KD%xiEL)$&OW3$q$LXM`m6smN3hYcYQOt!}D7WF4g9>WB zp!zggE{jSt*h^UAyY8$P#?FjXxA?RlKPvP|mTtNNl0fVT%K@l*9Zm9Z8xuhB?5Kv% zLKf5h#&R!ETUC!uM9>BQKwbFyFMgRUWnn76t6BRh;mtu34LQ0JsiX=P&8i}NB@-H` z=)9T)GAKl*EMFa3(HWM|o2~^(F#~F%RyNJU3`{aRwrkqV?2nAw*`u@Hd04;MNQ+7- z0cvHt-TaQ~P<;C~KS@waw&84Lmw0r0B}T$4 zwTd!1aFgShKA?t;aME$^}l72jtwW;wA zuLvJ;HzSWmv5rgX<{AqRc+j@&RYXBwAL=5@HX70OmRwPf_vr3R44OiqL}4^GiX7pT zIjsBgs@Mo1E3^?6s@{VFR}{O8{WWZo!NIAjNb1(b$y~?1>Hg3aHjh!(2mhEJQA+cK zJE2dsO?;-H)FjvxzP)HLwCbQf7_vNoE(JkV{PA@!F+p4{T<5_#LXIa{YiujUaYnpx z@rJGC`G^WkIiwPSthfxZx@HlKPoUgPx2vI>^$s80yTM>7Ar84j(o7xOXiZLd_Z9Rq zrY|t1qSo(nrS6oz#5-B*qCPy_VeZbM2_2rG!e;MFNG}IU==X{=4WnqP$aI+QrvxPx^JzJHsCSG-W z`jPkplW7HtY=8ud3Tk#+fP7F)yuDrH=kB$|4T?i}1gm^=1QxmH$n1JF z6VO;?@bb(bI3y2DwfPwxBXz;LqKP$6QC1#dtar6Y^Cr>m)~1Zquwuo#HA4<6+}uVx z#~p5=>QKmk_@1xZHY>0L-r2)$3<>=*&FMWee&1#=tWKx!;js$DBzC%*F=lAvqyHpoj>@zWbILoeHK zd$P`yddSh=|Bpr=+ceCE^=*%oSEU6u&Jb6ak?(|fGxtSV_RvfM1CYP?e9v}iBiFv$ zC?bC;A`}xIU-w_hiK6IxUEK$fcrWV|S!1aIhuowhnhYx#I&n~8wKOT3RDiN%l!9?e z2aEyP;m~j-aRr-qe}!MNn2ojC%zc+!g&P8Mt_Jca8pmg4sAe$ch=h>hIODZ1aZAATV>(2xE2`U&3PHivW4Md`~3twiQ3#83Xn~t zZkhDBh|kw*)n`M0HK-Yxt3{r@pXo0tjHM8ugEq7lRQn~F6W&q8zz^F!va@kwje8~R|j{K37-pj@ORil ztBr4#vXqW-+=+z91^+ay^PW^P+S7e(mm8e+d6_ zGVo?;A8gx7)Q3n1$T*{XC|D#du|9*D4 zx((@zrgjARZ-3iLO4B=0Ojy=& zh8Xe0I15A`d=U6N_~C~ky#eFDB3-~Au;qX2h8PUs$7Ve!!5RpPnElW zX*;j(P*=zJA1`{K_mgb*xbH+z=OPPegg70B2gOJmrl^F|rxZ=^su=l`eEb~$#E|+@ zAU~ur45p88wR~w}?oA(hX#w;xgr*OOTHlm0`KAxewEl^s0%i}@wEoGX_q1T9#HL1x zVI;6>7+JKg`pJwZBtBAYCgSq4b=4Cl9vECZOj6Kd1m)$n8GP%<&gn1rNq-8) zx*zdC;FCK=tgVdVhWWPgR0i0@qlS~M8BWU2j3!xbns1rFUyHsoWaGEBQXJIbr82Uw zDPKAD#Qua|FeozYA4<8OZk^%;i5uzltVZMIWiVk+?i3d84C)_AIh}HqbK!e|NNc8( z1wq(aR}_=2-_pLW*(DfQi8aSSJ_$hPkuun|4c{VPAh9p*7}>`bGg6R`CZ4y9`?PcI zWRAw^K80R$ondtE5V%weZZ`}(b)UFibHV<&_ZKbQsbyjr166N6JtpP;A%GkO*N#x* zuaDX8DIdvI!6W!m>>j7DCo#0Rw|2;v+5mAtKN?Z+z&Po|PqD&WJ58c_t0y*0z3O9^ zIf2&GF8ogEk$4j*l;$z;mfqWwcAI%IeRwx_XnlEE>*p;+T9a&l`sU*;B!7(AX4<}_ zrlS%N1#K^0VB1zYywFi{vVM{N#ujF{{hhKWZUS)tZ=)^)GVRIYQ@_|lmr)u7 z=Ls0iR!mCG@13%bda|E&ojYDL^v5}DIG3W@F8$n-`|16Hcj<(^&7*#MvhT_Wex!k& zVh|WDOIJ_oMy0F&zIkpSJ0fq&`%cK96j3u54&Ua=xd(PCt_@izH%0v@jx3@ZQSe05%!mn zrol8ZwPgABpy;!J$KkW0|85k3xx%X^SOc zSw)&wOCnc-V6QqItLiG}4C|YsTaoNii$}p#PoNdoIu>qFk3q30?k(DcdvTqzU{zz$ zj7|1Y_eaMn6Lc&n^+gD(o~jk*UD~hb6fNX5Df%c;p5osbw>OUs$yqfv~G|~r+MQF{n86x;IsS()`)wLP%;Oe>|Vd}auqw2a5*R`6#xHX#5xV4($ zr|LVQ*|i;Fb=_+IU2=Er!gn4#>e^0_cPXRPGfCYKc4CvL-l2T&o?Uu|f1uxk6~E zoScR6ubjfXcV3HBAEKbTPPW%<7e&(j?6^!x+ z5(3=L)p!qo4KI))0m}~f0e!*H`FHr@zHg?hsFXo7IG$IZ_LRTmH1?D_qwmP`S_%WR zXYI2*WM2+6uAXJxk4yMHaxy0y`Ij>cO+M1Q&S#pd-Es}Pxdz%7_;cCvHP%gNx;O3< z51!F;sweG1-QXObP1rOxV!div<0Yc7WlW>PU?s@~yj;VOj)lM@=>S`@Bx|0EXk7K2afjc6Oz-0^6z77mkMkH9%^++kx(){ z&qq}=66v%phXH{E1WriC90Jg2jc`os?t$Sn9pNn8 z{^tOacpEr-E?2a)2gt$_QFf&_kr-9NFn;~0i5)~zU7o;#m4ALvaa$2cFF;o>Dt5Y> z3Pt_`bW3Ho5+VO4KrOLGv;Nv@j{vhG#B&FdZzrrP{B3fwW6AbDIvOvw})CS?4%Wwap?>% z)xA4mGe1OjxkS$lQl}+F3YBCPMC%uGnXjYmKBRUXCwdm-^)?3cZuIA6W=fH``0I2L zLbWp-*Ednxhx)U*1vCc=X$)*rD@0pv9nuIbvZ2j;jt`wNnx@)zefFEf<^3hS(J8-m zUvFB!px<@=g>V!<~3a*2apxc>@ADt(76I$TO8NjN#IV zbEpgmP`42BeE{b`&WxnTb?k9iZ2`m&Mo5DsG>qwUNPbcRW2 zPUvfjUfOIf8DHs-51x6qwS~6YAEcGqK8V|%WY4P8TG((LV;R_l`qEV`5|^3eVjJI; zz2ijJpSHX0xPV4v{KXTzJ2Z4+fQ*#GGiGlF&_~~&A-5@h^Pl<9=yc_0nzy~nYfQ<` zAJS}r?8(^tLyB)nW+OE3j1ig13nUJAC}v|Dajg;&nNb=dB>gUq{dBtXN)nl&LSTw_ zisYIlK664~ve5kfgTTb_1f}2{$u&)UM%CsTml%)*I>};ttF^~EpZM(6_6`z}fw>tL zU}VGa@ai2#_t@JnUhHp{8}-?Z77%}Q|FjLc^CTkv15yk?E(S0a1E7lmRM)=~6~7~- zzGD>ua}@!DX?>>a4QI343#mSj}fo)DA*n>suDH1QCvnWxG~IHq-_nV zikHAfWAY0E45Us^97|Ca8e%=mQ5YISQAf;q8B)SdfOpRF5#+;EkB;@xC79G1`@Wur2F98C_+Ym9kQQAf< zN+Y=05q}MePNVitJiIY(Tl1d&1CfsI6qP@`lf)YF-OmZX;9bZGzvvz53BUB6$%%i; z&iJHX@XmbVmzQ%s$(zXuzuet_p70%ogfA)Q{6B9hC;Sq3<&!^fo%y71u(nRv`z6+q zJXHuz{qlDl6F=mg`y_8XC;sU>_laMA&H;jVPbYx5o&Dr5kWK-TxA7A|=uUpp7mIU% z{2jx@&!5hIlDG8}K={sn;@7?H19@M|8j^=A{t*CQ2%{iKtRQSOcnt&n5Cfi%j{8#! zZbUnnaRnuoOh%?e%XXq+W!N$X9hLTlX>$o^GcDXv6UQj6lu4RaPSM;dS}o07)6Oam zJ`H1I&fABscH@YSjl+F>1>asq!r6o5E%oG1_KyApfx-i2u9cVVcrAk0Mw_BLfFJfj-Q-}2G*MellO267MGRDIz`+mryH(RF2C{Lyt4U(itw8h{bGrh$>{pn`@%Xhf80=ks#GlROZytab=7c6;)X!*0ulaGJ}?*g(#C_Ij5k|DxMp~0!Fw?`Pr!v8~&-7 zMh@)qX7C)R^+r$QGIa{Iq(vOO6j7Vn7PTsbMB6gHIt8hvFX##1awqbM&tfO}Nn@dx zAm_qrYHA_t7Wd#m*A>=o zo8wBx;-=7-`pSIK59w;k!rwLElY3+JaJtDpx3MqoX?4*L_R7BCGq%M*{QanE=3cOr{81c9MT5_Y@Nt0i9{Kcz-R=uikC65Ra`^7k+mp*2 z={cY&HU~MunMa$72dM3da+N9}`5T@uW&5-^ryt~q43Nr)RdXp8)Py{g`bowgfN?}* ziEPyEl+i7rScW&kdxZ6K!IbM_yE2C+{#N|UA9-#>nZ^G5^I~?h?~ZjKpZKL2!ar`8 zfk@XAl`plgApcH7xG$t|a!OKpmQ?N)1$(j@tF}7~c5;VN%M*Wn64!ys9*}nTQ#z$R z@(W3w`UcQ?N5D>XW6X1LrA7}CgZ~UrksCm+5V_q!`O+Emmw35>{RZFr7J4Cs{YKyO zr}$uyR2E4nTOs|Z5BZM0?K5tIGpPncS`N~x3PMv8%d9d=tuk)4G7QEExvFW`Xoc#x zAGIO$k^2a(4|Kg^@Tp8Emb8t8szRh&Qnx5>6EE3->RE2XDrg%*VZ#_&ev(w`B2l>t zqkV*nQQ=YUMR!{Im00dJD$9o8yhOi*JVwF>cCjpJqgvdc7CUOU!c*pkd>TmCQD0Uh zP;o74fG_zX6cSJVVc4R6fKoSFT+WU0xdbs>HN>cjKYMD<^k$q`NC9Zc3V}VB6c@Qrpp2wrhNW;zPf84|7BG!8)iw*`0jL z0wa)o3mL*d_Te+gK-3+5I}(yF=E1Qi19L;{L%nB??uWE@g4P>zdk-U!f4d6NZ(rS6 ze!0sH(HC<&1?!K#XHW4_8`2kh`wPaOXHNs|3u*9Q%g@1jk`KKQ1G$$j*uJn^YuLWH z+Y8vfz*}5cf8@Oz@(;7Y9ZZmKkh#LJ-S8#i7YUfY=-Yo?!*AbV`tomcpqnc-A5r#@ z(Z6W-@<~4aJO2w2kbglB5s-RO3Gt7)ErP{aA_6@ z+DNpruxHcd51t9HH(Im}yTmvUeKj|z$ND2tu`?N9$Mo@=yui%cV8+n?SKBW7%yRe| z3)A>PDmz=c=_Ph&cPbxgy7xMZlV=)OD5p97r}wcbM0I^Z;v3E2(ke=EZ=BFME>>ah zM4kt{@lrdJl5e=eIs=o)CtT>cw?pNPaoZcH_a1MZy1+2t5zJ0aU=Z%n_-UN-GE$+@ z;4?;Hd(JWK@vF*DuhN|0?r~cDDJE5?w`Yw-^yw+aNOyzfptV>MYbVDOJB>@9L%{mZ z*)tw8lkcZX<5-aGKraD&BX%1~^BBUqv5;AOXiKzJ9lJRu(oJpnW{^+M=v$lNy7d6% zq`AkC1N1i|!+pPl%)wSC{HxLN z{Xj_NNtix}lH>u0Mr1k-zdVtZpNVRvyoQZpl#RejB*rhyZEvlz9Vt$Gk|=nQS{PXu z2j_L8`+sO-wDSh(^|}dnrnm)|Q&ByT_+v$h!>jxe#2c2ek1x!zcJ+T$Va<32k`kDKDW>(Q4t?Ht`{>$mFG9i}3T z3^TGHZghx?EiSs%v4a3QaG6$FGh>7mYvc6|{mc8z(Kp%E&($JS=mf3e zqPuV;eDFj;#ZFn`3SIesCp}q(Zr!daS%S0JE;9ZG+35xb>vGe)c6O9}7Ji~O(r@d| z)8Zqef@AR<^&p6uK%))Tn58>dZv4tD^vn$e*?BV(onL}^>Jg#ZsP>$gX%-`z176l_ zuX7bo8qR_et9JqVGXb;ag7rp%n9K#ySU_uR;0VI0E5hj`0+qSe20p?m8q@=n7rm*V zy@_BtQ^6EAFdGY)jSbYn0_tD`H?e>}5Kg6`9^~8H3cSF%%haJ=5W#=Pf$Gf#*cl3P zFc&;C7CbW-{2L>I1=K@0HG^`22lpZr`bWcOmV$r7p|OBh2&YI;4?<86#857j;BPSC zzq9G^hYPI`E!63dPl=%(7{R?#K>0=k_$LDh%moz~3n;OHDhQ|d2&eD}r^X1UmR|g` z0eMD(`G$h|CW3R!1qw_BCs@F8Y@j(7&>S0hf(^u6-!Q_foDGPpT?X|H1@(;u{lo=- z;|70&0)L|bfBOmk#t#0*1^xyJ{)PnpMi2f*AhcsHC}1c!$5KGZT!4uMjQ@9F0~N4< z3fRCoY#_t>f)ZY}{Ip{$&b?d6`Ub}c25cTiV5^W*?%wud2&fC8{x&emVi#D9msHZRBP=fH1UXJ|-TN zW>Thl6PdAU&(j>mu5fuixSxDDLS7oIt6hb)fADi32_ja!i^~7N`#%1OSPlnNgHJrrhBiq3O(FS|T%Irs#+>l4CG{zQ{BHFiTRF zok2eQfYO|j(HzMYp5Yv+B|hyr+?|yHAJLgWms_PjJ@Ie-xdHUV$B4ta($lz+oiQ0x zk)G&Gt0>NNO!gGVbi>`L8SSXfkWBWJ$I^g5Leo5volzO?sLpKv>4UH1Rg+~9UAA;r z=*$v6ONYnZ?sVFnFLJ_;l#A?ex;0zq3>`iT&E-OH4D<{UIT69*c3-$RLduQ*cXOoB znIn9b50CrV>2zzX&{-gS795Wo+3A#by6~P#hexjmbf#_@ly4${e>5P^OpwrAaE`Iy zAAc2?3;xkk0}H5u4J^k3IwPDeLimP(`lf;U#)10gf%*o5`X+*Y!h^qQKs}H{J^X-r zU~7BuV1stC`lkpUgwrmB(|3eZXoOQws0R_K2QctARPZ+@@HcSqH)N;>bf^avFTc?M zzu5r4fdIdW0Kbs{znK8Pp#Z~{(!IXm04AL!K+s8fF_nOR>zU*>(CuG|J?(;fn}2qnxT&BQ9Uux%7K&x6j7{y4RC5j7}A2gDL! zSv?Fp97xA7axbzVSc+qo;O=1=iyBs;!gisCT8gvQu>l&^PNPc2IciLL9>YG^UMJ3T zeU4X-18_bIaKW*Ffe5EWP^|wrHXVRuBzW*YJj9s`Kr$6XhvAL^#s8;vL&1N{BZG1w z1J9ZcC}S+BM6lrg$JMl1^_%THjcTUm2(Gw{gGjEx4D?8@$c*GjuFwp~VOlaXcBXQ) zMfqtwz%d$2dno{(qY4{=ZGVtrZp(vHX6^bh$!0 zl7P*^dl(^<=t9Hk8x{$Np)d_kK|8JB%cR$l+lIeHf5--*uqg?=$1jQcZh|I9qr#Y3 zw%_O6^WWU-&vw-d2>5^jgT0y09hu^|b)ycLH^^FKI!N}aVyNmSP#pQ)MLes@y!%RcW-8^9WW#8$^vygCP=9rxUDxO38@xPA1 z-1C}(q$GRxjyq?krIOP-k6^L*G@%)OsLr(UibEh7$!qzJ*XB&8XuH;r`U>FMg#nn>)4Bj3l*rpna3lG*VFQ~;a%8;<5YZ6A%!#h zE*hiH@bBgELCZdu^@HWy-xi^nKWN-qFUYxWY;o zGn>yoE9#$1xJ?u!lBkk$NJo59gDwO_6&E*af377Q{wdyokyNI5qb#SqYa5-uN-Aq( zZmN14?Q)-xQxTNq;MB0q<`U;S=%nPTdeY4&`b!t6=4yEPB+JqrN5LJ-|4S?3N@J0Ddgd*c-nc*-GKw1XP|MbrX&a@u0gA?Do@omS@> z(nrL6{}YjgkeL7GPe4oL+6fys(r`jSUmT4d`ls*%CIA2fi>fFJIs?F(38c!pd}v7s zu4=eUYgnO!&U6h~LEQu%|)BQgb-T&@hEo^FJ_dj~`f%U;qyYpYZSUsC4K_@~X%GsNh z>WGI3B*UX1BSxtUAW1d}2qZ%{qtN|RP*)Jq9`uaeEkusG{v$=tk3c7Eb-UhRxmrVQr^>7TWT?51{|f>n2E(0ek4={Vxqcset7dm} zM2?MvZEMNt;Mk0uqq;+DCN?~qZL8*}EH2y24yWU<)8c7}ZAaXV56&AtmV>Z@&Hl;b zmW_jQ^E_<&E(IdT{ZQs#kDqz?@h7{TNW2W7b7OQkcCNdS@>oHbcM;L7AF<#JZi6s3 zfJs}}4txfwei=t-j&#QzdFbwokSmYQFpb;$RN7HB9Q|C7gWD_!tk_j6k6iG2_d(IE zqyBB)Qz$#TLuxyx{xPKPOndwJTXpC^$NihHXGn-QvH_VMm>llbYnLG^j>rOA#d|$S z-SH=#`PtApFGTz$dw(D*`mOP9Ey1pb!ZXK6c|Vk(eFl)<@o!VXb=F{NX>W~bcR``~ z>-K~wX~&MXK2~6z9gufE<642k;Q0=_#A(lr&Yj`7LrDsE+bZ(BL4D@({=i#H#CYz) zyffSesUh>62Bc?;7YW3C*Ij3M7{(#nmu~dDF-+DEbc634knCGA=r6IM^c)BFc#j|7 zlXwQl$3N`!mv7miduIWkGlBM;M!(p(Zsibn7H(}3zh@Wd%$0Wby4=}(=3sgL`ue>P zfeH-Azg!!$KMUZ!M26*a?`iw&1m;`5bfUZcy~6A+Vd#979;(lEVDT&76Y#wA=epH# zi@VVz-now;?0Ds0K^e9^ z5(n`!ivmyHV&n++VRk|ejKeEP5+;F}6w zQMt&2bbyYSy`3`KJSAw}4_~%<1@uq!T}Y;Yh+)B^U9$+ugG^}hhyg$ZMHu%mqa4EO zFpOM@H3@j3jGV7=+{fd{m*H$ZxX3*~K(r;X_ync$1!v(gw$GR$H^ApPsm2qJasjDmU4Ca2+(d{9aF_Ch1~|Wh}Y*^ zY=5BAzY(6Z&bM%i96fQi_|NZ`Pt<>d4|hti`sS{xS;Mqq6nZ~Y!>I%q*}kCHLuv5A zW?fi49O4Y!#fIW6iB{>a1JLCNKH09fI zzv#f^6x#1bnjWp7sP_JP&E<5Jrv@u{L* zwTg(#<(@XXlg`Me>m`b<+h%mm>srp_3#6h%U``YBjKTvU{0|FK9@>mO_C<~NZ#zVd zM{k=Kb>mH`{fC1IFt{ExvHz|umqdr?Yxrl^9TLT7%ucfB@~uUhVg48?XwPPnb1}Fn z;Liff`@KcNfZaeL_$AGKc5KhX%eL*uYF*w%ZooQnD5*Eg=0hh?oXqGxyQO(xcL@6d z^*-5ldB4CjG9?a`)KR|omt8oU!KRGG0Ap!ov{!RQ9SLfY#$BXNt`F7h{H)T%PDIGm zrJMS$&JBGL=ehFww|M&;3hQz~li*L5dys?eX>RvVKt81)5(*Cy`6TWjF$>ov5^Anr z_AEhSTI_#NU;ijxUgNl040*)yTP(j?7-E2KYkrF8?vG}m$u_`1zv)_C>eTC9(}yQk z@(rd9aY@0Ytq`3@lovqK!Z0feg{NV!;#klr)~A)Thp+ffycZK8wpv+gFtbG~DBWha zSC&O=zk1$$eukqNzm_Zg%;rapvN|#4NinJrrL=^nVfxQxP*gWuG&Wo$gh#IB-dQPB zi*{&V1xASWm;6AYgp3}#-Kb&+5+%unLsto@?mG2AXJd6uAqd6SI_iD-Pvupcc@bMf zvuS+tywdF#@t(^v5YVSrat}2(Iv?h>+;Uor&*?(^3K<1m)m-RCqvQ&%!6pkY5Y;Rm zRHf-9#dx;WlzYT-{}#SQEwH(Faa|-K>GlSUshQVd5ihDEULCsCsnSf#uASliW-Ye; z$tGfkEp@V~y0wekF>VWpuBj*-K~z->Tj0K;A}K|BJTYH;5*O~87(25KoLk;?U(V>x zN&Q1%5bK>5Zasy{K7SQ6e=r)4&tY_VDs=$AT^E+f8;sYV-QaIRz2`W`$BV*CI?~RdJGalAuYkinRCi^xY+~t< z&Mo@^SxXt9X@sT?Ka)=w*LX7PBd`U^o@nNTLPOfQlr1YRuWhA=+P0^p+d3<)fTy43SqI`N(o-Oq645xe{jbu7sTI zidf$G>M(|04oTTL0LR+mHx*E2A|18b2-g3iKNX%{4&=CFgy~NFZY%G9(?|?7} zY|u#e{*`T|p3O9^DTBpZgcllT+(>9jk?kP1PVP0&Pa2_P&0LGBYR48@+=5umSMmgO z`W(#`Pmhm5A$lFwRVs}31oTqSxHbx65XD>`Lj8ez%+jog7CTJli~|tFjWTh|bD_RV zm^~(Znxiu`YNC`?4J%hEm~~QttTN~0kPhKSPsua`#7z8XY_vO*FxzBv%AyygG69{O z#j&IbbzAg(Jh3ZFh7^o?HM?ATHGZOnkyd(34Im>$D+F`%irJm>2gtw=7MkeV3Y!ft zaTVj-@-We|-z0-E2XW{`8@FukkG3(31ew@|9_g4#!!@xaCYmh)zDBi`&i)%#={u6> z%XaP}ID~DA#JlU4?4amXwF~2p>fYAHIkY(7za64ee`}JfZ=TlTo9{2;F=t8C%#Ucx z7V@IEdDM1={mF{Moz?YJvOa*LFMEo-i4BZ-JX2$3>s)L7tD;rr$L=Zz70-(1Hjj(gsj zBczeiaYbBA?_^HLwNXAn>m!Il$BUVmnY(^k4;y`KqIH{}nD_#Fz+s~s zxGrVhl)Q6Z+>adBW5-ke{EG&HPWXr~6Tfu~%N+9@Fgy0mSO%{`6PG`Fw1VXv%>dYI|AQS?7}TpTmkDkG;{9YZ^m(KXKYtsD`5(J1;YI1yo1(i3T3lR#`q6^W0-xVW?+LddZuF z1%`ZE^2Rn^q?}?Hf~!sGGdkGvFRuE1*q@k+G_K+8Ie1c?-leGT@qJ|(PVZ*(6w4!ajzf_l*NP|v&H%NQO8p>cdJK;9eG12Bdb_=2b;oQ9yVVi= z{aHmP_z;fz&eUuwuq6qKb`lM6(x|8Duw$!fM0;(B#6*W4bykPv;>nacM88D_oP{*WIex*jF&jmY;~yht9v+>XkxBWck*c z1%mnWu~()k($w8bx6J*qusdr{Zsw|kPJGPvOYZ7&SzeHu=>9rFq>I#vVNYC;Lgv^t zKge@AQ_fMbTq$f__IW(Dpqf$RlF(;(=8nGR@7!pc`U3G;noEFdRM7F5@1X((8Rep= z_OI5=7fmIMoWC_LPl5e)jY$m)D{P(T6;`r0H4_sz7QJ_6zquDPqlB?T7xJ#krL%)& zU4!R_##+&@WL>-a%}?28m)B11Dq^|5WB6Nbo0ZJMVLgJWo3dLO;&cP)Y_Nt#9g93u z@Oa$_H}bli_*8{;f7)2N;Icrq@|COPt)DgDp@a!Xx@|=UQ0+g%3{Tur&vvKm@r;p+ zCfdJ+NaZYZ0ix+=w{DbgtDYLz7I|K|0_FCPhrj^yONI+(gk$dj-oQfk&22^1le_n+ z@oa?r@e3PHR+Gq*R(^d|(fg?eJp~!?SX+ILVHsn=b)j!&{rsdJYBUBC~Lj=t(YOuptnZ z3*2=OU1+TOtKP7Uy9o~eH4F%(a#!!)D3H`Ol@x;SLmx=&9`mF#{hDY0Vsli>KDz{X zTai*0ah2hMq!dHjT;XV5+}<8Xvtzm;o$9fb19s`v_^dBh+vrKQ06imz_q?F|O+iI8 zY*4hqQ?SFBx9~5+^u@0Ye9w^eUp+kxxqKa*j%=^nt)YqL^WDP{@p;60t#Y}ET~lnJ z8g@EWAM9Ow2aAfTF=<41(9DU4s3LbpDBW=NfdQ*~_6fqP9J_KLzk4C=aaa3vR^4kZ zx^D9veF^y)>j(!WMjwrHrZ!;Y~x4gavy}lN_z9x&_H;UdzPt!lxT77M^-AU9PsFO1Gk;e2 zg!!_J!;OaV22FNW3>0eOC@N=4cO#W^Lyujx(JCKp z>dg-07Os)du1O}*NW!tsd7t1!PH-e3+jyCkyN5w^-KZyGbAyDofQ(;!fzVm;1!xf# z7J7~SIz{ga5?FxCEB(PM(Gr=PeJqBPWzrYK-}uWTRb9|1(m&WRRv?{d3|)bAWzufE zIJ!U}65_3w4#=Q_c9?DCV7X$!1l#-Ih!a+rlbDhJ`L=xC?JaH)I2*MFyNP6C#D7Kt{x;R2^tSIJgl7(m2w$uXE@op%sCVJWGjhj`YuTmLNAlW zaObcKD3hM#@Fx#N-a=SMR75)ZUu;ocBGDYH5*;sm0=s@JYnU`}TO(}q!K8tDu|ekR z5~E1h;Yv`iLd-WK5GVj?$sRXW7{3##fUKCjmSr1-Kqz@6+v{t~QmrU+1$qN-s9c@+ zkaBBy=>{sTBd*-<+y`%JEgxvD59X$qBa^??6Z@+uwC>4*!L~+~p@v*+2r{jDnpR2; zIc5XOJOs2iWcWLBZ$1Hrp2!1t`bii3K}VkuQ$0$%H~?fBx}Rya5L3ZQDIz@f#pRNE zIf-GeU}-}C_nNdqPnlb+2qY!uk&^N$hb40z3oi_i z-ZeWlunKHs{Dm-DRKtknEtH>7j8I_SpFghT7p5QNJjDRS^e6ws3w8`b2ai z1DMUR&$)CQS$kaqtxCMgWUa7-X#J*C?xmg6+akPMJ54EM2O zpeBcJw)L6JU>+?OwFj()OFB7}NCiy{i!Z!eXOdl5YNmxvnGrlzYgYw?oMIRnyitNCg7HXG z#VsQZhGtVuf0E(#k|g$Drhb&=f+!q^C^aQo@dKLi}VRKq*H7t|y?Z z8|y6szOcRnhI!Z?CT7#}{BN6~ZvSF--6^YHBNx*R{n(gt)r0fggo<5;*zW z?}1!l5v-U6VKf8<3o~>eqo1tN&?njFgbwUr6JpdI zCWcUy*s_TaE4L;lM3d1^-0&l(|HTy}npcOBzTtu30%a!|>|0Lt^(uIN{bvm9Ppp6N zJ~I1X;E4}3zz&$Os)&dIQMLnF7C&paKgq>@)#IF-1tBve~n2gS1wzFw{e%*L-w?Un!{wYMrFfOpa4&pn)to zAXzYnl~ptw5H)3=aHTn<9${3Wj=mc@d-^v>cA$zDL`@4#Obh6Vn=5p#EkqXj@7=-d zIIE4Z%7g4y<%ViotQXSE3s%fY;V~^?F{%>cR%E6%!CcblQmP>=HdgY+sBMtdO_3RS zBC>Pj`)`e-8Rg2O7;Y8dxDl-sO%B@xYBjFk_&$A7Et+Am;%01zmil?fqF}hF72!D&xM0FKIWR?z8&Ry@)yK zJ+(j&s+Zkn0x-1+x!Q)Wgj`QB{7myt*vxR3M!eZzIurQb>k!w`NAX+SRkJ1}gB>D0 zyFmAti||`SAKa#mRK}E=C#=115YE)G2`A{n@H?H;>W?^*XLLqkE{JtFG3FzwD0YPb z>Pgh5KQ~5gchFR7af7@^*mo1=MxA%OHOl${kCO(5(RXMzYG2aoKG^gc`hmEq8haE+ zY!>SJ;e3-jy8(9;-G$wVgf#x)3MuZpxJSM(>YkXr8h=D8y9rHS(Q=H%8YC*?6$WtS zL~JbrW5bP9w4UY*&MM4Vo((DI^Z zdif$~@M#)i>AFT&`=Piot!`6jY{y+7qUzc+b}kTHjQXbZ((Jm>G`|mR-@>3ihUYU8 zJSuKC=AwWw4E`&}TyHb3w9C zSvnNvAn}-j>Qch**>QmrB#r<{%!R9SApH}{2cw;kx~XOMNVT90CY@fi)D63JBYx+E zM>_F8rNTRO=*DO{!D@NiRbXS^q%{p6>24=XhXlrr##d%5nKX7E zI7~C$8QckYLSIMaiMZ8O zb92V-;>oi{HenT!a*%PicQfh9@Gav19q+WO))3!xCwj0U-MEkSG{)+6e1UQrZ|#Vy z4~HImA@3!CMmRDyVJ`vr)hkTpgSW$2ce8u)qBfrIA8L6xmmZkHL#(3@O?qU9MQ$I! z>xqsrp;Msy2TtvdJ&LJ)$jTF%b+U_UbPMq$IhLX1hc5X|sIL>lQN+7ZpHBc_I`}rj z2PSS@Vzb`l8>pzjD@IzJHllJa*s?o@aw1kkDa$hv2cui=I_ zDgN9_F^k{PC%ku<$x+;HV}6u~d6(}p{r2=0_~b*`s&K&k_AAClla9@<5xGj~B!);c zHx+~KqrGc|enk@|+p|~1*l40_If9rs<4bSqnv|p$$}!FEtqe87sD)y% zA-z@NlvE;N6^@FeormbMfsR&jA67~+%3Xnly3i?g4GOp7(yDh2!L>rysCf@$TG_7^ zl?}SJ3g{Lh1%xjN0jrS0D3^(EW4JN&)g}6~t++o*%!sSjGYXCko4C=SD~cU6xS^t# z{&Gs>2EZ>zdSr3KYE*l!RU8)^* zqq+`8X9``ID!gm#sjG}HNRu-*KXU-HL~tmQzTF*8R5g1@jLFc!)H`79Pb1-syQKorF@eY zaIklUZnb*8Tpas`!YCg@6EOn&8J8t5|M=i7nZZm4Br&aCei(_EU*Bz)co*%K21Cyn z8pnntWrjBi-nEo)iYI}JC&8+iK`MF>zRM$wsbQH}Y#;(v7rO#g$Op@h85MTJ7>}}-wRVI2 z=VsFd?+%ajFMXB`PaYR%liuB0DFH4U5PU=7LNwQpWP#;qL`hHt@elh$L8tteaZ6cVD%93jCKsbhA7gtJI)p{5ykw<#^QF3+H^)c>O zv`i*}Bc*z1%I|Nol@6ZM$uT{)$&~4)-mbltOUlA;`cpYIlkcA|_lp?X(_Kx+#)QBw z(&H{ty4#}HxSP{$B`=O)AC3~pFF@}BkC%IX&VtY7^<@JQDRCe~XCi_-I`*}hLq$8V z$*$OR8}wkg%kcLG!u^u>F6*P8LnU%jR(j}9btB&dDdTdhz;vX3161keC#b%`Zh&9t zK+ou1ashldp66f`4Fr zRbT$UOMK?qs%&=r95YB(a11+xU(Du4ZplT$zm|oy%%)F4FmZP~o|Ttq6a!f4XsyGV zxV>CIOZr7zWeCDZ899FhvA4OnkbOQbCOU|gst5l8!uC69p@4i*;yIlTx=H(d1ZW8Zt}7upx5-CoZTip$YM{cq#aeGk$=HsyBN z^jGj^y3z!~lbihbdE)qXds==t{JoQ8$vLLEPRcxwr! z4itd3kaC*GxEn!B2mK7%*)(K8Zt8D3k+uCpoxNTI&d;MS3Fda!4i z+bp?e>o#;o&YtEJvb!vEe~YbL`&i4%Y>MBCAPYc{k?sv}%)BE)JmnlAwT_&xi!_+7W(!mBMv(X%5fk z@J$3aMh~t}SmGrq~e9-ATnW2rbT%ZA8hNk|ie>%ZLv&0u=mBsPnXD~6LHxE7^DQd{yeq~6j9U7jb zgMddBq+ygG-Y|;6M&gK6rm+O2gGAOh$mv)3FKjlun?3pDj%K@SB1<&BLZ1k>&HgN> zwhj_FYk5tSJUCp9uq{6uk78RT$>wbfYIw`LeUdF3aJw`Z+YHKFdwTb{w%auHz6M(1aBG$1%TNgD*YJ=Jq#en}q%;~%CHLgx90X+YzVaant zozjhO-?p>}#nRnZ#-lYrVY-d9&B7H&Y#&&EAHnmhk2m257L$2(rZa~@5ncJZUbw)- z=%OxhOU$Mn*_lMBsjiSKM1?KL(w(=$GkA5vTXO;dJd;zEumOz5g!_{2>fQCavI4ZR z8fTPte-5Mj^c+2+P2@WX>);+sf8lwTQgVT$qAqAu=*=c7a%A|h$o^hmMEHmb(iblu z(@G>eH)LQ%Yl60RfGBm5>cpzM#Zny3P?P)9w zxuo`-Ekiyt<)K)zx(i&ndItJb{bhHzES2e{5JJshVyX-a+>F5H<7QA`S^(TH`1ENp zw(eI3#${ol6msnXz(CR~G5aq#vWASAfn$2)PHfYwT>Sh>`j$YW_wY4MhnX@IxPEyt zql!2t!eEiB#i2CCEZ&IF3d*yBRNG)Mj6xvy6+1DG0Vp1sJF>HeQ~N0vdKpr3u{uDj*M{s`YTVf20|$TXMMae0p3K>r1%X6W0{ibsW5&iw zSL}`I?&`Oi1Kq1C3&B|Z(=W3$Ce}fPKgc2z#A><6((2)VnO7Mf2I{?O7$$}5)%xIE zj}P?eJAcbw>tw7kw#<1K%>8164?V_6Mo8!uZ)U$S@_PUHxa{UWnXnrZd4!bTIdX5Q zu==}3_cBoqNymVNq@cfIBTKcnRN%b9XPMvD_ssvuZN9U2$@0+KmW*y+c;B((r_IxV?RANp)4T?fpZL`FvL z{UtPvF>VEImUfSCT6}Gj*@;LEt3=}0$fwmfLqp3K{qchaTr;e* zMj2V6ef0#UHy;CMDII`->E`cr7rb4*O;x4*nREmIQKYY~*K_u%V#v?Q^=l4V_j1i_L!XcK6!??Mi#0ahR6P4 z>tT_NAQSDy5KW6tqmoLI?eX|9JGK3n8@1UJ_E#f)MW7ZUqp?%!yMiG$cOuVted^VI z6|Pi>9DEAhUkNpXZuznpwH?4d*hAFQ{C8H^)5xTs2MYp1)%3q*g;f6^<=mA`on38Q zq+Cp$j9l#h=P!s<4IKycRqU^orn$z_5h!EuHW8F1jR{e*!q8zP(3nDLGGiO#DB|=~ z7utF)%MmM6dO0vM+XWeV+nwFQ_`fm)8^i1e%qnlgA}p|HrW=;bix;xYQalrf#F@I< zN#A&|6NW}x(7E52>)&^ut9)-)tp=Ys{dzB%n7I)v1>oRL>kR2aop=dT3A$lN%p~c- zc*Xi2j^p7syA8<3oV4-r<3|;|-oxP%e6;%;4G0g;RTA8$0faV&m9iwe~IbE;f-O8!6N>UR~Hd6S;$}(UO!N` zkTh{lQ2!?|Q$GuTXj5auqy1i?sI_i8V z_-@k981grpDH5bb`D7gXFds}Kr&qE)B=i)07Te!EtlcY_V>Z|rnV-^@bISTD(eKR0 zeC%zq?L#tU1=gw}run%jIOim0+6afrOnWg{Owsb)pOgnAq&>4v3H8edW*ZIDiw~2F z>ui&b(jsbGP0g?1nL-jJm(&A}SxaSV09@{_pU|N$$eUc0^iNp}z>Sgd>m+7wulaIg zp6f+NhPLz5Q8WBahxRy-Anx8s`?DoKV*KY|7dtxi-x&WFU+)xT3D7Q!&Ps>zRda}GpY(T9=OM1T2v%< zSsp5byLap<@*hFSoxj{9em)?{@OgUZDKp{lXsxAxUyOx`Z+TQRZbA?N5Q}E4Vv{9- zTH4T~Fy*b6x}+2eH`5wC)6Aub0DE>~5Lk4qLeVxlqnmT)t2@MoIrrh|Pq5_9U%CT3 z^S0$mYiiL>xj*r+AE?$F;3fWGf$>k$9KRFA7aUGtuciKp>y8ima=rbp)2_T7_lZm_ z*GBX@wpFlqLXb-+EnvWK;=xmRBF0mCLhVT2 z4m@5zxD(6ybrYdx;|t7?KS*zaP+8$8y6?hEM55*ge}q5QBTYxC18b6p`|2;eyX-1X z7&0)J&9#aymN)>1kW*u`-F)2DgrrHGL!=1wvhZ9u(yutHObgl!SqCh{{X5X&N5Iq!FlHU;?t=eG;kD>`aDHNKE}j<-+L-- z7nPY&4P@-p%vvN=w)yJehS}cqc?T+tH5J~e^ci?g$3>KjY7mY*%iBZ{?ZmC6Xk}W| z7kyw;%e#x&rqFjZxGItwsAk=YWBvO)1M@u=u4#Oy$Fl~-t$x~Lpa)%Rd;XG7YpH~1 z)0i!$Y4pONTNt$*0+VNNsdT9A{$Uu1WmCRLU{zZ#zmL)z5t7pb#@bpyJdSN*TDnBZ zE)&GVWAd=TE+<;yH^!%7l__4QruHHmTzDX?<53vT)E_VNjJw>(sWh`I2G$d8@r=RI zxK|YSNg(_TWoH~P>i$f5X%sMy{EV4v;&@2?jOb2-NxKlKUz#Mq0U-%kNReoj2Xz(` zA?2pwSRGCY`kXXH=Q9@fgI8#e$9$saej?Cr>@}r-g84rywl)V)tEP>1MEF0tm8j$J zNI=p?LQ0dq?&No@X|;03O-I7B!FiUx5FGb~>(r8)*1%b8DT`X{k+<9^gYQzde3wJ} z24XxDvV0SZACQ8tPmK0K_`rn=QnnBj|D9CZ@tR(MxACcHl84|*lyteEJId-?yyj-} z^wwo4qy+e?Q!Bx?Mz2<@w4N@o#%)@C)%n_Zg$1%H%|0dbzB}PDkdxl5Qe6!S5O)ZO zgzf*C)1 z1LwBJ$nWrgIdl*1OdFHVHE)ieRZd)eP70VgHABY5Jlr(G56Ye8x zF!B4$8}hQN3{`W7@mJ|=@?XO1N6r$r);%dV5(h3s)-8P{&w=to&F$OYt+S{#Y4aMg$A@x0=Gk8Rl zZi%8d)h?U)Y`P}3>px*&JB3iMPd+mo-NYc2axKWyrV()^-No+ZWLerx^wGAU^_nn1 zm+WJ#*Npvv%nYX^c`StA>-P^QyyBg2-VRkJBU1R4NrYG}MB{L!HSK%FC9X`TmAJ2j z!KKCI@6_5M8fG7~>7fs6@(+`9^X?Pa1?;~e$REbCghrtuD<)ob4z3O35Nt%6ias>_ zq2YYqb@~_U^-}QC5u+^fl1BB%wg=MgjX;nOO%$KVDYfolgM7Y(vpSPF_Om+|N#(P9 zUP_z0jFlKZq(kgpu7)oVXUW0$5(I%`7qgE(u#V2N1$Ury$nEkT5&K9E`XCp7Cd?j-E{ zY-Nx!*qR$d`q2P7y;@(@x}s8B91OqzMmXM=`X2<$fk&r|Xi>V@o)u4X{!+@iV2CgN-BgwHavmV@Q^fJ2YH$07!dcuh?kwjpg zdiUgC_%&SAchvOMUo=z~SW>X2P)1z$1oRfnd+5JsU02j}cUO1E`_p{g2?DOb1D$~} zn35nD>&&oumxo`RjKBvJ&Vc*<8G~CbRD**Pbq9mP6E}z5{ge6a-l)4|v}- zIDg;y!IwTJfZ*+Z1f;*&{sg4I$$kaFM+{~-$OY1We0~7#+YXTqud4G&9h(K>2H8@}7%_vyu zQKyq{*d7{CM+wg;H~hj!GE3SUep`l|YaMA|ki_8qE=IVx2B#XjNBZ_^)O|WHA5IK; z+ZwcueT1A9j&&KbVFJx5+J!wnE3gg!5*bJ=fkhGngENJ68iHVwO8m?|Y9$&=TrJLl z%CkxeLLe!Arn&YAKMsoF6&tatTz#qoVK}6=S4Bg~B#TCPuUfhV2sE zK#IUJi6%xo){ejiIgPWW9h74iM?zJw!bNvw8AoP?XPQT%pd@74N0RatFT+*ry9g*# zoG>luHBezbWKO?^SMFP1k$Me_6mZF?-8F~{Orpm4fvlWkCGjr8Vn&?_oO_9b z4LZf>?xJm!N8~3d)1%D=n)H^vM_~)NgqOVzUW#`~arj8=A|)90NbmVUVxnx!n~}uD zbnzC~ct^;zT`kdThO?x$o!T>U`XjSCqPa)tl!t!>oTIr`C>2mE-fz8~AvrC9E*J^o zoy2KcmXR%ejalgXcnMrP4GVXaU5S+7!87N_;tHy3T zPhmwr@(VO^Kr{)Rn@DS(qiq77G9N=oYuF%fjbdD1kc4xJY-n zwSrU^YlPe4nL|uqmfpr(1$Z5GziU*yMB?q*7@Ku4I6)TWlet8C4fp(wlzlf#4glOZ6ifN;ucFnUSx|xTfBaBwZz2G*k^vNJjIm_Nww1HsrIyTsF?zC*!U>5 z2&0Y5ua(WqLTPYpBHKeaP;xo1vHrXNw&rX6qoqSTJi&Dc!%}Vn2OxRG0`KUVh z{4C38RR|MG@TH6Q%l2c2j>c_RRHmjHU!xboXW_> zC0`G}#-=1`IIbY8M|1CSGx}XJ>2yvt54>D$wQ#0xRWon>ajUy($7T$xSZY(8B0+IR zkSrzQd6r*_cpasMD_T9li&%C>DrTB^q;ZUoOp}MSmA1VoOq4bIuXLi)ymdSq9n}rA zVpUcS2wA^Mify$*N-MJm6V=zzMegdFEZJHFj%6g6Llx=9z>L*ZaZ!03Z;4-nW&&sj zZ{tp-95{a%wcw!T1ts%b*TORBUH%N7SlR0f`*jk_p+1t7d6O(z2K|QCkQ|Y>jqJ}C z-h6-&CIsnrc5`5nyK6#bEF%ZJX}4N0Xb(*SO=#sG!EJ-%l*=88OLlEOX|1ZYRg4su zXJ#9;Sys+bqFc+A8YNsZN_W=Lba0|I7y&D24HkWk6MjXb`R|FF;hU#Lt|rYB1W|?m zek^X#*V#kQTGtz**fdKMbkm{H%PhYC3lg22QAqR3m~fHeZO@#hBx+fcQF#nq<8Uf= zr|iXd=#yW02*vIrDI)WI-QcIp^E#q8(8sqib5733Pv23V_s8cEOk!nSPW0?Q1?T>= zd`H9*JjG8ogw2!JwTO0-C5L$y2gXx}Q%eOc>86ks*G{FS*+Hh|7fgyQz1k7WDsS|0K}BT~CmCQJXkUlioQux7QEVG&-R^?3)kib2 zlTwg2d#?oZ)<&m2faqp&+Q3b3VTUd&^cf`twKd-Ax=?b-&|YA&2gk*OrD6#ivWX2!jbaA#4je%m%U2P zUU2xM!zu~2er{5xbVL9Gy-6xiK{&zmCm?UaX-6jcvzNo>i-oxqA((=U+^CuYO= zq1LR=8g)r@g{(9iC_AH|kk*E-B$k7FA%f#U{!IhBwzBBMa?VfcsjNu-thv-xsV~7{ z>u*&RuS7y{2jC%JMo7A-K}6p`rE_DF#lf*lL)88%qg25@p)g+-){ z=s?%e$0hFIyz8KwhTTY57i<#+&rIT9WrmaktS*!NmYBRUCTi>qtunt_WA>slVLY-s z!xIS_LmL4&IMfm!s%YqOyS*(>SB<&Q$kNorw=ml`Cg>fFcK=do4qvx^eX6Bk6gT4g z{hS*zXp(2t9#d>dF)}m_sJD*{%`Tqf#nMBqhI4D@e^zK2!4qBwgYp0+fT5f)>M1~FnJwWpRncUts<7to=Uhk=LXuM>cBzt3=-`6z z+8uwP$V1bgDrOtVRR30pWGz3T!Y=h}-tUM=W(g~LHtKRAIjCQBZ{I;}viJ=U&%P)| zFFHL+Cg>)C%E^*=u2`O1=Am-3tirhnDBv>UGu#@8xNQoJTP&rwH5@SITKB47x73a} zez~Cb^cl9oQ_;7iG~bPOa#3X`Z`bilQH=2ePB3T4!-G&zWt)DFa&xVX0&^`vzO_tE zD42;hu8r&z48vm-1Th;F1QWA&+h_+x6m$C)7@RF#+`pm{nXj7l7LcqR?BF?-k&08C z+JD`}LK|xx-)~9@Ngn-tTSSV73=T3cg0ziy|siTI8Dt6OOPR9LnC(EC_l%2t_Vr@TcVKZDbnHg>s_`xk%`qR%5*(&;V zXE>1hi~7qvy5QCowZgP1inWV+$RyNH<<_cw6bS+>wY;>D6o;-oEZe5Ww3ZhI(|dG4 z{*HC-De^lLgb4#}B$GNkTE!KI=bLcdBgY31c#*P}A=f`D^4#n+J7#f4A-GI(Q1vb~ z2GM)gNS1TMQ4JBTt}sNIt3TMLXa1q}qacWzAc{TxO-W`oSIK?w!x(1Wg1wP#ds_(= zniITuM)apG`mCAtpDNcu$?ZR}HUnhY1kq}wcnj={&P*iSKW!?(G(nn0<(K43)Ip1H z7PGgLyXBXp@7|?*sh?&6e_XQ;em9Ycm{Q~B096qa!Q{E65bX>LS~m=OyZf8S`u)r0 zIFF6;xtjiN$?C;iNjHEh2n{DGrTpZh>we$?exdn zA{O~r&7o@Lv?(N-vVMzcUgGb~zJH$iL4iWqL|SWe15 zMdnrL<|z7of6xCM7VR*CFb>Wo(!=Idh~)MBxr~Ds|JNMpM9%#WuR?0d{WEB;xm46+ z;qqKE0Ec-|t{uqQvs;qDWSTk|?~!|y$19U8Mqnj%$qadnPv2H@n=~0;JVUv9=QEcXkRjU$X&uD&C!^%JdSWUZaeYv?1>f6CIctfV0J9KZ+o$~_z)ldOQIg?)a;%&$8!*UR&Zj|O38KFDM4e9* z{%RZL=8)3(QOu50kGPh!I}V%^;>V5(v=?5VCW1dB5x)|dMQPTPS;OE6({7|AP8MG9 zpTKC)S@krVOqC_iEAYc)1J5a$8IfIdP9ER2A4tZ=u>$vz$gHgOQtEdl4;3_T(P$Ja?tknD*Y-Pcl~Jm`3HrGl9y> zLZ$GYY)$q~HYcSx%aJNqx8+0aO${!%r6FjpC47aWKckRtQd8r|0hZ~RPp{zV)E!vR zb5c&B%6m2QjipuqU2r%nTwKEW#4FgO5jRpTr(2Nt+W)d2^SHP7CG)XzpF9ga*?A!z z6CO+Jo%pnhG34Cq#VZ0+EY;V-Ncm{<|3IB)sv*6f!*o#3r~J)X5AN_ef++7*GB`@Y ze9&M#&^NG|eoAIZnK^=$2})T+xp~|?5V{024@{-O(%M9;?|_H$`fYNtO8=^bMyRf$ zd`2W2S{)7g11g>tsxY8pGX2_aUS10dYl;4g>G6||+zCs%w@ zxjtoF&a13pz=haAw|1c%@J~TEq+l8Ey{`I2@mFc=b^09!aR~ z65p^L>o+qFo0GfHME})XLXCI+Opl#8EzkkjL+5SF6<;pl+TfW z`_>8#J}bo?{a|1t5(lCBFSQYhK*`JOFuj6BP`iWoC5+URT5TDN-0w)FkAxz6;D6>h z0OY+odM8Hf*3Xk(vhM}F1VwZ`dZt`98|bs^UqFun+LJpsrH8qlXuK8?hbpapDP-SI z_ur13>&Lt1hcNG1_dmTVT=*);347el`q=N7eYZzT8l%-}Q-t^k{(4N(Q8jThw38w0v#6a`N0d)+1+cObO3(hW*b2qO~8AD}V*adVs*Lr+)Y-z5Cjn%otyCu%7mN-Qha70)n({rK~88 z*reOm`>qv&l~<3z9jF+$Ul%v(8evj@i9(_MhwO{y!u2eG>`Z-)9Ls$c{4Xp)Z zMm3Zn&C~YO+)&PlTz^B0z@}~iM}pISz3P?Fe18^?b(g7dMBB!*EP1H(z`3ld%8;hP z-!U)+98i5_t|3c=8Go~+53svUKHm)8`IfQ9NzNjH{_L5J=VqKih^uLCn3t-@Oj$bW zP_iGgBDjJeO{na$k?Xa*M#d>uaJ>ja<>j~4 zcc~s{B9n9QdNRbp=9=^oCVBXPHK)4#p4OCPHU^z|HpZxRhLqflmaaR>)T%M_tgRHA zwoaV*vjepnorzUIMfcn_W}JHKOMC`}4!H;Pl0UBi?!=Ko{||SLJ&i)GTdreHSSeX;zIsw>s(W6Dbe4ItrJVI{3STbV8c}RS13&^`U__foylR9a7EJrNYvdUzex>7c}4E;!nwY zSP&o8an41mVf|t&Mel5(wR4k86-E@VR=_VmTq?^|u&e9cG=6&=Qmo{weeo^TWvx$E zN#cQWJUWT8>HKoq*2ly$!NZmwo)+@Cq_}}YWr`z&?)peBVd^?bOqa8SoVh3amWeqE zxOJ@BeL*hiZf+A6%L&*i6ElVDcA5Gm_=0apqW1VPzJS^s&x<`-K>Da7HD66|68D>` zM(lLzdF3#{=dmnhS`(Nl7q1@kb4;IfcV27)MVj4{B3@itND}Yz$Z!9vSQXfQ`+6&k zmqpe(WS{!62(2!5ku%2++`KuN;MWnU$@=3C$JFTHl^N^PLPQ>WOs`t_RrFB-4=p&d zUkcYsrOTv^W+<-Myu-|SZ>{x`xiE@V$pza(tXv8$^9-VzQG#3GHcig%|D*J7Y0=@$#0Tz#Ieme&Ll(}@7FwP*8oKP(F#!tfCMspax&pwRoNdqmueZA@1}CHt$d#*TZ%k)7IxL0WlG`gxOhh ze_cR-Uy%eYhZP@$t9%Bzs&NMJnQ8jAY_)|PY~-P=Anv=SELhvv>FdhX)gVZ8dLl>| zVZ?)D+6^jm;k}G4GC_ueuzo|1HvJ$nqJMHhd81Snoq$;`$XpPFhIH|w`y_}CgK>g* zbYLMU{wp^m`t-oWrzcneV)G`^)B^j?j34V39J!uveQ&w+kJ>4yd!JNa$5EtCKl_W9 zTT^h%r6~Bgc(5-YOett^{^QC(!wDI_kp7imvNwvL_(Gir?o(M?+{9!t%fKn zJ7yg&KQ33zD>-%@F7H;U7E~D29WD!0sTvmV!cJ8AsaEuh^r1G!hYqQ>M0N$|?_TXU z+`nu=etMMs4uHFOa{QSx*kFunw_XvMl$<~N6}zp0<%E#Q?bTzvuW{NoB}nB(=9ePK z>Q(we@x6bPB#`qVnk@O|U{c*aqJ(nE^es@wl)DRX3==}hS}Fvz-K2;K2KKwke7dqk zESzD(6bw`SgTFs$VEQQ#5q0bFrC!PYB%?E@uBdl|H3_~yChV& z(g>^Di12X`i;W1dL`3K(4bEXas*x;bPY1nMeuQuAcrMxrN_Zh)->DNXwGBWvL?0---4uio3Rk@>e&7r$w3wOVuqVa?tU`LJKEZH zhuE+VdHl=D=b^eZz+b#bl65hXm3ir~VUlgLP{o?#et2{W0!Q32r-Cgv#@?wk)Qp3^ zl_PzTI;R=$5V8Rb?9t49-ITR2rZpMke_Et!XWdSkfT6Dmcw_`)_$jc*0lzg zKm~g6<4rQgss3sEu0u$+J{#Jm7^H1qcHQ*8m3jq^I(RkxjCj+q^0LJs72Xe1XQIo5 zETvdcV~%UEV=laEX1H@_!$>7OPsB0l3ub`Bu&>pS^DTIM1m)ciPeefIjngmK=w^66 zXecFDb~M1aHJZMl8yAOvH( zkGQCj<~NXd*4vCfEL(d9@xU?0_9RJf3f8uMgm9&NFuZbqDAo@YBBaB%Pt8ngZTnDv zP1}YYU!t_y=RfAix#tfI8eSM0;|HUjB1yd?Nmc0-&3W^ee#Ub3)!)25?bjP}x_pS>JayA7rgHVo{o4~tq5DL)U!W?2Xr4wnb|IOH2;D@3lcut<^CgzL$f*XnaC*$W65 ze@A6gJ)miZ&;U;tT@5B}eH1%HwN7yF#rq=Crrpji-KsI^Mo76jbtF0iGM)qrPV=s2 z@6r|GrxgVLBrHANqQddPg4~ZMORaH^6Sd0ELCHRJIIkN^!7Hzq%X{N`QgDa=r&*@p zm+W1!u>2f}(GzWT_gWfwhsL)O-kUX^i94hvW_zkeg|UFcvlTVg60TrnLfl{ElCI_H zc-l(FysW5#eXtun4Hc9Hs4IVw%MDNH<^Ph-8&@%nw@;d7yV>Mlv{`5 zdwjSV4P}gkF+@S_C!z3_m-`oUZ$tKvBnue}lIQ6YnQOpOKD2ed;=FMFr4Ah?fXkYQb^s@P^LYnf@$*G0zO68%P++ z>e?$+ekm6!0vLO+Y#ZirCjH0C|L3}Gcq5F!_768S8e85LQK5H(FOKyTqj0gr1oCh|aAMo`puO4*pWM2qi)Xza| z$bnxb;P9B*ObW53Os;5nl+R%{%-JHz%#9+kVUS5+mXUm&GH8Pm%mmjMP{SO|KMgR$ zZp$;F9b-cFS(#x3Frh{OCctE&2BHdc>jf|}B}{%rqV{bioEJDwn}G#b&a~sJpQMg| z+xCawtxHS*kD!UU-aO9a)wbbT7vR17bs&Q78IqhDHjU$7NUU*I7Bzo^aGX8Zj@F^N zUo@-KcCW`^{!8^NsM^@0#-;laOX(FNg390_qpn!Q7K2jEF(%g=PK{i@%A-`GUuX6` zy&2GtVRW&BG?Vw*+F3Fs{)LMimC+n0N#_jUG)RXfQlE&?$pm+%e{@6Kam6J)1-nVX z1Y9?2bjCS)=o~zYto&jJ7RxHQT6VHWa0nTMU+7?!WE~I`@YW*ekjc4jd~&Qy$uz8X zMbR_fjxI(SPvL850V%f@S~g8nMw)ZuF`191lyP)Q2Dzc8--nY%_~@g( z#~Xbc4IuynWfi?pBW6q#O@_>Q2A>qXMwD~Iai;_(f^mOOUbp;wJ1ruP67}OOqtZi# zMh+?>fkhQ#Wws($i&j@+)DTV40>g}IbIRd@xkjTLL3D=gB~p;@Qs}|v9Hs9&MqRh6 zwF`MiR#Cr!Ki>)N*nF5+Pv4z*m@2iGf$yes3E=P?<7NZm?mAeKy`a!A%D>T`;cd+N z`bltVz7noO>bf5b{?e6(c<>m}&=_)Fc5HjAvx|E^$YL(rl!#6xloe~gEPf&sGxEDS z^g`OC@Mhr~muKQb1`!8O7LvL5AS6$4Y)v}#I28A`%Vs<@x&@?LADMTvpwqX3QP1pY zXQpShLw!wiFt?90=!DeWIelMe77I4hj$B>4M@iymc>dM_Z4=NHb?bwiC&=>~)3H{r zQ0Nm4Gs~|6vI7#HA)9tnr1?MNQKl+bCUZWM+(d@GI-^WpYn~pI*J}zG2btUJ6T66J zI};T?#P=~UQ|9zU5D!(bNLEuY2jGEY$7cKufnA`NMkPJz^aq>f+_k|hkPfh5ZG;>I zxlZR0OgTE+x(^9N=@?!Ear{Q=Fm1OQ@@-0D`Q)Xp8GzG_>A4ee2GnD|fGC;}I+Wb^ zXgCf_KtFx;?1nH$HGHL8LA=EXf~Wv;?TqwHj2=PKo{a(n-&OXBf>pc@^^_HSxSc%P zURv?P9erEh@bklKv84iIdCjYAhpFy`1)PHLFax?rVo4OSN_>RdB0;L9ntzBYTSu1Y zPNhOY!bOZrYmoEAQ&AdT0{zo)wd4}9g_zU?>mePM-E1TU=K#jGp&5qZ$LP@Y${3YK zP4u`v3Xtjb`ufF{sUIlB@ieD8v}oA1{A6Cr_t^zUw8RnRvrngx(1Uf!V}#Eqa=90? zE3>0CZrEvbffHNQ5DMOLg2@w)`B8d&VdCcqZ}WwHDP@V2htQn^CzUsO$?0(*h#!Xj zpHsOHz+uMqeeZ^-3Ltgj@Et+j{3dmOIzj!XSwc`cZB6nUANECZmtL&(~AFK&PCvZrRD;H(5XBjYWWj~CyR(c?_% zJFRCI150b2acLXQk1g5%Yo0w>&IJ&Z({p`GiR}!yRC=Nj2~RAj7+QR^Q`1aDj;&02 zdSG+Q@;4}|U!2EX9f)_l9)9oFDE3aj%o)SJdu9cuMt3E&eWuY|Nl$^@I>WZWz`C zv9pcou50#&n2z>vY4=9BjJ<1-3XE6&16M>Z0F8lIdkuW!=|ONTZ-yX;J9GiY{vnSs z53|dFLBg>Fk;s7Peh?+I$Oj#enmCV68BLa$rVNGs4?T`qHkZ2hnAac5`s6;bm`nQh zNr7Vdx3QS!f`4kyn1VC#8-^Cs%D_fE%7{s7U?yG4h_QIfv6WZX?{v;d zJ+Fq}DS&C;E=`QdwWF_lQLn-e4TVHORSc79X`4zqwGCi&HW@&D>B!h7Kesx#S!!j* zWQ7W|2AV(T7`{znPK{Fao6S3)*s@C2EUG*9O>=VN9MUVaTRgp**F39Ra!x(Ryvru# zVR-~tv`J38Oxmn+l?1n3aHM?hrd_t1E?F}$X{v&^FER78JHEVW_ff=obr~{%l<|P% z9UxH-$~oTV1F8k=nZ4t4W)XTI21tI0oGo)1!(!lQWv+IqvZ>^n=p+maIfkzRc_-vd0rfL%Ec{}78N<(-%WiE+3LEv&-3~o72GdIu=ZnURf&&%}f^4dWUFO+M zBeuADr;dGAA&v_K7qG(KD8U|E$fXlVy<63^1F$^r#8?E%R|#3n875CT`QI)#jTVD=|Ig^nFV z9zFj?_WGSNKM3kWMvgh(tT#TQlpu)`pbARa3>bonnsLIXkS=L6hJFIM<&xXLJAw<( z3#C>^;5UA>m}AkHlhUPAip1Fkqnd#iH)AuT(H_ur!8#<@9JqHu5~NX%7k8N4Ab{oN_++1xOl( zEss|IHT7bA6E~m|IU)&om0*!OVxS(;o22)ur%r8+Hr=};r_+O6yOi~)ZpeB9GS=yC zkQFE2N8x}ep0W-Yf|K-rXmzLV1*s$_IlLmb8U9Y=n>~0;;dJTdQxKB-e0TOLTqn_+ zoe`!fPH7%3-K)OR-CaVw_W3G&5fx~v^kxYw0_-`*eXkb;KcBzL#3zmrp9<3n#SPc$-kpw_=vQGBcRn~ z;tKPOk88v)`RD3+@bEo(AfAn1l8NhI(rpu3<9hSE&96sWvG%(sVDcMY9*o^U4u=%)3Cg7iRHFP@7ITsC_Tmsp1dLIh|l! z@&SIG{2lCb<~8tv<~}(v=x{DbAsAwLYa1~yll5v;xW0iF#K?dt01hcVY{aHc6Dh?mwV#h15{_$Ihl&DlVp8AYL{{AiO63P$ymRw?3;whb(UX2gLG zJHot*xMzNLJnjnoc9F#aX*GC(s^mUYHT-wc$-bgZJyz{Wl%6^@MI}VB5%~6$28=q)h+65IOk7gcOLn+>ww_Egfp~9NQnryfS3U@@G6Fhbo6sWv@ki*S1 zSx%p`>z~u)Jj2GrV$G6Q;Es0(gC{p} z=F7r?nb_2o7&|*=X7``kWW$eEIb)pthW}elb5O;NyjEpx@a$ZNOZW4qgZkQt2Fbp( z8>@2b&#!WaumW|s?iGp0DqbeZov@UZJ}&*82=a6PTJ@YewKj-(HC^Yv&G3%od;UrS zl8_esJr&;D8yn8ALV}@y8p$!Fr_M=LpRt2;Y315{6!vrL#oBz-imJb3JWs)$;(cW8 zm71dpPt~4seG~#}j*&O$=5y!v)GIxI>I9Ol&-uBf`WPc>07q0$O(D!1D6AA{0XC+; z{*K4NoV9M$FG)jmTV-2?5#Og2AzxYCZ5l%h)H$Qsl%J$qZ z4cib{Wn4Z@KQr1vfnoTk0?_blWTzKAnG%HK_#DB3eThje2v7o%Au1U;B7J#xf|cA@ zeBRGY46(eGgch4hpH7Xb_FSU~x>-Z&2dr}6H(EdKBN(np5v`?o>bz&J;fbEDM_$}vX z(<wLhKrSLDZs zcIV9c@e`RC>l+FJ85D7I2i;b9`CH*Xdw%g3v9j!1Qv!dirFRbR1KET3+(_U(*#E<5 z-zJAJ+lNZ@VWcW!t;t53i<1WW&l%bKaSA&#I_Lah0he6plBEj#=pt>=OQA-q@L|7Fn!t04d?GyeE-=<`2W^lAV9E&Bi8 z5ld?&Tyre{^xLMy+69%&|==%98jAcM$>0i^>x&xz4@=j!U8G3!sGFn~uHyzYhe`yI(IW zYd>?Nq53K%OMlHQFic7a^MG%VNmUT(2fM;GYl|mf8t8#W%GN=mjO~#ZGvHl%+xiD1 zX`LdOy)t7f2ET*qNvcUs#`MJ0M*A`oB9)E=9*Gac1!H01jcmE)2$Q9%8hdX^RpMLs zw?Ywgb6G@Il#|q%D@}TWQFu!VDfkKj=R?0aSl6dmwU^F73N69Sl}XVqxoPi&MC9-?qN;y?IBpIVY7N6RL8EB78g#r_8j=d_yg3|RHRjo5##+=Yhw`d# zd}7)+g`J{kGBHUkx$LkK=R2A5d4n5NaU6v7F(wQ1NY}f&*yZ><8t6FQXsPWw&h>>f zcBP&^9N5S19R%!W<6G^d<4YuWv9K~7z4KCMz(=HXQdD&9+w?cYD~shAJT#Y8(|T8?Kwp_yl`WKhH#rl1mL`re)f7^*6Kv za;S05lPmZ;g~#G>98iRJY7a2Bt3ezH9Wl!pp~=>?Da@6w{uB2zUr)TB+l=S?f9sji zJ*+xWJ*YEvp=)QFV6NLX`URL(WC0zhf0=Cn&VN+D7I*?Ad7r+y{SiD42@qaD0thc~ ze}bW;JhI(gc=?VZYw7QqFDBy)Z!2=d4;l)!Jvz0LC+Kyj#Ye4Ca#L(pb{uuLcG3;> zIuVp#QM;+3fXTb6lK6+xCElrvh_g<76+41;Del%TH_L&e>l%s(GQzh34s6+dXAgyW ziRE)nrzGudTdStv`3p)G#QYAG2`yz*6>_jqL3D-ox)VY{2V!)2*-mU6^`K^YuG z+>`h)9OjwR2DZ7$K^X`(o8qOJ_jndTwf=tWR>hu_FJ%$+W3n$#wfyGC1aQ9fK3e;x zXb)%R6bimbWWbduoox}Nshzw+ou1oXYf5q6dGjiHNg%^l{W>3G;HY&cDr2z%;_sga z93HXk}U~P6-bdA1P=0OnWOv{78(Z;E3&3?BKQiUea zZb6$s9`Nyloj;wu)J}nOP*S%)qSBJ&3mU1=s!yx!;Io5?ty~$fN1S29m8s#?`^1Q; zxDrlr)P7zPr#8PU4-rU^ZzbS7Lt`{cHf8dMmt8uuHB&YQ^GB^*Qr8-bcE<9@kY92WQt4(m;@& z`c)Y$zL5D0l7@63m;>9A<`DX`M7D&|p|y4^VAhPC)0QaOmITYTZQHhO+qP}nwr$(C zZSS&O_q_I7ub)_B%*>21><5*zs7lZ&2c5HOoI&D({V1JNK1YNX5>4@!J(;mf2$qJ; zYmN&buaMuu(udh42YbyGF5VoDJpKXyDfPRZxrG=h)wgCYpq!vz`N_;2>@dK8m$7x4 z%<{Z6GPmL|vXNj}=AXKcx!pVB_&~eWe&(doV__b=W)yZM@;9lLb?jYyh)P5Sb{9j$ z0-pI*Geqb23;TLddQQ!xv;`RsMLzt_UP6i+is83e2LLmT5{#wP>GAaAipj||!Q$cz z@XUtBEC!8eLE1r&)~dA#X9rRWWaI6T#gwX4Bf%(&BVI*n1Wr#?IU`}?_1a;+<4?M1 z-_!Gn)qf|+&;-}Wga|swS8QfK>xAMHCF(CSr{~1aeocx20*eKb0pcGe?mv2`hxP$I zr#>4GC@cK?2{lf6a(sk2iN`nnGww>d_;Wb<&jU!b250ssA5tqjtcJRZ6uplK$|cMr zVN8utfg@t3x|CKXL^>xBG#o&;MzIGhYz@Aj+)CV+aO#Ig%>n2@ACG>j``F&|<7=ll+_0IW)(=kPa&43dc1> z;`geXd-7r($;Zr^utpkkJ+EG_@bP~Xrww%ZyO4I5(e*E+Dy#%N#p*%fd(iAfV^Ss% zWbCS|)FchK4R)d#oMAyw-;g(=xrzU=T_(wv4M%qf=_#wHY6-1mXaT%$XB8S3?Q+dh zYWmppZRU&_-CcevmER5apM0+J3}%Mwmo(!aEIKIx)8v3HSyoHdK~46W@yFy{{Eny; zlT3p~ElMI8(#2_t9jorn?pD$t{1!Iclk2lLs7#JO>F^xMh--f9x9WIsre0wCnN7}D zBsQ5K#1UhCsi!wgIjO9T7}{cNYg|b~%(D9c7W zxMYq+4?QG&Q$2u>zI`(p6L(&vD}ppqbHs^9Akp{U*NxuF7L1#nI17<|g-DAS(-fJP zp&Cu_1~)#NcOQ#FgObsio~^$nR)KrXyrCdGL~?FD$eP{>o9nrb&vGMX=ZQ`Kns?D= z!Ka{(>bC-ts=gb=Z?b`g$vmAz5h>G8l)l|%Fq8E&F-jObRKk>77TdW$e-g(8&Hil?J9q3`ZJ*U2 z(VEd?Lo5-Sx0iVJoIzSz67yf)V!b@f4#%kwVtxk0PQJv03&E(TM{Pvgvgp}2%$Xzy zKz*J5Am;kA(`UAW7E=@REXrr4Gv@6Jx~z0jez|kEJKVO-hG)!q{~=np(fR4-g^q-J z5Fdrcu_%oy&m~h}Ynq+MrJ3if%V&1rPcy1;KYwb$o@%*j81ytwLPeP+#fM@Fq3TY$ zeoX1fj&w`R-CAc6F*DUxI)UE4pO>32i|@U|_wPS*33;&bd7qW;e0f)-T*edY(CHIi z4|Z)adz#LGOzXbA7&jYja>3B_Wd!x-L;7$d7)$V5hmhC@Y1 z9BUnQCI*_plAMREYH*`z4quL!aJX2#sjUf95Ed_-gI%BuU(&jVDNs5EK}ME^)0cIX z!n2LG)Qx=VO;faTc+OP+ow%l#e`e3R#FZbfFnjC#HS%yWx6xQtErctXW8KhPTB56I zc3-U(JWtz5gU+4x!ozJwsY^zlYr=|^o8EI^AZ}~Re0A8J$>S?ZKdMYVKQK$Skd|vv zs_DLAy+zZdzu~A1X5k|@+rV*{&fmHUt23<6_J3Ua@=wCiedPt(OiSC5g~AQZ+vB#` zexKv7M1#$KJ0CZ02->f`xO-OBOl`&`FQBXRUZm-EiyJb3afkk)6gj~iZA+86+kS<;`Hn1wu^$G7!hx} zG}%P8GgX&b>AOhLDE=??<5m8nz@E$-KQYVL|E)p91j1J*8y79jrizOSB5i&BGJ$+Y zw;=;w*G#={yZj&?F-#1B$%OrNLpf@y%M*0F6z1Udl@o89DTWI=2WD4Sdg_%qINGPXf=Y@^qR>i@o)gE>`T3d@1F>)H9=>KrQ zV54we-5j8)UV5=#!ux#r0*BG>Wq6!8vPpT_V z4u&a#E88%JxP9DXzLty+CgL$e!QX#Ku{iZyE%VR{EuNBdPo=Z;gm|m%yHVodLklYc zDet~v3wL+oN2J}2q~hWr&QOn2KD19}6i{t#UDJO{rR_>bV0WOdx9Q6KAn2f;jDC2;-+0;TB_721JoCk z)cwFHRUB+sN7P>J*1O>lmW*Nz&3{bmoz7~UOk=6yt!^z-&N`=&AEDuLNom%P{r8>S zDi~y+-b&KpoTPU15vxfYjnrq!5Vq(rbML0?WGJh;KBqbwH91u7zdwwSGK2O>({e4L zyyn7Qc+&1q4(*OW?EFj0Z%j#RPm2HY-_1&tXMDA!r#w&GOqQUaV)VkxK})<7`5uV=$7&9+18I@h1yWtBVf2Z z-Zh!XJIJANk&Qp8MHBuhjV~DPLAS;}_M=$m&Nx^S1rRcDI1nySb_RLV+_%2Yg49e_ z`CitmQ*`q37Ztud%X|>LRdfSo(@of_JMbrXiztD55WTmxB}%F(z-0~eQx_5g@H-P5 z)~L$Xtfao(H9MyA_dnNZF-}2Gnm>HucC842FUC-1DU5k8_R?tuO}`>)v!Y(26$5qc z?7R1sJQgY7!Ld+4D?>I-&VCM_ApCtQTz)wT5&&UEJ$ewJ6y@y8gELC2uFk#4(fPV| zi^ixDC8+PhnHn`z04EH!>M6Nw^-ojyBG$Y_6ki&&X)*qvCC6>L`Pu=w$#Jov7a$7c zRzOw=ki|TVD$q>bNZVcC^sh4l-;Oc=ID}v1k9wp{^X~F6FaYz4EX9CFiRSVtqj~&U z4x76zdo3ubL;@ zHD3rP8jLDiZ446A`*jYn^s$6*5JTV-)I4+mPK;Rglu&C+YXZ83^EuSom(9mt|(z)@kL~-y+e3909y~v-g(vq2X3E0>8zrV(hw#G5|FolH1)afQ*3% z5T-eK6HDiV%Q1(7=6X8BsYE8?T7c~b;tSf=P;QWi_9K`+3xHQBVhf-u;*RHlIc0y9 zJl_;mFF;as2{TDySd}zxAdTUO3d?T2Ct%{_ZQ|96Y zG`fNBOV!Er@{^IbQ5dUszLhvoxTP9_qwu)st_(E0t|D=j#bE?&pb;=|`r?o~vnNIr z4SoCxyMv_*k9czTPoZj64+PQD;&Nk?83JhtPTQ7g%P(H)!^u zO9|~j0E!ugi9_}1`|aAKEfv7V@F`pBGA*@9jvwyjX;v?^OwFW0n51t6#g7WT)q@r~ z)f!1QzQjJTnd$ZtjerSoxDT@iZe7&=OKaTr-Mk_3BN#RS2f3t2$L6i{@Rfj#2M^(P z^P!s=Xt22tvbq2a0fmr#e~_pg^S4S#ZvF^WXutI+PA^y|@fWPE7&Ll>mGtX@{{(aH z-xf7RfQ9<~D#5yj_th;f=jKf=)xQ?DO7Rk@A)BpD!*rhSJ+xG=Aj`iQR`}bA(J|Vj zqyHoHY8Wx#*kPX(l@%`$Dfzdg1rhEM%tm)$q*wBv51^ZGBc8DL2P_vU_Sd-t6+Yx@ zcp1{Y1Sf<}GL^x%F)YMGxXcld3Uz|~fh$M@gFpcQ06+i$MbI(#^j8d?k^=zrQUU<{ zrzZz6wKbx3uyHlFw4-%!HL|gEwlH;~bvAW!voUp{wX(M}bf$AMbc*#dRnV1gX1j&M z7794Hy+y!byG1fN?rVe{)C~fMq!SDRb^q@{!VT^oPJ5TmdEW81U;V54SXBOb)>>ws zzpB)VkK&=hfm-Q@IfI5KU)hKGm{&+yLNHEKPBK&dsAnLdxZpRmrK@l{;Ln@S4}5!L z5M?CgwET}pjwX6ZJ-Ubp>S>ln>EdY?_OKX<#oDGhr{6tSjKm=)(*$+gl%;^UuwuNf zcq@yUXw~s(b(J6k*0>+FuBd$>QwM1Q1@Iq@mYTFpU0fL~ zVHtGegB$4``CN*2uXnN+@~ZyrYn^FN^4rLXFf^#BG%Tp-gW1~7e(2ib+{zNx%*}L+e57M{;=)hmOFIvnzo%ds>B5UlW*wUrZc;fAA)>FrIM&H(i`;mqn?&B)=PtgaGs zl?%^cZoPGng-)jdW7ysv+6J$S^8(|==+`DLo&StSk{^SlVHNAu6pPgsguOnK2N5;3 zs;tKnV7z2pz`m}kHI%}v-ZWazJTUmR;b`%G6^CU4vkbn^1+1MUA1r3C0o?7SEZ3ZP z&)yBU7CzJWeB9YVYq+RbtTSAi_~q>uYQKXqs!6FS{j}->fwyQrqvq*A85{Y#U)E}b zIMq4$&aKuhoWSY067BS4uW&M9ba@L>`(e19R|U%1JV2;>6%czdIX97#D9`%`BYBYr zVEW_)YV{7?+y>aw$k-m|;5vn&>?!TA({EBHtVMbfoc0x&F~PpP7~JhGtsH)Y?a(0h z>qWvrC3YkPi*Z6ZeUaDGQ6Y%~t0IlPo>|7w>{*Xa1LDMs7GvBZ1QZv9XAb_mN%V?I z@x4>G1w_;K>e>2U16B;n3_EXp8s5@QfD>Crkm&Kg|a_ju_Y0E}i%qDq- z4P`PKXeO?w=Urm~5y5B)2buEkOOG&@g(07MsD(1>Zp zpPG(QnhLq!7Z)DM%@@N^R;4aPDnheUdSq&Hl;6VBOcmHIQQZmE6np#b$m6w)6rd=if4z@sV7~++01dPV$M35&NR{ z>5@xNdQ21T*`fyE4An2%MA(6TQo$R+>)v^S? zux>ok)mkWn8o?pqA};n>o`T0u>D+N~oild9m25nHEhg%X<$ElNM+DL2D2QoMJw zRQim9$yMkBC|Eo}p95QQcmFyDwa4E^6e{ziI-K)v-AHy%zk>f7NQDJK`9jhHimH&b6rTeXj^28|&8*?g?IUTsTWjPU>;+wB8Hnw>NApF*LBd4C)vn@P6 zahGe$aYw(nCv7OP+9x5f4n#4ORn!4en(r-;Cc8)n%&GV(r5Sg?9dKgybf#~oWYpnS%>?j(XgRzBe9*I#xi zQ}g6=?{bZXpb_tYK0K;;tjs1`TPuvUXlQs?!FHBGZ_nx9x0-tC6QTTPY_iEecJ(o* z2JfU`-AAd%7XJ|X#bb_cLgl5DUNU2+b{VBrI-M;U|4t&gWUzJ__`tz+)}BIU^EeLn z+ZuIQ0pH%Wv2t&TcHe?f?`@x}_8}E_Yc-z7i*x17YE1YtW_`NUJ^1Jt`8e&eke(MC z$Dk1)C_gXFd7`jy&+m?9W670gt?@11DJdrbUW3L`x%IAQ@6)CqH_V6mZnp;^@J+A- z7t`Y!!;HA2bH@cF?oR-;0lf?6=C?2W_U+nLnZkP~&)d7y?SOgy4x}gbZ(FPW<&L_6 z*j4bRVk>ly|J;pp6)Z_s@52z`@Uyv$M+v8*MzBgn3F^*p~ytZ}|KzJPy z%|(+NLk;=_3X0z=bWFh!T?W5kiwzu%(Fl5Fvq*1-7fXTA_2ql5`TB-dhTZQEsQQwF zu|TSeH6l)z>Y}d_E$+cXh+*rP&bt#t%Ub$ZqyrFg<@BWDqHP=Lfo zcC9=A>~^32UDm#ja87K^OI)DHJwy+ee$Q0bf_Xy_MyBYszn#6qD+L^jc9s5E5sJS#P`%)SRIPT z57SS-R1`Jffe>-Qk50_(_$Ud_6Xf?)(S+?{M^l<3+4xr^*bNnXaab2<>BmqW9Th zxBvU1>b{V7Ky`F11DAj~(LRof(Jy~F!4sz{tmUrUOzq;qL+Ub`Ke%I5Dh|(SEnD&U zGQ@)M#7{`ohQiErpYiT3ZLqmq9JsOSf3i7KTG>5{Ib%7MK#@U9x2>@W zDibhF9xQP|=G?}`k({3@#{q+0ujsRfhXi=pqwOJ)HVG=8$fE1j=RFym|G)1n zx34Qx?XC1{r}!N0MtUr^mSwcoael88MnQrASx7D}Pk&?TQosDRVwPw613``D?o4s8m&`#H*ZGbF?p$yA{Tq|q%@8DK^{4`devzi(+JTgq}BW1BuN^r zgA8lkp1?D}5hi0Xnbc{UN8}5Nsl7#ldrDfZj*D}R4xeffeX;>YbWGPzPVtXmT85UP zP|+|}(A_>2-w%kn;T1SZ#ram6Z@mf-$Huq;W!Z`m>q>|H>bA75_uI5q1&cL4pVqp` z5%$v9xzyHj@}p8Gje6mh_Io9h$UJ7-@-Abv7?Ar3 z2?}`TH!QpT(M8oeTw@eyY`qfIy|Trr30(2Gv_&CktOdcjd(S2s$a@~2UX2tqta5n@ zij=m*)!HxUfMHyN9E)w%ggo~N7fU=CIzf>yEX_jpvWRC`+4XQa#C=$w?^oGU8YuCy zW(y$2m=M-#HPUFD)`Vs4AqDyTN{AuOC%BqRv?o_O{BJjJX5U-oHaMV0QaC#uD=dioQ)e_=Yj(QXQE|Nv>m%_kP!QXzHkDdxvg6rjS1#aMTh7_b3-&k(5&4Ajov6=lZ`Ds=)+)*IL14JqShvx;U2|KvMT$< zuD7UyU*WoTSWD*%3q` zLcpbRX?dVs_}Zf`prr|wuo5<4vJHIlXt zh2IvAja#n$ZZX>ozR;OH!A=(Hiq{mUy2zBMwL~6}^_uK#A_!N|j=;2)kLbRmgCTPu zfWRG#q66+2b6d16EEVW;&iW}c-N)5F0L~%)DEyr7wPbz`g?2@8kZAc*9{pQiK}l}D z4E|yJqc_G#LH1dyzvt3e9tJp?%>N|n>ien8XLNC>=-)Wx-lyGdaosJpN9Wpwz@W6_ z7?X4UU!|!g0X-a54Jyl4}W&j8srfu$+Hk`MB>%*KMTr0G(SppOiPX|_^Yv2K)L z_6J|H0(20NVIq*G4QUMiw(|XGCu@)Q#*?2MfYV9neUa#|o&JBU82ZX1HGjY^1<(YIdtxVJ_ zixCC*yg^XvpPrDLQw%aQlytYiB|xL8z@XgZWkL8TEL zsO=%)7h6*fuYWf~53$#U%gaI6xulGx zU{Xe$o9U4&<%@)rAHPo?d&J1G31ZPBRl?hFH3h2njmuyHv(QD)3H~``wvoM-aK6>c zhN&K`9;H25B2GzBn&A;zpJ5>zC7maf{!Z%^d5&)jwHkn2K?WXKFyMXb`k}`Mt7{j& zk_5{fHwbWJNYe^Mdc}5H|G19AlaoFL9&fTVigi4dFnrHPt(nR1LLB=dT|*aj?tpu2 z-*szJHY45c;-CJ&`Q>A`6o`7gQ_hrBO3)naf_HEFx-x!&<%=iW~5l z_~i1!L@QhD;&`kv#Q=}(J}v&vV$Mo_<~1aD1Vf7!>h4g^cC~e0G?BG2nP%SS?Pg zWL@{uxvFW!d~$t3IF*6~D(kg1$1a`Md#rGNHJTkNrkf4ABD@HUQYpRvHNc@O1?35Z zPP{Ei`1I3zAENvl7B7!!q|>E^vnN5-TWfh-4l)|kvpW#!cx6-6b|t@>dM+GNMvQh^qfaL>H>N`o6C)+jKiIj`jdGd7^oCu?51nu{xiN z2On{9m#ns1du^V}!aCZxsGn=IQ5k>mE?-Cy*>s1XyN)1zpY`mJaX_Cw+SvfWfk}Ht zj|LP72!D`6p`~Y|oD(JRew<}SO3ZWNziR(!{XqeeScQnq@eCXGA%s)aO`qE+#W}p( zU=g#Zr)Jp$HNJH-$P15mXi<+y6>5`fUv1^c<0b|q@PRH>c$`ig9~W)jUq$z=@9clQ z<-B-pnzC$TDOxM;Z}gQ&FS=*)4Za1{29Xt^&R}-W%ZHYpEMHeAvjo?#VJhl9QC@NA zG&C-CG5qa_aKNXq?s&dTM=kE5`;D9$#q2uTq)b(n^$w0GBo~PSM(mbgEb#s zG-u3op{3{P86khd38ie>#7eJBmFmlR7bSwvm%H-VL=rX2Cdr4MZZzVwPnp?rvSmb``-M5HV9^b$X8oKRT5;g4a)}59Jv`TfZvR0YF-mHUXp-@H zF@AXGJv-TpXRV>gg`m0!L?zPdLel;8V)?$rdj-OiD$~CY6A*fYK3XJ=R|)^b%j4a!j(2^H8FbMZmrEr(~Mz_3~SkF)Hu57 zX_Gb)WL#w+IpSzair1QTrXL$}6MeLem^Eu=Vu_JsD`6;93T%C<;>7vqj(S~wn&-+z zyYKh5$8=$xI_jKVW^%e+M?0e0m27FO53a2NezsOf7`77RhMk0wlc;nC5v*!0`@IhQ zCzx=yx@yYd|XFgG-#0+Y@itI_A4uNZ)QVf>*Q64osM|IV})VZ>^v6 zu)u5xL1#_PrGsi#atcn;p~SW)={~T3HvJK)k`l2iv(*`UK=2r26ZRbH$nH_d?maI} z*eV^YL(ut*xy3wJe-kPuybQhSLy5ZDG7^nh(W#|t7_OpqOvx%|h~$o}vzDJ&HS?%z zq6gQD=>nXn*{cAvlMK-vCytAI-XNa;d{K~ z{Hzg(5{XtrQ4{Cu!#dvM0Hk8C?X=+{$Q=JWAoSDt$4C#K@Z)!;<|ZotLt9GQ2hr-j z!TaRIcUV^{rJmDJ1Q=+-MXBvBBv3#o@J6i*`+9ScwkRDXFqoX>P{MfH5dFq=H&X4q z=91m)Lkga3&r+OZxuU>fZTqj&_Y*O;bjmR=DOohwgcdl=UvBs~ZF*7ti7ESTva*>4 zI@f7RWJ(nm>?oa_jk7+bCILC1#89el_nJ%&W2OU4RX~`~f(FUxFWEWXftgBP^C7bG zFV2dU+gNg;^hcWA3{MMwW{UAqOwPuIvLkomtCyA$b~>EZ+=!CZVfcog%16KRR(?G5 zY0-$S%QmQBLHDChVEHKsu0FcN@ugNq=7@9y=sK_ogBDE;nSaF?{p-T&Q$>X~o~lri z1uskg#(d`56*JbcT_XZ&k$YXPUuVY>&e`eb3hy8B;Js{mNJlzKhK&nj>O9pc`_s3H zV0(N2GtZYO9Z7-A&OJHu95^cLgwnOvlnps?j_ZfZn60u-y7$n1@Je$`d3}o5fIQ~2 zOQ2^|CfU-@Pr5WAmm=kb4D-98sqx*1Y$uh|UyXK-+LgO~Kg?DhD{fm*s2%RtC4*b> z64&n&li%#;?_o+?=b`UjD(zqQ}0Sb>LTpTA2EQYL2lNdnR=6pdilTbIdGPtDrgadi;Cm% z%Bsp7u)=r6vlMg4?@VM5%ZkDdVyPM2(xabDLhU4~82}F0QuUD+E!&0*dYZlK1V%R? zN85Ut@?Z?z$O4Kb@1dFi5k%;x8XUc!mks-KvuFghpGJ`8oUrGePvNWxpwV#xVhXUr z?t#-~gvi?|^!V2o?t+bFd4b(g%?-ES#Dv85h%H4Wt7QYMBb|Vz7gU81>8VTJf<5EO zdAbL88DsW?7GsLxI9f!r?r&vHq6P2}e* zcCefdtm$+ES81=XuRQeQRB|YORo`eUXK#JD?}5bMQLAwG!lP_A!<`eo8}6hOxSK!< z#4{pWgUDwTUCgibfln6&WHI_pHRqt;=Ir;{YOG9W`qzNyaBF(I!(|7L%F40LmmGS^ zOV*FIz3&UxBQCQl%a#}C<4NQCd1f8Qds->w=l3|0X>9IY_`-yW$Ivn^d$avn9m}l^ z7r^B<9gr?Zsmh4$ zn+C+9C%jvwH;G6T}SOJ?d45$1M;=m>+< zAp`yniRkvTb(i{~R?xinzh5eS5TM-R^D5EGN&pWRkFLn|BaO5!8)T`MMd~4X=w22~V zDW-nG;nM#&uwGUyUw}eYgATPO(9Y09g0Ek>Lvz13vs&)yaQhi5N#K&m6s2iA+*ZN^ zOa0`kS+vGiZh=Is&9#fUL-K|$gP^V!H_ zI!5qeOW7kLthp%Yz#8!7r((C}HIo;$q>Ts^{gXf*VByR5*@MkxuB3G3l^GIUh*Oj|G8oW=g2mEPo8n zn4IEKJj-7GErStw$~n2GdLH)sI&Kvb76kmQ(|LzS1!!(&jPCB$b+JiTV!&3r$V^zN zJ9PK}XE{dG)iLCzJ-j>YVK^H+I22(E=w`1{eYsqia{b&KX+FyBx*cc`)DyYwn7=Ol4%Cg&}Cji+dM znH5foZ!G#pqs_zEqrD9uISMfy*ru|z4_s*q;&jj~jme~eZxkE{?y}a(c!Z5_>XVH7 zI3%rtpeLBe`yF(1GqO6Ltslzyc+v{joTKrYiO*<&o9YgVcL@lRP*TCov1J3uX-&7o}Nqvl-^UEe9zVK_oy&(N5G&K|o(Q{E|lD-iS_wrlV5T$#I0< zVpm68ZJLf!X!khPrRDs=O;_wuww z8CfzQL1L}L6tJZv>riwHjcr@g*Paf$gZss4X@Gv&==wS#BtI(B$I2Shi;^YY&ys~i=*$}wSf|z$*QE2ps-*Q z?Jm<%`dG)gzyRJqvk=xXhyR3}ABTe{8cI$5>lQ6x+c0v!k-?Uz=wFXF!KEwNpzeNW z8;1FGc74+p2$4!-NztbEm*`?h31rPmc~ z^Am3BQW{{+3;hdE-}*l|>#c00h-~VxnQ37zSFeA&XOPpf3R*A#@dIx$^Z_VWTs3yI zWk+?RFb>o$SKYR3fMt{6^xRqd|Bicm4s#OyRa`+KWwb!Yy(@<_U4`s4RP)_v%&K>r zE~1>HC!Xxa**3)-lpF#p3&{XaiIsd96NB+v_r0+?jvCViJ*d~>JYi2-G|TG|y>JS8 zSzunv0hzqyYzJ;9nUu6a%*Ir6K{|nO67`>&twgO=q{t8>>G_(1)Fp|C@>lIe z#c#sc%HqEl3GDeE)bjJ6RF=zRc9(9v^deKES@R8zElK%Brc+u z+0Y)X@O2eFJLa;ly*2#G(ikd#(C_W~cO4*gtSmyZP|&>G^e(GW!6m z#w)eC1EP1whP2;Pj^AAQeSzwA&?6C9a!0&0n>3thp9v&S>#VE`B)Pxn5z5jWPHmhy zIV$veik2NSYGF#(fo;ccw6UfL-wK^<^1Cm;s&Z5y>7vq2jT0-~u=`)fu4UGZiss!; zMD{JvQ0mA8Mk-mm9j3IK8=3=unBtD-IZS*7G>Pe&5{$X8G~5PrKXg%#RdGj=Wd_X6 zg#IGbDk5{q{UFPEamVyZ^WMmvEvNm{ET$_BP~D8d5jTgO-%!8L)+VKoJEP#o24)Qe zRnpLc6N3mHVWCU_TAL^bK9ovzLw2KPF8pm6>*P+3OQ2P`QW2hUo@t{tBlL043^?d>b@YYPeIKj)7vR$pe{-r*QY>OJp%4%ZCjHS`?~ZF$ETizUg@9S z*8_c;ME&!K^9Q@#Zx@r3RFVo86_nFGhMI8Uq@q`6`>?-ir#;9xVtFFyJsP=yVa`3e zM_BHld17fsVjhmbd0N@H58+wnAx?-C(n8l4SC_dBFU&z<0vyaQ7al$s{N1PO{bQl2 zKxVA)U%&ogzs^_n{DKdc22F z`1=pZ9TfV3{9aER{OSLHi-OSuRk2cp001!m|DvF~p;K=bsKU;4+btnU$iXer&Mt4l z0pCS|Aeg&5(hejSgT}(apso-E0uER@L2$P=#>DRVt^4gJr@8t5mtF2#S5cLmXqYK|6OPQypqbrX z0W<$Z>9_r}EiTTiU)5fjKVhJW!}_a(kNyGe$P|^ ze*anPc>I(Bv1r|9dEX6=6cLU_$7>7ve1Aj*UO{2|nQU)&BiuK1R?Ki$;wGjqn~=vXE56rw@lb4W}xVVs!=WRa7;jO3oV0%)(3#K!Sd=D z{8`=g_RaG*K;!n!&ik-b9mJBi&)D{3Li}%H^?yJ=jH_+`BC?!Fg42Y@zU3lG?$xs; zL)Shd<&5&PbOt!?=rll z?FPUx?isM0zkft}aM!wz+@nlk=n1qs!+2T4;>R!Cb{L%a0H_Z|assh?-Nqbx6T`>K z`KRD+i}HRqu6p4^qWPXjcw`BGF5I)I0muIoL;TN0P9dAScIVPgV0f;`n8V0Pb_)za zZ~IJOcCKe>y2p#5VzeLlWQU!!?3u#i!)j9O?e>p6rXvP5^m@6FgLN~Vl*m8I0o5Fl zPPQmBAHu;S-Fq*s$WChwO0gee)9h~`!)sA5J!vm(;*2g6jt}O5y(-C|4mcY zx>sRDT&Y|TceAp!Qv%(zf@X@G&$a?JHrs{4kiLySbBGp**` z%=@eairmKX2|gH}eJ}oq2{1CeKBc!huxH&538|qC(>7KKUuaB)QVHC)dvRvP6}v(^ zJAlm^yUbLMHY_wGvF^$4{#DgsyDLAToojl@;Y=I=NJp@5D}7pgf=dc2L-mwEvwX7F zZt!@ZU>8AD3beWq*UC~(dH%EtCV&Pa+pVCNs&n(>BR7hTgrkfZ*xY5iF0wU&J&~>O z!yS2ywSqlM-r25*H>t3T7AZhmOR?xWZQQm|=J1~}-VR^AI3SRji?8uX!z1F|zY$9I zEFgNX5=aYVU$9Y!SpC-}@nqWaYhc(L?Zt|N{vK4k0gi>kyxAVc@+Zf9QVG_U1Pl+$ zUSOSOotRb%;J59b+da-A*YKqS{u5+zPV*7HTv2NZ19XxwNk@K9h&YO$C{EKAooFj3Ak;6LV! zSWsxU&VPHiZ}b?Vj}w?Y!YwYpGnO5@_gh0fa~6j9+CclrRP`8fI?M#d5FZxHL}QJb zd!y;OR#1LL3O~}7nNdb!D@7BUZGAqvlRA|X<0khcgvfE-6e{?YN~5(S+U*okBD-e2 z0B#0-LEc$+U{z9C!eGM+3(Cc96nw8o4)ZDnt#Pb@8dykLor3?=Sc);m6!`eayG+Rk z3)=pU_fsM~`HIc}+UXr+xaD+=fiKiwt8=L^1x^ELebzbf$*wlyvsH@B%xw$XxYJR&A+XtF_cd%%wm}Y!i(xei}0pkxt zGJOBG?_yCL!{Mm6>a@zu-vWL0LZX2V_^%%vmK-`AlMl#`Ou6tA#V zom%j4>s~fKD@HE+t5xPH#u>fBxDwm(7@t~hhl8SUx=1CH zMY!yPt%g!zQcA`XtZEwAY{yYn>yj9;)!WRgodAXqwu^*@@}7VfZ9qnOuk!ERHC3Y=;n} zG6XZEQOooDQg7(qh9P0}A-oJT6stj^Xsr~$+#p66M9j&Yk?k-Do|PGo+NGs4?W<0Y8_kA$gUTx>l4 zo}hK`=Ox-F@x>Ys5mjaF9|NSrx8*_HCK-8Sw_LzdE7GYW*~~gOmvt+q8+r-!#g~ zpe7J{H-MrmMxW6M!L;>J9wf5t#o0h};*aXsmp%M_@?uO=i`kvxE7SQn&r|_+wZBTZ z!)#-?^|_fvxp)TGIP|YOWZ8?l;|^Qz6u*(>3mpmS)Y1f(9wYa}m^v=fdWJ+2E6Az9 z#X4CVgv8GRCJjT-hoH*CoRQcV!6?3-bOZi9CX$IQ-&5-aNNb;q7Yxn%sHD6&#JFyd z13hh3KMvQqh<#4mZ3UHdrGjl1RXDpPE`Gk1hZ56QJDIu)MZz=1({8GmzZ?`eakB|s zEC}A%k&eDE8*h8+tsPP^SeNmSULO%=dJaq*J?Yfe;7lX1hZhW^@UUj$Sy0;<%hB*< z4gu3M_j8N41?jLs=4FQ+kF-!%E^OJBQ}g%pDW6618Itbx51;!OwPVFT0B%qzTxI=e z$x^({tu8(Ukyup=zBEc7TpUVUk8#W& z*t6L?!H<1fpYEJGX^}cE&xit5nTrT;)61j2O!oD^SB*E@1Jl;vsdkibOeFD>tlMbu z;kgrhk!n9w7;`#6L-IS|-)`E+ad$Iv$aa17tn?95%TkvK9tK2_)@#(4P!$aLzvA{<5AYzbTXNVMIsVr>Pylw<3)5W*~iG8*&UDp4;Y zEy$B+rJ0Uot?4h%q`=UcF8B@d3uX=D-<+0K*saLqo#&T5ZA_YKIXKYP-qyTTyZT*v z?i)BfUf)_Ty~l5jdeFz4np4naDCiqt?IhH#g0K4TrxoI5@m~UAgB-mAhue2Y?jfZ${M7aNAGU zP;B0o5^hguA1hs#9&9CR@6XP~=B$b}rryj{Qe8}JL_a%>Y3!;-hZ5fUMU`zBB^zGr zZ?<66_?T}i;gZ$*LV8CH{6oM>E{ zsilhw%sltcNNFTKj@z6bGLM0qRyR*q!*Jc(9+ry`4~R$is~cU#W4swHJ2#T&jxw^~ zjtYHU(nqR#raXumm!9KKAe+0F>0Krj72`DfshVH)WN55fjfz>cGzQ`LMorG`(?%57 zGVAw?yQqUrPk09z)&f3(?|&Gfnq;)vqQ}f%k$=J!Rz2%fNd7ix&%2UWsa7QMwgK*H z6|?P+K5*7UI$Eo;OEH!^CP>5i+=e5WvMisZ&0{p!{t~V;vo~OAy%LtM0kx}FckDir zOgdw1f5l2XoL(Wi`cP4Hw^`!Wa|@n!zD~u)i2v3A#Tx|oRh`DycjOTv~=+UV%gA)TU%ce6q7Y^rfW8IMVGhqfo;wed9Y70H@u)LK= z357nQ%h(+Jl#jtQ-%HgdZFD@fxY)Wpt#j*rPbLpe8lB{=-12q&VwbQHCEaD((s%P@mzG`=M2oJRpZhO(|2(d zXTe-|y*nJ*1UkB7c1bhzx~Z@S42CsyXMR-D5+VKXO_9Td9l5DC|F_B;XTye6o{%mj+Gry{xl>;R~83?o;pA8 zIu=np70^t3Rdzwb*A$ka)uZEVtu472HbX^9xrt8UKhu$sn%2rSy52Y>k^x;rKGWuWpkO~uO5_ll;vUGwQfPZqqZ-l-PX!Qx=EMIt2S_1jPk=Y zrj{K|5l~7M9VVS@5*bCG(exz-CQ@Q0r)C6hZBU)Sn29W2=T7F;(Q}r6s)zSXT#@ib zc}K&*j2k}BCI18iB7l*qzX>mOxY2fDz%qVT`~~2W_yNxW&SyBt##9=W1@zzV95+YH zShqY$@swAG$X4i-<<5PsZE_`&;c->Qb*xa21UK38%K4kMH<5F&(?VCi4{JCXcvQ1( zZ(4n@&j_dUv|DEItEm^Z`<^bLBnYb7{6=V(Cq9X5cHq=Z5`5zY!pTB?UT|+@Ta1qtp?*(2{G@wu35<5+jCruKyd@)9YcsKWHf?b$oi|Oby z?9c*X2!`07yY6Z*Q$kY#y9xm`TzF^ZLm1@G72Flk{op(VO>*UcesF$arTx0DPpD_k z2|M>_@Y=btCC00F8kL9DUJcH}KCIksmF+YWSY9c=N*4oX;)jJn`yy>0cId4xF?4=4 z^M!ewvyj@S)GaQd7Rjqjj7bm6dou`Anv`f9vAwgU6+K@~s_#CBaKAz|B?5rWc?)bh+?&U6?-91j>fj#~Vb~^G>Vr-`#zEUaXJm?s= zDGy$>;6u>EmNtKs27_`S;1ND57-Vmq$Fsdlir=fqHlGNCF*&pjT}048U%Z0)Rjjwz z3;j91(=tkdzfL3$jB?@34%zRokvg1d@RZkI^$Z~a+hl*n2vlIFHB_dF=- zw|`xYHOg&bxwfjCX>^(ADhl&!^k5-J1eTx7`Z?ZYWM9MwMq*ldj+C0hdJ|uHw}47r z1f;DBqM{);TpWyGi$s%jAlr(?8-iiu7vV?CM}rrBCmbtT zf^T-~m%>&OI783K^|8^|AgNPB*P-a(Pr+>-o|4w{GW}cB>;k{8kBQcJAR%c~(*_)j z&?T{nBq^0)glG=MwJ(M9P|b7cca^+o29;ZOAliJIi^{Hvu|Nk@$GHi;?{M9;87o#i zGd0t!#rfHp1--QI*7Nx6{_NDtKbWxQcrL1qbgmEOx6}a-_wBo@KUQ|)_UIHXlMNu5glmjdZq%hNG3t3n-Qm7=w6)y*0yX*7(QN+qW>W#a z1kFQhFN8!rUSLt$$8sX_ZAkJJEnrI#+_`rX%9G0r`ezM$XMvKpzp?7D z_Uz4pA=e4G*7E^Z-rBp@9t9CZA*q0QBxn)pLOq8fH>~I2vIvM$1@gEF6c;Kszpj+4 zo!K2mmVqCN{_{@`)wIu&EwyL588ayp+?!UCmE)(NP3!5YExl_8_=zz8AgEE7f|L-Wc5ZKZ zA^6#x{${8JljxtfOLWvIL2RjbG!E-<#^4|en8IIYw_G%AWj)XkaBS~miCfu5;ZPjbXq`K!U+DgKZg_j+Auy4fqr ze+6K9tQb5gQN@m!<;~GVa`)nj)R1xE{D|-c?@`ztz*n{0)LcKIp%iN}PFY;c(C~n4 zQ*k#w4MggegAe?rTjYM*=reYpjYO?%7>5thrO3`|@)yD}w6#p z-gOG3HZ+CL1vSF!tumy>VG&TncCet@WO1#cEptw0QVaCcS>hi3HEA(zmMKF`AIn+o zQMb5AhoCG6#*MP_1_fw%wIB{(!~S+ieV+|(soe1`9mT@6>oX-)$|~5*2Ob4Ug4pt* z)-}Ci(6)5H3VD7#cX#kOK)H5b`dI6!sqefz<&Xv%K#-G$KU!RCdzxZuM61}3sChKd z<`oAi(*)?JoFdQ3zk2*;`##9=)Nyj55Km$6xKF-NMqqhV>;!$sD$8`NU0 zN8P0FNE){?fjSrBGsSo8D|yA*$R1$C{mv#l2rET?sp6^@RE8t2E#k&!$5^J*x7u#l zV}Rch@~*O(13@tZXLYMS;wlW0{uFE)+s=YQt{_cC~@=e ziz%hlSL!KbfS{5rWgRjn#ZDh_v`3h7DFQ6aIJ(a-ARuJ2R2q+{>#~$AEpmT z^`q%O6@-#;!#NR**Mv8AZV#}V$9Y`$>rGne@Sl;1+3@H^it9s)yRhe)ws`teGVZ$> zL94Yb_RetqB8PEC&YvX9cHa@)TQQ3?yw{&BhxSfWaCAlo-_&0wzMH4ZUoOKX6uyw1 z)|S~00u0KKvA8mBD#~HrdA^_JG~d_CtQi5Bk^0+-8u56MZ`|*9O(r~Qqxj+2SS zKsSRpN8gPBF#D({De4T8fNH3aQM;~gt^I*d7~}Mi5%PTSx4rC&nGu@{%|3M)c9GPj z@$m73gwj_ONW}FY5pLUoy3@u=KCdieK;G;l5`>R6Af*-<%EwuQ1~`Sqbgd3B2<|^I z38XL+f~-i*#WPV-T&z;rae>=v_w|ra)D3PIZ-nqiI%CrzL^w6o^_ufZn^l|jmCQoK zHy$6hN2;ENZXo3!S2PaPbq$@9lVZ&fQ$Ans27j=efcN@3!1VSF#V~&BEz|F;dvf9X zq1nBh?&_Ma581>nC82Nm8A(gH&A`mu=U&Mt<^92yPQn}00=YfN?K_B7x@3G;wFaT9 zV{4-{4D@i&PdA@ojTuHjGLy69uygBv^(M9$Jz+H^R4-khoG8-AYM{}@?ZOB!X+MCv z-yudgwk0ofJg*ek_l!uH<$}h4mHpe}6)m*!k<}rp1*=(LUs)VD`r(85bLYJ0_bGUS z&-b#TPH_IbUDKE~&xr19alLJ%pyu5rt5lDa+n0dxb+4qE8^!2wDl~k!hqdBh;_@%E zbZsO`^S(DG4{oKaR6<`yMj@yuFLqxP*- z8Zg<;F|#meQ_qM^mtRa(a@}u+OlvaI9wfO;RlR8C3t$WVZcyhbR3SHnci=erJ{|k) zLC-01qPnt-6z)4>sytuV%2l1jTTx~aD{Byk!}IZ($EAY^D>mXwcb@B)1+KHl(A*nf zFSJP`vl){hj9KZsFG|ikhLcgjRP!-5Qn$|o;j)JQ(71^Mem=9&f&wk)r8``Q2063v z7#U%Y1~vyr3=2sNorS7#p3s%+_CTg&P(j^~;rgy*LTve*XTu7%~*%Ru_k2sRyr zuYeT0;N!2_KLZfA{DKR(7>Od>A~QE%R(sr|_Yp~T&G*7HDIXH*#NS(VcB0D|uN{RV zLQxgeh^~@EO@mPnnc$#>8K8e+F4=KeN1!YX08Nj1_fw9#zuTy^#sn~i=YZQCr;=9WNj>XKo(ue( zflfD7LD-i-@ct1vaVUD-RP+kEu89JY+Ng0(DFdNz*>rTVCim2EI(b74W8C zetfF}au$~suauG$?|6{fyVK1a*nk*iA`!SejfAZDDQ9ggg>@1Kq;9k}M0XS#GB(DJ zomBHB?SF$oA4oisWoE$?7Ud@(DO(IVKs_P9%GPwq5LMQa>&)aCxD;;JZuh5L{jl{i zbi(A}weY8T=J*A#;b0!viPID1XUsyZYQs++A|1>IN3)xIE~tG;Dtol%e0*qy(Arz* zI?PA0bSUh`Ksr?LId_r}%~nRY8+CUL%QTu7hx(LoH{lZ<@gV0RFIh?1CkiDvj*~qGMOk7W%l2gdW7$m=({PQXwAkBdG_|q_b;FI0VE=+7kopderfeeaJAP4R&0&fl^}?MZ#jLm}JkVD1z;~3eP=%?hMagdn+$( z1wt~ni(g4xUfIu{bTlD!+LU>(2;af}PkOH-Q&L3i$2MS+zDxde-yZuF>Ut*WVFAMepny0Y0*KWx^P;9=33B-o1X}&`L zosEH}d&zk|R{hl*8Vafh77B{sjkZZiMni%Hpe)N~?Brx;ZEEah?dZVjX>XVCQ}t69 zJ5I>jJ+AwyK6E&T*$34i^mjR!NdOGKHcxb6}g@{tsf)(+4 zNHC2*^1eg#E~M!H+AVfaT-MPZeAaPuY;Rt) z3<0_fG|iw{`sK8`n8PbkB)tMe8C!Nm*PTJL8*+z4tL8=-pc-tKRlSeopD&mPl67Gp z5~lf>t)S^N^o!A2ItY5({i6bM7Qs2hq0Uo_N;Owh4Mn&v`n&5%4zSv(;;|;XP{+K+ zvhLD8v$=WZx)uGLqfHBeqBebb7#*cEb-#v&QSr6vu4TA&w7u^@sf9SscbMoKA`~MX%pdb=|3I7{K zf14pf{dM^ty68I$-V|)!I?i93|9#{Iyite!ZKfol43L#k*I-qW{U^d-JYxr{w#XcD zFi>sfFi;r(WBxYh1vI>kf3c34I=Yy%nA@1J+8De1+xp)uW&Z<^7l8K@=KslA_HWF8 zCp7(yDc17;!hB0_`X}c9wJiU}99@R_`#$|^k^U3q{|c7BQG8ebf%13gs3^d}|D}ZR P)^^{X3b1Q1Z__@AIE?|K9uDyQ;FXsxrT- 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 SWXJ%*08$K?4GTL;tsoWXyW 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 B#ybE2 diff --git a/jonas_tests/examples/base/examples/emb-sample/plugins/README b/jonas_tests/examples/base/examples/emb-sample/plugins/README deleted file mode 100644 index 88ee43011f..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/plugins/README +++ /dev/null @@ -1,8 +0,0 @@ -$Id$ - -============================================================================== - Plugins -============================================================================== - -In this directory put the plugins you want to use (*.rar) - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/icons/valid-xhtml11.png b/jonas_tests/examples/base/examples/emb-sample/resources/icons/valid-xhtml11.png deleted file mode 100644 index 2c63d93f8868d574b9e69eda2727b7e7bf7fc8ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1917 zcmW-hc~}$I8pelBA{LE+8qo?tsg89Uwc@yEOjt%x9C8uH-9fDmRdLXg4k$}{1soM| zSfX)3j0+IJC50*@Zi!S&5U3+cjHqao`Vg^TRIs_>{+{>y-uFAtIp?qQoUF*DA)X$- z9smG%hJ{KohsQX|PvGL{^5I{a9Ok-N5+MPAi-!jFt#<a+&@A*z9(j%^{oB zp?+)@tIcku%odB;VzpZ+-eNVI&Ai!aH2x})7E|kZ zUQ3v@7^^e#T1>0e@*2#j!5OX5sKJz4qd|jn8eFL{SXk7cMmaUEQ{%MSU}g}GMJcsG z$KtyFz-d{WWmz>#o0SO5(mDnqSx(C!8U`m=j%8?uVOWMT(y&H}5DdptFs{_8X&6)L zj3mU;Fiq21k}whwOF0D76p7MWhJuw8Mo|<(YiSB&Nsu8S0}djTR!Kr6Ny3yyNk9~V z!K8*JAc7!B0)t461_L=%tV6{V4pBIW<2XpDaU3Nvki^6|h7uTvVUDEM!6FPpMK~+O zSpo&c7>l7Oj*1Z!6=JLs2604;Az}nUgeZd`r~qXJCKF#@2#uuxV31dTIW;}q z)8|-pPYjEYxi`8C1%t<}9K9QH+;cWeDv>9tb@{z3M#+5c&J{aNlH^0vSLbY8GIYXU zF*=!RUPxnfnS8=&DBWKcc?F9sIzO{ZQrhB6Mu{gp9dJ2Uz?ZFT32yrQNUch#eB0HX z<5zPmymOpt*>&1)#^b2pM$zL2m70oIj%@k0=;^Va+w&&f=qvYBEKL5o*XbYgjEaqJ z!I>fPm1{0^)fHN+%`;-b;ajDbLd%9q51$Xns0)8!sqy!C7xrdk_P2=_Z?BIWeRX51 zZC_P#=a`?$XMQZmyrV1pIjVVE8@fWNTT^XTIx7#Ycj%_y_&BEAyJ)A&J+)v9t7w z`vr9`0uCWfB}fu1PuISdb-JP zLBW{bsrpk38WF?Gtm3%Q2OdTJG8IUvqMQnU58Lk2Wr|hbs@QotcTNn>>A?5zeYZ(n zO}mMR*zGrb=6wK^sz2_pJ-b|V=t%XP;Q^mdgWRRxE~mD_ywcE)J+^mp{mbW- zkDk_i`A<)Brd;;pi94^~m5h+AEtAwhhX$8_tX|9Ld4BPmi#Jc^mbi7+JanCN`tpb6 z500OAo}Be++lV^u&6S5x*#1RxQm>>oPD=c1wUjap3brLJj5<=XHU0bcfx;Sj;Gy(& zciev2oA2d4W%Jr#%iFnWe>7X_lAnE&d}uTKuL|C@Zbe*?)VHB{Y}Sk&(USv@F49C? zlr8>ld~;Rx>abf8c=pY6_g!`d75b0;+v|bYJ*~OCa7xD6;O3A4-VztjYnd_gy#`dv z@=y1)#ljQwE-Ms?;9YZ5oVaX3LS5vRPn&#%*1gV`DiSZq%eS^FvkP9ijhK)v-Ew?+ zrO#t>(ebM0;#UXu zwzW53k>u?7_pV<5abMwv=AdCiN=vRbdcY+GtE_RUb3;`_*SrXuwySjRIsd}ho$52Y zl9R3-OlzFcP+OJsO-De)NqtMT{Qy5A=1FetiF-i7)ZgC(`+%;2Llw_U`ckI6H>pQ^ zwCyj`3{0aH`pEb%!Aifc`G=288r(4=Lp46LG(&$mBmVZVo9BH@ArH+rXXlWqiqLgs z2PZ%4C}`+WFYkQMjn5o=_nuE(>xvES_5YmeoYwL-kB}z(Fn@aDvx&r~!)T-O>#RRJ z|16&V{Oz+RVz1iXBEGx6#6NB!S#{=Q#^d9P@Pyu=2JxD{_GInb)}yLoRn*tf_dc+} z`E%qGTiDL->G5BqdTzg4wq-xLEoitYX-I;0Pc##9sdw#qySK)gpbGZ(P?-0;R;V}b zvQ@dbcRbm>{d$F`KF`|V>YS$PU6rPqI(1*2Y*HL8swle8GxfLk*50qSJ7>v0=zVXc Re0F?dK$vW)v>aKN{y(`9mQw%# diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/icons/vcss.png b/jonas_tests/examples/base/examples/emb-sample/resources/icons/vcss.png deleted file mode 100644 index 9b2f596e016533327216d98a0a927738fe17384f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^5kM@@!3-or#C~03U|`e?@Ck7Ra+Q_kdEDnlhI%!W zMb4c&_g;@{HxGAjZ*NM+!7cOCYk@#Y{Pps{+}zwx_wR4FlUu4N92*~!s#T`6W<+- zt4%e$w+9&~i2E*D*W)T9Bhx(p?A&_0|7X(X^Ya7IW>?MPDaUzu zczTO0wr<^e|Jf%QG42CClNSR6E4d`dFZlmw6q^`8Jh0FrC=HPY3SEXN1j@jH0f@DT z;lF?am<8g&3^agg*jyz(n}LC8qNj^vNX4zUQ)`1SI|v-Rel?4G(T!h0t6h3r9Tx_% z{GPN=z+e1GN8qGw>eHn5|8FmNua|o1m5;W_zoO+QbMz<2znfQG#(ynM{=I#{0V!X> zqF)tO-~TK+p#QH~U+~Uxw*7OC?@4lzU=MuwAfY=*I-PyJf}6|jF4ry6#nK@bObtKJ z{jpr)a7XQvK=_v<_kY&OUtDf7N2Y`!=sAP5DASo0{WX7G;uf&=`Gs|Enroa;cP#bwBZgT0Vk8}Ij!pi@+JzOex~wA_|LQI>iZ4KOPMZj@RJmq z{=ckJgo`sg=^ee+rLf!@|1r#|1Qou-tz zozY_28jcOAqH_ZHT>9G+6r2tD{%tx^c*pF4-nNSOH_A#)UvDaE^>6pwzeB^b1utmshBn2mW1YZ#q&(r+Ne9lLHSPV z;lJMu*6nF1eX&Vu#au@n)2h{;1^hB;>x|=8`0r4N5Dq`3W>NpNuIHfS-r}72x2dtZ z|1vypS3P_!s?6%3q3f=mrP_V^@twUAXY`EwoTZxX&st-k^Kye`&fdVV(2iA`qSwCa zO3SD?y)^LM2F^-1=1_^hVN1d%c)e7=87<81^0{cK;`g>k^UAjGxu$SW%#%-OqR3cMOS7CD$Nw90jSF7TjZ+3b%7?`))PKP%lew!LZ} z9@4ntXMQ2~DY0cQL^+Gz9jsW~FI2w%Uw?1i^C{7@K5}j{esbPgg&e IbxsLQ074N#oB#j- diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/footer.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/footer.jsp deleted file mode 100644 index 6abe0bfbf5..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/footer.jsp +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/header.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/header.jsp deleted file mode 100644 index fa91d53b21..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/header.jsp +++ /dev/null @@ -1,31 +0,0 @@ - - -<%@ page errorPage="templatePage.jsp" %> -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> - - - -JOnAS Enterprise Media Beans (JSR 86) - Sample - - - -
    - - -

    JOnAS Enterprise Media Beans (JSR 86) - Sample

    - - -
    - -
    - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/mediaList.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/mediaList.jsp deleted file mode 100644 index 31920bbc7e..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/mediaList.jsp +++ /dev/null @@ -1,109 +0,0 @@ - - -<%@ page import="emb.sample.servlet.BaseSampleServlet"%> -<%@ page errorPage="templatePage.jsp"%> -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> - - - -JOnAS Enterprise Media Beans (JSR 86) - Sample - - - -
    -
    -

    JOnAS Enterprise Media Beans (JSR 86) - Sample

    - - - - -
    - - - - - - - - <% - boolean lineParity = true; - - // get medias - javax.emb.MediaEntityLocal[] medias = (javax.emb.MediaEntityLocal[]) request.getAttribute("samplesMedia"); - String[] proxiesUrl = (String[]) request.getAttribute("proxiesUrl"); - - for (int i = 0; i < medias.length; i++) { - - String lineKind = "even"; - if (lineParity) { - lineKind = "odd"; - } - lineParity = !lineParity; - - %> - - - - - - - - - - - <%}%> - -
    Usable Media List
    - - - - <%= medias[i].getName() %> - - <%=medias[i].getName()%><%=medias[i].getMimeType()%><%= BaseSampleServlet.SIZE_FORMAT.format(medias[i].getSize() / BaseSampleServlet.BYTE_IN_KB) %> kB
    <%=(medias[i].getDescription() == null ? "" : medias[i].getDescription())%>
    -
    - - -
    -
    - - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/navigation.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/navigation.jsp deleted file mode 100644 index d560f25e71..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/navigation.jsp +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/templatePage.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/templatePage.jsp deleted file mode 100644 index 6a397249a5..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/templatePage.jsp +++ /dev/null @@ -1,67 +0,0 @@ - - -<%@ page isErrorPage="true"%> -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> - - - -JOnAS Enterprise Media Beans (JSR 86) - Sample - - - -
    - - -

    JOnAS Enterprise Media Beans (JSR 86) - Sample

    - - - - - -
    -<% -if (exception != null) { - out.println("

    There was an Error

    "); - out.println("
    ");
    -    java.io.ByteArrayOutputStream ostr = new java.io.ByteArrayOutputStream();
    -    exception.printStackTrace(new java.io.PrintStream(ostr));
    -    out.print(ostr);
    -    out.println("
    "); -} - -Object workspaceContent = request.getAttribute("workspaceContent"); -if (workspaceContent != null) { - out.println(workspaceContent.toString()); -} - -Object errorMessage = request.getAttribute("errorMessage"); -if (errorMessage != null) { - out.println("

    There was an Error

    "); - out.println("
    ");
    -    out.println(errorMessage.toString());
    -    out.println("
    "); -} -%> -
    - -
    - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/uploadForm.jsp b/jonas_tests/examples/base/examples/emb-sample/resources/jsps/uploadForm.jsp deleted file mode 100644 index eb98a700d3..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/jsps/uploadForm.jsp +++ /dev/null @@ -1,85 +0,0 @@ - - -<%@ page errorPage="templatePage.jsp" %> -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> - - - -JOnAS Enterprise Media Beans (JSR 86) - Sample - - - -
    - - -

    JOnAS Enterprise Media Beans (JSR 86) - Sample

    - - - - - -
    - - -

    Upload a new Media

    -

    -Choose a media to import, the media can be either a file or an URL location.
    -You can had a description if want to.
    -The file extension must supported (see below) -

    -
    - - -
    - -
    -
    - ("file://" or "http://" only) -
    -
    - -
    -
    - -
    -
    - -
    -

    Supported formats

    -<% -Object workspaceContent = request.getAttribute("fromatSupported"); -if (workspaceContent != null) { - out.println(workspaceContent.toString()); -} -%> -
    - - -
    - -
    - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/samples/Java_CompatEE.gif b/jonas_tests/examples/base/examples/emb-sample/resources/samples/Java_CompatEE.gif deleted file mode 100644 index 10997dfc3cb998e1d78c13183ea1f7fc26752bd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2200 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 a>bm;Xu#UB?XHDx`+xphH&b3G)002ATq!>{E diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/samples/apache.svg b/jonas_tests/examples/base/examples/emb-sample/resources/samples/apache.svg deleted file mode 100644 index f12b00a67c..0000000000 --- a/jonas_tests/examples/base/examples/emb-sample/resources/samples/apache.svg +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/samples/frame.png b/jonas_tests/examples/base/examples/emb-sample/resources/samples/frame.png deleted file mode 100644 index af8a33d61e3fb90dc8ad7b6366d3cb4563af8844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8358 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 diff --git a/jonas_tests/examples/base/examples/emb-sample/resources/samples/jonas.mp4 b/jonas_tests/examples/base/examples/emb-sample/resources/samples/jonas.mp4 deleted file mode 100644 index b8e0d71d9f9eb23aa959394d20b51ca967e785bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936410 zcmeFZcT`l%@-Mz;m>~>9jv~SkC1+4Ek#kN0f|7I2s3=jA0TD?862w4|oJ1rmf+CgFM=Q>kFe+<{~#p= z1TM7n4h{52>noRBt4D~tJJkLBBfQ*D+SS-HED8j{+9C+QAA&*9|NZOww+4{^(pLKy z=ik-v2tsrY3vu>^PKPjG@|aBj8goq=zZd1r#O^Lzm;niIc6X5I}0%FIZ-#HXYb>KlgCG55$l-Di99TkpV=zNH%pp`mdF*M8t z)vzHnER^ikRh}}40CdLa1%s_r5G=y{`xk=1oZ-Tuf6yL?05Sq2og>h3i5?;T&a3wm zDdZ@+hq|HTB2=-lv4T+Ipk!C$K)9j)jSM_cu&f!>P+(B8#Ly7eU?|l9v;gu&S}C|g z!^n<9Tc8G}Y(*t(E=8XW@f4;`hUZFHJ66m(RV zHGVn@Ix26CPESE6LVZmR0|lLtf}e?k4le$~&q6_GrQm0yptDoZIVk9yP+uFDi-L|? zd`-`F6m%X6`g#gFFVxrMY@nd?QSkFq&`D5V;}@Wyqh4PdSBQcxOhFf+po>C%P0mIN zx)=q&I0apTf-XrxmxB759BB%=3;97*n|K1>hdk zA$~CEoM!1`-vZtZ`3;<(bP}`$@XnO|Qs4TQT z4nW6w4M4|vx7vOMCE5@3LY@FW*b*HV`2nQ`l<0Uk01<%NOCJF7NwyzsHDueO>kwpO z%%DW)b$_))WzGRs$HRm}9c+Y50bni|^gdLd8NlL79is~6TfjHycZCx51A6~+Xrpm~ z$^@Orez1cQ}yrFYOb^EfykIF;mgv!7eK#BU`4%BG? z0#HYFTL7T_KqJcn`Q$jVhZ5Bv^{G0*c%_b@zCit81Lb1?_zm?D23_mmQ?gE|UZ^kN zUStLUd>EINIx3Sq7u4tITwrcwc@Sr0eZXI6jFDpjjfW4=-UuZ+Pt=c}ppDK6?L&1( z$N33BWubM{UT_cc9e~;r?jg?y?!iD4V+4Ot+fxB(0qFXGxslfo50t(DKL8QR42@4XoGJsuzz48ppM!Foj2%*u1B(- zs4rm6k=G`~0{K4B3juqOdC~iYppM!f9Sij_svBAdpOXEg3p8o~Y9G|*&_+f8=-NQ- z#t9`lE~?uSvIwEC$G#PmlK_Y<)W&3=qk5wJus$$sP@=It1wei9 zV-;x3qc%dv1e=iUkLm<5LAC?xYa?ibj%1&Mz0p`D`&r5dhenoZ+DU27i$4f!cOEv{!9GmZbn~RCly*b*^Mts1M;@ zH0H_c1Jx4)K^g371d!bG|V*+ zO7w#H%X1^h)@ul&p@|?y1qfo%4S6`&`dBoAF+0hb4Cq!E`Son4vfX zi=RcX%zOyea~#12KSHpNx)JQ$3_`V25uwuOL8y+DAXM3aDPe@_=}`nH-h<$jV-Z|( zB7)2KhT!gWBDhDq2%fJL!HYE@_-P*m|FQs~5%fZ6q#O|1AZmnmpD{w0V202gsYeLR z$_QcoV}y`+6CoUvL+Dx8A@sbJ2>p>A2z~ZWgh(HS5IJ-a;*lzZn0*%JMhtfggL$AA zy~BSwU|?5x{{4VKrlD4&y#CTwgFX!U2fPT^KR93z2LAH_gRT!j;vtsE*XFhJ0D8cP z@OE=wJrAI+G~oK*4;a95417xPT0LK|N35JLFo;?#g8m2B|LHRZ-TdkqqvkJXj5BaH zh#*f3)Q2<)vvOL3SVpK&11=zXP(^`W7^1P6wyv}iX?0F3RLZ~Hzkfqh`_Cz36P)63 zvLqI4nj1oW%?Smb1cGW|x4|?q&Zu?4Qb2u&At8xs-^9#F3#I(jq6}~`0Z<9(9+d-Vh9g2(I_B4e>I@g1ZV-Y0k9XN`}^OXRcJvDDie)A z{AwMw$r>F8brdKM+P_ApUTvdv8VWkvzs3)H${&7o-&>PUPeF%0?GHZ#1s(RqKm6#t z*T#i?=MO*nOjx6{Qt+eu{~Dd0f}ewe&Pl<~ML~ys=#Tt$6m)pr|Ir7Y34i4CQt)q} zpz~4i!@l{4p9J+a`v_3b1);uXA0Z05Fa^H|1znVaed~(b|{NT<0a#n%Zr|N}}a|OUN0jmW7 zn_%IYh#iJLh&?RiKU5%sDgo}#g7Z!-gdyN^a0=-YKTdE9+WUA>S_QyBdN~<>fwIy6ZI&R5O37kfObF^;3A+D=wJgH zh!wmu=m=v|fjp`-KoOt=@B>f|fO+76mnr~CSbJ16P(nQ8tYH5PgmCc(Iqo16=1C3f zoccHb;tu}}%8gL!0k1AV13^UWpu7)g1LOig51b*$JPCZD0}jT=IYRv<+zZcA>LtJ{ zz(>GOz{F}B?kC&i6qF_a@Gla1S4&4ao z4t}LJhx@;*mQ2uB34px}2l0Vp27tfFbr=h01^}ILFeYvt0M;Sd9_Tz_{oup_FdjY` z0CS~AZ9EJ30CgA(kNOB?P+J0kj~aBs!*h%pVuc#^N7T3Y+n^ix7S{m!UWXFZI~ec@ z0P~>&d*Dm~HUM@20zl^r{Wt{xs-rAG0OsclG9jLD^#HI94&>ut?ctOGu=c4QKnZIO zw;cd-sC^Jb8T>*Ic4C0}Gupy-z7Jl(2_gs!7C~5nhwT-DaM&XV=QKPHt{@0cCcGyE zeR#nJyxIWJiDy4x9Iya@`SBb8Ua&il8iH_vUAQ1_IM0K;Zy@XPD$Ne+pdV`$^uhSt zU@xvlptS=He95s1a0$jAKoE9DpdE!W33z#6o}fJS55O4UE3`$RTn0P>GyxCTkowmu zZ3;@5BQ@wp{Tu*eQMZ6BB`7NZsISnqhQ`||0O-eI044a5%r6aP*GlYgK_7J|0Q5rF zD~$(W8`Kv8b%34F2D_m$nNLFrHYLXb>}QPNTRhy0hxsrRL-`u|5vYT1co-KCCBt_p z%b=uzG8q8lFnoma2H*+!3FP9zj*KVZURVQohymhbC?R$j-vJGs6FaoQ=0u1WJlxB8 z4N9;LeiCR3P=XCm(1$}=2GyHsEmIgRDPTYRl!z-s$UDC zdKHA=2v-rDY6ODw89;E^fOg2IpW+cbK@-8toI>zvuMqs(a|m^1B|;-FfY2#B0@(=tUN?lkKmnnj%}0pq9TB283qs6| zL5L3{5e8xg!jO`KFg)i#7#UHAQsmYQ$X{}6iVp_l2L-VI&vI+HaqapCxi!Kbw(|O$ z=;a*{1~)>C5^VotzKz+Nfv|c&e3P$Dl=(J#|4NDqxfcc-&AIv-f93tVcYvF>t8H;TCfG!4MA-JdosDs0_7SV*8iXUi;aQ~d(f8=me@UNqw^HA`wr=asv@Nb}?!!z)YKCn;ykxzp9n*IV5bU~=&0q7hd zFZjbR4D~gB5em8})YteoQqaXH_{Ayc5)}NB6m)oA{E-jOpFiWuQ1HVu{|{Y`f?uA3 z4*UHdeH1C^N)-Ic6m;0P|6Bfxkf8sc0-lS=|Bd*k`u~;B_8-n?^*%IY{CD7-<8mgfF zPl4Wp@~+*BmZ)6H_WzVdInTeVqjLX_PD%T3JpZZhKhY`WuGP`GuGP_!vQ4>`{;vLa zG*reK{qJN^(*D1ADf>~GYjW30w0{lgoc|lv#w7vYf5Tt$-?VN7Ne6to2d~Xr;4_^* ze1;N7Fda1rrt>(0#X2KcDuC+=1nYhj!QO8|unz?gD%JN0)wbIRRq7Tv!UHBYBUJbL z5S*wWg4+m45JqrGI0QGc3&D*ZNAT-+Ab8$P1b>eejs*u1nsrtP4WAf7>oJDV`t~4n z`>hbVLj?$d@Btw(h#-VR0|+7R2SQIAN9dUx5&C2cgg(^=AyWGxMA~A6n4E$T)0hzk z>KTNAP7Yys#DOr(Y9ov+=MhFWcxGeQ@?V|+XMcAy@6a%Jk`4L_mPF1D(I?n~S3sCI zlyjkOK_vg}=sVm%k{rpx%1l<>#*DN@g@NF*UENYuNm-GB;Jh93G=JwH)h#L{V>2Zi zX>Ci{Epl+7U9N!vVIhHjs*q;8`s!5<_Mg80Lr2 zPj5l%0YR>CTBky@B4SvOb2LKVY7KSfu#li=DB*xc=3@>B_YWesS9qDjf};Ia`d9e< zoufiP&KyF+p#^m2mG*0=wYHnTyBnFGT2Kz{ck}j#)7_to8GabEDxXXvhC!PC>*Omq zm4RL$Y^@GHh=OE-oFTiB>j;|F@PO**3UFfhH|LOLA#@!7<@|%@PjJDHrv7?i{zCXm zTkYSw|I_(rMefSIe?9*Il{)G_o`29E_fQ{M8|8m?{-Iv?f64g=pYcCB|E&DLi9~V! zfiokL4ncw11?-2W_*hyvQ@Nr9xX@e{wKmmiiTW442c@Ao@fsaHBd^hEDClH?&_?;` zDCp>bYy1opbVdp~69t`_f{va=*2YE8B5QKcRkub*&m3!X^vtnF=cb^eXO1;GdgfT; zN6#EFZt1tJOnwK3O|W}_mN+7;C+lWf^pJDFkPB?gN7L(1uSM$_RE^ z9=@|fezd&|q1tg0p-N|g@9Y?aY7*WJ-dBRx;0o}%9`d84PYCYtGXys#3*XuK5&Q2H!D|3EkQ?ds~9(q1khTSL9~x%;^Xc!qgxmsi{hO1ej_HdkA2 z?tWp;e@Lr|l)S_-K49Tx1L%;ql8N$?{+x}`YMBX-5k|E3mNH!>vp%p%gWQffB zuViSIe~WatNUz(r1m*6J(C5Y=at zzM2d19;_@6 zK3~f$y#w7;1>Ky(oK?~Hu;kaRfdR5B<3Zn67w1rS6(uS4K!Xrse*x*tAe$H ziDs0>E^8Yta~m5)3tulqD_=hit6gCM=GJaD7S>V9<~9ZzE{Yl<=GHpi7V>@?Kv#0H z*3q@J)`2?E^n%b*(@jTP(OzE1#6m}d+y)w2S^)wrtj!fH~R<}Px-j)Ap8n8q#}9SsYBxwU5`%4hBa{Bk-lAF@7*W>#|ATISk1>grnh>i@cQ zHO;mE)lxSJQdc)nxA3>{a?{mTv9r~PbkX(m0lNmdC@4j^*lPIM?=ugx^Y`<2jh6Rv zvkLRJvo-NE@i7l|lQYn;R&aB+vNnmZ@HYvwu(r`Rh54FW>qn4v@U<~AmkZN!@iEud z_S82~SJ&{R7+6O=QeE9n-OfPW{9jZ-G%~zH{hg&<1N|W$oC93lRpq7RW#pt*4j*X9 zkyiiR0$TsOi`E|k3bv|batXOzBpk_5Mzl>rNC*|o$k=ydy+M^V%z61 zd}36)EwW^ll39j}g!qKUcsmX9&t(VeJI9=OU?8SRl_PMW!1&FXJIA|Ebsz67>%1{l zBzDiw;~+lRvok?dZFJ(R@|U0A=sYk72g7Y1jz(Qss^HyIx6k>zOw@^ocYCT^Diw}9 zc2ukE*~N&MPF@ug$+~u;f#A4N;L-9q`Zkvd8oADr9rQIjB44{!RH&+0%O?#OgQQ?Pv)X$$gL%$EZI^TOF~DAiO8F ztJ5Rvo|Lm|G)>?I<9m-(g|_djtM=Ocg=(~E{db2aI`&)eSqs&YgqhfpVnynu$U%vD z7tOSd3tv}{r#{jzEtqu%p)%=^A773^rd@n%5oxv;xO zS?}dbN<=d%Wknq-9xsL5czxPSr6SpeJx*R>Y^rLt3fE?<_f&_q?zIX$9H$kz=g`j| zu4P^qY4Ex_4{pV)XN8xs#V7eMby?V)tC`&`GKXKzKg9Y_Fj#gwTlOaRA0$2cE0}8W zshQl8s2fbzLmn_&Cv%_qHP>-3MgN_s+nMM)L!#0m+G2Y8e8XY9OWGzxC;t&KCa*%Z z?A^JcG7f36{Rc_ucgH%4G$HU~albyX_1V5!7E=}ZiZt4UbY;!lSAZhWe3?psrR zh@ETPDvd?mw9R;%!gi#)c5aUdDLij;zEfM3a3jb53ZbhQ+r+{*ZG8KD0yw%J5mO7R z3-Q+Y^mv0yj-~3>nU3Mj(o^TyCm78`)6Obc_I)z5HuTQOSG7swTgq2>ZLNH(d-L3- z7~|JJCU_sm|8VY-(7))Y%xHfxV9CBRW-+zuYWd})2?chFSmyX3!p zG!(ORW5?KI8`V#^cTuz2^>M_GZ}uWS-u<#hPBrv}#T=YdfdV?Yov@sq1+@Yirp&IA-iEP+UemZ?t%E`qn%8FCllhdjiT^4m?>Z zzF&BHHeh0L!)b-#7l%Bb91QYQJDsL{xj>EO4TmY7ki-~HW$b3dQed;Ix>IT_Nd*7C zX(&nCR%+yIIiaLC{wIO=;a?^* zR2wkg^JNLubE(J$j^1;pMUIW0y6AwvlOjwjg&4rg2aMc9yd_qkOTc)$&V5tdlt+ep zuG9%dtJg#O*5hlE{mk0AD=Hjv62jFQd3CDPrIv2)TsTmu$?Dg*OM=O;xJUP3F2E$-xk%{^>SmgM;?1pixkmg=}X7HJM5K%^m%#>>zY2? z`?VDM`GQ0&EoXJ=5U&u^(dB}IeGgj@DTKI@mcj9d?U14b*Z%wU8nj;;PG6;0wa8jp zcH&I1xO^mIj;-TN$zapfaEA+O7y-A8NH?!wZQ2D|J#NkTV}*I=Bq|E1C)N9W`l80( z3$_e#4~v{B=I=}x(E8cHFMjY{#H~wwHje9aQmil}+GRur{SZZ!T^z_~z--(FJCz6{ z>rL~sTFwg}M;P2KxjM%2-dbi8@mI1R>%YC1Z8O-D#hl&ebS0wdvg*D^%yFvYoS&L) zKiR~k+|s%u;Otd;O2a)#{Qzcbij=U-Cg<2*LTp>Sa_PHxqet%RKHG#&$28?$nGzF! z*|qy>)8wRZUR{Y?_n}vIee8PT7n86JMn)H+8njOu>qUlY(<%)|7F80)jK&)$H4Y~! zm~S}XQ#iNJtmHJ``j8jTa%@9>O*IuZJrvLOZ|<=h>=C-R;|LeP|q~o5f@%nB<6BM zo+uH=tQ!kE(+2sB!{!1v^@6!$hVyBg-qz*q(mLWL+<_fzJmO!oU5mxlJjO+j?v^}$ z1Uu@O=OZ_+=~dHwGHP2P6&FY0@*HPg#E_^8=lD$#`QGKLX$RVgDp-Qr&a+QbNtjO& z9VSZKaN7@VQ5-G3`Xb-#ti`tt3CTfthvW>6$)#gYf3)1##6~*Zr6l)I;E?{hpr-2X zbLrUl7Z?`o5UgnZ7_pj0lKEm0?})jmln z#K#{k8tNG}i6q)pv0kXHQ@YI-zI0!nCLjK-hzk6)sgxuab6Xl`|M{^vX&slyov>{? zdn)pm=9OI1UlQA;>iciNi^|kkLacrl>{JZW1t(dO?`f8J?e&qU#Aj!SJfu-RdS_^# zY2ph~*X2>gI6r^Q(`Ts*X^;Cl`roc_btrljtY25EY5(xVwd4N0-H*P>p0B!J%a)nu zU2@&Q)^*s|goBCuLe{LwRCcy7Po%}maC^Q}k~?ywU-=TKxAmmPXeOVy~=K>95 z^Xu6IG%UKGDN)_I!CO(KT(aq;6&tUBv8m2| ze!qqt)wS8D;cJHVPFYuL@)HU(Ksjr8;b6ZupJlQ$IOg=tgQxyz|_=19K9Y zFUcxVJ!f@<#5xxDt~2&stoN}E$Emq#N*DY|A0H_DHH)BhSN<6RJ}MyLlf3V5n9+(KDBjf$OR#IVMSj! z4sQowgJKuS*Dxy{NYRiW>hLEwxLO6*=|(z~5cGt{v*#xCniRLpypIcT}yKhv`?%EF7DjV<2%;ZqtAcu+=UfJvOvQxVQLfRKj zUYBEvFCf||yJeUw&HY%=<#K7=L{nxfaW^fJzvWK;)r`0Y8|`^U!hAIY<`+2`jCzx< zSU=|ZqTey^b+YGoNr}~5wq|WSb8%v{a1^i@JbjY#xkFuAftv=hx z75$vKieI(6S?kNSN1rUmh79QuY=(UzD@m(Zo|~wFWkceAH2Qbl$q4Z?Xp;^&>UQL? z$>n7J(IEjdr)x!rQ`seD+4`L4XgQ5W2dM8htKf48Y6ymuf{n$~8;P-b9dk@mb2JMQ zpuhW^;p{O50a`WE=lxu2b#ncFQqzN%^&+eOpi>TtPh2iJYXytp%5`<49 zFKupeem=0^Xi*e9YmxHJVVlWe;D(u;Fd__LEZt+{=(~ zHuqCI=dQ9pc<`ZHForWHN59GSo6IR&anF>q)^QD7#|ZtK<*X$}1shM^&Q>eDb8?7h zFzE(;2vgo&winoFlazHx5=>~v3o3P;VT+t}1AV7!+sCZU?nV%fU!FLNjE9}jmDBn9 zs`Nw6T$8}(-;Nu5J6UP&P%HL}m$JnpwYbPQhgmu9K0e>r6oj7Eh>i=9=;x$n9m3A1 zIYXRD-hEEsIn5HA@L)2U(UHB&--^{t=GxC)h9g|Bntw#T94?C2)(WDh+VskrPJwVe zW0}N!INDcB;t_4+)Zr)Q+oo;nRZTNDil6OKH|=;5KP5T*EM8(SJ|a#b^X3zeci8!7 z2{dDMyYL-1vW~t@4Cg$Ywln9k=T2{fFN3YFXj%CLq0<>}(R6k>qn}-C9s2AgeU&t*#-Ed&wjLP-J9U-}d-hd_^ zU9n2%6vWm6dEt(Y-7H}ILCem?f3{YoY|wxD+``3NYx^yJQkN~8%yPc&i>RPYCe|-x zakg*Ft}ZXqM`T#Vu<}>&qv`%pCV{4#`B{>3mVyw*vaazTL9Cchjf)Qv%!HSh4-TV* zs2JP?jUlgd)?{)W8ud9$mU2Q6>j|E{woWMs*1C@K7f zwZPjWuP@XZwJSVW4p2H&>7a%%Z)qH!PA^O^H*h6dsJ2A}m#I$d6Ynk8IM|opQq}NW z_)^J38ssyLh1hHc&Ek5q$2 zq&{fLbRc`13sfVCH1=@{yIWfyd2tl}GVxB&o_add9-#H%*Q?gbBVz0}y%F)-jHXNb zS&ePDuX*YeMh-V<%IAx<&dbt1IsU@KP&A`)`v+Q6`+@lCynxRZch1g==p@?3n~Xg< zc+upy=65T7pJREK#w`i`Z)wKD9k;PQyWJ!|Rc`3E;h4()wz1X}SNc>@ggw^9Dbi*n zDNcv>QH|K3o%8*=q0F_So9Y#PUk`HJFt(mH zjCOulm|Ik{&WM29Bwk}z`goJ(;ms{~yeFQ$Au7f(?98B#5l*ohANC@;M31mLycBLP zZ8|Ks&Pwrw`z#@WdtFtZiF#4j*XpZoACsg>N6*ZhI`g=1SCvZW{)WdAOs_=|IyHn{ zh{T;pEkKC>EqS-!;{IcoigWYOP2s6JPpLYKk+3i~F>Lf1{Z%j7{OY{o zlg#O1hO(UxTIvKnOH6MZ`fzJ~g}ReOdpSZS*K81V$Nngm33=n(Z!Glu{vK92_rZ&) zPK&Ll^Nim{GoAl2p6jM=`Qr0~5{IU&`RPx_lC8&EhkqWS7n0E4R2{QBW6O;MNyo)T z(aMnE8wXz2+1^h0T`SmPj}Qe0_iUi%@;qB`E><9>@@e1iqdx3|YDJ=o+&0+Ue6`S4|@B3hyqp6aEtWel)v~ zX5`58P54VjqILrrLXYI+a2Oh2X`WXBg{26yyc&XBpiNXmHf!0a1;Nf>c0ZzZy0Of^ zX}xh9yH!?Y+rfi_avhs>%jjFEvYjLD>G%8g#UjW|=)GL5cc(q$ft`kLf0?Fn>ptH9 zIQoO8%K7Ub8WXJV{kYtU7=*ul`h3TG?Qq2GYsA9$?^oLQ!9Sk6vQPH$=oo_N-d7!- z&*3@{i*P;fIkj{Zs0l!2^|V${nTy&)~B!tkqGguZiY!%H*sg_v_9lT2wRW#;vhVbMR+=FwwAZoj6VG4svLIb!Y5 zDxCSon$G<8#`;35$%|St#heCPt4q2gwTw0N#k&1i6zR2h?nW5haDu1K(|-@2-`;0; zrb8ekPR%ZfmxnXLd|&puT&0SW^xCiAGWNvCY;c=_@Hq~d#2fpsDrFG9DH0WxHtzhjUb=T1PMpr~^~YPCG_UV? z%kl^rOpTs1j4U@O3sJZrMsSg1PLyJL9gW!C?qS}ysEk5gT_>-nNtkRQu-x)?D^ znSu2_ug|WSv_4Sd`zSk9orLOc@=ro@R9LKl{(rK8ne8#6gi9Z7K%(oEE z*~eba>r*}`5Ft@t@LF7eMo>yR6^EVeO<=RQ?P%IaHJZQW>^ zDhIKGw+i8P6Y9YhgVV&pUEU#s#x9o=AAI2lnKJ6Zr+H9IlG#5sm zGS3Bj3@uAJd)4oHzawflS9<(;x)F>7-8ZIgRwa*)uXh$&Uhu^R>6H&SBNK|6j7K|4 zcoZ(O$5=TJrDzHVikmTGqwEi}CS9LY+DMco(&nD}+3wf=Sg*d+$jl?@kkXx>mB^#Z z^)1=QuF58yNwkYaXMFQiQ9g2pRHyo^uD< zBNfK~Lc%HQ8KW;FCClFp)QwJI`f*?SYkUQa8?)YLDwG}YV{)Y}d5X!6zZNh%#Nk-X z5%Bf;6bDyMM1JmBc9H9QKgR61he_jZ-8ZPYLABYL?#KQn7DJ)v=IOQ;JjyUDj}R)`&vO?wh_*~7-vbZm?v_U*p zh?`7NV_t+8JAOHtK0Wd3+g@ao_jhi6*)G|b;-53rL|P;=vS4d$pMd&D?91KK)@ej| zALFZ~K-9AoxNhy6kYw=07slFQ>-6M?DR_=b^8(0YmllR6kc}GZ@`_yx>UMs%jhl@J3{3V z!+lmgNsYq^YS^pI8oJq?6 zHuyF_z(%)YQDLOv%-uSv+ERKU4c=D`n#mfRH*{wsTUoKiNRcW=OTc_mmAPyS)m!(2 z0Xp;E^Vg*}7-mP7b});wY=(*7U6-HBf*g%2eXDJ4Zcx!bJ}9Q|QgV(5e{GYhxmw%S3lb}}dE5+k%DHWd}Et8S5#HmqiO)aCggOO8hHchEr)sw^* z6^8g}!eGCJU5BBil+yT3jQ}AhnF}&1_^n4peWd)KsyKQ|m>$jRx#ieBYwPV*e^V;y9i#r`|Z_qH@ zrXH@?ra$UfnUq|UxmDYS=K!CSIMWbMLE@`Pg)P+S;{3F;-(EVNZIXNoq&GJR83W^u^&yTLK4RJr+TQYpJ6FN5_% zEv2Q`5{b`}`z|G^J{j=UmJcns=qr41&aCEY10!){_*&8h#tg*Ea_g+Z$t;z*+sBgP zgPEUs-h5m4EBGCD;2Zamncy#53~miJr)0dD@gWt_c^rOrT2Ob-iC+YFQ}O*8Qc;`Z zy32!4 zHYH8%{(llO*&EtmLb9VL}`#d46cEXvNYr}X$aM1p7Nu`J~ zVTa$B?%;1NR{!=JJfstthukq5|0b&?BD)>y&T!P(>2{E{&c0i|Slt-v9pbTe*6e zz1DZnyvB63+mFz+U}k)C>X>4LC5!ljrszh_ zM?|&QZs9zU(@9S4$7eP}g3x~=J6({Z=fx_BGr%HtPI(E03K^qX`-wT50L}^*UZKIW zt=To68`z_4yYzAHt|>QsQf}aN{X0c+{M_#tCr{Bih#XfJINFO-l~4EfEVy6V|71ai zLBP4KlPNjpmh6_#ee*v@tD_!VrH!ZJmrPEMl%-9be?HU6kyb~=Z+#wbf@)FonJnt z?KmrA%6G)cs0u%$P77}?nBx#mTT!Q;iUR3?Jg4AZ`8^j4Y<`*D78IR{f4QFdUclDS z^E-acT{|E^=vFs(8$~iwgwwioNng!sudUma z<{(@toGs>-Z$4f>!k+pndocDc#{25G>&=Yxgkj7~yyc>y@*69ji~D&imd`YN@;%i! zGnd9D>gHHK;mc1KvA4G+ufRz3mBpJISL7CsAMVoR9mw}nGm|@H7Thnq$?=!y6KatSrzZLc?6D>(OhFR83J zUm{UEGxXzky`A50-%sgW`tbaxwb7Du@_^#L`Az!2jvCf)Nv_C!zcr=8mTfp*;96pw z9A?nmBaP5F{#ec)%RAn*(fl-fyvwXNYx_(P zNKAr?kFg11dxl&QQMLuCU-APp_7-Xhaj8;%^@9!ak?W%}AI&uMMeq}h5d!vAEcb^x zxv2(ysR)+jV_G9tPk-6-2c?L+m&xb5?%qj@;OLnLdEptN|n#b)HX*})tf z=jAEwor~{Z)g5GWm#H4z|9e`s$x{DPxd*=IAtqs7V|0g9hTiGE#wGtlDG!HyZUzf! z=PACl&) zb5VWs?w9!&Vs|;mZq(3X(^)txl}f}DO3#xV4QV$1>?oO?I`)py(9DeH7vGe{=SL2g zNiu4$tIK{weXy9;6PNL@d84pCy=dWQiPlrjst1ohav?Y^t^36vnLp8Gbj_X+Q13Ry z1h6k`4lsX`eLxVi{IxQUw(;O@3-1Dr%7U-UrEFG_G{Lq8TtjuC&xMpu^4Pz~Nj}y7 zCiJ~t#mf6tfsEr^$Z>A$&~9vkSdNQ+WCTBJJaeOf*U@ru`f9rJN^2LXlc~uOue(J1 zl1^{r{?3}Jp7HVGHzr~8nxmdi-wjmM8f6$=!jA7~*|61gn{Ch0&}-SUmu05q?+4q5 zwirx}4cd-aSL~*dZjj8|%{N;(x#`JyF2+0uU-~`Ml9^Wghk3?%V-)TOy8KS~lz#s6 z<}rouJ$o26ttDg1_wO~8ytdc(X?^hGY!$6}*n4fCJZp6W6=K3OPP-^Xq9IkhzS6Cj z1O8QK0er&YSXYoJmWpWBO0^f~x{K=vrLr!S(By?^CgJ*Ky{TXDussglB+8W?!DQZL zd|yuRi*?k!1srm51am=cPZQNW+`ChQXXjfat}goJS2>?seEv<-TIR6dIhkJ*J0Cr~ zXTQVNYb)`^v0?XpPqy>MluabLYR=|;JYH%p{BBUbO|jkizL3Vkto+2$1pb=Q^hErt ze%&DT>8ka!*IM~iTPKnDp_|wSF107ME_&yv=wh5s#mixHU-Qtkj-Rw*#`dPtP<3!F zSzwmbCZ=2A0}Q=7tEOCLVwb?AZ2?!BlZtSLzR0}h`R{^4zEqjFKl*07nlHo?dS;oW zc>VMx^Vl-i(f%4reRS^b@P>sD$G5HBRvR^i4c?UZGTRzx$yRYQz{}LyGb$Wq4+TbP zh+}8^y+0kI{YAsGt4*u2%+==vwIWl!ch)9?O~a-)0wX^wt$r5MxR}vjf8=rGIZa=3 zf0|R6*VeWyy)Bs#;2kk<{2~#TiSAofsK5sSzi$KS^%0`CU6SJfbns?DWf0;oo6>~1}|>J9o;Z4*G3AY-@Bf%TY24nd7-$LGKZh>37d2-mlm>> z*{H3P?Nned`L&_BNNS8XF!Dpx4}YnXmlsUVO6bhS_{yrCr`mGyh(f*W?A48q(|fkQ z@7-8fQ_HhUW0$^<`OV+0u3J^7E$=2OR@G6B)5Y*!&a{0c#tlmkY-UO_Z@~z{xa=&X}3?Fj&pr7SOXTh=VI)x z>lk#TGe!i}>9CR3#c!HE)JCxM%6ixb^DZMcf{$w(%61*HaG+1{IO`s8>@?5fNulBS zsp@rQHF9+Cdp6ybe-o_eKBj;8$z)$um#ngGbLpUWMfU8mTiN{$j@Y){}YkhjXz(`S9N)#b^qgoA=CnZs!vm?4R*_~p-q67dm*fuVb3 zM3^3Ho7)TBe{n*-*5}~c-qQ4mSa#OpcgiFCPES8gl>B0x`78I8R8~gpn1gY@ zwB5(w#cy{NoVwCp5*=JHeG0Vi;QZ?-5zQ7%Qsca-V78UGqzHdm52!# zXKg-btDdf$pX|2fBYlcPgS?6UtyoQmc)Cyjd-Tcnq* zUYWkiJ}_2DnR-C%%Tg-mD_z-1FQfgUwcAHeGCWFiRikcgkyCHi zy7nBKb;o3|w|T-OqHa);p1EtMW+17o3j(gl4axI80ZPd#O z+pCjXCAN;MD`#iH%dn&Uvs^O*!@e=DemAe?y}qHFdGPqMrGp^W$v9HL_?5Q3k&)hd zef=~lquQa-b##()H_Fpoa%9W;<=VH)F>Qf`y<1Z}>cC4RnP51k*{@#AS-$rFsS;Nl#lIJg{r1U(j9`i4*dHF70 zGXDL?LuYy26khHy+?7Kdt3RmyS=))DSWoYq#@T$*qWk)#ZIPuv4{Gjp^18i=V`1Ux zY1$X8iCra(+v&=O*iF)QX=zk+X^-)&8yT7CPbMbgCFN$$?MOcFilsVizWm^ZYHrTL z`h6pef=+%9ug821_GLDhVc-ziTjF?p+qf=!gdJ;UZpi}CgvylE{Ft9bh6~J-_usT;P@@ax%8!qnZVxiXL$Yh9J_qK-sdW@+ukYkLGJv| zicR4cUJvZe)OTXtmhk>p!-?IQRIgn&f8xn-e17EuzxV~7_$c|!t&F3ZZ%f;{C6;gN zv)DJDJNvwkrl`&1xoBrVU-`#NCYJkg_)+?)z`A>(oA1o_@X&W}dT5%9vsRxZKEJt# z7juv4z|I5l&56MWC4ItrQ;X#Z0?X**y=#^fCO5`+J4bq#aXJ-C9;Y`176DnH>h`Q) zKbA5b)SUHf@%HT=otYf!ZF`PHb-n-oxOrWPmy!bi~x}G|k#i_jhhGiWIrTd(j`5j~M|X_T-f>~~oc@b_*F^GC zBREBL2=Uj}+ngYg)Wk6^%wj29mS4w<+Nqo?`ffaS-?B~0Eb9{c)%Bhe&EK{(?(%zmJG%32nTMh^wIf$rp{H)+ zqk&Uf7+>ZXMaubZ$(DY${IDti=47J`yWK6@VLtO`T6d?I?iyo@4hU>^R#^UF>uM-$ zXQY1ka6ShAa>Mli(H)JUlX6}%zACX#^sXsCWl>CeG*K5NS?N8*iW_?(t*no^gbiBY zqIpB3CWb^QZ=cS3%1}B`-b*k~VYf+OCZTWGrt|XCL{imsZ@X%|n=59$n0^VTAGvSc zq_D)Z0UzZ)rTd0*!M5%85e$d2fm3neTy+_=ngy}{@=!`5M9b%~{O>nH4sFueg; zi0C#w8a+PSTdgx;F-&Sx(PBm^xnGY-K6PCB5XPKj;n;Icx-&zlf7HAtPS$|t^8B}` z*eBcD8cto3`{6w2q+vi;NL$wNqT;HQ^KI8gIZux--JdniC@!AYTx#ulbU^>k;*R7` zO# za)W7kY#ZM{X+0$_R&7#iUTPgNqGkC0V|jj? zAtx27D}|coVSV>REOT1zi2;m-PI!(cJb3BH6It@pg~U?QSV^=8pBi4vWrk;yv4||| zN%gNCVpT==>o0Vw)?}JI&p%z+Q{jq*sl?$-9Hx^|z??Yn)i)>*9f?$j9rx1jq&I}HyOUN_YLVtDp~QCV&Gm%>rA zxH}8gi}Ia)(k67}?ri2J-?Def=3$T75E+%^6b0$k`c>ESK3>OsE%pB1())Uboy}&U zCcg~s8g1KI^roq7+iVas-@>pH(u_;#efB$?D98&FGLjb6R?Ae=e78Yt>|+wAe|jcu zQg_p{Z#KqK75cn7(cm9VKTN+3^dW1+*nV;Y0{q5(Mqu6d!kHhUpqK}eA(`q`PQi*)-jYwe_k{1 zhIc8m|1ElcmjRV2ya3}dkCDVV%NNM}h4mO5X_l6q&jfo=+@^y2Q>!A z<-`PYZ82#wkX!HG&SS(Ho4i+hfrl=($}%zpev_cYbmDl}&2`Ts6Uu8^x8;naQbnG1 zS303+&EsF=`%sf-&rWQE_3q7&p9hHscNgqjNKUzZWh9sLaM+dC{U3(Y`QEf{v)r9o zT34xh;3r%B&M$6NpD&B;q~54jKF)qr+DTf!|3`OS4 zl8kd1d=Rs{|59%E=6Nx!8f!%~%a)K^$CfXZPKcTms*6n=;MP?}+bD+dBhG zHNqm~KmNW)b?C(bMI4bkoU_H6m1tVSFTByIC{UxdwN(7k({NkfH|=u_0v!Wa81*K? zHNutSf9v0!Qy2RDh+5}X`j3Mm2ZtwWdZ*o{7aNPagss@PIP(aaVP(PF{B`;I`B|T{ zGWNE_-DR2MWmW5sXT?zudbkzceDCy~L6htGH=>rSU{2 z(?FP?`4NZ3r)l0_%;yd}drM60jRc$Zju{%v9r*?t{iX{d8%y{$UwMCkWPA8A>7nrF zZG4H+I~+56tv7IDp7P7^^C;N3+!)Th&1fmLFPBE~dz*xIbbQkycdbR~*KN7x1lM9e zrle!>6>;zAE#Beo6rK0q9#>z$r8R>fm}X`wx+6POeyKe8`XKPBf9KI=sD4;?`p|m+ zAO0;Lnjc?#a8PLdpPm&amZL3x}^}dAUqloPq*_i5wUp6({zE1f!8vmdFH^7inX8OwihUWhr75}f=`-htU z|6_l-`u~e~7~u_Jn?hPH^e6S?%AC6b&B81MG82$A~ zAn3`)u8(C#-BSiXU04$qK?WBi8OSkF#OkORA{R_0{%)AU@f^p z9)U=uU^uN(8EAxs2_KGy!69Jju5cKukI@sX?oSNYxCzX5<}r(Lv~!zZ%+mcH#^y{M?gQ`5E1~bHUlyhz*(|9a>Y;VY2gDTt)`&S1Jr=k zI!jP3e$Hl^nTLUcKEs|fpP-r}CRu6j#`0%vQ2a-n-q3p`voy%4ms#T*0Y zo-pJSC}Po+CfVWT7hNkcrm}cXc}dKU z&MfNUo5Dl?oqYeg6ZMCRAz+(=P_`Vx}0Yg*U`15{n}V_CgO5vRog6Cu?FhAvL~q3!VFhpiZ8>_=Ul2@ z?O>^{J`O`&@Hxc$M>Jrq=b%S{U`+K-c(S$D)38)9VDt_7_&jBmGu6-}Hhv}nkE3Vu zZReQbjEVRJcbs`q6k9}xZDmh}DjeL~tPXDsb8-0% zH(pBBY61RHsVp69oEB!{{_ClDuDx^r>}9?Jt14tmR6jhgP{WQWz_$~Qn)>cwEFjOA zueGV4sxo0gKd=Ahh(_34{~;hJdtXyx&9w5nMpo6&7`2u8<+}{geX;UQ8s7q+<%wG6 zPWbz`_aqXx?~(iAuT-SiSBA#?aBC<#+|GDlzn7$8+k<4#dF+ZCKrN!1Xf@F z7svef%O7ED7YhURc&YWW%;-`$KE&lof0e2mpQ}5dy)z+}N!sg*LBb{p;YdSw;kzV# zc@#IuFUaP*l_RJyBB4GSprw!i+lYp-v0^JKvYNQ)^f?RuRUkdIgmFMFK6e1rkRUwH;!ALSjXqw!pR`W$V$+Yi%q$vHtirc<{z znk*NLauVH*v+hvbsLV45FOTUfY&G`V5qT=UrMGjN2(yh`sV#hbuJKWB11qt#cKg{_ zsm!7&?wd8cJi$<(0~dZ+D8}McGUgGv_OG<_q!K#u9)GC+fBsqHi5YuEYVKcf`8rc6 z(p>OB%oUr}CPY$O%i`B&5*TCgFIIkFf{gUVP3*=NBJpa=%`181nIh;wK;$x-f7U)Cx;e7KFtpOM)A%KrUTQEw2khz<~1hG!+;Wsg}v-tHXph zD6}X$&ylo#SuIR*8W7Q}JQ+uxYd_n%#5;=hz*ESUB6$Hf2C1#yL$n zC25gKLkA$?)#1uWW>gdLcn3=!yx*jmd@tjd-3)WXqVT#UIwEK}ZK5~1NG)$o#_#V!Lp0&SAlbG5zbpx+Ff zu<4N#T~KE>yLw$7R@y7`md5~NDR`FNfxprTK{sP)SW%>BPYSI;-5pUY$U)B@l+@`iX*PLBrZsCBj87(N8g85$6Mz|Rk~@w7EB%eF~Qq5k>hg)nnWxQf_doV(wW?lryPzEyuhG8q839T5nq}Z-4hpb>8%!Na0abL zML`Wm)e1NMm2QnYK|h1%)519I7+3bZLlGvZ1-7eb^Mt43Lm=c$z*>pOMhw^~^jc35pdemTDMow5G}CGBlxTZH|H@ zrke|I8?k*Q5Sh8;P7#M~R04mZ2iPij@ht|$+$daRF)1$!TP_?^uku^B=fu0Xij6{{ z_ZG}r=jSKXn$Tv;O6r>AHC!I_=3)tEIGlp=&Q&EBb<9VZ+`@8|kQZ7H)jFq_2O2fi zn1n;CsOHQm>TH8Z0okF79jWA@zStgsUZmwFc-xTBz7wyI1n_R2%s`|muE<#=4&sMX zOzbCQMm4!;LcXndSl8KZTAbCnF^eTPb}D=-`kp#kf#2DX59v)pnSNU)0=oh&XaWoj z4S~}@9`>m^y#Z|B%MyhKIF@{P6R4Z2Ro}%@iB3;xi6yR-EO+%UYwY$j9k!63$vbn@ zP^|oi^U-rt(6sja%9!5T@in{1a}e|;&!LgLNUNqQ51g~3UP5mudk+`1A%K=&qTzgz z#M(H74d_s!y8!*fF;{m6rkkF5@a!FlP!-%6=dtN8q%GyZ9IW zvonY`m7jCg(!R%yvvsiX@8*xpO45ia4IamZzC~({^zBf+ z^8If&dw=>a{t8GGahl-Pr^Bts{>>K2b)(=OIB~7DbegfYGq4l-vWxHJT?-K7p=< z1EV#Hk3gJzN2gK@h4~3>Es7!L*Emb$)5}1Ta8`v;CM09F79JH%O_xWlf+@~AlLuBd zRik`Q0FLfq;A>#IxuiJCAqZN1E^y{CGf<`Q6TI=q#$sp^1d2FmqX$eY3XW-Gd!k$C z=MSTc($Y!Cr~rXjF=n08`%zr?O^ah+4@tBV@ov4Q^qde)u~RTf9acE;=1KxGUmA7r{%N$;2N*k5F%EqKI@ z!pSzmMjBi}VaqkA2@hmfiv@AM$Y*R$W<>sV#~fKRm$P)}jf;Uie5mYoq|%DSn#BtB zB1dYkfLO%0h{ZCeQB^YNpFezTf<%S0;!lup=^O=^XBrP(s8>`X&d5_Cr6rw#WOT-k z^r?tYB4*7x#>jE47OCz;eiSV)nz&%<{ELF6!y=4!IwQNsk44hT5Ozh9jY~eKiKOmFACr3A}mCwhqD#JP~($TD==uy zFJH#I`V#2(P>qVX@{a`MgcWRZ%`VZ^u#Fo#BFPEy{0Zgd+l$Af9SRV({?yAy$lY1cS%&V0qHMDd%*bSas*(W8A{8loOESDZx1@Ale;jn zbS?;5lRQr-i{>ro5ZGAJ%mi->z*#^G%mXd3w?u&f2u!nB1HWf%zzp2mLLS#DmCmzY zQh{75F+?qcx-&E^M!>FYm`_VI2Cy8nK&QGMCdI%A@VRZa6fj&NR2rPgmC z#c1}x+T%wX=7J0E%|jmyUEL%yxvZl~G%Sq>x)|Y7qr$U#ZA4*nyo}agvqKS0peiv9 zv8J$9V4i`SLMA*rEr5ry1fS96luVw2dWnUD_`u}`ezZa+LV`1M>G0?zI}$aS>cJAl zk#^c-&i00fD*=2!$-Ko9RSjH2N4@}fu(QJ>ah0giH-B#of_bQm1QmB4UI;H`==BKj zx#dW~?ml^*iCr0BFX~-;2&)s9MRT-=Ra&Gyn$ytz499%a70s}p37XdFpYpslii6G1 z#2D{XHV^{%Z`6<9t1l4+83X{;0hFmaK2s0|unj0ojlmbfqaMrt|V$5cp#QNg`lsN?>@knqo7^Z4-lbI z|9Ad(H2b&Uci!ac0SO{mVDLgJ*XKEKCeV`!u(m#Bn^Z%AzAbs|0CZ+}Q-lqjoM07$ zUnK%D7w?xu_fRputTsU!1dr{y2rBStd71*+y7DacWUL9ljcJocVsx}H;74s1>6b>P z1PshD;lRdqfWSOeAye&JaQb5#0V-HAMCPLbW3xdQxE3m&yn(?1Lxf8NG&4g*LxITI zB&xm@Xq`B=ABO@RluA$#4pgE5Cd@5^;+f1auMi646>wC1&%$yF!y*50Xw7oNe39)T z3CVCknBN5jqioJ&=T&Q`vjqjSM=JKMh7`4uxawp`&=X8Wxs!x|eHy$0EY3ia+WH8Q z0_)z;^cj?W{MfbqbEB-~s5VxN$OB~jR5ajR7?Zc`i(PZ-Ol)}o`cMsuWWZDhd6S{Y zvl4yVY|`NmGu7j`xRz>haSNv>(ox%9Al2YW#^r&xD5Wdc1bzwiZW+t1Q*D0iu=*s$ zD>#aq8LBh*3u8N$ZFpy|{qgi~qf5bbbuL2Q##Fv{6`My|Zg}MjyM*?$re(h}8r^0a zob)q2EF5m^SQ(0mr#rRhVQ}%|90vRqjX@(|1fD6wp^?nYRm^hK>+zKZk6&r~0~DSw z1h>E)@CiZ#(fyOIs7c*Dez4`5sYE69xS_&{@v`&q37@+z0=w!;Lir|~jD^#d_Q>}Q z|5QwiRc0O~@1c?pb|7@61@=>ViV8NHNGAnLA&)NXxqc*lPiBP0K`_u9>J&1O2-+Vh zg;_KKxFVC-JfZQ5DiST|Qu8WZ_>Q>GgpD;mI*;ZmEVR=X(sY`Wd57}f@liBZ71t8q zB%gv1jF>xj{;}tpjVzCs>a7P5X&wn?&<}ylg%gpul2k0D)+}fuY{5qqooWtiwSaz( zkE(&?1sioJX5%f-pujI@o40!BE+EO-iJ$Wv&vTpzGk-hs!gC6T@wea{am#<_^Zg+pUX=}gZ-OXNVM~B<%yZ!Gc*R*$@jao@@_%Eov!6>3-*bU$#B5|2hRs)BlI` zXJyfG{NF0bSxuyHVo$3{z%OfvsspU^KW0BLTevnk#+rf<2(FFG9|F(1vrQ?ZwKjx;4k^F=C$%Xp@ivG5C4`?~mYX^2t9QDG}CmlBbK zSHaV?p|jEV$!){-EQ$(tUnDAqTTWntDN3}iKavS0!WmPK5ip>Dw#J~-P{hJfmC&m9 z&G9h_WYyU_xy|*x2fjXn*1Xjg??zGHUF^gpwO7ZDvB1=4-$aYB6^^HsD#1)1j9X$Y zk8}-In(_%IKm@@1z)IArm=c%)yb_tOx?IQxE9UW|!jWK1C(*+#=Au^JtJny}z3I`d z3gDY86jNZ}hliImcj+`V0QTtv(=&ly)sYC2mO^CI$b7Rp)Y$aSTTDvAGyhpetcvF0 zxHgSS{{8@LElkCl2795}aQ6P`pTSLIoQi$(n(@=!BMFA~(AUm^>+a1Q zLnTCrdD@&xU8oWUZffL+qI+;6jXASzlS(5cnq+G_$#VyFy;xunQ(f0nP19h=2U}K@ z+nwjuB;3+@RZ{z1#74`f@6U*B_kH?wt}fdrA56p#v&0+?2bfF$>swkd zr^dju^ZBgNI>;Cp(3PaUN_?=mAtDtx=@_^qXl_-2bar2@U}kutdT)$PYw9)SuD?x`vSzu6)`{*IdDhbJPT%y7t#rG|!81 zx(U7z^$g5~mH9L?FFv0wja!=KKtZ-40hfu_JARxYOLPRkUTTsr=`HCnmb1@=-jkJ< zZ>%|uobza=#_i}i)UBs>>qb1&{>>iwtw#61N&H;k4{!GSBp}u*>*varcN9rq7iLb6 z90XBaUVZ+`A{dp=?#~L(RqJgl;#Q*&nt2W>@Y~jSlIs%>+E7pKsra9fU=1t@|`reYZ@L+G(Ca7fVp&oQQO9%N2~t zQGV!ZUS2nt;W`kI<|fkEatNQ&lgXG{S*b$%QC|(P+hDNbRw2su>QqbM0!z>rmgd9S zBG)%)OaFdBF-esg4T*{ju*~b>*O1=66?2Ub8&2f5*UV*ZA9={t_QH5Sieyx3B4^LL zHg^n+d2ofjobiPp9)cXYBYEeg+ZIG>8av)R8#gzwU@y3%CK zT>$v?q-OlPZn@Ml#ms5KD9F~bc_L67A0v&6sAiijlGKJGyF#L-RJCiSTQgyA$CJ8y zRznx-jt*oZWng_9jhuh&xZs@T+Bce0HI+N}^*KGo-5oU|dT06&n!rg#mdU?1BTmU< z*HEdGtJpRo^lL}(3S|}hocLd)^DJ*#;PfAFkBv@)l?LDTt>MN4u<%Bw^yn)E28ux* zv^-;XcVo0N3;0rb(hm4rNe77n{bMX+5vHe2N_0A7=>n3C0fQ;L(MCm+QCDJ(tD=99 zs8fjx0K-s#1Kh@Nj&g!$TOLLOc!=Q69Asygaj8xEUr&3C6gP$55r|=+y{&5ZFxgs| zr9Cl+gQ>)3234g2+k`V@h%rhR}uP499BZR6w zjmCZ_O@f6N78@%O%Z$pvQWtU^;GiT5O29T6bT{UxdTOb(!sHx^Y_w*4SDUId9hLW( zI-^)=s3x#3uZ2x8C1sTT4!7j_zj|Y&R>jx95ml#BkaTsyrGvZUfyHTcwl@MEEKBM zETlG)3v{4b1&FPne&1mdAc~0g>HEz!nQx|2xROO|-DUED(#5y&FIF+4(IyT2FtAEc z)HQ?1Y-0i2&ZTG27&%qX(n5)-<1erV4K$!`U=-MWqmD&+bkP(cFD-vwQgcbzi*4o84z3{T*|Tuia$Sm=}z` zl9ESfY#-Tm_Jmp>TE#&jt)t(;wfcUF>rUCYr;)-6u@a%!aS7_A7Al)6d{8$Q>H0lQ ze{`KU5Ptn%4}Lnm{&vBKvoqWujSnB4)Px|8kRonX3By&y(BC*X^O(dGXK0K^o>=qU z;hYTD_5^R#4K(z)Q{MSd^EJw9h!N~ZkGBjC20^DaezTHX2tq{2p}bCHg=+;~f6+Rc zFH}fD^R@A&>MKkzv5i5S#xV;us26^8l#EU+IEgdrrQO;lJseUbIwaz95Vzm!j#n%! z%DWp2oYuy*r|Rm|8T5Ocm|c(e89N?lyz*{UxZ=hkb@IyeJ^WDdQ2kKr;ZI6O9y=CV zed?;+$bT9+kMwbCiMVcq&-k+CZcNhSBL-|>-1;?tHanuQv=VQcG`jq{6`d+%^YVFB z#%E*kFo9O7v`yi+uV=itd#4@~7dhsq1MAxw$Os{H4Tgq(H!dFPy&F?C_jS&ais5K& zq_%H3(64zU>-P8H^~AD~i_dP4kUJt3g*XDV-MyqbWUGw30@QMa;h-pDT8Y-WsJuxE zb~fJBPV8pw{#Y?J$4y8v>RpJvy+-5nw_J|YQ0=jAmyhx*(xjArT|8lp8&H|ONkNqf zAZ-ap%lBpOmqd^J)(+q&I>McPG`bW9|7gkrg5N`_Cxn7m!p(RMP)cs?5T@F1-;(&{ z-gg6~majKCqM8l@Pn$QBrKO25SdqDqE7C7ovFGfhD9$9l87Ybb@gjY@+}1wEue)26 z9p)~6BZ4EBn{X9~q?bkltY6hMWXmW)OhCwb%{(wg!-?>1Yk-ioCi2@YcjHFIdlM;7 zE*_Uh&{50`BckQ0e|>`A6WqecF4}c5hq{DbragrgR27Cj94kSg|~%nAI^*^lY<*L zEyfZ-E1>rfG#5UkKMx+eTrA}SwMP|2!7aT+;Uhi@p-;*_cQHA~xzfL#Pw=ZIMB*ba z|CEJ~d3?bbCOdnW*9P6%#C@7K;OI6|{hDfD>qiR~ROZ?bdUwZ18a;`u4txK4)S4Um z8gV${voJjxN+W)Hou@ifdmz>0;ew~csk6n3n(+PYStznsZpo6atRsqR8FFBy`jwEq z6RK-kD*fv~cnD{HSvm9V-t@%4J%)(f6iBb~v1Mfr=hu$A3a{?Gzoh&4D=nZZ&i{U{J_x(39|-amQ`oz>Do}(>iRS;PclptSLNa zVewFt95-;Gf6jOS@TUO4%l}RPzm|C|1S3xONF z=Xv*e`M>EO_&RWd2ag3;UjA?5VU3qO{~Uq>;Cxp=iFZE9KM9vCyx0_u(5s z(|_>wuUg=*;I1J5?|1_vO9A-~L$$QBYc-1cQA6^?Coz zquZYZ%7;LPN2fmtAn6OpVE$DEUHDgS^bZdHv?ox94iL2A-G{4z`tLvn`>$F&{PWu4 zz4M<0%4#5k`&SVL_7?0WE18ilQ_VgM1|If0;x0;dkq+K_#5&M=)7<^C7eQh^np>_5 zT7{fD8v0=aN#*PI+xb<5w2XMQu=MEfn>IAwF0dXlt(Xupi-6%WtQLBZ3E1 zS$W=i{)qEJds)u(rcs0AKEXY+>slzv*JV@$)%~5G1o?6tC$sUirRonsd^J)@isaP7HA{kd5EW;mpcH{k_ZSEI5vfZ;(b@}eT=K{BW&$diTV4=8-h~B zV%y?Wjxg6Lb4dp@?}(~r=x;&Wnr}2rLrfJ|ya);{DdyVuPg)v@mEybO_ap7EvG5B2Hlv`@K%j4AH&+PUj5Q=IEFJ$68kMGnIb`iE!8 zD{NHWB9#;WVu$|1)elA#U%8{bk$3LCJMZe&{c3n}#pCsZjrYiM9vP=UQ(t0_Rvf;o z);-DRM7ZHe3R?*sKaM{xL%d>j-`_;oaPzPE4L;7-{npXDGLQH`{x z#ZY>1QACOv(3L2#-P)6}fsGhuZB9KWpECB?=c-Jd%tGh><<#Z)Qm3gv+7`Gi7S0d5 zHlr@gMhx*&EifLZ;zrL)Kq*>oUWh6Q*TD#GXbv)ii56*-1xm=gz#1J`UU2E1$oJIiA-`c!In0;M+ZSu{VLYywmTF-aL^P zU;k=Kr6JNaBN_g9+K<$=N^*KIVpb`koFizw?Ma&7>Jp_=nKGksa(T<{vIBc(KY-72 zHqCs=4t)MpZCBJI{B6<3u<%v=W62o|(#xRUF81Nn8^$!!^lJM?y+(b}Zn8d8Md8P; zRL`nCE90uQx);*GW~9}FauPW!Cm&zzPz}=q-!Vsv7upbLY8OTLv((|+)P|hT;3>C5 zf5kU$I^Qnjss_H>Iv^r;=a3HURSG%NS(|WH1Xc5^wEO(zTkYC{#iObsUOgIV`ImMb^QqlD^H)=iXTi2IF!5y0l*+ z+w7E18rBsv%#NNcD772n#v@if>oz59&N@<_el-MLamgDY=a5(5xXoJ&(SI&gI(GBp zZG9mD8hT9;WYh9pfv=ihD*0nCP8*-V2x)e5HyKqIa}A%r)~?bDNZ%hR9NQ_b>}Hj} z-?`RG1#KApYe`rn6~bN6df8Osdc>)ie0$p?^&rJ>LJ{b#{samdv7a^h*zQ($fsu~F z$w;C(qrqou3{&-x7inwFfRMl&K4lGA%ffGWLZ?~s*=u$gchv4@_g4uYP~YMy2@~RN z2ox5(nY<}KZ>uSqPjtgp{H$N? zhHvyArSYr{&HM* zTX+5bCn6Jk_ujbGHRo_Q?tT<@Nk-YD-&jlqqTOiC8f~!MVsgx8W<}7?c?%;@>gIv7 z+peje?swQ5nbIWPE+o{e!PU@<9UK+B(Jgrq*497fxmjUazNu7-pD-w-fVfO5u#u8C zDT2S87;=`y9HTFPh}rRAb;#(Xr)t30_k$%8U$(+ZaCxw8`Yyq1$H0fx2E@f~CTtfI z;R8nl$XmaE^-kF~xze9hCRC4Txanm)d0^ev$$8f;XJCXys4qOS7o2Zx66Jy zTUMrzLw(KM>%tZH;xF84DKXmab?x`T)4K{9&k(iY zGPeTMsZVKTW-luPy?tNgEbbetSidTT3Qr<-h5aJD_J4L&^mx1VH$#WZ-8OdVq!o-n z)uqXmmD{t*aaVddNyjpk4uG#mEk?cEaAoX5((x_t->5+^mq5&48u<4(`hRUr~-Q*mLiqcCYZ+yvgv-m#*f(<8)s; zzw@iGOH&!NbPY!BDlypfY4baH&m4D?L4wv)YTgufUUc30{pgcj@3+&{O&XI3=Qhsm zI(en!(C%6>!LXu{6^XYA%Z~3PpCukQUDHInvQA>a=I0#cGGGPk)sN3}$ z*WG6J*(tsj4Yb&HV*K{T9eg^zqCj`c38vn#yGAnM!0)KM@Yu51rN3%}wQRTM%VXUh zd+Kx41o!{SVx2zNk-oYiTUSb^-U)HPd+%u}=RHe7a6;12lI2q^X&rWMw3YYwPjYv^ zvlFTL)>>XMGZgIBU?-o}n?rw^_+7QO@}bwcN?fAEd&c}&^>69X#Hor7&A8wPapWQG zu9zPU4{wjMY|piHs;m#VXf3rZ-9goI5A*c?%}aCR{FA0XhIW>EPJSj0+fJhO8dqNo z+>$-VO{R{X(;~pSZ0kG?CPiVs0^3iQ-F6K8*!j_P^>v?jST1PVy>*SQ?|ylUWzvw41FCJIuDy0sSFeEGQT6@t zJNXAyMbfJT`>lfa2poLz4*%ugxH`XKmdn`t9cR|L+8y4evn9OajnL|?w70WiLID>q zWztXW|AG;6%Bc7fZ#2_7KAD>N;H$xKT;g+6=WkcrC8AAFBzk3un{L1`w;kQV6h5%@ z@?K(X!TU9m8ae=c$n1w;R+2)22!SvkxDly$<%~1=PM%WD+=#@}dSuu9BcW ztrJtG6Zcy^HW{gZP|KB_eSh&7xyLBODCSDj&NFIDZM)syQBtGJ3SElK`_=EOZ$;MZ z{;(i({gC>;{8Deq?jG5O@~q$nQF@0_v)XiF(Vi)5((oBay@rRsgXVQ>6dS)^t1}mZ z=V8qykiDeGCamqPSt3#RRy+3W#%(jCi6fsRzLGA3V?z#n+k4nNqTl~bzyFJN|NZG- z{L^+Gbep=cUb9%2ArX1RD^cgFv@eTbqu*3eHI3X~W`Fs(?1KQFLN$)cJ66khUVPs!qS~da_J{PaMV`>H?o^nPfvTKH?a(J->#|6_ z8W$&_I@;0lnZ3C)XGWg!@At5>c-!Ml-tg&Opy&E`XOmv<-bO2pai2To*t=h6Jm}3c z(ul8(Vbue(r5m9hx3Yp1QH3nLEgJR-s6Q=N>z@$vV^--$|0 zgJhP}vE2Sa+8Z4u#&g*3PX^Y)3-6w(al{k{P_eH}KC5ldKj@nHCB*YfWA^sTqZ#g) z2RS>2qAe)RGre}Du#xD1t@fe@=rZRug96$qaD>5|RpsO~J(!N*p0gV(?yG%v{9%#y zYh#tByy};_V~9h|Id6_pPh1@>+r6slV{=X1>ttCj_oWp7(FO84ClAa|W8*E2`^6}A z>P?o?t_IPgoh?sr9$TK-37uQ)uDYXYv^YewrI2IiyRvG|w_Lp%o8;Ny{Icy#?MFGq z+hMnZ$wJ=oDMaIupp{K4`Z>a$hR~>0=^m8`-0rTIpFAv1LMXBC6TO2CzH%@7UFJq} zzuUV-)~6O%x)(6mfiYnRteId2d`B|A6{Z7|xNPUy0lxC^=JR&+m}B0XVk$o^@8w6w zj{_&t?F2&wLdEZuUWxAywf__)v}BPrk$muAtNU6IRwmxYk6N;FDA-7P@6>4Arb`^aFbX6iMk^80nh{B2gZ7h1}@l? zTWR9pVA0+YtytvFxLc6AlPzdd)Hb@+0>Hb=^fh+Z6snUoSR$H0$iveNl*3MjqfH(9IGN;QoVq90WbTXkqze0% zJsF=GT4YVrRBKE14oXr_&`n^VUm*7R7l=(T!Lvb!K__|pMR}cU2c3KcoC@YC9g<8o z@hfnN#kc~$gFXp2pvJ{?Cel+{Se~ky$ngmm5G^D{0#5&15!3mIT$WbKMFyX8xZ~Sz zp)nK8kw;@&^G+4dnz&pjSZ|{WKNPsfAt11F)@ZA}=lXX0{oAUAOU6!CWOw&`Ty37k zg_w727}F*l=rk0rc44 zcs?v|bKq5MQn|pXR^FyK!bTA6$kC>PrTCjd3Mw+zv@&bRq^_(9{}Fbb_-Oo-QwBu= zU}ed=v&);R4>k;PrHH>@Vo;3w%pJ!|>5+}lBVwf6-0Zo1N!23JbSHm35@-70kD0d; zAr5|)6T3;bhgbLcooxSjtc>8g`8Sxc`xY{b`<%-@j#UN3YLr4+j!V=KAzVDE_$xz}H1Bq2>rr`Q3%fs)u>)wSi6Z9ld{5EpT|lWn01g_pW( zz(M@ncbbBN?YRKml+UNabk&l^iTNP-aMh3JQqs&jHBA1Z_n>N%Ldhy7)N&sB)R=Rf zaw{tw^&_t!?fHe@(B^V0@sOy_uGNw9JxlOQc_1DyC7MN?urt7Yz4tR>hIF*)yNwnf z7K6q{Bo4sKNO5JGi(*aI$lvX!qZGrsMi=P|rp>-9j&2J=FnjKiHr*GEx)nAl2oNB7 z)x^0U{SqfD*LCZJ&x*o|>ep}UQ$O{AP>$_-4_15c>=oK? z9s8Rovl*YcyuT)`#`!wiYa=%5qJzfoV;ky#|EcuJo>PHWT#7BqbgmrNw4mBUFXfil z$5+QcBCd3|Q>;A1ceABFjOq(H;V5qF>1ipd@-hB5+p%+|p;+<8;l1xQU*@EU$=e^!H)n z+x^du@)MyCp${9<-Q6qKNl-n8UOnnzIU{mcr8SZ)PLLIQ;1Tv3Lm!JJ{PXJ>QWRmpguJ-zrP~~k=}l9RQ-3) z*Bfv9^a%-S9K(cKohv3Mpz(QVt|U9Ic;I`^{SR+@8QrIw+f!c&MTLKehb|vJ|5an) z<$E`cS;3gx@s_NP#sa~+z)ML41b@@&8GiZDv>iDMDG4bdv1Hh zxT;p6tGMlw|MZ>PQv5{jgjIm0pNpyY$k0^eu_PurAVw+5mwfo+p@QAXhtKEcCLRPn zDTpyNtz2&8>cqKq#d-1b0o=-+m@O`p3}Nr-nNha*%y{Sg(YxHDl{0#j$`~BA%DwD&Hu$gHTy?J{%6ye4LR^J2?gVciixQKjujfg3)*MN zmfCRYyV|QocuE226^I(uO{*gNb;pBvI1UoH+3`FG0fb_QopDeWl-Hof?_-H8gI)ES zcp#FyuzUq<3VsO$RrA6Wq+e0c0t14`S&lU?oRb&Ba1%tNh2~K(KU%SOyhBvs_foQhWQ#|L6$Kj%eS@?CtRN=a3w z?KCw9eIXy>#d@9xp&KeF&^#|*yp9g1g8dCh&;eWwjAIQ#ya_Qv#jP+9jS+)QD{rvI z?E_o6Y5B|dpk569ouSI(GqKMKAn1M!S8T81*oN~6h5=qgDI=KtT=j}6nh9?^mBIERMKQ_OdLDQY2 z0$1t1p0_88 zw;71PZ!^u{PIyTq_+kQ97U0wv8_$fv4v=NyMsR%9HiAy5arT*C4y6Yi;WF=ovv*{x zsT~xK(l^YR{7$eNePu}GE|O0qJPpx5_49i;v)_N8d^?BoxtRGY(|Qcd#eat{k3 z_O!#LeZtVxOlE?PaOS}IqA95X=Y(X${qv`eP&<6%KQ?7(#ZbrPC(LU1!&4#zS&><= z_AmRcWa!?+-YLL}7M*@-29tQ#vED)Fg>0-)^}b`8;DEfWU}$x6naLUtRg$2kpYK!m zet+5lRaE0xDv!R|v=Iy+xOtR(WQ{v~qN{-cUpRSGWKaCZ8H50#QUpUubEgS|tuhUHt(xjKZx?xx<;KiqK zUY#QqCnxCqCmeAR|>jvYe z2VzoHt6vnb#jm;>xtO)F^#rZEvm+GgMJcjGs3R&>IK7#AXHEnDJ~_Vk(Lh&cRl^SL zI)3#8KU&q>iC-puzRL%(=JX43!=>jcwd}Uw`;^^|?>s?BhWvr){nic_8v3ERVrMdW z7?HbXlY&d4)kZ$L|G1swv+cI;hec_L%wN7_R1p~tP`4R z)H73@g&*kt5;b@{JzF;r>a5l3f4Fb=MneRBpu^*IRZRVKhLJPg@d?UZDk0!9KT&ga zIAO{Bty7tNQ(9ZT<;+b@{w*>xx&G4i8RaKWG#DW2xhp>(y306OL%tc0wCCa6SzW91&Cqk7^3OFH=!oOKKCuJ|S3&~* zhIQGtEjP00nSnQ#C)|=G(?`nRU)iDdb|d@{L_X|vNOW!AThj~ULl%`~wceOm+1vZm zCxwFV@7j;~8bQ1L`ccRwtzY-@D7(VP>dsI1{4c8BJFclF>KaYxAWD~_bWnO%P>_x^ z>Agr55Tr_#me8dMh!7Ew-a>DJ(gM;E5Cx=pK^18Mus9cgwfGpJ5hKdxI6ls1p zn(MDN`i%lW-%RRACb6BLq9*b@f(A!yQ~JSA9L?N;2}C<*N(MhWCX@%9T#L7yn4pWC z7lkSSL&?FbG^k7|Xtzu$xOO96 zZrz*<$&0626g@TF}zVn#h!v}7HH+ATFpI=+HZ^J z2@1-o{)DDKI3kc^ZhB{DZ+X<1AYWl}NUU{}*)BXug{4%lgbPLO7)N#YS=xu(rU9}s z>Z2xk+Z(-&u`nD72Q>vDDtwy?N)#kVbQ^2|Jb=v-7Hm3XS=|*$- zf~f!{@MNh$RP%r><&wg&zX7lI{?Cd@ArAbR!~tLskYoZfpnrj4kl@*? z;4qkf5^5lM#R3T$&}W{3I|9$PrNL#81n2exYDe6g|Mm)GWXpAcu1{UyetQ<^9(WQ|IVK<5mKUb$FW(q_GyBFcsw%jkmYv-z% zC(NalX@W~ksmj^F_}!__Atzm+hEP#X`-oktl-!<7lS~mV=V1oFr+5)0Z}MkrG2RLH zHz<8q;rzLpJUj3|>EI!zE!+_>mKQO8oX~E~rT<_ZQ@Z_oypM^JXrR-h%B`H{a_5Ej zD2gA8Wk8nqDZB+<)Qsk6Kr9*;peA86LoP)@JWr$FBJu2zwFyXn70{1bL0P2eaw)p zTWGoigFuR6DS&OsKZC@lB1CB-zEiX}Vc1_BC(%!p8N4I8Q_?62s3M}DDK>6CaoMSR zh(}p^@__R7gbCsUd*x=2!pQS>&I7&}H2+P&NZ$;-9Ilp95Iuf;!Ykd zKDhbkA79nYM+|TDIw-((PFo+7dM@;p#cZwhtxiL)$qqrz^?*{eODz)NHE z^BeKyr55xSGK`S2ldTRbMS7bWPmb%1l@3B2SGLJk^gMs7Ye2`RqL}LI^DY9hl1xG3 zmz0}v<5-p&3fRu{ozn#)KR@z3RxOW)AaUrU!NmCplNMK86cdBmONgODcM4)x5<~o8 zfa;kSntukDmrLAXVES+=ZlJbo`QbxFeoz=cy|6D4swsMr`hv;byas`7kizyCGM)$?-sMz{(SC;i(rxYMt4wB_mViUX#6DW21_VarHuopQ;7SUM3hlo-1yKlX8oIIZ68X} z>gvrE+BfqoWQ|AC(#$#<{;~FYK{a6}y77Mg{8zhL-b_t|)?u#b@}_i2APY_#Z`?ug zUv~D(IE-65?%6Jh4s_97PgBX~&t}o3{v9<`wReN?uGLnU(Q$L}h<_vO=j85TQ8Ozq zRBtQOdZ03@*27&saJk(w4U7E_o9WLx_7Y)}4c~(O(Zf9-o=a*?Tk;}v>$%Ei%c#f5 z@8YjWKXmIgK+xWh)^AUAPcj5dkPqI?-z{m{`CqX5pLK~PAtdjA{;OXXRA8=*Q6ZD3 zCCZQGiB}>Eq9pB9KoT%1kq{H)M=H?TrEeNvZDKA_B7-R@33M1z#X!v2*cm|xlY_HR zG}oDL}E^c(sLQysEbj&@!+Wb3aqymp_C6g36BhG;}yZe3%66E#Q_&5 zH0;lQikhtmBrU~T>|~OI9IT$pix+GZ&|R>kgO`5C+kB8Jy+I%Z$q09^(O&5~r2InUEO-@b<1nHoYjed7eD0xD6b4*@GQKC95Lv;REuY6=TZ0Ir&}Ox2EFI ztDS7snA-kzKCT8ZCQ`eL8}IQFg_lZT5xp6%Foy&SxI8es`pGW9#t*`$Do2X=@ZA84 zc?ol5HZV!=4pArNYr9)LH6}I}s>n+D<)GOj!=8$YyBztVpDj1$>frmq5uF3EM8lHu z)MUz_RY7m#Bt;(5TZ}oJ>z`OqmAC^g%W7lrc6k7^sN&g0fyE%19WeWejIq5uCG92y zKmz+fNkN0b>N|&DO;C^8fi9-(w(;Z-^riwmvNC&g7Z{`i^biIRj#~s=jm=gz!hQWn zK&Q*!@UCa<#^NE#8-xkKls^Ne?fz!k(wU#X_0=kMf zo4|Tg5&maG1o=fmi2^u^^;Y~(91e}dn`k&ZroG@Lx}z9vt4#gchMIIk(6L)ct5Z~D zcDQJN>9Yc4kJl2e1UU+C(5D1=dkBEv-|^IVK7xpi1d8DiB>YAQoiYTb80?H+&RVZ_ zzJ~{ClTcnD`Pj+nhK+*=qYL(9{H~oLOhQ(J?k}YHSGPJmf05yarS46QkHKcBc9-)X;Zu$FQ+i;Usnl(+b~fb0lq23HKbMyq2r<8-(B-^7%PP}+e5 zKE?x8G9qTJ;Fk!xlbE)R(g>m?vLDzGM>>U==XQ}!;xq*WX;C!aZvV0`MSxKATlBBI)2l$ALbDL?Rl6Xj!D=6uDDH_a>=*pox{gulom|iEi|i&QIVX*= zmDeZ0(G)OTFfKJE%WX?xqszqV$pUjr)8(4lm%eGcoLOwqKjX4WfAv4^SkV-U8AK|T zTYPJsxae=g5-Ek9%ZI)JgLj~&r&hynb}x<08GkAWFYOk7c`Ir>O5y$v`&*tMX)DuL zqU^0WJEFhJ?F;{&)qa4+uLfn-gu8be!tOkn6`-GSCk|P;ojBFZ^W<@3tEYCAqe~tH zQZN`}8>`)|LH|=)R1ASKk(Kq4=M0OKqv#{=$!FN?uu?Jzu8%4GEk#ffFN_FmA)=5by03C8CNfRzJ?b|?5$^6)(yfGzkaLN zyu}7^Vnq~}ls<7X1;|+hS@Si9wdUFoSlM9`4?B4wlOS>N4evfp>&)-6|HkNCv3N_n|h_Ay$ zJ9FyO5F1^y*{@r2gxy^{(nXuYTIbY*buz==OMI8LA;?2u-Scvn92~6jp7DJf!AvcW zegw$Q68_7}KmD85(MS3TT^hru>P-~{{hPXV~b&+jU^+{s=EqSI7N9L zBC%+^@C*E%|t3!l}FK%`cm$g4+G|QoK2%uEn8mh<3M9 zgJ&%P2zf&drP?Sz-({kL1ij{cp--C9mH!!~bP`=fL>*yr!K_FMBDHbI0XW@V6LCEg zfz#m5li>_C0i5Zfv21h2(l5E)LKy5|qDFM0qe#(Co{AXKN`fC2KJ$lzg9IS-EzpUf zhqWX00d8PO!BlBM(cuIL$bIm%57y8K(kI{ujt?9G{!OCFgcyoDYSSN}fKB7(2vPa8 zi6glC6efyn@)1{Z6Q<5`NT?$cpW+sTX-T)D=ycr4Yq*sEDJ|npjPF48?l0|M_YoH& zz4cIP+5MxZ{$|kDq^P0w*X1Sz)f^W z9(^NcJEFE*SBRSo-KWNZ@h1Gk>wI#Kn|Eu58P?*e7LR{96^%(AJz%di@A|wQ)vL%Q zZ{p8!X+k0>c_VKUUD=54Bb1@oxT~nmgxXMsw=?6QakrH|bNH-qm-(P>`h27UdO&m? z*;pFP1b5o<+_4LXLm4P6mjt+0I0)V6nYexK%j1|^FB6@N zGvE%`_LPi29^9caH{s2GSKK)JA>#@@6UaS`5E6dsOdZOz6*VhSmHXmIqU`BQZQ6ke zlf^q7X%)wqx5zI~Pj<2|%7bEsa?DomJ!uqtKFq!R<86|6D6xVEd3DzF{k3{4uCoF* z-a;JW1Kqy8T~|wb^7VHzVbhy~UG^T{6tLIWeUG#kGAi{6s5XVfz=%CYtLd#KH_JI8 zv4y%xj!(4=O=@;u*sNa|T#~+k(g^Dbc=HNEk zr6ak_dIR>E&SAI%18mCn{ro*&Su&!oD6$D2rp3UP7s3yFOqL*txyxfszJADbE;!D<3&wr?M-S)S{p@ zJO=BdI+=SjNCC5ZwRG9|#Xp&8hP!Q}_c>Mf4T}ZZhZ}aS#GHs8?4K3)M3c(b0nF@Q z?~vn=TI_38{f|Hb%y^E|xy7(+Bb%e^Nm7;{o@m{hd&v(1y&nf1(E|cX)>#1y*%Y^jF-z14bRo!OZ>9}@H z$7XfE8-r@#44dLIUT$NY40C-x&&^{f0&0zWm%@g(R~}+Z({L|;+|Dw0wYQ@%Gh?t^ zhy|NBRem@wlnNL49>ooi!SsnWh zxvc8Z=6Q4+eu|`Z>N}uW`Lou)_TkkPxLJrvxK85*qV=<=nF)48P?japam%280^PRo zvyG?9NuD4t-aC-%_Ecc=T~(4z-0#7AOpVize*K|y<9_|9L-p;T(N2wAIJZ_Zd6EEQ zICgrNqi2^V^G=X3)TFom&1Yo;;O0*N=D520w*UR zwrABRi4(va`MhiB*3f*a`P2eJ+y6&J3h&X+r^Y}mw|QW65!Cc^VnysLO9M>HfBxTbN~(-PGSfqW=6B`t_#<%0~TI(nCy8Z69)czhcI z_(qAhQ4$0X5Iq`f#ysGVGgzOQF0>6GQiM=N07-bIGr&@6U`EYOZV%N^WRD_oOTOdRzdfvxc+2O8e|fAJPUsPxF^LM>Hj)h! zwv4eovg^64y@NO*Rhu_yj1N+0Ft_2o;9!J)jkT61nQ~Chzi(5nacFj?AS$xE)Azlv z566Z}xRQwFW)uwRiJzIrYA(Dp3$5+j=&g->*$F`NA>J~5>kp4h+!P@ulcOX=))vCS0h1KSAe(!5RR}WxS;!0<5xUj_c!*U=v|bs6k>CM8!e2`eOtdugSXmHzQ{ z_;M(~C=$dJw0b4SgT`6Bu%iMUNvXU0L|wh4grvsTN^?@vh)EiEnmW==f@uX7EehQb zoW2ThkvjvXKe(iDFoMOn2^}y#yrUO29g0$vHae4l8Vom|O@Vg((z5r)Mwm{r6GYXGBw5rE4`zA z?Ef5FqS)ttk`Tl!Xh!W&Wo-PKd(XQ5iqiZQ6m1{5X-D}eE7MDip*olT?WNz-{((b7B_|UMaN_+CU zOepD8B@TV2Rg_t|D1c5O@|+pv>kOihZCOknS%2?s2SrA*y-NIDA4-R1yzv%ubv!OF+MTO{J^eFMy`AY{LOisp z?H`ZOXs)sE^OA|cO|U;ZO00H&?d4`H ziDe`EYf;dGl5~G==#%!|i~D84?~C6VZ)J@P>{iZ7@6)bsemC!SrE`hwr0&go)sFP_ zoO!3&D@x{IT~u2)rPLjU-4fF9UHEd$t>q6uwx6Pv^ySLGDkVjwsDcv<{&sTQ8jgvm zD=djn5(0J~q3$s3V<(4aD=^bp1~NLyr41O5ertr1QEb5p)0AY>=|ko|sNbL`xbctoK-3q@(z+nzK)HbKh}X37SWa zM=SDQmQKBlcKdt>CT>Y#O$j?+q_GX?<<>iWE!sMG?~?MM`t5B~2PUX47Isi35|nq5 zn^F*shVRlZzVObnNDS8Ab!2$weBBK25SimB_MJ7GF!`UfO?eM)NOTh%|r7z#aH=bS})PoBKU^N`K@XC?-;tJSFuy$D6{e zanXW&MAQ)nJDH3nQ#3k)W&iLww%n-*`D5+pw1wG~>@d*md~kXXV$^eUr^GVDGYMPU z^@uzmy#EC)^G@)%LFatK^M9_kjP3n(sl>8i56bP0z-r~}_zK1a?B>5483APq*)Lv< z@!Thi+B5^C?D({O)5cHlePLc-fUn*~$TM!OD>B*f z!9o;a?X%{$Xb(&RmfvgT=~{WTxmli-u01oaPrTQ5*TQFEEB&5Rwi=xO(!ef!HJnvB zBF0E#>-51rNvpw?mZ=|%SijBN5(GohEYzp(PdX~@ia&o6&mVP+U06W7iwqW&T2)Sd z_zu>d|Lf;}VD|smYZ<)>Rft)(j?_q{1U42+XTID(kQl4go#t%IY)+S zJi|DQfZfjNuc!2?)5>@yt|Pw?UT_-trqG}zQsHLyM^v~SJ{#uOwipH65ecAQy0mR>>B;#O#E+SmI6>R{9p9UsYKMhtOjex(3 zmmk>$8Bcr_5CB_lBI+SC6Sy}<)0p%runfiVfm3Wm=Sw`G#TP&|aZ~MJQIhmOiGr(I z+n}lOPG6Z~dCL_Gf}7zeOgkAJyo}9;;h;rO=b_bxOXDxs*u*QWnU`vW51ukS<#udv zUUtp;*q4QvZsMXe{WkfjK-#-oYwp7{%4cw+0asZo&vK#qnDH{HIi7Dq<5KgKC#Loy z=Ak$1s!;;md#a91jUvml)y(mih#L;Q$QsynBoA-v+W}3GFy*W?GXW-X)Y=0@Q%XeC zpmG_(cQSy4$aTg`eYAbI%g2DI6uB(f7kqy*@+Kt|*b%{bqppEH(T)5#6LJU>ez&k5 z8U1M_21i8wKef_7AgGvC#bVQ9Y9%5F;QqIw%5*%sK&U>b)<%qPC?7ctHVqP zQMh`d2Gz`7KdVO;7gb0c%L7^oyWXi!F~Z_uHKY0%`1f zwFWmPDQCD!XOosrqzVa%Gg@DQb~nI026J#!YbZu#j12j_SfU{vq=HFT)l7A>Db&R- zyUx8Z%zp8=bu`ET*V*Z5Oa(boqH^DFA02goT2z~+-=I}(SVHfNnqDjzShlSfIn7Kh zSX3T=A!pG0^?K~2VY7T*HHcVYZ10WoxwB82zcF{)>QY(w(MPa`t0VY+SR1q*W2f` zUpN})pHE-6Dl55657MHy6|nIlHmNZpu<+|sc*L1`e{CTyvP2re)YI6lz7ceXJq4X? zK;NDEyBb%$5I0%`WWx+cWD-tRYC@`)Wee=cF z%BkyWLiU!9%Q_@9g`CNMjQpX0J=UOaMP(Xuh>gZ(-VfN4?NW>?FNcxa{!bqDwZhLt zNVkx7&P$XFmiyNuvHjB2Bt?_@bGOI>5oobq=M$#HaeSz=t#)=k-Jkj=|1Ig@MkJ#^kFP|I;tI!-;R+p$cZJ?9Q zmc{xk+lKzYi2UL@J{2fD#1ma*D-IFdbt)@H*w0^F7j{iiQ^+?CfO%HEb;QYf{==*G!XEwCwn}IY@q9KLYQT4> zFrbOUe}<0)1P0t++cnt{cvKUMLxZ#z{I@oqEomEH?H0g?NO@9vAYwOZ+j#(LhC-K> z>mqF)L|W$CjiB(3W8L^7SkUwX_`?#lVcFxkEWClayMqP?+&h&56p}#6@lI&@yX@b= zxqx{rfn~nOh*v~YD@ey00BUxDG{Lk6fxxvw2DD;%*QF?sO8q^p;+{_sI~@4dLNHjD zxP(J|$&D8HYn>!sjOyAt8)%eqm9QJ4O#@n5@R1OLP&WsLiTXmG@(rvH7c*QXYUc2^ zLVxFEuE?d#HwY2iQvewAk!mVP;^Kdi41lrI0b_I0-B1AEgCJzy1wOO81|djZPM|Y( z@tMeVQUcPr4N!Z|$AMST{1L@-Z^Dt@7!`D^0uCjM8uk@RpGxf zp04S$_tR^)B?kn_ng3A3duM%fZB;GN{=C{!Rp$=#URy06j=TN? z(hK97mzjlSaH&x13S+|6f4(98e;7*%SjhxV-U5NZqcGLi{ME;gn2|;Si$hJoaRz)h^!{ z<}flPOgIa$xebM?{V`|UB~BUW5f;`6I1@{%+IjcSnIOfkx@w8~0`?Olt{}}7=suGC zW}EHxUoCfcXNH4F4O~J8w-B}Eg0ycHTUv;O7p>CJ*9vqP)n?W1t5g<>j!vwW;nFP- z7v|_ZbFcD^i2hmeLS@hJePDw%=QRwLA>>ACUrs|Bi!Lp3s3!Z*w;gt=n(Xz4y)xow zjlMlny!fIez+sg#G%(~g3&#ffDkoQ}2_{>tYrkwPe*3&&%5}?(*p44}!Hrs4Iln-< zv+k>=s%Ss#G6w&^i54{!Ed7_Ewb#} zS{6xo?>E54x^!@(g^Y8*xGla(_Eyi*4zubS%WKhH&P%&5%|o0#y<7V6*JC@r*5O``Yi;hW%IjQIFW5nZ<(-VwCus% zz?zF@ze=`D-f2d8f~cXi)SiM^dVErGFJj&a9Q#X*`XvzyVg){Zu?CITK z*lVX&dh~|n$`l(puqA6rg`iJe{zRBu~u z)$puj$$OAkdeIhkuQB88M8xfHhHFgx{12MjLcGjsTX3E4X}GPwY>$2Lu$LAfU&w#hU+uxU9ZIH})yo08wm-Zj8Rq zvpI+iE)mY+QP7z;{%}{-K~Hmtnf!l2ENJKn#HEk_kGRyJyN-j18sDV`8bO8^ODG)R zsR$JzR1ShtWRHw7%&@~Z5pw|)Nsq+`ybO zrL~w|ppNMpY)1rnxg@NweEFVM8+WAEqrOe;%>q@Cwjq3S9oMc(OrU0`bY8lU%A5+C*VFsJqxx#WKu=~Y=c7Y^=7&GhzV}FZ z9W4GF{c7@C_}Z& zI*H`09Pv$VaSYL)DT10W#1`KsyA!0GXQnDeOs#7-5-&q*e<=JL-oX_QtSsXg!AAjm z7|4tgMpB6k)Y=+ga0~EXhG5dOygA4z28KJbaMAze*elF4E(yQh@P_T9l_9NA_)mQ8 z(g(qI2tG25L!emXw_z*0_)0AH!?0U~eoXY-=t$6COQ`b7$Us7S`9(vx?c))N)se}A zdch>DuF~-i*p;yoek%jjYI(Se3F?p?o96C680H#zBDoiJ)8(?c> zLD9BW(ckkK|LRA=r1UX%2j0*D!aVqd)jPTziBId@V#Eofx9KuyvWtqZ(g>?T_p~@+ zxQo?c@+>E1k-{5I09pGF%w3;$@;bjf98&J#<*4}5Uur3ki*ucfs+|30jKvVr_a|H3%KGJ(Vx zw{U3Tr$@^Vo5Etkb_Cf>7%V^CpMLTO=e{swyh{&ruiB$oy8Zcb`J;Hg7CQoIFf%2{ z@N;dXm$dXm2&~zcujTE>Pg@^WTeL+*yvDr6$jN&AVJrh%j=Vq31(>GKViCjvL} zsD`2-40(z7T8d=)Q@>^}@2!Yc$IB5DT!*xpJ(RMb)jC^-p`51cbUs@ zSW2dox(fm+e7W&Qy!9c$$9OLDc-qY8L=lvlGz72<^@>+7jMR##8QeA9KT@N#pSHR< z^4OF@jLuh_PB?{QaeMxEDB;CE7wi!TL9@R?^+;1eS}f&sDP`x+iqv9-%@N7$V12wL zYWd@5{(@6T&lr{=s(%`b%q$=mn@;+an7vDNkP`op2aHf#wy8*~T}N2+%Pz79_cK4|^RvzWO7o;4mo@g( zv50tjK_8)asTxdN3CajH9pQ#7pKL7$Eg#uD4oS>t17b$lltic9240~0!6~@TkOoni z%yC^1CqWlh&8(KF0Wre8j3?rZiN&oMB{H18))Gx7=HS1)WVVDwiPcT zboCt(uNWbvE>m@q-(ljKKzO5$A*!TV!eK_GC9h#9JZ;B&b&&#}RjrvrgU>(B2dT5T z`u%|ze(Dlv{t#7IsB{WDeLyml|J3Ek_OI?u?3ck;yE+n^&9OOv6q9X>nq9YlSubzB z(H|G6_iK$*r-bq0HtJhUKL4+DPkWZGeLkvd;kdsAguJ2~^B$fHTz=alz3D~z^jOT} z(w*dg{(@U}DK~;BoNEH?be>lU+2?Sby~{dr@YS!l2dA%n(wr3i!B?Os1ZHaySNz0| zAP+mbVUOS!(>#(&_<4iv^^>7lmJa3^1^b=u8>}7D0iVrM6Xb{kk@Afj+0IvlA4#Us zK#T@18i)}mwHLURmQUwi1o502U-(acROpfirb=E9(`o-^)vhd*$qscLSp9{VlD{JK z(N7FfU`_$^s*gI>`_68pfh~=E%zB$y(Gj__>&ObsXMa*&`EBsyQv2NIvr^LCfMwWN z4(iG+>ZeK{6WWU`yzWR7ekXUGhn;6H+{$^PD9!U8!R*ml^y#J3|AtnuO$5;T`TwJ@ z1_Kke7u3=DAe*Q}6pn9w0(`C&wLs%iYg*Ff$7GJ6dm1DfPvd~pQ_=aqc2=~i1st4$ zB>0@;8UBR;HSt~Aa*dJdXtpX1$P$J$ii*>pHewfcQq&Dv;zo1w1pSvJ#FL#q@Km4y zA*=_#pr?wM*VZ8CN>~Tp1N!oUGhP8@7}^f#S3M?!j|IS?lV$zRWYm)4wU^tZF}U&J z3|qlGfD7(gWOoC|1-kZlsI@at%45;I&@02BZBpfid=<0Cn?n7FaA-KNaPG842qyeC zEJZf%Q$gl3-bhjst6->3m3+d_5P%8E=jFji&xeB}l)YvZ;?6DmjU6PK`X_X@xjRKo zDUIbtSvYkgk-Op+!R5*XIXT~RH!g$t7(~Yv$pzDb~SDu7fH(66k1yD#z^!>5nnm*}b(|vT@oU^r-o$pH&rt-4J zuRMc#G}+>Xzli>{;O^l^+bU5J(W7S@8E1=v`!GPjxWU@qxEo0g0Ts7rb)du-tmKvK zh)Yl>MidUF;wKQ2rs4aX`fv~?#x3C+6XBapfRZ9IMiY3DGCSM{LB6hr8b>iA0NoRv2j3CBfnDJm923p*;nj1FD<}%E68az01DSy-o@NryvE7 z=PJSFdj$CGgrE|!g*Uh<@cQ4&L9l58NB<$fE3K62ciA9w;GUTwAz}hI$wqF;Le$c_ z(y4c z(~v7=4kwtRXB_!#uG>3PmHB}i%OxspL#t*k9Yku6aSUW#m_%GxMVXMBu$IG&D2YOL zl~irTsZ)Ib-SkkLaLE^@fYOJiIi5{^|A>{T>yt^ZQ|E?y0mslm@yD>4iKDbR!sb^5 znMuT@!bZ5Ib%1J^MyQeyj)DUG%#B z=+=i8E4k^1hw=~glA4SPQ4Dz*oh97{Bx&_A!%k&82DjxI>P4ZgUt#e3V;i0slupa? z!V{k(%k;?I+Jvm^ofv1Q&Z)cF<6G}gh~7=k57Lqjx@c9ah`nI3-WKiXFP3JSWE~Zh zAb52eJ5~8Og2?99>>GRD?*+CWO!CNqL7B&D_zo@`IRa2 zdwf{3UlzCnLAE?$Lo_|^#`CtZto~o&Gv9X~a=x)9NSjLW=u68S{g+YsHcOHwEgu_E zQGoiqzu6X;O?6g}PkA2Li$B=?G(Bkg{16By>uVw(8>TW+Y&@s9uS+A(`ImztP^Tv3 z;`xe|)@Td|zwMzP>+A2wU;`R@ZRk|8l8U%3hH zuDQ`ehGu%X8*JGl*GaQ+7Z?gy2|*i=dsZqd*1>@MsLj;fwT;I%N{k-+mw~&Cf4t-Y z?M)J^FtJ^S2NNat9!C#Qm0~DV%tXGB2k6)2wNuFK($~6F-e$nQMLyeJDyM-LpI^o1 zmhCX#US)xlhL$7x32Nt=s3l+OOvzHH$yzyo3-PUEi1V#(N=^ep;84#-!_J`)^UwWC z@%iP%lIK3jJ*65i?8t|8@>&h~s>k-^To`#r5xLWJr94or736}APIKv}q$m-X%95Iq zrQ4mM+a$7S#lk#&u~lP#401rxnR63o8DEV{ocm?6u})HOs%xN^RrT84x0~y6<}8rL z-wK|b*AtW#8Ga5tbk3Hb|5Qiw6t(qB&YM`W)BSqM=JjOXT+VrmCkZ25rZm~Pt9FA| zbgND59!NX&#=iIhHdp5&ksy=Ncr<-^cvF)kLUZSuVEU89ZnYn?zM4+&Km@{*=`^ZM z?^pbxlSsqYfr~9HRN;Ri=zqCYoBv;?x@TE%iNOHlBS<%2yS7N7b$%pe@rx@FDykK@ zC@Rt(%a1z$wlrIZZ~f# z*r8dI-p4;&C%OF@ckz3mwOGrv*nf#DUhDK6$49HaY}=J?Jl-ub7GV2Op{7$5X+m|3 z{Cbs$M&ukBwuBp)G9CB)nQ80cna+IXEThmnf0}B2mm>15-wK)n`e=SxD)CAjTOk$m zeO5vQr|Uhh7rjJqKoH-Aos|HGj2Uk0J2m z3z=_^j*nX;jHdg~>yhnq^Dm~wtXLXz`{xmGn-Bq;rqTNZc`XLbB+Cn8UxS`eUX5vG zbun_zUhs|gZIhW(roK)U#D1k(GyXA`g`p$L2z#A46!jb4kQVtH^ik~}?o$-J-rbxo% zLlt)=FOqiqE71OAh@t%L{`n-;;Cub?ult*nHG5Trg|i|mj^|u*HG4zF2F$ldy@C_@ z5y0EwP4@)KndyemJzl65dTqQ$pPV4UA~L#_Tv4d=55M_yCHTtn4azjqFd`#6{+mci zqg#%qybnj95|6*scz(!gD5BK8W;6gV+6yG!x~9wtDX!Z#7>t#GT6GUxBS#sSi{8!c z4~BnMb6&EiHacNRmg1BOX{e8=4f2X^ZT~jm=&BMY)vR@|h?;&pK}5)kk#q2VqW%1Z z!{*Sp&ky?3Rn-rYg?-#(OEx#|9A`r{F25K&=xhYv9!WK7! zD0b>QpWoPWsv1^p3w6oTTDT%s_WNgZQc2{otKGu^-rxTWlY-j!PLjGyPZrxy3oMayaV0;*wsb zuk(4QOa_;xxc8-Z4Kr|K+wilx=eTPg%F>^)p(WGWRyL{Fb=m)A&v>=1~Ae zT==|~himct^jqH7j-*}x3-A7m#oGS=`q9;CasjLyEk~LJm3D7kEQnx)KBgbn0FfYa z?)|;9Hg&DSip@Oa6f$+A+DtSqKVRgSTzca#464daz;OD!VEvGRBZSNM<*OZ~*-%#G zdy+n|^{l-7_IK$|alN_+27BQ@G{<~CJklv^f(wV{S(v#uJ!QC7q1Q?J#x|6C3KRD4 zpIC5phHTcl?AgL%)6V1Fqeq0DqHI(|rX3l=m-T^UihXVwgb`XcmAwy$^uo-=&AK!Q zvJR`6JJIv43ne{2_>TqIOyNiDDf)bDyhb5JPbE#1H1A(sET69P$5l5y6uz7FV30Cy zbXBYQ{*;=*HF*NAdaf;h$b{9Gu;Y51#1Xe*+_GW^ehZ znkdS#5%T@{NzJh!++{w@{WzRT>e^4UMxQE|Vyu@j)znB^Iu0RTk4`Emm`i|K_(TvA zhMS{^Ub)Env`uHr(T|a2RIo9gnjesM=9nU3r#qL19~sWV_p~m4$(SovXe89GqC>Bp zyL$80)~@c#-GpLYdhX|`*_`^HrPl=`l^C%G$WC79?4bbqrYC=bdIWTa~hI*?9gemTI62#RClKva^A9Ui+j*I`X{6!NTt##@p+@Pz(c=%p6Ihhw?Ihg zvk~dse$VMz>d7mudTU%;s>f9yj%ct>x?^rq9c~S4rk({}j{X9@GBNqjC8%)c3b*O* zx}$$HM=T2^G&rdolLVbm|b<6d#M%p_q8l-5Y z$9{j<)^QLo^CUxBoeN!e+e{A$FHwezedld8|Hq_y>vL3uUHeU4hPuf;4VghhdRyom z#e5CFJnsjv!)G`=iF$wyj~_WypCaSci5KVO!D_$YFe96ReR;Zx74&k|Al*U zC|P$U7zsS7O@YQkdUJ2 z+-ojLmU?QC_I_LRb^UF_|A(x%j*IH~{>PVGx?DoKrBgz>k&rHFL8ME%mlBZf6zT3x z=@1mD1?dGOL^=ei{at*$KkwK3`}oZtJ9qZXxy#I4?#!Gy=lN_pSXJ0iam{`spcN~| z20s)pQZ0Iuz&|$4*uO1GK`;d8{GNk`PRo|ncW15KypzdFSs>#WN%Q;Z%V`jCknHO` z9#=Hmx4hZpaJWsU*CRfxv)*Y-sXmRO6F%>BtBy;ww1ytgusp)b|&GWKIG=2lg z*&jYlVKS3#c|07B-r3}DIfhi$taAB;#6cQ_(Jj&et zel@{JyAF=>mt^42I4Jkj(UPG?p&@ztD zIwpH{wL4fQGiZ}<7ke2T`3-Lpb}mbMW|>+n%yOvN*>}C`)$TfcJJ?C@xkOqL#Tm_{ zCivulAe%Lm`Cv)A){)M_HOGQ?j-8{+wW?vplgIqA82D!b0di(j$7tDlECa0Ly-|_U z%a|rs4kTcO!=TL@XM`_5HFtRNY4jLU^QD-T#4+Uc=UR(>9R@19qT=d~y}8aaGuAiwd4{U|&F>n9e#X4Md zG+dcbVqR^US3gqGdt+s1Go$UeDZJ>w${#M~%qvNWAE=5)hsFIm+fpP<7uN2TDkh>K z*9<)iLL_0xr_!-t)y#Q`2xE784|6P%*#>gJY#p#R9Zzd1KCF;HOSjs(LLuS)Z@(~v zixmo*Z$7n~_KvLkV;E58qAz^*|ISv38-RZ1pJe`*k>-K5C;|B5zw9=Dh48=ZG=K~_ z`5)QeI{$JAng3<0dC+}eEyDk+^M4<3&?DgTK^ItTJ;?sUTJ-PlLjIAXz6bLEvf=>O zAP^k%!2I)|`xVFm+21<<`@1Cn$Wfz!{J#u3!1aSJDe(EAn+N28>~Ed_)qP-5dia~u zfc(E~JHYjW?qlHdL3aYk0omU=|Ev4JnDn6g(58p>{hQz*3ZU?yI|<}~>~Ed_)usGL zjv4{v4{iT9!9i3&;XxM$U`;Q#; z9gsit+rJ48q5}&5_q%}XZ=L`BUHX6If7z-Y`t{!g2R*PqJ?J(8IUxI6=YMq>|B<8S z0{KIq|C`_-CZO=3s|DnM>~Ed_)n)!ij+zbR4`cFgf`gs_g$Lb-J_KZc>j2;Ur^-4A z3|#$XUjk!*g~1O`H3)PHJa+3q{@*bJ$~!>$zvBRuPl58kef#hI9vG?qVTW=7kN$hV zzwAx_?N31e4^Z#Fee|FE{oC$;@Atqe^&hq=Y!-|>paepK0PIf>-~YF*K-mf?KRj=L z6HtEmTOXdWf6~AAdtki!hiwXu#eA z{l$xIR&}N-PDi-@Wt9KUi5_$LH~jBVcUL z87fBVYf#d!gD7B$JW{1T~~W0r;0f6D#Tv0>&dnfg{&~~D1lrmMl{gL z29{*$O&}OfS@R9$2~BF1n%XS~0o$R+q;u?>Bpw2+~vAcCKAj zT#FQ)m=XoaZ{ug@&K(v>AT%Wwb7H)AP_9tQ;Nr-c>Vx`KGmcjl`X)5u33^xspbRA5 zhu(6;EQrvgjj^f6zzD#$gUZ@ly;4b0C4$#nQ|JpNnH8!?yK^(?k0v|i4x>n1G)xM$ zZFSsWm#us@f49b>qaSlzzclnEfLmT_;Qk=LfX$3;^v49l5Sr&w)=rb{Ag#cssBAr< zMg5LaN){I%Hy&6QTQ2n@Gj-;h>qd*VM=-<^mZ1ZuoVTsob!Hlp4QpTkoyE$&lIzFg zx3=6CS4BUTLqvbluxN|Nw=cJN@Z1vns+%T$jay!z80g$acIG%wCgs-^s(X^w)oyUS znaTgXpC|S+M|l28=rJ19X$3?N2ihnen;WK`mmheXBDxYWlekb{ zbTV6%SZrrtke}t1SyV4X?d7jm?38t3JjIPO`tsuhXI0ObSAe9I<0Mog6%xbtYq;XG zHH&rm8-;JP+zQNzh9cZsjvy!c9|VFfgJa|}>1pGNs}WH`GaJYQP_6)mwE$}J&scQx zKkkaadQlL>ftO@V53n0C8=ae9@{Srh*Gs@Onkc#<0 zF`s}|g(fjU`*RUA74>x*S61aR(i`^G@kA6u5Q=|Uei_ZKNWY%a^0Kl-`OYCr=R&jt zZA-LbM+9E;VM{|F6|ejYcOn17fO>&|vE6~1a9tM5T2Nbk1qU`8-FlY@0y5gh_0qZCoT3}1}U`R>_Iu8`H z4QQ(XZiI{lCk9(G8HNNX4|Ba5#$tko$?>GqY)z2G9ci%Adu_lXa(gV!8!xF*q{H=K zf0g{wQhDU&G};8F9yAq8z}3&(^)ojED}@ob-(lh>GSeT~Sn=F3E7&szt9H91%$1d% z#4CSHY(JcJ(#|XM>&|C=E>qapSQ&kW);>7&owYWmT;!AI_wF4Y*e+dJwTh$dP+r9! zk9rK~?2Be3y$qsmTa$*k7m0G}tUU8LT+%(_lX~8&qth1L6IOcR#wI9oA)>zuu#)p2 zGQ{|KEP39T7AghzrmVw^Fs8;xH3kI>x`%&9PCAP)O@dT<9s+lA2ue#MTZ$>iN|J#B zUpvx947JZI0_jRZN8ZSTPrsQ1)!uEF{OOj|d&W7Rt%Gp-uHaN}T$KHYD)`69TDPJX z8L`F2KDYJ!%lt&IX?C1LlvO>6xtj318q;V4>{OA$nN41!)nd|0-Z2%|fls9_vdN3o z38*$B_6k`Y^f_32@Far{Y3Y`O0S<$UM?LpDP~(dX#K;$663~1>d-@W0Ya>&hO-c=<_@PM zWeB4|#)8lrf1k2nkt%N%1mINj##>uy&hM`C0h0oEvCl~S>wUX=Gt7{wnHbE8#@ogW zyZ%R37Qx)}k3EYdbN$BqW?WOgMP$M}FPindScJ+9!Y62|j zY_~RZTAlrnEaj&eg>V25cl9hzZmp3v(1MPI0;9qBnATBHmuhm`dwE%(c) z;CPS@1|`r|2yRBL4C^G67H+_V(tPSbA4zEb&8W1_7?sJ-jjv{%Bm`vzYglfx?YVMk zLnD@#+b&FZ`S*ydZKP4BT-(qewFT%KUTs%eYIjkCozB;t2~h^E#@rrp^c|Q-IoprO zPxLlYm%0^XVzdgsMw~}K26u)FD;ipYV49Sd=Zi&;<|)u=gYn7eTqK9>1{fjl#&uY zj`?D0_xg*ATl&n>X&f<%z{=XqeQqW3<9(CgejD3~sUz+dzcWmS_&#Yg2-K>*u|r)| z!bUn|T8SQ9CTOk}$@W*BJ<#oFZKJ?go>|xmS;FD(wh7J-sIuGZV4GXlS&FX8jNC#` z#xkXD&H>g?TF-M~I%ichEDL zdGr*A+gS9iAdce`k`vsrD##B7{W&+(Z4e}sRyd3ebZySR%-M@U1>X=TRu`$>AyN=qr}5TNVGbQ0sIs^m&t zDjQs78PBOH_z?MRMToUh^ta_&M?O^-X4QGYVM#hUUVtA_sKJ`Fnz95zAC;*4p_~h3 z1|QA1LjR|IIKdzR9a^L`Eu6q;2bq*D!Qux*s;&$x=bskWC=z^;qMa&f$Id&RXC9ME zl^@4r)NwP{&YK{qSubZp4q@9bQA^h9;>s5jrPvkl?msHXSNdQ`XEoeFjrpULfEk0A zUFL%}>d;J^^2}DzjJT-+#7t(tIuI9s22E4L_E8~6?oQN@ufAu>BlmX{AFt{GHIgWi^i>2w&&PY!Rhzvv-9dM*oAy20LZlia)QzyC&sB{- z+|?hOh#)U;oV@i*axvI0qS3I#Km3_@{(Ie}dm_7QedZPE2KI?ezK;;{{I>Ky=$$nh zrp>QU{e<eHv7A zq?;E^j8(1S(hKUcQu^va`W!2yB+lJ)*z`HjfV`_MMYpurVMYA0r!&pTjxz=ZJJdJsAcN7@ z#{6I=+gbRj>N003k(XLjE2&fMjv1r_kot@uuPpEiYk3ujAjt*Ox{yLCTcH$3V!te% zUbHeQm=N;F$@hXV!qpz0e4KEwUS0}|l>r6_nqn3{BP7=)Rg@ssl4|@(pPp`V)35PU zVipo5UO0Wz;*p;3UiS&ne2}Vkchw6-ZRn@pUpsD#SYL-3n#VmJ-rMo1mnVCiR`t$N`#cW(tH zQIyrW(yC-Q<=p~!*ola~&ZE`VSisTTV#kQOS&i*Xufugog=l!|E{f+2xQhzM>{L8k_Sr7%DM zz9sZ+9X{aMk4ngh4|FvneyZPU-*F0K6vGLJ3Q<@-i}H0Hwoc{dB2q2@z=jJ1n4j;8 zp`z20SK(KN0=GsV>_Gv%6(s?mG&OvL;^z7#EK2tHAp~t;iv2>fsMsqaijEQo><^TLLH84yRk&X}X_W8M2rJ`3OeIZHAe&S7ovi80YYuz{a zJ9Qbp1*MdhYQ=jwppPpO})`k(w zAB15~ZLbC52TEKw%OB`!bnD>bWo`S&mmmIEI$#z; zR*LEHUb?}Bq5^uwCy({1+V~b88+)ex7^R1B>GYBdNpNzic&x~K^xPYDHh3FJOJpwg zH_H^E)J0kfzV!Qu*V{gmG0uhg^2w17n~j`(LeyZ4b>+OElK$PQK7I~u1pb%Y_q z`1PG!gXtfJE$M?0IT=^VG`$a=^~NZ{s9kN{22xjmmtfvMfZAFFx?%Ktk~Co$4{m%i zTH=-==L>rY&yLF=p<$=E3X@C7z3%4%rr-WUn3m+A-@2f+uJI|ZZy^}JgOX}DxI z2neb8tuoTD>B9Fh1O)iE>L$qLB#_S$qf1!$nN6ZJ@b zI;MjuOTJa5DW{oqyu9q8N{`#Tr7urEI}OCx4>Xuou{27#EWQSCCB+$x|n z(ss$9ByZ2lucvvY?J7cNyF=j(z#fTsCNWZC^%ebL@Hzj&gh0~$j&8q~-Px+or-L#Q zG<)eb|7(-|bZ0N9JdpAMCuT<@DtPo=nct8(>mu_MFXsz#7l$w%R_oYAx0hC)NPL{b zB8%%A+tLYh2K3%e{%FLZ;h^f2$C2u>kp}bSPDmhRUG8f z4_#SFrnAWkILsSzei{5gRQi)yZZo0gl9EIe&nKjz;k_)e%#L3tmXZaceHyje{f5)c zY==nzf|G>73f$~*O^Y92IGw>b%nhg7P&NY#tjo~Y@P2=DVz=W{u9P)f?$WYarlzLmSx?Dgr2a)(rk+DA~@fN-`68 zk5FIn^do;v{f<5Gc@o;6IM6qqSeN2P_S_#$bTak>{`BnRo_ldfShI*uRWl~9=gB)Z zyUfBnm04a9z=dM*yxN7j?#r7n2{CF=U%wqGw8XZL;Ps4-Xj{ys=T8Oqi6bH${c3X@ z&JWL@AU(eh<`)Crj6`}LT4hdU$Zzmt~!vXYh+e==9; zpq%IsqdAdeX(K1GF(r60>30@PY26r!#6 zSz5^t#kKROFqrx2%!@G|nb3;<<`9n@jB3tOD@RvqV?Xybq-m6)=n-*|>{No512G8h zsrvZRn;K_q`f0BLRUymzB(WL0o5Be>9C;MTxzJ|xzRn$s_k#ipi zd_Q&=-3~XeC!rS(BQBJfe9QM7%To>GYuY&vzG{o0P5tKuCwB+cOyaqjW~GTWd;64` zp3pbPt>Izt&i}`k0nzg?O=%SVpZB{)P=!ua_e+PY?V!?T>q1) z+08e$3xA@#G$z33830MfLoy2kJ^0B3-pUUi=ztS+;xRZrEb$Hv^bnO4SP4Lsc!m)k zry&8+!RxfNeJm=}n3lVY--0IFg1~Du@xk#0R0F`Y1s?neghdVGCis@oYI6TMIrtMm z2obDefR^~R!R(_4Esw@i$` zC4oj`h5ij+E|UYDicPaZrSApAOZP{=^fscGvIe6Uh_eQQmGN&kwCXrjq9cy|YdoZG z33@7Ej+*9Yo2|b|jI{hFfG5S8bHRzvUsS+N6T3l4>Vc5mW*bQTg& zq57JU8`N@s;7?^)vsU@GCN4I`{5=@sjaA7PbhpY5H>c*q{q2tM)T6u4Lz^2s7 zwTK3Vtkbw&5y?ErG*xrehab+7yJR8@I_fGSIIP0)`c|YG0wLdkxhsi)xE~(E6kr+* zHy4qhSy;PjqlKC$A+72E{7Q`+hF|u*SQ_q4hTaz}j|8XX2KC*pr2}355F&2_4kNnI zmO*;(i8ntcpa|n-1jwo20fymERj%tD zbByFO5G=rUef=_nuk)ruv^i^$L~~%{V>ALrpOl%%h#2awP799=Uw>Tzaq+FdzdQQY zzkZ!nX&zJhnL>g%2@}kAo|nG*##D9vf{asX5P#cuOfe4M=gzo>UnY^g;(tj> z!8e1RYdCNC!n=!{W6pD%NsZR!H{KjJQty1PW^P<|iyYFTniHiXS8S$itZI$-w66Z8$3bT;IIRd8>QrbQW zttT&YD1~q*o7v{Mt5&Wq6j#AD!~eULx&@! zEwT5!@1>PE;|mUZA?B^NOc9pXvV-(783~1CqidMniFhs!IzO_sm#5?SYmt;3c-u8y zpH_1OB-R@&ITSKCi&FTkIF?XPcyz|*D}_bPf2G8ks2as~#tD4~-85(K5t-x3wR~Gt zN+72qOzn)g=3rB8p~ z3w4-tkCTEg0ggo&sY4_O=U{}E+81Wg)hJa9%??S|pJxXzGY7A{PK#7RC3=}sROiwM zhwP);;P;Ja?V!JK8g9OLT{>T0f@84k0?$SMu#dlPaZ%S+3<{Ga8@e%MJJOCB3x*hf zzjOBn5_&*(}Ov(ZyB0?TIJy zVOp2u-(kZuB#F=(e=zOV>v?Z{A;h(cl9RbzC~vZxM@SmMVf8>S;vEV$DSBA3R4bBg zpPimLB_zk2t5-WHWk?frJmw-eu!6-b(j!#`iS`7bonq%Y05(X^R33)^*{bJr2ahzZ0Q$_ z1}SYppr>>wHgr+Q8Z1)6057f#87(QQWF=_oG!H5Ppm&@?9nh)SX+ltUrD^b?Vmx6uDQ? zjqBng6Wo~vjrK|Scq1^VqXR% zB$B>*khUc7;u3n6f{$s}s!e(`cJ_8iB9qN}>*IOD7jx`VtUrlzG?i#rA04?Y$5Q%F z_arAYm-7nrO5bCSrF+aY}~Y2EG6nmh(Sy$_C3wCnjTh9#~qXKRKyOU3|Eo5o1EYyrEf*+!Wxe*R< z>RjF56$#=OB4v+7KB|eiPQA9+K3#c^DW^W7LKSZZ_Qnyq_lV0T!Xi6`qEUcB4Ij(oh}D}tcpHIW1QVedQ+{Uz)ww2OSU|*b#E?Gg zfuD#W_s7SiHG2ry8MhB}yUY{l1e6aXSv1#odQY2RwP!V{eGi=Nnp>UYZS@e+dl9=J ztjhSA8V?e#POz~w*mn4`%Ajpk_*wCr3QFZCp}!$6#AH zTe2L67uf}{I7KWvaxb8R8}7Sp^F+HVrQaJl;q(o*Y+MYsf(73_0FQF4?L%)$Ddfyj zvnuIFZ}Ex@BX{3Qj=L#}jG6N_%@6lf7XR|`9&JygV7Iwj{VMy^GgWHyP0= z#1jIfEE32mQ}pe^5pDek6X(C5u%K(SS*}-_rZ@gNT99J)2GHp-(s&>;q@^P*B5$!2BBRWi>=r`s+KNM%J zn!|!NsXe4-dQ!A(($b25F#9G$VTvFywXsi~l3SBOjV;p`IUS7qEy8g!xxR@ZMKiPX zYUC04Mg0p<$!%3ryrq3(Rw~o{)7EDO%gwRdG1;89fd=V(D{0#fb!X%3N|W`zhO5+x zX@x#rN+?|>@bL}Hd@=ZEDeVp;WlI#oCJqO)SUF2qjM)RupX3Wn9A7z`DH1m*+AEER zGm4HO@usxDzZemn#au>gvR?QNSC}mDP2{{#7!TIznBCIwk@WKIkn4V>>IkfF?vLI& ztB@)5P>}zaaxi2@U9Ho2Ha)N;Sn{%q0_QBTrl}4pp!*jiiiIc(?Zoc6hOwj^@IEE?|4x30e|Bk_oBy{el+6VZmT_9fAr6Y{MoBO6OSbF{H)W?7i3K;69b`y-5!pNEY&O6d! z$Qlx)2sS(u>{~G+;>AjU#t$G9^auhM0{a6n@Q&PifS&SKK^3M40H12`?gg@^;Q~@u zsT;?_HA_b@04?@cMR$+x`tgO53k}zh9k_6M1A#8Babkjo+=Cx+B|%epb)xyU>m&%a zk+{?Cc3~L27$u z*^{NZ3?Pbjanjpxl*jk`+%$jcG=${j9h)NYLJ4_S``geo1zm{Y5zrGC^!UC6a;bK6 zYH%!K*&jy$Fd}*v2qDI1gtC$;n&jroS}M8Tr?OJ--|1t+4-vh-q&~VaHkW&s6?6v+ zI!3qDzQ2^AhiC7fKm>E{xc5)v7mltVfx5@yC%ZKIJ{eWG_&h$p$$!FMwKNTB^gNa> zQq3=GRK#%U)qabZ-lOkh*sMS7;~>b`y}Zx!me&%$m&bY)@KJb3om2OGeqOSOUZln> zy$od`3yfd^_-xpJFWuIw?tKCxt#y^b_?MpLcR9tE#P@qm)r+Ct{*uVwJ8%uk`0B_6 zU z+7PBgrIpsVzBk5&0zfYJwZMRG>JZ3)s3#rKwFn~i#F+3>uV^c-^RJHErS9M(=3%ug zGOh2s9s=1{i25--4Z*jJVSE>E3+ZFKxBgXtD}{`tm?zuE2d3pbC%~Zj2I+kv6@aC7 z4W~Ah)UA8$dRkjS1;gsgy7w{h4^p&)A%b+T+VyAeBge9$_?o}mi!FR?{*}g>2e4a2 zjHT{nfh83Sk1A2v?oNN&#NdE=Rpv4H{VwcM%h7}>H7|&{IQXVl(k#r+2X~>^n?b6E zJOl}`7fta>$;&JEi-GVzMa#K-kQ%=cbkXy9pzerH>w1nWy{a+OkhOZp9 z!2;=_QJLGmrw35Io0zX3a+sGYpU+;lANehx*2;JPWTXfFD|xiUWiA}JR^tj1Eu;lc%M+U6A8-;iKxQyX>Sh1DlM{%GVK=y~Mae>_gSS$O+IZUy%bU)l zW}Sg@;`OV}=?U3m2qN~!M4BL*k?f-IRLx;cpREe2(mV2TWMIYqQ*Y!L@=Z~nOK?Gz zBOn2L)3BA>BWKmMCA(&sBZSY1e-1NkgD-`i_mNcZ`w8Y`efLhyO(luB(&d+M)(^8^ z<#F;YURV>Ej`?H5FcY3kRK;u_uC^qKZI?6`o%9P6uZ#|E*M4d5(;$i|EubFuYg;pe zU%=NB(W*wVtVLilb9k=+WY-_jNwbY-5l4 zKq`hN>Qvx}iz-V|^t;9RR{A=2624ZXf1{{?LClkj+B|syV2((48-T{QQN; zj9+;*n^G08anp`+n({l>P!+vmYj#^br772*5F@CzSheGX2{I)q@k>}e-K(Dq)`o*p z7Nz_AWaU%aZJJL?LM!Q za7KAOdry|T!0t!Z^zGR0sUxyCV|cCy0}f|YXNv1g`OQlAn>nwSGagvWwj{5={?bS- z;eTc?WYC^k?o z?!kEvwI=0sXsZdEW$F915f|JVqFxC-;kpUEY`!?$o2s}1g1;QY!F zTX#AVIGc)YRapIzTPj=z%vtEc$rY$P7N5_>s|hdOop_RyGIkMeZ1%8UUH86b>#2?$ zoQgwwO{2SU?7}L^{VJhkj~OvjxYi7LJ9lQFa(hNgly8`)Sw4y`Q9Cx0JndMRzq<6z zA@}PNYd%~^aV&uU9yE!Mp{pO94IRUV3Infcbx0__a}wL_Q)AH%as3l2Q>XKe3L=O+ z4>4^%OnjdzS7xM=>a?xmkD}gvk)<)+So-{F`Htv5g&1o`&PUA)tcqeg82kD0tq(Z! zajNm{E%*B!e^_vCBqB9_AqpO}we{V_>%tJMa$Rm17kpi87TjhA?hw%`RCH4uQ~Usm zM~)r~G;0&lzP-9L3&QR~gWXSU)H|65y!_ zOuO!%*QR3JG%Va)zbnVNyU$8gj$;7(FIE$ND8Qab%T5IDSKX++rNs~Xh>yTN_AS?s zhW#;xQ{~!A#~C32gFur6aDKNRf~%`z5eyuZq88{!^c$RnBbyv2=f2k!qECM=qERp@ z3?9jLq((ZS{<^wKo1hR8bNO56Bf3VlPWfK@1+ig}%!TPy6nOi#wm|A$$o!U;z1Qm2 zSYZz;Mu1ZMSPHRnfzW1-*>Hy zttE}6<(%h8O4Gz>-d0S_`{OkINt}LxC}bF!Wyw1TI0YNuA(8TK*Dt8S2<_6HnobR( zxl`mEGp#mkCe?L5$W1+ER`ReY%|v=LqI5-HSHt)rt#tX#0B#*U#@A!#mp7gTacs{q z(Ox?o=xsWdQTbz}WVamHlP7WR&Uyjt$?u$rTSMQ4IBth~(?;i zgx1fgA@_em37s+TP)1G}!Vfp5gp|@sMN-Y=0bwc7L}rwklIh-h9^Bu*6OngSLSrVC zkz|Z1>xwA-iTab-@V@7yhTYU|J`*i?%Bi6LdCWCaAorJ;EsdyZ(>UhS1`OTz_w*Zj z1iZ7K)xyOM&c+U?D=z<_2C0XnJwos;CrL?|CgApLaH1gJv2@Q3!+^Hsz9oAM1-J6sm%W&C zQq}0BR11IlqJqQB*Nw)I2E!O)%7{bqT<;+#5YHLO<>lPOR2o|u^*i}bC+$m;Ay3=r zb%kqKCFT~E+0(ME+;AvZWl8+W}|Zxg?ImCYZB zY8@BHJ`YIi&=3-X+@DxYx+S+KzL`>tBcMAR`CR47#7??Z2Ut1p2jGWHsta&8j49&z zOdKh+tEsE5Dni;()&o8NC9euO%~d`Azzk%u(j`SZ{|NFwX4mqw3oGXpV6!O#kGFww zORz?>0`a@f>m?KQBqgweuevmm%cWSlU9KP52koEq!K=Sq+?{)l(oVxcmWHt#Iq=Bn zh_fCr7W3m6q(NFP+b_KXCwj=!A$7Yi7uIcrkL_ejrTbvd{&yNdAb z`A>aV{T786Xyvq)?k+<)@18nt5ULpkX;Xm$Xz(q`NRp%!hBFC1Aah-m;eca4&p`79)c3LM3vm<7C{}jJc7ygB1 z#9gZ*va!+H+Tw>)5Zs#<1t76z3`qc{rw2>nJz#1Acvx@GR%j|PGyo@!I8we^fILf6 zKU*J0ev;fDd5Nma=R@JHkh5Bp>Nk2mHcx$0xmWSM=8Zjy=*np^mN^|VO>Yx**(v1} z)!OScR>9!6VpN%>SNCNgjvM;)2#$030V^y8|$_($WD(jPYBO0M8B*3qW>o zKgtIjB1)-CJ$`yRQhes5GpArvn7v|1%{apBddKTXTohCmGhlG>}v&a@SceFLBtot4HEub6HZC`7&WzEgKqP#GsD5-w7I-n`Abfg;}-S~hDP(YnXA!2s3tM)(@%Jxg;^Utcd zbXFX^0AWLR-bMFMds3q^6tM~jQZlusXugpkJ5$>olV7bJEL4S|IjJ$fB9?p!i%V}179Zx z%UB&5^jKRJTR1M3?`(4-S)R%3baE?F&MfLh6|9X7LFVU6GUdyuq~3bdpX0yJyx_}n zageRr8XPKny!rAu4RBHwhQ-O&`=jngd~OgaZ>^Ya(K>JUt!(HA&X=C=HR__+igq|kKPH!dY8wVu@~2xB5zWCCPd`;^$C^H7BZJl{bY2CmmTy8|B929*osz> zR}c@58>nEJu=^2BuG6jj5Sd8VhY+Uyj)GRfZJJjJJWbgUmNEJhnT(0m_D}LmW}Q0a z@Temg|Jv>^Oz->9G^9FW#}p*n1Z7mqujcDP$96mY9?^%U5B=#v^S*U0p=VJ< zuMj?h3dJGPMaGcPW4gJgA-w`{-|87r%%y0SuY1z*Q!8mODd_9rJQs#}GBlW$f7aPy zW~uS_WdS{Jd6!LyC%mRtS+oVz?7}W_{FRA_p*GT7p#FU{j603nz_L!nWlB0gwGw4{ z;U=xLCBN3A$Dj~|8%}tVeVcok0t+H6_+k`^q@0UKJoIihq(JvYyaVJ&cru~Hh z9+x%RVwB$2RVY=urmH_D0p?P_3Is>MJyf+sFE6Biao2Wr>6Kke$sh8DKk+ltzL7we z5NU9(a5l3VA`?A*Ki+17YMB3|7jbZicU5W~bb0~0TDyDKkB!>bEBYeK$U*t*u+JO? zt(+HPN3pDvzsf~Kgx(5HS*`Oxf{vlsg-Qzm688$DjO<;D5n+dbBLHJs-_<4Jo4m4< zT>=L1X7(Cb=LA3iQQ+P_d4R76K#z`!OM6UH^8nHJ8fY{nN;sVIFD(u#<|}kyvXH<4 zMVQlo7IDM@h=1VjJ5`8al(Fl4v%YwlV@;?zdI)moHGlz0a}p&5*jEw43B|@-pyTj{ zTVrzHwgS1RLpitP$8HJAZkE0o>#Ef8f7ozlG0XgtD#G}c z+L`{<9$JugqJz1j1;)}2wDjk|3CMi(qNak1XR)nj5KQY%Q+0p%OC+-yB{)Nvcmj;v zy{*oQ5}v#tOM1O{{HmufeE3llFa8&3Nu_=)!*q$>GJ|y<{MKgu%VK!lYYP#9%HTe8 zVNL|%0|hzSUKW~;x*g_r_Gmy(-80jY1ib+x{+DQl>_a+=sS-il(^E?hXL=<`koj_~!oY@cEm;0$*a^1VM%5F*ZX8CGe|;gJk&Ii@VZQNFsBMEYVbxl#29 zs^b+J87!tBBE^K?*JrME6-Ft8d_`XRQ+aUxI4sO2gVIJjG!kimz;#`JQXM-a8T8Oc`IrLKTiP^xDF0je znT;(oUzfQv#n=b2tUujVgY@W6<+8j!EI7N0P}Y|YV`UPK7|o?0QE0g(3Cu2O{?aQz zUR&=iy?i$8;zr@ft*yT;AQG*$;%p6^qT!=&eA#fCTU7XL@BKpXjGHa&wz;Umtmsy7 zPDop6tRuiat9uj(F)l^MqQ-+OCs1bgc4HZ=0%AF{rtmY);jn+C^Rp_(+Ds@Xxy!z|Nk-L&dTpiqu(UFg z(#!32r=VloBpH7D#PO+El1iqEV;B4QOt3nV`GBj#SVY!Gjg{d@{T)Rd`Vt{SE4$2B zA$p`y^X&9k0UtIg4G)kv-=z85e!7H&Li)bU?sR5OE|LFqSl=DY>hB-sW@BE8%2qQ< zxM&;KD%#pzbu-AiaEl*;Z{wi_5IB$v)E&b~%lk(9KI4arS37pkF?;5($_RA6t}fYN;h51?=iX|?y!3J}XI2G~E?QPHkV+)@-SoV=^@M)TlebHK5N}<5&e9%YN?bRt zyAWGq)j2p%4jT^WvgaohAY1u7_uOLCyHj}Hw)nR(JM>`g>l?<7>4iZP(|oVrbtIyr zNd2|{|G7ZN^8fY&E_~=Z_(ZgKX1#xWTvAVu!;HnL<99};41|!vT;Vds_cZan=Tx^o zkXB+g{j>LMdFC3oDAD7$5}$|wPp}?B0ArMkCip^2`slV?(_gPfopo#UByTUUTz~vd zWjt6u5NzGMr7KZ5bf#mSS|@&42?31b5?5(VVW9B+a5y;u3}h~)-7AY>b-8-{N3Zn` z(SA@AkHv8Bqn!Ik=dz-wvP-92tGohsUr!tNAvQp>crUuD&X>L}{OMdJQdY=?yT5Va zn9al4^|xbS2`Zi9YM8-9ib=2B>@^plT#I6!sAJA=d2(sx_B?nq4_tA|TOlsbS*V6) z{r(6Cpsez66m(b}9(e{Xi@RP)2 zLDl13Uo4t6j7)$u<#R`Mse2<`=|k#um(=y6k;1;cNGyD$3kw5T{Vl6|9Z^KLglS$6 zLXY6S0_j^N)vf#Ee3@Ro2GDb?tcsc|z^!BCBd~^V!;kMhX1Qm=)RvZEy6sG>Ai~b0 zA+oFW_pb2ofuJjMe9~t5wb|p9`MaK1@Px_kaOA5jg%@I(;GI&G{QOoQra>x#y`m4^ zb97q#=zU+xA>QKoX_k01X(g|-U{N(;+q+9Iv4FI|l1eBIA|fo^ogy8I zlypgVmmnw|5=)AJNH<7GcY}b0(jEIB^!wiT{jPtm>o7C>%*+YSnRw=T?pqw02lVfr zgk#{{b6Ip)8({)-5EvB{PuB<_{AuL^RuI`nHAeau3i>a%#`hY0Qt14AQ4gk3KAvwT zENJ^9#?7GG*JZSja9wfKSTa)U)-3XROc&_=kx5% zz^^(1m4VgzJ`RK4)Ctc^N7J2;YXEB8&#!bmuPdQi9(U6N1gxPdN8#qV!QgVGzyZ{a z7p)zLw}s_+ycTcrN8MMSqZe=zxa2UG;F;ild{@!hOCp{EoneZDcOuE-O}xJ_4CClo z?sHIAhyg1xkLXo~C6Y2BoqlBVx{O)t5-CS%AeeoR1J4u5sa>QC-}hZ<_~u=C;f0Sp z(Qabs5|dYSAq=U!dKpzQyqT0J7b?_f9JJ1^N!f^c9}Po%`4zx#y?tKrYxefb2KH5I z_UwlMB5(l7Cn`qaaOxOZu=Fm{%fQmDDf z1HhcG2xh!mc0bD=z${M?H$Ijm49p@}7<8Y=zSGYzpaDI=Q5Yj6*tEj2 zZRm3-xVUvU3(Y~jWwmu7gcAfpLUgDaSbu)Dm$o}D3@M9CP70p3)|mK2?L-wB-P$>U z-2cKbAmLnu)1__F7)7AIt2|xwyyUYLfs5#U`j%|t6@&_aTzZXdEQm!-9=zH>{RkJ_ zE_u{8RG3aD_>Kg{qIUIMPkPRbDN_0(TkL#(qhxHt+-S=@L0WNRWcnK?zYM6`KVt2| zy9!l@QO{F}PNjxuiW}bzQk&Z5_hH?jn80%DUZObNbH;qhgz@b8?7Jv&NSn^>j8vZrz1#O|3UI(^5i1a4_b&{17YMi>_SL8|D0ny zrcjWAxEx#u@JleyAh(*myic&2(0VOtn>BMi($*C^16qEV* zM}m>jMDp@U%N2)Cogou>IOAg2G2%-8gnu4$W>Q9?(*DJd))}Ai$DpPy=BISB7Ktkr z`CpcD&;s;n2CC#ZwD!c20JUsE`%Jlo2C^^f0NF~0Mq~G!^8xDme8F2w?JT0soxs(1 zDX2_sG7|Oj2p`s$llJy~Rt{Q{p?osUS<{q@c437h}!@_?8s zghPU>`o0(;M46!~otpYN9N;-d14yl!fUeIU%io{xFY@+1F+g>KuD)1zi_TYzrPy!6}qg#Z^vUR)0T`HQ019jp;#wF6KC1=(AI8A69vCazfLXpQpnL=B zmjdkpY9PpzFxDy1{9a&73lcabpql&D1kC?!=!&tycmUTJ&^iPHbn`!flNkUWIoLF< zz(oL8{eW)B9d>w|f%^j-QcURF59mSeXK3IhI)0!5FM4)uQ4VajpbAxTFIXT*f+nqE zGxM^I+ldO?hS-nF0PO|({xYVFE!}$>C0N@)`SD?_|5EcRZ4k~T$rXL_>sHY- z`$wdfTvSIivG*6|W~R2@6u+5ZgHX3wVmeEO1^Kd%>C7oP?$|?BJ_yPE3~m3w-3732 zf81(6L&ioHvYpBagq_WA9nR@cK`cJZ?V+Pp5G@d3I7MCA9{pOhkF!~F#lo6l;1LqT zsh8Tb=~LWHsRU_9#U;|TS2*$jb9_Oc`!Csoi|*u0sE|S$A3w1Y6f1cJe81}YasH&uYf-1)fHVUFF*eqNkqp4U&U-#EjB9CNHB)1nNAI40Fa%9|H zu?L92cxGBU5jzeh+)Ksj9M@fB2C+xxE&kws%98k0qb6evCvg@IO@E=_xOSLxF5G>M%$BA;FDl@$#X>Iw-%mjFxTQ0pEl9sn|%K+H!u;bnH8Dc4Q}&HPHmBz7QIm+DqzLFY)8IT`$G9$zpTf6S|@McVM+YKnr~5yu&sT==b@OThNOY z>V9eOx~PVS)!X>UW61bA>ngdI@xE#RYo_Va()6VNv%$>*O66B;%6sU5Ti=Jn)$ngY zDqZOy1}d<;j|QD!Uh0^L1SR)QTP4{j!=3m*f^oRB@VXlt55dN-$gk=lbwh&RmzXg) z2!l*;-Y8vQ&qQ-ioBQT{A3G!UqNcJHfDCje3-CB_;Yt^8hpv?2>5`#Azqbz^n)|V) zWXW6qT$*#FKqwtMqpJ&H=fI@tI=_}_DW6Nk0LDe~WFJVkLL-M9USYcv`~II1WAV?3 zk^8?>d0@ogINOx+ z&wRmt6BAi*BYGBQKnezkKaTbyU(+WC6OEs1!IRI`>|=}urQ>Hkp58^FH0A2sk;n=` z!*L7@;>1poz-*?5+WO940dH4P*8cd<-08f44$B49CJ6Lo%|H*6h9+D*L<_qCW{$AK zj=0b-UFpq2)bJuwz#>UsU0{XPQmtD|SGKWp}_N z^Kpox#7BRKTTo-m5X>)#F2MM%!tCZJHGp%n*f)+4F=C;O@Y_nsR%!l-LR-)X{I>kd z2Eu5y(UeCJn-uP&b7M5<<-NIl$AWe%?!h>O@aI?jI z0)cq0UzL@J4gbe!RZ_IZyPxA+?0&?#RpzLUPYm*`eb(+Tx_*uZ*X)?r;GiXHOz3@r zrm+ygJ6$vXWd8`Ttaxr=TP?kwl|a{TMmx;`+=!fMD2bxW#^WiNvalbbX-HU}N=3cm=_I+qfQS ztDn2!lS!ZMkmQNXGKJUHkv(T*2Ijlmam8rzW9|w$dPQ6KgW*PjQ%_g5$&=ZaVpmZ7 zg5_OZGQ2VGU-!qX#IZ(q(wVz44UU@^eVkZuJ-jGLcr5;H~vv1M6Y$_5R(1JfYjgqRbL?7D2eYD`^7A9ziUI=UiI( zsW#7h%|$-grR7XN3z^T;V6F_w%uL8Uo$*aVqYB`-C#owdcy4k7`J4<% zWC=a9!O-9%j65szrWjqUb-l1uCH=(W)16GB;P}eq>DyOJpTZ^9y-4I-CTiLDg6LuO zmwQd}`S2PG;Vw%I4Gs((dpO$66WLqCG;dX5_|=jmoCD;za%=@UaB=F1B}X2_|Ncp> zSrC9N@8D!sJDHr2NB-uQW~?wNKq@))f(b`4j*WvT{n+#=G@y*|13WH>efR=IR-_w- zpA#4U>Fhm?is}eP42+QK=JdbX>hN$0M6h0D z;kL{Bak!6J9JN4Qkqa4n+$)>;!dP;Fbp05V$X9EVuVPir4DX+FL3OY-WR3s@G>fvn z2qqu$%?ni3wDx-};S4yx_cS{habsM=t zlk7f=f^ks&A(lg}o~+SU{+hYDy^khl5*X2EEev_v-C~vC>AgVvWZI;-*9PMew$w6u z9k{$t!%nPI@V2`Vha1L@2QsMS3^TTZynnA1*(L2!SV6~!Cu4KUQTuvT^0`z!%A&M` zY_x2{Q?WPv*6AT^FZ{g?Dr*GkJbNU+F&+7KF<<8L z`7g2Jea#vyI|!912g`3En>qO2y+%4j6dG(OSL#AIDTd-OL^+PXi&)qC_ROR_dma^%U7z-J1%aUh} z2M++0>@5qyr2`Xx9JwGaTI^XqT zX3=b<384M4M|;|BHVzHs2f1xM9rr@s_npdq19I7msJn9`>sTDgJg|t? zf_MaMmTsi<9Qi=OdlwJ2lCNZG!u)0*UkN4oV@Aabw7G3Vh$PAvs^1ZBn=9|dUx~AbWdU9}jX)gKX?9{ZE==?in2-=*dClF1sf3Os@I(3fM{_O_5BEJmH%mL_022C(7DTJW=<(-n9dVC7u87&cUDNM`7Dd#zL5yGmnSw-spS_;6Hv{T37+~cFOnl`L8_Q;QZ+E z3Bp9E_IO=r(jw|GTT&>_sThy4l`KE5ApY*}R!Sp)Ls#ponA-WcCRDS|QaiVZx2E!m zLH}3-2TPhQsm3-iCSQOBy@1t{1CxTbp&=B^%3L93crW9n-0gG*c(p+1uCKhC zFWIov;uPR8-^<{IX-;3eH;4|~JWSl~1UapVOD3Y;J!Y_slLa4PVSM^=5n2K_otI%j zqD<7=%QwjZs8tTI%9PNza_<79<}jWJyP!vtAwEI_<$KuG-v|5AM3 za_-I#ox)UHucPE!|B#kk3`MiI0mmO~pB)(7r^TA7^7Thp$4V#G?{+TlYY=R#gY zK|pU^kq1Y%7>B3#Y9^TT%j?CLat}H634>x_UYINe9(*4>cP5fu4>tmuNzO|@e2OC= z4z)O4zVXz;ya)dmUK@@%G4~xm$Z1TT|zOX)e7-%<&1s~*0w8TqH-b@+xgc&Megw6wd3a}$>}X($7DfuuLrhW4 z$)445uXLS$ai=H#iRJgSl!8Tjajs2vY4#_DF?idNQ9Z9zxs%n5p)wq__k~2zbnwX8 zxwjk>sD%$zBmMIBj~5Ma?)CPJs~!-yoFAP*b>Qs8*X#8Xb&7;R<&bwFyBvXQYW@Iy z5K3?Y_a+_}-~;k5NM@@|_`ncB&u6~cmYjTM?uB%1Ztqt7U83X)Fb)=2B~?iT6KIx< znG%T^Q`kdah~$=U!%}gUt0lS>yDE;SmHa-sXf|rL&dr-;!<$Ji&f@A|kp-Hz$`o>q z8tG;=_ig6Cex}e*`#W;k7%Y4qo5^~L^YW$OWv?brTW6qM1FsI~mVS!l?ZBrRDvTzg~tI%E9a3p=9u_GOimvo!f?rTE^^n2ZFf!1`XR z>Peb9%TI&fV|<&Mj3$ezac==ZZh)zmk4kT;E?l+Cl;%=0<0vD|f{M(t`1Ew;>3A^w z{|sh-+$yzK|99n8Ld!&sLl=S%;7$slL-uSqu|?53+f-RBXkwFKT5Sg?3mou#(0CX&gwLovf6;j}>;Kz5Xs&T&6 z0XfjseFo#z$`Lmdl@&AjWdk7eL8MB6ZiNmG%rjBJI+DJ(6gr{pOKhTNT!&f4Xj=9Z z=|ziGy=;ZFk5Ean`r#lVT?!~W6$bwe_OSloO`+Nv#%leb=e5?=?EcX9*8I5#iP9O( zMTMG{aZW~H_G#n(e2SsbMQ&Ek0TR#FD9LxphkZyC-JecQvn)`6aOoX$tZ;UjoPf7> ztfYZ}kanqfY%!6AmPi)tCp~ywtR9?7<5M||OoM*R?KJBxD)W^jG-G_FL2#AtEgGN2 z1&QG(SXDnvRh#{hl;e^9ea^7jbFBEYwDHH4{OgP2B_Hq_+f0+@{CkhwW2kH-=CbNQ z2e2Ta1|AL(i&qH+p`S32grB*W08lZ6Fwn^IL+Nm-)g`fO_*Tl3y({^_H>+EP1VvxZ z@!wx*$%tznp^f6^!Jmz+93!X+#UyT=klvg}B(AKb@V7p~wCw22&hk1CP{I&T0APiS zP%feOM4jj8_$33$R|DjwD${BlLqA6ADY znR7lrN8HFXOqQ%AFY<+FTBW)(+xMd~pn+R8#^2+bRF2{Mayb?)R^RUfS2gzpyaBu_ z1;Seak3Wy8e5J97XN*Rw@wb*sM{h?N<$aI%RrdMogp}JRb1jdV5Tu~HcAm>-_1ULy3zkFdrc#(hvqeNi7bv31 zXODE(qal$yhE^J7*iu(IY?30r%~z>u7JQbdYk`%Qe#K@O@>8y9l@!n`5&fbRT;|wW z7^uudR~#-jf32b#(YRGGGtyJEeU|g36fXD$!_a1qN5s!AZW~AC**udO1>hd}yiYq2 z=380t4)3E?9=UM?`!cro6I(lTD!|7&f}Bkg&w8uFGt3fF8m`1H%}rc*S9({QxcTv9CRwKF_mu>9a3Q)Gmz_LN8+}%0Xa^ zZmL~g$)?i$4v;vwymzIFFaems#aZ9ky}(GSIn}WTF8PUL z@*0kVzI^PtvP@nS5o_|B*mEFWK>hAlt4V#p+=cygC*dS=Tzprd(pBr>bi-RYw1YbTc#xEk_b}cR9%<%k0e@-tHRa1ivK=-iJn84K#@PW^!XR zAdnq7QU^jo3&(-z6HAuIYI@P(ShS*hOJ-lI=BrVTUNx%XF%}ayT11eddJ!Y5i|(F< zB)Q*FLqFBriIUOj&$w6=T7k(t2R6c)78A110_+5<-fj-xg58At>3}QTVL$$40mv|* zKPGg?#s_LlYQk_)DZofbW8%NMn zN_Z?^R1cO?3iwp85OS7R$O^SuSc<5k$)RzOS4yitvnTOEYaiZdO(Z9WNhTQwXTgs} zZR*tbHzfLSSa@zY2Ek-8-jMhuiLKk8q~A( z%6}%|hJL&`s4G%0PiBXsmhpAZoC}-L0a|yj!X{+KXPiszVHyPSMWj$aDgsB(Lcm{? z)s8!f=ZCbQ!Kc>)HEzUZM>7o4mnVMh&Q76MbIqrvN53IS;+rG#-mM5<)b~K-xjlWj z7+$TXaJ4S*1kBFz@X=Zk0*1`7yP@jSTCwJPTVW-I{_iu9C}Czm^F@bR)MiA40tEH| zU!d@d9;1hQCv0lM1<4ytLVF4NSVtaUz>GI}>nZ8A>K>qD9kM<5Q5(bjafCYc(SJ%@ zCv@0NgBZQ){}lYduBd*#IO(Q_GBD#Lkau1kKjPZYM7;ur7G4H`vaNQ$MLzWqB}3;& zv>;qiW6a-Q-%~qK4*%m|Ht2D3Rl@ zX#1O}{n_)zhlJqeLBcM{@Qa;v|)LzaM%EIsqAr~Ua%?`Y6P7UkEEZTdgA zK?iks>FWERwn~aKStKdGuAop?Qwt<|SrS?-cZ0+A1c2oeU_Mf;T|yX{JUG>R9WDFl zRSQKS8maNF8vg@3so`kc#2LKFkFB(`;ZFDBlVh2B%hr!2(_47DtnInLGTuqZWro=I zv2b$s1?{%!#%|Q(iXci6ugL~0s95#}c`P3!v+w+Olfpo>h>=Raj}s0fe~$Fq$mk54 zwAv6{YbP@@dVB4T=&X?MR$fFQ33CJCaqlawSgoJu2b2pA^~l2ebwnwDGSa>)-1a7) z=I6KLt>T7q&fcwIu6go=*@%`2cCwLkp@u1S`-|z9?^o3;OhZADcvu z>P6U1X%YZWW*le@=YS+4P#Kct?=LOXCsA!1F**kOVWg-orPi)6V6f0<>J482R06X3pWwJ}@oxv)U`*W7MYNAL# z^~d)6wnOVCYw~3W6+J%^y#>qSF1hmpBgD?elWID%SW$%pPj^!SO+xMh9oYJBAyYTx zhbSF^60{#(2P4o?ZUB_#BLM}9>eL92Bmwl%alNM@=gwtUKF`Y%Dqu9|PuZtO>%H zaRr9xX^^F#Wg$sX){=JdfN2Z8PW|gPU*&Ivary&=+1S7(Wr{j1jFh=Di)@l1_ z_0YCK1$M!du}aE=FnSRt^NNt271I$ek}{EVFCvZ!$`1m%Q*j1cj5h)y1>|hOz3;Xh z+9f#U8gCeeV^8nN#>7xVG6$>t^bNMt9vY`g18Cgaujse?8NmvUbB;yxL-{ODUUQ1; zDPzY=tcy*fdE8s36hX&ffPVBtep$uCR2%{MU6!B{{;{#nHQNy2I?K0F%2syHTAUWl zdxw4WPk2_b-!axR{GemKDEyw5W-zkG%{|Rs(y>9+Seno0;=^NiXd>K=AuMkR@m^IQ zxU)eZ_h3sc8gQ#;Nh3k&>NG7;{4R`!%#AZxN{l=a!^xTf^0T2Vy>)~2c%YK90n zQR#I(*t}qTrl$Mh3#5VsHPU%e?e*pRd+dfB=u7Q~EW(T&VcL*{IsM7@T;b>p^W*zq z<>gMLCfYQIx6Mlrn-dAsZkZwf6aLG%!vX>}w*VHI1R(y0;R8s6KuaK2;O{NF$t@EJ zAp2A1zsx9Xf92@8KztWC{tZhYb|7iXR z3n;g5Wq->2w=TzDIeI1#|HC2zq;Km27B7G5-d+zN`%~t>b-Dh^|1i`1%Qyo32-M~N zD+7N5VnFu)vDfhYm80hYF&sGl4ND+iAOl=8*cgZb*`G51July1IeHop(*ei7VF|k0rlK#m>^#Q(6G+!g_@8BnzRse8-F0?7W9`EOkS=JikAL?C7W zj(@`v=rNGFJ#PjO12Xj6GXJeB1mtedn+n8?x1xW-66gt#24oOoAO>WA%KW#k@L%~K z79Xa6>fI)mKu`b5ATmG<$o@a3ACbRu^bbJH3>^Q4C6FkPxjiowhymH3GXFg<;;;M< zThc9a&%a>_BnD(|>jLi-2$20L1N`zoMV3K$KuZ5B&b8J)9IALQGX42Lkm1?cKgB|J)alzis=UYX#ct1@iZS z<8S!4y<0}CKkZ=}WA0%Y{}Jy1<@22!`*@1FqVw}Hfi|H*=Y{1}kF{YL+Wf7>Gje)xO8_Ly1N6}MtA z8E}8M-|Ox1C;U(S+wb&$^59$MBCh|*f^LDTdojDDiSYbzAtpXly`|%N*y>VKLNqa$ zQTypQ2rMitW(8Z1 z!H1r6^)Q7v-29!Z^LJI*Fof11e_~cy`VuhWXFXJg*HFM1Y^wJc#%YnFu~D zUXLs>NahD;!3#f*lpN+(wjb}P6Y;S*MV%Vb=H-cU+DL{86uRUuGt|T#pN)Ll#*gPT z4AD3Y$#Kc6Qz~P{No~7_xrl69*!q+=M*eTo4+4R*}0To{` zelpeK41bYygV8sKg)@7|-SxPM&v^^sXk_b)Y9VM3sjx6s<%yEUmsDETcS-f_xoo#& zTr*`1P83Z^nY~ozVUO*QUgZ@oODHWDwlKxqMU>41-lyUY z!4eB{v1Ek#r<;I%Nti(F5_dH?hVZb0V!ccfFxJ)p`MW&=xzre9SUxMS#k=V{CENB12=sVCy3Wd3xmOgb z7?rw>bA}^l{6k^kXaubW!MD>6m@ncr7WNO!34V)(Dq) zd7Nzv_09K;G)yylXT~F3LzAr-kDc};-dx?KT?;N-=dm}LjGQDNqv*63e6GzzD62!f z`{m&iCtFDp4oE`;S~>~NrhV@D_f8Cg=O2}nHr~YQ4_nQMzwejm_J|^jQ{CZS*q-8) z&>z>u7#z`MAITfl@6!(nHnFI|Xfm$0*(y;=x2nEMDU%4;L=FhK8emfdWXvR4mXP5R zGiKK^COc33=-K6R+CO0a>X6px|9S7M;4rbjvvImVWF9 zZya%bStg%?aM zrvz@1KP}vcHfmcBXSWs=+w5ktskUR`J@WWkQ+DU6o8F8O&-9ij=|^vaI9+ANurA}G zDRS|1mw*(QZH~tx?s$o6(9oVw!Akz~Gz_Lltom5f(ScJ#igmm4Fc6cXJ@7!r#Au}? zS^Vy2O)64N)#a-t4sa0Ot2Wh(z<%g;`Mv20bcu&7^dUVs_{&s^G?_wYp)nyY(QzB> z%&z8pX!-7^ulqLlFYR^6adt=VC`A)tSxA2N_%=Q;|Dr@MtRNA8>E|h_r-ky*zG;gT z?Z;V6VU6Vhg_SSIExK@#uh*hU#@;h~8N5~iubj8)DDjU-tMx7h9WeENCn7-nbC^cglg7$z}g>lVPB$ej&n1it7lV59j#?qKH2*f!)=_)UdL)t%jPMf@+lacnpKSa?VMA?D(nN z&hvLIj4rKpZST^T*%XM^)2N1K325ust(&90qUjcSMT%7-&Vh}(*|+ucFTAIkirbp z5oYm!GA>zf;oRf9+Rs^*X=|vB;g9|xOO|2r4FeGek~fCN(6f(?ljex4=6u8CBEx6l zMPrqFC!XYJ`9-pl$5LZu;YU?!!TZ#0!rYLt96hKV54e4~#k{PHY}pDwPTla4A2c3E zy=P>l4>M*dMlkm<^CUE?$k+GjS4ydia^G=otL{L$EwWIyJdP_nWr}@~14K^?w4M}S zN<8ex@8~a@3N($TT4P)4003px=mMNKr*prJW2ZDWuzn-kd-rQG{}e%yqJ_f4R7p2B zlC0gndHEm<>{okwZ>5{}Y~Ilg*)AmXBxZ|6ttvrv#vSjW`+C74#Y9 zU_E7mXQd=^y-8BD%C9Nan2+|f4$|3GVJgQ+AS_9&6R- zR~2f1Vgd7|G>9K=ry$pZ!U^1^kLIl#x}zh=Vh5PeU?0#%F>S(%-Z5%9hpAZIts-(_ zUfwD&sK@o3*A4q77ry>+yFJzD=GS-ny}OuVuhZuc;1dsdc)y@tWn^~IdAmCU-@&7! z9#=$`6laJ;RmgY*!=^*kvvA~GRW!RmztfQX-PbzLOC}4T1+P3UyU3UBX=-AYEs@1^ z&5(%67d7|DzLCkOQZ@Y~gm>a&*cd=$TTO(2gJF!MaR`4<6y2oPRGdo*iwlioK#Y)K ztJ2dM#}=@uDN{MQxB3iXXb1kid#$gtdMkcx%*mYlI64*1uHF>YQN(e(KchUARQtvR zK$4_%V9R{)PTltvftT}W7Saf&VeSI{tb2a)F4cVNJ|o~3x&$R_ zxq6-+uOJ_FI84TrQ_oFHH(c+aU(1yFTG)&w2zp*P5IsRgy>Or)GA$fD_u0*aZofU% z-!+wTV*UHbqdCUK;ssByfbY@={8H~~v=TGp!}T>{%$oNXExvO8O0qK`=(mxTvpH>2 ztPBstV*okcXMPS&v{kSmBI2VkKKb5n=tAB>@mkzTQqrCGY3H+COF^wtZG^HJg}_I9 zgf6HSxI(E04JjP6DwP=)nf7GChl0z?U$tZ>V1M!%?8{a|9yNkvsy&yltPg+pQ+~B-#jY z1$=JjvS_4?B>TmvRAg<%c&Jl$G3U8Iqs?Zq1gXTK|+FnLipr3UPO?9 zr-Q9f66;Hwr&S|a5e=z+k)06xLhYJqG6pO9w;af-AHDV108Lmt3wDbKMk=e62HvQA zRfoY8gKc}(3wMgO-U!V?t~gw<*rM!1(f)D#SAn7Tr)JMLzh2Bk32ze zo#q^fG!w!Uggz2a@eqvNBJM{4qx)>Zf;8nP4hQibAFD#v3$jZl+wJ<84drVb*$&1N z8l|;fcS|vowvchff1v{%24vj>;r3I2^kvB;^$;L)QoW-JEzTusppR>RN+8Ac7Tu2* zOPR$gpr#?OlS7KkO9**Y{6f! zJY0|_z#A-!T~=*{j^;wu#0?Q+kG#}xOhsn%FEAw{3b%xeo|I2*aK67n?Aq1AyS}Xq;%CCY#hEo5eY(Qgj=Ig#S?kw|PgQI5xgH9A<-|JiQ!H{s zfC2~ZXQf7>Y-Wjn$zkDIprtIszBfMR(_b9ZC@zYI@rVyslP&2eFlwV$Ggj9ZoO-)( z1fy~nIXE@flzT$GVa%c)F+5H68<}XP>-R-oY|!+WIF?lE_oB!?#0_ILillOn`i%9i zSEU}!B1p}i9S_JN%R5e9BpCH2NLuo|m?w|C6O(VnqXZ)1!aeDhYm*WafABbng(c3G zm;{Z8QcRi`{S>rZUYSVEKSDqs-p17AN_5)RiFWn2UO+&1MV(ubp0tg3Y``?LTX+p; zWn>W~^F}3a{rSj4tWioBM#n+&MUz{~ao>l38G7JZgRRYPP+*hVY6((com%H{)Juxq%zP%sh+m_MN@b}}r?(~WeXCf8O3+4&uiWo!& z!+E(e^xKTe((B@FR@>xWCM8axN%*k>B%^-USRlyKkHMB(E;#yFuncjBG4}~Za`xj_ zn#gRX#HwUhEc8zHG1fJm`XlvoRy6H7(}x;aY1O0R5cLPfLk}Jah16#_S3JAgb;;;0 zILqpPpBJx{(|2A$BH|gw8cEoMGcYqmIQcMW;$!MvB@+*kZF4@brM(0GTp|it)#Gz&y<%0w29b=!>bFvD~~<)d|{F}_Zx%Z8-rX+VedEMF1!8@L+c*2 z&bC4x84^djc{qJtWO?Lj>FsDcxSZmSBmV3U48`qF(}u_Lq8>$JjzecY0ooyOjV|Lq zHYa2SzfKGHfxY^Gxccelx{=JO;vu|ZowFjHFDNAA7%Y*1?V3|dp~$gXJ}Ca64hd@` zAD?}?e9!ZS4fU|;i}(E7gRkn<#vZy7w0p7u+%p$`V5{$F1qI9pFoWzZ^j1ica`kUR z!TJD1RAW?cV$kCN1dF#8ritX*4ad3fRgs3(R(OM5Wk=+UqkBXB+RYJ)C21)H+Y19E zaJ%8x;djf}gs)(ffo(#d4E8_cS$qmkECwhL#12wK0V_DLtQcU1;;rVYq_a;4*sHi8 z05YFI@bcUz*(!=f%OifT#GW-d zvNl~*YqyBxU4_NRp5*UJQdaPqEJ_iTS?mburrg0;0Y+SlwG-n_NN`$?6R4PW%%H5@1L zVTcLs4Q;PbOJ1Vhi$3VVxN)%AnWixdiPsjEZST8sYEZM zR54I3fX;JsZl5ga7kY&jpwjYW5p7RC_h89b9Rlwz2+DroUP6cC6OnkX8$Wyyeo-P% z444+u5X-b7_T+D1NwFQV#lx&B*XY@(zM$H&H;b1AKdwF>n(=%vu0zsb2M*4EX>Z$w zHKr5cHe_obIK3mtfMgbZMgi!w%WfS=Y^ebVxqp>xg|`=@;?a%gb1W@)pH{e~Fy{?( z%RUzd3Ttb|l>B_i>1y@)<;^|6J5$e(v47dUbnt%x8X~mV?>I5YYSE`~v~&t8eK_96 z=%voLsxicMi?E|L`q6^XAq~A<3 zZdmFbk_i+5R01S?+^fNRnZ~G5ukR*z7xVTt31`r&JT{&ZDJiU-NqXzaD{Z_-h<}Sn zQmu+VQ@*K5$D{xB3+lA768piD1E}DV$GK_cfuFq4xPebe;P58O1IVjFe7u$#o3u3{}$`_Rg&kyE4#J{7| z&-nI*4`JK_tugj8WDxgW<`Bf7Tuanr!l7P#D5YQt;67K?5l4A{{>mZ?Y5YK(*V=~@B$6{D8^u&!;P}q>J6}+XQ!b3Ve`D{;=DD#+Ci|$d4?5i z*pah2uPa7@BQ;qF7ak#sE*;8ZTal2u+EC!I?2ykI=*fVtk?1l6gIKR}c>5ap`6zm= z7c7JDR*0WdxgyJ-O3lsni!XUni5oC?RHQx?b2xs%W{G99=m*r?d2y8czhm1a z+eIguSRC_}l@o|S`CIkuZ{QD?k9D5KF`f>*dHy>6$<=tBJqCNSl8!Y6_ED1RKCAKP z1LX3f`amu`H87q#14j>~tPLGtW4Rs$=K;AG zwT?j|t0yG4uI*-vufsmkK@~Kya^HA3x7yzjRHu{l3Fs(3a=SGK-7eFddQm+730cl_ zR`Kk>o&?p#N}cchJocDt%boQmn&|TMF<$@jn%1YBDal6ZJ(69($TH=H3zy9D^v_@p z(M@SO)(jdBUZ(q+crP9i)kU8&%>o2~%10MAeh@1JOJB`t%zimMHjb2VzH8tPz;JL@aECkEU2 z()4mBgFDu<6Tj|(RjyB(Bt?$nYf2yUJhR~6d7q-E{(5@a_gnP!2%w&Z$<{dnSXj`027J2^kS76a!@@YMf=Mpc9yZd`QpRs=ND?2o~pD6xn z^dT27)IHwA?tYl^<>*uJH<*V^YW^x=g6Yq2j!j^5mHBc#wC$;Lx6sc*i~=}$S2G1k zyN3#>;J|xS&MSLCbptR~?W@!^_nxnD7AKRtXTI8)u1xCLu``fIrf(Ka3swd?A(zgH z-?AhZ7h20CZ}C01AJb>{AIes>&i?oolo_aj8xhcHGxN#&oDvmbjh*TK!1YkkG7TV z&P89;B8(*hr6_M7W+R6IUaZA%-_h0-HMjX28zWyC!?&}?zL(G>C7lZfPoq%;%@Rzr zq~R`lma$rLG2kW(I|NK!)&SJ+9ZwO!Sr#22PXG)u;B2Tbk`;g>^b*kV8&l)wZX(B} z%xbqU_m7FS-YASGlOwSWwRT}*Rg|(=$q)>!dju;1sGG1YbJZ&tb_Zr#Ts~Wt&=WX; ze`pg2+9_$QOmAdjr_PcWNwXH}%!Sm*04-vCKp3y*fGu!;abJ~MlR*ou?dpuCdF_~E z;Y*8I#@Z z4nYchwVj_V*IH7ANb@O#rXRVgbfEUBIaL6YCb1$Qcd5BasBgazc`DRW!-+GX-pm6-0s| z6S9>BEp*FoyD3kBgV;aFVed*#O)T+B4%P7q@JGKwwt{FeG1UNf!i%Pxa10a(1@f>@ zWG+I70RFqeSeH%v?g*V7&=i;()KK4>1W9#JMfGL@jrq9E~Y{S8w=S#U<9 zwW4N_kIaL6yT{}%8eb2qViszoWAbheUYA@?@4Vm6I3+HeSs1~5pMG?uWg4S0zf<96 z25(F^-tf>^ei5nhsI{Vk;#BUtnZY~pP3D=YwUM=Nxy=TO6EFen68{j^mBhAh_&CuH za^C>ri6rAZ?#Iw!blyLM=t@d`P&vv@I)u5!V`1d=x@$BfwvSy~Eh|akbL9yQoK2^p zw5&ErkN@PfVd8Ve#+ZWOm>q#>t1Q&_VaiQrQo-c_zDb56C8*-ScQTd#mDx03YX!;8 zbEaPdtJ+aiUuC_|@*lkbwyS7N&HD0J40tBV7xK7lER82>hSF@4(N=sWI;Y^D12#R^8~ED9?&p#CIw+6sG3xM#!oK(LS$)fLuXXIiXVD*u47vi(elhO z-%J3H$?{<{(GV@P_Do6!(`@}Fs!(mWqAuA7@Op&$(iVO4@^Y&vRMM5U$6!p>l9O%R zR$rmEEaBz|5F&(c&9!x@5useF>Qu!cnU}u^3yHGHn?|^u(a;TFEsSBo}6trC%s6~E#eL>9@1NTtRv}$&dRDZ8PE8Du}tAp|-`Jv8eFZtrIphey2^ZWdclHVAC zOX_hK6*A|q)rDF4HKvY@Ot@7|*kyx>zol$H`p~KtM{>Pj9=X7L1mI#^J>$DM7~0W< zWOj*JRrHNvbRXC9DXGTY8oWFnguZDwbNLP<0OffUkV1vo6JO~S#e(vDSmVL+2+L(HMk z)gcHCQ7xxO7J3Sk$(~w|Hr0L&tA8XCoRDMs*0UMd*pQ*Ot5dbMpj#)MO8{26I*`+Y z(jj^H?tvArhVZE3`kfKedL4fD7fWm{C`^g&AeGG~n8-O*uOOMoB}L~ zqT60oaK5wpnfd?7`Vx4kzW4tbV;PegM3%B;$x^nEvP;%5ma%1*l8{7X9a|D2`a#2`e)*mv_kQ@`)`^ZCC1_w_ROo_p@O_ntfByzldz=Xt-85~`e+uUk)#Hlrv8HfaLWO<#6_czretj8(oCfba z4`c#F%{{Dz(5M6yPovF?frTXp1JrF)8Fh9y)AuBLxcq-p1Y&NXX#ue{G{jzIet|^g zSmVdlfG|R%VBtaLZk*S`!otc*z{0JL;UYuAXir1u1gDxSeh=AV%a0MRIfJpU0(=r{ zKwmHv@1cDNOb|YheDDigiP{6X`T6d>S!=C*L%x!Icqm(< zr@`g;zCAy(sVsaL%e+FNfMxVjJV zA0S7e&wLAzz6Gou_Hq*x$r(mKl7V9n8F_pqK(`bXA}h_NCdkVcSy2_wx9)>(&d3_E z43eUSNV4zivnk?jWof&58l%+NK)5A4#(fO=)qp$D1$hEEOdo3qPbcuhg}niBUHTrD z_K2%RE+eC-hCsj4{NC*9$s=F0j4oH@^Yb*yP_vET4Lsuyrpq){J|s+TPG>JD&`X_n ze7$tv1gS+J}g%h>sw$;e2_Y}WA#`dnV~+bB9T>d5O@KL?4FKe{I+dPm=D<^F=6 zc*TOvvV3W#->CkM7~W>eYf!Gc4vKx8MK}qfx3|r3LLP6MCv4pDqrb;be%;Hj=d0iM znMkhP4-_X;zc4+|GCC!4(uPO3C20Jt!#hJN4L2HSM*5cK{8`pS4_YVUd{oN9#psID zF|QoHot`l6hw+W@uonjiGy`DqvDI6!f9p3fgZA}{Gd!v?w~gp}A8bFQelJO~Tj?qP zW~1Y~)EUmPflppcMfp^B@Vh`rf==0NV|}A2U1*D3MdIQ)@D89(tunv9?;+~XDc@1C za7<&l>-ucbgLM^F8k*M{u#eU~^P{eZV032Q8$9QL%^7H-or(v}U0?zN8l$g@9_Qd)__nHw zZcM+8eyetP{-`eA)<3&NZ1O>0 zwCu-6Fi25*(}iu`1U+kwWI&fLz*eB>Ay6w zWyh$JME7F07WAC%liPM2;|+yu!`>-ZSzcPZBMM?C#m_q16;?e!kl8o%IEA5~r5JmY z^H71jHgS;g7bs`Wy8GEwlNs^QMxJg}Mg7P!6#b1+cuqKfUwJ1TA3jv-$b(8*%ot8lE@jl7UqmjbNT``BMPj%g1Hembm* zezWDE29JNFx6yeqEs41;y0rMz$`3{7+{HKOIX~ou$&V1dX7ADGjR)4ssi`kxAbGa^ zenw=^_VQ#US_gPThjhAkPMaHl9*mIJZH{f92o|rbq|W!<4S9dtTRP0Ye$M!imz zXzs;sjXPNpc!NqlzLt3)$M#I8Jj#S_|He?(VzZcF5(fjzIXhB=hdvCLx9i$PBGzoT z%pcwGVLNxWssWG%$g$~+9Z|_F2Grgyruw9ubg|euh;MT0C+Fcbv zDu3k5$nOseAM>l`gk0@mV))+DWSiyH{zFng>hXQt6=_2CXJy+|RfnVi$hlwYWTfA! z)Cxmh{VyW^G4V|POOgc;F=Wn^4f;b`h_<)AoDh`Bt4bS(RGHs6l-p)ao!Z5|A2(BZ zBb&X?&c1lm03)Fmjk0BB)w!&ZfiI&Bx^je8Jl()5U?3aLr-z}XGila_j@gfan0nJf zwP${#V`twaEtngWm{e>W&f@p#d$1MjSB%~BEdc8t2(yQNQHYJ~ZB>}V>3$&Qe}T|+ z0xz&JxTo0yp%@g#8JICR=3-UdjPnYoP6Q`>L0ZK&>}61*IhAzqoZ*<_wgsg1vMPXx z+W<0Y_Ky6rL^FU**b7F!Yp{idBUYr(o*Y`^Rn>Xwl`!jG1J_+xXY5BIgmt7;$DIQz zGVVYuLOQ(4>gg?+1ZhiHR{dIn%aJOab0!EGc~U?piyGf+)N$2mYGs=-{GhXim%y?K zu!(U;hO`kF819EP<#~>&mn*oeByXe$HMy$piDG2UfrT}WZ_uF4*hfWi1yCO#{V6_} zlmrg(s?+`w+@pZ@$gp+T_KX$4^i)dGPd8uRx`}aoT5tal(%E$QLOhDA_sT^r=Q;9< zA^9hyGlXT>nD4QUha%g6k0~4FRl-Kmf~52j3tz=G8^5F~Tw9AGWZ=k`>!Z0WT%VEp zgu8$R;;a~8bP&q#o2$x8P|A?R-Z?PK$N^65QI`(xFY_zrX7WQGyc8=zaXLnHYzh2^ z=M2}3>=<`RWdokWcd%@SZmQd=Acuk=C|G6oI|Cm@aYW^pwhc+1F3`zvQ%u{1!o4ki zclxU+HS^wk6+U@5Bu?dxO4m8iUG<~^j-HoxBnT)mcox*KFr8+hi zy7+VPf>hTtf=fJ;KTfMOf`MNC|JmyVyh+J2^j@;0opF z9i_89vEQ&f9S0o0RMq8R!)oZsD>hQ$I;7?#uf88;T`oKms_&Dwd1^R6GAyoep|O8( zyl;A8PT0ansXxI+ZTKZ{hZ#1wCfs{v+37vHUYPwlO>u%#{<2)`!Bl$Og;AO%ElBW7LSN3Q5aL+L zVD#!vQs)MTT#SjeA*RSSq^oD&HsDMcr=AYtS8|fIa8X%rSX?<%7Io7@tDjok?>Iudb83jZcvQ;OX=RpvRzEG-1>?W%`sYzUUlgk_)P)gVPOoPAu<`42^sytDr zJY&&0E1sZr=v$J)-tGrn1Y7OPm%V%}vUTJUJF+~Gdl0kf67F>lMfVI*WR{B3otP?uY_o;YT6@GiHqPA5Kk=~TQBc!8 zYw=*YlzsPH$8ZQpiq5f~c~z5k8$FhEbJzrk;!nM`J^+X}y*N>#^-hV@O0fqgMn>_Mf^dAbZbEOS2BvIk-i%*Ua!^O(bib_@m`|@Aut(4< zF6dV2{^l23W;mhm*RHLyLG0Y~(ph@^V2S~gzquHeYgY8t{)&{SxK^Kk2Uk+n-EZ=* zugfGP-TQ6zO5p>Ho!4*a=BIp!?$NVL=~OW=>b6TaKT)_R|M0*ty3bujZDMpU$YQ6w z8y%+@YyniA=rJc`hQul}YHM~E2CJng*Fq3aWv6o!L&!$@X*$k6jg6JnauH90i(Y$X zqx$Z5^^=4<8o)K_TO7^rxWFiqbh`IOC*?1#8Bb-Bq68n;DCZaGkKNOkdO8@5v#o{c zPV9mP^H5W^!UGiuYbS2f_!K5GnMCipYI~8GJk5ut<1hL{fq?zk`NSo;qu*l?mH&aI zW1{2HB>NvbZKHXwe$0X(v!;P29PKtr5sprIy3L`;DY;visj_7eaB8JGS-kKrP~14r z5^7J;%;trAX0-VdUGR0jRjE1&dy+kpC2=z8!Y_!HLdR>J%y=4x-dx{z$xr|@b<}6D zWomF>d2JqB1W*LM4R{XxoR}bhA;KQW?IVjt1-Kg6;SKz2&R`-=DGKv;kCDzYqpVh= z_ehGZl^(p!71Iq1Yo z)vi$gU}%kDSR%Tzn4-&w%>VQu;CoVK1&MBKn~_b_EyCq(AUpy16A3|JP@SQ)0DTYHVh<7~x)N71s6f%-3@U(&=s)B}o^X*sfS<40+1rfB z6zd5v`-%{`F2xvw0HGpbP?4N!CH+t(P8lo2W_o~;<%(6Ztc$D0YmaK4t_jqBRSPGqv_xLDEqNXLF~q}Ztyz94 z=$z;za=oP99IrzXfYSX1nCo5X zzW2KS;sOt1{Iw%&f9i8}fbe_sODl@!d4BlfvX1hc?60I$<+&~o1{J$)3v{;R*$LN~ ze7+U)7_AMhxKrMpJ^D696Z*-i$vSRgdp>4Ut_5O8Q1Ndqtpok*Oh%h2#cAh6*ZsU6a zz~EYIX(UAd#&A0t7LdO9!uFw>%mk&&yR*Wt`^M=pxh}J;G5k6Vehov&oTQQWzZzzj z05SpgEyLV5O@!@Qfr}S-NXcj!BI%}vSl%4!@`!PvEG002V9ZVZ`eX!czVx$H8MTXKV&k(>)0nzHZE2~A6!%2^g)Wb>+{odNn0aD?FEZDT?EhuG>gY$x7#SrGm@r)|DPx zQp=*5JTt!s)P9pQIfu#LNJg)C^nF5T2G}929~&+A#A%_*d`=~tMBUWAmJ`2W<0E{= zOSg(P?Ct|PM)eOm4iVHky)Am8v*!;ZmhCF|Hdf;`dWYqB-34D*_uA`F@)0xW_C=jm z?+K!AUe=R43(3_n%zbD)>G~yah?S!25sySfITQf%#+vE)FuLuVI9-eAn#DtsHC{~I zjYLUq!Zj}nzGMlv+1G7-M6MM3QR`CAyDt=l?q*`LL{V{15^Qee$n#B=kbJKbP9bwj z;=JW*GVzlv!K23tgLo@z$b2-arUY9*9KQfrT^Q9jB1!Ldjdr-S@j_GdRx9Z)csjU29UqHu zb6<`Ya@!mkDh#%>AP`pCeR1gjL9V~@PkVNJz!ur<#kWKk<){fgY0z&j6_Z8V`Pn0DxUd0pNNKO6s>gF17$L*04xJU$_V zi_e1nDhK?L3vIXn5T9DZ5ef;AgW%;LH!zPqU*n^t0c6|+f*pRlHD)A`n`};CYGlro zDvRV**Q2ia4*M_+p_rD0Q9-|0UDuRruR#^Eps1d!h>9+tvzfyq1r68nyv_9f3+j_2 zZ}gZSowvxV={=PrLH8j`p0}&*=b$V_(_19LAwpq%_3+E3m0**inG96QIT!E%6J@8%84Gn|nuTqQ$ImSNg zq!0x#hEb922;i}sdPC95SVE`+GPdZcX+@_L|Con5NvfO04k^cF^#g29BMN}ie6D?* zeN+GvMqn;|>gYuaFaq5 z>+aZlE_rWBXe)%Bl-pWm4A{IM;N-_9<=jTn496=i2QTFgN)uog;qso)1w)^SJcCqd znJ+ZG1%-J!C`Fe*X}d5^?yt~&5-Ia@!Dfuz+shBKQR8>LbE)O_S*F?B%9A_0Ilk4k z35-=Ne2j(NPPb^RM}TGV-N1t^1mI0H?1@|txxH)LOHLHO3dKs?qk@B}8X2^Fuf4VJ z07^7d^XKHLeM4!$4F~*z*n|XiDZ^#m4-pJ7zz@$I>L+A?fNsQZl-kiR@^8wlvXGJy zUv~~6YimEfSu~AZrlS)0-hW*ddh}?+z7;p>D;?9~zH%;6s$(*>m>j~ps@?NN*N{{w zRGs~Tyky%4)Ls)Iu4d$Xs??277wsHqiaLFsUPG-fJGNpP?x*Tob!_Rv5;= z6-yQp-7%yRd=HGccVwhGX|{|$8JuT6*ty&d^qkoHClJG$52D%c`L+-7&6eD@;>O&& z_#vOnfrA*Tz!{%sG+Hfky_aXrB%Vkyk~%K_KzNj$(%Wz)`iBTzH76|4Vrx=Y-^Ln6 zXW*+fOTE_^N*l&K4?QeS(XC8&=H1am#$6R)Q0MK>=6l3&TP+J=C2x30*`BNSe(*?p zBI?RGN}lUe`(kIN;nvX<6D5kNF5F76Po2^DJafcVrTdcT1;D8Fv_Fn>%d|eANmkI2 zLVa3RFc(t$#-1}PWt}yPnaotZMWY2n-8gV`^TRfw5x#h2g{^-1CBzEZXTMYzC5Qy_&;WS=z1O;Xq zWt|%%@_dB10mBf*!up0G(`7Mj*B*XBgxt4;)7bhauVP2n)K#(9-z9>8kf&=Nu%isY zD3bxTgDGK>*JIlEE0y?_xp-OLfcaW|>oubxw%G)LV4aBDb^Kcu>4HM3V=vP$FN6l4 zO?2sB08ta)#R_8wNwM1j1h2Y1O}$_o-|zhdZXW+sG7iQxt0;s5->Oo+j}r~{epGrqz(n4DFZ;%?kOyHDz9smj0J-v`lgYt>0)zo+D|rg{2P(t0q{@8-;zFYYIg*) z#jAx*&Z~ux-)=_k50XG5k2a^DaquEk^aqhr5cW20(S|Q79cQj?Yn~Ugx4{_GzNx>| z-PQ7NoAHy8hC8DKNj>)En9e!3f`ME1A<+h52ERlnxnqy9q*_`05+v!7r4nQ(&+`26UC(a7rB^`OFP5XT|B(60sP&}i6Y6tGQ1l1t6F>d#nhE2t z_N>KLL7A?}^8~uM~|JlP5{X>RqiZURKzzWn?}$&~G=_InM{JEYyiT zRcPs!m3=7Gk`u2u?fhKz-`N?J$a!tx=}g| z7JNb{!*jnTW!Aj?AbTt+%PV+Wc039Z$^nO+YQ+(j;Wq1giW&YC)~Zp^Stu$Vu+>Yd zMV+R!qC~|V$OSgv;#`(fpc0K$(>E&|JG`ZgFx(_g);)x zz)0KJS82HbIMWdP<$H1KKaMT1SOmwWKhE;}An<>FfB>Fjj{*(I>_#(~J(S>Pz~Whn zCsNOz#R+qeattR@XT)c~#`yJ1P!lkLm*zwdfplATa1QeoTfsP?N2Y4HyUo`Yq1<~+=z{4Y2 zI|A-G7j#dK71=7!bSHOyZk;pHob!EE6yw{Mj0OcwmRmKBF8*+lYpqJ@E0&Cv0a9qX z0;|1_0LZKBOn!tV!~I@X7ud7@2O4U*)I*Ul&KV;7snB&yaSNP`u`(esn|U#&rXO`S zZS8xKqPs%b1ZjL8QD+LvqK}s*%^uh15M0{hT-wfkviHrqlLr1zJA;l#bdxvoo;UuG zTo;y>x?&_EOVX6gxL|>Ls_uD-2JAjv4*dQtza?p*iR_cR7?)rWb; z*%2wX@phVDoIj!$%X&2-6*zD0lh%*@OZSaJNRt`J0?oN`Q&s{hp#ZM7zLk6h)cLb6 zdAes@0T;%dWlT|I(4&wmQOHvC+~c5Pn(-cIHK_J{Z;B=*a)8Q)H<>FtdYX<6IQ71a zkJXjmC^e&4CLGnlw;8EoqpQpBw(jLzXkNM8W`2m`FXmu?3`5SeVfajaAipOosg=IAPV8jy2*O6L`xTW1lC8w4N+5^-pe|%5qDb9%S&=S_LK6R8ip7sGv++%qWehj!9u>jQIM2pkH8a?U+SiGin2SdHI*a zJ(9FT2KaG!*Qc19l^8Aos3!hHQE%tZW1d^}dg1heXi8pFXL0pc_JSyJY(E+OG%6lP$X4 zSc6u|ZS_tUre+#AMwgb&y?d&_lL_9^K76Z`(l6ugU6MG5x`YFG#kan+#tL^y;oYNL z^v+`E=Pd49S_!w*8xy3Mzb)7VT)i7}Wp`J!FWM~H?8R?Q@@qSGD?2)@A3NgSewQS9 z^V)SkV8wzxXg_G5i{|3hhN3X1j^O7_Oc$h=w~eXG{3pB=-hUzhJSmsC*7^Vh^$NXeF44#hsjMzz5}(9qtbC>V5C!j?l~g`Q*1~t6h(BrKmEC=!1RR;))5SZX>^i*UyR*aiN`3r}E%D=uh0zPdBdzv8BmfOG)8_+C?Be7l82HH$ zKwf?~BuWj={w;Urx1q}P!P^7FTQZLd4Ik91-O-Y85!UfrS0Ug;{BFz$@QpBjdp{@( zw|6wi!@^qnTV%1H5JiYyu}S zY{gmLgv&FUauZtNphsW?rs-+{5r9}Q>_?7_q2$?u*g;>~v*tjT5C-Y`#lYR@S0^WA z0JjX{Liz(a74*wBu$qVLA^jm9(xems48X&Z*FsQ(M}_HAgAwBmo&D`AaA(*^kx1}Z zYJ7{?Ng*h#5Rl9v2PPm3xV=0g`hc((QYaTI2@yiK zK&T@L%#@Ux7#0H17$~qD*xe#}M+3C1CXfanV5X=H;r1!iyGph%yK!Kp}h zuSB0ML1&}3f89fv`X`khzpS+3sbjB%ZzMkwFT|wavia`5rN@at9p{?~J5~0TE9fVc z))vfn={DZA^GC2x!qdP{5vt_dj9w&gz~v1ICy~;x`F}iLB#oq`g&#f?AZ?m#NQr3P z=dl>wKhJ@P2x3q9{7$J4EtP}rqoT+(TS&(##mN6#o4jxHKVVX=xcjM}>148Gu2oXkH_9!gu!~fIQb{*kkHVifmg-{g*zgzYISqn_@EhX5Yd{j4bJQ8ksXh>vzDSIo7?*ITQPwP$r*8-W##9Qaq8y zIw`G?L*C9F7w;i_Wjp9K8f6ub{5ng0Ic)Qs>~z^TadK3Y=DTj|D%mosGg=yFtEZ1XGh^2GMduDfkI^&|9!t(HI)z%-nOLBML5IXsv?gp9|O zQ*HtfJMWKnQS zcZ!BZ+r_FIk6i33&c~SOu?YlRMux8`)&o0r&)31dd>ZxRX)09Jg@v|W&H-2|bV}Ax zI%8@%ZNknI10?x8JKfrZmYJ8`$_jK~+T-(gQ0gCX4)Yy#kzoyg}viFD!8P;CqtuKq-*mk8y23Z^-Qo?{9?iCW}l!q z_ZY{C+PNq&--3>8kp$!LF%T|n!L!W_2I9_OE>LSU!7nP2p59Y1fX*qn?Zrdi2(G)2 z{Ya3(<{DC{*b!P9OcBmtC2*vr0f$`RX zJ(L*#4xg@AEc0msfQL=@#9YG2(j2V#}ZQApUy9ymd6>uFRp7sewR z4vvSclmUM!m}VNnX9f@krmrY@`-vx2TASnTz@z&S%}rQoh1V;2t$lTwc_%&orEyGL z^b+PiMno4#gW&bgWL^H<@fCJPuo*kLum6%;2fONJ-1)m>oP+}Cy2vyW#`ppY*R(gP z3_=k$A0l^~1q^jT=P*7-@~oPIRkv3@M?fSwDBX;fjjlSN@vjZzUVSGNH$U{eD%3QW z?t4FF7DxB}xM^$VSkb+Euggj@mg_~!ZBczw@;EZU+T3TfwwY2Gd+I~ic$cC<^lP#V zz9~JX8WnQiN>v^!m_%n;|J(uoo@{4LaO*=h_q=n5C3I|H!YU&>Vu`7S^E9{WxQh*U zUGgJ6tBj&_T8iIYy-)Ji@|_2Dp4dEnh3u!NytyMyr#}4q!pAm6O!mQL+K^F|Sg9db zds@;P1B`l9C4Ta6p&&kIrd3>y&76*zk zoQN8EnvhKf#-LNKzNGVwJCI`P09#+%OB&=5K0=YUV4A9vPyW76Mo*bH*~O^Cg%NSR zurO?*5*ISbXp06F-gJ=@px{be8C@;v-n)yJim8Jo;sk#Dcu40d4CVgTd?#O;!q7Fo za6d)q9v-KsT6ZR$?hQIVWuv+cv7b#%hqXc={Td~?p=+&7#-jc1tmelwCqNGVp%h=GZpM5>3yehq35O_3~0B#$~(4^2P`bJ3Q!#)0CaF zqzk+GLpJ<(b={ld9%fe#c^x0+$)90M#u4+(HG}H3U)1%l?2c+b@&EMxQ*_bp&Vqda zDt&o>^>Fmm&E)`JkVIzavps9AF1SS~c6eC(>|XttVaf_;Oy!ds9U}TaU4BKx1PiT{ zobQd(P;tGqwVC(uo)FJ^c>%&51QO=Tlr2SSE%)Y;r2n-3erwuP=Gp?Oqtzu?1#5eq z7TvabpX%TcimX_H^N|PQ9=93#aEH&{`nufZZ_K^iX|Gob-K%e%t$dxg7%O+!SW!;C z-NL7dHe9TF5GB03c#tCvSd|$kno%h+Uc5b1kNQOG`XM+F`)ImwUE*xtb8qROl6Nla z*C8U)XR&#E9$qxX#ZSeJ9Tex+#~LO&@ZgSityLzz;#qy+BbuG??9O;nEQdV8(_wqE%|0Zk zC**ZZBUcTTI{jT)xm1xdg0hX+XW7DPEV&Gqj0povLky3W%ef0jWZ4_#Q{~TGvMTRP zOH8RRt9TXn(�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

    1a?-k(gVm!4 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%0DPng_8R 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
    DG;DXEaxkag*=F-bF9Swb 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%0Agg1Y*-xSW*LT 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ù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


    "); - } else { - pOut.println("
  • Can't find this J2EEDomain MBean in the current MBean server
  • "); - pOut.println(""); - return null; - } - } catch (Exception e) { - pOut.println("
  • Error when using this J2EEDomain MBean: " + e + "
  • "); - pOut.println(""); - return null; - } - return onDomain; - } - - /** - * Create a cluster. - * @param pOnDomain - * @param pClusterName - * @param mgmt - * @param pOut - * @return The ObjectName of the cluster's MBean. - */ - private ObjectName createCluster(ObjectName pOnDomain, String pClusterName, Management mgmt, PrintWriter pOut) { - ObjectName on = null; - pOut.println("

    Create the MBean corresponding to the cluster " + pClusterName + "

    "); - pOut.println("
      "); - try { - String[] signature = new String[1]; - signature[0] = "java.lang.String"; - Object[] params = new Object[1]; - params[0] = pClusterName; - String clusterOn = (String) mgmt.invoke(pOnDomain, "createCluster", params, signature); - on = ObjectName.getInstance(clusterOn); - pOut.println("
    • Cluster " + pClusterName + " created.
    • "); - pOut.println("

    "); - } catch (Exception e) { - pOut.println("
  • Cannot create cluster " + pClusterName + ": " + e + "
  • "); - pOut.println(""); - } - return on; - } -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/ClusterDaemonServlet.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/ClusterDaemonServlet.java deleted file mode 100644 index c0c635d6fd..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/ClusterDaemonServlet.java +++ /dev/null @@ -1,220 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -//import java -import java.io.IOException; -import java.io.PrintWriter; - -import javax.management.ObjectName; -import javax.management.j2ee.Management; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * This servlet is an example which shows how to access the MEJB from a servlet. - * @author JOnAS team - * @author Adriana Danes - */ -public class ClusterDaemonServlet extends J2eemanagementBaseServlet { - - // ---------------------------------------------------------- Constants - /** Parameter */ - static final String PARAM_DOMAIN = "domainName"; - /** Parameter */ - static final String PARAM_DAEMON = "daemonName"; - /** Parameter which gives the name of the server to be started by the daemon */ - static final String PARAM_SERVER = "serverName"; - /** Parameter */ - static final String PARAM_VIEW = "view"; - /** Parameter */ - static final String VIEW_INIT = "init"; - - // ---------------------------------------------------------- Public methods - - /** - * Initialize the servlet. - * @param pConfig See HttpServlet - * @throws ServletException Could not execute request - */ - public void init(ServletConfig pConfig) throws ServletException { - super.init(pConfig); - } - - // ---------------------------------------------------------- Protected - // methods - - /** - * Response to the GET request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException An input or output error is detected when the servlet handles the request - * @throws ServletException Could not execute request - */ - protected void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Response to the POST request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException An input or output error is detected when the servlet handles the request - * @throws ServletException Could not execute request - */ - protected void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Dispatch the response. - * @param pRequest Request - * @param pResponse Response - * @throws IOException An input or output error is detected when the servlet handles the request - */ - protected void dispatch(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException { - - pResponse.setContentType("text/html"); - PrintWriter out = pResponse.getWriter(); - - // Get parameters - String sParamDomain = pRequest.getParameter(PARAM_DOMAIN); - String sParamDaemon = pRequest.getParameter(PARAM_DAEMON); - String sParamServer = pRequest.getParameter(PARAM_SERVER); - String sParamView = pRequest.getParameter(PARAM_VIEW); - - // Dispatching - if ((sParamDomain == null) || (sParamDomain.length() == 0)) { - doViewError("Parameter Domain name not found", pRequest, out); - } else if ((sParamDaemon == null) || (sParamDaemon.length() == 0)) { - doViewError("Parameter Daemon name not found", pRequest, out); - } else if ((sParamServer == null) || (sParamServer.length() == 0)) { - doViewError("Parameter Server name not found", pRequest, out); - } else if ((sParamView == null) || (sParamView.length() == 0) || VIEW_INIT.equals(sParamView)) { - doViewInit(pRequest, out); - doViewManagement(sParamDomain, sParamDaemon, sParamServer, pRequest, out); - } else { - doViewError("Unknown View", pRequest, out); - } - - } - - /** - * Do management opeartions in this view. - * @param pDomainName Name of domain to access - * @param pDaemonName Name of the deamon - * @param pServerName Name of the server to be started by the daemon - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewManagement(String pDomainName, String pDaemonName, String pServerName, HttpServletRequest pRequest, PrintWriter pOut) { - Management mgmt = getMgmt(); - - // ------------------------------ - // Access to the J2EEDomain MBean - // ------------------------------ - ObjectName onDomain = accessJ2EEDomain(pDomainName, mgmt, pOut); - if (onDomain == null) { - return; - } - - if (isMaster(onDomain, mgmt, pOut)) { - startServer(onDomain, pDaemonName, pServerName, mgmt, pOut); - } - - pOut.println("

    Application is OK

    "); - - // Footer - printNavigationFooter(pRequest, pOut); - } - - /** - * Create J2EEDomain MBean's ObjectName and test if MBean registered - * @param pDomainName the name provided by the user - * @param mgmt MEJB - * @param pOut output stream - * @return true if management operation succeeded - */ - private ObjectName accessJ2EEDomain(String pDomainName, Management mgmt, PrintWriter pOut) { - ObjectName onDomain = null; - pOut.println("

    Access the J2EEDomain MBean

    "); - pOut.println("
      "); - - // Get the J2EEDomain MBean's ObjectName - try { - String name = pDomainName + ":j2eeType=J2EEDomain,name=" + pDomainName; - onDomain = ObjectName.getInstance(name); - pOut.println("
    • J2EEDomain object name \"" + name.toString() + "\" created.
    • "); - } catch (Exception e) { - pOut.println("
    • Cannot create object name for J2EEDomain managed object: " + e + "
    • "); - pOut.println("
    "); - return null; - } - // Check that the J2EEDomain MBean registered - try { - boolean exists = mgmt.isRegistered(onDomain); - if (exists) { - pOut.println("
  • Found this J2EEDomain MBean in the current MBean server
  • "); - pOut.println("
    "); - } else { - pOut.println("
  • Can't find this J2EEDomain MBean in the current MBean server
  • "); - pOut.println(""); - return null; - } - } catch (Exception e) { - pOut.println("
  • Error when using this J2EEDomain MBean: " + e + "
  • "); - pOut.println(""); - return null; - } - return onDomain; - } - /** - * Start a server in domain - * @param pOnDomain J2EEDomain MBean ObjectName - * @param pDaemonName daemon name - currently not used - * @param pServerName server name - * @param mgmt MEJB - * @param pOut output stream - */ - private void startServer(ObjectName pOnDomain, String pDaemonName, String pServerName, Management mgmt, PrintWriter pOut) { - pOut.println("

    Start the server " + pServerName + "

    "); - pOut.println("
      "); - try { - String[] signature = {"java.lang.String"}; - String[] params = {pServerName}; - mgmt.invoke(pOnDomain, "startServer", params, signature); - pOut.println("
    • Server " + pServerName + " started.
    • "); - pOut.println("

    "); - } catch (Exception e) { - pOut.println("
  • Cannot create cluster start the server
  • "); - pOut.println(""); - } - } -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/J2eemanagementBaseServlet.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/J2eemanagementBaseServlet.java deleted file mode 100644 index 74639d83fa..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/J2eemanagementBaseServlet.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006-2008 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -import java.io.PrintWriter; - -import javax.management.ObjectName; -import javax.management.j2ee.Management; -import javax.management.j2ee.ManagementHome; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; - -/** - * - * @author Adriana Danes - * - * Base classe containing common code for the j2eeManagement servlets - */ -public class J2eemanagementBaseServlet extends HttpServlet { - /** Printing constant*/ - static final String APP_TITLE = "J2EE Management sample"; - /** - * Standard J2EEManagement Bean - */ - private Management mgmt = null; - /** - * Naming context - */ - private Context initialContext = null; - - /** - * Header. - * @param pOut Printer - * @param pTitle Title to display - * @param pSubTitle Subtitle to display or null if not - */ - protected void printHeader(PrintWriter pOut, String pTitle, String pSubTitle) { - - pOut.println(""); - pOut.println(""); - pOut.println("" + pTitle); - if (pSubTitle != null) { - pOut.println(" - " + pSubTitle); - } - pOut.println(""); - pOut.println(""); - pOut.println(""); - printHeaderTitle(pOut, pTitle, pSubTitle); - } - /** - * Header title. - * @param pOut Printer - * @param pTitle Title to display - * @param pSubTitle Subtitle to display or null if not - */ - protected void printHeaderTitle(PrintWriter pOut, String pTitle, String pSubTitle) { - - pOut.println(""); - pOut.println(""); - pOut.println(""); - pOut.println(""); - pOut.println(""); - pOut.println(""); - if (pSubTitle != null) { - pOut.println(""); - } - pOut.println(""); - pOut.println("
    \"JOnAS

    " + pTitle + "

    " + pSubTitle + "

    "); - } - - /** - * Footer navigation. - * @param pRequest Http request - * @param pOut Printer - */ - protected void printNavigationFooter(HttpServletRequest pRequest, PrintWriter pOut) { - - // index - String sViewIndex = pRequest.getContextPath(); - - // Display - pOut.print(""); - pOut.print(""); - pOut.print(""); - pOut.println("
    Index
    "); - // Footer - printFooter(pOut); - } - /** - * Footer. - * @param pOut Printer - */ - protected void printFooter(PrintWriter pOut) { - pOut.println(""); - pOut.println(""); - } - - /** - * @param pRequest Client request - * @param pOut Writer for output - */ - protected void doViewInit(HttpServletRequest pRequest, PrintWriter pOut) { - // ----------------------------- - // Get initial context - // ----------------------------- - pOut.println("

    Create Initial naming context

    "); - pOut.println("
      "); - try { - initialContext = new InitialContext(); - pOut.println("
    • Initial context OK
    • "); - } catch (Exception e) { - pOut.print("
    • Cannot get initial context for JNDI: "); - pOut.println(e + "
    • "); - pOut.println("
    "); - printNavigationFooter(pRequest, pOut); - return; - } - pOut.println("
    "); - - // ----------------------------- - // Access to the MEJB - // ----------------------------- - pOut.println("

    Create MEJB

    "); - pOut.println("
      "); - - // Connecting to the MEJB home through JNDI - ManagementHome mgmtHome = null; - try { - mgmtHome = (ManagementHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/mgmt/MEJB"), - ManagementHome.class); - } catch (Exception e) { - pOut.println("
    • Cannot lookup java:comp/env/ejb/mgmt/MEJB: " + e + "
    • "); - pOut.println("
    "); - printNavigationFooter(pRequest, pOut); - return; - } - - // Management bean creation - try { - mgmt = mgmtHome.create(); - pOut.println("
  • MEJB created
  • "); - } catch (Exception e) { - pOut.println("
  • Cannot create MEJB: " + e + "
  • "); - pOut.println(""); - printNavigationFooter(pRequest, pOut); - return; - } - - pOut.println("
    "); - } - - /** - * Simply View error. - * @param pError Message error - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewError(String pError, HttpServletRequest pRequest, PrintWriter pOut) { - - // Header - printHeader(pOut, APP_TITLE, "Error"); - // Error message - pOut.println("

    " + pError + "

    "); - // Return - pOut.println("
    Return"); - // Footer - printFooter(pOut); - } - /** - * @return The management bean - */ - public Management getMgmt() { - return mgmt; - } - /** - * @return The initial naming context - */ - public Context getInitialContext() { - return initialContext; - } - - /** - * Check if the current server is a master - * @param pOnDomain J2EEDomain MBean's ObjectName - * @return true if the server is a master, false otherwise - */ - protected boolean isMaster(ObjectName pOnDomain, Management mgmt, PrintWriter pOut) { - pOut.println("

    Use the J2EEDomain MBean to check if the current server is a master

    "); - pOut.println("
      "); - boolean result = false; - try { - result = ((Boolean) mgmt.getAttribute(pOnDomain, "master")).booleanValue(); - } catch (Exception e) { - pOut.println("
    • Error when using this J2EEDomain MBean: " + e + "
    • "); - pOut.println("
    "); - return false; - } - if (result) { - pOut.println("
  • This is a Master server.
  • "); - } else { - pOut.println("
  • This server is not a Master !
  • "); - } - pOut.println(""); - return result; - } -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/JmsAdminServlet.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/JmsAdminServlet.java deleted file mode 100644 index 024986fd5b..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/JmsAdminServlet.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -//import java -import java.io.IOException; -import java.io.PrintWriter; - -import javax.jms.Topic; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.j2ee.Management; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * This servlet is an example which shows how to access the MEJB from a servlet. - * The MEJB is used to invoke JoramAdmin Bean operations. - * @author JOnAS team - * @author Adriana Danes - */ -public class JmsAdminServlet extends J2eemanagementBaseServlet { - /** Parameter */ - static final String PARAM_TOPIC = "topicName"; - /** Parameter */ - static final String PARAM_SERVER_ID = "serverId"; - /** Parameter */ - static final String PARAM_VIEW = "view"; - /** Parameter */ - static final String VIEW_INIT = "init"; - - // ---------------------------------------------------------- Public methods - - /** - * Initialize the servlet. - * @param pConfig See HttpServlet - * @throws ServletException Could not initialize servlet - */ - public void init(ServletConfig pConfig) throws ServletException { - super.init(pConfig); - } - - // ---------------------------------------------------------- Protected - // methods - - /** - * Response to the GET request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException Could not execute request - * @throws ServletException An input or output error is detected when the servlet handles the request - */ - protected void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Response to the POST request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException An input or output error is detected when the servlet handles the request - * @throws ServletException Could not execute request - */ - protected void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) - throws IOException, ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Dispatch the response. - * @param pRequest Request - * @param pResponse Response - * @throws IOException An input or output error is detected when the servlet handles the request - */ - protected void dispatch(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException { - - pResponse.setContentType("text/html"); - PrintWriter out = pResponse.getWriter(); - - // Get parameters - String sParamTopic = pRequest.getParameter(PARAM_TOPIC); - String sParamServerId = pRequest.getParameter(PARAM_SERVER_ID); - String sParamView = pRequest.getParameter(PARAM_VIEW); - - // Dispatching - if ((sParamTopic == null) || (sParamTopic.length() == 0)) { - doViewError("Parameter Topic name not found", pRequest, out); - } else if ((sParamServerId == null) || (sParamServerId.length() == 0)) { - doViewError("Parameter Joram server id not found", pRequest, out); - } else if ((sParamView == null) || (sParamView.length() == 0) || VIEW_INIT.equals(sParamView)) { - doViewInit(pRequest, out); - doViewManagement(sParamTopic, sParamServerId, pRequest, out); - } else { - doViewError("Unknown View", pRequest, out); - } - - } - - - - /** - * View init MEJB and access to MBEans J2EEDomain and J2EEServer. - * @param pTopicName Name of topic to create - * @param pServerId Joram server Id - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewManagement(String pTopicName, String pServerId, HttpServletRequest pRequest, PrintWriter pOut) { - - // ------------------------------------------------------------- - // Use the Joram MBean via the MEJB to make jms admin operations - // ------------------------------------------------------------- - pOut.println("

    Get Joram admin MBean

    "); - pOut.println("
      "); - Management mgmt = getMgmt(); - - String joramON = getInitParameter("mbeanName"); - if (joramON == null) { - joramON = "joramClient:type=JoramAdmin"; - } else { - pOut.println("
    • Use servlet init param 'mbeanName': " + joramON + "
    • "); - } - ObjectName joramOn = null; - try { - joramOn = ObjectName.getInstance(joramON); - } catch (MalformedObjectNameException e1) { - pOut.println("
    • Couldn't get Joram MBean
    • " + e1); - pOut.println("
    "); - printNavigationFooter(pRequest, pOut); - return; - } - pOut.println("
    "); - pOut.println("

    Use Joram admin MBean

    "); - pOut.println("
      "); - - try { - if (mgmt.isRegistered(joramOn)) { - Object[] asParam = {new Integer(pServerId), pTopicName }; - String[] asSignature = { - "int", "java.lang.String" - }; - String op = "createTopic"; - Topic topic = (Topic) mgmt.invoke(joramOn, op, asParam, asSignature); - getInitialContext().rebind(pTopicName, topic); - pOut.println("
    • Topic " + pTopicName + " created on server " + pServerId + "
    • "); - } - } catch (Exception e) { - pOut.println("
    • Could not use use Joram MBean to administer jms
    • " + e); - pOut.println("
    "); - printNavigationFooter(pRequest, pOut); - return; - } - - pOut.println("
    "); - - pOut.println("

    Application is OK

    "); - - // Footer - printNavigationFooter(pRequest, pOut); - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MgmtServlet.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MgmtServlet.java deleted file mode 100644 index 601918b710..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MgmtServlet.java +++ /dev/null @@ -1,849 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -//import java -import java.io.IOException; -import java.io.PrintWriter; -import java.net.MalformedURLException; -import java.rmi.RemoteException; -import java.util.List; - -import javax.management.MBeanException; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.j2ee.ListenerRegistration; -import javax.management.j2ee.Management; -import javax.management.j2ee.ManagementHome; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * This servlet is an example which shows how to access the MEJB from a servlet. - * @author JOnAS team - * @author Adriana Danes - * @author Michel-Ange Anton - */ -public class MgmtServlet extends J2eemanagementBaseServlet { - - // ---------------------------------------------------------- Constants - /** Printing constant*/ - static final String APP_TITLE_LARGE = "J2EE Management sample with Servlet accessing the MEJB"; - /** Printing constant*/ - static final String APP_TITLE = "J2EE Management sample"; - /** Parameter */ - static final String PARAM_DOMAIN = "domainName"; - /** Parameter */ - static final String PARAM_VIEW = "view"; - /** Parameter */ - static final String VIEW_INIT = "init"; - /** Parameter */ - static final String VIEW_NOTIFICATIONS = "notifications"; - /** Parameter */ - static final String VIEW_OTHER = "other"; - /** Deploable module types */ - static final String JAR = "jar"; - /** Deploable module types */ - static final String WAR = "war"; - /** Deploable module types */ - static final String RAR = "rar"; - /** Deploable module types */ - static final String EAR = "ear"; - /** - * Listener object - */ - private MyListener mListener = null; - - // ---------------------------------------------------------- Public methods - - /** - * Initialize the servlet. - * @param pConfig See HttpServlet - * @throws ServletException - */ - public void init(ServletConfig pConfig) throws ServletException { - super.init(pConfig); - // Initialize variables - mListener = null; - } - - // ---------------------------------------------------------- Protected - // methods - - /** - * Response to the GET request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException - * @throws ServletException - */ - protected void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Response to the POST request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException - * @throws ServletException - */ - protected void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Dispatch the response. - * @param pRequest Request - * @param pResponse Response - * @throws IOException - */ - protected void dispatch(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException { - - pResponse.setContentType("text/html"); - PrintWriter out = pResponse.getWriter(); - - // Get parameters - String sParamDomain = pRequest.getParameter(PARAM_DOMAIN); - String sParamView = pRequest.getParameter(PARAM_VIEW); - - // Dispatching - if ((sParamDomain == null) || (sParamDomain.length() == 0)) { - doViewError("Parameter domain not found", pRequest, out); - } else if ((sParamView == null) || (sParamView.length() == 0) || VIEW_INIT.equals(sParamView)) { - doViewInit(sParamDomain, pRequest, out); - } else if (VIEW_NOTIFICATIONS.equals(sParamView)) { - doViewNotifications(out); - } else if (VIEW_OTHER.equals(sParamView)) { - doViewOther(sParamDomain, pRequest, out); - } else { - doViewError("Unknown View", pRequest, out); - } - - } - - - /** - * Footer navigation. - * @param pDomainName Name of domain - * @param pRequest Http request - * @param pOut Printer - * @param pPrevious Previous view - * @param pNext Next view - */ - protected void printNavigationFooter(String pDomainName, HttpServletRequest pRequest, PrintWriter pOut, - String pPrevious, String pNext) { - - // index - String sViewIndex = pRequest.getContextPath(); - // Notifications - String sViewNotifications = pRequest.getRequestURI() + "?" + PARAM_DOMAIN + "=" + pDomainName + "&" - + PARAM_VIEW + "=" + VIEW_NOTIFICATIONS; - // Previous View - String sPrevView = null; - if (pPrevious != null) { - sPrevView = pRequest.getRequestURI() + "?" + PARAM_DOMAIN + "=" + pDomainName + "&" + PARAM_VIEW + "=" - + pPrevious; - } - // Next View - String sNextView = null; - if (pNext != null) { - sNextView = pRequest.getRequestURI() + "?" + PARAM_DOMAIN + "=" + pDomainName + "&" + PARAM_VIEW + "=" - + pNext; - } - - // Display - pOut.print(""); - pOut.print(""); - pOut.print(""); - pOut.print(""); - if (sPrevView != null) { - pOut.println(""); - } - if (sNextView != null) { - pOut.println(""); - } - pOut.println("
    Index Notifications Previous Next
    "); - // Footer - printFooter(pOut); - } - - /** - * View init MEJB and access to MBeans J2EEDomain and J2EEServer. - * @param pDomainName Name of domain to access - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewInit(String pDomainName, HttpServletRequest pRequest, PrintWriter pOut) { - - // Header - //printHeader(pOut, APP_TITLE_LARGE, "Init"); - - // ----------------------------- - // Get initial context - // ----------------------------- - pOut.println("

    Initial context

    "); - pOut.println("
      "); - Context initialContext = null; - try { - initialContext = new InitialContext(); - pOut.println("
    • Initial context OK
    • "); - } catch (Exception e) { - pOut.print("
    • Cannot get initial context for JNDI: "); - pOut.println(e + "
    • "); - pOut.println("
    "); - return; - } - pOut.println("
    "); - - // ----------------------------- - // Access to the MEJB - // ----------------------------- - pOut.println("

    Create MEJB

    "); - pOut.println("
      "); - - // Connecting to the MEJB home through JNDI - ManagementHome mgmtHome = null; - try { - mgmtHome = (ManagementHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/mgmt/MEJB"), - ManagementHome.class); - } catch (Exception e) { - pOut.println("
    • Cannot lookup java:comp/env/ejb/mgmt/MEJB: " + e + "
    • "); - pOut.println("
    "); - return; - } - - // Management bean creation - Management mgmt = null; - - try { - mgmt = mgmtHome.create(); - pOut.println("
  • MEJB created
  • "); - } catch (Exception e) { - pOut.println("
  • Cannot create MEJB: " + e + "
  • "); - return; - } - pOut.println("
    "); - // ------------------------------ - // Access to the J2EEDomain MBean - // ------------------------------ - - ObjectName onDomain = accessJ2EEDomain(pDomainName, mgmt, pOut); - if (onDomain == null) { - return; - } - - boolean master = checkIfMaster(onDomain, mgmt, pOut); - - // ----------------------------------------------------- - // Check for J2EEServer MBeans in the current J2EEDomain - // ----------------------------------------------------- - ObjectName onServer = accessJ2EEServer(onDomain, mgmt, pOut); - if (onServer == null) { - return; - } - - // ------------------------------ - // Test domain deployment - // ------------------------------ - if (master) { - pOut.println("

    Try to manage the current domain: deploy/undeploy on all servers in the domain

    "); - pOut.println("
      "); - pOut.println("
    • Use the J2EEDomain object name: \"" + onDomain.toString() + "\"
    • "); - String[] serverNames = null; - try { - serverNames = (String[]) mgmt.getAttribute(onDomain, "serverNames"); - } catch (Exception e) { - pOut.println("
    • Can't get serverNames attribute: " + e + "
    • "); - } - if (serverNames.length > 1) { - String fileName = null; - // Use deploy, undeploy - // (suppose sb.jar was installed under JONAS_BASE/ejbjars directory) - fileName = "sb.jar"; - deployModuleWithTarget(JAR, onDomain, serverNames, mgmt, fileName, pOut); - - // Use deploy, undeploy - // (suppose earsample.ear was installed under JONAS_BASE/apps directory) - fileName = "earsample.ear"; - deployModuleWithTarget(EAR, onDomain, serverNames, mgmt, fileName, pOut); - } else { - pOut.println("
    • Can't find server names in this domain
    • "); - } - pOut.println("

    "); - } else { - // ------------------------------ - // Test current server management - // ------------------------------ - pOut.println("

    Try to manage the current server

    "); - pOut.println("
      "); - pOut.println("
    • Using the J2EEServer object name: \"" + onServer.toString() + "\"
    • "); - - // Use deployJar, unDeployJar, isJarDeployed management opearations - // (suppose sb.jar was installed under JONAS_BASE/ejbjars directory) - String jarFileName = System.getProperty("jonas.base")+"/ejbjars/"+"sb.jar"; - deployJarModule(onServer, mgmt, jarFileName, pOut); - - // Use deployEar, unDeployEar, isEarDeployed management opearations - // (suppose earsample.ear was installed under JONAS_BASE/apps directory) - String earFileName = System.getProperty("jonas.base")+"/apps/"+"earsample.ear"; - deployEarModule(onServer, mgmt, earFileName, pOut); - - // (suppose autoload/earsample.ear was installed under JONAS_BASE/apps directory) - earFileName = "autoload/earsample.ear"; - deployEarModule(onServer, mgmt, earFileName, pOut); - - // Use deployRar, unDeployRar, isRarDeployed - // (suppose JDBC connection rar files installed under JONAS_BASE/rars directory) - /* - String rarFileName = "autoload/JOnAS_jdbcCP.rar"; - deployRarModule(onServer, mgmt, rarFileName, pOut); - */ - pOut.println("

    "); - } - // ----------------------------- - // Test Event Listener support - // ----------------------------- - - pOut.println("

    Register an event listener

    "); - pOut.println("
      "); - - // Test Monolog JMXHandler notifications - // ------------------------------------- - // Set this to true if you test the JMXHandler notifications ! - boolean testLogNotifs = true; - - String logServName = new String(pDomainName + ":type=service,name=log"); - ObjectName logServOn = null; - try { - logServOn = ObjectName.getInstance(logServName); - } catch (MalformedObjectNameException e1) { - pOut.println("
    • Can't create ObjectName for log service MBean: " + e1 + "
    • "); - testLogNotifs = false; - pOut.println("
    "); - } - if (testLogNotifs) { - boolean existsLog; - try { - existsLog = mgmt.isRegistered(logServOn); - if (existsLog) { - pOut.println("
  • Found log service MBean
  • "); - } else { - pOut.println("
  • Can't find log service MBean
  • "); - testLogNotifs = existsLog; - } - } catch (RemoteException e) { - pOut.println("
  • Failed to find the log service MBean
  • "); - } - } - - if (mListener == null) { - if (!testLogNotifs) { - mListener = new MyListener(); - pOut.println("
  • MyListener created
  • "); - } else { - mListener = new MonologListener(); - pOut.println("
  • MonologListener created
  • "); - } - } - - String sHandler = "MEJBTester"; - // Get the ListenerRegistration object - try { - pOut.println("
  • Create ListenerRegistration
  • "); - ListenerRegistration lr = mgmt.getListenerRegistry(); - pOut.println("
  • ListenerRegistration created
  • "); - if (lr != null) { - if (testLogNotifs) { - pOut.println("
  • Add listener for Monolog notifications (" + logServOn.toString() + ")
  • "); - lr.addNotificationListener(logServOn, mListener, null, sHandler); - } else { - pOut.println("
  • Add listener on J2EEServer (" + onServer.toString() + ")
  • "); - lr.addNotificationListener(onServer, mListener, null, sHandler); - } - pOut.println("
  • Notification Listener added
  • "); - String sViewNotifications = pRequest.getRequestURI() + "?" + PARAM_DOMAIN + "=" + pDomainName + "&" - + PARAM_VIEW + "=" + VIEW_NOTIFICATIONS; - pOut.println("See list of notifications"); - pOut.println(""); - } else { - pOut.println("
  • Can't add remote listener for the moment
  • "); - pOut.println(""); - } - } catch (Exception e) { - pOut.println("
  • Can't add notification listener on " + onServer.toString() + " : " + e + "
  • "); - } - - pOut.println("

    Application is OK

    "); - - // Footer - printNavigationFooter(pDomainName, pRequest, pOut, null, VIEW_OTHER); - } - - /** - * Header. - * @param pOut Printer - * @param pTitle Title to display - * @param pSubTitle Subtitle to display or null if not - */ - protected void printHeaderAutoRefresh(PrintWriter pOut, String pTitle, String pSubTitle) { - - pOut.println(""); - pOut.println(""); - pOut.println("" + pTitle + ""); - pOut.println(""); - pOut.println(""); - pOut.println(""); - printHeaderTitle(pOut, pTitle, pSubTitle); - } - /** - * View notifications. - * @param pOut Printer - */ - protected void doViewNotifications(PrintWriter pOut) { - - // Header - printHeaderAutoRefresh(pOut, APP_TITLE, "Notifications"); - pOut.println("

    List of notifications

    "); - - // Verify listener - if (mListener == null) { - pOut.println("Listener not found !"); - } else { - // Display notifications - List list = mListener.getListNotifications(); - if (list.size() > 0) { - pOut.println("
      "); - for (int i = 0; i < list.size(); i++) { - pOut.println("
    1. " + list.get(i) + "
    2. "); - } - pOut.println("
    "); - } else { - pOut.println("No notifications, the list is empty"); - } - } - - // Footer - printFooter(pOut); - } - - /** - * View example. - * @param pDomainName Name of domain to access - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewOther(String pDomainName, HttpServletRequest pRequest, PrintWriter pOut) { - - // Header - printHeader(pOut, APP_TITLE, "Other"); - - pOut.println("

    Other

    "); - - // Footer - printNavigationFooter(pDomainName, pRequest, pOut, VIEW_INIT, null); - } - - /** - * Create J2EEDomain MBean's ObjectName and test if MBean registered - * @param pDomainName the name provided by the user - * @param mgmt MEJB - * @param pOut output stream - * @return true if management operation succeeded - */ - private ObjectName accessJ2EEDomain(String pDomainName, Management mgmt, PrintWriter pOut) { - ObjectName onDomain = null; - pOut.println("

    Access the J2EEDomain MBean

    "); - pOut.println("
      "); - - // Get the J2EEDomain MBean's ObjectName - try { - String name = pDomainName + ":j2eeType=J2EEDomain,name=" + pDomainName; - onDomain = ObjectName.getInstance(name); - pOut.println("
    • J2EEDomain object name created: \"" + name.toString() + "\"
    • "); - } catch (Exception e) { - pOut.println("
    • Cannot create object name for J2EEDomain managed object: " + e + "
    • "); - pOut.println("
    "); - return null; - } - // Check that the J2EEDomain MBean registered - try { - boolean exists = mgmt.isRegistered(onDomain); - if (exists) { - pOut.println("
  • Found this J2EEDomain MBean in the current MBean server
  • "); - } else { - pOut.println("
  • Can't find this J2EEDomain MBean in the current MBean server
  • "); - pOut.println(""); - return null; - } - } catch (Exception e) { - pOut.println("
  • Error when using this J2EEDomain MBean: " + e + "
  • "); - pOut.println(""); - return null; - } - return onDomain; - } - - /** - * - * @param onDomain J2EEDomain MBean ObjectName - * @param mgmt Management EJB - * @param pOut output stream - * @return true if the current server is a master - */ - private boolean checkIfMaster(ObjectName onDomain, Management mgmt, PrintWriter pOut) { - try { - Boolean master = (Boolean) mgmt.getAttribute(onDomain, "master"); - if (master.booleanValue()) { - pOut.println("
  • The current server is a management master
  • "); - } - pOut.println(""); - return master.booleanValue(); - } catch (Exception e) { - pOut.println("
  • Error when using this J2EEDomain MBean: " + e + "
  • "); - } - pOut.println(""); - return false; - } - - /** - * Get a registered J2EEServer MBean - * @param onDomain J2EEDomain MBean's ObjectName - * @param mgmt MEJB - * @param pOut output stream - * @return true if management operation succeeded - */ - private ObjectName accessJ2EEServer(ObjectName onDomain, Management mgmt, PrintWriter pOut) { - pOut.println("

    Access the J2EEServer MBeans

    "); - pOut.println("
      "); - ObjectName onServer = null; - String[] listServers = null; - try { - listServers = (String[]) mgmt.getAttribute(onDomain, "servers"); - } catch (Exception e) { - pOut.println("
    • Cant' access the " + onDomain + " MBean's servers attribute
    • "); - pOut.println("

    "); - return null; - } - int nbServers = listServers.length; - if (nbServers == 0) { - pOut.println("
  • No J2EEServer MBeans in the " + onDomain + " MBean's servers list (problem with domain management !!)
  • "); - pOut.println("
    "); - return null; - } else { - if (nbServers == 1) { - String serverOn = (String) listServers[0]; - try { - onServer = ObjectName.getInstance(serverOn); - if (mgmt.isRegistered(onServer)) { - pOut.println("
  • Found one J2EEServer MBean registered in the current MBean server. Its OBJECT_NAME is: \"" + serverOn + "\"
  • "); - pOut.println("
    "); - return onServer; - } else { - pOut.println("
  • Can't find the J2EEServer MBean having OBJECT_NAME: " + serverOn + " in the current MBean server
  • "); - pOut.println("
    "); - return null; - } - } catch (Exception e) { - pOut.println("
  • Error witht OBJECT_NAME " + serverOn + ": " + e + "
  • "); - pOut.println("
    "); - return null; - } - } else { - pOut.println("
  • List of J2EEServer MBeans in the \"" + onDomain + "\" MBean's servers list:
  • "); - pOut.println("
      "); - for (int i = 0; i < nbServers; i++) { - String serverOn = listServers[i]; - ObjectName on = null; - try { - on = ObjectName.getInstance(serverOn); - } catch (MalformedObjectNameException e) { - pOut.print("
    1. Error witht OBJECT_NAME " + serverOn + ": " + e + "
    2. "); - continue; - } - pOut.print("
    3. \"" + serverOn + "\". "); - boolean isRegisterdServer = false; - try { - isRegisterdServer = mgmt.isRegistered(on); - } catch (RemoteException e) { - pOut.println("
        "); - pOut.println("
      • Error witht OBJECT_NAME " + serverOn + ": " + e + "
      • "); - pOut.println("
      "); - pOut.println("
    4. "); - continue; - } - if (isRegisterdServer) { - pOut.print("This MBean is registered in the current MBean server. It should correspond to the current server."); - pOut.println(""); - onServer = on; - } else { - pOut.println("This MBean is not registered in the current MBean server. It could correspond to a remote server."); - pOut.println(""); - pOut.println("
        "); - String name = on.getKeyProperty("name"); - String[] signature = {"java.lang.String"}; - String[] params = new String[1]; - params[0] = name; - String[] urls = null; - try { - urls = (String[]) mgmt.invoke(onDomain, "getConnectorServerURLs", params, signature); - } catch (Exception e) { - pOut.println("
      • Could not found a connector server URL for server " + name + ".
      • "); - pOut.println("
      "); - pOut.println(""); - continue; - } - if (urls == null) { - pOut.println("
    5. Could not found a connector server URL for server " + name + "
    6. "); - pOut.println(""); - pOut.println(""); - continue; - } - for (int j = 0; j < urls.length; j++) { - String url = urls[j]; - pOut.print("
    7. Try to connect to server " + name + " using connector server URL: " + url + "
    8. "); - MBeanServerConnection connection = createConnection(url); - if (connection != null) { - // Use connection directly instead of using MEJB - try { - if (connection.isRegistered(on)) { - pOut.print("
    9. Found MBean having OBJECT_NAME \"" + serverOn + "\" registered in the connected MBean server."); - } else { - pOut.print("
    10. The MBean having OBJECT_NAME \"" + serverOn + "\" is not registered in the connected MBean server."); - } - } catch (IOException ioe) { - pOut.print("
    11. Exception when trying to use connection: " + ioe.toString()); - } - } else { - pOut.print("
    12. Could not establish connection with server " + name + ". Server may be stopped or URL not valid.
    13. "); - } - } - pOut.println(""); - pOut.println(""); - } - } - pOut.println("
    "); - pOut.println("
    "); - return onServer; - } - } - } - - private MBeanServerConnection createConnection(String connectorServerURL) { - MBeanServerConnection connection; - // create a connector client for the connector server at the given url - JMXConnector connector = null; - try { - JMXServiceURL url = new JMXServiceURL(connectorServerURL); - connector = JMXConnectorFactory.newJMXConnector(url, null); - connector.connect(null); - connection = connector.getMBeanServerConnection(); - } catch (MalformedURLException e) { - // there is no provider for the protocol in url - connection = null; - } catch (IOException e) { - // connector client or connection cannot be made because of a communication problem. - connection = null; - } catch (java.lang.SecurityException e) { - // connection cannot be made for security reasons - connection = null; - } - return connection; - } - - /** - * Deploy if not already deployed, undeploy otherwise, a given jar file. - * @param onServer ObjectName of the J2EEServer MBean on which the mananagement operation has to be applied - * @param mgmt MEJB - * @param jarFileName name of the file to be deployed/undeployed - * @param pOut output stream - */ - private void deployJarModule(ObjectName onServer, Management mgmt, String jarFileName, PrintWriter pOut) { - String[] signature = {"java.lang.String"}; - String[] params = new String[1]; - params[0] = jarFileName; - pOut.println("
  • Test if " + jarFileName + " deployed
  • "); - boolean isDeployed = false; - try { - isDeployed = ((Boolean) mgmt.invoke(onServer, "isDeployed", params, signature)).booleanValue(); - } catch (Exception e) { - pOut.println("
  • Problem when invoking isDeployed management operation: " + e.toString()); - } - if (!isDeployed) { - pOut.println("
  • Try to deploy " + jarFileName + " !
  • "); - try { - String deployedObjectName = (String) mgmt.invoke(onServer, "deploy", params, signature); - pOut.println("
  • The Object Name of the deployed J2EEModule is: \"" + deployedObjectName + "\".
  • "); - } catch (MBeanException mbe) { - pOut.println("
  • Could not deploy " + jarFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not deploy " + jarFileName + " because of exception: " + e.toString() + "
  • "); - } - } else { - pOut.println("
  • Try to un-deploy " + jarFileName + " !
  • "); - try { - mgmt.invoke(onServer, "undeploy", params, signature); - pOut.println("
  • Done undeploy.>"); - } catch (MBeanException mbe) { - pOut.println("
  • Could not undeploy " + jarFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not undeploy " + jarFileName + " because of exception: " + e.toString() + "
  • "); - } - } - } - /** - * Deploy if not already deployed, undeploy otherwise, a given ear file. - * @param onServer ObjectName of the J2EEServer MBean on which the mananagement operation has to be applied - * @param mgmt MEJB - * @param earFileName name of the file to be deployed/undeployed - * @param pOut output stream - */ - private void deployEarModule(ObjectName onServer, Management mgmt, String earFileName, PrintWriter pOut) { - String[] signature = {"java.lang.String"}; - String[] params = new String[1]; - params[0] = earFileName; - pOut.println("
  • Test if " + earFileName + " deployed
  • "); - boolean isDeployed = false; - try { - isDeployed = ((Boolean) mgmt.invoke(onServer, "isDeployed", params, signature)).booleanValue(); - } catch (Exception e) { - pOut.println("
  • Problem when invoking isEarDeployed management operation: " + e.toString()); - } - if (!isDeployed) { - pOut.println("
  • Try to deploy " + earFileName + " !
  • "); - try { - String deployedObjectName = (String) mgmt.invoke(onServer, "deploy", params, signature); - pOut.println("
  • The Object Name of the deployed J2EEModule is: \"" + deployedObjectName + "\".
  • "); - } catch (MBeanException mbe) { - pOut.println("
  • Could not deploy " + earFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not deploy " + earFileName + " because of exception: " + e.toString() + "
  • "); - } - } else { - pOut.println("
  • Try to un-deploy " + earFileName + " !
  • "); - try { - mgmt.invoke(onServer, "undeploy", params, signature); - pOut.println("
  • Done undeploy.>"); - } catch (MBeanException mbe) { - pOut.println("
  • Could not undeploy " + earFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not undeploy " + earFileName + " because of exception: " + e.toString() + "
  • "); - } - } - } - - /** - * Deploy if not already deployed, undeploy otherwise, a given rar file. - * @param onServer ObjectName of the J2EEServer MBean on which the mananagement operation has to be applied - * @param mgmt MEJB - * @param rarFileName name of the file to be deployed/undeployed - * @param pOut output stream - */ - private void deployRarModule(ObjectName onServer, Management mgmt, String rarFileName, PrintWriter pOut) { - String[] signature = {"java.lang.String"}; - String[] params = new String[1]; - params[0] = rarFileName; - pOut.println("
  • Test if " + rarFileName + " deployed
  • "); - boolean isDeployed = false; - try { - isDeployed = ((Boolean) mgmt.invoke(onServer, "isDeployed", params, signature)).booleanValue(); - } catch (Exception e) { - pOut.println("
  • Problem when invoking isRarDeployed management operation: " + e.toString()); - } - if (!isDeployed) { - pOut.println("
  • Try to deploy " + rarFileName + " !
  • "); - try { - String deployedObjectName = (String) mgmt.invoke(onServer, "deploy", params, signature); - pOut.println("
  • The Object Name of the deployed J2EEModule is: \"" + deployedObjectName + "\".
  • "); - } catch (MBeanException mbe) { - pOut.println("
  • Could not deploy " + rarFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not deploy " + rarFileName + " because of exception: " + e.toString() + "
  • "); - } - } else { - pOut.println("
  • Try to un-deploy " + rarFileName + " !
  • "); - try { - mgmt.invoke(onServer, "undeploy", params, signature); - pOut.println("
  • Done undeploy.>"); - } catch (MBeanException mbe) { - pOut.println("
  • Could not undeploy " + rarFileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not undeploy " + rarFileName + " because of exception: " + e.toString() + "
  • "); - } - } - } - - /** - * Deploy if not already deployed, undeploy otherwise, a given jar file. - * @param moduleType can be JAR, WAR, RAR or EAR - * @param onDomain J2EEDomain MBean ObjectName - * @param target names of the servers on which the mananagement operation has to be applied - * @param mgmt MEJB - * @param fileName name of the file to be deployed/undeployed - * @param pOut output stream - */ - private void deployModuleWithTarget(String moduleType, ObjectName onDomain, String[] target, Management mgmt, String fileName, PrintWriter pOut) { - String[] signature = {"[Ljava.lang.String;", "java.lang.String"}; - Object[] params = new Object[2]; - params[0] = target; - params[1] = fileName; - try { - String operationName = "deploy"; - pOut.println("
  • Try to " + operationName + " " + fileName + " on multiple target !
  • "); - mgmt.invoke(onDomain, operationName, params, signature); - operationName = "undeploy"; - pOut.println("
  • Try to " + operationName + " " + fileName + " on multiple target !
  • "); - mgmt.invoke(onDomain, operationName, params, signature); - } catch (MBeanException mbe) { - pOut.println("
  • Could not deploy/undeploy " + fileName + " because of exception: " - + mbe.getTargetException().toString()); - } catch (Exception e) { - pOut.println("
  • Could not deploy " + fileName + " because of exception: " + e.toString() + "
  • "); - } - } -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MonologListener.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MonologListener.java deleted file mode 100644 index 946111a74d..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MonologListener.java +++ /dev/null @@ -1,86 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id: $ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -import java.util.ArrayList; -import java.util.Date; -import java.util.logging.LogRecord; - -import javax.management.Notification; - -/** - * @author Adriana Danes - */ -public class MonologListener extends MyListener { - - private final static String monologNotifType = "Monolog.JMXHandler.Log"; - -// ---------------------------------------------------------- Public methods - /** - * Create a new element and add it to the list. - * @param notification received notification - * @param handback received handback - */ - public void handleNotification(Notification notification, Object handback) { - String type = notification.getType(); - if (type.equals(monologNotifType)) { - String message = notification.getMessage(); - LogRecord record = (LogRecord) notification.getUserData(); - String timestamp = new Date(record.getMillis()).toString(); - String loggerName = record.getLoggerName(); - String level = record.getLevel().toString(); - String sourceClass = record.getSourceClassName(); - String sourceMethod = record.getSourceMethodName(); - String resourceBundle = record.getResourceBundleName(); - StringBuffer buf = new StringBuffer(); - buf.append("Notification message = "); - buf.append(message); - buf.append('\n'); - - buf.append("Timestamp = "); - buf.append(timestamp); - buf.append('\n'); - - buf.append("LoggerName = "); - buf.append(loggerName); - buf.append('\n'); - - buf.append("Level = "); - buf.append(level); - buf.append('\n'); - - buf.append("SourceClass = "); - buf.append(sourceClass); - buf.append('\n'); - String s = new String(buf); - getListNotifications().add(s); - } else { - super.handleNotification(notification, handback); - } - } - - -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MyListener.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MyListener.java deleted file mode 100644 index 3774c529e7..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/MyListener.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -import java.util.ArrayList; - -import javax.management.NotificationListener; -import javax.management.Notification; - -/** - * @author Adriana Danes - * @author Michel-Ange Anton - */ -public class MyListener implements NotificationListener { - -// ---------------------------------------------------------- Properties variables - /** - * Each element in this list contains a received notification + infos about it - */ - private ArrayList listNotifications = null; - -// ---------------------------------------------------------- Constructor - /** - * Create list. - */ - public MyListener() { - listNotifications = new ArrayList(); - } - -// ---------------------------------------------------------- Public methods - /** - * Create a new element and add it to the list. - * @param notification received notification - * @param handback received handback - */ - public void handleNotification(Notification notification, Object handback) { - String s = "Notification = " + notification.toString() - + ", Handback = " + handback.toString(); - listNotifications.add(s); - } - -// ---------------------------------------------------------- Properties methods - /** - * @return notifications list - */ - public ArrayList getListNotifications() { - return listNotifications; - } - -} diff --git a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/NewServerMgmtServlet.java b/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/NewServerMgmtServlet.java deleted file mode 100644 index 10b688d08c..0000000000 --- a/jonas_tests/examples/base/examples/j2eemanagement/src/org/objectweb/j2eemanagement/servlets/NewServerMgmtServlet.java +++ /dev/null @@ -1,323 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.j2eemanagement.servlets; - -//import java -import java.io.IOException; -import java.io.PrintWriter; -import java.net.MalformedURLException; - -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.j2ee.Management; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * This servlet is an example which shows how to access the MEJB from a servlet. - * @author JOnAS team - * @author Adriana Danes - */ -public class NewServerMgmtServlet extends J2eemanagementBaseServlet { - - // ---------------------------------------------------------- Constants - /** Parameter */ - static final String PARAM_DOMAIN = "domainName"; - /** Parameter */ - static final String PARAM_CLUSTER = "clusterName"; - /** Parameter */ - static final String PARAM_SERVER = "serverName"; - /** Parameter */ - static final String PARAM_SERVER_URL = "serverURL"; - /** Parameter */ - static final String PARAM_VIEW = "view"; - /** Parameter */ - static final String VIEW_INIT = "init"; - // ---------------------------------------------------------- Public methods - - /** - * Initialize the servlet. - * @param pConfig See HttpServlet - * @throws ServletException - */ - public void init(ServletConfig pConfig) throws ServletException { - super.init(pConfig); - } - - // ---------------------------------------------------------- Protected - // methods - - /** - * Response to the GET request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException - * @throws ServletException - */ - protected void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Response to the POST request. - * @param pRequest See HttpServlet - * @param pResponse See HttpServlet - * @throws IOException - * @throws ServletException - */ - protected void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException, - ServletException { - dispatch(pRequest, pResponse); - } - - /** - * Dispatch the response. - * @param pRequest Request - * @param pResponse Response - * @throws IOException - */ - protected void dispatch(HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException { - - pResponse.setContentType("text/html"); - PrintWriter out = pResponse.getWriter(); - - // Get parameters - String sParamDomain = pRequest.getParameter(PARAM_DOMAIN); - String sParamCluster = pRequest.getParameter(PARAM_CLUSTER); - String sParamView = pRequest.getParameter(PARAM_VIEW); - String sParamServer = pRequest.getParameter(PARAM_SERVER); - String sParamServerURL = pRequest.getParameter(PARAM_SERVER_URL); - - // Dispatching - if ((sParamDomain == null) || (sParamDomain.length() == 0)) { - doViewError("Parameter Domain name not found", pRequest, out); - } else if ((sParamCluster == null) || (sParamCluster.length() == 0)) { - doViewError("Parameter Cluster name not found", pRequest, out); - } else if ((sParamServer == null) || (sParamServer.length() == 0)) { - doViewError("Parameter Server name not found", pRequest, out); - } else if ((sParamServerURL == null) || (sParamServerURL.length() == 0)) { - doViewError("Parameter Connector server url not found", pRequest, out); - } else if ((sParamView == null) || (sParamView.length() == 0) || VIEW_INIT.equals(sParamView)) { - doViewInit(pRequest, out); - doViewManagement(sParamDomain, sParamCluster, sParamServer, sParamServerURL, pRequest, out); - } else { - doViewError("Unknown View", pRequest, out); - } - - } - - - /** - * Do management operations in this view. - * @param pDomainName Name of domain to access - * @param pClusterName Name of the cluster to manage in the domain - * @param pServerName Name of the server to add in the domain - * @param pServerURL Address of the server's remote JMX connector - * @param pRequest Http request - * @param pOut Printer - */ - protected void doViewManagement(String pDomainName, String pClusterName, String pServerName, String pServerURL, HttpServletRequest pRequest, PrintWriter pOut) { - Management mgmt = getMgmt(); - - // ------------------------------ - // Access to the J2EEDomain MBean - // ------------------------------ - ObjectName onDomain = accessJ2EEDomain(pDomainName, mgmt, pOut); - if (onDomain == null) { - return; - } - - if (!isMaster(onDomain, mgmt, pOut)) { - // End application - pOut.println("

    Application is OK

    "); - // Footer - printNavigationFooter(pRequest, pOut); - return; - } - - // TO DO extend interface in order to read cluster daemon name - String clusterDaemonName = "cd"; - // Create the new server - createServer(onDomain, pClusterName, clusterDaemonName, pServerName, pServerURL, mgmt, pOut); - - // ------------------------------------------------------------- - // Using the domain management EJB to list servers in the domain - // ------------------------------------------------------------- - String[] serverNames = null; - String[] serverNamesDom = null; - String[] servers = null; - String domainName = onDomain.getKeyProperty("name"); - try { - pOut.println("

    Getting list of servers in the domain " + domainName + "

    "); - serverNames = (String[]) mgmt.getAttribute(onDomain, "serverNames"); - servers = (String[]) mgmt.getAttribute(onDomain, "servers"); - pOut.println("
      "); - for (int i = 0; i < serverNames.length; i++) { - String name = serverNames[i]; - /* - String[] signature = {"java.lang.String"}; - String[] params = {name}; - String state = (String) mgmt.invoke(onDomain, "getServerState", params, signature); - pOut.println("
    • " + name + " - " + state + "
    • ");*/ - pOut.println("
    • " + name + "
    • "); - } - pOut.println("
    "); - - } catch (Exception e) { - pOut.println("
  • Could not get list of servers in " + domainName + "
  • " + e); - e.printStackTrace(pOut); - return; - } - // ------------------------------------------------------------- - // Using the cluster management EJBs to list servers in clusters - // ------------------------------------------------------------- - String[] clusters = null; - String clusterName = null; - try { - clusters = (String[]) mgmt.getAttribute(onDomain, "clusters"); - for (int i = 0; i < clusters.length; i++) { - ObjectName onCluster = ObjectName.getInstance(clusters[i]); - clusterName = onCluster.getKeyProperty("name"); - if (!domainName.equals(clusterName)) { - // this is a cluster created by the administrator - // or a physical cluster created transparently - pOut.println("

    Getting list of servers in cluster " + clusterName + "

    "); - String[] signature = {"java.lang.String"}; - String[] params = new String[1]; - params[0] = clusterName; - String[] urls = null; - serverNames = (String[]) mgmt.invoke(onDomain, "getServerNames", params, signature); - pOut.println("
      "); - if (serverNames.length == 0) { - pOut.println("
    • There are no servers.
    • "); - } - for (int j = 0; j < serverNames.length; j++) { - String name = serverNames[j]; - /* - String[] signature = {"java.lang.String"}; - String[] params = {name}; - String state = (String) mgmt.invoke(onCluster, "getServerState", params, signature); - pOut.println("
    • " + name + " - " + state + "
    • "); - */ - pOut.println("
    • " + name + "
    • "); - } - pOut.println("
    "); - } - } - } catch (Exception e) { - pOut.println("
  • Could not get list of servers in clusters with the MEJB.
  • " + e); - e.printStackTrace(pOut); - return; - } - - pOut.println("

    Application is OK

    "); - - // Footer - printNavigationFooter(pRequest, pOut); - } - - /** - * Create J2EEDomain MBean's ObjectName and test if MBean registered - * @param pDomainName the name provided by the user - * @param mgmt MEJB - * @param pOut output stream - * @return true if management operation succeeded - */ - private ObjectName accessJ2EEDomain(String pDomainName, Management mgmt, PrintWriter pOut) { - ObjectName onDomain = null; - pOut.println("

    Access the J2EEDomain MBean

    "); - pOut.println("
      "); - - // Get the J2EEDomain MBean's ObjectName - try { - String name = pDomainName + ":j2eeType=J2EEDomain,name=" + pDomainName; - onDomain = ObjectName.getInstance(name); - pOut.println("
    • J2EEDomain object name created: \"" + name.toString() + "\"
    • "); - } catch (Exception e) { - pOut.println("
    • Cannot create object name for J2EEDomain managed object: " + e + "
    • "); - pOut.println("
    "); - return null; - } - // Check that the J2EEDomain MBean registered - try { - boolean exists = mgmt.isRegistered(onDomain); - if (exists) { - pOut.println("
  • Found this J2EEDomain MBean in the current MBean server
  • "); - pOut.println(""); - } else { - pOut.println("
  • Can't find this J2EEDomain MBean in the current MBean server
  • "); - pOut.println(""); - return null; - } - } catch (Exception e) { - pOut.println("
  • Error when using this J2EEDomain MBean: " + e + "
  • "); - pOut.println(""); - return null; - } - return onDomain; - } - /** - * Add a new server to the domain and possibly attach it to a cluster - * @param pOnDomain J2EDomain ObjectName - * @param pClusterName cluster name - * @param pServerName server name - * @param pServerURL server's JMX remote connection urls - * @param mgmt MEJB - * @param pOut output stream - */ - private void createServer(ObjectName pOnDomain, String pClusterName, String pClusterDaemonName, String pServerName, String pServerURL, Management mgmt, PrintWriter pOut) { - String domainName = pOnDomain.getDomain(); - try { - pOut.println("

    Add a server named " + pServerName + " to the domain " + domainName + "

    "); - pOut.println("
      "); - - String[] signature = new String[4]; - Object[] params = new Object[4]; - signature[0] = "java.lang.String"; - signature[1] = "java.lang.String"; - signature[2] = "java.lang.String"; - signature[3] = "[Ljava.lang.String;"; - params[0] = pServerName; - params[1] = pClusterName; - params[2] = pClusterDaemonName; - String[] urls = new String[1]; - urls[0] = pServerURL; - params[3] = urls; - mgmt.invoke(pOnDomain, "addServer", params, signature); - pOut.println("
    "); - } catch (Exception e) { - pOut.println("
  • Cannot add server " + pServerName + ": " + e + "
  • "); - pOut.println(""); - } - } -} diff --git a/jonas_tests/examples/base/examples/j_common.xml b/jonas_tests/examples/base/examples/j_common.xml deleted file mode 100644 index acec2a97c6..0000000000 --- a/jonas_tests/examples/base/examples/j_common.xml +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/README b/jonas_tests/examples/base/examples/jaasclient/README deleted file mode 100644 index f23dbe46e8..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/README +++ /dev/null @@ -1,90 +0,0 @@ -$Id$ -@author Florent Benoit - -Example Overview: -================= - -This example shows how to use JAAS login modules for the authentication. - -There are two kind of clients. - - Without the use of the client container - - With the use of the client container - -First kind of client (without client container) ------------------------------------------------ -This example includes several ways of entering login and password (CallBack) - - The first way is a command line prompt - - The second way is a swing dialog (a window) - - The first way works without asking the user a login/password. - The login and password are given to the callbackhandler by the client - -You can configure the login module and the resource to use by configuring -the file in the JONAS_ROOT/conf/jaas.config file. - -There are two login modules : - - One for performing the authentication - - One for propagating to the JOnAS server the security context - - -Second kind of client (with client container): -------------------------------------------------- -The choice of the callback handler is done in the application-xml file. - -Two examples of clients are provided. - - jaasopclient1.jar uses the NoInputCallbackHandler as a login/password is - specified in the jonas-client.xml file - - - jaasopclient2.jar uses the CallbackHandler specified in the file - application-client.xml - - - jaasopclient3.jar uses Swing CallbackHandler specified in - application-client.xml file and launch a Swing client - -Both of them use the jaas configuration which is in the client.jar under the -name "jaas.config" - -The JAAS initialization and authentication is perfomed by the client container. - - -Compiling and installing this example: --------------------------------------- - do : ant install - -Running this example: --------------------- - -1) Run a jonas server: - jonas start - -2) Load the jaasop.jar if you have not added it in the ejb service descriptors list : - jonas admin -a jaasop.jar - -You should see something like this when the bean is loaded : - - JAASOp available - -3) Run the client program: - -a/ The client without client container : - ------------------------------------- -on UNIX: - jclient -cp $JONAS_BASE/ejbjars/jaasop.jar jaasclient.ClientJAASOp - -On Windows: - jclient -cp %JONAS_BASE%\ejbjars\jaasop.jar jaasclient.ClientJAASOp - -In fact, the "-cp" option is not useful here, because classes are found in the CLASSPATH. - -b/ A client with client container : - -------------------------------- -first client : -java -jar $JONAS_ROOT/lib/client.jar $JONAS_BASE/clients/jaasopclient1.jar - -second client : -java -jar $JONAS_ROOT/lib/client.jar $JONAS_BASE/clients/jaasopclient2.jar - -third client : -java -jar $JONAS_ROOT/lib/client.jar $JONAS_BASE/clients/jaasopclient3.jar - -4) Stop the jonas server - jonas stop diff --git a/jonas_tests/examples/base/examples/jaasclient/build.xml b/jonas_tests/examples/base/examples/jaasclient/build.xml deleted file mode 100644 index 0773463e1c..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/build.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client-swing.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client-swing.xml deleted file mode 100644 index 19ece057bc..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client-swing.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Client of the JAASOp sample - - - ejb/JAASOp - Session - jaasclient.beans.secusb.JAASOpHome - jaasclient.beans.secusb.JAASOp - - - org.ow2.jonas.security.auth.callback.DialogCallbackHandler - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client.xml deleted file mode 100644 index 3430cd1d0f..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/application-client.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Client of the JAASOp sample - - - ejb/JAASOp - Session - jaasclient.beans.secusb.JAASOpHome - jaasclient.beans.secusb.JAASOp - - - org.ow2.jonas.security.auth.callback.LoginCallbackHandler - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client1.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client1.xml deleted file mode 100644 index bd0bc64b63..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client1.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - ejb/JAASOp - JAASOpHome - - - - jaas.config - jaasclient - jonas - jonas - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client2.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client2.xml deleted file mode 100644 index a4331e8ff9..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client2.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ejb/JAASOp - JAASOpHome - - - - jaas.config - jaasclient - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client3.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client3.xml deleted file mode 100644 index a4331e8ff9..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-client3.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - ejb/JAASOp - JAASOpHome - - - - jaas.config - jaasclient - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-secusb.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-secusb.xml deleted file mode 100644 index 81fb51bb8d..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/jonas-secusb.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - JAASOp - JAASOpHome - - diff --git a/jonas_tests/examples/base/examples/jaasclient/etc/xml/secusb.xml b/jonas_tests/examples/base/examples/jaasclient/etc/xml/secusb.xml deleted file mode 100644 index 763ce558de..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/etc/xml/secusb.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - secured session bean JOnAS example - - secusb (jaasclient) - - - - JAASOp - jaasclient.beans.secusb.JAASOpHome - jaasclient.beans.secusb.JAASOp - jaasclient.beans.secusb.JAASOpBean - Stateful - Container - - - - - - jaas - - - - jaas - - JAASOp - * - - - - - - JAASOp - * - - Supports - - - - - diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOp.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOp.java deleted file mode 100644 index 31a4d084cc..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOp.java +++ /dev/null @@ -1,221 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): jonas team - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient; - -import jaasclient.beans.secusb.JAASOp; -import jaasclient.beans.secusb.JAASOpHome; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.login.LoginContext; -import javax.security.auth.login.LoginException; -import javax.transaction.UserTransaction; - -import org.ow2.jonas.security.auth.callback.DialogCallbackHandler; -import org.ow2.jonas.security.auth.callback.LoginCallbackHandler; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; - -/** - * Sample for Session Bean. Usage: jclient jaasclient.ClientJAASOp - * @author jonas team - * @author Florent Benoit : use a JAAS login module configuration for the - * authentication - */ -public class ClientJAASOp { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientJAASOp() { - - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - //Check if there are valid args - if (args.length != 1) { - System.err.println("Syntax is : jclient jaasclient.ClientJAASOp "); - System.err.println(" - text : Prompt the user to enter login/password by command line"); - System.err.println(" - dialog : Prompt the user to enter login/password by a window dialog"); - System.err.println(" - noprompt : No prompt is asked to the user. A default login/password is used"); - System.exit(2); - } - - // Which handler use ? - CallbackHandler handler = null; - - if (args[0].equalsIgnoreCase("text")) { - handler = new LoginCallbackHandler(); - } else if (args[0].equalsIgnoreCase("dialog")) { - handler = new DialogCallbackHandler(); - } else if (args[0].equalsIgnoreCase("noprompt")) { - handler = new NoInputCallbackHandler("jonas", "jonas"); - } else { - System.err.println("Invalid type '" + args[0] - + "', valid syntax is : jclient jaasclient.ClientJAASOp "); - System.exit(2); - } - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // Obtain a LoginContext - LoginContext lc = null; - try { - lc = new LoginContext("jaasclient", handler); - } catch (LoginException le) { - System.err.println("Cannot create LoginContext: " + le.getMessage()); - System.exit(2); - } catch (SecurityException se) { - System.err.println("Cannot create LoginContext: " + se.getMessage()); - System.exit(2); - } - - System.out - .println("Use the l/p jonas/jonas to authenticate with the right role.\nYou can change this by editing the file JONAS_ROOT/conf/jonas-realm.xml."); - - // Login - try { - lc.login(); - } catch (LoginException le) { - System.err.println("Authentication failed : " + le.getMessage()); - System.exit(2); - } - - // Authentication is ok - System.out.println("Authentication succeeded"); - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - - // Comment the following lines if you want to use a David Client: - utx = (UserTransaction) initialContext.lookup("javax.transaction.UserTransaction"); - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - - // Connecting to JAASOpHome thru JNDI - JAASOpHome home = null; - try { - home = (JAASOpHome) PortableRemoteObject.narrow(initialContext.lookup("JAASOpHome"), JAASOpHome.class); - } catch (Exception e) { - System.err.println("Cannot lookup JAASOpHome: " + e - + ". Maybe you haven't do the 'jonas admin -a jaasop.jar'"); - System.exit(2); - } - - // JAASOpBean creation - JAASOp t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create JAASOpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientJAASOp OK. Exiting."); - System.exit(0); - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClient.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClient.java deleted file mode 100644 index 638d7b840c..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClient.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): jonas team - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient; - -// import javax -import jaasclient.beans.secusb.JAASOp; -import jaasclient.beans.secusb.JAASOpHome; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.transaction.UserTransaction; - -/** - * Sample for Session Bean. - * Usage: - * jclient jaasclient.ClientJAASOpContClient - * @author jonas team - * @author Florent Benoit - */ -public class ClientJAASOpContClient { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientJAASOpContClient() { - - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - } catch (Exception e) { - System.err.println("Cannot lookup java:comp/UserTransaction: " + e); - System.exit(2); - } - - // Connecting to JAASOpHome thru JNDI - JAASOpHome home = null; - try { - home = (JAASOpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/JAASOp"), JAASOpHome.class); - } catch (Exception e) { - System.err.println("Cannot lookup java:comp/env/ejb/JAASOp: " + e + ". Maybe you haven't do the 'jonas admin -a jaasop.jar'"); - System.exit(2); - } - - // JAASOpBean creation - JAASOp t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create JAASOpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientJAASOpContClient OK. Exiting."); - System.exit(0); - } -} diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClientSwing.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClientSwing.java deleted file mode 100644 index 85e3725cf0..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/ClientJAASOpContClientSwing.java +++ /dev/null @@ -1,184 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): jonas team - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient; - -import jaasclient.beans.secusb.JAASOp; -import jaasclient.beans.secusb.JAASOpHome; - -import java.awt.event.ActionEvent; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.WindowConstants; -import javax.transaction.UserTransaction; - -/** - * Sample for Session Bean. - * @author jonas team - * @author Florent Benoit - * @author Markus Karg : Add Swing interface - */ -public class ClientJAASOpContClientSwing { - - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientJAASOpContClientSwing() { - - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - - final JFrame jf = new JFrame("Test Application"); - jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - final JButton jb = new JButton(); - final Action a = new AbstractAction("Click here to test!") { - public final void actionPerformed(final ActionEvent v) { - - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - utx = (UserTransaction) initialContext.lookup("java:comp/UserTransaction"); - } catch (Exception e) { - System.err.println("Cannot lookup java:comp/UserTransaction: " + e); - System.exit(2); - } - - // Connecting to JAASOpHome thru JNDI - JAASOpHome home = null; - try { - home = (JAASOpHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/JAASOp"), JAASOpHome.class); - } catch (Exception e) { - System.err.println("Cannot lookup java:comp/env/ejb/JAASOp: " + e + ". Maybe you haven't do the 'jonas admin -a jaasop.jar'"); - System.exit(2); - } - - // JAASOpBean creation - JAASOp t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create JAASOpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientJAASOpContClientSwing OK. Exiting."); - System.exit(0); - - - - } - }; - jb.setAction(a); - jf.getContentPane().add(jb); - jf.pack(); - jf.setVisible(true); - } -} diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOp.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOp.java deleted file mode 100644 index a0ad103433..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOp.java +++ /dev/null @@ -1,53 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient.beans.secusb; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * Remote interface for the bean JAASOp - * @author JOnAS team - */ -public interface JAASOp extends EJBObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - * @throws RemoteException if RMI failed. - */ - void buy (int shares) throws RemoteException; - - /** - * Business method implementation. - * @return the nb of shares bought - * @throws RemoteException if RMI failed. - */ - int read () throws RemoteException; - -} diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpBean.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpBean.java deleted file mode 100644 index 85b4aaf468..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpBean.java +++ /dev/null @@ -1,240 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient.beans.secusb; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; - -/** - * This is an example of Session Bean, statefull, and synchronized. - * @author JOnAS team - */ -public class JAASOpBean implements SessionBean, SessionSynchronization { - - /** - * Actual state of the bean - */ - private int total = 0; - - /** - * value inside Tx, not yet committed. - */ - private int newtotal = 0; - - /** - * User client - */ - private String clientUser = null; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param user the user name - */ - public void ejbCreate(String user) { - total = 0; - // in case we are outside transactions - newtotal = total; - clientUser = user; - } - - /* =============== javax.ejb.SessionBean 2.0 implementation ============== */ - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - } - - /* - * ============== javax.ejb.SessionSynchronization implementation - * ============= - */ - - /** - * The afterBegin method notifies a session Bean instance that a new - * transaction has started, and that the subsequent business methods on the - * instance will be invoked in the context of the transaction. The instance - * can use this method, for example, to read data from a database and cache - * the data in the instance fields. This method executes in the proper - * transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterBegin() throws EJBException, java.rmi.RemoteException { - newtotal = total; - } - - /** - * The beforeCompletion method notifies a session Bean instance that a - * transaction is about to be committed. The instance can use this method, - * for example, to write any cached data to a database. This method executes - * in the proper transaction context. Note: The instance may still - * cause the container to rollback the transaction by invoking the - * setRollbackOnly() method on the instance context, or by throwing an - * exception. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void beforeCompletion() throws EJBException, java.rmi.RemoteException { - } - - /** - * The afterCompletion method notifies a session Bean instance that a - * transaction commit protocol has completed, and tells the instance whether - * the transaction has been committed or rolled back. This method executes - * with no transaction context. - * @param committed - True if the transaction has been committed, false if - * is has been rolled back. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterCompletion(boolean committed) throws EJBException, java.rmi.RemoteException { - - if (committed) { - total = newtotal; - } else { - newtotal = total; - } - } - - /* ========================= Op implementation ============================ */ - - /** - * Business method implementation. - * @param s nb of shares to be bought - */ - public void buy(int s) { - newtotal = newtotal + s; - return; - } - - /** - * Business method implementation. - * @return the nb of shares bought - */ - public int read() { - return newtotal; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpHome.java b/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpHome.java deleted file mode 100644 index aef5a80e23..0000000000 --- a/jonas_tests/examples/base/examples/jaasclient/src/jaasclient/beans/secusb/JAASOpHome.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package jaasclient.beans.secusb; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean JAASOp - * @author JOnAS team - */ -public interface JAASOpHome extends EJBHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - * @throws RemoteException if the RMI call failed. - */ - JAASOp create(String user) throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/jdo/Bank_src.zip b/jonas_tests/examples/base/examples/jdo/Bank_src.zip deleted file mode 100644 index daf554b007c0a03a721b63816e0f16adc20718e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11176 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

    w#t**OCIzFh3PH4jGzVfcSzEt z%^>~dhBdV>0=lR^Z)V;Q7d))(#NSrXmcwZ!rHo=5`D{4&` zEnSw(Ip-S;24EP%$v5K97rlpC%=TOXtHceANVfqUdpCUN;)ZrB3wUr)uFOuoc6@jl zQTOklI>cKN8d05MC)k-s;T@?ZhT*~Ml}($zg8HgIjR-pZ%c8poNpwGjg~u=tx6{W} zN^HWIS7{7+zf-M?Ck?&@769LDeaEBB;gI|e z+YWK)Pc14L=@R1qwFk$sw=T@$FmhpKtp$#VRM37K2@a(0QoUn}@cBgHV-5CZ3`PySS?3m|-;Zy03XP7)YNG)ilz*cDmHT{Z%H5CeHL@q(}KGT>WCGNO{Pth(2O1p-g z#~uH!=26QoYHjHhny-W2GQJ91FVP!v&TWCsDdk+vX-T^@8eKnP zKI+Ku*q1C_Y)Oe!)M~+?CHM9)JaN4#Cltr)m}~h^MZ&gA0Mn3gJ+1`#Sx&;cJ z-WuhYw!Y=3sq+R6m5H{TMH^AFw8K9ME-o#27cEzBfsGG^&ef;ib5-(29m6#@cylB6J*?i#BgA6eyx~jQ^gx%=T;nE_MOEZImo1h^Jxvl?@9X>!RD@KNI8M(ql{dk}b-QgBW)E@Z?h=SWj@4@oY8yxapp^2J&!MKY`OCu!68-KD%bJn}W)tv68UZ$`J+t9`~NEz1HFX$hVh9j>De`N7d)NVjdr`>U* z7-#ed1{UE2UN7GAAwj|gsK$#CbHHfB>sI;{C$@e$*w>+gS+XC<8237nj4yg0U2PAR z{Lp!T%GCv)C^bo>Dh{*e?S1F;*=f7Y<(%)l<~V~8JTOx066&@y@%W+XhXNcS&V+Tg zGaX?)-C1f6$q4P~?aq132SfJ>tuaX`m?mX%Qj*7+vsNqMZRGglUg%+EQ$!!U>xhy4 z4)6)%DK5D)*I6B9M|Kw&A0CPPfzbEu_=_mJv2=km=Q%)Nd|6$$FtBxW1U;`EXT{Fv z7#pb-*N@hQSOJu^r$m^!5_bs3VG1SCn>ly)L(O1Z>3_S+L)zSDuz z%~~3LVLn{b^4Kt^Xu#}(xuM$3!1{g2b@~EQyU!=n*`GF#t{x~oT|t1!zVRbn*J${! zCm$fbTBUcou_h0%FcT6l@smZD8kUx$*3Vnd4JvM_se6$M5rXT+CO0ODH_8KLf8_Vf zp##WfCE6}2qSd3TyaTjMh4!W2H$vrsYcM}pV(D+a(<@_xPT8F}pn3h(xWBb1=S**Z zqI2TrOl&6VZ3Qd2pi{&`cgD93a?!&6a<}M{xM~-;MjGh}9ppt#^H}}8RPI;tm01~h zGtkTmW^05}Jjz=K))ddlK2ByStOk={nS_}w+Z2`Ddmp>J`!nf9g3i|<1y}E;BSib~ z;`-fMpfX*c3Kmd&kZ*a~+1vrko#oxun7cGXDI3wLZ_`Jz*YmBEm-&lIYo@l;yfBg6 zly9kr5^s;E-Q`i!6Ve2;*mi+^vqq{I=851+x6mhhx%0k*r2#o?+pQL@U|(sT`^2Xg z4Uox13f z-SzSI#SaeRdr-K^-mrsQo@(WZ0!4bbbdy&`8^|Qi9q^Wfsf>>i0)FO=cj%OnD4Y+G z-eWJkafXTt55$!7fhA5E(}{BY(?~(X^ds!&|MJM~*`TTEm z|CY^P(!H#p{GtnZ&IkXc`#+Y=%WV4>Lo)vVV)!Tbe)$$J)6icWUtj&k@ggaG$?`H& z`^BNPOZdxO@)vyPxu@~3CjZ?tU*cc7.properties - -Djdbc.driver=.jar - createDataStruct - -For example: - $ ant -Dspeedo.dbconf=$JONAS_BASE/conf/PostgreSQL1.properties -Djdbc.driver=/usr/share/postgresql/pg74.215.jdbc3.jar createDataStruct - - -Running this example -==================== -Commands are given for an Unix system, similar commands can be done on Windows. - -1) Run a JOnAS server with speedo: - $ jonas start - $ jonas admin -a speedo-jdo_for_jonas_ra.rar - -2) Load the ejb-jar file of this example - $ jonas admin -a bank.jar - -3) Run the client - $ jclient -cp $JONAS_BASE/ejbjars/bank.jar:$JONAS_ROOT/lib/commons/jonas/speedo/speedo-jdo_client.jar Client - -4) Stop the JOnAS server - $ jonas stop - - - diff --git a/jonas_tests/examples/base/examples/jdo/build.xml b/jonas_tests/examples/base/examples/jdo/build.xml deleted file mode 100644 index 6c276d9aec..0000000000 --- a/jonas_tests/examples/base/examples/jdo/build.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/jonas-common.xml b/jonas_tests/examples/base/examples/jonas-common.xml deleted file mode 100644 index 5cbe72064f..0000000000 --- a/jonas_tests/examples/base/examples/jonas-common.xml +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/build.xml b/jonas_tests/examples/base/examples/src/build.xml deleted file mode 100644 index 8fc33165cf..0000000000 --- a/jonas_tests/examples/base/examples/src/build.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/eb/Account.idb b/jonas_tests/examples/base/examples/src/eb/Account.idb deleted file mode 100644 index 7c6ade33e9..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/Account.idb +++ /dev/null @@ -1,23 +0,0 @@ -; First load the JDBC driver and open a database. -d org.enhydra.instantdb.jdbc.idbDriver; -; for Instantdb version older than v3.14, put the following line instead: -; d jdbc.idbDriver; -o jdbc:idb=db1.prp; - -; Create the table -e DROP TABLE accountsample_; -e CREATE TABLE accountsample_ ( - accno_ int PRIMARY KEY, - customer_ VARCHAR(30), - balance_ double); - -; put some initial data in the table -p INSERT INTO accountsample_ VALUES (?,?,?); -s 101,'Antoine de St Exupery', 200.00; -s 102,'Alexandre Dumas fils', 400.00; -s 103,'Conan Doyle', 500.00; -s 104,'Alfred de Musset', 100.00; -s 105,'Phileas Lebegue', 350.00; -s 106,'Alphonse de Lamartine', 650.00; -q SELECT * FROM accountsample_; -c close; diff --git a/jonas_tests/examples/base/examples/src/eb/Account.java b/jonas_tests/examples/base/examples/src/eb/Account.java deleted file mode 100644 index 8dd7aa56fb..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/Account.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * Remote interface for the bean Account - * @author JOnAS team - */ -public interface Account extends EJBObject { - - double getBalance() throws RemoteException; - - void setBalance(double d) throws RemoteException; - - String getCustomer() throws RemoteException; - - void setCustomer(String c) throws RemoteException; - - int getNumber() throws RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/Account.pgsql b/jonas_tests/examples/base/examples/src/eb/Account.pgsql deleted file mode 100644 index 2cdde88888..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/Account.pgsql +++ /dev/null @@ -1,12 +0,0 @@ -drop table accountsample_; -create table accountsample_ ( - accno_ integer primary key, - customer_ varchar(30), - balance_ float8 -); -insert into accountsample_ values(101, 'Antoine de St Exupery', 200.00); -insert into accountsample_ values(102, 'alexandre dumas fils', 400.00); -insert into accountsample_ values(103, 'conan doyle', 500.00); -insert into accountsample_ values(104, 'alfred de musset', 100.00); -insert into accountsample_ values(105, 'phileas lebegue', 350.00); -insert into accountsample_ values(106, 'alphonse de lamartine', 650.00); diff --git a/jonas_tests/examples/base/examples/src/eb/Account.sql b/jonas_tests/examples/base/examples/src/eb/Account.sql deleted file mode 100644 index d46b009b45..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/Account.sql +++ /dev/null @@ -1,13 +0,0 @@ -drop table accountsample_; -set autocommit true; -create table accountsample_ ( - accno_ integer primary key, - customer_ varchar(30), - balance_ number(15, 4) -); -insert into accountsample_ values(101, 'Antoine de St Exupery', 200.00); -insert into accountsample_ values(102, 'alexandre dumas fils', 400.00); -insert into accountsample_ values(103, 'conan doyle', 500.00); -insert into accountsample_ values(104, 'alfred de musset', 100.00); -insert into accountsample_ values(105, 'phileas lebegue', 350.00); -insert into accountsample_ values(106, 'alphonse de lamartine', 650.00); diff --git a/jonas_tests/examples/base/examples/src/eb/AccountExplBean.java b/jonas_tests/examples/base/examples/src/eb/AccountExplBean.java deleted file mode 100644 index 1d759eb781..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/AccountExplBean.java +++ /dev/null @@ -1,541 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Enumeration; -import java.util.Vector; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.sql.DataSource; - -/** - * AccountExplBean is an entity bean with "bean managed persistence". The state - * of an instance is stored into a relational database. The following table - * should exist: create table ACCOUNT (ACCNO integer primary key, CUSTOMER - * varchar(30), BALANCE number(15,4)); Note : In order to keep the code - * readable, not all database errors have been handled. In particular the - * closing of the statement and of the connexion would have being put in a - * "finally" block. - * @author JOnAS team - */ - -public class AccountExplBean implements EntityBean { - - private DataSource dataSource = null; - - // Keep the reference on the EntityContext - protected EntityContext entityContext; - - // Object state - must de public (EJB spec.) - public Integer accno; - - public String customer; - - public double balance; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param accno account number - * @param customer customer name - * @param balance initial balance - * @return pk primary key - * @exception CreateException If the instance could not perform the function - * requested by the container - */ - public Integer ejbCreate(int val_accno, String val_customer, double val_balance) throws CreateException { - - // Init object state - accno = new Integer(val_accno); - customer = val_customer; - balance = val_balance; - - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - - // create object in DB - stmt = conn.prepareStatement("insert into accountsample_ (accno_, customer_, balance_) values (?, ?, ?)"); - stmt.setInt(1, accno.intValue()); - stmt.setString(2, customer); - stmt.setDouble(3, balance); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new CreateException("Failed to create bean in database: " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - // Return the primary key - return accno; - } - - /** - * Each ejbCreate method should have a matching ejbPostCreate method - */ - public void ejbPostCreate(int val_accno, String val_customer, double val_balance) { - // Nothing to be done for this simple example. - } - - /* - * ====================== javax.ejb.EntityBean implementation - * ================= - */ - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. This method transitions the instance to the ready state. This - * method executes in an unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbActivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbLoad() { - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - - // find account in DB - stmt = conn.prepareStatement("select customer_,balance_ from accountsample_ where accno_=?"); - Integer pk = (Integer) entityContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - if (!rs.next()) { - throw new EJBException("Failed to load bean from database"); - } - - // update object state - accno = pk; - customer = rs.getString("customer_"); - balance = rs.getDouble("balance_"); - - } catch (SQLException e) { - throw new EJBException("Failed to load bean from database " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. After this method - * completes, the container will place the instance into the pool of - * available instances. This method executes in an unspecified transaction - * context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbPassivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - * @exception RemoveException The enterprise Bean does not allow destruction - * of the object. - */ - public void ejbRemove() throws RemoveException { - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - - // delete Object in DB - stmt = conn.prepareStatement("delete from accountsample_ where accno_=?"); - Integer pk = (Integer) entityContext.getPrimaryKey(); - stmt.setInt(1, pk.intValue()); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new RemoveException("Failed to delete bean from database" + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbStore() { - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - - // store Object state in DB - stmt = conn.prepareStatement("update accountsample_ set customer_=?,balance_=? where accno_=?"); - stmt.setString(1, customer); - stmt.setDouble(2, balance); - Integer pk = (Integer) entityContext.getPrimaryKey(); - stmt.setInt(3, pk.intValue()); - stmt.executeUpdate(); - - } catch (SQLException e) { - throw new EJBException("Failed to store bean to database " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - } - - /** - * Sets the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setEntityContext(EntityContext ctx) { - - // Keep the entity context in object - entityContext = ctx; - - } - - /** - * Unsets the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void unsetEntityContext() { - entityContext = null; - } - - /* ============================ ejbFind methods =========================== */ - - /** - * There must be one ejbFind method per find method on the Home interface, - * and with the same signature. ejbFindByPrimaryKey is the only mandatory - * ejbFind method. - * @param pk The primary key - * @return pk The primary key - * @exception FinderException - Failed to execute the query. - * @exception ObjectNotFoundException - Object not found for this primary - * key. - */ - public Integer ejbFindByPrimaryKey(Integer pk) throws ObjectNotFoundException, FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - - // lookup for this primary key in DB - stmt = conn.prepareStatement("select accno_ from accountsample_ where accno_=?"); - stmt.setInt(1, pk.intValue()); - ResultSet rs = stmt.executeQuery(); - if (!rs.next()) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - - // return primary key - return pk; - } - - /** - * Find Account by its account number - * @return pk The primary key - * @exception FinderException - Failed to execute the query. - * @exception ObjectNotFoundException - Object not found for this account - * number - */ - public Integer ejbFindByNumber(int accno) throws ObjectNotFoundException, FinderException { - - Connection conn = null; - PreparedStatement stmt = null; - try { - // get a connection for this transaction context - conn = getConnection(); - // lookup for this primary key in DB - stmt = conn.prepareStatement("select accno_ from accountsample_ where accno_=?"); - stmt.setInt(1, accno); - ResultSet rs = stmt.executeQuery(); - if (!rs.next()) { - throw new javax.ejb.ObjectNotFoundException(); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - - // return a primary key for this account - return new Integer(accno); - } - - /** - * Creates an enumeration of primary keys for all accounts - * @return pkv The primary keys - * @exception FinderException - Failed to execute the query. - */ - public Enumeration ejbFindAllAccounts() throws FinderException { - Connection conn = null; - PreparedStatement stmt = null; - Vector pkv = new Vector(); - try { - // get a connection for this transaction context - conn = getConnection(); - - // Lookup for all accounts in DB - stmt = conn.prepareStatement("select accno_ from accountsample_"); - ResultSet rs = stmt.executeQuery(); - - // Build the vector of primary keys - while (rs.next()) { - Integer pk = new Integer(rs.getInt("accno_")); - pkv.addElement((Object) pk); - } - - } catch (SQLException e) { - throw new javax.ejb.FinderException("Failed to executeQuery " + e); - } finally { - try { - if (stmt != null) { - //close statement - stmt.close(); - } - if (conn != null) { - //release connection - conn.close(); - } - } catch (Exception ignore) { - } - } - - // return primary keys - return pkv.elements(); - } - - /** - * @return the connection from the dataSource - * @exception EJBException Thrown by the method if the dataSource is not - * found in the naming. - * @exception SQLException may be thrown by dataSource.getConnection() - */ - private Connection getConnection() throws EJBException, SQLException { - if (dataSource == null) { - // Finds DataSource from JNDI - Context initialContext = null; - try { - initialContext = new InitialContext(); - dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/AccountExplDs"); - } catch (Exception e) { - System.out.println("Cannot lookup dataSource" + e); - throw new javax.ejb.EJBException("Cannot lookup dataSource "); - } - } - return dataSource.getConnection(); - } - - /* - * ========================= Account implementation - * ============================ - */ - - /** - * Business method for returning the balance. - * @return balance - */ - public double getBalance() { - - return balance; - } - - /** - * Business method for updating the balance. - * @param d balance to update - */ - public void setBalance(double d) { - - balance = balance + d; - } - - /** - * Business method for returning the customer. - * @return customer - */ - public String getCustomer() { - - return customer; - } - - /** - * Business method for changing the customer name. - * @param c customer to update - */ - public void setCustomer(String c) { - - customer = c; - } - - /** - * Business method to get the Account number - */ - public int getNumber() { - return accno.intValue(); - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/AccountHome.java b/jonas_tests/examples/base/examples/src/eb/AccountHome.java deleted file mode 100644 index 694c45a949..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/AccountHome.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -import java.rmi.RemoteException; -import java.util.Enumeration; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; -import javax.ejb.FinderException; - -/** - * Home interface for the bean Account - * @author JOnAS team - */ -public interface AccountHome extends EJBHome { - - Account create(int accno, String customer, double balance) throws RemoteException, CreateException; - - Account findByPrimaryKey(Integer pk) throws RemoteException, FinderException; - - Account findByNumber(int accno) throws RemoteException, FinderException; - - Enumeration findAllAccounts() throws RemoteException, FinderException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/AccountImpl2Bean.java b/jonas_tests/examples/base/examples/src/eb/AccountImpl2Bean.java deleted file mode 100644 index df9b888ade..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/AccountImpl2Bean.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -/** - * Accountbean is an entity bean with "container managed persistence version 2". - * The state of an instance is stored into a relational database. The following - * table should exist: create table ACCOUNT (ACCNO integer primary key, CUSTOMER - * varchar(30), BALANCE number(15,4)); - * @author Christophe Ney cney@batisseurs.com - */ - - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -public abstract class AccountImpl2Bean implements EntityBean { - - // Keep the reference on the EntityContext - protected EntityContext entityContext; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param accno account number - * @param customer customer name - * @param balance initial balance - * @return pk primary key set to null - */ - public Integer ejbCreate(int val_accno, String val_customer, double val_balance) throws CreateException { - - // Init object state - setAccno(val_accno); - setCustomer(val_customer); - setBalance(val_balance); - return null; - } - - /** - * Each ejbCreate method should have a matching ejbPostCreate method - */ - public void ejbPostCreate(int val_accno, String val_customer, double val_balance) { - // Nothing to be done for this simple example. - } - - /* - * ====================== javax.ejb.EntityBean implementation - * ================= - */ - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. This method transitions the instance to the ready state. This - * method executes in an unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbActivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbLoad() { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. After this method - * completes, the container will place the instance into the pool of - * available instances. This method executes in an unspecified transaction - * context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbPassivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - * @exception RemoveException The enterprise Bean does not allow destruction - * of the object. - */ - public void ejbRemove() throws RemoveException { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbStore() { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * Sets the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setEntityContext(EntityContext ctx) { - - // Keep the entity context in object - entityContext = ctx; - } - - /** - * Unsets the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void unsetEntityContext() { - entityContext = null; - } - - /** - * Business method to get the Account number - */ - public int getNumber() { - return getAccno(); - } - - /* - * ========================= Account implementation - * ============================ - */ - - public abstract String getCustomer(); - - public abstract void setCustomer(String customer); - - public abstract double getBalance(); - - public abstract void setBalance(double balance); - - public abstract int getAccno(); - - public abstract void setAccno(int accno); - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/AccountImplBean.java b/jonas_tests/examples/base/examples/src/eb/AccountImplBean.java deleted file mode 100644 index bc6a5e5d95..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/AccountImplBean.java +++ /dev/null @@ -1,248 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -/** - * Accountbean is an entity bean with "container managed persistence". The state - * of an instance is stored into a relational database. The following table - * should exist: create table ACCOUNT (ACCNO integer primary key, CUSTOMER - * varchar(30), BALANCE number(15,4)); - * @author JOnAS team - */ - - -import javax.ejb.CreateException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -public class AccountImplBean implements EntityBean { - - // Keep the reference on the EntityContext - protected EntityContext entityContext; - - // Object state - public Integer accno; - - public String customer; - - public double balance; - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param accno account number - * @param customer customer name - * @param balance initial balance - * @return pk primary key set to null - */ - public Integer ejbCreate(int val_accno, String val_customer, double val_balance) throws CreateException { - - // Init object state - accno = new Integer(val_accno); - customer = val_customer; - balance = val_balance; - return null; - } - - /** - * Each ejbCreate method should have a matching ejbPostCreate method - */ - public void ejbPostCreate(int val_accno, String val_customer, double val_balance) { - // Nothing to be done for this simple example. - } - - /* - * ====================== javax.ejb.EntityBean implementation - * ================= - */ - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. This method transitions the instance to the ready state. This - * method executes in an unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbActivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbLoad() { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. After this method - * completes, the container will place the instance into the pool of - * available instances. This method executes in an unspecified transaction - * context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbPassivate() { - // Nothing to be done for this simple example. - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - * @exception RemoveException The enterprise Bean does not allow destruction - * of the object. - */ - public void ejbRemove() throws RemoveException { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbStore() { - // Nothing to be done for this simple example, in implicit persistance. - } - - /** - * Sets the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setEntityContext(EntityContext ctx) { - - // Keep the entity context in object - entityContext = ctx; - } - - /** - * Unsets the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @exception EJBException Thrown by the method to indicate a failure caused - * by a system-level error. - * @exception RemoteException - This exception is defined in the method - * signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specification should throw - * the javax.ejb.EJBException instead of this exception. - */ - public void unsetEntityContext() { - entityContext = null; - } - - /* - * ========================= Account implementation - * ============================ - */ - - /** - * Business method for returning the balance. - * @return balance - */ - public double getBalance() { - - return balance; - } - - /** - * Business method for updating the balance. - * @param d balance to update - */ - public void setBalance(double d) { - - balance = balance + d; - } - - /** - * Business method for returning the customer. - * @return customer - */ - public String getCustomer() { - - return customer; - } - - /** - * Business method for changing the customer name. - * @param c customer to update - */ - public void setCustomer(String c) { - - customer = c; - } - - /** - * Business method to get the Account number - */ - public int getNumber() { - return accno.intValue(); - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/Accounthsqldb.sql b/jonas_tests/examples/base/examples/src/eb/Accounthsqldb.sql deleted file mode 100644 index 4885f418ee..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/Accounthsqldb.sql +++ /dev/null @@ -1,12 +0,0 @@ -drop table accountsample_; -create table accountsample_ ( - accno_ integer primary key, - customer_ varchar(30), - balance_ float -); -insert into accountsample_ values(101, 'Antoine de St Exupery', 200.00); -insert into accountsample_ values(102, 'alexandre dumas fils', 400.00); -insert into accountsample_ values(103, 'conan doyle', 500.00); -insert into accountsample_ values(104, 'alfred de musset', 100.00); -insert into accountsample_ values(105, 'phileas lebegue', 350.00); -insert into accountsample_ values(106, 'alphonse de lamartine', 650.00); diff --git a/jonas_tests/examples/base/examples/src/eb/ClientAccount.java b/jonas_tests/examples/base/examples/src/eb/ClientAccount.java deleted file mode 100644 index efb4a15f0a..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/ClientAccount.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package eb; - -import java.util.Enumeration; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.transaction.UserTransaction; - -/** - * Sample for entity beans. Usage: implicit persistance: java eb.ClientAccount - * AccountImplHome explicit persistance: java eb.ClientAccount AccountExplHome - * @author JOnAS team - */ -public class ClientAccount { - - /** - * UserTransaction object - */ - private static UserTransaction utx = null; - - private static void accountList(AccountHome h) { - Enumeration alist; - Account acc; - try { - utx.begin(); // faster if made inside a Tx - alist = h.findAllAccounts(); - while (alist.hasMoreElements()) { - acc = (Account) PortableRemoteObject.narrow(alist.nextElement(), Account.class); - System.out.println(acc.getNumber() + " " + acc.getCustomer() + " " + acc.getBalance()); - } - utx.commit(); - } catch (Exception e) { - System.err.println("Exception getting account list: " + e); - System.exit(2); - } - } - - public static void main(String[] args) { - - // 1st arg. is the bean home (AccountImplHome or AccountExplHome) - String beanName = args[0]; - - // get JNDI initial context - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // We want to start transactions from client: get UserTransaction - System.out.println("Getting a UserTransaction object from JNDI"); - try { - - // Comment the following lines if you want to use a David Client: - utx = (UserTransaction) initialContext.lookup("javax.transaction.UserTransaction"); - - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - - // Connecting to Home thru JNDI - System.out.println("Connecting to the AccountHome"); - AccountHome home = null; - try { - home = (AccountHome) PortableRemoteObject.narrow(initialContext.lookup(beanName), AccountHome.class); - } catch (Exception e) { - System.err.println("Cannot lookup " + beanName + ": " + e); - System.exit(2); - } - - // List existing Accounts - System.out.println("Getting the list of existing accounts in database"); - accountList(home); - - // Create a first Account - System.out.println("Creating a new Account in database"); - Account a1 = null; - try { - a1 = home.create(109, "John Smith", 0); - } catch (Exception e) { - System.err.println("Cannot create Account: " + e); - System.exit(2); - } - - // Find a second Account - System.out.println("Finding an Account by its number in database"); - Account a2 = null; - try { - a2 = home.findByNumber(102); - } catch (Exception e) { - System.err.println("Cannot find Account: " + e); - System.exit(2); - } - - // First transaction (committed): - // transfert 100 from a2 to a1 - System.out.println("Starting a first transaction, that will be committed"); - try { - double value = 100.00; - utx.begin(); - a1.setBalance(value); - a2.setBalance(-value); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - - // Start another transaction (rolled back): - // transfert 20 from a1 to a2 - System.out.println("Starting a second transaction, that will be rolled back"); - try { - double value = 20.00; - utx.begin(); - a1.setBalance(-value); - a2.setBalance(value); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // List existing Accounts - System.out.println("Getting the new list of accounts in database"); - accountList(home); - - // Delete account - System.out.println("Removing Account previously created in database"); - try { - a1.remove(); - } catch (Exception e) { - System.err.println("exception during remove: " + e); - System.exit(2); - } - - // Exit program - System.out.println("ClientAccount terminated"); - } - -} - diff --git a/jonas_tests/examples/base/examples/src/eb/README b/jonas_tests/examples/base/examples/src/eb/README deleted file mode 100644 index 008d5088f9..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/README +++ /dev/null @@ -1,42 +0,0 @@ -Copyright (C) BULL S.A. 1998-2002 - -This example illustrate the use of entity beans - -Entity beans "Account" ----------------------- -AccountImp2 entity bean with "container managed" persistance EJB2.x -AccountImpl entity bean with "container managed" persistance EJB1.x -AccountExpl entity bean with "bean managed" persistance - - -Compiling this example: ------------------------ -ant -find build.xml install - - -Running this example: ---------------------- -Your database access should be configured: a properties file defining a - Datasource object should be defined in $JONAS_BASE/conf (e.g. HSQL1.properties), - and the property jonas.service.dbm.datasources of the jonas.properties file should - be set to the name of this datasource description file (e.g. HSQL1). See JOnAS - documentation for more details. - You must also, the first time you run the test, create the table in the database. - If you use the default database embedded in JOnAS (hsqldb) you only have to do - ant init_db (in this directory) after having started JOnAS. - For Other databases scripts SQL are provided Account.sql for Oracle - Account.pgsql for Postgres. - - -1) Run an JOnAS Server to make beans available to clients: - - jonas start - -2) Run the client via the Ant task runclient - ant runclient - -4) Stop the jonas server - jonas stop - - - diff --git a/jonas_tests/examples/base/examples/src/eb/application-client.xml b/jonas_tests/examples/base/examples/src/eb/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/eb/build.xml b/jonas_tests/examples/base/examples/src/eb/build.xml deleted file mode 100644 index 3bb6e603af..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/build.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/eb/db1.prp b/jonas_tests/examples/base/examples/src/eb/db1.prp deleted file mode 100644 index 9d87d68d0e..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/db1.prp +++ /dev/null @@ -1,325 +0,0 @@ -!--------------------------------------------------------------------- -! -! PROPERTIES for the InstantDB database used in the JOnAS eb example -! (builded from InstantDB/3.25/Examples/sample.prp) -! -!--------------------------------------------------------------------- - -!--------------------------------------------------------------------- -! -! BASIC PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Path where index tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -indexPath=./tmp/indexes -! -! Path where system tables are held. Can be absolute or relative to -! the properties file. Defaults to tablePath. -! -systemPath=./tmp/system -! -! Path where database tables are held. Can be absolute or relative -! to the properties file. Defaults to "current" directory. -! -tablePath=./tmp/tables -! -! Path where results set tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -tmpPath=./tmp/tmp -! -! Non-zero means paths are relative to the properties file. -! Default is absolute paths for files. -! -relativeToProperties=1 -! -! Alternative partitions can be defined so that tables can be placed -! in multiple locations. Each partition is numbered: 1, 2, 3,... Tables -! can be created on partitions using the syntax -! -! CREATE TABLE ON PARTITION ... -! -! The partition count has to be supplied. -! -!partitionCount=2 -! -! The locations of each partition must be supplied. These are always -! absolute path names. -! -!partition1=d:/petes -!partition2=c:/temp - - -!--------------------------------------------------------------------- -! -! TUNING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! The amount of each column to cache, expressed either as an absolute -! number of rows or as a percentage figure. Defaults to 256 or 10 respectively. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheAmount=512 -! -! CACHE_ROWS Must be one of CACHE_ROWS or CACHE_PERCENT. Determines whether -! to cache columns in tables based on an absolute number of rows, or the -! percentage number of rows in the table. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheCondition=CACHE_ROWS -! -! The amount of the system tables to be cached. Defaults to 100. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheSize=10 -! -! Similar to cacheCondition, but applies only to the system tables. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheCondition=CACHE_ROWS -! -! The percentage cache hit improvement required in order to move the -! cache to a new location in a column. -! -! (Currently not implemented). -! -cacheResetPercent=10 -! -! Non-zero means that database changes do not get written to the -! database immediately. See tuning.html. -! -fastUpdate=0 -! -! Percentage of free space in an index that must be present before -! the index reorganises itself. High values means frequent index -! reorganisation. Low values means slow index inserts. -! -indexLoad=5 -! -! The number of cache misses to include in calculations of the next -! base for the cache. -! -! (Currently not implemented). -! -missesInCacheStats=100 -! -! Non-zero means that results sets get instantiated on disk. By default -! InstantDB holds results sets emtirely in memory (apart from Binary -! columns). For large results sets this can be a problem. This property -! forces all results sets to be held on disk. -! -resultsOnDisk=0 -! -! Similar to cacheCondition but applies only to disk based -! results sets. Default is CACHE_ROWS. -! -resultsSetCache=CACHE_ROWS -! -! Similar to cacheAmount but applies only to disk based -! results sets. Default is 100. -! -resultsSetCacheAmount=100 -! -! Number of rows to read into the disk read ahead buffer. -! Recommended to be set somewhere around 128 to 256. -! Default is 20. -! -rowCacheSize=128 -! -! The read ahead buffer is effective at speeding up full -! table scans. However for indexed lookups or multiple -! simultaneous scans it is better to read a single row at -! a time. Each table holds a small number of single row -! buffers to improve such operations. Default is 8. -! -!singleRowCount=4 -! -! Sometimes the look ahead buffer can be held by a single -! thread even though it is not retrieveing many values from it. -! If too many lookups retrieve data from the single row -! buffers then it is better to flush the look ahead buffer and -! make it available for re-use. Default is 128. -! -!flushAfterCacheMisses=64 -! -! Number of rows to read ahead for system tables. By default -! system tables cache everything, so it is wasteful to have large -! read ahead buffers since they will very rarely be used. This -! allows the size of the system read ahead buffers to be reduced -! if necessary. Defaults to rowCacheSize. -! -!systemRows=20 -! -! The control column in all tables normally has a large cache -! since this speeds up all operation on that table. This can be -! varied to either improve performance or to reduce space. -! default is 8192. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!controlColCacheSize=512 -! -! By default, InstantDB only does a cursory search for deleted rows during -! UPDATE statements. Setting searchDeletes=1 causes more detailed searches -! for deleted rows. This slows down UPDATE executions, but reults in more -! compact tables. Default is 0. -! -searchDeletes=0 -! -! The interval, in milliseconds, between checks for statement execution -! timeouts. Default is 5000. -! -!timerCheck=5000 - -!--------------------------------------------------------------------- -! -! LOGGING AND DEBUGGING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Non-zero means include SQL statements in the export file. -! -exportSQL=0 -! -! Non-zero means trace output also directed to console. -! Defaults to 0. -! -!traceConsole=1 -traceConsole=0 -! -! Relative or absolute path where exporting and tracing goes. -! -traceFile=./tmp/trace.log -! -! Bitmap of various items that can be traced. See debug.html. -! Defaults to 0. -! -traceLevel=2 - - -!--------------------------------------------------------------------- -! -! TRANSACTION AND RECOVERY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! 0 means do not perform recovery on startup. -! 1 means perform automatic recovery -! 2 (default) means prompt the user using standard in -! -recoveryPolicy=2 -! -! Sets the level of transaction journalling. See trans.html. -! Defaults to 1. -! -! 0 - No journalling takes place. -! 1 - Normal journalling (default). -! 2 - Full journalling. -! -transLevel=1 -! -! When doing an import, defines the number of rows imported -! before the transaction is committed. Recommended value 8192. -! defaults to 100. -! -transImports=100 - -!--------------------------------------------------------------------- -! -! DATE, TIME AND CURRENCY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Number of digits after decimal point in currency outputs. Defaults to 2. -! -currencyDecimal=2 -! -! Currency symbol used in currency outputs. Defaults to $. -! -currencySymbol=$ -! -! Default format for date columns. Defaults to "yyyy-mm-dd". -! -dateFormat=yyyy-mm-dd -! -! Default format for timestamp columns. Defaults to "yyyy-mm-dd hh:mm:ss.lll". -! -dateTimeFormat=yyyy-mm-dd hh:mm:ss.lll -! -! If set, then all two digit dates less than its value are interpreted -! as 21st century dates. -! -!milleniumBoundary=50 -! -! Set to 1 causes the date string "now" to store a full timestamp. -! Default is to store only the date for fields with now hour in the -! format string. -! -nowMeansTime=0 - -!--------------------------------------------------------------------- -! -! STRING HANDLING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! If set to 1 then String hashes use the JDK Object.hashCode() function. -! By default, uses InstantDB's String hashing. -! -altStringHashing=0 -! -! Set to 1 to cause LIKE clauses to always perform case insensitive -! comparisons. -! -likeIgnoreCase=0 -! -! Same as SET LITERAL STRICT_ON. Prevents string literals being interpreted -! as column names or numbers. Default is 0. -! -strictLiterals=0 -! -! Set this value to 1 (one) if you would like PreparedStatement.setString() -! to ignore "\" (backslash) characters when proceesing string constants. -! When set, InstantDB will not attempt to interpret \ as the start of an -! escape sequence. Default is 0. -! -!prepareIgnoresEscapes=1 - -!--------------------------------------------------------------------- -! -! MISCELLANEOUS PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Allows selected InstantDB keywords to be un-reserved. -! e.g. ignoreKeywords=url,quote would allow the keywords -! url and quote to be used as table or column names. -! -! This faciliy is provided for compatatbility reasons only. -! It's use is not recommended AND IS NOT SUPPORTED. -! -!ignoreKeywords -! -! Non-zero means database is opened in read only mode. -! -readOnly=0 diff --git a/jonas_tests/examples/base/examples/src/eb/eb.xml b/jonas_tests/examples/base/examples/src/eb/eb.xml deleted file mode 100644 index f8f7d7d5f0..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/eb.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - Deployment descriptor for the eb JOnAS example - eb example - - - Deployment descriptor for the AccountExpl bean JOnAS example - AccountExpl - eb.AccountHome - eb.Account - eb.AccountExplBean - Bean - java.lang.Integer - false - - jdbc/AccountExplDs - javax.sql.DataSource - Container - - - - Deployment descriptor for the AccountImpl bean JOnAS example - AccountImpl - eb.AccountHome - eb.Account - eb.AccountImplBean - Container - java.lang.Integer - false - 1.x - - accno - - - customer - - - balance - - accno - - - - Deployment descriptor for the AccountImpl2 bean with CMP2 JOnAS example - AccountImpl2 - eb.AccountHome - eb.Account - eb.AccountImpl2Bean - Container - java.lang.Integer - false - 2.x - accountsample - - accno - - - customer - - - balance - - accno - - - findByNumber - - int - - - SELECT OBJECT(o) FROM accountsample o WHERE o.accno = ?1 - - - - findAllAccounts - - - SELECT OBJECT(o) FROM accountsample o - - - - - - - - AccountExpl - * - - Required - - - - AccountImpl - * - - Required - - - - - AccountImpl2 - * - - Required - - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/eb/jonas-eb.xml b/jonas_tests/examples/base/examples/src/eb/jonas-eb.xml deleted file mode 100644 index 1527da5e52..0000000000 --- a/jonas_tests/examples/base/examples/src/eb/jonas-eb.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - AccountExpl - AccountExplHome - - jdbc/AccountExplDs - jdbc_1 - - - - - AccountImpl - AccountImplHome - - jdbc_1 - accountsample_ - - accno - accno_ - - - customer - customer_ - - - balance - balance_ - - - - findByNumber - - where accno_ = ? - - - - findAllAccounts - - - - - - - - AccountImpl2 - AccountImpl2Home - - jdbc_1 - - - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/Client.java b/jonas_tests/examples/base/examples/src/lb/Client.java deleted file mode 100644 index 0546c28fa1..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/Client.java +++ /dev/null @@ -1,202 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import java.rmi.RemoteException; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * Client of the lb JOnAS example - * @author Helene Joanin - */ -public class Client { - - static Context initialContext = null; - - static ManagerHome home = null; - - static Manager manager = null; - - static boolean m_noinit = false; - - static int m_accounts = 4; - - static int m_valmove = 100; - - static int m_loops = 10; - - static int inival = 1000; - - public static void main(String[] args) { - // Get command args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - Integer i_arg; - if (s_arg.equals("-ni")) { - m_noinit = true; - } else if (s_arg.equals("-a")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_accounts = i_arg.intValue(); - } else if (s_arg.equals("-m")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_valmove = i_arg.intValue(); - } else if (s_arg.equals("-l")) { - s_arg = args[++argn]; - i_arg = java.lang.Integer.valueOf(s_arg); - m_loops = i_arg.intValue(); - } else { - usage(); - fatalError("wrong usage"); - } - } - - info("Calling lb.Client with : -a " + m_accounts + " -m " + m_valmove + " -l " + m_loops); - - // Get InitialContext - try { - initialContext = new InitialContext(); - } catch (NamingException e) { - fatalError("Cannot get InitialContext: " + e); - } - - // Create manager session bean - try { - home = (ManagerHome) javax.rmi.PortableRemoteObject.narrow(initialContext.lookup("ManagerHome"), - ManagerHome.class); - manager = home.create(inival); - } catch (Exception e) { - fatalError("Cannot create manager: " + e); - } - - // Create all accounts if noinit==false - if (!m_noinit) { - info("Re-initialization of the accounts database table"); - try { - manager.createAll(m_accounts); - } catch (Exception e) { - fatalError("Cannot create initial accounts: " + e); - } - } - - // Set move value - try { - manager.setValue(m_valmove); - } catch (Exception e) { - fatalError("Cannot init Session: " + e); - } - - // main loop - try { - for (int i = 0; i < m_loops; i++) { - // Choose the 2 accounts randomly - int d1 = random(m_accounts); - int c1 = random(m_accounts); - info(" Movement " + d1 + " -> " + c1 + ""); - // Set these accounts in session bean - manager.setAccounts(d1, c1); - // make the transfert - try { - manager.movement(); - } catch (RemoteException r) { - error("movement raised exception. ignoring..."); - } - // Check account that was debited - if (manager.checkAccount(d1) == false) { - error("Bad Account after move on account " + d1); - error("Stopping this session because some accounts are not ok"); - break; - } - } - } catch (Exception e) { - fatalError("Exception in main loop :" + e); - } - - // Check all accounts - try { - if (manager.checkAll() == false) { - error("FAIL when checking all accounts"); - } else { - info("PASS when checking all accounts"); - } - } catch (RemoteException e) { - error("checkAll() :" + e); - } - - // remove session bean - try { - manager.remove(); - } catch (Exception e) { - error("Cannot remove manager session: " + e); - } - - } - - /** - * Returns an integer between 0 and max-1 - */ - static int random(int max) { - - double d = Math.random(); - int ret = (int) (max * d); - return ret; - } - - /** - * Display the usage - */ - static void usage() { - info("lb.Client [-ni] [-a accounts] [-m value] [-l loops]"); - } - - /** - * Display the given information message - */ - static void info(String infoMsg) { - System.out.println(infoMsg); - } - - /** - * Display the given error message - */ - static void error(String errMsg) { - System.out.println("lb.Client error: " + errMsg); - } - - /** - * Display the given error message and exits - */ - static void fatalError(String errMsg) { - System.out.println("lb.Client fatal error: " + errMsg); - System.exit(2); - } - -} - diff --git a/jonas_tests/examples/base/examples/src/lb/ManacEC.java b/jonas_tests/examples/base/examples/src/lb/ManacEC.java deleted file mode 100644 index 22cbd95fa4..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/ManacEC.java +++ /dev/null @@ -1,225 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.RemoveException; - -/** - * Manac Implementation - * @author Philippe Durieux - */ -public class ManacEC implements EntityBean { - - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String name; - - public int num; - - public int balance; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setEntityContext(EntityContext ctx) { - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void unsetEntityContext() { - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of - * the object. - * @throws EJBException - Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbRemove() throws RemoveException { - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - if (balance < 0) { - System.out.println(name + " : Bad balance loaded"); - throw new EJBException("ejbLoad: Balance " + name + " was negative =" + balance); - } - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - if (balance < 0) { - System.out.println(name + " : Bad balance stored"); - throw new EJBException("ejbStore: Balance " + name + " was negative =" + balance); - } - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.String ejbCreate(int num, String name, int ib) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - this.num = num; - this.name = new String(name); - this.balance = ib; - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate per ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(int num, String name, int ib) throws CreateException { - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.String ejbCreateWithDefaultName(int num, int ib) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - this.num = num; - this.name = "M" + (new Integer(num)).toString(); - this.balance = ib; - - // In CMP, should return null. - return null; - } - - /** - * There must be an ejbPostCreate per ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreateWithDefaultName(int num, int ib) throws CreateException { - - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - // balance may be wrong in case of rollback. - // Anyway, this instance is being released now, so no problem! - balance = -80000; - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - } - - // ------------------------------------------------------------------ - // Manac implementation - // ------------------------------------------------------------------ - - /** - * getBalance - */ - public int getBalance() { - return balance; - } - - /** - * credit - */ - public void credit(int v) { - balance += v; - } - - /** - * debit - */ - public void debit(int v) { - balance -= v; - if (balance < 0) { - System.out.println(name + " : set rollback only."); - ejbContext.setRollbackOnly(); - balance = -90000; // put it a very bad balance to check rollback is - // OK - } - } - - public String getName() { - return name; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/ManacLocal.java b/jonas_tests/examples/base/examples/src/lb/ManacLocal.java deleted file mode 100644 index 103a01b359..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/ManacLocal.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import javax.ejb.EJBLocalObject; - -/** - * Manac local interface - * @author Philippe Durieux - */ -public interface ManacLocal extends EJBLocalObject { - - int getBalance(); - - void credit(int value); - - void debit(int value); - - String getName(); -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/ManacLocalHome.java b/jonas_tests/examples/base/examples/src/lb/ManacLocalHome.java deleted file mode 100644 index 16e22f4730..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/ManacLocalHome.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import java.util.Collection; - -import javax.ejb.CreateException; -import javax.ejb.EJBLocalHome; -import javax.ejb.FinderException; - -/** - * Local Home interface for the bean Manac - * @author Philippe Durieux, Helene Joanin - */ -public interface ManacLocalHome extends EJBLocalHome { - - ManacLocal create(int num, String name, int initbal) throws CreateException; - - ManacLocal createWithDefaultName(int num, int initbal) throws CreateException; - - ManacLocal findByPrimaryKey(java.lang.String pk) throws FinderException; - - ManacLocal findByNum(int num) throws FinderException; - - Collection findAll() throws FinderException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/Manager.java b/jonas_tests/examples/base/examples/src/lb/Manager.java deleted file mode 100644 index 5470630b1e..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/Manager.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * Manager remote interface - * @author Philippe Durieux - */ -public interface Manager extends EJBObject { - - void createAll(int nb) throws RemoteException; - - void setAccounts(int d1, int c1) throws RemoteException; - - void setValue(int v) throws RemoteException; - - void movement() throws RemoteException; - - boolean checkAll() throws RemoteException; - - boolean checkAccount(int a) throws RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/ManagerHome.java b/jonas_tests/examples/base/examples/src/lb/ManagerHome.java deleted file mode 100644 index a94b076e50..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/ManagerHome.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Manager - * @author Philippe Durieux - */ -public interface ManagerHome extends EJBHome { - - Manager create(int ival) throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/ManagerSF.java b/jonas_tests/examples/base/examples/src/lb/ManagerSF.java deleted file mode 100644 index b58c4e9648..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/ManagerSF.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package lb; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Collection; -import java.util.Iterator; - -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.FinderException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.TransactionRolledbackLocalException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; - -/** - * Manager Implementation - * @author Philippe Durieux - */ -public class ManagerSF implements SessionBean { - - SessionContext ejbContext; - - ManacLocalHome manacLocalHome = null; - - int c1 = 0; - - int d1 = 0; - - ManacLocal cred1, deb1; - - int initialValue = 1000; - - int value = 10; - - // ------------------------------------------------------------------ - // init DataBase for Manac beans - // ------------------------------------------------------------------ - private void initDB() { - - // Get my DataSource from JNDI - DataSource ds = null; - InitialContext ictx = null; - try { - ictx = new InitialContext(); - } catch (Exception e) { - System.out.println("new InitialContext() : " + e); - throw new EJBException("Cannot get JNDI InitialContext"); - } - try { - ds = (DataSource) ictx.lookup("java:comp/env/jdbc/mydb"); - } catch (Exception e) { - System.out.println("cannot lookup datasource " + e); - throw new EJBException("cannot lookup datasource"); - } - - // Drop table - Connection conn = null; - Statement stmt = null; - // myTable must be from jonas-xml file (Manac bean) - String myTable = "manacsample"; - try { - conn = ds.getConnection(); - stmt = conn.createStatement(); - stmt.execute("drop table " + myTable); - stmt.close(); - } catch (SQLException e) { - // The first time, table will not exist. - } - - // Create table. - try { - stmt = conn.createStatement(); - stmt.execute("create table " + myTable - + "(c_name varchar(30) not null primary key, c_num integer, c_balance integer)"); - stmt.close(); - conn.close(); - } catch (SQLException e) { - System.out.println("Exception in createTable : " + e); - throw new EJBException("Exception in createTable"); - } - } - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - ejbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate(int ival) throws CreateException { - - // lookup ManacLocalHome - try { - Context ictx = new InitialContext(); - manacLocalHome = (ManacLocalHome) ictx.lookup("java:comp/env/ejb/manac"); - } catch (NamingException e) { - System.out.println("ManagerSF : Cannot get ManacLocalHome:" + e); - throw new CreateException("Cannot get ManacLocalHome"); - } - - initialValue = ival; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - } - - // ------------------------------------------------------------------ - // Manager implementation - // ------------------------------------------------------------------ - - public void createAll(int nb) throws RemoteException { - - // init database for Manac bean - initDB(); - - // create accounts - for (int i = 0; i < nb; i++) { - try { - manacLocalHome.createWithDefaultName(i, initialValue); - } catch (CreateException e) { - System.out.println("createAll:\n" + e); - throw new RemoteException("Cannot create Manac"); - } - } - } - - public void setAccounts(int d1, int c1) throws RemoteException { - this.d1 = d1; - this.c1 = c1; - try { - deb1 = manacLocalHome.findByNum(d1); - cred1 = manacLocalHome.findByNum(c1); - } catch (FinderException e) { - System.out.println("Cannot find manac bean:" + e); - throw new RemoteException("Cannot find manac bean"); - } - } - - public void setValue(int v) throws RemoteException { - this.value = v; - } - - public void movement() throws RemoteException { - - // credit accounts first because we don't want a rollback if - // same account is debited and credited in the same operation. - try { - cred1.credit(value); - } catch (EJBException e) { - System.out.println("ManagerSF: Cannot credit account:" + e); - throw new RemoteException("ManagerSF: Cannot credit account"); - } - - // debit accounts - try { - deb1.debit(value); - } catch (TransactionRolledbackLocalException e) { - System.out.println("ManagerSF: Rollback transaction"); - } catch (EJBException e) { - System.out.println("ManagerSF debit:" + e); - } - } - - public boolean checkAccount(int a) throws RemoteException { - - boolean ret = false; - ManacLocal m = null; - - try { - m = manacLocalHome.findByNum(a); - int b = m.getBalance(); - if (b >= 0) { - ret = true; - } else { - System.out.println("ManagerSF checkAccount: bad balance=" + b); - } - return ret; - } catch (Exception e) { - System.out.println("ManagerSF checkAccount: cannot check account: " + e); - return false; - } - } - - public boolean checkAll() throws RemoteException { - - int count = 0; - int total = 0; - try { - Collection accCol = manacLocalHome.findAll(); - for (Iterator accIter = accCol.iterator(); accIter.hasNext();) { - count++; - ManacLocal a = (ManacLocal) accIter.next(); - int balance = a.getBalance(); - if (balance < 0) { - System.out.println("checkAllAccounts: bad balance: " + balance); - return false; - } - String name = a.getName(); - total += balance; - } - } catch (Exception e) { - System.out.println("checkAllAccounts:" + e); - return false; - } - int exp = initialValue * count; - if (total != exp) { - System.out.println("checkAllAccounts: bad total: " + total + " (expected: " + exp + ")"); - return false; - } - return true; - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/lb/README b/jonas_tests/examples/base/examples/src/lb/README deleted file mode 100644 index 3af0ddfd4f..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/README +++ /dev/null @@ -1,55 +0,0 @@ -The lb JOnAS example: ---------------------- - -This example illustrates the use of local interfaces. -This is a good example for understanding what must be done when a local client -(typically a session bean) is collocated with an entity bean providing local interfaces. - -This JOnAS example is inspired by the 'manac' JOnAS stress test: - jonas_tests/stress/src/org/objectweb/jonas/stests/manac - -It uses two enterprise beans "Manac" and "Manager". -The "Manac" bean is an entity bean with container-managed persistence. -Its Component and Home interfaces are local interfaces. -This bean represents an account. Its balance cannot be negative (rollback is set -in this case). - -The "Manager" bean is a stateful session bean and allows to manage the "Manac" bean, -i.e. to move amounts from an account to an other. - - -"Client" is the client of the "Manager" session bean. -It performs the following steps: -- initialization of the database table of accounts if no -ni argument. - (A specified number of accounts are created with a default balance 1000). -- transfer of a specified 'value' from an account to an other account, - 'loops' times; (accounts are choosen randomly). -- last, check the total of the balance of all the accounts. -Its usage is: - Client [-ni] [-a accounts] [-m value] [-l loops] -(Client -a 4 -m 100 -l 10 is the default usage) - - -Compiling this example: ------------------------ -This example is compiled with the others by "ant install" in $JONAS_ROOT/examples. - -Running this example: ---------------------- -Your database access should be configured: a properties files defining a - Datasource object should be defined in $JONAS_BASE/conf (e.g. InstantDB1.properties), - and the property jonas.service.dbm.datasources of the jonas.properties file should - be set to the name of this datasource description file (e.g. InstantDB1). See JOnAS - documentation for more details. - -1) Run an EJB Server to make beans available to clients: - - jonas start - -2) Run the client via the Ant task runclient - jclient -cp $JONAS_BASE/ejbjars/lb.jar lb.Client - or - ant runclient - -3) Stop the jonas server - jonas stop diff --git a/jonas_tests/examples/base/examples/src/lb/application-client.xml b/jonas_tests/examples/base/examples/src/lb/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/lb/build.xml b/jonas_tests/examples/base/examples/src/lb/build.xml deleted file mode 100644 index 978ced5399..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/build.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/lb/db1.prp b/jonas_tests/examples/base/examples/src/lb/db1.prp deleted file mode 100644 index 9d87d68d0e..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/db1.prp +++ /dev/null @@ -1,325 +0,0 @@ -!--------------------------------------------------------------------- -! -! PROPERTIES for the InstantDB database used in the JOnAS eb example -! (builded from InstantDB/3.25/Examples/sample.prp) -! -!--------------------------------------------------------------------- - -!--------------------------------------------------------------------- -! -! BASIC PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Path where index tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -indexPath=./tmp/indexes -! -! Path where system tables are held. Can be absolute or relative to -! the properties file. Defaults to tablePath. -! -systemPath=./tmp/system -! -! Path where database tables are held. Can be absolute or relative -! to the properties file. Defaults to "current" directory. -! -tablePath=./tmp/tables -! -! Path where results set tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -tmpPath=./tmp/tmp -! -! Non-zero means paths are relative to the properties file. -! Default is absolute paths for files. -! -relativeToProperties=1 -! -! Alternative partitions can be defined so that tables can be placed -! in multiple locations. Each partition is numbered: 1, 2, 3,... Tables -! can be created on partitions using the syntax -! -! CREATE TABLE ON PARTITION ... -! -! The partition count has to be supplied. -! -!partitionCount=2 -! -! The locations of each partition must be supplied. These are always -! absolute path names. -! -!partition1=d:/petes -!partition2=c:/temp - - -!--------------------------------------------------------------------- -! -! TUNING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! The amount of each column to cache, expressed either as an absolute -! number of rows or as a percentage figure. Defaults to 256 or 10 respectively. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheAmount=512 -! -! CACHE_ROWS Must be one of CACHE_ROWS or CACHE_PERCENT. Determines whether -! to cache columns in tables based on an absolute number of rows, or the -! percentage number of rows in the table. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheCondition=CACHE_ROWS -! -! The amount of the system tables to be cached. Defaults to 100. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheSize=10 -! -! Similar to cacheCondition, but applies only to the system tables. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheCondition=CACHE_ROWS -! -! The percentage cache hit improvement required in order to move the -! cache to a new location in a column. -! -! (Currently not implemented). -! -cacheResetPercent=10 -! -! Non-zero means that database changes do not get written to the -! database immediately. See tuning.html. -! -fastUpdate=0 -! -! Percentage of free space in an index that must be present before -! the index reorganises itself. High values means frequent index -! reorganisation. Low values means slow index inserts. -! -indexLoad=5 -! -! The number of cache misses to include in calculations of the next -! base for the cache. -! -! (Currently not implemented). -! -missesInCacheStats=100 -! -! Non-zero means that results sets get instantiated on disk. By default -! InstantDB holds results sets emtirely in memory (apart from Binary -! columns). For large results sets this can be a problem. This property -! forces all results sets to be held on disk. -! -resultsOnDisk=0 -! -! Similar to cacheCondition but applies only to disk based -! results sets. Default is CACHE_ROWS. -! -resultsSetCache=CACHE_ROWS -! -! Similar to cacheAmount but applies only to disk based -! results sets. Default is 100. -! -resultsSetCacheAmount=100 -! -! Number of rows to read into the disk read ahead buffer. -! Recommended to be set somewhere around 128 to 256. -! Default is 20. -! -rowCacheSize=128 -! -! The read ahead buffer is effective at speeding up full -! table scans. However for indexed lookups or multiple -! simultaneous scans it is better to read a single row at -! a time. Each table holds a small number of single row -! buffers to improve such operations. Default is 8. -! -!singleRowCount=4 -! -! Sometimes the look ahead buffer can be held by a single -! thread even though it is not retrieveing many values from it. -! If too many lookups retrieve data from the single row -! buffers then it is better to flush the look ahead buffer and -! make it available for re-use. Default is 128. -! -!flushAfterCacheMisses=64 -! -! Number of rows to read ahead for system tables. By default -! system tables cache everything, so it is wasteful to have large -! read ahead buffers since they will very rarely be used. This -! allows the size of the system read ahead buffers to be reduced -! if necessary. Defaults to rowCacheSize. -! -!systemRows=20 -! -! The control column in all tables normally has a large cache -! since this speeds up all operation on that table. This can be -! varied to either improve performance or to reduce space. -! default is 8192. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!controlColCacheSize=512 -! -! By default, InstantDB only does a cursory search for deleted rows during -! UPDATE statements. Setting searchDeletes=1 causes more detailed searches -! for deleted rows. This slows down UPDATE executions, but reults in more -! compact tables. Default is 0. -! -searchDeletes=0 -! -! The interval, in milliseconds, between checks for statement execution -! timeouts. Default is 5000. -! -!timerCheck=5000 - -!--------------------------------------------------------------------- -! -! LOGGING AND DEBUGGING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Non-zero means include SQL statements in the export file. -! -exportSQL=0 -! -! Non-zero means trace output also directed to console. -! Defaults to 0. -! -!traceConsole=1 -traceConsole=0 -! -! Relative or absolute path where exporting and tracing goes. -! -traceFile=./tmp/trace.log -! -! Bitmap of various items that can be traced. See debug.html. -! Defaults to 0. -! -traceLevel=2 - - -!--------------------------------------------------------------------- -! -! TRANSACTION AND RECOVERY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! 0 means do not perform recovery on startup. -! 1 means perform automatic recovery -! 2 (default) means prompt the user using standard in -! -recoveryPolicy=2 -! -! Sets the level of transaction journalling. See trans.html. -! Defaults to 1. -! -! 0 - No journalling takes place. -! 1 - Normal journalling (default). -! 2 - Full journalling. -! -transLevel=1 -! -! When doing an import, defines the number of rows imported -! before the transaction is committed. Recommended value 8192. -! defaults to 100. -! -transImports=100 - -!--------------------------------------------------------------------- -! -! DATE, TIME AND CURRENCY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Number of digits after decimal point in currency outputs. Defaults to 2. -! -currencyDecimal=2 -! -! Currency symbol used in currency outputs. Defaults to $. -! -currencySymbol=$ -! -! Default format for date columns. Defaults to "yyyy-mm-dd". -! -dateFormat=yyyy-mm-dd -! -! Default format for timestamp columns. Defaults to "yyyy-mm-dd hh:mm:ss.lll". -! -dateTimeFormat=yyyy-mm-dd hh:mm:ss.lll -! -! If set, then all two digit dates less than its value are interpreted -! as 21st century dates. -! -!milleniumBoundary=50 -! -! Set to 1 causes the date string "now" to store a full timestamp. -! Default is to store only the date for fields with now hour in the -! format string. -! -nowMeansTime=0 - -!--------------------------------------------------------------------- -! -! STRING HANDLING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! If set to 1 then String hashes use the JDK Object.hashCode() function. -! By default, uses InstantDB's String hashing. -! -altStringHashing=0 -! -! Set to 1 to cause LIKE clauses to always perform case insensitive -! comparisons. -! -likeIgnoreCase=0 -! -! Same as SET LITERAL STRICT_ON. Prevents string literals being interpreted -! as column names or numbers. Default is 0. -! -strictLiterals=0 -! -! Set this value to 1 (one) if you would like PreparedStatement.setString() -! to ignore "\" (backslash) characters when proceesing string constants. -! When set, InstantDB will not attempt to interpret \ as the start of an -! escape sequence. Default is 0. -! -!prepareIgnoresEscapes=1 - -!--------------------------------------------------------------------- -! -! MISCELLANEOUS PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Allows selected InstantDB keywords to be un-reserved. -! e.g. ignoreKeywords=url,quote would allow the keywords -! url and quote to be used as table or column names. -! -! This faciliy is provided for compatatbility reasons only. -! It's use is not recommended AND IS NOT SUPPORTED. -! -!ignoreKeywords -! -! Non-zero means database is opened in read only mode. -! -readOnly=0 diff --git a/jonas_tests/examples/base/examples/src/lb/jonas-lb.xml b/jonas_tests/examples/base/examples/src/lb/jonas-lb.xml deleted file mode 100644 index ec47795788..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/jonas-lb.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - Manager - ManagerHome - - jdbc/mydb - jdbc_1 - - - - - Manac - ManacLocalHome - - jdbc_1 - manacsample - - name - c_name - - - num - c_num - - - balance - c_balance - - - - findByNum - - where c_num = ? - - - - findAll - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/lb/lb.xml b/jonas_tests/examples/base/examples/src/lb/lb.xml deleted file mode 100644 index cd38383732..0000000000 --- a/jonas_tests/examples/base/examples/src/lb/lb.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - Deployment descriptor for the lb JOnAS example - lb example - - - - - Manager Session Bean with Remote interface - Manager - Manager - lb.ManagerHome - lb.Manager - lb.ManagerSF - Stateful - Container - - ejb/manac - Entity - lb.ManacLocalHome - lb.ManacLocal - Manac - - - jdbc/mydb - javax.sql.DataSource - Application - - - - - Managed Account Entity Bean, with local interface - Manac - Manac - lb.ManacLocalHome - lb.ManacLocal - lb.ManacEC - Container - java.lang.String - true - 1.x - - name - - - num - - - balance - - name - - - - - - - - Manac - * - - - Manager - * - - Supports - - - - - Manager - createAll - - NotSupported - - - - Manac - credit - - - Manac - debit - - - Manager - movement - - - Manager - checkAll - - - Manager - checkAccount - - Required - - - diff --git a/jonas_tests/examples/base/examples/src/mailsb/ClientMailer.java b/jonas_tests/examples/base/examples/src/mailsb/ClientMailer.java deleted file mode 100644 index 18dbed93ad..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/ClientMailer.java +++ /dev/null @@ -1,282 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.IOException; -import javax.naming.InitialContext; -import javax.naming.Context; -import javax.rmi.PortableRemoteObject; - -/** - * Sample for Mailer Session Bean. Usage: java mailsb.ClientMailer - * @author Florent Benoit - * @author Ludovic Bert - */ -public class ClientMailer { - - /** - * Session case - */ - private static final int SESSION_CASE = 1; - - /** - * MimePartDatasource case - */ - private static final int MIMEPARTDS_CASE = 2; - - /** - * Content of the mail - */ - private static String content = null; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientMailer() { - - } - - /** - * Read from bufferedReader the text which is given by the user after the - * given prompt. - * @param bufferedReader the buffer to read input. - * @param prompt the prompt asking the user. - * @return the text given by the user. - * @throws IOException if it can't the bufferedReader. - */ - private static String getTextFromUser(BufferedReader bufferedReader, String prompt) throws IOException { - - boolean isSet = false; - String txt = null; - while (!isSet) { - System.out.print(prompt + " :"); - txt = bufferedReader.readLine(); - if (!txt.equals("")) { - isSet = true; - } else { - System.out.println("'" + prompt + "' can't be empty."); - } - } - return txt; - } - - /** - * Main method of the class - * @param args the arguments of the program - */ -public static void main(String[] args) { - - //Check if there are valid args - if (args.length < 1) { - System.err.println("Syntax is : java mailsb.ClientMailer "); - System.exit(2); - } - - - int argType = 0; - if (args[0].equalsIgnoreCase("SessionMailer")) { - argType = SESSION_CASE; - } else if (args[0].equalsIgnoreCase("MimePartDSMailer")) { - argType = MIMEPARTDS_CASE; - } else { - System.err.println("Invalid type '" + args[0] + "', valid syntax is : java mailsb.ClientMailer "); - System.exit(2); - } - - //Get the initial context - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e.getMessage()); - System.exit(2); - } - - switch (argType) { - case SESSION_CASE : - sessionMailer(initialContext); - break; - case MIMEPARTDS_CASE : - if (args.length > 1) { - content = "Content of mail :"; - for (int i = 1; i < args.length; i++) { - content += args[i]; - } - } - mimePartDSMailer(initialContext); - break; - default : - - } - - - } - /** - * Deal with the MimePartDSMailer bean - * @param initialContext the initial context - */ - private static void mimePartDSMailer(Context initialContext) { - - // Connecting to the mailer bean MailerHome thru JNDI - MimePartDSMailerHome mimePartDSMailerHome = null; - try { - System.out.print("Looking up the Session mailer home..."); - mimePartDSMailerHome = (MimePartDSMailerHome) PortableRemoteObject.narrow(initialContext - .lookup("MimePartDSMailerHome"), MimePartDSMailerHome.class); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot lookup MimePartDSMailerHome: " + e.getMessage()); - System.exit(2); - } - - // MimePartDSMailerBean creation - MimePartDSMailer mimePartDSMailer = null; - try { - System.out.print("Creating a MimePartDS mailer bean ..."); - mimePartDSMailer = mimePartDSMailerHome.create("MimePartDS mailer"); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot create MimePartDSMailerBean: " + e.getMessage()); - System.exit(2); - } - - if (content == null) { - //Read the value from the user - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - try { - System.out.println("Content of the mail (Only one line)"); - content = getTextFromUser(bufferedReader, "Content"); - } catch (IOException e) { - System.err.println("Cannot read line from the bufferedReader : " + e.getMessage()); - System.exit(2); - } - } - - //Set the message with a recipient, a subject and a content - try { - System.out.print("Setting the message with given content '" + content + "'..."); - mimePartDSMailer.setMessage(content); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot set args of the message : " + e); - System.exit(2); - } - - //And send the message - try { - System.out.print("Sending the message..."); - mimePartDSMailer.send(); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("Failed !"); - System.err.println("Cannot send the message with MailerBean:" + e); - System.exit(2); - } - } - - /** - * Deal with the SessionMailer bean - * @param initialContext the initial context - */ - private static void sessionMailer(Context initialContext) { - // Connecting to the mailer bean MailerHome thru JNDI - SessionMailerHome sessionMailerHome = null; - try { - System.out.print("Looking up the Session mailer home..."); - sessionMailerHome = (SessionMailerHome) PortableRemoteObject.narrow(initialContext - .lookup("SessionMailerHome"), SessionMailerHome.class); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot lookup MailerHome: " + e.getMessage()); - System.exit(2); - } - - // MailerBean creation - SessionMailer sessionMailer = null; - try { - System.out.print("Creating a session mailer bean..."); - sessionMailer = sessionMailerHome.create("mailer"); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot create MailerBean: " + e.getMessage()); - System.exit(2); - } - - String toRecipient = null; - String subject = null; - String content = null; - - //Read the value from the user - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - try { - System.out.println("Recipient is the 'to' field of a mail"); - toRecipient = getTextFromUser(bufferedReader, "TO"); - - System.out.println("Subject of the mail"); - subject = getTextFromUser(bufferedReader, "Subject"); - - System.out.println("Content of the mail (Only one line)"); - content = getTextFromUser(bufferedReader, "Content"); - - } catch (IOException e) { - System.err.println("Cannot read line from the bufferedReader : " + e.getMessage()); - System.exit(2); - } - - //Set the message with a recipient, a subject and a content - try { - System.out.print("Setting the message with given args..."); - sessionMailer.setMessage(toRecipient, subject, content); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("failed !"); - System.err.println("Cannot set args of the message : " + e); - System.exit(2); - } - - //And send the message - try { - System.out.print("Sending the message..."); - sessionMailer.send(); - System.out.println("OK !"); - } catch (Exception e) { - System.out.println("Failed !"); - System.err.println("Cannot send the message with MailerBean:" + e); - System.exit(2); - } - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailer.java b/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailer.java deleted file mode 100644 index 19bc38a082..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailer.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Remote interface for the bean Mailer Work with - * javax.mail.internet.MimePartDataSource - * @author Florent Benoit - * @author Ludovic Bert - */ -public interface MimePartDSMailer extends EJBObject { - - /** - * Set the message with a specific recipient, subject and content. - * @param content the content of the message. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - void setMessage(String content) throws Exception, RemoteException; - - /** - * Send the message by creating it with the mail factory properties. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - void send() throws Exception, RemoteException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerBean.java b/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerBean.java deleted file mode 100644 index 98a232c9c3..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerBean.java +++ /dev/null @@ -1,228 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -//import java -import java.rmi.RemoteException; - -//import javax -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import javax.mail.Message; -import javax.mail.MessageContext; -import javax.mail.MessagingException; -import javax.mail.Transport; -import javax.mail.internet.MimePartDataSource; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * Implementation of the mailer Session Bean. It uses - * javax.mail.internet.MimePartDataSource This bean is a statefull, and - * synchronized bean. The container uses the SessionBean methods to notify the - * enterprise Bean instances of the instance's life cycle events. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class MimePartDSMailerBean implements SessionBean { - - /** - * Name of the bean - */ - private String name = null; - - /** - * Session context that the container provides for a session enterprise Bean - * instance. - */ - private SessionContext sessionContext = null; - - /** - * Reference to the javax.mail.Message object which is the message to send - * with javamail - */ - private Message message = null; - - /* ========================= ejbCreate methods =========================== */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param name the name of the bean - */ - public void ejbCreate(String name) { - this.name = name; - } - - /* =============== javax.ejb.SessionBean 2.0 implementation ============== */ - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - this.sessionContext = sessionContext; - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /* ======================== Mailer implementation ======================== */ - - /** - * Set the message with a specific recipient, subject and content. - * @param content the content of the message. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - public void setMessage(String content) throws Exception, RemoteException { - - //Get the initial context - InitialContext ictx = null; - try { - ictx = new InitialContext(); - } catch (NamingException e) { - throw new Exception("Can not get an inital context : " + e.getMessage()); - } - - //get a new MimePartDataSource from our ENC envirnoment java:comp/env - MimePartDataSource mimePartDataSource = null; - try { - mimePartDataSource = (MimePartDataSource) ictx.lookup("java:comp/env/mail/MailMimePartDataSource"); - } catch (NamingException e) { - throw new Exception("You have not configure the mail factory with the name specified" - + " in the jonas-ejb-jar.xml file for java:comp/env/mail/MailMimePartDataSource ." - + " By default, the factory's name is mailMimePartDS_1 :" + e.getMessage()); - } - - //Get the message context - MessageContext messageContext = mimePartDataSource.getMessageContext(); - - if (messageContext == null) { - throw new Exception("Can not get the message Context of the mimepartDatasource"); - } - - //Get the message from the context - message = messageContext.getMessage(); - - try { - message.setContent(content, "text/plain"); - } catch (MessagingException e) { - throw new Exception("A failure occurs when setting content of the message :" + e.getMessage()); - } - } - - /** - * Send the message which was previously configured. - * @throws Exception if a problem occurs. - * @throws RemoteException if the send failed. - */ - public void send() throws Exception, RemoteException { - - if (message == null) { - throw new Exception("The message can not be send because the method setMessage() " - + " was not called before the send() method."); - } - - try { - Transport.send(message); - } catch (MessagingException e) { - throw new Exception("The message can not be send : " + e.getMessage()); - } - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerHome.java b/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerHome.java deleted file mode 100644 index c790753f9d..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/MimePartDSMailerHome.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Mailer - * Work with javax.mail.internet.MimePartDataSource - * @author Florent Benoit - * @author Ludovic Bert - */ -public interface MimePartDSMailerHome extends EJBHome { - - /** - * Create a bean with a specific name - * @param name the name of the bean - * @throws CreateException if the bean creation failed. - * @throws RemoteException if the call failed. - * @return the "mailer" bean created - */ - MimePartDSMailer create(String name) throws CreateException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/src/mailsb/README b/jonas_tests/examples/base/examples/src/mailsb/README deleted file mode 100644 index dd47d3e289..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/README +++ /dev/null @@ -1,37 +0,0 @@ -Session beans "Mailer" ----------------------- -SessionMailer : session bean using javax.mail.Session mail factory -MimePartDSMailer : session bean using javax.mail.internet.MimePartDataSource mail factory - -Compiling this example: ------------------------ -ant -find build.xml install - -Running this example: ---------------------- -In order to run this example, you must configure two types of mail factory : -You can use the provided templates : - $JONAS_ROOT/conf/MailSession1 - $JONAS_ROOT/conf/MailMimePartDS1 - -MailSession1 is a javax.mail.Session mail factory. --> Only the property mail.host need to be defined. - -MailMimePartDS1 is a javax.mail.internet.MimePartDataSource mail factory. --> The properties mail.host, mail.to and mail.subject must be defined. - -Assuming that jonas.service.mail.factories property is already set in -the jonas.properties file, start JOnAS, with the mail service. - jonas start -Djonas.services=registry,jmx,security,jtm,dbm,ejb2,mail -(You can instead change the service list in jonas.properties) - - -Run the client : -jclient -cp $JONAS_BASE/ejbjars/mailsb.jar mailsb.ClientMailer SessionMailer -or -Run the client via the Ant task runclient - ant runclient - -Stop the jonas server - jonas stop - diff --git a/jonas_tests/examples/base/examples/src/mailsb/SessionMailer.java b/jonas_tests/examples/base/examples/src/mailsb/SessionMailer.java deleted file mode 100644 index c0ed14fe20..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/SessionMailer.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Remote interface for the bean Mailer Work with javax.mail.Session - * @author Florent Benoit - * @author Ludovic Bert - */ -public interface SessionMailer extends EJBObject { - - /** - * Set the message with a specific recipient, subject and content. - * @param recipient the 'TO' field of the message. - * @param subject the subject of the message. - * @param content the content of the message. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - void setMessage(String recipient, String subject, String content) throws Exception, RemoteException; - - /** - * Send the message which was previously configured. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - void send() throws Exception, RemoteException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mailsb/SessionMailerBean.java b/jonas_tests/examples/base/examples/src/mailsb/SessionMailerBean.java deleted file mode 100644 index 82b2073459..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/SessionMailerBean.java +++ /dev/null @@ -1,234 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -//import java -import java.rmi.RemoteException; - -//import javax -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.Transport; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; - -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * Implementation of the mailer Session Bean. It uses javax.mail.Session This - * bean is a statefull, and synchronized bean. The container uses the - * SessionBean methods to notify the enterprise Bean instances of the instance's - * life cycle events. - * @author Florent Benoit - * @author Ludovic Bert - */ -public class SessionMailerBean implements SessionBean { - - /** - * Name of the bean - */ - private String name = null; - - /** - * Session context that the container provides for a session enterprise Bean - * instance. - */ - private SessionContext sessionContext = null; - - /** - * Reference to the javax.mail.Message object which is the message to send - * with javamail - */ - private Message message = null; - - /* ========================= ejbCreate methods =========================== */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param name the name of the bean - */ - public void ejbCreate(String name) { - this.name = name; - } - - /* =============== javax.ejb.SessionBean 2.0 implementation ============== */ - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - this.sessionContext = sessionContext; - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple mailer example - } - - /* ======================== Mailer implementation ======================== */ - - /** - * Set the message with a specific recipient, subject and content. - * @param recipient the 'TO' field of the message. - * @param subject the subject of the message. - * @param content the content of the message. - * @throws Exception if a problem occurs. - * @throws RemoteException if the call failed. - */ - public void setMessage(String recipient, String subject, String content) throws Exception, RemoteException { - - //Get the initial context - InitialContext ictx = null; - try { - ictx = new InitialContext(); - } catch (NamingException e) { - throw new Exception("Can not get an inital context : " + e.getMessage()); - } - - //get a new Session from our ENC envirnoment java:comp/env - Session session = null; - try { - session = (Session) ictx.lookup("java:comp/env/mail/MailSession"); - } catch (NamingException e) { - throw new Exception("You have not configure the mail factory with the name specified" - + " in the jonas-ejb-jar.xml file for java:comp/env/mail/MailSession ." - + " By default, the factory's name is mailSession_1 :" + e.getMessage()); - } - - try { - //Create the message - message = new MimeMessage(session); - InternetAddress[] toRecipients = new InternetAddress[] {new InternetAddress(recipient)}; - /* - * try { toRecipients[0].validate(); } catch (AddressException e) { - * throw new Exception("A failure occurs when validating the email - * address '" + recipient + "' :" + e.getMessage()); } - */ - message.setRecipients(Message.RecipientType.TO, toRecipients); - message.setSubject(subject); - message.setContent(content, "text/plain"); - } catch (MessagingException e) { - throw new Exception("A failure occurs when getting a message from the session and setting " - + "the different parameters :" + e.getMessage()); - } - - } - - /** - * Send the message which was previously configured. - * @throws Exception if a problem occurs. - * @throws RemoteException if the send failed. - */ - public void send() throws Exception, RemoteException { - - if (message == null) { - throw new Exception("The message can not be send because the method setMessage() " - + " was not called before the send() method."); - } - - try { - Transport.send(message); - } catch (MessagingException e) { - throw new Exception("The message can not be send : " + e.getMessage()); - } - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mailsb/SessionMailerHome.java b/jonas_tests/examples/base/examples/src/mailsb/SessionMailerHome.java deleted file mode 100644 index eeb40ea169..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/SessionMailerHome.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Florent BENOIT & Ludovic BERT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package mailsb; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Mailer - * Work with javax.mail.Session - * @author Florent Benoit - * @author Ludovic Bert - */ -public interface SessionMailerHome extends EJBHome { - - /** - * Create a bean with a specific name - * @param name the name of the bean - * @throws CreateException if the bean creation failed. - * @throws RemoteException if the call failed. - * @return the "mailer" bean created - */ - SessionMailer create(String name) throws CreateException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/src/mailsb/application-client.xml b/jonas_tests/examples/base/examples/src/mailsb/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/mailsb/build.xml b/jonas_tests/examples/base/examples/src/mailsb/build.xml deleted file mode 100644 index f304f220cd..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/build.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/mailsb/jonas-mailsb.xml b/jonas_tests/examples/base/examples/src/mailsb/jonas-mailsb.xml deleted file mode 100644 index 0d54d38a2f..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/jonas-mailsb.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - SessionMailer - SessionMailerHome - - mail/MailSession - mailSession_1 - - - - MimePartDSMailer - MimePartDSMailerHome - - mail/MailMimePartDataSource - mailMimePartDS_1 - - - diff --git a/jonas_tests/examples/base/examples/src/mailsb/mailsb.xml b/jonas_tests/examples/base/examples/src/mailsb/mailsb.xml deleted file mode 100644 index 861d926941..0000000000 --- a/jonas_tests/examples/base/examples/src/mailsb/mailsb.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Deployment descriptor for the mailsb JOnAS example - mailsb example - - - SessionMailer - mailsb.SessionMailerHome - mailsb.SessionMailer - mailsb.SessionMailerBean - Stateful - Container - - mail/MailSession - javax.mail.Session - Container - - - - MimePartDSMailer - mailsb.MimePartDSMailerHome - mailsb.MimePartDSMailer - mailsb.MimePartDSMailerBean - Stateful - Container - - mail/MailMimePartDataSource - javax.mail.internet.MimePartDataSource - Container - - - - - - - SessionMailer - * - - - MimePartDSMailer - * - - Required - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean.java deleted file mode 100644 index 6ca0a5beb0..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean.java -// Message Driven bean - -package newsamplemdb; - - -import javax.jms.Message; -import javax.jms.TextMessage; -import javax.jms.JMSException; - - - -/** - * Example of MessageDrivenBean on a Topic. The transactions are container managed (Required) - * this class have superclasses in which are defined ejbCreate() and onMessage() - * this strange structure is only for reproducing bug 300387 - * for a more normal structure see the samplemdb sample - */ -public class MdbBean extends MdbBean_b { - - - /** - * Default constructor - * - */ - public MdbBean() { - } - - - - /** - * onMessage1 method - */ - public void onMessage1(Message message) { - System.out.println( "MdbBean onMessage1"); - try{ - TextMessage mess = (TextMessage)message; - System.out.println( "Message received: "+mess.getText()); - }catch(JMSException ex){ - System.err.println("Exception caught: "+ex); - } - } -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_a.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_a.java deleted file mode 100644 index dad6d748c5..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_a.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean_a.java -// Message Driven bean - -package newsamplemdb; - -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; - - - -/** - * Superclass of the MessageDrivenBean class MdbBean - * Note that this class is not public but ejbCreate is public - * (it's only for reproducing the 300387 bug!) - */ - class MdbBean_a implements MessageDrivenBean { - - private transient MessageDrivenContext mdbContext; - - - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Default constructor - * - */ - public MdbBean_a() { - } - - /** - * Set the associated context. The container call this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx A MessageDrivenContext interface for the instance. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - System.out.println("MdbBean_a setMessageDrivenContext"); - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the message-driven object. - * This happens when a container decides to terminate the message-driven object. - * - * This method is called with no transaction context. - * - */ - public void ejbRemove() { - System.out.println("MdbBean_a ejbRemove"); - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - * - */ - public void ejbCreate() { - System.out.println("MdbBean_a ejbCreate"); - } - - -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_b.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_b.java deleted file mode 100644 index 675f1d8fc0..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbBean_b.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean_b.java -// Message Driven bean - -package newsamplemdb; - -import javax.ejb.MessageDrivenContext; -import javax.jms.MessageListener; -import javax.jms.Message; -import javax.jms.TextMessage; -import javax.jms.JMSException; - -/** - * Superclass of the MessageDrivenBean class MdbBean - * Note that this public class is implementing onMessage method - * (it's only for reproducing the 300387 bug!) - */ -public class MdbBean_b extends MdbBean_a implements MessageListener { - - - - - /** - * Default constructor - * - */ - public MdbBean_b() { - } - - /** - * onMessage method - */ - public void onMessage(Message message) { - System.out.println( "MdbBean onMessage"); - try{ - TextMessage mess = (TextMessage)message; - System.out.println( "Message received: "+mess.getText()); - }catch(JMSException ex){ - System.err.println("Exception caught: "+ex); - } - } - - - -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbClient.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbClient.java deleted file mode 100644 index b387194fbd..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/MdbClient.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbClient.java -// mini Client for accessing bean Mdb - -package newsamplemdb; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.*; -import javax.jms.*; - -/** - * - */ -public class MdbClient { - - static Context ictx = null; - static TopicConnectionFactory tcf = null; - static TopicPublisher tp = null; - static Topic topic = null; - // JNDI name of the Topic - static String topicName = "mdbTopic"; - // JNDI name of the default connection factory - static String conFactName = "JTCF"; - - public static void main(String[] arg) { - // Get InitialContext - try { - ictx = new InitialContext(); - // lookup the TopicConnectionFactory through its JNDI name - tcf = (TopicConnectionFactory) ictx.lookup(conFactName ); - System.out.println("JMS client: tcf = " + tcf); - // lookup the Topic through its JNDI name - topic = (Topic) ictx.lookup(topicName); - System.out.println("JMS client: topic = " + topic); - } catch (NamingException e) { - e.printStackTrace(); - System.exit(2); - } - - TopicConnection tc = null; - TopicSession session = null; - try { - tc = tcf.createTopicConnection(); - System.out.println("JMS client: tc = " + tc.toString()); - session = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(topic); - }catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - // publish 10 messages to the topic - int nbmess = 100; - try { - TextMessage message; - for (int i=0;i - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/build.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/build.xml deleted file mode 100644 index 31eb79c0f5..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/build.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/jonas-newsamplemdb.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/jonas-newsamplemdb.xml deleted file mode 100644 index 6dc54be4fb..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/jonas-newsamplemdb.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Mdb - - joramActivationSpec - - 20 - 10 - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/newsamplemdb.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/newsamplemdb.xml deleted file mode 100644 index e27a89ae09..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb/newsamplemdb.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Deployment descriptor for the newsamplemdb JOnAS example - newsamplemdb example - - - Describe here the message driven bean Mdb - Message Driven Bean Mdb - Mdb - newsamplemdb.MdbBean - javax.jms.MessageListener - Container - javax.jms.Topic - - - destination - mdbTopic - - - destinationType - javax.jms.Topic - - - subscriptionDurability - NonDurable - - - - - - - - - - Mdb - * - - Required - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean.java deleted file mode 100644 index 3021f4b62f..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean.java -// Message Driven bean - -package newsamplemdb2; - - -import javax.jms.Message; -import javax.jms.TextMessage; -import javax.jms.JMSException; - - - -/** - * Example of MessageDrivenBean on a Queue. The transactions are container managed (Required) - * this class have superclasses in which are defined ejbCreate() and onMessage() - * this strange structure is only for reproducing bug 300387 - * for a more normal structure see the samplemdb sample - */ -public class MdbBean extends MdbBean_b { - - - /** - * Default constructor - * - */ - public MdbBean() { - } - - - - /** - * onMessage1 method - */ - public void onMessage1(Message message) { - System.out.println( "MdbBean onMessage1"); - try{ - TextMessage mess = (TextMessage)message; - System.out.println( "Message received: "+mess.getText()); - }catch(JMSException ex){ - System.err.println("Exception caught: "+ex); - } - } -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_a.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_a.java deleted file mode 100644 index 16b7866da1..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_a.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean_a.java -// Message Driven bean - -package newsamplemdb2; - -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; - - - -/** - * Superclass of the MessageDrivenBean class MdbBean - * Note that this class is not public but ejbCreate is public - * (it's only for reproducing the 300387 bug!) - */ - class MdbBean_a implements MessageDrivenBean { - - private transient MessageDrivenContext mdbContext; - - - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Default constructor - * - */ - public MdbBean_a() { - } - - /** - * Set the associated context. The container call this method - * after the instance creation. - * The enterprise Bean instance should store the reference to the context - * object in an instance variable. - * This method is called with no transaction context. - * - * @param ctx A MessageDrivenContext interface for the instance. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - System.out.println("MdbBean_a setMessageDrivenContext"); - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the message-driven object. - * This happens when a container decides to terminate the message-driven object. - * - * This method is called with no transaction context. - * - */ - public void ejbRemove() { - System.out.println("MdbBean_a ejbRemove"); - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - * - */ - public void ejbCreate() { - System.out.println("MdbBean_a ejbCreate"); - } - - -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_b.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_b.java deleted file mode 100644 index f3be938781..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbBean_b.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean_b.java -// Message Driven bean - -package newsamplemdb2; - -import javax.ejb.MessageDrivenContext; -import javax.jms.MessageListener; -import javax.jms.Message; -import javax.jms.TextMessage; -import javax.jms.JMSException; - -/** - * Superclass of the MessageDrivenBean class MdbBean - * Note that this public class is implementing onMessage method - * (it's only for reproducing the 300387 bug!) - */ -public class MdbBean_b extends MdbBean_a implements MessageListener { - - - - - /** - * Default constructor - * - */ - public MdbBean_b() { - } - - /** - * onMessage method - */ - public void onMessage(Message message) { - System.out.println( "MdbBean onMessage"); - try{ - TextMessage mess = (TextMessage)message; - System.out.println( "Message received: "+mess.getText()); - }catch(JMSException ex){ - System.err.println("Exception caught: "+ex); - } - } - - - -} diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbClient.java b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbClient.java deleted file mode 100644 index 95822753d0..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/MdbClient.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbClient.java -// mini Client for accessing bean Mdb - -package newsamplemdb2; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.*; -import javax.jms.*; - -/** - * - */ -public class MdbClient { - - static Context ictx = null; - static QueueConnectionFactory qcf = null; - static QueueSender qp = null; - static Queue queue = null; - // JNDI name of the Queue - static String queueName = "mdbQueue"; - // JNDI name of the default connection factory - static String conFactName = "JQCF"; - - public static void main(String[] arg) { - // Get InitialContext - try { - ictx = new InitialContext(); - // lookup the QueueConnectionFactory through its JNDI name - qcf = (QueueConnectionFactory) ictx.lookup(conFactName ); - System.out.println("JMS client: qcf = " + qcf); - // lookup the Queue through its JNDI name - queue = (Queue) ictx.lookup(queueName); - System.out.println("JMS client: queue = " + queue); - } catch (NamingException e) { - e.printStackTrace(); - System.exit(2); - } - - QueueConnection qc = null; - QueueSession session = null; - try { - qc = qcf.createQueueConnection(); - System.out.println("JMS client: qc = " + qc.toString()); - session = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - qp = session.createSender(queue); - }catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - // publish 10 messages to the queue - int nbmess = 10; - try { - TextMessage message; - for (int i=0;i - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/build.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/build.xml deleted file mode 100644 index 469640ddb5..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/build.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/jonas-newsamplemdb2.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/jonas-newsamplemdb2.xml deleted file mode 100644 index 6dc54be4fb..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/jonas-newsamplemdb2.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Mdb - - joramActivationSpec - - 20 - 10 - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/newsamplemdb2.xml b/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/newsamplemdb2.xml deleted file mode 100644 index c5b2f6daff..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/newsamplemdb2/newsamplemdb2.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Deployment descriptor for the newsamplemdb2 JOnAS example - newsamplemdb2 example - - - Describe here the message driven bean Mdb - Message Driven Bean Mdb - Mdb - newsamplemdb2.MdbBean - javax.jms.MessageListener - Container - javax.jms.Queue - - - destination - mdbQueue - - - destinationType - javax.jms.Queue - - - subscriptionDurability - NonDurable - - - - - - - - - - Mdb - * - - Required - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/Env.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/Env.java deleted file mode 100644 index 427385f77f..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/Env.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// Env.java -package sampleappli; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Env remote interface - * @author JOnAS team - */ -public interface Env extends EJBObject { - - void init() throws RemoteException; - - void clean() throws RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvBean.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvBean.java deleted file mode 100644 index 99fe71650c..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvBean.java +++ /dev/null @@ -1,238 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// EnvBean.java -// Stateless Session bean - -package sampleappli; - -import java.rmi.RemoteException; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.io.File; -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import javax.ejb.RemoveException; -import javax.ejb.EJBObject; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; - -/** - * EnvBean is a stateless session bean use to create and clean a correct - * environement for the running of the StockClient it creates/remove the - * StockTable and the order file - * @author JOnAS team - */ -public class EnvBean implements SessionBean { - - SessionContext ejbContext; - - DataSource dataSource = null; - - Connection conn = null; - - Statement stmt; - - String stocktablename = null; - - String orderfilename = null; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setSessionContext(SessionContext ctx) { - ejbContext = ctx; - if (dataSource == null) { - // Finds DataSource from JNDI - Context initialContext = null; - try { - initialContext = new InitialContext(); - dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/myDS"); - } catch (Exception e) { - System.err.println(" new InitialContext() : " + e); - throw new EJBException("Cannot get JNDI InitialContext"); - } - // Find the stocktablename - try { - stocktablename = (String) initialContext.lookup("java:comp/env/stocktablename"); - } catch (Exception e) { - System.err.println("cannot lookup environment " + e); - throw new EJBException("cannot lookup environment"); - } - // Find the orderfilename - try { - orderfilename = (String) initialContext.lookup("java:comp/env/orderfilename"); - } catch (Exception e) { - System.err.println("cannot lookup environment " + e); - throw new EJBException("cannot lookup environment"); - } - } - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - } - - /** - * The Session bean must define 1 or more ejbCreate methods. - * @throws CreateException Failure to create a session EJB object. - */ - public void ejbCreate() throws CreateException { - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - } - - // ------------------------------------------------------------------ - // Env implementation - // ------------------------------------------------------------------ - - /** - * init - */ - public void init() { - createTableStock(); - createOrderFile(); - } - - /** - * clean - */ - public void clean() { - dropTableStock(); - removeOrderFile(); - } - - // ------------------------------------------------------------------ - // Env internal methods - // ------------------------------------------------------------------ - public void dropTableStock() { - // drop table - try { - conn = dataSource.getConnection(); - stmt = conn.createStatement(); - stmt.execute("DROP TABLE " + stocktablename); - stmt.close(); - conn.close(); - } catch (Exception e) { - System.err.println("Exception in dropTable : \n" + stocktablename + " " + e); - } - } - - public void createTableStock() { - // get connection - try { - conn = dataSource.getConnection(); - - } catch (Exception e) { - System.err.println("Cannot get Connection: \n" + e); - throw new EJBException("Cannot get Connection"); - } - try { - stmt = conn.createStatement(); - stmt.execute("DROP TABLE " + stocktablename); - stmt.close(); - } catch (Exception e) { - } - // create table - try { - stmt = conn.createStatement(); - stmt.execute("create table " + stocktablename + "(ID varchar(5) not null primary key, QUANTITY integer)"); - stmt.execute("insert into " + stocktablename + " values ('00000', 10)"); - stmt.execute("insert into " + stocktablename + " values ('00001', 20)"); - stmt.execute("insert into " + stocktablename + " values ('00002', 10)"); - stmt.execute("insert into " + stocktablename + " values ('00003', 20)"); - stmt.execute("insert into " + stocktablename + " values ('00004', 10)"); - stmt.close(); - conn.close(); - } catch (SQLException e) { - System.err.println("Exception in createTable : " + e); - throw new EJBException("Exception in createTable"); - } - } - - public void createOrderFile() { - try { - File f = new File(System.getProperty("java.io.tmpdir") + File.separator + System.getProperty("user.name") - + "_" + orderfilename); - if (!f.createNewFile()) { - f.delete(); - f.createNewFile(); - } - } catch (Exception ex) { - System.err.println("Exception on createOrderFile: " + ex); - throw new EJBException("Exception in createOrderFile"); - } - - } - - public void removeOrderFile() { - try { - File f = new File(System.getProperty("java.io.tmpdir") + File.separator + System.getProperty("user.name") - + "_" + orderfilename); - f.delete(); - } catch (Exception ex) { - System.err.println("Exception on removeOrderFile: " + ex); - throw new EJBException("Exception in removeOrderFile"); - } - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvHome.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvHome.java deleted file mode 100644 index 093ed2fb84..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/EnvHome.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package sampleappli; - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - - -/** - * Home interface for the bean Env - * @author JOnAS team - */ -public interface EnvHome extends EJBHome { - - Env create() throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/OrderBean.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/OrderBean.java deleted file mode 100644 index b9ea5d35e7..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/OrderBean.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// OrderBean.java -// Message Driven bean -package sampleappli; - -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; - -import javax.naming.Context; -import javax.naming.InitialContext; - -import java.io.DataOutputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; - -/** - * - */ -public class OrderBean implements MessageDrivenBean, MessageListener { - - private transient MessageDrivenContext mdbContext; - - String filename = null; - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Default constructor - */ - public OrderBean() { - } - - /** - * Set the associated context. The container call this method after the - * instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param MessageDrivenContext A MessageDrivenContext interface for the - * instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - mdbContext = ctx; - Context initialContext = null; - if (filename == null) { - try { - initialContext = new InitialContext(); - // Check that the SessionContext is the good one. - filename = (String) initialContext.lookup("java:comp/env/orderfilename"); - } catch (Exception e) { - System.err.println("cannot lookup environment"); - } - } - } - - /** - * A container invokes this method before it ends the life of the - * message-driven object. This happens when a container decides to terminate - * the message-driven object. This method is called with no transaction - * context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - */ - public void ejbCreate() { - } - - /** - * onMessage method - */ - public void onMessage(Message message) { - TextMessage msg = (TextMessage) message; - try { - File f = new File(System.getProperty("java.io.tmpdir") + File.separator + System.getProperty("user.name") - + "_" + filename); - DataOutputStream fileout = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f - .getCanonicalPath(), true))); - fileout.writeBytes(msg.getText() + System.getProperty("line.separator")); - fileout.close(); - } catch (Exception e) { - System.err.println("OrderBean onMessage Exception caught: " + e); - } - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/README b/jonas_tests/examples/base/examples/src/mdb/sampleappli/README deleted file mode 100644 index a5b40b5e56..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/README +++ /dev/null @@ -1,69 +0,0 @@ -Example description -------------------- - -The object of this example is to show how Message driven beans may -be involved in global transactions as well as Entity beans - -In this sample appli: - - - StockBean is an entity bean CMP that handles a stock table - a Stock item is composed with a Stockid (String) which is the primary key - and a Quantity (int) - the method decreaseQuantity(int qty) decrease the quantity for the - corresponding stockid but may throw a RemoteException "Negative stock" - - - StockHandlerBean is a Message Driven Bean that receives Map messages: - "CustomerId", String - "ProductId", String - "Quantity", int - - the onMessage method will run in the scope of a transaction started - by the the container in the receipt of a message on the - topic (StockHandlerTopic) - it will send a Text message on a Queue (OrderQueue) and decrease - the stock quantity for the Stock element identified by the "ProductId". - If it catches a RemoteException on the decreaseQuantity method it will call - the setRollbackOnly method of the MessageDrivenContext linked to the - instance in this case the container transaction will be rolled back. - - - OrderBean is another Message Driven Bean listening on the OrderQueue Queue - on receipt of a Text message on this queue it will write the corresponding - String as a new line in a file (order.txt) - - - EnvBean is a stateless session bean used for creating the stock table - in the database and for deleting this table - - - SampleAppliClient is a java application that sends n messages to the - topic StockHandlerTopic for decreasing several Stock items these - n messages doesn't cause the raise of Remote Exception negative stock - and sends one message on the Stock id "00000" that must cause - a rollback of the transaction. - At the end it verifies the number of messages received by the - Order message driven bean by counting the nb of lines in the - order.txt file (it must be equal to n) and verifies that the - stock quantity for "00000" has not changed and all the other must - be equal to 1. - - -Compiling the example : ---------------------- - -ant -find build.xml install - -Running this example : ---------------------- -You can use the provided run.sh (Unix) or run.bat (Windows) scripts to execute the -whole example or run it step by step. - - jonas start - ant runclient - jonas stop - -Note : -Running this example will lead to a normal exception in the JOnAS server : - - System Exception in business method: -java.rmi.RemoteException: Negative stock - at sampleappli.StockBean.decreaseQuantity(StockBean.java:199) - ... - diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/SampleAppliClient.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/SampleAppliClient.java deleted file mode 100644 index bb05f221c7..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/SampleAppliClient.java +++ /dev/null @@ -1,309 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// SampleAppliClient.java -// - -package sampleappli; - -import java.rmi.RemoteException; -import java.util.Enumeration; -import java.io.DataInputStream; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import javax.jms.*; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -/** - * - */ -public class SampleAppliClient { - - static Context initialContext = null; - - static EnvHome home = null; - - // Number of second to wait before the checking process - static int sleepSecond = 10; - - public static void main(String[] args) { - - // Initialize the number of second to wait before the checking process - if (args.length > 0) { - sleepSecond = (new Integer(args[0])).intValue(); - } - - // Get InitialContext - try { - initialContext = new InitialContext(); - } catch (NamingException e) { - e.printStackTrace(); - System.exit(2); - } - - // Lookup bean home - String beanName = "EnvHome"; - try { - home = (EnvHome) PortableRemoteObject.narrow(initialContext.lookup(beanName), EnvHome.class); - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - // Init the environment for the application - Env env = null; - try { - env = home.create(); - env.init(); - } catch (Exception ex) { - System.err.println("Cannot init Environment: " + ex); - System.exit(2); - } - - TopicConnectionFactory tcf = null; - TopicPublisher tp = null; - Topic topic = null; - // JNDI name of the Topics - String topicName = "StockHandlerTopic"; - // JNDI name of the connection factory - String conFactName = "JTCF"; - - try { - // lookup the TopicConnectionFactory through its JNDI name - tcf = (TopicConnectionFactory) initialContext.lookup(conFactName); - // lookup the Topic through its JNDI name - topic = (Topic) initialContext.lookup(topicName); - } catch (NamingException e) { - e.printStackTrace(); - System.exit(2); - } - - TopicConnection tc = null; - TopicSession session = null; - try { - tc = tcf.createTopicConnection(); - session = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(topic); - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - MapMessage mess = null; - int nbmess = 0; - // We send several messages that will update the database and the file - // order - try { - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer10"); - mess.setString("ProductId", "00003"); - mess.setInt("Quantity", 3); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer1"); - mess.setString("ProductId", "00001"); - mess.setInt("Quantity", 5); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer3"); - mess.setString("ProductId", "00002"); - mess.setInt("Quantity", 2); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer2"); - mess.setString("ProductId", "00004"); - mess.setInt("Quantity", 6); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer2"); - mess.setString("ProductId", "00003"); - mess.setInt("Quantity", 10); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer3"); - mess.setString("ProductId", "00001"); - mess.setInt("Quantity", 10); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer1"); - mess.setString("ProductId", "00002"); - mess.setInt("Quantity", 5); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer10"); - mess.setString("ProductId", "00004"); - mess.setInt("Quantity", 3); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer122"); - mess.setString("ProductId", "00003"); - mess.setInt("Quantity", 6); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer45"); - mess.setString("ProductId", "00001"); - mess.setInt("Quantity", 4); - tp.publish(mess); - nbmess++; - - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer7"); - mess.setString("ProductId", "00002"); - mess.setInt("Quantity", 2); - tp.publish(mess); - nbmess++; - - // Here we send a message that will force the rollback of the - // transaction - // in the onMessage of StockHandler MessageDrivenBean - mess = session.createMapMessage(); - mess.setString("CustomerId", "customer00"); - mess.setString("ProductId", "00000"); - mess.setInt("Quantity", 1000); - tp.publish(mess); - session.close(); - tc.close(); - - } catch (Exception ex) { - System.err.println("Exception caught when sending messages: " + ex); - System.exit(2); - } - - // Before the checking process we wait a little .... - try { - Thread.currentThread().sleep(1000 * sleepSecond); - } catch (InterruptedException e) { - System.err.println("InterruptedException"); - System.exit(2); - } - - // We have to check that nbmess have actually sent to the Message driven - // bean Order - // this is done by reading the order file (order.txt), it must have - // nbmess lines - BufferedReader inorderbr = null; - try { - File f = new File(System.getProperty("java.io.tmpdir") + File.separator + System.getProperty("user.name") - + "_order.txt"); - DataInputStream inorder = new DataInputStream(new BufferedInputStream(new FileInputStream(f))); - inorderbr = new BufferedReader(new InputStreamReader(inorder)); - } catch (Exception ex) { - System.err.println("Cannot open the order file: " + ex); - System.exit(2); - } - - String s = null; - int n = 0; - try { - while ((s = inorderbr.readLine()) != null) { - n++; - System.out.println(s); - } - inorderbr.close(); - } catch (java.io.IOException ex) { - System.err.println("cannot read the order file: " + ex); - } - if (n == nbmess) { - System.out.println("Nb messages sent and received OK"); - } else { - System.out.println("Problem: nb messages sent = " + nbmess + ", nb messages received = " + n); - System.out.println(" (re-run SampleAppliClent with an argument greater than " + sleepSecond + ")"); - } - - // Lookup bean home - String stockbeanName = "StockHome"; - StockHome shome = null; - Enumeration listOfStocks = null; - try { - shome = (StockHome) PortableRemoteObject.narrow(initialContext.lookup(stockbeanName), StockHome.class); - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - try { - listOfStocks = shome.findAllStocks(); - } catch (Exception e) { - System.err.println("Cannot findAllStocks: " + e); - } - Stock stock = null; - try { - while (listOfStocks.hasMoreElements()) { - stock = (Stock) listOfStocks.nextElement(); - String id = stock.getId(); - int qty = stock.getQuantity(); - System.out.println("StockId = " + id + " Quantity = " + qty); - if (id.equals("00000")) { - if (qty != 10) { - System.err.println("Problem: Stock id 00000 must be set to 10"); - System.out.println(" (re-run SampleAppliClent with an argument greater than " - + sleepSecond + ")"); - System.exit(2); - } - } else { - // for the other id the stock quantity must be equals to 1 - if (qty != 1) { - System.err.println("Problem: Stock id " + id + " must be set to 1"); - System.out.println(" (re-run SampleAppliClent with an argument greater than " - + sleepSecond + ")"); - System.exit(2); - } - } - } - } catch (Exception ex) { - System.err.println("Exception caught while reading stocks: " + ex); - } - - System.out.println("SampleApplicationClient OK"); - - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/Stock.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/Stock.java deleted file mode 100644 index 27c55b6c4b..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/Stock.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// Stock.java -package sampleappli; - -import java.rmi.RemoteException; -import javax.ejb.EJBObject; - -/** - * Stock remote interface - */ -public interface Stock extends EJBObject { - - public void increaseQuantity(int qty) throws RemoteException; - - public void decreaseQuantity(int qty) throws RemoteException; - - public int getQuantity() throws RemoteException; - - public void setQuantity(int qty) throws RemoteException; - - public String getId() throws RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockBean.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockBean.java deleted file mode 100644 index 1502f57c4f..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockBean.java +++ /dev/null @@ -1,207 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// StockBean.java -// Entity Bean -package sampleappli; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.DuplicateKeyException; -import javax.ejb.EJBException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.FinderException; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.sql.DataSource; -import javax.transaction.NotSupportedException; - -/** - * - */ -public class StockBean implements EntityBean { - - EntityContext ejbContext; - - // ------------------------------------------------------------------ - // State of the bean. - // They must be public for Container Managed Persistance. - // ------------------------------------------------------------------ - public String stockid; - - public int stockqty; - - // ------------------------------------------------------------------ - // EntityBean implementation - // ------------------------------------------------------------------ - - /** - * Set the associated entity context. The container invokes this method on - * an instance after the instance has been created. This method is called in - * an unspecified transaction context. - * @param ctx - An EntityContext interface for the instance. The instance - * should store the reference to the context in an instance variable. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void setEntityContext(EntityContext ctx) { - ejbContext = ctx; - } - - /** - * Unset the associated entity context. The container calls this method - * before removing the instance. This is the last method that the container - * invokes on the instance. The Java garbage collector will eventually - * invoke the finalize() method on the instance. This method is called in an - * unspecified transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void unsetEntityContext() { - ejbContext = null; - } - - /** - * A container invokes this method before it removes the EJB object that is - * currently associated with the instance. This method is invoked when a - * client invokes a remove operation on the enterprise Bean's home interface - * or the EJB object's remote interface. This method transitions the - * instance from the ready state to the pool of available instances. This - * method is called in the transaction context of the remove operation. - * @throws RemoveException The enterprise Bean does not allow destruction of - * the object. - * @throws EJBException - Thrown by the method to indicate a failure caused - * by a system-level error. - */ - public void ejbRemove() throws RemoveException { - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by loading it state from the underlying database. This method - * always executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbLoad() { - } - - /** - * A container invokes this method to instruct the instance to synchronize - * its state by storing it to the underlying database. This method always - * executes in the proper transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbStore() { - } - - /** - * There must be an ejbPostCreate par ejbCreate method - * @throws CreateException Failure to create an entity EJB object. - */ - public void ejbPostCreate(String id, int qty) throws CreateException { - } - - /** - * The Entity bean can define 0 or more ejbCreate methods. - * @throws CreateException Failure to create an entity EJB object. - * @throws DuplicateKeyException An object with the same key already exists. - */ - public java.lang.String ejbCreate(String id, int qty) throws CreateException, DuplicateKeyException { - - // Init here the bean fields - stockid = id; - stockqty = qty; - - // In CMP, should return null. - return null; - } - - /** - * A container invokes this method on an instance before the instance - * becomes disassociated with a specific EJB object. - */ - public void ejbPassivate() { - } - - /** - * A container invokes this method when the instance is taken out of the - * pool of available instances to become associated with a specific EJB - * object. - */ - public void ejbActivate() { - } - - // ------------------------------------------------------------------ - // Stock implementation - // ------------------------------------------------------------------ - - /** - * increaseQuantity - */ - public void increaseQuantity(int qty) { - stockqty += qty; - } - - /** - * decreaseStockQuantity - */ - public void decreaseQuantity(int qty) throws RemoteException { - stockqty = stockqty - qty; - if (stockqty < 0) { - throw new RemoteException("Negative stock"); - } - } - - /** - * getStockQuantity - */ - public int getQuantity() throws RemoteException { - return stockqty; - } - - /** - * setStockQuantity - */ - public void setQuantity(int qty) throws RemoteException { - stockqty = qty; - } - - /** - * getStockQuantity - */ - public String getId() throws RemoteException { - return stockid; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHandlerBean.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHandlerBean.java deleted file mode 100644 index 90b5146e29..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHandlerBean.java +++ /dev/null @@ -1,180 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// StockHandlerBean.java -// Message Driven bean - -package sampleappli; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.ejb.EJBException; -import javax.jms.*; -import javax.rmi.PortableRemoteObject; - -/** - * StockHandlerBean is a Message driven bean which is listening to a topic It - * receives MapMessages that contains a customer identification, a product - * identification and a quantity for the product When the StockHandlerBean - * receives a message it builds a message corresponding to an Order and sends it - * to a Queue destination then it updates the Stock database. - */ -public class StockHandlerBean implements MessageDrivenBean, MessageListener { - - private transient MessageDrivenContext mdbContext; - - StockHome sh = null; - - QueueConnectionFactory queueConnectionFactory = null; - - QueueConnection queueConnection = null; - - Queue queue = null; - - Context initialContext = null; - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Default constructor - */ - public StockHandlerBean() { - } - - /** - * Set the associated context. The container call this method after the - * instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param MessageDrivenContext A MessageDrivenContext interface for the - * instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the - * message-driven object. This happens when a container decides to terminate - * the message-driven object. This method is called with no transaction - * context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - */ - public void ejbCreate() { - try { - initialContext = new InitialContext(); - sh = (StockHome) PortableRemoteObject.narrow(initialContext.lookup("java:comp/env/ejb/Stock"), - StockHome.class); - queue = (Queue) initialContext.lookup("java:comp/env/jms/Orders"); - queueConnectionFactory = (QueueConnectionFactory) initialContext - .lookup("java:comp/env/jms/QueueConnectionFactory"); - queueConnection = queueConnectionFactory.createQueueConnection(); - } catch (Exception e) { - System.err.println("StockHandlerBean ejbCreate : " + e); - } - } - - /** - * onMessage method Map Messages are receive with the following format: - * "CustomerId" String "ProductId" String "Quantity" int the Message driven - * bean will construct a string for an Order that will be sent to the Queue - * Orders and decrease the stock quantity for the product identified by - * ProductId this method run in the scope of a transaction that the - * container started immediately before dispatching the onMessage method the - * sending message to the Order queue and the updating of the Stock table is - * made in the same global transaction this transaction may be rolled back - * if the stock quantity became negative - */ - - public void onMessage(Message message) { - QueueSession session = null; - QueueSender qs = null; - int code; - String pid = null; - ; - int qty = 0; - String cid = null; - ; - MapMessage msg = (MapMessage) message; - Stock stock = null; - try { - if (message.getJMSRedelivered()) { - System.out.println("Ok, that's it!"); - return; - } - } catch (Exception ex) { - System.err.println(ex.toString()); - } - try { - pid = msg.getString("ProductId"); - qty = msg.getInt("Quantity"); - cid = msg.getString("CustomerId"); - session = queueConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); - qs = session.createSender(queue); - stock = sh.findByPrimaryKey(pid); - System.out.println("StockHandlerBean findByPrimaryKey(" + pid + ")"); - } catch (Exception ex) { - System.err.println(ex.toString()); - } - try { - TextMessage tm = session.createTextMessage(); - String m = "For CustomerId = " + cid + " ProductId= " + pid + " Quantity= " + qty; - tm.setText(m); - qs.send(tm); - System.out.println("StockHandlerBean message sent: " + m); - stock.decreaseQuantity(qty); - } catch (Exception ex) { - // on negative Stock -> rollback the transaction - mdbContext.setRollbackOnly(); - } finally { - if (session != null) { - try { - session.close(); - System.out.println("StockHandlerBean session closed"); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHome.java b/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHome.java deleted file mode 100644 index 0de16e31db..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/StockHome.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// StockHome.java -package sampleappli; - -import java.rmi.RemoteException; -import java.util.Enumeration; -import javax.ejb.CreateException; -import javax.ejb.EJBHome; -import javax.ejb.FinderException; - -/** - * Home interface for the bean Stock - */ -public interface StockHome extends EJBHome { - - Stock create(String id, int qty) throws CreateException, RemoteException; - - Stock findByPrimaryKey(java.lang.String pk) throws FinderException, RemoteException; - - public Enumeration findAllStocks() throws RemoteException, FinderException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/application-client.xml b/jonas_tests/examples/base/examples/src/mdb/sampleappli/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/build.xml b/jonas_tests/examples/base/examples/src/mdb/sampleappli/build.xml deleted file mode 100644 index a5102a1a10..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/build.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/db1.prp b/jonas_tests/examples/base/examples/src/mdb/sampleappli/db1.prp deleted file mode 100644 index 9d87d68d0e..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/db1.prp +++ /dev/null @@ -1,325 +0,0 @@ -!--------------------------------------------------------------------- -! -! PROPERTIES for the InstantDB database used in the JOnAS eb example -! (builded from InstantDB/3.25/Examples/sample.prp) -! -!--------------------------------------------------------------------- - -!--------------------------------------------------------------------- -! -! BASIC PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Path where index tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -indexPath=./tmp/indexes -! -! Path where system tables are held. Can be absolute or relative to -! the properties file. Defaults to tablePath. -! -systemPath=./tmp/system -! -! Path where database tables are held. Can be absolute or relative -! to the properties file. Defaults to "current" directory. -! -tablePath=./tmp/tables -! -! Path where results set tables are held. Can be absolute or relative -! to the properties file. Defaults to tablePath. -! -tmpPath=./tmp/tmp -! -! Non-zero means paths are relative to the properties file. -! Default is absolute paths for files. -! -relativeToProperties=1 -! -! Alternative partitions can be defined so that tables can be placed -! in multiple locations. Each partition is numbered: 1, 2, 3,... Tables -! can be created on partitions using the syntax -! -! CREATE TABLE ON PARTITION ... -! -! The partition count has to be supplied. -! -!partitionCount=2 -! -! The locations of each partition must be supplied. These are always -! absolute path names. -! -!partition1=d:/petes -!partition2=c:/temp - - -!--------------------------------------------------------------------- -! -! TUNING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! The amount of each column to cache, expressed either as an absolute -! number of rows or as a percentage figure. Defaults to 256 or 10 respectively. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheAmount=512 -! -! CACHE_ROWS Must be one of CACHE_ROWS or CACHE_PERCENT. Determines whether -! to cache columns in tables based on an absolute number of rows, or the -! percentage number of rows in the table. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -cacheCondition=CACHE_ROWS -! -! The amount of the system tables to be cached. Defaults to 100. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheSize=10 -! -! Similar to cacheCondition, but applies only to the system tables. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!systemCacheCondition=CACHE_ROWS -! -! The percentage cache hit improvement required in order to move the -! cache to a new location in a column. -! -! (Currently not implemented). -! -cacheResetPercent=10 -! -! Non-zero means that database changes do not get written to the -! database immediately. See tuning.html. -! -fastUpdate=0 -! -! Percentage of free space in an index that must be present before -! the index reorganises itself. High values means frequent index -! reorganisation. Low values means slow index inserts. -! -indexLoad=5 -! -! The number of cache misses to include in calculations of the next -! base for the cache. -! -! (Currently not implemented). -! -missesInCacheStats=100 -! -! Non-zero means that results sets get instantiated on disk. By default -! InstantDB holds results sets emtirely in memory (apart from Binary -! columns). For large results sets this can be a problem. This property -! forces all results sets to be held on disk. -! -resultsOnDisk=0 -! -! Similar to cacheCondition but applies only to disk based -! results sets. Default is CACHE_ROWS. -! -resultsSetCache=CACHE_ROWS -! -! Similar to cacheAmount but applies only to disk based -! results sets. Default is 100. -! -resultsSetCacheAmount=100 -! -! Number of rows to read into the disk read ahead buffer. -! Recommended to be set somewhere around 128 to 256. -! Default is 20. -! -rowCacheSize=128 -! -! The read ahead buffer is effective at speeding up full -! table scans. However for indexed lookups or multiple -! simultaneous scans it is better to read a single row at -! a time. Each table holds a small number of single row -! buffers to improve such operations. Default is 8. -! -!singleRowCount=4 -! -! Sometimes the look ahead buffer can be held by a single -! thread even though it is not retrieveing many values from it. -! If too many lookups retrieve data from the single row -! buffers then it is better to flush the look ahead buffer and -! make it available for re-use. Default is 128. -! -!flushAfterCacheMisses=64 -! -! Number of rows to read ahead for system tables. By default -! system tables cache everything, so it is wasteful to have large -! read ahead buffers since they will very rarely be used. This -! allows the size of the system read ahead buffers to be reduced -! if necessary. Defaults to rowCacheSize. -! -!systemRows=20 -! -! The control column in all tables normally has a large cache -! since this speeds up all operation on that table. This can be -! varied to either improve performance or to reduce space. -! default is 8192. -! -! This value applies only when tables are first created. It has no effect -! when a table is being re-opened. -! -!controlColCacheSize=512 -! -! By default, InstantDB only does a cursory search for deleted rows during -! UPDATE statements. Setting searchDeletes=1 causes more detailed searches -! for deleted rows. This slows down UPDATE executions, but reults in more -! compact tables. Default is 0. -! -searchDeletes=0 -! -! The interval, in milliseconds, between checks for statement execution -! timeouts. Default is 5000. -! -!timerCheck=5000 - -!--------------------------------------------------------------------- -! -! LOGGING AND DEBUGGING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Non-zero means include SQL statements in the export file. -! -exportSQL=0 -! -! Non-zero means trace output also directed to console. -! Defaults to 0. -! -!traceConsole=1 -traceConsole=0 -! -! Relative or absolute path where exporting and tracing goes. -! -traceFile=./tmp/trace.log -! -! Bitmap of various items that can be traced. See debug.html. -! Defaults to 0. -! -traceLevel=2 - - -!--------------------------------------------------------------------- -! -! TRANSACTION AND RECOVERY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! 0 means do not perform recovery on startup. -! 1 means perform automatic recovery -! 2 (default) means prompt the user using standard in -! -recoveryPolicy=2 -! -! Sets the level of transaction journalling. See trans.html. -! Defaults to 1. -! -! 0 - No journalling takes place. -! 1 - Normal journalling (default). -! 2 - Full journalling. -! -transLevel=1 -! -! When doing an import, defines the number of rows imported -! before the transaction is committed. Recommended value 8192. -! defaults to 100. -! -transImports=100 - -!--------------------------------------------------------------------- -! -! DATE, TIME AND CURRENCY PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Number of digits after decimal point in currency outputs. Defaults to 2. -! -currencyDecimal=2 -! -! Currency symbol used in currency outputs. Defaults to $. -! -currencySymbol=$ -! -! Default format for date columns. Defaults to "yyyy-mm-dd". -! -dateFormat=yyyy-mm-dd -! -! Default format for timestamp columns. Defaults to "yyyy-mm-dd hh:mm:ss.lll". -! -dateTimeFormat=yyyy-mm-dd hh:mm:ss.lll -! -! If set, then all two digit dates less than its value are interpreted -! as 21st century dates. -! -!milleniumBoundary=50 -! -! Set to 1 causes the date string "now" to store a full timestamp. -! Default is to store only the date for fields with now hour in the -! format string. -! -nowMeansTime=0 - -!--------------------------------------------------------------------- -! -! STRING HANDLING PROPERTIES -! -!--------------------------------------------------------------------- - -! -! If set to 1 then String hashes use the JDK Object.hashCode() function. -! By default, uses InstantDB's String hashing. -! -altStringHashing=0 -! -! Set to 1 to cause LIKE clauses to always perform case insensitive -! comparisons. -! -likeIgnoreCase=0 -! -! Same as SET LITERAL STRICT_ON. Prevents string literals being interpreted -! as column names or numbers. Default is 0. -! -strictLiterals=0 -! -! Set this value to 1 (one) if you would like PreparedStatement.setString() -! to ignore "\" (backslash) characters when proceesing string constants. -! When set, InstantDB will not attempt to interpret \ as the start of an -! escape sequence. Default is 0. -! -!prepareIgnoresEscapes=1 - -!--------------------------------------------------------------------- -! -! MISCELLANEOUS PROPERTIES -! -!--------------------------------------------------------------------- - -! -! Allows selected InstantDB keywords to be un-reserved. -! e.g. ignoreKeywords=url,quote would allow the keywords -! url and quote to be used as table or column names. -! -! This faciliy is provided for compatatbility reasons only. -! It's use is not recommended AND IS NOT SUPPORTED. -! -!ignoreKeywords -! -! Non-zero means database is opened in read only mode. -! -readOnly=0 diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/jonas-sampleappli.xml b/jonas_tests/examples/base/examples/src/mdb/sampleappli/jonas-sampleappli.xml deleted file mode 100644 index 052aec3f73..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/jonas-sampleappli.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - Env - EnvHome - - jdbc/myDS - jdbc_1 - - - - - Stock - StockHome - - jdbc_1 - sampleappliStockTable - - stockid - ID - - - stockqty - QUANTITY - - - - findAllStocks - - - - - - - - StockHandler - - StockHandlerTopic - - - ejb/Stock - StockHome - - - jms/QueueConnectionFactory - QCF - - - jms/Orders - OrderQueue - - - - - - Order - - OrderQueue - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/sampleappli/sampleappli.xml b/jonas_tests/examples/base/examples/src/mdb/sampleappli/sampleappli.xml deleted file mode 100644 index 22940e08fc..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/sampleappli/sampleappli.xml +++ /dev/null @@ -1,158 +0,0 @@ - - - - - Deployment descriptor for the mdb sampleappli JOnAS example - sampleappli example - - - - Describe here the session bean Env - Env - Env - sampleappli.EnvHome - sampleappli.Env - sampleappli.EnvBean - Stateless - Container - - stocktablename - java.lang.String - sampleappliStockTable - - - orderfilename - java.lang.String - order.txt - - - jdbc/myDS - javax.sql.DataSource - Application - - - - - Describe here the entity bean Stock - Stock - Stock - sampleappli.StockHome - sampleappli.Stock - sampleappli.StockBean - Container - java.lang.String - false - 1.x - - stockid - - - stockqty - - stockid - - - - Describe here the message driven bean StockHandler - Message Driven Bean StockHandler - StockHandler - sampleappli.StockHandlerBean - Container - - - - destinationType - javax.jms.Topic - - - acknowledgeMode - Auto-acknowledge - - - - subscriptionDurability - NonDurable - - - - ejb/Stock - Entity - sampleappli.StockHome - sampleappli.Stock - - - jms/QueueConnectionFactory - javax.jms.QueueConnectionFactory - Container - - - jms/Orders - javax.jms.Queue - - - - - Describe here the message driven bean Order - Message Driven Bean Order - Order - sampleappli.OrderBean - Container - - - destinationType - javax.jms.Queue - - - acknowledgeMode - Auto-acknowledge - - - - orderfilename - java.lang.String - order.txt - - - - - - - - - Stock - * - - Required - - - - - Env - * - - NotSupported - - - - - StockHandler - * - - Required - - - - - Order - * - - NotSupported - - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbBean.java b/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbBean.java deleted file mode 100644 index 2f653e2905..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbBean.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbBean.java -// Message Driven bean -package samplemdb; - -import javax.ejb.MessageDrivenBean; -import javax.ejb.MessageDrivenContext; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; -import javax.jms.JMSException; - -/** - * Example of MessageDrivenBean on a Topic. The transactions are container - * managed (Required) - */ -public class MdbBean implements MessageDrivenBean, MessageListener { - - private transient MessageDrivenContext mdbContext; - - // ------------------------------------------------------------------ - // MessageDrivenBean implementation - // ------------------------------------------------------------------ - - /** - * Default constructor - */ - public MdbBean() { - } - - /** - * Set the associated context. The container call this method after the - * instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param MessageDrivenContext A MessageDrivenContext interface for the - * instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - - public void setMessageDrivenContext(MessageDrivenContext ctx) { - System.out.println("MdbBean setMessageDrivenContext"); - mdbContext = ctx; - } - - /** - * A container invokes this method before it ends the life of the - * message-driven object. This happens when a container decides to terminate - * the message-driven object. This method is called with no transaction - * context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - */ - public void ejbRemove() { - System.out.println("MdbBean ejbRemove"); - } - - /** - * The Message driven bean must define an ejbCreate methods with no args. - */ - public void ejbCreate() { - System.out.println("MdbBean ejbCreate"); - } - - /** - * onMessage method - */ - public void onMessage(Message message) { - System.out.println("MdbBean onMessage"); - try { - TextMessage mess = (TextMessage) message; - System.out.println("Message received: " + mess.getText()); - } catch (JMSException ex) { - System.err.println("Exception caught: " + ex); - } - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbClient.java b/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbClient.java deleted file mode 100644 index 1a859a48dc..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/MdbClient.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -// MdbClient.java -// mini Client for accessing bean Mdb -package samplemdb; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.*; -import javax.jms.*; - -/** - * - */ -public class MdbClient { - - static Context ictx = null; - - static TopicConnectionFactory tcf = null; - - static TopicPublisher tp = null; - - static Topic topic = null; - - // JNDI name of the Topic - static String topicName = "mdbTopic"; - - // JNDI name of the default connection factory - static String conFactName = "JTCF"; - - public static void main(String[] arg) { - // Get InitialContext - try { - ictx = new InitialContext(); - // lookup the TopicConnectionFactory through its JNDI name - tcf = (TopicConnectionFactory) ictx.lookup(conFactName); - System.out.println("JMS client: tcf = " + tcf.toString()); - // lookup the Topic through its JNDI name - topic = (Topic) ictx.lookup(topicName); - } catch (NamingException e) { - e.printStackTrace(); - System.exit(2); - } - - TopicConnection tc = null; - TopicSession session = null; - try { - tc = tcf.createTopicConnection(); - System.out.println("JMS client: tc = " + tc.toString()); - session = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); - tp = session.createPublisher(topic); - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - - // publish 10 messages to the topic - int nbmess = 10; - try { - TextMessage message; - for (int i = 0; i < nbmess; i++) { - message = session.createTextMessage(); - message.setText("Message" + i); - tp.publish(message); - - } - session.close(); - tc.close(); - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - System.out.println("MDBsample is Ok"); - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/README b/jonas_tests/examples/base/examples/src/mdb/samplemdb/README deleted file mode 100644 index 563c3806bd..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/README +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) Bull, 2001-2002 - - -Example description -------------------- -This unrealistic example is very sample for illustrating the use of -Message Driven Beans in JOnAS. - -The EJBClient (MdbClient) is a pure JMS Client that sends 10 messages -on a Topic named "mdbTopic". -In the JOnAS Server is deployed a Message Driven Bean Mdb that asynchrounsly -receives and prints the messages. - - -Compiling this example: ----------------------- -ant -find build.xml install - -Running this example: ---------------------- - -Toy can use the provided scripts (run.sh on Unix or run.bat on Windows) to execute the -whole example. - -or, steb by step: - jonas start - ant runclient - jonas stop - -You may want to execute this example with the MOM JMS that is running in a -separate JVM. For this, you must first : --> in case of the jms service - - a] Set the property jonas.service.jms.collocated to false - in jonas.properties then run the JmsServer first. - b] Run the standalone Jms Server : JmsServer & - --> in case of the rar joram - - set the config-property 'CollocatedServer' to false - in ra.xml of the joram's rar - - diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/application-client.xml b/jonas_tests/examples/base/examples/src/mdb/samplemdb/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/build.xml b/jonas_tests/examples/base/examples/src/mdb/samplemdb/build.xml deleted file mode 100644 index 55b9e41cea..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/build.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/jonas-samplemdb.xml b/jonas_tests/examples/base/examples/src/mdb/samplemdb/jonas-samplemdb.xml deleted file mode 100644 index 160d775d8b..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/jonas-samplemdb.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Mdb - - mdbTopic - - 20 - 10 - - - - diff --git a/jonas_tests/examples/base/examples/src/mdb/samplemdb/samplemdb.xml b/jonas_tests/examples/base/examples/src/mdb/samplemdb/samplemdb.xml deleted file mode 100644 index afed6233eb..0000000000 --- a/jonas_tests/examples/base/examples/src/mdb/samplemdb/samplemdb.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Deployment descriptor for the samplemdb JOnAS example - samplemdb example - - - Describe here the message driven bean Mdb - Message Driven Bean Mdb - Mdb - samplemdb.MdbBean - javax.jms.MessageListener - Container - javax.jms.Topic - - - destinationType - javax.jms.Topic - - - acknowledgeMode - Auto-acknowledge - - - - subscriptionDurability - NonDurable - - - - - - - - - - Mdb - * - - Required - - - - diff --git a/jonas_tests/examples/base/examples/src/sb/ClientOp.java b/jonas_tests/examples/base/examples/src/sb/ClientOp.java deleted file mode 100644 index 2a0995b11a..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/ClientOp.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package sb; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.transaction.UserTransaction; - -/** - * Sample for Session Bean. Usage: java sb.ClientOp - * Heavy client doing some operations on a bean - * @author jonas team - */ -public class ClientOp { - /** - * First amount to buy - */ - private static final int FIRST_BUY_AMOUNT = 10; - - /** - * Second amount to buy - */ - private static final int SECOND_BUY_AMOUNT = 20; - - /** - * Third amount to buy (will be rollback) - */ - private static final int THIRD_BUY_AMOUNT = 50; - - /** - * Constructor. Hide constructor as it is an utility class - */ - private ClientOp() { - - } - - /** - * Main method - * @param args arguments of the client - */ - public static void main(String[] args) { - - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // We want to start transactions from client: get UserTransaction - UserTransaction utx = null; - try { - - // Comment the following lines if you want to use a David Client: - utx = (UserTransaction) initialContext.lookup("javax.transaction.UserTransaction"); - - // Uncomment the following lines if you want to use a David Client: - /* - * Properties prop = new Properties(); - * prop.put("java.naming.factory.initial", - * "com.sun.jndi.rmi.registry.RegistryContextFactory"); - * prop.put("java.naming.provider.url", "rmi://localhost:1099"); // - * update the port if necessary InitialContext ictx = new - * InitialContext(prop); utx = (UserTransaction) - * ictx.lookup("javax.transaction.UserTransaction"); - */ - - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - - // Connecting to OpHome thru JNDI - OpHome home = null; - try { - home = (OpHome) PortableRemoteObject.narrow(initialContext.lookup("OpHome"), OpHome.class); - } catch (Exception e) { - System.err.println("Cannot lookup OpHome: " + e); - System.exit(2); - } - - // OpBean creation - Op t1 = null; - try { - System.out.println("Create a bean"); - t1 = home.create("User1"); - } catch (Exception e) { - System.err.println("Cannot create OpBean: " + e); - System.exit(2); - } - - // First transaction (committed) - try { - System.out.println("Start a first transaction"); - utx.begin(); - System.out.println("First request on the new bean"); - t1.buy(FIRST_BUY_AMOUNT); - System.out.println("Second request on the bean"); - t1.buy(SECOND_BUY_AMOUNT); - System.out.println("Commit the transaction"); - utx.commit(); - } catch (Exception e) { - System.err.println("exception during 1st Tx: " + e); - System.exit(2); - } - // Start another transaction (rolled back) - try { - System.out.println("Start a second transaction"); - utx.begin(); - t1.buy(THIRD_BUY_AMOUNT); - System.out.println("Rollback the transaction"); - utx.rollback(); - } catch (Exception e) { - System.err.println("exception during 2nd Tx: " + e); - System.exit(2); - } - - // Get the total bought, outside the transaction - int val = 0; - try { - System.out.println("Request outside any transaction"); - val = t1.read(); - } catch (Exception e) { - System.err.println("Cannot read value on t1 : " + e); - System.exit(2); - } - if (val != FIRST_BUY_AMOUNT + SECOND_BUY_AMOUNT) { - System.err.println("Bad value read: " + val); - System.exit(2); - } - - // Remove Session bean - try { - t1.remove(); - } catch (Exception e) { - System.out.println("Exception on buy: " + e); - System.exit(2); - } - System.out.println("ClientOp OK. Exiting."); - } -} - diff --git a/jonas_tests/examples/base/examples/src/sb/Op.java b/jonas_tests/examples/base/examples/src/sb/Op.java deleted file mode 100644 index a9068f6199..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/Op.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package sb; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -/** - * Remote interface for the bean Op - * @author JOnAS team - */ -public interface Op extends EJBObject { - - /** - * Business method implementation. - * @param shares nb of shares to be bought - * @throws RemoteException if RMI failed. - */ - void buy (int shares) throws RemoteException; - - /** - * Business method implementation. - * @return the nb of shares bought - * @throws RemoteException if RMI failed. - */ - int read () throws RemoteException; - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/sb/OpBean.java b/jonas_tests/examples/base/examples/src/sb/OpBean.java deleted file mode 100644 index c786974d6c..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/OpBean.java +++ /dev/null @@ -1,259 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package sb; - -import javax.ejb.EJBException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.ejb.SessionSynchronization; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * This is an example of Session Bean, statefull, and synchronized. - * @author JOnAS team - */ -public class OpBean implements SessionBean, SessionSynchronization { - - /** - * Actual state of the bean - */ - private int total = 0; - - /** - * value inside Tx, not yet committed. - */ - private int newtotal = 0; - - /** - * User client - */ - private String clientUser = null; - - - /* ========================= ejbCreate methods ============================ */ - - /** - * There must be one ejbCreate() method per create() method on the Home - * interface, and with the same signature. - * @param user the user name - */ - public void ejbCreate(String user) { - - total = 0; - newtotal = total; // in case we are outside transactions - clientUser = user; - } - - /* - * ====================== javax.ejb.SessionBean implementation - * ================= - */ - - /** - * The activate method is called when the instance is activated from its - * "passive" state. The instance should acquire any resource that it has - * released earlier in the ejbPassivate() method. This method is called with - * no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbActivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * The passivate method is called before the instance enters the "passive" - * state. The instance should release any resources that it can re-acquire - * later in the ejbActivate() method. After the passivate method completes, - * the instance must be in a state that allows the container to use the Java - * Serialization protocol to externalize and store away the instance's - * state. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbPassivate() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * A container invokes this method before it ends the life of the session - * object. This happens as a result of a client's invoking a remove - * operation, or when a container decides to terminate the session object - * after a timeout. This method is called with no transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for enterprise beans - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void ejbRemove() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - } - - /** - * Set the associated session context. The container calls this method after - * the instance creation. The enterprise Bean instance should store the - * reference to the context object in an instance variable. This method is - * called with no transaction context. - * @param sessionContext A SessionContext interface for the instance. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException This exception is defined in the method - * signature to provide backward compatibility for applications - * written for the EJB 1.0 specification. Enterprise beans written - * for the EJB 1.1 specification should throw the - * javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB2.0 and higher specifications must throw - * the javax.ejb.EJBException instead of this exception. - */ - public void setSessionContext(SessionContext sessionContext) throws EJBException, java.rmi.RemoteException { - - } - - /* - * ============== javax.ejb.SessionSynchronization implementation - * ============= - */ - - /** - * The afterBegin method notifies a session Bean instance that a new - * transaction has started, and that the subsequent business methods on the - * instance will be invoked in the context of the transaction. The instance - * can use this method, for example, to read data from a database and cache - * the data in the instance fields. This method executes in the proper - * transaction context. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterBegin() throws EJBException, java.rmi.RemoteException { - newtotal = total; - } - - /** - * The beforeCompletion method notifies a session Bean instance that a - * transaction is about to be committed. The instance can use this method, - * for example, to write any cached data to a database. This method executes - * in the proper transaction context. Note: The instance may still - * cause the container to rollback the transaction by invoking the - * setRollbackOnly() method on the instance context, or by throwing an - * exception. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void beforeCompletion() throws EJBException, java.rmi.RemoteException { - // Nothing to do for this simple example - - // We can access the bean environment everywhere in the bean, - // for example here! - try { - InitialContext ictx = new InitialContext(); - String value = (String) ictx.lookup("java:comp/env/prop1"); - // value should be the one defined in ejb-jar.xml - } catch (NamingException e) { - throw new EJBException(e); - } - } - - /** - * The afterCompletion method notifies a session Bean instance that a - * transaction commit protocol has completed, and tells the instance whether - * the transaction has been committed or rolled back. This method executes - * with no transaction context. - * @param committed - True if the transaction has been committed, false if - * is has been rolled back. - * @throws EJBException Thrown by the method to indicate a failure caused by - * a system-level error. - * @throws java.rmi.RemoteException - This exception is defined in the - * method signature to provide backward compatibility for enterprise - * beans written for the EJB 1.0 specification. Enterprise beans - * written for the EJB 1.1 and higher specifications should throw - * the javax.ejb.EJBException instead of this exception. Enterprise - * beans written for the EJB 2.0 and higher specifications must not - * throw the java.rmi.RemoteException. - */ - public void afterCompletion(boolean committed) throws EJBException, java.rmi.RemoteException { - if (committed) { - total = newtotal; - } else { - newtotal = total; - } - } - - /* ========================= Op implementation ============================ */ - - /** - * Business method implementation. - * @param s nb of shares to be bought - */ - public void buy(int s) { - newtotal = newtotal + s; - return; - } - - /** - * Business method implementation. - * @return the nb of shares bought - */ - public int read() { - return newtotal; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/sb/OpHome.java b/jonas_tests/examples/base/examples/src/sb/OpHome.java deleted file mode 100644 index b3cf09571c..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/OpHome.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): ____________________________________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package sb; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Home interface for the bean Op - * @author JOnAS team - */ -public interface OpHome extends EJBHome { - - /** - * Create an instance of the Op bean. - * @param user the user name. - * @return the Remote interface of the bean Op. - * @throws CreateException if the creation failed. - * @throws RemoteException if the RMI call failed. - */ - Op create(String user) throws CreateException, RemoteException; -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/src/sb/README b/jonas_tests/examples/base/examples/src/sb/README deleted file mode 100644 index a02b46bfda..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/README +++ /dev/null @@ -1,36 +0,0 @@ -Copyright (C) BULL S.A. 1998-2002. - - -Compiling this example: ------------------------ -This example is compiled with the others by "ant install" in $JONAS_ROOT/examples. - -Running this example: ---------------------- -1) Run the JOnAS EJB Server to make beans available to clients: - - jonas start - -2) Load the sb.jar if you have not added it in the ejb service descriptors list : - -on UNIX: - jonas admin -a $JONAS_BASE/ejbjars/sb.jar - -On Windows: - jonas admin -a $JONAS_BASE/ejbjars/sb.jar - -You should see something like this when the bean is loaded : - - Op available - -3) Run the client program: - -on UNIX: - jclient -cp $JONAS_BASE/ejbjars/sb.jar sb.ClientOp - -On Windows: - jclient -cp "%JONAS_BASE%\ejbjars\sb.jar sb.ClientOp - - -4) Stop the jonas server - jonas stop diff --git a/jonas_tests/examples/base/examples/src/sb/application-client.xml b/jonas_tests/examples/base/examples/src/sb/application-client.xml deleted file mode 100644 index 13436c357a..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/application-client.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Client of the sb sample - - diff --git a/jonas_tests/examples/base/examples/src/sb/build.xml b/jonas_tests/examples/base/examples/src/sb/build.xml deleted file mode 100644 index d45e5981ae..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/build.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/src/sb/jonas-sb.xml b/jonas_tests/examples/base/examples/src/sb/jonas-sb.xml deleted file mode 100644 index 4fa36f99ab..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/jonas-sb.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - Op - OpHome - - - diff --git a/jonas_tests/examples/base/examples/src/sb/sb.xml b/jonas_tests/examples/base/examples/src/sb/sb.xml deleted file mode 100644 index 968f28f488..0000000000 --- a/jonas_tests/examples/base/examples/src/sb/sb.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - Deployment descriptor for the sb JOnAS example - sb example - - - Op - sb.OpHome - sb.Op - sb.OpBean - Stateful - Container - - prop1 - java.lang.String - prop1 value - - - - - - - Op - * - - Required - - - diff --git a/jonas_tests/examples/base/examples/src/src_common.xml b/jonas_tests/examples/base/examples/src/src_common.xml deleted file mode 100644 index b753eb5269..0000000000 --- a/jonas_tests/examples/base/examples/src/src_common.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/statelessbean/build.xml b/jonas_tests/examples/base/examples/statelessbean/build.xml deleted file mode 100644 index 429177e4ab..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/build.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/statelessbean/etc/web.xml b/jonas_tests/examples/base/examples/statelessbean/etc/web.xml deleted file mode 100644 index ed9b4b352c..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/etc/web.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - StatelessClient - - org.ow2.easybeans.examples.statelessbean.ClientServletStateless - - - - - StatelessClient - / - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientServletStateless.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientServletStateless.java deleted file mode 100644 index 798d50a921..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientServletStateless.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet's client for the stateless session bean. - * @author Florent Benoit - */ -public class ClientServletStateless extends HttpServlet { - - /** - * Serializable class uid. - */ - private static final long serialVersionUID = 6893863749912962928L; - - /** - * Called by the server (via the service method) to allow a servlet to - * handle a GET request. - * @param request an HttpServletRequest object that contains the request the - * client has made of the servlet - * @param response an HttpServletResponse object that contains the response - * the servlet sends to the client - * @throws IOException if an input or output error is detected when the - * servlet handles the GET request - * @throws ServletException if the request for the GET could not be handled - */ - @Override - public void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException, ServletException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - out.println(""); - out.println(""); - out.println(""); - out.println("Client of stateless session bean"); - out.println(""); - out.println(""); - - // no operation ? displays button for hello world and calculator - String operation = request.getParameter("operation"); - if (operation != null) { - if (operation.equals("helloWorld")) { - displayHelloWorld(out); - } else if (operation.equals("add")) { - // get two parameters - String param1 = request.getParameter("p1"); - String param2 = request.getParameter("p2"); - if (param1 != null && param2 != null) { - int v1 = Integer.parseInt(param1); - int v2 = Integer.parseInt(param2); - displayResult(out, v1, v2); - } else { - out.println("Missing values for operation add"); - } - } - } - out.println("
    "); - displayDefault(out); - - - out.println(""); - out.println(""); - out.close(); - } - - /** - * Call HelloWorld method. - * @param out the given writer - */ - private void displayHelloWorld(final PrintWriter out) { - out.println("Calling helloWorld() method"); - out.println("
    "); - try { - getBean().helloWorld(); - out.println("helloWorld() method called OK."); - } catch (Exception e) { - displayException(out, "Cannot call helloworld on the bean", e); - } - } - - /** - * By default, call helloWorld method. - * @param out the given writer - */ - private void displayDefault(final PrintWriter out) { - out.println("
    "); - out.println("sum of a + b :"); - out.println("

    "); - out.println("

    "); - out.println("

    "); - out.println("

    "); - out.println("
    "); - out.println("
    "); - out.println("

    "); - out.println("

    "); - out.println("
    "); - } - - /** - * Prints he result of the sum of val1 and val2. - * @param out the given writer - * @param val1 first arg for add method - * @param val2 second arg for add method - */ - private void displayResult(final PrintWriter out, final int val1, final int val2) { - out.println("
    Sum of '" + val1 + "' and '" + val2 + "' = "); - try { - int sum = getBean().add(val1, val2); - out.println(sum); - } catch (Exception e) { - displayException(out, "
    Cannot call add() method on the bean", e); - } - } - - /** - * If there is an exception, print the exception. - * @param out the given writer - * @param errMsg the error message - * @param e the content of the exception - */ - private void displayException(final PrintWriter out, final String errMsg, final Exception e) { - out.println("

    Exception : " + errMsg); - out.println("

    ");
    -        e.printStackTrace(out);
    -        out.println("

    "); - } - - /** - * Lookup the stateless bean and gets a reference on it. - * @return the stateless bean business interface. - * @throws Exception if the bean cannot be retrieved. - */ - private StatelessRemote getBean() throws Exception { - Context initialContext = new InitialContext(); - Object o = initialContext.lookup("org.ow2.easybeans.examples.statelessbean.StatelessBean" + "_" - + StatelessRemote.class.getName() + "@Remote"); - - if (o instanceof StatelessRemote) { - StatelessRemote statelessBean = (StatelessRemote) o; - return statelessBean; - } - throw new Exception("Cannot cast object into StatelessRemote"); - - } - -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientStateless.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientStateless.java deleted file mode 100644 index 63ebf198b5..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/ClientStateless.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -import java.util.Hashtable; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -/** - * Simple client of the stateless. - * @author Florent Benoit - */ -public final class ClientStateless { - - /** - * Default InitialContextFactory to use. - */ - private static final String DEFAULT_INITIAL_CONTEXT_FACTORY = "org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory"; - - /** - * Utility class. - */ - private ClientStateless() { - - } - - /** - * Main method. - * @param args the arguments (not required) - * @throws Exception if exception is found. - */ - public static void main(final String[] args) throws Exception { - - Context initialContext = getInitialContext(); - - // Thread.currentThread().sleep(5000); - - StatelessRemote statelessBean = (StatelessRemote) initialContext - .lookup("org.ow2.easybeans.examples.statelessbean.StatelessBean" - + "_" + StatelessRemote.class.getName() + "@Remote"); - - System.out.println("Calling the first method..."); - System.out.println("Calling helloWorld method..."); - statelessBean.helloWorld(); - - System.out.println("-----------------------------"); - System.out.println("-----------------------------"); - System.out.println("Calling the secode method..."); - System.out.println("Add 1 + 2..."); - int resultAdd = statelessBean.add(1, 2); - System.out.println("Sum = '" + resultAdd + "'."); - - System.out.println("-----------------------------"); - System.out.println("-----------------------------"); - System.out.println("Calling the third method..."); - System.out.println("Div 6 / 3 (expect exception)..."); - int resultDiv = statelessBean.div(6, 3); - System.out.println("Div = '" + resultDiv + "'."); - } - - /** - * @return Returns the InitialContext. - * @throws NamingException If the Context cannot be created. - */ - private static Context getInitialContext() throws NamingException { - - // if user don't use jclient/client container - // we can specify the InitialContextFactory to use - // But this is *not recommended*. - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, getInitialContextFactory()); - - // Usually a simple new InitialContext() without any parameters is sufficent. - // return new InitialContext(); - - return new InitialContext(env); - } - - /** - * Returns a configurable InitialContextFactory classname.
    - * Can be configured with the easybeans.client.initial-context-factory System property. - * @return Returns a configurable InitialContextFactory classname. - */ - private static String getInitialContextFactory() { - String prop = System.getProperty("easybeans.client.initial-context-factory"); - // If not found, use the default - if (prop == null) { - prop = DEFAULT_INITIAL_CONTEXT_FACTORY; - } - return prop; - } - - -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessBean.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessBean.java deleted file mode 100644 index 7103a4deba..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessBean.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -import javax.ejb.Local; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.interceptor.AroundInvoke; -import javax.interceptor.ExcludeClassInterceptors; -import javax.interceptor.Interceptors; -import javax.interceptor.InvocationContext; - - -import org.ow2.cmi.annotation.Cluster; -import org.ow2.cmi.annotation.Policy; -import org.ow2.cmi.lb.policy.RoundRobin; - -/** - * Simple stateless bean. - * @author Florent Benoit - */ -@Stateless -@Local(StatelessLocal.class) -@Remote(StatelessRemote.class) -@Interceptors({StatelessInterceptor.class}) -@Cluster(name="test_cluster") -@Policy(RoundRobin.class) -public class StatelessBean implements StatelessRemote { - - /** - * Hello world. - */ - public void helloWorld() { - System.out.println("Hello world !"); - } - - /** - * Compute a + b. - * @param a first int - * @param b second int - * @return a + b - */ - @Interceptors({StatelessOnlyAddMethodInterceptor.class}) - public int add(final int a, final int b) { - return a + b; - } - - /** - * Divide a by b. - * @param a first int - * @param b second int - * @return a / b - */ - public int div(final int a, final int b) { - if (b == 0) { - throw new IllegalArgumentException("cannot divide by 0"); - } - return a / b; - } - - /** - * Methods without interceptors. - */ - @ExcludeClassInterceptors - public void notInterceptedMethod() { - - } - - - /** - * Trace method's time. - * @param invocationContext contains attributes of invocation - * @return method's invocation result - * @throws Exception if invocation fails - */ - @AroundInvoke - public Object trace(final InvocationContext invocationContext) throws Exception { - System.out.println("TraceInterceptor : method '" + invocationContext.getMethod().getName() - + "'."); - long startPeriod = System.nanoTime(); - try { - return invocationContext.proceed(); - } finally { - long elapsed = System.nanoTime() - startPeriod; - System.out.println("TraceInterceptor : Elapsed time = " + elapsed + " ns"); - } - } -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessInterceptor.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessInterceptor.java deleted file mode 100644 index 72e55cc7f5..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessInterceptor.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -import java.lang.reflect.Method; - -import javax.annotation.PostConstruct; -import javax.interceptor.AroundInvoke; -import javax.interceptor.InvocationContext; - -/** - * Simple interceptor class. Mix of business interceptors and lifecycle interceptors. - * @author Florent Benoit - */ -public class StatelessInterceptor { - - /** - * Another class interceptor. - * @param invocationContext contains attributes of invocation - * @return method's invocation result - * @throws Exception if invocation fails - */ - @SuppressWarnings("finally") - @AroundInvoke - public Object toto(final InvocationContext invocationContext) throws Exception { - System.out.println("Another class interceptor"); - Method m = invocationContext.getMethod(); - // Change the returned value for add method - Object returnedValue = null; - try { - returnedValue = invocationContext.proceed(); - } finally { - if (m.getName().equals("add")) { - // Uncomment the following line to change the returned value - //return Integer.valueOf(-1); - return returnedValue; - } - return returnedValue; - } - } - - /** - * Callback in an external class. - * @param invocationContext the invocationcontext. - */ - @PostConstruct - public void myPostConst(final InvocationContext invocationContext) { - System.out.println("postConstruct in class Statelesslistener of bean " + invocationContext.getTarget()); - try { - invocationContext.proceed(); - } catch (Exception e) { - throw new RuntimeException("Cannot proceed invocationContext", e); - } - } - -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessLocal.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessLocal.java deleted file mode 100644 index 542b89a1fe..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessLocal.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -/** - * Simple interface for a stateless bean. - * It acts as a local interface. - * @author Florent Benoit - */ -public interface StatelessLocal { - - /** - * Hello world. - */ - void helloWorld(); - - /** - * Compute a + b. - * @param a first int - * @param b second int - * @return a + b - */ - int add(final int a, final int b); - - /** - * Divide a by b. - * @param a first int - * @param b second int - * @return a / b - */ - int div(final int a, final int b); - - - /** - * Methods without interceptors. - */ - void notInterceptedMethod(); -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessOnlyAddMethodInterceptor.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessOnlyAddMethodInterceptor.java deleted file mode 100644 index c6948710cf..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessOnlyAddMethodInterceptor.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - -import java.lang.reflect.Method; - -import javax.interceptor.AroundInvoke; -import javax.interceptor.InvocationContext; - - -/** - * Simple interceptor class which should be launched only on add method. - * @author Florent Benoit - */ -public class StatelessOnlyAddMethodInterceptor { - - /** - * Another class interceptor. - * @param invocationContext contains attributes of invocation - * @return method's invocation result - * @throws Exception if invocation fails - */ - @AroundInvoke - public Object onlyAdd(final InvocationContext invocationContext) throws Exception { - System.out.println("Add interceptor"); - Method m = invocationContext.getMethod(); - // Checks the method name - if (m.getName().equals("add")) { - System.out.println("Applied on the correct method"); - } else { - throw new Exception("Error, should be only on add method while it is applied on '" + m.getName() + "' method."); - } - return invocationContext.proceed(); - } - -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessRemote.java b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessRemote.java deleted file mode 100644 index 34be426ffb..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/StatelessRemote.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * EasyBeans - * Copyright (C) 2006 Bull S.A.S. - * Contact: easybeans@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.easybeans.examples.statelessbean; - - -/** - * Simple interface for a stateless bean. - * It acts as a remote interface. - * @author Florent Benoit - */ -public interface StatelessRemote extends StatelessLocal { - -} diff --git a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/package.html b/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/package.html deleted file mode 100644 index 42fce5fae5..0000000000 --- a/jonas_tests/examples/base/examples/statelessbean/src/java/org/ow2/easybeans/examples/statelessbean/package.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - EJB 3.0 - - -

    Example of EJB 3.0 container

    - - diff --git a/jonas_tests/examples/base/examples/webservices/README b/jonas_tests/examples/base/examples/webservices/README deleted file mode 100644 index 5233e72593..0000000000 --- a/jonas_tests/examples/base/examples/webservices/README +++ /dev/null @@ -1,64 +0,0 @@ - -JOnAS WebServices Sample -------------------------- - -This example is composed of 4 sub examples : - - a Standalone Web Application exposing a JaxRpc Endpoint as WebService and a simple client (wswarsample.war) - - a Standalone WebApplication which is client of a WebServices (Google) (wsaccess.war) - - an Application with 1 EJB : a Stateless Session bean exposed as web service (ws.ear). This example also shows - how to add security to a Stateless Session bean using WsGen. The security parameters are specified in jonas-webservices.xml - and the username and password required is jonas:jonas - - an Application composed by a Session Bean acting as web service client accessed through a JSP (wsclient.ear). - -What it show ? ---------------- - -In this sample, we will show the usage of a new tag in Web and Ejb Deployment Desc. - - service-ref tag is used to declare a dependancy of the component on a WebServices. - In other word, the component is client of an external WebService. - This tag can be used in the web.xml Deployment desc and in ejb-jar deployment desc. - -> This tag MAY be used jointly with jonas-service-ref tag in JOnAS specific Deployment Descriptor (jonas-web.xml and - jonas-ejb-jar.xml) : It's optionnal. - -For declaring a WebService endpoint, a new Deployment Descriptor has been introduced : webservices.xml. It can be used in an ejbjar or webapp file. - -You can notice that the beans/wsclient/build.xml do not use anymore the genic and wsgen tasks. They are automatically -applied on the server side. -Just make sure that the property jonas.service.ws.auto-wsgen.engaged (in jonas.properties) is set to 'true' (or commented). -Otherwise, needed ws artifacts will not be generated. - -Report to the documentation for more information. - -How to : ---------- - -1. Install the example - ant install - -2. start JOnAS - jonas start - -3. install the archives in JOnAS - jonas admin -a wsaccess.war - jonas admin -a wswarsample.war - jonas admin -a ws.ear - jonas admin -a wsclient.ear - -4. View the results in your browser - http://:/wsaccess/ - http://:/wswarsample/ - http://:/axis-ws/ssbEndpoint/WSBeanEndpointLocal?JWSDL (username:jonas password: jonas) - http://:/wsclient/ - - -Notes : --------- -If you have a proxy to access the internet, you have to add some properties in your JAVA_OPTS environment variable before you launch JOnAS. -export JAVA_OPTS=$JAVA_OPTS"-Dhttp.proxyHost= \ - -Dhttp.proxyPort= \ - -Dhttp.proxyUser= \ - -Dhttp.proxyPassword= \ - -Dhttp.nonProxyHosts= \ - -Dhttp.proxySet=true" - -You should see some Exceptions when using WsGen (Class not found with digester), don't be afraid, this is normal. \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/build.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/build.xml deleted file mode 100644 index 24ff942f93..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/build.xml +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/jonas-webservices.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/jonas-webservices.xml deleted file mode 100644 index a5d1d4dbc2..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/jonas-webservices.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - gen-axis-webapp.war - axis-ws - - - - My Web Services - - - ssbEndpoint - - /services1/webservice - - - - - - - - Stateless Session Bean Endpoint - - /services1/webservice - - - jonas-admin - - - - - - BASIC - - WS Example Authentication Area - - - - - - jonas-admin - - - - memrlm_1 - - - - WS Example Authentication Area - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/ssbEndpointMapping.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/ssbEndpointMapping.xml deleted file mode 100644 index 9414385f85..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/ssbEndpointMapping.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - org.objectweb.wssample.beans.ws - http://ws.beans.wssample.objectweb.org - - - org.objectweb.wssample.beans.ws.WSBeanEndpoint - ns:WSBeanEndpointLocal - ns:WSBeanEndpointLocalSoapBinding - - getCotes - getCotes - - int - ns:getCotesResponse - getCotesReturn - - - - sayHello - sayHello - - 0 - java.lang.String - - ns:sayHelloRequest - in0 - IN - - - - java.lang.String - ns:sayHelloResponse - sayHelloReturn - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/webservices.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/webservices.xml deleted file mode 100644 index d7a709de7c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/webservices.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - My Web Services - - My Web Services - META-INF/wsdl/ssbEndpoint.wsdl - META-INF/ssbEndpointMapping.xml - - ssbEndpoint - beanswssample:WSBeanEndpointLocal - org.objectweb.wssample.beans.ws.WSBeanEndpoint - - WSBeanEndpointSLL - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/wsdl/ssbEndpoint.wsdl b/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/wsdl/ssbEndpoint.wsdl deleted file mode 100644 index 6e9f48e67c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/etc/xml/wsdl/ssbEndpoint.wsdl +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpoint.java b/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpoint.java deleted file mode 100644 index 5de3cd68ea..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpoint.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.beans.ws; - -import java.rmi.Remote; -import java.rmi.RemoteException; - - -/** - * ServiceEndpoint interface - * - * @author Guillaume Sauthier - */ -public interface WSBeanEndpoint extends Remote { - - /** - * @param name name - * @return Returns "Hello " + name - * @throws RemoteException RemoteException - */ - String sayHello(String name) throws RemoteException; - - /** - * @return Returns integer - * @throws RemoteException RemoteException - */ - int getCotes() throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpointSLL.java b/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpointSLL.java deleted file mode 100644 index e8f525f78b..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/WSBeanEndpointSLL.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.beans.ws; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * - */ -public class WSBeanEndpointSLL implements SessionBean { - - /** - * logger - */ - private static Logger logger = null; - - /** - * EJB SessionContext - */ - private SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the SessionContext - * @param ctx SessionContext - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * ejbRemove - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbRemove - * @throws CreateException CreateException - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbPassivate - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbActivate - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // WSBeanEndpoint implementation - // ------------------------------------------------------------------ - - /** - * @param name name - * @return Returns "Hello " + name - */ - public String sayHello(String name) { - logger.log(BasicLevel.INFO, "sayHello(" + name + ") invokation."); - return "Hello " + name; - } - - /** - * @return Returns integer - */ - public int getCotes() { - logger.log(BasicLevel.INFO, "getCotes invokation"); - return 12; - } -} - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/jonas-wsearsample.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/jonas-wsearsample.xml deleted file mode 100644 index d2cd8045ea..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/jonas-wsearsample.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - WSBeanEndpointSLL - ejbs/WSBeanEndpointHome - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/wsearsample.xml b/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/wsearsample.xml deleted file mode 100644 index 2da15f2e97..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/ws/src/org/objectweb/wssample/beans/ws/wsearsample.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - Describe here the content of this file - wsearsample - - - - Describe here the session bean WSBeanEndpoint - wsearsample/WSBeanEndpointSLL - WSBeanEndpointSLL - - org.objectweb.wssample.beans.ws.WSBeanEndpoint - org.objectweb.wssample.beans.ws.WSBeanEndpointSLL - Stateless - Container - - - - - - - jonas-admin - - - jonas-admin - - WSBeanEndpointSLL - * - - - - - WSBeanEndpointSLL - * - - Supports - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/build.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/build.xml deleted file mode 100644 index 0654e50aaf..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/build.xml +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jetty.gif b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jonas.ico b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/jonas.ico deleted file mode 100644 index 108c5c21ede334f3b80d9a373f618c52efee7877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmYk0+e;H*7>A!No!^}E)J)5?xjf86PM6DLt#p~0TBfr!4;@qzEwhW!jFM`I;t@1F zR6^mYCV}Rmf@%a&EP}f0rvIgH+l?>$emu|1d-0Z5JCyimTLDH%kuqU23WR^}ksYlG z#}HrGZO>rhi+R49tp`y%je4v?Foq^Am|`*Rp~=y^G4V4ydH zr@gWK*s5XvQ6610%P>sVxBa;$t3kYVf#k@OAATO*VNm ztYzws{CiT(#*B@n*>>!cpBHpBE)vIIzc_U3l?Id8^NB zGZMs+Cga(?^~Dvz(qqzOsZ)klOV diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_jonas_logo.gif b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_logo.png b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/images/ow_logo.png deleted file mode 100644 index 60617270bf0c0d21c9f40e4f7c85ef5bfdbda548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11700 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 Ub;x?xOW1VGcfR$_MFao - - - EJB accessing Google WS API - - - - - - -
    - Jakarta Tomcat - Mortbay Jetty - JOnAS WebSite -
    - -
    - EJB accessing Google WebService API -
    - -
    -
    - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/search-google.jsp b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/search-google.jsp deleted file mode 100644 index 430c6ed9df..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/search-google.jsp +++ /dev/null @@ -1,84 +0,0 @@ -<%@page contentType="text/html"%> - -<%@page import="org.objectweb.wssample.beans.wsclient.*"%> -<%@page import="org.objectweb.wssample.genbean.google.*"%> - -<%@page import="javax.naming.*"%> - - - Using Google WebServices - - - - - -
    - Jakarta Tomcat - Mortbay Jetty - JOnAS WebSite -
    -<% - if (request.getParameter("search") == null) { -%> -
    - Google Search -
    - - -<% - } else { -%> -
    - Results -
    - -<% - } -%> - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/style/ow_jonas.css b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/style/ow_jonas.css deleted file mode 100644 index c3f068d9a5..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/web/style/ow_jonas.css +++ /dev/null @@ -1,119 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - -.bodywelcome -{ - background-color: #FFFFFF; - color: #000000; - background-image: url(../images/ow_logo.png); - background-repeat: no-repeat; - margin: 0; -} - - -img { - margin: 5px; - border:0; -} - -body -{ - background-color: #FFFFFF; - margin: 10px; - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - -} - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - margin-top : 40px; - margin-left : 200px; -} - - -div.titlepage { - margin-left: 200px; - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 22px; - line-height: 27px; - font-weight: bold; - border-color: #99C; - border-width: 0 0 4px 0; - border-style: none none solid none; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/application-wsclient.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/application-wsclient.xml deleted file mode 100644 index 90057b129e..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/application-wsclient.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - ear example secusb/servlet - earsample secusb/servlet - - - wsclient.jar - - - - - wsclient-front.war - wsclient - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/ejb-jar.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/ejb-jar.xml deleted file mode 100644 index f5f7045b38..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/ejb-jar.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - Describe here the content of this file - wsearsample - - - Describe here the session bean GoogleClientBean - googleClient/GoogleClientBeanSLL - GoogleClientBeanSLR - org.objectweb.wssample.beans.wsclient.GoogleClientBeanHome - org.objectweb.wssample.beans.wsclient.GoogleClientBean - - org.objectweb.wssample.beans.wsclient.GoogleClientBeanSLR - Stateless - Container - - googleKey - java.lang.String - j1LnsP9QFHLsT76x8dXU5HYjG1wxlgU3 - - - service/google - - org.objectweb.wssample.genbean.google.GoogleSearchService - META-INF/wsdl/GoogleSearch.wsdl - META-INF/googleMapping.xml - - google:GoogleSearchService - - - - - - - - GoogleClientBeanSLR - * - - Supports - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/googleMapping.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/googleMapping.xml deleted file mode 100644 index 8d075e6d81..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/googleMapping.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - org.objectweb.wssample.genbean.google - urn:GoogleSearch - - - org.objectweb.wssample.genbean.google.GoogleSearchResult - ns:GoogleSearchResult - complexType - - - org.objectweb.wssample.genbean.google.ResultElement - ns:ResultElement - complexType - - - org.objectweb.wssample.genbean.google.ResultElement[] - ns:ResultElementArray - complexType - - - org.objectweb.wssample.genbean.google.DirectoryCategory[] - ns:DirectoryCategoryArray - complexType - - - org.objectweb.wssample.genbean.google.DirectoryCategory - ns:DirectoryCategory - complexType - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/jonas-ejb-jar.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/jonas-ejb-jar.xml deleted file mode 100644 index bdc3f59bb8..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/jonas-ejb-jar.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - GoogleClientBeanSLR - ejbs/GoogleClientBeanHome - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/web-wsclient-front.xml b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/web-wsclient-front.xml deleted file mode 100644 index 91226811bb..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/web-wsclient-front.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - ejb/GoogleClient - Session - org.objectweb.wssample.beans.wsclient.GoogleClientBeanHome - org.objectweb.wssample.beans.wsclient.GoogleClientBean - wsclient.jar#GoogleClientBeanSLR - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/wsdl/GoogleSearch.wsdl b/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/wsdl/GoogleSearch.wsdl deleted file mode 100644 index 746ad2298c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/etc/xml/wsdl/GoogleSearch.wsdl +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBean.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBean.java deleted file mode 100644 index 69147d766f..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBean.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume Sauthier______________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.beans.wsclient; - -import java.rmi.RemoteException; - -import javax.ejb.EJBObject; - -import org.objectweb.wssample.genbean.google.GoogleSearchResult; - -/** - * GoogleClientBean local interface - */ -public interface GoogleClientBean extends EJBObject { - /** - * Execute a Query via Google WS api. - * - * @param query Query String - * @return Result of the Search - * - * @throws RemoteException When query went wrong - */ - GoogleSearchResult executeQuery(java.lang.String query) throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanHome.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanHome.java deleted file mode 100644 index beb77bc543..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanHome.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume Sauthier______________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.beans.wsclient; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.EJBHome; - -/** - * Local Home interface for the bean GoogleClientBean - */ -public interface GoogleClientBeanHome extends EJBHome { - - /** - * Create a new GoogleCLientBean local instance. - * - * @return a new GoogleCLientBean local instance. - * @throws CreateException When server cannot create the instance. - * @throws RemoteException When creation went wrong - */ - GoogleClientBean create() throws CreateException, RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanSLR.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanSLR.java deleted file mode 100644 index af36799001..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/beans/wsclient/GoogleClientBeanSLR.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer(s): Guillaume Sauthier______________. - * Contributor(s): ______________________________________. - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.beans.wsclient; - -import java.rmi.RemoteException; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -import org.objectweb.wssample.genbean.google.GoogleSearchResult; -import org.objectweb.wssample.genbean.google.GoogleSearchService; -import org.objectweb.wssample.genbean.google.GoogleSearchPort; - -import javax.xml.rpc.ServiceException; - -/** - * GoogleClientBean implementation. This bean use Google WebServices API - * to execute a given Query. - * - * @author Guillaume Sauthier - */ -public class GoogleClientBeanSLR implements SessionBean { - - /** - * logger - */ - private static Logger logger = null; - - /** - * Session Context - */ - private SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - /** - * Set the SessionContext - * @param ctx the SessionContext - */ - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - /** - * ejbRemove - */ - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbCreate - * @throws CreateException CreateException - */ - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbPassivate - */ - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * ejbActivate - */ - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // GoogleClientBean implementation - // ------------------------------------------------------------------ - - /** - * Execute a Query via Google WS api. - * - * @param query Query String - * @return query results - */ - public GoogleSearchResult executeQuery(java.lang.String query) { - - logger.log(BasicLevel.INFO, "Executing Google Query '" + query + "'"); - - try { - - // Get the InitialContext where retrieve Service - Context ctx = new InitialContext(); - - // Lookup the service - GoogleSearchService google = - (GoogleSearchService) ctx.lookup("java:comp/env/service/google"); - - // get Google Port - GoogleSearchPort search = google.getGoogleSearchPort(); - - // get Google Key - String key = (String) ctx.lookup("java:comp/env/googleKey"); - - // Execute the query - return search.doGoogleSearch(key, - query, - 0, // first index - 10, // maxresult - false, //filter - null, //restrict - false, // safesearch - null, //lr - null, //ie - null //oe - ); - } catch (NamingException ne) { - return null; - } catch (RemoteException re) { - return null; - } catch (ServiceException se) { - return null; - } - } -} - diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/DirectoryCategory.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/DirectoryCategory.java deleted file mode 100644 index 4509e3edfb..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/DirectoryCategory.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * DirectoryCategory.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC1 Sep 29, 2004 (08:29:40 EDT) WSDL2Java emitter. - */ - -package org.objectweb.wssample.genbean.google; - -public class DirectoryCategory implements java.io.Serializable { - private java.lang.String fullViewableName; - private java.lang.String specialEncoding; - - public DirectoryCategory() { - } - - public DirectoryCategory( - java.lang.String fullViewableName, - java.lang.String specialEncoding) { - this.fullViewableName = fullViewableName; - this.specialEncoding = specialEncoding; - } - - - /** - * Gets the fullViewableName value for this DirectoryCategory. - * - * @return fullViewableName - */ - public java.lang.String getFullViewableName() { - return fullViewableName; - } - - - /** - * Sets the fullViewableName value for this DirectoryCategory. - * - * @param fullViewableName - */ - public void setFullViewableName(java.lang.String fullViewableName) { - this.fullViewableName = fullViewableName; - } - - - /** - * Gets the specialEncoding value for this DirectoryCategory. - * - * @return specialEncoding - */ - public java.lang.String getSpecialEncoding() { - return specialEncoding; - } - - - /** - * Sets the specialEncoding value for this DirectoryCategory. - * - * @param specialEncoding - */ - public void setSpecialEncoding(java.lang.String specialEncoding) { - this.specialEncoding = specialEncoding; - } - - private java.lang.Object __equalsCalc = null; - public synchronized boolean equals(java.lang.Object obj) { - if (!(obj instanceof DirectoryCategory)) return false; - DirectoryCategory other = (DirectoryCategory) obj; - if (obj == null) return false; - if (this == obj) return true; - if (__equalsCalc != null) { - return (__equalsCalc == obj); - } - __equalsCalc = obj; - boolean _equals; - _equals = true && - ((this.fullViewableName==null && other.getFullViewableName()==null) || - (this.fullViewableName!=null && - this.fullViewableName.equals(other.getFullViewableName()))) && - ((this.specialEncoding==null && other.getSpecialEncoding()==null) || - (this.specialEncoding!=null && - this.specialEncoding.equals(other.getSpecialEncoding()))); - __equalsCalc = null; - return _equals; - } - - private boolean __hashCodeCalc = false; - public synchronized int hashCode() { - if (__hashCodeCalc) { - return 0; - } - __hashCodeCalc = true; - int _hashCode = 1; - if (getFullViewableName() != null) { - _hashCode += getFullViewableName().hashCode(); - } - if (getSpecialEncoding() != null) { - _hashCode += getSpecialEncoding().hashCode(); - } - __hashCodeCalc = false; - return _hashCode; - } - - // Type metadata - private static org.apache.axis.description.TypeDesc typeDesc = - new org.apache.axis.description.TypeDesc(DirectoryCategory.class, true); - - static { - typeDesc.setXmlType(new javax.xml.namespace.QName("urn:GoogleSearch", "DirectoryCategory")); - org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); - elemField.setFieldName("fullViewableName"); - elemField.setXmlName(new javax.xml.namespace.QName("", "fullViewableName")); - elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); - typeDesc.addFieldDesc(elemField); - elemField = new org.apache.axis.description.ElementDesc(); - elemField.setFieldName("specialEncoding"); - elemField.setXmlName(new javax.xml.namespace.QName("", "specialEncoding")); - elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); - typeDesc.addFieldDesc(elemField); - } - - /** - * Return type metadata object - */ - public static org.apache.axis.description.TypeDesc getTypeDesc() { - return typeDesc; - } - - /** - * Get Custom Serializer - */ - public static org.apache.axis.encoding.Serializer getSerializer( - java.lang.String mechType, - java.lang.Class _javaType, - javax.xml.namespace.QName _xmlType) { - return - new org.apache.axis.encoding.ser.BeanSerializer( - _javaType, _xmlType, typeDesc); - } - - /** - * Get Custom Deserializer - */ - public static org.apache.axis.encoding.Deserializer getDeserializer( - java.lang.String mechType, - java.lang.Class _javaType, - javax.xml.namespace.QName _xmlType) { - return - new org.apache.axis.encoding.ser.BeanDeserializer( - _javaType, _xmlType, typeDesc); - } - -} diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchPort.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchPort.java deleted file mode 100644 index 669b9e07ab..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchPort.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * GoogleSearchPort.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC1 Sep 29, 2004 (08:29:40 EDT) WSDL2Java emitter. - */ - -package org.objectweb.wssample.genbean.google; - -public interface GoogleSearchPort extends java.rmi.Remote { - public byte[] doGetCachedPage(java.lang.String key, java.lang.String url) throws java.rmi.RemoteException; - public java.lang.String doSpellingSuggestion(java.lang.String key, java.lang.String phrase) throws java.rmi.RemoteException; - public org.objectweb.wssample.genbean.google.GoogleSearchResult doGoogleSearch(java.lang.String key, java.lang.String q, int start, int maxResults, boolean filter, java.lang.String restrict, boolean safeSearch, java.lang.String lr, java.lang.String ie, java.lang.String oe) throws java.rmi.RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchResult.java b/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchResult.java deleted file mode 100644 index b6f843845f..0000000000 --- a/jonas_tests/examples/base/examples/webservices/beans/wsclient/src/org/objectweb/wssample/genbean/google/GoogleSearchResult.java +++ /dev/null @@ -1,450 +0,0 @@ -/** - * GoogleSearchResult.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC1 Sep 29, 2004 (08:29:40 EDT) WSDL2Java emitter. - */ - -package org.objectweb.wssample.genbean.google; - -public class GoogleSearchResult implements java.io.Serializable { - private boolean documentFiltering; - private java.lang.String searchComments; - private int estimatedTotalResultsCount; - private boolean estimateIsExact; - private org.objectweb.wssample.genbean.google.ResultElement[] resultElements; - private java.lang.String searchQuery; - private int startIndex; - private int endIndex; - private java.lang.String searchTips; - private org.objectweb.wssample.genbean.google.DirectoryCategory[] directoryCategories; - private double searchTime; - - public GoogleSearchResult() { - } - - public GoogleSearchResult( - boolean documentFiltering, - java.lang.String searchComments, - int estimatedTotalResultsCount, - boolean estimateIsExact, - org.objectweb.wssample.genbean.google.ResultElement[] resultElements, - java.lang.String searchQuery, - int startIndex, - int endIndex, - java.lang.String searchTips, - org.objectweb.wssample.genbean.google.DirectoryCategory[] directoryCategories, - double searchTime) { - this.documentFiltering = documentFiltering; - this.searchComments = searchComments; - this.estimatedTotalResultsCount = estimatedTotalResultsCount; - this.estimateIsExact = estimateIsExact; - this.resultElements = resultElements; - this.searchQuery = searchQuery; - this.startIndex = startIndex; - this.endIndex = endIndex; - this.searchTips = searchTips; - this.directoryCategories = directoryCategories; - this.searchTime = searchTime; - } - - - /** - * Gets the documentFiltering value for this GoogleSearchResult. - * - * @return documentFiltering - */ - public boolean isDocumentFiltering() { - return documentFiltering; - } - - - /** - * Sets the documentFiltering value for this GoogleSearchResult. - * - * @param documentFiltering - */ - public void setDocumentFiltering(boolean documentFiltering) { - this.documentFiltering = documentFiltering; - } - - - /** - * Gets the searchComments value for this GoogleSearchResult. - * - * @return searchComments - */ - public java.lang.String getSearchComments() { - return searchComments; - } - - - /** - * Sets the searchComments value for this GoogleSearchResult. - * - * @param searchComments - */ - public void setSearchComments(java.lang.String searchComments) { - this.searchComments = searchComments; - } - - - /** - * Gets the estimatedTotalResultsCount value for this GoogleSearchResult. - * - * @return estimatedTotalResultsCount - */ - public int getEstimatedTotalResultsCount() { - return estimatedTotalResultsCount; - } - - - /** - * Sets the estimatedTotalResultsCount value for this GoogleSearchResult. - * - * @param estimatedTotalResultsCount - */ - public void setEstimatedTotalResultsCount(int estimatedTotalResultsCount) { - this.estimatedTotalResultsCount = estimatedTotalResultsCount; - } - - - /** - * Gets the estimateIsExact value for this GoogleSearchResult. - * - * @return estimateIsExact - */ - public boolean isEstimateIsExact() { - return estimateIsExact; - } - - - /** - * Sets the estimateIsExact value for this GoogleSearchResult. - * - * @param estimateIsExact - */ - public void setEstimateIsExact(boolean estimateIsExact) { - this.estimateIsExact = estimateIsExact; - } - - - /** - * Gets the resultElements value for this GoogleSearchResult. - * - * @return resultElements - */ - public org.objectweb.wssample.genbean.google.ResultElement[] getResultElements() { - return resultElements; - } - - - /** - * Sets the resultElements value for this GoogleSearchResult. - * - * @param resultElements - */ - public void setResultElements(org.objectweb.wssample.genbean.google.ResultElement[] resultElements) { - this.resultElements = resultElements; - } - - - /** - * Gets the searchQuery value for this GoogleSearchResult. - * - * @return searchQuery - */ - public java.lang.String getSearchQuery() { - return searchQuery; - } - - - /** - * Sets the searchQuery value for this GoogleSearchResult. - * - * @param searchQuery - */ - public void setSearchQuery(java.lang.String searchQuery) { - this.searchQuery = searchQuery; - } - - - /** - * Gets the startIndex value for this GoogleSearchResult. - * - * @return startIndex - */ - public int getStartIndex() { - return startIndex; - } - - - /** - * Sets the startIndex value for this GoogleSearchResult. - * - * @param startIndex - */ - public void setStartIndex(int startIndex) { - this.startIndex = startIndex; - } - - - /** - * Gets the endIndex value for this GoogleSearchResult. - * - * @return endIndex - */ - public int getEndIndex() { - return endIndex; - } - - - /** - * Sets the endIndex value for this GoogleSearchResult. - * - * @param endIndex - */ - public void setEndIndex(int endIndex) { - this.endIndex = endIndex; - } - - - /** - * Gets the searchTips value for this GoogleSearchResult. - * - * @return searchTips - */ - public java.lang.String getSearchTips() { - return searchTips; - } - - - /** - * Sets the searchTips value for this GoogleSearchResult. - * - * @param searchTips - */ - public void setSearchTips(java.lang.String searchTips) { - this.searchTips = searchTips; - } - - - /** - * Gets the directoryCategories value for this GoogleSearchResult. - * - * @return directoryCategories - */ - public org.objectweb.wssample.genbean.google.DirectoryCategory[] getDirectoryCategories() { - return directoryCategories; - } - - - /** - * Sets the directoryCategories value for this GoogleSearchResult. - * - * @param directoryCategories - */ - public void setDirectoryCategories(org.objectweb.wssample.genbean.google.DirectoryCategory[] directoryCategories) { - this.directoryCategories = directoryCategories; - } - - - /** - * Gets the searchTime value for this GoogleSearchResult. - * - * @return searchTime - */ - public double getSearchTime() { - return searchTime; - } - - - /** - * Sets the searchTime value for this GoogleSearchResult. - * - * @param searchTime - */ - public void setSearchTime(double searchTime) { - this.searchTime = searchTime; - } - - private java.lang.Object __equalsCalc = null; - public synchronized boolean equals(java.lang.Object obj) { - if (!(obj instanceof GoogleSearchResult)) return false; - GoogleSearchResult other = (GoogleSearchResult) obj; - if (obj == null) return false; - if (this == obj) return true; - if (__equalsCalc != null) { - return (__equalsCalc == obj); - } - __equalsCalc = obj; - boolean _equals; - _equals = true && - this.documentFiltering == other.isDocumentFiltering() && - ((this.searchComments==null && other.getSearchComments()==null) || - (this.searchComments!=null && - this.searchComments.equals(other.getSearchComments()))) && - this.estimatedTotalResultsCount == other.getEstimatedTotalResultsCount() && - this.estimateIsExact == other.isEstimateIsExact() && - ((this.resultElements==null && other.getResultElements()==null) || - (this.resultElements!=null && - java.util.Arrays.equals(this.resultElements, other.getResultElements()))) && - ((this.searchQuery==null && other.getSearchQuery()==null) || - (this.searchQuery!=null && - this.searchQuery.equals(other.getSearchQuery()))) && - this.startIndex == other.getStartIndex() && - this.endIndex == other.getEndIndex() && - ((this.searchTips==null && other.getSearchTips()==null) || - (this.searchTips!=null && - this.searchTips.equals(other.getSearchTips()))) && - ((this.directoryCategories==null && other.getDirectoryCategories()==null) || - (this.directoryCategories!=null && - java.util.Arrays.equals(this.directoryCategories, other.getDirectoryCategories()))) && - this.searchTime == other.getSearchTime(); - __equalsCalc = null; - return _equals; - } - - private boolean __hashCodeCalc = false; - public synchronized int hashCode() { - if (__hashCodeCalc) { - return 0; - } - __hashCodeCalc = true; - int _hashCode = 1; - _hashCode += (isDocumentFiltering() ? Boolean.TRUE : Boolean.FALSE).hashCode(); - if (getSearchComments() != null) { - _hashCode += getSearchComments().hashCode(); - } - _hashCode += getEstimatedTotalResultsCount(); - _hashCode += (isEstimateIsExact() ? Boolean.TRUE : Boolean.FALSE).hashCode(); - if (getResultElements() != null) { - for (int i=0; - i - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/etc/xml/application.xml b/jonas_tests/examples/base/examples/webservices/etc/xml/application.xml deleted file mode 100644 index 37339099c2..0000000000 --- a/jonas_tests/examples/base/examples/webservices/etc/xml/application.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - WebServices Sample application - WebServices Sample application - - - ws.jar - - - - - wsEarSample.war - wsEarSample - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/build.xml b/jonas_tests/examples/base/examples/webservices/webs/webclient/build.xml deleted file mode 100644 index 71920cb415..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/build.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByJSP.jsp b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByJSP.jsp deleted file mode 100644 index 0909c82a8c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByJSP.jsp +++ /dev/null @@ -1,90 +0,0 @@ -<%@page contentType="text/html"%> - -<%@page import="org.objectweb.wssample.gen.google.*"%> -<%@page import="javax.naming.*"%> - - - Using Google WebServices - - - -
    - - Jakarta Tomcat - - Mortbay Jetty - JOnAS WebSite -
    - - -<% - if (request.getParameter("search") == null) { -%> -
    Google WebServices Access via JSP
    - - - -<% - } else { -%> -
    Results
    - -<% - } -%> - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByServlet.html b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByServlet.html deleted file mode 100644 index 49eb724189..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/googleByServlet.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Google WebServices Access via Servlet - - - - -
    - - Jakarta Tomcat - - Mortbay Jetty - JOnAS WebSite -
    - -
    Google WebServices Access via Servlet
    - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jetty.gif b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jonas.ico b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/jonas.ico deleted file mode 100644 index 108c5c21ede334f3b80d9a373f618c52efee7877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmYk0+e;H*7>A!No!^}E)J)5?xjf86PM6DLt#p~0TBfr!4;@qzEwhW!jFM`I;t@1F zR6^mYCV}Rmf@%a&EP}f0rvIgH+l?>$emu|1d-0Z5JCyimTLDH%kuqU23WR^}ksYlG z#}HrGZO>rhi+R49tp`y%je4v?Foq^Am|`*Rp~=y^G4V4ydH zr@gWK*s5XvQ6610%P>sVxBa;$t3kYVf#k@OAATO*VNm ztYzws{CiT(#*B@n*>>!cpBHpBE)vIIzc_U3l?Id8^NB zGZMs+Cga(?^~Dvz(qqzOsZ)klOV diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_jonas_logo.gif b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_logo.png b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/images/ow_logo.png deleted file mode 100644 index 60617270bf0c0d21c9f40e4f7c85ef5bfdbda548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11700 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 Ub;x?xOW1VGcfR$_MFao - - - WebServices Client from a WebApp - - - - -
    - - Jakarta Tomcat - - Mortbay Jetty - JOnAS WebSite -
    - -
    WebServices Client from a WebApp
    - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/style/ow_jonas.css b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/style/ow_jonas.css deleted file mode 100644 index c3f068d9a5..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/resources/style/ow_jonas.css +++ /dev/null @@ -1,119 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - -.bodywelcome -{ - background-color: #FFFFFF; - color: #000000; - background-image: url(../images/ow_logo.png); - background-repeat: no-repeat; - margin: 0; -} - - -img { - margin: 5px; - border:0; -} - -body -{ - background-color: #FFFFFF; - margin: 10px; - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - -} - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - margin-top : 40px; - margin-left : 200px; -} - - -div.titlepage { - margin-left: 200px; - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 22px; - line-height: 27px; - font-weight: bold; - border-color: #99C; - border-width: 0 0 4px 0; - border-style: none none solid none; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/googleMapping.xml b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/googleMapping.xml deleted file mode 100644 index 2cba3939ee..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/googleMapping.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - org.objectweb.wssample.gen.google - urn:GoogleSearch - - - org.objectweb.wssample.gen.google.GoogleSearchResult - ns:GoogleSearchResult - complexType - - - org.objectweb.wssample.gen.google.ResultElement - ns:ResultElement - complexType - - - org.objectweb.wssample.gen.google.ResultElement[] - ns:ResultElementArray - complexType - - - org.objectweb.wssample.gen.google.DirectoryCategory[] - ns:DirectoryCategoryArray - complexType - - - org.objectweb.wssample.gen.google.DirectoryCategory - ns:DirectoryCategory - complexType - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/jonas-web.xml b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/jonas-web.xml deleted file mode 100644 index c6d0fef833..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/jonas-web.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - service/google - - - org.objectweb.wssample.gen.google.GoogleSearchPort - ns:GoogleSearchPort - - javax.xml.rpc.session.maintain - true - - - javax.xml.rpc.session.maintain - true - - - - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/web.xml b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/web.xml deleted file mode 100644 index 5ea6ffa00a..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/web.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - WebApplication using Distant WebServices - - - GoogleClientServlet - org.objectweb.wssample.servlets.wsclient.WsClientServlet - - - - GoogleClientServlet - /googleByServlet.action - - - - index.html - index.jsp - - - - service/google - org.objectweb.wssample.gen.google.GoogleSearchService - WEB-INF/wsdl/GoogleSearch.wsdl - WEB-INF/googleMapping.xml - google:GoogleSearchService - - org.objectweb.wssample.gen.google.GoogleSearchPort - - - - - key - java.lang.String - j1LnsP9QFHLsT76x8dXU5HYjG1wxlgU3 - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/wsdl/GoogleSearch.wsdl b/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/wsdl/GoogleSearch.wsdl deleted file mode 100644 index c99d55a69d..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/etc/xml/wsdl/GoogleSearch.wsdl +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/DirectoryCategory.java b/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/DirectoryCategory.java deleted file mode 100644 index 6f87726864..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/DirectoryCategory.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * DirectoryCategory.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC2 Dec 15, 2004 (10:53:17 CET) WSDL2Java emitter. - */ - -package org.objectweb.wssample.gen.google; - -public class DirectoryCategory implements java.io.Serializable { - private java.lang.String fullViewableName; - private java.lang.String specialEncoding; - - public DirectoryCategory() { - } - - public DirectoryCategory( - java.lang.String fullViewableName, - java.lang.String specialEncoding) { - this.fullViewableName = fullViewableName; - this.specialEncoding = specialEncoding; - } - - - /** - * Gets the fullViewableName value for this DirectoryCategory. - * - * @return fullViewableName - */ - public java.lang.String getFullViewableName() { - return fullViewableName; - } - - - /** - * Sets the fullViewableName value for this DirectoryCategory. - * - * @param fullViewableName - */ - public void setFullViewableName(java.lang.String fullViewableName) { - this.fullViewableName = fullViewableName; - } - - - /** - * Gets the specialEncoding value for this DirectoryCategory. - * - * @return specialEncoding - */ - public java.lang.String getSpecialEncoding() { - return specialEncoding; - } - - - /** - * Sets the specialEncoding value for this DirectoryCategory. - * - * @param specialEncoding - */ - public void setSpecialEncoding(java.lang.String specialEncoding) { - this.specialEncoding = specialEncoding; - } - - private java.lang.Object __equalsCalc = null; - public synchronized boolean equals(java.lang.Object obj) { - if (!(obj instanceof DirectoryCategory)) return false; - DirectoryCategory other = (DirectoryCategory) obj; - if (obj == null) return false; - if (this == obj) return true; - if (__equalsCalc != null) { - return (__equalsCalc == obj); - } - __equalsCalc = obj; - boolean _equals; - _equals = true && - ((this.fullViewableName==null && other.getFullViewableName()==null) || - (this.fullViewableName!=null && - this.fullViewableName.equals(other.getFullViewableName()))) && - ((this.specialEncoding==null && other.getSpecialEncoding()==null) || - (this.specialEncoding!=null && - this.specialEncoding.equals(other.getSpecialEncoding()))); - __equalsCalc = null; - return _equals; - } - - private boolean __hashCodeCalc = false; - public synchronized int hashCode() { - if (__hashCodeCalc) { - return 0; - } - __hashCodeCalc = true; - int _hashCode = 1; - if (getFullViewableName() != null) { - _hashCode += getFullViewableName().hashCode(); - } - if (getSpecialEncoding() != null) { - _hashCode += getSpecialEncoding().hashCode(); - } - __hashCodeCalc = false; - return _hashCode; - } - - // Type metadata - private static org.apache.axis.description.TypeDesc typeDesc = - new org.apache.axis.description.TypeDesc(DirectoryCategory.class, true); - - static { - typeDesc.setXmlType(new javax.xml.namespace.QName("urn:GoogleSearch", "DirectoryCategory")); - org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); - elemField.setFieldName("fullViewableName"); - elemField.setXmlName(new javax.xml.namespace.QName("", "fullViewableName")); - elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); - typeDesc.addFieldDesc(elemField); - elemField = new org.apache.axis.description.ElementDesc(); - elemField.setFieldName("specialEncoding"); - elemField.setXmlName(new javax.xml.namespace.QName("", "specialEncoding")); - elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); - typeDesc.addFieldDesc(elemField); - } - - /** - * Return type metadata object - */ - public static org.apache.axis.description.TypeDesc getTypeDesc() { - return typeDesc; - } - - /** - * Get Custom Serializer - */ - public static org.apache.axis.encoding.Serializer getSerializer( - java.lang.String mechType, - java.lang.Class _javaType, - javax.xml.namespace.QName _xmlType) { - return - new org.apache.axis.encoding.ser.BeanSerializer( - _javaType, _xmlType, typeDesc); - } - - /** - * Get Custom Deserializer - */ - public static org.apache.axis.encoding.Deserializer getDeserializer( - java.lang.String mechType, - java.lang.Class _javaType, - javax.xml.namespace.QName _xmlType) { - return - new org.apache.axis.encoding.ser.BeanDeserializer( - _javaType, _xmlType, typeDesc); - } - -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchPort.java b/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchPort.java deleted file mode 100644 index 44c06c879c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchPort.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * GoogleSearchPort.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC2 Dec 15, 2004 (10:53:17 CET) WSDL2Java emitter. - */ - -package org.objectweb.wssample.gen.google; - -public interface GoogleSearchPort extends java.rmi.Remote { - public byte[] doGetCachedPage(java.lang.String key, java.lang.String url) throws java.rmi.RemoteException; - public java.lang.String doSpellingSuggestion(java.lang.String key, java.lang.String phrase) throws java.rmi.RemoteException; - public org.objectweb.wssample.gen.google.GoogleSearchResult doGoogleSearch(java.lang.String key, java.lang.String q, int start, int maxResults, boolean filter, java.lang.String restrict, boolean safeSearch, java.lang.String lr, java.lang.String ie, java.lang.String oe) throws java.rmi.RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchResult.java b/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchResult.java deleted file mode 100644 index 92d54ba100..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webclient/src/org/objectweb/wssample/gen/google/GoogleSearchResult.java +++ /dev/null @@ -1,450 +0,0 @@ -/** - * GoogleSearchResult.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC2 Dec 15, 2004 (10:53:17 CET) WSDL2Java emitter. - */ - -package org.objectweb.wssample.gen.google; - -public class GoogleSearchResult implements java.io.Serializable { - private boolean documentFiltering; - private java.lang.String searchComments; - private int estimatedTotalResultsCount; - private boolean estimateIsExact; - private org.objectweb.wssample.gen.google.ResultElement[] resultElements; - private java.lang.String searchQuery; - private int startIndex; - private int endIndex; - private java.lang.String searchTips; - private org.objectweb.wssample.gen.google.DirectoryCategory[] directoryCategories; - private double searchTime; - - public GoogleSearchResult() { - } - - public GoogleSearchResult( - boolean documentFiltering, - java.lang.String searchComments, - int estimatedTotalResultsCount, - boolean estimateIsExact, - org.objectweb.wssample.gen.google.ResultElement[] resultElements, - java.lang.String searchQuery, - int startIndex, - int endIndex, - java.lang.String searchTips, - org.objectweb.wssample.gen.google.DirectoryCategory[] directoryCategories, - double searchTime) { - this.documentFiltering = documentFiltering; - this.searchComments = searchComments; - this.estimatedTotalResultsCount = estimatedTotalResultsCount; - this.estimateIsExact = estimateIsExact; - this.resultElements = resultElements; - this.searchQuery = searchQuery; - this.startIndex = startIndex; - this.endIndex = endIndex; - this.searchTips = searchTips; - this.directoryCategories = directoryCategories; - this.searchTime = searchTime; - } - - - /** - * Gets the documentFiltering value for this GoogleSearchResult. - * - * @return documentFiltering - */ - public boolean isDocumentFiltering() { - return documentFiltering; - } - - - /** - * Sets the documentFiltering value for this GoogleSearchResult. - * - * @param documentFiltering - */ - public void setDocumentFiltering(boolean documentFiltering) { - this.documentFiltering = documentFiltering; - } - - - /** - * Gets the searchComments value for this GoogleSearchResult. - * - * @return searchComments - */ - public java.lang.String getSearchComments() { - return searchComments; - } - - - /** - * Sets the searchComments value for this GoogleSearchResult. - * - * @param searchComments - */ - public void setSearchComments(java.lang.String searchComments) { - this.searchComments = searchComments; - } - - - /** - * Gets the estimatedTotalResultsCount value for this GoogleSearchResult. - * - * @return estimatedTotalResultsCount - */ - public int getEstimatedTotalResultsCount() { - return estimatedTotalResultsCount; - } - - - /** - * Sets the estimatedTotalResultsCount value for this GoogleSearchResult. - * - * @param estimatedTotalResultsCount - */ - public void setEstimatedTotalResultsCount(int estimatedTotalResultsCount) { - this.estimatedTotalResultsCount = estimatedTotalResultsCount; - } - - - /** - * Gets the estimateIsExact value for this GoogleSearchResult. - * - * @return estimateIsExact - */ - public boolean isEstimateIsExact() { - return estimateIsExact; - } - - - /** - * Sets the estimateIsExact value for this GoogleSearchResult. - * - * @param estimateIsExact - */ - public void setEstimateIsExact(boolean estimateIsExact) { - this.estimateIsExact = estimateIsExact; - } - - - /** - * Gets the resultElements value for this GoogleSearchResult. - * - * @return resultElements - */ - public org.objectweb.wssample.gen.google.ResultElement[] getResultElements() { - return resultElements; - } - - - /** - * Sets the resultElements value for this GoogleSearchResult. - * - * @param resultElements - */ - public void setResultElements(org.objectweb.wssample.gen.google.ResultElement[] resultElements) { - this.resultElements = resultElements; - } - - - /** - * Gets the searchQuery value for this GoogleSearchResult. - * - * @return searchQuery - */ - public java.lang.String getSearchQuery() { - return searchQuery; - } - - - /** - * Sets the searchQuery value for this GoogleSearchResult. - * - * @param searchQuery - */ - public void setSearchQuery(java.lang.String searchQuery) { - this.searchQuery = searchQuery; - } - - - /** - * Gets the startIndex value for this GoogleSearchResult. - * - * @return startIndex - */ - public int getStartIndex() { - return startIndex; - } - - - /** - * Sets the startIndex value for this GoogleSearchResult. - * - * @param startIndex - */ - public void setStartIndex(int startIndex) { - this.startIndex = startIndex; - } - - - /** - * Gets the endIndex value for this GoogleSearchResult. - * - * @return endIndex - */ - public int getEndIndex() { - return endIndex; - } - - - /** - * Sets the endIndex value for this GoogleSearchResult. - * - * @param endIndex - */ - public void setEndIndex(int endIndex) { - this.endIndex = endIndex; - } - - - /** - * Gets the searchTips value for this GoogleSearchResult. - * - * @return searchTips - */ - public java.lang.String getSearchTips() { - return searchTips; - } - - - /** - * Sets the searchTips value for this GoogleSearchResult. - * - * @param searchTips - */ - public void setSearchTips(java.lang.String searchTips) { - this.searchTips = searchTips; - } - - - /** - * Gets the directoryCategories value for this GoogleSearchResult. - * - * @return directoryCategories - */ - public org.objectweb.wssample.gen.google.DirectoryCategory[] getDirectoryCategories() { - return directoryCategories; - } - - - /** - * Sets the directoryCategories value for this GoogleSearchResult. - * - * @param directoryCategories - */ - public void setDirectoryCategories(org.objectweb.wssample.gen.google.DirectoryCategory[] directoryCategories) { - this.directoryCategories = directoryCategories; - } - - - /** - * Gets the searchTime value for this GoogleSearchResult. - * - * @return searchTime - */ - public double getSearchTime() { - return searchTime; - } - - - /** - * Sets the searchTime value for this GoogleSearchResult. - * - * @param searchTime - */ - public void setSearchTime(double searchTime) { - this.searchTime = searchTime; - } - - private java.lang.Object __equalsCalc = null; - public synchronized boolean equals(java.lang.Object obj) { - if (!(obj instanceof GoogleSearchResult)) return false; - GoogleSearchResult other = (GoogleSearchResult) obj; - if (obj == null) return false; - if (this == obj) return true; - if (__equalsCalc != null) { - return (__equalsCalc == obj); - } - __equalsCalc = obj; - boolean _equals; - _equals = true && - this.documentFiltering == other.isDocumentFiltering() && - ((this.searchComments==null && other.getSearchComments()==null) || - (this.searchComments!=null && - this.searchComments.equals(other.getSearchComments()))) && - this.estimatedTotalResultsCount == other.getEstimatedTotalResultsCount() && - this.estimateIsExact == other.isEstimateIsExact() && - ((this.resultElements==null && other.getResultElements()==null) || - (this.resultElements!=null && - java.util.Arrays.equals(this.resultElements, other.getResultElements()))) && - ((this.searchQuery==null && other.getSearchQuery()==null) || - (this.searchQuery!=null && - this.searchQuery.equals(other.getSearchQuery()))) && - this.startIndex == other.getStartIndex() && - this.endIndex == other.getEndIndex() && - ((this.searchTips==null && other.getSearchTips()==null) || - (this.searchTips!=null && - this.searchTips.equals(other.getSearchTips()))) && - ((this.directoryCategories==null && other.getDirectoryCategories()==null) || - (this.directoryCategories!=null && - java.util.Arrays.equals(this.directoryCategories, other.getDirectoryCategories()))) && - this.searchTime == other.getSearchTime(); - __equalsCalc = null; - return _equals; - } - - private boolean __hashCodeCalc = false; - public synchronized int hashCode() { - if (__hashCodeCalc) { - return 0; - } - __hashCodeCalc = true; - int _hashCode = 1; - _hashCode += (isDocumentFiltering() ? Boolean.TRUE : Boolean.FALSE).hashCode(); - if (getSearchComments() != null) { - _hashCode += getSearchComments().hashCode(); - } - _hashCode += getEstimatedTotalResultsCount(); - _hashCode += (isEstimateIsExact() ? Boolean.TRUE : Boolean.FALSE).hashCode(); - if (getResultElements() != null) { - for (int i=0; - iGET and POST - * methods. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException default servlet exception thrown - */ - protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException { - - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - // output your page here - out.println(""); - out.println(""); - out.println("Google WebService Response"); - out.println(""); - out.println(""); - out.println(""); - - out.println("
    "); - out.println("\"Jakarta"); - out.println("\"Mortbay"); - out.println("\"JOnAS"); - out.println("
    "); - - // Get and Display results - try { - // Get the Context - Context ctx = new InitialContext(); - - String key = (String) ctx.lookup("java:comp/env/key"); - - // Lookup the binded service - Object s = ctx.lookup("java:comp/env/service/google"); - GoogleSearchService google = (GoogleSearchService) s; - - // get the Port object - GoogleSearchPort search = google.getGoogleSearchPort(); - - // execute the query - GoogleSearchResult result = search.doGoogleSearch(key, request.getParameter("search"), 0, // first - // index - 10, // maxresult - false, //filter - null, //restrict - false, // safesearch - null, //lr - null, //ie - null //oe - ); - - out.println("
    Results
    "); - out.println("
    "); - - // Display the results - ResultElement[] elements = result.getResultElements(); - for (int i = 0; i < elements.length; i++) { - out.println("" + elements[i].getTitle() + "
    "); - out.println(elements[i].getSummary() + "

    "); - } - out.println("
    "); - - } catch (NamingException ne) { - out.println("
    Error when looking for service-ref
    "); - ne.printStackTrace(out); - } catch (ServiceException se) { - out.println("
    Error when performign service-ref
    "); - se.printStackTrace(out); - } - - out.println(""); - out.println(""); - out.close(); - } - - /** - * Handles the HTTP GET method. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException default servlet exception thrown - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Handles the HTTP POST method. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException default servlet exception thrown - */ - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException { - processRequest(request, response); - } - - /** - * @return Returns a short description of the servlet. - */ - public String getServletInfo() { - return "Servlet which is client of the WebServices API of Google"; - } - -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/README b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/README deleted file mode 100644 index 91034c89bc..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/README +++ /dev/null @@ -1,40 +0,0 @@ -webendpoint sample README ----------------------------- - -This sample show you how to use secured endpoint : -* how to configure the endpoint for Authentication -* how to configure your endpoint for Encryption - -You can directly use the authentication endpoint, but -some preliminary steps are required for the Encryption, -as it use a keystore and because Encryption needs BouncyCastle -JCE provider that is not packaged inside JOnAS (please -read the following). - -IMPORTANT : ------------ -If you want to use advanced capabilities of WSS4J, in particular Encryption, ... -You have to download BouncyCastle JCE Provider. -You can download latest version here : -http://www.bouncycastle.org/latest_releases.html -Choose the bcprov-jdk**-XXX.jar according to the JDK version you're running JOnAS on. -Place that downloaded jar in JONAS_ROOT/lib/commons/jonas/ws-security. -BouncyCastle provider will be available for the next JOnAS reboot. - -Please take the time to read the following web page : -http://www.bouncycastle.org/specifications.html -Especially the patent statement. - -How to create a keystore ? ---------------------------- - -Here are the steps : -1. create the keystore with an single certificate : -$> $JAVA_HOME/bin/keytool -genkey -alias jonas-ws -keyalg RSA -keystore $JONAS_BASE/conf/my-wssample-keystore - -2. You will be prompted for the keystore password, type "security" (without the quote) -3. Enter the certificate information (Name, Company, ...) -4. Reuse the SAME password ("security") for the certificate (just press enter) - -This will create a keystore in JONAS_BASE/conf with 1 certificate for the user 'jonas-ws'. -This keystore is used by WSS4Jhandler. diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/build.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/build.xml deleted file mode 100644 index 7057c6c29c..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/build.xml +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/credentials.properties b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/credentials.properties deleted file mode 100644 index e438706e37..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/credentials.properties +++ /dev/null @@ -1,2 +0,0 @@ -# Couple user/password -jonas SHA:NaLG+uYfgHeqth+qQBlyKr8FCTw= \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/sample-crypto.properties b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/sample-crypto.properties deleted file mode 100644 index ce0c0908e9..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/resources/sample-crypto.properties +++ /dev/null @@ -1,8 +0,0 @@ -org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin -org.apache.ws.security.crypto.merlin.keystore.type=pkcs12 -org.apache.ws.security.crypto.merlin.keystore.password=security -org.apache.ws.security.crypto.merlin.keystore.alias=jonas-ws -org.apache.ws.security.crypto.merlin.alias.password=security -# keystore filname -# Must be available from ClassLoader -org.apache.ws.security.crypto.merlin.file=my-wssample-keystore diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jetty.gif b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jetty.gif deleted file mode 100644 index 01f44a87f6801b200f142513d0d02b12cea0fb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6649 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 A+yDRo diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jonas.ico b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/jonas.ico deleted file mode 100644 index 108c5c21ede334f3b80d9a373f618c52efee7877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmYk0+e;H*7>A!No!^}E)J)5?xjf86PM6DLt#p~0TBfr!4;@qzEwhW!jFM`I;t@1F zR6^mYCV}Rmf@%a&EP}f0rvIgH+l?>$emu|1d-0Z5JCyimTLDH%kuqU23WR^}ksYlG z#}HrGZO>rhi+R49tp`y%je4v?Foq^Am|`*Rp~=y^G4V4ydH zr@gWK*s5XvQ6610%P>sVxBa;$t3kYVf#k@OAATO*VNm ztYzws{CiT(#*B@n*>>!cpBHpBE)vIIzc_U3l?Id8^NB zGZMs+Cga(?^~Dvz(qqzOsZ)klOV diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_jonas_logo.gif b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_jonas_logo.gif deleted file mode 100644 index 1b56943a721f82a8cb81776030567772265433f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4162 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 diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_logo.png b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/images/ow_logo.png deleted file mode 100644 index 60617270bf0c0d21c9f40e4f7c85ef5bfdbda548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11700 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 Ub;x?xOW1VGcfR$_MFao - - - - WebServices Endpoint Deployment in WebApp - - - - -
    - - Jakarta Tomcat - - Mortbay Jetty - JOnAS WebSite -
    - -
    WebServices Endpoint Deployment in WebApp
    - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/jaxrpcTest.jsp b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/jaxrpcTest.jsp deleted file mode 100644 index c816922d9f..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/jaxrpcTest.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%@page contentType="text/html"%> - - - - Prepare Local JaxRpc WebService Call - - - - -
    - - Jakarta Tomcat - - Mortbay Jetty - JOnAS WebSite -
    - -
    Prepare Local JaxRpc WebService Call
    - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/style/ow_jonas.css b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/style/ow_jonas.css deleted file mode 100644 index c3f068d9a5..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/web/style/ow_jonas.css +++ /dev/null @@ -1,119 +0,0 @@ -/* - Context Root css. based on css from http://jonas.objectweb.org - XHTML by Florent BENOIT -*/ - -.bodywelcome -{ - background-color: #FFFFFF; - color: #000000; - background-image: url(../images/ow_logo.png); - background-repeat: no-repeat; - margin: 0; -} - - -img { - margin: 5px; - border:0; -} - -body -{ - background-color: #FFFFFF; - margin: 10px; - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; - -} - -div.logos { - top: 5px; - width: 99%; - text-align: right; -} - - -div.links { - margin-top : 40px; - margin-left : 200px; -} - - -div.titlepage { - margin-left: 200px; - color: #E06611; - font-family: Arial, Helvetica, sans-serif; - font-size: 22px; - line-height: 27px; - font-weight: bold; - border-color: #99C; - border-width: 0 0 4px 0; - border-style: none none solid none; -} - - -div.footer { - margin-top : 50px; - color: #FFFFFF; - font-size: 8pt; - text-align: center; -} - - -/*HTML elements */ - - - -ul, ol, dl -{ - color: black; - font-family: Arial,Helvetica, sans-serif; - font-size: 12px; - line-height: 16px; - font-weight: normal; -} - -li -{ - color: black; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; - font-weight: normal; - margin: 10px 0px 5px 0px; - -} -a -{ - color: #3F3975; - background-color: transparent; - text-decoration: underline; -} - -a:visited -{ - color: #9898CB; - background-color: transparent; - text-decoration: underline; -} - -a:hover -{ - color: #E06611; - background-color: transparent; - text-decoration: underline; -} - - -a:active -{ - color: #FFFFFF; - background-color: #E06611; - text-decoration: underline; -} - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/clientMapping.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/clientMapping.xml deleted file mode 100644 index 6ad4979e7a..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/clientMapping.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - org.objectweb.wssample.gen.jaxrpc - http://ws.servlets.wssample.objectweb.org - - \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jaxrpcEndpointMapping.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jaxrpcEndpointMapping.xml deleted file mode 100644 index 143af0b1db..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jaxrpcEndpointMapping.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - org.objectweb.wssample.servlets.ws - http://ws.servlets.wssample.objectweb.org - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jonas-webservices.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jonas-webservices.xml deleted file mode 100644 index c69b1dda8b..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/jonas-webservices.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - MyWebService - - - jaxrpcEndpoint1 - /endpoints/jaxrpc - - - encryptedEndpoint - /endpoints/encrypted - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/web.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/web.xml deleted file mode 100644 index fb7140f49b..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/web.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - WebServices packaged in WebApp Sample - - JaxRpcEndpoint1 Servlet - JaxRpcEndpoint1 - org.objectweb.wssample.servlets.ws.JaxRpcEndpoint - - - EncryptedJaxRpcEndpoint Servlet - EncryptedJaxRpcEndpoint - org.objectweb.wssample.servlets.ws.JaxRpcEndpoint - - - - JaxRpcEndpoint Test Servlet - JaxRpcEndpointTest - org.objectweb.wssample.servlets.wsclient.JOnASJaxRpcClientServlet - - - - JaxRpcEndpointTest - /jaxrpcTest.do - - - - service/jaxrpc - org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterfaceService - WEB-INF/wsdl/jaxrpcEndpoint.wsdl - WEB-INF/clientMapping.xml - - org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface - wswarsample.war#jaxrpcEndpoint1 - - - - WSS4JHandler-UsernameToken - org.apache.ws.security.handler.WSS4JHandler - - - - - - - - action - UsernameToken - - - - - flow - request-only - - - - - - passwordCallbackClass - org.objectweb.wssample.security.ServerSideCallbackHandler - - - - - passwordType - PasswordDigest - - - - - - deployment - client - - - - - - JaxRpcEndpoint1 - - - - - service/crypted-jaxrpc - org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterfaceService - WEB-INF/wsdl/jaxrpcEndpoint.wsdl - WEB-INF/clientMapping.xml - - org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface - wswarsample.war#encryptedEndpoint - - - - WSS4JHandler-Encryption - org.apache.ws.security.handler.WSS4JHandler - - - - - - - - - action - UsernameToken Encrypt - - - - - flow - request-only - - - - - - passwordCallbackClass - org.objectweb.wssample.security.ServerSideCallbackHandler - - - - - passwordType - PasswordDigest - - - - - - deployment - client - - - - - - mustUnderstand - true - - - - addUTElement - Nonce Created - - - - - - - encryptionPropFile - sample-crypto.properties - - - - encryptionKeyIdentifier - X509KeyIdentifier - - - - encryptionUser - jonas-ws - - - - encryptionParts - {Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}UsernameToken - - - - - - EncryptedJaxRpcEndpoint - - - - - - - Protected Area - - /jaxrpcTest.do - - DELETE - GET - POST - PUT - - - - ws-security - - - - - - BASIC - Example Basic Authentication Area - - - - - ws-security - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/webservices.xml b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/webservices.xml deleted file mode 100644 index c3bf0b44b4..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/webservices.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - MyWebServices - - MyWebService - WEB-INF/wsdl/jaxrpcEndpoint.wsdl - WEB-INF/jaxrpcEndpointMapping.xml - - jaxrpcEndpoint1 - servletswssample:JaxRpcEndpoint1 - org.objectweb.wssample.servlets.ws.JaxRpcEndpointInterface - - JaxRpcEndpoint1 - - - - WSS4JHandler - - org.apache.ws.security.handler.WSS4JHandler - - - - - - - action - UsernameToken - - - - flow - request-only - - - - - passwordCallbackClass - org.objectweb.wssample.security.ServerSideCallbackHandler - - - - deployment - server - - - - - - encryptedEndpoint - ws:EncryptedJaxRpcEndpoint - org.objectweb.wssample.servlets.ws.JaxRpcEndpointInterface - - EncryptedJaxRpcEndpoint - - - - WSS4JHandler - - org.apache.ws.security.handler.WSS4JHandler - - - - - - - action - UsernameToken Encrypt - - - - flow - request-only - - - - - passwordCallbackClass - org.objectweb.wssample.security.ServerSideCallbackHandler - - - - deployment - server - - - - - decryptionPropFile - sample-crypto.properties - - - - mustUnderstand - true - - - - encryptionUser - jonas-ws - - - - encryptionParts - {Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}UsernameToken - - - - encryptionKeyIdentifier - DirectReference - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/wsdl/jaxrpcEndpoint.wsdl b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/wsdl/jaxrpcEndpoint.wsdl deleted file mode 100644 index 68966684a7..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/etc/xml/wsdl/jaxrpcEndpoint.wsdl +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterface.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterface.java deleted file mode 100644 index 4f4ea1a6bf..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterface.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * JaxRpcEndpointInterface.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC2 Dec 15, 2004 (10:53:17 CET) WSDL2Java emitter. - */ - -package org.objectweb.wssample.gen.jaxrpc; - -public interface JaxRpcEndpointInterface extends java.rmi.Remote { - public java.lang.String sayHello(java.lang.String in0) throws java.rmi.RemoteException; - public int getCotes() throws java.rmi.RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterfaceService.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterfaceService.java deleted file mode 100644 index 2c077c7234..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/gen/jaxrpc/JaxRpcEndpointInterfaceService.java +++ /dev/null @@ -1,20 +0,0 @@ -/** - * JaxRpcEndpointInterfaceService.java - * - * This file was auto-generated from WSDL - * by the Apache Axis 1.2RC2 Dec 15, 2004 (10:53:17 CET) WSDL2Java emitter. - */ - -package org.objectweb.wssample.gen.jaxrpc; - -public interface JaxRpcEndpointInterfaceService extends javax.xml.rpc.Service { - public java.lang.String getJaxRpcEndpoint1Address(); - - public org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface getJaxRpcEndpoint1() throws javax.xml.rpc.ServiceException; - - public org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface getJaxRpcEndpoint1(java.net.URL portAddress) throws javax.xml.rpc.ServiceException; - - public org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface getEncryptedJaxRpcEndpoint() throws javax.xml.rpc.ServiceException; - - public org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface getEncryptedJaxRpcEndpoint(java.net.URL portAddress) throws javax.xml.rpc.ServiceException; -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/security/ServerSideCallbackHandler.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/security/ServerSideCallbackHandler.java deleted file mode 100644 index c093be3114..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/security/ServerSideCallbackHandler.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.security; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -import javax.security.auth.callback.Callback; -import javax.security.auth.callback.CallbackHandler; -import javax.security.auth.callback.UnsupportedCallbackException; - -import org.apache.ws.security.WSPasswordCallback; - -/** - * WSS4J Sample CallbackHandler. It is intended to be used from a JOnAS server (servlet/ejb client & JAX-RPC/SSB endpoint). - * It will get the 'memrlm_1' instance and try to get the needed password from that JResource. - * - * @author Guillaume Sauthier - */ -public class ServerSideCallbackHandler implements CallbackHandler { - - /** - * encryptionUser value (used to access keystore - look in crypto.properties) - */ - private static final String ENCRYPTION_USER = "jonas-ws"; - - /** - * encryptionUser password : password used to access keystore - */ - private static final String ENCRYPTION_PASSWORD = "security"; - - /** - * File name which contains credentials - */ - private static final String CREDENTIALS_FILE_NAME = "credentials.properties"; - - /** - * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[]) - */ - public void handle(Callback[] callbacks) throws IOException, - UnsupportedCallbackException { - for (int i = 0; i < callbacks.length; i++) { - if (callbacks[i] instanceof WSPasswordCallback) { - WSPasswordCallback pc = (WSPasswordCallback) callbacks[i]; - // set the password given a username - - if (!ENCRYPTION_USER.equals(pc.getIdentifer())) { - // Get hash password for this identifier - InputStream is = getClass().getResourceAsStream("/" + CREDENTIALS_FILE_NAME); - Properties props = new Properties(); - props.load(is); - String password = props.getProperty(pc.getIdentifer()); - // Set the password - pc.setPassword(password); - } else { - // this is the ecryption username - // we must return the correct password (stored in crypto.properties) - pc.setPassword(ENCRYPTION_PASSWORD); - } - - } else { - throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback"); - } - } - } - -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpoint.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpoint.java deleted file mode 100644 index 6477f88047..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpoint.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.servlets.ws; - -import org.ow2.jonas.lib.util.Log; - -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * Service implementation of JaxRpcEndpointInterface. This class is a JaxRpc - * endpoint. It is declared in the web.xml. And it will run inside the web - * container. - * - * Notice that a default class constructor is REQUIRED. - * Notice that JaxRpcEndpoint does not implements JaxRpcEndpointInterface - * This is not a requirement. - * - * This JAXRPC service endpoint class may implements javax.xml.rpc.server.ServiceLifecycle - * interface. - * - * @see org.objectweb.wssample.servlets.ws.JaxRpcEndpointInterface - * - * @author Guillaume Sauthier - */ -public class JaxRpcEndpoint { - - /** - * return value of getCotes() - */ - private static final int GET_COTES_VALUE = 12; - - /** - * logger - */ - private static Logger logger = Log.getLogger("org.ow2.jonas.ws"); - - /** - * default constructor needed for JaxRpc Service Endpoint. - */ - public JaxRpcEndpoint() { - } - - /** - * @param name String to append to "Hello " - * @return Returns "Hello " + name - */ - public String sayHello(String name) { - logger.log(BasicLevel.INFO, "sayHello(" + name + ") invoked."); - return "Hello " + name; - } - - /** - * @return Returns an arbitrary integer - */ - public int getCotes() { - logger.log(BasicLevel.INFO, "getCotes() invoked."); - return GET_COTES_VALUE; - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpointInterface.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpointInterface.java deleted file mode 100644 index 44bca25b38..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/ws/JaxRpcEndpointInterface.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.servlets.ws; - -import java.rmi.Remote; -import java.rmi.RemoteException; - -/** - * The Service interface. - * Notice that it extends Remote and all methods are throwing RemoteException - * @see org.objectweb.wssample.servlets.ws.JaxRpcEndpoint - * @author Guillaume Sauthier - */ -public interface JaxRpcEndpointInterface extends Remote { - - /** - * @param name String to append to "Hello " - * @return Returns "Hello " + name - * @throws RemoteException required because of the Remote interface - */ - String sayHello(String name) throws RemoteException; - - /** - * @return Returns an arbitrary integer - * @throws RemoteException required because of the Remote interface - */ - int getCotes() throws RemoteException; -} diff --git a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/wsclient/JOnASJaxRpcClientServlet.java b/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/wsclient/JOnASJaxRpcClientServlet.java deleted file mode 100644 index 7ffc78f225..0000000000 --- a/jonas_tests/examples/base/examples/webservices/webs/webendpoint/src/org/objectweb/wssample/servlets/wsclient/JOnASJaxRpcClientServlet.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.wssample.servlets.wsclient; - -import java.io.IOException; -import java.io.PrintWriter; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.rpc.ServiceException; -import javax.xml.rpc.Stub; - -import org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterface; -import org.objectweb.wssample.gen.jaxrpc.JaxRpcEndpointInterfaceService; - -/** - * @author Guillaume Sauthier - */ -public class JOnASJaxRpcClientServlet extends HttpServlet { - - /** - * Initializes the servlet. - * @param config ServletConfig - * @throws ServletException thrown by super.init(config); - */ - public void init(ServletConfig config) throws ServletException { - super.init(config); - } - - /** - * Destroys the servlet. - */ - public void destroy() { - - } - - /** - * Processes requests for both HTTP GET and POST - * methods. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException servlet exception thrown - */ - protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException { - response.setContentType("text/html"); - PrintWriter out = response.getWriter(); - - out.println(""); - out.println(""); - out.println("JOnAS JaxRpc WebService Test Page"); - out.println(""); - out.println(""); - out.println(""); - - out.println("
    "); - out.println("\"Jakarta"); - out.println("\"Mortbay"); - out.println("\"JOnAS"); - out.println("
    "); - - // do we need to use the encrypted endpoint or not ? - boolean encrypt = false; - if ("true".equalsIgnoreCase(request.getParameter("encrypt"))) { - encrypt = true; - } - - try { - - // Get the service instance - //--------------------------------------------- - Context ctx = new InitialContext(); - JaxRpcEndpointInterfaceService service = null; - JaxRpcEndpointInterface port = null; - - // We can use the same service because the 2 ws use the same interface - // Get the port where execute methods - - if (encrypt) { - service = (JaxRpcEndpointInterfaceService) ctx.lookup("java:comp/env/service/crypted-jaxrpc"); - //--------------------------------------------- - port = service.getEncryptedJaxRpcEndpoint(); - } else { - service = (JaxRpcEndpointInterfaceService) ctx.lookup("java:comp/env/service/jaxrpc"); - //--------------------------------------------- - port = service.getJaxRpcEndpoint1(); - } - - // Use the context username for WSS4JHandler - ((Stub) port)._setProperty("user", request.getUserPrincipal().getName()); - - // Execute Methods : - String hello = port.sayHello(request.getParameter("name")); - int cotes = port.getCotes(); - - if (encrypt) { - out.println("
    Results With Encryption
    "); - } else { - out.println("
    Results
    "); - } - out.println("
    "); - - // Display results : - out.println("Working with URL : " + ((Stub) port)._getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY) - + "
    "); - out.println("result of sayHello(name) method :" + hello + "
    "); - out.println("result of getCotes() method :" + cotes + "
    "); - - out.println("
    "); - } catch (ServiceException se) { - out.println("
    Something goes wrong when calling the WebService
    "); - se.printStackTrace(out); - out.println("
    "); - } catch (NamingException ne) { - out.println("
    Exception while retrieving InitialContext
    "); - ne.printStackTrace(out); - out.println("
    "); - } - - out.println(""); - out.println(""); - - out.close(); - } - - /** - * Handles the HTTP GET method. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException default servlet exception thrown - */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - processRequest(request, response); - } - - /** - * Handles the HTTP POST method. - * - * @param request servlet request - * @param response servlet response - * - * @throws ServletException default servlet exception thrown - * @throws IOException default servlet exception thrown - */ - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, - IOException { - processRequest(request, response); - } - - /** - * @return Returns a short description of the servlet. - */ - public String getServletInfo() { - return "Short description"; - } - -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/xdoclet/ClientCustomer.java b/jonas_tests/examples/base/examples/xdoclet/ClientCustomer.java deleted file mode 100644 index f930ff7b21..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/ClientCustomer.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package xdoclet; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.io.IOException; -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Iterator; -import java.util.Hashtable; -import java.util.Properties; -import javax.ejb.FinderException; -import javax.ejb.RemoveException; -import javax.transaction.UserTransaction; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import xdoclet.CustomerHomeRemote; -import xdoclet.CustomerRemote; - -/** - * Sample for entity beans CMP2 xdoclet - */ - -public class ClientCustomer { - - private static UserTransaction utx = null; - - private static void PrintAllCustomerAndPhones(CustomerHomeRemote h) { - Iterator alist; - CustomerRemote customer; - String phone; - try { - utx.begin(); // faster if made inside a Tx - alist = h.findAllCustomers().iterator(); - while (alist.hasNext()) { - customer = (CustomerRemote) alist.next(); - System.out.println("Customer name is :" + customer.getLastName() + " " + customer.getFirstName()); - Iterator phonelist = customer.getPhoneList().iterator(); - while (phonelist.hasNext()) { - phone = (String) phonelist.next(); - System.out.println("Phone number is: " + phone); - } - } - utx.commit(); - } catch (Exception e) { - System.err.println("Exception getting all Customer phone list: " + e); - System.exit(2); - } - } - - public static void main(String[] args) { - - String beanName = "CustomerBeanHome"; - - // get JNDI initial context - Context initialContext = null; - try { - initialContext = new InitialContext(); - } catch (Exception e) { - System.err.println("Cannot get initial context for JNDI: " + e); - System.exit(2); - } - - // We want to start transactions from client: get UserTransaction - System.out.println("Getting a UserTransaction object from JNDI"); - try { - - // Comment the following lines if you want to use a David Client: - utx = (UserTransaction) initialContext.lookup("javax.transaction.UserTransaction"); - - } catch (Exception e) { - System.err.println("Cannot lookup UserTransaction: " + e); - System.exit(2); - } - - // Connecting to Home thru JNDI - System.out.println("Connecting to the CustomerHome"); - CustomerHomeRemote home = null; - try { - home = (CustomerHomeRemote) PortableRemoteObject.narrow(initialContext.lookup(beanName), - CustomerHomeRemote.class); - } catch (Exception e) { - System.err.println("Cannot lookup " + beanName + ": " + e); - System.exit(2); - } - - // List existing customer - System.out.println("Getting the list of existing Customer in database"); - PrintAllCustomerAndPhones(home); - - // Create a first customer - System.out.println("Creating a new customer in database"); - CustomerRemote c1 = null; - try { - c1 = home.create(new Integer(1), new Name("jerome", "camilleri")); - } catch (Exception e) { - System.err.println("Cannot create Customer: " + e); - System.exit(2); - } - - // Add phone number - try { - c1.addPhoneNumber("0476254717", (byte) 0); - c1.addPhoneNumber("0625785511", (byte) 0); - } catch (Exception e) { - System.out.println("Problem during add phone number"); - e.printStackTrace(System.out); - } - // List existing customer - System.out.println("Getting the list of customer with Phone number in database"); - PrintAllCustomerAndPhones(home); - - // Delete Account2 - System.out.println("Removing Customer and phone previously created in database"); - try { - c1.removePhoneNumber((byte) 0); - c1.remove(); - } catch (Exception e) { - System.err.println("exception during remove: " + e); - System.exit(2); - } - - // Exit program - System.out.println("ClientCustomer terminated"); - } - -} - diff --git a/jonas_tests/examples/base/examples/xdoclet/CustomerBean.java b/jonas_tests/examples/base/examples/xdoclet/CustomerBean.java deleted file mode 100644 index 91756f811b..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/CustomerBean.java +++ /dev/null @@ -1,262 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package xdoclet; - -import java.rmi.RemoteException; -import javax.ejb.EntityBean; -import javax.ejb.EntityContext; -import javax.ejb.ObjectNotFoundException; -import javax.ejb.RemoveException; -import javax.ejb.CreateException; -import javax.ejb.EJBException; -import java.util.Date; -import java.util.Collection; -import java.util.Iterator; -import java.util.Vector; -import javax.naming.InitialContext; -import javax.naming.NamingException; -/** - * CustomerBean is an entity bean with "container managed persistence version 2". - * The state of an instance is stored into a relational database. - * - * @ejb.bean - * name="CustomerBean" - * description="Deployment descriptor for the CustomerBean bean with CMP2 JOnAS example" - * type="CMP" - * view-type="both" - * primkey-field="id" - * jndi-name="CustomerBeanHome" - * cmp-version="2.x" - * reentrant="false" - * @ejb.home - * remote-class="xdoclet.CustomerHomeRemote" - * local-class="xdoclet.CustomerHomeLocal" - * @ejb.interface - * remote-class="xdoclet.CustomerRemote" - * local-class="xdoclet.CustomerLocal" - * @ejb:pk - * class="java.lang.Integer" - * @ejb.ejb-ref - * ejb-name="PhoneBean" - * view-type="local" - * ref-name="ejb/PhoneHomeLocal" - * - * @jonas.jdbc-mapping - * jdbc-table-name = "MyCustomer" - * - * @ejb:finder - * signature= "java.util.Collection findByName(java.lang.String lastName, java.lang.String firstName)" - * query ="SELECT OBJECT(c) FROM CustomerBean c WHERE c.lastName LIKE ?1 AND c.firstName LIKE ?2" - * @ejb:finder - * signature= "java.util.Collection findAllCustomers()" - * query ="SELECT OBJECT(c) FROM CustomerBean AS c" - * - * @jonas.session-timeout - * session-timeout="60" - * @ejb:transaction - * type="Required" - */ -public abstract class CustomerBean implements EntityBean { - - // Keep the reference on the EntityContext - protected EntityContext entityContext; - - /** - * EJBCREATE - * @return pk primary key set to null - * - * @ejb.create-method - */ - public Integer ejbCreate(Integer id, Name name) - throws CreateException { - setLastName(name.getLastName()); - setFirstName(name.getFirstName()); - - // Init object state - this.setId(id); - return null; - } - - public void ejbPostCreate(Integer id, Name name) {} - - // business methods - /** - * @ejb.interface-method - * - **/ - public Name getName() { - Name name = new Name(getLastName(),getFirstName()); - return name; - } - /** - * @ejb.interface-method - **/ - public void setName(Name name) { - setLastName(name.getLastName()); - setFirstName(name.getFirstName()); - } - - - /** - * @ejb.interface-method - **/ - public void addPhoneNumber(String number, byte type) throws NamingException, CreateException { - InitialContext jndiEnc = new InitialContext(); - PhoneHomeLocal phoneHomeL = (PhoneHomeLocal) (jndiEnc.lookup("java:comp/env/ejb/PhoneHomeLocal")); - - PhoneLocal phone = phoneHomeL.create(number, type); - Collection phoneNumbers = this.getPhoneNumber(); - phoneNumbers.add(phone); - } - - /** - * @ejb.interface-method - **/ - public void removePhoneNumber(byte typeToRemove) { - Collection phoneNumbers = this.getPhoneNumber(); - Iterator iterator = phoneNumbers.iterator(); - - while (iterator.hasNext()) { - PhoneLocal phone = (PhoneLocal) iterator.next(); - if (phone.getType() == typeToRemove) { - phoneNumbers.remove(phone); - try { - phone.remove(); - } catch (Exception e) { - System.out.println("Problem during removing phone"); - } - } - - } - } - - /** - * @ejb.interface-method - **/ - public void updatePhoneNumber(String number, byte typeToUpdate) { - Collection phoneNumbers = this.getPhoneNumber(); - Iterator iterator = phoneNumbers.iterator(); - while (iterator.hasNext()) { - PhoneLocal phone = (PhoneLocal) iterator.next(); - if (phone.getType() == typeToUpdate) { - phone.setNumber(number); - break; - } - } - } - - /** - * @ejb.interface-method - **/ - public Vector getPhoneList() { - - Vector vv = new Vector(); - Collection phoneNumbers = this.getPhoneNumber(); - - Iterator iterator = phoneNumbers.iterator(); - while (iterator.hasNext()) { - PhoneLocal phone = (PhoneLocal) iterator.next(); - String ss = "Type=" + phone.getType() + " Number=" + phone.getNumber(); - vv.add(ss); - } - return vv; - } - - // persistent relationships - /** - * @ejb.relation - * name="CUSTOMER-PHONE" - * role-name="PHONE-has-CUSTOMER" - * target-ejb="PhoneBean" - * target-role-name="CUSTOMER-has-PHONE" - * - * @jonas.field-mapping - * foreign-key-jdbc-name="CUSTOMER_FK_PHONE" - * key-jdbc-name="CustomerId" - **/ - public abstract Collection getPhoneNumber( ); - public abstract void setPhoneNumber(Collection phones); - - // abstract accessor methods - /** - * @ejb.persistent-field - * @ejb.interface-method - * @jonas.cmp-field-jdbc-mapping - * field-name="id" - * jdbc-field-name="CustomerId" - */ - public abstract Integer getId(); - - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract void setId(Integer id); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract String getLastName( ); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract void setLastName(String lname); - - /** - * @ejb.persistence - * column-name="CustomerFirstName" - * jdbc-type="VARCHAR" - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract String getFirstName( ); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract void setFirstName(String fname); - - // standard call back methods - - public void ejbActivate() {} - public void ejbLoad() {} - public void ejbPassivate() {} - public void ejbRemove() throws RemoveException {} - - public void ejbStore() {} - - - public void setEntityContext(EntityContext ctx) { - - // Keep the entity context in object - entityContext = ctx; - } - - public void unsetEntityContext() { - entityContext = null; - } - -} diff --git a/jonas_tests/examples/base/examples/xdoclet/Name.java b/jonas_tests/examples/base/examples/xdoclet/Name.java deleted file mode 100644 index 4faa7469ca..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/Name.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package xdoclet; - -public class Name implements java.io.Serializable { - - private String lastName; - - private String firstName; - - public Name(String lname, String fname) { - lastName = lname; - firstName = fname; - } - - public String getLastName() { - return lastName; - } - - public String getFirstName() { - return firstName; - } -} \ No newline at end of file diff --git a/jonas_tests/examples/base/examples/xdoclet/PhoneBean.java b/jonas_tests/examples/base/examples/xdoclet/PhoneBean.java deleted file mode 100644 index 66c64b9aed..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/PhoneBean.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2004 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package xdoclet; - -import javax.ejb.EntityContext; -import java.util.Date; -import javax.naming.InitialContext; -import javax.naming.NamingException; -/** - * PhoneBean is an entity bean with "container managed persistence version 2". - * The state of an instance is stored into a relational database. - * - * @ejb.bean - * name="PhoneBean" - * description="Deployment descriptor for the PhoneBean bean with CMP2 JOnAS example" - * type="CMP" - * view-type="local" - * jndi-name="PhoneBeanHome" - * cmp-version="2.x" - * reentrant="false" - * @ejb.home - * local-class="xdoclet.PhoneHomeLocal" - * @ejb.interface - * local-class="xdoclet.PhoneLocal" - * @ejb:pk - * class="java.lang.Object" - * @jonas.jdbc-mapping - * automatic-pk-field-name="pkphone" - * @ejb:finder - * signature= "java.util.Collection findAllPhones()" - * query ="SELECT OBJECT(o) FROM PhoneBean o" - * @jonas.session-timeout - * session-timeout="60" - * @ejb:transaction type="Required" - */ - -public abstract class PhoneBean implements javax.ejb.EntityBean { - - /** - * EJBCREATE - * @return pk primary key set to null - * - * @ejb.create-method - */ - public Object ejbCreate( String number, byte type) throws javax.ejb.CreateException { - setNumber(number); - setType(type); - return null; - } - - public void ejbPostCreate(String number, byte type) { - System.out.println("PhoneBean ejbPostCreate number= "+number); - } - - - - /** - * @ejb.persistent-field - * @ejb.interface-method - * @jonas.cmp-field-jdbc-mapping - * field-name="number" - * jdbc-field-name="PhoneNumber" - */ - public abstract String getNumber(); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract void setNumber(String number); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract byte getType(); - /** - * @ejb.persistent-field - * @ejb.interface-method - */ - public abstract void setType(byte type); - - // standard call back methods - - public void setEntityContext(EntityContext ec){} - public void unsetEntityContext(){} - public void ejbLoad(){} - public void ejbStore(){} - public void ejbActivate(){} - public void ejbPassivate(){} - public void ejbRemove() throws javax.ejb.RemoveException{} - -} diff --git a/jonas_tests/examples/base/examples/xdoclet/README b/jonas_tests/examples/base/examples/xdoclet/README deleted file mode 100644 index ece9448495..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/README +++ /dev/null @@ -1,131 +0,0 @@ -Copyright (C) BULL S.A. 1998-2002 - -Please read How to configure and use xdoclet for JOnAS at : -http://jonas.objectweb.org/current/doc/howto/howtoXdoclet.html - -Entity beans "Customer-Phone" for xdoclet ------------------------------------------ -CustomerBean entity bean with CMP2 persistance and relationship (CustomerBean--1------------n-->PhoneBean) -PhoneBean entity bean with CMP2 persitance - -this directory contains initially only this files : -build.xml : the build which contain target for xdoclet and jonas compilation -build.properties : properties for jonas target -CustomerBean.java : Bean class with xdoclet tag -PhoneBean.java : Bean class with xdoclet tag -Name.java : Utilities class -ClientCustomer.java : Client -README : - -Generated this example with xdoclet: ------------------------------------ -Using default target (install) ; - -You should have this return : -ejbdoclet: -[ejbdoclet] Dec 15, 2004 2:39:04 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Generating Remote interface for 'xdoclet.CustomerBean'. -[ejbdoclet] Dec 15, 2004 2:39:04 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Generating Local interface for 'xdoclet.CustomerBean'. -[ejbdoclet] Generating Local interface for 'xdoclet.PhoneBean'. -[ejbdoclet] Dec 15, 2004 2:39:04 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Generating Home interface for 'xdoclet.CustomerBean'. -[ejbdoclet] Dec 15, 2004 2:39:04 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Generating Local Home interface for 'xdoclet.CustomerBean'. -[ejbdoclet] Generating Local Home interface for 'xdoclet.PhoneBean'. -[ejbdoclet] Dec 15, 2004 2:39:05 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Generating EJB deployment descriptor (ejb-jar.xml). -[ejbdoclet] Dec 15, 2004 2:39:05 PM xdoclet.XDocletMain start -[ejbdoclet] INFO: Running -[ejbdoclet] Dec 15, 2004 2:39:05 PM xdoclet.TemplateSubTask engineStarted -[ejbdoclet] INFO: Generating output 'jonas-ejb-jar.xml' using template file 'jar:file:/home/camillej/MyJonas/JONAS_4_2/lib/examples/xdoclet-objectweb-module-1.2.2.jar!/xdoclet/modules/objectweb/jonas/ejb/resources/jonas.xdt'. - -compile: - [javac] Compiling 10 source files to /home/camillej/MyJonas/JONAS_4_2/examples/classes - -jonasejbjar: - [ejbjar] building xdoclet.jar with 11 files - [genic] GenIC for JOnAS 4.2.2: 'CustomerBean', 'PhoneBean' generation ... - [genic] Stubs and Skels successfully generated for rmi/jrmp - -install: - [copy] Copying 1 file to /home/camillej/MyJonas/JONAS_4_2/ejbjars - - -9 files must be generated into the current directory : - CustomerRemote.java - CustomerLocal.java - CustomerHomeRemote.java - PhoneLocal.java - PhoneHomeLocal.java - PhoneBean.java - CustomerHomeLocal.java - jonas-ejb-jar.xml - ej-jar.xml - -Compiling this example: ------------------------ -ant install - - -Running this example: ---------------------- -Your database access should be configured: a properties files defining a - Datasource object should be defined in $JONAS_BASE/conf (e.g. InstantDB1.properties), - and the property jonas.service.dbm.datasources of the jonas.properties file should - be set to the name of this datasource description file (e.g. InstantDB1). See JOnAS - documentation for more details. - -1) Run an EJB Server to make beans available to clients: - -on UNIX or Windows - - jonas start - -2) Load xdoclet.jar if you have not added it in the ejb vice descriptors list: - - jonas admin -a $JONAS_BASE/ejbjars/xdoclet.jar - -You should see something like this when the bean is loaded : - ... -2003-03-07 13:50:24,112 : JContainer.addBean : CustomerBean is loaded and using rdb.mysql -2003-03-07 13:50:24,112 : JContainer.addBean : CustomerBean available -2003-03-07 13:50:24,622 : JContainer.addBean : PhoneBean is loaded and using rdb.mysql -2003-03-07 13:50:24,622 : JContainer.addBean : PhoneBean available -2003-03-07 13:50:24,662 : ServiceManager.startServices : ejb service started - -3) Run the client program: - -on UNIX: - jclient -cp $JONAS_BASE/ejbjars/xdoclet.jar xdoclet.ClientCustomer - -On Windows: - jclient -cp "%JONAS_BASE%\ejbjars\xdoclet.jar" xdoclet.ClientCustomer - -In fact, the "-cp" option is not useful here, because classes are found in the CLASSPATH. - -You should see something like this when the client is run : - -Getting a UserTransaction object from JNDI -Connecting to the CustomerHome -Getting the list of existing Customer in database -Creating a new customer in database -PhoneBean ejbPostCreate number= 0476254717ID = 0 -PhoneBean ejbPostCreate number= 0625785511ID = 1 -Getting the list of customer with Phone number in database -Customer name is :jerome camilleri -Phone number is:Type=0 Number=0476254717 -Phone number is:Type=0 Number=0625785511 -Removing Customer and phone previously created in database -ClientCustomer terminated - -At the end of the test all bean are removed. - -4) Stop the jonas server - jonas stop - diff --git a/jonas_tests/examples/base/examples/xdoclet/build.xml b/jonas_tests/examples/base/examples/xdoclet/build.xml deleted file mode 100644 index ce8157ca2a..0000000000 --- a/jonas_tests/examples/base/examples/xdoclet/build.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-1.2.2.jar b/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-1.2.2.jar deleted file mode 100644 index a5a2764441976e2e0d8a26bdb3ece84e87ac4146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146897 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
    DX;PHi0DO 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 YmMXN02m_nQVz6F1urkR4B0AXr0jZ=AVE_OC diff --git a/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-ejb-module-1.2.2.jar b/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-ejb-module-1.2.2.jar deleted file mode 100644 index 8692fd538eaa435e43d9bc6fdb70beff1f3ccbaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211057 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�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 diff --git a/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-objectweb-module-1.2.2.jar b/jonas_tests/examples/base/examples/xdoclet/lib/xdoclet-objectweb-module-1.2.2.jar deleted file mode 100644 index ce9f35e76b7e774fe888420c2629996e7d85fbcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279234 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�y6o%Hs5}i$V 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/alarm/C_alarm.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/alarm/C_alarm.java deleted file mode 100644 index eb193ecdf7..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/alarm/C_alarm.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.alarm; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.AuthorizationRequiredException; -import com.meterware.httpunit.TableCell; -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebLink; -import com.meterware.httpunit.WebResponse; -import com.meterware.httpunit.WebTable; - -/** - * Define a class to test the Alarm example - * Test authentication, generate alarm and process alarms - * @author Florent Benoit - */ -public class C_alarm extends JExampleTestCase { - - - /** - * URL of the alarm index - */ - private static final String URL_ALARM = "/alarm/secured/list.jsp"; - - /** - * URL of the list of alarms - */ - private static final String URL_ALARM_LIST = "/alarm/secured/setfilter.jsp?profil=all-I"; - - /** - * URL of the alarm generator - */ - private static final String URL_ALARM_GENERATE = "/alarm/generator.html"; - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_alarm(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_alarm.class); - } - - /** - * Setup need for these tests - * alarm is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useEar("alarm"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_alarm(String s) { - super(s, URL_ALARM); - } - - - /** - * Try to log in without authentication - * @throws Exception if an error occurs - */ - public void testTryWithoutAuth() throws Exception { - try { - WebResponse wr = wc.getResponse(url); - fail("Alarm is not protected"); - } catch (AuthorizationRequiredException e) { - ; - } - } - - /** - * Try to authenticate with a bad login/password - * @throws Exception if an error occurs - */ - public void testTryWithBadAuth() throws Exception { - try { - wc.setAuthorization("bad", "bad"); - WebResponse wr = wc.getResponse(url); - fail("Alarm is not protected"); - } catch (AuthorizationRequiredException e) { - ; - } - } - - /** - * Try to authenticate with a right login/password (jetty) - * @throws Exception if an error occurs - */ - public void testTryWithJettyAuth() throws Exception { - try { - wc.setAuthorization("jetty", "jetty"); - WebResponse wr = wc.getResponse(url); - } catch (AuthorizationRequiredException e) { - fail("Alarm don't accept l/p jetty/jetty"); - } - } - - /** - * Try to authenticate with a right login/password (tomcat) - * @throws Exception if an error occurs - */ - public void testTryWithTomcatAuth() throws Exception { - try { - wc.setAuthorization("tomcat", "tomcat"); - WebResponse wr = wc.getResponse(url); - } catch (AuthorizationRequiredException e) { - fail("Alarm don't accept l/p tomcat/tomcat"); - } - } - /** - * Try to generate alarms. One of each kind of alarm (severe, informative, warning) - * @throws Exception if an error occurs - */ - public void testGenerateAlarms() throws Exception { - try { - wc.setAuthorization("tomcat", "tomcat"); - WebResponse wr = wc.getResponse(getAbsoluteUrl(URL_ALARM_GENERATE)); - - WebForm[] webForms = wr.getForms(); - - WebForm webForm = webForms[0]; - assertNotNull("There must be a form in the html page", webForm); - - String[] levels = new String[] {"S", "W", "I"}; - - for (int i = 0; i < 3; i++) { - webForm.setParameter("message", "Automatic test" + i); - webForm.setParameter("device", "aut" + i); - webForm.setParameter("level", levels[i]); - WebResponse wFormRes = webForm.submit(); - String txt = wFormRes.getText(); - if (txt.indexOf("Message sent") == -1) { - fail("The alarm was not generated : " + txt); - } - } - - } catch (AuthorizationRequiredException e) { - fail("Alarm don't accept l/p tomcat/tomcat"); - } - } - - /** - * Try to process all alarms which were generated - * @throws Exception if an error occurs - */ - public void testProcessAlarms() throws Exception { - try { - // Wait a little if the previous alarms were not generated - Thread.sleep(1000); - - wc.setAuthorization("tomcat", "tomcat"); - WebResponse wr = wc.getResponse(getAbsoluteUrl(URL_ALARM_LIST)); - WebTable[] webTables = wr.getTables(); - - WebTable wTable = webTables[1]; - assertNotNull("There must be a table in the html page", wTable); - - int rows = wTable.getRowCount(); - int cols = wTable.getColumnCount(); - - assertEquals("The tables must have 6 columns", 6, cols); - - // For each alarm - for (int i = 1; i < rows; i++) { - TableCell tableCell = wTable.getTableCell(i, cols - 1); - assertNotNull("There must be a cell in this row", tableCell); - WebLink[] links = tableCell.getLinks(); - assertNotNull("There must have links in this cell", links); - for (int l = 0; l < links.length; l++) { - links[l].click(); - } - } - - //Now check alarms are empty (rows = 1) - wr = wc.getResponse(getAbsoluteUrl(URL_ALARM_LIST)); - webTables = wr.getTables(); - wTable = webTables[1]; - rows = wTable.getRowCount(); - assertEquals(1, rows); - - } catch (AuthorizationRequiredException e) { - fail("Authentication failed"); - } - } -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/cmp2/C_cmp2.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/cmp2/C_cmp2.java deleted file mode 100644 index 92d3d813fe..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/cmp2/C_cmp2.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.cmp2; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the cmp2 example - * Test the three servlet are ok - * @author Philippe Coq - */ -public class C_cmp2 extends JExampleTestCase { - - /** - * URL of the cmp2 page - */ - private static final String URL_EARCMP2 = "/cmp2"; - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_cmp2(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_cmp2.class); - } - - /** - * Setup need for these tests - * cmp2 is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useEar("cmp2"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_cmp2(String s) { - super(s, URL_EARCMP2); - } - - /** - * Test the examples showing 1-to-1 relationship - * @throws Exception if an error occurs - */ - public void testFirstServlet() throws Exception { - - WebResponse wr = wc.getResponse(url); - - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[0]; - assertNotNull("There must be a form in the html page", webForm); - WebResponse wFormRes = webForm.submit(); - String txt = wFormRes.getText(); - if (txt.indexOf("Servlet is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - - - /** - * Test the examples showing n-to-1 1-to-n relationship - * @throws Exception if an error occurs - */ - public void testSecondServlet() throws Exception { - - WebResponse wr = wc.getResponse(url); - - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[1]; - assertNotNull("There must be a form in the html page", webForm); - WebResponse wFormRes = webForm.submit(); - String txt = wFormRes.getText(); - if (txt.indexOf("Servlet is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - - /** - * Test the examples using EJB-QL - * @throws Exception if an error occurs - */ - public void testThirdServlet() throws Exception { - - WebResponse wr = wc.getResponse(url); - - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[2]; - assertNotNull("There must be a form in the html page", webForm); - WebResponse wFormRes = webForm.submit(); - String txt = wFormRes.getText(); - if (txt.indexOf("Servlet is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/earsample/C_earsample.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/earsample/C_earsample.java deleted file mode 100644 index 2f11320a9d..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/earsample/C_earsample.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.earsample; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.AuthorizationRequiredException; -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the Alarm example - * Test authentication, and check the sample is ok - * @author Florent Benoit - */ -public class C_earsample extends JExampleTestCase { - - /** - * URL of the earsample page - */ - private static final String URL_EARSAMPLE = "/earsample/secured/Op"; - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_earsample(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_earsample.class); - } - - /** - * Setup need for these tests - * earsample is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useEar("earsample"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_earsample(String s) { - super(s, URL_EARSAMPLE); - } - - /** - * Try to log in without authentication - * @throws Exception if an error occurs - */ - public void testTryWithoutAuth() throws Exception { - try { - WebResponse wr = wc.getResponse(url); - fail("earsample is not protected"); - } catch (AuthorizationRequiredException e) { - ; - } - } - - /** - * Try to authenticate with a bad login/password - * @throws Exception if an error occurs - */ - public void testTryWithBadAuth() throws Exception { - try { - wc.setAuthorization("bad", "bad"); - WebResponse wr = wc.getResponse(url); - fail("earsample is not protected"); - } catch (AuthorizationRequiredException e) { - ; - } - } - - /** - * Try to authenticate with a right login/password (jetty) - * @throws Exception if an error occurs - */ - public void testTryWithJettyAuth() throws Exception { - try { - wc.setAuthorization("jetty", "jetty"); - WebResponse wr = wc.getResponse(url); - } catch (AuthorizationRequiredException e) { - fail("earsample don't accept l/p jetty/jetty"); - } - } - - /** - * Try to authenticate with a right login/password (tomcat) - * @throws Exception if an error occurs - */ - public void testTryWithTomcatAuth() throws Exception { - try { - wc.setAuthorization("tomcat", "tomcat"); - WebResponse wr = wc.getResponse(url); - } catch (AuthorizationRequiredException e) { - fail("earsample don't accept l/p tomcat/tomcat"); - } - } - - /** - * Check if the sample is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsSampleOk() throws Exception { - try { - wc.setAuthorization("tomcat", "tomcat"); - WebResponse wr = wc.getResponse(url); - String txt = wr.getText(); - - if (txt.indexOf("Sample is OK.") == -1) { - fail("The example was not ok : " + txt); - } - - } catch (AuthorizationRequiredException e) { - fail("Authentication failed"); - } - } - - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/eb/C_eb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/eb/C_eb.java deleted file mode 100644 index 54fcd48d72..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/eb/C_eb.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.eb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the eb example - * Test the client of eb example (Check if the text is "ClientAccount terminated") - * - test case of AccountImplHome - * - test case of AccountExplHome - * @author Florent Benoit - */ -public class C_eb extends JExampleTestCase { - - - /** - * Class of the eb.client - */ - private static final String CLIENT_CLASS = "eb.ClientAccount"; - - /** - * Text to check - */ - private static final String CLIENT_OK_TXT = "ClientAccount terminated" ; - - /** - * Impl EJB1.x - */ - private static final String ACC_IMPL = "AccountImplHome"; - - /** - * Impl EJB2.x - */ - private static final String ACC_IMPL2 = "AccountImpl2Home"; - /** - * Expl - */ - private static final String ACC_EXPL = "AccountExplHome"; - - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_eb(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_eb.class); - } - - /** - * Setup need for these tests - * eb is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("eb"); - } - - /** - * Step to do at the end - * unload eb - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("eb"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_eb(String s) { - super(s); - } - - /** - * Test the return text of the example eb - * by using a specific mode (Impl or Expl) - * @param mode Can be AccountImplHome or AccountExplHome - */ - private void doTestEb(String mode) { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - // Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - // Call Method - callMainMethod(CLIENT_CLASS, "eb" , new String[] {mode}); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - // Check the text - if (txt.indexOf(CLIENT_OK_TXT) == -1) { - fail("The text that the client sent was not " + CLIENT_OK_TXT); - } - } - - - /** - * Try to launch the client of the example eb - * with the case AccountImpl2 - * @throws Exception if an error occurs - */ - public void testClientAccountImpl2() throws Exception { - doTestEb(ACC_IMPL2); - } - /** - * Try to launch the client of the example eb - * with the case AccountImpl - * @throws Exception if an error occurs - */ - public void testClientAccountImpl() throws Exception { - doTestEb(ACC_IMPL); - } - - /** - * Try to launch the client of the example eb - * with the case AccountExpl - * @throws Exception if an error occurs - */ - public void testClientAccountExpl() throws Exception { - doTestEb(ACC_EXPL); - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/hibernate/C_hibernate.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/hibernate/C_hibernate.java deleted file mode 100644 index 6999edaca2..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/hibernate/C_hibernate.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Guillaume Sauthier - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.hibernate; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the Alarm example - * Test authentication, and check the sample is ok - * @author Florent Benoit - */ -public class C_hibernate extends JExampleTestCase { - - /** - * URL of the hibernate page - */ - private static final String URL_HIBERNATE = "/hibernate-sample/testHibernate"; - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_hibernate(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_hibernate.class); - } - - /** - * Setup need for these tests - * earsample is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useWar("hibernate-sample"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_hibernate(String s) { - super(s, URL_HIBERNATE); - } - - /** - * Try to log in without authentication - * @throws Exception if an error occurs - */ - public void testAccessHibernatePage() throws Exception { - WebResponse wr = wc.getResponse(url); - String page = wr.getText(); - - // check "Servlet is OK" - if (page.indexOf("Servlet is OK") == -1) { - fail("Missing 'Servlet is OK' ending text. Check on " + this.url); - } - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/j2eemanagement/C_j2eemanagement.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/j2eemanagement/C_j2eemanagement.java deleted file mode 100644 index 3cd2fbfcee..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/j2eemanagement/C_j2eemanagement.java +++ /dev/null @@ -1,109 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2006 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.j2eemanagement; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the j2eemanagement example - * Test authentication, and check the sample is ok - * @author Adriana Danes - */ -public class C_j2eemanagement extends JExampleTestCase { - - /** - * URL of the earsample page - */ - private static final String URL_J2EEMANAGEMENT_DOMAIN = "/j2eemanagement/mgmt?domainName=jonas"; - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_j2eemanagement(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_j2eemanagement.class); - } - - /** - * Setup need for these tests - * earsample is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useEar("j2eemanagement"); - } - - /** - * Constructor with a specified name - * @param s name - */ - public C_j2eemanagement(String s) { - // Need to use login/password because the web pages we want to access are secured - super(s, URL_J2EEMANAGEMENT_DOMAIN, "jonas", "jonas"); - } - - /** - * Check if the sample is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsSampleOk() throws Exception { - WebResponse wr = wc.getResponse(url); - String txt = wr.getText(); - - if (txt.indexOf("Application is OK") == -1) { - fail("The example was not ok : " + txt); - } - } - - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/lb/C_lb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/lb/C_lb.java deleted file mode 100644 index 1c850f0ce4..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/lb/C_lb.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.lb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the lb example - * Test the client of lb example (Check if the text is "PASS when checking all accounts") - * @author Florent Benoit - */ -public class C_lb extends JExampleTestCase { - - - /** - * Class of the lb.client - */ - private static final String CLIENT_CLASS = "lb.Client"; - - /** - * Text to check - */ - private static final String CLIENTOP_OK_TXT = "PASS when checking all accounts" ; - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_lb(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_lb.class); - } - - /** - * Setup need for these tests - * lb is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("lb"); - } - - /** - * Step to do at the end - * unload lb - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("lb"); - } - - - /** - * Constructor with a specified name - * @param s name - */ - public C_lb(String s) { - super(s); - } - - - /** - * Try to launch the client of the example lb - * @throws Exception if an error occurs - */ - public void testClient() throws Exception { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - //Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - //Call Method - callMainMethod(CLIENT_CLASS, "lb"); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - System.out.println("Error = " + ite); - ite.printStackTrace(); - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - // Check the text - if (txt.indexOf(CLIENTOP_OK_TXT) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT); - } - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mailsb/C_mailsb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mailsb/C_mailsb.java deleted file mode 100644 index 130a1c5275..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mailsb/C_mailsb.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.mailsb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the mailsb example - * Test the client of mailsb example - * Test only MimePartDS as MailSession do some prompts - * (Check if the text is "OK !OK !OK !OK !") - * @author Florent Benoit - */ -public class C_mailsb extends JExampleTestCase { - - - /** - * Class of the mailsb.client - */ - private static final String CLIENT_CLASS = "mailsb.ClientMailer"; - - /** - * Text to check - */ - private static final String CLIENTOP_OK_TXT = "OK !OK !OK !OK !" ; - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_mailsb(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_mailsb.class); - } - - /** - * Setup need for these tests - * mailsb is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("mailsb"); - } - - /** - * Step to do at the end - * unload mailsb - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("mailsb"); - } - - - /** - * Constructor with a specified name - * @param s name - */ - public C_mailsb(String s) { - super(s); - } - - - /** - * Try to launch the client of the example mailsb - * @throws Exception if an error occurs - */ - public void testClientMimePartDS() throws Exception { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - //Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - //Call Method - callMainMethod(CLIENT_CLASS, "mailsb", new String[] {"MimePartDSMailer", "content of junit test"}); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - // Check the text - if (txt.indexOf(CLIENTOP_OK_TXT) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT); - } - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/C_mdb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/C_mdb.java deleted file mode 100644 index 4d6d9a92a2..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/C_mdb.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:C_mdb.java 10573 2007-06-08 10:12:46Z coqp $ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.mdb; - -import junit.framework.Test; -import junit.framework.TestSuite; - - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -/** - * Define a class to test all the mdb examples - * Test : - sampleappli - * - samplemdb - * @author Philippe Coq - */ -public class C_mdb extends JExampleTestCase { - - /** - * Constructor with a specified name - * @param name the name - */ - public C_mdb(String name) { - super(name); - } - - /** - * Get a new TestSuite for this class - * It includes earsample, alarm and jonasAdmin - * @return a new TestSuite for this class - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - /**suite.addTest(F_sampleappli.suite());**/ - suite.addTest(F_samplemdb.suite()); - return suite; - } - - /** - * Main method - * @param args the arguments - */ - public static void main (String[] args) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_sampleappli.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_sampleappli.java deleted file mode 100644 index 364f2adb88..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_sampleappli.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.mdb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the mdb example - * Test the client of mdb/sampleAppli example - * (Check if the text is "SampleApplicationClient OK" - * @author Florent Benoit - */ -public class F_sampleappli extends JExampleTestCase { - - - /** - * Class of the mdb.client - */ - private static final String CLIENT_CLASS = "sampleappli.SampleAppliClient"; - - /** - * Text to check - */ - private static final String CLIENTOP_OK_TXT1 = "Nb messages sent and received OK"; - - /** - * Second text to check - */ - private static final String CLIENTOP_OK_TXT2 = "SampleApplicationClient OK" ; - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_sampleappli(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(F_sampleappli.class); - } - - /** - * Setup need for these tests - * sampleappli is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("sampleappli"); - } - - /** - * Step to do at the end - * unload sampleappli - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("sampleappli"); - } - - - /** - * Constructor with a specified name - * @param s name - */ - public F_sampleappli(String s) { - super(s); - } - - - /** - * Try to launch the client of the example mdb.sampleappli - * @throws Exception if an error occurs - */ - public void testClient() throws Exception { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - //Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - //Call Method - callMainMethod(CLIENT_CLASS, "mdb"); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - System.out.println("Error = " + ite); - ite.printStackTrace(); - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - System.out.println("Sample appli txt = " + txt); - - // Check the text - if (txt.indexOf(CLIENTOP_OK_TXT1) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT1); - } - - // Check the second text - if (txt.indexOf(CLIENTOP_OK_TXT2) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT2); - } - - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_samplemdb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_samplemdb.java deleted file mode 100644 index 5a011057ab..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/mdb/F_samplemdb.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.mdb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the mdb example - * Test the client of mdb/sampleAppli example - * (Check if the text is "SampleApplicationClient OK" - * @author Florent Benoit - */ -public class F_samplemdb extends JExampleTestCase { - - - /** - * Class of the mdb.client - */ - private static final String CLIENT_CLASS = "samplemdb.MdbClient"; - - /** - * Text to check - */ - private static final String CLIENTOP_OK_TXT = "MDBsample is Ok"; - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_samplemdb(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(F_samplemdb.class); - } - - /** - * Setup need for these tests - * samplemdb is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("samplemdb"); - } - - /** - * Step to do at the end - * unload samplemdb - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("samplemdb"); - } - - - /** - * Constructor with a specified name - * @param s name - */ - public F_samplemdb(String s) { - super(s); - } - - - /** - * Try to launch the client of the example mdb - * @throws Exception if an error occurs - */ - public void testClient() throws Exception { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - //Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - //Call Method - callMainMethod(CLIENT_CLASS, "mdb"); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - System.out.println("Error = " + ite); - ite.printStackTrace(); - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - System.out.println("Sample mdb txt = " + txt); - - // Check the text - if (txt.indexOf(CLIENTOP_OK_TXT) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT); - } - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sampleCluster2/C_sampleCluster2.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sampleCluster2/C_sampleCluster2.java deleted file mode 100644 index 85b57326cf..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sampleCluster2/C_sampleCluster2.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - */ - -package org.objectweb.jonas.examples.clients.sampleCluster2; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the sampleCluster2 example - * @author Georges Goebel - */ -public class C_sampleCluster2 extends JExampleTestCase { - - /** - * URL of the earsample page - */ - private static final String URL_EARSAMPLE = "/sampleCluster2"; - - /** - * Constructor with a specified name - * @param s name - */ - public C_sampleCluster2(String s) { - super(s, URL_EARSAMPLE); - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_sampleCluster2(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_sampleCluster2.class); - } - - /** - * Setup need for these tests sampleCluster2 is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useEar("sampleCluster2"); - } - - /** - * Check if the First Page is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsFirstPageOk() throws Exception { - WebResponse wr = wc.getResponse(url); - String txt = wr.getText(); - - if (txt.indexOf("Sample is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - - /** - * Check if the sessionServlet is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsSessionOk() throws Exception { - WebResponse wr = wc.getResponse(url + "/servlet/session"); - String txt = wr.getText(); - - if (txt.indexOf("Sample is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - - /** - * Check if the checkServlet is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsCheckOk() throws Exception { - WebResponse wr = wc.getResponse(url + "/servlet/check"); - String txt = wr.getText(); - - if (txt.indexOf("Sample is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - - /** - * Check if the releaseServlet is OK. Analyze response - * @throws Exception if an error occurs - */ - public void testIsReleaseOk() throws Exception { - WebResponse wr = wc.getResponse(url + "/servlet/release"); - String txt = wr.getText(); - - if (txt.indexOf("Sample is OK.") == -1) { - fail("The example was not ok : " + txt); - } - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sb/C_sb.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sb/C_sb.java deleted file mode 100644 index 1c1fa9a4f6..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/sb/C_sb.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.sb; - -import java.lang.reflect.InvocationTargetException; -import junit.framework.*; - -import org.objectweb.jonas.examples.util.JExampleTestCase; -import org.objectweb.jonas.examples.util.JPrintStream; -import org.objectweb.jonas.examples.util.NoExitSecurityManager; - -/** - * Define a class to test the sb example - * Test the client of sb example (Check if the text is "ClientOp OK. Exiting.") - * @author Florent Benoit - */ -public class C_sb extends JExampleTestCase { - - - /** - * Class of the sb.client - */ - private static final String CLIENT_CLASS = "sb.ClientOp"; - - /** - * Text to check - */ - private static final String CLIENTOP_OK_TXT = "ClientOp OK. Exiting." ; - - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new C_sb(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(C_sb.class); - } - - /** - * Setup need for these tests - * sb is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - useBeans("sb"); - } - - /** - * Step to do at the end - * unload sb - * @throws Exception if it fails - */ - protected void tearDown() throws Exception { - super.tearDown(); - unUseBeans("sb"); - } - - - /** - * Constructor with a specified name - * @param s name - */ - public C_sb(String s) { - super(s); - } - - - /** - * Try to launch the client of the example sb - * @throws Exception if an error occurs - */ - public void testClient() throws Exception { - JPrintStream jPrintStream = new JPrintStream(System.out); - System.setOut(jPrintStream); - String txt = null; - try { - //Define a SecurityManager to handle System.exit() case - System.setSecurityManager(new NoExitSecurityManager()); - - //Call Method - callMainMethod(CLIENT_CLASS, "sb"); - - txt = jPrintStream.getStringBuffer().toString(); - } catch (InvocationTargetException ite) { - fail("Fail when invoking the client. It can be due to a System.exit()"); - } catch (Exception e) { - fail("Client was not ok" + e); - } finally { - System.setSecurityManager(new SecurityManager()); - jPrintStream.remove(); - } - - // Check the text - if (txt.indexOf(CLIENTOP_OK_TXT) == -1) { - fail("The text that the client sent was not " + CLIENTOP_OK_TXT); - } - - } - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_WebExamples.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_WebExamples.java deleted file mode 100644 index fce70b24d6..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_WebExamples.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.suite; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.clients.alarm.C_alarm; -import org.objectweb.jonas.examples.clients.earsample.C_earsample; -import org.objectweb.jonas.examples.util.JExampleTestCase; - -/** - * Define a class to test all the examples - * Test : - alarm - * - earsample - * @author Florent Benoit - */ -public class C_WebExamples extends JExampleTestCase { - - /** - * Constructor with a specified name - * @param name the name - */ - public C_WebExamples(String name) { - super(name); - } - - /** - * Get a new TestSuite for this class - * It includes earsample, alarm and jonasAdmin - * @return a new TestSuite for this class - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTest(C_earsample.suite()); - suite.addTest(C_alarm.suite()); - return suite; - } - - /** - * Main method - * @param args the arguments - */ - public static void main (String[] args) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_suite.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_suite.java deleted file mode 100644 index 700740966e..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/suite/C_suite.java +++ /dev/null @@ -1,89 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:C_suite.java 10573 2007-06-08 10:12:46Z coqp $ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.suite; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.examples.clients.alarm.C_alarm; -import org.objectweb.jonas.examples.clients.cmp2.C_cmp2; -import org.objectweb.jonas.examples.clients.earsample.C_earsample; -import org.objectweb.jonas.examples.clients.eb.C_eb; -import org.objectweb.jonas.examples.clients.hibernate.C_hibernate; -import org.objectweb.jonas.examples.clients.j2eemanagement.C_j2eemanagement; -import org.objectweb.jonas.examples.clients.lb.C_lb; -import org.objectweb.jonas.examples.clients.mailsb.C_mailsb; -import org.objectweb.jonas.examples.clients.mdb.C_mdb; -import org.objectweb.jonas.examples.clients.sb.C_sb; -import org.objectweb.jonas.examples.clients.webservices.C_webservices; -import org.objectweb.jonas.examples.util.JExampleTestCase; - -/** - * Define a class to test all the examples - * - * @author Florent Benoit - */ -public class C_suite extends JExampleTestCase { - - /** - * Constructor with a specified name - * @param name the name - */ - public C_suite(String name) { - super(name); - } - - /** - * Get a new TestSuite for this class - * It includes earsample, alarm and jonasAdmin - * @return a new TestSuite for this class - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTest(C_earsample.suite()); - suite.addTest(C_alarm.suite()); - suite.addTest(C_cmp2.suite()); - suite.addTest(C_eb.suite()); - suite.addTest(C_hibernate.suite()); - suite.addTest(C_j2eemanagement.suite()); - suite.addTest(C_lb.suite()); - suite.addTest(C_mailsb.suite()); - suite.addTest(C_sb.suite()); - suite.addTest(C_webservices.suite()); - suite.addTest(C_mdb.suite()); - - - return suite; - } - - /** - * Main method - * @param args the arguments - */ - public static void main (String[] args) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/A_WebServicesEndpoint.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/A_WebServicesEndpoint.java deleted file mode 100644 index d3823ebced..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/A_WebServicesEndpoint.java +++ /dev/null @@ -1,182 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.webservices; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Properties; - -import javax.wsdl.Definition; -import javax.wsdl.Port; -import javax.wsdl.Service; -import javax.wsdl.extensions.soap.SOAPAddress; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.namespace.QName; - -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebLink; -import com.meterware.httpunit.WebResponse; - -/** - * Define a class to test the webServices examples wsWarExample - * Test WebServices deployment OK and test Call on deployed WebService - * @author Guillaume Sauthier - */ -public abstract class A_WebServicesEndpoint extends A_WebServices { - - /** - * property name => file1 WSDLHandler is mandatory for this test ! - */ - private static final String JPROP_WSDL_LOCATION = "jonas.service.publish.file.directory"; - - public A_WebServicesEndpoint(String s, String urlPrefix) { - super(s, urlPrefix); - } - - public A_WebServicesEndpoint(String s, String urlPrefix, String username, String password) { - super(s, urlPrefix, username, password); - } - - /** - * Check if Axis is Running - * @param idServicesLink indicate where is the link to /services in the homepage - * @param portName the name of the port we want to check - * @throws Exception if an error occurs - */ - public void checkAxisServicesAccessible(int idServicesLink, String context, String portName) throws Exception { - - WebResponse wr = wc.getResponse(url + "index.html"); - WebLink services = wr.getLinks()[idServicesLink]; - - // click the link - WebResponse swr = services.click(); - - // traverse the links and find the interresting one. - boolean found = false; - for (int i = 0; i < swr.getLinks().length; i++) { - String ws_url = swr.getLinks()[i].getURLString(); - if (ws_url.equalsIgnoreCase(url + context + "/" + portName + "?jwsdl")) - found = true; - } - if (!found) - fail("endpoint '" + portName + "' not found in /" + context); - - } - - /** - * Check if WSDL is generated - * @param idWSDLServiceLink indicate where we can find the link - * to WSDL of the port we want to test. (first, second, ...) - * @throws Exception if an error occurs - */ - public void checkAxisWSDL(String path) throws Exception { - - WebResponse wr = wc.getResponse(url + path); - assertEquals("Must be an XML mime type", "text/xml", wr.getContentType()); - - } - - /** - * Check if deployed WebService is running - * @param formPage the filename of the webpage containing the form - * @param endpoint the URL where local service can be found - * @param name the name to set as parameter - * @param pageTitle title of the returned page - * @throws Exception if an error occurs - */ - public void checkDeployedWebService(String formPage, - String endpoint, - String name, - String pageTitle) throws Exception { - - // Get the page containing the form - WebResponse wr = wc.getResponse(url + formPage); - - // get the form named "prepare" - WebForm form = wr.getFormWithName("prepare"); - // set all parameters - form.setParameter("name", name); - // submit - WebResponse wr2 = form.submit(); - - String text = wr2.getText(); - - String valTitle = "" + pageTitle + ""; - String valURL = "Working with URL : " + endpoint + "
    "; - String valHello = "result of sayHello(name) method :Hello " + name + "
    "; - String valQuotes = "result of getCotes() method :12
    "; - - assertTrue("incorrect title", (text.indexOf(valTitle) != -1)); - assertTrue("incorrect URL", (text.indexOf(valURL) != -1)); - assertTrue("incorrect Name", (text.indexOf(valHello) != -1)); - assertTrue("incorrect Cotes", (text.indexOf(valQuotes) != -1)); - - } - - - /** - * Check if WSDL has been published. - * @param wsdlFilename the filename of the WSDL file - * @param tns targetNameSpace of the Definition - * @param serviceName the localpart of the Service QName - * @param portName the name of the WSDL' Port - * @param endpoint the expected URL - * @throws Exception if an error occurs - */ - public void checkWSDLPublication(String wsdlFilename, - String tns, - String serviceName, - String portName, - String endpoint) throws Exception { - - String jonasbase = System.getProperty("jonas.base"); - Properties props = new Properties(); - props.load(new FileInputStream(new File(jonasbase, "conf" + File.separator + "file1.properties"))); - String wsdlLoc = props.getProperty(JPROP_WSDL_LOCATION); - - File wsdl = new File(wsdlLoc, wsdlFilename); - - assertTrue("WSDL is not created", wsdl.exists()); - assertTrue("WSDL is not a file", wsdl.isFile()); - - WSDLFactory f = WSDLFactory.newInstance(); - WSDLReader r = f.newWSDLReader(); - - r.setFeature("javax.wsdl.verbose", true); - r.setFeature("javax.wsdl.importDocuments", false); - - Definition def = r.readWSDL(wsdl.getPath()); - Service s = def.getService(new QName(tns, serviceName)); - Port p = s.getPort(portName); - SOAPAddress sa = (SOAPAddress) p.getExtensibilityElements().get(0); - - assertEquals("URL has not been updated", endpoint, sa.getLocationURI()); - - } - - -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/C_webservices.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/C_webservices.java deleted file mode 100644 index c2a0cf7a35..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/clients/webservices/C_webservices.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id:C_webservices.java 10573 2007-06-08 10:12:46Z coqp $ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.clients.webservices; - -import junit.framework.Test; -import junit.framework.TestSuite; - - -import org.objectweb.jonas.examples.util.JExampleTestCase; - -/** - * Define a class to test all the webservices examples - * Test : - F_WsAccessTest - * - F_WsEarSample - * - F_WsWarSample - * @author Philippe Coq - */ -public class C_webservices extends JExampleTestCase { - - /** - * Constructor with a specified name - * @param name the name - */ - public C_webservices(String name) { - super(name); - } - - /** - * Get a new TestSuite for this class - * It includes earsample, alarm and jonasAdmin - * @return a new TestSuite for this class - */ - public static Test suite() { - TestSuite suite = new TestSuite(); - // The WsAccessTest is using a SOAP Search WS from Google that have been retired on 07/09/2009 - // http://googlecode.blogspot.com/2009/08/well-earned-retirement-for-soap-search.html - // Commented until a replacement WS has been found - //suite.addTest(F_WsAccessTest.suite()); - suite.addTest(F_WsEarSample.suite()); - /**suite.addTest(F_WsWarSample.suite()); **/ - return suite; - } - - /** - * Main method - * @param args the arguments - */ - public static void main (String[] args) { - junit.textui.TestRunner.run(suite()); - } -} diff --git a/jonas_tests/examples/src/org/objectweb/jonas/examples/util/JExampleTestCase.java b/jonas_tests/examples/src/org/objectweb/jonas/examples/util/JExampleTestCase.java deleted file mode 100644 index c133c9d7e4..0000000000 --- a/jonas_tests/examples/src/org/objectweb/jonas/examples/util/JExampleTestCase.java +++ /dev/null @@ -1,500 +0,0 @@ -/* - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.examples.util; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Set; -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import junit.framework.TestCase; - -import com.meterware.httpunit.WebConversation; - -/** - * Define a class to add useful methods for test the examples - * - Deploy ear, war and beans - * - Retrieve initial context - * @author Florent Benoit - */ -public class JExampleTestCase extends TestCase { - - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - - /** - * Initial context used for lookup - */ - private static Context ictx = null; - - /* - * JONAS_BASE - */ - protected static String jb = null; - - /** - * Connection to the MBeanServer - */ - private static MBeanServerConnection cnx = null; - - - /** - * Conversation used for HttpUnit - */ - protected WebConversation wc = null; - - /** - * URL used for the constructor - */ - protected String url = null; - - /** - * Prefix for build URLs - */ - private String prefixUrl = null; - - /** - * Add to the specified url the prefix - * @param url relative URL - * @return absolute path of URL - */ - protected String getAbsoluteUrl (String url) { - return (this.prefixUrl + url); - } - - /** - * Make an absolute path with the filename. - */ - public String absPath(String name, String extension) { - - String ret = ""; - if ( extension.equals(".jar")) { - ret = jb + "/ejbjars/" + name + ".jar"; - } else if ( extension.equals(".war")) { - ret = jb + "/webapps/" + name + ".war"; - } else if (extension.equals(".ear")) { - ret = jb + "/apps/" + name + ".ear"; - } - return ret; - } - private static JMXServiceURL jmxServerUrl = null; - private static String urlSuffix = "service:jmx:"; - private static String registry = null; - private static String defaultRegistry = "rmi://localhost:1099"; - private static String protocol = null; - private static String defaultProtocol = "jrmp"; - - /* - * Get Connection to the MBean server - * Set the static cnx variable - */ - private void getJmxCnx() { - if (cnx == null) { - try { - if (registry == null) { - registry = defaultRegistry; - } - registry = registry + "/"; - int indx = registry.lastIndexOf(":"); - String st = registry.substring(0, indx); - String serverUrl = urlSuffix + st +"/jndi/"+registry; - if (protocol == null) { - protocol = defaultProtocol; - } - String connectorName = protocol.concat("connector_"); - connectorName = connectorName.concat(jonasName); - serverUrl = serverUrl.concat(connectorName); - jmxServerUrl = new JMXServiceURL(serverUrl); - System.out.println("JMX connector: "+serverUrl); - JMXConnector cntor = JMXConnectorFactory.connect(jmxServerUrl, null); - cnx = cntor.getMBeanServerConnection(null); - } catch (IOException e) { - System.err.println("Can't reach server " + jonasName - + " as couldn't create JMXConnector (" + e.getMessage() - + ")"); - System.err.println("Check name, registry and protocol options."); - System.exit(2); - } - } - } - - /* - * ObjectName of y=the J2eeServerMBean - */ - private static ObjectName j2eeserver = null; - - /* - * Get the ObjectName of the J2eeServerMBean - * @return the ObjectName - */ - private ObjectName getJ2eeServer() { - if (j2eeserver == null) { - try { - ObjectName on = ObjectName.getInstance("*:j2eeType=J2EEServer,name=" + jonasName); - Set j2eeservers = cnx.queryNames(on, null); - if (j2eeservers.isEmpty()) { - System.err.println("Can't admin server " + jonasName + ": didn't found J2EEServer MBean"); - System.exit(2); - } - j2eeserver = (ObjectName) j2eeservers.iterator().next(); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - } - return j2eeserver; - } - - /** - * Initialize the port used by tests and the prefix - */ - private void init() { - String port = System.getProperty("http.port"); - if (port == null) { - port = "9000"; - } - - prefixUrl = "http://localhost:" + port; - } - - /** - * Constructor with a specified name - * @param s the name - */ - public JExampleTestCase(String s) { - super(s); - init(); - } - /** - * Constructor with a specified name and url - * @param s the name - * @param url the url which can be used - */ - public JExampleTestCase(String s, String url) { - super(s); - wc = new WebConversation(); - init(); - this.url = getAbsoluteUrl(url); - } - - public JExampleTestCase(String s, String url, String username, String password) { - super(s); - wc = new WebConversation(); - wc.setAuthorization(username, password); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Common setUp routine, used for every test. - * @throws Exception if an error occurs - */ - protected void setUp() throws Exception { - try { - // get InitialContext - if (ictx == null) { - ictx = getInitialContext(); - } - jb = System.getProperty("jonas.base"); - registry = System.getProperty("registry"); - protocol = System.getProperty("protocol"); - getJmxCnx(); - - } catch (NamingException e) { - System.err.println("Cannot setup test: " + e); - e.printStackTrace(); - } - } - - - /** - * Load an ear file in the jonas server - * @param fname ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void useEar(String fname) throws Exception { - String filename = absPath(fname, ".ear"); - try { - // Load ear in JOnAS if not already loaded. - if (!isEarLoaded(filename)) { - loadEar(filename); - } - - } catch (Exception e) { - throw new Exception("Cannot load Ear : " + e.getMessage()); - } - } - - /** - * Load a war file in the jonas server - * @param filename war file, without ".war" extension - * @throws Exception if an error occurs - */ - public void useWar(String fname) throws Exception { - String filename = absPath(fname, ".war"); - try { - // Load war in JOnAS if not already loaded. - if (!isWarLoaded(filename)) { - loadWar(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load War : " + e.getMessage()); - } - } - - /** - * Load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void useBeans(String fname) throws Exception { - try { - String filename = absPath(fname, ".jar"); - // Load bean in EJBServer if not already loaded. - if (!isJarLoaded(filename)) { - addBeans(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load Bean : " + e.getMessage()); - } - } - - /* - * isLoaded remote operation - */ - private boolean isLoaded(String filename) { - boolean ret = false; - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - Boolean r = (Boolean) cnx.invoke(getJ2eeServer(), "isDeployed", params, signature); - ret = r.booleanValue(); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - return ret; - } - /** - * isJarLoaded remote operation - * @param filename jar file, with ".jar" extension - */ - private boolean isJarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - - /** - * addBean remote operation - * @param filename jar file, with ".jar" extension - */ - public void addBeans(String filename) { - - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - - - /** - * unloadBean remote operation - * @param filename jar file, with ".jar" extension - */ - public void unloadBeans(String filename) { - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "undeploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot undeploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot unload bean: " + e); - } - } - - - /** - * isEarLoaded remote operation - * @param filename ear file, with ".ear" extension - */ - private boolean isEarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - /** - * loadEar remote operation - * @param filename ear file, with ".ear" extension - */ - public void loadEar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * isWarLoaded remote operation - * @param filename war file, with ".war" extension - */ - private boolean isWarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - - /** - * loadEar remote operation - * @param filename war file, with ".war" extension - */ - public void loadWar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * Unload a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void unUseBeans(String filename) throws Exception { - try { - - if (isJarLoaded(filename + ".jar")) { - unloadBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - - /** - * Call the main method of a specific class with empty args - * @param classToLoad name of class which contains the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad, String ejbname) throws Exception { - callMainMethod(classToLoad, ejbname, new String[]{}); - } - - - /** - * Call the main method of a specific class and the specific args - * @param classToLoad name of class which contains the main method - * @param args args to give to the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad, String ejbname , String[] args) throws Exception { - //Build classloader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL[] urls = new URL[4]; - urls[0] = new File(System.getProperty("jonas.root") + File.separator + "examples" + File.separator + "classes").toURL(); - urls[1] = new File("base" + File.separator + "examples" + File.separator + "classes").toURL(); - urls[2] = new File("examples" + File.separator + "base" + File.separator + "examples" + File.separator + "classes").toURL(); - urls[3] = new File(System.getProperty("jonas.base") + File.separator + "ejbjars" + File.separator + ejbname + ".jar").toURL(); - URLClassLoader loader = new URLClassLoader(urls); - Thread.currentThread().setContextClassLoader(loader); - Class clazz = loader.loadClass(classToLoad); - Class[] argList = new Class[] {args.getClass()}; - Method meth = clazz.getMethod("main", argList); - Object appli = meth.invoke(null, new Object[]{args}); - } - - - - - -} diff --git a/jonas_tests/j2eeca/build.xml b/jonas_tests/j2eeca/build.xml deleted file mode 100644 index ee3325ce93..0000000000 --- a/jonas_tests/j2eeca/build.xml +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/j2eeca/src/ersatz/resourceadapter/Utility.java b/jonas_tests/j2eeca/src/ersatz/resourceadapter/Utility.java deleted file mode 100644 index adf19af5d3..0000000000 --- a/jonas_tests/j2eeca/src/ersatz/resourceadapter/Utility.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Created on February 12, 2004 - * - * Utility.java uses Sun logging - * - */ - -package ersatz.resourceadapter; - - -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.SecurityException; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import java.util.Set; -import java.util.Iterator; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * - * -**/ -public class Utility -{ - private static Logger logger = null; - /** - * Write a JOnAS log record - * - * @param msg display this message in log - * - */ - public static synchronized void log(String msg) { - if (logger == null) { - logger = Log.getLogger("ersatz.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, msg); - } - - - /** Returns the Password credential - * - * @param mcf ManagedConnectionFactory currently being used - * @param subject Subject associated with this call - * @param info ConnectionRequestInfo - * - * @return PasswordCredential for this user - */ - static synchronized PasswordCredential getPasswordCredential - (ManagedConnectionFactoryImpl mcf, Subject subject, - ConnectionRequestInfo info) - throws ResourceException - { - String mName = "Utility.getPasswordCredential"; - if (subject == null) - { - if (info == null) return null; - ConnectionRequestInfoImpl crii = (ConnectionRequestInfoImpl) info; - PasswordCredential pc = - new PasswordCredential(crii.getUserName(), - crii.getPassword().toCharArray()); - pc.setManagedConnectionFactory(mcf); - return pc; - } - Set cred = subject.getPrivateCredentials(PasswordCredential.class); - PasswordCredential pc = null; - for (Iterator iter = cred.iterator(); iter.hasNext();) - { - PasswordCredential tmpPc = (PasswordCredential) iter.next(); - if (mcf.equals(tmpPc.getManagedConnectionFactory())) - { - log(mName+" PasswordCredential found mcf="+mcf); - pc = tmpPc; - break; - } - } - if (pc == null) - { - SecurityException se = new SecurityException("No PasswordCredential found"); - log(mName+" No PasswordCredential found."); - throw se; - } - return pc; - } - - -} diff --git a/jonas_tests/j2eeca/src/fictional/resourceadapter/CommonClient.java b/jonas_tests/j2eeca/src/fictional/resourceadapter/CommonClient.java deleted file mode 100644 index ba9d0f2e7f..0000000000 --- a/jonas_tests/j2eeca/src/fictional/resourceadapter/CommonClient.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Created on Jun 12, 2003 - * - * CommonClient.java is used to test the J2EE Connector - * as implemented by JOnAS. This class implements some the Common Client Interface - * (cci) classes. Each cci method simulates actual functionality and returns test - * results to the caller which is a JUnit test program. - * - */ -package fictional.resourceadapter; - -import javax.naming.Reference; -import javax.naming.NamingException; -import javax.resource.ResourceException; -import javax.resource.NotSupportedException; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.ConnectionRequestInfo; -// interfaces implemented in this class -import javax.resource.cci.ConnectionFactory; -import javax.resource.cci.Connection; -import javax.resource.cci.ConnectionSpec; // j2ee 1.5 -import javax.resource.cci.RecordFactory; -import javax.resource.cci.ResourceAdapterMetaData; -import java.io.Serializable; -import javax.resource.Referenceable; -// logger imports -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; -/** - * @author Bob Kruse - * - * used to test the J2EE Connector as implemented by JOnAS. - * - */ -public class CommonClient - implements - ConnectionFactory, - ConnectionSpec, // j2ee 1.5 - ResourceAdapterMetaData, - Referenceable, - Serializable - -{ - Reference reference; - private ConnectionManager cm; - private ManagedConnectionFactory mcf; // used in cm.allocateConnection - private CommonClient cs; // ConnectionSpec - protected boolean managed = true; - private Logger logger = null; - private String userName = ""; - private String passWord = ""; - String cName = ""; - - public CommonClient() { - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - } - // - // ***************** - // ConnectionSpec methods - // ***************** - // - public void setUserName(String u) { - userName=u; - cName = "ConnectionSpec"; - logger.log(BasicLevel.DEBUG, cName+".setUserName="+u); - } - public void setPassword(String p) { - passWord=p; - cName = "ConnectionSpec"; - logger.log(BasicLevel.DEBUG, cName+".setPassword="+p); - } - public String getUserName() { - cName = "ConnectionSpec"; - logger.log(BasicLevel.DEBUG, cName+".getUserName="+userName); - return userName; - } - public String getPassword() { - cName = "ConnectionSpec"; - logger.log(BasicLevel.DEBUG, cName+".getPassword="+passWord); - return passWord; - } - // - // ***************** - // ConnectionFactory methods - // ***************** - // - // Referenced classes of package javax.resource.cci: - // Connection, ConnectionSpec, RecordFactory, ResourceAdapterMetaData - // (below is constructor for ConnectionFactory - // - // ConnectionFactory instance created during lookup() by Application Server - // - public CommonClient(ManagedConnectionFactory mcf, ConnectionManager cm) { - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - this.mcf=mcf; - this.cm=cm; - - } - private String impl(Object obj) { - if (obj instanceof ConnectionFactory) { - return "ConnectionFactory"; - } else if (obj instanceof ConnectionSpec) { - return "ConnectionSpec"; - } else if (obj instanceof ResourceAdapterMetaData) { - return "ResourceAdapterMetaData"; - } else - return "CommonClient. Is this an error"; - - } - // - // Container Managed Sign-on calls getConnection() from the Application Component - // - // Container-managed sign-on when file "connector.xml / secured.jar" contains line below - // - // Container - // - public Connection getConnection() - throws ResourceException - { - cName = "ConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".getConnection"+" (Container Managed Sign-on)"); - Connection conn = null; - try { - conn = (Connection)getConnection(null); - return conn; - } catch (ResourceException ex) { - throw ex; - } - } - // - // Component Managed Sign-on calls getConnection(cs) directly from the Application Component - // - // Component-managed sign-on when file "connector.xml / secured.jar" contains line below - // - // Application - // - public Connection getConnection(ConnectionSpec connectionspec) - throws ResourceException - { - cName = "ConnectionFactory"; - JtestResourceAdapter jmcf = (JtestResourceAdapter)mcf; // ManagedConnectionFactory - Connection conn = null; - CommonClient cs; // ConnectionSpec - JtestResourceAdapter jcri=null; // ConnectionRequestInfo - - if (connectionspec==null) { - jmcf.setRes_Auth("Container"); - logger.log(BasicLevel.DEBUG, cName+".getConnection detected res-auth='"+jmcf.getRes_Auth()+"'"); - // TODO what now? anything? - // now pass null to cm.allocateConnection(mcf, null); - } else { - jmcf.setRes_Auth("Application"); - logger.log(BasicLevel.DEBUG, cName+".getConnection detected res-auth='"+jmcf.getRes_Auth()+"'"); - cs = (CommonClient)connectionspec; - // load user and password into ConnectionRequestInfo instance - jcri = new JtestResourceAdapter(); // ConnectionRequestInfo - jcri.setUserName(cs.getUserName()); - jcri.setPassword(cs.getPassword()); - - } - logger.log(BasicLevel.DEBUG, cName+".getConnection calling cm.allocateConnection"); - try { - ConnectionRequestInfo cri = (ConnectionRequestInfo) jcri; - conn = (Connection)cm.allocateConnection(mcf, cri); - if (conn==null) { - logger.log(BasicLevel.DEBUG, cName+". getConnection, cm.allocateConnection" - +" error: Null connection object returned"); - throw new ResourceException("Null connection object returned by allocateConnection"); - } - return conn; - } catch (IllegalStateException is) { - logger.log(BasicLevel.DEBUG, cName+".getConnection IllegalStateException"+is); - throw is; - } catch (ResourceException re) { - logger.log(BasicLevel.DEBUG, cName+".getConnection ResourceException="+re); - throw re; - } - } - - public RecordFactory getRecordFactory() - throws ResourceException - { - cName = "ConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".getRecordFactory"); - NotSupportedException nse = new NotSupportedException( - "RecordFactory is not currently supported"); - throw nse; - } - - public ResourceAdapterMetaData getMetaData() - throws ResourceException - { - cName = "ConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".getMetaData"); - ResourceAdapterMetaData rd = null; // TODO do something - return rd; - } - public ManagedConnectionFactory getMcf() { - ManagedConnectionFactory MCF = (ManagedConnectionFactory)mcf; - return MCF; - } - // - // ***************** - // Reference - // ***************** - // - /** Required by the referencable attribute - * @param ref Reference object - **/ - public void setReference(javax.naming.Reference ref) - { - this.reference = ref; - } - - /** Required by the referencable attribute - * @return Reference object - **/ - public Reference getReference() - throws NamingException - { - return reference; - } - // - // *********************** - // ResourceAdapterMetaData methods - // *********************** - // - public String getAdapterVersion() { - return "1.0"; - } - public String getAdapterVendorName() { - return "Bull"; - } - public String getAdapterName() { - return "JOnAS Test Resource Adapter"; - } - public String getAdapterShortDescription() { - return "Test JOnAS Application Server compliance to J2EE Java Community Process (JSR112)"; - } - public String getSpecVersion() { - return "J2EE Java Community Process (JSR112)"; - } - public String[] getInteractionSpecsSupported() { - String[]s = {"JSR016","JSR112"}; - return s; - } - public boolean supportsExecuteWithInputAndOutputRecord() { - return true; - } - public boolean supportsExecuteWithInputRecordOnly() { - return true; - } - public boolean supportsLocalTransactionDemarcation() { - return false; - } -} diff --git a/jonas_tests/j2eeca/src/fictional/resourceadapter/ConnectionImpl.java b/jonas_tests/j2eeca/src/fictional/resourceadapter/ConnectionImpl.java deleted file mode 100644 index e08553b54b..0000000000 --- a/jonas_tests/j2eeca/src/fictional/resourceadapter/ConnectionImpl.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Created on Jul 10, 2003 - * - * ConnectionImpl.java is used to test the J2EE Connector - * as implemented by JOnAS. This class implements the Connection Interface - * and ConnectionMetaData Interface (cci) classes. - * - */ -package fictional.resourceadapter; - -import javax.resource.ResourceException; -import javax.resource.NotSupportedException; -import javax.resource.cci.*; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ConnectionEvent; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * @author Bob Kruse - * - * Jtest Resource Adapter - * - * used to test the J2EE Connector as implemented by JOnAS. - * - */ -public class ConnectionImpl - implements Connection, - ConnectionMetaData, - java.io.Serializable -{ - public String product="Fictional EIS"; // see J2eeConnectorTestBeanClient - String version="1.1"; - String UserName="Fictional_User_Name"; // - private ManagedConnection mc; - public LocalTransactionImpl lt; - boolean closed = false; // connection is closed - private Logger logger = null; - String cName = ""; - private boolean autoCommitMode = false; - - // - // ***************** - // Connection methods - // ***************** - // - public ConnectionImpl(Object mc) { // constructor for Connection - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, impl(this)+".constructor"); - this.mc=(ManagedConnection)mc; - } - private String impl(Object obj) { - if (obj instanceof Connection) { - return "ConnectionImpl"; - } else if (obj instanceof ConnectionImpl) { - return "Connection"; - } else if (obj instanceof ConnectionMetaData) { - return "ConnectionMetaData"; - } else - return "ConnectionImpl. Is this an error"; - } - // - // close connection handle - // - public void close() throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this) - +".close with ConnectionEvent.CONNECTION_CLOSED=" - +ConnectionEvent.CONNECTION_CLOSED); - closed = true; - - if (mc != null) { - try { - JtestResourceAdapter omc = (JtestResourceAdapter) mc; - omc.sendEvent(ConnectionEvent.CONNECTION_CLOSED, null, this); - mc=null; - logger.log(BasicLevel.DEBUG, impl(this) - +".close sendevent 'CONNECTION_CLOSED'"); - } catch (ResourceException e) { - logger.log(BasicLevel.DEBUG, impl(this)+".close error: unable to close"); - throw e; - } - } else { - logger.log(BasicLevel.DEBUG, impl(this)+".close error: mc=null"); - } - return; - } - // - // close physical connection - // - // The connectionErrorOccurred method indicates that the associated - // ManagedConnection instance is now invalid and unusable. - // mc.sendEvent method makes the call to connectionErrorOccurred - // - public void close(int eType) throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this)+".close("+eType+")"); - closed = true; - - if (mc != null) { - try { - JtestResourceAdapter omc = (JtestResourceAdapter) mc; - omc.sendEvent(eType, null, this); - mc=null; - logger.log(BasicLevel.DEBUG, impl(this) - +".close(CONNECTION_ERROR_OCCURRED=" - +ConnectionEvent.CONNECTION_ERROR_OCCURRED+") to " - +"close physical connection"); - } catch (ResourceException e) { - logger.log(BasicLevel.DEBUG, impl(this) - +".close error: unable to close physical connection" - +" with 'CONNECTION_ERROR_OCCURRED'"); - throw e; - } - } else { - logger.log(BasicLevel.DEBUG, impl(this)+".close error: mc=null already"); - } - return; - } - public Interaction createInteraction() throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this)+".createInteraction"); - Interaction gi=new JtestInteraction(this, mc); - // TODO Interaction gi = new Interaction(this, this.mc, lw); - return gi; - } - public ConnectionMetaData getMetaData() throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this)+".getMetaData"); - ConnectionMetaData eisInfo = (ConnectionMetaData)new ConnectionImpl(mc); - return eisInfo; - } - public LocalTransaction getLocalTransaction() - throws ResourceException - { - try { - JtestResourceAdapter jmc = (JtestResourceAdapter)mc; - lt = (LocalTransactionImpl) jmc.getLocalTransaction(true); - logger.log(BasicLevel.DEBUG, impl(this)+".getLocalTransaction lt="+lt); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, impl(this)+".getLocalTransaction error: " - +e.getMessage()+" <<<<<<<<<<<<"); - } - return (lt); - } - public ResultSetInfo getResultSetInfo() throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this)+".getResultSetInfo"); - NotSupportedException nse = new NotSupportedException("getResultSetInfo is not supported"); - throw nse; - } - public void associateConnection(ManagedConnection mc) throws IllegalStateException - { - logger.log(BasicLevel.DEBUG, impl(this)+".associateConnection"); - this.mc=mc; - } - public ManagedConnection getMC() throws ResourceException - { - logger.log(BasicLevel.DEBUG, impl(this)+".getMC mc="+this.mc); - return this.mc; - } - public void setAutoCommit(boolean a) { - autoCommitMode=a; - } - public boolean getAutoCommit() { - return autoCommitMode; - } - // - // ********************** - // ConnectionMetaData methods - // ********************** - // - // The method getUserName returns the user name for an active connection as - // known to the underlying EIS instance. The name corresponds the resource - // principal under whose security context a connection to the EIS - // instance has been established. (page 109 CA 1.0) - // - public String getEISProductName() - throws ResourceException - { - return (product); - } - public String getEISProductVersion() - throws ResourceException - { - return (version); - } - public String getUserName() - throws ResourceException - { - return (UserName); - } -} diff --git a/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestInteraction.java b/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestInteraction.java deleted file mode 100644 index ff3205998a..0000000000 --- a/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestInteraction.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Created on Jul 10, 2003 - * - * JtestInteraction.java is used to test the J2EE Connector - * as implemented by JOnAS. This class implements the Interaction and InteractionSpec - * (cci) classes. - * - */ -package fictional.resourceadapter; - -import javax.resource.ResourceException; -import javax.resource.NotSupportedException; -import javax.resource.cci.*; -import javax.resource.spi.*; -// logger imports -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.Logger; -import org.objectweb.util.monolog.api.BasicLevel; - -/** - * @author Bob Kruse - * - * Jtest Resource Adapter - * - * used to test the J2EE Connector as implemented by JOnAS. - * - */ -public class JtestInteraction - implements Interaction, - InteractionSpec, - java.io.Serializable -{ - - private Record output; - private boolean closed = false; - private Connection con; - private ManagedConnection mcon; - private Logger logger = null; - String cName = ""; - - public JtestInteraction(Connection c) { - cName = "Interaction"; - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, cName+".constructor"); - con=c; - } - public JtestInteraction(Connection c, ManagedConnection mc) { - cName = "Interaction"; - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, cName+".constructor"); - con=c; - mcon=mc; - } - private String impl(Object obj) { - if (obj instanceof Interaction) { - return "Interaction"; - } else if (obj instanceof InteractionSpec) { - return "InteractionSpec"; - } else - return "InteractionSpec. Is this an error"; - } - /**************************** - * Interaction methods - ****************************/ - public boolean execute(InteractionSpec ispec, - Record input, - Record output) throws ResourceException - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".execute"); - this.output = input; - return(true); - } - public Record execute(InteractionSpec ispec, - Record input) throws ResourceException - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".execute"); - return (output); - } - public void close() - throws ResourceException - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".close"); - closed=true; - } - public Connection getConnection() - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".getConnection"); - return con; - } - public ResourceWarning getWarnings() - throws ResourceException - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".getWarnings"); - NotSupportedException nse = new NotSupportedException( - "Interaction.getWarnings is not currently supported"); - throw nse; - } - public void clearWarnings() - throws ResourceException - { - cName = "Interaction"; - logger.log(BasicLevel.DEBUG, cName+".clearWarnings"); - NotSupportedException nse = new NotSupportedException( - "Interaction.clearWarnings is not currently supported"); - throw nse; - } - - - /**************************** - * InteractionSpec methods - ****************************/ - // standard properties - private int interactionVerb; - // SYNC_SEND =0 These interactionVerb values are from - // SYNC_SEND_RECEIVE =1 Constant Field Values of J2EE API - // SYNC_RECEIVE =2 - - private String FunctionName; - private int ExecutionTimeout; - private int FetchSize; - private int FetchDirection; - private int MaxFieldSize; - private int ResultSetType; - private int ResultSetConcurrency; - - public JtestInteraction() { - cName = "InteractionSpec"; - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - logger.log(BasicLevel.DEBUG, cName+".constructor"); - interactionVerb = SYNC_SEND_RECEIVE; - FunctionName = ""; - FetchDirection = 0; - ExecutionTimeout = 2000; - FetchSize = 30; - MaxFieldSize = 444; - ResultSetType = 5; - ResultSetConcurrency = 6; - } - public void setFunctionName(String n) { - FunctionName = n; - } - public String getFunctionName() { - return (FunctionName); - } - public void setInteractionVerb(int verb) { - interactionVerb = verb; - } - public int getInteractionVerb() { - return (interactionVerb); - } - public void setExecutionTimeout(int verb) { - ExecutionTimeout = verb; - } - public int getExecutionTimeout() { - return (ExecutionTimeout); - } - - public void setFetchSize (int x) { - FetchSize = x;; - } - public int getFetchSize () { - return (FetchSize); - } - - public void setFetchDirection(int x) { - FetchDirection = x;; - } - public int getFetchDirection() { - return (FetchDirection); - } - - public void setMaxFieldSize(int x) { - MaxFieldSize = x;; - } - public int getMaxFieldSize() { - return (MaxFieldSize); - } - - public void setResultSetType(int x) { - ResultSetType = x; - } - public int getResultSetType() { - return (ResultSetType); - } - - public void setResultSetConcurrency(int x) { - ResultSetConcurrency = x;; - } - public int getResultSetConcurrency() { - return (ResultSetConcurrency); - } -} diff --git a/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestResourceAdapter.java b/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestResourceAdapter.java deleted file mode 100644 index 745ecabe18..0000000000 --- a/jonas_tests/j2eeca/src/fictional/resourceadapter/JtestResourceAdapter.java +++ /dev/null @@ -1,851 +0,0 @@ -/* - * Created on Jun 11, 2003 - * - * JtestResourceAdapter.java is a Resource Adapter to test the J2EE Connector - * as implemented by JOnAS. This class implements all the connector classes. Each - * connector method simulates actual functionality and returns test results to the - * caller which is a JUnit test program. - */ -package fictional.resourceadapter; - -import java.io.PrintWriter; -import java.io.Serializable; -import java.util.Date; -import java.util.Iterator; -import java.util.Set; -import java.util.Vector; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.resource.NotSupportedException; -import javax.resource.Referenceable; -import javax.resource.ResourceException; -import javax.resource.spi.ConnectionEvent; -import javax.resource.spi.ConnectionEventListener; -import javax.resource.spi.ConnectionManager; -import javax.resource.spi.ConnectionRequestInfo; -import javax.resource.spi.LocalTransaction; -import javax.resource.spi.ManagedConnection; -import javax.resource.spi.ManagedConnectionFactory; -import javax.resource.spi.ManagedConnectionMetaData; -import javax.resource.spi.ResourceAllocationException; -import javax.resource.spi.security.GenericCredential; -import javax.resource.spi.security.PasswordCredential; -import javax.security.auth.Subject; -import javax.transaction.xa.XAResource; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * @author Bob Kruse - * - * used to test the J2EE Connector as implemented by JOnAS. - * - */ -public class JtestResourceAdapter - implements ManagedConnectionFactory, - ConnectionRequestInfo, - //LocalTransaction, - ManagedConnection, - ManagedConnectionMetaData, - GenericCredential, - Serializable, Referenceable -{ - Reference reference; - String timeStamp = ""; - private String defaultUserName=""; // used in ManagedConnection, ConnectionRequestInfo - private String defaultPassword=""; // set by "getter" method - private String userName=""; - private String password=""; - private ManagedConnectionFactory mcf; // loaded by ManagedConnectionFactory - public ConnectionManager cm; // loaded by ManagedConnectionFactory - public LocalTransactionImpl loTx=null; - PrintWriter pw; // App Server sets to null by default - private Vector listeners; - private Logger logger = null; - //Managed environment - public boolean managed; // see ConnectionRequestInfo - public String res_auth; // set by ConnectionFactory.getConnection() - // then put into ManagedConnection when created - public String re_authentication_UserName; // see by ConnectionFactory.getConnection() - public String re_authentication_Password; - public XAResource xar = null; - public XAResourceImpl xari = null; - String cName = ""; - // - // constructor for all "implements" in this class - public JtestResourceAdapter() - { - if (logger == null) { - logger = Log.getLogger("fictional.resourceadapter"); - } - timeStamp = Long.toString(System.currentTimeMillis()); // unique for this obj - forceMatchNull=false; - managed = true; - closed = true; // Managed Connection - connDate = null; // Managed Connection - listeners = new Vector(); // used in ManagedConnection - pw = null; - xar = null; // used in ManagedConnection - xari = null; - loTx = null; // used in ManagedConnection - } - - private String impl(Object obj) { - if (obj instanceof ManagedConnectionFactory) { - return "ManagedConnectionFactory"; - } else if (obj instanceof ConnectionRequestInfo) { - return "ConnectionRequestInfo"; - } else if (obj instanceof ManagedConnection) { - return "ManagedConnection"; - } else if (obj instanceof ManagedConnectionMetaData) { - return "ManagedConnectionMetaData"; - } else if (obj instanceof GenericCredential) { - return "GenericCredential"; - } else - return "JtestResourceAdapter. Is this an error"; - - } - // ************************ - // ManagedConnectionFactory methods see 5.5.3 - // ************************ - // Referenced classes of package javax.resource.spi: - // ConnectionManager, ConnectionRequestInfo, ManagedConnection - public Object createConnectionFactory(ConnectionManager connectionmanager) - throws ResourceException - { - cm = connectionmanager; - cName="ManagedConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".createConnectionFactory cm="+cm); - Object obj; - obj = new CommonClient(this, connectionmanager); // creates ConnectionFactory - return obj; - } - /** - * - * When the createConnectionFactory method takes no arguments, the resource adapter - * provides a default ConnectionManager instance. This case is used in a non-managed - * application scenario. - * see 5.5.3 - */ - public Object createConnectionFactory() - throws ResourceException - { - cName="ManagedConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+": error - non-managed detected"); - throw new NotSupportedException( - "A non-managed two-tier application environment is not supported in J2EE testing."); - } - public ManagedConnection createManagedConnection(Subject subject, - ConnectionRequestInfo connectionrequestinfo) - throws ResourceException - { - cName="ManagedConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection subject="+subject - +", cri="+connectionrequestinfo); - mcf = (ManagedConnectionFactory) this; - if (subject!=null) { - // - // The application server user's password to the EIS is carried in Subject - // - try { - PasswordCredential pc = getPasswordCredential(mcf, subject, connectionrequestinfo); - if (pc==null) { - logger.log(BasicLevel.DEBUG, cName - +".createManagedConnection PasswordCredential = null, Subject not null."); - } else { - if (pc.getUserName()==null || pc.getUserName().length()==0) { - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection userName=empty"); - } else { - userName = new String(pc.getUserName()); - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" PasswordCredential userName="+userName); - password = new String(pc.getPassword()); // pc.password is char[] - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" PasswordCredential password="+password); - } - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection getPasswordCredential " - +"error: e="+e.toString()); - } - } - - if (connectionrequestinfo != null) { - // - // The client application component user's password is carried in ConnectionRequestInfo - // Use defaults if userName or password is empty - // - JtestResourceAdapter jinfo = (JtestResourceAdapter) connectionrequestinfo; - String s = jinfo.getUserName(); - if (s.length()>0) userName = s; - else - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" ConnectionRequestInfo userName="+s+". Use default="+userName); - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" ConnectionRequestInfo userName="+userName); - s = jinfo.getPassword(); - if (s.length()>0) password = s; - else - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" ConnectionRequestInfo password="+s+". Use default="+password); - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection" - +" ConnectionRequestInfo password="+password); - } - - if (subject==null && connectionrequestinfo==null) { - // - // The default user's password is carried in the ManagedConnectionFactory instance - // - userName=defaultUserName; - password=defaultPassword; - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection default userName="+userName); - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection default password="+password); - } - - Date cDate = new Date(); - try { - // - // Create the ManagedConnection Instance - // - ManagedConnection mc = (ManagedConnection) new JtestResourceAdapter(); - JtestResourceAdapter obj = (JtestResourceAdapter)mc; - obj.setConnDate(cDate); - obj.setMcf(mcf); - obj.setPassword(password); - obj.setUserName(userName); - obj.setRes_Auth(res_auth); - obj.setLogWriter(pw); - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection mc="+mc - +" with connDate="+cDate); - return mc; - } catch (Exception ex) { - logger.log(BasicLevel.DEBUG, cName+".createManagedConnection : error - Exception ex=" - +ex.getMessage()); - throw new ResourceAllocationException(ex.getMessage()); - } - } - boolean forceMatchNull; - public void setMatchNull(boolean truefalse) { - forceMatchNull=truefalse; - } - public ManagedConnection matchManagedConnections(Set connectionSet, - Subject subject, - ConnectionRequestInfo connectionrequestinfo) - throws ResourceException - { - cName="ManagedConnectionFactory"; - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections"); - ManagedConnection mc = null; - if (forceMatchNull) { - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections force new connection"); - return mc; // forces new connection - } - JtestResourceAdapter wmc = null; - Iterator it = connectionSet.iterator(); - int cnt=0; - while (it.hasNext()) { - Object obj = it.next(); - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections " - +"find next ManagedConnection in Set. connectionSet cnt="+ (++cnt)); - if (obj instanceof ManagedConnection) { - // see if ManagedConnection is available - // i.e., no connection handle exists for mc instance - // i.e., the connection is closed - // TODO choose one of the above - wmc = (JtestResourceAdapter) obj; - if (wmc.getCHandle()==null || wmc.isClosed()) { - mc=(ManagedConnection)wmc; - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections " - +"connection handle == null. connectionSet cnt="+cnt); - } else { - // error: connection should not exist J2ee 1.0 pg. 32 - String s = "connection handle should not exist"; - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections " - +"error: "+s+". connectionSet cnt="+cnt); - } - } - } - if (mc==null) - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections mc=null connectionSet cnt="+cnt); - else - logger.log(BasicLevel.DEBUG, cName+".matchManagedConnections with connDate=" - +wmc.getConnDate()); - return mc; - } - // - // The setLogWriter and getLogWriter are used in ManagedConnectionFactory - // and ManagedConnection - // the Application Server calls ManagedConnection.setLogWriter(pw) - // - public void setLogWriter(PrintWriter printwriter) - throws ResourceException - { - if (printwriter!=null) pw = printwriter; - } - - public PrintWriter getLogWriter() - throws ResourceException - { - return pw; - } - // - // config-property processing "setter" properties - // - String ServerName=""; - String PortNumber=""; - String protocol=""; - /** Set the JOnAS config-property.. Default value is "". - * - * @param c1 String of config-property. - * for testng RA. - **/ - public void setServerName(String c1) - { - ServerName = c1; - //logger.log(BasicLevel.DEBUG, cName+".setServerName="+ServerName); - } - public String getServerName() { - return ServerName; - } - public void setPortNumber(String s) - { - PortNumber=s; - //logger.log(BasicLevel.DEBUG, cName+".setPortNumber="+PortNumber); - } - public void setDUserName(String s) - { - defaultUserName=s; - //logger.log(BasicLevel.DEBUG, cName+".setDUserName="+defaultUserName); - } - public void setDPassword(String s) - { - defaultPassword=s; - //logger.log(BasicLevel.DEBUG, cName+".setDPassword="+defaultPassword); - } - public void setProtocol(String s) - { - protocol=s; - //logger.log(BasicLevel.DEBUG, cName+".setProtocol="+protocol); - } - public String getProtocol() - { - return protocol; - } - public ConnectionManager getCM() - { - return cm; - } - public String getRes_Auth() { - return res_auth; - } - public void setRes_Auth(String r) { - res_auth=r; - } - //************************ - // ConnectionRequestInfo - //************************ - // module to add additional connection properties than - // the ones configured for the ConnectionFactory. This - // class is passed to the App Server and will be used - // on matchManagedConnections or createConnection - // methods by the App Server. - // - String Id=""; // used in hashcode() for ConnectionRequestInfo - // - public void setUserName(String u) { - userName=u; - if (cName.length() == 0) cName=impl(this); - logger.log(BasicLevel.DEBUG, cName+".setUserName="+u); - } - public void setPassword(String p) { - password=p; - if (cName.length() == 0) cName=impl(this); - logger.log(BasicLevel.DEBUG, cName+".setPassword="+p); - } - public String getUserName() { - if (cName.length() == 0) cName=impl(this); - logger.log(BasicLevel.DEBUG, cName+".getUserName="+userName); - return userName; - } - public String getPassword() { - if (cName.length() == 0) cName=impl(this); - logger.log(BasicLevel.DEBUG, cName+".getPassword="+password); - return password; - } - private void setId() - { - if (Id == null || Id.length() == 0) - Id=timeStamp; - - } - // - // hashCode and equals method used in ConnectionRequestInfo, - // ManagedConnectionFactory - // and GenericCredential - public int hashCode() - { - int hash = 1; - setId(); - hash = Id.hashCode(); - return hash; - } - public boolean equals(Object obj) - { - boolean match = false; - if (obj==null) { - return match; - } - JtestResourceAdapter other = (JtestResourceAdapter)obj; - if (this.timeStamp.equals(other.getTimeStamp())) match = true; - return match; - } - - // ***************** - // GenericCredential methods - // ***************** - // - String gcID =""; // used in hashcode() for GenericCredential - public String getName() - { - cName="GenericCredential"; - logger.log(BasicLevel.DEBUG, cName+".getName"); - return ""; - } - - public String getMechType() - { - cName="GenericCredential"; - logger.log(BasicLevel.DEBUG, cName+".getMechType"); - return ""; - } - - public byte[] getCredentialData() - throws SecurityException - { - cName="GenericCredential"; - logger.log(BasicLevel.DEBUG, cName+".getCredentialData"); - byte[] x = {0,0}; - return x; - } - - // ***************** - // ManagedConnection methods - // ***************** - // - // Referenced classes of package javax.resource.spi: - // ConnectionRequestInfo, ConnectionEventListener, LocalTransaction, - // ManagedConnectionMetaData - // - // NOTE: Subject is instantiated by Application Server - // - boolean closed; - public ConnectionImpl cHandle; // ManagedConnection mapped 1:1 to a physical connection - private boolean destroyed; //set when destroyed - private Date connDate; //save connection date/time for a ManagedConnection - public boolean inXATrans; - public boolean inLocalTrans; - public boolean sendEvent; - - public int cntListeners() { - cName="ManagedConnection"; - Vector lst = (Vector) listeners.clone(); - int len = lst.size(); - logger.log(BasicLevel.DEBUG, cName+".cntListeners counted="+len); - return len; - } - public ConnectionImpl getCHandle() { - return cHandle; - } - public boolean isClosed() { - return closed; - } - - public Object getConnection(Subject subject, ConnectionRequestInfo connectionrequestinfo) - throws ResourceException - { - cName="ManagedConnection"; - logger.log(BasicLevel.DEBUG, cName+".getConnection *******************"); - if (subject!=null) { - // - // for this code to execute, the following will be present in ra.xml - // true - // - logger.log(BasicLevel.DEBUG, cName+".getConnection via PasswordCredential"); - logger.log(BasicLevel.DEBUG, "true"); - try { - PasswordCredential pc = getPasswordCredential(mcf, subject, connectionrequestinfo); - if (pc==null) { - logger.log(BasicLevel.DEBUG, cName+".getConnection PasswordCredential = null"); - } else { - if (pc.getUserName()==null || pc.getUserName().length()==0) { - logger.log(BasicLevel.DEBUG, cName+".getConnection userName=empty"); - } else { - String re_authentication_UserName = new String(pc.getUserName()); - String re_authentication_Password = new String(pc.getPassword()); - logger.log(BasicLevel.DEBUG, cName+".getConnection" - +" re-authentication userName="+re_authentication_UserName); - logger.log(BasicLevel.DEBUG, cName+".getConnection" - +" compare to existing userName="+userName); - logger.log(BasicLevel.DEBUG, cName+".getConnection" - +" re-authentication password="+re_authentication_Password); - logger.log(BasicLevel.DEBUG, cName+".getConnection" - +" compare to existing password="+password); - } - } - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getConnection getPasswordCredential error: e=" - +e.toString()); - } - } - // Code for reauthentication-support when Subject==null and ConnectionRequestInfo - // contains different password and username - // - if (connectionrequestinfo!=null) { - logger.log(BasicLevel.DEBUG, impl(this)+".getConnection via ConnectionRequestInfo"); - logger.log(BasicLevel.DEBUG, "true"); - JtestResourceAdapter jcri = (JtestResourceAdapter) connectionrequestinfo; - String re_authentication_UserName = new String(jcri.getUserName()); - String re_authentication_Password = new String(jcri.getPassword()); - logger.log(BasicLevel.DEBUG, - " re-authentication userName="+re_authentication_UserName+ - " compare to existing userName="+userName); - logger.log(BasicLevel.DEBUG, - " re-authentication password="+re_authentication_Password+ - " compare to existing password="+password); - } - Object obj = new ConnectionImpl(this); - cHandle = (ConnectionImpl)obj; - closed=false; - destroyed=false; - return obj; - } - public void destroy() - throws ResourceException - { - cName="ManagedConnection"; - logger.log(BasicLevel.DEBUG, cName+".destroy"); - // the physical connection is closed - destroyed = true; - closed = true; - cHandle=null; - } - - public void cleanup() - throws ResourceException - { - cName="ManagedConnection"; - // the physical connection stays open - // but all connection handles invalidated - logger.log(BasicLevel.DEBUG, cName+".cleanup"); - cHandle=null; - closed=true; - - } - - public void associateConnection(Object obj) - throws ResourceException - { - cName="ManagedConnection"; - logger.log(BasicLevel.DEBUG, cName+".associateConnection"); - if (obj instanceof ConnectionImpl) { - ConnectionImpl conn = (ConnectionImpl) obj; - conn.associateConnection(this); // TODO may need more arg to associate - } else { - logger.log(BasicLevel.DEBUG, cName+".associateConnection "+ - "error: obj not instanceof ConnectionImpl"); - } - } - - public void addConnectionEventListener(ConnectionEventListener listener) - { - cName="ManagedConnection"; - listeners.addElement(listener); - logger.log(BasicLevel.DEBUG, cName+".addConnectionEventListener listener=" - +listener); - } - - public void removeConnectionEventListener(ConnectionEventListener listener) - { - cName="ManagedConnection"; - Vector lst = (Vector) listeners.clone(); - int len = lst.size(); - logger.log(BasicLevel.DEBUG, cName+".removeConnectionEventListener " - +"Number of listeners="+len); - try { - listeners.removeElement(listener); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".removeConnectionEventListener error: " - +"unable to remove listener"); - } - lst = (Vector) listeners.clone(); - len = lst.size(); - logger.log(BasicLevel.DEBUG, cName+".removeConnectionEventListener listener=" - +listener+" was removed. Number listeners left="+len); - } - - public XAResource getXAResource() - throws ResourceException - { - cName="ManagedConnection"; - if (xar==null) - xar = (XAResource)new XAResourceImpl(this); - logger.log(BasicLevel.DEBUG, cName+".getXAResource xar="+xar); - return xar; - } - public void resetXar() { - // dissociate XAResource Xid from this ManagedConnection - xar=null; - xari=null; - } - public XAResourceImpl getCurrentXar() - throws ResourceException - { - xari=(XAResourceImpl)xar; - return xari; - } - - public javax.resource.cci.LocalTransaction getLocalTransaction(boolean sendEvent) - throws ResourceException - { - cName="ManagedConnection"; - LocalTransactionImpl lt = null; - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction(sendEvent)"); - this.sendEvent=sendEvent; - try { - lt = (LocalTransactionImpl) getLocalTransaction(); - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction(sendEvent) lt="+lt); - } catch (Exception e) { - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction(sendEvent) " - +"error: "+e.getMessage()); - } - return (lt); - } - - public LocalTransaction getLocalTransaction() - throws ResourceException - { - cName="ManagedConnection"; - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction"); - if (loTx==null) { - loTx = new LocalTransactionImpl(this, sendEvent); - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction new loTx="+loTx); - return loTx; - } else { - logger.log(BasicLevel.DEBUG, cName+".getLocalTransaction old loTx="+loTx); - loTx.setSendEvent(sendEvent); - return loTx; - } - } - - public ManagedConnectionMetaData getMetaData() - throws ResourceException - { - cName="ManagedConnection"; - logger.log(BasicLevel.DEBUG, cName+".getMetaData"); - return (ManagedConnectionMetaData) new JtestResourceAdapter(); - } - /** Send the specified event to all the EventListeners that have - * registered with this ManagedConnection instance. - * - * @param int Event type to send - * @param Exception if one is associated with this event - * @param ch Connection handle associated with this event - * @throws ResourceException generic exception if operation fails - * @throws IllegalArgumentException if an invalid event is specified - **/ - public void sendEvent(int eType, Exception ex, Object ch) throws ResourceException - { - cName="ManagedConnection"; - Vector lst = (Vector) listeners.clone(); - ConnectionEvent ce = null; - if (ex==null) { - ce = new ConnectionEvent(this, eType); - } - else - ce = new ConnectionEvent(this, eType, ex); - - if (ch != null) - ce.setConnectionHandle(ch); - else - logger.log(BasicLevel.DEBUG, cName+".sendEvent ch==null"); - - int len = lst.size(); - for (int i=0; iRESET) { - xidState=COMMITTED; - logger.log(BasicLevel.DEBUG, impl(this)+".commit From State="+curState+ - " to State="+xidState+" xid="+xid+" onePhase="+onePhase); - } - else { - logger.log(BasicLevel.DEBUG, impl(this)+".commit error: State="+xidState - +" should be="+STARTED+"or more. xid="+xid+" onePhase="+onePhase); - } - } - public void end(Xid xid, int flags) throws XAException - { - int curState=xidState; - xidState=ENDED; - JtestResourceAdapter jmc = (JtestResourceAdapter) mc; - jmc.resetXar(); - logger.log(BasicLevel.DEBUG, impl(this)+".end From State="+curState+ - " to State="+xidState+" for xid="+xid+" flags="+flags); - } - public void forget(Xid xid) throws XAException - { - logger.log(BasicLevel.DEBUG, impl(this)+".forget State="+xidState); - xidState=FORGOT; - } - public int prepare(Xid xid) throws XAException - { - logger.log(BasicLevel.DEBUG, impl(this)+".prepare State="+xidState); - xidState=PREPARED; - //return 1; - return XA_OK; - } - /** - * Obtain a list of prepared transaction branches from a resource manager. - */ - public Xid[] recover(int flag) throws XAException - { - recoverFlag=flag; - logger.log(BasicLevel.DEBUG, impl(this)+".recover State="+xidState); - return xidArray; - } - public void rollback(Xid xid) throws XAException - { - int curState=xidState; - if (xidState >= STARTED) { - xidState=ROLLEDBACK; - logger.log(BasicLevel.DEBUG, impl(this)+".rollback From State="+curState+ - " to State="+xidState+" xid="+xid); - } - else { - logger.log(BasicLevel.DEBUG, impl(this)+".rollback error: State="+xidState - +" should be="+STARTED+"or more. xid="+xid); - } - } - public void start(Xid xid, int flags) throws XAException - { - currentXid=xid; - xFlags=flags; - int curState=xidState; - if (xidState==RESET) { - xidState=STARTED; - logger.log(BasicLevel.DEBUG, impl(this)+".start From State="+curState+ - " to State="+xidState+" xid="+xid+" flags="+flags); - } - else { - logger.log(BasicLevel.DEBUG, impl(this)+".start error: State="+xidState - +" should be="+RESET+" xid="+xid+" flags="+flags); - } - } - public int getTransactionTimeout() throws XAException - { - logger.log(BasicLevel.DEBUG, impl(this)+".getTransactionTimeout timeout="+timeout); - return timeout; - } - public boolean setTransactionTimeout(int seconds) throws XAException - { - timeout=seconds; - logger.log(BasicLevel.DEBUG, impl(this)+".setTransactionTimeout seconds="+seconds); - return true; - } - /** - * Determine if the resource manager instance represented by the target object is the - * same as the resource manager instance represented by the parameter xares - */ - public boolean isSameRM(XAResource xares) throws XAException - { - boolean a = true; - logger.log(BasicLevel.DEBUG, impl(this)+".isSameRM xares="+xares+" return="+a); - return a; - } -} diff --git a/jonas_tests/jaxws/jaxws-felix/pom.xml b/jonas_tests/jaxws/jaxws-felix/pom.xml deleted file mode 100644 index 0f3095754e..0000000000 --- a/jonas_tests/jaxws/jaxws-felix/pom.xml +++ /dev/null @@ -1,519 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.1.0-RC3-SNAPSHOT - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests - felix - pom - JOnAS :: Tests :: JAXWS :: Felix - Tests of JOnAS JAXWS - - - - - 1.0.2 - - - 5.1.0-RC1 - 0.0.4 - 1.1.0-RC2-SNAPSHOT - 2.1.12 - 3.0.5 - 1.0.1 - 2.1.3 - 2.1.3 - 1.1.2 - 2.9.3-patch - 3.2.2 - 1.7.1 - 1.6.3 - 1.5.4 - 1.6.1 - 1.6 - 5.2.1 - 2.1.4 - - - 2.2.3-jonas-patch-20071018 - 1.3 - - - 1.0.15 - - - 1.0.16 - - - 6.1.5 - 6.0.18 - - - 1.2.0 - 1.2.0 - - 1.4.1 - 1.0.2 - 0.9.0-incubator-2007.12.14 - 1.2.1 - 1.0.10 - 1.1.0-2008.07.10 - - 1.2.0 - - 2.0.9 - - 1.3 - 1.3 - - - 2.0-alpha-1 - - - 1.2_08 - - - 2.0.9 - - - 1.0rc1 - 2.0rc5 - - - - - - org.ow2.easybeans.osgi - easybeans-osgi-itests-base - ${easybeans.version} - tests - test - - - - org.testng - testng - 5.8 - jdk15 - - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans.version} - test - - - org.ow2.easybeans.osgi - easybeans-client-fix - ${easybeans.version} - test - - - org.ow2.jonas.ws.jaxws.itests - tests - ${project.version} - test - - - com.sun.xml.messaging.saaj - saaj-impl - 1.3.2 - - - - - - - ow2 - OW2 repository - http://maven.ow2.org/maven2 - - true - - - false - - - - ow2-snapshot - OW2 repository - http://maven.ow2.org/maven2-snapshot - - true - - - false - - - - - - - elca-services - http://el4.elca-services.ch/el4j/maven2repository - - true - - - false - - - - - - - - install - - - - - - maven-dependency-plugin - - - unpack-assembly - package - - unpack - - - - - - org.ow2.jonas.assemblies.profiles - jonas-full - ${project.version} - bin - zip - - - - ${project.build.directory} - - true - true - - - - - - - - maven-antrun-plugin - - - package - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - run - - - - - - - - org.ow2.util.maven - maven-osgi-plugin-launcher-core - - felix - - - ${basedir}/src/main/config/config.properties - - - ${basedir}/src/main/config/jonas-autodeploy-bundles.properties - - - - jonas.base - ${basedir}/target/jonas_base - - - jonas.root - ${basedir}/target/jonas-full-${project.version} - - - java.security.auth.login.config - ${basedir}/target/jonas-full-${project.version}/conf/jaas.config - - - m2.repository - ${settings.localRepository} - - - java.naming.factory.initial - - org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory - - - - java.security.policy - ${basedir}/target/jonas-full-${project.version}/conf/java.policy - - - java.security.auth.login.config - ${basedir}/target/jonas-full-${project.version}/conf/jaas.config - - - - java.endorsed.dirs - ${basedir}/target/jonas-full-${project.version}/lib/endorsed/ - - - ConfigHome - ${basedir}/target/jonas_base/conf/ - - - - - - javax.security.jacc.PolicyConfigurationFactory.provider - - - org.ow2.jonas.lib.security.jacc.JPolicyConfigurationFactory - - - - monolog.wrappers - - mx4j.log.CommonsLogger,mx4j.log.Logger,java.util.logging.Logger,org.ow2.util.log.JDKLogger, - org.apache.juli.logging.DirectJDKLog,org.ow2.carol.util.configuration.TraceCarol - - - - java.awt.headless - true - - - ipojo.log.level - ERROR - - - - - bootstrap.kill.timeout - 420 - - - - - true - - - - ${itestsdebug} - 8000 - - - - 30 - - - 10 - - - - - - ${basedir}/target/jonas_base/conf/ - - - - - - - - start-framework - pre-integration-test - - start - - - - - stop-framework - post-integration-test - - stop - - - - - - org.ow2.util.maven - maven-osgi-plugin-launcher-framework-felix - ${ow2-util-plugin.version} - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${basedir}/target - - - ${basedir}/src/main/config/testng.xml - - - - - rmi.port - 19099 - - - jonas.root - ${basedir}/target/jonas-full-${project.version}/ - - - jonas.base - ${basedir}/target/jonas_base/ - - - - - ${basedir}/target/jonas-full-${project.version}/lib/client.jar - - - - - - testing-JOnAS-Full - integration-test - - test - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-felix/src/main/config/config.properties b/jonas_tests/jaxws/jaxws-felix/src/main/config/config.properties deleted file mode 100644 index 66ce492366..0000000000 --- a/jonas_tests/jaxws/jaxws-felix/src/main/config/config.properties +++ /dev/null @@ -1,183 +0,0 @@ -# =================================================================== # -# Felix Configuration file (for easybeans only) # -# =================================================================== # - -# -# Framework config properties. -# -org.osgi.framework.bootdelegation=com.sun.corba.*,\ - com.sun.org.apache.xalan.internal.*,\ - com.sun.org.apache.xerces.internal.*,\ - com.sun.org.apache.xml.internal.*,\ - com.sun.org.apache.xpath.internal.* - -# Packages exported by the underlying JVM (and System bundle) -org.osgi.framework.system.packages org.osgi.framework; version=1.4.0, \ - org.osgi.service.packageadmin; version=1.2.0, \ - org.osgi.service.startlevel; version=1.1.0, \ - org.osgi.service.url; version=1.0.0, \ - org.osgi.util.tracker; version=1.3.3, \ - javax.accessibility; \ - javax.activity; \ - javax.imageio; \ - javax.crypto;\ - javax.crypto.spec;\ - javax.crypto.interfaces;\ - javax.imageio.event; \ - javax.imageio.metadata; \ - javax.imageio.plugins.bmp; \ - javax.imageio.plugins.jpeg; \ - javax.imageio.spi; \ - javax.imageio.stream; \ - javax.management; \ - javax.management.loading; \ - javax.management.modelmbean; \ - javax.management.monitor; \ - javax.management.openmbean; \ - javax.management.relation; \ - javax.management.remote; \ - javax.management.remote.rmi; \ - javax.management.timer; \ - javax.naming; \ - javax.naming.directory; \ - javax.naming.event; \ - javax.naming.ldap; \ - javax.naming.spi; \ - javax.net; \ - javax.net.ssl; \ - javax.print; \ - javax.print.attribute; \ - javax.print.attribute.standard; \ - javax.print.event; \ - javax.rmi; \ - javax.rmi.CORBA; \ - javax.rmi.ssl; \ - javax.security.auth; \ - javax.security.auth.callback; \ - javax.security.auth.kerberos; \ - javax.security.auth.login; \ - javax.security.auth.spi; \ - javax.security.auth.x500; \ - javax.security.cert; \ - javax.security.sasl; \ - javax.sound.midi; \ - javax.sound.midi.spi; \ - javax.sound.sampled; \ - javax.sound.sampled.spi; \ - javax.sql; \ - javax.sql.rowset; \ - javax.sql.rowset.serial; \ - javax.sql.rowset.spi; \ - javax.swing; \ - javax.swing.border; \ - javax.swing.colorchooser; \ - javax.swing.event; \ - javax.swing.filechooser; \ - javax.swing.plaf; \ - javax.swing.plaf.basic; \ - javax.swing.plaf.metal; \ - javax.swing.plaf.multi; \ - javax.swing.plaf.synth; \ - javax.swing.table; \ - javax.swing.text; \ - javax.swing.text.html; \ - javax.swing.text.html.parser; \ - javax.swing.text.rtf; \ - javax.swing.tree; \ - javax.swing.undo; \ - javax.xml; \ - javax.xml.datatype; \ - javax.xml.namespace; \ - javax.xml.parsers; \ - javax.xml.transform; \ - javax.xml.transform.dom; \ - javax.xml.transform.sax; \ - javax.xml.transform.stream; \ - javax.xml.validation; \ - javax.xml.xpath; \ - org.ietf.jgss; \ - org.apache.xpath; \ - org.apache.xpath.compiler; \ - org.apache.xpath.functions; \ - org.apache.xpath.objects; \ - org.apache.xml.utils; \ - org.jacorb.orb.etf; \ - org.jacorb.orb.iiop; \ - org.jacorb.orb.portableInterceptor; \ - org.jacorb.orb.rmi; \ - org.jacorb.poa; \ - org.omg.CORBA; \ - org.omg.CORBA_2_3; \ - org.omg.CORBA_2_3.portable; \ - org.omg.CORBA.DynAnyPackage; \ - org.omg.CORBA.ORBPackage; \ - org.omg.CORBA.portable; \ - org.omg.CORBA.TypeCodePackage; \ - org.omg.CosNaming; \ - org.omg.CosNaming.NamingContextExtPackage; \ - org.omg.CosNaming.NamingContextPackage; \ - org.omg.CosTransactions; \ - org.omg.CSI; \ - org.omg.CSIIOP; \ - org.omg.Dynamic; \ - org.omg.DynamicAny; \ - org.omg.DynamicAny.DynAnyFactoryPackage; \ - org.omg.DynamicAny.DynAnyPackage; \ - org.omg.ETF; \ - org.omg.GSSUP; \ - org.omg.IOP; \ - org.omg.IOP.CodecFactoryPackage; \ - org.omg.IOP.CodecPackage; \ - org.omg.Messaging; \ - org.omg.PortableInterceptor; \ - org.omg.PortableInterceptor.ORBInitInfoPackage; \ - org.omg.PortableServer; \ - org.omg.PortableServer.CurrentPackage; \ - org.omg.PortableServer.POAManagerPackage; \ - org.omg.PortableServer.POAPackage; \ - org.omg.PortableServer.portable; \ - org.omg.PortableServer.ServantLocatorPackage; \ - org.omg.SendingContext; \ - org.omg.SSLIOP; \ - org.omg.stub.java.rmi; \ - org.omg.stub.javax.management.remote.rmi; \ - org.w3c.dom; \ - org.w3c.dom.bootstrap; \ - org.w3c.dom.css; \ - org.w3c.dom.events; \ - org.w3c.dom.html; \ - org.w3c.dom.ls; \ - org.w3c.dom.ranges; \ - org.w3c.dom.stylesheets; \ - org.w3c.dom.traversal; \ - org.w3c.dom.views; \ - org.w3c.dom.xpath; \ - org.xml.sax; \ - org.xml.sax.ext; \ - org.xml.sax.helpers; \ - sun.rmi.registry; \ - sun.rmi.server; \ - sun.rmi.transport; \ - sun.security.util; \ - sun.security.provider; \ - sun.util.calendar; \ - version="1.5.0" - -#felix.auto.start.1= \ -# file:bundle/org.apache.felix.shell-1.0.0.jar \ -# file:bundle/org.apache.felix.shell.tui-1.0.0.jar \ -# file:bundle/org.apache.felix.bundlerepository-1.0.0.jar - -org.osgi.framework.startlevel=1 -felix.startlevel.bundle=1 - -# Invalid fragment bundles throw an 'exception' by default, but -# uncomment the follow line to have them log a 'warning' instead. -felix.fragment.validation=warning - -# -# Bundle config properties. -# -#org.osgi.service.http.port=8080 -obr.shell.telnet=on - diff --git a/jonas_tests/jaxws/jaxws-felix/src/main/config/jonas-autodeploy-bundles.properties b/jonas_tests/jaxws/jaxws-felix/src/main/config/jonas-autodeploy-bundles.properties deleted file mode 100644 index 936ec545a3..0000000000 --- a/jonas_tests/jaxws/jaxws-felix/src/main/config/jonas-autodeploy-bundles.properties +++ /dev/null @@ -1,73 +0,0 @@ -# Generated Mon May 18 20:03:53 CST 2009 by JOnAS. - -install.level.1 org.apache.felix:org.apache.felix.shell.tui:1.0.2 - -start.level.1 org.apache.felix:org.apache.felix.shell:1.0.2, \ - org.apache.felix:org.apache.felix.bundlerepository:1.2.1, \ - org.apache.felix:org.apache.felix.ipojo:1.2.0, \ - org.apache.felix:org.apache.felix.ipojo.arch:1.2.0, \ - org.ow2.bundles:ow2-bundles-externals-commons-collections:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-bundles-externals-commons-logging:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-archive-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-archive-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-deploy-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-deploy-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-scan-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-scan-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-common-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-common-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-car-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-car-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-ws-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-ws-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-war-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-ee-metadata-war-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-event-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-file:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-i18n:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-jmx-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-log:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-pool-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-url:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-xml:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-schemas:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-fetcher-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-fetcher-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-fetcher-impl-url:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-fetcher-impl-maven2:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-fetcher-impl-obr:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-deploy-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-deploy-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-repository-api:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-repository-impl:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-monitor:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-reader:1.0.16-SNAPSHOT, \ - org.ow2.bundles:util-plan-deployer:1.0.16-SNAPSHOT, \ - org.ow2.jonas.osgi:javaee-api:5.1.0-RC3-SNAPSHOT, \ - org.ow2.bundles:ow2-bundles-externals-jaxb2:1.0.16-SNAPSHOT, \ - org.ow2.bundles:ow2-util-xmlconfig:1.0.16-SNAPSHOT, \ - org.ow2.jonas:jonas-extension-loader:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.easybeans.osgi:easybeans-api:1.1.0-RC2-SNAPSHOT, \ - org.ow2.jonas:jonas-services-api:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas.osgi:monolog:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-version:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-commons:5.1.0-RC3-SNAPSHOT, \ - org.apache.felix:org.apache.felix.configadmin:1.0.10, \ - org.ow2.jonas:bootstrap:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.carol:carol-interceptors:1.0.1, \ - org.ow2.jonas:jonas-naming:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.jonas:jonas-carol-registry:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.jonas:jonas-management-javaee:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-jmx:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.jonas:jonas-deployment:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-domain:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-management-reconfig:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-security-auth:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-security-jacc:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-security-jacc-handlers:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-timer:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-ejb-container-svc:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-ejb-container:5.1.0-RC3-SNAPSHOT, \ - org.ow2.jonas:jonas-service-manager:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.jonas:jonas-mbeans:5.1.0-RC3-SNAPSHOT:{ipojo}, \ - org.ow2.jonas:jndi-interceptors:5.1.0-RC3-SNAPSHOT:{ipojo} diff --git a/jonas_tests/jaxws/jaxws-felix/src/main/config/testng.xml b/jonas_tests/jaxws/jaxws-felix/src/main/config/testng.xml deleted file mode 100644 index 49ba8e8bf5..0000000000 --- a/jonas_tests/jaxws/jaxws-felix/src/main/config/testng.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/ejb3/pom.xml b/jonas_tests/jaxws/jaxws-test-base/ejb3/pom.xml deleted file mode 100644 index 3e9d55ee84..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/ejb3/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.ejb - ejb3 - jar - JOnAS :: Tests :: JAXWS :: Tests :: Base :: EJB3 - http://maven.apache.org - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - ejb3 - - diff --git a/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/Hello.java b/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/Hello.java deleted file mode 100644 index 56d95e567e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/Hello.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - - -public interface Hello -{ - public abstract String sayHello(String s); -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/HelloBean.java b/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/HelloBean.java deleted file mode 100644 index 7aacc3ca47..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/ejb3/src/main/java/org/ow2/jonas/ejb3/HelloBean.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - -import javax.ejb.Remote; -import javax.ejb.Stateless; - -// Referenced classes of package org.ow2.jonas.ws.axis2.test.ejb3: -// Hello - -@Remote(Hello.class) -@Stateless -public class HelloBean - implements Hello -{ - - public HelloBean() - { - } - - public String sayHello(String str) - { - System.out.println((new StringBuilder("HelloWorldEJB3: ")).append(str).toString()); - return "HelloWorld EJB3!"; - } -} \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/pom.xml deleted file mode 100644 index 6747e9e4de..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb-descriptor - jar - JOnAS :: Tests :: JAXWS :: Tests :: Base :: EJB :: Descriptor - http://maven.apache.org - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-ejb-descriptor - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBean_descriptor.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBean_descriptor.java deleted file mode 100644 index dd6c8a8262..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBean_descriptor.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: xiaoda - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.jws.WebMethod; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * @author xiaoda - * - */ -@WebService(name="JAXWSBean_descriptor", - serviceName="JAXWSBean_descriptor", - wsdlLocation="META-INF/wsdl/JAXWSBean_descriptor.wsdl") - -@Stateless(mappedName="JAXWSBean_With_WebMethod") -@Remote(JAXWSGreeter.class) -@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -public class JAXWSBean_descriptor implements JAXWSGreeter { - - @WebMethod(exclude=false) - public String greetMe(final String me) { - System.out.println("i'm a ejb ws: " + me); - if (!"foo bar".equals(me)) { - throw new RuntimeException("Wrong parameter"); - } - return "Hello " + me; - } - - - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java deleted file mode 100644 index a77053df35..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: xiaoda - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - - -public interface JAXWSGreeter { - - public String greetMe(String me); - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/easybeans.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/easybeans.xml deleted file mode 100644 index b1118d6229..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/easybeans.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - JAXWSBean_descriptor - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/webservices.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/webservices.xml deleted file mode 100644 index 05c4da6a48..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/webservices.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - ejb-descriptor - META-INF/wsdl/JAXWSBean_descriptor.wsdl - - JAXWSBean_descriptor - ejb:JAXWSBean_descriptor - ejb:JAXWSBean_descriptorPort - false - org.ow2.jonas.ws.jaxws.test.ejb.JAXWSGreeter - - JAXWSBean_descriptor - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/wsdl/JAXWSBean_descriptor.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/wsdl/JAXWSBean_descriptor.wsdl deleted file mode 100644 index 7e6c62ef38..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-descriptor/src/main/resources/META-INF/wsdl/JAXWSBean_descriptor.wsdl +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/pom.xml deleted file mode 100644 index 58617328da..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb-injection - jar - JOnAS :: Tests :: JAXWS :: Tests :: Base :: EJB :: Injection - http://maven.apache.org - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-ejb-injection - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java deleted file mode 100644 index 56d95e567e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - - -public interface Hello -{ - public abstract String sayHello(String s); -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanInjection.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanInjection.java deleted file mode 100644 index e536e3f0be..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanInjection.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.ejb.Remote; -import javax.ejb.SessionContext; -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.jws.WebMethod; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.soap.SOAPFaultException; - -import org.ow2.jonas.ejb3.Hello; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * - * @author xiaoda - * - */ -@WebService(name = "JAXWSBeanInjection", serviceName = "JAXWSBeanInjection", wsdlLocation = "META-INF/wsdl/JAXWSBeanInjection.wsdl") -@Stateless(mappedName = "JAXWSBeanInjection") -@Remote(JAXWSGreeter.class) -@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) -public class JAXWSBeanInjection implements JAXWSGreeter { - - @Resource - private SessionContext sessionContext; - - @Resource - WebServiceContext wsContext; - - @EJB(name = "Hello", beanInterface=Hello.class,beanName="org.ow2.jonas.ejb3.HelloBean") - Hello hello; - - @WebMethod(exclude = false) - public String greetMe(final String me) { - String res = new String(); - res = me; - - if (wsContext != null) { - System.out.println("wsContext is not null"); - res = res + "wsContext"; - } - if (hello != null) { - System.out.println("hello is not null"); - res = res + "hello"; - } - - if (sessionContext != null) { - System.out.println("sessionContext is not null"); - res = res + "sessionContext"; - } - return res; - } - - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - throw new SOAPFaultException(fault); - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java deleted file mode 100644 index 6f646d0ec3..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - - -public interface JAXWSGreeter { - - public String greetMe(String me); - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/resources/META-INF/wsdl/JAXWSBeanInjection.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/resources/META-INF/wsdl/JAXWSBeanInjection.wsdl deleted file mode 100644 index 7ca02a3b1e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-injection/src/main/resources/META-INF/wsdl/JAXWSBeanInjection.wsdl +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/pom.xml deleted file mode 100644 index 7f1e75eeb7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb-interceptor - jar - JOnAS :: Tests :: JAXWS :: Tests :: Base :: EJB :: Interceptor - http://maven.apache.org - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-ejb-interceptor - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwihtInterceptors.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwihtInterceptors.java deleted file mode 100644 index 445b925060..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwihtInterceptors.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.interceptor.AroundInvoke; -import javax.interceptor.Interceptors; -import javax.interceptor.InvocationContext; -import javax.jws.WebService; -import javax.jws.WebMethod; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * @author xiaoda - * - */ -@WebService(name="EJBWSwihtInterceptors", - serviceName="EJBWSwihtInterceptors", - wsdlLocation="META-INF/wsdl/EJBWSwihtInterceptors.wsdl", - endpointInterface="org.ow2.jonas.ws.jaxws.test.ejb.JAXWSGreeterForWithWM") - -@Stateless(mappedName="JAXWSBeanWithWebMethod") -@Remote(JAXWSGreeterForWithWM.class) -@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -@Interceptors(GreeterInterceptor.class) -public class EJBWSwihtInterceptors implements JAXWSGreeter { - - private String response = "Hello"; - - @WebMethod - public String greetMe(final String me) { - System.out.println("i'm a ejb ws: " + me); - return response + me; - } - - @WebMethod - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - - public String greetYou(final String you) { - System.out.println("i'm a ejb ws: " + you); - System.out.println("greet you"); - return "Hi " + you; - } - - public String sayHello(String name) { - return "Hello World! " + name; - } - - - @AroundInvoke - public Object trace(InvocationContext ic) throws Exception { - //ic.getParameters()[0] = "inceptor"; - response = response + " intercepted"; - System.out.println("Intercepted method : " + ic.getMethod().getName()); - return ic.proceed(); - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwithAroundInvoke.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwithAroundInvoke.java deleted file mode 100644 index 166aacb3ad..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/EJBWSwithAroundInvoke.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.interceptor.AroundInvoke; -import javax.interceptor.InvocationContext; -import javax.jws.WebService; -import javax.jws.WebMethod; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * @author xiaoda - * - */ -@WebService(name="EJBWSwithAroundInvoke", - serviceName="EJBWSwithAroundInvoke", - wsdlLocation="META-INF/wsdl/EJBWSwithAroundInvoke.wsdl", - endpointInterface="org.ow2.jonas.ws.jaxws.test.ejb.JAXWSGreeterForWithWM") - -@Stateless(mappedName="JAXWSBeanWithWebMethod") -@Remote(JAXWSGreeterForWithWM.class) -@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -public class EJBWSwithAroundInvoke implements JAXWSGreeter { - - private String response = "Hello"; - - @WebMethod - public String greetMe(final String me) { - System.out.println("i'm a ejb ws: " + me); - return response + me; - } - - @WebMethod - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - - public String greetYou(final String you) { - System.out.println("i'm a ejb ws: " + you); - System.out.println("greet you"); - return "Hi " + you; - } - - public String sayHello(String name) { - return "Hello World! " + name; - } - - - @AroundInvoke - public Object trace(InvocationContext ic) throws Exception { - //ic.getParameters()[0] = "inceptor"; - response = response + " intercepted"; - System.out.println("Intercepted method : " + ic.getMethod().getName()); - return ic.proceed(); - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/GreeterInterceptor.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/GreeterInterceptor.java deleted file mode 100644 index 9056dc9a04..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/GreeterInterceptor.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.interceptor.AroundInvoke; -import javax.interceptor.InvocationContext;/** - * This class intercepts Business interfaces methods - */ -public class GreeterInterceptor { /** - * Invocation counter - */ - private int counter = 0; /** - * Count the invocations of a bean. - * @param ic InvocationContext - * @return proceeded method - * @throws Exception if something wrong occurs. - */ - @AroundInvoke - public Object count(InvocationContext ic) throws Exception { synchronized(this) { - counter++; - System.out.println("Method '" + ic.getMethod().getName() - + "' invoked " + counter + " times."); - return ic.proceed(); - } - } -} \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java deleted file mode 100644 index bec8bb79a5..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - - -public interface JAXWSGreeter { - - public String sayHello(String name); - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java deleted file mode 100644 index cff98020c5..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.jws.WebService; - -@WebService -public interface JAXWSGreeterForWithWM { - - public String greetMe(final String me); - public void greetMeFault(final String me); -} \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwihtInterceptors.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwihtInterceptors.wsdl deleted file mode 100644 index 2bebc39934..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwihtInterceptors.wsdl +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwithAroundInvoke.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwithAroundInvoke.wsdl deleted file mode 100644 index d3d2bb6e40..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-interceptor/src/main/resources/META-INF/wsdl/EJBWSwithAroundInvoke.wsdl +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/pom.xml deleted file mode 100644 index ea622aee8f..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb - jar - JOnAS :: Tests :: JAXWS :: Tests :: Base :: EJB :: Webmethod - http://maven.apache.org - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-ejb-webmethod - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithWebMethod.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithWebMethod.java deleted file mode 100644 index 801fe966f2..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithWebMethod.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.jws.WebMethod; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * @author xiaoda - * - */ -@WebService(name="JAXWSBeanWithWebMethod", - serviceName="JAXWSBeanWithWebMethod", - wsdlLocation="META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl", - endpointInterface="org.ow2.jonas.ws.jaxws.test.ejb.JAXWSGreeterForWithWM") - -@Stateless(mappedName="JAXWSBeanWithWebMethod") -@Remote(JAXWSGreeterForWithWM.class) -@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -public class JAXWSBeanWithWebMethod implements JAXWSGreeter { - - - @WebMethod - public String greetMe(final String me) { - System.out.println("i'm a ejb ws: " + me); - return "Hello " + me; - } - - @WebMethod - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - - public String greetYou(final String you) { - System.out.println("i'm a ejb ws: " + you); - System.out.println("greet you"); - return "Hi " + you; - } - - public String sayHello(String name) { - return "Hello World! " + name; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithoutWebMethod.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithoutWebMethod.java deleted file mode 100644 index 14a4f01b75..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSBeanWithoutWebMethod.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.ejb.Remote; -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.jws.soap.SOAPBinding; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPFactory; -import javax.xml.soap.SOAPFault; -import javax.xml.ws.soap.SOAPFaultException; - -/** - * This is an EJB based JAXWS web service with @WebMethod annotation. - * @author xiaoda - * - */ - -// Here we do not specify the SEI, web service container will generate a default SEI -// this SEI will contain all @WebMethod annotated methods and public methods -// see specs Web Services for Java EE, Version 1.2 # chapter 3.3 -@WebService(name="JAXWSBeanWithoutWebMethod", - serviceName="JAXWSBeanWithoutWebMethod", - wsdlLocation="META-INF/wsdl/JAXWSBeanWithoutWebMethod.wsdl") - -@Stateless(mappedName="JAXWSBeanWithoutWebMethod") -@Remote(JAXWSGreeter.class) -@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, - use=SOAPBinding.Use.LITERAL, - parameterStyle=SOAPBinding.ParameterStyle.WRAPPED -) -public class JAXWSBeanWithoutWebMethod implements JAXWSGreeter { - - - public String greetMe(final String me) { - System.out.println("i'm a ejb ws : " + me); - System.out.println("greet me"); - return "Hello " + me; - } - - - public void greetMeFault(final String me) { - System.out.println("generate SOAP fault"); - SOAPFault fault = null; - try { - fault = SOAPFactory.newInstance().createFault(); - fault.setFaultCode(new QName("http://foo", "MyFaultCode")); - fault.setFaultString("my error"); - fault.setFaultActor("my actor"); - } catch (SOAPException ex) { - throw new RuntimeException(ex); - } - - throw new SOAPFaultException(fault); - } - - public String greetYou(final String you) { - System.out.println("i'm a ejb ws: " + you); - System.out.println("greet you"); - return "Hi " + you; - } - - public String sayHello(String name) { - return "Hello World!" + name; - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java deleted file mode 100644 index 20275f480a..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeter.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.ejb; - - -public interface JAXWSGreeter { - - public String sayHello(String name); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java deleted file mode 100644 index b10888a5ec..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/java/org/ow2/jonas/ws/jaxws/test/ejb/JAXWSGreeterForWithWM.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.ow2.jonas.ws.jaxws.test.ejb; - -import javax.jws.WebService; - -@WebService -public interface JAXWSGreeterForWithWM { - - public String greetMe(final String me); - public void greetMeFault(final String me); -} \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl deleted file mode 100644 index a7ffbe337f..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithWebMethod.wsdl +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithoutWebMethod.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithoutWebMethod.wsdl deleted file mode 100644 index decd5d3579..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-ejb-webmethod/src/main/resources/META-INF/wsdl/JAXWSBeanWithoutWebMethod.wsdl +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/pom.xml deleted file mode 100644 index 364777af11..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-complex - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Complex - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-complex - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/JAXWSBean3.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/JAXWSBean3.java deleted file mode 100644 index 8ba61102c0..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/JAXWSBean3.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: xiaoda - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import java.util.ArrayList; -import java.util.List; -import javax.xml.ws.WebServiceContext; -import javax.jws.WebService; -import javax.annotation.Resource; - -@WebService(name = "Person", - targetNamespace = "http://org.ow2.jonas.ws.jaxws.test.person",wsdlLocation="WEB-INF/wsdl/JAXWSBean3Service.wsdl") -public class JAXWSBean3 { - -@Resource WebServiceContext wsContext; - - private static List PERSONS = new ArrayList(); - - static { - PERSONS.add(new Person("eric", "cartman")); - PERSONS.add(new Person("homer", "simpson")); - } - - public Person[] getPersons1() { - System.out.println(wsContext); - return PERSONS.toArray(new Person [] {}); - } - - public List getPersons2() { - return PERSONS; - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/Person.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/Person.java deleted file mode 100644 index 2a238f0733..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/Person.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -public class Person { - - private String firstName; - private String lastName; - - public Person() { - } - - public Person(String firstName, String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1.java deleted file mode 100644 index 6956a14862..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1.java +++ /dev/null @@ -1,24 +0,0 @@ - -package org.ow2.jonas.ws.jaxws.test.pojo.jaxws; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -/** - * This class was generated by the CXF 2.0.9 - * Mon Jun 22 21:09:13 CST 2009 - * Generated source version: 2.0.9 - * - */ - -@XmlRootElement(name = "getPersons1", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "getPersons1", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") - -public class GetPersons1 { - - -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1Response.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1Response.java deleted file mode 100644 index 30e0a44da1..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons1Response.java +++ /dev/null @@ -1,35 +0,0 @@ - -package org.ow2.jonas.ws.jaxws.test.pojo.jaxws; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -/** - * This class was generated by the CXF 2.0.9 - * Mon Jun 22 21:09:13 CST 2009 - * Generated source version: 2.0.9 - * - */ - -@XmlRootElement(name = "getPersons1Response", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "getPersons1Response", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") - -public class GetPersons1Response { - - @XmlElement(name = "return") - private org.ow2.jonas.ws.jaxws.test.pojo.Person[] _return; - - public org.ow2.jonas.ws.jaxws.test.pojo.Person[] get_return() { - return this._return; - } - - public void set_return( org.ow2.jonas.ws.jaxws.test.pojo.Person[] new_return ) { - this._return = new_return; - } - -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2.java deleted file mode 100644 index b8b6eb17d8..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2.java +++ /dev/null @@ -1,24 +0,0 @@ - -package org.ow2.jonas.ws.jaxws.test.pojo.jaxws; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -/** - * This class was generated by the CXF 2.0.9 - * Mon Jun 22 21:09:13 CST 2009 - * Generated source version: 2.0.9 - * - */ - -@XmlRootElement(name = "getPersons2", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "getPersons2", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") - -public class GetPersons2 { - - -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2Response.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2Response.java deleted file mode 100644 index fd08ad7d69..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/jaxws/GetPersons2Response.java +++ /dev/null @@ -1,35 +0,0 @@ - -package org.ow2.jonas.ws.jaxws.test.pojo.jaxws; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; - -/** - * This class was generated by the CXF 2.0.9 - * Mon Jun 22 21:09:13 CST 2009 - * Generated source version: 2.0.9 - * - */ - -@XmlRootElement(name = "getPersons2Response", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "getPersons2Response", namespace = "http://org.ow2.jonas.ws.jaxws.test.person") - -public class GetPersons2Response { - - @XmlElement(name = "return") - private java.util.List _return; - - public java.util.List get_return() { - return this._return; - } - - public void set_return( java.util.List new_return ) { - this._return = new_return; - } - -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 0895761788..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.JAXWSBean3 - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/wsdl/JAXWSBean3Service.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/wsdl/JAXWSBean3Service.wsdl deleted file mode 100644 index 5b8988c86d..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-complex/src/main/webapp/WEB-INF/wsdl/JAXWSBean3Service.wsdl +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/pom.xml deleted file mode 100644 index 41ec8a9b66..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-descriptor - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Descriptor - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-descriptor - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/Hello.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/Hello.java deleted file mode 100644 index 384133d381..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/Hello.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.ow2.jonas.ejb3; - - -public interface Hello -{ - public abstract String sayHello(String s); -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/HelloBean.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/HelloBean.java deleted file mode 100644 index 3ffb9c9a3e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ejb3/HelloBean.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ow2.jonas.ejb3; - -import javax.ejb.Remote; -import javax.ejb.Stateless; - -// Referenced classes of package org.ow2.jonas.ws.axis2.test.ejb3: -// Hello - -@Remote(Hello.class) -@Stateless -public class HelloBean - implements Hello -{ - - public HelloBean() - { - } - - public String sayHello(String str) - { - System.out.println((new StringBuilder("HelloWorldEJB3: ")).append(str).toString()); - return "HelloWorld EJB3!"; - } -} \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterLogicalHandler.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterLogicalHandler.java deleted file mode 100644 index 6b890ff209..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterLogicalHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - - -import javax.ejb.EJB; -import javax.xml.ws.handler.LogicalMessageContext; -import javax.xml.ws.handler.MessageContext; -//import org.ow2.jonas.ws.axis2.ejb3.Hello; - -public class GreeterLogicalHandler implements javax.xml.ws.handler.LogicalHandler { - - //@Resource(name = "greeting") - //private String greeting; - - //@EJB(name="org.ow2.jonas.ws.axis2.ejb3.Hello") - //Hello hello; - - public void close(final MessageContext arg0) { - // TODO Auto-generated method stub - System.out.println("CLOSE in LogicalHandler"); - } - - public boolean handleFault(final LogicalMessageContext arg0) { - // TODO Auto-generated method stub - return true; - } - - public boolean handleMessage(final LogicalMessageContext context) { - - // TODO Auto-generated method stub - System.out.println("GREATERLogicalHandler HandleMessage"); - //System.out.println(greeting); - //hello.sayHello("hello world"); - - return true; - } -} - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterSOAPHandler.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterSOAPHandler.java deleted file mode 100644 index c593b55918..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/GreeterSOAPHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - - -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; -import javax.xml.namespace.QName; -import javax.xml.soap.Node; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPException; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -public class GreeterSOAPHandler implements SOAPHandler { - - @Resource - WebServiceContext WSContext = null; - - //@Resource(name = "greeting") - //private String greeting; - - @PostConstruct - public void init() { - System.out.println(this + " init: " + WSContext); - } - - @PreDestroy - public void destroy() { - System.out.println(this + " destroy"); - } - - public void init(final Map config) { - } - - public boolean handleFault(final SOAPMessageContext context) { - System.out.println(this + " handleFault"); - return true; - } - - public void close(final MessageContext context) { - System.out.println("CLOSE in SOAPHandler"); - } - - public boolean handleMessage(final SOAPMessageContext context) { - System.out.println("GREATERSOAPHandler HandleMessage"); - System.out.println(context == null); - System.out.println(WSContext == null); - System.out.println(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)); - - try { - if("false".equalsIgnoreCase(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY).toString())) { - String content = context.getMessage().getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild().getFirstChild().getTextContent(); - context.getMessage().getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild().getFirstChild().setTextContent(content + "SOAPHandler"); - } - } catch (SOAPException e) { - e.printStackTrace(); - } - return true; - } - - public Set getHeaders() { - System.out.println(this + " getHeaders"); - return new TreeSet(); - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java deleted file mode 100644 index 5efc23f641..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.ow2.jonas.ws.jaxws.test.pojo; - -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: xiaoda - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -import javax.annotation.Resource; -import javax.jws.WebService; - -import org.ow2.jonas.ejb3.Hello; - -/** - * This is a basic JAXWS pojo web service. - * @author xiaoda - * - */ -@WebService(name="SimpleService",serviceName="SimpleService",wsdlLocation="WEB-INF/wsdl/SimpleService.wsdl") -public class SimpleService implements SimpleServiceInterface { - - private static final long serialVersionUID = 1L; - - public String greetMe(String str) { - return "hello" + str; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java deleted file mode 100644 index 073685bc6e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index b1fe7890ef..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - pojo - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 63b069a6de..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/webservices.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/webservices.xml deleted file mode 100644 index 5be46740a1..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/webservices.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - POJO WS (with wsdl) - WEB-INF/wsdl/SService.wsdl - - SimpleService - pojo:SimpleService - pojo:SimpleServicePort - false - org.ow2.jonas.ws.jaxws.test.pojo.SimpleServiceInterface - - SimpleService - - - - - GreeterHandlerA - org.ow2.jonas.ws.jaxws.test.pojo.GreeterSOAPHandler - - - GreeterHandlerB - org.ow2.jonas.ws.jaxws.test.pojo.GreeterSOAPHandler - - - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SService.wsdl deleted file mode 100644 index c17a2fe443..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SService.wsdl +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-descriptor/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/pom.xml deleted file mode 100644 index 7e4dd85996..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-handler - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Handlers - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-handlers - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterLogicalHandler.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterLogicalHandler.java deleted file mode 100644 index d3a5c06cd8..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterLogicalHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.handlers; - - -import javax.ejb.EJB; -import javax.xml.ws.handler.LogicalMessageContext; -import javax.xml.ws.handler.MessageContext; -//import org.ow2.jonas.ws.axis2.ejb3.Hello; - -public class GreeterLogicalHandler implements javax.xml.ws.handler.LogicalHandler { - - //@Resource(name = "greeting") - //private String greeting; - - //@EJB(name="org.ow2.jonas.ws.axis2.ejb3.Hello") - //Hello hello; - - public void close(final MessageContext arg0) { - // TODO Auto-generated method stub - System.out.println("CLOSE in LogicalHandler"); - } - - public boolean handleFault(final LogicalMessageContext arg0) { - // TODO Auto-generated method stub - return true; - } - - public boolean handleMessage(final LogicalMessageContext context) { - - // TODO Auto-generated method stub - System.out.println("GREATERLogicalHandler HandleMessage"); - //System.out.println(greeting); - //hello.sayHello("hello world"); - - return true; - } -} - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterSOAPHandler.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterSOAPHandler.java deleted file mode 100644 index c1ea7f3c5b..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/GreeterSOAPHandler.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.handlers; - - -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.annotation.Resource; -import javax.xml.namespace.QName; -import javax.xml.soap.Node; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPException; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; - -public class GreeterSOAPHandler implements SOAPHandler { - - @Resource - WebServiceContext wsContext; - - //@Resource(name = "greeting") - //private String greeting; - - @PostConstruct - public void init() { - System.out.println(this + " init: " + wsContext); - } - - @PreDestroy - public void destroy() { - System.out.println(this + " destroy"); - } - - public void init(final Map config) { - } - - public boolean handleFault(final SOAPMessageContext context) { - System.out.println(this + " handleFault"); - return true; - } - - public void close(final MessageContext context) { - System.out.println("CLOSE in SOAPHandler"); - } - - public boolean handleMessage(final SOAPMessageContext context) { - System.out.println("GREATERSOAPHandler HandleMessage"); - System.out.println(context == null); - System.out.println(wsContext == null); - System.out.println(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)); - - try { - if("false".equalsIgnoreCase(context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY).toString())) { - String content = context.getMessage().getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild().getFirstChild().getTextContent(); - content = content + "SOAPHandler"; - if(wsContext!=null) { - content = content + "wsContext"; - } - context.getMessage().getSOAPPart().getEnvelope().getBody().getFirstChild().getFirstChild().getFirstChild().setTextContent(content); - } - } catch (SOAPException e) { - e.printStackTrace(); - } - return true; - } - - public Set getHeaders() { - System.out.println(this + " getHeaders"); - return new TreeSet(); - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleService.java deleted file mode 100644 index d21fc9de31..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleService.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.handlers; - - -import javax.annotation.Resource; -import javax.jws.HandlerChain; -import javax.jws.WebService; -import javax.xml.ws.WebServiceContext; - - -/** - * This is a basic JAXWS pojo web service. - * @author xiaoda - * - */ -@WebService(name="SimpleService",serviceName="SimpleService",wsdlLocation="WEB-INF/wsdl/SimpleService.wsdl") -@HandlerChain(file="/WEB-INF/handlers.xml") -public class SimpleService implements SimpleServiceInterface { - - @Resource - WebServiceContext WSContext = null; - - private static final long serialVersionUID = 1L; - - public String greetMe(String str) { - return "hello" + str; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleServiceInterface.java deleted file mode 100644 index 0d0a4252e3..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/java/org/ow2/jonas/ws/jaxws/test/handlers/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.handlers; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/handlers.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/handlers.xml deleted file mode 100644 index f783cff4d2..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/handlers.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - GreeterSOAPHandler - org.ow2.jonas.ws.jaxws.test.handlers.GreeterSOAPHandler - - - - GreeterLogicalHandler - org.ow2.jonas.ws.jaxws.test.handlers.GreeterLogicalHandler - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 307ef9dbd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl deleted file mode 100644 index 0b4b1fbb52..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-handlers/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/pom.xml deleted file mode 100644 index 5d1f529c3d..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-injection - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Injection - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-injection - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java deleted file mode 100644 index 56d95e567e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ejb3/Hello.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - - -public interface Hello -{ - public abstract String sayHello(String s); -} - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleService.java deleted file mode 100644 index af76102879..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleService.java +++ /dev/null @@ -1,59 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.injection; - -import javax.annotation.Resource; -import javax.ejb.EJB; -import javax.jws.WebService; -import javax.xml.ws.WebServiceContext; -import org.ow2.jonas.ejb3.Hello; - -/** - * This is a basic JAXWS pojo web service. - * - * @author xiaoda - * - */ -@WebService(name = "SimpleService", serviceName = "SimpleService", wsdlLocation = "WEB-INF/wsdl/SimpleService.wsdl") -public class SimpleService implements SimpleServiceInterface { - - @Resource - WebServiceContext context = null; - - @EJB(name = "org.ow2.jonas.ejb3.Hello") - Hello hello; - - private static final long serialVersionUID = 1L; - - public String greetMe(String str) { - System.out.println(hello==null); - if (context != null) { - return "hello" + str; - } else { - return str; - } - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleServiceInterface.java deleted file mode 100644 index 0438629d05..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/java/org/ow2/jonas/ws/jaxws/test/injection/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.injection; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/handlers.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/handlers.xml deleted file mode 100644 index f783cff4d2..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/handlers.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - GreeterSOAPHandler - org.ow2.jonas.ws.jaxws.test.handlers.GreeterSOAPHandler - - - - GreeterLogicalHandler - org.ow2.jonas.ws.jaxws.test.handlers.GreeterLogicalHandler - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 307ef9dbd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl deleted file mode 100644 index 779d407a03..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-injection/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/pom.xml deleted file mode 100644 index 7b6b3e71ce..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-simple-with-wsdl - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Simple :: With :: WSDL - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-simple-with-wsdl - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java deleted file mode 100644 index 965df4918b..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; -import javax.jws.WebService; - -/** - * This is a basic JAXWS pojo web service. - * @author xiaoda - * - */ -@WebService(name="SimpleService",serviceName="SimpleService",wsdlLocation="WEB-INF/wsdl/SimpleService.wsdl") -public class SimpleService implements SimpleServiceInterface { - - private static final long serialVersionUID = 1L; - - @WebMethod(exclude=false) - public String greetMe(String str) { - return "hello" + str; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java deleted file mode 100644 index 073685bc6e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 307ef9dbd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl deleted file mode 100644 index c17a2fe443..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-with-wsdl/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/pom.xml deleted file mode 100644 index 4df798bc70..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-simple-without-wsdl - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: Simple :: Without :: WSDL - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-simple-without-wsdl - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java deleted file mode 100644 index 1c3d14e7f0..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; -import javax.jws.WebService; - -/** - * This is a basic JAXWS pojo web service. - * @author xiaoda - * - */ -@WebService(name="SimpleService",serviceName="SimpleService") -public class SimpleService implements SimpleServiceInterface { - - private static final long serialVersionUID = 1L; - - @WebMethod(exclude=false) - public String greetMe(String str) { - return "hello" + str; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java deleted file mode 100644 index 073685bc6e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 307ef9dbd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-simple-without-wsdl/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/pom.xml deleted file mode 100644 index 28a9d769bb..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-soapBinding - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: SOAPBinding - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-SOAPBinding - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java deleted file mode 100644 index ca4619fcb1..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleService.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.jws.soap.SOAPBinding; - -/** - * This is a basic JAXWS pojo web service. - * @author xiaoda - * - */ -@WebService(name="SimpleService",serviceName="SimpleService",wsdlLocation="WEB-INF/wsdl/SimpleService.wsdl") -@SOAPBinding( - style = SOAPBinding.Style.RPC, - use = SOAPBinding.Use.LITERAL) -public class SimpleService implements SimpleServiceInterface { - - private static final long serialVersionUID = 1L; - - @WebMethod(exclude=false) - public String greetMe(String str) { - return "hello" + str; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java deleted file mode 100644 index 073685bc6e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/java/org/ow2/jonas/ws/jaxws/test/pojo/SimpleServiceInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.pojo; - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 307ef9dbd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.pojo.SimpleService - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl deleted file mode 100644 index f299828cd7..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-soap-binding/src/main/webapp/WEB-INF/wsdl/SimpleService.wsdl +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/pom.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/pom.xml deleted file mode 100644 index 31749208d8..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - org.ow2.jonas - jonas-itests - 5.1.0-RC3-SNAPSHOT - ../pom.xml - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-wsProvider - war - JOnAS :: Tests :: JAXWS :: Tests :: Base :: POJO :: WSProvider - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - provided - - - - jaxws-pojo-wsProvider - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/java/org/ow2/jonas/ws/jaxws/test/CalculatorImpl.java b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/java/org/ow2/jonas/ws/jaxws/test/CalculatorImpl.java deleted file mode 100644 index b7bf40d3d1..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/java/org/ow2/jonas/ws/jaxws/test/CalculatorImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2009 Bull S.A.S - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: xiaoda - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.ow2.jonas.ws.jaxws.test; - -import java.io.ByteArrayInputStream; - -import javax.annotation.Resource; -import javax.servlet.ServletRequest; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.ws.BindingType; -import javax.xml.ws.Provider; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.WebServiceProvider; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.http.HTTPBinding; -import javax.xml.ws.http.HTTPException; - -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; - -@WebServiceProvider -@BindingType(value=HTTPBinding.HTTP_BINDING) -public class CalculatorImpl implements Provider { - - @Resource - protected WebServiceContext wsContext; - - public Source invoke(Source source) { - try { - String num1 = null; - String num2 = null; - - if (source == null) { - System.out.println("Getting input from query string"); - MessageContext mc = wsContext.getMessageContext(); - String query = (String)mc.get(MessageContext.QUERY_STRING); - System.out.println("Query String = " + query); - ServletRequest req = (ServletRequest)mc.get(MessageContext.SERVLET_REQUEST); - num1 = req.getParameter("num1"); - num2 = req.getParameter("num2"); - } else { - System.out.println("Getting input from input message"); - Node n = null; - if (source instanceof DOMSource) { - n = ((DOMSource)source).getNode(); - } else if (source instanceof StreamSource) { - StreamSource streamSource = (StreamSource)source; - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - InputSource inputSource = null; - if (streamSource.getInputStream() != null) { - inputSource = new InputSource(streamSource.getInputStream()); - } else if (streamSource.getReader() != null) { - inputSource = new InputSource(streamSource.getReader()); - } - n = db.parse(inputSource); - } else { - throw new RuntimeException("Unsupported source: " + source); - } - NodeList children = n.getChildNodes(); - for (int i = 0; i < children.getLength(); i++) { - Node child = children.item(i); - if (child.getNodeName().equals("add")) { - num1 = child.getAttributes().getNamedItem("num1").getNodeValue(); - num2 = child.getAttributes().getNamedItem("num2").getNodeValue(); - break; - } - } - } - - int n1 = Integer.parseInt(num1); - int n2 = Integer.parseInt(num2); - return createResultSource(n1 + n2); - } catch(Exception e) { - e.printStackTrace(); - throw new HTTPException(500); - } - } - - private Source createResultSource(int sum) { - String body = - "" - + sum - + ""; - Source source = new StreamSource(new ByteArrayInputStream(body.getBytes())); - return source; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/jonas-web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/jonas-web.xml deleted file mode 100644 index 27eb0b90c9..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/jonas-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - pojo - diff --git a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/web.xml b/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index da9338dd11..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/jaxws-pojo-wsProvider/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - JOnAS Package index - - Display the context which are preconfigured. - - - - SimpleService - org.ow2.jonas.ws.jaxws.test.CalculatorImpl - - - - SimpleService - /SimpleService - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-base/pom.xml b/jonas_tests/jaxws/jaxws-test-base/pom.xml deleted file mode 100644 index f4b2bcff15..0000000000 --- a/jonas_tests/jaxws/jaxws-test-base/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.1.0-RC3-SNAPSHOT - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests - base - pom - JOnAS :: Tests :: JAXWS :: Tests :: Base - Tests base for JAXWS - - - jaxws-pojo-simple-with-wsdl - jaxws-pojo-simple-without-wsdl - jaxws-pojo-complex - jaxws-pojo-handlers - jaxws-pojo-descriptor - jaxws-pojo-injection - jaxws-pojo-wsProvider - jaxws-pojo-soap-binding - ejb3 - jaxws-ejb-webmethod - jaxws-ejb-injection - jaxws-ejb-descriptor - jaxws-ejb-interceptor - - - - - diff --git a/jonas_tests/jaxws/jaxws-test-clients/pom.xml b/jonas_tests/jaxws/jaxws-test-clients/pom.xml deleted file mode 100644 index 11bcfeb405..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/pom.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.1.0-RC3-SNAPSHOT - - 4.0.0 - org.ow2.jonas.ws.jaxws.itests - tests - jar - JOnAS :: Tests :: JAXWS :: Tests :: Clients - http://maven.apache.org - - - - org.testng - testng - 5.8 - jdk15 - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-simple-without-wsdl - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-simple-with-wsdl - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-complex - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-injection - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-handler - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.pojo - jaxws-pojo-descriptor - ${project.version} - war - - - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb - ${project.version} - - - org.ow2.jonas.ws.jaxws.itests.base.ejb - jaxws-ejb-descriptor - ${project.version} - - - - httpunit - httpunit - 1.6 - - - org.ow2.jonas.osgi - javaee-api - ${project.version} - - - com.sun.xml.messaging.saaj - saaj-impl - 1.3.2 - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ejb3/Hello.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ejb3/Hello.java deleted file mode 100644 index 56d95e567e..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ejb3/Hello.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ejb3; - - -public interface Hello -{ - public abstract String sayHello(String s); -} - diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DispatchAPIWebserviceClientTestCase.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DispatchAPIWebserviceClientTestCase.java deleted file mode 100644 index 07e26e68b5..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DispatchAPIWebserviceClientTestCase.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test; - -import java.io.ByteArrayOutputStream; -import java.net.URL; -import javax.xml.namespace.QName; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConstants; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; -import javax.xml.ws.Dispatch; -import javax.xml.ws.Service; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.ow2.jonas.ws.jaxws.test.util.JWebServicesTestCase; - - -/** - * This is a client of SimpleService web service and it tests the - * JAXWS Dispatch API by using Dispatch API to invoke the web service. - * - * @author xiaoda - * - */ -public class DispatchAPIWebserviceClientTestCase extends JWebServicesTestCase { - - public DispatchAPIWebserviceClientTestCase(String s) throws Exception { - super(s); - } - private static final String PORT_URL = "/pojo/SimpleService"; - - - @BeforeClass - public void setUp() throws Exception { - useWar("jaxws-pojo-simple-with-wsdl"); - } - - @AfterClass - public void tearDown() throws Exception { - unUseWar("jaxws-pojo-simple-with-wsdl"); - } - - @Test(groups = { "DispatchAPI" }) - public void testInvokeWithDispatchAPI() { - - try{ - - String port = System.getProperty("http.port"); - - if(port == null) { - port = "9000"; - } - //String endpointUrl = "http://localhost" + port + PORT_URL; - - URL wsdlLocation = new URL("http://localhost:" + port + PORT_URL + "?wsdl"); - - QName serviceName = new QName("http://pojo.test.jaxws.ws.jonas.ow2.org/", - "SimpleService"); - - - QName portName = new QName("http://pojo.test.jaxws.ws.jonas.ow2.org/", - "SimpleServicePort"); - Service service = Service.create(wsdlLocation, serviceName); - - //service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl); - Assert.assertNotNull(service); - - /** Create a Dispatch instance from a service.**/ - Dispatch dispatch = service.createDispatch(portName, - SOAPMessage.class, Service.Mode.MESSAGE); - - Assert.assertNotNull(dispatch); - - /** Create SOAPMessage request. **/ - // compose a request message - MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); - - // Create a message. This example works with the SOAPPART. - SOAPMessage request = mf.createMessage(); - SOAPPart part = request.getSOAPPart(); - - // Obtain the SOAPEnvelope and header and body elements. - SOAPEnvelope env = part.getEnvelope(); - SOAPBody body = env.getBody(); - - // Construct the message payload. - SOAPElement operation = body.addChildElement(env.createName("greetMe")); - SOAPElement value = operation.addChildElement("arg0"); - value.addTextNode("JOnAS"); - request.saveChanges(); - - /** Invoke the service endpoint. **/ - SOAPMessage response = dispatch.invoke(request); - - Assert.assertNotNull(response); - - ByteArrayOutputStream os = new ByteArrayOutputStream(); - response.writeTo(os); - String str = new String(os.toByteArray()); - System.out.println(str); - Assert.assertTrue(str.contains("helloJOnAS")); - } catch(Exception e) { - e.printStackTrace(); - } - } -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DynamicProxyWebserviceClientTestCase.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DynamicProxyWebserviceClientTestCase.java deleted file mode 100644 index d2fdc7576a..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/DynamicProxyWebserviceClientTestCase.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test; - - -import java.net.MalformedURLException; -import java.net.URL; -import javax.xml.namespace.QName; -import javax.xml.ws.Service; -import org.ow2.jonas.ws.jaxws.test.util.JWebServicesTestCase; -import org.ow2.jonas.ws.jaxws.test.util.SimpleServiceInterface; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class DynamicProxyWebserviceClientTestCase extends JWebServicesTestCase { - - public DynamicProxyWebserviceClientTestCase(String s) throws Exception { - super(s); - } - private static final String PORT_URL = "/pojo/SimpleService"; - - - @BeforeClass - public void setUp() throws Exception { - useWar("jaxws-pojo-simple-with-wsdl"); - } - - @AfterClass - public void tearDown() throws Exception { - unUseWar("jaxws-pojo-simple-with-wsdl"); - } - - - @Test(groups = { "DynamicProxy" }) - public void testInvokeWithDispatchAPI() throws MalformedURLException { - - String port = System.getProperty("http.port"); - - if(port == null) { - port = "9000"; - } - String UrlString = "http://localhost:"+ port + PORT_URL +"?wsdl"; - - QName serviceName = new QName("http://pojo.test.jaxws.ws.jonas.ow2.org/","SimpleService"); - - QName portName = new QName("http://pojo.test.jaxws.ws.jonas.ow2.org/","SimpleServicePort"); - - System.out.println("UrlString = " + UrlString); - URL helloWsdlUrl = new URL(UrlString); - - //ServiceFactory serviceFactory = ServiceFactory.newInstance(); - - Service simpleService = Service.create(helloWsdlUrl, serviceName); - SimpleServiceInterface ssi =(SimpleServiceInterface)simpleService.getPort( portName, SimpleServiceInterface.class); - - //javax.xml.ws.BindingProvider bp = (javax.xml.ws.BindingProvider)ssi; - //Map context = bp.getRequestContext(); - //context.put("javax.xml.ws.session.maintain", Boolean.TRUE); - - Assert.assertEquals( ssi.greetMe("JOnAS"), "helloJOnAS"); - } -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/EJBClientTestCases.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/EJBClientTestCases.java deleted file mode 100644 index 9ef18cecae..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/EJBClientTestCases.java +++ /dev/null @@ -1,247 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test; - -import java.io.ByteArrayOutputStream; -import javax.wsdl.Definition; -import javax.wsdl.WSDLException; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.messaging.URLEndpoint; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConnection; -import javax.xml.soap.SOAPConnectionFactory; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; -import org.ow2.jonas.ws.jaxws.test.util.JWebServicesTestCase; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - - -public class EJBClientTestCases extends JWebServicesTestCase { - private static final String PORT_URL_WITH_WEBMETHOD = "/jaxws-ejb-webmethod/JAXWSBeanWithWebMethod"; - private static final String PORT_URL_WITHOUT_WEBMETHOD = "/jaxws-ejb-webmethod/JAXWSBeanWithoutWebMethod"; - private static final String PORT_URL_DESCRIPTOR = "/jaxws-ejb-descriptor/JAXWSBean_descriptor"; - private static final String PORT_URL_INJECTION = "/jaxws-ejb-injection/JAXWSBeanInjection"; - private static final String PORT_URL_INTERCEPTOR = "/jaxws-ejb-interceptor/EJBWSwihtInterceptors"; - public EJBClientTestCases(String s) throws Exception { - super(s); - } - - @BeforeClass - public void setUp() throws Exception { - } - - @AfterClass - public void tearDown() throws Exception { - } - - @Test(groups = { "EJB_with_webmethod" }) - public void testWithWebmethodWSDL() throws Exception { - useBeans("jaxws-ejb-webmethod"); - try { - Assert.assertNotNull(getWSDLForService(PORT_URL_WITH_WEBMETHOD),"Can not get wsdl for EJB_with_webmethod!"); - } finally { - unUseBeans("jaxws-ejb-webmethod"); - } - } - - @Test(groups = { "EJB_with_webmethod" }) - public void testWithWebmethodInvoke() throws Exception { - useBeans("jaxws-ejb-webmethod"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_WITH_WEBMETHOD,"greetMe","arg0"); - Assert.assertTrue(response.contains("Hello foo bar"),"greetMe() should be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITH_WEBMETHOD,"greetMeFault","arg0"); - Assert.assertTrue(response.contains("my error"),"greetMeFault() should be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITH_WEBMETHOD,"greetYou","arg0"); - Assert.assertTrue(!response.contains("Hi foo bar"),"greetYou() should not be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITH_WEBMETHOD,"sayHello","arg0"); - Assert.assertTrue(!response.contains("Hello World! foo bar"),"sayHello() should not be exposed as web method!"); - - } finally { - unUseBeans("jaxws-ejb-webmethod"); - } - } - - @Test(groups = { "EJB_without_webmethod" }) - public void testWithoutWebmethodWSDL() throws Exception { - useBeans("jaxws-ejb-webmethod"); - try { - Assert.assertNotNull(getWSDLForService(PORT_URL_WITHOUT_WEBMETHOD),"Can not get wsdl for EJB_without_webmethod!"); - } finally { - unUseBeans("jaxws-ejb-webmethod"); - } - } - - @Test(groups = { "EJB_without_webmethod" }) - public void testWithoutWebmethodInvoke() throws Exception { - useBeans("jaxws-ejb-webmethod"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_WITHOUT_WEBMETHOD,"greetMe","arg0"); - Assert.assertTrue(response.contains("Hello foo bar"),"greetMe() should be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITHOUT_WEBMETHOD,"greetYou","arg0"); - //System.out.println("******************greetYou : " + response); - Assert.assertTrue(response.contains("Hi foo bar"),"greetYou() should be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITHOUT_WEBMETHOD,"greetMeFault","arg0"); - Assert.assertTrue(response.contains("my error"),"greetMeFault() should be exposed as web method!"); - - response = invokeEJBWebService(PORT_URL_WITHOUT_WEBMETHOD,"sayHello","arg0"); - Assert.assertTrue(!response.contains("Hello World! foo bar"),"sayHello() should not be exposed as web method!"); - - } finally { - unUseBeans("jaxws-ejb-webmethod"); - } - } - - @Test(groups = { "EJB_descriptor" }) - public void testDescriptorWSDL() throws Exception { - useBeans("jaxws-ejb-descriptor"); - try { - Assert.assertNotNull(getWSDLForService(PORT_URL_DESCRIPTOR),"Can not get wsdl for EJB_descriptor!"); - } finally { - unUseBeans("jaxws-ejb-descriptor"); - } - } - - @Test(groups = { "EJB_descriptor" }) - public void testDescriptorInvoke() throws Exception { - useBeans("jaxws-ejb-descriptor"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_DESCRIPTOR,"greetMe","arg0"); - Assert.assertTrue(response.contains("Hello foo bar"),"Reply of greetMe() is not right!"); - } finally { - unUseBeans("jaxws-ejb-descriptor"); - } - } - - @Test(groups = { "EJB_injection" }) - public void testWSContextInjectionInvoke() throws Exception { - useBeans("jaxws-ejb-injection"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_INJECTION,"greetMe","arg0"); - Assert.assertTrue(response.contains("foo barwsContext"),"wsContext is not injected correctly!"); - } finally { - unUseBeans("jaxws-ejb-injection"); - } - } - - @Test(groups = { "EJB_injection" }) - public void testEJBResourceInjectionInvoke() throws Exception { - useBeans("jaxws-ejb-injection"); - useBeans("ejb3"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_INJECTION,"greetMe","arg0"); - Assert.assertTrue(response.contains("foo barwsContexthello"),"EJB resource is not injected correctly!"); - } finally { - unUseBeans("jaxws-ejb-injection"); - unUseBeans("ejb3"); - } - } - - @Test(groups = { "EJB_interceptor" }) - public void testEJBInterceptorInvoke() throws Exception { - useBeans("jaxws-ejb-interceptor"); - String response = null; - try { - response = invokeEJBWebService(PORT_URL_INTERCEPTOR,"greetMe","arg0"); - Assert.assertTrue(response.contains("intercepted"),"EJB resource is not injected correctly!"); - } finally { - unUseBeans("jaxws-ejb-interceptor"); - } - } - - private Definition getWSDLForService(String servicePort) throws WSDLException { - String port = System.getProperty("http.port"); - if(port == null) - port = "9000"; - - String url = "http://localhost:" + port + servicePort + "?WSDL"; - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - return reader.readWSDL(url); - } - - private String invokeEJBWebService(String servicePort, String opName, String paraName) throws UnsupportedOperationException, SOAPException { - - String port = System.getProperty("http.port"); - - if(port == null) { - port = "9000"; - } - SOAPConnectionFactory soapConnFactory = - SOAPConnectionFactory.newInstance(); - SOAPConnection connection = soapConnFactory.createConnection(); - - MessageFactory messageFactory = MessageFactory.newInstance(); - SOAPMessage message = messageFactory.createMessage(); - - SOAPPart soapPart = message.getSOAPPart(); - SOAPEnvelope envelope = (SOAPEnvelope) soapPart.getEnvelope(); - SOAPBody body = envelope.getBody(); - - SOAPElement bodyElement = body.addChildElement(envelope.createName(opName)); - SOAPElement strElement = bodyElement.addChildElement(paraName); - strElement.setValue("foo bar"); - - message.saveChanges(); - //message.writeTo(System.out); - //System.out.println(); - - URLEndpoint destination = new URLEndpoint("http://localhost:"+ port + servicePort); - SOAPMessage reply = connection.call(message, destination); - - Assert.assertNotNull(reply,"Reply of " + servicePort + " is Null!"); - String response = null; - try{ - ByteArrayOutputStream os = new ByteArrayOutputStream(); - reply.writeTo(os); - response = new String(os.toByteArray()); - } catch(Exception e) { - e.printStackTrace(); - } - connection.close(); - return response; - } - -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/PojoClientTestCases.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/PojoClientTestCases.java deleted file mode 100644 index 1558e59afe..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/PojoClientTestCases.java +++ /dev/null @@ -1,453 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test; - -import java.io.ByteArrayOutputStream; -import javax.wsdl.Definition; -import javax.wsdl.WSDLException; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.messaging.URLEndpoint; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConnection; -import javax.xml.soap.SOAPConnectionFactory; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; -import java.net.HttpURLConnection; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import org.xml.sax.InputSource; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import java.io.InputStream; -import java.net.URL; -import java.io.StringReader; -import java.io.OutputStream; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import org.ow2.jonas.ws.jaxws.test.util.JWebServicesTestCase; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class PojoClientTestCases extends JWebServicesTestCase { - - private static final String SIMPLE_PORT = "/pojo/SimpleService"; - private static final String COMPLEX_PORT = "/pojo/JAXWSBean3Service"; - - public PojoClientTestCases(String s) throws Exception { - super(s); - } - - @BeforeClass - public void setUp() throws Exception { - } - - @AfterClass - public void tearDown() throws Exception { - } - - @Test(groups = { "Pojo_WebserviceContext_Injection" }) - public void testWsContextInjectionWSDL() throws Exception { - useWar("jaxws-pojo-injection"); - try { - Assert.assertNotNull(getWSDLForService(SIMPLE_PORT),"Can not get wsdl for Pojo_WebserviceContext_Injection!"); - } finally { - unUseWar("jaxws-pojo-injection"); - } - } - - @Test(groups = { "Pojo_WebserviceContext_Injection" }) - public void testWsContextInjectionInvoke() throws Exception { - useWar("jaxws-pojo-injection"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnAS"),"Reply of greetMe() is not right!"); - } finally { - unUseWar("jaxws-pojo-injection"); - } - } - - @Test(groups = { "Pojo_Simple_with_WSDL" }) - public void testSimpleWithWSDLWSDL() throws Exception { - useWar("jaxws-pojo-simple-with-wsdl"); - try { - Assert.assertNotNull(getWSDLForService(SIMPLE_PORT),"Can not get wsdl for Pojo_Simple_with_WSDL!"); - } finally { - unUseWar("jaxws-pojo-simple-with-wsdl"); - } - } - - @Test(groups = { "Pojo_Simple_with_WSDL" }) - public void testSimpleWithWSDLInvoke() throws Exception { - useWar("jaxws-pojo-simple-with-wsdl"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnAS"),"Reply of greetMe() is not right!"); - } finally { - unUseWar("jaxws-pojo-simple-with-wsdl"); - } - } - - - @Test(groups = { "Pojo_Simple_without_WSDL" }) - public void testSimpleWithoutWSDLWSDL() throws Exception { - useWar("jaxws-pojo-simple-without-wsdl"); - try { - Assert.assertNotNull(getWSDLForService(SIMPLE_PORT),"Can not get wsdl for Pojo_Simple_without_WSDL!"); - } finally { - unUseWar("jaxws-pojo-simple-without-wsdl"); - } - } - - @Test(groups = { "Pojo_Simple_with_WSDL" }) - public void testSimpleWithoutWSDLInvoke() throws Exception { - useWar("jaxws-pojo-simple-without-wsdl"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnAS"),"Reply of SimpleService is not right!"); - } finally { - unUseWar("jaxws-pojo-simple-without-wsdl"); - } - } - - @Test(groups = { "Pojo_Descriptor" }) - public void testDescriptorWSDL() throws Exception { - useWar("jaxws-pojo-descriptor"); - try { - Assert.assertNotNull(getWSDLForService(SIMPLE_PORT),"Can not get wsdl for SimpleService!"); - } finally { - unUseWar("jaxws-pojo-descriptor"); - } - } - - @Test(groups = { "Pojo_Descriptor" }) - public void testDescriptorInvoke() throws Exception { - useWar("jaxws-pojo-descriptor"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnASSOAPHandlerSOAPHandler"),"Reply of SimpleService is not right!"); - } finally { - unUseWar("jaxws-pojo-descriptor"); - } - } - - @Test(groups = { "Pojo_Handler" }) - public void testHandlerWSDL() throws Exception { - useWar("jaxws-pojo-handlers"); - Assert.assertNotNull(getWSDLForService(SIMPLE_PORT),"Can not get wsdl for SimpleService!"); - unUseWar("jaxws-pojo-handlers"); - } - - @Test(groups = { "Pojo_Handler" }) - public void testHandlerInvoke() throws Exception { - useWar("jaxws-pojo-handlers"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnASSOAPHandler"),"Handler is not called correctly!"); - - } finally { - unUseWar("jaxws-pojo-handlers"); - } - } - - - @Test(groups = { "Pojo_Handler_Injection" }) - public void testHandlerInjectionInvoke() throws Exception { - useWar("jaxws-pojo-handlers"); - try { - Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnASSOAPHandlerwsContext"),"WS Context injection in Handler is not correct!"); - } finally { - unUseWar("jaxws-pojo-handlers"); - } - } - - - @Test(groups = { "Pojo_Complex" }) - public void testComplexWithWSDLWSDL() throws Exception { - useWar("jaxws-pojo-complex"); - try { - Assert.assertNotNull(getWSDLForService(COMPLEX_PORT),"Can not get wsdl for SimpleService!"); - } finally { - unUseWar("jaxws-pojo-complex"); - } - } - - @Test(groups = { "Pojo_Complex" }) - public void testComplexWithWSDLInvoke() throws Exception { - useWar("jaxws-pojo-complex"); - try { - String port = System.getProperty("http.port"); - if(port == null) - port = "9000"; - - SOAPConnectionFactory soapConnFactory = - SOAPConnectionFactory.newInstance(); - SOAPConnection connection = soapConnFactory.createConnection(); - - MessageFactory messageFactory = MessageFactory.newInstance(); - SOAPMessage message = messageFactory.createMessage(); - - SOAPPart soapPart = message.getSOAPPart(); - SOAPEnvelope envelope = (SOAPEnvelope) soapPart.getEnvelope(); - SOAPBody body = envelope.getBody(); - - - SOAPElement bodyElement = body.addChildElement(envelope.createName("getPersons1")); - - message.saveChanges(); - - URLEndpoint destination = new URLEndpoint("http://localhost:"+ port + "/pojo/JAXWSBean3Service"); - SOAPMessage reply = connection.call(message, destination); - String response = null; - try{ - ByteArrayOutputStream os = new ByteArrayOutputStream(); - reply.writeTo(os); - response = new String(os.toByteArray()); - } catch(Exception e) { - e.printStackTrace(); - } - - Assert.assertTrue(response.contains("ericcartmanhomersimpson"),"Reply of SimpleService is not right!"); - - - soapConnFactory = SOAPConnectionFactory.newInstance(); - - connection = soapConnFactory.createConnection(); - - messageFactory = MessageFactory.newInstance(); - message = messageFactory.createMessage(); - - soapPart = message.getSOAPPart(); - envelope = (SOAPEnvelope) soapPart.getEnvelope(); - body = envelope.getBody(); - - - bodyElement = body.addChildElement(envelope.createName("getPersons2")); - - message.saveChanges(); - - destination = new URLEndpoint("http://localhost:"+ port + "/pojo/JAXWSBean3Service"); - reply = connection.call(message, destination); - response = null; - try{ - ByteArrayOutputStream os = new ByteArrayOutputStream(); - reply.writeTo(os); - response = new String(os.toByteArray()); - } catch(Exception e) { - e.printStackTrace(); - } - - - Assert.assertTrue(response.contains("ericcartmanhomersimpson"),"Reply of SimpleService is not right!"); - - } finally { - unUseWar("jaxws-pojo-complex"); - } - } - @Test(groups = { "Pojo_SOAPBinding" }) - public void testSOAPBindingInvoke() throws Exception { - //useWar("jaxws-pojo-SOAPBinding"); - try { - //Assert.assertTrue(invokePojoService(SIMPLE_PORT).contains("helloJOnAS"),"Reply of greetMe() is not right!"); - } finally { - //unUseWar("jaxws-pojo-SOAPBinding"); - } - } - - @Test(groups = { "Pojo_wsProvider" }) - public void testWSProviderInvoke() throws Exception { - useWar("jaxws-pojo-wsProvider"); - try { - InputStream requestInput = this.getClass().getResourceAsStream("/request1.xml"); - - URL url = new URL("http://localhost:9000/pojo/SimpleService"); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - try { - String reply = call(requestInput, conn); - //System.out.println("********************************"+reply); - - InputSource is = new InputSource(new StringReader(reply)); - Document doc = parseMessage(is); - - Text replyMsg = findText(doc.getDocumentElement(), "120"); - Assert.assertEquals(replyMsg.getData(), "120"); - - - } finally { - conn.disconnect(); - } - } finally { - unUseWar("jaxws-pojo-wsProvider"); - } - } - - - - private Definition getWSDLForService(String servicePort) throws WSDLException { - String port = System.getProperty("http.port"); - if(port == null) - port = "9000"; - - String url = "http://localhost:" + port + servicePort + "?WSDL"; - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - return reader.readWSDL(url); - } - - private String invokePojoService(String servicePort) throws UnsupportedOperationException, SOAPException { - String port = System.getProperty("http.port"); - if(port == null) - port = "9000"; - - SOAPConnectionFactory soapConnFactory = - SOAPConnectionFactory.newInstance(); - SOAPConnection connection = soapConnFactory.createConnection(); - - MessageFactory messageFactory = MessageFactory.newInstance(); - SOAPMessage message = messageFactory.createMessage(); - - SOAPPart soapPart = message.getSOAPPart(); - SOAPEnvelope envelope = (SOAPEnvelope) soapPart.getEnvelope(); - SOAPBody body = envelope.getBody(); - - - SOAPElement bodyElement = body.addChildElement(envelope.createName("greetMe")); - SOAPElement strElement = bodyElement.addChildElement("arg0"); - strElement.setValue("JOnAS"); - - message.saveChanges(); - //message.writeTo(System.out); - //System.out.println(); - - URLEndpoint destination = new URLEndpoint("http://localhost:"+ port + servicePort); - SOAPMessage reply = connection.call(message, destination); - - Assert.assertNotNull(reply,"Reply of SimpleService is Null!"); - - String response = null; - try{ - ByteArrayOutputStream os = new ByteArrayOutputStream(); - reply.writeTo(os); - response = new String(os.toByteArray()); - } catch(Exception e) { - e.printStackTrace(); - } - connection.close(); - - return response; - } - - private static String call(InputStream requestInput, HttpURLConnection conn) throws IOException { - conn.setConnectTimeout(30 * 1000); - conn.setReadTimeout(30 * 1000); - conn.setDoInput(true); - conn.setUseCaches(false); - - if (requestInput == null) { - conn.setRequestMethod("GET"); - conn.setRequestProperty("Content-Type", "application/xml"); - - conn.connect(); - } else { - conn.setRequestMethod("POST"); - conn.setDoOutput(true); - conn.setRequestProperty("Content-Type", "application/xml"); - - conn.connect(); - - OutputStream out = conn.getOutputStream(); - - byte[] data = new byte[1024]; - int read = 0; - while ((read = requestInput.read(data, 0, data.length)) != -1) { - out.write(data, 0, read); - } - - requestInput.close(); - - out.flush(); - out.close(); - } - - InputStream is = null; - - try { - is = conn.getInputStream(); - } catch (IOException e) { - is = conn.getErrorStream(); - } - - StringBuffer buf = new StringBuffer(); - BufferedReader in = new BufferedReader(new InputStreamReader(is)); - String inputLine; - while ((inputLine = in.readLine()) != null) { - //System.out.println(inputLine); - buf.append(inputLine); - } - in.close(); - - return buf.toString(); - } - - - private static Document parseMessage(InputSource is) throws Exception { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - DocumentBuilder db = dbf.newDocumentBuilder(); - - Document doc = db.parse(is); - return doc; - } - - private static Text findText(Element element, String value) { - NodeList list = element.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node child = (Node)list.item(i); - if (child instanceof Text) { - Text text = (Text)child; - if (text.getData().indexOf(value) != -1) { - return text; - } - } else if (child instanceof Element) { - Element childEl = (Element)child; - Text text = findText(childEl, value); - if (text != null) { - return text; - } - } - } - return null; - } -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/JWebServicesTestCase.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/JWebServicesTestCase.java deleted file mode 100644 index 9930758deb..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/JWebServicesTestCase.java +++ /dev/null @@ -1,510 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999~2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.util; - -import java.io.IOException; -import java.util.Set; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import com.meterware.httpunit.WebConversation; - -/** - * Define a class to add useful methods for test the webservices - * - Deploy ear, war and beans - * - Retrieve initial context - * @author Florent Benoit - */ -public class JWebServicesTestCase { - - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - - /** - * JONAS_BASE - */ - protected static String jb = null; - - /** - * Initial context used for lookup - */ - protected static Context ictx = null; - - /** - * Connection to the MBeanServer - */ - private static MBeanServerConnection cnx = null; - - /** - * Conversation used for HttpUnit - */ - protected WebConversation wc = null; - - /** - * URL used for the constructor - */ - protected String url = null; - - /** - * Prefix for build URLs - */ - private String prefixUrl = null; - - /** - * Add to the specified url the prefix - * @param url relative URL - * @return absolute path of URL - */ - protected String getAbsoluteUrl (String url) { - return (this.prefixUrl + url); - } - - - /** - * Make an absolute path with the filename. - */ - public String absPath(String name, String extension) { - - String ret = ""; - if ( extension.equals(".jar")) { - ret = jb + "/ejbjars/" + name + ".jar"; - } else if ( extension.equals(".war")) { - ret = jb + "/webapps/" + name + ".war"; - } else if (extension.equals(".ear")) { - ret = jb + "/apps/" + name + ".ear"; - } - return ret; - } - private static JMXServiceURL jmxServerUrl = null; - private static String urlSuffix = "service:jmx:"; - private static String registry = null; - private static String defaultRegistry = "rmi://localhost:19099"; - private static String protocol = null; - private static String defaultProtocol = "jrmp"; - - /* - * Get Connection to the MBean server - * Set the static cnx variable - */ - private void getJmxCnx() { - if (cnx == null) { - try { - if (registry == null) { - registry = defaultRegistry; - } - registry = registry + "/"; - int indx = registry.lastIndexOf(":"); - String st = registry.substring(0, indx); - String serverUrl = urlSuffix + st +"/jndi/"+registry; - - if (protocol == null) { - protocol = defaultProtocol; - } - - String connectorName = protocol.concat("connector_"); - - connectorName = connectorName.concat(jonasName); - serverUrl = serverUrl.concat(connectorName); - - jmxServerUrl = new JMXServiceURL(serverUrl); - JMXConnector cntor = JMXConnectorFactory.connect(jmxServerUrl, null); - cnx = cntor.getMBeanServerConnection(null); - System.out.println("server reached via: "+serverUrl); - } catch (IOException e) { - System.err.println("Can't reach server " + jonasName - + " as couldn't create JMXConnector (" + e.getMessage() - + ")"); - System.err.println("Check name, registry and protocol options."); - System.exit(2); - } - } - } - - /* - * ObjectName of y=the J2eeServerMBean - */ - private static ObjectName j2eeserver = null; - - /* - * Get the ObjectName of the J2eeServerMBean - * @return the ObjectName - */ - private ObjectName getJ2eeServer() { - if (j2eeserver == null) { - try { - ObjectName on = ObjectName.getInstance("*:j2eeType=J2EEServer,name=" + jonasName); - Set j2eeservers = cnx.queryNames(on, null); - if (j2eeservers.isEmpty()) { - System.err.println("Can't admin server " + jonasName + ": didn't found J2EEServer MBean"); - System.exit(2); - } - j2eeserver = (ObjectName) j2eeservers.iterator().next(); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - } - return j2eeserver; - } - - /** - * Initialize the port used by tests and the prefix - * @throws Exception - */ - private void init() throws Exception { - String port = System.getProperty("http.port"); - if (port == null) { - port = "9000"; - } - prefixUrl = "http://localhost:" + port; - setUpProperties(); - } - - /** - * Constructor with a specified name - * @param s the name - * @throws Exception - */ - public JWebServicesTestCase(String s) throws Exception { - init(); - } - /** - * Constructor with a specified name and url - * @param s the name - * @param url the url which can be used - * @throws Exception - */ - public JWebServicesTestCase(String s, String url) throws Exception { - wc = new WebConversation(); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Common setUp routine, used for every test. - * @throws Exception if an error occurs - */ - - protected void setUpProperties() throws Exception { - try { - // get InitialContext - if (ictx == null) { - ictx = getInitialContext(); - } - jb = System.getProperty("jonas.base"); - - registry = System.getProperty("registry"); - protocol = System.getProperty("protocol"); - getJmxCnx(); - - } catch (NamingException e) { - System.err.println("Cannot setup test: " + e); - e.printStackTrace(); - } - } - - - /** - * Load an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void useEar(String fname) throws Exception { - String filename = absPath(fname, ".ear"); - try { - // Load ear in JOnAS if not already loaded. - if (!isEarLoaded(filename)) { - loadEar(filename); - } - - } catch (Exception e) { - throw new Exception("Cannot load Ear : " + e.getMessage()); - } - - } - - /** - * Unload an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void unUseEar(String fname) throws Exception { - String filename = absPath(fname, ".ear"); - try { - - if (isEarLoaded(filename)) { - unloadEar(filename); - } - } catch (Exception e) { - throw new Exception("Cannot unload Ear : " + e.getMessage()); - } - } - - /** - * Load a war file in the jonas server - * @param filename war file, without ".war" extension - * @throws Exception if an error occurs - */ - - public void useWar(String fname) throws Exception { - String filename = absPath(fname, ".war"); - try { - // Load war in JOnAS if not already loaded. - if (!isWarLoaded(filename)) { - loadWar(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load War : " + e.getMessage()); - } - } - - /** - * Unload an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void unUseWar(String fname) throws Exception { - String filename = absPath(fname, ".war"); - try { - - if (isWarLoaded(filename)) { - unloadEar(filename); - } - } catch (Exception e) { - throw new Exception("Cannot unload war : " + e.getMessage()); - } - } - - - /** - * Load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void useBeans(String fname) throws Exception { - try { - String filename = absPath(fname, ".jar"); - // Load bean in EJBServer if not already loaded. - - if (!isJarLoaded(filename)) { - addBeans(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load Bean : " + e.getMessage()); - } - } - - - - /** - * Unload a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void unUseBeans(String filename) throws Exception { - String fname = absPath(filename, ".jar"); - - try { - - //if (isJarLoaded(fname)) { - unloadBeans(fname); - //} - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - - - /* - * isLoaded remote operation - */ - private boolean isLoaded(String filename) { - boolean ret = false; - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - Boolean r = (Boolean) cnx.invoke(getJ2eeServer(), "isDeployed", params, signature); - ret = r.booleanValue(); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - return ret; - } - - /** - * isJarLoaded remote operation - * @param filename jar file, with ".jar" extension - */ - private boolean isJarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - public void addBeans(String filename) { - - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * loadEar remote operation - * @param filename war file, with ".war" extension - */ - public void loadWar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * isWarLoaded remote operation - * @param filename war file, with ".war" extension - */ - private boolean isWarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - /** - * isEarLoaded remote operation - * @param filename ear file, with ".ear" extension - */ - private boolean isEarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - /** - * loadEar remote operation - * @param filename ear file, with ".ear" extension - */ - public void loadEar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * unloadBean remote operation - * @param filename ear file, with ".ear" extension - */ - public void unloadEar(String filename) { - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "undeploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot undeploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot unload ear: " + e); - } - } - - /** - * unloadBean remote operation - * @param filename jar file, with ".jar" extension - */ - public void unloadBeans(String filename) { - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "undeploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot undeploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot unload bean: " + e); - } - } -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/SimpleServiceInterface.java b/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/SimpleServiceInterface.java deleted file mode 100644 index 4b0d078fb5..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/java/org/ow2/jonas/ws/jaxws/test/util/SimpleServiceInterface.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2009 Bull S.A.S. - * Contact: jonas-team@ow2.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.ow2.jonas.ws.jaxws.test.util; - - -import javax.jws.WebMethod; - -public interface SimpleServiceInterface { - - @WebMethod(exclude=false) - public String greetMe(String str); -} diff --git a/jonas_tests/jaxws/jaxws-test-clients/src/main/resources/request1.xml b/jonas_tests/jaxws/jaxws-test-clients/src/main/resources/request1.xml deleted file mode 100644 index ea9019fe05..0000000000 --- a/jonas_tests/jaxws/jaxws-test-clients/src/main/resources/request1.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - \ No newline at end of file diff --git a/jonas_tests/jaxws/pom.xml b/jonas_tests/jaxws/pom.xml deleted file mode 100644 index 86b86ed43d..0000000000 --- a/jonas_tests/jaxws/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - org.ow2.jonas - jonas-modules - 5.1.0-RC3-SNAPSHOT - - 4.0.0 - org.ow2.jonas.ws.jaxws - itests - pom - JOnAS :: Tests :: JAXWS - Tests for JAXWS - - - jaxws-test-base - jaxws-test-clients - jaxws-felix - - - - - \ No newline at end of file diff --git a/jonas_tests/jonas5_tests.ipr b/jonas_tests/jonas5_tests.ipr deleted file mode 100644 index d6b6640553..0000000000 --- a/jonas_tests/jonas5_tests.ipr +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jonasadmin/build.xml b/jonas_tests/jonasadmin/build.xml deleted file mode 100644 index 5e115b2262..0000000000 --- a/jonas_tests/jonasadmin/build.xml +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/jonasserver/F_JonasAdminInfoServer.java b/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/jonasserver/F_JonasAdminInfoServer.java deleted file mode 100755 index 8ca4bc5a59..0000000000 --- a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/jonasserver/F_JonasAdminInfoServer.java +++ /dev/null @@ -1,483 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jonasadmin.test.jonasserver; - -import java.io.IOException; -import java.net.MalformedURLException; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminAuth; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminTestCase; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminUtils; -import org.ow2.jonas.Version; -import org.xml.sax.SAXException; - -import com.meterware.httpunit.HttpUnitOptions; -import com.meterware.httpunit.WebConversation; -import com.meterware.httpunit.WebLink; -import com.meterware.httpunit.WebResponse; -import com.meterware.httpunit.WebTable; - -/** - * Class for testing server infos in jonasAdmin - * @author kemlerp - * - */ -public class F_JonasAdminInfoServer extends JonasAdminTestCase { - - /** - * URL of the Server Management - */ - private static final String URL_JONASADMIN_SERVER = "EditJonasServer.do"; - - /** - * URL of the JMX SERVER - */ - private static final String URL_JONASADMIN_JMX_SERVER = "EditJmxServer.do"; - - /** - * URL of the server registry - */ - private static final String URL_JONASADMIN_SERVER_REGISTRY = "ListRegistry.do"; - - /** - * URL of the SERVLET SERVER - */ - private static final String URL_JONASADMIN_SERVLET_SERVER = "EditServletServer.do"; - - /** - * URL of the JVM - */ - private static final String URL_JONASADMIN_JVM = "EditJvm.do"; - - /** - * URL of owner mbeans - */ - private static final String URL_JONASADMIN_OWNER = "/jonasAdmin/ListOwnerMBeans.do"; - - /** - * RMI PROTOCOL - */ - private static final String RMI_PROTOCOL = "rmi/"; - - /** - * Value of select parameter for JVM - */ - private static final String SELECT_JVM_MBEAN = "jonas%3Aj2eeType%3DJVM%2Cname%3Djonas%2CJ2EEServer%3Djonas"; - - /** - * Value of select parameter for MBEAN Server - */ - private static final String SELECT_MBEAN_SERVER_MBEAN = "JMImplementation%3Atype%3DMBeanServerDelegate"; - - /** - * Value of select parameter for Servlet Server - */ - private static final String SELECT_SERVLET_SERVER_MBEAN = "jonas%3Atype%3Dservice%2Cname%3DwebContainers"; - - /** - * Value of select parameter for Catalina Server - */ - private static final String SELECT_CATALINA_SERVER = "Catalina%3Atype%3DServer"; - - /** - * URL of the MBean attributs - */ - private static final String URL_MBEAN_ATTRIBUTS = "/jonasAdmin/ListMBeanAttributes.do?select="; - - /** - * Balise HTML - */ - private static final String END_OF_COLUMN = ""; - - /** - * A 2nd connection to jonasAdmin - */ - private static WebConversation wc2 = new WebConversation(); - - /** - * Constructor with a specified name - * @param s name - */ - public F_JonasAdminInfoServer(String s) { - super(s, URL_JONASADMIN); - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_JonasAdminInfoServer(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(F_JonasAdminInfoServer.class); - } - - /** - * Setup need for these tests - * jonasAdmin is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - - unUseEar("earsample"); - - if (wc.getCurrentPage().getURL() == null) { - useWar("jonasAdmin"); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception e) { - fail("authentification failed : " + e); - } - } else { - // if there was an error, the connection must be restablished - try { - wc.getFrameContents(FRAME_TREE); - } catch (Exception e) { - wc.getResponse(urlLogOut); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception auth) { - fail("authentification failed : " + auth); - } - } - } - } - - /** - * Test JOnAS server infos - * @throws Exception if error occurs - * - */ - public void testInfos() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - String jonasName = null; - String jonasVersion = Version.getNumber(); - String jonasProtocol = RMI_PROTOCOL + jProp.getRegistryProtocol(); - - String mbeanId = null; - String mbeanSpecification = null; - String mbeanSpecVersion = null; - String mbeanSpecVendor = null; - String mbeanImplementation = null; - String mbeanImplVersion = null; - String mbeanImplVendor = null; - - String registryProtocol = jProp.getRegistryProtocol(); - String registryUrl = jProp.getRegistryUrl(); - int jndiNb = 0; - - String servletName = null; - String servletVersion = null; - String servletService = null; - String servletEngine = null; - String servletHost = null; - - String jvmVersion = jProp.getJvmVersion(); - String jvmVendor = jProp.getJvmVendor(); - String jvmNode = null; - - - // OPEN A SECOND CONNECTION - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc2, url); - } catch (Exception e) { - fail("authentification failed : " + e); - } - - // TEST JONAS SERVER - // Go to jonas server management - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink( WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVER); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - // Get jonas server name - String text; - text = wr.getText(); - int beginIndex = text.indexOf("Server JOnAS ( "); - int endIndex = text.indexOf(" )", beginIndex); - jonasName = text.substring(beginIndex + "Server JOnAS ( ".length(), endIndex); - - try { - // Get table - table = utils.getTable(wr, 0); - - // Verify - assertEquals("It is not the jonas name. ", jonasName, table.getTableCell(0, 2).getText()); - assertEquals("It is not the jonas version. ", jonasVersion, table.getTableCell(1, 2).getText()); - assertEquals("It is not the jonas protocol. ", jonasProtocol, table.getTableCell(2, 2).getText()); - } catch (SAXException e) { - fail("The jonas table is incorrect."); - } - - - // TEST JMX SERVER - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_JMX_SERVER); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - mbeanId = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "MBeanServerId"); - mbeanSpecification = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "SpecificationName"); - mbeanSpecVersion = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "SpecificationVersion"); - mbeanSpecVendor = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "SpecificationVendor"); - mbeanImplementation = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "ImplementationName"); - mbeanImplVersion = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "ImplementationVersion"); - mbeanImplVendor = getMBeanAttribut(SELECT_MBEAN_SERVER_MBEAN, "ImplementationVendor"); - - try { - // Get table - table = utils.getTable(wr, 0); - - // Verify - assertEquals("It is not the mbean server id. ", mbeanId, table.getTableCell(0, 2).getText()); - assertEquals("It is not the mbean server specification name. ", mbeanSpecification, table.getTableCell(1, 2).getText()); - assertEquals("It is not the mbean server specification version. ", mbeanSpecVersion, table.getTableCell(2, 2).getText()); - assertEquals("It is not the mbean server specification vendor. ", mbeanSpecVendor, table.getTableCell(3, 2).getText()); - assertEquals("It is not the mbean server implementation name. ", mbeanImplementation, table.getTableCell(4, 2).getText()); - assertEquals("It is not the mbean server implementation version. ", mbeanImplVersion, table.getTableCell(5, 2).getText()); - assertEquals("It is not the mbean server implementation vendor. ", mbeanImplVendor, table.getTableCell(6, 2).getText()); - } catch (SAXException e) { - fail("The jmx server table is incorrect."); - } - - - // TEST REGISTRY INFOS - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVER_REGISTRY); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - try { - // Get table - table = utils.getTable(wr, 0); - - // Verify - assertEquals("It is not the registry protocol. ", registryProtocol, table.getTableCell(1, 0).getText()); - assertEquals("It is not the registry url. ", registryUrl, table.getTableCell(1, 1).getText()); - } catch (SAXException e) { - fail("The registry table is incorrect."); - } - - try { - //Get table - table = utils.getTable(wr, 3); - int rowNb = table.getRowCount(); - jndiNb = getJndiNb(wr); - text = table.getText(); - - // Verify - if (jndiNb > 0) { - assertEquals("The number of jndi names is not " + jndiNb, rowNb, jndiNb); - } - assertFalse("'EarOpHome' is found. ", text.indexOf("EarOpHome") > -1); - assertFalse("'EarOpHome_L' is found. ", text.indexOf("EarOpHome_L") > -1); - assertFalse("'eisName' is found. ", text.indexOf("eisName") > -1); - } catch (SAXException e) { - fail("The jndi name table is incorrect."); - } - - // Deploy earsample.ear - useEar("earsample"); - - // Refresh - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_JVM); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVER_REGISTRY); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - try { - //Get table - table = utils.getTable(wr, 3); - int jndiNb2 = getJndiNb(wr); - text = table.getText(); - - // Verify - if (jProp.isResource()) { - // 3 JNDI NAMES are added: EarOpHome, EarOpHome_L, eisName - assertEquals("The number of JNDI names has not been updated: ", jndiNb + 3, jndiNb2); - assertTrue("'eisName' is not found. ", text.indexOf("eisName") > -1); - } else { - // 2 JNDI NAMES are added: EarOpHome, EarOpHome_L - assertEquals("The number of JNDI names has not been updated: ", jndiNb + 2, jndiNb2); - } - assertTrue("'EarOpHome' is not found. ", text.indexOf("EarOpHome") > -1); - assertTrue("'EarOpHome_L' is not found. ", text.indexOf("EarOpHome_L") > -1); - } catch (SAXException e) { - fail("The jndi name table is incorrect."); - } - - - // TEST SERVLET SERVER - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVLET_SERVER); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - servletName = getMBeanAttribut(SELECT_SERVLET_SERVER_MBEAN, "ServerName"); - servletVersion = getMBeanAttribut(SELECT_SERVLET_SERVER_MBEAN, "ServerVersion"); - // if CATALINA - if (jProp.isCatalina()) { - String selectService = getMBeanAttribut(SELECT_CATALINA_SERVER, "serviceNames"); - if (selectService.indexOf("[ ") == 0) { - if (selectService.indexOf(" ]") == selectService.length()-2) { - selectService = selectService.substring(2, selectService.length()-2); - } else { - selectService = selectService.substring(2); - } - } - servletService = getMBeanAttribut(selectService, "name"); - String selectContainer = getMBeanAttribut(selectService, "containerName"); - servletEngine = getMBeanAttribut(selectContainer, "name"); - servletHost = getMBeanAttribut(selectContainer, "defaultHost"); - } - - try { - // Get table - table = utils.getTable(wr, 0); - - // Verify - assertEquals("It is not the servlet server name. ", servletName, table.getTableCell(0, 2).getText()); - assertEquals("It is not the servlet server version. ", servletVersion, table.getTableCell(1, 2).getText()); - if (jProp.isCatalina()) { - assertEquals("It is not the servlet server service. ", servletService, table.getTableCell(2, 2).getText()); - assertEquals("It is not the servlet server engine. ", servletEngine, table.getTableCell(3, 2).getText()); - assertEquals("It is not the servlet server host. ", servletHost, table.getTableCell(4, 2).getText()); - } - } catch (SAXException e) { - fail("The jmx server table is incorrect."); - } - - - // TEST JVM INFOS - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_JVM); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - jvmNode = getMBeanAttribut(SELECT_JVM_MBEAN, "node"); - try { - // Get table - table = utils.getTable(wr, 0); - - // Verify - assertEquals("It is not the jvm version. ", jvmVersion, table.getTableCell(0, 2).getText()); - assertEquals("It is not the jvm vendor. ", jvmVendor, table.getTableCell(1, 2).getText()); - assertEquals("It is not the jvm node. ", jvmNode, table.getTableCell(2, 2).getText()); - } catch (SAXException e) { - fail("The jvm table is incorrect."); - } - - } - - /** - * Get the number of JNDI object - * @param contentFrame the content frame - * @return number of JNDI objects - * @throws SAXException if a table or cell doesn't match. - */ - private int getJndiNb(WebResponse contentFrame) throws SAXException { - JonasAdminUtils utils = new JonasAdminUtils(); - WebTable table = utils.getTable(contentFrame, 2); - - String text = table.getTableCell(0, 0).getText(); - int beginIndex = text.indexOf("("); - int endIndex = text.indexOf(")", beginIndex); - String nb = text.substring(beginIndex + "(".length(), endIndex); - - return Integer.parseInt(nb); - } - - /** - * Get MBean attribut - * @param select value of select param to indicate the chosen MBean - * @param attribut name of attribut - * @return value of the attribut - * @throws MalformedURLException if url is invalid - * @throws IOException if url is not correct - * @throws SAXException if an error is found - */ - private String getMBeanAttribut(String select, String attribut) { - WebResponse wr; - String urlAttributs = prefixUrl + URL_MBEAN_ATTRIBUTS + select; - - try { - wr = wc2.getResponse(urlAttributs); - String attributs = wr.getText(); - int position = attributs.indexOf("" + attribut + ""); - int beginIndex = attributs.indexOf("== ", position); - int endIndex = attributs.indexOf(END_OF_COLUMN, beginIndex); - return attributs.substring(beginIndex + "== ".length(), endIndex); - } catch (MalformedURLException e) { - throw new IllegalStateException("Invalid URL: " + url + ". " + e); - } catch (IOException e) { - throw new IllegalStateException("No response from: " + url + ". " + e); - } catch (SAXException e) { - throw new IllegalStateException("No text found. " + e); - } - } - - /** - * Tear Down cleanUp action - * @throws Exception if an error occurs - */ - public void tearDown() throws Exception { - super.tearDown(); - } -} diff --git a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/resource/F_JonasAdminResourceDatasource.java b/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/resource/F_JonasAdminResourceDatasource.java deleted file mode 100755 index d0db88ad53..0000000000 --- a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/resource/F_JonasAdminResourceDatasource.java +++ /dev/null @@ -1,592 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jonasadmin.test.resource; - -import java.util.Properties; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminAuth; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminFiles; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminTestCase; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminUtils; - -import com.meterware.httpunit.HttpUnitOptions; -import com.meterware.httpunit.SubmitButton; -import com.meterware.httpunit.TableCell; -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebLink; -import com.meterware.httpunit.WebResponse; -import com.meterware.httpunit.WebTable; - -/** - * Class for testing datasource Resource - * @author Paul Kemler - */ -public class F_JonasAdminResourceDatasource extends JonasAdminTestCase { - - /** - * URL of datasource resource - */ - private static final String URL_JONASADMIN_DATASOURCE = "EditDeploy.do?type=datasource"; - - /** - * URL of datasource resource - */ - private static final String URL_JONASADMIN_LIST_DATASOURCES = "ListDatasources.do"; - - /** - * URL of deploy - */ - private static final String URL_JONASADMIN_DEPLOY = "EditDeploy.do"; - - /** - * URL of create datasource - */ - private static final String URL_JONASADMIN_CREATE_DATASOURCE = "EditDatasourceProperties.do?action=create"; - - /** - * URL of Datasource resource viewTree - */ - private static final String URL_JONASADMIN_VIEW_DATASOURCE = "viewTree.do?tree=domain*jonas*resources"; - - /** - * number of tabs when you are in the datasource tabs - */ - private static final int NUMBER_OF_TABS_FOR_DATASOURCE = 2; - - /** - * number of tabs when you are in the CONFIRM tabs - */ - private static final int NUMBER_OF_TABS_FOR_CONFIRM = 3; - - /** - * number of tabs when you are in the 'new datasource' tabs - */ - private static final int NUMBER_OF_TABS_FOR_NEW_DATASOURCE = 3; - - /** - * name of the datasource - */ - private String name = ""; - - /** - * Constructor with a specified name - * @param s name - */ - public F_JonasAdminResourceDatasource(String s) { - super(s, URL_JONASADMIN); - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_JonasAdminResourceDatasource(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(F_JonasAdminResourceDatasource.class); - } - - /** - * Setup need for these tests jonasAdmin is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - - if (wc.getCurrentPage().getURL() == null) { - useWar("jonasAdmin"); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception e) { - fail("authentification failed : " + e); - } - } else { - // if there was an error, the connection must be restablished - try { - wc.getFrameContents(FRAME_TREE); - } catch (Exception e) { - wc.getResponse(urlLogOut); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception auth) { - fail("authentification failed : " + auth); - } - } - } - } - - /** - * Test to deploy and undeploy a datasource - * @throws Exception if error occurs - */ - public void testUndeployDeployDatasource() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - WebTable tabTable; - int selectedTab; - /* - * To get some utils for WebTable - */ - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - if (jProp.isDbm()) { - // Add datasource - name = "new_datasource"; - Properties properties = new Properties(); - properties.put("datasource.name", name); - properties.put("datasource.url", "jdbc:h2:tcp://localhost:9001/db_jonas"); - properties.put("datasource.classname", "org.h2.Driver"); - properties.put("datasource.username", "jonas"); - properties.put("datasource.password", "jonas"); - properties.put("datasource.mapper", "rdb.hsql"); - properties.put("jdbc.connchecklevel", "0"); - properties.put("jdbc.connmaxage", "1440"); - properties.put("jdbc.maxopentime", "60"); - properties.put("jdbc.connteststmt", "select 1"); - properties.put("jdbc.minconpool", "10"); - properties.put("jdbc.maxconpool", "30"); - properties.put("jdbc.samplingperiod", "30"); - properties.put("jdbc.maxwaittime", "5"); - properties.put("jdbc.maxwaiters", "100"); - - useDatasource(name, properties); - - // Go to database - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_DATASOURCE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE, selectedTab, "Problem in 'Deployment' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_LIST_DATASOURCES + " is not found in the second tab. ", tabTable - .getTableCell(0, 2).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_LIST_DATASOURCES)); - - String txt = getDeployTable(wr, true); - - if (txt.indexOf(name) == -1) { - fail("The file" + name + " was not found as deployed."); - } - - // Undeploy datasource - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[0]; - - String params = webForm.getParameterValue("undeploy"); - WebForm.Scriptable script = webForm.getScriptableObject(); - if (params.length() == 0) { - params += name; - } else { - params += "," + name; - } - script.setParameterValue("undeploy", params); - - SubmitButton button = webForm.getSubmitButtons()[0]; - button.click(); - - // Confirm - WebResponse submitUndeploy = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 2; - - // Verify tabs - tabTable = utils.getTabTable(submitUndeploy); - testTabs(tabTable, NUMBER_OF_TABS_FOR_CONFIRM, selectedTab, "Problem in 'Confirm' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_DEPLOY + " is not found in the first tab. ", tabTable.getTableCell( - 0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_DEPLOY)); - assertTrue("The link " + URL_JONASADMIN_LIST_DATASOURCES + " is not found in the third tab. ", tabTable - .getTableCell(0, 4).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_LIST_DATASOURCES)); - - webForms = submitUndeploy.getForms(); - webForm = webForms[0]; - - button = webForm.getSubmitButtons()[0]; - button.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_CONFIRM, selectedTab, "Problem in 'Result' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_DEPLOY + " is not found in the first tab. ", tabTable.getTableCell( - 0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_DEPLOY)); - assertTrue("The link " + URL_JONASADMIN_LIST_DATASOURCES + " is not found in the third tab. ", tabTable - .getTableCell(0, 4).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_LIST_DATASOURCES)); - - // Go back to Deployment - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_DEPLOY); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE, selectedTab, "Problem in 'Deployment' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_LIST_DATASOURCES + " is not found in the second tab. ", tabTable - .getTableCell(0, 2).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_LIST_DATASOURCES)); - - txt = getDeployTable(wr, true); - - if (txt.indexOf(name) != -1) { - fail("The jonasAdmin webApp has not removed. " + name); - } - - // now deploy - webForms = wr.getForms(); - webForm = webForms[0]; - - params = webForm.getParameterValue("deploy"); - script = webForm.getScriptableObject(); - - if (params.length() == 0) { - params += name; - } else { - params += "," + name; - } - - script.setParameterValue("deploy", params); - button = webForm.getSubmitButtons()[0]; - button.click(); - - // Confirm - submitUndeploy = wc.getFrameContents(FRAME_CONTENT); - // war is in the table - webForms = submitUndeploy.getForms(); - webForm = webForms[0]; - - button = webForm.getSubmitButtons()[0]; - button.click(); - - // Go back to Deployment - wr = wc.getFrameContents(FRAME_CONTENT); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_DEPLOY); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - - txt = getDeployTable(wr, true); - - if (txt.indexOf(name) == -1) { - fail("The file " + name + " was not found as deployed."); - } - } - } - - /** - * Test to create a new datasource - * @throws Exception if error occurs - */ - public void testCreateNewDatasource() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - WebTable tabTable; - int selectedTab; - // Name of the datasource - name = "new_datasource_"; - // JNDI name The JNDI name to use the datasource - String jndiName = ""; - // Description Description of the datasource - String descr = ""; - // URL URL to access to the database - String urlDatasource = "jdbc:h2:tcp://localhost:9001/db_jonas"; - // JDBC Driver JDBC driver class name to access to the database - String driver = "org.h2.Driver"; - // User name User name or login to log in the database - String user = "jonas"; - // User password User password to log in the database - String password = "jonas"; - // Mapper Mapper used for the datasource - String mapper = "rdb.hsql"; - - /* - * To get some utils for WebTable - */ - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - if (jProp.isDbm()) { - // Go to database - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_DATASOURCE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Go to datasources - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_LIST_DATASOURCES); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 2; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE, selectedTab, "Problem in 'Datasources' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_DEPLOY + " is not found in the first tab. ", tabTable.getTableCell( - 0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_DEPLOY)); - - // Find a new name - boolean found = false; - int i = 0; - while (!found) { - if ((wr.getText().indexOf(name + i) == -1)) { - name = name + i; - jndiName = name; - found = true; - } - i++; - } - - // Create a new datasource - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_CREATE_DATASOURCE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 3; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_NEW_DATASOURCE, selectedTab, "Problem in 'New Datasource' tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_DEPLOY + " is not found in the first tab. ", tabTable.getTableCell( - 0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_DEPLOY)); - assertTrue("The link " + URL_JONASADMIN_LIST_DATASOURCES + " is not found in the third tab. ", tabTable - .getTableCell(0, 2).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_LIST_DATASOURCES)); - - WebForm form = wr.getForms()[0]; - createNewDatasource(form, name, jndiName, descr, urlDatasource, driver, user, password, mapper); - wr = wc.getFrameContents(FRAME_CONTENT); - - // Verify if the datasource is deployed - assertTrue("The created datasource ('" + name + "') is not deployed. ", isLoadedDatasource(name)); - table = utils.getTable(wr, 3); - int datasourceRow = utils.getRow(name, table, 1).intValue(); - if (datasourceRow == -1) { - fail("The datasource '" + name + "' is not found in datasource table. Restart jonas and try again. "); - } else { - // Verify if there is an image to indicate that the datasource is deployed - TableCell cell = table.getTableCell(datasourceRow, 0); - assertEquals("There is no a image to indicate that '" + name + "' datasource is deployed. ", 1, cell.getImages().length); - } - } - - } - - /** - * Test to view empty value error message - * @throws Exception if error occurs - */ - public void testCreateDatasourceWithEmptyValue() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - WebTable tabTable; - int selectedTab; - // Name Name of the datasource - name = ""; - // JNDI name The JNDI name to use the datasource - String jndiName = ""; - // Description Description of the datasource - String descr = ""; - // URL URL to access to the database - String urlDatasource = ""; - // JDBC Driver JDBC driver class name to access to the database - String driver = ""; - // User name User name or login to log in the database - String user = ""; - // User password User password to log in the database - String password = ""; - // Mapper Mapper used for the datasource - String mapper = ""; - - /* - * To get some utils for WebTable - */ - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - if (jProp.isDbm()) { - // Go to database - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_DATASOURCE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Go to datasources - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_LIST_DATASOURCES); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 2; - - // Create a new datasource - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_CREATE_DATASOURCE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 3; - - WebForm form = wr.getForms()[0]; - createNewDatasource(form, name, jndiName, descr, urlDatasource, driver, user, password, mapper); - wr = wc.getFrameContents(FRAME_CONTENT); - - // Verify error messages - table = utils.getTable(wr, 0); - TableCell cell = table.getTableCell(0, 0); - - // class errors - assertEquals("The value of the class attribut of the cell is not 'errors'. ", "errors", cell.getAttribute("class")); - // Name cannot be empty - String emptyName = "Name cannot be empty"; - assertTrue("The message '" + emptyName + "' is not found. ", cell.getText().indexOf(emptyName) != -1); - // JNDI name cannot be empty - String emptyJndiName = "JNDI name cannot be empty"; - assertTrue("The message '" + emptyJndiName + "' is not found. ", cell.getText().indexOf(emptyJndiName) != -1); - // JDBC Driver cannot be empty - String emptyJdbcDriver = "JDBC Driver cannot be empty"; - assertTrue("The message '" + emptyJdbcDriver + "' is not found. ", cell.getText().indexOf(emptyJdbcDriver) != -1); - } - - } - - /** - * Tear Down - * cleanUp action - */ - public void tearDown() throws Exception { - - if (jProp.isDbm()) { - // remove created datasource file - if (!name.equals("")) { - // Undeploy datasource - unUseDatasource(name); - // Delete file - JonasAdminFiles.deleteConfigFile(name + ".properties"); - name = ""; - } - } - - super.tearDown(); - } - - - /** - * Return the text of the deployed table or the deployable table - * @param wr the WebResponse to use - * @param deployed if true return the text deployed table, if false text of - * deployable - * @return the text of the deployed table or the deployable table - * @throws Exception if an error occurs - */ - private String getDeployTable(WebResponse wr, boolean deployed) throws Exception { - - // Extract right table - JonasAdminUtils utils = new JonasAdminUtils(); - WebTable table = utils.getTable(wr, 0); - - TableCell deployableCell = table.getTableCell(1, 0); - TableCell deployedCell = table.getTableCell(1, 2); - - if (deployed) { - return deployedCell.getText(); - } else { - return deployableCell.getText(); - } - } - - /** - * Create a new datasource in jonasAdmin - * @param form datasource form - * @param name the name of the datasource - * @param datasourceName JNDI name - * @param datasourceDescription the description of the datasource - * @param datasourceUrl url to access to the databse - * @param datasourceClassname JDBC driver class name to access to the - * database - * @param datasourceUsername User name or login to log in the database - * @param datasourcePassword User password to log in the database - * @param datasourceMapper Mapper used for the datasource - * @throws Exception if an error occurs when button is clicked. - */ - private void createNewDatasource(WebForm form, String name, String datasourceName, String datasourceDescription, - String datasourceUrl, String datasourceClassname, String datasourceUsername, String datasourcePassword, - String datasourceMapper) throws Exception { - SubmitButton button = form.getSubmitButtons()[0]; - - form.setParameter("name", name); - form.setParameter("datasourceName", datasourceName); - form.setParameter("datasourceDescription", datasourceDescription); - form.setParameter("datasourceUrl", datasourceUrl); - form.setParameter("datasourceClassname", datasourceClassname); - form.setParameter("datasourceUsername", datasourceUsername); - form.setParameter("datasourcePassword", datasourcePassword); - form.setParameter("datasourceMapper", datasourceMapper); - - button.click(); - } -} \ No newline at end of file diff --git a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/service/database/F_JonasAdminDatabase.java b/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/service/database/F_JonasAdminDatabase.java deleted file mode 100755 index f43c411ae3..0000000000 --- a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/service/database/F_JonasAdminDatabase.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jonasadmin.test.service.database; - -import java.util.Properties; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.Query; -import javax.management.QueryExp; - -import junit.framework.TestSuite; - -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminAuth; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminFiles; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminTestCase; -import org.objectweb.jonas.jonasadmin.test.util.JonasAdminUtils; - -import com.meterware.httpunit.HttpUnitOptions; -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebLink; -import com.meterware.httpunit.WebResponse; -import com.meterware.httpunit.WebTable; - -/** - * Class for testing database service - * @author Paul Kemler - * - */ -public class F_JonasAdminDatabase extends JonasAdminTestCase { - - /** - * URL of database service - */ - private static final String URL_JONASADMIN_SERVICE_DATABASE = "ListDatabases.do"; - - /** - * URL of datasource statistics - */ - private static final String URL_JONASADMIN_EDIT = "EditDatasource.do"; - - /** - * URL of datasource statistics - */ - private static final String URL_JONASADMIN_STATISTICS = "EditDatasourceStat.do"; - - /** - * URL of database service - */ - private static final String URL_JONASADMIN_USED_BY = "datasourceUsedBy.jsp"; - - /** - * number of tabs when you are in the datasource tab - */ - private static final int NUMBER_OF_TABS_FOR_DATASOURCE = 1; - - /** - * number of tabs when the datasource is not used - */ - private static final int NUMBER_OF_TABS_FOR_DATASOURCE_NOT_USED = 3; - - /** - * number of tabs when the datasource is used - */ - private static final int NUMBER_OF_TABS_FOR_DATASOURCE_USED = 4; - - /** - * name of the datasource - */ - private String name = ""; - - /** - * Constructor with a specified name - * @param s name - */ - public F_JonasAdminDatabase(String s) { - super(s, URL_JONASADMIN); - } - - /** - * Main method - * @param args the arguments - */ - public static void main(String[] args) { - - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String sArg = args[argn]; - if (sArg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_JonasAdminDatabase(testtorun)); - } - } - - /** - * Get a new TestSuite for this class - * @return a new TestSuite for this class - */ - public static TestSuite suite() { - return new TestSuite(F_JonasAdminDatabase.class); - } - - /** - * Setup need for these tests - * jonasAdmin is required - * @throws Exception if it fails - */ - protected void setUp() throws Exception { - super.setUp(); - - if (wc.getCurrentPage().getURL() == null) { - useWar("jonasAdmin"); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception e) { - fail("authentification failed : " + e); - } - } else { - // if there was an error, the connection must be restablished - try { - wc.getFrameContents(FRAME_TREE); - } catch (Exception e) { - wc.getResponse(urlLogOut); - // login to jonas admin - try { - JonasAdminAuth.doValidAuth(wc, url); - } catch (Exception auth) { - fail("authentification failed : " + auth); - } - } - } - } - - /** - * Test information of a JDBC - * @throws Exception if error occurs - * - */ - public void testJDBCInfo() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - WebTable tabTable; - int selectedTab; - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - if (jProp.isDbm()) { - // Add datasource - name = "new_datasource_info"; - String datasourceName = name; - String datasourceUrl = "jdbc:h2:tcp://localhost:9001/db_jonas"; - String datasourceClassname = "org.h2.Driver"; - String datasourceUsername = "jonas"; - String datasourcePassword = "jonas"; - String datasourceMapper = "rdb.hsql"; - String jdbcConnchecklevel = "0"; - String jdbcConnmaxage = "1440"; - String jdbcMaxopentime = "60"; - String jdbcConnteststmt = "select 1"; - String jdbcMinconpool = "10"; - String jdbcMaxconpool = "30"; - String jdbcSamplingperiod = "30"; - String jdbcMaxwaittime = "5"; - String jdbcMaxwaiters = "100"; - - Properties properties = new Properties(); - properties.put("datasource.name", datasourceName); - properties.put("datasource.url", datasourceUrl); - properties.put("datasource.classname", datasourceClassname); - properties.put("datasource.username", datasourceUsername); - properties.put("datasource.password", datasourcePassword); - properties.put("datasource.mapper", datasourceMapper); - properties.put("jdbc.connchecklevel", jdbcConnchecklevel); - properties.put("jdbc.connmaxage", jdbcConnmaxage); - properties.put("jdbc.maxopentime", jdbcMaxopentime); - properties.put("jdbc.connteststmt", jdbcConnteststmt); - properties.put("jdbc.minconpool", jdbcMinconpool); - properties.put("jdbc.maxconpool", jdbcMaxconpool); - properties.put("jdbc.samplingperiod", jdbcSamplingperiod); - properties.put("jdbc.maxwaittime", jdbcMaxwaittime); - properties.put("jdbc.maxwaiters", jdbcMaxwaiters); - - useDatasource(name, properties); - - // Use alarm.ear for adding opened connections - useEar("alarm"); - - // Go to service database - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVICE_DATABASE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE, selectedTab, "Problem in 'Datasources' tab."); - - // Verify JNDI Name - table = utils.getTable(wr, 0); - int rowNewDatasource = utils.getRow(name, table).intValue(); - if (rowNewDatasource == -1) { - fail("'" + name + "' was not found in the table. "); - } - int columnJNDI = 1; - assertEquals("It is not the JNDI name of '" + name + "'. ", datasourceName, table.getTableCell(rowNewDatasource, columnJNDI).getText()); - - // Verify JDBC Connection - int columnJDBCConnection = 2; - int currentOpenedConnection = getCurrentOpenedConnection(datasourceName); - assertEquals("It is not the number of opened connection for '" + name + "'. ", currentOpenedConnection, Integer.parseInt(table.getTableCell(rowNewDatasource, columnJDBCConnection).getText())); - - // Go to "new_datasource_info" database - link = wr.getLinkWith(name); - if (link == null) { - fail("No link was found for '" + name + "'in the page. "); - } - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 2; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE_NOT_USED, selectedTab, "Problem in the datasource tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_SERVICE_DATABASE + " is not found in the first tab. ", tabTable - .getTableCell(0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_SERVICE_DATABASE)); - assertTrue("The link " + URL_JONASADMIN_STATISTICS + " is not found in the third tab. ", tabTable - .getTableCell(0, 4).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_STATISTICS)); - - // Verify information - // JDBC Datasource configuration - table = utils.getTable(wr, 1); - // JNDI name - assertEquals("It is not the JNDI name of '" + name + "'. ", datasourceName, table.getTableCell(0, 2).getText()); - // Description no desc - assertEquals("It is not the description of '" + name + "'. ", "no desc", table.getTableCell(1, 2).getText()); - // URL jdbc:h2:tcp://localhost:9001/db_jonas - assertEquals("It is not the URL of '" + name + "'. ", datasourceUrl, table.getTableCell(2, 2).getText()); - // User name jonas - assertEquals("It is not the user name of '" + name + "'. ", datasourceUsername, table.getTableCell(3, 2).getText()); - // User password jonas - assertEquals("It is not the user password of '" + name + "'. ", datasourcePassword, table.getTableCell(4, 2).getText()); - // Mapper rdb.hsql - assertEquals("It is not the mapper of '" + name + "'. ", datasourceMapper, table.getTableCell(5, 2).getText()); - - // JDBC Driver configuration - table = utils.getTable(wr, 4); - // Driver class name org.h2.Driver - assertEquals("It is not the driver class name of '" + name + "'. ", datasourceClassname, table.getTableCell(0, 2).getText()); - - // JDBC connection configuration - WebForm form = wr.getForms()[0]; - // Maximum age - assertEquals("It is not the maximum age of '" + name + "'. ", jdbcConnmaxage, form.getParameterValue("jdbcConnMaxAge")); - // Maximum open time - assertEquals("It is not the maximum open time of '" + name + "'. ", jdbcMaxopentime, form.getParameterValue("jdbcMaxOpenTime")); - // Checking level - assertEquals("It is not the checking level of '" + name + "'. ", jdbcConnchecklevel, form.getParameterValue("jdbcConnCheckLevel")); - // Test - assertEquals("It is not the test of '" + name + "'. ", jdbcConnteststmt, form.getParameterValue("jdbcTestStatement")); - // Pool minimum - assertEquals("It is not the pool minimum of '" + name + "'. ", jdbcMinconpool, form.getParameterValue("jdbcMinConnPool")); - // Pool maximum - assertEquals("It is not the pool maximum time of '" + name + "'. ", jdbcMaxconpool, form.getParameterValue("jdbcMaxConnPool")); - // Max Wait Time - assertEquals("It is not the maximum wait time of '" + name + "'. ", jdbcMaxwaittime, form.getParameterValue("jdbcMaxWaitTime")); - // Max Waiters - assertEquals("It is not the maximum waiters of '" + name + "'. ", jdbcMaxwaiters, form.getParameterValue("jdbcMaxWaiters")); - // Sampling Period - assertEquals("It is not the sampling Period of '" + name + "'. ", jdbcSamplingperiod, form.getParameterValue("jdbcSamplingPeriod")); - - } - } - - /** - * Test Used By Tab of database service - * @throws Exception if error occurs - * - */ - public void testJDBCUsedBy() throws Exception { - - WebResponse wr; - WebLink link; - WebTable table; - WebTable tabTable; - int selectedTab; - String jdbc1Datasource = ""; - JonasAdminUtils utils = new JonasAdminUtils(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - if (jProp.isDbm()) { - - // Go to service database - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVICE_DATABASE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Search if there is a datasource with 'jdbc_1' as JNDI name - table = utils.getTable(wr, 0); - int columnJNDI = 1; - int rowJDBC1 = utils.getRow("jdbc_1", table, columnJNDI).intValue(); - if (rowJDBC1 == -1) { - // Add datasource - name = "new_datasource_used_by"; - String datasourceName = "jdbc_1"; - String datasourceUrl = "jdbc:h2:tcp://localhost:9001/db_jonas"; - String datasourceClassname = "org.h2.Driver"; - String datasourceUsername = "jonas"; - String datasourcePassword = "jonas"; - String datasourceMapper = "rdb.hsql"; - String jdbcConnchecklevel = "0"; - String jdbcConnmaxage = "1440"; - String jdbcMaxopentime = "60"; - String jdbcConnteststmt = "select 1"; - String jdbcMinconpool = "10"; - String jdbcMaxconpool = "30"; - String jdbcSamplingperiod = "30"; - String jdbcMaxwaittime = "5"; - String jdbcMaxwaiters = "100"; - - Properties properties = new Properties(); - properties.put("datasource.name", datasourceName); - properties.put("datasource.url", datasourceUrl); - properties.put("datasource.classname", datasourceClassname); - properties.put("datasource.username", datasourceUsername); - properties.put("datasource.password", datasourcePassword); - properties.put("datasource.mapper", datasourceMapper); - properties.put("jdbc.connchecklevel", jdbcConnchecklevel); - properties.put("jdbc.connmaxage", jdbcConnmaxage); - properties.put("jdbc.maxopentime", jdbcMaxopentime); - properties.put("jdbc.connteststmt", jdbcConnteststmt); - properties.put("jdbc.minconpool", jdbcMinconpool); - properties.put("jdbc.maxconpool", jdbcMaxconpool); - properties.put("jdbc.samplingperiod", jdbcSamplingperiod); - properties.put("jdbc.maxwaittime", jdbcMaxwaittime); - properties.put("jdbc.maxwaiters", jdbcMaxwaiters); - - useDatasource(name, properties); - - jdbc1Datasource = name; - } else { - jdbc1Datasource = table.getTableCell(rowJDBC1, 0).getText(); - } - - // Use alarm.ear - useEar("alarm"); - - // Reload service database page - wr = wc.getFrameContents(FRAME_TREE); - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_SERVICE_DATABASE); - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 1; - - // Verify JDBC Connection is positif - rowJDBC1 = utils.getRow("jdbc_1", table, columnJNDI).intValue(); - int columnJDBCConnection = 2; - int currentOpenedConnection = getCurrentOpenedConnection("jdbc_1"); - assertEquals("It is not the number of opened connection for 'jdbc_1'. ", currentOpenedConnection, Integer.parseInt(table.getTableCell(rowJDBC1, columnJDBCConnection).getText())); - assertTrue("There is no opened connection for 'jdbc_1' JNDI name. ", currentOpenedConnection > 0); - - // Go to database - link = wr.getLinkWith(jdbc1Datasource); - if (link == null) { - fail("No link was found for '" + name + "'in the page. "); - } - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 2; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE_USED, selectedTab, "Problem in the datasource tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_SERVICE_DATABASE + " is not found in the first tab. ", tabTable - .getTableCell(0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_SERVICE_DATABASE)); - assertTrue("The link " + URL_JONASADMIN_STATISTICS + " is not found in the third tab. ", tabTable - .getTableCell(0, 4).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_STATISTICS)); - assertTrue("The link " + URL_JONASADMIN_USED_BY + " is not found in the third tab. ", tabTable - .getTableCell(0, 6).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_USED_BY)); - - // Go to "Used by" tab - link = wr.getFirstMatchingLink(WebLink.MATCH_URL_STRING, URL_JONASADMIN_USED_BY); - if (link == null) { - fail("No link was found for '" + name + "'in the page. "); - } - link.click(); - wr = wc.getFrameContents(FRAME_CONTENT); - selectedTab = 4; - - // Verify tabs - tabTable = utils.getTabTable(wr); - testTabs(tabTable, NUMBER_OF_TABS_FOR_DATASOURCE_USED, selectedTab, "Problem in the datasource tab."); - // - links - assertTrue("The link " + URL_JONASADMIN_SERVICE_DATABASE + " is not found in the first tab. ", tabTable - .getTableCell(0, 0).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_SERVICE_DATABASE)); - assertTrue("The link " + URL_JONASADMIN_EDIT + " is not found in the third tab. ", tabTable - .getTableCell(0, 2).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_EDIT)); - assertTrue("The link " + URL_JONASADMIN_STATISTICS + " is not found in the third tab. ", tabTable - .getTableCell(0, 4).getLinks()[0].getURLString().endsWith(URL_JONASADMIN_STATISTICS)); - - // Verify there is Alarm Record EJB - table = utils.getTable(wr, 0); - int rowEJB = utils.getRow("AlarmRecord", table).intValue(); - if (rowEJB == -1) { - fail("There is not 'Alarm Record' in the 'Used By' table. " + table.getText()); - } - - // Verify type - assertEquals("The EJB type is not EntityBean. ", "EntityBean", table.getTableCell(rowEJB, 1).getText()); - - // Verify link - link = table.getTableCell(rowEJB, 0).getLinks()[0]; - if (link == null) { - fail("No link was found for '" + name + "'in the page. "); - } - int code = wc.sendRequest(link.getRequest()).getResponseCode(); - assertEquals("Fail to go to '" + link.getURLString() + "'. ", 200, code); - - } - } - - /** - * Tear Down - * cleanUp action - */ - public void tearDown() throws Exception { - - if (jProp.isDbm()) { - // remove created datasource file - if (!name.equals("")) { - // Undeploy datasource - unUseDatasource(name); - // Delete file - JonasAdminFiles.deleteConfigFile(name + ".properties"); - name = ""; - } - } - super.tearDown(); - } - - /** - * Get current opened connection - * @return number of current opened connection - * @throws Exception if an error occurs - */ - private int getCurrentOpenedConnection(String jndiName) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("*:j2eeType=JDBCDataSource,*"); - - QueryExp exp = Query.match(Query.attr("jndiName"), Query.value(jndiName)); - - ObjectName dataSourceON = (ObjectName) server.queryNames(on, exp).iterator().next(); - Integer currentOpenedConnection = (Integer) server.getAttribute(dataSourceON, "currentOpened"); - - return currentOpenedConnection.intValue(); - } - -} diff --git a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JProperties.java b/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JProperties.java deleted file mode 100644 index a8b4fe9b62..0000000000 --- a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JProperties.java +++ /dev/null @@ -1,533 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jonasadmin.test.util; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Properties; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import org.ow2.jonas.adm.AdmInterface; - -/** - * JOnAS property accessor - * @author kemlerp - */ -public class JProperties { - - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - - /** - * Initial context used for lookup - */ - private static Context ictx = null; - - /** - * JOnAS admin used for communicate via JMX to JOnAS - */ - private static AdmInterface admI = null; - - /** - * System properties - */ - private static Properties systEnv = System.getProperties(); - - /** - * Separator of file - */ - private static String fileSeparator = systEnv.getProperty("file.separator"); - - /** - * -Djonas.test property - */ - private static final String JONAS_TEST = "jonas.test"; - - /** - * JONAS_TEST - */ - private static String jonasTest = systEnv.getProperty(JONAS_TEST); - - /** - * -Djonas.base property - */ - private static final String JONAS_BASE = "jonas.base"; - - /** - * JONAS_BASE - */ - private static String jonasBase = systEnv.getProperty(JONAS_BASE); - - /** - * resource directory name - */ - private static final String RESOURCE_DIR = "resources"; - - /** - * conf directory name - */ - private static final String CONF_DIR = "conf"; - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Get list environnement - * @return JOnAS protperties - * @throws Exception if list environnement cannot be got - */ - public Properties getPropertiesEnv() throws Exception { - Properties prop = null; - - try { - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - prop = admI.listEnv(); - } catch (Exception e) { - throw new Exception("Cannot get list environnement : " + e.getMessage()); - } - - return prop; - } - - /** - * Get services in jonas properties - * @return A table of string with services in jonas properties - * @throws Exception if properties cannot be got - */ - public String[] getServices() throws Exception { - Properties propertiesEnv = getPropertiesEnv(); - String services = propertiesEnv.getProperty("jonas.services"); - return services.split(","); - } - - /** - * Search a service in services - * @param service The string that is searched - * @return true if there is the service in services else false - * @throws Exception if services cannot be got - */ - public boolean searchService(String service) throws Exception { - String[] services = getServices(); - boolean found = false; - int i = 0; - - while (!found && i < services.length) { - if (services[i].equals(service)) { - found = true; - } - i++; - } - - return found; - } - - /** - * Db in service property - * @return True if db is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isDb() throws Exception { - boolean exist = false; - try { - if (searchService("db")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Dbm in service property - * @return True if dbm is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isDbm() throws Exception { - boolean exist = false; - try { - if (searchService("dbm")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Discovery in service property - * @return True if discovery is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isDiscovery() throws Exception { - boolean exist = false; - try { - if (searchService("discovery")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Ear in service property - * @return True if ear is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isEar() throws Exception { - boolean exist = false; - try { - if (searchService("ear")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Ejb in service property - * @return True if ejb is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isEjb() throws Exception { - boolean exist = false; - try { - if (searchService("ejb")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Jms in service property - * @return True if jms is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isJms() throws Exception { - boolean exist = false; - try { - if (searchService("jms")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Jmx in service property - * @return True if Jmx is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isJmx() throws Exception { - boolean exist = false; - try { - if (searchService("jmx")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Jtm in service property - * @return True if jtm is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isJtm() throws Exception { - boolean exist = false; - try { - if (searchService("jtm")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Mail in service property - * @return True if db is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isMail() throws Exception { - boolean exist = false; - try { - if (searchService("mail")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Registry in service property - * @return True if registry is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isRegistry() throws Exception { - boolean exist = false; - try { - if (searchService("registry")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Resource in service property - * @return True if resource is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isResource() throws Exception { - boolean exist = false; - try { - if (searchService("resource")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Security in service property - * @return True if security is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isSecurity() throws Exception { - boolean exist = false; - try { - if (searchService("security")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Web in service property - * @return True if web is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isWeb() throws Exception { - boolean exist = false; - try { - if (searchService("web")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * Ws in service property - * @return True if ws is a value of service property - * @throws Exception if service property cannot be got - */ - public boolean isWs() throws Exception { - boolean exist = false; - try { - if (searchService("ws")) { - exist = true; - } - } catch (Exception e) { - throw new Exception("Cannot get services : " + e.getMessage()); - } - return exist; - } - - /** - * JMS service location - * @return True if it is collocated, else False - * @throws Exception if property cannot be got - */ - public boolean isJMSCollocated() throws Exception { - Properties propertiesEnv = getPropertiesEnv(); - boolean collocated = Boolean.valueOf(propertiesEnv.getProperty("jonas.service.jms.collocated")).booleanValue(); - return collocated; - } - - /** - * Catalina in jonas properties - * @return True if Catalina is the web service, else false - * @throws Exception if property cannot be got - */ - public boolean isCatalina() throws Exception { - Properties propertiesEnv = getPropertiesEnv(); - String webClass = propertiesEnv.getProperty("jonas.service.web.class"); - return webClass.endsWith("CatalinaJWebContainerServiceWrapper"); - } - - /** - * Jtm location - * @return True if jtm is remote, False if it is collocated - * @throws Exception if property cannot be got - */ - public boolean isJtmRemote() throws Exception { - Properties propertiesEnv = getPropertiesEnv(); - boolean remote = Boolean.valueOf(propertiesEnv.getProperty("jonas.service.jtm.remote")).booleanValue(); - return remote; - } - - /** - * Get properties from a file in resources directory. - * @param fileName name of the property file with ".properties". - * @return Properties. - * @throws Exception if the file is not found. - */ - public Properties getProperties(String fileName) throws Exception { - // Get ClassLoader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL url = cl.getResource(fileName); - InputStream is = cl.getResourceAsStream(fileName); - Properties configFile = new Properties(); - configFile.load(is); - return configFile; - } - - /** - * Get properties from a file in $JONAS_TEST/jonasadmin directory. - * @param fileName name of the property file without ".properties". - * @return Properties. - * @throws FileNotFoundException if the file is not found. - */ - private Properties getCarolProperties() throws FileNotFoundException { - // ${jonas.base}/conf/carol.properties - if (jonasBase.equalsIgnoreCase("${myenv.JONAS_BASE}")) { - throw new FileNotFoundException("You must add JONAS_BASE in your environnement variables. "); - } else { - String propFileName = jonasBase + fileSeparator + CONF_DIR + fileSeparator + "carol" + ".properties"; - - File f = null; - Properties configFile = new Properties(); - try { - f = new File(propFileName); - FileInputStream is = new FileInputStream(f); - configFile.load(is); - } catch (FileNotFoundException e) { - throw new FileNotFoundException("Cannot find properties for " + propFileName); - } catch (IOException e) { - System.err.println(e); - } - return configFile; - } - } - - /** - * Get registry protocol - * @return protocol name (jrmp, iiop, cmi) - */ - public String getRegistryProtocol() { - String protocol = null; - try { - protocol = getCarolProperties().getProperty("carol.protocols"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return protocol; - } - - /** - * Get registry url - * @return url of the registry - */ - public String getRegistryUrl() { - String protocol = null; - String url = null; - try { - protocol = getCarolProperties().getProperty("carol.protocols"); - - try { - url = getCarolProperties().getProperty("carol." + protocol + ".url"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - return url; - } - - /** - * Get Jvm Version - * @return the java version - */ - public String getJvmVersion() { - return systEnv.getProperty("java.version"); - } - - /** - * Get Jvm vendor - * @return value of the property java.vm.specification.vendor - */ - public String getJvmVendor() { - return systEnv.getProperty("java.vm.specification.vendor"); - } -} \ No newline at end of file diff --git a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JonasAdminTestCase.java b/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JonasAdminTestCase.java deleted file mode 100644 index bece60e288..0000000000 --- a/jonas_tests/jonasadmin/src/org/objectweb/jonas/jonasadmin/test/util/JonasAdminTestCase.java +++ /dev/null @@ -1,909 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999-2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jonasadmin.test.util; - -import java.io.File; -import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.net.URLClassLoader; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.TestCase; - -import org.ow2.jonas.adm.AdmInterface; -import org.ow2.jonas.lib.management.javaee.J2eeObjectName; -import org.omg.CORBA.ORB; - -import com.meterware.httpunit.HttpUnitOptions; -import com.meterware.httpunit.TableCell; -import com.meterware.httpunit.WebConversation; -import com.meterware.httpunit.WebForm; -import com.meterware.httpunit.WebResponse; -import com.meterware.httpunit.WebTable; - -/** - * Define a class to add useful methods for test the examples - * - Deploy ear, war and beans - * - Retrieve initial context - * @author Florent Benoit - */ -public class JonasAdminTestCase extends TestCase { - - /** - * URL of the login page - * - */ - protected static final String URL_JONASADMIN = "/jonasAdmin/"; - - /** - * NAME of FRAME content - */ - protected static final String FRAME_CONTENT = "content"; - - /** - * NAME of FRAME tree - */ - protected static final String FRAME_TREE = "tree"; - - /** - * NAME of FRAME top - */ - protected static final String FRAME_TOP = "top"; - - /** - * URL of the deployment of EARs - */ - protected static final String URL_JONASADMIN_DEPLOYEAR = "/jonasAdmin/EditDeploy.do?type=ear"; - - /** - * URL of the deployment of JARs - */ - protected static final String URL_JONASADMIN_DEPLOYJAR = "/jonasAdmin/EditDeploy.do?type=jar"; - - /** - * Name of the property file of jonasAdmin tests - */ - private static final String JONASADMINTEST_PROPERTY_NAME = "jonasAdminTests.properties"; - /** - * JoramAdmin MBean's OBJECT_NAME - */ - private static final String JORAM_ADMIN_ON = "joramClient:type=JoramAdmin"; - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - /** - * Name of the domain - */ - private static String domainName = "jonas"; - /** - * Initial context used for lookup - */ - private static Context ictx = null; - - /** - * JOnAS admin used for communicate via JMX to JOnAS - */ - private static AdmInterface admI = null; - - /** - * JMX connector - */ - private static JMXConnector connector = null; - - /** - * MBean Server Connection - */ - private static MBeanServerConnection currentServerConnection = null; - - /** - * Client ORB - */ - private static ORB orb =null; - - /** - * Conversation used for HttpUnit - */ - protected static WebConversation wc = null; - - /** - * URL used for the constructor - */ - protected String url = null; - - /** - * URL used to return to Welcome.jsp - */ - protected String urlWelcome = null; - - /** - * URL used to log out - */ - protected String urlLogOut = null; - - - /** - * Prefix for build URLs - */ - protected String prefixUrl = null; - - /** - * JOnAS and jonasAdmin properties - */ - protected JProperties jProp = null; - - /** - * jonasAdmin test properties - */ - protected Properties configFile; - - /** - * jonasAdmin port - */ - protected String port; - - /** - * Add to the specified url the prefix - * @param url relative URL - * @return absolute path of URL - */ - protected String getAbsoluteUrl (String url) { - return (this.prefixUrl + url); - } - - /** - * Initialize the port used by tests and the prefix - */ - private void init() { - // Port - port = System.getProperty("http.port"); - if (port == null) { - port = "9000"; - } - - // urls - prefixUrl = "http://localhost:" + port; - urlWelcome = prefixUrl + "/jonasAdmin/Welcome.do"; - urlLogOut = prefixUrl + "/jonasAdmin/logOut.do"; - - // Properties - jProp = new JProperties(); - - try { - configFile = jProp.getProperties(JONASADMINTEST_PROPERTY_NAME); - } catch (Exception e) { - System.err.println("Cannot find file : " + JONASADMINTEST_PROPERTY_NAME + ". " + e); - e.printStackTrace(); - } - - } - - /** - * Constructor with a specified name - * @param s the name - */ - public JonasAdminTestCase(String s) { - super(s); - init(); - } - - /** - * Constructor with a specified name and url - * @param s the name - * @param url the url which can be used - */ - public JonasAdminTestCase(String s, String url) { - super(s); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Common setUp routine, used for every test. - * @throws Exception if an error occurs - */ - protected void setUp() throws Exception { - - // WebConversation to jonasAdmin - wc = JonasAdminConnexion.getWc(); - if (wc == null) { - wc = JonasAdminConnexion.createWc(); - } - - try { - // get InitialContext - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - } catch (NamingException e) { - System.err.println("Cannot setup test: " + e); - e.printStackTrace(); - } - - // Get a MBean Server connection and set currentServerConnection variable - initMBeanServer(); - } - - - /** - * Load an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void useEar(String filename) throws Exception { - - try { - // Load ear in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - //Test in both directories (apps/ and apps/autoload) - String appsFileName = filename + ".ear"; - String autoloadAppsFileName = "autoload" + File.separator + filename + ".ear"; - if (!admI.isEarLoaded(appsFileName) && !admI.isEarLoaded(autoloadAppsFileName)) { - //if the file was in autoload, it was loaded - admI.addEar(appsFileName); - } - - } catch (Exception e) { - throw new Exception("Cannot load Ear : " + e.getMessage()); - } - } - - - /** - * Unload a ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void unUseEar(String filename) throws Exception { - try { - // Unload ear in EARServer if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - if (admI.isEarLoaded(filename + ".ear")) { - admI.removeEar(filename + ".ear"); - } - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - /** - * Load a war file in the jonas server - * @param filename war file, without ".war" extension - * @throws Exception if an error occurs - */ - public void useWar(String filename) throws Exception { - - try { - // Load war in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - //Test in both directories (apps/ and apps/autoload) - String webappsFileName = filename + ".war"; - String autoloadWebappsFileName = "autoload" + File.separator + filename + ".war"; - if (!admI.isWarLoaded(webappsFileName) && !admI.isWarLoaded(autoloadWebappsFileName)) { - //if the file was in autoload, it was loaded - admI.addWar(webappsFileName); - } - - } catch (Exception e) { - throw new Exception("Cannot load War : " + e.getMessage()); - } - } - - /** - * Load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void useBeans(String filename) throws Exception { - try { - // Load bean in EJBServer if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - if (!admI.isLoaded(filename + ".jar")) { - admI.addBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot load Bean : " + e.getMessage()); - } - } - - - /** - * Unload a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void unUseBeans(String filename) throws Exception { - try { - // Load bean in EJBServer if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - if (admI.isLoaded(filename + ".jar")) { - admI.removeBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - - /** - * Load a rar file in the jonas server - * @param filename rar file, without ".rar" extension - * @throws Exception if an error occurs - */ - public void useRar(String filename) throws Exception { - - try { - // Load rar in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - //Test in both directories (rars/ and rars/autoload) - String raFileName = filename + ".rar"; - String autoloadRaFileName = "autoload" + File.separator + filename + ".rar"; - if (!admI.isRarLoaded(raFileName) && !admI.isRarLoaded(autoloadRaFileName)) { - //if the file was in autoload, it was loaded - admI.addRar(raFileName); - } - - } catch (Exception e) { - throw new Exception("Cannot load Rar : " + e.getMessage()); - } - } - - - /** - * Rar is loaded in the jonas server - * @param filename rar file, without ".rar" extension - * @return true if the rar is loaded, else false - * @throws Exception if an error occurs - */ - public boolean isRarLoaded(String filename) throws Exception { - - boolean found = false; - - try { - // Load rar in JOnAS if not already loaded. - if (ictx == null) { - ictx = getInitialContext(); - } - - if (admI == null) { - admI = (AdmInterface) PortableRemoteObject.narrow(ictx.lookup(jonasName + "_Adm"), AdmInterface.class); - } - - //Test in both directories (rars/ and rars/autoload) - String raFileName = filename + ".rar"; - String autoloadRaFileName = "autoload" + File.separator + filename + ".rar"; - if (admI.isRarLoaded(raFileName) || admI.isRarLoaded(autoloadRaFileName)) { - //if the file was in autoload, it was loaded - found = true; - } - - } catch (Exception e) { - throw new Exception("Cannot load Rar : " + e.getMessage()); - } - - return found; - } - - /** - * Create a mail factory in jonas server - * @param mail factory name of the datasource - * @param properties properties of the mail factory - * @throws Exception if an error occurs - */ - protected void createMailFactory(String mailFactory, Properties properties) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=mail"); - - // add properties in 'datasource'.properties - JonasAdminFiles.writeConfigFile(mailFactory + ".properties", properties); - - Object[] params = new Object[] {mailFactory, properties, new Boolean(true)}; - server.invoke(on, "createMailFactoryMBean", params, new String[] {String.class.getName(), Properties.class.getName(), Boolean.class.getName()}); - - } - - /** - * Unbind a mail factory in jonas server - * @param mailFactory name of the mail factory - * @throws Exception if an error occurs - */ - protected void unBindMailFactory(String mailFactory) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=mail"); - - Object[] params = new Object[] {mailFactory}; - server.invoke(on, "unbindMailFactoryMBean", params, new String[] {String.class.getName()}); - } - - /** - * Return if the mail factory is in mail factory list - * @param mailFactory the name of the mail factory - * @return true if the mail factory is in list, false else. - * @throws Exception if an error occurs. - */ - protected boolean isInMailFactoryList(String mailFactory) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=mail"); - - List list = (List) server.getAttribute(on, "MailFactoryPropertiesFiles"); - - return list.contains(mailFactory); - } - - /** - * Load a datasource in jonas server - * @param datasource name of the datasource - * @param properties properties of the datasource - * @throws Exception if an error occurs - */ - protected void useDatasource(String datasource, Properties properties) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=database"); - - if (!((Boolean) server.invoke(on, "isLoadedDataSource", new Object[] {datasource}, new String[] {String.class.getName()})).booleanValue()) { - // add properties in 'datasource'.properties - JonasAdminFiles.writeConfigFile(datasource + ".properties", properties); - - Object[] params = new Object[] {datasource, properties, new Boolean(true)}; - server.invoke(on, "loadDataSource", params, new String[] {String.class.getName(), Properties.class.getName(), Boolean.class.getName()}); - } - } - - /** - * Check if database service is started (dbm) - * @return true if dbm started - * @throws Exception if an error occurs - */ - protected boolean isDatabaseService() throws Exception { - boolean result = false; - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=database"); - if (server.isRegistered(on)) { - result = true; - } - return result; - } - - /** - * Check if the Joram RAR is deplyed - * @return true if dbm started - * @throws Exception if an error occurs - */ - protected boolean isJoramRar() throws Exception { - boolean result = false; - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance(JORAM_ADMIN_ON); - if (server.isRegistered(on)) { - result = true; - } - return result; - } - - /** - * Unload a datasource in jonas server - * @param datasource name of the datasource - * @throws Exception if an error occurs - */ - protected void unUseDatasource(String datasource) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=database"); - - if (((Boolean) server.invoke(on, "isLoadedDataSource", new Object[] {datasource}, new String[] {String.class.getName()})).booleanValue()) { - - Object[] params = new Object[] {datasource}; - server.invoke(on, "unloadDataSource", params, new String[] {String.class.getName()}); - } - } - - /** - * Load a datasource in jonas server - * @param datasource name of the datasource - * @return boolean true if the datasource is loaded, false else - * @throws Exception if an error occurs - */ - protected boolean isLoadedDatasource(String datasource) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("jonas:type=service,name=database"); - - return ((Boolean) server.invoke(on, "isLoadedDataSource", new Object[] {datasource}, new String[] {String.class.getName()})).booleanValue(); - } - - /** - * Create a topic in a joram server - * @param name name of the topic - * @param idString id of the current joram server - * @throws Exception if an error occurs - */ - protected void createTopic(String name, int idString) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("joramClient:type=JoramAdapter,*"); - ObjectName joramAdapterON = (ObjectName) server.queryNames(on, null).iterator().next(); - - Object[] params = new Object[] {new Integer(idString), name}; - server.invoke(joramAdapterON, "createTopic", params, new String[] {"int", String.class.getName()}); - } - - /** - * Create a queue in a joram server - * @param name name of the queue - * @param idString id of the current joram server - * @throws Exception if an error occurs - */ - protected void createQueue(String name, int idString) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("joramClient:type=JoramAdapter,*"); - ObjectName joramAdapterON = (ObjectName) server.queryNames(on, null).iterator().next(); - - Object[] params = new Object[] {new Integer(idString), name}; - server.invoke(joramAdapterON, "createQueue", params, new String[] {"int", String.class.getName()}); - } - - /** - * Create a user in a joram server - * @param name name of the user - * @param password password of the user - * @throws Exception if an error occurs - */ - protected void createLocalJmsUser(String name, String password) throws Exception { - MBeanServerConnection server = getMBeanServer(); - ObjectName on = ObjectName.getInstance("joramClient:type=JoramAdapter,*"); - ObjectName joramAdapterON = (ObjectName) server.queryNames(on, null).iterator().next(); - - Object[] params = new Object[] {name, password}; - server.invoke(joramAdapterON, "createUser", params, new String[] {"java.lang.String", "java.lang.String"}); - } - - - /** - * Call the main method of a specific class with empty args - * @param classToLoad name of class which contains the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad) throws Exception { - callMainMethod(classToLoad, new String[]{}); - } - - - /** - * Call the main method of a specific class and the specific args - * @param classToLoad name of class which contains the main method - * @param args args to give to the main method - * @throws Exception if it fails - */ - protected void callMainMethod(String classToLoad, String[] args) throws Exception { - //Build classloader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - URL[] urls = new URL[1]; - urls[0] = new File(System.getProperty("jonas.root") + File.separator + "examples" + File.separator + "classes").toURL(); - URLClassLoader loader = new URLClassLoader(urls); - Thread.currentThread().setContextClassLoader(loader); - Class clazz = loader.loadClass(classToLoad); - Class[] argList = new Class[] {args.getClass()}; - Method meth = clazz.getMethod("main", argList); - Object appli = meth.invoke(null, new Object[]{args}); - } - - /** - * Get current time - * @return A String Time with the format yyyy-MM-dd.HH-mm-ss - */ - protected String getTime() { - Calendar cal = Calendar.getInstance(); - Date date = cal.getTime(); - SimpleDateFormat formatter; - formatter = new SimpleDateFormat("yyyy-MM-dd.HH-mm-ss"); - return formatter.format(date); - } - - /** - * Undeploy an EAR - * @param name String of EAR Name - * @throws Exception if error occurs - */ - protected void undeployEar(String name) throws Exception { - String fileName = name + ".ear"; - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - WebResponse wr = wc.getResponse(getAbsoluteUrl(URL_JONASADMIN_DEPLOYEAR)); - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[0]; - - String params = webForm.getParameterValue("undeploy"); - WebForm.Scriptable script = webForm.getScriptableObject(); - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - - if (params.length() == 0) { - params += fileName; - } else { - params += "," + fileName; - } - - script.setParameterValue("undeploy", params); - - WebResponse submitUndeploy = webForm.submit(); - - webForms = submitUndeploy.getForms(); - webForm = webForms[0]; - - WebResponse endResp = webForm.submit(); - } - - /** - * Undeploy all EAR - * @throws Exception if error occurs - */ - protected void undeployAllEar() throws Exception { - WebResponse wr = wc.getResponse(getAbsoluteUrl(URL_JONASADMIN_DEPLOYEAR)); - undeployAll(wr); - } - - /** - * Undeploy all Jars - * @throws Exception if error occurs - */ - protected void undeployAllJar() throws Exception { - WebResponse wr = wc.getResponse(getAbsoluteUrl(URL_JONASADMIN_DEPLOYJAR)); - undeployAll(wr); - } - - /** - * Undeploy all - * @throws Exception if error occurs - */ - protected void undeployAll(WebResponse wr) throws Exception { - - WebForm[] webForms = wr.getForms(); - WebForm webForm = webForms[0]; - - // Disable errors of javascript - HttpUnitOptions.setExceptionsThrownOnScriptError(false); - // Disable exception thrown on error status - HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); - - String params = webForm.getParameterValue("deploy"); - WebForm.Scriptable script = webForm.getScriptableObject(); - - if (params.length() == 0) { - params += webForm.getParameterValue("undeploy"); - } else { - params += "," + webForm.getParameterValue("undeploy"); - } - - script.setParameterValue("undeploy", params); - - WebResponse submitUndeploy = webForm.submit(); - - webForms = submitUndeploy.getForms(); - webForm = webForms[0]; - - WebResponse endResp = webForm.submit(); - - wc.getResponse(getAbsoluteUrl(URL_JONASADMIN)); - } - - /** - * Verify number of tabs and the selected tab - * @param tabTable the tab table - * @param nbTabs number of tabs - * @param selectedTab the numero of the selected tab - */ - protected void testTabs(WebTable tabTable, int nbTabs, int selectedTab, String msg) { - TableCell selectedCell; - // - number of tabs - assertEquals("There are not " + nbTabs + " tabs. " + msg, - nbTabs, (tabTable.getColumnCount() + 1) / 2); - // - selected tab - selectedCell = tabTable.getTableCell(1, (selectedTab * 2) - 2); - assertEquals("It is not the selected tab. ", 1, selectedCell.getElementsWithAttribute("src", "/jonasAdmin/images/dot.gif").length); - } - - /** - * Get MBean Server connection - * @throws Exception if an error occurs - */ - private void initMBeanServer() throws Exception { - String sCarolURL = jProp.getRegistryUrl(); - String carolProtocol = jProp.getRegistryProtocol(); - URI carolURL = new URI(sCarolURL); - int portNb = carolURL.getPort(); - String port = String.valueOf(portNb); - String url = null; - Map env = null; - if (carolProtocol.equals("jrmp")) { - // Treat JRMP case - url = "service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jrmpconnector_" + jonasName; - } else if (carolProtocol.equals("iiop")) { - // Treat IIOP case - url = "service:jmx:iiop:///jndi/iiop://localhost:" + port + "/iiopconnector_" + jonasName; - env = new HashMap(); - if (orb == null) { - initORB(); - } - env.put("java.naming.corba.orb", orb); - } else if (carolProtocol.equals("cmi")) { - // Treat CMI - url = "service:jmx:rmi:///jndi/cmi://localhost:" + port + "/cmiconnector_" + jonasName; - } - - JMXServiceURL connURL = null; - try { - connURL = new JMXServiceURL(url); - } catch (MalformedURLException e) { - throw new Exception("Can't create JMXServiceURL with string: " + url); - } - - try { - connector = JMXConnectorFactory.newJMXConnector(connURL, env); - } catch (MalformedURLException e1) { - throw new Exception("there is no provider for the protocol in " + url); - } catch (java.io.IOException e) { - throw new Exception("Connector client cannot be made because of a communication problem (used URL: " + url + ")"); - } - try { - connector.connect(env); - currentServerConnection = connector.getMBeanServerConnection(); - } catch (java.io.IOException ioe) { - throw new Exception("connection could not be made because of a communication problem"); - } - } - - /** - * Get MBean Server connection - * @return a MBeanServer Connection - * @throws Exception if an error occurs - */ - protected MBeanServerConnection getMBeanServer() throws Exception { - return currentServerConnection; - } - - /** - * Close MBean Server connection - * @throws Exception if an error occurs - */ - protected void closeMBeanServer() throws Exception { - - try { - if (connector != null) { - connector.close(); - } - } catch (Exception e) { - throw new Exception("connection could not be close because of a communication problem."); - } - } - - /** - * Create an orb for the client - * - */ - private static void initORB() { - orb = ORB.init(new String[0], null); - } - - /** - * Tear Down cleanUp action - * @throws Exception - */ - public void tearDown() throws Exception { - // Close MBean Server Connection - closeMBeanServer(); - } - - /** - * Print a debug message - * @param msg The message - */ - public void debug(String msg) { - System.out.println("DEBUG: " + msg); - } - - protected ObjectName getJCAConnectionFactory(String name, String jcaResourceName) { - ObjectName on = J2eeObjectName.getJCAConnectionFactory(domainName, jcaResourceName, jonasName, name); - return on; - } - - protected String getStringMBeanAttribute(ObjectName on, String attName) throws Exception { - MBeanServerConnection server = getMBeanServer(); - return (String) server.getAttribute(on, attName); - } - - protected Integer getIntegerMBeanAttribute(ObjectName on, String attName) throws Exception { - MBeanServerConnection server = getMBeanServer(); - return (Integer) server.getAttribute(on, attName); - } -} diff --git a/jonas_tests/junit.bat b/jonas_tests/junit.bat deleted file mode 100644 index c1afc6f1ee..0000000000 --- a/jonas_tests/junit.bat +++ /dev/null @@ -1,142 +0,0 @@ -@Echo off -Rem --------------------------------------------------------------------------- -Rem JOnAS: Java(TM) Open Application Server -Rem Copyright (C) 1999 Bull S.A. -Rem Contact: jonas-team@objectweb.org -Rem -Rem This library is free software; you can redistribute it and/or -Rem modify it under the terms of the GNU Lesser General Public -Rem License as published by the Free Software Foundation; either -Rem version 2.1 of the License, or any later version. -Rem -Rem This library is distributed in the hope that it will be useful, -Rem -Rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Rem Lesser General Public License for more details. -Rem -Rem You should have received a copy of the GNU Lesser General Public -Rem License along with this library; if not, write to the Free Software -Rem Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -Rem USA -Rem -Rem Initial developer(s): Philippe Durieux -Rem Contributor(s): -Rem --------------------------------------------------------------------------- -Rem $Id$ -Rem --------------------------------------------------------------------------- - -Rem Usage: junit [ test-type [ dir-name [ suite-name [ test-name ] ] ] ] -Rem -Rem This script allows to run the jonas-test all the tests or a sub-set of the tests: -Rem - the tests of the given directory -Rem - the tests of the given suite of the given directory -Rem - only the given test of the given suite of the given directory -Rem for each type test (conformance, stress or ws) -Rem -setlocal ENABLEDELAYEDEXPANSION - -set TYPE=conf -set PACK=org.objectweb.jonas.jtests.clients -set DIR=suite -set SUITE=C_suite -set TEST= -set CLIENT_OPTS= -set TEST_CLASSES=%TEST_BASE%\conformance\classes;%TEST_BASE%\examples\classes - -if ["%JONAS_BASE%"]==[""] goto set_jonas_base -set CLIENT_OPTS=%CLIENT_OPTS% -Djonas.base="%JONAS_BASE%" - -:set_jonas_base -set CLIENT_OPTS=%CLIENT_OPTS% -Djonas.base="%JONAS_ROOT%" -if ["%REGISTRY%"]==[] goto set_registry -set CLIENT_OPTS=%CLIENT_OPTS% -Dregistry="%REGISTRY%" -:set_registry -set CLIENT_OPTS=%CLIENT_OPTS% -Dregistry="rmi://localhost:1099" -if ["%PROTOCOL%"]==[] goto set_protocol -set CLIENT_OPTS=%CLIENT_OPTS% -Dprotocol="%PROTOCOL%" -:set_protocol -set CLIENT_OPTS=%CLIENT_OPTS% -Dprotocol=jrmp - -if [%HTTP_PORT%]==[] set HTTP_PORT=9000 -if not [%1]==[] goto loop_on_args -:loop_on_args - - -if [%1]==[] goto endargs -if ["%1"]==["-debug"] goto debug_arg -set TYPE=%1 -shift -if [%1]==[] goto endargs -set DIR=%1 -set SUITE=C_%DIR% -shift -if [%1]==[] goto endargs -set SUITE=%1 -shift -if [%1%]==[] goto varinit -set TEST=-n %1 -goto varinit - - - -:debug_arg -set DEBUG_OPTS=%DEBUG_OPTS% %1 -shift -if not ["%1"]==["-p"] goto debug_usage -set DEBUG_OPTS=%DEBUG_OPTS% %1 -shift -set DEBUG_OPTS=%DEBUG_OPTS% %1 -shift -if ["%1"]==["-s"] goto set_debug_opts -goto loop_on_args - -:set_debug_opts -set DEBUG_OPTS=%DEBUG_OPTS% %1 -shift -set DEBUG_OPTS=%DEBUG_OPTS% %1 -shift -goto loop_on_args - -:debug_usage -echo -debug option parameters are : "-debug -p [-s ]" -goto :EOF - -:endargs -echo %TYPE% -echo %DIR% -echo %SUITE% -echo %DEBUG_OPTS% - -:varinit -if [%TYPE%]==[stress] goto varstress -if [%TYPE%]==[ws] goto varws -if [%TYPE%]==[examples] goto varexa -:varconf -set PACK=org.objectweb.jonas.jtests.clients -set TEST_CLASSES=%TEST_BASE%\conformance\classes -goto calllabel -:varstress -set PACK=org.objectweb.jonas.stests -set TEST_CLASSES=%TEST_BASE%\stress\classes -goto calllabel -:varws -set PACK=org.objectweb.ws.clients -set TEST_CLASSES=%TEST_BASE%\ws\classes -set JAVA_OPTS=%JAVA_OPTS% -Dhttp.port=%HTTP_PORT% -Daddressbook.dir=%TEST_BASE%\ws\src\org\objectweb\ws\ab_web -Dordering.dir=%TEST_BASE%\ws\src\org\objectweb\ws\ordering_app -goto calllabel -:varexa -set PACK=org.objectweb.jonas.examples.clients -set TEST_CLASSES=%TEST_BASE%\examples\classes -goto calllabel - -:calllabel - -Set JONAS_CLASSPATH=%TEST_CLASSES%;%ANT_HOME%\lib\junit.jar;%HTTPUNIT_HOME%\lib\httpunit.jar;%HTTPUNIT_HOME%\jars\nekohtml.jar;%HTTPUNIT_HOME%\jars\js.jar;%JONAS_ROOT%\examples\classes - -echo on -call jclient %PROPS% %PACK%.%DIR%.%SUITE% %TEST% -security %CLIENT_OPTS% %DEBUG_OPTS% - - - - - diff --git a/jonas_tests/junit.sh b/jonas_tests/junit.sh deleted file mode 100755 index f34c901617..0000000000 --- a/jonas_tests/junit.sh +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# JOnAS: Java(TM) Open Application Server -# Copyright (C) 1999 Bull S.A. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# --------------------------------------------------------------------------- -# $Id$ -# --------------------------------------------------------------------------- - -# -# Usage: junit [ test-type [ dir-name [ suite-name [ test-name ] ] ] ] -# -# This script allows to run the jonas-test all the tests or a sub-set of the tests: -# - the tests of the given directory -# - the tests of the given suite of the given directory -# - only the given test of the given suite of the given directory -# for each type test (conformance, examples or ws) -#set -x -TYPE=conf -PACK=org.objectweb.jonas.jtests.clients -DIR=suite -SUITE=C_suite -TEST= - -# Try to find the directory where the jonas tests are -[ -d $PROJ_BASE/jonas_tests ] && TEST_BASE=$PROJ_BASE/jonas_tests -[ -d $JPROJ_BASE/jonas_tests ] && TEST_BASE=$JPROJ_BASE/jonas_tests - -TEST_CLASSES=$TEST_BASE/conformance/classes - -PROPS= - -# variable needed for ws tests -if [ -z "$HTTP_PORT" ] -then - HTTP_PORT=9000 -fi - -# registry url for JMX access -if [ -z "$REGISTRY" ] -then - REGISTRY=rmi://localhost:1099 -fi -# protocol used -if [ -z "$PROTOCOL" ] -then - PROTOCOL=jrmp -fi -if [ $# -gt 0 ] -then - TYPE=$1 - shift -fi - -case "$TYPE" in -"conf") - ;; -"stress") - TEST_CLASSES=$TEST_BASE/stress/classes - PACK=org.objectweb.jonas.stests - ;; -"ws") - TEST_CLASSES=$TEST_BASE/ws/classes - PROPS="-Dhttp.port=$HTTP_PORT" - PROPS="$PROPS -Daddressbook.dir=$TEST_BASE/ws/src/org/objectweb/ws/ab_web" - PROPS="$PROPS -Dordering.dir=$TEST_BASE/ws/src/org/objectweb/ws/ordering_app" - PROPS="$PROPS -Djonas.base.client=$JONAS_BASE -Djonas.root=$JONAS_ROOT" - - ;; -"examples") - TEST_CLASSES=$TEST_BASE/examples/classes:$TEST_BASE/examples/base/examples/classes - PACK=org.objectweb.jonas.examples.clients - PROPS="-Dhttp.port=$HTTP_PORT" - PROPS="$PROPS -Daddressbook.dir=$TEST_BASE/ws/src/org/objectweb/ws/ab_web" - PROPS="$PROPS -Dordering.dir=$TEST_BASE/ws/src/org/objectweb/ws/ordering_app" - - - ;; -*) - echo "USAGE : $0 [ test-type [ dir-name [ suite-name [ test-name ] ] ] ]" - exit - ;; -esac - -if [ $# -gt 0 ] -then - DIR=$1 - SUITE=C_$DIR - shift -fi - -if [ $# -gt 0 ] -then - SUITE=$1 - shift -fi - -if [ $# -gt 0 ] -then - PREFIX=`echo "$SUITE" | cut -b 1-2` - if [ "$PREFIX" != "F_" ] && [ "$PREFIX" != "G_" ] - then - echo "ERROR: a test-name may be specified only for a final suite (F_xxx)or (G_xxx)" - exit 2 - fi - case $1 in - -*) - TEST=$1 - ;; - *) - TEST="-n $1" - ;; - esac - shift -fi - - -# update classpath for junit tests and httpunit -# update the following lines depending on your own environment -for CLS in \ -$ANT_HOME/lib/junit.jar \ -$HTTPUNIT_HOME/lib/httpunit.jar \ -$HTTPUNIT_HOME/jars/nekohtml.jar \ -$HTTPUNIT_HOME/jars/js.jar \ -$TEST_CLASSES -do - echo $JONAS_CLASSPATH | grep $CLS >/dev/null || JONAS_CLASSPATH=$JONAS_CLASSPATH:$CLS -done - -# important to be seen in jclient script -export JONAS_CLASSPATH - - -echo $CLASSPATH -echo "Running junit test : $TYPE $DIR/$SUITE $TEST" - -jclient $PROPS $PACK.$DIR.$SUITE $TEST -security -Djonas.base=$JONAS_BASE -Dregistry=$REGISTRY -Dprotocol=$PROTOCOL -#jclient -debug -p 4142 -s y $PROPS $PACK.$DIR.$SUITE $TEST -security -Djonas.base=$JONAS_BASE -Dregistry=$REGISTRY -Dprotocol=$PROTOCOL diff --git a/jonas_tests/pom.xml b/jonas_tests/pom.xml deleted file mode 100644 index 112a7424a6..0000000000 --- a/jonas_tests/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - 4.0.0 - - ow2 - org.ow2 - 1.3 - - - org.ow2.jonas - assembly-downloader-for-jonas-tests - 1.0.0-SNAPSHOT - - JOnAS assembly downloader for JOnAS tests - pom - - - - - org.codehaus.mojo - properties-maven-plugin - 1.0-alpha-2 - - - initialize - - read-project-properties - - - - ${basedir}/build.properties - - - - - - - maven-dependency-plugin - - - initialize - - copy - - - - - org.ow2.jonas.assemblies.profiles.legacy - jonas-full - ${jonas.version} - bin - zip - - - - - - - - - - diff --git a/jonas_tests/protocols/clientconf/carol.properties b/jonas_tests/protocols/clientconf/carol.properties deleted file mode 100644 index 1f023e8ec6..0000000000 --- a/jonas_tests/protocols/clientconf/carol.properties +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (C) 2002-2005 ObjectWeb -# -# CAROL: Common Architecture for RMI ObjectWeb Layer -# -# This library is developed inside the ObjectWeb Consortium, -# http://www.objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA -# -# -------------------------------------------------------------------------- -# $Id$ -# -------------------------------------------------------------------------- - -# jonas rmi activation (iiop, irmi, jrmp, cmi) -carol.protocols=cmi - -# RMI IRMI URL -carol.irmi.url=rmi://localhost:1098 - -# RMI JRMP URL -carol.jrmp.url=rmi://localhost:2043 - -# RMI IIOP URL -carol.iiop.url=iiop://localhost:2001 - - -###################################################################### -# Configuration for CMI (clustering) -###################################################################### - -# java.naming.provider.url property -# For a server : the URL on which the registry will be started -# For clients : lists the registries available -#carol.cmi.url=cmi://129.183.148.75:2002,129.183.148.75:2202 -#carol.cmi.url=cmi://frecb000650:2002,frecb000650:2202 -carol.cmi.url=cmi://localhost:1951 - -# JGroups configuration file -carol.cmi.jgroups.conf=jgroups-cmi-tcp.xml -#carol.cmi.jgroups.conf=jgroups-cmi.xml - -# Multicast address used by the registries in the cluster -# !!! Deprecated - Not used if carol.cmi.jgroups.conf is set -#carol.cmi.multicast.address=224.0.0.35:35467 - -# IP address or network mask of the local network interface to use to send -# multicast messages -# Needed only when the server has several network interfaces and the multicast -# messages do not go through to interface you want them to use -# Works only on JDK 1.4 -# !!! Deprecated - Not used if carol.cmi.jgroups.conf is set -#carol.cmi.multicast.itf 192.168.25.0/24 - -# Groupname for Javagroups. No need to change if don't know. -carol.cmi.multicast.groupname=G1 - -# Factor used for this server in wheighted round robin algorithms -carol.cmi.rr.factor=100 - -# If enabled, cluster stubs will print messages on some error cases -carol.cmi.stub.debug=false - - -###################################################################### -# Advanced Configuration for IRMI -###################################################################### -# Exported objects will listen on this port for remote method -# invocations. -#A value of 0 will cause a random port to be selected. -# This is the default value. -# Warning : if the port is set (not 0) with the value 'n', be aware that -# the port 'n + 1' will be used by the JMX server. -# So, for the firewall configuration, you have to open the port numbers 'n' -# and 'n+1'. -carol.irmi.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.irmi.url property) -# Use all interfaces available [default configuration = false] -carol.irmi.interfaces.bind.single=false - -###################################################################### -# Advanced Configuration for JRMP -###################################################################### -# If true, local call with jrmp are optimized. If you get "ClassCastException -# with 2 beans in different jars, you should set it at "false". -carol.jvm.rmi.local.call=false - -# If true a local Naming context is used (to be used only with a collocated registry) -carol.jvm.rmi.local.registry=false - -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.jrmp.server.port=0 - -# Use only a single interface when creating the registry -# (specified in carol.jrmp.url property) -# Use all interfaces available [default configuration = false] -carol.jrmp.interfaces.bind.single=false - - -###################################################################### -# Advanced Configuration for IIOP -###################################################################### -# The value of this port is used to set the port of the objects listener. -# This allow to use this port for a firewall configuration. -# If registry and server are on same host, the two ports to open are the following and the registry port. -# 0 means random port [default configuration = 0] -carol.iiop.server.port=0 - -# The value of this port is used to set the SSL port of the objects listener. -# Note that this port musn't not be set to 0 as it is used for CsiV2. -# but this port is used only if SSL mode is enable. -# So by default, there is no listener on this port -# [default configuration = not used] -carol.iiop.server.sslport=2003 - -# Delegate used by JOnAS for rmi-iiop protocol -carol.iiop.PortableRemoteObjectClass=org.ow2.jonas.lib.naming.JacORBPRODelegate - - -###################################################################### -# Advanced JNDI Configuration -###################################################################### -carol.jndi.java.naming.factory.url.pkgs=org.ow2.jonas.lib.naming diff --git a/jonas_tests/protocols/clientconf/traceclient.properties b/jonas_tests/protocols/clientconf/traceclient.properties deleted file mode 100644 index e924727b75..0000000000 --- a/jonas_tests/protocols/clientconf/traceclient.properties +++ /dev/null @@ -1,46 +0,0 @@ -# ----------------------------------------------------------------------- -# This is a default configuration file for monolog. -# -# Patterns for each handler may include these possible values : -# %h the thread name -# %O{1} the Class name (basename only) -# %M the method name -# %L the line number -# %d the date -# %l the level -# %m the message itself -# %n a new line -# -# Each logger inherits from its parent for properties not defined. -# The root logger is "root". It must always be defined. -# -# Each logger is associated with a level that can be one of : -# ERROR | WARN | INFO | DEBUG -# -# -> More info on http://www.objectweb.org/monolog/doc.html -# ----------------------------------------------------------------------- -# -# Define which wrapper to use (= javaLog) -# ----------------------------------------------------------------------- -# For Log4j you need to add log4j.jar -# log.config.classname org.objectweb.util.monolog.wrapper.log4j.MonologLoggerFactory -log.config.classname org.objectweb.util.monolog.wrapper.javaLog.LoggerFactory - -# ----------------------------------------------------------------------- -# tty : console handler -# ----------------------------------------------------------------------- -handler.tty.type Console -handler.tty.output System.out -#handler.tty.pattern %O{1}.%M : %m%n -handler.tty.pattern %d : %l : %h : %O{1}.%M : %m%n - -# ----------------------------------------------------------------------- -# logger definitions -# ----------------------------------------------------------------------- -logger.root.handler.0 tty - -logger.root.level ERROR -logger.org.ow2.jonas.client.level ERROR -#logger.org.ow2.carol.cmi.level DEBUG - - diff --git a/jonas_tests/protocols/modules/client/META-INF/application-client.xml b/jonas_tests/protocols/modules/client/META-INF/application-client.xml deleted file mode 100644 index 86703e03d1..0000000000 --- a/jonas_tests/protocols/modules/client/META-INF/application-client.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - Protocols test client - - - - - ejb/MyService - Session - org.ow2.jonas.protocols.test.ejbs.MyServiceHome - org.ow2.jonas.protocols.test.ejbs.MyService - ejbs.jar#MyService - - - - - diff --git a/jonas_tests/protocols/modules/client/resources/jaas.config b/jonas_tests/protocols/modules/client/resources/jaas.config deleted file mode 100644 index 37efc03917..0000000000 --- a/jonas_tests/protocols/modules/client/resources/jaas.config +++ /dev/null @@ -1,16 +0,0 @@ -JMSLoader { - // Login Module to use for AppliGeneve. - - //First, use a LoginModule for the authentication - // Use the resource memrlm_1 - org.ow2.jonas.security.auth.spi.JResourceLoginModule required - resourceName="memrlm_1" - serverName="mqjca" - ; - - // Use the login module to propagate security to the JOnAS server - org.ow2.jonas.security.auth.spi.ClientLoginModule required - globalCtx="true" - - ; -}; \ No newline at end of file diff --git a/jonas_tests/protocols/modules/ejbs/build/build.xml b/jonas_tests/protocols/modules/ejbs/build/build.xml deleted file mode 100644 index 3a0575a47e..0000000000 --- a/jonas_tests/protocols/modules/ejbs/build/build.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/protocols/scripts/client.sh b/jonas_tests/protocols/scripts/client.sh deleted file mode 100755 index edb5201d5d..0000000000 --- a/jonas_tests/protocols/scripts/client.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------------- -# Protocols test -# Copyright (C) 2007 Bull S.A.S. -# Contact: jonas-team@objectweb.org -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -# -# --------------------------------------------------------------------------- -# $Id: $ -# --------------------------------------------------------------------------- - -# Launches a simple test -# Usage : client.sh multi 0 with -# clientnb : the threads nb -# iterationNb : the loop nb -# type : the sort of test among Remote CreateRemote LookupCreateRemote MetaData -# Ex : client.sh multi 5 200 0 Remote - -java -version -export JAVA_OPTS="-Dmonolog.wrappers=org.ow2.carol.cmi.configuration.TraceCmi $JAVA_OPTS" -export APPLI=$JONAS_BASE/apps/autoload/applicall.ear -java $JAVA_OPTS -jar $JONAS_ROOT/lib/client.jar -carolFile ./clientconf/carol.properties -traceFile ./clientconf/traceclient.properties $APPLI $* diff --git a/jonas_tests/samplehttp/build.xml b/jonas_tests/samplehttp/build.xml deleted file mode 100644 index a264deb4d1..0000000000 --- a/jonas_tests/samplehttp/build.xml +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/ws/build.xml b/jonas_tests/ws/build.xml deleted file mode 100644 index 1440937671..0000000000 --- a/jonas_tests/ws/build.xml +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Running JUnit Client: 'jonas.base=${jonas.base}' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jonas_tests/ws/etc/apps/time-test.xml b/jonas_tests/ws/etc/apps/time-test.xml deleted file mode 100644 index f494d3dd24..0000000000 --- a/jonas_tests/ws/etc/apps/time-test.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - time endpoint tests - - - time-client.jar - - - - time.jar - - - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/BeanAccessorSLR.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/BeanAccessorSLR.java deleted file mode 100644 index 66c33eabd1..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/BeanAccessorSLR.java +++ /dev/null @@ -1,77 +0,0 @@ -// BeanAccessorSLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.mcontext; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.Context; -import javax.naming.InitialContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * - */ -public class BeanAccessorSLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // BeanAccessor implementation - // ------------------------------------------------------------------ - - /** - * method1 - */ - public boolean localBeanHasMessageContext() { - logger.log(BasicLevel.DEBUG, ""); - try { - Context ctx = new InitialContext(); - TestMC1LocalHome home = (TestMC1LocalHome) ctx.lookup("TestMC1Home_L"); - TestMC1Local mc1 = home.create(); - return mc1.localMethodHasMessageContext(); - } catch (Exception e) { - logger.log(BasicLevel.WARN, "Something goes wrong"); - } - return true; - } - -} - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC1SLL.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC1SLL.java deleted file mode 100644 index e39aceb27a..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC1SLL.java +++ /dev/null @@ -1,83 +0,0 @@ -// TestMC1SLL.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.mcontext; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.xml.rpc.handler.MessageContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * - */ -public class TestMC1SLL implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // TestMC1 implementation - // ------------------------------------------------------------------ - - public boolean serviceEndpointMethodHasMessageContext() { - logger.log(BasicLevel.DEBUG, ""); - return hasMessageContext(); - } - - public boolean localMethodHasMessageContext() { - logger.log(BasicLevel.DEBUG, ""); - return hasMessageContext(); - } - - private boolean hasMessageContext() { - try { - MessageContext mc = ejbContext.getMessageContext(); - if (mc != null) { - return true; - } else { - return false; - } - } catch(IllegalStateException ise) { - return false; - } - } - -} - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC2SLR.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC2SLR.java deleted file mode 100644 index 89685eeb37..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/mcontext/TestMC2SLR.java +++ /dev/null @@ -1,83 +0,0 @@ -// TestMC2SLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.mcontext; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.xml.rpc.handler.MessageContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * - */ -public class TestMC2SLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // TestMC2 implementation - // ------------------------------------------------------------------ - - public boolean serviceEndpointMethodHasMessageContext() { - logger.log(BasicLevel.DEBUG, ""); - return hasMessageContext(); - } - - public boolean remoteMethodHasMessageContext() { - logger.log(BasicLevel.DEBUG, ""); - return hasMessageContext(); - } - - private boolean hasMessageContext() { - try { - MessageContext mc = ejbContext.getMessageContext(); - if (mc != null) { - return true; - } else { - return false; - } - } catch(IllegalStateException ise) { - return false; - } - } - -} - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanHandler.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanHandler.java deleted file mode 100644 index 7aa749d2e6..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanHandler.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.jonas.jtests.beans.time; - -import javax.xml.namespace.QName; -import javax.xml.rpc.handler.GenericHandler; -import javax.xml.rpc.handler.HandlerInfo; -import javax.xml.rpc.handler.MessageContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * - * - * @author Guillaume Sauthier - */ -public class TimeBeanHandler extends GenericHandler { - - private Logger logger = null; - - /** - * The init method to enable the Handler instance to - * initialize itself. - * @param config handler configuration - */ - public void init(HandlerInfo hinfo) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - String val = (String) hinfo.getHandlerConfig().get("jonas.test.server.handler"); - StaticPassValue spv = StaticPassValue.getInstance(); - spv.setInitValue(val); - } - - /** - * The destroy method indicates the end of lifecycle - * for a Handler instance. - */ - public void destroy() { - logger.log(BasicLevel.DEBUG, ""); - } - - /** - * The handleRequest method processes the request - * SOAP message. The default implementation of this method returns - * true. This indicates that the handler chain - * should continue processing of the request SOAP message. - * @param context the message context - * @return true/false - */ - public boolean handleRequest(MessageContext mc) { - logger.log(BasicLevel.DEBUG, ""); - StaticPassValue spv = StaticPassValue.getInstance(); - spv.setRequestValue("handlerRequest-Invoked"); - return true; - } - - /** - * The handleResponse method processes the response - * message. The default implementation of this method returns - * true. This indicates that the handler chain - * should continue processing of the response SOAP message. - * @param context the message context - * @return true/false - */ - public boolean handleResponse(MessageContext context) { - logger.log(BasicLevel.DEBUG, ""); - return true; - } - - /** - * The handleFault method processes the SOAP faults - * based on the SOAP message processing model. The default - * implementation of this method returns true. This - * indicates that the handler chain should continue processing - * of the SOAP fault. - * @param context the message context - * @return true/false - */ - public boolean handleFault(MessageContext context) { - logger.log(BasicLevel.DEBUG, ""); - return true; - } - - /** - * Gets the header blocks processed by this Handler instance. - * - * @return Array of QNames of header blocks processed by this handler instance. - * QName is the qualified name of the outermost element of the Header block. - */ - public QName[] getHeaders() { - logger.log(BasicLevel.DEBUG, ""); - return new QName[0]; - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanSLR.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanSLR.java deleted file mode 100644 index d3f41a201e..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/time/TimeBeanSLR.java +++ /dev/null @@ -1,77 +0,0 @@ -// TimeBeanSLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.time; - -import java.util.Date; - -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; - -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - -/** - * - */ -public class TimeBeanSLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // TimeBean implementation - // ------------------------------------------------------------------ - - public long getDateAsLong() { - logger.log(BasicLevel.DEBUG, ""); - return new Date().getTime(); - } - - public Date getDate() { - logger.log(BasicLevel.DEBUG, ""); - return new Date(); - } - - public boolean isHandlerInitRequestInvoked() { - logger.log(BasicLevel.DEBUG, ""); - StaticPassValue spv = StaticPassValue.getInstance(); - String init = spv.getInit(); - String req = spv.getRequest(); - return (init != null && req != null); - } -} - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/wsclient/WsClient1SLR.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/wsclient/WsClient1SLR.java deleted file mode 100644 index 5684d7d7bd..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/beans/wsclient/WsClient1SLR.java +++ /dev/null @@ -1,105 +0,0 @@ -// WsClient1SLR.java -// Stateless Session bean - -package org.objectweb.jonas.jtests.beans.wsclient; - - - -import java.rmi.RemoteException; -import javax.ejb.CreateException; -import javax.ejb.SessionBean; -import javax.ejb.SessionContext; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.xml.namespace.QName; -import javax.xml.rpc.Call; -import javax.xml.rpc.Service; -import javax.xml.rpc.ServiceException; -import org.ow2.jonas.lib.util.Log; -import org.objectweb.util.monolog.api.BasicLevel; -import org.objectweb.util.monolog.api.Logger; - - -/** - * - */ -public class WsClient1SLR implements SessionBean { - - static private Logger logger = null; - SessionContext ejbContext; - - Service service; - - // ------------------------------------------------------------------ - // SessionBean implementation - // ------------------------------------------------------------------ - - - public void setSessionContext(SessionContext ctx) { - if (logger == null) { - logger = Log.getLogger("org.objectweb.jonas_tests"); - } - logger.log(BasicLevel.DEBUG, ""); - ejbContext = ctx; - } - - - public void ejbRemove() { - logger.log(BasicLevel.DEBUG, ""); - } - - - public void ejbCreate() throws CreateException { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbPassivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - public void ejbActivate() { - logger.log(BasicLevel.DEBUG, ""); - } - - // ------------------------------------------------------------------ - // WsClient1 implementation - // ------------------------------------------------------------------ - - public boolean lookupServiceJNDI() { - logger.log(BasicLevel.DEBUG, "lookupServiceJNDI"); - service = null; - try { - InitialContext ic = new InitialContext(); - service = (Service) ic.lookup("ws/XMethodsService"); - } catch (NamingException ne) { - logger.log(BasicLevel.ERROR, "looking ws/XMethodsService : " + ne.getMessage()); - return false; - } - return (service != null); - } - - public boolean lookupServiceName() { - logger.log(BasicLevel.DEBUG, "lookupServiceName"); - service = null; - try { - InitialContext ic = new InitialContext(); - service = (Service) ic.lookup("java:comp/env/service/XMethods"); - } catch (NamingException ne) { - logger.log(BasicLevel.ERROR, "looking java:comp/env/service/XMethods : " + ne.getMessage()); - return false; - } - return (service != null); - } - - public void getAllServiceNames() throws ServiceException, RemoteException { - logger.log(BasicLevel.DEBUG, "getAllServiceNames"); - - lookupServiceName(); - Call call = service.createCall(new QName("XMethodsQuerySoap"), - new QName("getAllServiceNames")); - call.invoke(new Object[] {}); - - logger.log(BasicLevel.DEBUG, "Call is OK"); - } -} - diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/endpoint/F_TimeEndpoint.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/endpoint/F_TimeEndpoint.java deleted file mode 100644 index 7e1ad63734..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/endpoint/F_TimeEndpoint.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.jonas.jtests.clients.endpoint; - -import java.io.File; -import java.util.Calendar; - -import javax.wsdl.Definition; -import javax.wsdl.Import; -import javax.wsdl.factory.WSDLFactory; -import javax.wsdl.xml.WSDLReader; -import javax.xml.namespace.QName; -import javax.xml.rpc.Call; -import javax.xml.rpc.Service; -import javax.xml.rpc.ServiceFactory; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.ow2.jonas.lib.util.Cmd; - -import org.objectweb.jonas.jtests.util.JWebServicesTestCase; - -/** - * @author Guillaume Sauthier - */ -public class F_TimeEndpoint extends JWebServicesTestCase { - - private static final String TIMEPORT_URL = "/time/TimePort/TimePort"; - - /** - * @param s - */ - public F_TimeEndpoint(String s) { - super(s); - } - - public static Test suite() { - return new TestSuite(F_TimeEndpoint.class); - } - - public void setUp() throws Exception { - super.setUp(); - - useEar("time-test"); - } - - public void tearDown() throws Exception { - super.tearDown(); - } - - public void testTimeEndpoint() throws Exception { - String port = System.getProperty("http.port"); - - Service service = ServiceFactory.newInstance().createService(new QName("jonas:Time", "TimeBeanService")); - Call call = service.createCall(new QName("TimePort"), new QName("getDate")); - call.setTargetEndpointAddress("http://localhost:" + port + TIMEPORT_URL); - Calendar cal = (Calendar) call.invoke(new Object[] {}); - - assertNotNull("ServiceEndpoint performed succesfully", cal); - } - - public void testTimeEndpointServerHandler() throws Exception { - String port = System.getProperty("http.port"); - - Service service = ServiceFactory.newInstance().createService(new QName("jonas:Time", "TimeBeanService")); - Call call = service.createCall(new QName("TimePort"), new QName("isHandlerInitRequestInvoked")); - call.setTargetEndpointAddress("http://localhost:" + port + TIMEPORT_URL); - Boolean b = (Boolean) call.invoke(new Object[] {}); - - assertTrue("Handler were not invoked successfully", b.booleanValue()); - } - - public void testTimeEndpointFromAppClient() throws Exception { - - String javaHomeBin = System.getProperty("java.home") + File.separator + "bin" + File.separator; - String jonasRoot = System.getProperty("jonas.root"); - String jonasBase = System.getProperty("jonas.base.client"); - - Cmd cmd = new Cmd(javaHomeBin + "java"); - - cmd.addArgument("-Djava.endorsed.dirs=" + jonasRoot + File.separator + "lib" + File.separator + "endorsed"); - - // classpath - cmd.addArgument("-classpath"); - - String jonasBaseConf = jonasBase + File.separator + "conf"; - String clientJarPath = jonasBase + File.separator + "conf" + File.pathSeparator + jonasRoot + File.separator + "lib" - + File.separator + "client.jar"; - String jonasClientJarPath = jonasRoot + File.separator + "lib" + File.separator + "jonas-client.jar"; - cmd.addArgument(jonasBaseConf + File.pathSeparator + clientJarPath + File.pathSeparator + jonasClientJarPath); - cmd.addArgument("org.ow2.jonas.client.ClientContainer"); - // ear - cmd.addArgument(jonasBase + File.separator + "apps" + File.separator + "time-test.ear"); - - if (!cmd.run()) { - fail("Client fail see output for informations"); - } - } - - - public void testTimeEndpointURLPublication() throws Exception { - String port = System.getProperty("http.port"); - - String url = "http://localhost:" + port + TIMEPORT_URL + "?JWSDL"; - WSDLFactory factory = WSDLFactory.newInstance(); - WSDLReader reader = factory.newWSDLReader(); - reader.setFeature("javax.wsdl.importDocuments", true); - Definition def = reader.readWSDL(url); - - Import imp = (Import) def.getImports("jonas:Time").get(0); - assertEquals("wsdl:import[@location] not updated !", url + "&filename=Time.wsdl&context=.", imp.getLocationURI()); - } - -} \ No newline at end of file diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/mbeans/F_WebServicesMBeans.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/mbeans/F_WebServicesMBeans.java deleted file mode 100644 index caf67b6b1f..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/mbeans/F_WebServicesMBeans.java +++ /dev/null @@ -1,296 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 2005 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.jonas.jtests.clients.mbeans; - -import java.util.Properties; - -import javax.management.ObjectName; -import javax.management.j2ee.Management; -import javax.management.j2ee.ManagementHome; -import javax.naming.InitialContext; -import javax.rmi.PortableRemoteObject; -import javax.security.auth.login.LoginContext; -import javax.security.auth.callback.CallbackHandler; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.objectweb.jonas.jtests.util.JWebServicesTestCase; -import org.ow2.jonas.security.auth.callback.NoInputCallbackHandler; - -/** - * Test WebServices MBeans (WebServices, Service, PortComponent and Handler). - * - * @author Guillaume Sauthier - */ -public class F_WebServicesMBeans extends JWebServicesTestCase { - - /** - * MEJB instance - */ - private Management mejb = null; - - /** - * Service of Time Sample's ObjectName - */ - private static final String SERVICE_MBEAN_ON = "jonas:type=WebService,name=TimeWebService,J2EEServer=jonas,J2EEApplication=time-test,EJBModule=time"; - - /** - * PortComponent of Time Sample's ObjectName - */ - private static final String PC_MBEAN_ON = "jonas:type=WebServicePortComponent,name=TimePort,WebService=TimeWebService,J2EEServer=jonas,EJBModule=time,J2EEApplication=time-test"; - - /** - * Handler of Time Sample's ObjectName - */ - private static final String HANDLER_MBEAN_ON = "jonas:type=WebServiceHandler,name=TimeBeanHandler,WebServicePortComponent=TimePort,EJBModule=time,J2EEServer=jonas,J2EEApplication=time-test,WebService=TimeWebService"; - - /** - * SessionBean realizing the Time Service - */ - private static final String SSB_MBEAN_ON = "jonas:j2eeType=StatelessSessionBean,name=TimeBeanSLR,EJBModule=time,J2EEApplication=time-test,J2EEServer=jonas"; - - // =================== Attributes pre-filling ====================================== - - /** - * Service.portComponents - */ - private static final String[] SERVICE_PCS_ATT = new String[] { PC_MBEAN_ON }; - - /** - * PortComponent.handlers - */ - private static final String[] PC_HANDLERS_ATT = new String[] { HANDLER_MBEAN_ON }; - - /** - * Handler.soapHeaders - */ - private static final String[] SOAP_HEADERS = new String[] { }; - - /** - * Handler.soapRoles - */ - private static final String[] SOAP_ROLES = new String[] { }; - - /** - * Handler.initParams - */ - private static Properties INIT_PARAMS = null; - - /** - * Inner static class used to store tests expected results - * - * @author Guillaume Sauthier - */ - private static class WsTest { - /** - * MBean attribute name - */ - public String name; - - /** - * MBean attribute type - */ - public Class type; - - /** - * Expected result - */ - public Object expected; - - /** - * does the String represents an ObjectName ? - */ - public boolean isObjectName; - - /** - * WsTest Constructor - * @param name att name - * @param type att type - * @param expected att value - */ - public WsTest(String name, Class type, Object expected) { - this(name, type, expected, false); - } - - /** - * WsTest Constructor - * @param name att name - * @param type att type - * @param expected att value - */ - public WsTest(String name, Class type, Object expected, boolean on) { - super(); - this.name = name; - this.type = type; - this.expected = expected; - this.isObjectName = on; - } - } - - /** - * Tests values for Service MBean - */ - private WsTest[] SERVICE_TEST = null; - - /** - * Tests values for PortComponent MBean - */ - private WsTest[] PORT_TEST = null; - - /** - * Tests values for Handler MBean - */ - private WsTest[] HANDLER_TEST = null; - - /** - * Are the tables init ? - */ - private boolean initialized = false; - - /** - * The LoginContext to be used for security. - */ - private LoginContext context; - - public F_WebServicesMBeans(String s) { - super(s); - } - - public static Test suite() { - return new TestSuite(F_WebServicesMBeans.class); - } - - public void setUp() throws Exception { - super.setUp(); - useEar("time-test"); - CallbackHandler handler = new NoInputCallbackHandler("jonas", "jonas"); - context = new LoginContext("test", handler); - context.login(); - - mejb = getMEJB(); - if (!initialized) { - initTestsTables(); - initialized = true; - } - } - - /** - * init tables - */ - private void initTestsTables() { - - INIT_PARAMS = new Properties(); - INIT_PARAMS.put("jonas.test.server.handler", "JOnAS"); - - SERVICE_TEST = new WsTest[] { - new WsTest("name", java.lang.String.class, "TimeWebService"), - new WsTest("portComponents", java.lang.String[].class, SERVICE_PCS_ATT, true), - new WsTest("wsdlURL", java.lang.String.class, getAbsoluteUrl("/time/TimePort/TimePort?JWSDL")), - new WsTest("mappingFilename", java.lang.String.class, "META-INF/mapping.xml"), - new WsTest("wsdlFilename", java.lang.String.class, "META-INF/wsdl/TimePort.wsdl") }; - - PORT_TEST = new WsTest[] { - new WsTest("name", java.lang.String.class, "TimePort"), - new WsTest("handlers", java.lang.String[].class, PC_HANDLERS_ATT, true), - new WsTest("wsdlPort", java.lang.String.class, "{jonas:Time}TimePort"), - new WsTest("serviceEndpointInterface", java.lang.String.class, "org.objectweb.jonas.jtests.beans.time.TimeEndpoint"), - new WsTest("endpoint", java.lang.String.class, getAbsoluteUrl("/time/TimePort/TimePort")), - new WsTest("implementationBean", java.lang.String.class, SSB_MBEAN_ON, true) }; - - HANDLER_TEST = new WsTest[] { - new WsTest("name", java.lang.String.class, "TimeBeanHandler"), - new WsTest("classname", java.lang.String.class, "org.objectweb.jonas.jtests.beans.time.TimeBeanHandler"), - new WsTest("soapHeaders", java.lang.String[].class, SOAP_HEADERS), - new WsTest("soapRoles", java.lang.String[].class, SOAP_ROLES), - new WsTest("initParams", java.util.Properties.class, INIT_PARAMS) }; - - } - - - private Management getMEJB() throws Exception { - InitialContext ic = new InitialContext(); - Object o = ic.lookup("ejb/mgmt/MEJB"); - ManagementHome home = (ManagementHome) PortableRemoteObject.narrow(o, ManagementHome.class); - return home.create(); - } - - public void tearDown() throws Exception { - mejb = null; - context.logout(); - super.tearDown(); - } - - public void testWebServiceMBean() throws Exception { - checkMBean(SERVICE_MBEAN_ON, SERVICE_TEST); - } - - public void testPortComponentMBean() throws Exception { - checkMBean(PC_MBEAN_ON, PORT_TEST); - // check that the implementationBean is live - String se = (String) mejb.getAttribute(new ObjectName(PC_MBEAN_ON), "implementationBean"); - assertTrue("implementationBean MBean must be registered", mejb.isRegistered(new ObjectName(se))); - } - - public void testHandlerMBean() throws Exception { - checkMBean(HANDLER_MBEAN_ON, HANDLER_TEST); - } - - private void checkMBean(String onStr, WsTest[] tests) throws Exception { - ObjectName on = ObjectName.getInstance(onStr); - assertTrue("ObjectName not registered " + on, mejb.isRegistered(on)); - - for (int i = 0; i < tests.length; i++) { - - boolean isObjectName = tests[i].isObjectName; - - Object o = mejb.getAttribute(on, tests[i].name); - assertNotNull("Cannot retrieve attribute '" + tests[i].name - + "' from " + on, o); - assertEquals("Expecting type " + tests[i].type + " for attribute " - + tests[i].name, tests[i].type, o.getClass()); - if (tests[i].type.isArray()) { - Object[] a1 = (Object[]) o; - Object[] a2 = (Object[]) tests[i].expected; - assertEquals("'" + tests[i].name + "' Array size error", a2.length, a1.length); - - for (int j = 0; j < a1.length; j++) { - if (isObjectName) { - assertEquals("'" + tests[i].name + "[" + j + "]' mismatch", new ObjectName((String) a2[j]), new ObjectName((String) a1[j])); - } else { - assertEquals("'" + tests[i].name + "[" + j + "]' mismatch", a2[j], a1[j]); - } - } - } else { - if (isObjectName) { - assertEquals("'" + tests[i].name + "' mismatch", new ObjectName((String) tests[i].expected), new ObjectName((String) o)); - } else { - assertEquals("'" + tests[i].name + "' mismatch", tests[i].expected, o); - } - } - } - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/F_AxisService.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/F_AxisService.java deleted file mode 100644 index f50844a982..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/F_AxisService.java +++ /dev/null @@ -1,408 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ -package org.objectweb.jonas.jtests.clients.service; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -import javax.naming.RefAddr; -import javax.naming.Reference; -import javax.naming.StringRefAddr; -import javax.xml.namespace.QName; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.custommonkey.xmlunit.Diff; -import org.custommonkey.xmlunit.XMLAssert; -import org.custommonkey.xmlunit.XMLUnit; -import org.objectweb.jonas.jtests.util.JWebServicesTestCase; -import org.ow2.jonas.deployment.common.digester.JDigester; -import org.ow2.jonas.deployment.common.rules.JonasServiceRefRuleSet; -import org.ow2.jonas.deployment.common.rules.ServiceRefRuleSet; -import org.ow2.jonas.deployment.ws.ServiceRefDesc; -import org.ow2.jonas.lib.util.JNDIUtils; -import org.ow2.jonas.ws.axis.JAxisServiceFactory; -import org.ow2.jonas.ws.jaxrpc.factory.JServiceFactory; - -/** - * test case for axis service instanciation - */ -public class F_AxisService extends JWebServicesTestCase { - private String resources = null; - - private JServiceFactory jfactory = null; - - public F_AxisService(String name) { - super(name); - } - - public static Test suite() { - return new TestSuite(F_AxisService.class); - } - - public void setUp() throws Exception { - super.setUp(); - resources = System.getProperty("ws.resources"); - jfactory = new JAxisServiceFactory(); - } - - public void tearDown() throws Exception { - jfactory = null; - super.tearDown(); - } - - public void testClientWSDDDefaultWhenWSDDNotSpecified() throws Exception { - String expected = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + "\n"; - Reference ref = createServiceReference("no-wsdd-specified-j2ee.xml", - "no-wsdd-specified-jonas.xml"); - assertNotNull("Shouldn't have a wsdd", ref.get(JAxisServiceFactory.REF_CLIENT_CONFIG)); - - String returned = (String) ref.get(JAxisServiceFactory.REF_CLIENT_CONFIG).getContent(); - XMLUnit.setIgnoreWhitespace(true); - Diff diff = XMLUnit.compareXML(expected, returned); - XMLAssert.assertXMLEqual("WSDD are not equivalent", diff, true); - } - - public void testClientWSDDMergingWhenWSDDSpecified() throws Exception { - String expected = "\n" - + "\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" + "\n"; - Reference ref = createServiceReference("wsdd-specified-j2ee.xml", - "wsdd-specified-jonas.xml"); - - String returned = (String) ref.get(JAxisServiceFactory.REF_CLIENT_CONFIG).getContent(); - XMLUnit.setIgnoreWhitespace(true); - Diff diff = XMLUnit.compareXML(expected, returned); - XMLAssert.assertXMLEqual("WSDD are not equivalent", diff, true); - } - - public void testWSDLUrlWithNoWSDLOverride() throws Exception { - Reference ref = createServiceReference("wsdl-url-default-j2ee.xml", - "wsdl-url-default-jonas.xml"); - URL urlMatching = new File(new File(resources, "wsdl"), "oneService.wsdl").toURL(); - assertEquals("WSDL URL is not set appropriately", - urlMatching.toString(), - ref.get(JAxisServiceFactory.REF_SERVICE_WSDL).getContent()); - } - - public void testWSDLUrlWithWSDLOverride() throws Exception { - Reference ref = createServiceReference("wsdl-url-override-j2ee.xml", - "wsdl-url-override-jonas.xml"); - // create matching URL - URL urlMatching = new File(new File(resources, "wsdl"), "twoService.wsdl").toURL(); - assertEquals( - "WSDL URL is not set appropriately", - urlMatching.toString(), - ref.get(JAxisServiceFactory.REF_SERVICE_WSDL).getContent()); - } - - public void testServiceQNameWhenNotSpecified() throws Exception { - Reference ref = createServiceReference("service-qname-auto-j2ee.xml", - "service-qname-auto-jonas.xml"); - QName exp = new QName("http://hello.simple", "HelloWsService"); - QName auto = (QName) JNDIUtils.getObjectFromBytes((byte[]) ref.get( - JAxisServiceFactory.REF_SERVICE_QNAME).getContent()); - assertEquals("Service QName is incorrect", exp, auto); - } - - public void testServiceQNameWhenExplicitelySet() throws Exception { - Reference ref = createServiceReference( - "service-qname-explicit-j2ee.xml", - "service-qname-explicit-jonas.xml"); - QName exp = new QName("http://hello.simple", "HelloWsService2"); - QName auto = (QName) JNDIUtils.getObjectFromBytes((byte[]) ref.get( - JAxisServiceFactory.REF_SERVICE_QNAME).getContent()); - assertEquals("Service QName is incorrect", exp, auto); - } - - public void testPort2WSDLMapWhenNoPortComponentRefSpecified() - throws Exception { - Reference ref = createServiceReference("no-port2wsdl-map-j2ee.xml", - "no-port2wsdl-map-jonas.xml"); - assertNull("Shouldn't have a Port2WSDL Map", ref - .get(JAxisServiceFactory.REF_SERVICE_PORT2WSDL)); - } - - public void testPort2WSDLMapWithMultiplePortComponent() throws Exception { - Reference ref = createServiceReference("port2wsdl-map-j2ee.xml", - "port2wsdl-map-jonas.xml"); - Map exp = new HashMap(); - exp.put("org.objectweb.jonas.jtests.hello.HelloWs", new QName( - "http://hello.simple", "HelloPortComponent")); - exp.put("org.objectweb.jonas.jtests.hello.HelloWs2", new QName( - "http://hello.simple", "HelloPortComponent2")); - Map returned = (Map) JNDIUtils.getObjectFromBytes((byte[]) ref.get( - JAxisServiceFactory.REF_SERVICE_PORT2WSDL).getContent()); - assertEquals("Map are not identical", exp, returned); - } - - public void testStubPropertiesNull() throws Exception { - Reference ref = createServiceReference("stub-props-null-j2ee.xml", - "stub-props-null-jonas.xml"); - assertNull("Stub properties should be null", ref - .get(JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent")); - } - - public void testStubPropertiesEmpty() throws Exception { - Reference ref = createServiceReference("stub-props-empty-j2ee.xml", - "stub-props-empty-jonas.xml"); - RefAddr ra = ref.get(JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent"); - assertNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent" + " must be null", ra); - RefAddr ra2 = ref.get(JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent2"); - assertNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent2" + " must be null", ra2); - } - - public void testStubPropertiesForGivenPortName() throws Exception { - Reference ref = createServiceReference("stub-props-j2ee.xml", - "stub-props-jonas.xml"); - // port #1 - RefAddr ra = ref.get(JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent"); - assertNotNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent" + " must be not null", ra); - Map returned = (Map) JNDIUtils.getObjectFromBytes((byte[]) ra - .getContent()); - assertFalse("Stub properties shouldn't be empty", returned.isEmpty()); - Properties exp = new Properties(); - exp.setProperty("my.test.property", "test.value"); - exp.setProperty("my.test.property.2", "test.value.2"); - assertEquals( - "Stub Properties for port 'HelloPortComponent' not identical", - exp, returned); - // port #2 - RefAddr ra2 = ref.get(JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent2"); - assertNotNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_STUB_PROPS - + "_HelloPortComponent2" + " must be not null", ra2); - Map returned2 = (Map) JNDIUtils.getObjectFromBytes((byte[]) ra2 - .getContent()); - assertFalse("Stub properties shouldn't be empty", returned2.isEmpty()); - Properties exp2 = new Properties(); - exp2.setProperty("other.test.property", "test.value"); - exp2.setProperty("other.test.property.2", "test.value.2"); - assertEquals( - "Stub Properties for port 'HelloPortComponent' not identical", - exp2, returned2); - } - - public void testCallPropertiesNull() throws Exception { - Reference ref = createServiceReference("call-props-null-j2ee.xml", - "call-props-null-jonas.xml"); - assertNull("Call properties should be null", ref - .get(JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent")); - } - - public void testCallPropertiesEmpty() throws Exception { - Reference ref = createServiceReference("call-props-empty-j2ee.xml", - "call-props-empty-jonas.xml"); - RefAddr ra = ref.get(JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent"); - assertNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent" + " must be null", ra); - RefAddr ra2 = ref.get(JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent2"); - assertNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent2" + " must be null", ra2); - } - - public void testCallPropertiesForGivenPortName() throws Exception { - Reference ref = createServiceReference("call-props-j2ee.xml", - "call-props-jonas.xml"); - // port #1 - RefAddr ra = ref.get(JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent"); - assertNotNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent" + " must be not null", ra); - Map returned = (Map) JNDIUtils.getObjectFromBytes((byte[]) ra - .getContent()); - assertFalse("Stub properties shouldn't be empty", returned.isEmpty()); - Properties exp = new Properties(); - exp.setProperty("my.test.property", "test.value"); - exp.setProperty("my.test.property.2", "test.value.2"); - assertEquals( - "Stub Properties for port 'HelloPortComponent' not identical", - exp, returned); - // port #2 - RefAddr ra2 = ref.get(JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent2"); - assertNotNull("RefAddr " + JAxisServiceFactory.REF_SERVICE_CALL_PROPS - + "_HelloPortComponent2" + " must be not null", ra2); - Map returned2 = (Map) JNDIUtils.getObjectFromBytes((byte[]) ra2 - .getContent()); - assertFalse("Call properties shouldn't be empty", returned2.isEmpty()); - Properties exp2 = new Properties(); - exp2.setProperty("other.test.property", "test.value"); - exp2.setProperty("other.test.property.2", "test.value.2"); - assertEquals( - "Call Properties for port 'HelloPortComponent' not identical", - exp2, returned2); - } - - public void testPortNameListEmpty() throws Exception { - Reference ref = createServiceReference("port-name-list-empty-j2ee.xml", - "port-name-list-empty-jonas.xml"); - assertNull(JAxisServiceFactory.REF_SERVICE_WSDL_PORT_LIST - + " should be null", ref - .get(JAxisServiceFactory.REF_SERVICE_WSDL_PORT_LIST)); - } - - public void testPortNameListWithMultiplePortComponent() throws Exception { - Reference ref = createServiceReference("port-name-list-j2ee.xml", - "port-name-list-jonas.xml"); - RefAddr ra = ref.get(JAxisServiceFactory.REF_SERVICE_WSDL_PORT_LIST); - assertNotNull(JAxisServiceFactory.REF_SERVICE_WSDL_PORT_LIST - + " shouldn't be null", ra); - assertEquals("portname list incorrect", - "HelloPortComponent,HelloPortComponent2", ra.getContent()); - } - - private Reference createServiceReference(String standard, String specific) - throws Exception { - // Get a ServiceRef for the test - ServiceRefDesc sr = createServiceRefDesc(standard, specific); - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - return jfactory.getServiceReference(sr, cl); - } - - public void testGetObjectInstance() throws Exception { - String cfg = "" - + "" - + "" - + "" - + "" - + ""; - Reference ref = new Reference( - "org.objectweb.jonas.jtests.hello.HelloWsServiceLocator", - jfactory.getClass().getName(), null); - ref.add(new StringRefAddr(JAxisServiceFactory.REF_CLIENT_CONFIG, cfg)); - try { - jfactory.getObjectInstance(ref, null, null, null); - } catch (Exception e) { - fail("JAxisServiceFactory.getObjectInstance has failed " + e); - } - // cannot success when using Proxies - } - - private ServiceRefDesc createServiceRefDesc(String srFilename, - String jsrFilename) throws Exception { - // Get Context ClassLoader - ClassLoader cl = Thread.currentThread().getContextClassLoader(); - ServiceRefTLE srTopLevel = new ServiceRefTLE(); - // Load ServiceRef Object - //----------------------------- - // Create Digester - JDigester serviceRefDigester = new JDigester(new ServiceRefRuleSet(""), - false, true, null, null); - // Get Reader - Reader r = new InputStreamReader(cl.getResourceAsStream(srFilename)); - // Parse - serviceRefDigester.parse(r, srFilename, srTopLevel); - // Load JonasServiceRef Object - //----------------------------- - // Create Digester - JDigester jonasServiceRefDigester = new JDigester( - new JonasServiceRefRuleSet(""), false, true, null, null); - - // Read xml file and modify path containing RESOURCES_DIR - InputStream contentIs = cl.getResourceAsStream(jsrFilename); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(contentIs)); - StringWriter stringWriter = new StringWriter(); - String line = null; - while (((line = bufferedReader.readLine()) != null)) { - if (line.indexOf("@@RESOURCES_DIR@@") != -1) { - line = line.replaceAll("@@RESOURCES_DIR@@", "file://" + resources); - } - stringWriter.write(line); - } - - - - // Get Reader - r = new StringReader(stringWriter.toString()); - bufferedReader.close(); - stringWriter.close(); - // Parse - jonasServiceRefDigester.parse(r, jsrFilename, srTopLevel); - ServiceRefDesc sr = new ServiceRefDesc(cl, srTopLevel.getServiceRef(), - srTopLevel.getJonasServiceRef(), resources); - - return sr; - } - - public static void main(String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_AxisService(testtorun)); - } - } -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/ServiceRefTLE.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/ServiceRefTLE.java deleted file mode 100644 index 400f4b755e..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/service/ServiceRefTLE.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.objectweb.jonas.jtests.clients.service; - -import org.ow2.jonas.deployment.common.xml.TopLevelElement; -import org.ow2.jonas.deployment.common.xml.ServiceRef; -import org.ow2.jonas.deployment.common.xml.JonasServiceRef; - -public class ServiceRefTLE implements TopLevelElement { - - private ServiceRef sr = null; - private JonasServiceRef jsr = null; - - public void addServiceRef(ServiceRef sr) { - this.sr = sr; - } - - public void addJonasServiceRef(JonasServiceRef jsr) { - this.jsr = jsr; - } - - public ServiceRef getServiceRef() { - return sr; - } - - public JonasServiceRef getJonasServiceRef() { - return jsr; - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/A_WsGen.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/A_WsGen.java deleted file mode 100644 index 35937ae838..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/A_WsGen.java +++ /dev/null @@ -1,123 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.wsgen; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -import org.objectweb.jonas.jtests.util.JWebServicesTestCase; - -public abstract class A_WsGen extends JWebServicesTestCase { - private String jonasbase = null; - private String resources = null; - private String basedir = null; - - public A_WsGen(String name) { - super(name); - } - - public void setUp() throws Exception { - super.setUp(); - - jonasbase = System.getProperty("jonas.base.client"); - resources = System.getProperty("ws.resources"); - basedir = System.getProperty("basedir"); - - } - - public void tearDown() throws Exception { - super.tearDown(); - } - - protected String getJonasBaseFile(String path) { - return jonasbase + File.separator + path; - } - - protected String getResourceFile(String path) { - return resources + File.separator + path; - } - - protected String getTestFile(String path) { - return basedir + File.separator + path; - } - - protected static boolean deleteDirectory(String dir) throws IOException { - File file = new File(dir); - boolean isDestroy = true; - if (file.isDirectory()) { - // destroy all childs - File[] childs = file.listFiles(); - for (int i = 0; i < childs.length; i++) { - isDestroy &= deleteDirectory(childs[i].getAbsolutePath()); - } - } - return isDestroy && file.delete(); - - } - - protected static String unpackJar(JarFile file) throws IOException { - String tmp = createTempDir(); - - for (Enumeration e = file.entries(); e.hasMoreElements();) { - ZipEntry ze = (ZipEntry) e.nextElement(); - - // If is not a directory - if (!ze.getName().endsWith("/")) { - String newFilename = tmp + File.separator + ze.getName(); - File entryFile = new File(newFilename); - - entryFile.getParentFile().mkdirs(); - FileOutputStream fos = new FileOutputStream(entryFile); - InputStream is = file.getInputStream(ze); - - int n = 0; - byte[] buffer = new byte[1024]; - - while ((n = is.read(buffer)) > 0) { - fos.write(buffer, 0, n); - } - - fos.close(); - is.close(); - } - } - - return tmp; - } - - protected static String createTempDir() throws IOException { - File tmpDir = File.createTempFile("wsgen-tests", null, null); - tmpDir.delete(); - tmpDir.mkdir(); - return tmpDir.getAbsolutePath(); - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/F_WsGen.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/F_WsGen.java deleted file mode 100644 index 31bb364f17..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/clients/wsgen/F_WsGen.java +++ /dev/null @@ -1,177 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.clients.wsgen; - -import java.io.File; -import java.util.Enumeration; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; - -import junit.framework.Test; -import junit.framework.TestSuite; - - -/** - * test case for WsGen - */ -public class F_WsGen extends A_WsGen { - - public F_WsGen(String name) { - super(name); - } - - public static Test suite() { - return new TestSuite(F_WsGen.class); - } - - public void setUp() throws Exception { - super.setUp(); - } - - public void tearDown() throws Exception { - super.tearDown(); - } - - /* - * Tests : - * - webapps (endpoint, clients, both, none) (various Schemas, DTD) - * - ejbjars (endpoint, clients, both, none) (various Schemas, DTD) - * - apps (combine above examples) + () - */ - - public void testWebappEndpointAlone() throws Exception { - - // Check entries in JarFile - String [] entries = new String[] { "META-INF/MANIFEST.MF", - "WEB-INF/wsdl/AddressBookPort.wsdl", - "WEB-INF/wsdl/AddressBook.xsd", - "WEB-INF/web.xml", - "WEB-INF/webservices.xml", - "WEB-INF/jonas-webservices.xml", - "WEB-INF/mapping.xml", - "WEB-INF/classes/org/objectweb/jonas/jtests/servlets/endpoint/Address.class", - "WEB-INF/classes/org/objectweb/jonas/jtests/servlets/endpoint/AddressBook.class", - "WEB-INF/classes/org/objectweb/jonas/jtests/servlets/endpoint/AddressBookImpl.class", - "WEB-INF/classes/org/objectweb/jonas/jtests/servlets/endpoint/AddressBookException.class"}; - - JarFile alone = new JarFile(getJonasBaseFile("webapps" + File.separator + "webendpoint.war")); - - checkEntries(entries, alone); - - assertEquals("entries number doesn't match", entries.length, countEntries(alone)); - - } - - public void testWsClientEjb() throws Exception { - - // Check entries in JarFile - String path = "org/objectweb/jonas/jtests/beans/wsclient/"; - String [] entries = new String[] { "META-INF/MANIFEST.MF", - "META-INF/jonas-ejb-jar.xml", - "META-INF/ejb-jar.xml", - "META-INF/wsdl/query.wsdl"}; - - JarFile wsclient = new JarFile(getJonasBaseFile("ejbjars" + File.separator + "wsclient.jar")); - - checkEntries(entries, wsclient); - - } - - public void testTimeEndpoint() throws Exception { - // Check entries in JarFile (Wrapping Application) - String [] entries = new String[] { "META-INF/application.xml", - "META-INF/MANIFEST.MF", - "time.war", - "time.jar", - "time-client.jar"}; - - JarFile time = new JarFile(getJonasBaseFile("apps" + File.separator + "time-test.ear")); - - checkEntries(entries, time); - - assertEquals("entries number doesn't match", 5, countEntries(time)); - - // Check entries in JarFile (Wrapped WebApp) - String tmp = unpackJar(time); - - // Check war correctly created - JarFile web = new JarFile(tmp + File.separator - + "time.war"); - String [] webEntries = new String[] { "META-INF/MANIFEST.MF", - "WEB-INF/web.xml", - "WEB-INF/web-jetty.xml", - "META-INF/context.xml", - "WEB-INF/sources/deploy-server-0.wsdd", - "WEB-INF/deploy-server-0.wsdd"}; - - // TODO should improve entries check : deploy-server-0 may be deploy-server-25 !! - //checkEntries(webEntries, web); - assertEquals("web entries number doesn't match", webEntries.length, countEntries(web)); - - deleteDirectory(tmp); - - } - - public void checkEntries(String [] entries, JarFile file) { - - for (int i = 0; i < entries.length; i++) { - ZipEntry ze = file.getEntry(entries[i]); - assertNotNull("missing entry '" + entries[i] + "' in '" + file.getName() + "'", ze); - } - } - - public int countEntries(JarFile file) { - Enumeration e = file.entries(); - int count = 0; - while (e.hasMoreElements()) { - ZipEntry ze = (ZipEntry) e.nextElement(); - // not a directory - if (!ze.getName().endsWith("/")) { - count++; - } - - } - return count; - } - - - public static void main (String args[]) { - String testtorun = null; - // Get args - for (int argn = 0; argn < args.length; argn++) { - String s_arg = args[argn]; - if (s_arg.equals("-n")) { - testtorun = args[++argn]; - } - } - if (testtorun == null) { - junit.textui.TestRunner.run(suite()); - } else { - junit.textui.TestRunner.run(new F_WsGen(testtorun)); - } - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/hello/HelloWsServiceLocator.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/hello/HelloWsServiceLocator.java deleted file mode 100644 index 93a4a2236f..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/hello/HelloWsServiceLocator.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * HelloWsServiceLocator.java - * - * This file was auto-generated from WSDL - * by the Apache Axis WSDL2Java emitter. - */ - -package org.objectweb.jonas.jtests.hello; - -import javax.xml.namespace.QName; - -public class HelloWsServiceLocator extends org.ow2.jonas.ws.axis.JService implements org.objectweb.jonas.jtests.hello.HelloWsService { - - public HelloWsServiceLocator(String name, QName qname) { - - } - - // Use to get a proxy class for HelloPortComponent - private final java.lang.String HelloPortComponent_address = "http://dummy_location/HelloPortComponent"; - - public java.lang.String getHelloPortComponentAddress() { - return HelloPortComponent_address; - } - - // The WSDD service name defaults to the port name. - private java.lang.String HelloPortComponentWSDDServiceName = "HelloPortComponent"; - - public java.lang.String getHelloPortComponentWSDDServiceName() { - return HelloPortComponentWSDDServiceName; - } - - public void setHelloPortComponentWSDDServiceName(java.lang.String name) { - HelloPortComponentWSDDServiceName = name; - } - - public org.objectweb.jonas.jtests.hello.HelloWs getHelloPortComponent() throws javax.xml.rpc.ServiceException { - java.net.URL endpoint; - try { - endpoint = new java.net.URL(HelloPortComponent_address); - } - catch (java.net.MalformedURLException e) { - throw new javax.xml.rpc.ServiceException(e); - } - return getHelloPortComponent(endpoint); - } - - public org.objectweb.jonas.jtests.hello.HelloWs getHelloPortComponent(java.net.URL portAddress) throws javax.xml.rpc.ServiceException { - try { - org.objectweb.jonas.jtests.hello.HelloPortComponentSoapBindingStub _stub = new org.objectweb.jonas.jtests.hello.HelloPortComponentSoapBindingStub(portAddress, this); - _stub.setPortName(getHelloPortComponentWSDDServiceName()); - return _stub; - } - catch (org.apache.axis.AxisFault e) { - return null; - } - } - - /** - * For the given interface, get the stub implementation. - * If this service has no port for the given interface, - * then ServiceException is thrown. - */ - public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException { - try { - if (org.objectweb.jonas.jtests.hello.HelloWs.class.isAssignableFrom(serviceEndpointInterface)) { - org.objectweb.jonas.jtests.hello.HelloPortComponentSoapBindingStub _stub = new org.objectweb.jonas.jtests.hello.HelloPortComponentSoapBindingStub(new java.net.URL(HelloPortComponent_address), this); - _stub.setPortName(getHelloPortComponentWSDDServiceName()); - return _stub; - } - } - catch (java.lang.Throwable t) { - throw new javax.xml.rpc.ServiceException(t); - } - throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface: " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName())); - } - - /** - * For the given interface, get the stub implementation. - * If this service has no port for the given interface, - * then ServiceException is thrown. - */ - public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException { - if (portName == null) { - return getPort(serviceEndpointInterface); - } - String inputPortName = portName.getLocalPart(); - if ("HelloPortComponent".equals(inputPortName)) { - return getHelloPortComponent(); - } - else { - java.rmi.Remote _stub = getPort(serviceEndpointInterface); - ((org.apache.axis.client.Stub) _stub).setPortName(portName); - return _stub; - } - } - - public javax.xml.namespace.QName getServiceName() { - return new javax.xml.namespace.QName("http://hello.simple", "HelloWsService"); - } - - private java.util.HashSet ports = null; - - public java.util.Iterator getPorts() { - if (ports == null) { - ports = new java.util.HashSet(); - ports.add(new javax.xml.namespace.QName("HelloPortComponent")); - } - return ports.iterator(); - } - -} diff --git a/jonas_tests/ws/src/org/objectweb/jonas/jtests/util/JWebServicesTestCase.java b/jonas_tests/ws/src/org/objectweb/jonas/jtests/util/JWebServicesTestCase.java deleted file mode 100644 index c9d203c1a2..0000000000 --- a/jonas_tests/ws/src/org/objectweb/jonas/jtests/util/JWebServicesTestCase.java +++ /dev/null @@ -1,454 +0,0 @@ -/** - * JOnAS: Java(TM) Open Application Server - * Copyright (C) 1999 Bull S.A. - * Contact: jonas-team@objectweb.org - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or 1any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - * - * Initial developer: Florent BENOIT - * -------------------------------------------------------------------------- - * $Id$ - * -------------------------------------------------------------------------- - */ - -package org.objectweb.jonas.jtests.util; - -import java.io.File; -import java.io.IOException; -import java.util.Set; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; - -import junit.framework.TestCase; - -import com.meterware.httpunit.WebConversation; - -/** - * Define a class to add useful methods for test the webservices - * - Deploy ear, war and beans - * - Retrieve initial context - * @author Florent Benoit - */ -public class JWebServicesTestCase extends TestCase { - - /** - * Name of the JOnAS server used for tests - */ - private static String jonasName = "jonas"; - - /* - * JONAS_BASE - */ - protected static String jb = null; - - /** - * Initial context used for lookup - */ - protected static Context ictx = null; - - /** - * Connection to the MBeanServer - */ - private static MBeanServerConnection cnx = null; - - /** - * Conversation used for HttpUnit - */ - protected WebConversation wc = null; - - /** - * URL used for the constructor - */ - protected String url = null; - - /** - * Prefix for build URLs - */ - private String prefixUrl = null; - - /** - * Add to the specified url the prefix - * @param url relative URL - * @return absolute path of URL - */ - protected String getAbsoluteUrl (String url) { - return (this.prefixUrl + url); - } - - - /** - * Make an absolute path with the filename. - */ - public String absPath(String name, String extension) { - - String ret = ""; - if ( extension.equals(".jar")) { - ret = jb + "/ejbjars/" + name + ".jar"; - } else if ( extension.equals(".war")) { - ret = jb + "/webapps/" + name + ".war"; - } else if (extension.equals(".ear")) { - ret = jb + "/apps/" + name + ".ear"; - } - return ret; - } - private static JMXServiceURL jmxServerUrl = null; - private static String urlSuffix = "service:jmx:"; - private static String registry = null; - private static String defaultRegistry = "rmi://localhost:1099"; - private static String protocol = null; - private static String defaultProtocol = "jrmp"; - - /* - * Get Connection to the MBean server - * Set the static cnx variable - */ - private void getJmxCnx() { - if (cnx == null) { - try { - if (registry == null) { - registry = defaultRegistry; - } - registry = registry + "/"; - int indx = registry.lastIndexOf(":"); - String st = registry.substring(0, indx); - String serverUrl = urlSuffix + st +"/jndi/"+registry; - if (protocol == null) { - protocol = defaultProtocol; - } - String connectorName = protocol.concat("connector_"); - connectorName = connectorName.concat(jonasName); - serverUrl = serverUrl.concat(connectorName); - jmxServerUrl = new JMXServiceURL(serverUrl); - JMXConnector cntor = JMXConnectorFactory.connect(jmxServerUrl, null); - cnx = cntor.getMBeanServerConnection(null); - System.out.println("server reached via: "+serverUrl); - } catch (IOException e) { - System.err.println("Can't reach server " + jonasName - + " as couldn't create JMXConnector (" + e.getMessage() - + ")"); - System.err.println("Check name, registry and protocol options."); - System.exit(2); - } - } - } - - /* - * ObjectName of y=the J2eeServerMBean - */ - private static ObjectName j2eeserver = null; - - /* - * Get the ObjectName of the J2eeServerMBean - * @return the ObjectName - */ - private ObjectName getJ2eeServer() { - if (j2eeserver == null) { - try { - ObjectName on = ObjectName.getInstance("*:j2eeType=J2EEServer,name=" + jonasName); - Set j2eeservers = cnx.queryNames(on, null); - if (j2eeservers.isEmpty()) { - System.err.println("Can't admin server " + jonasName + ": didn't found J2EEServer MBean"); - System.exit(2); - } - j2eeserver = (ObjectName) j2eeservers.iterator().next(); - } catch (Exception e) { - System.err.println("Can't invoke mbeanServer: " + e); - } - } - return j2eeserver; - } - - /** - * Initialize the port used by tests and the prefix - */ - private void init() { - String port = System.getProperty("http.port"); - if (port == null) { - port = "9000"; - } - - prefixUrl = "http://localhost:" + port; - } - - /** - * Constructor with a specified name - * @param s the name - */ - public JWebServicesTestCase(String s) { - super(s); - init(); - } - /** - * Constructor with a specified name and url - * @param s the name - * @param url the url which can be used - */ - public JWebServicesTestCase(String s, String url) { - super(s); - wc = new WebConversation(); - init(); - this.url = getAbsoluteUrl(url); - } - - /** - * Get initialContext - * @return the initialContext - * @throws NamingException if the initial context can't be retrieved - */ - private Context getInitialContext() throws NamingException { - return new InitialContext(); - } - - /** - * Common setUp routine, used for every test. - * @throws Exception if an error occurs - */ - - protected void setUp() throws Exception { - try { - // get InitialContext - if (ictx == null) { - ictx = getInitialContext(); - } - jb = System.getProperty("jonas.base"); - registry = System.getProperty("registry"); - protocol = System.getProperty("protocol"); - getJmxCnx(); - - } catch (NamingException e) { - System.err.println("Cannot setup test: " + e); - e.printStackTrace(); - } - } - - - /** - * Load an ear file in the jonas server - * @param filename ear file, without ".ear" extension - * @throws Exception if an error occurs - */ - public void useEar(String fname) throws Exception { - String filename = absPath(fname, ".ear"); - try { - // Load ear in JOnAS if not already loaded. - if (!isEarLoaded(filename)) { - loadEar(filename); - } - - } catch (Exception e) { - throw new Exception("Cannot load Ear : " + e.getMessage()); - } - - } - - /** - * Load a war file in the jonas server - * @param filename war file, without ".war" extension - * @throws Exception if an error occurs - */ - - public void useWar(String fname) throws Exception { - String filename = absPath(fname, ".war"); - try { - // Load war in JOnAS if not already loaded. - if (!isWarLoaded(filename)) { - loadWar(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load War : " + e.getMessage()); - } - } - - - - /** - * Load a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void useBeans(String fname) throws Exception { - try { - String filename = absPath(fname, ".jar"); - // Load bean in EJBServer if not already loaded. - if (!isJarLoaded(filename)) { - addBeans(filename); - } - } catch (Exception e) { - throw new Exception("Cannot load Bean : " + e.getMessage()); - } - } - - - - /** - * Unload a bean jar file in the jonas server - * @param filename jar file, without ".jar" extension - * @throws Exception if an error occurs - */ - public void unUseBeans(String filename) throws Exception { - try { - - if (isJarLoaded(filename + ".jar")) { - unloadBeans(filename + ".jar"); - } - } catch (Exception e) { - throw new Exception("Cannot unload Bean : " + e.getMessage()); - } - } - - - - /* - * isLoaded remote operation - */ - private boolean isLoaded(String filename) { - boolean ret = false; - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - Boolean r = (Boolean) cnx.invoke(getJ2eeServer(), "isDeployed", params, signature); - ret = r.booleanValue(); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - return ret; - } - - /** - * isJarLoaded remote operation - * @param filename jar file, with ".jar" extension - */ - private boolean isJarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - public void addBeans(String filename) { - - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * loadEar remote operation - * @param filename war file, with ".war" extension - */ - public void loadWar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - - /** - * isWarLoaded remote operation - * @param filename war file, with ".war" extension - */ - private boolean isWarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - /** - * isEarLoaded remote operation - * @param filename ear file, with ".ear" extension - */ - private boolean isEarLoaded(String filename) { - boolean ret = false; - try { - return isLoaded(filename); - - } catch (Exception e) { - System.err.println("Cannot test bean: " + e); - } - - return ret; - } - /** - * loadEar remote operation - * @param filename ear file, with ".ear" extension - */ - public void loadEar(String filename) { - try { - - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "deploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot deploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot load bean: " + e); - } - } - /** - * unloadBean remote operation - * @param filename jar file, with ".jar" extension - */ - public void unloadBeans(String filename) { - try { - String[] params = {filename}; - String[] signature = {"java.lang.String"}; - try { - cnx.invoke(getJ2eeServer(), "undeploy", params, signature); - } catch (Exception e) { - System.err.println("Cannot undeploy " + filename + ": " + e); - } - - } catch (Exception e) { - System.err.println("Cannot unload bean: " + e); - } - } -} diff --git a/jonas_doc/plans/pom.xml b/plans/pom.xml similarity index 100% rename from jonas_doc/plans/pom.xml rename to plans/pom.xml diff --git a/jonas_doc/pom.xml b/pom.xml similarity index 100% rename from jonas_doc/pom.xml rename to pom.xml -- GitLab

    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𝔱^h#H@i2vbxBnYlc#m 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%0DIF~5Z)ZkBM9sh*r6ookB; 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